mirror of https://gitee.com/openkylin/linux.git
EDAC: Allow to pass driver-specific attribute groups
Add edac_mc_add_mc_with_groups() for initializing the mem_ctl_info object with the optional attribute groups. This allows drivers to pass additional sysfs entries without manual (and racy) device_create_file() and co calls. edac_mc_add_mc() is kept as is, just calling edac_mc_add_with_groups() with NULL groups. Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: http://lkml.kernel.org/r/1423046938-18111-3-git-send-email-tiwai@suse.de Signed-off-by: Borislav Petkov <bp@suse.de>
This commit is contained in:
parent
2c1946b6d6
commit
4e8d230de9
|
@ -446,7 +446,9 @@ struct mem_ctl_info *edac_mc_alloc(unsigned mc_num,
|
|||
unsigned n_layers,
|
||||
struct edac_mc_layer *layers,
|
||||
unsigned sz_pvt);
|
||||
extern int edac_mc_add_mc(struct mem_ctl_info *mci);
|
||||
extern int edac_mc_add_mc_with_groups(struct mem_ctl_info *mci,
|
||||
const struct attribute_group **groups);
|
||||
#define edac_mc_add_mc(mci) edac_mc_add_mc_with_groups(mci, NULL)
|
||||
extern void edac_mc_free(struct mem_ctl_info *mci);
|
||||
extern struct mem_ctl_info *edac_mc_find(int idx);
|
||||
extern struct mem_ctl_info *find_mci_by_dev(struct device *dev);
|
||||
|
|
|
@ -710,9 +710,10 @@ struct mem_ctl_info *edac_mc_find(int idx)
|
|||
EXPORT_SYMBOL(edac_mc_find);
|
||||
|
||||
/**
|
||||
* edac_mc_add_mc: Insert the 'mci' structure into the mci global list and
|
||||
* create sysfs entries associated with mci structure
|
||||
* edac_mc_add_mc_with_groups: Insert the 'mci' structure into the mci
|
||||
* global list and create sysfs entries associated with mci structure
|
||||
* @mci: pointer to the mci structure to be added to the list
|
||||
* @groups: optional attribute groups for the driver-specific sysfs entries
|
||||
*
|
||||
* Return:
|
||||
* 0 Success
|
||||
|
@ -720,7 +721,8 @@ EXPORT_SYMBOL(edac_mc_find);
|
|||
*/
|
||||
|
||||
/* FIXME - should a warning be printed if no error detection? correction? */
|
||||
int edac_mc_add_mc(struct mem_ctl_info *mci)
|
||||
int edac_mc_add_mc_with_groups(struct mem_ctl_info *mci,
|
||||
const struct attribute_group **groups)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
edac_dbg(0, "\n");
|
||||
|
@ -771,7 +773,7 @@ int edac_mc_add_mc(struct mem_ctl_info *mci)
|
|||
|
||||
mci->bus = &mc_bus[mci->mc_idx];
|
||||
|
||||
if (edac_create_sysfs_mci_device(mci)) {
|
||||
if (edac_create_sysfs_mci_device(mci, groups)) {
|
||||
edac_mc_printk(mci, KERN_WARNING,
|
||||
"failed to create sysfs device\n");
|
||||
goto fail1;
|
||||
|
@ -805,7 +807,7 @@ int edac_mc_add_mc(struct mem_ctl_info *mci)
|
|||
mutex_unlock(&mem_ctls_mutex);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(edac_mc_add_mc);
|
||||
EXPORT_SYMBOL_GPL(edac_mc_add_mc_with_groups);
|
||||
|
||||
/**
|
||||
* edac_mc_del_mc: Remove sysfs entries for specified mci structure and
|
||||
|
|
|
@ -974,7 +974,8 @@ static int edac_create_debug_nodes(struct mem_ctl_info *mci)
|
|||
* 0 Success
|
||||
* !0 Failure
|
||||
*/
|
||||
int edac_create_sysfs_mci_device(struct mem_ctl_info *mci)
|
||||
int edac_create_sysfs_mci_device(struct mem_ctl_info *mci,
|
||||
const struct attribute_group **groups)
|
||||
{
|
||||
int i, err;
|
||||
|
||||
|
@ -998,6 +999,7 @@ int edac_create_sysfs_mci_device(struct mem_ctl_info *mci)
|
|||
|
||||
mci->dev.parent = mci_pdev;
|
||||
mci->dev.bus = mci->bus;
|
||||
mci->dev.groups = groups;
|
||||
dev_set_name(&mci->dev, "mc%d", mci->mc_idx);
|
||||
dev_set_drvdata(&mci->dev, mci);
|
||||
pm_runtime_forbid(&mci->dev);
|
||||
|
|
|
@ -22,7 +22,8 @@
|
|||
/* on edac_mc_sysfs.c */
|
||||
int edac_mc_sysfs_init(void);
|
||||
void edac_mc_sysfs_exit(void);
|
||||
extern int edac_create_sysfs_mci_device(struct mem_ctl_info *mci);
|
||||
extern int edac_create_sysfs_mci_device(struct mem_ctl_info *mci,
|
||||
const struct attribute_group **groups);
|
||||
extern void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci);
|
||||
void edac_unregister_sysfs(struct mem_ctl_info *mci);
|
||||
extern int edac_get_log_ue(void);
|
||||
|
|
Loading…
Reference in New Issue