Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 57a0c1e2 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'edac_fixes_for_3.8' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp

Pull EDAC fixes from Borislav Petkov:
 "Two error path fixes causing a crash and a Kconfig fix for an issue
  which spilled all EDAC suboptions into the 'Device Drivers' menu."

* tag 'edac_fixes_for_3.8' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp:
  EDAC: Cleanup device deregistering path
  EDAC: Fix EDAC Kconfig menu
  EDAC: Fix kernel panic on module unloading
parents e53289c0 44d22e24
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -4,6 +4,9 @@
#	Licensed and distributed under the GPL
#

config EDAC_SUPPORT
	bool

menuconfig EDAC
	bool "EDAC (Error Detection And Correction) reporting"
	depends on HAS_IOMEM
@@ -27,13 +30,8 @@ menuconfig EDAC
	  There is also a mailing list for the EDAC project, which can
	  be found via the sourceforge page.

config EDAC_SUPPORT
	bool

if EDAC

comment "Reporting subsystems"

config EDAC_LEGACY_SYSFS
	bool "EDAC legacy sysfs"
	default y
+6 −13
Original line number Diff line number Diff line
@@ -472,8 +472,7 @@ static void edac_delete_csrow_objects(struct mem_ctl_info *mci)
			device_remove_file(&csrow->dev,
						dynamic_csrow_ce_count_attr[chan]);
		}
		put_device(&mci->csrows[i]->dev);
		device_del(&mci->csrows[i]->dev);
		device_unregister(&mci->csrows[i]->dev);
	}
}
#endif
@@ -1055,11 +1054,9 @@ int edac_create_sysfs_mci_device(struct mem_ctl_info *mci)
		struct dimm_info *dimm = mci->dimms[i];
		if (dimm->nr_pages == 0)
			continue;
		put_device(&dimm->dev);
		device_del(&dimm->dev);
		device_unregister(&dimm->dev);
	}
	put_device(&mci->dev);
	device_del(&mci->dev);
	device_unregister(&mci->dev);
	bus_unregister(&mci->bus);
	kfree(mci->bus.name);
	return err;
@@ -1086,16 +1083,14 @@ void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci)
		if (dimm->nr_pages == 0)
			continue;
		edac_dbg(0, "removing device %s\n", dev_name(&dimm->dev));
		put_device(&dimm->dev);
		device_del(&dimm->dev);
		device_unregister(&dimm->dev);
	}
}

void edac_unregister_sysfs(struct mem_ctl_info *mci)
{
	edac_dbg(1, "Unregistering device %s\n", dev_name(&mci->dev));
	put_device(&mci->dev);
	device_del(&mci->dev);
	device_unregister(&mci->dev);
	bus_unregister(&mci->bus);
	kfree(mci->bus.name);
}
@@ -1159,8 +1154,6 @@ int __init edac_mc_sysfs_init(void)

void __exit edac_mc_sysfs_exit(void)
{
	put_device(mci_pdev);
	device_del(mci_pdev);
	device_unregister(mci_pdev);
	edac_put_sysfs_subsys();
	kfree(mci_pdev);
}