[PATCH 3/4] nvme-apple: move blk_mq_update_nr_hw_queues after nvme_unfreeze
Christoph Hellwig
hch at lst.de
Mon Feb 9 06:58:32 PST 2026
On Mon, Feb 09, 2026 at 04:29:52PM +0800, Yu Kuai wrote:
> blk_mq_update_nr_hw_queues() freezes and unfreezes queues internally.
> When the queue is already frozen before this call (from nvme_start_freeze
> in apple_nvme_disable), the freeze depth becomes 2. The internal unfreeze
> only decrements it to 1, leaving the queue still frozen when
> debugfs_create_files() is called.
>
> This triggers WARN_ON_ONCE(q->mq_freeze_depth != 0) in
> debugfs_create_files() and risks deadlock.
>
> Fix this by moving nvme_unfreeze() before blk_mq_update_nr_hw_queues()
> so the queue is unfrozen before the call, allowing the internal
> freeze/unfreeze to work correctly.
>
> Signed-off-by: Yu Kuai <yukuai at fnnas.com>
> ---
> drivers/nvme/host/apple.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/nvme/host/apple.c b/drivers/nvme/host/apple.c
> index 15b3d07f8ccd..1835753ad91a 100644
> --- a/drivers/nvme/host/apple.c
> +++ b/drivers/nvme/host/apple.c
> @@ -1202,8 +1202,8 @@ static void apple_nvme_reset_work(struct work_struct *work)
>
> nvme_unquiesce_io_queues(&anv->ctrl);
> nvme_wait_freeze(&anv->ctrl);
> - blk_mq_update_nr_hw_queues(&anv->tagset, 1);
> nvme_unfreeze(&anv->ctrl);
> + blk_mq_update_nr_hw_queues(&anv->tagset, 1);
Looks good on it's own, but it would also good to align the
apple driver with the PCI one here more.
Reviewed-by: Christoph Hellwig <hch at lst.de>
More information about the linux-arm-kernel
mailing list