Vladimir Sementsov-Ogievskiy <vsement...@yandex-team.ru> writes: > For now we only log the vhost device error, when virtqueue is actually > stopped. Let's add a QAPI event, which makes possible: > > - collect statistics of such errors > - make immediate actions: take core dumps or do some other debugging > - inform the user through a management API or UI, so that (s)he can > react somehow, e.g. reset the device driver in the guest or even > build up some automation to do so > > Note that basically every inconsistency discovered during virtqueue > processing results in a silent virtqueue stop. The guest then just > sees the requests getting stuck somewhere in the device for no visible > reason. This event provides a means to inform the management layer of > this situation in a timely fashion. > > The event could be reused for some other virtqueue problems (not only > for vhost devices) in future. For this it gets a generic name and > structure. > > We keep original VHOST_OPS_DEBUG(), to keep original debug output as is > here, it's not the only call to VHOST_OPS_DEBUG in the file. > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@yandex-team.ru> > ---
[...] > diff --git a/qapi/qdev.json b/qapi/qdev.json > index 6bc5a733b8..199e21cae7 100644 > --- a/qapi/qdev.json > +++ b/qapi/qdev.json > @@ -161,3 +161,28 @@ > ## > { 'event': 'DEVICE_UNPLUG_GUEST_ERROR', > 'data': { '*device': 'str', 'path': 'str' } } > + > +## > +# @VirtqueueError: > +# Missing member documentation: # @vhost-vring-err: Lorem ipsum dolor sit amet, consectetur adipiscing # elit, sed do eiusmod tempor incididunt ut labore et dolore magna # aliqua. > +# Since: 8.2 > +## > +{ 'enum': 'VirtqueueError', > + 'data': [ 'vhost-vring-err' ] } Let's not abbreviate "error" to "err" here. > + > +## > +# @VIRTQUEUE_ERROR: > +# > +# Emitted when a device virtqueue fails in runtime. > +# > +# @device: the device's ID if it has one > +# @path: the device's QOM path > +# @virtqueue: virtqueue index > +# @error: error identifier > +# @description: human readable description > +# > +# Since: 8.2 > +## > +{ 'event': 'VIRTQUEUE_ERROR', > + 'data': { '*device': 'str', 'path': 'str', 'virtqueue': 'int', > + 'error': 'VirtqueueError', 'description': 'str'} }