From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by dpdk.org (Postfix) with ESMTP id 43A47199B0 for ; Wed, 16 May 2018 17:42:06 +0200 (CEST) Received: by mail-wm0-f45.google.com with SMTP id a67-v6so2651960wmf.3 for ; Wed, 16 May 2018 08:42:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=U2EjdS2Y2Onhp3O4Io0+q+bE7vpjKgJLOZPFaT1Qp1w=; b=OzIPSHE9S49gKuht3N231nVJnnvW8fXlOthc/sL/I+ReFhr7bNK/Dt/Xy84QEIumLx RcMtsyvLxWYBI8ot0emWe++Hm/P1TVPAlCX7brNZjxR8ZL6jvsFpfRJMLLS2ODcXx/3P 6bNwzxe7HDuS8NtU3F2+aOf2JeQj02WbZ6pEx1HHxMyyvX+G8OUmzP8N3zu0yPtVlt+I cGds8utSJICHS9gcUy71it0zZoEl4Ufg+2meJH4gUpmExJGbz/Vvdg/8To6aMoibtg2L 99+g50CnPhZafl5lGp10yTh6nOiO6/IIn64/uyz0fCt4H6qNHdx7XKUQbxmfTA0uosM4 Dtjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=U2EjdS2Y2Onhp3O4Io0+q+bE7vpjKgJLOZPFaT1Qp1w=; b=G+uE0C4gwVAKD61zFPuCfcbD5L1EewvEbu2khs67qZOKJ9uciSPBUHGI3sfrgXL2xL sbwgeSlv7fW80ATqti93AkcdMJEQI0fWHVWowOS1Va39NA5+//C36h4mOBHwDyT/WwRb Ce0mQZH/vcvxq1k4YdhnHuRRAER6LtjHEmsssPVLNVQLML1sxCbDgsky9ViWGUDmB9J3 jJVZi17OhaxTjJUnb4WLlwOo4h8r/UClBhbMVm9GPJ4iBYhDcyIn9oL3zjwbMzcscGqq +01Ep60abK+kVO8neNjLnioGRBUyFDXiwvlCcpHcS+FCadmn4wKwnKr/GC+YKYXaCbK1 +qDQ== X-Gm-Message-State: ALKqPwePzM9yRQY6vjutCD/v0VFAYZk3Ng99B600DTg5VNAhPaPz66Jm jBPVsxeXL+3Qw1AqTWPpnHh8gQ== X-Google-Smtp-Source: AB8JxZqWe5mHBNXsj2su0UPX4B423FMCtmO8ANPgF9eylfNe4PZgGm1G2IVlJd5JQc62VsOKVppXkg== X-Received: by 2002:a1c:2856:: with SMTP id o83-v6mr1145008wmo.3.1526485325968; Wed, 16 May 2018 08:42:05 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 76-v6sm21028038wmj.0.2018.05.16.08.42.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 16 May 2018 08:42:05 -0700 (PDT) Date: Wed, 16 May 2018 17:41:50 +0200 From: Adrien Mazarguil To: Ferruh Yigit Cc: dev@dpdk.org, stable@dpdk.org, Qi Zhang Message-ID: <20180516154052.16836-2-adrien.mazarguil@6wind.com> References: <20180516154052.16836-1-adrien.mazarguil@6wind.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180516154052.16836-1-adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.11.0 Subject: [dpdk-dev] [PATCH 2/2] ethdev: fix shallow copy of flow API RAW item X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 May 2018 15:42:06 -0000 Like original commit mentioned below, this fix synchronizes flow rule copy function with testpmd's own implementation following "app/testpmd: fix copy of raw flow item (revisited)". Fixes: d0ad8648b1c5 ("ethdev: fix shallow copy of flow API RSS action") Cc: stable@dpdk.org Cc: Qi Zhang Signed-off-by: Adrien Mazarguil --- lib/librte_ethdev/rte_flow.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c index 7947529da..b2afba089 100644 --- a/lib/librte_ethdev/rte_flow.c +++ b/lib/librte_ethdev/rte_flow.c @@ -300,17 +300,26 @@ flow_item_spec_copy(void *buf, const struct rte_flow_item *item, enum item_spec_type type) { size_t size = 0; - const void *item_spec = + const void *data = type == ITEM_SPEC ? item->spec : type == ITEM_LAST ? item->last : type == ITEM_MASK ? item->mask : NULL; - if (!item_spec) + if (!item->spec || !data) goto empty; switch (item->type) { union { const struct rte_flow_item_raw *raw; + } spec; + union { + const struct rte_flow_item_raw *raw; + } last; + union { + const struct rte_flow_item_raw *raw; + } mask; + union { + const struct rte_flow_item_raw *raw; } src; union { struct rte_flow_item_raw *raw; @@ -318,11 +327,21 @@ flow_item_spec_copy(void *buf, const struct rte_flow_item *item, size_t off; case RTE_FLOW_ITEM_TYPE_RAW: - src.raw = item_spec; + spec.raw = item->spec; + last.raw = item->last ? item->last : item->spec; + mask.raw = item->mask ? item->mask : &rte_flow_item_raw_mask; + src.raw = data; dst.raw = buf; off = RTE_ALIGN_CEIL(sizeof(struct rte_flow_item_raw), sizeof(*src.raw->pattern)); - size = off + src.raw->length * sizeof(*src.raw->pattern); + if (type == ITEM_SPEC || + (type == ITEM_MASK && + ((spec.raw->length & mask.raw->length) >= + (last.raw->length & mask.raw->length)))) + size = spec.raw->length & mask.raw->length; + else + size = last.raw->length & mask.raw->length; + size = off + size * sizeof(*src.raw->pattern); if (dst.raw) { memcpy(dst.raw, src.raw, sizeof(*src.raw)); dst.raw->pattern = memcpy((uint8_t *)dst.raw + off, @@ -333,7 +352,7 @@ flow_item_spec_copy(void *buf, const struct rte_flow_item *item, default: size = rte_flow_desc_item[item->type].size; if (buf) - memcpy(buf, item_spec, size); + memcpy(buf, data, size); break; } empty: -- 2.11.0