Skip to content

Commit

Permalink
Blackfin: Rename IRQ flags handling functions
Browse files Browse the repository at this point in the history
Rename h/w IRQ flags handling functions to be in line with what is expected for
the irq renaming patch.  This renames local_*_hw() to hard_local_*() using the
following perl command:

	perl -pi -e 's/local_irq_(restore|enable|disable)_hw/hard_local_irq_\1/ or s/local_irq_save_hw([_a-z]*)[(]flags[)]/flags = hard_local_irq_save\1()/' `find arch/blackfin/ -name "*.[ch]"`

and then fixing up asm/irqflags.h manually.

Additionally, arch/hard_local_save_flags() and arch/hard_local_irq_save() both
return the flags rather than passing it through the argument list.

Signed-off-by: David Howells <dhowells@redhat.com>
  • Loading branch information
David Howells committed Oct 7, 2010
1 parent 5c74874 commit 3b139cd
Show file tree
Hide file tree
Showing 19 changed files with 284 additions and 274 deletions.
8 changes: 4 additions & 4 deletions arch/blackfin/include/asm/ipipe.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,15 @@
#define prepare_arch_switch(next) \
do { \
ipipe_schedule_notify(current, next); \
local_irq_disable_hw(); \
hard_local_irq_disable(); \
} while (0)

#define task_hijacked(p) \
({ \
int __x__ = __ipipe_root_domain_p; \
__clear_bit(IPIPE_SYNC_FLAG, &ipipe_root_cpudom_var(status)); \
if (__x__) \
local_irq_enable_hw(); \
hard_local_irq_enable(); \
!__x__; \
})

Expand Down Expand Up @@ -167,7 +167,7 @@ static inline unsigned long __ipipe_ffnz(unsigned long ul)
#define __ipipe_run_isr(ipd, irq) \
do { \
if (!__ipipe_pipeline_head_p(ipd)) \
local_irq_enable_hw(); \
hard_local_irq_enable(); \
if (ipd == ipipe_root_domain) { \
if (unlikely(ipipe_virtual_irq_p(irq))) { \
irq_enter(); \
Expand All @@ -183,7 +183,7 @@ static inline unsigned long __ipipe_ffnz(unsigned long ul)
__ipipe_run_irqtail(); \
__set_bit(IPIPE_SYNC_FLAG, &ipipe_cpudom_var(ipd, status)); \
} \
local_irq_disable_hw(); \
hard_local_irq_disable(); \
} while (0)

#define __ipipe_syscall_watched_p(p, sc) \
Expand Down
284 changes: 147 additions & 137 deletions arch/blackfin/include/asm/irqflags.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,191 +33,201 @@ static inline unsigned long bfin_cli(void)
return flags;
}

#ifdef CONFIG_IPIPE

#include <linux/compiler.h>
#include <linux/ipipe_base.h>
#include <linux/ipipe_trace.h>

#ifdef CONFIG_DEBUG_HWERR
# define bfin_no_irqs 0x3f
#else
# define bfin_no_irqs 0x1f
#endif

#define raw_local_irq_disable() \
do { \
ipipe_check_context(ipipe_root_domain); \
__ipipe_stall_root(); \
barrier(); \
} while (0)

#define raw_local_irq_enable() \
do { \
barrier(); \
ipipe_check_context(ipipe_root_domain); \
__ipipe_unstall_root(); \
} while (0)

#define raw_local_save_flags_ptr(x) \
do { \
*(x) = __ipipe_test_root() ? bfin_no_irqs : bfin_irq_flags; \
} while (0)

#define raw_local_save_flags(x) raw_local_save_flags_ptr(&(x))

#define raw_irqs_disabled_flags(x) ((x) == bfin_no_irqs)

#define raw_local_irq_save_ptr(x) \
do { \
*(x) = __ipipe_test_and_stall_root() ? bfin_no_irqs : bfin_irq_flags; \
barrier(); \
} while (0)
/*****************************************************************************/
/*
* Hard, untraced CPU interrupt flag manipulation and access.
*/
static inline void __hard_local_irq_disable(void)
{
bfin_cli();
}

#define raw_local_irq_save(x) \
do { \
ipipe_check_context(ipipe_root_domain); \
raw_local_irq_save_ptr(&(x)); \
} while (0)
static inline void __hard_local_irq_enable(void)
{
bfin_sti(bfin_irq_flags);
}

static inline unsigned long raw_mangle_irq_bits(int virt, unsigned long real)
static inline unsigned long hard_local_save_flags(void)
{
/*
* Merge virtual and real interrupt mask bits into a single
* 32bit word.
*/
return (real & ~(1 << 31)) | ((virt != 0) << 31);
return bfin_read_IMASK();
}

static inline int raw_demangle_irq_bits(unsigned long *x)
static inline unsigned long __hard_local_irq_save(void)
{
int virt = (*x & (1 << 31)) != 0;
*x &= ~(1L << 31);
return virt;
unsigned long flags;
flags = bfin_cli();
#ifdef CONFIG_DEBUG_HWERR
bfin_sti(0x3f);
#endif
return flags;
}

