From: Rosen Penev Date: Fri, 13 Mar 2026 21:59:00 +0000 (-0700) Subject: EDAC/i7core: Use kzalloc_flex() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7cbea96f6660786158ed7dc81fe40273d860355b;p=thirdparty%2Flinux.git EDAC/i7core: Use kzalloc_flex() Simplifies allocations by using a flexible array member in this struct. Add __counted_by to get extra runtime analysis. Move counting variable assignment to right after allocation as required by __counted_by. Signed-off-by: Rosen Penev Signed-off-by: Tony Luck Reviewed-by: Qiuxu Zhuo Link: https://patch.msgid.link/20260313215900.6724-1-rosenp@gmail.com --- diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c index 0f783173d0ecd..b87c4c6471ead 100644 --- a/drivers/edac/i7core_edac.c +++ b/drivers/edac/i7core_edac.c @@ -240,9 +240,9 @@ struct pci_id_table { struct i7core_dev { struct list_head list; u8 socket; - struct pci_dev **pdev; - int n_devs; struct mem_ctl_info *mci; + int n_devs; + struct pci_dev *pdev[] __counted_by(n_devs); }; struct i7core_pvt { @@ -455,18 +455,12 @@ static struct i7core_dev *alloc_i7core_dev(u8 socket, { struct i7core_dev *i7core_dev; - i7core_dev = kzalloc_obj(*i7core_dev); + i7core_dev = kzalloc_flex(*i7core_dev, pdev, table->n_devs); if (!i7core_dev) return NULL; - i7core_dev->pdev = kzalloc_objs(*i7core_dev->pdev, table->n_devs); - if (!i7core_dev->pdev) { - kfree(i7core_dev); - return NULL; - } - - i7core_dev->socket = socket; i7core_dev->n_devs = table->n_devs; + i7core_dev->socket = socket; list_add_tail(&i7core_dev->list, &i7core_edac_list); return i7core_dev; @@ -475,7 +469,6 @@ static struct i7core_dev *alloc_i7core_dev(u8 socket, static void free_i7core_dev(struct i7core_dev *i7core_dev) { list_del(&i7core_dev->list); - kfree(i7core_dev->pdev); kfree(i7core_dev); }