summaryrefslogtreecommitdiff
path: root/drivers/edac/edac_device.h
diff options
context:
space:
mode:
authorBorislav Petkov <bp@suse.de>2022-03-08 14:16:17 +0100
committerBorislav Petkov <bp@suse.de>2022-04-11 11:43:26 +0200
commit9fb9ce392aae0c6654efc42c80e2f6bab88d5fe3 (patch)
tree936ad0f870760d221b85e65aadff185ab3312a32 /drivers/edac/edac_device.h
parentfb8cd45ca39bdb216e358e36063d8b9962242107 (diff)
EDAC/device: Get rid of the silly one-shot memory allocation in edac_device_alloc_ctl_info()
Use boring kzalloc() instead. Add pointers to the different allocated members in struct edac_device_ctl_info for easier freeing later. One of the reasons, perhaps, why it was done this way is to be able to do a single kfree(ctl_info) without having to kfree() the other parts of the struct too but that is not nearly a sensible reason as to why there should be this obscure pointer alignment. There should be no functional changes resulting from this. Signed-off-by: Borislav Petkov <bp@suse.de> Link: https://lore.kernel.org/r/20220310095254.1510-4-bp@alien8.de
Diffstat (limited to 'drivers/edac/edac_device.h')
-rw-r--r--drivers/edac/edac_device.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/edac/edac_device.h b/drivers/edac/edac_device.h
index fc2d2c218064..3f44e6b9d387 100644
--- a/drivers/edac/edac_device.h
+++ b/drivers/edac/edac_device.h
@@ -216,6 +216,8 @@ struct edac_device_ctl_info {
*/
u32 nr_instances;
struct edac_device_instance *instances;
+ struct edac_device_block *blocks;
+ struct edac_dev_sysfs_block_attribute *attribs;
/* Event counters for the this whole EDAC Device */
struct edac_device_counter counters;
@@ -348,4 +350,16 @@ edac_device_handle_ue(struct edac_device_ctl_info *edac_dev, int inst_nr,
*/
extern int edac_device_alloc_index(void);
extern const char *edac_layer_name[];
+
+/* Free the actual struct */
+static inline void __edac_device_free_ctl_info(struct edac_device_ctl_info *ci)
+{
+ if (ci) {
+ kfree(ci->pvt_info);
+ kfree(ci->attribs);
+ kfree(ci->blocks);
+ kfree(ci->instances);
+ kfree(ci);
+ }
+}
#endif