From nobody Fri Dec 19 21:55:19 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1734073828; cv=none; d=zohomail.com; s=zohoarc; b=naFGXGEy0i/cWMU1qtCysnx/JX1CcIoHPy5sobMhZvZeKvaHg7OVCMyLwDNng+NYN+a5gErfohyEMYvqFl6eKlDz4gzuMEMuL7niEZxCj2PFgpHbCRy556yQjJT5IG65HQRNJ3n6UJF++J1/VENmW4AxHLAzharzsN92ey+r/Lc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1734073828; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gMhqiBFHDH00AJ9LWjJoGLcRsEO/EdekJS5dWas1oRU=; b=IgbNY0KBMeW0ax/C+GVMUQZPogPdK1YAZ6pPmmETFUPZcWSmqobyKaRl6P3QkFYbfZn3zm66r/c2JH2lP6oAi7/0sgE/nL8apfAJm/owqGP9rN8CiFpuXdYJDWEQIhnw8LxhmFmZJ37SV5F9dPFJjpTBiymacgi12VcI1k6mRXY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1734073828946616.7867182092605; Thu, 12 Dec 2024 23:10:28 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tLznu-0007Yh-H2; Fri, 13 Dec 2024 02:09:38 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tLzns-0007YN-RK for qemu-devel@nongnu.org; Fri, 13 Dec 2024 02:09:36 -0500 Received: from mgamail.intel.com ([198.175.65.10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tLznn-000714-SU for qemu-devel@nongnu.org; Fri, 13 Dec 2024 02:09:36 -0500 Received: from orviesa009.jf.intel.com ([10.64.159.149]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Dec 2024 23:09:29 -0800 Received: from emr-bkc.sh.intel.com ([10.112.230.82]) by orviesa009-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Dec 2024 23:09:26 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1734073772; x=1765609772; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vCYpc1Vq5+niHLJ2a/1T5SIiwGkK2cfUHuX+/Tv813o=; b=OmVWp7xSeSgq1bc79yRi9ylhu31WRnTKciOR9K35ng/vMf3YW20kPl0X KzlmjdlcX0S3sn4FRNfOhSJlnU1h3mYUwNLqMhK4mzvQIWboIPyJKBo+E ZKN8vXw9Qek7WvTEskGGtYaKFPm+FVNVJhNtDcrNo9TQwIQLXJesaLlLs EiqnCelr8rFz2vJkyEMuNjhdVtHsNyS7cBXSZNRG1QGe0FTUzbFHcAn6F mJtNTjeJQ7MmC79Nevq7PnYbCnqvRlAjjDdDVMukXpfCMXp79vu0IFgEW YYACjx3CB+x/rnesmmOBcGUyYtYxJYWUG4L65FZzNMeYIXilHgUny+rRg g==; X-CSE-ConnectionGUID: TfZodG4rR66MXpO8Ej5K5w== X-CSE-MsgGUID: 8CcSyo1tTiCFOd7vWpFZvg== X-IronPort-AV: E=McAfee;i="6700,10204,11284"; a="51937087" X-IronPort-AV: E=Sophos;i="6.12,230,1728975600"; d="scan'208";a="51937087" X-CSE-ConnectionGUID: PkxAlT9xTnSNCm03DXVOsw== X-CSE-MsgGUID: Z1jMnQXCQzuVd9eD3SkzhA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,230,1728975600"; d="scan'208";a="96365565" From: Chenyi Qiang To: David Hildenbrand , Paolo Bonzini , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Michael Roth Cc: Chenyi Qiang , qemu-devel@nongnu.org, kvm@vger.kernel.org, Williams Dan J , Peng Chao P , Gao Chao , Xu Yilun Subject: [PATCH 4/7] KVM: Notify the state change event during shared/private conversion Date: Fri, 13 Dec 2024 15:08:46 +0800 Message-ID: <20241213070852.106092-5-chenyi.qiang@intel.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20241213070852.106092-1-chenyi.qiang@intel.com> References: <20241213070852.106092-1-chenyi.qiang@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=198.175.65.10; envelope-from=chenyi.qiang@intel.com; helo=mgamail.intel.com X-Spam_score_int: -48 X-Spam_score: -4.9 X-Spam_bar: ---- X-Spam_report: (-4.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.496, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1734073831067116600 Content-Type: text/plain; charset="utf-8" Introduce a helper to trigger the state_change() callback of the class. Once exit to userspace to convert the page from private to shared or vice versa at runtime, notify the event via the helper so that other registered subsystems like VFIO can be notified. Signed-off-by: Chenyi Qiang --- accel/kvm/kvm-all.c | 4 ++++ include/sysemu/guest-memfd-manager.h | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 52425af534..38f41a98a5 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -48,6 +48,7 @@ #include "kvm-cpus.h" #include "sysemu/dirtylimit.h" #include "qemu/range.h" +#include "sysemu/guest-memfd-manager.h" =20 #include "hw/boards.h" #include "sysemu/stats.h" @@ -3080,6 +3081,9 @@ int kvm_convert_memory(hwaddr start, hwaddr size, boo= l to_private) addr =3D memory_region_get_ram_ptr(mr) + section.offset_within_region; rb =3D qemu_ram_block_from_host(addr, false, &offset); =20 + guest_memfd_manager_state_change(GUEST_MEMFD_MANAGER(mr->rdm), offset, + size, to_private); + if (to_private) { if (rb->page_size !=3D qemu_real_host_page_size()) { /* diff --git a/include/sysemu/guest-memfd-manager.h b/include/sysemu/guest-me= mfd-manager.h index f4b175529b..9dc4e0346d 100644 --- a/include/sysemu/guest-memfd-manager.h +++ b/include/sysemu/guest-memfd-manager.h @@ -46,4 +46,19 @@ struct GuestMemfdManagerClass { bool shared_to_private); }; =20 +static inline int guest_memfd_manager_state_change(GuestMemfdManager *gmm,= uint64_t offset, + uint64_t size, bool sha= red_to_private) +{ + GuestMemfdManagerClass *klass; + + g_assert(gmm); + klass =3D GUEST_MEMFD_MANAGER_GET_CLASS(gmm); + + if (klass->state_change) { + return klass->state_change(gmm, offset, size, shared_to_private); + } + + return 0; +} + #endif --=20 2.43.5