From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11021115.outbound.protection.outlook.com [52.101.70.115]) by lore.virtuozzo.com (Postfix) with ESMTPS id 6D49981098 for ; Mon, 2 Nov 2026 10:36:34 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iMV/QHYpQVXCg350y5IlLvVFdbBDurBhyXOCRbob04PXxVXYMDV87Sq4U52eAez3hQgp61+EUYIxeqwAUl0YVnCR4xjS8UcK7tWtqjap472schRHi0L7A/9gIEfeJAZLukT1xvdiRjzjg3n3w9Yi0Fbbo5Iy3PuMak3eNTTujf0ZwdT7jXSrg1KwR4k+LvXIxk7m4hf2nppI5xQ/RTEnUyQYBQ3gsnaBxPePNqD0hCjacxK21KdAs85kIPE+L8KrE0RiZiT5ZPy5O+Z5ukPfgJ7VoZ8DlvKCYKjVpLUdAj3bqFhnbajue1D5/LvBnk68h/Pr2B88vbzYaz5NK5cONw== 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=HhxceLDQPAwCykpVxnCkr5dElj2rOiSTycWvqE3KGrU=; b=CwRJyzQbkARcNb9iR1DBiAqveTj9d19zPGEcjjwzwiz2iumJ9QKCcYWYaNyP1ZB0i0FtpShO3cfSl5ZqF/vtGYeWZpPt0pN5+dKqoKvDo83oa5MwZgsqajkde84mtlg13L5hh0fyAa5jMHd0JudRRRB3jdG5/Pv8wYQ0LsXcm5tJwgcYuI3N/zsnSC5IVIV/xxcEsQlPsM6fCNyqykwm6L/330R5NK68/P7VllHC7Mj3RKhhdS4P6aqvHpBcz9N4Q5+bVXJH1fgm8ubQruYKszrYhNfoKSUBKZUbEFUYBefpl1wB2BFF0QUtnTxdFJn4YSqjm9AbZYs/u8QEQV3PkQ== 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=HhxceLDQPAwCykpVxnCkr5dElj2rOiSTycWvqE3KGrU=; b=a/3fVJkoXUxM3gfZ6+UoM98OeeBih7vBuiB354RtYP3Cku9Ir2ev1NPUmaufHBQqoeEFLDNPfllNF+r7Hmvvdbb1PN51Zxa32hC+0F7aQO27vy/LY2/K9859EZzCFR381wRrflL7InUFjPwtXSPtiq6DaaY6St80PtTYyGq4hgP84+MzkIzaDHI7UqQIN+T6VtK6vqzEpkNkMNvhqSxWA6Y5xF/MWW6KHUTAfdvDFBRN+iLYstMxAcTQhwrA8NvfrK872ZEQpeqNzKULhrjRglBIhTmXm7BxvN/E0H2rwnF+DzMpRys0ypkV7SmPjDv59JRQm+E46Ym0yZOINhLZ4Q== Authentication-Results: mx.microsoft.com 1; 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 DB4PR08MB8199.eurprd08.prod.outlook.com (2603:10a6:10:381::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.12; Mon, 2 Nov 2026 10:36:30 +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.0569.011; Mon, 2 Nov 2026 10:36:30 +0000 From: Andrey Drobyshev Date: Mon, 02 Nov 2026 12:36:30 +0200 Subject: [PATCH QEMU HCI-8.1 v6 15/34] migration: ensure APIC is loaded prior to VFIO PCI devices Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261102-vfio_v1-v6-15-9bc7cabc850d@virtuozzo.com> References: <20261102-vfio_v1-v6-0-9bc7cabc850d@virtuozzo.com> In-Reply-To: <20261102-vfio_v1-v6-0-9bc7cabc850d@virtuozzo.com> To: svt-core@virtuozzo.com Cc: Andrey Drobyshev X-Mailer: b4 0.16.0 X-ClientProxiedBy: VIVP296CA0048.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:353::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_|DB4PR08MB8199:EE_ X-MS-Office365-Filtering-Correlation-Id: 8407f082-2f64-4ad8-5d23-08df38cd2673 X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|52116014|376014|38350700014|56012099006|261009223027099003|261028144727099003|261021121427099003|261026140227099003|261022105027099003|261022075727099003|10067099003|18002099003|22082099003|5113699003; X-Microsoft-Antispam-Message-Info: SVdu2F40GGI9yM5pRJZMPv7YJhNjHs1WNkxI9PJfjuTQsvp8LdK0pc61I6+CzOFeWf5cZLDMwM703hPu9RACvWVGPF5DOlFs9AV3bhMCZ9tfjVNfmmJWBDhAQw6LMYXH8qcGEUYFveupcgJBLRez9y0+yQ5n2OMCeXc24y7X/F+QkVcV3XQbY0CYsb1ayCWs+UpGFMATtAkqayG5+MwNCTGW4fdbtRjrCoZ43z51rEX6HhUC62c6xBnh1f2d1SldxJHHDMpuZQx3lQaPc3/cQF801qlBIuEhtETsdjBelB5/LEMbd+QxDHxEp3ONER15PN0kWAl4LxUaupZC5Qjz3oKx1PDYFjeLAh5jjUhERhIyg/+oIjAZE6mMb8ttZT/1qUerxOzPGgqx1QkRt6BS9rd4WS8F7mx5HcYGa9dXQWW+5ALf/hbTcAzbC4AWzPfyn1GjBK1IUeXgCBkHzqUj04N6/kp18gllfJTEhhcn/LcDd+zRh+amRk547ECwoGWbMZ1B3nXIi5pNxW9MhwNis7w0fudnmDN0simVzOQPzCtDTpniUrnYVCgi/hNRA/0xuGCB4hlCAljqto7mQ60N+249q2PIXnrxBXRYdixXM5uD1ReB0iZamgOBBoDVZOJdiAovWm4RBfHUI+LPtpwLv3hobZwbqfMqRjhE5UhumxuXqqvYY/TNbtCu6Si5/Z8p 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)(1800799024)(366016)(23010399003)(52116014)(376014)(38350700014)(56012099006)(261009223027099003)(261028144727099003)(261021121427099003)(261026140227099003)(261022105027099003)(261022075727099003)(10067099003)(18002099003)(22082099003)(5113699003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SHFEYWo1YTJyM1IyYnFMM3c4MVFrZUhINm0vTGRMajNYTE1yRGlyb28wb0dM?= =?utf-8?B?NVN2VUoyblV4VFZLaDR0SSswK2J0SmtMUE80YzAxSUZQM1FOMGhaaHBQdk9u?= =?utf-8?B?VkJiSkFQUXZUNkNLS25hTmMydno4U2JtNEtSbVVRQkRqRGtHaExtbXBjL21U?= =?utf-8?B?RldNTDA5bFgrSnVvanJybFRudHRvYm0rQldWQzhkRnJ5SGlUQmRodit4aFcw?= =?utf-8?B?VnR2cDdac3QrMlhHKzlzaVBvVW5JbnpFdDhpVzhHUEdocU1BKy9KOEdISWFu?= =?utf-8?B?WnpUeU1MUU9oRlJSSWZHcnJsK1g2K0hzcXo3QlJkaGNpMGIyUDlIK1RCU0F6?= =?utf-8?B?UGllOTdvTnRIeWV5RjlaaVJ0WXdxQkIzVHZBc25yUnRpZnY2UXZha3pKVS9q?= =?utf-8?B?RDk3QUVnak9WMDRFSXJhZ0R1WFNPRUUvckRDNGpKamFpUW1YS3RyaGk0TmlC?= =?utf-8?B?KzJOblp3NmNyOWZqK01QbW1nV240ME5WdUJKdjFhaWN0QzVOWXMzZEFnRWtJ?= =?utf-8?B?NXhIMXVPWGpLeFFmdzFTVyt3YTlCNkVqOU9KYmZ3K2tOdXY5a3FXRGgvZVRq?= =?utf-8?B?N3hGSjVPK041NGZvUkRVN2dYMW5DenNqR1VGUEJDVTdLaUhFck1uSW9mMVFD?= =?utf-8?B?eWh1blY5ZmFpcUxqNXFyTzhScnNJNE1RanE0Y29iZFJNK0xCVGhldGRJakpD?= =?utf-8?B?clROQ3lXbVpQSm9xanJFSEVzd3dhYkJSYkJvMWpFMUFQU2lBd0ZXRWt5RHVh?= =?utf-8?B?MGdVTmxKdW5wcUNoMEp0ajhuZ3U0WUFYa2llTXZiakNFRUJieGQ0RDNUMmlM?= =?utf-8?B?R0lPNlVGcWFwTFRpRnBUSERNTG5xdEZFc3VXQnMrMUJscUIxS2NzQmh1YkRO?= =?utf-8?B?SUZJNHQ1UjB4aGZZaU13bkVya1FXOFhNdXFLZURFb0N6ZUZKdDNNOElkT3c5?= =?utf-8?B?VVlEL2U5YS80SjhhbHJ1M1l1b0NXWk5zYWp3a2c4b2JQQUVoZU5Fc0xVbFNR?= =?utf-8?B?eVIwYkh3Q3ZoMVVnQjNMdDVpaXkrRUFBUzZaaytmU09aZC9tU2d6cmVoamtY?= =?utf-8?B?cWRmU0VPZWUyRy8vd3VWSCsvbGpnSlZMMlBBVWJRT1p5REpydXI0MkZVTzdP?= =?utf-8?B?Y3k1dXlkRXdJRkdzVVlIRk12UXVyampxUkc2WFo2QmNFdU5RQjlJanFzemNa?= =?utf-8?B?VTdYNHBIUFdScGl6SDY4OXBFaGhxckFHN2tjT2RhV1l4MHlqYTN0ZHp0UnhO?= =?utf-8?B?L2hYZjVNam5DdDNBdW5TRnFGcGJTMmpsajdFT1lySklaSFdReDNrQ29xSWRT?= =?utf-8?B?d1RYZkp5MzZnQlNNci9jeUx1UzdhYktLYllZUXU4c0hBcTFhUTRNZzdBM1Uy?= =?utf-8?B?OENVT1BUQlh2MUlFZVFaenc3SFNjb016YUNXS3UrQkxWN2Zzckhjd0Q0Tkw2?= =?utf-8?B?TFpucXNrcmZRTlorLzAvNG9PZkVaNFVHZmlMOWhhWHBibzJzODdVZ1NNV1pC?= =?utf-8?B?RU5QRncxZGJxZk9tejdPZFR1U1VneEpZTjJVZmZGMG9HcWhNVVBKVmJ2ak12?= =?utf-8?B?enQxSFVwWGw0NGxsdXl4RjAwSDZLSlVVTWE0T1dzZk1MeC83cHRXK3ZkaXFU?= =?utf-8?B?V3JwUExzTDZxZzN1MzYva0hOa1QxTldoaW9hRzh0VTBwbnlxUzJ6REZrbU9M?= =?utf-8?B?NTdnQ09JUTBpWmNCVEQ2TVZEOWhIbS9OVDhWNzdQd0JKd1hxTnlhdHhQTVVM?= =?utf-8?B?MlluWU5sUUhYNHZibXg2WEZNcyt2VFJHcnRKMFdnbHJHSWNrdEdPajRFdFpS?= =?utf-8?B?dGdkOFR0YnRrOTJ2K0ptVmE5bG90ZytEY0lqUjdud2htcHAxaHBMTWZYcy91?= =?utf-8?B?c1BKdzljaElxcHkzZmJzd2hyMkdJMXlYN1crMEgxMW9yZUhQdzJRTzVsQ056?= =?utf-8?B?aldyTmNEVUdYY2JyVVIrVDZZSDllMDlXL25iQVhiRDRKakhIckY0ZGl5RFlv?= =?utf-8?B?QUgyLzNLelVzM0o5aE5oaEF0UjRNcytIMU9zdmlvUVRUb2dZQ0Z5aXFyMFE2?= =?utf-8?B?TnBMcEVCUW1IczVzaERNS1F1LzRFSmw4bUNZaGY4bFBKWTFyckxscEQ5Rjdk?= =?utf-8?B?ZG13UUxpTHpIamlZV3B3NVpDam9BMXcwcUdudTlkZ1VObUJsTnc1YzFiRkQx?= =?utf-8?B?NnE4UEVyMVFJMmdqZnBVNXB5ZkQwYWkrZmY1WVE0bnNxcFJadWNPNDh6TXUy?= =?utf-8?B?aTcvTC9rN1FQUG92YzZPbHQzbFpuVTZsdTE1d0NqMWZkY3dLdFVXajdqWGtm?= =?utf-8?B?TzRGSlczRFdBS1lKbUpEUTA5VDRiS3JVeW9zSFllaldlaFBGNGVGSG42ZGxL?= =?utf-8?Q?SgSNnnw3HVY5Qr8s=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8407f082-2f64-4ad8-5d23-08df38cd2673 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Nov 2026 10:36:27.5650 (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: DSG9qkVneD6yYMnCKQbl6hS7sUNHuJbyA1kcH09EWcjrsJb9bh/W9fU9FPzgz9Axy+BFbjeBNhIrg0hCwnWv1U721z2Zw5vJS+peEEeIrAs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR08MB8199 From: Yanfei Xu The load procedure of VFIO PCI devices involves setting up IRT for each VFIO PCI devices. This requires determining whether an interrupt is single-destination interrupt to decide between Posted Interrupt(PI) or remapping mode for the IRTE. However, determining this may require accessing the VM's APIC registers. For example: ioctl(vbasedev->fd, VFIO_DEVICE_SET_IRQS, irqs) ... kvm_arch_irq_bypass_add_producer kvm_x86_call(pi_update_irte) vmx_pi_update_irte kvm_intr_is_single_vcpu If the LAPIC has not been loaded yet, interrupts will use remapping mode. To prevent the fallback of interrupt mode, keep APIC is always loaded prior to VFIO PCI devices. andrey.drobyshev: This commit is cherry-picked as-is, with no modifications, from the upstream commit d943cef76090. Signed-off-by: Yicong Shen Signed-off-by: Yanfei Xu Reviewed-by: Peter Xu Link: https://lore.kernel.org/r/20250818131127.1021648-1-yanfei.xu@bytedance.com Signed-off-by: Peter Xu --- hw/intc/apic_common.c | 1 + include/migration/vmstate.h | 1 + 2 files changed, 2 insertions(+) diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c index 37a7a7019d3..394fe020134 100644 --- a/hw/intc/apic_common.c +++ b/hw/intc/apic_common.c @@ -379,6 +379,7 @@ static const VMStateDescription vmstate_apic_common = { .pre_load = apic_pre_load, .pre_save = apic_dispatch_pre_save, .post_load = apic_dispatch_post_load, + .priority = MIG_PRI_APIC, .fields = (const VMStateField[]) { VMSTATE_UINT32(apicbase, APICCommonState), VMSTATE_UINT8(id, APICCommonState), diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index 6839117be87..c3d156c514f 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -163,6 +163,7 @@ typedef enum { MIG_PRI_IOMMU, /* Must happen before PCI devices */ MIG_PRI_PCI_BUS, /* Must happen before IOMMU */ MIG_PRI_VIRTIO_MEM, /* Must happen before IOMMU */ + MIG_PRI_APIC, /* Must happen before PCI devices */ MIG_PRI_GICV3_ITS, /* Must happen before PCI devices */ MIG_PRI_GICV3, /* Must happen before the ITS */ MIG_PRI_MAX, -- 2.47.1