diff options
Diffstat (limited to 'include')
82 files changed, 1237 insertions, 470 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 54a279e44c9a..e9f6574930ef 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
| @@ -380,6 +380,8 @@ struct acpi_bus_type { | |||
| 380 | int register_acpi_bus_type(struct acpi_bus_type *); | 380 | int register_acpi_bus_type(struct acpi_bus_type *); |
| 381 | int unregister_acpi_bus_type(struct acpi_bus_type *); | 381 | int unregister_acpi_bus_type(struct acpi_bus_type *); |
| 382 | struct device *acpi_get_physical_device(acpi_handle); | 382 | struct device *acpi_get_physical_device(acpi_handle); |
| 383 | struct device *acpi_get_physical_pci_device(acpi_handle); | ||
| 384 | |||
| 383 | /* helper */ | 385 | /* helper */ |
| 384 | acpi_handle acpi_get_child(acpi_handle, acpi_integer); | 386 | acpi_handle acpi_get_child(acpi_handle, acpi_integer); |
| 385 | acpi_handle acpi_get_pci_rootbridge_handle(unsigned int, unsigned int); | 387 | acpi_handle acpi_get_pci_rootbridge_handle(unsigned int, unsigned int); |
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h index cf04c6011c2a..5fc1bb0f4a90 100644 --- a/include/acpi/acpi_drivers.h +++ b/include/acpi/acpi_drivers.h | |||
| @@ -31,8 +31,24 @@ | |||
| 31 | 31 | ||
| 32 | #define ACPI_MAX_STRING 80 | 32 | #define ACPI_MAX_STRING 80 |
| 33 | 33 | ||
| 34 | /* | ||
| 35 | * Please update drivers/acpi/debug.c and Documentation/acpi/debug.txt | ||
| 36 | * if you add to this list. | ||
| 37 | */ | ||
| 34 | #define ACPI_BUS_COMPONENT 0x00010000 | 38 | #define ACPI_BUS_COMPONENT 0x00010000 |
| 39 | #define ACPI_AC_COMPONENT 0x00020000 | ||
| 40 | #define ACPI_BATTERY_COMPONENT 0x00040000 | ||
| 41 | #define ACPI_BUTTON_COMPONENT 0x00080000 | ||
| 42 | #define ACPI_SBS_COMPONENT 0x00100000 | ||
| 43 | #define ACPI_FAN_COMPONENT 0x00200000 | ||
| 44 | #define ACPI_PCI_COMPONENT 0x00400000 | ||
| 45 | #define ACPI_POWER_COMPONENT 0x00800000 | ||
| 46 | #define ACPI_CONTAINER_COMPONENT 0x01000000 | ||
| 35 | #define ACPI_SYSTEM_COMPONENT 0x02000000 | 47 | #define ACPI_SYSTEM_COMPONENT 0x02000000 |
| 48 | #define ACPI_THERMAL_COMPONENT 0x04000000 | ||
| 49 | #define ACPI_MEMORY_DEVICE_COMPONENT 0x08000000 | ||
| 50 | #define ACPI_VIDEO_COMPONENT 0x10000000 | ||
| 51 | #define ACPI_PROCESSOR_COMPONENT 0x20000000 | ||
| 36 | 52 | ||
| 37 | /* | 53 | /* |
| 38 | * _HID definitions | 54 | * _HID definitions |
| @@ -41,6 +57,7 @@ | |||
| 41 | */ | 57 | */ |
| 42 | 58 | ||
| 43 | #define ACPI_POWER_HID "LNXPOWER" | 59 | #define ACPI_POWER_HID "LNXPOWER" |
| 60 | #define ACPI_PROCESSOR_OBJECT_HID "ACPI_CPU" | ||
| 44 | #define ACPI_PROCESSOR_HID "ACPI0007" | 61 | #define ACPI_PROCESSOR_HID "ACPI0007" |
| 45 | #define ACPI_SYSTEM_HID "LNXSYSTM" | 62 | #define ACPI_SYSTEM_HID "LNXSYSTM" |
| 46 | #define ACPI_THERMAL_HID "LNXTHERM" | 63 | #define ACPI_THERMAL_HID "LNXTHERM" |
| @@ -54,7 +71,6 @@ | |||
| 54 | PCI | 71 | PCI |
| 55 | -------------------------------------------------------------------------- */ | 72 | -------------------------------------------------------------------------- */ |
| 56 | 73 | ||
| 57 | #define ACPI_PCI_COMPONENT 0x00400000 | ||
| 58 | 74 | ||
| 59 | /* ACPI PCI Interrupt Link (pci_link.c) */ | 75 | /* ACPI PCI Interrupt Link (pci_link.c) */ |
| 60 | 76 | ||
| @@ -86,7 +102,6 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_device *device, int domain, | |||
| 86 | Power Resource | 102 | Power Resource |
| 87 | -------------------------------------------------------------------------- */ | 103 | -------------------------------------------------------------------------- */ |
| 88 | 104 | ||
| 89 | #ifdef CONFIG_ACPI_POWER | ||
| 90 | int acpi_device_sleep_wake(struct acpi_device *dev, | 105 | int acpi_device_sleep_wake(struct acpi_device *dev, |
| 91 | int enable, int sleep_state, int dev_state); | 106 | int enable, int sleep_state, int dev_state); |
| 92 | int acpi_enable_wakeup_device_power(struct acpi_device *dev, int sleep_state); | 107 | int acpi_enable_wakeup_device_power(struct acpi_device *dev, int sleep_state); |
| @@ -94,15 +109,12 @@ int acpi_disable_wakeup_device_power(struct acpi_device *dev); | |||
| 94 | int acpi_power_get_inferred_state(struct acpi_device *device); | 109 | int acpi_power_get_inferred_state(struct acpi_device *device); |
| 95 | int acpi_power_transition(struct acpi_device *device, int state); | 110 | int acpi_power_transition(struct acpi_device *device, int state); |
| 96 | extern int acpi_power_nocheck; | 111 | extern int acpi_power_nocheck; |
| 97 | #endif | ||
| 98 | 112 | ||
| 99 | /* -------------------------------------------------------------------------- | 113 | /* -------------------------------------------------------------------------- |
| 100 | Embedded Controller | 114 | Embedded Controller |
| 101 | -------------------------------------------------------------------------- */ | 115 | -------------------------------------------------------------------------- */ |
| 102 | #ifdef CONFIG_ACPI_EC | ||
| 103 | int acpi_ec_ecdt_probe(void); | 116 | int acpi_ec_ecdt_probe(void); |
| 104 | int acpi_boot_ec_enable(void); | 117 | int acpi_boot_ec_enable(void); |
| 105 | #endif | ||
| 106 | 118 | ||
| 107 | /* -------------------------------------------------------------------------- | 119 | /* -------------------------------------------------------------------------- |
| 108 | Processor | 120 | Processor |
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index 94d94e126e9f..33bc0e3b1954 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h | |||
| @@ -252,9 +252,9 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status); | |||
| 252 | 252 | ||
| 253 | acpi_status acpi_set_gpe_type(acpi_handle gpe_device, u32 gpe_number, u8 type); | 253 | acpi_status acpi_set_gpe_type(acpi_handle gpe_device, u32 gpe_number, u8 type); |
| 254 | 254 | ||
| 255 | acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags); | 255 | acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number); |
| 256 | 256 | ||
| 257 | acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags); | 257 | acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number); |
| 258 | 258 | ||
| 259 | acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags); | 259 | acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags); |
| 260 | 260 | ||
diff --git a/include/acpi/acpredef.h b/include/acpi/acpredef.h index 619fb75f8861..16a9ca9a66e4 100644 --- a/include/acpi/acpredef.h +++ b/include/acpi/acpredef.h | |||
| @@ -167,7 +167,7 @@ static const union acpi_predefined_info predefined_names[] = { | |||
| 167 | {.info = {"_BFS", 1, 0}}, | 167 | {.info = {"_BFS", 1, 0}}, |
| 168 | {.info = {"_BIF", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, | 168 | {.info = {"_BIF", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, |
| 169 | 9, | 169 | 9, |
| 170 | ACPI_RTYPE_STRING, 4, 0}}, /* fixed (9 Int),(4 Str) */ | 170 | ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER, 4, 0}}, /* fixed (9 Int),(4 Str) */ |
| 171 | {.info = {"_BLT", 3, 0}}, | 171 | {.info = {"_BLT", 3, 0}}, |
| 172 | {.info = {"_BMC", 1, 0}}, | 172 | {.info = {"_BMC", 1, 0}}, |
| 173 | {.info = {"_BMD", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 5, 0, 0, 0}}, /* fixed (5 Int) */ | 173 | {.info = {"_BMD", 0, ACPI_RTYPE_PACKAGE}}, {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 5, 0, 0, 0}}, /* fixed (5 Int) */ |
| @@ -346,7 +346,7 @@ static const union acpi_predefined_info predefined_names[] = { | |||
| 346 | 346 | ||
| 347 | /* Acpi 1.0 defined _WAK with no return value. Later, it was changed to return a package */ | 347 | /* Acpi 1.0 defined _WAK with no return value. Later, it was changed to return a package */ |
| 348 | 348 | ||
| 349 | {.info = {"_WAK", 1, ACPI_RTYPE_NONE | ACPI_RTYPE_PACKAGE}}, | 349 | {.info = {"_WAK", 1, ACPI_RTYPE_NONE | ACPI_RTYPE_INTEGER | ACPI_RTYPE_PACKAGE}}, |
| 350 | {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2, 0, 0, 0}}, /* fixed (2 Int), but is optional */ | 350 | {.ret_info = {ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 2, 0, 0, 0}}, /* fixed (2 Int), but is optional */ |
| 351 | {.ret_info = {0, 0, 0, 0, 0, 0}} /* Table terminator */ | 351 | {.ret_info = {0, 0, 0, 0, 0, 0}} /* Table terminator */ |
| 352 | }; | 352 | }; |
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h index e8936ab59627..7220361790b3 100644 --- a/include/acpi/actypes.h +++ b/include/acpi/actypes.h | |||
| @@ -525,6 +525,7 @@ typedef u32 acpi_event_status; | |||
| 525 | #define ACPI_EVENT_FLAG_ENABLED (acpi_event_status) 0x01 | 525 | #define ACPI_EVENT_FLAG_ENABLED (acpi_event_status) 0x01 |
| 526 | #define ACPI_EVENT_FLAG_WAKE_ENABLED (acpi_event_status) 0x02 | 526 | #define ACPI_EVENT_FLAG_WAKE_ENABLED (acpi_event_status) 0x02 |
| 527 | #define ACPI_EVENT_FLAG_SET (acpi_event_status) 0x04 | 527 | #define ACPI_EVENT_FLAG_SET (acpi_event_status) 0x04 |
| 528 | #define ACPI_EVENT_FLAG_HANDLE (acpi_event_status) 0x08 | ||
| 528 | 529 | ||
| 529 | /* | 530 | /* |
| 530 | * General Purpose Events (GPE) | 531 | * General Purpose Events (GPE) |
diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h index 4ec0a296bdec..7abdaa91ccd3 100644 --- a/include/asm-generic/atomic.h +++ b/include/asm-generic/atomic.h | |||
| @@ -251,7 +251,7 @@ static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) | |||
| 251 | #define atomic_long_cmpxchg(l, old, new) \ | 251 | #define atomic_long_cmpxchg(l, old, new) \ |
| 252 | (atomic_cmpxchg((atomic_t *)(l), (old), (new))) | 252 | (atomic_cmpxchg((atomic_t *)(l), (old), (new))) |
| 253 | #define atomic_long_xchg(v, new) \ | 253 | #define atomic_long_xchg(v, new) \ |
| 254 | (atomic_xchg((atomic_t *)(l), (new))) | 254 | (atomic_xchg((atomic_t *)(v), (new))) |
| 255 | 255 | ||
| 256 | #endif /* BITS_PER_LONG == 64 */ | 256 | #endif /* BITS_PER_LONG == 64 */ |
| 257 | 257 | ||
diff --git a/include/asm-generic/audit_write.h b/include/asm-generic/audit_write.h index f10d367fb2a5..c5f1c2c920e2 100644 --- a/include/asm-generic/audit_write.h +++ b/include/asm-generic/audit_write.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #include <asm-generic/audit_dir_write.h> | 1 | #include <asm-generic/audit_dir_write.h> |
| 2 | __NR_acct, | 2 | __NR_acct, |
| 3 | #ifdef __NR_swapon | ||
| 3 | __NR_swapon, | 4 | __NR_swapon, |
| 5 | #endif | ||
| 4 | __NR_quotactl, | 6 | __NR_quotactl, |
| 5 | __NR_truncate, | 7 | __NR_truncate, |
| 6 | #ifdef __NR_truncate64 | 8 | #ifdef __NR_truncate64 |
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 80744606bad1..eba835a2c2cd 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
| @@ -45,6 +45,22 @@ | |||
| 45 | #define MCOUNT_REC() | 45 | #define MCOUNT_REC() |
| 46 | #endif | 46 | #endif |
| 47 | 47 | ||
| 48 | #ifdef CONFIG_TRACE_BRANCH_PROFILING | ||
| 49 | #define LIKELY_PROFILE() VMLINUX_SYMBOL(__start_annotated_branch_profile) = .; \ | ||
| 50 | *(_ftrace_annotated_branch) \ | ||
| 51 | VMLINUX_SYMBOL(__stop_annotated_branch_profile) = .; | ||
| 52 | #else | ||
| 53 | #define LIKELY_PROFILE() | ||
| 54 | #endif | ||
| 55 | |||
| 56 | #ifdef CONFIG_PROFILE_ALL_BRANCHES | ||
| 57 | #define BRANCH_PROFILE() VMLINUX_SYMBOL(__start_branch_profile) = .; \ | ||
| 58 | *(_ftrace_branch) \ | ||
| 59 | VMLINUX_SYMBOL(__stop_branch_profile) = .; | ||
| 60 | #else | ||
| 61 | #define BRANCH_PROFILE() | ||
| 62 | #endif | ||
| 63 | |||
| 48 | /* .data section */ | 64 | /* .data section */ |
| 49 | #define DATA_DATA \ | 65 | #define DATA_DATA \ |
| 50 | *(.data) \ | 66 | *(.data) \ |
| @@ -60,9 +76,12 @@ | |||
| 60 | VMLINUX_SYMBOL(__start___markers) = .; \ | 76 | VMLINUX_SYMBOL(__start___markers) = .; \ |
| 61 | *(__markers) \ | 77 | *(__markers) \ |
| 62 | VMLINUX_SYMBOL(__stop___markers) = .; \ | 78 | VMLINUX_SYMBOL(__stop___markers) = .; \ |
| 79 | . = ALIGN(32); \ | ||
| 63 | VMLINUX_SYMBOL(__start___tracepoints) = .; \ | 80 | VMLINUX_SYMBOL(__start___tracepoints) = .; \ |
| 64 | *(__tracepoints) \ | 81 | *(__tracepoints) \ |
| 65 | VMLINUX_SYMBOL(__stop___tracepoints) = .; | 82 | VMLINUX_SYMBOL(__stop___tracepoints) = .; \ |
| 83 | LIKELY_PROFILE() \ | ||
| 84 | BRANCH_PROFILE() | ||
| 66 | 85 | ||
| 67 | #define RO_DATA(align) \ | 86 | #define RO_DATA(align) \ |
| 68 | . = ALIGN((align)); \ | 87 | . = ALIGN((align)); \ |
diff --git a/include/asm-m32r/system.h b/include/asm-m32r/system.h index 70a57c8c002b..c980f5ba8de7 100644 --- a/include/asm-m32r/system.h +++ b/include/asm-m32r/system.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | */ | 23 | */ |
| 24 | 24 | ||
| 25 | #if defined(CONFIG_FRAME_POINTER) || \ | 25 | #if defined(CONFIG_FRAME_POINTER) || \ |
| 26 | !defined(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER) | 26 | !defined(CONFIG_SCHED_OMIT_FRAME_POINTER) |
| 27 | #define M32R_PUSH_FP " push fp\n" | 27 | #define M32R_PUSH_FP " push fp\n" |
| 28 | #define M32R_POP_FP " pop fp\n" | 28 | #define M32R_POP_FP " pop fp\n" |
| 29 | #else | 29 | #else |
diff --git a/include/asm-mn10300/uaccess.h b/include/asm-mn10300/uaccess.h index 46b9b647f3c3..8a3a4dd55763 100644 --- a/include/asm-mn10300/uaccess.h +++ b/include/asm-mn10300/uaccess.h | |||
| @@ -266,7 +266,7 @@ extern int __get_user_unknown(void); | |||
| 266 | " .section .fixup,\"ax\" \n" \ | 266 | " .section .fixup,\"ax\" \n" \ |
| 267 | "4: \n" \ | 267 | "4: \n" \ |
| 268 | " mov %5,%0 \n" \ | 268 | " mov %5,%0 \n" \ |
| 269 | " jmp 2b \n" \ | 269 | " jmp 3b \n" \ |
| 270 | " .previous \n" \ | 270 | " .previous \n" \ |
| 271 | " .section __ex_table,\"a\"\n" \ | 271 | " .section __ex_table,\"a\"\n" \ |
| 272 | " .balign 4 \n" \ | 272 | " .balign 4 \n" \ |
diff --git a/include/asm-x86/iomap.h b/include/asm-x86/iomap.h deleted file mode 100644 index c1f06289b14b..000000000000 --- a/include/asm-x86/iomap.h +++ /dev/null | |||
| @@ -1,30 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright © 2008 Ingo Molnar | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, but | ||
| 10 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 12 | * General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License along | ||
| 15 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 16 | * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <linux/fs.h> | ||
| 20 | #include <linux/mm.h> | ||
| 21 | #include <linux/uaccess.h> | ||
| 22 | #include <asm/cacheflush.h> | ||
| 23 | #include <asm/pgtable.h> | ||
| 24 | #include <asm/tlbflush.h> | ||
| 25 | |||
| 26 | void * | ||
| 27 | iomap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot); | ||
| 28 | |||
| 29 | void | ||
| 30 | iounmap_atomic(void *kvaddr, enum km_type type); | ||
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 59c796b46ee7..d5e8e5c89548 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
| @@ -861,8 +861,6 @@ struct drm_device { | |||
| 861 | struct timer_list vblank_disable_timer; | 861 | struct timer_list vblank_disable_timer; |
| 862 | 862 | ||
| 863 | u32 max_vblank_count; /**< size of vblank counter register */ | 863 | u32 max_vblank_count; /**< size of vblank counter register */ |
| 864 | spinlock_t tasklet_lock; /**< For drm_locked_tasklet */ | ||
| 865 | void (*locked_tasklet_func)(struct drm_device *dev); | ||
| 866 | 864 | ||
| 867 | /*@} */ | 865 | /*@} */ |
| 868 | cycles_t ctx_start; | 866 | cycles_t ctx_start; |
| @@ -1149,16 +1147,14 @@ extern int drm_vblank_init(struct drm_device *dev, int num_crtcs); | |||
| 1149 | extern int drm_wait_vblank(struct drm_device *dev, void *data, | 1147 | extern int drm_wait_vblank(struct drm_device *dev, void *data, |
| 1150 | struct drm_file *filp); | 1148 | struct drm_file *filp); |
| 1151 | extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq); | 1149 | extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq); |
| 1152 | extern void drm_locked_tasklet(struct drm_device *dev, | ||
| 1153 | void(*func)(struct drm_device *)); | ||
| 1154 | extern u32 drm_vblank_count(struct drm_device *dev, int crtc); | 1150 | extern u32 drm_vblank_count(struct drm_device *dev, int crtc); |
| 1155 | extern void drm_handle_vblank(struct drm_device *dev, int crtc); | 1151 | extern void drm_handle_vblank(struct drm_device *dev, int crtc); |
| 1156 | extern int drm_vblank_get(struct drm_device *dev, int crtc); | 1152 | extern int drm_vblank_get(struct drm_device *dev, int crtc); |
| 1157 | extern void drm_vblank_put(struct drm_device *dev, int crtc); | 1153 | extern void drm_vblank_put(struct drm_device *dev, int crtc); |
| 1154 | extern void drm_vblank_cleanup(struct drm_device *dev); | ||
| 1158 | /* Modesetting support */ | 1155 | /* Modesetting support */ |
| 1159 | extern int drm_modeset_ctl(struct drm_device *dev, void *data, | 1156 | extern int drm_modeset_ctl(struct drm_device *dev, void *data, |
| 1160 | struct drm_file *file_priv); | 1157 | struct drm_file *file_priv); |
| 1161 | extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device*)); | ||
| 1162 | 1158 | ||
| 1163 | /* AGP/GART support (drm_agpsupport.h) */ | 1159 | /* AGP/GART support (drm_agpsupport.h) */ |
| 1164 | extern struct drm_agp_head *drm_agp_init(struct drm_device *dev); | 1160 | extern struct drm_agp_head *drm_agp_init(struct drm_device *dev); |
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h index da04109741e8..5165f240aa68 100644 --- a/include/drm/drm_pciids.h +++ b/include/drm/drm_pciids.h | |||
| @@ -395,27 +395,27 @@ | |||
| 395 | {0, 0, 0} | 395 | {0, 0, 0} |
| 396 | 396 | ||
| 397 | #define i915_PCI_IDS \ | 397 | #define i915_PCI_IDS \ |
| 398 | {0x8086, 0x3577, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 398 | {0x8086, 0x3577, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 399 | {0x8086, 0x2562, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 399 | {0x8086, 0x2562, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 400 | {0x8086, 0x3582, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 400 | {0x8086, 0x3582, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 401 | {0x8086, 0x2572, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 401 | {0x8086, 0x2572, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 402 | {0x8086, 0x2582, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 402 | {0x8086, 0x2582, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 403 | {0x8086, 0x258a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 403 | {0x8086, 0x258a, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 404 | {0x8086, 0x2592, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 404 | {0x8086, 0x2592, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 405 | {0x8086, 0x2772, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 405 | {0x8086, 0x2772, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 406 | {0x8086, 0x27a2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 406 | {0x8086, 0x27a2, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 407 | {0x8086, 0x27ae, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 407 | {0x8086, 0x27ae, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 408 | {0x8086, 0x2972, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 408 | {0x8086, 0x2972, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 409 | {0x8086, 0x2982, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 409 | {0x8086, 0x2982, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 410 | {0x8086, 0x2992, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 410 | {0x8086, 0x2992, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 411 | {0x8086, 0x29a2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 411 | {0x8086, 0x29a2, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 412 | {0x8086, 0x29b2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 412 | {0x8086, 0x29b2, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 413 | {0x8086, 0x29c2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 413 | {0x8086, 0x29c2, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 414 | {0x8086, 0x29d2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 414 | {0x8086, 0x29d2, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 415 | {0x8086, 0x2a02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 415 | {0x8086, 0x2a02, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 416 | {0x8086, 0x2a12, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 416 | {0x8086, 0x2a12, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 417 | {0x8086, 0x2a42, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 417 | {0x8086, 0x2a42, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 418 | {0x8086, 0x2e02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 418 | {0x8086, 0x2e02, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 419 | {0x8086, 0x2e12, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 419 | {0x8086, 0x2e12, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 420 | {0x8086, 0x2e22, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 420 | {0x8086, 0x2e22, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ |
| 421 | {0, 0, 0} | 421 | {0, 0, 0} |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index e531783e5d78..95ac82340c3b 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
| @@ -313,6 +313,7 @@ unifdef-y += ptrace.h | |||
| 313 | unifdef-y += qnx4_fs.h | 313 | unifdef-y += qnx4_fs.h |
| 314 | unifdef-y += quota.h | 314 | unifdef-y += quota.h |
| 315 | unifdef-y += random.h | 315 | unifdef-y += random.h |
| 316 | unifdef-y += irqnr.h | ||
| 316 | unifdef-y += reboot.h | 317 | unifdef-y += reboot.h |
| 317 | unifdef-y += reiserfs_fs.h | 318 | unifdef-y += reiserfs_fs.h |
| 318 | unifdef-y += reiserfs_xattr.h | 319 | unifdef-y += reiserfs_xattr.h |
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index fd6a452b0ceb..fba8051fb297 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
| @@ -163,8 +163,6 @@ struct acpi_pci_driver { | |||
| 163 | int acpi_pci_register_driver(struct acpi_pci_driver *driver); | 163 | int acpi_pci_register_driver(struct acpi_pci_driver *driver); |
| 164 | void acpi_pci_unregister_driver(struct acpi_pci_driver *driver); | 164 | void acpi_pci_unregister_driver(struct acpi_pci_driver *driver); |
| 165 | 165 | ||
| 166 | #ifdef CONFIG_ACPI_EC | ||
| 167 | |||
| 168 | extern int ec_read(u8 addr, u8 *val); | 166 | extern int ec_read(u8 addr, u8 *val); |
| 169 | extern int ec_write(u8 addr, u8 val); | 167 | extern int ec_write(u8 addr, u8 val); |
| 170 | extern int ec_transaction(u8 command, | 168 | extern int ec_transaction(u8 command, |
| @@ -172,8 +170,6 @@ extern int ec_transaction(u8 command, | |||
| 172 | u8 *rdata, unsigned rdata_len, | 170 | u8 *rdata, unsigned rdata_len, |
| 173 | int force_poll); | 171 | int force_poll); |
| 174 | 172 | ||
| 175 | #endif /*CONFIG_ACPI_EC*/ | ||
| 176 | |||
| 177 | #if defined(CONFIG_ACPI_WMI) || defined(CONFIG_ACPI_WMI_MODULE) | 173 | #if defined(CONFIG_ACPI_WMI) || defined(CONFIG_ACPI_WMI_MODULE) |
| 178 | 174 | ||
| 179 | typedef void (*wmi_notify_handler) (u32 value, void *context); | 175 | typedef void (*wmi_notify_handler) (u32 value, void *context); |
| @@ -194,6 +190,50 @@ extern bool wmi_has_guid(const char *guid); | |||
| 194 | 190 | ||
| 195 | #endif /* CONFIG_ACPI_WMI */ | 191 | #endif /* CONFIG_ACPI_WMI */ |
| 196 | 192 | ||
| 193 | #define ACPI_VIDEO_OUTPUT_SWITCHING 0x0001 | ||
| 194 | #define ACPI_VIDEO_DEVICE_POSTING 0x0002 | ||
| 195 | #define ACPI_VIDEO_ROM_AVAILABLE 0x0004 | ||
| 196 | #define ACPI_VIDEO_BACKLIGHT 0x0008 | ||
| 197 | #define ACPI_VIDEO_BACKLIGHT_FORCE_VENDOR 0x0010 | ||
| 198 | #define ACPI_VIDEO_BACKLIGHT_FORCE_VIDEO 0x0020 | ||
| 199 | #define ACPI_VIDEO_OUTPUT_SWITCHING_FORCE_VENDOR 0x0040 | ||
| 200 | #define ACPI_VIDEO_OUTPUT_SWITCHING_FORCE_VIDEO 0x0080 | ||
| 201 | #define ACPI_VIDEO_BACKLIGHT_DMI_VENDOR 0x0100 | ||
| 202 | #define ACPI_VIDEO_BACKLIGHT_DMI_VIDEO 0x0200 | ||
| 203 | #define ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VENDOR 0x0400 | ||
| 204 | #define ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VIDEO 0x0800 | ||
| 205 | |||
| 206 | #if defined(CONFIG_ACPI_VIDEO) || defined(CONFIG_ACPI_VIDEO_MODULE) | ||
| 207 | |||
| 208 | extern long acpi_video_get_capabilities(acpi_handle graphics_dev_handle); | ||
| 209 | extern long acpi_is_video_device(struct acpi_device *device); | ||
| 210 | extern int acpi_video_backlight_support(void); | ||
| 211 | extern int acpi_video_display_switch_support(void); | ||
| 212 | |||
| 213 | #else | ||
| 214 | |||
| 215 | static inline long acpi_video_get_capabilities(acpi_handle graphics_dev_handle) | ||
| 216 | { | ||
| 217 | return 0; | ||
| 218 | } | ||
| 219 | |||
| 220 | static inline long acpi_is_video_device(struct acpi_device *device) | ||
| 221 | { | ||
| 222 | return 0; | ||
| 223 | } | ||
| 224 | |||
| 225 | static inline int acpi_video_backlight_support(void) | ||
| 226 | { | ||
| 227 | return 0; | ||
| 228 | } | ||
| 229 | |||
| 230 | static inline int acpi_video_display_switch_support(void) | ||
| 231 | { | ||
| 232 | return 0; | ||
| 233 | } | ||
| 234 | |||
| 235 | #endif /* defined(CONFIG_ACPI_VIDEO) || defined(CONFIG_ACPI_VIDEO_MODULE) */ | ||
| 236 | |||
| 197 | extern int acpi_blacklisted(void); | 237 | extern int acpi_blacklisted(void); |
| 198 | #ifdef CONFIG_DMI | 238 | #ifdef CONFIG_DMI |
| 199 | extern void acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d); | 239 | extern void acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d); |
diff --git a/include/linux/audit.h b/include/linux/audit.h index 6272a395d43c..8f0672d13eb1 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
| @@ -391,6 +391,7 @@ extern int audit_classify_arch(int arch); | |||
| 391 | #ifdef CONFIG_AUDITSYSCALL | 391 | #ifdef CONFIG_AUDITSYSCALL |
| 392 | /* These are defined in auditsc.c */ | 392 | /* These are defined in auditsc.c */ |
| 393 | /* Public API */ | 393 | /* Public API */ |
| 394 | extern void audit_finish_fork(struct task_struct *child); | ||
| 394 | extern int audit_alloc(struct task_struct *task); | 395 | extern int audit_alloc(struct task_struct *task); |
| 395 | extern void audit_free(struct task_struct *task); | 396 | extern void audit_free(struct task_struct *task); |
| 396 | extern void audit_syscall_entry(int arch, | 397 | extern void audit_syscall_entry(int arch, |
| @@ -434,7 +435,7 @@ static inline void audit_ptrace(struct task_struct *t) | |||
| 434 | 435 | ||
| 435 | /* Private API (for audit.c only) */ | 436 | /* Private API (for audit.c only) */ |
| 436 | extern unsigned int audit_serial(void); | 437 | extern unsigned int audit_serial(void); |
| 437 | extern void auditsc_get_stamp(struct audit_context *ctx, | 438 | extern int auditsc_get_stamp(struct audit_context *ctx, |
| 438 | struct timespec *t, unsigned int *serial); | 439 | struct timespec *t, unsigned int *serial); |
| 439 | extern int audit_set_loginuid(struct task_struct *task, uid_t loginuid); | 440 | extern int audit_set_loginuid(struct task_struct *task, uid_t loginuid); |
| 440 | #define audit_get_loginuid(t) ((t)->loginuid) | 441 | #define audit_get_loginuid(t) ((t)->loginuid) |
| @@ -504,6 +505,7 @@ static inline int audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) | |||
| 504 | extern int audit_n_rules; | 505 | extern int audit_n_rules; |
| 505 | extern int audit_signals; | 506 | extern int audit_signals; |
| 506 | #else | 507 | #else |
| 508 | #define audit_finish_fork(t) | ||
| 507 | #define audit_alloc(t) ({ 0; }) | 509 | #define audit_alloc(t) ({ 0; }) |
| 508 | #define audit_free(t) do { ; } while (0) | 510 | #define audit_free(t) do { ; } while (0) |
| 509 | #define audit_syscall_entry(ta,a,b,c,d,e) do { ; } while (0) | 511 | #define audit_syscall_entry(ta,a,b,c,d,e) do { ; } while (0) |
| @@ -516,7 +518,7 @@ extern int audit_signals; | |||
| 516 | #define audit_inode(n,d) do { ; } while (0) | 518 | #define audit_inode(n,d) do { ; } while (0) |
| 517 | #define audit_inode_child(d,i,p) do { ; } while (0) | 519 | #define audit_inode_child(d,i,p) do { ; } while (0) |
| 518 | #define audit_core_dumps(i) do { ; } while (0) | 520 | #define audit_core_dumps(i) do { ; } while (0) |
| 519 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) | 521 | #define auditsc_get_stamp(c,t,s) (0) |
| 520 | #define audit_get_loginuid(t) (-1) | 522 | #define audit_get_loginuid(t) (-1) |
| 521 | #define audit_get_sessionid(t) (-1) | 523 | #define audit_get_sessionid(t) (-1) |
| 522 | #define audit_log_task_context(b) do { ; } while (0) | 524 | #define audit_log_task_context(b) do { ; } while (0) |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index a135256b272c..031a315c0509 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -662,6 +662,7 @@ extern unsigned long blk_max_low_pfn, blk_max_pfn; | |||
| 662 | * default timeout for SG_IO if none specified | 662 | * default timeout for SG_IO if none specified |
| 663 | */ | 663 | */ |
| 664 | #define BLK_DEFAULT_SG_TIMEOUT (60 * HZ) | 664 | #define BLK_DEFAULT_SG_TIMEOUT (60 * HZ) |
| 665 | #define BLK_MIN_SG_TIMEOUT (7 * HZ) | ||
| 665 | 666 | ||
| 666 | #ifdef CONFIG_BOUNCE | 667 | #ifdef CONFIG_BOUNCE |
| 667 | extern int init_emergency_isa_pool(void); | 668 | extern int init_emergency_isa_pool(void); |
| @@ -786,6 +787,8 @@ static inline void blk_run_address_space(struct address_space *mapping) | |||
| 786 | blk_run_backing_dev(mapping->backing_dev_info, NULL); | 787 | blk_run_backing_dev(mapping->backing_dev_info, NULL); |
| 787 | } | 788 | } |
| 788 | 789 | ||
| 790 | extern void blkdev_dequeue_request(struct request *req); | ||
| 791 | |||
| 789 | /* | 792 | /* |
| 790 | * blk_end_request() and friends. | 793 | * blk_end_request() and friends. |
| 791 | * __blk_end_request() and end_request() must be called with | 794 | * __blk_end_request() and end_request() must be called with |
| @@ -820,11 +823,6 @@ extern void blk_update_request(struct request *rq, int error, | |||
| 820 | extern unsigned int blk_rq_bytes(struct request *rq); | 823 | extern unsigned int blk_rq_bytes(struct request *rq); |
| 821 | extern unsigned int blk_rq_cur_bytes(struct request *rq); | 824 | extern unsigned int blk_rq_cur_bytes(struct request *rq); |
| 822 | 825 | ||
| 823 | static inline void blkdev_dequeue_request(struct request *req) | ||
| 824 | { | ||
| 825 | elv_dequeue_request(req->q, req); | ||
| 826 | } | ||
| 827 | |||
| 828 | /* | 826 | /* |
| 829 | * Access functions for manipulating queue properties | 827 | * Access functions for manipulating queue properties |
| 830 | */ | 828 | */ |
| @@ -921,6 +919,8 @@ extern void blk_set_cmd_filter_defaults(struct blk_cmd_filter *filter); | |||
| 921 | 919 | ||
| 922 | #define MAX_SEGMENT_SIZE 65536 | 920 | #define MAX_SEGMENT_SIZE 65536 |
| 923 | 921 | ||
| 922 | #define BLK_SEG_BOUNDARY_MASK 0xFFFFFFFFUL | ||
| 923 | |||
| 924 | #define blkdev_entry_to_request(entry) list_entry((entry), struct request, queuelist) | 924 | #define blkdev_entry_to_request(entry) list_entry((entry), struct request, queuelist) |
| 925 | 925 | ||
| 926 | static inline int queue_hardsect_size(struct request_queue *q) | 926 | static inline int queue_hardsect_size(struct request_queue *q) |
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h index bdf505d33e77..1dba3493d520 100644 --- a/include/linux/blktrace_api.h +++ b/include/linux/blktrace_api.h | |||
| @@ -160,7 +160,6 @@ struct blk_trace { | |||
| 160 | 160 | ||
| 161 | extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *); | 161 | extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *); |
| 162 | extern void blk_trace_shutdown(struct request_queue *); | 162 | extern void blk_trace_shutdown(struct request_queue *); |
| 163 | extern void __blk_add_trace(struct blk_trace *, sector_t, int, int, u32, int, int, void *); | ||
| 164 | extern int do_blk_trace_setup(struct request_queue *q, | 163 | extern int do_blk_trace_setup(struct request_queue *q, |
| 165 | char *name, dev_t dev, struct blk_user_trace_setup *buts); | 164 | char *name, dev_t dev, struct blk_user_trace_setup *buts); |
| 166 | extern void __trace_note_message(struct blk_trace *, const char *fmt, ...); | 165 | extern void __trace_note_message(struct blk_trace *, const char *fmt, ...); |
| @@ -186,168 +185,8 @@ extern void __trace_note_message(struct blk_trace *, const char *fmt, ...); | |||
| 186 | } while (0) | 185 | } while (0) |
| 187 | #define BLK_TN_MAX_MSG 128 | 186 | #define BLK_TN_MAX_MSG 128 |
| 188 | 187 | ||
| 189 | /** | 188 | extern void blk_add_driver_data(struct request_queue *q, struct request *rq, |
| 190 | * blk_add_trace_rq - Add a trace for a request oriented action | 189 | void *data, size_t len); |
| 191 | * @q: queue the io is for | ||
| 192 | * @rq: the source request | ||
| 193 | * @what: the action | ||
| 194 | * | ||
| 195 | * Description: | ||
| 196 | * Records an action against a request. Will log the bio offset + size. | ||
| 197 | * | ||
| 198 | **/ | ||
| 199 | static inline void blk_add_trace_rq(struct request_queue *q, struct request *rq, | ||
| 200 | u32 what) | ||
| 201 | { | ||
| 202 | struct blk_trace *bt = q->blk_trace; | ||
| 203 | int rw = rq->cmd_flags & 0x03; | ||
| 204 | |||
| 205 | if (likely(!bt)) | ||
| 206 | return; | ||
| 207 | |||
| 208 | if (blk_discard_rq(rq)) | ||
| 209 | rw |= (1 << BIO_RW_DISCARD); | ||
| 210 | |||
| 211 | if (blk_pc_request(rq)) { | ||
| 212 | what |= BLK_TC_ACT(BLK_TC_PC); | ||
| 213 | __blk_add_trace(bt, 0, rq->data_len, rw, what, rq->errors, sizeof(rq->cmd), rq->cmd); | ||
| 214 | } else { | ||
| 215 | what |= BLK_TC_ACT(BLK_TC_FS); | ||
| 216 | __blk_add_trace(bt, rq->hard_sector, rq->hard_nr_sectors << 9, rw, what, rq->errors, 0, NULL); | ||
| 217 | } | ||
| 218 | } | ||
| 219 | |||
| 220 | /** | ||
| 221 | * blk_add_trace_bio - Add a trace for a bio oriented action | ||
| 222 | * @q: queue the io is for | ||
| 223 | * @bio: the source bio | ||
| 224 | * @what: the action | ||
| 225 | * | ||
| 226 | * Description: | ||
| 227 | * Records an action against a bio. Will log the bio offset + size. | ||
| 228 | * | ||
| 229 | **/ | ||
| 230 | static inline void blk_add_trace_bio(struct request_queue *q, struct bio *bio, | ||
| 231 | u32 what) | ||
| 232 | { | ||
| 233 | struct blk_trace *bt = q->blk_trace; | ||
| 234 | |||
| 235 | if (likely(!bt)) | ||
| 236 | return; | ||
| 237 | |||
| 238 | __blk_add_trace(bt, bio->bi_sector, bio->bi_size, bio->bi_rw, what, !bio_flagged(bio, BIO_UPTODATE), 0, NULL); | ||
| 239 | } | ||
| 240 | |||
| 241 | /** | ||
| 242 | * blk_add_trace_generic - Add a trace for a generic action | ||
| 243 | * @q: queue the io is for | ||
| 244 | * @bio: the source bio | ||
| 245 | * @rw: the data direction | ||
| 246 | * @what: the action | ||
| 247 | * | ||
| 248 | * Description: | ||
| 249 | * Records a simple trace | ||
| 250 | * | ||
| 251 | **/ | ||
| 252 | static inline void blk_add_trace_generic(struct request_queue *q, | ||
| 253 | struct bio *bio, int rw, u32 what) | ||
| 254 | { | ||
| 255 | struct blk_trace *bt = q->blk_trace; | ||
| 256 | |||
| 257 | if (likely(!bt)) | ||
| 258 | return; | ||
| 259 | |||
| 260 | if (bio) | ||
| 261 | blk_add_trace_bio(q, bio, what); | ||
| 262 | else | ||
| 263 | __blk_add_trace(bt, 0, 0, rw, what, 0, 0, NULL); | ||
| 264 | } | ||
| 265 | |||
| 266 | /** | ||
| 267 | * blk_add_trace_pdu_int - Add a trace for a bio with an integer payload | ||
| 268 | * @q: queue the io is for | ||
| 269 | * @what: the action | ||
| 270 | * @bio: the source bio | ||
| 271 | * @pdu: the integer payload | ||
| 272 | * | ||
| 273 | * Description: | ||
| 274 | * Adds a trace with some integer payload. This might be an unplug | ||
| 275 | * option given as the action, with the depth at unplug time given | ||
| 276 | * as the payload | ||
| 277 | * | ||
| 278 | **/ | ||
| 279 | static inline void blk_add_trace_pdu_int(struct request_queue *q, u32 what, | ||
| 280 | struct bio *bio, unsigned int pdu) | ||
| 281 | { | ||
| 282 | struct blk_trace *bt = q->blk_trace; | ||
| 283 | __be64 rpdu = cpu_to_be64(pdu); | ||
| 284 | |||
| 285 | if (likely(!bt)) | ||
| 286 | return; | ||
| 287 | |||
| 288 | if (bio) | ||
| 289 | __blk_add_trace(bt, bio->bi_sector, bio->bi_size, bio->bi_rw, what, !bio_flagged(bio, BIO_UPTODATE), sizeof(rpdu), &rpdu); | ||
| 290 | else | ||
| 291 | __blk_add_trace(bt, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu); | ||
| 292 | } | ||
| 293 | |||
| 294 | /** | ||
| 295 | * blk_add_trace_remap - Add a trace for a remap operation | ||
| 296 | * @q: queue the io is for | ||
| 297 | * @bio: the source bio | ||
| 298 | * @dev: target device | ||
| 299 | * @from: source sector | ||
| 300 | * @to: target sector | ||
| 301 | * | ||
| 302 | * Description: | ||
| 303 | * Device mapper or raid target sometimes need to split a bio because | ||
| 304 | * it spans a stripe (or similar). Add a trace for that action. | ||
| 305 | * | ||
| 306 | **/ | ||
| 307 | static inline void blk_add_trace_remap(struct request_queue *q, struct bio *bio, | ||
| 308 | dev_t dev, sector_t from, sector_t to) | ||
| 309 | { | ||
| 310 | struct blk_trace *bt = q->blk_trace; | ||
| 311 | struct blk_io_trace_remap r; | ||
| 312 | |||
| 313 | if (likely(!bt)) | ||
| 314 | return; | ||
| 315 | |||
| 316 | r.device = cpu_to_be32(dev); | ||
| 317 | r.device_from = cpu_to_be32(bio->bi_bdev->bd_dev); | ||
| 318 | r.sector = cpu_to_be64(to); | ||
| 319 | |||
| 320 | __blk_add_trace(bt, from, bio->bi_size, bio->bi_rw, BLK_TA_REMAP, !bio_flagged(bio, BIO_UPTODATE), sizeof(r), &r); | ||
| 321 | } | ||
| 322 | |||
| 323 | /** | ||
| 324 | * blk_add_driver_data - Add binary message with driver-specific data | ||
| 325 | * @q: queue the io is for | ||
| 326 | * @rq: io request | ||
| 327 | * @data: driver-specific data | ||
| 328 | * @len: length of driver-specific data | ||
| 329 | * | ||
| 330 | * Description: | ||
| 331 | * Some drivers might want to write driver-specific data per request. | ||
| 332 | * | ||
| 333 | **/ | ||
| 334 | static inline void blk_add_driver_data(struct request_queue *q, | ||
| 335 | struct request *rq, | ||
| 336 | void *data, size_t len) | ||
| 337 | { | ||
| 338 | struct blk_trace *bt = q->blk_trace; | ||
| 339 | |||
| 340 | if (likely(!bt)) | ||
| 341 | return; | ||
| 342 | |||
| 343 | if (blk_pc_request(rq)) | ||
| 344 | __blk_add_trace(bt, 0, rq->data_len, 0, BLK_TA_DRV_DATA, | ||
| 345 | rq->errors, len, data); | ||
| 346 | else | ||
| 347 | __blk_add_trace(bt, rq->hard_sector, rq->hard_nr_sectors << 9, | ||
| 348 | 0, BLK_TA_DRV_DATA, rq->errors, len, data); | ||
| 349 | } | ||
| 350 | |||
| 351 | extern int blk_trace_setup(struct request_queue *q, char *name, dev_t dev, | 190 | extern int blk_trace_setup(struct request_queue *q, char *name, dev_t dev, |
| 352 | char __user *arg); | 191 | char __user *arg); |
| 353 | extern int blk_trace_startstop(struct request_queue *q, int start); | 192 | extern int blk_trace_startstop(struct request_queue *q, int start); |
| @@ -356,13 +195,8 @@ extern int blk_trace_remove(struct request_queue *q); | |||
| 356 | #else /* !CONFIG_BLK_DEV_IO_TRACE */ | 195 | #else /* !CONFIG_BLK_DEV_IO_TRACE */ |
| 357 | #define blk_trace_ioctl(bdev, cmd, arg) (-ENOTTY) | 196 | #define blk_trace_ioctl(bdev, cmd, arg) (-ENOTTY) |
| 358 | #define blk_trace_shutdown(q) do { } while (0) | 197 | #define blk_trace_shutdown(q) do { } while (0) |
| 359 | #define blk_add_trace_rq(q, rq, what) do { } while (0) | ||
| 360 | #define blk_add_trace_bio(q, rq, what) do { } while (0) | ||
| 361 | #define blk_add_trace_generic(q, rq, rw, what) do { } while (0) | ||
| 362 | #define blk_add_trace_pdu_int(q, what, bio, pdu) do { } while (0) | ||
| 363 | #define blk_add_trace_remap(q, bio, dev, f, t) do {} while (0) | ||
| 364 | #define blk_add_driver_data(q, rq, data, len) do {} while (0) | ||
| 365 | #define do_blk_trace_setup(q, name, dev, buts) (-ENOTTY) | 198 | #define do_blk_trace_setup(q, name, dev, buts) (-ENOTTY) |
| 199 | #define blk_add_driver_data(q, rq, data, len) do {} while (0) | ||
| 366 | #define blk_trace_setup(q, name, dev, arg) (-ENOTTY) | 200 | #define blk_trace_setup(q, name, dev, arg) (-ENOTTY) |
| 367 | #define blk_trace_startstop(q, start) (-ENOTTY) | 201 | #define blk_trace_startstop(q, start) (-ENOTTY) |
| 368 | #define blk_trace_remove(q) (-ENOTTY) | 202 | #define blk_trace_remove(q) (-ENOTTY) |
diff --git a/include/linux/c2port.h b/include/linux/c2port.h new file mode 100644 index 000000000000..7b5a2388ba67 --- /dev/null +++ b/include/linux/c2port.h | |||
| @@ -0,0 +1,65 @@ | |||
| 1 | /* | ||
| 2 | * Silicon Labs C2 port Linux support | ||
| 3 | * | ||
| 4 | * Copyright (c) 2007 Rodolfo Giometti <giometti@linux.it> | ||
| 5 | * Copyright (c) 2007 Eurotech S.p.A. <info@eurotech.it> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License version 2 as published by | ||
| 9 | * the Free Software Foundation | ||
| 10 | */ | ||
| 11 | |||
| 12 | #include <linux/device.h> | ||
| 13 | |||
| 14 | #define C2PORT_NAME_LEN 32 | ||
| 15 | |||
| 16 | /* | ||
| 17 | * C2 port basic structs | ||
| 18 | */ | ||
| 19 | |||
| 20 | /* Main struct */ | ||
| 21 | struct c2port_ops; | ||
| 22 | struct c2port_device { | ||
| 23 | unsigned int access:1; | ||
| 24 | unsigned int flash_access:1; | ||
| 25 | |||
| 26 | int id; | ||
| 27 | char name[C2PORT_NAME_LEN]; | ||
| 28 | struct c2port_ops *ops; | ||
| 29 | struct mutex mutex; /* prevent races during read/write */ | ||
| 30 | |||
| 31 | struct device *dev; | ||
| 32 | |||
| 33 | void *private_data; | ||
| 34 | }; | ||
| 35 | |||
| 36 | /* Basic operations */ | ||
| 37 | struct c2port_ops { | ||
| 38 | /* Flash layout */ | ||
| 39 | unsigned short block_size; /* flash block size in bytes */ | ||
| 40 | unsigned short blocks_num; /* flash blocks number */ | ||
| 41 | |||
| 42 | /* Enable or disable the access to C2 port */ | ||
| 43 | void (*access)(struct c2port_device *dev, int status); | ||
| 44 | |||
| 45 | /* Set C2D data line as input/output */ | ||
| 46 | void (*c2d_dir)(struct c2port_device *dev, int dir); | ||
| 47 | |||
| 48 | /* Read/write C2D data line */ | ||
| 49 | int (*c2d_get)(struct c2port_device *dev); | ||
| 50 | void (*c2d_set)(struct c2port_device *dev, int status); | ||
| 51 | |||
| 52 | /* Write C2CK clock line */ | ||
| 53 | void (*c2ck_set)(struct c2port_device *dev, int status); | ||
| 54 | }; | ||
| 55 | |||
| 56 | /* | ||
| 57 | * Exported functions | ||
| 58 | */ | ||
| 59 | |||
| 60 | #define to_class_dev(obj) container_of((obj), struct class_device, kobj) | ||
| 61 | #define to_c2port_device(obj) container_of((obj), struct c2port_device, class) | ||
| 62 | |||
| 63 | extern struct c2port_device *c2port_device_register(char *name, | ||
| 64 | struct c2port_ops *ops, void *devdata); | ||
| 65 | extern void c2port_device_unregister(struct c2port_device *dev); | ||
diff --git a/include/linux/can/core.h b/include/linux/can/core.h index e9ca210ffa5b..f50785ad4781 100644 --- a/include/linux/can/core.h +++ b/include/linux/can/core.h | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | #include <linux/skbuff.h> | 19 | #include <linux/skbuff.h> |
| 20 | #include <linux/netdevice.h> | 20 | #include <linux/netdevice.h> |
| 21 | 21 | ||
| 22 | #define CAN_VERSION "20071116" | 22 | #define CAN_VERSION "20081130" |
| 23 | 23 | ||
| 24 | /* increment this number each time you change some user-space interface */ | 24 | /* increment this number each time you change some user-space interface */ |
| 25 | #define CAN_ABI_VERSION "8" | 25 | #define CAN_ABI_VERSION "8" |
diff --git a/include/linux/compat.h b/include/linux/compat.h index f061a1ea1b74..e88f3ecf38b4 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
| @@ -252,12 +252,10 @@ extern int compat_ptrace_request(struct task_struct *child, | |||
| 252 | compat_long_t request, | 252 | compat_long_t request, |
| 253 | compat_ulong_t addr, compat_ulong_t data); | 253 | compat_ulong_t addr, compat_ulong_t data); |
| 254 | 254 | ||
| 255 | #ifdef __ARCH_WANT_COMPAT_SYS_PTRACE | ||
| 256 | extern long compat_arch_ptrace(struct task_struct *child, compat_long_t request, | 255 | extern long compat_arch_ptrace(struct task_struct *child, compat_long_t request, |
| 257 | compat_ulong_t addr, compat_ulong_t data); | 256 | compat_ulong_t addr, compat_ulong_t data); |
| 258 | asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid, | 257 | asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid, |
| 259 | compat_long_t addr, compat_long_t data); | 258 | compat_long_t addr, compat_long_t data); |
| 260 | #endif /* __ARCH_WANT_COMPAT_SYS_PTRACE */ | ||
| 261 | 259 | ||
| 262 | /* | 260 | /* |
| 263 | * epoll (fs/eventpoll.c) compat bits follow ... | 261 | * epoll (fs/eventpoll.c) compat bits follow ... |
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 98115d9d04da..ea7c6be354b7 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
| @@ -59,8 +59,88 @@ extern void __chk_io_ptr(const volatile void __iomem *); | |||
| 59 | * specific implementations come from the above header files | 59 | * specific implementations come from the above header files |
| 60 | */ | 60 | */ |
| 61 | 61 | ||
| 62 | #define likely(x) __builtin_expect(!!(x), 1) | 62 | struct ftrace_branch_data { |
| 63 | #define unlikely(x) __builtin_expect(!!(x), 0) | 63 | const char *func; |
| 64 | const char *file; | ||
| 65 | unsigned line; | ||
| 66 | union { | ||
| 67 | struct { | ||
| 68 | unsigned long correct; | ||
| 69 | unsigned long incorrect; | ||
| 70 | }; | ||
| 71 | struct { | ||
| 72 | unsigned long miss; | ||
| 73 | unsigned long hit; | ||
| 74 | }; | ||
| 75 | }; | ||
| 76 | }; | ||
| 77 | |||
| 78 | /* | ||
| 79 | * Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code | ||
| 80 | * to disable branch tracing on a per file basis. | ||
| 81 | */ | ||
| 82 | #if defined(CONFIG_TRACE_BRANCH_PROFILING) && !defined(DISABLE_BRANCH_PROFILING) | ||
| 83 | void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); | ||
| 84 | |||
| 85 | #define likely_notrace(x) __builtin_expect(!!(x), 1) | ||
| 86 | #define unlikely_notrace(x) __builtin_expect(!!(x), 0) | ||
| 87 | |||
| 88 | #define __branch_check__(x, expect) ({ \ | ||
| 89 | int ______r; \ | ||
| 90 | static struct ftrace_branch_data \ | ||
| 91 | __attribute__((__aligned__(4))) \ | ||
| 92 | __attribute__((section("_ftrace_annotated_branch"))) \ | ||
| 93 | ______f = { \ | ||
| 94 | .func = __func__, \ | ||
| 95 | .file = __FILE__, \ | ||
| 96 | .line = __LINE__, \ | ||
| 97 | }; \ | ||
| 98 | ______r = likely_notrace(x); \ | ||
| 99 | ftrace_likely_update(&______f, ______r, expect); \ | ||
| 100 | ______r; \ | ||
| 101 | }) | ||
| 102 | |||
| 103 | /* | ||
| 104 | * Using __builtin_constant_p(x) to ignore cases where the return | ||
| 105 | * value is always the same. This idea is taken from a similar patch | ||
| 106 | * written by Daniel Walker. | ||
| 107 | */ | ||
| 108 | # ifndef likely | ||
| 109 | # define likely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1)) | ||
| 110 | # endif | ||
| 111 | # ifndef unlikely | ||
| 112 | # define unlikely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 0)) | ||
| 113 | # endif | ||
| 114 | |||
| 115 | #ifdef CONFIG_PROFILE_ALL_BRANCHES | ||
| 116 | /* | ||
| 117 | * "Define 'is'", Bill Clinton | ||
| 118 | * "Define 'if'", Steven Rostedt | ||
| 119 | */ | ||
| 120 | #define if(cond) if (__builtin_constant_p((cond)) ? !!(cond) : \ | ||
| 121 | ({ \ | ||
| 122 | int ______r; \ | ||
| 123 | static struct ftrace_branch_data \ | ||
| 124 | __attribute__((__aligned__(4))) \ | ||
| 125 | __attribute__((section("_ftrace_branch"))) \ | ||
| 126 | ______f = { \ | ||
| 127 | .func = __func__, \ | ||
| 128 | .file = __FILE__, \ | ||
| 129 | .line = __LINE__, \ | ||
| 130 | }; \ | ||
| 131 | ______r = !!(cond); \ | ||
| 132 | if (______r) \ | ||
| 133 | ______f.hit++; \ | ||
| 134 | else \ | ||
| 135 | ______f.miss++; \ | ||
| 136 | ______r; \ | ||
| 137 | })) | ||
| 138 | #endif /* CONFIG_PROFILE_ALL_BRANCHES */ | ||
| 139 | |||
| 140 | #else | ||
| 141 | # define likely(x) __builtin_expect(!!(x), 1) | ||
| 142 | # define unlikely(x) __builtin_expect(!!(x), 0) | ||
| 143 | #endif | ||
| 64 | 144 | ||
| 65 | /* Optimization barrier */ | 145 | /* Optimization barrier */ |
| 66 | #ifndef barrier | 146 | #ifndef barrier |
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index 2691926fb506..8e540d32c9fe 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h | |||
| @@ -74,8 +74,6 @@ static inline int cpuset_do_slab_mem_spread(void) | |||
| 74 | return current->flags & PF_SPREAD_SLAB; | 74 | return current->flags & PF_SPREAD_SLAB; |
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | extern void cpuset_track_online_nodes(void); | ||
| 78 | |||
| 79 | extern int current_cpuset_is_being_rebound(void); | 77 | extern int current_cpuset_is_being_rebound(void); |
| 80 | 78 | ||
| 81 | extern void rebuild_sched_domains(void); | 79 | extern void rebuild_sched_domains(void); |
| @@ -151,8 +149,6 @@ static inline int cpuset_do_slab_mem_spread(void) | |||
| 151 | return 0; | 149 | return 0; |
| 152 | } | 150 | } |
| 153 | 151 | ||
| 154 | static inline void cpuset_track_online_nodes(void) {} | ||
| 155 | |||
| 156 | static inline int current_cpuset_is_being_rebound(void) | 152 | static inline int current_cpuset_is_being_rebound(void) |
| 157 | { | 153 | { |
| 158 | return 0; | 154 | return 0; |
diff --git a/include/linux/debug_locks.h b/include/linux/debug_locks.h index 4aaa4afb1cb9..096476f1fb35 100644 --- a/include/linux/debug_locks.h +++ b/include/linux/debug_locks.h | |||
| @@ -17,7 +17,7 @@ extern int debug_locks_off(void); | |||
| 17 | ({ \ | 17 | ({ \ |
| 18 | int __ret = 0; \ | 18 | int __ret = 0; \ |
| 19 | \ | 19 | \ |
| 20 | if (unlikely(c)) { \ | 20 | if (!oops_in_progress && unlikely(c)) { \ |
| 21 | if (debug_locks_off() && !debug_locks_silent) \ | 21 | if (debug_locks_off() && !debug_locks_silent) \ |
| 22 | WARN_ON(1); \ | 22 | WARN_ON(1); \ |
| 23 | __ret = 1; \ | 23 | __ret = 1; \ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 0dcdd9458f4b..4a853ef6fd35 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -63,23 +63,24 @@ extern int dir_notify_enable; | |||
| 63 | #define MAY_ACCESS 16 | 63 | #define MAY_ACCESS 16 |
| 64 | #define MAY_OPEN 32 | 64 | #define MAY_OPEN 32 |
| 65 | 65 | ||
| 66 | #define FMODE_READ ((__force fmode_t)1) | 66 | /* file is open for reading */ |
| 67 | #define FMODE_WRITE ((__force fmode_t)2) | 67 | #define FMODE_READ ((__force fmode_t)1) |
| 68 | 68 | /* file is open for writing */ | |
| 69 | /* Internal kernel extensions */ | 69 | #define FMODE_WRITE ((__force fmode_t)2) |
| 70 | #define FMODE_LSEEK ((__force fmode_t)4) | 70 | /* file is seekable */ |
| 71 | #define FMODE_PREAD ((__force fmode_t)8) | 71 | #define FMODE_LSEEK ((__force fmode_t)4) |
| 72 | #define FMODE_PWRITE FMODE_PREAD /* These go hand in hand */ | 72 | /* file can be accessed using pread/pwrite */ |
| 73 | 73 | #define FMODE_PREAD ((__force fmode_t)8) | |
| 74 | /* File is being opened for execution. Primary users of this flag are | 74 | #define FMODE_PWRITE FMODE_PREAD /* These go hand in hand */ |
| 75 | distributed filesystems that can use it to achieve correct ETXTBUSY | 75 | /* File is opened for execution with sys_execve / sys_uselib */ |
| 76 | behavior for cross-node execution/opening_for_writing of files */ | 76 | #define FMODE_EXEC ((__force fmode_t)16) |
| 77 | #define FMODE_EXEC ((__force fmode_t)16) | 77 | /* File is opened with O_NDELAY (only set for block devices) */ |
| 78 | 78 | #define FMODE_NDELAY ((__force fmode_t)32) | |
| 79 | #define FMODE_NDELAY ((__force fmode_t)32) | 79 | /* File is opened with O_EXCL (only set for block devices) */ |
| 80 | #define FMODE_EXCL ((__force fmode_t)64) | 80 | #define FMODE_EXCL ((__force fmode_t)64) |
| 81 | /* File is opened using open(.., 3, ..) and is writeable only for ioctls | ||
| 82 | (specialy hack for floppy.c) */ | ||
| 81 | #define FMODE_WRITE_IOCTL ((__force fmode_t)128) | 83 | #define FMODE_WRITE_IOCTL ((__force fmode_t)128) |
| 82 | #define FMODE_NDELAY_NOW ((__force fmode_t)256) | ||
| 83 | 84 | ||
| 84 | #define RW_MASK 1 | 85 | #define RW_MASK 1 |
| 85 | #define RWA_MASK 2 | 86 | #define RWA_MASK 2 |
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index 703eb53cfa2b..985b28dc2ba9 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h | |||
| @@ -6,7 +6,10 @@ | |||
| 6 | #include <linux/ktime.h> | 6 | #include <linux/ktime.h> |
| 7 | #include <linux/init.h> | 7 | #include <linux/init.h> |
| 8 | #include <linux/types.h> | 8 | #include <linux/types.h> |
| 9 | #include <linux/module.h> | ||
| 9 | #include <linux/kallsyms.h> | 10 | #include <linux/kallsyms.h> |
| 11 | #include <linux/bitops.h> | ||
| 12 | #include <linux/sched.h> | ||
| 10 | 13 | ||
| 11 | #ifdef CONFIG_FUNCTION_TRACER | 14 | #ifdef CONFIG_FUNCTION_TRACER |
| 12 | 15 | ||
| @@ -23,6 +26,45 @@ struct ftrace_ops { | |||
| 23 | struct ftrace_ops *next; | 26 | struct ftrace_ops *next; |
| 24 | }; | 27 | }; |
| 25 | 28 | ||
| 29 | extern int function_trace_stop; | ||
| 30 | |||
| 31 | /* | ||
| 32 | * Type of the current tracing. | ||
| 33 | */ | ||
| 34 | enum ftrace_tracing_type_t { | ||
| 35 | FTRACE_TYPE_ENTER = 0, /* Hook the call of the function */ | ||
| 36 | FTRACE_TYPE_RETURN, /* Hook the return of the function */ | ||
| 37 | }; | ||
| 38 | |||
| 39 | /* Current tracing type, default is FTRACE_TYPE_ENTER */ | ||
| 40 | extern enum ftrace_tracing_type_t ftrace_tracing_type; | ||
| 41 | |||
| 42 | /** | ||
| 43 | * ftrace_stop - stop function tracer. | ||
| 44 | * | ||
| 45 | * A quick way to stop the function tracer. Note this an on off switch, | ||
| 46 | * it is not something that is recursive like preempt_disable. | ||
| 47 | * This does not disable the calling of mcount, it only stops the | ||
| 48 | * calling of functions from mcount. | ||
| 49 | */ | ||
| 50 | static inline void ftrace_stop(void) | ||
| 51 | { | ||
| 52 | function_trace_stop = 1; | ||
| 53 | } | ||
| 54 | |||
| 55 | /** | ||
| 56 | * ftrace_start - start the function tracer. | ||
| 57 | * | ||
| 58 | * This function is the inverse of ftrace_stop. This does not enable | ||
| 59 | * the function tracing if the function tracer is disabled. This only | ||
| 60 | * sets the function tracer flag to continue calling the functions | ||
| 61 | * from mcount. | ||
| 62 | */ | ||
| 63 | static inline void ftrace_start(void) | ||
| 64 | { | ||
| 65 | function_trace_stop = 0; | ||
| 66 | } | ||
| 67 | |||
| 26 | /* | 68 | /* |
| 27 | * The ftrace_ops must be a static and should also | 69 | * The ftrace_ops must be a static and should also |
| 28 | * be read_mostly. These functions do modify read_mostly variables | 70 | * be read_mostly. These functions do modify read_mostly variables |
| @@ -41,9 +83,13 @@ extern void ftrace_stub(unsigned long a0, unsigned long a1); | |||
| 41 | # define unregister_ftrace_function(ops) do { } while (0) | 83 | # define unregister_ftrace_function(ops) do { } while (0) |
| 42 | # define clear_ftrace_function(ops) do { } while (0) | 84 | # define clear_ftrace_function(ops) do { } while (0) |
| 43 | static inline void ftrace_kill(void) { } | 85 | static inline void ftrace_kill(void) { } |
| 86 | static inline void ftrace_stop(void) { } | ||
| 87 | static inline void ftrace_start(void) { } | ||
| 44 | #endif /* CONFIG_FUNCTION_TRACER */ | 88 | #endif /* CONFIG_FUNCTION_TRACER */ |
| 45 | 89 | ||
| 46 | #ifdef CONFIG_DYNAMIC_FTRACE | 90 | #ifdef CONFIG_DYNAMIC_FTRACE |
| 91 | /* asm/ftrace.h must be defined for archs supporting dynamic ftrace */ | ||
| 92 | #include <asm/ftrace.h> | ||
| 47 | 93 | ||
| 48 | enum { | 94 | enum { |
| 49 | FTRACE_FL_FREE = (1 << 0), | 95 | FTRACE_FL_FREE = (1 << 0), |
| @@ -59,6 +105,7 @@ struct dyn_ftrace { | |||
| 59 | struct list_head list; | 105 | struct list_head list; |
| 60 | unsigned long ip; /* address of mcount call-site */ | 106 | unsigned long ip; /* address of mcount call-site */ |
| 61 | unsigned long flags; | 107 | unsigned long flags; |
| 108 | struct dyn_arch_ftrace arch; | ||
| 62 | }; | 109 | }; |
| 63 | 110 | ||
| 64 | int ftrace_force_update(void); | 111 | int ftrace_force_update(void); |
| @@ -66,19 +113,25 @@ void ftrace_set_filter(unsigned char *buf, int len, int reset); | |||
| 66 | 113 | ||
| 67 | /* defined in arch */ | 114 | /* defined in arch */ |
| 68 | extern int ftrace_ip_converted(unsigned long ip); | 115 | extern int ftrace_ip_converted(unsigned long ip); |
| 69 | extern unsigned char *ftrace_nop_replace(void); | ||
| 70 | extern unsigned char *ftrace_call_replace(unsigned long ip, unsigned long addr); | ||
| 71 | extern int ftrace_dyn_arch_init(void *data); | 116 | extern int ftrace_dyn_arch_init(void *data); |
| 72 | extern int ftrace_update_ftrace_func(ftrace_func_t func); | 117 | extern int ftrace_update_ftrace_func(ftrace_func_t func); |
| 73 | extern void ftrace_caller(void); | 118 | extern void ftrace_caller(void); |
| 74 | extern void ftrace_call(void); | 119 | extern void ftrace_call(void); |
| 75 | extern void mcount_call(void); | 120 | extern void mcount_call(void); |
| 121 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
| 122 | extern void ftrace_graph_caller(void); | ||
| 123 | extern int ftrace_enable_ftrace_graph_caller(void); | ||
| 124 | extern int ftrace_disable_ftrace_graph_caller(void); | ||
| 125 | #else | ||
| 126 | static inline int ftrace_enable_ftrace_graph_caller(void) { return 0; } | ||
| 127 | static inline int ftrace_disable_ftrace_graph_caller(void) { return 0; } | ||
| 128 | #endif | ||
| 76 | 129 | ||
| 77 | /** | 130 | /** |
| 78 | * ftrace_modify_code - modify code segment | 131 | * ftrace_make_nop - convert code into top |
| 79 | * @ip: the address of the code segment | 132 | * @mod: module structure if called by module load initialization |
| 80 | * @old_code: the contents of what is expected to be there | 133 | * @rec: the mcount call site record |
| 81 | * @new_code: the code to patch in | 134 | * @addr: the address that the call site should be calling |
| 82 | * | 135 | * |
| 83 | * This is a very sensitive operation and great care needs | 136 | * This is a very sensitive operation and great care needs |
| 84 | * to be taken by the arch. The operation should carefully | 137 | * to be taken by the arch. The operation should carefully |
| @@ -86,6 +139,8 @@ extern void mcount_call(void); | |||
| 86 | * what we expect it to be, and then on success of the compare, | 139 | * what we expect it to be, and then on success of the compare, |
| 87 | * it should write to the location. | 140 | * it should write to the location. |
| 88 | * | 141 | * |
| 142 | * The code segment at @rec->ip should be a caller to @addr | ||
| 143 | * | ||
| 89 | * Return must be: | 144 | * Return must be: |
| 90 | * 0 on success | 145 | * 0 on success |
| 91 | * -EFAULT on error reading the location | 146 | * -EFAULT on error reading the location |
| @@ -93,8 +148,34 @@ extern void mcount_call(void); | |||
| 93 | * -EPERM on error writing to the location | 148 | * -EPERM on error writing to the location |
| 94 | * Any other value will be considered a failure. | 149 | * Any other value will be considered a failure. |
| 95 | */ | 150 | */ |
| 96 | extern int ftrace_modify_code(unsigned long ip, unsigned char *old_code, | 151 | extern int ftrace_make_nop(struct module *mod, |
| 97 | unsigned char *new_code); | 152 | struct dyn_ftrace *rec, unsigned long addr); |
| 153 | |||
| 154 | /** | ||
| 155 | * ftrace_make_call - convert a nop call site into a call to addr | ||
| 156 | * @rec: the mcount call site record | ||
| 157 | * @addr: the address that the call site should call | ||
| 158 | * | ||
| 159 | * This is a very sensitive operation and great care needs | ||
| 160 | * to be taken by the arch. The operation should carefully | ||
| 161 | * read the location, check to see if what is read is indeed | ||
| 162 | * what we expect it to be, and then on success of the compare, | ||
| 163 | * it should write to the location. | ||
| 164 | * | ||
| 165 | * The code segment at @rec->ip should be a nop | ||
| 166 | * | ||
| 167 | * Return must be: | ||
| 168 | * 0 on success | ||
| 169 | * -EFAULT on error reading the location | ||
| 170 | * -EINVAL on a failed compare of the contents | ||
| 171 | * -EPERM on error writing to the location | ||
| 172 | * Any other value will be considered a failure. | ||
| 173 | */ | ||
| 174 | extern int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr); | ||
| 175 | |||
| 176 | |||
| 177 | /* May be defined in arch */ | ||
| 178 | extern int ftrace_arch_read_dyn_info(char *buf, int size); | ||
| 98 | 179 | ||
| 99 | extern int skip_trace(unsigned long ip); | 180 | extern int skip_trace(unsigned long ip); |
| 100 | 181 | ||
| @@ -102,7 +183,6 @@ extern void ftrace_release(void *start, unsigned long size); | |||
| 102 | 183 | ||
| 103 | extern void ftrace_disable_daemon(void); | 184 | extern void ftrace_disable_daemon(void); |
| 104 | extern void ftrace_enable_daemon(void); | 185 | extern void ftrace_enable_daemon(void); |
| 105 | |||
| 106 | #else | 186 | #else |
| 107 | # define skip_trace(ip) ({ 0; }) | 187 | # define skip_trace(ip) ({ 0; }) |
| 108 | # define ftrace_force_update() ({ 0; }) | 188 | # define ftrace_force_update() ({ 0; }) |
| @@ -181,6 +261,12 @@ static inline void __ftrace_enabled_restore(int enabled) | |||
| 181 | #endif | 261 | #endif |
| 182 | 262 | ||
| 183 | #ifdef CONFIG_TRACING | 263 | #ifdef CONFIG_TRACING |
| 264 | extern int ftrace_dump_on_oops; | ||
| 265 | |||
| 266 | extern void tracing_start(void); | ||
| 267 | extern void tracing_stop(void); | ||
| 268 | extern void ftrace_off_permanent(void); | ||
| 269 | |||
| 184 | extern void | 270 | extern void |
| 185 | ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3); | 271 | ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3); |
| 186 | 272 | ||
| @@ -211,6 +297,9 @@ ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) { } | |||
| 211 | static inline int | 297 | static inline int |
| 212 | ftrace_printk(const char *fmt, ...) __attribute__ ((format (printf, 1, 0))); | 298 | ftrace_printk(const char *fmt, ...) __attribute__ ((format (printf, 1, 0))); |
| 213 | 299 | ||
| 300 | static inline void tracing_start(void) { } | ||
| 301 | static inline void tracing_stop(void) { } | ||
| 302 | static inline void ftrace_off_permanent(void) { } | ||
| 214 | static inline int | 303 | static inline int |
| 215 | ftrace_printk(const char *fmt, ...) | 304 | ftrace_printk(const char *fmt, ...) |
| 216 | { | 305 | { |
| @@ -221,33 +310,167 @@ static inline void ftrace_dump(void) { } | |||
| 221 | 310 | ||
| 222 | #ifdef CONFIG_FTRACE_MCOUNT_RECORD | 311 | #ifdef CONFIG_FTRACE_MCOUNT_RECORD |
| 223 | extern void ftrace_init(void); | 312 | extern void ftrace_init(void); |
| 224 | extern void ftrace_init_module(unsigned long *start, unsigned long *end); | 313 | extern void ftrace_init_module(struct module *mod, |
| 314 | unsigned long *start, unsigned long *end); | ||
| 225 | #else | 315 | #else |
| 226 | static inline void ftrace_init(void) { } | 316 | static inline void ftrace_init(void) { } |
| 227 | static inline void | 317 | static inline void |
| 228 | ftrace_init_module(unsigned long *start, unsigned long *end) { } | 318 | ftrace_init_module(struct module *mod, |
| 319 | unsigned long *start, unsigned long *end) { } | ||
| 229 | #endif | 320 | #endif |
| 230 | 321 | ||
| 322 | enum { | ||
| 323 | POWER_NONE = 0, | ||
| 324 | POWER_CSTATE = 1, | ||
| 325 | POWER_PSTATE = 2, | ||
| 326 | }; | ||
| 327 | |||
| 328 | struct power_trace { | ||
| 329 | #ifdef CONFIG_POWER_TRACER | ||
| 330 | ktime_t stamp; | ||
| 331 | ktime_t end; | ||
| 332 | int type; | ||
| 333 | int state; | ||
| 334 | #endif | ||
| 335 | }; | ||
| 336 | |||
| 337 | #ifdef CONFIG_POWER_TRACER | ||
| 338 | extern void trace_power_start(struct power_trace *it, unsigned int type, | ||
| 339 | unsigned int state); | ||
| 340 | extern void trace_power_mark(struct power_trace *it, unsigned int type, | ||
| 341 | unsigned int state); | ||
| 342 | extern void trace_power_end(struct power_trace *it); | ||
| 343 | #else | ||
| 344 | static inline void trace_power_start(struct power_trace *it, unsigned int type, | ||
| 345 | unsigned int state) { } | ||
| 346 | static inline void trace_power_mark(struct power_trace *it, unsigned int type, | ||
| 347 | unsigned int state) { } | ||
| 348 | static inline void trace_power_end(struct power_trace *it) { } | ||
| 349 | #endif | ||
| 350 | |||
| 351 | |||
| 352 | /* | ||
| 353 | * Structure that defines an entry function trace. | ||
| 354 | */ | ||
| 355 | struct ftrace_graph_ent { | ||
| 356 | unsigned long func; /* Current function */ | ||
| 357 | int depth; | ||
| 358 | }; | ||
| 231 | 359 | ||
| 232 | struct boot_trace { | 360 | /* |
| 233 | pid_t caller; | 361 | * Structure that defines a return function trace. |
| 234 | char func[KSYM_NAME_LEN]; | 362 | */ |
| 235 | int result; | 363 | struct ftrace_graph_ret { |
| 236 | unsigned long long duration; /* usecs */ | 364 | unsigned long func; /* Current function */ |
| 237 | ktime_t calltime; | 365 | unsigned long long calltime; |
| 238 | ktime_t rettime; | 366 | unsigned long long rettime; |
| 367 | /* Number of functions that overran the depth limit for current task */ | ||
| 368 | unsigned long overrun; | ||
| 369 | int depth; | ||
| 239 | }; | 370 | }; |
| 240 | 371 | ||
| 241 | #ifdef CONFIG_BOOT_TRACER | 372 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
| 242 | extern void trace_boot(struct boot_trace *it, initcall_t fn); | 373 | |
| 243 | extern void start_boot_trace(void); | 374 | /* |
| 244 | extern void stop_boot_trace(void); | 375 | * Sometimes we don't want to trace a function with the function |
| 376 | * graph tracer but we want them to keep traced by the usual function | ||
| 377 | * tracer if the function graph tracer is not configured. | ||
| 378 | */ | ||
| 379 | #define __notrace_funcgraph notrace | ||
| 380 | |||
| 381 | #define FTRACE_RETFUNC_DEPTH 50 | ||
| 382 | #define FTRACE_RETSTACK_ALLOC_SIZE 32 | ||
| 383 | /* Type of the callback handlers for tracing function graph*/ | ||
| 384 | typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *); /* return */ | ||
| 385 | typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *); /* entry */ | ||
| 386 | |||
| 387 | extern int register_ftrace_graph(trace_func_graph_ret_t retfunc, | ||
| 388 | trace_func_graph_ent_t entryfunc); | ||
| 389 | |||
| 390 | extern void ftrace_graph_stop(void); | ||
| 391 | |||
| 392 | /* The current handlers in use */ | ||
| 393 | extern trace_func_graph_ret_t ftrace_graph_return; | ||
| 394 | extern trace_func_graph_ent_t ftrace_graph_entry; | ||
| 395 | |||
| 396 | extern void unregister_ftrace_graph(void); | ||
| 397 | |||
| 398 | extern void ftrace_graph_init_task(struct task_struct *t); | ||
| 399 | extern void ftrace_graph_exit_task(struct task_struct *t); | ||
| 400 | |||
| 401 | static inline int task_curr_ret_stack(struct task_struct *t) | ||
| 402 | { | ||
| 403 | return t->curr_ret_stack; | ||
| 404 | } | ||
| 405 | |||
| 406 | static inline void pause_graph_tracing(void) | ||
| 407 | { | ||
| 408 | atomic_inc(¤t->tracing_graph_pause); | ||
| 409 | } | ||
| 410 | |||
| 411 | static inline void unpause_graph_tracing(void) | ||
| 412 | { | ||
| 413 | atomic_dec(¤t->tracing_graph_pause); | ||
| 414 | } | ||
| 245 | #else | 415 | #else |
| 246 | static inline void trace_boot(struct boot_trace *it, initcall_t fn) { } | 416 | |
| 247 | static inline void start_boot_trace(void) { } | 417 | #define __notrace_funcgraph |
| 248 | static inline void stop_boot_trace(void) { } | 418 | |
| 419 | static inline void ftrace_graph_init_task(struct task_struct *t) { } | ||
| 420 | static inline void ftrace_graph_exit_task(struct task_struct *t) { } | ||
| 421 | |||
| 422 | static inline int task_curr_ret_stack(struct task_struct *tsk) | ||
| 423 | { | ||
| 424 | return -1; | ||
| 425 | } | ||
| 426 | |||
| 427 | static inline void pause_graph_tracing(void) { } | ||
| 428 | static inline void unpause_graph_tracing(void) { } | ||
| 249 | #endif | 429 | #endif |
| 250 | 430 | ||
| 431 | #ifdef CONFIG_TRACING | ||
| 432 | #include <linux/sched.h> | ||
| 433 | |||
| 434 | /* flags for current->trace */ | ||
| 435 | enum { | ||
| 436 | TSK_TRACE_FL_TRACE_BIT = 0, | ||
| 437 | TSK_TRACE_FL_GRAPH_BIT = 1, | ||
| 438 | }; | ||
| 439 | enum { | ||
| 440 | TSK_TRACE_FL_TRACE = 1 << TSK_TRACE_FL_TRACE_BIT, | ||
| 441 | TSK_TRACE_FL_GRAPH = 1 << TSK_TRACE_FL_GRAPH_BIT, | ||
| 442 | }; | ||
| 443 | |||
| 444 | static inline void set_tsk_trace_trace(struct task_struct *tsk) | ||
| 445 | { | ||
| 446 | set_bit(TSK_TRACE_FL_TRACE_BIT, &tsk->trace); | ||
| 447 | } | ||
| 448 | |||
| 449 | static inline void clear_tsk_trace_trace(struct task_struct *tsk) | ||
| 450 | { | ||
| 451 | clear_bit(TSK_TRACE_FL_TRACE_BIT, &tsk->trace); | ||
| 452 | } | ||
| 453 | |||
| 454 | static inline int test_tsk_trace_trace(struct task_struct *tsk) | ||
| 455 | { | ||
| 456 | return tsk->trace & TSK_TRACE_FL_TRACE; | ||
| 457 | } | ||
| 458 | |||
| 459 | static inline void set_tsk_trace_graph(struct task_struct *tsk) | ||
| 460 | { | ||
| 461 | set_bit(TSK_TRACE_FL_GRAPH_BIT, &tsk->trace); | ||
| 462 | } | ||
| 463 | |||
| 464 | static inline void clear_tsk_trace_graph(struct task_struct *tsk) | ||
| 465 | { | ||
| 466 | clear_bit(TSK_TRACE_FL_GRAPH_BIT, &tsk->trace); | ||
| 467 | } | ||
| 468 | |||
| 469 | static inline int test_tsk_trace_graph(struct task_struct *tsk) | ||
| 470 | { | ||
| 471 | return tsk->trace & TSK_TRACE_FL_GRAPH; | ||
| 472 | } | ||
| 251 | 473 | ||
| 474 | #endif /* CONFIG_TRACING */ | ||
| 252 | 475 | ||
| 253 | #endif /* _LINUX_FTRACE_H */ | 476 | #endif /* _LINUX_FTRACE_H */ |
diff --git a/include/linux/ftrace_irq.h b/include/linux/ftrace_irq.h new file mode 100644 index 000000000000..366a054d0b05 --- /dev/null +++ b/include/linux/ftrace_irq.h | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | #ifndef _LINUX_FTRACE_IRQ_H | ||
| 2 | #define _LINUX_FTRACE_IRQ_H | ||
| 3 | |||
| 4 | |||
| 5 | #if defined(CONFIG_DYNAMIC_FTRACE) || defined(CONFIG_FUNCTION_GRAPH_TRACER) | ||
| 6 | extern void ftrace_nmi_enter(void); | ||
| 7 | extern void ftrace_nmi_exit(void); | ||
| 8 | #else | ||
| 9 | static inline void ftrace_nmi_enter(void) { } | ||
| 10 | static inline void ftrace_nmi_exit(void) { } | ||
| 11 | #endif | ||
| 12 | |||
| 13 | #endif /* _LINUX_FTRACE_IRQ_H */ | ||
diff --git a/include/linux/futex.h b/include/linux/futex.h index 586ab56a3ec3..8f627b9ae2b1 100644 --- a/include/linux/futex.h +++ b/include/linux/futex.h | |||
| @@ -164,6 +164,8 @@ union futex_key { | |||
| 164 | } both; | 164 | } both; |
| 165 | }; | 165 | }; |
| 166 | 166 | ||
| 167 | #define FUTEX_KEY_INIT (union futex_key) { .both = { .ptr = NULL } } | ||
| 168 | |||
| 167 | #ifdef CONFIG_FUTEX | 169 | #ifdef CONFIG_FUTEX |
| 168 | extern void exit_robust_list(struct task_struct *curr); | 170 | extern void exit_robust_list(struct task_struct *curr); |
| 169 | extern void exit_pi_state_list(struct task_struct *curr); | 171 | extern void exit_pi_state_list(struct task_struct *curr); |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index e439e6aed832..3df7742ce246 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
| @@ -522,7 +522,9 @@ extern char *disk_name (struct gendisk *hd, int partno, char *buf); | |||
| 522 | 522 | ||
| 523 | extern int disk_expand_part_tbl(struct gendisk *disk, int target); | 523 | extern int disk_expand_part_tbl(struct gendisk *disk, int target); |
| 524 | extern int rescan_partitions(struct gendisk *disk, struct block_device *bdev); | 524 | extern int rescan_partitions(struct gendisk *disk, struct block_device *bdev); |
| 525 | extern int __must_check add_partition(struct gendisk *, int, sector_t, sector_t, int); | 525 | extern struct hd_struct * __must_check add_partition(struct gendisk *disk, |
| 526 | int partno, sector_t start, | ||
| 527 | sector_t len, int flags); | ||
| 526 | extern void delete_partition(struct gendisk *, int); | 528 | extern void delete_partition(struct gendisk *, int); |
| 527 | extern void printk_all_partitions(void); | 529 | extern void printk_all_partitions(void); |
| 528 | 530 | ||
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 181006cc94a0..89a56d79e4c6 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #include <linux/preempt.h> | 4 | #include <linux/preempt.h> |
| 5 | #include <linux/smp_lock.h> | 5 | #include <linux/smp_lock.h> |
| 6 | #include <linux/lockdep.h> | 6 | #include <linux/lockdep.h> |
| 7 | #include <linux/ftrace_irq.h> | ||
| 7 | #include <asm/hardirq.h> | 8 | #include <asm/hardirq.h> |
| 8 | #include <asm/system.h> | 9 | #include <asm/system.h> |
| 9 | 10 | ||
| @@ -161,7 +162,17 @@ extern void irq_enter(void); | |||
| 161 | */ | 162 | */ |
| 162 | extern void irq_exit(void); | 163 | extern void irq_exit(void); |
| 163 | 164 | ||
| 164 | #define nmi_enter() do { lockdep_off(); __irq_enter(); } while (0) | 165 | #define nmi_enter() \ |
| 165 | #define nmi_exit() do { __irq_exit(); lockdep_on(); } while (0) | 166 | do { \ |
| 167 | ftrace_nmi_enter(); \ | ||
| 168 | lockdep_off(); \ | ||
| 169 | __irq_enter(); \ | ||
| 170 | } while (0) | ||
| 171 | #define nmi_exit() \ | ||
| 172 | do { \ | ||
| 173 | __irq_exit(); \ | ||
| 174 | lockdep_on(); \ | ||
| 175 | ftrace_nmi_exit(); \ | ||
| 176 | } while (0) | ||
| 166 | 177 | ||
| 167 | #endif /* LINUX_HARDIRQ_H */ | 178 | #endif /* LINUX_HARDIRQ_H */ |
diff --git a/include/linux/highmem.h b/include/linux/highmem.h index 7dcbc82f3b7b..13875ce9112a 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h | |||
| @@ -63,12 +63,14 @@ static inline void *kmap_atomic(struct page *page, enum km_type idx) | |||
| 63 | #endif /* CONFIG_HIGHMEM */ | 63 | #endif /* CONFIG_HIGHMEM */ |
| 64 | 64 | ||
| 65 | /* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */ | 65 | /* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */ |
| 66 | #ifndef clear_user_highpage | ||
| 66 | static inline void clear_user_highpage(struct page *page, unsigned long vaddr) | 67 | static inline void clear_user_highpage(struct page *page, unsigned long vaddr) |
| 67 | { | 68 | { |
| 68 | void *addr = kmap_atomic(page, KM_USER0); | 69 | void *addr = kmap_atomic(page, KM_USER0); |
| 69 | clear_user_page(addr, vaddr, page); | 70 | clear_user_page(addr, vaddr, page); |
| 70 | kunmap_atomic(addr, KM_USER0); | 71 | kunmap_atomic(addr, KM_USER0); |
| 71 | } | 72 | } |
| 73 | #endif | ||
| 72 | 74 | ||
| 73 | #ifndef __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE | 75 | #ifndef __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE |
| 74 | /** | 76 | /** |
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 07e510a3b00a..3eba43878dcb 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
| @@ -46,9 +46,6 @@ enum hrtimer_restart { | |||
| 46 | * hrtimer callback modes: | 46 | * hrtimer callback modes: |
| 47 | * | 47 | * |
| 48 | * HRTIMER_CB_SOFTIRQ: Callback must run in softirq context | 48 | * HRTIMER_CB_SOFTIRQ: Callback must run in softirq context |
| 49 | * HRTIMER_CB_IRQSAFE: Callback may run in hardirq context | ||
| 50 | * HRTIMER_CB_IRQSAFE_NO_RESTART: Callback may run in hardirq context and | ||
| 51 | * does not restart the timer | ||
| 52 | * HRTIMER_CB_IRQSAFE_PERCPU: Callback must run in hardirq context | 49 | * HRTIMER_CB_IRQSAFE_PERCPU: Callback must run in hardirq context |
| 53 | * Special mode for tick emulation and | 50 | * Special mode for tick emulation and |
| 54 | * scheduler timer. Such timers are per | 51 | * scheduler timer. Such timers are per |
| @@ -61,8 +58,6 @@ enum hrtimer_restart { | |||
| 61 | */ | 58 | */ |
| 62 | enum hrtimer_cb_mode { | 59 | enum hrtimer_cb_mode { |
| 63 | HRTIMER_CB_SOFTIRQ, | 60 | HRTIMER_CB_SOFTIRQ, |
| 64 | HRTIMER_CB_IRQSAFE, | ||
| 65 | HRTIMER_CB_IRQSAFE_NO_RESTART, | ||
| 66 | HRTIMER_CB_IRQSAFE_PERCPU, | 61 | HRTIMER_CB_IRQSAFE_PERCPU, |
| 67 | HRTIMER_CB_IRQSAFE_UNLOCKED, | 62 | HRTIMER_CB_IRQSAFE_UNLOCKED, |
| 68 | }; | 63 | }; |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 54525be4b5f8..010fb26a1579 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -1296,6 +1296,13 @@ extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *o | |||
| 1296 | #define ide_pci_register_driver(d) pci_register_driver(d) | 1296 | #define ide_pci_register_driver(d) pci_register_driver(d) |
| 1297 | #endif | 1297 | #endif |
| 1298 | 1298 | ||
| 1299 | static inline int ide_pci_is_in_compatibility_mode(struct pci_dev *dev) | ||
| 1300 | { | ||
| 1301 | if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && (dev->class & 5) != 5) | ||
| 1302 | return 1; | ||
| 1303 | return 0; | ||
| 1304 | } | ||
| 1305 | |||
| 1299 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, | 1306 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, |
| 1300 | hw_regs_t *, hw_regs_t **); | 1307 | hw_regs_t *, hw_regs_t **); |
| 1301 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); | 1308 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); |
| @@ -1375,6 +1382,7 @@ enum { | |||
| 1375 | IDE_HFLAG_IO_32BIT = (1 << 24), | 1382 | IDE_HFLAG_IO_32BIT = (1 << 24), |
| 1376 | /* unmask IRQs */ | 1383 | /* unmask IRQs */ |
| 1377 | IDE_HFLAG_UNMASK_IRQS = (1 << 25), | 1384 | IDE_HFLAG_UNMASK_IRQS = (1 << 25), |
| 1385 | IDE_HFLAG_BROKEN_ALTSTATUS = (1 << 26), | ||
| 1378 | /* serialize ports if DMA is possible (for sl82c105) */ | 1386 | /* serialize ports if DMA is possible (for sl82c105) */ |
| 1379 | IDE_HFLAG_SERIALIZE_DMA = (1 << 27), | 1387 | IDE_HFLAG_SERIALIZE_DMA = (1 << 27), |
| 1380 | /* force host out of "simplex" mode */ | 1388 | /* force host out of "simplex" mode */ |
diff --git a/include/linux/idr.h b/include/linux/idr.h index fa035f96f2a3..dd846df8cd32 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h | |||
| @@ -52,13 +52,14 @@ struct idr_layer { | |||
| 52 | unsigned long bitmap; /* A zero bit means "space here" */ | 52 | unsigned long bitmap; /* A zero bit means "space here" */ |
| 53 | struct idr_layer *ary[1<<IDR_BITS]; | 53 | struct idr_layer *ary[1<<IDR_BITS]; |
| 54 | int count; /* When zero, we can release it */ | 54 | int count; /* When zero, we can release it */ |
| 55 | int layer; /* distance from leaf */ | ||
| 55 | struct rcu_head rcu_head; | 56 | struct rcu_head rcu_head; |
| 56 | }; | 57 | }; |
| 57 | 58 | ||
| 58 | struct idr { | 59 | struct idr { |
| 59 | struct idr_layer *top; | 60 | struct idr_layer *top; |
| 60 | struct idr_layer *id_free; | 61 | struct idr_layer *id_free; |
| 61 | int layers; | 62 | int layers; /* only valid without concurrent changes */ |
| 62 | int id_free_cnt; | 63 | int id_free_cnt; |
| 63 | spinlock_t lock; | 64 | spinlock_t lock; |
| 64 | }; | 65 | }; |
diff --git a/include/linux/inotify.h b/include/linux/inotify.h index bd578578a8b9..37ea2894b3c0 100644 --- a/include/linux/inotify.h +++ b/include/linux/inotify.h | |||
| @@ -134,6 +134,8 @@ extern void inotify_remove_watch_locked(struct inotify_handle *, | |||
| 134 | struct inotify_watch *); | 134 | struct inotify_watch *); |
| 135 | extern void get_inotify_watch(struct inotify_watch *); | 135 | extern void get_inotify_watch(struct inotify_watch *); |
| 136 | extern void put_inotify_watch(struct inotify_watch *); | 136 | extern void put_inotify_watch(struct inotify_watch *); |
| 137 | extern int pin_inotify_watch(struct inotify_watch *); | ||
| 138 | extern void unpin_inotify_watch(struct inotify_watch *); | ||
| 137 | 139 | ||
| 138 | #else | 140 | #else |
| 139 | 141 | ||
| @@ -228,6 +230,15 @@ static inline void put_inotify_watch(struct inotify_watch *watch) | |||
| 228 | { | 230 | { |
| 229 | } | 231 | } |
| 230 | 232 | ||
| 233 | extern inline int pin_inotify_watch(struct inotify_watch *watch) | ||
| 234 | { | ||
| 235 | return 0; | ||
| 236 | } | ||
| 237 | |||
| 238 | extern inline void unpin_inotify_watch(struct inotify_watch *watch) | ||
| 239 | { | ||
| 240 | } | ||
| 241 | |||
| 231 | #endif /* CONFIG_INOTIFY */ | 242 | #endif /* CONFIG_INOTIFY */ |
| 232 | 243 | ||
| 233 | #endif /* __KERNEL __ */ | 244 | #endif /* __KERNEL __ */ |
diff --git a/include/linux/input.h b/include/linux/input.h index b86fb5581ce6..5341e8251f8c 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
| @@ -238,6 +238,7 @@ struct input_absinfo { | |||
| 238 | #define KEY_KPEQUAL 117 | 238 | #define KEY_KPEQUAL 117 |
| 239 | #define KEY_KPPLUSMINUS 118 | 239 | #define KEY_KPPLUSMINUS 118 |
| 240 | #define KEY_PAUSE 119 | 240 | #define KEY_PAUSE 119 |
| 241 | #define KEY_SCALE 120 /* AL Compiz Scale (Expose) */ | ||
| 241 | 242 | ||
| 242 | #define KEY_KPCOMMA 121 | 243 | #define KEY_KPCOMMA 121 |
| 243 | #define KEY_HANGEUL 122 | 244 | #define KEY_HANGEUL 122 |
| @@ -322,6 +323,7 @@ struct input_absinfo { | |||
| 322 | #define KEY_PAUSECD 201 | 323 | #define KEY_PAUSECD 201 |
| 323 | #define KEY_PROG3 202 | 324 | #define KEY_PROG3 202 |
| 324 | #define KEY_PROG4 203 | 325 | #define KEY_PROG4 203 |
| 326 | #define KEY_DASHBOARD 204 /* AL Dashboard */ | ||
| 325 | #define KEY_SUSPEND 205 | 327 | #define KEY_SUSPEND 205 |
| 326 | #define KEY_CLOSE 206 /* AC Close */ | 328 | #define KEY_CLOSE 206 /* AC Close */ |
| 327 | #define KEY_PLAY 207 | 329 | #define KEY_PLAY 207 |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index f58a0cf8929a..777f89e00b4a 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | #include <linux/irqflags.h> | 14 | #include <linux/irqflags.h> |
| 15 | #include <linux/smp.h> | 15 | #include <linux/smp.h> |
| 16 | #include <linux/percpu.h> | 16 | #include <linux/percpu.h> |
| 17 | #include <linux/irqnr.h> | ||
| 18 | |||
| 17 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
| 18 | #include <asm/ptrace.h> | 20 | #include <asm/ptrace.h> |
| 19 | #include <asm/system.h> | 21 | #include <asm/system.h> |
diff --git a/include/linux/irq.h b/include/linux/irq.h index d058c57be02d..b5749db3e5a1 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
| @@ -63,7 +63,8 @@ typedef void (*irq_flow_handler_t)(unsigned int irq, | |||
| 63 | #define IRQ_MOVE_PENDING 0x00200000 /* need to re-target IRQ destination */ | 63 | #define IRQ_MOVE_PENDING 0x00200000 /* need to re-target IRQ destination */ |
| 64 | #define IRQ_NO_BALANCING 0x00400000 /* IRQ is excluded from balancing */ | 64 | #define IRQ_NO_BALANCING 0x00400000 /* IRQ is excluded from balancing */ |
| 65 | #define IRQ_SPURIOUS_DISABLED 0x00800000 /* IRQ was disabled by the spurious trap */ | 65 | #define IRQ_SPURIOUS_DISABLED 0x00800000 /* IRQ was disabled by the spurious trap */ |
| 66 | #define IRQ_MOVE_PCNTXT 0x01000000 /* IRQ migration from process context */ | 66 | #define IRQ_MOVE_PCNTXT 0x01000000 /* IRQ migration from process context */ |
| 67 | #define IRQ_AFFINITY_SET 0x02000000 /* IRQ affinity was set from userspace*/ | ||
| 67 | 68 | ||
| 68 | #ifdef CONFIG_IRQ_PER_CPU | 69 | #ifdef CONFIG_IRQ_PER_CPU |
| 69 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) | 70 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) |
| @@ -128,9 +129,11 @@ struct irq_chip { | |||
| 128 | const char *typename; | 129 | const char *typename; |
| 129 | }; | 130 | }; |
| 130 | 131 | ||
| 132 | struct timer_rand_state; | ||
| 133 | struct irq_2_iommu; | ||
| 131 | /** | 134 | /** |
| 132 | * struct irq_desc - interrupt descriptor | 135 | * struct irq_desc - interrupt descriptor |
| 133 | * | 136 | * @irq: interrupt number for this descriptor |
| 134 | * @handle_irq: highlevel irq-events handler [if NULL, __do_IRQ()] | 137 | * @handle_irq: highlevel irq-events handler [if NULL, __do_IRQ()] |
| 135 | * @chip: low level interrupt hardware access | 138 | * @chip: low level interrupt hardware access |
| 136 | * @msi_desc: MSI descriptor | 139 | * @msi_desc: MSI descriptor |
| @@ -149,11 +152,17 @@ struct irq_chip { | |||
| 149 | * @cpu: cpu index useful for balancing | 152 | * @cpu: cpu index useful for balancing |
| 150 | * @pending_mask: pending rebalanced interrupts | 153 | * @pending_mask: pending rebalanced interrupts |
| 151 | * @dir: /proc/irq/ procfs entry | 154 | * @dir: /proc/irq/ procfs entry |
| 152 | * @affinity_entry: /proc/irq/smp_affinity procfs entry on SMP | ||
| 153 | * @name: flow handler name for /proc/interrupts output | 155 | * @name: flow handler name for /proc/interrupts output |
| 154 | */ | 156 | */ |
| 155 | struct irq_desc { | 157 | struct irq_desc { |
| 156 | unsigned int irq; | 158 | unsigned int irq; |
| 159 | #ifdef CONFIG_SPARSE_IRQ | ||
| 160 | struct timer_rand_state *timer_rand_state; | ||
| 161 | unsigned int *kstat_irqs; | ||
| 162 | # ifdef CONFIG_INTR_REMAP | ||
| 163 | struct irq_2_iommu *irq_2_iommu; | ||
| 164 | # endif | ||
| 165 | #endif | ||
| 157 | irq_flow_handler_t handle_irq; | 166 | irq_flow_handler_t handle_irq; |
| 158 | struct irq_chip *chip; | 167 | struct irq_chip *chip; |
| 159 | struct msi_desc *msi_desc; | 168 | struct msi_desc *msi_desc; |
| @@ -181,14 +190,43 @@ struct irq_desc { | |||
| 181 | const char *name; | 190 | const char *name; |
| 182 | } ____cacheline_internodealigned_in_smp; | 191 | } ____cacheline_internodealigned_in_smp; |
| 183 | 192 | ||
| 193 | extern void early_irq_init(void); | ||
| 194 | extern void arch_early_irq_init(void); | ||
| 195 | extern void arch_init_chip_data(struct irq_desc *desc, int cpu); | ||
| 196 | extern void arch_init_copy_chip_data(struct irq_desc *old_desc, | ||
| 197 | struct irq_desc *desc, int cpu); | ||
| 198 | extern void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc); | ||
| 184 | 199 | ||
| 200 | #ifndef CONFIG_SPARSE_IRQ | ||
| 185 | extern struct irq_desc irq_desc[NR_IRQS]; | 201 | extern struct irq_desc irq_desc[NR_IRQS]; |
| 186 | 202 | ||
| 187 | static inline struct irq_desc *irq_to_desc(unsigned int irq) | 203 | static inline struct irq_desc *irq_to_desc(unsigned int irq) |
| 188 | { | 204 | { |
| 189 | return (irq < nr_irqs) ? irq_desc + irq : NULL; | 205 | return (irq < NR_IRQS) ? irq_desc + irq : NULL; |
| 206 | } | ||
| 207 | static inline struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu) | ||
| 208 | { | ||
| 209 | return irq_to_desc(irq); | ||
| 190 | } | 210 | } |
| 191 | 211 | ||
| 212 | #else | ||
| 213 | |||
| 214 | extern struct irq_desc *irq_to_desc(unsigned int irq); | ||
| 215 | extern struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu); | ||
| 216 | extern struct irq_desc *move_irq_desc(struct irq_desc *old_desc, int cpu); | ||
| 217 | |||
| 218 | # define for_each_irq_desc(irq, desc) \ | ||
| 219 | for (irq = 0, desc = irq_to_desc(irq); irq < nr_irqs; irq++, desc = irq_to_desc(irq)) | ||
| 220 | # define for_each_irq_desc_reverse(irq, desc) \ | ||
| 221 | for (irq = nr_irqs - 1, desc = irq_to_desc(irq); irq >= 0; irq--, desc = irq_to_desc(irq)) | ||
| 222 | |||
| 223 | #define kstat_irqs_this_cpu(DESC) \ | ||
| 224 | ((DESC)->kstat_irqs[smp_processor_id()]) | ||
| 225 | #define kstat_incr_irqs_this_cpu(irqno, DESC) \ | ||
| 226 | ((DESC)->kstat_irqs[smp_processor_id()]++) | ||
| 227 | |||
| 228 | #endif | ||
| 229 | |||
| 192 | /* | 230 | /* |
| 193 | * Migration helpers for obsolete names, they will go away: | 231 | * Migration helpers for obsolete names, they will go away: |
| 194 | */ | 232 | */ |
| @@ -210,7 +248,6 @@ extern int setup_irq(unsigned int irq, struct irqaction *new); | |||
| 210 | 248 | ||
| 211 | #ifdef CONFIG_GENERIC_PENDING_IRQ | 249 | #ifdef CONFIG_GENERIC_PENDING_IRQ |
| 212 | 250 | ||
| 213 | void set_pending_irq(unsigned int irq, cpumask_t mask); | ||
| 214 | void move_native_irq(int irq); | 251 | void move_native_irq(int irq); |
| 215 | void move_masked_irq(int irq); | 252 | void move_masked_irq(int irq); |
| 216 | 253 | ||
| @@ -228,10 +265,6 @@ static inline void move_masked_irq(int irq) | |||
| 228 | { | 265 | { |
| 229 | } | 266 | } |
| 230 | 267 | ||
| 231 | static inline void set_pending_irq(unsigned int irq, cpumask_t mask) | ||
| 232 | { | ||
| 233 | } | ||
| 234 | |||
| 235 | #endif /* CONFIG_GENERIC_PENDING_IRQ */ | 268 | #endif /* CONFIG_GENERIC_PENDING_IRQ */ |
| 236 | 269 | ||
| 237 | #else /* CONFIG_SMP */ | 270 | #else /* CONFIG_SMP */ |
| @@ -385,6 +418,11 @@ extern int set_irq_msi(unsigned int irq, struct msi_desc *entry); | |||
| 385 | #define get_irq_data(irq) (irq_to_desc(irq)->handler_data) | 418 | #define get_irq_data(irq) (irq_to_desc(irq)->handler_data) |
| 386 | #define get_irq_msi(irq) (irq_to_desc(irq)->msi_desc) | 419 | #define get_irq_msi(irq) (irq_to_desc(irq)->msi_desc) |
| 387 | 420 | ||
| 421 | #define get_irq_desc_chip(desc) ((desc)->chip) | ||
| 422 | #define get_irq_desc_chip_data(desc) ((desc)->chip_data) | ||
| 423 | #define get_irq_desc_data(desc) ((desc)->handler_data) | ||
| 424 | #define get_irq_desc_msi(desc) ((desc)->msi_desc) | ||
| 425 | |||
| 388 | #endif /* CONFIG_GENERIC_HARDIRQS */ | 426 | #endif /* CONFIG_GENERIC_HARDIRQS */ |
| 389 | 427 | ||
| 390 | #endif /* !CONFIG_S390 */ | 428 | #endif /* !CONFIG_S390 */ |
diff --git a/include/linux/irqnr.h b/include/linux/irqnr.h index 452c280c8115..95d2b74641f5 100644 --- a/include/linux/irqnr.h +++ b/include/linux/irqnr.h | |||
| @@ -1,24 +1,38 @@ | |||
| 1 | #ifndef _LINUX_IRQNR_H | 1 | #ifndef _LINUX_IRQNR_H |
| 2 | #define _LINUX_IRQNR_H | 2 | #define _LINUX_IRQNR_H |
| 3 | 3 | ||
| 4 | /* | ||
| 5 | * Generic irq_desc iterators: | ||
| 6 | */ | ||
| 7 | #ifdef __KERNEL__ | ||
| 8 | |||
| 4 | #ifndef CONFIG_GENERIC_HARDIRQS | 9 | #ifndef CONFIG_GENERIC_HARDIRQS |
| 5 | #include <asm/irq.h> | 10 | #include <asm/irq.h> |
| 6 | # define nr_irqs NR_IRQS | 11 | # define nr_irqs NR_IRQS |
| 7 | 12 | ||
| 8 | # define for_each_irq_desc(irq, desc) \ | 13 | # define for_each_irq_desc(irq, desc) \ |
| 9 | for (irq = 0; irq < nr_irqs; irq++) | 14 | for (irq = 0; irq < nr_irqs; irq++) |
| 15 | |||
| 16 | # define for_each_irq_desc_reverse(irq, desc) \ | ||
| 17 | for (irq = nr_irqs - 1; irq >= 0; irq--) | ||
| 10 | #else | 18 | #else |
| 19 | |||
| 11 | extern int nr_irqs; | 20 | extern int nr_irqs; |
| 12 | 21 | ||
| 22 | #ifndef CONFIG_SPARSE_IRQ | ||
| 23 | |||
| 24 | struct irq_desc; | ||
| 13 | # define for_each_irq_desc(irq, desc) \ | 25 | # define for_each_irq_desc(irq, desc) \ |
| 14 | for (irq = 0, desc = irq_desc; irq < nr_irqs; irq++, desc++) | 26 | for (irq = 0, desc = irq_desc; irq < nr_irqs; irq++, desc++) |
| 15 | 27 | # define for_each_irq_desc_reverse(irq, desc) \ | |
| 16 | # define for_each_irq_desc_reverse(irq, desc) \ | 28 | for (irq = nr_irqs - 1, desc = irq_desc + (nr_irqs - 1); \ |
| 17 | for (irq = nr_irqs - 1, desc = irq_desc + (nr_irqs - 1); \ | 29 | irq >= 0; irq--, desc--) |
| 18 | irq >= 0; irq--, desc--) | 30 | #endif |
| 19 | #endif | 31 | #endif |
| 20 | 32 | ||
| 21 | #define for_each_irq_nr(irq) \ | 33 | #define for_each_irq_nr(irq) \ |
| 22 | for (irq = 0; irq < nr_irqs; irq++) | 34 | for (irq = 0; irq < nr_irqs; irq++) |
| 35 | |||
| 36 | #endif /* __KERNEL__ */ | ||
| 23 | 37 | ||
| 24 | #endif | 38 | #endif |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index fba141d3ca07..269df5a17b30 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
| @@ -141,6 +141,15 @@ extern int _cond_resched(void); | |||
| 141 | (__x < 0) ? -__x : __x; \ | 141 | (__x < 0) ? -__x : __x; \ |
| 142 | }) | 142 | }) |
| 143 | 143 | ||
| 144 | #ifdef CONFIG_PROVE_LOCKING | ||
| 145 | void might_fault(void); | ||
| 146 | #else | ||
| 147 | static inline void might_fault(void) | ||
| 148 | { | ||
| 149 | might_sleep(); | ||
| 150 | } | ||
| 151 | #endif | ||
| 152 | |||
| 144 | extern struct atomic_notifier_head panic_notifier_list; | 153 | extern struct atomic_notifier_head panic_notifier_list; |
| 145 | extern long (*panic_blink)(long time); | 154 | extern long (*panic_blink)(long time); |
| 146 | NORET_TYPE void panic(const char * fmt, ...) | 155 | NORET_TYPE void panic(const char * fmt, ...) |
| @@ -188,6 +197,8 @@ extern unsigned long long memparse(const char *ptr, char **retptr); | |||
| 188 | extern int core_kernel_text(unsigned long addr); | 197 | extern int core_kernel_text(unsigned long addr); |
| 189 | extern int __kernel_text_address(unsigned long addr); | 198 | extern int __kernel_text_address(unsigned long addr); |
| 190 | extern int kernel_text_address(unsigned long addr); | 199 | extern int kernel_text_address(unsigned long addr); |
| 200 | extern int func_ptr_is_kernel_text(void *ptr); | ||
| 201 | |||
| 191 | struct pid; | 202 | struct pid; |
| 192 | extern struct pid *session_of_pgrp(struct pid *pgrp); | 203 | extern struct pid *session_of_pgrp(struct pid *pgrp); |
| 193 | 204 | ||
| @@ -318,32 +329,36 @@ static inline char *pack_hex_byte(char *buf, u8 byte) | |||
| 318 | return buf; | 329 | return buf; |
| 319 | } | 330 | } |
| 320 | 331 | ||
| 321 | #define pr_emerg(fmt, arg...) \ | 332 | #ifndef pr_fmt |
| 322 | printk(KERN_EMERG fmt, ##arg) | 333 | #define pr_fmt(fmt) fmt |
| 323 | #define pr_alert(fmt, arg...) \ | 334 | #endif |
| 324 | printk(KERN_ALERT fmt, ##arg) | 335 | |
| 325 | #define pr_crit(fmt, arg...) \ | 336 | #define pr_emerg(fmt, ...) \ |
| 326 | printk(KERN_CRIT fmt, ##arg) | 337 | printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__) |
| 327 | #define pr_err(fmt, arg...) \ | 338 | #define pr_alert(fmt, ...) \ |
| 328 | printk(KERN_ERR fmt, ##arg) | 339 | printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__) |
| 329 | #define pr_warning(fmt, arg...) \ | 340 | #define pr_crit(fmt, ...) \ |
| 330 | printk(KERN_WARNING fmt, ##arg) | 341 | printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__) |
| 331 | #define pr_notice(fmt, arg...) \ | 342 | #define pr_err(fmt, ...) \ |
| 332 | printk(KERN_NOTICE fmt, ##arg) | 343 | printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) |
| 333 | #define pr_info(fmt, arg...) \ | 344 | #define pr_warning(fmt, ...) \ |
| 334 | printk(KERN_INFO fmt, ##arg) | 345 | printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) |
| 346 | #define pr_notice(fmt, ...) \ | ||
| 347 | printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) | ||
| 348 | #define pr_info(fmt, ...) \ | ||
| 349 | printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) | ||
| 335 | 350 | ||
| 336 | /* If you are writing a driver, please use dev_dbg instead */ | 351 | /* If you are writing a driver, please use dev_dbg instead */ |
| 337 | #if defined(CONFIG_DYNAMIC_PRINTK_DEBUG) | 352 | #if defined(CONFIG_DYNAMIC_PRINTK_DEBUG) |
| 338 | #define pr_debug(fmt, ...) do { \ | 353 | #define pr_debug(fmt, ...) do { \ |
| 339 | dynamic_pr_debug(fmt, ##__VA_ARGS__); \ | 354 | dynamic_pr_debug(pr_fmt(fmt), ##__VA_ARGS__); \ |
| 340 | } while (0) | 355 | } while (0) |
| 341 | #elif defined(DEBUG) | 356 | #elif defined(DEBUG) |
| 342 | #define pr_debug(fmt, arg...) \ | 357 | #define pr_debug(fmt, ...) \ |
| 343 | printk(KERN_DEBUG fmt, ##arg) | 358 | printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) |
| 344 | #else | 359 | #else |
| 345 | #define pr_debug(fmt, arg...) \ | 360 | #define pr_debug(fmt, ...) \ |
| 346 | ({ if (0) printk(KERN_DEBUG fmt, ##arg); 0; }) | 361 | ({ if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); 0; }) |
| 347 | #endif | 362 | #endif |
| 348 | 363 | ||
| 349 | /* | 364 | /* |
diff --git a/include/linux/kernel_stat.h b/include/linux/kernel_stat.h index 4a145caeee07..4ee4b3d2316f 100644 --- a/include/linux/kernel_stat.h +++ b/include/linux/kernel_stat.h | |||
| @@ -28,7 +28,9 @@ struct cpu_usage_stat { | |||
| 28 | 28 | ||
| 29 | struct kernel_stat { | 29 | struct kernel_stat { |
| 30 | struct cpu_usage_stat cpustat; | 30 | struct cpu_usage_stat cpustat; |
| 31 | unsigned int irqs[NR_IRQS]; | 31 | #ifndef CONFIG_SPARSE_IRQ |
| 32 | unsigned int irqs[NR_IRQS]; | ||
| 33 | #endif | ||
| 32 | }; | 34 | }; |
| 33 | 35 | ||
| 34 | DECLARE_PER_CPU(struct kernel_stat, kstat); | 36 | DECLARE_PER_CPU(struct kernel_stat, kstat); |
| @@ -39,6 +41,10 @@ DECLARE_PER_CPU(struct kernel_stat, kstat); | |||
| 39 | 41 | ||
| 40 | extern unsigned long long nr_context_switches(void); | 42 | extern unsigned long long nr_context_switches(void); |
| 41 | 43 | ||
| 44 | #ifndef CONFIG_SPARSE_IRQ | ||
| 45 | #define kstat_irqs_this_cpu(irq) \ | ||
| 46 | (kstat_this_cpu.irqs[irq]) | ||
| 47 | |||
| 42 | struct irq_desc; | 48 | struct irq_desc; |
| 43 | 49 | ||
| 44 | static inline void kstat_incr_irqs_this_cpu(unsigned int irq, | 50 | static inline void kstat_incr_irqs_this_cpu(unsigned int irq, |
| @@ -46,11 +52,17 @@ static inline void kstat_incr_irqs_this_cpu(unsigned int irq, | |||
| 46 | { | 52 | { |
| 47 | kstat_this_cpu.irqs[irq]++; | 53 | kstat_this_cpu.irqs[irq]++; |
| 48 | } | 54 | } |
| 55 | #endif | ||
| 56 | |||
| 49 | 57 | ||
| 58 | #ifndef CONFIG_SPARSE_IRQ | ||
| 50 | static inline unsigned int kstat_irqs_cpu(unsigned int irq, int cpu) | 59 | static inline unsigned int kstat_irqs_cpu(unsigned int irq, int cpu) |
| 51 | { | 60 | { |
| 52 | return kstat_cpu(cpu).irqs[irq]; | 61 | return kstat_cpu(cpu).irqs[irq]; |
| 53 | } | 62 | } |
| 63 | #else | ||
| 64 | extern unsigned int kstat_irqs_cpu(unsigned int irq, int cpu); | ||
| 65 | #endif | ||
| 54 | 66 | ||
| 55 | /* | 67 | /* |
| 56 | * Number of interrupts per specific IRQ source, since bootup | 68 | * Number of interrupts per specific IRQ source, since bootup |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 59b0f1c807b5..ed3f26eb5df1 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -375,6 +375,7 @@ enum { | |||
| 375 | ATA_HORKAGE_BRIDGE_OK = (1 << 10), /* no bridge limits */ | 375 | ATA_HORKAGE_BRIDGE_OK = (1 << 10), /* no bridge limits */ |
| 376 | ATA_HORKAGE_ATAPI_MOD16_DMA = (1 << 11), /* use ATAPI DMA for commands | 376 | ATA_HORKAGE_ATAPI_MOD16_DMA = (1 << 11), /* use ATAPI DMA for commands |
| 377 | not multiple of 16 bytes */ | 377 | not multiple of 16 bytes */ |
| 378 | ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firwmare update warning */ | ||
| 378 | 379 | ||
| 379 | /* DMA mask for user DMA control: User visible values; DO NOT | 380 | /* DMA mask for user DMA control: User visible values; DO NOT |
| 380 | renumber */ | 381 | renumber */ |
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index 331e5f1c2d8e..8956daf64abd 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
| @@ -73,6 +73,8 @@ struct lock_class_key { | |||
| 73 | struct lockdep_subclass_key subkeys[MAX_LOCKDEP_SUBCLASSES]; | 73 | struct lockdep_subclass_key subkeys[MAX_LOCKDEP_SUBCLASSES]; |
| 74 | }; | 74 | }; |
| 75 | 75 | ||
| 76 | #define LOCKSTAT_POINTS 4 | ||
| 77 | |||
| 76 | /* | 78 | /* |
| 77 | * The lock-class itself: | 79 | * The lock-class itself: |
| 78 | */ | 80 | */ |
| @@ -119,7 +121,8 @@ struct lock_class { | |||
| 119 | int name_version; | 121 | int name_version; |
| 120 | 122 | ||
| 121 | #ifdef CONFIG_LOCK_STAT | 123 | #ifdef CONFIG_LOCK_STAT |
| 122 | unsigned long contention_point[4]; | 124 | unsigned long contention_point[LOCKSTAT_POINTS]; |
| 125 | unsigned long contending_point[LOCKSTAT_POINTS]; | ||
| 123 | #endif | 126 | #endif |
| 124 | }; | 127 | }; |
| 125 | 128 | ||
| @@ -144,6 +147,7 @@ enum bounce_type { | |||
| 144 | 147 | ||
| 145 | struct lock_class_stats { | 148 | struct lock_class_stats { |
| 146 | unsigned long contention_point[4]; | 149 | unsigned long contention_point[4]; |
| 150 | unsigned long contending_point[4]; | ||
| 147 | struct lock_time read_waittime; | 151 | struct lock_time read_waittime; |
| 148 | struct lock_time write_waittime; | 152 | struct lock_time write_waittime; |
| 149 | struct lock_time read_holdtime; | 153 | struct lock_time read_holdtime; |
| @@ -165,6 +169,7 @@ struct lockdep_map { | |||
| 165 | const char *name; | 169 | const char *name; |
| 166 | #ifdef CONFIG_LOCK_STAT | 170 | #ifdef CONFIG_LOCK_STAT |
| 167 | int cpu; | 171 | int cpu; |
| 172 | unsigned long ip; | ||
| 168 | #endif | 173 | #endif |
| 169 | }; | 174 | }; |
| 170 | 175 | ||
| @@ -331,10 +336,11 @@ static inline void lockdep_on(void) | |||
| 331 | # define lock_set_subclass(l, s, i) do { } while (0) | 336 | # define lock_set_subclass(l, s, i) do { } while (0) |
| 332 | # define lockdep_init() do { } while (0) | 337 | # define lockdep_init() do { } while (0) |
| 333 | # define lockdep_info() do { } while (0) | 338 | # define lockdep_info() do { } while (0) |
| 334 | # define lockdep_init_map(lock, name, key, sub) do { (void)(key); } while (0) | 339 | # define lockdep_init_map(lock, name, key, sub) \ |
| 340 | do { (void)(name); (void)(key); } while (0) | ||
| 335 | # define lockdep_set_class(lock, key) do { (void)(key); } while (0) | 341 | # define lockdep_set_class(lock, key) do { (void)(key); } while (0) |
| 336 | # define lockdep_set_class_and_name(lock, key, name) \ | 342 | # define lockdep_set_class_and_name(lock, key, name) \ |
| 337 | do { (void)(key); } while (0) | 343 | do { (void)(key); (void)(name); } while (0) |
| 338 | #define lockdep_set_class_and_subclass(lock, key, sub) \ | 344 | #define lockdep_set_class_and_subclass(lock, key, sub) \ |
| 339 | do { (void)(key); } while (0) | 345 | do { (void)(key); } while (0) |
| 340 | #define lockdep_set_subclass(lock, sub) do { } while (0) | 346 | #define lockdep_set_subclass(lock, sub) do { } while (0) |
| @@ -355,7 +361,7 @@ struct lock_class_key { }; | |||
| 355 | #ifdef CONFIG_LOCK_STAT | 361 | #ifdef CONFIG_LOCK_STAT |
| 356 | 362 | ||
| 357 | extern void lock_contended(struct lockdep_map *lock, unsigned long ip); | 363 | extern void lock_contended(struct lockdep_map *lock, unsigned long ip); |
| 358 | extern void lock_acquired(struct lockdep_map *lock); | 364 | extern void lock_acquired(struct lockdep_map *lock, unsigned long ip); |
| 359 | 365 | ||
| 360 | #define LOCK_CONTENDED(_lock, try, lock) \ | 366 | #define LOCK_CONTENDED(_lock, try, lock) \ |
| 361 | do { \ | 367 | do { \ |
| @@ -363,13 +369,13 @@ do { \ | |||
| 363 | lock_contended(&(_lock)->dep_map, _RET_IP_); \ | 369 | lock_contended(&(_lock)->dep_map, _RET_IP_); \ |
| 364 | lock(_lock); \ | 370 | lock(_lock); \ |
| 365 | } \ | 371 | } \ |
| 366 | lock_acquired(&(_lock)->dep_map); \ | 372 | lock_acquired(&(_lock)->dep_map, _RET_IP_); \ |
| 367 | } while (0) | 373 | } while (0) |
| 368 | 374 | ||
| 369 | #else /* CONFIG_LOCK_STAT */ | 375 | #else /* CONFIG_LOCK_STAT */ |
| 370 | 376 | ||
| 371 | #define lock_contended(lockdep_map, ip) do {} while (0) | 377 | #define lock_contended(lockdep_map, ip) do {} while (0) |
| 372 | #define lock_acquired(lockdep_map) do {} while (0) | 378 | #define lock_acquired(lockdep_map, ip) do {} while (0) |
| 373 | 379 | ||
| 374 | #define LOCK_CONTENDED(_lock, try, lock) \ | 380 | #define LOCK_CONTENDED(_lock, try, lock) \ |
| 375 | lock(_lock) | 381 | lock(_lock) |
| @@ -480,4 +486,22 @@ static inline void print_irqtrace_events(struct task_struct *curr) | |||
| 480 | # define lock_map_release(l) do { } while (0) | 486 | # define lock_map_release(l) do { } while (0) |
| 481 | #endif | 487 | #endif |
| 482 | 488 | ||
| 489 | #ifdef CONFIG_PROVE_LOCKING | ||
| 490 | # define might_lock(lock) \ | ||
| 491 | do { \ | ||
| 492 | typecheck(struct lockdep_map *, &(lock)->dep_map); \ | ||
| 493 | lock_acquire(&(lock)->dep_map, 0, 0, 0, 2, NULL, _THIS_IP_); \ | ||
| 494 | lock_release(&(lock)->dep_map, 0, _THIS_IP_); \ | ||
| 495 | } while (0) | ||
| 496 | # define might_lock_read(lock) \ | ||
| 497 | do { \ | ||
| 498 | typecheck(struct lockdep_map *, &(lock)->dep_map); \ | ||
| 499 | lock_acquire(&(lock)->dep_map, 0, 0, 1, 2, NULL, _THIS_IP_); \ | ||
| 500 | lock_release(&(lock)->dep_map, 0, _THIS_IP_); \ | ||
| 501 | } while (0) | ||
| 502 | #else | ||
| 503 | # define might_lock(lock) do { } while (0) | ||
| 504 | # define might_lock_read(lock) do { } while (0) | ||
| 505 | #endif | ||
| 506 | |||
| 483 | #endif /* __LINUX_LOCKDEP_H */ | 507 | #endif /* __LINUX_LOCKDEP_H */ |
diff --git a/include/linux/marker.h b/include/linux/marker.h index 889196c7fbb1..b85e74ca782f 100644 --- a/include/linux/marker.h +++ b/include/linux/marker.h | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | * See the file COPYING for more details. | 12 | * See the file COPYING for more details. |
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | #include <stdarg.h> | ||
| 15 | #include <linux/types.h> | 16 | #include <linux/types.h> |
| 16 | 17 | ||
| 17 | struct module; | 18 | struct module; |
| @@ -48,10 +49,28 @@ struct marker { | |||
| 48 | void (*call)(const struct marker *mdata, void *call_private, ...); | 49 | void (*call)(const struct marker *mdata, void *call_private, ...); |
| 49 | struct marker_probe_closure single; | 50 | struct marker_probe_closure single; |
| 50 | struct marker_probe_closure *multi; | 51 | struct marker_probe_closure *multi; |
| 52 | const char *tp_name; /* Optional tracepoint name */ | ||
| 53 | void *tp_cb; /* Optional tracepoint callback */ | ||
| 51 | } __attribute__((aligned(8))); | 54 | } __attribute__((aligned(8))); |
| 52 | 55 | ||
| 53 | #ifdef CONFIG_MARKERS | 56 | #ifdef CONFIG_MARKERS |
| 54 | 57 | ||
| 58 | #define _DEFINE_MARKER(name, tp_name_str, tp_cb, format) \ | ||
| 59 | static const char __mstrtab_##name[] \ | ||
| 60 | __attribute__((section("__markers_strings"))) \ | ||
| 61 | = #name "\0" format; \ | ||
| 62 | static struct marker __mark_##name \ | ||
| 63 | __attribute__((section("__markers"), aligned(8))) = \ | ||
| 64 | { __mstrtab_##name, &__mstrtab_##name[sizeof(#name)], \ | ||
| 65 | 0, 0, marker_probe_cb, { __mark_empty_function, NULL},\ | ||
| 66 | NULL, tp_name_str, tp_cb } | ||
| 67 | |||
| 68 | #define DEFINE_MARKER(name, format) \ | ||
| 69 | _DEFINE_MARKER(name, NULL, NULL, format) | ||
| 70 | |||
| 71 | #define DEFINE_MARKER_TP(name, tp_name, tp_cb, format) \ | ||
| 72 | _DEFINE_MARKER(name, #tp_name, tp_cb, format) | ||
| 73 | |||
| 55 | /* | 74 | /* |
| 56 | * Note : the empty asm volatile with read constraint is used here instead of a | 75 | * Note : the empty asm volatile with read constraint is used here instead of a |
| 57 | * "used" attribute to fix a gcc 4.1.x bug. | 76 | * "used" attribute to fix a gcc 4.1.x bug. |
| @@ -65,14 +84,7 @@ struct marker { | |||
| 65 | */ | 84 | */ |
| 66 | #define __trace_mark(generic, name, call_private, format, args...) \ | 85 | #define __trace_mark(generic, name, call_private, format, args...) \ |
| 67 | do { \ | 86 | do { \ |
| 68 | static const char __mstrtab_##name[] \ | 87 | DEFINE_MARKER(name, format); \ |
| 69 | __attribute__((section("__markers_strings"))) \ | ||
| 70 | = #name "\0" format; \ | ||
| 71 | static struct marker __mark_##name \ | ||
| 72 | __attribute__((section("__markers"), aligned(8))) = \ | ||
| 73 | { __mstrtab_##name, &__mstrtab_##name[sizeof(#name)], \ | ||
| 74 | 0, 0, marker_probe_cb, \ | ||
| 75 | { __mark_empty_function, NULL}, NULL }; \ | ||
| 76 | __mark_check_format(format, ## args); \ | 88 | __mark_check_format(format, ## args); \ |
| 77 | if (unlikely(__mark_##name.state)) { \ | 89 | if (unlikely(__mark_##name.state)) { \ |
| 78 | (*__mark_##name.call) \ | 90 | (*__mark_##name.call) \ |
| @@ -80,14 +92,39 @@ struct marker { | |||
| 80 | } \ | 92 | } \ |
| 81 | } while (0) | 93 | } while (0) |
| 82 | 94 | ||
| 95 | #define __trace_mark_tp(name, call_private, tp_name, tp_cb, format, args...) \ | ||
| 96 | do { \ | ||
| 97 | void __check_tp_type(void) \ | ||
| 98 | { \ | ||
| 99 | register_trace_##tp_name(tp_cb); \ | ||
| 100 | } \ | ||
| 101 | DEFINE_MARKER_TP(name, tp_name, tp_cb, format); \ | ||
| 102 | __mark_check_format(format, ## args); \ | ||
| 103 | (*__mark_##name.call)(&__mark_##name, call_private, \ | ||
| 104 | ## args); \ | ||
| 105 | } while (0) | ||
| 106 | |||
| 83 | extern void marker_update_probe_range(struct marker *begin, | 107 | extern void marker_update_probe_range(struct marker *begin, |
| 84 | struct marker *end); | 108 | struct marker *end); |
| 109 | |||
| 110 | #define GET_MARKER(name) (__mark_##name) | ||
| 111 | |||
| 85 | #else /* !CONFIG_MARKERS */ | 112 | #else /* !CONFIG_MARKERS */ |
| 113 | #define DEFINE_MARKER(name, tp_name, tp_cb, format) | ||
| 86 | #define __trace_mark(generic, name, call_private, format, args...) \ | 114 | #define __trace_mark(generic, name, call_private, format, args...) \ |
| 87 | __mark_check_format(format, ## args) | 115 | __mark_check_format(format, ## args) |
| 116 | #define __trace_mark_tp(name, call_private, tp_name, tp_cb, format, args...) \ | ||
| 117 | do { \ | ||
| 118 | void __check_tp_type(void) \ | ||
| 119 | { \ | ||
| 120 | register_trace_##tp_name(tp_cb); \ | ||
| 121 | } \ | ||
| 122 | __mark_check_format(format, ## args); \ | ||
| 123 | } while (0) | ||
| 88 | static inline void marker_update_probe_range(struct marker *begin, | 124 | static inline void marker_update_probe_range(struct marker *begin, |
| 89 | struct marker *end) | 125 | struct marker *end) |
| 90 | { } | 126 | { } |
| 127 | #define GET_MARKER(name) | ||
| 91 | #endif /* CONFIG_MARKERS */ | 128 | #endif /* CONFIG_MARKERS */ |
| 92 | 129 | ||
| 93 | /** | 130 | /** |
| @@ -117,6 +154,20 @@ static inline void marker_update_probe_range(struct marker *begin, | |||
| 117 | __trace_mark(1, name, NULL, format, ## args) | 154 | __trace_mark(1, name, NULL, format, ## args) |
| 118 | 155 | ||
| 119 | /** | 156 | /** |
| 157 | * trace_mark_tp - Marker in a tracepoint callback | ||
| 158 | * @name: marker name, not quoted. | ||
| 159 | * @tp_name: tracepoint name, not quoted. | ||
| 160 | * @tp_cb: tracepoint callback. Should have an associated global symbol so it | ||
| 161 | * is not optimized away by the compiler (should not be static). | ||
| 162 | * @format: format string | ||
| 163 | * @args...: variable argument list | ||
| 164 | * | ||
| 165 | * Places a marker in a tracepoint callback. | ||
| 166 | */ | ||
| 167 | #define trace_mark_tp(name, tp_name, tp_cb, format, args...) \ | ||
| 168 | __trace_mark_tp(name, NULL, tp_name, tp_cb, format, ## args) | ||
| 169 | |||
| 170 | /** | ||
| 120 | * MARK_NOARGS - Format string for a marker with no argument. | 171 | * MARK_NOARGS - Format string for a marker with no argument. |
| 121 | */ | 172 | */ |
| 122 | #define MARK_NOARGS " " | 173 | #define MARK_NOARGS " " |
| @@ -136,8 +187,6 @@ extern marker_probe_func __mark_empty_function; | |||
| 136 | 187 | ||
| 137 | extern void marker_probe_cb(const struct marker *mdata, | 188 | extern void marker_probe_cb(const struct marker *mdata, |
| 138 | void *call_private, ...); | 189 | void *call_private, ...); |
| 139 | extern void marker_probe_cb_noarg(const struct marker *mdata, | ||
| 140 | void *call_private, ...); | ||
| 141 | 190 | ||
| 142 | /* | 191 | /* |
| 143 | * Connect a probe to a marker. | 192 | * Connect a probe to a marker. |
| @@ -162,8 +211,10 @@ extern void *marker_get_private_data(const char *name, marker_probe_func *probe, | |||
| 162 | 211 | ||
| 163 | /* | 212 | /* |
| 164 | * marker_synchronize_unregister must be called between the last marker probe | 213 | * marker_synchronize_unregister must be called between the last marker probe |
| 165 | * unregistration and the end of module exit to make sure there is no caller | 214 | * unregistration and the first one of |
| 166 | * executing a probe when it is freed. | 215 | * - the end of module exit function |
| 216 | * - the free of any resource used by the probes | ||
| 217 | * to ensure the code and data are valid for any possibly running probes. | ||
| 167 | */ | 218 | */ |
| 168 | #define marker_synchronize_unregister() synchronize_sched() | 219 | #define marker_synchronize_unregister() synchronize_sched() |
| 169 | 220 | ||
diff --git a/include/linux/memory.h b/include/linux/memory.h index 2f5f8a5ef2a0..36c82c9e6ea7 100644 --- a/include/linux/memory.h +++ b/include/linux/memory.h | |||
| @@ -91,7 +91,7 @@ extern int memory_notify(unsigned long val, void *v); | |||
| 91 | 91 | ||
| 92 | #ifdef CONFIG_MEMORY_HOTPLUG | 92 | #ifdef CONFIG_MEMORY_HOTPLUG |
| 93 | #define hotplug_memory_notifier(fn, pri) { \ | 93 | #define hotplug_memory_notifier(fn, pri) { \ |
| 94 | static struct notifier_block fn##_mem_nb = \ | 94 | static __meminitdata struct notifier_block fn##_mem_nb =\ |
| 95 | { .notifier_call = fn, .priority = pri }; \ | 95 | { .notifier_call = fn, .priority = pri }; \ |
| 96 | register_memory_notifier(&fn##_mem_nb); \ | 96 | register_memory_notifier(&fn##_mem_nb); \ |
| 97 | } | 97 | } |
diff --git a/include/linux/mfd/wm8350/rtc.h b/include/linux/mfd/wm8350/rtc.h index dfda69e9f440..24add2bef6c9 100644 --- a/include/linux/mfd/wm8350/rtc.h +++ b/include/linux/mfd/wm8350/rtc.h | |||
| @@ -261,6 +261,8 @@ | |||
| 261 | 261 | ||
| 262 | struct wm8350_rtc { | 262 | struct wm8350_rtc { |
| 263 | struct platform_device *pdev; | 263 | struct platform_device *pdev; |
| 264 | struct rtc_device *rtc; | ||
| 265 | int alarm_enabled; /* used over suspend/resume */ | ||
| 264 | }; | 266 | }; |
| 265 | 267 | ||
| 266 | #endif | 268 | #endif |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index bd9977b89490..371086fd946f 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
| @@ -179,6 +179,7 @@ struct mlx4_caps { | |||
| 179 | int num_ports; | 179 | int num_ports; |
| 180 | int vl_cap[MLX4_MAX_PORTS + 1]; | 180 | int vl_cap[MLX4_MAX_PORTS + 1]; |
| 181 | int ib_mtu_cap[MLX4_MAX_PORTS + 1]; | 181 | int ib_mtu_cap[MLX4_MAX_PORTS + 1]; |
| 182 | __be32 ib_port_def_cap[MLX4_MAX_PORTS + 1]; | ||
| 182 | u64 def_mac[MLX4_MAX_PORTS + 1]; | 183 | u64 def_mac[MLX4_MAX_PORTS + 1]; |
| 183 | int eth_mtu_cap[MLX4_MAX_PORTS + 1]; | 184 | int eth_mtu_cap[MLX4_MAX_PORTS + 1]; |
| 184 | int gid_table_len[MLX4_MAX_PORTS + 1]; | 185 | int gid_table_len[MLX4_MAX_PORTS + 1]; |
diff --git a/include/linux/msi.h b/include/linux/msi.h index 8f2939227207..d2b8a1e8ca11 100644 --- a/include/linux/msi.h +++ b/include/linux/msi.h | |||
| @@ -10,8 +10,11 @@ struct msi_msg { | |||
| 10 | }; | 10 | }; |
| 11 | 11 | ||
| 12 | /* Helper functions */ | 12 | /* Helper functions */ |
| 13 | struct irq_desc; | ||
| 13 | extern void mask_msi_irq(unsigned int irq); | 14 | extern void mask_msi_irq(unsigned int irq); |
| 14 | extern void unmask_msi_irq(unsigned int irq); | 15 | extern void unmask_msi_irq(unsigned int irq); |
| 16 | extern void read_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg); | ||
| 17 | extern void write_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg); | ||
| 15 | extern void read_msi_msg(unsigned int irq, struct msi_msg *msg); | 18 | extern void read_msi_msg(unsigned int irq, struct msi_msg *msg); |
| 16 | extern void write_msi_msg(unsigned int irq, struct msi_msg *msg); | 19 | extern void write_msi_msg(unsigned int irq, struct msi_msg *msg); |
| 17 | 20 | ||
diff --git a/include/linux/mutex.h b/include/linux/mutex.h index bc6da10ceee0..7a0e5c4f8072 100644 --- a/include/linux/mutex.h +++ b/include/linux/mutex.h | |||
| @@ -144,6 +144,8 @@ extern int __must_check mutex_lock_killable(struct mutex *lock); | |||
| 144 | /* | 144 | /* |
| 145 | * NOTE: mutex_trylock() follows the spin_trylock() convention, | 145 | * NOTE: mutex_trylock() follows the spin_trylock() convention, |
| 146 | * not the down_trylock() convention! | 146 | * not the down_trylock() convention! |
| 147 | * | ||
| 148 | * Returns 1 if the mutex has been acquired successfully, and 0 on contention. | ||
| 147 | */ | 149 | */ |
| 148 | extern int mutex_trylock(struct mutex *lock); | 150 | extern int mutex_trylock(struct mutex *lock); |
| 149 | extern void mutex_unlock(struct mutex *lock); | 151 | extern void mutex_unlock(struct mutex *lock); |
diff --git a/include/linux/net.h b/include/linux/net.h index 6dc14a240042..4515efae4c39 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
| @@ -40,7 +40,7 @@ | |||
| 40 | #define SYS_GETSOCKOPT 15 /* sys_getsockopt(2) */ | 40 | #define SYS_GETSOCKOPT 15 /* sys_getsockopt(2) */ |
| 41 | #define SYS_SENDMSG 16 /* sys_sendmsg(2) */ | 41 | #define SYS_SENDMSG 16 /* sys_sendmsg(2) */ |
| 42 | #define SYS_RECVMSG 17 /* sys_recvmsg(2) */ | 42 | #define SYS_RECVMSG 17 /* sys_recvmsg(2) */ |
| 43 | #define SYS_PACCEPT 18 /* sys_paccept(2) */ | 43 | #define SYS_ACCEPT4 18 /* sys_accept4(2) */ |
| 44 | 44 | ||
| 45 | typedef enum { | 45 | typedef enum { |
| 46 | SS_FREE = 0, /* not allocated */ | 46 | SS_FREE = 0, /* not allocated */ |
| @@ -100,7 +100,7 @@ enum sock_type { | |||
| 100 | * remaining bits are used as flags. */ | 100 | * remaining bits are used as flags. */ |
| 101 | #define SOCK_TYPE_MASK 0xf | 101 | #define SOCK_TYPE_MASK 0xf |
| 102 | 102 | ||
| 103 | /* Flags for socket, socketpair, paccept */ | 103 | /* Flags for socket, socketpair, accept4 */ |
| 104 | #define SOCK_CLOEXEC O_CLOEXEC | 104 | #define SOCK_CLOEXEC O_CLOEXEC |
| 105 | #ifndef SOCK_NONBLOCK | 105 | #ifndef SOCK_NONBLOCK |
| 106 | #define SOCK_NONBLOCK O_NONBLOCK | 106 | #define SOCK_NONBLOCK O_NONBLOCK |
| @@ -223,8 +223,6 @@ extern int sock_map_fd(struct socket *sock, int flags); | |||
| 223 | extern struct socket *sockfd_lookup(int fd, int *err); | 223 | extern struct socket *sockfd_lookup(int fd, int *err); |
| 224 | #define sockfd_put(sock) fput(sock->file) | 224 | #define sockfd_put(sock) fput(sock->file) |
| 225 | extern int net_ratelimit(void); | 225 | extern int net_ratelimit(void); |
| 226 | extern long do_accept(int fd, struct sockaddr __user *upeer_sockaddr, | ||
| 227 | int __user *upeer_addrlen, int flags); | ||
| 228 | 226 | ||
| 229 | #define net_random() random32() | 227 | #define net_random() random32() |
| 230 | #define net_srandom(seed) srandom32((__force u32)seed) | 228 | #define net_srandom(seed) srandom32((__force u32)seed) |
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index be41b609c88f..e52ce475d19f 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h | |||
| @@ -251,7 +251,7 @@ struct xt_target_param { | |||
| 251 | */ | 251 | */ |
| 252 | struct xt_tgchk_param { | 252 | struct xt_tgchk_param { |
| 253 | const char *table; | 253 | const char *table; |
| 254 | void *entryinfo; | 254 | const void *entryinfo; |
| 255 | const struct xt_target *target; | 255 | const struct xt_target *target; |
| 256 | void *targinfo; | 256 | void *targinfo; |
| 257 | unsigned int hook_mask; | 257 | unsigned int hook_mask; |
diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h index f546ad6fc028..1e6d34bfa094 100644 --- a/include/linux/page_cgroup.h +++ b/include/linux/page_cgroup.h | |||
| @@ -17,7 +17,7 @@ struct page_cgroup { | |||
| 17 | struct list_head lru; /* per cgroup LRU list */ | 17 | struct list_head lru; /* per cgroup LRU list */ |
| 18 | }; | 18 | }; |
| 19 | 19 | ||
| 20 | void __init pgdat_page_cgroup_init(struct pglist_data *pgdat); | 20 | void __meminit pgdat_page_cgroup_init(struct pglist_data *pgdat); |
| 21 | void __init page_cgroup_init(void); | 21 | void __init page_cgroup_init(void); |
| 22 | struct page_cgroup *lookup_page_cgroup(struct page *page); | 22 | struct page_cgroup *lookup_page_cgroup(struct page *page); |
| 23 | 23 | ||
| @@ -91,7 +91,7 @@ static inline void unlock_page_cgroup(struct page_cgroup *pc) | |||
| 91 | #else /* CONFIG_CGROUP_MEM_RES_CTLR */ | 91 | #else /* CONFIG_CGROUP_MEM_RES_CTLR */ |
| 92 | struct page_cgroup; | 92 | struct page_cgroup; |
| 93 | 93 | ||
| 94 | static inline void pgdat_page_cgroup_init(struct pglist_data *pgdat) | 94 | static inline void __meminit pgdat_page_cgroup_init(struct pglist_data *pgdat) |
| 95 | { | 95 | { |
| 96 | } | 96 | } |
| 97 | 97 | ||
diff --git a/include/linux/pid.h b/include/linux/pid.h index d7e98ff8021e..bb206c56d1f0 100644 --- a/include/linux/pid.h +++ b/include/linux/pid.h | |||
| @@ -147,9 +147,9 @@ pid_t pid_vnr(struct pid *pid); | |||
| 147 | #define do_each_pid_task(pid, type, task) \ | 147 | #define do_each_pid_task(pid, type, task) \ |
| 148 | do { \ | 148 | do { \ |
| 149 | struct hlist_node *pos___; \ | 149 | struct hlist_node *pos___; \ |
| 150 | if (pid != NULL) \ | 150 | if ((pid) != NULL) \ |
| 151 | hlist_for_each_entry_rcu((task), pos___, \ | 151 | hlist_for_each_entry_rcu((task), pos___, \ |
| 152 | &pid->tasks[type], pids[type].node) { | 152 | &(pid)->tasks[type], pids[type].node) { |
| 153 | 153 | ||
| 154 | /* | 154 | /* |
| 155 | * Both old and new leaders may be attached to | 155 | * Both old and new leaders may be attached to |
diff --git a/include/linux/random.h b/include/linux/random.h index 36f125c0c603..adbf3bd3c6b3 100644 --- a/include/linux/random.h +++ b/include/linux/random.h | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #define _LINUX_RANDOM_H | 8 | #define _LINUX_RANDOM_H |
| 9 | 9 | ||
| 10 | #include <linux/ioctl.h> | 10 | #include <linux/ioctl.h> |
| 11 | #include <linux/irqnr.h> | ||
| 11 | 12 | ||
| 12 | /* ioctl()'s for the random number generator */ | 13 | /* ioctl()'s for the random number generator */ |
| 13 | 14 | ||
| @@ -44,6 +45,56 @@ struct rand_pool_info { | |||
| 44 | 45 | ||
| 45 | extern void rand_initialize_irq(int irq); | 46 | extern void rand_initialize_irq(int irq); |
| 46 | 47 | ||
| 48 | struct timer_rand_state; | ||
| 49 | #ifndef CONFIG_SPARSE_IRQ | ||
| 50 | |||
| 51 | extern struct timer_rand_state *irq_timer_state[]; | ||
| 52 | |||
| 53 | static inline struct timer_rand_state *get_timer_rand_state(unsigned int irq) | ||
| 54 | { | ||
| 55 | if (irq >= nr_irqs) | ||
| 56 | return NULL; | ||
| 57 | |||
| 58 | return irq_timer_state[irq]; | ||
| 59 | } | ||
| 60 | |||
| 61 | static inline void set_timer_rand_state(unsigned int irq, struct timer_rand_state *state) | ||
| 62 | { | ||
| 63 | if (irq >= nr_irqs) | ||
| 64 | return; | ||
| 65 | |||
| 66 | irq_timer_state[irq] = state; | ||
| 67 | } | ||
| 68 | |||
| 69 | #else | ||
| 70 | |||
| 71 | #include <linux/irq.h> | ||
| 72 | static inline struct timer_rand_state *get_timer_rand_state(unsigned int irq) | ||
| 73 | { | ||
| 74 | struct irq_desc *desc; | ||
| 75 | |||
| 76 | desc = irq_to_desc(irq); | ||
| 77 | |||
| 78 | if (!desc) | ||
| 79 | return NULL; | ||
| 80 | |||
| 81 | return desc->timer_rand_state; | ||
| 82 | } | ||
| 83 | |||
| 84 | static inline void set_timer_rand_state(unsigned int irq, struct timer_rand_state *state) | ||
| 85 | { | ||
| 86 | struct irq_desc *desc; | ||
| 87 | |||
| 88 | desc = irq_to_desc(irq); | ||
| 89 | |||
| 90 | if (!desc) | ||
| 91 | return; | ||
| 92 | |||
| 93 | desc->timer_rand_state = state; | ||
| 94 | } | ||
| 95 | #endif | ||
| 96 | |||
| 97 | |||
| 47 | extern void add_input_randomness(unsigned int type, unsigned int code, | 98 | extern void add_input_randomness(unsigned int type, unsigned int code, |
| 48 | unsigned int value); | 99 | unsigned int value); |
| 49 | extern void add_interrupt_randomness(int irq); | 100 | extern void add_interrupt_randomness(int irq); |
diff --git a/include/linux/ratelimit.h b/include/linux/ratelimit.h index 18a5b9ba9d40..00044b856453 100644 --- a/include/linux/ratelimit.h +++ b/include/linux/ratelimit.h | |||
| @@ -17,11 +17,4 @@ struct ratelimit_state { | |||
| 17 | struct ratelimit_state name = {interval, burst,} | 17 | struct ratelimit_state name = {interval, burst,} |
| 18 | 18 | ||
| 19 | extern int __ratelimit(struct ratelimit_state *rs); | 19 | extern int __ratelimit(struct ratelimit_state *rs); |
| 20 | |||
| 21 | static inline int ratelimit(void) | ||
| 22 | { | ||
| 23 | static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL, | ||
| 24 | DEFAULT_RATELIMIT_BURST); | ||
| 25 | return __ratelimit(&rs); | ||
| 26 | } | ||
| 27 | #endif | 20 | #endif |
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h index 5f89b62e6983..301dda829e37 100644 --- a/include/linux/rcuclassic.h +++ b/include/linux/rcuclassic.h | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | #include <linux/seqlock.h> | 41 | #include <linux/seqlock.h> |
| 42 | 42 | ||
| 43 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | 43 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR |
| 44 | #define RCU_SECONDS_TILL_STALL_CHECK ( 3 * HZ) /* for rcp->jiffies_stall */ | 44 | #define RCU_SECONDS_TILL_STALL_CHECK (10 * HZ) /* for rcp->jiffies_stall */ |
| 45 | #define RCU_SECONDS_TILL_STALL_RECHECK (30 * HZ) /* for rcp->jiffies_stall */ | 45 | #define RCU_SECONDS_TILL_STALL_RECHECK (30 * HZ) /* for rcp->jiffies_stall */ |
| 46 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | 46 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ |
| 47 | 47 | ||
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 86f1f5e43e33..895dc9c1088c 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -142,6 +142,7 @@ struct rcu_head { | |||
| 142 | * on the write-side to insure proper synchronization. | 142 | * on the write-side to insure proper synchronization. |
| 143 | */ | 143 | */ |
| 144 | #define rcu_read_lock_sched() preempt_disable() | 144 | #define rcu_read_lock_sched() preempt_disable() |
| 145 | #define rcu_read_lock_sched_notrace() preempt_disable_notrace() | ||
| 145 | 146 | ||
| 146 | /* | 147 | /* |
| 147 | * rcu_read_unlock_sched - marks the end of a RCU-classic critical section | 148 | * rcu_read_unlock_sched - marks the end of a RCU-classic critical section |
| @@ -149,6 +150,7 @@ struct rcu_head { | |||
| 149 | * See rcu_read_lock_sched for more information. | 150 | * See rcu_read_lock_sched for more information. |
| 150 | */ | 151 | */ |
| 151 | #define rcu_read_unlock_sched() preempt_enable() | 152 | #define rcu_read_unlock_sched() preempt_enable() |
| 153 | #define rcu_read_unlock_sched_notrace() preempt_enable_notrace() | ||
| 152 | 154 | ||
| 153 | 155 | ||
| 154 | 156 | ||
diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h index 536b0ca46a03..d363467c8f13 100644 --- a/include/linux/ring_buffer.h +++ b/include/linux/ring_buffer.h | |||
| @@ -28,17 +28,19 @@ struct ring_buffer_event { | |||
| 28 | * size = 8 bytes | 28 | * size = 8 bytes |
| 29 | * | 29 | * |
| 30 | * @RINGBUF_TYPE_TIME_STAMP: Sync time stamp with external clock | 30 | * @RINGBUF_TYPE_TIME_STAMP: Sync time stamp with external clock |
| 31 | * array[0] = tv_nsec | 31 | * array[0] = tv_nsec |
| 32 | * array[1] = tv_sec | 32 | * array[1..2] = tv_sec |
| 33 | * size = 16 bytes | 33 | * size = 16 bytes |
| 34 | * | 34 | * |
| 35 | * @RINGBUF_TYPE_DATA: Data record | 35 | * @RINGBUF_TYPE_DATA: Data record |
| 36 | * If len is zero: | 36 | * If len is zero: |
| 37 | * array[0] holds the actual length | 37 | * array[0] holds the actual length |
| 38 | * array[1..(length+3)/4-1] holds data | 38 | * array[1..(length+3)/4] holds data |
| 39 | * size = 4 + 4 + length (bytes) | ||
| 39 | * else | 40 | * else |
| 40 | * length = len << 2 | 41 | * length = len << 2 |
| 41 | * array[0..(length+3)/4] holds data | 42 | * array[0..(length+3)/4-1] holds data |
| 43 | * size = 4 + length (bytes) | ||
| 42 | */ | 44 | */ |
| 43 | enum ring_buffer_type { | 45 | enum ring_buffer_type { |
| 44 | RINGBUF_TYPE_PADDING, | 46 | RINGBUF_TYPE_PADDING, |
| @@ -120,6 +122,15 @@ unsigned long ring_buffer_overruns(struct ring_buffer *buffer); | |||
| 120 | u64 ring_buffer_time_stamp(int cpu); | 122 | u64 ring_buffer_time_stamp(int cpu); |
| 121 | void ring_buffer_normalize_time_stamp(int cpu, u64 *ts); | 123 | void ring_buffer_normalize_time_stamp(int cpu, u64 *ts); |
| 122 | 124 | ||
| 125 | void tracing_on(void); | ||
| 126 | void tracing_off(void); | ||
| 127 | void tracing_off_permanent(void); | ||
| 128 | |||
| 129 | void *ring_buffer_alloc_read_page(struct ring_buffer *buffer); | ||
| 130 | void ring_buffer_free_read_page(struct ring_buffer *buffer, void *data); | ||
| 131 | int ring_buffer_read_page(struct ring_buffer *buffer, | ||
| 132 | void **data_page, int cpu, int full); | ||
| 133 | |||
| 123 | enum ring_buffer_flags { | 134 | enum ring_buffer_flags { |
| 124 | RB_FL_OVERWRITE = 1 << 0, | 135 | RB_FL_OVERWRITE = 1 << 0, |
| 125 | }; | 136 | }; |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 295b7c756ca6..4240f6bfa812 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -96,6 +96,7 @@ struct exec_domain; | |||
| 96 | struct futex_pi_state; | 96 | struct futex_pi_state; |
| 97 | struct robust_list_head; | 97 | struct robust_list_head; |
| 98 | struct bio; | 98 | struct bio; |
| 99 | struct bts_tracer; | ||
| 99 | 100 | ||
| 100 | /* | 101 | /* |
| 101 | * List of flags we want to share for kernel threads, | 102 | * List of flags we want to share for kernel threads, |
| @@ -247,8 +248,9 @@ extern void init_idle(struct task_struct *idle, int cpu); | |||
| 247 | extern void init_idle_bootup_task(struct task_struct *idle); | 248 | extern void init_idle_bootup_task(struct task_struct *idle); |
| 248 | 249 | ||
| 249 | extern int runqueue_is_locked(void); | 250 | extern int runqueue_is_locked(void); |
| 251 | extern void task_rq_unlock_wait(struct task_struct *p); | ||
| 250 | 252 | ||
| 251 | extern cpumask_t nohz_cpu_mask; | 253 | extern cpumask_var_t nohz_cpu_mask; |
| 252 | #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ) | 254 | #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ) |
| 253 | extern int select_nohz_load_balancer(int cpu); | 255 | extern int select_nohz_load_balancer(int cpu); |
| 254 | #else | 256 | #else |
| @@ -258,8 +260,6 @@ static inline int select_nohz_load_balancer(int cpu) | |||
| 258 | } | 260 | } |
| 259 | #endif | 261 | #endif |
| 260 | 262 | ||
| 261 | extern unsigned long rt_needs_cpu(int cpu); | ||
| 262 | |||
| 263 | /* | 263 | /* |
| 264 | * Only dump TASK_* tasks. (0 for all tasks) | 264 | * Only dump TASK_* tasks. (0 for all tasks) |
| 265 | */ | 265 | */ |
| @@ -629,6 +629,10 @@ struct user_struct { | |||
| 629 | atomic_t inotify_watches; /* How many inotify watches does this user have? */ | 629 | atomic_t inotify_watches; /* How many inotify watches does this user have? */ |
| 630 | atomic_t inotify_devs; /* How many inotify devs does this user have opened? */ | 630 | atomic_t inotify_devs; /* How many inotify devs does this user have opened? */ |
| 631 | #endif | 631 | #endif |
| 632 | #ifdef CONFIG_EPOLL | ||
| 633 | atomic_t epoll_devs; /* The number of epoll descriptors currently open */ | ||
| 634 | atomic_t epoll_watches; /* The number of file descriptors currently watched */ | ||
| 635 | #endif | ||
| 632 | #ifdef CONFIG_POSIX_MQUEUE | 636 | #ifdef CONFIG_POSIX_MQUEUE |
| 633 | /* protected by mq_lock */ | 637 | /* protected by mq_lock */ |
| 634 | unsigned long mq_bytes; /* How many bytes can be allocated to mqueue? */ | 638 | unsigned long mq_bytes; /* How many bytes can be allocated to mqueue? */ |
| @@ -772,7 +776,6 @@ enum cpu_idle_type { | |||
| 772 | 776 | ||
| 773 | struct sched_group { | 777 | struct sched_group { |
| 774 | struct sched_group *next; /* Must be a circular list */ | 778 | struct sched_group *next; /* Must be a circular list */ |
| 775 | cpumask_t cpumask; | ||
| 776 | 779 | ||
| 777 | /* | 780 | /* |
| 778 | * CPU power of this group, SCHED_LOAD_SCALE being max power for a | 781 | * CPU power of this group, SCHED_LOAD_SCALE being max power for a |
| @@ -785,8 +788,15 @@ struct sched_group { | |||
| 785 | * (see include/linux/reciprocal_div.h) | 788 | * (see include/linux/reciprocal_div.h) |
| 786 | */ | 789 | */ |
| 787 | u32 reciprocal_cpu_power; | 790 | u32 reciprocal_cpu_power; |
| 791 | |||
| 792 | unsigned long cpumask[]; | ||
| 788 | }; | 793 | }; |
| 789 | 794 | ||
| 795 | static inline struct cpumask *sched_group_cpus(struct sched_group *sg) | ||
| 796 | { | ||
| 797 | return to_cpumask(sg->cpumask); | ||
| 798 | } | ||
| 799 | |||
| 790 | enum sched_domain_level { | 800 | enum sched_domain_level { |
| 791 | SD_LV_NONE = 0, | 801 | SD_LV_NONE = 0, |
| 792 | SD_LV_SIBLING, | 802 | SD_LV_SIBLING, |
| @@ -810,7 +820,6 @@ struct sched_domain { | |||
| 810 | struct sched_domain *parent; /* top domain must be null terminated */ | 820 | struct sched_domain *parent; /* top domain must be null terminated */ |
| 811 | struct sched_domain *child; /* bottom domain must be null terminated */ | 821 | struct sched_domain *child; /* bottom domain must be null terminated */ |
| 812 | struct sched_group *groups; /* the balancing groups of the domain */ | 822 | struct sched_group *groups; /* the balancing groups of the domain */ |
| 813 | cpumask_t span; /* span of all CPUs in this domain */ | ||
| 814 | unsigned long min_interval; /* Minimum balance interval ms */ | 823 | unsigned long min_interval; /* Minimum balance interval ms */ |
| 815 | unsigned long max_interval; /* Maximum balance interval ms */ | 824 | unsigned long max_interval; /* Maximum balance interval ms */ |
| 816 | unsigned int busy_factor; /* less balancing by factor if busy */ | 825 | unsigned int busy_factor; /* less balancing by factor if busy */ |
| @@ -865,9 +874,17 @@ struct sched_domain { | |||
| 865 | #ifdef CONFIG_SCHED_DEBUG | 874 | #ifdef CONFIG_SCHED_DEBUG |
| 866 | char *name; | 875 | char *name; |
| 867 | #endif | 876 | #endif |
| 877 | |||
| 878 | /* span of all CPUs in this domain */ | ||
| 879 | unsigned long span[]; | ||
| 868 | }; | 880 | }; |
| 869 | 881 | ||
| 870 | extern void partition_sched_domains(int ndoms_new, cpumask_t *doms_new, | 882 | static inline struct cpumask *sched_domain_span(struct sched_domain *sd) |
| 883 | { | ||
| 884 | return to_cpumask(sd->span); | ||
| 885 | } | ||
| 886 | |||
| 887 | extern void partition_sched_domains(int ndoms_new, struct cpumask *doms_new, | ||
| 871 | struct sched_domain_attr *dattr_new); | 888 | struct sched_domain_attr *dattr_new); |
| 872 | extern int arch_reinit_sched_domains(void); | 889 | extern int arch_reinit_sched_domains(void); |
| 873 | 890 | ||
| @@ -876,7 +893,7 @@ extern int arch_reinit_sched_domains(void); | |||
| 876 | struct sched_domain_attr; | 893 | struct sched_domain_attr; |
| 877 | 894 | ||
| 878 | static inline void | 895 | static inline void |
| 879 | partition_sched_domains(int ndoms_new, cpumask_t *doms_new, | 896 | partition_sched_domains(int ndoms_new, struct cpumask *doms_new, |
| 880 | struct sched_domain_attr *dattr_new) | 897 | struct sched_domain_attr *dattr_new) |
| 881 | { | 898 | { |
| 882 | } | 899 | } |
| @@ -958,7 +975,7 @@ struct sched_class { | |||
| 958 | void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); | 975 | void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); |
| 959 | 976 | ||
| 960 | void (*set_cpus_allowed)(struct task_struct *p, | 977 | void (*set_cpus_allowed)(struct task_struct *p, |
| 961 | const cpumask_t *newmask); | 978 | const struct cpumask *newmask); |
| 962 | 979 | ||
| 963 | void (*rq_online)(struct rq *rq); | 980 | void (*rq_online)(struct rq *rq); |
| 964 | void (*rq_offline)(struct rq *rq); | 981 | void (*rq_offline)(struct rq *rq); |
| @@ -1160,6 +1177,18 @@ struct task_struct { | |||
| 1160 | struct list_head ptraced; | 1177 | struct list_head ptraced; |
| 1161 | struct list_head ptrace_entry; | 1178 | struct list_head ptrace_entry; |
| 1162 | 1179 | ||
| 1180 | #ifdef CONFIG_X86_PTRACE_BTS | ||
| 1181 | /* | ||
| 1182 | * This is the tracer handle for the ptrace BTS extension. | ||
| 1183 | * This field actually belongs to the ptracer task. | ||
| 1184 | */ | ||
| 1185 | struct bts_tracer *bts; | ||
| 1186 | /* | ||
| 1187 | * The buffer to hold the BTS data. | ||
| 1188 | */ | ||
| 1189 | void *bts_buffer; | ||
| 1190 | #endif /* CONFIG_X86_PTRACE_BTS */ | ||
| 1191 | |||
| 1163 | /* PID/PID hash table linkage. */ | 1192 | /* PID/PID hash table linkage. */ |
| 1164 | struct pid_link pids[PIDTYPE_MAX]; | 1193 | struct pid_link pids[PIDTYPE_MAX]; |
| 1165 | struct list_head thread_group; | 1194 | struct list_head thread_group; |
| @@ -1351,6 +1380,23 @@ struct task_struct { | |||
| 1351 | unsigned long default_timer_slack_ns; | 1380 | unsigned long default_timer_slack_ns; |
| 1352 | 1381 | ||
| 1353 | struct list_head *scm_work_list; | 1382 | struct list_head *scm_work_list; |
| 1383 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
| 1384 | /* Index of current stored adress in ret_stack */ | ||
| 1385 | int curr_ret_stack; | ||
| 1386 | /* Stack of return addresses for return function tracing */ | ||
| 1387 | struct ftrace_ret_stack *ret_stack; | ||
| 1388 | /* | ||
| 1389 | * Number of functions that haven't been traced | ||
| 1390 | * because of depth overrun. | ||
| 1391 | */ | ||
| 1392 | atomic_t trace_overrun; | ||
| 1393 | /* Pause for the tracing */ | ||
| 1394 | atomic_t tracing_graph_pause; | ||
| 1395 | #endif | ||
| 1396 | #ifdef CONFIG_TRACING | ||
| 1397 | /* state flags for use by tracers */ | ||
| 1398 | unsigned long trace; | ||
| 1399 | #endif | ||
| 1354 | }; | 1400 | }; |
| 1355 | 1401 | ||
| 1356 | /* | 1402 | /* |
| @@ -1589,12 +1635,12 @@ extern cputime_t task_gtime(struct task_struct *p); | |||
| 1589 | 1635 | ||
| 1590 | #ifdef CONFIG_SMP | 1636 | #ifdef CONFIG_SMP |
| 1591 | extern int set_cpus_allowed_ptr(struct task_struct *p, | 1637 | extern int set_cpus_allowed_ptr(struct task_struct *p, |
| 1592 | const cpumask_t *new_mask); | 1638 | const struct cpumask *new_mask); |
| 1593 | #else | 1639 | #else |
| 1594 | static inline int set_cpus_allowed_ptr(struct task_struct *p, | 1640 | static inline int set_cpus_allowed_ptr(struct task_struct *p, |
| 1595 | const cpumask_t *new_mask) | 1641 | const struct cpumask *new_mask) |
| 1596 | { | 1642 | { |
| 1597 | if (!cpu_isset(0, *new_mask)) | 1643 | if (!cpumask_test_cpu(0, new_mask)) |
| 1598 | return -EINVAL; | 1644 | return -EINVAL; |
| 1599 | return 0; | 1645 | return 0; |
| 1600 | } | 1646 | } |
| @@ -2207,8 +2253,8 @@ __trace_special(void *__tr, void *__data, | |||
| 2207 | } | 2253 | } |
| 2208 | #endif | 2254 | #endif |
| 2209 | 2255 | ||
| 2210 | extern long sched_setaffinity(pid_t pid, const cpumask_t *new_mask); | 2256 | extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask); |
| 2211 | extern long sched_getaffinity(pid_t pid, cpumask_t *mask); | 2257 | extern long sched_getaffinity(pid_t pid, struct cpumask *mask); |
| 2212 | 2258 | ||
| 2213 | extern int sched_mc_power_savings, sched_smt_power_savings; | 2259 | extern int sched_mc_power_savings, sched_smt_power_savings; |
| 2214 | 2260 | ||
| @@ -2219,6 +2265,7 @@ extern void normalize_rt_tasks(void); | |||
| 2219 | extern struct task_group init_task_group; | 2265 | extern struct task_group init_task_group; |
| 2220 | #ifdef CONFIG_USER_SCHED | 2266 | #ifdef CONFIG_USER_SCHED |
| 2221 | extern struct task_group root_task_group; | 2267 | extern struct task_group root_task_group; |
| 2268 | extern void set_tg_uid(struct user_struct *user); | ||
| 2222 | #endif | 2269 | #endif |
| 2223 | 2270 | ||
| 2224 | extern struct task_group *sched_create_group(struct task_group *parent); | 2271 | extern struct task_group *sched_create_group(struct task_group *parent); |
diff --git a/include/linux/security.h b/include/linux/security.h index c13f1cec9abb..e3d4ecda2673 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
| @@ -1818,17 +1818,21 @@ static inline int security_settime(struct timespec *ts, struct timezone *tz) | |||
| 1818 | 1818 | ||
| 1819 | static inline int security_vm_enough_memory(long pages) | 1819 | static inline int security_vm_enough_memory(long pages) |
| 1820 | { | 1820 | { |
| 1821 | WARN_ON(current->mm == NULL); | ||
| 1821 | return cap_vm_enough_memory(current->mm, pages); | 1822 | return cap_vm_enough_memory(current->mm, pages); |
| 1822 | } | 1823 | } |
| 1823 | 1824 | ||
| 1824 | static inline int security_vm_enough_memory_kern(long pages) | 1825 | static inline int security_vm_enough_memory_mm(struct mm_struct *mm, long pages) |
| 1825 | { | 1826 | { |
| 1826 | return cap_vm_enough_memory(current->mm, pages); | 1827 | WARN_ON(mm == NULL); |
| 1828 | return cap_vm_enough_memory(mm, pages); | ||
| 1827 | } | 1829 | } |
| 1828 | 1830 | ||
| 1829 | static inline int security_vm_enough_memory_mm(struct mm_struct *mm, long pages) | 1831 | static inline int security_vm_enough_memory_kern(long pages) |
| 1830 | { | 1832 | { |
| 1831 | return cap_vm_enough_memory(mm, pages); | 1833 | /* If current->mm is a kernel thread then we will pass NULL, |
| 1834 | for this specific case that is fine */ | ||
| 1835 | return cap_vm_enough_memory(current->mm, pages); | ||
| 1832 | } | 1836 | } |
| 1833 | 1837 | ||
| 1834 | static inline int security_bprm_alloc(struct linux_binprm *bprm) | 1838 | static inline int security_bprm_alloc(struct linux_binprm *bprm) |
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h index dc50bcc282a8..b3dfa72f13b9 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h | |||
| @@ -34,6 +34,7 @@ struct seq_operations { | |||
| 34 | 34 | ||
| 35 | #define SEQ_SKIP 1 | 35 | #define SEQ_SKIP 1 |
| 36 | 36 | ||
| 37 | char *mangle_path(char *s, char *p, char *esc); | ||
| 37 | int seq_open(struct file *, const struct seq_operations *); | 38 | int seq_open(struct file *, const struct seq_operations *); |
| 38 | ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); | 39 | ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); |
| 39 | loff_t seq_lseek(struct file *, loff_t, int); | 40 | loff_t seq_lseek(struct file *, loff_t, int); |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index e27f216361fc..4e4f1277f3bf 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -155,6 +155,9 @@ | |||
| 155 | 155 | ||
| 156 | #define PORT_SC26XX 82 | 156 | #define PORT_SC26XX 82 |
| 157 | 157 | ||
| 158 | /* SH-SCI */ | ||
| 159 | #define PORT_SCIFA 83 | ||
| 160 | |||
| 158 | #ifdef __KERNEL__ | 161 | #ifdef __KERNEL__ |
| 159 | 162 | ||
| 160 | #include <linux/compiler.h> | 163 | #include <linux/compiler.h> |
diff --git a/include/linux/slab.h b/include/linux/slab.h index ba965c84ae06..000da12b5cf0 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
| @@ -23,6 +23,34 @@ | |||
| 23 | #define SLAB_CACHE_DMA 0x00004000UL /* Use GFP_DMA memory */ | 23 | #define SLAB_CACHE_DMA 0x00004000UL /* Use GFP_DMA memory */ |
| 24 | #define SLAB_STORE_USER 0x00010000UL /* DEBUG: Store the last owner for bug hunting */ | 24 | #define SLAB_STORE_USER 0x00010000UL /* DEBUG: Store the last owner for bug hunting */ |
| 25 | #define SLAB_PANIC 0x00040000UL /* Panic if kmem_cache_create() fails */ | 25 | #define SLAB_PANIC 0x00040000UL /* Panic if kmem_cache_create() fails */ |
| 26 | /* | ||
| 27 | * SLAB_DESTROY_BY_RCU - **WARNING** READ THIS! | ||
| 28 | * | ||
| 29 | * This delays freeing the SLAB page by a grace period, it does _NOT_ | ||
| 30 | * delay object freeing. This means that if you do kmem_cache_free() | ||
| 31 | * that memory location is free to be reused at any time. Thus it may | ||
| 32 | * be possible to see another object there in the same RCU grace period. | ||
| 33 | * | ||
| 34 | * This feature only ensures the memory location backing the object | ||
| 35 | * stays valid, the trick to using this is relying on an independent | ||
| 36 | * object validation pass. Something like: | ||
| 37 | * | ||
| 38 | * rcu_read_lock() | ||
| 39 | * again: | ||
| 40 | * obj = lockless_lookup(key); | ||
| 41 | * if (obj) { | ||
| 42 | * if (!try_get_ref(obj)) // might fail for free objects | ||
| 43 | * goto again; | ||
| 44 | * | ||
| 45 | * if (obj->key != key) { // not the object we expected | ||
| 46 | * put_ref(obj); | ||
| 47 | * goto again; | ||
| 48 | * } | ||
| 49 | * } | ||
| 50 | * rcu_read_unlock(); | ||
| 51 | * | ||
| 52 | * See also the comment on struct slab_rcu in mm/slab.c. | ||
| 53 | */ | ||
| 26 | #define SLAB_DESTROY_BY_RCU 0x00080000UL /* Defer freeing slabs to RCU */ | 54 | #define SLAB_DESTROY_BY_RCU 0x00080000UL /* Defer freeing slabs to RCU */ |
| 27 | #define SLAB_MEM_SPREAD 0x00100000UL /* Spread some memory over cpuset */ | 55 | #define SLAB_MEM_SPREAD 0x00100000UL /* Spread some memory over cpuset */ |
| 28 | #define SLAB_TRACE 0x00200000UL /* Trace allocations and frees */ | 56 | #define SLAB_TRACE 0x00200000UL /* Trace allocations and frees */ |
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h index e530026eedf7..17d9b58f6379 100644 --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h | |||
| @@ -427,12 +427,16 @@ static inline int ssb_dma_mapping_error(struct ssb_device *dev, dma_addr_t addr) | |||
| 427 | { | 427 | { |
| 428 | switch (dev->bus->bustype) { | 428 | switch (dev->bus->bustype) { |
| 429 | case SSB_BUSTYPE_PCI: | 429 | case SSB_BUSTYPE_PCI: |
| 430 | #ifdef CONFIG_SSB_PCIHOST | ||
| 430 | return pci_dma_mapping_error(dev->bus->host_pci, addr); | 431 | return pci_dma_mapping_error(dev->bus->host_pci, addr); |
| 432 | #endif | ||
| 433 | break; | ||
| 431 | case SSB_BUSTYPE_SSB: | 434 | case SSB_BUSTYPE_SSB: |
| 432 | return dma_mapping_error(dev->dev, addr); | 435 | return dma_mapping_error(dev->dev, addr); |
| 433 | default: | 436 | default: |
| 434 | __ssb_dma_not_implemented(dev); | 437 | break; |
| 435 | } | 438 | } |
| 439 | __ssb_dma_not_implemented(dev); | ||
| 436 | return -ENOSYS; | 440 | return -ENOSYS; |
| 437 | } | 441 | } |
| 438 | 442 | ||
| @@ -441,12 +445,16 @@ static inline dma_addr_t ssb_dma_map_single(struct ssb_device *dev, void *p, | |||
| 441 | { | 445 | { |
| 442 | switch (dev->bus->bustype) { | 446 | switch (dev->bus->bustype) { |
| 443 | case SSB_BUSTYPE_PCI: | 447 | case SSB_BUSTYPE_PCI: |
| 448 | #ifdef CONFIG_SSB_PCIHOST | ||
| 444 | return pci_map_single(dev->bus->host_pci, p, size, dir); | 449 | return pci_map_single(dev->bus->host_pci, p, size, dir); |
| 450 | #endif | ||
| 451 | break; | ||
| 445 | case SSB_BUSTYPE_SSB: | 452 | case SSB_BUSTYPE_SSB: |
| 446 | return dma_map_single(dev->dev, p, size, dir); | 453 | return dma_map_single(dev->dev, p, size, dir); |
| 447 | default: | 454 | default: |
| 448 | __ssb_dma_not_implemented(dev); | 455 | break; |
| 449 | } | 456 | } |
| 457 | __ssb_dma_not_implemented(dev); | ||
| 450 | return 0; | 458 | return 0; |
| 451 | } | 459 | } |
| 452 | 460 | ||
| @@ -455,14 +463,18 @@ static inline void ssb_dma_unmap_single(struct ssb_device *dev, dma_addr_t dma_a | |||
| 455 | { | 463 | { |
| 456 | switch (dev->bus->bustype) { | 464 | switch (dev->bus->bustype) { |
| 457 | case SSB_BUSTYPE_PCI: | 465 | case SSB_BUSTYPE_PCI: |
| 466 | #ifdef CONFIG_SSB_PCIHOST | ||
| 458 | pci_unmap_single(dev->bus->host_pci, dma_addr, size, dir); | 467 | pci_unmap_single(dev->bus->host_pci, dma_addr, size, dir); |
| 459 | return; | 468 | return; |
| 469 | #endif | ||
| 470 | break; | ||
| 460 | case SSB_BUSTYPE_SSB: | 471 | case SSB_BUSTYPE_SSB: |
| 461 | dma_unmap_single(dev->dev, dma_addr, size, dir); | 472 | dma_unmap_single(dev->dev, dma_addr, size, dir); |
| 462 | return; | 473 | return; |
| 463 | default: | 474 | default: |
| 464 | __ssb_dma_not_implemented(dev); | 475 | break; |
| 465 | } | 476 | } |
| 477 | __ssb_dma_not_implemented(dev); | ||
| 466 | } | 478 | } |
| 467 | 479 | ||
| 468 | static inline void ssb_dma_sync_single_for_cpu(struct ssb_device *dev, | 480 | static inline void ssb_dma_sync_single_for_cpu(struct ssb_device *dev, |
| @@ -472,15 +484,19 @@ static inline void ssb_dma_sync_single_for_cpu(struct ssb_device *dev, | |||
| 472 | { | 484 | { |
| 473 | switch (dev->bus->bustype) { | 485 | switch (dev->bus->bustype) { |
| 474 | case SSB_BUSTYPE_PCI: | 486 | case SSB_BUSTYPE_PCI: |
| 487 | #ifdef CONFIG_SSB_PCIHOST | ||
| 475 | pci_dma_sync_single_for_cpu(dev->bus->host_pci, dma_addr, | 488 | pci_dma_sync_single_for_cpu(dev->bus->host_pci, dma_addr, |
| 476 | size, dir); | 489 | size, dir); |
| 477 | return; | 490 | return; |
| 491 | #endif | ||
| 492 | break; | ||
| 478 | case SSB_BUSTYPE_SSB: | 493 | case SSB_BUSTYPE_SSB: |
| 479 | dma_sync_single_for_cpu(dev->dev, dma_addr, size, dir); | 494 | dma_sync_single_for_cpu(dev->dev, dma_addr, size, dir); |
| 480 | return; | 495 | return; |
| 481 | default: | 496 | default: |
| 482 | __ssb_dma_not_implemented(dev); | 497 | break; |
| 483 | } | 498 | } |
| 499 | __ssb_dma_not_implemented(dev); | ||
| 484 | } | 500 | } |
| 485 | 501 | ||
| 486 | static inline void ssb_dma_sync_single_for_device(struct ssb_device *dev, | 502 | static inline void ssb_dma_sync_single_for_device(struct ssb_device *dev, |
| @@ -490,15 +506,19 @@ static inline void ssb_dma_sync_single_for_device(struct ssb_device *dev, | |||
| 490 | { | 506 | { |
| 491 | switch (dev->bus->bustype) { | 507 | switch (dev->bus->bustype) { |
| 492 | case SSB_BUSTYPE_PCI: | 508 | case SSB_BUSTYPE_PCI: |
| 509 | #ifdef CONFIG_SSB_PCIHOST | ||
| 493 | pci_dma_sync_single_for_device(dev->bus->host_pci, dma_addr, | 510 | pci_dma_sync_single_for_device(dev->bus->host_pci, dma_addr, |
| 494 | size, dir); | 511 | size, dir); |
| 495 | return; | 512 | return; |
| 513 | #endif | ||
| 514 | break; | ||
| 496 | case SSB_BUSTYPE_SSB: | 515 | case SSB_BUSTYPE_SSB: |
| 497 | dma_sync_single_for_device(dev->dev, dma_addr, size, dir); | 516 | dma_sync_single_for_device(dev->dev, dma_addr, size, dir); |
| 498 | return; | 517 | return; |
| 499 | default: | 518 | default: |
| 500 | __ssb_dma_not_implemented(dev); | 519 | break; |
| 501 | } | 520 | } |
| 521 | __ssb_dma_not_implemented(dev); | ||
| 502 | } | 522 | } |
| 503 | 523 | ||
| 504 | static inline void ssb_dma_sync_single_range_for_cpu(struct ssb_device *dev, | 524 | static inline void ssb_dma_sync_single_range_for_cpu(struct ssb_device *dev, |
| @@ -509,17 +529,21 @@ static inline void ssb_dma_sync_single_range_for_cpu(struct ssb_device *dev, | |||
| 509 | { | 529 | { |
| 510 | switch (dev->bus->bustype) { | 530 | switch (dev->bus->bustype) { |
| 511 | case SSB_BUSTYPE_PCI: | 531 | case SSB_BUSTYPE_PCI: |
| 532 | #ifdef CONFIG_SSB_PCIHOST | ||
| 512 | /* Just sync everything. That's all the PCI API can do. */ | 533 | /* Just sync everything. That's all the PCI API can do. */ |
| 513 | pci_dma_sync_single_for_cpu(dev->bus->host_pci, dma_addr, | 534 | pci_dma_sync_single_for_cpu(dev->bus->host_pci, dma_addr, |
| 514 | offset + size, dir); | 535 | offset + size, dir); |
| 515 | return; | 536 | return; |
| 537 | #endif | ||
| 538 | break; | ||
| 516 | case SSB_BUSTYPE_SSB: | 539 | case SSB_BUSTYPE_SSB: |
| 517 | dma_sync_single_range_for_cpu(dev->dev, dma_addr, offset, | 540 | dma_sync_single_range_for_cpu(dev->dev, dma_addr, offset, |
| 518 | size, dir); | 541 | size, dir); |
| 519 | return; | 542 | return; |
| 520 | default: | 543 | default: |
| 521 | __ssb_dma_not_implemented(dev); | 544 | break; |
| 522 | } | 545 | } |
| 546 | __ssb_dma_not_implemented(dev); | ||
| 523 | } | 547 | } |
| 524 | 548 | ||
| 525 | static inline void ssb_dma_sync_single_range_for_device(struct ssb_device *dev, | 549 | static inline void ssb_dma_sync_single_range_for_device(struct ssb_device *dev, |
| @@ -530,17 +554,21 @@ static inline void ssb_dma_sync_single_range_for_device(struct ssb_device *dev, | |||
| 530 | { | 554 | { |
| 531 | switch (dev->bus->bustype) { | 555 | switch (dev->bus->bustype) { |
| 532 | case SSB_BUSTYPE_PCI: | 556 | case SSB_BUSTYPE_PCI: |
| 557 | #ifdef CONFIG_SSB_PCIHOST | ||
| 533 | /* Just sync everything. That's all the PCI API can do. */ | 558 | /* Just sync everything. That's all the PCI API can do. */ |
| 534 | pci_dma_sync_single_for_device(dev->bus->host_pci, dma_addr, | 559 | pci_dma_sync_single_for_device(dev->bus->host_pci, dma_addr, |
| 535 | offset + size, dir); | 560 | offset + size, dir); |
| 536 | return; | 561 | return; |
| 562 | #endif | ||
| 563 | break; | ||
| 537 | case SSB_BUSTYPE_SSB: | 564 | case SSB_BUSTYPE_SSB: |
| 538 | dma_sync_single_range_for_device(dev->dev, dma_addr, offset, | 565 | dma_sync_single_range_for_device(dev->dev, dma_addr, offset, |
| 539 | size, dir); | 566 | size, dir); |
| 540 | return; | 567 | return; |
| 541 | default: | 568 | default: |
| 542 | __ssb_dma_not_implemented(dev); | 569 | break; |
| 543 | } | 570 | } |
| 571 | __ssb_dma_not_implemented(dev); | ||
| 544 | } | 572 | } |
| 545 | 573 | ||
| 546 | 574 | ||
diff --git a/include/linux/stacktrace.h b/include/linux/stacktrace.h index b106fd8e0d5c..1a8cecc4f38c 100644 --- a/include/linux/stacktrace.h +++ b/include/linux/stacktrace.h | |||
| @@ -15,9 +15,17 @@ extern void save_stack_trace_tsk(struct task_struct *tsk, | |||
| 15 | struct stack_trace *trace); | 15 | struct stack_trace *trace); |
| 16 | 16 | ||
| 17 | extern void print_stack_trace(struct stack_trace *trace, int spaces); | 17 | extern void print_stack_trace(struct stack_trace *trace, int spaces); |
| 18 | |||
| 19 | #ifdef CONFIG_USER_STACKTRACE_SUPPORT | ||
| 20 | extern void save_stack_trace_user(struct stack_trace *trace); | ||
| 21 | #else | ||
| 22 | # define save_stack_trace_user(trace) do { } while (0) | ||
| 23 | #endif | ||
| 24 | |||
| 18 | #else | 25 | #else |
| 19 | # define save_stack_trace(trace) do { } while (0) | 26 | # define save_stack_trace(trace) do { } while (0) |
| 20 | # define save_stack_trace_tsk(tsk, trace) do { } while (0) | 27 | # define save_stack_trace_tsk(tsk, trace) do { } while (0) |
| 28 | # define save_stack_trace_user(trace) do { } while (0) | ||
| 21 | # define print_stack_trace(trace, spaces) do { } while (0) | 29 | # define print_stack_trace(trace, spaces) do { } while (0) |
| 22 | #endif | 30 | #endif |
| 23 | 31 | ||
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index d6ff145919ca..04fb47bfb920 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -410,8 +410,7 @@ asmlinkage long sys_getsockopt(int fd, int level, int optname, | |||
| 410 | asmlinkage long sys_bind(int, struct sockaddr __user *, int); | 410 | asmlinkage long sys_bind(int, struct sockaddr __user *, int); |
| 411 | asmlinkage long sys_connect(int, struct sockaddr __user *, int); | 411 | asmlinkage long sys_connect(int, struct sockaddr __user *, int); |
| 412 | asmlinkage long sys_accept(int, struct sockaddr __user *, int __user *); | 412 | asmlinkage long sys_accept(int, struct sockaddr __user *, int __user *); |
| 413 | asmlinkage long sys_paccept(int, struct sockaddr __user *, int __user *, | 413 | asmlinkage long sys_accept4(int, struct sockaddr __user *, int __user *, int); |
| 414 | const __user sigset_t *, size_t, int); | ||
| 415 | asmlinkage long sys_getsockname(int, struct sockaddr __user *, int __user *); | 414 | asmlinkage long sys_getsockname(int, struct sockaddr __user *, int __user *); |
| 416 | asmlinkage long sys_getpeername(int, struct sockaddr __user *, int __user *); | 415 | asmlinkage long sys_getpeername(int, struct sockaddr __user *, int __user *); |
| 417 | asmlinkage long sys_send(int, void __user *, size_t, unsigned); | 416 | asmlinkage long sys_send(int, void __user *, size_t, unsigned); |
diff --git a/include/linux/telephony.h b/include/linux/telephony.h index 5b2b6261f193..f63afe330add 100644 --- a/include/linux/telephony.h +++ b/include/linux/telephony.h | |||
| @@ -14,7 +14,7 @@ | |||
| 14 | * Authors: Ed Okerson, <eokerson@quicknet.net> | 14 | * Authors: Ed Okerson, <eokerson@quicknet.net> |
| 15 | * Greg Herlein, <gherlein@quicknet.net> | 15 | * Greg Herlein, <gherlein@quicknet.net> |
| 16 | * | 16 | * |
| 17 | * Contributors: Alan Cox, <alan@redhat.com> | 17 | * Contributors: Alan Cox, <alan@lxorguk.ukuu.org.uk> |
| 18 | * David W. Erhart, <derhart@quicknet.net> | 18 | * David W. Erhart, <derhart@quicknet.net> |
| 19 | * | 19 | * |
| 20 | * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR | 20 | * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR |
diff --git a/include/linux/topology.h b/include/linux/topology.h index 117f1b7405cf..0c5b5ac36d8e 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h | |||
| @@ -49,7 +49,7 @@ | |||
| 49 | for_each_online_node(node) \ | 49 | for_each_online_node(node) \ |
| 50 | if (nr_cpus_node(node)) | 50 | if (nr_cpus_node(node)) |
| 51 | 51 | ||
| 52 | void arch_update_cpu_topology(void); | 52 | int arch_update_cpu_topology(void); |
| 53 | 53 | ||
| 54 | /* Conform to ACPI 2.0 SLIT distance definitions */ | 54 | /* Conform to ACPI 2.0 SLIT distance definitions */ |
| 55 | #define LOCAL_DISTANCE 10 | 55 | #define LOCAL_DISTANCE 10 |
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index c5bb39c7a770..757005458366 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h | |||
| @@ -24,8 +24,12 @@ struct tracepoint { | |||
| 24 | const char *name; /* Tracepoint name */ | 24 | const char *name; /* Tracepoint name */ |
| 25 | int state; /* State. */ | 25 | int state; /* State. */ |
| 26 | void **funcs; | 26 | void **funcs; |
| 27 | } __attribute__((aligned(8))); | 27 | } __attribute__((aligned(32))); /* |
| 28 | 28 | * Aligned on 32 bytes because it is | |
| 29 | * globally visible and gcc happily | ||
| 30 | * align these on the structure size. | ||
| 31 | * Keep in sync with vmlinux.lds.h. | ||
| 32 | */ | ||
| 29 | 33 | ||
| 30 | #define TPPROTO(args...) args | 34 | #define TPPROTO(args...) args |
| 31 | #define TPARGS(args...) args | 35 | #define TPARGS(args...) args |
| @@ -40,14 +44,14 @@ struct tracepoint { | |||
| 40 | do { \ | 44 | do { \ |
| 41 | void **it_func; \ | 45 | void **it_func; \ |
| 42 | \ | 46 | \ |
| 43 | rcu_read_lock_sched(); \ | 47 | rcu_read_lock_sched_notrace(); \ |
| 44 | it_func = rcu_dereference((tp)->funcs); \ | 48 | it_func = rcu_dereference((tp)->funcs); \ |
| 45 | if (it_func) { \ | 49 | if (it_func) { \ |
| 46 | do { \ | 50 | do { \ |
| 47 | ((void(*)(proto))(*it_func))(args); \ | 51 | ((void(*)(proto))(*it_func))(args); \ |
| 48 | } while (*(++it_func)); \ | 52 | } while (*(++it_func)); \ |
| 49 | } \ | 53 | } \ |
| 50 | rcu_read_unlock_sched(); \ | 54 | rcu_read_unlock_sched_notrace(); \ |
| 51 | } while (0) | 55 | } while (0) |
| 52 | 56 | ||
| 53 | /* | 57 | /* |
| @@ -55,35 +59,40 @@ struct tracepoint { | |||
| 55 | * not add unwanted padding between the beginning of the section and the | 59 | * not add unwanted padding between the beginning of the section and the |
| 56 | * structure. Force alignment to the same alignment as the section start. | 60 | * structure. Force alignment to the same alignment as the section start. |
| 57 | */ | 61 | */ |
| 58 | #define DEFINE_TRACE(name, proto, args) \ | 62 | #define DECLARE_TRACE(name, proto, args) \ |
| 63 | extern struct tracepoint __tracepoint_##name; \ | ||
| 59 | static inline void trace_##name(proto) \ | 64 | static inline void trace_##name(proto) \ |
| 60 | { \ | 65 | { \ |
| 61 | static const char __tpstrtab_##name[] \ | ||
| 62 | __attribute__((section("__tracepoints_strings"))) \ | ||
| 63 | = #name ":" #proto; \ | ||
| 64 | static struct tracepoint __tracepoint_##name \ | ||
| 65 | __attribute__((section("__tracepoints"), aligned(8))) = \ | ||
| 66 | { __tpstrtab_##name, 0, NULL }; \ | ||
| 67 | if (unlikely(__tracepoint_##name.state)) \ | 66 | if (unlikely(__tracepoint_##name.state)) \ |
| 68 | __DO_TRACE(&__tracepoint_##name, \ | 67 | __DO_TRACE(&__tracepoint_##name, \ |
| 69 | TPPROTO(proto), TPARGS(args)); \ | 68 | TPPROTO(proto), TPARGS(args)); \ |
| 70 | } \ | 69 | } \ |
| 71 | static inline int register_trace_##name(void (*probe)(proto)) \ | 70 | static inline int register_trace_##name(void (*probe)(proto)) \ |
| 72 | { \ | 71 | { \ |
| 73 | return tracepoint_probe_register(#name ":" #proto, \ | 72 | return tracepoint_probe_register(#name, (void *)probe); \ |
| 74 | (void *)probe); \ | ||
| 75 | } \ | 73 | } \ |
| 76 | static inline void unregister_trace_##name(void (*probe)(proto))\ | 74 | static inline int unregister_trace_##name(void (*probe)(proto)) \ |
| 77 | { \ | 75 | { \ |
| 78 | tracepoint_probe_unregister(#name ":" #proto, \ | 76 | return tracepoint_probe_unregister(#name, (void *)probe);\ |
| 79 | (void *)probe); \ | ||
| 80 | } | 77 | } |
| 81 | 78 | ||
| 79 | #define DEFINE_TRACE(name) \ | ||
| 80 | static const char __tpstrtab_##name[] \ | ||
| 81 | __attribute__((section("__tracepoints_strings"))) = #name; \ | ||
| 82 | struct tracepoint __tracepoint_##name \ | ||
| 83 | __attribute__((section("__tracepoints"), aligned(32))) = \ | ||
| 84 | { __tpstrtab_##name, 0, NULL } | ||
| 85 | |||
| 86 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) \ | ||
| 87 | EXPORT_SYMBOL_GPL(__tracepoint_##name) | ||
| 88 | #define EXPORT_TRACEPOINT_SYMBOL(name) \ | ||
| 89 | EXPORT_SYMBOL(__tracepoint_##name) | ||
| 90 | |||
| 82 | extern void tracepoint_update_probe_range(struct tracepoint *begin, | 91 | extern void tracepoint_update_probe_range(struct tracepoint *begin, |
| 83 | struct tracepoint *end); | 92 | struct tracepoint *end); |
| 84 | 93 | ||
| 85 | #else /* !CONFIG_TRACEPOINTS */ | 94 | #else /* !CONFIG_TRACEPOINTS */ |
| 86 | #define DEFINE_TRACE(name, proto, args) \ | 95 | #define DECLARE_TRACE(name, proto, args) \ |
| 87 | static inline void _do_trace_##name(struct tracepoint *tp, proto) \ | 96 | static inline void _do_trace_##name(struct tracepoint *tp, proto) \ |
| 88 | { } \ | 97 | { } \ |
| 89 | static inline void trace_##name(proto) \ | 98 | static inline void trace_##name(proto) \ |
| @@ -92,8 +101,14 @@ extern void tracepoint_update_probe_range(struct tracepoint *begin, | |||
| 92 | { \ | 101 | { \ |
| 93 | return -ENOSYS; \ | 102 | return -ENOSYS; \ |
| 94 | } \ | 103 | } \ |
| 95 | static inline void unregister_trace_##name(void (*probe)(proto))\ | 104 | static inline int unregister_trace_##name(void (*probe)(proto)) \ |
| 96 | { } | 105 | { \ |
| 106 | return -ENOSYS; \ | ||
| 107 | } | ||
| 108 | |||
| 109 | #define DEFINE_TRACE(name) | ||
| 110 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) | ||
| 111 | #define EXPORT_TRACEPOINT_SYMBOL(name) | ||
| 97 | 112 | ||
| 98 | static inline void tracepoint_update_probe_range(struct tracepoint *begin, | 113 | static inline void tracepoint_update_probe_range(struct tracepoint *begin, |
| 99 | struct tracepoint *end) | 114 | struct tracepoint *end) |
| @@ -112,6 +127,10 @@ extern int tracepoint_probe_register(const char *name, void *probe); | |||
| 112 | */ | 127 | */ |
| 113 | extern int tracepoint_probe_unregister(const char *name, void *probe); | 128 | extern int tracepoint_probe_unregister(const char *name, void *probe); |
| 114 | 129 | ||
| 130 | extern int tracepoint_probe_register_noupdate(const char *name, void *probe); | ||
| 131 | extern int tracepoint_probe_unregister_noupdate(const char *name, void *probe); | ||
| 132 | extern void tracepoint_probe_update_all(void); | ||
| 133 | |||
| 115 | struct tracepoint_iter { | 134 | struct tracepoint_iter { |
| 116 | struct module *module; | 135 | struct module *module; |
| 117 | struct tracepoint *tracepoint; | 136 | struct tracepoint *tracepoint; |
diff --git a/include/linux/tty.h b/include/linux/tty.h index 3b8121d4e36f..eaec37c9d83d 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
| @@ -325,7 +325,7 @@ extern struct class *tty_class; | |||
| 325 | * go away | 325 | * go away |
| 326 | */ | 326 | */ |
| 327 | 327 | ||
| 328 | extern inline struct tty_struct *tty_kref_get(struct tty_struct *tty) | 328 | static inline struct tty_struct *tty_kref_get(struct tty_struct *tty) |
| 329 | { | 329 | { |
| 330 | if (tty) | 330 | if (tty) |
| 331 | kref_get(&tty->kref); | 331 | kref_get(&tty->kref); |
diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h index fec6decfb983..6b58367d145e 100644 --- a/include/linux/uaccess.h +++ b/include/linux/uaccess.h | |||
| @@ -78,7 +78,7 @@ static inline unsigned long __copy_from_user_nocache(void *to, | |||
| 78 | \ | 78 | \ |
| 79 | set_fs(KERNEL_DS); \ | 79 | set_fs(KERNEL_DS); \ |
| 80 | pagefault_disable(); \ | 80 | pagefault_disable(); \ |
| 81 | ret = __get_user(retval, (__force typeof(retval) __user *)(addr)); \ | 81 | ret = __copy_from_user_inatomic(&(retval), (__force typeof(retval) __user *)(addr), sizeof(retval)); \ |
| 82 | pagefault_enable(); \ | 82 | pagefault_enable(); \ |
| 83 | set_fs(old_fs); \ | 83 | set_fs(old_fs); \ |
| 84 | ret; \ | 84 | ret; \ |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 8fa973bede5e..f72aa51f7bcd 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -108,6 +108,7 @@ enum usb_interface_condition { | |||
| 108 | * (in probe()), bound to a driver, or unbinding (in disconnect()) | 108 | * (in probe()), bound to a driver, or unbinding (in disconnect()) |
| 109 | * @is_active: flag set when the interface is bound and not suspended. | 109 | * @is_active: flag set when the interface is bound and not suspended. |
| 110 | * @sysfs_files_created: sysfs attributes exist | 110 | * @sysfs_files_created: sysfs attributes exist |
| 111 | * @unregistering: flag set when the interface is being unregistered | ||
| 111 | * @needs_remote_wakeup: flag set when the driver requires remote-wakeup | 112 | * @needs_remote_wakeup: flag set when the driver requires remote-wakeup |
| 112 | * capability during autosuspend. | 113 | * capability during autosuspend. |
| 113 | * @needs_altsetting0: flag set when a set-interface request for altsetting 0 | 114 | * @needs_altsetting0: flag set when a set-interface request for altsetting 0 |
| @@ -163,6 +164,7 @@ struct usb_interface { | |||
| 163 | enum usb_interface_condition condition; /* state of binding */ | 164 | enum usb_interface_condition condition; /* state of binding */ |
| 164 | unsigned is_active:1; /* the interface is not suspended */ | 165 | unsigned is_active:1; /* the interface is not suspended */ |
| 165 | unsigned sysfs_files_created:1; /* the sysfs attributes exist */ | 166 | unsigned sysfs_files_created:1; /* the sysfs attributes exist */ |
| 167 | unsigned unregistering:1; /* unregistration is in progress */ | ||
| 166 | unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */ | 168 | unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */ |
| 167 | unsigned needs_altsetting0:1; /* switch to altsetting 0 is pending */ | 169 | unsigned needs_altsetting0:1; /* switch to altsetting 0 is pending */ |
| 168 | unsigned needs_binding:1; /* needs delayed unbind/rebind */ | 170 | unsigned needs_binding:1; /* needs delayed unbind/rebind */ |
diff --git a/include/net/af_unix.h b/include/net/af_unix.h index c29ff1da8a18..1614d78c60ed 100644 --- a/include/net/af_unix.h +++ b/include/net/af_unix.h | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | extern void unix_inflight(struct file *fp); | 9 | extern void unix_inflight(struct file *fp); |
| 10 | extern void unix_notinflight(struct file *fp); | 10 | extern void unix_notinflight(struct file *fp); |
| 11 | extern void unix_gc(void); | 11 | extern void unix_gc(void); |
| 12 | extern void wait_for_unix_gc(void); | ||
| 12 | 13 | ||
| 13 | #define UNIX_HASH_SIZE 256 | 14 | #define UNIX_HASH_SIZE 256 |
| 14 | 15 | ||
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 8856e2d60e9f..73d81bc6aa75 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
| @@ -74,14 +74,6 @@ | |||
| 74 | */ | 74 | */ |
| 75 | 75 | ||
| 76 | /** | 76 | /** |
| 77 | * enum ieee80211_notification_type - Low level driver notification | ||
| 78 | * @IEEE80211_NOTIFY_RE_ASSOC: start the re-association sequence | ||
| 79 | */ | ||
| 80 | enum ieee80211_notification_types { | ||
| 81 | IEEE80211_NOTIFY_RE_ASSOC, | ||
| 82 | }; | ||
| 83 | |||
| 84 | /** | ||
| 85 | * struct ieee80211_ht_bss_info - describing BSS's HT characteristics | 77 | * struct ieee80211_ht_bss_info - describing BSS's HT characteristics |
| 86 | * | 78 | * |
| 87 | * This structure describes most essential parameters needed | 79 | * This structure describes most essential parameters needed |
| @@ -1798,18 +1790,6 @@ void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra, | |||
| 1798 | u16 tid); | 1790 | u16 tid); |
| 1799 | 1791 | ||
| 1800 | /** | 1792 | /** |
| 1801 | * ieee80211_notify_mac - low level driver notification | ||
| 1802 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | ||
| 1803 | * @notif_type: enum ieee80211_notification_types | ||
| 1804 | * | ||
| 1805 | * This function must be called by low level driver to inform mac80211 of | ||
| 1806 | * low level driver status change or force mac80211 to re-assoc for low | ||
| 1807 | * level driver internal error that require re-assoc. | ||
| 1808 | */ | ||
| 1809 | void ieee80211_notify_mac(struct ieee80211_hw *hw, | ||
| 1810 | enum ieee80211_notification_types notif_type); | ||
| 1811 | |||
| 1812 | /** | ||
| 1813 | * ieee80211_find_sta - find a station | 1793 | * ieee80211_find_sta - find a station |
| 1814 | * | 1794 | * |
| 1815 | * @hw: pointer as obtained from ieee80211_alloc_hw() | 1795 | * @hw: pointer as obtained from ieee80211_alloc_hw() |
diff --git a/include/net/request_sock.h b/include/net/request_sock.h index cac811e51f6d..c7190846e128 100644 --- a/include/net/request_sock.h +++ b/include/net/request_sock.h | |||
| @@ -31,6 +31,7 @@ struct request_sock_ops { | |||
| 31 | int family; | 31 | int family; |
| 32 | int obj_size; | 32 | int obj_size; |
| 33 | struct kmem_cache *slab; | 33 | struct kmem_cache *slab; |
| 34 | char *slab_name; | ||
| 34 | int (*rtx_syn_ack)(struct sock *sk, | 35 | int (*rtx_syn_ack)(struct sock *sk, |
| 35 | struct request_sock *req); | 36 | struct request_sock *req); |
| 36 | void (*send_ack)(struct sock *sk, struct sk_buff *skb, | 37 | void (*send_ack)(struct sock *sk, struct sk_buff *skb, |
diff --git a/include/net/sock.h b/include/net/sock.h index c04f9e18ea22..2f47107f6d0f 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
| @@ -815,7 +815,7 @@ static inline void sk_wmem_free_skb(struct sock *sk, struct sk_buff *skb) | |||
| 815 | */ | 815 | */ |
| 816 | #define sock_lock_init_class_and_name(sk, sname, skey, name, key) \ | 816 | #define sock_lock_init_class_and_name(sk, sname, skey, name, key) \ |
| 817 | do { \ | 817 | do { \ |
| 818 | sk->sk_lock.owned = 0; \ | 818 | sk->sk_lock.owned = 0; \ |
| 819 | init_waitqueue_head(&sk->sk_lock.wq); \ | 819 | init_waitqueue_head(&sk->sk_lock.wq); \ |
| 820 | spin_lock_init(&(sk)->sk_lock.slock); \ | 820 | spin_lock_init(&(sk)->sk_lock.slock); \ |
| 821 | debug_check_no_locks_freed((void *)&(sk)->sk_lock, \ | 821 | debug_check_no_locks_freed((void *)&(sk)->sk_lock, \ |
diff --git a/include/net/timewait_sock.h b/include/net/timewait_sock.h index 1e1ee3253fd8..97c3b14da55d 100644 --- a/include/net/timewait_sock.h +++ b/include/net/timewait_sock.h | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | 16 | ||
| 17 | struct timewait_sock_ops { | 17 | struct timewait_sock_ops { |
| 18 | struct kmem_cache *twsk_slab; | 18 | struct kmem_cache *twsk_slab; |
| 19 | char *twsk_slab_name; | ||
| 19 | unsigned int twsk_obj_size; | 20 | unsigned int twsk_obj_size; |
| 20 | int (*twsk_unique)(struct sock *sk, | 21 | int (*twsk_unique)(struct sock *sk, |
| 21 | struct sock *sktw, void *twp); | 22 | struct sock *sktw, void *twp); |
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index 49d8913c4f86..6e04e6fe79c7 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h | |||
| @@ -357,7 +357,7 @@ struct fc_rport { /* aka fc_starget_attrs */ | |||
| 357 | /* bit field values for struct fc_rport "flags" field: */ | 357 | /* bit field values for struct fc_rport "flags" field: */ |
| 358 | #define FC_RPORT_DEVLOSS_PENDING 0x01 | 358 | #define FC_RPORT_DEVLOSS_PENDING 0x01 |
| 359 | #define FC_RPORT_SCAN_PENDING 0x02 | 359 | #define FC_RPORT_SCAN_PENDING 0x02 |
| 360 | #define FC_RPORT_FAST_FAIL_TIMEDOUT 0x03 | 360 | #define FC_RPORT_FAST_FAIL_TIMEDOUT 0x04 |
| 361 | 361 | ||
| 362 | #define dev_to_rport(d) \ | 362 | #define dev_to_rport(d) \ |
| 363 | container_of(d, struct fc_rport, dev) | 363 | container_of(d, struct fc_rport, dev) |
diff --git a/include/trace/block.h b/include/trace/block.h new file mode 100644 index 000000000000..25c6a1fd5b77 --- /dev/null +++ b/include/trace/block.h | |||
| @@ -0,0 +1,76 @@ | |||
| 1 | #ifndef _TRACE_BLOCK_H | ||
| 2 | #define _TRACE_BLOCK_H | ||
| 3 | |||
| 4 | #include <linux/blkdev.h> | ||
| 5 | #include <linux/tracepoint.h> | ||
| 6 | |||
| 7 | DECLARE_TRACE(block_rq_abort, | ||
| 8 | TPPROTO(struct request_queue *q, struct request *rq), | ||
| 9 | TPARGS(q, rq)); | ||
| 10 | |||
| 11 | DECLARE_TRACE(block_rq_insert, | ||
| 12 | TPPROTO(struct request_queue *q, struct request *rq), | ||
| 13 | TPARGS(q, rq)); | ||
| 14 | |||
| 15 | DECLARE_TRACE(block_rq_issue, | ||
| 16 | TPPROTO(struct request_queue *q, struct request *rq), | ||
| 17 | TPARGS(q, rq)); | ||
| 18 | |||
| 19 | DECLARE_TRACE(block_rq_requeue, | ||
| 20 | TPPROTO(struct request_queue *q, struct request *rq), | ||
| 21 | TPARGS(q, rq)); | ||
| 22 | |||
| 23 | DECLARE_TRACE(block_rq_complete, | ||
| 24 | TPPROTO(struct request_queue *q, struct request *rq), | ||
| 25 | TPARGS(q, rq)); | ||
| 26 | |||
| 27 | DECLARE_TRACE(block_bio_bounce, | ||
| 28 | TPPROTO(struct request_queue *q, struct bio *bio), | ||
| 29 | TPARGS(q, bio)); | ||
| 30 | |||
| 31 | DECLARE_TRACE(block_bio_complete, | ||
| 32 | TPPROTO(struct request_queue *q, struct bio *bio), | ||
| 33 | TPARGS(q, bio)); | ||
| 34 | |||
| 35 | DECLARE_TRACE(block_bio_backmerge, | ||
| 36 | TPPROTO(struct request_queue *q, struct bio *bio), | ||
| 37 | TPARGS(q, bio)); | ||
| 38 | |||
| 39 | DECLARE_TRACE(block_bio_frontmerge, | ||
| 40 | TPPROTO(struct request_queue *q, struct bio *bio), | ||
| 41 | TPARGS(q, bio)); | ||
| 42 | |||
| 43 | DECLARE_TRACE(block_bio_queue, | ||
| 44 | TPPROTO(struct request_queue *q, struct bio *bio), | ||
| 45 | TPARGS(q, bio)); | ||
| 46 | |||
| 47 | DECLARE_TRACE(block_getrq, | ||
| 48 | TPPROTO(struct request_queue *q, struct bio *bio, int rw), | ||
| 49 | TPARGS(q, bio, rw)); | ||
| 50 | |||
| 51 | DECLARE_TRACE(block_sleeprq, | ||
| 52 | TPPROTO(struct request_queue *q, struct bio *bio, int rw), | ||
| 53 | TPARGS(q, bio, rw)); | ||
| 54 | |||
| 55 | DECLARE_TRACE(block_plug, | ||
| 56 | TPPROTO(struct request_queue *q), | ||
| 57 | TPARGS(q)); | ||
| 58 | |||
| 59 | DECLARE_TRACE(block_unplug_timer, | ||
| 60 | TPPROTO(struct request_queue *q), | ||
| 61 | TPARGS(q)); | ||
| 62 | |||
| 63 | DECLARE_TRACE(block_unplug_io, | ||
| 64 | TPPROTO(struct request_queue *q), | ||
| 65 | TPARGS(q)); | ||
| 66 | |||
| 67 | DECLARE_TRACE(block_split, | ||
| 68 | TPPROTO(struct request_queue *q, struct bio *bio, unsigned int pdu), | ||
| 69 | TPARGS(q, bio, pdu)); | ||
| 70 | |||
| 71 | DECLARE_TRACE(block_remap, | ||
| 72 | TPPROTO(struct request_queue *q, struct bio *bio, dev_t dev, | ||
| 73 | sector_t from, sector_t to), | ||
| 74 | TPARGS(q, bio, dev, from, to)); | ||
| 75 | |||
| 76 | #endif | ||
diff --git a/include/trace/boot.h b/include/trace/boot.h new file mode 100644 index 000000000000..088ea089e31d --- /dev/null +++ b/include/trace/boot.h | |||
| @@ -0,0 +1,60 @@ | |||
| 1 | #ifndef _LINUX_TRACE_BOOT_H | ||
| 2 | #define _LINUX_TRACE_BOOT_H | ||
| 3 | |||
| 4 | #include <linux/module.h> | ||
| 5 | #include <linux/kallsyms.h> | ||
| 6 | #include <linux/init.h> | ||
| 7 | |||
| 8 | /* | ||
| 9 | * Structure which defines the trace of an initcall | ||
| 10 | * while it is called. | ||
| 11 | * You don't have to fill the func field since it is | ||
| 12 | * only used internally by the tracer. | ||
| 13 | */ | ||
| 14 | struct boot_trace_call { | ||
| 15 | pid_t caller; | ||
| 16 | char func[KSYM_SYMBOL_LEN]; | ||
| 17 | }; | ||
| 18 | |||
| 19 | /* | ||
| 20 | * Structure which defines the trace of an initcall | ||
| 21 | * while it returns. | ||
| 22 | */ | ||
| 23 | struct boot_trace_ret { | ||
| 24 | char func[KSYM_SYMBOL_LEN]; | ||
| 25 | int result; | ||
| 26 | unsigned long long duration; /* nsecs */ | ||
| 27 | }; | ||
| 28 | |||
| 29 | #ifdef CONFIG_BOOT_TRACER | ||
| 30 | /* Append the traces on the ring-buffer */ | ||
| 31 | extern void trace_boot_call(struct boot_trace_call *bt, initcall_t fn); | ||
| 32 | extern void trace_boot_ret(struct boot_trace_ret *bt, initcall_t fn); | ||
| 33 | |||
| 34 | /* Tells the tracer that smp_pre_initcall is finished. | ||
| 35 | * So we can start the tracing | ||
| 36 | */ | ||
| 37 | extern void start_boot_trace(void); | ||
| 38 | |||
| 39 | /* Resume the tracing of other necessary events | ||
| 40 | * such as sched switches | ||
| 41 | */ | ||
| 42 | extern void enable_boot_trace(void); | ||
| 43 | |||
| 44 | /* Suspend this tracing. Actually, only sched_switches tracing have | ||
| 45 | * to be suspended. Initcalls doesn't need it.) | ||
| 46 | */ | ||
| 47 | extern void disable_boot_trace(void); | ||
| 48 | #else | ||
| 49 | static inline | ||
| 50 | void trace_boot_call(struct boot_trace_call *bt, initcall_t fn) { } | ||
| 51 | |||
| 52 | static inline | ||
| 53 | void trace_boot_ret(struct boot_trace_ret *bt, initcall_t fn) { } | ||
| 54 | |||
| 55 | static inline void start_boot_trace(void) { } | ||
| 56 | static inline void enable_boot_trace(void) { } | ||
| 57 | static inline void disable_boot_trace(void) { } | ||
| 58 | #endif /* CONFIG_BOOT_TRACER */ | ||
| 59 | |||
| 60 | #endif /* __LINUX_TRACE_BOOT_H */ | ||
diff --git a/include/trace/sched.h b/include/trace/sched.h index ad47369d01b5..9b2854abf7e2 100644 --- a/include/trace/sched.h +++ b/include/trace/sched.h | |||
| @@ -4,52 +4,52 @@ | |||
| 4 | #include <linux/sched.h> | 4 | #include <linux/sched.h> |
| 5 | #include <linux/tracepoint.h> | 5 | #include <linux/tracepoint.h> |
| 6 | 6 | ||
| 7 | DEFINE_TRACE(sched_kthread_stop, | 7 | DECLARE_TRACE(sched_kthread_stop, |
| 8 | TPPROTO(struct task_struct *t), | 8 | TPPROTO(struct task_struct *t), |
| 9 | TPARGS(t)); | 9 | TPARGS(t)); |
| 10 | 10 | ||
| 11 | DEFINE_TRACE(sched_kthread_stop_ret, | 11 | DECLARE_TRACE(sched_kthread_stop_ret, |
| 12 | TPPROTO(int ret), | 12 | TPPROTO(int ret), |
| 13 | TPARGS(ret)); | 13 | TPARGS(ret)); |
| 14 | 14 | ||
| 15 | DEFINE_TRACE(sched_wait_task, | 15 | DECLARE_TRACE(sched_wait_task, |
| 16 | TPPROTO(struct rq *rq, struct task_struct *p), | 16 | TPPROTO(struct rq *rq, struct task_struct *p), |
| 17 | TPARGS(rq, p)); | 17 | TPARGS(rq, p)); |
| 18 | 18 | ||
| 19 | DEFINE_TRACE(sched_wakeup, | 19 | DECLARE_TRACE(sched_wakeup, |
| 20 | TPPROTO(struct rq *rq, struct task_struct *p), | 20 | TPPROTO(struct rq *rq, struct task_struct *p), |
| 21 | TPARGS(rq, p)); | 21 | TPARGS(rq, p)); |
| 22 | 22 | ||
| 23 | DEFINE_TRACE(sched_wakeup_new, | 23 | DECLARE_TRACE(sched_wakeup_new, |
| 24 | TPPROTO(struct rq *rq, struct task_struct *p), | 24 | TPPROTO(struct rq *rq, struct task_struct *p), |
| 25 | TPARGS(rq, p)); | 25 | TPARGS(rq, p)); |
| 26 | 26 | ||
| 27 | DEFINE_TRACE(sched_switch, | 27 | DECLARE_TRACE(sched_switch, |
| 28 | TPPROTO(struct rq *rq, struct task_struct *prev, | 28 | TPPROTO(struct rq *rq, struct task_struct *prev, |
| 29 | struct task_struct *next), | 29 | struct task_struct *next), |
| 30 | TPARGS(rq, prev, next)); | 30 | TPARGS(rq, prev, next)); |
| 31 | 31 | ||
| 32 | DEFINE_TRACE(sched_migrate_task, | 32 | DECLARE_TRACE(sched_migrate_task, |
| 33 | TPPROTO(struct rq *rq, struct task_struct *p, int dest_cpu), | 33 | TPPROTO(struct rq *rq, struct task_struct *p, int dest_cpu), |
| 34 | TPARGS(rq, p, dest_cpu)); | 34 | TPARGS(rq, p, dest_cpu)); |
| 35 | 35 | ||
| 36 | DEFINE_TRACE(sched_process_free, | 36 | DECLARE_TRACE(sched_process_free, |
| 37 | TPPROTO(struct task_struct *p), | 37 | TPPROTO(struct task_struct *p), |
| 38 | TPARGS(p)); | 38 | TPARGS(p)); |
| 39 | 39 | ||
| 40 | DEFINE_TRACE(sched_process_exit, | 40 | DECLARE_TRACE(sched_process_exit, |
| 41 | TPPROTO(struct task_struct *p), | 41 | TPPROTO(struct task_struct *p), |
| 42 | TPARGS(p)); | 42 | TPARGS(p)); |
| 43 | 43 | ||
| 44 | DEFINE_TRACE(sched_process_wait, | 44 | DECLARE_TRACE(sched_process_wait, |
| 45 | TPPROTO(struct pid *pid), | 45 | TPPROTO(struct pid *pid), |
| 46 | TPARGS(pid)); | 46 | TPARGS(pid)); |
| 47 | 47 | ||
| 48 | DEFINE_TRACE(sched_process_fork, | 48 | DECLARE_TRACE(sched_process_fork, |
| 49 | TPPROTO(struct task_struct *parent, struct task_struct *child), | 49 | TPPROTO(struct task_struct *parent, struct task_struct *child), |
| 50 | TPARGS(parent, child)); | 50 | TPARGS(parent, child)); |
| 51 | 51 | ||
| 52 | DEFINE_TRACE(sched_signal_send, | 52 | DECLARE_TRACE(sched_signal_send, |
| 53 | TPPROTO(int sig, struct task_struct *p), | 53 | TPPROTO(int sig, struct task_struct *p), |
| 54 | TPARGS(sig, p)); | 54 | TPARGS(sig, p)); |
| 55 | 55 | ||
diff --git a/include/video/atmel_lcdc.h b/include/video/atmel_lcdc.h index 6ad87f485992..0c864db1a466 100644 --- a/include/video/atmel_lcdc.h +++ b/include/video/atmel_lcdc.h | |||
| @@ -38,7 +38,7 @@ struct atmel_lcdfb_info { | |||
| 38 | spinlock_t lock; | 38 | spinlock_t lock; |
| 39 | struct fb_info *info; | 39 | struct fb_info *info; |
| 40 | void __iomem *mmio; | 40 | void __iomem *mmio; |
| 41 | unsigned long irq_base; | 41 | int irq_base; |
| 42 | struct work_struct task; | 42 | struct work_struct task; |
| 43 | 43 | ||
| 44 | unsigned int guard_time; | 44 | unsigned int guard_time; |
