Message ID | 20180821111313.27792-2-kraxel@redhat.com |
---|---|
State | New |
Headers | show |
Series | virtio-vga: fix reset | expand |
Hi On Tue, Aug 21, 2018 at 1:13 PM Gerd Hoffmann <kraxel@redhat.com> wrote: > > We must call the reset functions for both virtio-gpu > and vga to properly reset the combo device. > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > --- > include/hw/virtio/virtio-gpu.h | 1 + > hw/display/virtio-gpu.c | 2 +- > hw/display/virtio-vga.c | 6 +++++- > 3 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h > index d0321672f4..a718b7233f 100644 > --- a/include/hw/virtio/virtio-gpu.h > +++ b/include/hw/virtio/virtio-gpu.h > @@ -150,6 +150,7 @@ extern const GraphicHwOps virtio_gpu_ops; > } while (0) > > /* virtio-gpu.c */ > +void virtio_gpu_reset(VirtIODevice *vdev); > void virtio_gpu_ctrl_response(VirtIOGPU *g, > struct virtio_gpu_ctrl_command *cmd, > struct virtio_gpu_ctrl_hdr *resp, > diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c > index 3ddd29c0de..d6c9b02b86 100644 > --- a/hw/display/virtio-gpu.c > +++ b/hw/display/virtio-gpu.c > @@ -1289,7 +1289,7 @@ static void virtio_gpu_instance_init(Object *obj) > { > } > > -static void virtio_gpu_reset(VirtIODevice *vdev) > +void virtio_gpu_reset(VirtIODevice *vdev) > { > VirtIOGPU *g = VIRTIO_GPU(vdev); > struct virtio_gpu_simple_resource *res, *tmp; > diff --git a/hw/display/virtio-vga.c b/hw/display/virtio-vga.c > index 701d980872..50c72f26f4 100644 > --- a/hw/display/virtio-vga.c > +++ b/hw/display/virtio-vga.c > @@ -179,8 +179,12 @@ static void virtio_vga_realize(VirtIOPCIProxy *vpci_dev, Error **errp) > static void virtio_vga_reset(DeviceState *dev) > { > VirtIOVGA *vvga = VIRTIO_VGA(dev); > - vvga->vdev.enable = 0; > > + /* reset virtio-gpu */ > + virtio_gpu_reset(VIRTIO_DEVICE(&vvga->vdev)); > + > + /* reset vga */ > + vga_common_reset(&vvga->vga); Ah, I only tested with vga_common_reset(). I was missing the virtio_gpu_reset() part. I assume you tested it? > vga_dirty_log_start(&vvga->vga); > } > > -- > 2.9.3 >
> > @@ -179,8 +179,12 @@ static void virtio_vga_realize(VirtIOPCIProxy *vpci_dev, Error **errp) > > static void virtio_vga_reset(DeviceState *dev) > > { > > VirtIOVGA *vvga = VIRTIO_VGA(dev); > > - vvga->vdev.enable = 0; > > > > + /* reset virtio-gpu */ > > + virtio_gpu_reset(VIRTIO_DEVICE(&vvga->vdev)); > > + > > + /* reset vga */ > > + vga_common_reset(&vvga->vga); > > Ah, I only tested with vga_common_reset(). I was missing the > virtio_gpu_reset() part. /me too (at least back then when discussing -rc4), took me some debugging to figure ... > I assume you tested it? Sure. cheers, Gerd
diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h index d0321672f4..a718b7233f 100644 --- a/include/hw/virtio/virtio-gpu.h +++ b/include/hw/virtio/virtio-gpu.h @@ -150,6 +150,7 @@ extern const GraphicHwOps virtio_gpu_ops; } while (0) /* virtio-gpu.c */ +void virtio_gpu_reset(VirtIODevice *vdev); void virtio_gpu_ctrl_response(VirtIOGPU *g, struct virtio_gpu_ctrl_command *cmd, struct virtio_gpu_ctrl_hdr *resp, diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 3ddd29c0de..d6c9b02b86 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -1289,7 +1289,7 @@ static void virtio_gpu_instance_init(Object *obj) { } -static void virtio_gpu_reset(VirtIODevice *vdev) +void virtio_gpu_reset(VirtIODevice *vdev) { VirtIOGPU *g = VIRTIO_GPU(vdev); struct virtio_gpu_simple_resource *res, *tmp; diff --git a/hw/display/virtio-vga.c b/hw/display/virtio-vga.c index 701d980872..50c72f26f4 100644 --- a/hw/display/virtio-vga.c +++ b/hw/display/virtio-vga.c @@ -179,8 +179,12 @@ static void virtio_vga_realize(VirtIOPCIProxy *vpci_dev, Error **errp) static void virtio_vga_reset(DeviceState *dev) { VirtIOVGA *vvga = VIRTIO_VGA(dev); - vvga->vdev.enable = 0; + /* reset virtio-gpu */ + virtio_gpu_reset(VIRTIO_DEVICE(&vvga->vdev)); + + /* reset vga */ + vga_common_reset(&vvga->vga); vga_dirty_log_start(&vvga->vga); }
We must call the reset functions for both virtio-gpu and vga to properly reset the combo device. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- include/hw/virtio/virtio-gpu.h | 1 + hw/display/virtio-gpu.c | 2 +- hw/display/virtio-vga.c | 6 +++++- 3 files changed, 7 insertions(+), 2 deletions(-)