|
@@ -31,7 +31,6 @@
|
|
|
****************************************************************/
|
|
|
|
|
|
/* TODO:
|
|
|
- * Fix in_interrupt() problem
|
|
|
* Develop test procedures for USB net interfaces
|
|
|
* Run test procedures
|
|
|
* Fix bugs from previous two steps
|
|
@@ -606,14 +605,30 @@ static void kaweth_usb_receive(struct urb *urb)
|
|
|
|
|
|
struct sk_buff *skb;
|
|
|
|
|
|
- if(unlikely(status == -ECONNRESET || status == -ESHUTDOWN))
|
|
|
- /* we are killed - set a flag and wake the disconnect handler */
|
|
|
- {
|
|
|
+ if (unlikely(status == -EPIPE)) {
|
|
|
+ kaweth->stats.rx_errors++;
|
|
|
kaweth->end = 1;
|
|
|
wake_up(&kaweth->term_wait);
|
|
|
+ dbg("Status was -EPIPE.");
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+ if (unlikely(status == -ECONNRESET || status == -ESHUTDOWN)) {
|
|
|
+ /* we are killed - set a flag and wake the disconnect handler */
|
|
|
+ kaweth->end = 1;
|
|
|
+ wake_up(&kaweth->term_wait);
|
|
|
+ dbg("Status was -ECONNRESET or -ESHUTDOWN.");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (unlikely(status == -EPROTO || status == -ETIME ||
|
|
|
+ status == -EILSEQ)) {
|
|
|
+ kaweth->stats.rx_errors++;
|
|
|
+ dbg("Status was -EPROTO, -ETIME, or -EILSEQ.");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (unlikely(status == -EOVERFLOW)) {
|
|
|
+ kaweth->stats.rx_errors++;
|
|
|
+ dbg("Status was -EOVERFLOW.");
|
|
|
+ }
|
|
|
spin_lock(&kaweth->device_lock);
|
|
|
if (IS_BLOCKED(kaweth->status)) {
|
|
|
spin_unlock(&kaweth->device_lock);
|
|
@@ -883,13 +898,16 @@ static void kaweth_set_rx_mode(struct net_device *net)
|
|
|
****************************************************************/
|
|
|
static void kaweth_async_set_rx_mode(struct kaweth_device *kaweth)
|
|
|
{
|
|
|
+ int result;
|
|
|
__u16 packet_filter_bitmap = kaweth->packet_filter_bitmap;
|
|
|
+
|
|
|
kaweth->packet_filter_bitmap = 0;
|
|
|
if (packet_filter_bitmap == 0)
|
|
|
return;
|
|
|
|
|
|
- {
|
|
|
- int result;
|
|
|
+ if (in_interrupt())
|
|
|
+ return;
|
|
|
+
|
|
|
result = kaweth_control(kaweth,
|
|
|
usb_sndctrlpipe(kaweth->dev, 0),
|
|
|
KAWETH_COMMAND_SET_PACKET_FILTER,
|
|
@@ -906,7 +924,6 @@ static void kaweth_async_set_rx_mode(struct kaweth_device *kaweth)
|
|
|
else {
|
|
|
dbg("Set Rx mode to %d", packet_filter_bitmap);
|
|
|
}
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
/****************************************************************
|