This diff was made by oga@ some time ago -- I just fixed a few conflicts and I would really like to see this going in.
netisr needs to be made a normal C function and not this madness it currently is. This is necessary to imporve the packet scheduling. Tested myself on i386, amd64, sparc64, sparc, alpha and hppa -- :wq Claudio Index: arch/alpha/alpha/interrupt.c =================================================================== RCS file: /cvs/src/sys/arch/alpha/alpha/interrupt.c,v retrieving revision 1.29 diff -u -p -r1.29 interrupt.c --- arch/alpha/alpha/interrupt.c 19 Apr 2009 19:13:57 -0000 1.29 +++ arch/alpha/alpha/interrupt.c 5 Nov 2010 15:50:38 -0000 @@ -88,26 +88,6 @@ #include <sys/device.h> #endif -#include <net/netisr.h> -#include <net/if.h> - -#ifdef INET -#include <netinet/in.h> -#include <netinet/if_ether.h> -#include <netinet/ip_var.h> -#endif - -#ifdef INET6 -#ifndef INET -#include <netinet/in.h> -#endif -#include <netinet/ip6.h> -#include <netinet6/ip6_var.h> -#endif - -#include "ppp.h" -#include "bridge.h" - #include "apecs.h" #include "cia.h" #include "lca.h" @@ -119,8 +99,6 @@ extern struct evcount clk_count; struct scbvec scb_iovectab[SCB_VECTOIDX(SCB_SIZE - SCB_IOVECBASE)]; -void netintr(void); - void scb_stray(void *, u_long); void @@ -480,33 +458,8 @@ badaddr_read(void *addr, size_t size, vo #endif /* NAPECS > 0 || NCIA > 0 || NLCA > 0 || NTCASIC > 0 */ -int netisr; - -void -netintr() -{ - int n; - - while ((n = netisr) != 0) { - atomic_clearbits_int(&netisr, n); - -#define DONETISR(bit, fn) \ - do { \ - if (n & (1 << (bit))) \ - fn(); \ - } while (0) - -#include <net/netisr_dispatch.h> - -#undef DONETISR - } -} - struct alpha_soft_intr alpha_soft_intrs[SI_NSOFT]; -/* XXX For legacy software interrupts. */ -struct alpha_soft_intrhand *softnet_intrhand; - /* * softintr_init: * @@ -524,10 +477,6 @@ softintr_init() mtx_init(&asi->softintr_mtx, IPL_HIGH); asi->softintr_siq = i; } - - /* XXX Establish legacy software interrupt handlers. */ - softnet_intrhand = softintr_establish(IPL_SOFTNET, - (void (*)(void *))netintr, NULL); } /* Index: arch/alpha/include/intr.h =================================================================== RCS file: /cvs/src/sys/arch/alpha/include/intr.h,v retrieving revision 1.36 diff -u -p -r1.36 intr.h --- arch/alpha/include/intr.h 31 May 2010 21:39:55 -0000 1.36 +++ arch/alpha/include/intr.h 5 Nov 2010 15:50:38 -0000 @@ -264,11 +264,6 @@ void *softintr_establish(int, void (*)(v void softintr_init(void); void softintr_schedule(void *); -/* XXX For legacy software interrupts. */ -extern struct alpha_soft_intrhand *softnet_intrhand; - -#define setsoftnet() softintr_schedule(softnet_intrhand) - struct alpha_shared_intr *alpha_shared_intr_alloc(unsigned int); int alpha_shared_intr_dispatch(struct alpha_shared_intr *, unsigned int); Index: arch/amd64/amd64/vector.S =================================================================== RCS file: /cvs/src/sys/arch/amd64/amd64/vector.S,v retrieving revision 1.26 diff -u -p -r1.26 vector.S --- arch/amd64/amd64/vector.S 28 Sep 2010 03:53:14 -0000 1.26 +++ arch/amd64/amd64/vector.S 5 Nov 2010 15:50:38 -0000 @@ -78,8 +78,6 @@ #include <machine/intr.h> #include <machine/psl.h> -#include <net/netisr.h> - #include "ioapic.h" #include "lapic.h" #include "assym.h" @@ -801,10 +799,6 @@ _C_LABEL(ioapic_level_stubs): /* * Soft interrupt handlers */ - .globl _C_LABEL(netisr) -_C_LABEL(netisr): - .word 0 - .text IDTVEC(softtty) movl $IPL_SOFTTTY, CPUVAR(ILEVEL) @@ -830,19 +824,6 @@ IDTVEC(softnet) call _C_LABEL(x86_softintlock) #endif movq CPUVAR(ISOURCES) + SIR_NET * 8, %r12 - - xorq %r12,%r12 - xchgl _C_LABEL(netisr),%r12d - - /* XXX Do the legacy netisrs here for now. */ -#define DONETISR(s, c) \ - .globl _C_LABEL(c) ;\ - testl $(1 << s),%r12d ;\ - jz 1f ;\ - call _C_LABEL(c) ;\ -1: -#include <net/netisr_dispatch.h> - movl $X86_SOFTINTR_SOFTNET,%edi call _C_LABEL(softintr_dispatch) #ifdef MULTIPROCESSOR Index: arch/amd64/include/intr.h =================================================================== RCS file: /cvs/src/sys/arch/amd64/include/intr.h,v retrieving revision 1.19 diff -u -p -r1.19 intr.h --- arch/amd64/include/intr.h 31 May 2010 21:39:56 -0000 1.19 +++ arch/amd64/include/intr.h 5 Nov 2010 15:50:38 -0000 @@ -172,11 +172,6 @@ void splassert_check(int, const char *); #define splsoftassert(wantipl) do { /* nada */ } while (0) #endif -/* - * XXX - */ -#define setsoftnet() softintr(SIR_NET) - #define IPLSHIFT 4 /* The upper nibble of vectors is the IPL. */ #define IPL(level) ((level) >> IPLSHIFT) /* Extract the IPL. */ Index: arch/arm/arm/softintr.c =================================================================== RCS file: /cvs/src/sys/arch/arm/arm/softintr.c,v retrieving revision 1.6 diff -u -p -r1.6 softintr.c --- arch/arm/arm/softintr.c 19 Apr 2009 18:54:06 -0000 1.6 +++ arch/arm/arm/softintr.c 5 Nov 2010 15:50:38 -0000 @@ -39,9 +39,6 @@ #include <sys/param.h> #include <sys/malloc.h> -/* XXX Network interrupts should be converted to new softintrs. */ -#include <net/netisr.h> - #include <uvm/uvm_extern.h> #include <machine/atomic.h> @@ -49,10 +46,6 @@ struct soft_intrq soft_intrq[SI_NQUEUES]; -struct soft_intrhand *softnet_intrhand; - -void netintr(void); - /* * softintr_init: * @@ -70,12 +63,6 @@ softintr_init(void) mtx_init(&siq->siq_mtx, IPL_HIGH); siq->siq_si = i; } - - /* XXX Establish legacy software interrupt handlers. */ - softnet_intrhand = softintr_establish(IPL_SOFTNET, - (void (*)(void *))netintr, NULL); - - assert(softnet_intrhand != NULL); } /* @@ -171,26 +158,4 @@ softintr_disestablish(void *arg) mtx_leave(&siq->siq_mtx); free(sih, M_DEVBUF); -} - -int netisr; - -void -netintr(void) -{ - int n; - - while ((n = netisr) != 0) { - atomic_clearbits_int(&netisr, n); - -#define DONETISR(bit, fn) \ - do { \ - if (n & (1 << (bit))) \ - fn(); \ - } while (/*CONSTCOND*/0) - -#include <net/netisr_dispatch.h> - -#undef DONETISR - } } Index: arch/arm/include/softintr.h =================================================================== RCS file: /cvs/src/sys/arch/arm/include/softintr.h,v retrieving revision 1.4 diff -u -p -r1.4 softintr.h --- arch/arm/include/softintr.h 19 Apr 2009 18:54:06 -0000 1.4 +++ arch/arm/include/softintr.h 5 Nov 2010 15:50:38 -0000 @@ -91,11 +91,6 @@ do { \ mtx_leave(&__siq->siq_mtx); \ } while (/*CONSTCOND*/0) -/* XXX For legacy software interrupts. */ -extern struct soft_intrhand *softnet_intrhand; - -#define setsoftnet() softintr_schedule(softnet_intrhand) - #endif /* _KERNEL */ #endif /* _ARM_SOFTINTR_H_ */ Index: arch/hppa/hppa/intr.c =================================================================== RCS file: /cvs/src/sys/arch/hppa/hppa/intr.c,v retrieving revision 1.35 diff -u -p -r1.35 intr.c --- arch/hppa/hppa/intr.c 20 Sep 2010 06:33:47 -0000 1.35 +++ arch/hppa/hppa/intr.c 5 Nov 2010 15:50:38 -0000 @@ -33,17 +33,12 @@ #include <sys/evcount.h> #include <sys/malloc.h> -#include <net/netisr.h> - #include <uvm/uvm_extern.h> /* for uvmexp */ #include <machine/autoconf.h> #include <machine/frame.h> #include <machine/reg.h> -void softnet(void); -void softtty(void); - struct hppa_iv { char pri; char irq; @@ -64,7 +59,7 @@ struct hppa_iv intr_store[8*2*CPU_NINTS] *intr_more = intr_store, *intr_list; struct hppa_iv intr_table[CPU_NINTS] __attribute__ ((aligned(32))) = { { IPL_SOFTCLOCK, 0, HPPA_IV_SOFT, 0, 0, NULL }, - { IPL_SOFTNET , 0, HPPA_IV_SOFT, 0, 0, (int (*)(void *))&softnet }, + { IPL_SOFTNET , 0, HPPA_IV_SOFT, 0, 0, NULL }, { 0 }, { 0 }, { IPL_SOFTTTY , 0, HPPA_IV_SOFT, 0, 0, NULL } @@ -88,18 +83,6 @@ splassert_check(int wantipl, const char splassert_fail(wantipl, ci->ci_cpl, func); } #endif - -void -softnet(void) -{ - int ni; - - /* use atomic "load & clear" */ - __asm __volatile( - "ldcws 0(%2), %0": "=&r" (ni), "+m" (netisr): "r" (&netisr)); -#define DONETISR(m,c) if (ni & (1 << (m))) c() -#include <net/netisr_dispatch.h> -} void cpu_intr_init(void) Index: arch/hppa/hppa/locore.S =================================================================== RCS file: /cvs/src/sys/arch/hppa/hppa/locore.S,v retrieving revision 1.179 diff -u -p -r1.179 locore.S --- arch/hppa/hppa/locore.S 18 Aug 2010 21:01:14 -0000 1.179 +++ arch/hppa/hppa/locore.S 5 Nov 2010 15:50:38 -0000 @@ -103,13 +103,6 @@ .data - .export netisr, data - .align 16 -netisr - .word 0 - .size netisr, .-netisr - .align 16 - BSS(pdc_stack, 4) /* temp stack for PDC call */ BSS(emrg_stack, 4) /* stack for HPMC/TOC/PWRF */ Index: arch/hppa/hppa/trap.c =================================================================== RCS file: /cvs/src/sys/arch/hppa/hppa/trap.c,v retrieving revision 1.110 diff -u -p -r1.110 trap.c --- arch/hppa/hppa/trap.c 1 Jul 2010 05:33:32 -0000 1.110 +++ arch/hppa/hppa/trap.c 5 Nov 2010 15:50:38 -0000 @@ -36,8 +36,6 @@ #include <sys/signalvar.h> #include <sys/user.h> -#include <net/netisr.h> - #include "systrace.h" #include <dev/systrace.h> Index: arch/hppa/include/intr.h =================================================================== RCS file: /cvs/src/sys/arch/hppa/include/intr.h,v retrieving revision 1.34 diff -u -p -r1.34 intr.h --- arch/hppa/include/intr.h 2 Jul 2010 00:00:45 -0000 1.34 +++ arch/hppa/include/intr.h 5 Nov 2010 15:50:38 -0000 @@ -156,7 +156,6 @@ int hppa_ipi_send(struct cpu_info *, u_ #endif #define setsoftast(p) (p->p_md.md_astpending = 1) -#define setsoftnet() softintr(1 << (IPL_SOFTNET - 1)) void *softintr_establish(int, void (*)(void *), void *); void softintr_disestablish(void *); Index: arch/hppa64/hppa64/locore.S =================================================================== RCS file: /cvs/src/sys/arch/hppa64/hppa64/locore.S,v retrieving revision 1.10 diff -u -p -r1.10 locore.S --- arch/hppa64/hppa64/locore.S 18 Aug 2010 21:01:14 -0000 1.10 +++ arch/hppa64/hppa64/locore.S 5 Nov 2010 15:50:38 -0000 @@ -44,10 +44,6 @@ .data - .export netisr, data - .align 16 -netisr - .word 0 .align 16 $kpsl .word PSL_W | PSL_Q | PSL_P | PSL_C | PSL_D | PSL_S | PSL_O Index: arch/hppa64/hppa64/trap.c =================================================================== RCS file: /cvs/src/sys/arch/hppa64/hppa64/trap.c,v retrieving revision 1.10 diff -u -p -r1.10 trap.c --- arch/hppa64/hppa64/trap.c 1 Jul 2010 04:33:59 -0000 1.10 +++ arch/hppa64/hppa64/trap.c 5 Nov 2010 15:50:38 -0000 @@ -27,8 +27,6 @@ #include <sys/signalvar.h> #include <sys/user.h> -#include <net/netisr.h> - #include "systrace.h" #include <dev/systrace.h> Index: arch/hppa64/include/cpu.h =================================================================== RCS file: /cvs/src/sys/arch/hppa64/include/cpu.h,v retrieving revision 1.18 diff -u -p -r1.18 cpu.h --- arch/hppa64/include/cpu.h 28 Sep 2010 20:27:54 -0000 1.18 +++ arch/hppa64/include/cpu.h 5 Nov 2010 15:50:38 -0000 @@ -110,9 +110,6 @@ #define splx(c) spllower(c) #define setsoftast() (astpending = 1) -#define setsoftclock() /* TODO */ -#define setsoftnet() /* TODO */ -#define setsofttty() /* TODO */ #ifndef _LOCORE #include <sys/time.h> Index: arch/i386/i386/apicvec.s =================================================================== RCS file: /cvs/src/sys/arch/i386/i386/apicvec.s,v retrieving revision 1.21 diff -u -p -r1.21 apicvec.s --- arch/i386/i386/apicvec.s 11 Jan 2010 23:09:52 -0000 1.21 +++ arch/i386/i386/apicvec.s 5 Nov 2010 15:50:38 -0000 @@ -207,13 +207,6 @@ XINTR(softclock): decl CPUVAR(IDEPTH) jmp _C_LABEL(Xdoreti) -#define DONETISR(s, c) \ - .globl _C_LABEL(c) ;\ - testl $(1 << s),%edi ;\ - jz 1f ;\ - call _C_LABEL(c) ;\ -1: - XINTR(softnet): pushl $0 pushl $T_ASTFLT @@ -228,11 +221,6 @@ XINTR(softnet): #ifdef MULTIPROCESSOR call _C_LABEL(i386_softintlock) #endif - xorl %edi,%edi - xchgl _C_LABEL(netisr),%edi - -#include <net/netisr_dispatch.h> - pushl $I386_SOFTINTR_SOFTNET call _C_LABEL(softintr_dispatch) addl $4,%esp Index: arch/i386/include/intr.h =================================================================== RCS file: /cvs/src/sys/arch/i386/include/intr.h,v retrieving revision 1.39 diff -u -p -r1.39 intr.h --- arch/i386/include/intr.h 13 Aug 2009 13:24:48 -0000 1.39 +++ arch/i386/include/intr.h 5 Nov 2010 15:50:38 -0000 @@ -126,9 +126,6 @@ void splassert_check(int, const char *); #define spllock() splhigh() #define spl0() spllower(IPL_NONE) -#define setsoftnet() softintr(SIR_NET) -#define setsofttty() softintr(SIR_TTY) - #include <machine/pic.h> struct cpu_info; Index: arch/i386/isa/icu.s =================================================================== RCS file: /cvs/src/sys/arch/i386/isa/icu.s,v retrieving revision 1.30 diff -u -p -r1.30 icu.s --- arch/i386/isa/icu.s 9 May 2010 12:03:16 -0000 1.30 +++ arch/i386/isa/icu.s 5 Nov 2010 15:50:38 -0000 @@ -30,14 +30,10 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include <net/netisr.h> - .data - .globl _C_LABEL(imen),_C_LABEL(netisr) + .globl _C_LABEL(imen) _C_LABEL(imen): .long 0xffff # interrupt mask enable (all off) -_C_LABEL(netisr): - .long 0 # scheduling bits for network .text /* @@ -136,13 +132,6 @@ IDTVEC(softtty) #endif jmp *%esi -#define DONETISR(s, c) \ - .globl _C_LABEL(c) ;\ - testl $(1 << s),%edi ;\ - jz 1f ;\ - call _C_LABEL(c) ;\ -1: - IDTVEC(softnet) movl $IPL_SOFTNET,%eax movl %eax,CPL @@ -150,11 +139,6 @@ IDTVEC(softnet) #ifdef MULTIPROCESSOR call _C_LABEL(i386_softintlock) #endif - xorl %edi,%edi - xchgl _C_LABEL(netisr),%edi - -#include <net/netisr_dispatch.h> - pushl $I386_SOFTINTR_SOFTNET call _C_LABEL(softintr_dispatch) addl $4,%esp Index: arch/loongson/include/intr.h =================================================================== RCS file: /cvs/src/sys/arch/loongson/include/intr.h,v retrieving revision 1.2 diff -u -p -r1.2 intr.h --- arch/loongson/include/intr.h 23 Apr 2010 03:50:22 -0000 1.2 +++ arch/loongson/include/intr.h 5 Nov 2010 15:50:38 -0000 @@ -106,11 +106,6 @@ void *softintr_establish(int, void (*)(v void softintr_init(void); void softintr_schedule(void *); -/* XXX For legacy software interrupts. */ -extern struct soft_intrhand *softnet_intrhand; - -#define setsoftnet() softintr_schedule(softnet_intrhand) - #define splsoft() splraise(IPL_SOFTINT) #define splbio() splraise(IPL_BIO) #define splnet() splraise(IPL_NET) Index: arch/luna88k/luna88k/isr.c =================================================================== RCS file: /cvs/src/sys/arch/luna88k/luna88k/isr.c,v retrieving revision 1.8 diff -u -p -r1.8 isr.c --- arch/luna88k/luna88k/isr.c 20 Sep 2010 06:33:47 -0000 1.8 +++ arch/luna88k/luna88k/isr.c 5 Nov 2010 15:50:38 -0000 @@ -42,8 +42,6 @@ #include <uvm/uvm_extern.h> -#include <net/netisr.h> - #include <machine/cpu.h> #include <luna88k/luna88k/isr.h> Index: arch/m68k/include/intr.h =================================================================== RCS file: /cvs/src/sys/arch/m68k/include/intr.h,v retrieving revision 1.1 diff -u -p -r1.1 intr.h --- arch/m68k/include/intr.h 15 Mar 2009 20:40:25 -0000 1.1 +++ arch/m68k/include/intr.h 5 Nov 2010 15:50:38 -0000 @@ -101,11 +101,6 @@ void softintr_schedule(void *); extern int softpending; -/* XXX For legacy software interrupts. */ -extern struct soft_intrhand *softnet_intrhand; - -#define setsoftnet() softintr_schedule(softnet_intrhand) - #endif /* _LOCORE */ #endif /* _KERNEL */ Index: arch/m68k/m68k/softintr.c =================================================================== RCS file: /cvs/src/sys/arch/m68k/m68k/softintr.c,v retrieving revision 1.1 diff -u -p -r1.1 softintr.c --- arch/m68k/m68k/softintr.c 15 Mar 2009 20:40:25 -0000 1.1 +++ arch/m68k/m68k/softintr.c 5 Nov 2010 15:50:38 -0000 @@ -39,9 +39,6 @@ #include <sys/param.h> #include <sys/malloc.h> -/* XXX Network interrupts should be converted to new softintrs. */ -#include <net/netisr.h> - #include <uvm/uvm_extern.h> #include <machine/atomic.h> @@ -49,10 +46,6 @@ struct soft_intrq soft_intrq[SI_NQUEUES]; -struct soft_intrhand *softnet_intrhand; - -void netintr(void); - /* * Initialize the software interrupt system. */ @@ -68,10 +61,6 @@ softintr_init(void) siq->siq_si = i; mtx_init(&siq->siq_mtx, IPL_HIGH); } - - /* XXX Establish legacy software interrupt handlers. */ - softnet_intrhand = softintr_establish(IPL_SOFTNET, - (void (*)(void *))netintr, NULL); } /* @@ -176,23 +165,4 @@ softintr_schedule(void *arg) atomic_setbits_int(&softpending, 1 << siq->siq_si); } mtx_leave(&siq->siq_mtx); -} - -int netisr; - -void -netintr(void) -{ - int n; - - while ((n = netisr) != 0) { - atomic_clearbits_int(&netisr, n); -#define DONETISR(bit, fn) \ - do { \ - if (n & (1 << (bit))) \ - fn(); \ - } while (0) -#include <net/netisr_dispatch.h> -#undef DONETISR - } } Index: arch/m88k/include/intr.h =================================================================== RCS file: /cvs/src/sys/arch/m88k/include/intr.h,v retrieving revision 1.11 diff -u -p -r1.11 intr.h --- arch/m88k/include/intr.h 15 Mar 2009 20:39:53 -0000 1.11 +++ arch/m88k/include/intr.h 5 Nov 2010 15:50:38 -0000 @@ -150,11 +150,6 @@ void softintr_schedule(void *); extern int softpending; -/* XXX For legacy software interrupts. */ -extern struct soft_intrhand *softnet_intrhand; - -#define setsoftnet() softintr_schedule(softnet_intrhand) - #endif /* _LOCORE */ #endif /* _KERNEL */ Index: arch/m88k/m88k/softintr.c =================================================================== RCS file: /cvs/src/sys/arch/m88k/m88k/softintr.c,v retrieving revision 1.1 diff -u -p -r1.1 softintr.c --- arch/m88k/m88k/softintr.c 15 Mar 2009 20:39:53 -0000 1.1 +++ arch/m88k/m88k/softintr.c 5 Nov 2010 15:50:38 -0000 @@ -39,9 +39,6 @@ #include <sys/param.h> #include <sys/malloc.h> -/* XXX Network interrupts should be converted to new softintrs. */ -#include <net/netisr.h> - #include <uvm/uvm_extern.h> #include <machine/atomic.h> @@ -49,10 +46,6 @@ struct soft_intrq soft_intrq[SI_NQUEUES]; -struct soft_intrhand *softnet_intrhand; - -void netintr(void); - /* * Initialize the software interrupt system. */ @@ -68,10 +61,6 @@ softintr_init(void) siq->siq_si = i; mtx_init(&siq->siq_mtx, IPL_HIGH); } - - /* XXX Establish legacy software interrupt handlers. */ - softnet_intrhand = softintr_establish(IPL_SOFTNET, - (void (*)(void *))netintr, NULL); } /* @@ -176,22 +165,4 @@ softintr_schedule(void *arg) atomic_setbits_int(&softpending, 1 << siq->siq_si); } mtx_leave(&siq->siq_mtx); -} - -int netisr; - -void -netintr(void) -{ - int n; - - while ((n = atomic_clear_int(&netisr)) != 0) { -#define DONETISR(bit, fn) \ - do { \ - if (n & (1 << (bit))) \ - fn(); \ - } while (0) -#include <net/netisr_dispatch.h> -#undef DONETISR - } } Index: arch/mips64/mips64/softintr.c =================================================================== RCS file: /cvs/src/sys/arch/mips64/mips64/softintr.c,v retrieving revision 1.11 diff -u -p -r1.11 softintr.c --- arch/mips64/mips64/softintr.c 18 Jan 2010 17:00:28 -0000 1.11 +++ arch/mips64/mips64/softintr.c 5 Nov 2010 15:50:38 -0000 @@ -39,9 +39,6 @@ #include <sys/param.h> #include <sys/malloc.h> -/* XXX Network interrupts should be converted to new softintrs. */ -#include <net/netisr.h> - #include <uvm/uvm_extern.h> #include <machine/atomic.h> @@ -49,8 +46,6 @@ struct soft_intrq soft_intrq[SI_NQUEUES]; -struct soft_intrhand *softnet_intrhand; - void netintr(void); /* @@ -68,10 +63,6 @@ softintr_init(void) siq->siq_si = i; mtx_init(&siq->siq_mtx, IPL_HIGH); } - - /* XXX Establish legacy software interrupt handlers. */ - softnet_intrhand = softintr_establish(IPL_SOFTNET, - (void (*)(void *))netintr, NULL); } /* @@ -178,25 +169,6 @@ softintr_schedule(void *arg) atomic_setbits_int(&ci->ci_softpending, SINTMASK(siq->siq_si)); } mtx_leave(&siq->siq_mtx); -} - -int netisr; - -void -netintr(void) -{ - int n; - - while ((n = netisr) != 0) { - atomic_clearbits_int(&netisr, n); -#define DONETISR(bit, fn) \ - do { \ - if (n & (1 << (bit))) \ - fn(); \ - } while (0) -#include <net/netisr_dispatch.h> -#undef DONETISR - } } void Index: arch/mvmeppc/mvmeppc/machdep.c =================================================================== RCS file: /cvs/src/sys/arch/mvmeppc/mvmeppc/machdep.c,v retrieving revision 1.63 diff -u -p -r1.63 machdep.c --- arch/mvmeppc/mvmeppc/machdep.c 22 Aug 2009 02:54:50 -0000 1.63 +++ arch/mvmeppc/mvmeppc/machdep.c 5 Nov 2010 15:50:53 -0000 @@ -49,8 +49,6 @@ #include <sys/systm.h> #include <sys/user.h> -#include <net/netisr.h> - #include <machine/bat.h> #include <machine/bugio.h> #include <machine/pmap.h> @@ -594,22 +592,6 @@ dumpsys() volatile int cpl, ipending, astpending; int imask[IPL_NUM]; -int netisr; - -/* - * Soft networking interrupts. - */ -void -softnet(isr) - int isr; -{ -#define DONETISR(flag, func) \ - if (isr & (1 << (flag))) \ - (func)(); - -#include <net/netisr_dispatch.h> -#undef DONETISR -} int lcsplx(ipl) Index: arch/powerpc/include/intr.h =================================================================== RCS file: /cvs/src/sys/arch/powerpc/include/intr.h,v retrieving revision 1.44 diff -u -p -r1.44 intr.h --- arch/powerpc/include/intr.h 23 Apr 2010 03:50:22 -0000 1.44 +++ arch/powerpc/include/intr.h 5 Nov 2010 15:50:53 -0000 @@ -115,11 +115,6 @@ void *softintr_establish(int, void (*)(v void softintr_init(void); void softintr_schedule(void *); -/* XXX For legacy software interrupts. */ -extern struct soft_intrhand *softnet_intrhand; - -#define setsoftnet() softintr_schedule(softnet_intrhand) - #define SINT_CLOCK SINTMASK(SI_SOFTCLOCK) #define SINT_NET SINTMASK(SI_SOFTNET) #define SINT_TTY SINTMASK(SI_SOFTTTY) Index: arch/powerpc/powerpc/softintr.c =================================================================== RCS file: /cvs/src/sys/arch/powerpc/powerpc/softintr.c,v retrieving revision 1.2 diff -u -p -r1.2 softintr.c --- arch/powerpc/powerpc/softintr.c 8 Nov 2009 21:05:18 -0000 1.2 +++ arch/powerpc/powerpc/softintr.c 5 Nov 2010 15:50:53 -0000 @@ -39,9 +39,6 @@ #include <sys/param.h> #include <sys/malloc.h> -/* XXX Network interrupts should be converted to new softintrs. */ -#include <net/netisr.h> - #include <uvm/uvm_extern.h> #include <machine/atomic.h> @@ -51,8 +48,6 @@ struct soft_intrq soft_intrq[SI_NQUEUES] struct soft_intrhand *softnet_intrhand; -void netintr(void); - /* * Initialize the software interrupt system. */ @@ -68,10 +63,6 @@ softintr_init(void) siq->siq_si = i; mtx_init(&siq->siq_mtx, IPL_HIGH); } - - /* XXX Establish legacy software interrupt handlers. */ - softnet_intrhand = softintr_establish(IPL_SOFTNET, - (void (*)(void *))netintr, NULL); } /* @@ -182,25 +173,6 @@ softintr_schedule(void *arg) atomic_setbits_int(&ci->ci_ipending, SINTMASK(siq->siq_si)); } mtx_leave(&siq->siq_mtx); -} - -int netisr; - -void -netintr(void) -{ - int n; - - while ((n = netisr) != 0) { - atomic_clearbits_int(&netisr, n); -#define DONETISR(bit, fn) \ - do { \ - if (n & (1 << (bit))) \ - fn(); \ - } while (0) -#include <net/netisr_dispatch.h> -#undef DONETISR - } } #if 0 Index: arch/sgi/include/intr.h =================================================================== RCS file: /cvs/src/sys/arch/sgi/include/intr.h,v retrieving revision 1.41 diff -u -p -r1.41 intr.h --- arch/sgi/include/intr.h 18 Jan 2010 16:59:23 -0000 1.41 +++ arch/sgi/include/intr.h 5 Nov 2010 15:50:53 -0000 @@ -107,11 +107,6 @@ void *softintr_establish(int, void (*)(v void softintr_init(void); void softintr_schedule(void *); -/* XXX For legacy software interrupts. */ -extern struct soft_intrhand *softnet_intrhand; - -#define setsoftnet() softintr_schedule(softnet_intrhand) - #define splsoft() splraise(IPL_SOFTINT) #define splbio() splraise(IPL_BIO) #define splnet() splraise(IPL_NET) Index: arch/sh/include/intr.h =================================================================== RCS file: /cvs/src/sys/arch/sh/include/intr.h,v retrieving revision 1.7 diff -u -p -r1.7 intr.h --- arch/sh/include/intr.h 19 Apr 2009 18:54:06 -0000 1.7 +++ arch/sh/include/intr.h 5 Nov 2010 15:50:53 -0000 @@ -114,11 +114,6 @@ void *softintr_establish(int, void (*)(v void softintr_init(void); void softintr_schedule(void *); -/* XXX For legacy software interrupts. */ -extern struct sh_soft_intrhand *softnet_intrhand; - -#define setsoftnet() softintr_schedule(softnet_intrhand) - #endif /* _KERNEL */ #endif /* !_SH_INTR_H_ */ Index: arch/sh/sh/interrupt.c =================================================================== RCS file: /cvs/src/sys/arch/sh/sh/interrupt.c,v retrieving revision 1.11 diff -u -p -r1.11 interrupt.c --- arch/sh/sh/interrupt.c 20 Sep 2010 06:33:47 -0000 1.11 +++ arch/sh/sh/interrupt.c 5 Nov 2010 15:50:53 -0000 @@ -35,8 +35,6 @@ #include <uvm/uvm_extern.h> /* uvmexp.intrs */ -#include <net/netisr.h> - #include <sh/clock.h> #include <sh/trap.h> #include <sh/intcreg.h> @@ -61,8 +59,6 @@ void tmu2_oneshot(void); int tmu2_intr(void *); void setsoft(int); -int netisr; - /* * EVTCODE to intc_intrhand mapper. * max #76 is SH4_INTEVT_TMU4 (0xb80) @@ -75,7 +71,6 @@ struct intc_intrhand __intc_intrhand[_IN }; struct sh_soft_intr sh_soft_intrs[_IPL_NSOFT]; -struct sh_soft_intrhand *softnet_intrhand; /* * SH INTC support. @@ -588,11 +583,6 @@ softintr_init(void) asi->softintr_ipl = IPL_SOFT + i; } - /* XXX Establish legacy soft interrupt handlers. */ - softnet_intrhand = softintr_establish(IPL_SOFTNET, - (void (*)(void *))netintr, NULL); - KDASSERT(softnet_intrhand != NULL); - intc_intr_establish(SH_INTEVT_TMU1_TUNI1, IST_LEVEL, IPL_SOFT, tmu1_intr, NULL, "tmu1"); intc_intr_establish(SH_INTEVT_TMU2_TUNI2, IST_LEVEL, IPL_SOFTNET, @@ -687,29 +677,6 @@ void softintr_schedule(void *arg) setsoft(si->softintr_ipl); } mtx_leave(&si->softintr_lock); -} - -/* - * Software (low priority) network interrupt. i.e. softnet(). - */ -void -netintr(void) -{ - int n; - - while ((n = netisr) != 0) { - atomic_clearbits_int(&netisr, n); - -#define DONETISR(bit, fn) \ - do { \ - if (n & (1 << bit)) \ - fn(); \ - } while (/*CONSTCOND*/0) - -#include <net/netisr_dispatch.h> - -#undef DONETISR - } } /* Index: arch/sparc/include/intr.h =================================================================== RCS file: /cvs/src/sys/arch/sparc/include/intr.h,v retrieving revision 1.1 diff -u -p -r1.1 intr.h --- arch/sparc/include/intr.h 10 Apr 2009 20:53:54 -0000 1.1 +++ arch/sparc/include/intr.h 5 Nov 2010 15:50:53 -0000 @@ -94,9 +94,5 @@ void softintr_disestablish(void *); void *softintr_establish(int, void (*)(void *), void *); void softintr_schedule(void *); -/* XXX legacy software interrupts */ -extern void *softnet_ih; -#define setsoftnet() softintr_schedule(softnet_ih) - #endif /* _KERNEL */ #endif /* _SPARC_INTR_H_ */ Index: arch/sparc/sparc/intr.c =================================================================== RCS file: /cvs/src/sys/arch/sparc/sparc/intr.c,v retrieving revision 1.36 diff -u -p -r1.36 intr.c --- arch/sparc/sparc/intr.c 28 Sep 2010 18:52:00 -0000 1.36 +++ arch/sparc/sparc/intr.c 5 Nov 2010 15:56:59 -0000 @@ -51,9 +51,6 @@ #include <dev/cons.h> -#include <net/netisr.h> -#include <net/if.h> - #include <machine/atomic.h> #include <machine/cpu.h> #include <machine/ctlreg.h> @@ -62,26 +59,11 @@ #include <sparc/sparc/cpuvar.h> -#ifdef INET -#include <netinet/in.h> -#include <netinet/if_ether.h> -#include <netinet/ip_var.h> -#endif - -#ifdef INET6 -# ifndef INET -# include <netinet/in.h> -# endif -#include <netinet/ip6.h> -#include <netinet6/ip6_var.h> -#endif - extern void raise(int, int); void ih_insert(struct intrhand **, struct intrhand *); void ih_remove(struct intrhand **, struct intrhand *); -void softnet(void *); void strayintr(struct clockframe *); /* @@ -180,8 +162,6 @@ intr_init() evcount_attach(&level10.ih_count, "clock", &level10.ih_vec); level14.ih_vec = level14.ih_ipl >> 8; evcount_attach(&level14.ih_count, "prof", &level14.ih_vec); - - softnet_ih = softintr_establish(IPL_SOFTNET, softnet, NULL); } /* @@ -554,29 +534,6 @@ softintr_schedule(void *arg) } } splx(s); -} - -void *softnet_ih; -int netisr; - -void -softnet(void *arg) -{ - int n; - - while ((n = netisr) != 0) { - atomic_clearbits_int(&netisr, n); - -#define DONETISR(bit, fn) \ - do { \ - if (n & (1 << bit)) \ - fn(); \ - } while (0) - -#include <net/netisr_dispatch.h> - -#undef DONETISR - } } #ifdef DIAGNOSTIC Index: arch/sparc64/include/cpu.h =================================================================== RCS file: /cvs/src/sys/arch/sparc64/include/cpu.h,v retrieving revision 1.73 diff -u -p -r1.73 cpu.h --- arch/sparc64/include/cpu.h 28 Sep 2010 20:27:55 -0000 1.73 +++ arch/sparc64/include/cpu.h 5 Nov 2010 15:50:53 -0000 @@ -221,8 +221,6 @@ struct clockframe { extern void (*cpu_start_clock)(void); -void setsoftnet(void); - #define aston(p) ((p)->p_md.md_astpending = 1) /* Index: arch/sparc64/sparc64/intr.c =================================================================== RCS file: /cvs/src/sys/arch/sparc64/sparc64/intr.c,v retrieving revision 1.38 diff -u -p -r1.38 intr.c --- arch/sparc64/sparc64/intr.c 27 Sep 2010 17:39:43 -0000 1.38 +++ arch/sparc64/sparc64/intr.c 5 Nov 2010 15:50:53 -0000 @@ -48,8 +48,6 @@ #include <dev/cons.h> -#include <net/netisr.h> - #include <machine/atomic.h> #include <machine/cpu.h> #include <machine/ctlreg.h> @@ -69,7 +67,6 @@ struct intrhand *intrlev[MAXINTNUM]; void strayintr(const struct trapframe64 *, int); int softintr(void *); -int softnet(void *); int intr_list_handler(void *); void intr_ack(struct intrhand *); @@ -124,37 +121,6 @@ strayintr(fp, vectored) * Network software interrupt * Soft clock interrupt */ - -int netisr; - -int -softnet(fp) - void *fp; -{ - int n; - - while ((n = netisr) != 0) { - atomic_clearbits_int(&netisr, n); - -#define DONETISR(bit, fn) \ - do { \ - if (n & (1 << bit)) \ - fn(); \ - } while (0) - -#include <net/netisr_dispatch.h> - -#undef DONETISR - } - return (1); -} - -struct intrhand soft01net = { softnet, NULL, 1 }; - -void -setsoftnet() { - send_softint(-1, IPL_SOFTNET, &soft01net); -} /* * PCI devices can share interrupts so we need to have Index: arch/vax/include/intr.h =================================================================== RCS file: /cvs/src/sys/arch/vax/include/intr.h,v retrieving revision 1.12 diff -u -p -r1.12 intr.h --- arch/vax/include/intr.h 23 Apr 2010 03:50:22 -0000 1.12 +++ arch/vax/include/intr.h 5 Nov 2010 15:50:53 -0000 @@ -155,11 +155,6 @@ void *softintr_establish(int, void (*)(v void softintr_init(void); void softintr_schedule(void *); -/* XXX For legacy software interrupts. */ -extern struct soft_intrhand *softnet_intrhand; - -#define setsoftnet() softintr_schedule(softnet_intrhand) - #endif /* _LOCORE */ #endif /* _VAX_INTR_H */ Index: arch/vax/vax/locore.S =================================================================== RCS file: /cvs/src/sys/arch/vax/vax/locore.S,v retrieving revision 1.3 diff -u -p -r1.3 locore.S --- arch/vax/vax/locore.S 29 Jun 2010 18:46:34 -0000 1.3 +++ arch/vax/vax/locore.S 5 Nov 2010 15:50:53 -0000 @@ -35,7 +35,6 @@ #include "assym.h" #include <machine/asm.h> -#include <net/netisr.h> #define JSBENTRY(x) \ .text; _ALIGN_TEXT; .globl x; x: @@ -278,11 +277,6 @@ JSBENTRY(sbiflt) TRAPCALL(astintr, T_ASTFLT) FASTINTR(softintr,softintr_dispatch) - - .data - .global _netisr -_netisr: - .long 0 # scheduling bits for network TRAPCALL(ddbtrap, T_KDBTRAP) Index: arch/vax/vax/machdep.c =================================================================== RCS file: /cvs/src/sys/arch/vax/vax/machdep.c,v retrieving revision 1.110 diff -u -p -r1.110 machdep.c --- arch/vax/vax/machdep.c 29 Jun 2010 18:46:34 -0000 1.110 +++ arch/vax/vax/machdep.c 5 Nov 2010 15:50:53 -0000 @@ -76,7 +76,6 @@ #include <uvm/uvm.h> -#include <net/netisr.h> #include <net/if.h> #ifdef INET Index: arch/vax/vax/softintr.c =================================================================== RCS file: /cvs/src/sys/arch/vax/vax/softintr.c,v retrieving revision 1.1 diff -u -p -r1.1 softintr.c --- arch/vax/vax/softintr.c 20 Mar 2009 18:39:30 -0000 1.1 +++ arch/vax/vax/softintr.c 5 Nov 2010 15:50:53 -0000 @@ -39,9 +39,6 @@ #include <sys/param.h> #include <sys/malloc.h> -/* XXX Network interrupts should be converted to new softintrs. */ -#include <net/netisr.h> - #include <uvm/uvm_extern.h> #include <machine/atomic.h> @@ -170,23 +167,4 @@ softintr_schedule(void *arg) mtpr(siq->siq_si, PR_SIRR); } mtx_leave(&siq->siq_mtx); -} - -int netisr; - -void -netintr(void) -{ - int n; - - while ((n = netisr) != 0) { - atomic_clearbits_int(&netisr, n); -#define DONETISR(bit, fn) \ - do { \ - if (n & (1 << (bit))) \ - fn(); \ - } while (0) -#include <net/netisr_dispatch.h> -#undef DONETISR - } } Index: conf/files =================================================================== RCS file: /cvs/src/sys/conf/files,v retrieving revision 1.504 diff -u -p -r1.504 files --- conf/files 6 Oct 2010 22:19:20 -0000 1.504 +++ conf/files 5 Nov 2010 15:50:53 -0000 @@ -807,6 +807,7 @@ file net/if_loop.c loop file net/if_media.c ifmedia file net/if_sl.c sl needs-count file net/if_ppp.c ppp needs-count +file net/netisr.c file net/ppp_tty.c ppp file net/bsd-comp.c ppp_bsdcomp file net/ppp-deflate.c ppp_deflate Index: kern/init_main.c =================================================================== RCS file: /cvs/src/sys/kern/init_main.c,v retrieving revision 1.171 diff -u -p -r1.171 init_main.c --- kern/init_main.c 8 Sep 2010 14:15:56 -0000 1.171 +++ kern/init_main.c 5 Nov 2010 15:50:53 -0000 @@ -89,6 +89,7 @@ #include <net/if.h> #include <net/raw_cb.h> +#include <net/netisr.h> #if defined(CRYPTO) #include <crypto/cryptodev.h> @@ -396,6 +397,7 @@ main(void *framep) * until everything is ready. */ s = splnet(); + netisr_init(); domaininit(); if_attachdomain(); splx(s); Index: net/netisr.c =================================================================== RCS file: net/netisr.c diff -N net/netisr.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ net/netisr.c 5 Nov 2010 15:50:53 -0000 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2010 Owain G. Ainsworth <o...@openbsd.org> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#include <sys/param.h> +#include <sys/systm.h> + +#include <net/netisr.h> + +#include <machine/intr.h> + +void netintr(void *); + +int netisr; +void *netisr_intr; + +void +netintr(void *unused) /* ARGSUSED */ +{ + int n; + while ((n = netisr) != 0) { + atomic_clearbits_int(&netisr, n); +#define DONETISR(bit, fn) \ + do { \ + if (n & 1 << (bit)) \ + fn(); \ + } while ( /* CONSTCOND */ 0) +#include <net/netisr_dispatch.h> + +#undef DONETISR + } +} + +void +netisr_init(void) +{ + netisr_intr = softintr_establish(IPL_SOFTNET, netintr, NULL); + if (netisr_intr == NULL) + panic("can't establish softnet handler"); +} Index: net/netisr.h =================================================================== RCS file: /cvs/src/sys/net/netisr.h,v retrieving revision 1.34 diff -u -p -r1.34 netisr.h --- net/netisr.h 16 Feb 2009 00:31:25 -0000 1.34 +++ net/netisr.h 5 Nov 2010 15:50:53 -0000 @@ -41,9 +41,6 @@ * The software interrupt level for the network is higher than the software * level for the clock (so you can enter the network in routines called * at timeout time). - * - * The routine to request a network software interrupt, setsoftnet(), - * is defined in the machine-specific include files. */ /* @@ -86,11 +83,16 @@ void mplsintr(void); void pfsyncintr(void); #include <machine/atomic.h> + +extern void *netisr_intr; #define schednetisr(anisr) \ do { \ atomic_setbits_int(&netisr, (1 << (anisr))); \ - setsoftnet(); \ -} while (0) + softintr_schedule(netisr_intr); \ +} while (/* CONSTCOND */0) + +void netisr_init(void); + #endif #endif