Message ID | a30f50d543182914e83cba5501f615a8ded2b858.1505225353.git.alifm@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 12.09.2017 16:26, Farhan Ali wrote: > Wire up the virtio-gpu device for the CCW bus. The virtio-gpu > is a virtio-1 device, so disable revision 0. > > Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com> > Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> > --- > hw/s390x/virtio-ccw.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ > hw/s390x/virtio-ccw.h | 10 ++++++++++ > 2 files changed, 64 insertions(+) > > diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c > index b1976fd..3078bf0 100644 > --- a/hw/s390x/virtio-ccw.c > +++ b/hw/s390x/virtio-ccw.c > @@ -1007,6 +1007,20 @@ static void virtio_ccw_crypto_realize(VirtioCcwDevice *ccw_dev, Error **errp) > NULL); > } > > +static void virtio_ccw_gpu_realize(VirtioCcwDevice *ccw_dev, Error **errp) > +{ > + VirtIOGPUCcw *dev = VIRTIO_GPU_CCW(ccw_dev); > + DeviceState *vdev = DEVICE(&dev->vdev); > + Error *err = NULL; > + > + qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus)); > + object_property_set_bool(OBJECT(vdev), true, "realized", &err); > + if (err) { > + error_propagate(errp, err); > + return; > + } You can call error_propagate() unconditionally, it can deal with !err. > +} > + > /* DeviceState to VirtioCcwDevice. Note: used on datapath, > * be careful and test performance if you change this. > */ > @@ -1616,6 +1630,45 @@ static const TypeInfo virtio_ccw_crypto = { > .class_init = virtio_ccw_crypto_class_init, > }; > > +static Property virtio_ccw_gpu_properties[] = { > + DEFINE_PROP_BIT("ioeventfd", VirtioCcwDevice, flags, > + VIRTIO_CCW_FLAG_USE_IOEVENTFD_BIT, true), > + DEFINE_PROP_UINT32("max_revision", VirtioCcwDevice, max_rev, > + VIRTIO_CCW_MAX_REV), > + DEFINE_PROP_END_OF_LIST(), > +}; > + > +static void virtio_ccw_gpu_instance_init(Object *obj) > +{ > + VirtIOGPUCcw *dev = VIRTIO_GPU_CCW(obj); > + VirtioCcwDevice *ccw_dev = VIRTIO_CCW_DEVICE(obj); > + > + ccw_dev->force_revision_1 = true; > + virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev), > + TYPE_VIRTIO_GPU); > +} > + > +static void virtio_ccw_gpu_class_init(ObjectClass *klass, void *data) > +{ > + DeviceClass *dc = DEVICE_CLASS(klass); > + VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass); > + > + k->realize = virtio_ccw_gpu_realize; > + k->exit = virtio_ccw_exit; > + dc->reset = virtio_ccw_reset; > + dc->props = virtio_ccw_gpu_properties; > + dc->hotpluggable = false; Wonder if hotplug could work?
On 09/12/2017 04:26 PM, Farhan Ali wrote: > Wire up the virtio-gpu device for the CCW bus. The virtio-gpu > is a virtio-1 device, so disable revision 0. > > Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com> > Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> Reviewed-by: Halil Pasic <pasic@linux.vnet.ibm.com> [..]
On Wed, 2017-09-13 at 14:09 +0200, David Hildenbrand wrote: > > + dc->props = virtio_ccw_gpu_properties; > > + dc->hotpluggable = false; > > Wonder if hotplug could work? No, ui/* doesn't support hotplug. cheers, Gerd
On 13.09.2017 14:09, David Hildenbrand wrote: > On 12.09.2017 16:26, Farhan Ali wrote: >> Wire up the virtio-gpu device for the CCW bus. The virtio-gpu >> is a virtio-1 device, so disable revision 0. >> >> Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com> >> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> >> --- >> hw/s390x/virtio-ccw.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ >> hw/s390x/virtio-ccw.h | 10 ++++++++++ >> 2 files changed, 64 insertions(+) >> >> diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c >> index b1976fd..3078bf0 100644 >> --- a/hw/s390x/virtio-ccw.c >> +++ b/hw/s390x/virtio-ccw.c >> @@ -1007,6 +1007,20 @@ static void virtio_ccw_crypto_realize(VirtioCcwDevice *ccw_dev, Error **errp) >> NULL); >> } >> >> +static void virtio_ccw_gpu_realize(VirtioCcwDevice *ccw_dev, Error **errp) >> +{ >> + VirtIOGPUCcw *dev = VIRTIO_GPU_CCW(ccw_dev); >> + DeviceState *vdev = DEVICE(&dev->vdev); >> + Error *err = NULL; >> + >> + qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus)); >> + object_property_set_bool(OBJECT(vdev), true, "realized", &err); >> + if (err) { >> + error_propagate(errp, err); >> + return; >> + } > > You can call error_propagate() unconditionally, it can deal with !err. I think you even do not need error_propagate here - just pass errp directly to object_property_set_bool. You exit the function afterwards anyway. Thomas
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c index b1976fd..3078bf0 100644 --- a/hw/s390x/virtio-ccw.c +++ b/hw/s390x/virtio-ccw.c @@ -1007,6 +1007,20 @@ static void virtio_ccw_crypto_realize(VirtioCcwDevice *ccw_dev, Error **errp) NULL); } +static void virtio_ccw_gpu_realize(VirtioCcwDevice *ccw_dev, Error **errp) +{ + VirtIOGPUCcw *dev = VIRTIO_GPU_CCW(ccw_dev); + DeviceState *vdev = DEVICE(&dev->vdev); + Error *err = NULL; + + qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus)); + object_property_set_bool(OBJECT(vdev), true, "realized", &err); + if (err) { + error_propagate(errp, err); + return; + } +} + /* DeviceState to VirtioCcwDevice. Note: used on datapath, * be careful and test performance if you change this. */ @@ -1616,6 +1630,45 @@ static const TypeInfo virtio_ccw_crypto = { .class_init = virtio_ccw_crypto_class_init, }; +static Property virtio_ccw_gpu_properties[] = { + DEFINE_PROP_BIT("ioeventfd", VirtioCcwDevice, flags, + VIRTIO_CCW_FLAG_USE_IOEVENTFD_BIT, true), + DEFINE_PROP_UINT32("max_revision", VirtioCcwDevice, max_rev, + VIRTIO_CCW_MAX_REV), + DEFINE_PROP_END_OF_LIST(), +}; + +static void virtio_ccw_gpu_instance_init(Object *obj) +{ + VirtIOGPUCcw *dev = VIRTIO_GPU_CCW(obj); + VirtioCcwDevice *ccw_dev = VIRTIO_CCW_DEVICE(obj); + + ccw_dev->force_revision_1 = true; + virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev), + TYPE_VIRTIO_GPU); +} + +static void virtio_ccw_gpu_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(klass); + VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass); + + k->realize = virtio_ccw_gpu_realize; + k->exit = virtio_ccw_exit; + dc->reset = virtio_ccw_reset; + dc->props = virtio_ccw_gpu_properties; + dc->hotpluggable = false; + set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); +} + +static const TypeInfo virtio_ccw_gpu = { + .name = TYPE_VIRTIO_GPU_CCW, + .parent = TYPE_VIRTIO_CCW_DEVICE, + .instance_size = sizeof(VirtIOGPUCcw), + .instance_init = virtio_ccw_gpu_instance_init, + .class_init = virtio_ccw_gpu_class_init, +}; + static void virtio_ccw_busdev_realize(DeviceState *dev, Error **errp) { VirtioCcwDevice *_dev = (VirtioCcwDevice *)dev; @@ -1815,6 +1868,7 @@ static void virtio_ccw_register(void) type_register_static(&vhost_vsock_ccw_info); #endif type_register_static(&virtio_ccw_crypto); + type_register_static(&virtio_ccw_gpu); } type_init(virtio_ccw_register) diff --git a/hw/s390x/virtio-ccw.h b/hw/s390x/virtio-ccw.h index 41d4010..541fdd2 100644 --- a/hw/s390x/virtio-ccw.h +++ b/hw/s390x/virtio-ccw.h @@ -27,6 +27,7 @@ #ifdef CONFIG_VHOST_VSOCK #include "hw/virtio/vhost-vsock.h" #endif /* CONFIG_VHOST_VSOCK */ +#include "hw/virtio/virtio-gpu.h" #include "hw/s390x/s390_flic.h" #include "hw/s390x/css.h" @@ -223,4 +224,13 @@ typedef struct VHostVSockCCWState { #endif /* CONFIG_VHOST_VSOCK */ +#define TYPE_VIRTIO_GPU_CCW "virtio-gpu-ccw" +#define VIRTIO_GPU_CCW(obj) \ + OBJECT_CHECK(VirtIOGPUCcw, (obj), TYPE_VIRTIO_GPU_CCW) + +typedef struct VirtIOGPUCcw { + VirtioCcwDevice parent_obj; + VirtIOGPU vdev; +} VirtIOGPUCcw; + #endif