From nobody Mon May 25 06:41:57 2026 Received: from mail-dy1-f181.google.com (mail-dy1-f181.google.com [74.125.82.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBABB269CE7 for ; Sun, 17 May 2026 06:26:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778999170; cv=none; b=pKDymoFumVOioRDOpLNfjlYFhpyueq5sLh6S4eKxJjVssP18kzRbC5oiJyR4ecEzk6Xek87r0fHZlxm4rjxSkxSAe5MfLKgRMWbki2U2SSELjI4o3aScvRnxqpArf0o46NHPKLha7oBUO1cpuCjY81lLoLi4cv9JTEeL7URmnr0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778999170; c=relaxed/simple; bh=vUqB4yVX3zAJzQFdOE7mli6Bb/XeWPhigapaBpgt0nE=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=fvm3of9ksUFHnzbSfRu8JEseg+MpQ7d6gpuqZWKV8SVZrR88T3RVYpbkxf71ZF62liVzS+C5CcYXxDGFooF+GmSl5/g71UVlU1jlAdpkdyLsSVEdOJyHessAbU6UBD0B5Qa92/QM5c0bV+jrQOcCVcd5AVcjosfud9f78o7ctfI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pcc.me.uk; spf=pass smtp.mailfrom=pcc.me.uk; dkim=pass (2048-bit key) header.d=pcc-me-uk.20251104.gappssmtp.com header.i=@pcc-me-uk.20251104.gappssmtp.com header.b=lcYOpY1y; arc=none smtp.client-ip=74.125.82.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pcc.me.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pcc.me.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pcc-me-uk.20251104.gappssmtp.com header.i=@pcc-me-uk.20251104.gappssmtp.com header.b="lcYOpY1y" Received: by mail-dy1-f181.google.com with SMTP id 5a478bee46e88-2f0d3e07e30so5604410eec.0 for ; Sat, 16 May 2026 23:26:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pcc-me-uk.20251104.gappssmtp.com; s=20251104; t=1778999167; x=1779603967; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=fD48aiciFvO/6QSCRaKgqQTSwUDqCgYJGqwbqc21HlU=; b=lcYOpY1ytCx5gKdtAmBbMHJT3XOa5lBr5+HwR/5KFLIySKgnpSa8SjpjACnaBlEslt MaQ1xDPGcICVv8JR+grIGoEbrWnv+t2y9OAY0XOtEK5LQ1hthWBTsC+i+IV7Xo0HjAEm gR4HHzCjNoj9yYtTg8vB3DwWsy8Yahl1Aw8hznZ5CB3EuD9QvzD1AdiKMK5PrQPaSMWw 5upfYKado1kE2OxVMr+rpdT48fLX2cqWr176DJdKNuh4mHIbI6pAG5ED4FQDL+vwkxBx qmOHy47QPCJq0hwmmeMVFpc8BiStR4Fv9v0zwl72zG652zVZZh3zy/JY1JfBmP7cNdBB 4fIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778999167; x=1779603967; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=fD48aiciFvO/6QSCRaKgqQTSwUDqCgYJGqwbqc21HlU=; b=TMbPPf+mGm7zKEaQg5cU+cx3HUhwbGaqd2oKyQe/Tov+Pka+bgDP8CL5of7onl5mJx sxr/PJTFvPJHHHcrt2O0ZobTAJ+rKwH9b2kAuaVHeFIumk4VnwT3tU2GG4VU0W2RlPc7 i0EfA6WzZGLejYW1VW5F1HVMgdj8bnbQN2wZ/2FAc42KZMYUCc9OpK6/dRmplTS+YKzZ HbcpUkbVAtl1GV95pJG7CvF4w0Bh5/nHo55ncUQQEwTCHZlacK8MT+knCy67pyC8/q+k W7j1ALNVXmgDwlM1ZutCZbc7iE3kPVzjeqmH+yRwVQczoZ7QnBFa0lk4gxYQ95XETlOm MP9w== X-Forwarded-Encrypted: i=1; AFNElJ+ZHNg5VBsuuWauirJYQK+ZBq6nrNaRI5s9JbesUhXWZkW8RENcHTgDHw1NS1gMMeCG9GnRpYtxmfeuH4w=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+p/+0hGey2iK9332fUdegmMRWZX8TryFJy+frOGTN1lNoP/Pc 9txPdP7fhHTd+efVuELMPoJ8CJy7OUnQai918ZJg85rcA/QuCBnBTNv7NteAdnaXXaw= X-Gm-Gg: Acq92OF7ACkofcI/rq8B9nOEOpkJDNqFKC7PzOYoAPjsuMTnQvz6ozPHJNpebJeLAvY U6wVxKV+QBZ29R+mAwVAsOw+J9MzyoWfYg6lFNEc8rGSsbaWeBKM8QYn9pOfwhCYfXfypQwNRmV eYxkzZ426/mgScH509+Q1KDE2Z+zelY1N2//ItFu2yNZyxElcb0VUvLQ/G5BJqBS7R9kVIf6L81 KiyOl6Xq4DK8D3ITsrgYqLiCgTgXlJPp6iO/mkLyuSgq/hzqSyFFF3ktfvdN+6VeM8bVTTkUzrs Wf59Q2WH+OVu3HMJGAGoySEyb3oBFG6Das9BIl0AC6JzSFxtovOfxs4D4HJF/I6Mjr+WTlONd7h m6DM1Ny6g8/QP0adRJnH0eCSvXFkV5IFYHh+cyf0L9JqZK6ZJy6rSR4VEU+goGoTMvPB5HdCXNX aT0DJ3KzLLWbF+V5uhMKPlTGIJzvSC3a72MP7w5sRnwBvazW3kTslNXQU= X-Received: by 2002:a05:7301:2f85:b0:2ea:ed7c:912f with SMTP id 5a478bee46e88-303986a1430mr4952782eec.27.1778999166750; Sat, 16 May 2026 23:26:06 -0700 (PDT) Received: from localhost (c-67-180-161-137.hsd1.ca.comcast.net. [67.180.161.137]) by smtp.gmail.com with UTF8SMTPSA id 5a478bee46e88-302944ffb85sm11402308eec.7.2026.05.16.23.26.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 16 May 2026 23:26:06 -0700 (PDT) From: Peter Collingbourne To: Mark Brown Cc: Patrice Chotard , Boris Brezillon , Christophe Kerello , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Peter Collingbourne Subject: [PATCH] spi: use udelay() for short polling delays Date: Sat, 16 May 2026 23:25:54 -0700 Message-ID: <20260517062554.117448-1-peter@pcc.me.uk> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" A short polling delay, such as the delay of 5us (SPINAND_READ_POLL_DELAY_US) provided by the SPI NAND driver, can become a 1/HZ (order of ms) delay caused by the usleep_range() call in read_poll_timeout(), significantly reducing SPI NAND access performance. Fix it by implementing the polling delay with udelay() (via read_poll_timeout_atomic()) if it is short enough, matching how the initial delay is handled. Fixes: c955a0cc8a28 ("spi: spi-mem: add automatic poll status functions") Signed-off-by: Peter Collingbourne --- drivers/spi/spi-mem.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c index a09371a075d2..914e35e51cea 100644 --- a/drivers/spi/spi-mem.c +++ b/drivers/spi/spi-mem.c @@ -1005,10 +1005,19 @@ int spi_mem_poll_status(struct spi_mem *mem, usleep_range((initial_delay_us >> 2) + 1, initial_delay_us); =20 - ret =3D read_poll_timeout(spi_mem_read_status, read_status_ret, - (read_status_ret || ((status) & mask) =3D=3D match), - polling_delay_us, timeout_ms * 1000, false, mem, - op, &status); + if (polling_delay_us < 10) + ret =3D read_poll_timeout_atomic( + spi_mem_read_status, read_status_ret, + (read_status_ret || ((status)&mask) =3D=3D match), + polling_delay_us, timeout_ms * 1000, false, mem, + op, &status); + else + ret =3D read_poll_timeout( + spi_mem_read_status, read_status_ret, + (read_status_ret || ((status)&mask) =3D=3D match), + polling_delay_us, timeout_ms * 1000, false, mem, + op, &status); + if (read_status_ret) return read_status_ret; } --=20 2.54.0