From c4583c8c394ee49ce7d5271f572abd3b000fa9e4 Mon Sep 17 00:00:00 2001 From: Paul Durrant Date: Thu, 1 Oct 2020 09:15:00 +0100 Subject: 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 Signed-off-by: Paul Durrant Reviewed-by: Anthony PERARD Message-Id: <20201001081500.1026-1-paul@xen.org> Signed-off-by: Anthony PERARD --- hw/xen/xen-backend.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'hw/xen/xen-backend.c') diff --git a/hw/xen/xen-backend.c b/hw/xen/xen-backend.c index 10199fb58d..5b0fb76eae 100644 --- a/hw/xen/xen-backend.c +++ b/hw/xen/xen-backend.c @@ -41,6 +41,12 @@ static void xen_backend_table_add(XenBackendImpl *impl) g_hash_table_insert(xen_backend_table_get(), (void *)impl->type, impl); } +static const char **xen_backend_table_keys(unsigned int *count) +{ + return (const char **)g_hash_table_get_keys_as_array( + xen_backend_table_get(), count); +} + static const XenBackendImpl *xen_backend_table_lookup(const char *type) { return g_hash_table_lookup(xen_backend_table_get(), type); @@ -70,6 +76,11 @@ void xen_backend_register(const XenBackendInfo *info) xen_backend_table_add(impl); } +const char **xen_backend_get_types(unsigned int *count) +{ + return xen_backend_table_keys(count); +} + static QLIST_HEAD(, XenBackendInstance) backend_list; static void xen_backend_list_add(XenBackendInstance *backend) -- cgit 1.4.1