diff options
Diffstat (limited to 'drivers/bluetooth')
-rw-r--r-- | drivers/bluetooth/bfusb.c | 3 | ||||
-rw-r--r-- | drivers/bluetooth/bt3c_cs.c | 3 | ||||
-rw-r--r-- | drivers/bluetooth/hci_vhci.c | 14 |
3 files changed, 15 insertions, 5 deletions
diff --git a/drivers/bluetooth/bfusb.c b/drivers/bluetooth/bfusb.c index b990805806af..0c211adbc063 100644 --- a/drivers/bluetooth/bfusb.c +++ b/drivers/bluetooth/bfusb.c | |||
@@ -566,7 +566,8 @@ static int bfusb_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg | |||
566 | return -ENOIOCTLCMD; | 566 | return -ENOIOCTLCMD; |
567 | } | 567 | } |
568 | 568 | ||
569 | static int bfusb_load_firmware(struct bfusb_data *data, unsigned char *firmware, int count) | 569 | static int bfusb_load_firmware(struct bfusb_data *data, |
570 | const unsigned char *firmware, int count) | ||
570 | { | 571 | { |
571 | unsigned char *buf; | 572 | unsigned char *buf; |
572 | int err, pipe, len, size, sent = 0; | 573 | int err, pipe, len, size, sent = 0; |
diff --git a/drivers/bluetooth/bt3c_cs.c b/drivers/bluetooth/bt3c_cs.c index 7703d6e06fd9..593b7c595038 100644 --- a/drivers/bluetooth/bt3c_cs.c +++ b/drivers/bluetooth/bt3c_cs.c | |||
@@ -470,7 +470,8 @@ static int bt3c_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long | |||
470 | /* ======================== Card services HCI interaction ======================== */ | 470 | /* ======================== Card services HCI interaction ======================== */ |
471 | 471 | ||
472 | 472 | ||
473 | static int bt3c_load_firmware(bt3c_info_t *info, unsigned char *firmware, int count) | 473 | static int bt3c_load_firmware(bt3c_info_t *info, const unsigned char *firmware, |
474 | int count) | ||
474 | { | 475 | { |
475 | char *ptr = (char *) firmware; | 476 | char *ptr = (char *) firmware; |
476 | char b[9]; | 477 | char b[9]; |
diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c index 0638730a4a19..d97700aa54a9 100644 --- a/drivers/bluetooth/hci_vhci.c +++ b/drivers/bluetooth/hci_vhci.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/kernel.h> | 28 | #include <linux/kernel.h> |
29 | #include <linux/init.h> | 29 | #include <linux/init.h> |
30 | #include <linux/slab.h> | 30 | #include <linux/slab.h> |
31 | #include <linux/smp_lock.h> | ||
31 | #include <linux/types.h> | 32 | #include <linux/types.h> |
32 | #include <linux/errno.h> | 33 | #include <linux/errno.h> |
33 | #include <linux/sched.h> | 34 | #include <linux/sched.h> |
@@ -263,9 +264,11 @@ static int vhci_open(struct inode *inode, struct file *file) | |||
263 | skb_queue_head_init(&data->readq); | 264 | skb_queue_head_init(&data->readq); |
264 | init_waitqueue_head(&data->read_wait); | 265 | init_waitqueue_head(&data->read_wait); |
265 | 266 | ||
267 | lock_kernel(); | ||
266 | hdev = hci_alloc_dev(); | 268 | hdev = hci_alloc_dev(); |
267 | if (!hdev) { | 269 | if (!hdev) { |
268 | kfree(data); | 270 | kfree(data); |
271 | unlock_kernel(); | ||
269 | return -ENOMEM; | 272 | return -ENOMEM; |
270 | } | 273 | } |
271 | 274 | ||
@@ -286,10 +289,12 @@ static int vhci_open(struct inode *inode, struct file *file) | |||
286 | BT_ERR("Can't register HCI device"); | 289 | BT_ERR("Can't register HCI device"); |
287 | kfree(data); | 290 | kfree(data); |
288 | hci_free_dev(hdev); | 291 | hci_free_dev(hdev); |
292 | unlock_kernel(); | ||
289 | return -EBUSY; | 293 | return -EBUSY; |
290 | } | 294 | } |
291 | 295 | ||
292 | file->private_data = data; | 296 | file->private_data = data; |
297 | unlock_kernel(); | ||
293 | 298 | ||
294 | return nonseekable_open(inode, file); | 299 | return nonseekable_open(inode, file); |
295 | } | 300 | } |
@@ -313,18 +318,21 @@ static int vhci_release(struct inode *inode, struct file *file) | |||
313 | static int vhci_fasync(int fd, struct file *file, int on) | 318 | static int vhci_fasync(int fd, struct file *file, int on) |
314 | { | 319 | { |
315 | struct vhci_data *data = file->private_data; | 320 | struct vhci_data *data = file->private_data; |
316 | int err; | 321 | int err = 0; |
317 | 322 | ||
323 | lock_kernel(); | ||
318 | err = fasync_helper(fd, file, on, &data->fasync); | 324 | err = fasync_helper(fd, file, on, &data->fasync); |
319 | if (err < 0) | 325 | if (err < 0) |
320 | return err; | 326 | goto out; |
321 | 327 | ||
322 | if (on) | 328 | if (on) |
323 | data->flags |= VHCI_FASYNC; | 329 | data->flags |= VHCI_FASYNC; |
324 | else | 330 | else |
325 | data->flags &= ~VHCI_FASYNC; | 331 | data->flags &= ~VHCI_FASYNC; |
326 | 332 | ||
327 | return 0; | 333 | out: |
334 | unlock_kernel(); | ||
335 | return err; | ||
328 | } | 336 | } |
329 | 337 | ||
330 | static const struct file_operations vhci_fops = { | 338 | static const struct file_operations vhci_fops = { |