Merge git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-2.6-irqflags
* git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-2.6-irqflags: Fix IRQ flag handling naming MIPS: Add missing #inclusions of <linux/irq.h> smc91x: Add missing #inclusion of <linux/irq.h> Drop a couple of unnecessary asm/system.h inclusions SH: Add missing consts to sys_execve() declaration Blackfin: Rename IRQ flags handling functions Blackfin: Add missing dep to asm/irqflags.h Blackfin: Rename DES PC2() symbol to avoid collision Blackfin: Split the BF532 BFIN_*_FIO_FLAG() functions to their own header Blackfin: Split PLL code from mach-specific cdef headers
This commit is contained in:
94
arch/ia64/include/asm/irqflags.h
Normal file
94
arch/ia64/include/asm/irqflags.h
Normal file
@@ -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 */
|
@@ -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__
|
||||
|
||||
|
Reference in New Issue
Block a user