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: Tue, 29 Jun 2021 11:52:25 +0800 [thread overview]
Message-ID: <bf6ec662-b53d-174f-53e2-735589f83d3d@redhat.com> (raw)
In-Reply-To: <PH0PR12MB5481030671D848D951477571DC039@PH0PR12MB5481.namprd12.prod.outlook.com>
在 2021/6/28 下午6:56, Parav Pandit 写道:
>> From: Jason Wang <jasowang@redhat.com>
>> Sent: Monday, June 28, 2021 10:33 AM
>>
> [..]
>
>>>> I don't see why it needs typecast, virtio_net_config is also uABI,
>>>> you can deference the fields directly.
>>>>
>>> User wants set only the mac address of the config space. How do user
>> space tell this?
>>
>>
>> Good question, but we need first answer:
>>
>> "Do we allow userspace space to modify one specific field of all the config?"
>>
> Even if we restrict to specify config params at creation time, question still remains open how to pass, either as whole struct + side_based info or as individual fields.
> More below.
Right.
>
>>> Pass the whole virtio_net_config and inform via side channel?
>>
>> That could be a method.
> I prefer the method to pass individual fields which has the clean code approach and full flexibility.
> Clean code =
> 1. no typecasting based on length
> 2. self-describing fields, do not depends on feature bits parsing
> 3. proof against structure size increases in fully backward/forward compatibility without code changes
So I think I agree. But I think we'd better to that in the virito uAPI
(include/uapi/linux/virito_xxx.h)
>>
>>> Or vendor driver is expected to compare what fields changed from old
>> config space?
>>
>>
>> So I think we need solve them all, but netlink is probably the wrong
>> layer, we need to solve them at virtio level and let netlink a transport
>> for them virtio uAPI/ABI.
> In spirit of using the virtio UAPI structure, we creating other side band fields, that results into code that’s not common to netlink method.
I think maybe we can start from inventing new virtio uAPI and see if it
has some contradict with netlink. Or maybe you can give me some example?
> Ioctl() interface of QEMU/vhost didn't have any other choice with ioctl().
>
>> And we need to figure out if we want to allow the userspace to modify
>> the config after the device is created. If not, simply build the
>> virtio_net_config and pass it to the vDPA parent during device creation.
> I like this idea to pass fields at creation time.
>
>> If not, invent new uAPI at virtio level to passing the config fields.
>> Virtio or vDPA core can provide the library to compare the difference.
>>
>> My feeling is that, if we restrict to only support build the config
>> during the creation, it would simply a lot of things. And I didn't
>> notice a use case that we need to change the config fields in the middle
>> via the management API/tool.
>>
> Sure yes. Whichever config fields user wants to pass, user space passes it.
>
>>>> For virito_net_config, why not simply:
>>>>
>>>> len = ops->get_config_len();
>>>> config = kmalloc(len, GFP_KERNEL);
>>>> ops->get_config(vdev, 0, config, len);
>>>> nla_put(skb, VIRTIO_CONFIG, config, len);
>>> User space need to parse content based on this length as it can change in
>> future.
>>> Length telling how to typecast is want I want to avoid here.
>>
>> So there's no real difference, using xxx_is_valid, is just a implicit
>> length checking as what is done via config_len:
>>
>> if (a_is_valid) {
>> /* dump a */
>> } else if (b_is_valid) {
>> /* dump b */
>> }
>>
>> vs.
>>
>> if (length < offsetof(struct virtio_net_config, next field of a)) {
>> /* dump a*/
> + the feature parsing code, for each field.
>
>> }
>>
>> Actually, Qemu has solved the similar issues via the uAPI:
>>
>> https://git.qemu.org/?p=qemu.git;a=blob;f=hw/net/virtio-
>> net.c;h=bd7958b9f0eed2705e0d6a2feaeaefb5e63bd6a4;hb=HEAD#l92
>>
>> If the current uAPI is not sufficient, let's tweak it.
> I am unable to convince my self to build side bitmask for config fields, type casting code in spirit of using existing structure UAPI.
> This creates messy code for future.
Just a quick thought, how about simply something like:
struct virtio_net_config_build {
__u8 mac[ETH_ALEN];
__virtio16 max_virtqueue_pairs;
__virtio16 reserved[3];
};
It looks to we don't need the rest of fields in the virtio_net_config to
build the config since they are all hardware attributes.
So it looks self-contained and can be transported via netlink.
Thanks
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
next prev parent reply other threads:[~2021-06-29 3:52 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 [this message]
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
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=bf6ec662-b53d-174f-53e2-735589f83d3d@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 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).