[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3] target/riscv: Fix incorrect PTE merge in walk_pte
From: |
Alistair Francis |
Subject: |
Re: [PATCH v3] target/riscv: Fix incorrect PTE merge in walk_pte |
Date: |
Thu, 28 Apr 2022 09:52:15 +1000 |
On Sun, Apr 24, 2022 at 7:59 AM Ralf Ramsauer
<ralf.ramsauer@oth-regensburg.de> wrote:
>
> Two non-subsequent PTEs can be mapped to subsequent paddrs. In this
> case, walk_pte will erroneously merge them.
>
> Enforce the split up, by tracking the virtual base address.
>
> Let's say we have the mapping:
> 0x81200000 -> 0x89623000 (4K)
> 0x8120f000 -> 0x89624000 (4K)
>
> Before, walk_pte would have shown:
>
> vaddr paddr size attr
> ---------------- ---------------- ---------------- -------
> 0000000081200000 0000000089623000 0000000000002000 rwxu-ad
>
> as it only checks for subsequent paddrs. With this patch, it becomes:
>
> vaddr paddr size attr
> ---------------- ---------------- ---------------- -------
> 0000000081200000 0000000089623000 0000000000001000 rwxu-ad
> 000000008120f000 0000000089624000 0000000000001000 rwxu-ad
>
> Signed-off-by: Ralf Ramsauer <ralf.ramsauer@oth-regensburg.de>
Thanks for the patch. It doesn't seem to have made it to the QEMU
mailing list though. Do you mind re-sending it and checking to make
sure it is sent to the mailing list?
Alistair
> ---
> [since v2: Adjust comment, rebased to latest master]
>
> target/riscv/monitor.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/target/riscv/monitor.c b/target/riscv/monitor.c
> index 7efb4b62c1..17e63fab00 100644
> --- a/target/riscv/monitor.c
> +++ b/target/riscv/monitor.c
> @@ -84,6 +84,7 @@ static void walk_pte(Monitor *mon, hwaddr base,
> target_ulong start,
> {
> hwaddr pte_addr;
> hwaddr paddr;
> + target_ulong last_start = -1;
> target_ulong pgsize;
> target_ulong pte;
> int ptshift;
> @@ -111,12 +112,13 @@ static void walk_pte(Monitor *mon, hwaddr base,
> target_ulong start,
> * A leaf PTE has been found
> *
> * If current PTE's permission bits differ from the last one,
> - * or current PTE's ppn does not make a contiguous physical
> - * address block together with the last one, print out the
> last
> - * contiguous mapped block details.
> + * or the current PTE breaks up a contiguous virtual or
> + * physical mapping, address block together with the last
> one,
> + * print out the last contiguous mapped block details.
> */
> if ((*last_attr != attr) ||
> - (*last_paddr + *last_size != paddr)) {
> + (*last_paddr + *last_size != paddr) ||
> + (last_start + *last_size != start)) {
> print_pte(mon, va_bits, *vbase, *pbase,
> *last_paddr + *last_size - *pbase, *last_attr);
>
> @@ -125,6 +127,7 @@ static void walk_pte(Monitor *mon, hwaddr base,
> target_ulong start,
> *last_attr = attr;
> }
>
> + last_start = start;
> *last_paddr = paddr;
> *last_size = pgsize;
> } else {
> --
> 2.36.0
>
- Re: [PATCH] target/riscv: Fix incorrect PTE merge in walk_pte, (continued)
- Re: [PATCH] target/riscv: Fix incorrect PTE merge in walk_pte, Ralf Ramsauer, 2022/04/04
- [PATCH v2] target/riscv: Fix incorrect PTE merge in walk_pte, Ralf Ramsauer, 2022/04/04
- Re: [PATCH v2] target/riscv: Fix incorrect PTE merge in walk_pte, Alistair Francis, 2022/04/12
- Re: [PATCH v2] target/riscv: Fix incorrect PTE merge in walk_pte, Bin Meng, 2022/04/21
- Re: [PATCH v2] target/riscv: Fix incorrect PTE merge in walk_pte, Bin Meng, 2022/04/21
- Re: [EXT] Re: [PATCH v2] target/riscv: Fix incorrect PTE merge in walk_pte, Ralf Ramsauer, 2022/04/22
- Re: [EXT] Re: [PATCH v2] target/riscv: Fix incorrect PTE merge in walk_pte, Alistair Francis, 2022/04/22
- [PATCH v3] target/riscv: Fix incorrect PTE merge in walk_pte, Ralf Ramsauer, 2022/04/23
- Re: [PATCH v3] target/riscv: Fix incorrect PTE merge in walk_pte, Bin Meng, 2022/04/23
- Re: [PATCH v3] target/riscv: Fix incorrect PTE merge in walk_pte, Alistair Francis, 2022/04/25
- Re: [PATCH v3] target/riscv: Fix incorrect PTE merge in walk_pte,
Alistair Francis <=
- Re: [PATCH v3] target/riscv: Fix incorrect PTE merge in walk_pte, Alistair Francis, 2022/04/27