net: cdc_ncm: use sane defaults for rx/tx buffers
authorBjørn Mork <bjorn@mork.no>
Fri, 16 May 2014 19:48:26 +0000 (21:48 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 17 May 2014 02:39:02 +0000 (22:39 -0400)
Lots of devices request much larger buffers than reasonable. This
cause real problems for users of hosts with limited resources.

Reducing the default buffer size to 16kB for such devices is
a reasonable trade-off between allowing them to aggregate traffic
and avoiding memory exhaustion on resource restrained hosts.

Signed-off-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/cdc_ncm.c
include/linux/usb/cdc_ncm.h

index f4b439847d04044e0462feffef9fb741d0abebed..bb53abe1f3a1755e469054d90bb6008d6d79938c 100644 (file)
@@ -492,10 +492,18 @@ static void cdc_ncm_fix_modulus(struct usbnet *dev)
 static int cdc_ncm_setup(struct usbnet *dev)
 {
        struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0];
+       u32 def_rx, def_tx;
+
+       /* be conservative when selecting intial buffer size to
+        * increase the number of hosts this will work for
+        */
+       def_rx = min_t(u32, CDC_NCM_NTB_DEF_SIZE_RX,
+                      le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize));
+       def_tx = min_t(u32, CDC_NCM_NTB_DEF_SIZE_TX,
+                      le32_to_cpu(ctx->ncm_parm.dwNtbOutMaxSize));
 
        /* clamp rx_max and tx_max and inform device */
-       cdc_ncm_update_rxtx_max(dev, le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize),
-                               le32_to_cpu(ctx->ncm_parm.dwNtbOutMaxSize));
+       cdc_ncm_update_rxtx_max(dev, def_rx, def_tx);
 
        /* sanitize the modulus and remainder values */
        cdc_ncm_fix_modulus(dev);
index 88d2d7f1820f8ecb11ad6e1b5a3352ad791cbd86..cde506731c48786ac9c339dcefce30f8d84f6b29 100644 (file)
 #define        CDC_NCM_NTB_MAX_SIZE_TX                 32768   /* bytes */
 #define        CDC_NCM_NTB_MAX_SIZE_RX                 32768   /* bytes */
 
+/* Initial NTB length */
+#define        CDC_NCM_NTB_DEF_SIZE_TX                 16384   /* bytes */
+#define        CDC_NCM_NTB_DEF_SIZE_RX                 16384   /* bytes */
+
 /* Minimum value for MaxDatagramSize, ch. 6.2.9 */
 #define        CDC_NCM_MIN_DATAGRAM_SIZE               1514    /* bytes */