drivers/edac: add edac_mc_find API
authorDouglas Thompson <dougthompson@xmission.com>
Thu, 19 Jul 2007 08:49:31 +0000 (01:49 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 19 Jul 2007 17:04:53 +0000 (10:04 -0700)
This simple patch adds an important CORE API for EDAC that EDAC drivers can
use to find their edac_mc control structure by passing a mem_ctl_info
'instance' value

Needed for subsequent patches

Signed-off-by: Douglas Thompson <dougthompson@xmission.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/edac/edac_mc.c
drivers/edac/edac_mc.h

index 804875de5801bc0e35eafad59c8e0f7c1f1417ed..c1a8bf2bfa5742489438b9f4a505c90b9968b7e2 100644 (file)
@@ -1456,6 +1456,34 @@ static void del_mc_from_global_list(struct mem_ctl_info *mci)
        wait_for_completion(&mci->complete);
 }
 
+/**
+ * edac_mc_find: Search for a mem_ctl_info structure whose index is 'idx'.
+ *
+ * If found, return a pointer to the structure.
+ * Else return NULL.
+ *
+ * Caller must hold mem_ctls_mutex.
+ */
+struct mem_ctl_info * edac_mc_find(int idx)
+{
+       struct list_head *item;
+       struct mem_ctl_info *mci;
+
+       list_for_each(item, &mc_devices) {
+               mci = list_entry(item, struct mem_ctl_info, link);
+
+               if (mci->mc_idx >= idx) {
+                       if (mci->mc_idx == idx)
+                               return mci;
+
+                       break;
+               }
+       }
+
+       return NULL;
+}
+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
index 713444cc41053fae35bcbac5c9e48bf0e22ee499..9ad8a20a8de5a4cd9ea4580efb293259a6f0409e 100644 (file)
@@ -430,6 +430,7 @@ void edac_mc_dump_mci(struct mem_ctl_info *mci);
 void edac_mc_dump_csrow(struct csrow_info *csrow);
 #endif  /* CONFIG_EDAC_DEBUG */
 
+extern struct mem_ctl_info * edac_mc_find(int idx);
 extern int edac_mc_add_mc(struct mem_ctl_info *mci,int mc_idx);
 extern struct mem_ctl_info * edac_mc_del_mc(struct device *dev);
 extern int edac_mc_find_csrow_by_page(struct mem_ctl_info *mci,