diff options
| author | Olof Johansson <olof@lixom.net> | 2013-11-15 18:17:59 -0500 |
|---|---|---|
| committer | Olof Johansson <olof@lixom.net> | 2013-11-15 18:17:59 -0500 |
| commit | 6886059f2ef5d62c73e87a905e84fa4f87d56074 (patch) | |
| tree | dfe6e1611d7c50057df52db7b55eafbfb8e33a93 /include/linux | |
| parent | ca439c9b983ffa14e9eae6030e3ee80ad039388f (diff) | |
| parent | 26273e02a0cf18eb72416559310d3294390a9024 (diff) | |
Merge tag 'omap-for-v3.13/fixes-for-merge-window-take2' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into fixes
Few clock fixes, a runtime PM fix, and pinctrl-single fix along
with few other fixes that popped up during the merge window.
* tag 'omap-for-v3.13/fixes-for-merge-window-take2' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
ARM: OMAP2+: Fix build for dra7xx without omap4 and 5
ARM: OMAP2+: omap_device: maintain sane runtime pm status around suspend/resume
doc: devicetree: Add bindings documentation for omap-des driver
ARM: dts: doc: Document missing compatible property for omap-sham driver
ARM: OMAP3: Beagle: fix return value check in beagle_opp_init()
ARM: OMAP: devicetree: fix SPI node compatible property syntax items
pinctrl: single: call pcs_soc->rearm() whenever IRQ mask is changed
ARM: OMAP2+: smsc911x: fix return value check in gpmc_smsc911x_init()
+ sync with newer trunk
Diffstat (limited to 'include/linux')
67 files changed, 1637 insertions, 578 deletions
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index a5db4aeefa36..c30bac8503bc 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
| @@ -311,6 +311,7 @@ struct acpi_osc_context { | |||
| 311 | #define OSC_INVALID_REVISION_ERROR 8 | 311 | #define OSC_INVALID_REVISION_ERROR 8 |
| 312 | #define OSC_CAPABILITIES_MASK_ERROR 16 | 312 | #define OSC_CAPABILITIES_MASK_ERROR 16 |
| 313 | 313 | ||
| 314 | acpi_status acpi_str_to_uuid(char *str, u8 *uuid); | ||
| 314 | acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context); | 315 | acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context); |
| 315 | 316 | ||
| 316 | /* platform-wide _OSC bits */ | 317 | /* platform-wide _OSC bits */ |
diff --git a/include/linux/acpi_gpio.h b/include/linux/acpi_gpio.h index 4c120a1e0ca3..d875bc3dba3c 100644 --- a/include/linux/acpi_gpio.h +++ b/include/linux/acpi_gpio.h | |||
| @@ -2,36 +2,35 @@ | |||
| 2 | #define _LINUX_ACPI_GPIO_H_ | 2 | #define _LINUX_ACPI_GPIO_H_ |
| 3 | 3 | ||
| 4 | #include <linux/device.h> | 4 | #include <linux/device.h> |
| 5 | #include <linux/err.h> | ||
| 5 | #include <linux/errno.h> | 6 | #include <linux/errno.h> |
| 6 | #include <linux/gpio.h> | 7 | #include <linux/gpio.h> |
| 8 | #include <linux/gpio/consumer.h> | ||
| 7 | 9 | ||
| 8 | /** | 10 | /** |
| 9 | * struct acpi_gpio_info - ACPI GPIO specific information | 11 | * struct acpi_gpio_info - ACPI GPIO specific information |
| 10 | * @gpioint: if %true this GPIO is of type GpioInt otherwise type is GpioIo | 12 | * @gpioint: if %true this GPIO is of type GpioInt otherwise type is GpioIo |
| 13 | * @active_low: in case of @gpioint, the pin is active low | ||
| 11 | */ | 14 | */ |
| 12 | struct acpi_gpio_info { | 15 | struct acpi_gpio_info { |
| 13 | bool gpioint; | 16 | bool gpioint; |
| 17 | bool active_low; | ||
| 14 | }; | 18 | }; |
| 15 | 19 | ||
| 16 | #ifdef CONFIG_GPIO_ACPI | 20 | #ifdef CONFIG_GPIO_ACPI |
| 17 | 21 | ||
| 18 | int acpi_get_gpio(char *path, int pin); | 22 | struct gpio_desc *acpi_get_gpiod_by_index(struct device *dev, int index, |
| 19 | int acpi_get_gpio_by_index(struct device *dev, int index, | 23 | struct acpi_gpio_info *info); |
| 20 | struct acpi_gpio_info *info); | ||
| 21 | void acpi_gpiochip_request_interrupts(struct gpio_chip *chip); | 24 | void acpi_gpiochip_request_interrupts(struct gpio_chip *chip); |
| 22 | void acpi_gpiochip_free_interrupts(struct gpio_chip *chip); | 25 | void acpi_gpiochip_free_interrupts(struct gpio_chip *chip); |
| 23 | 26 | ||
| 24 | #else /* CONFIG_GPIO_ACPI */ | 27 | #else /* CONFIG_GPIO_ACPI */ |
| 25 | 28 | ||
| 26 | static inline int acpi_get_gpio(char *path, int pin) | 29 | static inline struct gpio_desc * |
| 30 | acpi_get_gpiod_by_index(struct device *dev, int index, | ||
| 31 | struct acpi_gpio_info *info) | ||
| 27 | { | 32 | { |
| 28 | return -ENODEV; | 33 | return ERR_PTR(-ENOSYS); |
| 29 | } | ||
| 30 | |||
| 31 | static inline int acpi_get_gpio_by_index(struct device *dev, int index, | ||
| 32 | struct acpi_gpio_info *info) | ||
| 33 | { | ||
| 34 | return -ENODEV; | ||
| 35 | } | 34 | } |
| 36 | 35 | ||
| 37 | static inline void acpi_gpiochip_request_interrupts(struct gpio_chip *chip) { } | 36 | static inline void acpi_gpiochip_request_interrupts(struct gpio_chip *chip) { } |
| @@ -39,4 +38,14 @@ static inline void acpi_gpiochip_free_interrupts(struct gpio_chip *chip) { } | |||
| 39 | 38 | ||
| 40 | #endif /* CONFIG_GPIO_ACPI */ | 39 | #endif /* CONFIG_GPIO_ACPI */ |
| 41 | 40 | ||
| 41 | static inline int acpi_get_gpio_by_index(struct device *dev, int index, | ||
| 42 | struct acpi_gpio_info *info) | ||
| 43 | { | ||
| 44 | struct gpio_desc *desc = acpi_get_gpiod_by_index(dev, index, info); | ||
| 45 | |||
| 46 | if (IS_ERR(desc)) | ||
| 47 | return PTR_ERR(desc); | ||
| 48 | return desc_to_gpio(desc); | ||
| 49 | } | ||
| 50 | |||
| 42 | #endif /* _LINUX_ACPI_GPIO_H_ */ | 51 | #endif /* _LINUX_ACPI_GPIO_H_ */ |
diff --git a/include/linux/bitops.h b/include/linux/bitops.h index a3b6b82108b9..bd0c4598d03b 100644 --- a/include/linux/bitops.h +++ b/include/linux/bitops.h | |||
| @@ -10,6 +10,14 @@ | |||
| 10 | #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) | 10 | #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) |
| 11 | #endif | 11 | #endif |
| 12 | 12 | ||
| 13 | /* | ||
| 14 | * Create a contiguous bitmask starting at bit position @l and ending at | ||
| 15 | * position @h. For example | ||
| 16 | * GENMASK_ULL(39, 21) gives us the 64bit vector 0x000000ffffe00000. | ||
| 17 | */ | ||
| 18 | #define GENMASK(h, l) (((U32_C(1) << ((h) - (l) + 1)) - 1) << (l)) | ||
| 19 | #define GENMASK_ULL(h, l) (((U64_C(1) << ((h) - (l) + 1)) - 1) << (l)) | ||
| 20 | |||
| 13 | extern unsigned int __sw_hweight8(unsigned int w); | 21 | extern unsigned int __sw_hweight8(unsigned int w); |
| 14 | extern unsigned int __sw_hweight16(unsigned int w); | 22 | extern unsigned int __sw_hweight16(unsigned int w); |
| 15 | extern unsigned int __sw_hweight32(unsigned int w); | 23 | extern unsigned int __sw_hweight32(unsigned int w); |
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 73bdb69f0c08..7e59253b8603 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
| @@ -472,6 +472,7 @@ void of_clk_del_provider(struct device_node *np); | |||
| 472 | struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec, | 472 | struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec, |
| 473 | void *data); | 473 | void *data); |
| 474 | struct clk *of_clk_src_onecell_get(struct of_phandle_args *clkspec, void *data); | 474 | struct clk *of_clk_src_onecell_get(struct of_phandle_args *clkspec, void *data); |
| 475 | int of_clk_get_parent_count(struct device_node *np); | ||
| 475 | const char *of_clk_get_parent_name(struct device_node *np, int index); | 476 | const char *of_clk_get_parent_name(struct device_node *np, int index); |
| 476 | 477 | ||
| 477 | void of_clk_init(const struct of_device_id *matches); | 478 | void of_clk_init(const struct of_device_id *matches); |
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 0857922e8ad0..493aa021c7a9 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h | |||
| @@ -60,6 +60,7 @@ enum clock_event_mode { | |||
| 60 | * Core shall set the interrupt affinity dynamically in broadcast mode | 60 | * Core shall set the interrupt affinity dynamically in broadcast mode |
| 61 | */ | 61 | */ |
| 62 | #define CLOCK_EVT_FEAT_DYNIRQ 0x000020 | 62 | #define CLOCK_EVT_FEAT_DYNIRQ 0x000020 |
| 63 | #define CLOCK_EVT_FEAT_PERCPU 0x000040 | ||
| 63 | 64 | ||
| 64 | /** | 65 | /** |
| 65 | * struct clock_event_device - clock event device descriptor | 66 | * struct clock_event_device - clock event device descriptor |
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index dbbf8aa7731b..67301a405712 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
| @@ -292,6 +292,8 @@ extern void clocksource_resume(void); | |||
| 292 | extern struct clocksource * __init __weak clocksource_default_clock(void); | 292 | extern struct clocksource * __init __weak clocksource_default_clock(void); |
| 293 | extern void clocksource_mark_unstable(struct clocksource *cs); | 293 | extern void clocksource_mark_unstable(struct clocksource *cs); |
| 294 | 294 | ||
| 295 | extern u64 | ||
| 296 | clocks_calc_max_nsecs(u32 mult, u32 shift, u32 maxadj, u64 mask); | ||
| 295 | extern void | 297 | extern void |
| 296 | clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec); | 298 | clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec); |
| 297 | 299 | ||
diff --git a/include/linux/completion.h b/include/linux/completion.h index 3cd574d5b19e..22c33e35bcb2 100644 --- a/include/linux/completion.h +++ b/include/linux/completion.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | * (C) Copyright 2001 Linus Torvalds | 5 | * (C) Copyright 2001 Linus Torvalds |
| 6 | * | 6 | * |
| 7 | * Atomic wait-for-completion handler data structures. | 7 | * Atomic wait-for-completion handler data structures. |
| 8 | * See kernel/sched/core.c for details. | 8 | * See kernel/sched/completion.c for details. |
| 9 | */ | 9 | */ |
| 10 | 10 | ||
| 11 | #include <linux/wait.h> | 11 | #include <linux/wait.h> |
diff --git a/include/linux/cper.h b/include/linux/cper.h index c23049496531..2fc0ec3d89cc 100644 --- a/include/linux/cper.h +++ b/include/linux/cper.h | |||
| @@ -218,8 +218,8 @@ enum { | |||
| 218 | #define CPER_PROC_VALID_IP 0x1000 | 218 | #define CPER_PROC_VALID_IP 0x1000 |
| 219 | 219 | ||
| 220 | #define CPER_MEM_VALID_ERROR_STATUS 0x0001 | 220 | #define CPER_MEM_VALID_ERROR_STATUS 0x0001 |
| 221 | #define CPER_MEM_VALID_PHYSICAL_ADDRESS 0x0002 | 221 | #define CPER_MEM_VALID_PA 0x0002 |
| 222 | #define CPER_MEM_VALID_PHYSICAL_ADDRESS_MASK 0x0004 | 222 | #define CPER_MEM_VALID_PA_MASK 0x0004 |
| 223 | #define CPER_MEM_VALID_NODE 0x0008 | 223 | #define CPER_MEM_VALID_NODE 0x0008 |
| 224 | #define CPER_MEM_VALID_CARD 0x0010 | 224 | #define CPER_MEM_VALID_CARD 0x0010 |
| 225 | #define CPER_MEM_VALID_MODULE 0x0020 | 225 | #define CPER_MEM_VALID_MODULE 0x0020 |
| @@ -232,6 +232,9 @@ enum { | |||
| 232 | #define CPER_MEM_VALID_RESPONDER_ID 0x1000 | 232 | #define CPER_MEM_VALID_RESPONDER_ID 0x1000 |
| 233 | #define CPER_MEM_VALID_TARGET_ID 0x2000 | 233 | #define CPER_MEM_VALID_TARGET_ID 0x2000 |
| 234 | #define CPER_MEM_VALID_ERROR_TYPE 0x4000 | 234 | #define CPER_MEM_VALID_ERROR_TYPE 0x4000 |
| 235 | #define CPER_MEM_VALID_RANK_NUMBER 0x8000 | ||
| 236 | #define CPER_MEM_VALID_CARD_HANDLE 0x10000 | ||
| 237 | #define CPER_MEM_VALID_MODULE_HANDLE 0x20000 | ||
| 235 | 238 | ||
| 236 | #define CPER_PCIE_VALID_PORT_TYPE 0x0001 | 239 | #define CPER_PCIE_VALID_PORT_TYPE 0x0001 |
| 237 | #define CPER_PCIE_VALID_VERSION 0x0002 | 240 | #define CPER_PCIE_VALID_VERSION 0x0002 |
| @@ -347,6 +350,10 @@ struct cper_sec_mem_err { | |||
| 347 | __u64 responder_id; | 350 | __u64 responder_id; |
| 348 | __u64 target_id; | 351 | __u64 target_id; |
| 349 | __u8 error_type; | 352 | __u8 error_type; |
| 353 | __u8 reserved; | ||
| 354 | __u16 rank; | ||
| 355 | __u16 mem_array_handle; /* card handle in UEFI 2.4 */ | ||
| 356 | __u16 mem_dev_handle; /* module handle in UEFI 2.4 */ | ||
| 350 | }; | 357 | }; |
| 351 | 358 | ||
| 352 | struct cper_sec_pcie { | 359 | struct cper_sec_pcie { |
| @@ -389,6 +396,6 @@ struct cper_sec_pcie { | |||
| 389 | 396 | ||
| 390 | u64 cper_next_record_id(void); | 397 | u64 cper_next_record_id(void); |
| 391 | void cper_print_bits(const char *prefix, unsigned int bits, | 398 | void cper_print_bits(const char *prefix, unsigned int bits, |
| 392 | const char *strs[], unsigned int strs_size); | 399 | const char * const strs[], unsigned int strs_size); |
| 393 | 400 | ||
| 394 | #endif | 401 | #endif |
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 801ff9e73679..fbd25c3c2923 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/cpumask.h> | 18 | #include <linux/cpumask.h> |
| 19 | 19 | ||
| 20 | struct device; | 20 | struct device; |
| 21 | struct device_node; | ||
| 21 | 22 | ||
| 22 | struct cpu { | 23 | struct cpu { |
| 23 | int node_id; /* The node which contains the CPU */ | 24 | int node_id; /* The node which contains the CPU */ |
| @@ -29,6 +30,8 @@ extern int register_cpu(struct cpu *cpu, int num); | |||
| 29 | extern struct device *get_cpu_device(unsigned cpu); | 30 | extern struct device *get_cpu_device(unsigned cpu); |
| 30 | extern bool cpu_is_hotpluggable(unsigned cpu); | 31 | extern bool cpu_is_hotpluggable(unsigned cpu); |
| 31 | extern bool arch_match_cpu_phys_id(int cpu, u64 phys_id); | 32 | extern bool arch_match_cpu_phys_id(int cpu, u64 phys_id); |
| 33 | extern bool arch_find_n_match_cpu_physical_id(struct device_node *cpun, | ||
| 34 | int cpu, unsigned int *thread); | ||
| 32 | 35 | ||
| 33 | extern int cpu_add_dev_attr(struct device_attribute *attr); | 36 | extern int cpu_add_dev_attr(struct device_attribute *attr); |
| 34 | extern void cpu_remove_dev_attr(struct device_attribute *attr); | 37 | extern void cpu_remove_dev_attr(struct device_attribute *attr); |
diff --git a/include/linux/dmi.h b/include/linux/dmi.h index b6eb7a05d58e..f820f0a336c9 100644 --- a/include/linux/dmi.h +++ b/include/linux/dmi.h | |||
| @@ -99,6 +99,7 @@ extern const char * dmi_get_system_info(int field); | |||
| 99 | extern const struct dmi_device * dmi_find_device(int type, const char *name, | 99 | extern const struct dmi_device * dmi_find_device(int type, const char *name, |
| 100 | const struct dmi_device *from); | 100 | const struct dmi_device *from); |
| 101 | extern void dmi_scan_machine(void); | 101 | extern void dmi_scan_machine(void); |
| 102 | extern void dmi_memdev_walk(void); | ||
| 102 | extern void dmi_set_dump_stack_arch_desc(void); | 103 | extern void dmi_set_dump_stack_arch_desc(void); |
| 103 | extern bool dmi_get_date(int field, int *yearp, int *monthp, int *dayp); | 104 | extern bool dmi_get_date(int field, int *yearp, int *monthp, int *dayp); |
| 104 | extern int dmi_name_in_vendors(const char *str); | 105 | extern int dmi_name_in_vendors(const char *str); |
| @@ -107,6 +108,7 @@ extern int dmi_available; | |||
| 107 | extern int dmi_walk(void (*decode)(const struct dmi_header *, void *), | 108 | extern int dmi_walk(void (*decode)(const struct dmi_header *, void *), |
| 108 | void *private_data); | 109 | void *private_data); |
| 109 | extern bool dmi_match(enum dmi_field f, const char *str); | 110 | extern bool dmi_match(enum dmi_field f, const char *str); |
| 111 | extern void dmi_memdev_name(u16 handle, const char **bank, const char **device); | ||
| 110 | 112 | ||
| 111 | #else | 113 | #else |
| 112 | 114 | ||
| @@ -115,6 +117,7 @@ static inline const char * dmi_get_system_info(int field) { return NULL; } | |||
| 115 | static inline const struct dmi_device * dmi_find_device(int type, const char *name, | 117 | static inline const struct dmi_device * dmi_find_device(int type, const char *name, |
| 116 | const struct dmi_device *from) { return NULL; } | 118 | const struct dmi_device *from) { return NULL; } |
| 117 | static inline void dmi_scan_machine(void) { return; } | 119 | static inline void dmi_scan_machine(void) { return; } |
| 120 | static inline void dmi_memdev_walk(void) { } | ||
| 118 | static inline void dmi_set_dump_stack_arch_desc(void) { } | 121 | static inline void dmi_set_dump_stack_arch_desc(void) { } |
| 119 | static inline bool dmi_get_date(int field, int *yearp, int *monthp, int *dayp) | 122 | static inline bool dmi_get_date(int field, int *yearp, int *monthp, int *dayp) |
| 120 | { | 123 | { |
| @@ -133,6 +136,8 @@ static inline int dmi_walk(void (*decode)(const struct dmi_header *, void *), | |||
| 133 | void *private_data) { return -1; } | 136 | void *private_data) { return -1; } |
| 134 | static inline bool dmi_match(enum dmi_field f, const char *str) | 137 | static inline bool dmi_match(enum dmi_field f, const char *str) |
| 135 | { return false; } | 138 | { return false; } |
| 139 | static inline void dmi_memdev_name(u16 handle, const char **bank, | ||
| 140 | const char **device) { } | ||
| 136 | static inline const struct dmi_system_id * | 141 | static inline const struct dmi_system_id * |
| 137 | dmi_first_match(const struct dmi_system_id *list) { return NULL; } | 142 | dmi_first_match(const struct dmi_system_id *list) { return NULL; } |
| 138 | 143 | ||
diff --git a/include/linux/edac.h b/include/linux/edac.h index 5c6d7fbaf89e..dbdffe8d4469 100644 --- a/include/linux/edac.h +++ b/include/linux/edac.h | |||
| @@ -51,7 +51,7 @@ static inline void opstate_init(void) | |||
| 51 | #define EDAC_MC_LABEL_LEN 31 | 51 | #define EDAC_MC_LABEL_LEN 31 |
| 52 | 52 | ||
| 53 | /* Maximum size of the location string */ | 53 | /* Maximum size of the location string */ |
| 54 | #define LOCATION_SIZE 80 | 54 | #define LOCATION_SIZE 256 |
| 55 | 55 | ||
| 56 | /* Defines the maximum number of labels that can be reported */ | 56 | /* Defines the maximum number of labels that can be reported */ |
| 57 | #define EDAC_MAX_LABELS 8 | 57 | #define EDAC_MAX_LABELS 8 |
diff --git a/include/linux/efi.h b/include/linux/efi.h index 5f8f176154f7..bc5687d0f315 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h | |||
| @@ -39,6 +39,8 @@ | |||
| 39 | typedef unsigned long efi_status_t; | 39 | typedef unsigned long efi_status_t; |
| 40 | typedef u8 efi_bool_t; | 40 | typedef u8 efi_bool_t; |
| 41 | typedef u16 efi_char16_t; /* UNICODE character */ | 41 | typedef u16 efi_char16_t; /* UNICODE character */ |
| 42 | typedef u64 efi_physical_addr_t; | ||
| 43 | typedef void *efi_handle_t; | ||
| 42 | 44 | ||
| 43 | 45 | ||
| 44 | typedef struct { | 46 | typedef struct { |
| @@ -96,6 +98,7 @@ typedef struct { | |||
| 96 | #define EFI_MEMORY_DESCRIPTOR_VERSION 1 | 98 | #define EFI_MEMORY_DESCRIPTOR_VERSION 1 |
| 97 | 99 | ||
| 98 | #define EFI_PAGE_SHIFT 12 | 100 | #define EFI_PAGE_SHIFT 12 |
| 101 | #define EFI_PAGE_SIZE (1UL << EFI_PAGE_SHIFT) | ||
| 99 | 102 | ||
| 100 | typedef struct { | 103 | typedef struct { |
| 101 | u32 type; | 104 | u32 type; |
| @@ -157,11 +160,13 @@ typedef struct { | |||
| 157 | efi_table_hdr_t hdr; | 160 | efi_table_hdr_t hdr; |
| 158 | void *raise_tpl; | 161 | void *raise_tpl; |
| 159 | void *restore_tpl; | 162 | void *restore_tpl; |
| 160 | void *allocate_pages; | 163 | efi_status_t (*allocate_pages)(int, int, unsigned long, |
| 161 | void *free_pages; | 164 | efi_physical_addr_t *); |
| 162 | void *get_memory_map; | 165 | efi_status_t (*free_pages)(efi_physical_addr_t, unsigned long); |
| 163 | void *allocate_pool; | 166 | efi_status_t (*get_memory_map)(unsigned long *, void *, unsigned long *, |
| 164 | void *free_pool; | 167 | unsigned long *, u32 *); |
| 168 | efi_status_t (*allocate_pool)(int, unsigned long, void **); | ||
| 169 | efi_status_t (*free_pool)(void *); | ||
| 165 | void *create_event; | 170 | void *create_event; |
| 166 | void *set_timer; | 171 | void *set_timer; |
| 167 | void *wait_for_event; | 172 | void *wait_for_event; |
| @@ -171,7 +176,7 @@ typedef struct { | |||
| 171 | void *install_protocol_interface; | 176 | void *install_protocol_interface; |
| 172 | void *reinstall_protocol_interface; | 177 | void *reinstall_protocol_interface; |
| 173 | void *uninstall_protocol_interface; | 178 | void *uninstall_protocol_interface; |
| 174 | void *handle_protocol; | 179 | efi_status_t (*handle_protocol)(efi_handle_t, efi_guid_t *, void **); |
| 175 | void *__reserved; | 180 | void *__reserved; |
| 176 | void *register_protocol_notify; | 181 | void *register_protocol_notify; |
| 177 | void *locate_handle; | 182 | void *locate_handle; |
| @@ -181,7 +186,7 @@ typedef struct { | |||
| 181 | void *start_image; | 186 | void *start_image; |
| 182 | void *exit; | 187 | void *exit; |
| 183 | void *unload_image; | 188 | void *unload_image; |
| 184 | void *exit_boot_services; | 189 | efi_status_t (*exit_boot_services)(efi_handle_t, unsigned long); |
| 185 | void *get_next_monotonic_count; | 190 | void *get_next_monotonic_count; |
| 186 | void *stall; | 191 | void *stall; |
| 187 | void *set_watchdog_timer; | 192 | void *set_watchdog_timer; |
| @@ -404,6 +409,12 @@ typedef struct { | |||
| 404 | unsigned long table; | 409 | unsigned long table; |
| 405 | } efi_config_table_t; | 410 | } efi_config_table_t; |
| 406 | 411 | ||
| 412 | typedef struct { | ||
| 413 | efi_guid_t guid; | ||
| 414 | const char *name; | ||
| 415 | unsigned long *ptr; | ||
| 416 | } efi_config_table_type_t; | ||
| 417 | |||
| 407 | #define EFI_SYSTEM_TABLE_SIGNATURE ((u64)0x5453595320494249ULL) | 418 | #define EFI_SYSTEM_TABLE_SIGNATURE ((u64)0x5453595320494249ULL) |
| 408 | 419 | ||
| 409 | #define EFI_2_30_SYSTEM_TABLE_REVISION ((2 << 16) | (30)) | 420 | #define EFI_2_30_SYSTEM_TABLE_REVISION ((2 << 16) | (30)) |
| @@ -488,10 +499,6 @@ typedef struct { | |||
| 488 | unsigned long unload; | 499 | unsigned long unload; |
| 489 | } efi_loaded_image_t; | 500 | } efi_loaded_image_t; |
| 490 | 501 | ||
| 491 | typedef struct { | ||
| 492 | u64 revision; | ||
| 493 | void *open_volume; | ||
| 494 | } efi_file_io_interface_t; | ||
| 495 | 502 | ||
| 496 | typedef struct { | 503 | typedef struct { |
| 497 | u64 size; | 504 | u64 size; |
| @@ -504,20 +511,30 @@ typedef struct { | |||
| 504 | efi_char16_t filename[1]; | 511 | efi_char16_t filename[1]; |
| 505 | } efi_file_info_t; | 512 | } efi_file_info_t; |
| 506 | 513 | ||
| 507 | typedef struct { | 514 | typedef struct _efi_file_handle { |
| 508 | u64 revision; | 515 | u64 revision; |
| 509 | void *open; | 516 | efi_status_t (*open)(struct _efi_file_handle *, |
| 510 | void *close; | 517 | struct _efi_file_handle **, |
| 518 | efi_char16_t *, u64, u64); | ||
| 519 | efi_status_t (*close)(struct _efi_file_handle *); | ||
| 511 | void *delete; | 520 | void *delete; |
| 512 | void *read; | 521 | efi_status_t (*read)(struct _efi_file_handle *, unsigned long *, |
| 522 | void *); | ||
| 513 | void *write; | 523 | void *write; |
| 514 | void *get_position; | 524 | void *get_position; |
| 515 | void *set_position; | 525 | void *set_position; |
| 516 | void *get_info; | 526 | efi_status_t (*get_info)(struct _efi_file_handle *, efi_guid_t *, |
| 527 | unsigned long *, void *); | ||
| 517 | void *set_info; | 528 | void *set_info; |
| 518 | void *flush; | 529 | void *flush; |
| 519 | } efi_file_handle_t; | 530 | } efi_file_handle_t; |
| 520 | 531 | ||
| 532 | typedef struct _efi_file_io_interface { | ||
| 533 | u64 revision; | ||
| 534 | int (*open_volume)(struct _efi_file_io_interface *, | ||
| 535 | efi_file_handle_t **); | ||
| 536 | } efi_file_io_interface_t; | ||
| 537 | |||
| 521 | #define EFI_FILE_MODE_READ 0x0000000000000001 | 538 | #define EFI_FILE_MODE_READ 0x0000000000000001 |
| 522 | #define EFI_FILE_MODE_WRITE 0x0000000000000002 | 539 | #define EFI_FILE_MODE_WRITE 0x0000000000000002 |
| 523 | #define EFI_FILE_MODE_CREATE 0x8000000000000000 | 540 | #define EFI_FILE_MODE_CREATE 0x8000000000000000 |
| @@ -552,6 +569,7 @@ extern struct efi { | |||
| 552 | efi_get_next_high_mono_count_t *get_next_high_mono_count; | 569 | efi_get_next_high_mono_count_t *get_next_high_mono_count; |
| 553 | efi_reset_system_t *reset_system; | 570 | efi_reset_system_t *reset_system; |
| 554 | efi_set_virtual_address_map_t *set_virtual_address_map; | 571 | efi_set_virtual_address_map_t *set_virtual_address_map; |
| 572 | struct efi_memory_map *memmap; | ||
| 555 | } efi; | 573 | } efi; |
| 556 | 574 | ||
| 557 | static inline int | 575 | static inline int |
| @@ -587,6 +605,7 @@ static inline efi_status_t efi_query_variable_store(u32 attributes, unsigned lon | |||
| 587 | } | 605 | } |
| 588 | #endif | 606 | #endif |
| 589 | extern void __iomem *efi_lookup_mapped_addr(u64 phys_addr); | 607 | extern void __iomem *efi_lookup_mapped_addr(u64 phys_addr); |
| 608 | extern int efi_config_init(efi_config_table_type_t *arch_tables); | ||
| 590 | extern u64 efi_get_iobase (void); | 609 | extern u64 efi_get_iobase (void); |
| 591 | extern u32 efi_mem_type (unsigned long phys_addr); | 610 | extern u32 efi_mem_type (unsigned long phys_addr); |
| 592 | extern u64 efi_mem_attributes (unsigned long phys_addr); | 611 | extern u64 efi_mem_attributes (unsigned long phys_addr); |
| @@ -784,6 +803,13 @@ struct efivar_entry { | |||
| 784 | struct kobject kobj; | 803 | struct kobject kobj; |
| 785 | }; | 804 | }; |
| 786 | 805 | ||
| 806 | |||
| 807 | struct efi_simple_text_output_protocol { | ||
| 808 | void *reset; | ||
| 809 | efi_status_t (*output_string)(void *, void *); | ||
| 810 | void *test_string; | ||
| 811 | }; | ||
| 812 | |||
| 787 | extern struct list_head efivar_sysfs_list; | 813 | extern struct list_head efivar_sysfs_list; |
| 788 | 814 | ||
| 789 | static inline void | 815 | static inline void |
diff --git a/include/linux/gpio.h b/include/linux/gpio.h index 552e3f46e4a3..13dfd24d01ab 100644 --- a/include/linux/gpio.h +++ b/include/linux/gpio.h | |||
| @@ -16,14 +16,17 @@ | |||
| 16 | #define GPIOF_OUT_INIT_LOW (GPIOF_DIR_OUT | GPIOF_INIT_LOW) | 16 | #define GPIOF_OUT_INIT_LOW (GPIOF_DIR_OUT | GPIOF_INIT_LOW) |
| 17 | #define GPIOF_OUT_INIT_HIGH (GPIOF_DIR_OUT | GPIOF_INIT_HIGH) | 17 | #define GPIOF_OUT_INIT_HIGH (GPIOF_DIR_OUT | GPIOF_INIT_HIGH) |
| 18 | 18 | ||
| 19 | /* Gpio pin is active-low */ | ||
| 20 | #define GPIOF_ACTIVE_LOW (1 << 2) | ||
| 21 | |||
| 19 | /* Gpio pin is open drain */ | 22 | /* Gpio pin is open drain */ |
| 20 | #define GPIOF_OPEN_DRAIN (1 << 2) | 23 | #define GPIOF_OPEN_DRAIN (1 << 3) |
| 21 | 24 | ||
| 22 | /* Gpio pin is open source */ | 25 | /* Gpio pin is open source */ |
| 23 | #define GPIOF_OPEN_SOURCE (1 << 3) | 26 | #define GPIOF_OPEN_SOURCE (1 << 4) |
| 24 | 27 | ||
| 25 | #define GPIOF_EXPORT (1 << 4) | 28 | #define GPIOF_EXPORT (1 << 5) |
| 26 | #define GPIOF_EXPORT_CHANGEABLE (1 << 5) | 29 | #define GPIOF_EXPORT_CHANGEABLE (1 << 6) |
| 27 | #define GPIOF_EXPORT_DIR_FIXED (GPIOF_EXPORT) | 30 | #define GPIOF_EXPORT_DIR_FIXED (GPIOF_EXPORT) |
| 28 | #define GPIOF_EXPORT_DIR_CHANGEABLE (GPIOF_EXPORT | GPIOF_EXPORT_CHANGEABLE) | 31 | #define GPIOF_EXPORT_DIR_CHANGEABLE (GPIOF_EXPORT | GPIOF_EXPORT_CHANGEABLE) |
| 29 | 32 | ||
| @@ -74,12 +77,22 @@ static inline int irq_to_gpio(unsigned int irq) | |||
| 74 | 77 | ||
| 75 | #endif /* ! CONFIG_ARCH_HAVE_CUSTOM_GPIO_H */ | 78 | #endif /* ! CONFIG_ARCH_HAVE_CUSTOM_GPIO_H */ |
| 76 | 79 | ||
| 80 | /* CONFIG_GPIOLIB: bindings for managed devices that want to request gpios */ | ||
| 81 | |||
| 82 | struct device; | ||
| 83 | |||
| 84 | int devm_gpio_request(struct device *dev, unsigned gpio, const char *label); | ||
| 85 | int devm_gpio_request_one(struct device *dev, unsigned gpio, | ||
| 86 | unsigned long flags, const char *label); | ||
| 87 | void devm_gpio_free(struct device *dev, unsigned int gpio); | ||
| 88 | |||
| 77 | #else /* ! CONFIG_GPIOLIB */ | 89 | #else /* ! CONFIG_GPIOLIB */ |
| 78 | 90 | ||
| 79 | #include <linux/kernel.h> | 91 | #include <linux/kernel.h> |
| 80 | #include <linux/types.h> | 92 | #include <linux/types.h> |
| 81 | #include <linux/errno.h> | 93 | #include <linux/errno.h> |
| 82 | #include <linux/bug.h> | 94 | #include <linux/bug.h> |
| 95 | #include <linux/pinctrl/pinctrl.h> | ||
| 83 | 96 | ||
| 84 | struct device; | 97 | struct device; |
| 85 | struct gpio_chip; | 98 | struct gpio_chip; |
| @@ -204,6 +217,18 @@ static inline int gpio_to_irq(unsigned gpio) | |||
| 204 | return -EINVAL; | 217 | return -EINVAL; |
| 205 | } | 218 | } |
| 206 | 219 | ||
| 220 | static inline int gpio_lock_as_irq(struct gpio_chip *chip, unsigned int offset) | ||
| 221 | { | ||
| 222 | WARN_ON(1); | ||
| 223 | return -EINVAL; | ||
| 224 | } | ||
| 225 | |||
| 226 | static inline void gpio_unlock_as_irq(struct gpio_chip *chip, | ||
| 227 | unsigned int offset) | ||
| 228 | { | ||
| 229 | WARN_ON(1); | ||
| 230 | } | ||
| 231 | |||
| 207 | static inline int irq_to_gpio(unsigned irq) | 232 | static inline int irq_to_gpio(unsigned irq) |
| 208 | { | 233 | { |
| 209 | /* irq can never have been returned from gpio_to_irq() */ | 234 | /* irq can never have been returned from gpio_to_irq() */ |
| @@ -220,20 +245,40 @@ gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name, | |||
| 220 | return -EINVAL; | 245 | return -EINVAL; |
| 221 | } | 246 | } |
| 222 | 247 | ||
| 248 | static inline int | ||
| 249 | gpiochip_add_pingroup_range(struct gpio_chip *chip, | ||
| 250 | struct pinctrl_dev *pctldev, | ||
| 251 | unsigned int gpio_offset, const char *pin_group) | ||
| 252 | { | ||
| 253 | WARN_ON(1); | ||
| 254 | return -EINVAL; | ||
| 255 | } | ||
| 256 | |||
| 223 | static inline void | 257 | static inline void |
| 224 | gpiochip_remove_pin_ranges(struct gpio_chip *chip) | 258 | gpiochip_remove_pin_ranges(struct gpio_chip *chip) |
| 225 | { | 259 | { |
| 226 | WARN_ON(1); | 260 | WARN_ON(1); |
| 227 | } | 261 | } |
| 228 | 262 | ||
| 229 | #endif /* ! CONFIG_GPIOLIB */ | 263 | static inline int devm_gpio_request(struct device *dev, unsigned gpio, |
| 264 | const char *label) | ||
| 265 | { | ||
| 266 | WARN_ON(1); | ||
| 267 | return -EINVAL; | ||
| 268 | } | ||
| 230 | 269 | ||
| 231 | struct device; | 270 | static inline int devm_gpio_request_one(struct device *dev, unsigned gpio, |
| 271 | unsigned long flags, const char *label) | ||
| 272 | { | ||
| 273 | WARN_ON(1); | ||
| 274 | return -EINVAL; | ||
| 275 | } | ||
| 232 | 276 | ||
| 233 | /* bindings for managed devices that want to request gpios */ | 277 | static inline void devm_gpio_free(struct device *dev, unsigned int gpio) |
| 234 | int devm_gpio_request(struct device *dev, unsigned gpio, const char *label); | 278 | { |
| 235 | int devm_gpio_request_one(struct device *dev, unsigned gpio, | 279 | WARN_ON(1); |
| 236 | unsigned long flags, const char *label); | 280 | } |
| 237 | void devm_gpio_free(struct device *dev, unsigned int gpio); | 281 | |
| 282 | #endif /* ! CONFIG_GPIOLIB */ | ||
| 238 | 283 | ||
| 239 | #endif /* __LINUX_GPIO_H */ | 284 | #endif /* __LINUX_GPIO_H */ |
diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h new file mode 100644 index 000000000000..4d34dbbbad4d --- /dev/null +++ b/include/linux/gpio/consumer.h | |||
| @@ -0,0 +1,253 @@ | |||
| 1 | #ifndef __LINUX_GPIO_CONSUMER_H | ||
| 2 | #define __LINUX_GPIO_CONSUMER_H | ||
| 3 | |||
| 4 | #include <linux/err.h> | ||
| 5 | #include <linux/kernel.h> | ||
| 6 | |||
| 7 | #ifdef CONFIG_GPIOLIB | ||
| 8 | |||
| 9 | struct device; | ||
| 10 | struct gpio_chip; | ||
| 11 | |||
| 12 | /** | ||
| 13 | * Opaque descriptor for a GPIO. These are obtained using gpiod_get() and are | ||
| 14 | * preferable to the old integer-based handles. | ||
| 15 | * | ||
| 16 | * Contrary to integers, a pointer to a gpio_desc is guaranteed to be valid | ||
| 17 | * until the GPIO is released. | ||
| 18 | */ | ||
| 19 | struct gpio_desc; | ||
| 20 | |||
| 21 | /* Acquire and dispose GPIOs */ | ||
| 22 | struct gpio_desc *__must_check gpiod_get(struct device *dev, | ||
| 23 | const char *con_id); | ||
| 24 | struct gpio_desc *__must_check gpiod_get_index(struct device *dev, | ||
| 25 | const char *con_id, | ||
| 26 | unsigned int idx); | ||
| 27 | void gpiod_put(struct gpio_desc *desc); | ||
| 28 | |||
| 29 | struct gpio_desc *__must_check devm_gpiod_get(struct device *dev, | ||
| 30 | const char *con_id); | ||
| 31 | struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, | ||
| 32 | const char *con_id, | ||
| 33 | unsigned int idx); | ||
| 34 | void devm_gpiod_put(struct device *dev, struct gpio_desc *desc); | ||
| 35 | |||
| 36 | int gpiod_get_direction(const struct gpio_desc *desc); | ||
| 37 | int gpiod_direction_input(struct gpio_desc *desc); | ||
| 38 | int gpiod_direction_output(struct gpio_desc *desc, int value); | ||
| 39 | |||
| 40 | /* Value get/set from non-sleeping context */ | ||
| 41 | int gpiod_get_value(const struct gpio_desc *desc); | ||
| 42 | void gpiod_set_value(struct gpio_desc *desc, int value); | ||
| 43 | int gpiod_get_raw_value(const struct gpio_desc *desc); | ||
| 44 | void gpiod_set_raw_value(struct gpio_desc *desc, int value); | ||
| 45 | |||
| 46 | /* Value get/set from sleeping context */ | ||
| 47 | int gpiod_get_value_cansleep(const struct gpio_desc *desc); | ||
| 48 | void gpiod_set_value_cansleep(struct gpio_desc *desc, int value); | ||
| 49 | int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc); | ||
| 50 | void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value); | ||
| 51 | |||
| 52 | int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce); | ||
| 53 | |||
| 54 | int gpiod_is_active_low(const struct gpio_desc *desc); | ||
| 55 | int gpiod_cansleep(const struct gpio_desc *desc); | ||
| 56 | |||
| 57 | int gpiod_to_irq(const struct gpio_desc *desc); | ||
| 58 | |||
| 59 | /* Convert between the old gpio_ and new gpiod_ interfaces */ | ||
| 60 | struct gpio_desc *gpio_to_desc(unsigned gpio); | ||
| 61 | int desc_to_gpio(const struct gpio_desc *desc); | ||
| 62 | struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc); | ||
| 63 | |||
| 64 | #else /* CONFIG_GPIOLIB */ | ||
| 65 | |||
| 66 | static inline struct gpio_desc *__must_check gpiod_get(struct device *dev, | ||
| 67 | const char *con_id) | ||
| 68 | { | ||
| 69 | return ERR_PTR(-ENOSYS); | ||
| 70 | } | ||
| 71 | static inline struct gpio_desc *__must_check gpiod_get_index(struct device *dev, | ||
| 72 | const char *con_id, | ||
| 73 | unsigned int idx) | ||
| 74 | { | ||
| 75 | return ERR_PTR(-ENOSYS); | ||
| 76 | } | ||
| 77 | static inline void gpiod_put(struct gpio_desc *desc) | ||
| 78 | { | ||
| 79 | might_sleep(); | ||
| 80 | |||
| 81 | /* GPIO can never have been requested */ | ||
| 82 | WARN_ON(1); | ||
| 83 | } | ||
| 84 | |||
| 85 | static inline struct gpio_desc *__must_check devm_gpiod_get(struct device *dev, | ||
| 86 | const char *con_id) | ||
| 87 | { | ||
| 88 | return ERR_PTR(-ENOSYS); | ||
| 89 | } | ||
| 90 | static inline | ||
| 91 | struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, | ||
| 92 | const char *con_id, | ||
| 93 | unsigned int idx) | ||
| 94 | { | ||
| 95 | return ERR_PTR(-ENOSYS); | ||
| 96 | } | ||
| 97 | static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc) | ||
| 98 | { | ||
| 99 | might_sleep(); | ||
| 100 | |||
| 101 | /* GPIO can never have been requested */ | ||
| 102 | WARN_ON(1); | ||
| 103 | } | ||
| 104 | |||
| 105 | |||
| 106 | static inline int gpiod_get_direction(const struct gpio_desc *desc) | ||
| 107 | { | ||
| 108 | /* GPIO can never have been requested */ | ||
| 109 | WARN_ON(1); | ||
| 110 | return -ENOSYS; | ||
| 111 | } | ||
| 112 | static inline int gpiod_direction_input(struct gpio_desc *desc) | ||
| 113 | { | ||
| 114 | /* GPIO can never have been requested */ | ||
| 115 | WARN_ON(1); | ||
| 116 | return -ENOSYS; | ||
| 117 | } | ||
| 118 | static inline int gpiod_direction_output(struct gpio_desc *desc, int value) | ||
| 119 | { | ||
| 120 | /* GPIO can never have been requested */ | ||
| 121 | WARN_ON(1); | ||
| 122 | return -ENOSYS; | ||
| 123 | } | ||
| 124 | |||
| 125 | |||
| 126 | static inline int gpiod_get_value(const struct gpio_desc *desc) | ||
| 127 | { | ||
| 128 | /* GPIO can never have been requested */ | ||
| 129 | WARN_ON(1); | ||
| 130 | return 0; | ||
| 131 | } | ||
| 132 | static inline void gpiod_set_value(struct gpio_desc *desc, int value) | ||
| 133 | { | ||
| 134 | /* GPIO can never have been requested */ | ||
| 135 | WARN_ON(1); | ||
| 136 | } | ||
| 137 | static inline int gpiod_get_raw_value(const struct gpio_desc *desc) | ||
| 138 | { | ||
| 139 | /* GPIO can never have been requested */ | ||
| 140 | WARN_ON(1); | ||
| 141 | return 0; | ||
| 142 | } | ||
| 143 | static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value) | ||
| 144 | { | ||
| 145 | /* GPIO can never have been requested */ | ||
| 146 | WARN_ON(1); | ||
| 147 | } | ||
| 148 | |||
| 149 | static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc) | ||
| 150 | { | ||
| 151 | /* GPIO can never have been requested */ | ||
| 152 | WARN_ON(1); | ||
| 153 | return 0; | ||
| 154 | } | ||
| 155 | static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value) | ||
| 156 | { | ||
| 157 | /* GPIO can never have been requested */ | ||
| 158 | WARN_ON(1); | ||
| 159 | } | ||
| 160 | static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc) | ||
| 161 | { | ||
| 162 | /* GPIO can never have been requested */ | ||
| 163 | WARN_ON(1); | ||
| 164 | return 0; | ||
| 165 | } | ||
| 166 | static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, | ||
| 167 | int value) | ||
| 168 | { | ||
| 169 | /* GPIO can never have been requested */ | ||
| 170 | WARN_ON(1); | ||
| 171 | } | ||
| 172 | |||
| 173 | static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce) | ||
| 174 | { | ||
| 175 | /* GPIO can never have been requested */ | ||
| 176 | WARN_ON(1); | ||
| 177 | return -ENOSYS; | ||
| 178 | } | ||
| 179 | |||
| 180 | static inline int gpiod_is_active_low(const struct gpio_desc *desc) | ||
| 181 | { | ||
| 182 | /* GPIO can never have been requested */ | ||
| 183 | WARN_ON(1); | ||
| 184 | return 0; | ||
| 185 | } | ||
| 186 | static inline int gpiod_cansleep(const struct gpio_desc *desc) | ||
| 187 | { | ||
| 188 | /* GPIO can never have been requested */ | ||
| 189 | WARN_ON(1); | ||
| 190 | return 0; | ||
| 191 | } | ||
| 192 | |||
| 193 | static inline int gpiod_to_irq(const struct gpio_desc *desc) | ||
| 194 | { | ||
| 195 | /* GPIO can never have been requested */ | ||
| 196 | WARN_ON(1); | ||
| 197 | return -EINVAL; | ||
| 198 | } | ||
| 199 | |||
| 200 | static inline struct gpio_desc *gpio_to_desc(unsigned gpio) | ||
| 201 | { | ||
| 202 | return ERR_PTR(-EINVAL); | ||
| 203 | } | ||
| 204 | static inline int desc_to_gpio(const struct gpio_desc *desc) | ||
| 205 | { | ||
| 206 | /* GPIO can never have been requested */ | ||
| 207 | WARN_ON(1); | ||
| 208 | return -EINVAL; | ||
| 209 | } | ||
| 210 | static inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc) | ||
| 211 | { | ||
| 212 | /* GPIO can never have been requested */ | ||
| 213 | WARN_ON(1); | ||
| 214 | return ERR_PTR(-ENODEV); | ||
| 215 | } | ||
| 216 | |||
| 217 | |||
| 218 | #endif /* CONFIG_GPIOLIB */ | ||
| 219 | |||
| 220 | #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS) | ||
| 221 | |||
| 222 | int gpiod_export(struct gpio_desc *desc, bool direction_may_change); | ||
| 223 | int gpiod_export_link(struct device *dev, const char *name, | ||
| 224 | struct gpio_desc *desc); | ||
| 225 | int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value); | ||
| 226 | void gpiod_unexport(struct gpio_desc *desc); | ||
| 227 | |||
| 228 | #else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ | ||
| 229 | |||
| 230 | static inline int gpiod_export(struct gpio_desc *desc, | ||
| 231 | bool direction_may_change) | ||
| 232 | { | ||
| 233 | return -ENOSYS; | ||
| 234 | } | ||
| 235 | |||
| 236 | static inline int gpiod_export_link(struct device *dev, const char *name, | ||
| 237 | struct gpio_desc *desc) | ||
| 238 | { | ||
| 239 | return -ENOSYS; | ||
| 240 | } | ||
| 241 | |||
| 242 | static inline int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value) | ||
| 243 | { | ||
| 244 | return -ENOSYS; | ||
| 245 | } | ||
| 246 | |||
| 247 | static inline void gpiod_unexport(struct gpio_desc *desc) | ||
| 248 | { | ||
| 249 | } | ||
| 250 | |||
| 251 | #endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ | ||
| 252 | |||
| 253 | #endif | ||
diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h new file mode 100644 index 000000000000..656a27efb2c8 --- /dev/null +++ b/include/linux/gpio/driver.h | |||
| @@ -0,0 +1,184 @@ | |||
| 1 | #ifndef __LINUX_GPIO_DRIVER_H | ||
| 2 | #define __LINUX_GPIO_DRIVER_H | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 6 | struct device; | ||
| 7 | struct gpio_desc; | ||
| 8 | struct seq_file; | ||
| 9 | |||
| 10 | /** | ||
| 11 | * struct gpio_chip - abstract a GPIO controller | ||
| 12 | * @label: for diagnostics | ||
| 13 | * @dev: optional device providing the GPIOs | ||
| 14 | * @owner: helps prevent removal of modules exporting active GPIOs | ||
| 15 | * @list: links gpio_chips together for traversal | ||
| 16 | * @request: optional hook for chip-specific activation, such as | ||
| 17 | * enabling module power and clock; may sleep | ||
| 18 | * @free: optional hook for chip-specific deactivation, such as | ||
| 19 | * disabling module power and clock; may sleep | ||
| 20 | * @get_direction: returns direction for signal "offset", 0=out, 1=in, | ||
| 21 | * (same as GPIOF_DIR_XXX), or negative error | ||
| 22 | * @direction_input: configures signal "offset" as input, or returns error | ||
| 23 | * @direction_output: configures signal "offset" as output, or returns error | ||
| 24 | * @get: returns value for signal "offset"; for output signals this | ||
| 25 | * returns either the value actually sensed, or zero | ||
| 26 | * @set: assigns output value for signal "offset" | ||
| 27 | * @set_debounce: optional hook for setting debounce time for specified gpio in | ||
| 28 | * interrupt triggered gpio chips | ||
| 29 | * @to_irq: optional hook supporting non-static gpio_to_irq() mappings; | ||
| 30 | * implementation may not sleep | ||
| 31 | * @dbg_show: optional routine to show contents in debugfs; default code | ||
| 32 | * will be used when this is omitted, but custom code can show extra | ||
| 33 | * state (such as pullup/pulldown configuration). | ||
| 34 | * @base: identifies the first GPIO number handled by this chip; or, if | ||
| 35 | * negative during registration, requests dynamic ID allocation. | ||
| 36 | * @ngpio: the number of GPIOs handled by this controller; the last GPIO | ||
| 37 | * handled is (base + ngpio - 1). | ||
| 38 | * @desc: array of ngpio descriptors. Private. | ||
| 39 | * @can_sleep: flag must be set iff get()/set() methods sleep, as they | ||
| 40 | * must while accessing GPIO expander chips over I2C or SPI | ||
| 41 | * @names: if set, must be an array of strings to use as alternative | ||
| 42 | * names for the GPIOs in this chip. Any entry in the array | ||
| 43 | * may be NULL if there is no alias for the GPIO, however the | ||
| 44 | * array must be @ngpio entries long. A name can include a single printk | ||
| 45 | * format specifier for an unsigned int. It is substituted by the actual | ||
| 46 | * number of the gpio. | ||
| 47 | * | ||
| 48 | * A gpio_chip can help platforms abstract various sources of GPIOs so | ||
| 49 | * they can all be accessed through a common programing interface. | ||
| 50 | * Example sources would be SOC controllers, FPGAs, multifunction | ||
| 51 | * chips, dedicated GPIO expanders, and so on. | ||
| 52 | * | ||
| 53 | * Each chip controls a number of signals, identified in method calls | ||
| 54 | * by "offset" values in the range 0..(@ngpio - 1). When those signals | ||
| 55 | * are referenced through calls like gpio_get_value(gpio), the offset | ||
| 56 | * is calculated by subtracting @base from the gpio number. | ||
| 57 | */ | ||
| 58 | struct gpio_chip { | ||
| 59 | const char *label; | ||
| 60 | struct device *dev; | ||
| 61 | struct module *owner; | ||
| 62 | struct list_head list; | ||
| 63 | |||
| 64 | int (*request)(struct gpio_chip *chip, | ||
| 65 | unsigned offset); | ||
| 66 | void (*free)(struct gpio_chip *chip, | ||
| 67 | unsigned offset); | ||
| 68 | int (*get_direction)(struct gpio_chip *chip, | ||
| 69 | unsigned offset); | ||
| 70 | int (*direction_input)(struct gpio_chip *chip, | ||
| 71 | unsigned offset); | ||
| 72 | int (*direction_output)(struct gpio_chip *chip, | ||
| 73 | unsigned offset, int value); | ||
| 74 | int (*get)(struct gpio_chip *chip, | ||
| 75 | unsigned offset); | ||
| 76 | void (*set)(struct gpio_chip *chip, | ||
| 77 | unsigned offset, int value); | ||
| 78 | int (*set_debounce)(struct gpio_chip *chip, | ||
| 79 | unsigned offset, | ||
| 80 | unsigned debounce); | ||
| 81 | |||
| 82 | int (*to_irq)(struct gpio_chip *chip, | ||
| 83 | unsigned offset); | ||
| 84 | |||
| 85 | void (*dbg_show)(struct seq_file *s, | ||
| 86 | struct gpio_chip *chip); | ||
| 87 | int base; | ||
| 88 | u16 ngpio; | ||
| 89 | struct gpio_desc *desc; | ||
| 90 | const char *const *names; | ||
| 91 | unsigned can_sleep:1; | ||
| 92 | unsigned exported:1; | ||
| 93 | |||
| 94 | #if defined(CONFIG_OF_GPIO) | ||
| 95 | /* | ||
| 96 | * If CONFIG_OF is enabled, then all GPIO controllers described in the | ||
| 97 | * device tree automatically may have an OF translation | ||
| 98 | */ | ||
| 99 | struct device_node *of_node; | ||
| 100 | int of_gpio_n_cells; | ||
| 101 | int (*of_xlate)(struct gpio_chip *gc, | ||
| 102 | const struct of_phandle_args *gpiospec, u32 *flags); | ||
| 103 | #endif | ||
| 104 | #ifdef CONFIG_PINCTRL | ||
| 105 | /* | ||
| 106 | * If CONFIG_PINCTRL is enabled, then gpio controllers can optionally | ||
| 107 | * describe the actual pin range which they serve in an SoC. This | ||
| 108 | * information would be used by pinctrl subsystem to configure | ||
| 109 | * corresponding pins for gpio usage. | ||
| 110 | */ | ||
| 111 | struct list_head pin_ranges; | ||
| 112 | #endif | ||
| 113 | }; | ||
| 114 | |||
| 115 | extern const char *gpiochip_is_requested(struct gpio_chip *chip, | ||
| 116 | unsigned offset); | ||
| 117 | |||
| 118 | /* add/remove chips */ | ||
| 119 | extern int gpiochip_add(struct gpio_chip *chip); | ||
| 120 | extern int __must_check gpiochip_remove(struct gpio_chip *chip); | ||
| 121 | extern struct gpio_chip *gpiochip_find(void *data, | ||
| 122 | int (*match)(struct gpio_chip *chip, void *data)); | ||
| 123 | |||
| 124 | /* lock/unlock as IRQ */ | ||
| 125 | int gpiod_lock_as_irq(struct gpio_desc *desc); | ||
| 126 | void gpiod_unlock_as_irq(struct gpio_desc *desc); | ||
| 127 | |||
| 128 | /** | ||
| 129 | * Lookup table for associating GPIOs to specific devices and functions using | ||
| 130 | * platform data. | ||
| 131 | */ | ||
| 132 | struct gpiod_lookup { | ||
| 133 | struct list_head list; | ||
| 134 | /* | ||
| 135 | * name of the chip the GPIO belongs to | ||
| 136 | */ | ||
| 137 | const char *chip_label; | ||
| 138 | /* | ||
| 139 | * hardware number (i.e. relative to the chip) of the GPIO | ||
| 140 | */ | ||
| 141 | u16 chip_hwnum; | ||
| 142 | /* | ||
| 143 | * name of device that can claim this GPIO | ||
| 144 | */ | ||
| 145 | const char *dev_id; | ||
| 146 | /* | ||
| 147 | * name of the GPIO from the device's point of view | ||
| 148 | */ | ||
| 149 | const char *con_id; | ||
| 150 | /* | ||
| 151 | * index of the GPIO in case several GPIOs share the same name | ||
| 152 | */ | ||
| 153 | unsigned int idx; | ||
| 154 | /* | ||
| 155 | * mask of GPIOF_* values | ||
| 156 | */ | ||
| 157 | unsigned long flags; | ||
| 158 | }; | ||
| 159 | |||
| 160 | /* | ||
| 161 | * Simple definition of a single GPIO under a con_id | ||
| 162 | */ | ||
| 163 | #define GPIO_LOOKUP(_chip_label, _chip_hwnum, _dev_id, _con_id, _flags) \ | ||
| 164 | GPIO_LOOKUP_IDX(_chip_label, _chip_hwnum, _dev_id, _con_id, 0, _flags) | ||
| 165 | |||
| 166 | /* | ||
| 167 | * Use this macro if you need to have several GPIOs under the same con_id. | ||
| 168 | * Each GPIO needs to use a different index and can be accessed using | ||
| 169 | * gpiod_get_index() | ||
| 170 | */ | ||
| 171 | #define GPIO_LOOKUP_IDX(_chip_label, _chip_hwnum, _dev_id, _con_id, _idx, \ | ||
| 172 | _flags) \ | ||
| 173 | { \ | ||
| 174 | .chip_label = _chip_label, \ | ||
| 175 | .chip_hwnum = _chip_hwnum, \ | ||
| 176 | .dev_id = _dev_id, \ | ||
| 177 | .con_id = _con_id, \ | ||
| 178 | .idx = _idx, \ | ||
| 179 | .flags = _flags, \ | ||
| 180 | } | ||
| 181 | |||
| 182 | void gpiod_add_table(struct gpiod_lookup *table, size_t size); | ||
| 183 | |||
| 184 | #endif | ||
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 1e041063b226..d9cf963ac832 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
| @@ -33,7 +33,7 @@ extern void rcu_nmi_exit(void); | |||
| 33 | #define __irq_enter() \ | 33 | #define __irq_enter() \ |
| 34 | do { \ | 34 | do { \ |
| 35 | account_irq_enter_time(current); \ | 35 | account_irq_enter_time(current); \ |
| 36 | add_preempt_count(HARDIRQ_OFFSET); \ | 36 | preempt_count_add(HARDIRQ_OFFSET); \ |
| 37 | trace_hardirq_enter(); \ | 37 | trace_hardirq_enter(); \ |
| 38 | } while (0) | 38 | } while (0) |
| 39 | 39 | ||
| @@ -49,7 +49,7 @@ extern void irq_enter(void); | |||
| 49 | do { \ | 49 | do { \ |
| 50 | trace_hardirq_exit(); \ | 50 | trace_hardirq_exit(); \ |
| 51 | account_irq_exit_time(current); \ | 51 | account_irq_exit_time(current); \ |
| 52 | sub_preempt_count(HARDIRQ_OFFSET); \ | 52 | preempt_count_sub(HARDIRQ_OFFSET); \ |
| 53 | } while (0) | 53 | } while (0) |
| 54 | 54 | ||
| 55 | /* | 55 | /* |
| @@ -62,7 +62,7 @@ extern void irq_exit(void); | |||
| 62 | lockdep_off(); \ | 62 | lockdep_off(); \ |
| 63 | ftrace_nmi_enter(); \ | 63 | ftrace_nmi_enter(); \ |
| 64 | BUG_ON(in_nmi()); \ | 64 | BUG_ON(in_nmi()); \ |
| 65 | add_preempt_count(NMI_OFFSET + HARDIRQ_OFFSET); \ | 65 | preempt_count_add(NMI_OFFSET + HARDIRQ_OFFSET); \ |
| 66 | rcu_nmi_enter(); \ | 66 | rcu_nmi_enter(); \ |
| 67 | trace_hardirq_enter(); \ | 67 | trace_hardirq_enter(); \ |
| 68 | } while (0) | 68 | } while (0) |
| @@ -72,7 +72,7 @@ extern void irq_exit(void); | |||
| 72 | trace_hardirq_exit(); \ | 72 | trace_hardirq_exit(); \ |
| 73 | rcu_nmi_exit(); \ | 73 | rcu_nmi_exit(); \ |
| 74 | BUG_ON(!in_nmi()); \ | 74 | BUG_ON(!in_nmi()); \ |
| 75 | sub_preempt_count(NMI_OFFSET + HARDIRQ_OFFSET); \ | 75 | preempt_count_sub(NMI_OFFSET + HARDIRQ_OFFSET); \ |
| 76 | ftrace_nmi_exit(); \ | 76 | ftrace_nmi_exit(); \ |
| 77 | lockdep_on(); \ | 77 | lockdep_on(); \ |
| 78 | } while (0) | 78 | } while (0) |
diff --git a/include/linux/hashtable.h b/include/linux/hashtable.h index a9df51f5d54c..519b6e2d769e 100644 --- a/include/linux/hashtable.h +++ b/include/linux/hashtable.h | |||
| @@ -174,6 +174,21 @@ static inline void hash_del_rcu(struct hlist_node *node) | |||
| 174 | member) | 174 | member) |
| 175 | 175 | ||
| 176 | /** | 176 | /** |
| 177 | * hash_for_each_possible_rcu_notrace - iterate over all possible objects hashing | ||
| 178 | * to the same bucket in an rcu enabled hashtable in a rcu enabled hashtable | ||
| 179 | * @name: hashtable to iterate | ||
| 180 | * @obj: the type * to use as a loop cursor for each entry | ||
| 181 | * @member: the name of the hlist_node within the struct | ||
| 182 | * @key: the key of the objects to iterate over | ||
| 183 | * | ||
| 184 | * This is the same as hash_for_each_possible_rcu() except that it does | ||
| 185 | * not do any RCU debugging or tracing. | ||
| 186 | */ | ||
| 187 | #define hash_for_each_possible_rcu_notrace(name, obj, member, key) \ | ||
| 188 | hlist_for_each_entry_rcu_notrace(obj, \ | ||
| 189 | &name[hash_min(key, HASH_BITS(name))], member) | ||
| 190 | |||
| 191 | /** | ||
| 177 | * hash_for_each_possible_safe - iterate over all possible objects hashing to the | 192 | * hash_for_each_possible_safe - iterate over all possible objects hashing to the |
| 178 | * same bucket safe against removals | 193 | * same bucket safe against removals |
| 179 | * @name: hashtable to iterate | 194 | * @name: hashtable to iterate |
diff --git a/include/linux/hwmon-vid.h b/include/linux/hwmon-vid.h index f346e4d5381c..da0a680e2f6d 100644 --- a/include/linux/hwmon-vid.h +++ b/include/linux/hwmon-vid.h | |||
| @@ -38,7 +38,7 @@ static inline int vid_to_reg(int val, u8 vrm) | |||
| 38 | return ((val >= 1100) && (val <= 1850) ? | 38 | return ((val >= 1100) && (val <= 1850) ? |
| 39 | ((18499 - val * 10) / 25 + 5) / 10 : -1); | 39 | ((18499 - val * 10) / 25 + 5) / 10 : -1); |
| 40 | default: | 40 | default: |
| 41 | return -1; | 41 | return -EINVAL; |
| 42 | } | 42 | } |
| 43 | } | 43 | } |
| 44 | 44 | ||
diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h index b2514f70d591..09354f6c1d63 100644 --- a/include/linux/hwmon.h +++ b/include/linux/hwmon.h | |||
| @@ -15,9 +15,19 @@ | |||
| 15 | #define _HWMON_H_ | 15 | #define _HWMON_H_ |
| 16 | 16 | ||
| 17 | struct device; | 17 | struct device; |
| 18 | struct attribute_group; | ||
| 18 | 19 | ||
| 19 | struct device *hwmon_device_register(struct device *dev); | 20 | struct device *hwmon_device_register(struct device *dev); |
| 21 | struct device * | ||
| 22 | hwmon_device_register_with_groups(struct device *dev, const char *name, | ||
| 23 | void *drvdata, | ||
| 24 | const struct attribute_group **groups); | ||
| 25 | struct device * | ||
| 26 | devm_hwmon_device_register_with_groups(struct device *dev, const char *name, | ||
| 27 | void *drvdata, | ||
| 28 | const struct attribute_group **groups); | ||
| 20 | 29 | ||
| 21 | void hwmon_device_unregister(struct device *dev); | 30 | void hwmon_device_unregister(struct device *dev); |
| 31 | void devm_hwmon_device_unregister(struct device *dev); | ||
| 22 | 32 | ||
| 23 | #endif | 33 | #endif |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 5e865b554940..c9e831dc80bc 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | 19 | ||
| 20 | #include <linux/atomic.h> | 20 | #include <linux/atomic.h> |
| 21 | #include <asm/ptrace.h> | 21 | #include <asm/ptrace.h> |
| 22 | #include <asm/irq.h> | ||
| 22 | 23 | ||
| 23 | /* | 24 | /* |
| 24 | * These correspond to the IORESOURCE_IRQ_* defines in | 25 | * These correspond to the IORESOURCE_IRQ_* defines in |
| @@ -374,6 +375,16 @@ struct softirq_action | |||
| 374 | 375 | ||
| 375 | asmlinkage void do_softirq(void); | 376 | asmlinkage void do_softirq(void); |
| 376 | asmlinkage void __do_softirq(void); | 377 | asmlinkage void __do_softirq(void); |
| 378 | |||
| 379 | #ifdef __ARCH_HAS_DO_SOFTIRQ | ||
| 380 | void do_softirq_own_stack(void); | ||
| 381 | #else | ||
| 382 | static inline void do_softirq_own_stack(void) | ||
| 383 | { | ||
| 384 | __do_softirq(); | ||
| 385 | } | ||
| 386 | #endif | ||
| 387 | |||
| 377 | extern void open_softirq(int nr, void (*action)(struct softirq_action *)); | 388 | extern void open_softirq(int nr, void (*action)(struct softirq_action *)); |
| 378 | extern void softirq_init(void); | 389 | extern void softirq_init(void); |
| 379 | extern void __raise_softirq_irqoff(unsigned int nr); | 390 | extern void __raise_softirq_irqoff(unsigned int nr); |
diff --git a/include/linux/irqchip/bcm2835.h b/include/linux/irqchip/bcm2835.h deleted file mode 100644 index 48a859bc9dca..000000000000 --- a/include/linux/irqchip/bcm2835.h +++ /dev/null | |||
| @@ -1,29 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2010 Broadcom | ||
| 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, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 17 | */ | ||
| 18 | |||
| 19 | #ifndef __LINUX_IRQCHIP_BCM2835_H_ | ||
| 20 | #define __LINUX_IRQCHIP_BCM2835_H_ | ||
| 21 | |||
| 22 | #include <asm/exception.h> | ||
| 23 | |||
| 24 | extern void bcm2835_init_irq(void); | ||
| 25 | |||
| 26 | extern asmlinkage void __exception_irq_entry bcm2835_handle_irq( | ||
| 27 | struct pt_regs *regs); | ||
| 28 | |||
| 29 | #endif | ||
diff --git a/include/linux/kdb.h b/include/linux/kdb.h index 7f6fe6e015bc..290db1269c4c 100644 --- a/include/linux/kdb.h +++ b/include/linux/kdb.h | |||
| @@ -109,6 +109,7 @@ typedef enum { | |||
| 109 | KDB_REASON_RECURSE, /* Recursive entry to kdb; | 109 | KDB_REASON_RECURSE, /* Recursive entry to kdb; |
| 110 | * regs probably valid */ | 110 | * regs probably valid */ |
| 111 | KDB_REASON_SSTEP, /* Single Step trap. - regs valid */ | 111 | KDB_REASON_SSTEP, /* Single Step trap. - regs valid */ |
| 112 | KDB_REASON_SYSTEM_NMI, /* In NMI due to SYSTEM cmd; regs valid */ | ||
| 112 | } kdb_reason_t; | 113 | } kdb_reason_t; |
| 113 | 114 | ||
| 114 | extern int kdb_trap_printk; | 115 | extern int kdb_trap_printk; |
diff --git a/include/linux/kgdb.h b/include/linux/kgdb.h index c6e091bf39a5..dfb4f2ffdaa2 100644 --- a/include/linux/kgdb.h +++ b/include/linux/kgdb.h | |||
| @@ -310,6 +310,7 @@ extern int | |||
| 310 | kgdb_handle_exception(int ex_vector, int signo, int err_code, | 310 | kgdb_handle_exception(int ex_vector, int signo, int err_code, |
| 311 | struct pt_regs *regs); | 311 | struct pt_regs *regs); |
| 312 | extern int kgdb_nmicallback(int cpu, void *regs); | 312 | extern int kgdb_nmicallback(int cpu, void *regs); |
| 313 | extern int kgdb_nmicallin(int cpu, int trapnr, void *regs, atomic_t *snd_rdy); | ||
| 313 | extern void gdbstub_exit(int status); | 314 | extern void gdbstub_exit(int status); |
| 314 | 315 | ||
| 315 | extern int kgdb_single_step; | 316 | extern int kgdb_single_step; |
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index da6716b9e3fe..ea4d2495c646 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h | |||
| @@ -136,6 +136,7 @@ struct mempolicy *mpol_shared_policy_lookup(struct shared_policy *sp, | |||
| 136 | 136 | ||
| 137 | struct mempolicy *get_vma_policy(struct task_struct *tsk, | 137 | struct mempolicy *get_vma_policy(struct task_struct *tsk, |
| 138 | struct vm_area_struct *vma, unsigned long addr); | 138 | struct vm_area_struct *vma, unsigned long addr); |
| 139 | bool vma_policy_mof(struct task_struct *task, struct vm_area_struct *vma); | ||
| 139 | 140 | ||
| 140 | extern void numa_default_policy(void); | 141 | extern void numa_default_policy(void); |
| 141 | extern void numa_policy_init(void); | 142 | extern void numa_policy_init(void); |
diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h index cebe97ee98b8..7314fc4e6d25 100644 --- a/include/linux/mfd/core.h +++ b/include/linux/mfd/core.h | |||
| @@ -59,6 +59,12 @@ struct mfd_cell { | |||
| 59 | * pm_runtime_no_callbacks(). | 59 | * pm_runtime_no_callbacks(). |
| 60 | */ | 60 | */ |
| 61 | bool pm_runtime_no_callbacks; | 61 | bool pm_runtime_no_callbacks; |
| 62 | |||
| 63 | /* A list of regulator supplies that should be mapped to the MFD | ||
| 64 | * device rather than the child device when requested | ||
| 65 | */ | ||
| 66 | const char **parent_supplies; | ||
| 67 | int num_parent_supplies; | ||
| 62 | }; | 68 | }; |
| 63 | 69 | ||
| 64 | /* | 70 | /* |
diff --git a/include/linux/mfd/mc13xxx.h b/include/linux/mfd/mc13xxx.h index 41ed59276c00..67c17b5a6f44 100644 --- a/include/linux/mfd/mc13xxx.h +++ b/include/linux/mfd/mc13xxx.h | |||
| @@ -41,6 +41,13 @@ int mc13xxx_adc_do_conversion(struct mc13xxx *mc13xxx, | |||
| 41 | unsigned int mode, unsigned int channel, | 41 | unsigned int mode, unsigned int channel, |
| 42 | u8 ato, bool atox, unsigned int *sample); | 42 | u8 ato, bool atox, unsigned int *sample); |
| 43 | 43 | ||
| 44 | #define MC13783_AUDIO_RX0 36 | ||
| 45 | #define MC13783_AUDIO_RX1 37 | ||
| 46 | #define MC13783_AUDIO_TX 38 | ||
| 47 | #define MC13783_SSI_NETWORK 39 | ||
| 48 | #define MC13783_AUDIO_CODEC 40 | ||
| 49 | #define MC13783_AUDIO_DAC 41 | ||
| 50 | |||
| 44 | #define MC13XXX_IRQ_ADCDONE 0 | 51 | #define MC13XXX_IRQ_ADCDONE 0 |
| 45 | #define MC13XXX_IRQ_ADCBISDONE 1 | 52 | #define MC13XXX_IRQ_ADCBISDONE 1 |
| 46 | #define MC13XXX_IRQ_TS 2 | 53 | #define MC13XXX_IRQ_TS 2 |
diff --git a/include/linux/migrate.h b/include/linux/migrate.h index 8d3c57fdf221..f5096b58b20d 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h | |||
| @@ -90,11 +90,12 @@ static inline int migrate_huge_page_move_mapping(struct address_space *mapping, | |||
| 90 | #endif /* CONFIG_MIGRATION */ | 90 | #endif /* CONFIG_MIGRATION */ |
| 91 | 91 | ||
| 92 | #ifdef CONFIG_NUMA_BALANCING | 92 | #ifdef CONFIG_NUMA_BALANCING |
| 93 | extern int migrate_misplaced_page(struct page *page, int node); | 93 | extern int migrate_misplaced_page(struct page *page, |
| 94 | extern int migrate_misplaced_page(struct page *page, int node); | 94 | struct vm_area_struct *vma, int node); |
| 95 | extern bool migrate_ratelimited(int node); | 95 | extern bool migrate_ratelimited(int node); |
| 96 | #else | 96 | #else |
| 97 | static inline int migrate_misplaced_page(struct page *page, int node) | 97 | static inline int migrate_misplaced_page(struct page *page, |
| 98 | struct vm_area_struct *vma, int node) | ||
| 98 | { | 99 | { |
| 99 | return -EAGAIN; /* can't migrate now */ | 100 | return -EAGAIN; /* can't migrate now */ |
| 100 | } | 101 | } |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 8b6e55ee8855..8aa4006b9636 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -297,12 +297,26 @@ static inline int put_page_testzero(struct page *page) | |||
| 297 | /* | 297 | /* |
| 298 | * Try to grab a ref unless the page has a refcount of zero, return false if | 298 | * Try to grab a ref unless the page has a refcount of zero, return false if |
| 299 | * that is the case. | 299 | * that is the case. |
| 300 | * This can be called when MMU is off so it must not access | ||
| 301 | * any of the virtual mappings. | ||
| 300 | */ | 302 | */ |
| 301 | static inline int get_page_unless_zero(struct page *page) | 303 | static inline int get_page_unless_zero(struct page *page) |
| 302 | { | 304 | { |
| 303 | return atomic_inc_not_zero(&page->_count); | 305 | return atomic_inc_not_zero(&page->_count); |
| 304 | } | 306 | } |
| 305 | 307 | ||
| 308 | /* | ||
| 309 | * Try to drop a ref unless the page has a refcount of one, return false if | ||
| 310 | * that is the case. | ||
| 311 | * This is to make sure that the refcount won't become zero after this drop. | ||
| 312 | * This can be called when MMU is off so it must not access | ||
| 313 | * any of the virtual mappings. | ||
| 314 | */ | ||
| 315 | static inline int put_page_unless_one(struct page *page) | ||
| 316 | { | ||
| 317 | return atomic_add_unless(&page->_count, -1, 1); | ||
| 318 | } | ||
| 319 | |||
| 306 | extern int page_is_ram(unsigned long pfn); | 320 | extern int page_is_ram(unsigned long pfn); |
| 307 | 321 | ||
| 308 | /* Support for virtually mapped pages */ | 322 | /* Support for virtually mapped pages */ |
| @@ -581,11 +595,11 @@ static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma) | |||
| 581 | * sets it, so none of the operations on it need to be atomic. | 595 | * sets it, so none of the operations on it need to be atomic. |
| 582 | */ | 596 | */ |
| 583 | 597 | ||
| 584 | /* Page flags: | [SECTION] | [NODE] | ZONE | [LAST_NID] | ... | FLAGS | */ | 598 | /* Page flags: | [SECTION] | [NODE] | ZONE | [LAST_CPUPID] | ... | FLAGS | */ |
| 585 | #define SECTIONS_PGOFF ((sizeof(unsigned long)*8) - SECTIONS_WIDTH) | 599 | #define SECTIONS_PGOFF ((sizeof(unsigned long)*8) - SECTIONS_WIDTH) |
| 586 | #define NODES_PGOFF (SECTIONS_PGOFF - NODES_WIDTH) | 600 | #define NODES_PGOFF (SECTIONS_PGOFF - NODES_WIDTH) |
| 587 | #define ZONES_PGOFF (NODES_PGOFF - ZONES_WIDTH) | 601 | #define ZONES_PGOFF (NODES_PGOFF - ZONES_WIDTH) |
| 588 | #define LAST_NID_PGOFF (ZONES_PGOFF - LAST_NID_WIDTH) | 602 | #define LAST_CPUPID_PGOFF (ZONES_PGOFF - LAST_CPUPID_WIDTH) |
| 589 | 603 | ||
| 590 | /* | 604 | /* |
| 591 | * Define the bit shifts to access each section. For non-existent | 605 | * Define the bit shifts to access each section. For non-existent |
| @@ -595,7 +609,7 @@ static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma) | |||
| 595 | #define SECTIONS_PGSHIFT (SECTIONS_PGOFF * (SECTIONS_WIDTH != 0)) | 609 | #define SECTIONS_PGSHIFT (SECTIONS_PGOFF * (SECTIONS_WIDTH != 0)) |
| 596 | #define NODES_PGSHIFT (NODES_PGOFF * (NODES_WIDTH != 0)) | 610 | #define NODES_PGSHIFT (NODES_PGOFF * (NODES_WIDTH != 0)) |
| 597 | #define ZONES_PGSHIFT (ZONES_PGOFF * (ZONES_WIDTH != 0)) | 611 | #define ZONES_PGSHIFT (ZONES_PGOFF * (ZONES_WIDTH != 0)) |
| 598 | #define LAST_NID_PGSHIFT (LAST_NID_PGOFF * (LAST_NID_WIDTH != 0)) | 612 | #define LAST_CPUPID_PGSHIFT (LAST_CPUPID_PGOFF * (LAST_CPUPID_WIDTH != 0)) |
| 599 | 613 | ||
| 600 | /* NODE:ZONE or SECTION:ZONE is used to ID a zone for the buddy allocator */ | 614 | /* NODE:ZONE or SECTION:ZONE is used to ID a zone for the buddy allocator */ |
| 601 | #ifdef NODE_NOT_IN_PAGE_FLAGS | 615 | #ifdef NODE_NOT_IN_PAGE_FLAGS |
| @@ -617,7 +631,7 @@ static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma) | |||
| 617 | #define ZONES_MASK ((1UL << ZONES_WIDTH) - 1) | 631 | #define ZONES_MASK ((1UL << ZONES_WIDTH) - 1) |
| 618 | #define NODES_MASK ((1UL << NODES_WIDTH) - 1) | 632 | #define NODES_MASK ((1UL << NODES_WIDTH) - 1) |
| 619 | #define SECTIONS_MASK ((1UL << SECTIONS_WIDTH) - 1) | 633 | #define SECTIONS_MASK ((1UL << SECTIONS_WIDTH) - 1) |
| 620 | #define LAST_NID_MASK ((1UL << LAST_NID_WIDTH) - 1) | 634 | #define LAST_CPUPID_MASK ((1UL << LAST_CPUPID_WIDTH) - 1) |
| 621 | #define ZONEID_MASK ((1UL << ZONEID_SHIFT) - 1) | 635 | #define ZONEID_MASK ((1UL << ZONEID_SHIFT) - 1) |
| 622 | 636 | ||
| 623 | static inline enum zone_type page_zonenum(const struct page *page) | 637 | static inline enum zone_type page_zonenum(const struct page *page) |
| @@ -661,51 +675,117 @@ static inline int page_to_nid(const struct page *page) | |||
| 661 | #endif | 675 | #endif |
| 662 | 676 | ||
| 663 | #ifdef CONFIG_NUMA_BALANCING | 677 | #ifdef CONFIG_NUMA_BALANCING |
| 664 | #ifdef LAST_NID_NOT_IN_PAGE_FLAGS | 678 | static inline int cpu_pid_to_cpupid(int cpu, int pid) |
| 665 | static inline int page_nid_xchg_last(struct page *page, int nid) | ||
| 666 | { | 679 | { |
| 667 | return xchg(&page->_last_nid, nid); | 680 | return ((cpu & LAST__CPU_MASK) << LAST__PID_SHIFT) | (pid & LAST__PID_MASK); |
| 668 | } | 681 | } |
| 669 | 682 | ||
| 670 | static inline int page_nid_last(struct page *page) | 683 | static inline int cpupid_to_pid(int cpupid) |
| 671 | { | 684 | { |
| 672 | return page->_last_nid; | 685 | return cpupid & LAST__PID_MASK; |
| 673 | } | 686 | } |
| 674 | static inline void page_nid_reset_last(struct page *page) | 687 | |
| 688 | static inline int cpupid_to_cpu(int cpupid) | ||
| 675 | { | 689 | { |
| 676 | page->_last_nid = -1; | 690 | return (cpupid >> LAST__PID_SHIFT) & LAST__CPU_MASK; |
| 677 | } | 691 | } |
| 678 | #else | 692 | |
| 679 | static inline int page_nid_last(struct page *page) | 693 | static inline int cpupid_to_nid(int cpupid) |
| 694 | { | ||
| 695 | return cpu_to_node(cpupid_to_cpu(cpupid)); | ||
| 696 | } | ||
| 697 | |||
| 698 | static inline bool cpupid_pid_unset(int cpupid) | ||
| 680 | { | 699 | { |
| 681 | return (page->flags >> LAST_NID_PGSHIFT) & LAST_NID_MASK; | 700 | return cpupid_to_pid(cpupid) == (-1 & LAST__PID_MASK); |
| 682 | } | 701 | } |
| 683 | 702 | ||
| 684 | extern int page_nid_xchg_last(struct page *page, int nid); | 703 | static inline bool cpupid_cpu_unset(int cpupid) |
| 704 | { | ||
| 705 | return cpupid_to_cpu(cpupid) == (-1 & LAST__CPU_MASK); | ||
| 706 | } | ||
| 707 | |||
| 708 | static inline bool __cpupid_match_pid(pid_t task_pid, int cpupid) | ||
| 709 | { | ||
| 710 | return (task_pid & LAST__PID_MASK) == cpupid_to_pid(cpupid); | ||
| 711 | } | ||
| 685 | 712 | ||
| 686 | static inline void page_nid_reset_last(struct page *page) | 713 | #define cpupid_match_pid(task, cpupid) __cpupid_match_pid(task->pid, cpupid) |
| 714 | #ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS | ||
| 715 | static inline int page_cpupid_xchg_last(struct page *page, int cpupid) | ||
| 687 | { | 716 | { |
| 688 | int nid = (1 << LAST_NID_SHIFT) - 1; | 717 | return xchg(&page->_last_cpupid, cpupid); |
| 718 | } | ||
| 689 | 719 | ||
| 690 | page->flags &= ~(LAST_NID_MASK << LAST_NID_PGSHIFT); | 720 | static inline int page_cpupid_last(struct page *page) |
| 691 | page->flags |= (nid & LAST_NID_MASK) << LAST_NID_PGSHIFT; | 721 | { |
| 722 | return page->_last_cpupid; | ||
| 723 | } | ||
| 724 | static inline void page_cpupid_reset_last(struct page *page) | ||
| 725 | { | ||
| 726 | page->_last_cpupid = -1; | ||
| 692 | } | 727 | } |
| 693 | #endif /* LAST_NID_NOT_IN_PAGE_FLAGS */ | ||
| 694 | #else | 728 | #else |
| 695 | static inline int page_nid_xchg_last(struct page *page, int nid) | 729 | static inline int page_cpupid_last(struct page *page) |
| 696 | { | 730 | { |
| 697 | return page_to_nid(page); | 731 | return (page->flags >> LAST_CPUPID_PGSHIFT) & LAST_CPUPID_MASK; |
| 698 | } | 732 | } |
| 699 | 733 | ||
| 700 | static inline int page_nid_last(struct page *page) | 734 | extern int page_cpupid_xchg_last(struct page *page, int cpupid); |
| 735 | |||
| 736 | static inline void page_cpupid_reset_last(struct page *page) | ||
| 701 | { | 737 | { |
| 702 | return page_to_nid(page); | 738 | int cpupid = (1 << LAST_CPUPID_SHIFT) - 1; |
| 739 | |||
| 740 | page->flags &= ~(LAST_CPUPID_MASK << LAST_CPUPID_PGSHIFT); | ||
| 741 | page->flags |= (cpupid & LAST_CPUPID_MASK) << LAST_CPUPID_PGSHIFT; | ||
| 742 | } | ||
| 743 | #endif /* LAST_CPUPID_NOT_IN_PAGE_FLAGS */ | ||
| 744 | #else /* !CONFIG_NUMA_BALANCING */ | ||
| 745 | static inline int page_cpupid_xchg_last(struct page *page, int cpupid) | ||
| 746 | { | ||
| 747 | return page_to_nid(page); /* XXX */ | ||
| 703 | } | 748 | } |
| 704 | 749 | ||
| 705 | static inline void page_nid_reset_last(struct page *page) | 750 | static inline int page_cpupid_last(struct page *page) |
| 706 | { | 751 | { |
| 752 | return page_to_nid(page); /* XXX */ | ||
| 707 | } | 753 | } |
| 708 | #endif | 754 | |
| 755 | static inline int cpupid_to_nid(int cpupid) | ||
| 756 | { | ||
| 757 | return -1; | ||
| 758 | } | ||
| 759 | |||
| 760 | static inline int cpupid_to_pid(int cpupid) | ||
| 761 | { | ||
| 762 | return -1; | ||
| 763 | } | ||
| 764 | |||
| 765 | static inline int cpupid_to_cpu(int cpupid) | ||
| 766 | { | ||
| 767 | return -1; | ||
| 768 | } | ||
| 769 | |||
| 770 | static inline int cpu_pid_to_cpupid(int nid, int pid) | ||
| 771 | { | ||
| 772 | return -1; | ||
| 773 | } | ||
| 774 | |||
| 775 | static inline bool cpupid_pid_unset(int cpupid) | ||
| 776 | { | ||
| 777 | return 1; | ||
| 778 | } | ||
| 779 | |||
| 780 | static inline void page_cpupid_reset_last(struct page *page) | ||
| 781 | { | ||
| 782 | } | ||
| 783 | |||
| 784 | static inline bool cpupid_match_pid(struct task_struct *task, int cpupid) | ||
| 785 | { | ||
| 786 | return false; | ||
| 787 | } | ||
| 788 | #endif /* CONFIG_NUMA_BALANCING */ | ||
| 709 | 789 | ||
| 710 | static inline struct zone *page_zone(const struct page *page) | 790 | static inline struct zone *page_zone(const struct page *page) |
| 711 | { | 791 | { |
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index d9851eeb6e1d..a3198e5aaf4e 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h | |||
| @@ -174,8 +174,8 @@ struct page { | |||
| 174 | void *shadow; | 174 | void *shadow; |
| 175 | #endif | 175 | #endif |
| 176 | 176 | ||
| 177 | #ifdef LAST_NID_NOT_IN_PAGE_FLAGS | 177 | #ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS |
| 178 | int _last_nid; | 178 | int _last_cpupid; |
| 179 | #endif | 179 | #endif |
| 180 | } | 180 | } |
| 181 | /* | 181 | /* |
| @@ -420,28 +420,15 @@ struct mm_struct { | |||
| 420 | */ | 420 | */ |
| 421 | unsigned long numa_next_scan; | 421 | unsigned long numa_next_scan; |
| 422 | 422 | ||
| 423 | /* numa_next_reset is when the PTE scanner period will be reset */ | ||
| 424 | unsigned long numa_next_reset; | ||
| 425 | |||
| 426 | /* Restart point for scanning and setting pte_numa */ | 423 | /* Restart point for scanning and setting pte_numa */ |
| 427 | unsigned long numa_scan_offset; | 424 | unsigned long numa_scan_offset; |
| 428 | 425 | ||
| 429 | /* numa_scan_seq prevents two threads setting pte_numa */ | 426 | /* numa_scan_seq prevents two threads setting pte_numa */ |
| 430 | int numa_scan_seq; | 427 | int numa_scan_seq; |
| 431 | |||
| 432 | /* | ||
| 433 | * The first node a task was scheduled on. If a task runs on | ||
| 434 | * a different node than Make PTE Scan Go Now. | ||
| 435 | */ | ||
| 436 | int first_nid; | ||
| 437 | #endif | 428 | #endif |
| 438 | struct uprobes_state uprobes_state; | 429 | struct uprobes_state uprobes_state; |
| 439 | }; | 430 | }; |
| 440 | 431 | ||
| 441 | /* first nid will either be a valid NID or one of these values */ | ||
| 442 | #define NUMA_PTE_SCAN_INIT -1 | ||
| 443 | #define NUMA_PTE_SCAN_ACTIVE -2 | ||
| 444 | |||
| 445 | static inline void mm_init_cpumask(struct mm_struct *mm) | 432 | static inline void mm_init_cpumask(struct mm_struct *mm) |
| 446 | { | 433 | { |
| 447 | #ifdef CONFIG_CPUMASK_OFFSTACK | 434 | #ifdef CONFIG_CPUMASK_OFFSTACK |
diff --git a/include/linux/of.h b/include/linux/of.h index f95aee391e30..276c546980d8 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
| @@ -136,7 +136,9 @@ static inline unsigned long of_read_ulong(const __be32 *cell, int size) | |||
| 136 | return of_read_number(cell, size); | 136 | return of_read_number(cell, size); |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | #if defined(CONFIG_SPARC) | ||
| 139 | #include <asm/prom.h> | 140 | #include <asm/prom.h> |
| 141 | #endif | ||
| 140 | 142 | ||
| 141 | /* Default #address and #size cells. Allow arch asm/prom.h to override */ | 143 | /* Default #address and #size cells. Allow arch asm/prom.h to override */ |
| 142 | #if !defined(OF_ROOT_NODE_ADDR_CELLS_DEFAULT) | 144 | #if !defined(OF_ROOT_NODE_ADDR_CELLS_DEFAULT) |
| @@ -226,6 +228,19 @@ static inline int of_get_child_count(const struct device_node *np) | |||
| 226 | return num; | 228 | return num; |
| 227 | } | 229 | } |
| 228 | 230 | ||
| 231 | static inline int of_get_available_child_count(const struct device_node *np) | ||
| 232 | { | ||
| 233 | struct device_node *child; | ||
| 234 | int num = 0; | ||
| 235 | |||
| 236 | for_each_available_child_of_node(np, child) | ||
| 237 | num++; | ||
| 238 | |||
| 239 | return num; | ||
| 240 | } | ||
| 241 | |||
| 242 | /* cache lookup */ | ||
| 243 | extern struct device_node *of_find_next_cache_node(const struct device_node *); | ||
| 229 | extern struct device_node *of_find_node_with_property( | 244 | extern struct device_node *of_find_node_with_property( |
| 230 | struct device_node *from, const char *prop_name); | 245 | struct device_node *from, const char *prop_name); |
| 231 | #define for_each_node_with_property(dn, prop_name) \ | 246 | #define for_each_node_with_property(dn, prop_name) \ |
| @@ -275,6 +290,7 @@ extern int of_n_size_cells(struct device_node *np); | |||
| 275 | extern const struct of_device_id *of_match_node( | 290 | extern const struct of_device_id *of_match_node( |
| 276 | const struct of_device_id *matches, const struct device_node *node); | 291 | const struct of_device_id *matches, const struct device_node *node); |
| 277 | extern int of_modalias_node(struct device_node *node, char *modalias, int len); | 292 | extern int of_modalias_node(struct device_node *node, char *modalias, int len); |
| 293 | extern void of_print_phandle_args(const char *msg, const struct of_phandle_args *args); | ||
| 278 | extern struct device_node *of_parse_phandle(const struct device_node *np, | 294 | extern struct device_node *of_parse_phandle(const struct device_node *np, |
| 279 | const char *phandle_name, | 295 | const char *phandle_name, |
| 280 | int index); | 296 | int index); |
| @@ -364,6 +380,9 @@ static inline bool of_have_populated_dt(void) | |||
| 364 | #define for_each_child_of_node(parent, child) \ | 380 | #define for_each_child_of_node(parent, child) \ |
| 365 | while (0) | 381 | while (0) |
| 366 | 382 | ||
| 383 | #define for_each_available_child_of_node(parent, child) \ | ||
| 384 | while (0) | ||
| 385 | |||
| 367 | static inline struct device_node *of_get_child_by_name( | 386 | static inline struct device_node *of_get_child_by_name( |
| 368 | const struct device_node *node, | 387 | const struct device_node *node, |
| 369 | const char *name) | 388 | const char *name) |
| @@ -376,6 +395,11 @@ static inline int of_get_child_count(const struct device_node *np) | |||
| 376 | return 0; | 395 | return 0; |
| 377 | } | 396 | } |
| 378 | 397 | ||
| 398 | static inline int of_get_available_child_count(const struct device_node *np) | ||
| 399 | { | ||
| 400 | return 0; | ||
| 401 | } | ||
| 402 | |||
| 379 | static inline int of_device_is_compatible(const struct device_node *device, | 403 | static inline int of_device_is_compatible(const struct device_node *device, |
| 380 | const char *name) | 404 | const char *name) |
| 381 | { | 405 | { |
| @@ -534,13 +558,10 @@ static inline const char *of_prop_next_string(struct property *prop, | |||
| 534 | #define of_match_node(_matches, _node) NULL | 558 | #define of_match_node(_matches, _node) NULL |
| 535 | #endif /* CONFIG_OF */ | 559 | #endif /* CONFIG_OF */ |
| 536 | 560 | ||
| 537 | #ifndef of_node_to_nid | 561 | #if defined(CONFIG_OF) && defined(CONFIG_NUMA) |
| 538 | static inline int of_node_to_nid(struct device_node *np) | 562 | extern int of_node_to_nid(struct device_node *np); |
| 539 | { | 563 | #else |
| 540 | return numa_node_id(); | 564 | static inline int of_node_to_nid(struct device_node *device) { return 0; } |
| 541 | } | ||
| 542 | |||
| 543 | #define of_node_to_nid of_node_to_nid | ||
| 544 | #endif | 565 | #endif |
| 545 | 566 | ||
| 546 | /** | 567 | /** |
diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 4c2e6f26432c..5f6ed6b182b8 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h | |||
| @@ -34,6 +34,10 @@ static inline void of_pci_range_to_resource(struct of_pci_range *range, | |||
| 34 | res->name = np->full_name; | 34 | res->name = np->full_name; |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | /* Translate a DMA address from device space to CPU space */ | ||
| 38 | extern u64 of_translate_dma_address(struct device_node *dev, | ||
| 39 | const __be32 *in_addr); | ||
| 40 | |||
| 37 | #ifdef CONFIG_OF_ADDRESS | 41 | #ifdef CONFIG_OF_ADDRESS |
| 38 | extern u64 of_translate_address(struct device_node *np, const __be32 *addr); | 42 | extern u64 of_translate_address(struct device_node *np, const __be32 *addr); |
| 39 | extern bool of_can_translate_address(struct device_node *dev); | 43 | extern bool of_can_translate_address(struct device_node *dev); |
| @@ -52,10 +56,7 @@ extern void __iomem *of_iomap(struct device_node *device, int index); | |||
| 52 | extern const __be32 *of_get_address(struct device_node *dev, int index, | 56 | extern const __be32 *of_get_address(struct device_node *dev, int index, |
| 53 | u64 *size, unsigned int *flags); | 57 | u64 *size, unsigned int *flags); |
| 54 | 58 | ||
| 55 | #ifndef pci_address_to_pio | 59 | extern unsigned long pci_address_to_pio(phys_addr_t addr); |
| 56 | static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; } | ||
| 57 | #define pci_address_to_pio pci_address_to_pio | ||
| 58 | #endif | ||
| 59 | 60 | ||
| 60 | extern int of_pci_range_parser_init(struct of_pci_range_parser *parser, | 61 | extern int of_pci_range_parser_init(struct of_pci_range_parser *parser, |
| 61 | struct device_node *node); | 62 | struct device_node *node); |
| @@ -63,13 +64,6 @@ extern struct of_pci_range *of_pci_range_parser_one( | |||
| 63 | struct of_pci_range_parser *parser, | 64 | struct of_pci_range_parser *parser, |
| 64 | struct of_pci_range *range); | 65 | struct of_pci_range *range); |
| 65 | #else /* CONFIG_OF_ADDRESS */ | 66 | #else /* CONFIG_OF_ADDRESS */ |
| 66 | #ifndef of_address_to_resource | ||
| 67 | static inline int of_address_to_resource(struct device_node *dev, int index, | ||
| 68 | struct resource *r) | ||
| 69 | { | ||
| 70 | return -EINVAL; | ||
| 71 | } | ||
| 72 | #endif | ||
| 73 | static inline struct device_node *of_find_matching_node_by_address( | 67 | static inline struct device_node *of_find_matching_node_by_address( |
| 74 | struct device_node *from, | 68 | struct device_node *from, |
| 75 | const struct of_device_id *matches, | 69 | const struct of_device_id *matches, |
| @@ -77,12 +71,7 @@ static inline struct device_node *of_find_matching_node_by_address( | |||
| 77 | { | 71 | { |
| 78 | return NULL; | 72 | return NULL; |
| 79 | } | 73 | } |
| 80 | #ifndef of_iomap | 74 | |
| 81 | static inline void __iomem *of_iomap(struct device_node *device, int index) | ||
| 82 | { | ||
| 83 | return NULL; | ||
| 84 | } | ||
| 85 | #endif | ||
| 86 | static inline const __be32 *of_get_address(struct device_node *dev, int index, | 75 | static inline const __be32 *of_get_address(struct device_node *dev, int index, |
| 87 | u64 *size, unsigned int *flags) | 76 | u64 *size, unsigned int *flags) |
| 88 | { | 77 | { |
| @@ -103,6 +92,22 @@ static inline struct of_pci_range *of_pci_range_parser_one( | |||
| 103 | } | 92 | } |
| 104 | #endif /* CONFIG_OF_ADDRESS */ | 93 | #endif /* CONFIG_OF_ADDRESS */ |
| 105 | 94 | ||
| 95 | #ifdef CONFIG_OF | ||
| 96 | extern int of_address_to_resource(struct device_node *dev, int index, | ||
| 97 | struct resource *r); | ||
| 98 | void __iomem *of_iomap(struct device_node *node, int index); | ||
| 99 | #else | ||
| 100 | static inline int of_address_to_resource(struct device_node *dev, int index, | ||
| 101 | struct resource *r) | ||
| 102 | { | ||
| 103 | return -EINVAL; | ||
| 104 | } | ||
| 105 | |||
| 106 | static inline void __iomem *of_iomap(struct device_node *device, int index) | ||
| 107 | { | ||
| 108 | return NULL; | ||
| 109 | } | ||
| 110 | #endif | ||
| 106 | 111 | ||
| 107 | #if defined(CONFIG_OF_ADDRESS) && defined(CONFIG_PCI) | 112 | #if defined(CONFIG_OF_ADDRESS) && defined(CONFIG_PCI) |
| 108 | extern const __be32 *of_get_pci_address(struct device_node *dev, int bar_no, | 113 | extern const __be32 *of_get_pci_address(struct device_node *dev, int bar_no, |
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h index a478c62a2aab..0beaee9dac1f 100644 --- a/include/linux/of_fdt.h +++ b/include/linux/of_fdt.h | |||
| @@ -96,31 +96,30 @@ extern int of_scan_flat_dt_by_path(const char *path, | |||
| 96 | 96 | ||
| 97 | extern int early_init_dt_scan_chosen(unsigned long node, const char *uname, | 97 | extern int early_init_dt_scan_chosen(unsigned long node, const char *uname, |
| 98 | int depth, void *data); | 98 | int depth, void *data); |
| 99 | extern void early_init_dt_check_for_initrd(unsigned long node); | ||
| 100 | extern int early_init_dt_scan_memory(unsigned long node, const char *uname, | 99 | extern int early_init_dt_scan_memory(unsigned long node, const char *uname, |
| 101 | int depth, void *data); | 100 | int depth, void *data); |
| 102 | extern void early_init_dt_add_memory_arch(u64 base, u64 size); | 101 | extern void early_init_dt_add_memory_arch(u64 base, u64 size); |
| 103 | extern void * early_init_dt_alloc_memory_arch(u64 size, u64 align); | 102 | extern void * early_init_dt_alloc_memory_arch(u64 size, u64 align); |
| 104 | extern u64 dt_mem_next_cell(int s, __be32 **cellp); | 103 | extern u64 dt_mem_next_cell(int s, __be32 **cellp); |
| 105 | 104 | ||
| 106 | /* | ||
| 107 | * If BLK_DEV_INITRD, the fdt early init code will call this function, | ||
| 108 | * to be provided by the arch code. start and end are specified as | ||
| 109 | * physical addresses. | ||
| 110 | */ | ||
| 111 | #ifdef CONFIG_BLK_DEV_INITRD | ||
| 112 | extern void early_init_dt_setup_initrd_arch(u64 start, u64 end); | ||
| 113 | #endif | ||
| 114 | |||
| 115 | /* Early flat tree scan hooks */ | 105 | /* Early flat tree scan hooks */ |
| 116 | extern int early_init_dt_scan_root(unsigned long node, const char *uname, | 106 | extern int early_init_dt_scan_root(unsigned long node, const char *uname, |
| 117 | int depth, void *data); | 107 | int depth, void *data); |
| 118 | 108 | ||
| 109 | extern bool early_init_dt_scan(void *params); | ||
| 110 | |||
| 111 | extern const char *of_flat_dt_get_machine_name(void); | ||
| 112 | extern const void *of_flat_dt_match_machine(const void *default_match, | ||
| 113 | const void * (*get_next_compat)(const char * const**)); | ||
| 114 | |||
| 119 | /* Other Prototypes */ | 115 | /* Other Prototypes */ |
| 120 | extern void unflatten_device_tree(void); | 116 | extern void unflatten_device_tree(void); |
| 117 | extern void unflatten_and_copy_device_tree(void); | ||
| 121 | extern void early_init_devtree(void *); | 118 | extern void early_init_devtree(void *); |
| 122 | #else /* CONFIG_OF_FLATTREE */ | 119 | #else /* CONFIG_OF_FLATTREE */ |
| 120 | static inline const char *of_flat_dt_get_machine_name(void) { return NULL; } | ||
| 123 | static inline void unflatten_device_tree(void) {} | 121 | static inline void unflatten_device_tree(void) {} |
| 122 | static inline void unflatten_and_copy_device_tree(void) {} | ||
| 124 | #endif /* CONFIG_OF_FLATTREE */ | 123 | #endif /* CONFIG_OF_FLATTREE */ |
| 125 | 124 | ||
| 126 | #endif /* __ASSEMBLY__ */ | 125 | #endif /* __ASSEMBLY__ */ |
diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h index a83dc6f5008e..f14123a5a9df 100644 --- a/include/linux/of_gpio.h +++ b/include/linux/of_gpio.h | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/errno.h> | 19 | #include <linux/errno.h> |
| 20 | #include <linux/gpio.h> | 20 | #include <linux/gpio.h> |
| 21 | #include <linux/of.h> | 21 | #include <linux/of.h> |
| 22 | #include <linux/gpio/consumer.h> | ||
| 22 | 23 | ||
| 23 | struct device_node; | 24 | struct device_node; |
| 24 | 25 | ||
| @@ -47,7 +48,7 @@ static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc) | |||
| 47 | return container_of(gc, struct of_mm_gpio_chip, gc); | 48 | return container_of(gc, struct of_mm_gpio_chip, gc); |
| 48 | } | 49 | } |
| 49 | 50 | ||
| 50 | extern int of_get_named_gpio_flags(struct device_node *np, | 51 | extern struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np, |
| 51 | const char *list_name, int index, enum of_gpio_flags *flags); | 52 | const char *list_name, int index, enum of_gpio_flags *flags); |
| 52 | 53 | ||
| 53 | extern int of_mm_gpiochip_add(struct device_node *np, | 54 | extern int of_mm_gpiochip_add(struct device_node *np, |
| @@ -62,10 +63,10 @@ extern int of_gpio_simple_xlate(struct gpio_chip *gc, | |||
| 62 | #else /* CONFIG_OF_GPIO */ | 63 | #else /* CONFIG_OF_GPIO */ |
| 63 | 64 | ||
| 64 | /* Drivers may not strictly depend on the GPIO support, so let them link. */ | 65 | /* Drivers may not strictly depend on the GPIO support, so let them link. */ |
| 65 | static inline int of_get_named_gpio_flags(struct device_node *np, | 66 | static inline struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np, |
| 66 | const char *list_name, int index, enum of_gpio_flags *flags) | 67 | const char *list_name, int index, enum of_gpio_flags *flags) |
| 67 | { | 68 | { |
| 68 | return -ENOSYS; | 69 | return ERR_PTR(-ENOSYS); |
| 69 | } | 70 | } |
| 70 | 71 | ||
| 71 | static inline int of_gpio_simple_xlate(struct gpio_chip *gc, | 72 | static inline int of_gpio_simple_xlate(struct gpio_chip *gc, |
| @@ -80,6 +81,18 @@ static inline void of_gpiochip_remove(struct gpio_chip *gc) { } | |||
| 80 | 81 | ||
| 81 | #endif /* CONFIG_OF_GPIO */ | 82 | #endif /* CONFIG_OF_GPIO */ |
| 82 | 83 | ||
| 84 | static inline int of_get_named_gpio_flags(struct device_node *np, | ||
| 85 | const char *list_name, int index, enum of_gpio_flags *flags) | ||
| 86 | { | ||
| 87 | struct gpio_desc *desc; | ||
| 88 | desc = of_get_named_gpiod_flags(np, list_name, index, flags); | ||
| 89 | |||
| 90 | if (IS_ERR(desc)) | ||
| 91 | return PTR_ERR(desc); | ||
| 92 | else | ||
| 93 | return desc_to_gpio(desc); | ||
| 94 | } | ||
| 95 | |||
| 83 | /** | 96 | /** |
| 84 | * of_gpio_named_count() - Count GPIOs for a device | 97 | * of_gpio_named_count() - Count GPIOs for a device |
| 85 | * @np: device node to count GPIOs for | 98 | * @np: device node to count GPIOs for |
| @@ -117,15 +130,21 @@ static inline int of_gpio_count(struct device_node *np) | |||
| 117 | } | 130 | } |
| 118 | 131 | ||
| 119 | /** | 132 | /** |
| 120 | * of_get_gpio_flags() - Get a GPIO number and flags to use with GPIO API | 133 | * of_get_gpiod_flags() - Get a GPIO descriptor and flags to use with GPIO API |
| 121 | * @np: device node to get GPIO from | 134 | * @np: device node to get GPIO from |
| 122 | * @index: index of the GPIO | 135 | * @index: index of the GPIO |
| 123 | * @flags: a flags pointer to fill in | 136 | * @flags: a flags pointer to fill in |
| 124 | * | 137 | * |
| 125 | * Returns GPIO number to use with Linux generic GPIO API, or one of the errno | 138 | * Returns GPIO descriptor to use with Linux generic GPIO API, or a errno |
| 126 | * value on the error condition. If @flags is not NULL the function also fills | 139 | * value on the error condition. If @flags is not NULL the function also fills |
| 127 | * in flags for the GPIO. | 140 | * in flags for the GPIO. |
| 128 | */ | 141 | */ |
| 142 | static inline struct gpio_desc *of_get_gpiod_flags(struct device_node *np, | ||
| 143 | int index, enum of_gpio_flags *flags) | ||
| 144 | { | ||
| 145 | return of_get_named_gpiod_flags(np, "gpios", index, flags); | ||
| 146 | } | ||
| 147 | |||
| 129 | static inline int of_get_gpio_flags(struct device_node *np, int index, | 148 | static inline int of_get_gpio_flags(struct device_node *np, int index, |
| 130 | enum of_gpio_flags *flags) | 149 | enum of_gpio_flags *flags) |
| 131 | { | 150 | { |
diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h index fcd63baee5f2..3f23b4472c31 100644 --- a/include/linux/of_irq.h +++ b/include/linux/of_irq.h | |||
| @@ -8,22 +8,6 @@ | |||
| 8 | #include <linux/ioport.h> | 8 | #include <linux/ioport.h> |
| 9 | #include <linux/of.h> | 9 | #include <linux/of.h> |
| 10 | 10 | ||
| 11 | /** | ||
| 12 | * of_irq - container for device_node/irq_specifier pair for an irq controller | ||
| 13 | * @controller: pointer to interrupt controller device tree node | ||
| 14 | * @size: size of interrupt specifier | ||
| 15 | * @specifier: array of cells @size long specifing the specific interrupt | ||
| 16 | * | ||
| 17 | * This structure is returned when an interrupt is mapped. The controller | ||
| 18 | * field needs to be put() after use | ||
| 19 | */ | ||
| 20 | #define OF_MAX_IRQ_SPEC 4 /* We handle specifiers of at most 4 cells */ | ||
| 21 | struct of_irq { | ||
| 22 | struct device_node *controller; /* Interrupt controller node */ | ||
| 23 | u32 size; /* Specifier size */ | ||
| 24 | u32 specifier[OF_MAX_IRQ_SPEC]; /* Specifier copy */ | ||
| 25 | }; | ||
| 26 | |||
| 27 | typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *); | 11 | typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *); |
| 28 | 12 | ||
| 29 | /* | 13 | /* |
| @@ -35,35 +19,38 @@ typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *); | |||
| 35 | #if defined(CONFIG_PPC32) && defined(CONFIG_PPC_PMAC) | 19 | #if defined(CONFIG_PPC32) && defined(CONFIG_PPC_PMAC) |
| 36 | extern unsigned int of_irq_workarounds; | 20 | extern unsigned int of_irq_workarounds; |
| 37 | extern struct device_node *of_irq_dflt_pic; | 21 | extern struct device_node *of_irq_dflt_pic; |
| 38 | extern int of_irq_map_oldworld(struct device_node *device, int index, | 22 | extern int of_irq_parse_oldworld(struct device_node *device, int index, |
| 39 | struct of_irq *out_irq); | 23 | struct of_phandle_args *out_irq); |
| 40 | #else /* CONFIG_PPC32 && CONFIG_PPC_PMAC */ | 24 | #else /* CONFIG_PPC32 && CONFIG_PPC_PMAC */ |
| 41 | #define of_irq_workarounds (0) | 25 | #define of_irq_workarounds (0) |
| 42 | #define of_irq_dflt_pic (NULL) | 26 | #define of_irq_dflt_pic (NULL) |
| 43 | static inline int of_irq_map_oldworld(struct device_node *device, int index, | 27 | static inline int of_irq_parse_oldworld(struct device_node *device, int index, |
| 44 | struct of_irq *out_irq) | 28 | struct of_phandle_args *out_irq) |
| 45 | { | 29 | { |
| 46 | return -EINVAL; | 30 | return -EINVAL; |
| 47 | } | 31 | } |
| 48 | #endif /* CONFIG_PPC32 && CONFIG_PPC_PMAC */ | 32 | #endif /* CONFIG_PPC32 && CONFIG_PPC_PMAC */ |
| 49 | 33 | ||
| 50 | 34 | extern int of_irq_parse_raw(const __be32 *addr, struct of_phandle_args *out_irq); | |
| 51 | extern int of_irq_map_raw(struct device_node *parent, const __be32 *intspec, | 35 | extern int of_irq_parse_one(struct device_node *device, int index, |
| 52 | u32 ointsize, const __be32 *addr, | 36 | struct of_phandle_args *out_irq); |
| 53 | struct of_irq *out_irq); | 37 | extern unsigned int irq_create_of_mapping(struct of_phandle_args *irq_data); |
| 54 | extern int of_irq_map_one(struct device_node *device, int index, | ||
| 55 | struct of_irq *out_irq); | ||
| 56 | extern unsigned int irq_create_of_mapping(struct device_node *controller, | ||
| 57 | const u32 *intspec, | ||
| 58 | unsigned int intsize); | ||
| 59 | extern int of_irq_to_resource(struct device_node *dev, int index, | 38 | extern int of_irq_to_resource(struct device_node *dev, int index, |
| 60 | struct resource *r); | 39 | struct resource *r); |
| 61 | extern int of_irq_count(struct device_node *dev); | ||
| 62 | extern int of_irq_to_resource_table(struct device_node *dev, | 40 | extern int of_irq_to_resource_table(struct device_node *dev, |
| 63 | struct resource *res, int nr_irqs); | 41 | struct resource *res, int nr_irqs); |
| 64 | 42 | ||
| 65 | extern void of_irq_init(const struct of_device_id *matches); | 43 | extern void of_irq_init(const struct of_device_id *matches); |
| 66 | 44 | ||
| 45 | #ifdef CONFIG_OF_IRQ | ||
| 46 | extern int of_irq_count(struct device_node *dev); | ||
| 47 | #else | ||
| 48 | static inline int of_irq_count(struct device_node *dev) | ||
| 49 | { | ||
| 50 | return 0; | ||
| 51 | } | ||
| 52 | #endif | ||
| 53 | |||
| 67 | #if defined(CONFIG_OF) | 54 | #if defined(CONFIG_OF) |
| 68 | /* | 55 | /* |
| 69 | * irq_of_parse_and_map() is used by all OF enabled platforms; but SPARC | 56 | * irq_of_parse_and_map() is used by all OF enabled platforms; but SPARC |
diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h index fd9c408631a0..1a1f5ffd5288 100644 --- a/include/linux/of_pci.h +++ b/include/linux/of_pci.h | |||
| @@ -5,8 +5,9 @@ | |||
| 5 | #include <linux/msi.h> | 5 | #include <linux/msi.h> |
| 6 | 6 | ||
| 7 | struct pci_dev; | 7 | struct pci_dev; |
| 8 | struct of_irq; | 8 | struct of_phandle_args; |
| 9 | int of_irq_map_pci(const struct pci_dev *pdev, struct of_irq *out_irq); | 9 | int of_irq_parse_pci(const struct pci_dev *pdev, struct of_phandle_args *out_irq); |
| 10 | int of_irq_parse_and_map_pci(const struct pci_dev *dev, u8 slot, u8 pin); | ||
| 10 | 11 | ||
| 11 | struct device_node; | 12 | struct device_node; |
| 12 | struct device_node *of_pci_find_child_device(struct device_node *parent, | 13 | struct device_node *of_pci_find_child_device(struct device_node *parent, |
diff --git a/include/linux/page-flags-layout.h b/include/linux/page-flags-layout.h index 93506a114034..da523661500a 100644 --- a/include/linux/page-flags-layout.h +++ b/include/linux/page-flags-layout.h | |||
| @@ -38,10 +38,10 @@ | |||
| 38 | * The last is when there is insufficient space in page->flags and a separate | 38 | * The last is when there is insufficient space in page->flags and a separate |
| 39 | * lookup is necessary. | 39 | * lookup is necessary. |
| 40 | * | 40 | * |
| 41 | * No sparsemem or sparsemem vmemmap: | NODE | ZONE | ... | FLAGS | | 41 | * No sparsemem or sparsemem vmemmap: | NODE | ZONE | ... | FLAGS | |
| 42 | * " plus space for last_nid: | NODE | ZONE | LAST_NID ... | FLAGS | | 42 | * " plus space for last_cpupid: | NODE | ZONE | LAST_CPUPID ... | FLAGS | |
| 43 | * classic sparse with space for node:| SECTION | NODE | ZONE | ... | FLAGS | | 43 | * classic sparse with space for node:| SECTION | NODE | ZONE | ... | FLAGS | |
| 44 | * " plus space for last_nid: | SECTION | NODE | ZONE | LAST_NID ... | FLAGS | | 44 | * " plus space for last_cpupid: | SECTION | NODE | ZONE | LAST_CPUPID ... | FLAGS | |
| 45 | * classic sparse no space for node: | SECTION | ZONE | ... | FLAGS | | 45 | * classic sparse no space for node: | SECTION | ZONE | ... | FLAGS | |
| 46 | */ | 46 | */ |
| 47 | #if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) | 47 | #if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) |
| @@ -62,15 +62,21 @@ | |||
| 62 | #endif | 62 | #endif |
| 63 | 63 | ||
| 64 | #ifdef CONFIG_NUMA_BALANCING | 64 | #ifdef CONFIG_NUMA_BALANCING |
| 65 | #define LAST_NID_SHIFT NODES_SHIFT | 65 | #define LAST__PID_SHIFT 8 |
| 66 | #define LAST__PID_MASK ((1 << LAST__PID_SHIFT)-1) | ||
| 67 | |||
| 68 | #define LAST__CPU_SHIFT NR_CPUS_BITS | ||
| 69 | #define LAST__CPU_MASK ((1 << LAST__CPU_SHIFT)-1) | ||
| 70 | |||
| 71 | #define LAST_CPUPID_SHIFT (LAST__PID_SHIFT+LAST__CPU_SHIFT) | ||
| 66 | #else | 72 | #else |
| 67 | #define LAST_NID_SHIFT 0 | 73 | #define LAST_CPUPID_SHIFT 0 |
| 68 | #endif | 74 | #endif |
| 69 | 75 | ||
| 70 | #if SECTIONS_WIDTH+ZONES_WIDTH+NODES_SHIFT+LAST_NID_SHIFT <= BITS_PER_LONG - NR_PAGEFLAGS | 76 | #if SECTIONS_WIDTH+ZONES_WIDTH+NODES_SHIFT+LAST_CPUPID_SHIFT <= BITS_PER_LONG - NR_PAGEFLAGS |
| 71 | #define LAST_NID_WIDTH LAST_NID_SHIFT | 77 | #define LAST_CPUPID_WIDTH LAST_CPUPID_SHIFT |
| 72 | #else | 78 | #else |
| 73 | #define LAST_NID_WIDTH 0 | 79 | #define LAST_CPUPID_WIDTH 0 |
| 74 | #endif | 80 | #endif |
| 75 | 81 | ||
| 76 | /* | 82 | /* |
| @@ -81,8 +87,8 @@ | |||
| 81 | #define NODE_NOT_IN_PAGE_FLAGS | 87 | #define NODE_NOT_IN_PAGE_FLAGS |
| 82 | #endif | 88 | #endif |
| 83 | 89 | ||
| 84 | #if defined(CONFIG_NUMA_BALANCING) && LAST_NID_WIDTH == 0 | 90 | #if defined(CONFIG_NUMA_BALANCING) && LAST_CPUPID_WIDTH == 0 |
| 85 | #define LAST_NID_NOT_IN_PAGE_FLAGS | 91 | #define LAST_CPUPID_NOT_IN_PAGE_FLAGS |
| 86 | #endif | 92 | #endif |
| 87 | 93 | ||
| 88 | #endif /* _LINUX_PAGE_FLAGS_LAYOUT */ | 94 | #endif /* _LINUX_PAGE_FLAGS_LAYOUT */ |
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 6d53675c2b54..98ada58f9942 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
| @@ -329,7 +329,9 @@ static inline void set_page_writeback(struct page *page) | |||
| 329 | * System with lots of page flags available. This allows separate | 329 | * System with lots of page flags available. This allows separate |
| 330 | * flags for PageHead() and PageTail() checks of compound pages so that bit | 330 | * flags for PageHead() and PageTail() checks of compound pages so that bit |
| 331 | * tests can be used in performance sensitive paths. PageCompound is | 331 | * tests can be used in performance sensitive paths. PageCompound is |
| 332 | * generally not used in hot code paths. | 332 | * generally not used in hot code paths except arch/powerpc/mm/init_64.c |
| 333 | * and arch/powerpc/kvm/book3s_64_vio_hv.c which use it to detect huge pages | ||
| 334 | * and avoid handling those in real mode. | ||
| 333 | */ | 335 | */ |
| 334 | __PAGEFLAG(Head, head) CLEARPAGEFLAG(Head, head) | 336 | __PAGEFLAG(Head, head) CLEARPAGEFLAG(Head, head) |
| 335 | __PAGEFLAG(Tail, tail) | 337 | __PAGEFLAG(Tail, tail) |
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index c8ba627c1d60..2e069d1288df 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
| @@ -584,6 +584,10 @@ struct perf_sample_data { | |||
| 584 | struct perf_regs_user regs_user; | 584 | struct perf_regs_user regs_user; |
| 585 | u64 stack_user_size; | 585 | u64 stack_user_size; |
| 586 | u64 weight; | 586 | u64 weight; |
| 587 | /* | ||
| 588 | * Transaction flags for abort events: | ||
| 589 | */ | ||
| 590 | u64 txn; | ||
| 587 | }; | 591 | }; |
| 588 | 592 | ||
| 589 | static inline void perf_sample_data_init(struct perf_sample_data *data, | 593 | static inline void perf_sample_data_init(struct perf_sample_data *data, |
| @@ -599,6 +603,7 @@ static inline void perf_sample_data_init(struct perf_sample_data *data, | |||
| 599 | data->stack_user_size = 0; | 603 | data->stack_user_size = 0; |
| 600 | data->weight = 0; | 604 | data->weight = 0; |
| 601 | data->data_src.val = 0; | 605 | data->data_src.val = 0; |
| 606 | data->txn = 0; | ||
| 602 | } | 607 | } |
| 603 | 608 | ||
| 604 | extern void perf_output_sample(struct perf_output_handle *handle, | 609 | extern void perf_output_sample(struct perf_output_handle *handle, |
diff --git a/include/linux/pinctrl/pinctrl.h b/include/linux/pinctrl/pinctrl.h index 5979147d2bda..fefb88663975 100644 --- a/include/linux/pinctrl/pinctrl.h +++ b/include/linux/pinctrl/pinctrl.h | |||
| @@ -144,6 +144,9 @@ extern struct pinctrl_dev *pinctrl_find_and_add_gpio_range(const char *devname, | |||
| 144 | extern struct pinctrl_gpio_range * | 144 | extern struct pinctrl_gpio_range * |
| 145 | pinctrl_find_gpio_range_from_pin(struct pinctrl_dev *pctldev, | 145 | pinctrl_find_gpio_range_from_pin(struct pinctrl_dev *pctldev, |
| 146 | unsigned int pin); | 146 | unsigned int pin); |
| 147 | extern int pinctrl_get_group_pins(struct pinctrl_dev *pctldev, | ||
| 148 | const char *pin_group, const unsigned **pins, | ||
| 149 | unsigned *num_pins); | ||
| 147 | 150 | ||
| 148 | #ifdef CONFIG_OF | 151 | #ifdef CONFIG_OF |
| 149 | extern struct pinctrl_dev *of_pinctrl_get(struct device_node *np); | 152 | extern struct pinctrl_dev *of_pinctrl_get(struct device_node *np); |
diff --git a/include/linux/platform_data/davinci_asp.h b/include/linux/platform_data/davinci_asp.h index 8db5ae03b6e3..689a856b86f9 100644 --- a/include/linux/platform_data/davinci_asp.h +++ b/include/linux/platform_data/davinci_asp.h | |||
| @@ -84,6 +84,8 @@ struct snd_platform_data { | |||
| 84 | u8 version; | 84 | u8 version; |
| 85 | u8 txnumevt; | 85 | u8 txnumevt; |
| 86 | u8 rxnumevt; | 86 | u8 rxnumevt; |
| 87 | int tx_dma_channel; | ||
| 88 | int rx_dma_channel; | ||
| 87 | }; | 89 | }; |
| 88 | 90 | ||
| 89 | enum { | 91 | enum { |
diff --git a/include/linux/platform_data/leds-lp55xx.h b/include/linux/platform_data/leds-lp55xx.h index 51a2ff579d60..624ff9edad6f 100644 --- a/include/linux/platform_data/leds-lp55xx.h +++ b/include/linux/platform_data/leds-lp55xx.h | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | 22 | ||
| 23 | struct lp55xx_led_config { | 23 | struct lp55xx_led_config { |
| 24 | const char *name; | 24 | const char *name; |
| 25 | const char *default_trigger; | ||
| 25 | u8 chan_nr; | 26 | u8 chan_nr; |
| 26 | u8 led_current; /* mA x10, 0 if led is not connected */ | 27 | u8 led_current; /* mA x10, 0 if led is not connected */ |
| 27 | u8 max_current; | 28 | u8 max_current; |
| @@ -66,10 +67,8 @@ struct lp55xx_platform_data { | |||
| 66 | /* Clock configuration */ | 67 | /* Clock configuration */ |
| 67 | u8 clock_mode; | 68 | u8 clock_mode; |
| 68 | 69 | ||
| 69 | /* Platform specific functions */ | 70 | /* optional enable GPIO */ |
| 70 | int (*setup_resources)(void); | 71 | int enable_gpio; |
| 71 | void (*release_resources)(void); | ||
| 72 | void (*enable)(bool state); | ||
| 73 | 72 | ||
| 74 | /* Predefined pattern data */ | 73 | /* Predefined pattern data */ |
| 75 | struct lp55xx_predef_pattern *patterns; | 74 | struct lp55xx_predef_pattern *patterns; |
diff --git a/include/linux/platform_data/leds-pca9685.h b/include/linux/platform_data/leds-pca9685.h new file mode 100644 index 000000000000..778e9e4249cc --- /dev/null +++ b/include/linux/platform_data/leds-pca9685.h | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2013 Maximilian Güntner <maximilian.guentner@gmail.com> | ||
| 3 | * | ||
| 4 | * This file is subject to the terms and conditions of version 2 of | ||
| 5 | * the GNU General Public License. See the file COPYING in the main | ||
| 6 | * directory of this archive for more details. | ||
| 7 | * | ||
| 8 | * Based on leds-pca963x.h by Peter Meerwald <p.meerwald@bct-electronic.com> | ||
| 9 | * | ||
| 10 | * LED driver for the NXP PCA9685 PWM chip | ||
| 11 | * | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __LINUX_PCA9685_H | ||
| 15 | #define __LINUX_PCA9685_H | ||
| 16 | |||
| 17 | #include <linux/leds.h> | ||
| 18 | |||
| 19 | enum pca9685_outdrv { | ||
| 20 | PCA9685_OPEN_DRAIN, | ||
| 21 | PCA9685_TOTEM_POLE, | ||
| 22 | }; | ||
| 23 | |||
| 24 | enum pca9685_inverted { | ||
| 25 | PCA9685_NOT_INVERTED, | ||
| 26 | PCA9685_INVERTED, | ||
| 27 | }; | ||
| 28 | |||
| 29 | struct pca9685_platform_data { | ||
| 30 | struct led_platform_data leds; | ||
| 31 | enum pca9685_outdrv outdrv; | ||
| 32 | enum pca9685_inverted inverted; | ||
| 33 | }; | ||
| 34 | |||
| 35 | #endif /* __LINUX_PCA9685_H */ | ||
diff --git a/include/linux/platform_data/pinctrl-adi2.h b/include/linux/platform_data/pinctrl-adi2.h new file mode 100644 index 000000000000..8f91300617ec --- /dev/null +++ b/include/linux/platform_data/pinctrl-adi2.h | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | /* | ||
| 2 | * Pinctrl Driver for ADI GPIO2 controller | ||
| 3 | * | ||
| 4 | * Copyright 2007-2013 Analog Devices Inc. | ||
| 5 | * | ||
| 6 | * Licensed under the GPLv2 or later | ||
| 7 | */ | ||
| 8 | |||
| 9 | |||
| 10 | #ifndef PINCTRL_ADI2_H | ||
| 11 | #define PINCTRL_ADI2_H | ||
| 12 | |||
| 13 | #include <linux/io.h> | ||
| 14 | #include <linux/platform_device.h> | ||
| 15 | |||
| 16 | /** | ||
| 17 | * struct adi_pinctrl_gpio_platform_data - Pinctrl gpio platform data | ||
| 18 | * for ADI GPIO2 device. | ||
| 19 | * | ||
| 20 | * @port_gpio_base: Optional global GPIO index of the GPIO bank. | ||
| 21 | * 0 means driver decides. | ||
| 22 | * @port_pin_base: Pin index of the pin controller device. | ||
| 23 | * @port_width: PIN number of the GPIO bank device | ||
| 24 | * @pint_id: GPIO PINT device id that this GPIO bank should map to. | ||
| 25 | * @pint_assign: The 32-bit GPIO PINT registers can be divided into 2 parts. A | ||
| 26 | * GPIO bank can be mapped into either low 16 bits[0] or high 16 | ||
| 27 | * bits[1] of each PINT register. | ||
| 28 | * @pint_map: GIOP bank mapping code in PINT device | ||
| 29 | */ | ||
| 30 | struct adi_pinctrl_gpio_platform_data { | ||
| 31 | unsigned int port_gpio_base; | ||
| 32 | unsigned int port_pin_base; | ||
| 33 | unsigned int port_width; | ||
| 34 | u8 pinctrl_id; | ||
| 35 | u8 pint_id; | ||
| 36 | bool pint_assign; | ||
| 37 | u8 pint_map; | ||
| 38 | }; | ||
| 39 | |||
| 40 | #endif | ||
diff --git a/include/linux/preempt.h b/include/linux/preempt.h index f5d4723cdb3d..a3d9dc8c2c00 100644 --- a/include/linux/preempt.h +++ b/include/linux/preempt.h | |||
| @@ -6,106 +6,95 @@ | |||
| 6 | * preempt_count (used for kernel preemption, interrupt count, etc.) | 6 | * preempt_count (used for kernel preemption, interrupt count, etc.) |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | #include <linux/thread_info.h> | ||
| 10 | #include <linux/linkage.h> | 9 | #include <linux/linkage.h> |
| 11 | #include <linux/list.h> | 10 | #include <linux/list.h> |
| 12 | 11 | ||
| 13 | #if defined(CONFIG_DEBUG_PREEMPT) || defined(CONFIG_PREEMPT_TRACER) | 12 | /* |
| 14 | extern void add_preempt_count(int val); | 13 | * We use the MSB mostly because its available; see <linux/preempt_mask.h> for |
| 15 | extern void sub_preempt_count(int val); | 14 | * the other bits -- can't include that header due to inclusion hell. |
| 16 | #else | 15 | */ |
| 17 | # define add_preempt_count(val) do { preempt_count() += (val); } while (0) | 16 | #define PREEMPT_NEED_RESCHED 0x80000000 |
| 18 | # define sub_preempt_count(val) do { preempt_count() -= (val); } while (0) | ||
| 19 | #endif | ||
| 20 | |||
| 21 | #define inc_preempt_count() add_preempt_count(1) | ||
| 22 | #define dec_preempt_count() sub_preempt_count(1) | ||
| 23 | |||
| 24 | #define preempt_count() (current_thread_info()->preempt_count) | ||
| 25 | |||
| 26 | #ifdef CONFIG_PREEMPT | ||
| 27 | |||
| 28 | asmlinkage void preempt_schedule(void); | ||
| 29 | |||
| 30 | #define preempt_check_resched() \ | ||
| 31 | do { \ | ||
| 32 | if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \ | ||
| 33 | preempt_schedule(); \ | ||
| 34 | } while (0) | ||
| 35 | |||
| 36 | #ifdef CONFIG_CONTEXT_TRACKING | ||
| 37 | 17 | ||
| 38 | void preempt_schedule_context(void); | 18 | #include <asm/preempt.h> |
| 39 | 19 | ||
| 40 | #define preempt_check_resched_context() \ | 20 | #if defined(CONFIG_DEBUG_PREEMPT) || defined(CONFIG_PREEMPT_TRACER) |
| 41 | do { \ | 21 | extern void preempt_count_add(int val); |
| 42 | if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \ | 22 | extern void preempt_count_sub(int val); |
| 43 | preempt_schedule_context(); \ | 23 | #define preempt_count_dec_and_test() ({ preempt_count_sub(1); should_resched(); }) |
| 44 | } while (0) | ||
| 45 | #else | 24 | #else |
| 25 | #define preempt_count_add(val) __preempt_count_add(val) | ||
| 26 | #define preempt_count_sub(val) __preempt_count_sub(val) | ||
| 27 | #define preempt_count_dec_and_test() __preempt_count_dec_and_test() | ||
| 28 | #endif | ||
| 46 | 29 | ||
| 47 | #define preempt_check_resched_context() preempt_check_resched() | 30 | #define __preempt_count_inc() __preempt_count_add(1) |
| 48 | 31 | #define __preempt_count_dec() __preempt_count_sub(1) | |
| 49 | #endif /* CONFIG_CONTEXT_TRACKING */ | ||
| 50 | |||
| 51 | #else /* !CONFIG_PREEMPT */ | ||
| 52 | |||
| 53 | #define preempt_check_resched() do { } while (0) | ||
| 54 | #define preempt_check_resched_context() do { } while (0) | ||
| 55 | |||
| 56 | #endif /* CONFIG_PREEMPT */ | ||
| 57 | 32 | ||
| 33 | #define preempt_count_inc() preempt_count_add(1) | ||
| 34 | #define preempt_count_dec() preempt_count_sub(1) | ||
| 58 | 35 | ||
| 59 | #ifdef CONFIG_PREEMPT_COUNT | 36 | #ifdef CONFIG_PREEMPT_COUNT |
| 60 | 37 | ||
| 61 | #define preempt_disable() \ | 38 | #define preempt_disable() \ |
| 62 | do { \ | 39 | do { \ |
| 63 | inc_preempt_count(); \ | 40 | preempt_count_inc(); \ |
| 64 | barrier(); \ | 41 | barrier(); \ |
| 65 | } while (0) | 42 | } while (0) |
| 66 | 43 | ||
| 67 | #define sched_preempt_enable_no_resched() \ | 44 | #define sched_preempt_enable_no_resched() \ |
| 68 | do { \ | 45 | do { \ |
| 69 | barrier(); \ | 46 | barrier(); \ |
| 70 | dec_preempt_count(); \ | 47 | preempt_count_dec(); \ |
| 71 | } while (0) | 48 | } while (0) |
| 72 | 49 | ||
| 73 | #define preempt_enable_no_resched() sched_preempt_enable_no_resched() | 50 | #define preempt_enable_no_resched() sched_preempt_enable_no_resched() |
| 74 | 51 | ||
| 52 | #ifdef CONFIG_PREEMPT | ||
| 75 | #define preempt_enable() \ | 53 | #define preempt_enable() \ |
| 76 | do { \ | 54 | do { \ |
| 77 | preempt_enable_no_resched(); \ | ||
| 78 | barrier(); \ | 55 | barrier(); \ |
| 79 | preempt_check_resched(); \ | 56 | if (unlikely(preempt_count_dec_and_test())) \ |
| 57 | __preempt_schedule(); \ | ||
| 58 | } while (0) | ||
| 59 | |||
| 60 | #define preempt_check_resched() \ | ||
| 61 | do { \ | ||
| 62 | if (should_resched()) \ | ||
| 63 | __preempt_schedule(); \ | ||
| 80 | } while (0) | 64 | } while (0) |
| 81 | 65 | ||
| 82 | /* For debugging and tracer internals only! */ | 66 | #else |
| 83 | #define add_preempt_count_notrace(val) \ | 67 | #define preempt_enable() preempt_enable_no_resched() |
| 84 | do { preempt_count() += (val); } while (0) | 68 | #define preempt_check_resched() do { } while (0) |
| 85 | #define sub_preempt_count_notrace(val) \ | 69 | #endif |
| 86 | do { preempt_count() -= (val); } while (0) | ||
| 87 | #define inc_preempt_count_notrace() add_preempt_count_notrace(1) | ||
| 88 | #define dec_preempt_count_notrace() sub_preempt_count_notrace(1) | ||
| 89 | 70 | ||
| 90 | #define preempt_disable_notrace() \ | 71 | #define preempt_disable_notrace() \ |
| 91 | do { \ | 72 | do { \ |
| 92 | inc_preempt_count_notrace(); \ | 73 | __preempt_count_inc(); \ |
| 93 | barrier(); \ | 74 | barrier(); \ |
| 94 | } while (0) | 75 | } while (0) |
| 95 | 76 | ||
| 96 | #define preempt_enable_no_resched_notrace() \ | 77 | #define preempt_enable_no_resched_notrace() \ |
| 97 | do { \ | 78 | do { \ |
| 98 | barrier(); \ | 79 | barrier(); \ |
| 99 | dec_preempt_count_notrace(); \ | 80 | __preempt_count_dec(); \ |
| 100 | } while (0) | 81 | } while (0) |
| 101 | 82 | ||
| 102 | /* preempt_check_resched is OK to trace */ | 83 | #ifdef CONFIG_PREEMPT |
| 84 | |||
| 85 | #ifndef CONFIG_CONTEXT_TRACKING | ||
| 86 | #define __preempt_schedule_context() __preempt_schedule() | ||
| 87 | #endif | ||
| 88 | |||
| 103 | #define preempt_enable_notrace() \ | 89 | #define preempt_enable_notrace() \ |
| 104 | do { \ | 90 | do { \ |
| 105 | preempt_enable_no_resched_notrace(); \ | ||
| 106 | barrier(); \ | 91 | barrier(); \ |
| 107 | preempt_check_resched_context(); \ | 92 | if (unlikely(__preempt_count_dec_and_test())) \ |
| 93 | __preempt_schedule_context(); \ | ||
| 108 | } while (0) | 94 | } while (0) |
| 95 | #else | ||
| 96 | #define preempt_enable_notrace() preempt_enable_no_resched_notrace() | ||
| 97 | #endif | ||
| 109 | 98 | ||
| 110 | #else /* !CONFIG_PREEMPT_COUNT */ | 99 | #else /* !CONFIG_PREEMPT_COUNT */ |
| 111 | 100 | ||
| @@ -115,10 +104,11 @@ do { \ | |||
| 115 | * that can cause faults and scheduling migrate into our preempt-protected | 104 | * that can cause faults and scheduling migrate into our preempt-protected |
| 116 | * region. | 105 | * region. |
| 117 | */ | 106 | */ |
| 118 | #define preempt_disable() barrier() | 107 | #define preempt_disable() barrier() |
| 119 | #define sched_preempt_enable_no_resched() barrier() | 108 | #define sched_preempt_enable_no_resched() barrier() |
| 120 | #define preempt_enable_no_resched() barrier() | 109 | #define preempt_enable_no_resched() barrier() |
| 121 | #define preempt_enable() barrier() | 110 | #define preempt_enable() barrier() |
| 111 | #define preempt_check_resched() do { } while (0) | ||
| 122 | 112 | ||
| 123 | #define preempt_disable_notrace() barrier() | 113 | #define preempt_disable_notrace() barrier() |
| 124 | #define preempt_enable_no_resched_notrace() barrier() | 114 | #define preempt_enable_no_resched_notrace() barrier() |
diff --git a/include/linux/rculist.h b/include/linux/rculist.h index 4106721c4e5e..45a0a9e81478 100644 --- a/include/linux/rculist.h +++ b/include/linux/rculist.h | |||
| @@ -19,6 +19,21 @@ | |||
| 19 | */ | 19 | */ |
| 20 | 20 | ||
| 21 | /* | 21 | /* |
| 22 | * INIT_LIST_HEAD_RCU - Initialize a list_head visible to RCU readers | ||
| 23 | * @list: list to be initialized | ||
| 24 | * | ||
| 25 | * You should instead use INIT_LIST_HEAD() for normal initialization and | ||
| 26 | * cleanup tasks, when readers have no access to the list being initialized. | ||
| 27 | * However, if the list being initialized is visible to readers, you | ||
| 28 | * need to keep the compiler from being too mischievous. | ||
| 29 | */ | ||
| 30 | static inline void INIT_LIST_HEAD_RCU(struct list_head *list) | ||
| 31 | { | ||
| 32 | ACCESS_ONCE(list->next) = list; | ||
| 33 | ACCESS_ONCE(list->prev) = list; | ||
| 34 | } | ||
| 35 | |||
| 36 | /* | ||
| 22 | * return the ->next pointer of a list_head in an rcu safe | 37 | * return the ->next pointer of a list_head in an rcu safe |
| 23 | * way, we must not access it directly | 38 | * way, we must not access it directly |
| 24 | */ | 39 | */ |
| @@ -191,9 +206,13 @@ static inline void list_splice_init_rcu(struct list_head *list, | |||
| 191 | if (list_empty(list)) | 206 | if (list_empty(list)) |
| 192 | return; | 207 | return; |
| 193 | 208 | ||
| 194 | /* "first" and "last" tracking list, so initialize it. */ | 209 | /* |
| 210 | * "first" and "last" tracking list, so initialize it. RCU readers | ||
| 211 | * have access to this list, so we must use INIT_LIST_HEAD_RCU() | ||
| 212 | * instead of INIT_LIST_HEAD(). | ||
| 213 | */ | ||
| 195 | 214 | ||
| 196 | INIT_LIST_HEAD(list); | 215 | INIT_LIST_HEAD_RCU(list); |
| 197 | 216 | ||
| 198 | /* | 217 | /* |
| 199 | * At this point, the list body still points to the source list. | 218 | * At this point, the list body still points to the source list. |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index f1f1bc39346b..39cbb889e20d 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -261,6 +261,10 @@ static inline void rcu_user_hooks_switch(struct task_struct *prev, | |||
| 261 | rcu_irq_exit(); \ | 261 | rcu_irq_exit(); \ |
| 262 | } while (0) | 262 | } while (0) |
| 263 | 263 | ||
| 264 | #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_RCU_TRACE) || defined(CONFIG_SMP) | ||
| 265 | extern bool __rcu_is_watching(void); | ||
| 266 | #endif /* #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_RCU_TRACE) || defined(CONFIG_SMP) */ | ||
| 267 | |||
| 264 | /* | 268 | /* |
| 265 | * Infrastructure to implement the synchronize_() primitives in | 269 | * Infrastructure to implement the synchronize_() primitives in |
| 266 | * TREE_RCU and rcu_barrier_() primitives in TINY_RCU. | 270 | * TREE_RCU and rcu_barrier_() primitives in TINY_RCU. |
| @@ -297,10 +301,6 @@ static inline void destroy_rcu_head_on_stack(struct rcu_head *head) | |||
| 297 | } | 301 | } |
| 298 | #endif /* #else !CONFIG_DEBUG_OBJECTS_RCU_HEAD */ | 302 | #endif /* #else !CONFIG_DEBUG_OBJECTS_RCU_HEAD */ |
| 299 | 303 | ||
| 300 | #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_SMP) | ||
| 301 | extern int rcu_is_cpu_idle(void); | ||
| 302 | #endif /* #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_SMP) */ | ||
| 303 | |||
| 304 | #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PROVE_RCU) | 304 | #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PROVE_RCU) |
| 305 | bool rcu_lockdep_current_cpu_online(void); | 305 | bool rcu_lockdep_current_cpu_online(void); |
| 306 | #else /* #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PROVE_RCU) */ | 306 | #else /* #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PROVE_RCU) */ |
| @@ -351,7 +351,7 @@ static inline int rcu_read_lock_held(void) | |||
| 351 | { | 351 | { |
| 352 | if (!debug_lockdep_rcu_enabled()) | 352 | if (!debug_lockdep_rcu_enabled()) |
| 353 | return 1; | 353 | return 1; |
| 354 | if (rcu_is_cpu_idle()) | 354 | if (!rcu_is_watching()) |
| 355 | return 0; | 355 | return 0; |
| 356 | if (!rcu_lockdep_current_cpu_online()) | 356 | if (!rcu_lockdep_current_cpu_online()) |
| 357 | return 0; | 357 | return 0; |
| @@ -402,7 +402,7 @@ static inline int rcu_read_lock_sched_held(void) | |||
| 402 | 402 | ||
| 403 | if (!debug_lockdep_rcu_enabled()) | 403 | if (!debug_lockdep_rcu_enabled()) |
| 404 | return 1; | 404 | return 1; |
| 405 | if (rcu_is_cpu_idle()) | 405 | if (!rcu_is_watching()) |
| 406 | return 0; | 406 | return 0; |
| 407 | if (!rcu_lockdep_current_cpu_online()) | 407 | if (!rcu_lockdep_current_cpu_online()) |
| 408 | return 0; | 408 | return 0; |
| @@ -771,7 +771,7 @@ static inline void rcu_read_lock(void) | |||
| 771 | __rcu_read_lock(); | 771 | __rcu_read_lock(); |
| 772 | __acquire(RCU); | 772 | __acquire(RCU); |
| 773 | rcu_lock_acquire(&rcu_lock_map); | 773 | rcu_lock_acquire(&rcu_lock_map); |
| 774 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | 774 | rcu_lockdep_assert(rcu_is_watching(), |
| 775 | "rcu_read_lock() used illegally while idle"); | 775 | "rcu_read_lock() used illegally while idle"); |
| 776 | } | 776 | } |
| 777 | 777 | ||
| @@ -792,7 +792,7 @@ static inline void rcu_read_lock(void) | |||
| 792 | */ | 792 | */ |
| 793 | static inline void rcu_read_unlock(void) | 793 | static inline void rcu_read_unlock(void) |
| 794 | { | 794 | { |
| 795 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | 795 | rcu_lockdep_assert(rcu_is_watching(), |
| 796 | "rcu_read_unlock() used illegally while idle"); | 796 | "rcu_read_unlock() used illegally while idle"); |
| 797 | rcu_lock_release(&rcu_lock_map); | 797 | rcu_lock_release(&rcu_lock_map); |
| 798 | __release(RCU); | 798 | __release(RCU); |
| @@ -821,7 +821,7 @@ static inline void rcu_read_lock_bh(void) | |||
| 821 | local_bh_disable(); | 821 | local_bh_disable(); |
| 822 | __acquire(RCU_BH); | 822 | __acquire(RCU_BH); |
| 823 | rcu_lock_acquire(&rcu_bh_lock_map); | 823 | rcu_lock_acquire(&rcu_bh_lock_map); |
| 824 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | 824 | rcu_lockdep_assert(rcu_is_watching(), |
| 825 | "rcu_read_lock_bh() used illegally while idle"); | 825 | "rcu_read_lock_bh() used illegally while idle"); |
| 826 | } | 826 | } |
| 827 | 827 | ||
| @@ -832,7 +832,7 @@ static inline void rcu_read_lock_bh(void) | |||
| 832 | */ | 832 | */ |
| 833 | static inline void rcu_read_unlock_bh(void) | 833 | static inline void rcu_read_unlock_bh(void) |
| 834 | { | 834 | { |
| 835 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | 835 | rcu_lockdep_assert(rcu_is_watching(), |
| 836 | "rcu_read_unlock_bh() used illegally while idle"); | 836 | "rcu_read_unlock_bh() used illegally while idle"); |
| 837 | rcu_lock_release(&rcu_bh_lock_map); | 837 | rcu_lock_release(&rcu_bh_lock_map); |
| 838 | __release(RCU_BH); | 838 | __release(RCU_BH); |
| @@ -857,7 +857,7 @@ static inline void rcu_read_lock_sched(void) | |||
| 857 | preempt_disable(); | 857 | preempt_disable(); |
| 858 | __acquire(RCU_SCHED); | 858 | __acquire(RCU_SCHED); |
| 859 | rcu_lock_acquire(&rcu_sched_lock_map); | 859 | rcu_lock_acquire(&rcu_sched_lock_map); |
| 860 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | 860 | rcu_lockdep_assert(rcu_is_watching(), |
| 861 | "rcu_read_lock_sched() used illegally while idle"); | 861 | "rcu_read_lock_sched() used illegally while idle"); |
| 862 | } | 862 | } |
| 863 | 863 | ||
| @@ -875,7 +875,7 @@ static inline notrace void rcu_read_lock_sched_notrace(void) | |||
| 875 | */ | 875 | */ |
| 876 | static inline void rcu_read_unlock_sched(void) | 876 | static inline void rcu_read_unlock_sched(void) |
| 877 | { | 877 | { |
| 878 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | 878 | rcu_lockdep_assert(rcu_is_watching(), |
| 879 | "rcu_read_unlock_sched() used illegally while idle"); | 879 | "rcu_read_unlock_sched() used illegally while idle"); |
| 880 | rcu_lock_release(&rcu_sched_lock_map); | 880 | rcu_lock_release(&rcu_sched_lock_map); |
| 881 | __release(RCU_SCHED); | 881 | __release(RCU_SCHED); |
diff --git a/include/linux/rcutiny.h b/include/linux/rcutiny.h index e31005ee339e..09ebcbe9fd78 100644 --- a/include/linux/rcutiny.h +++ b/include/linux/rcutiny.h | |||
| @@ -132,4 +132,21 @@ static inline void rcu_scheduler_starting(void) | |||
| 132 | } | 132 | } |
| 133 | #endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */ | 133 | #endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */ |
| 134 | 134 | ||
| 135 | #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_RCU_TRACE) | ||
| 136 | |||
| 137 | static inline bool rcu_is_watching(void) | ||
| 138 | { | ||
| 139 | return __rcu_is_watching(); | ||
| 140 | } | ||
| 141 | |||
| 142 | #else /* defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_RCU_TRACE) */ | ||
| 143 | |||
| 144 | static inline bool rcu_is_watching(void) | ||
| 145 | { | ||
| 146 | return true; | ||
| 147 | } | ||
| 148 | |||
| 149 | |||
| 150 | #endif /* #else defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_RCU_TRACE) */ | ||
| 151 | |||
| 135 | #endif /* __LINUX_RCUTINY_H */ | 152 | #endif /* __LINUX_RCUTINY_H */ |
diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h index 226169d1bd2b..4b9c81548742 100644 --- a/include/linux/rcutree.h +++ b/include/linux/rcutree.h | |||
| @@ -90,4 +90,6 @@ extern void exit_rcu(void); | |||
| 90 | extern void rcu_scheduler_starting(void); | 90 | extern void rcu_scheduler_starting(void); |
| 91 | extern int rcu_scheduler_active __read_mostly; | 91 | extern int rcu_scheduler_active __read_mostly; |
| 92 | 92 | ||
| 93 | extern bool rcu_is_watching(void); | ||
| 94 | |||
| 93 | #endif /* __LINUX_RCUTREE_H */ | 95 | #endif /* __LINUX_RCUTREE_H */ |
diff --git a/include/linux/regmap.h b/include/linux/regmap.h index a10380bfbeac..e55907804d39 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h | |||
| @@ -23,6 +23,7 @@ struct device; | |||
| 23 | struct i2c_client; | 23 | struct i2c_client; |
| 24 | struct irq_domain; | 24 | struct irq_domain; |
| 25 | struct spi_device; | 25 | struct spi_device; |
| 26 | struct spmi_device; | ||
| 26 | struct regmap; | 27 | struct regmap; |
| 27 | struct regmap_range_cfg; | 28 | struct regmap_range_cfg; |
| 28 | struct regmap_field; | 29 | struct regmap_field; |
| @@ -70,6 +71,8 @@ struct regmap_range { | |||
| 70 | unsigned int range_max; | 71 | unsigned int range_max; |
| 71 | }; | 72 | }; |
| 72 | 73 | ||
| 74 | #define regmap_reg_range(low, high) { .range_min = low, .range_max = high, } | ||
| 75 | |||
| 73 | /* | 76 | /* |
| 74 | * A table of ranges including some yes ranges and some no ranges. | 77 | * A table of ranges including some yes ranges and some no ranges. |
| 75 | * If a register belongs to a no_range, the corresponding check function | 78 | * If a register belongs to a no_range, the corresponding check function |
| @@ -318,6 +321,8 @@ struct regmap *regmap_init_i2c(struct i2c_client *i2c, | |||
| 318 | const struct regmap_config *config); | 321 | const struct regmap_config *config); |
| 319 | struct regmap *regmap_init_spi(struct spi_device *dev, | 322 | struct regmap *regmap_init_spi(struct spi_device *dev, |
| 320 | const struct regmap_config *config); | 323 | const struct regmap_config *config); |
| 324 | struct regmap *regmap_init_spmi(struct spmi_device *dev, | ||
| 325 | const struct regmap_config *config); | ||
| 321 | struct regmap *regmap_init_mmio_clk(struct device *dev, const char *clk_id, | 326 | struct regmap *regmap_init_mmio_clk(struct device *dev, const char *clk_id, |
| 322 | void __iomem *regs, | 327 | void __iomem *regs, |
| 323 | const struct regmap_config *config); | 328 | const struct regmap_config *config); |
| @@ -330,6 +335,8 @@ struct regmap *devm_regmap_init_i2c(struct i2c_client *i2c, | |||
| 330 | const struct regmap_config *config); | 335 | const struct regmap_config *config); |
| 331 | struct regmap *devm_regmap_init_spi(struct spi_device *dev, | 336 | struct regmap *devm_regmap_init_spi(struct spi_device *dev, |
| 332 | const struct regmap_config *config); | 337 | const struct regmap_config *config); |
| 338 | struct regmap *devm_regmap_init_spmi(struct spmi_device *dev, | ||
| 339 | const struct regmap_config *config); | ||
| 333 | struct regmap *devm_regmap_init_mmio_clk(struct device *dev, const char *clk_id, | 340 | struct regmap *devm_regmap_init_mmio_clk(struct device *dev, const char *clk_id, |
| 334 | void __iomem *regs, | 341 | void __iomem *regs, |
| 335 | const struct regmap_config *config); | 342 | const struct regmap_config *config); |
| @@ -374,10 +381,13 @@ int regmap_reinit_cache(struct regmap *map, | |||
| 374 | const struct regmap_config *config); | 381 | const struct regmap_config *config); |
| 375 | struct regmap *dev_get_regmap(struct device *dev, const char *name); | 382 | struct regmap *dev_get_regmap(struct device *dev, const char *name); |
| 376 | int regmap_write(struct regmap *map, unsigned int reg, unsigned int val); | 383 | int regmap_write(struct regmap *map, unsigned int reg, unsigned int val); |
| 384 | int regmap_write_async(struct regmap *map, unsigned int reg, unsigned int val); | ||
| 377 | int regmap_raw_write(struct regmap *map, unsigned int reg, | 385 | int regmap_raw_write(struct regmap *map, unsigned int reg, |
| 378 | const void *val, size_t val_len); | 386 | const void *val, size_t val_len); |
| 379 | int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val, | 387 | int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val, |
| 380 | size_t val_count); | 388 | size_t val_count); |
| 389 | int regmap_multi_reg_write(struct regmap *map, struct reg_default *regs, | ||
| 390 | int num_regs); | ||
| 381 | int regmap_raw_write_async(struct regmap *map, unsigned int reg, | 391 | int regmap_raw_write_async(struct regmap *map, unsigned int reg, |
| 382 | const void *val, size_t val_len); | 392 | const void *val, size_t val_len); |
| 383 | int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val); | 393 | int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val); |
| @@ -387,9 +397,14 @@ int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val, | |||
| 387 | size_t val_count); | 397 | size_t val_count); |
| 388 | int regmap_update_bits(struct regmap *map, unsigned int reg, | 398 | int regmap_update_bits(struct regmap *map, unsigned int reg, |
| 389 | unsigned int mask, unsigned int val); | 399 | unsigned int mask, unsigned int val); |
| 400 | int regmap_update_bits_async(struct regmap *map, unsigned int reg, | ||
| 401 | unsigned int mask, unsigned int val); | ||
| 390 | int regmap_update_bits_check(struct regmap *map, unsigned int reg, | 402 | int regmap_update_bits_check(struct regmap *map, unsigned int reg, |
| 391 | unsigned int mask, unsigned int val, | 403 | unsigned int mask, unsigned int val, |
| 392 | bool *change); | 404 | bool *change); |
| 405 | int regmap_update_bits_check_async(struct regmap *map, unsigned int reg, | ||
| 406 | unsigned int mask, unsigned int val, | ||
| 407 | bool *change); | ||
| 393 | int regmap_get_val_bytes(struct regmap *map); | 408 | int regmap_get_val_bytes(struct regmap *map); |
| 394 | int regmap_async_complete(struct regmap *map); | 409 | int regmap_async_complete(struct regmap *map); |
| 395 | bool regmap_can_raw_write(struct regmap *map); | 410 | bool regmap_can_raw_write(struct regmap *map); |
| @@ -425,11 +440,15 @@ bool regmap_reg_in_ranges(unsigned int reg, | |||
| 425 | * @reg: Offset of the register within the regmap bank | 440 | * @reg: Offset of the register within the regmap bank |
| 426 | * @lsb: lsb of the register field. | 441 | * @lsb: lsb of the register field. |
| 427 | * @reg: msb of the register field. | 442 | * @reg: msb of the register field. |
| 443 | * @id_size: port size if it has some ports | ||
| 444 | * @id_offset: address offset for each ports | ||
| 428 | */ | 445 | */ |
| 429 | struct reg_field { | 446 | struct reg_field { |
| 430 | unsigned int reg; | 447 | unsigned int reg; |
| 431 | unsigned int lsb; | 448 | unsigned int lsb; |
| 432 | unsigned int msb; | 449 | unsigned int msb; |
| 450 | unsigned int id_size; | ||
| 451 | unsigned int id_offset; | ||
| 433 | }; | 452 | }; |
| 434 | 453 | ||
| 435 | #define REG_FIELD(_reg, _lsb, _msb) { \ | 454 | #define REG_FIELD(_reg, _lsb, _msb) { \ |
| @@ -448,6 +467,15 @@ void devm_regmap_field_free(struct device *dev, struct regmap_field *field); | |||
| 448 | 467 | ||
| 449 | int regmap_field_read(struct regmap_field *field, unsigned int *val); | 468 | int regmap_field_read(struct regmap_field *field, unsigned int *val); |
| 450 | int regmap_field_write(struct regmap_field *field, unsigned int val); | 469 | int regmap_field_write(struct regmap_field *field, unsigned int val); |
| 470 | int regmap_field_update_bits(struct regmap_field *field, | ||
| 471 | unsigned int mask, unsigned int val); | ||
| 472 | |||
| 473 | int regmap_fields_write(struct regmap_field *field, unsigned int id, | ||
| 474 | unsigned int val); | ||
| 475 | int regmap_fields_read(struct regmap_field *field, unsigned int id, | ||
| 476 | unsigned int *val); | ||
| 477 | int regmap_fields_update_bits(struct regmap_field *field, unsigned int id, | ||
| 478 | unsigned int mask, unsigned int val); | ||
| 451 | 479 | ||
| 452 | /** | 480 | /** |
| 453 | * Description of an IRQ for the generic regmap irq_chip. | 481 | * Description of an IRQ for the generic regmap irq_chip. |
| @@ -527,6 +555,13 @@ static inline int regmap_write(struct regmap *map, unsigned int reg, | |||
| 527 | return -EINVAL; | 555 | return -EINVAL; |
| 528 | } | 556 | } |
| 529 | 557 | ||
| 558 | static inline int regmap_write_async(struct regmap *map, unsigned int reg, | ||
| 559 | unsigned int val) | ||
| 560 | { | ||
| 561 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 562 | return -EINVAL; | ||
| 563 | } | ||
| 564 | |||
| 530 | static inline int regmap_raw_write(struct regmap *map, unsigned int reg, | 565 | static inline int regmap_raw_write(struct regmap *map, unsigned int reg, |
| 531 | const void *val, size_t val_len) | 566 | const void *val, size_t val_len) |
| 532 | { | 567 | { |
| @@ -576,6 +611,14 @@ static inline int regmap_update_bits(struct regmap *map, unsigned int reg, | |||
| 576 | return -EINVAL; | 611 | return -EINVAL; |
| 577 | } | 612 | } |
| 578 | 613 | ||
| 614 | static inline int regmap_update_bits_async(struct regmap *map, | ||
| 615 | unsigned int reg, | ||
| 616 | unsigned int mask, unsigned int val) | ||
| 617 | { | ||
| 618 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 619 | return -EINVAL; | ||
| 620 | } | ||
| 621 | |||
| 579 | static inline int regmap_update_bits_check(struct regmap *map, | 622 | static inline int regmap_update_bits_check(struct regmap *map, |
| 580 | unsigned int reg, | 623 | unsigned int reg, |
| 581 | unsigned int mask, unsigned int val, | 624 | unsigned int mask, unsigned int val, |
| @@ -585,6 +628,16 @@ static inline int regmap_update_bits_check(struct regmap *map, | |||
| 585 | return -EINVAL; | 628 | return -EINVAL; |
| 586 | } | 629 | } |
| 587 | 630 | ||
| 631 | static inline int regmap_update_bits_check_async(struct regmap *map, | ||
| 632 | unsigned int reg, | ||
| 633 | unsigned int mask, | ||
| 634 | unsigned int val, | ||
| 635 | bool *change) | ||
| 636 | { | ||
| 637 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 638 | return -EINVAL; | ||
| 639 | } | ||
| 640 | |||
| 588 | static inline int regmap_get_val_bytes(struct regmap *map) | 641 | static inline int regmap_get_val_bytes(struct regmap *map) |
| 589 | { | 642 | { |
| 590 | WARN_ONCE(1, "regmap API is disabled"); | 643 | WARN_ONCE(1, "regmap API is disabled"); |
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h index 27be915caa96..e530681bea70 100644 --- a/include/linux/regulator/consumer.h +++ b/include/linux/regulator/consumer.h | |||
| @@ -146,6 +146,32 @@ struct regulator *__must_check devm_regulator_get_optional(struct device *dev, | |||
| 146 | void regulator_put(struct regulator *regulator); | 146 | void regulator_put(struct regulator *regulator); |
| 147 | void devm_regulator_put(struct regulator *regulator); | 147 | void devm_regulator_put(struct regulator *regulator); |
| 148 | 148 | ||
| 149 | int regulator_register_supply_alias(struct device *dev, const char *id, | ||
| 150 | struct device *alias_dev, | ||
| 151 | const char *alias_id); | ||
| 152 | void regulator_unregister_supply_alias(struct device *dev, const char *id); | ||
| 153 | |||
| 154 | int regulator_bulk_register_supply_alias(struct device *dev, const char **id, | ||
| 155 | struct device *alias_dev, | ||
| 156 | const char **alias_id, int num_id); | ||
| 157 | void regulator_bulk_unregister_supply_alias(struct device *dev, | ||
| 158 | const char **id, int num_id); | ||
| 159 | |||
| 160 | int devm_regulator_register_supply_alias(struct device *dev, const char *id, | ||
| 161 | struct device *alias_dev, | ||
| 162 | const char *alias_id); | ||
| 163 | void devm_regulator_unregister_supply_alias(struct device *dev, | ||
| 164 | const char *id); | ||
| 165 | |||
| 166 | int devm_regulator_bulk_register_supply_alias(struct device *dev, | ||
| 167 | const char **id, | ||
| 168 | struct device *alias_dev, | ||
| 169 | const char **alias_id, | ||
| 170 | int num_id); | ||
| 171 | void devm_regulator_bulk_unregister_supply_alias(struct device *dev, | ||
| 172 | const char **id, | ||
| 173 | int num_id); | ||
| 174 | |||
| 149 | /* regulator output control and status */ | 175 | /* regulator output control and status */ |
| 150 | int __must_check regulator_enable(struct regulator *regulator); | 176 | int __must_check regulator_enable(struct regulator *regulator); |
| 151 | int regulator_disable(struct regulator *regulator); | 177 | int regulator_disable(struct regulator *regulator); |
| @@ -250,6 +276,59 @@ static inline void devm_regulator_put(struct regulator *regulator) | |||
| 250 | { | 276 | { |
| 251 | } | 277 | } |
| 252 | 278 | ||
| 279 | static inline int regulator_register_supply_alias(struct device *dev, | ||
| 280 | const char *id, | ||
| 281 | struct device *alias_dev, | ||
| 282 | const char *alias_id) | ||
| 283 | { | ||
| 284 | return 0; | ||
| 285 | } | ||
| 286 | |||
| 287 | static inline void regulator_unregister_supply_alias(struct device *dev, | ||
| 288 | const char *id) | ||
| 289 | { | ||
| 290 | } | ||
| 291 | |||
| 292 | static inline int regulator_bulk_register_supply_alias(struct device *dev, | ||
| 293 | const char **id, | ||
| 294 | struct device *alias_dev, | ||
| 295 | const char **alias_id, | ||
| 296 | int num_id) | ||
| 297 | { | ||
| 298 | return 0; | ||
| 299 | } | ||
| 300 | |||
| 301 | static inline void regulator_bulk_unregister_supply_alias(struct device *dev, | ||
| 302 | const char **id, | ||
| 303 | int num_id) | ||
| 304 | { | ||
| 305 | } | ||
| 306 | |||
| 307 | static inline int devm_regulator_register_supply_alias(struct device *dev, | ||
| 308 | const char *id, | ||
| 309 | struct device *alias_dev, | ||
| 310 | const char *alias_id) | ||
| 311 | { | ||
| 312 | return 0; | ||
| 313 | } | ||
| 314 | |||
| 315 | static inline void devm_regulator_unregister_supply_alias(struct device *dev, | ||
| 316 | const char *id) | ||
| 317 | { | ||
| 318 | } | ||
| 319 | |||
| 320 | static inline int devm_regulator_bulk_register_supply_alias( | ||
| 321 | struct device *dev, const char **id, struct device *alias_dev, | ||
| 322 | const char **alias_id, int num_id) | ||
| 323 | { | ||
| 324 | return 0; | ||
| 325 | } | ||
| 326 | |||
| 327 | static inline void devm_regulator_bulk_unregister_supply_alias( | ||
| 328 | struct device *dev, const char **id, int num_id) | ||
| 329 | { | ||
| 330 | } | ||
| 331 | |||
| 253 | static inline int regulator_enable(struct regulator *regulator) | 332 | static inline int regulator_enable(struct regulator *regulator) |
| 254 | { | 333 | { |
| 255 | return 0; | 334 | return 0; |
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h index 9bdad43ad228..9370e65348a4 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h | |||
| @@ -46,19 +46,26 @@ enum regulator_status { | |||
| 46 | * regulator_list_linear_range(). | 46 | * regulator_list_linear_range(). |
| 47 | * | 47 | * |
| 48 | * @min_uV: Lowest voltage in range | 48 | * @min_uV: Lowest voltage in range |
| 49 | * @max_uV: Highest voltage in range | ||
| 50 | * @min_sel: Lowest selector for range | 49 | * @min_sel: Lowest selector for range |
| 51 | * @max_sel: Highest selector for range | 50 | * @max_sel: Highest selector for range |
| 52 | * @uV_step: Step size | 51 | * @uV_step: Step size |
| 53 | */ | 52 | */ |
| 54 | struct regulator_linear_range { | 53 | struct regulator_linear_range { |
| 55 | unsigned int min_uV; | 54 | unsigned int min_uV; |
| 56 | unsigned int max_uV; | ||
| 57 | unsigned int min_sel; | 55 | unsigned int min_sel; |
| 58 | unsigned int max_sel; | 56 | unsigned int max_sel; |
| 59 | unsigned int uV_step; | 57 | unsigned int uV_step; |
| 60 | }; | 58 | }; |
| 61 | 59 | ||
| 60 | /* Initialize struct regulator_linear_range */ | ||
| 61 | #define REGULATOR_LINEAR_RANGE(_min_uV, _min_sel, _max_sel, _step_uV) \ | ||
| 62 | { \ | ||
| 63 | .min_uV = _min_uV, \ | ||
| 64 | .min_sel = _min_sel, \ | ||
| 65 | .max_sel = _max_sel, \ | ||
| 66 | .uV_step = _step_uV, \ | ||
| 67 | } | ||
| 68 | |||
| 62 | /** | 69 | /** |
| 63 | * struct regulator_ops - regulator operations. | 70 | * struct regulator_ops - regulator operations. |
| 64 | * | 71 | * |
| @@ -209,6 +216,7 @@ enum regulator_type { | |||
| 209 | * @min_uV: Voltage given by the lowest selector (if linear mapping) | 216 | * @min_uV: Voltage given by the lowest selector (if linear mapping) |
| 210 | * @uV_step: Voltage increase with each selector (if linear mapping) | 217 | * @uV_step: Voltage increase with each selector (if linear mapping) |
| 211 | * @linear_min_sel: Minimal selector for starting linear mapping | 218 | * @linear_min_sel: Minimal selector for starting linear mapping |
| 219 | * @fixed_uV: Fixed voltage of rails. | ||
| 212 | * @ramp_delay: Time to settle down after voltage change (unit: uV/us) | 220 | * @ramp_delay: Time to settle down after voltage change (unit: uV/us) |
| 213 | * @volt_table: Voltage mapping table (if table based mapping) | 221 | * @volt_table: Voltage mapping table (if table based mapping) |
| 214 | * | 222 | * |
| @@ -241,6 +249,7 @@ struct regulator_desc { | |||
| 241 | unsigned int min_uV; | 249 | unsigned int min_uV; |
| 242 | unsigned int uV_step; | 250 | unsigned int uV_step; |
| 243 | unsigned int linear_min_sel; | 251 | unsigned int linear_min_sel; |
| 252 | int fixed_uV; | ||
| 244 | unsigned int ramp_delay; | 253 | unsigned int ramp_delay; |
| 245 | 254 | ||
| 246 | const struct regulator_linear_range *linear_ranges; | 255 | const struct regulator_linear_range *linear_ranges; |
| @@ -336,7 +345,12 @@ struct regulator_dev { | |||
| 336 | struct regulator_dev * | 345 | struct regulator_dev * |
| 337 | regulator_register(const struct regulator_desc *regulator_desc, | 346 | regulator_register(const struct regulator_desc *regulator_desc, |
| 338 | const struct regulator_config *config); | 347 | const struct regulator_config *config); |
| 348 | struct regulator_dev * | ||
| 349 | devm_regulator_register(struct device *dev, | ||
| 350 | const struct regulator_desc *regulator_desc, | ||
| 351 | const struct regulator_config *config); | ||
| 339 | void regulator_unregister(struct regulator_dev *rdev); | 352 | void regulator_unregister(struct regulator_dev *rdev); |
| 353 | void devm_regulator_unregister(struct device *dev, struct regulator_dev *rdev); | ||
| 340 | 354 | ||
| 341 | int regulator_notifier_call_chain(struct regulator_dev *rdev, | 355 | int regulator_notifier_call_chain(struct regulator_dev *rdev, |
| 342 | unsigned long event, void *data); | 356 | unsigned long event, void *data); |
diff --git a/include/linux/regulator/machine.h b/include/linux/regulator/machine.h index 999b20ce06cf..730e638c5589 100644 --- a/include/linux/regulator/machine.h +++ b/include/linux/regulator/machine.h | |||
| @@ -95,6 +95,7 @@ struct regulator_state { | |||
| 95 | * @initial_state: Suspend state to set by default. | 95 | * @initial_state: Suspend state to set by default. |
| 96 | * @initial_mode: Mode to set at startup. | 96 | * @initial_mode: Mode to set at startup. |
| 97 | * @ramp_delay: Time to settle down after voltage change (unit: uV/us) | 97 | * @ramp_delay: Time to settle down after voltage change (unit: uV/us) |
| 98 | * @enable_time: Turn-on time of the rails (unit: microseconds) | ||
| 98 | */ | 99 | */ |
| 99 | struct regulation_constraints { | 100 | struct regulation_constraints { |
| 100 | 101 | ||
| @@ -129,6 +130,7 @@ struct regulation_constraints { | |||
| 129 | unsigned int initial_mode; | 130 | unsigned int initial_mode; |
| 130 | 131 | ||
| 131 | unsigned int ramp_delay; | 132 | unsigned int ramp_delay; |
| 133 | unsigned int enable_time; | ||
| 132 | 134 | ||
| 133 | /* constraint flags */ | 135 | /* constraint flags */ |
| 134 | unsigned always_on:1; /* regulator never off when system is on */ | 136 | unsigned always_on:1; /* regulator never off when system is on */ |
| @@ -193,15 +195,10 @@ int regulator_suspend_finish(void); | |||
| 193 | 195 | ||
| 194 | #ifdef CONFIG_REGULATOR | 196 | #ifdef CONFIG_REGULATOR |
| 195 | void regulator_has_full_constraints(void); | 197 | void regulator_has_full_constraints(void); |
| 196 | void regulator_use_dummy_regulator(void); | ||
| 197 | #else | 198 | #else |
| 198 | static inline void regulator_has_full_constraints(void) | 199 | static inline void regulator_has_full_constraints(void) |
| 199 | { | 200 | { |
| 200 | } | 201 | } |
| 201 | |||
| 202 | static inline void regulator_use_dummy_regulator(void) | ||
| 203 | { | ||
| 204 | } | ||
| 205 | #endif | 202 | #endif |
| 206 | 203 | ||
| 207 | #endif | 204 | #endif |
diff --git a/include/linux/sched.h b/include/linux/sched.h index e27baeeda3f4..045b0d227846 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -22,6 +22,7 @@ struct sched_param { | |||
| 22 | #include <linux/errno.h> | 22 | #include <linux/errno.h> |
| 23 | #include <linux/nodemask.h> | 23 | #include <linux/nodemask.h> |
| 24 | #include <linux/mm_types.h> | 24 | #include <linux/mm_types.h> |
| 25 | #include <linux/preempt.h> | ||
| 25 | 26 | ||
| 26 | #include <asm/page.h> | 27 | #include <asm/page.h> |
| 27 | #include <asm/ptrace.h> | 28 | #include <asm/ptrace.h> |
| @@ -427,6 +428,14 @@ struct task_cputime { | |||
| 427 | .sum_exec_runtime = 0, \ | 428 | .sum_exec_runtime = 0, \ |
| 428 | } | 429 | } |
| 429 | 430 | ||
| 431 | #define PREEMPT_ENABLED (PREEMPT_NEED_RESCHED) | ||
| 432 | |||
| 433 | #ifdef CONFIG_PREEMPT_COUNT | ||
| 434 | #define PREEMPT_DISABLED (1 + PREEMPT_ENABLED) | ||
| 435 | #else | ||
| 436 | #define PREEMPT_DISABLED PREEMPT_ENABLED | ||
| 437 | #endif | ||
| 438 | |||
| 430 | /* | 439 | /* |
| 431 | * Disable preemption until the scheduler is running. | 440 | * Disable preemption until the scheduler is running. |
| 432 | * Reset by start_kernel()->sched_init()->init_idle(). | 441 | * Reset by start_kernel()->sched_init()->init_idle(). |
| @@ -434,7 +443,7 @@ struct task_cputime { | |||
| 434 | * We include PREEMPT_ACTIVE to avoid cond_resched() from working | 443 | * We include PREEMPT_ACTIVE to avoid cond_resched() from working |
| 435 | * before the scheduler is active -- see should_resched(). | 444 | * before the scheduler is active -- see should_resched(). |
| 436 | */ | 445 | */ |
| 437 | #define INIT_PREEMPT_COUNT (1 + PREEMPT_ACTIVE) | 446 | #define INIT_PREEMPT_COUNT (PREEMPT_DISABLED + PREEMPT_ACTIVE) |
| 438 | 447 | ||
| 439 | /** | 448 | /** |
| 440 | * struct thread_group_cputimer - thread group interval timer counts | 449 | * struct thread_group_cputimer - thread group interval timer counts |
| @@ -768,6 +777,7 @@ enum cpu_idle_type { | |||
| 768 | #define SD_ASYM_PACKING 0x0800 /* Place busy groups earlier in the domain */ | 777 | #define SD_ASYM_PACKING 0x0800 /* Place busy groups earlier in the domain */ |
| 769 | #define SD_PREFER_SIBLING 0x1000 /* Prefer to place tasks in a sibling domain */ | 778 | #define SD_PREFER_SIBLING 0x1000 /* Prefer to place tasks in a sibling domain */ |
| 770 | #define SD_OVERLAP 0x2000 /* sched_domains of this level overlap */ | 779 | #define SD_OVERLAP 0x2000 /* sched_domains of this level overlap */ |
| 780 | #define SD_NUMA 0x4000 /* cross-node balancing */ | ||
| 771 | 781 | ||
| 772 | extern int __weak arch_sd_sibiling_asym_packing(void); | 782 | extern int __weak arch_sd_sibiling_asym_packing(void); |
| 773 | 783 | ||
| @@ -811,6 +821,10 @@ struct sched_domain { | |||
| 811 | 821 | ||
| 812 | u64 last_update; | 822 | u64 last_update; |
| 813 | 823 | ||
| 824 | /* idle_balance() stats */ | ||
| 825 | u64 max_newidle_lb_cost; | ||
| 826 | unsigned long next_decay_max_lb_cost; | ||
| 827 | |||
| 814 | #ifdef CONFIG_SCHEDSTATS | 828 | #ifdef CONFIG_SCHEDSTATS |
| 815 | /* load_balance() stats */ | 829 | /* load_balance() stats */ |
| 816 | unsigned int lb_count[CPU_MAX_IDLE_TYPES]; | 830 | unsigned int lb_count[CPU_MAX_IDLE_TYPES]; |
| @@ -1029,6 +1043,8 @@ struct task_struct { | |||
| 1029 | struct task_struct *last_wakee; | 1043 | struct task_struct *last_wakee; |
| 1030 | unsigned long wakee_flips; | 1044 | unsigned long wakee_flips; |
| 1031 | unsigned long wakee_flip_decay_ts; | 1045 | unsigned long wakee_flip_decay_ts; |
| 1046 | |||
| 1047 | int wake_cpu; | ||
| 1032 | #endif | 1048 | #endif |
| 1033 | int on_rq; | 1049 | int on_rq; |
| 1034 | 1050 | ||
| @@ -1324,10 +1340,41 @@ struct task_struct { | |||
| 1324 | #endif | 1340 | #endif |
| 1325 | #ifdef CONFIG_NUMA_BALANCING | 1341 | #ifdef CONFIG_NUMA_BALANCING |
| 1326 | int numa_scan_seq; | 1342 | int numa_scan_seq; |
| 1327 | int numa_migrate_seq; | ||
| 1328 | unsigned int numa_scan_period; | 1343 | unsigned int numa_scan_period; |
| 1344 | unsigned int numa_scan_period_max; | ||
| 1345 | int numa_preferred_nid; | ||
| 1346 | int numa_migrate_deferred; | ||
| 1347 | unsigned long numa_migrate_retry; | ||
| 1329 | u64 node_stamp; /* migration stamp */ | 1348 | u64 node_stamp; /* migration stamp */ |
| 1330 | struct callback_head numa_work; | 1349 | struct callback_head numa_work; |
| 1350 | |||
| 1351 | struct list_head numa_entry; | ||
| 1352 | struct numa_group *numa_group; | ||
| 1353 | |||
| 1354 | /* | ||
| 1355 | * Exponential decaying average of faults on a per-node basis. | ||
| 1356 | * Scheduling placement decisions are made based on the these counts. | ||
| 1357 | * The values remain static for the duration of a PTE scan | ||
| 1358 | */ | ||
| 1359 | unsigned long *numa_faults; | ||
| 1360 | unsigned long total_numa_faults; | ||
| 1361 | |||
| 1362 | /* | ||
| 1363 | * numa_faults_buffer records faults per node during the current | ||
| 1364 | * scan window. When the scan completes, the counts in numa_faults | ||
| 1365 | * decay and these values are copied. | ||
| 1366 | */ | ||
| 1367 | unsigned long *numa_faults_buffer; | ||
| 1368 | |||
| 1369 | /* | ||
| 1370 | * numa_faults_locality tracks if faults recorded during the last | ||
| 1371 | * scan window were remote/local. The task scan period is adapted | ||
| 1372 | * based on the locality of the faults with different weights | ||
| 1373 | * depending on whether they were shared or private faults | ||
| 1374 | */ | ||
| 1375 | unsigned long numa_faults_locality[2]; | ||
| 1376 | |||
| 1377 | unsigned long numa_pages_migrated; | ||
| 1331 | #endif /* CONFIG_NUMA_BALANCING */ | 1378 | #endif /* CONFIG_NUMA_BALANCING */ |
| 1332 | 1379 | ||
| 1333 | struct rcu_head rcu; | 1380 | struct rcu_head rcu; |
| @@ -1412,16 +1459,33 @@ struct task_struct { | |||
| 1412 | /* Future-safe accessor for struct task_struct's cpus_allowed. */ | 1459 | /* Future-safe accessor for struct task_struct's cpus_allowed. */ |
| 1413 | #define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed) | 1460 | #define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed) |
| 1414 | 1461 | ||
| 1462 | #define TNF_MIGRATED 0x01 | ||
| 1463 | #define TNF_NO_GROUP 0x02 | ||
| 1464 | #define TNF_SHARED 0x04 | ||
| 1465 | #define TNF_FAULT_LOCAL 0x08 | ||
| 1466 | |||
| 1415 | #ifdef CONFIG_NUMA_BALANCING | 1467 | #ifdef CONFIG_NUMA_BALANCING |
| 1416 | extern void task_numa_fault(int node, int pages, bool migrated); | 1468 | extern void task_numa_fault(int last_node, int node, int pages, int flags); |
| 1469 | extern pid_t task_numa_group_id(struct task_struct *p); | ||
| 1417 | extern void set_numabalancing_state(bool enabled); | 1470 | extern void set_numabalancing_state(bool enabled); |
| 1471 | extern void task_numa_free(struct task_struct *p); | ||
| 1472 | |||
| 1473 | extern unsigned int sysctl_numa_balancing_migrate_deferred; | ||
| 1418 | #else | 1474 | #else |
| 1419 | static inline void task_numa_fault(int node, int pages, bool migrated) | 1475 | static inline void task_numa_fault(int last_node, int node, int pages, |
| 1476 | int flags) | ||
| 1420 | { | 1477 | { |
| 1421 | } | 1478 | } |
| 1479 | static inline pid_t task_numa_group_id(struct task_struct *p) | ||
| 1480 | { | ||
| 1481 | return 0; | ||
| 1482 | } | ||
| 1422 | static inline void set_numabalancing_state(bool enabled) | 1483 | static inline void set_numabalancing_state(bool enabled) |
| 1423 | { | 1484 | { |
| 1424 | } | 1485 | } |
| 1486 | static inline void task_numa_free(struct task_struct *p) | ||
| 1487 | { | ||
| 1488 | } | ||
| 1425 | #endif | 1489 | #endif |
| 1426 | 1490 | ||
| 1427 | static inline struct pid *task_pid(struct task_struct *task) | 1491 | static inline struct pid *task_pid(struct task_struct *task) |
| @@ -1974,7 +2038,7 @@ extern void wake_up_new_task(struct task_struct *tsk); | |||
| 1974 | #else | 2038 | #else |
| 1975 | static inline void kick_process(struct task_struct *tsk) { } | 2039 | static inline void kick_process(struct task_struct *tsk) { } |
| 1976 | #endif | 2040 | #endif |
| 1977 | extern void sched_fork(struct task_struct *p); | 2041 | extern void sched_fork(unsigned long clone_flags, struct task_struct *p); |
| 1978 | extern void sched_dead(struct task_struct *p); | 2042 | extern void sched_dead(struct task_struct *p); |
| 1979 | 2043 | ||
| 1980 | extern void proc_caches_init(void); | 2044 | extern void proc_caches_init(void); |
| @@ -2401,11 +2465,6 @@ static inline int signal_pending_state(long state, struct task_struct *p) | |||
| 2401 | return (state & TASK_INTERRUPTIBLE) || __fatal_signal_pending(p); | 2465 | return (state & TASK_INTERRUPTIBLE) || __fatal_signal_pending(p); |
| 2402 | } | 2466 | } |
| 2403 | 2467 | ||
| 2404 | static inline int need_resched(void) | ||
| 2405 | { | ||
| 2406 | return unlikely(test_thread_flag(TIF_NEED_RESCHED)); | ||
| 2407 | } | ||
| 2408 | |||
| 2409 | /* | 2468 | /* |
| 2410 | * cond_resched() and cond_resched_lock(): latency reduction via | 2469 | * cond_resched() and cond_resched_lock(): latency reduction via |
| 2411 | * explicit rescheduling in places that are safe. The return | 2470 | * explicit rescheduling in places that are safe. The return |
| @@ -2474,36 +2533,105 @@ static inline int tsk_is_polling(struct task_struct *p) | |||
| 2474 | { | 2533 | { |
| 2475 | return task_thread_info(p)->status & TS_POLLING; | 2534 | return task_thread_info(p)->status & TS_POLLING; |
| 2476 | } | 2535 | } |
| 2477 | static inline void current_set_polling(void) | 2536 | static inline void __current_set_polling(void) |
| 2478 | { | 2537 | { |
| 2479 | current_thread_info()->status |= TS_POLLING; | 2538 | current_thread_info()->status |= TS_POLLING; |
| 2480 | } | 2539 | } |
| 2481 | 2540 | ||
| 2482 | static inline void current_clr_polling(void) | 2541 | static inline bool __must_check current_set_polling_and_test(void) |
| 2542 | { | ||
| 2543 | __current_set_polling(); | ||
| 2544 | |||
| 2545 | /* | ||
| 2546 | * Polling state must be visible before we test NEED_RESCHED, | ||
| 2547 | * paired by resched_task() | ||
| 2548 | */ | ||
| 2549 | smp_mb(); | ||
| 2550 | |||
| 2551 | return unlikely(tif_need_resched()); | ||
| 2552 | } | ||
| 2553 | |||
| 2554 | static inline void __current_clr_polling(void) | ||
| 2483 | { | 2555 | { |
| 2484 | current_thread_info()->status &= ~TS_POLLING; | 2556 | current_thread_info()->status &= ~TS_POLLING; |
| 2485 | smp_mb__after_clear_bit(); | 2557 | } |
| 2558 | |||
| 2559 | static inline bool __must_check current_clr_polling_and_test(void) | ||
| 2560 | { | ||
| 2561 | __current_clr_polling(); | ||
| 2562 | |||
| 2563 | /* | ||
| 2564 | * Polling state must be visible before we test NEED_RESCHED, | ||
| 2565 | * paired by resched_task() | ||
| 2566 | */ | ||
| 2567 | smp_mb(); | ||
| 2568 | |||
| 2569 | return unlikely(tif_need_resched()); | ||
| 2486 | } | 2570 | } |
| 2487 | #elif defined(TIF_POLLING_NRFLAG) | 2571 | #elif defined(TIF_POLLING_NRFLAG) |
| 2488 | static inline int tsk_is_polling(struct task_struct *p) | 2572 | static inline int tsk_is_polling(struct task_struct *p) |
| 2489 | { | 2573 | { |
| 2490 | return test_tsk_thread_flag(p, TIF_POLLING_NRFLAG); | 2574 | return test_tsk_thread_flag(p, TIF_POLLING_NRFLAG); |
| 2491 | } | 2575 | } |
| 2492 | static inline void current_set_polling(void) | 2576 | |
| 2577 | static inline void __current_set_polling(void) | ||
| 2493 | { | 2578 | { |
| 2494 | set_thread_flag(TIF_POLLING_NRFLAG); | 2579 | set_thread_flag(TIF_POLLING_NRFLAG); |
| 2495 | } | 2580 | } |
| 2496 | 2581 | ||
| 2497 | static inline void current_clr_polling(void) | 2582 | static inline bool __must_check current_set_polling_and_test(void) |
| 2583 | { | ||
| 2584 | __current_set_polling(); | ||
| 2585 | |||
| 2586 | /* | ||
| 2587 | * Polling state must be visible before we test NEED_RESCHED, | ||
| 2588 | * paired by resched_task() | ||
| 2589 | * | ||
| 2590 | * XXX: assumes set/clear bit are identical barrier wise. | ||
| 2591 | */ | ||
| 2592 | smp_mb__after_clear_bit(); | ||
| 2593 | |||
| 2594 | return unlikely(tif_need_resched()); | ||
| 2595 | } | ||
| 2596 | |||
| 2597 | static inline void __current_clr_polling(void) | ||
| 2498 | { | 2598 | { |
| 2499 | clear_thread_flag(TIF_POLLING_NRFLAG); | 2599 | clear_thread_flag(TIF_POLLING_NRFLAG); |
| 2500 | } | 2600 | } |
| 2601 | |||
| 2602 | static inline bool __must_check current_clr_polling_and_test(void) | ||
| 2603 | { | ||
| 2604 | __current_clr_polling(); | ||
| 2605 | |||
| 2606 | /* | ||
| 2607 | * Polling state must be visible before we test NEED_RESCHED, | ||
| 2608 | * paired by resched_task() | ||
| 2609 | */ | ||
| 2610 | smp_mb__after_clear_bit(); | ||
| 2611 | |||
| 2612 | return unlikely(tif_need_resched()); | ||
| 2613 | } | ||
| 2614 | |||
| 2501 | #else | 2615 | #else |
| 2502 | static inline int tsk_is_polling(struct task_struct *p) { return 0; } | 2616 | static inline int tsk_is_polling(struct task_struct *p) { return 0; } |
| 2503 | static inline void current_set_polling(void) { } | 2617 | static inline void __current_set_polling(void) { } |
| 2504 | static inline void current_clr_polling(void) { } | 2618 | static inline void __current_clr_polling(void) { } |
| 2619 | |||
| 2620 | static inline bool __must_check current_set_polling_and_test(void) | ||
| 2621 | { | ||
| 2622 | return unlikely(tif_need_resched()); | ||
| 2623 | } | ||
| 2624 | static inline bool __must_check current_clr_polling_and_test(void) | ||
| 2625 | { | ||
| 2626 | return unlikely(tif_need_resched()); | ||
| 2627 | } | ||
| 2505 | #endif | 2628 | #endif |
| 2506 | 2629 | ||
| 2630 | static __always_inline bool need_resched(void) | ||
| 2631 | { | ||
| 2632 | return unlikely(tif_need_resched()); | ||
| 2633 | } | ||
| 2634 | |||
| 2507 | /* | 2635 | /* |
| 2508 | * Thread group CPU time accounting. | 2636 | * Thread group CPU time accounting. |
| 2509 | */ | 2637 | */ |
| @@ -2545,6 +2673,11 @@ static inline unsigned int task_cpu(const struct task_struct *p) | |||
| 2545 | return task_thread_info(p)->cpu; | 2673 | return task_thread_info(p)->cpu; |
| 2546 | } | 2674 | } |
| 2547 | 2675 | ||
| 2676 | static inline int task_node(const struct task_struct *p) | ||
| 2677 | { | ||
| 2678 | return cpu_to_node(task_cpu(p)); | ||
| 2679 | } | ||
| 2680 | |||
| 2548 | extern void set_task_cpu(struct task_struct *p, unsigned int cpu); | 2681 | extern void set_task_cpu(struct task_struct *p, unsigned int cpu); |
| 2549 | 2682 | ||
| 2550 | #else | 2683 | #else |
diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h index bf8086b2506e..10d16c4fbe89 100644 --- a/include/linux/sched/sysctl.h +++ b/include/linux/sched/sysctl.h | |||
| @@ -47,7 +47,6 @@ extern enum sched_tunable_scaling sysctl_sched_tunable_scaling; | |||
| 47 | extern unsigned int sysctl_numa_balancing_scan_delay; | 47 | extern unsigned int sysctl_numa_balancing_scan_delay; |
| 48 | extern unsigned int sysctl_numa_balancing_scan_period_min; | 48 | extern unsigned int sysctl_numa_balancing_scan_period_min; |
| 49 | extern unsigned int sysctl_numa_balancing_scan_period_max; | 49 | extern unsigned int sysctl_numa_balancing_scan_period_max; |
| 50 | extern unsigned int sysctl_numa_balancing_scan_period_reset; | ||
| 51 | extern unsigned int sysctl_numa_balancing_scan_size; | 50 | extern unsigned int sysctl_numa_balancing_scan_size; |
| 52 | extern unsigned int sysctl_numa_balancing_settle_count; | 51 | extern unsigned int sysctl_numa_balancing_settle_count; |
| 53 | 52 | ||
diff --git a/include/linux/sched_clock.h b/include/linux/sched_clock.h index fa7922c80a41..cddf0c2940b6 100644 --- a/include/linux/sched_clock.h +++ b/include/linux/sched_clock.h | |||
| @@ -15,7 +15,7 @@ static inline void sched_clock_postinit(void) { } | |||
| 15 | #endif | 15 | #endif |
| 16 | 16 | ||
| 17 | extern void setup_sched_clock(u32 (*read)(void), int bits, unsigned long rate); | 17 | extern void setup_sched_clock(u32 (*read)(void), int bits, unsigned long rate); |
| 18 | 18 | extern void sched_clock_register(u64 (*read)(void), int bits, | |
| 19 | extern unsigned long long (*sched_clock_func)(void); | 19 | unsigned long rate); |
| 20 | 20 | ||
| 21 | #endif | 21 | #endif |
diff --git a/include/linux/serial_sci.h b/include/linux/serial_sci.h index d34049712a4d..50fe651da965 100644 --- a/include/linux/serial_sci.h +++ b/include/linux/serial_sci.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | #include <linux/sh_dma.h> | 5 | #include <linux/sh_dma.h> |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Generic header for SuperH (H)SCI(F) (used by sh/sh64/h8300 and related parts) | 8 | * Generic header for SuperH (H)SCI(F) (used by sh/sh64 and related parts) |
| 9 | */ | 9 | */ |
| 10 | 10 | ||
| 11 | #define SCIx_NOT_SUPPORTED (-1) | 11 | #define SCIx_NOT_SUPPORTED (-1) |
diff --git a/include/linux/sfi.h b/include/linux/sfi.h index fe817918b30e..d9b436f09925 100644 --- a/include/linux/sfi.h +++ b/include/linux/sfi.h | |||
| @@ -59,6 +59,9 @@ | |||
| 59 | #ifndef _LINUX_SFI_H | 59 | #ifndef _LINUX_SFI_H |
| 60 | #define _LINUX_SFI_H | 60 | #define _LINUX_SFI_H |
| 61 | 61 | ||
| 62 | #include <linux/init.h> | ||
| 63 | #include <linux/types.h> | ||
| 64 | |||
| 62 | /* Table signatures reserved by the SFI specification */ | 65 | /* Table signatures reserved by the SFI specification */ |
| 63 | #define SFI_SIG_SYST "SYST" | 66 | #define SFI_SIG_SYST "SYST" |
| 64 | #define SFI_SIG_FREQ "FREQ" | 67 | #define SFI_SIG_FREQ "FREQ" |
diff --git a/include/linux/spi/rspi.h b/include/linux/spi/rspi.h index 900f0e328235..a25bd6f65e7f 100644 --- a/include/linux/spi/rspi.h +++ b/include/linux/spi/rspi.h | |||
| @@ -26,6 +26,8 @@ struct rspi_plat_data { | |||
| 26 | unsigned int dma_rx_id; | 26 | unsigned int dma_rx_id; |
| 27 | 27 | ||
| 28 | unsigned dma_width_16bit:1; /* DMAC read/write width = 16-bit */ | 28 | unsigned dma_width_16bit:1; /* DMAC read/write width = 16-bit */ |
| 29 | |||
| 30 | u16 num_chipselect; | ||
| 29 | }; | 31 | }; |
| 30 | 32 | ||
| 31 | #endif | 33 | #endif |
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index 887116dbce2c..8c62ba74dd91 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include <linux/mod_devicetable.h> | 23 | #include <linux/mod_devicetable.h> |
| 24 | #include <linux/slab.h> | 24 | #include <linux/slab.h> |
| 25 | #include <linux/kthread.h> | 25 | #include <linux/kthread.h> |
| 26 | #include <linux/completion.h> | ||
| 26 | 27 | ||
| 27 | /* | 28 | /* |
| 28 | * INTERFACES between SPI master-side drivers and SPI infrastructure. | 29 | * INTERFACES between SPI master-side drivers and SPI infrastructure. |
| @@ -150,8 +151,7 @@ static inline void *spi_get_drvdata(struct spi_device *spi) | |||
| 150 | } | 151 | } |
| 151 | 152 | ||
| 152 | struct spi_message; | 153 | struct spi_message; |
| 153 | 154 | struct spi_transfer; | |
| 154 | |||
| 155 | 155 | ||
| 156 | /** | 156 | /** |
| 157 | * struct spi_driver - Host side "protocol" driver | 157 | * struct spi_driver - Host side "protocol" driver |
| @@ -257,6 +257,9 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv) | |||
| 257 | * @queue_lock: spinlock to syncronise access to message queue | 257 | * @queue_lock: spinlock to syncronise access to message queue |
| 258 | * @queue: message queue | 258 | * @queue: message queue |
| 259 | * @cur_msg: the currently in-flight message | 259 | * @cur_msg: the currently in-flight message |
| 260 | * @cur_msg_prepared: spi_prepare_message was called for the currently | ||
| 261 | * in-flight message | ||
| 262 | * @xfer_completion: used by core tranfer_one_message() | ||
| 260 | * @busy: message pump is busy | 263 | * @busy: message pump is busy |
| 261 | * @running: message pump is running | 264 | * @running: message pump is running |
| 262 | * @rt: whether this queue is set to run as a realtime task | 265 | * @rt: whether this queue is set to run as a realtime task |
| @@ -274,6 +277,16 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv) | |||
| 274 | * @unprepare_transfer_hardware: there are currently no more messages on the | 277 | * @unprepare_transfer_hardware: there are currently no more messages on the |
| 275 | * queue so the subsystem notifies the driver that it may relax the | 278 | * queue so the subsystem notifies the driver that it may relax the |
| 276 | * hardware by issuing this call | 279 | * hardware by issuing this call |
| 280 | * @set_cs: assert or deassert chip select, true to assert. May be called | ||
| 281 | * from interrupt context. | ||
| 282 | * @prepare_message: set up the controller to transfer a single message, | ||
| 283 | * for example doing DMA mapping. Called from threaded | ||
| 284 | * context. | ||
| 285 | * @transfer_one: transfer a single spi_transfer. When the | ||
| 286 | * driver is finished with this transfer it must call | ||
| 287 | * spi_finalize_current_transfer() so the subsystem can issue | ||
| 288 | * the next transfer | ||
| 289 | * @unprepare_message: undo any work done by prepare_message(). | ||
| 277 | * @cs_gpios: Array of GPIOs to use as chip select lines; one per CS | 290 | * @cs_gpios: Array of GPIOs to use as chip select lines; one per CS |
| 278 | * number. Any individual value may be -ENOENT for CS lines that | 291 | * number. Any individual value may be -ENOENT for CS lines that |
| 279 | * are not GPIOs (driven by the SPI controller itself). | 292 | * are not GPIOs (driven by the SPI controller itself). |
| @@ -388,11 +401,25 @@ struct spi_master { | |||
| 388 | bool running; | 401 | bool running; |
| 389 | bool rt; | 402 | bool rt; |
| 390 | bool auto_runtime_pm; | 403 | bool auto_runtime_pm; |
| 404 | bool cur_msg_prepared; | ||
| 405 | struct completion xfer_completion; | ||
| 391 | 406 | ||
| 392 | int (*prepare_transfer_hardware)(struct spi_master *master); | 407 | int (*prepare_transfer_hardware)(struct spi_master *master); |
| 393 | int (*transfer_one_message)(struct spi_master *master, | 408 | int (*transfer_one_message)(struct spi_master *master, |
| 394 | struct spi_message *mesg); | 409 | struct spi_message *mesg); |
| 395 | int (*unprepare_transfer_hardware)(struct spi_master *master); | 410 | int (*unprepare_transfer_hardware)(struct spi_master *master); |
| 411 | int (*prepare_message)(struct spi_master *master, | ||
| 412 | struct spi_message *message); | ||
| 413 | int (*unprepare_message)(struct spi_master *master, | ||
| 414 | struct spi_message *message); | ||
| 415 | |||
| 416 | /* | ||
| 417 | * These hooks are for drivers that use a generic implementation | ||
| 418 | * of transfer_one_message() provied by the core. | ||
| 419 | */ | ||
| 420 | void (*set_cs)(struct spi_device *spi, bool enable); | ||
| 421 | int (*transfer_one)(struct spi_master *master, struct spi_device *spi, | ||
| 422 | struct spi_transfer *transfer); | ||
| 396 | 423 | ||
| 397 | /* gpio chip select */ | 424 | /* gpio chip select */ |
| 398 | int *cs_gpios; | 425 | int *cs_gpios; |
| @@ -428,12 +455,15 @@ extern int spi_master_resume(struct spi_master *master); | |||
| 428 | /* Calls the driver make to interact with the message queue */ | 455 | /* Calls the driver make to interact with the message queue */ |
| 429 | extern struct spi_message *spi_get_next_queued_message(struct spi_master *master); | 456 | extern struct spi_message *spi_get_next_queued_message(struct spi_master *master); |
| 430 | extern void spi_finalize_current_message(struct spi_master *master); | 457 | extern void spi_finalize_current_message(struct spi_master *master); |
| 458 | extern void spi_finalize_current_transfer(struct spi_master *master); | ||
| 431 | 459 | ||
| 432 | /* the spi driver core manages memory for the spi_master classdev */ | 460 | /* the spi driver core manages memory for the spi_master classdev */ |
| 433 | extern struct spi_master * | 461 | extern struct spi_master * |
| 434 | spi_alloc_master(struct device *host, unsigned size); | 462 | spi_alloc_master(struct device *host, unsigned size); |
| 435 | 463 | ||
| 436 | extern int spi_register_master(struct spi_master *master); | 464 | extern int spi_register_master(struct spi_master *master); |
| 465 | extern int devm_spi_register_master(struct device *dev, | ||
| 466 | struct spi_master *master); | ||
| 437 | extern void spi_unregister_master(struct spi_master *master); | 467 | extern void spi_unregister_master(struct spi_master *master); |
| 438 | 468 | ||
| 439 | extern struct spi_master *spi_busnum_to_master(u16 busnum); | 469 | extern struct spi_master *spi_busnum_to_master(u16 busnum); |
| @@ -823,6 +853,33 @@ static inline ssize_t spi_w8r16(struct spi_device *spi, u8 cmd) | |||
| 823 | return (status < 0) ? status : result; | 853 | return (status < 0) ? status : result; |
| 824 | } | 854 | } |
| 825 | 855 | ||
| 856 | /** | ||
| 857 | * spi_w8r16be - SPI synchronous 8 bit write followed by 16 bit big-endian read | ||
| 858 | * @spi: device with which data will be exchanged | ||
| 859 | * @cmd: command to be written before data is read back | ||
| 860 | * Context: can sleep | ||
| 861 | * | ||
| 862 | * This returns the (unsigned) sixteen bit number returned by the device in cpu | ||
| 863 | * endianness, or else a negative error code. Callable only from contexts that | ||
| 864 | * can sleep. | ||
| 865 | * | ||
| 866 | * This function is similar to spi_w8r16, with the exception that it will | ||
| 867 | * convert the read 16 bit data word from big-endian to native endianness. | ||
| 868 | * | ||
| 869 | */ | ||
| 870 | static inline ssize_t spi_w8r16be(struct spi_device *spi, u8 cmd) | ||
| 871 | |||
| 872 | { | ||
| 873 | ssize_t status; | ||
| 874 | __be16 result; | ||
| 875 | |||
| 876 | status = spi_write_then_read(spi, &cmd, 1, &result, 2); | ||
| 877 | if (status < 0) | ||
| 878 | return status; | ||
| 879 | |||
| 880 | return be16_to_cpu(result); | ||
| 881 | } | ||
| 882 | |||
| 826 | /*---------------------------------------------------------------------------*/ | 883 | /*---------------------------------------------------------------------------*/ |
| 827 | 884 | ||
| 828 | /* | 885 | /* |
diff --git a/include/linux/stop_machine.h b/include/linux/stop_machine.h index 3b5e910d14ca..d2abbdb8c6aa 100644 --- a/include/linux/stop_machine.h +++ b/include/linux/stop_machine.h | |||
| @@ -28,6 +28,7 @@ struct cpu_stop_work { | |||
| 28 | }; | 28 | }; |
| 29 | 29 | ||
| 30 | int stop_one_cpu(unsigned int cpu, cpu_stop_fn_t fn, void *arg); | 30 | int stop_one_cpu(unsigned int cpu, cpu_stop_fn_t fn, void *arg); |
| 31 | int stop_two_cpus(unsigned int cpu1, unsigned int cpu2, cpu_stop_fn_t fn, void *arg); | ||
| 31 | void stop_one_cpu_nowait(unsigned int cpu, cpu_stop_fn_t fn, void *arg, | 32 | void stop_one_cpu_nowait(unsigned int cpu, cpu_stop_fn_t fn, void *arg, |
| 32 | struct cpu_stop_work *work_buf); | 33 | struct cpu_stop_work *work_buf); |
| 33 | int stop_cpus(const struct cpumask *cpumask, cpu_stop_fn_t fn, void *arg); | 34 | int stop_cpus(const struct cpumask *cpumask, cpu_stop_fn_t fn, void *arg); |
diff --git a/include/linux/thinkpad_acpi.h b/include/linux/thinkpad_acpi.h new file mode 100644 index 000000000000..361de59a2285 --- /dev/null +++ b/include/linux/thinkpad_acpi.h | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | #ifndef __THINKPAD_ACPI_H__ | ||
| 2 | #define __THINKPAD_ACPI_H__ | ||
| 3 | |||
| 4 | /* These two functions return 0 if success, or negative error code | ||
| 5 | (e g -ENODEV if no led present) */ | ||
| 6 | |||
| 7 | enum { | ||
| 8 | TPACPI_LED_MUTE, | ||
| 9 | TPACPI_LED_MICMUTE, | ||
| 10 | TPACPI_LED_MAX, | ||
| 11 | }; | ||
| 12 | |||
| 13 | int tpacpi_led_set(int whichled, bool on); | ||
| 14 | |||
| 15 | #endif | ||
diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h index e7e04736802f..fddbe2023a5d 100644 --- a/include/linux/thread_info.h +++ b/include/linux/thread_info.h | |||
| @@ -104,8 +104,21 @@ static inline int test_ti_thread_flag(struct thread_info *ti, int flag) | |||
| 104 | #define test_thread_flag(flag) \ | 104 | #define test_thread_flag(flag) \ |
| 105 | test_ti_thread_flag(current_thread_info(), flag) | 105 | test_ti_thread_flag(current_thread_info(), flag) |
| 106 | 106 | ||
| 107 | #define set_need_resched() set_thread_flag(TIF_NEED_RESCHED) | 107 | static inline __deprecated void set_need_resched(void) |
| 108 | #define clear_need_resched() clear_thread_flag(TIF_NEED_RESCHED) | 108 | { |
| 109 | /* | ||
| 110 | * Use of this function in deprecated. | ||
| 111 | * | ||
| 112 | * As of this writing there are only a few users in the DRM tree left | ||
| 113 | * all of which are wrong and can be removed without causing too much | ||
| 114 | * grief. | ||
| 115 | * | ||
| 116 | * The DRM people are aware and are working on removing the last few | ||
| 117 | * instances. | ||
| 118 | */ | ||
| 119 | } | ||
| 120 | |||
| 121 | #define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED) | ||
| 109 | 122 | ||
| 110 | #if defined TIF_RESTORE_SIGMASK && !defined HAVE_SET_RESTORE_SIGMASK | 123 | #if defined TIF_RESTORE_SIGMASK && !defined HAVE_SET_RESTORE_SIGMASK |
| 111 | /* | 124 | /* |
diff --git a/include/linux/topology.h b/include/linux/topology.h index d3cf0d6e7712..12ae6ce997d6 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h | |||
| @@ -106,6 +106,8 @@ int arch_update_cpu_topology(void); | |||
| 106 | .last_balance = jiffies, \ | 106 | .last_balance = jiffies, \ |
| 107 | .balance_interval = 1, \ | 107 | .balance_interval = 1, \ |
| 108 | .smt_gain = 1178, /* 15% */ \ | 108 | .smt_gain = 1178, /* 15% */ \ |
| 109 | .max_newidle_lb_cost = 0, \ | ||
| 110 | .next_decay_max_lb_cost = jiffies, \ | ||
| 109 | } | 111 | } |
| 110 | #endif | 112 | #endif |
| 111 | #endif /* CONFIG_SCHED_SMT */ | 113 | #endif /* CONFIG_SCHED_SMT */ |
| @@ -135,6 +137,8 @@ int arch_update_cpu_topology(void); | |||
| 135 | , \ | 137 | , \ |
| 136 | .last_balance = jiffies, \ | 138 | .last_balance = jiffies, \ |
| 137 | .balance_interval = 1, \ | 139 | .balance_interval = 1, \ |
| 140 | .max_newidle_lb_cost = 0, \ | ||
| 141 | .next_decay_max_lb_cost = jiffies, \ | ||
| 138 | } | 142 | } |
| 139 | #endif | 143 | #endif |
| 140 | #endif /* CONFIG_SCHED_MC */ | 144 | #endif /* CONFIG_SCHED_MC */ |
| @@ -166,6 +170,8 @@ int arch_update_cpu_topology(void); | |||
| 166 | , \ | 170 | , \ |
| 167 | .last_balance = jiffies, \ | 171 | .last_balance = jiffies, \ |
| 168 | .balance_interval = 1, \ | 172 | .balance_interval = 1, \ |
| 173 | .max_newidle_lb_cost = 0, \ | ||
| 174 | .next_decay_max_lb_cost = jiffies, \ | ||
| 169 | } | 175 | } |
| 170 | #endif | 176 | #endif |
| 171 | 177 | ||
diff --git a/include/linux/tty.h b/include/linux/tty.h index 2f47989d8288..97d660ed70c1 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
| @@ -671,31 +671,17 @@ static inline void tty_wait_until_sent_from_close(struct tty_struct *tty, | |||
| 671 | #define wait_event_interruptible_tty(tty, wq, condition) \ | 671 | #define wait_event_interruptible_tty(tty, wq, condition) \ |
| 672 | ({ \ | 672 | ({ \ |
| 673 | int __ret = 0; \ | 673 | int __ret = 0; \ |
| 674 | if (!(condition)) { \ | 674 | if (!(condition)) \ |
| 675 | __wait_event_interruptible_tty(tty, wq, condition, __ret); \ | 675 | __ret = __wait_event_interruptible_tty(tty, wq, \ |
| 676 | } \ | 676 | condition); \ |
| 677 | __ret; \ | 677 | __ret; \ |
| 678 | }) | 678 | }) |
| 679 | 679 | ||
| 680 | #define __wait_event_interruptible_tty(tty, wq, condition, ret) \ | 680 | #define __wait_event_interruptible_tty(tty, wq, condition) \ |
| 681 | do { \ | 681 | ___wait_event(wq, condition, TASK_INTERRUPTIBLE, 0, 0, \ |
| 682 | DEFINE_WAIT(__wait); \ | 682 | tty_unlock(tty); \ |
| 683 | \ | ||
| 684 | for (;;) { \ | ||
| 685 | prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ | ||
| 686 | if (condition) \ | ||
| 687 | break; \ | ||
| 688 | if (!signal_pending(current)) { \ | ||
| 689 | tty_unlock(tty); \ | ||
| 690 | schedule(); \ | 683 | schedule(); \ |
| 691 | tty_lock(tty); \ | 684 | tty_lock(tty)) |
| 692 | continue; \ | ||
| 693 | } \ | ||
| 694 | ret = -ERESTARTSYS; \ | ||
| 695 | break; \ | ||
| 696 | } \ | ||
| 697 | finish_wait(&wq, &__wait); \ | ||
| 698 | } while (0) | ||
| 699 | 685 | ||
| 700 | #ifdef CONFIG_PROC_FS | 686 | #ifdef CONFIG_PROC_FS |
| 701 | extern void proc_tty_register_driver(struct tty_driver *); | 687 | extern void proc_tty_register_driver(struct tty_driver *); |
diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h index 5ca0951e1855..9d8cf056e661 100644 --- a/include/linux/uaccess.h +++ b/include/linux/uaccess.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | */ | 15 | */ |
| 16 | static inline void pagefault_disable(void) | 16 | static inline void pagefault_disable(void) |
| 17 | { | 17 | { |
| 18 | inc_preempt_count(); | 18 | preempt_count_inc(); |
| 19 | /* | 19 | /* |
| 20 | * make sure to have issued the store before a pagefault | 20 | * make sure to have issued the store before a pagefault |
| 21 | * can hit. | 21 | * can hit. |
| @@ -30,11 +30,7 @@ static inline void pagefault_enable(void) | |||
| 30 | * the pagefault handler again. | 30 | * the pagefault handler again. |
| 31 | */ | 31 | */ |
| 32 | barrier(); | 32 | barrier(); |
| 33 | dec_preempt_count(); | 33 | preempt_count_dec(); |
| 34 | /* | ||
| 35 | * make sure we do.. | ||
| 36 | */ | ||
| 37 | barrier(); | ||
| 38 | preempt_check_resched(); | 34 | preempt_check_resched(); |
| 39 | } | 35 | } |
| 40 | 36 | ||
diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h index 06f28beed7c2..319eae70fe84 100644 --- a/include/linux/uprobes.h +++ b/include/linux/uprobes.h | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | struct vm_area_struct; | 30 | struct vm_area_struct; |
| 31 | struct mm_struct; | 31 | struct mm_struct; |
| 32 | struct inode; | 32 | struct inode; |
| 33 | struct notifier_block; | ||
| 33 | 34 | ||
| 34 | #ifdef CONFIG_ARCH_SUPPORTS_UPROBES | 35 | #ifdef CONFIG_ARCH_SUPPORTS_UPROBES |
| 35 | # include <asm/uprobes.h> | 36 | # include <asm/uprobes.h> |
| @@ -108,6 +109,7 @@ extern int __weak set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsign | |||
| 108 | extern int __weak set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); | 109 | extern int __weak set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); |
| 109 | extern bool __weak is_swbp_insn(uprobe_opcode_t *insn); | 110 | extern bool __weak is_swbp_insn(uprobe_opcode_t *insn); |
| 110 | extern bool __weak is_trap_insn(uprobe_opcode_t *insn); | 111 | extern bool __weak is_trap_insn(uprobe_opcode_t *insn); |
| 112 | extern int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t); | ||
| 111 | extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); | 113 | extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); |
| 112 | extern int uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool); | 114 | extern int uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool); |
| 113 | extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); | 115 | extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); |
| @@ -117,14 +119,21 @@ extern void uprobe_start_dup_mmap(void); | |||
| 117 | extern void uprobe_end_dup_mmap(void); | 119 | extern void uprobe_end_dup_mmap(void); |
| 118 | extern void uprobe_dup_mmap(struct mm_struct *oldmm, struct mm_struct *newmm); | 120 | extern void uprobe_dup_mmap(struct mm_struct *oldmm, struct mm_struct *newmm); |
| 119 | extern void uprobe_free_utask(struct task_struct *t); | 121 | extern void uprobe_free_utask(struct task_struct *t); |
| 120 | extern void uprobe_copy_process(struct task_struct *t); | 122 | extern void uprobe_copy_process(struct task_struct *t, unsigned long flags); |
| 121 | extern unsigned long __weak uprobe_get_swbp_addr(struct pt_regs *regs); | 123 | extern unsigned long __weak uprobe_get_swbp_addr(struct pt_regs *regs); |
| 122 | extern int uprobe_post_sstep_notifier(struct pt_regs *regs); | 124 | extern int uprobe_post_sstep_notifier(struct pt_regs *regs); |
| 123 | extern int uprobe_pre_sstep_notifier(struct pt_regs *regs); | 125 | extern int uprobe_pre_sstep_notifier(struct pt_regs *regs); |
| 124 | extern void uprobe_notify_resume(struct pt_regs *regs); | 126 | extern void uprobe_notify_resume(struct pt_regs *regs); |
| 125 | extern bool uprobe_deny_signal(void); | 127 | extern bool uprobe_deny_signal(void); |
| 126 | extern bool __weak arch_uprobe_skip_sstep(struct arch_uprobe *aup, struct pt_regs *regs); | 128 | extern bool arch_uprobe_skip_sstep(struct arch_uprobe *aup, struct pt_regs *regs); |
| 127 | extern void uprobe_clear_state(struct mm_struct *mm); | 129 | extern void uprobe_clear_state(struct mm_struct *mm); |
| 130 | extern int arch_uprobe_analyze_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long addr); | ||
| 131 | extern int arch_uprobe_pre_xol(struct arch_uprobe *aup, struct pt_regs *regs); | ||
| 132 | extern int arch_uprobe_post_xol(struct arch_uprobe *aup, struct pt_regs *regs); | ||
| 133 | extern bool arch_uprobe_xol_was_trapped(struct task_struct *tsk); | ||
| 134 | extern int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data); | ||
| 135 | extern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs); | ||
| 136 | extern unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs *regs); | ||
| 128 | #else /* !CONFIG_UPROBES */ | 137 | #else /* !CONFIG_UPROBES */ |
| 129 | struct uprobes_state { | 138 | struct uprobes_state { |
| 130 | }; | 139 | }; |
| @@ -174,7 +183,7 @@ static inline unsigned long uprobe_get_swbp_addr(struct pt_regs *regs) | |||
| 174 | static inline void uprobe_free_utask(struct task_struct *t) | 183 | static inline void uprobe_free_utask(struct task_struct *t) |
| 175 | { | 184 | { |
| 176 | } | 185 | } |
| 177 | static inline void uprobe_copy_process(struct task_struct *t) | 186 | static inline void uprobe_copy_process(struct task_struct *t, unsigned long flags) |
| 178 | { | 187 | { |
| 179 | } | 188 | } |
| 180 | static inline void uprobe_clear_state(struct mm_struct *mm) | 189 | static inline void uprobe_clear_state(struct mm_struct *mm) |
diff --git a/include/linux/wait.h b/include/linux/wait.h index a67fc1635592..61939ba30aa0 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h | |||
| @@ -1,7 +1,8 @@ | |||
| 1 | #ifndef _LINUX_WAIT_H | 1 | #ifndef _LINUX_WAIT_H |
| 2 | #define _LINUX_WAIT_H | 2 | #define _LINUX_WAIT_H |
| 3 | 3 | /* | |
| 4 | 4 | * Linux wait queue related types and methods | |
| 5 | */ | ||
| 5 | #include <linux/list.h> | 6 | #include <linux/list.h> |
| 6 | #include <linux/stddef.h> | 7 | #include <linux/stddef.h> |
| 7 | #include <linux/spinlock.h> | 8 | #include <linux/spinlock.h> |
| @@ -13,27 +14,27 @@ typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int flags, v | |||
| 13 | int default_wake_function(wait_queue_t *wait, unsigned mode, int flags, void *key); | 14 | int default_wake_function(wait_queue_t *wait, unsigned mode, int flags, void *key); |
| 14 | 15 | ||
| 15 | struct __wait_queue { | 16 | struct __wait_queue { |
| 16 | unsigned int flags; | 17 | unsigned int flags; |
| 17 | #define WQ_FLAG_EXCLUSIVE 0x01 | 18 | #define WQ_FLAG_EXCLUSIVE 0x01 |
| 18 | void *private; | 19 | void *private; |
| 19 | wait_queue_func_t func; | 20 | wait_queue_func_t func; |
| 20 | struct list_head task_list; | 21 | struct list_head task_list; |
| 21 | }; | 22 | }; |
| 22 | 23 | ||
| 23 | struct wait_bit_key { | 24 | struct wait_bit_key { |
| 24 | void *flags; | 25 | void *flags; |
| 25 | int bit_nr; | 26 | int bit_nr; |
| 26 | #define WAIT_ATOMIC_T_BIT_NR -1 | 27 | #define WAIT_ATOMIC_T_BIT_NR -1 |
| 27 | }; | 28 | }; |
| 28 | 29 | ||
| 29 | struct wait_bit_queue { | 30 | struct wait_bit_queue { |
| 30 | struct wait_bit_key key; | 31 | struct wait_bit_key key; |
| 31 | wait_queue_t wait; | 32 | wait_queue_t wait; |
| 32 | }; | 33 | }; |
| 33 | 34 | ||
| 34 | struct __wait_queue_head { | 35 | struct __wait_queue_head { |
| 35 | spinlock_t lock; | 36 | spinlock_t lock; |
| 36 | struct list_head task_list; | 37 | struct list_head task_list; |
| 37 | }; | 38 | }; |
| 38 | typedef struct __wait_queue_head wait_queue_head_t; | 39 | typedef struct __wait_queue_head wait_queue_head_t; |
| 39 | 40 | ||
| @@ -84,17 +85,17 @@ extern void __init_waitqueue_head(wait_queue_head_t *q, const char *name, struct | |||
| 84 | 85 | ||
| 85 | static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p) | 86 | static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p) |
| 86 | { | 87 | { |
| 87 | q->flags = 0; | 88 | q->flags = 0; |
| 88 | q->private = p; | 89 | q->private = p; |
| 89 | q->func = default_wake_function; | 90 | q->func = default_wake_function; |
| 90 | } | 91 | } |
| 91 | 92 | ||
| 92 | static inline void init_waitqueue_func_entry(wait_queue_t *q, | 93 | static inline void |
| 93 | wait_queue_func_t func) | 94 | init_waitqueue_func_entry(wait_queue_t *q, wait_queue_func_t func) |
| 94 | { | 95 | { |
| 95 | q->flags = 0; | 96 | q->flags = 0; |
| 96 | q->private = NULL; | 97 | q->private = NULL; |
| 97 | q->func = func; | 98 | q->func = func; |
| 98 | } | 99 | } |
| 99 | 100 | ||
| 100 | static inline int waitqueue_active(wait_queue_head_t *q) | 101 | static inline int waitqueue_active(wait_queue_head_t *q) |
| @@ -114,8 +115,8 @@ static inline void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new) | |||
| 114 | /* | 115 | /* |
| 115 | * Used for wake-one threads: | 116 | * Used for wake-one threads: |
| 116 | */ | 117 | */ |
| 117 | static inline void __add_wait_queue_exclusive(wait_queue_head_t *q, | 118 | static inline void |
| 118 | wait_queue_t *wait) | 119 | __add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait) |
| 119 | { | 120 | { |
| 120 | wait->flags |= WQ_FLAG_EXCLUSIVE; | 121 | wait->flags |= WQ_FLAG_EXCLUSIVE; |
| 121 | __add_wait_queue(q, wait); | 122 | __add_wait_queue(q, wait); |
| @@ -127,23 +128,22 @@ static inline void __add_wait_queue_tail(wait_queue_head_t *head, | |||
| 127 | list_add_tail(&new->task_list, &head->task_list); | 128 | list_add_tail(&new->task_list, &head->task_list); |
| 128 | } | 129 | } |
| 129 | 130 | ||
| 130 | static inline void __add_wait_queue_tail_exclusive(wait_queue_head_t *q, | 131 | static inline void |
| 131 | wait_queue_t *wait) | 132 | __add_wait_queue_tail_exclusive(wait_queue_head_t *q, wait_queue_t *wait) |
| 132 | { | 133 | { |
| 133 | wait->flags |= WQ_FLAG_EXCLUSIVE; | 134 | wait->flags |= WQ_FLAG_EXCLUSIVE; |
| 134 | __add_wait_queue_tail(q, wait); | 135 | __add_wait_queue_tail(q, wait); |
| 135 | } | 136 | } |
| 136 | 137 | ||
| 137 | static inline void __remove_wait_queue(wait_queue_head_t *head, | 138 | static inline void |
| 138 | wait_queue_t *old) | 139 | __remove_wait_queue(wait_queue_head_t *head, wait_queue_t *old) |
| 139 | { | 140 | { |
| 140 | list_del(&old->task_list); | 141 | list_del(&old->task_list); |
| 141 | } | 142 | } |
| 142 | 143 | ||
| 143 | void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key); | 144 | void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key); |
| 144 | void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key); | 145 | void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key); |
| 145 | void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr, | 146 | void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr, void *key); |
| 146 | void *key); | ||
| 147 | void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr); | 147 | void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr); |
| 148 | void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr); | 148 | void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr); |
| 149 | void __wake_up_bit(wait_queue_head_t *, void *, int); | 149 | void __wake_up_bit(wait_queue_head_t *, void *, int); |
| @@ -170,27 +170,64 @@ wait_queue_head_t *bit_waitqueue(void *, int); | |||
| 170 | /* | 170 | /* |
| 171 | * Wakeup macros to be used to report events to the targets. | 171 | * Wakeup macros to be used to report events to the targets. |
| 172 | */ | 172 | */ |
| 173 | #define wake_up_poll(x, m) \ | 173 | #define wake_up_poll(x, m) \ |
| 174 | __wake_up(x, TASK_NORMAL, 1, (void *) (m)) | 174 | __wake_up(x, TASK_NORMAL, 1, (void *) (m)) |
| 175 | #define wake_up_locked_poll(x, m) \ | 175 | #define wake_up_locked_poll(x, m) \ |
| 176 | __wake_up_locked_key((x), TASK_NORMAL, (void *) (m)) | 176 | __wake_up_locked_key((x), TASK_NORMAL, (void *) (m)) |
| 177 | #define wake_up_interruptible_poll(x, m) \ | 177 | #define wake_up_interruptible_poll(x, m) \ |
| 178 | __wake_up(x, TASK_INTERRUPTIBLE, 1, (void *) (m)) | 178 | __wake_up(x, TASK_INTERRUPTIBLE, 1, (void *) (m)) |
| 179 | #define wake_up_interruptible_sync_poll(x, m) \ | 179 | #define wake_up_interruptible_sync_poll(x, m) \ |
| 180 | __wake_up_sync_key((x), TASK_INTERRUPTIBLE, 1, (void *) (m)) | 180 | __wake_up_sync_key((x), TASK_INTERRUPTIBLE, 1, (void *) (m)) |
| 181 | 181 | ||
| 182 | #define __wait_event(wq, condition) \ | 182 | #define ___wait_cond_timeout(condition) \ |
| 183 | do { \ | 183 | ({ \ |
| 184 | DEFINE_WAIT(__wait); \ | 184 | bool __cond = (condition); \ |
| 185 | if (__cond && !__ret) \ | ||
| 186 | __ret = 1; \ | ||
| 187 | __cond || !__ret; \ | ||
| 188 | }) | ||
| 189 | |||
| 190 | #define ___wait_is_interruptible(state) \ | ||
| 191 | (!__builtin_constant_p(state) || \ | ||
| 192 | state == TASK_INTERRUPTIBLE || state == TASK_KILLABLE) \ | ||
| 193 | |||
| 194 | #define ___wait_event(wq, condition, state, exclusive, ret, cmd) \ | ||
| 195 | ({ \ | ||
| 196 | __label__ __out; \ | ||
| 197 | wait_queue_t __wait; \ | ||
| 198 | long __ret = ret; \ | ||
| 199 | \ | ||
| 200 | INIT_LIST_HEAD(&__wait.task_list); \ | ||
| 201 | if (exclusive) \ | ||
| 202 | __wait.flags = WQ_FLAG_EXCLUSIVE; \ | ||
| 203 | else \ | ||
| 204 | __wait.flags = 0; \ | ||
| 185 | \ | 205 | \ |
| 186 | for (;;) { \ | 206 | for (;;) { \ |
| 187 | prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE); \ | 207 | long __int = prepare_to_wait_event(&wq, &__wait, state);\ |
| 208 | \ | ||
| 188 | if (condition) \ | 209 | if (condition) \ |
| 189 | break; \ | 210 | break; \ |
| 190 | schedule(); \ | 211 | \ |
| 212 | if (___wait_is_interruptible(state) && __int) { \ | ||
| 213 | __ret = __int; \ | ||
| 214 | if (exclusive) { \ | ||
| 215 | abort_exclusive_wait(&wq, &__wait, \ | ||
| 216 | state, NULL); \ | ||
| 217 | goto __out; \ | ||
| 218 | } \ | ||
| 219 | break; \ | ||
| 220 | } \ | ||
| 221 | \ | ||
| 222 | cmd; \ | ||
| 191 | } \ | 223 | } \ |
| 192 | finish_wait(&wq, &__wait); \ | 224 | finish_wait(&wq, &__wait); \ |
| 193 | } while (0) | 225 | __out: __ret; \ |
| 226 | }) | ||
| 227 | |||
| 228 | #define __wait_event(wq, condition) \ | ||
| 229 | (void)___wait_event(wq, condition, TASK_UNINTERRUPTIBLE, 0, 0, \ | ||
| 230 | schedule()) | ||
| 194 | 231 | ||
| 195 | /** | 232 | /** |
| 196 | * wait_event - sleep until a condition gets true | 233 | * wait_event - sleep until a condition gets true |
| @@ -204,29 +241,17 @@ do { \ | |||
| 204 | * wake_up() has to be called after changing any variable that could | 241 | * wake_up() has to be called after changing any variable that could |
| 205 | * change the result of the wait condition. | 242 | * change the result of the wait condition. |
| 206 | */ | 243 | */ |
| 207 | #define wait_event(wq, condition) \ | 244 | #define wait_event(wq, condition) \ |
| 208 | do { \ | 245 | do { \ |
| 209 | if (condition) \ | 246 | if (condition) \ |
| 210 | break; \ | 247 | break; \ |
| 211 | __wait_event(wq, condition); \ | 248 | __wait_event(wq, condition); \ |
| 212 | } while (0) | 249 | } while (0) |
| 213 | 250 | ||
| 214 | #define __wait_event_timeout(wq, condition, ret) \ | 251 | #define __wait_event_timeout(wq, condition, timeout) \ |
| 215 | do { \ | 252 | ___wait_event(wq, ___wait_cond_timeout(condition), \ |
| 216 | DEFINE_WAIT(__wait); \ | 253 | TASK_UNINTERRUPTIBLE, 0, timeout, \ |
| 217 | \ | 254 | __ret = schedule_timeout(__ret)) |
| 218 | for (;;) { \ | ||
| 219 | prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE); \ | ||
| 220 | if (condition) \ | ||
| 221 | break; \ | ||
| 222 | ret = schedule_timeout(ret); \ | ||
| 223 | if (!ret) \ | ||
| 224 | break; \ | ||
| 225 | } \ | ||
| 226 | if (!ret && (condition)) \ | ||
| 227 | ret = 1; \ | ||
| 228 | finish_wait(&wq, &__wait); \ | ||
| 229 | } while (0) | ||
| 230 | 255 | ||
| 231 | /** | 256 | /** |
| 232 | * wait_event_timeout - sleep until a condition gets true or a timeout elapses | 257 | * wait_event_timeout - sleep until a condition gets true or a timeout elapses |
| @@ -248,28 +273,14 @@ do { \ | |||
| 248 | #define wait_event_timeout(wq, condition, timeout) \ | 273 | #define wait_event_timeout(wq, condition, timeout) \ |
| 249 | ({ \ | 274 | ({ \ |
| 250 | long __ret = timeout; \ | 275 | long __ret = timeout; \ |
| 251 | if (!(condition)) \ | 276 | if (!___wait_cond_timeout(condition)) \ |
| 252 | __wait_event_timeout(wq, condition, __ret); \ | 277 | __ret = __wait_event_timeout(wq, condition, timeout); \ |
| 253 | __ret; \ | 278 | __ret; \ |
| 254 | }) | 279 | }) |
| 255 | 280 | ||
| 256 | #define __wait_event_interruptible(wq, condition, ret) \ | 281 | #define __wait_event_interruptible(wq, condition) \ |
| 257 | do { \ | 282 | ___wait_event(wq, condition, TASK_INTERRUPTIBLE, 0, 0, \ |
| 258 | DEFINE_WAIT(__wait); \ | 283 | schedule()) |
| 259 | \ | ||
| 260 | for (;;) { \ | ||
| 261 | prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ | ||
| 262 | if (condition) \ | ||
| 263 | break; \ | ||
| 264 | if (!signal_pending(current)) { \ | ||
| 265 | schedule(); \ | ||
| 266 | continue; \ | ||
| 267 | } \ | ||
| 268 | ret = -ERESTARTSYS; \ | ||
| 269 | break; \ | ||
| 270 | } \ | ||
| 271 | finish_wait(&wq, &__wait); \ | ||
| 272 | } while (0) | ||
| 273 | 284 | ||
| 274 | /** | 285 | /** |
| 275 | * wait_event_interruptible - sleep until a condition gets true | 286 | * wait_event_interruptible - sleep until a condition gets true |
| @@ -290,31 +301,14 @@ do { \ | |||
| 290 | ({ \ | 301 | ({ \ |
| 291 | int __ret = 0; \ | 302 | int __ret = 0; \ |
| 292 | if (!(condition)) \ | 303 | if (!(condition)) \ |
| 293 | __wait_event_interruptible(wq, condition, __ret); \ | 304 | __ret = __wait_event_interruptible(wq, condition); \ |
| 294 | __ret; \ | 305 | __ret; \ |
| 295 | }) | 306 | }) |
| 296 | 307 | ||
| 297 | #define __wait_event_interruptible_timeout(wq, condition, ret) \ | 308 | #define __wait_event_interruptible_timeout(wq, condition, timeout) \ |
| 298 | do { \ | 309 | ___wait_event(wq, ___wait_cond_timeout(condition), \ |
| 299 | DEFINE_WAIT(__wait); \ | 310 | TASK_INTERRUPTIBLE, 0, timeout, \ |
| 300 | \ | 311 | __ret = schedule_timeout(__ret)) |
| 301 | for (;;) { \ | ||
| 302 | prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ | ||
| 303 | if (condition) \ | ||
| 304 | break; \ | ||
| 305 | if (!signal_pending(current)) { \ | ||
| 306 | ret = schedule_timeout(ret); \ | ||
| 307 | if (!ret) \ | ||
| 308 | break; \ | ||
| 309 | continue; \ | ||
| 310 | } \ | ||
| 311 | ret = -ERESTARTSYS; \ | ||
| 312 | break; \ | ||
| 313 | } \ | ||
| 314 | if (!ret && (condition)) \ | ||
| 315 | ret = 1; \ | ||
| 316 | finish_wait(&wq, &__wait); \ | ||
| 317 | } while (0) | ||
| 318 | 312 | ||
| 319 | /** | 313 | /** |
| 320 | * wait_event_interruptible_timeout - sleep until a condition gets true or a timeout elapses | 314 | * wait_event_interruptible_timeout - sleep until a condition gets true or a timeout elapses |
| @@ -337,15 +331,15 @@ do { \ | |||
| 337 | #define wait_event_interruptible_timeout(wq, condition, timeout) \ | 331 | #define wait_event_interruptible_timeout(wq, condition, timeout) \ |
| 338 | ({ \ | 332 | ({ \ |
| 339 | long __ret = timeout; \ | 333 | long __ret = timeout; \ |
| 340 | if (!(condition)) \ | 334 | if (!___wait_cond_timeout(condition)) \ |
| 341 | __wait_event_interruptible_timeout(wq, condition, __ret); \ | 335 | __ret = __wait_event_interruptible_timeout(wq, \ |
| 336 | condition, timeout); \ | ||
| 342 | __ret; \ | 337 | __ret; \ |
| 343 | }) | 338 | }) |
| 344 | 339 | ||
| 345 | #define __wait_event_hrtimeout(wq, condition, timeout, state) \ | 340 | #define __wait_event_hrtimeout(wq, condition, timeout, state) \ |
| 346 | ({ \ | 341 | ({ \ |
| 347 | int __ret = 0; \ | 342 | int __ret = 0; \ |
| 348 | DEFINE_WAIT(__wait); \ | ||
| 349 | struct hrtimer_sleeper __t; \ | 343 | struct hrtimer_sleeper __t; \ |
| 350 | \ | 344 | \ |
| 351 | hrtimer_init_on_stack(&__t.timer, CLOCK_MONOTONIC, \ | 345 | hrtimer_init_on_stack(&__t.timer, CLOCK_MONOTONIC, \ |
| @@ -356,25 +350,15 @@ do { \ | |||
| 356 | current->timer_slack_ns, \ | 350 | current->timer_slack_ns, \ |
| 357 | HRTIMER_MODE_REL); \ | 351 | HRTIMER_MODE_REL); \ |
| 358 | \ | 352 | \ |
| 359 | for (;;) { \ | 353 | __ret = ___wait_event(wq, condition, state, 0, 0, \ |
| 360 | prepare_to_wait(&wq, &__wait, state); \ | ||
| 361 | if (condition) \ | ||
| 362 | break; \ | ||
| 363 | if (state == TASK_INTERRUPTIBLE && \ | ||
| 364 | signal_pending(current)) { \ | ||
| 365 | __ret = -ERESTARTSYS; \ | ||
| 366 | break; \ | ||
| 367 | } \ | ||
| 368 | if (!__t.task) { \ | 354 | if (!__t.task) { \ |
| 369 | __ret = -ETIME; \ | 355 | __ret = -ETIME; \ |
| 370 | break; \ | 356 | break; \ |
| 371 | } \ | 357 | } \ |
| 372 | schedule(); \ | 358 | schedule()); \ |
| 373 | } \ | ||
| 374 | \ | 359 | \ |
| 375 | hrtimer_cancel(&__t.timer); \ | 360 | hrtimer_cancel(&__t.timer); \ |
| 376 | destroy_hrtimer_on_stack(&__t.timer); \ | 361 | destroy_hrtimer_on_stack(&__t.timer); \ |
| 377 | finish_wait(&wq, &__wait); \ | ||
| 378 | __ret; \ | 362 | __ret; \ |
| 379 | }) | 363 | }) |
| 380 | 364 | ||
| @@ -428,33 +412,15 @@ do { \ | |||
| 428 | __ret; \ | 412 | __ret; \ |
| 429 | }) | 413 | }) |
| 430 | 414 | ||
| 431 | #define __wait_event_interruptible_exclusive(wq, condition, ret) \ | 415 | #define __wait_event_interruptible_exclusive(wq, condition) \ |
| 432 | do { \ | 416 | ___wait_event(wq, condition, TASK_INTERRUPTIBLE, 1, 0, \ |
| 433 | DEFINE_WAIT(__wait); \ | 417 | schedule()) |
| 434 | \ | ||
| 435 | for (;;) { \ | ||
| 436 | prepare_to_wait_exclusive(&wq, &__wait, \ | ||
| 437 | TASK_INTERRUPTIBLE); \ | ||
| 438 | if (condition) { \ | ||
| 439 | finish_wait(&wq, &__wait); \ | ||
| 440 | break; \ | ||
| 441 | } \ | ||
| 442 | if (!signal_pending(current)) { \ | ||
| 443 | schedule(); \ | ||
| 444 | continue; \ | ||
| 445 | } \ | ||
| 446 | ret = -ERESTARTSYS; \ | ||
| 447 | abort_exclusive_wait(&wq, &__wait, \ | ||
| 448 | TASK_INTERRUPTIBLE, NULL); \ | ||
| 449 | break; \ | ||
| 450 | } \ | ||
| 451 | } while (0) | ||
| 452 | 418 | ||
| 453 | #define wait_event_interruptible_exclusive(wq, condition) \ | 419 | #define wait_event_interruptible_exclusive(wq, condition) \ |
| 454 | ({ \ | 420 | ({ \ |
| 455 | int __ret = 0; \ | 421 | int __ret = 0; \ |
| 456 | if (!(condition)) \ | 422 | if (!(condition)) \ |
| 457 | __wait_event_interruptible_exclusive(wq, condition, __ret);\ | 423 | __ret = __wait_event_interruptible_exclusive(wq, condition);\ |
| 458 | __ret; \ | 424 | __ret; \ |
| 459 | }) | 425 | }) |
| 460 | 426 | ||
| @@ -606,24 +572,8 @@ do { \ | |||
| 606 | ? 0 : __wait_event_interruptible_locked(wq, condition, 1, 1)) | 572 | ? 0 : __wait_event_interruptible_locked(wq, condition, 1, 1)) |
| 607 | 573 | ||
| 608 | 574 | ||
| 609 | 575 | #define __wait_event_killable(wq, condition) \ | |
| 610 | #define __wait_event_killable(wq, condition, ret) \ | 576 | ___wait_event(wq, condition, TASK_KILLABLE, 0, 0, schedule()) |
| 611 | do { \ | ||
| 612 | DEFINE_WAIT(__wait); \ | ||
| 613 | \ | ||
| 614 | for (;;) { \ | ||
| 615 | prepare_to_wait(&wq, &__wait, TASK_KILLABLE); \ | ||
| 616 | if (condition) \ | ||
| 617 | break; \ | ||
| 618 | if (!fatal_signal_pending(current)) { \ | ||
| 619 | schedule(); \ | ||
| 620 | continue; \ | ||
| 621 | } \ | ||
| 622 | ret = -ERESTARTSYS; \ | ||
| 623 | break; \ | ||
| 624 | } \ | ||
| 625 | finish_wait(&wq, &__wait); \ | ||
| 626 | } while (0) | ||
| 627 | 577 | ||
| 628 | /** | 578 | /** |
| 629 | * wait_event_killable - sleep until a condition gets true | 579 | * wait_event_killable - sleep until a condition gets true |
| @@ -644,26 +594,17 @@ do { \ | |||
| 644 | ({ \ | 594 | ({ \ |
| 645 | int __ret = 0; \ | 595 | int __ret = 0; \ |
| 646 | if (!(condition)) \ | 596 | if (!(condition)) \ |
| 647 | __wait_event_killable(wq, condition, __ret); \ | 597 | __ret = __wait_event_killable(wq, condition); \ |
| 648 | __ret; \ | 598 | __ret; \ |
| 649 | }) | 599 | }) |
| 650 | 600 | ||
| 651 | 601 | ||
| 652 | #define __wait_event_lock_irq(wq, condition, lock, cmd) \ | 602 | #define __wait_event_lock_irq(wq, condition, lock, cmd) \ |
| 653 | do { \ | 603 | (void)___wait_event(wq, condition, TASK_UNINTERRUPTIBLE, 0, 0, \ |
| 654 | DEFINE_WAIT(__wait); \ | 604 | spin_unlock_irq(&lock); \ |
| 655 | \ | 605 | cmd; \ |
| 656 | for (;;) { \ | 606 | schedule(); \ |
| 657 | prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE); \ | 607 | spin_lock_irq(&lock)) |
| 658 | if (condition) \ | ||
| 659 | break; \ | ||
| 660 | spin_unlock_irq(&lock); \ | ||
| 661 | cmd; \ | ||
| 662 | schedule(); \ | ||
| 663 | spin_lock_irq(&lock); \ | ||
| 664 | } \ | ||
| 665 | finish_wait(&wq, &__wait); \ | ||
| 666 | } while (0) | ||
| 667 | 608 | ||
| 668 | /** | 609 | /** |
| 669 | * wait_event_lock_irq_cmd - sleep until a condition gets true. The | 610 | * wait_event_lock_irq_cmd - sleep until a condition gets true. The |
| @@ -723,26 +664,12 @@ do { \ | |||
| 723 | } while (0) | 664 | } while (0) |
| 724 | 665 | ||
| 725 | 666 | ||
| 726 | #define __wait_event_interruptible_lock_irq(wq, condition, \ | 667 | #define __wait_event_interruptible_lock_irq(wq, condition, lock, cmd) \ |
| 727 | lock, ret, cmd) \ | 668 | ___wait_event(wq, condition, TASK_INTERRUPTIBLE, 0, 0, \ |
| 728 | do { \ | 669 | spin_unlock_irq(&lock); \ |
| 729 | DEFINE_WAIT(__wait); \ | 670 | cmd; \ |
| 730 | \ | 671 | schedule(); \ |
| 731 | for (;;) { \ | 672 | spin_lock_irq(&lock)) |
| 732 | prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ | ||
| 733 | if (condition) \ | ||
| 734 | break; \ | ||
| 735 | if (signal_pending(current)) { \ | ||
| 736 | ret = -ERESTARTSYS; \ | ||
| 737 | break; \ | ||
| 738 | } \ | ||
| 739 | spin_unlock_irq(&lock); \ | ||
| 740 | cmd; \ | ||
| 741 | schedule(); \ | ||
| 742 | spin_lock_irq(&lock); \ | ||
| 743 | } \ | ||
| 744 | finish_wait(&wq, &__wait); \ | ||
| 745 | } while (0) | ||
| 746 | 673 | ||
| 747 | /** | 674 | /** |
| 748 | * wait_event_interruptible_lock_irq_cmd - sleep until a condition gets true. | 675 | * wait_event_interruptible_lock_irq_cmd - sleep until a condition gets true. |
| @@ -772,10 +699,9 @@ do { \ | |||
| 772 | #define wait_event_interruptible_lock_irq_cmd(wq, condition, lock, cmd) \ | 699 | #define wait_event_interruptible_lock_irq_cmd(wq, condition, lock, cmd) \ |
| 773 | ({ \ | 700 | ({ \ |
| 774 | int __ret = 0; \ | 701 | int __ret = 0; \ |
| 775 | \ | ||
| 776 | if (!(condition)) \ | 702 | if (!(condition)) \ |
| 777 | __wait_event_interruptible_lock_irq(wq, condition, \ | 703 | __ret = __wait_event_interruptible_lock_irq(wq, \ |
| 778 | lock, __ret, cmd); \ | 704 | condition, lock, cmd); \ |
| 779 | __ret; \ | 705 | __ret; \ |
| 780 | }) | 706 | }) |
| 781 | 707 | ||
| @@ -804,39 +730,24 @@ do { \ | |||
| 804 | #define wait_event_interruptible_lock_irq(wq, condition, lock) \ | 730 | #define wait_event_interruptible_lock_irq(wq, condition, lock) \ |
| 805 | ({ \ | 731 | ({ \ |
| 806 | int __ret = 0; \ | 732 | int __ret = 0; \ |
| 807 | \ | ||
| 808 | if (!(condition)) \ | 733 | if (!(condition)) \ |
| 809 | __wait_event_interruptible_lock_irq(wq, condition, \ | 734 | __ret = __wait_event_interruptible_lock_irq(wq, \ |
| 810 | lock, __ret, ); \ | 735 | condition, lock,); \ |
| 811 | __ret; \ | 736 | __ret; \ |
| 812 | }) | 737 | }) |
| 813 | 738 | ||
| 814 | #define __wait_event_interruptible_lock_irq_timeout(wq, condition, \ | 739 | #define __wait_event_interruptible_lock_irq_timeout(wq, condition, \ |
| 815 | lock, ret) \ | 740 | lock, timeout) \ |
| 816 | do { \ | 741 | ___wait_event(wq, ___wait_cond_timeout(condition), \ |
| 817 | DEFINE_WAIT(__wait); \ | 742 | TASK_INTERRUPTIBLE, 0, timeout, \ |
| 818 | \ | 743 | spin_unlock_irq(&lock); \ |
| 819 | for (;;) { \ | 744 | __ret = schedule_timeout(__ret); \ |
| 820 | prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ | 745 | spin_lock_irq(&lock)); |
| 821 | if (condition) \ | ||
| 822 | break; \ | ||
| 823 | if (signal_pending(current)) { \ | ||
| 824 | ret = -ERESTARTSYS; \ | ||
| 825 | break; \ | ||
| 826 | } \ | ||
| 827 | spin_unlock_irq(&lock); \ | ||
| 828 | ret = schedule_timeout(ret); \ | ||
| 829 | spin_lock_irq(&lock); \ | ||
| 830 | if (!ret) \ | ||
| 831 | break; \ | ||
| 832 | } \ | ||
| 833 | finish_wait(&wq, &__wait); \ | ||
| 834 | } while (0) | ||
| 835 | 746 | ||
| 836 | /** | 747 | /** |
| 837 | * wait_event_interruptible_lock_irq_timeout - sleep until a condition gets true or a timeout elapses. | 748 | * wait_event_interruptible_lock_irq_timeout - sleep until a condition gets |
| 838 | * The condition is checked under the lock. This is expected | 749 | * true or a timeout elapses. The condition is checked under |
| 839 | * to be called with the lock taken. | 750 | * the lock. This is expected to be called with the lock taken. |
| 840 | * @wq: the waitqueue to wait on | 751 | * @wq: the waitqueue to wait on |
| 841 | * @condition: a C expression for the event to wait for | 752 | * @condition: a C expression for the event to wait for |
| 842 | * @lock: a locked spinlock_t, which will be released before schedule() | 753 | * @lock: a locked spinlock_t, which will be released before schedule() |
| @@ -860,11 +771,10 @@ do { \ | |||
| 860 | #define wait_event_interruptible_lock_irq_timeout(wq, condition, lock, \ | 771 | #define wait_event_interruptible_lock_irq_timeout(wq, condition, lock, \ |
| 861 | timeout) \ | 772 | timeout) \ |
| 862 | ({ \ | 773 | ({ \ |
| 863 | int __ret = timeout; \ | 774 | long __ret = timeout; \ |
| 864 | \ | 775 | if (!___wait_cond_timeout(condition)) \ |
| 865 | if (!(condition)) \ | 776 | __ret = __wait_event_interruptible_lock_irq_timeout( \ |
| 866 | __wait_event_interruptible_lock_irq_timeout( \ | 777 | wq, condition, lock, timeout); \ |
| 867 | wq, condition, lock, __ret); \ | ||
| 868 | __ret; \ | 778 | __ret; \ |
| 869 | }) | 779 | }) |
| 870 | 780 | ||
| @@ -875,20 +785,18 @@ do { \ | |||
| 875 | * We plan to remove these interfaces. | 785 | * We plan to remove these interfaces. |
| 876 | */ | 786 | */ |
| 877 | extern void sleep_on(wait_queue_head_t *q); | 787 | extern void sleep_on(wait_queue_head_t *q); |
| 878 | extern long sleep_on_timeout(wait_queue_head_t *q, | 788 | extern long sleep_on_timeout(wait_queue_head_t *q, signed long timeout); |
| 879 | signed long timeout); | ||
| 880 | extern void interruptible_sleep_on(wait_queue_head_t *q); | 789 | extern void interruptible_sleep_on(wait_queue_head_t *q); |
| 881 | extern long interruptible_sleep_on_timeout(wait_queue_head_t *q, | 790 | extern long interruptible_sleep_on_timeout(wait_queue_head_t *q, signed long timeout); |
| 882 | signed long timeout); | ||
| 883 | 791 | ||
| 884 | /* | 792 | /* |
| 885 | * Waitqueues which are removed from the waitqueue_head at wakeup time | 793 | * Waitqueues which are removed from the waitqueue_head at wakeup time |
| 886 | */ | 794 | */ |
| 887 | void prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state); | 795 | void prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state); |
| 888 | void prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state); | 796 | void prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state); |
| 797 | long prepare_to_wait_event(wait_queue_head_t *q, wait_queue_t *wait, int state); | ||
| 889 | void finish_wait(wait_queue_head_t *q, wait_queue_t *wait); | 798 | void finish_wait(wait_queue_head_t *q, wait_queue_t *wait); |
| 890 | void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait, | 799 | void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait, unsigned int mode, void *key); |
| 891 | unsigned int mode, void *key); | ||
| 892 | int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key); | 800 | int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key); |
| 893 | int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key); | 801 | int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key); |
| 894 | 802 | ||
| @@ -934,8 +842,8 @@ int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key); | |||
| 934 | * One uses wait_on_bit() where one is waiting for the bit to clear, | 842 | * One uses wait_on_bit() where one is waiting for the bit to clear, |
| 935 | * but has no intention of setting it. | 843 | * but has no intention of setting it. |
| 936 | */ | 844 | */ |
| 937 | static inline int wait_on_bit(void *word, int bit, | 845 | static inline int |
| 938 | int (*action)(void *), unsigned mode) | 846 | wait_on_bit(void *word, int bit, int (*action)(void *), unsigned mode) |
| 939 | { | 847 | { |
| 940 | if (!test_bit(bit, word)) | 848 | if (!test_bit(bit, word)) |
| 941 | return 0; | 849 | return 0; |
| @@ -958,8 +866,8 @@ static inline int wait_on_bit(void *word, int bit, | |||
| 958 | * One uses wait_on_bit_lock() where one is waiting for the bit to | 866 | * One uses wait_on_bit_lock() where one is waiting for the bit to |
| 959 | * clear with the intention of setting it, and when done, clearing it. | 867 | * clear with the intention of setting it, and when done, clearing it. |
| 960 | */ | 868 | */ |
| 961 | static inline int wait_on_bit_lock(void *word, int bit, | 869 | static inline int |
| 962 | int (*action)(void *), unsigned mode) | 870 | wait_on_bit_lock(void *word, int bit, int (*action)(void *), unsigned mode) |
| 963 | { | 871 | { |
| 964 | if (!test_and_set_bit(bit, word)) | 872 | if (!test_and_set_bit(bit, word)) |
| 965 | return 0; | 873 | return 0; |
| @@ -983,5 +891,5 @@ int wait_on_atomic_t(atomic_t *val, int (*action)(atomic_t *), unsigned mode) | |||
| 983 | return 0; | 891 | return 0; |
| 984 | return out_of_line_wait_on_atomic_t(val, action, mode); | 892 | return out_of_line_wait_on_atomic_t(val, action, mode); |
| 985 | } | 893 | } |
| 986 | 894 | ||
| 987 | #endif | 895 | #endif /* _LINUX_WAIT_H */ |
