Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Sep 2005 07:36:50 +0400
From:      Roman Kurakin <rik@cronyx.ru>
To:        Warner Losh <imp@FreeBSD.org>
Cc:        cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/dev/an if_an.c src/sys/dev/arl if_arl_isa.c src/sys/dev/awi if_awi_pccard.c src/sys/dev/cm if_cm_isa.c       src/sys/dev/cnw if_cnw.c src/sys/dev/cp if_cp.c src/sys/dev/cs         if_cs.c src/sys/dev/ed if_ed.c src/sys/dev/em if_em.c ...
Message-ID:  <432E3252.5060608@cronyx.ru>
In-Reply-To: <200509190310.j8J3ALgt095979@repoman.freebsd.org>
References:  <200509190310.j8J3ALgt095979@repoman.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
I didn't check what was done for my drivers, but I'll
put situation the other way. At the point we are going
to unregister interrupt handler we have atleast half-stoped
device. This may mean that any coming packet through
if_start would reactivate device or put it to unknown state.
Just as with problem you've tried to fix this is hardly
depend on driver design. IMHO the better aproach is to
set some flag for the interrupt handler that we should only
clear any interrupts and ignore interrupt details.

rik

Warner Losh:

>imp         2005-09-19 03:10:21 UTC
>
>  FreeBSD src repository
>
>  Modified files:
>    sys/dev/an           if_an.c 
>    sys/dev/arl          if_arl_isa.c 
>    sys/dev/awi          if_awi_pccard.c 
>    sys/dev/cm           if_cm_isa.c 
>    sys/dev/cnw          if_cnw.c 
>    sys/dev/cp           if_cp.c 
>    sys/dev/cs           if_cs.c 
>    sys/dev/ed           if_ed.c 
>    sys/dev/em           if_em.c 
>    sys/dev/en           if_en_pci.c 
>    sys/dev/ep           if_ep.c 
>    sys/dev/fe           if_fe_pccard.c 
>    sys/dev/if_ndis      if_ndis.c 
>    sys/dev/ipw          if_ipw.c 
>    sys/dev/iwi          if_iwi.c 
>    sys/dev/ixgb         if_ixgb.c 
>    sys/dev/lge          if_lge.c 
>    sys/dev/nge          if_nge.c 
>    sys/dev/nve          if_nve.c 
>    sys/dev/ral          if_ral.c 
>    sys/dev/ray          if_ray.c 
>    sys/dev/re           if_re.c 
>    sys/dev/sbsh         if_sbsh.c 
>    sys/dev/sio          sio_pccard.c 
>    sys/dev/sn           if_sn.c 
>    sys/dev/tx           if_tx.c 
>    sys/dev/txp          if_txp.c 
>    sys/dev/vge          if_vge.c 
>    sys/dev/wi           if_wi.c 
>    sys/dev/wl           if_wl.c 
>    sys/dev/xe           if_xe_pccard.c 
>  Log:
>  Make sure that we call if_free(ifp) after bus_teardown_intr.  Since we
>  could get an interrupt after we free the ifp, and the interrupt
>  handler depended on the ifp being still alive, this could, in theory,
>  cause a crash.  Eliminate this possibility by moving the if_free to
>  after the bus_teardown_intr() call.
>  
>  Revision  Changes    Path
>  1.71      +1 -1      src/sys/dev/an/if_an.c
>  1.6       +1 -1      src/sys/dev/arl/if_arl_isa.c
>  1.22      +1 -3      src/sys/dev/awi/if_awi_pccard.c
>  1.8       +1 -1      src/sys/dev/cm/if_cm_isa.c
>  1.22      +1 -1      src/sys/dev/cnw/if_cnw.c
>  1.27      +3 -2      src/sys/dev/cp/if_cp.c
>  1.43      +1 -1      src/sys/dev/cs/if_cs.c
>  1.263     +1 -1      src/sys/dev/ed/if_ed.c
>  1.70      +3 -1      src/sys/dev/em/if_em.c
>  1.39      +1 -1      src/sys/dev/en/if_en_pci.c
>  1.144     +1 -1      src/sys/dev/ep/if_ep.c
>  1.28      +1 -1      src/sys/dev/fe/if_fe_pccard.c
>  1.102     +3 -2      src/sys/dev/if_ndis/if_ndis.c
>  1.14      +2 -1      src/sys/dev/ipw/if_ipw.c
>  1.17      +2 -1      src/sys/dev/iwi/if_iwi.c
>  1.14      +3 -2      src/sys/dev/ixgb/if_ixgb.c
>  1.42      +1 -1      src/sys/dev/lge/if_lge.c
>  1.79      +1 -1      src/sys/dev/nge/if_nge.c
>  1.12      +3 -3      src/sys/dev/nve/if_nve.c
>  1.17      +1 -1      src/sys/dev/ral/if_ral.c
>  1.82      +1 -1      src/sys/dev/ray/if_ray.c
>  1.54      +2 -2      src/sys/dev/re/if_re.c
>  1.15      +2 -1      src/sys/dev/sbsh/if_sbsh.c
>  1.16      +9 -21     src/sys/dev/sio/sio_pccard.c
>  1.51      +1 -1      src/sys/dev/sn/if_sn.c
>  1.92      +0 -1      src/sys/dev/tx/if_tx.c
>  1.36      +3 -3      src/sys/dev/txp/if_txp.c
>  1.18      +2 -2      src/sys/dev/vge/if_vge.c
>  1.190     +1 -1      src/sys/dev/wi/if_wi.c
>  1.70      +1 -1      src/sys/dev/wl/if_wl.c
>  1.32      +1 -1      src/sys/dev/xe/if_xe_pccard.c
>  
>





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?432E3252.5060608>