Thread (109 messages) 109 messages, 6 authors, 2017-10-18
STALE3157d

[PATCH v3 22/28] arm64/sve: KVM: Prevent guests from using SVE

From: Dave.Martin@arm.com (Dave Martin)
Date: 2017-10-13 16:47:07
Also in: kvmarm, linux-arch

On Fri, Oct 13, 2017 at 03:21:59PM +0100, Marc Zyngier wrote:
On 13/10/17 15:15, Dave Martin wrote:
quoted
On Thu, Oct 12, 2017 at 12:28:32PM +0100, Marc Zyngier wrote:
quoted
On 12/10/17 12:04, Dave Martin wrote:
quoted
On Wed, Oct 11, 2017 at 05:28:06PM +0100, Marc Zyngier wrote:
quoted
[+ Christoffer]

On 10/10/17 19:38, Dave Martin wrote:
[...]
quoted
quoted
quoted
quoted
Hmmm. How does this work if...
!IS_ENABLED(CONFIG_ARM64_SVE) implies !system_supports_sve(), so
if CONFIG_ARM64_SVE is not set, the call is optimised away.

[...]
quoted
quoted
diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c
index a9cb794..6ae3703 100644
--- a/arch/arm64/kernel/fpsimd.c
+++ b/arch/arm64/kernel/fpsimd.c
@@ -1073,6 +1073,33 @@ void fpsimd_flush_task_state(struct task_struct *t)
[...]
quoted
quoted
+#ifdef CONFIG_ARM64_SVE
+void sve_flush_cpu_state(void)
+{
+	struct fpsimd_state *const fpstate = __this_cpu_read(fpsimd_last_state);
+	struct task_struct *tsk;
+
+	if (!fpstate)
+		return;
+
+	tsk = container_of(fpstate, struct task_struct, thread.fpsimd_state);
+	if (test_tsk_thread_flag(tsk, TIF_SVE))
+		fpsimd_flush_cpu_state();
+}
+#endif /* CONFIG_ARM64_SVE */
... CONFIG_ARM64_SVE is not set? Fixing this should just be a matter of
moving the #ifdef/#endif inside the function...
Because sve_flush_cpu_state() is not in the same compilation unit it
can't be static, and that means the compiler won't remove it
automatically if it's unused -- hence the #ifdef.

Because the call site is optimised away, there is no link failure.

Don't we rely on this sort of thing all over the place?
Dunno. It just feels weird. But if you are sure that it won't break,
fine by me. I guess we'll find out pretty quickly how this fares,
specially with older toolchains.
I thought this was why the kernel doesn't support building with -O0.
There are many instances of this in the series, not just here.

Let me know if you feel this isn't good enough though.
That's OK to me. As I said, we'll find out pretty quickly if anything
breaks unexpectedly.
Yup
quoted
Do you have any other comments on this patch?
None. You can add my:

Acked-by: Marc Zyngier <redacted>
OK, thanks for the input.

Cheers
---Dave
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help