void zpci_release_device(struct kref *kref)
 {
        struct zpci_dev *zdev = container_of(kref, struct zpci_dev, kref);
-       int ret;
 
-       if (zdev->has_hp_slot)
-               zpci_exit_slot(zdev);
+       WARN_ON(zdev->state != ZPCI_FN_STATE_RESERVED);
 
        if (zdev->zbus->bus)
                zpci_bus_remove_device(zdev, false);
        if (zdev_enabled(zdev))
                zpci_disable_device(zdev);
 
-       switch (zdev->state) {
-       case ZPCI_FN_STATE_CONFIGURED:
-               ret = sclp_pci_deconfigure(zdev->fid);
-               zpci_dbg(3, "deconf fid:%x, rc:%d\n", zdev->fid, ret);
-               fallthrough;
-       case ZPCI_FN_STATE_STANDBY:
-               if (zdev->has_hp_slot)
-                       zpci_exit_slot(zdev);
-               spin_lock(&zpci_list_lock);
-               list_del(&zdev->entry);
-               spin_unlock(&zpci_list_lock);
-               zpci_dbg(3, "rsv fid:%x\n", zdev->fid);
-               fallthrough;
-       case ZPCI_FN_STATE_RESERVED:
-               if (zdev->has_resources)
-                       zpci_cleanup_bus_resources(zdev);
-               zpci_bus_device_unregister(zdev);
-               zpci_destroy_iommu(zdev);
-               fallthrough;
-       default:
-               break;
-       }
+       if (zdev->has_hp_slot)
+               zpci_exit_slot(zdev);
+
+       if (zdev->has_resources)
+               zpci_cleanup_bus_resources(zdev);
+
+       zpci_bus_device_unregister(zdev);
+       zpci_destroy_iommu(zdev);
        zpci_dbg(3, "rem fid:%x\n", zdev->fid);
        kfree_rcu(zdev, rcu);
 }