Date: Fri, 14 Nov 2003 11:43:40 -0800 (PST) From: Peter Wemm <peter@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 42366 for review Message-ID: <200311141943.hAEJhe6a062186@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=42366 Change 42366 by peter@peter_daintree on 2003/11/14 11:43:00 IFC @42364 Affected files ... .. //depot/projects/hammer/include/ifaddrs.h#2 integrate .. //depot/projects/hammer/lib/libc/net/Makefile.inc#6 integrate .. //depot/projects/hammer/lib/libc/net/getifmaddrs.3#1 branch .. //depot/projects/hammer/lib/libc/net/getifmaddrs.c#1 branch .. //depot/projects/hammer/sys/dev/an/if_an.c#12 integrate .. //depot/projects/hammer/sys/dev/an/if_anreg.h#5 integrate .. //depot/projects/hammer/sys/dev/bfe/if_bfe.c#3 integrate .. //depot/projects/hammer/sys/dev/my/if_my.c#10 integrate .. //depot/projects/hammer/sys/dev/owi/if_owi.c#3 integrate .. //depot/projects/hammer/sys/dev/owi/if_wivar.h#2 integrate .. //depot/projects/hammer/sys/dev/re/if_re.c#7 integrate .. //depot/projects/hammer/sys/dev/wl/if_wl.c#8 integrate .. //depot/projects/hammer/sys/i386/i386/apic_vector.s#4 integrate .. //depot/projects/hammer/sys/i386/i386/local_apic.c#3 integrate .. //depot/projects/hammer/sys/i386/i386/machdep.c#26 integrate .. //depot/projects/hammer/sys/i386/include/apicvar.h#4 integrate .. //depot/projects/hammer/sys/i386/include/intr_machdep.h#2 integrate .. //depot/projects/hammer/sys/i386/isa/atpic.c#4 integrate .. //depot/projects/hammer/sys/i386/isa/icu.h#4 integrate .. //depot/projects/hammer/sys/kern/kern_event.c#11 integrate .. //depot/projects/hammer/sys/kern/kern_exit.c#16 integrate .. //depot/projects/hammer/sys/net/rtsock.c#8 integrate .. //depot/projects/hammer/sys/pci/if_dc.c#26 integrate .. //depot/projects/hammer/sys/pci/if_dcreg.h#12 integrate .. //depot/projects/hammer/sys/pci/if_pcn.c#13 integrate .. //depot/projects/hammer/sys/pci/if_pcnreg.h#2 integrate .. //depot/projects/hammer/sys/pci/if_rl.c#22 integrate .. //depot/projects/hammer/sys/pci/if_rlreg.h#8 integrate .. //depot/projects/hammer/sys/pci/if_sf.c#14 integrate .. //depot/projects/hammer/sys/pci/if_sfreg.h#2 integrate .. //depot/projects/hammer/sys/pci/if_sis.c#18 integrate .. //depot/projects/hammer/sys/pci/if_sisreg.h#5 integrate .. //depot/projects/hammer/sys/pci/if_sk.c#16 integrate .. //depot/projects/hammer/sys/pci/if_skreg.h#5 integrate .. //depot/projects/hammer/sys/pci/if_ste.c#14 integrate .. //depot/projects/hammer/sys/pci/if_stereg.h#4 integrate .. //depot/projects/hammer/sys/pci/if_ti.c#15 integrate .. //depot/projects/hammer/sys/pci/if_tireg.h#3 integrate .. //depot/projects/hammer/sys/pci/if_tl.c#12 integrate .. //depot/projects/hammer/sys/pci/if_tlreg.h#3 integrate .. //depot/projects/hammer/sys/pci/if_vr.c#13 integrate .. //depot/projects/hammer/sys/pci/if_vrreg.h#4 integrate .. //depot/projects/hammer/sys/pci/if_wb.c#13 integrate .. //depot/projects/hammer/sys/pci/if_wbreg.h#2 integrate .. //depot/projects/hammer/sys/pci/if_xl.c#27 integrate .. //depot/projects/hammer/sys/pci/if_xlreg.h#8 integrate .. //depot/projects/hammer/sys/sys/socket.h#6 integrate Differences ... ==== //depot/projects/hammer/include/ifaddrs.h#2 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/include/ifaddrs.h,v 1.2 2002/03/23 17:24:53 imp Exp $ */ +/* $FreeBSD: src/include/ifaddrs.h,v 1.3 2003/11/14 18:53:22 bms Exp $ */ /* * Copyright (c) 1995, 1999 @@ -46,11 +46,20 @@ #define ifa_broadaddr ifa_dstaddr /* broadcast address interface */ #endif +struct ifmaddrs { + struct ifmaddrs *ifma_next; + struct sockaddr *ifma_name; + struct sockaddr *ifma_addr; + struct sockaddr *ifma_lladdr; +}; + #include <sys/cdefs.h> __BEGIN_DECLS extern int getifaddrs(struct ifaddrs **); extern void freeifaddrs(struct ifaddrs *); +extern int getifmaddrs(struct ifmaddrs **); +extern void freeifmaddrs(struct ifmaddrs *); __END_DECLS #endif ==== //depot/projects/hammer/lib/libc/net/Makefile.inc#6 (text+ko) ==== @@ -1,12 +1,12 @@ # from @(#)Makefile.inc 8.2 (Berkeley) 9/5/93 -# $FreeBSD: src/lib/libc/net/Makefile.inc,v 1.49 2003/10/24 18:26:28 ume Exp $ +# $FreeBSD: src/lib/libc/net/Makefile.inc,v 1.50 2003/11/14 18:53:22 bms Exp $ # machine-independent net sources .PATH: ${.CURDIR}/${MACHINE_ARCH}/net ${.CURDIR}/net SRCS+= addr2ascii.c ascii2addr.c base64.c ether_addr.c getaddrinfo.c \ gethostbydns.c gethostbyht.c gethostbynis.c gethostnamadr.c \ - getifaddrs.c getnameinfo.c \ + getifaddrs.c getifmaddrs.c getnameinfo.c \ getnetbydns.c getnetbyht.c getnetbynis.c getnetnamadr.c \ getproto.c getprotoent.c getprotoname.c getservbyname.c \ getservbyport.c getservent.c herror.c hesiod.c inet_addr.c \ @@ -40,7 +40,7 @@ .endif MAN+= addr2ascii.3 byteorder.3 ethers.3 getaddrinfo.3 gethostbyname.3 \ - getifaddrs.3 getipnodebyname.3 \ + getifaddrs.3 getifmaddrs.3 getipnodebyname.3 \ getnameinfo.3 getnetent.3 getprotoent.3 getservent.3 hesiod.3 \ if_indextoname.3 \ inet.3 inet_net.3 \ @@ -59,6 +59,7 @@ gethostbyname.3 herror.3 gethostbyname.3 hstrerror.3 \ gethostbyname.3 sethostent.3 MLINKS+=getifaddrs.3 freeifaddrs.3 +MLINKS+=getifmaddrs.3 freeifmaddrs.3 MLINKS+=getipnodebyname.3 getipnodebyaddr.3 getipnodebyname.3 freehostent.3 MLINKS+=getnetent.3 endnetent.3 getnetent.3 getnetbyaddr.3 \ getnetent.3 getnetbyname.3 getnetent.3 setnetent.3 ==== //depot/projects/hammer/sys/dev/an/if_an.c#12 (text+ko) ==== @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/an/if_an.c,v 1.55 2003/10/31 18:31:56 brooks Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/an/if_an.c,v 1.56 2003/11/14 19:00:29 sam Exp $"); /* * The Aironet 4500/4800 series cards come in PCMCIA, ISA and PCI form. @@ -833,6 +833,8 @@ struct an_card_rx_desc an_rx_desc; u_int8_t *buf; + AN_LOCK_ASSERT(sc); + ifp = &sc->arpcom.ac_if; if (!sc->mpi350) { @@ -981,7 +983,9 @@ rx_frame.an_rx_signal_strength, rx_frame.an_rsvd0); #endif + AN_UNLOCK(sc); (*ifp->if_input)(ifp, m); + AN_LOCK(sc); } } else { /* MPI-350 */ ==== //depot/projects/hammer/sys/dev/an/if_anreg.h#5 (text+ko) ==== @@ -29,7 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/an/if_anreg.h,v 1.19 2003/08/24 17:48:04 obrien Exp $ + * $FreeBSD: src/sys/dev/an/if_anreg.h,v 1.20 2003/11/14 19:00:30 sam Exp $ */ #define AN_TIMEOUT 65536 @@ -502,6 +502,7 @@ #define AN_LOCK(_sc) mtx_lock(&(_sc)->an_mtx) #define AN_UNLOCK(_sc) mtx_unlock(&(_sc)->an_mtx) +#define AN_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->an_mtx, MA_OWNED) void an_release_resources (device_t); int an_alloc_port (device_t, int, int); ==== //depot/projects/hammer/sys/dev/bfe/if_bfe.c#3 (text+ko) ==== @@ -28,7 +28,7 @@ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/bfe/if_bfe.c,v 1.3 2003/10/31 18:31:57 brooks Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/bfe/if_bfe.c,v 1.4 2003/11/14 19:00:30 sam Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1153,7 +1153,9 @@ ifp->if_ipackets++; m->m_pkthdr.rcvif = ifp; + BFE_UNLOCK(sc); (*ifp->if_input)(ifp, m); + BFE_LOCK(sc); BFE_INC(cons, BFE_RX_LIST_CNT); } ==== //depot/projects/hammer/sys/dev/my/if_my.c#10 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/my/if_my.c,v 1.20 2003/11/13 20:55:49 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/my/if_my.c,v 1.21 2003/11/14 19:00:30 sam Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1277,7 +1277,9 @@ } } #endif + MY_UNLOCK(sc); (*ifp->if_input)(ifp, m); + MY_LOCK(sc); } MY_UNLOCK(sc); return; ==== //depot/projects/hammer/sys/dev/owi/if_owi.c#3 (text+ko) ==== @@ -100,7 +100,7 @@ #if !defined(lint) static const char rcsid[] = - "$FreeBSD: src/sys/dev/owi/if_owi.c,v 1.2 2003/10/14 05:25:31 imp Exp $"; + "$FreeBSD: src/sys/dev/owi/if_owi.c,v 1.3 2003/11/14 19:00:30 sam Exp $"; #endif static void wi_intr(void *); @@ -449,6 +449,8 @@ struct mbuf *m; int id; + WI_LOCK_ASSERT(sc); + ifp = &sc->arpcom.ac_if; id = CSR_READ_2(sc, WI_RX_FID); @@ -650,7 +652,9 @@ #ifdef WICACHE wi_cache_store(sc, eh, m, rx_frame.wi_q_info); #endif + WI_UNLOCK(sc); (*ifp->if_input)(ifp, m); + WI_LOCK(sc); } } ==== //depot/projects/hammer/sys/dev/owi/if_wivar.h#2 (text+ko) ==== @@ -31,7 +31,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/owi/if_wivar.h,v 1.1 2003/08/24 05:42:49 imp Exp $ + * $FreeBSD: src/sys/dev/owi/if_wivar.h,v 1.2 2003/11/14 19:00:30 sam Exp $ */ #define WICACHE /* turn on signal strength cache code */ @@ -171,9 +171,11 @@ #define ifaddr_byindex(idx) ifnet_addrs[(idx) - 1]; #define WI_LOCK(_sc, _s) s = splimp() #define WI_UNLOCK(_sc, _s) splx(s) +#define WI_LOCK_ASSERT(_sc) #else #define WI_LOCK(_sc, _s) _s = 1 #define WI_UNLOCK(_sc, _s) +#define WI_LOCK_ASSERT(_sc) #endif int owi_generic_attach(device_t); ==== //depot/projects/hammer/sys/dev/re/if_re.c#7 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/re/if_re.c,v 1.14 2003/11/14 17:16:57 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/re/if_re.c,v 1.15 2003/11/14 19:00:31 sam Exp $"); /* * RealTek 8139C+/8169/8169S/8110S PCI NIC driver @@ -1517,6 +1517,8 @@ struct rl_desc *cur_rx; u_int32_t rxstat, rxvlan; + RL_LOCK_ASSERT(sc); + ifp = &sc->arpcom.ac_if; i = sc->rl_ldata.rl_rx_prodidx; @@ -1659,7 +1661,9 @@ if (rxvlan & RL_RDESC_VLANCTL_TAG) VLAN_INPUT_TAG(ifp, m, ntohs((rxvlan & RL_RDESC_VLANCTL_DATA)), continue); + RL_UNLOCK(sc); (*ifp->if_input)(ifp, m); + RL_LOCK(sc); } /* Flush the RX DMA ring */ ==== //depot/projects/hammer/sys/dev/wl/if_wl.c#8 (text+ko) ==== @@ -173,7 +173,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/wl/if_wl.c,v 1.56 2003/11/13 20:55:51 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/wl/if_wl.c,v 1.57 2003/11/14 19:00:31 sam Exp $"); /* @@ -265,6 +265,7 @@ }; #define WL_LOCK(_sc) mtx_lock(&(_sc)->wl_mtx) +#define WL_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->wl_mtx, MA_OWNED) #define WL_UNLOCK(_sc) mtx_unlock(&(_sc)->wl_mtx) static int wlprobe(device_t); @@ -1069,6 +1070,7 @@ u_short mlen, len; u_short bytes_in_msg, bytes_in_mbuf, bytes; + WL_LOCK_ASSERT(sc); #ifdef WLDEBUG if (sc->wl_if.if_flags & IFF_DEBUG) @@ -1212,7 +1214,9 @@ * received packet is now in a chain of mbuf's. next step is * to pass the packet upwards. */ + WL_UNLOCK(sc); (*ifp->if_input)(ifp, m); + WL_LOCK(sc); return 1; } ==== //depot/projects/hammer/sys/i386/i386/apic_vector.s#4 (text+ko) ==== @@ -32,7 +32,7 @@ * SUCH DAMAGE. * * from: vector.s, 386BSD 0.1 unknown origin - * $FreeBSD: src/sys/i386/i386/apic_vector.s,v 1.93 2003/11/13 18:16:37 jhb Exp $ + * $FreeBSD: src/sys/i386/i386/apic_vector.s,v 1.94 2003/11/14 19:10:12 jhb Exp $ */ /* @@ -117,6 +117,8 @@ ISR_VEC(3, apic_isr3) ISR_VEC(4, apic_isr4) ISR_VEC(5, apic_isr5) + ISR_VEC(6, apic_isr6) + ISR_VEC(7, apic_isr7) MCOUNT_LABEL(eintr2) #ifdef SMP ==== //depot/projects/hammer/sys/i386/i386/local_apic.c#3 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/i386/i386/local_apic.c,v 1.2 2003/11/12 18:13:57 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/local_apic.c,v 1.3 2003/11/14 19:10:12 jhb Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -59,6 +59,10 @@ */ #define MAX_APICID 16 +/* Sanity checks on IDT vectors. */ +CTASSERT(APIC_IO_INTS + APIC_NUM_IOINTS <= APIC_LOCAL_INTS); +CTASSERT(IPI_STOP < APIC_SPURIOUS_INT); + /* * Support for local APICs. Local APICs manage interrupts on each * individual processor as opposed to I/O APICs which receive interrupts @@ -104,8 +108,8 @@ IDTVEC(apic_isr3), /* 96 - 127 */ IDTVEC(apic_isr4), /* 128 - 159 */ IDTVEC(apic_isr5), /* 160 - 191 */ - NULL, /* 192 - 223 */ - NULL /* 224 - 255 */ + IDTVEC(apic_isr6), /* 192 - 223 */ + IDTVEC(apic_isr7), /* 224 - 255 */ }; volatile lapic_t *lapic; @@ -491,7 +495,7 @@ u_int vector; KASSERT(irq < NUM_IO_INTS, ("Invalid IRQ %u", irq)); - vector = irq + IDT_IO_INTS; + vector = irq + APIC_IO_INTS; if (vector >= IDT_SYSCALL) vector++; return (vector); @@ -501,12 +505,12 @@ apic_idt_to_irq(u_int vector) { - KASSERT(vector >= IDT_IO_INTS && vector != IDT_SYSCALL && - vector <= IDT_IO_INTS + NUM_IO_INTS, + KASSERT(vector >= APIC_IO_INTS && vector != IDT_SYSCALL && + vector <= APIC_IO_INTS + NUM_IO_INTS, ("Vector %u does not map to an IRQ line", vector)); if (vector > IDT_SYSCALL) vector--; - return (vector - IDT_IO_INTS); + return (vector - APIC_IO_INTS); } /* ==== //depot/projects/hammer/sys/i386/i386/machdep.c#26 (text+ko) ==== @@ -38,9 +38,9 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/i386/i386/machdep.c,v 1.581 2003/11/09 20:31:02 marcel Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/machdep.c,v 1.582 2003/11/14 19:00:02 jhb Exp $"); -#include "opt_apic.h" +#include "opt_acpi.h" #include "opt_atalk.h" #include "opt_compat.h" #include "opt_cpu.h" ==== //depot/projects/hammer/sys/i386/include/apicvar.h#4 (text+ko) ==== @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/i386/include/apicvar.h,v 1.3 2003/11/13 16:41:07 jhb Exp $ + * $FreeBSD: src/sys/i386/include/apicvar.h,v 1.4 2003/11/14 19:10:13 jhb Exp $ */ #ifndef _MACHINE_APICVAR_H_ @@ -40,13 +40,13 @@ * Layout of local APIC interrupt vectors: * * 0xff (255) +-------------+ - * | | 15 (Spurious Vector) + * | | 15 (Spurious / IPIs / Local Interrupts ) * 0xf0 (240) +-------------+ - * | | 14 (Interprocessor Interrupts) + * | | 14 (I/O Interrupts) * 0xe0 (224) +-------------+ - * | | 13 (Local Interrupt (LINT[01])) + * | | 13 (I/O Interrupts) * 0xd0 (208) +-------------+ - * | | 12 (Local Timer and Error Interrupts) + * | | 12 (I/O Interrupts) * 0xc0 (192) +-------------+ * | | 11 (I/O Interrupts) * 0xb0 (176) +-------------+ @@ -66,7 +66,7 @@ * 0x40 (64) +-------------+ * | | 3 (I/O Interrupts) * 0x30 (48) +-------------+ - * | | 2 (I/O Interrupts) + * | | 2 (ATPIC Interrupts) * 0x20 (32) +-------------+ * | | 1 (Exceptions, traps, faults, etc.) * 0x10 (16) +-------------+ @@ -78,23 +78,24 @@ */ #define APIC_ID_ALL 0xff -#define APIC_NUM_IOINTS 160 +#define APIC_IO_INTS (IDT_IO_INTS + 16) +#define APIC_NUM_IOINTS 192 -#define APIC_LOCAL_INTS (IDT_IO_INTS + APIC_NUM_IOINTS) +#define APIC_LOCAL_INTS 240 #define APIC_TIMER_INT APIC_LOCAL_INTS #define APIC_ERROR_INT (APIC_LOCAL_INTS + 1) #define APIC_THERMAL_INT (APIC_LOCAL_INTS + 2) -#define APIC_IPI_INTS (APIC_LOCAL_INTS + 32) +#define APIC_IPI_INTS (APIC_LOCAL_INTS + 3) #define IPI_AST APIC_IPI_INTS /* Generate software trap. */ #define IPI_INVLTLB (APIC_IPI_INTS + 1) /* TLB Shootdown IPIs */ #define IPI_INVLPG (APIC_IPI_INTS + 2) #define IPI_INVLRNG (APIC_IPI_INTS + 3) +#define IPI_LAZYPMAP (APIC_IPI_INTS + 4) /* Lazy pmap release. */ #define IPI_HARDCLOCK (APIC_IPI_INTS + 8) /* Inter-CPU clock handling. */ #define IPI_STATCLOCK (APIC_IPI_INTS + 9) #define IPI_RENDEZVOUS (APIC_IPI_INTS + 10) /* Inter-CPU rendezvous. */ -#define IPI_LAZYPMAP (APIC_IPI_INTS + 11) /* Lazy pmap release. */ -#define IPI_STOP (APIC_IPI_INTS + 12) /* Stop CPU until restarted. */ +#define IPI_STOP (APIC_IPI_INTS + 11) /* Stop CPU until restarted. */ #define APIC_SPURIOUS_INT 255 @@ -127,7 +128,8 @@ inthand_t IDTVEC(apic_isr1), IDTVEC(apic_isr2), IDTVEC(apic_isr3), - IDTVEC(apic_isr4), IDTVEC(apic_isr5), IDTVEC(spuriousint); + IDTVEC(apic_isr4), IDTVEC(apic_isr5), IDTVEC(apic_isr6), + IDTVEC(apic_isr7), IDTVEC(spuriousint); u_int apic_irq_to_idt(u_int irq); u_int apic_idt_to_irq(u_int vector); ==== //depot/projects/hammer/sys/i386/include/intr_machdep.h#2 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/i386/include/intr_machdep.h,v 1.1 2003/11/03 21:25:52 jhb Exp $ + * $FreeBSD: src/sys/i386/include/intr_machdep.h,v 1.2 2003/11/14 19:10:13 jhb Exp $ */ #ifndef __MACHINE_INTR_MACHDEP_H__ @@ -31,8 +31,8 @@ #ifdef _KERNEL -/* With I/O APIC's we can have up to 159 interrupts. */ -#define NUM_IO_INTS 159 +/* With I/O APIC's we can have up to 191 interrupts. */ +#define NUM_IO_INTS 191 #define INTRCNT_COUNT (1 + NUM_IO_INTS * 2) #ifndef LOCORE ==== //depot/projects/hammer/sys/i386/isa/atpic.c#4 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/i386/isa/atpic.c,v 1.3 2003/11/12 18:13:57 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/isa/atpic.c,v 1.4 2003/11/14 19:13:06 jhb Exp $"); #include "opt_auto_eoi.h" #include "opt_isa.h" @@ -73,14 +73,14 @@ #define SLAVE_MODE 9 /* 8086 mode */ #else /* IBM-PC */ #ifdef AUTO_EOI_1 -#define MASTER_MODE (2 | 1) /* Auto EOI, 8086 mode */ +#define MASTER_MODE (ICW4_8086 | ICW4_AEOI) #else -#define MASTER_MODE 1 /* 8086 mode */ +#define MASTER_MODE ICW4_8086 #endif #ifdef AUTO_EOI_2 -#define SLAVE_MODE (2 | 1) /* Auto EOI, 8086 mode */ +#define SLAVE_MODE (ICW4_8086 | ICW4_AEOI) #else -#define SLAVE_MODE 1 /* 8086 mode */ +#define SLAVE_MODE ICW4_8086 #endif #endif /* PC98 */ @@ -263,11 +263,12 @@ /* Reset the PIC and program with next four bytes. */ mtx_lock_spin(&icu_lock); #ifdef DEV_MCA + /* MCA uses level triggered interrupts. */ if (MCA_system) - outb(pic->at_ioaddr, 0x19); + outb(pic->at_ioaddr, ICW1_RESET | ICW1_IC4 | ICW1_LTIM); else #endif - outb(pic->at_ioaddr, 0x11); + outb(pic->at_ioaddr, ICW1_RESET | ICW1_IC4); imr_addr = pic->at_ioaddr + ICU_IMR_OFFSET; /* Start vector. */ @@ -293,12 +294,12 @@ outb(imr_addr, *pic->at_imen); /* Reset is finished, default to IRR on read. */ - outb(pic->at_ioaddr, 0x0a); + outb(pic->at_ioaddr, OCW3_SEL | OCW3_RR); #ifndef PC98 - /* Set priority order to 3-7, 0-2 (com2 first). */ + /* OCW2_L1 sets priority order to 3-7, 0-2 (com2 first). */ if (!slave) - outb(pic->at_ioaddr, 0xc0 | (3 - 1)); + outb(pic->at_ioaddr, OCW2_R | OCW2_SL | OCW2_L1); #endif mtx_unlock_spin(&icu_lock); } ==== //depot/projects/hammer/sys/i386/isa/icu.h#4 (text+ko) ==== @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)icu.h 5.6 (Berkeley) 5/9/91 - * $FreeBSD: src/sys/i386/isa/icu.h,v 1.29 2003/11/12 18:13:57 jhb Exp $ + * $FreeBSD: src/sys/i386/isa/icu.h,v 1.30 2003/11/14 19:12:25 jhb Exp $ */ /* @@ -86,6 +86,62 @@ #define IRQ7 0x0080 /* lowest - parallel printer */ #endif +/* Initialization control word 1. Written to even address. */ +#define ICW1_IC4 0x01 /* ICW4 present */ +#define ICW1_SNGL 0x02 /* 1 = single, 0 = cascaded */ +#define ICW1_ADI 0x04 /* 1 = 4, 0 = 8 byte vectors */ +#define ICW1_LTIM 0x08 /* 1 = level trigger, 0 = edge */ +#define ICW1_RESET 0x10 /* must be 1 */ +/* 0x20 - 0x80 - in 8080/8085 mode only */ + +/* Initialization control word 2. Written to the odd address. */ +/* No definitions, it is the base vector of the IDT for 8086 mode */ + +/* Initialization control word 3. Written to the odd address. */ +/* For a master PIC, bitfield indicating a slave 8259 on given input */ +/* For slave, lower 3 bits are the slave's ID binary id on master */ + +#ifdef PC98 +/* XXX: missing pc98 bits */ +#else + +/* Initialization control word 4. Written to the odd address. */ +#define ICW4_8086 0x01 /* 1 = 8086, 0 = 8080 */ +#define ICW4_AEOI 0x02 /* 1 = Auto EOI */ +#define ICW4_MS 0x04 /* 1 = buffered master, 0 = slave */ +#define ICW4_BUF 0x08 /* 1 = enable buffer mode */ +#define ICW4_SFNM 0x10 /* 1 = special fully nested mode */ + +#endif + +/* Operation control words. Written after initialization. */ + +/* Operation control word type 1 */ +/* + * No definitions. Written to the odd address. Bitmask for interrupts. + * 1 = disabled. + */ + +/* Operation control word type 2. Bit 3 (0x08) must be zero. Even address. */ +#define OCW2_L0 0x01 /* Level */ +#define OCW2_L1 0x02 +#define OCW2_L2 0x04 +/* 0x08 must be 0 to select OCW2 vs OCW3 */ +/* 0x10 must be 0 to select OCW2 vs ICW1 */ +#define OCW2_EOI 0x20 /* 1 = EOI */ +#define OCW2_SL 0x40 /* EOI mode */ +#define OCW2_R 0x80 /* EOI mode */ + +/* Operation control word type 3. Bit 3 (0x08) must be set. Even address. */ +#define OCW3_RIS 0x01 /* 1 = read IS, 0 = read IR */ +#define OCW3_RR 0x02 /* register read */ +#define OCW3_P 0x04 /* poll mode command */ +/* 0x08 must be 1 to select OCW3 vs OCW2 */ +#define OCW3_SEL 0x08 /* must be 1 */ +/* 0x10 must be 0 to select OCW3 vs ICW1 */ +#define OCW3_SMM 0x20 /* special mode mask */ +#define OCW3_ESMM 0x40 /* enable SMM */ + /* * Interrupt Control offset into Interrupt descriptor table (IDT) */ @@ -100,8 +156,7 @@ #define ICU_SLAVEID 2 #endif -#define ICU_EOI 0x20 -#define HWI_MASK 0xffff /* bits for h/w interrupts */ +#define ICU_EOI (OCW2_EOI) /* non-specific EOI */ #ifndef LOCORE void atpic_handle_intr(struct intrframe iframe); ==== //depot/projects/hammer/sys/kern/kern_event.c#11 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/kern_event.c,v 1.64 2003/11/09 09:17:24 tanimura Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_event.c,v 1.65 2003/11/14 18:49:01 cognet Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -218,7 +218,8 @@ kn->kn_flags &= ~EV_FLAG1; } - SLIST_INSERT_HEAD(&p->p_klist, kn, kn_selnext); + if (immediate == 0) + SLIST_INSERT_HEAD(&p->p_klist, kn, kn_selnext); /* * Immediately activate any exit notes if the target process is a @@ -280,13 +281,6 @@ } /* - * Process will already be reported as gone. - * Do not report anything else, as the knote will be destroyed soon. - */ - if (kn->kn_status & KN_DETACHED) - return (0); - - /* * process forked, and user wants to track the new process, * so attach a new knote to it, and immediately report an * event with the parent's pid. ==== //depot/projects/hammer/sys/kern/kern_exit.c#16 (text+ko) ==== @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/kern_exit.c,v 1.217 2003/06/15 00:31:23 davidxu Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_exit.c,v 1.218 2003/11/14 18:49:01 cognet Exp $"); #include "opt_compat.h" #include "opt_ktrace.h" @@ -436,6 +436,13 @@ * Notify interested parties of our demise. */ KNOTE(&p->p_klist, NOTE_EXIT); + /* + * Just delete all entries in the p_klist. At this point we won't + * report any more events, and there are nasty race conditions that + * can beat us if we don't. + */ + while (SLIST_FIRST(&p->p_klist)) + SLIST_REMOVE_HEAD(&p->p_klist, kn_selnext); /* * Notify parent that we're gone. If parent has the PS_NOCLDWAIT ==== //depot/projects/hammer/sys/net/rtsock.c#8 (text+ko) ==== @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)rtsock.c 8.7 (Berkeley) 10/12/95 - * $FreeBSD: src/sys/net/rtsock.c,v 1.94 2003/11/08 23:36:30 sam Exp $ + * $FreeBSD: src/sys/net/rtsock.c,v 1.95 2003/11/14 18:48:15 bms Exp $ */ #include <sys/param.h> @@ -85,6 +85,7 @@ static int rt_xaddrs(caddr_t, caddr_t, struct rt_addrinfo *); static int sysctl_dumpentry(struct radix_node *rn, void *vw); static int sysctl_iflist(int af, struct walkarg *w); +static int sysctl_ifmalist(int af, struct walkarg *w); static int route_output(struct mbuf *, struct socket *); static void rt_setmetrics(u_long, struct rt_metrics *, struct rt_metrics *); static void rt_dispatch(struct mbuf *, struct sockaddr *); @@ -684,6 +685,10 @@ len = sizeof(struct if_msghdr); break; + case RTM_NEWMADDR: + len = sizeof(struct ifma_msghdr); + break; + default: len = sizeof(struct rt_msghdr); } @@ -1014,6 +1019,61 @@ return (error); } +int +sysctl_ifmalist(af, w) + int af; + register struct walkarg *w; +{ + register struct ifnet *ifp; + struct ifmultiaddr *ifma; + struct rt_addrinfo info; + int len, error = 0; + + bzero((caddr_t)&info, sizeof(info)); + /* IFNET_RLOCK(); */ /* could sleep XXX */ + TAILQ_FOREACH(ifp, &ifnet, if_link) { + if (w->w_arg && w->w_arg != ifp->if_index) + continue; + TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { + if (af && af != ifma->ifma_addr->sa_family) + continue; + if (jailed(curproc->p_ucred) && + prison_if(curproc->p_ucred, ifma->ifma_addr)) + continue; + info.rti_addrs = RTA_IFA; + info.rti_info[RTAX_IFA] = ifma->ifma_addr; + if (TAILQ_FIRST(&ifp->if_addrhead)) { + info.rti_addrs |= RTA_IFP; + info.rti_info[RTAX_IFP] = + TAILQ_FIRST(&ifp->if_addrhead)->ifa_addr; + } else + info.rti_info[RTAX_IFP] = NULL; + + if (ifma->ifma_addr->sa_family != AF_LINK) { + info.rti_addrs |= RTA_GATEWAY; + info.rti_info[RTAX_GATEWAY] = ifma->ifma_lladdr; + } else + info.rti_info[RTAX_GATEWAY] = NULL; + + len = rt_msg2(RTM_NEWMADDR, &info, 0, w); + if (w->w_req && w->w_tmem) { + register struct ifma_msghdr *ifmam; + + ifmam = (struct ifma_msghdr *)w->w_tmem; + ifmam->ifmam_index = ifma->ifma_ifp->if_index; + ifmam->ifmam_flags = 0; + ifmam->ifmam_addrs = info.rti_addrs; + error = SYSCTL_OUT(w->w_req, w->w_tmem, len); + if (error) + goto done; + } + } + } +done: + /* IFNET_RUNLOCK(); */ /* XXX */ + return (error); +} + static int sysctl_rtsock(SYSCTL_HANDLER_ARGS) { @@ -1066,6 +1126,11 @@ case NET_RT_IFLIST: error = sysctl_iflist(af, &w); + break; + + case NET_RT_IFMALIST: + error = sysctl_ifmalist(af, &w); + break; } splx(s); if (w.w_tmem) ==== //depot/projects/hammer/sys/pci/if_dc.c#26 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/pci/if_dc.c,v 1.134 2003/11/14 17:16:57 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/pci/if_dc.c,v 1.135 2003/11/14 19:00:31 sam Exp $"); /* * DEC "tulip" clone ethernet driver. Supports the DEC/Intel 21143 @@ -2723,6 +2723,8 @@ int i, total_len = 0; u_int32_t rxstat; + DC_LOCK_ASSERT(sc); + ifp = &sc->arpcom.ac_if; i = sc->dc_cdata.dc_rx_prod; @@ -2816,7 +2818,9 @@ } ifp->if_ipackets++; + DC_UNLOCK(sc); (*ifp->if_input)(ifp, m); + DC_LOCK(sc); } sc->dc_cdata.dc_rx_prod = i; @@ -3069,6 +3073,7 @@ CSR_WRITE_4(sc, DC_IMR, DC_INTRS); return; } + DC_LOCK(sc); sc->rxcycles = count; dc_rxeof(sc); dc_txeof(sc); @@ -3082,8 +3087,10 @@ status &= (DC_ISR_RX_WATDOGTIMEO | DC_ISR_RX_NOBUF | DC_ISR_TX_NOBUF | DC_ISR_TX_IDLE | DC_ISR_TX_UNDERRUN | DC_ISR_BUS_ERR); - if (!status) + if (!status) { + DC_UNLOCK(sc); return; + } /* ack what we have */ CSR_WRITE_4(sc, DC_ISR, status); @@ -3107,6 +3114,7 @@ dc_init(sc); } } + DC_UNLOCK(sc); } #endif /* DEVICE_POLLING */ ==== //depot/projects/hammer/sys/pci/if_dcreg.h#12 (text+ko) ==== @@ -29,7 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/pci/if_dcreg.h,v 1.38 2003/10/05 19:57:10 mbr Exp $ + * $FreeBSD: src/sys/pci/if_dcreg.h,v 1.39 2003/11/14 19:00:31 sam Exp $ */ /* @@ -766,6 +766,7 @@ #define DC_LOCK(_sc) mtx_lock(&(_sc)->dc_mtx) #define DC_UNLOCK(_sc) mtx_unlock(&(_sc)->dc_mtx) +#define DC_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->dc_mtx, MA_OWNED) #define DC_TX_POLL 0x00000001 #define DC_TX_COALESCE 0x00000002 ==== //depot/projects/hammer/sys/pci/if_pcn.c#13 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/pci/if_pcn.c,v 1.51 2003/11/14 17:16:57 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/pci/if_pcn.c,v 1.52 2003/11/14 19:00:31 sam Exp $"); /* * AMD Am79c972 fast ethernet PCI NIC driver. Datatheets are available @@ -796,6 +796,8 @@ struct pcn_rx_desc *cur_rx; int i; + PCN_LOCK_ASSERT(sc); + ifp = &sc->arpcom.ac_if; i = sc->pcn_cdata.pcn_rx_prod; @@ -833,7 +835,9 @@ cur_rx->pcn_rxlen - ETHER_CRC_LEN; m->m_pkthdr.rcvif = ifp; + PCN_UNLOCK(sc); (*ifp->if_input)(ifp, m); + PCN_LOCK(sc); } sc->pcn_cdata.pcn_rx_prod = i; ==== //depot/projects/hammer/sys/pci/if_pcnreg.h#2 (text+ko) ==== @@ -30,7 +30,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/pci/if_pcnreg.h,v 1.7 2001/02/09 06:11:20 bmilekic Exp $ + * $FreeBSD: src/sys/pci/if_pcnreg.h,v 1.8 2003/11/14 19:00:31 sam Exp $ */ /* @@ -453,6 +453,7 @@ #define PCN_LOCK(_sc) mtx_lock(&(_sc)->pcn_mtx) #define PCN_UNLOCK(_sc) mtx_unlock(&(_sc)->pcn_mtx) +#define PCN_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->pcn_mtx, MA_OWNED) /* * register space access macros ==== //depot/projects/hammer/sys/pci/if_rl.c#22 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/pci/if_rl.c,v 1.124 2003/11/14 17:16:57 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/pci/if_rl.c,v 1.125 2003/11/14 19:00:31 sam Exp $"); /* * RealTek 8129/8139 PCI NIC driver @@ -1236,6 +1236,8 @@ u_int16_t limit; u_int16_t rx_bytes = 0, max_bytes; + RL_LOCK_ASSERT(sc); + ifp = &sc->arpcom.ac_if; >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200311141943.hAEJhe6a062186>