[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v6 1/4] xen/riscv: probe the PTE A/D bits update scheme at boot



On 2026-10-15 10:44 +0200, Jan Beulich wrote:
> On 15.10.2026 10:41, Jan Beulich wrote:
> > On 15.10.2026 10:28, Baptiste Le Duc wrote:
> >> On 2026-10-15 09:14 +0200, Jan Beulich wrote:
> >>> On 14.10.2026 18:45, Baptiste Le Duc wrote:
> >>>> On 2026-10-14 11:09:58+02:00, Jan Beulich wrote:
> >>>>> On 14.10.2026 11:00, Baptiste Le Duc wrote:
> >>>>>
> >>>>> In which case it would need to be
> >>>>>
> >>>>>     if ( riscv_isa_extension_available(NULL, RISCV_ISA_EXT_svade) ||
> >>>>>          !riscv_isa_extension_available(NULL, RISCV_ISA_EXT_svadu) )
> >>>>>         e->pte |= PTE_ACCESSED | PTE_DIRTY;
> >>>>>
> >>>>> albeit I have to admit that permitting two contradicting extensions to
> >>>>> be exposed at the same time is irritating.
> >>>>>
> >>>>>> I see two ways to address this:
> >>>>>>
> >>>>>> 1) Keep checking Svade:
> >>>>>>
> >>>>>>     if ( riscv_isa_extension_available(NULL, RISCV_ISA_EXT_svade) )
> >>>>>>         e->pte |= PTE_ACCESSED | PTE_DIRTY;
> >>>>>>
> >>>>>>     After resolve_ad_scheme(), the Svade bit is set in every case where
> >>>>>>     software has to preset the A/D bits. The only imprecise case is 
> >>>>>> both
> >>>>>>     extensions advertised with hardware updating already enabled by
> >>>>>>     firmware, where presetting A/D is unnecessary but harmless.
> >>>>>>
> >>>>>> 2) Record the probe result in a global, e.g.
> >>>>>>
> >>>>>>     static bool __ro_after_init hw_ad_update;
> >>>>>>
> >>>>>>     and use:
> >>>>>>
> >>>>>>     if ( !hw_ad_update )
> >>>>>>         e->pte |= PTE_ACCESSED | PTE_DIRTY;
> >>>>>>
> >>>>>>     This is exact in all cases, at the cost of a new global that mostly
> >>>>>>     duplicates what resolve_ad_scheme() already records in the ISA 
> >>>>>> bitmap.
> >>>>>>
> >>>>>> I discussed with Oleksii and we are fine with either. What do you 
> >>>>>> prefer?
> >>>>>
> >>>>> As to 1), see above. For 2), while maybe okay, I think we're better off
> >>>> Sorry, I don't fully follow the issue with 1). Compared to what you 
> >>>> proposed,
> >>>> it only differs when neither Svade nor Svadu is recorded, which cannot
> >>>> happen as resolve_ad_scheme() runs before and always records one of the
> >>>> two.
> >>>
> >>> Yet previously we said that recording extensions (as such, i.e. later also
> >>> possibly exposing them to guests) when they weren't really advertised may
> >>> not be the right thing to do. I.e. imo the probing may be used to drive
> >> But we also said that platforms (such as the P550) may implement an
> >> extension without advertising it, as a RISC-V spec maintainer
> >> confirmed in [1].
> >>
> >> [1] 
> >> https://github.com/riscv/riscv-isa-manual/issues/3450#issuecomment-6076851535
> > 
> > What Andrew says there suggests to me that the behavior you observe on P550
> > is against the spec.
> 
> Or wait - no, he doesn't. He said this only to the strange combination you had
> indicated.
For me, he clearly answered your question before:
`Implementations that trap when A/D bits are not set do implement Svade,
whether or not they explicitly say they do.`

-- 
Baptiste Le Duc <baptiste.le-duc@xxxxxxxxxx>



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.