virtualization.lists.linux-foundation.org archive mirror
 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: 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

  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).