diff mbox

[V4,3/3] virtio-blk: only clear VIRTIO_F_ANY_LAYOUT for legacy device

Message ID 1437990561-22134-4-git-send-email-jasowang@redhat.com
State New
Headers show

Commit Message

Jason Wang July 27, 2015, 9:49 a.m. UTC
Chapter 6.3 of spec said

"
Transitional devices MUST offer, and if offered by the device
transitional drivers MUST accept the following:

VIRTIO_F_ANY_LAYOUT (27)
"

So this patch only clear VIRTIO_F_LAYOUT for legacy device.

Cc: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-block@nongnu.org
Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 hw/block/virtio-blk.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Paolo Bonzini July 27, 2015, 10:30 a.m. UTC | #1
On 27/07/2015 11:49, Jason Wang wrote:
> So this patch only clear VIRTIO_F_LAYOUT for legacy device.
> 
> Cc: Stefan Hajnoczi <stefanha@redhat.com>
> Cc: Kevin Wolf <kwolf@redhat.com>
> Cc: qemu-block@nongnu.org
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
>  hw/block/virtio-blk.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
> index 9acbc3a..1d3f26c 100644
> --- a/hw/block/virtio-blk.c
> +++ b/hw/block/virtio-blk.c
> @@ -731,7 +731,6 @@ static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features,
>      virtio_add_feature(&features, VIRTIO_BLK_F_GEOMETRY);
>      virtio_add_feature(&features, VIRTIO_BLK_F_TOPOLOGY);
>      virtio_add_feature(&features, VIRTIO_BLK_F_BLK_SIZE);
> -    virtio_clear_feature(&features, VIRTIO_F_ANY_LAYOUT);
>      if (__virtio_has_feature(features, VIRTIO_F_VERSION_1)) {
>          if (s->conf.scsi) {
>              error_setg(errp, "Virtio 1.0 does not support scsi passthrough!");
> @@ -739,6 +738,7 @@ static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features,
>          }
>          virtio_add_feature(&features, VIRTIO_F_ANY_LAYOUT);
>      } else {
> +        virtio_clear_feature(&features, VIRTIO_F_ANY_LAYOUT);
>          virtio_add_feature(&features, VIRTIO_BLK_F_SCSI);
>      }

This patch is unnecessary, since the feature is added back below under
"if (__virtio_has_feature(features, VIRTIO_F_VERSION_1))".

Paolo
Michael S. Tsirkin July 27, 2015, 11:22 a.m. UTC | #2
On Mon, Jul 27, 2015 at 12:30:19PM +0200, Paolo Bonzini wrote:
> 
> 
> On 27/07/2015 11:49, Jason Wang wrote:
> > So this patch only clear VIRTIO_F_LAYOUT for legacy device.
> > 
> > Cc: Stefan Hajnoczi <stefanha@redhat.com>
> > Cc: Kevin Wolf <kwolf@redhat.com>
> > Cc: qemu-block@nongnu.org
> > Signed-off-by: Jason Wang <jasowang@redhat.com>
> > ---
> >  hw/block/virtio-blk.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
> > index 9acbc3a..1d3f26c 100644
> > --- a/hw/block/virtio-blk.c
> > +++ b/hw/block/virtio-blk.c
> > @@ -731,7 +731,6 @@ static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features,
> >      virtio_add_feature(&features, VIRTIO_BLK_F_GEOMETRY);
> >      virtio_add_feature(&features, VIRTIO_BLK_F_TOPOLOGY);
> >      virtio_add_feature(&features, VIRTIO_BLK_F_BLK_SIZE);
> > -    virtio_clear_feature(&features, VIRTIO_F_ANY_LAYOUT);
> >      if (__virtio_has_feature(features, VIRTIO_F_VERSION_1)) {
> >          if (s->conf.scsi) {
> >              error_setg(errp, "Virtio 1.0 does not support scsi passthrough!");
> > @@ -739,6 +738,7 @@ static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features,
> >          }
> >          virtio_add_feature(&features, VIRTIO_F_ANY_LAYOUT);
> >      } else {
> > +        virtio_clear_feature(&features, VIRTIO_F_ANY_LAYOUT);
> >          virtio_add_feature(&features, VIRTIO_BLK_F_SCSI);
> >      }
> 
> This patch is unnecessary, since the feature is added back below under
> "if (__virtio_has_feature(features, VIRTIO_F_VERSION_1))".
> 
> Paolo

