aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/edac')
-rw-r--r--drivers/edac/edac_mc.c38
1 files changed, 13 insertions, 25 deletions
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c
index ad812a4f8c99..f67a4d6f8974 100644
--- a/drivers/edac/edac_mc.c
+++ b/drivers/edac/edac_mc.c
@@ -1199,7 +1199,6 @@ static void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci)
1199 1199
1200#ifdef CONFIG_EDAC_DEBUG 1200#ifdef CONFIG_EDAC_DEBUG
1201 1201
1202EXPORT_SYMBOL(edac_mc_dump_channel);
1203 1202
1204void edac_mc_dump_channel(struct channel_info *chan) 1203void edac_mc_dump_channel(struct channel_info *chan)
1205{ 1204{
@@ -1209,10 +1208,9 @@ void edac_mc_dump_channel(struct channel_info *chan)
1209 debugf4("\tchannel->label = '%s'\n", chan->label); 1208 debugf4("\tchannel->label = '%s'\n", chan->label);
1210 debugf4("\tchannel->csrow = %p\n\n", chan->csrow); 1209 debugf4("\tchannel->csrow = %p\n\n", chan->csrow);
1211} 1210}
1211EXPORT_SYMBOL(edac_mc_dump_channel);
1212 1212
1213 1213
1214EXPORT_SYMBOL(edac_mc_dump_csrow);
1215
1216void edac_mc_dump_csrow(struct csrow_info *csrow) 1214void edac_mc_dump_csrow(struct csrow_info *csrow)
1217{ 1215{
1218 debugf4("\tcsrow = %p\n", csrow); 1216 debugf4("\tcsrow = %p\n", csrow);
@@ -1227,10 +1225,9 @@ void edac_mc_dump_csrow(struct csrow_info *csrow)
1227 debugf4("\tcsrow->channels = %p\n", csrow->channels); 1225 debugf4("\tcsrow->channels = %p\n", csrow->channels);
1228 debugf4("\tcsrow->mci = %p\n\n", csrow->mci); 1226 debugf4("\tcsrow->mci = %p\n\n", csrow->mci);
1229} 1227}
1228EXPORT_SYMBOL(edac_mc_dump_csrow);
1230 1229
1231 1230
1232EXPORT_SYMBOL(edac_mc_dump_mci);
1233
1234void edac_mc_dump_mci(struct mem_ctl_info *mci) 1231void edac_mc_dump_mci(struct mem_ctl_info *mci)
1235{ 1232{
1236 debugf3("\tmci = %p\n", mci); 1233 debugf3("\tmci = %p\n", mci);
@@ -1245,6 +1242,7 @@ void edac_mc_dump_mci(struct mem_ctl_info *mci)
1245 mci->mod_name, mci->ctl_name); 1242 mci->mod_name, mci->ctl_name);
1246 debugf3("\tpvt_info = %p\n\n", mci->pvt_info); 1243 debugf3("\tpvt_info = %p\n\n", mci->pvt_info);
1247} 1244}
1245EXPORT_SYMBOL(edac_mc_dump_mci);
1248 1246
1249 1247
1250#endif /* CONFIG_EDAC_DEBUG */ 1248#endif /* CONFIG_EDAC_DEBUG */
@@ -1284,8 +1282,6 @@ static inline char * align_ptr (void *ptr, unsigned size)
1284} 1282}
1285 1283
1286 1284
1287EXPORT_SYMBOL(edac_mc_alloc);
1288
1289/** 1285/**
1290 * edac_mc_alloc: Allocate a struct mem_ctl_info structure 1286 * edac_mc_alloc: Allocate a struct mem_ctl_info structure
1291 * @size_pvt: size of private storage needed 1287 * @size_pvt: size of private storage needed
@@ -1357,10 +1353,9 @@ struct mem_ctl_info *edac_mc_alloc(unsigned sz_pvt, unsigned nr_csrows,
1357 1353
1358 return mci; 1354 return mci;
1359} 1355}
1356EXPORT_SYMBOL(edac_mc_alloc);
1360 1357
1361 1358
1362EXPORT_SYMBOL(edac_mc_free);
1363
1364/** 1359/**
1365 * edac_mc_free: Free a previously allocated 'mci' structure 1360 * edac_mc_free: Free a previously allocated 'mci' structure
1366 * @mci: pointer to a struct mem_ctl_info structure 1361 * @mci: pointer to a struct mem_ctl_info structure
@@ -1369,6 +1364,7 @@ void edac_mc_free(struct mem_ctl_info *mci)
1369{ 1364{
1370 kfree(mci); 1365 kfree(mci);
1371} 1366}
1367EXPORT_SYMBOL(edac_mc_free);
1372 1368
1373static struct mem_ctl_info *find_mci_by_pdev(struct pci_dev *pdev) 1369static struct mem_ctl_info *find_mci_by_pdev(struct pci_dev *pdev)
1374{ 1370{
@@ -1450,8 +1446,6 @@ static void del_mc_from_global_list (struct mem_ctl_info *mci)
1450} 1446}
1451 1447
1452 1448
1453EXPORT_SYMBOL(edac_mc_add_mc);
1454
1455/** 1449/**
1456 * edac_mc_add_mc: Insert the 'mci' structure into the mci global list and 1450 * edac_mc_add_mc: Insert the 'mci' structure into the mci global list and
1457 * create sysfs entries associated with mci structure 1451 * create sysfs entries associated with mci structure
@@ -1509,10 +1503,9 @@ fail0:
1509 up(&mem_ctls_mutex); 1503 up(&mem_ctls_mutex);
1510 return 1; 1504 return 1;
1511} 1505}
1506EXPORT_SYMBOL(edac_mc_add_mc);
1512 1507
1513 1508
1514EXPORT_SYMBOL(edac_mc_del_mc);
1515
1516/** 1509/**
1517 * edac_mc_del_mc: Remove sysfs entries for specified mci structure and 1510 * edac_mc_del_mc: Remove sysfs entries for specified mci structure and
1518 * remove mci structure from global list 1511 * remove mci structure from global list
@@ -1540,10 +1533,9 @@ struct mem_ctl_info * edac_mc_del_mc(struct pci_dev *pdev)
1540 mci->mod_name, mci->ctl_name, pci_name(mci->pdev)); 1533 mci->mod_name, mci->ctl_name, pci_name(mci->pdev));
1541 return mci; 1534 return mci;
1542} 1535}
1536EXPORT_SYMBOL(edac_mc_del_mc);
1543 1537
1544 1538
1545EXPORT_SYMBOL(edac_mc_scrub_block);
1546
1547void edac_mc_scrub_block(unsigned long page, unsigned long offset, 1539void edac_mc_scrub_block(unsigned long page, unsigned long offset,
1548 u32 size) 1540 u32 size)
1549{ 1541{
@@ -1574,11 +1566,10 @@ void edac_mc_scrub_block(unsigned long page, unsigned long offset,
1574 if (PageHighMem(pg)) 1566 if (PageHighMem(pg))
1575 local_irq_restore(flags); 1567 local_irq_restore(flags);
1576} 1568}
1569EXPORT_SYMBOL(edac_mc_scrub_block);
1577 1570
1578 1571
1579/* FIXME - should return -1 */ 1572/* FIXME - should return -1 */
1580EXPORT_SYMBOL(edac_mc_find_csrow_by_page);
1581
1582int edac_mc_find_csrow_by_page(struct mem_ctl_info *mci, 1573int edac_mc_find_csrow_by_page(struct mem_ctl_info *mci,
1583 unsigned long page) 1574 unsigned long page)
1584{ 1575{
@@ -1615,10 +1606,9 @@ int edac_mc_find_csrow_by_page(struct mem_ctl_info *mci,
1615 1606
1616 return row; 1607 return row;
1617} 1608}
1609EXPORT_SYMBOL(edac_mc_find_csrow_by_page);
1618 1610
1619 1611
1620EXPORT_SYMBOL(edac_mc_handle_ce);
1621
1622/* FIXME - setable log (warning/emerg) levels */ 1612/* FIXME - setable log (warning/emerg) levels */
1623/* FIXME - integrate with evlog: http://evlog.sourceforge.net/ */ 1613/* FIXME - integrate with evlog: http://evlog.sourceforge.net/ */
1624void edac_mc_handle_ce(struct mem_ctl_info *mci, 1614void edac_mc_handle_ce(struct mem_ctl_info *mci,
@@ -1681,10 +1671,9 @@ void edac_mc_handle_ce(struct mem_ctl_info *mci,
1681 mci->csrows[row].grain); 1671 mci->csrows[row].grain);
1682 } 1672 }
1683} 1673}
1674EXPORT_SYMBOL(edac_mc_handle_ce);
1684 1675
1685 1676
1686EXPORT_SYMBOL(edac_mc_handle_ce_no_info);
1687
1688void edac_mc_handle_ce_no_info(struct mem_ctl_info *mci, 1677void edac_mc_handle_ce_no_info(struct mem_ctl_info *mci,
1689 const char *msg) 1678 const char *msg)
1690{ 1679{
@@ -1694,10 +1683,9 @@ void edac_mc_handle_ce_no_info(struct mem_ctl_info *mci,
1694 mci->ce_noinfo_count++; 1683 mci->ce_noinfo_count++;
1695 mci->ce_count++; 1684 mci->ce_count++;
1696} 1685}
1686EXPORT_SYMBOL(edac_mc_handle_ce_no_info);
1697 1687
1698 1688
1699EXPORT_SYMBOL(edac_mc_handle_ue);
1700
1701void edac_mc_handle_ue(struct mem_ctl_info *mci, 1689void edac_mc_handle_ue(struct mem_ctl_info *mci,
1702 unsigned long page_frame_number, 1690 unsigned long page_frame_number,
1703 unsigned long offset_in_page, int row, 1691 unsigned long offset_in_page, int row,
@@ -1750,10 +1738,9 @@ void edac_mc_handle_ue(struct mem_ctl_info *mci,
1750 mci->ue_count++; 1738 mci->ue_count++;
1751 mci->csrows[row].ue_count++; 1739 mci->csrows[row].ue_count++;
1752} 1740}
1741EXPORT_SYMBOL(edac_mc_handle_ue);
1753 1742
1754 1743
1755EXPORT_SYMBOL(edac_mc_handle_ue_no_info);
1756
1757void edac_mc_handle_ue_no_info(struct mem_ctl_info *mci, 1744void edac_mc_handle_ue_no_info(struct mem_ctl_info *mci,
1758 const char *msg) 1745 const char *msg)
1759{ 1746{
@@ -1766,6 +1753,7 @@ void edac_mc_handle_ue_no_info(struct mem_ctl_info *mci,
1766 mci->ue_noinfo_count++; 1753 mci->ue_noinfo_count++;
1767 mci->ue_count++; 1754 mci->ue_count++;
1768} 1755}
1756EXPORT_SYMBOL(edac_mc_handle_ue_no_info);
1769 1757
1770 1758
1771#ifdef CONFIG_PCI 1759#ifdef CONFIG_PCI