Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2237938/?format=api
{ "id": 2237938, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2237938/?format=api", "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/1.1/projects/14/?format=api", "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": "" }, "msgid": "<20260513163356.3033159-13-shaju.abraham@nutanix.com>", "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/1.1/people/77003/?format=api", "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/1.1/series/504187/?format=api", "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": {}, "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(®idx, 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" ] }