Re: [PATCH] nvme: make firmware activation poll interval configurable
From: guzebing
Date: Thu Jul 09 2026 - 05:22:39 EST
On 7/9/26 2:42 PM, Christoph Hellwig wrote:
> On Sat, Jun 27, 2026 at 09:06:10AM +0800, guzebing wrote:
>> From: Guzebing <guzebing@xxxxxxxxxxxxx>
>>
>> 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
>> interval can add noticeable latency before the driver observes
>> completion.
>>
>> Add an nvme_core.fw_act_poll_interval_ms module parameter to make the
>> poll interval tunable. Keep the default at 100 ms to preserve existing
>> behavior, and accept values from 10 ms to 100 ms so systems that need
>> faster completion detection can opt in to a shorter interval.
>>
>> Signed-off-by: Guzebing <guzebing@xxxxxxxxxxxxx>
>> ---
>> We recently observed this issue while performing online firmware
>> updates for Gen5 NVMe SSDs in a production environment.
>>
>> During firmware activation, the kernel quiesces I/O. Detecting the end
>> of firmware activation earlier lets the driver unquiesce I/O earlier,
>> which is important for the long-tail I/O latency of production
>> workloads.
>
> What value does this device report in the Maximum Time for Firmware
> Activation (MTFA) field? It might make sense to scale the polling
> time as a fraction of that instead of requiring a manual override.
>
The Samsung PM9D3a Gen5 SSD reports MTFA = 10, i.e. 1000 ms.
I also checked another device, an Intel/Solidigm P5520 Gen4 drive. It
reports MTFA = 100, i.e. 10000 ms, while the observed online activation
time is about 800 ms.
I agree that deriving the polling interval from MTFA would be better
than adding a module parameter. Given that MTFA is a conservative upper
bound rather than a good estimate of the common activation time, would
using a small fraction of it, for example MTFA / 100 clamped to 10..100
ms, be a reasonable policy for v2?
That would give 10 ms for the PM9D3a device above, while keeping the
current 100 ms interval for the P5520 case and for large-MTFA devices.