]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
s390/pci: adapt events for zbus
authorPierre Morel <pmorel@linux.ibm.com>
Mon, 18 May 2020 18:24:34 +0000 (20:24 +0200)
committerMarcelo Henrique Cerri <marcelo.cerri@canonical.com>
Mon, 22 Jun 2020 20:21:12 +0000 (17:21 -0300)
BugLink: https://bugs.launchpad.net/bugs/1874056
Simplify the event handling.
Set the zpci state explicitly.

Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
Reviewed-by: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
(backported from commit f606b3ef47c9f874af605323099663a10f691b24)
Signed-off-by: Frank Heimes <frank.heimes@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Kleber Souza <kleber.souza@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
arch/s390/pci/pci_event.c

index d39e9299e133ec350bcce0edc57e26e91666d276..c296214f0a19cd23f11fcd8cbf8ca44fcf159df3 100644 (file)
@@ -89,25 +89,19 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
        switch (ccdf->pec) {
        case 0x0301: /* Reserved|Standby -> Configured */
                if (!zdev) {
-                       ret = clp_add_pci_device(ccdf->fid, ccdf->fh, 0);
-                       if (ret)
-                               break;
-                       zdev = get_zdev_by_fid(ccdf->fid);
-               }
-               if (!zdev || zdev->state != ZPCI_FN_STATE_STANDBY)
+                       ret = clp_add_pci_device(ccdf->fid, ccdf->fh, 1);
                        break;
-               zdev->state = ZPCI_FN_STATE_CONFIGURED;
+               }
                zdev->fh = ccdf->fh;
-               ret = zpci_enable_device(zdev);
-               if (ret)
-                       break;
-               pci_lock_rescan_remove();
-               pci_rescan_bus(zdev->zbus->bus);
-               pci_unlock_rescan_remove();
+               zdev->state = ZPCI_FN_STATE_CONFIGURED;
+               zpci_create_device(zdev);
                break;
        case 0x0302: /* Reserved -> Standby */
-               if (!zdev)
+               if (!zdev) {
                        clp_add_pci_device(ccdf->fid, ccdf->fh, 0);
+                       break;
+               }
+               zdev->fh = ccdf->fh;
                break;
        case 0x0303: /* Deconfiguration requested */
                if (!zdev)
@@ -135,8 +129,6 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
                        pci_stop_and_remove_bus_device_locked(pdev);
                }
 
-               zdev->fh = ccdf->fh;
-               zpci_disable_device(zdev);
                zdev->state = ZPCI_FN_STATE_STANDBY;
                if (!clp_get_state(ccdf->fid, &state) &&
                    state == ZPCI_FN_STATE_RESERVED) {