> From: Luck, Tony <[email protected]> > [...] > Subject: RE: [PATCH] EDAC: sb_edac: use kzalloc_flex > > > > + sbridge_dev->n_devs = table->n_devs_per_imc; > > > > > > Do you need this? I thought that kzalloc_flex() filled in the __counted_by > field of the structure for you. > > kzalloc_flex is just a macro over kzalloc(struct_size()). It does not > > do automatic __counted_by, which makes no sense. > > It is a fancy macro. But may be complier version dependent whether the > count is filled in.
Yes, " __builtin_counted_by_ref" needs gcc >= 15. See comments [1]. My gcc is v13.3 on Ubuntu 24.04, and I verified that "sbridge_dev->n_devs" was NOT filled in automatically [2]. For safety, we still need to fill in the count field explicitly. [1] https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/compiler_types.h#n550 [2] --- a/drivers/edac/sb_edac.c +++ b/drivers/edac/sb_edac.c @@ -778,7 +778,8 @@ static struct sbridge_dev *alloc_sbridge_dev(int seg, u8 bus, enum domain dom, sbridge_dev->seg = seg; sbridge_dev->bus = bus; sbridge_dev->dom = dom; - sbridge_dev->n_devs = table->n_devs_per_imc; + //sbridge_dev->n_devs = table->n_devs_per_imc; + pr_info("sbridge_dev->n_devs = %d, table->n_devs_per_imc = %d\n", sbridge_dev->n_devs, table->n_devs_per_imc); Testing result log: [ 1640.072460] EDAC DEBUG: sbridge_init: [ 1640.072474] EDAC sbridge: Seeking for: PCI ID 8086:3ca0 [ 1640.072505] sbridge_dev->n_devs = 0, table->n_devs_per_imc = 11 <------------------ [ 1640.072511] EDAC DEBUG: sbridge_get_onedevice: Detected 8086:3ca0 [ 1640.072515] EDAC sbridge: Seeking for: PCI ID 8086:3ca0 [ 1640.072530] sbridge_dev->n_devs = 0, table->n_devs_per_imc = 11 <------------------ ... Failed to load the sb_edac driver.

