rsi: Fixed issue relating to doing dma on stack error.

Signed-off-by: Fariya Fatima <fariyaf@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Fariya Fatima 2014-04-02 09:29:55 +05:30 committed by John W. Linville
parent 5156fd24e9
commit d453ba81cd
1 changed files with 19 additions and 7 deletions

View File

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