powerpc/eeh: Trace eeh device from I/O cache
The idea comes from Benjamin Herrenschmidt. The eeh cache helps fetching the pci device according to the given I/O address. Since the eeh cache is serving for eeh, it's reasonable for eeh cache to trace eeh device except pci device. The patch make eeh cache to trace eeh device. Also, the major eeh entry function eeh_dn_check_failure has been renamed to eeh_dev_check_failure since it will take eeh device as input parameter. Signed-off-by: Gavin Shan <shangw@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:

committed by
Benjamin Herrenschmidt

parent
d7bb88629d
commit
f8f7d63fd9
@@ -196,7 +196,7 @@ int __init eeh_ops_register(struct eeh_ops *ops);
|
||||
int __exit eeh_ops_unregister(const char *name);
|
||||
unsigned long eeh_check_failure(const volatile void __iomem *token,
|
||||
unsigned long val);
|
||||
int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev);
|
||||
int eeh_dev_check_failure(struct eeh_dev *edev);
|
||||
void __init pci_addr_cache_build(void);
|
||||
void eeh_add_device_tree_early(struct device_node *);
|
||||
void eeh_add_device_tree_late(struct pci_bus *);
|
||||
@@ -231,10 +231,7 @@ static inline unsigned long eeh_check_failure(const volatile void __iomem *token
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#define eeh_dev_check_failure(x) (0)
|
||||
|
||||
static inline void pci_addr_cache_build(void) { }
|
||||
|
||||
|
@@ -184,6 +184,8 @@ static inline struct eeh_dev *of_node_to_eeh_dev(struct device_node *dn)
|
||||
{
|
||||
return PCI_DN(dn)->edev;
|
||||
}
|
||||
#else
|
||||
#define of_node_to_eeh_dev(x) (NULL)
|
||||
#endif
|
||||
|
||||
/** Find the bus corresponding to the indicated device node */
|
||||
|
@@ -50,7 +50,7 @@ extern int rtas_setup_phb(struct pci_controller *phb);
|
||||
void pci_addr_cache_build(void);
|
||||
void pci_addr_cache_insert_device(struct pci_dev *dev);
|
||||
void pci_addr_cache_remove_device(struct pci_dev *dev);
|
||||
struct pci_dev *pci_addr_cache_get_device(unsigned long addr);
|
||||
struct eeh_dev *pci_addr_cache_get_device(unsigned long addr);
|
||||
void eeh_slot_error_detail(struct eeh_pe *pe, int severity);
|
||||
int eeh_pci_enable(struct eeh_pe *pe, int function);
|
||||
int eeh_reset_pe(struct eeh_pe *);
|
||||
|
Reference in New Issue
Block a user