[PATCH 16/22] Fix IA64 irqflags

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: David Howells
Date: Thursday, August 26, 2010 - 7:00 pm

---

 arch/ia64/include/asm/irqflags.h |   94 ++++++++++++++++++++++++++++++++++++++
 arch/ia64/include/asm/system.h   |   76 -------------------------------
 2 files changed, 94 insertions(+), 76 deletions(-)
 create mode 100644 arch/ia64/include/asm/irqflags.h

diff --git a/arch/ia64/include/asm/irqflags.h b/arch/ia64/include/asm/irqflags.h
new file mode 100644
index 0000000..f82d6be
--- /dev/null
+++ b/arch/ia64/include/asm/irqflags.h
@@ -0,0 +1,94 @@
+/*
+ * IRQ flags defines.
+ *
+ * Copyright (C) 1998-2003 Hewlett-Packard Co
+ *	David Mosberger-Tang <davidm@hpl.hp.com>
+ * Copyright (C) 1999 Asit Mallick <asit.k.mallick@intel.com>
+ * Copyright (C) 1999 Don Dugger <don.dugger@intel.com>
+ */
+
+#ifndef _ASM_IA64_IRQFLAGS_H
+#define _ASM_IA64_IRQFLAGS_H
+
+#ifdef CONFIG_IA64_DEBUG_IRQ
+extern unsigned long last_cli_ip;
+static inline void arch_maybe_save_ip(unsigned long flags)
+{
+	if (flags & IA64_PSR_I)
+		last_cli_ip = ia64_getreg(_IA64_REG_IP);
+}
+#else
+#define arch_maybe_save_ip(flags) do {} while (0)
+#endif
+
+/*
+ * - clearing psr.i is implicitly serialized (visible by next insn)
+ * - setting psr.i requires data serialization
+ * - we need a stop-bit before reading PSR because we sometimes
+ *   write a floating-point register right before reading the PSR
+ *   and that writes to PSR.mfl
+ */
+
+static inline unsigned long arch_local_save_flags(void)
+{
+	ia64_stop();
+#ifdef CONFIG_PARAVIRT
+	return ia64_get_psr_i();
+#else
+	return ia64_getreg(_IA64_REG_PSR);
+#endif
+}
+
+static inline unsigned long arch_local_irq_save(void)
+{
+	unsigned long flags = arch_local_save_flags();
+
+	ia64_stop();
+	ia64_rsm(IA64_PSR_I);
+	arch_maybe_save_ip(flags);
+	return flags;
+}
+
+static inline void arch_local_irq_disable(void)
+{
+#ifdef CONFIG_IA64_DEBUG_IRQ
+	arch_local_irq_save();
+#else
+	ia64_stop();
+	ia64_rsm(IA64_PSR_I);
+#endif
+}
+
+static inline void arch_local_irq_enable(void)
+{
+	ia64_stop();
+	ia64_ssm(IA64_PSR_I);
+	ia64_srlz_d();
+}
+
+static inline void arch_local_irq_restore(unsigned long flags)
+{
+#ifdef CONFIG_IA64_DEBUG_IRQ
+	unsigned long old_psr = arch_local_save_flags();
+#endif
+	ia64_intrin_local_irq_restore(flags & IA64_PSR_I);
+	arch_maybe_save_ip(old_psr & ~flags);
+}
+
+static inline bool arch_irqs_disabled_flags(unsigned long flags)
+{
+	return (flags & IA64_PSR_I) == 0;
+}
+
+static inline bool arch_irqs_disabled(void)
+{
+	return arch_irqs_disabled_flags(arch_local_save_flags());
+}
+
+static inline void arch_safe_halt(void)
+{
+	ia64_pal_halt_light();	/* PAL_HALT_LIGHT */
+}
+
+
+#endif /* _ASM_IA64_IRQFLAGS_H */
diff --git a/arch/ia64/include/asm/system.h b/arch/ia64/include/asm/system.h
index 9f342a5..2feb7f6 100644
--- a/arch/ia64/include/asm/system.h
+++ b/arch/ia64/include/asm/system.h
@@ -107,87 +107,11 @@ extern struct ia64_boot_param {
  */
 #define set_mb(var, value)	do { (var) = (value); mb(); } while (0)
 
-#define safe_halt()         ia64_pal_halt_light()    /* PAL_HALT_LIGHT */
-
 /*
  * The group barrier in front of the rsm & ssm are necessary to ensure
  * that none of the previous instructions in the same group are
  * affected by the rsm/ssm.
  */
-/* For spinlocks etc */
-
-/*
- * - clearing psr.i is implicitly serialized (visible by next insn)
- * - setting psr.i requires data serialization
- * - we need a stop-bit before reading PSR because we sometimes
- *   write a floating-point register right before reading the PSR
- *   and that writes to PSR.mfl
- */
-#ifdef CONFIG_PARAVIRT
-#define __local_save_flags()	ia64_get_psr_i()
-#else
-#define __local_save_flags()	ia64_getreg(_IA64_REG_PSR)
-#endif
-
-#define __local_irq_save(x)			\
-do {						\
-	ia64_stop();				\
-	(x) = __local_save_flags();		\
-	ia64_stop();				\
-	ia64_rsm(IA64_PSR_I);			\
-} while (0)
-
-#define __local_irq_disable()			\
-do {						\
-	ia64_stop();				\
-	ia64_rsm(IA64_PSR_I);			\
-} while (0)
-
-#define __local_irq_restore(x)	ia64_intrin_local_irq_restore((x) & IA64_PSR_I)
-
-#ifdef CONFIG_IA64_DEBUG_IRQ
-
-  extern unsigned long last_cli_ip;
-
-# define __save_ip()		last_cli_ip = ia64_getreg(_IA64_REG_IP)
-
-# define local_irq_save(x)					\
-do {								\
-	unsigned long __psr;					\
-								\
-	__local_irq_save(__psr);				\
-	if (__psr & IA64_PSR_I)					\
-		__save_ip();					\
-	(x) = __psr;						\
-} while (0)
-
-# define local_irq_disable()	do { unsigned long __x; local_irq_save(__x); } while (0)
-
-# define local_irq_restore(x)					\
-do {								\
-	unsigned long __old_psr, __psr = (x);			\
-								\
-	local_save_flags(__old_psr);				\
-	__local_irq_restore(__psr);				\
-	if ((__old_psr & IA64_PSR_I) && !(__psr & IA64_PSR_I))	\
-		__save_ip();					\
-} while (0)
-
-#else /* !CONFIG_IA64_DEBUG_IRQ */
-# define local_irq_save(x)	__local_irq_save(x)
-# define local_irq_disable()	__local_irq_disable()
-# define local_irq_restore(x)	__local_irq_restore(x)
-#endif /* !CONFIG_IA64_DEBUG_IRQ */
-
-#define local_irq_enable()	({ ia64_stop(); ia64_ssm(IA64_PSR_I); ia64_srlz_d(); })
-#define local_save_flags(flags)	({ ia64_stop(); (flags) = __local_save_flags(); })
-
-#define irqs_disabled()				\
-({						\
-	unsigned long __ia64_id_flags;		\
-	local_save_flags(__ia64_id_flags);	\
-	(__ia64_id_flags & IA64_PSR_I) == 0;	\
-})
 
 #ifdef __KERNEL__
 

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 00/22] Name the irq flag handling functions sanely, David Howells, (Thu Aug 26, 6:59 pm)
[PATCH 06/22] Blackfin: Add missing dep to asm/irqflags.h, David Howells, (Thu Aug 26, 6:59 pm)
[PATCH 09/22] h8300: Fix die(), David Howells, (Thu Aug 26, 6:59 pm)
[PATCH 12/22] Fix IRQ flag handling naming, David Howells, (Thu Aug 26, 7:00 pm)
[PATCH 13/22] MIPS: Fix IRQ flags handling, David Howells, (Thu Aug 26, 7:00 pm)
[PATCH 14/22] Fix Alpha irqflags, David Howells, (Thu Aug 26, 7:00 pm)
[PATCH 15/22] Fix H8300 arch, David Howells, (Thu Aug 26, 7:00 pm)
[PATCH 16/22] Fix IA64 irqflags, David Howells, (Thu Aug 26, 7:00 pm)
[PATCH 17/22] Fix m32r irqflags, David Howells, (Thu Aug 26, 7:00 pm)
[PATCH 18/22] Fix M68K irqflags, David Howells, (Thu Aug 26, 7:00 pm)
[PATCH 19/22] Fix PA-RISC irqflags, David Howells, (Thu Aug 26, 7:00 pm)
[PATCH 20/22] Fix powerpc irqflags, David Howells, (Thu Aug 26, 7:00 pm)
[PATCH 21/22] Fix SH irqflags, David Howells, (Thu Aug 26, 7:00 pm)
[PATCH 22/22] Fix Sparc irqflags, David Howells, (Thu Aug 26, 7:00 pm)
Re: [PATCH 18/22] Fix M68K irqflags, Greg Ungerer, (Mon Aug 30, 12:12 am)
Re: [PATCH 18/22] Fix M68K irqflags, David Howells, (Mon Aug 30, 1:50 pm)
Re: [PATCH 18/22] Fix M68K irqflags, Geert Uytterhoeven, (Tue Aug 31, 12:36 am)
Re: [PATCH 18/22] Fix M68K irqflags, David Howells, (Tue Aug 31, 9:00 am)
Re: [PATCH 18/22] Fix M68K irqflags, Greg Ungerer, (Tue Aug 31, 11:33 pm)
Re: [PATCH 18/22] Fix M68K irqflags, Greg Ungerer, (Tue Aug 31, 11:38 pm)
Re: [PATCH 18/22] Fix M68K irqflags, David Howells, (Wed Sep 1, 3:43 am)
Re: [PATCH 18/22] Fix M68K irqflags, David Howells, (Wed Sep 1, 3:46 am)
Re: [PATCH 18/22] Fix M68K irqflags, Greg Ungerer, (Wed Sep 1, 4:21 am)
Re: [PATCH 18/22] Fix M68K irqflags, Greg Ungerer, (Wed Sep 1, 4:22 am)
Re: [PATCH 18/22] Fix M68K irqflags, David Howells, (Wed Sep 1, 4:30 am)
Re: [PATCH 18/22] Fix M68K irqflags, David Howells, (Wed Sep 1, 4:31 am)
Re: [PATCH 18/22] Fix M68K irqflags, Greg Ungerer, (Wed Sep 1, 4:36 am)
Re: [PATCH 18/22] Fix M68K irqflags, David Howells, (Wed Sep 1, 5:03 am)
Re: [PATCH 18/22] Fix M68K irqflags, Greg Ungerer, (Wed Sep 1, 6:46 pm)
Re: [PATCH 18/22] Fix M68K irqflags, David Howells, (Thu Sep 2, 3:20 am)
[PATCH 3/3] Fix M68K irqflags, David Howells, (Thu Sep 2, 3:22 am)
Re: [PATCH 2/3] M68K: Use CONFIG_MMU not __uClinux__ to se ..., Geert Uytterhoeven, (Thu Sep 2, 12:53 pm)
Re: [PATCH 3/3] Fix M68K irqflags, Greg Ungerer, (Thu Sep 2, 6:28 pm)
Re: [PATCH 19/22] Fix PA-RISC irqflags, Kyle McMartin, (Thu Sep 2, 6:40 pm)
Re: [PATCH 3/3] Fix M68K irqflags, David Howells, (Thu Sep 2, 11:44 pm)
Re: [PATCH 19/22] Fix PA-RISC irqflags, David Howells, (Thu Sep 2, 11:48 pm)
Re: [PATCH 3/3] Fix M68K irqflags, Greg Ungerer, (Thu Sep 2, 11:53 pm)
Re: [PATCH 3/3] Fix M68K irqflags, David Howells, (Fri Sep 3, 12:28 am)
Re: [PATCH 3/3] Fix M68K irqflags, David Howells, (Fri Sep 3, 1:05 am)
Re: [PATCH 3/3] Fix M68K irqflags, Greg Ungerer, (Fri Sep 3, 2:28 am)
Re: [PATCH 2/3] M68K: Use CONFIG_MMU not __uClinux__ to se ..., Geert Uytterhoeven, (Fri Sep 3, 2:33 am)
Re: [PATCH 2/3] M68K: Use CONFIG_MMU not __uClinux__ to se ..., Geert Uytterhoeven, (Fri Sep 3, 3:02 am)
Re: [PATCH 3/3] Fix M68K irqflags, David Howells, (Fri Sep 3, 3:05 am)
Re: [PATCH 3/3] Fix M68K irqflags, Greg Ungerer, (Fri Sep 3, 3:38 am)
Re: [PATCH 19/22] Fix PA-RISC irqflags, Kyle McMartin, (Fri Sep 3, 6:31 am)