mirror of
https://github.com/suyu-emu/horinux.git
synced 2026-09-21 14:15:21 -07:00
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq core changes from Ingo Molnar:
"The biggest changes are the IRQ-work and printk changes from Frederic
Weisbecker, which prepare the code for 'full dynticks' (the ability to
stop or slow down the periodic tick arbitrarily, not just in idle time
as today):
- Don't stop tick with irq works pending. This fix is generally
useful and concerns archs that can't raise self IPIs.
- Flush irq works before CPU offlining.
- Introduce "lazy" irq works that can wait for the next tick to be
executed, unless it's stopped.
- Implement klogd wake up using irq work. This removes the ad-hoc
printk_tick()/printk_needs_cpu() hooks and make it working even in
dynticks mode.
- Cleanups and fixes."
* 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
genirq: Export enable/disable_percpu_irq()
arch Kconfig: Remove references to IRQ_PER_CPU
irq_work: Remove return value from the irq_work_queue() function
genirq: Avoid deadlock in spurious handling
printk: Wake up klogd using irq_work
irq_work: Make self-IPIs optable
irq_work: Warn if there's still work on cpu_down
irq_work: Flush work on CPU_DYING
irq_work: Don't stop the tick with pending works
nohz: Add API to check tick state
irq_work: Remove CONFIG_HAVE_IRQ_WORK
irq_work: Fix racy check on work pending flag
irq_work: Fix racy IRQ_WORK_BUSY flag setting
This commit is contained in:
@@ -5,7 +5,6 @@ config ALPHA
|
|||||||
select HAVE_IDE
|
select HAVE_IDE
|
||||||
select HAVE_OPROFILE
|
select HAVE_OPROFILE
|
||||||
select HAVE_SYSCALL_WRAPPERS
|
select HAVE_SYSCALL_WRAPPERS
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select HAVE_PCSPKR_PLATFORM
|
select HAVE_PCSPKR_PLATFORM
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select HAVE_DMA_ATTRS
|
select HAVE_DMA_ATTRS
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ config ARM
|
|||||||
select HAVE_GENERIC_HARDIRQS
|
select HAVE_GENERIC_HARDIRQS
|
||||||
select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7))
|
select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7))
|
||||||
select HAVE_IDE if PCI || ISA || PCMCIA
|
select HAVE_IDE if PCI || ISA || PCMCIA
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select HAVE_KERNEL_GZIP
|
select HAVE_KERNEL_GZIP
|
||||||
select HAVE_KERNEL_LZMA
|
select HAVE_KERNEL_LZMA
|
||||||
select HAVE_KERNEL_LZO
|
select HAVE_KERNEL_LZO
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ config ARM64
|
|||||||
select HAVE_GENERIC_DMA_COHERENT
|
select HAVE_GENERIC_DMA_COHERENT
|
||||||
select HAVE_GENERIC_HARDIRQS
|
select HAVE_GENERIC_HARDIRQS
|
||||||
select HAVE_HW_BREAKPOINT if PERF_EVENTS
|
select HAVE_HW_BREAKPOINT if PERF_EVENTS
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select HAVE_MEMBLOCK
|
select HAVE_MEMBLOCK
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select IRQ_DOMAIN
|
select IRQ_DOMAIN
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ config BLACKFIN
|
|||||||
select HAVE_FUNCTION_TRACER
|
select HAVE_FUNCTION_TRACER
|
||||||
select HAVE_FUNCTION_TRACE_MCOUNT_TEST
|
select HAVE_FUNCTION_TRACE_MCOUNT_TEST
|
||||||
select HAVE_IDE
|
select HAVE_IDE
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select HAVE_KERNEL_GZIP if RAMKERNEL
|
select HAVE_KERNEL_GZIP if RAMKERNEL
|
||||||
select HAVE_KERNEL_BZIP2 if RAMKERNEL
|
select HAVE_KERNEL_BZIP2 if RAMKERNEL
|
||||||
select HAVE_KERNEL_LZMA if RAMKERNEL
|
select HAVE_KERNEL_LZMA if RAMKERNEL
|
||||||
@@ -38,7 +37,6 @@ config BLACKFIN
|
|||||||
select HAVE_GENERIC_HARDIRQS
|
select HAVE_GENERIC_HARDIRQS
|
||||||
select GENERIC_ATOMIC64
|
select GENERIC_ATOMIC64
|
||||||
select GENERIC_IRQ_PROBE
|
select GENERIC_IRQ_PROBE
|
||||||
select IRQ_PER_CPU if SMP
|
|
||||||
select USE_GENERIC_SMP_HELPERS if SMP
|
select USE_GENERIC_SMP_HELPERS if SMP
|
||||||
select HAVE_NMI_WATCHDOG if NMI_WATCHDOG
|
select HAVE_NMI_WATCHDOG if NMI_WATCHDOG
|
||||||
select GENERIC_SMP_IDLE_THREAD
|
select GENERIC_SMP_IDLE_THREAD
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ config FRV
|
|||||||
default y
|
default y
|
||||||
select HAVE_IDE
|
select HAVE_IDE
|
||||||
select HAVE_ARCH_TRACEHOOK
|
select HAVE_ARCH_TRACEHOOK
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select HAVE_UID16
|
select HAVE_UID16
|
||||||
select HAVE_GENERIC_HARDIRQS
|
select HAVE_GENERIC_HARDIRQS
|
||||||
|
|||||||
@@ -12,9 +12,7 @@ config HEXAGON
|
|||||||
# select ARCH_WANT_OPTIONAL_GPIOLIB
|
# select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||||
# select ARCH_REQUIRE_GPIOLIB
|
# select ARCH_REQUIRE_GPIOLIB
|
||||||
# select HAVE_CLK
|
# select HAVE_CLK
|
||||||
# select IRQ_PER_CPU
|
|
||||||
# select GENERIC_PENDING_IRQ if SMP
|
# select GENERIC_PENDING_IRQ if SMP
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select GENERIC_ATOMIC64
|
select GENERIC_ATOMIC64
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select HAVE_GENERIC_HARDIRQS
|
select HAVE_GENERIC_HARDIRQS
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ config IA64
|
|||||||
select ARCH_DISCARD_MEMBLOCK
|
select ARCH_DISCARD_MEMBLOCK
|
||||||
select GENERIC_IRQ_PROBE
|
select GENERIC_IRQ_PROBE
|
||||||
select GENERIC_PENDING_IRQ if SMP
|
select GENERIC_PENDING_IRQ if SMP
|
||||||
select IRQ_PER_CPU
|
|
||||||
select GENERIC_IRQ_SHOW
|
select GENERIC_IRQ_SHOW
|
||||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||||
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ config MIPS
|
|||||||
select HAVE_GENERIC_DMA_COHERENT
|
select HAVE_GENERIC_DMA_COHERENT
|
||||||
select HAVE_IDE
|
select HAVE_IDE
|
||||||
select HAVE_OPROFILE
|
select HAVE_OPROFILE
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select PERF_USE_VMALLOC
|
select PERF_USE_VMALLOC
|
||||||
select HAVE_ARCH_KGDB
|
select HAVE_ARCH_KGDB
|
||||||
@@ -2161,7 +2160,6 @@ source "mm/Kconfig"
|
|||||||
config SMP
|
config SMP
|
||||||
bool "Multi-Processing support"
|
bool "Multi-Processing support"
|
||||||
depends on SYS_SUPPORTS_SMP
|
depends on SYS_SUPPORTS_SMP
|
||||||
select IRQ_PER_CPU
|
|
||||||
select USE_GENERIC_SMP_HELPERS
|
select USE_GENERIC_SMP_HELPERS
|
||||||
help
|
help
|
||||||
This enables support for systems with more than one CPU. If you have
|
This enables support for systems with more than one CPU. If you have
|
||||||
|
|||||||
@@ -9,14 +9,12 @@ config PARISC
|
|||||||
select RTC_DRV_GENERIC
|
select RTC_DRV_GENERIC
|
||||||
select INIT_ALL_POSSIBLE
|
select INIT_ALL_POSSIBLE
|
||||||
select BUG
|
select BUG
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select GENERIC_ATOMIC64 if !64BIT
|
select GENERIC_ATOMIC64 if !64BIT
|
||||||
select HAVE_GENERIC_HARDIRQS
|
select HAVE_GENERIC_HARDIRQS
|
||||||
select BROKEN_RODATA
|
select BROKEN_RODATA
|
||||||
select GENERIC_IRQ_PROBE
|
select GENERIC_IRQ_PROBE
|
||||||
select GENERIC_PCI_IOMAP
|
select GENERIC_PCI_IOMAP
|
||||||
select IRQ_PER_CPU
|
|
||||||
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
||||||
select GENERIC_SMP_IDLE_THREAD
|
select GENERIC_SMP_IDLE_THREAD
|
||||||
select GENERIC_STRNCPY_FROM_USER
|
select GENERIC_STRNCPY_FROM_USER
|
||||||
|
|||||||
@@ -118,14 +118,12 @@ config PPC
|
|||||||
select HAVE_SYSCALL_WRAPPERS if PPC64
|
select HAVE_SYSCALL_WRAPPERS if PPC64
|
||||||
select GENERIC_ATOMIC64 if PPC32
|
select GENERIC_ATOMIC64 if PPC32
|
||||||
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
|
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select HAVE_REGS_AND_STACK_ACCESS_API
|
select HAVE_REGS_AND_STACK_ACCESS_API
|
||||||
select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64
|
select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64
|
||||||
select HAVE_GENERIC_HARDIRQS
|
select HAVE_GENERIC_HARDIRQS
|
||||||
select ARCH_WANT_IPC_PARSE_VERSION
|
select ARCH_WANT_IPC_PARSE_VERSION
|
||||||
select SPARSE_IRQ
|
select SPARSE_IRQ
|
||||||
select IRQ_PER_CPU
|
|
||||||
select IRQ_DOMAIN
|
select IRQ_DOMAIN
|
||||||
select GENERIC_IRQ_SHOW
|
select GENERIC_IRQ_SHOW
|
||||||
select GENERIC_IRQ_SHOW_LEVEL
|
select GENERIC_IRQ_SHOW_LEVEL
|
||||||
|
|||||||
@@ -78,7 +78,6 @@ config S390
|
|||||||
select HAVE_KVM if 64BIT
|
select HAVE_KVM if 64BIT
|
||||||
select HAVE_ARCH_TRACEHOOK
|
select HAVE_ARCH_TRACEHOOK
|
||||||
select INIT_ALL_POSSIBLE
|
select INIT_ALL_POSSIBLE
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
||||||
select HAVE_DEBUG_KMEMLEAK
|
select HAVE_DEBUG_KMEMLEAK
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ config SUPERH
|
|||||||
select HAVE_ARCH_TRACEHOOK
|
select HAVE_ARCH_TRACEHOOK
|
||||||
select HAVE_DMA_API_DEBUG
|
select HAVE_DMA_API_DEBUG
|
||||||
select HAVE_DMA_ATTRS
|
select HAVE_DMA_ATTRS
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select HAVE_DEBUG_BUGVERBOSE
|
select HAVE_DEBUG_BUGVERBOSE
|
||||||
select ARCH_HAVE_CUSTOM_GPIO_H
|
select ARCH_HAVE_CUSTOM_GPIO_H
|
||||||
@@ -91,9 +90,6 @@ config GENERIC_CSUM
|
|||||||
config GENERIC_HWEIGHT
|
config GENERIC_HWEIGHT
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
||||||
config IRQ_PER_CPU
|
|
||||||
def_bool y
|
|
||||||
|
|
||||||
config GENERIC_GPIO
|
config GENERIC_GPIO
|
||||||
def_bool n
|
def_bool n
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ config SPARC
|
|||||||
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
|
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
|
||||||
select RTC_CLASS
|
select RTC_CLASS
|
||||||
select RTC_DRV_M48T59
|
select RTC_DRV_M48T59
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select HAVE_DMA_ATTRS
|
select HAVE_DMA_ATTRS
|
||||||
select HAVE_DMA_API_DEBUG
|
select HAVE_DMA_API_DEBUG
|
||||||
select HAVE_ARCH_JUMP_LABEL
|
select HAVE_ARCH_JUMP_LABEL
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ config X86
|
|||||||
select HAVE_OPROFILE
|
select HAVE_OPROFILE
|
||||||
select HAVE_PCSPKR_PLATFORM
|
select HAVE_PCSPKR_PLATFORM
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select HAVE_IRQ_WORK
|
|
||||||
select HAVE_IOREMAP_PROT
|
select HAVE_IOREMAP_PROT
|
||||||
select HAVE_KPROBES
|
select HAVE_KPROBES
|
||||||
select HAVE_MEMBLOCK
|
select HAVE_MEMBLOCK
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ config IIO_GPIO_TRIGGER
|
|||||||
config IIO_SYSFS_TRIGGER
|
config IIO_SYSFS_TRIGGER
|
||||||
tristate "SYSFS trigger"
|
tristate "SYSFS trigger"
|
||||||
depends on SYSFS
|
depends on SYSFS
|
||||||
depends on HAVE_IRQ_WORK
|
|
||||||
select IRQ_WORK
|
select IRQ_WORK
|
||||||
help
|
help
|
||||||
Provides support for using SYSFS entry as IIO triggers.
|
Provides support for using SYSFS entry as IIO triggers.
|
||||||
|
|||||||
@@ -3,6 +3,20 @@
|
|||||||
|
|
||||||
#include <linux/llist.h>
|
#include <linux/llist.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* An entry can be in one of four states:
|
||||||
|
*
|
||||||
|
* free NULL, 0 -> {claimed} : free to be used
|
||||||
|
* claimed NULL, 3 -> {pending} : claimed to be enqueued
|
||||||
|
* pending next, 3 -> {busy} : queued, pending callback
|
||||||
|
* busy NULL, 2 -> {free, claimed} : callback in progress, can be claimed
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IRQ_WORK_PENDING 1UL
|
||||||
|
#define IRQ_WORK_BUSY 2UL
|
||||||
|
#define IRQ_WORK_FLAGS 3UL
|
||||||
|
#define IRQ_WORK_LAZY 4UL /* Doesn't want IPI, wait for tick */
|
||||||
|
|
||||||
struct irq_work {
|
struct irq_work {
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct llist_node llnode;
|
struct llist_node llnode;
|
||||||
@@ -16,8 +30,14 @@ void init_irq_work(struct irq_work *work, void (*func)(struct irq_work *))
|
|||||||
work->func = func;
|
work->func = func;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool irq_work_queue(struct irq_work *work);
|
void irq_work_queue(struct irq_work *work);
|
||||||
void irq_work_run(void);
|
void irq_work_run(void);
|
||||||
void irq_work_sync(struct irq_work *work);
|
void irq_work_sync(struct irq_work *work);
|
||||||
|
|
||||||
|
#ifdef CONFIG_IRQ_WORK
|
||||||
|
bool irq_work_needs_cpu(void);
|
||||||
|
#else
|
||||||
|
static bool irq_work_needs_cpu(void) { return false; }
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _LINUX_IRQ_WORK_H */
|
#endif /* _LINUX_IRQ_WORK_H */
|
||||||
|
|||||||
@@ -98,9 +98,6 @@ int no_printk(const char *fmt, ...)
|
|||||||
extern asmlinkage __printf(1, 2)
|
extern asmlinkage __printf(1, 2)
|
||||||
void early_printk(const char *fmt, ...);
|
void early_printk(const char *fmt, ...);
|
||||||
|
|
||||||
extern int printk_needs_cpu(int cpu);
|
|
||||||
extern void printk_tick(void);
|
|
||||||
|
|
||||||
#ifdef CONFIG_PRINTK
|
#ifdef CONFIG_PRINTK
|
||||||
asmlinkage __printf(5, 0)
|
asmlinkage __printf(5, 0)
|
||||||
int vprintk_emit(int facility, int level,
|
int vprintk_emit(int facility, int level,
|
||||||
|
|||||||
+16
-1
@@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
#include <linux/clockchips.h>
|
#include <linux/clockchips.h>
|
||||||
#include <linux/irqflags.h>
|
#include <linux/irqflags.h>
|
||||||
|
#include <linux/percpu.h>
|
||||||
|
#include <linux/hrtimer.h>
|
||||||
|
|
||||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS
|
#ifdef CONFIG_GENERIC_CLOCKEVENTS
|
||||||
|
|
||||||
@@ -122,13 +124,26 @@ static inline int tick_oneshot_mode_active(void) { return 0; }
|
|||||||
#endif /* !CONFIG_GENERIC_CLOCKEVENTS */
|
#endif /* !CONFIG_GENERIC_CLOCKEVENTS */
|
||||||
|
|
||||||
# ifdef CONFIG_NO_HZ
|
# ifdef CONFIG_NO_HZ
|
||||||
|
DECLARE_PER_CPU(struct tick_sched, tick_cpu_sched);
|
||||||
|
|
||||||
|
static inline int tick_nohz_tick_stopped(void)
|
||||||
|
{
|
||||||
|
return __this_cpu_read(tick_cpu_sched.tick_stopped);
|
||||||
|
}
|
||||||
|
|
||||||
extern void tick_nohz_idle_enter(void);
|
extern void tick_nohz_idle_enter(void);
|
||||||
extern void tick_nohz_idle_exit(void);
|
extern void tick_nohz_idle_exit(void);
|
||||||
extern void tick_nohz_irq_exit(void);
|
extern void tick_nohz_irq_exit(void);
|
||||||
extern ktime_t tick_nohz_get_sleep_length(void);
|
extern ktime_t tick_nohz_get_sleep_length(void);
|
||||||
extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time);
|
extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time);
|
||||||
extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time);
|
extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time);
|
||||||
# else
|
|
||||||
|
# else /* !CONFIG_NO_HZ */
|
||||||
|
static inline int tick_nohz_tick_stopped(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void tick_nohz_idle_enter(void) { }
|
static inline void tick_nohz_idle_enter(void) { }
|
||||||
static inline void tick_nohz_idle_exit(void) { }
|
static inline void tick_nohz_idle_exit(void) { }
|
||||||
|
|
||||||
|
|||||||
+1
-4
@@ -20,12 +20,8 @@ config CONSTRUCTORS
|
|||||||
bool
|
bool
|
||||||
depends on !UML
|
depends on !UML
|
||||||
|
|
||||||
config HAVE_IRQ_WORK
|
|
||||||
bool
|
|
||||||
|
|
||||||
config IRQ_WORK
|
config IRQ_WORK
|
||||||
bool
|
bool
|
||||||
depends on HAVE_IRQ_WORK
|
|
||||||
|
|
||||||
config BUILDTIME_EXTABLE_SORT
|
config BUILDTIME_EXTABLE_SORT
|
||||||
bool
|
bool
|
||||||
@@ -1273,6 +1269,7 @@ config HOTPLUG
|
|||||||
config PRINTK
|
config PRINTK
|
||||||
default y
|
default y
|
||||||
bool "Enable support for printk" if EXPERT
|
bool "Enable support for printk" if EXPERT
|
||||||
|
select IRQ_WORK
|
||||||
help
|
help
|
||||||
This option enables normal printk support. Removing it
|
This option enables normal printk support. Removing it
|
||||||
eliminates most of the message strings from the kernel image
|
eliminates most of the message strings from the kernel image
|
||||||
|
|||||||
@@ -1524,6 +1524,7 @@ void enable_percpu_irq(unsigned int irq, unsigned int type)
|
|||||||
out:
|
out:
|
||||||
irq_put_desc_unlock(desc, flags);
|
irq_put_desc_unlock(desc, flags);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(enable_percpu_irq);
|
||||||
|
|
||||||
void disable_percpu_irq(unsigned int irq)
|
void disable_percpu_irq(unsigned int irq)
|
||||||
{
|
{
|
||||||
@@ -1537,6 +1538,7 @@ void disable_percpu_irq(unsigned int irq)
|
|||||||
irq_percpu_disable(desc, cpu);
|
irq_percpu_disable(desc, cpu);
|
||||||
irq_put_desc_unlock(desc, flags);
|
irq_put_desc_unlock(desc, flags);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(disable_percpu_irq);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Internal function to unregister a percpu irqaction.
|
* Internal function to unregister a percpu irqaction.
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user