From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-f196.google.com (mail-wr0-f196.google.com [209.85.128.196]) by dpdk.org (Postfix) with ESMTP id 95E2E1B1D6 for ; Wed, 10 Jan 2018 17:42:55 +0100 (CET) Received: by mail-wr0-f196.google.com with SMTP id 60so8920050wrl.5 for ; Wed, 10 Jan 2018 08:42:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=NoMSYa1y8ZloPhc3FBL5z9/1qo7xBxSQfr8k7TVSPHw=; b=RaN1xnqI/3GGypgXfofa19VSNLM0Vuv3BqVVRxvV7n7WOiWidEsQjflHcgx2dyuFxC CAcXpcpE7WTrsBlAPOXGTQ0/T3nhP3SHjNpmOU5bg49TUbbuWKuwz8YPd73OwC4S32rX lEcWMhyX3VhFPLZKBJCgbwM7LQmXEyW97Sqx+UZFHgrg2c9SAjKpDeZEmJ/Y3RjdTPdV iHmt412gySRCV3ndwrJePqBZlAdDUIx0VoV78M0iB0KmX7czEYuqlT17JpTjdeVv04ns kEmQuqNHVBL4kCScXnbpSby0kRGdPrjOa3pK+Q9+U4nNPgdKxe0gyd1P5vnP9adSgk5S x5+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=NoMSYa1y8ZloPhc3FBL5z9/1qo7xBxSQfr8k7TVSPHw=; b=HcsyIyzr4lSwgkR5SSiINGLhLMGBHTv2LfAfVqAOTVN+ZdtBWBLWeD+tEImdDxpZiy /W7fP0+j01N8JINcYzXLo6cwjk92E0hkFx1Ceiu7xuo3R3sJMh55709re2QaA4jEp48S ZGYk5zwLeqT9jmoV0/1L+vEZnvD/PV6CBn4rFFAEVR6yQvqY+0AOpA0rQje6GwL48inY tJGKS6BlY/usoZFbOOIV3erMVqv5XxVYW5PkkAYfPSvhNhsaZ9mYV5aJ3zCmC0fe6NNd INacf6kalh0k5WaL0C2hAjglVG07gW2sqUIgsomnmmp6hVUt72cdHT0NmX/9aySujqUk WtgA== X-Gm-Message-State: AKGB3mK6vKF+Cy7lr74iRAECwoq16mML4Ih14EO6MxwlBCXAqIR86Lyf RgJLqiydCbYKpP5DX5VOq4q7BZi+xQI= X-Google-Smtp-Source: ACJfBovPZL4/JG/6pNpjln8N0+WbRmEZ9dYzQ4Aj+UyBVUlCvZ5E6JzMBD1YRNx2Mvt6ojXeV8RJ6g== X-Received: by 10.223.160.217 with SMTP id n25mr18057112wrn.25.1515602574957; Wed, 10 Jan 2018 08:42:54 -0800 (PST) Received: from [192.168.1.79] (82.107.69.91.rev.sfr.net. [91.69.107.82]) by smtp.gmail.com with ESMTPSA id q3sm11703815wre.28.2018.01.10.08.42.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 Jan 2018 08:42:54 -0800 (PST) To: Moti Haimovsky Cc: ferruh.yigit@intel.com, dev@dpdk.org References: <1515093521-185221-3-git-send-email-motih@mellanox.com> <1515601248-39458-1-git-send-email-motih@mellanox.com> <1515601248-39458-2-git-send-email-motih@mellanox.com> From: Pascal Mazon Message-ID: Date: Wed, 10 Jan 2018 17:42:53 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: <1515601248-39458-2-git-send-email-motih@mellanox.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-Language: en-US Subject: Re: [dpdk-dev] [PATCH V4 2/2] net/tap: convert to new Rx offloads API 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, 10 Jan 2018 16:42:55 -0000 Acked-by: Pascal Mazon On 10/01/2018 17:20, Moti Haimovsky wrote: > Ethdev Rx offloads API has changed since: > commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API") > This commit support the new Rx offloads API. > > Signed-off-by: Moti Haimovsky > --- > V4: > Modifications according to inputs from Pascal Mazon > * Removed extra braces. > > V3: > * Fixed coding style warnings > > V2: > * Fixed coding style warnings > --- > drivers/net/tap/rte_eth_tap.c | 66 +++++++++++++++++++++++++++++++++++++------ > 1 file changed, 58 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c > index 1a84adb..8e790d1 100644 > --- a/drivers/net/tap/rte_eth_tap.c > +++ b/drivers/net/tap/rte_eth_tap.c > @@ -286,6 +286,43 @@ enum ioctl_mode { > } > } > > +static uint64_t > +tap_rx_offload_get_port_capa(void) > +{ > + /* > + * In order to support legacy apps, > + * report capabilities also as port capabilities. > + */ > + return DEV_RX_OFFLOAD_SCATTER | > + DEV_RX_OFFLOAD_IPV4_CKSUM | > + DEV_RX_OFFLOAD_UDP_CKSUM | > + DEV_RX_OFFLOAD_TCP_CKSUM; > +} > + > +static uint64_t > +tap_rx_offload_get_queue_capa(void) > +{ > + return DEV_RX_OFFLOAD_SCATTER | > + DEV_RX_OFFLOAD_IPV4_CKSUM | > + DEV_RX_OFFLOAD_UDP_CKSUM | > + DEV_RX_OFFLOAD_TCP_CKSUM; > +} > + > +static bool > +tap_rxq_are_offloads_valid(struct rte_eth_dev *dev, uint64_t offloads) > +{ > + uint64_t port_offloads = dev->data->dev_conf.rxmode.offloads; > + uint64_t queue_supp_offloads = tap_rx_offload_get_queue_capa(); > + uint64_t port_supp_offloads = tap_rx_offload_get_port_capa(); > + > + if ((offloads & (queue_supp_offloads | port_supp_offloads)) != > + offloads) > + return false; > + if ((port_offloads ^ offloads) & port_supp_offloads) > + return false; > + return true; > +} > + > /* Callback to handle the rx burst of packets to the correct interface and > * file descriptor(s) in a multi-queue setup. > */ > @@ -310,8 +347,9 @@ enum ioctl_mode { > int len; > > len = readv(rxq->fd, *rxq->iovecs, > - 1 + (rxq->rxmode->enable_scatter ? > - rxq->nb_rx_desc : 1)); > + 1 + > + (rxq->rxmode->offloads & DEV_RX_OFFLOAD_SCATTER ? > + rxq->nb_rx_desc : 1)); > if (len < (int)sizeof(struct tun_pi)) > break; > > @@ -366,7 +404,7 @@ enum ioctl_mode { > seg->next = NULL; > mbuf->packet_type = rte_net_get_ptype(mbuf, NULL, > RTE_PTYPE_ALL_MASK); > - if (rxq->rxmode->hw_ip_checksum) > + if (rxq->rxmode->offloads & DEV_RX_OFFLOAD_CHECKSUM) > tap_verify_csum(mbuf); > > /* account for the receive frame */ > @@ -727,12 +765,12 @@ enum ioctl_mode { > dev_info->min_rx_bufsize = 0; > dev_info->pci_dev = NULL; > dev_info->speed_capa = tap_dev_speed_capa(); > - dev_info->rx_offload_capa = (DEV_RX_OFFLOAD_IPV4_CKSUM | > - DEV_RX_OFFLOAD_UDP_CKSUM | > - DEV_RX_OFFLOAD_TCP_CKSUM); > + dev_info->rx_queue_offload_capa = tap_rx_offload_get_queue_capa(); > + dev_info->rx_offload_capa = tap_rx_offload_get_port_capa() | > + dev_info->rx_queue_offload_capa; > dev_info->tx_queue_offload_capa = tap_tx_offload_get_queue_capa(); > - dev_info->tx_offload_capa = dev_info->tx_queue_offload_capa | > - tap_tx_offload_get_port_capa(); > + dev_info->tx_offload_capa = tap_tx_offload_get_port_capa() | > + dev_info->tx_queue_offload_capa; > } > > static int > @@ -1048,6 +1086,18 @@ enum ioctl_mode { > return -1; > } > > + /* Verify application offloads are valid for our port and queue. */ > + if (!tap_rxq_are_offloads_valid(dev, rx_conf->offloads)) { > + rte_errno = ENOTSUP; > + RTE_LOG(ERR, PMD, > + "%p: Rx queue offloads 0x%lx don't match port " > + "offloads 0x%lx or supported offloads 0x%lx\n", > + (void *)dev, rx_conf->offloads, > + dev->data->dev_conf.rxmode.offloads, > + (tap_rx_offload_get_port_capa() | > + tap_rx_offload_get_queue_capa())); > + return -rte_errno; > + } > rxq->mp = mp; > rxq->trigger_seen = 1; /* force initial burst */ > rxq->in_port = dev->data->port_id;