 6832d9652f
			
		
	
	
	6832d9652f
	
	
	
		
			
			Pull timers/nohz changes from Ingo Molnar: "It mostly contains fixes and full dynticks off-case optimizations, by Frederic Weisbecker" * 'timers-nohz-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (24 commits) nohz: Include local CPU in full dynticks global kick nohz: Optimize full dynticks's sched hooks with static keys nohz: Optimize full dynticks state checks with static keys nohz: Rename a few state variables vtime: Always debug check snapshot source _before_ updating it vtime: Always scale generic vtime accounting results vtime: Optimize full dynticks accounting off case with static keys vtime: Describe overriden functions in dedicated arch headers m68k: hardirq_count() only need preempt_mask.h hardirq: Split preempt count mask definitions context_tracking: Split low level state headers vtime: Fix racy cputime delta update vtime: Remove a few unneeded generic vtime state checks context_tracking: User/kernel broundary cross trace events context_tracking: Optimize context switch off case with static keys context_tracking: Optimize guest APIs off case with static key context_tracking: Optimize main APIs off case with static key context_tracking: Ground setup for static key use context_tracking: Remove full dynticks' hacky dependency on wide context tracking nohz: Only enable context tracking on full dynticks CPUs ...
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			1.6 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			1.6 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _M68K_IRQFLAGS_H
 | |
| #define _M68K_IRQFLAGS_H
 | |
| 
 | |
| #include <linux/types.h>
 | |
| #ifdef CONFIG_MMU
 | |
| #include <linux/preempt_mask.h>
 | |
| #endif
 | |
| #include <linux/preempt.h>
 | |
| #include <asm/thread_info.h>
 | |
| #include <asm/entry.h>
 | |
| 
 | |
| static inline unsigned long arch_local_save_flags(void)
 | |
| {
 | |
| 	unsigned long flags;
 | |
| 	asm volatile ("movew %%sr,%0" : "=d" (flags) : : "memory");
 | |
| 	return flags;
 | |
| }
 | |
| 
 | |
| static inline void arch_local_irq_disable(void)
 | |
| {
 | |
| #ifdef CONFIG_COLDFIRE
 | |
| 	asm volatile (
 | |
| 		"move	%/sr,%%d0	\n\t"
 | |
| 		"ori.l	#0x0700,%%d0	\n\t"
 | |
| 		"move	%%d0,%/sr	\n"
 | |
| 		: /* no outputs */
 | |
| 		:
 | |
| 		: "cc", "%d0", "memory");
 | |
| #else
 | |
| 	asm volatile ("oriw  #0x0700,%%sr" : : : "memory");
 | |
| #endif
 | |
| }
 | |
| 
 | |
| static inline void arch_local_irq_enable(void)
 | |
| {
 | |
| #if defined(CONFIG_COLDFIRE)
 | |
| 	asm volatile (
 | |
| 		"move	%/sr,%%d0	\n\t"
 | |
| 		"andi.l	#0xf8ff,%%d0	\n\t"
 | |
| 		"move	%%d0,%/sr	\n"
 | |
| 		: /* no outputs */
 | |
| 		:
 | |
| 		: "cc", "%d0", "memory");
 | |
| #else
 | |
| # if defined(CONFIG_MMU)
 | |
| 	if (MACH_IS_Q40 || !hardirq_count())
 | |
| # endif
 | |
| 		asm volatile (
 | |
| 			"andiw %0,%%sr"
 | |
| 			:
 | |
| 			: "i" (ALLOWINT)
 | |
| 			: "memory");
 | |
| #endif
 | |
| }
 | |
| 
 | |
| static inline unsigned long arch_local_irq_save(void)
 | |
| {
 | |
| 	unsigned long flags = arch_local_save_flags();
 | |
| 	arch_local_irq_disable();
 | |
| 	return flags;
 | |
| }
 | |
| 
 | |
| static inline void arch_local_irq_restore(unsigned long flags)
 | |
| {
 | |
| 	asm volatile ("movew %0,%%sr" : : "d" (flags) : "memory");
 | |
| }
 | |
| 
 | |
| static inline bool arch_irqs_disabled_flags(unsigned long flags)
 | |
| {
 | |
| 	if (MACH_IS_ATARI) {
 | |
| 		/* Ignore HSYNC = ipl 2 on Atari */
 | |
| 		return (flags & ~(ALLOWINT | 0x200)) != 0;
 | |
| 	}
 | |
| 	return (flags & ~ALLOWINT) != 0;
 | |
| }
 | |
| 
 | |
| static inline bool arch_irqs_disabled(void)
 | |
| {
 | |
| 	return arch_irqs_disabled_flags(arch_local_save_flags());
 | |
| }
 | |
| 
 | |
| #endif /* _M68K_IRQFLAGS_H */
 |