...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 <paul.durr...@citrix.com> --- Cc: Jan Beulich <jbeul...@suse.com> Cc: Andrew Cooper <andrew.coop...@citrix.com> --- 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 e0f936b..c531f37 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -5337,7 +5337,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 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.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel