qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header
@ 2025-10-01  8:21 Philippe Mathieu-Daudé
  2025-10-01  8:21 ` [PATCH 01/25] system/ram_addr: Remove unnecessary 'exec/cpu-common.h' header Philippe Mathieu-Daudé
                   ` (25 more replies)
  0 siblings, 26 replies; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Following a previous comment from Richard in [*],
reduce "system/ram_addr.h" size by un-inlining a
lot of huge functions that aren't really justified,
and extract the API to the hew "system/physmem.h"
header, after renaming the functions (removing the
confusing 'cpu_' prefix).

(I plan to eventually merge this myself due to the
likelyness of conflicts).

[*] https://lore.kernel.org/qemu-devel/9151205a-13d3-401e-b403-f9195cdb1a45@linaro.org/

Philippe Mathieu-Daudé (25):
  system/ram_addr: Remove unnecessary 'exec/cpu-common.h' header
  accel/kvm: Include missing 'exec/target_page.h' header
  hw/s390x/s390-stattrib: Include missing 'exec/target_page.h' header
  hw/vfio/listener: Include missing 'exec/target_page.h' header
  target/arm/tcg/mte: Include missing 'exec/target_page.h' header
  hw: Remove unnecessary 'system/ram_addr.h' header
  accel/tcg: Document rcu_read_lock is held when calling
    tlb_reset_dirty()
  accel/tcg: Rename @start argument of tlb_reset_dirty*()
  system/physmem: Rename @start argument of physical_memory_get_dirty()
  system/physmem: Un-inline cpu_physical_memory_get_dirty_flag()
  system/physmem: Un-inline cpu_physical_memory_is_clean()
  system/physmem: Rename @start argument of physical_memory_all_dirty()
  system/physmem: Rename @start argument of physical_memory_range*()
  system/physmem: Un-inline cpu_physical_memory_range_includes_clean()
  system/physmem: Un-inline cpu_physical_memory_set_dirty_flag()
  system/physmem: Rename @start argument of physical_memory_*range()
  system/physmem: Un-inline cpu_physical_memory_set_dirty_range()
  system/physmem: Un-inline cpu_physical_memory_set_dirty_lebitmap()
  system/physmem: Rename @start argument of physmem_dirty_bits_cleared()
  system/physmem: Un-inline cpu_physical_memory_dirty_bits_cleared()
  system/physmem: Rename @start argument of
    physmem_test_and_clear_dirty()
  system/physmem: Reduce cpu_physical_memory_clear_dirty_range() scope
  system/physmem: Reduce cpu_physical_memory_sync_dirty_bitmap() scope
  system/physmem: Drop 'cpu_' prefix in Physical Memory API
  system/physmem: Extract API out of 'system/ram_addr.h' header

 MAINTAINERS                       |   1 +
 include/exec/cputlb.h             |   5 +-
 include/system/physmem.h          |  56 ++++
 include/system/ram_addr.h         | 413 ------------------------------
 accel/kvm/kvm-all.c               |   5 +-
 accel/tcg/cputlb.c                |  19 +-
 hw/ppc/spapr.c                    |   1 -
 hw/ppc/spapr_caps.c               |   1 -
 hw/ppc/spapr_pci.c                |   1 -
 hw/remote/memory.c                |   1 -
 hw/remote/proxy-memory-listener.c |   1 -
 hw/s390x/s390-stattrib-kvm.c      |   2 +-
 hw/s390x/s390-stattrib.c          |   2 +-
 hw/s390x/s390-virtio-ccw.c        |   1 -
 hw/vfio/container-legacy.c        |  10 +-
 hw/vfio/container.c               |   5 +-
 hw/vfio/listener.c                |   2 +-
 hw/vfio/spapr.c                   |   1 -
 hw/virtio/virtio-mem.c            |   1 -
 migration/ram.c                   |  79 +++++-
 system/memory.c                   |   9 +-
 system/physmem.c                  | 342 +++++++++++++++++++++++--
 target/arm/tcg/mte_helper.c       |   5 +-
 system/memory_ldst.c.inc          |   2 +-
 tests/tsan/ignore.tsan            |   4 +-
 25 files changed, 495 insertions(+), 474 deletions(-)
 create mode 100644 include/system/physmem.h

-- 
2.51.0



^ permalink raw reply	[flat|nested] 50+ messages in thread

* [PATCH 01/25] system/ram_addr: Remove unnecessary 'exec/cpu-common.h' header
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01  8:41   ` Thomas Huth
  2025-10-01 14:30   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 02/25] accel/kvm: Include missing 'exec/target_page.h' header Philippe Mathieu-Daudé
                   ` (24 subsequent siblings)
  25 siblings, 2 replies; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Nothing in "system/ram_addr.h" requires definitions fromi
"exec/cpu-common.h", remove it.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index 6b528338efc..f74a0ecee56 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -29,7 +29,6 @@
 #include "qemu/rcu.h"
 
 #include "exec/hwaddr.h"
-#include "exec/cpu-common.h"
 
 extern uint64_t total_dirty_pages;
 
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 02/25] accel/kvm: Include missing 'exec/target_page.h' header
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
  2025-10-01  8:21 ` [PATCH 01/25] system/ram_addr: Remove unnecessary 'exec/cpu-common.h' header Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 14:30   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 03/25] hw/s390x/s390-stattrib: " Philippe Mathieu-Daudé
                   ` (23 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

The "exec/target_page.h" header is indirectly pulled from
"system/ram_addr.h". Include it explicitly, in order to
avoid unrelated issues when refactoring "system/ram_addr.h":

  accel/kvm/kvm-all.c: In function ‘kvm_init’:
  accel/kvm/kvm-all.c:2636:12: error: ‘TARGET_PAGE_SIZE’ undeclared (first use in this function); did you mean ‘TARGET_PAGE_BITS’?
   2636 |     assert(TARGET_PAGE_SIZE <= qemu_real_host_page_size());
        |            ^~~~~~~~~~~~~~~~

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 accel/kvm/kvm-all.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index e3c84723406..08b2b5a371c 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -36,6 +36,7 @@
 #include "accel/accel-ops.h"
 #include "qemu/bswap.h"
 #include "exec/tswap.h"
+#include "exec/target_page.h"
 #include "system/memory.h"
 #include "system/ram_addr.h"
 #include "qemu/event_notifier.h"
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 03/25] hw/s390x/s390-stattrib: Include missing 'exec/target_page.h' header
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
  2025-10-01  8:21 ` [PATCH 01/25] system/ram_addr: Remove unnecessary 'exec/cpu-common.h' header Philippe Mathieu-Daudé
  2025-10-01  8:21 ` [PATCH 02/25] accel/kvm: Include missing 'exec/target_page.h' header Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 14:49   ` Richard Henderson
  2025-10-06 13:01   ` Thomas Huth
  2025-10-01  8:21 ` [PATCH 04/25] hw/vfio/listener: " Philippe Mathieu-Daudé
                   ` (22 subsequent siblings)
  25 siblings, 2 replies; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

The "exec/target_page.h" header is indirectly pulled from
"system/ram_addr.h". Include it explicitly, in order to
avoid unrelated issues when refactoring "system/ram_addr.h":

  hw/s390x/s390-stattrib-kvm.c: In function ‘kvm_s390_stattrib_set_stattr’:
  hw/s390x/s390-stattrib-kvm.c:89:57: error: ‘TARGET_PAGE_SIZE’ undeclared (first use in this function); did you mean ‘TARGET_PAGE_BITS’?
     89 |     unsigned long max = s390_get_memory_limit(s390ms) / TARGET_PAGE_SIZE;
        |                                                         ^~~~~~~~~~~~~~~~
        |                                                         TARGET_PAGE_BITS

Since "system/ram_addr.h" is actually not needed, remove it.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 hw/s390x/s390-stattrib-kvm.c | 2 +-
 hw/s390x/s390-stattrib.c     | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/s390x/s390-stattrib-kvm.c b/hw/s390x/s390-stattrib-kvm.c
index e1fee361dc3..73df1f600b9 100644
--- a/hw/s390x/s390-stattrib-kvm.c
+++ b/hw/s390x/s390-stattrib-kvm.c
@@ -10,13 +10,13 @@
  */
 
 #include "qemu/osdep.h"
+#include "exec/target_page.h"
 #include "hw/s390x/s390-virtio-ccw.h"
 #include "migration/qemu-file.h"
 #include "hw/s390x/storage-attributes.h"
 #include "qemu/error-report.h"
 #include "system/kvm.h"
 #include "system/memory_mapping.h"
-#include "system/ram_addr.h"
 #include "kvm/kvm_s390x.h"
 #include "qapi/error.h"
 
diff --git a/hw/s390x/s390-stattrib.c b/hw/s390x/s390-stattrib.c
index 13a678a8037..aa185372914 100644
--- a/hw/s390x/s390-stattrib.c
+++ b/hw/s390x/s390-stattrib.c
@@ -11,12 +11,12 @@
 
 #include "qemu/osdep.h"
 #include "qemu/units.h"
+#include "exec/target_page.h"
 #include "migration/qemu-file.h"
 #include "migration/register.h"
 #include "hw/qdev-properties.h"
 #include "hw/s390x/storage-attributes.h"
 #include "qemu/error-report.h"
-#include "system/ram_addr.h"
 #include "qapi/error.h"
 #include "qobject/qdict.h"
 #include "cpu.h"
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 04/25] hw/vfio/listener: Include missing 'exec/target_page.h' header
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (2 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 03/25] hw/s390x/s390-stattrib: " Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 14:50   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 05/25] target/arm/tcg/mte: " Philippe Mathieu-Daudé
                   ` (21 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

The "exec/target_page.h" header is indirectly pulled from
"system/ram_addr.h". Include it explicitly, in order to
avoid unrelated issues when refactoring "system/ram_addr.h":

  hw/vfio/listener.c: In function ‘vfio_ram_discard_register_listener’:
  hw/vfio/listener.c:258:28: error: implicit declaration of function ‘qemu_target_page_size’; did you mean ‘qemu_ram_pagesize’?
    258 |     int target_page_size = qemu_target_page_size();
        |                            ^~~~~~~~~~~~~~~~~~~~~
        |                            qemu_ram_pagesize

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 hw/vfio/listener.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c
index a2c19a3cec1..b5cefc9395c 100644
--- a/hw/vfio/listener.c
+++ b/hw/vfio/listener.c
@@ -25,6 +25,7 @@
 #endif
 #include <linux/vfio.h>
 
+#include "exec/target_page.h"
 #include "hw/vfio/vfio-device.h"
 #include "hw/vfio/pci.h"
 #include "system/address-spaces.h"
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 05/25] target/arm/tcg/mte: Include missing 'exec/target_page.h' header
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (3 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 04/25] hw/vfio/listener: " Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 14:50   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 06/25] hw: Remove unnecessary 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (20 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

The "exec/target_page.h" header is indirectly pulled from
"system/ram_addr.h". Include it explicitly, in order to
avoid unrelated issues when refactoring "system/ram_addr.h":

  target/arm/tcg/mte_helper.c:815:23: error: use of undeclared identifier 'TARGET_PAGE_MASK'
    815 |     prev_page = ptr & TARGET_PAGE_MASK;
        |                       ^
  target/arm/tcg/mte_helper.c:816:29: error: use of undeclared identifier 'TARGET_PAGE_SIZE'
    816 |     next_page = prev_page + TARGET_PAGE_SIZE;
        |                             ^

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 target/arm/tcg/mte_helper.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/target/arm/tcg/mte_helper.c b/target/arm/tcg/mte_helper.c
index 302e899287c..7d80244788e 100644
--- a/target/arm/tcg/mte_helper.c
+++ b/target/arm/tcg/mte_helper.c
@@ -21,6 +21,7 @@
 #include "qemu/log.h"
 #include "cpu.h"
 #include "internals.h"
+#include "exec/target_page.h"
 #include "exec/page-protection.h"
 #ifdef CONFIG_USER_ONLY
 #include "user/cpu_loop.h"
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 06/25] hw: Remove unnecessary 'system/ram_addr.h' header
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (4 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 05/25] target/arm/tcg/mte: " Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 14:53   ` Richard Henderson
                     ` (2 more replies)
  2025-10-01  8:21 ` [PATCH 07/25] accel/tcg: Document rcu_read_lock is held when calling tlb_reset_dirty() Philippe Mathieu-Daudé
                   ` (19 subsequent siblings)
  25 siblings, 3 replies; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

None of these files require definition exposed by "system/ram_addr.h",
remove its inclusion.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 hw/ppc/spapr.c                    | 1 -
 hw/ppc/spapr_caps.c               | 1 -
 hw/ppc/spapr_pci.c                | 1 -
 hw/remote/memory.c                | 1 -
 hw/remote/proxy-memory-listener.c | 1 -
 hw/s390x/s390-virtio-ccw.c        | 1 -
 hw/vfio/spapr.c                   | 1 -
 hw/virtio/virtio-mem.c            | 1 -
 8 files changed, 8 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index eb22333404d..15d09ef9618 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -77,7 +77,6 @@
 #include "hw/virtio/virtio-scsi.h"
 #include "hw/virtio/vhost-scsi-common.h"
 
-#include "system/ram_addr.h"
 #include "system/confidential-guest-support.h"
 #include "hw/usb.h"
 #include "qemu/config-file.h"
diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index f2f5722d8ad..0f94c192fd4 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -27,7 +27,6 @@
 #include "qapi/error.h"
 #include "qapi/visitor.h"
 #include "system/hw_accel.h"
-#include "system/ram_addr.h"
 #include "target/ppc/cpu.h"
 #include "target/ppc/mmu-hash64.h"
 #include "cpu-models.h"
diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index 1ac1185825e..f9095552e86 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -34,7 +34,6 @@
 #include "hw/pci/pci_host.h"
 #include "hw/ppc/spapr.h"
 #include "hw/pci-host/spapr.h"
-#include "system/ram_addr.h"
 #include <libfdt.h>
 #include "trace.h"
 #include "qemu/error-report.h"
diff --git a/hw/remote/memory.c b/hw/remote/memory.c
index 00193a552fa..8195aa5fb83 100644
--- a/hw/remote/memory.c
+++ b/hw/remote/memory.c
@@ -11,7 +11,6 @@
 #include "qemu/osdep.h"
 
 #include "hw/remote/memory.h"
-#include "system/ram_addr.h"
 #include "qapi/error.h"
 
 static void remote_sysmem_reset(void)
diff --git a/hw/remote/proxy-memory-listener.c b/hw/remote/proxy-memory-listener.c
index 30ac74961dd..e1a52d24f0b 100644
--- a/hw/remote/proxy-memory-listener.c
+++ b/hw/remote/proxy-memory-listener.c
@@ -12,7 +12,6 @@
 #include "qemu/range.h"
 #include "system/memory.h"
 #include "exec/cpu-common.h"
-#include "system/ram_addr.h"
 #include "qapi/error.h"
 #include "qemu/error-report.h"
 #include "hw/remote/mpqemu-link.h"
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index d0c6e80cb05..ad2c48188a8 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -13,7 +13,6 @@
 
 #include "qemu/osdep.h"
 #include "qapi/error.h"
-#include "system/ram_addr.h"
 #include "system/confidential-guest-support.h"
 #include "hw/boards.h"
 #include "hw/s390x/sclp.h"
diff --git a/hw/vfio/spapr.c b/hw/vfio/spapr.c
index 8d9d68da4ec..0f23681a3f9 100644
--- a/hw/vfio/spapr.c
+++ b/hw/vfio/spapr.c
@@ -17,7 +17,6 @@
 
 #include "hw/vfio/vfio-container-legacy.h"
 #include "hw/hw.h"
-#include "system/ram_addr.h"
 #include "qemu/error-report.h"
 #include "qapi/error.h"
 #include "trace.h"
diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c
index 1de2d3de521..15ba6799f22 100644
--- a/hw/virtio/virtio-mem.c
+++ b/hw/virtio/virtio-mem.c
@@ -25,7 +25,6 @@
 #include "hw/virtio/virtio-mem.h"
 #include "qapi/error.h"
 #include "qapi/visitor.h"
-#include "system/ram_addr.h"
 #include "migration/misc.h"
 #include "hw/boards.h"
 #include "hw/qdev-properties.h"
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 07/25] accel/tcg: Document rcu_read_lock is held when calling tlb_reset_dirty()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (5 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 06/25] hw: Remove unnecessary 'system/ram_addr.h' header Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 14:58   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 08/25] accel/tcg: Rename @start argument of tlb_reset_dirty*() Philippe Mathieu-Daudé
                   ` (18 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/exec/cputlb.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/exec/cputlb.h b/include/exec/cputlb.h
index 9bec0e78909..db7cbf97826 100644
--- a/include/exec/cputlb.h
+++ b/include/exec/cputlb.h
@@ -31,6 +31,7 @@ void tlb_unprotect_code(ram_addr_t ram_addr);
 #endif
 
 #ifndef CONFIG_USER_ONLY
+/* Called with rcu_read_lock held. */
 void tlb_reset_dirty(CPUState *cpu, uintptr_t start, uintptr_t length);
 void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t length);
 #endif
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 08/25] accel/tcg: Rename @start argument of tlb_reset_dirty*()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (6 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 07/25] accel/tcg: Document rcu_read_lock is held when calling tlb_reset_dirty() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 15:06   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 09/25] system/physmem: Rename @start argument of physical_memory_get_dirty() Philippe Mathieu-Daudé
                   ` (17 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Generally we want to clarify terminology and avoid confusions,
prefering @start with (exclusive) @end, and base @addr with
@length (for inclusive range).

Here as tlb_reset_dirty() and tlb_reset_dirty_range_all()
operate on a range, rename @start as @addr.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/exec/cputlb.h | 4 ++--
 accel/tcg/cputlb.c    | 6 +++---
 system/physmem.c      | 8 ++++----
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/include/exec/cputlb.h b/include/exec/cputlb.h
index db7cbf97826..995fe31ef75 100644
--- a/include/exec/cputlb.h
+++ b/include/exec/cputlb.h
@@ -32,8 +32,8 @@ void tlb_unprotect_code(ram_addr_t ram_addr);
 
 #ifndef CONFIG_USER_ONLY
 /* Called with rcu_read_lock held. */
-void tlb_reset_dirty(CPUState *cpu, uintptr_t start, uintptr_t length);
-void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t length);
+void tlb_reset_dirty(CPUState *cpu, uintptr_t addr, uintptr_t length);
+void tlb_reset_dirty_range_all(ram_addr_t addr, ram_addr_t length);
 #endif
 
 /**
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
index 2a6aa01c57c..6807328df82 100644
--- a/accel/tcg/cputlb.c
+++ b/accel/tcg/cputlb.c
@@ -916,7 +916,7 @@ static inline void copy_tlb_helper_locked(CPUTLBEntry *d, const CPUTLBEntry *s)
  * We must take tlb_c.lock to avoid racing with another vCPU update. The only
  * thing actually updated is the target TLB entry ->addr_write flags.
  */
-void tlb_reset_dirty(CPUState *cpu, uintptr_t start, uintptr_t length)
+void tlb_reset_dirty(CPUState *cpu, uintptr_t addr, uintptr_t length)
 {
     int mmu_idx;
 
@@ -929,12 +929,12 @@ void tlb_reset_dirty(CPUState *cpu, uintptr_t start, uintptr_t length)
 
         for (i = 0; i < n; i++) {
             tlb_reset_dirty_range_locked(&desc->fulltlb[i], &fast->table[i],
-                                         start, length);
+                                         addr, length);
         }
 
         for (i = 0; i < CPU_VTLB_SIZE; i++) {
             tlb_reset_dirty_range_locked(&desc->vfulltlb[i], &desc->vtable[i],
-                                         start, length);
+                                         addr, length);
         }
     }
     qemu_spin_unlock(&cpu->neg.tlb.c.lock);
diff --git a/system/physmem.c b/system/physmem.c
index 000bde90c2e..098824ad1d2 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -882,16 +882,16 @@ found:
     return block;
 }
 
-void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t length)
+void tlb_reset_dirty_range_all(ram_addr_t addr, ram_addr_t length)
 {
     CPUState *cpu;
-    ram_addr_t start1;
+    ram_addr_t start, start1;
     RAMBlock *block;
     ram_addr_t end;
 
     assert(tcg_enabled());
-    end = TARGET_PAGE_ALIGN(start + length);
-    start &= TARGET_PAGE_MASK;
+    end = TARGET_PAGE_ALIGN(addr + length);
+    start = addr & TARGET_PAGE_MASK;
 
     RCU_READ_LOCK_GUARD();
     block = qemu_get_ram_block(start);
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 09/25] system/physmem: Rename @start argument of physical_memory_get_dirty()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (7 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 08/25] accel/tcg: Rename @start argument of tlb_reset_dirty*() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01  8:21 ` [PATCH 10/25] system/physmem: Un-inline cpu_physical_memory_get_dirty_flag() Philippe Mathieu-Daudé
                   ` (16 subsequent siblings)
  25 siblings, 0 replies; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Generally we want to clarify terminology and avoid confusions,
prefering @start with (exclusive) @end, and base @addr with
@length (for inclusive range).

Here as cpu_physical_memory_get_dirty() operates on a range,
rename @start as @addr.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index f74a0ecee56..585ed78c767 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -142,7 +142,7 @@ static inline void qemu_ram_block_writeback(RAMBlock *block)
 #define DIRTY_CLIENTS_ALL     ((1 << DIRTY_MEMORY_NUM) - 1)
 #define DIRTY_CLIENTS_NOCODE  (DIRTY_CLIENTS_ALL & ~(1 << DIRTY_MEMORY_CODE))
 
-static inline bool cpu_physical_memory_get_dirty(ram_addr_t start,
+static inline bool cpu_physical_memory_get_dirty(ram_addr_t addr,
                                                  ram_addr_t length,
                                                  unsigned client)
 {
@@ -153,8 +153,8 @@ static inline bool cpu_physical_memory_get_dirty(ram_addr_t start,
 
     assert(client < DIRTY_MEMORY_NUM);
 
-    end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
-    page = start >> TARGET_PAGE_BITS;
+    end = TARGET_PAGE_ALIGN(addr + length) >> TARGET_PAGE_BITS;
+    page = addr >> TARGET_PAGE_BITS;
 
     WITH_RCU_READ_LOCK_GUARD() {
         blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 10/25] system/physmem: Un-inline cpu_physical_memory_get_dirty_flag()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (8 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 09/25] system/physmem: Rename @start argument of physical_memory_get_dirty() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 15:07   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 11/25] system/physmem: Un-inline cpu_physical_memory_is_clean() Philippe Mathieu-Daudé
                   ` (15 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Avoid maintaining large functions in header, rely on the
linker to optimize at linking time.

cpu_physical_memory_get_dirty() doesn't involve any CPU,
remove the 'cpu_' prefix.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 46 +--------------------------------------
 system/physmem.c          | 44 +++++++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 45 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index 585ed78c767..f8a307d1a3d 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -142,46 +142,6 @@ static inline void qemu_ram_block_writeback(RAMBlock *block)
 #define DIRTY_CLIENTS_ALL     ((1 << DIRTY_MEMORY_NUM) - 1)
 #define DIRTY_CLIENTS_NOCODE  (DIRTY_CLIENTS_ALL & ~(1 << DIRTY_MEMORY_CODE))
 
-static inline bool cpu_physical_memory_get_dirty(ram_addr_t addr,
-                                                 ram_addr_t length,
-                                                 unsigned client)
-{
-    DirtyMemoryBlocks *blocks;
-    unsigned long end, page;
-    unsigned long idx, offset, base;
-    bool dirty = false;
-
-    assert(client < DIRTY_MEMORY_NUM);
-
-    end = TARGET_PAGE_ALIGN(addr + length) >> TARGET_PAGE_BITS;
-    page = addr >> TARGET_PAGE_BITS;
-
-    WITH_RCU_READ_LOCK_GUARD() {
-        blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
-
-        idx = page / DIRTY_MEMORY_BLOCK_SIZE;
-        offset = page % DIRTY_MEMORY_BLOCK_SIZE;
-        base = page - offset;
-        while (page < end) {
-            unsigned long next = MIN(end, base + DIRTY_MEMORY_BLOCK_SIZE);
-            unsigned long num = next - base;
-            unsigned long found = find_next_bit(blocks->blocks[idx],
-                                                num, offset);
-            if (found < num) {
-                dirty = true;
-                break;
-            }
-
-            page = next;
-            idx++;
-            offset = 0;
-            base += DIRTY_MEMORY_BLOCK_SIZE;
-        }
-    }
-
-    return dirty;
-}
-
 static inline bool cpu_physical_memory_all_dirty(ram_addr_t start,
                                                  ram_addr_t length,
                                                  unsigned client)
@@ -221,11 +181,7 @@ static inline bool cpu_physical_memory_all_dirty(ram_addr_t start,
     return dirty;
 }
 
-static inline bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr,
-                                                      unsigned client)
-{
-    return cpu_physical_memory_get_dirty(addr, 1, client);
-}
+bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, unsigned client);
 
 static inline bool cpu_physical_memory_is_clean(ram_addr_t addr)
 {
diff --git a/system/physmem.c b/system/physmem.c
index 098824ad1d2..7973448b3f8 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -902,6 +902,50 @@ void tlb_reset_dirty_range_all(ram_addr_t addr, ram_addr_t length)
     }
 }
 
+static bool physical_memory_get_dirty(ram_addr_t addr, ram_addr_t length,
+                                      unsigned client)
+{
+    DirtyMemoryBlocks *blocks;
+    unsigned long end, page;
+    unsigned long idx, offset, base;
+    bool dirty = false;
+
+    assert(client < DIRTY_MEMORY_NUM);
+
+    end = TARGET_PAGE_ALIGN(addr + length) >> TARGET_PAGE_BITS;
+    page = addr >> TARGET_PAGE_BITS;
+
+    WITH_RCU_READ_LOCK_GUARD() {
+        blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
+
+        idx = page / DIRTY_MEMORY_BLOCK_SIZE;
+        offset = page % DIRTY_MEMORY_BLOCK_SIZE;
+        base = page - offset;
+        while (page < end) {
+            unsigned long next = MIN(end, base + DIRTY_MEMORY_BLOCK_SIZE);
+            unsigned long num = next - base;
+            unsigned long found = find_next_bit(blocks->blocks[idx],
+                                                num, offset);
+            if (found < num) {
+                dirty = true;
+                break;
+            }
+
+            page = next;
+            idx++;
+            offset = 0;
+            base += DIRTY_MEMORY_BLOCK_SIZE;
+        }
+    }
+
+    return dirty;
+}
+
+bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, unsigned client)
+{
+    return physical_memory_get_dirty(addr, 1, client);
+}
+
 /* Note: start and end must be within the same ram block.  */
 bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
                                               ram_addr_t length,
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 11/25] system/physmem: Un-inline cpu_physical_memory_is_clean()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (9 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 10/25] system/physmem: Un-inline cpu_physical_memory_get_dirty_flag() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 15:09   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 12/25] system/physmem: Rename @start argument of physical_memory_all_dirty() Philippe Mathieu-Daudé
                   ` (14 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Avoid maintaining large functions in header, rely on the
linker to optimize at linking time.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 9 +--------
 system/physmem.c          | 9 +++++++++
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index f8a307d1a3d..cdf25c315be 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -183,14 +183,7 @@ static inline bool cpu_physical_memory_all_dirty(ram_addr_t start,
 
 bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, unsigned client);
 
-static inline bool cpu_physical_memory_is_clean(ram_addr_t addr)
-{
-    bool vga = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_VGA);
-    bool code = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_CODE);
-    bool migration =
-        cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_MIGRATION);
-    return !(vga && code && migration);
-}
+bool cpu_physical_memory_is_clean(ram_addr_t addr);
 
 static inline uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t start,
                                                                ram_addr_t length,
diff --git a/system/physmem.c b/system/physmem.c
index 7973448b3f8..b27519c3075 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -946,6 +946,15 @@ bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, unsigned client)
     return physical_memory_get_dirty(addr, 1, client);
 }
 
+bool cpu_physical_memory_is_clean(ram_addr_t addr)
+{
+    bool vga = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_VGA);
+    bool code = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_CODE);
+    bool migration =
+        cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_MIGRATION);
+    return !(vga && code && migration);
+}
+
 /* Note: start and end must be within the same ram block.  */
 bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
                                               ram_addr_t length,
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 12/25] system/physmem: Rename @start argument of physical_memory_all_dirty()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (10 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 11/25] system/physmem: Un-inline cpu_physical_memory_is_clean() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01  8:21 ` [PATCH 13/25] system/physmem: Rename @start argument of physical_memory_range*() Philippe Mathieu-Daudé
                   ` (13 subsequent siblings)
  25 siblings, 0 replies; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Generally we want to clarify terminology and avoid confusions,
prefering @start with (exclusive) @end, and base @addr with
@length (for inclusive range).

Here as cpu_physical_memory_all_dirty() operates on a range,
rename @start as @addr.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index cdf25c315be..7a9e8f86be0 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -142,7 +142,7 @@ static inline void qemu_ram_block_writeback(RAMBlock *block)
 #define DIRTY_CLIENTS_ALL     ((1 << DIRTY_MEMORY_NUM) - 1)
 #define DIRTY_CLIENTS_NOCODE  (DIRTY_CLIENTS_ALL & ~(1 << DIRTY_MEMORY_CODE))
 
-static inline bool cpu_physical_memory_all_dirty(ram_addr_t start,
+static inline bool cpu_physical_memory_all_dirty(ram_addr_t addr,
                                                  ram_addr_t length,
                                                  unsigned client)
 {
@@ -153,8 +153,8 @@ static inline bool cpu_physical_memory_all_dirty(ram_addr_t start,
 
     assert(client < DIRTY_MEMORY_NUM);
 
-    end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
-    page = start >> TARGET_PAGE_BITS;
+    end = TARGET_PAGE_ALIGN(addr + length) >> TARGET_PAGE_BITS;
+    page = addr >> TARGET_PAGE_BITS;
 
     RCU_READ_LOCK_GUARD();
 
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 13/25] system/physmem: Rename @start argument of physical_memory_range*()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (11 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 12/25] system/physmem: Rename @start argument of physical_memory_all_dirty() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01  8:21 ` [PATCH 14/25] system/physmem: Un-inline cpu_physical_memory_range_includes_clean() Philippe Mathieu-Daudé
                   ` (12 subsequent siblings)
  25 siblings, 0 replies; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Generally we want to clarify terminology and avoid confusions,
prefering @start with (exclusive) @end, and base @addr with
@length (for inclusive range).

Here as cpu_physical_memory_range_includes_clean() operates
on a range, rename @start as @addr.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index 7a9e8f86be0..e06cc4d0c52 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -185,22 +185,22 @@ bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, unsigned client);
 
 bool cpu_physical_memory_is_clean(ram_addr_t addr);
 
-static inline uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t start,
+static inline uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t addr,
                                                                ram_addr_t length,
                                                                uint8_t mask)
 {
     uint8_t ret = 0;
 
     if (mask & (1 << DIRTY_MEMORY_VGA) &&
-        !cpu_physical_memory_all_dirty(start, length, DIRTY_MEMORY_VGA)) {
+        !cpu_physical_memory_all_dirty(addr, length, DIRTY_MEMORY_VGA)) {
         ret |= (1 << DIRTY_MEMORY_VGA);
     }
     if (mask & (1 << DIRTY_MEMORY_CODE) &&
-        !cpu_physical_memory_all_dirty(start, length, DIRTY_MEMORY_CODE)) {
+        !cpu_physical_memory_all_dirty(addr, length, DIRTY_MEMORY_CODE)) {
         ret |= (1 << DIRTY_MEMORY_CODE);
     }
     if (mask & (1 << DIRTY_MEMORY_MIGRATION) &&
-        !cpu_physical_memory_all_dirty(start, length, DIRTY_MEMORY_MIGRATION)) {
+        !cpu_physical_memory_all_dirty(addr, length, DIRTY_MEMORY_MIGRATION)) {
         ret |= (1 << DIRTY_MEMORY_MIGRATION);
     }
     return ret;
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 14/25] system/physmem: Un-inline cpu_physical_memory_range_includes_clean()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (12 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 13/25] system/physmem: Rename @start argument of physical_memory_range*() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 15:15   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 15/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_flag() Philippe Mathieu-Daudé
                   ` (11 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Avoid maintaining large functions in header, rely on the
linker to optimize at linking time.

cpu_physical_memory_all_dirty() doesn't involve any CPU,
remove the 'cpu_' prefix.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 62 ++-------------------------------------
 system/physmem.c          | 60 +++++++++++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+), 59 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index e06cc4d0c52..809169b9903 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -142,69 +142,13 @@ static inline void qemu_ram_block_writeback(RAMBlock *block)
 #define DIRTY_CLIENTS_ALL     ((1 << DIRTY_MEMORY_NUM) - 1)
 #define DIRTY_CLIENTS_NOCODE  (DIRTY_CLIENTS_ALL & ~(1 << DIRTY_MEMORY_CODE))
 
-static inline bool cpu_physical_memory_all_dirty(ram_addr_t addr,
-                                                 ram_addr_t length,
-                                                 unsigned client)
-{
-    DirtyMemoryBlocks *blocks;
-    unsigned long end, page;
-    unsigned long idx, offset, base;
-    bool dirty = true;
-
-    assert(client < DIRTY_MEMORY_NUM);
-
-    end = TARGET_PAGE_ALIGN(addr + length) >> TARGET_PAGE_BITS;
-    page = addr >> TARGET_PAGE_BITS;
-
-    RCU_READ_LOCK_GUARD();
-
-    blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
-
-    idx = page / DIRTY_MEMORY_BLOCK_SIZE;
-    offset = page % DIRTY_MEMORY_BLOCK_SIZE;
-    base = page - offset;
-    while (page < end) {
-        unsigned long next = MIN(end, base + DIRTY_MEMORY_BLOCK_SIZE);
-        unsigned long num = next - base;
-        unsigned long found = find_next_zero_bit(blocks->blocks[idx], num, offset);
-        if (found < num) {
-            dirty = false;
-            break;
-        }
-
-        page = next;
-        idx++;
-        offset = 0;
-        base += DIRTY_MEMORY_BLOCK_SIZE;
-    }
-
-    return dirty;
-}
-
 bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, unsigned client);
 
 bool cpu_physical_memory_is_clean(ram_addr_t addr);
 
-static inline uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t addr,
-                                                               ram_addr_t length,
-                                                               uint8_t mask)
-{
-    uint8_t ret = 0;
-
-    if (mask & (1 << DIRTY_MEMORY_VGA) &&
-        !cpu_physical_memory_all_dirty(addr, length, DIRTY_MEMORY_VGA)) {
-        ret |= (1 << DIRTY_MEMORY_VGA);
-    }
-    if (mask & (1 << DIRTY_MEMORY_CODE) &&
-        !cpu_physical_memory_all_dirty(addr, length, DIRTY_MEMORY_CODE)) {
-        ret |= (1 << DIRTY_MEMORY_CODE);
-    }
-    if (mask & (1 << DIRTY_MEMORY_MIGRATION) &&
-        !cpu_physical_memory_all_dirty(addr, length, DIRTY_MEMORY_MIGRATION)) {
-        ret |= (1 << DIRTY_MEMORY_MIGRATION);
-    }
-    return ret;
-}
+uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t addr,
+                                                 ram_addr_t length,
+                                                 uint8_t mask);
 
 static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr,
                                                       unsigned client)
diff --git a/system/physmem.c b/system/physmem.c
index b27519c3075..11b08570b62 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -955,6 +955,66 @@ bool cpu_physical_memory_is_clean(ram_addr_t addr)
     return !(vga && code && migration);
 }
 
+static bool physical_memory_all_dirty(ram_addr_t addr, ram_addr_t length,
+                                      unsigned client)
+{
+    DirtyMemoryBlocks *blocks;
+    unsigned long end, page;
+    unsigned long idx, offset, base;
+    bool dirty = true;
+
+    assert(client < DIRTY_MEMORY_NUM);
+
+    end = TARGET_PAGE_ALIGN(addr + length) >> TARGET_PAGE_BITS;
+    page = addr >> TARGET_PAGE_BITS;
+
+    RCU_READ_LOCK_GUARD();
+
+    blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
+
+    idx = page / DIRTY_MEMORY_BLOCK_SIZE;
+    offset = page % DIRTY_MEMORY_BLOCK_SIZE;
+    base = page - offset;
+    while (page < end) {
+        unsigned long next = MIN(end, base + DIRTY_MEMORY_BLOCK_SIZE);
+        unsigned long num = next - base;
+        unsigned long found = find_next_zero_bit(blocks->blocks[idx],
+                                                 num, offset);
+        if (found < num) {
+            dirty = false;
+            break;
+        }
+
+        page = next;
+        idx++;
+        offset = 0;
+        base += DIRTY_MEMORY_BLOCK_SIZE;
+    }
+
+    return dirty;
+}
+
+uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t addr,
+                                                 ram_addr_t length,
+                                                 uint8_t mask)
+{
+    uint8_t ret = 0;
+
+    if (mask & (1 << DIRTY_MEMORY_VGA) &&
+        !physical_memory_all_dirty(addr, length, DIRTY_MEMORY_VGA)) {
+        ret |= (1 << DIRTY_MEMORY_VGA);
+    }
+    if (mask & (1 << DIRTY_MEMORY_CODE) &&
+        !physical_memory_all_dirty(addr, length, DIRTY_MEMORY_CODE)) {
+        ret |= (1 << DIRTY_MEMORY_CODE);
+    }
+    if (mask & (1 << DIRTY_MEMORY_MIGRATION) &&
+        !physical_memory_all_dirty(addr, length, DIRTY_MEMORY_MIGRATION)) {
+        ret |= (1 << DIRTY_MEMORY_MIGRATION);
+    }
+    return ret;
+}
+
 /* Note: start and end must be within the same ram block.  */
 bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
                                               ram_addr_t length,
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 15/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_flag()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (13 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 14/25] system/physmem: Un-inline cpu_physical_memory_range_includes_clean() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 15:16   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 16/25] system/physmem: Rename @start argument of physical_memory_*range() Philippe Mathieu-Daudé
                   ` (10 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Avoid maintaining large functions in header, rely on the
linker to optimize at linking time.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 19 +------------------
 system/physmem.c          | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+), 18 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index 809169b9903..6ed17b455b4 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -150,24 +150,7 @@ uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t addr,
                                                  ram_addr_t length,
                                                  uint8_t mask);
 
-static inline void cpu_physical_memory_set_dirty_flag(ram_addr_t addr,
-                                                      unsigned client)
-{
-    unsigned long page, idx, offset;
-    DirtyMemoryBlocks *blocks;
-
-    assert(client < DIRTY_MEMORY_NUM);
-
-    page = addr >> TARGET_PAGE_BITS;
-    idx = page / DIRTY_MEMORY_BLOCK_SIZE;
-    offset = page % DIRTY_MEMORY_BLOCK_SIZE;
-
-    RCU_READ_LOCK_GUARD();
-
-    blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
-
-    set_bit_atomic(offset, blocks->blocks[idx]);
-}
+void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, unsigned client);
 
 static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start,
                                                        ram_addr_t length,
diff --git a/system/physmem.c b/system/physmem.c
index 11b08570b62..cb0efbeabb2 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -1015,6 +1015,24 @@ uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t addr,
     return ret;
 }
 
+void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, unsigned client)
+{
+    unsigned long page, idx, offset;
+    DirtyMemoryBlocks *blocks;
+
+    assert(client < DIRTY_MEMORY_NUM);
+
+    page = addr >> TARGET_PAGE_BITS;
+    idx = page / DIRTY_MEMORY_BLOCK_SIZE;
+    offset = page % DIRTY_MEMORY_BLOCK_SIZE;
+
+    RCU_READ_LOCK_GUARD();
+
+    blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
+
+    set_bit_atomic(offset, blocks->blocks[idx]);
+}
+
 /* Note: start and end must be within the same ram block.  */
 bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
                                               ram_addr_t length,
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 16/25] system/physmem: Rename @start argument of physical_memory_*range()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (14 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 15/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_flag() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01  8:21 ` [PATCH 17/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_range() Philippe Mathieu-Daudé
                   ` (9 subsequent siblings)
  25 siblings, 0 replies; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Generally we want to clarify terminology and avoid confusions,
prefering @start with (exclusive) @end, and base @addr with
@length (for inclusive range).

Here as cpu_physical_memory_set_dirty_range() operates on a
range, rename @start as @addr.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index 6ed17b455b4..84a8b5c003d 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -152,7 +152,7 @@ uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t addr,
 
 void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, unsigned client);
 
-static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start,
+static inline void cpu_physical_memory_set_dirty_range(ram_addr_t addr,
                                                        ram_addr_t length,
                                                        uint8_t mask)
 {
@@ -165,8 +165,8 @@ static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start,
         return;
     }
 
-    end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
-    page = start >> TARGET_PAGE_BITS;
+    end = TARGET_PAGE_ALIGN(addr + length) >> TARGET_PAGE_BITS;
+    page = addr >> TARGET_PAGE_BITS;
 
     WITH_RCU_READ_LOCK_GUARD() {
         for (i = 0; i < DIRTY_MEMORY_NUM; i++) {
@@ -200,7 +200,7 @@ static inline void cpu_physical_memory_set_dirty_range(ram_addr_t start,
     }
 
     if (xen_enabled()) {
-        xen_hvm_modified_memory(start, length);
+        xen_hvm_modified_memory(addr, length);
     }
 }
 
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 17/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_range()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (15 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 16/25] system/physmem: Rename @start argument of physical_memory_*range() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 15:17   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 18/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_lebitmap() Philippe Mathieu-Daudé
                   ` (8 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Avoid maintaining large functions in header, rely on the
linker to optimize at linking time.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 53 ++-------------------------------------
 system/physmem.c          | 51 +++++++++++++++++++++++++++++++++++++
 2 files changed, 53 insertions(+), 51 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index 84a8b5c003d..6377dd19a2f 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -152,57 +152,8 @@ uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t addr,
 
 void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, unsigned client);
 
-static inline void cpu_physical_memory_set_dirty_range(ram_addr_t addr,
-                                                       ram_addr_t length,
-                                                       uint8_t mask)
-{
-    DirtyMemoryBlocks *blocks[DIRTY_MEMORY_NUM];
-    unsigned long end, page;
-    unsigned long idx, offset, base;
-    int i;
-
-    if (!mask && !xen_enabled()) {
-        return;
-    }
-
-    end = TARGET_PAGE_ALIGN(addr + length) >> TARGET_PAGE_BITS;
-    page = addr >> TARGET_PAGE_BITS;
-
-    WITH_RCU_READ_LOCK_GUARD() {
-        for (i = 0; i < DIRTY_MEMORY_NUM; i++) {
-            blocks[i] = qatomic_rcu_read(&ram_list.dirty_memory[i]);
-        }
-
-        idx = page / DIRTY_MEMORY_BLOCK_SIZE;
-        offset = page % DIRTY_MEMORY_BLOCK_SIZE;
-        base = page - offset;
-        while (page < end) {
-            unsigned long next = MIN(end, base + DIRTY_MEMORY_BLOCK_SIZE);
-
-            if (likely(mask & (1 << DIRTY_MEMORY_MIGRATION))) {
-                bitmap_set_atomic(blocks[DIRTY_MEMORY_MIGRATION]->blocks[idx],
-                                  offset, next - page);
-            }
-            if (unlikely(mask & (1 << DIRTY_MEMORY_VGA))) {
-                bitmap_set_atomic(blocks[DIRTY_MEMORY_VGA]->blocks[idx],
-                                  offset, next - page);
-            }
-            if (unlikely(mask & (1 << DIRTY_MEMORY_CODE))) {
-                bitmap_set_atomic(blocks[DIRTY_MEMORY_CODE]->blocks[idx],
-                                  offset, next - page);
-            }
-
-            page = next;
-            idx++;
-            offset = 0;
-            base += DIRTY_MEMORY_BLOCK_SIZE;
-        }
-    }
-
-    if (xen_enabled()) {
-        xen_hvm_modified_memory(addr, length);
-    }
-}
+void cpu_physical_memory_set_dirty_range(ram_addr_t addr, ram_addr_t length,
+                                         uint8_t mask);
 
 #if !defined(_WIN32)
 
diff --git a/system/physmem.c b/system/physmem.c
index cb0efbeabb2..383aecb391f 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -1033,6 +1033,57 @@ void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, unsigned client)
     set_bit_atomic(offset, blocks->blocks[idx]);
 }
 
+void cpu_physical_memory_set_dirty_range(ram_addr_t addr, ram_addr_t length,
+                                         uint8_t mask)
+{
+    DirtyMemoryBlocks *blocks[DIRTY_MEMORY_NUM];
+    unsigned long end, page;
+    unsigned long idx, offset, base;
+    int i;
+
+    if (!mask && !xen_enabled()) {
+        return;
+    }
+
+    end = TARGET_PAGE_ALIGN(addr + length) >> TARGET_PAGE_BITS;
+    page = addr >> TARGET_PAGE_BITS;
+
+    WITH_RCU_READ_LOCK_GUARD() {
+        for (i = 0; i < DIRTY_MEMORY_NUM; i++) {
+            blocks[i] = qatomic_rcu_read(&ram_list.dirty_memory[i]);
+        }
+
+        idx = page / DIRTY_MEMORY_BLOCK_SIZE;
+        offset = page % DIRTY_MEMORY_BLOCK_SIZE;
+        base = page - offset;
+        while (page < end) {
+            unsigned long next = MIN(end, base + DIRTY_MEMORY_BLOCK_SIZE);
+
+            if (likely(mask & (1 << DIRTY_MEMORY_MIGRATION))) {
+                bitmap_set_atomic(blocks[DIRTY_MEMORY_MIGRATION]->blocks[idx],
+                                  offset, next - page);
+            }
+            if (unlikely(mask & (1 << DIRTY_MEMORY_VGA))) {
+                bitmap_set_atomic(blocks[DIRTY_MEMORY_VGA]->blocks[idx],
+                                  offset, next - page);
+            }
+            if (unlikely(mask & (1 << DIRTY_MEMORY_CODE))) {
+                bitmap_set_atomic(blocks[DIRTY_MEMORY_CODE]->blocks[idx],
+                                  offset, next - page);
+            }
+
+            page = next;
+            idx++;
+            offset = 0;
+            base += DIRTY_MEMORY_BLOCK_SIZE;
+        }
+    }
+
+    if (xen_enabled()) {
+        xen_hvm_modified_memory(addr, length);
+    }
+}
+
 /* Note: start and end must be within the same ram block.  */
 bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
                                               ram_addr_t length,
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 18/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_lebitmap()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (16 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 17/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_range() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 15:23   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 19/25] system/physmem: Rename @start argument of physmem_dirty_bits_cleared() Philippe Mathieu-Daudé
                   ` (7 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Avoid maintaining large functions in header, rely on the
linker to optimize at linking time.

Remove the now unneeded "system/xen.h" header.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 103 +------------------------------------
 system/physmem.c          | 105 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 106 insertions(+), 102 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index 6377dd19a2f..4c227fee412 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -19,7 +19,6 @@
 #ifndef SYSTEM_RAM_ADDR_H
 #define SYSTEM_RAM_ADDR_H
 
-#include "system/xen.h"
 #include "system/tcg.h"
 #include "exec/cputlb.h"
 #include "exec/ramlist.h"
@@ -156,115 +155,15 @@ void cpu_physical_memory_set_dirty_range(ram_addr_t addr, ram_addr_t length,
                                          uint8_t mask);
 
 #if !defined(_WIN32)
-
 /*
  * Contrary to cpu_physical_memory_sync_dirty_bitmap() this function returns
  * the number of dirty pages in @bitmap passed as argument. On the other hand,
  * cpu_physical_memory_sync_dirty_bitmap() returns newly dirtied pages that
  * weren't set in the global migration bitmap.
  */
-static inline
 uint64_t cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
                                                 ram_addr_t start,
-                                                ram_addr_t pages)
-{
-    unsigned long i, j;
-    unsigned long page_number, c, nbits;
-    hwaddr addr;
-    ram_addr_t ram_addr;
-    uint64_t num_dirty = 0;
-    unsigned long len = (pages + HOST_LONG_BITS - 1) / HOST_LONG_BITS;
-    unsigned long hpratio = qemu_real_host_page_size() / TARGET_PAGE_SIZE;
-    unsigned long page = BIT_WORD(start >> TARGET_PAGE_BITS);
-
-    /* start address is aligned at the start of a word? */
-    if ((((page * BITS_PER_LONG) << TARGET_PAGE_BITS) == start) &&
-        (hpratio == 1)) {
-        unsigned long **blocks[DIRTY_MEMORY_NUM];
-        unsigned long idx;
-        unsigned long offset;
-        long k;
-        long nr = BITS_TO_LONGS(pages);
-
-        idx = (start >> TARGET_PAGE_BITS) / DIRTY_MEMORY_BLOCK_SIZE;
-        offset = BIT_WORD((start >> TARGET_PAGE_BITS) %
-                          DIRTY_MEMORY_BLOCK_SIZE);
-
-        WITH_RCU_READ_LOCK_GUARD() {
-            for (i = 0; i < DIRTY_MEMORY_NUM; i++) {
-                blocks[i] =
-                    qatomic_rcu_read(&ram_list.dirty_memory[i])->blocks;
-            }
-
-            for (k = 0; k < nr; k++) {
-                if (bitmap[k]) {
-                    unsigned long temp = leul_to_cpu(bitmap[k]);
-
-                    nbits = ctpopl(temp);
-                    qatomic_or(&blocks[DIRTY_MEMORY_VGA][idx][offset], temp);
-
-                    if (global_dirty_tracking) {
-                        qatomic_or(
-                                &blocks[DIRTY_MEMORY_MIGRATION][idx][offset],
-                                temp);
-                        if (unlikely(
-                            global_dirty_tracking & GLOBAL_DIRTY_DIRTY_RATE)) {
-                            total_dirty_pages += nbits;
-                        }
-                    }
-
-                    num_dirty += nbits;
-
-                    if (tcg_enabled()) {
-                        qatomic_or(&blocks[DIRTY_MEMORY_CODE][idx][offset],
-                                   temp);
-                    }
-                }
-
-                if (++offset >= BITS_TO_LONGS(DIRTY_MEMORY_BLOCK_SIZE)) {
-                    offset = 0;
-                    idx++;
-                }
-            }
-        }
-
-        if (xen_enabled()) {
-            xen_hvm_modified_memory(start, pages << TARGET_PAGE_BITS);
-        }
-    } else {
-        uint8_t clients = tcg_enabled() ? DIRTY_CLIENTS_ALL : DIRTY_CLIENTS_NOCODE;
-
-        if (!global_dirty_tracking) {
-            clients &= ~(1 << DIRTY_MEMORY_MIGRATION);
-        }
-
-        /*
-         * bitmap-traveling is faster than memory-traveling (for addr...)
-         * especially when most of the memory is not dirty.
-         */
-        for (i = 0; i < len; i++) {
-            if (bitmap[i] != 0) {
-                c = leul_to_cpu(bitmap[i]);
-                nbits = ctpopl(c);
-                if (unlikely(global_dirty_tracking & GLOBAL_DIRTY_DIRTY_RATE)) {
-                    total_dirty_pages += nbits;
-                }
-                num_dirty += nbits;
-                do {
-                    j = ctzl(c);
-                    c &= ~(1ul << j);
-                    page_number = (i * HOST_LONG_BITS + j) * hpratio;
-                    addr = page_number * TARGET_PAGE_SIZE;
-                    ram_addr = start + addr;
-                    cpu_physical_memory_set_dirty_range(ram_addr,
-                                       TARGET_PAGE_SIZE * hpratio, clients);
-                } while (c != 0);
-            }
-        }
-    }
-
-    return num_dirty;
-}
+                                                ram_addr_t pages);
 #endif /* not _WIN32 */
 
 static inline void cpu_physical_memory_dirty_bits_cleared(ram_addr_t start,
diff --git a/system/physmem.c b/system/physmem.c
index 383aecb391f..e78ca410ebf 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -1208,6 +1208,111 @@ bool cpu_physical_memory_snapshot_get_dirty(DirtyBitmapSnapshot *snap,
     return false;
 }
 
+#if !defined(_WIN32)
+uint64_t cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
+                                                ram_addr_t start,
+                                                ram_addr_t pages)
+{
+    unsigned long i, j;
+    unsigned long page_number, c, nbits;
+    hwaddr addr;
+    ram_addr_t ram_addr;
+    uint64_t num_dirty = 0;
+    unsigned long len = (pages + HOST_LONG_BITS - 1) / HOST_LONG_BITS;
+    unsigned long hpratio = qemu_real_host_page_size() / TARGET_PAGE_SIZE;
+    unsigned long page = BIT_WORD(start >> TARGET_PAGE_BITS);
+
+    /* start address is aligned at the start of a word? */
+    if ((((page * BITS_PER_LONG) << TARGET_PAGE_BITS) == start) &&
+        (hpratio == 1)) {
+        unsigned long **blocks[DIRTY_MEMORY_NUM];
+        unsigned long idx;
+        unsigned long offset;
+        long k;
+        long nr = BITS_TO_LONGS(pages);
+
+        idx = (start >> TARGET_PAGE_BITS) / DIRTY_MEMORY_BLOCK_SIZE;
+        offset = BIT_WORD((start >> TARGET_PAGE_BITS) %
+                          DIRTY_MEMORY_BLOCK_SIZE);
+
+        WITH_RCU_READ_LOCK_GUARD() {
+            for (i = 0; i < DIRTY_MEMORY_NUM; i++) {
+                blocks[i] =
+                    qatomic_rcu_read(&ram_list.dirty_memory[i])->blocks;
+            }
+
+            for (k = 0; k < nr; k++) {
+                if (bitmap[k]) {
+                    unsigned long temp = leul_to_cpu(bitmap[k]);
+
+                    nbits = ctpopl(temp);
+                    qatomic_or(&blocks[DIRTY_MEMORY_VGA][idx][offset], temp);
+
+                    if (global_dirty_tracking) {
+                        qatomic_or(
+                                &blocks[DIRTY_MEMORY_MIGRATION][idx][offset],
+                                temp);
+                        if (unlikely(
+                            global_dirty_tracking & GLOBAL_DIRTY_DIRTY_RATE)) {
+                            total_dirty_pages += nbits;
+                        }
+                    }
+
+                    num_dirty += nbits;
+
+                    if (tcg_enabled()) {
+                        qatomic_or(&blocks[DIRTY_MEMORY_CODE][idx][offset],
+                                   temp);
+                    }
+                }
+
+                if (++offset >= BITS_TO_LONGS(DIRTY_MEMORY_BLOCK_SIZE)) {
+                    offset = 0;
+                    idx++;
+                }
+            }
+        }
+
+        if (xen_enabled()) {
+            xen_hvm_modified_memory(start, pages << TARGET_PAGE_BITS);
+        }
+    } else {
+        uint8_t clients = tcg_enabled() ? DIRTY_CLIENTS_ALL
+                                        : DIRTY_CLIENTS_NOCODE;
+
+        if (!global_dirty_tracking) {
+            clients &= ~(1 << DIRTY_MEMORY_MIGRATION);
+        }
+
+        /*
+         * bitmap-traveling is faster than memory-traveling (for addr...)
+         * especially when most of the memory is not dirty.
+         */
+        for (i = 0; i < len; i++) {
+            if (bitmap[i] != 0) {
+                c = leul_to_cpu(bitmap[i]);
+                nbits = ctpopl(c);
+                if (unlikely(global_dirty_tracking & GLOBAL_DIRTY_DIRTY_RATE)) {
+                    total_dirty_pages += nbits;
+                }
+                num_dirty += nbits;
+                do {
+                    j = ctzl(c);
+                    c &= ~(1ul << j);
+                    page_number = (i * HOST_LONG_BITS + j) * hpratio;
+                    addr = page_number * TARGET_PAGE_SIZE;
+                    ram_addr = start + addr;
+                    cpu_physical_memory_set_dirty_range(ram_addr,
+                                       TARGET_PAGE_SIZE * hpratio, clients);
+                } while (c != 0);
+            }
+        }
+    }
+
+    return num_dirty;
+}
+#endif /* not _WIN32 */
+
 static int subpage_register(subpage_t *mmio, uint32_t start, uint32_t end,
                             uint16_t section);
 static subpage_t *subpage_init(FlatView *fv, hwaddr base);
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 19/25] system/physmem: Rename @start argument of physmem_dirty_bits_cleared()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (17 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 18/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_lebitmap() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01  8:21 ` [PATCH 20/25] system/physmem: Un-inline cpu_physical_memory_dirty_bits_cleared() Philippe Mathieu-Daudé
                   ` (6 subsequent siblings)
  25 siblings, 0 replies; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Generally we want to clarify terminology and avoid confusions,
prefering @start with (exclusive) @end, and base @addr with
@length (for inclusive range).

Here as cpu_physical_memory_dirty_bits_cleared() operates on
a range, rename @start as @addr.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index 4c227fee412..e65f479e266 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -166,13 +166,12 @@ uint64_t cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
                                                 ram_addr_t pages);
 #endif /* not _WIN32 */
 
-static inline void cpu_physical_memory_dirty_bits_cleared(ram_addr_t start,
+static inline void cpu_physical_memory_dirty_bits_cleared(ram_addr_t addr,
                                                           ram_addr_t length)
 {
     if (tcg_enabled()) {
-        tlb_reset_dirty_range_all(start, length);
+        tlb_reset_dirty_range_all(addr, length);
     }
-
 }
 bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
                                               ram_addr_t length,
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 20/25] system/physmem: Un-inline cpu_physical_memory_dirty_bits_cleared()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (18 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 19/25] system/physmem: Rename @start argument of physmem_dirty_bits_cleared() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 15:50   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 21/25] system/physmem: Rename @start argument of physmem_test_and_clear_dirty() Philippe Mathieu-Daudé
                   ` (5 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Avoid maintaining large functions in header, rely on the
linker to optimize at linking time.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 11 ++---------
 system/physmem.c          |  7 +++++++
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index e65f479e266..7197913d761 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -19,8 +19,6 @@
 #ifndef SYSTEM_RAM_ADDR_H
 #define SYSTEM_RAM_ADDR_H
 
-#include "system/tcg.h"
-#include "exec/cputlb.h"
 #include "exec/ramlist.h"
 #include "system/ramblock.h"
 #include "system/memory.h"
@@ -166,13 +164,8 @@ uint64_t cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
                                                 ram_addr_t pages);
 #endif /* not _WIN32 */
 
