[dpdk-dev] [PATCH v2] examples/flow_filtering: fix example documentation
Previous patch removed the VLAN item from example code. This patch fixes the code and documentation accordingly. Code update includes fix of comments, and removal of redundant variables and their initialization. Documentation update reflects the code changes done in previous patch and in this patch. Fixes: 9af4eb565710 ("examples/flow_filtering: remove VLAN item") Cc: or...@mellanox.com Signed-off-by: Dekel Peled --- v2: Update and elaborate patch log. --- --- doc/guides/sample_app_ug/flow_filtering.rst | 74 +++-- examples/flow_filtering/flow_blocks.c | 18 ++- 2 files changed, 21 insertions(+), 71 deletions(-) diff --git a/doc/guides/sample_app_ug/flow_filtering.rst b/doc/guides/sample_app_ug/flow_filtering.rst index 840d557..9dba85a 100644 --- a/doc/guides/sample_app_ug/flow_filtering.rst +++ b/doc/guides/sample_app_ug/flow_filtering.rst @@ -53,7 +53,7 @@ applications and the Environment Abstraction Layer (EAL) options. Explanation --- -The example is build from 2 main files, +The example is built from 2 files, ``main.c`` which holds the example logic and ``flow_blocks.c`` that holds the implementation for building the flow rule. @@ -380,13 +380,9 @@ This function is located in the ``flow_blocks.c`` file. { struct rte_flow_attr attr; struct rte_flow_item pattern[MAX_PATTERN_NUM]; - struct rte_flow_action action[MAX_PATTERN_NUM]; + struct rte_flow_action action[MAX_ACTION_NUM]; struct rte_flow *flow = NULL; struct rte_flow_action_queue queue = { .index = rx_q }; - struct rte_flow_item_eth eth_spec; - struct rte_flow_item_eth eth_mask; - struct rte_flow_item_vlan vlan_spec; - struct rte_flow_item_vlan vlan_mask; struct rte_flow_item_ipv4 ip_spec; struct rte_flow_item_ipv4 ip_mask; @@ -404,37 +400,19 @@ This function is located in the ``flow_blocks.c`` file. * create the action sequence. * one action only, move packet to queue */ - action[0].type = RTE_FLOW_ACTION_TYPE_QUEUE; action[0].conf = &queue; action[1].type = RTE_FLOW_ACTION_TYPE_END; /* -* set the first level of the pattern (eth). +* set the first level of the pattern (ETH). * since in this example we just want to get the * ipv4 we set this level to allow all. */ - memset(ð_spec, 0, sizeof(struct rte_flow_item_eth)); - memset(ð_mask, 0, sizeof(struct rte_flow_item_eth)); - eth_spec.type = 0; - eth_mask.type = 0; pattern[0].type = RTE_FLOW_ITEM_TYPE_ETH; - pattern[0].spec = ð_spec; - pattern[0].mask = ð_mask; - - /* -* setting the second level of the pattern (vlan). -* since in this example we just want to get the -* ipv4 we also set this level to allow all. -*/ - memset(&vlan_spec, 0, sizeof(struct rte_flow_item_vlan)); - memset(&vlan_mask, 0, sizeof(struct rte_flow_item_vlan)); - pattern[1].type = RTE_FLOW_ITEM_TYPE_VLAN; - pattern[1].spec = &vlan_spec; - pattern[1].mask = &vlan_mask; /* -* setting the third level of the pattern (ip). +* setting the second level of the pattern (IP). * in this example this is the level we care about * so we set it according to the parameters. */ @@ -444,12 +422,12 @@ This function is located in the ``flow_blocks.c`` file. ip_mask.hdr.dst_addr = dest_mask; ip_spec.hdr.src_addr = htonl(src_ip); ip_mask.hdr.src_addr = src_mask; - pattern[2].type = RTE_FLOW_ITEM_TYPE_IPV4; - pattern[2].spec = &ip_spec; - pattern[2].mask = &ip_mask; + pattern[1].type = RTE_FLOW_ITEM_TYPE_IPV4; + pattern[1].spec = &ip_spec; + pattern[1].mask = &ip_mask; /* the final level must be always type end */ - pattern[3].type = RTE_FLOW_ITEM_TYPE_END; + pattern[2].type = RTE_FLOW_ITEM_TYPE_END; int res = rte_flow_validate(port_id, &attr, pattern, action, error); if(!res) @@ -464,14 +442,10 @@ The first part of the function is declaring the structures that will be used. struct rte_flow_attr attr; struct rte_flow_item pattern[MAX_PATTERN_NUM]; - struct rte_flow_action action[MAX_PATTERN_NUM]; + struct rte_flow_action action[MAX_ACTION_NUM]; struct rte_flow *flow; struct rte_flow_error error; struct rte_flow_action_queue queue = { .index = rx_q }; - struct rte_flow_item_eth eth_spec; - struct rte_flow_item_eth eth_mask; - struct rte_flow_item_vlan vlan_spec; - struct rte_flow_item_vlan vlan_mask; struct rte_flow_item_ipv4 ip_spec; struct rte_flow_item_ipv4 i
Re: [dpdk-dev] [PATCH v2] examples/flow_filtering: fix example documentation
> -Original Message- > From: dev On Behalf Of Dekel Peled > Sent: Tuesday, December 25, 2018 9:42 AM > To: Ori Kam > Cc: dev@dpdk.org; Dekel Peled > Subject: [dpdk-dev] [PATCH v2] examples/flow_filtering: fix example > documentation > > Previous patch removed the VLAN item from example code. > This patch fixes the code and documentation accordingly. > > Code update includes fix of comments, and removal of redundant > variables and their initialization. > Documentation update reflects the code changes done in previous > patch and in this patch. > > Fixes: 9af4eb565710 ("examples/flow_filtering: remove VLAN item") > Cc: or...@mellanox.com > > Signed-off-by: Dekel Peled > > --- > v2: Update and elaborate patch log. > --- > > --- > doc/guides/sample_app_ug/flow_filtering.rst | 74 > +++-- > examples/flow_filtering/flow_blocks.c | 18 ++- > 2 files changed, 21 insertions(+), 71 deletions(-) > > diff --git a/doc/guides/sample_app_ug/flow_filtering.rst > b/doc/guides/sample_app_ug/flow_filtering.rst > index 840d557..9dba85a 100644 > --- a/doc/guides/sample_app_ug/flow_filtering.rst > +++ b/doc/guides/sample_app_ug/flow_filtering.rst > @@ -53,7 +53,7 @@ applications and the Environment Abstraction Layer (EAL) > options. > Explanation > --- > > -The example is build from 2 main files, > +The example is built from 2 files, > ``main.c`` which holds the example logic and ``flow_blocks.c`` that holds the > implementation for building the flow rule. > > @@ -380,13 +380,9 @@ This function is located in the ``flow_blocks.c`` file. > { > struct rte_flow_attr attr; > struct rte_flow_item pattern[MAX_PATTERN_NUM]; > - struct rte_flow_action action[MAX_PATTERN_NUM]; > + struct rte_flow_action action[MAX_ACTION_NUM]; > struct rte_flow *flow = NULL; > struct rte_flow_action_queue queue = { .index = rx_q }; > - struct rte_flow_item_eth eth_spec; > - struct rte_flow_item_eth eth_mask; > - struct rte_flow_item_vlan vlan_spec; > - struct rte_flow_item_vlan vlan_mask; > struct rte_flow_item_ipv4 ip_spec; > struct rte_flow_item_ipv4 ip_mask; > > @@ -404,37 +400,19 @@ This function is located in the ``flow_blocks.c`` file. > * create the action sequence. > * one action only, move packet to queue > */ > - > action[0].type = RTE_FLOW_ACTION_TYPE_QUEUE; > action[0].conf = &queue; > action[1].type = RTE_FLOW_ACTION_TYPE_END; > > /* > -* set the first level of the pattern (eth). > +* set the first level of the pattern (ETH). > * since in this example we just want to get the > * ipv4 we set this level to allow all. > */ > - memset(ð_spec, 0, sizeof(struct rte_flow_item_eth)); > - memset(ð_mask, 0, sizeof(struct rte_flow_item_eth)); > - eth_spec.type = 0; > - eth_mask.type = 0; > pattern[0].type = RTE_FLOW_ITEM_TYPE_ETH; > - pattern[0].spec = ð_spec; > - pattern[0].mask = ð_mask; > - > - /* > -* setting the second level of the pattern (vlan). > -* since in this example we just want to get the > -* ipv4 we also set this level to allow all. > -*/ > - memset(&vlan_spec, 0, sizeof(struct rte_flow_item_vlan)); > - memset(&vlan_mask, 0, sizeof(struct rte_flow_item_vlan)); > - pattern[1].type = RTE_FLOW_ITEM_TYPE_VLAN; > - pattern[1].spec = &vlan_spec; > - pattern[1].mask = &vlan_mask; > > /* > -* setting the third level of the pattern (ip). > +* setting the second level of the pattern (IP). > * in this example this is the level we care about > * so we set it according to the parameters. > */ > @@ -444,12 +422,12 @@ This function is located in the ``flow_blocks.c`` file. > ip_mask.hdr.dst_addr = dest_mask; > ip_spec.hdr.src_addr = htonl(src_ip); > ip_mask.hdr.src_addr = src_mask; > - pattern[2].type = RTE_FLOW_ITEM_TYPE_IPV4; > - pattern[2].spec = &ip_spec; > - pattern[2].mask = &ip_mask; > + pattern[1].type = RTE_FLOW_ITEM_TYPE_IPV4; > + pattern[1].spec = &ip_spec; > + pattern[1].mask = &ip_mask; > > /* the final level must be always type end */ > - pattern[3].type = RTE_FLOW_ITEM_TYPE_END; > + pattern[2].type = RTE_FLOW_ITEM_TYPE_END; > > int res = rte_flow_validate(port_id, &attr, pattern, action, > error); > if(!res) > @@ -464,14 +442,10 @@ The first part of the function is declaring the > structures that will be used. > > struct rte_flow_attr attr; > struct rte_flow_item patter
Re: [dpdk-dev] [PATCH] net/mlx5: modify-header support using Direct Verbs
Hi Dekel, See some comments below, Sunday, December 23, 2018 11:58 AM, Dekel Peled: > Subject: [PATCH] net/mlx5: modify-header support using Direct Verbs Maybe title can be: "support modify header using Direct Verbs" > > This patch implements the set of actions to support offload of packet header > modifications to MLX5 NIC. > > Implamantation is based on RFC [1]. > > [1] http://mails.dpdk.org/archives/dev/2018-November/119971.html > > Signed-off-by: Dekel Peled > --- > drivers/net/mlx5/mlx5.h | 1 + > drivers/net/mlx5/mlx5_flow.h| 56 ++- > drivers/net/mlx5/mlx5_flow_dv.c | 998 > +++- > drivers/net/mlx5/mlx5_glue.c| 22 + > drivers/net/mlx5/mlx5_glue.h| 5 + > drivers/net/mlx5/mlx5_prm.h | 11 +- > 6 files changed, 1084 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index > 75aeeb2..b2fe5cb 100644 > --- a/drivers/net/mlx5/mlx5.h > +++ b/drivers/net/mlx5/mlx5.h > @@ -227,6 +227,7 @@ struct priv { > LIST_HEAD(ind_tables, mlx5_ind_table_ibv) ind_tbls; > LIST_HEAD(matchers, mlx5_flow_dv_matcher) matchers; > LIST_HEAD(encap_decap, mlx5_flow_dv_encap_decap_resource) > encaps_decaps; > + LIST_HEAD(modify_cmd, mlx5_flow_dv_modify_hdr_resource) > modify_cmds; > uint32_t link_speed_capa; /* Link speed capabilities. */ > struct mlx5_xstats_ctrl xstats_ctrl; /* Extended stats control. */ > struct mlx5_stats_ctrl stats_ctrl; /* Stats control. */ diff --git > a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index > 4a7c052..cb1e6fd 100644 > --- a/drivers/net/mlx5/mlx5_flow.h > +++ b/drivers/net/mlx5/mlx5_flow.h > @@ -69,6 +69,18 @@ > (MLX5_FLOW_LAYER_INNER_L2 | MLX5_FLOW_LAYER_INNER_L3 | \ >MLX5_FLOW_LAYER_INNER_L4) > > +/* Layer Masks. */ > +#define MLX5_FLOW_LAYER_L2 \ > + (MLX5_FLOW_LAYER_OUTER_L2 | MLX5_FLOW_LAYER_INNER_L2) > #define > +MLX5_FLOW_LAYER_L3_IPV4 \ > + (MLX5_FLOW_LAYER_OUTER_L3_IPV4 | > MLX5_FLOW_LAYER_INNER_L3_IPV4) > +#define MLX5_FLOW_LAYER_L3_IPV6 \ > + (MLX5_FLOW_LAYER_OUTER_L3_IPV6 | > MLX5_FLOW_LAYER_INNER_L3_IPV6) > +#define MLX5_FLOW_LAYER_L3 \ > + (MLX5_FLOW_LAYER_L3_IPV4 | MLX5_FLOW_LAYER_L3_IPV6) #define > +MLX5_FLOW_LAYER_L4 \ > + (MLX5_FLOW_LAYER_OUTER_L4 | MLX5_FLOW_LAYER_INNER_L4) > + > /* Actions */ > #define MLX5_FLOW_ACTION_DROP (1u << 0) #define > MLX5_FLOW_ACTION_QUEUE (1u << 1) @@ -110,6 +122,17 @@ >MLX5_FLOW_ACTION_NVGRE_DECAP | \ >MLX5_FLOW_ACTION_RAW_DECAP) > > +#define MLX5_FLOW_MODIFY_HDR_ACTIONS > (MLX5_FLOW_ACTION_SET_IPV4_SRC | \ > + MLX5_FLOW_ACTION_SET_IPV4_DST | \ > + MLX5_FLOW_ACTION_SET_IPV6_SRC | \ > + MLX5_FLOW_ACTION_SET_IPV6_DST | \ > + MLX5_FLOW_ACTION_SET_TP_SRC | \ > + MLX5_FLOW_ACTION_SET_TP_DST | \ > + MLX5_FLOW_ACTION_SET_TTL | \ > + MLX5_FLOW_ACTION_DEC_TTL | \ > + MLX5_FLOW_ACTION_SET_MAC_SRC | \ > + MLX5_FLOW_ACTION_SET_MAC_DST) > + > #ifndef IPPROTO_MPLS > #define IPPROTO_MPLS 137 > #endif > @@ -153,9 +176,6 @@ > /* IBV hash source bits for IPV6. */ > #define MLX5_IPV6_IBV_RX_HASH (IBV_RX_HASH_SRC_IPV6 | > IBV_RX_HASH_DST_IPV6) > > -/* Max number of actions per DV flow. */ -#define > MLX5_DV_MAX_NUMBER_OF_ACTIONS 8 > - > enum mlx5_flow_drv_type { > MLX5_FLOW_TYPE_MIN, > MLX5_FLOW_TYPE_DV, > @@ -172,9 +192,6 @@ struct mlx5_flow_dv_match_params { > /**< Matcher value. This value is used as the mask or as a key. */ }; > > -#define MLX5_DV_MAX_NUMBER_OF_ACTIONS 8 -#define > MLX5_ENCAP_MAX_LEN 132 > - > /* Matcher structure. */ > struct mlx5_flow_dv_matcher { > LIST_ENTRY(mlx5_flow_dv_matcher) next; @@ -187,6 +204,8 @@ > struct mlx5_flow_dv_matcher { > struct mlx5_flow_dv_match_params mask; /**< Matcher mask. */ }; > > +#define MLX5_ENCAP_MAX_LEN 132 > + > /* Encap/decap resource structure. */ > struct mlx5_flow_dv_encap_decap_resource { > LIST_ENTRY(mlx5_flow_dv_encap_decap_resource) next; @@ -200,6 > +219,29 @@ struct mlx5_flow_dv_encap_decap_resource { > uint8_t ft_type; > }; > > +/* Number of modification commands. */ > +#define MLX5_MODIFY_NUM 8 > + > +/* Modify resource structure */ > +struct mlx5_flow_dv_modify_hdr_resource { > + LIST_ENTRY(mlx5_flow_dv_modify_hdr_resource) next; > + /* Pointer to next element. */ > + rte_atomic32_t refcnt; /**< Reference counter. */ > + struct ibv_flow_action *verbs_action; > + /**< Verbs modify header action object. */ > + uint8_t ft_type; /**< Flow table type, Rx or Tx. */ > + uint32_t actions_num; /**< Number of modification actions. */ > + str
[dpdk-dev] TX offloads lead to Segmentation fault?
Hi, When I enable the Tx offloads capabilities, I get the segmentation fault. The backtrace like this: lcore_main_loop --> main_loop_tx --> rte_eth_tx_burst --> eth_igb_xmit_pkts --> rte_pktmbuf_free_seg --> rte_pktmbuf_prefree_seg --> rte_pktmbuf_detach --> __rte_pktmbuf_free_extbuf --> rte_mbuf_ext_refcnt_update --> rte_mbuf_ext_refcnt_read --> rte_atomic16_read return v->cnt; And I set Tx offloads like this: .txmode = { .mq_mode = ETH_MQ_TX_NONE, .offloads = DEV_TX_OFFLOAD_IPV4_CKSUM | \ DEV_TX_OFFLOAD_TCP_CKSUM | \ DEV_TX_OFFLOAD_UDP_CKSUM }, and set the m->ol_flags, l2_len, l3_len and l4_len. Is there something I am missing? The NIC is Intel Corporation I350 Gigabit Network Connection(rev 01). Thanks in advance. bakari
Re: [dpdk-dev] [PATCH] net/mlx4: support flow w/o ETH spec and with VLAN
From: Dekel Peled > This patch adds to MLX4 PMD the option to set flow rules with wildcard ether > MAC and specific VLAN ID. with wildcard => with empty > > Note that this fix works with > 1. CX-3 FW 2.42.5016 or higher. > 2. mlxconfig configuration STEER_FORCE_VLAN set to 1. > > Signed-off-by: Dekel Peled Besides that, Acked-by: Matan Azrad
[dpdk-dev] [PATCH] doc: fix a parameter name in testpmd guide
There is no parameter called "eth-peer-configfile" in testpmd. It should be "eth-peers-configfile". See the usage() method in app/test-pmd/parameters.c. Fixes: a67857e97ba8 ("doc: clarify usage of testpmd MAC forward mode") Cc: sta...@dpdk.org Signed-off-by: Rami Rosen --- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index cbf23e9..1ceb000 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -304,7 +304,7 @@ The available information categories are: * ``mac``: Changes the source and the destination Ethernet addresses of packets before forwarding them. Default application behaviour is to set source Ethernet address to that of the transmitting interface, and destination address to a dummy value (set during init). The user may specify a target destination Ethernet address via the 'eth-peer' or - 'eth-peer-configfile' command-line options. It is not currently possible to specify a specific source Ethernet address. + 'eth-peers-configfile' command-line options. It is not currently possible to specify a specific source Ethernet address. * ``macswap``: MAC swap forwarding mode. Swaps the source and the destination Ethernet addresses of packets before forwarding them. -- 1.8.3.1
[dpdk-dev] [Bug 175] DPDK on Azure using `intel-go/nff-go` fails using `hv_netvsc` driver
https://bugs.dpdk.org/show_bug.cgi?id=175 Bug ID: 175 Summary: DPDK on Azure using `intel-go/nff-go` fails using `hv_netvsc` driver Product: DPDK Version: 18.11 Hardware: Other OS: Linux Status: CONFIRMED Severity: normal Priority: Normal Component: vhost/virtio Assignee: dev@dpdk.org Reporter: guesslin1...@gmail.com Target Milestone: --- Overview: running DPDK on Azure using `intel-go/nff-go` library fails with `Requested receive port exceeds number of ports which can be used by DPDK (bind to DPDK). (3)` Steps to Reproduce: 1) build binary from https://gist.github.com/guesslin/76be1139e5e3b8d71e964e194c5d9322 2) run `app -d uio_hv_generic -n ` Actual Results: $ sudo ./app -d uio_hv_generic -n eth2 2018/12/25 06:58:49 Binding PMD driver eth2 to NIC uio_hv_generic 2018/12/25 06:58:49 Initiating nff-go flow system *** Initializing DPDK *** EAL: Detected 4 lcore(s) EAL: Detected 1 NUMA nodes EAL: Multi-process socket /var/run/dpdk/rte/mp_socket EAL: No free hugepages reported in hugepages-2048kB EAL: No free hugepages reported in hugepages-2048kB EAL: No free hugepages reported in hugepages-1048576kB EAL: FATAL: Cannot get hugepage information. EAL: Cannot get hugepage information. Initiated nff-go flow system Setting receiver on port 0 panic: Erorr: Requested receive port exceeds number of ports which can be used by DPDK (bind to DPDK). (3), Msg: start dpdk/nff-go failed Expected Results: no error outputs # result from testpmd ``` glasnostic@glasnostic-router:~$ sudo testpmd -w 0003:00:02.0 --vdev="net_vdev_netvsc0,iface=eth2" -- -i --port-topology=chained EAL: Detected 4 lcore(s) EAL: No free hugepages reported in hugepages-1048576kB EAL: Multi-process socket /var/run/.rte_unix EAL: Probing VFIO support... EAL: VFIO support initialized EAL: WARNING: cpu flags constant_tsc=yes nonstop_tsc=no -> using unreliable clock cycles ! EAL: PCI device 0003:00:02.0 on NUMA socket 0 EAL: probe driver: 15b3:1004 net_mlx4 PMD: net_mlx4: cannot access device, is mlx4_ib loaded? EAL: Requested device 0003:00:02.0 cannot be used PMD: net_failsafe: Initializing Fail-safe PMD for net_failsafe_net_vdev_netvsc0_id0 PMD: net_failsafe: Creating fail-safe device on NUMA socket 0 PMD: Initializing pmd_tap for net_tap_net_vdev_netvsc0_id0 as dtap0 PMD: net_failsafe: MAC address is 00:0d:3a:18:3e:11 Interactive-mode selected Warning: NUMA should be configured manually by using --port-numa-config and --ring-numa-config parameters along with --numa. testpmd: create a new mbuf pool : n=171456, size=2176, socket=0 testpmd: preferred mempool ops selected: ring_mp_mc Configuring Port 0 (socket 0) PMD: net_tap_net_vdev_netvsc0_id0: 0xfc3a80: TX configured queues number: 1 PMD: net_tap_net_vdev_netvsc0_id0: 0xfc3a80: RX configured queues number: 1 Port 0: 00:0D:3A:18:3E:11 Checking link statuses... Done testpmd> show port info all * Infos for port 0 * MAC address: 00:0D:3A:18:3E:11 Driver name: net_failsafe Connect to socket: 0 memory allocation on the socket: 0 Link status: up Link speed: 1 Mbps Link duplex: full-duplex MTU: 1500 Promiscuous mode: enabled Allmulticast mode: disabled Maximum number of MAC addresses: 1 Maximum number of MAC addresses of hash filtering: 0 VLAN offload: strip off filter off qinq(extend) off No flow type is supported. Minimum size of RX buffer: 0 Maximum configurable length of RX packet: 1522 Current number of RX queues: 1 Max possible RX queues: 16 Max possible number of RXDs per queue: 65535 Min possible number of RXDs per queue: 0 RXDs number alignment: 1 Current number of TX queues: 1 Max possible TX queues: 16 Max possible number of TXDs per queue: 65535 Min possible number of TXDs per queue: 0 TXDs number alignment: 1 testpmd> ``` ## directly run testpmd ``` glasnostic@glasnostic-router:~$ sudo testpmd EAL: Detected 4 lcore(s) EAL: No free hugepages reported in hugepages-1048576kB EAL: Multi-process socket /var/run/.rte_unix EAL: Probing VFIO support... EAL: VFIO support initialized EAL: WARNING: cpu flags constant_tsc=yes nonstop_tsc=no -> using unreliable clock cycles ! EAL: PCI device 0003:00:02.0 on NUMA socket 0 EAL: probe driver: 15b3:1004 net_mlx4 PMD: net_mlx4: cannot access device, is mlx4_ib loaded? EAL: Requested device 0003:00:02.0 cannot be used PMD: net_failsafe: Initializing Fail-safe PMD for net_failsafe_net_vdev_netvsc_id0 PMD: net_failsafe: Creating fail-safe device on NUMA socket 0 PMD: Initializing pmd_tap for net_tap_net_vdev_netvsc_id0 as dtap0 PMD: net_failsafe: MAC address is 00:0d:3a:18:3e:11 Warning: NUMA should be configured manually by using --port-numa-config and --ring-numa-config parameters along with --numa. testpmd: create a new mbuf pool : n=171456, size=2176, socket=0 testpmd: preferred mempool ops selected:
[dpdk-dev] [PATCH v1 2/3] net/mlx5: add devx functions to glue
This patch adds glue functions for operations: - dv_open_device. - devx object create, destroy, query and modify. - devx general command The new operations depend on HAVE_IBV_DEVX_OBJ. Signed-off-by: Moti Haimovsky --- drivers/net/mlx5/Makefile| 5 +++ drivers/net/mlx5/meson.build | 2 + drivers/net/mlx5/mlx5_glue.c | 99 drivers/net/mlx5/mlx5_glue.h | 19 + 4 files changed, 125 insertions(+) diff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile index 895cdfe..58e2d15 100644 --- a/drivers/net/mlx5/Makefile +++ b/drivers/net/mlx5/Makefile @@ -148,6 +148,11 @@ mlx5_autoconf.h.new: $(RTE_SDK)/buildtools/auto-config-h.sh func mlx5dv_create_flow_action_packet_reformat \ $(AUTOCONF_OUTPUT) $Q sh -- '$<' '$@' \ + HAVE_IBV_DEVX_OBJ \ + infiniband/mlx5dv.h \ + func mlx5dv_devx_obj_create \ + $(AUTOCONF_OUTPUT) + $Q sh -- '$<' '$@' \ HAVE_ETHTOOL_LINK_MODE_25G \ /usr/include/linux/ethtool.h \ enum ETHTOOL_LINK_MODE_25000baseCR_Full_BIT \ diff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build index 28938db..e323c3a 100644 --- a/drivers/net/mlx5/meson.build +++ b/drivers/net/mlx5/meson.build @@ -104,6 +104,8 @@ if build 'IBV_FLOW_SPEC_MPLS' ], [ 'HAVE_IBV_WQ_FLAG_RX_END_PADDING', 'infiniband/verbs.h', 'IBV_WQ_FLAG_RX_END_PADDING' ], + [ 'HAVE_IBV_DEVX_OBJ', 'infiniband/mlx5dv.h', + 'mlx5dv_devx_obj_create' ], [ 'HAVE_SUPPORTED_4baseKR4_Full', 'linux/ethtool.h', 'SUPPORTED_4baseKR4_Full' ], [ 'HAVE_SUPPORTED_4baseCR4_Full', 'linux/ethtool.h', diff --git a/drivers/net/mlx5/mlx5_glue.c b/drivers/net/mlx5/mlx5_glue.c index dd10ad6..7d3d9d3 100644 --- a/drivers/net/mlx5/mlx5_glue.c +++ b/drivers/net/mlx5/mlx5_glue.c @@ -479,6 +479,99 @@ #endif } +static struct ibv_context * +mlx5_glue_dv_open_device(struct ibv_device *device) +{ +#ifdef HAVE_IBV_DEVX_OBJ + return mlx5dv_open_device(device, + &(struct mlx5dv_context_attr){ + .flags = MLX5DV_CONTEXT_FLAGS_DEVX, + }); +#else + (void)device; + return NULL; +#endif +} + +static struct mlx5dv_devx_obj * +mlx5_glue_devx_obj_create(struct ibv_context *ctx, + const void *in, size_t inlen, + void *out, size_t outlen) +{ +#ifdef HAVE_IBV_DEVX_OBJ + return mlx5dv_devx_obj_create(ctx, in, inlen, out, outlen); +#else + (void)ctx; + (void)in; + (void)inlen; + (void)out; + (void)outlen; + return NULL; +#endif +} + +static int +mlx5_glue_devx_obj_destroy(struct mlx5dv_devx_obj *obj) +{ +#ifdef HAVE_IBV_DEVX_OBJ + return mlx5dv_devx_obj_destroy(obj); +#else + (void)obj; + return -ENOTSUP; +#endif +} + +static int +mlx5_glue_devx_obj_query(struct mlx5dv_devx_obj *obj, +const void *in, size_t inlen, +void *out, size_t outlen) +{ +#ifdef HAVE_IBV_DEVX_OBJ + return mlx5dv_devx_obj_query(obj, in, inlen, out, outlen); +#else + (void)obj; + (void)in; + (void)inlen; + (void)out; + (void)outlen; + return -ENOTSUP; +#endif +} + +static int +mlx5_glue_devx_obj_modify(struct mlx5dv_devx_obj *obj, + const void *in, size_t inlen, + void *out, size_t outlen) +{ +#ifdef HAVE_IBV_DEVX_OBJ + return mlx5dv_devx_obj_modify(obj, in, inlen, out, outlen); +#else + (void)obj; + (void)in; + (void)inlen; + (void)out; + (void)outlen; + return -ENOTSUP; +#endif +} + +static int +mlx5_glue_devx_general_cmd(struct ibv_context *ctx, + const void *in, size_t inlen, + void *out, size_t outlen) +{ +#ifdef HAVE_IBV_DEVX_OBJ + return mlx5dv_devx_general_cmd(ctx, in, inlen, out, outlen); +#else + (void)ctx; + (void)in; + (void)inlen; + (void)out; + (void)outlen; + return -ENOTSUP; +#endif +} + alignas(RTE_CACHE_LINE_SIZE) const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){ .version = MLX5_GLUE_VERSION, @@ -535,4 +628,10 @@ .dv_create_flow = mlx5_glue_dv_create_flow, .dv_create_flow_action_packet_reformat = mlx5_glue_dv_create_flow_action_packet_reformat, + .dv_open_device = mlx5_glue_dv_open_device, + .devx_obj_create = mlx5_glue_devx_obj_create, + .devx_obj_destroy = mlx5_glue_devx_obj_destroy, + .devx_obj_query = mlx5_glue_devx_obj_query, + .devx_obj_modify = mlx5_glue_devx_obj_modify, + .devx_general_cmd = mlx5_glue_devx_general_cmd, }; diff --git a/drive
[dpdk-dev] [PATCH v1 3/3] net/mlx5: support flow counters using devx
This commit adds counters support when creating flows via direct verbs. The implementation uses devx interface in order to create query and delete the counters. This support requires MLNX_OFED_LINUX-4.5-0.1.0.1 installation. Signed-off-by: Moti Haimovsky --- drivers/net/mlx5/Makefile | 6 + drivers/net/mlx5/meson.build | 5 + drivers/net/mlx5/mlx5.c | 17 ++- drivers/net/mlx5/mlx5.h | 1 + drivers/net/mlx5/mlx5_devx_cmds.c | 117 +++ drivers/net/mlx5/mlx5_flow.h | 12 +- drivers/net/mlx5/mlx5_flow_dv.c | 232 -- drivers/net/mlx5/mlx5_glue.c | 1 + drivers/net/mlx5/mlx5_prm.h | 86 ++ 9 files changed, 461 insertions(+), 16 deletions(-) create mode 100644 drivers/net/mlx5/mlx5_devx_cmds.c diff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile index 58e2d15..bd96706 100644 --- a/drivers/net/mlx5/Makefile +++ b/drivers/net/mlx5/Makefile @@ -36,6 +36,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_flow_tcf.c SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_flow_verbs.c SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_socket.c SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_nl.c +SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_devx_cmds.c ifeq ($(CONFIG_RTE_LIBRTE_MLX5_DLOPEN_DEPS),y) INSTALL-$(CONFIG_RTE_LIBRTE_MLX5_PMD)-lib += $(LIB_GLUE) @@ -153,6 +154,11 @@ mlx5_autoconf.h.new: $(RTE_SDK)/buildtools/auto-config-h.sh func mlx5dv_devx_obj_create \ $(AUTOCONF_OUTPUT) $Q sh -- '$<' '$@' \ + HAVE_IBV_FLOW_DEVX_COUNTERS \ + infiniband/mlx5dv.h \ + enum MLX5DV_FLOW_ACTION_COUNTER_DEVX \ + $(AUTOCONF_OUTPUT) + $Q sh -- '$<' '$@' \ HAVE_ETHTOOL_LINK_MODE_25G \ /usr/include/linux/ethtool.h \ enum ETHTOOL_LINK_MODE_25000baseCR_Full_BIT \ diff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build index e323c3a..9a5077d 100644 --- a/drivers/net/mlx5/meson.build +++ b/drivers/net/mlx5/meson.build @@ -46,6 +46,7 @@ if build 'mlx5_trigger.c', 'mlx5_txq.c', 'mlx5_vlan.c', + 'mlx5_devx_cmds.c', ) if dpdk_conf.has('RTE_ARCH_X86_64') or dpdk_conf.has('RTE_ARCH_ARM64') sources += files('mlx5_rxtx_vec.c') @@ -100,6 +101,10 @@ if build 'MLX5DV_CQ_INIT_ATTR_FLAGS_CQE_PAD' ], [ 'HAVE_IBV_FLOW_DV_SUPPORT', 'infiniband/mlx5dv.h', 'mlx5dv_create_flow_action_packet_reformat' ], + [ 'HAVE_IBV_FLOW_DEVX_COUNTERS', 'infiniband/mlx5dv.h', + 'MLX5DV_FLOW_ACTION_COUNTER_DEVX' ], + [ 'HAVE_IBV_DEVX_OBJ', 'infiniband/mlx5dv.h', + 'MLX5DV_CONTEXT_FLAGS_DEVX' ], [ 'HAVE_IBV_DEVICE_MPLS_SUPPORT', 'infiniband/verbs.h', 'IBV_FLOW_SPEC_MPLS' ], [ 'HAVE_IBV_WQ_FLAG_RX_END_PADDING', 'infiniband/verbs.h', diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index 9e5cab1..1e00b8b 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -727,7 +727,7 @@ struct mlx5_dev_config config, const struct mlx5_switch_info *switch_info) { - struct ibv_context *ctx; + struct ibv_context *ctx = NULL; struct ibv_device_attr_ex attr; struct ibv_port_attr port_attr; struct ibv_pd *pd = NULL; @@ -786,10 +786,17 @@ /* Prepare shared data between primary and secondary process. */ mlx5_prepare_shared_data(); errno = 0; - ctx = mlx5_glue->open_device(ibv_dev); - if (!ctx) { - rte_errno = errno ? errno : ENODEV; - return NULL; + ctx = mlx5_glue->dv_open_device(ibv_dev); + if (ctx) { + config.devx = 1; + DRV_LOG(DEBUG, "DEVX is %ssupported", + config.devx ? "" : "not "); + } else { + ctx = mlx5_glue->open_device(ibv_dev); + if (!ctx) { + rte_errno = errno ? errno : ENODEV; + return NULL; + } } #ifdef HAVE_IBV_MLX5_MOD_SWP dv_attr.comp_mask |= MLX5DV_CONTEXT_MASK_SWP; diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 75aeeb2..1fcdb71 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -129,6 +129,7 @@ struct mlx5_dev_config { unsigned int vf_nl_en:1; /* Enable Netlink requests in VF mode. */ unsigned int dv_flow_en:1; /* Enable DV flow. */ unsigned int swp:1; /* Tx generic tunnel checksum and TSO offload. */ + unsigned int devx:1; /* Whether devx interface is available or not. */ struct { unsigned int enabled:1; /* Whether MPRQ is enabled. */ unsigned int stride_num_n; /* Number of strides. */ diff --git a/drivers/net/mlx5/ml
[dpdk-dev] [PATCH v1 1/3] net/mlx5: modify shared counter allocation logic
This commit modifies the logic for searching an allocating a shared counter in mlx5_flow_verbs. modifies commit 84c406e74524 ("net/mlx5: add flow translate function") Signed-off-by: Moti Haimovsky --- drivers/net/mlx5/mlx5_flow_verbs.c | 14 +++--- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c b/drivers/net/mlx5/mlx5_flow_verbs.c index 81ec59d..409e1cd 100644 --- a/drivers/net/mlx5/mlx5_flow_verbs.c +++ b/drivers/net/mlx5/mlx5_flow_verbs.c @@ -121,13 +121,13 @@ struct mlx5_flow_counter *cnt; int ret; - LIST_FOREACH(cnt, &priv->flow_counters, next) { - if (!cnt->shared || cnt->shared != shared) - continue; - if (cnt->id != id) - continue; - cnt->ref_cnt++; - return cnt; + if (shared) { + LIST_FOREACH(cnt, &priv->flow_counters, next) { + if (cnt->shared && cnt->id == id) { + cnt->ref_cnt++; + return cnt; + } + } } cnt = rte_calloc(__func__, 1, sizeof(*cnt), 0); if (!cnt) { -- 1.8.3.1
[dpdk-dev] [PATCH v1 0/3] support flow counters using devx
This series of commits add support for creating, allocating, querying and destroying flow counters in mlx5 PMD using the devx interface. Moti Haimovsky (3): net/mlx5: modify shared counter allocation logic net/mlx5: add devx functions to glue net/mlx5: support flow counters using devx drivers/net/mlx5/Makefile | 11 ++ drivers/net/mlx5/meson.build | 7 ++ drivers/net/mlx5/mlx5.c| 17 ++- drivers/net/mlx5/mlx5.h| 1 + drivers/net/mlx5/mlx5_devx_cmds.c | 117 +++ drivers/net/mlx5/mlx5_flow.h | 12 +- drivers/net/mlx5/mlx5_flow_dv.c| 232 +++-- drivers/net/mlx5/mlx5_flow_verbs.c | 14 +-- drivers/net/mlx5/mlx5_glue.c | 100 drivers/net/mlx5/mlx5_glue.h | 19 +++ drivers/net/mlx5/mlx5_prm.h| 86 ++ 11 files changed, 593 insertions(+), 23 deletions(-) create mode 100644 drivers/net/mlx5/mlx5_devx_cmds.c -- 1.8.3.1
Re: [dpdk-dev] [PATCH] net/mlx5: modify-header support using Direct Verbs
Thanks, PSB. > -Original Message- > From: Shahaf Shuler > Sent: Tuesday, December 25, 2018 1:38 PM > To: Dekel Peled ; Yongseok Koh > > Cc: dev@dpdk.org; Ori Kam ; Dekel Peled > > Subject: RE: [PATCH] net/mlx5: modify-header support using Direct Verbs > > Hi Dekel, > > See some comments below, > > Sunday, December 23, 2018 11:58 AM, Dekel Peled: > > Subject: [PATCH] net/mlx5: modify-header support using Direct Verbs > > Maybe title can be: "support modify header using Direct Verbs" OK, I'll change it. > > > > > This patch implements the set of actions to support offload of packet > > header modifications to MLX5 NIC. > > > > Implamantation is based on RFC [1]. > > > > [1] http://mails.dpdk.org/archives/dev/2018-November/119971.html > > > > Signed-off-by: Dekel Peled > > --- > > drivers/net/mlx5/mlx5.h | 1 + > > drivers/net/mlx5/mlx5_flow.h| 56 ++- > > drivers/net/mlx5/mlx5_flow_dv.c | 998 > > +++- > > drivers/net/mlx5/mlx5_glue.c| 22 + > > drivers/net/mlx5/mlx5_glue.h| 5 + > > drivers/net/mlx5/mlx5_prm.h | 11 +- > > 6 files changed, 1084 insertions(+), 9 deletions(-) > > > > diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index > > 75aeeb2..b2fe5cb 100644 > > --- a/drivers/net/mlx5/mlx5.h > > +++ b/drivers/net/mlx5/mlx5.h > > @@ -227,6 +227,7 @@ struct priv { > > LIST_HEAD(ind_tables, mlx5_ind_table_ibv) ind_tbls; > > LIST_HEAD(matchers, mlx5_flow_dv_matcher) matchers; > > LIST_HEAD(encap_decap, mlx5_flow_dv_encap_decap_resource) > > encaps_decaps; > > + LIST_HEAD(modify_cmd, mlx5_flow_dv_modify_hdr_resource) > > modify_cmds; > > uint32_t link_speed_capa; /* Link speed capabilities. */ > > struct mlx5_xstats_ctrl xstats_ctrl; /* Extended stats control. */ > > struct mlx5_stats_ctrl stats_ctrl; /* Stats control. */ diff --git > > a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index > > 4a7c052..cb1e6fd 100644 > > --- a/drivers/net/mlx5/mlx5_flow.h > > +++ b/drivers/net/mlx5/mlx5_flow.h > > @@ -69,6 +69,18 @@ > > (MLX5_FLOW_LAYER_INNER_L2 | MLX5_FLOW_LAYER_INNER_L3 | \ > > MLX5_FLOW_LAYER_INNER_L4) > > > > +/* Layer Masks. */ > > +#define MLX5_FLOW_LAYER_L2 \ > > + (MLX5_FLOW_LAYER_OUTER_L2 | MLX5_FLOW_LAYER_INNER_L2) > > #define > > +MLX5_FLOW_LAYER_L3_IPV4 \ > > + (MLX5_FLOW_LAYER_OUTER_L3_IPV4 | > > MLX5_FLOW_LAYER_INNER_L3_IPV4) > > +#define MLX5_FLOW_LAYER_L3_IPV6 \ > > + (MLX5_FLOW_LAYER_OUTER_L3_IPV6 | > > MLX5_FLOW_LAYER_INNER_L3_IPV6) > > +#define MLX5_FLOW_LAYER_L3 \ > > + (MLX5_FLOW_LAYER_L3_IPV4 | MLX5_FLOW_LAYER_L3_IPV6) > #define > > +MLX5_FLOW_LAYER_L4 \ > > + (MLX5_FLOW_LAYER_OUTER_L4 | MLX5_FLOW_LAYER_INNER_L4) > > + > > /* Actions */ > > #define MLX5_FLOW_ACTION_DROP (1u << 0) #define > > MLX5_FLOW_ACTION_QUEUE (1u << 1) @@ -110,6 +122,17 @@ > > MLX5_FLOW_ACTION_NVGRE_DECAP | \ > > MLX5_FLOW_ACTION_RAW_DECAP) > > > > +#define MLX5_FLOW_MODIFY_HDR_ACTIONS > > (MLX5_FLOW_ACTION_SET_IPV4_SRC | \ > > + MLX5_FLOW_ACTION_SET_IPV4_DST | \ > > + MLX5_FLOW_ACTION_SET_IPV6_SRC | \ > > + MLX5_FLOW_ACTION_SET_IPV6_DST | \ > > + MLX5_FLOW_ACTION_SET_TP_SRC | \ > > + MLX5_FLOW_ACTION_SET_TP_DST | \ > > + MLX5_FLOW_ACTION_SET_TTL | \ > > + MLX5_FLOW_ACTION_DEC_TTL | \ > > + MLX5_FLOW_ACTION_SET_MAC_SRC | \ > > + MLX5_FLOW_ACTION_SET_MAC_DST) > > + > > #ifndef IPPROTO_MPLS > > #define IPPROTO_MPLS 137 > > #endif > > @@ -153,9 +176,6 @@ > > /* IBV hash source bits for IPV6. */ #define MLX5_IPV6_IBV_RX_HASH > > (IBV_RX_HASH_SRC_IPV6 | > > IBV_RX_HASH_DST_IPV6) > > > > -/* Max number of actions per DV flow. */ -#define > > MLX5_DV_MAX_NUMBER_OF_ACTIONS 8 > > - > > enum mlx5_flow_drv_type { > > MLX5_FLOW_TYPE_MIN, > > MLX5_FLOW_TYPE_DV, > > @@ -172,9 +192,6 @@ struct mlx5_flow_dv_match_params { > > /**< Matcher value. This value is used as the mask or as a key. */ > > }; > > > > -#define MLX5_DV_MAX_NUMBER_OF_ACTIONS 8 -#define > MLX5_ENCAP_MAX_LEN > > 132 > > - > > /* Matcher structure. */ > > struct mlx5_flow_dv_matcher { > > LIST_ENTRY(mlx5_flow_dv_matcher) next; @@ -187,6 +204,8 @@ > struct > > mlx5_flow_dv_matcher { > > struct mlx5_flow_dv_match_params mask; /**< Matcher mask. */ }; > > > > +#define MLX5_ENCAP_MAX_LEN 132 > > + > > /* Encap/decap resource structure. */ struct > > mlx5_flow_dv_encap_decap_resource { > > LIST_ENTRY(mlx5_flow_dv_encap_decap_resource) next; @@ - > 200,6 > > +219,29 @@ struct mlx5_flow_dv_encap_decap_resource { > > uint8_t ft_type; > > }; > > > > +/* Number of modification commands. */ #define MLX5_MODIFY_NUM 8 > > + > > +/* Modi
Re: [dpdk-dev] [PATCH] app/testpmd: fix mpls encap ipv4 version and ihl
Hi Saleh, Thanks for your patch. If you will grep into the DPDK repo you will see that there are several occurrences of IP_VHL_DEF, with the same functionality. I would consider putting the IPV4_VHL_DEF you added in a more generic location and not under testpmd, so other modules will be able to use it without the need to include testpmd.h, which is a bit awkard. Another question is whether it should be IPV4_VHL_DEF or IPV_VHL_DEF as in other DPDK apps. Probably other apps should be adjusted to use it. Regards, Rami Rosen
[dpdk-dev] [PATCH v2] doc: add GRO API limitations in prog_guide
This patch adds GRO API limitations in the programmer guide. Fixes: 2c900d09055e ("doc: add GRO guide") Fixes: 9e0b9d2ec0f4 ("gro: support VxLAN GRO") Cc: sta...@dpdk.org Signed-off-by: Jiayu Hu --- changes in v2: - add fix versions - add more limitations doc/guides/prog_guide/generic_receive_offload_lib.rst | 11 +++ 1 file changed, 11 insertions(+) diff --git a/doc/guides/prog_guide/generic_receive_offload_lib.rst b/doc/guides/prog_guide/generic_receive_offload_lib.rst index 9c6a4d0..3873610 100644 --- a/doc/guides/prog_guide/generic_receive_offload_lib.rst +++ b/doc/guides/prog_guide/generic_receive_offload_lib.rst @@ -191,3 +191,14 @@ Header fields deciding if packets are neighbors include: ignore IPv4 ID fields for the packets whose DF bit is 1. Additionally, packets which have different value of DF bit can't be merged. + +GRO Library Limitations +--- + +- GRO library directly uses the values of MBUF->l2_len/l3_len/l4_len/ + outer_l2_len/outer_l3_len to parse packet headers. In addition, + it relies on MBUF->pkt_len/data_len to process packets. Therefore, + to get correct reassembly results, applications must set correct + values to those MBUF metadata fields. + +- GRO library doesn't support to process packets with IPv4 option fields. -- 2.7.4
Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
HI Thomas, Snipped > > > Small nits > > > 9th patch in this set is doc. So above info need to be corrected. > > > if you are addressing my earlier comment of separating out mempool > > > element iteration changes in to separate new patch 9/10 .Please keep > > > my ack in next version > > > > Thanks for pointing this out, Like updated in email and chat I am not > planning to split it. Hence no version 8. > > So, no ack and no merge? > > Looking at the first patches + doc patch, the split is not meaningful. > You should merge doc and option parsing in the related patches. > For instance, parsing and doc of "tm" option should be in the "tm" patch. > > I did not follow you request. Are you stating, for each functionality I should be updating document rather than 1 document update after adding the new functions? If former is true I am not able to find such reasoning stated in guideline or documentation or from the maintainer. Thanks Vipin Varghese
Re: [dpdk-dev] 18.08.1 patches review and test
Hello Kevin, I have an issue with one of the patches originating from me and targeted for stable. In-lined below. On Thursday 20 December 2018 05:07 PM, Kevin Traynor wrote: > (resend with correct subject) > > Hi all, > > Here is a list of patches targeted for stable release 18.08.1. Please > help review and test. The planned date for the final release is 16th > January. Before that, please shout if anyone has objections with these > patches being applied. > > Also for the companies committed to running regression tests, > please run the tests and report any issue before the release date. > > A release candidate tarball can be found at: > > https://dpdk.org/browse/dpdk-stable/tag/?id=v18.08.1-rc1 > > These patches are located at branch 18.08 of dpdk-stable repo: > https://dpdk.org/browse/dpdk-stable/ > [...] > Shreyansh Jain (2): >bus/fslmc: fix physical addressing check >raw/skeleton: fix memory leak on test failure < this Please don't apply the 'raw/skeleton: fix memory leak on test failure' patch. There is problem with this as reported in another patch [1]. I will push a fix out (which would actually be reverting this patch) [1] https://patches.dpdk.org/patch/48635/ [...] - Shreyansh