Patch "PCI: hv: Add hv_pci_remove_slots() when we unload the driver" has been added to the 4.14-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    PCI: hv: Add hv_pci_remove_slots() when we unload the driver

to the 4.14-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     pci-hv-add-hv_pci_remove_slots-when-we-unload-the-dr.patch
and it can be found in the queue-4.14 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit de27bc86963c7bd69a939253588b17d266b36454
Author: Dexuan Cui <decui@xxxxxxxxxxxxx>
Date:   Wed May 15 15:59:15 2019 -0700

    PCI: hv: Add hv_pci_remove_slots() when we unload the driver
    
    [ Upstream commit 15becc2b56c6eda3d9bf5ae993bafd5661c1fad1 ]
    
    When we unload the pci-hyperv host controller driver, the host does not
    send us a PCI_EJECT message.
    
    In this case we also need to make sure the sysfs PCI slot directory is
    removed, otherwise a command on a slot file eg:
    
    "cat /sys/bus/pci/slots/2/address"
    
    will trigger a
    
    "BUG: unable to handle kernel paging request"
    
    and, if we unload/reload the driver several times we would end up with
    stale slot entries in PCI slot directories in /sys/bus/pci/slots/
    
    root@localhost:~# ls -rtl  /sys/bus/pci/slots/
    total 0
    drwxr-xr-x 2 root root 0 Feb  7 10:49 2
    drwxr-xr-x 2 root root 0 Feb  7 10:49 2-1
    drwxr-xr-x 2 root root 0 Feb  7 10:51 2-2
    
    Add the missing code to remove the PCI slot and fix the current
    behaviour.
    
    Fixes: a15f2c08c708 ("PCI: hv: support reporting serial number as slot information")
    Signed-off-by: Dexuan Cui <decui@xxxxxxxxxxxxx>
    [lorenzo.pieralisi@xxxxxxx: reformatted the log]
    Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx>
    Reviewed-by: Stephen Hemminger <sthemmin@xxxxxxxxxxxxx>
    Reviewed-by: Michael Kelley <mikelley@xxxxxxxxxxxxx>
    Cc: stable@xxxxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.c
index 292450c7da625..a5825bbcded72 100644
--- a/drivers/pci/host/pci-hyperv.c
+++ b/drivers/pci/host/pci-hyperv.c
@@ -1513,6 +1513,21 @@ static void hv_pci_assign_slots(struct hv_pcibus_device *hbus)
 	}
 }
 
+/*
+ * Remove entries in sysfs pci slot directory.
+ */
+static void hv_pci_remove_slots(struct hv_pcibus_device *hbus)
+{
+	struct hv_pci_dev *hpdev;
+
+	list_for_each_entry(hpdev, &hbus->children, list_entry) {
+		if (!hpdev->pci_slot)
+			continue;
+		pci_destroy_slot(hpdev->pci_slot);
+		hpdev->pci_slot = NULL;
+	}
+}
+
 /**
  * create_root_hv_pci_bus() - Expose a new root PCI bus
  * @hbus:	Root PCI bus, as understood by this driver
@@ -2719,6 +2734,7 @@ static int hv_pci_remove(struct hv_device *hdev)
 		pci_lock_rescan_remove();
 		pci_stop_root_bus(hbus->pci_bus);
 		pci_remove_root_bus(hbus->pci_bus);
+		hv_pci_remove_slots(hbus);
 		pci_unlock_rescan_remove();
 		hbus->state = hv_pcibus_removed;
 	}



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux