From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Edgar E. Iglesias" <edgar.iglesias@amd.com>,
"Stefano Stabellini" <sstabellini@kernel.org>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Peter Xu" <peterx@redhat.com>,
"David Hildenbrand" <david@redhat.com>
Subject: [PULL 26/28] softmmu: Pass RAM MemoryRegion and is_write in xen_map_cache()
Date: Mon, 6 May 2024 14:37:26 +0200 [thread overview]
Message-ID: <20240506123728.65278-27-philmd@linaro.org> (raw)
In-Reply-To: <20240506123728.65278-1-philmd@linaro.org>
From: "Edgar E. Iglesias" <edgar.iglesias@amd.com>
Propagate MR and is_write to xen_map_cache().
This is in preparation for adding support for grant mappings.
No functional change.
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Acked-by: Peter Xu <peterx@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Message-ID: <20240430164939.925307-14-edgar.iglesias@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/sysemu/xen-mapcache.h | 11 +++++++----
hw/xen/xen-mapcache.c | 10 ++++++----
system/physmem.c | 31 +++++++++++++++++++++++--------
3 files changed, 36 insertions(+), 16 deletions(-)
diff --git a/include/sysemu/xen-mapcache.h b/include/sysemu/xen-mapcache.h
index 10c2e3082a..1ec9e66752 100644
--- a/include/sysemu/xen-mapcache.h
+++ b/include/sysemu/xen-mapcache.h
@@ -18,8 +18,9 @@ typedef hwaddr (*phys_offset_to_gaddr_t)(hwaddr phys_offset,
void xen_map_cache_init(phys_offset_to_gaddr_t f,
void *opaque);
-uint8_t *xen_map_cache(hwaddr phys_addr, hwaddr size,
- uint8_t lock, bool dma);
+uint8_t *xen_map_cache(MemoryRegion *mr, hwaddr phys_addr, hwaddr size,
+ uint8_t lock, bool dma,
+ bool is_write);
ram_addr_t xen_ram_addr_from_mapcache(void *ptr);
void xen_invalidate_map_cache_entry(uint8_t *buffer);
void xen_invalidate_map_cache(void);
@@ -33,10 +34,12 @@ static inline void xen_map_cache_init(phys_offset_to_gaddr_t f,
{
}
-static inline uint8_t *xen_map_cache(hwaddr phys_addr,
+static inline uint8_t *xen_map_cache(MemoryRegion *mr,
+ hwaddr phys_addr,
hwaddr size,
uint8_t lock,
- bool dma)
+ bool dma,
+ bool is_write)
{
abort();
}
diff --git a/hw/xen/xen-mapcache.c b/hw/xen/xen-mapcache.c
index 6fb2db2612..fa6813b1ad 100644
--- a/hw/xen/xen-mapcache.c
+++ b/hw/xen/xen-mapcache.c
@@ -254,7 +254,7 @@ static void xen_remap_bucket(MapCache *mc,
static uint8_t *xen_map_cache_unlocked(MapCache *mc,
hwaddr phys_addr, hwaddr size,
- uint8_t lock, bool dma)
+ uint8_t lock, bool dma, bool is_write)
{
MapCacheEntry *entry, *pentry = NULL,
*free_entry = NULL, *free_pentry = NULL;
@@ -377,13 +377,15 @@ tryagain:
return mc->last_entry->vaddr_base + address_offset;
}
-uint8_t *xen_map_cache(hwaddr phys_addr, hwaddr size,
- uint8_t lock, bool dma)
+uint8_t *xen_map_cache(MemoryRegion *mr,
+ hwaddr phys_addr, hwaddr size,
+ uint8_t lock, bool dma,
+ bool is_write)
{
uint8_t *p;
mapcache_lock(mapcache);
- p = xen_map_cache_unlocked(mapcache, phys_addr, size, lock, dma);
+ p = xen_map_cache_unlocked(mapcache, phys_addr, size, lock, dma, is_write);
mapcache_unlock(mapcache);
return p;
}
diff --git a/system/physmem.c b/system/physmem.c
index 8278e31c1a..79d46054c5 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -2191,11 +2191,22 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
/*
* Return a host pointer to guest's ram.
+ * For Xen, foreign mappings get created if they don't already exist.
+ *
+ * @block: block for the RAM to lookup (optional and may be NULL).
+ * @addr: address within the memory region.
+ * @size: pointer to requested size (optional and may be NULL).
+ * size may get modified and return a value smaller than
+ * what was requested.
+ * @lock: wether to lock the mapping in xen-mapcache until invalidated.
+ * @is_write: hint wether to map RW or RO in the xen-mapcache.
+ * (optional and may always be set to true).
*
* Called within RCU critical section.
*/
static void *qemu_ram_ptr_length(RAMBlock *block, ram_addr_t addr,
- hwaddr *size, bool lock)
+ hwaddr *size, bool lock,
+ bool is_write)
{
hwaddr len = 0;
@@ -2218,10 +2229,13 @@ static void *qemu_ram_ptr_length(RAMBlock *block, ram_addr_t addr,
* In that case just map the requested area.
*/
if (block->offset == 0) {
- return xen_map_cache(addr, len, lock, lock);
+ return xen_map_cache(block->mr, addr, len, lock, lock,
+ is_write);
}
- block->host = xen_map_cache(block->offset, block->max_length, 1, lock);
+ block->host = xen_map_cache(block->mr, block->offset,
+ block->max_length, 1,
+ lock, is_write);
}
return ramblock_ptr(block, addr);
@@ -2237,7 +2251,7 @@ static void *qemu_ram_ptr_length(RAMBlock *block, ram_addr_t addr,
*/
void *qemu_map_ram_ptr(RAMBlock *ram_block, ram_addr_t addr)
{
- return qemu_ram_ptr_length(ram_block, addr, NULL, false);
+ return qemu_ram_ptr_length(ram_block, addr, NULL, false, true);
}
/* Return the offset of a hostpointer within a ramblock */
@@ -2747,7 +2761,7 @@ static MemTxResult flatview_write_continue_step(MemTxAttrs attrs,
} else {
/* RAM case */
uint8_t *ram_ptr = qemu_ram_ptr_length(mr->ram_block, mr_addr, l,
- false);
+ false, true);
memmove(ram_ptr, buf, *l);
invalidate_and_set_dirty(mr, mr_addr, *l);
@@ -2840,7 +2854,7 @@ static MemTxResult flatview_read_continue_step(MemTxAttrs attrs, uint8_t *buf,
} else {
/* RAM case */
uint8_t *ram_ptr = qemu_ram_ptr_length(mr->ram_block, mr_addr, l,
- false);
+ false, false);
memcpy(buf, ram_ptr, *l);
@@ -3234,7 +3248,7 @@ void *address_space_map(AddressSpace *as,
*plen = flatview_extend_translation(fv, addr, len, mr, xlat,
l, is_write, attrs);
fuzz_dma_read_cb(addr, *plen, mr);
- return qemu_ram_ptr_length(mr->ram_block, xlat, plen, true);
+ return qemu_ram_ptr_length(mr->ram_block, xlat, plen, true, is_write);
}
/* Unmaps a memory region previously mapped by address_space_map().
@@ -3330,7 +3344,8 @@ int64_t address_space_cache_init(MemoryRegionCache *cache,
l = flatview_extend_translation(cache->fv, addr, len, mr,
cache->xlat, l, is_write,
MEMTXATTRS_UNSPECIFIED);
- cache->ptr = qemu_ram_ptr_length(mr->ram_block, cache->xlat, &l, true);
+ cache->ptr = qemu_ram_ptr_length(mr->ram_block, cache->xlat, &l, true,
+ is_write);
} else {
cache->ptr = NULL;
}
--
2.41.0
next prev parent reply other threads:[~2024-05-06 12:41 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-06 12:37 [PULL 00/28] Accelerator patches for 2024-05-06 Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 01/28] exec/cpu: Indent TARGET_PAGE_foo definitions Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 02/28] exec/cpu: Rename PAGE_BITS macro to PAGE_RWX Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 03/28] exec/cpu: Remove obsolete PAGE_RESERVED definition Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 04/28] exec/cpu: Remove duplicated PAGE_PASSTHROUGH definition Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 05/28] exec/cpu: Extract page-protection definitions to page-protection.h Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 06/28] accel/tcg: Use cpu_loop_exit_requested() in cpu_loop_exec_tb() Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 07/28] accel/tcg: Access tcg_cflags with getter / setter Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 08/28] accel/tcg: Move user definition of cpu_interrupt() to user-exec.c Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 09/28] accel/tcg: Update CPUNegativeOffsetState::can_do_io field documentation Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 10/28] accel/tcg: Restrict qemu_plugin_vcpu_exit_hook() to TCG plugins Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 11/28] accel/tcg: Restrict cpu_plugin_mem_cbs_enabled() to TCG Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 12/28] accel/tcg: Move @plugin_mem_cbs from CPUState to CPUNegativeOffsetState Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 13/28] user: Forward declare TaskState type definition Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 14/28] user: Declare get_task_state() once in 'accel/tcg/vcpu-state.h' Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 15/28] user: Use get_task_state() helper Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 16/28] softmmu: let qemu_map_ram_ptr() use qemu_ram_ptr_length() Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 17/28] xen: let xen_ram_addr_from_mapcache() return -1 in case of not found entry Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 18/28] xen: mapcache: Refactor lock functions for multi-instance Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 19/28] xen: mapcache: Refactor xen_map_cache " Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 20/28] xen: mapcache: Refactor xen_remap_bucket " Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 21/28] xen: mapcache: Break out xen_ram_addr_from_mapcache_single Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 22/28] xen: mapcache: Refactor xen_replace_cache_entry_unlocked Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 23/28] xen: mapcache: Refactor xen_invalidate_map_cache_entry_unlocked Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 24/28] xen: mapcache: Break out xen_invalidate_map_cache_single() Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 25/28] xen: mapcache: Break out xen_map_cache_init_single() Philippe Mathieu-Daudé
2024-05-06 12:37 ` Philippe Mathieu-Daudé [this message]
2024-05-06 12:37 ` [PULL 27/28] MAINTAINERS: Update Aleksandar Rikalo email Philippe Mathieu-Daudé
2024-05-06 12:37 ` [PULL 28/28] MAINTAINERS: Update my email address Philippe Mathieu-Daudé
2024-05-06 12:44 ` [PULL 00/28] Accelerator patches for 2024-05-06 Philippe Mathieu-Daudé
2024-05-06 19:59 ` Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240506123728.65278-27-philmd@linaro.org \
--to=philmd@linaro.org \
--cc=david@redhat.com \
--cc=edgar.iglesias@amd.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=sstabellini@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.