static inline void local_irq_disable_hw_notrace(void)
static inline int hard_irqs_disabled_flags(unsigned long flags)
{
bfin_cli();
return (flags & ~0x3f) == 0;
}

static inline void local_irq_enable_hw_notrace(void)
static inline int hard_irqs_disabled(void)
{
bfin_sti(bfin_irq_flags);
unsigned long flags = hard_local_save_flags();
return hard_irqs_disabled_flags(flags);
}

#define local_save_flags_hw(flags) \
do { \
(flags) = bfin_read_IMASK(); \
} while (0)
static inline void __hard_local_irq_restore(unsigned long flags)
{
if (!hard_irqs_disabled_flags(flags))
__hard_local_irq_enable();
}

#define irqs_disabled_flags_hw(flags) (((flags) & ~0x3f) == 0)
/*****************************************************************************/
/*
* Interrupt pipe handling.
*/
#ifdef CONFIG_IPIPE

#define irqs_disabled_hw() \
({ \
unsigned long flags; \
local_save_flags_hw(flags); \
irqs_disabled_flags_hw(flags); \
})
#include <linux/compiler.h>
#include <linux/ipipe_base.h>
#include <linux/ipipe_trace.h>

static inline void local_irq_save_ptr_hw(unsigned long *flags)
/*
* Interrupt pipe interface to linux/irqflags.h.
*/
static inline void arch_local_irq_disable(void)
{
*flags = bfin_cli();
#ifdef CONFIG_DEBUG_HWERR
bfin_sti(0x3f);
#endif
ipipe_check_context(ipipe_root_domain);
__ipipe_stall_root();
barrier();
}

#define local_irq_save_hw_notrace(flags) \
do { \
local_irq_save_ptr_hw(&(flags)); \
} while (0)
static inline void arch_local_irq_enable(void)
{
barrier();
ipipe_check_context(ipipe_root_domain);
__ipipe_unstall_root();
}

static inline void local_irq_restore_hw_notrace(unsigned long flags)
static inline unsigned long arch_local_save_flags(void)
{
if (!irqs_disabled_flags_hw(flags))
local_irq_enable_hw_notrace();
return __ipipe_test_root() ? bfin_no_irqs : bfin_irq_flags;
}

#ifdef CONFIG_IPIPE_TRACE_IRQSOFF
# define local_irq_disable_hw() \
do { \
if (!irqs_disabled_hw()) { \
local_irq_disable_hw_notrace(); \
ipipe_trace_begin(0x80000000); \
} \
} while (0)
# define local_irq_enable_hw() \
do { \
if (irqs_disabled_hw()) { \
ipipe_trace_end(0x80000000); \
local_irq_enable_hw_notrace(); \
} \
} while (0)
# define local_irq_save_hw(flags) \
do { \
local_save_flags_hw(flags); \
if (!irqs_disabled_flags_hw(flags)) { \
local_irq_disable_hw_notrace(); \
ipipe_trace_begin(0x80000001); \
} \
} while (0)
# define local_irq_restore_hw(flags) \
do { \
if (!irqs_disabled_flags_hw(flags)) { \
ipipe_trace_end(0x80000001); \
local_irq_enable_hw_notrace(); \
} \
} while (0)
#else /* !CONFIG_IPIPE_TRACE_IRQSOFF */
# define local_irq_disable_hw() local_irq_disable_hw_notrace()
# define local_irq_enable_hw() local_irq_enable_hw_notrace()
# define local_irq_save_hw(flags) local_irq_save_hw_notrace(flags)
# define local_irq_restore_hw(flags) local_irq_restore_hw_notrace(flags)
#endif /* !CONFIG_IPIPE_TRACE_IRQSOFF */
static inline int arch_irqs_disabled_flags(unsigned long flags)
{
return flags == bfin_no_irqs;
}

#else /* CONFIG_IPIPE */
static inline void arch_local_irq_save_ptr(unsigned long *_flags)
{
x = __ipipe_test_and_stall_root() ? bfin_no_irqs : bfin_irq_flags;
barrier();
}

static inline void raw_local_irq_disable(void)
static inline unsigned long arch_local_irq_save(void)
{
bfin_cli();
ipipe_check_context(ipipe_root_domain);
return __hard_local_irq_save();
}
static inline void raw_local_irq_enable(void)

static inline unsigned long arch_mangle_irq_bits(int virt, unsigned long real)
{
bfin_sti(bfin_irq_flags);
/*
* Merge virtual and real interrupt mask bits into a single
* 32bit word.
*/
return (real & ~(1 << 31)) | ((virt != 0) << 31);
}

static inline unsigned long arch_local_save_flags(void)
static inline int arch_demangle_irq_bits(unsigned long *x)
{
return bfin_read_IMASK();
int virt = (*x & (1 << 31)) != 0;
*x &= ~(1L << 31);
return virt;
}