-static inline void cpu_physical_memory_dirty_bits_cleared(ram_addr_t addr,
-                                                          ram_addr_t length)
-{
-    if (tcg_enabled()) {
-        tlb_reset_dirty_range_all(addr, length);
-    }
-}
+void cpu_physical_memory_dirty_bits_cleared(ram_addr_t addr, ram_addr_t length);
+
 bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
                                               ram_addr_t length,
                                               unsigned client);
diff --git a/system/physmem.c b/system/physmem.c
index e78ca410ebf..c475ce0a5db 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -902,6 +902,13 @@ void tlb_reset_dirty_range_all(ram_addr_t addr, ram_addr_t length)
     }
 }
 
+void cpu_physical_memory_dirty_bits_cleared(ram_addr_t addr, ram_addr_t length)
+{
+    if (tcg_enabled()) {
+        tlb_reset_dirty_range_all(addr, length);
+    }
+}
+
 static bool physical_memory_get_dirty(ram_addr_t addr, ram_addr_t length,
                                       unsigned client)
 {
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 21/25] system/physmem: Rename @start argument of physmem_test_and_clear_dirty()
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (19 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 20/25] system/physmem: Un-inline cpu_physical_memory_dirty_bits_cleared() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01  8:21 ` [PATCH 22/25] system/physmem: Reduce cpu_physical_memory_clear_dirty_range() scope Philippe Mathieu-Daudé
                   ` (4 subsequent siblings)
  25 siblings, 0 replies; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Generally we want to clarify terminology and avoid confusions,
prefering @start with (exclusive) @end, and base @addr with
@length (for inclusive range).

Here as cpu_physical_memory_test_and_clear_dirty() operates on
a range, rename @start as @addr.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h |  2 +-
 system/physmem.c          | 14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index 7197913d761..3899c084076 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -166,7 +166,7 @@ uint64_t cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
 
 void cpu_physical_memory_dirty_bits_cleared(ram_addr_t addr, ram_addr_t length);
 
-bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
+bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t addr,
                                               ram_addr_t length,
                                               unsigned client);
 
diff --git a/system/physmem.c b/system/physmem.c
index c475ce0a5db..9e36748dc4a 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -1092,7 +1092,7 @@ void cpu_physical_memory_set_dirty_range(ram_addr_t addr, ram_addr_t length,
 }
 
 /* Note: start and end must be within the same ram block.  */
-bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
+bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t addr,
                                               ram_addr_t length,
                                               unsigned client)
 {
@@ -1106,16 +1106,16 @@ bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
         return false;
     }
 
-    end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
-    start_page = start >> TARGET_PAGE_BITS;
+    end = TARGET_PAGE_ALIGN(addr + length) >> TARGET_PAGE_BITS;
+    start_page = addr >> TARGET_PAGE_BITS;
     page = start_page;
 
     WITH_RCU_READ_LOCK_GUARD() {
         blocks = qatomic_rcu_read(&ram_list.dirty_memory[client]);
-        ramblock = qemu_get_ram_block(start);
+        ramblock = qemu_get_ram_block(addr);
         /* Range sanity check on the ramblock */
-        assert(start >= ramblock->offset &&
-               start + length <= ramblock->offset + ramblock->used_length);
+        assert(addr >= ramblock->offset &&
+               addr + length <= ramblock->offset + ramblock->used_length);
 
         while (page < end) {
             unsigned long idx = page / DIRTY_MEMORY_BLOCK_SIZE;
@@ -1134,7 +1134,7 @@ bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
     }
 
     if (dirty) {
-        cpu_physical_memory_dirty_bits_cleared(start, length);
+        cpu_physical_memory_dirty_bits_cleared(addr, length);
     }
 
     return dirty;
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 22/25] system/physmem: Reduce cpu_physical_memory_clear_dirty_range() scope
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (20 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 21/25] system/physmem: Rename @start argument of physmem_test_and_clear_dirty() Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 15:51   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 23/25] system/physmem: Reduce cpu_physical_memory_sync_dirty_bitmap() scope Philippe Mathieu-Daudé
                   ` (3 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

cpu_physical_memory_clear_dirty_range() is now only called within
system/physmem.c, by qemu_ram_resize(). Reduce its scope by making
it internal to this file. Since it doesn't involve any CPU, remove
the 'cpu_' prefix. As it operates on a range, rename @start as @addr.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 9 ---------
 system/physmem.c          | 9 ++++++++-
 2 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index 3899c084076..c55e3849b0e 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -177,15 +177,6 @@ bool cpu_physical_memory_snapshot_get_dirty(DirtyBitmapSnapshot *snap,
                                             ram_addr_t start,
                                             ram_addr_t length);
 
-static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start,
-                                                         ram_addr_t length)
-{
-    cpu_physical_memory_test_and_clear_dirty(start, length, DIRTY_MEMORY_MIGRATION);
-    cpu_physical_memory_test_and_clear_dirty(start, length, DIRTY_MEMORY_VGA);
-    cpu_physical_memory_test_and_clear_dirty(start, length, DIRTY_MEMORY_CODE);
-}
-
-
 /* Called with RCU critical section */
 static inline
 uint64_t cpu_physical_memory_sync_dirty_bitmap(RAMBlock *rb,
diff --git a/system/physmem.c b/system/physmem.c
index 9e36748dc4a..40ec67572b0 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -1140,6 +1140,13 @@ bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t addr,
     return dirty;
 }
 
+static void physical_memory_clear_dirty_range(ram_addr_t addr, ram_addr_t length)
+{
+    cpu_physical_memory_test_and_clear_dirty(addr, length, DIRTY_MEMORY_MIGRATION);
+    cpu_physical_memory_test_and_clear_dirty(addr, length, DIRTY_MEMORY_VGA);
+    cpu_physical_memory_test_and_clear_dirty(addr, length, DIRTY_MEMORY_CODE);
+}
+
 DirtyBitmapSnapshot *cpu_physical_memory_snapshot_and_clear_dirty
     (MemoryRegion *mr, hwaddr offset, hwaddr length, unsigned client)
 {
@@ -2076,7 +2083,7 @@ int qemu_ram_resize(RAMBlock *block, ram_addr_t newsize, Error **errp)
         ram_block_notify_resize(block->host, oldsize, newsize);
     }
 
-    cpu_physical_memory_clear_dirty_range(block->offset, block->used_length);
+    physical_memory_clear_dirty_range(block->offset, block->used_length);
     block->used_length = newsize;
     cpu_physical_memory_set_dirty_range(block->offset, block->used_length,
                                         DIRTY_CLIENTS_ALL);
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 23/25] system/physmem: Reduce cpu_physical_memory_sync_dirty_bitmap() scope
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (21 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 22/25] system/physmem: Reduce cpu_physical_memory_clear_dirty_range() scope Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 15:53   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 24/25] system/physmem: Drop 'cpu_' prefix in Physical Memory API Philippe Mathieu-Daudé
                   ` (2 subsequent siblings)
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

cpu_physical_memory_sync_dirty_bitmap() is now only called within
system/physmem.c, by ramblock_sync_dirty_bitmap(). Reduce its scope
by making it internal to this file. Since it doesn't involve any CPU,
remove the 'cpu_' prefix.
Remove the now unneeded "qemu/rcu.h" and "system/memory.h" headers.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h | 79 ---------------------------------------
 migration/ram.c           | 78 +++++++++++++++++++++++++++++++++++++-
 2 files changed, 77 insertions(+), 80 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index c55e3849b0e..24dba1fba1c 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -21,10 +21,7 @@
 
 #include "exec/ramlist.h"
 #include "system/ramblock.h"
-#include "system/memory.h"
 #include "exec/target_page.h"
-#include "qemu/rcu.h"
-
 #include "exec/hwaddr.h"
 
 extern uint64_t total_dirty_pages;
@@ -177,80 +174,4 @@ bool cpu_physical_memory_snapshot_get_dirty(DirtyBitmapSnapshot *snap,
                                             ram_addr_t start,
                                             ram_addr_t length);
 
-/* Called with RCU critical section */
-static inline
-uint64_t cpu_physical_memory_sync_dirty_bitmap(RAMBlock *rb,
-                                               ram_addr_t start,
-                                               ram_addr_t length)
-{
-    ram_addr_t addr;
-    unsigned long word = BIT_WORD((start + rb->offset) >> TARGET_PAGE_BITS);
-    uint64_t num_dirty = 0;
-    unsigned long *dest = rb->bmap;
-
-    /* start address and length is aligned at the start of a word? */
-    if (((word * BITS_PER_LONG) << TARGET_PAGE_BITS) ==
-         (start + rb->offset) &&
-        !(length & ((BITS_PER_LONG << TARGET_PAGE_BITS) - 1))) {
-        int k;
-        int nr = BITS_TO_LONGS(length >> TARGET_PAGE_BITS);
-        unsigned long * const *src;
-        unsigned long idx = (word * BITS_PER_LONG) / DIRTY_MEMORY_BLOCK_SIZE;
-        unsigned long offset = BIT_WORD((word * BITS_PER_LONG) %
-                                        DIRTY_MEMORY_BLOCK_SIZE);
-        unsigned long page = BIT_WORD(start >> TARGET_PAGE_BITS);
-
-        src = qatomic_rcu_read(
-                &ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION])->blocks;
-
-        for (k = page; k < page + nr; k++) {
-            if (src[idx][offset]) {
-                unsigned long bits = qatomic_xchg(&src[idx][offset], 0);
-                unsigned long new_dirty;
-                new_dirty = ~dest[k];
-                dest[k] |= bits;
-                new_dirty &= bits;
-                num_dirty += ctpopl(new_dirty);
-            }
-
-            if (++offset >= BITS_TO_LONGS(DIRTY_MEMORY_BLOCK_SIZE)) {
-                offset = 0;
-                idx++;
-            }
-        }
-        if (num_dirty) {
-            cpu_physical_memory_dirty_bits_cleared(start, length);
-        }
-
-        if (rb->clear_bmap) {
-            /*
-             * Postpone the dirty bitmap clear to the point before we
-             * really send the pages, also we will split the clear
-             * dirty procedure into smaller chunks.
-             */
-            clear_bmap_set(rb, start >> TARGET_PAGE_BITS,
-                           length >> TARGET_PAGE_BITS);
-        } else {
-            /* Slow path - still do that in a huge chunk */
-            memory_region_clear_dirty_bitmap(rb->mr, start, length);
-        }
-    } else {
-        ram_addr_t offset = rb->offset;
-
-        for (addr = 0; addr < length; addr += TARGET_PAGE_SIZE) {
-            if (cpu_physical_memory_test_and_clear_dirty(
-                        start + addr + offset,
-                        TARGET_PAGE_SIZE,
-                        DIRTY_MEMORY_MIGRATION)) {
-                long k = (start + addr) >> TARGET_PAGE_BITS;
-                if (!test_and_set_bit(k, dest)) {
-                    num_dirty++;
-                }
-            }
-        }
-    }
-
-    return num_dirty;
-}
-
 #endif
diff --git a/migration/ram.c b/migration/ram.c
index 91e65be83d8..e797c0710d3 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -935,11 +935,87 @@ bool ramblock_page_is_discarded(RAMBlock *rb, ram_addr_t start)
     return false;
 }
 
