diff options
| author | Jeff Garzik <jeff@garzik.org> | 2006-08-03 17:35:48 -0400 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-08-03 17:35:48 -0400 |
| commit | 36a2c6b28003dd0592b8ece5e9409991e0820f50 (patch) | |
| tree | c5b52547b2658a8a3b898b8224b835a7e8396017 /include/linux | |
| parent | 95916edd02e3a7752315422f386c55723d4a3637 (diff) | |
| parent | f1d39b291e2263f5e2f2ec5d4061802f76d8ae67 (diff) | |
Merge branch 'upstream-fixes' into upstream
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/audit.h | 43 | ||||
| -rw-r--r-- | include/linux/cn_proc.h | 3 | ||||
| -rw-r--r-- | include/linux/delayacct.h | 6 | ||||
| -rw-r--r-- | include/linux/ext3_fs.h | 9 | ||||
| -rw-r--r-- | include/linux/fb.h | 2 | ||||
| -rw-r--r-- | include/linux/fsnotify.h | 6 | ||||
| -rw-r--r-- | include/linux/irq.h | 5 | ||||
| -rw-r--r-- | include/linux/jiffies.h | 4 | ||||
| -rw-r--r-- | include/linux/netfilter_bridge.h | 1 | ||||
| -rw-r--r-- | include/linux/pmu.h | 3 | ||||
| -rw-r--r-- | include/linux/security.h | 40 | ||||
| -rw-r--r-- | include/linux/skbuff.h | 33 | ||||
| -rw-r--r-- | include/linux/usb.h | 7 | ||||
| -rw-r--r-- | include/linux/usb_usual.h | 4 | ||||
| -rw-r--r-- | include/linux/videodev.h | 7 | ||||
| -rw-r--r-- | include/linux/videodev2.h | 2 |
16 files changed, 129 insertions, 46 deletions
diff --git a/include/linux/audit.h b/include/linux/audit.h index b27d7debc5a..64f9f9e56ac 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
| @@ -327,21 +327,31 @@ extern void __audit_getname(const char *name); | |||
| 327 | extern void audit_putname(const char *name); | 327 | extern void audit_putname(const char *name); |
| 328 | extern void __audit_inode(const char *name, const struct inode *inode); | 328 | extern void __audit_inode(const char *name, const struct inode *inode); |
| 329 | extern void __audit_inode_child(const char *dname, const struct inode *inode, | 329 | extern void __audit_inode_child(const char *dname, const struct inode *inode, |
| 330 | unsigned long pino); | 330 | const struct inode *parent); |
| 331 | extern void __audit_inode_update(const struct inode *inode); | ||
| 332 | static inline int audit_dummy_context(void) | ||
| 333 | { | ||
| 334 | void *p = current->audit_context; | ||
| 335 | return !p || *(int *)p; | ||
| 336 | } | ||
| 331 | static inline void audit_getname(const char *name) | 337 | static inline void audit_getname(const char *name) |
| 332 | { | 338 | { |
| 333 | if (unlikely(current->audit_context)) | 339 | if (unlikely(!audit_dummy_context())) |
| 334 | __audit_getname(name); | 340 | __audit_getname(name); |
| 335 | } | 341 | } |
| 336 | static inline void audit_inode(const char *name, const struct inode *inode) { | 342 | static inline void audit_inode(const char *name, const struct inode *inode) { |
| 337 | if (unlikely(current->audit_context)) | 343 | if (unlikely(!audit_dummy_context())) |
| 338 | __audit_inode(name, inode); | 344 | __audit_inode(name, inode); |
| 339 | } | 345 | } |
| 340 | static inline void audit_inode_child(const char *dname, | 346 | static inline void audit_inode_child(const char *dname, |
| 341 | const struct inode *inode, | 347 | const struct inode *inode, |
| 342 | unsigned long pino) { | 348 | const struct inode *parent) { |
| 343 | if (unlikely(current->audit_context)) | 349 | if (unlikely(!audit_dummy_context())) |
| 344 | __audit_inode_child(dname, inode, pino); | 350 | __audit_inode_child(dname, inode, parent); |
| 351 | } | ||
| 352 | static inline void audit_inode_update(const struct inode *inode) { | ||
| 353 | if (unlikely(!audit_dummy_context())) | ||
| 354 | __audit_inode_update(inode); | ||
| 345 | } | 355 | } |
| 346 | 356 | ||
| 347 | /* Private API (for audit.c only) */ | 357 | /* Private API (for audit.c only) */ |
| @@ -365,57 +375,61 @@ extern int __audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat); | |||
| 365 | 375 | ||
| 366 | static inline int audit_ipc_obj(struct kern_ipc_perm *ipcp) | 376 | static inline int audit_ipc_obj(struct kern_ipc_perm *ipcp) |
| 367 | { | 377 | { |
| 368 | if (unlikely(current->audit_context)) | 378 | if (unlikely(!audit_dummy_context())) |
| 369 | return __audit_ipc_obj(ipcp); | 379 | return __audit_ipc_obj(ipcp); |
| 370 | return 0; | 380 | return 0; |
| 371 | } | 381 | } |
| 372 | static inline int audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode) | 382 | static inline int audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode) |
| 373 | { | 383 | { |
| 374 | if (unlikely(current->audit_context)) | 384 | if (unlikely(!audit_dummy_context())) |
| 375 | return __audit_ipc_set_perm(qbytes, uid, gid, mode); | 385 | return __audit_ipc_set_perm(qbytes, uid, gid, mode); |
| 376 | return 0; | 386 | return 0; |
| 377 | } | 387 | } |
| 378 | static inline int audit_mq_open(int oflag, mode_t mode, struct mq_attr __user *u_attr) | 388 | static inline int audit_mq_open(int oflag, mode_t mode, struct mq_attr __user *u_attr) |
| 379 | { | 389 | { |
| 380 | if (unlikely(current->audit_context)) | 390 | if (unlikely(!audit_dummy_context())) |
| 381 | return __audit_mq_open(oflag, mode, u_attr); | 391 | return __audit_mq_open(oflag, mode, u_attr); |
| 382 | return 0; | 392 | return 0; |
| 383 | } | 393 | } |
| 384 | static inline int audit_mq_timedsend(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec __user *u_abs_timeout) | 394 | static inline int audit_mq_timedsend(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec __user *u_abs_timeout) |
| 385 | { | 395 | { |
| 386 | if (unlikely(current->audit_context)) | 396 | if (unlikely(!audit_dummy_context())) |
| 387 | return __audit_mq_timedsend(mqdes, msg_len, msg_prio, u_abs_timeout); | 397 | return __audit_mq_timedsend(mqdes, msg_len, msg_prio, u_abs_timeout); |
| 388 | return 0; | 398 | return 0; |
| 389 | } | 399 | } |
| 390 | static inline int audit_mq_timedreceive(mqd_t mqdes, size_t msg_len, unsigned int __user *u_msg_prio, const struct timespec __user *u_abs_timeout) | 400 | static inline int audit_mq_timedreceive(mqd_t mqdes, size_t msg_len, unsigned int __user *u_msg_prio, const struct timespec __user *u_abs_timeout) |
| 391 | { | 401 | { |
| 392 | if (unlikely(current->audit_context)) | 402 | if (unlikely(!audit_dummy_context())) |
| 393 | return __audit_mq_timedreceive(mqdes, msg_len, u_msg_prio, u_abs_timeout); | 403 | return __audit_mq_timedreceive(mqdes, msg_len, u_msg_prio, u_abs_timeout); |
| 394 | return 0; | 404 | return 0; |
| 395 | } | 405 | } |
| 396 | static inline int audit_mq_notify(mqd_t mqdes, const struct sigevent __user *u_notification) | 406 | static inline int audit_mq_notify(mqd_t mqdes, const struct sigevent __user *u_notification) |
| 397 | { | 407 | { |
| 398 | if (unlikely(current->audit_context)) | 408 | if (unlikely(!audit_dummy_context())) |
| 399 | return __audit_mq_notify(mqdes, u_notification); | 409 | return __audit_mq_notify(mqdes, u_notification); |
| 400 | return 0; | 410 | return 0; |
| 401 | } | 411 | } |
| 402 | static inline int audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) | 412 | static inline int audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) |
| 403 | { | 413 | { |
| 404 | if (unlikely(current->audit_context)) | 414 | if (unlikely(!audit_dummy_context())) |
| 405 | return __audit_mq_getsetattr(mqdes, mqstat); | 415 | return __audit_mq_getsetattr(mqdes, mqstat); |
| 406 | return 0; | 416 | return 0; |
| 407 | } | 417 | } |
| 418 | extern int audit_n_rules; | ||
| 408 | #else | 419 | #else |
| 409 | #define audit_alloc(t) ({ 0; }) | 420 | #define audit_alloc(t) ({ 0; }) |
| 410 | #define audit_free(t) do { ; } while (0) | 421 | #define audit_free(t) do { ; } while (0) |
| 411 | #define audit_syscall_entry(ta,a,b,c,d,e) do { ; } while (0) | 422 | #define audit_syscall_entry(ta,a,b,c,d,e) do { ; } while (0) |
| 412 | #define audit_syscall_exit(f,r) do { ; } while (0) | 423 | #define audit_syscall_exit(f,r) do { ; } while (0) |
| 424 | #define audit_dummy_context() 1 | ||
| 413 | #define audit_getname(n) do { ; } while (0) | 425 | #define audit_getname(n) do { ; } while (0) |
| 414 | #define audit_putname(n) do { ; } while (0) | 426 | #define audit_putname(n) do { ; } while (0) |
| 415 | #define __audit_inode(n,i) do { ; } while (0) | 427 | #define __audit_inode(n,i) do { ; } while (0) |
| 416 | #define __audit_inode_child(d,i,p) do { ; } while (0) | 428 | #define __audit_inode_child(d,i,p) do { ; } while (0) |
| 429 | #define __audit_inode_update(i) do { ; } while (0) | ||
| 417 | #define audit_inode(n,i) do { ; } while (0) | 430 | #define audit_inode(n,i) do { ; } while (0) |
| 418 | #define audit_inode_child(d,i,p) do { ; } while (0) | 431 | #define audit_inode_child(d,i,p) do { ; } while (0) |
| 432 | #define audit_inode_update(i) do { ; } while (0) | ||
| 419 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) | 433 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) |
| 420 | #define audit_get_loginuid(c) ({ -1; }) | 434 | #define audit_get_loginuid(c) ({ -1; }) |
| 421 | #define audit_ipc_obj(i) ({ 0; }) | 435 | #define audit_ipc_obj(i) ({ 0; }) |
| @@ -430,6 +444,7 @@ static inline int audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) | |||
| 430 | #define audit_mq_timedreceive(d,l,p,t) ({ 0; }) | 444 | #define audit_mq_timedreceive(d,l,p,t) ({ 0; }) |
| 431 | #define audit_mq_notify(d,n) ({ 0; }) | 445 | #define audit_mq_notify(d,n) ({ 0; }) |
| 432 | #define audit_mq_getsetattr(d,s) ({ 0; }) | 446 | #define audit_mq_getsetattr(d,s) ({ 0; }) |
| 447 | #define audit_n_rules 0 | ||
| 433 | #endif | 448 | #endif |
| 434 | 449 | ||
| 435 | #ifdef CONFIG_AUDIT | 450 | #ifdef CONFIG_AUDIT |
diff --git a/include/linux/cn_proc.h b/include/linux/cn_proc.h index dbb7769009b..1c86d65bc4b 100644 --- a/include/linux/cn_proc.h +++ b/include/linux/cn_proc.h | |||
| @@ -57,7 +57,8 @@ struct proc_event { | |||
| 57 | PROC_EVENT_EXIT = 0x80000000 | 57 | PROC_EVENT_EXIT = 0x80000000 |
| 58 | } what; | 58 | } what; |
| 59 | __u32 cpu; | 59 | __u32 cpu; |
| 60 | struct timespec timestamp; | 60 | __u64 __attribute__((aligned(8))) timestamp_ns; |
| 61 | /* Number of nano seconds since system boot */ | ||
| 61 | union { /* must be last field of proc_event struct */ | 62 | union { /* must be last field of proc_event struct */ |
| 62 | struct { | 63 | struct { |
| 63 | __u32 err; | 64 | __u32 err; |
diff --git a/include/linux/delayacct.h b/include/linux/delayacct.h index 7e8b6011b8f..11487b6e712 100644 --- a/include/linux/delayacct.h +++ b/include/linux/delayacct.h | |||
| @@ -55,7 +55,7 @@ static inline void delayacct_tsk_init(struct task_struct *tsk) | |||
| 55 | { | 55 | { |
| 56 | /* reinitialize in case parent's non-null pointer was dup'ed*/ | 56 | /* reinitialize in case parent's non-null pointer was dup'ed*/ |
| 57 | tsk->delays = NULL; | 57 | tsk->delays = NULL; |
| 58 | if (unlikely(delayacct_on)) | 58 | if (delayacct_on) |
| 59 | __delayacct_tsk_init(tsk); | 59 | __delayacct_tsk_init(tsk); |
| 60 | } | 60 | } |
| 61 | 61 | ||
| @@ -80,9 +80,7 @@ static inline void delayacct_blkio_end(void) | |||
| 80 | static inline int delayacct_add_tsk(struct taskstats *d, | 80 | static inline int delayacct_add_tsk(struct taskstats *d, |
| 81 | struct task_struct *tsk) | 81 | struct task_struct *tsk) |
| 82 | { | 82 | { |
| 83 | if (likely(!delayacct_on)) | 83 | if (!delayacct_on || !tsk->delays) |
| 84 | return -EINVAL; | ||
| 85 | if (!tsk->delays) | ||
| 86 | return 0; | 84 | return 0; |
| 87 | return __delayacct_add_tsk(d, tsk); | 85 | return __delayacct_add_tsk(d, tsk); |
| 88 | } | 86 | } |
diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h index 5607e6457a6..9f9cce7bd86 100644 --- a/include/linux/ext3_fs.h +++ b/include/linux/ext3_fs.h | |||
| @@ -492,6 +492,15 @@ static inline struct ext3_inode_info *EXT3_I(struct inode *inode) | |||
| 492 | { | 492 | { |
| 493 | return container_of(inode, struct ext3_inode_info, vfs_inode); | 493 | return container_of(inode, struct ext3_inode_info, vfs_inode); |
| 494 | } | 494 | } |
| 495 | |||
| 496 | static inline int ext3_valid_inum(struct super_block *sb, unsigned long ino) | ||
| 497 | { | ||
| 498 | return ino == EXT3_ROOT_INO || | ||
| 499 | ino == EXT3_JOURNAL_INO || | ||
| 500 | ino == EXT3_RESIZE_INO || | ||
| 501 | (ino >= EXT3_FIRST_INO(sb) && | ||
| 502 | ino <= le32_to_cpu(EXT3_SB(sb)->s_es->s_inodes_count)); | ||
| 503 | } | ||
| 495 | #else | 504 | #else |
| 496 | /* Assume that user mode programs are passing in an ext3fs superblock, not | 505 | /* Assume that user mode programs are passing in an ext3fs superblock, not |
| 497 | * a kernel struct super_block. This will allow us to call the feature-test | 506 | * a kernel struct super_block. This will allow us to call the feature-test |
diff --git a/include/linux/fb.h b/include/linux/fb.h index 405f44e44e5..4ad0673b199 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
| @@ -524,7 +524,7 @@ struct fb_event { | |||
| 524 | 524 | ||
| 525 | extern int fb_register_client(struct notifier_block *nb); | 525 | extern int fb_register_client(struct notifier_block *nb); |
| 526 | extern int fb_unregister_client(struct notifier_block *nb); | 526 | extern int fb_unregister_client(struct notifier_block *nb); |
| 527 | 527 | extern int fb_notifier_call_chain(unsigned long val, void *v); | |
| 528 | /* | 528 | /* |
| 529 | * Pixmap structure definition | 529 | * Pixmap structure definition |
| 530 | * | 530 | * |
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index cc5dec70c32..d4f219ffaa5 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h | |||
| @@ -67,7 +67,7 @@ static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir, | |||
| 67 | if (source) { | 67 | if (source) { |
| 68 | inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL, NULL); | 68 | inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL, NULL); |
| 69 | } | 69 | } |
| 70 | audit_inode_child(new_name, source, new_dir->i_ino); | 70 | audit_inode_child(new_name, source, new_dir); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | /* | 73 | /* |
| @@ -98,7 +98,7 @@ static inline void fsnotify_create(struct inode *inode, struct dentry *dentry) | |||
| 98 | inode_dir_notify(inode, DN_CREATE); | 98 | inode_dir_notify(inode, DN_CREATE); |
| 99 | inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name, | 99 | inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name, |
| 100 | dentry->d_inode); | 100 | dentry->d_inode); |
| 101 | audit_inode_child(dentry->d_name.name, dentry->d_inode, inode->i_ino); | 101 | audit_inode_child(dentry->d_name.name, dentry->d_inode, inode); |
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | /* | 104 | /* |
| @@ -109,7 +109,7 @@ static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry) | |||
| 109 | inode_dir_notify(inode, DN_CREATE); | 109 | inode_dir_notify(inode, DN_CREATE); |
| 110 | inotify_inode_queue_event(inode, IN_CREATE | IN_ISDIR, 0, | 110 | inotify_inode_queue_event(inode, IN_CREATE | IN_ISDIR, 0, |
| 111 | dentry->d_name.name, dentry->d_inode); | 111 | dentry->d_name.name, dentry->d_inode); |
| 112 | audit_inode_child(dentry->d_name.name, dentry->d_inode, inode->i_ino); | 112 | audit_inode_child(dentry->d_name.name, dentry->d_inode, inode); |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | /* | 115 | /* |
diff --git a/include/linux/irq.h b/include/linux/irq.h index b48eae32dc6..fbf6d901e9c 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
| @@ -47,8 +47,8 @@ | |||
| 47 | #define IRQ_WAITING 0x00200000 /* IRQ not yet seen - for autodetection */ | 47 | #define IRQ_WAITING 0x00200000 /* IRQ not yet seen - for autodetection */ |
| 48 | #define IRQ_LEVEL 0x00400000 /* IRQ level triggered */ | 48 | #define IRQ_LEVEL 0x00400000 /* IRQ level triggered */ |
| 49 | #define IRQ_MASKED 0x00800000 /* IRQ masked - shouldn't be seen again */ | 49 | #define IRQ_MASKED 0x00800000 /* IRQ masked - shouldn't be seen again */ |
| 50 | #define IRQ_PER_CPU 0x01000000 /* IRQ is per CPU */ | ||
| 50 | #ifdef CONFIG_IRQ_PER_CPU | 51 | #ifdef CONFIG_IRQ_PER_CPU |
| 51 | # define IRQ_PER_CPU 0x01000000 /* IRQ is per CPU */ | ||
| 52 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) | 52 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) |
| 53 | #else | 53 | #else |
| 54 | # define CHECK_IRQ_PER_CPU(var) 0 | 54 | # define CHECK_IRQ_PER_CPU(var) 0 |
| @@ -58,6 +58,7 @@ | |||
| 58 | #define IRQ_NOREQUEST 0x04000000 /* IRQ cannot be requested */ | 58 | #define IRQ_NOREQUEST 0x04000000 /* IRQ cannot be requested */ |
| 59 | #define IRQ_NOAUTOEN 0x08000000 /* IRQ will not be enabled on request irq */ | 59 | #define IRQ_NOAUTOEN 0x08000000 /* IRQ will not be enabled on request irq */ |
| 60 | #define IRQ_DELAYED_DISABLE 0x10000000 /* IRQ disable (masking) happens delayed. */ | 60 | #define IRQ_DELAYED_DISABLE 0x10000000 /* IRQ disable (masking) happens delayed. */ |
| 61 | #define IRQ_WAKEUP 0x20000000 /* IRQ triggers system wakeup */ | ||
| 61 | 62 | ||
| 62 | struct proc_dir_entry; | 63 | struct proc_dir_entry; |
| 63 | 64 | ||
| @@ -124,6 +125,7 @@ struct irq_chip { | |||
| 124 | * @action: the irq action chain | 125 | * @action: the irq action chain |
| 125 | * @status: status information | 126 | * @status: status information |
| 126 | * @depth: disable-depth, for nested irq_disable() calls | 127 | * @depth: disable-depth, for nested irq_disable() calls |
| 128 | * @wake_depth: enable depth, for multiple set_irq_wake() callers | ||
| 127 | * @irq_count: stats field to detect stalled irqs | 129 | * @irq_count: stats field to detect stalled irqs |
| 128 | * @irqs_unhandled: stats field for spurious unhandled interrupts | 130 | * @irqs_unhandled: stats field for spurious unhandled interrupts |
| 129 | * @lock: locking for SMP | 131 | * @lock: locking for SMP |
| @@ -147,6 +149,7 @@ struct irq_desc { | |||
| 147 | unsigned int status; /* IRQ status */ | 149 | unsigned int status; /* IRQ status */ |
| 148 | 150 | ||
| 149 | unsigned int depth; /* nested irq disables */ | 151 | unsigned int depth; /* nested irq disables */ |
| 152 | unsigned int wake_depth; /* nested wake enables */ | ||
| 150 | unsigned int irq_count; /* For detecting broken IRQs */ | 153 | unsigned int irq_count; /* For detecting broken IRQs */ |
| 151 | unsigned int irqs_unhandled; | 154 | unsigned int irqs_unhandled; |
| 152 | spinlock_t lock; | 155 | spinlock_t lock; |
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h index 043376920f5..329ebcffa10 100644 --- a/include/linux/jiffies.h +++ b/include/linux/jiffies.h | |||
| @@ -47,8 +47,8 @@ | |||
| 47 | * - (NOM / DEN) fits in (32 - LSH) bits. | 47 | * - (NOM / DEN) fits in (32 - LSH) bits. |
| 48 | * - (NOM % DEN) fits in (32 - LSH) bits. | 48 | * - (NOM % DEN) fits in (32 - LSH) bits. |
| 49 | */ | 49 | */ |
| 50 | #define SH_DIV(NOM,DEN,LSH) ( ((NOM / DEN) << LSH) \ | 50 | #define SH_DIV(NOM,DEN,LSH) ( (((NOM) / (DEN)) << (LSH)) \ |
| 51 | + (((NOM % DEN) << LSH) + DEN / 2) / DEN) | 51 | + ((((NOM) % (DEN)) << (LSH)) + (DEN) / 2) / (DEN)) |
| 52 | 52 | ||
| 53 | /* HZ is the requested value. ACTHZ is actual HZ ("<< 8" is for accuracy) */ | 53 | /* HZ is the requested value. ACTHZ is actual HZ ("<< 8" is for accuracy) */ |
| 54 | #define ACTHZ (SH_DIV (CLOCK_TICK_RATE, LATCH, 8)) | 54 | #define ACTHZ (SH_DIV (CLOCK_TICK_RATE, LATCH, 8)) |
diff --git a/include/linux/netfilter_bridge.h b/include/linux/netfilter_bridge.h index 31f02ba036c..10c13dc4665 100644 --- a/include/linux/netfilter_bridge.h +++ b/include/linux/netfilter_bridge.h | |||
| @@ -6,7 +6,6 @@ | |||
| 6 | 6 | ||
| 7 | #include <linux/netfilter.h> | 7 | #include <linux/netfilter.h> |
| 8 | #if defined(__KERNEL__) && defined(CONFIG_BRIDGE_NETFILTER) | 8 | #if defined(__KERNEL__) && defined(CONFIG_BRIDGE_NETFILTER) |
| 9 | #include <asm/atomic.h> | ||
| 10 | #include <linux/if_ether.h> | 9 | #include <linux/if_ether.h> |
| 11 | #endif | 10 | #endif |
| 12 | 11 | ||
diff --git a/include/linux/pmu.h b/include/linux/pmu.h index 2ed807ddc08..783177387ac 100644 --- a/include/linux/pmu.h +++ b/include/linux/pmu.h | |||
| @@ -231,7 +231,6 @@ extern struct pmu_battery_info pmu_batteries[PMU_MAX_BATTERIES]; | |||
| 231 | extern unsigned int pmu_power_flags; | 231 | extern unsigned int pmu_power_flags; |
| 232 | 232 | ||
| 233 | /* Backlight */ | 233 | /* Backlight */ |
| 234 | extern int disable_kernel_backlight; | 234 | extern void pmu_backlight_init(void); |
| 235 | extern void pmu_backlight_init(struct device_node*); | ||
| 236 | 235 | ||
| 237 | #endif /* __KERNEL__ */ | 236 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/security.h b/include/linux/security.h index f75303831d0..6bc2aad494f 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
| @@ -1109,6 +1109,16 @@ struct swap_info_struct; | |||
| 1109 | * @name contains the name of the security module being unstacked. | 1109 | * @name contains the name of the security module being unstacked. |
| 1110 | * @ops contains a pointer to the struct security_operations of the module to unstack. | 1110 | * @ops contains a pointer to the struct security_operations of the module to unstack. |
| 1111 | * | 1111 | * |
| 1112 | * @secid_to_secctx: | ||
| 1113 | * Convert secid to security context. | ||
| 1114 | * @secid contains the security ID. | ||
| 1115 | * @secdata contains the pointer that stores the converted security context. | ||
| 1116 | * | ||
| 1117 | * @release_secctx: | ||
| 1118 | * Release the security context. | ||
| 1119 | * @secdata contains the security context. | ||
| 1120 | * @seclen contains the length of the security context. | ||
| 1121 | * | ||
| 1112 | * This is the main security structure. | 1122 | * This is the main security structure. |
| 1113 | */ | 1123 | */ |
| 1114 | struct security_operations { | 1124 | struct security_operations { |
| @@ -1289,6 +1299,8 @@ struct security_operations { | |||
| 1289 | 1299 | ||
| 1290 | int (*getprocattr)(struct task_struct *p, char *name, void *value, size_t size); | 1300 | int (*getprocattr)(struct task_struct *p, char *name, void *value, size_t size); |
| 1291 | int (*setprocattr)(struct task_struct *p, char *name, void *value, size_t size); | 1301 | int (*setprocattr)(struct task_struct *p, char *name, void *value, size_t size); |
| 1302 | int (*secid_to_secctx)(u32 secid, char **secdata, u32 *seclen); | ||
| 1303 | void (*release_secctx)(char *secdata, u32 seclen); | ||
| 1292 | 1304 | ||
| 1293 | #ifdef CONFIG_SECURITY_NETWORK | 1305 | #ifdef CONFIG_SECURITY_NETWORK |
| 1294 | int (*unix_stream_connect) (struct socket * sock, | 1306 | int (*unix_stream_connect) (struct socket * sock, |
| @@ -1317,7 +1329,7 @@ struct security_operations { | |||
| 1317 | int (*socket_shutdown) (struct socket * sock, int how); | 1329 | int (*socket_shutdown) (struct socket * sock, int how); |
| 1318 | int (*socket_sock_rcv_skb) (struct sock * sk, struct sk_buff * skb); | 1330 | int (*socket_sock_rcv_skb) (struct sock * sk, struct sk_buff * skb); |
| 1319 | int (*socket_getpeersec_stream) (struct socket *sock, char __user *optval, int __user *optlen, unsigned len); | 1331 | int (*socket_getpeersec_stream) (struct socket *sock, char __user *optval, int __user *optlen, unsigned len); |
| 1320 | int (*socket_getpeersec_dgram) (struct sk_buff *skb, char **secdata, u32 *seclen); | 1332 | int (*socket_getpeersec_dgram) (struct socket *sock, struct sk_buff *skb, u32 *secid); |
| 1321 | int (*sk_alloc_security) (struct sock *sk, int family, gfp_t priority); | 1333 | int (*sk_alloc_security) (struct sock *sk, int family, gfp_t priority); |
| 1322 | void (*sk_free_security) (struct sock *sk); | 1334 | void (*sk_free_security) (struct sock *sk); |
| 1323 | unsigned int (*sk_getsid) (struct sock *sk, struct flowi *fl, u8 dir); | 1335 | unsigned int (*sk_getsid) (struct sock *sk, struct flowi *fl, u8 dir); |
| @@ -2059,6 +2071,16 @@ static inline int security_netlink_recv(struct sk_buff * skb, int cap) | |||
| 2059 | return security_ops->netlink_recv(skb, cap); | 2071 | return security_ops->netlink_recv(skb, cap); |
| 2060 | } | 2072 | } |
| 2061 | 2073 | ||
| 2074 | static inline int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) | ||
| 2075 | { | ||
| 2076 | return security_ops->secid_to_secctx(secid, secdata, seclen); | ||
| 2077 | } | ||
| 2078 | |||
| 2079 | static inline void security_release_secctx(char *secdata, u32 seclen) | ||
| 2080 | { | ||
| 2081 | return security_ops->release_secctx(secdata, seclen); | ||
| 2082 | } | ||
| 2083 | |||
| 2062 | /* prototypes */ | 2084 | /* prototypes */ |
| 2063 | extern int security_init (void); | 2085 | extern int security_init (void); |
| 2064 | extern int register_security (struct security_operations *ops); | 2086 | extern int register_security (struct security_operations *ops); |
| @@ -2725,6 +2747,14 @@ static inline void securityfs_remove(struct dentry *dentry) | |||
| 2725 | { | 2747 | { |
| 2726 | } | 2748 | } |
| 2727 | 2749 | ||
| 2750 | static inline int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) | ||
| 2751 | { | ||
| 2752 | return -EOPNOTSUPP; | ||
| 2753 | } | ||
| 2754 | |||
| 2755 | static inline void security_release_secctx(char *secdata, u32 seclen) | ||
| 2756 | { | ||
| 2757 | } | ||
| 2728 | #endif /* CONFIG_SECURITY */ | 2758 | #endif /* CONFIG_SECURITY */ |
| 2729 | 2759 | ||
| 2730 | #ifdef CONFIG_SECURITY_NETWORK | 2760 | #ifdef CONFIG_SECURITY_NETWORK |
| @@ -2840,10 +2870,9 @@ static inline int security_socket_getpeersec_stream(struct socket *sock, char __ | |||
| 2840 | return security_ops->socket_getpeersec_stream(sock, optval, optlen, len); | 2870 | return security_ops->socket_getpeersec_stream(sock, optval, optlen, len); |
| 2841 | } | 2871 | } |
| 2842 | 2872 | ||
| 2843 | static inline int security_socket_getpeersec_dgram(struct sk_buff *skb, char **secdata, | 2873 | static inline int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid) |
| 2844 | u32 *seclen) | ||
| 2845 | { | 2874 | { |
| 2846 | return security_ops->socket_getpeersec_dgram(skb, secdata, seclen); | 2875 | return security_ops->socket_getpeersec_dgram(sock, skb, secid); |
| 2847 | } | 2876 | } |
| 2848 | 2877 | ||
| 2849 | static inline int security_sk_alloc(struct sock *sk, int family, gfp_t priority) | 2878 | static inline int security_sk_alloc(struct sock *sk, int family, gfp_t priority) |
| @@ -2968,8 +2997,7 @@ static inline int security_socket_getpeersec_stream(struct socket *sock, char __ | |||
| 2968 | return -ENOPROTOOPT; | 2997 | return -ENOPROTOOPT; |
| 2969 | } | 2998 | } |
| 2970 | 2999 | ||
| 2971 | static inline int security_socket_getpeersec_dgram(struct sk_buff *skb, char **secdata, | 3000 | static inline int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid) |
| 2972 | u32 *seclen) | ||
| 2973 | { | 3001 | { |
| 2974 | return -ENOPROTOOPT; | 3002 | return -ENOPROTOOPT; |
| 2975 | } | 3003 | } |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 4307e764ef0..19c96d498e2 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -604,12 +604,17 @@ static inline __u32 skb_queue_len(const struct sk_buff_head *list_) | |||
| 604 | return list_->qlen; | 604 | return list_->qlen; |
| 605 | } | 605 | } |
| 606 | 606 | ||
| 607 | extern struct lock_class_key skb_queue_lock_key; | 607 | /* |
| 608 | 608 | * This function creates a split out lock class for each invocation; | |
| 609 | * this is needed for now since a whole lot of users of the skb-queue | ||
| 610 | * infrastructure in drivers have different locking usage (in hardirq) | ||
| 611 | * than the networking core (in softirq only). In the long run either the | ||
| 612 | * network layer or drivers should need annotation to consolidate the | ||
| 613 | * main types of usage into 3 classes. | ||
| 614 | */ | ||
| 609 | static inline void skb_queue_head_init(struct sk_buff_head *list) | 615 | static inline void skb_queue_head_init(struct sk_buff_head *list) |
| 610 | { | 616 | { |
| 611 | spin_lock_init(&list->lock); | 617 | spin_lock_init(&list->lock); |
| 612 | lockdep_set_class(&list->lock, &skb_queue_lock_key); | ||
| 613 | list->prev = list->next = (struct sk_buff *)list; | 618 | list->prev = list->next = (struct sk_buff *)list; |
| 614 | list->qlen = 0; | 619 | list->qlen = 0; |
| 615 | } | 620 | } |
| @@ -1104,6 +1109,28 @@ static inline struct sk_buff *dev_alloc_skb(unsigned int length) | |||
| 1104 | return __dev_alloc_skb(length, GFP_ATOMIC); | 1109 | return __dev_alloc_skb(length, GFP_ATOMIC); |
| 1105 | } | 1110 | } |
| 1106 | 1111 | ||
| 1112 | extern struct sk_buff *__netdev_alloc_skb(struct net_device *dev, | ||
| 1113 | unsigned int length, gfp_t gfp_mask); | ||
| 1114 | |||
| 1115 | /** | ||
| 1116 | * netdev_alloc_skb - allocate an skbuff for rx on a specific device | ||
| 1117 | * @dev: network device to receive on | ||
| 1118 | * @length: length to allocate | ||
| 1119 | * | ||
| 1120 | * Allocate a new &sk_buff and assign it a usage count of one. The | ||
| 1121 | * buffer has unspecified headroom built in. Users should allocate | ||
| 1122 | * the headroom they think they need without accounting for the | ||
| 1123 | * built in space. The built in space is used for optimisations. | ||
| 1124 | * | ||
| 1125 | * %NULL is returned if there is no free memory. Although this function | ||
| 1126 | * allocates memory it can be called from an interrupt. | ||
| 1127 | */ | ||
| 1128 | static inline struct sk_buff *netdev_alloc_skb(struct net_device *dev, | ||
| 1129 | unsigned int length) | ||
| 1130 | { | ||
| 1131 | return __netdev_alloc_skb(dev, length, GFP_ATOMIC); | ||
| 1132 | } | ||
| 1133 | |||
| 1107 | /** | 1134 | /** |
| 1108 | * skb_cow - copy header of skb when it is required | 1135 | * skb_cow - copy header of skb when it is required |
| 1109 | * @skb: buffer to cow | 1136 | * @skb: buffer to cow |
diff --git a/include/linux/usb.h b/include/linux/usb.h index c944e8f06a4..d2bd0c8e015 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -103,8 +103,7 @@ enum usb_interface_condition { | |||
| 103 | * @condition: binding state of the interface: not bound, binding | 103 | * @condition: binding state of the interface: not bound, binding |
| 104 | * (in probe()), bound to a driver, or unbinding (in disconnect()) | 104 | * (in probe()), bound to a driver, or unbinding (in disconnect()) |
| 105 | * @dev: driver model's view of this device | 105 | * @dev: driver model's view of this device |
| 106 | * @usb_dev: if an interface is bound to the USB major, this will point | 106 | * @class_dev: driver model's class view of this device. |
| 107 | * to the sysfs representation for that device. | ||
| 108 | * | 107 | * |
| 109 | * USB device drivers attach to interfaces on a physical device. Each | 108 | * USB device drivers attach to interfaces on a physical device. Each |
| 110 | * interface encapsulates a single high level function, such as feeding | 109 | * interface encapsulates a single high level function, such as feeding |
| @@ -144,7 +143,7 @@ struct usb_interface { | |||
| 144 | * bound to */ | 143 | * bound to */ |
| 145 | enum usb_interface_condition condition; /* state of binding */ | 144 | enum usb_interface_condition condition; /* state of binding */ |
| 146 | struct device dev; /* interface specific device info */ | 145 | struct device dev; /* interface specific device info */ |
| 147 | struct device *usb_dev; /* pointer to the usb class's device, if any */ | 146 | struct class_device *class_dev; |
| 148 | }; | 147 | }; |
| 149 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) | 148 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) |
| 150 | #define interface_to_usbdev(intf) \ | 149 | #define interface_to_usbdev(intf) \ |
| @@ -361,7 +360,7 @@ struct usb_device { | |||
| 361 | char *serial; /* iSerialNumber string, if present */ | 360 | char *serial; /* iSerialNumber string, if present */ |
| 362 | 361 | ||
| 363 | struct list_head filelist; | 362 | struct list_head filelist; |
| 364 | struct device *usbfs_dev; | 363 | struct class_device *class_dev; |
| 365 | struct dentry *usbfs_dentry; /* usbfs dentry entry for the device */ | 364 | struct dentry *usbfs_dentry; /* usbfs dentry entry for the device */ |
| 366 | 365 | ||
| 367 | /* | 366 | /* |
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h index f38f43f20fa..e7fc5fed5b9 100644 --- a/include/linux/usb_usual.h +++ b/include/linux/usb_usual.h | |||
| @@ -44,7 +44,9 @@ | |||
| 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) \ | 46 | US_FLAG(MAX_SECTORS_64, 0x00000400) \ |
| 47 | /* Sets max_sectors to 64 */ | 47 | /* Sets max_sectors to 64 */ \ |
| 48 | US_FLAG(IGNORE_DEVICE, 0x00000800) \ | ||
| 49 | /* Don't claim device */ | ||
| 48 | 50 | ||
| 49 | #define US_FLAG(name, value) US_FL_##name = value , | 51 | #define US_FLAG(name, value) US_FL_##name = value , |
| 50 | enum { US_DO_ALL_FLAGS }; | 52 | enum { US_DO_ALL_FLAGS }; |
diff --git a/include/linux/videodev.h b/include/linux/videodev.h index 41bc7e9603c..518c7a32175 100644 --- a/include/linux/videodev.h +++ b/include/linux/videodev.h | |||
| @@ -12,10 +12,11 @@ | |||
| 12 | #ifndef __LINUX_VIDEODEV_H | 12 | #ifndef __LINUX_VIDEODEV_H |
| 13 | #define __LINUX_VIDEODEV_H | 13 | #define __LINUX_VIDEODEV_H |
| 14 | 14 | ||
| 15 | #define HAVE_V4L1 1 | ||
| 16 | |||
| 17 | #include <linux/videodev2.h> | 15 | #include <linux/videodev2.h> |
| 18 | 16 | ||
| 17 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 18 | #define HAVE_V4L1 1 | ||
| 19 | |||
| 19 | struct video_capability | 20 | struct video_capability |
| 20 | { | 21 | { |
| 21 | char name[32]; | 22 | char name[32]; |
| @@ -336,6 +337,8 @@ struct video_code | |||
| 336 | #define VID_HARDWARE_SN9C102 38 | 337 | #define VID_HARDWARE_SN9C102 38 |
| 337 | #define VID_HARDWARE_ARV 39 | 338 | #define VID_HARDWARE_ARV 39 |
| 338 | 339 | ||
| 340 | #endif /* CONFIG_VIDEO_V4L1_COMPAT */ | ||
| 341 | |||
| 339 | #endif /* __LINUX_VIDEODEV_H */ | 342 | #endif /* __LINUX_VIDEODEV_H */ |
| 340 | 343 | ||
| 341 | /* | 344 | /* |
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index a62673dad76..b7146956a92 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
| @@ -716,7 +716,7 @@ struct v4l2_ext_control | |||
| 716 | __s64 value64; | 716 | __s64 value64; |
| 717 | void *reserved; | 717 | void *reserved; |
| 718 | }; | 718 | }; |
| 719 | }; | 719 | } __attribute__ ((packed)); |
| 720 | 720 | ||
| 721 | struct v4l2_ext_controls | 721 | struct v4l2_ext_controls |
| 722 | { | 722 | { |