It's needed so we can apply
    virtio: set any_layout in virtio core
Paolo Bonzini July 27, 2015, 11:30 a.m. UTC | #3
On 27/07/2015 13:22, Michael S. Tsirkin wrote:
> > This patch is unnecessary, since the feature is added back below under
> > "if (__virtio_has_feature(features, VIRTIO_F_VERSION_1))".
> 
> It's needed so we can apply
>     virtio: set any_layout in virtio core

Ah, okay.

Paolo
Cornelia Huck July 27, 2015, 1:28 p.m. UTC | #4
On Mon, 27 Jul 2015 14:22:37 +0300
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> On Mon, Jul 27, 2015 at 12:30:19PM +0200, Paolo Bonzini wrote:
> > 
> > 
> > On 27/07/2015 11:49, Jason Wang wrote:
> > > So this patch only clear VIRTIO_F_LAYOUT for legacy device.
> > > 
> > > Cc: Stefan Hajnoczi <stefanha@redhat.com>
> > > Cc: Kevin Wolf <kwolf@redhat.com>
> > > Cc: qemu-block@nongnu.org
> > > Signed-off-by: Jason Wang <jasowang@redhat.com>
> > > ---
> > >  hw/block/virtio-blk.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
> > > index 9acbc3a..1d3f26c 100644
> > > --- a/hw/block/virtio-blk.c
> > > +++ b/hw/block/virtio-blk.c
> > > @@ -731,7 +731,6 @@ static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features,
> > >      virtio_add_feature(&features, VIRTIO_BLK_F_GEOMETRY);
> > >      virtio_add_feature(&features, VIRTIO_BLK_F_TOPOLOGY);
> > >      virtio_add_feature(&features, VIRTIO_BLK_F_BLK_SIZE);
> > > -    virtio_clear_feature(&features, VIRTIO_F_ANY_LAYOUT);
> > >      if (__virtio_has_feature(features, VIRTIO_F_VERSION_1)) {
> > >          if (s->conf.scsi) {
> > >              error_setg(errp, "Virtio 1.0 does not support scsi passthrough!");
> > > @@ -739,6 +738,7 @@ static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features,
> > >          }
> > >          virtio_add_feature(&features, VIRTIO_F_ANY_LAYOUT);
> > >      } else {
> > > +        virtio_clear_feature(&features, VIRTIO_F_ANY_LAYOUT);
> > >          virtio_add_feature(&features, VIRTIO_BLK_F_SCSI);
> > >      }
> > 
> > This patch is unnecessary, since the feature is added back below under
> > "if (__virtio_has_feature(features, VIRTIO_F_VERSION_1))".
> > 
> > Paolo
> 
> It's needed so we can apply
>     virtio: set any_layout in virtio core

