diff options
| -rw-r--r-- | arch/powerpc/include/asm/eeh.h | 21 | ||||
| -rw-r--r-- | arch/powerpc/kernel/eeh.c | 12 | ||||
| -rw-r--r-- | arch/powerpc/platforms/powernv/eeh-powernv.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/platforms/pseries/eeh_pseries.c | 2 |
4 files changed, 27 insertions, 10 deletions
diff --git a/arch/powerpc/include/asm/eeh.h b/arch/powerpc/include/asm/eeh.h index 9e39ceb1d19f..d4dd41fb951b 100644 --- a/arch/powerpc/include/asm/eeh.h +++ b/arch/powerpc/include/asm/eeh.h | |||
| @@ -172,10 +172,20 @@ struct eeh_ops { | |||
| 172 | }; | 172 | }; |
| 173 | 173 | ||
| 174 | extern struct eeh_ops *eeh_ops; | 174 | extern struct eeh_ops *eeh_ops; |
| 175 | extern int eeh_subsystem_enabled; | 175 | extern bool eeh_subsystem_enabled; |
| 176 | extern raw_spinlock_t confirm_error_lock; | 176 | extern raw_spinlock_t confirm_error_lock; |
| 177 | extern int eeh_probe_mode; | 177 | extern int eeh_probe_mode; |
| 178 | 178 | ||
| 179 | static inline bool eeh_enabled(void) | ||
| 180 | { | ||
| 181 | return eeh_subsystem_enabled; | ||
| 182 | } | ||
| 183 | |||
| 184 | static inline void eeh_set_enable(bool mode) | ||
| 185 | { | ||
| 186 | eeh_subsystem_enabled = mode; | ||
| 187 | } | ||
| 188 | |||
| 179 | #define EEH_PROBE_MODE_DEV (1<<0) /* From PCI device */ | 189 | #define EEH_PROBE_MODE_DEV (1<<0) /* From PCI device */ |
| 180 | #define EEH_PROBE_MODE_DEVTREE (1<<1) /* From device tree */ | 190 | #define EEH_PROBE_MODE_DEVTREE (1<<1) /* From device tree */ |
| 181 | 191 | ||
| @@ -246,7 +256,7 @@ void eeh_remove_device(struct pci_dev *); | |||
| 246 | * If this macro yields TRUE, the caller relays to eeh_check_failure() | 256 | * If this macro yields TRUE, the caller relays to eeh_check_failure() |
| 247 | * which does further tests out of line. | 257 | * which does further tests out of line. |
| 248 | */ | 258 | */ |
| 249 | #define EEH_POSSIBLE_ERROR(val, type) ((val) == (type)~0 && eeh_subsystem_enabled) | 259 | #define EEH_POSSIBLE_ERROR(val, type) ((val) == (type)~0 && eeh_enabled()) |
| 250 | 260 | ||
| 251 | /* | 261 | /* |
| 252 | * Reads from a device which has been isolated by EEH will return | 262 | * Reads from a device which has been isolated by EEH will return |
| @@ -257,6 +267,13 @@ void eeh_remove_device(struct pci_dev *); | |||
| 257 | 267 | ||
| 258 | #else /* !CONFIG_EEH */ | 268 | #else /* !CONFIG_EEH */ |
| 259 | 269 | ||
| 270 | static inline bool eeh_enabled(void) | ||
| 271 | { | ||
| 272 | return false; | ||
| 273 | } | ||
| 274 | |||
| 275 | static inline void eeh_set_enable(bool mode) { } | ||
| 276 | |||
| 260 | static inline int eeh_init(void) | 277 | static inline int eeh_init(void) |
| 261 | { | 278 | { |
| 262 | return 0; | 279 | return 0; |
diff --git a/arch/powerpc/kernel/eeh.c b/arch/powerpc/kernel/eeh.c index 148db72a8c43..f22f7b6f6b01 100644 --- a/arch/powerpc/kernel/eeh.c +++ b/arch/powerpc/kernel/eeh.c | |||
| @@ -89,7 +89,7 @@ | |||
| 89 | /* Platform dependent EEH operations */ | 89 | /* Platform dependent EEH operations */ |
| 90 | struct eeh_ops *eeh_ops = NULL; | 90 | struct eeh_ops *eeh_ops = NULL; |
| 91 | 91 | ||
| 92 | int eeh_subsystem_enabled; | 92 | bool eeh_subsystem_enabled = false; |
| 93 | EXPORT_SYMBOL(eeh_subsystem_enabled); | 93 | EXPORT_SYMBOL(eeh_subsystem_enabled); |
| 94 | 94 | ||
| 95 | /* | 95 | /* |
| @@ -364,7 +364,7 @@ int eeh_dev_check_failure(struct eeh_dev *edev) | |||
| 364 | 364 | ||
| 365 | eeh_stats.total_mmio_ffs++; | 365 | eeh_stats.total_mmio_ffs++; |
| 366 | 366 | ||
| 367 | if (!eeh_subsystem_enabled) | 367 | if (!eeh_enabled()) |
| 368 | return 0; | 368 | return 0; |
| 369 | 369 | ||
| 370 | if (!edev) { | 370 | if (!edev) { |
| @@ -822,7 +822,7 @@ int eeh_init(void) | |||
| 822 | return ret; | 822 | return ret; |
| 823 | } | 823 | } |
| 824 | 824 | ||
| 825 | if (eeh_subsystem_enabled) | 825 | if (eeh_enabled()) |
| 826 | pr_info("EEH: PCI Enhanced I/O Error Handling Enabled\n"); | 826 | pr_info("EEH: PCI Enhanced I/O Error Handling Enabled\n"); |
| 827 | else | 827 | else |
| 828 | pr_warning("EEH: No capable adapters found\n"); | 828 | pr_warning("EEH: No capable adapters found\n"); |
| @@ -897,7 +897,7 @@ void eeh_add_device_late(struct pci_dev *dev) | |||
| 897 | struct device_node *dn; | 897 | struct device_node *dn; |
| 898 | struct eeh_dev *edev; | 898 | struct eeh_dev *edev; |
| 899 | 899 | ||
| 900 | if (!dev || !eeh_subsystem_enabled) | 900 | if (!dev || !eeh_enabled()) |
| 901 | return; | 901 | return; |
| 902 | 902 | ||
| 903 | pr_debug("EEH: Adding device %s\n", pci_name(dev)); | 903 | pr_debug("EEH: Adding device %s\n", pci_name(dev)); |
| @@ -1005,7 +1005,7 @@ void eeh_remove_device(struct pci_dev *dev) | |||
| 1005 | { | 1005 | { |
| 1006 | struct eeh_dev *edev; | 1006 | struct eeh_dev *edev; |
| 1007 | 1007 | ||
| 1008 | if (!dev || !eeh_subsystem_enabled) | 1008 | if (!dev || !eeh_enabled()) |
| 1009 | return; | 1009 | return; |
| 1010 | edev = pci_dev_to_eeh_dev(dev); | 1010 | edev = pci_dev_to_eeh_dev(dev); |
| 1011 | 1011 | ||
| @@ -1045,7 +1045,7 @@ void eeh_remove_device(struct pci_dev *dev) | |||
| 1045 | 1045 | ||
| 1046 | static int proc_eeh_show(struct seq_file *m, void *v) | 1046 | static int proc_eeh_show(struct seq_file *m, void *v) |
| 1047 | { | 1047 | { |
| 1048 | if (0 == eeh_subsystem_enabled) { | 1048 | if (!eeh_enabled()) { |
| 1049 | seq_printf(m, "EEH Subsystem is globally disabled\n"); | 1049 | seq_printf(m, "EEH Subsystem is globally disabled\n"); |
| 1050 | seq_printf(m, "eeh_total_mmio_ffs=%llu\n", eeh_stats.total_mmio_ffs); | 1050 | seq_printf(m, "eeh_total_mmio_ffs=%llu\n", eeh_stats.total_mmio_ffs); |
| 1051 | } else { | 1051 | } else { |
diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c index a79fddc5e74e..a59788e83b8b 100644 --- a/arch/powerpc/platforms/powernv/eeh-powernv.c +++ b/arch/powerpc/platforms/powernv/eeh-powernv.c | |||
| @@ -145,7 +145,7 @@ static int powernv_eeh_dev_probe(struct pci_dev *dev, void *flag) | |||
| 145 | * Enable EEH explicitly so that we will do EEH check | 145 | * Enable EEH explicitly so that we will do EEH check |
| 146 | * while accessing I/O stuff | 146 | * while accessing I/O stuff |
| 147 | */ | 147 | */ |
| 148 | eeh_subsystem_enabled = 1; | 148 | eeh_set_enable(true); |
| 149 | 149 | ||
| 150 | /* Save memory bars */ | 150 | /* Save memory bars */ |
| 151 | eeh_save_bars(edev); | 151 | eeh_save_bars(edev); |
diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c index 9ef3cc8ebc11..8a8f0472d98f 100644 --- a/arch/powerpc/platforms/pseries/eeh_pseries.c +++ b/arch/powerpc/platforms/pseries/eeh_pseries.c | |||
| @@ -265,7 +265,7 @@ static void *pseries_eeh_of_probe(struct device_node *dn, void *flag) | |||
| 265 | enable = 1; | 265 | enable = 1; |
| 266 | 266 | ||
| 267 | if (enable) { | 267 | if (enable) { |
| 268 | eeh_subsystem_enabled = 1; | 268 | eeh_set_enable(true); |
| 269 | eeh_add_to_parent_pe(edev); | 269 | eeh_add_to_parent_pe(edev); |
| 270 | 270 | ||
| 271 | pr_debug("%s: EEH enabled on %s PHB#%d-PE#%x, config addr#%x\n", | 271 | pr_debug("%s: EEH enabled on %s PHB#%d-PE#%x, config addr#%x\n", |
