[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 2/7] xen/riscv: set up fixmap mappings
On Tue, 2024-08-27 at 12:29 +0200, Jan Beulich wrote: > > > > + > > +/* > > + * Direct access to xen_fixmap[] should only happen when {set, > > + * clear}_fixmap() is unusable (e.g. where we would end up to > > + * recursively call the helpers). > > + */ > > +extern pte_t xen_fixmap[]; > > I'm afraid I keep being irritated by the comment: What recursive use > of > helpers is being talked about here? I can't see anything recursive in > this > patch. If this starts happening with a subsequent patch, then you > have > two options: Move the declaration + comment there, or clarify in the > description (in enough detail) what this is about. This comment is added because of: ``` void *__init pmap_map(mfn_t mfn) ... /* * We cannot use set_fixmap() here. We use PMAP when the domain map * page infrastructure is not yet initialized, so map_pages_to_xen() called * by set_fixmap() needs to map pages on demand, which then calls pmap() * again, resulting in a loop. Modify the PTEs directly instead. The same * is true for pmap_unmap(). */ arch_pmap_map(slot, mfn); ... ``` And it happens because set_fixmap() could be defined using generic PT helpers so what will lead to recursive behaviour when when there is no direct map: static pte_t *map_table(mfn_t mfn) { /* * During early boot, map_domain_page() may be unusable. Use the * PMAP to map temporarily a page-table. */ if ( system_state == SYS_STATE_early_boot ) return pmap_map(mfn); ... } > > > @@ -81,6 +82,18 @@ static inline void flush_page_to_ram(unsigned > > long mfn, bool sync_icache) > > BUG_ON("unimplemented"); > > } > > > > +/* Write a pagetable entry. */ > > +static inline void write_pte(pte_t *p, pte_t pte) > > +{ > > + write_atomic(p, pte); > > +} > > + > > +/* Read a pagetable entry. */ > > +static inline pte_t read_pte(pte_t *p) > > +{ > > + return read_atomic(p); > > This only works because of the strange type trickery you're playing > in > read_atomic(). Look at x86 code - there's a strict expectation that > the > type can be converted to/from unsigned long. And page table accessors > are written with that taken into consideration. Same goes for > write_pte() > of course, with the respective comment on the earlier patch in mind. I will check x86 code. Probably my answer on the patch with read/write_atomic() suggest that too. Based on the answers to that patch I think we can go with x86 approach. Thanks. ~ Oleksii > > Otoh I see that Arm does something very similar. If you have a strong > need / desire to follow that, then please at least split the two > entirely separate aspects that patch 1 presently changes both in one > go. > > Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |