Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5271edd4 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

nvme-pci: refactor nvme_disable_io_queues



Pass the opcode for the delete SQ/CQ command as an argument instead of
the somewhat confusing pass loop.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarKeith Busch <keith.busch@intel.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 0b2a8a9f
Loading
Loading
Loading
Loading
+20 −21
Original line number Diff line number Diff line
@@ -2244,31 +2244,29 @@ static int nvme_delete_queue(struct nvme_queue *nvmeq, u8 opcode)
	return 0;
}

static void nvme_disable_io_queues(struct nvme_dev *dev)
static bool nvme_disable_io_queues(struct nvme_dev *dev, u8 opcode)
{
	int pass, queues = dev->online_queues - 1;
	int nr_queues = dev->online_queues - 1, sent = 0;
	unsigned long timeout;
	u8 opcode = nvme_admin_delete_sq;

	for (pass = 0; pass < 2; pass++) {
		int sent = 0, i = queues;

	reinit_completion(&dev->ioq_wait);
 retry:
	timeout = ADMIN_TIMEOUT;
		for (; i > 0; i--, sent++)
			if (nvme_delete_queue(&dev->queues[i], opcode))
	while (nr_queues > 0) {
		if (nvme_delete_queue(&dev->queues[nr_queues], opcode))
			break;

		nr_queues--;
		sent++;
	}
	while (sent--) {
			timeout = wait_for_completion_io_timeout(&dev->ioq_wait, timeout);
		timeout = wait_for_completion_io_timeout(&dev->ioq_wait,
				timeout);
		if (timeout == 0)
				return;
			if (i)
			return false;
		if (nr_queues)
			goto retry;
	}
		opcode = nvme_admin_delete_cq;
	}
	return true;
}

/*
@@ -2428,7 +2426,8 @@ static void nvme_dev_disable(struct nvme_dev *dev, bool shutdown)
	nvme_stop_queues(&dev->ctrl);

	if (!dead && dev->ctrl.queue_count > 0) {
		nvme_disable_io_queues(dev);
		if (nvme_disable_io_queues(dev, nvme_admin_delete_sq))
			nvme_disable_io_queues(dev, nvme_admin_delete_cq);
		nvme_disable_admin_queue(dev, shutdown);
	}
	for (i = dev->ctrl.queue_count - 1; i >= 0; i--)