summaryrefslogtreecommitdiffstats
path: root/include/hw/xen
diff options
context:
space:
mode:
authorPaul Durrant2020-10-01 10:15:00 +0200
committerAnthony PERARD2020-10-19 17:32:41 +0200
commitc4583c8c394ee49ce7d5271f572abd3b000fa9e4 (patch)
tree98fbb64c939b023f063abe2c2ff86c0db662904f /include/hw/xen
parentxen: Rename XENBACKEND_DEVICE to XENBACKEND (diff)
downloadqemu-c4583c8c394ee49ce7d5271f572abd3b000fa9e4.tar.gz
qemu-c4583c8c394ee49ce7d5271f572abd3b000fa9e4.tar.xz
qemu-c4583c8c394ee49ce7d5271f572abd3b000fa9e4.zip
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/hw/xen')
-rw-r--r--include/hw/xen/xen-backend.h1
-rw-r--r--include/hw/xen/xen-bus.h3
2 files changed, 3 insertions, 1 deletions
diff --git a/include/hw/xen/xen-backend.h b/include/hw/xen/xen-backend.h
index 010d712638..aac2fd454d 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 3df696136f..6bdbf3ff82 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;
};