All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: Parav Pandit <parav@nvidia.com>,
	"virtualization@lists.linux-foundation.org"
	<virtualization@lists.linux-foundation.org>
Cc: Eli Cohen <elic@nvidia.com>, "mst@redhat.com" <mst@redhat.com>
Subject: Re: [PATCH linux-next v3 2/6] vdpa: Introduce query of device config layout
Date: Thu, 1 Jul 2021 15:43:27 +0800	[thread overview]
Message-ID: <da0c4e7f-8b59-51ed-f694-04fe5a9ed0b9@redhat.com> (raw)
In-Reply-To: <PH0PR12MB5481AC0B0D9D0AC3A62A5EB1DC009@PH0PR12MB5481.namprd12.prod.outlook.com>


在 2021/7/1 下午3:00, Parav Pandit 写道:
>> From: Jason Wang <jasowang@redhat.com>
>> Sent: Thursday, July 1, 2021 9:04 AM
>
>>>> Just to clarify, if I understand this correctly, with the individual
>>>> attribute, there's no need for the bit like xxx_is_valid?
>>> xxx_is_valid is not present in the get calls.
>>> It is also not present in UAPI set calls.
>>> It is not a UAPI.
>>> It is an internal between vdpa.c and vendor driver to tell which fields to use
>> as there are optional.
>>> If we want to get rid of those valid flags below code will move to vendor
>> driver where we pass nl_attr, during device add callback.
>>>
>>> +	if (nl_attrs[VDPA_ATTR_DEV_NET_CFG_MACADDR]) {
>>> +		macaddr =
>> nla_data(nl_attrs[VDPA_ATTR_DEV_NET_CFG_MACADDR]);
>>> +		memcpy(config.net.mac, macaddr, sizeof(config.net.mac));
>>> +		config.net_mask.mac_valid = true;
>>> +	}
>>> +	if (nl_attrs[VDPA_ATTR_DEV_NET_CFG_MTU]) {
>>> +		config.net.mtu =
>>> +
>> 	nla_get_u16(nl_attrs[VDPA_ATTR_DEV_NET_CFG_MTU]);
>>> +		config.net_mask.mtu_valid = true;
>>> +	}
>>
>> Have a hard thought on this. I still think re-invent (duplicate) the virtio-net
>> config filed is not a good choice (e.g for block we need to duplicate more
>> than 20 attributes).
> We are re-inventing by defining a new structure below.


Actually it depends on what attributes is required for building the config.

We can simply reuse the existing virtio_net_config, if most of the 
fields are required.

struct virtio_net_config_set {
         __virtio64 features;
         union {
             struct virtio_net_config;
             __virtio64 reserved[64];
         }
};

If only few of the is required, we can just pick them and use another 
structure.

Actually, I think just pass the whole config with the device_features 
during device creation is a good choice that can simplify a lot of things.

We can define what is needed and ignore the others in the virtio spec. 
Then there's no need to worry about any other things. vDPA core can just 
do santiy test like checking size vs features.


> Instead of doing them as individual netlink attributes, its lumped together in a struct of arbitrary length. :-)


I think not? We want to have a fixed length of the structure which never 
grow.

So the different is:

1) using netlink dedicated fields

if (nl_attrs[VDPA_ATTR_DEV_NET_CFG_MACADDR])

2) using netlink as transport

if (features & VIRTIO_NET_F_MAC)


>
> I notice several fields of the vduse device is setup via ioctl, which I think should be setup via this vdpa device add interface.
>
> Also we can always wrap above nl_attr code in a helper API so that drivers to not hand-code it.


Then it would be still more like 2) above (wrap netlink back to 
something like virtio_net_config)?


>
>> We may meet similar issue when provision VF/SF instance at the hardware
>> level. So I think we may need something in the virtio spec in the near future.
> Do you mean in a virtio vf and virtio sf?


Yes.


