Date: Sun, 15 Mar 2009 14:21:05 +0000 (UTC) From: Robert Watson <rwatson@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r189851 - in head/sys: conf i386/conf kern modules modules/netgraph net netinet netinet6 netnatm pc98/conf Message-ID: <200903151421.n2FEL5Ra031289@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: rwatson Date: Sun Mar 15 14:21:05 2009 New Revision: 189851 URL: http://svn.freebsd.org/changeset/base/189851 Log: Remove IFF_NEEDSGIANT, a compatibility infrastructure introduced in FreeBSD 5.x to allow network device drivers to run with Giant despite the network stack being Giant-free. This significantly simplifies calls into ioctl() on network interfaces, especially in the multicast code, as well as eliminates deferred invocation of interface if_start routines. Disable the build on device drivers still depending on IFF_NEEDSGIANT as they no longer compile. They will be removed in a few weeks if they haven't been made MPSAFE in that time. Disabled drivers: if_ar if_axe if_aue if_cdce if_cue if_kue if_ray if_rue if_rum if_sr if_udav if_ural if_zyd Drivers that were already disabled because of tty changes: if_ppp if_sl Discussed on: arch@ Modified: head/sys/conf/NOTES head/sys/conf/files head/sys/conf/files.i386 head/sys/conf/files.pc98 head/sys/conf/options head/sys/i386/conf/NOTES head/sys/kern/kern_poll.c head/sys/modules/Makefile head/sys/modules/netgraph/Makefile head/sys/net/if.c head/sys/net/if_bridge.c head/sys/net/if_var.h head/sys/netinet/in.c head/sys/netinet/in_mcast.c head/sys/netinet6/in6.c head/sys/netinet6/in6_ifattach.c head/sys/netinet6/mld6.c head/sys/netnatm/natm.c head/sys/pc98/conf/NOTES Modified: head/sys/conf/NOTES ============================================================================== --- head/sys/conf/NOTES Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/conf/NOTES Sun Mar 15 14:21:05 2009 (r189851) @@ -765,10 +765,6 @@ device arcnet # of synchronous PPP links (like `cx', `ar'). device sppp -# The `sl' device implements the Serial Line IP (SLIP) service. -# The `ppp' device implements the Point-to-Point Protocol. - - # The `bpf' device enables the Berkeley Packet Filter. Be # aware of the legal and administrative consequences of enabling this # option. The number of devices determines the maximum number of @@ -837,15 +833,6 @@ device enc device lagg # -# The PPP_BSDCOMP option enables support for compress(1) style entire -# packet compression, the PPP_DEFLATE is for zlib/gzip style compression. -# PPP_FILTER enables code for filtering the ppp data stream and selecting -# events for resetting the demand dial activity timer - requires bpf. -# See pppd(8) for more details. -# - - -# # Internet family options: # # MROUTING enables the kernel multicast packet forwarder, which works @@ -2678,7 +2665,6 @@ options SC_DEBUG_LEVEL=5 # Syscons debu options SC_RENDER_DEBUG # syscons rendering debugging options SHOW_BUSYBUFS # List buffers that prevent root unmount -options SLIP_IFF_OPTS options VFS_BIO_DEBUG # VFS buffer I/O debugging options KSTACK_MAX_PAGES=32 # Maximum pages to give the kernel stack Modified: head/sys/conf/files ============================================================================== --- head/sys/conf/files Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/conf/files Sun Mar 15 14:21:05 2009 (r189851) @@ -1306,7 +1306,6 @@ dev/random/probe.c optional random dev/random/randomdev.c optional random dev/random/randomdev_soft.c optional random dev/random/yarrow.c optional random -dev/ray/if_ray.c optional ray pccard dev/rc/rc.c optional rc dev/re/if_re.c optional re dev/rndtest/rndtest.c optional rndtest @@ -1424,8 +1423,6 @@ dev/sound/midi/synth_if.m optional sound dev/spibus/spibus.c optional spibus \ dependency "spibus_if.h" dev/spibus/spibus_if.m optional spibus -dev/sr/if_sr.c optional sr -dev/sr/if_sr_pci.c optional sr pci dev/ste/if_ste.c optional ste pci dev/stg/tmc18c30.c optional stg dev/stg/tmc18c30_isa.c optional stg isa @@ -1502,15 +1499,6 @@ legacy/dev/usb/ehci_ddb.c optional oehci legacy/dev/usb/ehci_pci.c optional oehci pci legacy/dev/usb/hid.c optional ousb legacy/dev/usb/if_aue.c optional oaue -legacy/dev/usb/if_axe.c optional oaxe -legacy/dev/usb/if_cdce.c optional ocdce -legacy/dev/usb/if_cue.c optional ocue -legacy/dev/usb/if_kue.c optional okue -legacy/dev/usb/if_ural.c optional oural -legacy/dev/usb/if_rue.c optional orue -legacy/dev/usb/if_rum.c optional orum -legacy/dev/usb/if_udav.c optional oudav -legacy/dev/usb/if_zyd.c optional ozyd legacy/dev/usb/ohci.c optional oohci legacy/dev/usb/ohci_pci.c optional oohci pci legacy/dev/usb/sl811hs.c optional oslhci @@ -2160,7 +2148,6 @@ net/bpf_jitter.c optional bpf_jitter net/bpf_filter.c optional bpf | netgraph_bpf net/bpf_zerocopy.c optional bpf net/bridgestp.c optional bridge | if_bridge -net/bsd_comp.c optional ppp_bsdcomp net/ieee8023ad_lacp.c optional lagg net/if.c standard net/if_arcsubr.c optional arcnet @@ -2184,8 +2171,6 @@ net/if_loop.c optional loop net/if_llatbl.c standard net/if_media.c standard net/if_mib.c standard -net/if_ppp.c optional ppp -net/if_sl.c optional sl net/if_spppfr.c optional sppp | netgraph_sppp net/if_spppsubr.c optional sppp | netgraph_sppp net/if_stf.c optional stf @@ -2195,8 +2180,6 @@ net/if_vlan.c optional vlan net/mppcc.c optional netgraph_mppc_compression net/mppcd.c optional netgraph_mppc_compression net/netisr.c standard -net/ppp_deflate.c optional ppp_deflate -net/ppp_tty.c optional ppp net/pfil.c optional ether | inet net/radix.c standard net/radix_mpath.c standard @@ -2204,10 +2187,10 @@ net/raw_cb.c standard net/raw_usrreq.c standard net/route.c standard net/rtsock.c standard -net/slcompress.c optional netgraph_vjc | ppp | sl | sppp | \ +net/slcompress.c optional netgraph_vjc | sppp | \ netgraph_sppp net/zlib.c optional crypto | geom_uzip | ipsec | \ - mxge | ppp_deflate | netgraph_deflate | \ + mxge | netgraph_deflate | \ ddb_ctf net80211/ieee80211.c optional wlan net80211/ieee80211_acl.c optional wlan_acl Modified: head/sys/conf/files.i386 ============================================================================== --- head/sys/conf/files.i386 Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/conf/files.i386 Sun Mar 15 14:21:05 2009 (r189851) @@ -130,9 +130,6 @@ dev/agp/agp_via.c optional agp dev/aic/aic_isa.c optional aic isa dev/amdtemp/amdtemp.c optional amdtemp dev/arcmsr/arcmsr.c optional arcmsr pci -dev/ar/if_ar.c optional ar -dev/ar/if_ar_isa.c optional ar isa -dev/ar/if_ar_pci.c optional ar pci dev/asmc/asmc.c optional asmc isa dev/atkbdc/atkbd.c optional atkbd atkbdc dev/atkbdc/atkbd_atkbdc.c optional atkbd atkbdc @@ -218,7 +215,6 @@ dev/sio/sio_pccard.c optional sio pccar dev/sio/sio_pci.c optional sio pci dev/sio/sio_puc.c optional sio puc dev/speaker/spkr.c optional speaker -dev/sr/if_sr_isa.c optional sr isa dev/syscons/apm/apm_saver.c optional apm_saver apm dev/syscons/scterm-teken.c optional sc dev/syscons/scvesactl.c optional sc vga vesa Modified: head/sys/conf/files.pc98 ============================================================================== --- head/sys/conf/files.pc98 Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/conf/files.pc98 Sun Mar 15 14:21:05 2009 (r189851) @@ -85,8 +85,6 @@ dev/agp/agp_nvidia.c optional agp dev/agp/agp_sis.c optional agp dev/agp/agp_via.c optional agp dev/aic/aic_cbus.c optional aic isa -dev/ar/if_ar.c optional ar -dev/ar/if_ar_pci.c optional ar pci dev/ce/ceddk.c optional ce dev/ce/if_ce.c optional ce dev/ce/tau32-ddk.c optional ce Modified: head/sys/conf/options ============================================================================== --- head/sys/conf/options Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/conf/options Sun Mar 15 14:21:05 2009 (r189851) @@ -407,9 +407,6 @@ MROUTING opt_mrouting.h NCP NETATALK opt_atalk.h NFSLOCKD -PPP_BSDCOMP opt_ppp.h -PPP_DEFLATE opt_ppp.h -PPP_FILTER opt_ppp.h RADIX_MPATH opt_mpath.h ROUTETABLES opt_route.h COMPAT_ROUTE_FLAGS opt_route.h Modified: head/sys/i386/conf/NOTES ============================================================================== --- head/sys/i386/conf/NOTES Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/i386/conf/NOTES Sun Mar 15 14:21:05 2009 (r189851) @@ -528,8 +528,6 @@ hint.mse.0.irq="5" # Network interfaces: # -# ar: Arnet SYNC/570i hdlc sync 2/4 port V.35/X.21 serial driver -# (requires sppp) # ath: Atheros a/b/g WiFi adapters (requires ath_hal and wlan) # ce: Cronyx Tau-PCI/32 sync single/dual port G.703/E1 serial adaptor # with 32 HDLC subchannels (requires sppp (default), or NETGRAPH if @@ -554,17 +552,11 @@ hint.mse.0.irq="5" # nve: nVidia nForce MCP on-board Ethernet Networking # ral: Ralink Technology IEEE 802.11 wireless adapter # sbni: Granch SBNI12-xx ISA and PCI adapters -# sr: RISCom/N2 hdlc sync 1/2 port V.35/X.21 serial driver (requires sppp) # wl: Lucent Wavelan (ISA card only). # wpi: Intel 3945ABG Wireless LAN controller # Order for ISA/EISA devices is important here -device ar -hint.ar.0.at="isa" -hint.ar.0.port="0x300" -hint.ar.0.irq="10" -hint.ar.0.maddr="0xd0000" device ath # Atheros pci/cardbus NIC's device ath_hal # pci/cardbus chip support #device ath_ar5210 # AR5210 chips @@ -619,11 +611,6 @@ hint.sbni.0.at="isa" hint.sbni.0.port="0x210" hint.sbni.0.irq="0xefdead" hint.sbni.0.flags="0" -device sr -hint.sr.0.at="isa" -hint.sr.0.port="0x300" -hint.sr.0.irq="5" -hint.sr.0.maddr="0xd0000" device wl hint.wl.0.at="isa" hint.wl.0.port="0x300" Modified: head/sys/kern/kern_poll.c ============================================================================== --- head/sys/kern/kern_poll.c Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/kern/kern_poll.c Sun Mar 15 14:21:05 2009 (r189851) @@ -551,9 +551,7 @@ poll_switch(SYSCTL_HANDLER_ARGS) else ifr.ifr_reqcap = ifp->if_capenable & ~IFCAP_POLLING; - IFF_LOCKGIANT(ifp); /* LOR here */ (void) (*ifp->if_ioctl)(ifp, SIOCSIFCAP, (caddr_t)&ifr); - IFF_UNLOCKGIANT(ifp); } } IFNET_RUNLOCK(); Modified: head/sys/modules/Makefile ============================================================================== --- head/sys/modules/Makefile Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/modules/Makefile Sun Mar 15 14:21:05 2009 (r189851) @@ -24,7 +24,6 @@ SUBDIR= ${_3dfx} \ ${_an} \ ${_aout} \ ${_apm} \ - ${_ar} \ ${_arcmsr} \ ${_arcnet} \ ${_asmc} \ @@ -219,7 +218,6 @@ SUBDIR= ${_3dfx} \ puc \ ral \ ${_random} \ - ${_ray} \ rc4 \ ${_rdma} \ re \ @@ -244,7 +242,6 @@ SUBDIR= ${_3dfx} \ ${_speaker} \ ${_splash} \ ${_sppp} \ - ${_sr} \ ste \ ${_stg} \ stge \ @@ -332,7 +329,6 @@ _amd= amd _an= an _aout= aout _apm= apm -_ar= ar _arcnet= arcnet _bktr= bktr _cardbus= cardbus @@ -385,7 +381,6 @@ _opensolaris= opensolaris _pccard= pccard _pcfclock= pcfclock _pst= pst -_ray= ray _rdma= rdma _safe= safe _sbni= sbni @@ -395,7 +390,6 @@ _sound= sound _speaker= speaker _splash= splash _sppp= sppp -_sr= sr _stg= stg _streams= streams _svr4= svr4 Modified: head/sys/modules/netgraph/Makefile ============================================================================== --- head/sys/modules/netgraph/Makefile Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/modules/netgraph/Makefile Sun Mar 15 14:21:05 2009 (r189851) @@ -44,8 +44,6 @@ SUBDIR= async \ source \ split \ sppp \ - ${_sync_ar} \ - ${_sync_sr} \ tag \ tcpmss \ tee \ @@ -54,11 +52,6 @@ SUBDIR= async \ vjc \ vlan -.if ${MACHINE_ARCH} == "i386" -_sync_ar= sync_ar -_sync_sr= sync_sr -.endif - .if ${MK_BLUETOOTH} != "no" || defined(ALL_MODULES) _bluetooth= bluetooth .endif Modified: head/sys/net/if.c ============================================================================== --- head/sys/net/if.c Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/net/if.c Sun Mar 15 14:21:05 2009 (r189851) @@ -138,7 +138,6 @@ static void link_rtrequest(int, struct r static int if_rtdel(struct radix_node *, void *); static int ifhwioctl(u_long, struct ifnet *, caddr_t, struct thread *); static int if_delmulti_locked(struct ifnet *, struct ifmultiaddr *, int); -static void if_start_deferred(void *context, int pending); static void do_link_state_change(void *, int); static int if_getgroup(struct ifgroupreq *, struct ifnet *); static int if_getgroupmembers(struct ifgroupreq *); @@ -582,7 +581,6 @@ if_attach(struct ifnet *ifp) panic ("%s: BUG: if_attach called without if_alloc'd input()\n", ifp->if_xname); - TASK_INIT(&ifp->if_starttask, 0, if_start_deferred, ifp); TASK_INIT(&ifp->if_linktask, 0, do_link_state_change, ifp); IF_AFDATA_LOCK_INIT(ifp); ifp->if_afdata_initialized = 0; @@ -674,9 +672,6 @@ if_attach(struct ifnet *ifp) if (atomic_cmpset_int(&slowtimo_started, 0, 1) && !cold) if_slowtimo(0); } - if (ifp->if_flags & IFF_NEEDSGIANT) - if_printf(ifp, - "WARNING: using obsoleted IFF_NEEDSGIANT flag\n"); } static void @@ -1607,8 +1602,7 @@ if_qflush(struct ifnet *ifp) * call the appropriate interface routine on expiration. * * XXXRW: Note that because timeouts run with Giant, if_watchdog() is called - * holding Giant. If we switch to an MPSAFE callout, we likely need to grab - * Giant before entering if_watchdog() on an IFF_NEEDSGIANT interface. + * holding Giant. */ static void if_slowtimo(void *arg) @@ -1741,9 +1735,7 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, ifp->if_flags = (ifp->if_flags & IFF_CANTCHANGE) | (new_flags &~ IFF_CANTCHANGE); if (ifp->if_ioctl) { - IFF_LOCKGIANT(ifp); (void) (*ifp->if_ioctl)(ifp, cmd, data); - IFF_UNLOCKGIANT(ifp); } getmicrotime(&ifp->if_lastchange); break; @@ -1756,9 +1748,7 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, return (EOPNOTSUPP); if (ifr->ifr_reqcap & ~ifp->if_capabilities) return (EINVAL); - IFF_LOCKGIANT(ifp); error = (*ifp->if_ioctl)(ifp, cmd, data); - IFF_UNLOCKGIANT(ifp); if (error == 0) getmicrotime(&ifp->if_lastchange); break; @@ -1830,9 +1820,7 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, return (error); if (ifp->if_ioctl == NULL) return (EOPNOTSUPP); - IFF_LOCKGIANT(ifp); error = (*ifp->if_ioctl)(ifp, cmd, data); - IFF_UNLOCKGIANT(ifp); if (error == 0) getmicrotime(&ifp->if_lastchange); break; @@ -1848,9 +1836,7 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, return (EINVAL); if (ifp->if_ioctl == NULL) return (EOPNOTSUPP); - IFF_LOCKGIANT(ifp); error = (*ifp->if_ioctl)(ifp, cmd, data); - IFF_UNLOCKGIANT(ifp); if (error == 0) { getmicrotime(&ifp->if_lastchange); rt_ifmsg(ifp); @@ -1920,9 +1906,7 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, return (error); if (ifp->if_ioctl == NULL) return (EOPNOTSUPP); - IFF_LOCKGIANT(ifp); error = (*ifp->if_ioctl)(ifp, cmd, data); - IFF_UNLOCKGIANT(ifp); if (error == 0) getmicrotime(&ifp->if_lastchange); break; @@ -1938,9 +1922,7 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, case SIOCGIFGENERIC: if (ifp->if_ioctl == NULL) return (EOPNOTSUPP); - IFF_LOCKGIANT(ifp); error = (*ifp->if_ioctl)(ifp, cmd, data); - IFF_UNLOCKGIANT(ifp); break; case SIOCSIFLLADDR: @@ -2168,9 +2150,7 @@ if_setflag(struct ifnet *ifp, int flag, } ifr.ifr_flags = ifp->if_flags & 0xffff; ifr.ifr_flagshigh = ifp->if_flags >> 16; - IFF_LOCKGIANT(ifp); error = (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifr); - IFF_UNLOCKGIANT(ifp); if (error) goto recover; /* Notify userland that interface flags have changed */ @@ -2540,9 +2520,7 @@ if_addmulti(struct ifnet *ifp, struct so * interface to let them know about it. */ if (ifp->if_ioctl != NULL) { - IFF_LOCKGIANT(ifp); (void) (*ifp->if_ioctl)(ifp, SIOCADDMULTI, 0); - IFF_UNLOCKGIANT(ifp); } if (llsa != NULL) @@ -2601,9 +2579,7 @@ if_delmulti(struct ifnet *ifp, struct so return (ENOENT); if (lastref && ifp->if_ioctl != NULL) { - IFF_LOCKGIANT(ifp); (void)(*ifp->if_ioctl)(ifp, SIOCDELMULTI, 0); - IFF_UNLOCKGIANT(ifp); } return (0); @@ -2613,9 +2589,7 @@ if_delmulti(struct ifnet *ifp, struct so * Delete a multicast group membership by group membership pointer. * Network-layer protocol domains must use this routine. * - * It is safe to call this routine if the ifp disappeared. Callers should - * hold IFF_LOCKGIANT() to avoid a LOR in case the hardware needs to be - * reconfigured. + * It is safe to call this routine if the ifp disappeared. */ void if_delmulti_ifma(struct ifmultiaddr *ifma) @@ -2660,9 +2634,7 @@ if_delmulti_ifma(struct ifmultiaddr *ifm */ IF_ADDR_UNLOCK(ifp); if (lastref && ifp->if_ioctl != NULL) { - IFF_LOCKGIANT(ifp); (void)(*ifp->if_ioctl)(ifp, SIOCDELMULTI, 0); - IFF_UNLOCKGIANT(ifp); } } } @@ -2784,7 +2756,6 @@ if_setlladdr(struct ifnet *ifp, const u_ */ if ((ifp->if_flags & IFF_UP) != 0) { if (ifp->if_ioctl) { - IFF_LOCKGIANT(ifp); ifp->if_flags &= ~IFF_UP; ifr.ifr_flags = ifp->if_flags & 0xffff; ifr.ifr_flagshigh = ifp->if_flags >> 16; @@ -2793,7 +2764,6 @@ if_setlladdr(struct ifnet *ifp, const u_ ifr.ifr_flags = ifp->if_flags & 0xffff; ifr.ifr_flagshigh = ifp->if_flags >> 16; (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifr); - IFF_UNLOCKGIANT(ifp); } #ifdef INET /* @@ -2839,39 +2809,11 @@ if_printf(struct ifnet *ifp, const char return (retval); } -/* - * When an interface is marked IFF_NEEDSGIANT, its if_start() routine cannot - * be called without Giant. However, we often can't acquire the Giant lock - * at those points; instead, we run it via a task queue that holds Giant via - * if_start_deferred. - * - * XXXRW: We need to make sure that the ifnet isn't fully detached until any - * outstanding if_start_deferred() tasks that will run after the free. This - * probably means waiting in if_detach(). - */ void if_start(struct ifnet *ifp) { - if (ifp->if_flags & IFF_NEEDSGIANT) { - if (mtx_owned(&Giant)) - (*(ifp)->if_start)(ifp); - else - taskqueue_enqueue(taskqueue_swi_giant, - &ifp->if_starttask); - } else - (*(ifp)->if_start)(ifp); -} - -static void -if_start_deferred(void *context, int pending) -{ - struct ifnet *ifp; - - GIANT_REQUIRED; - - ifp = context; - (ifp->if_start)(ifp); + (*(ifp)->if_start)(ifp); } /* @@ -2908,7 +2850,7 @@ if_handoff(struct ifqueue *ifq, struct m _IF_ENQUEUE(ifq, m); IF_UNLOCK(ifq); if (ifp != NULL && !active) - if_start(ifp); + (*(ifp)->if_start)(ifp); return (1); } Modified: head/sys/net/if_bridge.c ============================================================================== --- head/sys/net/if_bridge.c Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/net/if_bridge.c Sun Mar 15 14:21:05 2009 (r189851) @@ -829,9 +829,7 @@ bridge_set_ifcap(struct bridge_softc *sc ifr.ifr_reqcap = set; if (ifp->if_capenable != set) { - IFF_LOCKGIANT(ifp); error = (*ifp->if_ioctl)(ifp, SIOCSIFCAP, (caddr_t)&ifr); - IFF_UNLOCKGIANT(ifp); if (error) if_printf(sc->sc_ifp, "error setting interface capabilities on %s\n", Modified: head/sys/net/if_var.h ============================================================================== --- head/sys/net/if_var.h Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/net/if_var.h Sun Mar 15 14:21:05 2009 (r189851) @@ -181,7 +181,6 @@ struct ifnet { void *if_afdata[AF_MAX]; int if_afdata_initialized; struct rwlock if_afdata_lock; - struct task if_starttask; /* task for IFF_NEEDSGIANT */ struct task if_linktask; /* task for link change events */ struct mtx if_addr_mtx; /* mutex to protect address lists */ @@ -379,16 +378,6 @@ EVENTHANDLER_DECLARE(group_change_event, #define IF_AFDATA_LOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_LOCKED) #define IF_AFDATA_UNLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_UNLOCKED) -#define IFF_LOCKGIANT(ifp) do { \ - if ((ifp)->if_flags & IFF_NEEDSGIANT) \ - mtx_lock(&Giant); \ -} while (0) - -#define IFF_UNLOCKGIANT(ifp) do { \ - if ((ifp)->if_flags & IFF_NEEDSGIANT) \ - mtx_unlock(&Giant); \ -} while (0) - int if_handoff(struct ifqueue *ifq, struct mbuf *m, struct ifnet *ifp, int adjust); #define IF_HANDOFF(ifq, m, ifp) \ Modified: head/sys/netinet/in.c ============================================================================== --- head/sys/netinet/in.c Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/netinet/in.c Sun Mar 15 14:21:05 2009 (r189851) @@ -397,10 +397,8 @@ in_control(struct socket *so, u_long cmd oldaddr = ia->ia_dstaddr; ia->ia_dstaddr = *(struct sockaddr_in *)&ifr->ifr_dstaddr; if (ifp->if_ioctl != NULL) { - IFF_LOCKGIANT(ifp); error = (*ifp->if_ioctl)(ifp, SIOCSIFDSTADDR, (caddr_t)ia); - IFF_UNLOCKGIANT(ifp); if (error) { ia->ia_dstaddr = oldaddr; return (error); @@ -507,10 +505,7 @@ in_control(struct socket *so, u_long cmd default: if (ifp == NULL || ifp->if_ioctl == NULL) return (EOPNOTSUPP); - IFF_LOCKGIANT(ifp); - error = (*ifp->if_ioctl)(ifp, cmd, data); - IFF_UNLOCKGIANT(ifp); - return (error); + return ((*ifp->if_ioctl)(ifp, cmd, data)); } /* @@ -531,7 +526,6 @@ in_control(struct socket *so, u_long cmd IFP_TO_IA(ifp, oia); if (oia == NULL) { ii = ((struct in_ifinfo *)ifp->if_afdata[AF_INET]); - IFF_LOCKGIANT(ifp); IN_MULTI_LOCK(); if (ii->ii_allhosts) { (void)in_leavegroup_locked(ii->ii_allhosts, @@ -539,7 +533,6 @@ in_control(struct socket *so, u_long cmd ii->ii_allhosts = NULL; } IN_MULTI_UNLOCK(); - IFF_UNLOCKGIANT(ifp); } } IFAFREE(&ia->ia_ifa); @@ -753,9 +746,7 @@ in_ifinit(struct ifnet *ifp, struct in_i * and to validate the address if necessary. */ if (ifp->if_ioctl != NULL) { - IFF_LOCKGIANT(ifp); error = (*ifp->if_ioctl)(ifp, SIOCSIFADDR, (caddr_t)ia); - IFF_UNLOCKGIANT(ifp); if (error) { splx(s); /* LIST_REMOVE(ia, ia_hash) is done in in_control */ Modified: head/sys/netinet/in_mcast.c ============================================================================== --- head/sys/netinet/in_mcast.c Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/netinet/in_mcast.c Sun Mar 15 14:21:05 2009 (r189851) @@ -1100,11 +1100,9 @@ in_joingroup(struct ifnet *ifp, const st { int error; - IFF_LOCKGIANT(ifp); IN_MULTI_LOCK(); error = in_joingroup_locked(ifp, gina, imf, pinm); IN_MULTI_UNLOCK(); - IFF_UNLOCKGIANT(ifp); return (error); } @@ -1181,20 +1179,14 @@ int in_leavegroup(struct in_multi *inm, /*const*/ struct in_mfilter *imf) { struct ifnet *ifp; - int detached, error; + int error; - detached = inm_is_ifp_detached(inm); ifp = inm->inm_ifp; - if (!detached) - IFF_LOCKGIANT(ifp); IN_MULTI_LOCK(); error = in_leavegroup_locked(inm, imf); IN_MULTI_UNLOCK(); - if (!detached) - IFF_UNLOCKGIANT(ifp); - return (error); } @@ -1396,8 +1388,6 @@ inp_block_unblock_source(struct inpcb *i if (!IN_MULTICAST(ntohl(gsa->sin.sin_addr.s_addr))) return (EINVAL); - IFF_LOCKGIANT(ifp); - /* * Check if we are actually a member of this group. */ @@ -1486,7 +1476,6 @@ out_imf_rollback: out_inp_locked: INP_WUNLOCK(inp); - IFF_UNLOCKGIANT(ifp); return (error); } @@ -1978,8 +1967,6 @@ inp_join_group(struct inpcb *inp, struct if (ifp == NULL || (ifp->if_flags & IFF_MULTICAST) == 0) return (EADDRNOTAVAIL); - IFF_LOCKGIANT(ifp); - /* * MCAST_JOIN_SOURCE on an exclusive membership is an error. * On an existing inclusive membership, it just adds the @@ -2102,7 +2089,6 @@ out_imo_free: out_inp_locked: INP_WUNLOCK(inp); - IFF_UNLOCKGIANT(ifp); return (error); } @@ -2215,9 +2201,6 @@ inp_leave_group(struct inpcb *inp, struc if (!IN_MULTICAST(ntohl(gsa->sin.sin_addr.s_addr))) return (EINVAL); - if (ifp) - IFF_LOCKGIANT(ifp); - /* * Find the membership in the membership array. */ @@ -2312,8 +2295,6 @@ out_imf_rollback: out_inp_locked: INP_WUNLOCK(inp); - if (ifp) - IFF_UNLOCKGIANT(ifp); return (error); } @@ -2432,8 +2413,6 @@ inp_set_source_filters(struct inpcb *inp if (ifp == NULL) return (EADDRNOTAVAIL); - IFF_LOCKGIANT(ifp); - /* * Take the INP write lock. * Check if this socket is a member of this group. @@ -2551,7 +2530,6 @@ out_imf_rollback: out_inp_locked: INP_WUNLOCK(inp); - IFF_UNLOCKGIANT(ifp); return (error); } Modified: head/sys/netinet6/in6.c ============================================================================== --- head/sys/netinet6/in6.c Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/netinet6/in6.c Sun Mar 15 14:21:05 2009 (r189851) @@ -1516,9 +1516,7 @@ in6_ifinit(struct ifnet *ifp, struct in6 ia->ia_addr = *sin6; if (ifacount <= 1 && ifp->if_ioctl) { - IFF_LOCKGIANT(ifp); error = (*ifp->if_ioctl)(ifp, SIOCSIFADDR, (caddr_t)ia); - IFF_UNLOCKGIANT(ifp); if (error) { splx(s); return (error); Modified: head/sys/netinet6/in6_ifattach.c ============================================================================== --- head/sys/netinet6/in6_ifattach.c Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/netinet6/in6_ifattach.c Sun Mar 15 14:21:05 2009 (r189851) @@ -906,10 +906,8 @@ in6_purgemaddrs(struct ifnet *ifp) struct in6_multi *in6m; struct in6_multi *oin6m; - IFF_LOCKGIANT(ifp); LIST_FOREACH_SAFE(in6m, &in6_multihead, in6m_entry, oin6m) { if (in6m->in6m_ifp == ifp) in6_delmulti(in6m); } - IFF_UNLOCKGIANT(ifp); } Modified: head/sys/netinet6/mld6.c ============================================================================== --- head/sys/netinet6/mld6.c Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/netinet6/mld6.c Sun Mar 15 14:21:05 2009 (r189851) @@ -550,7 +550,6 @@ in6_addmulti(struct in6_addr *maddr6, st *errorp = 0; in6m = NULL; - IFF_LOCKGIANT(ifp); /*IN6_MULTI_LOCK();*/ IN6_LOOKUP_MULTI(*maddr6, ifp, in6m); @@ -622,7 +621,6 @@ in6_addmulti(struct in6_addr *maddr6, st } while (0); /*IN6_MULTI_UNLOCK();*/ - IFF_UNLOCKGIANT(ifp); return (in6m); } Modified: head/sys/netnatm/natm.c ============================================================================== --- head/sys/netnatm/natm.c Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/netnatm/natm.c Sun Mar 15 14:21:05 2009 (r189851) @@ -221,13 +221,9 @@ natm_usr_connect(struct socket *so, stru op.param.traffic = ATMIO_TRAFFIC_UBR; NATM_UNLOCK(); - IFF_LOCKGIANT(ifp); if (ifp->if_ioctl == NULL || - ifp->if_ioctl(ifp, SIOCATMOPENVCC, (caddr_t)&op) != 0) { - IFF_UNLOCKGIANT(ifp); + ifp->if_ioctl(ifp, SIOCATMOPENVCC, (caddr_t)&op) != 0) return (EIO); - } - IFF_UNLOCKGIANT(ifp); soisconnected(so); return (error); } @@ -259,11 +255,8 @@ natm_usr_disconnect(struct socket *so) cl.vpi = npcb->npcb_vpi; cl.vci = npcb->npcb_vci; NATM_UNLOCK(); - if (ifp->if_ioctl != NULL) { - IFF_LOCKGIANT(ifp); + if (ifp->if_ioctl != NULL) ifp->if_ioctl(ifp, SIOCATMCLOSEVCC, (caddr_t)&cl); - IFF_UNLOCKGIANT(ifp); - } soisdisconnected(so); return (error); } @@ -342,17 +335,13 @@ natm_usr_control(struct socket *so, u_lo struct ifnet *ifp, d_thread_t *p) { struct natmpcb *npcb; - int error; npcb = (struct natmpcb *)so->so_pcb; KASSERT(npcb != NULL, ("natm_usr_control: npcb == NULL")); if (ifp == NULL || ifp->if_ioctl == NULL) return (EOPNOTSUPP); - IFF_LOCKGIANT(ifp); - error = ((*ifp->if_ioctl)(ifp, cmd, arg)); - IFF_UNLOCKGIANT(ifp); - return (error); + return ((*ifp->if_ioctl)(ifp, cmd, arg)); } static void Modified: head/sys/pc98/conf/NOTES ============================================================================== --- head/sys/pc98/conf/NOTES Sun Mar 15 13:14:06 2009 (r189850) +++ head/sys/pc98/conf/NOTES Sun Mar 15 14:21:05 2009 (r189851) @@ -372,8 +372,6 @@ hint.mse.0.irq="13" # Network interfaces: # -# ar: Arnet SYNC/570i hdlc sync 2/4 port V.35/X.21 serial driver -# (requires sppp) # ce: Cronyx Tau-PCI/32 sync single/dual port G.703/E1 serial adaptor # with 32 HDLC subchannels (requires sppp (default), or NETGRAPH if # NETGRAPH_CRONYX is configured) @@ -391,13 +389,11 @@ hint.mse.0.irq="13" # ral: Ralink Technology IEEE 802.11 wireless adapter # sbni: Granch SBNI12-xx ISA and PCI adapters # snc: National Semiconductor DP8393X SONIC Ethernet adapter driver -# sr: RISCom/N2 hdlc sync 1/2 port V.35/X.21 serial driver (requires sppp) # ural: Ralink Technology RT2500USB IEEE 802.11 wireless adapter # ath: Atheros a/b/g WiFi adapters (requires ath_hal and wlan) # Order for ISA/EISA devices is important here -device ar device ce device cp device cs @@ -427,7 +423,6 @@ hint.snc.0.at="isa" hint.snc.0.port="0x888" hint.snc.0.irq="6" hint.snc.0.maddr="0xc0000" -device sr device ural device ath # Atheros pci/cardbus NIC's
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903151421.n2FEL5Ra031289>