linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: Pavel Tatashin <pasha.tatashin@soleen.com>
Cc: jmorris@namei.org, sashal@kernel.org, ebiederm@xmission.com,
	kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
	corbet@lwn.net, catalin.marinas@arm.com, will@kernel.org,
	linux-arm-kernel@lists.infradead.org, james.morse@arm.com,
	vladimir.murzin@arm.com, matthias.bgg@gmail.com,
	linux-mm@kvack.org, mark.rutland@arm.com, steve.capper@arm.com,
	rfontana@redhat.com, tglx@linutronix.de, selindag@gmail.com,
	tyhicks@linux.microsoft.com, kernelfans@gmail.com,
	akpm@linux-foundation.org, madvenka@linux.microsoft.com
Subject: Re: [PATCH 04/18] arm64: kernel: add helper for booted at EL2 and not VHE
Date: Tue, 01 Jun 2021 13:38:17 +0100	[thread overview]
Message-ID: <87pmx52212.wl-maz@kernel.org> (raw)
In-Reply-To: <20210527150526.271941-5-pasha.tatashin@soleen.com>

On Thu, 27 May 2021 16:05:12 +0100,
Pavel Tatashin <pasha.tatashin@soleen.com> wrote:
> 
> Replace places that contain logic like this:
> 	is_hyp_mode_available() && !is_kernel_in_hyp_mode()
> 
> With a dedicated boolean function  is_hyp_callable(). This will be needed
> later in kexec in order to sooner switch back to EL2.

This looks like the very definition of "run in nVHE mode", so I'd
rather you call it like this, rather than "callable", which is
extremely ambiguous (if running at EL2, I call it any time I want, for
free).

> 
> Suggested-by: James Morse <james.morse@arm.com>
> 
> [Fixed merging issues]
> 
> Signed-off-by: Pavel Tatashin <pasha.tatashin@soleen.com>
> ---
>  arch/arm64/include/asm/virt.h | 5 +++++
>  arch/arm64/kernel/cpu-reset.h | 3 +--
>  arch/arm64/kernel/hibernate.c | 9 +++------
>  arch/arm64/kernel/sdei.c      | 2 +-
>  4 files changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/virt.h b/arch/arm64/include/asm/virt.h
> index 7379f35ae2c6..4216c8623538 100644
> --- a/arch/arm64/include/asm/virt.h
> +++ b/arch/arm64/include/asm/virt.h
> @@ -128,6 +128,11 @@ static __always_inline bool is_protected_kvm_enabled(void)
>  		return cpus_have_final_cap(ARM64_KVM_PROTECTED_MODE);
>  }
>  
> +static inline bool is_hyp_callable(void)
> +{
> +	return is_hyp_mode_available() && !is_kernel_in_hyp_mode();
> +}

nit: consider switching the two members of the expression so that you
don't have extra memory accesses when running at EL2.

> +
>  #endif /* __ASSEMBLY__ */
>  
>  #endif /* ! __ASM__VIRT_H */
> diff --git a/arch/arm64/kernel/cpu-reset.h b/arch/arm64/kernel/cpu-reset.h
> index 9a7b1262ef17..48d0ed48c147 100644
> --- a/arch/arm64/kernel/cpu-reset.h
> +++ b/arch/arm64/kernel/cpu-reset.h
> @@ -20,8 +20,7 @@ static inline void __noreturn __nocfi cpu_soft_restart(unsigned long entry,
>  {
>  	typeof(__cpu_soft_restart) *restart;
>  
> -	unsigned long el2_switch = !is_kernel_in_hyp_mode() &&
> -		is_hyp_mode_available();
> +	unsigned long el2_switch = is_hyp_callable();
>  	restart = (void *)__pa_symbol(function_nocfi(__cpu_soft_restart));
>  
>  	cpu_install_idmap();
> diff --git a/arch/arm64/kernel/hibernate.c b/arch/arm64/kernel/hibernate.c
> index b1cef371df2b..c764574a1acb 100644
> --- a/arch/arm64/kernel/hibernate.c
> +++ b/arch/arm64/kernel/hibernate.c
> @@ -48,9 +48,6 @@
>   */
>  extern int in_suspend;
>  
> -/* Do we need to reset el2? */
> -#define el2_reset_needed() (is_hyp_mode_available() && !is_kernel_in_hyp_mode())
> -

Please keep the macro, as it explains *why* we're doing things (we
need to reset EL2), and replacing it with a generic macro drops the
documentation aspect.

>  /* temporary el2 vectors in the __hibernate_exit_text section. */
>  extern char hibernate_el2_vectors[];
>  
> @@ -125,7 +122,7 @@ int arch_hibernation_header_save(void *addr, unsigned int max_size)
>  	hdr->reenter_kernel	= _cpu_resume;
>  
>  	/* We can't use __hyp_get_vectors() because kvm may still be loaded */
> -	if (el2_reset_needed())
> +	if (is_hyp_callable())
>  		hdr->__hyp_stub_vectors = __pa_symbol(__hyp_stub_vectors);
>  	else
>  		hdr->__hyp_stub_vectors = 0;
> @@ -387,7 +384,7 @@ int swsusp_arch_suspend(void)
>  		dcache_clean_range(__idmap_text_start, __idmap_text_end);
>  
>  		/* Clean kvm setup code to PoC? */
> -		if (el2_reset_needed()) {
> +		if (is_hyp_callable()) {
>  			dcache_clean_range(__hyp_idmap_text_start, __hyp_idmap_text_end);
>  			dcache_clean_range(__hyp_text_start, __hyp_text_end);
>  		}
> @@ -482,7 +479,7 @@ int swsusp_arch_resume(void)
>  	 *
>  	 * We can skip this step if we booted at EL1, or are running with VHE.
>  	 */
> -	if (el2_reset_needed()) {
> +	if (is_hyp_callable()) {
>  		phys_addr_t el2_vectors = (phys_addr_t)hibernate_exit;
>  		el2_vectors += hibernate_el2_vectors -
>  			       __hibernate_exit_text_start;     /* offset */
> diff --git a/arch/arm64/kernel/sdei.c b/arch/arm64/kernel/sdei.c
> index 2c7ca449dd51..af0ac2f920cf 100644
> --- a/arch/arm64/kernel/sdei.c
> +++ b/arch/arm64/kernel/sdei.c
> @@ -200,7 +200,7 @@ unsigned long sdei_arch_get_entry_point(int conduit)
>  	 * dropped to EL1 because we don't support VHE, then we can't support
>  	 * SDEI.
>  	 */
> -	if (is_hyp_mode_available() && !is_kernel_in_hyp_mode()) {
> +	if (is_hyp_callable()) {
>  		pr_err("Not supported on this hardware/boot configuration\n");
>  		goto out_err;
>  	}
> -- 
> 2.25.1
> 
> 

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-06-01 12:39 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
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 [this message]
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=87pmx52212.wl-maz@kernel.org \
    --to=maz@kernel.org \
    --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=pasha.tatashin@soleen.com \
    --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).