> If so, probably yes.
> Given that we have the ability to transport individual fields, we don't need to attach the U->K UAPI to a undefined and evolving structure.


I don't object but it needs to be done in virtio uAPI instead of 
netlink, since it's the device ABI.


>
>> So assuming we don't want a single attributes to be modified and we want to
>> let user to specify all the attributes at one time during creation.
>>
>> Maybe we can tweak virtio_net_config_set a little bit:
>>
>> struct virtio_net_config_set {
>>           __virtio64 features;
>>           __u8 mac[ETH_ALEN];
>>           __virtio16 max_virtqueue_pairs;
>>           __virtio16 mtu;
>>           __virtio16 reserved[62];
>> }
>>
>> So we have:
>>
>> - both features and config fields, we're self contained
>> - reserved fields which should be sufficient for the next 10 years, so we don't
>> need to care about the growing.
> This is the reverse of netlink which offers to not reserve any arbitrary size structure.


It's not arbitrary but with fixed length.


>   Though I agree that it may not grow.
>
>> Or actually it also allows per field modification.
>>
>> E.g if we don't specify VIRTIO_NET_F_MAC, it means mac field is invalid.
>> So did for qps and mtu.
>>
>> The advantage is that we can standardize this in the virtio spec which could
>> be used for SF/VF provisioning.
> Virtio spec can be still standardized about which fields of config space should be setup.
> To do so, we don't need to lump them in one structure.


Yes, agree.


>
>> For get, we probably need more work:
>>
>> struct virtio_net_config_get {
>>           __virtio64 features;
>>           union {
>>                   struct virtio_net_config;
>>                   __virtio64 reserved[16];
>>           }
>> }
>>
>> Or just follow how it is work today, simply pass the config plus the
>> device_features.
> If we go with individual attribute get and add both sorted out neatly, expandable.


It may only work for netlink (with some duplication with the existing 
virtio uAPI). If we can solve it at general virtio layer, it would be 
better. Otherwise we need to invent them again in the virtio spec.

E.g virito is expected to support something similar to SF, it requires 
the SF to be created/provisioned via the admin virtqueue in the PF.

In this case, we still need to define what is required it create a 
virtio "SF". Netlink can't be used in this context.

I think even for the current mlx5e vDPA it would be better, otherwise we 
may have:

vDPA tool -> [netlink specific vDPA attributes(1)] -> vDPA core -> [vDPA 
core specific VDPA attributes(2)] -> mlx5e_vDPA -> [mlx5e specific vDPA 
attributes(3)] -> mlx5e_core

We need to use a single and unified virtio structure in all the (1), (2) 
and (3).


>
> You already explained that there isn't one to one mapping of features to config fields for other device types too.


Yes, but features + config is self contained. That is to say, it's 
sufficient to explain a specific filed if we had device features.

Thanks


> Netlink already enables us to avoid non symmetric u64 reserved[16] in get and u16 reserved[16] in set.

