* Re: [dpdk-dev] [PATCH v10 1/7] ethdev: add set ptype function
@ 2019-10-10 9:17 Pavan Nikhilesh Bhagavatula
0 siblings, 0 replies; 3+ messages in thread
From: Pavan Nikhilesh Bhagavatula @ 2019-10-10 9:17 UTC (permalink / raw)
To: Andrew Rybchenko, Jerin Jacob Kollanukkaran, John McNamara,
Marko Kovacevic, Thomas Monjalon, Ferruh Yigit
Cc: dev
>On 10/9/19 6:33 PM, pbhagavatula@marvell.com wrote:
>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>
>> Add `rte_eth_dev_set_supported_ptypes` function that will allow the
>> application to inform the PMD the packet types it is interested in.
>> Based on the ptypes set PMDs can optimize their Rx path.
>>
>> -If application doesn’t want any ptype information it can call
>> `rte_eth_dev_set_supported_ptypes(ethdev_id,
>RTE_PTYPE_UNKNOWN, NULL, 0)`
>> and PMD may skip packet type processing and set
>rte_mbuf::packet_type to
>> RTE_PTYPE_UNKNOWN.
>>
>> -If application doesn’t call `rte_eth_dev_set_supported_ptypes` PMD
>can
>> return `rte_mbuf::packet_type` with
>`rte_eth_dev_get_supported_ptypes`.
>>
>> -If application is interested only in L2/L3 layer, it can inform the PMD
>> to update `rte_mbuf::packet_type` with L2/L3 ptype by calling
>> `rte_eth_dev_set_supported_ptypes(ethdev_id,
>> RTE_PTYPE_L2_MASK | RTE_PTYPE_L3_MASK, NULL,
>0)`.
>>
>> Suggested-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
>
>Sorry, but few nits below.
>
>[snip]
>
>> diff --git a/lib/librte_ethdev/rte_ethdev.c
>b/lib/librte_ethdev/rte_ethdev.c
>> index 17d183e1f..349483707 100644
>> --- a/lib/librte_ethdev/rte_ethdev.c
>> +++ b/lib/librte_ethdev/rte_ethdev.c
>> @@ -2602,6 +2602,90 @@
>rte_eth_dev_get_supported_ptypes(uint16_t port_id, uint32_t
>ptype_mask,
>> return j;
>> }
>>
>> +int
>> +rte_eth_dev_set_supported_ptypes(uint16_t port_id, uint32_t
>ptype_mask,
>> + uint32_t *set_ptypes, unsigned int
>num)
>> +{
>> + const uint32_t valid_ptype_masks[] = {
>> + RTE_PTYPE_L2_MASK,
>> + RTE_PTYPE_L3_MASK,
>> + RTE_PTYPE_L4_MASK,
>> + RTE_PTYPE_TUNNEL_MASK,
>> + RTE_PTYPE_INNER_L2_MASK,
>> + RTE_PTYPE_INNER_L3_MASK,
>> + RTE_PTYPE_INNER_L4_MASK,
>> + };
>> + const uint32_t *all_ptypes;
>> + struct rte_eth_dev *dev;
>> + unsigned int i, j;
>> + int ret;
>> +
>> + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
>> + dev = &rte_eth_devices[port_id];
>> +
>> + if (num > 0 && set_ptypes == NULL)
>> + return -EINVAL;
>> +
>> + if (*dev->dev_ops->dev_supported_ptypes_get == NULL ||
>> + *dev->dev_ops->dev_supported_ptypes_set
>== NULL) {
>> + ret = 0;
>> + goto ptype_unknown;
>> + }
>> +
>> + if (ptype_mask == 0) {
>> + ret = (*dev->dev_ops-
>>dev_supported_ptypes_set)(dev,
>> + ptype_mask);
>> + goto ptype_unknown;
>> + }
>> +
>> + for (i = 0; i <
>sizeof(valid_ptype_masks)/sizeof(valid_ptype_masks[0]);
>
>RTE_DIM should be used instead of sizeof/sizeof
Ah! yes checkpatch was preempting me to use ARRAY_SIZE I forgot RTE_DIM exists.
>
>> +
> i++) {
>> + uint32_t mask = ptype_mask & valid_ptype_masks[i];
>> + if (mask && mask != valid_ptype_masks[i]) {
>> + ret = -EINVAL;
>> + goto ptype_unknown;
>> + }
>> + }
>> +
>> + if (ptype_mask & ~RTE_PTYPE_ALL_MASK) {
>> + ret = -EINVAL;
>> + goto ptype_unknown;
>> + }
>
>It does not protect against more masks added in the future and lost
>in your list above but still used in request.
>It is better just add extra variable and remove bits
>from there while masks are checked in the loop. Then it should be
>checked here that the mask is 0 (no bits are left and everything is
>checked).
>
Makes sense, as it would probably break if future updates to ptype_masks
are not added to the above list.
I will roll a v11.
Thanks,
Pavan.
>> +
>> + all_ptypes = (*dev->dev_ops-
>>dev_supported_ptypes_get)(dev);
>> + if (all_ptypes == NULL) {
>> + ret = 0;
>> + goto ptype_unknown;
>> + }
>> +
>> + /*
>> + * Accodommodate as many set_ptypes as possible. If the
>supplied
>> + * set_ptypes array is insufficient fill it partially.
>> + */
>> + for (i = 0, j = 0; set_ptypes != NULL &&
>> + (all_ptypes[i] !=
>RTE_PTYPE_UNKNOWN); ++i) {
>> + if (ptype_mask & all_ptypes[i]) {
>> + if (j < num - 1) {
>> + set_ptypes[j] = all_ptypes[i];
>> + j++;
>> + continue;
>> + }
>> + break;
>> + }
>> + }
>> +
>> + if (set_ptypes != NULL && j < num)
>> + set_ptypes[j] = RTE_PTYPE_UNKNOWN;
>> +
>> + return (*dev->dev_ops->dev_supported_ptypes_set)(dev,
>ptype_mask);
>> +
>> +ptype_unknown:
>> + if (num > 0)
>> + set_ptypes[0] = RTE_PTYPE_UNKNOWN;
>> +
>> + return ret;
>> +}
>> +
>> void
>> rte_eth_macaddr_get(uint16_t port_id, struct rte_ether_addr
>*mac_addr)
>> {
>
>[snip]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dpdk-dev] [PATCH v10 1/7] ethdev: add set ptype function
2019-10-09 15:33 ` [dpdk-dev] [PATCH v10 1/7] ethdev: add set ptype function pbhagavatula
@ 2019-10-10 8:46 ` Andrew Rybchenko
0 siblings, 0 replies; 3+ messages in thread
From: Andrew Rybchenko @ 2019-10-10 8:46 UTC (permalink / raw)
To: pbhagavatula, jerinj, John McNamara, Marko Kovacevic,
Thomas Monjalon, Ferruh Yigit
Cc: dev
On 10/9/19 6:33 PM, pbhagavatula@marvell.com wrote:
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> Add `rte_eth_dev_set_supported_ptypes` function that will allow the
> application to inform the PMD the packet types it is interested in.
> Based on the ptypes set PMDs can optimize their Rx path.
>
> -If application doesn’t want any ptype information it can call
> `rte_eth_dev_set_supported_ptypes(ethdev_id, RTE_PTYPE_UNKNOWN, NULL, 0)`
> and PMD may skip packet type processing and set rte_mbuf::packet_type to
> RTE_PTYPE_UNKNOWN.
>
> -If application doesn’t call `rte_eth_dev_set_supported_ptypes` PMD can
> return `rte_mbuf::packet_type` with `rte_eth_dev_get_supported_ptypes`.
>
> -If application is interested only in L2/L3 layer, it can inform the PMD
> to update `rte_mbuf::packet_type` with L2/L3 ptype by calling
> `rte_eth_dev_set_supported_ptypes(ethdev_id,
> RTE_PTYPE_L2_MASK | RTE_PTYPE_L3_MASK, NULL, 0)`.
>
> Suggested-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
Sorry, but few nits below.
[snip]
> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> index 17d183e1f..349483707 100644
> --- a/lib/librte_ethdev/rte_ethdev.c
> +++ b/lib/librte_ethdev/rte_ethdev.c
> @@ -2602,6 +2602,90 @@ rte_eth_dev_get_supported_ptypes(uint16_t port_id, uint32_t ptype_mask,
> return j;
> }
>
> +int
> +rte_eth_dev_set_supported_ptypes(uint16_t port_id, uint32_t ptype_mask,
> + uint32_t *set_ptypes, unsigned int num)
> +{
> + const uint32_t valid_ptype_masks[] = {
> + RTE_PTYPE_L2_MASK,
> + RTE_PTYPE_L3_MASK,
> + RTE_PTYPE_L4_MASK,
> + RTE_PTYPE_TUNNEL_MASK,
> + RTE_PTYPE_INNER_L2_MASK,
> + RTE_PTYPE_INNER_L3_MASK,
> + RTE_PTYPE_INNER_L4_MASK,
> + };
> + const uint32_t *all_ptypes;
> + struct rte_eth_dev *dev;
> + unsigned int i, j;
> + int ret;
> +
> + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
> + dev = &rte_eth_devices[port_id];
> +
> + if (num > 0 && set_ptypes == NULL)
> + return -EINVAL;
> +
> + if (*dev->dev_ops->dev_supported_ptypes_get == NULL ||
> + *dev->dev_ops->dev_supported_ptypes_set == NULL) {
> + ret = 0;
> + goto ptype_unknown;
> + }
> +
> + if (ptype_mask == 0) {
> + ret = (*dev->dev_ops->dev_supported_ptypes_set)(dev,
> + ptype_mask);
> + goto ptype_unknown;
> + }
> +
> + for (i = 0; i < sizeof(valid_ptype_masks)/sizeof(valid_ptype_masks[0]);
RTE_DIM should be used instead of sizeof/sizeof
> + i++) {
> + uint32_t mask = ptype_mask & valid_ptype_masks[i];
> + if (mask && mask != valid_ptype_masks[i]) {
> + ret = -EINVAL;
> + goto ptype_unknown;
> + }
> + }
> +
> + if (ptype_mask & ~RTE_PTYPE_ALL_MASK) {
> + ret = -EINVAL;
> + goto ptype_unknown;
> + }
It does not protect against more masks added in the future and lost
in your list above but still used in request.
It is better just add extra variable and remove bits
from there while masks are checked in the loop. Then it should be
checked here that the mask is 0 (no bits are left and everything is
checked).
> +
> + all_ptypes = (*dev->dev_ops->dev_supported_ptypes_get)(dev);
> + if (all_ptypes == NULL) {
> + ret = 0;
> + goto ptype_unknown;
> + }
> +
> + /*
> + * Accodommodate as many set_ptypes as possible. If the supplied
> + * set_ptypes array is insufficient fill it partially.
> + */
> + for (i = 0, j = 0; set_ptypes != NULL &&
> + (all_ptypes[i] != RTE_PTYPE_UNKNOWN); ++i) {
> + if (ptype_mask & all_ptypes[i]) {
> + if (j < num - 1) {
> + set_ptypes[j] = all_ptypes[i];
> + j++;
> + continue;
> + }
> + break;
> + }
> + }
> +
> + if (set_ptypes != NULL && j < num)
> + set_ptypes[j] = RTE_PTYPE_UNKNOWN;
> +
> + return (*dev->dev_ops->dev_supported_ptypes_set)(dev, ptype_mask);
> +
> +ptype_unknown:
> + if (num > 0)
> + set_ptypes[0] = RTE_PTYPE_UNKNOWN;
> +
> + return ret;
> +}
> +
> void
> rte_eth_macaddr_get(uint16_t port_id, struct rte_ether_addr *mac_addr)
> {
[snip]
^ permalink raw reply [flat|nested] 3+ messages in thread
* [dpdk-dev] [PATCH v10 1/7] ethdev: add set ptype function
2019-10-09 15:33 ` [dpdk-dev] [PATCH v10 " pbhagavatula
@ 2019-10-09 15:33 ` pbhagavatula
2019-10-10 8:46 ` Andrew Rybchenko
0 siblings, 1 reply; 3+ messages in thread
From: pbhagavatula @ 2019-10-09 15:33 UTC (permalink / raw)
To: arybchenko, jerinj, John McNamara, Marko Kovacevic,
Thomas Monjalon, Ferruh Yigit
Cc: dev, Pavan Nikhilesh
From: Pavan Nikhilesh <pbhagavatula@marvell.com>
Add `rte_eth_dev_set_supported_ptypes` function that will allow the
application to inform the PMD the packet types it is interested in.
Based on the ptypes set PMDs can optimize their Rx path.
-If application doesn’t want any ptype information it can call
`rte_eth_dev_set_supported_ptypes(ethdev_id, RTE_PTYPE_UNKNOWN, NULL, 0)`
and PMD may skip packet type processing and set rte_mbuf::packet_type to
RTE_PTYPE_UNKNOWN.
-If application doesn’t call `rte_eth_dev_set_supported_ptypes` PMD can
return `rte_mbuf::packet_type` with `rte_eth_dev_get_supported_ptypes`.
-If application is interested only in L2/L3 layer, it can inform the PMD
to update `rte_mbuf::packet_type` with L2/L3 ptype by calling
`rte_eth_dev_set_supported_ptypes(ethdev_id,
RTE_PTYPE_L2_MASK | RTE_PTYPE_L3_MASK, NULL, 0)`.
Suggested-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
---
doc/guides/nics/features.rst | 8 ++-
doc/guides/rel_notes/release_19_11.rst | 8 +++
lib/librte_ethdev/rte_ethdev.c | 84 ++++++++++++++++++++++++
lib/librte_ethdev/rte_ethdev.h | 37 +++++++++++
lib/librte_ethdev/rte_ethdev_core.h | 19 ++++++
lib/librte_ethdev/rte_ethdev_version.map | 3 +
6 files changed, 157 insertions(+), 2 deletions(-)
diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst
index c4e128d2f..1756fa73a 100644
--- a/doc/guides/nics/features.rst
+++ b/doc/guides/nics/features.rst
@@ -583,9 +583,13 @@ Packet type parsing
-------------------
Supports packet type parsing and returns a list of supported types.
+Allows application to set ptypes it is interested in.
-* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
-* **[related] API**: ``rte_eth_dev_get_supported_ptypes()``.
+* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``,
+ ``dev_supported_ptypes_set``.
+* **[related] API**: ``rte_eth_dev_get_supported_ptypes()``,
+ ``rte_eth_dev_set_supported_ptypes()``.
+* **[provides] mbuf**: ``mbuf.packet_type``.
.. _nic_features_timesync:
diff --git a/doc/guides/rel_notes/release_19_11.rst b/doc/guides/rel_notes/release_19_11.rst
index 8049144e1..18a67c96d 100644
--- a/doc/guides/rel_notes/release_19_11.rst
+++ b/doc/guides/rel_notes/release_19_11.rst
@@ -79,6 +79,14 @@ New Features
Added stateful decompression support in the Intel QuickAssist Technology PMD.
Please note that stateful compression is not supported.
+* **Added ethdev API to set supported packet types**
+
+ * Added new API ``rte_eth_dev_set_supported_ptypes`` that allows an
+ application to inform PMD about packet types classification the application
+ is interested in
+ * This scheme will allow PMDs to avoid lookup to internal ptype table on Rx
+ and thereby improve Rx performance if application wishes do so.
+
Removed Items
-------------
diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 17d183e1f..349483707 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -2602,6 +2602,90 @@ rte_eth_dev_get_supported_ptypes(uint16_t port_id, uint32_t ptype_mask,
return j;
}
+int
+rte_eth_dev_set_supported_ptypes(uint16_t port_id, uint32_t ptype_mask,
+ uint32_t *set_ptypes, unsigned int num)
+{
+ const uint32_t valid_ptype_masks[] = {
+ RTE_PTYPE_L2_MASK,
+ RTE_PTYPE_L3_MASK,
+ RTE_PTYPE_L4_MASK,
+ RTE_PTYPE_TUNNEL_MASK,
+ RTE_PTYPE_INNER_L2_MASK,
+ RTE_PTYPE_INNER_L3_MASK,
+ RTE_PTYPE_INNER_L4_MASK,
+ };
+ const uint32_t *all_ptypes;
+ struct rte_eth_dev *dev;
+ unsigned int i, j;
+ int ret;
+
+ RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
+ dev = &rte_eth_devices[port_id];
+
+ if (num > 0 && set_ptypes == NULL)
+ return -EINVAL;
+
+ if (*dev->dev_ops->dev_supported_ptypes_get == NULL ||
+ *dev->dev_ops->dev_supported_ptypes_set == NULL) {
+ ret = 0;
+ goto ptype_unknown;
+ }
+
+ if (ptype_mask == 0) {
+ ret = (*dev->dev_ops->dev_supported_ptypes_set)(dev,
+ ptype_mask);
+ goto ptype_unknown;
+ }
+
+ for (i = 0; i < sizeof(valid_ptype_masks)/sizeof(valid_ptype_masks[0]);
+ i++) {
+ uint32_t mask = ptype_mask & valid_ptype_masks[i];
+ if (mask && mask != valid_ptype_masks[i]) {
+ ret = -EINVAL;
+ goto ptype_unknown;
+ }
+ }
+
+ if (ptype_mask & ~RTE_PTYPE_ALL_MASK) {
+ ret = -EINVAL;
+ goto ptype_unknown;
+ }
+
+ all_ptypes = (*dev->dev_ops->dev_supported_ptypes_get)(dev);
+ if (all_ptypes == NULL) {
+ ret = 0;
+ goto ptype_unknown;
+ }
+
+ /*
+ * Accodommodate as many set_ptypes as possible. If the supplied
+ * set_ptypes array is insufficient fill it partially.
+ */
+ for (i = 0, j = 0; set_ptypes != NULL &&
+ (all_ptypes[i] != RTE_PTYPE_UNKNOWN); ++i) {
+ if (ptype_mask & all_ptypes[i]) {
+ if (j < num - 1) {
+ set_ptypes[j] = all_ptypes[i];
+ j++;
+ continue;
+ }
+ break;
+ }
+ }
+
+ if (set_ptypes != NULL && j < num)
+ set_ptypes[j] = RTE_PTYPE_UNKNOWN;
+
+ return (*dev->dev_ops->dev_supported_ptypes_set)(dev, ptype_mask);
+
+ptype_unknown:
+ if (num > 0)
+ set_ptypes[0] = RTE_PTYPE_UNKNOWN;
+
+ return ret;
+}
+
void
rte_eth_macaddr_get(uint16_t port_id, struct rte_ether_addr *mac_addr)
{
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index d9871782e..35e171e3c 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -2431,6 +2431,43 @@ int rte_eth_dev_fw_version_get(uint16_t port_id,
*/
int rte_eth_dev_get_supported_ptypes(uint16_t port_id, uint32_t ptype_mask,
uint32_t *ptypes, int num);
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Inform Ethernet device of the packet types classification the recipient is
+ * interested in.
+ *
+ * Application can use this function to set only specific ptypes that it's
+ * interested. This information can be used by the PMD to optimize Rx path.
+ *
+ * The function accepts an array `set_ptypes` allocated by the caller to
+ * store the packet types set by the driver, the last element of the array
+ * is set to RTE_PTYPE_UNKNOWN. The size of the `set_ptype` array should be
+ * `rte_eth_dev_get_supported_ptypes() + 1` else it might only be filled
+ * partially.
+ *
+ * @param port_id
+ * The port identifier of the Ethernet device.
+ * @param ptype_mask
+ * The ptype family that application is interested in should be bitwise OR of
+ * RTE_PTYPE_*_MASK or 0.
+ * @param set_ptypes
+ * An array pointer to store set packet types, allocated by caller. The
+ * function marks the end of array with RTE_PTYPE_UNKNOWN.
+ * @param num
+ * Size of the array pointed by param ptypes.
+ * Should be rte_eth_dev_get_supported_ptypes() + 1 to accommodate the
+ * set ptypes.
+ * @return
+ * - (0) if Success.
+ * - (-ENODEV) if *port_id* invalid.
+ * - (-EINVAL) if *ptype_mask* is invalid (or) set_ptypes is NULL and
+ * num > 0.
+ */
+__rte_experimental
+int rte_eth_dev_set_supported_ptypes(uint16_t port_id, uint32_t ptype_mask,
+ uint32_t *set_ptypes, unsigned int num);
/**
* Retrieve the MTU of an Ethernet device.
diff --git a/lib/librte_ethdev/rte_ethdev_core.h b/lib/librte_ethdev/rte_ethdev_core.h
index 2922d5b7c..7202a216d 100644
--- a/lib/librte_ethdev/rte_ethdev_core.h
+++ b/lib/librte_ethdev/rte_ethdev_core.h
@@ -110,6 +110,23 @@ typedef void (*eth_dev_infos_get_t)(struct rte_eth_dev *dev,
typedef const uint32_t *(*eth_dev_supported_ptypes_get_t)(struct rte_eth_dev *dev);
/**< @internal Get supported ptypes of an Ethernet device. */
+/**
+ * @internal
+ * Inform an Ethernet device about packet types classifications the recipient
+ * is interested in.
+ *
+ * @param dev
+ * The Ethernet device identifier.
+ * @param ptype_mask
+ * The ptype family that application is interested in should be bitwise OR of
+ * RTE_PTYPE_*_MASK or 0.
+ * @return
+ * - (0) if Success.
+ * - (-EINVAL) if *ptype_mask* is invalid.
+ */
+typedef int (*eth_dev_supported_ptypes_set_t)(struct rte_eth_dev *dev,
+ uint32_t ptype_mask);
+
typedef int (*eth_queue_start_t)(struct rte_eth_dev *dev,
uint16_t queue_id);
/**< @internal Start rx and tx of a queue of an Ethernet device. */
@@ -421,6 +438,8 @@ struct eth_dev_ops {
eth_fw_version_get_t fw_version_get; /**< Get firmware version. */
eth_dev_supported_ptypes_get_t dev_supported_ptypes_get;
/**< Get packet types supported and identified by device. */
+ eth_dev_supported_ptypes_set_t dev_supported_ptypes_set;
+ /**< Inform Ethernet device about packet types the recipient is interested in. */
vlan_filter_set_t vlan_filter_set; /**< Filter VLAN Setup. */
vlan_tpid_set_t vlan_tpid_set; /**< Outer/Inner VLAN TPID Setup. */
diff --git a/lib/librte_ethdev/rte_ethdev_version.map b/lib/librte_ethdev/rte_ethdev_version.map
index 6df42a47b..e14745b9c 100644
--- a/lib/librte_ethdev/rte_ethdev_version.map
+++ b/lib/librte_ethdev/rte_ethdev_version.map
@@ -283,4 +283,7 @@ EXPERIMENTAL {
# added in 19.08
rte_eth_read_clock;
+
+ # added in 19.11
+ rte_eth_dev_set_supported_ptypes;
};
--
2.17.1
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-10-10 9:17 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-10 9:17 [dpdk-dev] [PATCH v10 1/7] ethdev: add set ptype function Pavan Nikhilesh Bhagavatula
-- strict thread matches above, loose matches on Subject: below --
2019-10-07 6:51 [dpdk-dev] [PATCH v9 0/7] ethdev: add new Rx offload flags pbhagavatula
2019-10-09 15:33 ` [dpdk-dev] [PATCH v10 " pbhagavatula
2019-10-09 15:33 ` [dpdk-dev] [PATCH v10 1/7] ethdev: add set ptype function pbhagavatula
2019-10-10 8:46 ` Andrew Rybchenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).