+/* Called with RCU critical section */
+static inline
+uint64_t physical_memory_sync_dirty_bitmap(RAMBlock *rb,
+                                           ram_addr_t start,
+                                           ram_addr_t length)
+{
+    ram_addr_t addr;
+    unsigned long word = BIT_WORD((start + rb->offset) >> TARGET_PAGE_BITS);
+    uint64_t num_dirty = 0;
+    unsigned long *dest = rb->bmap;
+
+    /* start address and length is aligned at the start of a word? */
+    if (((word * BITS_PER_LONG) << TARGET_PAGE_BITS) ==
+         (start + rb->offset) &&
+        !(length & ((BITS_PER_LONG << TARGET_PAGE_BITS) - 1))) {
+        int k;
+        int nr = BITS_TO_LONGS(length >> TARGET_PAGE_BITS);
+        unsigned long * const *src;
+        unsigned long idx = (word * BITS_PER_LONG) / DIRTY_MEMORY_BLOCK_SIZE;
+        unsigned long offset = BIT_WORD((word * BITS_PER_LONG) %
+                                        DIRTY_MEMORY_BLOCK_SIZE);
+        unsigned long page = BIT_WORD(start >> TARGET_PAGE_BITS);
+
+        src = qatomic_rcu_read(
+                &ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION])->blocks;
+
+        for (k = page; k < page + nr; k++) {
+            if (src[idx][offset]) {
+                unsigned long bits = qatomic_xchg(&src[idx][offset], 0);
+                unsigned long new_dirty;
+                new_dirty = ~dest[k];
+                dest[k] |= bits;
+                new_dirty &= bits;
+                num_dirty += ctpopl(new_dirty);
+            }
+
+            if (++offset >= BITS_TO_LONGS(DIRTY_MEMORY_BLOCK_SIZE)) {
+                offset = 0;
+                idx++;
+            }
+        }
+        if (num_dirty) {
+            cpu_physical_memory_dirty_bits_cleared(start, length);
+        }
+
+        if (rb->clear_bmap) {
+            /*
+             * Postpone the dirty bitmap clear to the point before we
+             * really send the pages, also we will split the clear
+             * dirty procedure into smaller chunks.
+             */
+            clear_bmap_set(rb, start >> TARGET_PAGE_BITS,
+                           length >> TARGET_PAGE_BITS);
+        } else {
+            /* Slow path - still do that in a huge chunk */
+            memory_region_clear_dirty_bitmap(rb->mr, start, length);
+        }
+    } else {
+        ram_addr_t offset = rb->offset;
+
+        for (addr = 0; addr < length; addr += TARGET_PAGE_SIZE) {
+            if (cpu_physical_memory_test_and_clear_dirty(
+                        start + addr + offset,
+                        TARGET_PAGE_SIZE,
+                        DIRTY_MEMORY_MIGRATION)) {
+                long k = (start + addr) >> TARGET_PAGE_BITS;
+                if (!test_and_set_bit(k, dest)) {
+                    num_dirty++;
+                }
+            }
+        }
+    }
+
+    return num_dirty;
+}
+
 /* Called with RCU critical section */
 static void ramblock_sync_dirty_bitmap(RAMState *rs, RAMBlock *rb)
 {
     uint64_t new_dirty_pages =
-        cpu_physical_memory_sync_dirty_bitmap(rb, 0, rb->used_length);
+        physical_memory_sync_dirty_bitmap(rb, 0, rb->used_length);
 
     rs->migration_dirty_pages += new_dirty_pages;
     rs->num_dirty_pages_period += new_dirty_pages;
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 24/25] system/physmem: Drop 'cpu_' prefix in Physical Memory API
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (22 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 23/25] system/physmem: Reduce cpu_physical_memory_sync_dirty_bitmap() scope Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 15:54   ` Richard Henderson
  2025-10-01  8:21 ` [PATCH 25/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
  2025-10-01  8:25 ` [PATCH 00/25] " Philippe Mathieu-Daudé
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

The functions related to the Physical Memory API declared
in "system/ram_addr.h" do not operate on vCPU. Remove the
'cpu_' prefix.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/system/ram_addr.h   | 24 +++++++++----------
 accel/kvm/kvm-all.c         |  2 +-
 accel/tcg/cputlb.c          | 12 +++++-----
 hw/vfio/container-legacy.c  |  8 +++----
 hw/vfio/container.c         |  4 ++--
 migration/ram.c             |  4 ++--
 system/memory.c             |  8 +++----
 system/physmem.c            | 48 ++++++++++++++++++-------------------
 target/arm/tcg/mte_helper.c |  2 +-
 system/memory_ldst.c.inc    |  2 +-
 tests/tsan/ignore.tsan      |  4 ++--
 11 files changed, 59 insertions(+), 59 deletions(-)

diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index 24dba1fba1c..015f943603b 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -136,41 +136,41 @@ static inline void qemu_ram_block_writeback(RAMBlock *block)
 #define DIRTY_CLIENTS_ALL     ((1 << DIRTY_MEMORY_NUM) - 1)
 #define DIRTY_CLIENTS_NOCODE  (DIRTY_CLIENTS_ALL & ~(1 << DIRTY_MEMORY_CODE))
 
-bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, unsigned client);
+bool physical_memory_get_dirty_flag(ram_addr_t addr, unsigned client);
 
-bool cpu_physical_memory_is_clean(ram_addr_t addr);
+bool physical_memory_is_clean(ram_addr_t addr);
 
-uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t addr,
+uint8_t physical_memory_range_includes_clean(ram_addr_t addr,
                                                  ram_addr_t length,
                                                  uint8_t mask);
 
-void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, unsigned client);
+void physical_memory_set_dirty_flag(ram_addr_t addr, unsigned client);
 
-void cpu_physical_memory_set_dirty_range(ram_addr_t addr, ram_addr_t length,
+void physical_memory_set_dirty_range(ram_addr_t addr, ram_addr_t length,
                                          uint8_t mask);
 
 #if !defined(_WIN32)
 /*
- * Contrary to cpu_physical_memory_sync_dirty_bitmap() this function returns
+ * Contrary to physical_memory_sync_dirty_bitmap() this function returns
  * the number of dirty pages in @bitmap passed as argument. On the other hand,
- * cpu_physical_memory_sync_dirty_bitmap() returns newly dirtied pages that
+ * physical_memory_sync_dirty_bitmap() returns newly dirtied pages that
  * weren't set in the global migration bitmap.
  */
-uint64_t cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
+uint64_t physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
                                                 ram_addr_t start,
                                                 ram_addr_t pages);
 #endif /* not _WIN32 */
 
-void cpu_physical_memory_dirty_bits_cleared(ram_addr_t addr, ram_addr_t length);
+void physical_memory_dirty_bits_cleared(ram_addr_t addr, ram_addr_t length);
 
-bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t addr,
+bool physical_memory_test_and_clear_dirty(ram_addr_t addr,
                                               ram_addr_t length,
                                               unsigned client);
 
-DirtyBitmapSnapshot *cpu_physical_memory_snapshot_and_clear_dirty
+DirtyBitmapSnapshot *physical_memory_snapshot_and_clear_dirty
     (MemoryRegion *mr, hwaddr offset, hwaddr length, unsigned client);
 
-bool cpu_physical_memory_snapshot_get_dirty(DirtyBitmapSnapshot *snap,
+bool physical_memory_snapshot_get_dirty(DirtyBitmapSnapshot *snap,
                                             ram_addr_t start,
                                             ram_addr_t length);
 
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 08b2b5a371c..a7ece7db964 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -758,7 +758,7 @@ static void kvm_slot_sync_dirty_pages(KVMSlot *slot)
     ram_addr_t start = slot->ram_start_offset;
     ram_addr_t pages = slot->memory_size / qemu_real_host_page_size();
 
-    cpu_physical_memory_set_dirty_lebitmap(slot->dirty_bmap, start, pages);
+    physical_memory_set_dirty_lebitmap(slot->dirty_bmap, start, pages);
 }
 
 static void kvm_slot_reset_dirty_pages(KVMSlot *slot)
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
index 6807328df82..1f5dd023a0a 100644
--- a/accel/tcg/cputlb.c
+++ b/accel/tcg/cputlb.c
@@ -858,7 +858,7 @@ void tlb_flush_page_bits_by_mmuidx_all_cpus_synced(CPUState *src_cpu,
    can be detected */
 void tlb_protect_code(ram_addr_t ram_addr)
 {
-    cpu_physical_memory_test_and_clear_dirty(ram_addr & TARGET_PAGE_MASK,
+    physical_memory_test_and_clear_dirty(ram_addr & TARGET_PAGE_MASK,
                                              TARGET_PAGE_SIZE,
                                              DIRTY_MEMORY_CODE);
 }
@@ -867,7 +867,7 @@ void tlb_protect_code(ram_addr_t ram_addr)
    tested for self modifying code */
 void tlb_unprotect_code(ram_addr_t ram_addr)
 {
-    cpu_physical_memory_set_dirty_flag(ram_addr, DIRTY_MEMORY_CODE);
+    physical_memory_set_dirty_flag(ram_addr, DIRTY_MEMORY_CODE);
 }
 
 
@@ -1085,7 +1085,7 @@ void tlb_set_page_full(CPUState *cpu, int mmu_idx,
         if (prot & PAGE_WRITE) {
             if (section->readonly) {
                 write_flags |= TLB_DISCARD_WRITE;
-            } else if (cpu_physical_memory_is_clean(iotlb)) {
+            } else if (physical_memory_is_clean(iotlb)) {
                 write_flags |= TLB_NOTDIRTY;
             }
         }
@@ -1341,7 +1341,7 @@ static void notdirty_write(CPUState *cpu, vaddr mem_vaddr, unsigned size,
 
     trace_memory_notdirty_write_access(mem_vaddr, ram_addr, size);
 
-    if (!cpu_physical_memory_get_dirty_flag(ram_addr, DIRTY_MEMORY_CODE)) {
+    if (!physical_memory_get_dirty_flag(ram_addr, DIRTY_MEMORY_CODE)) {
         tb_invalidate_phys_range_fast(cpu, ram_addr, size, retaddr);
     }
 
@@ -1349,10 +1349,10 @@ static void notdirty_write(CPUState *cpu, vaddr mem_vaddr, unsigned size,
      * Set both VGA and migration bits for simplicity and to remove
      * the notdirty callback faster.
      */
-    cpu_physical_memory_set_dirty_range(ram_addr, size, DIRTY_CLIENTS_NOCODE);
+    physical_memory_set_dirty_range(ram_addr, size, DIRTY_CLIENTS_NOCODE);
 
     /* We remove the notdirty callback only if the code has been flushed. */
-    if (!cpu_physical_memory_is_clean(ram_addr)) {
+    if (!physical_memory_is_clean(ram_addr)) {
         trace_memory_notdirty_set_dirty(mem_vaddr);
         tlb_set_dirty(cpu, mem_vaddr);
     }
diff --git a/hw/vfio/container-legacy.c b/hw/vfio/container-legacy.c
index 3a710d8265c..eb9911eaeaf 100644
--- a/hw/vfio/container-legacy.c
+++ b/hw/vfio/container-legacy.c
@@ -92,7 +92,7 @@ static int vfio_dma_unmap_bitmap(const VFIOLegacyContainer *container,
     bitmap = (struct vfio_bitmap *)&unmap->data;
 
     /*
-     * cpu_physical_memory_set_dirty_lebitmap() supports pages in bitmap of
+     * physical_memory_set_dirty_lebitmap() supports pages in bitmap of
      * qemu_real_host_page_size to mark those dirty. Hence set bitmap_pgsize
      * to qemu_real_host_page_size.
      */
@@ -108,7 +108,7 @@ static int vfio_dma_unmap_bitmap(const VFIOLegacyContainer *container,
 
     ret = ioctl(container->fd, VFIO_IOMMU_UNMAP_DMA, unmap);
     if (!ret) {
-        cpu_physical_memory_set_dirty_lebitmap(vbmap.bitmap,
+        physical_memory_set_dirty_lebitmap(vbmap.bitmap,
                 iotlb->translated_addr, vbmap.pages);
     } else {
         error_report("VFIO_UNMAP_DMA with DIRTY_BITMAP : %m");
@@ -284,7 +284,7 @@ static int vfio_legacy_query_dirty_bitmap(const VFIOContainer *bcontainer,
     range->size = size;
 
     /*
-     * cpu_physical_memory_set_dirty_lebitmap() supports pages in bitmap of
+     * physical_memory_set_dirty_lebitmap() supports pages in bitmap of
      * qemu_real_host_page_size to mark those dirty. Hence set bitmap's pgsize
      * to qemu_real_host_page_size.
      */
@@ -503,7 +503,7 @@ static void vfio_get_iommu_info_migration(VFIOLegacyContainer *container,
                             header);
 
     /*
-     * cpu_physical_memory_set_dirty_lebitmap() supports pages in bitmap of
+     * physical_memory_set_dirty_lebitmap() supports pages in bitmap of
      * qemu_real_host_page_size to mark those dirty.
      */
     if (cap_mig->pgsize_bitmap & qemu_real_host_page_size()) {
diff --git a/hw/vfio/container.c b/hw/vfio/container.c
index 41de3439246..3fb19a1c8ad 100644
--- a/hw/vfio/container.c
+++ b/hw/vfio/container.c
@@ -255,7 +255,7 @@ int vfio_container_query_dirty_bitmap(const VFIOContainer *bcontainer,
     int ret;
 
     if (!bcontainer->dirty_pages_supported && !all_device_dirty_tracking) {
-        cpu_physical_memory_set_dirty_range(translated_addr, size,
+        physical_memory_set_dirty_range(translated_addr, size,
                                             tcg_enabled() ? DIRTY_CLIENTS_ALL :
                                             DIRTY_CLIENTS_NOCODE);
         return 0;
@@ -280,7 +280,7 @@ int vfio_container_query_dirty_bitmap(const VFIOContainer *bcontainer,
         goto out;
     }
 
-    dirty_pages = cpu_physical_memory_set_dirty_lebitmap(vbmap.bitmap,
+    dirty_pages = physical_memory_set_dirty_lebitmap(vbmap.bitmap,
                                                          translated_addr,
                                                          vbmap.pages);
 
diff --git a/migration/ram.c b/migration/ram.c
index e797c0710d3..db745f2a028 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -977,7 +977,7 @@ uint64_t physical_memory_sync_dirty_bitmap(RAMBlock *rb,
             }
         }
         if (num_dirty) {
-            cpu_physical_memory_dirty_bits_cleared(start, length);
+            physical_memory_dirty_bits_cleared(start, length);
         }
 
         if (rb->clear_bmap) {
@@ -996,7 +996,7 @@ uint64_t physical_memory_sync_dirty_bitmap(RAMBlock *rb,
         ram_addr_t offset = rb->offset;
 
         for (addr = 0; addr < length; addr += TARGET_PAGE_SIZE) {
-            if (cpu_physical_memory_test_and_clear_dirty(
+            if (physical_memory_test_and_clear_dirty(
                         start + addr + offset,
                         TARGET_PAGE_SIZE,
                         DIRTY_MEMORY_MIGRATION)) {
diff --git a/system/memory.c b/system/memory.c
index cf8cad69611..dd045da60c0 100644
--- a/system/memory.c
+++ b/system/memory.c
@@ -2275,7 +2275,7 @@ void memory_region_set_dirty(MemoryRegion *mr, hwaddr addr,
                              hwaddr size)
 {
     assert(mr->ram_block);
-    cpu_physical_memory_set_dirty_range(memory_region_get_ram_addr(mr) + addr,
+    physical_memory_set_dirty_range(memory_region_get_ram_addr(mr) + addr,
                                         size,
                                         memory_region_get_dirty_log_mask(mr));
 }
@@ -2379,7 +2379,7 @@ DirtyBitmapSnapshot *memory_region_snapshot_and_clear_dirty(MemoryRegion *mr,
     DirtyBitmapSnapshot *snapshot;
     assert(mr->ram_block);
     memory_region_sync_dirty_bitmap(mr, false);
-    snapshot = cpu_physical_memory_snapshot_and_clear_dirty(mr, addr, size, client);
+    snapshot = physical_memory_snapshot_and_clear_dirty(mr, addr, size, client);
     memory_global_after_dirty_log_sync();
     return snapshot;
 }
@@ -2388,7 +2388,7 @@ bool memory_region_snapshot_get_dirty(MemoryRegion *mr, DirtyBitmapSnapshot *sna
                                       hwaddr addr, hwaddr size)
 {
     assert(mr->ram_block);
-    return cpu_physical_memory_snapshot_get_dirty(snap,
+    return physical_memory_snapshot_get_dirty(snap,
                 memory_region_get_ram_addr(mr) + addr, size);
 }
 
@@ -2426,7 +2426,7 @@ void memory_region_reset_dirty(MemoryRegion *mr, hwaddr addr,
                                hwaddr size, unsigned client)
 {
     assert(mr->ram_block);
-    cpu_physical_memory_test_and_clear_dirty(
+    physical_memory_test_and_clear_dirty(
         memory_region_get_ram_addr(mr) + addr, size, client);
 }
 
diff --git a/system/physmem.c b/system/physmem.c
index 40ec67572b0..784c2810964 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -902,7 +902,7 @@ void tlb_reset_dirty_range_all(ram_addr_t addr, ram_addr_t length)
     }
 }
 
-void cpu_physical_memory_dirty_bits_cleared(ram_addr_t addr, ram_addr_t length)
+void physical_memory_dirty_bits_cleared(ram_addr_t addr, ram_addr_t length)
 {
     if (tcg_enabled()) {
         tlb_reset_dirty_range_all(addr, length);
@@ -948,17 +948,17 @@ static bool physical_memory_get_dirty(ram_addr_t addr, ram_addr_t length,
     return dirty;
 }
 
-bool cpu_physical_memory_get_dirty_flag(ram_addr_t addr, unsigned client)
+bool physical_memory_get_dirty_flag(ram_addr_t addr, unsigned client)
 {
     return physical_memory_get_dirty(addr, 1, client);
 }
 
-bool cpu_physical_memory_is_clean(ram_addr_t addr)
+bool physical_memory_is_clean(ram_addr_t addr)
 {
-    bool vga = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_VGA);
-    bool code = cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_CODE);
+    bool vga = physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_VGA);
+    bool code = physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_CODE);
     bool migration =
-        cpu_physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_MIGRATION);
+        physical_memory_get_dirty_flag(addr, DIRTY_MEMORY_MIGRATION);
     return !(vga && code && migration);
 }
 
@@ -1001,7 +1001,7 @@ static bool physical_memory_all_dirty(ram_addr_t addr, ram_addr_t length,
     return dirty;
 }
 
-uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t addr,
+uint8_t physical_memory_range_includes_clean(ram_addr_t addr,
                                                  ram_addr_t length,
                                                  uint8_t mask)
 {
@@ -1022,7 +1022,7 @@ uint8_t cpu_physical_memory_range_includes_clean(ram_addr_t addr,
     return ret;
 }
 
-void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, unsigned client)
+void physical_memory_set_dirty_flag(ram_addr_t addr, unsigned client)
 {
     unsigned long page, idx, offset;
     DirtyMemoryBlocks *blocks;
@@ -1040,7 +1040,7 @@ void cpu_physical_memory_set_dirty_flag(ram_addr_t addr, unsigned client)
     set_bit_atomic(offset, blocks->blocks[idx]);
 }
 
-void cpu_physical_memory_set_dirty_range(ram_addr_t addr, ram_addr_t length,
+void physical_memory_set_dirty_range(ram_addr_t addr, ram_addr_t length,
                                          uint8_t mask)
 {
     DirtyMemoryBlocks *blocks[DIRTY_MEMORY_NUM];
@@ -1092,7 +1092,7 @@ void cpu_physical_memory_set_dirty_range(ram_addr_t addr, ram_addr_t length,
 }
 
 /* Note: start and end must be within the same ram block.  */
-bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t addr,
+bool physical_memory_test_and_clear_dirty(ram_addr_t addr,
                                               ram_addr_t length,
                                               unsigned client)
 {
@@ -1134,7 +1134,7 @@ bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t addr,
     }
 
     if (dirty) {
-        cpu_physical_memory_dirty_bits_cleared(addr, length);
+        physical_memory_dirty_bits_cleared(addr, length);
     }
 
     return dirty;
@@ -1142,12 +1142,12 @@ bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t addr,
 
 static void physical_memory_clear_dirty_range(ram_addr_t addr, ram_addr_t length)
 {
-    cpu_physical_memory_test_and_clear_dirty(addr, length, DIRTY_MEMORY_MIGRATION);
-    cpu_physical_memory_test_and_clear_dirty(addr, length, DIRTY_MEMORY_VGA);
-    cpu_physical_memory_test_and_clear_dirty(addr, length, DIRTY_MEMORY_CODE);
+    physical_memory_test_and_clear_dirty(addr, length, DIRTY_MEMORY_MIGRATION);
+    physical_memory_test_and_clear_dirty(addr, length, DIRTY_MEMORY_VGA);
+    physical_memory_test_and_clear_dirty(addr, length, DIRTY_MEMORY_CODE);
 }
 
-DirtyBitmapSnapshot *cpu_physical_memory_snapshot_and_clear_dirty
+DirtyBitmapSnapshot *physical_memory_snapshot_and_clear_dirty
     (MemoryRegion *mr, hwaddr offset, hwaddr length, unsigned client)
 {
     DirtyMemoryBlocks *blocks;
@@ -1194,14 +1194,14 @@ DirtyBitmapSnapshot *cpu_physical_memory_snapshot_and_clear_dirty
         }
     }
 
-    cpu_physical_memory_dirty_bits_cleared(start, length);
+    physical_memory_dirty_bits_cleared(start, length);
 
     memory_region_clear_dirty_bitmap(mr, offset, length);
 
     return snap;
 }
 
-bool cpu_physical_memory_snapshot_get_dirty(DirtyBitmapSnapshot *snap,
+bool physical_memory_snapshot_get_dirty(DirtyBitmapSnapshot *snap,
                                             ram_addr_t start,
                                             ram_addr_t length)
 {
@@ -1223,7 +1223,7 @@ bool cpu_physical_memory_snapshot_get_dirty(DirtyBitmapSnapshot *snap,
 }
 
 #if !defined(_WIN32)
-uint64_t cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
+uint64_t physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
                                                 ram_addr_t start,
                                                 ram_addr_t pages)
 {
@@ -1316,7 +1316,7 @@ uint64_t cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
                     page_number = (i * HOST_LONG_BITS + j) * hpratio;
                     addr = page_number * TARGET_PAGE_SIZE;
                     ram_addr = start + addr;
-                    cpu_physical_memory_set_dirty_range(ram_addr,
+                    physical_memory_set_dirty_range(ram_addr,
                                        TARGET_PAGE_SIZE * hpratio, clients);
                 } while (c != 0);
             }
@@ -2085,7 +2085,7 @@ int qemu_ram_resize(RAMBlock *block, ram_addr_t newsize, Error **errp)
 
     physical_memory_clear_dirty_range(block->offset, block->used_length);
     block->used_length = newsize;
-    cpu_physical_memory_set_dirty_range(block->offset, block->used_length,
+    physical_memory_set_dirty_range(block->offset, block->used_length,
                                         DIRTY_CLIENTS_ALL);
     memory_region_set_size(block->mr, unaligned_size);
     if (block->resized) {
@@ -2290,7 +2290,7 @@ static void ram_block_add(RAMBlock *new_block, Error **errp)
     ram_list.version++;
     qemu_mutex_unlock_ramlist();
 
-    cpu_physical_memory_set_dirty_range(new_block->offset,
+    physical_memory_set_dirty_range(new_block->offset,
                                         new_block->used_length,
                                         DIRTY_CLIENTS_ALL);
 
@@ -3139,19 +3139,19 @@ static void invalidate_and_set_dirty(MemoryRegion *mr, hwaddr addr,
     addr += ramaddr;
 
     /* No early return if dirty_log_mask is or becomes 0, because
-     * cpu_physical_memory_set_dirty_range will still call
+     * physical_memory_set_dirty_range will still call
      * xen_modified_memory.
      */
     if (dirty_log_mask) {
         dirty_log_mask =
-            cpu_physical_memory_range_includes_clean(addr, length, dirty_log_mask);
+            physical_memory_range_includes_clean(addr, length, dirty_log_mask);
     }
     if (dirty_log_mask & (1 << DIRTY_MEMORY_CODE)) {
         assert(tcg_enabled());
         tb_invalidate_phys_range(NULL, addr, addr + length - 1);
         dirty_log_mask &= ~(1 << DIRTY_MEMORY_CODE);
     }
-    cpu_physical_memory_set_dirty_range(addr, length, dirty_log_mask);
+    physical_memory_set_dirty_range(addr, length, dirty_log_mask);
 }
 
 void memory_region_flush_rom_device(MemoryRegion *mr, hwaddr addr, hwaddr size)
diff --git a/target/arm/tcg/mte_helper.c b/target/arm/tcg/mte_helper.c
index 7d80244788e..077ff4b2b2c 100644
--- a/target/arm/tcg/mte_helper.c
+++ b/target/arm/tcg/mte_helper.c
@@ -189,7 +189,7 @@ uint8_t *allocation_tag_mem_probe(CPUARMState *env, int ptr_mmu_idx,
      */
     if (tag_access == MMU_DATA_STORE) {
         ram_addr_t tag_ra = memory_region_get_ram_addr(mr) + xlat;
-        cpu_physical_memory_set_dirty_flag(tag_ra, DIRTY_MEMORY_MIGRATION);
+        physical_memory_set_dirty_flag(tag_ra, DIRTY_MEMORY_MIGRATION);
     }
 
     return memory_region_get_ram_ptr(mr) + xlat;
diff --git a/system/memory_ldst.c.inc b/system/memory_ldst.c.inc
index 7f32d3d9ff3..333da209d1a 100644
--- a/system/memory_ldst.c.inc
+++ b/system/memory_ldst.c.inc
@@ -287,7 +287,7 @@ void glue(address_space_stl_notdirty, SUFFIX)(ARG1_DECL,
 
         dirty_log_mask = memory_region_get_dirty_log_mask(mr);
         dirty_log_mask &= ~(1 << DIRTY_MEMORY_CODE);
-        cpu_physical_memory_set_dirty_range(memory_region_get_ram_addr(mr) + addr,
+        physical_memory_set_dirty_range(memory_region_get_ram_addr(mr) + addr,
                                             4, dirty_log_mask);
         r = MEMTX_OK;
     }
diff --git a/tests/tsan/ignore.tsan b/tests/tsan/ignore.tsan
index 423e482d2f9..8fa00a2c49b 100644
--- a/tests/tsan/ignore.tsan
+++ b/tests/tsan/ignore.tsan
@@ -4,7 +4,7 @@
 # The eventual goal would be to fix these warnings.
 
 # TSan is not happy about setting/getting of dirty bits,
-# for example, cpu_physical_memory_set_dirty_range,
-# and cpu_physical_memory_get_dirty.
+# for example, physical_memory_set_dirty_range,
+# and physical_memory_get_dirty.
 src:bitops.c
 src:bitmap.c
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* [PATCH 25/25] system/physmem: Extract API out of 'system/ram_addr.h' header
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (23 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 24/25] system/physmem: Drop 'cpu_' prefix in Physical Memory API Philippe Mathieu-Daudé
@ 2025-10-01  8:21 ` Philippe Mathieu-Daudé
  2025-10-01 15:55   ` Richard Henderson
  2025-10-01  8:25 ` [PATCH 00/25] " Philippe Mathieu-Daudé
  25 siblings, 1 reply; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Philippe Mathieu-Daudé,
	Halil Pasic, Eric Farman, Thomas Huth, Matthew Rosato,
	Jason Herne, Cédric Le Goater, kvm, Christian Borntraeger,
	Ilya Leoshkevich, Peter Maydell, qemu-ppc, Harsh Prateek Bora,
	Fabiano Rosas, Richard Henderson, Alex Williamson, Paolo Bonzini,
	qemu-s390x, Peter Xu

Very few files use the Physical Memory API. Declare its
methods in their own header: "system/physmem.h".

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 MAINTAINERS                 |  1 +
 include/system/physmem.h    | 56 +++++++++++++++++++++++++++++++++++++
 include/system/ram_addr.h   | 42 ----------------------------
 accel/kvm/kvm-all.c         |  2 +-
 accel/tcg/cputlb.c          |  1 +
 hw/vfio/container-legacy.c  |  2 +-
 hw/vfio/container.c         |  1 +
 hw/vfio/listener.c          |  1 -
 migration/ram.c             |  1 +
 system/memory.c             |  1 +
 system/physmem.c            |  1 +
 target/arm/tcg/mte_helper.c |  2 +-
 12 files changed, 65 insertions(+), 46 deletions(-)
 create mode 100644 include/system/physmem.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 7d134a85e66..866b43434c7 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3206,6 +3206,7 @@ S: Supported
 F: include/system/ioport.h
 F: include/exec/memop.h
 F: include/system/memory.h
+F: include/system/physmem.h
 F: include/system/ram_addr.h
 F: include/system/ramblock.h
 F: include/system/memory_mapping.h
diff --git a/include/system/physmem.h b/include/system/physmem.h
new file mode 100644
index 00000000000..7ae266729d2
--- /dev/null
+++ b/include/system/physmem.h
@@ -0,0 +1,56 @@
+/*
+ * QEMU physical memory interfaces (target independent).
+ *
+ *  Copyright (c) 2003 Fabrice Bellard
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+#ifndef QEMU_SYSTEM_PHYSMEM_H
+#define QEMU_SYSTEM_PHYSMEM_H
+
+#include "exec/hwaddr.h"
+#include "exec/ramlist.h"
+
+#define DIRTY_CLIENTS_ALL     ((1 << DIRTY_MEMORY_NUM) - 1)
+#define DIRTY_CLIENTS_NOCODE  (DIRTY_CLIENTS_ALL & ~(1 << DIRTY_MEMORY_CODE))
+
+bool physical_memory_get_dirty_flag(ram_addr_t addr, unsigned client);
+
+bool physical_memory_is_clean(ram_addr_t addr);
+
+uint8_t physical_memory_range_includes_clean(ram_addr_t addr,
+                                             ram_addr_t length,
+                                             uint8_t mask);
+
+void physical_memory_set_dirty_flag(ram_addr_t addr, unsigned client);
+
+void physical_memory_set_dirty_range(ram_addr_t addr, ram_addr_t length,
+                                     uint8_t mask);
+
+#if !defined(_WIN32)
+/*
+ * Contrary to physical_memory_sync_dirty_bitmap() this function returns
+ * the number of dirty pages in @bitmap passed as argument. On the other hand,
+ * physical_memory_sync_dirty_bitmap() returns newly dirtied pages that
+ * weren't set in the global migration bitmap.
+ */
+uint64_t physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
+                                            ram_addr_t start,
+                                            ram_addr_t pages);
+#endif /* not _WIN32 */
+
+void physical_memory_dirty_bits_cleared(ram_addr_t addr, ram_addr_t length);
+
+bool physical_memory_test_and_clear_dirty(ram_addr_t addr,
+                                          ram_addr_t length,
+                                          unsigned client);
+
+DirtyBitmapSnapshot *
+physical_memory_snapshot_and_clear_dirty(MemoryRegion *mr, hwaddr offset,
+                                         hwaddr length, unsigned client);
+
+bool physical_memory_snapshot_get_dirty(DirtyBitmapSnapshot *snap,
+                                        ram_addr_t start,
+                                        ram_addr_t length);
+
+#endif
diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
index 015f943603b..683485980ce 100644
--- a/include/system/ram_addr.h
+++ b/include/system/ram_addr.h
@@ -19,7 +19,6 @@
 #ifndef SYSTEM_RAM_ADDR_H
 #define SYSTEM_RAM_ADDR_H
 
