Message ID | 20181120175635.GA21691@localhost.localdomain |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
Series | net: thunderx: nicvf_xdp_setup error code path | expand |
> -----Original Message----- > From: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> > Sent: 20 November 2018 23:27 > To: netdev@vger.kernel.org > Cc: Goutham, Sunil <Sunil.Goutham@cavium.com> > Subject: net: thunderx: nicvf_xdp_setup error code path > > External Email > > Hi all, > > looking at thunderx XDP support I noticed that nic->xdp_prog pointer in > nicvf_xdp_setup is not actually set to NULL if bpf_prog_add fails but it > is initialized with bpf_prog_add error code. xdp_prog pointer value is used in > the driver to verify if XDP is currently enabled. > Moreover nicvf_xdp_setup does not report to the userspace any error code in > case of failure. > I wrote the following patch to fix the reported issues. Please note I just > compiled it, not actually tested since I have no thunderx nic at the moment. > > @Sunil: could you please give it a whirl? If it is ok I will post a formal > patch, thanks > > Regards, > Lorenzo > Thanks for fixing, changes look good to me, Sunil.
From: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> Date: Tue, 20 Nov 2018 18:56:36 +0100 > Hi all, > > looking at thunderx XDP support I noticed that nic->xdp_prog pointer in > nicvf_xdp_setup is not actually set to NULL if bpf_prog_add fails but it > is initialized with bpf_prog_add error code. xdp_prog pointer value is used in > the driver to verify if XDP is currently enabled. > Moreover nicvf_xdp_setup does not report to the userspace any error code in > case of failure. > I wrote the following patch to fix the reported issues. Please note I just > compiled it, not actually tested since I have no thunderx nic at the moment. > > @Sunil: could you please give it a whirl? If it is ok I will post a formal > patch, thanks Sunil did review this, so please resubmit formally.
> > Sunil did review this, so please resubmit formally. Hi David, I have already posted a formal patch: https://patchwork.ozlabs.org/patch/1001213/ Reviewing the mail I have not explicitly added you in cc, sorry Regards, Lorenzo
diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_main.c b/drivers/net/ethernet/cavium/thunder/nicvf_main.c index 768f584f8392..88f8a8fa93cd 100644 --- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c +++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c @@ -1784,6 +1784,7 @@ static int nicvf_xdp_setup(struct nicvf *nic, struct bpf_prog *prog) bool if_up = netif_running(nic->netdev); struct bpf_prog *old_prog; bool bpf_attached = false; + int ret = 0; /* For now just support only the usual MTU sized frames */ if (prog && (dev->mtu > 1500)) { @@ -1817,8 +1818,12 @@ static int nicvf_xdp_setup(struct nicvf *nic, struct bpf_prog *prog) if (nic->xdp_prog) { /* Attach BPF program */ nic->xdp_prog = bpf_prog_add(nic->xdp_prog, nic->rx_queues - 1); - if (!IS_ERR(nic->xdp_prog)) + if (!IS_ERR(nic->xdp_prog)) { bpf_attached = true; + } else { + ret = PTR_ERR(nic->xdp_prog); + nic->xdp_prog = NULL; + } } /* Calculate Tx queues needed for XDP and network stack */ @@ -1830,7 +1835,7 @@ static int nicvf_xdp_setup(struct nicvf *nic, struct bpf_prog *prog) netif_trans_update(nic->netdev); } - return 0; + return ret; } static int nicvf_xdp(struct net_device *netdev, struct netdev_bpf *xdp)