linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: James Morse <james.morse@arm.com>
To: Pavel Tatashin <pasha.tatashin@soleen.com>
Cc: James Morris <jmorris@namei.org>, Sasha Levin <sashal@kernel.org>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	kexec mailing list <kexec@lists.infradead.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Jonathan Corbet <corbet@lwn.net>,
	Catalin Marinas <catalin.marinas@arm.com>,
	will@kernel.org, Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Vladimir Murzin <vladimir.murzin@arm.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Bhupesh Sharma <bhsharma@redhat.com>,
	linux-mm <linux-mm@kvack.org>,
	Mark Rutland <mark.rutland@arm.com>
Subject: Re: [PATCH v3 06/17] arm64, hibernate: add trans_pgd public functions
Date: Fri, 11 Oct 2019 19:16:50 +0100	[thread overview]
Message-ID: <f1dbf5c6-7caf-daae-aec4-9a47a367c119@arm.com> (raw)
In-Reply-To: <CA+CK2bCwRm_AQHzrJ8tdjp5k6Yj+32yRsvQsOoy7b44GTdd6wQ@mail.gmail.com>

Hi Pavel,

On 06/09/2019 17:00, Pavel Tatashin wrote:
> On Fri, Sep 6, 2019 at 11:18 AM James Morse <james.morse@arm.com> wrote:
>> 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 don't like the trans_pgd_ name either, but I can't think of anything better, and its
only a name.


> I won't fix log commits.

Please avoid the word 'subsystem',


>>> 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

Yup, all implied in the work of creation.


> 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.

Which one is this?
The existing hibernate code has two PGD. One for the copy of the linear-map, one for this
safe page that contains the code doing the copying.


> Of course, and
> mapping function will have to allocate missing tables in the page
> tables when necessary.

I think you are over generalising this, to support a case that doesn't exist.

Hibernate needs a copy of the linear map to relocate memory, without stepping in
page-table, and an executable page it can do that from.

To get kexec to relocate the kernel with the MMU on... you need the same.

When do you need to add an arbitrary page to either of these sets of tables? Its either a
copy of the linear-map, or the single executable page.

When would does 'trans_pgd_map_page()' get used outside those two?

(looking in your later series, I see you are using it to try and idmap stuff into the low
memory. We can't do stuff like this because there may not be any memory in range of the
page table helpers. More details in that patch)


Thanks,

James

  reply	other threads:[~2019-10-11 18:16 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-21 18:31 [PATCH v3 00/17] arm64: MMU enabled kexec relocation Pavel Tatashin
2019-08-21 18:31 ` [PATCH v3 01/17] kexec: quiet down kexec reboot Pavel Tatashin
2019-09-06 15:17   ` James Morse
2019-09-06 15:35     ` Pavel Tatashin
2019-08-21 18:31 ` [PATCH v3 02/17] arm64, hibernate: use get_safe_page directly Pavel Tatashin
2019-09-06 15:17   ` James Morse
2019-09-06 15:39     ` Pavel Tatashin
2019-08-21 18:31 ` [PATCH v3 03/17] arm64, hibernate: remove gotos in create_safe_exec_page Pavel Tatashin
2019-09-06 15:17   ` James Morse
2019-09-06 15:41     ` Pavel Tatashin
2019-08-21 18:31 ` [PATCH v3 04/17] arm64, hibernate: rename dst to page " Pavel Tatashin
2019-09-06 15:17   ` James Morse
2019-09-06 15:41     ` Pavel Tatashin
2019-08-21 18:31 ` [PATCH v3 05/17] arm64, hibernate: check pgd table allocation Pavel Tatashin
2019-09-06 15:17   ` James Morse
2019-09-06 15:44     ` Pavel Tatashin
2019-08-21 18:31 ` [PATCH v3 06/17] arm64, hibernate: add trans_pgd public functions Pavel Tatashin
2019-09-06 15:18   ` James Morse
2019-09-06 16:00     ` Pavel Tatashin
2019-10-11 18:16       ` James Morse [this message]
2019-08-21 18:31 ` [PATCH v3 07/17] arm64, hibernate: move page handling function to new trans_pgd.c Pavel Tatashin
2019-09-06 15:18   ` James Morse
2019-09-06 17:41     ` Pavel Tatashin
2019-08-21 18:31 ` [PATCH v3 08/17] arm64, trans_pgd: make trans_pgd_map_page generic Pavel Tatashin
2019-09-06 15:20   ` James Morse
2019-09-06 18:58     ` Pavel Tatashin
2019-10-11 18:15       ` James Morse
2019-08-21 18:31 ` [PATCH v3 09/17] arm64, trans_pgd: add trans_pgd_create_empty Pavel Tatashin
2019-09-06 15:20   ` James Morse
2019-09-06 19:00     ` Pavel Tatashin
2019-08-21 18:31 ` [PATCH v3 10/17] arm64, trans_pgd: adjust trans_pgd_create_copy interface Pavel Tatashin
2019-09-06 15:20   ` James Morse
2019-09-06 19:03     ` Pavel Tatashin
2019-08-21 18:31 ` [PATCH v3 11/17] arm64, trans_pgd: add PUD_SECT_RDONLY Pavel Tatashin
2019-09-06 15:21   ` James Morse
2019-09-06 19:04     ` Pavel Tatashin
2019-08-21 18:31 ` [PATCH v3 12/17] arm64, trans_pgd: complete generalization of trans_pgds Pavel Tatashin
2019-09-06 15:23   ` James Morse
2019-09-06 19:06     ` Pavel Tatashin
2019-08-21 18:32 ` [PATCH v3 13/17] kexec: add machine_kexec_post_load() Pavel Tatashin
2019-08-21 18:32 ` [PATCH v3 14/17] arm64, kexec: move relocation function setup and clean up Pavel Tatashin
2019-08-21 18:32 ` [PATCH v3 15/17] arm64, kexec: add expandable argument to relocation function Pavel Tatashin
2019-08-21 18:32 ` [PATCH v3 16/17] arm64, kexec: configure trans_pgd page table for kexec Pavel Tatashin
2019-08-21 18:32 ` [PATCH v3 17/17] arm64, kexec: enable MMU during kexec relocation Pavel Tatashin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f1dbf5c6-7caf-daae-aec4-9a47a367c119@arm.com \
    --to=james.morse@arm.com \
    --cc=bhsharma@redhat.com \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=ebiederm@xmission.com \
    --cc=jmorris@namei.org \
    --cc=kexec@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=matthias.bgg@gmail.com \
    --cc=pasha.tatashin@soleen.com \
    --cc=sashal@kernel.org \
    --cc=vladimir.murzin@arm.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).