-#include "exec/ramlist.h"
 #include "system/ramblock.h"
 #include "exec/target_page.h"
 #include "exec/hwaddr.h"
@@ -133,45 +132,4 @@ static inline void qemu_ram_block_writeback(RAMBlock *block)
     qemu_ram_msync(block, 0, block->used_length);
 }
 
-#define DIRTY_CLIENTS_ALL     ((1 << DIRTY_MEMORY_NUM) - 1)
-#define DIRTY_CLIENTS_NOCODE  (DIRTY_CLIENTS_ALL & ~(1 << DIRTY_MEMORY_CODE))
-
-bool physical_memory_get_dirty_flag(ram_addr_t addr, unsigned client);
-
-bool physical_memory_is_clean(ram_addr_t addr);
-
-uint8_t physical_memory_range_includes_clean(ram_addr_t addr,
-                                                 ram_addr_t length,
-                                                 uint8_t mask);
-
-void physical_memory_set_dirty_flag(ram_addr_t addr, unsigned client);
-
-void physical_memory_set_dirty_range(ram_addr_t addr, ram_addr_t length,
-                                         uint8_t mask);
-
-#if !defined(_WIN32)
-/*
- * Contrary to physical_memory_sync_dirty_bitmap() this function returns
- * the number of dirty pages in @bitmap passed as argument. On the other hand,
- * physical_memory_sync_dirty_bitmap() returns newly dirtied pages that
- * weren't set in the global migration bitmap.
- */
-uint64_t physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
-                                                ram_addr_t start,
-                                                ram_addr_t pages);
-#endif /* not _WIN32 */
-
-void physical_memory_dirty_bits_cleared(ram_addr_t addr, ram_addr_t length);
-
-bool physical_memory_test_and_clear_dirty(ram_addr_t addr,
-                                              ram_addr_t length,
-                                              unsigned client);
-
-DirtyBitmapSnapshot *physical_memory_snapshot_and_clear_dirty
-    (MemoryRegion *mr, hwaddr offset, hwaddr length, unsigned client);
-
-bool physical_memory_snapshot_get_dirty(DirtyBitmapSnapshot *snap,
-                                            ram_addr_t start,
-                                            ram_addr_t length);
-
 #endif
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index a7ece7db964..58802f7c3cc 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -32,13 +32,13 @@
 #include "system/runstate.h"
 #include "system/cpus.h"
 #include "system/accel-blocker.h"
+#include "system/physmem.h"
 #include "system/ramblock.h"
 #include "accel/accel-ops.h"
 #include "qemu/bswap.h"
 #include "exec/tswap.h"
 #include "exec/target_page.h"
 #include "system/memory.h"
-#include "system/ram_addr.h"
 #include "qemu/event_notifier.h"
 #include "qemu/main-loop.h"
 #include "trace.h"
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
index 1f5dd023a0a..8e1ec7ab1af 100644
--- a/accel/tcg/cputlb.c
+++ b/accel/tcg/cputlb.c
@@ -25,6 +25,7 @@
 #include "accel/tcg/probe.h"
 #include "exec/page-protection.h"
 #include "system/memory.h"
+#include "system/physmem.h"
 #include "accel/tcg/cpu-ldst-common.h"
 #include "accel/tcg/cpu-mmu-index.h"
 #include "exec/cputlb.h"
diff --git a/hw/vfio/container-legacy.c b/hw/vfio/container-legacy.c
index eb9911eaeaf..755a407f3e7 100644
--- a/hw/vfio/container-legacy.c
+++ b/hw/vfio/container-legacy.c
@@ -25,7 +25,7 @@
 #include "hw/vfio/vfio-device.h"
 #include "system/address-spaces.h"
 #include "system/memory.h"
-#include "system/ram_addr.h"
+#include "system/physmem.h"
 #include "qemu/error-report.h"
 #include "qemu/range.h"
 #include "system/reset.h"
diff --git a/hw/vfio/container.c b/hw/vfio/container.c
index 3fb19a1c8ad..9ddec300e35 100644
--- a/hw/vfio/container.c
+++ b/hw/vfio/container.c
@@ -20,6 +20,7 @@
 #include "qemu/error-report.h"
 #include "hw/vfio/vfio-container.h"
 #include "hw/vfio/vfio-device.h" /* vfio_device_reset_handler */
+#include "system/physmem.h"
 #include "system/reset.h"
 #include "vfio-helpers.h"
 
diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c
index b5cefc9395c..c6bb58f5209 100644
--- a/hw/vfio/listener.c
+++ b/hw/vfio/listener.c
@@ -30,7 +30,6 @@
 #include "hw/vfio/pci.h"
 #include "system/address-spaces.h"
 #include "system/memory.h"
-#include "system/ram_addr.h"
 #include "hw/hw.h"
 #include "qemu/error-report.h"
 #include "qemu/main-loop.h"
diff --git a/migration/ram.c b/migration/ram.c
index db745f2a028..21b8c78fa91 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -53,6 +53,7 @@
 #include "qemu/rcu_queue.h"
 #include "migration/colo.h"
 #include "system/cpu-throttle.h"
+#include "system/physmem.h"
 #include "system/ramblock.h"
 #include "savevm.h"
 #include "qemu/iov.h"
diff --git a/system/memory.c b/system/memory.c
index dd045da60c0..80656c69568 100644
--- a/system/memory.c
+++ b/system/memory.c
@@ -25,6 +25,7 @@
 #include "qemu/target-info.h"
 #include "qom/object.h"
 #include "trace.h"
+#include "system/physmem.h"
 #include "system/ram_addr.h"
 #include "system/kvm.h"
 #include "system/runstate.h"
diff --git a/system/physmem.c b/system/physmem.c
index 784c2810964..b245cd14d43 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -43,6 +43,7 @@
 #include "system/kvm.h"
 #include "system/tcg.h"
 #include "system/qtest.h"
+#include "system/physmem.h"
 #include "system/ramblock.h"
 #include "qemu/timer.h"
 #include "qemu/config-file.h"
diff --git a/target/arm/tcg/mte_helper.c b/target/arm/tcg/mte_helper.c
index 077ff4b2b2c..b96c953f809 100644
--- a/target/arm/tcg/mte_helper.c
+++ b/target/arm/tcg/mte_helper.c
@@ -27,7 +27,7 @@
 #include "user/cpu_loop.h"
 #include "user/page-protection.h"
 #else
-#include "system/ram_addr.h"
+#include "system/physmem.h"
 #endif
 #include "accel/tcg/cpu-ldst.h"
 #include "accel/tcg/probe.h"
-- 
2.51.0



^ permalink raw reply related	[flat|nested] 50+ messages in thread

