Re: [PATCH v3 06/17] arm64, hibernate: add trans_pgd public functions
flat view
From: Pavel Tatashin <pasha.tatashin@soleen.com>
Date: 2019-09-06 16:00:33
Also in:
kexec, linux-mm, lkml
On Fri, Sep 6, 2019 at 11:18 AM James Morse [off-list ref] wrote:
Hi Pavel, On 21/08/2019 19:31, Pavel Tatashin wrote:quoted
trans_pgd_create_copy() and trans_pgd_map_page() are going to be the basis for public interface of new subsystem that handles pagePlease 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.
quoted
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.
quoted
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)quoted
+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.
quoted
+ return 0; +} + +/* + * Copies length bytes, starting at src_start into an new page, + * perform cache maintentance, then maps it at the specified address lowCould you fix the spelling of maintenance as git thinks you've moved it?
I will. Thank you, Pasha _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel