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:
parent
5156fd24e9
commit
d453ba81cd
|
@ -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),
|
||||||
|
|
Loading…
Reference in New Issue