* Re: [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header
  2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
                   ` (24 preceding siblings ...)
  2025-10-01  8:21 ` [PATCH 25/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
@ 2025-10-01  8:25 ` Philippe Mathieu-Daudé
  25 siblings, 0 replies; 50+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-01  8:25 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Halil Pasic, Eric Farman,
	Thomas Huth, Matthew Rosato, Jason Herne, Cédric Le Goater,
	kvm, Christian Borntraeger, Ilya Leoshkevich, Peter Maydell,
	qemu-ppc, Harsh Prateek Bora, Fabiano Rosas, Richard Henderson,
	Alex Williamson, Paolo Bonzini, qemu-s390x, Peter Xu

On 1/10/25 10:21, Philippe Mathieu-Daudé wrote:
> Following a previous comment from Richard in [*],
> reduce "system/ram_addr.h" size by un-inlining a
> lot of huge functions that aren't really justified,
> and extract the API to the hew "system/physmem.h"
> header, after renaming the functions (removing the
> confusing 'cpu_' prefix).

Based-on: <20250930082126.28618-1-philmd@linaro.org>
"system/physmem: Remove cpu_physical_memory _is_io() and _rw()"

> Philippe Mathieu-Daudé (25):
>    system/ram_addr: Remove unnecessary 'exec/cpu-common.h' header
>    accel/kvm: Include missing 'exec/target_page.h' header
>    hw/s390x/s390-stattrib: Include missing 'exec/target_page.h' header
>    hw/vfio/listener: Include missing 'exec/target_page.h' header
>    target/arm/tcg/mte: Include missing 'exec/target_page.h' header
>    hw: Remove unnecessary 'system/ram_addr.h' header
>    accel/tcg: Document rcu_read_lock is held when calling
>      tlb_reset_dirty()
>    accel/tcg: Rename @start argument of tlb_reset_dirty*()
>    system/physmem: Rename @start argument of physical_memory_get_dirty()
>    system/physmem: Un-inline cpu_physical_memory_get_dirty_flag()
>    system/physmem: Un-inline cpu_physical_memory_is_clean()
>    system/physmem: Rename @start argument of physical_memory_all_dirty()
>    system/physmem: Rename @start argument of physical_memory_range*()
>    system/physmem: Un-inline cpu_physical_memory_range_includes_clean()
>    system/physmem: Un-inline cpu_physical_memory_set_dirty_flag()
>    system/physmem: Rename @start argument of physical_memory_*range()
>    system/physmem: Un-inline cpu_physical_memory_set_dirty_range()
>    system/physmem: Un-inline cpu_physical_memory_set_dirty_lebitmap()
>    system/physmem: Rename @start argument of physmem_dirty_bits_cleared()
>    system/physmem: Un-inline cpu_physical_memory_dirty_bits_cleared()
>    system/physmem: Rename @start argument of
>      physmem_test_and_clear_dirty()
>    system/physmem: Reduce cpu_physical_memory_clear_dirty_range() scope
>    system/physmem: Reduce cpu_physical_memory_sync_dirty_bitmap() scope
>    system/physmem: Drop 'cpu_' prefix in Physical Memory API
>    system/physmem: Extract API out of 'system/ram_addr.h' header

>   include/system/physmem.h          |  56 ++++
>   include/system/ram_addr.h         | 413 ------------------------------
>   system/physmem.c                  | 342 +++++++++++++++++++++++--
(highlight on diff-stat)


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 01/25] system/ram_addr: Remove unnecessary 'exec/cpu-common.h' header
  2025-10-01  8:21 ` [PATCH 01/25] system/ram_addr: Remove unnecessary 'exec/cpu-common.h' header Philippe Mathieu-Daudé
@ 2025-10-01  8:41   ` Thomas Huth
  2025-10-01 14:30   ` Richard Henderson
  1 sibling, 0 replies; 50+ messages in thread
From: Thomas Huth @ 2025-10-01  8:41 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Halil Pasic, Eric Farman,
	Matthew Rosato, Jason Herne, Cédric Le Goater, kvm,
	Christian Borntraeger, Ilya Leoshkevich, Peter Maydell, qemu-ppc,
	Harsh Prateek Bora, Fabiano Rosas, Richard Henderson,
	Alex Williamson, Paolo Bonzini, qemu-s390x, Peter Xu

On 01/10/2025 10.21, Philippe Mathieu-Daudé wrote:
> Nothing in "system/ram_addr.h" requires definitions fromi

s/fromi/from/

> "exec/cpu-common.h", remove it.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   include/system/ram_addr.h | 1 -
>   1 file changed, 1 deletion(-)
> 
> diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h
> index 6b528338efc..f74a0ecee56 100644
> --- a/include/system/ram_addr.h
> +++ b/include/system/ram_addr.h
> @@ -29,7 +29,6 @@
>   #include "qemu/rcu.h"
>   
>   #include "exec/hwaddr.h"
> -#include "exec/cpu-common.h"
>   
>   extern uint64_t total_dirty_pages;

With the typo fixed:
Reviewed-by: Thomas Huth <thuth@redhat.com>



^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 01/25] system/ram_addr: Remove unnecessary 'exec/cpu-common.h' header
  2025-10-01  8:21 ` [PATCH 01/25] system/ram_addr: Remove unnecessary 'exec/cpu-common.h' header Philippe Mathieu-Daudé
  2025-10-01  8:41   ` Thomas Huth
@ 2025-10-01 14:30   ` Richard Henderson
  1 sibling, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 14:30 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> Nothing in "system/ram_addr.h" requires definitions fromi
> "exec/cpu-common.h", remove it.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   include/system/ram_addr.h | 1 -
>   1 file changed, 1 deletion(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 02/25] accel/kvm: Include missing 'exec/target_page.h' header
  2025-10-01  8:21 ` [PATCH 02/25] accel/kvm: Include missing 'exec/target_page.h' header Philippe Mathieu-Daudé
@ 2025-10-01 14:30   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 14:30 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> The "exec/target_page.h" header is indirectly pulled from
> "system/ram_addr.h". Include it explicitly, in order to
> avoid unrelated issues when refactoring "system/ram_addr.h":
> 
>    accel/kvm/kvm-all.c: In function ‘kvm_init’:
>    accel/kvm/kvm-all.c:2636:12: error: ‘TARGET_PAGE_SIZE’ undeclared (first use in this function); did you mean ‘TARGET_PAGE_BITS’?
>     2636 |     assert(TARGET_PAGE_SIZE <= qemu_real_host_page_size());
>          |            ^~~~~~~~~~~~~~~~
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   accel/kvm/kvm-all.c | 1 +
>   1 file changed, 1 insertion(+)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 03/25] hw/s390x/s390-stattrib: Include missing 'exec/target_page.h' header
  2025-10-01  8:21 ` [PATCH 03/25] hw/s390x/s390-stattrib: " Philippe Mathieu-Daudé
@ 2025-10-01 14:49   ` Richard Henderson
  2025-10-06 13:01   ` Thomas Huth
  1 sibling, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 14:49 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> The "exec/target_page.h" header is indirectly pulled from
> "system/ram_addr.h". Include it explicitly, in order to
> avoid unrelated issues when refactoring "system/ram_addr.h":
> 
>    hw/s390x/s390-stattrib-kvm.c: In function ‘kvm_s390_stattrib_set_stattr’:
>    hw/s390x/s390-stattrib-kvm.c:89:57: error: ‘TARGET_PAGE_SIZE’ undeclared (first use in this function); did you mean ‘TARGET_PAGE_BITS’?
>       89 |     unsigned long max = s390_get_memory_limit(s390ms) / TARGET_PAGE_SIZE;
>          |                                                         ^~~~~~~~~~~~~~~~
>          |                                                         TARGET_PAGE_BITS
> 
> Since "system/ram_addr.h" is actually not needed, remove it.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   hw/s390x/s390-stattrib-kvm.c | 2 +-
>   hw/s390x/s390-stattrib.c     | 2 +-
>   2 files changed, 2 insertions(+), 2 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 04/25] hw/vfio/listener: Include missing 'exec/target_page.h' header
  2025-10-01  8:21 ` [PATCH 04/25] hw/vfio/listener: " Philippe Mathieu-Daudé
@ 2025-10-01 14:50   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 14:50 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> The "exec/target_page.h" header is indirectly pulled from
> "system/ram_addr.h". Include it explicitly, in order to
> avoid unrelated issues when refactoring "system/ram_addr.h":
> 
>    hw/vfio/listener.c: In function ‘vfio_ram_discard_register_listener’:
>    hw/vfio/listener.c:258:28: error: implicit declaration of function ‘qemu_target_page_size’; did you mean ‘qemu_ram_pagesize’?
>      258 |     int target_page_size = qemu_target_page_size();
>          |                            ^~~~~~~~~~~~~~~~~~~~~
>          |                            qemu_ram_pagesize
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   hw/vfio/listener.c | 1 +
>   1 file changed, 1 insertion(+)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 05/25] target/arm/tcg/mte: Include missing 'exec/target_page.h' header
  2025-10-01  8:21 ` [PATCH 05/25] target/arm/tcg/mte: " Philippe Mathieu-Daudé
@ 2025-10-01 14:50   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 14:50 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> The "exec/target_page.h" header is indirectly pulled from
> "system/ram_addr.h". Include it explicitly, in order to
> avoid unrelated issues when refactoring "system/ram_addr.h":
> 
>    target/arm/tcg/mte_helper.c:815:23: error: use of undeclared identifier 'TARGET_PAGE_MASK'
>      815 |     prev_page = ptr & TARGET_PAGE_MASK;
>          |                       ^
>    target/arm/tcg/mte_helper.c:816:29: error: use of undeclared identifier 'TARGET_PAGE_SIZE'
>      816 |     next_page = prev_page + TARGET_PAGE_SIZE;
>          |                             ^
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   target/arm/tcg/mte_helper.c | 1 +
>   1 file changed, 1 insertion(+)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 06/25] hw: Remove unnecessary 'system/ram_addr.h' header
  2025-10-01  8:21 ` [PATCH 06/25] hw: Remove unnecessary 'system/ram_addr.h' header Philippe Mathieu-Daudé
@ 2025-10-01 14:53   ` Richard Henderson
  2025-10-06 13:02   ` Thomas Huth
  2025-10-06 13:12   ` Michael S. Tsirkin
  2 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 14:53 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> None of these files require definition exposed by "system/ram_addr.h",
> remove its inclusion.
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
>   hw/ppc/spapr.c                    | 1 -
>   hw/ppc/spapr_caps.c               | 1 -
>   hw/ppc/spapr_pci.c                | 1 -
>   hw/remote/memory.c                | 1 -
>   hw/remote/proxy-memory-listener.c | 1 -
>   hw/s390x/s390-virtio-ccw.c        | 1 -
>   hw/vfio/spapr.c                   | 1 -
>   hw/virtio/virtio-mem.c            | 1 -
>   8 files changed, 8 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 07/25] accel/tcg: Document rcu_read_lock is held when calling tlb_reset_dirty()
  2025-10-01  8:21 ` [PATCH 07/25] accel/tcg: Document rcu_read_lock is held when calling tlb_reset_dirty() Philippe Mathieu-Daudé
@ 2025-10-01 14:58   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 14:58 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   include/exec/cputlb.h | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/include/exec/cputlb.h b/include/exec/cputlb.h
> index 9bec0e78909..db7cbf97826 100644
> --- a/include/exec/cputlb.h
> +++ b/include/exec/cputlb.h
> @@ -31,6 +31,7 @@ void tlb_unprotect_code(ram_addr_t ram_addr);
>   #endif
>   
>   #ifndef CONFIG_USER_ONLY
> +/* Called with rcu_read_lock held. */
>   void tlb_reset_dirty(CPUState *cpu, uintptr_t start, uintptr_t length);
>   void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t length);
>   #endif

I think this is wrong.

tlb_reset_dirty doesn't need to rcu lock.
tlb_reset_dirty_range_all takes the rcu lock so that it can walk the cpu list itself.


r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 08/25] accel/tcg: Rename @start argument of tlb_reset_dirty*()
  2025-10-01  8:21 ` [PATCH 08/25] accel/tcg: Rename @start argument of tlb_reset_dirty*() Philippe Mathieu-Daudé
@ 2025-10-01 15:06   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 15:06 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> Generally we want to clarify terminology and avoid confusions,
> prefering @start with (exclusive) @end, and base @addr with
> @length (for inclusive range).
> 
> Here as tlb_reset_dirty() and tlb_reset_dirty_range_all()
> operate on a range, rename @start as @addr.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   include/exec/cputlb.h | 4 ++--
>   accel/tcg/cputlb.c    | 6 +++---
>   system/physmem.c      | 8 ++++----
>   3 files changed, 9 insertions(+), 9 deletions(-)

Eh.  I suppose.

What we *really* want is to abolish both end and length.  They both lead to the silliness 
that is system/memory.h using Int128 for ranges.  Both end and length allow an empty 
range, which we don't actually need, but do not allow a range covering the entire 2**64.

We should be using first/last, where first==last is a 1 byte inclusive range, and first==0 
&& last==UINT64_MAX is the entire 2**64.

I'm not sure where you're going with this other than swapping names.


r~

> 
> diff --git a/include/exec/cputlb.h b/include/exec/cputlb.h
> index db7cbf97826..995fe31ef75 100644
> --- a/include/exec/cputlb.h
> +++ b/include/exec/cputlb.h
> @@ -32,8 +32,8 @@ void tlb_unprotect_code(ram_addr_t ram_addr);
>   
>   #ifndef CONFIG_USER_ONLY
>   /* Called with rcu_read_lock held. */
> -void tlb_reset_dirty(CPUState *cpu, uintptr_t start, uintptr_t length);
> -void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t length);
> +void tlb_reset_dirty(CPUState *cpu, uintptr_t addr, uintptr_t length);
> +void tlb_reset_dirty_range_all(ram_addr_t addr, ram_addr_t length);
>   #endif
>   
>   /**
> diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
> index 2a6aa01c57c..6807328df82 100644
> --- a/accel/tcg/cputlb.c
> +++ b/accel/tcg/cputlb.c
> @@ -916,7 +916,7 @@ static inline void copy_tlb_helper_locked(CPUTLBEntry *d, const CPUTLBEntry *s)
>    * We must take tlb_c.lock to avoid racing with another vCPU update. The only
>    * thing actually updated is the target TLB entry ->addr_write flags.
>    */
> -void tlb_reset_dirty(CPUState *cpu, uintptr_t start, uintptr_t length)
> +void tlb_reset_dirty(CPUState *cpu, uintptr_t addr, uintptr_t length)
>   {
>       int mmu_idx;
>   
> @@ -929,12 +929,12 @@ void tlb_reset_dirty(CPUState *cpu, uintptr_t start, uintptr_t length)
>   
>           for (i = 0; i < n; i++) {
>               tlb_reset_dirty_range_locked(&desc->fulltlb[i], &fast->table[i],
> -                                         start, length);
> +                                         addr, length);
>           }
>   
>           for (i = 0; i < CPU_VTLB_SIZE; i++) {
>               tlb_reset_dirty_range_locked(&desc->vfulltlb[i], &desc->vtable[i],
> -                                         start, length);
> +                                         addr, length);
>           }
>       }
>       qemu_spin_unlock(&cpu->neg.tlb.c.lock);
> diff --git a/system/physmem.c b/system/physmem.c
> index 000bde90c2e..098824ad1d2 100644
> --- a/system/physmem.c
> +++ b/system/physmem.c
> @@ -882,16 +882,16 @@ found:
>       return block;
>   }
>   
> -void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t length)
> +void tlb_reset_dirty_range_all(ram_addr_t addr, ram_addr_t length)
>   {
>       CPUState *cpu;
> -    ram_addr_t start1;
> +    ram_addr_t start, start1;
>       RAMBlock *block;
>       ram_addr_t end;
>   
>       assert(tcg_enabled());
> -    end = TARGET_PAGE_ALIGN(start + length);
> -    start &= TARGET_PAGE_MASK;
> +    end = TARGET_PAGE_ALIGN(addr + length);
> +    start = addr & TARGET_PAGE_MASK;
>   
>       RCU_READ_LOCK_GUARD();
>       block = qemu_get_ram_block(start);



^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 10/25] system/physmem: Un-inline cpu_physical_memory_get_dirty_flag()
  2025-10-01  8:21 ` [PATCH 10/25] system/physmem: Un-inline cpu_physical_memory_get_dirty_flag() Philippe Mathieu-Daudé
@ 2025-10-01 15:07   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 15:07 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> Avoid maintaining large functions in header, rely on the
> linker to optimize at linking time.
> 
> cpu_physical_memory_get_dirty() doesn't involve any CPU,
> remove the 'cpu_' prefix.
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
>   include/system/ram_addr.h | 46 +--------------------------------------
>   system/physmem.c          | 44 +++++++++++++++++++++++++++++++++++++
>   2 files changed, 45 insertions(+), 45 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 11/25] system/physmem: Un-inline cpu_physical_memory_is_clean()
  2025-10-01  8:21 ` [PATCH 11/25] system/physmem: Un-inline cpu_physical_memory_is_clean() Philippe Mathieu-Daudé
@ 2025-10-01 15:09   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 15:09 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> Avoid maintaining large functions in header, rely on the
> linker to optimize at linking time.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   include/system/ram_addr.h | 9 +--------
>   system/physmem.c          | 9 +++++++++
>   2 files changed, 10 insertions(+), 8 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 14/25] system/physmem: Un-inline cpu_physical_memory_range_includes_clean()
  2025-10-01  8:21 ` [PATCH 14/25] system/physmem: Un-inline cpu_physical_memory_range_includes_clean() Philippe Mathieu-Daudé
@ 2025-10-01 15:15   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 15:15 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> Avoid maintaining large functions in header, rely on the
> linker to optimize at linking time.
> 
> cpu_physical_memory_all_dirty() doesn't involve any CPU,
> remove the 'cpu_' prefix.
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
>   include/system/ram_addr.h | 62 ++-------------------------------------
>   system/physmem.c          | 60 +++++++++++++++++++++++++++++++++++++
>   2 files changed, 63 insertions(+), 59 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 15/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_flag()
  2025-10-01  8:21 ` [PATCH 15/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_flag() Philippe Mathieu-Daudé
@ 2025-10-01 15:16   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 15:16 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> Avoid maintaining large functions in header, rely on the
> linker to optimize at linking time.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   include/system/ram_addr.h | 19 +------------------
>   system/physmem.c          | 18 ++++++++++++++++++
>   2 files changed, 19 insertions(+), 18 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 17/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_range()
  2025-10-01  8:21 ` [PATCH 17/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_range() Philippe Mathieu-Daudé
@ 2025-10-01 15:17   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 15:17 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> Avoid maintaining large functions in header, rely on the
> linker to optimize at linking time.
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
>   include/system/ram_addr.h | 53 ++-------------------------------------
>   system/physmem.c          | 51 +++++++++++++++++++++++++++++++++++++
>   2 files changed, 53 insertions(+), 51 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 18/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_lebitmap()
  2025-10-01  8:21 ` [PATCH 18/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_lebitmap() Philippe Mathieu-Daudé
@ 2025-10-01 15:23   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 15:23 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> Avoid maintaining large functions in header, rely on the
> linker to optimize at linking time.
> 
> Remove the now unneeded "system/xen.h" header.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   include/system/ram_addr.h | 103 +------------------------------------
>   system/physmem.c          | 105 ++++++++++++++++++++++++++++++++++++++
>   2 files changed, 106 insertions(+), 102 deletions(-)


Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

I'll note that the ifdef is bogus.
It's only *used* by KVM, but it should compile everywhere.


r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 20/25] system/physmem: Un-inline cpu_physical_memory_dirty_bits_cleared()
  2025-10-01  8:21 ` [PATCH 20/25] system/physmem: Un-inline cpu_physical_memory_dirty_bits_cleared() Philippe Mathieu-Daudé
@ 2025-10-01 15:50   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 15:50 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> Avoid maintaining large functions in header, rely on the
> linker to optimize at linking time.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   include/system/ram_addr.h | 11 ++---------
>   system/physmem.c          |  7 +++++++
>   2 files changed, 9 insertions(+), 9 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 22/25] system/physmem: Reduce cpu_physical_memory_clear_dirty_range() scope
  2025-10-01  8:21 ` [PATCH 22/25] system/physmem: Reduce cpu_physical_memory_clear_dirty_range() scope Philippe Mathieu-Daudé
@ 2025-10-01 15:51   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 15:51 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> cpu_physical_memory_clear_dirty_range() is now only called within
> system/physmem.c, by qemu_ram_resize(). Reduce its scope by making
> it internal to this file. Since it doesn't involve any CPU, remove
> the 'cpu_' prefix. As it operates on a range, rename @start as @addr.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   include/system/ram_addr.h | 9 ---------
>   system/physmem.c          | 9 ++++++++-
>   2 files changed, 8 insertions(+), 10 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 23/25] system/physmem: Reduce cpu_physical_memory_sync_dirty_bitmap() scope
  2025-10-01  8:21 ` [PATCH 23/25] system/physmem: Reduce cpu_physical_memory_sync_dirty_bitmap() scope Philippe Mathieu-Daudé
