diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2006-07-17 09:25:26 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2006-07-17 09:25:26 -0400 |
commit | 4bf311ddfbffe12d41ad1a3c311ab727db6f72cb (patch) | |
tree | 9d19a2774e83637d86dc876f3af22af1dacf0bec /include/linux | |
parent | 597d0cae0f99f62501e229bed50e8149604015bb (diff) | |
parent | 82d6897fefca6206bca7153805b4c5359ce97fc4 (diff) |
Merge branch 'master'
Diffstat (limited to 'include/linux')
47 files changed, 858 insertions, 65 deletions
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h index a7e8cef73d15..7520cc1ff9e2 100644 --- a/include/linux/blktrace_api.h +++ b/include/linux/blktrace_api.h | |||
@@ -11,7 +11,7 @@ enum blktrace_cat { | |||
11 | BLK_TC_READ = 1 << 0, /* reads */ | 11 | BLK_TC_READ = 1 << 0, /* reads */ |
12 | BLK_TC_WRITE = 1 << 1, /* writes */ | 12 | BLK_TC_WRITE = 1 << 1, /* writes */ |
13 | BLK_TC_BARRIER = 1 << 2, /* barrier */ | 13 | BLK_TC_BARRIER = 1 << 2, /* barrier */ |
14 | BLK_TC_SYNC = 1 << 3, /* barrier */ | 14 | BLK_TC_SYNC = 1 << 3, /* sync IO */ |
15 | BLK_TC_QUEUE = 1 << 4, /* queueing/merging */ | 15 | BLK_TC_QUEUE = 1 << 4, /* queueing/merging */ |
16 | BLK_TC_REQUEUE = 1 << 5, /* requeueing */ | 16 | BLK_TC_REQUEUE = 1 << 5, /* requeueing */ |
17 | BLK_TC_ISSUE = 1 << 6, /* issue */ | 17 | BLK_TC_ISSUE = 1 << 6, /* issue */ |
@@ -19,6 +19,7 @@ enum blktrace_cat { | |||
19 | BLK_TC_FS = 1 << 8, /* fs requests */ | 19 | BLK_TC_FS = 1 << 8, /* fs requests */ |
20 | BLK_TC_PC = 1 << 9, /* pc requests */ | 20 | BLK_TC_PC = 1 << 9, /* pc requests */ |
21 | BLK_TC_NOTIFY = 1 << 10, /* special message */ | 21 | BLK_TC_NOTIFY = 1 << 10, /* special message */ |
22 | BLK_TC_AHEAD = 1 << 11, /* readahead */ | ||
22 | 23 | ||
23 | BLK_TC_END = 1 << 15, /* only 16-bits, reminder */ | 24 | BLK_TC_END = 1 << 15, /* only 16-bits, reminder */ |
24 | }; | 25 | }; |
@@ -147,7 +148,7 @@ static inline void blk_add_trace_rq(struct request_queue *q, struct request *rq, | |||
147 | u32 what) | 148 | u32 what) |
148 | { | 149 | { |
149 | struct blk_trace *bt = q->blk_trace; | 150 | struct blk_trace *bt = q->blk_trace; |
150 | int rw = rq->flags & 0x07; | 151 | int rw = rq->flags & 0x03; |
151 | 152 | ||
152 | if (likely(!bt)) | 153 | if (likely(!bt)) |
153 | return; | 154 | return; |
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h index 22866fa2d960..1021f508d82c 100644 --- a/include/linux/bootmem.h +++ b/include/linux/bootmem.h | |||
@@ -91,7 +91,7 @@ static inline void *alloc_remap(int nid, unsigned long size) | |||
91 | } | 91 | } |
92 | #endif | 92 | #endif |
93 | 93 | ||
94 | extern unsigned long nr_kernel_pages; | 94 | extern unsigned long __meminitdata nr_kernel_pages; |
95 | extern unsigned long nr_all_pages; | 95 | extern unsigned long nr_all_pages; |
96 | 96 | ||
97 | extern void *__init alloc_large_system_hash(const char *tablename, | 97 | extern void *__init alloc_large_system_hash(const char *tablename, |
diff --git a/include/linux/completion.h b/include/linux/completion.h index 251c41e3ddd5..268c5a4a2bd4 100644 --- a/include/linux/completion.h +++ b/include/linux/completion.h | |||
@@ -18,6 +18,9 @@ struct completion { | |||
18 | #define COMPLETION_INITIALIZER(work) \ | 18 | #define COMPLETION_INITIALIZER(work) \ |
19 | { 0, __WAIT_QUEUE_HEAD_INITIALIZER((work).wait) } | 19 | { 0, __WAIT_QUEUE_HEAD_INITIALIZER((work).wait) } |
20 | 20 | ||
21 | #define COMPLETION_INITIALIZER_ONSTACK(work) \ | ||
22 | ({ init_completion(&work); work; }) | ||
23 | |||
21 | #define DECLARE_COMPLETION(work) \ | 24 | #define DECLARE_COMPLETION(work) \ |
22 | struct completion work = COMPLETION_INITIALIZER(work) | 25 | struct completion work = COMPLETION_INITIALIZER(work) |
23 | 26 | ||
@@ -28,7 +31,7 @@ struct completion { | |||
28 | */ | 31 | */ |
29 | #ifdef CONFIG_LOCKDEP | 32 | #ifdef CONFIG_LOCKDEP |
30 | # define DECLARE_COMPLETION_ONSTACK(work) \ | 33 | # define DECLARE_COMPLETION_ONSTACK(work) \ |
31 | struct completion work = ({ init_completion(&work); work; }) | 34 | struct completion work = COMPLETION_INITIALIZER_ONSTACK(work) |
32 | #else | 35 | #else |
33 | # define DECLARE_COMPLETION_ONSTACK(work) DECLARE_COMPLETION(work) | 36 | # define DECLARE_COMPLETION_ONSTACK(work) DECLARE_COMPLETION(work) |
34 | #endif | 37 | #endif |
diff --git a/include/linux/console_struct.h b/include/linux/console_struct.h index f8e5587a0f92..25423f79bf9f 100644 --- a/include/linux/console_struct.h +++ b/include/linux/console_struct.h | |||
@@ -9,6 +9,7 @@ | |||
9 | * to achieve effects such as fast scrolling by changing the origin. | 9 | * to achieve effects such as fast scrolling by changing the origin. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/wait.h> | ||
12 | #include <linux/vt.h> | 13 | #include <linux/vt.h> |
13 | 14 | ||
14 | struct vt_struct; | 15 | struct vt_struct; |
diff --git a/include/linux/delayacct.h b/include/linux/delayacct.h new file mode 100644 index 000000000000..7e8b6011b8f3 --- /dev/null +++ b/include/linux/delayacct.h | |||
@@ -0,0 +1,119 @@ | |||
1 | /* delayacct.h - per-task delay accounting | ||
2 | * | ||
3 | * Copyright (C) Shailabh Nagar, IBM Corp. 2006 | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See | ||
13 | * the GNU General Public License for more details. | ||
14 | * | ||
15 | */ | ||
16 | |||
17 | #ifndef _LINUX_DELAYACCT_H | ||
18 | #define _LINUX_DELAYACCT_H | ||
19 | |||
20 | #include <linux/sched.h> | ||
21 | #include <linux/taskstats_kern.h> | ||
22 | |||
23 | /* | ||
24 | * Per-task flags relevant to delay accounting | ||
25 | * maintained privately to avoid exhausting similar flags in sched.h:PF_* | ||
26 | * Used to set current->delays->flags | ||
27 | */ | ||
28 | #define DELAYACCT_PF_SWAPIN 0x00000001 /* I am doing a swapin */ | ||
29 | |||
30 | #ifdef CONFIG_TASK_DELAY_ACCT | ||
31 | |||
32 | extern int delayacct_on; /* Delay accounting turned on/off */ | ||
33 | extern kmem_cache_t *delayacct_cache; | ||
34 | extern void delayacct_init(void); | ||
35 | extern void __delayacct_tsk_init(struct task_struct *); | ||
36 | extern void __delayacct_tsk_exit(struct task_struct *); | ||
37 | extern void __delayacct_blkio_start(void); | ||
38 | extern void __delayacct_blkio_end(void); | ||
39 | extern int __delayacct_add_tsk(struct taskstats *, struct task_struct *); | ||
40 | extern __u64 __delayacct_blkio_ticks(struct task_struct *); | ||
41 | |||
42 | static inline void delayacct_set_flag(int flag) | ||
43 | { | ||
44 | if (current->delays) | ||
45 | current->delays->flags |= flag; | ||
46 | } | ||
47 | |||
48 | static inline void delayacct_clear_flag(int flag) | ||
49 | { | ||
50 | if (current->delays) | ||
51 | current->delays->flags &= ~flag; | ||
52 | } | ||
53 | |||
54 | static inline void delayacct_tsk_init(struct task_struct *tsk) | ||
55 | { | ||
56 | /* reinitialize in case parent's non-null pointer was dup'ed*/ | ||
57 | tsk->delays = NULL; | ||
58 | if (unlikely(delayacct_on)) | ||
59 | __delayacct_tsk_init(tsk); | ||
60 | } | ||
61 | |||
62 | static inline void delayacct_tsk_exit(struct task_struct *tsk) | ||
63 | { | ||
64 | if (tsk->delays) | ||
65 | __delayacct_tsk_exit(tsk); | ||
66 | } | ||
67 | |||
68 | static inline void delayacct_blkio_start(void) | ||
69 | { | ||
70 | if (current->delays) | ||
71 | __delayacct_blkio_start(); | ||
72 | } | ||
73 | |||
74 | static inline void delayacct_blkio_end(void) | ||
75 | { | ||
76 | if (current->delays) | ||
77 | __delayacct_blkio_end(); | ||
78 | } | ||
79 | |||
80 | static inline int delayacct_add_tsk(struct taskstats *d, | ||
81 | struct task_struct *tsk) | ||
82 | { | ||
83 | if (likely(!delayacct_on)) | ||
84 | return -EINVAL; | ||
85 | if (!tsk->delays) | ||
86 | return 0; | ||
87 | return __delayacct_add_tsk(d, tsk); | ||
88 | } | ||
89 | |||
90 | static inline __u64 delayacct_blkio_ticks(struct task_struct *tsk) | ||
91 | { | ||
92 | if (tsk->delays) | ||
93 | return __delayacct_blkio_ticks(tsk); | ||
94 | return 0; | ||
95 | } | ||
96 | |||
97 | #else | ||
98 | static inline void delayacct_set_flag(int flag) | ||
99 | {} | ||
100 | static inline void delayacct_clear_flag(int flag) | ||
101 | {} | ||
102 | static inline void delayacct_init(void) | ||
103 | {} | ||
104 | static inline void delayacct_tsk_init(struct task_struct *tsk) | ||
105 | {} | ||
106 | static inline void delayacct_tsk_exit(struct task_struct *tsk) | ||
107 | {} | ||
108 | static inline void delayacct_blkio_start(void) | ||
109 | {} | ||
110 | static inline void delayacct_blkio_end(void) | ||
111 | {} | ||
112 | static inline int delayacct_add_tsk(struct taskstats *d, | ||
113 | struct task_struct *tsk) | ||
114 | { return 0; } | ||
115 | static inline __u64 delayacct_blkio_ticks(struct task_struct *tsk) | ||
116 | { return 0; } | ||
117 | #endif /* CONFIG_TASK_DELAY_ACCT */ | ||
118 | |||
119 | #endif | ||
diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h index 0cf0bea010fe..9631dddae348 100644 --- a/include/linux/elfcore.h +++ b/include/linux/elfcore.h | |||
@@ -60,6 +60,16 @@ struct elf_prstatus | |||
60 | long pr_instr; /* Current instruction */ | 60 | long pr_instr; /* Current instruction */ |
61 | #endif | 61 | #endif |
62 | elf_gregset_t pr_reg; /* GP registers */ | 62 | elf_gregset_t pr_reg; /* GP registers */ |
63 | #ifdef CONFIG_BINFMT_ELF_FDPIC | ||
64 | /* When using FDPIC, the loadmap addresses need to be communicated | ||
65 | * to GDB in order for GDB to do the necessary relocations. The | ||
66 | * fields (below) used to communicate this information are placed | ||
67 | * immediately after ``pr_reg'', so that the loadmap addresses may | ||
68 | * be viewed as part of the register set if so desired. | ||
69 | */ | ||
70 | unsigned long pr_exec_fdpic_loadmap; | ||
71 | unsigned long pr_interp_fdpic_loadmap; | ||
72 | #endif | ||
63 | int pr_fpvalid; /* True if math co-processor being used. */ | 73 | int pr_fpvalid; /* True if math co-processor being used. */ |
64 | }; | 74 | }; |
65 | 75 | ||
diff --git a/include/linux/fb.h b/include/linux/fb.h index ffefeeeeca93..405f44e44e5d 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
@@ -377,7 +377,6 @@ struct fb_cursor { | |||
377 | 377 | ||
378 | #include <linux/fs.h> | 378 | #include <linux/fs.h> |
379 | #include <linux/init.h> | 379 | #include <linux/init.h> |
380 | #include <linux/tty.h> | ||
381 | #include <linux/device.h> | 380 | #include <linux/device.h> |
382 | #include <linux/workqueue.h> | 381 | #include <linux/workqueue.h> |
383 | #include <linux/notifier.h> | 382 | #include <linux/notifier.h> |
diff --git a/include/linux/fs.h b/include/linux/fs.h index b04eab2cc663..83abd9d7898f 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -27,6 +27,10 @@ | |||
27 | #define BLOCK_SIZE_BITS 10 | 27 | #define BLOCK_SIZE_BITS 10 |
28 | #define BLOCK_SIZE (1<<BLOCK_SIZE_BITS) | 28 | #define BLOCK_SIZE (1<<BLOCK_SIZE_BITS) |
29 | 29 | ||
30 | #define SEEK_SET 0 /* seek relative to beginning of file */ | ||
31 | #define SEEK_CUR 1 /* seek relative to current file position */ | ||
32 | #define SEEK_END 2 /* seek relative to end of file */ | ||
33 | |||
30 | /* And dynamically-tunable limits and defaults: */ | 34 | /* And dynamically-tunable limits and defaults: */ |
31 | struct files_stat_struct { | 35 | struct files_stat_struct { |
32 | int nr_files; /* read only */ | 36 | int nr_files; /* read only */ |
diff --git a/include/linux/hdlc.h b/include/linux/hdlc.h index 4513f9e40937..d5ebbb29aeae 100644 --- a/include/linux/hdlc.h +++ b/include/linux/hdlc.h | |||
@@ -224,8 +224,6 @@ static __inline__ void debug_frame(const struct sk_buff *skb) | |||
224 | int hdlc_open(struct net_device *dev); | 224 | int hdlc_open(struct net_device *dev); |
225 | /* Must be called by hardware driver when HDLC device is being closed */ | 225 | /* Must be called by hardware driver when HDLC device is being closed */ |
226 | void hdlc_close(struct net_device *dev); | 226 | void hdlc_close(struct net_device *dev); |
227 | /* Called by hardware driver when DCD line level changes */ | ||
228 | void hdlc_set_carrier(int on, struct net_device *dev); | ||
229 | 227 | ||
230 | /* May be used by hardware driver to gain control over HDLC device */ | 228 | /* May be used by hardware driver to gain control over HDLC device */ |
231 | static __inline__ void hdlc_proto_detach(hdlc_device *hdlc) | 229 | static __inline__ void hdlc_proto_detach(hdlc_device *hdlc) |
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index 21338bb3441d..9418519a55d1 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
@@ -115,6 +115,7 @@ | |||
115 | #define I2C_DRIVERID_BT866 85 /* Conexant bt866 video encoder */ | 115 | #define I2C_DRIVERID_BT866 85 /* Conexant bt866 video encoder */ |
116 | #define I2C_DRIVERID_KS0127 86 /* Samsung ks0127 video decoder */ | 116 | #define I2C_DRIVERID_KS0127 86 /* Samsung ks0127 video decoder */ |
117 | #define I2C_DRIVERID_TLV320AIC23B 87 /* TI TLV320AIC23B audio codec */ | 117 | #define I2C_DRIVERID_TLV320AIC23B 87 /* TI TLV320AIC23B audio codec */ |
118 | #define I2C_DRIVERID_ISL1208 88 /* Intersil ISL1208 RTC */ | ||
118 | 119 | ||
119 | #define I2C_DRIVERID_I2CDEV 900 | 120 | #define I2C_DRIVERID_I2CDEV 900 |
120 | #define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */ | 121 | #define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */ |
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 526ddc8eecfb..eb0628a7ecc6 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
@@ -193,6 +193,8 @@ struct i2c_algorithm { | |||
193 | to NULL. If an adapter algorithm can do SMBus access, set | 193 | to NULL. If an adapter algorithm can do SMBus access, set |
194 | smbus_xfer. If set to NULL, the SMBus protocol is simulated | 194 | smbus_xfer. If set to NULL, the SMBus protocol is simulated |
195 | using common I2C messages */ | 195 | using common I2C messages */ |
196 | /* master_xfer should return the number of messages successfully | ||
197 | processed, or a negative value on error */ | ||
196 | int (*master_xfer)(struct i2c_adapter *adap,struct i2c_msg *msgs, | 198 | int (*master_xfer)(struct i2c_adapter *adap,struct i2c_msg *msgs, |
197 | int num); | 199 | int num); |
198 | int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr, | 200 | int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr, |
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index eef0876d8307..383627ad328f 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
@@ -23,8 +23,8 @@ struct vlan_collection; | |||
23 | struct vlan_dev_info; | 23 | struct vlan_dev_info; |
24 | struct hlist_node; | 24 | struct hlist_node; |
25 | 25 | ||
26 | #include <linux/proc_fs.h> /* for proc_dir_entry */ | ||
27 | #include <linux/netdevice.h> | 26 | #include <linux/netdevice.h> |
27 | #include <linux/etherdevice.h> | ||
28 | 28 | ||
29 | #define VLAN_HLEN 4 /* The additional bytes (on top of the Ethernet header) | 29 | #define VLAN_HLEN 4 /* The additional bytes (on top of the Ethernet header) |
30 | * that VLAN requires. | 30 | * that VLAN requires. |
@@ -185,7 +185,8 @@ static inline int __vlan_hwaccel_rx(struct sk_buff *skb, | |||
185 | * This allows the VLAN to have a different MAC than the underlying | 185 | * This allows the VLAN to have a different MAC than the underlying |
186 | * device, and still route correctly. | 186 | * device, and still route correctly. |
187 | */ | 187 | */ |
188 | if (!memcmp(eth_hdr(skb)->h_dest, skb->dev->dev_addr, ETH_ALEN)) | 188 | if (!compare_ether_addr(eth_hdr(skb)->h_dest, |
189 | skb->dev->dev_addr)) | ||
189 | skb->pkt_type = PACKET_HOST; | 190 | skb->pkt_type = PACKET_HOST; |
190 | break; | 191 | break; |
191 | }; | 192 | }; |
diff --git a/include/linux/ioport.h b/include/linux/ioport.h index 5612dfeeae50..d42c83399071 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h | |||
@@ -97,7 +97,7 @@ extern struct resource iomem_resource; | |||
97 | extern int request_resource(struct resource *root, struct resource *new); | 97 | extern int request_resource(struct resource *root, struct resource *new); |
98 | extern struct resource * ____request_resource(struct resource *root, struct resource *new); | 98 | extern struct resource * ____request_resource(struct resource *root, struct resource *new); |
99 | extern int release_resource(struct resource *new); | 99 | extern int release_resource(struct resource *new); |
100 | extern __deprecated_for_modules int insert_resource(struct resource *parent, struct resource *new); | 100 | extern int insert_resource(struct resource *parent, struct resource *new); |
101 | extern int allocate_resource(struct resource *root, struct resource *new, | 101 | extern int allocate_resource(struct resource *root, struct resource *new, |
102 | resource_size_t size, resource_size_t min, | 102 | resource_size_t size, resource_size_t min, |
103 | resource_size_t max, resource_size_t align, | 103 | resource_size_t max, resource_size_t align, |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index c3958ea8d126..06c2768e1330 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -34,6 +34,7 @@ extern const char linux_banner[]; | |||
34 | #define ALIGN(x,a) (((x)+(a)-1)&~((a)-1)) | 34 | #define ALIGN(x,a) (((x)+(a)-1)&~((a)-1)) |
35 | #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) | 35 | #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) |
36 | #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) | 36 | #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) |
37 | #define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) | ||
37 | 38 | ||
38 | #define KERN_EMERG "<0>" /* system is unusable */ | 39 | #define KERN_EMERG "<0>" /* system is unusable */ |
39 | #define KERN_ALERT "<1>" /* action must be taken immediately */ | 40 | #define KERN_ALERT "<1>" /* action must be taken immediately */ |
diff --git a/include/linux/kthread.h b/include/linux/kthread.h index 7cce5dfa092f..1c65e7a9f186 100644 --- a/include/linux/kthread.h +++ b/include/linux/kthread.h | |||
@@ -28,7 +28,6 @@ struct task_struct *kthread_create(int (*threadfn)(void *data), | |||
28 | 28 | ||
29 | void kthread_bind(struct task_struct *k, unsigned int cpu); | 29 | void kthread_bind(struct task_struct *k, unsigned int cpu); |
30 | int kthread_stop(struct task_struct *k); | 30 | int kthread_stop(struct task_struct *k); |
31 | int kthread_stop_sem(struct task_struct *k, struct semaphore *s); | ||
32 | int kthread_should_stop(void); | 31 | int kthread_should_stop(void); |
33 | 32 | ||
34 | #endif /* _LINUX_KTHREAD_H */ | 33 | #endif /* _LINUX_KTHREAD_H */ |
diff --git a/include/linux/list.h b/include/linux/list.h index 6b74adf5297f..65a5b5ceda49 100644 --- a/include/linux/list.h +++ b/include/linux/list.h | |||
@@ -265,6 +265,17 @@ static inline void list_move_tail(struct list_head *list, | |||
265 | } | 265 | } |
266 | 266 | ||
267 | /** | 267 | /** |
268 | * list_is_last - tests whether @list is the last entry in list @head | ||
269 | * @list: the entry to test | ||
270 | * @head: the head of the list | ||
271 | */ | ||
272 | static inline int list_is_last(const struct list_head *list, | ||
273 | const struct list_head *head) | ||
274 | { | ||
275 | return list->next == head; | ||
276 | } | ||
277 | |||
278 | /** | ||
268 | * list_empty - tests whether a list is empty | 279 | * list_empty - tests whether a list is empty |
269 | * @head: the list to test. | 280 | * @head: the list to test. |
270 | */ | 281 | */ |
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index 316e0fb8d7b1..c040a8c969aa 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
@@ -120,7 +120,7 @@ struct lock_class { | |||
120 | */ | 120 | */ |
121 | struct lockdep_map { | 121 | struct lockdep_map { |
122 | struct lock_class_key *key; | 122 | struct lock_class_key *key; |
123 | struct lock_class *class[MAX_LOCKDEP_SUBCLASSES]; | 123 | struct lock_class *class_cache; |
124 | const char *name; | 124 | const char *name; |
125 | }; | 125 | }; |
126 | 126 | ||
diff --git a/include/linux/mc146818rtc.h b/include/linux/mc146818rtc.h index bbc93ae217e1..432b2fa24929 100644 --- a/include/linux/mc146818rtc.h +++ b/include/linux/mc146818rtc.h | |||
@@ -89,4 +89,11 @@ extern spinlock_t rtc_lock; /* serialize CMOS RAM access */ | |||
89 | # define RTC_VRT 0x80 /* valid RAM and time */ | 89 | # define RTC_VRT 0x80 /* valid RAM and time */ |
90 | /**********************************************************************/ | 90 | /**********************************************************************/ |
91 | 91 | ||
92 | #ifndef ARCH_RTC_LOCATION /* Override by <asm/mc146818rtc.h>? */ | ||
93 | |||
94 | #define RTC_IO_EXTENT 0x8 | ||
95 | #define RTC_IOMAPPED 1 /* Default to I/O mapping. */ | ||
96 | |||
97 | #endif /* ARCH_RTC_LOCATION */ | ||
98 | |||
92 | #endif /* _MC146818RTC_H */ | 99 | #endif /* _MC146818RTC_H */ |
diff --git a/include/linux/module.h b/include/linux/module.h index d06c74fb8c26..0dfb794c52d3 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
@@ -362,10 +362,8 @@ int is_module_address(unsigned long addr); | |||
362 | 362 | ||
363 | /* Returns module and fills in value, defined and namebuf, or NULL if | 363 | /* Returns module and fills in value, defined and namebuf, or NULL if |
364 | symnum out of range. */ | 364 | symnum out of range. */ |
365 | struct module *module_get_kallsym(unsigned int symnum, | 365 | struct module *module_get_kallsym(unsigned int symnum, unsigned long *value, |
366 | unsigned long *value, | 366 | char *type, char *name, size_t namelen); |
367 | char *type, | ||
368 | char namebuf[128]); | ||
369 | 367 | ||
370 | /* Look for this name: can be of form module:name. */ | 368 | /* Look for this name: can be of form module:name. */ |
371 | unsigned long module_kallsyms_lookup_name(const char *name); | 369 | unsigned long module_kallsyms_lookup_name(const char *name); |
@@ -535,8 +533,8 @@ static inline const char *module_address_lookup(unsigned long addr, | |||
535 | 533 | ||
536 | static inline struct module *module_get_kallsym(unsigned int symnum, | 534 | static inline struct module *module_get_kallsym(unsigned int symnum, |
537 | unsigned long *value, | 535 | unsigned long *value, |
538 | char *type, | 536 | char *type, char *name, |
539 | char namebuf[128]) | 537 | size_t namelen) |
540 | { | 538 | { |
541 | return NULL; | 539 | return NULL; |
542 | } | 540 | } |
diff --git a/include/linux/namei.h b/include/linux/namei.h index 58cb3d3d44b4..45511a5918d3 100644 --- a/include/linux/namei.h +++ b/include/linux/namei.h | |||
@@ -11,7 +11,7 @@ struct open_intent { | |||
11 | struct file *file; | 11 | struct file *file; |
12 | }; | 12 | }; |
13 | 13 | ||
14 | enum { MAX_NESTED_LINKS = 5 }; | 14 | enum { MAX_NESTED_LINKS = 8 }; |
15 | 15 | ||
16 | struct nameidata { | 16 | struct nameidata { |
17 | struct dentry *dentry; | 17 | struct dentry *dentry; |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 85f99f60deea..76cc099c8580 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -549,6 +549,7 @@ struct packet_type { | |||
549 | struct net_device *); | 549 | struct net_device *); |
550 | struct sk_buff *(*gso_segment)(struct sk_buff *skb, | 550 | struct sk_buff *(*gso_segment)(struct sk_buff *skb, |
551 | int features); | 551 | int features); |
552 | int (*gso_send_check)(struct sk_buff *skb); | ||
552 | void *af_packet_priv; | 553 | void *af_packet_priv; |
553 | struct list_head list; | 554 | struct list_head list; |
554 | }; | 555 | }; |
@@ -1001,13 +1002,14 @@ static inline int net_gso_ok(int features, int gso_type) | |||
1001 | 1002 | ||
1002 | static inline int skb_gso_ok(struct sk_buff *skb, int features) | 1003 | static inline int skb_gso_ok(struct sk_buff *skb, int features) |
1003 | { | 1004 | { |
1004 | return net_gso_ok(features, skb_shinfo(skb)->gso_size ? | 1005 | return net_gso_ok(features, skb_shinfo(skb)->gso_type); |
1005 | skb_shinfo(skb)->gso_type : 0); | ||
1006 | } | 1006 | } |
1007 | 1007 | ||
1008 | static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) | 1008 | static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) |
1009 | { | 1009 | { |
1010 | return !skb_gso_ok(skb, dev->features); | 1010 | return skb_is_gso(skb) && |
1011 | (!skb_gso_ok(skb, dev->features) || | ||
1012 | unlikely(skb->ip_summed != CHECKSUM_HW)); | ||
1011 | } | 1013 | } |
1012 | 1014 | ||
1013 | #endif /* __KERNEL__ */ | 1015 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h index 5f681d534295..db05182ca0e8 100644 --- a/include/linux/nfs4.h +++ b/include/linux/nfs4.h | |||
@@ -157,6 +157,12 @@ enum nfs_opnum4 { | |||
157 | OP_ILLEGAL = 10044, | 157 | OP_ILLEGAL = 10044, |
158 | }; | 158 | }; |
159 | 159 | ||
160 | /*Defining first and last NFS4 operations implemented. | ||
161 | Needs to be updated if more operations are defined in future.*/ | ||
162 | |||
163 | #define FIRST_NFS4_OP OP_ACCESS | ||
164 | #define LAST_NFS4_OP OP_RELEASE_LOCKOWNER | ||
165 | |||
160 | enum nfsstat4 { | 166 | enum nfsstat4 { |
161 | NFS4_OK = 0, | 167 | NFS4_OK = 0, |
162 | NFS4ERR_PERM = 1, | 168 | NFS4ERR_PERM = 1, |
diff --git a/include/linux/nfsd/stats.h b/include/linux/nfsd/stats.h index b6f1e0cda4f2..28a82fdd922f 100644 --- a/include/linux/nfsd/stats.h +++ b/include/linux/nfsd/stats.h | |||
@@ -9,6 +9,8 @@ | |||
9 | #ifndef LINUX_NFSD_STATS_H | 9 | #ifndef LINUX_NFSD_STATS_H |
10 | #define LINUX_NFSD_STATS_H | 10 | #define LINUX_NFSD_STATS_H |
11 | 11 | ||
12 | #include <linux/nfs4.h> | ||
13 | |||
12 | struct nfsd_stats { | 14 | struct nfsd_stats { |
13 | unsigned int rchits; /* repcache hits */ | 15 | unsigned int rchits; /* repcache hits */ |
14 | unsigned int rcmisses; /* repcache hits */ | 16 | unsigned int rcmisses; /* repcache hits */ |
@@ -27,6 +29,10 @@ struct nfsd_stats { | |||
27 | unsigned int ra_size; /* size of ra cache */ | 29 | unsigned int ra_size; /* size of ra cache */ |
28 | unsigned int ra_depth[11]; /* number of times ra entry was found that deep | 30 | unsigned int ra_depth[11]; /* number of times ra entry was found that deep |
29 | * in the cache (10percentiles). [10] = not found */ | 31 | * in the cache (10percentiles). [10] = not found */ |
32 | #ifdef CONFIG_NFSD_V4 | ||
33 | unsigned int nfs4_opcount[LAST_NFS4_OP + 1]; /* count of individual nfsv4 operations */ | ||
34 | #endif | ||
35 | |||
30 | }; | 36 | }; |
31 | 37 | ||
32 | /* thread usage wraps very million seconds (approx one fortnight) */ | 38 | /* thread usage wraps very million seconds (approx one fortnight) */ |
diff --git a/include/linux/nsc_gpio.h b/include/linux/nsc_gpio.h index 135742cfada5..7da0cf3702ee 100644 --- a/include/linux/nsc_gpio.h +++ b/include/linux/nsc_gpio.h | |||
@@ -25,8 +25,6 @@ struct nsc_gpio_ops { | |||
25 | void (*gpio_dump) (struct nsc_gpio_ops *amp, unsigned iminor); | 25 | void (*gpio_dump) (struct nsc_gpio_ops *amp, unsigned iminor); |
26 | int (*gpio_get) (unsigned iminor); | 26 | int (*gpio_get) (unsigned iminor); |
27 | void (*gpio_set) (unsigned iminor, int state); | 27 | void (*gpio_set) (unsigned iminor, int state); |
28 | void (*gpio_set_high)(unsigned iminor); | ||
29 | void (*gpio_set_low) (unsigned iminor); | ||
30 | void (*gpio_change) (unsigned iminor); | 28 | void (*gpio_change) (unsigned iminor); |
31 | int (*gpio_current) (unsigned iminor); | 29 | int (*gpio_current) (unsigned iminor); |
32 | struct device* dev; /* for dev_dbg() support, set in init */ | 30 | struct device* dev; /* for dev_dbg() support, set in init */ |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 983fca251b25..8565b81d7fbc 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -161,6 +161,7 @@ struct pci_dev { | |||
161 | unsigned int is_enabled:1; /* pci_enable_device has been called */ | 161 | unsigned int is_enabled:1; /* pci_enable_device has been called */ |
162 | unsigned int is_busmaster:1; /* device is busmaster */ | 162 | unsigned int is_busmaster:1; /* device is busmaster */ |
163 | unsigned int no_msi:1; /* device may not use msi */ | 163 | unsigned int no_msi:1; /* device may not use msi */ |
164 | unsigned int no_d1d2:1; /* only allow d0 or d3 */ | ||
164 | unsigned int block_ucfg_access:1; /* userspace config space access is blocked */ | 165 | unsigned int block_ucfg_access:1; /* userspace config space access is blocked */ |
165 | unsigned int broken_parity_status:1; /* Device generates false positive parity */ | 166 | unsigned int broken_parity_status:1; /* Device generates false positive parity */ |
166 | unsigned int msi_enabled:1; | 167 | unsigned int msi_enabled:1; |
diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h index 6bce4a240364..96930cb5927c 100644 --- a/include/linux/pci_regs.h +++ b/include/linux/pci_regs.h | |||
@@ -422,7 +422,23 @@ | |||
422 | #define PCI_ERR_CAP_ECRC_CHKE 0x00000100 /* ECRC Check Enable */ | 422 | #define PCI_ERR_CAP_ECRC_CHKE 0x00000100 /* ECRC Check Enable */ |
423 | #define PCI_ERR_HEADER_LOG 28 /* Header Log Register (16 bytes) */ | 423 | #define PCI_ERR_HEADER_LOG 28 /* Header Log Register (16 bytes) */ |
424 | #define PCI_ERR_ROOT_COMMAND 44 /* Root Error Command */ | 424 | #define PCI_ERR_ROOT_COMMAND 44 /* Root Error Command */ |
425 | /* Correctable Err Reporting Enable */ | ||
426 | #define PCI_ERR_ROOT_CMD_COR_EN 0x00000001 | ||
427 | /* Non-fatal Err Reporting Enable */ | ||
428 | #define PCI_ERR_ROOT_CMD_NONFATAL_EN 0x00000002 | ||
429 | /* Fatal Err Reporting Enable */ | ||
430 | #define PCI_ERR_ROOT_CMD_FATAL_EN 0x00000004 | ||
425 | #define PCI_ERR_ROOT_STATUS 48 | 431 | #define PCI_ERR_ROOT_STATUS 48 |
432 | #define PCI_ERR_ROOT_COR_RCV 0x00000001 /* ERR_COR Received */ | ||
433 | /* Multi ERR_COR Received */ | ||
434 | #define PCI_ERR_ROOT_MULTI_COR_RCV 0x00000002 | ||
435 | /* ERR_FATAL/NONFATAL Recevied */ | ||
436 | #define PCI_ERR_ROOT_UNCOR_RCV 0x00000004 | ||
437 | /* Multi ERR_FATAL/NONFATAL Recevied */ | ||
438 | #define PCI_ERR_ROOT_MULTI_UNCOR_RCV 0x00000008 | ||
439 | #define PCI_ERR_ROOT_FIRST_FATAL 0x00000010 /* First Fatal */ | ||
440 | #define PCI_ERR_ROOT_NONFATAL_RCV 0x00000020 /* Non-Fatal Received */ | ||
441 | #define PCI_ERR_ROOT_FATAL_RCV 0x00000040 /* Fatal Received */ | ||
426 | #define PCI_ERR_ROOT_COR_SRC 52 | 442 | #define PCI_ERR_ROOT_COR_SRC 52 |
427 | #define PCI_ERR_ROOT_SRC 54 | 443 | #define PCI_ERR_ROOT_SRC 54 |
428 | 444 | ||
diff --git a/include/linux/pm_legacy.h b/include/linux/pm_legacy.h index 78027c533b94..514729a44688 100644 --- a/include/linux/pm_legacy.h +++ b/include/linux/pm_legacy.h | |||
@@ -15,11 +15,6 @@ struct pm_dev __deprecated * | |||
15 | pm_register(pm_dev_t type, unsigned long id, pm_callback callback); | 15 | pm_register(pm_dev_t type, unsigned long id, pm_callback callback); |
16 | 16 | ||
17 | /* | 17 | /* |
18 | * Unregister all devices with matching callback | ||
19 | */ | ||
20 | void __deprecated pm_unregister_all(pm_callback callback); | ||
21 | |||
22 | /* | ||
23 | * Send a request to all devices | 18 | * Send a request to all devices |
24 | */ | 19 | */ |
25 | int __deprecated pm_send_all(pm_request_t rqst, void *data); | 20 | int __deprecated pm_send_all(pm_request_t rqst, void *data); |
@@ -35,8 +30,6 @@ static inline struct pm_dev *pm_register(pm_dev_t type, | |||
35 | return NULL; | 30 | return NULL; |
36 | } | 31 | } |
37 | 32 | ||
38 | static inline void pm_unregister_all(pm_callback callback) {} | ||
39 | |||
40 | static inline int pm_send_all(pm_request_t rqst, void *data) | 33 | static inline int pm_send_all(pm_request_t rqst, void *data) |
41 | { | 34 | { |
42 | return 0; | 35 | return 0; |
diff --git a/include/linux/raid/md_k.h b/include/linux/raid/md_k.h index c1e0ac55bab5..d28890295852 100644 --- a/include/linux/raid/md_k.h +++ b/include/linux/raid/md_k.h | |||
@@ -148,9 +148,10 @@ struct mddev_s | |||
148 | 148 | ||
149 | struct mdk_thread_s *thread; /* management thread */ | 149 | struct mdk_thread_s *thread; /* management thread */ |
150 | struct mdk_thread_s *sync_thread; /* doing resync or reconstruct */ | 150 | struct mdk_thread_s *sync_thread; /* doing resync or reconstruct */ |
151 | sector_t curr_resync; /* blocks scheduled */ | 151 | sector_t curr_resync; /* last block scheduled */ |
152 | unsigned long resync_mark; /* a recent timestamp */ | 152 | unsigned long resync_mark; /* a recent timestamp */ |
153 | sector_t resync_mark_cnt;/* blocks written at resync_mark */ | 153 | sector_t resync_mark_cnt;/* blocks written at resync_mark */ |
154 | sector_t curr_mark_cnt; /* blocks scheduled now */ | ||
154 | 155 | ||
155 | sector_t resync_max_sectors; /* may be set by personality */ | 156 | sector_t resync_max_sectors; /* may be set by personality */ |
156 | 157 | ||
diff --git a/include/linux/root_dev.h b/include/linux/root_dev.h index ea4bc9d13735..ed241aad7c17 100644 --- a/include/linux/root_dev.h +++ b/include/linux/root_dev.h | |||
@@ -2,6 +2,8 @@ | |||
2 | #define _ROOT_DEV_H_ | 2 | #define _ROOT_DEV_H_ |
3 | 3 | ||
4 | #include <linux/major.h> | 4 | #include <linux/major.h> |
5 | #include <linux/types.h> | ||
6 | #include <linux/kdev_t.h> | ||
5 | 7 | ||
6 | enum { | 8 | enum { |
7 | Root_NFS = MKDEV(UNNAMED_MAJOR, 255), | 9 | Root_NFS = MKDEV(UNNAMED_MAJOR, 255), |
diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h index 658afb37c3f5..7b524b4109a0 100644 --- a/include/linux/rwsem.h +++ b/include/linux/rwsem.h | |||
@@ -61,12 +61,25 @@ extern void downgrade_write(struct rw_semaphore *sem); | |||
61 | 61 | ||
62 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | 62 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
63 | /* | 63 | /* |
64 | * nested locking: | 64 | * nested locking. NOTE: rwsems are not allowed to recurse |
65 | * (which occurs if the same task tries to acquire the same | ||
66 | * lock instance multiple times), but multiple locks of the | ||
67 | * same lock class might be taken, if the order of the locks | ||
68 | * is always the same. This ordering rule can be expressed | ||
69 | * to lockdep via the _nested() APIs, but enumerating the | ||
70 | * subclasses that are used. (If the nesting relationship is | ||
71 | * static then another method for expressing nested locking is | ||
72 | * the explicit definition of lock class keys and the use of | ||
73 | * lockdep_set_class() at lock initialization time. | ||
74 | * See Documentation/lockdep-design.txt for more details.) | ||
65 | */ | 75 | */ |
66 | extern void down_read_nested(struct rw_semaphore *sem, int subclass); | 76 | extern void down_read_nested(struct rw_semaphore *sem, int subclass); |
67 | extern void down_write_nested(struct rw_semaphore *sem, int subclass); | 77 | extern void down_write_nested(struct rw_semaphore *sem, int subclass); |
68 | /* | 78 | /* |
69 | * Take/release a lock when not the owner will release it: | 79 | * Take/release a lock when not the owner will release it. |
80 | * | ||
81 | * [ This API should be avoided as much as possible - the | ||
82 | * proper abstraction for this case is completions. ] | ||
70 | */ | 83 | */ |
71 | extern void down_read_non_owner(struct rw_semaphore *sem); | 84 | extern void down_read_non_owner(struct rw_semaphore *sem); |
72 | extern void up_read_non_owner(struct rw_semaphore *sem); | 85 | extern void up_read_non_owner(struct rw_semaphore *sem); |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 1c876e27ff93..6afa72e080cb 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -463,6 +463,10 @@ struct signal_struct { | |||
463 | #ifdef CONFIG_BSD_PROCESS_ACCT | 463 | #ifdef CONFIG_BSD_PROCESS_ACCT |
464 | struct pacct_struct pacct; /* per-process accounting information */ | 464 | struct pacct_struct pacct; /* per-process accounting information */ |
465 | #endif | 465 | #endif |
466 | #ifdef CONFIG_TASKSTATS | ||
467 | spinlock_t stats_lock; | ||
468 | struct taskstats *stats; | ||
469 | #endif | ||
466 | }; | 470 | }; |
467 | 471 | ||
468 | /* Context switch must be unlocked if interrupts are to be enabled */ | 472 | /* Context switch must be unlocked if interrupts are to be enabled */ |
@@ -537,7 +541,7 @@ extern struct user_struct root_user; | |||
537 | struct backing_dev_info; | 541 | struct backing_dev_info; |
538 | struct reclaim_state; | 542 | struct reclaim_state; |
539 | 543 | ||
540 | #ifdef CONFIG_SCHEDSTATS | 544 | #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) |
541 | struct sched_info { | 545 | struct sched_info { |
542 | /* cumulative counters */ | 546 | /* cumulative counters */ |
543 | unsigned long cpu_time, /* time spent on the cpu */ | 547 | unsigned long cpu_time, /* time spent on the cpu */ |
@@ -548,9 +552,53 @@ struct sched_info { | |||
548 | unsigned long last_arrival, /* when we last ran on a cpu */ | 552 | unsigned long last_arrival, /* when we last ran on a cpu */ |
549 | last_queued; /* when we were last queued to run */ | 553 | last_queued; /* when we were last queued to run */ |
550 | }; | 554 | }; |
555 | #endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */ | ||
551 | 556 | ||
557 | #ifdef CONFIG_SCHEDSTATS | ||
552 | extern struct file_operations proc_schedstat_operations; | 558 | extern struct file_operations proc_schedstat_operations; |
559 | #endif /* CONFIG_SCHEDSTATS */ | ||
560 | |||
561 | #ifdef CONFIG_TASK_DELAY_ACCT | ||
562 | struct task_delay_info { | ||
563 | spinlock_t lock; | ||
564 | unsigned int flags; /* Private per-task flags */ | ||
565 | |||
566 | /* For each stat XXX, add following, aligned appropriately | ||
567 | * | ||
568 | * struct timespec XXX_start, XXX_end; | ||
569 | * u64 XXX_delay; | ||
570 | * u32 XXX_count; | ||
571 | * | ||
572 | * Atomicity of updates to XXX_delay, XXX_count protected by | ||
573 | * single lock above (split into XXX_lock if contention is an issue). | ||
574 | */ | ||
575 | |||
576 | /* | ||
577 | * XXX_count is incremented on every XXX operation, the delay | ||
578 | * associated with the operation is added to XXX_delay. | ||
579 | * XXX_delay contains the accumulated delay time in nanoseconds. | ||
580 | */ | ||
581 | struct timespec blkio_start, blkio_end; /* Shared by blkio, swapin */ | ||
582 | u64 blkio_delay; /* wait for sync block io completion */ | ||
583 | u64 swapin_delay; /* wait for swapin block io completion */ | ||
584 | u32 blkio_count; /* total count of the number of sync block */ | ||
585 | /* io operations performed */ | ||
586 | u32 swapin_count; /* total count of the number of swapin block */ | ||
587 | /* io operations performed */ | ||
588 | }; | ||
589 | #endif /* CONFIG_TASK_DELAY_ACCT */ | ||
590 | |||
591 | static inline int sched_info_on(void) | ||
592 | { | ||
593 | #ifdef CONFIG_SCHEDSTATS | ||
594 | return 1; | ||
595 | #elif defined(CONFIG_TASK_DELAY_ACCT) | ||
596 | extern int delayacct_on; | ||
597 | return delayacct_on; | ||
598 | #else | ||
599 | return 0; | ||
553 | #endif | 600 | #endif |
601 | } | ||
554 | 602 | ||
555 | enum idle_type | 603 | enum idle_type |
556 | { | 604 | { |
@@ -747,7 +795,7 @@ struct task_struct { | |||
747 | cpumask_t cpus_allowed; | 795 | cpumask_t cpus_allowed; |
748 | unsigned int time_slice, first_time_slice; | 796 | unsigned int time_slice, first_time_slice; |
749 | 797 | ||
750 | #ifdef CONFIG_SCHEDSTATS | 798 | #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) |
751 | struct sched_info sched_info; | 799 | struct sched_info sched_info; |
752 | #endif | 800 | #endif |
753 | 801 | ||
@@ -945,6 +993,10 @@ struct task_struct { | |||
945 | * cache last used pipe for splice | 993 | * cache last used pipe for splice |
946 | */ | 994 | */ |
947 | struct pipe_inode_info *splice_pipe; | 995 | struct pipe_inode_info *splice_pipe; |
996 | #ifdef CONFIG_TASK_DELAY_ACCT | ||
997 | spinlock_t delays_lock; | ||
998 | struct task_delay_info *delays; | ||
999 | #endif | ||
948 | }; | 1000 | }; |
949 | 1001 | ||
950 | static inline pid_t process_group(struct task_struct *tsk) | 1002 | static inline pid_t process_group(struct task_struct *tsk) |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 058cba70818a..86501a3de2ac 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
@@ -227,6 +227,7 @@ struct uart_port { | |||
227 | #define UPIO_MEM (2) | 227 | #define UPIO_MEM (2) |
228 | #define UPIO_MEM32 (3) | 228 | #define UPIO_MEM32 (3) |
229 | #define UPIO_AU (4) /* Au1x00 type IO */ | 229 | #define UPIO_AU (4) /* Au1x00 type IO */ |
230 | #define UPIO_TSI (5) /* Tsi108/109 type IO */ | ||
230 | 231 | ||
231 | unsigned int read_status_mask; /* driver specific */ | 232 | unsigned int read_status_mask; /* driver specific */ |
232 | unsigned int ignore_status_mask; /* driver specific */ | 233 | unsigned int ignore_status_mask; /* driver specific */ |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 3597b4f14389..0bf31b83578c 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -1455,5 +1455,10 @@ static inline void skb_init_secmark(struct sk_buff *skb) | |||
1455 | { } | 1455 | { } |
1456 | #endif | 1456 | #endif |
1457 | 1457 | ||
1458 | static inline int skb_is_gso(const struct sk_buff *skb) | ||
1459 | { | ||
1460 | return skb_shinfo(skb)->gso_size; | ||
1461 | } | ||
1462 | |||
1458 | #endif /* __KERNEL__ */ | 1463 | #endif /* __KERNEL__ */ |
1459 | #endif /* _LINUX_SKBUFF_H */ | 1464 | #endif /* _LINUX_SKBUFF_H */ |
diff --git a/include/linux/taskstats.h b/include/linux/taskstats.h new file mode 100644 index 000000000000..f1cb6cddd19d --- /dev/null +++ b/include/linux/taskstats.h | |||
@@ -0,0 +1,137 @@ | |||
1 | /* taskstats.h - exporting per-task statistics | ||
2 | * | ||
3 | * Copyright (C) Shailabh Nagar, IBM Corp. 2006 | ||
4 | * (C) Balbir Singh, IBM Corp. 2006 | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of version 2.1 of the GNU Lesser General Public License | ||
8 | * as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it would be useful, but | ||
11 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
13 | */ | ||
14 | |||
15 | #ifndef _LINUX_TASKSTATS_H | ||
16 | #define _LINUX_TASKSTATS_H | ||
17 | |||
18 | /* Format for per-task data returned to userland when | ||
19 | * - a task exits | ||
20 | * - listener requests stats for a task | ||
21 | * | ||
22 | * The struct is versioned. Newer versions should only add fields to | ||
23 | * the bottom of the struct to maintain backward compatibility. | ||
24 | * | ||
25 | * | ||
26 | * To add new fields | ||
27 | * a) bump up TASKSTATS_VERSION | ||
28 | * b) add comment indicating new version number at end of struct | ||
29 | * c) add new fields after version comment; maintain 64-bit alignment | ||
30 | */ | ||
31 | |||
32 | #define TASKSTATS_VERSION 1 | ||
33 | |||
34 | struct taskstats { | ||
35 | |||
36 | /* Version 1 */ | ||
37 | __u16 version; | ||
38 | __u16 padding[3]; /* Userspace should not interpret the padding | ||
39 | * field which can be replaced by useful | ||
40 | * fields if struct taskstats is extended. | ||
41 | */ | ||
42 | |||
43 | /* Delay accounting fields start | ||
44 | * | ||
45 | * All values, until comment "Delay accounting fields end" are | ||
46 | * available only if delay accounting is enabled, even though the last | ||
47 | * few fields are not delays | ||
48 | * | ||
49 | * xxx_count is the number of delay values recorded | ||
50 | * xxx_delay_total is the corresponding cumulative delay in nanoseconds | ||
51 | * | ||
52 | * xxx_delay_total wraps around to zero on overflow | ||
53 | * xxx_count incremented regardless of overflow | ||
54 | */ | ||
55 | |||
56 | /* Delay waiting for cpu, while runnable | ||
57 | * count, delay_total NOT updated atomically | ||
58 | */ | ||
59 | __u64 cpu_count; | ||
60 | __u64 cpu_delay_total; | ||
61 | |||
62 | /* Following four fields atomically updated using task->delays->lock */ | ||
63 | |||
64 | /* Delay waiting for synchronous block I/O to complete | ||
65 | * does not account for delays in I/O submission | ||
66 | */ | ||
67 | __u64 blkio_count; | ||
68 | __u64 blkio_delay_total; | ||
69 | |||
70 | /* Delay waiting for page fault I/O (swap in only) */ | ||
71 | __u64 swapin_count; | ||
72 | __u64 swapin_delay_total; | ||
73 | |||
74 | /* cpu "wall-clock" running time | ||
75 | * On some architectures, value will adjust for cpu time stolen | ||
76 | * from the kernel in involuntary waits due to virtualization. | ||
77 | * Value is cumulative, in nanoseconds, without a corresponding count | ||
78 | * and wraps around to zero silently on overflow | ||
79 | */ | ||
80 | __u64 cpu_run_real_total; | ||
81 | |||
82 | /* cpu "virtual" running time | ||
83 | * Uses time intervals seen by the kernel i.e. no adjustment | ||
84 | * for kernel's involuntary waits due to virtualization. | ||
85 | * Value is cumulative, in nanoseconds, without a corresponding count | ||
86 | * and wraps around to zero silently on overflow | ||
87 | */ | ||
88 | __u64 cpu_run_virtual_total; | ||
89 | /* Delay accounting fields end */ | ||
90 | /* version 1 ends here */ | ||
91 | }; | ||
92 | |||
93 | |||
94 | /* | ||
95 | * Commands sent from userspace | ||
96 | * Not versioned. New commands should only be inserted at the enum's end | ||
97 | * prior to __TASKSTATS_CMD_MAX | ||
98 | */ | ||
99 | |||
100 | enum { | ||
101 | TASKSTATS_CMD_UNSPEC = 0, /* Reserved */ | ||
102 | TASKSTATS_CMD_GET, /* user->kernel request/get-response */ | ||
103 | TASKSTATS_CMD_NEW, /* kernel->user event */ | ||
104 | __TASKSTATS_CMD_MAX, | ||
105 | }; | ||
106 | |||
107 | #define TASKSTATS_CMD_MAX (__TASKSTATS_CMD_MAX - 1) | ||
108 | |||
109 | enum { | ||
110 | TASKSTATS_TYPE_UNSPEC = 0, /* Reserved */ | ||
111 | TASKSTATS_TYPE_PID, /* Process id */ | ||
112 | TASKSTATS_TYPE_TGID, /* Thread group id */ | ||
113 | TASKSTATS_TYPE_STATS, /* taskstats structure */ | ||
114 | TASKSTATS_TYPE_AGGR_PID, /* contains pid + stats */ | ||
115 | TASKSTATS_TYPE_AGGR_TGID, /* contains tgid + stats */ | ||
116 | __TASKSTATS_TYPE_MAX, | ||
117 | }; | ||
118 | |||
119 | #define TASKSTATS_TYPE_MAX (__TASKSTATS_TYPE_MAX - 1) | ||
120 | |||
121 | enum { | ||
122 | TASKSTATS_CMD_ATTR_UNSPEC = 0, | ||
123 | TASKSTATS_CMD_ATTR_PID, | ||
124 | TASKSTATS_CMD_ATTR_TGID, | ||
125 | TASKSTATS_CMD_ATTR_REGISTER_CPUMASK, | ||
126 | TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK, | ||
127 | __TASKSTATS_CMD_ATTR_MAX, | ||
128 | }; | ||
129 | |||
130 | #define TASKSTATS_CMD_ATTR_MAX (__TASKSTATS_CMD_ATTR_MAX - 1) | ||
131 | |||
132 | /* NETLINK_GENERIC related info */ | ||
133 | |||
134 | #define TASKSTATS_GENL_NAME "TASKSTATS" | ||
135 | #define TASKSTATS_GENL_VERSION 0x1 | ||
136 | |||
137 | #endif /* _LINUX_TASKSTATS_H */ | ||
diff --git a/include/linux/taskstats_kern.h b/include/linux/taskstats_kern.h new file mode 100644 index 000000000000..16894b7edcc8 --- /dev/null +++ b/include/linux/taskstats_kern.h | |||
@@ -0,0 +1,89 @@ | |||
1 | /* taskstats_kern.h - kernel header for per-task statistics interface | ||
2 | * | ||
3 | * Copyright (C) Shailabh Nagar, IBM Corp. 2006 | ||
4 | * (C) Balbir Singh, IBM Corp. 2006 | ||
5 | */ | ||
6 | |||
7 | #ifndef _LINUX_TASKSTATS_KERN_H | ||
8 | #define _LINUX_TASKSTATS_KERN_H | ||
9 | |||
10 | #include <linux/taskstats.h> | ||
11 | #include <linux/sched.h> | ||
12 | #include <net/genetlink.h> | ||
13 | |||
14 | #ifdef CONFIG_TASKSTATS | ||
15 | extern kmem_cache_t *taskstats_cache; | ||
16 | extern struct mutex taskstats_exit_mutex; | ||
17 | |||
18 | static inline void taskstats_exit_free(struct taskstats *tidstats) | ||
19 | { | ||
20 | if (tidstats) | ||
21 | kmem_cache_free(taskstats_cache, tidstats); | ||
22 | } | ||
23 | |||
24 | static inline void taskstats_tgid_init(struct signal_struct *sig) | ||
25 | { | ||
26 | spin_lock_init(&sig->stats_lock); | ||
27 | sig->stats = NULL; | ||
28 | } | ||
29 | |||
30 | static inline void taskstats_tgid_alloc(struct signal_struct *sig) | ||
31 | { | ||
32 | struct taskstats *stats; | ||
33 | unsigned long flags; | ||
34 | |||
35 | stats = kmem_cache_zalloc(taskstats_cache, SLAB_KERNEL); | ||
36 | if (!stats) | ||
37 | return; | ||
38 | |||
39 | spin_lock_irqsave(&sig->stats_lock, flags); | ||
40 | if (!sig->stats) { | ||
41 | sig->stats = stats; | ||
42 | stats = NULL; | ||
43 | } | ||
44 | spin_unlock_irqrestore(&sig->stats_lock, flags); | ||
45 | |||
46 | if (stats) | ||
47 | kmem_cache_free(taskstats_cache, stats); | ||
48 | } | ||
49 | |||
50 | static inline void taskstats_tgid_free(struct signal_struct *sig) | ||
51 | { | ||
52 | struct taskstats *stats = NULL; | ||
53 | unsigned long flags; | ||
54 | |||
55 | spin_lock_irqsave(&sig->stats_lock, flags); | ||
56 | if (sig->stats) { | ||
57 | stats = sig->stats; | ||
58 | sig->stats = NULL; | ||
59 | } | ||
60 | spin_unlock_irqrestore(&sig->stats_lock, flags); | ||
61 | if (stats) | ||
62 | kmem_cache_free(taskstats_cache, stats); | ||
63 | } | ||
64 | |||
65 | extern void taskstats_exit_alloc(struct taskstats **, unsigned int *); | ||
66 | extern void taskstats_exit_send(struct task_struct *, struct taskstats *, int, unsigned int); | ||
67 | extern void taskstats_init_early(void); | ||
68 | extern void taskstats_tgid_alloc(struct signal_struct *); | ||
69 | #else | ||
70 | static inline void taskstats_exit_alloc(struct taskstats **ptidstats, unsigned int *mycpu) | ||
71 | {} | ||
72 | static inline void taskstats_exit_free(struct taskstats *ptidstats) | ||
73 | {} | ||
74 | static inline void taskstats_exit_send(struct task_struct *tsk, | ||
75 | struct taskstats *tidstats, | ||
76 | int group_dead, unsigned int cpu) | ||
77 | {} | ||
78 | static inline void taskstats_tgid_init(struct signal_struct *sig) | ||
79 | {} | ||
80 | static inline void taskstats_tgid_alloc(struct signal_struct *sig) | ||
81 | {} | ||
82 | static inline void taskstats_tgid_free(struct signal_struct *sig) | ||
83 | {} | ||
84 | static inline void taskstats_init_early(void) | ||
85 | {} | ||
86 | #endif /* CONFIG_TASKSTATS */ | ||
87 | |||
88 | #endif | ||
89 | |||
diff --git a/include/linux/time.h b/include/linux/time.h index c05f8bb9a323..a5b739967b74 100644 --- a/include/linux/time.h +++ b/include/linux/time.h | |||
@@ -71,6 +71,18 @@ extern unsigned long mktime(const unsigned int year, const unsigned int mon, | |||
71 | extern void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec); | 71 | extern void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec); |
72 | 72 | ||
73 | /* | 73 | /* |
74 | * sub = lhs - rhs, in normalized form | ||
75 | */ | ||
76 | static inline struct timespec timespec_sub(struct timespec lhs, | ||
77 | struct timespec rhs) | ||
78 | { | ||
79 | struct timespec ts_delta; | ||
80 | set_normalized_timespec(&ts_delta, lhs.tv_sec - rhs.tv_sec, | ||
81 | lhs.tv_nsec - rhs.tv_nsec); | ||
82 | return ts_delta; | ||
83 | } | ||
84 | |||
85 | /* | ||
74 | * Returns true if the timespec is norm, false if denorm: | 86 | * Returns true if the timespec is norm, false if denorm: |
75 | */ | 87 | */ |
76 | #define timespec_valid(ts) \ | 88 | #define timespec_valid(ts) \ |
diff --git a/include/linux/tty.h b/include/linux/tty.h index b3b807e4b050..e421d5e34818 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -5,16 +5,6 @@ | |||
5 | * 'tty.h' defines some structures used by tty_io.c and some defines. | 5 | * 'tty.h' defines some structures used by tty_io.c and some defines. |
6 | */ | 6 | */ |
7 | 7 | ||
8 | /* | ||
9 | * These constants are also useful for user-level apps (e.g., VC | ||
10 | * resizing). | ||
11 | */ | ||
12 | #define MIN_NR_CONSOLES 1 /* must be at least 1 */ | ||
13 | #define MAX_NR_CONSOLES 63 /* serial lines start at 64 */ | ||
14 | #define MAX_NR_USER_CONSOLES 63 /* must be root to allocate above this */ | ||
15 | /* Note: the ioctl VT_GETSTATE does not work for | ||
16 | consoles 16 and higher (since it returns a short) */ | ||
17 | |||
18 | #ifdef __KERNEL__ | 8 | #ifdef __KERNEL__ |
19 | #include <linux/fs.h> | 9 | #include <linux/fs.h> |
20 | #include <linux/major.h> | 10 | #include <linux/major.h> |
@@ -22,7 +12,6 @@ | |||
22 | #include <linux/workqueue.h> | 12 | #include <linux/workqueue.h> |
23 | #include <linux/tty_driver.h> | 13 | #include <linux/tty_driver.h> |
24 | #include <linux/tty_ldisc.h> | 14 | #include <linux/tty_ldisc.h> |
25 | #include <linux/screen_info.h> | ||
26 | #include <linux/mutex.h> | 15 | #include <linux/mutex.h> |
27 | 16 | ||
28 | #include <asm/system.h> | 17 | #include <asm/system.h> |
@@ -270,7 +259,6 @@ struct tty_struct { | |||
270 | extern void tty_write_flush(struct tty_struct *); | 259 | extern void tty_write_flush(struct tty_struct *); |
271 | 260 | ||
272 | extern struct termios tty_std_termios; | 261 | extern struct termios tty_std_termios; |
273 | extern int fg_console, last_console, want_console; | ||
274 | 262 | ||
275 | extern int kmsg_redirect; | 263 | extern int kmsg_redirect; |
276 | 264 | ||
diff --git a/include/linux/usb.h b/include/linux/usb.h index 8dead32e7ebf..c944e8f06a4a 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -48,7 +48,7 @@ struct ep_device; | |||
48 | * @urb_list: urbs queued to this endpoint; maintained by usbcore | 48 | * @urb_list: urbs queued to this endpoint; maintained by usbcore |
49 | * @hcpriv: for use by HCD; typically holds hardware dma queue head (QH) | 49 | * @hcpriv: for use by HCD; typically holds hardware dma queue head (QH) |
50 | * with one or more transfer descriptors (TDs) per urb | 50 | * with one or more transfer descriptors (TDs) per urb |
51 | * @kobj: kobject for sysfs info | 51 | * @ep_dev: ep_device for sysfs info |
52 | * @extra: descriptors following this endpoint in the configuration | 52 | * @extra: descriptors following this endpoint in the configuration |
53 | * @extralen: how many bytes of "extra" are valid | 53 | * @extralen: how many bytes of "extra" are valid |
54 | * | 54 | * |
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h new file mode 100644 index 000000000000..91c983eef899 --- /dev/null +++ b/include/linux/usb/serial.h | |||
@@ -0,0 +1,300 @@ | |||
1 | /* | ||
2 | * USB Serial Converter stuff | ||
3 | * | ||
4 | * Copyright (C) 1999 - 2005 | ||
5 | * Greg Kroah-Hartman (greg@kroah.com) | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; version 2 of the License. | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | |||
14 | #ifndef __LINUX_USB_SERIAL_H | ||
15 | #define __LINUX_USB_SERIAL_H | ||
16 | |||
17 | #include <linux/kref.h> | ||
18 | #include <linux/mutex.h> | ||
19 | |||
20 | #define SERIAL_TTY_MAJOR 188 /* Nice legal number now */ | ||
21 | #define SERIAL_TTY_MINORS 255 /* loads of devices :) */ | ||
22 | |||
23 | #define MAX_NUM_PORTS 8 /* The maximum number of ports one device can grab at once */ | ||
24 | |||
25 | /* parity check flag */ | ||
26 | #define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK)) | ||
27 | |||
28 | /** | ||
29 | * usb_serial_port: structure for the specific ports of a device. | ||
30 | * @serial: pointer back to the struct usb_serial owner of this port. | ||
31 | * @tty: pointer to the corresponding tty for this port. | ||
32 | * @lock: spinlock to grab when updating portions of this structure. | ||
33 | * @mutex: mutex used to synchronize serial_open() and serial_close() | ||
34 | * access for this port. | ||
35 | * @number: the number of the port (the minor number). | ||
36 | * @interrupt_in_buffer: pointer to the interrupt in buffer for this port. | ||
37 | * @interrupt_in_urb: pointer to the interrupt in struct urb for this port. | ||
38 | * @interrupt_in_endpointAddress: endpoint address for the interrupt in pipe | ||
39 | * for this port. | ||
40 | * @interrupt_out_buffer: pointer to the interrupt out buffer for this port. | ||
41 | * @interrupt_out_size: the size of the interrupt_out_buffer, in bytes. | ||
42 | * @interrupt_out_urb: pointer to the interrupt out struct urb for this port. | ||
43 | * @interrupt_out_endpointAddress: endpoint address for the interrupt out pipe | ||
44 | * for this port. | ||
45 | * @bulk_in_buffer: pointer to the bulk in buffer for this port. | ||
46 | * @read_urb: pointer to the bulk in struct urb for this port. | ||
47 | * @bulk_in_endpointAddress: endpoint address for the bulk in pipe for this | ||
48 | * port. | ||
49 | * @bulk_out_buffer: pointer to the bulk out buffer for this port. | ||
50 | * @bulk_out_size: the size of the bulk_out_buffer, in bytes. | ||
51 | * @write_urb: pointer to the bulk out struct urb for this port. | ||
52 | * @bulk_out_endpointAddress: endpoint address for the bulk out pipe for this | ||
53 | * port. | ||
54 | * @write_wait: a wait_queue_head_t used by the port. | ||
55 | * @work: work queue entry for the line discipline waking up. | ||
56 | * @open_count: number of times this port has been opened. | ||
57 | * | ||
58 | * This structure is used by the usb-serial core and drivers for the specific | ||
59 | * ports of a device. | ||
60 | */ | ||
61 | struct usb_serial_port { | ||
62 | struct usb_serial * serial; | ||
63 | struct tty_struct * tty; | ||
64 | spinlock_t lock; | ||
65 | struct mutex mutex; | ||
66 | unsigned char number; | ||
67 | |||
68 | unsigned char * interrupt_in_buffer; | ||
69 | struct urb * interrupt_in_urb; | ||
70 | __u8 interrupt_in_endpointAddress; | ||
71 | |||
72 | unsigned char * interrupt_out_buffer; | ||
73 | int interrupt_out_size; | ||
74 | struct urb * interrupt_out_urb; | ||
75 | __u8 interrupt_out_endpointAddress; | ||
76 | |||
77 | unsigned char * bulk_in_buffer; | ||
78 | int bulk_in_size; | ||
79 | struct urb * read_urb; | ||
80 | __u8 bulk_in_endpointAddress; | ||
81 | |||
82 | unsigned char * bulk_out_buffer; | ||
83 | int bulk_out_size; | ||
84 | struct urb * write_urb; | ||
85 | int write_urb_busy; | ||
86 | __u8 bulk_out_endpointAddress; | ||
87 | |||
88 | wait_queue_head_t write_wait; | ||
89 | struct work_struct work; | ||
90 | int open_count; | ||
91 | struct device dev; | ||
92 | }; | ||
93 | #define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev) | ||
94 | |||
95 | /* get and set the port private data pointer helper functions */ | ||
96 | static inline void *usb_get_serial_port_data (struct usb_serial_port *port) | ||
97 | { | ||
98 | return dev_get_drvdata(&port->dev); | ||
99 | } | ||
100 | |||
101 | static inline void usb_set_serial_port_data (struct usb_serial_port *port, void *data) | ||
102 | { | ||
103 | dev_set_drvdata(&port->dev, data); | ||
104 | } | ||
105 | |||
106 | /** | ||
107 | * usb_serial - structure used by the usb-serial core for a device | ||
108 | * @dev: pointer to the struct usb_device for this device | ||
109 | * @type: pointer to the struct usb_serial_driver for this device | ||
110 | * @interface: pointer to the struct usb_interface for this device | ||
111 | * @minor: the starting minor number for this device | ||
112 | * @num_ports: the number of ports this device has | ||
113 | * @num_interrupt_in: number of interrupt in endpoints we have | ||
114 | * @num_interrupt_out: number of interrupt out endpoints we have | ||
115 | * @num_bulk_in: number of bulk in endpoints we have | ||
116 | * @num_bulk_out: number of bulk out endpoints we have | ||
117 | * @port: array of struct usb_serial_port structures for the different ports. | ||
118 | * @private: place to put any driver specific information that is needed. The | ||
119 | * usb-serial driver is required to manage this data, the usb-serial core | ||
120 | * will not touch this. Use usb_get_serial_data() and | ||
121 | * usb_set_serial_data() to access this. | ||
122 | */ | ||
123 | struct usb_serial { | ||
124 | struct usb_device * dev; | ||
125 | struct usb_serial_driver * type; | ||
126 | struct usb_interface * interface; | ||
127 | unsigned char minor; | ||
128 | unsigned char num_ports; | ||
129 | unsigned char num_port_pointers; | ||
130 | char num_interrupt_in; | ||
131 | char num_interrupt_out; | ||
132 | char num_bulk_in; | ||
133 | char num_bulk_out; | ||
134 | struct usb_serial_port * port[MAX_NUM_PORTS]; | ||
135 | struct kref kref; | ||
136 | void * private; | ||
137 | }; | ||
138 | #define to_usb_serial(d) container_of(d, struct usb_serial, kref) | ||
139 | |||
140 | #define NUM_DONT_CARE (-1) | ||
141 | |||
142 | /* get and set the serial private data pointer helper functions */ | ||
143 | static inline void *usb_get_serial_data (struct usb_serial *serial) | ||
144 | { | ||
145 | return serial->private; | ||
146 | } | ||
147 | |||
148 | static inline void usb_set_serial_data (struct usb_serial *serial, void *data) | ||
149 | { | ||
150 | serial->private = data; | ||
151 | } | ||
152 | |||
153 | /** | ||
154 | * usb_serial_driver - describes a usb serial driver | ||
155 | * @description: pointer to a string that describes this driver. This string used | ||
156 | * in the syslog messages when a device is inserted or removed. | ||
157 | * @id_table: pointer to a list of usb_device_id structures that define all | ||
158 | * of the devices this structure can support. | ||
159 | * @num_interrupt_in: the number of interrupt in endpoints this device will | ||
160 | * have. | ||
161 | * @num_interrupt_out: the number of interrupt out endpoints this device will | ||
162 | * have. | ||
163 | * @num_bulk_in: the number of bulk in endpoints this device will have. | ||
164 | * @num_bulk_out: the number of bulk out endpoints this device will have. | ||
165 | * @num_ports: the number of different ports this device will have. | ||
166 | * @calc_num_ports: pointer to a function to determine how many ports this | ||
167 | * device has dynamically. It will be called after the probe() | ||
168 | * callback is called, but before attach() | ||
169 | * @probe: pointer to the driver's probe function. | ||
170 | * This will be called when the device is inserted into the system, | ||
171 | * but before the device has been fully initialized by the usb_serial | ||
172 | * subsystem. Use this function to download any firmware to the device, | ||
173 | * or any other early initialization that might be needed. | ||
174 | * Return 0 to continue on with the initialization sequence. Anything | ||
175 | * else will abort it. | ||
176 | * @attach: pointer to the driver's attach function. | ||
177 | * This will be called when the struct usb_serial structure is fully set | ||
178 | * set up. Do any local initialization of the device, or any private | ||
179 | * memory structure allocation at this point in time. | ||
180 | * @shutdown: pointer to the driver's shutdown function. This will be | ||
181 | * called when the device is removed from the system. | ||
182 | * | ||
183 | * This structure is defines a USB Serial driver. It provides all of | ||
184 | * the information that the USB serial core code needs. If the function | ||
185 | * pointers are defined, then the USB serial core code will call them when | ||
186 | * the corresponding tty port functions are called. If they are not | ||
187 | * called, the generic serial function will be used instead. | ||
188 | * | ||
189 | * The driver.owner field should be set to the module owner of this driver. | ||
190 | * The driver.name field should be set to the name of this driver (remember | ||
191 | * it will show up in sysfs, so it needs to be short and to the point. | ||
192 | * Useing the module name is a good idea.) | ||
193 | */ | ||
194 | struct usb_serial_driver { | ||
195 | const char *description; | ||
196 | const struct usb_device_id *id_table; | ||
197 | char num_interrupt_in; | ||
198 | char num_interrupt_out; | ||
199 | char num_bulk_in; | ||
200 | char num_bulk_out; | ||
201 | char num_ports; | ||
202 | |||
203 | struct list_head driver_list; | ||
204 | struct device_driver driver; | ||
205 | |||
206 | int (*probe) (struct usb_serial *serial, const struct usb_device_id *id); | ||
207 | int (*attach) (struct usb_serial *serial); | ||
208 | int (*calc_num_ports) (struct usb_serial *serial); | ||
209 | |||
210 | void (*shutdown) (struct usb_serial *serial); | ||
211 | |||
212 | int (*port_probe) (struct usb_serial_port *port); | ||
213 | int (*port_remove) (struct usb_serial_port *port); | ||
214 | |||
215 | /* serial function calls */ | ||
216 | int (*open) (struct usb_serial_port *port, struct file * filp); | ||
217 | void (*close) (struct usb_serial_port *port, struct file * filp); | ||
218 | int (*write) (struct usb_serial_port *port, const unsigned char *buf, int count); | ||
219 | int (*write_room) (struct usb_serial_port *port); | ||
220 | int (*ioctl) (struct usb_serial_port *port, struct file * file, unsigned int cmd, unsigned long arg); | ||
221 | void (*set_termios) (struct usb_serial_port *port, struct termios * old); | ||
222 | void (*break_ctl) (struct usb_serial_port *port, int break_state); | ||
223 | int (*chars_in_buffer) (struct usb_serial_port *port); | ||
224 | void (*throttle) (struct usb_serial_port *port); | ||
225 | void (*unthrottle) (struct usb_serial_port *port); | ||
226 | int (*tiocmget) (struct usb_serial_port *port, struct file *file); | ||
227 | int (*tiocmset) (struct usb_serial_port *port, struct file *file, unsigned int set, unsigned int clear); | ||
228 | |||
229 | void (*read_int_callback)(struct urb *urb, struct pt_regs *regs); | ||
230 | void (*write_int_callback)(struct urb *urb, struct pt_regs *regs); | ||
231 | void (*read_bulk_callback)(struct urb *urb, struct pt_regs *regs); | ||
232 | void (*write_bulk_callback)(struct urb *urb, struct pt_regs *regs); | ||
233 | }; | ||
234 | #define to_usb_serial_driver(d) container_of(d, struct usb_serial_driver, driver) | ||
235 | |||
236 | extern int usb_serial_register(struct usb_serial_driver *driver); | ||
237 | extern void usb_serial_deregister(struct usb_serial_driver *driver); | ||
238 | extern void usb_serial_port_softint(struct usb_serial_port *port); | ||
239 | |||
240 | extern int usb_serial_probe(struct usb_interface *iface, const struct usb_device_id *id); | ||
241 | extern void usb_serial_disconnect(struct usb_interface *iface); | ||
242 | |||
243 | extern int ezusb_writememory (struct usb_serial *serial, int address, unsigned char *data, int length, __u8 bRequest); | ||
244 | extern int ezusb_set_reset (struct usb_serial *serial, unsigned char reset_bit); | ||
245 | |||
246 | /* USB Serial console functions */ | ||
247 | #ifdef CONFIG_USB_SERIAL_CONSOLE | ||
248 | extern void usb_serial_console_init (int debug, int minor); | ||
249 | extern void usb_serial_console_exit (void); | ||
250 | extern void usb_serial_console_disconnect(struct usb_serial *serial); | ||
251 | #else | ||
252 | static inline void usb_serial_console_init (int debug, int minor) { } | ||
253 | static inline void usb_serial_console_exit (void) { } | ||
254 | static inline void usb_serial_console_disconnect(struct usb_serial *serial) {} | ||
255 | #endif | ||
256 | |||
257 | /* Functions needed by other parts of the usbserial core */ | ||
258 | extern struct usb_serial *usb_serial_get_by_index (unsigned int minor); | ||
259 | extern void usb_serial_put(struct usb_serial *serial); | ||
260 | extern int usb_serial_generic_open (struct usb_serial_port *port, struct file *filp); | ||
261 | extern int usb_serial_generic_write (struct usb_serial_port *port, const unsigned char *buf, int count); | ||
262 | extern void usb_serial_generic_close (struct usb_serial_port *port, struct file *filp); | ||
263 | extern int usb_serial_generic_write_room (struct usb_serial_port *port); | ||
264 | extern int usb_serial_generic_chars_in_buffer (struct usb_serial_port *port); | ||
265 | extern void usb_serial_generic_read_bulk_callback (struct urb *urb, struct pt_regs *regs); | ||
266 | extern void usb_serial_generic_write_bulk_callback (struct urb *urb, struct pt_regs *regs); | ||
267 | extern void usb_serial_generic_shutdown (struct usb_serial *serial); | ||
268 | extern int usb_serial_generic_register (int debug); | ||
269 | extern void usb_serial_generic_deregister (void); | ||
270 | |||
271 | extern int usb_serial_bus_register (struct usb_serial_driver *device); | ||
272 | extern void usb_serial_bus_deregister (struct usb_serial_driver *device); | ||
273 | |||
274 | extern struct usb_serial_driver usb_serial_generic_device; | ||
275 | extern struct bus_type usb_serial_bus_type; | ||
276 | extern struct tty_driver *usb_serial_tty_driver; | ||
277 | |||
278 | static inline void usb_serial_debug_data(int debug, | ||
279 | struct device *dev, | ||
280 | const char *function, int size, | ||
281 | const unsigned char *data) | ||
282 | { | ||
283 | int i; | ||
284 | |||
285 | if (debug) { | ||
286 | dev_printk(KERN_DEBUG, dev, "%s - length = %d, data = ", function, size); | ||
287 | for (i = 0; i < size; ++i) | ||
288 | printk ("%.2x ", data[i]); | ||
289 | printk ("\n"); | ||
290 | } | ||
291 | } | ||
292 | |||
293 | /* Use our own dbg macro */ | ||
294 | #undef dbg | ||
295 | #define dbg(format, arg...) do { if (debug) printk(KERN_DEBUG "%s: " format "\n" , __FILE__ , ## arg); } while (0) | ||
296 | |||
297 | |||
298 | |||
299 | #endif /* ifdef __LINUX_USB_SERIAL_H */ | ||
300 | |||
diff --git a/include/linux/usb_ch9.h b/include/linux/usb_ch9.h index a2aacfc7af2f..c720d107ff29 100644 --- a/include/linux/usb_ch9.h +++ b/include/linux/usb_ch9.h | |||
@@ -51,6 +51,9 @@ | |||
51 | #define USB_RECIP_INTERFACE 0x01 | 51 | #define USB_RECIP_INTERFACE 0x01 |
52 | #define USB_RECIP_ENDPOINT 0x02 | 52 | #define USB_RECIP_ENDPOINT 0x02 |
53 | #define USB_RECIP_OTHER 0x03 | 53 | #define USB_RECIP_OTHER 0x03 |
54 | /* From Wireless USB 1.0 */ | ||
55 | #define USB_RECIP_PORT 0x04 | ||
56 | #define USB_RECIP_RPIPE 0x05 | ||
54 | 57 | ||
55 | /* | 58 | /* |
56 | * Standard requests, for the bRequest field of a SETUP packet. | 59 | * Standard requests, for the bRequest field of a SETUP packet. |
@@ -73,7 +76,9 @@ | |||
73 | 76 | ||
74 | #define USB_REQ_SET_ENCRYPTION 0x0D /* Wireless USB */ | 77 | #define USB_REQ_SET_ENCRYPTION 0x0D /* Wireless USB */ |
75 | #define USB_REQ_GET_ENCRYPTION 0x0E | 78 | #define USB_REQ_GET_ENCRYPTION 0x0E |
79 | #define USB_REQ_RPIPE_ABORT 0x0E | ||
76 | #define USB_REQ_SET_HANDSHAKE 0x0F | 80 | #define USB_REQ_SET_HANDSHAKE 0x0F |
81 | #define USB_REQ_RPIPE_RESET 0x0F | ||
77 | #define USB_REQ_GET_HANDSHAKE 0x10 | 82 | #define USB_REQ_GET_HANDSHAKE 0x10 |
78 | #define USB_REQ_SET_CONNECTION 0x11 | 83 | #define USB_REQ_SET_CONNECTION 0x11 |
79 | #define USB_REQ_SET_SECURITY_DATA 0x12 | 84 | #define USB_REQ_SET_SECURITY_DATA 0x12 |
@@ -159,6 +164,8 @@ struct usb_ctrlrequest { | |||
159 | #define USB_DT_BOS 0x0f | 164 | #define USB_DT_BOS 0x0f |
160 | #define USB_DT_DEVICE_CAPABILITY 0x10 | 165 | #define USB_DT_DEVICE_CAPABILITY 0x10 |
161 | #define USB_DT_WIRELESS_ENDPOINT_COMP 0x11 | 166 | #define USB_DT_WIRELESS_ENDPOINT_COMP 0x11 |
167 | #define USB_DT_WIRE_ADAPTER 0x21 | ||
168 | #define USB_DT_RPIPE 0x22 | ||
162 | 169 | ||
163 | /* conventional codes for class-specific descriptors */ | 170 | /* conventional codes for class-specific descriptors */ |
164 | #define USB_DT_CS_DEVICE 0x21 | 171 | #define USB_DT_CS_DEVICE 0x21 |
diff --git a/include/linux/usb_gadget.h b/include/linux/usb_gadget.h index 1d78870ed8af..e17186dbcdca 100644 --- a/include/linux/usb_gadget.h +++ b/include/linux/usb_gadget.h | |||
@@ -872,9 +872,9 @@ int usb_gadget_config_buf(const struct usb_config_descriptor *config, | |||
872 | /* utility wrapping a simple endpoint selection policy */ | 872 | /* utility wrapping a simple endpoint selection policy */ |
873 | 873 | ||
874 | extern struct usb_ep *usb_ep_autoconfig (struct usb_gadget *, | 874 | extern struct usb_ep *usb_ep_autoconfig (struct usb_gadget *, |
875 | struct usb_endpoint_descriptor *) __init; | 875 | struct usb_endpoint_descriptor *) __devinit; |
876 | 876 | ||
877 | extern void usb_ep_autoconfig_reset (struct usb_gadget *) __init; | 877 | extern void usb_ep_autoconfig_reset (struct usb_gadget *) __devinit; |
878 | 878 | ||
879 | #endif /* __KERNEL__ */ | 879 | #endif /* __KERNEL__ */ |
880 | 880 | ||
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h index 608487a62c98..f38f43f20fae 100644 --- a/include/linux/usb_usual.h +++ b/include/linux/usb_usual.h | |||
@@ -43,6 +43,8 @@ | |||
43 | /* Need delay after Command phase */ \ | 43 | /* Need delay after Command phase */ \ |
44 | US_FLAG(NO_WP_DETECT, 0x00000200) \ | 44 | US_FLAG(NO_WP_DETECT, 0x00000200) \ |
45 | /* Don't check for write-protect */ \ | 45 | /* Don't check for write-protect */ \ |
46 | US_FLAG(MAX_SECTORS_64, 0x00000400) \ | ||
47 | /* Sets max_sectors to 64 */ | ||
46 | 48 | ||
47 | #define US_FLAG(name, value) US_FL_##name = value , | 49 | #define US_FLAG(name, value) US_FL_##name = value , |
48 | enum { US_DO_ALL_FLAGS }; | 50 | enum { US_DO_ALL_FLAGS }; |
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index f6024ab4eff0..71b6363caaaf 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h | |||
@@ -11,6 +11,7 @@ struct vm_area_struct; | |||
11 | #define VM_ALLOC 0x00000002 /* vmalloc() */ | 11 | #define VM_ALLOC 0x00000002 /* vmalloc() */ |
12 | #define VM_MAP 0x00000004 /* vmap()ed pages */ | 12 | #define VM_MAP 0x00000004 /* vmap()ed pages */ |
13 | #define VM_USERMAP 0x00000008 /* suitable for remap_vmalloc_range */ | 13 | #define VM_USERMAP 0x00000008 /* suitable for remap_vmalloc_range */ |
14 | #define VM_VPAGES 0x00000010 /* buffer for pages was vmalloc'ed */ | ||
14 | /* bits [20..32] reserved for arch specific ioremap internals */ | 15 | /* bits [20..32] reserved for arch specific ioremap internals */ |
15 | 16 | ||
16 | /* | 17 | /* |
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h index 3e0daf54133e..1ab806c47514 100644 --- a/include/linux/vmstat.h +++ b/include/linux/vmstat.h | |||
@@ -57,7 +57,7 @@ static inline void __count_vm_events(enum vm_event_item item, long delta) | |||
57 | 57 | ||
58 | static inline void count_vm_events(enum vm_event_item item, long delta) | 58 | static inline void count_vm_events(enum vm_event_item item, long delta) |
59 | { | 59 | { |
60 | get_cpu_var(vm_event_states.event[item])++; | 60 | get_cpu_var(vm_event_states.event[item]) += delta; |
61 | put_cpu(); | 61 | put_cpu(); |
62 | } | 62 | } |
63 | 63 | ||
@@ -186,11 +186,16 @@ static inline void __mod_zone_page_state(struct zone *zone, | |||
186 | zone_page_state_add(delta, zone, item); | 186 | zone_page_state_add(delta, zone, item); |
187 | } | 187 | } |
188 | 188 | ||
189 | static inline void __inc_zone_state(struct zone *zone, enum zone_stat_item item) | ||
190 | { | ||
191 | atomic_long_inc(&zone->vm_stat[item]); | ||
192 | atomic_long_inc(&vm_stat[item]); | ||
193 | } | ||
194 | |||
189 | static inline void __inc_zone_page_state(struct page *page, | 195 | static inline void __inc_zone_page_state(struct page *page, |
190 | enum zone_stat_item item) | 196 | enum zone_stat_item item) |
191 | { | 197 | { |
192 | atomic_long_inc(&page_zone(page)->vm_stat[item]); | 198 | __inc_zone_state(page_zone(page), item); |
193 | atomic_long_inc(&vm_stat[item]); | ||
194 | } | 199 | } |
195 | 200 | ||
196 | static inline void __dec_zone_page_state(struct page *page, | 201 | static inline void __dec_zone_page_state(struct page *page, |
diff --git a/include/linux/vt.h b/include/linux/vt.h index 9f95b0bea5b3..8ab334a48222 100644 --- a/include/linux/vt.h +++ b/include/linux/vt.h | |||
@@ -1,6 +1,16 @@ | |||
1 | #ifndef _LINUX_VT_H | 1 | #ifndef _LINUX_VT_H |
2 | #define _LINUX_VT_H | 2 | #define _LINUX_VT_H |
3 | 3 | ||
4 | /* | ||
5 | * These constants are also useful for user-level apps (e.g., VC | ||
6 | * resizing). | ||
7 | */ | ||
8 | #define MIN_NR_CONSOLES 1 /* must be at least 1 */ | ||
9 | #define MAX_NR_CONSOLES 63 /* serial lines start at 64 */ | ||
10 | #define MAX_NR_USER_CONSOLES 63 /* must be root to allocate above this */ | ||
11 | /* Note: the ioctl VT_GETSTATE does not work for | ||
12 | consoles 16 and higher (since it returns a short) */ | ||
13 | |||
4 | /* 0x56 is 'V', to avoid collision with termios and kd */ | 14 | /* 0x56 is 'V', to avoid collision with termios and kd */ |
5 | 15 | ||
6 | #define VT_OPENQRY 0x5600 /* find available vt */ | 16 | #define VT_OPENQRY 0x5600 /* find available vt */ |
diff --git a/include/linux/vt_kern.h b/include/linux/vt_kern.h index 940d0261a545..918a29763aea 100644 --- a/include/linux/vt_kern.h +++ b/include/linux/vt_kern.h | |||
@@ -26,6 +26,7 @@ | |||
26 | 26 | ||
27 | extern void kd_mksound(unsigned int hz, unsigned int ticks); | 27 | extern void kd_mksound(unsigned int hz, unsigned int ticks); |
28 | extern int kbd_rate(struct kbd_repeat *rep); | 28 | extern int kbd_rate(struct kbd_repeat *rep); |
29 | extern int fg_console, last_console, want_console; | ||
29 | 30 | ||
30 | /* console.c */ | 31 | /* console.c */ |
31 | 32 | ||
diff --git a/include/linux/wait.h b/include/linux/wait.h index 794be7af58ae..b3b9048421d8 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h | |||
@@ -77,17 +77,7 @@ struct task_struct; | |||
77 | #define __WAIT_BIT_KEY_INITIALIZER(word, bit) \ | 77 | #define __WAIT_BIT_KEY_INITIALIZER(word, bit) \ |
78 | { .flags = word, .bit_nr = bit, } | 78 | { .flags = word, .bit_nr = bit, } |
79 | 79 | ||
80 | /* | 80 | extern void init_waitqueue_head(wait_queue_head_t *q); |
81 | * lockdep: we want one lock-class for all waitqueue locks. | ||
82 | */ | ||
83 | extern struct lock_class_key waitqueue_lock_key; | ||
84 | |||
85 | static inline void init_waitqueue_head(wait_queue_head_t *q) | ||
86 | { | ||
87 | spin_lock_init(&q->lock); | ||
88 | lockdep_set_class(&q->lock, &waitqueue_lock_key); | ||
89 | INIT_LIST_HEAD(&q->task_list); | ||
90 | } | ||
91 | 81 | ||
92 | static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p) | 82 | static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p) |
93 | { | 83 | { |