diff options
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/Kbuild | 3 | ||||
-rw-r--r-- | include/linux/backlight.h | 2 | ||||
-rw-r--r-- | include/linux/blkdev.h | 14 | ||||
-rw-r--r-- | include/linux/connector.h | 2 | ||||
-rw-r--r-- | include/linux/cpuset.h | 2 | ||||
-rw-r--r-- | include/linux/debug_locks.h | 2 | ||||
-rw-r--r-- | include/linux/device.h | 2 | ||||
-rw-r--r-- | include/linux/elevator.h | 3 | ||||
-rw-r--r-- | include/linux/file.h | 5 | ||||
-rw-r--r-- | include/linux/if_fddi.h | 2 | ||||
-rw-r--r-- | include/linux/input.h | 15 | ||||
-rw-r--r-- | include/linux/ioport.h | 3 | ||||
-rw-r--r-- | include/linux/kobject.h | 11 | ||||
-rw-r--r-- | include/linux/kvm.h | 3 | ||||
-rw-r--r-- | include/linux/page-flags.h | 8 | ||||
-rw-r--r-- | include/linux/pci.h | 29 | ||||
-rw-r--r-- | include/linux/pci_ids.h | 4 | ||||
-rw-r--r-- | include/linux/pci_regs.h | 19 | ||||
-rw-r--r-- | include/linux/rmap.h | 2 | ||||
-rw-r--r-- | include/linux/sctp.h | 10 | ||||
-rw-r--r-- | include/linux/spi/spi.h | 2 | ||||
-rw-r--r-- | include/linux/unwind.h | 63 | ||||
-rw-r--r-- | include/linux/vmstat.h | 11 | ||||
-rw-r--r-- | include/linux/workqueue.h | 36 |
24 files changed, 141 insertions, 112 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index a1b04d8a1d01..862e483cce8a 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -119,7 +119,6 @@ header-y += nfs4_mount.h | |||
119 | header-y += nfs_mount.h | 119 | header-y += nfs_mount.h |
120 | header-y += oom.h | 120 | header-y += oom.h |
121 | header-y += param.h | 121 | header-y += param.h |
122 | header-y += pci_ids.h | ||
123 | header-y += pci_regs.h | 122 | header-y += pci_regs.h |
124 | header-y += personality.h | 123 | header-y += personality.h |
125 | header-y += pfkeyv2.h | 124 | header-y += pfkeyv2.h |
@@ -138,7 +137,6 @@ header-y += radeonfb.h | |||
138 | header-y += raw.h | 137 | header-y += raw.h |
139 | header-y += resource.h | 138 | header-y += resource.h |
140 | header-y += rose.h | 139 | header-y += rose.h |
141 | header-y += sctp.h | ||
142 | header-y += smbno.h | 140 | header-y += smbno.h |
143 | header-y += snmp.h | 141 | header-y += snmp.h |
144 | header-y += sockios.h | 142 | header-y += sockios.h |
@@ -162,7 +160,6 @@ header-y += vt.h | |||
162 | header-y += wireless.h | 160 | header-y += wireless.h |
163 | header-y += xattr.h | 161 | header-y += xattr.h |
164 | header-y += x25.h | 162 | header-y += x25.h |
165 | header-y += zorro_ids.h | ||
166 | 163 | ||
167 | unifdef-y += acct.h | 164 | unifdef-y += acct.h |
168 | unifdef-y += adb.h | 165 | unifdef-y += adb.h |
diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 75e91f5b6a04..a5cf1beacb44 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h | |||
@@ -54,7 +54,7 @@ struct backlight_device { | |||
54 | }; | 54 | }; |
55 | 55 | ||
56 | extern struct backlight_device *backlight_device_register(const char *name, | 56 | extern struct backlight_device *backlight_device_register(const char *name, |
57 | void *devdata, struct backlight_properties *bp); | 57 | struct device *dev,void *devdata,struct backlight_properties *bp); |
58 | extern void backlight_device_unregister(struct backlight_device *bd); | 58 | extern void backlight_device_unregister(struct backlight_device *bd); |
59 | 59 | ||
60 | #define to_backlight_device(obj) container_of(obj, struct backlight_device, class_dev) | 60 | #define to_backlight_device(obj) container_of(obj, struct backlight_device, class_dev) |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index ea330d7b46c0..36a6eacefe20 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -331,10 +331,6 @@ struct request_pm_state | |||
331 | 331 | ||
332 | #include <linux/elevator.h> | 332 | #include <linux/elevator.h> |
333 | 333 | ||
334 | typedef int (merge_request_fn) (request_queue_t *, struct request *, | ||
335 | struct bio *); | ||
336 | typedef int (merge_requests_fn) (request_queue_t *, struct request *, | ||
337 | struct request *); | ||
338 | typedef void (request_fn_proc) (request_queue_t *q); | 334 | typedef void (request_fn_proc) (request_queue_t *q); |
339 | typedef int (make_request_fn) (request_queue_t *q, struct bio *bio); | 335 | typedef int (make_request_fn) (request_queue_t *q, struct bio *bio); |
340 | typedef int (prep_rq_fn) (request_queue_t *, struct request *); | 336 | typedef int (prep_rq_fn) (request_queue_t *, struct request *); |
@@ -376,9 +372,6 @@ struct request_queue | |||
376 | struct request_list rq; | 372 | struct request_list rq; |
377 | 373 | ||
378 | request_fn_proc *request_fn; | 374 | request_fn_proc *request_fn; |
379 | merge_request_fn *back_merge_fn; | ||
380 | merge_request_fn *front_merge_fn; | ||
381 | merge_requests_fn *merge_requests_fn; | ||
382 | make_request_fn *make_request_fn; | 375 | make_request_fn *make_request_fn; |
383 | prep_rq_fn *prep_rq_fn; | 376 | prep_rq_fn *prep_rq_fn; |
384 | unplug_fn *unplug_fn; | 377 | unplug_fn *unplug_fn; |
@@ -649,6 +642,11 @@ extern int sg_scsi_ioctl(struct file *, struct request_queue *, | |||
649 | struct gendisk *, struct scsi_ioctl_command __user *); | 642 | struct gendisk *, struct scsi_ioctl_command __user *); |
650 | 643 | ||
651 | /* | 644 | /* |
645 | * Temporary export, until SCSI gets fixed up. | ||
646 | */ | ||
647 | extern int ll_back_merge_fn(request_queue_t *, struct request *, struct bio *); | ||
648 | |||
649 | /* | ||
652 | * A queue has just exitted congestion. Note this in the global counter of | 650 | * A queue has just exitted congestion. Note this in the global counter of |
653 | * congested queues, and wake up anyone who was waiting for requests to be | 651 | * congested queues, and wake up anyone who was waiting for requests to be |
654 | * put back. | 652 | * put back. |
@@ -674,7 +672,7 @@ extern void __blk_stop_queue(request_queue_t *q); | |||
674 | extern void blk_run_queue(request_queue_t *); | 672 | extern void blk_run_queue(request_queue_t *); |
675 | extern void blk_start_queueing(request_queue_t *); | 673 | extern void blk_start_queueing(request_queue_t *); |
676 | extern int blk_rq_map_user(request_queue_t *, struct request *, void __user *, unsigned long); | 674 | extern int blk_rq_map_user(request_queue_t *, struct request *, void __user *, unsigned long); |
677 | extern int blk_rq_unmap_user(struct request *); | 675 | extern int blk_rq_unmap_user(struct bio *); |
678 | extern int blk_rq_map_kern(request_queue_t *, struct request *, void *, unsigned int, gfp_t); | 676 | extern int blk_rq_map_kern(request_queue_t *, struct request *, void *, unsigned int, gfp_t); |
679 | extern int blk_rq_map_user_iov(request_queue_t *, struct request *, | 677 | extern int blk_rq_map_user_iov(request_queue_t *, struct request *, |
680 | struct sg_iovec *, int, unsigned int); | 678 | struct sg_iovec *, int, unsigned int); |
diff --git a/include/linux/connector.h b/include/linux/connector.h index 3ea1cd58de97..10eb56b2940a 100644 --- a/include/linux/connector.h +++ b/include/linux/connector.h | |||
@@ -133,7 +133,7 @@ struct cn_callback_data { | |||
133 | struct cn_callback_entry { | 133 | struct cn_callback_entry { |
134 | struct list_head callback_entry; | 134 | struct list_head callback_entry; |
135 | struct cn_callback *cb; | 135 | struct cn_callback *cb; |
136 | struct delayed_work work; | 136 | struct work_struct work; |
137 | struct cn_queue_dev *pdev; | 137 | struct cn_queue_dev *pdev; |
138 | 138 | ||
139 | struct cn_callback_id id; | 139 | struct cn_callback_id id; |
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index 826b15e914e2..fd404416f31c 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h | |||
@@ -55,7 +55,7 @@ extern int cpuset_excl_nodes_overlap(const struct task_struct *p); | |||
55 | extern int cpuset_memory_pressure_enabled; | 55 | extern int cpuset_memory_pressure_enabled; |
56 | extern void __cpuset_memory_pressure_bump(void); | 56 | extern void __cpuset_memory_pressure_bump(void); |
57 | 57 | ||
58 | extern const struct file_operations proc_cpuset_operations; | 58 | extern struct file_operations proc_cpuset_operations; |
59 | extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); | 59 | extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); |
60 | 60 | ||
61 | extern void cpuset_lock(void); | 61 | extern void cpuset_lock(void); |
diff --git a/include/linux/debug_locks.h b/include/linux/debug_locks.h index a1c10b0c4cf0..1678a5de7013 100644 --- a/include/linux/debug_locks.h +++ b/include/linux/debug_locks.h | |||
@@ -24,7 +24,7 @@ extern int debug_locks_off(void); | |||
24 | int __ret = 0; \ | 24 | int __ret = 0; \ |
25 | \ | 25 | \ |
26 | if (unlikely(c)) { \ | 26 | if (unlikely(c)) { \ |
27 | if (debug_locks_silent || debug_locks_off()) \ | 27 | if (debug_locks_off() && !debug_locks_silent) \ |
28 | WARN_ON(1); \ | 28 | WARN_ON(1); \ |
29 | __ret = 1; \ | 29 | __ret = 1; \ |
30 | } \ | 30 | } \ |
diff --git a/include/linux/device.h b/include/linux/device.h index 49ab53ce92dc..f44247fe8135 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -433,6 +433,8 @@ static inline int device_is_registered(struct device *dev) | |||
433 | return dev->is_registered; | 433 | return dev->is_registered; |
434 | } | 434 | } |
435 | 435 | ||
436 | void driver_init(void); | ||
437 | |||
436 | /* | 438 | /* |
437 | * High level routines for use by the bus drivers | 439 | * High level routines for use by the bus drivers |
438 | */ | 440 | */ |
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index a24931d24404..e88fcbc77f8f 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
@@ -12,6 +12,8 @@ typedef void (elevator_merge_req_fn) (request_queue_t *, struct request *, struc | |||
12 | 12 | ||
13 | typedef void (elevator_merged_fn) (request_queue_t *, struct request *, int); | 13 | typedef void (elevator_merged_fn) (request_queue_t *, struct request *, int); |
14 | 14 | ||
15 | typedef int (elevator_allow_merge_fn) (request_queue_t *, struct request *, struct bio *); | ||
16 | |||
15 | typedef int (elevator_dispatch_fn) (request_queue_t *, int); | 17 | typedef int (elevator_dispatch_fn) (request_queue_t *, int); |
16 | 18 | ||
17 | typedef void (elevator_add_req_fn) (request_queue_t *, struct request *); | 19 | typedef void (elevator_add_req_fn) (request_queue_t *, struct request *); |
@@ -33,6 +35,7 @@ struct elevator_ops | |||
33 | elevator_merge_fn *elevator_merge_fn; | 35 | elevator_merge_fn *elevator_merge_fn; |
34 | elevator_merged_fn *elevator_merged_fn; | 36 | elevator_merged_fn *elevator_merged_fn; |
35 | elevator_merge_req_fn *elevator_merge_req_fn; | 37 | elevator_merge_req_fn *elevator_merge_req_fn; |
38 | elevator_allow_merge_fn *elevator_allow_merge_fn; | ||
36 | 39 | ||
37 | elevator_dispatch_fn *elevator_dispatch_fn; | 40 | elevator_dispatch_fn *elevator_dispatch_fn; |
38 | elevator_add_req_fn *elevator_add_req_fn; | 41 | elevator_add_req_fn *elevator_add_req_fn; |
diff --git a/include/linux/file.h b/include/linux/file.h index edca361f2ab4..a59001e9ea58 100644 --- a/include/linux/file.h +++ b/include/linux/file.h | |||
@@ -80,6 +80,11 @@ extern int expand_files(struct files_struct *, int nr); | |||
80 | extern void free_fdtable_rcu(struct rcu_head *rcu); | 80 | extern void free_fdtable_rcu(struct rcu_head *rcu); |
81 | extern void __init files_defer_init(void); | 81 | extern void __init files_defer_init(void); |
82 | 82 | ||
83 | static inline void free_fdtable(struct fdtable *fdt) | ||
84 | { | ||
85 | call_rcu(&fdt->rcu, free_fdtable_rcu); | ||
86 | } | ||
87 | |||
83 | static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd) | 88 | static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd) |
84 | { | 89 | { |
85 | struct file * file = NULL; | 90 | struct file * file = NULL; |
diff --git a/include/linux/if_fddi.h b/include/linux/if_fddi.h index e0a150046208..4aba6b0ad41c 100644 --- a/include/linux/if_fddi.h +++ b/include/linux/if_fddi.h | |||
@@ -103,6 +103,8 @@ struct fddihdr | |||
103 | } __attribute__ ((packed)); | 103 | } __attribute__ ((packed)); |
104 | 104 | ||
105 | #ifdef __KERNEL__ | 105 | #ifdef __KERNEL__ |
106 | #include <linux/netdevice.h> | ||
107 | |||
106 | /* Define FDDI statistics structure */ | 108 | /* Define FDDI statistics structure */ |
107 | struct fddi_statistics { | 109 | struct fddi_statistics { |
108 | 110 | ||
diff --git a/include/linux/input.h b/include/linux/input.h index 4e61158b06a0..bde65c8a3519 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
@@ -491,6 +491,21 @@ struct input_absinfo { | |||
491 | #define KEY_DIGITS 0x19d | 491 | #define KEY_DIGITS 0x19d |
492 | #define KEY_TEEN 0x19e | 492 | #define KEY_TEEN 0x19e |
493 | #define KEY_TWEN 0x19f | 493 | #define KEY_TWEN 0x19f |
494 | #define KEY_VIDEOPHONE 0x1a0 | ||
495 | #define KEY_GAMES 0x1a1 | ||
496 | #define KEY_ZOOMIN 0x1a2 | ||
497 | #define KEY_ZOOMOUT 0x1a3 | ||
498 | #define KEY_ZOOMRESET 0x1a4 | ||
499 | #define KEY_WORDPROCESSOR 0x1a5 | ||
500 | #define KEY_EDITOR 0x1a6 | ||
501 | #define KEY_SPREADSHEET 0x1a7 | ||
502 | #define KEY_GRAPHICSEDITOR 0x1a8 | ||
503 | #define KEY_PRESENTATION 0x1a9 | ||
504 | #define KEY_DATABASE 0x1aa | ||
505 | #define KEY_NEWS 0x1ab | ||
506 | #define KEY_VOICEMAIL 0x1ac | ||
507 | #define KEY_ADDRESSBOOK 0x1ad | ||
508 | #define KEY_MESSENGER 0x1ae | ||
494 | 509 | ||
495 | #define KEY_DEL_EOL 0x1c0 | 510 | #define KEY_DEL_EOL 0x1c0 |
496 | #define KEY_DEL_EOS 0x1c1 | 511 | #define KEY_DEL_EOS 0x1c1 |
diff --git a/include/linux/ioport.h b/include/linux/ioport.h index cf8696d4a138..15228d79c5bc 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h | |||
@@ -91,6 +91,9 @@ struct resource_list { | |||
91 | #define IORESOURCE_ROM_COPY (1<<2) /* ROM is alloc'd copy, resource field overlaid */ | 91 | #define IORESOURCE_ROM_COPY (1<<2) /* ROM is alloc'd copy, resource field overlaid */ |
92 | #define IORESOURCE_ROM_BIOS_COPY (1<<3) /* ROM is BIOS copy, resource field overlaid */ | 92 | #define IORESOURCE_ROM_BIOS_COPY (1<<3) /* ROM is BIOS copy, resource field overlaid */ |
93 | 93 | ||
94 | /* PCI control bits. Shares IORESOURCE_BITS with above PCI ROM. */ | ||
95 | #define IORESOURCE_PCI_FIXED (1<<4) /* Do not move resource */ | ||
96 | |||
94 | /* PC/ISA/whatever - the normal PC address spaces: IO and memory */ | 97 | /* PC/ISA/whatever - the normal PC address spaces: IO and memory */ |
95 | extern struct resource ioport_resource; | 98 | extern struct resource ioport_resource; |
96 | extern struct resource iomem_resource; | 99 | extern struct resource iomem_resource; |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index d1c8d28fa92e..76538fcf2c4e 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
@@ -265,8 +265,8 @@ extern int __must_check subsys_create_file(struct subsystem * , | |||
265 | struct subsys_attribute *); | 265 | struct subsys_attribute *); |
266 | 266 | ||
267 | #if defined(CONFIG_HOTPLUG) | 267 | #if defined(CONFIG_HOTPLUG) |
268 | void kobject_uevent(struct kobject *kobj, enum kobject_action action); | 268 | int kobject_uevent(struct kobject *kobj, enum kobject_action action); |
269 | void kobject_uevent_env(struct kobject *kobj, enum kobject_action action, | 269 | int kobject_uevent_env(struct kobject *kobj, enum kobject_action action, |
270 | char *envp[]); | 270 | char *envp[]); |
271 | 271 | ||
272 | int add_uevent_var(char **envp, int num_envp, int *cur_index, | 272 | int add_uevent_var(char **envp, int num_envp, int *cur_index, |
@@ -274,11 +274,12 @@ int add_uevent_var(char **envp, int num_envp, int *cur_index, | |||
274 | const char *format, ...) | 274 | const char *format, ...) |
275 | __attribute__((format (printf, 7, 8))); | 275 | __attribute__((format (printf, 7, 8))); |
276 | #else | 276 | #else |
277 | static inline void kobject_uevent(struct kobject *kobj, enum kobject_action action) { } | 277 | static inline int kobject_uevent(struct kobject *kobj, enum kobject_action action) |
278 | static inline void kobject_uevent_env(struct kobject *kobj, | 278 | { return 0; } |
279 | static inline int kobject_uevent_env(struct kobject *kobj, | ||
279 | enum kobject_action action, | 280 | enum kobject_action action, |
280 | char *envp[]) | 281 | char *envp[]) |
281 | { } | 282 | { return 0; } |
282 | 283 | ||
283 | static inline int add_uevent_var(char **envp, int num_envp, int *cur_index, | 284 | static inline int add_uevent_var(char **envp, int num_envp, int *cur_index, |
284 | char *buffer, int buffer_size, int *cur_len, | 285 | char *buffer, int buffer_size, int *cur_len, |
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 5bb2c3c585c1..28fdce1ac1db 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
@@ -11,6 +11,8 @@ | |||
11 | #include <asm/types.h> | 11 | #include <asm/types.h> |
12 | #include <linux/ioctl.h> | 12 | #include <linux/ioctl.h> |
13 | 13 | ||
14 | #define KVM_API_VERSION 1 | ||
15 | |||
14 | /* | 16 | /* |
15 | * Architectural interrupt line count, and the size of the bitmap needed | 17 | * Architectural interrupt line count, and the size of the bitmap needed |
16 | * to hold them. | 18 | * to hold them. |
@@ -209,6 +211,7 @@ struct kvm_dirty_log { | |||
209 | 211 | ||
210 | #define KVMIO 0xAE | 212 | #define KVMIO 0xAE |
211 | 213 | ||
214 | #define KVM_GET_API_VERSION _IO(KVMIO, 1) | ||
212 | #define KVM_RUN _IOWR(KVMIO, 2, struct kvm_run) | 215 | #define KVM_RUN _IOWR(KVMIO, 2, struct kvm_run) |
213 | #define KVM_GET_REGS _IOWR(KVMIO, 3, struct kvm_regs) | 216 | #define KVM_GET_REGS _IOWR(KVMIO, 3, struct kvm_regs) |
214 | #define KVM_SET_REGS _IOW(KVMIO, 4, struct kvm_regs) | 217 | #define KVM_SET_REGS _IOW(KVMIO, 4, struct kvm_regs) |
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 4830a3bedfb2..350878a2d848 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
@@ -253,15 +253,11 @@ static inline void SetPageUptodate(struct page *page) | |||
253 | 253 | ||
254 | struct page; /* forward declaration */ | 254 | struct page; /* forward declaration */ |
255 | 255 | ||
256 | int test_clear_page_dirty(struct page *page); | 256 | extern void cancel_dirty_page(struct page *page, unsigned int account_size); |
257 | |||
257 | int test_clear_page_writeback(struct page *page); | 258 | int test_clear_page_writeback(struct page *page); |
258 | int test_set_page_writeback(struct page *page); | 259 | int test_set_page_writeback(struct page *page); |
259 | 260 | ||
260 | static inline void clear_page_dirty(struct page *page) | ||
261 | { | ||
262 | test_clear_page_dirty(page); | ||
263 | } | ||
264 | |||
265 | static inline void set_page_writeback(struct page *page) | 261 | static inline void set_page_writeback(struct page *page) |
266 | { | 262 | { |
267 | test_set_page_writeback(page); | 263 | test_set_page_writeback(page); |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 01c707261f9c..f3c617eabd8d 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -20,9 +20,6 @@ | |||
20 | /* Include the pci register defines */ | 20 | /* Include the pci register defines */ |
21 | #include <linux/pci_regs.h> | 21 | #include <linux/pci_regs.h> |
22 | 22 | ||
23 | /* Include the ID list */ | ||
24 | #include <linux/pci_ids.h> | ||
25 | |||
26 | /* | 23 | /* |
27 | * The PCI interface treats multi-function devices as independent | 24 | * The PCI interface treats multi-function devices as independent |
28 | * devices. The slot/function address of each device is encoded | 25 | * devices. The slot/function address of each device is encoded |
@@ -54,6 +51,9 @@ | |||
54 | #include <asm/atomic.h> | 51 | #include <asm/atomic.h> |
55 | #include <linux/device.h> | 52 | #include <linux/device.h> |
56 | 53 | ||
54 | /* Include the ID list */ | ||
55 | #include <linux/pci_ids.h> | ||
56 | |||
57 | /* File state for mmap()s on /proc/bus/pci/X/Y */ | 57 | /* File state for mmap()s on /proc/bus/pci/X/Y */ |
58 | enum pci_mmap_state { | 58 | enum pci_mmap_state { |
59 | pci_mmap_io, | 59 | pci_mmap_io, |
@@ -396,6 +396,21 @@ struct pci_driver { | |||
396 | */ | 396 | */ |
397 | #define pci_module_init pci_register_driver | 397 | #define pci_module_init pci_register_driver |
398 | 398 | ||
399 | /** | ||
400 | * PCI_VDEVICE - macro used to describe a specific pci device in short form | ||
401 | * @vend: the vendor name | ||
402 | * @dev: the 16 bit PCI Device ID | ||
403 | * | ||
404 | * This macro is used to create a struct pci_device_id that matches a | ||
405 | * specific PCI device. The subvendor, and subdevice fields will be set | ||
406 | * to PCI_ANY_ID. The macro allows the next field to follow as the device | ||
407 | * private data. | ||
408 | */ | ||
409 | |||
410 | #define PCI_VDEVICE(vendor, device) \ | ||
411 | PCI_VENDOR_ID_##vendor, (device), \ | ||
412 | PCI_ANY_ID, PCI_ANY_ID, 0, 0 | ||
413 | |||
399 | /* these external functions are only available when PCI support is enabled */ | 414 | /* these external functions are only available when PCI support is enabled */ |
400 | #ifdef CONFIG_PCI | 415 | #ifdef CONFIG_PCI |
401 | 416 | ||
@@ -454,6 +469,8 @@ struct pci_dev *pci_find_slot (unsigned int bus, unsigned int devfn); | |||
454 | int pci_find_capability (struct pci_dev *dev, int cap); | 469 | int pci_find_capability (struct pci_dev *dev, int cap); |
455 | int pci_find_next_capability (struct pci_dev *dev, u8 pos, int cap); | 470 | int pci_find_next_capability (struct pci_dev *dev, u8 pos, int cap); |
456 | int pci_find_ext_capability (struct pci_dev *dev, int cap); | 471 | int pci_find_ext_capability (struct pci_dev *dev, int cap); |
472 | int pci_find_ht_capability (struct pci_dev *dev, int ht_cap); | ||
473 | int pci_find_next_ht_capability (struct pci_dev *dev, int pos, int ht_cap); | ||
457 | struct pci_bus *pci_find_next_bus(const struct pci_bus *from); | 474 | struct pci_bus *pci_find_next_bus(const struct pci_bus *from); |
458 | 475 | ||
459 | struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device, | 476 | struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device, |
@@ -468,6 +485,7 @@ struct pci_dev *pci_get_slot (struct pci_bus *bus, unsigned int devfn); | |||
468 | struct pci_dev *pci_get_bus_and_slot (unsigned int bus, unsigned int devfn); | 485 | struct pci_dev *pci_get_bus_and_slot (unsigned int bus, unsigned int devfn); |
469 | struct pci_dev *pci_get_class (unsigned int class, struct pci_dev *from); | 486 | struct pci_dev *pci_get_class (unsigned int class, struct pci_dev *from); |
470 | int pci_dev_present(const struct pci_device_id *ids); | 487 | int pci_dev_present(const struct pci_device_id *ids); |
488 | const struct pci_device_id *pci_find_present(const struct pci_device_id *ids); | ||
471 | 489 | ||
472 | int pci_bus_read_config_byte (struct pci_bus *bus, unsigned int devfn, int where, u8 *val); | 490 | int pci_bus_read_config_byte (struct pci_bus *bus, unsigned int devfn, int where, u8 *val); |
473 | int pci_bus_read_config_word (struct pci_bus *bus, unsigned int devfn, int where, u16 *val); | 491 | int pci_bus_read_config_word (struct pci_bus *bus, unsigned int devfn, int where, u16 *val); |
@@ -681,6 +699,7 @@ static inline struct pci_dev *pci_get_class(unsigned int class, struct pci_dev * | |||
681 | { return NULL; } | 699 | { return NULL; } |
682 | 700 | ||
683 | #define pci_dev_present(ids) (0) | 701 | #define pci_dev_present(ids) (0) |
702 | #define pci_find_present(ids) (NULL) | ||
684 | #define pci_dev_put(dev) do { } while (0) | 703 | #define pci_dev_put(dev) do { } while (0) |
685 | 704 | ||
686 | static inline void pci_set_master(struct pci_dev *dev) { } | 705 | static inline void pci_set_master(struct pci_dev *dev) { } |
@@ -783,6 +802,7 @@ enum pci_fixup_pass { | |||
783 | pci_fixup_header, /* After reading configuration header */ | 802 | pci_fixup_header, /* After reading configuration header */ |
784 | pci_fixup_final, /* Final phase of device fixups */ | 803 | pci_fixup_final, /* Final phase of device fixups */ |
785 | pci_fixup_enable, /* pci_enable_device() time */ | 804 | pci_fixup_enable, /* pci_enable_device() time */ |
805 | pci_fixup_resume, /* pci_enable_device() time */ | ||
786 | }; | 806 | }; |
787 | 807 | ||
788 | /* Anonymous variables would be nice... */ | 808 | /* Anonymous variables would be nice... */ |
@@ -801,6 +821,9 @@ enum pci_fixup_pass { | |||
801 | #define DECLARE_PCI_FIXUP_ENABLE(vendor, device, hook) \ | 821 | #define DECLARE_PCI_FIXUP_ENABLE(vendor, device, hook) \ |
802 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \ | 822 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \ |
803 | vendor##device##hook, vendor, device, hook) | 823 | vendor##device##hook, vendor, device, hook) |
824 | #define DECLARE_PCI_FIXUP_RESUME(vendor, device, hook) \ | ||
825 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \ | ||
826 | resume##vendor##device##hook, vendor, device, hook) | ||
804 | 827 | ||
805 | 828 | ||
806 | void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); | 829 | void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 95c1e74afebc..778e701eff30 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -104,6 +104,10 @@ | |||
104 | #define PCI_CLASS_SERIAL_FIBER 0x0c04 | 104 | #define PCI_CLASS_SERIAL_FIBER 0x0c04 |
105 | #define PCI_CLASS_SERIAL_SMBUS 0x0c05 | 105 | #define PCI_CLASS_SERIAL_SMBUS 0x0c05 |
106 | 106 | ||
107 | #define PCI_BASE_CLASS_WIRELESS 0x0d | ||
108 | #define PCI_CLASS_WIRELESS_RF_CONTROLLER 0x0d10 | ||
109 | #define PCI_CLASS_WIRELESS_WHCI 0x0d1010 | ||
110 | |||
107 | #define PCI_BASE_CLASS_INTELLIGENT 0x0e | 111 | #define PCI_BASE_CLASS_INTELLIGENT 0x0e |
108 | #define PCI_CLASS_INTELLIGENT_I2O 0x0e00 | 112 | #define PCI_CLASS_INTELLIGENT_I2O 0x0e00 |
109 | 113 | ||
diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h index 064b1dc71c22..7a6d34ee5ab1 100644 --- a/include/linux/pci_regs.h +++ b/include/linux/pci_regs.h | |||
@@ -475,15 +475,32 @@ | |||
475 | #define PCI_PWR_CAP 12 /* Capability */ | 475 | #define PCI_PWR_CAP 12 /* Capability */ |
476 | #define PCI_PWR_CAP_BUDGET(x) ((x) & 1) /* Included in system budget */ | 476 | #define PCI_PWR_CAP_BUDGET(x) ((x) & 1) /* Included in system budget */ |
477 | 477 | ||
478 | /* Hypertransport sub capability types */ | 478 | /* |
479 | * Hypertransport sub capability types | ||
480 | * | ||
481 | * Unfortunately there are both 3 bit and 5 bit capability types defined | ||
482 | * in the HT spec, catering for that is a little messy. You probably don't | ||
483 | * want to use these directly, just use pci_find_ht_capability() and it | ||
484 | * will do the right thing for you. | ||
485 | */ | ||
486 | #define HT_3BIT_CAP_MASK 0xE0 | ||
479 | #define HT_CAPTYPE_SLAVE 0x00 /* Slave/Primary link configuration */ | 487 | #define HT_CAPTYPE_SLAVE 0x00 /* Slave/Primary link configuration */ |
480 | #define HT_CAPTYPE_HOST 0x20 /* Host/Secondary link configuration */ | 488 | #define HT_CAPTYPE_HOST 0x20 /* Host/Secondary link configuration */ |
489 | |||
490 | #define HT_5BIT_CAP_MASK 0xF8 | ||
481 | #define HT_CAPTYPE_IRQ 0x80 /* IRQ Configuration */ | 491 | #define HT_CAPTYPE_IRQ 0x80 /* IRQ Configuration */ |
482 | #define HT_CAPTYPE_REMAPPING_40 0xA0 /* 40 bit address remapping */ | 492 | #define HT_CAPTYPE_REMAPPING_40 0xA0 /* 40 bit address remapping */ |
483 | #define HT_CAPTYPE_REMAPPING_64 0xA2 /* 64 bit address remapping */ | 493 | #define HT_CAPTYPE_REMAPPING_64 0xA2 /* 64 bit address remapping */ |
484 | #define HT_CAPTYPE_UNITID_CLUMP 0x90 /* Unit ID clumping */ | 494 | #define HT_CAPTYPE_UNITID_CLUMP 0x90 /* Unit ID clumping */ |
485 | #define HT_CAPTYPE_EXTCONF 0x98 /* Extended Configuration Space Access */ | 495 | #define HT_CAPTYPE_EXTCONF 0x98 /* Extended Configuration Space Access */ |
486 | #define HT_CAPTYPE_MSI_MAPPING 0xA8 /* MSI Mapping Capability */ | 496 | #define HT_CAPTYPE_MSI_MAPPING 0xA8 /* MSI Mapping Capability */ |
497 | #define HT_MSI_FLAGS 0x02 /* Offset to flags */ | ||
498 | #define HT_MSI_FLAGS_ENABLE 0x1 /* Mapping enable */ | ||
499 | #define HT_MSI_FLAGS_FIXED 0x2 /* Fixed mapping only */ | ||
500 | #define HT_MSI_FIXED_ADDR 0x00000000FEE00000ULL /* Fixed addr */ | ||
501 | #define HT_MSI_ADDR_LO 0x04 /* Offset to low addr bits */ | ||
502 | #define HT_MSI_ADDR_LO_MASK 0xFFF00000 /* Low address bit mask */ | ||
503 | #define HT_MSI_ADDR_HI 0x08 /* Offset to high addr bits */ | ||
487 | #define HT_CAPTYPE_DIRECT_ROUTE 0xB0 /* Direct routing configuration */ | 504 | #define HT_CAPTYPE_DIRECT_ROUTE 0xB0 /* Direct routing configuration */ |
488 | #define HT_CAPTYPE_VCSET 0xB8 /* Virtual Channel configuration */ | 505 | #define HT_CAPTYPE_VCSET 0xB8 /* Virtual Channel configuration */ |
489 | #define HT_CAPTYPE_ERROR_RETRY 0xC0 /* Retry on error configuration */ | 506 | #define HT_CAPTYPE_ERROR_RETRY 0xC0 /* Retry on error configuration */ |
diff --git a/include/linux/rmap.h b/include/linux/rmap.h index 36f850373d2c..bdd277223af0 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h | |||
@@ -72,7 +72,7 @@ void __anon_vma_link(struct vm_area_struct *); | |||
72 | void page_add_anon_rmap(struct page *, struct vm_area_struct *, unsigned long); | 72 | void page_add_anon_rmap(struct page *, struct vm_area_struct *, unsigned long); |
73 | void page_add_new_anon_rmap(struct page *, struct vm_area_struct *, unsigned long); | 73 | void page_add_new_anon_rmap(struct page *, struct vm_area_struct *, unsigned long); |
74 | void page_add_file_rmap(struct page *); | 74 | void page_add_file_rmap(struct page *); |
75 | void page_remove_rmap(struct page *); | 75 | void page_remove_rmap(struct page *, struct vm_area_struct *); |
76 | 76 | ||
77 | /** | 77 | /** |
78 | * page_dup_rmap - duplicate pte mapping to a page | 78 | * page_dup_rmap - duplicate pte mapping to a page |
diff --git a/include/linux/sctp.h b/include/linux/sctp.h index 35108fe7a686..d4f86560bfff 100644 --- a/include/linux/sctp.h +++ b/include/linux/sctp.h | |||
@@ -180,7 +180,7 @@ typedef enum { | |||
180 | SCTP_PARAM_ERR_CAUSE = __constant_htons(0xc003), | 180 | SCTP_PARAM_ERR_CAUSE = __constant_htons(0xc003), |
181 | SCTP_PARAM_SET_PRIMARY = __constant_htons(0xc004), | 181 | SCTP_PARAM_SET_PRIMARY = __constant_htons(0xc004), |
182 | SCTP_PARAM_SUCCESS_REPORT = __constant_htons(0xc005), | 182 | SCTP_PARAM_SUCCESS_REPORT = __constant_htons(0xc005), |
183 | SCTP_PARAM_ADAPTION_LAYER_IND = __constant_htons(0xc006), | 183 | SCTP_PARAM_ADAPTATION_LAYER_IND = __constant_htons(0xc006), |
184 | 184 | ||
185 | } sctp_param_t; /* enum */ | 185 | } sctp_param_t; /* enum */ |
186 | 186 | ||
@@ -281,11 +281,11 @@ typedef struct sctp_ecn_capable_param { | |||
281 | sctp_paramhdr_t param_hdr; | 281 | sctp_paramhdr_t param_hdr; |
282 | } __attribute__((packed)) sctp_ecn_capable_param_t; | 282 | } __attribute__((packed)) sctp_ecn_capable_param_t; |
283 | 283 | ||
284 | /* ADDIP Section 3.2.6 Adaption Layer Indication */ | 284 | /* ADDIP Section 3.2.6 Adaptation Layer Indication */ |
285 | typedef struct sctp_adaption_ind_param { | 285 | typedef struct sctp_adaptation_ind_param { |
286 | struct sctp_paramhdr param_hdr; | 286 | struct sctp_paramhdr param_hdr; |
287 | __be32 adaption_ind; | 287 | __be32 adaptation_ind; |
288 | } __attribute__((packed)) sctp_adaption_ind_param_t; | 288 | } __attribute__((packed)) sctp_adaptation_ind_param_t; |
289 | 289 | ||
290 | /* RFC 2960. Section 3.3.3 Initiation Acknowledgement (INIT ACK) (2): | 290 | /* RFC 2960. Section 3.3.3 Initiation Acknowledgement (INIT ACK) (2): |
291 | * The INIT ACK chunk is used to acknowledge the initiation of an SCTP | 291 | * The INIT ACK chunk is used to acknowledge the initiation of an SCTP |
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index c8bb68099eb9..176f6e36dbfa 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h | |||
@@ -289,7 +289,7 @@ extern struct spi_master *spi_busnum_to_master(u16 busnum); | |||
289 | * the data being transferred; that may reduce overhead, when the | 289 | * the data being transferred; that may reduce overhead, when the |
290 | * underlying driver uses dma. | 290 | * underlying driver uses dma. |
291 | * | 291 | * |
292 | * If the transmit buffer is null, undefined data will be shifted out | 292 | * If the transmit buffer is null, zeroes will be shifted out |
293 | * while filling rx_buf. If the receive buffer is null, the data | 293 | * while filling rx_buf. If the receive buffer is null, the data |
294 | * shifted in will be discarded. Only "len" bytes shift out (or in). | 294 | * shifted in will be discarded. Only "len" bytes shift out (or in). |
295 | * It's an error to try to shift out a partial word. (For example, by | 295 | * It's an error to try to shift out a partial word. (For example, by |
diff --git a/include/linux/unwind.h b/include/linux/unwind.h index 749928c161fb..7760860fa170 100644 --- a/include/linux/unwind.h +++ b/include/linux/unwind.h | |||
@@ -14,63 +14,6 @@ | |||
14 | 14 | ||
15 | struct module; | 15 | struct module; |
16 | 16 | ||
17 | #ifdef CONFIG_STACK_UNWIND | ||
18 | |||
19 | #include <asm/unwind.h> | ||
20 | |||
21 | #ifndef ARCH_UNWIND_SECTION_NAME | ||
22 | #define ARCH_UNWIND_SECTION_NAME ".eh_frame" | ||
23 | #endif | ||
24 | |||
25 | /* | ||
26 | * Initialize unwind support. | ||
27 | */ | ||
28 | extern void unwind_init(void); | ||
29 | extern void unwind_setup(void); | ||
30 | |||
31 | #ifdef CONFIG_MODULES | ||
32 | |||
33 | extern void *unwind_add_table(struct module *, | ||
34 | const void *table_start, | ||
35 | unsigned long table_size); | ||
36 | |||
37 | extern void unwind_remove_table(void *handle, int init_only); | ||
38 | |||
39 | #endif | ||
40 | |||
41 | extern int unwind_init_frame_info(struct unwind_frame_info *, | ||
42 | struct task_struct *, | ||
43 | /*const*/ struct pt_regs *); | ||
44 | |||
45 | /* | ||
46 | * Prepare to unwind a blocked task. | ||
47 | */ | ||
48 | extern int unwind_init_blocked(struct unwind_frame_info *, | ||
49 | struct task_struct *); | ||
50 | |||
51 | /* | ||
52 | * Prepare to unwind the currently running thread. | ||
53 | */ | ||
54 | extern int unwind_init_running(struct unwind_frame_info *, | ||
55 | asmlinkage int (*callback)(struct unwind_frame_info *, | ||
56 | void *arg), | ||
57 | void *arg); | ||
58 | |||
59 | /* | ||
60 | * Unwind to previous to frame. Returns 0 if successful, negative | ||
61 | * number in case of an error. | ||
62 | */ | ||
63 | extern int unwind(struct unwind_frame_info *); | ||
64 | |||
65 | /* | ||
66 | * Unwind until the return pointer is in user-land (or until an error | ||
67 | * occurs). Returns 0 if successful, negative number in case of | ||
68 | * error. | ||
69 | */ | ||
70 | extern int unwind_to_user(struct unwind_frame_info *); | ||
71 | |||
72 | #else | ||
73 | |||
74 | struct unwind_frame_info {}; | 17 | struct unwind_frame_info {}; |
75 | 18 | ||
76 | static inline void unwind_init(void) {} | 19 | static inline void unwind_init(void) {} |
@@ -85,12 +28,12 @@ static inline void *unwind_add_table(struct module *mod, | |||
85 | return NULL; | 28 | return NULL; |
86 | } | 29 | } |
87 | 30 | ||
88 | #endif | ||
89 | |||
90 | static inline void unwind_remove_table(void *handle, int init_only) | 31 | static inline void unwind_remove_table(void *handle, int init_only) |
91 | { | 32 | { |
92 | } | 33 | } |
93 | 34 | ||
35 | #endif | ||
36 | |||
94 | static inline int unwind_init_frame_info(struct unwind_frame_info *info, | 37 | static inline int unwind_init_frame_info(struct unwind_frame_info *info, |
95 | struct task_struct *tsk, | 38 | struct task_struct *tsk, |
96 | const struct pt_regs *regs) | 39 | const struct pt_regs *regs) |
@@ -122,6 +65,4 @@ static inline int unwind_to_user(struct unwind_frame_info *info) | |||
122 | return -ENOSYS; | 65 | return -ENOSYS; |
123 | } | 66 | } |
124 | 67 | ||
125 | #endif | ||
126 | |||
127 | #endif /* _LINUX_UNWIND_H */ | 68 | #endif /* _LINUX_UNWIND_H */ |
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h index c89df55f6e03..5e9803ed17fc 100644 --- a/include/linux/vmstat.h +++ b/include/linux/vmstat.h | |||
@@ -10,8 +10,9 @@ | |||
10 | /* | 10 | /* |
11 | * Light weight per cpu counter implementation. | 11 | * Light weight per cpu counter implementation. |
12 | * | 12 | * |
13 | * Counters should only be incremented and no critical kernel component | 13 | * Counters should only be incremented. You need to set EMBEDDED |
14 | * should rely on the counter values. | 14 | * to disable VM_EVENT_COUNTERS. Things like procps (vmstat, |
15 | * top, etc) use /proc/vmstat and depend on these counters. | ||
15 | * | 16 | * |
16 | * Counters are handled completely inline. On many platforms the code | 17 | * Counters are handled completely inline. On many platforms the code |
17 | * generated will simply be the increment of a global address. | 18 | * generated will simply be the increment of a global address. |
@@ -73,7 +74,13 @@ static inline void count_vm_events(enum vm_event_item item, long delta) | |||
73 | } | 74 | } |
74 | 75 | ||
75 | extern void all_vm_events(unsigned long *); | 76 | extern void all_vm_events(unsigned long *); |
77 | #ifdef CONFIG_HOTPLUG | ||
76 | extern void vm_events_fold_cpu(int cpu); | 78 | extern void vm_events_fold_cpu(int cpu); |
79 | #else | ||
80 | static inline void vm_events_fold_cpu(int cpu) | ||
81 | { | ||
82 | } | ||
83 | #endif | ||
77 | 84 | ||
78 | #else | 85 | #else |
79 | 86 | ||
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index edef8d50b26b..2a7b38d87018 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h | |||
@@ -8,16 +8,21 @@ | |||
8 | #include <linux/timer.h> | 8 | #include <linux/timer.h> |
9 | #include <linux/linkage.h> | 9 | #include <linux/linkage.h> |
10 | #include <linux/bitops.h> | 10 | #include <linux/bitops.h> |
11 | #include <asm/atomic.h> | ||
11 | 12 | ||
12 | struct workqueue_struct; | 13 | struct workqueue_struct; |
13 | 14 | ||
14 | struct work_struct; | 15 | struct work_struct; |
15 | typedef void (*work_func_t)(struct work_struct *work); | 16 | typedef void (*work_func_t)(struct work_struct *work); |
16 | 17 | ||
18 | /* | ||
19 | * The first word is the work queue pointer and the flags rolled into | ||
20 | * one | ||
21 | */ | ||
22 | #define work_data_bits(work) ((unsigned long *)(&(work)->data)) | ||
23 | |||
17 | struct work_struct { | 24 | struct work_struct { |
18 | /* the first word is the work queue pointer and the flags rolled into | 25 | atomic_long_t data; |
19 | * one */ | ||
20 | unsigned long management; | ||
21 | #define WORK_STRUCT_PENDING 0 /* T if work item pending execution */ | 26 | #define WORK_STRUCT_PENDING 0 /* T if work item pending execution */ |
22 | #define WORK_STRUCT_NOAUTOREL 1 /* F if work item automatically released on exec */ | 27 | #define WORK_STRUCT_NOAUTOREL 1 /* F if work item automatically released on exec */ |
23 | #define WORK_STRUCT_FLAG_MASK (3UL) | 28 | #define WORK_STRUCT_FLAG_MASK (3UL) |
@@ -26,6 +31,9 @@ struct work_struct { | |||
26 | work_func_t func; | 31 | work_func_t func; |
27 | }; | 32 | }; |
28 | 33 | ||
34 | #define WORK_DATA_INIT(autorelease) \ | ||
35 | ATOMIC_LONG_INIT((autorelease) << WORK_STRUCT_NOAUTOREL) | ||
36 | |||
29 | struct delayed_work { | 37 | struct delayed_work { |
30 | struct work_struct work; | 38 | struct work_struct work; |
31 | struct timer_list timer; | 39 | struct timer_list timer; |
@@ -36,13 +44,13 @@ struct execute_work { | |||
36 | }; | 44 | }; |
37 | 45 | ||
38 | #define __WORK_INITIALIZER(n, f) { \ | 46 | #define __WORK_INITIALIZER(n, f) { \ |
39 | .management = 0, \ | 47 | .data = WORK_DATA_INIT(0), \ |
40 | .entry = { &(n).entry, &(n).entry }, \ | 48 | .entry = { &(n).entry, &(n).entry }, \ |
41 | .func = (f), \ | 49 | .func = (f), \ |
42 | } | 50 | } |
43 | 51 | ||
44 | #define __WORK_INITIALIZER_NAR(n, f) { \ | 52 | #define __WORK_INITIALIZER_NAR(n, f) { \ |
45 | .management = (1 << WORK_STRUCT_NOAUTOREL), \ | 53 | .data = WORK_DATA_INIT(1), \ |
46 | .entry = { &(n).entry, &(n).entry }, \ | 54 | .entry = { &(n).entry, &(n).entry }, \ |
47 | .func = (f), \ | 55 | .func = (f), \ |
48 | } | 56 | } |
@@ -82,17 +90,21 @@ struct execute_work { | |||
82 | 90 | ||
83 | /* | 91 | /* |
84 | * initialize all of a work item in one go | 92 | * initialize all of a work item in one go |
93 | * | ||
94 | * NOTE! No point in using "atomic_long_set()": useing a direct | ||
95 | * assignment of the work data initializer allows the compiler | ||
96 | * to generate better code. | ||
85 | */ | 97 | */ |
86 | #define INIT_WORK(_work, _func) \ | 98 | #define INIT_WORK(_work, _func) \ |
87 | do { \ | 99 | do { \ |
88 | (_work)->management = 0; \ | 100 | (_work)->data = (atomic_long_t) WORK_DATA_INIT(0); \ |
89 | INIT_LIST_HEAD(&(_work)->entry); \ | 101 | INIT_LIST_HEAD(&(_work)->entry); \ |
90 | PREPARE_WORK((_work), (_func)); \ | 102 | PREPARE_WORK((_work), (_func)); \ |
91 | } while (0) | 103 | } while (0) |
92 | 104 | ||
93 | #define INIT_WORK_NAR(_work, _func) \ | 105 | #define INIT_WORK_NAR(_work, _func) \ |
94 | do { \ | 106 | do { \ |
95 | (_work)->management = (1 << WORK_STRUCT_NOAUTOREL); \ | 107 | (_work)->data = (atomic_long_t) WORK_DATA_INIT(1); \ |
96 | INIT_LIST_HEAD(&(_work)->entry); \ | 108 | INIT_LIST_HEAD(&(_work)->entry); \ |
97 | PREPARE_WORK((_work), (_func)); \ | 109 | PREPARE_WORK((_work), (_func)); \ |
98 | } while (0) | 110 | } while (0) |
@@ -114,15 +126,15 @@ struct execute_work { | |||
114 | * @work: The work item in question | 126 | * @work: The work item in question |
115 | */ | 127 | */ |
116 | #define work_pending(work) \ | 128 | #define work_pending(work) \ |
117 | test_bit(WORK_STRUCT_PENDING, &(work)->management) | 129 | test_bit(WORK_STRUCT_PENDING, work_data_bits(work)) |
118 | 130 | ||
119 | /** | 131 | /** |
120 | * delayed_work_pending - Find out whether a delayable work item is currently | 132 | * delayed_work_pending - Find out whether a delayable work item is currently |
121 | * pending | 133 | * pending |
122 | * @work: The work item in question | 134 | * @work: The work item in question |
123 | */ | 135 | */ |
124 | #define delayed_work_pending(work) \ | 136 | #define delayed_work_pending(w) \ |
125 | test_bit(WORK_STRUCT_PENDING, &(work)->work.management) | 137 | work_pending(&(w)->work) |
126 | 138 | ||
127 | /** | 139 | /** |
128 | * work_release - Release a work item under execution | 140 | * work_release - Release a work item under execution |
@@ -143,7 +155,7 @@ struct execute_work { | |||
143 | * This should also be used to release a delayed work item. | 155 | * This should also be used to release a delayed work item. |
144 | */ | 156 | */ |
145 | #define work_release(work) \ | 157 | #define work_release(work) \ |
146 | clear_bit(WORK_STRUCT_PENDING, &(work)->management) | 158 | clear_bit(WORK_STRUCT_PENDING, work_data_bits(work)) |
147 | 159 | ||
148 | 160 | ||
149 | extern struct workqueue_struct *__create_workqueue(const char *name, | 161 | extern struct workqueue_struct *__create_workqueue(const char *name, |
@@ -188,7 +200,7 @@ static inline int cancel_delayed_work(struct delayed_work *work) | |||
188 | 200 | ||
189 | ret = del_timer_sync(&work->timer); | 201 | ret = del_timer_sync(&work->timer); |
190 | if (ret) | 202 | if (ret) |
191 | clear_bit(WORK_STRUCT_PENDING, &work->work.management); | 203 | work_release(&work->work); |
192 | return ret; | 204 | return ret; |
193 | } | 205 | } |
194 | 206 | ||