softirq-2.4.6-B4
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 4 lines · Jeff Garzik
Ingo,
You attached "B3" but your message says "B4".
Was the latest one attached?
oops, -B4 attached now.
Ingo
kernel/ksyms.c renamed from kernel/ksyms.c.orig +3 -0
@@ -535,6 +535,9 @@EXPORT_SYMBOL (tasklet_init);EXPORT_SYMBOL (tasklet_kill);EXPORT_SYMBOL (__run_task_queue); +EXPORT_SYMBOL (do_softirq); +EXPORT_SYMBOL (tasklet_schedule); +EXPORT_SYMBOL (tasklet_hi_schedule);/* init task, for moving kthread roots - ought to export a function ?? */
kernel/softirq.c renamed from kernel/softirq.c.orig +10 -21
@@ -50,7 +50,7 @@ asmlinkage void do_softirq() {int cpu =smp_processor_id (); -__u32 active, mask; +__u32 pending;local_irq_disable ();if (in_interrupt ())
@@ -58,31 +58,30 @@local_bh_disable (); - mask =softirq_mask (cpu); - active =softirq_active (cpu) & mask; + pending =softirq_pending (cpu); -if (active) { +if (pending) {struct softirq_action *h; restart: -/* Reset active bitmask before enabling irqs */ -softirq_active (cpu) &= ~active; +/* Reset the pending bitmask before enabling irqs */ +softirq_pending (cpu) =0 ;local_irq_enable (); h = softirq_vec;do { -if (active &1 ) +if (pending &1 ) h->action (h); h++; - active >>=1 ; - }while (active); + pending >>=1 ; + }while (pending);local_irq_disable (); - active =softirq_active (cpu) & mask; -if (active) + pending =softirq_pending (cpu); +if (pending) goto retry; }
@@ -100,20 +99,10 @@ } -static spinlock_t softirq_mask_lock =SPIN_LOCK_UNLOCKED ; -void open_softirq (int nr,void (*action)(struct softirq_action *),void *data) { -unsigned long flags; -int i; - -spin_lock_irqsave (&softirq_mask_lock, flags); softirq_vec[nr].data = data; softirq_vec[nr].action = action; - -for (i=0 ; i<NR_CPUS ; i++) -softirq_mask (i) |= (1 <<nr); -spin_unlock_irqrestore (&softirq_mask_lock, flags); }
include/linux/irq_cpustat.h renamed from include/linux/irq_cpustat.h.orig +1 -5
@@ -26,15 +26,11 @@#endif /* arch independent irq_stat fields */ -#define softirq_active (cpu) __IRQ_STAT((cpu), __softirq_active) -#define softirq_mask (cpu) __IRQ_STAT((cpu), __softirq_mask) +#define softirq_pending (cpu) __IRQ_STAT((cpu), __softirq_pending)#define local_irq_count (cpu) __IRQ_STAT((cpu), __local_irq_count)#define local_bh_count (cpu) __IRQ_STAT((cpu), __local_bh_count)#define syscall_count (cpu) __IRQ_STAT((cpu), __syscall_count)/* arch dependent irq_stat fields */ #define nmi_count (cpu) __IRQ_STAT((cpu), __nmi_count)/* i386, ia64 */ - -#define softirq_pending (cpu) \ - ((softirq_active(cpu) & softirq_mask(cpu)))#endif /* __irq_cpustat_h */
include/linux/interrupt.h renamed from include/linux/interrupt.h.orig +0 -11
@@ -74,17 +74,6 @@ asmlinkage void do_softirq(void);extern void open_softirq (int nr,void (*action)(struct softirq_action *),void *data); -/* Locally cached atomic variables are cheaper than cli/sti */ -static inline void __cpu_raise_softirq (int cpu,int nr) -{ -set_bit (nr, &softirq_active (cpu)); -} - -static inline void raise_softirq (int nr) -{ -__cpu_raise_softirq (smp_processor_id (), nr); -} -extern void softirq_init (void );
include/asm-i386/hardirq.h renamed from include/asm-i386/hardirq.h.orig +1 -2
@@ -7,8 +7,7 @@/* entry.S is sensitive to the offsets of these fields */ typedef struct { - unsigned int __softirq_active; - unsigned int __softirq_mask; + unsigned int __softirq_pending; unsigned int __local_irq_count; unsigned int __local_bh_count; unsigned int __syscall_count;
include/asm-i386/softirq.h renamed from include/asm-i386/softirq.h.orig +3 -1
@@ -11,7 +11,9 @@#define local_bh_disable () cpu_bh_disable(smp_processor_id())#define __local_bh_enable () __cpu_bh_enable(smp_processor_id()) -#define local_bh_enable () do { if (!--local_bh_count(smp_processor_id()) && softirq_pending(smp_processor_id())) { do_softirq(); __sti(); } } while (0) +#define local_bh_enable () do { int __cpu = smp_processor_id(); if (!--local_bh_count(__cpu) && softirq_pending(__cpu)) { do_softirq(); __sti(); } } while (0) +#define __cpu_raise_softirq (cpu,nr) set_bit((nr), &softirq_pending(cpu)); +#define raise_softirq (nr) __cpu_raise_softirq(smp_processor_id(), (nr))#define in_softirq () (local_bh_count(smp_processor_id()) != 0)
arch/i386/kernel/entry.S renamed from arch/i386/kernel/entry.S.orig +2 -2
@@ -137,11 +137,11 @@ #define CHECK_SOFTIRQ \ movl processor(%ebx),%eax; \ shll $CONFIG_X86_L1_CACHE_SHIFT,%eax; \ - movl SYMBOL_NAME(irq_stat)(,%eax),%ecx; \ + xorl %ecx,%ecx; \ testl SYMBOL_NAME(irq_stat)+4(,%eax),%ecx #else #define CHECK_SOFTIRQ \ - movl SYMBOL_NAME(irq_stat),%ecx; \ + xorl %ecx,%ecx; \ testl SYMBOL_NAME(irq_stat)+4,%ecx #endif