netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Si-Wei Liu <si-wei.liu@oracle.com>
To: Jason Wang <jasowang@redhat.com>,
	"Zhu, Lingshan" <lingshan.zhu@intel.com>,
	Parav Pandit <parav@nvidia.com>,
	"mst@redhat.com" <mst@redhat.com>, Eli Cohen <elic@nvidia.com>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"xieyongji@bytedance.com" <xieyongji@bytedance.com>,
	"gautam.dawar@amd.com" <gautam.dawar@amd.com>,
	"virtualization@lists.linux-foundation.org" 
	<virtualization@lists.linux-foundation.org>
Subject: Re: [PATCH V3 4/6] vDPA: !FEATURES_OK should not block querying device config space
Date: Thu, 28 Jul 2022 00:08:53 -0700	[thread overview]
Message-ID: <f3fd203d-a3ad-4c36-ddbc-01f061f4f99e@oracle.com> (raw)
In-Reply-To: <c8bd5396-84f2-e782-79d7-f493aca95781@redhat.com>



On 7/27/2022 7:06 PM, Jason Wang wrote:
>
> 在 2022/7/28 08:56, Si-Wei Liu 写道:
>>
>>
>> On 7/27/2022 4:47 AM, Zhu, Lingshan wrote:
>>>
>>>
>>> On 7/27/2022 5:43 PM, Si-Wei Liu wrote:
>>>> Sorry to chime in late in the game. For some reason I couldn't get 
>>>> to most emails for this discussion (I only subscribed to the 
>>>> virtualization list), while I was taking off amongst the past few 
>>>> weeks.
>>>>
>>>> It looks to me this patch is incomplete. Noted down the way in 
>>>> vdpa_dev_net_config_fill(), we have the following:
>>>>          features = vdev->config->get_driver_features(vdev);
>>>>          if (nla_put_u64_64bit(msg, 
>>>> VDPA_ATTR_DEV_NEGOTIATED_FEATURES, features,
>>>>                                VDPA_ATTR_PAD))
>>>>                  return -EMSGSIZE;
>>>>
>>>> Making call to .get_driver_features() doesn't make sense when 
>>>> feature negotiation isn't complete. Neither should present 
>>>> negotiated_features to userspace before negotiation is done.
>>>>
>>>> Similarly, max_vqp through vdpa_dev_net_mq_config_fill() probably 
>>>> should not show before negotiation is done - it depends on driver 
>>>> features negotiated.
>>> I have another patch in this series introduces device_features and 
>>> will report device_features to the userspace even features 
>>> negotiation not done. Because the spec says we should allow driver 
>>> access the config space before FEATURES_OK.
>> The config space can be accessed by guest before features_ok doesn't 
>> necessarily mean the value is valid. 
>
>
> It's valid as long as the device offers the feature:
>
> "The device MUST allow reading of any device-specific configuration 
> field before FEATURES_OK is set by the driver. This includes fields 
> which are conditional on feature bits, as long as those feature bits 
> are offered by the device."
I guess this statement only conveys that the field in config space can 
be read before FEATURES_OK is set, though it does not *explicitly* 
states the validity of field.

And looking at:

"The mac address field always exists (though is only valid if 
VIRTIO_NET_F_MAC is set), and status only exists if VIRTIO_NET_F_STATUS 
is set."

It appears to me there's a border line set between "exist" and "valid". 
If I understand the spec wording correctly, a spec-conforming device 
implementation may or may not offer valid status value in the config 
space when VIRTIO_NET_F_STATUS is offered, but before the feature is 
negotiated. On the other hand, config space should contain valid mac 
address the moment VIRTIO_NET_F_MAC feature is offered, regardless being 
negotiated or not. By that, there seems to be leeway for the device 
implementation to decide when config space field may become valid, 
though for most of QEMU's software virtio devices, valid value is 
present to config space the very first moment when feature is offered.

"If the VIRTIO_NET_F_MAC feature bit is set, the configuration space mac 
entry indicates the “physical” address of the network card, otherwise 
the driver would typically generate a random local MAC address."
"If the VIRTIO_NET_F_STATUS feature bit is negotiated, the link status 
comes from the bottom bit of status. Otherwise, the driver assumes it’s 
active."

