On 09/11/2018 12:10 AM, Ophir Munk wrote: > Hi Sugesh, > > Patch V2 was sent https://patchwork.ozlabs.org/patch/968292/ > Looking forward to your test results. > > Kevin - I suggest adding you as co-author (will require your sign off). > Please confirm. >
Hi Ophir, I don't think it's needed. Actually, you made a simpler way to fix it, based on the idea :-) Kevin. > Regards, > Ophir > >> -----Original Message----- >> From: Chandran, Sugesh [mailto:sugesh.chand...@intel.com] >> Sent: Monday, September 10, 2018 5:58 PM >> To: Eelco Chaudron <echau...@redhat.com>; Ophir Munk >> <ophi...@mellanox.com> >> Cc: Kevin Traynor <ktray...@redhat.com>; ovs-dev@openvswitch.org; >> Shahaf Shuler <shah...@mellanox.com>; Asaf Penso >> <as...@mellanox.com>; Thomas Monjalon <tho...@monjalon.net> >> Subject: RE: [ovs-dev] [dpdk-hwol PATCH v1] netdev-dpdk: Upgrade to dpdk >> v18.08.0 >> >> Hi Ophir, >> Could you please send out v2 of this patch with the changes from Kevin? >> I will test it in our lab to see if its working >> >> >> Regards >> _Sugesh >> >>> -----Original Message----- >>> From: Eelco Chaudron [mailto:echau...@redhat.com] >>> Sent: Wednesday, September 5, 2018 1:35 PM >>> To: Ophir Munk <ophi...@mellanox.com> >>> Cc: Kevin Traynor <ktray...@redhat.com>; Chandran, Sugesh >>> <sugesh.chand...@intel.com>; ovs-dev@openvswitch.org; Shahaf Shuler >>> <shah...@mellanox.com>; Asaf Penso <as...@mellanox.com>; Thomas >>> Monjalon <tho...@monjalon.net> >>> Subject: Re: [ovs-dev] [dpdk-hwol PATCH v1] netdev-dpdk: Upgrade to >>> dpdk >>> v18.08.0 >>> >>> Hi Ophir, >>> >>> I get the same error when trying this with an XL710, wanted to see if >>> the patch would work for non-root users. >>> Did not further troubleshoot it. >>> >>> Also I get the following compile warnings(errors): >>> >>> mv -f $depbase.Tpo $depbase.Po >>> lib/netdev-dpdk.c: In function 'netdev_dpdk_destruct': >>> lib/netdev-dpdk.c:1331:9: error: 'rte_eth_dev_detach' is deprecated >>> (declared at >>> /home/root/OVS_dpdk-hwol_DPDK_v18.08/dpdk/x86_64-native-linuxapp- >>> gcc/include/rte_ethdev.h:1451) >>> [-Werror=deprecated-declarations] >>> if (rte_eth_dev_detach(dev->port_id, devname) < 0) { >>> ^ >>> lib/netdev-dpdk.c: In function 'netdev_dpdk_process_devargs': >>> lib/netdev-dpdk.c:1624:13: error: 'rte_eth_dev_attach' is deprecated >>> (declared at >>> /home/root/OVS_dpdk-hwol_DPDK_v18.08/dpdk/x86_64-native-linuxapp- >>> gcc/include/rte_ethdev.h:1435) >>> [-Werror=deprecated-declarations] >>> if (!rte_eth_dev_attach(devargs, &new_port_id)) { >>> ^ >>> lib/netdev-dpdk.c: In function 'netdev_dpdk_detach': >>> lib/netdev-dpdk.c:3154:5: error: 'rte_eth_dev_detach' is deprecated >>> (declared at >>> /home/root/OVS_dpdk-hwol_DPDK_v18.08/dpdk/x86_64-native-linuxapp- >>> gcc/include/rte_ethdev.h:1451) >>> [-Werror=deprecated-declarations] >>> ret = rte_eth_dev_detach(port_id, devname); >>> ^ >>> lib/netdev-dpdk.c: At top level: >>> >>> >>> //Eelco >>> >>> >>> On 5 Sep 2018, at 12:44, Ophir Munk wrote: >>> >>>> Hi, >>>> I suggest the following trouble-shooting steps: >>>> 1. Try Kevin's fix for Niantic (attached here as a non-official >>>> patch on top of latest dpdk-hwol branch). >>>> Sugesh - can you please try it? >>>> 2. Sugesh - do you have the same issue with other NICs than Niantic >>>> on latest dpdk-hwol branch? (other NICs used to work a month >>>> ago) >>>> 3. I will try on my setup. >>>> >>>> Regards, >>>> Ophir >>>> >>>>> -----Original Message----- >>>>> From: Kevin Traynor [mailto:ktray...@redhat.com] >>>>> Sent: Wednesday, September 05, 2018 9:28 AM >>>>> To: Chandran, Sugesh <sugesh.chand...@intel.com>; Ophir Munk >>>>> <ophi...@mellanox.com>; ovs-dev@openvswitch.org >>>>> Cc: Asaf Penso <as...@mellanox.com>; Stokes, Ian >>>>> <ian.sto...@intel.com>; Ben Pfaff <b...@ovn.org>; Shahaf Shuler >>>>> <shah...@mellanox.com>; Thomas Monjalon >> <tho...@monjalon.net>; >>> Olga >>>>> Shern <ol...@mellanox.com> >>>>> Subject: Re: [dpdk-hwol PATCH v1] netdev-dpdk: Upgrade to dpdk >>>>> v18.08.0 >>>>> >>>>> On 09/05/2018 07:44 AM, Chandran, Sugesh wrote: >>>>>> Hi Ophir, >>>>>> >>>>>> Thank you for working on this. >>>>>> I tried to run some tests and getting some errors while adding >>>>>> physical ports as below. I use Niantic NIC for this test >>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>> 2018-09-05T06:34:58Z|00069|dpdk|INFO|Device with port_id=0 >> already >>>>>> stopped 2018-09-05T06:34:58Z|00070|dpdk|ERR|Ethdev port_id=0 >>>>>> invalid >>>>>> rss_hf: 0x3afbc, valid value: 0x38d34 >>>>>> 2018-09-05T06:34:58Z|00071|netdev_dpdk|WARN|Interface dpdk0 >>>>> eth_dev >>>>>> setup error Invalid argument >>>>>> 2018-09-05T06:34:58Z|00072|netdev_dpdk|ERR|Interface >> dpdk0(rxq:2 >>>>> txq:2 >>>>>> lsc interrupt mode:false) configure error: Invalid argument >>>>>> 2018-09-05T06:34:58Z|00073|dpif_netdev|ERR|Failed to set interface >>>>>> dpdk0 new configuration 2018-09- >>>>> 05T06:34:58Z|00074|bridge|WARN|could >>>>>> not add network device dpdk0 to ofproto (No such device) >>>>>> ovs-vsctl: Error detected while setting up 'dpdk0': could not add >>>>>> network >>>>> device dpdk0 to ofproto (No such device). See ovs-vswitchd log for >>>>> details. >>>>>> ovs-vsctl: The default log directory is >>>>>> "/usr/local/var/log/openvswitch". >>>>>> >>>>> >>>>> I didn't have time to compare the below patch with the ones that I >>>>> did, but I saw that this patch was needed for niantic >>>>> >> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2F >>>>> gi >>>>> t >>>>> hub.com%2Fkevintraynor%2Fovs-dpdk- >>>>> >> master%2Fcommit%2F88f46cc5ab338eb4f3ca5db1eacd0effefe4fa0c&d >>>>> >> ata=02%7C01%7Cophirmu%40mellanox.com%7Cd203c89637bf4f27835508d >>>>> >> 61309798e%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C63671 >>>>> >> 7328752336932&sdata=L7rWODNNEStIfibwXybu6Ub7Yvn%2BfLHk6VT >>>>> we14jxyY%3D&reserved=0 >>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>> Please find below for my comments. >>>>>> >>>>>> >>>>>> Regards >>>>>> _Sugesh >>>>>> >>>>>>> -----Original Message----- >>>>>>> From: Ophir Munk [mailto:ophi...@mellanox.com] >>>>>>> Sent: Monday, September 3, 2018 3:19 PM >>>>>>> To: ovs-dev@openvswitch.org >>>>>>> Cc: Asaf Penso <as...@mellanox.com>; Chandran, Sugesh >>>>>>> <sugesh.chand...@intel.com>; Stokes, Ian <ian.sto...@intel.com>; >>>>>>> Ben Pfaff <b...@ovn.org>; Shahaf Shuler <shah...@mellanox.com>; >>>>>>> Thomas Monjalon <tho...@monjalon.net>; Olga Shern >>>>>>> <ol...@mellanox.com>; Ophir Munk <ophi...@mellanox.com>; >> Kevin >>>>>>> Traynor <ktray...@redhat.com> >>>>>>> Subject: [dpdk-hwol PATCH v1] netdev-dpdk: Upgrade to dpdk >>>>>>> v18.08.0 >>>>>>> >>>>>>> 1. Enable compilation and linkage with dpdk 18.08.0 The following >>>>>>> dpdk commits which were introduced after dpdk 17.11.x require OVS >>>>>>> updates to accommodate to the dpdk changes. >>>>>>> - ce17eddefc20 ("ethdev: introduce Rx queue offloads API") >>>>>>> - ab3ce1e0c193 ("ethdev: remove old offload API") >>>>>>> - c06ddf9698e0 ("meter: add configuration profile") >>>>>>> - e58638c32411 ("ethdev: fix TPID handling in flow API") >>>>>>> - cd8c7c7ce241 ("ethdev: replace bus specific struct with generic >>>>>>> dev") >>>>>>> - ac8d22de2394 ("ethdev: flatten RSS configuration in flow API") >>>>>>> >>>>>>> 2. Update references to DPDK version in Documentation >>>>>>> >>>>>>> 3. Update DPDK version in travis' linux-build script >>>>>>> >>>>>>> Signed-off-by: Ophir Munk <ophi...@mellanox.com> >>>>>>> --- >>>>>>> .travis/linux-build.sh | 2 +- >>>>>>> Documentation/faq/releases.rst | 2 +- >>>>>>> lib/netdev-dpdk.c | 135 >>>>>>> +++++++++++++++++++++++++++++-------- >>>>> ---- >>>>>>> 3 files changed, 98 insertions(+), 41 deletions(-) >>>>>>> >>>>>>> diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh >>>>>>> index >>>>>>> 4b9fc4a..c60ac71 >>>>>>> 100755 >>>>>>> --- a/.travis/linux-build.sh >>>>>>> +++ b/.travis/linux-build.sh >>>>>>> @@ -83,7 +83,7 @@ fi >>>>>>> >>>>>>> if [ "$DPDK" ]; then >>>>>>> if [ -z "$DPDK_VER" ]; then >>>>>>> - DPDK_VER="17.11.3" >>>>>>> + DPDK_VER="18.08.0" >>>>>>> fi >>>>>>> install_dpdk $DPDK_VER >>>>>>> if [ "$CC" = "clang" ]; then diff --git >>>>>>> a/Documentation/faq/releases.rst b/Documentation/faq/releases.rst >>>>>>> index 41d41e3..646ae09 100644 >>>>>>> --- a/Documentation/faq/releases.rst >>>>>>> +++ b/Documentation/faq/releases.rst >>>>>>> @@ -168,7 +168,7 @@ Q: What DPDK version does each Open >> vSwitch >>>>>>> release work with? >>>>>>> 2.7.x 16.11.7 >>>>>>> 2.8.x 17.05.2 >>>>>>> 2.9.x 17.11.3 >>>>>>> - 2.10.x 17.11.3 >>>>>>> + 2.10.x 18.08.0 >>>>>>> ============ ======= >>>>>>> >>>>>>> Q: Are all the DPDK releases that OVS versions work with >>>>>>> maintained? >>>>>>> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index >>>>>>> f91aa27..80d2af9 >>>>>>> 100644 >>>>>>> --- a/lib/netdev-dpdk.c >>>>>>> +++ b/lib/netdev-dpdk.c >>>>>>> @@ -168,11 +168,7 @@ static const struct rte_eth_conf port_conf = >> { >>>>>>> .rxmode = { >>>>>>> .mq_mode = ETH_MQ_RX_RSS, >>>>>>> .split_hdr_size = 0, >>>>>>> - .header_split = 0, /* Header Split disabled */ >>>>>>> - .hw_ip_checksum = 0, /* IP checksum offload disabled */ >>>>>>> - .hw_vlan_filter = 0, /* VLAN filtering disabled */ >>>>>>> - .jumbo_frame = 0, /* Jumbo Frame Support disabled */ >>>>>>> - .hw_strip_crc = 0, >>>>>>> + .offloads = 0, >>>>>>> }, >>>>>>> .rx_adv_conf = { >>>>>>> .rss_conf = { >>>>>>> @@ -364,6 +360,7 @@ struct dpdk_ring { struct ingress_policer { >>>>>>> struct rte_meter_srtcm_params app_srtcm_params; >>>>>>> struct rte_meter_srtcm in_policer; >>>>>>> + struct rte_meter_srtcm_profile in_prof; >>>>>>> rte_spinlock_t policer_lock; }; >>>>>>> >>>>>>> @@ -903,16 +900,17 @@ dpdk_eth_dev_port_config(struct >> netdev_dpdk >>>>>>> *dev, int n_rxq, int n_txq) >>>>>>> if (dev->mtu > ETHER_MTU) { >>>>>>> rte_eth_dev_info_get(dev->port_id, &info); >>>>>>> if (strncmp(info.driver_name, "net_nfp", 7)) { >>>>>>> - conf.rxmode.enable_scatter = 1; >>>>>>> + conf.rxmode.offloads |= DEV_RX_OFFLOAD_SCATTER; >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> conf.intr_conf.lsc = dev->lsc_interrupt_mode; >>>>>>> - conf.rxmode.hw_ip_checksum = (dev->hw_ol_features & >>>>>>> - NETDEV_RX_CHECKSUM_OFFLOAD) != >>>>>>> 0; >>>>>>> + conf.rxmode.offloads |= ((dev->hw_ol_features & >>>>>>> + NETDEV_RX_CHECKSUM_OFFLOAD) != 0) ? >>>>>>> + DEV_RX_OFFLOAD_CHECKSUM : 0; >>>>>>> >>>>>>> if (dev->hw_ol_features & NETDEV_RX_HW_CRC_STRIP) { >>>>>>> - conf.rxmode.hw_strip_crc = 1; >>>>>>> + conf.rxmode.offloads |= DEV_RX_OFFLOAD_CRC_STRIP; >>>>>>> } >>>>>>> >>>>>>> /* A device may report more queues than it makes available >>>>>>> (this has @@ - >>>>>>> 1932,16 +1930,18 @@ netdev_dpdk_eth_tx_burst(struct >> netdev_dpdk >>>>> *dev, >>>>>>> int qid, >>>>>>> >>>>>>> static inline bool >>>>>>> netdev_dpdk_policer_pkt_handle(struct rte_meter_srtcm *meter, >>>>>>> + struct rte_meter_srtcm_profile >>>>>>> + *profile, >>>>>>> struct rte_mbuf *pkt, uint64_t >>>>>>> time) { >>>>>>> uint32_t pkt_len = rte_pktmbuf_pkt_len(pkt) - sizeof(struct >>>>>>> ether_hdr); >>>>>>> >>>>>>> - return rte_meter_srtcm_color_blind_check(meter, time, pkt_len) >>>>>>> == >>>>>>> + return rte_meter_srtcm_color_blind_check(meter, profile, >>>>>>> + time, >>>>>>> + pkt_len) == >>>>>>> >>>>>>> e_RTE_METER_GREEN; } >>>>>>> >>>>>>> static int >>>>>>> netdev_dpdk_policer_run(struct rte_meter_srtcm *meter, >>>>>>> + struct rte_meter_srtcm_profile *profile, >>>>>>> struct rte_mbuf **pkts, int pkt_cnt, >>>>>>> bool should_steal) { @@ -1953,7 +1953,8 >>>>>>> @@ netdev_dpdk_policer_run(struct rte_meter_srtcm *meter, >>>>>>> for (i = 0; i < pkt_cnt; i++) { >>>>>>> pkt = pkts[i]; >>>>>>> /* Handle current packet */ >>>>>>> - if (netdev_dpdk_policer_pkt_handle(meter, pkt, >>>>>>> current_time)) { >>>>>>> + if (netdev_dpdk_policer_pkt_handle(meter, profile, pkt, >>>>>>> + current_time)) >>>>>>> + { >>>>>>> if (cnt != i) { >>>>>>> pkts[cnt] = pkt; >>>>>>> } >>>>>>> @@ -1975,8 +1976,8 @@ ingress_policer_run(struct ingress_policer >>>>>>> *policer, struct rte_mbuf **pkts, >>>>>>> int cnt = 0; >>>>>>> >>>>>>> rte_spinlock_lock(&policer->policer_lock); >>>>>>> - cnt = netdev_dpdk_policer_run(&policer->in_policer, pkts, >>>>>>> - pkt_cnt, should_steal); >>>>>>> + cnt = netdev_dpdk_policer_run(&policer->in_policer, >>>>>>> + &policer- >>>>>> in_prof, >>>>>>> + pkts, pkt_cnt, should_steal); >>>>>>> rte_spinlock_unlock(&policer->policer_lock); >>>>>>> >>>>>>> return cnt; >>>>>>> @@ -2767,8 +2768,15 @@ netdev_dpdk_policer_construct(uint32_t >>>>>>> rate, uint32_t burst) >>>>>>> policer->app_srtcm_params.cir = rate_bytes; >>>>>>> policer->app_srtcm_params.cbs = burst_bytes; >>>>>>> policer->app_srtcm_params.ebs = 0; >>>>>>> + err = rte_meter_srtcm_profile_config(&policer->in_prof, >>>>>>> + >>>>>>> &policer->app_srtcm_params); >>>>>>> + if (err) { >>>>>>> + VLOG_ERR("Could not create rte meter profile for ingress >>>>>>> policer"); >>>>>>> + free(policer); >>>>>>> + return NULL; >>>>>>> + } >>>>>>> err = rte_meter_srtcm_config(&policer->in_policer, >>>>>>> - &policer->app_srtcm_params); >>>>>>> + &policer->in_prof); >>>>>>> if (err) { >>>>>>> VLOG_ERR("Could not create rte meter for ingress >>>>>>> policer"); >>>>>>> free(policer); >>>>>>> @@ -3043,13 +3051,18 @@ netdev_dpdk_get_status(const struct >>>>>>> netdev *netdev, struct smap *args) >>>>>>> smap_add_format(args, "if_descr", "%s %s", rte_version(), >>>>>>> >>>>>>> dev_info.driver_name); >>>>>>> >>>>>>> - if (dev_info.pci_dev) { >>>>>>> - smap_add_format(args, "pci-vendor_id", "0x%x", >>>>>>> - dev_info.pci_dev->id.vendor_id); >>>>>>> - smap_add_format(args, "pci-device_id", "0x%x", >>>>>>> - dev_info.pci_dev->id.device_id); >>>>>>> + const struct rte_bus *bus; >>>>>>> + const struct rte_pci_device *pci_dev; >>>>>>> + bus = rte_bus_find_by_device(dev_info.device); >>>>>>> + if (bus && !strcmp(bus->name, "pci")) { >>>>>>> + pci_dev = RTE_DEV_TO_PCI(dev_info.device); >>>>>>> + if (pci_dev) { >>>>>>> + smap_add_format(args, "pci-vendor_id", "0x%u", >>>>>>> + pci_dev->id.vendor_id); >>>>>>> + smap_add_format(args, "pci-device_id", "0x%x", >>>>>>> + pci_dev->id.device_id); >>>>>>> + } >>>>>>> } >>>>>>> - >>>>>>> return 0; >>>>>>> } >>>>>>> >>>>>>> @@ -3727,6 +3740,7 @@ struct egress_policer { >>>>>>> struct qos_conf qos_conf; >>>>>>> struct rte_meter_srtcm_params app_srtcm_params; >>>>>>> struct rte_meter_srtcm egress_meter; >>>>>>> + struct rte_meter_srtcm_profile egress_prof; >>>>>>> }; >>>>>>> >>>>>>> static void >>>>>>> @@ -3749,8 +3763,16 @@ egress_policer_qos_construct(const >> struct >>>>> smap >>>>>>> *details, >>>>>>> policer = xmalloc(sizeof *policer); >>>>>>> qos_conf_init(&policer->qos_conf, &egress_policer_ops); >>>>>>> egress_policer_details_to_param(details, >>>>>>> &policer->app_srtcm_params); >>>>>>> + err = rte_meter_srtcm_profile_config(&policer->egress_prof, >>>>>>> + >>>>>>> &policer->app_srtcm_params); >>>>>>> + if (err) { >>>>>> [Sugesh] Should we error out the message on failing the profile >>>>>> config?? >>>>>>> + free(policer); >>>>>>> + *conf = NULL; >>>>>>> + return -err; >>>>>>> + } >>>>>>> err = rte_meter_srtcm_config(&policer->egress_meter, >>>>>>> - &policer->app_srtcm_params); >>>>>>> + &policer->egress_prof); >>>>>>> + >>>>>>> if (!err) { >>>>>>> *conf = &policer->qos_conf; >>>>>>> } else { >>>>>>> @@ -3803,7 +3825,8 @@ egress_policer_run(struct qos_conf *conf, >>>>>>> struct rte_mbuf **pkts, int pkt_cnt, >>>>>>> struct egress_policer *policer = >>>>>>> CONTAINER_OF(conf, struct egress_policer, qos_conf); >>>>>>> >>>>>>> - cnt = netdev_dpdk_policer_run(&policer->egress_meter, pkts, >>>>>>> + cnt = netdev_dpdk_policer_run(&policer->egress_meter, >>>>>>> + &policer->egress_prof, pkts, >>>>>>> pkt_cnt, should_steal); >>>>>>> >>>>>>> return cnt; >>>>>>> @@ -4103,15 +4126,15 @@ dump_flow_pattern(struct >> rte_flow_item >>>>> *item) >>>>>>> >>>>>>> VLOG_DBG("rte flow vlan pattern:\n"); >>>>>>> if (vlan_spec) { >>>>>>> - VLOG_DBG(" Spec: tpid=0x%"PRIx16", >>>>>>> tci=0x%"PRIx16"\n", >>>>>>> - ntohs(vlan_spec->tpid), >>>>>>> ntohs(vlan_spec->tci)); >>>>>>> + VLOG_DBG(" Spec: inner_type=0x%"PRIx16", >>>>>>> tci=0x%"PRIx16"\n", >>>>>>> + ntohs(vlan_spec->inner_type), >>>>>>> + ntohs(vlan_spec->tci)); >>>>>>> } else { >>>>>>> VLOG_DBG(" Spec = null\n"); >>>>>>> } >>>>>>> >>>>>>> if (vlan_mask) { >>>>>>> - VLOG_DBG(" Mask: tpid=0x%"PRIx16", >>>>>>> tci=0x%"PRIx16"\n", >>>>>>> - vlan_mask->tpid, vlan_mask->tci); >>>>>>> + VLOG_DBG(" Mask: inner_type=0x%"PRIx16", >>>>> tci=0x%"PRIx16"\n", >>>>>>> + vlan_mask->inner_type, vlan_mask->tci); >>>>>>> } else { >>>>>>> VLOG_DBG(" Mask = null\n"); >>>>>>> } >>>>>>> @@ -4281,27 +4304,56 @@ add_flow_action(struct flow_actions >>>>> *actions, >>>>>>> enum rte_flow_action_type type, >>>>>>> actions->cnt++; >>>>>>> } >>>>>>> >>>>>>> +/* >>>>>>> + * Storage for struct rte_flow_action_rss >>>>>>> + * including storage for key and queue array */ #define >>>>>>> +MAX_RSS_HASH_KEY_LENGTH 128 #define >>>>> MAX_ACTION_RSS_QUEUE_NUM >>>>>>> 128 >>>>>>> +struct action_rss_data { >>>>>>> + struct rte_flow_action_rss conf; >>>>>>> + uint16_t queue[MAX_ACTION_RSS_QUEUE_NUM]; >>>>>>> + uint8_t key[MAX_RSS_HASH_KEY_LENGTH]; }; >>>>>>> + >>>>>>> static struct rte_flow_action_rss * add_flow_rss_action(struct >>>>>>> flow_actions *actions, >>>>>>> struct netdev *netdev) { >>>>>>> int i; >>>>>>> - struct rte_flow_action_rss *rss; >>>>>>> + struct action_rss_data *rss_data; >>>>>>> >>>>>>> - rss = xmalloc(sizeof(*rss) + sizeof(uint16_t) * >>>>>>> netdev->n_rxq); >>>>>>> - /* >>>>>>> - * Setting it to NULL will let the driver use the default RSS >>>>>>> - * configuration we have set: &port_conf.rx_adv_conf.rss_conf. >>>>>>> - */ >>>>>>> - rss->rss_conf = NULL; >>>>>>> - rss->num = netdev->n_rxq; >>>>>>> + if (netdev->n_rxq > MAX_ACTION_RSS_QUEUE_NUM) { >>>>>>> + VLOG_ERR("Num of rxq (%u) must not be greater " \ >>>>>>> + "than max rss num of queues (%u)", >>>>>>> + netdev->n_rxq, MAX_ACTION_RSS_QUEUE_NUM); >>>>>>> + return NULL; >>>>>>> + } >>>>>>> >>>>>>> - for (i = 0; i < rss->num; i++) { >>>>>>> - rss->queue[i] = i; >>>>>>> + rss_data = xmalloc(sizeof(struct action_rss_data)); >>>>>>> + *rss_data = (struct action_rss_data){ >>>>>>> + .conf = (struct rte_flow_action_rss){ >>>>>>> + .func = RTE_ETH_HASH_FUNCTION_DEFAULT, >>>>>>> + .level = 0, >>>>>>> + .types = ETH_RSS_IP, >>>>>>> + .key_len = 0, >>>>>>> + .queue_num = netdev->n_rxq, >>>>>>> + .queue = rss_data->queue, >>>>>>> + .key = rss_data->key, >>>>>>> + }, >>>>>>> + .key = { 0 }, >>>>>>> + .queue = { 0 }, >>>>>>> + }; >>>>>>> + >>>>>>> + /* TODO: Override key with default */ >>>>>> [Sugesh] Do we really need this TODO?? >>>>>>> + >>>>>>> + /* Override queue array with default */ >>>>>>> + for (i = 0; i < rss_data->conf.queue_num; i++) { >>>>>>> + rss_data->queue[i] = i; >>>>>>> } >>>>>>> >>>>>>> - add_flow_action(actions, RTE_FLOW_ACTION_TYPE_RSS, rss); >>>>>>> + add_flow_action(actions, RTE_FLOW_ACTION_TYPE_RSS, >>>>>>> + &rss_data->conf); >>>>>>> >>>>>>> - return rss; >>>>>>> + return &rss_data->conf; >>>>>>> } >>>>>>> >>>>>>> static int >>>>>>> @@ -4365,7 +4417,7 @@ netdev_dpdk_add_rte_flow_offload(struct >>>>> netdev >>>>>>> *netdev, >>>>>>> vlan_mask.tci = match->wc.masks.vlans[0].tci & >>>>>>> ~htons(VLAN_CFI); >>>>>>> >>>>>>> /* match any protocols */ >>>>>>> - vlan_mask.tpid = 0; >>>>>>> + vlan_mask.inner_type = 0; >>>>>>> >>>>>>> add_flow_pattern(&patterns, RTE_FLOW_ITEM_TYPE_VLAN, >>>>>>> &vlan_spec, &vlan_mask); @@ -4516,6 >>>>>>> +4568,11 @@ >>>>>>> end_proto_check: >>>>>>> >>>>>>> struct rte_flow_action_rss *rss; >>>>>>> rss = add_flow_rss_action(&actions, netdev); >>>>>>> + if (!rss) { >>>>>>> + VLOG_ERR("add_flow_rss_action error.\n"); >>>>>> I feel this error can be bit more verbose something like Failed to >>>>>> add >>>>> rss_flow+actions or something?? What do you think? >>>>>>> + ret = -1; >>>>>>> + goto out; >>>>>>> + } >>>>>>> add_flow_action(&actions, RTE_FLOW_ACTION_TYPE_END, >> NULL); >>>>>>> >>>>>>> flow = rte_flow_create(dev->port_id, &flow_attr, >>>>>>> patterns.items, >>>>>>> -- >>>>>>> 1.8.3.1 >>>>>> >>>> >>>> _______________________________________________ >>>> dev mailing list >>>> d...@openvswitch.org >>>> >> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fm >>>> ail.openvswitch.org%2Fmailman%2Flistinfo%2Fovs- >> dev&data=02%7C01% >>>> >> 7Cophirmu%40mellanox.com%7C028cdfe3e1154f5cc99e08d6172dc231%7C >> a65297 >>>> >> 1c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C636721882650055912&s >> data=Wx >>>> >> VUAkghNz3pgtAqJ%2FyH0tBkgnQcBaMBIx3RI1FM%2BG4%3D&reserve >> d=0 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev