kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Halil Pasic <pasic@linux.ibm.com>
To: David Hildenbrand <david@redhat.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>,
	Halil Pasic <pasic@linux.ibm.com>
Subject: Re: [PATCH v1] s390/virtio_ccw: don't allocate/assign airqs for non-existing queues
Date: Fri, 4 Apr 2025 17:39:10 +0200	[thread overview]
Message-ID: <20250404173910.6581706a.pasic@linux.ibm.com> (raw)
In-Reply-To: <6f548b8b-8c6e-4221-a5d5-8e7a9013f9c3@redhat.com>

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! 

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

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.

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

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.

> 
> Not perfect, but AFAIKS, not horrible.

It is like it is. QEMU does queue exist if the corresponding feature
is offered by the device, and that is what we have to live with.

Yes, I agree we should make the spec reflect reality!

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

Regards,
Halil

  reply	other threads:[~2025-04-04 15:39 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 [this message]
2025-04-04 16:49                     ` David Hildenbrand
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=20250404173910.6581706a.pasic@linux.ibm.com \
    --to=pasic@linux.ibm.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=david@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=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).