On Fri, Sep 6, 2019 at 11:18 AM James Morse <james.morse@xxxxxxx> wrote: > > Hi Pavel, > > On 21/08/2019 19:31, Pavel Tatashin wrote: > > trans_pgd_create_copy() and trans_pgd_map_page() are going to be > > the basis for public interface of new subsystem that handles page > > Please don't call this a subsystem. 'sound' and 'mm' are subsystems, this is just some > shared code. Sounds good: just could not find a better term to call trans_pgd_*. I won't fix log commits. > > > tables for cases which are between kernels: kexec, and hibernate. > > Even though you've baked the get_safe_page() calls into trans_pgd_map_page()? It is getting removed later. Just for a cleaner migration to new place, get_safe_page() is included for now. > > > > diff --git a/arch/arm64/kernel/hibernate.c b/arch/arm64/kernel/hibernate.c > > index 750ecc7f2cbe..2e29d620b56c 100644 > > --- a/arch/arm64/kernel/hibernate.c > > +++ b/arch/arm64/kernel/hibernate.c > > @@ -182,39 +182,15 @@ int arch_hibernation_header_restore(void *addr) > > > +int trans_pgd_map_page(pgd_t *trans_pgd, void *page, > > + unsigned long dst_addr, > > + pgprot_t pgprot) > > If this thing is going to be exposed, its name should reflect that its creating a set of > page tables, to map a single page. > > A function called 'map_page' with this prototype should 'obviously' map @page at @dst_addr > in @trans_pgd using the provided @pgprot... but it doesn't. Answered below... > > This is what 'create' was doing in the old name, if that wasn't obvious, its because > naming things is hard! > | trans_create_single_page_mapping()? > > (might be too verbose) > > I think this bites you in patch 8, where you 'generalise' this. The new naming makes more sense to me. The old code had function named: create_safe_exec_page() It was doing four things: 1. creating the actual page via provided allocator, 2. copying content from the provided page to new page, 3 creating a new page table. 4 mapping it to a new page table at specified destination address After, I generalize this the function the prototype looks like this: int trans_pgd_map_page(struct trans_pgd_info *info, pgd_t *trans_pgd, void *page, unsigned long dst_addr, pgprot_t pgprot) The function only does the "4" from the old code: map the specified page at dst_addr. The trans_pgd is already created. Of course, and mapping function will have to allocate missing tables in the page tables when necessary. > > + return 0; > > +} > > + > > +/* > > + * Copies length bytes, starting at src_start into an new page, > > + * perform cache maintentance, then maps it at the specified address low > > Could you fix the spelling of maintenance as git thinks you've moved it? I will. Thank you, Pasha _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec