Commit e7930ba49e469d9ce7374a788336caf955f8d7e2

Authored by Rob Herring
Committed by Mauro Carvalho Chehab
1 parent c10538396b

edac: create top-level debugfs directory

Create a single, top-level "edac" directory for debugfs. An "mc[0-N]"
directory is then created for each memory controller. Individual drivers
can create additional entries such as h/w error injection control.

Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

Showing 3 changed files with 39 additions and 1 deletions Side-by-side Diff

drivers/edac/edac_mc_sysfs.c
... ... @@ -899,13 +899,33 @@
899 899 };
900 900  
901 901 #ifdef CONFIG_EDAC_DEBUG
  902 +static struct dentry *edac_debugfs;
  903 +
  904 +int __init edac_debugfs_init(void)
  905 +{
  906 + edac_debugfs = debugfs_create_dir("edac", NULL);
  907 + if (IS_ERR(edac_debugfs)) {
  908 + edac_debugfs = NULL;
  909 + return -ENOMEM;
  910 + }
  911 + return 0;
  912 +}
  913 +
  914 +void __exit edac_debugfs_exit(void)
  915 +{
  916 + debugfs_remove(edac_debugfs);
  917 +}
  918 +
902 919 int edac_create_debug_nodes(struct mem_ctl_info *mci)
903 920 {
904 921 struct dentry *d, *parent;
905 922 char name[80];
906 923 int i;
907 924  
908   - d = debugfs_create_dir(mci->dev.kobj.name, mci->debugfs);
  925 + if (!edac_debugfs)
  926 + return -ENODEV;
  927 +
  928 + d = debugfs_create_dir(mci->dev.kobj.name, edac_debugfs);
909 929 if (!d)
910 930 return -ENOMEM;
911 931 parent = d;
... ... @@ -930,6 +950,7 @@
930 950 if (!d)
931 951 goto nomem;
932 952  
  953 + mci->debugfs = parent;
933 954 return 0;
934 955 nomem:
935 956 debugfs_remove(mci->debugfs);
drivers/edac/edac_module.c
... ... @@ -94,6 +94,8 @@
94 94 if (err)
95 95 goto error;
96 96  
  97 + edac_debugfs_init();
  98 +
97 99 /* Setup/Initialize the workq for this core */
98 100 err = edac_workqueue_setup();
99 101 if (err) {
... ... @@ -118,6 +120,7 @@
118 120 /* tear down the various subsystems */
119 121 edac_workqueue_teardown();
120 122 edac_mc_sysfs_exit();
  123 + edac_debugfs_exit();
121 124 }
122 125  
123 126 /*
drivers/edac/edac_module.h
... ... @@ -57,6 +57,20 @@
57 57 extern void *edac_align_ptr(void **p, unsigned size, int n_elems);
58 58  
59 59 /*
  60 + * EDAC debugfs functions
  61 + */
  62 +#ifdef CONFIG_EDAC_DEBUG
  63 +int edac_debugfs_init(void);
  64 +void edac_debugfs_exit(void);
  65 +#else
  66 +static inline int edac_debugfs_init(void)
  67 +{
  68 + return -ENODEV;
  69 +}
  70 +static inline void edac_debugfs_exit(void) {}
  71 +#endif
  72 +
  73 +/*
60 74 * EDAC PCI functions
61 75 */
62 76 #ifdef CONFIG_PCI