From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11022131.outbound.protection.outlook.com [52.101.66.131]) by lore.virtuozzo.com (Postfix) with ESMTPS id EF0CD80726 for ; Fri, 9 Oct 2026 14:04:46 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=G+qIkx6RL6j/KMyEpCDqY8QXbhE7XNbFA7NKPXD7cmOh5dEFerRm7Zpxa1NeFqb3t+cAC73pfj3F+5tvPWYNz6H6OYms6BkRiC5RkaeKqzxdZNoOYCeuxyg2b7uR1TmdEdnRsv+jbWbuGUEAit9xncQ46gs8kd/oPNJYTr3G4BY78ToGeWXv4VN0JRDIm/QqfnuVr29lwbsOufAaEps70uf8qC+jA4jtaxuyvI0mG8fu08MwUK0leP+clrb1rclIcltTOcZMtd7BNvJBIRNLp+vBgAsPpIU8BsgCC9c8e8mh2sB1JNpRLxtWrjsctZhr+noGOAgYq3jdtkKW0CC59Q== 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=CpziHhiXauEuKt7TiVe//XvRJ2BDL+spV8UG3lgoHzA=; b=BjhC87zFYrh61mm/OHjyXLlwOuKuqEK1prSLex0c/tQ4uqJgHTEe8S+PCX2CCc8FWGMKR9fwdRSV8Z7mGvs0EehC6ywVTCxVj/D/HNQ5l5AMGgLSrdZvsaWgtpi0cAcvGWu/SUZ6NbpW3iLTrPP4T+gW3VuPBeF0JjNtjnHcAlrAMipWthz1c6WlT9dCCVzL31UJ8aqO8PMlcrE0+iPGqphzxuWAFNc4ZHc2saEsfCtEXdk3t19qSnDoG7J7bxuB5iMYi0eYoj9TFl509Bdxj334/FJ2hYeL1XEr/E0iwscNTdZJN3X11hbwbaPmAcuGYIj4fHI5mwY2+qGjqo8SIA== 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=CpziHhiXauEuKt7TiVe//XvRJ2BDL+spV8UG3lgoHzA=; b=b/jKRJ1YRxr8eqfWLb078QERh/9rctnV+Agkuk98WJsdsHLuXz/MPeSbhKCZE0JW7ZZfuPEAHr6G2nT2A5Z/lTEq4vjilexAEOdO6nn2W6xsAd0e3kgdOUFFxfzAtKGdqUoJHmeOZFj6iAWwnwU4YT+fKpJyc+XqZCt/KPu7CwcFGvIZkXhyNfUo5ycgPgckZO1vAY4FrnVwDdxLvFtSeXLsqrZaIUyuE9HNtYr8Lk45cnMrZcBBw/tYigqXRDWwzNKPvthY4JzBEz8jn9OMG6uok6Mp0zUd5YOP4kZFoWlTRo3zWBmG2rlbR1b+Lb269nwMFz47Hdc8l6AEsx8zyA== 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 PR3PR08MB5802.eurprd08.prod.outlook.com (2603:10a6:102:8a::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.15; Fri, 9 Oct 2026 14:04:45 +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.0496.010; Fri, 9 Oct 2026 14:04:45 +0000 From: Andrey Drobyshev To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, efim.shevrin@virtuozzo.com, den@openvz.org Subject: [RFC HCI-8.1 PATCH 0/5] qemu: allow qemu-update with VFIO hostdevs on shared memfd RAM #VSTOR-103860 Date: Fri, 9 Oct 2026 17:04:30 +0300 Message-ID: <20261009140435.483100-1-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: VI1P194CA0026.EURP194.PROD.OUTLOOK.COM (2603:10a6:803:3c::15) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|PR3PR08MB5802:EE_ X-MS-Office365-Filtering-Correlation-Id: 25bc148f-92ad-4f45-1c4c-08df260e4580 X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com 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|52116014|366016|1800799024|376014|23010399003|5113699003|6133799003|18002099003|10067099003|38350700014|56012099006; X-Microsoft-Antispam-Message-Info: GyWyEPHLTb+P88nS60evWsCbqLd3dYZhNQgEBt+cL5CmlvOLKC4MrAUidbbAwwkfz1zMdUmP0XFAV+dVzsl8KOSdKa4R3z7ngIhommeWeRHJ9aUW+7/gu8QtSfGEJx0rabRp+duAEOeBrGc2spPf8nppw1gi1Qof1VRI42b17o3KiPWxBeCJad+flGNQdZn2P5LClyViyP7QsoVfn+r8XhDjZt04MLwxlK7fCwJpx0mYRzW8X/RZj0m5+/444tlp0QnVFV/d+/kIWTuwI/3mfo0KChPJBlRceGkp0eWvugaZ6/LztA6jGQGDnTfjw4YAtXdYq2cGA0Z6KjHwbfFw4AyohkaGS/FpejwpyMPeMhVd4w/h5Pzr6qY4DO9eAJL8U2rY9jx1PXEJuUkYQ+/qLmTIK7Brleb6+eom6FRSXc582ElRuMxN0rZPt3uyj/YFFc209pAvtckmK2NmqYvaTwIk7mxViR7rd2cJy4HVeGZIoGNrNzB7aJ7qIvcDBZc8L3tM1ERUiPbyF0wFFT5+l2JHJBVXUITGd7T39bOOEA8ftRRnhncnpMjzotYUzSd9jK8uPqXDYYANZiA1Ft6LJx6Zdy3JNRywVna/5trg7KOq6Bsbp2jy8872D0xMXQ50krJXErE5c2QLYFASwhi3cZ1ZgeUl7zm7KQXN5xLMns5gLWNJa5GGWEkZbPyVx25ueE9+EWbXwTShqiWGp6epjZ6vQvIHSqerSp4nlw0jkEQ= 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)(52116014)(366016)(1800799024)(376014)(23010399003)(5113699003)(6133799003)(18002099003)(10067099003)(38350700014)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Ok6sC/Isns7tcYgTUJBUPOq6ZA8Dd9ARdrFfS7lba3dvWYRYmxcwnWA90/03?= =?us-ascii?Q?83VGY1n5QCiPYP/GqY26HN8vCVYXGxeAbrBRtRhB/5UiBRSrYFYK5UoKX87D?= =?us-ascii?Q?/j7zNzAY49+92U8N6RINt2vRmqa/Vy6WIhEPtRp6ZPbZFimWEY90o/irIle0?= =?us-ascii?Q?htwIc2OOC+RVeUXiy56Gp5HpIb9j6BZAwLy2rcZLKhGOn6MzcF5KCstyncUN?= =?us-ascii?Q?tNOY0CgutCD3duXEfqbj46sr6cilmRRQjekcUUawZ8hI+qvZHcgzHW/DwunV?= =?us-ascii?Q?MeRB5+0w+XtGkRW9T/AgTq7rjXezb5gk0Jscw78zmYg0Mt8hAz7EDni2Uf2m?= =?us-ascii?Q?ZWNnbCFsaQh1/MGnAnXbfCGWzQgGHnCAenrEeRIwNLFsha28EsOr0YNHBD66?= =?us-ascii?Q?N/8GniMtjbaVDpJ8S6YFj7t4faq/S3nl58qGqNYwjSfcNKgvZ8O0CvRaydan?= =?us-ascii?Q?YFWj9nArqE1oNCY5gPuzbPYHmfLY7YPjw6aTdWRqFF4Yaxv8SfD8Wvo2ha1t?= =?us-ascii?Q?zaNJ8GlPrVSiQC6EanipfEu85v9e0yvq/DceXM6XhW2cMTOLkWM3ZITAJg0D?= =?us-ascii?Q?8UQ33ScTasonJXH7cQs1kErLtU0prCGxXdjUxi2obsyBEaDTOTGRFqt2xXDg?= =?us-ascii?Q?VuYxl39g7AZI3b8vuRXm8OntRD2rpAjaFQKkprD35cCFgfJ/fK7EIfv3MIwf?= =?us-ascii?Q?MOF5D3AWFmmyqenxseFRtkTX+/u63awovvmYk++krEsfjbanciD01CZTED8I?= =?us-ascii?Q?dgTCuLX+szimvrBKYAvARAjZuwNKtlBM8E90haq5YIVOU4nk38by04L9T8Nu?= =?us-ascii?Q?ge7R+JEmpDTGjDbrzZBP2tiB5pFVpanEFin9kHbKfwKISI09geXTTi9n2LkL?= =?us-ascii?Q?QlyYVj+hcnPfGMyMrtYoZgYS8VDNRzzw6yJvuRpSx9rI6/6koXdzHcKoGvBF?= =?us-ascii?Q?R8T+EB61IZ/Nnvvu7wCCGM79DJ5KnW1HBZJ99ug5z4q69Cy/Wpw3TKOjgjF4?= =?us-ascii?Q?WaTRTJpJ2kYP3dP6cyMLYX8PKGbs0YP6CykTUT5mGsWZgw/WEvne/dzYqAbU?= =?us-ascii?Q?ohiBpsjvMep/3WLygJgWJZ8gFdJzHKxBIqXPqwG+UHJrKYS3YKE9HVgnwzbi?= =?us-ascii?Q?kxvo79QLtcaGyIwHbFjOnPDQmoyJEfv8zlTvPGaQG5s0bDDQCp5luJyZFtDa?= =?us-ascii?Q?tkkjkZnSMqPTKYRQyk5r+6I7zejOzjaA3gXd+FPoHGbu1yQbFKwpINfmRsDH?= =?us-ascii?Q?e9tQ0T/Vm49byvVRlMZmEmMpUWjSDZ24rJ1QLcEzo3XKanuyENkdDFTVp3QY?= =?us-ascii?Q?pb95NUX1yi4zZNTcaMzWTzHxNcnY3VNt1SBkMajpepb28yRs9v/ueUaZ4aMu?= =?us-ascii?Q?GuZ7yuXLFG6qYcq5V26GPlN+GAFzPZsbodHS7aquECSdKgi1JvGEo42N/GeT?= =?us-ascii?Q?JOlTGs01DwfXnV0yzV9pHty8rugT72SMQGMEHjSs3R1C9ucN8+CQfExT23Rl?= =?us-ascii?Q?NP1lfn2Al8IMtCnN7Qlafc9Oez6pfuRN1VdJnc7nO6ofTzfK4q1k7nJtmq1g?= =?us-ascii?Q?pY4lI6W0VSgDEGTR4z/UhER4PyXeMM6nEF9QPumQKPjSxUFb+NEGwyoN3rMS?= =?us-ascii?Q?suZAjZI5L9kfMNLcbR2K6U8qyNfxxQqNf2FMlSrlHTtM26LiS/oXmNKAFvbc?= =?us-ascii?Q?YUIRvn2cmQjrLSnX0+KhyiYERZ2lkkkcPbUXVV271kAXIL9WV2uR5OASmhry?= =?us-ascii?Q?DgQUpQBi5Aze6lVmh2hWGZeXrYKWRdI=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 25bc148f-92ad-4f45-1c4c-08df260e4580 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Oct 2026 14:04:44.9242 (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: p3VrWIT+wDgQqTr+kjuPIiMm1n0mEDsllgO08uvpS/gGF7GlAF23u5UC+13be0OVdUPj9UDDN6mSNA5kVCozlkDYD+UKAKrWVOSeuivQIqo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5802 qemu-update (cpr-exec) keeps anonymous guest RAM across exec with MADV_DOEXEC, which shares the pages with the new process copy-on-write. For a VM with a VFIO device that breaks the device: VFIO pins all guest RAM for DMA, so the first guest write after exec copies the page, while the device keeps doing DMA to the old pinned one. Shared memfd RAM is handed over to the new QEMU as is and has no such problem. This series lifts the blanket hostdev restriction for qemu-update and makes it safe: - only PCI (VFIO) and USB hostdevs are allowed, mdev/scsi/scsi_host as well as NVMe disks and vDPA interfaces are still refused; - new VMs with devices pinning guest RAM (PCI/mdev hostdevs, NVMe disks, vDPA) get shared memfd RAM, unless memory backing is set explicitly; - their auxiliary RAM (VRAM, ROMs) is shared too via aux-ram-share=on; - qemu-update is refused for a PCI hostdev on non-shared RAM, e.g. a VM started by an older libvirt; a cold restart switches it to memfd. KSM is not lost: it never merges pinned pages anyway. THP works for memfd RAM with the QEMU fix aligning fd-backed RAM to 2M and /sys/kernel/mm/transparent_hugepage/shmem_enabled set to "advise". Tested on whole GPU passthrough (RTX 6000 Ada): 32 qemu-updates in a row, the GPU keeps working and all 16G of guest RAM stays on 2M pages. With the QEMU VFIO CPR fixes also on an NVIDIA vGPU: qemu-update keeps the vGPU working, a GPU<->guest RAM DMA checker shows no mismatches. This is an alternative to the vzkernel series moving MADV_DOEXEC memory into the new mm, which needs no libvirt changes. Andrey Drobyshev (5): qemu update: allow qemu-update for VMs with PCI and USB hostdevs #VSTOR-103860 #VSTOR-137800 qemu: capabilities: probe aux-ram-share machine property #VSTOR-103860 qemu: back guest RAM with shared memfd for VMs with DMA-pinning devices #VSTOR-103860 qemu: share auxiliary RAM of VMs with DMA-pinning devices #VSTOR-103860 qemu update: refuse PCI hostdevs on non-shared guest RAM #VSTOR-103860 src/qemu/qemu_capabilities.c | 2 + src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 3 + src/qemu/qemu_domain.c | 36 ++++++++ src/qemu/qemu_domain.h | 6 ++ src/qemu/qemu_driver.c | 44 ++++++++- src/qemu/qemu_process.c | 91 +++++++++++++++++++ .../caps_10.0.0_aarch64.xml | 1 + .../caps_10.0.0_ppc64.xml | 1 + .../caps_10.0.0_s390x.xml | 1 + .../caps_10.0.0_x86_64+amdsev.xml | 1 + .../caps_10.0.0_x86_64.xml | 1 + .../caps_10.1.0_x86_64+inteltdx.xml | 1 + tests/qemustatusxml2xmldata/modern-in.xml | 1 + .../disk-nvme.x86_64-latest.args | 4 +- .../disk-slices.x86_64-latest.args | 4 +- ...tdev-mdev-display-ramfb.x86_64-latest.args | 4 +- ...play-spice-egl-headless.x86_64-latest.args | 4 +- ...ev-display-spice-opengl.x86_64-latest.args | 4 +- ...isplay-vnc-egl-headless.x86_64-latest.args | 4 +- ...ostdev-mdev-display-vnc.x86_64-latest.args | 4 +- .../hostdev-mdev-display.x86_64-latest.args | 4 +- ...hostdev-mdev-precreated.x86_64-latest.args | 4 +- ...tdev-pci-address-device.x86_64-latest.args | 4 +- ...-pci-address-unassigned.x86_64-latest.args | 4 +- .../hostdev-pci-address.x86_64-latest.args | 4 +- ...stdev-pci-display-ramfb.x86_64-latest.args | 4 +- ...stdev-pci-multifunction.x86_64-latest.args | 4 +- ...tdev-subsys-mdev-vfio-ap.s390x-latest.args | 4 +- ...ubsys-mdev-vfio-ccw-boot.s390x-latest.args | 4 +- ...dev-subsys-mdev-vfio-ccw.s390x-latest.args | 4 +- ...ostdev-vfio-multidomain.x86_64-latest.args | 4 +- ...o-zpci-autogenerate-fids.s390x-latest.args | 4 +- ...o-zpci-autogenerate-uids.s390x-latest.args | 4 +- ...v-vfio-zpci-autogenerate.s390x-latest.args | 4 +- ...dev-vfio-zpci-boundaries.s390x-latest.args | 4 +- ...vfio-zpci-ccw-memballoon.s390x-latest.args | 4 +- ...io-zpci-multidomain-many.s390x-latest.args | 4 +- .../hostdev-vfio-zpci.s390x-latest.args | 4 +- .../hostdev-vfio.x86_64-latest.args | 4 +- .../machine-loadparm-hostdev.s390x-9.1.0.args | 2 +- ...machine-loadparm-hostdev.s390x-latest.args | 4 +- .../net-hostdev-bootorder.x86_64-latest.args | 4 +- ...net-hostdev-multidomain.x86_64-latest.args | 4 +- ...ostdev-vfio-multidomain.x86_64-latest.args | 4 +- .../net-hostdev-vfio.x86_64-latest.args | 4 +- .../net-hostdev.x86_64-latest.args | 4 +- .../net-vdpa-multiqueue.x86_64-latest.args | 4 +- .../net-vdpa.x86_64-latest.args | 4 +- ...-virtio-teaming-hostdev.x86_64-latest.args | 4 +- ...-virtio-teaming-network.x86_64-latest.args | 4 +- .../net-virtio-teaming.x86_64-latest.args | 4 +- .../pci-rom.x86_64-latest.args | 4 +- .../pseries-hostdevs-1.ppc64-latest.args | 4 +- .../pseries-hostdevs-2.ppc64-latest.args | 4 +- .../pseries-hostdevs-3.ppc64-latest.args | 4 +- 56 files changed, 271 insertions(+), 85 deletions(-) -- 2.47.1