Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.0/patches/2198169/?format=api
{ "id": 2198169, "url": "http://patchwork.ozlabs.org/api/1.0/patches/2198169/?format=api", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/1.0/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": "<20260219054207.471303-7-manali.shukla@amd.com>", "date": "2026-02-19T05:42:05", "name": "[v1,6/8] i386/kvm: Add KVM_GET/SET_LAPIC2 support for extended APIC state", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "ca0326908857311b190e101b785a6431943ebee9", "submitter": { "id": 90099, "url": "http://patchwork.ozlabs.org/api/1.0/people/90099/?format=api", "name": "Manali Shukla", "email": "manali.shukla@amd.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260219054207.471303-7-manali.shukla@amd.com/mbox/", "series": [ { "id": 492683, "url": "http://patchwork.ozlabs.org/api/1.0/series/492683/?format=api", "date": "2026-02-19T05:42:03", "name": "i386/kvm: Add support for extended APIC register space", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/492683/mbox/" } ], "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2198169/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 (1024-bit key;\n unprotected) header.d=amd.com header.i=@amd.com header.a=rsa-sha256\n header.s=selector1 header.b=Y2X8kkl2;\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=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.gnu.org (lists.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 4fGvzq3MW6z1xxd\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 20 Feb 2026 00:56:07 +1100 (AEDT)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vt4VS-0007Si-2Q; Thu, 19 Feb 2026 08:55:50 -0500", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <Manali.Shukla@amd.com>)\n id 1vswpJ-0006NB-Ey\n for qemu-devel@nongnu.org; Thu, 19 Feb 2026 00:43:49 -0500", "from mail-eastusazlp17011000f.outbound.protection.outlook.com\n ([2a01:111:f403:c100::f] helo=BL2PR02CU003.outbound.protection.outlook.com)\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <Manali.Shukla@amd.com>)\n id 1vswpG-0007n1-KS\n for qemu-devel@nongnu.org; Thu, 19 Feb 2026 00:43:49 -0500", "from BY5PR03CA0005.namprd03.prod.outlook.com (2603:10b6:a03:1e0::15)\n by LV2PR12MB5919.namprd12.prod.outlook.com (2603:10b6:408:173::17)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.13; Thu, 19 Feb\n 2026 05:43:41 +0000", "from SJ1PEPF00001CDE.namprd05.prod.outlook.com\n (2603:10b6:a03:1e0:cafe::81) by BY5PR03CA0005.outlook.office365.com\n (2603:10b6:a03:1e0::15) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.14 via Frontend Transport; Thu,\n 19 Feb 2026 05:43:40 +0000", "from satlexmb07.amd.com (165.204.84.17) by\n SJ1PEPF00001CDE.mail.protection.outlook.com (10.167.242.6) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9632.12 via Frontend Transport; Thu, 19 Feb 2026 05:43:40 +0000", "from brahmaputra.amd.com (10.180.168.240) by satlexmb07.amd.com\n (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Wed, 18 Feb\n 2026 23:43:37 -0600" ], "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=lsqh6jDo8HbpV1qpnElYxuQYDvkhmg0JZhC63T54fEXvof4SdZNr+dpUAJudYKrDy3M6VZ5dN5DEarwephK4QLumv1ot6/eVLxxuvf6x3FVUeJUkT/dlgvjx+iA/W8ydXiv2m0rkc2HQuFBNIRjZLQdb/9qzf/hygH/kDsRNt1DFkS5qDdbR6PR+TPELzR06WdPBIjKObnlANwcN9zeY77JzfItNaZVAfXYhNo7PdIhWHVVh5VjBe2sY7fTAyxDyrXi0RiuFyI8vfmeC43W0aVg2QhlTzQns+LZEPlBxrjX6nBjLOIsiWBVJQs0gv0pV+QJTxslcJbCeRbuOG1VXMw==", "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=Col43SzJeNwKuNZ6EMFerTnHD5qjf0AvUpZrXsGDfmk=;\n b=C+sTw3A6KbW+7+14EEMxMyHTZablvWmC6gFSM5AJEO79igZ3XCtOHfHxm7v0fs1ieW9Gn0XaenJVs8bOx5wZ7E3Ydf4mziyImBRk8/ON/uZ+nYrrHU49Vh+BnwLHXy157mXlrkfWk9zUzk8iQrt1SG2fONlyHOUGfqj7TU2Xu/el3hoDDN/6u4uD2fpzGL9BAHUnxdHV8Swi4YGT3OiRCGUAaoqGkzMuVls7AUFuxG75A/MLjeFThR5UKs+5v+7H1iSaYY+TyPJ9B/oJ+NHB3S07qIyanHIH9dZtwfeQwCBS952MaEQTvrcv/1CkMz+QUfz3qOVrF27nrGYHCkwoog==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 165.204.84.17) smtp.rcpttodomain=nongnu.org smtp.mailfrom=amd.com; dmarc=pass\n (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com;\n dkim=none (message not signed); arc=none (0)", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=Col43SzJeNwKuNZ6EMFerTnHD5qjf0AvUpZrXsGDfmk=;\n b=Y2X8kkl2oGKOsRRyw7SbX1gwYqYWNdtbu1pVkfAyZEjf9EI3Ke8kFyCNfWIc/N2ugmVQ6jah9nbMIm+6OHatnq64+aXzFm1d806w6u3J62f2afmMSbJlNCoweFuJaOEJBo4L7CFzogpSER7cDkJsnaKwSv9vrBPDQKqI5TlHObc=", "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 165.204.84.17)\n smtp.mailfrom=amd.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=amd.com;", "Received-SPF": [ "Pass (protection.outlook.com: domain of amd.com designates\n 165.204.84.17 as permitted sender) receiver=protection.outlook.com;\n client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C", "permerror client-ip=2a01:111:f403:c100::f;\n envelope-from=Manali.Shukla@amd.com;\n helo=BL2PR02CU003.outbound.protection.outlook.com" ], "From": "Manali Shukla <manali.shukla@amd.com>", "To": "<qemu-devel@nongnu.org>", "CC": "Cornelia Huck <cohuck@redhat.com>, Eduardo Habkost <eduardo@habkost.net>,\n <kvm@vger.kernel.org>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,\n \"Marcelo Tosatti\" <mtosatti@redhat.com>, \"Michael S . Tsirkin\"\n <mst@redhat.com>, \"Paolo Bonzini\" <pbonzini@redhat.com>, Sean Christopherson\n <seanjc@google.com>, Richard Henderson <richard.henderson@linaro.org>, Naveen\n N Rao <naveen@kernel.org>, Nikunj Dadhaniya <nikunj@amd.com>,\n <manali.shukla@amd.com>", "Subject": "[PATCH v1 6/8] i386/kvm: Add KVM_GET/SET_LAPIC2 support for extended\n APIC state", "Date": "Thu, 19 Feb 2026 05:42:05 +0000", "Message-ID": "<20260219054207.471303-7-manali.shukla@amd.com>", "X-Mailer": "git-send-email 2.43.0", "In-Reply-To": "<20260219054207.471303-1-manali.shukla@amd.com>", "References": "<20260219054207.471303-1-manali.shukla@amd.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-Originating-IP": "[10.180.168.240]", "X-ClientProxiedBy": "satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com\n (10.181.42.216)", "X-EOPAttributedMessage": "0", "X-MS-PublicTrafficType": "Email", "X-MS-TrafficTypeDiagnostic": "SJ1PEPF00001CDE:EE_|LV2PR12MB5919:EE_", "X-MS-Office365-Filtering-Correlation-Id": "9c3e571d-c970-4073-7456-08de6f79d63b", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "BCL:0;\n ARA:13230040|376014|82310400026|36860700013|7416014|1800799024;", "X-Microsoft-Antispam-Message-Info": "\n cmhgCUAEQ+PC8dRl9AhloeFmjPegeGYFWjljE6d/+saNCQ/bLzTf9MrV143cm6Gz8/gMx6dAfFL1gAw6It7S3/1g16S4ia5xoxmOq+lWCu0C2fwqZwTodnb5Ip6xHDyyoSyMO5CnrrR2R3Av1tI4g1PGNwEb416d6qLzc1A2xkqJmUO+6gTOE22xEjWKbQTVvXJOoyl6M0nwX2IPqVu+7QIJwW8s2jLwaT34oee7BS4KPwij7i2wLHmebMei6AZs4cVioGMEY4XyfGPex7Fv80Z+M7MOQrGXXMZdFX+hK/RRAXGsfOSAnYpBndTkZOwF465PzTogIA5LSaoplHwQiRbrjMen0d8HsezWYK9FwW96oTAfBNvYSkliWYcEJ3NW3/W0wLGQqpW1RAbAXAxWWo/B6Q+fXskAgQXwPMdLrxPREI81S+htYJZPXtRgIq5L07Fc/jTS9Rh7khFb3KC72i70MTe3US+OvaHqEZkknedzzujuWDezfnLPBw+MUEK9D7kCiy30bov3nddLxESbRU5qMH0JB6ZcNdMS01gyjRRjjFTh+aqpnYwfekNUPiIZhaZRhLhpJB/5N6Lj6gw3VyoXaO4zX6MW9XcratB4i2Vub+e84lg2d0Xr3jcJ623inrY9YSYl/c+EeE3YAIPkzy/OvPXrNOPPviqUeanWJHeZju0+mY/DNhutDFKMolvreWEbtsXl8GVCg2567O+w+ZRuvuNn9lBTytwIsR0429ixzminlumBk9D9ZZXTHUsIhQElEfAV5TF7cZQamsxpzHsTqbsquEAfmQflziR1oSRq9eMupA0CYB3/YhFLQ7XM0vhJOAKZNXXbbi0QJOSPjzEJ/JVq1+ZP4XzapPQQCKNZTGW0AIEvQRBccYSZI4iYKTMEfPBVfNb2JVtlfCMRXPnlWW2yhSxeWcitM4Il6pB/u2lhSoCC009eRoAHpLVPuPt2r20fdGHJJb432OthNPw4CS0pKgj11OuanrFFEGxtOBfwwpK7cVaj4Gxbk6drJtUQYbr9ZijiRJi99UEb9NY/qBFciS9pXSXf9jrYiUA3rAcpMbQxUZfW7X3IkNCm8Qg5mpphGYQHphSJy9GfoqoPtQr5vHZ4JLyOsQc/eO9cXFqwweG4pzsfpvAzHx3+5SeQWHd6/ENwmVzsv0fYRHlGIlOVuDL8qvW1g4zqigRMIZ+nRHeKVhezGCKkVYB8khT1bC/sg3hMa6L3frLO3NJhLdeBsCF//jXrLCS0IqzUIKP1wDAt58B8W+YIh8gZigJlTH3q23sc1vp0HWIGO2F91wxLF2ltL4kzezgLqlYN3hX04A1YaezC4ExeC5lx3ozVALuSIAGOlwnyDRH1oKnCkrF9sntLtag0k0c4QeSnGQYJ3wtiRN7W7rNVxpgRvtNHqVWzeHNbHpwBa+5QVvNdsItyxC3Ynt/wOIb49oEZotpBUtvzfE5VCVQJurWG97wJdDNGte9DuLbK8a0Rla70YhE+3kQ90QaJQSBykfuhzCOTv7VkHU///XFdwD+HB7GLY3nCCjN+uKS/YQ7SP9/mYuJTtNPAs4RbtDE2Rfa06d23z9IKSDbZZ68WYoJwlOBC3TjKXrC9IsZ0SCDndJ/Uqhkia9e8anAfhfMkt+6CY1u5EUmTFg14JL7Cu+3f6A26FCFT/GMHN0YL6hn0Ig==", "X-Forefront-Antispam-Report": "CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:satlexmb07.amd.com; PTR:InfoDomainNonexistent; CAT:NONE;\n SFS:(13230040)(376014)(82310400026)(36860700013)(7416014)(1800799024);\n DIR:OUT;\n SFP:1101;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "\n oi7nEDHQF4eDvrtz6FUzZLWhhI1aDEonPtbzoPNHizUU+RCq+r6HYITRxeQiqeQWAGNf5nMZ5qwiLqeIXoixWZ8Bx8CfJeHTDqIQEf7MSO7A79iNIlj40SvMlzubwcB97hMr7LyHKJip/nIi4KyV0FJDoLd/iC7CfI0rVZauRp7IjSXEmiQUHTLObVbbEZ8Yhg3NluBYJKTMkOONsl5s4Ac6zXurLT1dwCXggXioqqWpe0yIJdGIRXcj7EeBRuybxNNAemuGe05ABU5n7uTAZd1sydz0U3sdtFQlQDw04RYc5vC2SeYSk5EuvvWIawCcmrXyykP4p5Ac4jexu1Vt4GloRB32Kakyb+jWStUSz97CxTuABPEBWPlXQUriQBDqK14BdHzB824A/c5bNZIJvJysXZwit1c2je5z1bH+HOd/7u5hEHMtbFkK/J1H63iE", "X-OriginatorOrg": "amd.com", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "19 Feb 2026 05:43:40.8115 (UTC)", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 9c3e571d-c970-4073-7456-08de6f79d63b", "X-MS-Exchange-CrossTenant-Id": "3dd8961f-e488-4e60-8e11-a82d994e183d", "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17];\n Helo=[satlexmb07.amd.com]", "X-MS-Exchange-CrossTenant-AuthSource": "\n SJ1PEPF00001CDE.namprd05.prod.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous", "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "LV2PR12MB5919", "X-Spam_score_int": "-20", "X-Spam_score": "-2.1", "X-Spam_bar": "--", "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.043,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no", "X-Spam_action": "no action", "X-Mailman-Approved-At": "Thu, 19 Feb 2026 08:55:35 -0500", "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": "Add support for KVM_GET_LAPIC2 and KVM_SET_LAPIC2 ioctls to synchronize\nextended APIC register state between QEMU and KVM. The extended ioctls\noperate on a 4KB APIC page (struct kvm_lapic_state2) instead of the\nlegacy 1KB. (struct kvm_lapic_state).\n\nUse the extended ioctls when KVM_CAP_LAPIC2 is enabled (has_lapic2),\notherwise fall back to the legacy KVM_GET/SET_LAPIC ioctls to maintain\ncompatibility with older KVM versions or when extended APIC is not\nnegotiated.\n\nWhen extended APIC is enabled (has_extapic) for AMD processors,\nsynchronize the extended registers:\n - APIC_EFEAT (offset 0x400): Extended Features register\n - APIC_ECTRL (offset 0x410): Extended Control register\n - APIC_EILVTn (offset 0x500+): Extended interrupt LVT entries\nCurrently on 4 extended interrupt LVT entries are supported but future\nprocessors may support more.\n\nAdd kvm_apic_put2() and kvm_get_apic2() is added to mirror kvm_apic_put()\nand kvm_get_apic() for the extended ioctl path. Route kvm_apic_post_load()\n, kvm_apic_reset(), kvm_arch_get_registers() through the appropriate\nput/get function based on has_lapic2.\n\nSigned-off-by: Manali Shukla <manali.shukla@amd.com>\n---\n hw/i386/kvm/apic.c | 55 ++++++++++++++++++++++++++++++++++++++++---\n target/i386/kvm/kvm.c | 24 ++++++++++++++++++-\n 2 files changed, 75 insertions(+), 4 deletions(-)", "diff": "diff --git a/hw/i386/kvm/apic.c b/hw/i386/kvm/apic.c\nindex 7bec7909e9..f91af66116 100644\n--- a/hw/i386/kvm/apic.c\n+++ b/hw/i386/kvm/apic.c\n@@ -33,7 +33,11 @@ static void kvm_put_apic_state(APICCommonState *s, void *regs)\n {\n int i;\n \n- memset(regs, 0, KVM_APIC_REG_SIZE);\n+ if (kvm_has_lapic2()) {\n+ memset(regs, 0, KVM_APIC_EXT_REG_SIZE);\n+ } else {\n+ memset(regs, 0, KVM_APIC_REG_SIZE);\n+ }\n \n if (kvm_has_x2apic_api() && s->apicbase & MSR_IA32_APICBASE_EXTD) {\n kvm_apic_set_reg(regs, 0x2, s->initial_apic_id);\n@@ -58,6 +62,13 @@ static void kvm_put_apic_state(APICCommonState *s, void *regs)\n kvm_apic_set_reg(regs, 0x38, s->initial_count);\n kvm_apic_set_reg(regs, 0x3e, s->divide_conf);\n \n+ if (kvm_has_extapic()) {\n+ kvm_apic_set_reg(regs, 0x40, s->efeat);\n+ kvm_apic_set_reg(regs, 0x41, s->ectrl);\n+ for (i = 0; i < s->nr_extlvt; i++) {\n+ kvm_apic_set_reg(regs, 0x50 + i, s->extlvt[i]);\n+ }\n+ }\n }\n \n void kvm_get_apic_state(APICCommonState *s, void *kapic)\n@@ -91,6 +102,15 @@ void kvm_get_apic_state(APICCommonState *s, void *kapic)\n v = (s->divide_conf & 3) | ((s->divide_conf >> 1) & 4);\n s->count_shift = (v + 1) & 7;\n \n+ if (kvm_has_extapic()) {\n+ s->efeat = kvm_apic_get_reg(kapic, 0x40);\n+ s->ectrl = kvm_apic_get_reg(kapic, 0x41);\n+\n+ for (i = 0; i < s->nr_extlvt; i++) {\n+ s->extlvt[i] = kvm_apic_get_reg(kapic, 0x50 + i);\n+ }\n+ }\n+\n s->initial_count_load_time = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);\n apic_next_timer(s, s->initial_count_load_time);\n }\n@@ -156,6 +176,27 @@ void kvm_uninitialize_extlvt(X86CPU *cpu)\n }\n }\n \n+static void kvm_apic_put2(CPUState *cs, run_on_cpu_data data)\n+{\n+ APICCommonState *s = data.host_ptr;\n+ struct kvm_lapic_state2 kapic2;\n+ int ret;\n+\n+ if (is_tdx_vm()) {\n+ return;\n+ }\n+\n+ kvm_put_apicbase(s->cpu, s->apicbase);\n+ kvm_put_apic_state(s, &kapic2);\n+\n+ ret = kvm_vcpu_ioctl(CPU(s->cpu), KVM_SET_LAPIC2, &kapic2);\n+ if (ret < 0) {\n+ fprintf(stderr, \"KVM_SET_LAPIC2 failed EXT: %s\\n\",\n+ strerror(-ret));\n+ abort();\n+ }\n+}\n+\n static void kvm_apic_put(CPUState *cs, run_on_cpu_data data)\n {\n APICCommonState *s = data.host_ptr;\n@@ -178,7 +219,11 @@ static void kvm_apic_put(CPUState *cs, run_on_cpu_data data)\n \n static void kvm_apic_post_load(APICCommonState *s)\n {\n- run_on_cpu(CPU(s->cpu), kvm_apic_put, RUN_ON_CPU_HOST_PTR(s));\n+ if (kvm_has_lapic2()) {\n+ run_on_cpu(CPU(s->cpu), kvm_apic_put2, RUN_ON_CPU_HOST_PTR(s));\n+ } else {\n+ run_on_cpu(CPU(s->cpu), kvm_apic_put, RUN_ON_CPU_HOST_PTR(s));\n+ }\n }\n \n static void do_inject_external_nmi(CPUState *cpu, run_on_cpu_data data)\n@@ -247,7 +292,11 @@ static void kvm_apic_reset(APICCommonState *s)\n /* Not used by KVM, which uses the CPU mp_state instead. */\n s->wait_for_sipi = 0;\n \n- run_on_cpu(CPU(s->cpu), kvm_apic_put, RUN_ON_CPU_HOST_PTR(s));\n+ if (kvm_has_lapic2()) {\n+ run_on_cpu(CPU(s->cpu), kvm_apic_put2, RUN_ON_CPU_HOST_PTR(s));\n+ } else {\n+ run_on_cpu(CPU(s->cpu), kvm_apic_put, RUN_ON_CPU_HOST_PTR(s));\n+ }\n }\n \n static void kvm_apic_realize(DeviceState *dev, Error **errp)\ndiff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c\nindex c9f4cb6430..ad7a4c3c5c 100644\n--- a/target/i386/kvm/kvm.c\n+++ b/target/i386/kvm/kvm.c\n@@ -5069,6 +5069,28 @@ static int kvm_get_mp_state(X86CPU *cpu)\n return 0;\n }\n \n+static int kvm_get_apic2(X86CPU *cpu)\n+{\n+ APICCommonState *apic;\n+ struct kvm_lapic_state2 kapic2;\n+ int ret;\n+\n+ apic = APIC_COMMON(cpu->apic_state);\n+\n+ if (!apic || !kvm_irqchip_in_kernel()) {\n+ return 0;\n+ }\n+\n+ ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_LAPIC2, &kapic2);\n+\n+ if (ret < 0) {\n+ return ret;\n+ }\n+\n+ kvm_get_apic_state(apic, &kapic2);\n+ return 0;\n+}\n+\n static int kvm_get_apic(X86CPU *cpu)\n {\n APICCommonState *apic;\n@@ -5476,7 +5498,7 @@ int kvm_arch_get_registers(CPUState *cs, Error **errp)\n error_setg_errno(errp, -ret, \"Failed to get MSRs\");\n goto out;\n }\n- ret = kvm_get_apic(cpu);\n+ ret = has_lapic2 ? kvm_get_apic2(cpu) : kvm_get_apic(cpu);\n if (ret < 0) {\n error_setg_errno(errp, -ret, \"Failed to get APIC\");\n goto out;\n", "prefixes": [ "v1", "6/8" ] }