From nobody Sat Jul 25 17:33:46 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (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 C764447DFAB for ; Wed, 15 Jul 2026 11:44:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784115873; cv=none; b=j75EaMubfY1nU+0nhCL4jFSmeLk8+UTlWWw1sCoaAg5yUHnfSPQZ5HHrwelFK4AeqRFcxjf99yyYlj7Tyf/WLIMIcqISXYJb8eRkssOcLLTYjOamVK4kBSdSDObN0ceiA8iYg7skqh0tdbjOlQvC08+Re48+dUZRRuhGudU5gGs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784115873; c=relaxed/simple; bh=kwzh4FeA0GX5gDMbH6uN018QQxI0yuKbAw7bJAmfJUM=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=iixW1fJhx/Ada4QqlTY9ccmqP2ub5B6jkM2Pq5cb5j8tdLCnWu8GdhCjn4kLHAhJKo5wq8sJ5FVAtmo9eq914A3PHSFvfB9DkNPTJxsE1T6EsSfckjViNc5feYwI6NwHvgGZKpa4YWHXGsh04Lo+NKMxTPMRC/hOcCnmm9ISD58= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CuBUDRa/; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CuBUDRa/" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-84867f07d63so6047977b3a.2 for ; Wed, 15 Jul 2026 04:44:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784115870; x=1784720670; 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:content-type; bh=EFUaahqQTIsq/3mncvKpCUZdl3I/8KWM6M0gU6bQrhw=; b=CuBUDRa/JBIfGqNvLPMzlGHYVgftlmPDrlpEYlfDdsG7BayHQW45DKvDM3SOlYKz7O Sr804KNtJxnzLSPzBzjMewQ0BPLLCSfD252zo+nZEFsGiJq1EK8broiiKYmGI/52uoq7 8QWU3LLVdSvaGEEI2dk/un47lj64dc0ChlCmuc0hGC+cB0RAJPre76RzqoyZ8bQQV+cP zK9essjoHIvNUZG2+D1jElj5yv24IzhufFnV8ahBbyyHZMR7bssVxwSUASqPGxXz0pmO 7ceqPwJKg8F5z7jWLmv2lOdrxWGHYP6fgLfHTTRXgvyU+IQ7YLgEis1KnO0bGS1eWlUS zAJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784115870; x=1784720670; 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:content-type; bh=EFUaahqQTIsq/3mncvKpCUZdl3I/8KWM6M0gU6bQrhw=; b=Gl6W5j0NYUOQtRBNVkRn76p4fP1PT8lBUKgHrpwSPXxrWvpvfYQfLSoAAHi7PLlrFr UScstMuUoiWlthjirwfuZ7ezvOISo2dCIhHH9qUShYQMik9oJymbS40blkM++zsqXZYR +A0wEPqXV9QGvvEtY7HC6z5Cem9JoXTvagVDe0xFAYK6283u1LnrhO0SS6HasOKjUVy7 72eNap4DaSMrqNgp9lte/4FUgMjfVP3ggq5apyivQvFBNLfxOnY1UkPTJGQVbT9De0mJ 1f1S+j/6mnel0459dJdyeuFEN5noo4x2FPnNvSetJliaaGyEh+PmenX3X32kabeRXaeY tfhw== X-Forwarded-Encrypted: i=1; AHgh+Rr/TH3XXtc5qWNvG9IETv9G/WmGW2PuF6Zjd2Zk4YnI9p3F12/WKMjz2C3qs72DXMa5qpab/AoYQLDM3DM=@vger.kernel.org X-Gm-Message-State: AOJu0Yzav/8KgZAQ+RVOTRR9JDXgH85R7QaXHpfEBM2zcVAb1XHJa6EW 3crFHRhC1zvuE2j1Ay5SwisODhdZaxtH3VWqF7mjgYPMEVLs5au93rtB X-Gm-Gg: AfdE7cm6m+TmQBbaZv5cxcyXUWXLF9OpMnckUpNKezjw6IEXXy60EICygCGSK+NEU+O r6qkK0WP4EsyrBd2DZ72h8fsqbjfb6BW1N5AuOAh9njSs7lukfxdyz+3NJWEyBercvGWQJjGj8L abfyrNLCjMcLtbzzUkl4sUa+yb5WiboZuR3N3BR9bKSxjOLWzx402aJJP+CuIW1U9K/Ywq06qSX 74ozl6Tvl6DwT3YV/N6Upp2/t03FWzhy4OhboAb22Fj90EVeBQ11HGTfQWAWZdv9ZAq/U4p68wA U/B/oMt3WjhUHV33xNFL8g8aA7w35jcdMqlUKCGvFo050c+AlfwTry7iZGykS8Qo0pegkNf2esg kHSZD0nyqmyni29hTKMJ5TnKSq26XECsUy7ZNEQWcb54V4g3hmSy/Gt1E3LPtzl+GpOaSMobPkS 5ClvWn X-Received: by 2002:a05:6a00:a883:b0:848:56ff:6ce4 with SMTP id d2e1a72fcca58-84a671da4d7mr2162722b3a.5.1784115869748; Wed, 15 Jul 2026 04:44:29 -0700 (PDT) Received: from n232-175-066.byted.org ([240e:83:200::35e]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84a4f238930sm3021341b3a.3.2026.07.15.04.44.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Jul 2026 04:44:29 -0700 (PDT) From: guzebing To: kbusch@kernel.org, axboe@kernel.dk, hch@lst.de, sagi@grimberg.me Cc: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, Guzebing Subject: [PATCH v3] nvme: reduce firmware activation poll interval Date: Wed, 15 Jul 2026 19:44:01 +0800 Message-Id: <20260715114401.1084214-1-guzebing1612@gmail.com> X-Mailer: git-send-email 2.20.1 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" From: Guzebing nvme_fw_act_work() polls the controller processing-paused status every 100 ms while firmware activation is pending. Some devices can complete online activation in only a few hundred milliseconds, so the fixed 100 ms interval can add up to 100 ms of latency before the driver observes completion. nvme_wait_ready() already uses a 1 to 2 ms delay between CSTS reads. Use the same delay in nvme_fw_act_work() for consistency, and add a common helper for both paths. Signed-off-by: Guzebing --- Changes in v3: - Add a common polling delay helper for nvme_fw_act_work() and nvme_wait_ready(). Changes in v2: - Drop the module parameter and use a fixed 1 to 2 ms poll interval. v2: https://lore.kernel.org/linux-nvme/20260714092846.3381169-1-guzebing161= 2@gmail.com/ v1: https://lore.kernel.org/linux-nvme/20260627010610.47768-1-guzebing1612@= gmail.com/ drivers/nvme/host/core.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 453c1f0b2dd09..499fe36792266 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -2688,6 +2688,16 @@ const struct block_device_operations nvme_bdev_ops = =3D { .pr_ops =3D &nvme_pr_ops, }; =20 +/* + * Wait between CSTS reads in nvme_wait_ready() and nvme_fw_act_work(). + * A 1 to 2 ms interval avoids excessive register reads while allowing + * changes in controller status to be detected promptly. + */ +static void nvme_busy_wait(void) +{ + usleep_range(1000, 2000); +} + static int nvme_wait_ready(struct nvme_ctrl *ctrl, u32 mask, u32 val, u32 timeout, const char *op) { @@ -2701,7 +2711,7 @@ static int nvme_wait_ready(struct nvme_ctrl *ctrl, u3= 2 mask, u32 val, if ((csts & mask) =3D=3D val) break; =20 - usleep_range(1000, 2000); + nvme_busy_wait(); if (fatal_signal_pending(current)) return -EINTR; if (time_after(jiffies, timeout_jiffies)) { @@ -4813,7 +4823,7 @@ static void nvme_fw_act_work(struct work_struct *work) nvme_try_sched_reset(ctrl); return; } - msleep(100); + nvme_busy_wait(); } =20 if (!nvme_change_ctrl_state(ctrl, NVME_CTRL_CONNECTING) ||