On Wed, Mar 11, 2026 at 7:28 PM Zhuo, Qiuxu <[email protected]> wrote:
>
>
> > From: Rosen Penev <[email protected]>
> > [...]
> > Subject: [PATCH] EDAC: sb_edac: use kzalloc_flex
>
> Could you use this style of subject:
>
> EDAC/sb: Use kzalloc_flex()
Will do.
>
> >
> > Simplifies allocations by using a flexible array member in this struct.
> >
> > Add __counted_by to get extra runtime analysis.
> >
> > Signed-off-by: Rosen Penev <[email protected]>
> > ---
> > drivers/edac/sb_edac.c | 14 +++-----------
> > 1 file changed, 3 insertions(+), 11 deletions(-)
> >
> > diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c index
> > 09d4e816404b..7b282dfd093f 100644
> > --- a/drivers/edac/sb_edac.c
> > +++ b/drivers/edac/sb_edac.c
> > @@ -364,11 +364,11 @@ struct sbridge_dev {
> > int seg;
> > u8 bus, mc;
> > u8 node_id, source_id;
> > - struct pci_dev **pdev;
> > enum domain dom;
> > int n_devs;
> > int i_devs;
> > struct mem_ctl_info *mci;
> > + struct pci_dev *pdev[] __counted_by(n_devs);
> > };
> >
> > struct knl_pvt {
> > @@ -771,21 +771,14 @@ static struct sbridge_dev *alloc_sbridge_dev(int
> > seg, u8 bus, enum domain dom, {
> > struct sbridge_dev *sbridge_dev;
> >
> > - sbridge_dev = kzalloc_obj(*sbridge_dev);
> > + sbridge_dev = kzalloc_flex(*sbridge_dev, pdev, table-
> > >n_devs_per_imc);
> > if (!sbridge_dev)
> > return NULL;
> >
> > - sbridge_dev->pdev = kzalloc_objs(*sbridge_dev->pdev,
> > - table->n_devs_per_imc);
> > - if (!sbridge_dev->pdev) {
> > - kfree(sbridge_dev);
> > - return NULL;
> > - }
> > -
> > + sbridge_dev->n_devs = table->n_devs_per_imc;
>
> What's the reason for moving this line of code up here?
__counted_by requires setting the counting variable first.
>
> > sbridge_dev->seg = seg;
> > sbridge_dev->bus = bus;
> > sbridge_dev->dom = dom;
> > - sbridge_dev->n_devs = table->n_devs_per_imc;
> > list_add_tail(&sbridge_dev->list, &sbridge_edac_list);
> > [...]
>
> Other than the comments above:
>
> Reviewed-by: Qiuxu Zhuo <[email protected]>