Re: [PATCH v3 01/20] arm64: explicitly mask all exceptions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi James,

On 05/10/17 20:17, James Morse wrote:
There are a few places where we want to mask all exceptions. Today we
do this in a piecemeal fashion, typically we expect the caller to
have masked irqs and the arch code masks debug exceptions, ignoring
SError which is probably masked.

Make it clear that 'mask all exceptions' is the intention by adding
helpers to do exactly that.

This will let us unmask SError without having to add 'oh and SError'
to these paths.

Signed-off-by: James Morse <james.morse@xxxxxxx>

---
Remove the disable IRQs comment above cpu_die(): we return from idle via
cpu_resume. This comment is confusing once the local_irq_disable() call
is changed.

  arch/arm64/include/asm/assembler.h | 17 +++++++++++
  arch/arm64/include/asm/daifflags.h | 59 ++++++++++++++++++++++++++++++++++++++
  arch/arm64/kernel/hibernate.c      |  5 ++--
  arch/arm64/kernel/machine_kexec.c  |  4 +--
  arch/arm64/kernel/smp.c            |  9 ++----
  arch/arm64/kernel/suspend.c        |  7 +++--
  arch/arm64/kernel/traps.c          |  3 +-
  arch/arm64/mm/proc.S               |  9 +++---
  8 files changed, 94 insertions(+), 19 deletions(-)
  create mode 100644 arch/arm64/include/asm/daifflags.h

[...]

diff --git a/arch/arm64/include/asm/daifflags.h b/arch/arm64/include/asm/daifflags.h
new file mode 100644
index 000000000000..fb40da8e1457
--- /dev/null
+++ b/arch/arm64/include/asm/daifflags.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2017 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef __ASM_DAIFFLAGS_H
+#define __ASM_DAIFFLAGS_H
+
+#include <asm/irqflags.h>
+#include <linux/irqflags.h>
+
+/* Mask/unmask/restore all exceptions, including interrupts. */
+static inline unsigned long local_mask_daif(void)
+{
+	unsigned long flags;
+	asm volatile(
+		"mrs	%0, daif		// local_mask_daif\n"
+		"msr	daifset, #0xf"
+		: "=r" (flags)
+		:
+		: "memory");
+	trace_hardirqs_off();
+	return flags;
+}
+
nit:
Can we call this local_daif_save? (and maybe a version that only disables without saving?)

Also, I was wondering why use 'local' as prefix? Is there gonna be a similar set of function for arm that could be called by common code? (e.g. drivers?)

Otherwise:
Reviewed-by: Julien Thierry <julien.thierry@xxxxxxx>

Cheers,

--
Julien Thierry
_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm



[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux