From nobody Sat May 18 23:55:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1650968567; cv=pass; d=zohomail.com; s=zohoarc; b=ZMJGDgp9TfTNGVhGmAzcxtQB54K3HXF50XAewbK8ji5XrBWO5tRMz0DevPY2RuXXbqZE0LIUZKQGz4d989Txb1dqAj/MG4+DPcObYSOvDNyZvd/nFCg7hYj3uwHfmSrdadmYkN/6SEgo9WwQHbXXSlxc92vrKeijubuNgZsWj00= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1650968567; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=2D6z8DLOg+aZWIepU3LxQZQ51kG6eQiRLZZZoiI9SdQ=; b=Pwh5Y7jhvzaQL4KobtlA0W9EHpnqpsGLBSDhNBbHSCj4V3riscMiYb+wGrcIunM9jSzaM2dS31KYUVnSZk1zW4AlnManyxfgbCh296s462VGCdUhWVb+fw4kzffmmhtPwKvnCDdMPJM0DyeZWzhO0lZUsOMd85cpMKKOUMThrdc= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1650968567490218.84186127862256; Tue, 26 Apr 2022 03:22:47 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.313685.531358 (Exim 4.92) (envelope-from ) id 1njIKw-0006SQ-0z; Tue, 26 Apr 2022 10:22:26 +0000 Received: by outflank-mailman (output) from mailman id 313685.531358; Tue, 26 Apr 2022 10:22:25 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njIKv-0006SJ-UN; Tue, 26 Apr 2022 10:22:25 +0000 Received: by outflank-mailman (input) for mailman id 313685; Tue, 26 Apr 2022 10:22:24 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njIKu-0006S6-3V for xen-devel@lists.xenproject.org; Tue, 26 Apr 2022 10:22:24 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id c2aeb2b0-c54a-11ec-a405-831a346695d4; Tue, 26 Apr 2022 12:22:22 +0200 (CEST) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-ve1eur02lp2051.outbound.protection.outlook.com [104.47.6.51]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-8-emKarZHHM46xiNh5QyzeEg-1; Tue, 26 Apr 2022 12:22:21 +0200 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) by DB6PR0401MB2325.eurprd04.prod.outlook.com (2603:10a6:4:49::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.21; Tue, 26 Apr 2022 10:22:19 +0000 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f]) by DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f%9]) with mapi id 15.20.5186.021; Tue, 26 Apr 2022 10:22:19 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: c2aeb2b0-c54a-11ec-a405-831a346695d4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1650968542; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2D6z8DLOg+aZWIepU3LxQZQ51kG6eQiRLZZZoiI9SdQ=; b=TWK4NmAs0K0bkuB1jJafkyFRHV5+Q0zMShg4EobDJiTD8Y+/zX8yjSvt96GE15hkQtkIB+ OJ67MZXKcsg+m9wCt6q2wlnerZpDCgfd4ss+Gx20/LkSdAahS2s+2KfhXfMMpes4wFsc3B IrMuToTS1PzIDBoRMfUXQM0wdmm7awI= X-MC-Unique: emKarZHHM46xiNh5QyzeEg-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KcfiAISGD904hY1BVLrMSBXTF1Fn2Dq5hmClD0/zX0R29JLFW77xLVZY8a9HTBL1DKH5CahiyzYtpQUKGxHcYf6sDUCv4xFc3ztVvyqBglVICd/X4UrJSrE51ZeF9JeRo4G2egcSI3fMlnFzC+QzzQ1Hp2h2VL23TP2GZccP6v9LUVqDOT7UP8D/TsONZA8idbo0RQrj3q3VlyApMFYroHZALftTCelF+p3gplnCGu77vHluvmOPrBeGyqvjEj+vtLdbMe3blPvI0F1jeCO1z+XmOXDohpxmA0awkxdUyp8dC1qddynvnBTrSV9oOvgk1WpmPKBAhfIio96lk493HQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=2D6z8DLOg+aZWIepU3LxQZQ51kG6eQiRLZZZoiI9SdQ=; b=QxUJNP+ZfgXq0xuROprm48P3Vmwrqr7Tloz+6fwvLFu9vYJIPc/D7nF1wGo1VCLYaRX5TWyeT91kZjVAi8B4HlBr4bqz+qfGMvAGMcUboB9+JXrBV/IwcAnc+kU7zoQ/dtWylWWtIoiW/PlIHXMpHYqRahAlv1HzFZg/QpCcsyEa1vyDTePdVL+9WfJDtXyloMPKDU+DGP1MYYXNBC0K6INcXPBV04ByLQbtqtTVTW85JLeapDGiqOME+PppQ1xYviK56L2gfPTaKMh7wDEATTeTTqyJNXbjwiNK+XbHrVk3r/I3SEw/WnM37o7eV4V/Z2ZJR464UpvTzcDrgJcHlQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Tue, 26 Apr 2022 12:22:18 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: [PATCH v3 1/8] libxenguest: short-circuit "all-dirty" handling Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Juergen Gross , George Dunlap , Anthony Perard References: In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6P195CA0101.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:86::42) To DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 64e5fe35-b3a7-400b-e428-08da276ea51d X-MS-TrafficTypeDiagnostic: DB6PR0401MB2325:EE_ X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FrA29hiqSta82wVniLc7JJvfOcp5uZKSocQ77MtamLuiZp1Le9LllPpiw8RupOEZgjYB6sH1PtM8/SVSwW/QzeepYLgO3cg8UEApVp2Yn6y1Hx+asS2ZQfqcbNWgjuFNnTnzM+TJq2NjXygQGAxYtmzQoK0cof142Co+StYfUh3f9WaAFqt5Eg2rNjml1+eA7vbhJxfzvxbRiHbKO3ZQsJ08lfdGaqnE3jhwzNT7ic4JEeciEnSQA35l1YaflFqr125+830sP+IoTszSiG6E03wU6nEx9GLIYmMvcBHT3IxT+hruyRmrpw2aTOQi93J6SYh7vXhPoiK5oX202KmcZzb+ir0uHCGIfMD09s7H3RR/Ul3Oea4E8obeO4GK7LHmvOyKyKNnTO2/4Q53dJ8QNi+fy8fCW9cNsC+SPHy14ij3veo2NpvJfTW0qca+OW/K9hlPVDjPQF0mAsgmUJKDRIS1hFP/3pIDAoM2Ol+6M9lCkW62KMVTceq8YZzAZA8c3L1kGNfXN36OFb4hdVAPDUTUqVaRt4GG8Y7pWxCUBQqGcxBFfpOriI6eKgniucbX1ei1uZmlyTXJwJ6E3SQq3WkON7A0zeJM7+lO9iLoHI9adn4zJZTYlMw1FzBuOzH8bI7pP29UO2pJV5rvxsb9JqHv65c2XkPhW5zPjBT2Bo8WjABj2r/rcmCjULoyHSjqshrhhHnrkaG+Dg5GBRdUFKpOd/CLiLpTOIlvs9GCfQAASlWfJnTCZD++cW85z5qWYWPSjXNlOOnfLtIDxNoK1Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8616.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66946007)(6512007)(5660300002)(8936002)(2616005)(26005)(66556008)(54906003)(6916009)(316002)(2906002)(86362001)(31696002)(38100700002)(6486002)(508600001)(66476007)(4326008)(8676002)(83380400001)(186003)(6506007)(31686004)(36756003)(14143004)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QjNmODg3YjF3bk1uWm5ydFVUSkpDdlFSZW9xdUowdFoxVWRSbThhL2Z0cEc3?= =?utf-8?B?STh5Yi8ydkN2dVpTMm1ReDlRYzB1THE3VnRaMitINW1XWTVndWQyaEdGemdL?= =?utf-8?B?dUFxODRmSFp4Y1lYTTVRTlZrMTl4bzN3K2N0eG5iUXpGajBlUGtCU3hqc0I2?= =?utf-8?B?alR5c0JpLzRxeUcxRzFCV3dndktHUW1kbUlRdjlkNDVkblgxR2QreUJXOXpH?= =?utf-8?B?S2RVMUhRdG42d1VJVXFGcXV5MFpTcUh5SDIwTnJhd0Y5NzVwb1Q1RjJHdmhv?= =?utf-8?B?NUdidDVEbHVtTXFSdHEvSkJlNkRrR3FrRktleHpMRWs1TGlDMjZVQURuRThB?= =?utf-8?B?UDZCOE1zdWRMRGk4Qy9CLzVDV2RncWdDR0lXV0xCUlc2cjhWK3QvQ2V2QTNx?= =?utf-8?B?Mm91SU0zTVVPMldUdGtZTnFJY2tDVVcxbmc3UzhUblhlbXhqcDVka0VxeFVv?= =?utf-8?B?RW5CQndkZFFzMXhPbmt5WDh2dHFXbjVuVGJhNlM2dkpzdm5FYU5rOFNnOC9j?= =?utf-8?B?RWhjYlBDT08xbkpqRm1vUXNUdUt2WEFNblcyYVJxbXd3MnZLM0tNblc1bnIz?= =?utf-8?B?Q1NFekZBSS9MSGhlQ2E1eW1veTdJTkU4VHRmUFdtL1lHNW9qVjBWZTlXZVIx?= =?utf-8?B?WVRGYk4zcFFaMk9yNWVvSE1IWXpvTUlUK1NNZVp4NDZJeU9HdFlRdXVhVzdC?= =?utf-8?B?Y2ExMGU1RFJ5eFN4bnZoZXVMWThUazk5eGhSTnpucit1S0JwSW4rWHlxQ2lO?= =?utf-8?B?WFg0SXVIYkJkUjdVeFpDRnNRbkk1ZjB5RnN0QlYzTjM2LzJNdXZGVDlXVmdp?= =?utf-8?B?TjEwcVFLaXJwNzZxQmNlaCtqRjJCTkt3QmxJSy9Kc1lNQnpiVVNwM3p5OGFT?= =?utf-8?B?dDBNNGFoQnNCeThUVFY0NFp2cVpjK21hZWdMdVpGQ0xMcWlNdXB2OG5GdFNZ?= =?utf-8?B?MmR0QlVjcHV1YjFjUTFkVzFxTlExSjdReWpaK3ZNZnVCY3JiZHdiZUlpbDVL?= =?utf-8?B?cC80b09nb2J5a2c1TFlBRGZEalpXeWtzU3g4WDJOTFVDZUJxL0xTNlFicWlh?= =?utf-8?B?RzFuV08yR2MzQzRqcEoyYmxNSnlmbUJxeUJsUHZIL1VVanplUnVyL2JYaWQ4?= =?utf-8?B?L0hLczlWVXJxNkpGR2oza3Y5NVozSExEU1UyaWVJa2NjbDdoMDZnZks5S3Bp?= =?utf-8?B?WG1MSmduQUUvQ25sZGJhd0tJRjk1T0t2NTBPRmx6SCs2ZXdENktMVWxaYUF4?= =?utf-8?B?YkhoMGxBMldVZ2w0Q2ZDSzI4Q0o0blpTQTJuYWJRNEY0VXBZckQzKzJ3RTBC?= =?utf-8?B?VWhkTnZZM2JqVlloUWZIaWVVcjdQSXhxQjUyVHlOL1oxdWFCUUVvdllCK3hE?= =?utf-8?B?dUx4d2d1eXloeVEvMUtJU3hLdzdOS202aUx3ZTk1MUd1aUhnNUpiYVJZeFFD?= =?utf-8?B?UmhvdVU4QStKVWNhNHRjWUdNbFN6Sm1HdWY2aEZlS2cxV1hvVFpCUWZ3VzNQ?= =?utf-8?B?ZWhBcUNSaDhZZWhETHVwaW1yKy93VDYwdGs0aWlDMThNN0FTaktielNNWFJL?= =?utf-8?B?bFJ3ZEd4MlZpSWFQUFVFc0NrNC9CdVkyU0hsZHczVENROERJeUp3Zi9GaDBZ?= =?utf-8?B?VjE0bUtCMkNsMlNXNkc4elJQUVFEWkdzRGd5d1VtVXl3RGJVL1RTbnRXUVFq?= =?utf-8?B?M2oyMmkrbDErQzRBQWx0MEU0L2FHOEpuM3YyU0c4Z3JXdWNTbEx2QkVWSkRW?= =?utf-8?B?ZVNuL2poVEZMUDRobTRuWENBU2kxWkhkMVJXeTYxN3ZsUVRzUUliZGkrRFZC?= =?utf-8?B?TGt4ODA5bDR4cFJrWTZ6dU05Z0pmcHgvbi8wanBhTUlKM2phY3FFL0tZR2Yx?= =?utf-8?B?eXNvZUU3bEhKNzk3STU4eXlQd3pvN2h1cFhrYlRVZmpMQ2pvMTczdWIzcEor?= =?utf-8?B?Sytrd2JvL0doMlVBQkxKOENlWFhMam12eTJzd2p2aFoxdmkzemZsQTdzdnRy?= =?utf-8?B?SGN0dmxHVmVxMk8yUnhFUittWHZ6VHZIRkxBSnFOZTlJMWcwOGhDWXBrMkdE?= =?utf-8?B?T0xHNmNXNGtTTXdpME5zV3U4MVFzSzExYkhiOHhDMndSeDdBRUY0S3Rwem5I?= =?utf-8?B?SFE5NjdEWVR4Tmx5TVAwbmR3QVd0c201aWNzc1pRUnR0Zmp1QS96L3lINGJu?= =?utf-8?B?YVVwWld4dFJqeGxYWHIxNzhxdzBySnZjdkxOZlR5ZEJDSFFjM2tTUjd2aTcz?= =?utf-8?B?bllUMzM5NzNyeTZnY2w2aWZETHhsNzU3aW16b0V0YjdzVlhvbVpuYVUxNjRt?= =?utf-8?B?bnNsck1XRWJuc2ZqUXp4ckdjMjhJQ3c4VmpnVWxKMmM0N2dKQURpdz09?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 64e5fe35-b3a7-400b-e428-08da276ea51d X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8616.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2022 10:22:19.7369 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ouC7P2uP3uskeKkA0NP9JBtxfd+PnQVCQCCIx8v6sC469xCKHqjsBcXyvuk2I00cmeq5seqRG0mJBNWFXpWbPw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0401MB2325 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1650968568988100001 Content-Type: text/plain; charset="utf-8" For one it is unnecessary to fill a perhaps large chunk of memory with all ones. Add a new parameter to send_dirty_pages() for callers to indicate so. Then it is further unnecessary to allocate the dirty bitmap altogether when all that's ever going to happen is a single all-dirty run. Signed-off-by: Jan Beulich Reviewed-by: Juergen Gross Acked-by: Ian Jackson --- NOTE: Ian demands that this not be committed without also committing "libxenguest: avoid allocating unused deferred-pages bitmap" (because of the ugly -1L). --- a/tools/libs/guest/xg_sr_save.c +++ b/tools/libs/guest/xg_sr_save.c @@ -364,7 +364,7 @@ static int suspend_domain(struct xc_sr_c * Bitmap is bounded by p2m_size. */ static int send_dirty_pages(struct xc_sr_context *ctx, - unsigned long entries) + unsigned long entries, bool all_dirty) { xc_interface *xch =3D ctx->xch; xen_pfn_t p; @@ -375,7 +375,7 @@ static int send_dirty_pages(struct xc_sr =20 for ( p =3D 0, written =3D 0; p < ctx->save.p2m_size; ++p ) { - if ( !test_bit(p, dirty_bitmap) ) + if ( !all_dirty && !test_bit(p, dirty_bitmap) ) continue; =20 rc =3D add_to_batch(ctx, p); @@ -407,12 +407,7 @@ static int send_dirty_pages(struct xc_sr */ static int send_all_pages(struct xc_sr_context *ctx) { - DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap, - &ctx->save.dirty_bitmap_hbuf); - - bitmap_set(dirty_bitmap, ctx->save.p2m_size); - - return send_dirty_pages(ctx, ctx->save.p2m_size); + return send_dirty_pages(ctx, ctx->save.p2m_size, true /* all_dirty */); } =20 static int enable_logdirty(struct xc_sr_context *ctx) @@ -502,9 +497,6 @@ static int send_memory_live(struct xc_sr int rc; int policy_decision; =20 - DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap, - &ctx->save.dirty_bitmap_hbuf); - precopy_policy_t precopy_policy =3D ctx->save.callbacks->precopy_polic= y; void *data =3D ctx->save.callbacks->data; =20 @@ -522,8 +514,6 @@ static int send_memory_live(struct xc_sr if ( precopy_policy =3D=3D NULL ) precopy_policy =3D simple_precopy_policy; =20 - bitmap_set(dirty_bitmap, ctx->save.p2m_size); - for ( ; ; ) { policy_decision =3D precopy_policy(*policy_stats, data); @@ -535,7 +525,7 @@ static int send_memory_live(struct xc_sr if ( rc ) goto out; =20 - rc =3D send_dirty_pages(ctx, stats.dirty_count); + rc =3D send_dirty_pages(ctx, stats.dirty_count, x =3D=3D 1); if ( rc ) goto out; } @@ -681,7 +671,8 @@ static int suspend_and_send_dirty(struct } } =20 - rc =3D send_dirty_pages(ctx, stats.dirty_count + ctx->save.nr_deferred= _pages); + rc =3D send_dirty_pages(ctx, stats.dirty_count + ctx->save.nr_deferred= _pages, + false /* all_dirty */); if ( rc ) goto out; =20 @@ -801,8 +792,11 @@ static int setup(struct xc_sr_context *c if ( rc ) goto err; =20 - dirty_bitmap =3D xc_hypercall_buffer_alloc_pages( - xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->save.p2m_size))); + dirty_bitmap =3D ctx->save.live || ctx->stream_type !=3D XC_STREAM_PLA= IN + ? xc_hypercall_buffer_alloc_pages( + xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->save.p2m_size))) + : (void *)-1L; + ctx->save.batch_pfns =3D malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.batch_pfns)); ctx->save.deferred_pages =3D bitmap_alloc(ctx->save.p2m_size); From nobody Sat May 18 23:55:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1650968613; cv=pass; d=zohomail.com; s=zohoarc; b=ZKRAncs2Em5ZDp1l21VaqbGnj5vLfWrupiYlfbr/Nag2oVpE5mrFtWGe/ivZvU/O+JA8K94GKUzEnljkq0sxAcvf8PiSV3RtHNjNIJO6m5DevAC4nJl4B12E55FiqW/fx7IV2imbU/PhT3XTlWEHWiV8CM1N7ckfqe0jrh6CPd4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1650968613; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=i2Oz0ufU5ia0z18sXCTR49UR80Yr0jdm8EcVB0xMZ4o=; b=af5FpSM8N6Dogr5LEAgbBFmiSSJilvg4IBCymdoFv4Sn+tGi+bQ8b0RaEgghmTQrVeiLW6iUk+BoV7u3J90X8Bg/M+3iD7zZ9Ckyh2q5zPEyyLT/AHWBm4sNjaDeNcUdPrsO8i1pa0WuxvFai4VOH9NoVfqDLdpXCYbpGXq6T6I= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1650968613282262.3940284903904; Tue, 26 Apr 2022 03:23:33 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.313690.531370 (Exim 4.92) (envelope-from ) id 1njILX-00070W-BA; Tue, 26 Apr 2022 10:23:03 +0000 Received: by outflank-mailman (output) from mailman id 313690.531370; Tue, 26 Apr 2022 10:23:03 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njILX-00070P-82; Tue, 26 Apr 2022 10:23:03 +0000 Received: by outflank-mailman (input) for mailman id 313690; Tue, 26 Apr 2022 10:23:02 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njILW-0006S6-JL for xen-devel@lists.xenproject.org; Tue, 26 Apr 2022 10:23:02 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id d9bec955-c54a-11ec-a405-831a346695d4; Tue, 26 Apr 2022 12:23:01 +0200 (CEST) Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-ve1eur03lp2058.outbound.protection.outlook.com [104.47.9.58]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-35-6J0kHTrZPsScE7Om-U38Cw-1; Tue, 26 Apr 2022 12:23:00 +0200 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) by AM7PR04MB7157.eurprd04.prod.outlook.com (2603:10a6:20b:118::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.21; Tue, 26 Apr 2022 10:22:57 +0000 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f]) by DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f%9]) with mapi id 15.20.5186.021; Tue, 26 Apr 2022 10:22:57 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: d9bec955-c54a-11ec-a405-831a346695d4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1650968581; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=i2Oz0ufU5ia0z18sXCTR49UR80Yr0jdm8EcVB0xMZ4o=; b=Cfh/VbTx+tWH7JWKLbmOS5f5sNk/jTyS2KA0yfOLjoA7jnLuonyqcfa8i/DT3IK8sxSmUL Kd28uVNOGwQsMz3zETMsMODoykfIpGCvGmxnfeBW6TLfjbV4Gxh/OD1KR/EtbNvd7oZgJQ dqHQ8kqw9y8V4T6l8DfXAvi4ZDN/e5A= X-MC-Unique: 6J0kHTrZPsScE7Om-U38Cw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j6y6d2WGVl1MPJyg5hlOK5lOLKJ2xMQgRCHBfCG4utAIiS4GtyNOBk3kQbYS+RLcVvt88M1AvwqOuqCcqHhT/pDV9H7o+fWjBvWHeDqq31zR7cuD8bBstXgajaeq1RxAgq0/A02a+Qaf2krgB8OZgb6DhcFPEiLlxs9xgEQBSyMzMHJJuMBunc6u60SQ9hxalXc7OJFkFHetTIOVd98JyDFfuoMediXffgpxl/gLbeDXnyZfV30yWS8niajOhFC5NA42t8Bgb5d7Qw3qK7Uu6q4C/Gqv7GTzmIQyot8qI30qeK7D+cYCCUS1wKpJ66MrusbXEWOPDJq2WtvNrqDjSA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=i2Oz0ufU5ia0z18sXCTR49UR80Yr0jdm8EcVB0xMZ4o=; b=MFMy+yHGcm0SjH8qUbzBLYTFhi9CaHs7lwpy9lMLkJSVAD5li8GgWUtzMcy8015hYuSCyU5ZPS7GUUikYlYyd6BuNEhCA7nxu99QEdmzOTih+og64JxEd3uEV2OmPD3vdXn9iJgSsB/2t/owIzfQg6tpo08kNNaTP+EkHrjjz3dC+R3VipgUJudRD5z/D++MOUfor4st3BiUJbP1osEX61Mgp+KGMX8/si0M1ka/+/ZxSua4Z6/PyFDQgd6a8S/ePA74aWuQmFLAKttN6P/gJKauRUxRCsBfDSNwW5DXqIuN/D/w1kWgPj3NLZ8relthi7Xf7sK2bREgdrPkItxitA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <1f89601c-3226-d604-5681-aada9b3421d2@suse.com> Date: Tue, 26 Apr 2022 12:22:56 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: [PATCH v3 2/8] libxenguest: avoid allocating unused deferred-pages bitmap Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , Juergen Gross , George Dunlap , Anthony Perard References: In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6P195CA0104.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:86::45) To DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6f56708a-076f-4bef-02a1-08da276ebbce X-MS-TrafficTypeDiagnostic: AM7PR04MB7157:EE_ X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XEejfc+DVGCnsWMm5hkNE2oyxQhLwA4Fl0icFZCn+AUXoW/vGIUX7Fh/eC2SpfgPOa4UaZyAx4NPfVLp+y65VrnV1YzxDXFjYcMxutukbCYoE5DVOjZ4jmYgU2AbBZvGlzPoUGXYB3GV4Gd/EAkqDN6Y++cKOQCYe2GCmZAKv+AZOzq+eeeDI7vyjuN+mI+X27LZ8rfGlDkQbwo/bLTES7whwGaEGp50L5ZnLPD0ZaNt4c4Ftya4G18N4M/hOUL1na1Fi1PpvGutKe/wqBG3cVvvZksAqZoFOcZMnQcrSE9sOyfUk6TonqadBaGpzJb0gzGWwuhYz4wldEtraXIWituB4jj9PNTKsYvR5Q85kw5eJ1N0ck/8HZ/zGHDTcc/oEo6pWedOiRSWHE2ecvCh4N51cnokin96UaAHC+BhUZnJ13LekbYR7AwJ7RhBwdBAwlDXTgdejAxcV3/02Ei1rZpQUh53+SrFgDaoSf7XexiUYhYrtrrpxyYRiwcCuyua1TCw1n45IOhQT9ehs1aO1pogQub1M13DMZjipWmV03I1TM+XgfdIibjegG7C/270hqrncbqw8ZwPM7/BCJmqXfJwmnqcYNeTbDjOI1uOe1Xen9Dbj+zG0TSOrkCiTMhPWn/S8358cMKlyKvmKgzbBFfJIKGmVgUX4B2X+l/0B9LncTIoA2WN79pOIehogX0ep0vOhg58X4SYmvRgq8mdxESCR9AKf7EEEmPMPX/NABJfYxOKBXq2C9gQOHYrYHZG X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8616.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(2906002)(66946007)(508600001)(316002)(6916009)(8676002)(4326008)(31686004)(5660300002)(8936002)(38100700002)(6506007)(86362001)(31696002)(66476007)(66556008)(6486002)(6512007)(186003)(26005)(36756003)(83380400001)(2616005)(54906003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cFJ0bnBEZnNKM2N5STJlVDZWbEpaVXdmdmYxVEhPbUJRS29abWxja0k1RTlv?= =?utf-8?B?Q29YbCtJZlRyaXYxT0dWeDlrd05SaU5aUTduTW01dTdzVFR0WktTS3RTOGlJ?= =?utf-8?B?bGR0NmRhWHFJY3l4bE80ZXhoaGxTN0gzMGx5a1ZNT2g1OUZpUmxtYXFEZ2hU?= =?utf-8?B?MWdlcHV4RCtzbU1uM0ZGc0NKTko0blZmYzBGVjlWL3hCWSsySE9xRmNiNUc3?= =?utf-8?B?NWVWUSsxTW9sYzZXbUhKTVlqSlJodVNCR28rMkU4aFJtSS9jWDNHRVFubmFr?= =?utf-8?B?NW1IRFREemNRdHpFQ25LRko5WmdWbGJSU3BLVVY5RkdPLzVCSThuWFJleW1Z?= =?utf-8?B?Sys3c1ZSaWVjN2NTVElQVk9uWk9kVkQzVGNLSmhyeXh0dER5NUxzTSs1UVA5?= =?utf-8?B?L0VUaGhPV3JvTDJXSWhzZitIUE9yYjNDb0xpVHlLTSthaHJQVlo4RlRic3RB?= =?utf-8?B?YlNFTkhqRzVBNkhRY1J0dTN5cUpMaGtvWk0zRDlsSld3TG5TTEtHT2F4bWJh?= =?utf-8?B?S1N2RDQ5SFFzRzFwRk03dDRUMGVrT1dJaWV5ckJLUllDQlk2emoxajlndy9z?= =?utf-8?B?d3RBTkJFM3NkWU9sYjhnbHlYSlJTcktuT2l6ZUNmUXdiYlpLbFo4dkk1VlJ4?= =?utf-8?B?bmhjNU8wVENxVTBKMjZVdkF4VTZzZkY1WndUQ1g3MlgvVUNMRVFrak1NNGNJ?= =?utf-8?B?WUcxOURoRzQ4SmZTY2xOOWxTejA2a1pxTXBrTXZtbXZWZFVrdFVzQ0pYbGVV?= =?utf-8?B?em5qTGEzRjByZEh3cTlSZkdZRGNNR29GTko0b3RnUzh4WUhBQ3NuNzRQMU1P?= =?utf-8?B?dlFQc1Y2eTgrVU0yZS9iZ0kwQktiOWpQSUJ0eXRqU09yNkcxU0UxK3c3a2Fn?= =?utf-8?B?QURXb0JXVFZHTFN2M0xMK3J1NGFvNWx4N3VseUZkaXlOUkRoY2tDRStPTGp0?= =?utf-8?B?UTUvUFNoeDFPbnpDR2Rrc3NHTGhIL0l2ck9VT09jM2wvcFQrNXM5YlVWYklX?= =?utf-8?B?R0txWFdGcHNsc21vMmNmNzRJRm1uMGUxQ2NBUXg1bHhqUlJZVWdyM0VuM1dv?= =?utf-8?B?bmoyVXUrbXNUeko1cGtzQ0E2cUxudHhMNVViVlZvOWhzbGVYM0NDRU96UnJ5?= =?utf-8?B?RGhkR1BnajdneEZmOGt6NlpiL3A5M2JNTkVhVm1TenpTblorVk1iNHU5dHMw?= =?utf-8?B?STA5WFpDUDBxV1pkVERsVUxIV01tUDI5MWJNSEJNYnhrUWJaR0pSY25PKzNj?= =?utf-8?B?ZEtEL0wrRk9vNy82Q25jNHd4QlpQZStZb0pBamlmaFFxQWtqRGFzVlU1ZjFk?= =?utf-8?B?UGlPVC9XK1liZU9LUWZLZkl5TCtyT3ZoWGc2VDRVMElvdHZLS1JPRENXYklI?= =?utf-8?B?R0oyMWY2OWhQdU1QN1I5cFp4UXFOaEROVmV5TFJqT3craDBTcGhiQ3lnUHRJ?= =?utf-8?B?N0NySEZ3NWhLYXl1bk53Z1lYOE50ZVJKb2o2TWxOZklVYm9kakN3cnIwalNV?= =?utf-8?B?Yi9rSmk3cEwvaDFaVnNOcVpHM3RCbVM2ck9WSE5hTWhFOUpjaWtMMXJvaUZG?= =?utf-8?B?UkJpU1dWVktMRVdoZ0t1L3VtQmhWRkgvRGlET1VZNEo4QkZ5L3hROGd4cXZo?= =?utf-8?B?b0ZJYmNPWE9vSFVsUmx2VVZ1QTNGVUhRS2pHWnNpU2Z0SE5TZWdzTXR4c1NL?= =?utf-8?B?OVBYWHNKWUxmVUN5eU9heTFWaVVHSkRDWmlpNzV1QmdYR1NNbk9qV2VrUE81?= =?utf-8?B?U0M2UmZZYXRBSzlScW1OajVDajRhSkE2WDZxNVdocDFpQ1ZEWStxYmZoZXFr?= =?utf-8?B?aGJBZmJiYkovK1dXaDBVY2VJWmU3MllxTk9XS2RtRGlIUENuVnZ0VG1HTW1i?= =?utf-8?B?NzBJYVg3aDErVWRPRkdTTk5vblh3WGVibDIvU1V5S2RGWGZOcE9pb0NkSWFX?= =?utf-8?B?SHZmdUJ4eFpNL1dnNWNJR3ZWOVZSM0JrM2doUjhuL1BmZi9RYkdnYTAwUWFh?= =?utf-8?B?cWJSQXI1UE1WTFRkT1ZzS1lvY3Z1dlJ0dXB0MzNRajN4U1pUclN0akFTQXVH?= =?utf-8?B?MUdtVXZlQkMvM21xa0FhbjJJTDM5elFJUEZUWnlGWnVmUTZVVmRSK3FOZUF5?= =?utf-8?B?aThYUUdLWnRWOGZlaXZIb080eVIvMDhwYjROeVhVZndPdE5lVFBRd0pUb29u?= =?utf-8?B?NUlTV1pTNS96bis4TmwvT0JxdFM5b0orTUlIMUk3Ny9xQjlUOXU1UFRIVTc1?= =?utf-8?B?VFBZRnVFcWZ0dXZtUm5HMnVJUGZUODFZdGw0ZksrOWgxeGFMNGZUZGdqb0dK?= =?utf-8?B?bUF0SUhyL0ZGS0pvRXF6aVkvU2ljdFpSanhwc01pWDQvdWNLSkFmQT09?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6f56708a-076f-4bef-02a1-08da276ebbce X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8616.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2022 10:22:57.8166 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: DIPhLCoUEr6SNGg0CyemDOFdLzvL8fkkIgoF9ou7Q541UVBe4QiPK/NXuaEXlSDhhDVBATYMSjsyC9R0CT02zA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB7157 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1650968614937100001 Content-Type: text/plain; charset="utf-8" Like for the dirty bitmap, it is unnecessary to allocate the deferred- pages bitmap when all that's ever going to happen is a single all-dirty run. Signed-off-by: Jan Beulich Reviewed-by: Juergen Gross --- a/tools/libs/guest/xg_sr_save.c +++ b/tools/libs/guest/xg_sr_save.c @@ -130,7 +130,7 @@ static int write_batch(struct xc_sr_cont ctx->save.batch_pfns= [i]); =20 /* Likely a ballooned page. */ - if ( mfns[i] =3D=3D INVALID_MFN ) + if ( mfns[i] =3D=3D INVALID_MFN && ctx->save.deferred_pages ) { set_bit(ctx->save.batch_pfns[i], ctx->save.deferred_pages); ++ctx->save.nr_deferred_pages; @@ -192,8 +192,12 @@ static int write_batch(struct xc_sr_cont { if ( rc =3D=3D -1 && errno =3D=3D EAGAIN ) { - set_bit(ctx->save.batch_pfns[i], ctx->save.deferred_pa= ges); - ++ctx->save.nr_deferred_pages; + if ( ctx->save.deferred_pages ) + { + set_bit(ctx->save.batch_pfns[i], + ctx->save.deferred_pages); + ++ctx->save.nr_deferred_pages; + } types[i] =3D XEN_DOMCTL_PFINFO_XTAB; --nr_pages; } @@ -659,7 +663,8 @@ static int suspend_and_send_dirty(struct else xc_set_progress_prefix(xch, "Checkpointed save"); =20 - bitmap_or(dirty_bitmap, ctx->save.deferred_pages, ctx->save.p2m_size); + if ( ctx->save.deferred_pages ) + bitmap_or(dirty_bitmap, ctx->save.deferred_pages, ctx->save.p2m_si= ze); =20 if ( !ctx->save.live && ctx->stream_type =3D=3D XC_STREAM_COLO ) { @@ -676,7 +681,8 @@ static int suspend_and_send_dirty(struct if ( rc ) goto out; =20 - bitmap_clear(ctx->save.deferred_pages, ctx->save.p2m_size); + if ( ctx->save.deferred_pages ) + bitmap_clear(ctx->save.deferred_pages, ctx->save.p2m_size); ctx->save.nr_deferred_pages =3D 0; =20 out: @@ -785,24 +791,31 @@ static int setup(struct xc_sr_context *c { xc_interface *xch =3D ctx->xch; int rc; - DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap, - &ctx->save.dirty_bitmap_hbuf); =20 rc =3D ctx->save.ops.setup(ctx); if ( rc ) goto err; =20 - dirty_bitmap =3D ctx->save.live || ctx->stream_type !=3D XC_STREAM_PLA= IN - ? xc_hypercall_buffer_alloc_pages( - xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->save.p2m_size))) - : (void *)-1L; + if ( ctx->save.live || ctx->stream_type !=3D XC_STREAM_PLAIN ) + { + DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap, + &ctx->save.dirty_bitmap_hbuf); + + dirty_bitmap =3D + xc_hypercall_buffer_alloc_pages( + xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->save.p2m_size)= )); + ctx->save.deferred_pages =3D bitmap_alloc(ctx->save.p2m_size); + + if ( !dirty_bitmap || !ctx->save.deferred_pages ) + goto enomem; + } =20 ctx->save.batch_pfns =3D malloc(MAX_BATCH_SIZE * sizeof(*ctx->save.batch_pfns)); - ctx->save.deferred_pages =3D bitmap_alloc(ctx->save.p2m_size); =20 - if ( !ctx->save.batch_pfns || !dirty_bitmap || !ctx->save.deferred_pag= es ) + if ( !ctx->save.batch_pfns ) { + enomem: ERROR("Unable to allocate memory for dirty bitmaps, batch pfns and" " deferred pages"); rc =3D -1; From nobody Sat May 18 23:55:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1650968635; cv=pass; d=zohomail.com; s=zohoarc; b=ilVW5D+uUY0etnAAvC8XDsldeMxGnV0+aP6l7sxe/tsL+LhZsI1B6yAbYW9O9Jh0TdQbZheOZ1DTg859v4Gk7EUrDg5GC9xKnPyYrxquZDS97rmJo6hnAw6tTve0V2CAWjbdQVBfWHY+pfPR8yDsTEz+02O2S1CeQlVE6DVPf4w= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1650968635; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Poou7+ywHc4+47fsnUn586v0ma66GxF2Bm5uaMw2apo=; b=Kq3vWtvOrLdSlnWTI2u+Wz4vb9PrPQY2Q6jtxb+CcDaUGhP8gS5z5HM2+3a8dQr4/JQ0bZi/w7USP3yqIxc2vPNZ28C830bQlYpLrfExqJ+wUhIYqIvjjrJFXJkpv/hH1w577db7E8CGngqo8mh5kD9nEUAGOxtB0Hb9jEl4j2Q= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1650968635345290.4397368460178; Tue, 26 Apr 2022 03:23:55 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.313695.531380 (Exim 4.92) (envelope-from ) id 1njILx-0007ZG-L0; Tue, 26 Apr 2022 10:23:29 +0000 Received: by outflank-mailman (output) from mailman id 313695.531380; Tue, 26 Apr 2022 10:23:29 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njILx-0007Z9-I0; Tue, 26 Apr 2022 10:23:29 +0000 Received: by outflank-mailman (input) for mailman id 313695; Tue, 26 Apr 2022 10:23:28 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njILw-0006S6-F0 for xen-devel@lists.xenproject.org; Tue, 26 Apr 2022 10:23:28 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id e952a98c-c54a-11ec-a405-831a346695d4; Tue, 26 Apr 2022 12:23:27 +0200 (CEST) Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-ve1eur03lp2054.outbound.protection.outlook.com [104.47.9.54]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-4-ipV6PnBsNTyxy3yjjMQcPw-1; Tue, 26 Apr 2022 12:23:24 +0200 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) by AM7PR04MB7157.eurprd04.prod.outlook.com (2603:10a6:20b:118::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.21; Tue, 26 Apr 2022 10:23:23 +0000 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f]) by DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f%9]) with mapi id 15.20.5186.021; Tue, 26 Apr 2022 10:23:22 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: e952a98c-c54a-11ec-a405-831a346695d4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1650968607; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Poou7+ywHc4+47fsnUn586v0ma66GxF2Bm5uaMw2apo=; b=TqtgYcwvRS73UvUcPWSnbV36c/aHhPnGFPgV0BifDy7twyWu4K2hdcfPQ3CyUWtFr5Qo7+ 5LJioFxhF5NC9IbiJG/1ey7CYIsCvmLlEEUzNTM31bAkNbQKz33a/DvhxEvHUoAJzgnsUS VvlYoNivBO5Rc65PFt4Nd7rVl2riz/E= X-MC-Unique: ipV6PnBsNTyxy3yjjMQcPw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Lqkb4fOqLW6z91GNCzD+oIYyhISDu9h7dgaadXi5FqpuISqLwzNqFwwqxVc3qRPNZ7t7qknWslMCnvHqxZVdwfWUJTowN/0BATaBFnUFDrUqUufgHLJdBH6RumldcDERrMPfnFbkOBXnzRGow9RyKv0OYDvoiMfE1vih/6JhSgX16WicLpFZAXGgSJUlAHfJHVwAUqhjXlhZs6eAhbirTuqf3HMapKBlO3V3JRyN7L52yTIJq1aRXeTkQOJhp5ES8Q9AaGr2lnXlt9KI9IBb9Bc2lqMzLhHmuIkY821WbQMpCIzvJA1fPuZhxoL3jTvWSDAlHCL0hA9R7nrUBZW4Pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=Poou7+ywHc4+47fsnUn586v0ma66GxF2Bm5uaMw2apo=; b=OafK9F/udmJjYocg0DJ1QQvIMYy+x4Y00+tCEMUII2OvuZKqLgqFZnqX7PyDyz4cEaO2Fs1XoWvK3n9zReJAlrSDzljO+jycBH1FB+ZkWvD8SB+G82KpnQHL7WnyoGRO0zNcMMVb3T1bfaNM610vY6r42+cSbUfF52qChtVKz5gc/ynBi7OrKUIqX8ivH8yqa3Ue+KEmbvVRmNtGd83/qt4aFn/riSNHkbAQhZrlhcjZU2WvVKS8Zame27hlS8yxSocBPrP6vfgzvzibPg9VkHWlsXKqSxzt96OFsab9Obc+uCabCj9uWk4nkdMZWNy4RfrrOM5+8nl/ETADR0F+Kw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <53a64a0c-6286-01e5-7eab-1de1543a9241@suse.com> Date: Tue, 26 Apr 2022 12:23:21 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: [PATCH v3 3/8] libxenguest: guard against overflow from too large p2m when checkpointing Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , Juergen Gross , George Dunlap , Anthony Perard References: In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6P191CA0030.EURP191.PROD.OUTLOOK.COM (2603:10a6:209:8b::43) To DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e8779b6c-4163-424f-eeae-08da276ecac7 X-MS-TrafficTypeDiagnostic: AM7PR04MB7157:EE_ X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2iDo67v2IT0AFej4WUcufwEnd1j90FvqjDMtwKPsfiN4WWbk11eEpVZI8DW4OrlnVmd0xP/4oyOhba0xc1iE1dIMJbvEigeRHmDE22LDS16lc+iZUUMujzUV1M5S654mLWWVq/790AVVKFwv9DxVUr+Cbu7l7961Im8wx1h83hkrVCGXxkYB+hZKZ1XRlMnF7oJm0NEk82p+CcRqFcer68GJWvH7bTHjYRAJBvL6MfTtfHxcX9nxEUAf7091q+zLKktsX/MYxFutsvc7ZmGiu+lA/Le0JaKKmK+aL6IBwOUAtXEruOeBRgdujplzmN21YUWtmzJSFqT8/KcDj+qK5/G9LYBuuj8VodxMNelYFERIF/Ri6qZlsmde7vLM2isUaZ+htdbNqEtiUhIoUVEdLhnlHDsvE9NpcU7E6WDquv3aQD2hZKfnS7N+DmnbtPG5QjkWK5Bw5bL57GMG/hRDv1oqK7nnU44u+7vQ6byeBbZZbu8xpaevgHmVJ3IP7wSQWW4yV3fiZrP9CGb4HLSItM2ugtwOcFInHbtpYK3/U84tLcLaT8A6yjhTdZPAjuwobPctvJQOqSCdoiADky9HPlJGclcCHb8WGThJ2rdNh820BrhyorZFIlXMr6xxjROreaBsblI++RmzU+uoNa4lYGl6DTZXHsooopInG6u0vuzFsUq0jXfCF8lAzcoqBv2DzWZ1BMIRxEObKyTCQPwaut/GrRybbc/GTluEDjQQpoVFor86JjXyzo6NUYU6WL/M X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8616.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(2906002)(66946007)(508600001)(316002)(6916009)(8676002)(4326008)(31686004)(5660300002)(8936002)(38100700002)(6506007)(86362001)(31696002)(66476007)(66556008)(6486002)(6512007)(186003)(26005)(36756003)(83380400001)(2616005)(54906003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Z1BFcXA5ZFVJZ3pOaVZtdzd6VXdIQVUzeFhuUkJHdEttMGVkRGp2OE9kOHQw?= =?utf-8?B?N3FWN0RseWlDWUMrMW1ONjFZeE96TGx4MkJ0TklsZ0V1bWZPS2p6d2ZlQ3hK?= =?utf-8?B?cGtxVVl3M1NpRHFSV0FoME5DNW8wWEZhTDhYUU5YQjFBSTJVQ052QUhzdkVT?= =?utf-8?B?eVFJYmlNTHVDc3BNVDF2Z2Y1bDhpMXJ3SXJFOVdJSmxER0dkVmFoTmpiQ1FE?= =?utf-8?B?SGRUZXppQmUxSGRJbzBoMjRBeG9WRnRFdTVudkY0akxMRHF1NGxYMStlWjFR?= =?utf-8?B?dE1XeDQ2SEEyeHptcmlLUDhwMTlFZVIrZE1rV0VGYUx6WTRvMy9NRDBXNnp4?= =?utf-8?B?MnN5TnlLUjU3SEZDZE9NTzRpbVdSdjh0QXJaNm5EeGtObWVsb28wczlSbld4?= =?utf-8?B?NmZzMy9QdDNhV2MzTzAyZTgxOGpkaERDcVlDQWQ4a2crZ3k0R1AyVDZZYVpU?= =?utf-8?B?TkYrV1pYejJXUjlvVTdDU1JwL0l6Nk9IU2RTQmg2ZXFPNlJ4MGdNK2NUK2Rm?= =?utf-8?B?eVZlY3ZwSzUvOVdOa2prTnBoYTRKSC81WlpKd1NJblA2QTIzK3BJU0lMV0xP?= =?utf-8?B?TDQyWkQ4MmNVazE3WEhkSU1CcGFlVUl3L0tzOFJoV0dnMFhPbTQxcC9LK25W?= =?utf-8?B?cXJCTXpucmNkQzJZRTVqWlJaUDYydkVnenUvTVhuVWpRWU9FRzUzaStRb3Ju?= =?utf-8?B?ZlVFNGkxTXJSNlZrZkZnUG15OFZUei9ER2FJaVFWZDN5Y2JpRWFscWsweURE?= =?utf-8?B?c2d1KzFrbTdWV0ZNZWFlMXR2OUVTUTZGYURpblE3bkhLK0dLM0trQ0kyTGw2?= =?utf-8?B?OGVwTkdJRTBSWHJLK3hmSVV1am9xY2V2N045R3lSR2orNVU5d1pLaGN6U3ZS?= =?utf-8?B?LzFKczRyWDZmaWF2Nkc0WkVubmJXcExFNWhLVkM5MlBldkVGblhLRS9HbEVq?= =?utf-8?B?akhHVDQxVEJHeW1lRERxWCs4U2JMMk8vdEcvWDEwZ1FBNUJva0RqZDJaeE5m?= =?utf-8?B?NGRwUDZkQ0I2ZzFOWVRpVnlnVkVmdmVyUUJBSGpNbjJlWHR4REE1Yi84WFh6?= =?utf-8?B?SE1SVVk2N0xFZDN5Sm9ITFZNNVpibmZ3eW96UnhLTGpYUzFSWDhWb3JSOEpY?= =?utf-8?B?RUtUMEt5eXhGOXRzOExUOUZES0E3Uzl1aEdraGV5SVZaRGN2d3lZSmQ4UVNL?= =?utf-8?B?NWVpNlZZRGxxUHdmZnZYMVJ1V1F1Nlowb1VqNDFsOWNOcUVlSlE4a0hKUWl2?= =?utf-8?B?dXgxQ1A1d042U2ducUN3NUtEVnptbE9senVDZzczUlkzT05WN1RtQ1JCeU1N?= =?utf-8?B?MS93blgzNmNiT1VHZE15ZHczaDIrVDViOVcvM1A1VGFYRDJ2Mm1mSzFuMzd5?= =?utf-8?B?c3V5WDdGdXAyMmdON1VtdFBNSmhwUkhqaW1RaC9VenM5TlBmVHhpb0ZaSTN4?= =?utf-8?B?RTRaTGRpSGpscVRNWjVmbC90VXFPVWZUWXhiaUJYVUcvOXJTb1M5eGtDNFFW?= =?utf-8?B?c1EzMUorRFpEWGZmcmNGb1VmRWltbU5TeUdmNmp6L3E3UXpvNVN1YXRlL09W?= =?utf-8?B?MmVLQkJIMU0weE8zcWZiUWtVbWN6MjJZYnE0SGFiVmRwbXh3bWJkZk9OT25M?= =?utf-8?B?amt4UmJTZ3pDOFZqd0NvMUtVVHRLOGVnTVVISDNTdGlPb0ZMWFBkK1NNenZw?= =?utf-8?B?VVJMcXkvUnNZWXJzbUdJTkpFQWR0Wjk0bU1UdjJqbjhHaTFwWG5vZi9OSHho?= =?utf-8?B?eGdvTjg0QWFCQzl2eE9LZmxnSi9RV3dSY01RNVVUS2E2dFpzcVlNYytYU2RW?= =?utf-8?B?ZmhxZU9FQ1hzWi9OVVpQUkhzaWY2K1JtLzhJaDZ4Wk5VVTh1aVBSd01aTTJD?= =?utf-8?B?Wis2cW5Qc3FhUEVaa3BQc0pESVRYb3lpVHhnd1VxTlNtZXhTZEorS1M0RVFt?= =?utf-8?B?Yi9SVDRCSTEzWll0YjJidkNvaWdPL3JkVVRSMlplUFBQYTBoYzI2Rjd2M1RX?= =?utf-8?B?WWdIMWFjOWp5TmNDTXVzNGFGVjFqS2lkbmhPbjQwMVhRTG5IVU1ydmFUb1hB?= =?utf-8?B?K0dGTEU2dERTZXdudGJDTU1CS1FYQloyUEhiUlRtVFIzaXYxdlhTYWdrQkVD?= =?utf-8?B?dkw3TDB6Mm5sZmFvcHNtc0h4S2FwQnZ1U05mWGk2NW9mUDZuQmd6MWJ2Ujkv?= =?utf-8?B?VEpEaHBNZ2ZGZWh2S1hyQTJsM05YaHlQSDY4cUJyaGJ3MHpubExLdHBUNmxx?= =?utf-8?B?Uk5DeWN0akZJSFpucWxCbSt1MHlJejFRbmJRK01Fc2tVWmlPMVhjNkFxOEl2?= =?utf-8?B?dGZQb2crZG1yTis1QjlnZEZOOFB0bTRnRDVmanR4UjBPY25hbGUwQT09?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: e8779b6c-4163-424f-eeae-08da276ecac7 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8616.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2022 10:23:22.9270 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YFzjwZRNhgVTL184s5Lrk72Zyjz+NI+Ea3fjUTe+UATCcnmHkyUQr9AKcTLuNdxUhjArOeLBjqvzv9XtS5E4Ew== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB7157 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1650968637033100001 Content-Type: text/plain; charset="utf-8" struct xc_sr_record's length field has just 32 bits. Fill it early and check that the calculated value hasn't overflowed. Additionally check for counter overflow early - there's no point even trying to allocate any memory in such an event. While there also limit an induction variable's type to unsigned long: There's no gain from it being uint64_t. Signed-off-by: Jan Beulich --- Of course looping over test_bit() is pretty inefficient, but given that I have no idea how to test this code I wanted to restrict changes to what can sensibly be seen as no worse than before from just looking at the changes. --- a/tools/libs/guest/xg_sr_restore.c +++ b/tools/libs/guest/xg_sr_restore.c @@ -424,7 +424,8 @@ static int send_checkpoint_dirty_pfn_lis xc_interface *xch =3D ctx->xch; int rc =3D -1; unsigned int count, written; - uint64_t i, *pfns =3D NULL; + unsigned long i; + uint64_t *pfns =3D NULL; struct iovec *iov =3D NULL; xc_shadow_op_stats_t stats =3D { 0, ctx->restore.p2m_size }; struct xc_sr_record rec =3D { @@ -444,16 +445,28 @@ static int send_checkpoint_dirty_pfn_lis =20 for ( i =3D 0, count =3D 0; i < ctx->restore.p2m_size; i++ ) { - if ( test_bit(i, dirty_bitmap) ) - count++; + if ( test_bit(i, dirty_bitmap) && !++count ) + break; } =20 + if ( i < ctx->restore.p2m_size ) + { + ERROR("Too many dirty pfns"); + goto err; + } + + rec.length =3D count * sizeof(*pfns); + if ( rec.length / sizeof(*pfns) !=3D count ) + { + ERROR("Too many (%u) dirty pfns", count); + goto err; + } =20 - pfns =3D malloc(count * sizeof(*pfns)); + pfns =3D malloc(rec.length); if ( !pfns ) { - ERROR("Unable to allocate %zu bytes of memory for dirty pfn list", - count * sizeof(*pfns)); + ERROR("Unable to allocate %u bytes of memory for dirty pfn list", + rec.length); goto err; } =20 @@ -479,8 +492,6 @@ static int send_checkpoint_dirty_pfn_lis goto err; } =20 - rec.length =3D count * sizeof(*pfns); - iov[0].iov_base =3D &rec.type; iov[0].iov_len =3D sizeof(rec.type); =20 @@ -488,7 +499,7 @@ static int send_checkpoint_dirty_pfn_lis iov[1].iov_len =3D sizeof(rec.length); =20 iov[2].iov_base =3D pfns; - iov[2].iov_len =3D count * sizeof(*pfns); + iov[2].iov_len =3D rec.length; =20 if ( writev_exact(ctx->restore.send_back_fd, iov, 3) ) { From nobody Sat May 18 23:55:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1650968663; cv=pass; d=zohomail.com; s=zohoarc; b=H7yi8HCtI4PcguL/PKyQJHMq5m0IfldbPBXjxKGYlMfSdty4DAdc0wSpPCNztxj7BWsY3CMspkH80D/GGHgp57CdgaVA+oq43mMriGRf61/2U8T5V7fGyCSriG9AO4iCGTPeQVncE+fR0U6gSdTerDtigs3zyhgTHKhqy/X4MYI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1650968663; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7XE0MZ5Q/V0/alHvDtFRmInLwfamZyLpxplt2pkODz8=; b=QVRnWbxEsg5W/d8zha73SXFaldafM0r117TXvuP8nCg93w9y5hx8pzR3WKwSJH7xtcU3FaBcNhmFcoAxMBMWHBj+2ugsQPZVJ8bRwDh1AsYodGXbsvewgj2asMoZvu/URlKVdV5vX27vtLqXDzXRpGCzCFzfjjJRaEWKwqoaqG0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1650968663031262.99503138861235; Tue, 26 Apr 2022 03:24:23 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.313699.531391 (Exim 4.92) (envelope-from ) id 1njIMR-0008C8-2f; Tue, 26 Apr 2022 10:23:59 +0000 Received: by outflank-mailman (output) from mailman id 313699.531391; Tue, 26 Apr 2022 10:23:59 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njIMQ-0008C1-Vi; Tue, 26 Apr 2022 10:23:58 +0000 Received: by outflank-mailman (input) for mailman id 313699; Tue, 26 Apr 2022 10:23:57 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njIMP-0006S6-C6 for xen-devel@lists.xenproject.org; Tue, 26 Apr 2022 10:23:57 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id fa69d5e6-c54a-11ec-a405-831a346695d4; Tue, 26 Apr 2022 12:23:56 +0200 (CEST) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-ve1eur02lp2055.outbound.protection.outlook.com [104.47.6.55]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-31-05FTq-RQNNW-XRPLGOZsDA-2; Tue, 26 Apr 2022 12:23:54 +0200 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) by AM6PR04MB4245.eurprd04.prod.outlook.com (2603:10a6:209:4f::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.21; Tue, 26 Apr 2022 10:23:51 +0000 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f]) by DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f%9]) with mapi id 15.20.5186.021; Tue, 26 Apr 2022 10:23:51 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: fa69d5e6-c54a-11ec-a405-831a346695d4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1650968636; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7XE0MZ5Q/V0/alHvDtFRmInLwfamZyLpxplt2pkODz8=; b=P0MJVeAB6UEjCsi/r6Zlz39ExjXLUzY3kMOcCk+zPodraQb/llf4r59p5IZHFRDAXFrjZZ ByDrrHZ6lTjjO7V8V30UBoBxpOJX4vcJ2DMk1z94yMmdgcCbsLGS05phvXDFFAPCblwl7C CillbuAGf8NO6ifT3jtQxLwUVB8emIA= X-MC-Unique: 05FTq-RQNNW-XRPLGOZsDA-2 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O57Qh6FhRQ0Xc8/yaMe26SYHIOBBRcV2A2QXeyX2OtPC2q6IPpiysUXiPnFcyFzK9ZK3NdyvU9LAD5qRTxE45NOAdPmhJUzo8t4ziMBciMqjiDAk5K8l3dwjNx9CISK0WKlEN0xWM+bns4vNnhkiHHfX9eLcSub2wj0cpgfKfJcD2pdu5Ujx+/q/GTw8RMNRCCRPHFBk8Wg5cHPjaxz7Xw/2jsdb/hR9wtuQQzTOBHqyhSc6MgwWt8Yhn/EKqfIJKolxlRFKy8bZdF3epQ23qNO7C4JYXBtJLVaVct+BhMjmo8UXtpePgRp2g8rfhPPVqH7OADWwN6RY6pWWVyN9dw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=7XE0MZ5Q/V0/alHvDtFRmInLwfamZyLpxplt2pkODz8=; b=FV7IjQn4DEXPLLcYFUqPyaSY5ExVF2ELKJzKoGyAL3xY9IYC61MWgcXt6WQRmICs2p/ZsRKhjqqz3IZIX64objIj9H+hU3nARo2ZrvD04Jzkr+cp3UMJXolKUcEq4THV6GppxfSpVYgvRt0Jz1tEB1unfcAuDkXUThboyQRNayLyvWCa2/VoczsJkBqifxzehKAPNnIjf+ehKle0U863YZRie42XwmPlf12HwFB9p5uOmYiKgMUEEyFOwLYun0Y3MD04Kkrd+H4Tr6T63gAcq7KNFRgvMIIHjUe9EQrkQl9qvZA2jcO1ZpaGGEtEQCVcKaHLBs2B16YfgGkBiP3rQA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <1744d775-4446-69b4-152f-c81d36e4996c@suse.com> Date: Tue, 26 Apr 2022 12:23:49 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: [PATCH v3 4/8] libxenguest: restrict PV guest size Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , Juergen Gross , George Dunlap , Anthony Perard References: In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6P193CA0064.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:8e::41) To DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 635dfd18-0c15-4153-b886-08da276edb94 X-MS-TrafficTypeDiagnostic: AM6PR04MB4245:EE_ X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DjYboPnQ/p/2Zsazk6LIrJywIyRlsHPxOTqzm7vuLH9yYmk1Hum3hbf/znFQH6c7N+frPkUQ3w3AyKHs01lUFLY0l+HrXqy4QGDdMgj06eW2ij0H7A1MSH7oBpHd1XbYVDoqgyV/4DxhS+WKofJwBjkOoGPoozLvqL1vwa0MHDEnCLCXFSqjpgRLwQk0Kl7w3N71xxl2QzqsFLnF6qh+9IT3hvcEzzw8x5noMBUTnOALNKkEIaW3sx5sPE1A4R65TeuGnXhTjmW8Rzjv6MU+1yEUbDb9Zp3WFWcrtT8TyiwkztcjBki4cD0gzpMMGfI8Q52+BiQUCMz8FtLcgYLOCm2gdmX2gjWvpjrFboR95j1mrMPRBFHZcBhxw4Y6fpdeRxARCdttidEXmgjSFaKiVvsD7n7gOI43cfrW9dUB1B79bWvijqhcID5L6Pcs0g7ZDV3Z8Lg+HNPbY/vPi+DE3vIfgfDLXmOor8XjvhcGaM/LIJT4TMdNn/xuoXb+GDhJ9x9LGlqIptGZ7T6BVdY2ptLV3ZoGOBifsfvfRG144BDy3t4SJJRXlBGymYj/ILUUPmzFmz279WuhgqaRky6z81XK11N1p1MjXI4NbGr9WMRXPLG4jDLeJMhfIJOKEtGy3pmkvWBBcqUlWpNyTU6/SfxtR7RJfY78ikiTFm3YrD/FCeQHoKzBTT6zuFVBHfcyu4363Qme6p0yUlg6p5q0Hd/g0s09Cq1614jy7rYxGYU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8616.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(2616005)(31696002)(508600001)(6506007)(6512007)(6916009)(86362001)(186003)(36756003)(31686004)(8936002)(4326008)(38100700002)(2906002)(5660300002)(66556008)(66476007)(66946007)(26005)(316002)(54906003)(6486002)(83380400001)(8676002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bk1sbkdvcHQybXpnenN2ejR5YS81VDY1SkIwSmdxT0VDRy9ZdElVVEJrMDhk?= =?utf-8?B?VFF6S2tZdTIrWlJhc2xNKzJjWkZWTUFiU3o1bWNNM1dTTk0vVmtYdXZsQU9Y?= =?utf-8?B?V2NWaXBsMEFCMDVUSkp3OE5ZV2pIOVY0MzdTKzltSFFMZy9xbHU4Vjl2V1RS?= =?utf-8?B?aE9lWVp6cDJDbFZnTXJtemliL09MMGpOMWZkWXF3THN2SGZTcnFjN2tTc25r?= =?utf-8?B?N0lWc0FITVZSVHpDL29QbWI1ekNJNWpDQ3ZaY0svQzhQT2lmN3FrVGhEMld1?= =?utf-8?B?dFlCM21qc0tXaUhnaG0ybTdQZE9TWGtqM2RicUFXelVpNWU4d2t6RU12WVJN?= =?utf-8?B?ZThXa0hSWW5HLzdIWXFFdkxXbzBXRXNLalp2NE9FN3N3QTkvR1lBdTAwVWcw?= =?utf-8?B?OWxRSFVqVjhvejJhaGFDT1puQzA5alJZSmpNdzZPVDl0VHUrL2NuckNxZEZH?= =?utf-8?B?ZHhvN25iNzcyS0NIWnBlWmFVejA1elVvbDJyZ2tGMk9EcUE3Qmx2UnJncXcz?= =?utf-8?B?YloxSWhPdXU4ZUlWZ3UrTzFTMnZKcXp3YVIzMG1rai8weGgrRzkrR0xwRStp?= =?utf-8?B?WmljbFpWREoxTzF1UzVlVC90VUl3RTN4QWRvYzl5VWZsVk5NcTZFZTVPS2cy?= =?utf-8?B?OFFUZysvdDNKa2hzcnkrL1ppVklyMGkvQTEwSTFsVzBGelJ2cExjUEN5eGRw?= =?utf-8?B?emo1ZEsxYmJ2M3o2SG1aWFRTOFhXOUN3RnkyRC9Bd1dmdlVaSmk2V2dBUmVW?= =?utf-8?B?aWx3OTNtOStoY0VETU5nS2JVd0xPcHNMV2JwSDM3bXFIajV3NXcyTlNJcURS?= =?utf-8?B?QWhNRGVaQUpkSXd4TEVLdVo5WW5UNzRhQTlqZWE1VnRnaWFTcTNvTmFCdHF1?= =?utf-8?B?TVFEUDRadGR1clVERW84dzh3cGErd3JFN2d5M2JwaWhCeEZwZlFsSEtwTWdt?= =?utf-8?B?bTAybDN6Rk44VTVwQlJzR2xKbWttK043eDJJamY1dCs1clBjUEtYdjE1ZEE1?= =?utf-8?B?QzlxL1dWVmlEc2pOR29BZGRIUmFsclVIajMreEt4NklSMDltNlRBK0VISHpD?= =?utf-8?B?RXUwMkJ1MC9melVvTm1rQnFpeVVDdGFNRmtIRWh0SkVpSW1YbVZrR2FSZU1y?= =?utf-8?B?bUY2b25FdnZIOUZsRm1nRDEvb0NqVlN0Y0pKTzFTUDBkUzBIUVhwZFJmTWxM?= =?utf-8?B?eDhLdnA5dFJkZEV4QUNVZ01HdWRjbFlUQUQyS2k1SGVQc2NSa2g4M3ViU1gy?= =?utf-8?B?MTdiOUJWa2l0UXVVUHJybHBMQkxQS09kanNkakU1ZDk1UEV2KzhGWWZPN2xP?= =?utf-8?B?T2tpM3k0SUlIUHExTGw5bVZGM1cwMjRVdmp6TW96Mk1oUmZVRXA1eUlLWnhO?= =?utf-8?B?Y1lSMitoendHRG9VWHFpYmJZeWhPbCthVEZhL096eHFyeFpDa0pGZy9kai90?= =?utf-8?B?dnBzeFV6WlAzdzcxSU4wMVVjVHN3TS9IcHZsdUszYmd2cHVNTEx2eEdubkQ3?= =?utf-8?B?YU9wZElDbWV5eUxkVmY2OWtkNTMyOUtYS2VpZGRTUlJaYTNIN081a3g1bmww?= =?utf-8?B?TVRPWXk5YW50a1EwWUYwcGpVZHQ0NDhjeFJadE9yOTJNTFNEdDMwMXJ3ZWk5?= =?utf-8?B?dGdmY2NjamJBV0Njd244SEk2enhnQm9IR2dBUVh6YXV2T1V2RXFIRjAyUmt3?= =?utf-8?B?Ym5LakE1cXp2T2c4OXhNdTlpQ2x0NnFBNFBFSUpRYU1TdlNKVEptZ0p0bEFz?= =?utf-8?B?ajdnSEU5S0M3YkNLeFJKYlBMblQwZ2p4bGNHalBNTWk1L1VqN0lqZjR1dHdV?= =?utf-8?B?YVlKWTJLZmxEd3FUcXJhK09oRDdmUllPSVlPZ3R5cXplOXNhOVN1SUdlWnZt?= =?utf-8?B?M3RDMG1ldFNNcjRhYm5oSDhPOThyZ29GY0dteFVvc0ttOGprVndwdXBQL3lM?= =?utf-8?B?OSs1eVN4NmF3Mi9BaWRkbWRMenhzanl2REp5RzNEcGFEVytOMlZiaW8rVjRG?= =?utf-8?B?WEROdEhHSjlaUTdYY2JxemEyWWtUaVYwQkJydnRJaFAvR2c5OVptRmpGUWJD?= =?utf-8?B?TDNCRHhBd0JlRDlTMHNpNTJYL2c5VzNvYnpLeXZXZG1WZklQYmJsZDdIc0FL?= =?utf-8?B?aDJVZWwxdVl4dUhEc2ZWa1dwd1J5dTdqNG1kb29VS3JDZ1hzeklnZ2FPYmEw?= =?utf-8?B?akwrc2c4cW5NL0hwZGFYVTdiL2lTMEVJYUtINUlBckgzT3Y4cUtmeHE3bmVQ?= =?utf-8?B?TS9oaDdYaEtCRU5jeHdFZFBCSDR4VmI4bERpQlZnL2hJUFBrOHNGSTRqZnJZ?= =?utf-8?B?dmR1NnYyQmxSNVFBN2cxQ2lzYVNLbHJwWFlZM1NFeWRRMzh3MTd1Zz09?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 635dfd18-0c15-4153-b886-08da276edb94 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8616.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2022 10:23:51.1282 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tlmkGKa4+uwA2DbbFUXoZap0+sx7AubJo80rVCAlQk0SrCi9WrspeGs4jTAckoYAISmG12e6sSUXAgf+/9aYWA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB4245 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1650968665285100001 Content-Type: text/plain; charset="utf-8" The P2M, the use of PFNs, and hence the maximum valid PFN are purely software constructs in PV. In principle a guest is free to use arbitrary PFNs. However, at least page table normalization requires that PFN space be, like MFN space, limited to the architectural 40 bits (52 address bits). And of course a 32-bit tool stack places further constraints. Bounding the values also makes sure that various subsequent calculations won't truncate values and then continue with inconsistencies (see e.g. fl_entries vs ctx->x86.pv.p2m_frames in map_p2m_tree()). While there correct an adjacent error message with wrong way round wording in restore code and another slightly malformed and misleading (off by one) one in core dumping code. Signed-off-by: Jan Beulich --- v2: Integrate into series. --- In case the save/restore changes don't make it obvious enough: It escapes me why struct xc_sr_rec_x86_pv_p2m_frames has p2m_pfns[] with uint64_t element type but {start,end}_pfn both as uint32_t. Imo all three can sensibly only ever be of the same type. --- a/tools/include/xen-tools/libs.h +++ b/tools/include/xen-tools/libs.h @@ -13,6 +13,10 @@ #define ARRAY_SIZE(a) (sizeof(a) / sizeof(*a)) #endif =20 +#ifndef sizeof_field +#define sizeof_field(type, field) sizeof(((type *)0)->field) +#endif + #ifndef MAX #define MAX(x, y) ((x) > (y) ? (x) : (y)) #endif --- a/tools/libs/guest/xg_core_x86.c +++ b/tools/libs/guest/xg_core_x86.c @@ -59,6 +59,43 @@ xc_core_arch_memory_map_get(xc_interface if ( xc_domain_nr_gpfns(xch, info->domid, &p2m_size) < 0 ) return -1; =20 + if ( !p2m_size ) + { + ERROR("Cannot map a guest without P2M"); + errno =3D ENODATA; + return -1; + } + + if ( !info->hvm ) + { + unsigned int guest_width; + + if ( xc_domain_get_guest_width(xch, info->domid, &guest_width) != =3D 0 ) + { + PERROR("Cannot get address size for PV guest"); + return -1; + } + + if ( p2m_size =3D=3D (guest_width > 4 ? ~0UL : ~0U) ) + { + ERROR("Cannot map a PV guest with invalid P2M"); + errno =3D ENODATA; + return -1; + } + } + +#ifndef __i386__ + if ( (p2m_size - 1) >> 40 ) +#else + /* Very large domains (> 1TB) will exhaust virtual address space. */ + if ( (p2m_size - 1) >> 28 ) +#endif + { + ERROR("Cannot map a guest with P2M size %#lx", p2m_size); + errno =3D EOPNOTSUPP; + return -1; + } + map =3D malloc(sizeof(*map)); if ( map =3D=3D NULL ) { @@ -333,10 +370,30 @@ xc_core_arch_map_p2m_rw(xc_interface *xc =20 if ( dinfo->p2m_size < info->nr_pages ) { - ERROR("p2m_size < nr_pages -1 (%lx < %lx", dinfo->p2m_size, info->= nr_pages - 1); + ERROR("p2m_size < nr_pages (%lx < %lx)", dinfo->p2m_size, info->nr= _pages); goto out; } =20 + if ( !info->hvm && dinfo->p2m_size =3D=3D (dinfo->guest_width > 4 ? ~0= UL : ~0U) ) + { + ERROR("Cannot r/%c-map a PV guest with invalid P2M", rw ? 'w' : 'o= '); + errno =3D ENODATA; + return -1; + } + +#ifndef __i386__ + if ( (dinfo->p2m_size - 1) >> 40 ) +#else + /* Very large domains (> 1TB) will exhaust virtual address space. */ + if ( (dinfo->p2m_size - 1) >> 28 ) +#endif + { + ERROR("Cannot r/%c-map a guest with P2M size %#lx", + rw ? 'w' : 'o', dinfo->p2m_size); + errno =3D EOPNOTSUPP; + return -1; + } + p2m_cr3 =3D GET_FIELD(live_shinfo, arch.p2m_cr3, dinfo->guest_width); =20 p2m_frame_list =3D p2m_cr3 ? xc_core_arch_map_p2m_list_rw(xch, dinfo, = dom, live_shinfo, p2m_cr3) --- a/tools/libs/guest/xg_sr_restore_x86_pv.c +++ b/tools/libs/guest/xg_sr_restore_x86_pv.c @@ -709,10 +709,23 @@ static int handle_x86_pv_p2m_frames(stru return -1; } =20 +#ifdef __i386__ + /* Very large domains (> 1TB) will exhaust virtual address space. */ + if ( data->end_pfn >> 28 ) +#elif 0 /* sizeof(data->end_pfn) > 4 */ + if ( data->end_pfn >> (ctx->x86.pv.width > 4 ? 40 : 32) ) +#else + if ( 0 ) +#endif + { + ERROR("End pfn in stream (%#x) too large", data->end_pfn); + return -1; + } + if ( data->start_pfn > data->end_pfn ) { - ERROR("End pfn in stream (%#x) exceeds Start (%#x)", - data->end_pfn, data->start_pfn); + ERROR("Start pfn in stream (%#x) exceeds End (%#x)", + data->start_pfn, data->end_pfn); return -1; } =20 --- a/tools/libs/guest/xg_sr_save_x86_pv.c +++ b/tools/libs/guest/xg_sr_save_x86_pv.c @@ -464,11 +464,40 @@ static int map_p2m_list(struct xc_sr_con */ static int map_p2m(struct xc_sr_context *ctx) { + xc_interface *xch =3D ctx->xch; uint64_t p2m_cr3; + uint64_t max_pfn =3D GET_FIELD(ctx->x86.pv.shinfo, arch.max_pfn, + ctx->x86.pv.width); + + if ( !max_pfn ) + { + ERROR("Cannot save a guest without P2M"); + errno =3D ENODATA; + return -1; + } + + if ( max_pfn-- =3D=3D (ctx->x86.pv.width > 4 ? ~0UL : ~0U) ) + { + ERROR("Cannot save a guest with invalid P2M"); + errno =3D ENODATA; + return -1; + } + +#ifndef __i386__ + if ( max_pfn >> (sizeof_field(struct xc_sr_rec_x86_pv_p2m_frames, + end_pfn) > 4 ? 40 : 32) ) +#else + /* Very large domains (> 1TB) will exhaust virtual address space. */ + if ( max_pfn >> 28 ) +#endif + { + ERROR("Cannot save a guest with maximum PFN %#"PRIx64, max_pfn); + errno =3D EOPNOTSUPP; + return -1; + } =20 ctx->x86.pv.p2m_generation =3D ~0ULL; - ctx->x86.pv.max_pfn =3D GET_FIELD(ctx->x86.pv.shinfo, arch.max_pfn, - ctx->x86.pv.width) - 1; + ctx->x86.pv.max_pfn =3D max_pfn; p2m_cr3 =3D GET_FIELD(ctx->x86.pv.shinfo, arch.p2m_cr3, ctx->x86.pv.wi= dth); =20 return p2m_cr3 ? map_p2m_list(ctx, p2m_cr3) : map_p2m_tree(ctx); From nobody Sat May 18 23:55:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=fail (BodyHash is different from the expected one); dmarc=pass(p=quarantine dis=none) header.from=suse.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1650968713505262.135990211076; Tue, 26 Apr 2022 03:25:13 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.313705.531403 (Exim 4.92) (envelope-from ) id 1njINK-0000Oh-D0; Tue, 26 Apr 2022 10:24:54 +0000 Received: by outflank-mailman (output) from mailman id 313705.531403; Tue, 26 Apr 2022 10:24:54 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njINK-0000Oa-9z; Tue, 26 Apr 2022 10:24:54 +0000 Received: by outflank-mailman (input) for mailman id 313705; Tue, 26 Apr 2022 10:24:53 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njINJ-0000OM-9R for xen-devel@lists.xenproject.org; Tue, 26 Apr 2022 10:24:53 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 1bb3dfa3-c54b-11ec-a405-831a346695d4; Tue, 26 Apr 2022 12:24:52 +0200 (CEST) Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-ve1eur03lp2055.outbound.protection.outlook.com [104.47.9.55]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-18-1QHNAdYYNG6iJ4FVQXsp7Q-2; Tue, 26 Apr 2022 12:24:50 +0200 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) by AM6PR04MB4245.eurprd04.prod.outlook.com (2603:10a6:209:4f::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.21; Tue, 26 Apr 2022 10:24:47 +0000 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f]) by DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f%9]) with mapi id 15.20.5186.021; Tue, 26 Apr 2022 10:24:47 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 1bb3dfa3-c54b-11ec-a405-831a346695d4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1650968691; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hFvLQFBwZFZ943lsxU2fJYaMKf9GbC+9+84gYPaYpQU=; b=B8oenL1GHZZ1IRScLfbi/hpPVXwtIX/wpmNWpPGbEQ9VOm4yKtqFZrgGUkii1L/G5P2fog cwfe+xgCCfrwPKW0LZEgxqcM/eqFTGbCfH5t7jx+W+eNgRUeJP24ymNvSQRQltB/sntEod sDBVscdGsOFK/DO852pCMh9fjdGM47o= X-MC-Unique: 1QHNAdYYNG6iJ4FVQXsp7Q-2 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EJMZb0YFQg6Vgc3dr0BrFVZO2A3Ertnoj0WIucML22+TaT11MvOL5v7QM9D0Ts5wJy3KrhAlfziIKk5UIUNEjqzQYhhpvNb3D5UYs1tIyxM/joTcao2L4gJCm/uMr6NPtbnlfTgnfjxSN9wQveKvCuBfxykbfCWi1gbTuaDn38uaCxr9Fn50TOCMP/0uQNy6uROVnUnrk+lA1ur1ns6KO8phOB+3ftdvAJE9PpNyhB/gB4pmI2sqHhnOzBagM01NTvAgAMwU7XIGO3LqXWu6IShqEm42CHjj1r2T02VcbYwH993a6kqoavJBLvbj+tPBhY1A+wXhN46+e+Qe8vYmFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=3OGFK6t8lL7gQvWrJvHU3Kqh9Nzt0xlpqwNOIjr8wDA=; b=Oo6mlrmHOaj738rt5GqDGWjfTcaNdVAhl6sMXmzbPxctPETg0SLMwOmNNUSoc91OFQEYSSCcYU0+P/zh/YMKh3OXsHqSmgIuTpmxb6koLDcPE2dyR0Mum/Xn2N5WCJKW6LhA18A61hH90WEi3O3RIwheyzGS5VyQBoyGbbK9L62dJX4zRVyBC2TJ7+DFhgMpIdwCBLPIx5hfKfZleRuKPMsY3g0F4Xsa0L03G+VkrI803ZovA4Y4ox/z393VUK6emoQ0Wkg+pdzQx6IBDi3PtLYBAbKiapXHzCI2XAzOTPHOswBE+e3V1xxLLF4b9Q5mxdb4IQ2TH8QqRajjqBXRkQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <1b24d2b5-14ff-6e4f-6fa5-d91d75e315a4@suse.com> Date: Tue, 26 Apr 2022 12:24:46 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: [PATCH v3 5/8] libxenguest: deal with log-dirty op stats overflow Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" CC: Andrew Cooper , Wei Liu , Juergen Gross , George Dunlap , Anthony Perard References: In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS8P250CA0002.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:330::7) To DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b10f9922-ef7d-45e7-9214-08da276efd38 X-MS-TrafficTypeDiagnostic: AM6PR04MB4245:EE_ X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: n9X5T8hx4jB60E3PWHnxpf1XsKPUTIChMdEwHdRsZBJyTOnMKS5dOi8bJ+lq22Zw3TjrL4oMNagIje2ISBNi59yIdhRtK/FxdSMGlsQq/sTW1/2x7/Kt3cRcLA2eBM52lmwWuOBF4c5yP0uXuC3XSRHZD7rvQVW75aRHcgldhbmb7RrHCG5NYyJNRtz1tTSNKwMEzLKtvBMRDbGOEcfUGjEDKNtb7QuXkzaDPwFYk3cpK/WQhPvIx+iYQw2NEG2pO/BZPnTaDFt5Uf1k2VXNIsVsIQRaumGpImAxlGtMz/m5OXIazTFqEegHcrv1H9mLoNb6ZBcQxv34mrp7igOW+6gMy9ZamPrp/Caalo4k8Yc4NlD9UPD8bQ8ZJIZAGseVLAn1jTYln45iUyYZz5RvcCraz/45MR+/PvEVGS0PNTvIb5h0vzrQpvXrxvFBEHWKYQ0tnoTE2vqraKzLCyfP3mMTJkmJLJBKrcbsk7zxKhyafOXMBJhwKb+D7SsMP8pTyADasbuhPDhYtoZbrZySosHK0qLIZHLFlD1PWNTIf1Z/wM5+bjV/znPHOLqnD9VZEG0SxmbWU8KV2ww/wVIZLen39hKBAlkNs9MQfchhGC0bDe88mKjy9CWlLh9UQTMF00kxpk6KgwPVJZS5TJJ9uF3pekoO4lUnm3b4Of7dy1u1lNsSg3oAMCsIwiqsaeizUy2BT+Y1oGWHnmnkn/+BZrSlswTtk4vnruG+FhGU270BfVhif6D2Ndo8rdm9GssY9ajnNfb+8GqrCtu6UAE4gQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8616.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(66574015)(2616005)(31696002)(508600001)(6506007)(6512007)(6916009)(86362001)(186003)(36756003)(31686004)(8936002)(4326008)(38100700002)(2906002)(5660300002)(66556008)(66476007)(66946007)(26005)(316002)(54906003)(6486002)(83380400001)(8676002)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?c89B0axlDoAn2GDpXRrBO8yToGYF7KXCSXzo9CmM7XclDj5bj5jgZXzd9X4F?= =?us-ascii?Q?ahOM9AfN/Ov6MjbzghE09iLMDR5bryTh4fF4kHC1ERTj70DsGWEXLyoyheCI?= =?us-ascii?Q?cS/D/Cul57xToipyg/TupECtsRjS6Xu+qYJN0pQFv6RZqARx6mWsesJmW26U?= =?us-ascii?Q?g9uTqOt5w/cnw5ud0v4VnWPT+/eGbJyCK6MX8xv4PDHGjpD5f7Or0FTFI2mh?= =?us-ascii?Q?MsXpLtq7FM+Gc9NL3J3+t65Sd7pAyp1cI3JpLDQxMXAbs3Y0zom3ieQqS2uQ?= =?us-ascii?Q?VVRWOszxQKX5jEM6JVpx1ScdKsKvjk8+pftayP6xOwAk2VZA/fOfHTq4XO7f?= =?us-ascii?Q?f820dUMn7iz96FUnaN7uFa7khbhbL3bJ4VcMmXL4W1CtdlxgJegTfLKewr8w?= =?us-ascii?Q?Jizg8TAJU1esAfgOtsS9uhbN9LvGMl1QPObT3UpuxcbhyROlaBw31y0c0gSu?= =?us-ascii?Q?ZDDrrUjd4JinhETzu2n5v+/Lj8hq4n9QcyJBomdX/nZf2FGIvZ+y6HsD4mmc?= =?us-ascii?Q?TZyEuTmor4Cld8CNzKImM1+qBEw/1Gj/Bj1drt1V5AFNNyl3FviYDcTp8aOP?= =?us-ascii?Q?yM7XVJL0iWLD21sehKZd9evihcqi388zTwE4Z2X9TnWXkIrpK6p43z1iqUCO?= =?us-ascii?Q?MN5Ca5MNONsWzwHA31H7ER3zsk4DgTkSK5QUPHa0z09FGXMRbpaAgPeE/LdT?= =?us-ascii?Q?arOTQdqFs8zmfJJCBs53GaY3J5u0t55ALYKLSSDuMeYuYKgkm/mu/1RgZA/O?= =?us-ascii?Q?SSJ/gqVH1sd4m7fAGSYFpsz+2yorpB0JdP5xV8QcKohxuJLNoMy6fOgcUuPE?= =?us-ascii?Q?rQEbfXgDeZOrDxBBtSHi304sGLI8yJ+mltoF8s7JKQuKgw8FB5O1Zz+0Z5fh?= =?us-ascii?Q?+C7sM/r/CoyiUBWpCCxIm+9MRv3xoaBuFZtIMG1ndK2AXTB10hPmas2Qqv8q?= =?us-ascii?Q?jUeiTnN3cbsIJuHcO7NnbwS3r3pwBi8cUOxAbsPoUbOFH7fsOspwQmAX8Wbr?= =?us-ascii?Q?tqkOGIqh5tpBvXZ+zShlEBCgpUo1/OzjndQXtefnmBXeneBPFmsLa7O/juSX?= =?us-ascii?Q?xaLc/I8QRGv9KkyYCmFTCCSS6EXpz0Qks7GuyQk4TNeq6jU2eZUyv5aSiRIv?= =?us-ascii?Q?CjBPyjqJluWFiIFa7o/nE1FSDMqsblrU0zIhaZv/eClRQhHrYcTyPu/x0Wfo?= =?us-ascii?Q?/zlWnOxGqxLa75lhn/2FKVvQ5EU63no17TMGtLonaLmRWVO0G1Ob7+na3Mxo?= =?us-ascii?Q?AeZSmLAkIZRkDstPwt23wONYlSnP04OLuzac434ZuYZxQ5tbWiQ6BL1uhxpA?= =?us-ascii?Q?03partCZlgsfQLJIopQijDNjkRUnyjW3HR8q2rcSl25TdymGIDORYX7t31hb?= =?us-ascii?Q?z5oqZrG4EJ3WT5SwhUgjzK8YBzVeKbI7x2PC5qN3+gs89gAodHGtp8ae9JVX?= =?us-ascii?Q?cPUpnt2wYXnCq8hwlhnSX+/qmPWvAJCLf4PMvsTozyz+ncgIpbQ0st6qJ0t4?= =?us-ascii?Q?e3ksSAY6Js6ez2skiEHyaBT9rTLxSFhisogbZv9Eh6guEBjDIm5UTfxMYYQL?= =?us-ascii?Q?ZKjQQJuf2Y4WS9CgkuSMsLj4QQCujn1FgRSP8Q1nFxn1DPrWP419dkgbKvvj?= =?us-ascii?Q?YSbPmgtz+KUmrhmdk1UVQou4MZVNOBci3tpCvsqsVOvFmCWc7P+S1s/78oc/?= =?us-ascii?Q?POjZMfAas8UQcjF3yNxdfSH77MzGY729OB2HJamJmvs/4405/T7q8M1fwUYG?= =?us-ascii?Q?C9xFt3Ywig=3D=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b10f9922-ef7d-45e7-9214-08da276efd38 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8616.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2022 10:24:47.7387 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VNFZxoShOn2H5jv/F0NglxLAcX4RnlxBbhVkdkTMDnCmjlmVvB6+w7FqPat3sMubNKwGHPfZ5CTLMPb/DN069A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB4245 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1650968715657100001 Content-Type: text/plain; charset="utf-8" In send_memory_live() the precise value the dirty_count struct field gets initialized to doesn't matter much (apart from the triggering of the log message in send_dirty_pages(), see below), but it is important that it not be zero on the first iteration (or else send_dirty_pages() won't get called at all). Saturate the initializer value at the maximum value the field can hold. While there also initialize struct precopy_stats' respective field to a more sane value: We don't really know how many dirty pages there are at that point. In suspend_and_send_dirty() and verify_frames() the local variables don't need initializing at all, as they're only an output from the hypercall which gets invoked first thing. In send_checkpoint_dirty_pfn_list() the local variable can be dropped altogether: It's optional to xc_logdirty_control() and not used anywhere else. Note that in case the clipping actually takes effect, the "Bitmap contained more entries than expected..." log message will trigger. This being just an informational message, I don't think this is overly concerning. Signed-off-by: Jan Beulich --- TBD: To address Andrew's objection, J=C3=BCrgen suggests to widen struct xen_domctl_shadow_op_stats'es fields; yet within this same series we had settled on there not being a need (17e91570c5a4). --- a/tools/libs/guest/xg_sr_restore.c +++ b/tools/libs/guest/xg_sr_restore.c @@ -427,7 +427,6 @@ static int send_checkpoint_dirty_pfn_lis unsigned long i; uint64_t *pfns =3D NULL; struct iovec *iov =3D NULL; - xc_shadow_op_stats_t stats =3D { 0, ctx->restore.p2m_size }; struct xc_sr_record rec =3D { .type =3D REC_TYPE_CHECKPOINT_DIRTY_PFN_LIST, }; @@ -437,7 +436,7 @@ static int send_checkpoint_dirty_pfn_lis if ( xc_logdirty_control( xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN, HYPERCALL_BUFFER(dirty_bitmap), ctx->restore.p2m_size, - 0, &stats) !=3D ctx->restore.p2m_size ) + 0, NULL) !=3D ctx->restore.p2m_size ) { PERROR("Failed to retrieve logdirty bitmap"); goto err; --- a/tools/libs/guest/xg_sr_save.c +++ b/tools/libs/guest/xg_sr_save.c @@ -495,7 +495,9 @@ static int simple_precopy_policy(struct static int send_memory_live(struct xc_sr_context *ctx) { xc_interface *xch =3D ctx->xch; - xc_shadow_op_stats_t stats =3D { 0, ctx->save.p2m_size }; + xc_shadow_op_stats_t stats =3D { + .dirty_count =3D MIN(ctx->save.p2m_size, (typeof(stats.dirty_count= ))~0) + }; char *progress_str =3D NULL; unsigned int x =3D 0; int rc; @@ -511,7 +513,7 @@ static int send_memory_live(struct xc_sr goto out; =20 ctx->save.stats =3D (struct precopy_stats){ - .dirty_count =3D ctx->save.p2m_size, + .dirty_count =3D -1, }; policy_stats =3D &ctx->save.stats; =20 @@ -633,7 +635,7 @@ static int colo_merge_secondary_dirty_bi static int suspend_and_send_dirty(struct xc_sr_context *ctx) { xc_interface *xch =3D ctx->xch; - xc_shadow_op_stats_t stats =3D { 0, ctx->save.p2m_size }; + xc_shadow_op_stats_t stats; char *progress_str =3D NULL; int rc; DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap, @@ -694,7 +696,7 @@ static int suspend_and_send_dirty(struct static int verify_frames(struct xc_sr_context *ctx) { xc_interface *xch =3D ctx->xch; - xc_shadow_op_stats_t stats =3D { 0, ctx->save.p2m_size }; + xc_shadow_op_stats_t stats; int rc; struct xc_sr_record rec =3D { .type =3D REC_TYPE_VERIFY }; =20 From nobody Sat May 18 23:55:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1650969144; cv=pass; d=zohomail.com; s=zohoarc; b=haXhFdkqtK/jPEU3Y3R4qw79gH29xP07fuPrJtLeZaFkts937xJw40x9PC4p9WuBt2OdjMx4eJX6Z/9+qR3LesjiCKBDOjdbFS7pUl9SRfAC8EBYcSIMHCRzivgoEDNw8Qk04DMrc6eVGyFuEMHNKUchl6yYdI65bjLKRWFZ3Ys= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1650969144; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=CpxLoT33b7I8wFn5AiNrMktbKi2AOwgyFO+mknPIv+0=; b=UYfOSzkk9X7ckWGC/rXHVKn+kUh/ILrJA+5U3anYd4CTT6CvY+XLRcbdBZGf6dkYCO5lh5nff6QtW3fVz4lGWnF6CpBEiv/oT1PhBRjpkQpZA0AwgUgI4bNDAsQngoMlgtTz9iA+o071MlAa1XE7nklyyMP3gpluEQdwzeY+1ec= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1650969144773957.4137049281027; Tue, 26 Apr 2022 03:32:24 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.313730.531435 (Exim 4.92) (envelope-from ) id 1njIU3-00038J-OF; Tue, 26 Apr 2022 10:31:51 +0000 Received: by outflank-mailman (output) from mailman id 313730.531435; Tue, 26 Apr 2022 10:31:51 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njIU3-00038C-Kt; Tue, 26 Apr 2022 10:31:51 +0000 Received: by outflank-mailman (input) for mailman id 313730; Tue, 26 Apr 2022 10:31:49 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njIO9-000707-0X for xen-devel@lists.xenproject.org; Tue, 26 Apr 2022 10:25:45 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 3a561eab-c54b-11ec-8fc2-03012f2f19d4; Tue, 26 Apr 2022 12:25:43 +0200 (CEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2170.outbound.protection.outlook.com [104.47.17.170]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-26-HQjnU6s_OFq7ccEn-YbM4Q-1; Tue, 26 Apr 2022 12:25:42 +0200 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) by DB8PR04MB6684.eurprd04.prod.outlook.com (2603:10a6:10:105::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.21; Tue, 26 Apr 2022 10:25:40 +0000 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f]) by DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f%9]) with mapi id 15.20.5186.021; Tue, 26 Apr 2022 10:25:40 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 3a561eab-c54b-11ec-8fc2-03012f2f19d4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1650968743; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CpxLoT33b7I8wFn5AiNrMktbKi2AOwgyFO+mknPIv+0=; b=in0QdvpfjAkL0dTrSi569dZeLp4B19d1FRf9p5RqfhQK8U0kCAMXsZqX0+CMYnKDaSCioy 3Pdxf/1LFEuhryYqsZ4rXPRR+NYRRsR3dyhorG39RU7dB2bHVe1VceRyBpEKNDWUlmv6WU V340bkcQ+hzpYpMFzuAZmNfPtB2ydvQ= X-MC-Unique: HQjnU6s_OFq7ccEn-YbM4Q-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LtP4j6gnTwbLIrXrAUFHzFY822/n16j2FmyoX5UNlM9sh+TkJ0Hjj3Z0ZZ5mIawZA+oLBo18yR0vHoxAfAABum0mt4iwXGmA7J7+N6AiKhpEPwX314Hav1On8g+o0AjKH99+LEQy67fy6KdxTGU9W3/T/os1XV27jRMzVB6ORIFDg5ysZePKiGm7IfOOGSyT8jm5xXYpWVxzWgzfFAx3A1IsWPTsNvnwIxcv5fALt16oNh/hpvkH+zDZKcjPndiiutKtULyIfnKxk9AlGlNWMDxQhInJccg/G7QwZiNumYM/dN3Z2Ix22/M7uCotkt0Pq/s777Pdc2BdeQUPEJ5P2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=CpxLoT33b7I8wFn5AiNrMktbKi2AOwgyFO+mknPIv+0=; b=f8yN7f5T7cQsghg7paHTWO415OgEoBw1tngrbq4+4nYs0L2wEWoPWRIGq6GiIlBC/fEV1yPg2is3lZTYZKigP2sJ2t7t5kYYLU+YUz5oLFP9liWD7WcPRK8GE9xl/ZomUcf9QPimk6lkCeI2yemqKBtXhY+2EnWYNNhD31HQpizkCFjIBBwnxlNN5vg4lpwBCzFPc8klPd3Zi/nauRVzce+C6ZNI+Vba6CrogqQim3g11a+n8E4XYmhcRVqpINfqfGDpiwpAhS13H717MDm9TB7UIAYfpwWB1nNGyE8ZyO0AIjHlNWwOc0yAIidPLqs2IkZZBuKOkhF5pOwDSwEX6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Tue, 26 Apr 2022 12:25:38 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: [PATCH v3 6/8] x86/paging: supply more useful log-dirty page count Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Juergen Gross , George Dunlap , Anthony Perard References: In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS8PR04CA0194.eurprd04.prod.outlook.com (2603:10a6:20b:2f3::19) To DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1274e413-09fd-4269-26be-08da276f1cb8 X-MS-TrafficTypeDiagnostic: DB8PR04MB6684:EE_ X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6I7TDLLE8bi3LR8WMxc0OUSQNqGz11nIgK2sj2X1fl+yOjLocVc1uvv/07YzagZqVEU9Z6dfAViH1Lgj1daGdrVYub3SPlw5SsLiX6Yvzzo3PKWlVMmrFEgwWPacQ/Dl82pjliTnoewkYpd2t7Aq3+I0deyH3t/Yr6SiIML3oK/FPTEmx2QCaLebgdG8pEERUkEx/DNnET+SpkLDx5DcfmU7MKO/q1bNuGi2DyFhrWozgcdSj3MkaKro2pYCO8p9MpdiN6ZfGy4PwVyCFeRqeo5O9z9VEQ3yyMjiVDR8hOWMRi2yBWYFrkZF4k8aSt72KkDlvjlm4xbS/c3sAybvTScLZO9NfbuEzgOoALBOYb4ccFaSm2LVXP7ifnX2ulvBEPOZBDnVAhgJ4V0CP8cdQRNQ/ztci29JwckV1GyMf2TPDlNCR5dpYrERO+gjc79xWSC4OtsuQnVB40nuv3X65JcnX5gTAGJig81oM47TWI7KyUdG+6zm+7VeEVpb5WIwlFXwaJiWLHPd4vF4yo+aVPKZTNuWoMdnmcmHYQ3OvDgvCr6cNMRvVQm8P0yd4v62XVOomHLcRNUuAgfuRpnUWcdmVxERi6lxpX7r8GDD5lUet+QcX06CyCc5Aq7OqloB3rBfCNeNPApJbEZuADSQaz/AtSlIh6lzPfy3fTkIpYyrwoOrquohyXReyqHUCDytFSMdFfF1IRotefWE7M9+QfmE6WmjibZ9Klat/fWsZ8hjrAzQjg17f7dR+bgpZ39Tm+zC5Ui+uuQDVgZI5OEMfA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8616.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(186003)(38100700002)(83380400001)(508600001)(86362001)(8936002)(36756003)(6506007)(5660300002)(31686004)(30864003)(2906002)(2616005)(6916009)(26005)(66476007)(4326008)(54906003)(31696002)(8676002)(66556008)(6512007)(66946007)(316002)(6486002)(14143004)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aWthTHBGZmlYSlQvSEgzd1JLSlRlSXd3bUhER3ErUEJwQXZ6WUtCWjdOUjEv?= =?utf-8?B?VUJZMzJWMnBEdGZ3aVBqQUd1eFZTTXlOR01hWGdiRVA0N0YyV2F3UUVlaUJJ?= =?utf-8?B?MzZXcEIxTjdIWXN5RkxIVWliWEk4K1Q2UEFEQ1NFWjRLNjdQNkV4eGRDRERS?= =?utf-8?B?RzBTUGJubjRxblFJLzBWY0F2OTJCeWQxRURJeUJJS0JzMUx6SlI4S3dBbmlT?= =?utf-8?B?b1oveWx6V0p2YzlFaUZXS1V0UGhuMENGQ0lRMWNrTU9BUTgvM0p3OWFHWHJ6?= =?utf-8?B?WWdOV3VpcS9vYTFiK1lPcG5JVW5YNk1vVldaTit0TnhsL2xXOGNOaFVhc1du?= =?utf-8?B?djJab01rc2dTQUFrNFp3SWxmaTZkc2pTVW1ya0ZMSUhLRm40eC90MzdMWFBH?= =?utf-8?B?bllsOSsrK1pwYnZydThCL2JMcDNNZnlkQzJlTkJES1FvdGdUTEZLMUZFMjV4?= =?utf-8?B?anR4WC9XSjNpd0hCRWZDRWZsUk9CeUNuVGVWRjZKSjB2MWJhVFgzZEt0V0dK?= =?utf-8?B?NnVESWg1eTFNeG5nUXJyUmwrNS9YV1VpT2lORXJqU2tJM2VtYUwzQVgwemJq?= =?utf-8?B?TTFsWW5JRGptc3Q1YVl6TzJmaHJ6WExGYkJIc3NFdEM4YmMyYmp5a3YvRkJ2?= =?utf-8?B?VDFwTG5pTHlicmdQYkJxNTI2NC95SUd3MlNWZENUaFk2bmxObmZlOVRsZ0Vu?= =?utf-8?B?RVlmeWRJWWpaaElCQ0Y4TXFtdWVZOWRnTFhWT2NTd0V4bkp0WVNxazBOem84?= =?utf-8?B?U05tZENzWTJuZFJBOGcrRERlQTZqWldDczMxUjRBRUtVcEJucitSTjkxTzlM?= =?utf-8?B?UCtyQUFLeDhwM3NMTjRUbCtWSFhrNVZUMUxxaWlxdFg0aCtMWkZxWTlJSVpE?= =?utf-8?B?QUFBMjRWaVUvZWQyQ2l3SUdJdzJUMURMUnNVM25SUjBoa3k4bEdVUU5qazUy?= =?utf-8?B?UWtkYm43UXMxVlcwb0RMdm1wTWFaT2xKNDJlVW93TE4wby82TlRnY0lESVls?= =?utf-8?B?djNzb0pPZURMemZyQXZOMGxRSVJPTHFQT2ViYUgrbmpBWEZ6Lzgva2s1OWM4?= =?utf-8?B?bC85V2NJMlQ2clVkMGV3eXdYQjZacVZRN25jQ1gyR2dZREpNMEtQVXdCS0pm?= =?utf-8?B?R3FGWUpvOE55K1J5Z2k0LzNYc2pJR01uVVoyQTBXZ0V4ZXRCMmk3eklPQkVY?= =?utf-8?B?eVVhWjN5bjJSMStXTXRmbGhCeXNRRVFCQkhtbTZCQnlDbzlVV3BEUFkzU2JW?= =?utf-8?B?MVRZUkxTbmd3aG51eWxIYkJmcmVqZ0tPOGpValRheEdkZUdMcVJGNk9VRzF6?= =?utf-8?B?eDBlQ3J5SGgwa05Jc1ZYQ1FRbk83SFc5K2d5Z0poYVFlazNJdVFWS2QrWmlG?= =?utf-8?B?N0JnYzZwVnZTbHBjQUx6YUI1VEJlOVRiQVhWeE5CQU9naWZxKzJoMUpSa2R5?= =?utf-8?B?eUUvUWkwY25mZkJJUnlyb0pMWVhLNXNyWE53cGkwS3JVNmVQZnF0T3Z0NEkv?= =?utf-8?B?NGh5cXJaQzhyRm4wNW5SNml3ZXFGNEZlUFhHN3VnaERkWnFLZ0lwbXJkR2N2?= =?utf-8?B?bXhxalVOcXR6dHdjTmRXSmZPYlpSVWVudVdNc21FUmVYWEtqTFFkYnd4c3NW?= =?utf-8?B?YjFteDBXRk1NZWNnNG9waVhPL0tqamEyVG1OcnVFekF6cDhjOGxNaEl3QUdJ?= =?utf-8?B?dm1SeStZRFFqWUxxTkZJV1c1ZGhDNU5sd1hJNFRvZnBGNnkyR3JJbklJMEx6?= =?utf-8?B?anhUVGVvTFlpdE9FRllBYmhIc3U0bTM1U1puWHA3MDVLSnB2Q1ZqSkZHbWpx?= =?utf-8?B?M2hiWUUwUk9Id1FNSkx0SkY1c0lzTXNKeE9nOHZRLzBTWFRRSkVZbWZLTHlk?= =?utf-8?B?SitGbXAxZGRCcUZyd3JvU1hIQ05ob2NXcFN4OVFSRVFsQ3liWlNvYXhESEQ2?= =?utf-8?B?c0UwdCtQT0NySTlPY0hhaW1oVTNNN1NxK291a28vNERLd3NQcVZQOHI2VEZn?= =?utf-8?B?Uk94eXhFSkp4dnFXS1E0WVA0UnVaTU5rQS9rbC9oUFlNWk5TNEVoMVZNcVlS?= =?utf-8?B?R0hLc0J6TFRTZnB5YVYxWmlRQWR2THptZGZFaWlSdXlZdGlpSlc4UHpiUjYr?= =?utf-8?B?ZUxOcE85Z2xmVGJtVzJrRTVUZHY3NThneDhtL0xlZUNTeTZXc25Cd2hXZml3?= =?utf-8?B?Y1JOdDc5SlJMZ1dWR21TaklZSEFaaENHMkdTTU1ySkZRbnU4VXpuWGxEMEpV?= =?utf-8?B?YWlQbUQvb0JJd1F0bUg3RnVPSm1CbTBMWDVQbmxNRjRJTno5UVFZVHFOU0kx?= =?utf-8?B?aktodDJmRURVRGczQVQ3Z3YzOFBRTjJpQ3cxd1ZhTWRsR0Nnd1NBQT09?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1274e413-09fd-4269-26be-08da276f1cb8 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8616.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2022 10:25:40.4123 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: xU8hTMCl6VDCL/d/e9cW+VeqQMawNROhzFW+Siu/0mCTdY5mwM1bjwfn90Zf+m355EpZr1inhpMt9a6O17vUiw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB6684 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1650969146253100001 Content-Type: text/plain; charset="utf-8" In paging_log_dirty_op(), always update the count of pages field: - if more pages were specified than the guest has ever accessed (HVM) or marked part of the p2m (PV), there's no point for the caller to inspect bits beyond the one for that last page, - if the guest's p2m size has grown in the meantime, the caller would have no indication that it may not have caught all dirty bits. Also exit the loop once having passed the last valid GFN. To balance overhead and savings, do this before inspecting a new L2 table. Adjust libxenguest accordingly, albeit these changes are necessary only for guests which actually alter their P2M size while under migration. They do, however, additionally open up the option of the hypervisor eventually zapping large ranges of trailing zeros from the bitmap when providing it back to the tools. Signed-off-by: Jan Beulich --- Of course this still is far from ideal: At the very least a perhaps large tail of zeros could very well also result in a reduced page count. --- v3: Replace mfn_valid() by !mfn_eq(, INVALID_MFN) (and rebase accordingly). --- a/tools/libs/guest/xg_sr_common.h +++ b/tools/libs/guest/xg_sr_common.h @@ -237,7 +237,16 @@ struct xc_sr_context /* Further debugging information in the stream. */ bool debug; =20 + /* + * Counts of bits (each representing a guest page), expressing + * respectively + * - obtained P2M size, + * - allocated bitmap size, + * - range actually filled with valid data. + */ unsigned long p2m_size; + unsigned long p2m_alloc_size; + unsigned long p2m_used_size; =20 struct precopy_stats stats; =20 @@ -245,6 +254,7 @@ struct xc_sr_context unsigned int nr_batch_pfns; unsigned long *deferred_pages; unsigned long nr_deferred_pages; + unsigned long used_deferred_pages; xc_hypercall_buffer_t dirty_bitmap_hbuf; } save; =20 --- a/tools/libs/guest/xg_sr_restore.c +++ b/tools/libs/guest/xg_sr_restore.c @@ -424,7 +424,8 @@ static int send_checkpoint_dirty_pfn_lis xc_interface *xch =3D ctx->xch; int rc =3D -1; unsigned int count, written; - unsigned long i; + unsigned long i, p2m_size; + long long ret; uint64_t *pfns =3D NULL; struct iovec *iov =3D NULL; struct xc_sr_record rec =3D { @@ -433,22 +434,29 @@ static int send_checkpoint_dirty_pfn_lis DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap, &ctx->restore.dirty_bitmap_hbuf); =20 - if ( xc_logdirty_control( - xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN, - HYPERCALL_BUFFER(dirty_bitmap), ctx->restore.p2m_size, - 0, NULL) !=3D ctx->restore.p2m_size ) + ret =3D xc_logdirty_control( + xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN, + HYPERCALL_BUFFER(dirty_bitmap), ctx->restore.p2m_size, + 0, NULL); + if ( ret < 0 ) { PERROR("Failed to retrieve logdirty bitmap"); goto err; } + if ( ret > ctx->restore.p2m_size ) + { + ERROR("Guest has grown its p2m too much"); + goto err; + } + p2m_size =3D ret; =20 - for ( i =3D 0, count =3D 0; i < ctx->restore.p2m_size; i++ ) + for ( i =3D 0, count =3D 0; i < p2m_size; i++ ) { if ( test_bit(i, dirty_bitmap) && !++count ) break; } =20 - if ( i < ctx->restore.p2m_size ) + if ( i < p2m_size ) { ERROR("Too many dirty pfns"); goto err; @@ -469,7 +477,7 @@ static int send_checkpoint_dirty_pfn_lis goto err; } =20 - for ( i =3D 0, written =3D 0; i < ctx->restore.p2m_size; ++i ) + for ( i =3D 0, written =3D 0; i < p2m_size; ++i ) { if ( !test_bit(i, dirty_bitmap) ) continue; @@ -713,8 +721,10 @@ static int setup(struct xc_sr_context *c =20 if ( ctx->stream_type =3D=3D XC_STREAM_COLO ) { + unsigned long pages =3D NRPAGES(bitmap_size(ctx->restore.p2m_size)= ); + dirty_bitmap =3D xc_hypercall_buffer_alloc_pages( - xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->restore.p2m_size))= ); + xch, dirty_bitmap, pages); =20 if ( !dirty_bitmap ) { @@ -722,6 +732,8 @@ static int setup(struct xc_sr_context *c rc =3D -1; goto err; } + + ctx->restore.p2m_size =3D pages << (PAGE_SHIFT + 3); } =20 rc =3D ctx->restore.ops.setup(ctx); --- a/tools/libs/guest/xg_sr_save.c +++ b/tools/libs/guest/xg_sr_save.c @@ -74,6 +74,16 @@ static int write_checkpoint_record(struc return write_record(ctx, &checkpoint); } =20 +static void update_deferred_pages(struct xc_sr_context *ctx, xen_pfn_t pfn) +{ + if ( !ctx->save.deferred_pages ) + return; + set_bit(pfn, ctx->save.deferred_pages); + ++ctx->save.nr_deferred_pages; + if ( pfn >=3D ctx->save.used_deferred_pages ) + ctx->save.used_deferred_pages =3D pfn + 1; +} + /* * Writes a batch of memory as a PAGE_DATA record into the stream. The ba= tch * is constructed in ctx->save.batch_pfns. @@ -130,11 +140,8 @@ static int write_batch(struct xc_sr_cont ctx->save.batch_pfns= [i]); =20 /* Likely a ballooned page. */ - if ( mfns[i] =3D=3D INVALID_MFN && ctx->save.deferred_pages ) - { - set_bit(ctx->save.batch_pfns[i], ctx->save.deferred_pages); - ++ctx->save.nr_deferred_pages; - } + if ( mfns[i] =3D=3D INVALID_MFN ) + update_deferred_pages(ctx, ctx->save.batch_pfns[i]); } =20 rc =3D xc_get_pfn_type_batch(xch, ctx->domid, nr_pfns, types); @@ -192,12 +199,7 @@ static int write_batch(struct xc_sr_cont { if ( rc =3D=3D -1 && errno =3D=3D EAGAIN ) { - if ( ctx->save.deferred_pages ) - { - set_bit(ctx->save.batch_pfns[i], - ctx->save.deferred_pages); - ++ctx->save.nr_deferred_pages; - } + update_deferred_pages(ctx, ctx->save.batch_pfns[i]); types[i] =3D XEN_DOMCTL_PFINFO_XTAB; --nr_pages; } @@ -365,7 +367,7 @@ static int suspend_domain(struct xc_sr_c * Send a subset of pages in the guests p2m, according to the dirty bitmap. * Used for each subsequent iteration of the live migration loop. * - * Bitmap is bounded by p2m_size. + * Bitmap is bounded by p2m_alloc_size, but populated only up to p2m_used_= size. */ static int send_dirty_pages(struct xc_sr_context *ctx, unsigned long entries, bool all_dirty) @@ -377,7 +379,10 @@ static int send_dirty_pages(struct xc_sr DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap, &ctx->save.dirty_bitmap_hbuf); =20 - for ( p =3D 0, written =3D 0; p < ctx->save.p2m_size; ++p ) + if ( all_dirty ) + ctx->save.p2m_used_size =3D ctx->save.p2m_size; + + for ( p =3D 0, written =3D 0; p < ctx->save.p2m_used_size; ++p ) { if ( !all_dirty && !test_bit(p, dirty_bitmap) ) continue; @@ -522,6 +527,8 @@ static int send_memory_live(struct xc_sr =20 for ( ; ; ) { + long long ret; + policy_decision =3D precopy_policy(*policy_stats, data); x++; =20 @@ -548,15 +555,23 @@ static int send_memory_live(struct xc_sr if ( policy_decision !=3D XGS_POLICY_CONTINUE_PRECOPY ) break; =20 - if ( xc_logdirty_control( - xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN, - &ctx->save.dirty_bitmap_hbuf, ctx->save.p2m_size, - 0, &stats) !=3D ctx->save.p2m_size ) + ret =3D xc_logdirty_control( + xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN, + &ctx->save.dirty_bitmap_hbuf, ctx->save.p2m_alloc_size, + 0, &stats); + if ( ret < 0 ) { PERROR("Failed to retrieve logdirty bitmap"); rc =3D -1; goto out; } + if ( ret > ctx->save.p2m_alloc_size ) + { + ERROR("Guest has grown its p2m too much"); + rc =3D -1; + goto out; + } + ctx->save.p2m_used_size =3D ret; =20 policy_stats->dirty_count =3D stats.dirty_count; =20 @@ -610,7 +625,7 @@ static int colo_merge_secondary_dirty_bi for ( i =3D 0; i < count; i++ ) { pfn =3D pfns[i]; - if ( pfn >=3D ctx->save.p2m_size ) + if ( pfn >=3D ctx->save.p2m_alloc_size ) { PERROR("Invalid pfn 0x%" PRIx64, pfn); rc =3D -1; @@ -638,6 +653,7 @@ static int suspend_and_send_dirty(struct xc_shadow_op_stats_t stats; char *progress_str =3D NULL; int rc; + long long ret; DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap, &ctx->save.dirty_bitmap_hbuf); =20 @@ -645,16 +661,22 @@ static int suspend_and_send_dirty(struct if ( rc ) goto out; =20 - if ( xc_logdirty_control( - xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN, - HYPERCALL_BUFFER(dirty_bitmap), ctx->save.p2m_size, - XEN_DOMCTL_SHADOW_LOGDIRTY_FINAL, &stats) !=3D - ctx->save.p2m_size ) + ret =3D xc_logdirty_control( + xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_CLEAN, + HYPERCALL_BUFFER(dirty_bitmap), ctx->save.p2m_alloc_size, + XEN_DOMCTL_SHADOW_LOGDIRTY_FINAL, &stats); + if ( ret < 0 ) { PERROR("Failed to retrieve logdirty bitmap"); rc =3D -1; goto out; } + if ( ret > ctx->save.p2m_alloc_size ) + { + ERROR("Guest has grown its p2m too much"); + rc =3D -1; + goto out; + } =20 if ( ctx->save.live ) { @@ -666,7 +688,8 @@ static int suspend_and_send_dirty(struct xc_set_progress_prefix(xch, "Checkpointed save"); =20 if ( ctx->save.deferred_pages ) - bitmap_or(dirty_bitmap, ctx->save.deferred_pages, ctx->save.p2m_si= ze); + bitmap_or(dirty_bitmap, ctx->save.deferred_pages, ctx->save.p2m_al= loc_size); + ctx->save.p2m_used_size =3D MAX(ret, ctx->save.used_deferred_pages); =20 if ( !ctx->save.live && ctx->stream_type =3D=3D XC_STREAM_COLO ) { @@ -684,8 +707,9 @@ static int suspend_and_send_dirty(struct goto out; =20 if ( ctx->save.deferred_pages ) - bitmap_clear(ctx->save.deferred_pages, ctx->save.p2m_size); + bitmap_clear(ctx->save.deferred_pages, ctx->save.p2m_alloc_size); ctx->save.nr_deferred_pages =3D 0; + ctx->save.used_deferred_pages =3D 0; =20 out: xc_set_progress_prefix(xch, NULL); @@ -698,6 +722,7 @@ static int verify_frames(struct xc_sr_co xc_interface *xch =3D ctx->xch; xc_shadow_op_stats_t stats; int rc; + long long ret; struct xc_sr_record rec =3D { .type =3D REC_TYPE_VERIFY }; =20 DPRINTF("Enabling verify mode"); @@ -711,15 +736,18 @@ static int verify_frames(struct xc_sr_co if ( rc ) goto out; =20 - if ( xc_logdirty_control( - xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_PEEK, - &ctx->save.dirty_bitmap_hbuf, ctx->save.p2m_size, - 0, &stats) !=3D ctx->save.p2m_size ) + ret =3D xc_logdirty_control( + xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_PEEK, + &ctx->save.dirty_bitmap_hbuf, ctx->save.p2m_alloc_size, + 0, &stats); + if ( ret < 0 ) { PERROR("Failed to retrieve logdirty bitmap"); rc =3D -1; goto out; } + if ( ret > ctx->save.p2m_alloc_size ) + IPRINTF("Guest has grown its p2m too much"); =20 DPRINTF(" Further stats: faults %u, dirty %u", stats.fault_count, stats.dirty_count); @@ -800,13 +828,14 @@ static int setup(struct xc_sr_context *c =20 if ( ctx->save.live || ctx->stream_type !=3D XC_STREAM_PLAIN ) { + unsigned long pages =3D NRPAGES(bitmap_size(ctx->save.p2m_size)); DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap, &ctx->save.dirty_bitmap_hbuf); =20 dirty_bitmap =3D - xc_hypercall_buffer_alloc_pages( - xch, dirty_bitmap, NRPAGES(bitmap_size(ctx->save.p2m_size)= )); - ctx->save.deferred_pages =3D bitmap_alloc(ctx->save.p2m_size); + xc_hypercall_buffer_alloc_pages(xch, dirty_bitmap, pages); + ctx->save.p2m_alloc_size =3D pages << (PAGE_SHIFT + 3); + ctx->save.deferred_pages =3D bitmap_alloc(ctx->save.p2m_alloc_size= ); =20 if ( !dirty_bitmap || !ctx->save.deferred_pages ) goto enomem; --- a/xen/arch/x86/mm/paging.c +++ b/xen/arch/x86/mm/paging.c @@ -400,6 +400,20 @@ bool paging_mfn_is_dirty(const struct do } #endif =20 +/* + * This is used to provide a rough (upper) estimate to the caller of how m= any + * more pages we might have data for. + */ +static unsigned int last_valid_entry(const mfn_t *tbl, unsigned int idx) { + unsigned int last =3D LOGDIRTY_NODE_ENTRIES; + + for ( ; idx < LOGDIRTY_NODE_ENTRIES; ++idx ) + if ( !mfn_eq(tbl[idx], INVALID_MFN) ) + last =3D idx; + + return last; +} + /* Read a domain's log-dirty bitmap and stats. If the operation is a CLEA= N, * clear the bitmap and stats as well. */ static int paging_log_dirty_op(struct domain *d, @@ -407,10 +421,10 @@ static int paging_log_dirty_op(struct do bool_t resuming) { int rv =3D 0, clean =3D 0, peek =3D 1; - unsigned long pages =3D 0; + unsigned long pages =3D 0, extra =3D 0; mfn_t *l4 =3D NULL, *l3 =3D NULL, *l2 =3D NULL; unsigned long *l1 =3D NULL; - int i4, i3, i2; + unsigned int i4, i3, i2; =20 if ( !resuming ) { @@ -482,6 +496,15 @@ static int paging_log_dirty_op(struct do map_domain_page(l4[i4]) : NULL); for ( ; (pages < sc->pages) && (i3 < LOGDIRTY_NODE_ENTRIES); i3++ ) { + unsigned long max_gfn =3D domain_get_maximum_gpfn(d); + + if ( (i4 * LOGDIRTY_NODE_ENTRIES + i3) * + LOGDIRTY_NODE_ENTRIES * PAGE_SIZE * 8 > max_gfn ) + { + i4 =3D LOGDIRTY_NODE_ENTRIES; + break; + } + l2 =3D ((l3 && !mfn_eq(l3[i3], INVALID_MFN)) ? map_domain_page(l3[i3]) : NULL); for ( i2 =3D 0; @@ -505,18 +528,36 @@ static int paging_log_dirty_op(struct do goto out; } } + pages +=3D bytes << 3; + if ( l1 ) { + if ( unlikely(pages >=3D sc->pages) ) + extra =3D (PAGE_SIZE - bytes) << 3; + if ( clean ) clear_page(l1); unmap_domain_page(l1); } } + if ( l2 ) + { + if ( unlikely(pages >=3D sc->pages) ) + { + i2 =3D last_valid_entry(l2, i2); + if ( i2 < LOGDIRTY_NODE_ENTRIES ) + extra =3D ((i4 * LOGDIRTY_NODE_ENTRIES + i3) * + LOGDIRTY_NODE_ENTRIES + i2 + 1) * + PAGE_SIZE * 8; + } + unmap_domain_page(l2); + } =20 - if ( i3 < LOGDIRTY_NODE_ENTRIES - 1 && hypercall_preempt_check= () ) + if ( pages < sc->pages && i3 < LOGDIRTY_NODE_ENTRIES - 1 && + hypercall_preempt_check() ) { d->arch.paging.preempt.log_dirty.i4 =3D i4; d->arch.paging.preempt.log_dirty.i3 =3D i3 + 1; @@ -524,10 +565,21 @@ static int paging_log_dirty_op(struct do break; } } + if ( l3 ) + { + if ( !rv && unlikely(pages >=3D sc->pages) ) + { + i3 =3D last_valid_entry(l3, i3); + if ( i3 < LOGDIRTY_NODE_ENTRIES ) + extra =3D (i4 * LOGDIRTY_NODE_ENTRIES + i3 + 1) * + LOGDIRTY_NODE_ENTRIES * PAGE_SIZE * 8; + } + unmap_domain_page(l3); + } =20 - if ( !rv && i4 < LOGDIRTY_NODE_ENTRIES - 1 && + if ( !rv && pages < sc->pages && i4 < LOGDIRTY_NODE_ENTRIES - 1 && hypercall_preempt_check() ) { d->arch.paging.preempt.log_dirty.i4 =3D i4 + 1; @@ -537,8 +589,19 @@ static int paging_log_dirty_op(struct do if ( rv ) break; } + if ( l4 ) + { + if ( !rv && unlikely(pages >=3D sc->pages) ) + { + i4 =3D last_valid_entry(l4, i4); + if ( i4 < LOGDIRTY_NODE_ENTRIES ) + extra =3D (i4 + 1) * LOGDIRTY_NODE_ENTRIES * + LOGDIRTY_NODE_ENTRIES * PAGE_SIZE * 8; + } + unmap_domain_page(l4); + } =20 if ( !rv ) { @@ -565,8 +628,8 @@ static int paging_log_dirty_op(struct do return rv; } =20 - if ( pages < sc->pages ) - sc->pages =3D pages; + sc->pages =3D min(pages + extra, domain_get_maximum_gpfn(d) + 1); + if ( clean ) { /* We need to further call clean_dirty_bitmap() functions of speci= fic --- a/xen/include/public/domctl.h +++ b/xen/include/public/domctl.h @@ -272,7 +272,8 @@ struct xen_domctl_shadow_op { =20 /* OP_PEEK / OP_CLEAN */ XEN_GUEST_HANDLE_64(uint8) dirty_bitmap; - uint64_aligned_t pages; /* Size of buffer. Updated with actual size. */ + uint64_aligned_t pages; /* Size of buffer. Updated with actual (or + potentially needed) size. */ struct xen_domctl_shadow_op_stats stats; }; From nobody Sat May 18 23:55:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1650968801; cv=pass; d=zohomail.com; s=zohoarc; b=DhL7BKqEWFZZJDzanPmRCDTPSiW+Fq466OjQmZWm3NeMo1nMGiynpBFc802AbTseMKYfuNemwAuSEApUAmLG5ZSdC9Juu1Ud7r2m9eWJpn0TNcxWgIYKHObOfx8CrLI3RVz9xmUsvj55nE3P7T2m+0R7CLYp2bmCRt+YK1f9dUA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1650968801; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5Q+RLUWEAn0J5puyRnSo+x/9eyF00ihd4YhFDt3Vc+8=; b=HdeLyj03KbbwoiD8J4uQG//8PNeHQGw9/phzZLS2ImoPHb/NtFS4GA96Ve7asPFHpF3yq5ucW17G0Xj3/m6lWlTzYbdiIH6h7PB3PxuMxc/SbJLkMSMUlAGjiwYxcUmHXtkRjQYK+wdDQg9auilOPmdjaPuuJ7q9eTcxGrEOsH0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1650968801083653.0334730927842; Tue, 26 Apr 2022 03:26:41 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.313711.531413 (Exim 4.92) (envelope-from ) id 1njIOh-00013j-On; Tue, 26 Apr 2022 10:26:19 +0000 Received: by outflank-mailman (output) from mailman id 313711.531413; Tue, 26 Apr 2022 10:26:19 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njIOh-00013c-LV; Tue, 26 Apr 2022 10:26:19 +0000 Received: by outflank-mailman (input) for mailman id 313711; Tue, 26 Apr 2022 10:26:18 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njIOg-00013U-BN for xen-devel@lists.xenproject.org; Tue, 26 Apr 2022 10:26:18 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 4e52ba7e-c54b-11ec-8fc2-03012f2f19d4; Tue, 26 Apr 2022 12:26:17 +0200 (CEST) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05lp2111.outbound.protection.outlook.com [104.47.17.111]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-17-znyZVbpfM7mJ5CTMB9ZfXA-2; Tue, 26 Apr 2022 12:26:14 +0200 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) by DB6PR04MB3125.eurprd04.prod.outlook.com (2603:10a6:6:11::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.21; Tue, 26 Apr 2022 10:26:11 +0000 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f]) by DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f%9]) with mapi id 15.20.5186.021; Tue, 26 Apr 2022 10:26:11 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 4e52ba7e-c54b-11ec-8fc2-03012f2f19d4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1650968776; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5Q+RLUWEAn0J5puyRnSo+x/9eyF00ihd4YhFDt3Vc+8=; b=mUyFmhOk4fRwoAHI29yxH4AnPwNJTKVTxDnrg7E2vW1MAqGwoj5SGHARK0lIKunBinZZzE Px8G8GGxjn3lKqb38my4X8fNsjuG5hULxW+pLiSl09VyRnhYIK85+zykHUKRs2SKyEKIjN 7d/D84mNI9NlF7Tr9uQhh7U3SiEPnC0= X-MC-Unique: znyZVbpfM7mJ5CTMB9ZfXA-2 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GgkKastVMkpb9sCWYrpzUs8hIBXcmfMJY1IgiLFAUECLx7cXNkux2fzsJVYpyhSv/9wfII3cUJvBMoiFZMAqZNO3PLkRZyYw48iLLsM7iZredjIzbc/sWbde9rMxSda4p2qK5ErqpmXKIeRHiCCPMTc9Pk5CKu1c42x2EMmRLfT1Damf26VSDT5YTxsO62MM6z21dsBD1rWTgEze9Smiwvv/KI8EVEE96H+eDbbkTDk217PXZ1MmUFa80wjUv1rYkaet3fFd0pp+YLXZzI1Di6wofXMvMAatAlyMwqoD0nRziKvEl8XnRCkSJxLiin14sAOZAOWmwMksDdNW4B3H8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=5Q+RLUWEAn0J5puyRnSo+x/9eyF00ihd4YhFDt3Vc+8=; b=YPDtUrpoEll7gkLoHPBVssJsLGPy/RUGhqGxccva3WDKrEHHZ/AtGmCYiXe3E/6BqPY9JaXKTn59nXEXbCidGcMakxzhWjom96DpPR9MuU5Z7nYtYHquajnbdFYAIMHNbYD/60ox4vnwG+MszKMUcJgmZbwnyGFDf0L8hTXKlDSqF3J5/m2yOyl/tBaqyWFSHIbczeLKJ9SxGRKzAzVNsuF7PRIvGTTdMrr+ee40x3E2lZOQdT9vL1KpCymkaGdWxi6fuTVeCqJCjm5WrYVFJFit6NDmurRaD6/is3RwVkXAM6qFxrznkqRr/X75pjNbqQT6Pt3pRCezFEoffcRWhA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Tue, 26 Apr 2022 12:26:10 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: [PATCH v3 7/8] x86/mm: update log-dirty bitmap when manipulating P2M Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Juergen Gross , George Dunlap , Anthony Perard References: In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR10CA0048.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:209:80::25) To DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 14cec660-fa7f-4f18-a78f-08da276f2f2b X-MS-TrafficTypeDiagnostic: DB6PR04MB3125:EE_ X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IsEWNuUjS6P44Mv8BTQy7Zm4YKSfUntqlej39dZoxTPjCs0qA2loKwWJs5kVsR++TpdX8CvRuJ8eB/kocoL1Ds5QAqtim7FmWuqH4gebhuIb9umeBYXr9UY9RA+LQTP9kWWERJLcX3bPEjvZDugUg+dur3mkMLpPt0HuDJlXy/lwO8Qvtl2UUeNCiLZaPJVMfFV5fdmMQV+BhTYvKgcdAbWW+Gr8fVB1Mc4WPT+uiN7xd6S24nPbzOw6jkDWt6n45kFVhMuie1d3SV+zocKOfBnn17UU5ez6iWOi6vhuZUeTYe6cpjT0r5lFEEp5wW6rxWjo6k5PAUrAR9iZ1FMTj7/TTezPHrOkaEHpkCECCSiO9BdvgAihmIoejFrHEPz5T/5ea8cMRn5TCUILWpZdrTxeo9IHFbRw2u/pXoY1XVGgyAO3NmAocR3fgfFf7+Sl9js2cd4PfNHdrOKXMkCK/26bo9itNCwBDPo2YSxQNEH2DDgIdjkRKc8WJuA2w/qp8Dv9tt2yzFGXHosWm7bP3oAAvULxuB0Nzmhfcy8kxYBcGZNgO4UZVkn2BqQg4Qd88/SIEnQGjoPh1DU1GdT0O7TauCi7e7PCWNHe9N8HQ9ufk1lJ0NzTSjFlvHIKGnPiegDRbW4AKydDtvxyppKzFLPjmDsntZPjI+AXj5UpqRfYRtMW4s6ckpk1Dn6WJDtW4gCYl5jiTAcSfYcrnD5xi6D67xbRVgfsitb31nTVxr/Lpr9iByphc9oZ8NWS6OvJX+y5WQfCsZ83UlVv+p8rZg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8616.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(2906002)(66946007)(66556008)(86362001)(6486002)(6506007)(31696002)(5660300002)(15650500001)(6512007)(316002)(8936002)(26005)(186003)(8676002)(508600001)(66476007)(31686004)(4326008)(83380400001)(2616005)(36756003)(6916009)(54906003)(38100700002)(14143004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a09TSTBPRkJVY1p5dnRaY3ZRWFFYaWxRMjBrTjlHUEYreFREaTFkcWR4MW5B?= =?utf-8?B?eGxIbitxVW5KNnA5Szd5cHBuNHV5T1Rwd0xLUGtxc0todTJnZFNHdFlMdWxz?= =?utf-8?B?MDVJaHlrMHF5OTIzQmtKR2Jzc3dCb2grUjE2R0poaVZ4aTh1QndYVU5neWRP?= =?utf-8?B?NVdzTkJ1M1oxbVRlNmJWdlRiSTFXSXh5WnlhWkkvK3FxYUZkV1NjUVg3Wktz?= =?utf-8?B?WWhzcVpEOUpaa3FvajNXbHVtdlJHYXNqeExKWWNoMk5udmh5cytVTEM2bGcv?= =?utf-8?B?bms5M3FXc3FFUTVzWWFrRmFWakk0eE1LZmpwR1FjYnRJZGVHVWc1dXFQdFlI?= =?utf-8?B?a3FkK1VubFFPbU1HcGtLTVRrVHMxd05SNnI0bmJqOVdQWXVQSkFKb0Q1ZFl2?= =?utf-8?B?cFhRczdxaXhRV1k0UW1BZFhmaDAwWUVvTTNxSm91SWl6ajl6dU82a1lwSkpI?= =?utf-8?B?TFBZMnYwVk1wMEZlV0xkWDZ1MERTOGpKSFpRV1hxVjFJTEhYdGo2T2RUZFZQ?= =?utf-8?B?WDBJaWVyeHBreWNhTjFqb1ZxQkx2Mlp6K1BFMS9FbzVJbGVmamlaajNVWjlt?= =?utf-8?B?ak9FcGkwMlp1b3BXZFpHTEpqK3E3UnBoVGFOaFp4MUN4UjRtc3RoNDlhYm51?= =?utf-8?B?R3djT0dTUnlLaVF0OGd4eFBSZUVVT2xSWEFaL2daMWVkQXRBblF4TUorMXB1?= =?utf-8?B?OWp4Nm04STBxT0RhMjg4eHA3cmh4KzBKWkgwWjI3VG4yVEtHWk8wekR5SWdv?= =?utf-8?B?ZEkwS21sUm51R1BaZXAxTWpmNmxNUU1uTTY1dE9Ec0luRkVtY3llY25seDRa?= =?utf-8?B?VittaDFLQjlaem12THlNSHZSRTFVWEt3VWhicjBRVlREYWdNWkd4bG5GMExZ?= =?utf-8?B?c2huU3lKOTBVV0krMXlubDlHL1RuWk1KMFpDeW15S0w0UTJ1OUQzWEpwODdr?= =?utf-8?B?YmE4REppSVYxaXpmd0FNTjcvU2lEZ3pBNytSajM1Sk9yUnN5MXVVYzg2eXM1?= =?utf-8?B?RW00RVBUTm56T2wyOW1ab1d5Vk5zRTJON29WcE5MOFBBL1haNmZEM1NUbnUw?= =?utf-8?B?b0tSTm5TdWhpMGR3aDRDdFViWXJ3QW04cUxCSE95b0tJTmJ6d1BoMGJsSXVS?= =?utf-8?B?eUxoL0dxK3doS3I2ejlqYzN1WjVuczJmWjVuRkhFczVpaFJPaFRXR0lZME9h?= =?utf-8?B?elpyTnd2QllVd3ZJbC9JMmtYRVVJRURBK002a2ovM3lpMFJUR2JBbWQ3aVh6?= =?utf-8?B?SDJVWXhFSjgrMFBmUlFuamZBV2FuV2NwVEVSajE3eG45dWx1enU5eTJPT2Z1?= =?utf-8?B?SURnNGNQaEdzN0l5VEZnVnhJbFpDa29lSWQ0akkzZ20xZFdEVnYrczFCYlhK?= =?utf-8?B?Nll6Z0lpOEhhNnBVcmNkeUlHeHBFdE1IQW50Um1aSzR6bzhlMHB4UEJwTnBr?= =?utf-8?B?Nm52em1JODd1VENCRTNwYU9yVThQd2IzbHpzTWdqNWREaG16T0pDYUsvUGt3?= =?utf-8?B?eDBTTjdkdHZONW5WNzRDcHA3V2hJbkdoQ2xacXJaNDZna0pMMjBNaFFJbERG?= =?utf-8?B?bEJUK0dFYnNTTVpPZ3N3UFpoYk00OG5weW1RY0hTNE42V1MvVGRRQWgvbkwv?= =?utf-8?B?bHQ1T2ZGclY5M2k2N3R6VmlZOEc1ZUg2ZktndS92Y3ZtSnVQN0FqblJvQi9k?= =?utf-8?B?MnFlNTdwRTRqRWpIa1ZuS1R0MWZZcTlzSXJUaE1oZXNXL2oxNDRSSlpvY2VL?= =?utf-8?B?c3c2WlFweXRuOGpaTzNiZG9nRmthZkxFbEg3NE9kM2NyVVBkYXA5b1J4bzJs?= =?utf-8?B?SERXRSs4OE5CbURnQ0trdXFpOXBMU3JxVEMvSFZtamlKVEl4WWNMN0pJYU9S?= =?utf-8?B?Umk0YUR4ZlM1M3Z6TnJ6Wk1zSTBUKzlaMjlQaGxHejhSbmtFaDdWY0dtajh3?= =?utf-8?B?QTIzeEt0Q3Y3K0w1b2wxVnBWRjNIaWQyZ2xEdEdpUmQ5cEgwTWxRMWNrQVE4?= =?utf-8?B?dmhBWjQ4OWMxVHpQZm0xdUl3ZUVtdEc1a0lMNFRLa01Ba1M2TmI1ZFh1U0Jw?= =?utf-8?B?Y1dUbTVtbTdHNjJWU0ZVUE9EVUJWWEtBMXlpZXNxMmtXZ3NCd3ZsL3pzbzl3?= =?utf-8?B?Y0JzeEZPUmdDNHVaRUgzdnF3Y0lCRGUwMTREckpyMHBzRFplUUhpVllieDVx?= =?utf-8?B?N3NONElQR3FIWStmQVMrM2FuT3ozWWx6QkpTVWJYQVVob1pJSkREL2dnL2Vn?= =?utf-8?B?VGQ2N2hXUnEzcVBRaVFYcDZoazBQY29nVlZLbytoOWlLMlVaMEZpejFOQTYv?= =?utf-8?B?Z0Zpcm95S1R4UEpxcnA3NTFVbUtEVTNGbWRWcVAySlNtVHhJclc2UT09?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 14cec660-fa7f-4f18-a78f-08da276f2f2b X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8616.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2022 10:26:11.3839 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9nr95IJ+qfJmgLr+UyPPZki/mIUr2wfDEbi6hP0/lXqIzMXhhWOwQgXO4p7l6fDC2I4CZEEabdnKqTjmzOw3Sg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR04MB3125 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1650968801463100001 Content-Type: text/plain; charset="utf-8" Just like for PV guests MMU_MACHPHYS_UPDATE implies marking of the respective page as dirty, additions to a HVM guest's P2M should do so. For HVM the opposite is also true: Pages being removed from the P2M are no longer dirty at their prior GFN; there's no point in telling the tool stack to try and copy that page, when this will fail anyway (until perhaps a new page gets placed there). Introduce paging_mark_pfn_clean() (intentionally without a paging_mark_clean() counterpart) to handle this. Note that while there is an earlier call to set_gpfn_from_mfn() in guest_physmap_add_entry(), but there's little reason to mark the page clean there when later in the function it'll be marked dirty. This is even more so given that at this point it's only the M2P that gets updated, with the P2M still left unchanged. Signed-off-by: Jan Beulich --- p2m_add_page()'s error handling looks bogus in this regard anyway: If an error occurs before an MFN actually is assciated with the new GFN, the M2P entry ought to be restored imo. But of course a guest is still hosed if the operation succeeds partially. Note that I've not even checked mem-paging and mem-sharing code for whether they may need similar adjustment. At least the latters is, aiui, incompatible with log-dirty mode anyway. --- v3: Re-base. --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -549,7 +549,10 @@ p2m_remove_entry(struct p2m_domain *p2m, { p2m->get_entry(p2m, gfn_add(gfn, i), &t, &a, 0, NULL, NULL); if ( !p2m_is_special(t) && !p2m_is_shared(t) ) + { set_gpfn_from_mfn(mfn_x(mfn) + i, INVALID_M2P_ENTRY); + paging_mark_pfn_clean(p2m->domain, _pfn(gfn_x(gfn) + i)); + } } } =20 @@ -737,8 +740,11 @@ p2m_add_page(struct domain *d, gfn_t gfn if ( !p2m_is_grant(t) ) { for ( i =3D 0; i < (1UL << page_order); i++ ) + { set_gpfn_from_mfn(mfn_x(mfn_add(mfn, i)), gfn_x(gfn_add(gfn, i))); + paging_mark_pfn_dirty(d, _pfn(gfn_x(gfn) + i)); + } } } else @@ -1096,6 +1102,7 @@ static int set_typed_p2m_entry(struct do { ASSERT(mfn_valid(mfn_add(omfn, i))); set_gpfn_from_mfn(mfn_x(omfn) + i, INVALID_M2P_ENTRY); + paging_mark_pfn_clean(d, _pfn(gfn_x(gfn) + i)); =20 ioreq_request_mapcache_invalidate(d); } @@ -1117,6 +1124,7 @@ static int set_typed_p2m_entry(struct do { ASSERT(mfn_valid(mfn_add(omfn, i))); set_gpfn_from_mfn(mfn_x(omfn) + i, INVALID_M2P_ENTRY); + paging_mark_pfn_clean(d, _pfn(gfn_x(gfn) + i)); } =20 ioreq_request_mapcache_invalidate(d); --- a/xen/arch/x86/mm/p2m-pod.c +++ b/xen/arch/x86/mm/p2m-pod.c @@ -657,7 +657,10 @@ decrease_reservation(struct domain *d, g } p2m_tlb_flush_sync(p2m); for ( j =3D 0; j < n; ++j ) + { set_gpfn_from_mfn(mfn_x(mfn), INVALID_M2P_ENTRY); + paging_mark_pfn_clean(d, _pfn(gfn_x(gfn) + i + j)); + } p2m_pod_cache_add(p2m, page, cur_order); =20 ioreq_request_mapcache_invalidate(d); --- a/xen/arch/x86/mm/paging.c +++ b/xen/arch/x86/mm/paging.c @@ -260,7 +260,7 @@ static int paging_log_dirty_disable(stru } =20 /* Mark a page as dirty, with taking guest pfn as parameter */ -void paging_mark_pfn_dirty(struct domain *d, pfn_t pfn) +static void mark_pfn_dirty(struct domain *d, pfn_t pfn, bool dirty) { bool changed; mfn_t mfn, *l4, *l3, *l2; @@ -291,14 +291,15 @@ void paging_mark_pfn_dirty(struct domain =20 if ( unlikely(mfn_eq(d->arch.paging.log_dirty.top, INVALID_MFN)) ) { - d->arch.paging.log_dirty.top =3D paging_new_log_dirty_node(d); + if ( dirty ) + d->arch.paging.log_dirty.top =3D paging_new_log_dirty_node(d); if ( unlikely(mfn_eq(d->arch.paging.log_dirty.top, INVALID_MFN)) ) goto out; } =20 l4 =3D paging_map_log_dirty_bitmap(d); mfn =3D l4[i4]; - if ( mfn_eq(mfn, INVALID_MFN) ) + if ( mfn_eq(mfn, INVALID_MFN) && dirty ) l4[i4] =3D mfn =3D paging_new_log_dirty_node(d); unmap_domain_page(l4); if ( mfn_eq(mfn, INVALID_MFN) ) @@ -306,7 +307,7 @@ void paging_mark_pfn_dirty(struct domain =20 l3 =3D map_domain_page(mfn); mfn =3D l3[i3]; - if ( mfn_eq(mfn, INVALID_MFN) ) + if ( mfn_eq(mfn, INVALID_MFN) && dirty ) l3[i3] =3D mfn =3D paging_new_log_dirty_node(d); unmap_domain_page(l3); if ( mfn_eq(mfn, INVALID_MFN) ) @@ -314,21 +315,22 @@ void paging_mark_pfn_dirty(struct domain =20 l2 =3D map_domain_page(mfn); mfn =3D l2[i2]; - if ( mfn_eq(mfn, INVALID_MFN) ) + if ( mfn_eq(mfn, INVALID_MFN) && dirty ) l2[i2] =3D mfn =3D paging_new_log_dirty_leaf(d); unmap_domain_page(l2); if ( mfn_eq(mfn, INVALID_MFN) ) goto out; =20 l1 =3D map_domain_page(mfn); - changed =3D !__test_and_set_bit(i1, l1); + changed =3D dirty ? !__test_and_set_bit(i1, l1) + : __test_and_clear_bit(i1, l1); unmap_domain_page(l1); if ( changed ) { PAGING_DEBUG(LOGDIRTY, - "d%d: marked mfn %" PRI_mfn " (pfn %" PRI_pfn ")\n", - d->domain_id, mfn_x(mfn), pfn_x(pfn)); - d->arch.paging.log_dirty.dirty_count++; + "%pd: marked mfn %" PRI_mfn " (pfn %" PRI_pfn ") %s\n= ", + d, mfn_x(mfn), pfn_x(pfn), dirty ? "dirty" : "clean"); + d->arch.paging.log_dirty.dirty_count +=3D dirty ? 1 : -1; } =20 out: @@ -337,6 +339,16 @@ out: return; } =20 +void paging_mark_pfn_dirty(struct domain *d, pfn_t pfn) +{ + mark_pfn_dirty(d, pfn, true); +} + +void paging_mark_pfn_clean(struct domain *d, pfn_t pfn) +{ + mark_pfn_dirty(d, pfn, false); +} + /* Mark a page as dirty */ void paging_mark_dirty(struct domain *d, mfn_t gmfn) { @@ -349,7 +361,7 @@ void paging_mark_dirty(struct domain *d, /* We /really/ mean PFN here, even for non-translated guests. */ pfn =3D _pfn(get_gpfn_from_mfn(mfn_x(gmfn))); =20 - paging_mark_pfn_dirty(d, pfn); + mark_pfn_dirty(d, pfn, true); } =20 #ifdef CONFIG_SHADOW_PAGING --- a/xen/arch/x86/include/asm/paging.h +++ b/xen/arch/x86/include/asm/paging.h @@ -165,8 +165,9 @@ void paging_log_dirty_init(struct domain =20 /* mark a page as dirty */ void paging_mark_dirty(struct domain *d, mfn_t gmfn); -/* mark a page as dirty with taking guest pfn as parameter */ +/* mark a page as dirty/clean with taking guest pfn as parameter */ void paging_mark_pfn_dirty(struct domain *d, pfn_t pfn); +void paging_mark_pfn_clean(struct domain *d, pfn_t pfn); =20 /* is this guest page dirty?=20 * This is called from inside paging code, with the paging lock held. */ From nobody Sat May 18 23:55:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1650968867; cv=pass; d=zohomail.com; s=zohoarc; b=ilrgdvxI6uPWSZ/qWksPkmRKzjdYQuzhNxJnn0VLOZ6McqZexByIYX0s2eGG2WKejlrZ8tzU42sRkrTpJcHPB+jC70MNPFMZOIj/sdsejJel3m3jRFI7Il6FjTTM36DpxW1Mv0hNrDXa2Zdv0SFD47JJ23Bv7abe4On/+RK7H5Q= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1650968867; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lOjHQbvjAHuNhYfaLpMKdkqXrWxqv6HPbYChJwJDg6s=; b=KeX1OIGqnQYUbnyOgjoUfWqA/q+ZpSdENJCEHz0aveM9P1gLQN99Z4qIZZ0IMrJnBpianfUmx/O5VYAfbspnoZf3uAgUNdpylmtlErJro8YvIXie+a6cpjAxwQWxGDkxptzP5FA7UfJUu3oY2cbrG2cvNYbu1hxzA4kNxoCDSps= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1650968867311762.2564755868649; Tue, 26 Apr 2022 03:27:47 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.313718.531424 (Exim 4.92) (envelope-from ) id 1njIPn-0001h9-62; Tue, 26 Apr 2022 10:27:27 +0000 Received: by outflank-mailman (output) from mailman id 313718.531424; Tue, 26 Apr 2022 10:27:27 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njIPn-0001h2-2z; Tue, 26 Apr 2022 10:27:27 +0000 Received: by outflank-mailman (input) for mailman id 313718; Tue, 26 Apr 2022 10:27:26 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1njIPm-00013U-1E for xen-devel@lists.xenproject.org; Tue, 26 Apr 2022 10:27:26 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 77036a99-c54b-11ec-8fc2-03012f2f19d4; Tue, 26 Apr 2022 12:27:25 +0200 (CEST) Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-he1eur02lp2053.outbound.protection.outlook.com [104.47.5.53]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-39-SQPZjC1tNVe3H6HnzLSA_w-1; Tue, 26 Apr 2022 12:27:16 +0200 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) by DB8PR04MB6490.eurprd04.prod.outlook.com (2603:10a6:10:10d::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.21; Tue, 26 Apr 2022 10:27:14 +0000 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f]) by DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::5cb0:5195:4203:7c2f%9]) with mapi id 15.20.5186.021; Tue, 26 Apr 2022 10:27:14 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 77036a99-c54b-11ec-8fc2-03012f2f19d4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1650968845; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=lOjHQbvjAHuNhYfaLpMKdkqXrWxqv6HPbYChJwJDg6s=; b=J91soNFfJrWW9E+zp9jZod1w9Rt8yKlgfNMEE7lnBgeKohrP1xDdKr5Xwtu4HGmKRXx0mt dkK9ZZxPpX0QCnhyflzej1YGDUM8OH8jX+Ef7WSer+GazybQfZzMP/RjGXjbRdig3bzBpH VvI0L5OOjX9kVmtxv6imso7FszeOa3o= X-MC-Unique: SQPZjC1tNVe3H6HnzLSA_w-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a0HCQxy/rwcoRNVQWgX8z16CNC3WzwCyj2163Gs0HBp0Ce0gxIOLNT8OTXXZyvoEhbtCFVH4jWb0WabqQ83hkfHfNwAoBrKB8VtKAFJ4XHnAmyzeACoYAgv/7esL1O3Pj9464fL05vLuFTPMTA4NBbLCNsR2/ydRnWISluHthAQwwy9feRb16YjtyXvFQC6exCGoqRt2tmoDTq+xOaq4Y0j73cLIx4Cx5KO2ZAVfIJXgW5OE3rR3QRNo2TUPjVKXfDIC8m0TegoJmo3m8cRPUU52un1xud5qnNZhii6shMpPv8CvS6BTOvKU2odqQmsZyooiIr/TboQ3PfnHp9tjbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=lOjHQbvjAHuNhYfaLpMKdkqXrWxqv6HPbYChJwJDg6s=; b=Tm0PVVMHKmQFK701yt4mUv5vTgKqGdesq+YvqpPauhwgkK1kpAs7s790mhHh/cWCQOARrViWPGpg+t0Soa9UwJQAkImAaLJwE/UENTTltLhPZg+w5lABA+IWxaHnQH/7HJ+S1YY1A8FxdC8B7K83CjfbO4y0tSXR+tBQ5qKYYLhhmNlWS1PqYMePEYL3/izTu5mllWh3m7mlJV5TpypicM20FnoYc5YtQUXYLfP+JPAVMQnfH5Jcv4NMdSydOXE8yobbQ/JH4v9mm+DOqGFD10AUysdYWhi7hk8NkURuaX5mtMfg83hEnn2Qu+RaqEn+P4/I9G4DkSffNYJRhZqhwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <6d6144f6-489e-d9b0-b590-f5d65c385116@suse.com> Date: Tue, 26 Apr 2022 12:27:13 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: [PATCH v3 8/8] SUPPORT.md: write down restriction of 32-bit tool stacks Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Anthony Perard , Andrew Cooper , George Dunlap , Julien Grall , Stefano Stabellini , Wei Liu References: In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS8PR04CA0113.eurprd04.prod.outlook.com (2603:10a6:20b:31e::28) To DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 34508f68-a06f-4300-a9a5-08da276f550c X-MS-TrafficTypeDiagnostic: DB8PR04MB6490:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8xGre95ZSjcj67qXqX0hYLjNpjOMkrPryKyqzMqMLZUb2pvG2SmRpOA9i+HriCPZiKnYQNKRmYQIrjEQJ5Q83h3ug5IhEqLqLQoEFSTYfxom1IA7Hom8dZzj5uckkIJiYOf0e2DCQOt2ieY8olBrYYnzZtPk2ZIJO51C9gBHaF9mhCgF7MLZXWJTO2JDPqK/mQ7hQCXfAk7b2WhYtNzEx1ycq/P2yAl+h7gR5iXHsD8ngQH6JckU/SJFyf8XhhiMxy9CaJqAGumohTK8Cv8dF0jHTNso6nzgr5OkayMkImZB8ijbHTOofwl0/3gLd+Jw7EhWsK7sW/Bq+XGk29Zh3Tq3qhx6LvsRuW00dM4343l2psE+6FpdYUxSIcKX79tX3VhGB0GVeT8vGYhs1FkuGZ7gbAA6OjXeb/Q28apVLi6x67qMPPfp62piWt4fJdiOIOtdAbk0DMCpDhclWmsPDsERTxUZHplVPzH/yDeo8k2iWLqIlXchS4M765okTqzDWe8I3JvexUeyEusb+jsVo1UH9gcHc/pQEHOXwfZXicCyTMueXPaLkxS90WAOuHZ37HV4o35lbJWoxH/TYeLE+p3+YJzHQp/5aU4HYMqwPjwesmwxTitdIZHa2Xl2Rdr+CNRpfOpYBjkCaEJDRv4KRIXSaa5RtoowWTz5coVkPpfIGkrn1pHssr5TJMxfBu95htELP1N5gx/bqEGuXPce2fZ0DlQhfE8iMWIng7TLb4M9aMeJ3SEt6prLR1A5Ia8m X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8616.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(6506007)(26005)(38100700002)(6486002)(6512007)(66556008)(508600001)(36756003)(4744005)(5660300002)(2906002)(31686004)(8936002)(2616005)(66476007)(66946007)(8676002)(4326008)(186003)(54906003)(6916009)(31696002)(316002)(86362001)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VzlZdmFmeldUdnFnN0w4d1h1SDZCbUkwakJUL2FueFBBNjFxOTQwZ0ljVDNM?= =?utf-8?B?YzBiQTE5NFI0cE1hWlljZGpVdGNOMjNqZUI3Rlh4SVVsVVJVY1JBMXRDNmVS?= =?utf-8?B?bWhrWmJLSUhIaWtBMVBSQy9VaVJtckl4V2tzQ0tqVTJKRmJjUlZZbjVxQnEx?= =?utf-8?B?aElhK0xVbUN1Rk9YMW9UN3RCWTZCZVJyUUhEc25kaWUvbXdNQys0UWlsdUpo?= =?utf-8?B?cXB2TUZqdEhPNTBDTU5IemVPeEhmYlgxUHM5bDRUSEdHSyttMmhuVVRkemtK?= =?utf-8?B?QUJYOVJweHozekJoM1d0TFF5VVdHUTR1VFd2MkowNU1BS3pDZlFzRzVVTHY0?= =?utf-8?B?SmIzUyt0VEFQZVdXQm1XaFBJUFA5ZVlZRGR2NDlCMHRWdytzMUxQc0xobEJj?= =?utf-8?B?bXVRTFBXaTdLZkFqTGJvcmZsZFYxYWd0ck1PMDNqOFRjZDZSYnQ5WXlmU1pL?= =?utf-8?B?ZWhva2pwb0ZvZmRiYWxUUVVMNzloTG5ZcWxLekdpb24wL0k1dkxnNERkY1d2?= =?utf-8?B?dzBHZTBZRnRxK1hZaGkvSUEyS1Qzd2FLMDlrZkgrMldXTWlIRWRULzlqMUhL?= =?utf-8?B?VmZ4UlJaUytHaUJ2ejNrQlQ3Tk5zTzFyMXA3aEd0UXFCVGFTQk9ONHExN1Fh?= =?utf-8?B?ZVV5ZkVkQ0JXeTd5OCtvOVF6LzlBaFZna3E1ZVM5bFpVN2FrSGNXdUlZUGpT?= =?utf-8?B?Und3SVFwU0szcGlocXo4V0VhY2luMHZEZ1pjUm1MY09EdTFHQktZbDdLWjhU?= =?utf-8?B?Ni8xR3A5RlcwNnI2RGE0NEwvZzRtdFVvVGFSeFNxYXM5ZGE3eElmSTkrVjlZ?= =?utf-8?B?S1hTTjNralNkU3BrZkQ5V21yT2Z4TnlXaUdXVHBLOHVaK3hOL213d1IxbmFV?= =?utf-8?B?c01wWU5kOFMydjZJWTJweFlBTVAxWHVYSnUvTzVQOGFaRXBEZUFsbmZGb3FO?= =?utf-8?B?UlhGdVlXckxmVTNWNGpoQTRSZkl6OHVuMTRNYWVqamhJY3QyZ3F6bWQxenQ2?= =?utf-8?B?RUg0SU5xYnFrWmcvNkhRaS8zVnp1SkZWaVFocVRXNUs4citQZVhqdll6US94?= =?utf-8?B?NStqakpaUWorNTViREFFazZnRG1ZQ2lPOURsZmdMTTlseW1rQWMydDdaTGlQ?= =?utf-8?B?eXh3Y1lGdzJCbDlLNHJLZjV0QjcvT1RKejJ2bzVtVmMrcnlOT0Fza0ZwQ1dZ?= =?utf-8?B?c1hkb2U0cXZ0OE04KzZxb2FzQklqQk9LM29tcVcxZWVLeW9USk1OR0w1T1Jy?= =?utf-8?B?bWhjRFFLVUhjRE94SXA2YnZsU3B2aHU2ZWt6Y0JzeUJVbUFyTmRmVFM5MGpv?= =?utf-8?B?Nll3ZFNMVXB2azErSmhIa0RzNVhyOTROaVNFZTFMTVVDaGY0VjdYWlR6MEVo?= =?utf-8?B?MElvc1hkK21UTjg1SVkrSlNweG9yQ2pZb2RlM1U5Ti81MGpYZzQ5cHlWOGky?= =?utf-8?B?UzR2NHVYbmM3U2VzYVB5VW1nYlNvRG5DbjlLVXp1TEVrc05YY0Y4K0IyK2JT?= =?utf-8?B?OGJjcjRPNFZlNFNlcGl4K3FhMllrYnpTRVlaYWc2SmtrK0RpWms3WVZaSWx2?= =?utf-8?B?bzZicUl6WFZ1cGVoZlN4Q0RRLzVud0xrWHhoeFRaQzRrcHM0ZmtKOGxVd29s?= =?utf-8?B?RktVRTVkekFndTc3dGc3L0ZBekhUb25DemtNT1JMWDI5MUQwcnJpcXF4MkZC?= =?utf-8?B?RzZyQ3R6RHg0Tjh4aHhUS0FTYThaaGtCVHh2SW5adFRJejR3NWRaVnIvaTc2?= =?utf-8?B?czhkZndLakhLUDd2eTFLOXhmOFdUa04wU1V4OEhYVFpjRWlWZFZxT1laSzVB?= =?utf-8?B?OHFrVnpSeklSb2p4a0U5bCtCSkNQY050NXhqalNuR1V6Nm1HbnFzVThvWHFv?= =?utf-8?B?ZDc4TFZqSVNwOWV1a1pFYm5hc1lFeFlDQTJZZllzR2kySW95OGR6UW9lVHYr?= =?utf-8?B?b21INXQrRkl6SVhFbEluMWZWVm9RNGt0eGh1dFBmQkxOVXZXQXZEbnkrZ0FO?= =?utf-8?B?dVlMTHRwci8yKzU4TWxUNFB3OEJLU2lCL0c1Lzh1eHNWTlk0a2VGc29xdER0?= =?utf-8?B?YlJBTkRHN203NEsxbU0rNDFlVStiOFVPQ1A1b0VZT2N5alJyTjhzd3NPT216?= =?utf-8?B?VXovOVN5Ylhtdzk0ZHl1VW51V2lrRk8yTHlVeHAycllGNTlrVmxGL0lXRmJI?= =?utf-8?B?bFN2RWVoaUlPbjRjVDZWU0pkM1dIeXBPa3E2OUhaS3p4V0kyZlRRYkVkMU1B?= =?utf-8?B?VUY3NkdtNHU1R0xkb0NlaGJZKzRBZGlSWVkzOU9Sd2daU3c5RC9HYzlGR29r?= =?utf-8?B?Q1dDQjdZU3NSaE5wSWkyOWZvVVVTdjFVdFR3dWMxb0FJS2Vuc3cwUT09?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 34508f68-a06f-4300-a9a5-08da276f550c X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8616.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2022 10:27:14.9030 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: gccFYk4qLYQUz+duNfWhpYOzOGh6cOrusuHzq7P+M/JLlSFjle2cfNCSL+WEYcBHRkMz0bZN//3mWOwjV+Mq2A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB6490 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1650968867702100001 Content-Type: text/plain; charset="utf-8" Let's try to avoid giving the impression that 32-bit tool stacks are as capable as 64-bit ones. Signed-off-by: Jan Beulich Acked-by: Julien Grall --- v2: Wording adjustments as per review discussion. --- a/SUPPORT.md +++ b/SUPPORT.md @@ -137,6 +137,12 @@ ARM only has one guest type at the momen =20 ## Toolstack =20 +While 32-bit builds of the tool stack are generally supported, restrictions +apply in particular when running on top of a 64-bit hypervisor. For examp= le, +very large guests aren't expected to be manageable in this case. This inc= ludes +guests giving the appearance of being large, by altering their own memory +layouts. + ### xl =20 Status: Supported