Re: [PATCH 11/23] target/riscv: Rewrite vext_ldff

Richard Henderson <[email protected]>
Newsgroups org.nongnu.qemu-riscv,org.nongnu.qemu-devel
Message-ID <[email protected]>
On 8/26/26 11:40, Max Chou wrote:
> Sorry, my previous example was unclear. It does not need a 1-byte PMP
> region: RISC-V PMP definition allows the minimum 4-byte PMP region,
> which exactly matches one e32 element.
>
> For example, with vl=3, vstart=0, e32, and v0.mask = [1, 0, 1],
> configure locked PMP entries as follows:
>
>    PMP0: NA4   [base + 4, base + 7], L, ---    # element 1, no read
>    PMP1: NAPOT target page,          L, R      # lower-priority page allow
>
>    bytes:       base       base + 4     base + 8
>                 +-----+    +-----+      +-----+
>    element:       0          1            2
>    mask:          1          0            1
>    access:     active      inactive      active
>    PMP:        PMP1 R      PMP0 ---      PMP1 R
>
> The RISC-V spec defines that masked vector loads access memory and raise
> exceptions only for active elements.
> Therefore this situation has reads only for elements 0 and 2; PMP0 must
> not create an access-fault condition for this instruction.
>
> My concern is that the page probe may be unsafe in some situations
> because PMP permissions can change at 4-byte granularity inside a
> target page, while the probe includes bytes which are not part of
> active vector memory operations.
>
> Maybe we could use the page probe only when it returns flags == 0,
> and otherwise fall back to checking only active elements or active
> runs?

Ok, thanks for the clear example.  flags == 0 does not help with this case.

What we want is to probe the first active element, with 
probe_access_full.  For this particular case, where a PMP rule matches 
something smaller than the page, we will have set lg_page_size < 
TARGET_PAGE_BITS.  So we get the fault (or not) for the first element 
exactly, and can then tell via flags and lg_page_size whether the rest 
of the page can use the fast or slow paths.

> I'm trying to create masked fauly-only-first + PMP test for this.

Thanks, that would be helpful.  Similarly for masked not-first-fault, 
please?


r~
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.