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

Reply via email to