Re: [net-next PATCH 1/3] octeontx2-af: Add devlink suppoort to af driver
From: George Cherian
Date: Mon Nov 02 2020 - 22:38:55 EST
Hi Willem,
Thanks for the review.
> -----Original Message-----
> From: Willem de Bruijn <willemdebruijn.kernel@xxxxxxxxx>
> Sent: Monday, November 2, 2020 7:01 PM
> To: George Cherian <gcherian@xxxxxxxxxxx>
> Cc: Network Development <netdev@xxxxxxxxxxxxxxx>; linux-kernel <linux-
> kernel@xxxxxxxxxxxxxxx>; Jakub Kicinski <kuba@xxxxxxxxxx>; David Miller
> <davem@xxxxxxxxxxxxx>; Sunil Kovvuri Goutham
> <sgoutham@xxxxxxxxxxx>; Linu Cherian <lcherian@xxxxxxxxxxx>;
> Geethasowjanya Akula <gakula@xxxxxxxxxxx>; masahiroy@xxxxxxxxxx
> Subject: Re: [net-next PATCH 1/3] octeontx2-af: Add devlink suppoort
> to af driver
>
> On Mon, Nov 2, 2020 at 12:07 AM George Cherian
> <george.cherian@xxxxxxxxxxx> wrote:
> >
> > Add devlink support to AF driver. Basic devlink support is added.
> > Currently info_get is the only supported devlink ops.
> >
> > devlink ouptput looks like this
> > # devlink dev
> > pci/0002:01:00.0
> > # devlink dev info
> > pci/0002:01:00.0:
> > driver octeontx2-af
> > versions:
> > fixed:
> > mbox version: 9
> >
> > Signed-off-by: Sunil Kovvuri Goutham <sgoutham@xxxxxxxxxxx>
> > Signed-off-by: Jerin Jacob <jerinj@xxxxxxxxxxx>
> > Signed-off-by: George Cherian <george.cherian@xxxxxxxxxxx>
>
> > diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu.h
> > b/drivers/net/ethernet/marvell/octeontx2/af/rvu.h
> > index 5ac9bb12415f..c112b299635d 100644
> > --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu.h
> > +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu.h
> > @@ -12,7 +12,10 @@
> > #define RVU_H
> >
> > #include <linux/pci.h>
> > +#include <net/devlink.h>
> > +
> > #include "rvu_struct.h"
> > +#include "rvu_devlink.h"
> > #include "common.h"
> > #include "mbox.h"
> >
> > @@ -372,10 +375,10 @@ struct rvu {
> > struct npc_kpu_profile_adapter kpu;
> >
> > struct ptp *ptp;
> > -
>
> accidentally removed this line?
Yes.
>
> > #ifdef CONFIG_DEBUG_FS
> > struct rvu_debugfs rvu_dbg;
> > #endif
> > + struct rvu_devlink *rvu_dl;
> > };
>
>
> > +int rvu_register_dl(struct rvu *rvu)
> > +{
> > + struct rvu_devlink *rvu_dl;
> > + struct devlink *dl;
> > + int err;
> > +
> > + rvu_dl = kzalloc(sizeof(*rvu_dl), GFP_KERNEL);
> > + if (!rvu_dl)
> > + return -ENOMEM;
> > +
> > + dl = devlink_alloc(&rvu_devlink_ops, sizeof(struct rvu_devlink));
> > + if (!dl) {
> > + dev_warn(rvu->dev, "devlink_alloc failed\n");
> > + return -ENOMEM;
>
> rvu_dl not freed on error.
Thanks for pointing out, will address in v2.
>
> This happens a couple of times in these patches
Will fix it.
>
> Is the intermediate struct needed, or could you embed the fields directly into
> rvu and use container_of to get from devlink to struct rvu? Even if needed,
> perhaps easier to embed the struct into rvu rather than a pointer.
Currently only 2 hardware blocks are supported NIX and NPA.
Error reporting for more HW blocks will be added, that’s the reason for the intermediate struct.
>
> > + }
> > +
> > + err = devlink_register(dl, rvu->dev);
> > + if (err) {
> > + dev_err(rvu->dev, "devlink register failed with error %d\n", err);
> > + devlink_free(dl);
> > + return err;
> > + }
> > +
> > + rvu_dl->dl = dl;
> > + rvu_dl->rvu = rvu;
> > + rvu->rvu_dl = rvu_dl;
> > + return 0;
> > +}
> > +
> > +void rvu_unregister_dl(struct rvu *rvu) {
> > + struct rvu_devlink *rvu_dl = rvu->rvu_dl;
> > + struct devlink *dl = rvu_dl->dl;
> > +
> > + if (!dl)
> > + return;
> > +
> > + devlink_unregister(dl);
> > + devlink_free(dl);
>
> here too
Yes, will fix in v2.
Regards,
-George