[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 1/2] tools/libs/guest: re-read dominfo after changing a PV guest's width on restore


  • To: George Dunlap <gwd@xxxxxxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Date: Thu, 12 Nov 2026 12:00:42 +0000
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=haFdn/+6Ya0UlciSIjaT5FEgL0x/MlS1o2yYgA+MxxI=; b=PdZR5nl85TNcCyr95dBG493VWF14hcdYe66AaEQg6CamUhny+KqwncgqP6N2+JoKDXJTIx+7PqLB6THRKweSEkgaI0Vs7TH5y6/vB/zOIB2sJAlnVF9cgRvUP0UPRdtMRlwulBz3MThhoyqtfUXRFVGGaO0Cv/+9N5zsY1bGaSLpkpdh0oOM/gQFwtsKWgyoAeRGJst3wLMvNncc+HUtZ6bTQioJi+zW1HNBGtVgANa3pxkFyFz6OS/uOuX9jwJtS+cw+9L4AyYlF1wH8TY5OI0K+6St0KuopaQhOk1IsyTGx26Fcn/CNexQKCOvdDq3Oh3CIR+h4ZosZWkkM6NcxA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=r8PSlCQ4kgZAjE76tAd6S5p9P8jz/5TqzgEkltqocFRUAYcpovvAQpQoV2tvCIgbxHpyPlQJ+0R58xRrr0kET3aNaevp+VKzJS17FphZkjhkfKSxxx/IG8wDfVUa1POKR3lS0h+9ytzgp0ZEbqQF0n+N5we3jX9U1g+CoVW/ATz75cjFx2TTlmg40gpxJB7I9JyN2MV9riL8jVKkp5xwJn5zqFJDsCXPnPDbmyEY7iVFo/Vse8RqODKGuBDM0YzQm1iAWONhb6J9w3/V/gTU0shtkmGJ2L8YfZm6ag1kjIBTNuBNIpIIZ1v64KhK2mVSfkI7DotFASRMmYZyqg0yxA==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Autocrypt: addr=andrew.cooper3@xxxxxxxxxx; keydata= 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 6+ahAA==
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>
  • Delivery-date: Thu, 12 Nov 2026 12:01:01 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 11/11/2026 5:14 pm, George Dunlap wrote:
> The x86 PV restore code reads the domain's information once, when the
> stream starts, and keeps it in ctx->dominfo.  When the X86_PV_INFO
> record gives a width other than the domain's, handle_x86_pv_info()
> changes it with XEN_DOMCTL_set_address_size, and then refreshes only
> the guest's width and page-table levels.
>
> Since 8a9255405ca6 ("x86/domain: adjust limitation on shared_info
> allocation below 4G"), making a domain 32-bit may replace a
> shared_info page (if the originally allocated page was above 4GiB).
> The shared_info_frame read when the stream started will refer to a
> freed page.  handle_shared_info() maps that frame to write the
> SHARED_INFO record, and process_start_info() puts it in the guest's
> start_info.  Xen holds no reference to the replaced page by then, so
> the mapping fails, and with it the restore of any 32-bit PV guest
> whose shared_info page was moved.
>
> Re-read the domain's information after changing its width.
>
> Fixes: 8a9255405ca6 ("x86/domain: adjust limitation on shared_info allocation 
> below 4G")
> Assisted-by: Claude Code:claude-opus-5-5
> Signed-off-by: George Dunlap <gwd@xxxxxxxxxxxxxx>
> ---
> Not tested end to end: no 32-bit PV guest here can suspend.  Restore's
> steps replayed from dom0 on staging, on an Intel box (create a PV
> domain, read its info, make it 32-bit, populate 1GiB, then map the
> frame read first): that map fails with -EBUSY every time, while the
> frame read after the switch maps.  Build-tested.
> ---
>  tools/libs/guest/xg_sr_restore_x86_pv.c | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/tools/libs/guest/xg_sr_restore_x86_pv.c 
> b/tools/libs/guest/xg_sr_restore_x86_pv.c
> index 876748c11e..b72cacd000 100644
> --- a/tools/libs/guest/xg_sr_restore_x86_pv.c
> +++ b/tools/libs/guest/xg_sr_restore_x86_pv.c
> @@ -646,6 +646,12 @@ static int handle_x86_pv_info(struct xc_sr_context *ctx,
>          }
>  
>          /* Domain's information changed, better to refresh. */
> +        if ( xc_domain_getinfo_single(xch, ctx->domid, &ctx->dominfo) < 0 )
> +        {
> +            PERROR("Failed to refresh dominfo for d%d", ctx->domid);
> +            return -1;
> +        }
> +
>          rc = x86_pv_domain_info(ctx);
>          if ( rc != 0 )
>          {

Oh lovely.

I think I'm going to start by putting together a real migration test
including PV32.   We *need* to stop errors this simple from slipping in,
and there have been quite a few recently.

~Andrew



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.