Michael S. Tsirkin
2021-Aug-05 09:57 UTC
[PATCH linux-next v3 0/6] vdpa: enable user to set mac, mtu
On Wed, Jun 16, 2021 at 10:11:49PM +0300, Parav Pandit wrote:> Currently user cannot set the mac address and mtu of the vdpa device. > This patchset enables users to set the mac address and mtu of the vdpa > device once the device is created. > If a vendor driver supports such configuration user can set it otherwise > user gets unsupported error.This makes sense to me overall. People are used to use netlink to set these parameters, and virtio does not necessarily have a way to set all device parameters - they can be RO in the config space.> vdpa mac address and mtu are device configuration layout fields. > To keep interface generic enough for multiple types of vdpa devices, mac > address and mtu setting is implemented as configuration layout config > knobs. > This enables to use similar config layout for other virtio devices. > > An example of query & set of config layout fields for vdpa_sim_net > driver: > > Configuration layout fields are set after device is created. > This enables user to change such fields at later point without destroying and > recreating the device for new config. > > $ vdpa mgmtdev show > vdpasim_net: > supported_classes net > > Add the device: > $ vdpa dev add name bar mgmtdev vdpasim_net > > Configure mac address and mtu: > $ vdpa dev config set bar mac 00:11:22:33:44:55 mtu 9000 > > In above command only mac address or only mtu can also be set. > > View the config after setting: > $ vdpa dev config show > bar: mac 00:11:22:33:44:55 link up link_announce false mtu 9000 speed 0 duplex 0 > > Patch summary: > Patch-1 introduced and use helpers for get/set config area > Patch-2 implement query device config layout > Patch-3 enanble user to set mac and mtu in config space > Patch-4 vdpa_sim_net implements get and set of config layout > Patch-5 mlx5 vdpa driver supports user provided mac config > Patch-6 mlx5 vdpa driver uses user provided mac during rx flow steering > > changelog: > v2->v3: > - dropped patches which are merged > - simplified code to handle non transitional devices > > v1->v2: > - new patches to fix kdoc comment to add new kdoc section > - new patch to have synchronized access to features and config space > - read whole net config layout instead of individual fields > - added error extack for unmanaged vdpa device > - fixed several endianness issues > - introduced vdpa device ops for get config which is synchronized > with other get/set features ops and config ops > - fixed mtu range checking for max > - using NLA_POLICY_ETH_ADDR > - set config moved to device ops instead of mgmtdev ops > - merged build and set to single routine > - ensuring that user has NET_ADMIN capability for configuring network > attributes > - using updated interface and callbacks for get/set config > - following new api for config get/set for mgmt tool in mlx5 vdpa > driver > - fixes for accessing right SF dma device and bar address > - fix for mtu calculation > - fix for bit access in features > - fix for index restore with suspend/resume operation > > > Eli Cohen (2): > vdpa/mlx5: Support configuration of MAC > vdpa/mlx5: Forward only packets with allowed MAC address > > Parav Pandit (4): > vdpa: Introduce and use vdpa device get, set config helpers > vdpa: Introduce query of device config layout > vdpa: Enable user to set mac and mtu of vdpa device > vdpa_sim_net: Enable user to set mac address and mtu > > drivers/vdpa/mlx5/net/mlx5_vnet.c | 101 ++++++-- > drivers/vdpa/vdpa.c | 337 +++++++++++++++++++++++++++ > drivers/vdpa/vdpa_sim/vdpa_sim.c | 13 ++ > drivers/vdpa/vdpa_sim/vdpa_sim.h | 2 + > drivers/vdpa/vdpa_sim/vdpa_sim_net.c | 34 +-- > drivers/vhost/vdpa.c | 3 +- > include/linux/vdpa.h | 38 +-- > include/uapi/linux/vdpa.h | 12 + > 8 files changed, 490 insertions(+), 50 deletions(-) > > -- > 2.26.2
Parav Pandit
2021-Aug-05 10:13 UTC
[PATCH linux-next v3 0/6] vdpa: enable user to set mac, mtu
> From: Michael S. Tsirkin <mst at redhat.com> > Sent: Thursday, August 5, 2021 3:28 PM > > On Wed, Jun 16, 2021 at 10:11:49PM +0300, Parav Pandit wrote: > > Currently user cannot set the mac address and mtu of the vdpa device. > > This patchset enables users to set the mac address and mtu of the vdpa > > device once the device is created. > > If a vendor driver supports such configuration user can set it > > otherwise user gets unsupported error. > > This makes sense to me overall. People are used to use netlink to set these > parameters, and virtio does not necessarily have a way to set all device > parameters - they can be RO in the config space.Yes. this series enables it to RO when driver doesn't support setting it. When driver supports it, it is RW. Do I need to rebase + resend? Please let me know.
Jason Wang
2021-Aug-06 02:50 UTC
[PATCH linux-next v3 0/6] vdpa: enable user to set mac, mtu
? 2021/8/5 ??5:57, Michael S. Tsirkin ??:> On Wed, Jun 16, 2021 at 10:11:49PM +0300, Parav Pandit wrote: >> Currently user cannot set the mac address and mtu of the vdpa device. >> This patchset enables users to set the mac address and mtu of the vdpa >> device once the device is created. >> If a vendor driver supports such configuration user can set it otherwise >> user gets unsupported error. > This makes sense to me overall. People are used to > use netlink to set these parameters, and virtio does > not necessarily have a way to set all device > parameters - they can be RO in the config space.I don't get here, we need to care RO as well (e.g the max_virtqueue_pairs). And do we really want netlink uAPI for virtio like: enum vdpa_attr { @@ -33,6 +34,16 @@ enum vdpa_attr { VDPA_ATTR_DEV_MAX_VQS, /* u32 */ VDPA_ATTR_DEV_MAX_VQ_SIZE, /* u16 */ + VDPA_ATTR_DEV_NET_CFG_MACADDR, /* binary */ + VDPA_ATTR_DEV_NET_STATUS, /* u8 */ + VDPA_ATTR_DEV_NET_CFG_MAX_VQP, /* u16 */ + VDPA_ATTR_DEV_NET_CFG_MTU, /* u16 */ + VDPA_ATTR_DEV_NET_CFG_SPEED, /* u16 */ + VDPA_ATTR_DEV_NET_CFG_DUPLEX, /* u16 */ + VDPA_ATTR_DEV_NET_CFG_RSS_MAX_KEY_LEN, /* u8 */ + VDPA_ATTR_DEV_NET_CFG_RSS_MAX_IT_LEN, /* u16 */ + VDPA_ATTR_DEV_NET_CFG_RSS_HASH_TYPES, /* u32 */ + /* new attributes must be added above here */ VDPA_ATTR_MAX, }; Or virtio uAPI and make netlink a transport? I prefer the latter since we will meet the similar issue at the hardware level when we want to create and provision virtio device dynamically. Thanks> >