|
@@ -1177,15 +1177,14 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci)
|
|
|
|
|
|
rc = device_add(pvt->addrmatch_dev);
|
|
|
if (rc < 0)
|
|
|
- return rc;
|
|
|
+ goto err_put_addrmatch;
|
|
|
|
|
|
if (!pvt->is_registered) {
|
|
|
pvt->chancounts_dev = kzalloc(sizeof(*pvt->chancounts_dev),
|
|
|
GFP_KERNEL);
|
|
|
if (!pvt->chancounts_dev) {
|
|
|
- put_device(pvt->addrmatch_dev);
|
|
|
- device_del(pvt->addrmatch_dev);
|
|
|
- return -ENOMEM;
|
|
|
+ rc = -ENOMEM;
|
|
|
+ goto err_del_addrmatch;
|
|
|
}
|
|
|
|
|
|
pvt->chancounts_dev->type = &all_channel_counts_type;
|
|
@@ -1199,9 +1198,18 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci)
|
|
|
|
|
|
rc = device_add(pvt->chancounts_dev);
|
|
|
if (rc < 0)
|
|
|
- return rc;
|
|
|
+ goto err_put_chancounts;
|
|
|
}
|
|
|
return 0;
|
|
|
+
|
|
|
+err_put_chancounts:
|
|
|
+ put_device(pvt->chancounts_dev);
|
|
|
+err_del_addrmatch:
|
|
|
+ device_del(pvt->addrmatch_dev);
|
|
|
+err_put_addrmatch:
|
|
|
+ put_device(pvt->addrmatch_dev);
|
|
|
+
|
|
|
+ return rc;
|
|
|
}
|
|
|
|
|
|
static void i7core_delete_sysfs_devices(struct mem_ctl_info *mci)
|
|
@@ -1211,11 +1219,11 @@ static void i7core_delete_sysfs_devices(struct mem_ctl_info *mci)
|
|
|
edac_dbg(1, "\n");
|
|
|
|
|
|
if (!pvt->is_registered) {
|
|
|
- put_device(pvt->chancounts_dev);
|
|
|
device_del(pvt->chancounts_dev);
|
|
|
+ put_device(pvt->chancounts_dev);
|
|
|
}
|
|
|
- put_device(pvt->addrmatch_dev);
|
|
|
device_del(pvt->addrmatch_dev);
|
|
|
+ put_device(pvt->addrmatch_dev);
|
|
|
}
|
|
|
|
|
|
/****************************************************************************
|