From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11023142.outbound.protection.outlook.com [52.101.83.142]) by lore.virtuozzo.com (Postfix) with ESMTPS id 137398015C for ; Wed, 16 Sep 2026 17:18:54 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oFMilJOZS03oOaR/YVGzc1YhiPpSijnBoCdGjeOr3IAAbPxgjUdG/kFxr7T69O/P10rh0HvgeXecK1+c52uLS6yOte1pf68t+0PD4/EV3E8ivzwmXiDwtvDVnp8AjnF+pmejrM3dialHZ+Lh74jcYprvuU04GY/PqGYc9WTiKGVol7XBkwLIlYnKimMgummtlhk0pKqD2dq+nsDLPuZh8XWiyjZFMyozpPhf9m7tyCTJUc0CPZC/OUQCFZF7ro7SlrOjpOEOrzSjJ7ajR/XCiXOcZZ5n/SaSi1ezP9ZiXWFeA9K9WBr1T5cmJ38K5fdzKe0mQv5hVPcSHmNd1P62Tg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6onvSaU9Scah61aak60jAkxVr3txJiayTXUVkEw3+F8=; b=Gmk5M9mv0aZTGLTQ/mUiTkOnc8X40p6WnCGH/U7FS75JAPF/TOsF41u9IAimcj/8ycF4Y31XBCZu/By7EdQ66Y8s2PsYTuKD5xXQQQvWUdx54q9IJjk7ZNQspyZbqT/duNvK1Q1TeT532GsoX2FjjWFm9tsmkXBZaLXRDC1PZASLz8rvrAT3UIvtpSETpq2WVwrbM/80+BfqgMdM3wq9n72qPz21SZ2H7HtozNSy6tr9VoxmzGRfETw0IvpN/unE6ZkZNQcqp4YNnuu9R6aKjgRY8QWyZfaI/h2hclAir/6d0BVP58qotDMwYrEAum1u0TL55c6S74xGhq/DePUAqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6onvSaU9Scah61aak60jAkxVr3txJiayTXUVkEw3+F8=; b=gB5RogytJT6upF5j1THZxQXt/fRIcXKqk/wE46aa3JZq462Pgel9RJ7al+c9yJ/VJIA3leHWHpMio9XQWQnzVu3+OLu5IEA6OsymS9+kxZJbQXDzZqC4K7n9Mvy8MMFqvuK0r3vukxBGXGEYv5jO7axmXTCWtSOzv8fJacPxmQkvjMwrUeAz1IUkcCEv9ASgKEvb/0rhpMf7qMC+4/L+qP+VH5NbjQaz/FIzHLZa0zqzGiujIXXQXTqPZs9Dh65nOqCRe+AKoHPRvLM5M4LFaW/19i2RB7dK4GcE+l1R+s3ijiReTTOHVmQzI+CkD2FrvRDRWFh6noOkpw8SgIG0BA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DBBPR08MB6140.eurprd08.prod.outlook.com (2603:10a6:10:20a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.11; Wed, 16 Sep 2026 17:18:52 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0428.008; Wed, 16 Sep 2026 17:18:52 +0000 Message-ID: <8f789f96-e3e1-41a1-b566-75f92a78fd26@virtuozzo.com> Date: Wed, 16 Sep 2026 20:18:52 +0300 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH hci-8.0 2/2] migration/cpr: lock the ramblocks #VSTOR-145529 To: "Denis V. Lunev" , svt-core@virtuozzo.com References: <20260916143816.1712971-1-den@openvz.org> <20260916143816.1712971-3-den@openvz.org> Content-Language: en-US From: Andrey Drobyshev In-Reply-To: <20260916143816.1712971-3-den@openvz.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: FR3P281CA0164.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a2::18) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DBBPR08MB6140:EE_ X-MS-Office365-Filtering-Correlation-Id: bc4b7eeb-aa38-4c91-d5a3-08df141694ab List-Id: svt-core@virtuozzo.com X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-Transport-Rules-Loop: 1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|23010399003|1800799024|5113699003|18002099003|22082099003|56012099006|5023799004|4143699003|10067099003; X-Microsoft-Antispam-Message-Info: BJnC9tozaqBd+3EKae1clE30ked4rNxqdk0vZ2UimyQ7QD+cM4iudy5zumFqDN4mvsrgyI62g590RMylAJXK0aPDPhAYXDagu0k2LW8qkavDgB6V64ImfOZwI0gzqUob8nEVS/BcFZG9eAvg6rprhb9FDwuH2zjcDgVwGglclbimMsVItiWFYPyhsf4Glw64rnnNQInjuRsIIf7+BGx5Q5qK94VhQ3r297FlJejzXJn+FO/5XEre7lkLu+0OdaO+d7kr/rZETm2UhHNzrD4PECLliJw9cKI6SKirkxUKPL4YecztfQhD9tZvFOxYWk9buVRs+D0dUIcUEtRP3U83vJTAGlXX/CG194ulmQTTdKb4QxtnFSUbert/ZhQMT3/tYnLVHg2TIUyA7tKG2tw/9gvlSaZZkDXSr1JGb6v69KKHAiRkOw+P9aQZIVT7Kgm3r0o8TyeALZq/GElDSs1keD3EZ0k73FmqFs1qNLAjeWhYTYSKPMmOQJAY9MjySIIQyf8yIbowECIYQ2CYh/oTZwPVqHADct//zrIriXk2ZC8gcbgRSrGJ2y0IWacEjlBf/52mTosYIZvBFePj/jzJ9bchwsh2nkhji8qP9uQjPmKtUROCXwhhCo2xudCrnol5o62v5boUhPNQ0HzSxrzwf/rpjmHeMGBqIVC+B1C3ZpA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB10656.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(23010399003)(1800799024)(5113699003)(18002099003)(22082099003)(56012099006)(5023799004)(4143699003)(10067099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RWppLzVEbnk1UjlyYTFsV21rYVp1THdZM0toeXVHZUFWSGUwQnloK0JTdnV5?= =?utf-8?B?cVRydy9VRnBzL2xXR2p3UVJqRm5lK05HbnRDNmt0a2RManBXSG84eVlUUFhY?= =?utf-8?B?dGNCSkxwSFBvVHZqZ0txU3ZPWU10V1A3d0o5MGNDbG16eWttVmVQcnVPQzY5?= =?utf-8?B?b3AwY1hhamtkSHlVR3JRRGdBMGxwQmtlOEtmSHF5Y2NOM1VaUmd2STg1aFdZ?= =?utf-8?B?WngwTzFWeG56KzBOUDFLbWdTdjZZcm5wSEVmRW1xQW5ZWU1vQWtML3VJYTJ4?= =?utf-8?B?MHU0WmF0OVdsSGRGRUZGVzM2NlhmM2lvZ0l6YlJ5NDJ2R1J2T09sVFNpZnlM?= =?utf-8?B?VW55U0pOUGM2cWNFeGt2ZEszL0xuL2tUOHFmb2FOejFqVzhnUGxxNGgwd09G?= =?utf-8?B?a3hrMlpxY2oyNmo0d2NBNkNpQVdyK0MwSW5jSTJxeHpHU0FESXlVbnFUR1VK?= =?utf-8?B?Z1AwdnRKbSsvdCtCd0pEbzlUZWlWaVR3cmpPSHBOdUZjOUhHaUIzNmpSQ1Bv?= =?utf-8?B?bUFxR1Q2T2VzSk4yK052SWpieHZoS05OY1N1d3VpYXhvKzNpVTJRdmFBY1Qr?= =?utf-8?B?Y0Q5ZXdsSUhjeS9CUWdvMHRGTXF4ZzU5aktoRHNpTGtKMkFlZFJONVg0bVdH?= =?utf-8?B?WUcxT1Z3ZVFla1c3STByc013aDZtWUZFdmJORmJWUlJNS2lBcU1BRXRDeVIv?= =?utf-8?B?VFpEbG5rMzZtdERjTW9CVXlia0hFakQ0cktRaENhTjN0VTdvdVQ2ZDRWTE1I?= =?utf-8?B?bkZhcnF3SmxGbC94NXFKVlZuSFVDU2gwejVhUzkvb2xFbWV5clNtQTNJQzRP?= =?utf-8?B?UVIvcFNoMTNiRkNaZEl5UFBrUi84TmpienF6aGJJSnd1WnRyYVE0elBycEhN?= =?utf-8?B?azZXR1ltdlBHb2M4V0FJenZlT3krL1JneWhjeVlTY25obFZ3cUZDZGdHaGJU?= =?utf-8?B?MkhySkdPWWRvdEZhYnJlb0hTeXZVT3RnY3l0Um0vYmpSSnJHWG80Mmo4UWNK?= =?utf-8?B?VlpNdmNFdWlOUGFQdDIrWmRBZDBZUHYrVGJPL2owUWNSOFhoZHV0bDhkcDI3?= =?utf-8?B?WXd2cXk2Zk5vTytEbmFmOStJaUx1ODNvbGhqblhSZEJCMUN3djJBbGU1bnhQ?= =?utf-8?B?UmVCZjA5cTVwWE5Mc2g5ZzNrSWsyN2VldURKMFFQVXhpSU05b0ZsUERNYjdw?= =?utf-8?B?Q1FHRUFuRTU4TEJ3cGJSODZENUNDbXgxM1dDS29iK2IvazE2dGNLK2E0emE1?= =?utf-8?B?Q0tWUkNIL0JpU0FZS01XOFROajMxTzdhZzJvWjh0WmloU2xyR0lUUE1GRnps?= =?utf-8?B?c2liYW1QaVNoUGJsa3gxMUp6R1NuUTFLaC9hL0RPSTdMQVp0MDlwSFlUZk1s?= =?utf-8?B?K1h6TVNGSmozOUx3UFFKcTZjeHc4aDRzbVJWbkhBdkFaSjNBcTd5QkxvR2xm?= =?utf-8?B?L3lnRTA2VGQxaU9XY1RxV3BZYmZVNHZ6c1pmNnFFMXlWeUNYK3FvaE9ETWtv?= =?utf-8?B?SGtEVlhSWFpyMC95UFBtbzM2L1dBNGVKN2NvOTA1bXRQdk5CZlEzUTFXcWpW?= =?utf-8?B?VTBVZnl6OVVhcHBCbWozcU4vSTNzSzE3UlhERlJsVGdXYmNiVGw1aGV2SWJ6?= =?utf-8?B?MHI0VDE5UTVKU3dvTzAxcWw5ZVRRa3NRdW83WlNsbjNEN01aU2Z5T01zYm8x?= =?utf-8?B?OE5ManNyYVdnV1ZnSTdHRVZBUVpOVWdmMkJZd0hnamllR3I1RlhCSU5Na0h6?= =?utf-8?B?bXozQm1rY1NvT292WXIyMElHTGY5S3A2WVE3cmk5MlRzeXZXdko0cjA4UDJ4?= =?utf-8?B?M1I5TnF1WVZsbk1UcEhpOHVQUTdJOElnM0h0Rkp2UVh2Z1RLZm5yTm9rb2tW?= =?utf-8?B?eXhuWHdXOHdBZDhvWUlQSEg1TVliWnMrMkt0MldtSGxYNUdzZFlUQ01EQ2Jn?= =?utf-8?B?SGQxZ3pXd3lIWWFnNVdMbk1GdmxjdlRDcU5kUTlNeHpZcGg1akJZbzlMbU5N?= =?utf-8?B?UmxlaXp2MXdLN21xZ2Z5ZUMzK3czcklDSTRvdEx0ZFpSbTZqVFVGV2sra2NG?= =?utf-8?B?WE1PQ0dzSTRDUmdzSE15aUpkcy9iZWxSS3JtVmJxblY5akxsM1JjU3ljZWpj?= =?utf-8?B?QzdwTldkSTlLNm5SL2dlSWlXL0l1TUFqaTZPeUxXbUhCenVNK3JZcStIZkdq?= =?utf-8?B?d28xSG44TG1FQzIzSHlSYXZOZXhtdVZKWGVhS1NkMWdlWnJpQTlPOUx5ZzE5?= =?utf-8?B?eE0rYkoySnlvRjVWaXRySnJCMFFLblN3L282NytmMnIvckZwNG5LWW95SDhE?= =?utf-8?B?aXVIQUh2QU5laW5uTDNsZzVmM0VoUVdOMWkwTEQ0U0FzdnVQS1AyczgxZTNu?= =?utf-8?Q?clAtAgLJ5l8kexs0=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: bc4b7eeb-aa38-4c91-d5a3-08df141694ab X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2026 17:18:52.7154 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: LIUBmidKyL8I4S5aS2EQ7NKpkS2lNdbkrIDQzpjek3tnomy4PzJKWSiXZSONbB3BsF3wp/SOcKOaNNagW7LbS7g0KJ/arTK94CPO6EipZ3I= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6140 1. Minor: the ordering claim belongs in code, and in patch 1. "Nothing takes the two in the other order" checks out: the walk callbacks in cpr-exec only do madvise and mprotect, and the ramblock vmstate has no callbacks. But the order was already forced by patch 1, so fold the statement into the lock comment there. 2. Nit: ram_block_add() does find, then save or delete, in three separate acquisitions. It is correct only because the ramlist mutex is held across all three at system/physmem.c:1913-2058. A one-line comment saying the ramlist mutex is the real serializer there would save the next reader the same analysis. On 9/16/26 5:38 PM, Denis V. Lunev wrote: > From: Denis V. Lunev > > The ramblock entries live in the same registry as the descriptors and > are reached the same way, from RAM block setup and teardown, so they > need the same protection. > > Take the lock in their accessors too. qemu_ram_free() already holds the > ramlist mutex when it calls in here, and nothing takes the two in the > other order. > > Signed-off-by: Denis V. Lunev > --- > migration/cpr.c | 26 +++++++++++++++++++++----- > 1 file changed, 21 insertions(+), 5 deletions(-) > > diff --git a/migration/cpr.c b/migration/cpr.c > index 78cf430e386..5c0d2c142aa 100644 > --- a/migration/cpr.c > +++ b/migration/cpr.c > @@ -244,8 +244,13 @@ static CprRamBlock *find_ramblock(CprRamBlockList *head, const char *name) > > void cpr_save_ramblock(const char *name, cpr_ramblock_t ram) > { > - CprRamBlock *elem = find_ramblock(&cpr_state.ramblocks, name); > - cpr_ramblock_t old_ram = elem ? elem->ram : (cpr_ramblock_t) {0, 0}; > + CprRamBlock *elem; > + cpr_ramblock_t old_ram; > + > + QEMU_LOCK_GUARD(&cpr_state_lock); > + > + elem = find_ramblock(&cpr_state.ramblocks, name); > + old_ram = elem ? elem->ram : (cpr_ramblock_t) {0, 0}; > > if (old_ram.addr == 0) { > do_cpr_save_ramblock(name, ram); > @@ -260,7 +265,11 @@ void cpr_save_ramblock(const char *name, cpr_ramblock_t ram) > > void cpr_delete_ramblock(const char *name) > { > - CprRamBlock *elem = find_ramblock(&cpr_state.ramblocks, name); > + CprRamBlock *elem; > + > + QEMU_LOCK_GUARD(&cpr_state_lock); > + > + elem = find_ramblock(&cpr_state.ramblocks, name); > > if (elem) { > QLIST_REMOVE(elem, next); > @@ -273,8 +282,13 @@ void cpr_delete_ramblock(const char *name) > > cpr_ramblock_t cpr_find_ramblock(const char *name) > { > - CprRamBlock *elem = find_ramblock(&cpr_state.ramblocks, name); > - cpr_ramblock_t ram = elem ? elem->ram : (cpr_ramblock_t) {0, 0}; > + CprRamBlock *elem; > + cpr_ramblock_t ram; > + > + QEMU_LOCK_GUARD(&cpr_state_lock); > + > + elem = find_ramblock(&cpr_state.ramblocks, name); > + ram = elem ? elem->ram : (cpr_ramblock_t) {0, 0}; > > trace_cpr_find_ramblock(name, (void *) ram.addr, ram.length); > return ram; > @@ -284,6 +298,8 @@ bool cpr_walk_ramblock(cpr_walk_ramblock_cb cb) > { > CprRamBlock *elem; > > + QEMU_LOCK_GUARD(&cpr_state_lock); > + > QLIST_FOREACH(elem, &cpr_state.ramblocks, next) { > g_assert(elem->ram.addr && elem->ram.length); > if (!cb(elem->ram, elem->name)) {