Re: [PATCH v1 15/17] xen/riscv: implement trap redirection to a guest

Jan Beulich <[email protected]>
Newsgroups gmane.comp.emulators.xen.devel
Message-ID <[email protected]>
On 18.08.2026 09:47, Oleksii Kurochko wrote:
> On 8/12/26 6:03 PM, Jan Beulich wrote:
>> On 20.07.2026 18:02, Oleksii Kurochko wrote:
>>> Some traps taken by Xen on behalf of a guest can't or shouldn't be
>>> handled by the hypervisor and must be forwarded to the guest's own
>>> S-mode exception handler instead: e.g. when riscv_vcpu_unpriv_read()
>>> faults while accessing guest memory, or when emulation hits a condition
>>> only the guest kernel can resolve.
>>
>> Is the plan to use riscv_vcpu_unpriv_read() also for reading hypercall
>> buffers?
> 
> Yes, it could also be used to read hypercall buffers, but I don't think 
> it's the best option, as hypercall buffers could be larger than 8 bytes 
> (which is the size supported by the `hlv` instruction on the RV64 
> platform). For that case, I think it would be better to map the Xen page 
> corresponding to the GVA of the hypercall buffer and then use the usual 
> memcpy(). So, basically, use copy_guest() on RISC-V for that purpose.
> 
> 
>> In that case trap redirection shouldn't come into play.
> 
> It isn't mandatory to perform a redirection in the case of 
> riscv_vcpu_unpriv_read(), so if trap redirection shouldn't happen for 
> hypercall buffers, then the caller of riscv_vcpu_unpriv_read() needs to 
> handle that properly by checking utrap.cause. Something like:
> 
> ```
>      *insn = riscv_vcpu_unpriv_read(true, regs->sepc, &utrap);
>      if ( utrap.scause )
>      {
>          ...
>          utrap.sepc = regs->sepc;
>          utrap.stval = utrap.sepc;
> 
>          riscv_vcpu_trap_redirect(&utrap);
> 
>          return true;
>      }
> ```
> 
> So, if this cannot happen in the case of a hypercall buffer, then we 
> need to return -EFAULT in the if ( utrap.scause ) case.
> 
> I don't think I understand why redirection shouldn't come into play. Do 
> you mean that the hypercall buffer will always be available, and that it 
> is impossible for the hlv instruction to fail, so there is no point in 
> handling redirection at all in this case?

Failure to access a hypercall buffer should result in a -EFAULT return
value, not in any kind of exception.

Jan
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.