Explorar o código

usbnet: ratelimit warning messages invoked from callback handler

Warning messages coming from rtl8150 driver can flood the console
and make a DTV/set-top-box unable to decode video/audio frames.

'Pegasus' driver handles this situation similarly, preventing this
from happening there.

It happens with a low cost BCM MIPS embedded platform, whenever
timeout errors were coming from usbnet device, making platform
unusable for viewer watching.

Signed-off-by: André Goddard Rosa <andre.goddard@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
André Goddard Rosa %!s(int64=16) %!d(string=hai) anos
pai
achega
342a437ef6
Modificáronse 1 ficheiros con 6 adicións e 3 borrados
  1. 6 3
      drivers/net/usb/rtl8150.c

+ 6 - 3
drivers/net/usb/rtl8150.c

@@ -221,7 +221,8 @@ static void ctrl_callback(struct urb *urb)
 	case -ENOENT:
 	case -ENOENT:
 		break;
 		break;
 	default:
 	default:
-		dev_warn(&urb->dev->dev, "ctrl urb status %d\n", status);
+		if (printk_ratelimit())
+			dev_warn(&urb->dev->dev, "ctrl urb status %d\n", status);
 	}
 	}
 	dev = urb->context;
 	dev = urb->context;
 	clear_bit(RX_REG_SET, &dev->flags);
 	clear_bit(RX_REG_SET, &dev->flags);
@@ -442,10 +443,12 @@ static void read_bulk_callback(struct urb *urb)
 	case -ENOENT:
 	case -ENOENT:
 		return;	/* the urb is in unlink state */
 		return;	/* the urb is in unlink state */
 	case -ETIME:
 	case -ETIME:
-		dev_warn(&urb->dev->dev, "may be reset is needed?..\n");
+		if (printk_ratelimit())
+			dev_warn(&urb->dev->dev, "may be reset is needed?..\n");
 		goto goon;
 		goto goon;
 	default:
 	default:
-		dev_warn(&urb->dev->dev, "Rx status %d\n", status);
+		if (printk_ratelimit())
+			dev_warn(&urb->dev->dev, "Rx status %d\n", status);
 		goto goon;
 		goto goon;
 	}
 	}