If there is a pending work, we just need to add the new dr into the dr_list.
This is suggested by Michael Kelley.
Signed-off-by: Dexuan Cui decui@microsoft.com Cc: Vitaly Kuznetsov vkuznets@redhat.com Cc: Jack Morgenstein jackm@mellanox.com Cc: stable@vger.kernel.org Cc: Stephen Hemminger sthemmin@microsoft.com Cc: K. Y. Srinivasan kys@microsoft.com Cc: Michael Kelley (EOSG) Michael.H.Kelley@microsoft.com --- drivers/pci/host/pci-hyperv.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.c index 3a385212f666..265ba11e53e2 100644 --- a/drivers/pci/host/pci-hyperv.c +++ b/drivers/pci/host/pci-hyperv.c @@ -1733,6 +1733,7 @@ static void hv_pci_devices_present(struct hv_pcibus_device *hbus, struct hv_dr_state *dr; struct hv_dr_work *dr_wrk; unsigned long flags; + bool pending_dr;
dr_wrk = kzalloc(sizeof(*dr_wrk), GFP_NOWAIT); if (!dr_wrk) @@ -1756,11 +1757,21 @@ static void hv_pci_devices_present(struct hv_pcibus_device *hbus, }
spin_lock_irqsave(&hbus->device_list_lock, flags); + /* + * If pending_dr is true, we have already queued a work, + * which will see the new dr. Otherwise, we need to + * queue a new work. + */ + pending_dr = !list_empty(&hbus->dr_list); list_add_tail(&dr->list_entry, &hbus->dr_list); spin_unlock_irqrestore(&hbus->device_list_lock, flags);
- get_hvpcibus(hbus); - queue_work(hbus->wq, &dr_wrk->wrk); + if (pending_dr) { + kfree(dr_wrk); + } else { + get_hvpcibus(hbus); + queue_work(hbus->wq, &dr_wrk->wrk); + } }
/**
-----Original Message----- From: Dexuan Cui Sent: Tuesday, March 6, 2018 10:22 AM To: bhelgaas@google.com; linux-pci@vger.kernel.org; KY Srinivasan kys@microsoft.com; Stephen Hemminger sthemmin@microsoft.com; olaf@aepfle.de; apw@canonical.com; jasowang@redhat.com Cc: linux-kernel@vger.kernel.org; driverdev-devel@linuxdriverproject.org; Haiyang Zhang haiyangz@microsoft.com; vkuznets@redhat.com; marcelo.cerri@canonical.com; Michael Kelley (EOSG) Michael.H.Kelley@microsoft.com; Dexuan Cui decui@microsoft.com; Jack Morgenstein jackm@mellanox.com; stable@vger.kernel.org Subject: [PATCH v3 5/6] PCI: hv: hv_pci_devices_present(): only queue a new work when necessary
If there is a pending work, we just need to add the new dr into the dr_list.
This is suggested by Michael Kelley.
Signed-off-by: Dexuan Cui decui@microsoft.com Cc: Vitaly Kuznetsov vkuznets@redhat.com Cc: Jack Morgenstein jackm@mellanox.com Cc: stable@vger.kernel.org Cc: Stephen Hemminger sthemmin@microsoft.com Cc: K. Y. Srinivasan kys@microsoft.com Cc: Michael Kelley (EOSG) Michael.H.Kelley@microsoft.com
drivers/pci/host/pci-hyperv.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)
Reviewed-by: Michael Kelley mikelley@microsoft.com
-----Original Message----- From: Dexuan Cui Sent: Tuesday, March 6, 2018 1:22 PM To: bhelgaas@google.com; linux-pci@vger.kernel.org; KY Srinivasan kys@microsoft.com; Stephen Hemminger sthemmin@microsoft.com; olaf@aepfle.de; apw@canonical.com; jasowang@redhat.com Cc: linux-kernel@vger.kernel.org; driverdev-devel@linuxdriverproject.org; Haiyang Zhang haiyangz@microsoft.com; vkuznets@redhat.com; marcelo.cerri@canonical.com; Michael Kelley (EOSG) Michael.H.Kelley@microsoft.com; Dexuan Cui decui@microsoft.com; Jack Morgenstein jackm@mellanox.com; stable@vger.kernel.org Subject: [PATCH v3 5/6] PCI: hv: hv_pci_devices_present(): only queue a new work when necessary
If there is a pending work, we just need to add the new dr into the dr_list.
This is suggested by Michael Kelley.
Signed-off-by: Dexuan Cui decui@microsoft.com Cc: Vitaly Kuznetsov vkuznets@redhat.com Cc: Jack Morgenstein jackm@mellanox.com Cc: stable@vger.kernel.org Cc: Stephen Hemminger sthemmin@microsoft.com Cc: K. Y. Srinivasan kys@microsoft.com Cc: Michael Kelley (EOSG) Michael.H.Kelley@microsoft.com
Acked-by: Haiyang Zhang haiyangz@microsoft.com
linux-stable-mirror@lists.linaro.org