All of lore.kernel.org
 help / color / mirror / Atom feed
From: Qais Yousef <qais.yousef@arm.com>
To: Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>, Marc Zyngier <maz@kernel.org>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>
Cc: Morten Rasmussen <morten.rasmussen@arm.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	linux-arm-kernel@lists.infradead.org, linux-arch@vger.kernel.org,
	Qais Yousef <qais.yousef@arm.com>
Subject: [RFC PATCH 0/3] Add support for Asymmetric AArch32 systems
Date: Thu,  8 Oct 2020 19:16:38 +0100	[thread overview]
Message-ID: <20201008181641.32767-1-qais.yousef@arm.com> (raw)

This RFC series enables AArch32 EL0 support on systems where only a subset of
CPUs implement it. AArch32 feature asymmetry comes with downsides, but it is
likely that some vendors are willing to accept those to maintain AArch32 EL0
support on systems where some cores are AArch64 only.

Enabling AArch32 when it isn't supported on all CPUs inevitably requires
careful affinity management of AArch32 tasks. The bare minimum kernel support
is offered by the second patch which put the burden of managing task affinity
entirely on user-space. AAarch32 tasks receive SIGKILL if they try to run on
a non-AArch32 CPU. The third patch is optional and overrides task affinity in
some cases to prevent AArch32 tasks getting SIGKILL.

We don't expose the asymmetry to userspace. If we want to delegate affinity
management to user space we need to introduce a way to do that.
/sys/devices/system/cpu/cpu*/regs/identification/midr_el1 contains the specific
CPU ID. This could be extended to expose the other ID_* registers where the
AArch32 feature can be detected.

If the user hotplugs all 32bit capable CPUs, then all running 32bit tasks will
be SIGKILLed if scheduled.

Patch 1 ensures KVM handles such systems properly. Especially if the guest is
misbehaving and tries to force run aarch32 regardless of what ID registers
advertise.

Patch 2 introduces basic asymetric aarch32 support. It will SIGKILL any task as
soon as it scheduled on the wrong CPU even if its affinity allows it to migrate
to a capable CPU.

Patch 3 suggests how handling the affinity problem could be done in the kernel.
It's not a generic solution, rather a demonstration of what could potentially
be done.

Qais Yousef (3):
  arm64: kvm: Handle Asymmetric AArch32 systems
  arm64: Add support for asymmetric AArch32 EL0 configurations
  arm64: Handle AArch32 tasks running on non AArch32 cpu

 arch/arm64/Kconfig                   | 14 +++++
 arch/arm64/include/asm/cpu.h         |  2 +
 arch/arm64/include/asm/cpucaps.h     |  3 +-
 arch/arm64/include/asm/cpufeature.h  | 22 +++++++-
 arch/arm64/include/asm/thread_info.h |  5 +-
 arch/arm64/kernel/cpufeature.c       | 77 ++++++++++++++++++----------
 arch/arm64/kernel/cpuinfo.c          | 71 +++++++++++++++----------
 arch/arm64/kernel/process.c          | 17 ++++++
 arch/arm64/kernel/signal.c           | 33 ++++++++++++
 arch/arm64/kvm/arm.c                 | 17 ++++++
 arch/arm64/kvm/guest.c               |  2 +-
 arch/arm64/kvm/sys_regs.c            | 14 ++++-
 12 files changed, 218 insertions(+), 59 deletions(-)

-- 
2.17.1


WARNING: multiple messages have this Message-ID (diff)
From: Qais Yousef <qais.yousef@arm.com>
To: Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>, Marc Zyngier <maz@kernel.org>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>
Cc: linux-arch@vger.kernel.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Qais Yousef <qais.yousef@arm.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Morten Rasmussen <morten.rasmussen@arm.com>,
	linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH 0/3] Add support for Asymmetric AArch32 systems
Date: Thu,  8 Oct 2020 19:16:38 +0100	[thread overview]
Message-ID: <20201008181641.32767-1-qais.yousef@arm.com> (raw)

This RFC series enables AArch32 EL0 support on systems where only a subset of
CPUs implement it. AArch32 feature asymmetry comes with downsides, but it is
likely that some vendors are willing to accept those to maintain AArch32 EL0
support on systems where some cores are AArch64 only.

Enabling AArch32 when it isn't supported on all CPUs inevitably requires
careful affinity management of AArch32 tasks. The bare minimum kernel support
is offered by the second patch which put the burden of managing task affinity
entirely on user-space. AAarch32 tasks receive SIGKILL if they try to run on
a non-AArch32 CPU. The third patch is optional and overrides task affinity in
some cases to prevent AArch32 tasks getting SIGKILL.

We don't expose the asymmetry to userspace. If we want to delegate affinity
management to user space we need to introduce a way to do that.
/sys/devices/system/cpu/cpu*/regs/identification/midr_el1 contains the specific
CPU ID. This could be extended to expose the other ID_* registers where the
AArch32 feature can be detected.

If the user hotplugs all 32bit capable CPUs, then all running 32bit tasks will
be SIGKILLed if scheduled.

Patch 1 ensures KVM handles such systems properly. Especially if the guest is
misbehaving and tries to force run aarch32 regardless of what ID registers
advertise.

Patch 2 introduces basic asymetric aarch32 support. It will SIGKILL any task as
soon as it scheduled on the wrong CPU even if its affinity allows it to migrate
to a capable CPU.

Patch 3 suggests how handling the affinity problem could be done in the kernel.
It's not a generic solution, rather a demonstration of what could potentially
be done.

