From: "Michael S. Tsirkin" <mst@redhat.com>
To: Jason Wang <jasowang@redhat.com>
Cc: Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
linux-kernel@vger.kernel.org,
virtualization@lists.linux-foundation.org,
Jiri Pirko <jiri@nvidia.com>, Bodong Wang <bodong@nvidia.com>
Subject: Re: [PATCH v1] virtio-pci: Fix legacy device flag setting error in probe
Date: Thu, 20 Jul 2023 13:14:41 -0400 [thread overview]
Message-ID: <20230720131423-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <CACGkMEv1b698NcpZHxpDoNokWH0gEs07D2eYSAjsiF1efhxORw@mail.gmail.com>
On Thu, Jul 20, 2023 at 10:27:04AM +0800, Jason Wang wrote:
> On Wed, Jul 19, 2023 at 11:46 PM Feng Liu <feliu@nvidia.com> wrote:
> >
> > The 'is_legacy' flag is used to differentiate between legacy vs modern
> > device. Currently, it is based on the value of vp_dev->ldev.ioaddr.
> > However, due to the shared memory of the union between struct
> > virtio_pci_legacy_device and struct virtio_pci_modern_device, when
> > virtio_pci_modern_probe modifies the content of struct
> > virtio_pci_modern_device, it affects the content of struct
> > virtio_pci_legacy_device, and ldev.ioaddr is no longer zero, causing
> > the 'is_legacy' flag to be set as true. To resolve issue, when legacy
> > device is probed, mark 'is_legacy' as true, when modern device is
> > probed, keep 'is_legacy' as false.
> >
> > Fixes: 4f0fc22534e3 ("virtio_pci: Optimize virtio_pci_device structure size")
> > Signed-off-by: Feng Liu <feliu@nvidia.com>
> > Reviewed-by: Parav Pandit <parav@nvidia.com>
> > Reviewed-by: Jiri Pirko <jiri@nvidia.com>
> > ---
> > drivers/virtio/virtio_pci_common.c | 2 --
> > drivers/virtio/virtio_pci_legacy.c | 1 +
> > 2 files changed, 1 insertion(+), 2 deletions(-)
> >
> > diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
> > index a6c86f916dbd..c2524a7207cf 100644
> > --- a/drivers/virtio/virtio_pci_common.c
> > +++ b/drivers/virtio/virtio_pci_common.c
> > @@ -557,8 +557,6 @@ static int virtio_pci_probe(struct pci_dev *pci_dev,
> >
> > pci_set_master(pci_dev);
> >
> > - vp_dev->is_legacy = vp_dev->ldev.ioaddr ? true : false;
> > -
> > rc = register_virtio_device(&vp_dev->vdev);
> > reg_dev = vp_dev;
> > if (rc)
> > diff --git a/drivers/virtio/virtio_pci_legacy.c b/drivers/virtio/virtio_pci_legacy.c
> > index 2257f1b3d8ae..d9cbb02b35a1 100644
> > --- a/drivers/virtio/virtio_pci_legacy.c
> > +++ b/drivers/virtio/virtio_pci_legacy.c
> > @@ -223,6 +223,7 @@ int virtio_pci_legacy_probe(struct virtio_pci_device *vp_dev)
> > vp_dev->config_vector = vp_config_vector;
> > vp_dev->setup_vq = setup_vq;
> > vp_dev->del_vq = del_vq;
> > + vp_dev->is_legacy = true;
>
> This seems break force_legacy for modern device:
>
> if (force_legacy) {
> rc = virtio_pci_legacy_probe(vp_dev);
> /* Also try modern mode if we can't map BAR0 (no IO space). */
> if (rc == -ENODEV || rc == -ENOMEM)
> rc = virtio_pci_modern_probe(vp_dev);
>
> Thanks
don't see the breakage here - can you explain a bit more?
> >
> > return 0;
> > }
> > --
> > 2.37.1 (Apple Git-137.1)
> >
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Jason Wang <jasowang@redhat.com>
Cc: Feng Liu <feliu@nvidia.com>,
virtualization@lists.linux-foundation.org,
linux-kernel@vger.kernel.org,
Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
Bodong Wang <bodong@nvidia.com>, Parav Pandit <parav@nvidia.com>,
Jiri Pirko <jiri@nvidia.com>
Subject: Re: [PATCH v1] virtio-pci: Fix legacy device flag setting error in probe
Date: Thu, 20 Jul 2023 13:14:41 -0400 [thread overview]
Message-ID: <20230720131423-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <CACGkMEv1b698NcpZHxpDoNokWH0gEs07D2eYSAjsiF1efhxORw@mail.gmail.com>
On Thu, Jul 20, 2023 at 10:27:04AM +0800, Jason Wang wrote:
> On Wed, Jul 19, 2023 at 11:46 PM Feng Liu <feliu@nvidia.com> wrote:
> >
> > The 'is_legacy' flag is used to differentiate between legacy vs modern
> > device. Currently, it is based on the value of vp_dev->ldev.ioaddr.
> > However, due to the shared memory of the union between struct
> > virtio_pci_legacy_device and struct virtio_pci_modern_device, when
> > virtio_pci_modern_probe modifies the content of struct
> > virtio_pci_modern_device, it affects the content of struct
> > virtio_pci_legacy_device, and ldev.ioaddr is no longer zero, causing
> > the 'is_legacy' flag to be set as true. To resolve issue, when legacy
> > device is probed, mark 'is_legacy' as true, when modern device is
> > probed, keep 'is_legacy' as false.
> >
> > Fixes: 4f0fc22534e3 ("virtio_pci: Optimize virtio_pci_device structure size")
> > Signed-off-by: Feng Liu <feliu@nvidia.com>
> > Reviewed-by: Parav Pandit <parav@nvidia.com>
> > Reviewed-by: Jiri Pirko <jiri@nvidia.com>
> > ---
> > drivers/virtio/virtio_pci_common.c | 2 --
> > drivers/virtio/virtio_pci_legacy.c | 1 +
> > 2 files changed, 1 insertion(+), 2 deletions(-)
> >
> > diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
> > index a6c86f916dbd..c2524a7207cf 100644
> > --- a/drivers/virtio/virtio_pci_common.c
> > +++ b/drivers/virtio/virtio_pci_common.c
> > @@ -557,8 +557,6 @@ static int virtio_pci_probe(struct pci_dev *pci_dev,
> >
> > pci_set_master(pci_dev);
> >
> > - vp_dev->is_legacy = vp_dev->ldev.ioaddr ? true : false;
> > -
> > rc = register_virtio_device(&vp_dev->vdev);
> > reg_dev = vp_dev;
> > if (rc)
> > diff --git a/drivers/virtio/virtio_pci_legacy.c b/drivers/virtio/virtio_pci_legacy.c
> > index 2257f1b3d8ae..d9cbb02b35a1 100644
> > --- a/drivers/virtio/virtio_pci_legacy.c
> > +++ b/drivers/virtio/virtio_pci_legacy.c
> > @@ -223,6 +223,7 @@ int virtio_pci_legacy_probe(struct virtio_pci_device *vp_dev)
> > vp_dev->config_vector = vp_config_vector;
> > vp_dev->setup_vq = setup_vq;
> > vp_dev->del_vq = del_vq;
> > + vp_dev->is_legacy = true;
>
> This seems break force_legacy for modern device:
>
> if (force_legacy) {
> rc = virtio_pci_legacy_probe(vp_dev);
> /* Also try modern mode if we can't map BAR0 (no IO space). */
> if (rc == -ENODEV || rc == -ENOMEM)
> rc = virtio_pci_modern_probe(vp_dev);
>
> Thanks
don't see the breakage here - can you explain a bit more?
> >
> > return 0;
> > }
> > --
> > 2.37.1 (Apple Git-137.1)
> >
next prev parent reply other threads:[~2023-07-20 17:14 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-19 15:45 [PATCH v1] virtio-pci: Fix legacy device flag setting error in probe Feng Liu via Virtualization
2023-07-19 15:45 ` Feng Liu
2023-07-20 2:06 ` Xuan Zhuo
2023-07-20 2:06 ` Xuan Zhuo
2023-07-20 2:27 ` Jason Wang
2023-07-20 2:27 ` Jason Wang
2023-07-20 2:46 ` Feng Liu via Virtualization
2023-07-20 2:46 ` Feng Liu
2023-07-20 16:43 ` Feng Liu via Virtualization
2023-07-20 16:43 ` Feng Liu
2023-07-20 17:14 ` Michael S. Tsirkin [this message]
2023-07-20 17:14 ` Michael S. Tsirkin
2023-07-24 13:14 ` Feng Liu via Virtualization
2023-07-24 13:14 ` Feng Liu
2023-07-25 3:41 ` Jason Wang
2023-07-25 3:41 ` Jason Wang
2023-07-25 4:18 ` Feng Liu via Virtualization
2023-07-25 4:18 ` Feng Liu
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=20230720131423-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=bodong@nvidia.com \
--cc=jasowang@redhat.com \
--cc=jiri@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=virtualization@lists.linux-foundation.org \
--cc=xuanzhuo@linux.alibaba.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.