mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-20 11:13:58 +08:00
NVMe: CPU hot plug notification
Registers with hot cpu notification to rebalance, and potentially allocate additional, io queues. Signed-off-by: Keith Busch <keith.busch@intel.com> Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
This commit is contained in:
parent
42f614201e
commit
33b1e95c90
@ -2002,6 +2002,19 @@ static size_t db_bar_size(struct nvme_dev *dev, unsigned nr_io_queues)
|
|||||||
return 4096 + ((nr_io_queues + 1) * 8 * dev->db_stride);
|
return 4096 + ((nr_io_queues + 1) * 8 * dev->db_stride);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int nvme_cpu_notify(struct notifier_block *self,
|
||||||
|
unsigned long action, void *hcpu)
|
||||||
|
{
|
||||||
|
struct nvme_dev *dev = container_of(self, struct nvme_dev, nb);
|
||||||
|
switch (action) {
|
||||||
|
case CPU_ONLINE:
|
||||||
|
case CPU_DEAD:
|
||||||
|
nvme_assign_io_queues(dev);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return NOTIFY_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static int nvme_setup_io_queues(struct nvme_dev *dev)
|
static int nvme_setup_io_queues(struct nvme_dev *dev)
|
||||||
{
|
{
|
||||||
struct nvme_queue *adminq = raw_nvmeq(dev, 0);
|
struct nvme_queue *adminq = raw_nvmeq(dev, 0);
|
||||||
@ -2080,6 +2093,11 @@ static int nvme_setup_io_queues(struct nvme_dev *dev)
|
|||||||
nvme_free_queues(dev, nr_io_queues + 1);
|
nvme_free_queues(dev, nr_io_queues + 1);
|
||||||
nvme_assign_io_queues(dev);
|
nvme_assign_io_queues(dev);
|
||||||
|
|
||||||
|
dev->nb.notifier_call = &nvme_cpu_notify;
|
||||||
|
result = register_hotcpu_notifier(&dev->nb);
|
||||||
|
if (result)
|
||||||
|
goto free_queues;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
free_queues:
|
free_queues:
|
||||||
@ -2357,6 +2375,7 @@ static void nvme_dev_shutdown(struct nvme_dev *dev)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
dev->initialized = 0;
|
dev->initialized = 0;
|
||||||
|
unregister_hotcpu_notifier(&dev->nb);
|
||||||
|
|
||||||
spin_lock(&dev_list_lock);
|
spin_lock(&dev_list_lock);
|
||||||
list_del_init(&dev->node);
|
list_del_init(&dev->node);
|
||||||
|
@ -92,6 +92,7 @@ struct nvme_dev {
|
|||||||
struct kref kref;
|
struct kref kref;
|
||||||
struct miscdevice miscdev;
|
struct miscdevice miscdev;
|
||||||
struct work_struct reset_work;
|
struct work_struct reset_work;
|
||||||
|
struct notifier_block nb;
|
||||||
char name[12];
|
char name[12];
|
||||||
char serial[20];
|
char serial[20];
|
||||||
char model[40];
|
char model[40];
|
||||||
|
Loading…
Reference in New Issue
Block a user