Qais Yousef (3):
  arm64: kvm: Handle Asymmetric AArch32 systems
  arm64: Add support for asymmetric AArch32 EL0 configurations
  arm64: Handle AArch32 tasks running on non AArch32 cpu

 arch/arm64/Kconfig                   | 14 +++++
 arch/arm64/include/asm/cpu.h         |  2 +
 arch/arm64/include/asm/cpucaps.h     |  3 +-
 arch/arm64/include/asm/cpufeature.h  | 22 +++++++-
 arch/arm64/include/asm/thread_info.h |  5 +-
 arch/arm64/kernel/cpufeature.c       | 77 ++++++++++++++++++----------
 arch/arm64/kernel/cpuinfo.c          | 71 +++++++++++++++----------
 arch/arm64/kernel/process.c          | 17 ++++++
 arch/arm64/kernel/signal.c           | 33 ++++++++++++
 arch/arm64/kvm/arm.c                 | 17 ++++++
 arch/arm64/kvm/guest.c               |  2 +-
 arch/arm64/kvm/sys_regs.c            | 14 ++++-
 12 files changed, 218 insertions(+), 59 deletions(-)

-- 
2.17.1


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

             reply	other threads:[~2020-10-08 18:16 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-08 18:16 Qais Yousef [this message]
2020-10-08 18:16 ` [RFC PATCH 0/3] Add support for Asymmetric AArch32 systems Qais Yousef
2020-10-08 18:16 ` [RFC PATCH 1/3] arm64: kvm: Handle " Qais Yousef
2020-10-08 18:16   ` Qais Yousef
2020-10-09  8:12   ` Marc Zyngier
2020-10-09  8:12     ` Marc Zyngier
2020-10-09  9:58     ` Qais Yousef
2020-10-09  9:58       ` Qais Yousef
2020-10-09 12:34       ` Marc Zyngier
2020-10-09 12:34         ` Marc Zyngier
2020-10-09 12:48         ` Qais Yousef
2020-10-09 12:48           ` Qais Yousef
2020-10-12 15:32           ` James Morse
2020-10-12 15:32             ` James Morse
2020-10-13 10:32             ` Marc Zyngier
2020-10-13 10:32               ` Marc Zyngier
2020-10-13 11:51               ` James Morse
2020-10-13 11:51                 ` James Morse
2020-10-13 11:59                 ` Qais Yousef
2020-10-13 11:59                   ` Qais Yousef
2020-10-13 12:09                   ` Marc Zyngier
2020-10-13 12:09                     ` Marc Zyngier
2020-10-13 12:16                     ` Qais Yousef
2020-10-13 12:16                       ` Qais Yousef
2020-10-08 18:16 ` [RFC PATCH 2/3] arm64: Add support for asymmetric AArch32 EL0 configurations Qais Yousef
2020-10-08 18:16   ` Qais Yousef
2020-10-08 18:22   ` Randy Dunlap
2020-10-08 18:22     ` Randy Dunlap
2020-10-12 10:22     ` Qais Yousef
2020-10-12 10:22       ` Qais Yousef
2020-10-09  6:13   ` Greg Kroah-Hartman
2020-10-09  6:13     ` Greg Kroah-Hartman
2020-10-09  8:40     ` Will Deacon
2020-10-09  8:40       ` Will Deacon
2020-10-09  8:50     ` Catalin Marinas
2020-10-09  8:50       ` Catalin Marinas
2020-10-09  9:39   ` Catalin Marinas
2020-10-09  9:39     ` Catalin Marinas
2020-10-12 12:46     ` Qais Yousef
2020-10-12 12:46       ` Qais Yousef
2020-10-08 18:16 ` [RFC PATCH 3/3] arm64: Handle AArch32 tasks running on non AArch32 cpu Qais Yousef
2020-10-08 18:16   ` Qais Yousef
2020-10-09  7:29   ` Peter Zijlstra
2020-10-09  7:29     ` Peter Zijlstra
2020-10-09  8:13     ` Morten Rasmussen
2020-10-09  8:13       ` Morten Rasmussen
2020-10-09  8:31       ` Will Deacon
2020-10-09  8:31         ` Will Deacon
2020-10-09  8:50         ` Morten Rasmussen
2020-10-09  8:50           ` Morten Rasmussen
2020-10-09  9:33         ` Catalin Marinas
2020-10-09  9:33           ` Catalin Marinas
2020-10-09  9:42           ` Greg Kroah-Hartman
2020-10-09  9:42             ` Greg Kroah-Hartman
2020-10-09 11:31           ` Qais Yousef
2020-10-09 11:31             ` Qais Yousef
2020-10-09 12:40             ` Catalin Marinas
2020-10-09 12:40               ` Catalin Marinas
2020-10-13 14:23               ` Qais Yousef
2020-10-13 14:23                 ` Qais Yousef
2020-10-09  9:25       ` Peter Zijlstra
2020-10-09  9:25         ` Peter Zijlstra
2020-10-09  9:39         ` Qais Yousef
2020-10-09  9:39           ` Qais Yousef
2020-10-09  9:51         ` Catalin Marinas
2020-10-09  9:51           ` Catalin Marinas

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=20201008181641.32767-1-qais.yousef@arm.com \
    --to=qais.yousef@arm.com \
    --cc=catalin.marinas@arm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=maz@kernel.org \
    --cc=morten.rasmussen@arm.com \
    --cc=peterz@infradead.org \
    --cc=torvalds@linux-foundation.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.