diff options
author | Sebastian Ott <sebott@linux.vnet.ibm.com> | 2013-04-16 08:12:17 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2013-04-17 08:07:36 -0400 |
commit | cb65a669f62ecca123cf4f6998903ee628c59caf (patch) | |
tree | d5083643099374154de1b6ef973d9e58b31f8f23 | |
parent | a2ab833360abbed3321fd694b69a5a32ee15785f (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.h | 1 | ||||
-rw-r--r-- | arch/s390/pci/pci.c | 7 | ||||
-rw-r--r-- | drivers/pci/hotplug/s390_pci_hpc.c | 9 |
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) | |||
140 | struct zpci_dev *zpci_alloc_device(void); | 140 | struct zpci_dev *zpci_alloc_device(void); |
141 | int zpci_create_device(struct zpci_dev *); | 141 | int zpci_create_device(struct zpci_dev *); |
142 | int zpci_enable_device(struct zpci_dev *); | 142 | int zpci_enable_device(struct zpci_dev *); |
143 | int zpci_disable_device(struct zpci_dev *); | ||
143 | void zpci_stop_device(struct zpci_dev *); | 144 | void zpci_stop_device(struct zpci_dev *); |
144 | void zpci_free_device(struct zpci_dev *); | 145 | void zpci_free_device(struct zpci_dev *); |
145 | int zpci_scan_device(struct zpci_dev *); | 146 | int 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 | } |
956 | EXPORT_SYMBOL_GPL(zpci_enable_device); | 956 | EXPORT_SYMBOL_GPL(zpci_enable_device); |
957 | 957 | ||
958 | int zpci_disable_device(struct zpci_dev *zdev) | ||
959 | { | ||
960 | zpci_dma_exit_device(zdev); | ||
961 | return clp_disable_fh(zdev); | ||
962 | } | ||
963 | EXPORT_SYMBOL_GPL(zpci_disable_device); | ||
964 | |||
958 | int zpci_create_device(struct zpci_dev *zdev) | 965 | int 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 | ||