Bluetooth: bfusb: Fix error path on firmware load
When loading the usb-configuration we do not signal the end of configuration on memory allocation error. This patch moves the memory allocation to the top so every error path uses "goto error" now to correctly send the usb-ctrl message when detecting some error. This also replaces GFP_ATOMIC with GFP_KERNEL as we are allowed to sleep here. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Acked-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
This commit is contained in:
parent
deceb024f1
commit
7f103a0d23
|
@ -568,22 +568,23 @@ static int bfusb_load_firmware(struct bfusb_data *data,
|
|||
|
||||
BT_INFO("BlueFRITZ! USB loading firmware");
|
||||
|
||||
buf = kmalloc(BFUSB_MAX_BLOCK_SIZE + 3, GFP_KERNEL);
|
||||
if (!buf) {
|
||||
BT_ERR("Can't allocate memory chunk for firmware");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
pipe = usb_sndctrlpipe(data->udev, 0);
|
||||
|
||||
if (usb_control_msg(data->udev, pipe, USB_REQ_SET_CONFIGURATION,
|
||||
0, 1, 0, NULL, 0, USB_CTRL_SET_TIMEOUT) < 0) {
|
||||
BT_ERR("Can't change to loading configuration");
|
||||
kfree(buf);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
data->udev->toggle[0] = data->udev->toggle[1] = 0;
|
||||
|
||||
buf = kmalloc(BFUSB_MAX_BLOCK_SIZE + 3, GFP_ATOMIC);
|
||||
if (!buf) {
|
||||
BT_ERR("Can't allocate memory chunk for firmware");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
pipe = usb_sndbulkpipe(data->udev, data->bulk_out_ep);
|
||||
|
||||
while (count) {
|
||||
|
|
Loading…
Reference in New Issue