#define raw_local_save_flags(flags) do { (flags) = arch_local_save_flags(); } while (0)
/*
* Interface to various arch routines that may be traced.
*/
#ifdef CONFIG_IPIPE_TRACE_IRQSOFF
static inline void hard_local_irq_disable(void)
{
if (!hard_irqs_disabled()) {
__hard_local_irq_disable();
ipipe_trace_begin(0x80000000);
}
}

#define raw_irqs_disabled_flags(flags) (((flags) & ~0x3f) == 0)
static inline void hard_local_irq_enable(void)
{
if (hard_irqs_disabled()) {
ipipe_trace_end(0x80000000);
__hard_local_irq_enable();
}
}

static inline unsigned long __raw_local_irq_save(void)
static inline unsigned long hard_local_irq_save(void)
{
unsigned long flags = bfin_cli();
#ifdef CONFIG_DEBUG_HWERR
bfin_sti(0x3f);
#endif
unsigned long flags = hard_local_save_flags();
if (!hard_irqs_disabled_flags(flags)) {
__hard_local_irq_disable();
ipipe_trace_begin(0x80000001);
}
return flags;
}
#define raw_local_irq_save(flags) do { (flags) = __raw_local_irq_save(); } while (0)

#define local_irq_save_hw(flags) raw_local_irq_save(flags)
#define local_irq_restore_hw(flags) raw_local_irq_restore(flags)
#define local_irq_enable_hw() raw_local_irq_enable()
#define local_irq_disable_hw() raw_local_irq_disable()
#define irqs_disabled_hw() irqs_disabled()
static inline void hard_local_irq_restore(unsigned long flags)
{
if (!hard_irqs_disabled_flags(flags)) {
ipipe_trace_end(0x80000001);
__hard_local_irq_enable();
}
}

#else /* !CONFIG_IPIPE_TRACE_IRQSOFF */
# define hard_local_irq_disable() __hard_local_irq_disable()
# define hard_local_irq_enable() __hard_local_irq_enable()
# define hard_local_irq_save() __hard_local_irq_save()
# define hard_local_irq_restore(flags) __hard_local_irq_restore(flags)
#endif /* !CONFIG_IPIPE_TRACE_IRQSOFF */

#else /* CONFIG_IPIPE */

/*
* Direct interface to linux/irqflags.h.
*/
#define arch_local_save_flags() hard_local_save_flags()
#define arch_local_irq_save(flags) __hard_local_irq_save()
#define arch_local_irq_restore(flags) __hard_local_irq_restore(flags)
#define arch_local_irq_enable() __hard_local_irq_enable()
#define arch_local_irq_disable() __hard_local_irq_disable()
#define arch_irqs_disabled_flags(flags) hard_irqs_disabled_flags(flags)
#define arch_irqs_disabled() hard_irqs_disabled()

/*
* Interface to various arch routines that may be traced.
*/
#define hard_local_irq_save() __hard_local_irq_save()
#define hard_local_irq_restore(flags) __hard_local_irq_restore(flags)
#define hard_local_irq_enable() __hard_local_irq_enable()
#define hard_local_irq_disable() __hard_local_irq_disable()


#endif /* !CONFIG_IPIPE */

static inline void raw_local_irq_restore(unsigned long flags)
{
if (!raw_irqs_disabled_flags(flags))
raw_local_irq_enable();
}
/*
* Raw interface to linux/irqflags.h.
*/
#define raw_local_save_flags(flags) do { (flags) = arch_local_save_flags(); } while (0)
#define raw_local_irq_save(flags) do { (flags) = arch_local_irq_save(); } while (0)
#define raw_local_irq_restore(flags) arch_local_irq_restore(flags)
#define raw_local_irq_enable() arch_local_irq_enable()
#define raw_local_irq_disable() arch_local_irq_disable()
#define raw_irqs_disabled_flags(flags) arch_irqs_disabled_flags(flags)
#define raw_irqs_disabled() arch_irqs_disabled()

#endif
8 changes: 4 additions & 4 deletions arch/blackfin/include/asm/mmu_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ static inline void __switch_mm(struct mm_struct *prev_mm, struct mm_struct *next
}

#ifdef CONFIG_IPIPE
#define lock_mm_switch(flags) local_irq_save_hw_cond(flags)
#define unlock_mm_switch(flags) local_irq_restore_hw_cond(flags)
#define lock_mm_switch(flags) flags = hard_local_irq_save_cond()
#define unlock_mm_switch(flags) hard_local_irq_restore_cond(flags)
#else
#define lock_mm_switch(flags) do { (void)(flags); } while (0)
#define unlock_mm_switch(flags) do { (void)(flags); } while (0)
Expand Down Expand Up @@ -205,9 +205,9 @@ static inline void destroy_context(struct mm_struct *mm)
}

#define ipipe_mm_switch_protect(flags) \
local_irq_save_hw_cond(flags)
flags = hard_local_irq_save_cond()

#define ipipe_mm_switch_unprotect(flags) \
local_irq_restore_hw_cond(flags)
hard_local_irq_restore_cond(flags)

#endif
Loading

0 comments on commit 3b139cd

Please sign in to comment.