Restore if_cp.c 1.27
---------------------------- revision 1.27 date: 2005/09/19 03:10:16; author: imp; state: Exp; lines: +3 -2 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. In fact, this change do nothing for this driver. It is protected from this by cp_destroy variable. This variable also protects driver from initiation of any activity from network stack with disabled intr handler with this change applied.
This commit is contained in:
parent
a0e81bce69
commit
732c9a1701
@ -614,6 +614,9 @@ static int cp_detach (device_t dev)
|
||||
cp_reset (b, 0 ,0);
|
||||
callout_stop (&led_timo[b->num]);
|
||||
|
||||
/* Disable the interrupt request. */
|
||||
bus_teardown_intr (dev, bd->cp_irq, bd->cp_intrhand);
|
||||
|
||||
for (c=b->chan; c<b->chan+NCHAN; ++c) {
|
||||
drv_t *d = (drv_t*) c->sys;
|
||||
|
||||
@ -646,8 +649,6 @@ static int cp_detach (device_t dev)
|
||||
b->sys = NULL;
|
||||
CP_UNLOCK (bd);
|
||||
|
||||
/* Disable the interrupt request. */
|
||||
bus_teardown_intr (dev, bd->cp_irq, bd->cp_intrhand);
|
||||
bus_deactivate_resource (dev, SYS_RES_IRQ, 0, bd->cp_irq);
|
||||
bus_release_resource (dev, SYS_RES_IRQ, 0, bd->cp_irq);
|
||||
bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->cp_res);
|
||||
|
Loading…
Reference in New Issue
Block a user