|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1 03/15] xen/riscv: implement vcpu_csr_init()
On 1/12/26 3:28 PM, Jan Beulich wrote: On 12.01.2026 13:59, Oleksii Kurochko wrote:On 1/7/26 9:46 AM, Jan Beulich wrote:Also, wouldn't you better keep internal state in line with what hardware actually supports? CSRIND may be read-only-zero in the real register, in which case having the bit set in the "cached" copy can be misleading.[...](This may similarly apply to at least hedeleg and hideleg, btw.) Just to be sure that I get your idea correctly. Based on the priv. spec: Each bit of hedeleg shall be either writable or read-only zero. Many bits of hedeleg are required specifically to be writable or zero, as enumerated in Table 29. Now let’s take hedeleg.bit1, which is marked as writable according to Table 29. Your point is that even though hedeleg.bit1 is defined as writable, it could still be read-only zero, right? In general, I agree with that. It is possible that M-mode software decides, for some reason (for example, because the implementation does not support delegation of bit1 to a lower mode), not to delegate medeleg.bit1 to HS-mode. In that case, hedeleg.bit1 would always be read-only zero. In which case you'd need to do the delegation in software. For which it might be helpful to know what the two registers are actually set to in hardware (i.e. the cached values wanting to match the real ones).
Does it make sense then to have the following
...
v->arch.hedeleg = hedeleg;
vcpu->arch.hedeleg = csr_read(CSR_HEDELEG);
in arch_vcpu_create()?
Or I can just add the comment that it will be sync-ed with the corresponding
hardware CSR later as ,actually, there is some h{i,e}deleg synchronization
happening during context_switch() (this code is at the moment in downstream),
because restore_csr_regs() is executed and re-reads CSR_H{I,E}DELEG:
static void restore_csr_regs(struct vcpu *vcpu)
{
csr_write(CSR_HEDELEG, vcpu->arch.hedeleg);
csr_write(CSR_HIDELEG, vcpu->arch.hideleg);
...
As a result, vcpu->arch.h{I,E}deleg is kept in sync with the corresponding
hardware CSR.
~ Oleksii
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |