diff options
author | Paul Durrant <pdurrant@amazon.com> | 2020-10-01 09:15:00 +0100 |
---|---|---|
committer | Anthony PERARD <anthony.perard@citrix.com> | 2020-10-19 16:32:41 +0100 |
commit | c4583c8c394ee49ce7d5271f572abd3b000fa9e4 (patch) | |
tree | 98fbb64c939b023f063abe2c2ff86c0db662904f /include | |
parent | 2211118a2acb6f36bc497713479050e45a3ec693 (diff) | |
download | qemu-c4583c8c394ee49ce7d5271f572abd3b000fa9e4.zip qemu-c4583c8c394ee49ce7d5271f572abd3b000fa9e4.tar.gz qemu-c4583c8c394ee49ce7d5271f572abd3b000fa9e4.tar.bz2 |
xen-bus: reduce scope of backend watch
Currently a single watch on /local/domain/X/backend is registered by each
QEMU process running in service domain X (where X is usually 0). The purpose
of this watch is to ensure that QEMU is notified when the Xen toolstack
creates a new device backend area.
Such a backend area is specific to a single frontend area created for a
specific guest domain and, since each QEMU process is also created to service
a specfic guest domain, it is unnecessary and inefficient to notify all QEMU
processes.
Only the QEMU process associated with the same guest domain need
receive the notification. This patch re-factors the watch registration code
such that notifications are targetted appropriately.
Reported-by: Jerome Leseinne <jerome.leseinne@gmail.com>
Signed-off-by: Paul Durrant <pdurrant@amazon.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
Message-Id: <20201001081500.1026-1-paul@xen.org>
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/hw/xen/xen-backend.h | 1 | ||||
-rw-r--r-- | include/hw/xen/xen-bus.h | 3 |
2 files changed, 3 insertions, 1 deletions
diff --git a/include/hw/xen/xen-backend.h b/include/hw/xen/xen-backend.h index 010d712..aac2fd4 100644 --- a/include/hw/xen/xen-backend.h +++ b/include/hw/xen/xen-backend.h @@ -31,6 +31,7 @@ void xen_backend_set_device(XenBackendInstance *backend, XenDevice *xen_backend_get_device(XenBackendInstance *backend); void xen_backend_register(const XenBackendInfo *info); +const char **xen_backend_get_types(unsigned int *nr); void xen_backend_device_create(XenBus *xenbus, const char *type, const char *name, QDict *opts, Error **errp); diff --git a/include/hw/xen/xen-bus.h b/include/hw/xen/xen-bus.h index 3df6961..6bdbf3f 100644 --- a/include/hw/xen/xen-bus.h +++ b/include/hw/xen/xen-bus.h @@ -66,7 +66,8 @@ struct XenBus { domid_t backend_id; struct xs_handle *xsh; XenWatchList *watch_list; - XenWatch *backend_watch; + unsigned int backend_types; + XenWatch **backend_watch; QLIST_HEAD(, XenDevice) inactive_devices; }; |