* [PATCH v4 0/6] hw/ppc: Remove tswap() calls
@ 2024-12-20 21:30 Philippe Mathieu-Daudé
2024-12-20 21:30 ` [PATCH v4 1/6] hw/ppc/spapr: Convert HPTE() macro as hpte_get_ptr() method Philippe Mathieu-Daudé
` (7 more replies)
0 siblings, 8 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-12-20 21:30 UTC (permalink / raw)
To: qemu-devel
Cc: Nicholas Piggin, qemu-ppc, Harsh Prateek Bora, BALATON Zoltan,
Daniel Henrique Barboza, Edgar E. Iglesias,
Philippe Mathieu-Daudé
Since v3:
- Addressed Nick & Harsh review comments
Remove the tswap() calls on ePAPR, and convert
them to big-endian LD/ST API on sPAPR.
Build-tested only.
Philippe Mathieu-Daudé (6):
hw/ppc/spapr: Convert HPTE() macro as hpte_get_ptr() method
hw/ppc/spapr: Convert HPTE_VALID() macro as hpte_is_valid() method
hw/ppc/spapr: Convert HPTE_DIRTY() macro as hpte_is_dirty() method
hw/ppc/spapr: Convert CLEAN_HPTE() macro as hpte_set_clean() method
hw/ppc/spapr: Convert DIRTY_HPTE() macro as hpte_set_dirty() method
hw/ppc/epapr: Do not swap ePAPR magic value
hw/ppc/sam460ex.c | 2 +-
hw/ppc/spapr.c | 63 +++++++++++++++++++++++++++++--------------
hw/ppc/virtex_ml507.c | 2 +-
3 files changed, 45 insertions(+), 22 deletions(-)
--
2.47.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v4 1/6] hw/ppc/spapr: Convert HPTE() macro as hpte_get_ptr() method
2024-12-20 21:30 [PATCH v4 0/6] hw/ppc: Remove tswap() calls Philippe Mathieu-Daudé
@ 2024-12-20 21:30 ` Philippe Mathieu-Daudé
2024-12-20 21:30 ` [PATCH v4 2/6] hw/ppc/spapr: Convert HPTE_VALID() macro as hpte_is_valid() method Philippe Mathieu-Daudé
` (6 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-12-20 21:30 UTC (permalink / raw)
To: qemu-devel
Cc: Nicholas Piggin, qemu-ppc, Harsh Prateek Bora, BALATON Zoltan,
Daniel Henrique Barboza, Edgar E. Iglesias,
Philippe Mathieu-Daudé
Convert HPTE() macro as hpte_get_ptr() method.
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/ppc/spapr.c | 38 ++++++++++++++++++++++----------------
1 file changed, 22 insertions(+), 16 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 3b022e8da9e..bed60afbe22 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1399,7 +1399,13 @@ static bool spapr_get_pate(PPCVirtualHypervisor *vhyp, PowerPCCPU *cpu,
}
}
-#define HPTE(_table, _i) (void *)(((uint64_t *)(_table)) + ((_i) * 2))
+static uint64_t *hpte_get_ptr(SpaprMachineState *s, unsigned index)
+{
+ uint64_t *table = s->htab;
+
+ return &table[2 * index];
+}
+
#define HPTE_VALID(_hpte) (tswap64(*((uint64_t *)(_hpte))) & HPTE64_V_VALID)
#define HPTE_DIRTY(_hpte) (tswap64(*((uint64_t *)(_hpte))) & HPTE64_V_HPTE_DIRTY)
#define CLEAN_HPTE(_hpte) ((*(uint64_t *)(_hpte)) &= tswap64(~HPTE64_V_HPTE_DIRTY))
@@ -1614,7 +1620,7 @@ int spapr_reallocate_hpt(SpaprMachineState *spapr, int shift, Error **errp)
spapr->htab_shift = shift;
for (i = 0; i < size / HASH_PTE_SIZE_64; i++) {
- DIRTY_HPTE(HPTE(spapr->htab, i));
+ DIRTY_HPTE(hpte_get_ptr(spapr, i));
}
}
/* We're setting up a hash table, so that means we're not radix */
@@ -2172,7 +2178,7 @@ static void htab_save_chunk(QEMUFile *f, SpaprMachineState *spapr,
qemu_put_be32(f, chunkstart);
qemu_put_be16(f, n_valid);
qemu_put_be16(f, n_invalid);
- qemu_put_buffer(f, HPTE(spapr->htab, chunkstart),
+ qemu_put_buffer(f, (void *)hpte_get_ptr(spapr, chunkstart),
HASH_PTE_SIZE_64 * n_valid);
}
@@ -2198,16 +2204,16 @@ static void htab_save_first_pass(QEMUFile *f, SpaprMachineState *spapr,
/* Consume invalid HPTEs */
while ((index < htabslots)
- && !HPTE_VALID(HPTE(spapr->htab, index))) {
- CLEAN_HPTE(HPTE(spapr->htab, index));
+ && !HPTE_VALID(hpte_get_ptr(spapr, index))) {
+ CLEAN_HPTE(hpte_get_ptr(spapr, index));
index++;
}
/* Consume valid HPTEs */
chunkstart = index;
while ((index < htabslots) && (index - chunkstart < USHRT_MAX)
- && HPTE_VALID(HPTE(spapr->htab, index))) {
- CLEAN_HPTE(HPTE(spapr->htab, index));
+ && HPTE_VALID(hpte_get_ptr(spapr, index))) {
+ CLEAN_HPTE(hpte_get_ptr(spapr, index));
index++;
}
@@ -2247,7 +2253,7 @@ static int htab_save_later_pass(QEMUFile *f, SpaprMachineState *spapr,
/* Consume non-dirty HPTEs */
while ((index < htabslots)
- && !HPTE_DIRTY(HPTE(spapr->htab, index))) {
+ && !HPTE_DIRTY(hpte_get_ptr(spapr, index))) {
index++;
examined++;
}
@@ -2255,9 +2261,9 @@ static int htab_save_later_pass(QEMUFile *f, SpaprMachineState *spapr,
chunkstart = index;
/* Consume valid dirty HPTEs */
while ((index < htabslots) && (index - chunkstart < USHRT_MAX)
- && HPTE_DIRTY(HPTE(spapr->htab, index))
- && HPTE_VALID(HPTE(spapr->htab, index))) {
- CLEAN_HPTE(HPTE(spapr->htab, index));
+ && HPTE_DIRTY(hpte_get_ptr(spapr, index))
+ && HPTE_VALID(hpte_get_ptr(spapr, index))) {
+ CLEAN_HPTE(hpte_get_ptr(spapr, index));
index++;
examined++;
}
@@ -2265,9 +2271,9 @@ static int htab_save_later_pass(QEMUFile *f, SpaprMachineState *spapr,
invalidstart = index;
/* Consume invalid dirty HPTEs */
while ((index < htabslots) && (index - invalidstart < USHRT_MAX)
- && HPTE_DIRTY(HPTE(spapr->htab, index))
- && !HPTE_VALID(HPTE(spapr->htab, index))) {
- CLEAN_HPTE(HPTE(spapr->htab, index));
+ && HPTE_DIRTY(hpte_get_ptr(spapr, index))
+ && !HPTE_VALID(hpte_get_ptr(spapr, index))) {
+ CLEAN_HPTE(hpte_get_ptr(spapr, index));
index++;
examined++;
}
@@ -2449,11 +2455,11 @@ static int htab_load(QEMUFile *f, void *opaque, int version_id)
if (spapr->htab) {
if (n_valid) {
- qemu_get_buffer(f, HPTE(spapr->htab, index),
+ qemu_get_buffer(f, (void *)hpte_get_ptr(spapr, index),
HASH_PTE_SIZE_64 * n_valid);
}
if (n_invalid) {
- memset(HPTE(spapr->htab, index + n_valid), 0,
+ memset(hpte_get_ptr(spapr, index + n_valid), 0,
HASH_PTE_SIZE_64 * n_invalid);
}
} else {
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 2/6] hw/ppc/spapr: Convert HPTE_VALID() macro as hpte_is_valid() method
2024-12-20 21:30 [PATCH v4 0/6] hw/ppc: Remove tswap() calls Philippe Mathieu-Daudé
2024-12-20 21:30 ` [PATCH v4 1/6] hw/ppc/spapr: Convert HPTE() macro as hpte_get_ptr() method Philippe Mathieu-Daudé
@ 2024-12-20 21:30 ` Philippe Mathieu-Daudé
2024-12-20 21:31 ` [PATCH v4 3/6] hw/ppc/spapr: Convert HPTE_DIRTY() macro as hpte_is_dirty() method Philippe Mathieu-Daudé
` (5 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-12-20 21:30 UTC (permalink / raw)
To: qemu-devel
Cc: Nicholas Piggin, qemu-ppc, Harsh Prateek Bora, BALATON Zoltan,
Daniel Henrique Barboza, Edgar E. Iglesias,
Philippe Mathieu-Daudé
Convert HPTE_VALID() macro as hpte_is_valid() method.
sPAPR data structures including the hash page table are big-endian
regardless of current CPU endian mode, so use the big-endian LD/ST
API to access the hash PTEs.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
---
hw/ppc/spapr.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index bed60afbe22..43220e93c4b 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1406,7 +1406,11 @@ static uint64_t *hpte_get_ptr(SpaprMachineState *s, unsigned index)
return &table[2 * index];
}
-#define HPTE_VALID(_hpte) (tswap64(*((uint64_t *)(_hpte))) & HPTE64_V_VALID)
+static bool hpte_is_valid(SpaprMachineState *s, unsigned index)
+{
+ return ldq_be_p(hpte_get_ptr(s, index)) & HPTE64_V_VALID;
+}
+
#define HPTE_DIRTY(_hpte) (tswap64(*((uint64_t *)(_hpte))) & HPTE64_V_HPTE_DIRTY)
#define CLEAN_HPTE(_hpte) ((*(uint64_t *)(_hpte)) &= tswap64(~HPTE64_V_HPTE_DIRTY))
#define DIRTY_HPTE(_hpte) ((*(uint64_t *)(_hpte)) |= tswap64(HPTE64_V_HPTE_DIRTY))
@@ -2204,7 +2208,7 @@ static void htab_save_first_pass(QEMUFile *f, SpaprMachineState *spapr,
/* Consume invalid HPTEs */
while ((index < htabslots)
- && !HPTE_VALID(hpte_get_ptr(spapr, index))) {
+ && !hpte_is_valid(spapr, index)) {
CLEAN_HPTE(hpte_get_ptr(spapr, index));
index++;
}
@@ -2212,7 +2216,7 @@ static void htab_save_first_pass(QEMUFile *f, SpaprMachineState *spapr,
/* Consume valid HPTEs */
chunkstart = index;
while ((index < htabslots) && (index - chunkstart < USHRT_MAX)
- && HPTE_VALID(hpte_get_ptr(spapr, index))) {
+ && hpte_is_valid(spapr, index)) {
CLEAN_HPTE(hpte_get_ptr(spapr, index));
index++;
}
@@ -2262,7 +2266,7 @@ static int htab_save_later_pass(QEMUFile *f, SpaprMachineState *spapr,
/* Consume valid dirty HPTEs */
while ((index < htabslots) && (index - chunkstart < USHRT_MAX)
&& HPTE_DIRTY(hpte_get_ptr(spapr, index))
- && HPTE_VALID(hpte_get_ptr(spapr, index))) {
+ && hpte_is_valid(spapr, index)) {
CLEAN_HPTE(hpte_get_ptr(spapr, index));
index++;
examined++;
@@ -2272,7 +2276,7 @@ static int htab_save_later_pass(QEMUFile *f, SpaprMachineState *spapr,
/* Consume invalid dirty HPTEs */
while ((index < htabslots) && (index - invalidstart < USHRT_MAX)
&& HPTE_DIRTY(hpte_get_ptr(spapr, index))
- && !HPTE_VALID(hpte_get_ptr(spapr, index))) {
+ && !hpte_is_valid(spapr, index)) {
CLEAN_HPTE(hpte_get_ptr(spapr, index));
index++;
examined++;
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 3/6] hw/ppc/spapr: Convert HPTE_DIRTY() macro as hpte_is_dirty() method
2024-12-20 21:30 [PATCH v4 0/6] hw/ppc: Remove tswap() calls Philippe Mathieu-Daudé
2024-12-20 21:30 ` [PATCH v4 1/6] hw/ppc/spapr: Convert HPTE() macro as hpte_get_ptr() method Philippe Mathieu-Daudé
2024-12-20 21:30 ` [PATCH v4 2/6] hw/ppc/spapr: Convert HPTE_VALID() macro as hpte_is_valid() method Philippe Mathieu-Daudé
@ 2024-12-20 21:31 ` Philippe Mathieu-Daudé
2024-12-20 21:31 ` [PATCH v4 4/6] hw/ppc/spapr: Convert CLEAN_HPTE() macro as hpte_set_clean() method Philippe Mathieu-Daudé
` (4 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-12-20 21:31 UTC (permalink / raw)
To: qemu-devel
Cc: Nicholas Piggin, qemu-ppc, Harsh Prateek Bora, BALATON Zoltan,
Daniel Henrique Barboza, Edgar E. Iglesias,
Philippe Mathieu-Daudé
Convert HPTE_DIRTY() macro as hpte_is_dirty() method.
sPAPR data structures including the hash page table are big-endian
regardless of current CPU endian mode, so use the big-endian LD/ST
API to access the hash PTEs.
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/ppc/spapr.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 43220e93c4b..31df6fdc40c 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1411,7 +1411,11 @@ static bool hpte_is_valid(SpaprMachineState *s, unsigned index)
return ldq_be_p(hpte_get_ptr(s, index)) & HPTE64_V_VALID;
}
-#define HPTE_DIRTY(_hpte) (tswap64(*((uint64_t *)(_hpte))) & HPTE64_V_HPTE_DIRTY)
+static bool hpte_is_dirty(SpaprMachineState *s, unsigned index)
+{
+ return ldq_be_p(hpte_get_ptr(s, index)) & HPTE64_V_HPTE_DIRTY;
+}
+
#define CLEAN_HPTE(_hpte) ((*(uint64_t *)(_hpte)) &= tswap64(~HPTE64_V_HPTE_DIRTY))
#define DIRTY_HPTE(_hpte) ((*(uint64_t *)(_hpte)) |= tswap64(HPTE64_V_HPTE_DIRTY))
@@ -2257,7 +2261,7 @@ static int htab_save_later_pass(QEMUFile *f, SpaprMachineState *spapr,
/* Consume non-dirty HPTEs */
while ((index < htabslots)
- && !HPTE_DIRTY(hpte_get_ptr(spapr, index))) {
+ && !hpte_is_dirty(spapr, index)) {
index++;
examined++;
}
@@ -2265,7 +2269,7 @@ static int htab_save_later_pass(QEMUFile *f, SpaprMachineState *spapr,
chunkstart = index;
/* Consume valid dirty HPTEs */
while ((index < htabslots) && (index - chunkstart < USHRT_MAX)
- && HPTE_DIRTY(hpte_get_ptr(spapr, index))
+ && hpte_is_dirty(spapr, index)
&& hpte_is_valid(spapr, index)) {
CLEAN_HPTE(hpte_get_ptr(spapr, index));
index++;
@@ -2275,7 +2279,7 @@ static int htab_save_later_pass(QEMUFile *f, SpaprMachineState *spapr,
invalidstart = index;
/* Consume invalid dirty HPTEs */
while ((index < htabslots) && (index - invalidstart < USHRT_MAX)
- && HPTE_DIRTY(hpte_get_ptr(spapr, index))
+ && hpte_is_dirty(spapr, index)
&& !hpte_is_valid(spapr, index)) {
CLEAN_HPTE(hpte_get_ptr(spapr, index));
index++;
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 4/6] hw/ppc/spapr: Convert CLEAN_HPTE() macro as hpte_set_clean() method
2024-12-20 21:30 [PATCH v4 0/6] hw/ppc: Remove tswap() calls Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2024-12-20 21:31 ` [PATCH v4 3/6] hw/ppc/spapr: Convert HPTE_DIRTY() macro as hpte_is_dirty() method Philippe Mathieu-Daudé
@ 2024-12-20 21:31 ` Philippe Mathieu-Daudé
2024-12-20 21:31 ` [PATCH v4 5/6] hw/ppc/spapr: Convert DIRTY_HPTE() macro as hpte_set_dirty() method Philippe Mathieu-Daudé
` (3 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-12-20 21:31 UTC (permalink / raw)
To: qemu-devel
Cc: Nicholas Piggin, qemu-ppc, Harsh Prateek Bora, BALATON Zoltan,
Daniel Henrique Barboza, Edgar E. Iglesias,
Philippe Mathieu-Daudé
Convert CLEAN_HPTE() macro as hpte_set_clean() method.
sPAPR data structures including the hash page table are big-endian
regardless of current CPU endian mode, so use the big-endian LD/ST
API to access the hash PTEs.
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/ppc/spapr.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 31df6fdc40c..e68e8c320f4 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1416,7 +1416,12 @@ static bool hpte_is_dirty(SpaprMachineState *s, unsigned index)
return ldq_be_p(hpte_get_ptr(s, index)) & HPTE64_V_HPTE_DIRTY;
}
-#define CLEAN_HPTE(_hpte) ((*(uint64_t *)(_hpte)) &= tswap64(~HPTE64_V_HPTE_DIRTY))
+static void hpte_set_clean(SpaprMachineState *s, unsigned index)
+{
+ stq_be_p(hpte_get_ptr(s, index),
+ ldq_be_p(hpte_get_ptr(s, index)) & ~HPTE64_V_HPTE_DIRTY);
+}
+
#define DIRTY_HPTE(_hpte) ((*(uint64_t *)(_hpte)) |= tswap64(HPTE64_V_HPTE_DIRTY))
/*
@@ -2213,7 +2218,7 @@ static void htab_save_first_pass(QEMUFile *f, SpaprMachineState *spapr,
/* Consume invalid HPTEs */
while ((index < htabslots)
&& !hpte_is_valid(spapr, index)) {
- CLEAN_HPTE(hpte_get_ptr(spapr, index));
+ hpte_set_clean(spapr, index);
index++;
}
@@ -2221,7 +2226,7 @@ static void htab_save_first_pass(QEMUFile *f, SpaprMachineState *spapr,
chunkstart = index;
while ((index < htabslots) && (index - chunkstart < USHRT_MAX)
&& hpte_is_valid(spapr, index)) {
- CLEAN_HPTE(hpte_get_ptr(spapr, index));
+ hpte_set_clean(spapr, index);
index++;
}
@@ -2271,7 +2276,7 @@ static int htab_save_later_pass(QEMUFile *f, SpaprMachineState *spapr,
while ((index < htabslots) && (index - chunkstart < USHRT_MAX)
&& hpte_is_dirty(spapr, index)
&& hpte_is_valid(spapr, index)) {
- CLEAN_HPTE(hpte_get_ptr(spapr, index));
+ hpte_set_clean(spapr, index);
index++;
examined++;
}
@@ -2281,7 +2286,7 @@ static int htab_save_later_pass(QEMUFile *f, SpaprMachineState *spapr,
while ((index < htabslots) && (index - invalidstart < USHRT_MAX)
&& hpte_is_dirty(spapr, index)
&& !hpte_is_valid(spapr, index)) {
- CLEAN_HPTE(hpte_get_ptr(spapr, index));
+ hpte_set_clean(spapr, index);
index++;
examined++;
}
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 5/6] hw/ppc/spapr: Convert DIRTY_HPTE() macro as hpte_set_dirty() method
2024-12-20 21:30 [PATCH v4 0/6] hw/ppc: Remove tswap() calls Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2024-12-20 21:31 ` [PATCH v4 4/6] hw/ppc/spapr: Convert CLEAN_HPTE() macro as hpte_set_clean() method Philippe Mathieu-Daudé
@ 2024-12-20 21:31 ` Philippe Mathieu-Daudé
2024-12-20 21:31 ` [PATCH v4 6/6] hw/ppc/epapr: Do not swap ePAPR magic value Philippe Mathieu-Daudé
` (2 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-12-20 21:31 UTC (permalink / raw)
To: qemu-devel
Cc: Nicholas Piggin, qemu-ppc, Harsh Prateek Bora, BALATON Zoltan,
Daniel Henrique Barboza, Edgar E. Iglesias,
Philippe Mathieu-Daudé
Convert DIRTY_HPTE() macro as hpte_set_dirty() method.
sPAPR data structures including the hash page table are big-endian
regardless of current CPU endian mode, so use the big-endian LD/ST
API to access the hash PTEs.
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/ppc/spapr.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index e68e8c320f4..d318ce2a350 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1422,7 +1422,11 @@ static void hpte_set_clean(SpaprMachineState *s, unsigned index)
ldq_be_p(hpte_get_ptr(s, index)) & ~HPTE64_V_HPTE_DIRTY);
}
-#define DIRTY_HPTE(_hpte) ((*(uint64_t *)(_hpte)) |= tswap64(HPTE64_V_HPTE_DIRTY))
+static void hpte_set_dirty(SpaprMachineState *s, unsigned index)
+{
+ stq_be_p(hpte_get_ptr(s, index),
+ ldq_be_p(hpte_get_ptr(s, index)) | HPTE64_V_HPTE_DIRTY);
+}
/*
* Get the fd to access the kernel htab, re-opening it if necessary
@@ -1633,7 +1637,7 @@ int spapr_reallocate_hpt(SpaprMachineState *spapr, int shift, Error **errp)
spapr->htab_shift = shift;
for (i = 0; i < size / HASH_PTE_SIZE_64; i++) {
- DIRTY_HPTE(hpte_get_ptr(spapr, i));
+ hpte_set_dirty(spapr, i);
}
}
/* We're setting up a hash table, so that means we're not radix */
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 6/6] hw/ppc/epapr: Do not swap ePAPR magic value
2024-12-20 21:30 [PATCH v4 0/6] hw/ppc: Remove tswap() calls Philippe Mathieu-Daudé
` (4 preceding siblings ...)
2024-12-20 21:31 ` [PATCH v4 5/6] hw/ppc/spapr: Convert DIRTY_HPTE() macro as hpte_set_dirty() method Philippe Mathieu-Daudé
@ 2024-12-20 21:31 ` Philippe Mathieu-Daudé
2024-12-22 19:08 ` BALATON Zoltan
2024-12-24 1:18 ` [PATCH v4 0/6] hw/ppc: Remove tswap() calls Harsh Prateek Bora
2025-01-09 12:54 ` Philippe Mathieu-Daudé
7 siblings, 1 reply; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-12-20 21:31 UTC (permalink / raw)
To: qemu-devel
Cc: Nicholas Piggin, qemu-ppc, Harsh Prateek Bora, BALATON Zoltan,
Daniel Henrique Barboza, Edgar E. Iglesias,
Philippe Mathieu-Daudé
The ePAPR magic value in $r6 doesn't need to be byte swapped.
See ePAPR-v1.1.pdf chapter 5.4.1 "Boot CPU Initial Register State"
and the following mailing-list threads:
https://lore.kernel.org/qemu-devel/CAFEAcA_NR4XW5DNL4nq7vnH4XRH5UWbhQCxuLyKqYk6_FCBrAA@mail.gmail.com/
https://lore.kernel.org/qemu-devel/D6F93NM6OW2L.2FDO88L38PABR@gmail.com/
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
---
hw/ppc/sam460ex.c | 2 +-
hw/ppc/virtex_ml507.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c
index 78e2a46e753..db9c8f3fa6e 100644
--- a/hw/ppc/sam460ex.c
+++ b/hw/ppc/sam460ex.c
@@ -234,7 +234,7 @@ static void main_cpu_reset(void *opaque)
/* Create a mapping for the kernel. */
booke_set_tlb(&env->tlb.tlbe[0], 0, 0, 1 << 31);
- env->gpr[6] = tswap32(EPAPR_MAGIC);
+ env->gpr[6] = EPAPR_MAGIC;
env->gpr[7] = (16 * MiB) - 8; /* bi->ima_size; */
} else {
diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c
index f378e5c4a90..6197d31d88f 100644
--- a/hw/ppc/virtex_ml507.c
+++ b/hw/ppc/virtex_ml507.c
@@ -119,7 +119,7 @@ static void main_cpu_reset(void *opaque)
/* Create a mapping spanning the 32bit addr space. */
booke_set_tlb(&env->tlb.tlbe[0], 0, 0, 1U << 31);
booke_set_tlb(&env->tlb.tlbe[1], 0x80000000, 0x80000000, 1U << 31);
- env->gpr[6] = tswap32(EPAPR_MAGIC);
+ env->gpr[6] = EPAPR_MAGIC;
env->gpr[7] = bi->ima_size;
}
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v4 6/6] hw/ppc/epapr: Do not swap ePAPR magic value
2024-12-20 21:31 ` [PATCH v4 6/6] hw/ppc/epapr: Do not swap ePAPR magic value Philippe Mathieu-Daudé
@ 2024-12-22 19:08 ` BALATON Zoltan
0 siblings, 0 replies; 12+ messages in thread
From: BALATON Zoltan @ 2024-12-22 19:08 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, Nicholas Piggin, qemu-ppc, Harsh Prateek Bora,
Daniel Henrique Barboza, Edgar E. Iglesias
[-- Attachment #1: Type: text/plain, Size: 1765 bytes --]
On Fri, 20 Dec 2024, Philippe Mathieu-Daudé wrote:
> The ePAPR magic value in $r6 doesn't need to be byte swapped.
>
> See ePAPR-v1.1.pdf chapter 5.4.1 "Boot CPU Initial Register State"
> and the following mailing-list threads:
> https://lore.kernel.org/qemu-devel/CAFEAcA_NR4XW5DNL4nq7vnH4XRH5UWbhQCxuLyKqYk6_FCBrAA@mail.gmail.com/
> https://lore.kernel.org/qemu-devel/D6F93NM6OW2L.2FDO88L38PABR@gmail.com/
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
The Linux image I have still seems to boot on sam460ex so
Tested-by: BALATON Zoltan <balaton@eik.bme.hu>
> ---
> hw/ppc/sam460ex.c | 2 +-
> hw/ppc/virtex_ml507.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c
> index 78e2a46e753..db9c8f3fa6e 100644
> --- a/hw/ppc/sam460ex.c
> +++ b/hw/ppc/sam460ex.c
> @@ -234,7 +234,7 @@ static void main_cpu_reset(void *opaque)
>
> /* Create a mapping for the kernel. */
> booke_set_tlb(&env->tlb.tlbe[0], 0, 0, 1 << 31);
> - env->gpr[6] = tswap32(EPAPR_MAGIC);
> + env->gpr[6] = EPAPR_MAGIC;
> env->gpr[7] = (16 * MiB) - 8; /* bi->ima_size; */
>
> } else {
> diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c
> index f378e5c4a90..6197d31d88f 100644
> --- a/hw/ppc/virtex_ml507.c
> +++ b/hw/ppc/virtex_ml507.c
> @@ -119,7 +119,7 @@ static void main_cpu_reset(void *opaque)
> /* Create a mapping spanning the 32bit addr space. */
> booke_set_tlb(&env->tlb.tlbe[0], 0, 0, 1U << 31);
> booke_set_tlb(&env->tlb.tlbe[1], 0x80000000, 0x80000000, 1U << 31);
> - env->gpr[6] = tswap32(EPAPR_MAGIC);
> + env->gpr[6] = EPAPR_MAGIC;
> env->gpr[7] = bi->ima_size;
> }
>
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/6] hw/ppc: Remove tswap() calls
2024-12-20 21:30 [PATCH v4 0/6] hw/ppc: Remove tswap() calls Philippe Mathieu-Daudé
` (5 preceding siblings ...)
2024-12-20 21:31 ` [PATCH v4 6/6] hw/ppc/epapr: Do not swap ePAPR magic value Philippe Mathieu-Daudé
@ 2024-12-24 1:18 ` Harsh Prateek Bora
2025-01-09 12:54 ` Philippe Mathieu-Daudé
7 siblings, 0 replies; 12+ messages in thread
From: Harsh Prateek Bora @ 2024-12-24 1:18 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, Nicholas Piggin, qemu-ppc, Harsh Prateek Bora,
BALATON Zoltan, Daniel Henrique Barboza, Edgar E. Iglesias
[-- Attachment #1: Type: text/plain, Size: 1009 bytes --]
On Sat, 21 Dec, 2024, 3:02 am Philippe Mathieu-Daudé, <philmd@linaro.org>
wrote:
> Since v3:
> - Addressed Nick & Harsh review comments
>
> Remove the tswap() calls on ePAPR, and convert
> them to big-endian LD/ST API on sPAPR.
>
> Build-tested only.
>
> Philippe Mathieu-Daudé (6):
> hw/ppc/spapr: Convert HPTE() macro as hpte_get_ptr() method
> hw/ppc/spapr: Convert HPTE_VALID() macro as hpte_is_valid() method
> hw/ppc/spapr: Convert HPTE_DIRTY() macro as hpte_is_dirty() method
> hw/ppc/spapr: Convert CLEAN_HPTE() macro as hpte_set_clean() method
> hw/ppc/spapr: Convert DIRTY_HPTE() macro as hpte_set_dirty() method
> hw/ppc/epapr: Do not swap ePAPR magic value
>
For spapr:
Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
> hw/ppc/sam460ex.c | 2 +-
> hw/ppc/spapr.c | 63 +++++++++++++++++++++++++++++--------------
> hw/ppc/virtex_ml507.c | 2 +-
> 3 files changed, 45 insertions(+), 22 deletions(-)
>
> --
> 2.47.1
>
>
>
[-- Attachment #2: Type: text/html, Size: 1708 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/6] hw/ppc: Remove tswap() calls
2024-12-20 21:30 [PATCH v4 0/6] hw/ppc: Remove tswap() calls Philippe Mathieu-Daudé
` (6 preceding siblings ...)
2024-12-24 1:18 ` [PATCH v4 0/6] hw/ppc: Remove tswap() calls Harsh Prateek Bora
@ 2025-01-09 12:54 ` Philippe Mathieu-Daudé
2025-03-06 15:23 ` Philippe Mathieu-Daudé
7 siblings, 1 reply; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-01-09 12:54 UTC (permalink / raw)
To: qemu-devel
Cc: Nicholas Piggin, qemu-ppc, Harsh Prateek Bora, BALATON Zoltan,
Daniel Henrique Barboza, Edgar E. Iglesias
Hi Nick,
Ping? (series fully reviewed)
On 20/12/24 22:30, Philippe Mathieu-Daudé wrote:
> Since v3:
> - Addressed Nick & Harsh review comments
>
> Remove the tswap() calls on ePAPR, and convert
> them to big-endian LD/ST API on sPAPR.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/6] hw/ppc: Remove tswap() calls
2025-01-09 12:54 ` Philippe Mathieu-Daudé
@ 2025-03-06 15:23 ` Philippe Mathieu-Daudé
2025-04-25 10:38 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-03-06 15:23 UTC (permalink / raw)
To: qemu-devel
Cc: Nicholas Piggin, qemu-ppc, Harsh Prateek Bora, BALATON Zoltan,
Daniel Henrique Barboza, Edgar E. Iglesias
ping
On 9/1/25 13:54, Philippe Mathieu-Daudé wrote:
> Hi Nick,
>
> Ping? (series fully reviewed)
>
> On 20/12/24 22:30, Philippe Mathieu-Daudé wrote:
>> Since v3:
>> - Addressed Nick & Harsh review comments
>>
>> Remove the tswap() calls on ePAPR, and convert
>> them to big-endian LD/ST API on sPAPR.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/6] hw/ppc: Remove tswap() calls
2025-03-06 15:23 ` Philippe Mathieu-Daudé
@ 2025-04-25 10:38 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-04-25 10:38 UTC (permalink / raw)
To: qemu-devel
Cc: Nicholas Piggin, qemu-ppc, Harsh Prateek Bora, BALATON Zoltan,
Daniel Henrique Barboza, Edgar E. Iglesias
On 6/3/25 16:23, Philippe Mathieu-Daudé wrote:
> ping
Merged as c894bdf78b3..c2ac9f4c297, thanks!
>>> Remove the tswap() calls on ePAPR, and convert
>>> them to big-endian LD/ST API on sPAPR.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2025-04-25 10:39 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-20 21:30 [PATCH v4 0/6] hw/ppc: Remove tswap() calls Philippe Mathieu-Daudé
2024-12-20 21:30 ` [PATCH v4 1/6] hw/ppc/spapr: Convert HPTE() macro as hpte_get_ptr() method Philippe Mathieu-Daudé
2024-12-20 21:30 ` [PATCH v4 2/6] hw/ppc/spapr: Convert HPTE_VALID() macro as hpte_is_valid() method Philippe Mathieu-Daudé
2024-12-20 21:31 ` [PATCH v4 3/6] hw/ppc/spapr: Convert HPTE_DIRTY() macro as hpte_is_dirty() method Philippe Mathieu-Daudé
2024-12-20 21:31 ` [PATCH v4 4/6] hw/ppc/spapr: Convert CLEAN_HPTE() macro as hpte_set_clean() method Philippe Mathieu-Daudé
2024-12-20 21:31 ` [PATCH v4 5/6] hw/ppc/spapr: Convert DIRTY_HPTE() macro as hpte_set_dirty() method Philippe Mathieu-Daudé
2024-12-20 21:31 ` [PATCH v4 6/6] hw/ppc/epapr: Do not swap ePAPR magic value Philippe Mathieu-Daudé
2024-12-22 19:08 ` BALATON Zoltan
2024-12-24 1:18 ` [PATCH v4 0/6] hw/ppc: Remove tswap() calls Harsh Prateek Bora
2025-01-09 12:54 ` Philippe Mathieu-Daudé
2025-03-06 15:23 ` Philippe Mathieu-Daudé
2025-04-25 10:38 ` 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).