From e7dabe59c3239dc9ef9edbc49ed54f754616ebf7 Mon Sep 17 00:00:00 2001 From: Paul Durrant Date: Mon, 12 Dec 2016 09:49:10 +0100 Subject: [PATCH] x86/hvm: don't unconditionally create a default ioreq server Avoid doing so if the domain is not under construction. If upstream QEMU is in use then it will explicitly create an ioreq server rather than implicitly creating the default ioreq server, which is a side-effect of reading HVM_PARAM_IOREQ_PFN, HVM_PARAM_BUFIOREQ_PFN, or HVM_PARAM_BUFIOREQ_EVTCHN (as is done by legacy QEMUs). However, if the domain is subsequently saved/migrated then those parameters are read and hence the default server will be unnecessarily instantiated. This patch adds an extra check of the 'creation_finished' flag when those HVM params are read and will only instantiate the server if the domain is under construction, which will always be the case when QEMU is invoked. Signed-off-by: Paul Durrant Reviewed-by: Andrew Cooper Tested-by: Zhang Chen Reviewed-by: Jan Beulich --- xen/arch/x86/hvm/hvm.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 4ecc82e8af..2b3977a303 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -5278,7 +5278,16 @@ static int hvmop_get_param( { domid_t domid; - /* May need to create server. */ + /* + * It may be necessary to create a default ioreq server here, + * because legacy versions of QEMU are not aware of the new API for + * explicit ioreq server creation. However, if the domain is not + * under construction then it will not be QEMU querying the + * parameters and thus the query should not have that side-effect. + */ + if ( d->creation_finished ) + break; + domid = d->arch.hvm_domain.params[HVM_PARAM_DM_DOMAIN]; rc = hvm_create_ioreq_server(d, domid, 1, HVM_IOREQSRV_BUFIOREQ_LEGACY, NULL); -- 2.39.5