From 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 10 May 2024 07:44:59 +0000 Subject: [PATCH] gmac get mac form eeprom --- kernel/include/linux/interrupt.h | 38 ++++++++++++++++++-------------------- 1 files changed, 18 insertions(+), 20 deletions(-) diff --git a/kernel/include/linux/interrupt.h b/kernel/include/linux/interrupt.h index d21f7af..6ff7d17 100644 --- a/kernel/include/linux/interrupt.h +++ b/kernel/include/linux/interrupt.h @@ -61,6 +61,9 @@ * interrupt handler after suspending interrupts. For system * wakeup devices users need to implement wakeup detection in * their interrupt handlers. + * IRQF_NO_AUTOEN - Don't enable IRQ or NMI automatically when users request it. + * Users will enable it explicitly by enable_irq() or enable_nmi() + * later. */ #define IRQF_SHARED 0x00000080 #define IRQF_PROBE_SHARED 0x00000100 @@ -74,6 +77,7 @@ #define IRQF_NO_THREAD 0x00010000 #define IRQF_EARLY_RESUME 0x00020000 #define IRQF_COND_SUSPEND 0x00040000 +#define IRQF_NO_AUTOEN 0x00080000 #define IRQF_TIMER (__IRQF_TIMER | IRQF_NO_SUSPEND | IRQF_NO_THREAD) @@ -566,7 +570,7 @@ asmlinkage void do_softirq(void); asmlinkage void __do_softirq(void); -#if defined(__ARCH_HAS_DO_SOFTIRQ) && !defined(CONFIG_PREEMPT_RT) +#ifdef __ARCH_HAS_DO_SOFTIRQ void do_softirq_own_stack(void); #else static inline void do_softirq_own_stack(void) @@ -661,21 +665,26 @@ TASKLET_STATE_RUN /* Tasklet is running (SMP only) */ }; -#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT) +#ifdef CONFIG_SMP static inline int tasklet_trylock(struct tasklet_struct *t) { return !test_and_set_bit(TASKLET_STATE_RUN, &(t)->state); } -void tasklet_unlock(struct tasklet_struct *t); -void tasklet_unlock_wait(struct tasklet_struct *t); -void tasklet_unlock_spin_wait(struct tasklet_struct *t); +static inline void tasklet_unlock(struct tasklet_struct *t) +{ + smp_mb__before_atomic(); + clear_bit(TASKLET_STATE_RUN, &(t)->state); +} +static inline void tasklet_unlock_wait(struct tasklet_struct *t) +{ + while (test_bit(TASKLET_STATE_RUN, &(t)->state)) { barrier(); } +} #else -static inline int tasklet_trylock(struct tasklet_struct *t) { return 1; } -static inline void tasklet_unlock(struct tasklet_struct *t) { } -static inline void tasklet_unlock_wait(struct tasklet_struct *t) { } -static inline void tasklet_unlock_spin_wait(struct tasklet_struct *t) { } +#define tasklet_trylock(t) 1 +#define tasklet_unlock_wait(t) do { } while (0) +#define tasklet_unlock(t) do { } while (0) #endif extern void __tasklet_schedule(struct tasklet_struct *t); @@ -698,17 +707,6 @@ { atomic_inc(&t->count); smp_mb__after_atomic(); -} - -/* - * Do not use in new code. Disabling tasklets from atomic contexts is - * error prone and should be avoided. - */ -static inline void tasklet_disable_in_atomic(struct tasklet_struct *t) -{ - tasklet_disable_nosync(t); - tasklet_unlock_spin_wait(t); - smp_mb(); } static inline void tasklet_disable(struct tasklet_struct *t) -- Gitblit v1.6.2