@ 2025-10-01 15:53   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 15:53 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> cpu_physical_memory_sync_dirty_bitmap() is now only called within
> system/physmem.c, by ramblock_sync_dirty_bitmap(). Reduce its scope
> by making it internal to this file. Since it doesn't involve any CPU,
> remove the 'cpu_' prefix.
> Remove the now unneeded "qemu/rcu.h" and "system/memory.h" headers.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   include/system/ram_addr.h | 79 ---------------------------------------
>   migration/ram.c           | 78 +++++++++++++++++++++++++++++++++++++-
>   2 files changed, 77 insertions(+), 80 deletions(-)
...> +/* Called with RCU critical section */
> +static inline
> +uint64_t physical_memory_sync_dirty_bitmap(RAMBlock *rb,
> +                                           ram_addr_t start,
> +                                           ram_addr_t length)
Drop inline at the same time.
This is a large function, and the inline was only needed for the header.

With that,
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~



^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 24/25] system/physmem: Drop 'cpu_' prefix in Physical Memory API
  2025-10-01  8:21 ` [PATCH 24/25] system/physmem: Drop 'cpu_' prefix in Physical Memory API Philippe Mathieu-Daudé
@ 2025-10-01 15:54   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 15:54 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> The functions related to the Physical Memory API declared
> in "system/ram_addr.h" do not operate on vCPU. Remove the
> 'cpu_' prefix.
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
>   include/system/ram_addr.h   | 24 +++++++++----------
>   accel/kvm/kvm-all.c         |  2 +-
>   accel/tcg/cputlb.c          | 12 +++++-----
>   hw/vfio/container-legacy.c  |  8 +++----
>   hw/vfio/container.c         |  4 ++--
>   migration/ram.c             |  4 ++--
>   system/memory.c             |  8 +++----
>   system/physmem.c            | 48 ++++++++++++++++++-------------------
>   target/arm/tcg/mte_helper.c |  2 +-
>   system/memory_ldst.c.inc    |  2 +-
>   tests/tsan/ignore.tsan      |  4 ++--
>   11 files changed, 59 insertions(+), 59 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 25/25] system/physmem: Extract API out of 'system/ram_addr.h' header
  2025-10-01  8:21 ` [PATCH 25/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
@ 2025-10-01 15:55   ` Richard Henderson
  0 siblings, 0 replies; 50+ messages in thread
From: Richard Henderson @ 2025-10-01 15:55 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel

On 10/1/25 01:21, Philippe Mathieu-Daudé wrote:
> Very few files use the Physical Memory API. Declare its
> methods in their own header: "system/physmem.h".
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
>   MAINTAINERS                 |  1 +
>   include/system/physmem.h    | 56 +++++++++++++++++++++++++++++++++++++
>   include/system/ram_addr.h   | 42 ----------------------------
>   accel/kvm/kvm-all.c         |  2 +-
>   accel/tcg/cputlb.c          |  1 +
>   hw/vfio/container-legacy.c  |  2 +-
>   hw/vfio/container.c         |  1 +
>   hw/vfio/listener.c          |  1 -
>   migration/ram.c             |  1 +
>   system/memory.c             |  1 +
>   system/physmem.c            |  1 +
>   target/arm/tcg/mte_helper.c |  2 +-
>   12 files changed, 65 insertions(+), 46 deletions(-)
>   create mode 100644 include/system/physmem.h

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 03/25] hw/s390x/s390-stattrib: Include missing 'exec/target_page.h' header
  2025-10-01  8:21 ` [PATCH 03/25] hw/s390x/s390-stattrib: " Philippe Mathieu-Daudé
  2025-10-01 14:49   ` Richard Henderson
@ 2025-10-06 13:01   ` Thomas Huth
  1 sibling, 0 replies; 50+ messages in thread
From: Thomas Huth @ 2025-10-06 13:01 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Halil Pasic, Eric Farman,
	Matthew Rosato, Jason Herne, Cédric Le Goater, kvm,
	Christian Borntraeger, Ilya Leoshkevich, Peter Maydell, qemu-ppc,
	Harsh Prateek Bora, Fabiano Rosas, Richard Henderson,
	Alex Williamson, Paolo Bonzini, qemu-s390x, Peter Xu

On 01/10/2025 10.21, Philippe Mathieu-Daudé wrote:
> The "exec/target_page.h" header is indirectly pulled from
> "system/ram_addr.h". Include it explicitly, in order to
> avoid unrelated issues when refactoring "system/ram_addr.h":
> 
>    hw/s390x/s390-stattrib-kvm.c: In function ‘kvm_s390_stattrib_set_stattr’:
>    hw/s390x/s390-stattrib-kvm.c:89:57: error: ‘TARGET_PAGE_SIZE’ undeclared (first use in this function); did you mean ‘TARGET_PAGE_BITS’?
>       89 |     unsigned long max = s390_get_memory_limit(s390ms) / TARGET_PAGE_SIZE;
>          |                                                         ^~~~~~~~~~~~~~~~
>          |                                                         TARGET_PAGE_BITS
> 
> Since "system/ram_addr.h" is actually not needed, remove it.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---

Reviewed-by: Thomas Huth <thuth@redhat.com>



^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 06/25] hw: Remove unnecessary 'system/ram_addr.h' header
  2025-10-01  8:21 ` [PATCH 06/25] hw: Remove unnecessary 'system/ram_addr.h' header Philippe Mathieu-Daudé
  2025-10-01 14:53   ` Richard Henderson
@ 2025-10-06 13:02   ` Thomas Huth
  2025-10-06 13:12   ` Michael S. Tsirkin
  2 siblings, 0 replies; 50+ messages in thread
From: Thomas Huth @ 2025-10-06 13:02 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Michael S. Tsirkin, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Halil Pasic, Eric Farman,
	Matthew Rosato, Jason Herne, Cédric Le Goater, kvm,
	Christian Borntraeger, Ilya Leoshkevich, Peter Maydell, qemu-ppc,
	Harsh Prateek Bora, Fabiano Rosas, Richard Henderson,
	Alex Williamson, Paolo Bonzini, qemu-s390x, Peter Xu

On 01/10/2025 10.21, Philippe Mathieu-Daudé wrote:
> None of these files require definition exposed by "system/ram_addr.h",
> remove its inclusion.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   hw/ppc/spapr.c                    | 1 -
>   hw/ppc/spapr_caps.c               | 1 -
>   hw/ppc/spapr_pci.c                | 1 -
>   hw/remote/memory.c                | 1 -
>   hw/remote/proxy-memory-listener.c | 1 -
>   hw/s390x/s390-virtio-ccw.c        | 1 -
>   hw/vfio/spapr.c                   | 1 -
>   hw/virtio/virtio-mem.c            | 1 -
>   8 files changed, 8 deletions(-)

Reviewed-by: Thomas Huth <thuth@redhat.com>



^ permalink raw reply	[flat|nested] 50+ messages in thread

* Re: [PATCH 06/25] hw: Remove unnecessary 'system/ram_addr.h' header
  2025-10-01  8:21 ` [PATCH 06/25] hw: Remove unnecessary 'system/ram_addr.h' header Philippe Mathieu-Daudé
  2025-10-01 14:53   ` Richard Henderson
  2025-10-06 13:02   ` Thomas Huth
@ 2025-10-06 13:12   ` Michael S. Tsirkin
  2 siblings, 0 replies; 50+ messages in thread
From: Michael S. Tsirkin @ 2025-10-06 13:12 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: qemu-devel, Nicholas Piggin, Elena Ufimtseva, qemu-arm,
	Jagannathan Raman, David Hildenbrand, Halil Pasic, Eric Farman,
	Thomas Huth, Matthew Rosato, Jason Herne, Cédric Le Goater,
	kvm, Christian Borntraeger, Ilya Leoshkevich, Peter Maydell,
	qemu-ppc, Harsh Prateek Bora, Fabiano Rosas, Richard Henderson,
	Alex Williamson, Paolo Bonzini, qemu-s390x, Peter Xu

On Wed, Oct 01, 2025 at 10:21:06AM +0200, Philippe Mathieu-Daudé wrote:
> None of these files require definition exposed by "system/ram_addr.h",
> remove its inclusion.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>

Acked-by: Michael S. Tsirkin <mst@redhat.com>

> ---
>  hw/ppc/spapr.c                    | 1 -
>  hw/ppc/spapr_caps.c               | 1 -
>  hw/ppc/spapr_pci.c                | 1 -
>  hw/remote/memory.c                | 1 -
>  hw/remote/proxy-memory-listener.c | 1 -
>  hw/s390x/s390-virtio-ccw.c        | 1 -
>  hw/vfio/spapr.c                   | 1 -
>  hw/virtio/virtio-mem.c            | 1 -
>  8 files changed, 8 deletions(-)
> 
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index eb22333404d..15d09ef9618 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -77,7 +77,6 @@
>  #include "hw/virtio/virtio-scsi.h"
>  #include "hw/virtio/vhost-scsi-common.h"
>  
> -#include "system/ram_addr.h"
>  #include "system/confidential-guest-support.h"
>  #include "hw/usb.h"
>  #include "qemu/config-file.h"
> diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
> index f2f5722d8ad..0f94c192fd4 100644
> --- a/hw/ppc/spapr_caps.c
> +++ b/hw/ppc/spapr_caps.c
> @@ -27,7 +27,6 @@
>  #include "qapi/error.h"
>  #include "qapi/visitor.h"
>  #include "system/hw_accel.h"
> -#include "system/ram_addr.h"
>  #include "target/ppc/cpu.h"
>  #include "target/ppc/mmu-hash64.h"
>  #include "cpu-models.h"
> diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
> index 1ac1185825e..f9095552e86 100644
> --- a/hw/ppc/spapr_pci.c
> +++ b/hw/ppc/spapr_pci.c
> @@ -34,7 +34,6 @@
>  #include "hw/pci/pci_host.h"
>  #include "hw/ppc/spapr.h"
>  #include "hw/pci-host/spapr.h"
> -#include "system/ram_addr.h"
>  #include <libfdt.h>
>  #include "trace.h"
>  #include "qemu/error-report.h"
> diff --git a/hw/remote/memory.c b/hw/remote/memory.c
> index 00193a552fa..8195aa5fb83 100644
> --- a/hw/remote/memory.c
> +++ b/hw/remote/memory.c
> @@ -11,7 +11,6 @@
>  #include "qemu/osdep.h"
>  
>  #include "hw/remote/memory.h"
> -#include "system/ram_addr.h"
>  #include "qapi/error.h"
>  
>  static void remote_sysmem_reset(void)
> diff --git a/hw/remote/proxy-memory-listener.c b/hw/remote/proxy-memory-listener.c
> index 30ac74961dd..e1a52d24f0b 100644
> --- a/hw/remote/proxy-memory-listener.c
> +++ b/hw/remote/proxy-memory-listener.c
> @@ -12,7 +12,6 @@
>  #include "qemu/range.h"
>  #include "system/memory.h"
>  #include "exec/cpu-common.h"
> -#include "system/ram_addr.h"
>  #include "qapi/error.h"
>  #include "qemu/error-report.h"
>  #include "hw/remote/mpqemu-link.h"
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index d0c6e80cb05..ad2c48188a8 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -13,7 +13,6 @@
>  
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
> -#include "system/ram_addr.h"
>  #include "system/confidential-guest-support.h"
>  #include "hw/boards.h"
>  #include "hw/s390x/sclp.h"
> diff --git a/hw/vfio/spapr.c b/hw/vfio/spapr.c
> index 8d9d68da4ec..0f23681a3f9 100644
> --- a/hw/vfio/spapr.c
> +++ b/hw/vfio/spapr.c
> @@ -17,7 +17,6 @@
>  
>  #include "hw/vfio/vfio-container-legacy.h"
>  #include "hw/hw.h"
> -#include "system/ram_addr.h"
>  #include "qemu/error-report.h"
>  #include "qapi/error.h"
>  #include "trace.h"
> diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c
> index 1de2d3de521..15ba6799f22 100644
> --- a/hw/virtio/virtio-mem.c
> +++ b/hw/virtio/virtio-mem.c
> @@ -25,7 +25,6 @@
>  #include "hw/virtio/virtio-mem.h"
>  #include "qapi/error.h"
>  #include "qapi/visitor.h"
> -#include "system/ram_addr.h"
>  #include "migration/misc.h"
>  #include "hw/boards.h"
>  #include "hw/qdev-properties.h"
> -- 
> 2.51.0



^ permalink raw reply	[flat|nested] 50+ messages in thread

end of thread, other threads:[~2025-10-06 13:14 UTC | newest]

Thread overview: 50+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-01  8:21 [PATCH 00/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
2025-10-01  8:21 ` [PATCH 01/25] system/ram_addr: Remove unnecessary 'exec/cpu-common.h' header Philippe Mathieu-Daudé
2025-10-01  8:41   ` Thomas Huth
2025-10-01 14:30   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 02/25] accel/kvm: Include missing 'exec/target_page.h' header Philippe Mathieu-Daudé
2025-10-01 14:30   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 03/25] hw/s390x/s390-stattrib: " Philippe Mathieu-Daudé
2025-10-01 14:49   ` Richard Henderson
2025-10-06 13:01   ` Thomas Huth
2025-10-01  8:21 ` [PATCH 04/25] hw/vfio/listener: " Philippe Mathieu-Daudé
2025-10-01 14:50   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 05/25] target/arm/tcg/mte: " Philippe Mathieu-Daudé
2025-10-01 14:50   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 06/25] hw: Remove unnecessary 'system/ram_addr.h' header Philippe Mathieu-Daudé
2025-10-01 14:53   ` Richard Henderson
2025-10-06 13:02   ` Thomas Huth
2025-10-06 13:12   ` Michael S. Tsirkin
2025-10-01  8:21 ` [PATCH 07/25] accel/tcg: Document rcu_read_lock is held when calling tlb_reset_dirty() Philippe Mathieu-Daudé
2025-10-01 14:58   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 08/25] accel/tcg: Rename @start argument of tlb_reset_dirty*() Philippe Mathieu-Daudé
2025-10-01 15:06   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 09/25] system/physmem: Rename @start argument of physical_memory_get_dirty() Philippe Mathieu-Daudé
2025-10-01  8:21 ` [PATCH 10/25] system/physmem: Un-inline cpu_physical_memory_get_dirty_flag() Philippe Mathieu-Daudé
2025-10-01 15:07   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 11/25] system/physmem: Un-inline cpu_physical_memory_is_clean() Philippe Mathieu-Daudé
2025-10-01 15:09   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 12/25] system/physmem: Rename @start argument of physical_memory_all_dirty() Philippe Mathieu-Daudé
2025-10-01  8:21 ` [PATCH 13/25] system/physmem: Rename @start argument of physical_memory_range*() Philippe Mathieu-Daudé
2025-10-01  8:21 ` [PATCH 14/25] system/physmem: Un-inline cpu_physical_memory_range_includes_clean() Philippe Mathieu-Daudé
2025-10-01 15:15   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 15/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_flag() Philippe Mathieu-Daudé
2025-10-01 15:16   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 16/25] system/physmem: Rename @start argument of physical_memory_*range() Philippe Mathieu-Daudé
2025-10-01  8:21 ` [PATCH 17/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_range() Philippe Mathieu-Daudé
2025-10-01 15:17   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 18/25] system/physmem: Un-inline cpu_physical_memory_set_dirty_lebitmap() Philippe Mathieu-Daudé
2025-10-01 15:23   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 19/25] system/physmem: Rename @start argument of physmem_dirty_bits_cleared() Philippe Mathieu-Daudé
2025-10-01  8:21 ` [PATCH 20/25] system/physmem: Un-inline cpu_physical_memory_dirty_bits_cleared() Philippe Mathieu-Daudé
2025-10-01 15:50   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 21/25] system/physmem: Rename @start argument of physmem_test_and_clear_dirty() Philippe Mathieu-Daudé
2025-10-01  8:21 ` [PATCH 22/25] system/physmem: Reduce cpu_physical_memory_clear_dirty_range() scope Philippe Mathieu-Daudé
2025-10-01 15:51   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 23/25] system/physmem: Reduce cpu_physical_memory_sync_dirty_bitmap() scope Philippe Mathieu-Daudé
2025-10-01 15:53   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 24/25] system/physmem: Drop 'cpu_' prefix in Physical Memory API Philippe Mathieu-Daudé
2025-10-01 15:54   ` Richard Henderson
2025-10-01  8:21 ` [PATCH 25/25] system/physmem: Extract API out of 'system/ram_addr.h' header Philippe Mathieu-Daudé
2025-10-01 15:55   ` Richard Henderson
2025-10-01  8:25 ` [PATCH 00/25] " Philippe Mathieu-Daudé

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).