{"id":2237938,"url":"http://patchwork.ozlabs.org/api/patches/2237938/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260513163356.3033159-13-shaju.abraham@nutanix.com/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260513163356.3033159-13-shaju.abraham@nutanix.com>","list_archive_url":null,"date":"2026-05-13T16:33:55","name":"[RFC,v1,12/13] target/arm: named_cpu_model: writeback modified ID registers to KVM","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"d5f61bb2b0b94ee02ebc9ced8eab7d6592d34447","submitter":{"id":77003,"url":"http://patchwork.ozlabs.org/api/people/77003/?format=json","name":"Shaju Abraham","email":"shaju.abraham@nutanix.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260513163356.3033159-13-shaju.abraham@nutanix.com/mbox/","series":[{"id":504187,"url":"http://patchwork.ozlabs.org/api/series/504187/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=504187","date":"2026-05-13T16:33:48","name":"named CPU models for ARM64 on KVM","version":1,"mbox":"http://patchwork.ozlabs.org/series/504187/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2237938/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2237938/checks/","tags":{},"related":[],"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256\n header.s=proofpoint20171006 header.b=Ea0M0Ndi;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256\n header.s=selector1 header.b=XdYqZlzT;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4gFzbr30pdz1y5L\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 14 May 2026 02:35:52 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wNCY5-0003Oj-LI; Wed, 13 May 2026 12:35:05 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <shaju.abraham@nutanix.com>)\n id 1wNCXl-0003L6-HV; Wed, 13 May 2026 12:34:46 -0400","from mx0b-002c1b01.pphosted.com ([148.163.155.12])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <shaju.abraham@nutanix.com>)\n id 1wNCXj-0000kL-Ba; Wed, 13 May 2026 12:34:45 -0400","from pps.filterd (m0127842.ppops.net [127.0.0.1])\n by mx0b-002c1b01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 64DGKgAr2442897; Wed, 13 May 2026 09:34:32 -0700","from sa9pr02cu001.outbound.protection.outlook.com\n (mail-southcentralusazon11023118.outbound.protection.outlook.com\n [40.93.196.118])\n by mx0b-002c1b01.pphosted.com (PPS) with ESMTPS id 4e3nv6x90v-1\n (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT);\n Wed, 13 May 2026 09:34:31 -0700 (PDT)","from PH7PR02MB10160.namprd02.prod.outlook.com\n (2603:10b6:510:2e7::19) by SJ0PR02MB8813.namprd02.prod.outlook.com\n (2603:10b6:a03:3d6::9) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9913.11; Wed, 13 May\n 2026 16:34:30 +0000","from PH7PR02MB10160.namprd02.prod.outlook.com\n ([fe80::4ed7:5c74:48e0:ff23]) by PH7PR02MB10160.namprd02.prod.outlook.com\n ([fe80::4ed7:5c74:48e0:ff23%7]) with mapi id 15.20.9891.021; Wed, 13 May 2026\n 16:34:30 +0000"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h=\n cc:content-transfer-encoding:content-type:date:from:in-reply-to\n :message-id:mime-version:references:subject:to; s=\n proofpoint20171006; bh=eSWNtzO2D9cGJylkx4I3O/eG73/2+KCOKxV/h7JoR\n fo=; b=Ea0M0NdiGUH4G2a/mXZ2nggYhpUfZPwVZ0Kl6JRZ+lF+HC3uWnXRZ7X6h\n 5Ud1vVCf/tLroAdiR/INnxEwdMZAoASvA6S+NOGkcES7i01XiqDrOIpUwAekuML5\n Ba6tpuE7bKcRk344ZKFNhvQ57k1nTRTeR6LvtD6G2rrVfRp7nfKyAAoTviJeAaS0\n yuVoPliosZIIA0GXvdCpv37bq0p+RwK+pfr+bgnvH3JKpNMU0Z3X4zpDU3Ab9h/U\n tm08K2QoWgetB+jw2AtCozlEjsPyE8tKGhZ1wOFKw/5jCYf0o+/sGvDLYtnS2YHZ\n FIPPgu9xkHr2qncqxjQlgvCOOw44w==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=eSWNtzO2D9cGJylkx4I3O/eG73/2+KCOKxV/h7JoRfo=;\n b=XdYqZlzTSEWDnUIugwCaOmmZJ2+jpYbgCxB8JHjQuNbvAW00dCMZHaA0eqpKOmjQwgzjfGTNapV01tAkZ2Nu12sjNmZIfIZUVQe/DfOlF+0q0sjxh43FaSNm1wEN69hxkVBK8iDn18WztkRmaZcnCdtZkJY3a2B9+hbtmVasrk/DZaMkrOySd5sQVqX1wndg26i29lpYGJnNkHMJjk5AAp0LPMSqqI+J/XNhTx4SL95dhlnVT1JSzjkZS7zWwHCDjxMkYuvC2zzUgcSPnjXTy7jx6SU4GzOETU6j6RX9ojYkyJbLjwBYA2GIf2jWukFw4kZjQEqiamHoobANdOLF7w=="],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=KY+bC0/KSH5EDvlF3U3d2IDJlzt0cb+Lgpri5rb7p3DxGRKgrRiNu4d5WE6OxCPLiLBQ/CvI9rcf8Ab61kxVjNp87Lour5wAXzamSKAzpfbRhIfGMFMcIQ3j+f7dfLh5BximKoTmhJg1sn5YxiA/vPuTjCxQUquphW1dY3soxkP5gFfOmccYJKQBhCHDeQQvoT7IT6BJFUj6OJU9OtKt4+NdLMnJQJCbKPpkdRp3Yn7DIzTxQZfYh6HnOYiX63cj1d87WmjMT0VBl5CDvq1neiNlT19kJidWqUJ4BUJIWYr3TtVUlgXVR5eqmQmAF+K9JX8rQkOEkCUnC3sogxRptw==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=eSWNtzO2D9cGJylkx4I3O/eG73/2+KCOKxV/h7JoRfo=;\n b=SQKkjaTUJaCuD6T9yzmGyNoFldcOqnNNazR4bAtXkdZeKEF0JYeLQkhK5ai/EDhha6e26HCxqzolbtWRhAqlcZWvLkr7QjtzLwQfEyIPy6C4xTGS+o4qk4C8KvQ+GhSvauzGvVDJuv3JgiHrAXBkALgyB0+QtL6rPWtNDI108N/x/QMth91qTI/hI9G4FVQjcjWcAS7S+U5YzbJTSDST7e9H2utZhkeYW2STmyMXM9eEHHbRmxk6BFchpD5YY08ZEgY2tk5tGywrIYE4rbmoKT8EJ9IpacKjm6boskB26dIkiTO67V1FgOUDXAKV04sOMp2wnQOC6BJTk0QtmAzaFA==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com;\n dkim=pass header.d=nutanix.com; arc=none","From":"Shaju Abraham <shaju.abraham@nutanix.com>","To":"eric.auger@redhat.com, qemu-devel@nongnu.org, qemu-arm@nongnu.org,\n kvmarm@lists.linux.dev, peter.maydell@linaro.org,\n richard.henderson@linaro.org, cohuck@redhat.com, sebott@redhat.com,\n skolothumtho@nvidia.com, philmd@linaro.org","Cc":"maz@kernel.org, oliver.upton@linux.dev, pbonzini@redhat.com,\n prerna.saxena@nutanix.com, jon@nutanix.com, jond@nutanix.com,\n Shaju Abraham <shaju.abraham@nutanix.com>,\n Khushit Shah <khushit.shah@nutanix.com>","Subject":"[RFC PATCH v1 12/13] target/arm: named_cpu_model: writeback modified\n ID registers to KVM","Date":"Wed, 13 May 2026 16:33:55 +0000","Message-ID":"<20260513163356.3033159-13-shaju.abraham@nutanix.com>","X-Mailer":"git-send-email 2.43.0","In-Reply-To":"<20260513163356.3033159-1-shaju.abraham@nutanix.com>","References":"<20260513163356.3033159-1-shaju.abraham@nutanix.com>","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-ClientProxiedBy":"CY5PR10CA0003.namprd10.prod.outlook.com\n (2603:10b6:930:1c::30) To PH7PR02MB10160.namprd02.prod.outlook.com\n (2603:10b6:510:2e7::19)","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"PH7PR02MB10160:EE_|SJ0PR02MB8813:EE_","X-MS-Office365-Filtering-Correlation-Id":"6e6f80a3-60f4-4718-5b85-08deb10d8177","x-proofpoint-crosstenant":"true","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"BCL:0;\n ARA:13230040|7416014|376014|366016|1800799024|921020|18002099003|22082099003|56012099003|3023799003;","X-Microsoft-Antispam-Message-Info":"\n jrongxhVcKjd96sOirH+zFeh+tiJyIr8I/iHM1XB3BzM8PmeltEqn6i1MzqgwL+pyIbBuf1ljcm4G5N4+xbxHUp4+i0j8BO5UE1+k1fgHL8Eg0lPm9cJ3JcsD17GbQ31ksCHf1pzJydySsOffm/BRqeoaK5qlyMxqUtiHFZ1PPsH0tBagUJx7VirDJTgK3/IaX2ES5cR3Ypv3rHHZxCwU9z/V0edRTHn4K5DjgXEzOmbwYrT+8V3Ln/NLPwvu6XsXl+fJKlCvX4ZjqUdUelBn/eqwiGwAGmSjlm6c9dJkJtUl2+M0X74ZARdhM7zwAZcPCIdBQ2BxzNcgYJmRdLzYJDUObre5Hia1NGx9yInEJqwAiWSGLPypSUFZjqLZiW8mld1pMzzCbBG7OkaGD120l2vE0HvOlNGdxNZvXkoF80AThNxjjSWlGh3zI7kRDTqO1QbLLPUZMU0+VgNOA1Txf1ku4NiQ3mL1O5Veo4PHlhueUvJPjRlrVGrq1zsqC3TqZ9WW8K3Dj+V3vgrIqzGnF2EuyIphOnnw9Wrlbf2x4IsIGQrLW+FcOXQZu7WIkmyh0LW6fZJsklqul/gQcCOnSTCFLrY0eHzoMgGGndCTeXPLmmWOXJoV0JVMekRb1/Yi0LkDwH0NECtJgi9/qUPrg1l1nlHWlDxqNz7FUtTn4zGA1k2cv8CSV7MBYvHA9IlhVyhBIEReLNKJUCsfp98y1BJ5+k+zX9PxOCH9BaoP0o=","X-Forefront-Antispam-Report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:PH7PR02MB10160.namprd02.prod.outlook.com; PTR:;\n CAT:NONE;\n SFS:(13230040)(7416014)(376014)(366016)(1800799024)(921020)(18002099003)(22082099003)(56012099003)(3023799003);\n DIR:OUT; SFP:1102;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n 0cxTidyhwtXqliShdIrk2cY5AscdFXI2FhQlHmev1X1vOj1vBmbGUFjuYN8BRnN5Jr8tTNoSgQbrn1/rUjIGS883/EOVgrffrRDTEjukdefUfTUJ6B9vwDPfCRhlZGT5uyXa5yQFIGE/F0Mn0EcSBLAkOo0b3262fj3GWm56pkPdwEC6XjRT3sGOVRYQB1gfsnPmVglyXlZxTCaHhF7RVG/f9/+QdycAmPmRJLRwYraPjUgLxe+Qq/+6W5MfhFeaWUvWSEfgtph0d/Ia4bqxKUXUbTFIksg8mM5xFO0Go5W9n2OIL4/+CPDWw84TdR3R+crAeQjuZ86b+Ze6wnsWTk4wPLHjepGyZVw24T+e2zFNCFyaqCNvpwS3Q0sIPg2VgkT5iqr0O2/cIvltiDWoQXWfzvKTiTqaiNsFUHRfAEwoCuLR2cw0fG19LC0Sz3pGfwc9bQ77lycOqLg04bRmkG0pJfnaKG6TlHN1V71FUdgdZF6tkZf1RmznCIMEr3Q7e0GiiPMY+KEs7uxwkROrskhJwlithD8983+5egU3dsG2adyYbcmQ68KPoNUYEe7w91pZa3SZUD+nASbC/tTh4weduX9mnkAFMopEZ7Rpp+JPknxSiM6LB9ptSe2nGK4STWj9WzM7g6ac+wSCpjZEyYHKdC8cFLlmN9QuTiZGBLHHBvtARa7rAM7MLIyDK6E/KWoluY92pRaMi5Q74G63n0tQvk1pJNU1fb2Y1cdeKQsezpzlOA954RnLTZ+8vhfER4OBIADsPS+VarzjazBn6pTvmRX7P92eqA2TkpThzlESqwhhiwAvh+eywXqkGCaUxZ4iCxbsGLWameVq0A5Fi/AcujKbZo1gtSC63NBSaCiZTe+/Sax0aZlLSKWvjNiY+EahWo9eFY28Gh4vmjftaBNgMXwOWQRTWf8xJwz6FM4DrV5xHteyFikLsN/OvHYnTTcnGX+epqEePWO92t+SJ2mTP8jnLARnhhYWEp7jx0OCB4RSfjqEmm5b8xxRQHMW5ubhtRumjdzEWJ6dmbppDF7cx/Z+yAsJGHztrEXm/rVqRczFwpc/1RLTb+uKtneHt+s+ylYawjLL2RejrgKmuLeBRkSZdqRGGYPxf6xA+4je2cIaYv4XTgUGcvJI2RLEfLcVmnNzAddOJe9//BsW+QH3LyPtSNw1tIVgRPkkY2WFIEFknRpK/ge7qiUqWojlhGdjY1gXlF8sUmXCVt/LguCeR9SskWan4pQ5wchOKznSHL2VuFiIZu+VsvPVO6xv0kf4ofkLRWsL7HjvRp7uHtD6/AtRlbKX+E+QDEGbE7psFBzlX3cX5dEkg25H0mOZm8/Gmzb/Ghl82keMou9r28b2LcbOBasJT6Tl+/+5TyMUViLuOM/3cZqR8MtAlip0Zr1SKFK6PzAYlnYNxSvJhjtKvwZo5PAFFvMbDs4m58NzKvjGT0FL2G2NLed4245Z+i8N6AJ1KUYgXBYFVBv9jFy8+lStag2kT21etBzdYTfIXIja46dQ/9vfNkqEf7VkcaR3lBUo/6ywNQJ1oKX5C2mNwllCD2X4xVjeOIuzcJcxJOiIJnJOIP2tCDPj6ymQviU2WINt1EORY7u0+1eyNrAUBRoHGCMf2ntWMn61RNGyb0PwBnXGROLbO/sfo75GR92hdv6WwRWG9Gisjnz3FrLe2xKao/UEEZKPvcCIIpf1AFlK2daglaTlpErsSEbxi9Y1m4z9BeF25I8D8C0MBgyLlESj1vLJDnm3hhFbGNI=","X-Exchange-RoutingPolicyChecked":"\n pOnHTBAnFN/NIgj41oMAsuEIdDROtINsZhq5EuujmlsGf/Ir1gMgtvKbQ84HPMvVEjER91stLUDrcPYmUl0EoojiD+ztsP/j6hOwBr375xYCc05TwWFXkDfD4HQWARXp9PVlJ/KJTCqwSRYv9em7UaxhpTEVRybtUC+eXFBl8KpPhYwIZ51n68Ps7em4AcL/byhj0TLd99AWmNkextA41tAtH7duxS0XK1RehNR+mlB3swBSH09a+totpjlPKZZK2CrxQYAUeT4HF3l27VR/b7buxb7as/1yFP7m3anFeMkUS/VFCMu5VUXNkb4xWFxYAIiZohU8We9hy42vPaWWuw==","X-OriginatorOrg":"nutanix.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 6e6f80a3-60f4-4718-5b85-08deb10d8177","X-MS-Exchange-CrossTenant-AuthSource":"PH7PR02MB10160.namprd02.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"13 May 2026 16:34:29.9664 (UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"bb047546-786f-4de1-bd75-24e5b6f79043","X-MS-Exchange-CrossTenant-MailboxType":"HOSTED","X-MS-Exchange-CrossTenant-UserPrincipalName":"\n t+tvee2HEnhfQfPfKQPMBCQQcpt+8g4CMPrGX84Kv4Vt9UT0IKnXMiG8hxrZKaJ/5XMfR9Y8WkjxB18B7lizcfIx4L0OCNdtP0SbLsozGGk=","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"SJ0PR02MB8813","X-Proofpoint-ORIG-GUID":"yR7C-Ljm3IiRAysimQ9kY0Vcr8amwbE6","X-Authority-Analysis":"v=2.4 cv=P7QKQCAu c=1 sm=1 tr=0 ts=6a04a817 cx=c_pps\n a=emGy3M2YSyErp0/4l4UmgA==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19\n a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19\n a=xqWC_Br6kY4A:10 a=NGcC8JguVDcA:10 a=0kUYKlekyDsA:10\n a=VkNPw1HP01LnGYTKEx00:22 a=VofLwUrZ8Iiv6rRUPXIb:22 a=VUi8bpU7OL1Oj2-RSIOF:22\n a=64Cc0HZtAAAA:8 a=0aVVV3pfCXYwIWacCPYA:9","X-Proofpoint-GUID":"yR7C-Ljm3IiRAysimQ9kY0Vcr8amwbE6","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNTEzMDE2OCBTYWx0ZWRfX4a+c+EvUwUuE\n gDQTE2Gu3zsS65qRnTvUKyz/HlkT6pHGCiwCnmlhP+/YIr8s8uA3dsjD6zfz9kmL6EUcsC0dG0s\n LERW8TMFAlUADBuMjZ/ZWqCcrMppQhtdlSIga5BZBBZKVjkmnlKFtzUyncE+NhGiPRZh7kwfRss\n wmr+lCVjkIXMAxtTpxT1uxbtlj99D+WGXsJ4A5Rm+pBAY8Ea0An2HOPBB5WuLwJT20JpXwivCKB\n MbDHel+iPtziUkw10so/lu2xB3wiwj14g/DO3CeHiynCJtLtbqdeAQzzWONkJVoUjvWyyb8GPeV\n PrJK4swrJ2sdU4T3xsGAFmPNYRLpX+zMMijellq3+rFk/upLnbBgfJGh6LqpcjdDOrq+XHWEMpU\n wDnacrVo0g0IETT1Hf6vv3E60RN6JUaATcapnhQ+g9SOmhgKCeYEIdayxr7YO6s/uooMPi0YTe5\n lzNfTXTMPnVS4t/eRhw==","X-Proofpoint-Virus-Version":"vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-05-13_01,2026-05-13_01,2025-10-01_01","X-Proofpoint-Spam-Reason":"safe","Received-SPF":"pass client-ip=148.163.155.12;\n envelope-from=shaju.abraham@nutanix.com; helo=mx0b-002c1b01.pphosted.com","X-Spam_score_int":"-31","X-Spam_score":"-3.2","X-Spam_bar":"---","X-Spam_report":"(-3.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"Writeback modified cpu->isar.idregs[] to KVM after the model is realized.\nWarn if modified bits are not writable by KVM. To facilitate this,\nadd writable_mask to ArmIdReg struct and populate it from\nKVM_ARM_GET_REG_WRITABLE_MASKS during scratch VM creation.\n\nCo-authored-by: Khushit Shah <khushit.shah@nutanix.com>\nSigned-off-by: Shaju Abraham <shaju.abraham@nutanix.com>\n---\n target/arm/cpu-idregs.c |   1 +\n target/arm/cpu-idregs.h |   1 +\n target/arm/kvm.c        | 160 +++++++++++++++++++++++++++++++++++++++-\n target/arm/trace-events |   1 +\n 4 files changed, 162 insertions(+), 1 deletion(-)","diff":"diff --git a/target/arm/cpu-idregs.c b/target/arm/cpu-idregs.c\nindex 5ffdeb5f21..e8988b7392 100644\n--- a/target/arm/cpu-idregs.c\n+++ b/target/arm/cpu-idregs.c\n@@ -68,6 +68,7 @@\n         .name = #reg, \\\n         .fields = reg##_fields, \\\n         .fields_count = ARRAY_SIZE(reg##_fields), \\\n+        .writable_mask = 0, \\\n     },\n \n ArmIdReg arm_idregs[NUM_ID_IDX] = {\ndiff --git a/target/arm/cpu-idregs.h b/target/arm/cpu-idregs.h\nindex 0127bc0a95..eb0d8a1280 100644\n--- a/target/arm/cpu-idregs.h\n+++ b/target/arm/cpu-idregs.h\n@@ -37,6 +37,7 @@ typedef struct ArmIdReg {\n     const char *name;\n     struct ArmIdRegField *fields;\n     uint32_t fields_count;\n+    uint64_t writable_mask;\n } ArmIdReg;\n \n /* Map short register names to canonical _EL1/_EL0 IDX values */\ndiff --git a/target/arm/kvm.c b/target/arm/kvm.c\nindex 7d194ea112..dc64cfbeb6 100644\n--- a/target/arm/kvm.c\n+++ b/target/arm/kvm.c\n@@ -28,6 +28,7 @@\n #include \"kvm_arm.h\"\n #include \"cpu.h\"\n #include \"cpu-sysregs.h\"\n+#include \"cpu-idregs.h\"\n #include \"trace.h\"\n #include \"internals.h\"\n #include \"hw/pci/pci.h\"\n@@ -66,6 +67,12 @@ typedef struct ARMHostCPUFeatures {\n \n static ARMHostCPUFeatures arm_host_cpu_features;\n \n+#define DEF(NAME, OP0, OP1, CRN, CRM, OP2) [NAME##_IDX] = #NAME,\n+const char * const sysreg_names[NUM_ID_IDX] = {\n+#include \"cpu-sysregs.h.inc\"\n+};\n+#undef DEF\n+\n /**\n  * kvm_arm_vcpu_init:\n  * @cpu: ARMCPU\n@@ -244,6 +251,63 @@ static int get_host_cpu_reg(int fd, ARMHostCPUFeatures *ahcf,\n     return ret;\n }\n \n+static int get_host_cpu_idregs_all(int fd, ARMHostCPUFeatures *ahcf)\n+{\n+    int err = 0, i;\n+    for (i = 0; i < NUM_ID_IDX; i++) {\n+        /* Skip registers whose plumbing is not yet added. */\n+        if (!arm_idregs[i].name) {\n+            continue;\n+        }\n+\n+        err |= get_host_cpu_reg(fd, ahcf, i);\n+    }\n+    return err;\n+}\n+\n+static int idregs_idx_to_kvm_idx(ARMIDRegisterIdx idx)\n+{\n+    ARMSysRegs sysreg = id_register_sysreg[idx];\n+\n+    return KVM_ARM_FEATURE_ID_RANGE_IDX(\n+        (sysreg >> CP_REG_ARM64_SYSREG_OP0_SHIFT) & 0x3,\n+        (sysreg >> CP_REG_ARM64_SYSREG_OP1_SHIFT) & 0x7,\n+        (sysreg >> CP_REG_ARM64_SYSREG_CRN_SHIFT) & 0xf,\n+        (sysreg >> CP_REG_ARM64_SYSREG_CRM_SHIFT) & 0xf,\n+        (sysreg >> CP_REG_ARM64_SYSREG_OP2_SHIFT) & 0x7);\n+}\n+\n+static int get_writable_id_regs(int vmfd)\n+{\n+    int cap, ret, i;\n+    uint64_t regs[KVM_ARM_FEATURE_ID_RANGE_SIZE] = { 0 };\n+    struct reg_mask_range range = {\n+        .addr  = (uint64_t)(uintptr_t)regs,\n+        .range = KVM_ARM_FEATURE_ID_RANGE,\n+    };\n+\n+    cap = ioctl(vmfd, KVM_CHECK_EXTENSION,\n+                KVM_CAP_ARM_SUPPORTED_REG_MASK_RANGES);\n+    if (cap <= 0 || !(cap & (1 << KVM_ARM_FEATURE_ID_RANGE))) {\n+        return -ENOSYS;\n+    }\n+\n+    ret = ioctl(vmfd, KVM_ARM_GET_REG_WRITABLE_MASKS, &range);\n+    if (ret) {\n+        return -errno;\n+    }\n+\n+    for (i = 0; i < NUM_ID_IDX; i++) {\n+        int kidx = idregs_idx_to_kvm_idx(i);\n+\n+        if (kidx < 0 || kidx >= KVM_ARM_FEATURE_ID_RANGE_SIZE) {\n+            continue;\n+        }\n+        arm_idregs[i].writable_mask = regs[kidx];\n+    }\n+    return 0;\n+}\n+\n static uint32_t kvm_arm_sve_get_vls(int fd)\n {\n     uint64_t vls[KVM_ARM64_SVE_VLS_WORDS];\n@@ -455,6 +519,22 @@ static void kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)\n             arm_host_cpu_features.sve_vq_supported = kvm_arm_sve_get_vls(fd);\n         }\n     }\n+    /*\n+     * Try to read all the ID registers. KVM does not yet support it\n+     * for all registers, hence ignore the errors.\n+     */\n+    get_host_cpu_idregs_all(fd, ahcf);\n+\n+    {\n+        int wret = get_writable_id_regs(fdarray[1]);\n+        if (wret) {\n+            warn_report(\"KVM_ARM_GET_REG_WRITABLE_MASKS\"\n+                        \"%s: %s\",\n+                        wret == -ENOSYS ? \" unsupported\"\n+                                        : \" failed\",\n+                        strerror(-wret));\n+        }\n+    }\n \n     kvm_arm_destroy_scratch_host_vcpu(fdarray);\n \n@@ -1080,6 +1160,71 @@ void kvm_arm_cpu_pre_save(ARMCPU *cpu)\n     }\n }\n \n+/* same as kvm_arm_get_cpreg_ptr() but can return NULL. */\n+static uint64_t *kvm_arm_find_cpreg_ptr(ARMCPU *cpu, uint64_t regidx)\n+{\n+    uint64_t *res;\n+\n+    res = bsearch(&regidx, cpu->cpreg_indexes, cpu->cpreg_array_len,\n+                  sizeof(uint64_t), compare_u64);\n+    if (!res) {\n+        return NULL;\n+    }\n+    return &cpu->cpreg_values[res - cpu->cpreg_indexes];\n+}\n+\n+static void kvm_arm_writeback_idregs(ARMCPU *cpu)\n+{\n+    for (int i = 0; i < NUM_ID_IDX; i++) {\n+        uint64_t kvm_reg = idregs_sysreg_to_kvm_reg(id_register_sysreg[i]);\n+        uint64_t *cpreg = kvm_arm_find_cpreg_ptr(cpu, kvm_reg);\n+        const char *name = arm_idregs[i].name;\n+        uint64_t writable_mask, previous, desired, diff;\n+\n+        if (!cpreg) {\n+            warn_report(\"KVM does not expose ID register slot %d \"\n+                        \"(kvm_reg=0x%\" PRIx64 \"), %s; skipping writeback\",\n+                        i, kvm_reg, sysreg_names[i]);\n+            continue;\n+        }\n+\n+        if (!name) {\n+            /* No field table, don't push back. */\n+            warn_report(\"ID register slot %d \"\n+                        \"(kvm_reg=0x%\" PRIx64 \"), %s: \"\n+                        \"no field table in cpu-idregs.inc.h\",\n+                        i, kvm_reg, sysreg_names[i]);\n+            continue;\n+        }\n+\n+        writable_mask = arm_idregs[i].writable_mask;\n+        previous = *cpreg;\n+        desired = cpu->isar.idregs[i];\n+        diff = previous ^ desired;\n+\n+        if (!diff) {\n+            continue;\n+        }\n+\n+        if (diff & ~writable_mask) {\n+            warn_report(\"%s: non-writable bits differ: \"\n+                        \"kvm=0x%016\" PRIx64\n+                        \" desired=0x%016\" PRIx64\n+                        \" diff=0x%016\" PRIx64\n+                        \" writable=0x%016\" PRIx64,\n+                        name, previous, desired,\n+                        diff & ~writable_mask,\n+                        writable_mask);\n+        }\n+\n+        if (diff & writable_mask) {\n+            *cpreg = (previous & ~writable_mask) |\n+                     (desired & writable_mask);\n+            trace_kvm_arm_writeback_idreg(name, previous, *cpreg);\n+        }\n+    }\n+}\n+\n bool kvm_arm_cpu_post_load(ARMCPU *cpu)\n {\n     if (!write_list_to_kvmstate(cpu, KVM_PUT_FULL_STATE)) {\n@@ -1116,6 +1261,10 @@ void kvm_arm_reset_vcpu(ARMCPU *cpu)\n         fprintf(stderr, \"write_kvmstate_to_list failed\\n\");\n         abort();\n     }\n+\n+    /* Re-apply named-model ID register overrides after KVM_ARM_VCPU_INIT. */\n+    kvm_arm_writeback_idregs(cpu);\n+\n     /*\n      * Sync the reset values also into the CPUState. This is necessary\n      * because the next thing we do will be a kvm_arch_put_registers()\n@@ -2051,7 +2200,16 @@ int kvm_arch_init_vcpu(CPUState *cs)\n     }\n     cpu->mp_affinity = mpidr & ARM64_AFFINITY_MASK;\n \n-    return kvm_arm_init_cpreg_list(cpu);\n+    ret = kvm_arm_init_cpreg_list(cpu);\n+    if (ret) {\n+        return ret;\n+    }\n+\n+    /* Apply named-model ID register overrides on top of KVM's defaults. */\n+    kvm_arm_writeback_idregs(cpu);\n+    write_list_to_kvmstate(cpu, KVM_PUT_FULL_STATE);\n+\n+    return 0;\n }\n \n int kvm_arch_destroy_vcpu(CPUState *cs)\ndiff --git a/target/arm/trace-events b/target/arm/trace-events\nindex 8502fb3265..975236b24f 100644\n--- a/target/arm/trace-events\n+++ b/target/arm/trace-events\n@@ -13,6 +13,7 @@ arm_gt_update_irq(int timer, int irqstate) \"gt_update_irq: timer %d irqstate %d\"\n \n # kvm.c\n kvm_arm_fixup_msi_route(uint64_t iova, uint64_t gpa) \"MSI iova = 0x%\"PRIx64\" is translated into 0x%\"PRIx64\n+kvm_arm_writeback_idreg(const char *name, uint64_t previous, uint64_t desired) \"%s overwrite 0x%\"PRIx64\" with 0x%\"PRIx64\n \n # cpu.c\n arm_cpu_reset(uint64_t mp_aff) \"cpu %\" PRIu64\n","prefixes":["RFC","v1","12/13"]}