On 1 Jul 2026, at 15:58, Eli Britstein wrote:

> A netdev_dpdk object can be an ethernet dpdk or a vhost-user port.
> The dev_type field was used to determine that.
> Instead, introduce netdev_dpdk_is_vhost() and remove the dev_type field.
>
> Signed-off-by: Eli Britstein <[email protected]>
Hi Eli,

Thanks for cleaning this up based on an earlier comment.
However, I found one issue; see below.

In addition, should we maybe change the call to be the
opposite, i.e. is_eth()?  If we add any more non-eth devices
in the future, would it be more likely that they also have
the same limitations?  Hence we end up with multiple
device-specific APIs rather than one general?  David/Kevin,
any insights or thoughts on this?

Cheers,

Eelco

> ---
>  lib/netdev-dpdk.c | 37 ++++++++++++++++---------------------
>  1 file changed, 16 insertions(+), 21 deletions(-)
>
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index e375275de..9f8c72bc8 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -210,11 +210,6 @@ struct netdev_dpdk_sw_stats {
>      uint64_t tx_invalid_hwol_drops;
>  };
>
> -enum dpdk_dev_type {
> -    DPDK_DEV_ETH = 0,
> -    DPDK_DEV_VHOST = 1,
> -};
> -
>  /* Quality of Service */
>
>  /* An instance of a QoS configuration.  Always associated with a particular
> @@ -467,7 +462,6 @@ struct netdev_dpdk {
>          int socket_id;
>          int buf_size;
>          int max_packet_len;
> -        enum dpdk_dev_type type;
>          enum netdev_flags flags;
>          int link_reset_cnt;
>          union {
> @@ -616,6 +610,12 @@ is_dpdk_class(const struct netdev_class *class)
>             || class->destruct == netdev_dpdk_vhost_destruct;
>  }
>
> +static bool
> +netdev_dpdk_is_vhost(const struct netdev *netdev)
> +{
> +    return netdev->netdev_class->destruct == netdev_dpdk_vhost_destruct;
> +}
> +
>  /* DPDK NIC drivers allocate RX buffers at a particular granularity, 
> typically
>   * aligned at 1k or less. If a declared mbuf size is not a multiple of this
>   * value, insufficient buffers are allocated to accomodate the packet in its
> @@ -1046,7 +1046,7 @@ dpdk_watchdog(void *dummy OVS_UNUSED)
>          ovs_mutex_lock(&dpdk_mutex);
>          LIST_FOR_EACH (dev, list_node, &dpdk_list) {
>              ovs_mutex_lock(&dev->mutex);
> -            if (dev->type == DPDK_DEV_ETH) {
> +            if (!netdev_dpdk_is_vhost(&dev->up)) {
>                  check_link_status(dev);
>              }
>              ovs_mutex_unlock(&dev->mutex);
> @@ -1506,8 +1506,7 @@ netdev_dpdk_alloc_txq(unsigned int n_txqs)
>  }
>
>  static int
> -common_construct(struct netdev *netdev, dpdk_port_t port_no,
> -                 enum dpdk_dev_type type, int socket_id)
> +common_construct(struct netdev *netdev, dpdk_port_t port_no, int socket_id)
>      OVS_REQUIRES(dpdk_mutex)
>  {
>      struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
> @@ -1522,7 +1521,6 @@ common_construct(struct netdev *netdev, dpdk_port_t 
> port_no,
>      dev->socket_id = socket_id < 0 ? SOCKET0 : socket_id;
>      dev->requested_socket_id = dev->socket_id;
>      dev->port_id = port_no;
> -    dev->type = type;
>      dev->flags = 0;
>      dev->requested_mtu = RTE_ETHER_MTU;
>      dev->max_packet_len = MTU_TO_FRAME_LEN(dev->mtu);
> @@ -1572,7 +1570,7 @@ common_construct(struct netdev *netdev, dpdk_port_t 
> port_no,
>      dev->rte_xstats_ids_size = 0;
>
>      dev->sw_stats = xzalloc(sizeof *dev->sw_stats);
> -    dev->sw_stats->tx_retries = (dev->type == DPDK_DEV_VHOST) ? 0 : 
> UINT64_MAX;
> +    dev->sw_stats->tx_retries = netdev_dpdk_is_vhost(netdev) ? 0 : 
> UINT64_MAX;
>
>      return 0;
>  }
> @@ -1599,8 +1597,7 @@ vhost_common_construct(struct netdev *netdev)
>
>      dev->vhost_max_queue_pairs = VHOST_MAX_QUEUE_PAIRS_DEF;
>
> -    return common_construct(netdev, DPDK_ETH_PORT_ID_INVALID,
> -                            DPDK_DEV_VHOST, socket_id);
> +    return common_construct(netdev, DPDK_ETH_PORT_ID_INVALID, socket_id);
>  }
>
>  static int
> @@ -1707,8 +1704,7 @@ netdev_dpdk_construct(struct netdev *netdev)
>      int err;
>
>      ovs_mutex_lock(&dpdk_mutex);
> -    err = common_construct(netdev, DPDK_ETH_PORT_ID_INVALID,
> -                           DPDK_DEV_ETH, SOCKET0);
> +    err = common_construct(netdev, DPDK_ETH_PORT_ID_INVALID, SOCKET0);
>      ovs_mutex_unlock(&dpdk_mutex);
>      return err;
>  }
> @@ -2273,7 +2269,7 @@ dpdk_set_rx_steer_config(struct netdev *netdev, struct 
> netdev_dpdk *dev,
>                    netdev_get_name(netdev), arg);
>      }
>
> -    if (flags && dev->type != DPDK_DEV_ETH) {
> +    if (flags && !netdev_dpdk_is_vhost(netdev)) {

This is wrong, it should be;

  if (flags && netdev_dpdk_is_vhost(netdev)) {

>          VLOG_WARN("%s: options:rx-steering "
>                    "is only supported on ethernet ports",
>                    netdev_get_name(netdev));
> @@ -3443,7 +3439,7 @@ netdev_dpdk_set_etheraddr__(struct netdev_dpdk *dev, 
> const struct eth_addr mac)
>  {
>      int err = 0;
>
> -    if (dev->type == DPDK_DEV_ETH) {
> +    if (!netdev_dpdk_is_vhost(&dev->up)) {
>          struct rte_ether_addr ea;
>
>          memcpy(ea.addr_bytes, mac.ea, ETH_ADDR_LEN);
> @@ -4363,8 +4359,7 @@ netdev_dpdk_update_flags__(struct netdev_dpdk *dev,
>          return 0;
>      }
>
> -    if (dev->type == DPDK_DEV_ETH) {
> -
> +    if (!netdev_dpdk_is_vhost(&dev->up)) {
>          if ((dev->flags ^ *old_flagsp) & NETDEV_UP) {
>              int err;
>
> @@ -4390,7 +4385,7 @@ netdev_dpdk_update_flags__(struct netdev_dpdk *dev,
>
>          netdev_change_seq_changed(&dev->up);
>      } else {
> -        /* If DPDK_DEV_VHOST device's NETDEV_UP flag was changed and vhost is
> +        /* If a vhost device's NETDEV_UP flag was changed and vhost is
>           * running then change netdev's change_seq to trigger link state
>           * update. */
>
> @@ -6558,7 +6553,7 @@ netdev_dpdk_flow_api_supported(struct netdev *netdev, 
> bool check_only)
>
>      dev = netdev_dpdk_cast(netdev);
>      ovs_mutex_lock(&dev->mutex);
> -    if (dev->type == DPDK_DEV_ETH) {
> +    if (!netdev_dpdk_is_vhost(netdev)) {
>          if (dev->requested_rx_steer_flags && !check_only) {
>              VLOG_WARN("%s: rx-steering is mutually exclusive with 
> hw-offload,"
>                        " falling back to default rss mode",
> -- 
> 2.43.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to