diff options
Diffstat (limited to 'include')
48 files changed, 715 insertions, 243 deletions
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h index 3090471b2a5..e49c36d38d7 100644 --- a/include/acpi/acpi_drivers.h +++ b/include/acpi/acpi_drivers.h | |||
@@ -128,7 +128,7 @@ extern int is_dock_device(acpi_handle handle); | |||
128 | extern int register_dock_notifier(struct notifier_block *nb); | 128 | extern int register_dock_notifier(struct notifier_block *nb); |
129 | extern void unregister_dock_notifier(struct notifier_block *nb); | 129 | extern void unregister_dock_notifier(struct notifier_block *nb); |
130 | extern int register_hotplug_dock_device(acpi_handle handle, | 130 | extern int register_hotplug_dock_device(acpi_handle handle, |
131 | struct acpi_dock_ops *ops, | 131 | const struct acpi_dock_ops *ops, |
132 | void *context); | 132 | void *context); |
133 | extern void unregister_hotplug_dock_device(acpi_handle handle); | 133 | extern void unregister_hotplug_dock_device(acpi_handle handle); |
134 | #else | 134 | #else |
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index 2ed0a8486c1..f554a9313b4 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h | |||
@@ -47,7 +47,7 @@ | |||
47 | 47 | ||
48 | /* Current ACPICA subsystem version in YYYYMMDD format */ | 48 | /* Current ACPICA subsystem version in YYYYMMDD format */ |
49 | 49 | ||
50 | #define ACPI_CA_VERSION 0x20110413 | 50 | #define ACPI_CA_VERSION 0x20110623 |
51 | 51 | ||
52 | #include "actypes.h" | 52 | #include "actypes.h" |
53 | #include "actbl.h" | 53 | #include "actbl.h" |
@@ -69,6 +69,7 @@ extern u32 acpi_gbl_trace_flags; | |||
69 | extern u32 acpi_gbl_enable_aml_debug_object; | 69 | extern u32 acpi_gbl_enable_aml_debug_object; |
70 | extern u8 acpi_gbl_copy_dsdt_locally; | 70 | extern u8 acpi_gbl_copy_dsdt_locally; |
71 | extern u8 acpi_gbl_truncate_io_addresses; | 71 | extern u8 acpi_gbl_truncate_io_addresses; |
72 | extern u8 acpi_gbl_disable_auto_repair; | ||
72 | 73 | ||
73 | extern u32 acpi_current_gpe_count; | 74 | extern u32 acpi_current_gpe_count; |
74 | extern struct acpi_table_fadt acpi_gbl_FADT; | 75 | extern struct acpi_table_fadt acpi_gbl_FADT; |
diff --git a/include/acpi/apei.h b/include/acpi/apei.h index e67b523a50e..51a527d24a8 100644 --- a/include/acpi/apei.h +++ b/include/acpi/apei.h | |||
@@ -18,6 +18,11 @@ | |||
18 | 18 | ||
19 | extern int hest_disable; | 19 | extern int hest_disable; |
20 | extern int erst_disable; | 20 | extern int erst_disable; |
21 | #ifdef CONFIG_ACPI_APEI_GHES | ||
22 | extern int ghes_disable; | ||
23 | #else | ||
24 | #define ghes_disable 1 | ||
25 | #endif | ||
21 | 26 | ||
22 | #ifdef CONFIG_ACPI_APEI | 27 | #ifdef CONFIG_ACPI_APEI |
23 | void __init acpi_hest_init(void); | 28 | void __init acpi_hest_init(void); |
diff --git a/include/acpi/processor.h b/include/acpi/processor.h index ba4928cae47..67055f18033 100644 --- a/include/acpi/processor.h +++ b/include/acpi/processor.h | |||
@@ -337,7 +337,7 @@ extern struct cpuidle_driver acpi_idle_driver; | |||
337 | 337 | ||
338 | /* in processor_thermal.c */ | 338 | /* in processor_thermal.c */ |
339 | int acpi_processor_get_limit_info(struct acpi_processor *pr); | 339 | int acpi_processor_get_limit_info(struct acpi_processor *pr); |
340 | extern struct thermal_cooling_device_ops processor_cooling_ops; | 340 | extern const struct thermal_cooling_device_ops processor_cooling_ops; |
341 | #ifdef CONFIG_CPU_FREQ | 341 | #ifdef CONFIG_CPU_FREQ |
342 | void acpi_thermal_cpufreq_init(void); | 342 | void acpi_thermal_cpufreq_init(void); |
343 | void acpi_thermal_cpufreq_exit(void); | 343 | void acpi_thermal_cpufreq_exit(void); |
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 33d12f87f0e..44335e57eaa 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
@@ -205,6 +205,8 @@ struct drm_display_info { | |||
205 | enum subpixel_order subpixel_order; | 205 | enum subpixel_order subpixel_order; |
206 | u32 color_formats; | 206 | u32 color_formats; |
207 | 207 | ||
208 | u8 cea_rev; | ||
209 | |||
208 | char *raw_edid; /* if any */ | 210 | char *raw_edid; /* if any */ |
209 | }; | 211 | }; |
210 | 212 | ||
@@ -802,6 +804,7 @@ extern struct drm_display_mode *drm_gtf_mode_complex(struct drm_device *dev, | |||
802 | extern int drm_add_modes_noedid(struct drm_connector *connector, | 804 | extern int drm_add_modes_noedid(struct drm_connector *connector, |
803 | int hdisplay, int vdisplay); | 805 | int hdisplay, int vdisplay); |
804 | 806 | ||
807 | extern int drm_edid_header_is_valid(const u8 *raw_edid); | ||
805 | extern bool drm_edid_is_valid(struct edid *edid); | 808 | extern bool drm_edid_is_valid(struct edid *edid); |
806 | struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, | 809 | struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, |
807 | int hsize, int vsize, int fresh); | 810 | int hsize, int vsize, int fresh); |
diff --git a/include/drm/i915_drm.h b/include/drm/i915_drm.h index c4d6dbfa3ff..28c0d114cb5 100644 --- a/include/drm/i915_drm.h +++ b/include/drm/i915_drm.h | |||
@@ -237,7 +237,7 @@ typedef struct _drm_i915_sarea { | |||
237 | #define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture) | 237 | #define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture) |
238 | #define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_i915_get_pipe_from_crtc_id) | 238 | #define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_i915_get_pipe_from_crtc_id) |
239 | #define DRM_IOCTL_I915_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise) | 239 | #define DRM_IOCTL_I915_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise) |
240 | #define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE DRM_IOW(DRM_COMMAND_BASE + DRM_IOCTL_I915_OVERLAY_ATTRS, struct drm_intel_overlay_put_image) | 240 | #define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE DRM_IOW(DRM_COMMAND_BASE + DRM_I915_OVERLAY_PUT_IMAGE, struct drm_intel_overlay_put_image) |
241 | #define DRM_IOCTL_I915_OVERLAY_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs) | 241 | #define DRM_IOCTL_I915_OVERLAY_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs) |
242 | 242 | ||
243 | /* Allow drivers to submit batchbuffers directly to hardware, relying | 243 | /* Allow drivers to submit batchbuffers directly to hardware, relying |
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 1deb2a73c2d..6001b4da39d 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
@@ -238,7 +238,6 @@ extern int acpi_paddr_to_node(u64 start_addr, u64 size); | |||
238 | extern int pnpacpi_disabled; | 238 | extern int pnpacpi_disabled; |
239 | 239 | ||
240 | #define PXM_INVAL (-1) | 240 | #define PXM_INVAL (-1) |
241 | #define NID_INVAL (-1) | ||
242 | 241 | ||
243 | int acpi_check_resource_conflict(const struct resource *res); | 242 | int acpi_check_resource_conflict(const struct resource *res); |
244 | 243 | ||
@@ -280,6 +279,8 @@ acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context); | |||
280 | #define OSC_SB_CPUHP_OST_SUPPORT 8 | 279 | #define OSC_SB_CPUHP_OST_SUPPORT 8 |
281 | #define OSC_SB_APEI_SUPPORT 16 | 280 | #define OSC_SB_APEI_SUPPORT 16 |
282 | 281 | ||
282 | extern bool osc_sb_apei_support_acked; | ||
283 | |||
283 | /* PCI defined _OSC bits */ | 284 | /* PCI defined _OSC bits */ |
284 | /* _OSC DW1 Definition (OS Support Fields) */ | 285 | /* _OSC DW1 Definition (OS Support Fields) */ |
285 | #define OSC_EXT_PCI_CONFIG_SUPPORT 1 | 286 | #define OSC_EXT_PCI_CONFIG_SUPPORT 1 |
diff --git a/include/linux/amba/pl08x.h b/include/linux/amba/pl08x.h index 3111385b8ca..e6e28f37d8e 100644 --- a/include/linux/amba/pl08x.h +++ b/include/linux/amba/pl08x.h | |||
@@ -172,8 +172,11 @@ struct pl08x_dma_chan { | |||
172 | int phychan_hold; | 172 | int phychan_hold; |
173 | struct tasklet_struct tasklet; | 173 | struct tasklet_struct tasklet; |
174 | char *name; | 174 | char *name; |
175 | struct pl08x_channel_data *cd; | 175 | const struct pl08x_channel_data *cd; |
176 | dma_addr_t runtime_addr; | 176 | dma_addr_t src_addr; |
177 | dma_addr_t dst_addr; | ||
178 | u32 src_cctl; | ||
179 | u32 dst_cctl; | ||
177 | enum dma_data_direction runtime_direction; | 180 | enum dma_data_direction runtime_direction; |
178 | dma_cookie_t lc; | 181 | dma_cookie_t lc; |
179 | struct list_head pend_list; | 182 | struct list_head pend_list; |
@@ -202,7 +205,7 @@ struct pl08x_dma_chan { | |||
202 | * @mem_buses: buses which memory can be accessed from: PL08X_AHB1 | PL08X_AHB2 | 205 | * @mem_buses: buses which memory can be accessed from: PL08X_AHB1 | PL08X_AHB2 |
203 | */ | 206 | */ |
204 | struct pl08x_platform_data { | 207 | struct pl08x_platform_data { |
205 | struct pl08x_channel_data *slave_channels; | 208 | const struct pl08x_channel_data *slave_channels; |
206 | unsigned int num_slave_channels; | 209 | unsigned int num_slave_channels; |
207 | struct pl08x_channel_data memcpy_channel; | 210 | struct pl08x_channel_data memcpy_channel; |
208 | int (*get_signal)(struct pl08x_dma_chan *); | 211 | int (*get_signal)(struct pl08x_dma_chan *); |
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index 3bac44cce14..7ad634501e4 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h | |||
@@ -146,6 +146,7 @@ extern int bitmap_allocate_region(unsigned long *bitmap, int pos, int order); | |||
146 | extern void bitmap_copy_le(void *dst, const unsigned long *src, int nbits); | 146 | extern void bitmap_copy_le(void *dst, const unsigned long *src, int nbits); |
147 | extern int bitmap_ord_to_pos(const unsigned long *bitmap, int n, int bits); | 147 | extern int bitmap_ord_to_pos(const unsigned long *bitmap, int n, int bits); |
148 | 148 | ||
149 | #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) % BITS_PER_LONG)) | ||
149 | #define BITMAP_LAST_WORD_MASK(nbits) \ | 150 | #define BITMAP_LAST_WORD_MASK(nbits) \ |
150 | ( \ | 151 | ( \ |
151 | ((nbits) % BITS_PER_LONG) ? \ | 152 | ((nbits) % BITS_PER_LONG) ? \ |
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index 36719ead50e..b51629e15cf 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h | |||
@@ -122,6 +122,8 @@ struct cpuidle_driver { | |||
122 | }; | 122 | }; |
123 | 123 | ||
124 | #ifdef CONFIG_CPU_IDLE | 124 | #ifdef CONFIG_CPU_IDLE |
125 | extern void disable_cpuidle(void); | ||
126 | extern int cpuidle_idle_call(void); | ||
125 | 127 | ||
126 | extern int cpuidle_register_driver(struct cpuidle_driver *drv); | 128 | extern int cpuidle_register_driver(struct cpuidle_driver *drv); |
127 | struct cpuidle_driver *cpuidle_get_driver(void); | 129 | struct cpuidle_driver *cpuidle_get_driver(void); |
@@ -135,6 +137,8 @@ extern int cpuidle_enable_device(struct cpuidle_device *dev); | |||
135 | extern void cpuidle_disable_device(struct cpuidle_device *dev); | 137 | extern void cpuidle_disable_device(struct cpuidle_device *dev); |
136 | 138 | ||
137 | #else | 139 | #else |
140 | static inline void disable_cpuidle(void) { } | ||
141 | static inline int cpuidle_idle_call(void) { return -ENODEV; } | ||
138 | 142 | ||
139 | static inline int cpuidle_register_driver(struct cpuidle_driver *drv) | 143 | static inline int cpuidle_register_driver(struct cpuidle_driver *drv) |
140 | {return -ENODEV; } | 144 | {return -ENODEV; } |
diff --git a/include/linux/cred.h b/include/linux/cred.h index 48e82af1159..98f46efbe2d 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h | |||
@@ -265,10 +265,11 @@ static inline void put_cred(const struct cred *_cred) | |||
265 | /** | 265 | /** |
266 | * current_cred - Access the current task's subjective credentials | 266 | * current_cred - Access the current task's subjective credentials |
267 | * | 267 | * |
268 | * Access the subjective credentials of the current task. | 268 | * Access the subjective credentials of the current task. RCU-safe, |
269 | * since nobody else can modify it. | ||
269 | */ | 270 | */ |
270 | #define current_cred() \ | 271 | #define current_cred() \ |
271 | (current->cred) | 272 | (*(__force struct cred **)¤t->cred) |
272 | 273 | ||
273 | /** | 274 | /** |
274 | * __task_cred - Access a task's objective credentials | 275 | * __task_cred - Access a task's objective credentials |
@@ -307,7 +308,7 @@ static inline void put_cred(const struct cred *_cred) | |||
307 | ({ \ | 308 | ({ \ |
308 | struct user_struct *__u; \ | 309 | struct user_struct *__u; \ |
309 | struct cred *__cred; \ | 310 | struct cred *__cred; \ |
310 | __cred = (struct cred *) current_cred(); \ | 311 | __cred = current_cred(); \ |
311 | __u = get_uid(__cred->user); \ | 312 | __u = get_uid(__cred->user); \ |
312 | __u; \ | 313 | __u; \ |
313 | }) | 314 | }) |
@@ -322,7 +323,7 @@ static inline void put_cred(const struct cred *_cred) | |||
322 | ({ \ | 323 | ({ \ |
323 | struct group_info *__groups; \ | 324 | struct group_info *__groups; \ |
324 | struct cred *__cred; \ | 325 | struct cred *__cred; \ |
325 | __cred = (struct cred *) current_cred(); \ | 326 | __cred = current_cred(); \ |
326 | __groups = get_group_info(__cred->group_info); \ | 327 | __groups = get_group_info(__cred->group_info); \ |
327 | __groups; \ | 328 | __groups; \ |
328 | }) | 329 | }) |
@@ -341,7 +342,7 @@ static inline void put_cred(const struct cred *_cred) | |||
341 | 342 | ||
342 | #define current_cred_xxx(xxx) \ | 343 | #define current_cred_xxx(xxx) \ |
343 | ({ \ | 344 | ({ \ |
344 | current->cred->xxx; \ | 345 | current_cred()->xxx; \ |
345 | }) | 346 | }) |
346 | 347 | ||
347 | #define current_uid() (current_cred_xxx(uid)) | 348 | #define current_uid() (current_cred_xxx(uid)) |
diff --git a/include/linux/cryptohash.h b/include/linux/cryptohash.h index ec78a4bbe1d..2cd9f1cf9fa 100644 --- a/include/linux/cryptohash.h +++ b/include/linux/cryptohash.h | |||
@@ -3,11 +3,16 @@ | |||
3 | 3 | ||
4 | #define SHA_DIGEST_WORDS 5 | 4 | #define SHA_DIGEST_WORDS 5 |
5 | #define SHA_MESSAGE_BYTES (512 /*bits*/ / 8) | 5 | #define SHA_MESSAGE_BYTES (512 /*bits*/ / 8) |
6 | #define SHA_WORKSPACE_WORDS 80 | 6 | #define SHA_WORKSPACE_WORDS 16 |
7 | 7 | ||
8 | void sha_init(__u32 *buf); | 8 | void sha_init(__u32 *buf); |
9 | void sha_transform(__u32 *digest, const char *data, __u32 *W); | 9 | void sha_transform(__u32 *digest, const char *data, __u32 *W); |
10 | 10 | ||
11 | #define MD5_DIGEST_WORDS 4 | ||
12 | #define MD5_MESSAGE_BYTES 64 | ||
13 | |||
14 | void md5_transform(__u32 *hash, __u32 const *in); | ||
15 | |||
11 | __u32 half_md4_transform(__u32 buf[4], __u32 const in[8]); | 16 | __u32 half_md4_transform(__u32 buf[4], __u32 const in[8]); |
12 | 17 | ||
13 | #endif | 18 | #endif |
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index d37d2a79309..62157c03caf 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
@@ -180,12 +180,12 @@ struct dentry_operations { | |||
180 | */ | 180 | */ |
181 | 181 | ||
182 | /* d_flags entries */ | 182 | /* d_flags entries */ |
183 | #define DCACHE_AUTOFS_PENDING 0x0001 /* autofs: "under construction" */ | 183 | #define DCACHE_OP_HASH 0x0001 |
184 | #define DCACHE_NFSFS_RENAMED 0x0002 | 184 | #define DCACHE_OP_COMPARE 0x0002 |
185 | /* this dentry has been "silly renamed" and has to be deleted on the last | 185 | #define DCACHE_OP_REVALIDATE 0x0004 |
186 | * dput() */ | 186 | #define DCACHE_OP_DELETE 0x0008 |
187 | 187 | ||
188 | #define DCACHE_DISCONNECTED 0x0004 | 188 | #define DCACHE_DISCONNECTED 0x0010 |
189 | /* This dentry is possibly not currently connected to the dcache tree, in | 189 | /* This dentry is possibly not currently connected to the dcache tree, in |
190 | * which case its parent will either be itself, or will have this flag as | 190 | * which case its parent will either be itself, or will have this flag as |
191 | * well. nfsd will not use a dentry with this bit set, but will first | 191 | * well. nfsd will not use a dentry with this bit set, but will first |
@@ -196,22 +196,18 @@ struct dentry_operations { | |||
196 | * dentry into place and return that dentry rather than the passed one, | 196 | * dentry into place and return that dentry rather than the passed one, |
197 | * typically using d_splice_alias. */ | 197 | * typically using d_splice_alias. */ |
198 | 198 | ||
199 | #define DCACHE_REFERENCED 0x0008 /* Recently used, don't discard. */ | 199 | #define DCACHE_REFERENCED 0x0020 /* Recently used, don't discard. */ |
200 | #define DCACHE_RCUACCESS 0x0010 /* Entry has ever been RCU-visible */ | 200 | #define DCACHE_RCUACCESS 0x0040 /* Entry has ever been RCU-visible */ |
201 | #define DCACHE_INOTIFY_PARENT_WATCHED 0x0020 | ||
202 | /* Parent inode is watched by inotify */ | ||
203 | |||
204 | #define DCACHE_COOKIE 0x0040 /* For use by dcookie subsystem */ | ||
205 | #define DCACHE_FSNOTIFY_PARENT_WATCHED 0x0080 | ||
206 | /* Parent inode is watched by some fsnotify listener */ | ||
207 | 201 | ||
208 | #define DCACHE_CANT_MOUNT 0x0100 | 202 | #define DCACHE_CANT_MOUNT 0x0100 |
209 | #define DCACHE_GENOCIDE 0x0200 | 203 | #define DCACHE_GENOCIDE 0x0200 |
210 | 204 | ||
211 | #define DCACHE_OP_HASH 0x1000 | 205 | #define DCACHE_NFSFS_RENAMED 0x1000 |
212 | #define DCACHE_OP_COMPARE 0x2000 | 206 | /* this dentry has been "silly renamed" and has to be deleted on the last |
213 | #define DCACHE_OP_REVALIDATE 0x4000 | 207 | * dput() */ |
214 | #define DCACHE_OP_DELETE 0x8000 | 208 | #define DCACHE_COOKIE 0x2000 /* For use by dcookie subsystem */ |
209 | #define DCACHE_FSNOTIFY_PARENT_WATCHED 0x4000 | ||
210 | /* Parent inode is watched by some fsnotify listener */ | ||
215 | 211 | ||
216 | #define DCACHE_MOUNTED 0x10000 /* is a mountpoint */ | 212 | #define DCACHE_MOUNTED 0x10000 /* is a mountpoint */ |
217 | #define DCACHE_NEED_AUTOMOUNT 0x20000 /* handle automount on this dir */ | 213 | #define DCACHE_NEED_AUTOMOUNT 0x20000 /* handle automount on this dir */ |
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 4427e045405..3fa1f3d90ce 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h | |||
@@ -208,6 +208,49 @@ struct dm_target_callbacks { | |||
208 | int dm_register_target(struct target_type *t); | 208 | int dm_register_target(struct target_type *t); |
209 | void dm_unregister_target(struct target_type *t); | 209 | void dm_unregister_target(struct target_type *t); |
210 | 210 | ||
211 | /* | ||
212 | * Target argument parsing. | ||
213 | */ | ||
214 | struct dm_arg_set { | ||
215 | unsigned argc; | ||
216 | char **argv; | ||
217 | }; | ||
218 | |||
219 | /* | ||
220 | * The minimum and maximum value of a numeric argument, together with | ||
221 | * the error message to use if the number is found to be outside that range. | ||
222 | */ | ||
223 | struct dm_arg { | ||
224 | unsigned min; | ||
225 | unsigned max; | ||
226 | char *error; | ||
227 | }; | ||
228 | |||
229 | /* | ||
230 | * Validate the next argument, either returning it as *value or, if invalid, | ||
231 | * returning -EINVAL and setting *error. | ||
232 | */ | ||
233 | int dm_read_arg(struct dm_arg *arg, struct dm_arg_set *arg_set, | ||
234 | unsigned *value, char **error); | ||
235 | |||
236 | /* | ||
237 | * Process the next argument as the start of a group containing between | ||
238 | * arg->min and arg->max further arguments. Either return the size as | ||
239 | * *num_args or, if invalid, return -EINVAL and set *error. | ||
240 | */ | ||
241 | int dm_read_arg_group(struct dm_arg *arg, struct dm_arg_set *arg_set, | ||
242 | unsigned *num_args, char **error); | ||
243 | |||
244 | /* | ||
245 | * Return the current argument and shift to the next. | ||
246 | */ | ||
247 | const char *dm_shift_arg(struct dm_arg_set *as); | ||
248 | |||
249 | /* | ||
250 | * Move through num_args arguments. | ||
251 | */ | ||
252 | void dm_consume_args(struct dm_arg_set *as, unsigned num_args); | ||
253 | |||
211 | /*----------------------------------------------------------------- | 254 | /*----------------------------------------------------------------- |
212 | * Functions for creating and manipulating mapped devices. | 255 | * Functions for creating and manipulating mapped devices. |
213 | * Drop the reference with dm_put when you finish with the object. | 256 | * Drop the reference with dm_put when you finish with the object. |
diff --git a/include/linux/dm-ioctl.h b/include/linux/dm-ioctl.h index 3708455ee6c..0cb8eff76bd 100644 --- a/include/linux/dm-ioctl.h +++ b/include/linux/dm-ioctl.h | |||
@@ -267,9 +267,9 @@ enum { | |||
267 | #define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl) | 267 | #define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl) |
268 | 268 | ||
269 | #define DM_VERSION_MAJOR 4 | 269 | #define DM_VERSION_MAJOR 4 |
270 | #define DM_VERSION_MINOR 20 | 270 | #define DM_VERSION_MINOR 21 |
271 | #define DM_VERSION_PATCHLEVEL 0 | 271 | #define DM_VERSION_PATCHLEVEL 0 |
272 | #define DM_VERSION_EXTRA "-ioctl (2011-02-02)" | 272 | #define DM_VERSION_EXTRA "-ioctl (2011-07-06)" |
273 | 273 | ||
274 | /* Status bits */ | 274 | /* Status bits */ |
275 | #define DM_READONLY_FLAG (1 << 0) /* In/Out */ | 275 | #define DM_READONLY_FLAG (1 << 0) /* In/Out */ |
diff --git a/include/linux/dm-kcopyd.h b/include/linux/dm-kcopyd.h index 298d587e349..5e54458e920 100644 --- a/include/linux/dm-kcopyd.h +++ b/include/linux/dm-kcopyd.h | |||
@@ -42,5 +42,20 @@ int dm_kcopyd_copy(struct dm_kcopyd_client *kc, struct dm_io_region *from, | |||
42 | unsigned num_dests, struct dm_io_region *dests, | 42 | unsigned num_dests, struct dm_io_region *dests, |
43 | unsigned flags, dm_kcopyd_notify_fn fn, void *context); | 43 | unsigned flags, dm_kcopyd_notify_fn fn, void *context); |
44 | 44 | ||
45 | /* | ||
46 | * Prepare a callback and submit it via the kcopyd thread. | ||
47 | * | ||
48 | * dm_kcopyd_prepare_callback allocates a callback structure and returns it. | ||
49 | * It must not be called from interrupt context. | ||
50 | * The returned value should be passed into dm_kcopyd_do_callback. | ||
51 | * | ||
52 | * dm_kcopyd_do_callback submits the callback. | ||
53 | * It may be called from interrupt context. | ||
54 | * The callback is issued from the kcopyd thread. | ||
55 | */ | ||
56 | void *dm_kcopyd_prepare_callback(struct dm_kcopyd_client *kc, | ||
57 | dm_kcopyd_notify_fn fn, void *context); | ||
58 | void dm_kcopyd_do_callback(void *job, int read_err, unsigned long write_err); | ||
59 | |||
45 | #endif /* __KERNEL__ */ | 60 | #endif /* __KERNEL__ */ |
46 | #endif /* _LINUX_DM_KCOPYD_H */ | 61 | #endif /* _LINUX_DM_KCOPYD_H */ |
diff --git a/include/linux/efi.h b/include/linux/efi.h index ec257269392..2362a0bc7f0 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/rtc.h> | 19 | #include <linux/rtc.h> |
20 | #include <linux/ioport.h> | 20 | #include <linux/ioport.h> |
21 | #include <linux/pfn.h> | 21 | #include <linux/pfn.h> |
22 | #include <linux/pstore.h> | ||
22 | 23 | ||
23 | #include <asm/page.h> | 24 | #include <asm/page.h> |
24 | #include <asm/system.h> | 25 | #include <asm/system.h> |
@@ -232,6 +233,9 @@ typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **capsules, | |||
232 | #define UV_SYSTEM_TABLE_GUID \ | 233 | #define UV_SYSTEM_TABLE_GUID \ |
233 | EFI_GUID( 0x3b13a7d4, 0x633e, 0x11dd, 0x93, 0xec, 0xda, 0x25, 0x56, 0xd8, 0x95, 0x93 ) | 234 | EFI_GUID( 0x3b13a7d4, 0x633e, 0x11dd, 0x93, 0xec, 0xda, 0x25, 0x56, 0xd8, 0x95, 0x93 ) |
234 | 235 | ||
236 | #define LINUX_EFI_CRASH_GUID \ | ||
237 | EFI_GUID( 0xcfc8fc79, 0xbe2e, 0x4ddc, 0x97, 0xf0, 0x9f, 0x98, 0xbf, 0xe2, 0x98, 0xa0 ) | ||
238 | |||
235 | typedef struct { | 239 | typedef struct { |
236 | efi_guid_t guid; | 240 | efi_guid_t guid; |
237 | unsigned long table; | 241 | unsigned long table; |
@@ -458,6 +462,8 @@ struct efivars { | |||
458 | struct kset *kset; | 462 | struct kset *kset; |
459 | struct bin_attribute *new_var, *del_var; | 463 | struct bin_attribute *new_var, *del_var; |
460 | const struct efivar_operations *ops; | 464 | const struct efivar_operations *ops; |
465 | struct efivar_entry *walk_entry; | ||
466 | struct pstore_info efi_pstore_info; | ||
461 | }; | 467 | }; |
462 | 468 | ||
463 | int register_efivars(struct efivars *efivars, | 469 | int register_efivars(struct efivars *efivars, |
diff --git a/include/linux/fault-inject.h b/include/linux/fault-inject.h index 3ff060ac781..c6f996f2abb 100644 --- a/include/linux/fault-inject.h +++ b/include/linux/fault-inject.h | |||
@@ -25,10 +25,6 @@ struct fault_attr { | |||
25 | unsigned long reject_end; | 25 | unsigned long reject_end; |
26 | 26 | ||
27 | unsigned long count; | 27 | unsigned long count; |
28 | |||
29 | #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS | ||
30 | struct dentry *dir; | ||
31 | #endif | ||
32 | }; | 28 | }; |
33 | 29 | ||
34 | #define FAULT_ATTR_INITIALIZER { \ | 30 | #define FAULT_ATTR_INITIALIZER { \ |
@@ -45,19 +41,15 @@ bool should_fail(struct fault_attr *attr, ssize_t size); | |||
45 | 41 | ||
46 | #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS | 42 | #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS |
47 | 43 | ||
48 | int init_fault_attr_dentries(struct fault_attr *attr, const char *name); | 44 | struct dentry *fault_create_debugfs_attr(const char *name, |
49 | void cleanup_fault_attr_dentries(struct fault_attr *attr); | 45 | struct dentry *parent, struct fault_attr *attr); |
50 | 46 | ||
51 | #else /* CONFIG_FAULT_INJECTION_DEBUG_FS */ | 47 | #else /* CONFIG_FAULT_INJECTION_DEBUG_FS */ |
52 | 48 | ||
53 | static inline int init_fault_attr_dentries(struct fault_attr *attr, | 49 | static inline struct dentry *fault_create_debugfs_attr(const char *name, |
54 | const char *name) | 50 | struct dentry *parent, struct fault_attr *attr) |
55 | { | ||
56 | return -ENODEV; | ||
57 | } | ||
58 | |||
59 | static inline void cleanup_fault_attr_dentries(struct fault_attr *attr) | ||
60 | { | 51 | { |
52 | return ERR_PTR(-ENODEV); | ||
61 | } | 53 | } |
62 | 54 | ||
63 | #endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */ | 55 | #endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index f23bcb77260..178cdb4f1d4 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -738,22 +738,54 @@ static inline int mapping_writably_mapped(struct address_space *mapping) | |||
738 | struct posix_acl; | 738 | struct posix_acl; |
739 | #define ACL_NOT_CACHED ((void *)(-1)) | 739 | #define ACL_NOT_CACHED ((void *)(-1)) |
740 | 740 | ||
741 | #define IOP_FASTPERM 0x0001 | ||
742 | #define IOP_LOOKUP 0x0002 | ||
743 | #define IOP_NOFOLLOW 0x0004 | ||
744 | |||
745 | /* | ||
746 | * Keep mostly read-only and often accessed (especially for | ||
747 | * the RCU path lookup and 'stat' data) fields at the beginning | ||
748 | * of the 'struct inode' | ||
749 | */ | ||
741 | struct inode { | 750 | struct inode { |
742 | /* RCU path lookup touches following: */ | ||
743 | umode_t i_mode; | 751 | umode_t i_mode; |
752 | unsigned short i_opflags; | ||
744 | uid_t i_uid; | 753 | uid_t i_uid; |
745 | gid_t i_gid; | 754 | gid_t i_gid; |
755 | unsigned int i_flags; | ||
756 | |||
757 | #ifdef CONFIG_FS_POSIX_ACL | ||
758 | struct posix_acl *i_acl; | ||
759 | struct posix_acl *i_default_acl; | ||
760 | #endif | ||
761 | |||
746 | const struct inode_operations *i_op; | 762 | const struct inode_operations *i_op; |
747 | struct super_block *i_sb; | 763 | struct super_block *i_sb; |
764 | struct address_space *i_mapping; | ||
748 | 765 | ||
749 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ | ||
750 | unsigned int i_flags; | ||
751 | unsigned long i_state; | ||
752 | #ifdef CONFIG_SECURITY | 766 | #ifdef CONFIG_SECURITY |
753 | void *i_security; | 767 | void *i_security; |
754 | #endif | 768 | #endif |
755 | struct mutex i_mutex; | ||
756 | 769 | ||
770 | /* Stat data, not accessed from path walking */ | ||
771 | unsigned long i_ino; | ||
772 | unsigned int i_nlink; | ||
773 | dev_t i_rdev; | ||
774 | loff_t i_size; | ||
775 | struct timespec i_atime; | ||
776 | struct timespec i_mtime; | ||
777 | struct timespec i_ctime; | ||
778 | unsigned int i_blkbits; | ||
779 | blkcnt_t i_blocks; | ||
780 | |||
781 | #ifdef __NEED_I_SIZE_ORDERED | ||
782 | seqcount_t i_size_seqcount; | ||
783 | #endif | ||
784 | |||
785 | /* Misc */ | ||
786 | unsigned long i_state; | ||
787 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ | ||
788 | struct mutex i_mutex; | ||
757 | 789 | ||
758 | unsigned long dirtied_when; /* jiffies of first dirtying */ | 790 | unsigned long dirtied_when; /* jiffies of first dirtying */ |
759 | 791 | ||
@@ -765,25 +797,12 @@ struct inode { | |||
765 | struct list_head i_dentry; | 797 | struct list_head i_dentry; |
766 | struct rcu_head i_rcu; | 798 | struct rcu_head i_rcu; |
767 | }; | 799 | }; |
768 | unsigned long i_ino; | ||
769 | atomic_t i_count; | 800 | atomic_t i_count; |
770 | unsigned int i_nlink; | ||
771 | dev_t i_rdev; | ||
772 | unsigned int i_blkbits; | ||
773 | u64 i_version; | 801 | u64 i_version; |
774 | loff_t i_size; | ||
775 | #ifdef __NEED_I_SIZE_ORDERED | ||
776 | seqcount_t i_size_seqcount; | ||
777 | #endif | ||
778 | struct timespec i_atime; | ||
779 | struct timespec i_mtime; | ||
780 | struct timespec i_ctime; | ||
781 | blkcnt_t i_blocks; | ||
782 | unsigned short i_bytes; | 802 | unsigned short i_bytes; |
783 | atomic_t i_dio_count; | 803 | atomic_t i_dio_count; |
784 | const struct file_operations *i_fop; /* former ->i_op->default_file_ops */ | 804 | const struct file_operations *i_fop; /* former ->i_op->default_file_ops */ |
785 | struct file_lock *i_flock; | 805 | struct file_lock *i_flock; |
786 | struct address_space *i_mapping; | ||
787 | struct address_space i_data; | 806 | struct address_space i_data; |
788 | #ifdef CONFIG_QUOTA | 807 | #ifdef CONFIG_QUOTA |
789 | struct dquot *i_dquot[MAXQUOTAS]; | 808 | struct dquot *i_dquot[MAXQUOTAS]; |
@@ -806,10 +825,6 @@ struct inode { | |||
806 | atomic_t i_readcount; /* struct files open RO */ | 825 | atomic_t i_readcount; /* struct files open RO */ |
807 | #endif | 826 | #endif |
808 | atomic_t i_writecount; | 827 | atomic_t i_writecount; |
809 | #ifdef CONFIG_FS_POSIX_ACL | ||
810 | struct posix_acl *i_acl; | ||
811 | struct posix_acl *i_default_acl; | ||
812 | #endif | ||
813 | void *i_private; /* fs or device private pointer */ | 828 | void *i_private; /* fs or device private pointer */ |
814 | }; | 829 | }; |
815 | 830 | ||
@@ -2317,11 +2332,18 @@ extern int should_remove_suid(struct dentry *); | |||
2317 | extern int file_remove_suid(struct file *); | 2332 | extern int file_remove_suid(struct file *); |
2318 | 2333 | ||
2319 | extern void __insert_inode_hash(struct inode *, unsigned long hashval); | 2334 | extern void __insert_inode_hash(struct inode *, unsigned long hashval); |
2320 | extern void remove_inode_hash(struct inode *); | ||
2321 | static inline void insert_inode_hash(struct inode *inode) | 2335 | static inline void insert_inode_hash(struct inode *inode) |
2322 | { | 2336 | { |
2323 | __insert_inode_hash(inode, inode->i_ino); | 2337 | __insert_inode_hash(inode, inode->i_ino); |
2324 | } | 2338 | } |
2339 | |||
2340 | extern void __remove_inode_hash(struct inode *); | ||
2341 | static inline void remove_inode_hash(struct inode *inode) | ||
2342 | { | ||
2343 | if (!inode_unhashed(inode)) | ||
2344 | __remove_inode_hash(inode); | ||
2345 | } | ||
2346 | |||
2325 | extern void inode_sb_list_add(struct inode *inode); | 2347 | extern void inode_sb_list_add(struct inode *inode); |
2326 | 2348 | ||
2327 | #ifdef CONFIG_BLOCK | 2349 | #ifdef CONFIG_BLOCK |
diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h index 5bbebda78b0..5e98eeb2af3 100644 --- a/include/linux/genalloc.h +++ b/include/linux/genalloc.h | |||
@@ -1,8 +1,26 @@ | |||
1 | /* | 1 | /* |
2 | * Basic general purpose allocator for managing special purpose memory | 2 | * Basic general purpose allocator for managing special purpose |
3 | * not managed by the regular kmalloc/kfree interface. | 3 | * memory, for example, memory that is not managed by the regular |
4 | * Uses for this includes on-device special memory, uncached memory | 4 | * kmalloc/kfree interface. Uses for this includes on-device special |
5 | * etc. | 5 | * memory, uncached memory etc. |
6 | * | ||
7 | * It is safe to use the allocator in NMI handlers and other special | ||
8 | * unblockable contexts that could otherwise deadlock on locks. This | ||
9 | * is implemented by using atomic operations and retries on any | ||
10 | * conflicts. The disadvantage is that there may be livelocks in | ||
11 | * extreme cases. For better scalability, one allocator can be used | ||
12 | * for each CPU. | ||
13 | * | ||
14 | * The lockless operation only works if there is enough memory | ||
15 | * available. If new memory is added to the pool a lock has to be | ||
16 | * still taken. So any user relying on locklessness has to ensure | ||
17 | * that sufficient memory is preallocated. | ||
18 | * | ||
19 | * The basic atomic operation of this allocator is cmpxchg on long. | ||
20 | * On architectures that don't have NMI-safe cmpxchg implementation, | ||
21 | * the allocator can NOT be used in NMI handler. So code uses the | ||
22 | * allocator in NMI handler should depend on | ||
23 | * CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG. | ||
6 | * | 24 | * |
7 | * This source code is licensed under the GNU General Public License, | 25 | * This source code is licensed under the GNU General Public License, |
8 | * Version 2. See the file COPYING for more details. | 26 | * Version 2. See the file COPYING for more details. |
@@ -15,7 +33,7 @@ | |||
15 | * General purpose special memory pool descriptor. | 33 | * General purpose special memory pool descriptor. |
16 | */ | 34 | */ |
17 | struct gen_pool { | 35 | struct gen_pool { |
18 | rwlock_t lock; | 36 | spinlock_t lock; |
19 | struct list_head chunks; /* list of chunks in this pool */ | 37 | struct list_head chunks; /* list of chunks in this pool */ |
20 | int min_alloc_order; /* minimum allocation order */ | 38 | int min_alloc_order; /* minimum allocation order */ |
21 | }; | 39 | }; |
@@ -24,8 +42,8 @@ struct gen_pool { | |||
24 | * General purpose special memory pool chunk descriptor. | 42 | * General purpose special memory pool chunk descriptor. |
25 | */ | 43 | */ |
26 | struct gen_pool_chunk { | 44 | struct gen_pool_chunk { |
27 | spinlock_t lock; | ||
28 | struct list_head next_chunk; /* next chunk in pool */ | 45 | struct list_head next_chunk; /* next chunk in pool */ |
46 | atomic_t avail; | ||
29 | phys_addr_t phys_addr; /* physical starting address of memory chunk */ | 47 | phys_addr_t phys_addr; /* physical starting address of memory chunk */ |
30 | unsigned long start_addr; /* starting address of memory chunk */ | 48 | unsigned long start_addr; /* starting address of memory chunk */ |
31 | unsigned long end_addr; /* ending address of memory chunk */ | 49 | unsigned long end_addr; /* ending address of memory chunk */ |
@@ -56,4 +74,8 @@ static inline int gen_pool_add(struct gen_pool *pool, unsigned long addr, | |||
56 | extern void gen_pool_destroy(struct gen_pool *); | 74 | extern void gen_pool_destroy(struct gen_pool *); |
57 | extern unsigned long gen_pool_alloc(struct gen_pool *, size_t); | 75 | extern unsigned long gen_pool_alloc(struct gen_pool *, size_t); |
58 | extern void gen_pool_free(struct gen_pool *, unsigned long, size_t); | 76 | extern void gen_pool_free(struct gen_pool *, unsigned long, size_t); |
77 | extern void gen_pool_for_each_chunk(struct gen_pool *, | ||
78 | void (*)(struct gen_pool *, struct gen_pool_chunk *, void *), void *); | ||
79 | extern size_t gen_pool_avail(struct gen_pool *); | ||
80 | extern size_t gen_pool_size(struct gen_pool *); | ||
59 | #endif /* __GENALLOC_H__ */ | 81 | #endif /* __GENALLOC_H__ */ |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index cb4089254f0..3a76faf6a3e 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
@@ -92,7 +92,7 @@ struct vm_area_struct; | |||
92 | */ | 92 | */ |
93 | #define __GFP_NOTRACK_FALSE_POSITIVE (__GFP_NOTRACK) | 93 | #define __GFP_NOTRACK_FALSE_POSITIVE (__GFP_NOTRACK) |
94 | 94 | ||
95 | #define __GFP_BITS_SHIFT 23 /* Room for 23 __GFP_FOO bits */ | 95 | #define __GFP_BITS_SHIFT 24 /* Room for N __GFP_FOO bits */ |
96 | #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) | 96 | #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) |
97 | 97 | ||
98 | /* This equals 0, but use constants in case they ever change */ | 98 | /* This equals 0, but use constants in case they ever change */ |
diff --git a/include/linux/idr.h b/include/linux/idr.h index 13a801f3d02..255491cf522 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h | |||
@@ -146,6 +146,10 @@ void ida_remove(struct ida *ida, int id); | |||
146 | void ida_destroy(struct ida *ida); | 146 | void ida_destroy(struct ida *ida); |
147 | void ida_init(struct ida *ida); | 147 | void ida_init(struct ida *ida); |
148 | 148 | ||
149 | int ida_simple_get(struct ida *ida, unsigned int start, unsigned int end, | ||
150 | gfp_t gfp_mask); | ||
151 | void ida_simple_remove(struct ida *ida, unsigned int id); | ||
152 | |||
149 | void __init idr_init_cache(void); | 153 | void __init idr_init_cache(void); |
150 | 154 | ||
151 | #endif /* __IDR_H__ */ | 155 | #endif /* __IDR_H__ */ |
diff --git a/include/linux/input.h b/include/linux/input.h index 068784e1797..a637e781433 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
@@ -438,6 +438,8 @@ struct input_keymap_entry { | |||
438 | #define KEY_WIMAX 246 | 438 | #define KEY_WIMAX 246 |
439 | #define KEY_RFKILL 247 /* Key that controls all radios */ | 439 | #define KEY_RFKILL 247 /* Key that controls all radios */ |
440 | 440 | ||
441 | #define KEY_MICMUTE 248 /* Mute / unmute the microphone */ | ||
442 | |||
441 | /* Code 255 is reserved for special needs of AT keyboard driver */ | 443 | /* Code 255 is reserved for special needs of AT keyboard driver */ |
442 | 444 | ||
443 | #define BTN_MISC 0x100 | 445 | #define BTN_MISC 0x100 |
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index d087c2e7b2a..38f307b8c33 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h | |||
@@ -1329,12 +1329,6 @@ extern int jbd_blocks_per_page(struct inode *inode); | |||
1329 | #define BUFFER_TRACE2(bh, bh2, info) do {} while (0) | 1329 | #define BUFFER_TRACE2(bh, bh2, info) do {} while (0) |
1330 | #define JBUFFER_TRACE(jh, info) do {} while (0) | 1330 | #define JBUFFER_TRACE(jh, info) do {} while (0) |
1331 | 1331 | ||
1332 | /* | ||
1333 | * jbd2_dev_to_name is a utility function used by the jbd2 and ext4 | ||
1334 | * tracing infrastructure to map a dev_t to a device name. | ||
1335 | */ | ||
1336 | extern const char *jbd2_dev_to_name(dev_t device); | ||
1337 | |||
1338 | #endif /* __KERNEL__ */ | 1332 | #endif /* __KERNEL__ */ |
1339 | 1333 | ||
1340 | #endif /* _LINUX_JBD2_H */ | 1334 | #endif /* _LINUX_JBD2_H */ |
diff --git a/include/linux/llist.h b/include/linux/llist.h new file mode 100644 index 00000000000..aa0c8b5b3cd --- /dev/null +++ b/include/linux/llist.h | |||
@@ -0,0 +1,126 @@ | |||
1 | #ifndef LLIST_H | ||
2 | #define LLIST_H | ||
3 | /* | ||
4 | * Lock-less NULL terminated single linked list | ||
5 | * | ||
6 | * If there are multiple producers and multiple consumers, llist_add | ||
7 | * can be used in producers and llist_del_all can be used in | ||
8 | * consumers. They can work simultaneously without lock. But | ||
9 | * llist_del_first can not be used here. Because llist_del_first | ||
10 | * depends on list->first->next does not changed if list->first is not | ||
11 | * changed during its operation, but llist_del_first, llist_add, | ||
12 | * llist_add (or llist_del_all, llist_add, llist_add) sequence in | ||
13 | * another consumer may violate that. | ||
14 | * | ||
15 | * If there are multiple producers and one consumer, llist_add can be | ||
16 | * used in producers and llist_del_all or llist_del_first can be used | ||
17 | * in the consumer. | ||
18 | * | ||
19 | * This can be summarized as follow: | ||
20 | * | ||
21 | * | add | del_first | del_all | ||
22 | * add | - | - | - | ||
23 | * del_first | | L | L | ||
24 | * del_all | | | - | ||
25 | * | ||
26 | * Where "-" stands for no lock is needed, while "L" stands for lock | ||
27 | * is needed. | ||
28 | * | ||
29 | * The list entries deleted via llist_del_all can be traversed with | ||
30 | * traversing function such as llist_for_each etc. But the list | ||
31 | * entries can not be traversed safely before deleted from the list. | ||
32 | * The order of deleted entries is from the newest to the oldest added | ||
33 | * one. If you want to traverse from the oldest to the newest, you | ||
34 | * must reverse the order by yourself before traversing. | ||
35 | * | ||
36 | * The basic atomic operation of this list is cmpxchg on long. On | ||
37 | * architectures that don't have NMI-safe cmpxchg implementation, the | ||
38 | * list can NOT be used in NMI handler. So code uses the list in NMI | ||
39 | * handler should depend on CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG. | ||
40 | */ | ||
41 | |||
42 | struct llist_head { | ||
43 | struct llist_node *first; | ||
44 | }; | ||
45 | |||
46 | struct llist_node { | ||
47 | struct llist_node *next; | ||
48 | }; | ||
49 | |||
50 | #define LLIST_HEAD_INIT(name) { NULL } | ||
51 | #define LLIST_HEAD(name) struct llist_head name = LLIST_HEAD_INIT(name) | ||
52 | |||
53 | /** | ||
54 | * init_llist_head - initialize lock-less list head | ||
55 | * @head: the head for your lock-less list | ||
56 | */ | ||
57 | static inline void init_llist_head(struct llist_head *list) | ||
58 | { | ||
59 | list->first = NULL; | ||
60 | } | ||
61 | |||
62 | /** | ||
63 | * llist_entry - get the struct of this entry | ||
64 | * @ptr: the &struct llist_node pointer. | ||
65 | * @type: the type of the struct this is embedded in. | ||
66 | * @member: the name of the llist_node within the struct. | ||
67 | */ | ||
68 | #define llist_entry(ptr, type, member) \ | ||
69 | container_of(ptr, type, member) | ||
70 | |||
71 | /** | ||
72 | * llist_for_each - iterate over some deleted entries of a lock-less list | ||
73 | * @pos: the &struct llist_node to use as a loop cursor | ||
74 | * @node: the first entry of deleted list entries | ||
75 | * | ||
76 | * In general, some entries of the lock-less list can be traversed | ||
77 | * safely only after being deleted from list, so start with an entry | ||
78 | * instead of list head. | ||
79 | * | ||
80 | * If being used on entries deleted from lock-less list directly, the | ||
81 | * traverse order is from the newest to the oldest added entry. If | ||
82 | * you want to traverse from the oldest to the newest, you must | ||
83 | * reverse the order by yourself before traversing. | ||
84 | */ | ||
85 | #define llist_for_each(pos, node) \ | ||
86 | for ((pos) = (node); pos; (pos) = (pos)->next) | ||
87 | |||
88 | /** | ||
89 | * llist_for_each_entry - iterate over some deleted entries of lock-less list of given type | ||
90 | * @pos: the type * to use as a loop cursor. | ||
91 | * @node: the fist entry of deleted list entries. | ||
92 | * @member: the name of the llist_node with the struct. | ||
93 | * | ||
94 | * In general, some entries of the lock-less list can be traversed | ||
95 | * safely only after being removed from list, so start with an entry | ||
96 | * instead of list head. | ||
97 | * | ||
98 | * If being used on entries deleted from lock-less list directly, the | ||
99 | * traverse order is from the newest to the oldest added entry. If | ||
100 | * you want to traverse from the oldest to the newest, you must | ||
101 | * reverse the order by yourself before traversing. | ||
102 | */ | ||
103 | #define llist_for_each_entry(pos, node, member) \ | ||
104 | for ((pos) = llist_entry((node), typeof(*(pos)), member); \ | ||
105 | &(pos)->member != NULL; \ | ||
106 | (pos) = llist_entry((pos)->member.next, typeof(*(pos)), member)) | ||
107 | |||
108 | /** | ||
109 | * llist_empty - tests whether a lock-less list is empty | ||
110 | * @head: the list to test | ||
111 | * | ||
112 | * Not guaranteed to be accurate or up to date. Just a quick way to | ||
113 | * test whether the list is empty without deleting something from the | ||
114 | * list. | ||
115 | */ | ||
116 | static inline int llist_empty(const struct llist_head *head) | ||
117 | { | ||
118 | return ACCESS_ONCE(head->first) == NULL; | ||
119 | } | ||
120 | |||
121 | void llist_add(struct llist_node *new, struct llist_head *head); | ||
122 | void llist_add_batch(struct llist_node *new_first, struct llist_node *new_last, | ||
123 | struct llist_head *head); | ||
124 | struct llist_node *llist_del_first(struct llist_head *head); | ||
125 | struct llist_node *llist_del_all(struct llist_head *head); | ||
126 | #endif /* LLIST_H */ | ||
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index b9660078691..3b535db00a9 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
@@ -86,8 +86,6 @@ extern void mem_cgroup_uncharge_end(void); | |||
86 | 86 | ||
87 | extern void mem_cgroup_uncharge_page(struct page *page); | 87 | extern void mem_cgroup_uncharge_page(struct page *page); |
88 | extern void mem_cgroup_uncharge_cache_page(struct page *page); | 88 | extern void mem_cgroup_uncharge_cache_page(struct page *page); |
89 | extern int mem_cgroup_shmem_charge_fallback(struct page *page, | ||
90 | struct mm_struct *mm, gfp_t gfp_mask); | ||
91 | 89 | ||
92 | extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask); | 90 | extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask); |
93 | int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem); | 91 | int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem); |
@@ -225,12 +223,6 @@ static inline void mem_cgroup_uncharge_cache_page(struct page *page) | |||
225 | { | 223 | { |
226 | } | 224 | } |
227 | 225 | ||
228 | static inline int mem_cgroup_shmem_charge_fallback(struct page *page, | ||
229 | struct mm_struct *mm, gfp_t gfp_mask) | ||
230 | { | ||
231 | return 0; | ||
232 | } | ||
233 | |||
234 | static inline void mem_cgroup_add_lru_list(struct page *page, int lru) | 226 | static inline void mem_cgroup_add_lru_list(struct page *page, int lru) |
235 | { | 227 | { |
236 | } | 228 | } |
diff --git a/include/linux/mfd/aat2870.h b/include/linux/mfd/aat2870.h index 89212df0562..f7316c29bde 100644 --- a/include/linux/mfd/aat2870.h +++ b/include/linux/mfd/aat2870.h | |||
@@ -89,7 +89,7 @@ enum aat2870_id { | |||
89 | 89 | ||
90 | /* Backlight current magnitude (mA) */ | 90 | /* Backlight current magnitude (mA) */ |
91 | enum aat2870_current { | 91 | enum aat2870_current { |
92 | AAT2870_CURRENT_0_45, | 92 | AAT2870_CURRENT_0_45 = 1, |
93 | AAT2870_CURRENT_0_90, | 93 | AAT2870_CURRENT_0_90, |
94 | AAT2870_CURRENT_1_80, | 94 | AAT2870_CURRENT_1_80, |
95 | AAT2870_CURRENT_2_70, | 95 | AAT2870_CURRENT_2_70, |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 3172a1c0f08..f2690cf4982 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -1600,6 +1600,7 @@ enum mf_flags { | |||
1600 | }; | 1600 | }; |
1601 | extern void memory_failure(unsigned long pfn, int trapno); | 1601 | extern void memory_failure(unsigned long pfn, int trapno); |
1602 | extern int __memory_failure(unsigned long pfn, int trapno, int flags); | 1602 | extern int __memory_failure(unsigned long pfn, int trapno, int flags); |
1603 | extern void memory_failure_queue(unsigned long pfn, int trapno, int flags); | ||
1603 | extern int unpoison_memory(unsigned long pfn); | 1604 | extern int unpoison_memory(unsigned long pfn); |
1604 | extern int sysctl_memory_failure_early_kill; | 1605 | extern int sysctl_memory_failure_early_kill; |
1605 | extern int sysctl_memory_failure_recovery; | 1606 | extern int sysctl_memory_failure_recovery; |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index b96fb99072f..eaac770f886 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -569,12 +569,12 @@ extern struct posix_acl *nfs3_proc_getacl(struct inode *inode, int type); | |||
569 | extern int nfs3_proc_setacl(struct inode *inode, int type, | 569 | extern int nfs3_proc_setacl(struct inode *inode, int type, |
570 | struct posix_acl *acl); | 570 | struct posix_acl *acl); |
571 | extern int nfs3_proc_set_default_acl(struct inode *dir, struct inode *inode, | 571 | extern int nfs3_proc_set_default_acl(struct inode *dir, struct inode *inode, |
572 | mode_t mode); | 572 | umode_t mode); |
573 | extern void nfs3_forget_cached_acls(struct inode *inode); | 573 | extern void nfs3_forget_cached_acls(struct inode *inode); |
574 | #else | 574 | #else |
575 | static inline int nfs3_proc_set_default_acl(struct inode *dir, | 575 | static inline int nfs3_proc_set_default_acl(struct inode *dir, |
576 | struct inode *inode, | 576 | struct inode *inode, |
577 | mode_t mode) | 577 | umode_t mode) |
578 | { | 578 | { |
579 | return 0; | 579 | return 0; |
580 | } | 580 | } |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 569ea5b76fd..abd615d74a2 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -773,6 +773,11 @@ struct nfs3_getaclres { | |||
773 | struct posix_acl * acl_default; | 773 | struct posix_acl * acl_default; |
774 | }; | 774 | }; |
775 | 775 | ||
776 | struct nfs4_string { | ||
777 | unsigned int len; | ||
778 | char *data; | ||
779 | }; | ||
780 | |||
776 | #ifdef CONFIG_NFS_V4 | 781 | #ifdef CONFIG_NFS_V4 |
777 | 782 | ||
778 | typedef u64 clientid4; | 783 | typedef u64 clientid4; |
@@ -963,11 +968,6 @@ struct nfs4_server_caps_res { | |||
963 | struct nfs4_sequence_res seq_res; | 968 | struct nfs4_sequence_res seq_res; |
964 | }; | 969 | }; |
965 | 970 | ||
966 | struct nfs4_string { | ||
967 | unsigned int len; | ||
968 | char *data; | ||
969 | }; | ||
970 | |||
971 | #define NFS4_PATHNAME_MAXCOMPONENTS 512 | 971 | #define NFS4_PATHNAME_MAXCOMPONENTS 512 |
972 | struct nfs4_pathname { | 972 | struct nfs4_pathname { |
973 | unsigned int ncomponents; | 973 | unsigned int ncomponents; |
diff --git a/include/linux/of.h b/include/linux/of.h index bd716f8908d..0085bb01c04 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
@@ -196,12 +196,13 @@ extern struct property *of_find_property(const struct device_node *np, | |||
196 | const char *name, | 196 | const char *name, |
197 | int *lenp); | 197 | int *lenp); |
198 | extern int of_property_read_u32_array(const struct device_node *np, | 198 | extern int of_property_read_u32_array(const struct device_node *np, |
199 | char *propname, | 199 | const char *propname, |
200 | u32 *out_values, | 200 | u32 *out_values, |
201 | size_t sz); | 201 | size_t sz); |
202 | 202 | ||
203 | extern int of_property_read_string(struct device_node *np, char *propname, | 203 | extern int of_property_read_string(struct device_node *np, |
204 | const char **out_string); | 204 | const char *propname, |
205 | const char **out_string); | ||
205 | extern int of_device_is_compatible(const struct device_node *device, | 206 | extern int of_device_is_compatible(const struct device_node *device, |
206 | const char *); | 207 | const char *); |
207 | extern int of_device_is_available(const struct device_node *device); | 208 | extern int of_device_is_available(const struct device_node *device); |
@@ -242,13 +243,15 @@ static inline bool of_have_populated_dt(void) | |||
242 | } | 243 | } |
243 | 244 | ||
244 | static inline int of_property_read_u32_array(const struct device_node *np, | 245 | static inline int of_property_read_u32_array(const struct device_node *np, |
245 | char *propname, u32 *out_values, size_t sz) | 246 | const char *propname, |
247 | u32 *out_values, size_t sz) | ||
246 | { | 248 | { |
247 | return -ENOSYS; | 249 | return -ENOSYS; |
248 | } | 250 | } |
249 | 251 | ||
250 | static inline int of_property_read_string(struct device_node *np, | 252 | static inline int of_property_read_string(struct device_node *np, |
251 | char *propname, const char **out_string) | 253 | const char *propname, |
254 | const char **out_string) | ||
252 | { | 255 | { |
253 | return -ENOSYS; | 256 | return -ENOSYS; |
254 | } | 257 | } |
@@ -256,7 +259,7 @@ static inline int of_property_read_string(struct device_node *np, | |||
256 | #endif /* CONFIG_OF */ | 259 | #endif /* CONFIG_OF */ |
257 | 260 | ||
258 | static inline int of_property_read_u32(const struct device_node *np, | 261 | static inline int of_property_read_u32(const struct device_node *np, |
259 | char *propname, | 262 | const char *propname, |
260 | u32 *out_value) | 263 | u32 *out_value) |
261 | { | 264 | { |
262 | return of_property_read_u32_array(np, propname, out_value, 1); | 265 | return of_property_read_u32_array(np, propname, out_value, 1); |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index b00c4ec5056..ae96bbe5451 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -2709,6 +2709,16 @@ | |||
2709 | #define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60 | 2709 | #define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60 |
2710 | #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MIN 0x3b00 | 2710 | #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MIN 0x3b00 |
2711 | #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MAX 0x3b1f | 2711 | #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MAX 0x3b1f |
2712 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB0 0x3c20 | ||
2713 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB1 0x3c21 | ||
2714 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB2 0x3c22 | ||
2715 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB3 0x3c23 | ||
2716 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB4 0x3c24 | ||
2717 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB5 0x3c25 | ||
2718 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB6 0x3c26 | ||
2719 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB7 0x3c27 | ||
2720 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB8 0x3c2e | ||
2721 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB9 0x3c2f | ||
2712 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f | 2722 | #define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f |
2713 | #define PCI_DEVICE_ID_INTEL_5100_16 0x65f0 | 2723 | #define PCI_DEVICE_ID_INTEL_5100_16 0x65f0 |
2714 | #define PCI_DEVICE_ID_INTEL_5100_21 0x65f5 | 2724 | #define PCI_DEVICE_ID_INTEL_5100_21 0x65f5 |
diff --git a/include/linux/posix_acl.h b/include/linux/posix_acl.h index 9a53b99818e..b7681102a4b 100644 --- a/include/linux/posix_acl.h +++ b/include/linux/posix_acl.h | |||
@@ -9,6 +9,7 @@ | |||
9 | #define __LINUX_POSIX_ACL_H | 9 | #define __LINUX_POSIX_ACL_H |
10 | 10 | ||
11 | #include <linux/slab.h> | 11 | #include <linux/slab.h> |
12 | #include <linux/rcupdate.h> | ||
12 | 13 | ||
13 | #define ACL_UNDEFINED_ID (-1) | 14 | #define ACL_UNDEFINED_ID (-1) |
14 | 15 | ||
@@ -38,7 +39,10 @@ struct posix_acl_entry { | |||
38 | }; | 39 | }; |
39 | 40 | ||
40 | struct posix_acl { | 41 | struct posix_acl { |
41 | atomic_t a_refcount; | 42 | union { |
43 | atomic_t a_refcount; | ||
44 | struct rcu_head a_rcu; | ||
45 | }; | ||
42 | unsigned int a_count; | 46 | unsigned int a_count; |
43 | struct posix_acl_entry a_entries[0]; | 47 | struct posix_acl_entry a_entries[0]; |
44 | }; | 48 | }; |
@@ -65,7 +69,7 @@ static inline void | |||
65 | posix_acl_release(struct posix_acl *acl) | 69 | posix_acl_release(struct posix_acl *acl) |
66 | { | 70 | { |
67 | if (acl && atomic_dec_and_test(&acl->a_refcount)) | 71 | if (acl && atomic_dec_and_test(&acl->a_refcount)) |
68 | kfree(acl); | 72 | kfree_rcu(acl, a_rcu); |
69 | } | 73 | } |
70 | 74 | ||
71 | 75 | ||
@@ -75,29 +79,31 @@ extern void posix_acl_init(struct posix_acl *, int); | |||
75 | extern struct posix_acl *posix_acl_alloc(int, gfp_t); | 79 | extern struct posix_acl *posix_acl_alloc(int, gfp_t); |
76 | extern int posix_acl_valid(const struct posix_acl *); | 80 | extern int posix_acl_valid(const struct posix_acl *); |
77 | extern int posix_acl_permission(struct inode *, const struct posix_acl *, int); | 81 | extern int posix_acl_permission(struct inode *, const struct posix_acl *, int); |
78 | extern struct posix_acl *posix_acl_from_mode(mode_t, gfp_t); | 82 | extern struct posix_acl *posix_acl_from_mode(umode_t, gfp_t); |
79 | extern int posix_acl_equiv_mode(const struct posix_acl *, mode_t *); | 83 | extern int posix_acl_equiv_mode(const struct posix_acl *, umode_t *); |
80 | extern int posix_acl_create(struct posix_acl **, gfp_t, mode_t *); | 84 | extern int posix_acl_create(struct posix_acl **, gfp_t, umode_t *); |
81 | extern int posix_acl_chmod(struct posix_acl **, gfp_t, mode_t); | 85 | extern int posix_acl_chmod(struct posix_acl **, gfp_t, umode_t); |
82 | 86 | ||
83 | extern struct posix_acl *get_posix_acl(struct inode *, int); | 87 | extern struct posix_acl *get_posix_acl(struct inode *, int); |
84 | extern int set_posix_acl(struct inode *, int, struct posix_acl *); | 88 | extern int set_posix_acl(struct inode *, int, struct posix_acl *); |
85 | 89 | ||
86 | #ifdef CONFIG_FS_POSIX_ACL | 90 | #ifdef CONFIG_FS_POSIX_ACL |
87 | static inline struct posix_acl *get_cached_acl(struct inode *inode, int type) | 91 | static inline struct posix_acl **acl_by_type(struct inode *inode, int type) |
88 | { | 92 | { |
89 | struct posix_acl **p, *acl; | ||
90 | switch (type) { | 93 | switch (type) { |
91 | case ACL_TYPE_ACCESS: | 94 | case ACL_TYPE_ACCESS: |
92 | p = &inode->i_acl; | 95 | return &inode->i_acl; |
93 | break; | ||
94 | case ACL_TYPE_DEFAULT: | 96 | case ACL_TYPE_DEFAULT: |
95 | p = &inode->i_default_acl; | 97 | return &inode->i_default_acl; |
96 | break; | ||
97 | default: | 98 | default: |
98 | return ERR_PTR(-EINVAL); | 99 | BUG(); |
99 | } | 100 | } |
100 | acl = ACCESS_ONCE(*p); | 101 | } |
102 | |||
103 | static inline struct posix_acl *get_cached_acl(struct inode *inode, int type) | ||
104 | { | ||
105 | struct posix_acl **p = acl_by_type(inode, type); | ||
106 | struct posix_acl *acl = ACCESS_ONCE(*p); | ||
101 | if (acl) { | 107 | if (acl) { |
102 | spin_lock(&inode->i_lock); | 108 | spin_lock(&inode->i_lock); |
103 | acl = *p; | 109 | acl = *p; |
@@ -108,41 +114,20 @@ static inline struct posix_acl *get_cached_acl(struct inode *inode, int type) | |||
108 | return acl; | 114 | return acl; |
109 | } | 115 | } |
110 | 116 | ||
111 | static inline int negative_cached_acl(struct inode *inode, int type) | 117 | static inline struct posix_acl *get_cached_acl_rcu(struct inode *inode, int type) |
112 | { | 118 | { |
113 | struct posix_acl **p, *acl; | 119 | return rcu_dereference(*acl_by_type(inode, type)); |
114 | switch (type) { | ||
115 | case ACL_TYPE_ACCESS: | ||
116 | p = &inode->i_acl; | ||
117 | break; | ||
118 | case ACL_TYPE_DEFAULT: | ||
119 | p = &inode->i_default_acl; | ||
120 | break; | ||
121 | default: | ||
122 | BUG(); | ||
123 | } | ||
124 | acl = ACCESS_ONCE(*p); | ||
125 | if (acl) | ||
126 | return 0; | ||
127 | return 1; | ||
128 | } | 120 | } |
129 | 121 | ||
130 | static inline void set_cached_acl(struct inode *inode, | 122 | static inline void set_cached_acl(struct inode *inode, |
131 | int type, | 123 | int type, |
132 | struct posix_acl *acl) | 124 | struct posix_acl *acl) |
133 | { | 125 | { |
134 | struct posix_acl *old = NULL; | 126 | struct posix_acl **p = acl_by_type(inode, type); |
127 | struct posix_acl *old; | ||
135 | spin_lock(&inode->i_lock); | 128 | spin_lock(&inode->i_lock); |
136 | switch (type) { | 129 | old = *p; |
137 | case ACL_TYPE_ACCESS: | 130 | rcu_assign_pointer(*p, posix_acl_dup(acl)); |
138 | old = inode->i_acl; | ||
139 | inode->i_acl = posix_acl_dup(acl); | ||
140 | break; | ||
141 | case ACL_TYPE_DEFAULT: | ||
142 | old = inode->i_default_acl; | ||
143 | inode->i_default_acl = posix_acl_dup(acl); | ||
144 | break; | ||
145 | } | ||
146 | spin_unlock(&inode->i_lock); | 131 | spin_unlock(&inode->i_lock); |
147 | if (old != ACL_NOT_CACHED) | 132 | if (old != ACL_NOT_CACHED) |
148 | posix_acl_release(old); | 133 | posix_acl_release(old); |
@@ -150,18 +135,11 @@ static inline void set_cached_acl(struct inode *inode, | |||
150 | 135 | ||
151 | static inline void forget_cached_acl(struct inode *inode, int type) | 136 | static inline void forget_cached_acl(struct inode *inode, int type) |
152 | { | 137 | { |
153 | struct posix_acl *old = NULL; | 138 | struct posix_acl **p = acl_by_type(inode, type); |
139 | struct posix_acl *old; | ||
154 | spin_lock(&inode->i_lock); | 140 | spin_lock(&inode->i_lock); |
155 | switch (type) { | 141 | old = *p; |
156 | case ACL_TYPE_ACCESS: | 142 | *p = ACL_NOT_CACHED; |
157 | old = inode->i_acl; | ||
158 | inode->i_acl = ACL_NOT_CACHED; | ||
159 | break; | ||
160 | case ACL_TYPE_DEFAULT: | ||
161 | old = inode->i_default_acl; | ||
162 | inode->i_default_acl = ACL_NOT_CACHED; | ||
163 | break; | ||
164 | } | ||
165 | spin_unlock(&inode->i_lock); | 143 | spin_unlock(&inode->i_lock); |
166 | if (old != ACL_NOT_CACHED) | 144 | if (old != ACL_NOT_CACHED) |
167 | posix_acl_release(old); | 145 | posix_acl_release(old); |
diff --git a/include/linux/pstore.h b/include/linux/pstore.h index 2455ef2683f..cc03bbf5c4b 100644 --- a/include/linux/pstore.h +++ b/include/linux/pstore.h | |||
@@ -38,9 +38,12 @@ struct pstore_info { | |||
38 | int (*open)(struct pstore_info *psi); | 38 | int (*open)(struct pstore_info *psi); |
39 | int (*close)(struct pstore_info *psi); | 39 | int (*close)(struct pstore_info *psi); |
40 | ssize_t (*read)(u64 *id, enum pstore_type_id *type, | 40 | ssize_t (*read)(u64 *id, enum pstore_type_id *type, |
41 | struct timespec *time); | 41 | struct timespec *time, struct pstore_info *psi); |
42 | u64 (*write)(enum pstore_type_id type, size_t size); | 42 | u64 (*write)(enum pstore_type_id type, unsigned int part, |
43 | int (*erase)(u64 id); | 43 | size_t size, struct pstore_info *psi); |
44 | int (*erase)(enum pstore_type_id type, u64 id, | ||
45 | struct pstore_info *psi); | ||
46 | void *data; | ||
44 | }; | 47 | }; |
45 | 48 | ||
46 | #ifdef CONFIG_PSTORE | 49 | #ifdef CONFIG_PSTORE |
diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h index 23241c2fecc..9d4539c52e5 100644 --- a/include/linux/radix-tree.h +++ b/include/linux/radix-tree.h | |||
@@ -39,7 +39,15 @@ | |||
39 | * when it is shrunk, before we rcu free the node. See shrink code for | 39 | * when it is shrunk, before we rcu free the node. See shrink code for |
40 | * details. | 40 | * details. |
41 | */ | 41 | */ |
42 | #define RADIX_TREE_INDIRECT_PTR 1 | 42 | #define RADIX_TREE_INDIRECT_PTR 1 |
43 | /* | ||
44 | * A common use of the radix tree is to store pointers to struct pages; | ||
45 | * but shmem/tmpfs needs also to store swap entries in the same tree: | ||
46 | * those are marked as exceptional entries to distinguish them. | ||
47 | * EXCEPTIONAL_ENTRY tests the bit, EXCEPTIONAL_SHIFT shifts content past it. | ||
48 | */ | ||
49 | #define RADIX_TREE_EXCEPTIONAL_ENTRY 2 | ||
50 | #define RADIX_TREE_EXCEPTIONAL_SHIFT 2 | ||
43 | 51 | ||
44 | #define radix_tree_indirect_to_ptr(ptr) \ | 52 | #define radix_tree_indirect_to_ptr(ptr) \ |
45 | radix_tree_indirect_to_ptr((void __force *)(ptr)) | 53 | radix_tree_indirect_to_ptr((void __force *)(ptr)) |
@@ -174,6 +182,28 @@ static inline int radix_tree_deref_retry(void *arg) | |||
174 | } | 182 | } |
175 | 183 | ||
176 | /** | 184 | /** |
185 | * radix_tree_exceptional_entry - radix_tree_deref_slot gave exceptional entry? | ||
186 | * @arg: value returned by radix_tree_deref_slot | ||
187 | * Returns: 0 if well-aligned pointer, non-0 if exceptional entry. | ||
188 | */ | ||
189 | static inline int radix_tree_exceptional_entry(void *arg) | ||
190 | { | ||
191 | /* Not unlikely because radix_tree_exception often tested first */ | ||
192 | return (unsigned long)arg & RADIX_TREE_EXCEPTIONAL_ENTRY; | ||
193 | } | ||
194 | |||
195 | /** | ||
196 | * radix_tree_exception - radix_tree_deref_slot returned either exception? | ||
197 | * @arg: value returned by radix_tree_deref_slot | ||
198 | * Returns: 0 if well-aligned pointer, non-0 if either kind of exception. | ||
199 | */ | ||
200 | static inline int radix_tree_exception(void *arg) | ||
201 | { | ||
202 | return unlikely((unsigned long)arg & | ||
203 | (RADIX_TREE_INDIRECT_PTR | RADIX_TREE_EXCEPTIONAL_ENTRY)); | ||
204 | } | ||
205 | |||
206 | /** | ||
177 | * radix_tree_replace_slot - replace item in a slot | 207 | * radix_tree_replace_slot - replace item in a slot |
178 | * @pslot: pointer to slot, returned by radix_tree_lookup_slot | 208 | * @pslot: pointer to slot, returned by radix_tree_lookup_slot |
179 | * @item: new item to store in the slot. | 209 | * @item: new item to store in the slot. |
@@ -194,8 +224,8 @@ void *radix_tree_delete(struct radix_tree_root *, unsigned long); | |||
194 | unsigned int | 224 | unsigned int |
195 | radix_tree_gang_lookup(struct radix_tree_root *root, void **results, | 225 | radix_tree_gang_lookup(struct radix_tree_root *root, void **results, |
196 | unsigned long first_index, unsigned int max_items); | 226 | unsigned long first_index, unsigned int max_items); |
197 | unsigned int | 227 | unsigned int radix_tree_gang_lookup_slot(struct radix_tree_root *root, |
198 | radix_tree_gang_lookup_slot(struct radix_tree_root *root, void ***results, | 228 | void ***results, unsigned long *indices, |
199 | unsigned long first_index, unsigned int max_items); | 229 | unsigned long first_index, unsigned int max_items); |
200 | unsigned long radix_tree_next_hole(struct radix_tree_root *root, | 230 | unsigned long radix_tree_next_hole(struct radix_tree_root *root, |
201 | unsigned long index, unsigned long max_scan); | 231 | unsigned long index, unsigned long max_scan); |
@@ -222,6 +252,7 @@ unsigned long radix_tree_range_tag_if_tagged(struct radix_tree_root *root, | |||
222 | unsigned long nr_to_tag, | 252 | unsigned long nr_to_tag, |
223 | unsigned int fromtag, unsigned int totag); | 253 | unsigned int fromtag, unsigned int totag); |
224 | int radix_tree_tagged(struct radix_tree_root *root, unsigned int tag); | 254 | int radix_tree_tagged(struct radix_tree_root *root, unsigned int tag); |
255 | unsigned long radix_tree_locate_item(struct radix_tree_root *root, void *item); | ||
225 | 256 | ||
226 | static inline void radix_tree_preload_end(void) | 257 | static inline void radix_tree_preload_end(void) |
227 | { | 258 | { |
diff --git a/include/linux/random.h b/include/linux/random.h index ce29a040c8d..d13059f3ea3 100644 --- a/include/linux/random.h +++ b/include/linux/random.h | |||
@@ -57,18 +57,6 @@ extern void add_interrupt_randomness(int irq); | |||
57 | extern void get_random_bytes(void *buf, int nbytes); | 57 | extern void get_random_bytes(void *buf, int nbytes); |
58 | void generate_random_uuid(unsigned char uuid_out[16]); | 58 | void generate_random_uuid(unsigned char uuid_out[16]); |
59 | 59 | ||
60 | extern __u32 secure_ip_id(__be32 daddr); | ||
61 | extern __u32 secure_ipv6_id(const __be32 daddr[4]); | ||
62 | extern u32 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport); | ||
63 | extern u32 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr, | ||
64 | __be16 dport); | ||
65 | extern __u32 secure_tcp_sequence_number(__be32 saddr, __be32 daddr, | ||
66 | __be16 sport, __be16 dport); | ||
67 | extern __u32 secure_tcpv6_sequence_number(__be32 *saddr, __be32 *daddr, | ||
68 | __be16 sport, __be16 dport); | ||
69 | extern u64 secure_dccp_sequence_number(__be32 saddr, __be32 daddr, | ||
70 | __be16 sport, __be16 dport); | ||
71 | |||
72 | #ifndef MODULE | 60 | #ifndef MODULE |
73 | extern const struct file_operations random_fops, urandom_fops; | 61 | extern const struct file_operations random_fops, urandom_fops; |
74 | #endif | 62 | #endif |
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h index 9e87c1cb727..26f6ea4444e 100644 --- a/include/linux/regulator/consumer.h +++ b/include/linux/regulator/consumer.h | |||
@@ -122,6 +122,9 @@ struct regulator; | |||
122 | struct regulator_bulk_data { | 122 | struct regulator_bulk_data { |
123 | const char *supply; | 123 | const char *supply; |
124 | struct regulator *consumer; | 124 | struct regulator *consumer; |
125 | |||
126 | /* Internal use */ | ||
127 | int ret; | ||
125 | }; | 128 | }; |
126 | 129 | ||
127 | #if defined(CONFIG_REGULATOR) | 130 | #if defined(CONFIG_REGULATOR) |
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h index 6c433b89c80..1a80bc77517 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h | |||
@@ -188,18 +188,16 @@ struct regulator_dev { | |||
188 | 188 | ||
189 | /* lists we belong to */ | 189 | /* lists we belong to */ |
190 | struct list_head list; /* list of all regulators */ | 190 | struct list_head list; /* list of all regulators */ |
191 | struct list_head slist; /* list of supplied regulators */ | ||
192 | 191 | ||
193 | /* lists we own */ | 192 | /* lists we own */ |
194 | struct list_head consumer_list; /* consumers we supply */ | 193 | struct list_head consumer_list; /* consumers we supply */ |
195 | struct list_head supply_list; /* regulators we supply */ | ||
196 | 194 | ||
197 | struct blocking_notifier_head notifier; | 195 | struct blocking_notifier_head notifier; |
198 | struct mutex mutex; /* consumer lock */ | 196 | struct mutex mutex; /* consumer lock */ |
199 | struct module *owner; | 197 | struct module *owner; |
200 | struct device dev; | 198 | struct device dev; |
201 | struct regulation_constraints *constraints; | 199 | struct regulation_constraints *constraints; |
202 | struct regulator_dev *supply; /* for tree */ | 200 | struct regulator *supply; /* for tree */ |
203 | 201 | ||
204 | void *reg_data; /* regulator_dev data */ | 202 | void *reg_data; /* regulator_dev data */ |
205 | 203 | ||
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index aa08fa8fd79..9291ac3cc62 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h | |||
@@ -8,22 +8,15 @@ | |||
8 | 8 | ||
9 | /* inode in-kernel data */ | 9 | /* inode in-kernel data */ |
10 | 10 | ||
11 | #define SHMEM_NR_DIRECT 16 | ||
12 | |||
13 | #define SHMEM_SYMLINK_INLINE_LEN (SHMEM_NR_DIRECT * sizeof(swp_entry_t)) | ||
14 | |||
15 | struct shmem_inode_info { | 11 | struct shmem_inode_info { |
16 | spinlock_t lock; | 12 | spinlock_t lock; |
17 | unsigned long flags; | 13 | unsigned long flags; |
18 | unsigned long alloced; /* data pages alloced to file */ | 14 | unsigned long alloced; /* data pages alloced to file */ |
19 | unsigned long swapped; /* subtotal assigned to swap */ | ||
20 | unsigned long next_index; /* highest alloced index + 1 */ | ||
21 | struct shared_policy policy; /* NUMA memory alloc policy */ | ||
22 | struct page *i_indirect; /* top indirect blocks page */ | ||
23 | union { | 15 | union { |
24 | swp_entry_t i_direct[SHMEM_NR_DIRECT]; /* first blocks */ | 16 | unsigned long swapped; /* subtotal assigned to swap */ |
25 | char inline_symlink[SHMEM_SYMLINK_INLINE_LEN]; | 17 | char *symlink; /* unswappable short symlink */ |
26 | }; | 18 | }; |
19 | struct shared_policy policy; /* NUMA memory alloc policy */ | ||
27 | struct list_head swaplist; /* chain of maybes on swap */ | 20 | struct list_head swaplist; /* chain of maybes on swap */ |
28 | struct list_head xattr_list; /* list of shmem_xattr */ | 21 | struct list_head xattr_list; /* list of shmem_xattr */ |
29 | struct inode vfs_inode; | 22 | struct inode vfs_inode; |
@@ -49,7 +42,7 @@ static inline struct shmem_inode_info *SHMEM_I(struct inode *inode) | |||
49 | /* | 42 | /* |
50 | * Functions in mm/shmem.c called directly from elsewhere: | 43 | * Functions in mm/shmem.c called directly from elsewhere: |
51 | */ | 44 | */ |
52 | extern int init_tmpfs(void); | 45 | extern int shmem_init(void); |
53 | extern int shmem_fill_super(struct super_block *sb, void *data, int silent); | 46 | extern int shmem_fill_super(struct super_block *sb, void *data, int silent); |
54 | extern struct file *shmem_file_setup(const char *name, | 47 | extern struct file *shmem_file_setup(const char *name, |
55 | loff_t size, unsigned long flags); | 48 | loff_t size, unsigned long flags); |
@@ -59,8 +52,6 @@ extern struct page *shmem_read_mapping_page_gfp(struct address_space *mapping, | |||
59 | pgoff_t index, gfp_t gfp_mask); | 52 | pgoff_t index, gfp_t gfp_mask); |
60 | extern void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end); | 53 | extern void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end); |
61 | extern int shmem_unuse(swp_entry_t entry, struct page *page); | 54 | extern int shmem_unuse(swp_entry_t entry, struct page *page); |
62 | extern void mem_cgroup_get_shmem_target(struct inode *inode, pgoff_t pgoff, | ||
63 | struct page **pagep, swp_entry_t *ent); | ||
64 | 55 | ||
65 | static inline struct page *shmem_read_mapping_page( | 56 | static inline struct page *shmem_read_mapping_page( |
66 | struct address_space *mapping, pgoff_t index) | 57 | struct address_space *mapping, pgoff_t index) |
diff --git a/include/linux/swapops.h b/include/linux/swapops.h index cd42e30b7c6..2189d3ffc85 100644 --- a/include/linux/swapops.h +++ b/include/linux/swapops.h | |||
@@ -1,3 +1,8 @@ | |||
1 | #ifndef _LINUX_SWAPOPS_H | ||
2 | #define _LINUX_SWAPOPS_H | ||
3 | |||
4 | #include <linux/radix-tree.h> | ||
5 | |||
1 | /* | 6 | /* |
2 | * swapcache pages are stored in the swapper_space radix tree. We want to | 7 | * swapcache pages are stored in the swapper_space radix tree. We want to |
3 | * get good packing density in that tree, so the index should be dense in | 8 | * get good packing density in that tree, so the index should be dense in |
@@ -76,6 +81,22 @@ static inline pte_t swp_entry_to_pte(swp_entry_t entry) | |||
76 | return __swp_entry_to_pte(arch_entry); | 81 | return __swp_entry_to_pte(arch_entry); |
77 | } | 82 | } |
78 | 83 | ||
84 | static inline swp_entry_t radix_to_swp_entry(void *arg) | ||
85 | { | ||
86 | swp_entry_t entry; | ||
87 | |||
88 | entry.val = (unsigned long)arg >> RADIX_TREE_EXCEPTIONAL_SHIFT; | ||
89 | return entry; | ||
90 | } | ||
91 | |||
92 | static inline void *swp_to_radix_entry(swp_entry_t entry) | ||
93 | { | ||
94 | unsigned long value; | ||
95 | |||
96 | value = entry.val << RADIX_TREE_EXCEPTIONAL_SHIFT; | ||
97 | return (void *)(value | RADIX_TREE_EXCEPTIONAL_ENTRY); | ||
98 | } | ||
99 | |||
79 | #ifdef CONFIG_MIGRATION | 100 | #ifdef CONFIG_MIGRATION |
80 | static inline swp_entry_t make_migration_entry(struct page *page, int write) | 101 | static inline swp_entry_t make_migration_entry(struct page *page, int write) |
81 | { | 102 | { |
@@ -169,3 +190,5 @@ static inline int non_swap_entry(swp_entry_t entry) | |||
169 | return 0; | 190 | return 0; |
170 | } | 191 | } |
171 | #endif | 192 | #endif |
193 | |||
194 | #endif /* _LINUX_SWAPOPS_H */ | ||
diff --git a/include/linux/thermal.h b/include/linux/thermal.h index d3ec89fb412..47b4a27e6e9 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h | |||
@@ -85,22 +85,6 @@ struct thermal_cooling_device { | |||
85 | ((long)t-2732+5)/10 : ((long)t-2732-5)/10) | 85 | ((long)t-2732+5)/10 : ((long)t-2732-5)/10) |
86 | #define CELSIUS_TO_KELVIN(t) ((t)*10+2732) | 86 | #define CELSIUS_TO_KELVIN(t) ((t)*10+2732) |
87 | 87 | ||
88 | #if defined(CONFIG_THERMAL_HWMON) | ||
89 | /* thermal zone devices with the same type share one hwmon device */ | ||
90 | struct thermal_hwmon_device { | ||
91 | char type[THERMAL_NAME_LENGTH]; | ||
92 | struct device *device; | ||
93 | int count; | ||
94 | struct list_head tz_list; | ||
95 | struct list_head node; | ||
96 | }; | ||
97 | |||
98 | struct thermal_hwmon_attr { | ||
99 | struct device_attribute attr; | ||
100 | char name[16]; | ||
101 | }; | ||
102 | #endif | ||
103 | |||
104 | struct thermal_zone_device { | 88 | struct thermal_zone_device { |
105 | int id; | 89 | int id; |
106 | char type[THERMAL_NAME_LENGTH]; | 90 | char type[THERMAL_NAME_LENGTH]; |
@@ -120,12 +104,6 @@ struct thermal_zone_device { | |||
120 | struct mutex lock; /* protect cooling devices list */ | 104 | struct mutex lock; /* protect cooling devices list */ |
121 | struct list_head node; | 105 | struct list_head node; |
122 | struct delayed_work poll_queue; | 106 | struct delayed_work poll_queue; |
123 | #if defined(CONFIG_THERMAL_HWMON) | ||
124 | struct list_head hwmon_node; | ||
125 | struct thermal_hwmon_device *hwmon; | ||
126 | struct thermal_hwmon_attr temp_input; /* hwmon sys attr */ | ||
127 | struct thermal_hwmon_attr temp_crit; /* hwmon sys attr */ | ||
128 | #endif | ||
129 | }; | 107 | }; |
130 | /* Adding event notification support elements */ | 108 | /* Adding event notification support elements */ |
131 | #define THERMAL_GENL_FAMILY_NAME "thermal_event" | 109 | #define THERMAL_GENL_FAMILY_NAME "thermal_event" |
diff --git a/include/net/cipso_ipv4.h b/include/net/cipso_ipv4.h index 3b938743514..9808877c2ab 100644 --- a/include/net/cipso_ipv4.h +++ b/include/net/cipso_ipv4.h | |||
@@ -8,7 +8,7 @@ | |||
8 | * have chosen to adopt the protocol and over the years it has become a | 8 | * have chosen to adopt the protocol and over the years it has become a |
9 | * de-facto standard for labeled networking. | 9 | * de-facto standard for labeled networking. |
10 | * | 10 | * |
11 | * Author: Paul Moore <paul.moore@hp.com> | 11 | * Author: Paul Moore <paul@paul-moore.com> |
12 | * | 12 | * |
13 | */ | 13 | */ |
14 | 14 | ||
diff --git a/include/net/dst.h b/include/net/dst.h index 29e255796ce..13d507d69dd 100644 --- a/include/net/dst.h +++ b/include/net/dst.h | |||
@@ -37,7 +37,7 @@ struct dst_entry { | |||
37 | unsigned long _metrics; | 37 | unsigned long _metrics; |
38 | unsigned long expires; | 38 | unsigned long expires; |
39 | struct dst_entry *path; | 39 | struct dst_entry *path; |
40 | struct neighbour *_neighbour; | 40 | struct neighbour __rcu *_neighbour; |
41 | #ifdef CONFIG_XFRM | 41 | #ifdef CONFIG_XFRM |
42 | struct xfrm_state *xfrm; | 42 | struct xfrm_state *xfrm; |
43 | #else | 43 | #else |
@@ -88,12 +88,17 @@ struct dst_entry { | |||
88 | 88 | ||
89 | static inline struct neighbour *dst_get_neighbour(struct dst_entry *dst) | 89 | static inline struct neighbour *dst_get_neighbour(struct dst_entry *dst) |
90 | { | 90 | { |
91 | return dst->_neighbour; | 91 | return rcu_dereference(dst->_neighbour); |
92 | } | ||
93 | |||
94 | static inline struct neighbour *dst_get_neighbour_raw(struct dst_entry *dst) | ||
95 | { | ||
96 | return rcu_dereference_raw(dst->_neighbour); | ||
92 | } | 97 | } |
93 | 98 | ||
94 | static inline void dst_set_neighbour(struct dst_entry *dst, struct neighbour *neigh) | 99 | static inline void dst_set_neighbour(struct dst_entry *dst, struct neighbour *neigh) |
95 | { | 100 | { |
96 | dst->_neighbour = neigh; | 101 | rcu_assign_pointer(dst->_neighbour, neigh); |
97 | } | 102 | } |
98 | 103 | ||
99 | extern u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old); | 104 | extern u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old); |
@@ -382,8 +387,12 @@ static inline void dst_rcu_free(struct rcu_head *head) | |||
382 | static inline void dst_confirm(struct dst_entry *dst) | 387 | static inline void dst_confirm(struct dst_entry *dst) |
383 | { | 388 | { |
384 | if (dst) { | 389 | if (dst) { |
385 | struct neighbour *n = dst_get_neighbour(dst); | 390 | struct neighbour *n; |
391 | |||
392 | rcu_read_lock(); | ||
393 | n = dst_get_neighbour(dst); | ||
386 | neigh_confirm(n); | 394 | neigh_confirm(n); |
395 | rcu_read_unlock(); | ||
387 | } | 396 | } |
388 | } | 397 | } |
389 | 398 | ||
diff --git a/include/net/netlabel.h b/include/net/netlabel.h index f21a16ee370..f67440970d7 100644 --- a/include/net/netlabel.h +++ b/include/net/netlabel.h | |||
@@ -4,7 +4,7 @@ | |||
4 | * The NetLabel system manages static and dynamic label mappings for network | 4 | * The NetLabel system manages static and dynamic label mappings for network |
5 | * protocols such as CIPSO and RIPSO. | 5 | * protocols such as CIPSO and RIPSO. |
6 | * | 6 | * |
7 | * Author: Paul Moore <paul.moore@hp.com> | 7 | * Author: Paul Moore <paul@paul-moore.com> |
8 | * | 8 | * |
9 | */ | 9 | */ |
10 | 10 | ||
diff --git a/include/net/secure_seq.h b/include/net/secure_seq.h new file mode 100644 index 00000000000..d97f6892c01 --- /dev/null +++ b/include/net/secure_seq.h | |||
@@ -0,0 +1,20 @@ | |||
1 | #ifndef _NET_SECURE_SEQ | ||
2 | #define _NET_SECURE_SEQ | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | |||
6 | extern __u32 secure_ip_id(__be32 daddr); | ||
7 | extern __u32 secure_ipv6_id(const __be32 daddr[4]); | ||
8 | extern u32 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport); | ||
9 | extern u32 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr, | ||
10 | __be16 dport); | ||
11 | extern __u32 secure_tcp_sequence_number(__be32 saddr, __be32 daddr, | ||
12 | __be16 sport, __be16 dport); | ||
13 | extern __u32 secure_tcpv6_sequence_number(__be32 *saddr, __be32 *daddr, | ||
14 | __be16 sport, __be16 dport); | ||
15 | extern u64 secure_dccp_sequence_number(__be32 saddr, __be32 daddr, | ||
16 | __be16 sport, __be16 dport); | ||
17 | extern u64 secure_dccpv6_sequence_number(__be32 *saddr, __be32 *daddr, | ||
18 | __be16 sport, __be16 dport); | ||
19 | |||
20 | #endif /* _NET_SECURE_SEQ */ | ||
diff --git a/include/scsi/osd_ore.h b/include/scsi/osd_ore.h new file mode 100644 index 00000000000..c5c5e008e6d --- /dev/null +++ b/include/scsi/osd_ore.h | |||
@@ -0,0 +1,125 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2011 | ||
3 | * Boaz Harrosh <bharrosh@panasas.com> | ||
4 | * | ||
5 | * Public Declarations of the ORE API | ||
6 | * | ||
7 | * This file is part of the ORE (Object Raid Engine) library. | ||
8 | * | ||
9 | * ORE is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as published | ||
11 | * by the Free Software Foundation. (GPL v2) | ||
12 | * | ||
13 | * ORE is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with the ORE; if not, write to the Free Software | ||
20 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
21 | */ | ||
22 | #ifndef __ORE_H__ | ||
23 | #define __ORE_H__ | ||
24 | |||
25 | #include <scsi/osd_initiator.h> | ||
26 | #include <scsi/osd_attributes.h> | ||
27 | #include <scsi/osd_sec.h> | ||
28 | #include <linux/pnfs_osd_xdr.h> | ||
29 | |||
30 | struct ore_comp { | ||
31 | struct osd_obj_id obj; | ||
32 | u8 cred[OSD_CAP_LEN]; | ||
33 | }; | ||
34 | |||
35 | struct ore_layout { | ||
36 | /* Our way of looking at the data_map */ | ||
37 | unsigned stripe_unit; | ||
38 | unsigned mirrors_p1; | ||
39 | |||
40 | unsigned group_width; | ||
41 | u64 group_depth; | ||
42 | unsigned group_count; | ||
43 | }; | ||
44 | |||
45 | struct ore_components { | ||
46 | unsigned numdevs; /* Num of devices in array */ | ||
47 | /* If @single_comp == EC_SINGLE_COMP, @comps points to a single | ||
48 | * component. else there are @numdevs components | ||
49 | */ | ||
50 | enum EC_COMP_USAGE { | ||
51 | EC_SINGLE_COMP = 0, EC_MULTPLE_COMPS = 0xffffffff | ||
52 | } single_comp; | ||
53 | struct ore_comp *comps; | ||
54 | struct osd_dev **ods; /* osd_dev array */ | ||
55 | }; | ||
56 | |||
57 | struct ore_io_state; | ||
58 | typedef void (*ore_io_done_fn)(struct ore_io_state *ios, void *private); | ||
59 | |||
60 | struct ore_io_state { | ||
61 | struct kref kref; | ||
62 | |||
63 | void *private; | ||
64 | ore_io_done_fn done; | ||
65 | |||
66 | struct ore_layout *layout; | ||
67 | struct ore_components *comps; | ||
68 | |||
69 | /* Global read/write IO*/ | ||
70 | loff_t offset; | ||
71 | unsigned long length; | ||
72 | void *kern_buff; | ||
73 | |||
74 | struct page **pages; | ||
75 | unsigned nr_pages; | ||
76 | unsigned pgbase; | ||
77 | unsigned pages_consumed; | ||
78 | |||
79 | /* Attributes */ | ||
80 | unsigned in_attr_len; | ||
81 | struct osd_attr *in_attr; | ||
82 | unsigned out_attr_len; | ||
83 | struct osd_attr *out_attr; | ||
84 | |||
85 | bool reading; | ||
86 | |||
87 | /* Variable array of size numdevs */ | ||
88 | unsigned numdevs; | ||
89 | struct ore_per_dev_state { | ||
90 | struct osd_request *or; | ||
91 | struct bio *bio; | ||
92 | loff_t offset; | ||
93 | unsigned length; | ||
94 | unsigned dev; | ||
95 | } per_dev[]; | ||
96 | }; | ||
97 | |||
98 | static inline unsigned ore_io_state_size(unsigned numdevs) | ||
99 | { | ||
100 | return sizeof(struct ore_io_state) + | ||
101 | sizeof(struct ore_per_dev_state) * numdevs; | ||
102 | } | ||
103 | |||
104 | /* ore.c */ | ||
105 | int ore_get_rw_state(struct ore_layout *layout, struct ore_components *comps, | ||
106 | bool is_reading, u64 offset, u64 length, | ||
107 | struct ore_io_state **ios); | ||
108 | int ore_get_io_state(struct ore_layout *layout, struct ore_components *comps, | ||
109 | struct ore_io_state **ios); | ||
110 | void ore_put_io_state(struct ore_io_state *ios); | ||
111 | |||
112 | int ore_check_io(struct ore_io_state *ios, u64 *resid); | ||
113 | |||
114 | int ore_create(struct ore_io_state *ios); | ||
115 | int ore_remove(struct ore_io_state *ios); | ||
116 | int ore_write(struct ore_io_state *ios); | ||
117 | int ore_read(struct ore_io_state *ios); | ||
118 | int ore_truncate(struct ore_layout *layout, struct ore_components *comps, | ||
119 | u64 size); | ||
120 | |||
121 | int extract_attr_from_ios(struct ore_io_state *ios, struct osd_attr *attr); | ||
122 | |||
123 | extern const struct osd_attr g_attr_logical_length; | ||
124 | |||
125 | #endif | ||
diff --git a/include/trace/events/ext4.h b/include/trace/events/ext4.h index 6363193a341..b50a5473624 100644 --- a/include/trace/events/ext4.h +++ b/include/trace/events/ext4.h | |||
@@ -23,7 +23,7 @@ TRACE_EVENT(ext4_free_inode, | |||
23 | TP_STRUCT__entry( | 23 | TP_STRUCT__entry( |
24 | __field( dev_t, dev ) | 24 | __field( dev_t, dev ) |
25 | __field( ino_t, ino ) | 25 | __field( ino_t, ino ) |
26 | __field( umode_t, mode ) | 26 | __field( __u16, mode ) |
27 | __field( uid_t, uid ) | 27 | __field( uid_t, uid ) |
28 | __field( gid_t, gid ) | 28 | __field( gid_t, gid ) |
29 | __field( __u64, blocks ) | 29 | __field( __u64, blocks ) |
@@ -52,7 +52,7 @@ TRACE_EVENT(ext4_request_inode, | |||
52 | TP_STRUCT__entry( | 52 | TP_STRUCT__entry( |
53 | __field( dev_t, dev ) | 53 | __field( dev_t, dev ) |
54 | __field( ino_t, dir ) | 54 | __field( ino_t, dir ) |
55 | __field( umode_t, mode ) | 55 | __field( __u16, mode ) |
56 | ), | 56 | ), |
57 | 57 | ||
58 | TP_fast_assign( | 58 | TP_fast_assign( |
@@ -75,7 +75,7 @@ TRACE_EVENT(ext4_allocate_inode, | |||
75 | __field( dev_t, dev ) | 75 | __field( dev_t, dev ) |
76 | __field( ino_t, ino ) | 76 | __field( ino_t, ino ) |
77 | __field( ino_t, dir ) | 77 | __field( ino_t, dir ) |
78 | __field( umode_t, mode ) | 78 | __field( __u16, mode ) |
79 | ), | 79 | ), |
80 | 80 | ||
81 | TP_fast_assign( | 81 | TP_fast_assign( |
@@ -725,7 +725,7 @@ TRACE_EVENT(ext4_free_blocks, | |||
725 | TP_STRUCT__entry( | 725 | TP_STRUCT__entry( |
726 | __field( dev_t, dev ) | 726 | __field( dev_t, dev ) |
727 | __field( ino_t, ino ) | 727 | __field( ino_t, ino ) |
728 | __field( umode_t, mode ) | 728 | __field( __u16, mode ) |
729 | __field( __u64, block ) | 729 | __field( __u64, block ) |
730 | __field( unsigned long, count ) | 730 | __field( unsigned long, count ) |
731 | __field( int, flags ) | 731 | __field( int, flags ) |
@@ -1012,7 +1012,7 @@ TRACE_EVENT(ext4_forget, | |||
1012 | TP_STRUCT__entry( | 1012 | TP_STRUCT__entry( |
1013 | __field( dev_t, dev ) | 1013 | __field( dev_t, dev ) |
1014 | __field( ino_t, ino ) | 1014 | __field( ino_t, ino ) |
1015 | __field( umode_t, mode ) | 1015 | __field( __u16, mode ) |
1016 | __field( int, is_metadata ) | 1016 | __field( int, is_metadata ) |
1017 | __field( __u64, block ) | 1017 | __field( __u64, block ) |
1018 | ), | 1018 | ), |
@@ -1039,7 +1039,7 @@ TRACE_EVENT(ext4_da_update_reserve_space, | |||
1039 | TP_STRUCT__entry( | 1039 | TP_STRUCT__entry( |
1040 | __field( dev_t, dev ) | 1040 | __field( dev_t, dev ) |
1041 | __field( ino_t, ino ) | 1041 | __field( ino_t, ino ) |
1042 | __field( umode_t, mode ) | 1042 | __field( __u16, mode ) |
1043 | __field( __u64, i_blocks ) | 1043 | __field( __u64, i_blocks ) |
1044 | __field( int, used_blocks ) | 1044 | __field( int, used_blocks ) |
1045 | __field( int, reserved_data_blocks ) | 1045 | __field( int, reserved_data_blocks ) |
@@ -1076,7 +1076,7 @@ TRACE_EVENT(ext4_da_reserve_space, | |||
1076 | TP_STRUCT__entry( | 1076 | TP_STRUCT__entry( |
1077 | __field( dev_t, dev ) | 1077 | __field( dev_t, dev ) |
1078 | __field( ino_t, ino ) | 1078 | __field( ino_t, ino ) |
1079 | __field( umode_t, mode ) | 1079 | __field( __u16, mode ) |
1080 | __field( __u64, i_blocks ) | 1080 | __field( __u64, i_blocks ) |
1081 | __field( int, md_needed ) | 1081 | __field( int, md_needed ) |
1082 | __field( int, reserved_data_blocks ) | 1082 | __field( int, reserved_data_blocks ) |
@@ -1110,7 +1110,7 @@ TRACE_EVENT(ext4_da_release_space, | |||
1110 | TP_STRUCT__entry( | 1110 | TP_STRUCT__entry( |
1111 | __field( dev_t, dev ) | 1111 | __field( dev_t, dev ) |
1112 | __field( ino_t, ino ) | 1112 | __field( ino_t, ino ) |
1113 | __field( umode_t, mode ) | 1113 | __field( __u16, mode ) |
1114 | __field( __u64, i_blocks ) | 1114 | __field( __u64, i_blocks ) |
1115 | __field( int, freed_blocks ) | 1115 | __field( int, freed_blocks ) |
1116 | __field( int, reserved_data_blocks ) | 1116 | __field( int, reserved_data_blocks ) |
@@ -1518,6 +1518,77 @@ TRACE_EVENT(ext4_load_inode, | |||
1518 | (unsigned long) __entry->ino) | 1518 | (unsigned long) __entry->ino) |
1519 | ); | 1519 | ); |
1520 | 1520 | ||
1521 | TRACE_EVENT(ext4_journal_start, | ||
1522 | TP_PROTO(struct super_block *sb, int nblocks, unsigned long IP), | ||
1523 | |||
1524 | TP_ARGS(sb, nblocks, IP), | ||
1525 | |||
1526 | TP_STRUCT__entry( | ||
1527 | __field( dev_t, dev ) | ||
1528 | __field( int, nblocks ) | ||
1529 | __field(unsigned long, ip ) | ||
1530 | ), | ||
1531 | |||
1532 | TP_fast_assign( | ||
1533 | __entry->dev = sb->s_dev; | ||
1534 | __entry->nblocks = nblocks; | ||
1535 | __entry->ip = IP; | ||
1536 | ), | ||
1537 | |||
1538 | TP_printk("dev %d,%d nblocks %d caller %pF", | ||
1539 | MAJOR(__entry->dev), MINOR(__entry->dev), | ||
1540 | __entry->nblocks, (void *)__entry->ip) | ||
1541 | ); | ||
1542 | |||
1543 | DECLARE_EVENT_CLASS(ext4__trim, | ||
1544 | TP_PROTO(struct super_block *sb, | ||
1545 | ext4_group_t group, | ||
1546 | ext4_grpblk_t start, | ||
1547 | ext4_grpblk_t len), | ||
1548 | |||
1549 | TP_ARGS(sb, group, start, len), | ||
1550 | |||
1551 | TP_STRUCT__entry( | ||
1552 | __field( int, dev_major ) | ||
1553 | __field( int, dev_minor ) | ||
1554 | __field( __u32, group ) | ||
1555 | __field( int, start ) | ||
1556 | __field( int, len ) | ||
1557 | ), | ||
1558 | |||
1559 | TP_fast_assign( | ||
1560 | __entry->dev_major = MAJOR(sb->s_dev); | ||
1561 | __entry->dev_minor = MINOR(sb->s_dev); | ||
1562 | __entry->group = group; | ||
1563 | __entry->start = start; | ||
1564 | __entry->len = len; | ||
1565 | ), | ||
1566 | |||
1567 | TP_printk("dev %d,%d group %u, start %d, len %d", | ||
1568 | __entry->dev_major, __entry->dev_minor, | ||
1569 | __entry->group, __entry->start, __entry->len) | ||
1570 | ); | ||
1571 | |||
1572 | DEFINE_EVENT(ext4__trim, ext4_trim_extent, | ||
1573 | |||
1574 | TP_PROTO(struct super_block *sb, | ||
1575 | ext4_group_t group, | ||
1576 | ext4_grpblk_t start, | ||
1577 | ext4_grpblk_t len), | ||
1578 | |||
1579 | TP_ARGS(sb, group, start, len) | ||
1580 | ); | ||
1581 | |||
1582 | DEFINE_EVENT(ext4__trim, ext4_trim_all_free, | ||
1583 | |||
1584 | TP_PROTO(struct super_block *sb, | ||
1585 | ext4_group_t group, | ||
1586 | ext4_grpblk_t start, | ||
1587 | ext4_grpblk_t len), | ||
1588 | |||
1589 | TP_ARGS(sb, group, start, len) | ||
1590 | ); | ||
1591 | |||
1521 | #endif /* _TRACE_EXT4_H */ | 1592 | #endif /* _TRACE_EXT4_H */ |
1522 | 1593 | ||
1523 | /* This part must be outside protection */ | 1594 | /* This part must be outside protection */ |
diff --git a/include/trace/events/jbd2.h b/include/trace/events/jbd2.h index bf16545cc97..75964412ddb 100644 --- a/include/trace/events/jbd2.h +++ b/include/trace/events/jbd2.h | |||
@@ -26,8 +26,8 @@ TRACE_EVENT(jbd2_checkpoint, | |||
26 | __entry->result = result; | 26 | __entry->result = result; |
27 | ), | 27 | ), |
28 | 28 | ||
29 | TP_printk("dev %s result %d", | 29 | TP_printk("dev %d,%d result %d", |
30 | jbd2_dev_to_name(__entry->dev), __entry->result) | 30 | MAJOR(__entry->dev), MINOR(__entry->dev), __entry->result) |
31 | ); | 31 | ); |
32 | 32 | ||
33 | DECLARE_EVENT_CLASS(jbd2_commit, | 33 | DECLARE_EVENT_CLASS(jbd2_commit, |
@@ -48,9 +48,9 @@ DECLARE_EVENT_CLASS(jbd2_commit, | |||
48 | __entry->transaction = commit_transaction->t_tid; | 48 | __entry->transaction = commit_transaction->t_tid; |
49 | ), | 49 | ), |
50 | 50 | ||
51 | TP_printk("dev %s transaction %d sync %d", | 51 | TP_printk("dev %d,%d transaction %d sync %d", |
52 | jbd2_dev_to_name(__entry->dev), __entry->transaction, | 52 | MAJOR(__entry->dev), MINOR(__entry->dev), |
53 | __entry->sync_commit) | 53 | __entry->transaction, __entry->sync_commit) |
54 | ); | 54 | ); |
55 | 55 | ||
56 | DEFINE_EVENT(jbd2_commit, jbd2_start_commit, | 56 | DEFINE_EVENT(jbd2_commit, jbd2_start_commit, |
@@ -100,9 +100,9 @@ TRACE_EVENT(jbd2_end_commit, | |||
100 | __entry->head = journal->j_tail_sequence; | 100 | __entry->head = journal->j_tail_sequence; |
101 | ), | 101 | ), |
102 | 102 | ||
103 | TP_printk("dev %s transaction %d sync %d head %d", | 103 | TP_printk("dev %d,%d transaction %d sync %d head %d", |
104 | jbd2_dev_to_name(__entry->dev), __entry->transaction, | 104 | MAJOR(__entry->dev), MINOR(__entry->dev), |
105 | __entry->sync_commit, __entry->head) | 105 | __entry->transaction, __entry->sync_commit, __entry->head) |
106 | ); | 106 | ); |
107 | 107 | ||
108 | TRACE_EVENT(jbd2_submit_inode_data, | 108 | TRACE_EVENT(jbd2_submit_inode_data, |
@@ -120,8 +120,9 @@ TRACE_EVENT(jbd2_submit_inode_data, | |||
120 | __entry->ino = inode->i_ino; | 120 | __entry->ino = inode->i_ino; |
121 | ), | 121 | ), |
122 | 122 | ||
123 | TP_printk("dev %s ino %lu", | 123 | TP_printk("dev %d,%d ino %lu", |
124 | jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino) | 124 | MAJOR(__entry->dev), MINOR(__entry->dev), |
125 | (unsigned long) __entry->ino) | ||
125 | ); | 126 | ); |
126 | 127 | ||
127 | TRACE_EVENT(jbd2_run_stats, | 128 | TRACE_EVENT(jbd2_run_stats, |
@@ -156,9 +157,9 @@ TRACE_EVENT(jbd2_run_stats, | |||
156 | __entry->blocks_logged = stats->rs_blocks_logged; | 157 | __entry->blocks_logged = stats->rs_blocks_logged; |
157 | ), | 158 | ), |
158 | 159 | ||
159 | TP_printk("dev %s tid %lu wait %u running %u locked %u flushing %u " | 160 | TP_printk("dev %d,%d tid %lu wait %u running %u locked %u flushing %u " |
160 | "logging %u handle_count %u blocks %u blocks_logged %u", | 161 | "logging %u handle_count %u blocks %u blocks_logged %u", |
161 | jbd2_dev_to_name(__entry->dev), __entry->tid, | 162 | MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid, |
162 | jiffies_to_msecs(__entry->wait), | 163 | jiffies_to_msecs(__entry->wait), |
163 | jiffies_to_msecs(__entry->running), | 164 | jiffies_to_msecs(__entry->running), |
164 | jiffies_to_msecs(__entry->locked), | 165 | jiffies_to_msecs(__entry->locked), |
@@ -192,9 +193,9 @@ TRACE_EVENT(jbd2_checkpoint_stats, | |||
192 | __entry->dropped = stats->cs_dropped; | 193 | __entry->dropped = stats->cs_dropped; |
193 | ), | 194 | ), |
194 | 195 | ||
195 | TP_printk("dev %s tid %lu chp_time %u forced_to_close %u " | 196 | TP_printk("dev %d,%d tid %lu chp_time %u forced_to_close %u " |
196 | "written %u dropped %u", | 197 | "written %u dropped %u", |
197 | jbd2_dev_to_name(__entry->dev), __entry->tid, | 198 | MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid, |
198 | jiffies_to_msecs(__entry->chp_time), | 199 | jiffies_to_msecs(__entry->chp_time), |
199 | __entry->forced_to_close, __entry->written, __entry->dropped) | 200 | __entry->forced_to_close, __entry->written, __entry->dropped) |
200 | ); | 201 | ); |
@@ -222,9 +223,10 @@ TRACE_EVENT(jbd2_cleanup_journal_tail, | |||
222 | __entry->freed = freed; | 223 | __entry->freed = freed; |
223 | ), | 224 | ), |
224 | 225 | ||
225 | TP_printk("dev %s from %u to %u offset %lu freed %lu", | 226 | TP_printk("dev %d,%d from %u to %u offset %lu freed %lu", |
226 | jbd2_dev_to_name(__entry->dev), __entry->tail_sequence, | 227 | MAJOR(__entry->dev), MINOR(__entry->dev), |
227 | __entry->first_tid, __entry->block_nr, __entry->freed) | 228 | __entry->tail_sequence, __entry->first_tid, |
229 | __entry->block_nr, __entry->freed) | ||
228 | ); | 230 | ); |
229 | 231 | ||
230 | #endif /* _TRACE_JBD2_H */ | 232 | #endif /* _TRACE_JBD2_H */ |