And also there are special cases where the read of specific 
configuration space field MUST be deferred to until FEATURES_OK is set:

"If the VIRTIO_BLK_F_CONFIG_WCE feature is negotiated, the cache mode 
can be read or set through the writeback field. 0 corresponds to a 
writethrough cache, 1 to a writeback cache11. The cache mode after reset 
can be either writeback or writethrough. The actual mode can be 
determined by reading writeback after feature negotiation."
"The driver MUST NOT read writeback before setting the FEATURES_OK 
device status bit."
"If VIRTIO_BLK_F_CONFIG_WCE is negotiated but VIRTIO_BLK_F_FLUSH is not, 
the device MUST initialize writeback to 0."

Since the spec doesn't explicitly mandate the validity of each config 
space field when feature of concern is offered, to be safer we'd have to 
live with odd device implementation. I know for sure QEMU software 
devices won't for 99% of these cases, but that's not what is currently 
defined in the spec.

>
>
>> You may want to double check with Michael for what he quoted earlier:
>>> Nope:
>>>
>>> 2.5.1  Driver Requirements: Device Configuration Space
>>>
>>> ...
>>>
>>> For optional configuration space fields, the driver MUST check that 
>>> the corresponding feature is offered
>>> before accessing that part of the configuration space.
>>
>> and how many driver bugs taking wrong assumption of the validity of 
>> config space field without features_ok. I am not sure what use case 
>> you want to expose config resister values for before features_ok, if 
>> it's mostly for live migration I guess it's probably heading a wrong 
>> direction.
>
>
> I guess it's not for migration. 
Then what's the other possible use case than live migration, were to 
expose config space values? Troubleshooting config space discrepancy 
between vDPA and the emulated virtio device in userspace? Or tracking 
changes in config space across feature negotiation, but for what? It'd 
be beneficial to the interface design if the specific use case can be 
clearly described...


> For migration, a provision with the correct features/capability would 
> be sufficient.
Right, that's what I thought too. It doesn't need to expose config space 
values, simply exporting all attributes for vdpa device creation will do 
the work.

-Siwei

