cvs commit: src/sys/dev/netif/rum if_rum.c if_rumvar.h
Sepherosa Ziehau
sephe at crater.dragonflybsd.org
Sun Apr 8 02:42:55 PDT 2007
sephe 2007/04/08 02:41:41 PDT
DragonFly src repository
Modified files:
sys/dev/netif/rum if_rum.c if_rumvar.h
Log:
Code cleanup:
- Nuke commented out spl*() and function declaration.
- Break long comment lines in rum_ioctl().
- Nuke unnecessary NULL node check in rum_start().
Resource alloc/free fixes and cleanup:
- Fix several resource leakages:
o In rum_start(), decrease node refcnt on error handling path.
o In rum_stop(), free rum_softc.stats_xfer.
o In rum_tx_free_list(), free possible pending TX mbuf.
- In rum_tx_data(), if usbd_transfer() fails, clear rum_tx_data.m and
rum_tx_data.ni, so later resource free routine will not double free
them.
- Change the redundant resource free code in rum_detach() into assertion
to make sure everything are clear.
- In rum_alloc_{tx,rx}_list(), don't call rum_free_{tx,rx}_list, if
error happens, since caller will do that in rum_stop().
Rest of changes are used to fix following problems:
1) Random system hanging if following script is excuted:
#!/bin/csh
while (1)
ifconfig rum0 up
ifconfig rum0 down
end
2) Random system hanging during 'ifconfig rum0 down', if rum(4) is
attached to uhci/ohci.
3) Promised system hanging if wpa_supplicant(8) is used and killed after
connection to AP is established, and rum(4) is attached to uhci/ohci.
4) Random serializer recursive assertion, if rum(4) is under heavy load
and brought down.
- In rum_stop(), turn on RUM_FLAG_STOPPED, so USB transanction will
not be restarted in rum_rxeof() and rum_stats_timeout() during device
halting.
- In rum_stop(), release ifnet.if_serializer before aborting RX/TX pipe.
This make sure serializer will not be recursive held,
e.g. abort RX pipe -> rum_rxeof().
- Don't turn off TSF sync, when 802.11 state transits to INIT. Since
o Chip will be reset immediately after INIT state transition, so
turning off TSF sync does not make much sense.
o If rum(4) is under heavy RX/TX load, turning off TSF sync will
stall various USB operations, thus hang the whole system.
- After above change, perform INIT state transition in rum_newstate(),
so that 802.11 state machine is promised to be halted during detach
and stop routine.
- Use critical section and RUM_FLAG_CONFIG to protect various USB operation
sequences, which are not intended to be interfered.
Revision Changes Path
1.11 +228 -208 src/sys/dev/netif/rum/if_rum.c
1.3 +3 -0 src/sys/dev/netif/rum/if_rumvar.h
http://www.dragonflybsd.org/cvsweb/src/sys/dev/netif/rum/if_rum.c.diff?r1=1.10&r2=1.11&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/dev/netif/rum/if_rumvar.h.diff?r1=1.2&r2=1.3&f=u
More information about the Commits
mailing list