Skip to content

Commit

Permalink
powerpc/eeh: Remove eeh_mutex
Browse files Browse the repository at this point in the history
Originally, eeh_mutex was introduced to protect the PE hierarchy
tree and the attached EEH devices because EEH core was possiblly
running with multiple threads to access the PE hierarchy tree.
However, we now have only one kthread in EEH core. So we needn't
the eeh_mutex and just remove it.

Signed-off-by: Gavin Shan <shangw@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
  • Loading branch information
Gavin Shan authored and Benjamin Herrenschmidt committed Jun 25, 2013
1 parent ff1e768 commit ef6a285
Show file tree
Hide file tree
Showing 3 changed files with 1 addition and 46 deletions.
14 changes: 0 additions & 14 deletions arch/powerpc/include/asm/eeh.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,6 @@ struct eeh_ops {

extern struct eeh_ops *eeh_ops;
extern int eeh_subsystem_enabled;
extern struct mutex eeh_mutex;
extern raw_spinlock_t confirm_error_lock;
extern int eeh_probe_mode;

Expand All @@ -173,16 +172,6 @@ static inline int eeh_probe_mode_dev(void)
return (eeh_probe_mode == EEH_PROBE_MODE_DEV);
}

static inline void eeh_lock(void)
{
mutex_lock(&eeh_mutex);
}

static inline void eeh_unlock(void)
{
mutex_unlock(&eeh_mutex);
}

static inline void eeh_serialize_lock(unsigned long *flags)
{
raw_spin_lock_irqsave(&confirm_error_lock, *flags);
Expand Down Expand Up @@ -271,9 +260,6 @@ static inline void eeh_add_sysfs_files(struct pci_bus *bus) { }

static inline void eeh_remove_bus_device(struct pci_dev *dev, int purge_pe) { }

static inline void eeh_lock(void) { }
static inline void eeh_unlock(void) { }

#define EEH_POSSIBLE_ERROR(val, type) (0)
#define EEH_IO_ERROR_VALUE(size) (-1UL)
#endif /* CONFIG_EEH */
Expand Down
3 changes: 0 additions & 3 deletions arch/powerpc/kernel/eeh.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,6 @@ EXPORT_SYMBOL(eeh_subsystem_enabled);
*/
int eeh_probe_mode;

/* Global EEH mutex */
DEFINE_MUTEX(eeh_mutex);

/* Lock to avoid races due to multiple reports of an error */
DEFINE_RAW_SPINLOCK(confirm_error_lock);

Expand Down
30 changes: 1 addition & 29 deletions arch/powerpc/kernel/eeh_pe.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,7 @@ int eeh_phb_pe_create(struct pci_controller *phb)
}

/* Put it into the list */
eeh_lock();
list_add_tail(&pe->child, &eeh_phb_pe);
eeh_unlock();

pr_debug("EEH: Add PE for PHB#%d\n", phb->global_number);

Expand Down Expand Up @@ -185,21 +183,15 @@ void *eeh_pe_dev_traverse(struct eeh_pe *root,
return NULL;
}

eeh_lock();

/* Traverse root PE */
for (pe = root; pe; pe = eeh_pe_next(pe, root)) {
eeh_pe_for_each_dev(pe, edev) {
ret = fn(edev, flag);
if (ret) {
eeh_unlock();
if (ret)
return ret;
}
}
}

eeh_unlock();

return NULL;
}

Expand Down Expand Up @@ -305,8 +297,6 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
{
struct eeh_pe *pe, *parent;

eeh_lock();

/*
* Search the PE has been existing or not according
* to the PE address. If that has been existing, the
Expand All @@ -316,7 +306,6 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
pe = eeh_pe_get(edev);
if (pe && !(pe->type & EEH_PE_INVALID)) {
if (!edev->pe_config_addr) {
eeh_unlock();
pr_err("%s: PE with addr 0x%x already exists\n",
__func__, edev->config_addr);
return -EEXIST;
Expand All @@ -328,7 +317,6 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)

/* Put the edev to PE */
list_add_tail(&edev->list, &pe->edevs);
eeh_unlock();
pr_debug("EEH: Add %s to Bus PE#%x\n",
edev->dn->full_name, pe->addr);

Expand All @@ -347,7 +335,6 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
parent->type &= ~EEH_PE_INVALID;
parent = parent->parent;
}
eeh_unlock();
pr_debug("EEH: Add %s to Device PE#%x, Parent PE#%x\n",
edev->dn->full_name, pe->addr, pe->parent->addr);

Expand All @@ -357,7 +344,6 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
/* Create a new EEH PE */
pe = eeh_pe_alloc(edev->phb, EEH_PE_DEVICE);
if (!pe) {
eeh_unlock();
pr_err("%s: out of memory!\n", __func__);
return -ENOMEM;
}
Expand Down Expand Up @@ -385,7 +371,6 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
if (!parent) {
parent = eeh_phb_pe_get(edev->phb);
if (!parent) {
eeh_unlock();
pr_err("%s: No PHB PE is found (PHB Domain=%d)\n",
__func__, edev->phb->global_number);
edev->pe = NULL;
Expand All @@ -402,7 +387,6 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
list_add_tail(&pe->child, &parent->child_list);
list_add_tail(&edev->list, &pe->edevs);
edev->pe = pe;
eeh_unlock();
pr_debug("EEH: Add %s to Device PE#%x, Parent PE#%x\n",
edev->dn->full_name, pe->addr, pe->parent->addr);

Expand Down Expand Up @@ -430,8 +414,6 @@ int eeh_rmv_from_parent_pe(struct eeh_dev *edev, int purge_pe)
return -EEXIST;
}

eeh_lock();

/* Remove the EEH device */
pe = edev->pe;
edev->pe = NULL;
Expand Down Expand Up @@ -476,8 +458,6 @@ int eeh_rmv_from_parent_pe(struct eeh_dev *edev, int purge_pe)
pe = parent;
}

eeh_unlock();

return 0;
}

Expand Down Expand Up @@ -550,9 +530,7 @@ static void *__eeh_pe_state_mark(void *data, void *flag)
*/
void eeh_pe_state_mark(struct eeh_pe *pe, int state)
{
eeh_lock();
eeh_pe_traverse(pe, __eeh_pe_state_mark, &state);
eeh_unlock();
}

/**
Expand Down Expand Up @@ -586,9 +564,7 @@ static void *__eeh_pe_state_clear(void *data, void *flag)
*/
void eeh_pe_state_clear(struct eeh_pe *pe, int state)
{
eeh_lock();
eeh_pe_traverse(pe, __eeh_pe_state_clear, &state);
eeh_unlock();
}

/**
Expand Down Expand Up @@ -673,8 +649,6 @@ struct pci_bus *eeh_pe_bus_get(struct eeh_pe *pe)
struct eeh_dev *edev;
struct pci_dev *pdev;

eeh_lock();

if (pe->type & EEH_PE_PHB) {
bus = pe->phb->bus;
} else if (pe->type & EEH_PE_BUS ||
Expand All @@ -691,7 +665,5 @@ struct pci_bus *eeh_pe_bus_get(struct eeh_pe *pe)
}

out:
eeh_unlock();

return bus;
}

0 comments on commit ef6a285

Please sign in to comment.