From: David Hildenbrand <david@redhat.com>
To: Halil Pasic <pasic@linux.ibm.com>
Cc: linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org,
virtualization@lists.linux.dev, kvm@vger.kernel.org,
Chandra Merla <cmerla@redhat.com>,
Stable@vger.kernel.org, Cornelia Huck <cohuck@redhat.com>,
Thomas Huth <thuth@redhat.com>,
Eric Farman <farman@linux.ibm.com>,
Heiko Carstens <hca@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Sven Schnelle <svens@linux.ibm.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Wei Wang <wei.w.wang@intel.com>
Subject: Re: [PATCH v1] s390/virtio_ccw: don't allocate/assign airqs for non-existing queues
Date: Fri, 4 Apr 2025 18:49:07 +0200 [thread overview]
Message-ID: <b30a0ff7-e885-462d-92d4-53f15accd1c0@redhat.com> (raw)
In-Reply-To: <20250404173910.6581706a.pasic@linux.ibm.com>
On 04.04.25 17:39, Halil Pasic wrote:
> On Fri, 4 Apr 2025 16:17:14 +0200
> David Hildenbrand <david@redhat.com> wrote:
>
>>> It is offered. And this is precisely why I'm so keen on having a
>>> precise wording here.
>>
>> Yes, me too. The current phrasing in the spec is not clear.
>>
>> Linux similarly checks
>> virtio_has_feature()->virtio_check_driver_offered_feature().
>
> Careful, that is a *driver* offered and not a *device* offered!
Right, I was pointing at the usage of the term "offered".
virtio_check_driver_offered_feature(). (but was also confused about that
function)
virtio_has_feature() is clearer: "helper to determine if this device has
this feature."
The way it's currently implemented is that it's essentially "device has
this feature and we know about it (->feature_table)"
>
> We basically mandate that one can only check for a feature F with
> virtio_has_feature() such that it is either in drv->feature_table or in
> drv->feature_table_legacy.
>
> AFAICT *device_features* obtained via dev->config->get_features(dev)
> isn't even saved but is only used for binary and-ing it with the
> driver_features to obtain the negotiated features.
>
> That basically means that if I was, for the sake of fun do
>
> --- a/drivers/virtio/virtio_balloon.c
> +++ b/drivers/virtio/virtio_balloon.c
> @@ -1197,7 +1197,6 @@ static unsigned int features[] = {
> VIRTIO_BALLOON_F_MUST_TELL_HOST,
> VIRTIO_BALLOON_F_STATS_VQ,
> VIRTIO_BALLOON_F_DEFLATE_ON_OOM,
> - VIRTIO_BALLOON_F_FREE_PAGE_HINT,
> VIRTIO_BALLOON_F_PAGE_POISON,
> VIRTIO_BALLOON_F_REPORTING,
> };
>
> I would end up with virtio_check_driver_offered_feature() calling
> BUG().
>
Right.
> That basically means that Linux mandates implementing all previous
> features regardless whether does are supposed to be optional ones or
> not. Namely if you put the feature into drv->feature_table it will
> get negotiated.
>
> Which is not nice IMHO.
I think the validate() callbacks allows for fixing that up.
Like us unconditionally clearing VIRTIO_F_ACCESS_PLATFORM (I know,
that's a transport feature and a bit different for this reason).
... not that I think the current way of achieving that is nice :)
>
>>
>>>
>>> Usually for compatibility one needs negotiated. Because the feature
>>> negotiation is mostly about compatibility. I.e. the driver should be
>>> able to say, hey I don't know about that feature, and get compatible
>>> behavior. If for example VIRTIO_BALLOON_F_FREE_PAGE_HINT and
>>> VIRTIO_BALLOON_F_PAGE_REPORTING are both offered but only
>>> VIRTIO_BALLOON_F_PAGE_REPORTING is negotiated. That would make
>>> reporting_vq jump to +1 compared to the case where
>>> VIRTIO_BALLOON_F_FREE_PAGE_HINT is not offered. Which is IMHO no
>>> good, because for the features that the driver is going to reject in
>>> most of the cases it should not matter if it was offered or not.
>>
>> Yes. The key part is that we may only add new features to the tail of
>> our feature list; maybe we should document that as well.
>>
>> I agree that a driver that implements VIRTIO_BALLOON_F_PAGE_REPORTING
>> *must* be aware that VIRTIO_BALLOON_F_FREE_PAGE_HINT exists. So queue
>> existence is not about feature negotiation but about features being
>> offered from the device.
>>
>> ... which is a bit the same behavior as with fixed-assigned numbers a
>> bit. VIRTIO_BALLOON_F_PAGE_REPORTING was documented as "4" because
>> VIRTIO_BALLOON_F_FREE_PAGE_HINT was documented to be "3" -- IOW, it
>> already existed in the spec.
>
> I don't agree with the comparison. One obviously needs to avoid fatal
> collisions when extending the spec, and has to consider prior art.
Agreed. But IMHO it's similar to two out-of-spec driver starting to use
"queue index 5" in a fix-assigned world. It cannot work.
>
> But ideally not implemented or fenced optional features A should have no
> impact to implemented optional or not optional features B -- unless the
> features are actually interdependent, but then the spec would prohibit
> the combo of having B but not A. And IMHO exactly this would have been
> the advantage of fixed-assigned numbers: you may not care if the other
> queueues exist or not.
>
> Also like cloud-hypervisor has decided that they are going only to
> support VIRTIO_BALLOON_F_REPORTING some weird OS could in theory
> decide that they only care about VIRTIO_BALLOON_F_REPORTING. In that
> setting having to look at VIRTIO_BALLOON_F_STATS_VQ and
> VIRTIO_BALLOON_F_FREE_PAGE_HINT are offered is weird. But that is all water
> under the bridge. We have to respect what is out there in the field.
Yes, they would have to do the math based on offered features.
Definitely not nice, but as you say, that ship has sailed.
[...]
>>
>> (as Linux supports all these features, it's easy. A driver that only
>> supports some features has to calculate the queue index manually based
>> on the offered features)
>
> As I've tried to explain above, not implementing/accepting optional
> features and then implementing/accepting a newer feature is problematic
> with the current code. Supporting some features would work only as
> supporting all features up to X.
See above regarding validate().
Again, doesn't win a beauty contest ... I'll send an improved
virtio-spec update next week, thanks!
--
Cheers,
David / dhildenb
next prev parent reply other threads:[~2025-04-04 16:50 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-02 20:36 [PATCH v1] s390/virtio_ccw: don't allocate/assign airqs for non-existing queues David Hildenbrand
2025-04-03 9:44 ` Thomas Huth
2025-04-03 12:45 ` Cornelia Huck
2025-04-03 12:57 ` Michael S. Tsirkin
2025-04-03 13:12 ` Christian Borntraeger
2025-04-03 14:18 ` Halil Pasic
2025-04-03 14:28 ` David Hildenbrand
2025-04-04 4:36 ` Halil Pasic
2025-04-04 10:00 ` David Hildenbrand
2025-04-04 10:55 ` David Hildenbrand
2025-04-04 13:36 ` Halil Pasic
2025-04-04 13:48 ` David Hildenbrand
2025-04-04 14:00 ` Halil Pasic
2025-04-04 14:17 ` David Hildenbrand
2025-04-04 15:39 ` Halil Pasic
2025-04-04 16:49 ` David Hildenbrand [this message]
2025-04-04 17:36 ` David Hildenbrand
2025-04-07 7:52 ` Michael S. Tsirkin
2025-04-07 8:17 ` David Hildenbrand
2025-04-07 8:34 ` Michael S. Tsirkin
2025-04-07 8:44 ` David Hildenbrand
2025-04-07 8:49 ` Michael S. Tsirkin
2025-04-07 8:54 ` David Hildenbrand
2025-04-07 8:58 ` Michael S. Tsirkin
2025-04-07 9:11 ` David Hildenbrand
2025-04-07 9:13 ` David Hildenbrand
2025-04-07 13:13 ` David Hildenbrand
2025-04-07 17:39 ` Daniel Verkamp
2025-04-07 18:47 ` David Hildenbrand
2025-04-07 21:09 ` Daniel Verkamp
2025-04-09 11:02 ` David Hildenbrand
2025-04-07 21:20 ` Michael S. Tsirkin
2025-04-09 10:46 ` David Hildenbrand
2025-04-09 10:56 ` Michael S. Tsirkin
2025-04-09 11:12 ` David Hildenbrand
2025-04-09 12:07 ` Michael S. Tsirkin
2025-04-09 12:24 ` David Hildenbrand
2025-04-09 16:08 ` Michael S. Tsirkin
2025-04-07 9:37 ` Michael S. Tsirkin
2025-04-07 13:12 ` Halil Pasic
2025-04-07 13:17 ` David Hildenbrand
2025-04-07 13:28 ` Cornelia Huck
2025-04-07 13:32 ` Michael S. Tsirkin
2025-04-07 17:26 ` Halil Pasic
2025-04-07 8:38 ` David Hildenbrand
2025-04-07 8:44 ` Michael S. Tsirkin
2025-04-07 8:50 ` David Hildenbrand
2025-04-07 9:22 ` David Hildenbrand
2025-04-07 8:41 ` Michael S. Tsirkin
2025-04-06 18:42 ` Michael S. Tsirkin
2025-04-07 7:18 ` David Hildenbrand
2025-04-07 8:54 ` Michael S. Tsirkin
2025-04-07 9:08 ` David Hildenbrand
2025-04-06 15:40 ` Michael S. Tsirkin
2025-04-03 14:35 ` Michael S. Tsirkin
2025-04-04 4:02 ` Halil Pasic
2025-04-04 5:33 ` Michael S. Tsirkin
2025-04-04 12:05 ` Halil Pasic
2025-04-10 18:44 ` David Hildenbrand
2025-04-11 11:11 ` Christian Borntraeger
2025-04-11 12:42 ` Heiko Carstens
2025-04-11 12:47 ` Christian Borntraeger
2025-04-11 13:34 ` David Hildenbrand
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=b30a0ff7-e885-462d-92d4-53f15accd1c0@redhat.com \
--to=david@redhat.com \
--cc=Stable@vger.kernel.org \
--cc=agordeev@linux.ibm.com \
--cc=borntraeger@linux.ibm.com \
--cc=cmerla@redhat.com \
--cc=cohuck@redhat.com \
--cc=farman@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=mst@redhat.com \
--cc=pasic@linux.ibm.com \
--cc=svens@linux.ibm.com \
--cc=thuth@redhat.com \
--cc=virtualization@lists.linux.dev \
--cc=wei.w.wang@intel.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).