So what's the plan on all those virtio feature patches? It's hard to
keep track about what is based upon what, and what the end result looks
like. I don't have a good feeling about doing this that late in the 2.4
cycle.
Michael S. Tsirkin July 27, 2015, 3:27 p.m. UTC | #5
On Mon, Jul 27, 2015 at 03:28:51PM +0200, Cornelia Huck wrote:
> On Mon, 27 Jul 2015 14:22:37 +0300
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
> 
> > On Mon, Jul 27, 2015 at 12:30:19PM +0200, Paolo Bonzini wrote:
> > > 
> > > 
> > > On 27/07/2015 11:49, Jason Wang wrote:
> > > > So this patch only clear VIRTIO_F_LAYOUT for legacy device.
> > > > 
> > > > Cc: Stefan Hajnoczi <stefanha@redhat.com>
> > > > Cc: Kevin Wolf <kwolf@redhat.com>
> > > > Cc: qemu-block@nongnu.org
> > > > Signed-off-by: Jason Wang <jasowang@redhat.com>
> > > > ---
> > > >  hw/block/virtio-blk.c | 2 +-
> > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > > 
> > > > diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
> > > > index 9acbc3a..1d3f26c 100644
> > > > --- a/hw/block/virtio-blk.c
> > > > +++ b/hw/block/virtio-blk.c
> > > > @@ -731,7 +731,6 @@ static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features,
> > > >      virtio_add_feature(&features, VIRTIO_BLK_F_GEOMETRY);
> > > >      virtio_add_feature(&features, VIRTIO_BLK_F_TOPOLOGY);
> > > >      virtio_add_feature(&features, VIRTIO_BLK_F_BLK_SIZE);
> > > > -    virtio_clear_feature(&features, VIRTIO_F_ANY_LAYOUT);
> > > >      if (__virtio_has_feature(features, VIRTIO_F_VERSION_1)) {
> > > >          if (s->conf.scsi) {
> > > >              error_setg(errp, "Virtio 1.0 does not support scsi passthrough!");
> > > > @@ -739,6 +738,7 @@ static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features,
> > > >          }
> > > >          virtio_add_feature(&features, VIRTIO_F_ANY_LAYOUT);
> > > >      } else {
> > > > +        virtio_clear_feature(&features, VIRTIO_F_ANY_LAYOUT);
> > > >          virtio_add_feature(&features, VIRTIO_BLK_F_SCSI);
> > > >      }
> > > 
> > > This patch is unnecessary, since the feature is added back below under
> > > "if (__virtio_has_feature(features, VIRTIO_F_VERSION_1))".
> > > 
> > > Paolo
> > 
> > It's needed so we can apply
> >     virtio: set any_layout in virtio core
> 
> So what's the plan on all those virtio feature patches? It's hard to
> keep track about what is based upon what, and what the end result looks
> like.

I pushed everything out to my pci branch, pls take a look.
This is what I have:

b787b35 acpi: fix pvpanic device is not shown in ui
49009db hw/acpi/ich9: clean up stale comment about KVM not supporting SMM
e513e9c hw/acpi/ich9: clear smi_en on reset
c9b11f9 virtio-blk: only clear VIRTIO_F_ANY_LAYOUT for legacy device
efb8206 virtio-blk: fail get_features when both scsi and 1.0 were set
9d5b731 virtio: get_features() can fail
2746269 virtio-pci: fix memory MR cleanup for modern
09999a5 virtio: set any_layout in virtio core
cd4bfbb virtio-9p: fix any_layout
7882080 virtio-serial: fix ANY_LAYOUT
5f45607 virtio: hide legacy features from modern guests


> I don't have a good feeling about doing this that late in the 2.4
> cycle.

Well there will always be bugs. Given modern is disabled by default,
even if more bugs surface after release it's not the end of the
world.
diff mbox

Patch

diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index 9acbc3a..1d3f26c 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -731,7 +731,6 @@  static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features,
     virtio_add_feature(&features, VIRTIO_BLK_F_GEOMETRY);
     virtio_add_feature(&features, VIRTIO_BLK_F_TOPOLOGY);
     virtio_add_feature(&features, VIRTIO_BLK_F_BLK_SIZE);
-    virtio_clear_feature(&features, VIRTIO_F_ANY_LAYOUT);
     if (__virtio_has_feature(features, VIRTIO_F_VERSION_1)) {
         if (s->conf.scsi) {
             error_setg(errp, "Virtio 1.0 does not support scsi passthrough!");
@@ -739,6 +738,7 @@  static uint64_t virtio_blk_get_features(VirtIODevice *vdev, uint64_t features,
         }
         virtio_add_feature(&features, VIRTIO_F_ANY_LAYOUT);
     } else {
+        virtio_clear_feature(&features, VIRTIO_F_ANY_LAYOUT);
         virtio_add_feature(&features, VIRTIO_BLK_F_SCSI);
     }