diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-12-07 16:35:17 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-12-07 16:35:17 -0500 |
commit | 21b4e736922f546e0f1aa7b9d6c442f309a2444a (patch) | |
tree | e1be8645297f8ebe87445251743ebcc52081a20d /include/linux | |
parent | 34161db6b14d984fb9b06c735b7b42f8803f6851 (diff) | |
parent | 68380b581383c028830f79ec2670f4a193854aa6 (diff) |
Merge branch 'master' of /home/trondmy/kernel/linux-2.6/ into merge_linus
Diffstat (limited to 'include/linux')
77 files changed, 929 insertions, 490 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index ff433126361f..e618b25b5add 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -221,6 +221,7 @@ unifdef-y += if_bridge.h | |||
221 | unifdef-y += if_ec.h | 221 | unifdef-y += if_ec.h |
222 | unifdef-y += if_eql.h | 222 | unifdef-y += if_eql.h |
223 | unifdef-y += if_ether.h | 223 | unifdef-y += if_ether.h |
224 | unifdef-y += if_fddi.h | ||
224 | unifdef-y += if_frad.h | 225 | unifdef-y += if_frad.h |
225 | unifdef-y += if_ltalk.h | 226 | unifdef-y += if_ltalk.h |
226 | unifdef-y += if_pppox.h | 227 | unifdef-y += if_pppox.h |
@@ -282,6 +283,7 @@ unifdef-y += nvram.h | |||
282 | unifdef-y += parport.h | 283 | unifdef-y += parport.h |
283 | unifdef-y += patchkey.h | 284 | unifdef-y += patchkey.h |
284 | unifdef-y += pci.h | 285 | unifdef-y += pci.h |
286 | unifdef-y += personality.h | ||
285 | unifdef-y += pktcdvd.h | 287 | unifdef-y += pktcdvd.h |
286 | unifdef-y += pmu.h | 288 | unifdef-y += pmu.h |
287 | unifdef-y += poll.h | 289 | unifdef-y += poll.h |
@@ -337,6 +339,7 @@ unifdef-y += videodev.h | |||
337 | unifdef-y += wait.h | 339 | unifdef-y += wait.h |
338 | unifdef-y += wanrouter.h | 340 | unifdef-y += wanrouter.h |
339 | unifdef-y += watchdog.h | 341 | unifdef-y += watchdog.h |
342 | unifdef-y += wireless.h | ||
340 | unifdef-y += xfrm.h | 343 | unifdef-y += xfrm.h |
341 | 344 | ||
342 | objhdr-y += version.h | 345 | objhdr-y += version.h |
diff --git a/include/linux/aio.h b/include/linux/aio.h index 9e350fd44d77..3372ec6bf53a 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
@@ -111,7 +111,6 @@ struct kiocb { | |||
111 | size_t ki_nbytes; /* copy of iocb->aio_nbytes */ | 111 | size_t ki_nbytes; /* copy of iocb->aio_nbytes */ |
112 | char __user *ki_buf; /* remaining iocb->aio_buf */ | 112 | char __user *ki_buf; /* remaining iocb->aio_buf */ |
113 | size_t ki_left; /* remaining bytes */ | 113 | size_t ki_left; /* remaining bytes */ |
114 | long ki_retried; /* just for testing */ | ||
115 | struct iovec ki_inline_vec; /* inline vector */ | 114 | struct iovec ki_inline_vec; /* inline vector */ |
116 | struct iovec *ki_iovec; | 115 | struct iovec *ki_iovec; |
117 | unsigned long ki_nr_segs; | 116 | unsigned long ki_nr_segs; |
@@ -238,7 +237,6 @@ do { \ | |||
238 | } while (0) | 237 | } while (0) |
239 | 238 | ||
240 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) | 239 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) |
241 | #define is_retried_kiocb(iocb) ((iocb)->ki_retried > 1) | ||
242 | 240 | ||
243 | #include <linux/aio_abi.h> | 241 | #include <linux/aio_abi.h> |
244 | 242 | ||
diff --git a/include/linux/audit.h b/include/linux/audit.h index b2ca666d9997..0e07db6cc0d0 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
@@ -101,6 +101,10 @@ | |||
101 | #define AUDIT_MAC_CIPSOV4_DEL 1408 /* NetLabel: del CIPSOv4 DOI entry */ | 101 | #define AUDIT_MAC_CIPSOV4_DEL 1408 /* NetLabel: del CIPSOv4 DOI entry */ |
102 | #define AUDIT_MAC_MAP_ADD 1409 /* NetLabel: add LSM domain mapping */ | 102 | #define AUDIT_MAC_MAP_ADD 1409 /* NetLabel: add LSM domain mapping */ |
103 | #define AUDIT_MAC_MAP_DEL 1410 /* NetLabel: del LSM domain mapping */ | 103 | #define AUDIT_MAC_MAP_DEL 1410 /* NetLabel: del LSM domain mapping */ |
104 | #define AUDIT_MAC_IPSEC_ADDSA 1411 /* Add a XFRM state */ | ||
105 | #define AUDIT_MAC_IPSEC_DELSA 1412 /* Delete a XFRM state */ | ||
106 | #define AUDIT_MAC_IPSEC_ADDSPD 1413 /* Add a XFRM policy */ | ||
107 | #define AUDIT_MAC_IPSEC_DELSPD 1414 /* Delete a XFRM policy */ | ||
104 | 108 | ||
105 | #define AUDIT_FIRST_KERN_ANOM_MSG 1700 | 109 | #define AUDIT_FIRST_KERN_ANOM_MSG 1700 |
106 | #define AUDIT_LAST_KERN_ANOM_MSG 1799 | 110 | #define AUDIT_LAST_KERN_ANOM_MSG 1799 |
@@ -377,6 +381,7 @@ extern void auditsc_get_stamp(struct audit_context *ctx, | |||
377 | struct timespec *t, unsigned int *serial); | 381 | struct timespec *t, unsigned int *serial); |
378 | extern int audit_set_loginuid(struct task_struct *task, uid_t loginuid); | 382 | extern int audit_set_loginuid(struct task_struct *task, uid_t loginuid); |
379 | extern uid_t audit_get_loginuid(struct audit_context *ctx); | 383 | extern uid_t audit_get_loginuid(struct audit_context *ctx); |
384 | extern void audit_log_task_context(struct audit_buffer *ab); | ||
380 | extern int __audit_ipc_obj(struct kern_ipc_perm *ipcp); | 385 | extern int __audit_ipc_obj(struct kern_ipc_perm *ipcp); |
381 | extern int __audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode); | 386 | extern int __audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode); |
382 | extern int audit_bprm(struct linux_binprm *bprm); | 387 | extern int audit_bprm(struct linux_binprm *bprm); |
@@ -449,6 +454,7 @@ extern int audit_n_rules; | |||
449 | #define audit_inode_update(i) do { ; } while (0) | 454 | #define audit_inode_update(i) do { ; } while (0) |
450 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) | 455 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) |
451 | #define audit_get_loginuid(c) ({ -1; }) | 456 | #define audit_get_loginuid(c) ({ -1; }) |
457 | #define audit_log_task_context(b) do { ; } while (0) | ||
452 | #define audit_ipc_obj(i) ({ 0; }) | 458 | #define audit_ipc_obj(i) ({ 0; }) |
453 | #define audit_ipc_set_perm(q,u,g,m) ({ 0; }) | 459 | #define audit_ipc_set_perm(q,u,g,m) ({ 0; }) |
454 | #define audit_bprm(p) ({ 0; }) | 460 | #define audit_bprm(p) ({ 0; }) |
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h index 31e9abb6d977..2275f2748708 100644 --- a/include/linux/bootmem.h +++ b/include/linux/bootmem.h | |||
@@ -119,8 +119,7 @@ extern void *alloc_large_system_hash(const char *tablename, | |||
119 | unsigned int *_hash_mask, | 119 | unsigned int *_hash_mask, |
120 | unsigned long limit); | 120 | unsigned long limit); |
121 | 121 | ||
122 | #define HASH_HIGHMEM 0x00000001 /* Consider highmem? */ | 122 | #define HASH_EARLY 0x00000001 /* Allocating during early boot? */ |
123 | #define HASH_EARLY 0x00000002 /* Allocating during early boot? */ | ||
124 | 123 | ||
125 | /* Only NUMA needs hash distribution. | 124 | /* Only NUMA needs hash distribution. |
126 | * IA64 is known to have sufficient vmalloc space. | 125 | * IA64 is known to have sufficient vmalloc space. |
diff --git a/include/linux/bottom_half.h b/include/linux/bottom_half.h new file mode 100644 index 000000000000..777dbf695d44 --- /dev/null +++ b/include/linux/bottom_half.h | |||
@@ -0,0 +1,10 @@ | |||
1 | #ifndef _LINUX_BH_H | ||
2 | #define _LINUX_BH_H | ||
3 | |||
4 | extern void local_bh_disable(void); | ||
5 | extern void __local_bh_enable(void); | ||
6 | extern void _local_bh_enable(void); | ||
7 | extern void local_bh_enable(void); | ||
8 | extern void local_bh_enable_ip(unsigned long ip); | ||
9 | |||
10 | #endif /* _LINUX_BH_H */ | ||
diff --git a/include/linux/carta_random32.h b/include/linux/carta_random32.h deleted file mode 100644 index f6f3bd9f20b5..000000000000 --- a/include/linux/carta_random32.h +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | /* | ||
2 | * Fast, simple, yet decent quality random number generator based on | ||
3 | * a paper by David G. Carta ("Two Fast Implementations of the | ||
4 | * `Minimal Standard' Random Number Generator," Communications of the | ||
5 | * ACM, January, 1990). | ||
6 | * | ||
7 | * Copyright (c) 2002-2006 Hewlett-Packard Development Company, L.P. | ||
8 | * Contributed by Stephane Eranian <eranian@hpl.hp.com> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or | ||
11 | * modify it under the terms of version 2 of the GNU General Public | ||
12 | * License as published by the Free Software Foundation. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
17 | * General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | ||
22 | * 02111-1307 USA | ||
23 | */ | ||
24 | #ifndef _LINUX_CARTA_RANDOM32_H_ | ||
25 | #define _LINUX_CARTA_RANDOM32_H_ | ||
26 | |||
27 | u64 carta_random32(u64 seed); | ||
28 | |||
29 | #endif /* _LINUX_CARTA_RANDOM32_H_ */ | ||
diff --git a/include/linux/cciss_ioctl.h b/include/linux/cciss_ioctl.h index 6e27f42e3a57..cb57c30081a8 100644 --- a/include/linux/cciss_ioctl.h +++ b/include/linux/cciss_ioctl.h | |||
@@ -80,7 +80,7 @@ typedef __u32 DriverVer_type; | |||
80 | #define HWORD __u16 | 80 | #define HWORD __u16 |
81 | #define DWORD __u32 | 81 | #define DWORD __u32 |
82 | 82 | ||
83 | #define CISS_MAX_LUN 16 | 83 | #define CISS_MAX_LUN 1024 |
84 | 84 | ||
85 | #define LEVEL2LUN 1 // index into Target(x) structure, due to byte swapping | 85 | #define LEVEL2LUN 1 // index into Target(x) structure, due to byte swapping |
86 | #define LEVEL3LUN 0 | 86 | #define LEVEL3LUN 0 |
diff --git a/include/linux/cdev.h b/include/linux/cdev.h index ee5f53f2ca15..f309b00e986e 100644 --- a/include/linux/cdev.h +++ b/include/linux/cdev.h | |||
@@ -2,6 +2,10 @@ | |||
2 | #define _LINUX_CDEV_H | 2 | #define _LINUX_CDEV_H |
3 | #ifdef __KERNEL__ | 3 | #ifdef __KERNEL__ |
4 | 4 | ||
5 | #include <linux/kobject.h> | ||
6 | #include <linux/kdev_t.h> | ||
7 | #include <linux/list.h> | ||
8 | |||
5 | struct cdev { | 9 | struct cdev { |
6 | struct kobject kobj; | 10 | struct kobject kobj; |
7 | struct module *owner; | 11 | struct module *owner; |
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index f02d71bf6894..bfb520212d71 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
@@ -24,10 +24,11 @@ | |||
24 | #include <linux/compiler.h> | 24 | #include <linux/compiler.h> |
25 | #include <linux/cpumask.h> | 25 | #include <linux/cpumask.h> |
26 | #include <asm/semaphore.h> | 26 | #include <asm/semaphore.h> |
27 | #include <linux/mutex.h> | ||
27 | 28 | ||
28 | struct cpu { | 29 | struct cpu { |
29 | int node_id; /* The node which contains the CPU */ | 30 | int node_id; /* The node which contains the CPU */ |
30 | int no_control; /* Should the sysfs control file be created? */ | 31 | int hotpluggable; /* creates sysfs control file if hotpluggable */ |
31 | struct sys_device sysdev; | 32 | struct sys_device sysdev; |
32 | }; | 33 | }; |
33 | 34 | ||
@@ -74,6 +75,17 @@ extern struct sysdev_class cpu_sysdev_class; | |||
74 | 75 | ||
75 | #ifdef CONFIG_HOTPLUG_CPU | 76 | #ifdef CONFIG_HOTPLUG_CPU |
76 | /* Stop CPUs going up and down. */ | 77 | /* Stop CPUs going up and down. */ |
78 | |||
79 | static inline void cpuhotplug_mutex_lock(struct mutex *cpu_hp_mutex) | ||
80 | { | ||
81 | mutex_lock(cpu_hp_mutex); | ||
82 | } | ||
83 | |||
84 | static inline void cpuhotplug_mutex_unlock(struct mutex *cpu_hp_mutex) | ||
85 | { | ||
86 | mutex_unlock(cpu_hp_mutex); | ||
87 | } | ||
88 | |||
77 | extern void lock_cpu_hotplug(void); | 89 | extern void lock_cpu_hotplug(void); |
78 | extern void unlock_cpu_hotplug(void); | 90 | extern void unlock_cpu_hotplug(void); |
79 | #define hotcpu_notifier(fn, pri) { \ | 91 | #define hotcpu_notifier(fn, pri) { \ |
@@ -85,17 +97,24 @@ extern void unlock_cpu_hotplug(void); | |||
85 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) | 97 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) |
86 | int cpu_down(unsigned int cpu); | 98 | int cpu_down(unsigned int cpu); |
87 | #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) | 99 | #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) |
88 | #else | 100 | |
101 | #else /* CONFIG_HOTPLUG_CPU */ | ||
102 | |||
103 | static inline void cpuhotplug_mutex_lock(struct mutex *cpu_hp_mutex) | ||
104 | { } | ||
105 | static inline void cpuhotplug_mutex_unlock(struct mutex *cpu_hp_mutex) | ||
106 | { } | ||
107 | |||
89 | #define lock_cpu_hotplug() do { } while (0) | 108 | #define lock_cpu_hotplug() do { } while (0) |
90 | #define unlock_cpu_hotplug() do { } while (0) | 109 | #define unlock_cpu_hotplug() do { } while (0) |
91 | #define lock_cpu_hotplug_interruptible() 0 | 110 | #define lock_cpu_hotplug_interruptible() 0 |
92 | #define hotcpu_notifier(fn, pri) do { } while (0) | 111 | #define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0) |
93 | #define register_hotcpu_notifier(nb) do { } while (0) | 112 | #define register_hotcpu_notifier(nb) do { (void)(nb); } while (0) |
94 | #define unregister_hotcpu_notifier(nb) do { } while (0) | 113 | #define unregister_hotcpu_notifier(nb) do { (void)(nb); } while (0) |
95 | 114 | ||
96 | /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */ | 115 | /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */ |
97 | static inline int cpu_is_offline(int cpu) { return 0; } | 116 | static inline int cpu_is_offline(int cpu) { return 0; } |
98 | #endif | 117 | #endif /* CONFIG_HOTPLUG_CPU */ |
99 | 118 | ||
100 | #ifdef CONFIG_SUSPEND_SMP | 119 | #ifdef CONFIG_SUSPEND_SMP |
101 | extern int disable_nonboot_cpus(void); | 120 | extern int disable_nonboot_cpus(void); |
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index 4d8adf663681..8821e1f75b44 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h | |||
@@ -23,6 +23,7 @@ extern void cpuset_fork(struct task_struct *p); | |||
23 | extern void cpuset_exit(struct task_struct *p); | 23 | extern void cpuset_exit(struct task_struct *p); |
24 | extern cpumask_t cpuset_cpus_allowed(struct task_struct *p); | 24 | extern cpumask_t cpuset_cpus_allowed(struct task_struct *p); |
25 | extern nodemask_t cpuset_mems_allowed(struct task_struct *p); | 25 | extern nodemask_t cpuset_mems_allowed(struct task_struct *p); |
26 | #define cpuset_current_mems_allowed (current->mems_allowed) | ||
26 | void cpuset_init_current_mems_allowed(void); | 27 | void cpuset_init_current_mems_allowed(void); |
27 | void cpuset_update_task_memory_state(void); | 28 | void cpuset_update_task_memory_state(void); |
28 | #define cpuset_nodes_subset_current_mems_allowed(nodes) \ | 29 | #define cpuset_nodes_subset_current_mems_allowed(nodes) \ |
@@ -45,7 +46,7 @@ extern int cpuset_excl_nodes_overlap(const struct task_struct *p); | |||
45 | extern int cpuset_memory_pressure_enabled; | 46 | extern int cpuset_memory_pressure_enabled; |
46 | extern void __cpuset_memory_pressure_bump(void); | 47 | extern void __cpuset_memory_pressure_bump(void); |
47 | 48 | ||
48 | extern struct file_operations proc_cpuset_operations; | 49 | extern const struct file_operations proc_cpuset_operations; |
49 | extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); | 50 | extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); |
50 | 51 | ||
51 | extern void cpuset_lock(void); | 52 | extern void cpuset_lock(void); |
@@ -83,6 +84,7 @@ static inline nodemask_t cpuset_mems_allowed(struct task_struct *p) | |||
83 | return node_possible_map; | 84 | return node_possible_map; |
84 | } | 85 | } |
85 | 86 | ||
87 | #define cpuset_current_mems_allowed (node_online_map) | ||
86 | static inline void cpuset_init_current_mems_allowed(void) {} | 88 | static inline void cpuset_init_current_mems_allowed(void) {} |
87 | static inline void cpuset_update_task_memory_state(void) {} | 89 | static inline void cpuset_update_task_memory_state(void) {} |
88 | #define cpuset_nodes_subset_current_mems_allowed(nodes) (1) | 90 | #define cpuset_nodes_subset_current_mems_allowed(nodes) (1) |
diff --git a/include/linux/crypto.h b/include/linux/crypto.h index 6485e9716b36..4aa9046601da 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h | |||
@@ -241,12 +241,8 @@ int crypto_unregister_alg(struct crypto_alg *alg); | |||
241 | * Algorithm query interface. | 241 | * Algorithm query interface. |
242 | */ | 242 | */ |
243 | #ifdef CONFIG_CRYPTO | 243 | #ifdef CONFIG_CRYPTO |
244 | int crypto_alg_available(const char *name, u32 flags) | ||
245 | __deprecated_for_modules; | ||
246 | int crypto_has_alg(const char *name, u32 type, u32 mask); | 244 | int crypto_has_alg(const char *name, u32 type, u32 mask); |
247 | #else | 245 | #else |
248 | static int crypto_alg_available(const char *name, u32 flags) | ||
249 | __deprecated_for_modules; | ||
250 | static inline int crypto_alg_available(const char *name, u32 flags) | 246 | static inline int crypto_alg_available(const char *name, u32 flags) |
251 | { | 247 | { |
252 | return 0; | 248 | return 0; |
@@ -707,16 +703,6 @@ static inline void crypto_cipher_decrypt_one(struct crypto_cipher *tfm, | |||
707 | dst, src); | 703 | dst, src); |
708 | } | 704 | } |
709 | 705 | ||
710 | void crypto_digest_init(struct crypto_tfm *tfm) __deprecated_for_modules; | ||
711 | void crypto_digest_update(struct crypto_tfm *tfm, | ||
712 | struct scatterlist *sg, unsigned int nsg) | ||
713 | __deprecated_for_modules; | ||
714 | void crypto_digest_final(struct crypto_tfm *tfm, u8 *out) | ||
715 | __deprecated_for_modules; | ||
716 | void crypto_digest_digest(struct crypto_tfm *tfm, | ||
717 | struct scatterlist *sg, unsigned int nsg, u8 *out) | ||
718 | __deprecated_for_modules; | ||
719 | |||
720 | static inline struct crypto_hash *__crypto_hash_cast(struct crypto_tfm *tfm) | 706 | static inline struct crypto_hash *__crypto_hash_cast(struct crypto_tfm *tfm) |
721 | { | 707 | { |
722 | return (struct crypto_hash *)tfm; | 708 | return (struct crypto_hash *)tfm; |
@@ -729,14 +715,6 @@ static inline struct crypto_hash *crypto_hash_cast(struct crypto_tfm *tfm) | |||
729 | return __crypto_hash_cast(tfm); | 715 | return __crypto_hash_cast(tfm); |
730 | } | 716 | } |
731 | 717 | ||
732 | static int crypto_digest_setkey(struct crypto_tfm *tfm, const u8 *key, | ||
733 | unsigned int keylen) __deprecated; | ||
734 | static inline int crypto_digest_setkey(struct crypto_tfm *tfm, | ||
735 | const u8 *key, unsigned int keylen) | ||
736 | { | ||
737 | return tfm->crt_hash.setkey(crypto_hash_cast(tfm), key, keylen); | ||
738 | } | ||
739 | |||
740 | static inline struct crypto_hash *crypto_alloc_hash(const char *alg_name, | 718 | static inline struct crypto_hash *crypto_alloc_hash(const char *alg_name, |
741 | u32 type, u32 mask) | 719 | u32 type, u32 mask) |
742 | { | 720 | { |
diff --git a/include/linux/debug_locks.h b/include/linux/debug_locks.h index 952bee79a8f3..a1c10b0c4cf0 100644 --- a/include/linux/debug_locks.h +++ b/include/linux/debug_locks.h | |||
@@ -24,7 +24,7 @@ extern int debug_locks_off(void); | |||
24 | int __ret = 0; \ | 24 | int __ret = 0; \ |
25 | \ | 25 | \ |
26 | if (unlikely(c)) { \ | 26 | if (unlikely(c)) { \ |
27 | if (debug_locks_off()) \ | 27 | if (debug_locks_silent || debug_locks_off()) \ |
28 | WARN_ON(1); \ | 28 | WARN_ON(1); \ |
29 | __ret = 1; \ | 29 | __ret = 1; \ |
30 | } \ | 30 | } \ |
diff --git a/include/linux/delayacct.h b/include/linux/delayacct.h index 561e2a77805c..55d1ca5e60f5 100644 --- a/include/linux/delayacct.h +++ b/include/linux/delayacct.h | |||
@@ -30,7 +30,7 @@ | |||
30 | #ifdef CONFIG_TASK_DELAY_ACCT | 30 | #ifdef CONFIG_TASK_DELAY_ACCT |
31 | 31 | ||
32 | extern int delayacct_on; /* Delay accounting turned on/off */ | 32 | extern int delayacct_on; /* Delay accounting turned on/off */ |
33 | extern kmem_cache_t *delayacct_cache; | 33 | extern struct kmem_cache *delayacct_cache; |
34 | extern void delayacct_init(void); | 34 | extern void delayacct_init(void); |
35 | extern void __delayacct_tsk_init(struct task_struct *); | 35 | extern void __delayacct_tsk_init(struct task_struct *); |
36 | extern void __delayacct_tsk_exit(struct task_struct *); | 36 | extern void __delayacct_tsk_exit(struct task_struct *); |
diff --git a/include/linux/device.h b/include/linux/device.h index 583a341e016c..49ab53ce92dc 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -371,6 +371,9 @@ struct device { | |||
371 | core doesn't touch it */ | 371 | core doesn't touch it */ |
372 | struct dev_pm_info power; | 372 | struct dev_pm_info power; |
373 | 373 | ||
374 | #ifdef CONFIG_NUMA | ||
375 | int numa_node; /* NUMA node this device is close to */ | ||
376 | #endif | ||
374 | u64 *dma_mask; /* dma mask (if dma'able device) */ | 377 | u64 *dma_mask; /* dma mask (if dma'able device) */ |
375 | u64 coherent_dma_mask;/* Like dma_mask, but for | 378 | u64 coherent_dma_mask;/* Like dma_mask, but for |
376 | alloc_coherent mappings as | 379 | alloc_coherent mappings as |
@@ -394,6 +397,25 @@ struct device { | |||
394 | void (*release)(struct device * dev); | 397 | void (*release)(struct device * dev); |
395 | }; | 398 | }; |
396 | 399 | ||
400 | #ifdef CONFIG_NUMA | ||
401 | static inline int dev_to_node(struct device *dev) | ||
402 | { | ||
403 | return dev->numa_node; | ||
404 | } | ||
405 | static inline void set_dev_node(struct device *dev, int node) | ||
406 | { | ||
407 | dev->numa_node = node; | ||
408 | } | ||
409 | #else | ||
410 | static inline int dev_to_node(struct device *dev) | ||
411 | { | ||
412 | return -1; | ||
413 | } | ||
414 | static inline void set_dev_node(struct device *dev, int node) | ||
415 | { | ||
416 | } | ||
417 | #endif | ||
418 | |||
397 | static inline void * | 419 | static inline void * |
398 | dev_get_drvdata (struct device *dev) | 420 | dev_get_drvdata (struct device *dev) |
399 | { | 421 | { |
diff --git a/include/linux/efi.h b/include/linux/efi.h index 66d621dbcb6c..df1c91855f0e 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h | |||
@@ -300,8 +300,9 @@ extern int efi_mem_attribute_range (unsigned long phys_addr, unsigned long size, | |||
300 | extern int __init efi_uart_console_only (void); | 300 | extern int __init efi_uart_console_only (void); |
301 | extern void efi_initialize_iomem_resources(struct resource *code_resource, | 301 | extern void efi_initialize_iomem_resources(struct resource *code_resource, |
302 | struct resource *data_resource); | 302 | struct resource *data_resource); |
303 | extern unsigned long __init efi_get_time(void); | 303 | extern unsigned long efi_get_time(void); |
304 | extern int __init efi_set_rtc_mmss(unsigned long nowtime); | 304 | extern int __init efi_set_rtc_mmss(unsigned long nowtime); |
305 | extern int is_available_memory(efi_memory_desc_t * md); | ||
305 | extern struct efi_memory_map memmap; | 306 | extern struct efi_memory_map memmap; |
306 | 307 | ||
307 | /** | 308 | /** |
diff --git a/include/linux/elf.h b/include/linux/elf.h index 743d5c8e6d36..60713e6ea297 100644 --- a/include/linux/elf.h +++ b/include/linux/elf.h | |||
@@ -6,6 +6,8 @@ | |||
6 | #include <linux/elf-em.h> | 6 | #include <linux/elf-em.h> |
7 | #include <asm/elf.h> | 7 | #include <asm/elf.h> |
8 | 8 | ||
9 | struct file; | ||
10 | |||
9 | #ifndef elf_read_implies_exec | 11 | #ifndef elf_read_implies_exec |
10 | /* Executables for which elf_read_implies_exec() returns TRUE will | 12 | /* Executables for which elf_read_implies_exec() returns TRUE will |
11 | have the READ_IMPLIES_EXEC personality flag set automatically. | 13 | have the READ_IMPLIES_EXEC personality flag set automatically. |
@@ -358,6 +360,7 @@ extern Elf32_Dyn _DYNAMIC []; | |||
358 | #define elfhdr elf32_hdr | 360 | #define elfhdr elf32_hdr |
359 | #define elf_phdr elf32_phdr | 361 | #define elf_phdr elf32_phdr |
360 | #define elf_note elf32_note | 362 | #define elf_note elf32_note |
363 | #define elf_addr_t Elf32_Off | ||
361 | 364 | ||
362 | #else | 365 | #else |
363 | 366 | ||
@@ -365,6 +368,7 @@ extern Elf64_Dyn _DYNAMIC []; | |||
365 | #define elfhdr elf64_hdr | 368 | #define elfhdr elf64_hdr |
366 | #define elf_phdr elf64_phdr | 369 | #define elf_phdr elf64_phdr |
367 | #define elf_note elf64_note | 370 | #define elf_note elf64_note |
371 | #define elf_addr_t Elf64_Off | ||
368 | 372 | ||
369 | #endif | 373 | #endif |
370 | 374 | ||
diff --git a/include/linux/ext3_jbd.h b/include/linux/ext3_jbd.h index ce0e6109aff0..8c43b13a02fe 100644 --- a/include/linux/ext3_jbd.h +++ b/include/linux/ext3_jbd.h | |||
@@ -109,74 +109,32 @@ int ext3_mark_inode_dirty(handle_t *handle, struct inode *inode); | |||
109 | * been done yet. | 109 | * been done yet. |
110 | */ | 110 | */ |
111 | 111 | ||
112 | void ext3_journal_abort_handle(const char *caller, const char *err_fn, | 112 | static inline void ext3_journal_release_buffer(handle_t *handle, |
113 | struct buffer_head *bh, handle_t *handle, int err); | 113 | struct buffer_head *bh) |
114 | |||
115 | static inline int | ||
116 | __ext3_journal_get_undo_access(const char *where, handle_t *handle, | ||
117 | struct buffer_head *bh) | ||
118 | { | 114 | { |
119 | int err = journal_get_undo_access(handle, bh); | 115 | journal_release_buffer(handle, bh); |
120 | if (err) | ||
121 | ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
122 | return err; | ||
123 | } | 116 | } |
124 | 117 | ||
125 | static inline int | 118 | void ext3_journal_abort_handle(const char *caller, const char *err_fn, |
126 | __ext3_journal_get_write_access(const char *where, handle_t *handle, | 119 | struct buffer_head *bh, handle_t *handle, int err); |
127 | struct buffer_head *bh) | ||
128 | { | ||
129 | int err = journal_get_write_access(handle, bh); | ||
130 | if (err) | ||
131 | ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
132 | return err; | ||
133 | } | ||
134 | 120 | ||
135 | static inline void | 121 | int __ext3_journal_get_undo_access(const char *where, handle_t *handle, |
136 | ext3_journal_release_buffer(handle_t *handle, struct buffer_head *bh) | 122 | struct buffer_head *bh); |
137 | { | ||
138 | journal_release_buffer(handle, bh); | ||
139 | } | ||
140 | 123 | ||
141 | static inline int | 124 | int __ext3_journal_get_write_access(const char *where, handle_t *handle, |
142 | __ext3_journal_forget(const char *where, handle_t *handle, struct buffer_head *bh) | 125 | struct buffer_head *bh); |
143 | { | ||
144 | int err = journal_forget(handle, bh); | ||
145 | if (err) | ||
146 | ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
147 | return err; | ||
148 | } | ||
149 | 126 | ||
150 | static inline int | 127 | int __ext3_journal_forget(const char *where, handle_t *handle, |
151 | __ext3_journal_revoke(const char *where, handle_t *handle, | 128 | struct buffer_head *bh); |
152 | unsigned long blocknr, struct buffer_head *bh) | ||
153 | { | ||
154 | int err = journal_revoke(handle, blocknr, bh); | ||
155 | if (err) | ||
156 | ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
157 | return err; | ||
158 | } | ||
159 | 129 | ||
160 | static inline int | 130 | int __ext3_journal_revoke(const char *where, handle_t *handle, |
161 | __ext3_journal_get_create_access(const char *where, | 131 | unsigned long blocknr, struct buffer_head *bh); |
162 | handle_t *handle, struct buffer_head *bh) | ||
163 | { | ||
164 | int err = journal_get_create_access(handle, bh); | ||
165 | if (err) | ||
166 | ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
167 | return err; | ||
168 | } | ||
169 | 132 | ||
170 | static inline int | 133 | int __ext3_journal_get_create_access(const char *where, |
171 | __ext3_journal_dirty_metadata(const char *where, | 134 | handle_t *handle, struct buffer_head *bh); |
172 | handle_t *handle, struct buffer_head *bh) | ||
173 | { | ||
174 | int err = journal_dirty_metadata(handle, bh); | ||
175 | if (err) | ||
176 | ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
177 | return err; | ||
178 | } | ||
179 | 135 | ||
136 | int __ext3_journal_dirty_metadata(const char *where, | ||
137 | handle_t *handle, struct buffer_head *bh); | ||
180 | 138 | ||
181 | #define ext3_journal_get_undo_access(handle, bh) \ | 139 | #define ext3_journal_get_undo_access(handle, bh) \ |
182 | __ext3_journal_get_undo_access(__FUNCTION__, (handle), (bh)) | 140 | __ext3_journal_get_undo_access(__FUNCTION__, (handle), (bh)) |
diff --git a/include/linux/ext4_jbd2.h b/include/linux/ext4_jbd2.h index 72dd631912e4..d716e6392cf6 100644 --- a/include/linux/ext4_jbd2.h +++ b/include/linux/ext4_jbd2.h | |||
@@ -114,74 +114,32 @@ int ext4_mark_inode_dirty(handle_t *handle, struct inode *inode); | |||
114 | * been done yet. | 114 | * been done yet. |
115 | */ | 115 | */ |
116 | 116 | ||
117 | void ext4_journal_abort_handle(const char *caller, const char *err_fn, | 117 | static inline void ext4_journal_release_buffer(handle_t *handle, |
118 | struct buffer_head *bh, handle_t *handle, int err); | 118 | struct buffer_head *bh) |
119 | |||
120 | static inline int | ||
121 | __ext4_journal_get_undo_access(const char *where, handle_t *handle, | ||
122 | struct buffer_head *bh) | ||
123 | { | 119 | { |
124 | int err = jbd2_journal_get_undo_access(handle, bh); | 120 | jbd2_journal_release_buffer(handle, bh); |
125 | if (err) | ||
126 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
127 | return err; | ||
128 | } | 121 | } |
129 | 122 | ||
130 | static inline int | 123 | void ext4_journal_abort_handle(const char *caller, const char *err_fn, |
131 | __ext4_journal_get_write_access(const char *where, handle_t *handle, | 124 | struct buffer_head *bh, handle_t *handle, int err); |
132 | struct buffer_head *bh) | ||
133 | { | ||
134 | int err = jbd2_journal_get_write_access(handle, bh); | ||
135 | if (err) | ||
136 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
137 | return err; | ||
138 | } | ||
139 | 125 | ||
140 | static inline void | 126 | int __ext4_journal_get_undo_access(const char *where, handle_t *handle, |
141 | ext4_journal_release_buffer(handle_t *handle, struct buffer_head *bh) | 127 | struct buffer_head *bh); |
142 | { | ||
143 | jbd2_journal_release_buffer(handle, bh); | ||
144 | } | ||
145 | 128 | ||
146 | static inline int | 129 | int __ext4_journal_get_write_access(const char *where, handle_t *handle, |
147 | __ext4_journal_forget(const char *where, handle_t *handle, struct buffer_head *bh) | 130 | struct buffer_head *bh); |
148 | { | ||
149 | int err = jbd2_journal_forget(handle, bh); | ||
150 | if (err) | ||
151 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
152 | return err; | ||
153 | } | ||
154 | 131 | ||
155 | static inline int | 132 | int __ext4_journal_forget(const char *where, handle_t *handle, |
156 | __ext4_journal_revoke(const char *where, handle_t *handle, | 133 | struct buffer_head *bh); |
157 | ext4_fsblk_t blocknr, struct buffer_head *bh) | ||
158 | { | ||
159 | int err = jbd2_journal_revoke(handle, blocknr, bh); | ||
160 | if (err) | ||
161 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
162 | return err; | ||
163 | } | ||
164 | 134 | ||
165 | static inline int | 135 | int __ext4_journal_revoke(const char *where, handle_t *handle, |
166 | __ext4_journal_get_create_access(const char *where, | 136 | ext4_fsblk_t blocknr, struct buffer_head *bh); |
167 | handle_t *handle, struct buffer_head *bh) | ||
168 | { | ||
169 | int err = jbd2_journal_get_create_access(handle, bh); | ||
170 | if (err) | ||
171 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
172 | return err; | ||
173 | } | ||
174 | 137 | ||
175 | static inline int | 138 | int __ext4_journal_get_create_access(const char *where, |
176 | __ext4_journal_dirty_metadata(const char *where, | 139 | handle_t *handle, struct buffer_head *bh); |
177 | handle_t *handle, struct buffer_head *bh) | ||
178 | { | ||
179 | int err = jbd2_journal_dirty_metadata(handle, bh); | ||
180 | if (err) | ||
181 | ext4_journal_abort_handle(where, __FUNCTION__, bh, handle,err); | ||
182 | return err; | ||
183 | } | ||
184 | 140 | ||
141 | int __ext4_journal_dirty_metadata(const char *where, | ||
142 | handle_t *handle, struct buffer_head *bh); | ||
185 | 143 | ||
186 | #define ext4_journal_get_undo_access(handle, bh) \ | 144 | #define ext4_journal_get_undo_access(handle, bh) \ |
187 | __ext4_journal_get_undo_access(__FUNCTION__, (handle), (bh)) | 145 | __ext4_journal_get_undo_access(__FUNCTION__, (handle), (bh)) |
diff --git a/include/linux/file.h b/include/linux/file.h index 74183e6f7f45..6e77b9177f9e 100644 --- a/include/linux/file.h +++ b/include/linux/file.h | |||
@@ -64,6 +64,8 @@ struct files_struct { | |||
64 | 64 | ||
65 | #define files_fdtable(files) (rcu_dereference((files)->fdt)) | 65 | #define files_fdtable(files) (rcu_dereference((files)->fdt)) |
66 | 66 | ||
67 | extern struct kmem_cache *filp_cachep; | ||
68 | |||
67 | extern void FASTCALL(__fput(struct file *)); | 69 | extern void FASTCALL(__fput(struct file *)); |
68 | extern void FASTCALL(fput(struct file *)); | 70 | extern void FASTCALL(fput(struct file *)); |
69 | 71 | ||
@@ -114,4 +116,6 @@ struct files_struct *get_files_struct(struct task_struct *); | |||
114 | void FASTCALL(put_files_struct(struct files_struct *fs)); | 116 | void FASTCALL(put_files_struct(struct files_struct *fs)); |
115 | void reset_files_struct(struct task_struct *, struct files_struct *); | 117 | void reset_files_struct(struct task_struct *, struct files_struct *); |
116 | 118 | ||
119 | extern struct kmem_cache *files_cachep; | ||
120 | |||
117 | #endif /* __LINUX_FILE_H */ | 121 | #endif /* __LINUX_FILE_H */ |
diff --git a/include/linux/freezer.h b/include/linux/freezer.h new file mode 100644 index 000000000000..6e05e3e7ce39 --- /dev/null +++ b/include/linux/freezer.h | |||
@@ -0,0 +1,87 @@ | |||
1 | /* Freezer declarations */ | ||
2 | |||
3 | #ifdef CONFIG_PM | ||
4 | /* | ||
5 | * Check if a process has been frozen | ||
6 | */ | ||
7 | static inline int frozen(struct task_struct *p) | ||
8 | { | ||
9 | return p->flags & PF_FROZEN; | ||
10 | } | ||
11 | |||
12 | /* | ||
13 | * Check if there is a request to freeze a process | ||
14 | */ | ||
15 | static inline int freezing(struct task_struct *p) | ||
16 | { | ||
17 | return p->flags & PF_FREEZE; | ||
18 | } | ||
19 | |||
20 | /* | ||
21 | * Request that a process be frozen | ||
22 | * FIXME: SMP problem. We may not modify other process' flags! | ||
23 | */ | ||
24 | static inline void freeze(struct task_struct *p) | ||
25 | { | ||
26 | p->flags |= PF_FREEZE; | ||
27 | } | ||
28 | |||
29 | /* | ||
30 | * Sometimes we may need to cancel the previous 'freeze' request | ||
31 | */ | ||
32 | static inline void do_not_freeze(struct task_struct *p) | ||
33 | { | ||
34 | p->flags &= ~PF_FREEZE; | ||
35 | } | ||
36 | |||
37 | /* | ||
38 | * Wake up a frozen process | ||
39 | */ | ||
40 | static inline int thaw_process(struct task_struct *p) | ||
41 | { | ||
42 | if (frozen(p)) { | ||
43 | p->flags &= ~PF_FROZEN; | ||
44 | wake_up_process(p); | ||
45 | return 1; | ||
46 | } | ||
47 | return 0; | ||
48 | } | ||
49 | |||
50 | /* | ||
51 | * freezing is complete, mark process as frozen | ||
52 | */ | ||
53 | static inline void frozen_process(struct task_struct *p) | ||
54 | { | ||
55 | p->flags = (p->flags & ~PF_FREEZE) | PF_FROZEN; | ||
56 | } | ||
57 | |||
58 | extern void refrigerator(void); | ||
59 | extern int freeze_processes(void); | ||
60 | extern void thaw_processes(void); | ||
61 | |||
62 | static inline int try_to_freeze(void) | ||
63 | { | ||
64 | if (freezing(current)) { | ||
65 | refrigerator(); | ||
66 | return 1; | ||
67 | } else | ||
68 | return 0; | ||
69 | } | ||
70 | |||
71 | extern void thaw_some_processes(int all); | ||
72 | |||
73 | #else | ||
74 | static inline int frozen(struct task_struct *p) { return 0; } | ||
75 | static inline int freezing(struct task_struct *p) { return 0; } | ||
76 | static inline void freeze(struct task_struct *p) { BUG(); } | ||
77 | static inline int thaw_process(struct task_struct *p) { return 1; } | ||
78 | static inline void frozen_process(struct task_struct *p) { BUG(); } | ||
79 | |||
80 | static inline void refrigerator(void) {} | ||
81 | static inline int freeze_processes(void) { BUG(); return 0; } | ||
82 | static inline void thaw_processes(void) {} | ||
83 | |||
84 | static inline int try_to_freeze(void) { return 0; } | ||
85 | |||
86 | |||
87 | #endif | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index cac7b1ef9543..70b99fbb560b 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -543,19 +543,22 @@ struct inode { | |||
543 | struct list_head i_dentry; | 543 | struct list_head i_dentry; |
544 | unsigned long i_ino; | 544 | unsigned long i_ino; |
545 | atomic_t i_count; | 545 | atomic_t i_count; |
546 | umode_t i_mode; | ||
547 | unsigned int i_nlink; | 546 | unsigned int i_nlink; |
548 | uid_t i_uid; | 547 | uid_t i_uid; |
549 | gid_t i_gid; | 548 | gid_t i_gid; |
550 | dev_t i_rdev; | 549 | dev_t i_rdev; |
550 | unsigned long i_version; | ||
551 | loff_t i_size; | 551 | loff_t i_size; |
552 | #ifdef __NEED_I_SIZE_ORDERED | ||
553 | seqcount_t i_size_seqcount; | ||
554 | #endif | ||
552 | struct timespec i_atime; | 555 | struct timespec i_atime; |
553 | struct timespec i_mtime; | 556 | struct timespec i_mtime; |
554 | struct timespec i_ctime; | 557 | struct timespec i_ctime; |
555 | unsigned int i_blkbits; | 558 | unsigned int i_blkbits; |
556 | unsigned long i_version; | ||
557 | blkcnt_t i_blocks; | 559 | blkcnt_t i_blocks; |
558 | unsigned short i_bytes; | 560 | unsigned short i_bytes; |
561 | umode_t i_mode; | ||
559 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ | 562 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ |
560 | struct mutex i_mutex; | 563 | struct mutex i_mutex; |
561 | struct rw_semaphore i_alloc_sem; | 564 | struct rw_semaphore i_alloc_sem; |
@@ -598,9 +601,6 @@ struct inode { | |||
598 | void *i_security; | 601 | void *i_security; |
599 | #endif | 602 | #endif |
600 | void *i_private; /* fs or device private pointer */ | 603 | void *i_private; /* fs or device private pointer */ |
601 | #ifdef __NEED_I_SIZE_ORDERED | ||
602 | seqcount_t i_size_seqcount; | ||
603 | #endif | ||
604 | }; | 604 | }; |
605 | 605 | ||
606 | /* | 606 | /* |
@@ -636,7 +636,7 @@ extern void inode_double_unlock(struct inode *inode1, struct inode *inode2); | |||
636 | * cmpxchg8b without the need of the lock prefix). For SMP compiles | 636 | * cmpxchg8b without the need of the lock prefix). For SMP compiles |
637 | * and 64bit archs it makes no difference if preempt is enabled or not. | 637 | * and 64bit archs it makes no difference if preempt is enabled or not. |
638 | */ | 638 | */ |
639 | static inline loff_t i_size_read(struct inode *inode) | 639 | static inline loff_t i_size_read(const struct inode *inode) |
640 | { | 640 | { |
641 | #if BITS_PER_LONG==32 && defined(CONFIG_SMP) | 641 | #if BITS_PER_LONG==32 && defined(CONFIG_SMP) |
642 | loff_t i_size; | 642 | loff_t i_size; |
@@ -679,12 +679,12 @@ static inline void i_size_write(struct inode *inode, loff_t i_size) | |||
679 | #endif | 679 | #endif |
680 | } | 680 | } |
681 | 681 | ||
682 | static inline unsigned iminor(struct inode *inode) | 682 | static inline unsigned iminor(const struct inode *inode) |
683 | { | 683 | { |
684 | return MINOR(inode->i_rdev); | 684 | return MINOR(inode->i_rdev); |
685 | } | 685 | } |
686 | 686 | ||
687 | static inline unsigned imajor(struct inode *inode) | 687 | static inline unsigned imajor(const struct inode *inode) |
688 | { | 688 | { |
689 | return MAJOR(inode->i_rdev); | 689 | return MAJOR(inode->i_rdev); |
690 | } | 690 | } |
@@ -1481,7 +1481,9 @@ extern char * getname(const char __user *); | |||
1481 | extern void __init vfs_caches_init_early(void); | 1481 | extern void __init vfs_caches_init_early(void); |
1482 | extern void __init vfs_caches_init(unsigned long); | 1482 | extern void __init vfs_caches_init(unsigned long); |
1483 | 1483 | ||
1484 | #define __getname() kmem_cache_alloc(names_cachep, SLAB_KERNEL) | 1484 | extern struct kmem_cache *names_cachep; |
1485 | |||
1486 | #define __getname() kmem_cache_alloc(names_cachep, GFP_KERNEL) | ||
1485 | #define __putname(name) kmem_cache_free(names_cachep, (void *)(name)) | 1487 | #define __putname(name) kmem_cache_free(names_cachep, (void *)(name)) |
1486 | #ifndef CONFIG_AUDITSYSCALL | 1488 | #ifndef CONFIG_AUDITSYSCALL |
1487 | #define putname(name) __putname(name) | 1489 | #define putname(name) __putname(name) |
diff --git a/include/linux/fs_struct.h b/include/linux/fs_struct.h index c623d12a486e..11a36ceddf73 100644 --- a/include/linux/fs_struct.h +++ b/include/linux/fs_struct.h | |||
@@ -18,6 +18,8 @@ struct fs_struct { | |||
18 | .umask = 0022, \ | 18 | .umask = 0022, \ |
19 | } | 19 | } |
20 | 20 | ||
21 | extern struct kmem_cache *fs_cachep; | ||
22 | |||
21 | extern void exit_fs(struct task_struct *); | 23 | extern void exit_fs(struct task_struct *); |
22 | extern void set_fs_altroot(void); | 24 | extern void set_fs_altroot(void); |
23 | extern void set_fs_root(struct fs_struct *, struct vfsmount *, struct dentry *); | 25 | extern void set_fs_root(struct fs_struct *, struct vfsmount *, struct dentry *); |
diff --git a/include/linux/fuse.h b/include/linux/fuse.h index 9fc48a674b82..534744efe30d 100644 --- a/include/linux/fuse.h +++ b/include/linux/fuse.h | |||
@@ -15,7 +15,7 @@ | |||
15 | #define FUSE_KERNEL_VERSION 7 | 15 | #define FUSE_KERNEL_VERSION 7 |
16 | 16 | ||
17 | /** Minor version number of this interface */ | 17 | /** Minor version number of this interface */ |
18 | #define FUSE_KERNEL_MINOR_VERSION 7 | 18 | #define FUSE_KERNEL_MINOR_VERSION 8 |
19 | 19 | ||
20 | /** The node ID of the root inode */ | 20 | /** The node ID of the root inode */ |
21 | #define FUSE_ROOT_ID 1 | 21 | #define FUSE_ROOT_ID 1 |
@@ -92,6 +92,11 @@ struct fuse_file_lock { | |||
92 | #define FUSE_ASYNC_READ (1 << 0) | 92 | #define FUSE_ASYNC_READ (1 << 0) |
93 | #define FUSE_POSIX_LOCKS (1 << 1) | 93 | #define FUSE_POSIX_LOCKS (1 << 1) |
94 | 94 | ||
95 | /** | ||
96 | * Release flags | ||
97 | */ | ||
98 | #define FUSE_RELEASE_FLUSH (1 << 0) | ||
99 | |||
95 | enum fuse_opcode { | 100 | enum fuse_opcode { |
96 | FUSE_LOOKUP = 1, | 101 | FUSE_LOOKUP = 1, |
97 | FUSE_FORGET = 2, /* no reply */ | 102 | FUSE_FORGET = 2, /* no reply */ |
@@ -127,6 +132,8 @@ enum fuse_opcode { | |||
127 | FUSE_ACCESS = 34, | 132 | FUSE_ACCESS = 34, |
128 | FUSE_CREATE = 35, | 133 | FUSE_CREATE = 35, |
129 | FUSE_INTERRUPT = 36, | 134 | FUSE_INTERRUPT = 36, |
135 | FUSE_BMAP = 37, | ||
136 | FUSE_DESTROY = 38, | ||
130 | }; | 137 | }; |
131 | 138 | ||
132 | /* The read buffer is required to be at least 8k, but may be much larger */ | 139 | /* The read buffer is required to be at least 8k, but may be much larger */ |
@@ -205,12 +212,13 @@ struct fuse_open_out { | |||
205 | struct fuse_release_in { | 212 | struct fuse_release_in { |
206 | __u64 fh; | 213 | __u64 fh; |
207 | __u32 flags; | 214 | __u32 flags; |
208 | __u32 padding; | 215 | __u32 release_flags; |
216 | __u64 lock_owner; | ||
209 | }; | 217 | }; |
210 | 218 | ||
211 | struct fuse_flush_in { | 219 | struct fuse_flush_in { |
212 | __u64 fh; | 220 | __u64 fh; |
213 | __u32 flush_flags; | 221 | __u32 unused; |
214 | __u32 padding; | 222 | __u32 padding; |
215 | __u64 lock_owner; | 223 | __u64 lock_owner; |
216 | }; | 224 | }; |
@@ -296,6 +304,16 @@ struct fuse_interrupt_in { | |||
296 | __u64 unique; | 304 | __u64 unique; |
297 | }; | 305 | }; |
298 | 306 | ||
307 | struct fuse_bmap_in { | ||
308 | __u64 block; | ||
309 | __u32 blocksize; | ||
310 | __u32 padding; | ||
311 | }; | ||
312 | |||
313 | struct fuse_bmap_out { | ||
314 | __u64 block; | ||
315 | }; | ||
316 | |||
299 | struct fuse_in_header { | 317 | struct fuse_in_header { |
300 | __u32 len; | 318 | __u32 len; |
301 | __u32 opcode; | 319 | __u32 opcode; |
diff --git a/include/linux/genetlink.h b/include/linux/genetlink.h index 9049dc65ae51..f7a93770e1be 100644 --- a/include/linux/genetlink.h +++ b/include/linux/genetlink.h | |||
@@ -17,6 +17,9 @@ struct genlmsghdr { | |||
17 | #define GENL_HDRLEN NLMSG_ALIGN(sizeof(struct genlmsghdr)) | 17 | #define GENL_HDRLEN NLMSG_ALIGN(sizeof(struct genlmsghdr)) |
18 | 18 | ||
19 | #define GENL_ADMIN_PERM 0x01 | 19 | #define GENL_ADMIN_PERM 0x01 |
20 | #define GENL_CMD_CAP_DO 0x02 | ||
21 | #define GENL_CMD_CAP_DUMP 0x04 | ||
22 | #define GENL_CMD_CAP_HASPOL 0x08 | ||
20 | 23 | ||
21 | /* | 24 | /* |
22 | * List of reserved static generic netlink identifiers: | 25 | * List of reserved static generic netlink identifiers: |
@@ -58,9 +61,6 @@ enum { | |||
58 | CTRL_ATTR_OP_UNSPEC, | 61 | CTRL_ATTR_OP_UNSPEC, |
59 | CTRL_ATTR_OP_ID, | 62 | CTRL_ATTR_OP_ID, |
60 | CTRL_ATTR_OP_FLAGS, | 63 | CTRL_ATTR_OP_FLAGS, |
61 | CTRL_ATTR_OP_POLICY, | ||
62 | CTRL_ATTR_OP_DOIT, | ||
63 | CTRL_ATTR_OP_DUMPIT, | ||
64 | __CTRL_ATTR_OP_MAX, | 64 | __CTRL_ATTR_OP_MAX, |
65 | }; | 65 | }; |
66 | 66 | ||
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index bf2b6bc3f6fd..00c314aedab7 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
@@ -116,6 +116,9 @@ static inline enum zone_type gfp_zone(gfp_t flags) | |||
116 | #ifndef HAVE_ARCH_FREE_PAGE | 116 | #ifndef HAVE_ARCH_FREE_PAGE |
117 | static inline void arch_free_page(struct page *page, int order) { } | 117 | static inline void arch_free_page(struct page *page, int order) { } |
118 | #endif | 118 | #endif |
119 | #ifndef HAVE_ARCH_ALLOC_PAGE | ||
120 | static inline void arch_alloc_page(struct page *page, int order) { } | ||
121 | #endif | ||
119 | 122 | ||
120 | extern struct page * | 123 | extern struct page * |
121 | FASTCALL(__alloc_pages(gfp_t, unsigned int, struct zonelist *)); | 124 | FASTCALL(__alloc_pages(gfp_t, unsigned int, struct zonelist *)); |
diff --git a/include/linux/gfs2_ondisk.h b/include/linux/gfs2_ondisk.h index a7ae7c177cac..8b7e4c1e32ae 100644 --- a/include/linux/gfs2_ondisk.h +++ b/include/linux/gfs2_ondisk.h | |||
@@ -54,8 +54,13 @@ struct gfs2_inum { | |||
54 | __be64 no_addr; | 54 | __be64 no_addr; |
55 | }; | 55 | }; |
56 | 56 | ||
57 | static inline int gfs2_inum_equal(const struct gfs2_inum *ino1, | 57 | struct gfs2_inum_host { |
58 | const struct gfs2_inum *ino2) | 58 | __u64 no_formal_ino; |
59 | __u64 no_addr; | ||
60 | }; | ||
61 | |||
62 | static inline int gfs2_inum_equal(const struct gfs2_inum_host *ino1, | ||
63 | const struct gfs2_inum_host *ino2) | ||
59 | { | 64 | { |
60 | return ino1->no_formal_ino == ino2->no_formal_ino && | 65 | return ino1->no_formal_ino == ino2->no_formal_ino && |
61 | ino1->no_addr == ino2->no_addr; | 66 | ino1->no_addr == ino2->no_addr; |
@@ -89,6 +94,12 @@ struct gfs2_meta_header { | |||
89 | __be32 __pad1; /* Was incarnation number in gfs1 */ | 94 | __be32 __pad1; /* Was incarnation number in gfs1 */ |
90 | }; | 95 | }; |
91 | 96 | ||
97 | struct gfs2_meta_header_host { | ||
98 | __u32 mh_magic; | ||
99 | __u32 mh_type; | ||
100 | __u32 mh_format; | ||
101 | }; | ||
102 | |||
92 | /* | 103 | /* |
93 | * super-block structure | 104 | * super-block structure |
94 | * | 105 | * |
@@ -128,6 +139,23 @@ struct gfs2_sb { | |||
128 | /* In gfs1, quota and license dinodes followed */ | 139 | /* In gfs1, quota and license dinodes followed */ |
129 | }; | 140 | }; |
130 | 141 | ||
142 | struct gfs2_sb_host { | ||
143 | struct gfs2_meta_header_host sb_header; | ||
144 | |||
145 | __u32 sb_fs_format; | ||
146 | __u32 sb_multihost_format; | ||
147 | |||
148 | __u32 sb_bsize; | ||
149 | __u32 sb_bsize_shift; | ||
150 | |||
151 | struct gfs2_inum_host sb_master_dir; /* Was jindex dinode in gfs1 */ | ||
152 | struct gfs2_inum_host sb_root_dir; | ||
153 | |||
154 | char sb_lockproto[GFS2_LOCKNAME_LEN]; | ||
155 | char sb_locktable[GFS2_LOCKNAME_LEN]; | ||
156 | /* In gfs1, quota and license dinodes followed */ | ||
157 | }; | ||
158 | |||
131 | /* | 159 | /* |
132 | * resource index structure | 160 | * resource index structure |
133 | */ | 161 | */ |
@@ -145,6 +173,14 @@ struct gfs2_rindex { | |||
145 | __u8 ri_reserved[64]; | 173 | __u8 ri_reserved[64]; |
146 | }; | 174 | }; |
147 | 175 | ||
176 | struct gfs2_rindex_host { | ||
177 | __u64 ri_addr; /* grp block disk address */ | ||
178 | __u64 ri_data0; /* first data location */ | ||
179 | __u32 ri_length; /* length of rgrp header in fs blocks */ | ||
180 | __u32 ri_data; /* num of data blocks in rgrp */ | ||
181 | __u32 ri_bitbytes; /* number of bytes in data bitmaps */ | ||
182 | }; | ||
183 | |||
148 | /* | 184 | /* |
149 | * resource group header structure | 185 | * resource group header structure |
150 | */ | 186 | */ |
@@ -176,6 +212,13 @@ struct gfs2_rgrp { | |||
176 | __u8 rg_reserved[80]; /* Several fields from gfs1 now reserved */ | 212 | __u8 rg_reserved[80]; /* Several fields from gfs1 now reserved */ |
177 | }; | 213 | }; |
178 | 214 | ||
215 | struct gfs2_rgrp_host { | ||
216 | __u32 rg_flags; | ||
217 | __u32 rg_free; | ||
218 | __u32 rg_dinodes; | ||
219 | __u64 rg_igeneration; | ||
220 | }; | ||
221 | |||
179 | /* | 222 | /* |
180 | * quota structure | 223 | * quota structure |
181 | */ | 224 | */ |
@@ -187,6 +230,12 @@ struct gfs2_quota { | |||
187 | __u8 qu_reserved[64]; | 230 | __u8 qu_reserved[64]; |
188 | }; | 231 | }; |
189 | 232 | ||
233 | struct gfs2_quota_host { | ||
234 | __u64 qu_limit; | ||
235 | __u64 qu_warn; | ||
236 | __u64 qu_value; | ||
237 | }; | ||
238 | |||
190 | /* | 239 | /* |
191 | * dinode structure | 240 | * dinode structure |
192 | */ | 241 | */ |
@@ -270,6 +319,27 @@ struct gfs2_dinode { | |||
270 | __u8 di_reserved[56]; | 319 | __u8 di_reserved[56]; |
271 | }; | 320 | }; |
272 | 321 | ||
322 | struct gfs2_dinode_host { | ||
323 | __u64 di_size; /* number of bytes in file */ | ||
324 | __u64 di_blocks; /* number of blocks in file */ | ||
325 | |||
326 | /* This section varies from gfs1. Padding added to align with | ||
327 | * remainder of dinode | ||
328 | */ | ||
329 | __u64 di_goal_meta; /* rgrp to alloc from next */ | ||
330 | __u64 di_goal_data; /* data block goal */ | ||
331 | __u64 di_generation; /* generation number for NFS */ | ||
332 | |||
333 | __u32 di_flags; /* GFS2_DIF_... */ | ||
334 | __u16 di_height; /* height of metadata */ | ||
335 | |||
336 | /* These only apply to directories */ | ||
337 | __u16 di_depth; /* Number of bits in the table */ | ||
338 | __u32 di_entries; /* The number of entries in the directory */ | ||
339 | |||
340 | __u64 di_eattr; /* extended attribute block number */ | ||
341 | }; | ||
342 | |||
273 | /* | 343 | /* |
274 | * directory structure - many of these per directory file | 344 | * directory structure - many of these per directory file |
275 | */ | 345 | */ |
@@ -344,6 +414,16 @@ struct gfs2_log_header { | |||
344 | __be32 lh_hash; | 414 | __be32 lh_hash; |
345 | }; | 415 | }; |
346 | 416 | ||
417 | struct gfs2_log_header_host { | ||
418 | struct gfs2_meta_header_host lh_header; | ||
419 | |||
420 | __u64 lh_sequence; /* Sequence number of this transaction */ | ||
421 | __u32 lh_flags; /* GFS2_LOG_HEAD_... */ | ||
422 | __u32 lh_tail; /* Block number of log tail */ | ||
423 | __u32 lh_blkno; | ||
424 | __u32 lh_hash; | ||
425 | }; | ||
426 | |||
347 | /* | 427 | /* |
348 | * Log type descriptor | 428 | * Log type descriptor |
349 | */ | 429 | */ |
@@ -384,6 +464,11 @@ struct gfs2_inum_range { | |||
384 | __be64 ir_length; | 464 | __be64 ir_length; |
385 | }; | 465 | }; |
386 | 466 | ||
467 | struct gfs2_inum_range_host { | ||
468 | __u64 ir_start; | ||
469 | __u64 ir_length; | ||
470 | }; | ||
471 | |||
387 | /* | 472 | /* |
388 | * Statfs change | 473 | * Statfs change |
389 | * Describes an change to the pool of free and allocated | 474 | * Describes an change to the pool of free and allocated |
@@ -396,6 +481,12 @@ struct gfs2_statfs_change { | |||
396 | __be64 sc_dinodes; | 481 | __be64 sc_dinodes; |
397 | }; | 482 | }; |
398 | 483 | ||
484 | struct gfs2_statfs_change_host { | ||
485 | __u64 sc_total; | ||
486 | __u64 sc_free; | ||
487 | __u64 sc_dinodes; | ||
488 | }; | ||
489 | |||
399 | /* | 490 | /* |
400 | * Quota change | 491 | * Quota change |
401 | * Describes an allocation change for a particular | 492 | * Describes an allocation change for a particular |
@@ -410,33 +501,38 @@ struct gfs2_quota_change { | |||
410 | __be32 qc_id; | 501 | __be32 qc_id; |
411 | }; | 502 | }; |
412 | 503 | ||
504 | struct gfs2_quota_change_host { | ||
505 | __u64 qc_change; | ||
506 | __u32 qc_flags; /* GFS2_QCF_... */ | ||
507 | __u32 qc_id; | ||
508 | }; | ||
509 | |||
413 | #ifdef __KERNEL__ | 510 | #ifdef __KERNEL__ |
414 | /* Translation functions */ | 511 | /* Translation functions */ |
415 | 512 | ||
416 | extern void gfs2_inum_in(struct gfs2_inum *no, const void *buf); | 513 | extern void gfs2_inum_in(struct gfs2_inum_host *no, const void *buf); |
417 | extern void gfs2_inum_out(const struct gfs2_inum *no, void *buf); | 514 | extern void gfs2_inum_out(const struct gfs2_inum_host *no, void *buf); |
418 | extern void gfs2_sb_in(struct gfs2_sb *sb, const void *buf); | 515 | extern void gfs2_sb_in(struct gfs2_sb_host *sb, const void *buf); |
419 | extern void gfs2_rindex_in(struct gfs2_rindex *ri, const void *buf); | 516 | extern void gfs2_rindex_in(struct gfs2_rindex_host *ri, const void *buf); |
420 | extern void gfs2_rindex_out(const struct gfs2_rindex *ri, void *buf); | 517 | extern void gfs2_rindex_out(const struct gfs2_rindex_host *ri, void *buf); |
421 | extern void gfs2_rgrp_in(struct gfs2_rgrp *rg, const void *buf); | 518 | extern void gfs2_rgrp_in(struct gfs2_rgrp_host *rg, const void *buf); |
422 | extern void gfs2_rgrp_out(const struct gfs2_rgrp *rg, void *buf); | 519 | extern void gfs2_rgrp_out(const struct gfs2_rgrp_host *rg, void *buf); |
423 | extern void gfs2_quota_in(struct gfs2_quota *qu, const void *buf); | 520 | extern void gfs2_quota_in(struct gfs2_quota_host *qu, const void *buf); |
424 | extern void gfs2_quota_out(const struct gfs2_quota *qu, void *buf); | 521 | struct gfs2_inode; |
425 | extern void gfs2_dinode_in(struct gfs2_dinode *di, const void *buf); | 522 | extern void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf); |
426 | extern void gfs2_dinode_out(const struct gfs2_dinode *di, void *buf); | ||
427 | extern void gfs2_ea_header_in(struct gfs2_ea_header *ea, const void *buf); | 523 | extern void gfs2_ea_header_in(struct gfs2_ea_header *ea, const void *buf); |
428 | extern void gfs2_ea_header_out(const struct gfs2_ea_header *ea, void *buf); | 524 | extern void gfs2_ea_header_out(const struct gfs2_ea_header *ea, void *buf); |
429 | extern void gfs2_log_header_in(struct gfs2_log_header *lh, const void *buf); | 525 | extern void gfs2_log_header_in(struct gfs2_log_header_host *lh, const void *buf); |
430 | extern void gfs2_inum_range_in(struct gfs2_inum_range *ir, const void *buf); | 526 | extern void gfs2_inum_range_in(struct gfs2_inum_range_host *ir, const void *buf); |
431 | extern void gfs2_inum_range_out(const struct gfs2_inum_range *ir, void *buf); | 527 | extern void gfs2_inum_range_out(const struct gfs2_inum_range_host *ir, void *buf); |
432 | extern void gfs2_statfs_change_in(struct gfs2_statfs_change *sc, const void *buf); | 528 | extern void gfs2_statfs_change_in(struct gfs2_statfs_change_host *sc, const void *buf); |
433 | extern void gfs2_statfs_change_out(const struct gfs2_statfs_change *sc, void *buf); | 529 | extern void gfs2_statfs_change_out(const struct gfs2_statfs_change_host *sc, void *buf); |
434 | extern void gfs2_quota_change_in(struct gfs2_quota_change *qc, const void *buf); | 530 | extern void gfs2_quota_change_in(struct gfs2_quota_change_host *qc, const void *buf); |
435 | 531 | ||
436 | /* Printing functions */ | 532 | /* Printing functions */ |
437 | 533 | ||
438 | extern void gfs2_rindex_print(const struct gfs2_rindex *ri); | 534 | extern void gfs2_rindex_print(const struct gfs2_rindex_host *ri); |
439 | extern void gfs2_dinode_print(const struct gfs2_dinode *di); | 535 | extern void gfs2_dinode_print(const struct gfs2_inode *ip); |
440 | 536 | ||
441 | #endif /* __KERNEL__ */ | 537 | #endif /* __KERNEL__ */ |
442 | 538 | ||
diff --git a/include/linux/highmem.h b/include/linux/highmem.h index fd7d12daa94f..3d8768b619e9 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h | |||
@@ -3,6 +3,7 @@ | |||
3 | 3 | ||
4 | #include <linux/fs.h> | 4 | #include <linux/fs.h> |
5 | #include <linux/mm.h> | 5 | #include <linux/mm.h> |
6 | #include <linux/uaccess.h> | ||
6 | 7 | ||
7 | #include <asm/cacheflush.h> | 8 | #include <asm/cacheflush.h> |
8 | 9 | ||
@@ -41,9 +42,10 @@ static inline void *kmap(struct page *page) | |||
41 | 42 | ||
42 | #define kunmap(page) do { (void) (page); } while (0) | 43 | #define kunmap(page) do { (void) (page); } while (0) |
43 | 44 | ||
44 | #define kmap_atomic(page, idx) page_address(page) | 45 | #define kmap_atomic(page, idx) \ |
45 | #define kunmap_atomic(addr, idx) do { } while (0) | 46 | ({ pagefault_disable(); page_address(page); }) |
46 | #define kmap_atomic_pfn(pfn, idx) page_address(pfn_to_page(pfn)) | 47 | #define kunmap_atomic(addr, idx) do { pagefault_enable(); } while (0) |
48 | #define kmap_atomic_pfn(pfn, idx) kmap_atomic(pfn_to_page(pfn), (idx)) | ||
47 | #define kmap_atomic_to_page(ptr) virt_to_page(ptr) | 49 | #define kmap_atomic_to_page(ptr) virt_to_page(ptr) |
48 | #endif | 50 | #endif |
49 | 51 | ||
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index ace64e57e17f..a60995afe334 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -35,6 +35,7 @@ extern int sysctl_hugetlb_shm_group; | |||
35 | 35 | ||
36 | pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr); | 36 | pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr); |
37 | pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr); | 37 | pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr); |
38 | int huge_pmd_unshare(struct mm_struct *mm, unsigned long *addr, pte_t *ptep); | ||
38 | struct page *follow_huge_addr(struct mm_struct *mm, unsigned long address, | 39 | struct page *follow_huge_addr(struct mm_struct *mm, unsigned long address, |
39 | int write); | 40 | int write); |
40 | struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, | 41 | struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, |
diff --git a/include/linux/i2o.h b/include/linux/i2o.h index 1fb02e17f6f6..52f53e2e70c3 100644 --- a/include/linux/i2o.h +++ b/include/linux/i2o.h | |||
@@ -490,7 +490,7 @@ struct i2o_dma { | |||
490 | */ | 490 | */ |
491 | struct i2o_pool { | 491 | struct i2o_pool { |
492 | char *name; | 492 | char *name; |
493 | kmem_cache_t *slab; | 493 | struct kmem_cache *slab; |
494 | mempool_t *mempool; | 494 | mempool_t *mempool; |
495 | }; | 495 | }; |
496 | 496 | ||
@@ -986,7 +986,8 @@ extern void i2o_driver_unregister(struct i2o_driver *); | |||
986 | 986 | ||
987 | /** | 987 | /** |
988 | * i2o_driver_notify_controller_add - Send notification of added controller | 988 | * i2o_driver_notify_controller_add - Send notification of added controller |
989 | * to a single I2O driver | 989 | * @drv: I2O driver |
990 | * @c: I2O controller | ||
990 | * | 991 | * |
991 | * Send notification of added controller to a single registered driver. | 992 | * Send notification of added controller to a single registered driver. |
992 | */ | 993 | */ |
@@ -998,8 +999,9 @@ static inline void i2o_driver_notify_controller_add(struct i2o_driver *drv, | |||
998 | }; | 999 | }; |
999 | 1000 | ||
1000 | /** | 1001 | /** |
1001 | * i2o_driver_notify_controller_remove - Send notification of removed | 1002 | * i2o_driver_notify_controller_remove - Send notification of removed controller |
1002 | * controller to a single I2O driver | 1003 | * @drv: I2O driver |
1004 | * @c: I2O controller | ||
1003 | * | 1005 | * |
1004 | * Send notification of removed controller to a single registered driver. | 1006 | * Send notification of removed controller to a single registered driver. |
1005 | */ | 1007 | */ |
@@ -1011,8 +1013,9 @@ static inline void i2o_driver_notify_controller_remove(struct i2o_driver *drv, | |||
1011 | }; | 1013 | }; |
1012 | 1014 | ||
1013 | /** | 1015 | /** |
1014 | * i2o_driver_notify_device_add - Send notification of added device to a | 1016 | * i2o_driver_notify_device_add - Send notification of added device |
1015 | * single I2O driver | 1017 | * @drv: I2O driver |
1018 | * @i2o_dev: the added i2o_device | ||
1016 | * | 1019 | * |
1017 | * Send notification of added device to a single registered driver. | 1020 | * Send notification of added device to a single registered driver. |
1018 | */ | 1021 | */ |
@@ -1025,7 +1028,8 @@ static inline void i2o_driver_notify_device_add(struct i2o_driver *drv, | |||
1025 | 1028 | ||
1026 | /** | 1029 | /** |
1027 | * i2o_driver_notify_device_remove - Send notification of removed device | 1030 | * i2o_driver_notify_device_remove - Send notification of removed device |
1028 | * to a single I2O driver | 1031 | * @drv: I2O driver |
1032 | * @i2o_dev: the added i2o_device | ||
1029 | * | 1033 | * |
1030 | * Send notification of removed device to a single registered driver. | 1034 | * Send notification of removed device to a single registered driver. |
1031 | */ | 1035 | */ |
@@ -1148,7 +1152,7 @@ static inline void i2o_msg_post(struct i2o_controller *c, | |||
1148 | /** | 1152 | /** |
1149 | * i2o_msg_post_wait - Post and wait a message and wait until return | 1153 | * i2o_msg_post_wait - Post and wait a message and wait until return |
1150 | * @c: controller | 1154 | * @c: controller |
1151 | * @m: message to post | 1155 | * @msg: message to post |
1152 | * @timeout: time in seconds to wait | 1156 | * @timeout: time in seconds to wait |
1153 | * | 1157 | * |
1154 | * This API allows an OSM to post a message and then be told whether or | 1158 | * This API allows an OSM to post a message and then be told whether or |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 33c5daacc743..733790d4f7db 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -73,7 +73,7 @@ | |||
73 | extern struct nsproxy init_nsproxy; | 73 | extern struct nsproxy init_nsproxy; |
74 | #define INIT_NSPROXY(nsproxy) { \ | 74 | #define INIT_NSPROXY(nsproxy) { \ |
75 | .count = ATOMIC_INIT(1), \ | 75 | .count = ATOMIC_INIT(1), \ |
76 | .nslock = SPIN_LOCK_UNLOCKED, \ | 76 | .nslock = __SPIN_LOCK_UNLOCKED(nsproxy.nslock), \ |
77 | .uts_ns = &init_uts_ns, \ | 77 | .uts_ns = &init_uts_ns, \ |
78 | .namespace = NULL, \ | 78 | .namespace = NULL, \ |
79 | INIT_IPC_NS(ipc_ns) \ | 79 | INIT_IPC_NS(ipc_ns) \ |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 5b83e7b59621..de7593f4e895 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/hardirq.h> | 11 | #include <linux/hardirq.h> |
12 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
13 | #include <linux/irqflags.h> | 13 | #include <linux/irqflags.h> |
14 | #include <linux/bottom_half.h> | ||
14 | #include <asm/atomic.h> | 15 | #include <asm/atomic.h> |
15 | #include <asm/ptrace.h> | 16 | #include <asm/ptrace.h> |
16 | #include <asm/system.h> | 17 | #include <asm/system.h> |
@@ -217,12 +218,6 @@ static inline void __deprecated save_and_cli(unsigned long *x) | |||
217 | #define save_and_cli(x) save_and_cli(&x) | 218 | #define save_and_cli(x) save_and_cli(&x) |
218 | #endif /* CONFIG_SMP */ | 219 | #endif /* CONFIG_SMP */ |
219 | 220 | ||
220 | extern void local_bh_disable(void); | ||
221 | extern void __local_bh_enable(void); | ||
222 | extern void _local_bh_enable(void); | ||
223 | extern void local_bh_enable(void); | ||
224 | extern void local_bh_enable_ip(unsigned long ip); | ||
225 | |||
226 | /* PLEASE, avoid to allocate new softirqs, if you need not _really_ high | 221 | /* PLEASE, avoid to allocate new softirqs, if you need not _really_ high |
227 | frequency threaded job scheduling. For almost all the purposes | 222 | frequency threaded job scheduling. For almost all the purposes |
228 | tasklets are more than enough. F.e. all serial device BHs et | 223 | tasklets are more than enough. F.e. all serial device BHs et |
diff --git a/include/linux/ipmi.h b/include/linux/ipmi.h index 796ca009fd46..7a9db390c56a 100644 --- a/include/linux/ipmi.h +++ b/include/linux/ipmi.h | |||
@@ -208,6 +208,15 @@ struct kernel_ipmi_msg | |||
208 | code as the first byte of the incoming data, unlike a response. */ | 208 | code as the first byte of the incoming data, unlike a response. */ |
209 | 209 | ||
210 | 210 | ||
211 | /* | ||
212 | * Modes for ipmi_set_maint_mode() and the userland IOCTL. The AUTO | ||
213 | * setting is the default and means it will be set on certain | ||
214 | * commands. Hard setting it on and off will override automatic | ||
215 | * operation. | ||
216 | */ | ||
217 | #define IPMI_MAINTENANCE_MODE_AUTO 0 | ||
218 | #define IPMI_MAINTENANCE_MODE_OFF 1 | ||
219 | #define IPMI_MAINTENANCE_MODE_ON 2 | ||
211 | 220 | ||
212 | #ifdef __KERNEL__ | 221 | #ifdef __KERNEL__ |
213 | 222 | ||
@@ -374,6 +383,35 @@ int ipmi_unregister_for_cmd(ipmi_user_t user, | |||
374 | unsigned int chans); | 383 | unsigned int chans); |
375 | 384 | ||
376 | /* | 385 | /* |
386 | * Go into a mode where the driver will not autonomously attempt to do | ||
387 | * things with the interface. It will still respond to attentions and | ||
388 | * interrupts, and it will expect that commands will complete. It | ||
389 | * will not automatcially check for flags, events, or things of that | ||
390 | * nature. | ||
391 | * | ||
392 | * This is primarily used for firmware upgrades. The idea is that | ||
393 | * when you go into firmware upgrade mode, you do this operation | ||
394 | * and the driver will not attempt to do anything but what you tell | ||
395 | * it or what the BMC asks for. | ||
396 | * | ||
397 | * Note that if you send a command that resets the BMC, the driver | ||
398 | * will still expect a response from that command. So the BMC should | ||
399 | * reset itself *after* the response is sent. Resetting before the | ||
400 | * response is just silly. | ||
401 | * | ||
402 | * If in auto maintenance mode, the driver will automatically go into | ||
403 | * maintenance mode for 30 seconds if it sees a cold reset, a warm | ||
404 | * reset, or a firmware NetFN. This means that code that uses only | ||
405 | * firmware NetFN commands to do upgrades will work automatically | ||
406 | * without change, assuming it sends a message every 30 seconds or | ||
407 | * less. | ||
408 | * | ||
409 | * See the IPMI_MAINTENANCE_MODE_xxx defines for what the mode means. | ||
410 | */ | ||
411 | int ipmi_get_maintenance_mode(ipmi_user_t user); | ||
412 | int ipmi_set_maintenance_mode(ipmi_user_t user, int mode); | ||
413 | |||
414 | /* | ||
377 | * Allow run-to-completion mode to be set for the interface of | 415 | * Allow run-to-completion mode to be set for the interface of |
378 | * a specific user. | 416 | * a specific user. |
379 | */ | 417 | */ |
@@ -656,4 +694,11 @@ struct ipmi_timing_parms | |||
656 | #define IPMICTL_GET_TIMING_PARMS_CMD _IOR(IPMI_IOC_MAGIC, 23, \ | 694 | #define IPMICTL_GET_TIMING_PARMS_CMD _IOR(IPMI_IOC_MAGIC, 23, \ |
657 | struct ipmi_timing_parms) | 695 | struct ipmi_timing_parms) |
658 | 696 | ||
697 | /* | ||
698 | * Set the maintenance mode. See ipmi_set_maintenance_mode() above | ||
699 | * for a description of what this does. | ||
700 | */ | ||
701 | #define IPMICTL_GET_MAINTENANCE_MODE_CMD _IOR(IPMI_IOC_MAGIC, 30, int) | ||
702 | #define IPMICTL_SET_MAINTENANCE_MODE_CMD _IOW(IPMI_IOC_MAGIC, 31, int) | ||
703 | |||
659 | #endif /* __LINUX_IPMI_H */ | 704 | #endif /* __LINUX_IPMI_H */ |
diff --git a/include/linux/ipmi_msgdefs.h b/include/linux/ipmi_msgdefs.h index 4d04d8b58a0a..b56a158d587a 100644 --- a/include/linux/ipmi_msgdefs.h +++ b/include/linux/ipmi_msgdefs.h | |||
@@ -46,6 +46,8 @@ | |||
46 | #define IPMI_NETFN_APP_REQUEST 0x06 | 46 | #define IPMI_NETFN_APP_REQUEST 0x06 |
47 | #define IPMI_NETFN_APP_RESPONSE 0x07 | 47 | #define IPMI_NETFN_APP_RESPONSE 0x07 |
48 | #define IPMI_GET_DEVICE_ID_CMD 0x01 | 48 | #define IPMI_GET_DEVICE_ID_CMD 0x01 |
49 | #define IPMI_COLD_RESET_CMD 0x02 | ||
50 | #define IPMI_WARM_RESET_CMD 0x03 | ||
49 | #define IPMI_CLEAR_MSG_FLAGS_CMD 0x30 | 51 | #define IPMI_CLEAR_MSG_FLAGS_CMD 0x30 |
50 | #define IPMI_GET_DEVICE_GUID_CMD 0x08 | 52 | #define IPMI_GET_DEVICE_GUID_CMD 0x08 |
51 | #define IPMI_GET_MSG_FLAGS_CMD 0x31 | 53 | #define IPMI_GET_MSG_FLAGS_CMD 0x31 |
@@ -60,20 +62,27 @@ | |||
60 | #define IPMI_NETFN_STORAGE_RESPONSE 0x0b | 62 | #define IPMI_NETFN_STORAGE_RESPONSE 0x0b |
61 | #define IPMI_ADD_SEL_ENTRY_CMD 0x44 | 63 | #define IPMI_ADD_SEL_ENTRY_CMD 0x44 |
62 | 64 | ||
65 | #define IPMI_NETFN_FIRMWARE_REQUEST 0x08 | ||
66 | #define IPMI_NETFN_FIRMWARE_RESPONSE 0x09 | ||
67 | |||
63 | /* The default slave address */ | 68 | /* The default slave address */ |
64 | #define IPMI_BMC_SLAVE_ADDR 0x20 | 69 | #define IPMI_BMC_SLAVE_ADDR 0x20 |
65 | 70 | ||
66 | /* The BT interface on high-end HP systems supports up to 255 bytes in | 71 | /* The BT interface on high-end HP systems supports up to 255 bytes in |
67 | * one transfer. Its "virtual" BMC supports some commands that are longer | 72 | * one transfer. Its "virtual" BMC supports some commands that are longer |
68 | * than 128 bytes. Use the full 256, plus NetFn/LUN, Cmd, cCode, plus | 73 | * than 128 bytes. Use the full 256, plus NetFn/LUN, Cmd, cCode, plus |
69 | * some overhead. It would be nice to base this on the "BT Capabilities" | 74 | * some overhead; it's not worth the effort to dynamically size this based |
70 | * but that's too hard to propagate to the rest of the driver. */ | 75 | * on the results of the "Get BT Capabilities" command. */ |
71 | #define IPMI_MAX_MSG_LENGTH 272 /* multiple of 16 */ | 76 | #define IPMI_MAX_MSG_LENGTH 272 /* multiple of 16 */ |
72 | 77 | ||
73 | #define IPMI_CC_NO_ERROR 0x00 | 78 | #define IPMI_CC_NO_ERROR 0x00 |
74 | #define IPMI_NODE_BUSY_ERR 0xc0 | 79 | #define IPMI_NODE_BUSY_ERR 0xc0 |
75 | #define IPMI_INVALID_COMMAND_ERR 0xc1 | 80 | #define IPMI_INVALID_COMMAND_ERR 0xc1 |
81 | #define IPMI_TIMEOUT_ERR 0xc3 | ||
76 | #define IPMI_ERR_MSG_TRUNCATED 0xc6 | 82 | #define IPMI_ERR_MSG_TRUNCATED 0xc6 |
83 | #define IPMI_REQ_LEN_INVALID_ERR 0xc7 | ||
84 | #define IPMI_REQ_LEN_EXCEEDED_ERR 0xc8 | ||
85 | #define IPMI_NOT_IN_MY_STATE_ERR 0xd5 /* IPMI 2.0 */ | ||
77 | #define IPMI_LOST_ARBITRATION_ERR 0x81 | 86 | #define IPMI_LOST_ARBITRATION_ERR 0x81 |
78 | #define IPMI_BUS_ERR 0x82 | 87 | #define IPMI_BUS_ERR 0x82 |
79 | #define IPMI_NAK_ON_WRITE_ERR 0x83 | 88 | #define IPMI_NAK_ON_WRITE_ERR 0x83 |
diff --git a/include/linux/ipmi_smi.h b/include/linux/ipmi_smi.h index 6d9c7e4da472..c0633108d05d 100644 --- a/include/linux/ipmi_smi.h +++ b/include/linux/ipmi_smi.h | |||
@@ -115,6 +115,13 @@ struct ipmi_smi_handlers | |||
115 | poll for operations during things like crash dumps. */ | 115 | poll for operations during things like crash dumps. */ |
116 | void (*poll)(void *send_info); | 116 | void (*poll)(void *send_info); |
117 | 117 | ||
118 | /* Enable/disable firmware maintenance mode. Note that this | ||
119 | is *not* the modes defined, this is simply an on/off | ||
120 | setting. The message handler does the mode handling. Note | ||
121 | that this is called from interupt context, so it cannot | ||
122 | block. */ | ||
123 | void (*set_maintenance_mode)(void *send_info, int enable); | ||
124 | |||
118 | /* Tell the handler that we are using it/not using it. The | 125 | /* Tell the handler that we are using it/not using it. The |
119 | message handler get the modules that this handler belongs | 126 | message handler get the modules that this handler belongs |
120 | to; this function lets the SMI claim any modules that it | 127 | to; this function lets the SMI claim any modules that it |
@@ -173,6 +180,7 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers, | |||
173 | void *send_info, | 180 | void *send_info, |
174 | struct ipmi_device_id *device_id, | 181 | struct ipmi_device_id *device_id, |
175 | struct device *dev, | 182 | struct device *dev, |
183 | const char *sysfs_name, | ||
176 | unsigned char slave_addr); | 184 | unsigned char slave_addr); |
177 | 185 | ||
178 | /* | 186 | /* |
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index fe89444b1c6f..452737551260 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
@@ -839,7 +839,6 @@ struct journal_s | |||
839 | */ | 839 | */ |
840 | 840 | ||
841 | /* Filing buffers */ | 841 | /* Filing buffers */ |
842 | extern void __journal_temp_unlink_buffer(struct journal_head *jh); | ||
843 | extern void journal_unfile_buffer(journal_t *, struct journal_head *); | 842 | extern void journal_unfile_buffer(journal_t *, struct journal_head *); |
844 | extern void __journal_unfile_buffer(struct journal_head *); | 843 | extern void __journal_unfile_buffer(struct journal_head *); |
845 | extern void __journal_refile_buffer(struct journal_head *); | 844 | extern void __journal_refile_buffer(struct journal_head *); |
@@ -949,7 +948,7 @@ void journal_put_journal_head(struct journal_head *jh); | |||
949 | /* | 948 | /* |
950 | * handle management | 949 | * handle management |
951 | */ | 950 | */ |
952 | extern kmem_cache_t *jbd_handle_cache; | 951 | extern struct kmem_cache *jbd_handle_cache; |
953 | 952 | ||
954 | static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags) | 953 | static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags) |
955 | { | 954 | { |
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index ddb128795781..0e0fedd2039a 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h | |||
@@ -848,7 +848,6 @@ struct journal_s | |||
848 | */ | 848 | */ |
849 | 849 | ||
850 | /* Filing buffers */ | 850 | /* Filing buffers */ |
851 | extern void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh); | ||
852 | extern void jbd2_journal_unfile_buffer(journal_t *, struct journal_head *); | 851 | extern void jbd2_journal_unfile_buffer(journal_t *, struct journal_head *); |
853 | extern void __jbd2_journal_unfile_buffer(struct journal_head *); | 852 | extern void __jbd2_journal_unfile_buffer(struct journal_head *); |
854 | extern void __jbd2_journal_refile_buffer(struct journal_head *); | 853 | extern void __jbd2_journal_refile_buffer(struct journal_head *); |
@@ -958,7 +957,7 @@ void jbd2_journal_put_journal_head(struct journal_head *jh); | |||
958 | /* | 957 | /* |
959 | * handle management | 958 | * handle management |
960 | */ | 959 | */ |
961 | extern kmem_cache_t *jbd2_handle_cache; | 960 | extern struct kmem_cache *jbd2_handle_cache; |
962 | 961 | ||
963 | static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags) | 962 | static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags) |
964 | { | 963 | { |
diff --git a/include/linux/kexec.h b/include/linux/kexec.h index a4ede62b339d..e3abcec6c51c 100644 --- a/include/linux/kexec.h +++ b/include/linux/kexec.h | |||
@@ -105,6 +105,7 @@ extern struct page *kimage_alloc_control_pages(struct kimage *image, | |||
105 | unsigned int order); | 105 | unsigned int order); |
106 | extern void crash_kexec(struct pt_regs *); | 106 | extern void crash_kexec(struct pt_regs *); |
107 | int kexec_should_crash(struct task_struct *); | 107 | int kexec_should_crash(struct task_struct *); |
108 | void crash_save_cpu(struct pt_regs *regs, int cpu); | ||
108 | extern struct kimage *kexec_image; | 109 | extern struct kimage *kexec_image; |
109 | extern struct kimage *kexec_crash_image; | 110 | extern struct kimage *kexec_crash_image; |
110 | 111 | ||
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index ac4c0559f751..769be39b9681 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
@@ -165,7 +165,7 @@ extern void arch_disarm_kprobe(struct kprobe *p); | |||
165 | extern int arch_init_kprobes(void); | 165 | extern int arch_init_kprobes(void); |
166 | extern void show_registers(struct pt_regs *regs); | 166 | extern void show_registers(struct pt_regs *regs); |
167 | extern kprobe_opcode_t *get_insn_slot(void); | 167 | extern kprobe_opcode_t *get_insn_slot(void); |
168 | extern void free_insn_slot(kprobe_opcode_t *slot); | 168 | extern void free_insn_slot(kprobe_opcode_t *slot, int dirty); |
169 | extern void kprobes_inc_nmissed_count(struct kprobe *p); | 169 | extern void kprobes_inc_nmissed_count(struct kprobe *p); |
170 | 170 | ||
171 | /* Get the kprobe at this addr (if any) - called with preemption disabled */ | 171 | /* Get the kprobe at this addr (if any) - called with preemption disabled */ |
diff --git a/include/linux/ktime.h b/include/linux/ktime.h index 84eeecd60a02..611f17f79eef 100644 --- a/include/linux/ktime.h +++ b/include/linux/ktime.h | |||
@@ -248,9 +248,9 @@ static inline struct timeval ktime_to_timeval(const ktime_t kt) | |||
248 | * | 248 | * |
249 | * Returns the scalar nanoseconds representation of kt | 249 | * Returns the scalar nanoseconds representation of kt |
250 | */ | 250 | */ |
251 | static inline u64 ktime_to_ns(const ktime_t kt) | 251 | static inline s64 ktime_to_ns(const ktime_t kt) |
252 | { | 252 | { |
253 | return (u64) kt.tv.sec * NSEC_PER_SEC + kt.tv.nsec; | 253 | return (s64) kt.tv.sec * NSEC_PER_SEC + kt.tv.nsec; |
254 | } | 254 | } |
255 | 255 | ||
256 | #endif | 256 | #endif |
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h index 862d9730a60d..8c39654549d8 100644 --- a/include/linux/lockd/lockd.h +++ b/include/linux/lockd/lockd.h | |||
@@ -164,14 +164,12 @@ void nlmclnt_next_cookie(struct nlm_cookie *); | |||
164 | */ | 164 | */ |
165 | struct nlm_host * nlmclnt_lookup_host(const struct sockaddr_in *, int, int, const char *, int); | 165 | struct nlm_host * nlmclnt_lookup_host(const struct sockaddr_in *, int, int, const char *, int); |
166 | struct nlm_host * nlmsvc_lookup_host(struct svc_rqst *, const char *, int); | 166 | struct nlm_host * nlmsvc_lookup_host(struct svc_rqst *, const char *, int); |
167 | struct nlm_host * nlm_lookup_host(int server, const struct sockaddr_in *, int, int, const char *, int); | ||
168 | struct rpc_clnt * nlm_bind_host(struct nlm_host *); | 167 | struct rpc_clnt * nlm_bind_host(struct nlm_host *); |
169 | void nlm_rebind_host(struct nlm_host *); | 168 | void nlm_rebind_host(struct nlm_host *); |
170 | struct nlm_host * nlm_get_host(struct nlm_host *); | 169 | struct nlm_host * nlm_get_host(struct nlm_host *); |
171 | void nlm_release_host(struct nlm_host *); | 170 | void nlm_release_host(struct nlm_host *); |
172 | void nlm_shutdown_hosts(void); | 171 | void nlm_shutdown_hosts(void); |
173 | extern void nlm_host_rebooted(const struct sockaddr_in *, const char *, int, u32); | 172 | extern void nlm_host_rebooted(const struct sockaddr_in *, const char *, int, u32); |
174 | struct nsm_handle *nsm_find(const struct sockaddr_in *, const char *, int); | ||
175 | void nsm_release(struct nsm_handle *); | 173 | void nsm_release(struct nsm_handle *); |
176 | 174 | ||
177 | 175 | ||
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index 819f08f1310d..498bfbd3b4e1 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
@@ -193,7 +193,6 @@ extern void lockdep_free_key_range(void *start, unsigned long size); | |||
193 | 193 | ||
194 | extern void lockdep_off(void); | 194 | extern void lockdep_off(void); |
195 | extern void lockdep_on(void); | 195 | extern void lockdep_on(void); |
196 | extern int lockdep_internal(void); | ||
197 | 196 | ||
198 | /* | 197 | /* |
199 | * These methods are used by specific locking variants (spinlocks, | 198 | * These methods are used by specific locking variants (spinlocks, |
@@ -243,6 +242,8 @@ extern void lock_release(struct lockdep_map *lock, int nested, | |||
243 | 242 | ||
244 | # define INIT_LOCKDEP .lockdep_recursion = 0, | 243 | # define INIT_LOCKDEP .lockdep_recursion = 0, |
245 | 244 | ||
245 | #define lockdep_depth(tsk) ((tsk)->lockdep_depth) | ||
246 | |||
246 | #else /* !LOCKDEP */ | 247 | #else /* !LOCKDEP */ |
247 | 248 | ||
248 | static inline void lockdep_off(void) | 249 | static inline void lockdep_off(void) |
@@ -253,11 +254,6 @@ static inline void lockdep_on(void) | |||
253 | { | 254 | { |
254 | } | 255 | } |
255 | 256 | ||
256 | static inline int lockdep_internal(void) | ||
257 | { | ||
258 | return 0; | ||
259 | } | ||
260 | |||
261 | # define lock_acquire(l, s, t, r, c, i) do { } while (0) | 257 | # define lock_acquire(l, s, t, r, c, i) do { } while (0) |
262 | # define lock_release(l, n, i) do { } while (0) | 258 | # define lock_release(l, n, i) do { } while (0) |
263 | # define lockdep_init() do { } while (0) | 259 | # define lockdep_init() do { } while (0) |
@@ -277,6 +273,9 @@ static inline int lockdep_internal(void) | |||
277 | * The class key takes no space if lockdep is disabled: | 273 | * The class key takes no space if lockdep is disabled: |
278 | */ | 274 | */ |
279 | struct lock_class_key { }; | 275 | struct lock_class_key { }; |
276 | |||
277 | #define lockdep_depth(tsk) (0) | ||
278 | |||
280 | #endif /* !LOCKDEP */ | 279 | #endif /* !LOCKDEP */ |
281 | 280 | ||
282 | #if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_GENERIC_HARDIRQS) | 281 | #if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_GENERIC_HARDIRQS) |
diff --git a/include/linux/mm.h b/include/linux/mm.h index d538de901965..a17b147c61e7 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -114,6 +114,8 @@ struct vm_area_struct { | |||
114 | #endif | 114 | #endif |
115 | }; | 115 | }; |
116 | 116 | ||
117 | extern struct kmem_cache *vm_area_cachep; | ||
118 | |||
117 | /* | 119 | /* |
118 | * This struct defines the per-mm list of VMAs for uClinux. If CONFIG_MMU is | 120 | * This struct defines the per-mm list of VMAs for uClinux. If CONFIG_MMU is |
119 | * disabled, then there's a single shared list of VMAs maintained by the | 121 | * disabled, then there's a single shared list of VMAs maintained by the |
@@ -294,6 +296,24 @@ void put_pages_list(struct list_head *pages); | |||
294 | void split_page(struct page *page, unsigned int order); | 296 | void split_page(struct page *page, unsigned int order); |
295 | 297 | ||
296 | /* | 298 | /* |
299 | * Compound pages have a destructor function. Provide a | ||
300 | * prototype for that function and accessor functions. | ||
301 | * These are _only_ valid on the head of a PG_compound page. | ||
302 | */ | ||
303 | typedef void compound_page_dtor(struct page *); | ||
304 | |||
305 | static inline void set_compound_page_dtor(struct page *page, | ||
306 | compound_page_dtor *dtor) | ||
307 | { | ||
308 | page[1].lru.next = (void *)dtor; | ||
309 | } | ||
310 | |||
311 | static inline compound_page_dtor *get_compound_page_dtor(struct page *page) | ||
312 | { | ||
313 | return (compound_page_dtor *)page[1].lru.next; | ||
314 | } | ||
315 | |||
316 | /* | ||
297 | * Multiple processes may "see" the same page. E.g. for untouched | 317 | * Multiple processes may "see" the same page. E.g. for untouched |
298 | * mappings of /dev/null, all processes see the same page full of | 318 | * mappings of /dev/null, all processes see the same page full of |
299 | * zeroes, and text pages of executables and shared libraries have | 319 | * zeroes, and text pages of executables and shared libraries have |
@@ -396,7 +416,9 @@ void split_page(struct page *page, unsigned int order); | |||
396 | * We are going to use the flags for the page to node mapping if its in | 416 | * We are going to use the flags for the page to node mapping if its in |
397 | * there. This includes the case where there is no node, so it is implicit. | 417 | * there. This includes the case where there is no node, so it is implicit. |
398 | */ | 418 | */ |
399 | #define FLAGS_HAS_NODE (NODES_WIDTH > 0 || NODES_SHIFT == 0) | 419 | #if !(NODES_WIDTH > 0 || NODES_SHIFT == 0) |
420 | #define NODE_NOT_IN_PAGE_FLAGS | ||
421 | #endif | ||
400 | 422 | ||
401 | #ifndef PFN_SECTION_SHIFT | 423 | #ifndef PFN_SECTION_SHIFT |
402 | #define PFN_SECTION_SHIFT 0 | 424 | #define PFN_SECTION_SHIFT 0 |
@@ -411,13 +433,18 @@ void split_page(struct page *page, unsigned int order); | |||
411 | #define NODES_PGSHIFT (NODES_PGOFF * (NODES_WIDTH != 0)) | 433 | #define NODES_PGSHIFT (NODES_PGOFF * (NODES_WIDTH != 0)) |
412 | #define ZONES_PGSHIFT (ZONES_PGOFF * (ZONES_WIDTH != 0)) | 434 | #define ZONES_PGSHIFT (ZONES_PGOFF * (ZONES_WIDTH != 0)) |
413 | 435 | ||
414 | /* NODE:ZONE or SECTION:ZONE is used to lookup the zone from a page. */ | 436 | /* NODE:ZONE or SECTION:ZONE is used to ID a zone for the buddy allcator */ |
415 | #if FLAGS_HAS_NODE | 437 | #ifdef NODE_NOT_IN_PAGEFLAGS |
416 | #define ZONETABLE_SHIFT (NODES_SHIFT + ZONES_SHIFT) | 438 | #define ZONEID_SHIFT (SECTIONS_SHIFT + ZONES_SHIFT) |
439 | #else | ||
440 | #define ZONEID_SHIFT (NODES_SHIFT + ZONES_SHIFT) | ||
441 | #endif | ||
442 | |||
443 | #if ZONES_WIDTH > 0 | ||
444 | #define ZONEID_PGSHIFT ZONES_PGSHIFT | ||
417 | #else | 445 | #else |
418 | #define ZONETABLE_SHIFT (SECTIONS_SHIFT + ZONES_SHIFT) | 446 | #define ZONEID_PGSHIFT NODES_PGOFF |
419 | #endif | 447 | #endif |
420 | #define ZONETABLE_PGSHIFT ZONES_PGSHIFT | ||
421 | 448 | ||
422 | #if SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED | 449 | #if SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED |
423 | #error SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED | 450 | #error SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED |
@@ -426,26 +453,28 @@ void split_page(struct page *page, unsigned int order); | |||
426 | #define ZONES_MASK ((1UL << ZONES_WIDTH) - 1) | 453 | #define ZONES_MASK ((1UL << ZONES_WIDTH) - 1) |
427 | #define NODES_MASK ((1UL << NODES_WIDTH) - 1) | 454 | #define NODES_MASK ((1UL << NODES_WIDTH) - 1) |
428 | #define SECTIONS_MASK ((1UL << SECTIONS_WIDTH) - 1) | 455 | #define SECTIONS_MASK ((1UL << SECTIONS_WIDTH) - 1) |
429 | #define ZONETABLE_MASK ((1UL << ZONETABLE_SHIFT) - 1) | 456 | #define ZONEID_MASK ((1UL << ZONEID_SHIFT) - 1) |
430 | 457 | ||
431 | static inline enum zone_type page_zonenum(struct page *page) | 458 | static inline enum zone_type page_zonenum(struct page *page) |
432 | { | 459 | { |
433 | return (page->flags >> ZONES_PGSHIFT) & ZONES_MASK; | 460 | return (page->flags >> ZONES_PGSHIFT) & ZONES_MASK; |
434 | } | 461 | } |
435 | 462 | ||
436 | struct zone; | 463 | /* |
437 | extern struct zone *zone_table[]; | 464 | * The identification function is only used by the buddy allocator for |
438 | 465 | * determining if two pages could be buddies. We are not really | |
466 | * identifying a zone since we could be using a the section number | ||
467 | * id if we have not node id available in page flags. | ||
468 | * We guarantee only that it will return the same value for two | ||
469 | * combinable pages in a zone. | ||
470 | */ | ||
439 | static inline int page_zone_id(struct page *page) | 471 | static inline int page_zone_id(struct page *page) |
440 | { | 472 | { |
441 | return (page->flags >> ZONETABLE_PGSHIFT) & ZONETABLE_MASK; | 473 | BUILD_BUG_ON(ZONEID_PGSHIFT == 0 && ZONEID_MASK); |
442 | } | 474 | return (page->flags >> ZONEID_PGSHIFT) & ZONEID_MASK; |
443 | static inline struct zone *page_zone(struct page *page) | ||
444 | { | ||
445 | return zone_table[page_zone_id(page)]; | ||
446 | } | 475 | } |
447 | 476 | ||
448 | static inline unsigned long zone_to_nid(struct zone *zone) | 477 | static inline int zone_to_nid(struct zone *zone) |
449 | { | 478 | { |
450 | #ifdef CONFIG_NUMA | 479 | #ifdef CONFIG_NUMA |
451 | return zone->node; | 480 | return zone->node; |
@@ -454,13 +483,20 @@ static inline unsigned long zone_to_nid(struct zone *zone) | |||
454 | #endif | 483 | #endif |
455 | } | 484 | } |
456 | 485 | ||
457 | static inline unsigned long page_to_nid(struct page *page) | 486 | #ifdef NODE_NOT_IN_PAGE_FLAGS |
487 | extern int page_to_nid(struct page *page); | ||
488 | #else | ||
489 | static inline int page_to_nid(struct page *page) | ||
490 | { | ||
491 | return (page->flags >> NODES_PGSHIFT) & NODES_MASK; | ||
492 | } | ||
493 | #endif | ||
494 | |||
495 | static inline struct zone *page_zone(struct page *page) | ||
458 | { | 496 | { |
459 | if (FLAGS_HAS_NODE) | 497 | return &NODE_DATA(page_to_nid(page))->node_zones[page_zonenum(page)]; |
460 | return (page->flags >> NODES_PGSHIFT) & NODES_MASK; | ||
461 | else | ||
462 | return zone_to_nid(page_zone(page)); | ||
463 | } | 498 | } |
499 | |||
464 | static inline unsigned long page_to_section(struct page *page) | 500 | static inline unsigned long page_to_section(struct page *page) |
465 | { | 501 | { |
466 | return (page->flags >> SECTIONS_PGSHIFT) & SECTIONS_MASK; | 502 | return (page->flags >> SECTIONS_PGSHIFT) & SECTIONS_MASK; |
@@ -477,6 +513,7 @@ static inline void set_page_node(struct page *page, unsigned long node) | |||
477 | page->flags &= ~(NODES_MASK << NODES_PGSHIFT); | 513 | page->flags &= ~(NODES_MASK << NODES_PGSHIFT); |
478 | page->flags |= (node & NODES_MASK) << NODES_PGSHIFT; | 514 | page->flags |= (node & NODES_MASK) << NODES_PGSHIFT; |
479 | } | 515 | } |
516 | |||
480 | static inline void set_page_section(struct page *page, unsigned long section) | 517 | static inline void set_page_section(struct page *page, unsigned long section) |
481 | { | 518 | { |
482 | page->flags &= ~(SECTIONS_MASK << SECTIONS_PGSHIFT); | 519 | page->flags &= ~(SECTIONS_MASK << SECTIONS_PGSHIFT); |
@@ -947,8 +984,6 @@ extern void mem_init(void); | |||
947 | extern void show_mem(void); | 984 | extern void show_mem(void); |
948 | extern void si_meminfo(struct sysinfo * val); | 985 | extern void si_meminfo(struct sysinfo * val); |
949 | extern void si_meminfo_node(struct sysinfo *val, int nid); | 986 | extern void si_meminfo_node(struct sysinfo *val, int nid); |
950 | extern void zonetable_add(struct zone *zone, int nid, enum zone_type zid, | ||
951 | unsigned long pfn, unsigned long size); | ||
952 | 987 | ||
953 | #ifdef CONFIG_NUMA | 988 | #ifdef CONFIG_NUMA |
954 | extern void setup_per_cpu_pageset(void); | 989 | extern void setup_per_cpu_pageset(void); |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index e06683e2bea3..e339a7345f25 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
@@ -278,7 +278,7 @@ struct zone { | |||
278 | /* | 278 | /* |
279 | * rarely used fields: | 279 | * rarely used fields: |
280 | */ | 280 | */ |
281 | char *name; | 281 | const char *name; |
282 | } ____cacheline_internodealigned_in_smp; | 282 | } ____cacheline_internodealigned_in_smp; |
283 | 283 | ||
284 | /* | 284 | /* |
@@ -288,19 +288,94 @@ struct zone { | |||
288 | */ | 288 | */ |
289 | #define DEF_PRIORITY 12 | 289 | #define DEF_PRIORITY 12 |
290 | 290 | ||
291 | /* Maximum number of zones on a zonelist */ | ||
292 | #define MAX_ZONES_PER_ZONELIST (MAX_NUMNODES * MAX_NR_ZONES) | ||
293 | |||
294 | #ifdef CONFIG_NUMA | ||
295 | /* | ||
296 | * We cache key information from each zonelist for smaller cache | ||
297 | * footprint when scanning for free pages in get_page_from_freelist(). | ||
298 | * | ||
299 | * 1) The BITMAP fullzones tracks which zones in a zonelist have come | ||
300 | * up short of free memory since the last time (last_fullzone_zap) | ||
301 | * we zero'd fullzones. | ||
302 | * 2) The array z_to_n[] maps each zone in the zonelist to its node | ||
303 | * id, so that we can efficiently evaluate whether that node is | ||
304 | * set in the current tasks mems_allowed. | ||
305 | * | ||
306 | * Both fullzones and z_to_n[] are one-to-one with the zonelist, | ||
307 | * indexed by a zones offset in the zonelist zones[] array. | ||
308 | * | ||
309 | * The get_page_from_freelist() routine does two scans. During the | ||
310 | * first scan, we skip zones whose corresponding bit in 'fullzones' | ||
311 | * is set or whose corresponding node in current->mems_allowed (which | ||
312 | * comes from cpusets) is not set. During the second scan, we bypass | ||
313 | * this zonelist_cache, to ensure we look methodically at each zone. | ||
314 | * | ||
315 | * Once per second, we zero out (zap) fullzones, forcing us to | ||
316 | * reconsider nodes that might have regained more free memory. | ||
317 | * The field last_full_zap is the time we last zapped fullzones. | ||
318 | * | ||
319 | * This mechanism reduces the amount of time we waste repeatedly | ||
320 | * reexaming zones for free memory when they just came up low on | ||
321 | * memory momentarilly ago. | ||
322 | * | ||
323 | * The zonelist_cache struct members logically belong in struct | ||
324 | * zonelist. However, the mempolicy zonelists constructed for | ||
325 | * MPOL_BIND are intentionally variable length (and usually much | ||
326 | * shorter). A general purpose mechanism for handling structs with | ||
327 | * multiple variable length members is more mechanism than we want | ||
328 | * here. We resort to some special case hackery instead. | ||
329 | * | ||
330 | * The MPOL_BIND zonelists don't need this zonelist_cache (in good | ||
331 | * part because they are shorter), so we put the fixed length stuff | ||
332 | * at the front of the zonelist struct, ending in a variable length | ||
333 | * zones[], as is needed by MPOL_BIND. | ||
334 | * | ||
335 | * Then we put the optional zonelist cache on the end of the zonelist | ||
336 | * struct. This optional stuff is found by a 'zlcache_ptr' pointer in | ||
337 | * the fixed length portion at the front of the struct. This pointer | ||
338 | * both enables us to find the zonelist cache, and in the case of | ||
339 | * MPOL_BIND zonelists, (which will just set the zlcache_ptr to NULL) | ||
340 | * to know that the zonelist cache is not there. | ||
341 | * | ||
342 | * The end result is that struct zonelists come in two flavors: | ||
343 | * 1) The full, fixed length version, shown below, and | ||
344 | * 2) The custom zonelists for MPOL_BIND. | ||
345 | * The custom MPOL_BIND zonelists have a NULL zlcache_ptr and no zlcache. | ||
346 | * | ||
347 | * Even though there may be multiple CPU cores on a node modifying | ||
348 | * fullzones or last_full_zap in the same zonelist_cache at the same | ||
349 | * time, we don't lock it. This is just hint data - if it is wrong now | ||
350 | * and then, the allocator will still function, perhaps a bit slower. | ||
351 | */ | ||
352 | |||
353 | |||
354 | struct zonelist_cache { | ||
355 | unsigned short z_to_n[MAX_ZONES_PER_ZONELIST]; /* zone->nid */ | ||
356 | DECLARE_BITMAP(fullzones, MAX_ZONES_PER_ZONELIST); /* zone full? */ | ||
357 | unsigned long last_full_zap; /* when last zap'd (jiffies) */ | ||
358 | }; | ||
359 | #else | ||
360 | struct zonelist_cache; | ||
361 | #endif | ||
362 | |||
291 | /* | 363 | /* |
292 | * One allocation request operates on a zonelist. A zonelist | 364 | * One allocation request operates on a zonelist. A zonelist |
293 | * is a list of zones, the first one is the 'goal' of the | 365 | * is a list of zones, the first one is the 'goal' of the |
294 | * allocation, the other zones are fallback zones, in decreasing | 366 | * allocation, the other zones are fallback zones, in decreasing |
295 | * priority. | 367 | * priority. |
296 | * | 368 | * |
297 | * Right now a zonelist takes up less than a cacheline. We never | 369 | * If zlcache_ptr is not NULL, then it is just the address of zlcache, |
298 | * modify it apart from boot-up, and only a few indices are used, | 370 | * as explained above. If zlcache_ptr is NULL, there is no zlcache. |
299 | * so despite the zonelist table being relatively big, the cache | ||
300 | * footprint of this construct is very small. | ||
301 | */ | 371 | */ |
372 | |||
302 | struct zonelist { | 373 | struct zonelist { |
303 | struct zone *zones[MAX_NUMNODES * MAX_NR_ZONES + 1]; // NULL delimited | 374 | struct zonelist_cache *zlcache_ptr; // NULL or &zlcache |
375 | struct zone *zones[MAX_ZONES_PER_ZONELIST + 1]; // NULL delimited | ||
376 | #ifdef CONFIG_NUMA | ||
377 | struct zonelist_cache zlcache; // optional ... | ||
378 | #endif | ||
304 | }; | 379 | }; |
305 | 380 | ||
306 | #ifdef CONFIG_ARCH_POPULATES_NODE_MAP | 381 | #ifdef CONFIG_ARCH_POPULATES_NODE_MAP |
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h index 7c0c2c198f1f..4a189dadb160 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h | |||
@@ -63,6 +63,9 @@ struct kparam_array | |||
63 | not there, read bits mean it's readable, write bits mean it's | 63 | not there, read bits mean it's readable, write bits mean it's |
64 | writable. */ | 64 | writable. */ |
65 | #define __module_param_call(prefix, name, set, get, arg, perm) \ | 65 | #define __module_param_call(prefix, name, set, get, arg, perm) \ |
66 | /* Default value instead of permissions? */ \ | ||
67 | static int __param_perm_check_##name __attribute__((unused)) = \ | ||
68 | BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)); \ | ||
66 | static char __param_str_##name[] = prefix #name; \ | 69 | static char __param_str_##name[] = prefix #name; \ |
67 | static struct kernel_param const __param_##name \ | 70 | static struct kernel_param const __param_##name \ |
68 | __attribute_used__ \ | 71 | __attribute_used__ \ |
diff --git a/include/linux/msg.h b/include/linux/msg.h index acc7c174ff00..f1b60740d641 100644 --- a/include/linux/msg.h +++ b/include/linux/msg.h | |||
@@ -92,6 +92,12 @@ struct msg_queue { | |||
92 | struct list_head q_senders; | 92 | struct list_head q_senders; |
93 | }; | 93 | }; |
94 | 94 | ||
95 | /* Helper routines for sys_msgsnd and sys_msgrcv */ | ||
96 | extern long do_msgsnd(int msqid, long mtype, void __user *mtext, | ||
97 | size_t msgsz, int msgflg); | ||
98 | extern long do_msgrcv(int msqid, long *pmtype, void __user *mtext, | ||
99 | size_t msgsz, long msgtyp, int msgflg); | ||
100 | |||
95 | #endif /* __KERNEL__ */ | 101 | #endif /* __KERNEL__ */ |
96 | 102 | ||
97 | #endif /* _LINUX_MSG_H */ | 103 | #endif /* _LINUX_MSG_H */ |
diff --git a/include/linux/mutex.h b/include/linux/mutex.h index 27c48daa3183..b2b91c477563 100644 --- a/include/linux/mutex.h +++ b/include/linux/mutex.h | |||
@@ -94,7 +94,7 @@ do { \ | |||
94 | 94 | ||
95 | #define __MUTEX_INITIALIZER(lockname) \ | 95 | #define __MUTEX_INITIALIZER(lockname) \ |
96 | { .count = ATOMIC_INIT(1) \ | 96 | { .count = ATOMIC_INIT(1) \ |
97 | , .wait_lock = SPIN_LOCK_UNLOCKED \ | 97 | , .wait_lock = __SPIN_LOCK_UNLOCKED(lockname.wait_lock) \ |
98 | , .wait_list = LIST_HEAD_INIT(lockname.wait_list) \ | 98 | , .wait_list = LIST_HEAD_INIT(lockname.wait_list) \ |
99 | __DEBUG_MUTEX_INITIALIZER(lockname) \ | 99 | __DEBUG_MUTEX_INITIALIZER(lockname) \ |
100 | __DEP_MAP_MUTEX_INITIALIZER(lockname) } | 100 | __DEP_MAP_MUTEX_INITIALIZER(lockname) } |
diff --git a/include/linux/nbd.h b/include/linux/nbd.h index d6b6dc09ad97..0f3e69302540 100644 --- a/include/linux/nbd.h +++ b/include/linux/nbd.h | |||
@@ -64,6 +64,7 @@ struct nbd_device { | |||
64 | struct gendisk *disk; | 64 | struct gendisk *disk; |
65 | int blksize; | 65 | int blksize; |
66 | u64 bytesize; | 66 | u64 bytesize; |
67 | pid_t pid; /* pid of nbd-client, if attached */ | ||
67 | }; | 68 | }; |
68 | 69 | ||
69 | #endif | 70 | #endif |
diff --git a/include/linux/netfilter/nf_conntrack_pptp.h b/include/linux/netfilter/nf_conntrack_pptp.h index fb049ec11ff2..9d8144a488cd 100644 --- a/include/linux/netfilter/nf_conntrack_pptp.h +++ b/include/linux/netfilter/nf_conntrack_pptp.h | |||
@@ -2,6 +2,8 @@ | |||
2 | #ifndef _NF_CONNTRACK_PPTP_H | 2 | #ifndef _NF_CONNTRACK_PPTP_H |
3 | #define _NF_CONNTRACK_PPTP_H | 3 | #define _NF_CONNTRACK_PPTP_H |
4 | 4 | ||
5 | #include <linux/netfilter/nf_conntrack_common.h> | ||
6 | |||
5 | /* state of the control session */ | 7 | /* state of the control session */ |
6 | enum pptp_ctrlsess_state { | 8 | enum pptp_ctrlsess_state { |
7 | PPTP_SESSION_NONE, /* no session present */ | 9 | PPTP_SESSION_NONE, /* no session present */ |
@@ -295,7 +297,6 @@ union pptp_ctrl_union { | |||
295 | /* crap needed for nf_conntrack_compat.h */ | 297 | /* crap needed for nf_conntrack_compat.h */ |
296 | struct nf_conn; | 298 | struct nf_conn; |
297 | struct nf_conntrack_expect; | 299 | struct nf_conntrack_expect; |
298 | enum ip_conntrack_info; | ||
299 | 300 | ||
300 | extern int | 301 | extern int |
301 | (*nf_nat_pptp_hook_outbound)(struct sk_buff **pskb, | 302 | (*nf_nat_pptp_hook_outbound)(struct sk_buff **pskb, |
diff --git a/include/linux/nmi.h b/include/linux/nmi.h index e16904e28c3a..acb4ed130247 100644 --- a/include/linux/nmi.h +++ b/include/linux/nmi.h | |||
@@ -15,9 +15,14 @@ | |||
15 | * disables interrupts for a long time. This call is stateless. | 15 | * disables interrupts for a long time. This call is stateless. |
16 | */ | 16 | */ |
17 | #ifdef ARCH_HAS_NMI_WATCHDOG | 17 | #ifdef ARCH_HAS_NMI_WATCHDOG |
18 | #include <asm/nmi.h> | ||
18 | extern void touch_nmi_watchdog(void); | 19 | extern void touch_nmi_watchdog(void); |
19 | #else | 20 | #else |
20 | # define touch_nmi_watchdog() touch_softlockup_watchdog() | 21 | # define touch_nmi_watchdog() touch_softlockup_watchdog() |
21 | #endif | 22 | #endif |
22 | 23 | ||
24 | #ifndef trigger_all_cpu_backtrace | ||
25 | #define trigger_all_cpu_backtrace() do { } while (0) | ||
26 | #endif | ||
27 | |||
23 | #endif | 28 | #endif |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index c09da1e30c54..4d972bbef316 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -390,7 +390,7 @@ | |||
390 | #define PCI_DEVICE_ID_NS_CS5535_IDE 0x002d | 390 | #define PCI_DEVICE_ID_NS_CS5535_IDE 0x002d |
391 | #define PCI_DEVICE_ID_NS_CS5535_AUDIO 0x002e | 391 | #define PCI_DEVICE_ID_NS_CS5535_AUDIO 0x002e |
392 | #define PCI_DEVICE_ID_NS_CS5535_USB 0x002f | 392 | #define PCI_DEVICE_ID_NS_CS5535_USB 0x002f |
393 | #define PCI_DEVICE_ID_NS_CS5535_VIDEO 0x0030 | 393 | #define PCI_DEVICE_ID_NS_GX_VIDEO 0x0030 |
394 | #define PCI_DEVICE_ID_NS_SATURN 0x0035 | 394 | #define PCI_DEVICE_ID_NS_SATURN 0x0035 |
395 | #define PCI_DEVICE_ID_NS_SCx200_BRIDGE 0x0500 | 395 | #define PCI_DEVICE_ID_NS_SCx200_BRIDGE 0x0500 |
396 | #define PCI_DEVICE_ID_NS_SCx200_SMI 0x0501 | 396 | #define PCI_DEVICE_ID_NS_SCx200_SMI 0x0501 |
@@ -403,8 +403,7 @@ | |||
403 | #define PCI_DEVICE_ID_NS_SC1100_XBUS 0x0515 | 403 | #define PCI_DEVICE_ID_NS_SC1100_XBUS 0x0515 |
404 | #define PCI_DEVICE_ID_NS_87410 0xd001 | 404 | #define PCI_DEVICE_ID_NS_87410 0xd001 |
405 | 405 | ||
406 | #define PCI_DEVICE_ID_NS_CS5535_HOST_BRIDGE 0x0028 | 406 | #define PCI_DEVICE_ID_NS_GX_HOST_BRIDGE 0x0028 |
407 | #define PCI_DEVICE_ID_NS_CS5535_ISA_BRIDGE 0x002b | ||
408 | 407 | ||
409 | #define PCI_VENDOR_ID_TSENG 0x100c | 408 | #define PCI_VENDOR_ID_TSENG 0x100c |
410 | #define PCI_DEVICE_ID_TSENG_W32P_2 0x3202 | 409 | #define PCI_DEVICE_ID_TSENG_W32P_2 0x3202 |
@@ -1864,6 +1863,7 @@ | |||
1864 | #define PCI_DEVICE_ID_OXSEMI_16PCI95N 0x9511 | 1863 | #define PCI_DEVICE_ID_OXSEMI_16PCI95N 0x9511 |
1865 | #define PCI_DEVICE_ID_OXSEMI_16PCI954PP 0x9513 | 1864 | #define PCI_DEVICE_ID_OXSEMI_16PCI954PP 0x9513 |
1866 | #define PCI_DEVICE_ID_OXSEMI_16PCI952 0x9521 | 1865 | #define PCI_DEVICE_ID_OXSEMI_16PCI952 0x9521 |
1866 | #define PCI_DEVICE_ID_OXSEMI_16PCI952PP 0x9523 | ||
1867 | 1867 | ||
1868 | #define PCI_VENDOR_ID_SAMSUNG 0x144d | 1868 | #define PCI_VENDOR_ID_SAMSUNG 0x144d |
1869 | 1869 | ||
@@ -1931,6 +1931,7 @@ | |||
1931 | #define PCI_DEVICE_ID_TIGON3_5750M 0x167c | 1931 | #define PCI_DEVICE_ID_TIGON3_5750M 0x167c |
1932 | #define PCI_DEVICE_ID_TIGON3_5751M 0x167d | 1932 | #define PCI_DEVICE_ID_TIGON3_5751M 0x167d |
1933 | #define PCI_DEVICE_ID_TIGON3_5751F 0x167e | 1933 | #define PCI_DEVICE_ID_TIGON3_5751F 0x167e |
1934 | #define PCI_DEVICE_ID_TIGON3_5787F 0x167f | ||
1934 | #define PCI_DEVICE_ID_TIGON3_5787M 0x1693 | 1935 | #define PCI_DEVICE_ID_TIGON3_5787M 0x1693 |
1935 | #define PCI_DEVICE_ID_TIGON3_5782 0x1696 | 1936 | #define PCI_DEVICE_ID_TIGON3_5782 0x1696 |
1936 | #define PCI_DEVICE_ID_TIGON3_5786 0x169a | 1937 | #define PCI_DEVICE_ID_TIGON3_5786 0x169a |
@@ -2002,6 +2003,8 @@ | |||
2002 | #define PCI_DEVICE_ID_FARSITE_TE1 0x1610 | 2003 | #define PCI_DEVICE_ID_FARSITE_TE1 0x1610 |
2003 | #define PCI_DEVICE_ID_FARSITE_TE1C 0x1612 | 2004 | #define PCI_DEVICE_ID_FARSITE_TE1C 0x1612 |
2004 | 2005 | ||
2006 | #define PCI_VENDOR_ID_ARIMA 0x161f | ||
2007 | |||
2005 | #define PCI_VENDOR_ID_SIBYTE 0x166d | 2008 | #define PCI_VENDOR_ID_SIBYTE 0x166d |
2006 | #define PCI_DEVICE_ID_BCM1250_PCI 0x0001 | 2009 | #define PCI_DEVICE_ID_BCM1250_PCI 0x0001 |
2007 | #define PCI_DEVICE_ID_BCM1250_HT 0x0002 | 2010 | #define PCI_DEVICE_ID_BCM1250_HT 0x0002 |
diff --git a/include/linux/pfkeyv2.h b/include/linux/pfkeyv2.h index 0f0b880c4280..265bafab6494 100644 --- a/include/linux/pfkeyv2.h +++ b/include/linux/pfkeyv2.h | |||
@@ -285,6 +285,7 @@ struct sadb_x_sec_ctx { | |||
285 | #define SADB_X_AALG_SHA2_384HMAC 6 | 285 | #define SADB_X_AALG_SHA2_384HMAC 6 |
286 | #define SADB_X_AALG_SHA2_512HMAC 7 | 286 | #define SADB_X_AALG_SHA2_512HMAC 7 |
287 | #define SADB_X_AALG_RIPEMD160HMAC 8 | 287 | #define SADB_X_AALG_RIPEMD160HMAC 8 |
288 | #define SADB_X_AALG_AES_XCBC_MAC 9 | ||
288 | #define SADB_X_AALG_NULL 251 /* kame */ | 289 | #define SADB_X_AALG_NULL 251 /* kame */ |
289 | #define SADB_AALG_MAX 251 | 290 | #define SADB_AALG_MAX 251 |
290 | 291 | ||
diff --git a/include/linux/profile.h b/include/linux/profile.h index acce53fd38b6..5670b340c4ef 100644 --- a/include/linux/profile.h +++ b/include/linux/profile.h | |||
@@ -6,10 +6,15 @@ | |||
6 | #include <linux/kernel.h> | 6 | #include <linux/kernel.h> |
7 | #include <linux/init.h> | 7 | #include <linux/init.h> |
8 | #include <linux/cpumask.h> | 8 | #include <linux/cpumask.h> |
9 | #include <linux/cache.h> | ||
10 | |||
9 | #include <asm/errno.h> | 11 | #include <asm/errno.h> |
10 | 12 | ||
13 | extern int prof_on __read_mostly; | ||
14 | |||
11 | #define CPU_PROFILING 1 | 15 | #define CPU_PROFILING 1 |
12 | #define SCHED_PROFILING 2 | 16 | #define SCHED_PROFILING 2 |
17 | #define SLEEP_PROFILING 3 | ||
13 | 18 | ||
14 | struct proc_dir_entry; | 19 | struct proc_dir_entry; |
15 | struct pt_regs; | 20 | struct pt_regs; |
@@ -18,7 +23,24 @@ struct notifier_block; | |||
18 | /* init basic kernel profiler */ | 23 | /* init basic kernel profiler */ |
19 | void __init profile_init(void); | 24 | void __init profile_init(void); |
20 | void profile_tick(int); | 25 | void profile_tick(int); |
21 | void profile_hit(int, void *); | 26 | |
27 | /* | ||
28 | * Add multiple profiler hits to a given address: | ||
29 | */ | ||
30 | void profile_hits(int, void *ip, unsigned int nr_hits); | ||
31 | |||
32 | /* | ||
33 | * Single profiler hit: | ||
34 | */ | ||
35 | static inline void profile_hit(int type, void *ip) | ||
36 | { | ||
37 | /* | ||
38 | * Speedup for the common (no profiling enabled) case: | ||
39 | */ | ||
40 | if (unlikely(prof_on == type)) | ||
41 | profile_hits(type, ip, 1); | ||
42 | } | ||
43 | |||
22 | #ifdef CONFIG_PROC_FS | 44 | #ifdef CONFIG_PROC_FS |
23 | void create_prof_cpu_mask(struct proc_dir_entry *); | 45 | void create_prof_cpu_mask(struct proc_dir_entry *); |
24 | #else | 46 | #else |
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index 5110201a4159..90c23f690c0d 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
@@ -37,6 +37,9 @@ extern int dquot_release(struct dquot *dquot); | |||
37 | extern int dquot_commit_info(struct super_block *sb, int type); | 37 | extern int dquot_commit_info(struct super_block *sb, int type); |
38 | extern int dquot_mark_dquot_dirty(struct dquot *dquot); | 38 | extern int dquot_mark_dquot_dirty(struct dquot *dquot); |
39 | 39 | ||
40 | int remove_inode_dquot_ref(struct inode *inode, int type, | ||
41 | struct list_head *tofree_head); | ||
42 | |||
40 | extern int vfs_quota_on(struct super_block *sb, int type, int format_id, char *path); | 43 | extern int vfs_quota_on(struct super_block *sb, int type, int format_id, char *path); |
41 | extern int vfs_quota_on_mount(struct super_block *sb, char *qf_name, | 44 | extern int vfs_quota_on_mount(struct super_block *sb, char *qf_name, |
42 | int format_id, int type); | 45 | int format_id, int type); |
diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h index cbfa11537421..0deb842541ac 100644 --- a/include/linux/radix-tree.h +++ b/include/linux/radix-tree.h | |||
@@ -1,6 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2001 Momchil Velikov | 2 | * Copyright (C) 2001 Momchil Velikov |
3 | * Portions Copyright (C) 2001 Christoph Hellwig | 3 | * Portions Copyright (C) 2001 Christoph Hellwig |
4 | * Copyright (C) 2006 Nick Piggin | ||
4 | * | 5 | * |
5 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
6 | * modify it under the terms of the GNU General Public License as | 7 | * modify it under the terms of the GNU General Public License as |
@@ -21,6 +22,35 @@ | |||
21 | 22 | ||
22 | #include <linux/preempt.h> | 23 | #include <linux/preempt.h> |
23 | #include <linux/types.h> | 24 | #include <linux/types.h> |
25 | #include <linux/kernel.h> | ||
26 | #include <linux/rcupdate.h> | ||
27 | |||
28 | /* | ||
29 | * A direct pointer (root->rnode pointing directly to a data item, | ||
30 | * rather than another radix_tree_node) is signalled by the low bit | ||
31 | * set in the root->rnode pointer. | ||
32 | * | ||
33 | * In this case root->height is also NULL, but the direct pointer tests are | ||
34 | * needed for RCU lookups when root->height is unreliable. | ||
35 | */ | ||
36 | #define RADIX_TREE_DIRECT_PTR 1 | ||
37 | |||
38 | static inline void *radix_tree_ptr_to_direct(void *ptr) | ||
39 | { | ||
40 | return (void *)((unsigned long)ptr | RADIX_TREE_DIRECT_PTR); | ||
41 | } | ||
42 | |||
43 | static inline void *radix_tree_direct_to_ptr(void *ptr) | ||
44 | { | ||
45 | return (void *)((unsigned long)ptr & ~RADIX_TREE_DIRECT_PTR); | ||
46 | } | ||
47 | |||
48 | static inline int radix_tree_is_direct_ptr(void *ptr) | ||
49 | { | ||
50 | return (int)((unsigned long)ptr & RADIX_TREE_DIRECT_PTR); | ||
51 | } | ||
52 | |||
53 | /*** radix-tree API starts here ***/ | ||
24 | 54 | ||
25 | #define RADIX_TREE_MAX_TAGS 2 | 55 | #define RADIX_TREE_MAX_TAGS 2 |
26 | 56 | ||
@@ -47,6 +77,77 @@ do { \ | |||
47 | (root)->rnode = NULL; \ | 77 | (root)->rnode = NULL; \ |
48 | } while (0) | 78 | } while (0) |
49 | 79 | ||
80 | /** | ||
81 | * Radix-tree synchronization | ||
82 | * | ||
83 | * The radix-tree API requires that users provide all synchronisation (with | ||
84 | * specific exceptions, noted below). | ||
85 | * | ||
86 | * Synchronization of access to the data items being stored in the tree, and | ||
87 | * management of their lifetimes must be completely managed by API users. | ||
88 | * | ||
89 | * For API usage, in general, | ||
90 | * - any function _modifying_ the the tree or tags (inserting or deleting | ||
91 | * items, setting or clearing tags must exclude other modifications, and | ||
92 | * exclude any functions reading the tree. | ||
93 | * - any function _reading_ the the tree or tags (looking up items or tags, | ||
94 | * gang lookups) must exclude modifications to the tree, but may occur | ||
95 | * concurrently with other readers. | ||
96 | * | ||
97 | * The notable exceptions to this rule are the following functions: | ||
98 | * radix_tree_lookup | ||
99 | * radix_tree_tag_get | ||
100 | * radix_tree_gang_lookup | ||
101 | * radix_tree_gang_lookup_tag | ||
102 | * radix_tree_tagged | ||
103 | * | ||
104 | * The first 4 functions are able to be called locklessly, using RCU. The | ||
105 | * caller must ensure calls to these functions are made within rcu_read_lock() | ||
106 | * regions. Other readers (lock-free or otherwise) and modifications may be | ||
107 | * running concurrently. | ||
108 | * | ||
109 | * It is still required that the caller manage the synchronization and lifetimes | ||
110 | * of the items. So if RCU lock-free lookups are used, typically this would mean | ||
111 | * that the items have their own locks, or are amenable to lock-free access; and | ||
112 | * that the items are freed by RCU (or only freed after having been deleted from | ||
113 | * the radix tree *and* a synchronize_rcu() grace period). | ||
114 | * | ||
115 | * (Note, rcu_assign_pointer and rcu_dereference are not needed to control | ||
116 | * access to data items when inserting into or looking up from the radix tree) | ||
117 | * | ||
118 | * radix_tree_tagged is able to be called without locking or RCU. | ||
119 | */ | ||
120 | |||
121 | /** | ||
122 | * radix_tree_deref_slot - dereference a slot | ||
123 | * @pslot: pointer to slot, returned by radix_tree_lookup_slot | ||
124 | * Returns: item that was stored in that slot with any direct pointer flag | ||
125 | * removed. | ||
126 | * | ||
127 | * For use with radix_tree_lookup_slot(). Caller must hold tree at least read | ||
128 | * locked across slot lookup and dereference. More likely, will be used with | ||
129 | * radix_tree_replace_slot(), as well, so caller will hold tree write locked. | ||
130 | */ | ||
131 | static inline void *radix_tree_deref_slot(void **pslot) | ||
132 | { | ||
133 | return radix_tree_direct_to_ptr(*pslot); | ||
134 | } | ||
135 | /** | ||
136 | * radix_tree_replace_slot - replace item in a slot | ||
137 | * @pslot: pointer to slot, returned by radix_tree_lookup_slot | ||
138 | * @item: new item to store in the slot. | ||
139 | * | ||
140 | * For use with radix_tree_lookup_slot(). Caller must hold tree write locked | ||
141 | * across slot lookup and replacement. | ||
142 | */ | ||
143 | static inline void radix_tree_replace_slot(void **pslot, void *item) | ||
144 | { | ||
145 | BUG_ON(radix_tree_is_direct_ptr(item)); | ||
146 | rcu_assign_pointer(*pslot, | ||
147 | (void *)((unsigned long)item | | ||
148 | ((unsigned long)*pslot & RADIX_TREE_DIRECT_PTR))); | ||
149 | } | ||
150 | |||
50 | int radix_tree_insert(struct radix_tree_root *, unsigned long, void *); | 151 | int radix_tree_insert(struct radix_tree_root *, unsigned long, void *); |
51 | void *radix_tree_lookup(struct radix_tree_root *, unsigned long); | 152 | void *radix_tree_lookup(struct radix_tree_root *, unsigned long); |
52 | void **radix_tree_lookup_slot(struct radix_tree_root *, unsigned long); | 153 | void **radix_tree_lookup_slot(struct radix_tree_root *, unsigned long); |
diff --git a/include/linux/raid/raid5.h b/include/linux/raid/raid5.h index f13299a15591..03636d7918fe 100644 --- a/include/linux/raid/raid5.h +++ b/include/linux/raid/raid5.h | |||
@@ -235,7 +235,7 @@ struct raid5_private_data { | |||
235 | */ | 235 | */ |
236 | int active_name; | 236 | int active_name; |
237 | char cache_name[2][20]; | 237 | char cache_name[2][20]; |
238 | kmem_cache_t *slab_cache; /* for allocating stripes */ | 238 | struct kmem_cache *slab_cache; /* for allocating stripes */ |
239 | 239 | ||
240 | int seq_flush, seq_write; | 240 | int seq_flush, seq_write; |
241 | int quiesce; | 241 | int quiesce; |
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h index 7bc6bfb86253..d0e4dce33ad5 100644 --- a/include/linux/reiserfs_fs.h +++ b/include/linux/reiserfs_fs.h | |||
@@ -739,7 +739,7 @@ struct block_head { | |||
739 | #define PUT_B_FREE_SPACE(p_s_bh,val) do { set_blkh_free_space(B_BLK_HEAD(p_s_bh),val); } while (0) | 739 | #define PUT_B_FREE_SPACE(p_s_bh,val) do { set_blkh_free_space(B_BLK_HEAD(p_s_bh),val); } while (0) |
740 | 740 | ||
741 | /* Get right delimiting key. -- little endian */ | 741 | /* Get right delimiting key. -- little endian */ |
742 | #define B_PRIGHT_DELIM_KEY(p_s_bh) (&(blk_right_delim_key(B_BLK_HEAD(p_s_bh)) | 742 | #define B_PRIGHT_DELIM_KEY(p_s_bh) (&(blk_right_delim_key(B_BLK_HEAD(p_s_bh)))) |
743 | 743 | ||
744 | /* Does the buffer contain a disk leaf. */ | 744 | /* Does the buffer contain a disk leaf. */ |
745 | #define B_IS_ITEMS_LEVEL(p_s_bh) (B_LEVEL(p_s_bh) == DISK_LEAF_NODE_LEVEL) | 745 | #define B_IS_ITEMS_LEVEL(p_s_bh) (B_LEVEL(p_s_bh) == DISK_LEAF_NODE_LEVEL) |
diff --git a/include/linux/relay.h b/include/linux/relay.h index 0e3d91b76996..c6a48bfc8b14 100644 --- a/include/linux/relay.h +++ b/include/linux/relay.h | |||
@@ -274,7 +274,7 @@ static inline void subbuf_start_reserve(struct rchan_buf *buf, | |||
274 | /* | 274 | /* |
275 | * exported relay file operations, kernel/relay.c | 275 | * exported relay file operations, kernel/relay.c |
276 | */ | 276 | */ |
277 | extern struct file_operations relay_file_operations; | 277 | extern const struct file_operations relay_file_operations; |
278 | 278 | ||
279 | #endif /* _LINUX_RELAY_H */ | 279 | #endif /* _LINUX_RELAY_H */ |
280 | 280 | ||
diff --git a/include/linux/rmap.h b/include/linux/rmap.h index db2c1df4fef9..36f850373d2c 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h | |||
@@ -30,11 +30,11 @@ struct anon_vma { | |||
30 | 30 | ||
31 | #ifdef CONFIG_MMU | 31 | #ifdef CONFIG_MMU |
32 | 32 | ||
33 | extern kmem_cache_t *anon_vma_cachep; | 33 | extern struct kmem_cache *anon_vma_cachep; |
34 | 34 | ||
35 | static inline struct anon_vma *anon_vma_alloc(void) | 35 | static inline struct anon_vma *anon_vma_alloc(void) |
36 | { | 36 | { |
37 | return kmem_cache_alloc(anon_vma_cachep, SLAB_KERNEL); | 37 | return kmem_cache_alloc(anon_vma_cachep, GFP_KERNEL); |
38 | } | 38 | } |
39 | 39 | ||
40 | static inline void anon_vma_free(struct anon_vma *anon_vma) | 40 | static inline void anon_vma_free(struct anon_vma *anon_vma) |
diff --git a/include/linux/rtmutex.h b/include/linux/rtmutex.h index 5d41dee82f80..b0090e9f7884 100644 --- a/include/linux/rtmutex.h +++ b/include/linux/rtmutex.h | |||
@@ -63,7 +63,7 @@ struct hrtimer_sleeper; | |||
63 | #endif | 63 | #endif |
64 | 64 | ||
65 | #define __RT_MUTEX_INITIALIZER(mutexname) \ | 65 | #define __RT_MUTEX_INITIALIZER(mutexname) \ |
66 | { .wait_lock = SPIN_LOCK_UNLOCKED \ | 66 | { .wait_lock = __SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \ |
67 | , .wait_list = PLIST_HEAD_INIT(mutexname.wait_list, mutexname.wait_lock) \ | 67 | , .wait_list = PLIST_HEAD_INIT(mutexname.wait_list, mutexname.wait_lock) \ |
68 | , .owner = NULL \ | 68 | , .owner = NULL \ |
69 | __DEBUG_RT_MUTEX_INITIALIZER(mutexname)} | 69 | __DEBUG_RT_MUTEX_INITIALIZER(mutexname)} |
diff --git a/include/linux/rwsem-spinlock.h b/include/linux/rwsem-spinlock.h index ae1fcadd598e..813cee13da0d 100644 --- a/include/linux/rwsem-spinlock.h +++ b/include/linux/rwsem-spinlock.h | |||
@@ -44,7 +44,8 @@ struct rw_semaphore { | |||
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | #define __RWSEM_INITIALIZER(name) \ | 46 | #define __RWSEM_INITIALIZER(name) \ |
47 | { 0, SPIN_LOCK_UNLOCKED, LIST_HEAD_INIT((name).wait_list) __RWSEM_DEP_MAP_INIT(name) } | 47 | { 0, __SPIN_LOCK_UNLOCKED(name.wait_lock), LIST_HEAD_INIT((name).wait_list) \ |
48 | __RWSEM_DEP_MAP_INIT(name) } | ||
48 | 49 | ||
49 | #define DECLARE_RWSEM(name) \ | 50 | #define DECLARE_RWSEM(name) \ |
50 | struct rw_semaphore name = __RWSEM_INITIALIZER(name) | 51 | struct rw_semaphore name = __RWSEM_INITIALIZER(name) |
diff --git a/include/linux/sched.h b/include/linux/sched.h index eafe4a7b8237..dede82c63445 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -194,7 +194,16 @@ extern void init_idle(struct task_struct *idle, int cpu); | |||
194 | 194 | ||
195 | extern cpumask_t nohz_cpu_mask; | 195 | extern cpumask_t nohz_cpu_mask; |
196 | 196 | ||
197 | extern void show_state(void); | 197 | /* |
198 | * Only dump TASK_* tasks. (-1 for all tasks) | ||
199 | */ | ||
200 | extern void show_state_filter(unsigned long state_filter); | ||
201 | |||
202 | static inline void show_state(void) | ||
203 | { | ||
204 | show_state_filter(-1); | ||
205 | } | ||
206 | |||
198 | extern void show_regs(struct pt_regs *); | 207 | extern void show_regs(struct pt_regs *); |
199 | 208 | ||
200 | /* | 209 | /* |
@@ -338,15 +347,23 @@ struct mm_struct { | |||
338 | 347 | ||
339 | unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ | 348 | unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ |
340 | 349 | ||
341 | unsigned dumpable:2; | ||
342 | cpumask_t cpu_vm_mask; | 350 | cpumask_t cpu_vm_mask; |
343 | 351 | ||
344 | /* Architecture-specific MM context */ | 352 | /* Architecture-specific MM context */ |
345 | mm_context_t context; | 353 | mm_context_t context; |
346 | 354 | ||
347 | /* Token based thrashing protection. */ | 355 | /* Swap token stuff */ |
348 | unsigned long swap_token_time; | 356 | /* |
349 | char recent_pagein; | 357 | * Last value of global fault stamp as seen by this process. |
358 | * In other words, this value gives an indication of how long | ||
359 | * it has been since this task got the token. | ||
360 | * Look at mm/thrash.c | ||
361 | */ | ||
362 | unsigned int faultstamp; | ||
363 | unsigned int token_priority; | ||
364 | unsigned int last_interval; | ||
365 | |||
366 | unsigned char dumpable:2; | ||
350 | 367 | ||
351 | /* coredumping support */ | 368 | /* coredumping support */ |
352 | int core_waiters; | 369 | int core_waiters; |
@@ -556,7 +573,7 @@ struct sched_info { | |||
556 | #endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */ | 573 | #endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */ |
557 | 574 | ||
558 | #ifdef CONFIG_SCHEDSTATS | 575 | #ifdef CONFIG_SCHEDSTATS |
559 | extern struct file_operations proc_schedstat_operations; | 576 | extern const struct file_operations proc_schedstat_operations; |
560 | #endif /* CONFIG_SCHEDSTATS */ | 577 | #endif /* CONFIG_SCHEDSTATS */ |
561 | 578 | ||
562 | #ifdef CONFIG_TASK_DELAY_ACCT | 579 | #ifdef CONFIG_TASK_DELAY_ACCT |
@@ -1288,7 +1305,6 @@ extern int kill_pgrp(struct pid *pid, int sig, int priv); | |||
1288 | extern int kill_pid(struct pid *pid, int sig, int priv); | 1305 | extern int kill_pid(struct pid *pid, int sig, int priv); |
1289 | extern int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp); | 1306 | extern int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp); |
1290 | extern int kill_pg_info(int, struct siginfo *, pid_t); | 1307 | extern int kill_pg_info(int, struct siginfo *, pid_t); |
1291 | extern int kill_proc_info(int, struct siginfo *, pid_t); | ||
1292 | extern void do_notify_parent(struct task_struct *, int); | 1308 | extern void do_notify_parent(struct task_struct *, int); |
1293 | extern void force_sig(int, struct task_struct *); | 1309 | extern void force_sig(int, struct task_struct *); |
1294 | extern void force_sig_specific(int, struct task_struct *); | 1310 | extern void force_sig_specific(int, struct task_struct *); |
@@ -1610,87 +1626,6 @@ extern int sched_create_sysfs_power_savings_entries(struct sysdev_class *cls); | |||
1610 | 1626 | ||
1611 | extern void normalize_rt_tasks(void); | 1627 | extern void normalize_rt_tasks(void); |
1612 | 1628 | ||
1613 | #ifdef CONFIG_PM | ||
1614 | /* | ||
1615 | * Check if a process has been frozen | ||
1616 | */ | ||
1617 | static inline int frozen(struct task_struct *p) | ||
1618 | { | ||
1619 | return p->flags & PF_FROZEN; | ||
1620 | } | ||
1621 | |||
1622 | /* | ||
1623 | * Check if there is a request to freeze a process | ||
1624 | */ | ||
1625 | static inline int freezing(struct task_struct *p) | ||
1626 | { | ||
1627 | return p->flags & PF_FREEZE; | ||
1628 | } | ||
1629 | |||
1630 | /* | ||
1631 | * Request that a process be frozen | ||
1632 | * FIXME: SMP problem. We may not modify other process' flags! | ||
1633 | */ | ||
1634 | static inline void freeze(struct task_struct *p) | ||
1635 | { | ||
1636 | p->flags |= PF_FREEZE; | ||
1637 | } | ||
1638 | |||
1639 | /* | ||
1640 | * Sometimes we may need to cancel the previous 'freeze' request | ||
1641 | */ | ||
1642 | static inline void do_not_freeze(struct task_struct *p) | ||
1643 | { | ||
1644 | p->flags &= ~PF_FREEZE; | ||
1645 | } | ||
1646 | |||
1647 | /* | ||
1648 | * Wake up a frozen process | ||
1649 | */ | ||
1650 | static inline int thaw_process(struct task_struct *p) | ||
1651 | { | ||
1652 | if (frozen(p)) { | ||
1653 | p->flags &= ~PF_FROZEN; | ||
1654 | wake_up_process(p); | ||
1655 | return 1; | ||
1656 | } | ||
1657 | return 0; | ||
1658 | } | ||
1659 | |||
1660 | /* | ||
1661 | * freezing is complete, mark process as frozen | ||
1662 | */ | ||
1663 | static inline void frozen_process(struct task_struct *p) | ||
1664 | { | ||
1665 | p->flags = (p->flags & ~PF_FREEZE) | PF_FROZEN; | ||
1666 | } | ||
1667 | |||
1668 | extern void refrigerator(void); | ||
1669 | extern int freeze_processes(void); | ||
1670 | extern void thaw_processes(void); | ||
1671 | |||
1672 | static inline int try_to_freeze(void) | ||
1673 | { | ||
1674 | if (freezing(current)) { | ||
1675 | refrigerator(); | ||
1676 | return 1; | ||
1677 | } else | ||
1678 | return 0; | ||
1679 | } | ||
1680 | #else | ||
1681 | static inline int frozen(struct task_struct *p) { return 0; } | ||
1682 | static inline int freezing(struct task_struct *p) { return 0; } | ||
1683 | static inline void freeze(struct task_struct *p) { BUG(); } | ||
1684 | static inline int thaw_process(struct task_struct *p) { return 1; } | ||
1685 | static inline void frozen_process(struct task_struct *p) { BUG(); } | ||
1686 | |||
1687 | static inline void refrigerator(void) {} | ||
1688 | static inline int freeze_processes(void) { BUG(); return 0; } | ||
1689 | static inline void thaw_processes(void) {} | ||
1690 | |||
1691 | static inline int try_to_freeze(void) { return 0; } | ||
1692 | |||
1693 | #endif /* CONFIG_PM */ | ||
1694 | #endif /* __KERNEL__ */ | 1629 | #endif /* __KERNEL__ */ |
1695 | 1630 | ||
1696 | #endif | 1631 | #endif |
diff --git a/include/linux/screen_info.h b/include/linux/screen_info.h index 2925e66a6732..b02308ee7667 100644 --- a/include/linux/screen_info.h +++ b/include/linux/screen_info.h | |||
@@ -42,7 +42,8 @@ struct screen_info { | |||
42 | u16 pages; /* 0x32 */ | 42 | u16 pages; /* 0x32 */ |
43 | u16 vesa_attributes; /* 0x34 */ | 43 | u16 vesa_attributes; /* 0x34 */ |
44 | u32 capabilities; /* 0x36 */ | 44 | u32 capabilities; /* 0x36 */ |
45 | /* 0x3a -- 0x3f reserved for future expansion */ | 45 | /* 0x3a -- 0x3b reserved for future expansion */ |
46 | /* 0x3c -- 0x3f micro stack for relocatable kernels */ | ||
46 | }; | 47 | }; |
47 | 48 | ||
48 | extern struct screen_info screen_info; | 49 | extern struct screen_info screen_info; |
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h index b95f6eb7254c..3e3cccbb1cac 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h | |||
@@ -20,7 +20,7 @@ struct seq_file { | |||
20 | loff_t index; | 20 | loff_t index; |
21 | loff_t version; | 21 | loff_t version; |
22 | struct mutex lock; | 22 | struct mutex lock; |
23 | struct seq_operations *op; | 23 | const struct seq_operations *op; |
24 | void *private; | 24 | void *private; |
25 | }; | 25 | }; |
26 | 26 | ||
@@ -31,7 +31,7 @@ struct seq_operations { | |||
31 | int (*show) (struct seq_file *m, void *v); | 31 | int (*show) (struct seq_file *m, void *v); |
32 | }; | 32 | }; |
33 | 33 | ||
34 | int seq_open(struct file *, struct seq_operations *); | 34 | int seq_open(struct file *, const struct seq_operations *); |
35 | ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); | 35 | ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); |
36 | loff_t seq_lseek(struct file *, loff_t, int); | 36 | loff_t seq_lseek(struct file *, loff_t, int); |
37 | int seq_release(struct inode *, struct file *); | 37 | int seq_release(struct inode *, struct file *); |
diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h index 8e9681413726..71310d80c09a 100644 --- a/include/linux/serial_8250.h +++ b/include/linux/serial_8250.h | |||
@@ -41,6 +41,7 @@ enum { | |||
41 | PLAT8250_DEV_FOURPORT, | 41 | PLAT8250_DEV_FOURPORT, |
42 | PLAT8250_DEV_ACCENT, | 42 | PLAT8250_DEV_ACCENT, |
43 | PLAT8250_DEV_BOCA, | 43 | PLAT8250_DEV_BOCA, |
44 | PLAT8250_DEV_EXAR_ST16C554, | ||
44 | PLAT8250_DEV_HUB6, | 45 | PLAT8250_DEV_HUB6, |
45 | PLAT8250_DEV_MCA, | 46 | PLAT8250_DEV_MCA, |
46 | PLAT8250_DEV_AU1X00, | 47 | PLAT8250_DEV_AU1X00, |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 463ab953b092..827672136646 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
@@ -132,6 +132,8 @@ | |||
132 | 132 | ||
133 | #define PORT_S3C2412 73 | 133 | #define PORT_S3C2412 73 |
134 | 134 | ||
135 | /* Xilinx uartlite */ | ||
136 | #define PORT_UARTLITE 74 | ||
135 | 137 | ||
136 | #ifdef __KERNEL__ | 138 | #ifdef __KERNEL__ |
137 | 139 | ||
diff --git a/include/linux/signal.h b/include/linux/signal.h index 117135e33d67..14749056dd63 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
@@ -241,6 +241,8 @@ extern int sigprocmask(int, sigset_t *, sigset_t *); | |||
241 | struct pt_regs; | 241 | struct pt_regs; |
242 | extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); | 242 | extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); |
243 | 243 | ||
244 | extern struct kmem_cache *sighand_cachep; | ||
245 | |||
244 | #endif /* __KERNEL__ */ | 246 | #endif /* __KERNEL__ */ |
245 | 247 | ||
246 | #endif /* _LINUX_SIGNAL_H */ | 248 | #endif /* _LINUX_SIGNAL_H */ |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index a05a5f7c0b73..4ff3940210d8 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -332,20 +332,20 @@ struct sk_buff { | |||
332 | extern void kfree_skb(struct sk_buff *skb); | 332 | extern void kfree_skb(struct sk_buff *skb); |
333 | extern void __kfree_skb(struct sk_buff *skb); | 333 | extern void __kfree_skb(struct sk_buff *skb); |
334 | extern struct sk_buff *__alloc_skb(unsigned int size, | 334 | extern struct sk_buff *__alloc_skb(unsigned int size, |
335 | gfp_t priority, int fclone); | 335 | gfp_t priority, int fclone, int node); |
336 | static inline struct sk_buff *alloc_skb(unsigned int size, | 336 | static inline struct sk_buff *alloc_skb(unsigned int size, |
337 | gfp_t priority) | 337 | gfp_t priority) |
338 | { | 338 | { |
339 | return __alloc_skb(size, priority, 0); | 339 | return __alloc_skb(size, priority, 0, -1); |
340 | } | 340 | } |
341 | 341 | ||
342 | static inline struct sk_buff *alloc_skb_fclone(unsigned int size, | 342 | static inline struct sk_buff *alloc_skb_fclone(unsigned int size, |
343 | gfp_t priority) | 343 | gfp_t priority) |
344 | { | 344 | { |
345 | return __alloc_skb(size, priority, 1); | 345 | return __alloc_skb(size, priority, 1, -1); |
346 | } | 346 | } |
347 | 347 | ||
348 | extern struct sk_buff *alloc_skb_from_cache(kmem_cache_t *cp, | 348 | extern struct sk_buff *alloc_skb_from_cache(struct kmem_cache *cp, |
349 | unsigned int size, | 349 | unsigned int size, |
350 | gfp_t priority); | 350 | gfp_t priority); |
351 | extern void kfree_skbmem(struct sk_buff *skb); | 351 | extern void kfree_skbmem(struct sk_buff *skb); |
diff --git a/include/linux/slab.h b/include/linux/slab.h index c4947b8a2c03..2271886744f8 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -7,27 +7,17 @@ | |||
7 | #ifndef _LINUX_SLAB_H | 7 | #ifndef _LINUX_SLAB_H |
8 | #define _LINUX_SLAB_H | 8 | #define _LINUX_SLAB_H |
9 | 9 | ||
10 | #if defined(__KERNEL__) | 10 | #ifdef __KERNEL__ |
11 | 11 | ||
12 | typedef struct kmem_cache kmem_cache_t; | 12 | #include <linux/gfp.h> |
13 | #include <linux/init.h> | ||
14 | #include <linux/types.h> | ||
15 | #include <asm/page.h> /* kmalloc_sizes.h needs PAGE_SIZE */ | ||
16 | #include <asm/cache.h> /* kmalloc_sizes.h needs L1_CACHE_BYTES */ | ||
17 | #include <linux/compiler.h> | ||
13 | 18 | ||
14 | #include <linux/gfp.h> | 19 | /* kmem_cache_t exists for legacy reasons and is not used by code in mm */ |
15 | #include <linux/init.h> | 20 | typedef struct kmem_cache kmem_cache_t __deprecated; |
16 | #include <linux/types.h> | ||
17 | #include <asm/page.h> /* kmalloc_sizes.h needs PAGE_SIZE */ | ||
18 | #include <asm/cache.h> /* kmalloc_sizes.h needs L1_CACHE_BYTES */ | ||
19 | |||
20 | /* flags for kmem_cache_alloc() */ | ||
21 | #define SLAB_NOFS GFP_NOFS | ||
22 | #define SLAB_NOIO GFP_NOIO | ||
23 | #define SLAB_ATOMIC GFP_ATOMIC | ||
24 | #define SLAB_USER GFP_USER | ||
25 | #define SLAB_KERNEL GFP_KERNEL | ||
26 | #define SLAB_DMA GFP_DMA | ||
27 | |||
28 | #define SLAB_LEVEL_MASK GFP_LEVEL_MASK | ||
29 | |||
30 | #define SLAB_NO_GROW __GFP_NO_GROW /* don't grow a cache */ | ||
31 | 21 | ||
32 | /* flags to pass to kmem_cache_create(). | 22 | /* flags to pass to kmem_cache_create(). |
33 | * The first 3 are only valid when the allocator as been build | 23 | * The first 3 are only valid when the allocator as been build |
@@ -57,22 +47,23 @@ typedef struct kmem_cache kmem_cache_t; | |||
57 | /* prototypes */ | 47 | /* prototypes */ |
58 | extern void __init kmem_cache_init(void); | 48 | extern void __init kmem_cache_init(void); |
59 | 49 | ||
60 | extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long, | 50 | extern struct kmem_cache *kmem_cache_create(const char *, size_t, size_t, |
61 | void (*)(void *, kmem_cache_t *, unsigned long), | 51 | unsigned long, |
62 | void (*)(void *, kmem_cache_t *, unsigned long)); | 52 | void (*)(void *, struct kmem_cache *, unsigned long), |
63 | extern void kmem_cache_destroy(kmem_cache_t *); | 53 | void (*)(void *, struct kmem_cache *, unsigned long)); |
64 | extern int kmem_cache_shrink(kmem_cache_t *); | 54 | extern void kmem_cache_destroy(struct kmem_cache *); |
65 | extern void *kmem_cache_alloc(kmem_cache_t *, gfp_t); | 55 | extern int kmem_cache_shrink(struct kmem_cache *); |
56 | extern void *kmem_cache_alloc(struct kmem_cache *, gfp_t); | ||
66 | extern void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); | 57 | extern void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); |
67 | extern void kmem_cache_free(kmem_cache_t *, void *); | 58 | extern void kmem_cache_free(struct kmem_cache *, void *); |
68 | extern unsigned int kmem_cache_size(kmem_cache_t *); | 59 | extern unsigned int kmem_cache_size(struct kmem_cache *); |
69 | extern const char *kmem_cache_name(kmem_cache_t *); | 60 | extern const char *kmem_cache_name(struct kmem_cache *); |
70 | 61 | ||
71 | /* Size description struct for general caches. */ | 62 | /* Size description struct for general caches. */ |
72 | struct cache_sizes { | 63 | struct cache_sizes { |
73 | size_t cs_size; | 64 | size_t cs_size; |
74 | kmem_cache_t *cs_cachep; | 65 | struct kmem_cache *cs_cachep; |
75 | kmem_cache_t *cs_dmacachep; | 66 | struct kmem_cache *cs_dmacachep; |
76 | }; | 67 | }; |
77 | extern struct cache_sizes malloc_sizes[]; | 68 | extern struct cache_sizes malloc_sizes[]; |
78 | 69 | ||
@@ -211,7 +202,7 @@ extern unsigned int ksize(const void *); | |||
211 | extern int slab_is_available(void); | 202 | extern int slab_is_available(void); |
212 | 203 | ||
213 | #ifdef CONFIG_NUMA | 204 | #ifdef CONFIG_NUMA |
214 | extern void *kmem_cache_alloc_node(kmem_cache_t *, gfp_t flags, int node); | 205 | extern void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node); |
215 | extern void *__kmalloc_node(size_t size, gfp_t flags, int node); | 206 | extern void *__kmalloc_node(size_t size, gfp_t flags, int node); |
216 | 207 | ||
217 | static inline void *kmalloc_node(size_t size, gfp_t flags, int node) | 208 | static inline void *kmalloc_node(size_t size, gfp_t flags, int node) |
@@ -236,8 +227,27 @@ found: | |||
236 | } | 227 | } |
237 | return __kmalloc_node(size, flags, node); | 228 | return __kmalloc_node(size, flags, node); |
238 | } | 229 | } |
230 | |||
231 | /* | ||
232 | * kmalloc_node_track_caller is a special version of kmalloc_node that | ||
233 | * records the calling function of the routine calling it for slab leak | ||
234 | * tracking instead of just the calling function (confusing, eh?). | ||
235 | * It's useful when the call to kmalloc_node comes from a widely-used | ||
236 | * standard allocator where we care about the real place the memory | ||
237 | * allocation request comes from. | ||
238 | */ | ||
239 | #ifndef CONFIG_DEBUG_SLAB | ||
240 | #define kmalloc_node_track_caller(size, flags, node) \ | ||
241 | __kmalloc_node(size, flags, node) | ||
239 | #else | 242 | #else |
240 | static inline void *kmem_cache_alloc_node(kmem_cache_t *cachep, gfp_t flags, int node) | 243 | extern void *__kmalloc_node_track_caller(size_t, gfp_t, int, void *); |
244 | #define kmalloc_node_track_caller(size, flags, node) \ | ||
245 | __kmalloc_node_track_caller(size, flags, node, \ | ||
246 | __builtin_return_address(0)) | ||
247 | #endif | ||
248 | #else /* CONFIG_NUMA */ | ||
249 | static inline void *kmem_cache_alloc_node(struct kmem_cache *cachep, | ||
250 | gfp_t flags, int node) | ||
241 | { | 251 | { |
242 | return kmem_cache_alloc(cachep, flags); | 252 | return kmem_cache_alloc(cachep, flags); |
243 | } | 253 | } |
@@ -245,10 +255,13 @@ static inline void *kmalloc_node(size_t size, gfp_t flags, int node) | |||
245 | { | 255 | { |
246 | return kmalloc(size, flags); | 256 | return kmalloc(size, flags); |
247 | } | 257 | } |
258 | |||
259 | #define kmalloc_node_track_caller(size, flags, node) \ | ||
260 | kmalloc_track_caller(size, flags) | ||
248 | #endif | 261 | #endif |
249 | 262 | ||
250 | extern int FASTCALL(kmem_cache_reap(int)); | 263 | extern int FASTCALL(kmem_cache_reap(int)); |
251 | extern int FASTCALL(kmem_ptr_validate(kmem_cache_t *cachep, void *ptr)); | 264 | extern int FASTCALL(kmem_ptr_validate(struct kmem_cache *cachep, void *ptr)); |
252 | 265 | ||
253 | #else /* CONFIG_SLOB */ | 266 | #else /* CONFIG_SLOB */ |
254 | 267 | ||
@@ -283,16 +296,9 @@ static inline void *kcalloc(size_t n, size_t size, gfp_t flags) | |||
283 | #define kzalloc(s, f) __kzalloc(s, f) | 296 | #define kzalloc(s, f) __kzalloc(s, f) |
284 | #define kmalloc_track_caller kmalloc | 297 | #define kmalloc_track_caller kmalloc |
285 | 298 | ||
286 | #endif /* CONFIG_SLOB */ | 299 | #define kmalloc_node_track_caller kmalloc_node |
287 | 300 | ||
288 | /* System wide caches */ | 301 | #endif /* CONFIG_SLOB */ |
289 | extern kmem_cache_t *vm_area_cachep; | ||
290 | extern kmem_cache_t *names_cachep; | ||
291 | extern kmem_cache_t *files_cachep; | ||
292 | extern kmem_cache_t *filp_cachep; | ||
293 | extern kmem_cache_t *fs_cachep; | ||
294 | extern kmem_cache_t *sighand_cachep; | ||
295 | extern kmem_cache_t *bio_cachep; | ||
296 | 302 | ||
297 | #endif /* __KERNEL__ */ | 303 | #endif /* __KERNEL__ */ |
298 | 304 | ||
diff --git a/include/linux/smp.h b/include/linux/smp.h index 51649987f691..7ba23ec8211b 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h | |||
@@ -99,6 +99,13 @@ static inline int up_smp_call_function(void) | |||
99 | static inline void smp_send_reschedule(int cpu) { } | 99 | static inline void smp_send_reschedule(int cpu) { } |
100 | #define num_booting_cpus() 1 | 100 | #define num_booting_cpus() 1 |
101 | #define smp_prepare_boot_cpu() do {} while (0) | 101 | #define smp_prepare_boot_cpu() do {} while (0) |
102 | static inline int smp_call_function_single(int cpuid, void (*func) (void *info), | ||
103 | void *info, int retry, int wait) | ||
104 | { | ||
105 | /* Disable interrupts here? */ | ||
106 | func(info); | ||
107 | return 0; | ||
108 | } | ||
102 | 109 | ||
103 | #endif /* !SMP */ | 110 | #endif /* !SMP */ |
104 | 111 | ||
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index 8451052ca66f..94b767d64275 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h | |||
@@ -52,6 +52,7 @@ | |||
52 | #include <linux/thread_info.h> | 52 | #include <linux/thread_info.h> |
53 | #include <linux/kernel.h> | 53 | #include <linux/kernel.h> |
54 | #include <linux/stringify.h> | 54 | #include <linux/stringify.h> |
55 | #include <linux/bottom_half.h> | ||
55 | 56 | ||
56 | #include <asm/system.h> | 57 | #include <asm/system.h> |
57 | 58 | ||
diff --git a/include/linux/start_kernel.h b/include/linux/start_kernel.h new file mode 100644 index 000000000000..d3e5f2756545 --- /dev/null +++ b/include/linux/start_kernel.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef _LINUX_START_KERNEL_H | ||
2 | #define _LINUX_START_KERNEL_H | ||
3 | |||
4 | #include <linux/linkage.h> | ||
5 | #include <linux/init.h> | ||
6 | |||
7 | /* Define the prototype for start_kernel here, rather than cluttering | ||
8 | up something else. */ | ||
9 | |||
10 | extern asmlinkage void __init start_kernel(void); | ||
11 | |||
12 | #endif /* _LINUX_START_KERNEL_H */ | ||
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index b6b6ad6253b4..97c761652581 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h | |||
@@ -217,7 +217,7 @@ struct rpc_wait_queue { | |||
217 | 217 | ||
218 | #ifndef RPC_DEBUG | 218 | #ifndef RPC_DEBUG |
219 | # define RPC_WAITQ_INIT(var,qname) { \ | 219 | # define RPC_WAITQ_INIT(var,qname) { \ |
220 | .lock = SPIN_LOCK_UNLOCKED, \ | 220 | .lock = __SPIN_LOCK_UNLOCKED(var.lock), \ |
221 | .tasks = { \ | 221 | .tasks = { \ |
222 | [0] = LIST_HEAD_INIT(var.tasks[0]), \ | 222 | [0] = LIST_HEAD_INIT(var.tasks[0]), \ |
223 | [1] = LIST_HEAD_INIT(var.tasks[1]), \ | 223 | [1] = LIST_HEAD_INIT(var.tasks[1]), \ |
@@ -226,7 +226,7 @@ struct rpc_wait_queue { | |||
226 | } | 226 | } |
227 | #else | 227 | #else |
228 | # define RPC_WAITQ_INIT(var,qname) { \ | 228 | # define RPC_WAITQ_INIT(var,qname) { \ |
229 | .lock = SPIN_LOCK_UNLOCKED, \ | 229 | .lock = __SPIN_LOCK_UNLOCKED(var.lock), \ |
230 | .tasks = { \ | 230 | .tasks = { \ |
231 | [0] = LIST_HEAD_INIT(var.tasks[0]), \ | 231 | [0] = LIST_HEAD_INIT(var.tasks[0]), \ |
232 | [1] = LIST_HEAD_INIT(var.tasks[1]), \ | 232 | [1] = LIST_HEAD_INIT(var.tasks[1]), \ |
diff --git a/include/linux/suspend.h b/include/linux/suspend.h index b1237f16ecde..bf99bd49f8ef 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h | |||
@@ -9,10 +9,13 @@ | |||
9 | #include <linux/init.h> | 9 | #include <linux/init.h> |
10 | #include <linux/pm.h> | 10 | #include <linux/pm.h> |
11 | 11 | ||
12 | /* page backup entry */ | 12 | /* struct pbe is used for creating lists of pages that should be restored |
13 | * atomically during the resume from disk, because the page frames they have | ||
14 | * occupied before the suspend are in use. | ||
15 | */ | ||
13 | struct pbe { | 16 | struct pbe { |
14 | unsigned long address; /* address of the copy */ | 17 | void *address; /* address of the copy */ |
15 | unsigned long orig_address; /* original address of page */ | 18 | void *orig_address; /* original address of a page */ |
16 | struct pbe *next; | 19 | struct pbe *next; |
17 | }; | 20 | }; |
18 | 21 | ||
diff --git a/include/linux/swap.h b/include/linux/swap.h index e7c36ba2a2db..add51cebc8d9 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
@@ -218,8 +218,6 @@ extern void swap_unplug_io_fn(struct backing_dev_info *, struct page *); | |||
218 | /* linux/mm/page_io.c */ | 218 | /* linux/mm/page_io.c */ |
219 | extern int swap_readpage(struct file *, struct page *); | 219 | extern int swap_readpage(struct file *, struct page *); |
220 | extern int swap_writepage(struct page *page, struct writeback_control *wbc); | 220 | extern int swap_writepage(struct page *page, struct writeback_control *wbc); |
221 | extern int rw_swap_page_sync(int rw, swp_entry_t entry, struct page *page, | ||
222 | struct bio **bio_chain); | ||
223 | extern int end_swap_bio_read(struct bio *bio, unsigned int bytes_done, int err); | 221 | extern int end_swap_bio_read(struct bio *bio, unsigned int bytes_done, int err); |
224 | 222 | ||
225 | /* linux/mm/swap_state.c */ | 223 | /* linux/mm/swap_state.c */ |
@@ -247,9 +245,10 @@ extern int swap_duplicate(swp_entry_t); | |||
247 | extern int valid_swaphandles(swp_entry_t, unsigned long *); | 245 | extern int valid_swaphandles(swp_entry_t, unsigned long *); |
248 | extern void swap_free(swp_entry_t); | 246 | extern void swap_free(swp_entry_t); |
249 | extern void free_swap_and_cache(swp_entry_t); | 247 | extern void free_swap_and_cache(swp_entry_t); |
250 | extern int swap_type_of(dev_t); | 248 | extern int swap_type_of(dev_t, sector_t); |
251 | extern unsigned int count_swap_pages(int, int); | 249 | extern unsigned int count_swap_pages(int, int); |
252 | extern sector_t map_swap_page(struct swap_info_struct *, pgoff_t); | 250 | extern sector_t map_swap_page(struct swap_info_struct *, pgoff_t); |
251 | extern sector_t swapdev_block(int, pgoff_t); | ||
253 | extern struct swap_info_struct *get_swap_info_struct(unsigned); | 252 | extern struct swap_info_struct *get_swap_info_struct(unsigned); |
254 | extern int can_share_swap_page(struct page *); | 253 | extern int can_share_swap_page(struct page *); |
255 | extern int remove_exclusive_swap_page(struct page *); | 254 | extern int remove_exclusive_swap_page(struct page *); |
@@ -259,7 +258,6 @@ extern spinlock_t swap_lock; | |||
259 | 258 | ||
260 | /* linux/mm/thrash.c */ | 259 | /* linux/mm/thrash.c */ |
261 | extern struct mm_struct * swap_token_mm; | 260 | extern struct mm_struct * swap_token_mm; |
262 | extern unsigned long swap_token_default_timeout; | ||
263 | extern void grab_swap_token(void); | 261 | extern void grab_swap_token(void); |
264 | extern void __put_swap_token(struct mm_struct *); | 262 | extern void __put_swap_token(struct mm_struct *); |
265 | 263 | ||
diff --git a/include/linux/taskstats_kern.h b/include/linux/taskstats_kern.h index 6562a2050a25..7e9680f4afdd 100644 --- a/include/linux/taskstats_kern.h +++ b/include/linux/taskstats_kern.h | |||
@@ -12,64 +12,27 @@ | |||
12 | #include <net/genetlink.h> | 12 | #include <net/genetlink.h> |
13 | 13 | ||
14 | #ifdef CONFIG_TASKSTATS | 14 | #ifdef CONFIG_TASKSTATS |
15 | extern kmem_cache_t *taskstats_cache; | 15 | extern struct kmem_cache *taskstats_cache; |
16 | extern struct mutex taskstats_exit_mutex; | 16 | extern struct mutex taskstats_exit_mutex; |
17 | 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) | 18 | static inline void taskstats_tgid_init(struct signal_struct *sig) |
25 | { | 19 | { |
26 | sig->stats = NULL; | 20 | sig->stats = NULL; |
27 | } | 21 | } |
28 | 22 | ||
29 | static inline void taskstats_tgid_alloc(struct task_struct *tsk) | ||
30 | { | ||
31 | struct signal_struct *sig = tsk->signal; | ||
32 | struct taskstats *stats; | ||
33 | |||
34 | if (sig->stats != NULL) | ||
35 | return; | ||
36 | |||
37 | /* No problem if kmem_cache_zalloc() fails */ | ||
38 | stats = kmem_cache_zalloc(taskstats_cache, SLAB_KERNEL); | ||
39 | |||
40 | spin_lock_irq(&tsk->sighand->siglock); | ||
41 | if (!sig->stats) { | ||
42 | sig->stats = stats; | ||
43 | stats = NULL; | ||
44 | } | ||
45 | spin_unlock_irq(&tsk->sighand->siglock); | ||
46 | |||
47 | if (stats) | ||
48 | kmem_cache_free(taskstats_cache, stats); | ||
49 | } | ||
50 | |||
51 | static inline void taskstats_tgid_free(struct signal_struct *sig) | 23 | static inline void taskstats_tgid_free(struct signal_struct *sig) |
52 | { | 24 | { |
53 | if (sig->stats) | 25 | if (sig->stats) |
54 | kmem_cache_free(taskstats_cache, sig->stats); | 26 | kmem_cache_free(taskstats_cache, sig->stats); |
55 | } | 27 | } |
56 | 28 | ||
57 | extern void taskstats_exit_alloc(struct taskstats **, unsigned int *); | 29 | extern void taskstats_exit(struct task_struct *, int group_dead); |
58 | extern void taskstats_exit_send(struct task_struct *, struct taskstats *, int, unsigned int); | ||
59 | extern void taskstats_init_early(void); | 30 | extern void taskstats_init_early(void); |
60 | #else | 31 | #else |
61 | static inline void taskstats_exit_alloc(struct taskstats **ptidstats, unsigned int *mycpu) | 32 | static inline void taskstats_exit(struct task_struct *tsk, int group_dead) |
62 | {} | ||
63 | static inline void taskstats_exit_free(struct taskstats *ptidstats) | ||
64 | {} | ||
65 | static inline void taskstats_exit_send(struct task_struct *tsk, | ||
66 | struct taskstats *tidstats, | ||
67 | int group_dead, unsigned int cpu) | ||
68 | {} | 33 | {} |
69 | static inline void taskstats_tgid_init(struct signal_struct *sig) | 34 | static inline void taskstats_tgid_init(struct signal_struct *sig) |
70 | {} | 35 | {} |
71 | static inline void taskstats_tgid_alloc(struct task_struct *tsk) | ||
72 | {} | ||
73 | static inline void taskstats_tgid_free(struct signal_struct *sig) | 36 | static inline void taskstats_tgid_free(struct signal_struct *sig) |
74 | {} | 37 | {} |
75 | static inline void taskstats_init_early(void) | 38 | static inline void taskstats_init_early(void) |
diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h index a48d7f11c7be..975c963e5789 100644 --- a/include/linux/uaccess.h +++ b/include/linux/uaccess.h | |||
@@ -1,8 +1,43 @@ | |||
1 | #ifndef __LINUX_UACCESS_H__ | 1 | #ifndef __LINUX_UACCESS_H__ |
2 | #define __LINUX_UACCESS_H__ | 2 | #define __LINUX_UACCESS_H__ |
3 | 3 | ||
4 | #include <linux/preempt.h> | ||
4 | #include <asm/uaccess.h> | 5 | #include <asm/uaccess.h> |
5 | 6 | ||
7 | /* | ||
8 | * These routines enable/disable the pagefault handler in that | ||
9 | * it will not take any locks and go straight to the fixup table. | ||
10 | * | ||
11 | * They have great resemblance to the preempt_disable/enable calls | ||
12 | * and in fact they are identical; this is because currently there is | ||
13 | * no other way to make the pagefault handlers do this. So we do | ||
14 | * disable preemption but we don't necessarily care about that. | ||
15 | */ | ||
16 | static inline void pagefault_disable(void) | ||
17 | { | ||
18 | inc_preempt_count(); | ||
19 | /* | ||
20 | * make sure to have issued the store before a pagefault | ||
21 | * can hit. | ||
22 | */ | ||
23 | barrier(); | ||
24 | } | ||
25 | |||
26 | static inline void pagefault_enable(void) | ||
27 | { | ||
28 | /* | ||
29 | * make sure to issue those last loads/stores before enabling | ||
30 | * the pagefault handler again. | ||
31 | */ | ||
32 | barrier(); | ||
33 | dec_preempt_count(); | ||
34 | /* | ||
35 | * make sure we do.. | ||
36 | */ | ||
37 | barrier(); | ||
38 | preempt_check_resched(); | ||
39 | } | ||
40 | |||
6 | #ifndef ARCH_HAS_NOCACHE_UACCESS | 41 | #ifndef ARCH_HAS_NOCACHE_UACCESS |
7 | 42 | ||
8 | static inline unsigned long __copy_from_user_inatomic_nocache(void *to, | 43 | static inline unsigned long __copy_from_user_inatomic_nocache(void *to, |
@@ -30,14 +65,22 @@ static inline unsigned long __copy_from_user_nocache(void *to, | |||
30 | * do_page_fault() doesn't attempt to take mmap_sem. This makes | 65 | * do_page_fault() doesn't attempt to take mmap_sem. This makes |
31 | * probe_kernel_address() suitable for use within regions where the caller | 66 | * probe_kernel_address() suitable for use within regions where the caller |
32 | * already holds mmap_sem, or other locks which nest inside mmap_sem. | 67 | * already holds mmap_sem, or other locks which nest inside mmap_sem. |
68 | * This must be a macro because __get_user() needs to know the types of the | ||
69 | * args. | ||
70 | * | ||
71 | * We don't include enough header files to be able to do the set_fs(). We | ||
72 | * require that the probe_kernel_address() caller will do that. | ||
33 | */ | 73 | */ |
34 | #define probe_kernel_address(addr, retval) \ | 74 | #define probe_kernel_address(addr, retval) \ |
35 | ({ \ | 75 | ({ \ |
36 | long ret; \ | 76 | long ret; \ |
77 | mm_segment_t old_fs = get_fs(); \ | ||
37 | \ | 78 | \ |
38 | inc_preempt_count(); \ | 79 | set_fs(KERNEL_DS); \ |
39 | ret = __get_user(retval, addr); \ | 80 | pagefault_disable(); \ |
40 | dec_preempt_count(); \ | 81 | ret = __get_user(retval, (__force typeof(retval) __user *)(addr)); \ |
82 | pagefault_enable(); \ | ||
83 | set_fs(old_fs); \ | ||
41 | ret; \ | 84 | ret; \ |
42 | }) | 85 | }) |
43 | 86 | ||
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index 4a3ea83c6d16..edef8d50b26b 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h | |||
@@ -147,9 +147,11 @@ struct execute_work { | |||
147 | 147 | ||
148 | 148 | ||
149 | extern struct workqueue_struct *__create_workqueue(const char *name, | 149 | extern struct workqueue_struct *__create_workqueue(const char *name, |
150 | int singlethread); | 150 | int singlethread, |
151 | #define create_workqueue(name) __create_workqueue((name), 0) | 151 | int freezeable); |
152 | #define create_singlethread_workqueue(name) __create_workqueue((name), 1) | 152 | #define create_workqueue(name) __create_workqueue((name), 0, 0) |
153 | #define create_freezeable_workqueue(name) __create_workqueue((name), 0, 1) | ||
154 | #define create_singlethread_workqueue(name) __create_workqueue((name), 1, 0) | ||
153 | 155 | ||
154 | extern void destroy_workqueue(struct workqueue_struct *wq); | 156 | extern void destroy_workqueue(struct workqueue_struct *wq); |
155 | 157 | ||
@@ -160,6 +162,7 @@ extern int queue_delayed_work_on(int cpu, struct workqueue_struct *wq, | |||
160 | extern void FASTCALL(flush_workqueue(struct workqueue_struct *wq)); | 162 | extern void FASTCALL(flush_workqueue(struct workqueue_struct *wq)); |
161 | 163 | ||
162 | extern int FASTCALL(schedule_work(struct work_struct *work)); | 164 | extern int FASTCALL(schedule_work(struct work_struct *work)); |
165 | extern int FASTCALL(run_scheduled_work(struct work_struct *work)); | ||
163 | extern int FASTCALL(schedule_delayed_work(struct delayed_work *work, unsigned long delay)); | 166 | extern int FASTCALL(schedule_delayed_work(struct delayed_work *work, unsigned long delay)); |
164 | 167 | ||
165 | extern int schedule_delayed_work_on(int cpu, struct delayed_work *work, unsigned long delay); | 168 | extern int schedule_delayed_work_on(int cpu, struct delayed_work *work, unsigned long delay); |