>
> Thanks
>
>
>>
>>
>>>>
>>>>
>>>> Last but not the least, this "vdpa dev config" command was not 
>>>> designed to display the real config space register values in the 
>>>> first place. Quoting the vdpa-dev(8) man page:
>>>>
>>>>> vdpa dev config show - Show configuration of specific device or 
>>>>> all devices.
>>>>> DEV - specifies the vdpa device to show its configuration. If this 
>>>>> argument is omitted all devices configuration is listed.
>>>> It doesn't say anything about configuration space or register 
>>>> values in config space. As long as it can convey the config 
>>>> attribute when instantiating vDPA device instance, and more 
>>>> importantly, the config can be easily imported from or exported to 
>>>> userspace tools when trying to reconstruct vdpa instance intact on 
>>>> destination host for live migration, IMHO in my personal 
>>>> interpretation it doesn't matter what the config space may present. 
>>>> It may be worth while adding a new debug command to expose the real 
>>>> register value, but that's another story.
>>> I am not sure getting your points. vDPA now reports device feature 
>>> bits(device_features) and negotiated feature bits(driver_features), 
>>> and yes, the drivers features can be a subset of the device 
>>> features; and the vDPA device features can be a subset of the 
>>> management device features.
>> What I said is after unblocking the conditional check, you'd have to 
>> handle the case for each of the vdpa attribute when feature 
>> negotiation is not yet done: basically the register values you got 
>> from config space via the vdpa_get_config_unlocked() call is not 
>> considered to be valid before features_ok (per-spec). Although in 
>> some case you may get sane value, such behavior is generally 
>> undefined. If you desire to show just the device_features alone 
>> without any config space field, which the device had advertised 
>> *before feature negotiation is complete*, that'll be fine. But looks 
>> to me this is not how patch has been implemented. Probably need some 
>> more work?
>>
>> Regards,
>> -Siwei
>>
>>>>
>>>> Having said, please consider to drop the Fixes tag, as appears to 
>>>> me you're proposing a new feature rather than fixing a real issue.
>>> it's a new feature to report the device feature bits than only 
>>> negotiated features, however this patch is a must, or it will block 
>>> the device feature bits reporting. but I agree, the fix tag is not a 
>>> must.
>>>>
>>>> Thanks,
>>>> -Siwei
>>>>
>>>> On 7/1/2022 3:12 PM, Parav Pandit via Virtualization wrote:
>>>>>> From: Zhu Lingshan<lingshan.zhu@intel.com>
>>>>>> Sent: Friday, July 1, 2022 9:28 AM
>>>>>>
>>>>>> Users may want to query the config space of a vDPA device, to 
>>>>>> choose a
>>>>>> appropriate one for a certain guest. This means the users need to 
>>>>>> read the
>>>>>> config space before FEATURES_OK, and the existence of config space
>>>>>> contents does not depend on FEATURES_OK.
>>>>>>
>>>>>> The spec says:
>>>>>> The device MUST allow reading of any device-specific 
>>>>>> configuration field
>>>>>> before FEATURES_OK is set by the driver. This includes fields 
>>>>>> which are
>>>>>> conditional on feature bits, as long as those feature bits are 
>>>>>> offered by the
>>>>>> device.
>>>>>>
>>>>>> Fixes: 30ef7a8ac8a07 (vdpa: Read device configuration only if 
>>>>>> FEATURES_OK)
>>>>> Fix is fine, but fixes tag needs correction described below.
>>>>>
>>>>> Above commit id is 13 letters should be 12.
>>>>> And
>>>>> It should be in format
>>>>> Fixes: 30ef7a8ac8a0 ("vdpa: Read device configuration only if 
>>>>> FEATURES_OK")
>>>>>
>>>>> Please use checkpatch.pl script before posting the patches to 
>>>>> catch these errors.
>>>>> There is a bot that looks at the fixes tag and identifies the 
>>>>> right kernel version to apply this fix.
>>>>>
>>>>>> Signed-off-by: Zhu Lingshan<lingshan.zhu@intel.com>
>>>>>> ---
>>>>>>   drivers/vdpa/vdpa.c | 8 --------
>>>>>>   1 file changed, 8 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c index
>>>>>> 9b0e39b2f022..d76b22b2f7ae 100644
>>>>>> --- a/drivers/vdpa/vdpa.c
>>>>>> +++ b/drivers/vdpa/vdpa.c
>>>>>> @@ -851,17 +851,9 @@ vdpa_dev_config_fill(struct vdpa_device *vdev,
>>>>>> struct sk_buff *msg, u32 portid,  {
>>>>>>       u32 device_id;
>>>>>>       void *hdr;
>>>>>> -    u8 status;
>>>>>>       int err;
>>>>>>
>>>>>>       down_read(&vdev->cf_lock);
>>>>>> -    status = vdev->config->get_status(vdev);
>>>>>> -    if (!(status & VIRTIO_CONFIG_S_FEATURES_OK)) {
>>>>>> -        NL_SET_ERR_MSG_MOD(extack, "Features negotiation not
>>>>>> completed");
>>>>>> -        err = -EAGAIN;
>>>>>> -        goto out;
>>>>>> -    }
>>>>>> -
>>>>>>       hdr = genlmsg_put(msg, portid, seq, &vdpa_nl_family, flags,
>>>>>>                 VDPA_CMD_DEV_CONFIG_GET);
>>>>>>       if (!hdr) {
>>>>>> -- 
>>>>>> 2.31.1
>>>>> _______________________________________________
>>>>> Virtualization mailing list
>>>>> Virtualization@lists.linux-foundation.org
>>>>> https://urldefense.com/v3/__https://lists.linuxfoundation.org/mailman/listinfo/virtualization__;!!ACWV5N9M2RV99hQ!Pkwym7OAjoDucUqs2fAwchxqL8-BGd6wOl-51xcgB_yCNwPJ_cs8A1y-cYmrLTB4OBNsimnZuqJPcvQIl3g$ 
>>>>
>>>>
>>>
>>
>


  reply	other threads:[~2022-07-28  7:09 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-01 13:28 [PATCH V3 0/6] ifcvf/vDPA: support query device config space through netlink Zhu Lingshan
2022-07-01 13:28 ` [PATCH V3 1/6] vDPA/ifcvf: get_config_size should return a value no greater than dev implementation Zhu Lingshan
2022-07-04  4:39   ` Jason Wang
2022-07-08  6:44     ` Zhu, Lingshan
2022-07-13  5:44       ` Michael S. Tsirkin
2022-07-13  7:52         ` Zhu, Lingshan
2022-07-13  5:31   ` Michael S. Tsirkin
2022-07-13  7:48     ` Zhu, Lingshan
2022-07-01 13:28 ` [PATCH V3 2/6] vDPA/ifcvf: support userspace to query features and MQ of a management device Zhu Lingshan
2022-07-04  4:43   ` Jason Wang
2022-07-08  6:54     ` Zhu, Lingshan
2022-07-01 13:28 ` [PATCH V3 3/6] vDPA: allow userspace to query features of a vDPA device Zhu Lingshan
2022-07-01 22:02   ` Parav Pandit
2022-07-04  4:46     ` Jason Wang
2022-07-04 12:53       ` Parav Pandit
2022-07-05  7:59         ` Zhu, Lingshan
2022-07-05 11:56           ` Parav Pandit
2022-07-05 16:56             ` Zhu, Lingshan
2022-07-05 17:01               ` Parav Pandit
2022-07-06  2:25                 ` Zhu, Lingshan
2022-07-06  2:28                   ` Parav Pandit
2022-07-23 11:27                   ` Zhu, Lingshan
2022-07-24 15:23                     ` Parav Pandit
2022-07-27  8:15             ` Si-Wei Liu
2022-07-27 11:38               ` Zhu, Lingshan
2022-07-08  6:16     ` Zhu, Lingshan
2022-07-08 16:13       ` Parav Pandit
2022-07-11  2:18         ` Zhu, Lingshan
2022-07-01 13:28 ` [PATCH V3 4/6] vDPA: !FEATURES_OK should not block querying device config space Zhu Lingshan
2022-07-01 22:12   ` Parav Pandit
2022-07-08  6:22     ` Zhu, Lingshan
2022-07-13  5:23     ` Michael S. Tsirkin
2022-07-13  7:46       ` Zhu, Lingshan
     [not found]     ` <00889067-50ac-d2cd-675f-748f171e5c83@oracle.com>
     [not found]       ` <63242254-ba84-6810-dad8-34f900b97f2f@intel.com>
     [not found]         ` <8002554a-a77c-7b25-8f99-8d68248a741d@oracle.com>
2022-07-28  2:06           ` Jason Wang
2022-07-28  7:08             ` Si-Wei Liu [this message]
2022-07-28  7:36               ` Jason Wang
2022-07-28  7:44                 ` Zhu, Lingshan
     [not found]                 ` <2dfff5f3-3100-4a63-6da3-3e3d21ffb364@oracle.com>
2022-07-28 11:28                   ` spec clarification (was Re: [PATCH V3 4/6] vDPA: !FEATURES_OK should not block querying device config space) Michael S. Tsirkin
2022-07-28 11:35               ` [PATCH V3 4/6] vDPA: !FEATURES_OK should not block querying device config space Michael S. Tsirkin
2022-07-28 22:12                 ` Si-Wei Liu
     [not found]           ` <00e2e07e-1a2e-7af8-a060-cc9034e0d33f@intel.com>
     [not found]             ` <b58dba25-3258-d600-ea06-879094639852@oracle.com>
     [not found]               ` <c143e2da-208e-b046-9b8f-1780f75ed3e6@intel.com>
2022-07-29 20:55                 ` Si-Wei Liu
2022-08-01  4:44                   ` Jason Wang
2022-08-01 22:53                     ` Si-Wei Liu
2022-08-01 22:58                       ` Si-Wei Liu
2022-08-02  6:33                         ` Jason Wang
2022-08-03  1:26                           ` Si-Wei Liu
2022-08-03  2:30                             ` Zhu, Lingshan
2022-08-03 23:09                               ` Si-Wei Liu
2022-08-04  1:41                                 ` Zhu, Lingshan
2022-08-04  1:41                                 ` Zhu, Lingshan
2022-07-01 13:28 ` [PATCH V3 5/6] vDPA: answer num of queue pairs = 1 to userspace when VIRTIO_NET_F_MQ == 0 Zhu Lingshan
2022-07-01 22:07   ` Parav Pandit
2022-07-08  6:21     ` Zhu, Lingshan
2022-07-08 16:23       ` Parav Pandit
2022-07-11  2:29         ` Zhu, Lingshan
2022-07-12 16:48           ` Parav Pandit
2022-07-13  3:03             ` Zhu, Lingshan
2022-07-13  3:06               ` Parav Pandit
2022-07-13  3:45                 ` Zhu, Lingshan
2022-07-26 15:56                   ` Parav Pandit
2022-07-26 19:52                     ` Michael S. Tsirkin
2022-07-26 20:49                       ` Parav Pandit
2022-07-27  2:14                     ` Zhu, Lingshan
2022-07-27  2:17                       ` Parav Pandit
2022-07-27  2:53                         ` Zhu, Lingshan
2022-07-27  3:47                           ` Parav Pandit
2022-07-27  4:24                             ` Zhu, Lingshan
2022-07-27  6:01                             ` Michael S. Tsirkin
2022-07-27  6:25                               ` Zhu, Lingshan
2022-07-27  6:56                                 ` Jason Wang
2022-07-27  9:05                                   ` Michael S. Tsirkin
2022-07-27  6:54                               ` Jason Wang
2022-07-27  9:02                                 ` Michael S. Tsirkin
2022-07-27  9:50                                   ` Jason Wang
2022-07-27 15:45                                     ` Michael S. Tsirkin
2022-07-28  1:21                                       ` Jason Wang
2022-07-28  3:46                                         ` Zhu, Lingshan
2022-07-28  5:53                                           ` Jason Wang
2022-07-28  6:02                                             ` Zhu, Lingshan
2022-07-28  6:41                                             ` Michael S. Tsirkin
2022-08-01  4:50                                               ` Jason Wang
2022-07-27  7:50                               ` Si-Wei Liu
2022-07-27  9:01                                 ` Michael S. Tsirkin
2022-07-27 10:09                                   ` Si-Wei Liu
2022-07-27 11:54                                     ` Zhu, Lingshan
2022-07-28  1:41                                       ` Si-Wei Liu
2022-07-28  2:44                                         ` Zhu, Lingshan
2022-07-28 21:54                                           ` Si-Wei Liu
2022-07-29  2:07                                             ` Zhu, Lingshan
2022-07-27 15:48                                     ` Michael S. Tsirkin
2022-07-13  5:26     ` Michael S. Tsirkin
2022-07-13  7:47       ` Zhu, Lingshan
2022-07-26 15:54       ` Parav Pandit
2022-07-26 19:48         ` Michael S. Tsirkin
2022-07-26 20:53           ` Parav Pandit
2022-07-27  1:56             ` Zhu, Lingshan
2022-07-27  2:11             ` Zhu, Lingshan
2022-07-01 13:28 ` [PATCH V3 6/6] vDPA: fix 'cast to restricted le16' warnings in vdpa.c Zhu Lingshan
2022-07-01 22:18   ` Parav Pandit
2022-07-08  6:25     ` Zhu, Lingshan
2022-07-08 16:08       ` Parav Pandit
2022-07-29  8:53   ` Michael S. Tsirkin
2022-07-29  9:07     ` Zhu, Lingshan
2022-07-29  9:17       ` Michael S. Tsirkin
2022-07-29  9:20         ` Zhu, Lingshan
2022-07-29  9:23           ` Michael S. Tsirkin
2022-07-29  9:35             ` Zhu, Lingshan
2022-07-29  9:39               ` Michael S. Tsirkin
2022-07-29 10:01                 ` Zhu, Lingshan
2022-07-29 10:16                   ` Michael S. Tsirkin
2022-07-29 10:18                     ` Zhu, Lingshan
2022-08-01  4:33                 ` Jason Wang
2022-08-01  6:25                   ` Michael S. Tsirkin

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=f3fd203d-a3ad-4c36-ddbc-01f061f4f99e@oracle.com \
    --to=si-wei.liu@oracle.com \
    --cc=elic@nvidia.com \
    --cc=gautam.dawar@amd.com \
    --cc=jasowang@redhat.com \
    --cc=lingshan.zhu@intel.com \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=parav@nvidia.com \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=xieyongji@bytedance.com \
    /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).