aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Ott <sebott@linux.vnet.ibm.com>2013-04-16 08:12:17 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2013-04-17 08:07:36 -0400
commitcb65a669f62ecca123cf4f6998903ee628c59caf (patch)
treed5083643099374154de1b6ef973d9e58b31f8f23
parenta2ab833360abbed3321fd694b69a5a32ee15785f (diff)
s390/pci: do not modify function handles
Don't modify function handles to get a disabled handle - call clp_disable_fh. With this change we also do no longer deconfigure enabled functions. Reviewed-by: Gerald Schaefer <gerald.schaefer@de.ibm.com> Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r--arch/s390/include/asm/pci.h1
-rw-r--r--arch/s390/pci/pci.c7
-rw-r--r--drivers/pci/hotplug/s390_pci_hpc.c9
3 files changed, 12 insertions, 5 deletions
diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h
index 05333b7f0469..6c1801235db9 100644
--- a/arch/s390/include/asm/pci.h
+++ b/arch/s390/include/asm/pci.h
@@ -140,6 +140,7 @@ static inline bool zdev_enabled(struct zpci_dev *zdev)
140struct zpci_dev *zpci_alloc_device(void); 140struct zpci_dev *zpci_alloc_device(void);
141int zpci_create_device(struct zpci_dev *); 141int zpci_create_device(struct zpci_dev *);
142int zpci_enable_device(struct zpci_dev *); 142int zpci_enable_device(struct zpci_dev *);
143int zpci_disable_device(struct zpci_dev *);
143void zpci_stop_device(struct zpci_dev *); 144void zpci_stop_device(struct zpci_dev *);
144void zpci_free_device(struct zpci_dev *); 145void zpci_free_device(struct zpci_dev *);
145int zpci_scan_device(struct zpci_dev *); 146int zpci_scan_device(struct zpci_dev *);
diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c
index 20823f022925..24dcf059f061 100644
--- a/arch/s390/pci/pci.c
+++ b/arch/s390/pci/pci.c
@@ -955,6 +955,13 @@ out:
955} 955}
956EXPORT_SYMBOL_GPL(zpci_enable_device); 956EXPORT_SYMBOL_GPL(zpci_enable_device);
957 957
958int zpci_disable_device(struct zpci_dev *zdev)
959{
960 zpci_dma_exit_device(zdev);
961 return clp_disable_fh(zdev);
962}
963EXPORT_SYMBOL_GPL(zpci_disable_device);
964
958int zpci_create_device(struct zpci_dev *zdev) 965int zpci_create_device(struct zpci_dev *zdev)
959{ 966{
960 int rc; 967 int rc;
diff --git a/drivers/pci/hotplug/s390_pci_hpc.c b/drivers/pci/hotplug/s390_pci_hpc.c
index 6053e7221b51..46a7b738f61f 100644
--- a/drivers/pci/hotplug/s390_pci_hpc.c
+++ b/drivers/pci/hotplug/s390_pci_hpc.c
@@ -68,17 +68,16 @@ static int disable_slot(struct hotplug_slot *hotplug_slot)
68 if (!zpci_fn_configured(slot->zdev->state)) 68 if (!zpci_fn_configured(slot->zdev->state))
69 return -EIO; 69 return -EIO;
70 70
71 rc = zpci_disable_device(slot->zdev);
72 if (rc)
73 return rc;
71 /* TODO: we rely on the user to unbind/remove the device, is that plausible 74 /* TODO: we rely on the user to unbind/remove the device, is that plausible
72 * or do we need to trigger that here? 75 * or do we need to trigger that here?
73 */ 76 */
74 rc = sclp_pci_deconfigure(slot->zdev->fid); 77 rc = sclp_pci_deconfigure(slot->zdev->fid);
75 zpci_dbg(3, "deconf fid:%x, rc:%d\n", slot->zdev->fid, rc); 78 zpci_dbg(3, "deconf fid:%x, rc:%d\n", slot->zdev->fid, rc);
76 if (!rc) { 79 if (!rc)
77 /* Fixme: better call List-PCI to find the disabled FH
78 for the FID since the FH should be opaque... */
79 slot->zdev->fh &= 0x7fffffff;
80 slot->zdev->state = ZPCI_FN_STATE_STANDBY; 80 slot->zdev->state = ZPCI_FN_STATE_STANDBY;
81 }
82 return rc; 81 return rc;
83} 82}
84 83