Thread (44 messages) 44 messages, 2 authors, 2019-10-11

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 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.
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 low
Could 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help