diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/acpi/acpixf.h | 2 | ||||
| -rw-r--r-- | include/drm/drmP.h | 29 | ||||
| -rw-r--r-- | include/drm/drm_pciids.h | 2 | ||||
| -rw-r--r-- | include/drm/ttm/ttm_bo_api.h | 4 | ||||
| -rw-r--r-- | include/linux/Kbuild | 1 | ||||
| -rw-r--r-- | include/linux/coredump.h | 34 | ||||
| -rw-r--r-- | include/linux/cpuidle.h | 1 | ||||
| -rw-r--r-- | include/linux/dmaengine.h | 2 | ||||
| -rw-r--r-- | include/linux/elevator.h | 1 | ||||
| -rw-r--r-- | include/linux/module.h | 5 | ||||
| -rw-r--r-- | include/linux/rcupdate.h | 2 | ||||
| -rw-r--r-- | include/linux/types.h | 15 | ||||
| -rw-r--r-- | include/linux/wait.h | 1 | ||||
| -rw-r--r-- | include/media/videobuf-dma-sg.h | 1 | ||||
| -rw-r--r-- | include/net/bluetooth/bluetooth.h | 18 |
15 files changed, 67 insertions, 51 deletions
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index 12fe9797c0b1..7db647c96283 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h | |||
| @@ -55,7 +55,7 @@ | |||
| 55 | extern u8 acpi_gbl_permanent_mmap; | 55 | extern u8 acpi_gbl_permanent_mmap; |
| 56 | 56 | ||
| 57 | /* | 57 | /* |
| 58 | * Globals that are publically available, allowing for | 58 | * Globals that are publicly available, allowing for |
| 59 | * run time configuration | 59 | * run time configuration |
| 60 | */ | 60 | */ |
| 61 | extern u32 acpi_dbg_level; | 61 | extern u32 acpi_dbg_level; |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 7809d230adee..4c9461a4f9e6 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
| @@ -612,7 +612,7 @@ struct drm_gem_object { | |||
| 612 | struct kref refcount; | 612 | struct kref refcount; |
| 613 | 613 | ||
| 614 | /** Handle count of this object. Each handle also holds a reference */ | 614 | /** Handle count of this object. Each handle also holds a reference */ |
| 615 | struct kref handlecount; | 615 | atomic_t handle_count; /* number of handles on this object */ |
| 616 | 616 | ||
| 617 | /** Related drm device */ | 617 | /** Related drm device */ |
| 618 | struct drm_device *dev; | 618 | struct drm_device *dev; |
| @@ -808,7 +808,6 @@ struct drm_driver { | |||
| 808 | */ | 808 | */ |
| 809 | int (*gem_init_object) (struct drm_gem_object *obj); | 809 | int (*gem_init_object) (struct drm_gem_object *obj); |
| 810 | void (*gem_free_object) (struct drm_gem_object *obj); | 810 | void (*gem_free_object) (struct drm_gem_object *obj); |
| 811 | void (*gem_free_object_unlocked) (struct drm_gem_object *obj); | ||
| 812 | 811 | ||
| 813 | /* vga arb irq handler */ | 812 | /* vga arb irq handler */ |
| 814 | void (*vgaarb_irq)(struct drm_device *dev, bool state); | 813 | void (*vgaarb_irq)(struct drm_device *dev, bool state); |
| @@ -1175,6 +1174,7 @@ extern int drm_release(struct inode *inode, struct file *filp); | |||
| 1175 | extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); | 1174 | extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); |
| 1176 | extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma); | 1175 | extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma); |
| 1177 | extern void drm_vm_open_locked(struct vm_area_struct *vma); | 1176 | extern void drm_vm_open_locked(struct vm_area_struct *vma); |
| 1177 | extern void drm_vm_close_locked(struct vm_area_struct *vma); | ||
| 1178 | extern resource_size_t drm_core_get_map_ofs(struct drm_local_map * map); | 1178 | extern resource_size_t drm_core_get_map_ofs(struct drm_local_map * map); |
| 1179 | extern resource_size_t drm_core_get_reg_ofs(struct drm_device *dev); | 1179 | extern resource_size_t drm_core_get_reg_ofs(struct drm_device *dev); |
| 1180 | extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); | 1180 | extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); |
| @@ -1455,12 +1455,11 @@ int drm_gem_init(struct drm_device *dev); | |||
| 1455 | void drm_gem_destroy(struct drm_device *dev); | 1455 | void drm_gem_destroy(struct drm_device *dev); |
| 1456 | void drm_gem_object_release(struct drm_gem_object *obj); | 1456 | void drm_gem_object_release(struct drm_gem_object *obj); |
| 1457 | void drm_gem_object_free(struct kref *kref); | 1457 | void drm_gem_object_free(struct kref *kref); |
| 1458 | void drm_gem_object_free_unlocked(struct kref *kref); | ||
| 1459 | struct drm_gem_object *drm_gem_object_alloc(struct drm_device *dev, | 1458 | struct drm_gem_object *drm_gem_object_alloc(struct drm_device *dev, |
| 1460 | size_t size); | 1459 | size_t size); |
| 1461 | int drm_gem_object_init(struct drm_device *dev, | 1460 | int drm_gem_object_init(struct drm_device *dev, |
| 1462 | struct drm_gem_object *obj, size_t size); | 1461 | struct drm_gem_object *obj, size_t size); |
| 1463 | void drm_gem_object_handle_free(struct kref *kref); | 1462 | void drm_gem_object_handle_free(struct drm_gem_object *obj); |
| 1464 | void drm_gem_vm_open(struct vm_area_struct *vma); | 1463 | void drm_gem_vm_open(struct vm_area_struct *vma); |
| 1465 | void drm_gem_vm_close(struct vm_area_struct *vma); | 1464 | void drm_gem_vm_close(struct vm_area_struct *vma); |
| 1466 | int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); | 1465 | int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); |
| @@ -1483,8 +1482,12 @@ drm_gem_object_unreference(struct drm_gem_object *obj) | |||
| 1483 | static inline void | 1482 | static inline void |
| 1484 | drm_gem_object_unreference_unlocked(struct drm_gem_object *obj) | 1483 | drm_gem_object_unreference_unlocked(struct drm_gem_object *obj) |
| 1485 | { | 1484 | { |
| 1486 | if (obj != NULL) | 1485 | if (obj != NULL) { |
| 1487 | kref_put(&obj->refcount, drm_gem_object_free_unlocked); | 1486 | struct drm_device *dev = obj->dev; |
| 1487 | mutex_lock(&dev->struct_mutex); | ||
| 1488 | kref_put(&obj->refcount, drm_gem_object_free); | ||
| 1489 | mutex_unlock(&dev->struct_mutex); | ||
| 1490 | } | ||
| 1488 | } | 1491 | } |
| 1489 | 1492 | ||
| 1490 | int drm_gem_handle_create(struct drm_file *file_priv, | 1493 | int drm_gem_handle_create(struct drm_file *file_priv, |
| @@ -1495,7 +1498,7 @@ static inline void | |||
| 1495 | drm_gem_object_handle_reference(struct drm_gem_object *obj) | 1498 | drm_gem_object_handle_reference(struct drm_gem_object *obj) |
| 1496 | { | 1499 | { |
| 1497 | drm_gem_object_reference(obj); | 1500 | drm_gem_object_reference(obj); |
| 1498 | kref_get(&obj->handlecount); | 1501 | atomic_inc(&obj->handle_count); |
| 1499 | } | 1502 | } |
| 1500 | 1503 | ||
| 1501 | static inline void | 1504 | static inline void |
| @@ -1504,12 +1507,15 @@ drm_gem_object_handle_unreference(struct drm_gem_object *obj) | |||
| 1504 | if (obj == NULL) | 1507 | if (obj == NULL) |
| 1505 | return; | 1508 | return; |
| 1506 | 1509 | ||
| 1510 | if (atomic_read(&obj->handle_count) == 0) | ||
| 1511 | return; | ||
| 1507 | /* | 1512 | /* |
| 1508 | * Must bump handle count first as this may be the last | 1513 | * Must bump handle count first as this may be the last |
| 1509 | * ref, in which case the object would disappear before we | 1514 | * ref, in which case the object would disappear before we |
| 1510 | * checked for a name | 1515 | * checked for a name |
| 1511 | */ | 1516 | */ |
| 1512 | kref_put(&obj->handlecount, drm_gem_object_handle_free); | 1517 | if (atomic_dec_and_test(&obj->handle_count)) |
| 1518 | drm_gem_object_handle_free(obj); | ||
| 1513 | drm_gem_object_unreference(obj); | 1519 | drm_gem_object_unreference(obj); |
| 1514 | } | 1520 | } |
| 1515 | 1521 | ||
| @@ -1519,12 +1525,17 @@ drm_gem_object_handle_unreference_unlocked(struct drm_gem_object *obj) | |||
| 1519 | if (obj == NULL) | 1525 | if (obj == NULL) |
| 1520 | return; | 1526 | return; |
| 1521 | 1527 | ||
| 1528 | if (atomic_read(&obj->handle_count) == 0) | ||
| 1529 | return; | ||
| 1530 | |||
| 1522 | /* | 1531 | /* |
| 1523 | * Must bump handle count first as this may be the last | 1532 | * Must bump handle count first as this may be the last |
| 1524 | * ref, in which case the object would disappear before we | 1533 | * ref, in which case the object would disappear before we |
| 1525 | * checked for a name | 1534 | * checked for a name |
| 1526 | */ | 1535 | */ |
| 1527 | kref_put(&obj->handlecount, drm_gem_object_handle_free); | 1536 | |
| 1537 | if (atomic_dec_and_test(&obj->handle_count)) | ||
| 1538 | drm_gem_object_handle_free(obj); | ||
| 1528 | drm_gem_object_unreference_unlocked(obj); | 1539 | drm_gem_object_unreference_unlocked(obj); |
| 1529 | } | 1540 | } |
| 1530 | 1541 | ||
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h index 3a9940ef728b..883c1d439899 100644 --- a/include/drm/drm_pciids.h +++ b/include/drm/drm_pciids.h | |||
| @@ -85,7 +85,6 @@ | |||
| 85 | {0x1002, 0x5460, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ | 85 | {0x1002, 0x5460, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ |
| 86 | {0x1002, 0x5462, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ | 86 | {0x1002, 0x5462, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ |
| 87 | {0x1002, 0x5464, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ | 87 | {0x1002, 0x5464, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ |
| 88 | {0x1002, 0x5657, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ | ||
| 89 | {0x1002, 0x5548, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \ | 88 | {0x1002, 0x5548, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \ |
| 90 | {0x1002, 0x5549, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \ | 89 | {0x1002, 0x5549, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \ |
| 91 | {0x1002, 0x554A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \ | 90 | {0x1002, 0x554A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R423|RADEON_NEW_MEMMAP}, \ |
| @@ -103,6 +102,7 @@ | |||
| 103 | {0x1002, 0x564F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 102 | {0x1002, 0x564F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
| 104 | {0x1002, 0x5652, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 103 | {0x1002, 0x5652, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
| 105 | {0x1002, 0x5653, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 104 | {0x1002, 0x5653, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
| 105 | {0x1002, 0x5657, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV410|RADEON_NEW_MEMMAP}, \ | ||
| 106 | {0x1002, 0x5834, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP}, \ | 106 | {0x1002, 0x5834, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP}, \ |
| 107 | {0x1002, 0x5835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \ | 107 | {0x1002, 0x5835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY}, \ |
| 108 | {0x1002, 0x5954, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \ | 108 | {0x1002, 0x5954, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART}, \ |
diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h index 267a86c74e2e..2040e6c4f172 100644 --- a/include/drm/ttm/ttm_bo_api.h +++ b/include/drm/ttm/ttm_bo_api.h | |||
| @@ -246,9 +246,11 @@ struct ttm_buffer_object { | |||
| 246 | 246 | ||
| 247 | atomic_t reserved; | 247 | atomic_t reserved; |
| 248 | 248 | ||
| 249 | |||
| 250 | /** | 249 | /** |
| 251 | * Members protected by the bo::lock | 250 | * Members protected by the bo::lock |
| 251 | * In addition, setting sync_obj to anything else | ||
| 252 | * than NULL requires bo::reserved to be held. This allows for | ||
| 253 | * checking NULL while reserved but not holding bo::lock. | ||
| 252 | */ | 254 | */ |
| 253 | 255 | ||
| 254 | void *sync_obj_arg; | 256 | void *sync_obj_arg; |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 626b629429ff..4e8ea8c8ec1e 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
| @@ -118,7 +118,6 @@ header-y += eventpoll.h | |||
| 118 | header-y += ext2_fs.h | 118 | header-y += ext2_fs.h |
| 119 | header-y += fadvise.h | 119 | header-y += fadvise.h |
| 120 | header-y += falloc.h | 120 | header-y += falloc.h |
| 121 | header-y += fanotify.h | ||
| 122 | header-y += fb.h | 121 | header-y += fb.h |
| 123 | header-y += fcntl.h | 122 | header-y += fcntl.h |
| 124 | header-y += fd.h | 123 | header-y += fd.h |
diff --git a/include/linux/coredump.h b/include/linux/coredump.h index 8ba66a9d9022..ba4b85a6d9b8 100644 --- a/include/linux/coredump.h +++ b/include/linux/coredump.h | |||
| @@ -9,37 +9,7 @@ | |||
| 9 | * These are the only things you should do on a core-file: use only these | 9 | * These are the only things you should do on a core-file: use only these |
| 10 | * functions to write out all the necessary info. | 10 | * functions to write out all the necessary info. |
| 11 | */ | 11 | */ |
| 12 | static inline int dump_write(struct file *file, const void *addr, int nr) | 12 | extern int dump_write(struct file *file, const void *addr, int nr); |
| 13 | { | 13 | extern int dump_seek(struct file *file, loff_t off); |
| 14 | return file->f_op->write(file, addr, nr, &file->f_pos) == nr; | ||
| 15 | } | ||
| 16 | |||
| 17 | static inline int dump_seek(struct file *file, loff_t off) | ||
| 18 | { | ||
| 19 | int ret = 1; | ||
| 20 | |||
| 21 | if (file->f_op->llseek && file->f_op->llseek != no_llseek) { | ||
| 22 | if (file->f_op->llseek(file, off, SEEK_CUR) < 0) | ||
| 23 | return 0; | ||
| 24 | } else { | ||
| 25 | char *buf = (char *)get_zeroed_page(GFP_KERNEL); | ||
| 26 | |||
| 27 | if (!buf) | ||
| 28 | return 0; | ||
| 29 | while (off > 0) { | ||
| 30 | unsigned long n = off; | ||
| 31 | |||
| 32 | if (n > PAGE_SIZE) | ||
| 33 | n = PAGE_SIZE; | ||
| 34 | if (!dump_write(file, buf, n)) { | ||
| 35 | ret = 0; | ||
| 36 | break; | ||
| 37 | } | ||
| 38 | off -= n; | ||
| 39 | } | ||
| 40 | free_page((unsigned long)buf); | ||
| 41 | } | ||
| 42 | return ret; | ||
| 43 | } | ||
| 44 | 14 | ||
| 45 | #endif /* _LINUX_COREDUMP_H */ | 15 | #endif /* _LINUX_COREDUMP_H */ |
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index 36ca9721a0c2..1be416bbbb82 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h | |||
| @@ -53,6 +53,7 @@ struct cpuidle_state { | |||
| 53 | #define CPUIDLE_FLAG_BALANCED (0x40) /* medium latency, moderate savings */ | 53 | #define CPUIDLE_FLAG_BALANCED (0x40) /* medium latency, moderate savings */ |
| 54 | #define CPUIDLE_FLAG_DEEP (0x80) /* high latency, large savings */ | 54 | #define CPUIDLE_FLAG_DEEP (0x80) /* high latency, large savings */ |
| 55 | #define CPUIDLE_FLAG_IGNORE (0x100) /* ignore during this idle period */ | 55 | #define CPUIDLE_FLAG_IGNORE (0x100) /* ignore during this idle period */ |
| 56 | #define CPUIDLE_FLAG_TLB_FLUSHED (0x200) /* tlb will be flushed */ | ||
| 56 | 57 | ||
| 57 | #define CPUIDLE_DRIVER_FLAGS_MASK (0xFFFF0000) | 58 | #define CPUIDLE_DRIVER_FLAGS_MASK (0xFFFF0000) |
| 58 | 59 | ||
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index c61d4ca27bcc..e2106495cc11 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h | |||
| @@ -548,7 +548,7 @@ static inline bool dma_dev_has_pq_continue(struct dma_device *dma) | |||
| 548 | return (dma->max_pq & DMA_HAS_PQ_CONTINUE) == DMA_HAS_PQ_CONTINUE; | 548 | return (dma->max_pq & DMA_HAS_PQ_CONTINUE) == DMA_HAS_PQ_CONTINUE; |
| 549 | } | 549 | } |
| 550 | 550 | ||
| 551 | static unsigned short dma_dev_to_maxpq(struct dma_device *dma) | 551 | static inline unsigned short dma_dev_to_maxpq(struct dma_device *dma) |
| 552 | { | 552 | { |
| 553 | return dma->max_pq & ~DMA_HAS_PQ_CONTINUE; | 553 | return dma->max_pq & ~DMA_HAS_PQ_CONTINUE; |
| 554 | } | 554 | } |
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index 926b50322a46..4fd978e7eb83 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
| @@ -93,6 +93,7 @@ struct elevator_queue | |||
| 93 | struct elevator_type *elevator_type; | 93 | struct elevator_type *elevator_type; |
| 94 | struct mutex sysfs_lock; | 94 | struct mutex sysfs_lock; |
| 95 | struct hlist_head *hash; | 95 | struct hlist_head *hash; |
| 96 | unsigned int registered:1; | ||
| 96 | }; | 97 | }; |
| 97 | 98 | ||
| 98 | /* | 99 | /* |
diff --git a/include/linux/module.h b/include/linux/module.h index 8a6b9fdc7ffa..aace066bad8f 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
| @@ -686,17 +686,16 @@ extern int module_sysfs_initialized; | |||
| 686 | 686 | ||
| 687 | 687 | ||
| 688 | #ifdef CONFIG_GENERIC_BUG | 688 | #ifdef CONFIG_GENERIC_BUG |
| 689 | int module_bug_finalize(const Elf_Ehdr *, const Elf_Shdr *, | 689 | void module_bug_finalize(const Elf_Ehdr *, const Elf_Shdr *, |
| 690 | struct module *); | 690 | struct module *); |
| 691 | void module_bug_cleanup(struct module *); | 691 | void module_bug_cleanup(struct module *); |
| 692 | 692 | ||
| 693 | #else /* !CONFIG_GENERIC_BUG */ | 693 | #else /* !CONFIG_GENERIC_BUG */ |
| 694 | 694 | ||
| 695 | static inline int module_bug_finalize(const Elf_Ehdr *hdr, | 695 | static inline void module_bug_finalize(const Elf_Ehdr *hdr, |
| 696 | const Elf_Shdr *sechdrs, | 696 | const Elf_Shdr *sechdrs, |
| 697 | struct module *mod) | 697 | struct module *mod) |
| 698 | { | 698 | { |
| 699 | return 0; | ||
| 700 | } | 699 | } |
| 701 | static inline void module_bug_cleanup(struct module *mod) {} | 700 | static inline void module_bug_cleanup(struct module *mod) {} |
| 702 | #endif /* CONFIG_GENERIC_BUG */ | 701 | #endif /* CONFIG_GENERIC_BUG */ |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 9fbc54a2585d..83af1f8d8b74 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -454,7 +454,7 @@ static inline notrace void rcu_read_unlock_sched_notrace(void) | |||
| 454 | * Makes rcu_dereference_check() do the dirty work. | 454 | * Makes rcu_dereference_check() do the dirty work. |
| 455 | */ | 455 | */ |
| 456 | #define rcu_dereference_bh(p) \ | 456 | #define rcu_dereference_bh(p) \ |
| 457 | rcu_dereference_check(p, rcu_read_lock_bh_held()) | 457 | rcu_dereference_check(p, rcu_read_lock_bh_held() || irqs_disabled()) |
| 458 | 458 | ||
| 459 | /** | 459 | /** |
| 460 | * rcu_dereference_sched - fetch RCU-protected pointer, checking for RCU-sched | 460 | * rcu_dereference_sched - fetch RCU-protected pointer, checking for RCU-sched |
diff --git a/include/linux/types.h b/include/linux/types.h index 01a082f56ef4..357dbc19606f 100644 --- a/include/linux/types.h +++ b/include/linux/types.h | |||
| @@ -121,7 +121,15 @@ typedef __u64 u_int64_t; | |||
| 121 | typedef __s64 int64_t; | 121 | typedef __s64 int64_t; |
| 122 | #endif | 122 | #endif |
| 123 | 123 | ||
| 124 | /* this is a special 64bit data type that is 8-byte aligned */ | 124 | /* |
| 125 | * aligned_u64 should be used in defining kernel<->userspace ABIs to avoid | ||
| 126 | * common 32/64-bit compat problems. | ||
| 127 | * 64-bit values align to 4-byte boundaries on x86_32 (and possibly other | ||
| 128 | * architectures) and to 8-byte boundaries on 64-bit architetures. The new | ||
| 129 | * aligned_64 type enforces 8-byte alignment so that structs containing | ||
| 130 | * aligned_64 values have the same alignment on 32-bit and 64-bit architectures. | ||
| 131 | * No conversions are necessary between 32-bit user-space and a 64-bit kernel. | ||
| 132 | */ | ||
| 125 | #define aligned_u64 __u64 __attribute__((aligned(8))) | 133 | #define aligned_u64 __u64 __attribute__((aligned(8))) |
| 126 | #define aligned_be64 __be64 __attribute__((aligned(8))) | 134 | #define aligned_be64 __be64 __attribute__((aligned(8))) |
| 127 | #define aligned_le64 __le64 __attribute__((aligned(8))) | 135 | #define aligned_le64 __le64 __attribute__((aligned(8))) |
| @@ -178,6 +186,11 @@ typedef __u64 __bitwise __be64; | |||
| 178 | typedef __u16 __bitwise __sum16; | 186 | typedef __u16 __bitwise __sum16; |
| 179 | typedef __u32 __bitwise __wsum; | 187 | typedef __u32 __bitwise __wsum; |
| 180 | 188 | ||
| 189 | /* this is a special 64bit data type that is 8-byte aligned */ | ||
| 190 | #define __aligned_u64 __u64 __attribute__((aligned(8))) | ||
| 191 | #define __aligned_be64 __be64 __attribute__((aligned(8))) | ||
| 192 | #define __aligned_le64 __le64 __attribute__((aligned(8))) | ||
| 193 | |||
| 181 | #ifdef __KERNEL__ | 194 | #ifdef __KERNEL__ |
| 182 | typedef unsigned __bitwise__ gfp_t; | 195 | typedef unsigned __bitwise__ gfp_t; |
| 183 | typedef unsigned __bitwise__ fmode_t; | 196 | typedef unsigned __bitwise__ fmode_t; |
diff --git a/include/linux/wait.h b/include/linux/wait.h index 0836ccc57121..3efc9f3f43a0 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h | |||
| @@ -614,6 +614,7 @@ int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key); | |||
| 614 | (wait)->private = current; \ | 614 | (wait)->private = current; \ |
| 615 | (wait)->func = autoremove_wake_function; \ | 615 | (wait)->func = autoremove_wake_function; \ |
| 616 | INIT_LIST_HEAD(&(wait)->task_list); \ | 616 | INIT_LIST_HEAD(&(wait)->task_list); \ |
| 617 | (wait)->flags = 0; \ | ||
| 617 | } while (0) | 618 | } while (0) |
| 618 | 619 | ||
| 619 | /** | 620 | /** |
diff --git a/include/media/videobuf-dma-sg.h b/include/media/videobuf-dma-sg.h index 97e07f46a0fa..aa4ebb42a565 100644 --- a/include/media/videobuf-dma-sg.h +++ b/include/media/videobuf-dma-sg.h | |||
| @@ -48,6 +48,7 @@ struct videobuf_dmabuf { | |||
| 48 | 48 | ||
| 49 | /* for userland buffer */ | 49 | /* for userland buffer */ |
| 50 | int offset; | 50 | int offset; |
| 51 | size_t size; | ||
| 51 | struct page **pages; | 52 | struct page **pages; |
| 52 | 53 | ||
| 53 | /* for kernel buffers */ | 54 | /* for kernel buffers */ |
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h index 27a902d9b3a9..30fce0128dd7 100644 --- a/include/net/bluetooth/bluetooth.h +++ b/include/net/bluetooth/bluetooth.h | |||
| @@ -161,12 +161,30 @@ static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk, unsigned long l | |||
| 161 | { | 161 | { |
| 162 | struct sk_buff *skb; | 162 | struct sk_buff *skb; |
| 163 | 163 | ||
| 164 | release_sock(sk); | ||
| 164 | if ((skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err))) { | 165 | if ((skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err))) { |
| 165 | skb_reserve(skb, BT_SKB_RESERVE); | 166 | skb_reserve(skb, BT_SKB_RESERVE); |
| 166 | bt_cb(skb)->incoming = 0; | 167 | bt_cb(skb)->incoming = 0; |
| 167 | } | 168 | } |
| 169 | lock_sock(sk); | ||
| 170 | |||
| 171 | if (!skb && *err) | ||
| 172 | return NULL; | ||
| 173 | |||
| 174 | *err = sock_error(sk); | ||
| 175 | if (*err) | ||
| 176 | goto out; | ||
| 177 | |||
| 178 | if (sk->sk_shutdown) { | ||
| 179 | *err = -ECONNRESET; | ||
| 180 | goto out; | ||
| 181 | } | ||
| 168 | 182 | ||
| 169 | return skb; | 183 | return skb; |
| 184 | |||
| 185 | out: | ||
| 186 | kfree_skb(skb); | ||
| 187 | return NULL; | ||
| 170 | } | 188 | } |
| 171 | 189 | ||
| 172 | int bt_err(__u16 code); | 190 | int bt_err(__u16 code); |
