linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Pavel Tatashin <pasha.tatashin@soleen.com>
To: Marc Zyngier <maz@kernel.org>
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 Deacon <will@kernel.org>,
	 Linux ARM <linux-arm-kernel@lists.infradead.org>,
	James Morse <james.morse@arm.com>,
	 Vladimir Murzin <vladimir.murzin@arm.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	 linux-mm <linux-mm@kvack.org>,
	Mark Rutland <mark.rutland@arm.com>,
	steve.capper@arm.com,  rfontana@redhat.com,
	Thomas Gleixner <tglx@linutronix.de>,
	Selin Dag <selindag@gmail.com>,
	 Tyler Hicks <tyhicks@linux.microsoft.com>,
	Pingfan Liu <kernelfans@gmail.com>,
	 Andrew Morton <akpm@linux-foundation.org>,
	madvenka@linux.microsoft.com
Subject: Re: [PATCH 03/18] arm64: hyp-stub: Move elx_sync into the vectors
Date: Thu, 27 May 2021 17:23:22 -0400	[thread overview]
Message-ID: <CA+CK2bDvsFX_s-G5tRcE1GreNW_xLTognosUFbPPgaUK7-cafQ@mail.gmail.com> (raw)
In-Reply-To: <87sg28rx3c.wl-maz@kernel.org>

On Thu, May 27, 2021 at 11:54 AM Marc Zyngier <maz@kernel.org> wrote:
>
> On Thu, 27 May 2021 16:05:11 +0100,
> Pavel Tatashin <pasha.tatashin@soleen.com> wrote:
> >
> > The hyp-stub's elx_sync code fits in the vector.
> >
> > With this, all of the hyp-stubs behaviour is contained in its vectors.
> > This lets kexec and hibernate copy the hyp-stub when they need its
> > behaviour, instead of re-implementing it.
> >
> > Co-developed-by: James Morse <james.morse@arm.com>
> > Signed-off-by: Pavel Tatashin <pasha.tatashin@soleen.com>
> > ---
> >  arch/arm64/kernel/hyp-stub.S | 64 +++++++++++++++++++-----------------
> >  1 file changed, 33 insertions(+), 31 deletions(-)
> >
> > diff --git a/arch/arm64/kernel/hyp-stub.S b/arch/arm64/kernel/hyp-stub.S
> > index 18a97bee3779..86af6c4e52b9 100644
> > --- a/arch/arm64/kernel/hyp-stub.S
> > +++ b/arch/arm64/kernel/hyp-stub.S
> > @@ -21,6 +21,37 @@ SYM_CODE_START_LOCAL(\label)
> >       .align 7
> >       b       \label
> >  SYM_CODE_END(\label)
> > +.endm
> > +
> > +.macro elx_sync_vector       label
> > +SYM_CODE_START_LOCAL(\label)
> > +     .align 7
> > +     cmp     x0, #HVC_SET_VECTORS
> > +     b.ne    1f
> > +     msr     vbar_el2, x1
> > +     b       9f
> > +
> > +1:   cmp     x0, #HVC_VHE_RESTART
> > +     b.eq    mutate_to_vhe
>
> Now that this has turned into a macro, what are the guarantees that
> mutate_to_vhe will be within reach of the site where this macro is
> expanded? It does work here, but what about the other expansion sites
> that will show up later in the series?
>
> What was wrong with directly branching to the original call site?
> Nothing in the commit message explains it.

Hi Marc,

I need to explain this better in the commit log. Later in the series
we create our own vector copy that is outside of the old and new
kernel so it does not get overwritten during kexec relocation. When
VHE is enabled, the vector is passed so we can switch to el2 before
jumping to the new kernel.

arm64_relocate_new_kernel() which performs the relocation runs with
MMU being enabled until relocation is done, after that disables MMU
and if vectors are passed performs:

         mov     x0, #HVC_SOFT_RESTART
         hvc     #0         /* Jumps from el2 */

It cannot call mutate_to_vhe because #HVC_VHE_RESTART is not used
here. But, if it had to it would not work as we cannot return to the
old kernel text after relocation.

