From nobody Sun Dec 14 05:52:14 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=1754569136; cv=none; d=zohomail.com; s=zohoarc; b=Bk4KS+mJCkDWBwLCdNE9ljltXevwnlc2ytmrNtC2nGFQP9yU4+9heyxJ+mCwm50Cel37ae+IZTZkWT+J1YBsguPdB2hHQiVv+YSoJTobTt3Ih0eR08yjx0VOYOfnpVo8IQFXq6IfXg/7ojJ/omB+0WMTnmiwCPDLfSPNPlx2tEQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754569136; 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=+4pe4GPDD7OkHFandRwQv/AvelM3vE/q8MtAvLYtR00=; b=jFt/uvnLlOIOwYup54aaH6J7LPshDryoARGBf1bTqKZDv10s7VJVP6dwr1J9FTW/x8YyHunBh8mJIREGeC3BB8BAWSzdpLG3bXe45YY09cxtsjWinEAi6a4HKvT8zFJ0PbEURzntMi0Ih1H67H7qhpMpwBU7RLObKnXGPNRg6cY= 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 175456913675626.936126977890353; Thu, 7 Aug 2025 05:18:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ujzSl-0004ZI-4n; Thu, 07 Aug 2025 08:11:20 -0400 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 1ujzSI-0003tn-BI; Thu, 07 Aug 2025 08:10:46 -0400 Received: from mgamail.intel.com ([192.198.163.15]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ujzSG-0005Cn-1o; Thu, 07 Aug 2025 08:10:46 -0400 Received: from orviesa009.jf.intel.com ([10.64.159.149]) by fmvoesa109.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Aug 2025 05:10:09 -0700 Received: from liuzhao-optiplex-7080.sh.intel.com ([10.239.160.39]) by orviesa009.jf.intel.com with ESMTP; 07 Aug 2025 05:10:06 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754568644; x=1786104644; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ICNg+pbeHF8H9llJc/4axDzWq6vSvnR3oi+HF/P7AgQ=; b=S4yhd1fKstoBo3hqWgllUKi98kRNAiLlu+qoDHhRofm5k/OcBjKSYudl C+Vl9rSQOFLpdAo0aLUxgh7rWlQ8ONRwWMwqaWhauQvE+7W+U1BfVFBsh KYbaH/WgQeWsfhT0fQ8cZqtOaJY4G95bvEUsnulEH/ZcGvdKKWLQVCucP 8TgXXX3Bc2UYzmpOjEEEUnhHdFcPeV2nrrD7zScJuZ3KG0mOZh9EiAXaD TDrJAeZkBqy8EKSD07ITKznPTQqYsGzUqwXPyeDLF4UifJRwyeQhLgHVU 3Cv1aOT2c0bqk0C8FMPut46qxxUUKyhbqazxloK+6dbzOoMRGlseMfJq4 g==; X-CSE-ConnectionGUID: r4uizmZQScmmECee7Mlj2Q== X-CSE-MsgGUID: 4aIVwCjcQnaT9Urz4ujh1g== X-IronPort-AV: E=McAfee;i="6800,10657,11514"; a="57036861" X-IronPort-AV: E=Sophos;i="6.17,271,1747724400"; d="scan'208";a="57036861" X-CSE-ConnectionGUID: 0hU21DClSCOqIceceX82LQ== X-CSE-MsgGUID: wrC6lw8VRGC/QhT8EEJ2kw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,271,1747724400"; d="scan'208";a="164701194" From: Zhao Liu To: Paolo Bonzini , Peter Xu , David Hildenbrand , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Manos Pitsidianakis , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Thomas Huth , Junjie Mao Cc: qemu-devel@nongnu.org, qemu-rust@nongnu.org, Dapeng Mi , Chuanxiao Dong , Zhao Liu Subject: [RFC 20/26] memory: Add wrappers of intermediate steps for read/write Date: Thu, 7 Aug 2025 20:30:21 +0800 Message-Id: <20250807123027.2910950-21-zhao1.liu@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250807123027.2910950-1-zhao1.liu@intel.com> References: <20250807123027.2910950-1-zhao1.liu@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=192.198.163.15; envelope-from=zhao1.liu@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1754569139733124100 Content-Type: text/plain; charset="utf-8" Add these 2 wrappers to allow bindgen to generate the bindings based on MemoryRegionSection: * section_rust_write_continue_step() * section_rust_read_continue_step() Then Rust side could be able to re-build a full write/read processes as address_space_write()/address_space_read_full() did. Signed-off-by: Zhao Liu --- include/system/memory.h | 51 +++++++++++++++++++++++++++++++++++++++++ system/physmem.c | 16 +++++++++++++ 2 files changed, 67 insertions(+) diff --git a/include/system/memory.h b/include/system/memory.h index 110ad0a3b590..a75c8c348f58 100644 --- a/include/system/memory.h +++ b/include/system/memory.h @@ -3413,6 +3413,57 @@ uint8_t *section_get_host_addr(const MemoryRegionSec= tion *section, void section_fuzz_dma_read(MemoryRegionSection *section, hwaddr addr, hwaddr len); =20 +/** + * section_rust_write_continue_step: write to #MemoryRegionSection. + * + * Not: This function should only used by Rust side, and user shouldn't + * call it directly! + * + * This function provides a wrapper of flatview_write_continue_step(), + * and allows Rust side to re-build a full write process as + * address_space_write() did. + * + * Should be called from an RCU critical section. + * + * @section: #MemoryRegionSection to be accessed. + * @attrs: memory transaction attributes. + * @buf: buffer with the data to be written. + * @len: the number of bytes to write. + * @mr_addr: address within that memory region. + * @l: the actual length of the data is written after function returns. + * + * Return a MemTxResult indicating whether the operation succeeded + * or failed (eg unassigned memory, device rejected the transaction, + * IOMMU fault). + */ +MemTxResult section_rust_write_continue_step(MemoryRegionSection *section, + MemTxAttrs attrs, const uint8_t *buf, hwaddr len, hwaddr mr_addr, hwad= dr *l); + +/** + * section_read_continue_step: read from #MemoryRegionSection. + * + * Not: This function should only used by Rust side, and user shouldn't + * call it directly! + * + * This function provides a wrapper of flatview_read_continue_step(), + * and allows Rust side to re-build a full write process as + * address_space_read_full() did. + * + * Should be called from an RCU critical section. + * + * @section: #MemoryRegionSection to be accessed. + * @attrs: memory transaction attributes. + * @buf: buffer to be written. + * @len: the number of bytes is expected to read. + * @mr_addr: address within that memory region. + * @l: the actual length of the data is read after function returns. + * + * Return a MemTxResult indicating whether the operation succeeded + * or failed. + */ +MemTxResult section_read_continue_step(MemoryRegionSection *section, + MemTxAttrs attrs, uint8_t *buf, hwaddr len, hwaddr mr_addr, hwaddr *l); + /* * Inhibit technologies that require discarding of pages in RAM blocks, e.= g., * to manage the actual amount of memory consumed by the VM (then, the mem= ory diff --git a/system/physmem.c b/system/physmem.c index e06633f4d8a2..0c30dea775ca 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -3119,6 +3119,14 @@ static MemTxResult flatview_read_continue_step(MemTx= Attrs attrs, uint8_t *buf, } } =20 +MemTxResult +section_read_continue_step(MemoryRegionSection *section, MemTxAttrs attrs, + uint8_t *buf, hwaddr len, hwaddr mr_addr, + hwaddr *l) +{ + return flatview_read_continue_step(attrs, buf, len, mr_addr, l, sectio= n->mr); +} + /* Called within RCU critical section. */ MemTxResult flatview_read_continue(FlatView *fv, hwaddr addr, MemTxAttrs attrs, void *ptr, @@ -3707,6 +3715,14 @@ static MemTxResult address_space_write_continue_cach= ed(MemTxAttrs attrs, return result; } =20 +MemTxResult +section_rust_write_continue_step(MemoryRegionSection *section, MemTxAttrs = attrs, + const uint8_t *buf, hwaddr len, hwaddr mr= _addr, + hwaddr *l) +{ + return flatview_write_continue_step(attrs, buf, len, mr_addr, l, secti= on->mr); +} + /* Called within RCU critical section. */ static MemTxResult address_space_read_continue_cached(MemTxAttrs attrs, void *ptr, hwaddr le= n, --=20 2.34.1