[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 2/7] xen/riscv: set up fixmap mappings
On Wed, 2024-08-28 at 12:44 +0200, Jan Beulich wrote: > On 28.08.2024 11:53, oleksii.kurochko@xxxxxxxxx wrote: > > 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. We can't move declaration of xen_fixmap[] to the patch where set_fixmap() will be introduced ( which uses PMAP for domain map page infrastructure ) as xen_fixmap[] is used in the current patch. And we can't properly provide the proper description with the function which will be introduced one day in the future ( what can be not good too ). I came up with the following description in the comment above xen_fixmap[] declaration: /* * 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). * * One such case is pmap_map() where set_fixmap() can not be used. * It happens because PMAP is used 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. * Modification of the PTEs directly instead in arch_pmap_map(). * The same is true for pmap_unmap(). */ Could it be an option just to drop the comment for now at all as at the moment there is no such restriction with the usage of {set,clear}_fixmap() and xen_fixmap[]? > > 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 > > As you say - could be. If I'm not mistaken no set_fixmap() > implementation > exists even by the end of the series. Fundamentally I'd expect > set_fixmap() > to (possibly) use xen_fixmap[] directly. That in turn ... > > > so what will lead to recursive behaviour when when there is no > > direct map: > > ... would mean no recursion afaict. Hence why clarification is needed > as > to what's going on here _and_ what's planned. Yes, it is true. No recursion will happen in this case but if to look at the implementation of set_fixmap() for other Arm or x86 ( but I am not sure that x86 uses PMAP inside map_pages_to_xen() ) they are using map_pages_to_xen(). ~ Oleksii > > > 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); > > ... > > } >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |