Skip to content

Commit

Permalink
Restore if_cp.c 1.27
Browse files Browse the repository at this point in the history
----------------------------
	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.
  • Loading branch information
rik authored and rik committed Sep 27, 2005
1 parent 332a994 commit aa790ae
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions sys/dev/cp/if_cp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit aa790ae

Please sign in to comment.