Thanks,
Pasha

>
> Thanks,
>
>         M.
>
> --
> Without deviation from the norm, progress is not possible.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-05-27 21:25 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-27 15:05 [PATCH 00/18] arm64: MMU enabled kexec relocation Pavel Tatashin
2021-05-27 15:05 ` [PATCH 01/18] arm64: hyp-stub: Check the size of the HYP stub's vectors Pavel Tatashin
2021-05-27 15:05 ` [PATCH 02/18] arm64: hyp-stub: Move invalid vector entries into the vectors Pavel Tatashin
2021-05-27 15:05 ` [PATCH 03/18] arm64: hyp-stub: Move elx_sync " Pavel Tatashin
2021-05-27 15:54   ` Marc Zyngier
2021-05-27 21:23     ` Pavel Tatashin [this message]
2021-06-01 12:22       ` Marc Zyngier
2021-06-02  1:18         ` Pavel Tatashin
2021-06-08 17:46           ` Pavel Tatashin
2021-05-27 15:05 ` [PATCH 04/18] arm64: kernel: add helper for booted at EL2 and not VHE Pavel Tatashin
2021-06-01 12:38   ` Marc Zyngier
2021-06-02  1:33     ` Pavel Tatashin
2021-06-02  8:20       ` Marc Zyngier
2021-05-27 15:05 ` [PATCH 05/18] arm64: trans_pgd: hibernate: Add trans_pgd_copy_el2_vectors Pavel Tatashin
2021-05-27 15:05 ` [PATCH 06/18] arm64: hibernate: abstract ttrb0 setup function Pavel Tatashin
2021-05-27 15:05 ` [PATCH 07/18] arm64: kexec: flush image and lists during kexec load time Pavel Tatashin
2021-05-27 15:05 ` [PATCH 08/18] arm64: kexec: skip relocation code for inplace kexec Pavel Tatashin
2021-05-27 15:05 ` [PATCH 09/18] arm64: kexec: Use dcache ops macros instead of open-coding Pavel Tatashin
2021-05-27 15:05 ` [PATCH 10/18] arm64: kexec: pass kimage as the only argument to relocation function Pavel Tatashin
2021-05-27 15:05 ` [PATCH 11/18] arm64: kexec: kexec may require EL2 vectors Pavel Tatashin
2021-05-27 15:05 ` [PATCH 12/18] arm64: kexec: relocate in EL1 mode Pavel Tatashin
2021-05-27 15:05 ` [PATCH 13/18] arm64: kexec: use ld script for relocation function Pavel Tatashin
2021-05-27 15:05 ` [PATCH 14/18] arm64: kexec: install a copy of the linear-map Pavel Tatashin
2021-05-27 15:05 ` [PATCH 15/18] arm64: kexec: keep MMU enabled during kexec relocation Pavel Tatashin
2021-05-27 15:05 ` [PATCH 16/18] arm64: kexec: remove the pre-kexec PoC maintenance Pavel Tatashin
2021-05-27 15:05 ` [PATCH 17/18] arm64: kexec: Remove cpu-reset.h Pavel Tatashin
2021-05-27 15:05 ` [PATCH 18/18] arm64/mm: remove useless trans_pgd_map_page() 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=CA+CK2bDvsFX_s-G5tRcE1GreNW_xLTognosUFbPPgaUK7-cafQ@mail.gmail.com \
    --to=pasha.tatashin@soleen.com \
    --cc=akpm@linux-foundation.org \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=ebiederm@xmission.com \
    --cc=james.morse@arm.com \
    --cc=jmorris@namei.org \
    --cc=kernelfans@gmail.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=madvenka@linux.microsoft.com \
    --cc=mark.rutland@arm.com \
    --cc=matthias.bgg@gmail.com \
    --cc=maz@kernel.org \
    --cc=rfontana@redhat.com \
    --cc=sashal@kernel.org \
    --cc=selindag@gmail.com \
    --cc=steve.capper@arm.com \
    --cc=tglx@linutronix.de \
    --cc=tyhicks@linux.microsoft.com \
    --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).