aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac/amd64_edac.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2012-03-21 13:00:44 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-06-11 12:23:40 -0400
commitc56087595fb6531f359925b581529f1b2aef10f1 (patch)
tree6077edee64747d06759378ba634a738b401657d1 /drivers/edac/amd64_edac.c
parentba004239e008a442bc327a57e227600fc1bd5ee7 (diff)
amd64_edac: convert sysfs logic to use struct device
Now that the EDAC core supports struct device, there's no sense on having any logic at the EDAC core to simulate it. So, instead of adding such logic there, change the logic at amd64_edac to use it. Reviewed-by: Aristeu Rozanski <arozansk@redhat.com> Cc: Doug Thompson <norsk5@yahoo.com> Cc: Borislav Petkov <borislav.petkov@amd.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/edac/amd64_edac.c')
-rw-r--r--drivers/edac/amd64_edac.c43
1 files changed, 26 insertions, 17 deletions
diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
index 821bc2cdd2de..9905834b560f 100644
--- a/drivers/edac/amd64_edac.c
+++ b/drivers/edac/amd64_edac.c
@@ -2463,26 +2463,29 @@ static bool ecc_enabled(struct pci_dev *F3, u8 nid)
2463 return true; 2463 return true;
2464} 2464}
2465 2465
2466struct mcidev_sysfs_attribute sysfs_attrs[ARRAY_SIZE(amd64_dbg_attrs) + 2466static int set_mc_sysfs_attrs(struct mem_ctl_info *mci)
2467 ARRAY_SIZE(amd64_inj_attrs) +
2468 1];
2469
2470struct mcidev_sysfs_attribute terminator = { .attr = { .name = NULL } };
2471
2472static void set_mc_sysfs_attrs(struct mem_ctl_info *mci)
2473{ 2467{
2474 unsigned int i = 0, j = 0; 2468 int rc;
2475 2469
2476 for (; i < ARRAY_SIZE(amd64_dbg_attrs); i++) 2470 rc = amd64_create_sysfs_dbg_files(mci);
2477 sysfs_attrs[i] = amd64_dbg_attrs[i]; 2471 if (rc < 0)
2472 return rc;
2478 2473
2479 if (boot_cpu_data.x86 >= 0x10) 2474 if (boot_cpu_data.x86 >= 0x10) {
2480 for (j = 0; j < ARRAY_SIZE(amd64_inj_attrs); j++, i++) 2475 rc = amd64_create_sysfs_inject_files(mci);
2481 sysfs_attrs[i] = amd64_inj_attrs[j]; 2476 if (rc < 0)
2477 return rc;
2478 }
2479
2480 return 0;
2481}
2482 2482
2483 sysfs_attrs[i] = terminator; 2483static void del_mc_sysfs_attrs(struct mem_ctl_info *mci)
2484{
2485 amd64_remove_sysfs_dbg_files(mci);
2484 2486
2485 mci->mc_driver_sysfs_attributes = sysfs_attrs; 2487 if (boot_cpu_data.x86 >= 0x10)
2488 amd64_remove_sysfs_inject_files(mci);
2486} 2489}
2487 2490
2488static void setup_mci_misc_attrs(struct mem_ctl_info *mci, 2491static void setup_mci_misc_attrs(struct mem_ctl_info *mci,
@@ -2608,13 +2611,15 @@ static int amd64_init_one_instance(struct pci_dev *F2)
2608 if (init_csrows(mci)) 2611 if (init_csrows(mci))
2609 mci->edac_cap = EDAC_FLAG_NONE; 2612 mci->edac_cap = EDAC_FLAG_NONE;
2610 2613
2611 set_mc_sysfs_attrs(mci);
2612
2613 ret = -ENODEV; 2614 ret = -ENODEV;
2614 if (edac_mc_add_mc(mci)) { 2615 if (edac_mc_add_mc(mci)) {
2615 debugf1("failed edac_mc_add_mc()\n"); 2616 debugf1("failed edac_mc_add_mc()\n");
2616 goto err_add_mc; 2617 goto err_add_mc;
2617 } 2618 }
2619 if (set_mc_sysfs_attrs(mci)) {
2620 debugf1("failed edac_mc_add_mc()\n");
2621 goto err_add_sysfs;
2622 }
2618 2623
2619 /* register stuff with EDAC MCE */ 2624 /* register stuff with EDAC MCE */
2620 if (report_gart_errors) 2625 if (report_gart_errors)
@@ -2628,6 +2633,8 @@ static int amd64_init_one_instance(struct pci_dev *F2)
2628 2633
2629 return 0; 2634 return 0;
2630 2635
2636err_add_sysfs:
2637 edac_mc_del_mc(mci->pdev);
2631err_add_mc: 2638err_add_mc:
2632 edac_mc_free(mci); 2639 edac_mc_free(mci);
2633 2640
@@ -2698,6 +2705,8 @@ static void __devexit amd64_remove_one_instance(struct pci_dev *pdev)
2698 struct pci_dev *F3 = node_to_amd_nb(nid)->misc; 2705 struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
2699 struct ecc_settings *s = ecc_stngs[nid]; 2706 struct ecc_settings *s = ecc_stngs[nid];
2700 2707
2708 mci = find_mci_by_dev(&pdev->dev);
2709 del_mc_sysfs_attrs(mci);
2701 /* Remove from EDAC CORE tracking list */ 2710 /* Remove from EDAC CORE tracking list */
2702 mci = edac_mc_del_mc(&pdev->dev); 2711 mci = edac_mc_del_mc(&pdev->dev);
2703 if (!mci) 2712 if (!mci)