> 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.



Reply via email to