i7core_dev
ATTRIBUTE_GROUPS(i7core_dev);
static void i7core_put_devices(struct i7core_dev *i7core_dev)
for (i = 0; i < i7core_dev->n_devs; i++) {
struct pci_dev *pdev = i7core_dev->pdev[i];
struct i7core_dev *i7core_dev, *tmp;
list_for_each_entry_safe(i7core_dev, tmp, &i7core_edac_list, list) {
i7core_put_devices(i7core_dev);
free_i7core_dev(i7core_dev);
struct i7core_dev *i7core_dev;
i7core_dev = get_i7core_dev(socket);
if (!i7core_dev) {
i7core_dev = alloc_i7core_dev(socket, table);
if (!i7core_dev) {
if (i7core_dev->pdev[devno]) {
i7core_dev->pdev[devno] = pdev;
struct i7core_dev *i7core_dev)
for (i = 0; i < i7core_dev->n_devs; i++) {
pdev = i7core_dev->pdev[i];
pdev, i7core_dev->socket);
struct i7core_dev *i7_dev;
&pvt->i7core_dev->pdev[0]->dev,
pvt->i7core_dev->socket);
static void i7core_unregister_mci(struct i7core_dev *i7core_dev)
struct mem_ctl_info *mci = i7core_dev->mci;
edac_dbg(0, "MC: dev = %p\n", &i7core_dev->pdev[0]->dev);
edac_dbg(0, "MC: mci = %p, dev = %p\n", mci, &i7core_dev->pdev[0]->dev);
i7core_dev->mci = NULL;
static int i7core_register_mci(struct i7core_dev *i7core_dev)
mci = edac_mc_alloc(i7core_dev->socket, ARRAY_SIZE(layers), layers,
edac_dbg(0, "MC: mci = %p, dev = %p\n", mci, &i7core_dev->pdev[0]->dev);
pvt->i7core_dev = i7core_dev;
i7core_dev->mci = mci;
mci->ctl_name = kasprintf(GFP_KERNEL, "i7 core #%d", i7core_dev->socket);
mci->dev_name = pci_name(i7core_dev->pdev[0]);
rc = mci_bind_devs(mci, i7core_dev);
mci->pdev = &i7core_dev->pdev[0]->dev;
i7core_dev->mci = NULL;
struct i7core_dev *i7core_dev;
list_for_each_entry(i7core_dev, &i7core_edac_list, list) {
rc = i7core_register_mci(i7core_dev);
list_for_each_entry(i7core_dev, &i7core_edac_list, list)
i7core_unregister_mci(i7core_dev);
struct i7core_dev *i7core_dev;
list_for_each_entry(i7core_dev, &i7core_edac_list, list)
i7core_unregister_mci(i7core_dev);
struct i7core_dev *i7core_dev;
static struct i7core_dev *get_i7core_dev(u8 socket)
struct i7core_dev *i7core_dev;
list_for_each_entry(i7core_dev, &i7core_edac_list, list) {
if (i7core_dev->socket == socket)
return i7core_dev;
static struct i7core_dev *alloc_i7core_dev(u8 socket,
struct i7core_dev *i7core_dev;
i7core_dev = kzalloc_obj(*i7core_dev);
if (!i7core_dev)
i7core_dev->pdev = kzalloc_objs(*i7core_dev->pdev, table->n_devs);
if (!i7core_dev->pdev) {
kfree(i7core_dev);
i7core_dev->socket = socket;
i7core_dev->n_devs = table->n_devs;
list_add_tail(&i7core_dev->list, &i7core_edac_list);
return i7core_dev;
static void free_i7core_dev(struct i7core_dev *i7core_dev)
list_del(&i7core_dev->list);
kfree(i7core_dev->pdev);
kfree(i7core_dev);
pvt->i7core_dev->socket, pvt->info.mc_control,
pvt->i7core_dev->socket, i, j);