diff options
| author | David S. Miller <davem@davemloft.net> | 2018-04-21 16:31:52 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2018-04-21 16:32:48 -0400 |
| commit | e0ada51db907ed2db5d46ad7ff86a8b5df68e59b (patch) | |
| tree | 858966cee69ad8a50e59c4e02dcbde6ba2916151 /include/linux | |
| parent | 0638eb573cde5888c0886c7f35da604e5db209a6 (diff) | |
| parent | 83beed7b2b26f232d782127792dd0cd4362fdc41 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts were simple overlapping changes in microchip
driver.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
32 files changed, 424 insertions, 124 deletions
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index 09da0f124699..f6be4b0b6c18 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
| @@ -28,6 +28,7 @@ void bdi_put(struct backing_dev_info *bdi); | |||
| 28 | 28 | ||
| 29 | __printf(2, 3) | 29 | __printf(2, 3) |
| 30 | int bdi_register(struct backing_dev_info *bdi, const char *fmt, ...); | 30 | int bdi_register(struct backing_dev_info *bdi, const char *fmt, ...); |
| 31 | __printf(2, 0) | ||
| 31 | int bdi_register_va(struct backing_dev_info *bdi, const char *fmt, | 32 | int bdi_register_va(struct backing_dev_info *bdi, const char *fmt, |
| 32 | va_list args); | 33 | va_list args); |
| 33 | int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner); | 34 | int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner); |
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h index 8efcf49796a3..e3986f4b3461 100644 --- a/include/linux/blk-mq.h +++ b/include/linux/blk-mq.h | |||
| @@ -183,7 +183,6 @@ enum { | |||
| 183 | BLK_MQ_S_STOPPED = 0, | 183 | BLK_MQ_S_STOPPED = 0, |
| 184 | BLK_MQ_S_TAG_ACTIVE = 1, | 184 | BLK_MQ_S_TAG_ACTIVE = 1, |
| 185 | BLK_MQ_S_SCHED_RESTART = 2, | 185 | BLK_MQ_S_SCHED_RESTART = 2, |
| 186 | BLK_MQ_S_START_ON_RUN = 3, | ||
| 187 | 186 | ||
| 188 | BLK_MQ_MAX_DEPTH = 10240, | 187 | BLK_MQ_MAX_DEPTH = 10240, |
| 189 | 188 | ||
| @@ -270,7 +269,6 @@ void blk_mq_unquiesce_queue(struct request_queue *q); | |||
| 270 | void blk_mq_delay_run_hw_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs); | 269 | void blk_mq_delay_run_hw_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs); |
| 271 | bool blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async); | 270 | bool blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async); |
| 272 | void blk_mq_run_hw_queues(struct request_queue *q, bool async); | 271 | void blk_mq_run_hw_queues(struct request_queue *q, bool async); |
| 273 | void blk_mq_delay_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs); | ||
| 274 | void blk_mq_tagset_busy_iter(struct blk_mq_tag_set *tagset, | 272 | void blk_mq_tagset_busy_iter(struct blk_mq_tag_set *tagset, |
| 275 | busy_tag_iter_fn *fn, void *priv); | 273 | busy_tag_iter_fn *fn, void *priv); |
| 276 | void blk_mq_freeze_queue(struct request_queue *q); | 274 | void blk_mq_freeze_queue(struct request_queue *q); |
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index f711be6e8c44..210a890008f9 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
| @@ -399,6 +399,7 @@ struct clk_divider { | |||
| 399 | spinlock_t *lock; | 399 | spinlock_t *lock; |
| 400 | }; | 400 | }; |
| 401 | 401 | ||
| 402 | #define clk_div_mask(width) ((1 << (width)) - 1) | ||
| 402 | #define to_clk_divider(_hw) container_of(_hw, struct clk_divider, hw) | 403 | #define to_clk_divider(_hw) container_of(_hw, struct clk_divider, hw) |
| 403 | 404 | ||
| 404 | #define CLK_DIVIDER_ONE_BASED BIT(0) | 405 | #define CLK_DIVIDER_ONE_BASED BIT(0) |
| @@ -419,6 +420,10 @@ long divider_round_rate_parent(struct clk_hw *hw, struct clk_hw *parent, | |||
| 419 | unsigned long rate, unsigned long *prate, | 420 | unsigned long rate, unsigned long *prate, |
| 420 | const struct clk_div_table *table, | 421 | const struct clk_div_table *table, |
| 421 | u8 width, unsigned long flags); | 422 | u8 width, unsigned long flags); |
| 423 | long divider_ro_round_rate_parent(struct clk_hw *hw, struct clk_hw *parent, | ||
| 424 | unsigned long rate, unsigned long *prate, | ||
| 425 | const struct clk_div_table *table, u8 width, | ||
| 426 | unsigned long flags, unsigned int val); | ||
| 422 | int divider_get_val(unsigned long rate, unsigned long parent_rate, | 427 | int divider_get_val(unsigned long rate, unsigned long parent_rate, |
| 423 | const struct clk_div_table *table, u8 width, | 428 | const struct clk_div_table *table, u8 width, |
| 424 | unsigned long flags); | 429 | unsigned long flags); |
| @@ -449,8 +454,9 @@ void clk_hw_unregister_divider(struct clk_hw *hw); | |||
| 449 | * | 454 | * |
| 450 | * @hw: handle between common and hardware-specific interfaces | 455 | * @hw: handle between common and hardware-specific interfaces |
| 451 | * @reg: register controlling multiplexer | 456 | * @reg: register controlling multiplexer |
| 457 | * @table: array of register values corresponding to the parent index | ||
| 452 | * @shift: shift to multiplexer bit field | 458 | * @shift: shift to multiplexer bit field |
| 453 | * @width: width of mutliplexer bit field | 459 | * @mask: mask of mutliplexer bit field |
| 454 | * @flags: hardware-specific flags | 460 | * @flags: hardware-specific flags |
| 455 | * @lock: register lock | 461 | * @lock: register lock |
| 456 | * | 462 | * |
| @@ -510,6 +516,10 @@ struct clk_hw *clk_hw_register_mux_table(struct device *dev, const char *name, | |||
| 510 | void __iomem *reg, u8 shift, u32 mask, | 516 | void __iomem *reg, u8 shift, u32 mask, |
| 511 | u8 clk_mux_flags, u32 *table, spinlock_t *lock); | 517 | u8 clk_mux_flags, u32 *table, spinlock_t *lock); |
| 512 | 518 | ||
| 519 | int clk_mux_val_to_index(struct clk_hw *hw, u32 *table, unsigned int flags, | ||
| 520 | unsigned int val); | ||
| 521 | unsigned int clk_mux_index_to_val(u32 *table, unsigned int flags, u8 index); | ||
| 522 | |||
| 513 | void clk_unregister_mux(struct clk *clk); | 523 | void clk_unregister_mux(struct clk *clk); |
| 514 | void clk_hw_unregister_mux(struct clk_hw *hw); | 524 | void clk_hw_unregister_mux(struct clk_hw *hw); |
| 515 | 525 | ||
| @@ -774,6 +784,17 @@ static inline long divider_round_rate(struct clk_hw *hw, unsigned long rate, | |||
| 774 | rate, prate, table, width, flags); | 784 | rate, prate, table, width, flags); |
| 775 | } | 785 | } |
| 776 | 786 | ||
| 787 | static inline long divider_ro_round_rate(struct clk_hw *hw, unsigned long rate, | ||
| 788 | unsigned long *prate, | ||
| 789 | const struct clk_div_table *table, | ||
| 790 | u8 width, unsigned long flags, | ||
| 791 | unsigned int val) | ||
| 792 | { | ||
| 793 | return divider_ro_round_rate_parent(hw, clk_hw_get_parent(hw), | ||
| 794 | rate, prate, table, width, flags, | ||
| 795 | val); | ||
| 796 | } | ||
| 797 | |||
| 777 | /* | 798 | /* |
| 778 | * FIXME clock api without lock protection | 799 | * FIXME clock api without lock protection |
| 779 | */ | 800 | */ |
diff --git a/include/linux/clk.h b/include/linux/clk.h index 4c4ef9f34db3..0dbd0885b2c2 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h | |||
| @@ -209,7 +209,7 @@ static inline int clk_prepare(struct clk *clk) | |||
| 209 | return 0; | 209 | return 0; |
| 210 | } | 210 | } |
| 211 | 211 | ||
| 212 | static inline int clk_bulk_prepare(int num_clks, struct clk_bulk_data *clks) | 212 | static inline int __must_check clk_bulk_prepare(int num_clks, struct clk_bulk_data *clks) |
| 213 | { | 213 | { |
| 214 | might_sleep(); | 214 | might_sleep(); |
| 215 | return 0; | 215 | return 0; |
| @@ -603,8 +603,8 @@ static inline struct clk *clk_get(struct device *dev, const char *id) | |||
| 603 | return NULL; | 603 | return NULL; |
| 604 | } | 604 | } |
| 605 | 605 | ||
| 606 | static inline int clk_bulk_get(struct device *dev, int num_clks, | 606 | static inline int __must_check clk_bulk_get(struct device *dev, int num_clks, |
| 607 | struct clk_bulk_data *clks) | 607 | struct clk_bulk_data *clks) |
| 608 | { | 608 | { |
| 609 | return 0; | 609 | return 0; |
| 610 | } | 610 | } |
| @@ -614,8 +614,8 @@ static inline struct clk *devm_clk_get(struct device *dev, const char *id) | |||
| 614 | return NULL; | 614 | return NULL; |
| 615 | } | 615 | } |
| 616 | 616 | ||
| 617 | static inline int devm_clk_bulk_get(struct device *dev, int num_clks, | 617 | static inline int __must_check devm_clk_bulk_get(struct device *dev, int num_clks, |
| 618 | struct clk_bulk_data *clks) | 618 | struct clk_bulk_data *clks) |
| 619 | { | 619 | { |
| 620 | return 0; | 620 | return 0; |
| 621 | } | 621 | } |
| @@ -645,7 +645,7 @@ static inline int clk_enable(struct clk *clk) | |||
| 645 | return 0; | 645 | return 0; |
| 646 | } | 646 | } |
| 647 | 647 | ||
| 648 | static inline int clk_bulk_enable(int num_clks, struct clk_bulk_data *clks) | 648 | static inline int __must_check clk_bulk_enable(int num_clks, struct clk_bulk_data *clks) |
| 649 | { | 649 | { |
| 650 | return 0; | 650 | return 0; |
| 651 | } | 651 | } |
| @@ -719,8 +719,8 @@ static inline void clk_disable_unprepare(struct clk *clk) | |||
| 719 | clk_unprepare(clk); | 719 | clk_unprepare(clk); |
| 720 | } | 720 | } |
| 721 | 721 | ||
| 722 | static inline int clk_bulk_prepare_enable(int num_clks, | 722 | static inline int __must_check clk_bulk_prepare_enable(int num_clks, |
| 723 | struct clk_bulk_data *clks) | 723 | struct clk_bulk_data *clks) |
| 724 | { | 724 | { |
| 725 | int ret; | 725 | int ret; |
| 726 | 726 | ||
diff --git a/include/linux/clk/tegra.h b/include/linux/clk/tegra.h index d23c9cf26993..afb9edfa5d58 100644 --- a/include/linux/clk/tegra.h +++ b/include/linux/clk/tegra.h | |||
| @@ -128,5 +128,6 @@ extern void tegra210_sata_pll_hw_sequence_start(void); | |||
| 128 | extern void tegra210_set_sata_pll_seq_sw(bool state); | 128 | extern void tegra210_set_sata_pll_seq_sw(bool state); |
| 129 | extern void tegra210_put_utmipll_in_iddq(void); | 129 | extern void tegra210_put_utmipll_in_iddq(void); |
| 130 | extern void tegra210_put_utmipll_out_iddq(void); | 130 | extern void tegra210_put_utmipll_out_iddq(void); |
| 131 | extern int tegra210_clk_handle_mbist_war(unsigned int id); | ||
| 131 | 132 | ||
| 132 | #endif /* __LINUX_CLK_TEGRA_H_ */ | 133 | #endif /* __LINUX_CLK_TEGRA_H_ */ |
diff --git a/include/linux/clk/ti.h b/include/linux/clk/ti.h index 7e3bceee3489..a8faa38b1ed6 100644 --- a/include/linux/clk/ti.h +++ b/include/linux/clk/ti.h | |||
| @@ -212,6 +212,7 @@ enum { | |||
| 212 | * struct ti_clk_ll_ops - low-level ops for clocks | 212 | * struct ti_clk_ll_ops - low-level ops for clocks |
| 213 | * @clk_readl: pointer to register read function | 213 | * @clk_readl: pointer to register read function |
| 214 | * @clk_writel: pointer to register write function | 214 | * @clk_writel: pointer to register write function |
| 215 | * @clk_rmw: pointer to register read-modify-write function | ||
| 215 | * @clkdm_clk_enable: pointer to clockdomain enable function | 216 | * @clkdm_clk_enable: pointer to clockdomain enable function |
| 216 | * @clkdm_clk_disable: pointer to clockdomain disable function | 217 | * @clkdm_clk_disable: pointer to clockdomain disable function |
| 217 | * @clkdm_lookup: pointer to clockdomain lookup function | 218 | * @clkdm_lookup: pointer to clockdomain lookup function |
| @@ -227,6 +228,7 @@ enum { | |||
| 227 | struct ti_clk_ll_ops { | 228 | struct ti_clk_ll_ops { |
| 228 | u32 (*clk_readl)(const struct clk_omap_reg *reg); | 229 | u32 (*clk_readl)(const struct clk_omap_reg *reg); |
| 229 | void (*clk_writel)(u32 val, const struct clk_omap_reg *reg); | 230 | void (*clk_writel)(u32 val, const struct clk_omap_reg *reg); |
| 231 | void (*clk_rmw)(u32 val, u32 mask, const struct clk_omap_reg *reg); | ||
| 230 | int (*clkdm_clk_enable)(struct clockdomain *clkdm, struct clk *clk); | 232 | int (*clkdm_clk_enable)(struct clockdomain *clkdm, struct clk *clk); |
| 231 | int (*clkdm_clk_disable)(struct clockdomain *clkdm, | 233 | int (*clkdm_clk_disable)(struct clockdomain *clkdm, |
| 232 | struct clk *clk); | 234 | struct clk *clk); |
diff --git a/include/linux/compat.h b/include/linux/compat.h index f188eab10570..081281ad5772 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
| @@ -24,6 +24,17 @@ | |||
| 24 | #include <asm/siginfo.h> | 24 | #include <asm/siginfo.h> |
| 25 | #include <asm/signal.h> | 25 | #include <asm/signal.h> |
| 26 | 26 | ||
| 27 | #ifdef CONFIG_ARCH_HAS_SYSCALL_WRAPPER | ||
| 28 | /* | ||
| 29 | * It may be useful for an architecture to override the definitions of the | ||
| 30 | * COMPAT_SYSCALL_DEFINE0 and COMPAT_SYSCALL_DEFINEx() macros, in particular | ||
| 31 | * to use a different calling convention for syscalls. To allow for that, | ||
| 32 | + the prototypes for the compat_sys_*() functions below will *not* be included | ||
| 33 | * if CONFIG_ARCH_HAS_SYSCALL_WRAPPER is enabled. | ||
| 34 | */ | ||
| 35 | #include <asm/syscall_wrapper.h> | ||
| 36 | #endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */ | ||
| 37 | |||
| 27 | #ifndef COMPAT_USE_64BIT_TIME | 38 | #ifndef COMPAT_USE_64BIT_TIME |
| 28 | #define COMPAT_USE_64BIT_TIME 0 | 39 | #define COMPAT_USE_64BIT_TIME 0 |
| 29 | #endif | 40 | #endif |
| @@ -32,10 +43,12 @@ | |||
| 32 | #define __SC_DELOUSE(t,v) ((__force t)(unsigned long)(v)) | 43 | #define __SC_DELOUSE(t,v) ((__force t)(unsigned long)(v)) |
| 33 | #endif | 44 | #endif |
| 34 | 45 | ||
| 46 | #ifndef COMPAT_SYSCALL_DEFINE0 | ||
| 35 | #define COMPAT_SYSCALL_DEFINE0(name) \ | 47 | #define COMPAT_SYSCALL_DEFINE0(name) \ |
| 36 | asmlinkage long compat_sys_##name(void); \ | 48 | asmlinkage long compat_sys_##name(void); \ |
| 37 | ALLOW_ERROR_INJECTION(compat_sys_##name, ERRNO); \ | 49 | ALLOW_ERROR_INJECTION(compat_sys_##name, ERRNO); \ |
| 38 | asmlinkage long compat_sys_##name(void) | 50 | asmlinkage long compat_sys_##name(void) |
| 51 | #endif /* COMPAT_SYSCALL_DEFINE0 */ | ||
| 39 | 52 | ||
| 40 | #define COMPAT_SYSCALL_DEFINE1(name, ...) \ | 53 | #define COMPAT_SYSCALL_DEFINE1(name, ...) \ |
| 41 | COMPAT_SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) | 54 | COMPAT_SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) |
| @@ -50,18 +63,25 @@ | |||
| 50 | #define COMPAT_SYSCALL_DEFINE6(name, ...) \ | 63 | #define COMPAT_SYSCALL_DEFINE6(name, ...) \ |
| 51 | COMPAT_SYSCALL_DEFINEx(6, _##name, __VA_ARGS__) | 64 | COMPAT_SYSCALL_DEFINEx(6, _##name, __VA_ARGS__) |
| 52 | 65 | ||
| 53 | #define COMPAT_SYSCALL_DEFINEx(x, name, ...) \ | 66 | /* |
| 54 | asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\ | 67 | * The asmlinkage stub is aliased to a function named __se_compat_sys_*() which |
| 55 | asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))\ | 68 | * sign-extends 32-bit ints to longs whenever needed. The actual work is |
| 56 | __attribute__((alias(__stringify(compat_SyS##name)))); \ | 69 | * done within __do_compat_sys_*(). |
| 57 | ALLOW_ERROR_INJECTION(compat_sys##name, ERRNO); \ | 70 | */ |
| 58 | static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__));\ | 71 | #ifndef COMPAT_SYSCALL_DEFINEx |
| 59 | asmlinkage long compat_SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__));\ | 72 | #define COMPAT_SYSCALL_DEFINEx(x, name, ...) \ |
| 60 | asmlinkage long compat_SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__))\ | 73 | asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \ |
| 61 | { \ | 74 | asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \ |
| 62 | return C_SYSC##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__)); \ | 75 | __attribute__((alias(__stringify(__se_compat_sys##name)))); \ |
| 63 | } \ | 76 | ALLOW_ERROR_INJECTION(compat_sys##name, ERRNO); \ |
| 64 | static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)) | 77 | static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\ |
| 78 | asmlinkage long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ | ||
| 79 | asmlinkage long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ | ||
| 80 | { \ | ||
| 81 | return __do_compat_sys##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__));\ | ||
| 82 | } \ | ||
| 83 | static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) | ||
| 84 | #endif /* COMPAT_SYSCALL_DEFINEx */ | ||
| 65 | 85 | ||
| 66 | #ifndef compat_user_stack_pointer | 86 | #ifndef compat_user_stack_pointer |
| 67 | #define compat_user_stack_pointer() current_user_stack_pointer() | 87 | #define compat_user_stack_pointer() current_user_stack_pointer() |
| @@ -519,7 +539,12 @@ int __compat_save_altstack(compat_stack_t __user *, unsigned long); | |||
| 519 | * Please note that these prototypes here are only provided for information | 539 | * Please note that these prototypes here are only provided for information |
| 520 | * purposes, for static analysis, and for linking from the syscall table. | 540 | * purposes, for static analysis, and for linking from the syscall table. |
| 521 | * These functions should not be called elsewhere from kernel code. | 541 | * These functions should not be called elsewhere from kernel code. |
| 542 | * | ||
| 543 | * As the syscall calling convention may be different from the default | ||
| 544 | * for architectures overriding the syscall calling convention, do not | ||
| 545 | * include the prototypes if CONFIG_ARCH_HAS_SYSCALL_WRAPPER is enabled. | ||
| 522 | */ | 546 | */ |
| 547 | #ifndef CONFIG_ARCH_HAS_SYSCALL_WRAPPER | ||
| 523 | asmlinkage long compat_sys_io_setup(unsigned nr_reqs, u32 __user *ctx32p); | 548 | asmlinkage long compat_sys_io_setup(unsigned nr_reqs, u32 __user *ctx32p); |
| 524 | asmlinkage long compat_sys_io_submit(compat_aio_context_t ctx_id, int nr, | 549 | asmlinkage long compat_sys_io_submit(compat_aio_context_t ctx_id, int nr, |
| 525 | u32 __user *iocb); | 550 | u32 __user *iocb); |
| @@ -957,6 +982,8 @@ asmlinkage long compat_sys_stime(compat_time_t __user *tptr); | |||
| 957 | /* obsolete: net/socket.c */ | 982 | /* obsolete: net/socket.c */ |
| 958 | asmlinkage long compat_sys_socketcall(int call, u32 __user *args); | 983 | asmlinkage long compat_sys_socketcall(int call, u32 __user *args); |
| 959 | 984 | ||
| 985 | #endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */ | ||
| 986 | |||
| 960 | 987 | ||
| 961 | /* | 988 | /* |
| 962 | * For most but not all architectures, "am I in a compat syscall?" and | 989 | * For most but not all architectures, "am I in a compat syscall?" and |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 92efaf1f8977..760d8da1b6c7 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -1667,7 +1667,7 @@ typedef int (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64, | |||
| 1667 | unsigned); | 1667 | unsigned); |
| 1668 | 1668 | ||
| 1669 | struct dir_context { | 1669 | struct dir_context { |
| 1670 | const filldir_t actor; | 1670 | filldir_t actor; |
| 1671 | loff_t pos; | 1671 | loff_t pos; |
| 1672 | }; | 1672 | }; |
| 1673 | 1673 | ||
| @@ -2445,6 +2445,7 @@ extern int sync_blockdev(struct block_device *bdev); | |||
| 2445 | extern void kill_bdev(struct block_device *); | 2445 | extern void kill_bdev(struct block_device *); |
| 2446 | extern struct super_block *freeze_bdev(struct block_device *); | 2446 | extern struct super_block *freeze_bdev(struct block_device *); |
| 2447 | extern void emergency_thaw_all(void); | 2447 | extern void emergency_thaw_all(void); |
| 2448 | extern void emergency_thaw_bdev(struct super_block *sb); | ||
| 2448 | extern int thaw_bdev(struct block_device *bdev, struct super_block *sb); | 2449 | extern int thaw_bdev(struct block_device *bdev, struct super_block *sb); |
| 2449 | extern int fsync_bdev(struct block_device *); | 2450 | extern int fsync_bdev(struct block_device *); |
| 2450 | 2451 | ||
| @@ -2470,6 +2471,11 @@ static inline int thaw_bdev(struct block_device *bdev, struct super_block *sb) | |||
| 2470 | return 0; | 2471 | return 0; |
| 2471 | } | 2472 | } |
| 2472 | 2473 | ||
| 2474 | static inline int emergency_thaw_bdev(struct super_block *sb) | ||
| 2475 | { | ||
| 2476 | return 0; | ||
| 2477 | } | ||
| 2478 | |||
| 2473 | static inline void iterate_bdevs(void (*f)(struct block_device *, void *), void *arg) | 2479 | static inline void iterate_bdevs(void (*f)(struct block_device *, void *), void *arg) |
| 2474 | { | 2480 | { |
| 2475 | } | 2481 | } |
diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h index 9f1edb92c97e..e0c95c9f1e29 100644 --- a/include/linux/fsnotify_backend.h +++ b/include/linux/fsnotify_backend.h | |||
| @@ -248,7 +248,7 @@ struct fsnotify_mark { | |||
| 248 | /* Group this mark is for. Set on mark creation, stable until last ref | 248 | /* Group this mark is for. Set on mark creation, stable until last ref |
| 249 | * is dropped */ | 249 | * is dropped */ |
| 250 | struct fsnotify_group *group; | 250 | struct fsnotify_group *group; |
| 251 | /* List of marks by group->i_fsnotify_marks. Also reused for queueing | 251 | /* List of marks by group->marks_list. Also reused for queueing |
| 252 | * mark into destroy_list when it's waiting for the end of SRCU period | 252 | * mark into destroy_list when it's waiting for the end of SRCU period |
| 253 | * before it can be freed. [group->mark_mutex] */ | 253 | * before it can be freed. [group->mark_mutex] */ |
| 254 | struct list_head g_list; | 254 | struct list_head g_list; |
diff --git a/include/linux/hid.h b/include/linux/hid.h index 8da3e1f48195..26240a22978a 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
| @@ -516,6 +516,12 @@ enum hid_type { | |||
| 516 | HID_TYPE_USBNONE | 516 | HID_TYPE_USBNONE |
| 517 | }; | 517 | }; |
| 518 | 518 | ||
| 519 | enum hid_battery_status { | ||
| 520 | HID_BATTERY_UNKNOWN = 0, | ||
| 521 | HID_BATTERY_QUERIED, /* Kernel explicitly queried battery strength */ | ||
| 522 | HID_BATTERY_REPORTED, /* Device sent unsolicited battery strength report */ | ||
| 523 | }; | ||
| 524 | |||
| 519 | struct hid_driver; | 525 | struct hid_driver; |
| 520 | struct hid_ll_driver; | 526 | struct hid_ll_driver; |
| 521 | 527 | ||
| @@ -558,7 +564,8 @@ struct hid_device { /* device report descriptor */ | |||
| 558 | __s32 battery_max; | 564 | __s32 battery_max; |
| 559 | __s32 battery_report_type; | 565 | __s32 battery_report_type; |
| 560 | __s32 battery_report_id; | 566 | __s32 battery_report_id; |
| 561 | bool battery_reported; | 567 | enum hid_battery_status battery_status; |
| 568 | bool battery_avoid_query; | ||
| 562 | #endif | 569 | #endif |
| 563 | 570 | ||
| 564 | unsigned int status; /* see STAT flags above */ | 571 | unsigned int status; /* see STAT flags above */ |
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index d11f41d5269f..78a5a90b4267 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
| @@ -663,7 +663,7 @@ static inline bool skb_vlan_tagged(const struct sk_buff *skb) | |||
| 663 | * Returns true if the skb is tagged with multiple vlan headers, regardless | 663 | * Returns true if the skb is tagged with multiple vlan headers, regardless |
| 664 | * of whether it is hardware accelerated or not. | 664 | * of whether it is hardware accelerated or not. |
| 665 | */ | 665 | */ |
| 666 | static inline bool skb_vlan_tagged_multi(const struct sk_buff *skb) | 666 | static inline bool skb_vlan_tagged_multi(struct sk_buff *skb) |
| 667 | { | 667 | { |
| 668 | __be16 protocol = skb->protocol; | 668 | __be16 protocol = skb->protocol; |
| 669 | 669 | ||
| @@ -673,6 +673,9 @@ static inline bool skb_vlan_tagged_multi(const struct sk_buff *skb) | |||
| 673 | if (likely(!eth_type_vlan(protocol))) | 673 | if (likely(!eth_type_vlan(protocol))) |
| 674 | return false; | 674 | return false; |
| 675 | 675 | ||
| 676 | if (unlikely(!pskb_may_pull(skb, VLAN_ETH_HLEN))) | ||
| 677 | return false; | ||
| 678 | |||
| 676 | veh = (struct vlan_ethhdr *)skb->data; | 679 | veh = (struct vlan_ethhdr *)skb->data; |
| 677 | protocol = veh->h_vlan_encapsulated_proto; | 680 | protocol = veh->h_vlan_encapsulated_proto; |
| 678 | } | 681 | } |
| @@ -690,7 +693,7 @@ static inline bool skb_vlan_tagged_multi(const struct sk_buff *skb) | |||
| 690 | * | 693 | * |
| 691 | * Returns features without unsafe ones if the skb has multiple tags. | 694 | * Returns features without unsafe ones if the skb has multiple tags. |
| 692 | */ | 695 | */ |
| 693 | static inline netdev_features_t vlan_features_check(const struct sk_buff *skb, | 696 | static inline netdev_features_t vlan_features_check(struct sk_buff *skb, |
| 694 | netdev_features_t features) | 697 | netdev_features_t features) |
| 695 | { | 698 | { |
| 696 | if (skb_vlan_tagged_multi(skb)) { | 699 | if (skb_vlan_tagged_multi(skb)) { |
diff --git a/include/linux/kexec.h b/include/linux/kexec.h index 0ebcbeb21056..9e4e638fb505 100644 --- a/include/linux/kexec.h +++ b/include/linux/kexec.h | |||
| @@ -99,21 +99,25 @@ struct compat_kexec_segment { | |||
| 99 | 99 | ||
| 100 | #ifdef CONFIG_KEXEC_FILE | 100 | #ifdef CONFIG_KEXEC_FILE |
| 101 | struct purgatory_info { | 101 | struct purgatory_info { |
| 102 | /* Pointer to elf header of read only purgatory */ | 102 | /* |
| 103 | Elf_Ehdr *ehdr; | 103 | * Pointer to elf header at the beginning of kexec_purgatory. |
| 104 | 104 | * Note: kexec_purgatory is read only | |
| 105 | /* Pointer to purgatory sechdrs which are modifiable */ | 105 | */ |
| 106 | const Elf_Ehdr *ehdr; | ||
| 107 | /* | ||
| 108 | * Temporary, modifiable buffer for sechdrs used for relocation. | ||
| 109 | * This memory can be freed post image load. | ||
| 110 | */ | ||
| 106 | Elf_Shdr *sechdrs; | 111 | Elf_Shdr *sechdrs; |
| 107 | /* | 112 | /* |
| 108 | * Temporary buffer location where purgatory is loaded and relocated | 113 | * Temporary, modifiable buffer for stripped purgatory used for |
| 109 | * This memory can be freed post image load | 114 | * relocation. This memory can be freed post image load. |
| 110 | */ | 115 | */ |
| 111 | void *purgatory_buf; | 116 | void *purgatory_buf; |
| 112 | |||
| 113 | /* Address where purgatory is finally loaded and is executed from */ | ||
| 114 | unsigned long purgatory_load_addr; | ||
| 115 | }; | 117 | }; |
| 116 | 118 | ||
| 119 | struct kimage; | ||
| 120 | |||
| 117 | typedef int (kexec_probe_t)(const char *kernel_buf, unsigned long kernel_size); | 121 | typedef int (kexec_probe_t)(const char *kernel_buf, unsigned long kernel_size); |
| 118 | typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf, | 122 | typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf, |
| 119 | unsigned long kernel_len, char *initrd, | 123 | unsigned long kernel_len, char *initrd, |
| @@ -135,6 +139,11 @@ struct kexec_file_ops { | |||
| 135 | #endif | 139 | #endif |
| 136 | }; | 140 | }; |
| 137 | 141 | ||
| 142 | extern const struct kexec_file_ops * const kexec_file_loaders[]; | ||
| 143 | |||
| 144 | int kexec_image_probe_default(struct kimage *image, void *buf, | ||
| 145 | unsigned long buf_len); | ||
| 146 | |||
| 138 | /** | 147 | /** |
| 139 | * struct kexec_buf - parameters for finding a place for a buffer in memory | 148 | * struct kexec_buf - parameters for finding a place for a buffer in memory |
| 140 | * @image: kexec image in which memory to search. | 149 | * @image: kexec image in which memory to search. |
| @@ -159,10 +168,44 @@ struct kexec_buf { | |||
| 159 | bool top_down; | 168 | bool top_down; |
| 160 | }; | 169 | }; |
| 161 | 170 | ||
| 171 | int kexec_load_purgatory(struct kimage *image, struct kexec_buf *kbuf); | ||
| 172 | int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name, | ||
| 173 | void *buf, unsigned int size, | ||
| 174 | bool get_value); | ||
| 175 | void *kexec_purgatory_get_symbol_addr(struct kimage *image, const char *name); | ||
| 176 | |||
| 177 | int __weak arch_kexec_apply_relocations_add(struct purgatory_info *pi, | ||
| 178 | Elf_Shdr *section, | ||
| 179 | const Elf_Shdr *relsec, | ||
| 180 | const Elf_Shdr *symtab); | ||
| 181 | int __weak arch_kexec_apply_relocations(struct purgatory_info *pi, | ||
| 182 | Elf_Shdr *section, | ||
| 183 | const Elf_Shdr *relsec, | ||
| 184 | const Elf_Shdr *symtab); | ||
| 185 | |||
| 162 | int __weak arch_kexec_walk_mem(struct kexec_buf *kbuf, | 186 | int __weak arch_kexec_walk_mem(struct kexec_buf *kbuf, |
| 163 | int (*func)(struct resource *, void *)); | 187 | int (*func)(struct resource *, void *)); |
| 164 | extern int kexec_add_buffer(struct kexec_buf *kbuf); | 188 | extern int kexec_add_buffer(struct kexec_buf *kbuf); |
| 165 | int kexec_locate_mem_hole(struct kexec_buf *kbuf); | 189 | int kexec_locate_mem_hole(struct kexec_buf *kbuf); |
| 190 | |||
| 191 | /* Alignment required for elf header segment */ | ||
| 192 | #define ELF_CORE_HEADER_ALIGN 4096 | ||
| 193 | |||
| 194 | struct crash_mem_range { | ||
| 195 | u64 start, end; | ||
| 196 | }; | ||
| 197 | |||
| 198 | struct crash_mem { | ||
| 199 | unsigned int max_nr_ranges; | ||
| 200 | unsigned int nr_ranges; | ||
| 201 | struct crash_mem_range ranges[0]; | ||
| 202 | }; | ||
| 203 | |||
| 204 | extern int crash_exclude_mem_range(struct crash_mem *mem, | ||
| 205 | unsigned long long mstart, | ||
| 206 | unsigned long long mend); | ||
| 207 | extern int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map, | ||
| 208 | void **addr, unsigned long *sz); | ||
| 166 | #endif /* CONFIG_KEXEC_FILE */ | 209 | #endif /* CONFIG_KEXEC_FILE */ |
| 167 | 210 | ||
| 168 | struct kimage { | 211 | struct kimage { |
| @@ -209,7 +252,7 @@ struct kimage { | |||
| 209 | unsigned long cmdline_buf_len; | 252 | unsigned long cmdline_buf_len; |
| 210 | 253 | ||
| 211 | /* File operations provided by image loader */ | 254 | /* File operations provided by image loader */ |
| 212 | struct kexec_file_ops *fops; | 255 | const struct kexec_file_ops *fops; |
| 213 | 256 | ||
| 214 | /* Image loader handling the kernel can store a pointer here */ | 257 | /* Image loader handling the kernel can store a pointer here */ |
| 215 | void *image_loader_data; | 258 | void *image_loader_data; |
| @@ -226,14 +269,6 @@ extern void machine_kexec_cleanup(struct kimage *image); | |||
| 226 | extern int kernel_kexec(void); | 269 | extern int kernel_kexec(void); |
| 227 | extern struct page *kimage_alloc_control_pages(struct kimage *image, | 270 | extern struct page *kimage_alloc_control_pages(struct kimage *image, |
| 228 | unsigned int order); | 271 | unsigned int order); |
| 229 | extern int kexec_load_purgatory(struct kimage *image, unsigned long min, | ||
| 230 | unsigned long max, int top_down, | ||
| 231 | unsigned long *load_addr); | ||
| 232 | extern int kexec_purgatory_get_set_symbol(struct kimage *image, | ||
| 233 | const char *name, void *buf, | ||
| 234 | unsigned int size, bool get_value); | ||
| 235 | extern void *kexec_purgatory_get_symbol_addr(struct kimage *image, | ||
| 236 | const char *name); | ||
| 237 | extern void __crash_kexec(struct pt_regs *); | 272 | extern void __crash_kexec(struct pt_regs *); |
| 238 | extern void crash_kexec(struct pt_regs *); | 273 | extern void crash_kexec(struct pt_regs *); |
| 239 | int kexec_should_crash(struct task_struct *); | 274 | int kexec_should_crash(struct task_struct *); |
| @@ -273,16 +308,6 @@ int crash_shrink_memory(unsigned long new_size); | |||
| 273 | size_t crash_get_memory_size(void); | 308 | size_t crash_get_memory_size(void); |
| 274 | void crash_free_reserved_phys_range(unsigned long begin, unsigned long end); | 309 | void crash_free_reserved_phys_range(unsigned long begin, unsigned long end); |
| 275 | 310 | ||
| 276 | int __weak arch_kexec_kernel_image_probe(struct kimage *image, void *buf, | ||
| 277 | unsigned long buf_len); | ||
| 278 | void * __weak arch_kexec_kernel_image_load(struct kimage *image); | ||
| 279 | int __weak arch_kimage_file_post_load_cleanup(struct kimage *image); | ||
| 280 | int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf, | ||
| 281 | unsigned long buf_len); | ||
| 282 | int __weak arch_kexec_apply_relocations_add(const Elf_Ehdr *ehdr, | ||
| 283 | Elf_Shdr *sechdrs, unsigned int relsec); | ||
| 284 | int __weak arch_kexec_apply_relocations(const Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, | ||
| 285 | unsigned int relsec); | ||
| 286 | void arch_kexec_protect_crashkres(void); | 311 | void arch_kexec_protect_crashkres(void); |
| 287 | void arch_kexec_unprotect_crashkres(void); | 312 | void arch_kexec_unprotect_crashkres(void); |
| 288 | 313 | ||
diff --git a/include/linux/livepatch.h b/include/linux/livepatch.h index 4754f01c1abb..aec44b1d9582 100644 --- a/include/linux/livepatch.h +++ b/include/linux/livepatch.h | |||
| @@ -186,13 +186,20 @@ static inline bool klp_have_reliable_stack(void) | |||
| 186 | IS_ENABLED(CONFIG_HAVE_RELIABLE_STACKTRACE); | 186 | IS_ENABLED(CONFIG_HAVE_RELIABLE_STACKTRACE); |
| 187 | } | 187 | } |
| 188 | 188 | ||
| 189 | typedef int (*klp_shadow_ctor_t)(void *obj, | ||
| 190 | void *shadow_data, | ||
| 191 | void *ctor_data); | ||
| 192 | typedef void (*klp_shadow_dtor_t)(void *obj, void *shadow_data); | ||
| 193 | |||
| 189 | void *klp_shadow_get(void *obj, unsigned long id); | 194 | void *klp_shadow_get(void *obj, unsigned long id); |
| 190 | void *klp_shadow_alloc(void *obj, unsigned long id, void *data, | 195 | void *klp_shadow_alloc(void *obj, unsigned long id, |
| 191 | size_t size, gfp_t gfp_flags); | 196 | size_t size, gfp_t gfp_flags, |
| 192 | void *klp_shadow_get_or_alloc(void *obj, unsigned long id, void *data, | 197 | klp_shadow_ctor_t ctor, void *ctor_data); |
| 193 | size_t size, gfp_t gfp_flags); | 198 | void *klp_shadow_get_or_alloc(void *obj, unsigned long id, |
| 194 | void klp_shadow_free(void *obj, unsigned long id); | 199 | size_t size, gfp_t gfp_flags, |
| 195 | void klp_shadow_free_all(unsigned long id); | 200 | klp_shadow_ctor_t ctor, void *ctor_data); |
| 201 | void klp_shadow_free(void *obj, unsigned long id, klp_shadow_dtor_t dtor); | ||
| 202 | void klp_shadow_free_all(unsigned long id, klp_shadow_dtor_t dtor); | ||
| 196 | 203 | ||
| 197 | #else /* !CONFIG_LIVEPATCH */ | 204 | #else /* !CONFIG_LIVEPATCH */ |
| 198 | 205 | ||
diff --git a/include/linux/lockref.h b/include/linux/lockref.h index 2eac32095113..99f17cc8e163 100644 --- a/include/linux/lockref.h +++ b/include/linux/lockref.h | |||
| @@ -37,6 +37,7 @@ struct lockref { | |||
| 37 | extern void lockref_get(struct lockref *); | 37 | extern void lockref_get(struct lockref *); |
| 38 | extern int lockref_put_return(struct lockref *); | 38 | extern int lockref_put_return(struct lockref *); |
| 39 | extern int lockref_get_not_zero(struct lockref *); | 39 | extern int lockref_get_not_zero(struct lockref *); |
| 40 | extern int lockref_put_not_zero(struct lockref *); | ||
| 40 | extern int lockref_get_or_lock(struct lockref *); | 41 | extern int lockref_get_or_lock(struct lockref *); |
| 41 | extern int lockref_put_or_lock(struct lockref *); | 42 | extern int lockref_put_or_lock(struct lockref *); |
| 42 | 43 | ||
diff --git a/include/linux/mfd/cros_ec.h b/include/linux/mfd/cros_ec.h index c61535979b8f..2d4e23c9ea0a 100644 --- a/include/linux/mfd/cros_ec.h +++ b/include/linux/mfd/cros_ec.h | |||
| @@ -183,6 +183,7 @@ struct cros_ec_debugfs; | |||
| 183 | * @ec_dev: cros_ec_device structure to talk to the physical device | 183 | * @ec_dev: cros_ec_device structure to talk to the physical device |
| 184 | * @dev: pointer to the platform device | 184 | * @dev: pointer to the platform device |
| 185 | * @debug_info: cros_ec_debugfs structure for debugging information | 185 | * @debug_info: cros_ec_debugfs structure for debugging information |
| 186 | * @has_kb_wake_angle: true if at least 2 accelerometer are connected to the EC. | ||
| 186 | * @cmd_offset: offset to apply for each command. | 187 | * @cmd_offset: offset to apply for each command. |
| 187 | */ | 188 | */ |
| 188 | struct cros_ec_dev { | 189 | struct cros_ec_dev { |
| @@ -191,6 +192,7 @@ struct cros_ec_dev { | |||
| 191 | struct cros_ec_device *ec_dev; | 192 | struct cros_ec_device *ec_dev; |
| 192 | struct device *dev; | 193 | struct device *dev; |
| 193 | struct cros_ec_debugfs *debug_info; | 194 | struct cros_ec_debugfs *debug_info; |
| 195 | bool has_kb_wake_angle; | ||
| 194 | u16 cmd_offset; | 196 | u16 cmd_offset; |
| 195 | u32 features[2]; | 197 | u32 features[2]; |
| 196 | }; | 198 | }; |
diff --git a/include/linux/mfd/cros_ec_commands.h b/include/linux/mfd/cros_ec_commands.h index 2b96e630e3b6..f2edd9969b40 100644 --- a/include/linux/mfd/cros_ec_commands.h +++ b/include/linux/mfd/cros_ec_commands.h | |||
| @@ -2948,6 +2948,9 @@ struct ec_response_usb_pd_control_v1 { | |||
| 2948 | 2948 | ||
| 2949 | #define EC_CMD_USB_PD_PORTS 0x102 | 2949 | #define EC_CMD_USB_PD_PORTS 0x102 |
| 2950 | 2950 | ||
| 2951 | /* Maximum number of PD ports on a device, num_ports will be <= this */ | ||
| 2952 | #define EC_USB_PD_MAX_PORTS 8 | ||
| 2953 | |||
| 2951 | struct ec_response_usb_pd_ports { | 2954 | struct ec_response_usb_pd_ports { |
| 2952 | uint8_t num_ports; | 2955 | uint8_t num_ports; |
| 2953 | } __packed; | 2956 | } __packed; |
diff --git a/include/linux/microchipphy.h b/include/linux/microchipphy.h index 8e4015e7f8d3..8c40128af240 100644 --- a/include/linux/microchipphy.h +++ b/include/linux/microchipphy.h | |||
| @@ -73,4 +73,12 @@ | |||
| 73 | /* Registers specific to the LAN7800/LAN7850 embedded phy */ | 73 | /* Registers specific to the LAN7800/LAN7850 embedded phy */ |
| 74 | #define LAN78XX_PHY_LED_MODE_SELECT (0x1D) | 74 | #define LAN78XX_PHY_LED_MODE_SELECT (0x1D) |
| 75 | 75 | ||
| 76 | /* DSP registers */ | ||
| 77 | #define PHY_ARDENNES_MMD_DEV_3_PHY_CFG (0x806A) | ||
| 78 | #define PHY_ARDENNES_MMD_DEV_3_PHY_CFG_ZD_DLY_EN_ (0x2000) | ||
| 79 | #define LAN88XX_EXT_PAGE_ACCESS_TR (0x52B5) | ||
| 80 | #define LAN88XX_EXT_PAGE_TR_CR 16 | ||
| 81 | #define LAN88XX_EXT_PAGE_TR_LOW_DATA 17 | ||
| 82 | #define LAN88XX_EXT_PAGE_TR_HIGH_DATA 18 | ||
| 83 | |||
| 76 | #endif /* _MICROCHIPPHY_H */ | 84 | #endif /* _MICROCHIPPHY_H */ |
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 48fb2b43c35a..7d361be2e24f 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
| @@ -502,6 +502,7 @@ enum dmi_field { | |||
| 502 | DMI_CHASSIS_SERIAL, | 502 | DMI_CHASSIS_SERIAL, |
| 503 | DMI_CHASSIS_ASSET_TAG, | 503 | DMI_CHASSIS_ASSET_TAG, |
| 504 | DMI_STRING_MAX, | 504 | DMI_STRING_MAX, |
| 505 | DMI_OEM_STRING, /* special case - will not be in dmi_ident */ | ||
| 505 | }; | 506 | }; |
| 506 | 507 | ||
| 507 | struct dmi_strmatch { | 508 | struct dmi_strmatch { |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 38187c68063d..2f129bbfaae8 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
| @@ -198,14 +198,24 @@ struct nfs_inode { | |||
| 198 | /* | 198 | /* |
| 199 | * Cache validity bit flags | 199 | * Cache validity bit flags |
| 200 | */ | 200 | */ |
| 201 | #define NFS_INO_INVALID_ATTR 0x0001 /* cached attrs are invalid */ | 201 | #define NFS_INO_INVALID_DATA BIT(1) /* cached data is invalid */ |
| 202 | #define NFS_INO_INVALID_DATA 0x0002 /* cached data is invalid */ | 202 | #define NFS_INO_INVALID_ATIME BIT(2) /* cached atime is invalid */ |
| 203 | #define NFS_INO_INVALID_ATIME 0x0004 /* cached atime is invalid */ | 203 | #define NFS_INO_INVALID_ACCESS BIT(3) /* cached access cred invalid */ |
| 204 | #define NFS_INO_INVALID_ACCESS 0x0008 /* cached access cred invalid */ | 204 | #define NFS_INO_INVALID_ACL BIT(4) /* cached acls are invalid */ |
| 205 | #define NFS_INO_INVALID_ACL 0x0010 /* cached acls are invalid */ | 205 | #define NFS_INO_REVAL_PAGECACHE BIT(5) /* must revalidate pagecache */ |
| 206 | #define NFS_INO_REVAL_PAGECACHE 0x0020 /* must revalidate pagecache */ | 206 | #define NFS_INO_REVAL_FORCED BIT(6) /* force revalidation ignoring a delegation */ |
| 207 | #define NFS_INO_REVAL_FORCED 0x0040 /* force revalidation ignoring a delegation */ | 207 | #define NFS_INO_INVALID_LABEL BIT(7) /* cached label is invalid */ |
| 208 | #define NFS_INO_INVALID_LABEL 0x0080 /* cached label is invalid */ | 208 | #define NFS_INO_INVALID_CHANGE BIT(8) /* cached change is invalid */ |
| 209 | #define NFS_INO_INVALID_CTIME BIT(9) /* cached ctime is invalid */ | ||
| 210 | #define NFS_INO_INVALID_MTIME BIT(10) /* cached mtime is invalid */ | ||
| 211 | #define NFS_INO_INVALID_SIZE BIT(11) /* cached size is invalid */ | ||
| 212 | #define NFS_INO_INVALID_OTHER BIT(12) /* other attrs are invalid */ | ||
| 213 | |||
| 214 | #define NFS_INO_INVALID_ATTR (NFS_INO_INVALID_CHANGE \ | ||
| 215 | | NFS_INO_INVALID_CTIME \ | ||
| 216 | | NFS_INO_INVALID_MTIME \ | ||
| 217 | | NFS_INO_INVALID_SIZE \ | ||
| 218 | | NFS_INO_INVALID_OTHER) /* inode metadata is invalid */ | ||
| 209 | 219 | ||
| 210 | /* | 220 | /* |
| 211 | * Bit offsets in flags field | 221 | * Bit offsets in flags field |
| @@ -292,10 +302,11 @@ static inline void nfs_mark_for_revalidate(struct inode *inode) | |||
| 292 | struct nfs_inode *nfsi = NFS_I(inode); | 302 | struct nfs_inode *nfsi = NFS_I(inode); |
| 293 | 303 | ||
| 294 | spin_lock(&inode->i_lock); | 304 | spin_lock(&inode->i_lock); |
| 295 | nfsi->cache_validity |= NFS_INO_INVALID_ATTR | | 305 | nfsi->cache_validity |= NFS_INO_REVAL_PAGECACHE |
| 296 | NFS_INO_REVAL_PAGECACHE | | 306 | | NFS_INO_INVALID_ACCESS |
| 297 | NFS_INO_INVALID_ACCESS | | 307 | | NFS_INO_INVALID_ACL |
| 298 | NFS_INO_INVALID_ACL; | 308 | | NFS_INO_INVALID_CHANGE |
| 309 | | NFS_INO_INVALID_CTIME; | ||
| 299 | if (S_ISDIR(inode->i_mode)) | 310 | if (S_ISDIR(inode->i_mode)) |
| 300 | nfsi->cache_validity |= NFS_INO_INVALID_DATA; | 311 | nfsi->cache_validity |= NFS_INO_INVALID_DATA; |
| 301 | spin_unlock(&inode->i_lock); | 312 | spin_unlock(&inode->i_lock); |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 6959968dc36a..34d28564ecf3 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
| @@ -1590,11 +1590,13 @@ struct nfs_rpc_ops { | |||
| 1590 | unsigned int); | 1590 | unsigned int); |
| 1591 | int (*create) (struct inode *, struct dentry *, | 1591 | int (*create) (struct inode *, struct dentry *, |
| 1592 | struct iattr *, int); | 1592 | struct iattr *, int); |
| 1593 | int (*remove) (struct inode *, const struct qstr *); | 1593 | int (*remove) (struct inode *, struct dentry *); |
| 1594 | void (*unlink_setup) (struct rpc_message *, struct inode *dir); | 1594 | void (*unlink_setup) (struct rpc_message *, struct dentry *); |
| 1595 | void (*unlink_rpc_prepare) (struct rpc_task *, struct nfs_unlinkdata *); | 1595 | void (*unlink_rpc_prepare) (struct rpc_task *, struct nfs_unlinkdata *); |
| 1596 | int (*unlink_done) (struct rpc_task *, struct inode *); | 1596 | int (*unlink_done) (struct rpc_task *, struct inode *); |
| 1597 | void (*rename_setup) (struct rpc_message *msg, struct inode *dir); | 1597 | void (*rename_setup) (struct rpc_message *msg, |
| 1598 | struct dentry *old_dentry, | ||
| 1599 | struct dentry *new_dentry); | ||
| 1598 | void (*rename_rpc_prepare)(struct rpc_task *task, struct nfs_renamedata *); | 1600 | void (*rename_rpc_prepare)(struct rpc_task *task, struct nfs_renamedata *); |
| 1599 | int (*rename_done) (struct rpc_task *task, struct inode *old_dir, struct inode *new_dir); | 1601 | int (*rename_done) (struct rpc_task *task, struct inode *old_dir, struct inode *new_dir); |
| 1600 | int (*link) (struct inode *, struct inode *, const struct qstr *); | 1602 | int (*link) (struct inode *, struct inode *, const struct qstr *); |
| @@ -1633,7 +1635,6 @@ struct nfs_rpc_ops { | |||
| 1633 | struct iattr *iattr, | 1635 | struct iattr *iattr, |
| 1634 | int *); | 1636 | int *); |
| 1635 | int (*have_delegation)(struct inode *, fmode_t); | 1637 | int (*have_delegation)(struct inode *, fmode_t); |
| 1636 | int (*return_delegation)(struct inode *); | ||
| 1637 | struct nfs_client *(*alloc_client) (const struct nfs_client_initdata *); | 1638 | struct nfs_client *(*alloc_client) (const struct nfs_client_initdata *); |
| 1638 | struct nfs_client *(*init_client) (struct nfs_client *, | 1639 | struct nfs_client *(*init_client) (struct nfs_client *, |
| 1639 | const struct nfs_client_initdata *); | 1640 | const struct nfs_client_initdata *); |
diff --git a/include/linux/platform_data/atmel_mxt_ts.h b/include/linux/platform_data/atmel_mxt_ts.h deleted file mode 100644 index 695035a8d7fb..000000000000 --- a/include/linux/platform_data/atmel_mxt_ts.h +++ /dev/null | |||
| @@ -1,31 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Atmel maXTouch Touchscreen driver | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Samsung Electronics Co.Ltd | ||
| 5 | * Author: Joonyoung Shim <jy0922.shim@samsung.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License as published by the | ||
| 9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 10 | * option) any later version. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #ifndef __LINUX_PLATFORM_DATA_ATMEL_MXT_TS_H | ||
| 14 | #define __LINUX_PLATFORM_DATA_ATMEL_MXT_TS_H | ||
| 15 | |||
| 16 | #include <linux/types.h> | ||
| 17 | |||
| 18 | enum mxt_suspend_mode { | ||
| 19 | MXT_SUSPEND_DEEP_SLEEP = 0, | ||
| 20 | MXT_SUSPEND_T9_CTRL = 1, | ||
| 21 | }; | ||
| 22 | |||
| 23 | /* The platform data for the Atmel maXTouch touchscreen driver */ | ||
| 24 | struct mxt_platform_data { | ||
| 25 | unsigned long irqflags; | ||
| 26 | u8 t19_num_keys; | ||
| 27 | const unsigned int *t19_keymap; | ||
| 28 | enum mxt_suspend_mode suspend_mode; | ||
| 29 | }; | ||
| 30 | |||
| 31 | #endif /* __LINUX_PLATFORM_DATA_ATMEL_MXT_TS_H */ | ||
diff --git a/include/linux/platform_data/clk-da8xx-cfgchip.h b/include/linux/platform_data/clk-da8xx-cfgchip.h new file mode 100644 index 000000000000..de0f77d38669 --- /dev/null +++ b/include/linux/platform_data/clk-da8xx-cfgchip.h | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 2 | /* | ||
| 3 | * clk-da8xx-cfgchip - TI DaVinci DA8xx CFGCHIP clock driver | ||
| 4 | * | ||
| 5 | * Copyright (C) 2018 David Lechner <david@lechnology.com> | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef __LINUX_PLATFORM_DATA_CLK_DA8XX_CFGCHIP_H__ | ||
| 9 | #define __LINUX_PLATFORM_DATA_CLK_DA8XX_CFGCHIP_H__ | ||
| 10 | |||
| 11 | #include <linux/regmap.h> | ||
| 12 | |||
| 13 | /** | ||
| 14 | * da8xx_cfgchip_clk_platform_data | ||
| 15 | * @cfgchip: CFGCHIP syscon regmap | ||
| 16 | */ | ||
| 17 | struct da8xx_cfgchip_clk_platform_data { | ||
| 18 | struct regmap *cfgchip; | ||
| 19 | }; | ||
| 20 | |||
| 21 | #endif /* __LINUX_PLATFORM_DATA_CLK_DA8XX_CFGCHIP_H__ */ | ||
diff --git a/include/linux/platform_data/clk-davinci-pll.h b/include/linux/platform_data/clk-davinci-pll.h new file mode 100644 index 000000000000..e55dab1d578b --- /dev/null +++ b/include/linux/platform_data/clk-davinci-pll.h | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 2 | /* | ||
| 3 | * PLL clock driver for TI Davinci SoCs | ||
| 4 | * | ||
| 5 | * Copyright (C) 2018 David Lechner <david@lechnology.com> | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef __LINUX_PLATFORM_DATA_CLK_DAVINCI_PLL_H__ | ||
| 9 | #define __LINUX_PLATFORM_DATA_CLK_DAVINCI_PLL_H__ | ||
| 10 | |||
| 11 | #include <linux/regmap.h> | ||
| 12 | |||
| 13 | /** | ||
| 14 | * davinci_pll_platform_data | ||
| 15 | * @cfgchip: CFGCHIP syscon regmap | ||
| 16 | */ | ||
| 17 | struct davinci_pll_platform_data { | ||
| 18 | struct regmap *cfgchip; | ||
| 19 | }; | ||
| 20 | |||
| 21 | #endif /* __LINUX_PLATFORM_DATA_CLK_DAVINCI_PLL_H__ */ | ||
diff --git a/include/linux/sched.h b/include/linux/sched.h index f228c6033832..b3d697f3b573 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -300,7 +300,7 @@ struct util_est { | |||
| 300 | unsigned int enqueued; | 300 | unsigned int enqueued; |
| 301 | unsigned int ewma; | 301 | unsigned int ewma; |
| 302 | #define UTIL_EST_WEIGHT_SHIFT 2 | 302 | #define UTIL_EST_WEIGHT_SHIFT 2 |
| 303 | }; | 303 | } __attribute__((__aligned__(sizeof(u64)))); |
| 304 | 304 | ||
| 305 | /* | 305 | /* |
| 306 | * The load_avg/util_avg accumulates an infinite geometric series | 306 | * The load_avg/util_avg accumulates an infinite geometric series |
| @@ -364,7 +364,7 @@ struct sched_avg { | |||
| 364 | unsigned long runnable_load_avg; | 364 | unsigned long runnable_load_avg; |
| 365 | unsigned long util_avg; | 365 | unsigned long util_avg; |
| 366 | struct util_est util_est; | 366 | struct util_est util_est; |
| 367 | }; | 367 | } ____cacheline_aligned; |
| 368 | 368 | ||
| 369 | struct sched_statistics { | 369 | struct sched_statistics { |
| 370 | #ifdef CONFIG_SCHEDSTATS | 370 | #ifdef CONFIG_SCHEDSTATS |
| @@ -435,7 +435,7 @@ struct sched_entity { | |||
| 435 | * Put into separate cache line so it does not | 435 | * Put into separate cache line so it does not |
| 436 | * collide with read-mostly values above. | 436 | * collide with read-mostly values above. |
| 437 | */ | 437 | */ |
| 438 | struct sched_avg avg ____cacheline_aligned_in_smp; | 438 | struct sched_avg avg; |
| 439 | #endif | 439 | #endif |
| 440 | }; | 440 | }; |
| 441 | 441 | ||
diff --git a/include/linux/sha256.h b/include/linux/sha256.h new file mode 100644 index 000000000000..244fe01a65fb --- /dev/null +++ b/include/linux/sha256.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2014 Red Hat Inc. | ||
| 3 | * | ||
| 4 | * Author: Vivek Goyal <vgoyal@redhat.com> | ||
| 5 | * | ||
| 6 | * This source code is licensed under the GNU General Public License, | ||
| 7 | * Version 2. See the file COPYING for more details. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #ifndef SHA256_H | ||
| 11 | #define SHA256_H | ||
| 12 | |||
| 13 | #include <linux/types.h> | ||
| 14 | #include <crypto/sha.h> | ||
| 15 | |||
| 16 | /* | ||
| 17 | * Stand-alone implementation of the SHA256 algorithm. It is designed to | ||
| 18 | * have as little dependencies as possible so it can be used in the | ||
| 19 | * kexec_file purgatory. In other cases you should use the implementation in | ||
| 20 | * crypto/. | ||
| 21 | * | ||
| 22 | * For details see lib/sha256.c | ||
| 23 | */ | ||
| 24 | |||
| 25 | extern int sha256_init(struct sha256_state *sctx); | ||
| 26 | extern int sha256_update(struct sha256_state *sctx, const u8 *input, | ||
| 27 | unsigned int length); | ||
| 28 | extern int sha256_final(struct sha256_state *sctx, u8 *hash); | ||
| 29 | |||
| 30 | #endif /* SHA256_H */ | ||
diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 388ff2936a87..6794490f25b2 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h | |||
| @@ -75,6 +75,9 @@ struct shrinker { | |||
| 75 | #define SHRINKER_NUMA_AWARE (1 << 0) | 75 | #define SHRINKER_NUMA_AWARE (1 << 0) |
| 76 | #define SHRINKER_MEMCG_AWARE (1 << 1) | 76 | #define SHRINKER_MEMCG_AWARE (1 << 1) |
| 77 | 77 | ||
| 78 | extern int register_shrinker(struct shrinker *); | 78 | extern int prealloc_shrinker(struct shrinker *shrinker); |
| 79 | extern void unregister_shrinker(struct shrinker *); | 79 | extern void register_shrinker_prepared(struct shrinker *shrinker); |
| 80 | extern int register_shrinker(struct shrinker *shrinker); | ||
| 81 | extern void unregister_shrinker(struct shrinker *shrinker); | ||
| 82 | extern void free_prealloced_shrinker(struct shrinker *shrinker); | ||
| 80 | #endif | 83 | #endif |
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index ed761f751ecb..9b11b6a0978c 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h | |||
| @@ -217,5 +217,12 @@ void rpc_clnt_xprt_switch_add_xprt(struct rpc_clnt *, struct rpc_xprt *); | |||
| 217 | bool rpc_clnt_xprt_switch_has_addr(struct rpc_clnt *clnt, | 217 | bool rpc_clnt_xprt_switch_has_addr(struct rpc_clnt *clnt, |
| 218 | const struct sockaddr *sap); | 218 | const struct sockaddr *sap); |
| 219 | void rpc_cleanup_clids(void); | 219 | void rpc_cleanup_clids(void); |
| 220 | |||
| 221 | static inline int rpc_reply_expected(struct rpc_task *task) | ||
| 222 | { | ||
| 223 | return (task->tk_msg.rpc_proc != NULL) && | ||
| 224 | (task->tk_msg.rpc_proc->p_decode != NULL); | ||
| 225 | } | ||
| 226 | |||
| 220 | #endif /* __KERNEL__ */ | 227 | #endif /* __KERNEL__ */ |
| 221 | #endif /* _LINUX_SUNRPC_CLNT_H */ | 228 | #endif /* _LINUX_SUNRPC_CLNT_H */ |
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index d950223c64b1..2bd68177a442 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h | |||
| @@ -253,6 +253,12 @@ xdr_stream_remaining(const struct xdr_stream *xdr) | |||
| 253 | return xdr->nwords << 2; | 253 | return xdr->nwords << 2; |
| 254 | } | 254 | } |
| 255 | 255 | ||
| 256 | ssize_t xdr_stream_decode_opaque(struct xdr_stream *xdr, void *ptr, | ||
| 257 | size_t size); | ||
| 258 | ssize_t xdr_stream_decode_opaque_dup(struct xdr_stream *xdr, void **ptr, | ||
| 259 | size_t maxlen, gfp_t gfp_flags); | ||
| 260 | ssize_t xdr_stream_decode_string(struct xdr_stream *xdr, char *str, | ||
| 261 | size_t size); | ||
| 256 | ssize_t xdr_stream_decode_string_dup(struct xdr_stream *xdr, char **str, | 262 | ssize_t xdr_stream_decode_string_dup(struct xdr_stream *xdr, char **str, |
| 257 | size_t maxlen, gfp_t gfp_flags); | 263 | size_t maxlen, gfp_t gfp_flags); |
| 258 | /** | 264 | /** |
| @@ -313,6 +319,31 @@ xdr_stream_encode_u64(struct xdr_stream *xdr, __u64 n) | |||
| 313 | } | 319 | } |
| 314 | 320 | ||
| 315 | /** | 321 | /** |
| 322 | * xdr_stream_encode_opaque_inline - Encode opaque xdr data | ||
| 323 | * @xdr: pointer to xdr_stream | ||
| 324 | * @ptr: pointer to void pointer | ||
| 325 | * @len: size of object | ||
| 326 | * | ||
| 327 | * Return values: | ||
| 328 | * On success, returns length in bytes of XDR buffer consumed | ||
| 329 | * %-EMSGSIZE on XDR buffer overflow | ||
| 330 | */ | ||
| 331 | static inline ssize_t | ||
| 332 | xdr_stream_encode_opaque_inline(struct xdr_stream *xdr, void **ptr, size_t len) | ||
| 333 | { | ||
| 334 | size_t count = sizeof(__u32) + xdr_align_size(len); | ||
| 335 | __be32 *p = xdr_reserve_space(xdr, count); | ||
| 336 | |||
| 337 | if (unlikely(!p)) { | ||
| 338 | *ptr = NULL; | ||
| 339 | return -EMSGSIZE; | ||
| 340 | } | ||
| 341 | xdr_encode_opaque(p, NULL, len); | ||
| 342 | *ptr = ++p; | ||
| 343 | return count; | ||
| 344 | } | ||
| 345 | |||
| 346 | /** | ||
| 316 | * xdr_stream_encode_opaque_fixed - Encode fixed length opaque xdr data | 347 | * xdr_stream_encode_opaque_fixed - Encode fixed length opaque xdr data |
| 317 | * @xdr: pointer to xdr_stream | 348 | * @xdr: pointer to xdr_stream |
| 318 | * @ptr: pointer to opaque data object | 349 | * @ptr: pointer to opaque data object |
| @@ -356,6 +387,31 @@ xdr_stream_encode_opaque(struct xdr_stream *xdr, const void *ptr, size_t len) | |||
| 356 | } | 387 | } |
| 357 | 388 | ||
| 358 | /** | 389 | /** |
| 390 | * xdr_stream_encode_uint32_array - Encode variable length array of integers | ||
| 391 | * @xdr: pointer to xdr_stream | ||
| 392 | * @array: array of integers | ||
| 393 | * @array_size: number of elements in @array | ||
| 394 | * | ||
| 395 | * Return values: | ||
| 396 | * On success, returns length in bytes of XDR buffer consumed | ||
| 397 | * %-EMSGSIZE on XDR buffer overflow | ||
| 398 | */ | ||
| 399 | static inline ssize_t | ||
| 400 | xdr_stream_encode_uint32_array(struct xdr_stream *xdr, | ||
| 401 | const __u32 *array, size_t array_size) | ||
| 402 | { | ||
| 403 | ssize_t ret = (array_size+1) * sizeof(__u32); | ||
| 404 | __be32 *p = xdr_reserve_space(xdr, ret); | ||
| 405 | |||
| 406 | if (unlikely(!p)) | ||
| 407 | return -EMSGSIZE; | ||
| 408 | *p++ = cpu_to_be32(array_size); | ||
| 409 | for (; array_size > 0; p++, array++, array_size--) | ||
| 410 | *p = cpu_to_be32p(array); | ||
| 411 | return ret; | ||
| 412 | } | ||
| 413 | |||
| 414 | /** | ||
| 359 | * xdr_stream_decode_u32 - Decode a 32-bit integer | 415 | * xdr_stream_decode_u32 - Decode a 32-bit integer |
| 360 | * @xdr: pointer to xdr_stream | 416 | * @xdr: pointer to xdr_stream |
| 361 | * @ptr: location to store integer | 417 | * @ptr: location to store integer |
| @@ -432,6 +488,44 @@ xdr_stream_decode_opaque_inline(struct xdr_stream *xdr, void **ptr, size_t maxle | |||
| 432 | } | 488 | } |
| 433 | return len; | 489 | return len; |
| 434 | } | 490 | } |
| 491 | |||
| 492 | /** | ||
| 493 | * xdr_stream_decode_uint32_array - Decode variable length array of integers | ||
| 494 | * @xdr: pointer to xdr_stream | ||
| 495 | * @array: location to store the integer array or NULL | ||
| 496 | * @array_size: number of elements to store | ||
| 497 | * | ||
| 498 | * Return values: | ||
| 499 | * On success, returns number of elements stored in @array | ||
| 500 | * %-EBADMSG on XDR buffer overflow | ||
| 501 | * %-EMSGSIZE if the size of the array exceeds @array_size | ||
| 502 | */ | ||
| 503 | static inline ssize_t | ||
| 504 | xdr_stream_decode_uint32_array(struct xdr_stream *xdr, | ||
| 505 | __u32 *array, size_t array_size) | ||
| 506 | { | ||
| 507 | __be32 *p; | ||
| 508 | __u32 len; | ||
| 509 | ssize_t retval; | ||
| 510 | |||
| 511 | if (unlikely(xdr_stream_decode_u32(xdr, &len) < 0)) | ||
| 512 | return -EBADMSG; | ||
| 513 | p = xdr_inline_decode(xdr, len * sizeof(*p)); | ||
| 514 | if (unlikely(!p)) | ||
| 515 | return -EBADMSG; | ||
| 516 | if (array == NULL) | ||
| 517 | return len; | ||
| 518 | if (len <= array_size) { | ||
| 519 | if (len < array_size) | ||
| 520 | memset(array+len, 0, (array_size-len)*sizeof(*array)); | ||
| 521 | array_size = len; | ||
| 522 | retval = len; | ||
| 523 | } else | ||
| 524 | retval = -EMSGSIZE; | ||
| 525 | for (; array_size > 0; p++, array++, array_size--) | ||
| 526 | *array = be32_to_cpup(p); | ||
| 527 | return retval; | ||
| 528 | } | ||
| 435 | #endif /* __KERNEL__ */ | 529 | #endif /* __KERNEL__ */ |
| 436 | 530 | ||
| 437 | #endif /* _SUNRPC_XDR_H_ */ | 531 | #endif /* _SUNRPC_XDR_H_ */ |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 7fad83881ce1..5fea0fb420df 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
| @@ -197,7 +197,7 @@ struct rpc_xprt { | |||
| 197 | struct list_head free; /* free slots */ | 197 | struct list_head free; /* free slots */ |
| 198 | unsigned int max_reqs; /* max number of slots */ | 198 | unsigned int max_reqs; /* max number of slots */ |
| 199 | unsigned int min_reqs; /* min number of slots */ | 199 | unsigned int min_reqs; /* min number of slots */ |
| 200 | atomic_t num_reqs; /* total slots */ | 200 | unsigned int num_reqs; /* total slots */ |
| 201 | unsigned long state; /* transport state */ | 201 | unsigned long state; /* transport state */ |
| 202 | unsigned char resvport : 1; /* use a reserved port */ | 202 | unsigned char resvport : 1; /* use a reserved port */ |
| 203 | atomic_t swapper; /* we're swapping over this | 203 | atomic_t swapper; /* we're swapping over this |
| @@ -373,6 +373,7 @@ void xprt_wait_for_buffer_space(struct rpc_task *task, rpc_action action); | |||
| 373 | void xprt_write_space(struct rpc_xprt *xprt); | 373 | void xprt_write_space(struct rpc_xprt *xprt); |
| 374 | void xprt_adjust_cwnd(struct rpc_xprt *xprt, struct rpc_task *task, int result); | 374 | void xprt_adjust_cwnd(struct rpc_xprt *xprt, struct rpc_task *task, int result); |
| 375 | struct rpc_rqst * xprt_lookup_rqst(struct rpc_xprt *xprt, __be32 xid); | 375 | struct rpc_rqst * xprt_lookup_rqst(struct rpc_xprt *xprt, __be32 xid); |
| 376 | void xprt_update_rtt(struct rpc_task *task); | ||
| 376 | void xprt_complete_rqst(struct rpc_task *task, int copied); | 377 | void xprt_complete_rqst(struct rpc_task *task, int copied); |
| 377 | void xprt_pin_rqst(struct rpc_rqst *req); | 378 | void xprt_pin_rqst(struct rpc_rqst *req); |
| 378 | void xprt_unpin_rqst(struct rpc_rqst *req); | 379 | void xprt_unpin_rqst(struct rpc_rqst *req); |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index b961184f597a..70fcda1a9049 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -81,6 +81,17 @@ union bpf_attr; | |||
| 81 | #include <linux/key.h> | 81 | #include <linux/key.h> |
| 82 | #include <trace/syscall.h> | 82 | #include <trace/syscall.h> |
| 83 | 83 | ||
| 84 | #ifdef CONFIG_ARCH_HAS_SYSCALL_WRAPPER | ||
| 85 | /* | ||
| 86 | * It may be useful for an architecture to override the definitions of the | ||
| 87 | * SYSCALL_DEFINE0() and __SYSCALL_DEFINEx() macros, in particular to use a | ||
| 88 | * different calling convention for syscalls. To allow for that, the prototypes | ||
| 89 | * for the sys_*() functions below will *not* be included if | ||
| 90 | * CONFIG_ARCH_HAS_SYSCALL_WRAPPER is enabled. | ||
| 91 | */ | ||
| 92 | #include <asm/syscall_wrapper.h> | ||
| 93 | #endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */ | ||
| 94 | |||
| 84 | /* | 95 | /* |
| 85 | * __MAP - apply a macro to syscall arguments | 96 | * __MAP - apply a macro to syscall arguments |
| 86 | * __MAP(n, m, t1, a1, t2, a2, ..., tn, an) will expand to | 97 | * __MAP(n, m, t1, a1, t2, a2, ..., tn, an) will expand to |
| @@ -91,7 +102,7 @@ union bpf_attr; | |||
| 91 | * for SYSCALL_DEFINE<n>/COMPAT_SYSCALL_DEFINE<n> | 102 | * for SYSCALL_DEFINE<n>/COMPAT_SYSCALL_DEFINE<n> |
| 92 | */ | 103 | */ |
| 93 | #define __MAP0(m,...) | 104 | #define __MAP0(m,...) |
| 94 | #define __MAP1(m,t,a) m(t,a) | 105 | #define __MAP1(m,t,a,...) m(t,a) |
| 95 | #define __MAP2(m,t,a,...) m(t,a), __MAP1(m,__VA_ARGS__) | 106 | #define __MAP2(m,t,a,...) m(t,a), __MAP1(m,__VA_ARGS__) |
| 96 | #define __MAP3(m,t,a,...) m(t,a), __MAP2(m,__VA_ARGS__) | 107 | #define __MAP3(m,t,a,...) m(t,a), __MAP2(m,__VA_ARGS__) |
| 97 | #define __MAP4(m,t,a,...) m(t,a), __MAP3(m,__VA_ARGS__) | 108 | #define __MAP4(m,t,a,...) m(t,a), __MAP3(m,__VA_ARGS__) |
| @@ -189,11 +200,13 @@ static inline int is_syscall_trace_event(struct trace_event_call *tp_event) | |||
| 189 | } | 200 | } |
| 190 | #endif | 201 | #endif |
| 191 | 202 | ||
| 203 | #ifndef SYSCALL_DEFINE0 | ||
| 192 | #define SYSCALL_DEFINE0(sname) \ | 204 | #define SYSCALL_DEFINE0(sname) \ |
| 193 | SYSCALL_METADATA(_##sname, 0); \ | 205 | SYSCALL_METADATA(_##sname, 0); \ |
| 194 | asmlinkage long sys_##sname(void); \ | 206 | asmlinkage long sys_##sname(void); \ |
| 195 | ALLOW_ERROR_INJECTION(sys_##sname, ERRNO); \ | 207 | ALLOW_ERROR_INJECTION(sys_##sname, ERRNO); \ |
| 196 | asmlinkage long sys_##sname(void) | 208 | asmlinkage long sys_##sname(void) |
| 209 | #endif /* SYSCALL_DEFINE0 */ | ||
| 197 | 210 | ||
| 198 | #define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) | 211 | #define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) |
| 199 | #define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__) | 212 | #define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__) |
| @@ -209,20 +222,28 @@ static inline int is_syscall_trace_event(struct trace_event_call *tp_event) | |||
| 209 | __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) | 222 | __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) |
| 210 | 223 | ||
| 211 | #define __PROTECT(...) asmlinkage_protect(__VA_ARGS__) | 224 | #define __PROTECT(...) asmlinkage_protect(__VA_ARGS__) |
| 225 | |||
| 226 | /* | ||
| 227 | * The asmlinkage stub is aliased to a function named __se_sys_*() which | ||
| 228 | * sign-extends 32-bit ints to longs whenever needed. The actual work is | ||
| 229 | * done within __do_sys_*(). | ||
| 230 | */ | ||
| 231 | #ifndef __SYSCALL_DEFINEx | ||
| 212 | #define __SYSCALL_DEFINEx(x, name, ...) \ | 232 | #define __SYSCALL_DEFINEx(x, name, ...) \ |
| 213 | asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \ | 233 | asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \ |
| 214 | __attribute__((alias(__stringify(SyS##name)))); \ | 234 | __attribute__((alias(__stringify(__se_sys##name)))); \ |
| 215 | ALLOW_ERROR_INJECTION(sys##name, ERRNO); \ | 235 | ALLOW_ERROR_INJECTION(sys##name, ERRNO); \ |
| 216 | static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \ | 236 | static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\ |
| 217 | asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ | 237 | asmlinkage long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ |
| 218 | asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ | 238 | asmlinkage long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ |
| 219 | { \ | 239 | { \ |
| 220 | long ret = SYSC##name(__MAP(x,__SC_CAST,__VA_ARGS__)); \ | 240 | long ret = __do_sys##name(__MAP(x,__SC_CAST,__VA_ARGS__));\ |
| 221 | __MAP(x,__SC_TEST,__VA_ARGS__); \ | 241 | __MAP(x,__SC_TEST,__VA_ARGS__); \ |
| 222 | __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \ | 242 | __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \ |
| 223 | return ret; \ | 243 | return ret; \ |
| 224 | } \ | 244 | } \ |
| 225 | static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)) | 245 | static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) |
| 246 | #endif /* __SYSCALL_DEFINEx */ | ||
| 226 | 247 | ||
| 227 | /* | 248 | /* |
| 228 | * Called before coming back to user-mode. Returning to user-mode with an | 249 | * Called before coming back to user-mode. Returning to user-mode with an |
| @@ -252,7 +273,12 @@ static inline void addr_limit_user_check(void) | |||
| 252 | * Please note that these prototypes here are only provided for information | 273 | * Please note that these prototypes here are only provided for information |
| 253 | * purposes, for static analysis, and for linking from the syscall table. | 274 | * purposes, for static analysis, and for linking from the syscall table. |
| 254 | * These functions should not be called elsewhere from kernel code. | 275 | * These functions should not be called elsewhere from kernel code. |
| 276 | * | ||
| 277 | * As the syscall calling convention may be different from the default | ||
| 278 | * for architectures overriding the syscall calling convention, do not | ||
| 279 | * include the prototypes if CONFIG_ARCH_HAS_SYSCALL_WRAPPER is enabled. | ||
| 255 | */ | 280 | */ |
| 281 | #ifndef CONFIG_ARCH_HAS_SYSCALL_WRAPPER | ||
| 256 | asmlinkage long sys_io_setup(unsigned nr_reqs, aio_context_t __user *ctx); | 282 | asmlinkage long sys_io_setup(unsigned nr_reqs, aio_context_t __user *ctx); |
| 257 | asmlinkage long sys_io_destroy(aio_context_t ctx); | 283 | asmlinkage long sys_io_destroy(aio_context_t ctx); |
| 258 | asmlinkage long sys_io_submit(aio_context_t, long, | 284 | asmlinkage long sys_io_submit(aio_context_t, long, |
| @@ -1076,6 +1102,8 @@ asmlinkage long sys_old_mmap(struct mmap_arg_struct __user *arg); | |||
| 1076 | */ | 1102 | */ |
| 1077 | asmlinkage long sys_ni_syscall(void); | 1103 | asmlinkage long sys_ni_syscall(void); |
| 1078 | 1104 | ||
| 1105 | #endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */ | ||
| 1106 | |||
| 1079 | 1107 | ||
| 1080 | /* | 1108 | /* |
| 1081 | * Kernel code should not call syscalls (i.e., sys_xyzyyz()) directly. | 1109 | * Kernel code should not call syscalls (i.e., sys_xyzyyz()) directly. |
diff --git a/include/linux/textsearch.h b/include/linux/textsearch.h index 0494db3fd9e8..13770cfe33ad 100644 --- a/include/linux/textsearch.h +++ b/include/linux/textsearch.h | |||
| @@ -62,7 +62,7 @@ struct ts_config | |||
| 62 | int flags; | 62 | int flags; |
| 63 | 63 | ||
| 64 | /** | 64 | /** |
| 65 | * get_next_block - fetch next block of data | 65 | * @get_next_block: fetch next block of data |
| 66 | * @consumed: number of bytes consumed by the caller | 66 | * @consumed: number of bytes consumed by the caller |
| 67 | * @dst: destination buffer | 67 | * @dst: destination buffer |
| 68 | * @conf: search configuration | 68 | * @conf: search configuration |
| @@ -79,7 +79,7 @@ struct ts_config | |||
| 79 | struct ts_state *state); | 79 | struct ts_state *state); |
| 80 | 80 | ||
| 81 | /** | 81 | /** |
| 82 | * finish - finalize/clean a series of get_next_block() calls | 82 | * @finish: finalize/clean a series of get_next_block() calls |
| 83 | * @conf: search configuration | 83 | * @conf: search configuration |
| 84 | * @state: search state | 84 | * @state: search state |
| 85 | * | 85 | * |
diff --git a/include/linux/thermal.h b/include/linux/thermal.h index 8c5302374eaa..7834be668d80 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h | |||
| @@ -148,6 +148,7 @@ struct thermal_cooling_device { | |||
| 148 | struct device device; | 148 | struct device device; |
| 149 | struct device_node *np; | 149 | struct device_node *np; |
| 150 | void *devdata; | 150 | void *devdata; |
| 151 | void *stats; | ||
| 151 | const struct thermal_cooling_device_ops *ops; | 152 | const struct thermal_cooling_device_ops *ops; |
| 152 | bool updated; /* true if the cooling device does not need update */ | 153 | bool updated; /* true if the cooling device does not need update */ |
| 153 | struct mutex lock; /* protect thermal_instances list */ | 154 | struct mutex lock; /* protect thermal_instances list */ |
