Staging: hv: ring parameter
authorStephen Hemminger <shemminger@vyatta.com>
Tue, 4 May 2010 16:58:53 +0000 (09:58 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 11 May 2010 18:36:09 +0000 (11:36 -0700)
The ring size parameter should be number of pages (not bytes).
Add module parameter information as well.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Acked-by: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/hv/NetVscApi.h
drivers/staging/hv/netvsc_drv.c

index 95d7a32b12f2a4ca791589297d6574d50b6975fa..c372c98785d5f6e8f7ccf0ccb4d3131c03f9b9d3 100644 (file)
@@ -28,7 +28,6 @@
 #include "VmbusApi.h"
 
 /* Defines */
-#define NETVSC_DEVICE_RING_BUFFER_SIZE (64*PAGE_SIZE)
 #define HW_MACADDR_LEN                 6
 
 /* Fwd declaration */
index 2ce9437b44b508e076ab8a2ab0c6d03b9629e899..b02455cfe23763bffe8992cc49721a61ae0807f6 100644 (file)
@@ -52,7 +52,11 @@ struct netvsc_driver_context {
        struct netvsc_driver drv_obj;
 };
 
-static int netvsc_ringbuffer_size = NETVSC_DEVICE_RING_BUFFER_SIZE;
+/* Need at least MAX_SKB_FRAGS (18) + 1
+   to handle worst case fragmented packet */
+static int ring_size = roundup_pow_of_two(2*MAX_SKB_FRAGS+1);
+module_param(ring_size, int, S_IRUGO);
+MODULE_PARM_DESC(ring_size, "Ring buffer size (# of pages)");
 
 /* The one and only one */
 static struct netvsc_driver_context g_netvsc_drv;
@@ -536,7 +540,7 @@ static int netvsc_drv_init(int (*drv_init)(struct hv_driver *drv))
 
        vmbus_get_interface(&net_drv_obj->Base.VmbusChannelInterface);
 
-       net_drv_obj->RingBufferSize = netvsc_ringbuffer_size;
+       net_drv_obj->RingBufferSize = ring_size * PAGE_SIZE;
        net_drv_obj->OnReceiveCallback = netvsc_recv_callback;
        net_drv_obj->OnLinkStatusChanged = netvsc_linkstatus_callback;
 
@@ -582,7 +586,6 @@ static void __exit netvsc_exit(void)
 MODULE_LICENSE("GPL");
 MODULE_VERSION(HV_DRV_VERSION);
 MODULE_DESCRIPTION("Microsoft Hyper-V network driver");
-module_param(netvsc_ringbuffer_size, int, S_IRUGO);
 
 module_init(netvsc_init);
 module_exit(netvsc_exit);