Message ID | 20200508163218.22592-7-lulu@redhat.com |
---|---|
State | New |
Headers | show |
Series | vDPA support in qemu | expand |
On 2020/5/9 上午12:32, Cindy Lu wrote: > From: Jason Wang <jasowang@redhat.com> > > This patch introduces queue_enabled() method which allows the > transport to implement its own way to report whether or not a queue is > enabled. > > Signed-off-by: Jason Wang <jasowang@redhat.com> This patch should come before any of the vhost-vpda patch. Thanks > --- > hw/virtio/virtio.c | 6 ++++++ > include/hw/virtio/virtio-bus.h | 4 ++++ > 2 files changed, 10 insertions(+) > > diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c > index 04716b5f6c..09732a8836 100644 > --- a/hw/virtio/virtio.c > +++ b/hw/virtio/virtio.c > @@ -3169,6 +3169,12 @@ hwaddr virtio_queue_get_desc_addr(VirtIODevice *vdev, int n) > > bool virtio_queue_enabled(VirtIODevice *vdev, int n) > { > + BusState *qbus = qdev_get_parent_bus(DEVICE(vdev)); > + VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus); > + > + if (k->queue_enabled) > + return k->queue_enabled(qbus->parent, n); > + > return virtio_queue_get_desc_addr(vdev, n) != 0; > } > > diff --git a/include/hw/virtio/virtio-bus.h b/include/hw/virtio/virtio-bus.h > index 38c9399cd4..0f6f215925 100644 > --- a/include/hw/virtio/virtio-bus.h > +++ b/include/hw/virtio/virtio-bus.h > @@ -83,6 +83,10 @@ typedef struct VirtioBusClass { > */ > int (*ioeventfd_assign)(DeviceState *d, EventNotifier *notifier, > int n, bool assign); > + /* > + * Whether queue number n is enabled. > + */ > + bool (*queue_enabled)(DeviceState *d, int n); > /* > * Does the transport have variable vring alignment? > * (ie can it ever call virtio_queue_set_align()?)
On Sat, May 9, 2020 at 11:02 AM Jason Wang <jasowang@redhat.com> wrote: > > > On 2020/5/9 上午12:32, Cindy Lu wrote: > > From: Jason Wang <jasowang@redhat.com> > > > > This patch introduces queue_enabled() method which allows the > > transport to implement its own way to report whether or not a queue is > > enabled. > > > > Signed-off-by: Jason Wang <jasowang@redhat.com> > > > This patch should come before any of the vhost-vpda patch. > > Thanks > Sure, Will fix this > > > --- > > hw/virtio/virtio.c | 6 ++++++ > > include/hw/virtio/virtio-bus.h | 4 ++++ > > 2 files changed, 10 insertions(+) > > > > diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c > > index 04716b5f6c..09732a8836 100644 > > --- a/hw/virtio/virtio.c > > +++ b/hw/virtio/virtio.c > > @@ -3169,6 +3169,12 @@ hwaddr virtio_queue_get_desc_addr(VirtIODevice *vdev, int n) > > > > bool virtio_queue_enabled(VirtIODevice *vdev, int n) > > { > > + BusState *qbus = qdev_get_parent_bus(DEVICE(vdev)); > > + VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus); > > + > > + if (k->queue_enabled) > > + return k->queue_enabled(qbus->parent, n); > > + > > return virtio_queue_get_desc_addr(vdev, n) != 0; > > } > > > > diff --git a/include/hw/virtio/virtio-bus.h b/include/hw/virtio/virtio-bus.h > > index 38c9399cd4..0f6f215925 100644 > > --- a/include/hw/virtio/virtio-bus.h > > +++ b/include/hw/virtio/virtio-bus.h > > @@ -83,6 +83,10 @@ typedef struct VirtioBusClass { > > */ > > int (*ioeventfd_assign)(DeviceState *d, EventNotifier *notifier, > > int n, bool assign); > > + /* > > + * Whether queue number n is enabled. > > + */ > > + bool (*queue_enabled)(DeviceState *d, int n); > > /* > > * Does the transport have variable vring alignment? > > * (ie can it ever call virtio_queue_set_align()?) >
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 04716b5f6c..09732a8836 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -3169,6 +3169,12 @@ hwaddr virtio_queue_get_desc_addr(VirtIODevice *vdev, int n) bool virtio_queue_enabled(VirtIODevice *vdev, int n) { + BusState *qbus = qdev_get_parent_bus(DEVICE(vdev)); + VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus); + + if (k->queue_enabled) + return k->queue_enabled(qbus->parent, n); + return virtio_queue_get_desc_addr(vdev, n) != 0; } diff --git a/include/hw/virtio/virtio-bus.h b/include/hw/virtio/virtio-bus.h index 38c9399cd4..0f6f215925 100644 --- a/include/hw/virtio/virtio-bus.h +++ b/include/hw/virtio/virtio-bus.h @@ -83,6 +83,10 @@ typedef struct VirtioBusClass { */ int (*ioeventfd_assign)(DeviceState *d, EventNotifier *notifier, int n, bool assign); + /* + * Whether queue number n is enabled. + */ + bool (*queue_enabled)(DeviceState *d, int n); /* * Does the transport have variable vring alignment? * (ie can it ever call virtio_queue_set_align()?)