diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | device/net_io.c | 2 | ||||
-rw-r--r-- | linux/dev/glue/net.c | 2 |
3 files changed, 9 insertions, 2 deletions
@@ -1,3 +1,10 @@ +2007-03-05 Samuel Thibault <samuel.thibault@ens-lyon.org> + + [bug #18349 --- ``General Protection Trap'' in `ipc_kmsg_enqueue'] + * device/net_io.c (net_deliver): Call net_filter() with splimp held. + * linux/dev/glue/net.c (device_write): Call net_packet() with splimp + held. + 2007-03-04 Thomas Schwinge <tschwinge@gnu.org> * tests/configfrag.ac (MBCHK): Remove check. diff --git a/device/net_io.c b/device/net_io.c index b565aa3..9c7517a 100644 --- a/device/net_io.c +++ b/device/net_io.c @@ -444,13 +444,13 @@ boolean_t net_deliver(nonblocking) } else return FALSE; simple_unlock(&net_queue_lock); - (void) spl0(); /* * Run the packet through the filters, * getting back a queue of packets to send. */ net_filter(kmsg, &send_list); + (void) spl0(); if (!nonblocking) { /* diff --git a/linux/dev/glue/net.c b/linux/dev/glue/net.c index 06dcdc4..0022f57 100644 --- a/linux/dev/glue/net.c +++ b/linux/dev/glue/net.c @@ -488,7 +488,6 @@ device_write (void *d, ipc_port_t reply_port, __skb_queue_tail (&dev->buffs[0], skb); mark_bh (NET_BH); } - splx (s); /* Send packet to filters. */ { @@ -517,6 +516,7 @@ device_write (void *d, ipc_port_t reply_port, ethernet_priority (kmsg)); } } + splx (s); return MIG_NO_REPLY; } |