From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6272BA04C5 for ; Fri, 4 Sep 2020 16:47:07 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 29F9EDE0; Fri, 4 Sep 2020 16:47:07 +0200 (CEST) Received: from stargate.chelsio.com (stargate.chelsio.com [12.32.117.8]) by dpdk.org (Postfix) with ESMTP id EC903DE0 for ; Fri, 4 Sep 2020 16:47:04 +0200 (CEST) Received: from localhost (scalar.blr.asicdesigners.com [10.193.185.94]) by stargate.chelsio.com (8.13.8/8.13.8) with ESMTP id 084El26E023520; Fri, 4 Sep 2020 07:47:02 -0700 Date: Fri, 4 Sep 2020 20:03:00 +0530 From: Rahul Lakkireddy To: Kevin Traynor Cc: stable@dpdk.org Message-ID: <20200904143034.GA25421@chelsio.com> References: <1599222867-25240-1-git-send-email-rahul.lakkireddy@chelsio.com> <2cb588e2-b5ff-3d39-4dc7-650a57bb32d0@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2cb588e2-b5ff-3d39-4dc7-650a57bb32d0@redhat.com> User-Agent: Mutt/1.5.24 (2015-08-30) Subject: Re: [dpdk-stable] [PATCH 18.11] net/cxgbe: fix L2T leak in filter error and free path X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" On Friday, September 09/04/20, 2020 at 15:10:43 +0100, Kevin Traynor wrote: > On 04/09/2020 13:34, Rahul Lakkireddy wrote: > > [ upstream commit e0e1496be5fcabd31807ef9981c421963a9f8578 ] > > > > Free up Layer 2 Table (L2T) entry properly during filter create > > failure and filter delete. > > > > Fixes: 1decc62b1cbe ("net/cxgbe: add flow operations to offload VLAN actions") > > > > Signed-off-by: Rahul Lakkireddy > > --- > > Thanks Rahul. There was a bit of fuzz when applying because I had > rebased below locally. > > net/cxgbe: fix double MPS alloc by flow validate and create > > [ upstream commit be5f4d5ced10f9d7edc8ba4b3f1d98b9d476d367 ] > > Both commits are in the queue, please take a look and let me know if any > issue. > > https://github.com/kevintraynor/dpdk-stable-queue/commit/b82919008c7462a0f2e117e65210754ccb7470f1 > > https://github.com/kevintraynor/dpdk-stable-queue/commit/7d482e8b14c7436f73e0497b6f1a0f00e0dc6eba > > Kevin. > Hi Kevin, Could you move the cxgbe_l2t_release() above the cxgbe_mpstcam_remove()? Like below: if (f->l2t) cxgbe_l2t_release(f->l2t); if (f->fs.mask.macidx) cxgbe_mpstcam_remove(pi, f->fs.val.macidx); Let me know if you want me to resend the patch on top of dpdk-stable-queue tree with the fuzz fixed. Thanks, Rahul > > drivers/net/cxgbe/cxgbe_filter.c | 29 ++++++++++++++++------------- > > 1 file changed, 16 insertions(+), 13 deletions(-) > > > > diff --git a/drivers/net/cxgbe/cxgbe_filter.c b/drivers/net/cxgbe/cxgbe_filter.c > > index 489c23249..0b6629895 100644 > > --- a/drivers/net/cxgbe/cxgbe_filter.c > > +++ b/drivers/net/cxgbe/cxgbe_filter.c > > @@ -276,6 +276,9 @@ static void clear_filter(struct filter_entry *f) > > if (f->clipt) > > cxgbe_clip_release(f->dev, f->clipt); > > > > + if (f->l2t) > > + cxgbe_l2t_release(f->l2t); > > + > > /* The zeroing of the filter rule below clears the filter valid, > > * pending, locked flags etc. so it's all we need for > > * this operation. > > @@ -711,19 +714,6 @@ static int set_filter_wr(struct rte_eth_dev *dev, unsigned int fidx) > > unsigned int port_id = ethdev2pinfo(dev)->port_id; > > int ret; > > > > - /* > > - * If the new filter requires loopback Destination MAC and/or VLAN > > - * rewriting then we need to allocate a Layer 2 Table (L2T) entry for > > - * the filter. > > - */ > > - if (f->fs.newvlan) { > > - /* allocate L2T entry for new filter */ > > - f->l2t = cxgbe_l2t_alloc_switching(f->dev, f->fs.vlan, > > - f->fs.eport, f->fs.dmac); > > - if (!f->l2t) > > - return -ENOMEM; > > - } > > - > > ctrlq = &adapter->sge.ctrlq[port_id]; > > mbuf = rte_pktmbuf_alloc(ctrlq->mb_pool); > > if (!mbuf) { > > @@ -1015,6 +1005,19 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned int filter_id, > > } > > } > > > > + /* If the new filter requires loopback Destination MAC and/or VLAN > > + * rewriting then we need to allocate a Layer 2 Table (L2T) entry for > > + * the filter. > > + */ > > + if (f->fs.newvlan) { > > + f->l2t = cxgbe_l2t_alloc_switching(f->dev, f->fs.vlan, > > + f->fs.eport, f->fs.dmac); > > + if (!f->l2t) { > > + ret = -ENOMEM; > > + goto free_tid; > > + } > > + } > > + > > /* > > * Attempt to set the filter. If we don't succeed, we clear > > * it and return the failure. > > >