_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

  reply	other threads:[~2021-07-01  7:43 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-16 19:11 [PATCH linux-next v3 0/6] vdpa: enable user to set mac, mtu Parav Pandit
2021-06-16 19:11 ` [PATCH linux-next v3 1/6] vdpa: Introduce and use vdpa device get, set config helpers Parav Pandit
2021-06-22  7:08   ` Jason Wang
2021-06-16 19:11 ` [PATCH linux-next v3 2/6] vdpa: Introduce query of device config layout Parav Pandit
2021-06-22  7:20   ` Jason Wang
2021-06-22 14:03     ` Parav Pandit
2021-06-23  4:08       ` Jason Wang
2021-06-23  4:22         ` Parav Pandit
2021-06-24  5:43           ` Jason Wang
2021-06-24  6:29             ` Parav Pandit
2021-06-24  7:05               ` Jason Wang
2021-06-24  7:59                 ` Parav Pandit
2021-06-25  3:28                   ` Jason Wang
2021-06-25  6:45                     ` Parav Pandit
2021-06-28  5:03                       ` Jason Wang
2021-06-28 10:56                         ` Parav Pandit
2021-06-29  3:52                           ` Jason Wang
2021-06-29  9:49                             ` Parav Pandit
2021-06-30  4:31                               ` Jason Wang
2021-06-30  6:03                                 ` Parav Pandit
2021-07-01  3:34                                   ` Jason Wang
2021-07-01  7:00                                     ` Parav Pandit
2021-07-01  7:43                                       ` Jason Wang [this message]
2021-07-02  6:04                                         ` Parav Pandit
2021-07-05  4:35                                           ` Jason Wang
2021-07-06 17:07                                             ` Parav Pandit
2021-07-07  4:03                                               ` Jason Wang
2021-06-28 22:39                         ` Michael S. Tsirkin
2021-06-29  3:41                           ` Jason Wang
2021-06-29 20:01                             ` Michael S. Tsirkin
2021-06-30  3:46                               ` Jason Wang
2021-06-16 19:11 ` [PATCH linux-next v3 3/6] vdpa: Enable user to set mac and mtu of vdpa device Parav Pandit
2021-06-22  7:43   ` Jason Wang
2021-06-22 14:09     ` Parav Pandit
2021-06-16 19:11 ` [PATCH linux-next v3 4/6] vdpa_sim_net: Enable user to set mac address and mtu Parav Pandit
2021-06-16 19:11 ` [PATCH linux-next v3 5/6] vdpa/mlx5: Support configuration of MAC Parav Pandit
2021-06-16 19:11 ` [PATCH linux-next v3 6/6] vdpa/mlx5: Forward only packets with allowed MAC address Parav Pandit
2021-08-05  9:57 ` [PATCH linux-next v3 0/6] vdpa: enable user to set mac, mtu Michael S. Tsirkin
2021-08-05 10:13   ` Parav Pandit via Virtualization
2021-08-05 12:05     ` Michael S. Tsirkin
2021-08-06  2:50   ` Jason Wang
2021-08-06  8:42     ` Michael S. Tsirkin
2021-08-06  8:55       ` Parav Pandit via Virtualization
2021-08-09  3:07         ` Jason Wang
2021-08-09  3:13           ` Parav Pandit via Virtualization
2021-08-09  3:29             ` Jason Wang
     [not found]           ` <20210809052121.GA209158@mtl-vdi-166.wap.labs.mlnx>
2021-08-09  5:42             ` Parav Pandit via Virtualization
     [not found]               ` <20210809055748.GA210406@mtl-vdi-166.wap.labs.mlnx>
2021-08-09  6:01                 ` Parav Pandit via Virtualization
     [not found]                   ` <20210809060746.GA210718@mtl-vdi-166.wap.labs.mlnx>
2021-08-09  6:10                     ` Parav Pandit via Virtualization
2021-08-09  7:05                       ` Jason Wang
2021-08-16 20:51                         ` Michael S. Tsirkin
2021-08-09  9:40         ` Michael S. Tsirkin
2021-08-09  9:51           ` Parav Pandit via Virtualization
2021-08-16 20:54             ` Michael S. Tsirkin
2021-08-18  3:14               ` Parav Pandit via Virtualization
2021-08-18  4:31                 ` Jason Wang
2021-08-18  4:36                   ` Parav Pandit via Virtualization
2021-08-19  4:18                     ` Jason Wang
2021-08-18 17:33                   ` Michael S. Tsirkin
2021-08-19  4:22                     ` Jason Wang
2021-08-19  5:23                       ` Parav Pandit via Virtualization
2021-08-19  7:15                         ` Jason Wang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=da0c4e7f-8b59-51ed-f694-04fe5a9ed0b9@redhat.com \
    --to=jasowang@redhat.com \
    --cc=elic@nvidia.com \
    --cc=mst@redhat.com \
    --cc=parav@nvidia.com \
    --cc=virtualization@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.