rsi: Fixed issue relating to doing dma on stack error.
authorFariya Fatima <fariyaf@gmail.com>
Wed, 2 Apr 2014 03:59:55 +0000 (09:29 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 9 Apr 2014 17:55:54 +0000 (13:55 -0400)
Signed-off-by: Fariya Fatima <fariyaf@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rsi/rsi_91x_usb.c

index bb1bf96670ebd382a1789c58f98f4afb91d6c9eb..4c46e5631e2f0bf81196dd8b89e3a1dea8b00ec7 100644 (file)
@@ -154,24 +154,30 @@ static int rsi_usb_reg_read(struct usb_device *usbdev,
                            u16 *value,
                            u16 len)
 {
-       u8 temp_buf[4];
-       int status = 0;
+       u8 *buf;
+       int status = -ENOMEM;
+
+       buf  = kmalloc(0x04, GFP_KERNEL);
+       if (!buf)
+               return status;
 
        status = usb_control_msg(usbdev,
                                 usb_rcvctrlpipe(usbdev, 0),
                                 USB_VENDOR_REGISTER_READ,
                                 USB_TYPE_VENDOR,
                                 ((reg & 0xffff0000) >> 16), (reg & 0xffff),
-                                (void *)temp_buf,
+                                (void *)buf,
                                 len,
                                 HZ * 5);
 
-       *value = (temp_buf[0] | (temp_buf[1] << 8));
+       *value = (buf[0] | (buf[1] << 8));
        if (status < 0) {
                rsi_dbg(ERR_ZONE,
                        "%s: Reg read failed with error code :%d\n",
                        __func__, status);
        }
+       kfree(buf);
+
        return status;
 }
 
@@ -190,8 +196,12 @@ static int rsi_usb_reg_write(struct usb_device *usbdev,
                             u16 value,
                             u16 len)
 {
-       u8 usb_reg_buf[4];
-       int status = 0;
+       u8 *usb_reg_buf;
+       int status = -ENOMEM;
+
+       usb_reg_buf  = kmalloc(0x04, GFP_KERNEL);
+       if (!usb_reg_buf)
+               return status;
 
        usb_reg_buf[0] = (value & 0x00ff);
        usb_reg_buf[1] = (value & 0xff00) >> 8;
@@ -212,6 +222,8 @@ static int rsi_usb_reg_write(struct usb_device *usbdev,
                        "%s: Reg write failed with error code :%d\n",
                        __func__, status);
        }
+       kfree(usb_reg_buf);
+
        return status;
 }
 
@@ -286,7 +298,7 @@ int rsi_usb_write_register_multiple(struct rsi_hw *adapter,
                return -ENOMEM;
 
        while (count) {
-               transfer = min_t(int, count, 4096);
+               transfer = (u8)(min_t(u32, count, 4096));
                memcpy(buf, data, transfer);
                status = usb_control_msg(dev->usbdev,
                                         usb_sndctrlpipe(dev->usbdev, 0),