Re: [PATCH v1 3/7] vdpa: Allow to configure max data virtqueues
From: Jason Wang <jasowang@redhat.com>
Date: 2021-12-09 05:36:29
Possibly related (same subject, not in this thread)
- 2021-12-14 · Re: [PATCH v1 3/7] vdpa: Allow to configure max data virtqueues · Si-Wei Liu <hidden>
On Thu, Dec 9, 2021 at 8:25 AM Si-Wei Liu [off-list ref] wrote:
On 12/8/2021 12:14 PM, Eli Cohen wrote:quoted
Add netlink support to configure the max virtqueue pairs for a device. At least one pair is required. The maximum is dictated by the device. Example: $ vdpa dev add name vdpa-a mgmtdev auxiliary/mlx5_core.sf.1 max_vqp 5Not this patch, but I think there should be a mega attribute defined ahead to specify the virtio class/type to create vdpa instance with. Like the existing ones e.g. mac_addr and mtu, max_vqp is also vdpa net specific attribute.
Probably, but this only works for the case when a single parent is allowed to create different types of devices. It looks to me the current model to have a per type parent. Thanks
-Siweiquoted
Signed-off-by: Eli Cohen <redacted> --- v0 -> v1: 1. fix typo 2. move max_vq_pairs to net specific struct drivers/vdpa/vdpa.c | 14 +++++++++++++- include/linux/vdpa.h | 1 + 2 files changed, 14 insertions(+), 1 deletion(-)diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c index c37d384c0f33..3bf016e03512 100644 --- a/drivers/vdpa/vdpa.c +++ b/drivers/vdpa/vdpa.c@@ -480,7 +480,8 @@ vdpa_nl_cmd_mgmtdev_get_dumpit(struct sk_buff *msg, struct netlink_callback *cb) } #define VDPA_DEV_NET_ATTRS_MASK ((1 << VDPA_ATTR_DEV_NET_CFG_MACADDR) | \ - (1 << VDPA_ATTR_DEV_NET_CFG_MTU)) + (1 << VDPA_ATTR_DEV_NET_CFG_MTU) | \ + (1 << VDPA_ATTR_DEV_NET_CFG_MAX_VQP)) static int vdpa_nl_cmd_dev_add_set_doit(struct sk_buff *skb, struct genl_info *info) {@@ -506,6 +507,17 @@ static int vdpa_nl_cmd_dev_add_set_doit(struct sk_buff *skb, struct genl_info *i nla_get_u16(nl_attrs[VDPA_ATTR_DEV_NET_CFG_MTU]); config.mask |= (1 << VDPA_ATTR_DEV_NET_CFG_MTU); } + if (nl_attrs[VDPA_ATTR_DEV_NET_CFG_MAX_VQP]) { + config.net.max_vq_pairs = + nla_get_u16(nl_attrs[VDPA_ATTR_DEV_NET_CFG_MAX_VQP]); + if (!config.net.max_vq_pairs) { + NL_SET_ERR_MSG_MOD(info->extack, + "At least one pair of VQs is required"); + err = -EINVAL; + goto err; + } + config.mask |= BIT_ULL(VDPA_ATTR_DEV_NET_CFG_MAX_VQP); + } /* Skip checking capability if user didn't prefer to configure any * device networking attributes. It is likely that user might have useddiff --git a/include/linux/vdpa.h b/include/linux/vdpa.h index db24317d61b6..b62032573780 100644 --- a/include/linux/vdpa.h +++ b/include/linux/vdpa.h@@ -99,6 +99,7 @@ struct vdpa_dev_set_config { struct { u8 mac[ETH_ALEN]; u16 mtu; + u16 max_vq_pairs; } net; u64 mask; };
_______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization