|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1 15/17] xen/riscv: implement trap redirection to a guest
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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |