]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/staging/hv/NetVsc.c
Staging: hv: don't use dynamic sized array
[mv-sheeva.git] / drivers / staging / hv / NetVsc.c
index f84942df3bbf4b14bda506249d5b03e789fbad07..a48e6376ce2181e35c949c3038c4a24819aacf1d 100644 (file)
@@ -1288,28 +1288,33 @@ static void NetVscOnReceiveCompletion(void *Context)
 
 void NetVscOnChannelCallback(void *Context)
 {
-       const int netPacketSize = 2048;
        int ret;
        struct hv_device *device = Context;
        struct netvsc_device *netDevice;
        u32 bytesRecvd;
        u64 requestId;
-       unsigned char packet[netPacketSize];
+       unsigned char *packet;
        struct vmpacket_descriptor *desc;
-       unsigned char *buffer = packet;
-       int bufferlen = netPacketSize;
+       unsigned char *buffer;
+       int bufferlen = NETVSC_PACKET_SIZE;
 
 
        DPRINT_ENTER(NETVSC);
 
        ASSERT(device);
 
+       packet = kzalloc(NETVSC_PACKET_SIZE * sizeof(unsigned char),
+                        GFP_KERNEL);
+       if (!packet)
+               return;
+       buffer = packet;
+
        netDevice = GetInboundNetDevice(device);
        if (!netDevice) {
                DPRINT_ERR(NETVSC, "net device (%p) shutting down..."
                           "ignoring inbound packets", netDevice);
                DPRINT_EXIT(NETVSC);
-               return;
+               goto out;
        }
 
        do {
@@ -1341,17 +1346,17 @@ void NetVscOnChannelCallback(void *Context)
                                }
 
                                /* reset */
-                               if (bufferlen > netPacketSize) {
+                               if (bufferlen > NETVSC_PACKET_SIZE) {
                                        kfree(buffer);
                                        buffer = packet;
-                                       bufferlen = netPacketSize;
+                                       bufferlen = NETVSC_PACKET_SIZE;
                                }
                        } else {
                                /* reset */
-                               if (bufferlen > netPacketSize) {
+                               if (bufferlen > NETVSC_PACKET_SIZE) {
                                        kfree(buffer);
                                        buffer = packet;
-                                       bufferlen = netPacketSize;
+                                       bufferlen = NETVSC_PACKET_SIZE;
                                }
 
                                break;
@@ -1375,5 +1380,7 @@ void NetVscOnChannelCallback(void *Context)
 
        PutNetDevice(device);
        DPRINT_EXIT(NETVSC);
+out:
+       kfree(buffer);
        return;
 }