diff options
Diffstat (limited to 'include/linux')
65 files changed, 592 insertions, 181 deletions
diff --git a/include/linux/backing-dev-defs.h b/include/linux/backing-dev-defs.h index c31157135598..07e02d6df5ad 100644 --- a/include/linux/backing-dev-defs.h +++ b/include/linux/backing-dev-defs.h | |||
| @@ -190,6 +190,7 @@ struct backing_dev_info { | |||
| 190 | struct radix_tree_root cgwb_tree; /* radix tree of active cgroup wbs */ | 190 | struct radix_tree_root cgwb_tree; /* radix tree of active cgroup wbs */ |
| 191 | struct rb_root cgwb_congested_tree; /* their congested states */ | 191 | struct rb_root cgwb_congested_tree; /* their congested states */ |
| 192 | struct mutex cgwb_release_mutex; /* protect shutdown of wb structs */ | 192 | struct mutex cgwb_release_mutex; /* protect shutdown of wb structs */ |
| 193 | struct rw_semaphore wb_switch_rwsem; /* no cgwb switch while syncing */ | ||
| 193 | #else | 194 | #else |
| 194 | struct bdi_writeback_congested *wb_congested; | 195 | struct bdi_writeback_congested *wb_congested; |
| 195 | #endif | 196 | #endif |
diff --git a/include/linux/bcma/bcma_soc.h b/include/linux/bcma/bcma_soc.h index 7cca5f859a90..f3c43519baa7 100644 --- a/include/linux/bcma/bcma_soc.h +++ b/include/linux/bcma/bcma_soc.h | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | struct bcma_soc { | 7 | struct bcma_soc { |
| 8 | struct bcma_bus bus; | 8 | struct bcma_bus bus; |
| 9 | struct device *dev; | ||
| 9 | }; | 10 | }; |
| 10 | 11 | ||
| 11 | int __init bcma_host_soc_register(struct bcma_soc *soc); | 12 | int __init bcma_host_soc_register(struct bcma_soc *soc); |
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index 5c7e7f859a24..d66bf5f32610 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h | |||
| @@ -287,7 +287,7 @@ enum req_opf { | |||
| 287 | REQ_OP_DISCARD = 3, | 287 | REQ_OP_DISCARD = 3, |
| 288 | /* securely erase sectors */ | 288 | /* securely erase sectors */ |
| 289 | REQ_OP_SECURE_ERASE = 5, | 289 | REQ_OP_SECURE_ERASE = 5, |
| 290 | /* seset a zone write pointer */ | 290 | /* reset a zone write pointer */ |
| 291 | REQ_OP_ZONE_RESET = 6, | 291 | REQ_OP_ZONE_RESET = 6, |
| 292 | /* write the same sector many times */ | 292 | /* write the same sector many times */ |
| 293 | REQ_OP_WRITE_SAME = 7, | 293 | REQ_OP_WRITE_SAME = 7, |
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h index 8804753805ac..7bb2d8de9f30 100644 --- a/include/linux/blktrace_api.h +++ b/include/linux/blktrace_api.h | |||
| @@ -116,7 +116,13 @@ extern void blk_fill_rwbs(char *rwbs, unsigned int op, int bytes); | |||
| 116 | 116 | ||
| 117 | static inline sector_t blk_rq_trace_sector(struct request *rq) | 117 | static inline sector_t blk_rq_trace_sector(struct request *rq) |
| 118 | { | 118 | { |
| 119 | return blk_rq_is_passthrough(rq) ? 0 : blk_rq_pos(rq); | 119 | /* |
| 120 | * Tracing should ignore starting sector for passthrough requests and | ||
| 121 | * requests where starting sector didn't get set. | ||
| 122 | */ | ||
| 123 | if (blk_rq_is_passthrough(rq) || blk_rq_pos(rq) == (sector_t)-1) | ||
| 124 | return 0; | ||
| 125 | return blk_rq_pos(rq); | ||
| 120 | } | 126 | } |
| 121 | 127 | ||
| 122 | static inline unsigned int blk_rq_trace_nr_sectors(struct request *rq) | 128 | static inline unsigned int blk_rq_trace_nr_sectors(struct request *rq) |
diff --git a/include/linux/bpf_verifier.h b/include/linux/bpf_verifier.h index 27b74947cd2b..573cca00a0e6 100644 --- a/include/linux/bpf_verifier.h +++ b/include/linux/bpf_verifier.h | |||
| @@ -172,6 +172,7 @@ struct bpf_verifier_state_list { | |||
| 172 | #define BPF_ALU_SANITIZE_SRC 1U | 172 | #define BPF_ALU_SANITIZE_SRC 1U |
| 173 | #define BPF_ALU_SANITIZE_DST 2U | 173 | #define BPF_ALU_SANITIZE_DST 2U |
| 174 | #define BPF_ALU_NEG_VALUE (1U << 2) | 174 | #define BPF_ALU_NEG_VALUE (1U << 2) |
| 175 | #define BPF_ALU_NON_POINTER (1U << 3) | ||
| 175 | #define BPF_ALU_SANITIZE (BPF_ALU_SANITIZE_SRC | \ | 176 | #define BPF_ALU_SANITIZE (BPF_ALU_SANITIZE_SRC | \ |
| 176 | BPF_ALU_SANITIZE_DST) | 177 | BPF_ALU_SANITIZE_DST) |
| 177 | 178 | ||
diff --git a/include/linux/bpfilter.h b/include/linux/bpfilter.h index f02cee0225d4..d815622cd31e 100644 --- a/include/linux/bpfilter.h +++ b/include/linux/bpfilter.h | |||
| @@ -3,13 +3,22 @@ | |||
| 3 | #define _LINUX_BPFILTER_H | 3 | #define _LINUX_BPFILTER_H |
| 4 | 4 | ||
| 5 | #include <uapi/linux/bpfilter.h> | 5 | #include <uapi/linux/bpfilter.h> |
| 6 | #include <linux/umh.h> | ||
| 6 | 7 | ||
| 7 | struct sock; | 8 | struct sock; |
| 8 | int bpfilter_ip_set_sockopt(struct sock *sk, int optname, char __user *optval, | 9 | int bpfilter_ip_set_sockopt(struct sock *sk, int optname, char __user *optval, |
| 9 | unsigned int optlen); | 10 | unsigned int optlen); |
| 10 | int bpfilter_ip_get_sockopt(struct sock *sk, int optname, char __user *optval, | 11 | int bpfilter_ip_get_sockopt(struct sock *sk, int optname, char __user *optval, |
| 11 | int __user *optlen); | 12 | int __user *optlen); |
| 12 | extern int (*bpfilter_process_sockopt)(struct sock *sk, int optname, | 13 | struct bpfilter_umh_ops { |
| 13 | char __user *optval, | 14 | struct umh_info info; |
| 14 | unsigned int optlen, bool is_set); | 15 | /* since ip_getsockopt() can run in parallel, serialize access to umh */ |
| 16 | struct mutex lock; | ||
| 17 | int (*sockopt)(struct sock *sk, int optname, | ||
| 18 | char __user *optval, | ||
| 19 | unsigned int optlen, bool is_set); | ||
| 20 | int (*start)(void); | ||
| 21 | bool stop; | ||
| 22 | }; | ||
| 23 | extern struct bpfilter_umh_ops bpfilter_ops; | ||
| 15 | #endif | 24 | #endif |
diff --git a/include/linux/ceph/libceph.h b/include/linux/ceph/libceph.h index 68bb09c29ce8..a420c07904bc 100644 --- a/include/linux/ceph/libceph.h +++ b/include/linux/ceph/libceph.h | |||
| @@ -35,6 +35,7 @@ | |||
| 35 | #define CEPH_OPT_NOMSGAUTH (1<<4) /* don't require msg signing feat */ | 35 | #define CEPH_OPT_NOMSGAUTH (1<<4) /* don't require msg signing feat */ |
| 36 | #define CEPH_OPT_TCP_NODELAY (1<<5) /* TCP_NODELAY on TCP sockets */ | 36 | #define CEPH_OPT_TCP_NODELAY (1<<5) /* TCP_NODELAY on TCP sockets */ |
| 37 | #define CEPH_OPT_NOMSGSIGN (1<<6) /* don't sign msgs */ | 37 | #define CEPH_OPT_NOMSGSIGN (1<<6) /* don't sign msgs */ |
| 38 | #define CEPH_OPT_ABORT_ON_FULL (1<<7) /* abort w/ ENOSPC when full */ | ||
| 38 | 39 | ||
| 39 | #define CEPH_OPT_DEFAULT (CEPH_OPT_TCP_NODELAY) | 40 | #define CEPH_OPT_DEFAULT (CEPH_OPT_TCP_NODELAY) |
| 40 | 41 | ||
| @@ -53,7 +54,7 @@ struct ceph_options { | |||
| 53 | unsigned long osd_request_timeout; /* jiffies */ | 54 | unsigned long osd_request_timeout; /* jiffies */ |
| 54 | 55 | ||
| 55 | /* | 56 | /* |
| 56 | * any type that can't be simply compared or doesn't need need | 57 | * any type that can't be simply compared or doesn't need |
| 57 | * to be compared should go beyond this point, | 58 | * to be compared should go beyond this point, |
| 58 | * ceph_compare_options() should be updated accordingly | 59 | * ceph_compare_options() should be updated accordingly |
| 59 | */ | 60 | */ |
| @@ -281,7 +282,8 @@ extern struct ceph_options *ceph_parse_options(char *options, | |||
| 281 | const char *dev_name, const char *dev_name_end, | 282 | const char *dev_name, const char *dev_name_end, |
| 282 | int (*parse_extra_token)(char *c, void *private), | 283 | int (*parse_extra_token)(char *c, void *private), |
| 283 | void *private); | 284 | void *private); |
| 284 | int ceph_print_client_options(struct seq_file *m, struct ceph_client *client); | 285 | int ceph_print_client_options(struct seq_file *m, struct ceph_client *client, |
| 286 | bool show_all); | ||
| 285 | extern void ceph_destroy_options(struct ceph_options *opt); | 287 | extern void ceph_destroy_options(struct ceph_options *opt); |
| 286 | extern int ceph_compare_options(struct ceph_options *new_opt, | 288 | extern int ceph_compare_options(struct ceph_options *new_opt, |
| 287 | struct ceph_client *client); | 289 | struct ceph_client *client); |
diff --git a/include/linux/ceph/osd_client.h b/include/linux/ceph/osd_client.h index 7a2af5034278..2294f963dab7 100644 --- a/include/linux/ceph/osd_client.h +++ b/include/linux/ceph/osd_client.h | |||
| @@ -354,7 +354,6 @@ struct ceph_osd_client { | |||
| 354 | struct rb_root linger_map_checks; | 354 | struct rb_root linger_map_checks; |
| 355 | atomic_t num_requests; | 355 | atomic_t num_requests; |
| 356 | atomic_t num_homeless; | 356 | atomic_t num_homeless; |
| 357 | bool abort_on_full; /* abort w/ ENOSPC when full */ | ||
| 358 | int abort_err; | 357 | int abort_err; |
| 359 | struct delayed_work timeout_work; | 358 | struct delayed_work timeout_work; |
| 360 | struct delayed_work osds_timeout_work; | 359 | struct delayed_work osds_timeout_work; |
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index e443fa9fa859..b7cf80a71293 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
| @@ -792,6 +792,9 @@ unsigned int __clk_get_enable_count(struct clk *clk); | |||
| 792 | unsigned long clk_hw_get_rate(const struct clk_hw *hw); | 792 | unsigned long clk_hw_get_rate(const struct clk_hw *hw); |
| 793 | unsigned long __clk_get_flags(struct clk *clk); | 793 | unsigned long __clk_get_flags(struct clk *clk); |
| 794 | unsigned long clk_hw_get_flags(const struct clk_hw *hw); | 794 | unsigned long clk_hw_get_flags(const struct clk_hw *hw); |
| 795 | #define clk_hw_can_set_rate_parent(hw) \ | ||
| 796 | (clk_hw_get_flags((hw)) & CLK_SET_RATE_PARENT) | ||
| 797 | |||
| 795 | bool clk_hw_is_prepared(const struct clk_hw *hw); | 798 | bool clk_hw_is_prepared(const struct clk_hw *hw); |
| 796 | bool clk_hw_rate_is_protected(const struct clk_hw *hw); | 799 | bool clk_hw_rate_is_protected(const struct clk_hw *hw); |
| 797 | bool clk_hw_is_enabled(const struct clk_hw *hw); | 800 | bool clk_hw_is_enabled(const struct clk_hw *hw); |
diff --git a/include/linux/clk.h b/include/linux/clk.h index a7773b5c0b9f..d8bc1a856b39 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h | |||
| @@ -384,6 +384,17 @@ int __must_check devm_clk_bulk_get_all(struct device *dev, | |||
| 384 | struct clk *devm_clk_get(struct device *dev, const char *id); | 384 | struct clk *devm_clk_get(struct device *dev, const char *id); |
| 385 | 385 | ||
| 386 | /** | 386 | /** |
| 387 | * devm_clk_get_optional - lookup and obtain a managed reference to an optional | ||
| 388 | * clock producer. | ||
| 389 | * @dev: device for clock "consumer" | ||
| 390 | * @id: clock consumer ID | ||
| 391 | * | ||
| 392 | * Behaves the same as devm_clk_get() except where there is no clock producer. | ||
| 393 | * In this case, instead of returning -ENOENT, the function returns NULL. | ||
| 394 | */ | ||
| 395 | struct clk *devm_clk_get_optional(struct device *dev, const char *id); | ||
| 396 | |||
| 397 | /** | ||
| 387 | * devm_get_clk_from_child - lookup and obtain a managed reference to a | 398 | * devm_get_clk_from_child - lookup and obtain a managed reference to a |
| 388 | * clock producer from child node. | 399 | * clock producer from child node. |
| 389 | * @dev: device for clock "consumer" | 400 | * @dev: device for clock "consumer" |
| @@ -718,6 +729,12 @@ static inline struct clk *devm_clk_get(struct device *dev, const char *id) | |||
| 718 | return NULL; | 729 | return NULL; |
| 719 | } | 730 | } |
| 720 | 731 | ||
| 732 | static inline struct clk *devm_clk_get_optional(struct device *dev, | ||
| 733 | const char *id) | ||
| 734 | { | ||
| 735 | return NULL; | ||
| 736 | } | ||
| 737 | |||
| 721 | static inline int __must_check devm_clk_bulk_get(struct device *dev, int num_clks, | 738 | static inline int __must_check devm_clk_bulk_get(struct device *dev, int num_clks, |
| 722 | struct clk_bulk_data *clks) | 739 | struct clk_bulk_data *clks) |
| 723 | { | 740 | { |
| @@ -862,6 +879,25 @@ static inline void clk_bulk_disable_unprepare(int num_clks, | |||
| 862 | clk_bulk_unprepare(num_clks, clks); | 879 | clk_bulk_unprepare(num_clks, clks); |
| 863 | } | 880 | } |
| 864 | 881 | ||
| 882 | /** | ||
| 883 | * clk_get_optional - lookup and obtain a reference to an optional clock | ||
| 884 | * producer. | ||
| 885 | * @dev: device for clock "consumer" | ||
| 886 | * @id: clock consumer ID | ||
| 887 | * | ||
| 888 | * Behaves the same as clk_get() except where there is no clock producer. In | ||
| 889 | * this case, instead of returning -ENOENT, the function returns NULL. | ||
| 890 | */ | ||
| 891 | static inline struct clk *clk_get_optional(struct device *dev, const char *id) | ||
| 892 | { | ||
| 893 | struct clk *clk = clk_get(dev, id); | ||
| 894 | |||
| 895 | if (clk == ERR_PTR(-ENOENT)) | ||
| 896 | return NULL; | ||
| 897 | |||
| 898 | return clk; | ||
| 899 | } | ||
| 900 | |||
| 865 | #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK) | 901 | #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK) |
| 866 | struct clk *of_clk_get(struct device_node *np, int index); | 902 | struct clk *of_clk_get(struct device_node *np, int index); |
| 867 | struct clk *of_clk_get_by_name(struct device_node *np, const char *name); | 903 | struct clk *of_clk_get_by_name(struct device_node *np, const char *name); |
diff --git a/include/linux/clk/ti.h b/include/linux/clk/ti.h index eacc5df57b99..78872efc7be0 100644 --- a/include/linux/clk/ti.h +++ b/include/linux/clk/ti.h | |||
| @@ -160,6 +160,7 @@ struct clk_hw_omap { | |||
| 160 | struct clockdomain *clkdm; | 160 | struct clockdomain *clkdm; |
| 161 | const struct clk_hw_omap_ops *ops; | 161 | const struct clk_hw_omap_ops *ops; |
| 162 | u32 context; | 162 | u32 context; |
| 163 | int autoidle_count; | ||
| 163 | }; | 164 | }; |
| 164 | 165 | ||
| 165 | /* | 166 | /* |
diff --git a/include/linux/clkdev.h b/include/linux/clkdev.h index 4890ff033220..ccb32af5848b 100644 --- a/include/linux/clkdev.h +++ b/include/linux/clkdev.h | |||
| @@ -52,4 +52,8 @@ int clk_add_alias(const char *, const char *, const char *, struct device *); | |||
| 52 | int clk_register_clkdev(struct clk *, const char *, const char *); | 52 | int clk_register_clkdev(struct clk *, const char *, const char *); |
| 53 | int clk_hw_register_clkdev(struct clk_hw *, const char *, const char *); | 53 | int clk_hw_register_clkdev(struct clk_hw *, const char *, const char *); |
| 54 | 54 | ||
| 55 | int devm_clk_hw_register_clkdev(struct device *dev, struct clk_hw *hw, | ||
| 56 | const char *con_id, const char *dev_id); | ||
| 57 | void devm_clk_release_clkdev(struct device *dev, const char *con_id, | ||
| 58 | const char *dev_id); | ||
| 55 | #endif | 59 | #endif |
diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h index 39f668d5066b..333a6695a918 100644 --- a/include/linux/compiler-clang.h +++ b/include/linux/compiler-clang.h | |||
| @@ -3,9 +3,8 @@ | |||
| 3 | #error "Please don't include <linux/compiler-clang.h> directly, include <linux/compiler.h> instead." | 3 | #error "Please don't include <linux/compiler-clang.h> directly, include <linux/compiler.h> instead." |
| 4 | #endif | 4 | #endif |
| 5 | 5 | ||
| 6 | /* Some compiler specific definitions are overwritten here | 6 | /* Compiler specific definitions for Clang compiler */ |
| 7 | * for Clang compiler | 7 | |
| 8 | */ | ||
| 9 | #define uninitialized_var(x) x = *(&(x)) | 8 | #define uninitialized_var(x) x = *(&(x)) |
| 10 | 9 | ||
| 11 | /* same as gcc, this was present in clang-2.6 so we can assume it works | 10 | /* same as gcc, this was present in clang-2.6 so we can assume it works |
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index 5776da43da97..e8579412ad21 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h | |||
| @@ -58,17 +58,13 @@ | |||
| 58 | (typeof(ptr)) (__ptr + (off)); \ | 58 | (typeof(ptr)) (__ptr + (off)); \ |
| 59 | }) | 59 | }) |
| 60 | 60 | ||
| 61 | /* Make the optimizer believe the variable can be manipulated arbitrarily. */ | ||
| 62 | #define OPTIMIZER_HIDE_VAR(var) \ | ||
| 63 | __asm__ ("" : "=r" (var) : "0" (var)) | ||
| 64 | |||
| 65 | /* | 61 | /* |
| 66 | * A trick to suppress uninitialized variable warning without generating any | 62 | * A trick to suppress uninitialized variable warning without generating any |
| 67 | * code | 63 | * code |
| 68 | */ | 64 | */ |
| 69 | #define uninitialized_var(x) x = x | 65 | #define uninitialized_var(x) x = x |
| 70 | 66 | ||
| 71 | #ifdef RETPOLINE | 67 | #ifdef CONFIG_RETPOLINE |
| 72 | #define __noretpoline __attribute__((__indirect_branch__("keep"))) | 68 | #define __noretpoline __attribute__((__indirect_branch__("keep"))) |
| 73 | #endif | 69 | #endif |
| 74 | 70 | ||
diff --git a/include/linux/compiler-intel.h b/include/linux/compiler-intel.h index 517bd14e1222..b17f3cd18334 100644 --- a/include/linux/compiler-intel.h +++ b/include/linux/compiler-intel.h | |||
| @@ -5,9 +5,7 @@ | |||
| 5 | 5 | ||
| 6 | #ifdef __ECC | 6 | #ifdef __ECC |
| 7 | 7 | ||
| 8 | /* Some compiler specific definitions are overwritten here | 8 | /* Compiler specific definitions for Intel ECC compiler */ |
| 9 | * for Intel ECC compiler | ||
| 10 | */ | ||
| 11 | 9 | ||
| 12 | #include <asm/intrinsics.h> | 10 | #include <asm/intrinsics.h> |
| 13 | 11 | ||
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index fc5004a4b07d..445348facea9 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
| @@ -161,7 +161,9 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, | |||
| 161 | #endif | 161 | #endif |
| 162 | 162 | ||
| 163 | #ifndef OPTIMIZER_HIDE_VAR | 163 | #ifndef OPTIMIZER_HIDE_VAR |
| 164 | #define OPTIMIZER_HIDE_VAR(var) barrier() | 164 | /* Make the optimizer believe the variable can be manipulated arbitrarily. */ |
| 165 | #define OPTIMIZER_HIDE_VAR(var) \ | ||
| 166 | __asm__ ("" : "=r" (var) : "0" (var)) | ||
| 165 | #endif | 167 | #endif |
| 166 | 168 | ||
| 167 | /* Not-quite-unique ID. */ | 169 | /* Not-quite-unique ID. */ |
diff --git a/include/linux/compiler_attributes.h b/include/linux/compiler_attributes.h index 19f32b0c29af..6b318efd8a74 100644 --- a/include/linux/compiler_attributes.h +++ b/include/linux/compiler_attributes.h | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | #ifndef __has_attribute | 34 | #ifndef __has_attribute |
| 35 | # define __has_attribute(x) __GCC4_has_attribute_##x | 35 | # define __has_attribute(x) __GCC4_has_attribute_##x |
| 36 | # define __GCC4_has_attribute___assume_aligned__ (__GNUC_MINOR__ >= 9) | 36 | # define __GCC4_has_attribute___assume_aligned__ (__GNUC_MINOR__ >= 9) |
| 37 | # define __GCC4_has_attribute___copy__ 0 | ||
| 37 | # define __GCC4_has_attribute___designated_init__ 0 | 38 | # define __GCC4_has_attribute___designated_init__ 0 |
| 38 | # define __GCC4_has_attribute___externally_visible__ 1 | 39 | # define __GCC4_has_attribute___externally_visible__ 1 |
| 39 | # define __GCC4_has_attribute___noclone__ 1 | 40 | # define __GCC4_has_attribute___noclone__ 1 |
| @@ -101,6 +102,19 @@ | |||
| 101 | #define __attribute_const__ __attribute__((__const__)) | 102 | #define __attribute_const__ __attribute__((__const__)) |
| 102 | 103 | ||
| 103 | /* | 104 | /* |
| 105 | * Optional: only supported since gcc >= 9 | ||
| 106 | * Optional: not supported by clang | ||
| 107 | * Optional: not supported by icc | ||
| 108 | * | ||
| 109 | * gcc: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-copy-function-attribute | ||
| 110 | */ | ||
| 111 | #if __has_attribute(__copy__) | ||
| 112 | # define __copy(symbol) __attribute__((__copy__(symbol))) | ||
| 113 | #else | ||
| 114 | # define __copy(symbol) | ||
| 115 | #endif | ||
| 116 | |||
| 117 | /* | ||
| 104 | * Don't. Just don't. See commit 771c035372a0 ("deprecate the '__deprecated' | 118 | * Don't. Just don't. See commit 771c035372a0 ("deprecate the '__deprecated' |
| 105 | * attribute warnings entirely and for good") for more information. | 119 | * attribute warnings entirely and for good") for more information. |
| 106 | * | 120 | * |
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 218df7f4d3e1..5041357d0297 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
| @@ -180,12 +180,10 @@ enum cpuhp_smt_control { | |||
| 180 | #if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_SMT) | 180 | #if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_SMT) |
| 181 | extern enum cpuhp_smt_control cpu_smt_control; | 181 | extern enum cpuhp_smt_control cpu_smt_control; |
| 182 | extern void cpu_smt_disable(bool force); | 182 | extern void cpu_smt_disable(bool force); |
| 183 | extern void cpu_smt_check_topology_early(void); | ||
| 184 | extern void cpu_smt_check_topology(void); | 183 | extern void cpu_smt_check_topology(void); |
| 185 | #else | 184 | #else |
| 186 | # define cpu_smt_control (CPU_SMT_ENABLED) | 185 | # define cpu_smt_control (CPU_SMT_ENABLED) |
| 187 | static inline void cpu_smt_disable(bool force) { } | 186 | static inline void cpu_smt_disable(bool force) { } |
| 188 | static inline void cpu_smt_check_topology_early(void) { } | ||
| 189 | static inline void cpu_smt_check_topology(void) { } | 187 | static inline void cpu_smt_check_topology(void) { } |
| 190 | #endif | 188 | #endif |
| 191 | 189 | ||
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index ef4b70f64f33..60996e64c579 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
| @@ -62,9 +62,10 @@ extern const struct qstr slash_name; | |||
| 62 | struct dentry_stat_t { | 62 | struct dentry_stat_t { |
| 63 | long nr_dentry; | 63 | long nr_dentry; |
| 64 | long nr_unused; | 64 | long nr_unused; |
| 65 | long age_limit; /* age in seconds */ | 65 | long age_limit; /* age in seconds */ |
| 66 | long want_pages; /* pages requested by system */ | 66 | long want_pages; /* pages requested by system */ |
| 67 | long dummy[2]; | 67 | long nr_negative; /* # of unused negative dentries */ |
| 68 | long dummy; /* Reserved for future use */ | ||
| 68 | }; | 69 | }; |
| 69 | extern struct dentry_stat_t dentry_stat; | 70 | extern struct dentry_stat_t dentry_stat; |
| 70 | 71 | ||
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index cef2127e1d70..f6ded992c183 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h | |||
| @@ -717,15 +717,6 @@ static inline unsigned long dma_max_pfn(struct device *dev) | |||
| 717 | } | 717 | } |
| 718 | #endif | 718 | #endif |
| 719 | 719 | ||
| 720 | /* | ||
| 721 | * Please always use dma_alloc_coherent instead as it already zeroes the memory! | ||
| 722 | */ | ||
| 723 | static inline void *dma_zalloc_coherent(struct device *dev, size_t size, | ||
| 724 | dma_addr_t *dma_handle, gfp_t flag) | ||
| 725 | { | ||
| 726 | return dma_alloc_coherent(dev, size, dma_handle, flag); | ||
| 727 | } | ||
| 728 | |||
| 729 | static inline int dma_get_cache_alignment(void) | 720 | static inline int dma_get_cache_alignment(void) |
| 730 | { | 721 | { |
| 731 | #ifdef ARCH_DMA_MINALIGN | 722 | #ifdef ARCH_DMA_MINALIGN |
diff --git a/include/linux/efi.h b/include/linux/efi.h index 45ff763fba76..28604a8d0aa9 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h | |||
| @@ -1198,8 +1198,6 @@ static inline bool efi_enabled(int feature) | |||
| 1198 | extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); | 1198 | extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); |
| 1199 | 1199 | ||
| 1200 | extern bool efi_is_table_address(unsigned long phys_addr); | 1200 | extern bool efi_is_table_address(unsigned long phys_addr); |
| 1201 | |||
| 1202 | extern int efi_apply_persistent_mem_reservations(void); | ||
| 1203 | #else | 1201 | #else |
| 1204 | static inline bool efi_enabled(int feature) | 1202 | static inline bool efi_enabled(int feature) |
| 1205 | { | 1203 | { |
| @@ -1218,11 +1216,6 @@ static inline bool efi_is_table_address(unsigned long phys_addr) | |||
| 1218 | { | 1216 | { |
| 1219 | return false; | 1217 | return false; |
| 1220 | } | 1218 | } |
| 1221 | |||
| 1222 | static inline int efi_apply_persistent_mem_reservations(void) | ||
| 1223 | { | ||
| 1224 | return 0; | ||
| 1225 | } | ||
| 1226 | #endif | 1219 | #endif |
| 1227 | 1220 | ||
| 1228 | extern int efi_status_to_err(efi_status_t status); | 1221 | extern int efi_status_to_err(efi_status_t status); |
diff --git a/include/linux/fb.h b/include/linux/fb.h index 7cdd31a69719..f52ef0ad6781 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
| @@ -653,6 +653,7 @@ extern int fb_new_modelist(struct fb_info *info); | |||
| 653 | 653 | ||
| 654 | extern struct fb_info *registered_fb[FB_MAX]; | 654 | extern struct fb_info *registered_fb[FB_MAX]; |
| 655 | extern int num_registered_fb; | 655 | extern int num_registered_fb; |
| 656 | extern bool fb_center_logo; | ||
| 656 | extern struct class *fb_class; | 657 | extern struct class *fb_class; |
| 657 | 658 | ||
| 658 | #define for_each_registered_fb(i) \ | 659 | #define for_each_registered_fb(i) \ |
diff --git a/include/linux/filter.h b/include/linux/filter.h index ad106d845b22..e532fcc6e4b5 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h | |||
| @@ -591,8 +591,8 @@ static inline u8 *bpf_skb_cb(struct sk_buff *skb) | |||
| 591 | return qdisc_skb_cb(skb)->data; | 591 | return qdisc_skb_cb(skb)->data; |
| 592 | } | 592 | } |
| 593 | 593 | ||
| 594 | static inline u32 bpf_prog_run_save_cb(const struct bpf_prog *prog, | 594 | static inline u32 __bpf_prog_run_save_cb(const struct bpf_prog *prog, |
| 595 | struct sk_buff *skb) | 595 | struct sk_buff *skb) |
| 596 | { | 596 | { |
| 597 | u8 *cb_data = bpf_skb_cb(skb); | 597 | u8 *cb_data = bpf_skb_cb(skb); |
| 598 | u8 cb_saved[BPF_SKB_CB_LEN]; | 598 | u8 cb_saved[BPF_SKB_CB_LEN]; |
| @@ -611,15 +611,30 @@ static inline u32 bpf_prog_run_save_cb(const struct bpf_prog *prog, | |||
| 611 | return res; | 611 | return res; |
| 612 | } | 612 | } |
| 613 | 613 | ||
| 614 | static inline u32 bpf_prog_run_save_cb(const struct bpf_prog *prog, | ||
| 615 | struct sk_buff *skb) | ||
| 616 | { | ||
| 617 | u32 res; | ||
| 618 | |||
| 619 | preempt_disable(); | ||
| 620 | res = __bpf_prog_run_save_cb(prog, skb); | ||
| 621 | preempt_enable(); | ||
| 622 | return res; | ||
| 623 | } | ||
| 624 | |||
| 614 | static inline u32 bpf_prog_run_clear_cb(const struct bpf_prog *prog, | 625 | static inline u32 bpf_prog_run_clear_cb(const struct bpf_prog *prog, |
| 615 | struct sk_buff *skb) | 626 | struct sk_buff *skb) |
| 616 | { | 627 | { |
| 617 | u8 *cb_data = bpf_skb_cb(skb); | 628 | u8 *cb_data = bpf_skb_cb(skb); |
| 629 | u32 res; | ||
| 618 | 630 | ||
| 619 | if (unlikely(prog->cb_access)) | 631 | if (unlikely(prog->cb_access)) |
| 620 | memset(cb_data, 0, BPF_SKB_CB_LEN); | 632 | memset(cb_data, 0, BPF_SKB_CB_LEN); |
| 621 | 633 | ||
| 622 | return BPF_PROG_RUN(prog, skb); | 634 | preempt_disable(); |
| 635 | res = BPF_PROG_RUN(prog, skb); | ||
| 636 | preempt_enable(); | ||
| 637 | return res; | ||
| 623 | } | 638 | } |
| 624 | 639 | ||
| 625 | static __always_inline u32 bpf_prog_run_xdp(const struct bpf_prog *prog, | 640 | static __always_inline u32 bpf_prog_run_xdp(const struct bpf_prog *prog, |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 811c77743dad..29d8e2cfed0e 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -1479,11 +1479,12 @@ struct super_block { | |||
| 1479 | struct user_namespace *s_user_ns; | 1479 | struct user_namespace *s_user_ns; |
| 1480 | 1480 | ||
| 1481 | /* | 1481 | /* |
| 1482 | * Keep the lru lists last in the structure so they always sit on their | 1482 | * The list_lru structure is essentially just a pointer to a table |
| 1483 | * own individual cachelines. | 1483 | * of per-node lru lists, each of which has its own spinlock. |
| 1484 | * There is no need to put them into separate cachelines. | ||
| 1484 | */ | 1485 | */ |
| 1485 | struct list_lru s_dentry_lru ____cacheline_aligned_in_smp; | 1486 | struct list_lru s_dentry_lru; |
| 1486 | struct list_lru s_inode_lru ____cacheline_aligned_in_smp; | 1487 | struct list_lru s_inode_lru; |
| 1487 | struct rcu_head rcu; | 1488 | struct rcu_head rcu; |
| 1488 | struct work_struct destroy_work; | 1489 | struct work_struct destroy_work; |
| 1489 | 1490 | ||
diff --git a/include/linux/hid-debug.h b/include/linux/hid-debug.h index 8663f216c563..2d6100edf204 100644 --- a/include/linux/hid-debug.h +++ b/include/linux/hid-debug.h | |||
| @@ -24,7 +24,10 @@ | |||
| 24 | 24 | ||
| 25 | #ifdef CONFIG_DEBUG_FS | 25 | #ifdef CONFIG_DEBUG_FS |
| 26 | 26 | ||
| 27 | #include <linux/kfifo.h> | ||
| 28 | |||
| 27 | #define HID_DEBUG_BUFSIZE 512 | 29 | #define HID_DEBUG_BUFSIZE 512 |
| 30 | #define HID_DEBUG_FIFOSIZE 512 | ||
| 28 | 31 | ||
| 29 | void hid_dump_input(struct hid_device *, struct hid_usage *, __s32); | 32 | void hid_dump_input(struct hid_device *, struct hid_usage *, __s32); |
| 30 | void hid_dump_report(struct hid_device *, int , u8 *, int); | 33 | void hid_dump_report(struct hid_device *, int , u8 *, int); |
| @@ -37,11 +40,8 @@ void hid_debug_init(void); | |||
| 37 | void hid_debug_exit(void); | 40 | void hid_debug_exit(void); |
| 38 | void hid_debug_event(struct hid_device *, char *); | 41 | void hid_debug_event(struct hid_device *, char *); |
| 39 | 42 | ||
| 40 | |||
| 41 | struct hid_debug_list { | 43 | struct hid_debug_list { |
| 42 | char *hid_debug_buf; | 44 | DECLARE_KFIFO_PTR(hid_debug_fifo, char); |
| 43 | int head; | ||
| 44 | int tail; | ||
| 45 | struct fasync_struct *fasync; | 45 | struct fasync_struct *fasync; |
| 46 | struct hid_device *hdev; | 46 | struct hid_device *hdev; |
| 47 | struct list_head node; | 47 | struct list_head node; |
| @@ -64,4 +64,3 @@ struct hid_debug_list { | |||
| 64 | #endif | 64 | #endif |
| 65 | 65 | ||
| 66 | #endif | 66 | #endif |
| 67 | |||
diff --git a/include/linux/hid.h b/include/linux/hid.h index d99287327ef2..f9707d1dcb58 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
| @@ -430,7 +430,7 @@ struct hid_local { | |||
| 430 | */ | 430 | */ |
| 431 | 431 | ||
| 432 | struct hid_collection { | 432 | struct hid_collection { |
| 433 | struct hid_collection *parent; | 433 | int parent_idx; /* device->collection */ |
| 434 | unsigned type; | 434 | unsigned type; |
| 435 | unsigned usage; | 435 | unsigned usage; |
| 436 | unsigned level; | 436 | unsigned level; |
| @@ -658,7 +658,6 @@ struct hid_parser { | |||
| 658 | unsigned int *collection_stack; | 658 | unsigned int *collection_stack; |
| 659 | unsigned int collection_stack_ptr; | 659 | unsigned int collection_stack_ptr; |
| 660 | unsigned int collection_stack_size; | 660 | unsigned int collection_stack_size; |
| 661 | struct hid_collection *active_collection; | ||
| 662 | struct hid_device *device; | 661 | struct hid_device *device; |
| 663 | unsigned int scan_flags; | 662 | unsigned int scan_flags; |
| 664 | }; | 663 | }; |
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h index f0885cc01db6..dcb6977afce9 100644 --- a/include/linux/hyperv.h +++ b/include/linux/hyperv.h | |||
| @@ -1159,8 +1159,9 @@ struct hv_ring_buffer_debug_info { | |||
| 1159 | u32 bytes_avail_towrite; | 1159 | u32 bytes_avail_towrite; |
| 1160 | }; | 1160 | }; |
| 1161 | 1161 | ||
| 1162 | void hv_ringbuffer_get_debuginfo(const struct hv_ring_buffer_info *ring_info, | 1162 | |
| 1163 | struct hv_ring_buffer_debug_info *debug_info); | 1163 | int hv_ringbuffer_get_debuginfo(const struct hv_ring_buffer_info *ring_info, |
| 1164 | struct hv_ring_buffer_debug_info *debug_info); | ||
| 1164 | 1165 | ||
| 1165 | /* Vmbus interface */ | 1166 | /* Vmbus interface */ |
| 1166 | #define vmbus_driver_register(driver) \ | 1167 | #define vmbus_driver_register(driver) \ |
diff --git a/include/linux/ide.h b/include/linux/ide.h index e7d29ae633cd..971cf76a78a0 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -615,6 +615,7 @@ struct ide_drive_s { | |||
| 615 | 615 | ||
| 616 | /* current sense rq and buffer */ | 616 | /* current sense rq and buffer */ |
| 617 | bool sense_rq_armed; | 617 | bool sense_rq_armed; |
| 618 | bool sense_rq_active; | ||
| 618 | struct request *sense_rq; | 619 | struct request *sense_rq; |
| 619 | struct request_sense sense_data; | 620 | struct request_sense sense_data; |
| 620 | 621 | ||
| @@ -1219,6 +1220,7 @@ extern void ide_stall_queue(ide_drive_t *drive, unsigned long timeout); | |||
| 1219 | extern void ide_timer_expiry(struct timer_list *t); | 1220 | extern void ide_timer_expiry(struct timer_list *t); |
| 1220 | extern irqreturn_t ide_intr(int irq, void *dev_id); | 1221 | extern irqreturn_t ide_intr(int irq, void *dev_id); |
| 1221 | extern blk_status_t ide_queue_rq(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *); | 1222 | extern blk_status_t ide_queue_rq(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *); |
| 1223 | extern blk_status_t ide_issue_rq(ide_drive_t *, struct request *, bool); | ||
| 1222 | extern void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq); | 1224 | extern void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq); |
| 1223 | 1225 | ||
| 1224 | void ide_init_disk(struct gendisk *, ide_drive_t *); | 1226 | void ide_init_disk(struct gendisk *, ide_drive_t *); |
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h index 6756fea18b69..e44746de95cd 100644 --- a/include/linux/if_arp.h +++ b/include/linux/if_arp.h | |||
| @@ -54,6 +54,7 @@ static inline bool dev_is_mac_header_xmit(const struct net_device *dev) | |||
| 54 | case ARPHRD_IPGRE: | 54 | case ARPHRD_IPGRE: |
| 55 | case ARPHRD_VOID: | 55 | case ARPHRD_VOID: |
| 56 | case ARPHRD_NONE: | 56 | case ARPHRD_NONE: |
| 57 | case ARPHRD_RAWIP: | ||
| 57 | return false; | 58 | return false; |
| 58 | default: | 59 | default: |
| 59 | return true; | 60 | return true; |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index c672f34235e7..4a728dba02e2 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -260,6 +260,7 @@ struct irq_affinity { | |||
| 260 | /** | 260 | /** |
| 261 | * struct irq_affinity_desc - Interrupt affinity descriptor | 261 | * struct irq_affinity_desc - Interrupt affinity descriptor |
| 262 | * @mask: cpumask to hold the affinity assignment | 262 | * @mask: cpumask to hold the affinity assignment |
| 263 | * @is_managed: 1 if the interrupt is managed internally | ||
| 263 | */ | 264 | */ |
| 264 | struct irq_affinity_desc { | 265 | struct irq_affinity_desc { |
| 265 | struct cpumask mask; | 266 | struct cpumask mask; |
diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h index 071b4cbdf010..c848a7cc502e 100644 --- a/include/linux/irqchip/arm-gic-v3.h +++ b/include/linux/irqchip/arm-gic-v3.h | |||
| @@ -319,7 +319,7 @@ | |||
| 319 | #define GITS_TYPER_PLPIS (1UL << 0) | 319 | #define GITS_TYPER_PLPIS (1UL << 0) |
| 320 | #define GITS_TYPER_VLPIS (1UL << 1) | 320 | #define GITS_TYPER_VLPIS (1UL << 1) |
| 321 | #define GITS_TYPER_ITT_ENTRY_SIZE_SHIFT 4 | 321 | #define GITS_TYPER_ITT_ENTRY_SIZE_SHIFT 4 |
| 322 | #define GITS_TYPER_ITT_ENTRY_SIZE(r) ((((r) >> GITS_TYPER_ITT_ENTRY_SIZE_SHIFT) & 0x1f) + 1) | 322 | #define GITS_TYPER_ITT_ENTRY_SIZE(r) ((((r) >> GITS_TYPER_ITT_ENTRY_SIZE_SHIFT) & 0xf) + 1) |
| 323 | #define GITS_TYPER_IDBITS_SHIFT 8 | 323 | #define GITS_TYPER_IDBITS_SHIFT 8 |
| 324 | #define GITS_TYPER_DEVBITS_SHIFT 13 | 324 | #define GITS_TYPER_DEVBITS_SHIFT 13 |
| 325 | #define GITS_TYPER_DEVBITS(r) ((((r) >> GITS_TYPER_DEVBITS_SHIFT) & 0x1f) + 1) | 325 | #define GITS_TYPER_DEVBITS(r) ((((r) >> GITS_TYPER_DEVBITS_SHIFT) & 0x1f) + 1) |
diff --git a/include/linux/key-type.h b/include/linux/key-type.h index bc9af551fc83..e49d1de0614e 100644 --- a/include/linux/key-type.h +++ b/include/linux/key-type.h | |||
| @@ -21,15 +21,6 @@ struct kernel_pkey_query; | |||
| 21 | struct kernel_pkey_params; | 21 | struct kernel_pkey_params; |
| 22 | 22 | ||
| 23 | /* | 23 | /* |
| 24 | * key under-construction record | ||
| 25 | * - passed to the request_key actor if supplied | ||
| 26 | */ | ||
| 27 | struct key_construction { | ||
| 28 | struct key *key; /* key being constructed */ | ||
| 29 | struct key *authkey;/* authorisation for key being constructed */ | ||
| 30 | }; | ||
| 31 | |||
| 32 | /* | ||
| 33 | * Pre-parsed payload, used by key add, update and instantiate. | 24 | * Pre-parsed payload, used by key add, update and instantiate. |
| 34 | * | 25 | * |
| 35 | * This struct will be cleared and data and datalen will be set with the data | 26 | * This struct will be cleared and data and datalen will be set with the data |
| @@ -50,8 +41,7 @@ struct key_preparsed_payload { | |||
| 50 | time64_t expiry; /* Expiry time of key */ | 41 | time64_t expiry; /* Expiry time of key */ |
| 51 | } __randomize_layout; | 42 | } __randomize_layout; |
| 52 | 43 | ||
| 53 | typedef int (*request_key_actor_t)(struct key_construction *key, | 44 | typedef int (*request_key_actor_t)(struct key *auth_key, void *aux); |
| 54 | const char *op, void *aux); | ||
| 55 | 45 | ||
| 56 | /* | 46 | /* |
| 57 | * Preparsed matching criterion. | 47 | * Preparsed matching criterion. |
| @@ -181,20 +171,20 @@ extern int key_instantiate_and_link(struct key *key, | |||
| 181 | const void *data, | 171 | const void *data, |
| 182 | size_t datalen, | 172 | size_t datalen, |
| 183 | struct key *keyring, | 173 | struct key *keyring, |
| 184 | struct key *instkey); | 174 | struct key *authkey); |
| 185 | extern int key_reject_and_link(struct key *key, | 175 | extern int key_reject_and_link(struct key *key, |
| 186 | unsigned timeout, | 176 | unsigned timeout, |
| 187 | unsigned error, | 177 | unsigned error, |
| 188 | struct key *keyring, | 178 | struct key *keyring, |
| 189 | struct key *instkey); | 179 | struct key *authkey); |
| 190 | extern void complete_request_key(struct key_construction *cons, int error); | 180 | extern void complete_request_key(struct key *authkey, int error); |
| 191 | 181 | ||
| 192 | static inline int key_negate_and_link(struct key *key, | 182 | static inline int key_negate_and_link(struct key *key, |
| 193 | unsigned timeout, | 183 | unsigned timeout, |
| 194 | struct key *keyring, | 184 | struct key *keyring, |
| 195 | struct key *instkey) | 185 | struct key *authkey) |
| 196 | { | 186 | { |
| 197 | return key_reject_and_link(key, timeout, ENOKEY, keyring, instkey); | 187 | return key_reject_and_link(key, timeout, ENOKEY, keyring, authkey); |
| 198 | } | 188 | } |
| 199 | 189 | ||
| 200 | extern int generic_key_instantiate(struct key *key, struct key_preparsed_payload *prep); | 190 | extern int generic_key_instantiate(struct key *key, struct key_preparsed_payload *prep); |
diff --git a/include/linux/libnvdimm.h b/include/linux/libnvdimm.h index 5440f11b0907..ad609617aeb8 100644 --- a/include/linux/libnvdimm.h +++ b/include/linux/libnvdimm.h | |||
| @@ -160,6 +160,7 @@ static inline struct nd_blk_region_desc *to_blk_region_desc( | |||
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | enum nvdimm_security_state { | 162 | enum nvdimm_security_state { |
| 163 | NVDIMM_SECURITY_ERROR = -1, | ||
| 163 | NVDIMM_SECURITY_DISABLED, | 164 | NVDIMM_SECURITY_DISABLED, |
| 164 | NVDIMM_SECURITY_UNLOCKED, | 165 | NVDIMM_SECURITY_UNLOCKED, |
| 165 | NVDIMM_SECURITY_LOCKED, | 166 | NVDIMM_SECURITY_LOCKED, |
| @@ -234,7 +235,6 @@ static inline struct nvdimm *nvdimm_create(struct nvdimm_bus *nvdimm_bus, | |||
| 234 | cmd_mask, num_flush, flush_wpq, NULL, NULL); | 235 | cmd_mask, num_flush, flush_wpq, NULL, NULL); |
| 235 | } | 236 | } |
| 236 | 237 | ||
| 237 | int nvdimm_security_setup_events(struct nvdimm *nvdimm); | ||
| 238 | const struct nd_cmd_desc *nd_cmd_dimm_desc(int cmd); | 238 | const struct nd_cmd_desc *nd_cmd_dimm_desc(int cmd); |
| 239 | const struct nd_cmd_desc *nd_cmd_bus_desc(int cmd); | 239 | const struct nd_cmd_desc *nd_cmd_bus_desc(int cmd); |
| 240 | u32 nd_cmd_in_size(struct nvdimm *nvdimm, int cmd, | 240 | u32 nd_cmd_in_size(struct nvdimm *nvdimm, int cmd, |
diff --git a/include/linux/memblock.h b/include/linux/memblock.h index 64c41cf45590..859b55b66db2 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h | |||
| @@ -29,9 +29,6 @@ extern unsigned long max_pfn; | |||
| 29 | */ | 29 | */ |
| 30 | extern unsigned long long max_possible_pfn; | 30 | extern unsigned long long max_possible_pfn; |
| 31 | 31 | ||
| 32 | #define INIT_MEMBLOCK_REGIONS 128 | ||
| 33 | #define INIT_PHYSMEM_REGIONS 4 | ||
| 34 | |||
| 35 | /** | 32 | /** |
| 36 | * enum memblock_flags - definition of memory region attributes | 33 | * enum memblock_flags - definition of memory region attributes |
| 37 | * @MEMBLOCK_NONE: no special request | 34 | * @MEMBLOCK_NONE: no special request |
diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 07da5c6c5ba0..368267c1b71b 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h | |||
| @@ -21,14 +21,16 @@ struct vmem_altmap; | |||
| 21 | * walkers which rely on the fully initialized page->flags and others | 21 | * walkers which rely on the fully initialized page->flags and others |
| 22 | * should use this rather than pfn_valid && pfn_to_page | 22 | * should use this rather than pfn_valid && pfn_to_page |
| 23 | */ | 23 | */ |
| 24 | #define pfn_to_online_page(pfn) \ | 24 | #define pfn_to_online_page(pfn) \ |
| 25 | ({ \ | 25 | ({ \ |
| 26 | struct page *___page = NULL; \ | 26 | struct page *___page = NULL; \ |
| 27 | unsigned long ___nr = pfn_to_section_nr(pfn); \ | 27 | unsigned long ___pfn = pfn; \ |
| 28 | \ | 28 | unsigned long ___nr = pfn_to_section_nr(___pfn); \ |
| 29 | if (___nr < NR_MEM_SECTIONS && online_section_nr(___nr))\ | 29 | \ |
| 30 | ___page = pfn_to_page(pfn); \ | 30 | if (___nr < NR_MEM_SECTIONS && online_section_nr(___nr) && \ |
| 31 | ___page; \ | 31 | pfn_valid_within(___pfn)) \ |
| 32 | ___page = pfn_to_page(___pfn); \ | ||
| 33 | ___page; \ | ||
| 32 | }) | 34 | }) |
| 33 | 35 | ||
| 34 | /* | 36 | /* |
diff --git a/include/linux/mfd/cros_ec_commands.h b/include/linux/mfd/cros_ec_commands.h index 9a9631f0559e..fc91082d4c35 100644 --- a/include/linux/mfd/cros_ec_commands.h +++ b/include/linux/mfd/cros_ec_commands.h | |||
| @@ -2791,6 +2791,100 @@ struct ec_response_battery_vendor_param { | |||
| 2791 | } __packed; | 2791 | } __packed; |
| 2792 | 2792 | ||
| 2793 | /*****************************************************************************/ | 2793 | /*****************************************************************************/ |
| 2794 | /* Commands for I2S recording on audio codec. */ | ||
| 2795 | |||
| 2796 | #define EC_CMD_CODEC_I2S 0x00BC | ||
| 2797 | |||
| 2798 | enum ec_codec_i2s_subcmd { | ||
| 2799 | EC_CODEC_SET_SAMPLE_DEPTH = 0x0, | ||
| 2800 | EC_CODEC_SET_GAIN = 0x1, | ||
| 2801 | EC_CODEC_GET_GAIN = 0x2, | ||
| 2802 | EC_CODEC_I2S_ENABLE = 0x3, | ||
| 2803 | EC_CODEC_I2S_SET_CONFIG = 0x4, | ||
| 2804 | EC_CODEC_I2S_SET_TDM_CONFIG = 0x5, | ||
| 2805 | EC_CODEC_I2S_SET_BCLK = 0x6, | ||
| 2806 | }; | ||
| 2807 | |||
| 2808 | enum ec_sample_depth_value { | ||
| 2809 | EC_CODEC_SAMPLE_DEPTH_16 = 0, | ||
| 2810 | EC_CODEC_SAMPLE_DEPTH_24 = 1, | ||
| 2811 | }; | ||
| 2812 | |||
| 2813 | enum ec_i2s_config { | ||
| 2814 | EC_DAI_FMT_I2S = 0, | ||
| 2815 | EC_DAI_FMT_RIGHT_J = 1, | ||
| 2816 | EC_DAI_FMT_LEFT_J = 2, | ||
| 2817 | EC_DAI_FMT_PCM_A = 3, | ||
| 2818 | EC_DAI_FMT_PCM_B = 4, | ||
| 2819 | EC_DAI_FMT_PCM_TDM = 5, | ||
| 2820 | }; | ||
| 2821 | |||
| 2822 | struct ec_param_codec_i2s { | ||
| 2823 | /* | ||
| 2824 | * enum ec_codec_i2s_subcmd | ||
| 2825 | */ | ||
| 2826 | uint8_t cmd; | ||
| 2827 | union { | ||
| 2828 | /* | ||
| 2829 | * EC_CODEC_SET_SAMPLE_DEPTH | ||
| 2830 | * Value should be one of ec_sample_depth_value. | ||
| 2831 | */ | ||
| 2832 | uint8_t depth; | ||
| 2833 | |||
| 2834 | /* | ||
| 2835 | * EC_CODEC_SET_GAIN | ||
| 2836 | * Value should be 0~43 for both channels. | ||
| 2837 | */ | ||
| 2838 | struct ec_param_codec_i2s_set_gain { | ||
| 2839 | uint8_t left; | ||
| 2840 | uint8_t right; | ||
| 2841 | } __packed gain; | ||
| 2842 | |||
| 2843 | /* | ||
| 2844 | * EC_CODEC_I2S_ENABLE | ||
| 2845 | * 1 to enable, 0 to disable. | ||
| 2846 | */ | ||
| 2847 | uint8_t i2s_enable; | ||
| 2848 | |||
| 2849 | /* | ||
| 2850 | * EC_CODEC_I2S_SET_COFNIG | ||
| 2851 | * Value should be one of ec_i2s_config. | ||
| 2852 | */ | ||
| 2853 | uint8_t i2s_config; | ||
| 2854 | |||
| 2855 | /* | ||
| 2856 | * EC_CODEC_I2S_SET_TDM_CONFIG | ||
| 2857 | * Value should be one of ec_i2s_config. | ||
| 2858 | */ | ||
| 2859 | struct ec_param_codec_i2s_tdm { | ||
| 2860 | /* | ||
| 2861 | * 0 to 496 | ||
| 2862 | */ | ||
| 2863 | int16_t ch0_delay; | ||
| 2864 | /* | ||
| 2865 | * -1 to 496 | ||
| 2866 | */ | ||
| 2867 | int16_t ch1_delay; | ||
| 2868 | uint8_t adjacent_to_ch0; | ||
| 2869 | uint8_t adjacent_to_ch1; | ||
| 2870 | } __packed tdm_param; | ||
| 2871 | |||
| 2872 | /* | ||
| 2873 | * EC_CODEC_I2S_SET_BCLK | ||
| 2874 | */ | ||
| 2875 | uint32_t bclk; | ||
| 2876 | }; | ||
| 2877 | } __packed; | ||
| 2878 | |||
| 2879 | /* | ||
| 2880 | * For subcommand EC_CODEC_GET_GAIN. | ||
| 2881 | */ | ||
| 2882 | struct ec_response_codec_gain { | ||
| 2883 | uint8_t left; | ||
| 2884 | uint8_t right; | ||
| 2885 | } __packed; | ||
| 2886 | |||
| 2887 | /*****************************************************************************/ | ||
| 2794 | /* System commands */ | 2888 | /* System commands */ |
| 2795 | 2889 | ||
| 2796 | /* | 2890 | /* |
diff --git a/include/linux/mfd/ingenic-tcu.h b/include/linux/mfd/ingenic-tcu.h index ab16ad283def..2083fa20821d 100644 --- a/include/linux/mfd/ingenic-tcu.h +++ b/include/linux/mfd/ingenic-tcu.h | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | #define TCU_TCSR_PRESCALE_LSB 3 | 41 | #define TCU_TCSR_PRESCALE_LSB 3 |
| 42 | #define TCU_TCSR_PRESCALE_MASK 0x38 | 42 | #define TCU_TCSR_PRESCALE_MASK 0x38 |
| 43 | 43 | ||
| 44 | #define TCU_TCSR_PWM_SD BIT(9) /* 0: Shutdown abruptly 1: gracefully */ | 44 | #define TCU_TCSR_PWM_SD BIT(9) /* 0: Shutdown gracefully 1: abruptly */ |
| 45 | #define TCU_TCSR_PWM_INITL_HIGH BIT(8) /* Sets the initial output level */ | 45 | #define TCU_TCSR_PWM_INITL_HIGH BIT(8) /* Sets the initial output level */ |
| 46 | #define TCU_TCSR_PWM_EN BIT(7) /* PWM pin output enable */ | 46 | #define TCU_TCSR_PWM_EN BIT(7) /* PWM pin output enable */ |
| 47 | 47 | ||
diff --git a/include/linux/mfd/madera/core.h b/include/linux/mfd/madera/core.h index fe69c0f4398f..4d5d51a9c8a6 100644 --- a/include/linux/mfd/madera/core.h +++ b/include/linux/mfd/madera/core.h | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/gpio/consumer.h> | 15 | #include <linux/gpio/consumer.h> |
| 16 | #include <linux/interrupt.h> | 16 | #include <linux/interrupt.h> |
| 17 | #include <linux/mfd/madera/pdata.h> | 17 | #include <linux/mfd/madera/pdata.h> |
| 18 | #include <linux/mutex.h> | ||
| 18 | #include <linux/notifier.h> | 19 | #include <linux/notifier.h> |
| 19 | #include <linux/regmap.h> | 20 | #include <linux/regmap.h> |
| 20 | #include <linux/regulator/consumer.h> | 21 | #include <linux/regulator/consumer.h> |
| @@ -37,6 +38,8 @@ enum madera_type { | |||
| 37 | 38 | ||
| 38 | #define MADERA_MAX_MICBIAS 4 | 39 | #define MADERA_MAX_MICBIAS 4 |
| 39 | 40 | ||
| 41 | #define MADERA_MAX_HP_OUTPUT 3 | ||
| 42 | |||
| 40 | /* Notifier events */ | 43 | /* Notifier events */ |
| 41 | #define MADERA_NOTIFY_VOICE_TRIGGER 0x1 | 44 | #define MADERA_NOTIFY_VOICE_TRIGGER 0x1 |
| 42 | #define MADERA_NOTIFY_HPDET 0x2 | 45 | #define MADERA_NOTIFY_HPDET 0x2 |
| @@ -183,6 +186,10 @@ struct madera { | |||
| 183 | unsigned int num_childbias[MADERA_MAX_MICBIAS]; | 186 | unsigned int num_childbias[MADERA_MAX_MICBIAS]; |
| 184 | 187 | ||
| 185 | struct snd_soc_dapm_context *dapm; | 188 | struct snd_soc_dapm_context *dapm; |
| 189 | struct mutex dapm_ptr_lock; | ||
| 190 | unsigned int hp_ena; | ||
| 191 | bool out_clamp[MADERA_MAX_HP_OUTPUT]; | ||
| 192 | bool out_shorted[MADERA_MAX_HP_OUTPUT]; | ||
| 186 | 193 | ||
| 187 | struct blocking_notifier_head notifier; | 194 | struct blocking_notifier_head notifier; |
| 188 | }; | 195 | }; |
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h index b9a53e013bff..483168403ae5 100644 --- a/include/linux/mfd/ti_am335x_tscadc.h +++ b/include/linux/mfd/ti_am335x_tscadc.h | |||
| @@ -78,6 +78,8 @@ | |||
| 78 | #define STEPCONFIG_YNN BIT(8) | 78 | #define STEPCONFIG_YNN BIT(8) |
| 79 | #define STEPCONFIG_XNP BIT(9) | 79 | #define STEPCONFIG_XNP BIT(9) |
| 80 | #define STEPCONFIG_YPN BIT(10) | 80 | #define STEPCONFIG_YPN BIT(10) |
| 81 | #define STEPCONFIG_RFP(val) ((val) << 12) | ||
| 82 | #define STEPCONFIG_RFP_VREFP (0x3 << 12) | ||
| 81 | #define STEPCONFIG_INM_MASK (0xF << 15) | 83 | #define STEPCONFIG_INM_MASK (0xF << 15) |
| 82 | #define STEPCONFIG_INM(val) ((val) << 15) | 84 | #define STEPCONFIG_INM(val) ((val) << 15) |
| 83 | #define STEPCONFIG_INM_ADCREFM STEPCONFIG_INM(8) | 85 | #define STEPCONFIG_INM_ADCREFM STEPCONFIG_INM(8) |
| @@ -86,6 +88,8 @@ | |||
| 86 | #define STEPCONFIG_INP_AN4 STEPCONFIG_INP(4) | 88 | #define STEPCONFIG_INP_AN4 STEPCONFIG_INP(4) |
| 87 | #define STEPCONFIG_INP_ADCREFM STEPCONFIG_INP(8) | 89 | #define STEPCONFIG_INP_ADCREFM STEPCONFIG_INP(8) |
| 88 | #define STEPCONFIG_FIFO1 BIT(26) | 90 | #define STEPCONFIG_FIFO1 BIT(26) |
| 91 | #define STEPCONFIG_RFM(val) ((val) << 23) | ||
| 92 | #define STEPCONFIG_RFM_VREFN (0x3 << 23) | ||
| 89 | 93 | ||
| 90 | /* Delay register */ | 94 | /* Delay register */ |
| 91 | #define STEPDELAY_OPEN_MASK (0x3FFFF << 0) | 95 | #define STEPDELAY_OPEN_MASK (0x3FFFF << 0) |
diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h index e2687a30e5a1..739b7bf37eaa 100644 --- a/include/linux/mfd/tmio.h +++ b/include/linux/mfd/tmio.h | |||
| @@ -79,7 +79,7 @@ | |||
| 79 | /* Some controllers have a CBSY bit */ | 79 | /* Some controllers have a CBSY bit */ |
| 80 | #define TMIO_MMC_HAVE_CBSY BIT(11) | 80 | #define TMIO_MMC_HAVE_CBSY BIT(11) |
| 81 | 81 | ||
| 82 | /* Some controllers that support HS400 use use 4 taps while others use 8. */ | 82 | /* Some controllers that support HS400 use 4 taps while others use 8. */ |
| 83 | #define TMIO_MMC_HAVE_4TAP_HS400 BIT(13) | 83 | #define TMIO_MMC_HAVE_4TAP_HS400 BIT(13) |
| 84 | 84 | ||
| 85 | int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base); | 85 | int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base); |
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index de7377815b6b..8ef330027b13 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h | |||
| @@ -308,6 +308,7 @@ struct mmc_card { | |||
| 308 | unsigned int nr_parts; | 308 | unsigned int nr_parts; |
| 309 | 309 | ||
| 310 | unsigned int bouncesz; /* Bounce buffer size */ | 310 | unsigned int bouncesz; /* Bounce buffer size */ |
| 311 | struct workqueue_struct *complete_wq; /* Private workqueue */ | ||
| 311 | }; | 312 | }; |
| 312 | 313 | ||
| 313 | static inline bool mmc_large_sector(struct mmc_card *card) | 314 | static inline bool mmc_large_sector(struct mmc_card *card) |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index cc4a507d7ca4..842f9189537b 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -520,6 +520,12 @@ enum pgdat_flags { | |||
| 520 | PGDAT_RECLAIM_LOCKED, /* prevents concurrent reclaim */ | 520 | PGDAT_RECLAIM_LOCKED, /* prevents concurrent reclaim */ |
| 521 | }; | 521 | }; |
| 522 | 522 | ||
| 523 | enum zone_flags { | ||
| 524 | ZONE_BOOSTED_WATERMARK, /* zone recently boosted watermarks. | ||
| 525 | * Cleared when kswapd is woken. | ||
| 526 | */ | ||
| 527 | }; | ||
| 528 | |||
| 523 | static inline unsigned long zone_managed_pages(struct zone *zone) | 529 | static inline unsigned long zone_managed_pages(struct zone *zone) |
| 524 | { | 530 | { |
| 525 | return (unsigned long)atomic_long_read(&zone->managed_pages); | 531 | return (unsigned long)atomic_long_read(&zone->managed_pages); |
diff --git a/include/linux/module.h b/include/linux/module.h index 9a21fe3509af..f5bc4c046461 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
| @@ -129,13 +129,13 @@ extern void cleanup_module(void); | |||
| 129 | #define module_init(initfn) \ | 129 | #define module_init(initfn) \ |
| 130 | static inline initcall_t __maybe_unused __inittest(void) \ | 130 | static inline initcall_t __maybe_unused __inittest(void) \ |
| 131 | { return initfn; } \ | 131 | { return initfn; } \ |
| 132 | int init_module(void) __attribute__((alias(#initfn))); | 132 | int init_module(void) __copy(initfn) __attribute__((alias(#initfn))); |
| 133 | 133 | ||
| 134 | /* This is only required if you want to be unloadable. */ | 134 | /* This is only required if you want to be unloadable. */ |
| 135 | #define module_exit(exitfn) \ | 135 | #define module_exit(exitfn) \ |
| 136 | static inline exitcall_t __maybe_unused __exittest(void) \ | 136 | static inline exitcall_t __maybe_unused __exittest(void) \ |
| 137 | { return exitfn; } \ | 137 | { return exitfn; } \ |
| 138 | void cleanup_module(void) __attribute__((alias(#exitfn))); | 138 | void cleanup_module(void) __copy(exitfn) __attribute__((alias(#exitfn))); |
| 139 | 139 | ||
| 140 | #endif | 140 | #endif |
| 141 | 141 | ||
| @@ -828,7 +828,7 @@ static inline void module_bug_finalize(const Elf_Ehdr *hdr, | |||
| 828 | static inline void module_bug_cleanup(struct module *mod) {} | 828 | static inline void module_bug_cleanup(struct module *mod) {} |
| 829 | #endif /* CONFIG_GENERIC_BUG */ | 829 | #endif /* CONFIG_GENERIC_BUG */ |
| 830 | 830 | ||
| 831 | #ifdef RETPOLINE | 831 | #ifdef CONFIG_RETPOLINE |
| 832 | extern bool retpoline_module_ok(bool has_retpoline); | 832 | extern bool retpoline_module_ok(bool has_retpoline); |
| 833 | #else | 833 | #else |
| 834 | static inline bool retpoline_module_ok(bool has_retpoline) | 834 | static inline bool retpoline_module_ok(bool has_retpoline) |
diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h index 2b2a6dce1630..4c76fe2c8488 100644 --- a/include/linux/netdev_features.h +++ b/include/linux/netdev_features.h | |||
| @@ -11,6 +11,8 @@ | |||
| 11 | #define _LINUX_NETDEV_FEATURES_H | 11 | #define _LINUX_NETDEV_FEATURES_H |
| 12 | 12 | ||
| 13 | #include <linux/types.h> | 13 | #include <linux/types.h> |
| 14 | #include <linux/bitops.h> | ||
| 15 | #include <asm/byteorder.h> | ||
| 14 | 16 | ||
| 15 | typedef u64 netdev_features_t; | 17 | typedef u64 netdev_features_t; |
| 16 | 18 | ||
| @@ -154,8 +156,26 @@ enum { | |||
| 154 | #define NETIF_F_HW_TLS_TX __NETIF_F(HW_TLS_TX) | 156 | #define NETIF_F_HW_TLS_TX __NETIF_F(HW_TLS_TX) |
| 155 | #define NETIF_F_HW_TLS_RX __NETIF_F(HW_TLS_RX) | 157 | #define NETIF_F_HW_TLS_RX __NETIF_F(HW_TLS_RX) |
| 156 | 158 | ||
| 157 | #define for_each_netdev_feature(mask_addr, bit) \ | 159 | /* Finds the next feature with the highest number of the range of start till 0. |
| 158 | for_each_set_bit(bit, (unsigned long *)mask_addr, NETDEV_FEATURE_COUNT) | 160 | */ |
| 161 | static inline int find_next_netdev_feature(u64 feature, unsigned long start) | ||
| 162 | { | ||
| 163 | /* like BITMAP_LAST_WORD_MASK() for u64 | ||
| 164 | * this sets the most significant 64 - start to 0. | ||
| 165 | */ | ||
| 166 | feature &= ~0ULL >> (-start & ((sizeof(feature) * 8) - 1)); | ||
| 167 | |||
| 168 | return fls64(feature) - 1; | ||
| 169 | } | ||
| 170 | |||
| 171 | /* This goes for the MSB to the LSB through the set feature bits, | ||
| 172 | * mask_addr should be a u64 and bit an int | ||
| 173 | */ | ||
| 174 | #define for_each_netdev_feature(mask_addr, bit) \ | ||
| 175 | for ((bit) = find_next_netdev_feature((mask_addr), \ | ||
| 176 | NETDEV_FEATURE_COUNT); \ | ||
| 177 | (bit) >= 0; \ | ||
| 178 | (bit) = find_next_netdev_feature((mask_addr), (bit) - 1)) | ||
| 159 | 179 | ||
| 160 | /* Features valid for ethtool to change */ | 180 | /* Features valid for ethtool to change */ |
| 161 | /* = all defined minus driver/device-class-related */ | 181 | /* = all defined minus driver/device-class-related */ |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 1377d085ef99..86dbb3e29139 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -1483,6 +1483,7 @@ struct net_device_ops { | |||
| 1483 | * @IFF_NO_RX_HANDLER: device doesn't support the rx_handler hook | 1483 | * @IFF_NO_RX_HANDLER: device doesn't support the rx_handler hook |
| 1484 | * @IFF_FAILOVER: device is a failover master device | 1484 | * @IFF_FAILOVER: device is a failover master device |
| 1485 | * @IFF_FAILOVER_SLAVE: device is lower dev of a failover master device | 1485 | * @IFF_FAILOVER_SLAVE: device is lower dev of a failover master device |
| 1486 | * @IFF_L3MDEV_RX_HANDLER: only invoke the rx handler of L3 master device | ||
| 1486 | */ | 1487 | */ |
| 1487 | enum netdev_priv_flags { | 1488 | enum netdev_priv_flags { |
| 1488 | IFF_802_1Q_VLAN = 1<<0, | 1489 | IFF_802_1Q_VLAN = 1<<0, |
| @@ -1514,6 +1515,7 @@ enum netdev_priv_flags { | |||
| 1514 | IFF_NO_RX_HANDLER = 1<<26, | 1515 | IFF_NO_RX_HANDLER = 1<<26, |
| 1515 | IFF_FAILOVER = 1<<27, | 1516 | IFF_FAILOVER = 1<<27, |
| 1516 | IFF_FAILOVER_SLAVE = 1<<28, | 1517 | IFF_FAILOVER_SLAVE = 1<<28, |
| 1518 | IFF_L3MDEV_RX_HANDLER = 1<<29, | ||
| 1517 | }; | 1519 | }; |
| 1518 | 1520 | ||
| 1519 | #define IFF_802_1Q_VLAN IFF_802_1Q_VLAN | 1521 | #define IFF_802_1Q_VLAN IFF_802_1Q_VLAN |
| @@ -1544,6 +1546,7 @@ enum netdev_priv_flags { | |||
| 1544 | #define IFF_NO_RX_HANDLER IFF_NO_RX_HANDLER | 1546 | #define IFF_NO_RX_HANDLER IFF_NO_RX_HANDLER |
| 1545 | #define IFF_FAILOVER IFF_FAILOVER | 1547 | #define IFF_FAILOVER IFF_FAILOVER |
| 1546 | #define IFF_FAILOVER_SLAVE IFF_FAILOVER_SLAVE | 1548 | #define IFF_FAILOVER_SLAVE IFF_FAILOVER_SLAVE |
| 1549 | #define IFF_L3MDEV_RX_HANDLER IFF_L3MDEV_RX_HANDLER | ||
| 1547 | 1550 | ||
| 1548 | /** | 1551 | /** |
| 1549 | * struct net_device - The DEVICE structure. | 1552 | * struct net_device - The DEVICE structure. |
| @@ -4549,6 +4552,11 @@ static inline bool netif_supports_nofcs(struct net_device *dev) | |||
| 4549 | return dev->priv_flags & IFF_SUPP_NOFCS; | 4552 | return dev->priv_flags & IFF_SUPP_NOFCS; |
| 4550 | } | 4553 | } |
| 4551 | 4554 | ||
| 4555 | static inline bool netif_has_l3_rx_handler(const struct net_device *dev) | ||
| 4556 | { | ||
| 4557 | return dev->priv_flags & IFF_L3MDEV_RX_HANDLER; | ||
| 4558 | } | ||
| 4559 | |||
| 4552 | static inline bool netif_is_l3_master(const struct net_device *dev) | 4560 | static inline bool netif_is_l3_master(const struct net_device *dev) |
| 4553 | { | 4561 | { |
| 4554 | return dev->priv_flags & IFF_L3MDEV_MASTER; | 4562 | return dev->priv_flags & IFF_L3MDEV_MASTER; |
diff --git a/include/linux/of.h b/include/linux/of.h index fe472e5195a9..e240992e5cb6 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
| @@ -50,7 +50,6 @@ struct of_irq_controller; | |||
| 50 | 50 | ||
| 51 | struct device_node { | 51 | struct device_node { |
| 52 | const char *name; | 52 | const char *name; |
| 53 | const char *type; | ||
| 54 | phandle phandle; | 53 | phandle phandle; |
| 55 | const char *full_name; | 54 | const char *full_name; |
| 56 | struct fwnode_handle fwnode; | 55 | struct fwnode_handle fwnode; |
diff --git a/include/linux/pci-dma-compat.h b/include/linux/pci-dma-compat.h index cb1adf0b78a9..249d4d7fbf18 100644 --- a/include/linux/pci-dma-compat.h +++ b/include/linux/pci-dma-compat.h | |||
| @@ -24,7 +24,7 @@ static inline void * | |||
| 24 | pci_zalloc_consistent(struct pci_dev *hwdev, size_t size, | 24 | pci_zalloc_consistent(struct pci_dev *hwdev, size_t size, |
| 25 | dma_addr_t *dma_handle) | 25 | dma_addr_t *dma_handle) |
| 26 | { | 26 | { |
| 27 | return dma_zalloc_coherent(&hwdev->dev, size, dma_handle, GFP_ATOMIC); | 27 | return dma_alloc_coherent(&hwdev->dev, size, dma_handle, GFP_ATOMIC); |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | static inline void | 30 | static inline void |
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 1d5c551a5add..e1a051724f7e 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
| @@ -447,6 +447,11 @@ struct pmu { | |||
| 447 | * Filter events for PMU-specific reasons. | 447 | * Filter events for PMU-specific reasons. |
| 448 | */ | 448 | */ |
| 449 | int (*filter_match) (struct perf_event *event); /* optional */ | 449 | int (*filter_match) (struct perf_event *event); /* optional */ |
| 450 | |||
| 451 | /* | ||
| 452 | * Check period value for PERF_EVENT_IOC_PERIOD ioctl. | ||
| 453 | */ | ||
| 454 | int (*check_period) (struct perf_event *event, u64 value); /* optional */ | ||
| 450 | }; | 455 | }; |
| 451 | 456 | ||
| 452 | enum perf_addr_filter_action_t { | 457 | enum perf_addr_filter_action_t { |
diff --git a/include/linux/phy.h b/include/linux/phy.h index 3b051f761450..333b56d8f746 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
| @@ -48,6 +48,7 @@ extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_features) __ro_after_init; | |||
| 48 | extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_fibre_features) __ro_after_init; | 48 | extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_fibre_features) __ro_after_init; |
| 49 | extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_all_ports_features) __ro_after_init; | 49 | extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_all_ports_features) __ro_after_init; |
| 50 | extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features) __ro_after_init; | 50 | extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features) __ro_after_init; |
| 51 | extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_fec_features) __ro_after_init; | ||
| 51 | extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_init; | 52 | extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_init; |
| 52 | 53 | ||
| 53 | #define PHY_BASIC_FEATURES ((unsigned long *)&phy_basic_features) | 54 | #define PHY_BASIC_FEATURES ((unsigned long *)&phy_basic_features) |
| @@ -56,6 +57,7 @@ extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_ini | |||
| 56 | #define PHY_GBIT_FIBRE_FEATURES ((unsigned long *)&phy_gbit_fibre_features) | 57 | #define PHY_GBIT_FIBRE_FEATURES ((unsigned long *)&phy_gbit_fibre_features) |
| 57 | #define PHY_GBIT_ALL_PORTS_FEATURES ((unsigned long *)&phy_gbit_all_ports_features) | 58 | #define PHY_GBIT_ALL_PORTS_FEATURES ((unsigned long *)&phy_gbit_all_ports_features) |
| 58 | #define PHY_10GBIT_FEATURES ((unsigned long *)&phy_10gbit_features) | 59 | #define PHY_10GBIT_FEATURES ((unsigned long *)&phy_10gbit_features) |
| 60 | #define PHY_10GBIT_FEC_FEATURES ((unsigned long *)&phy_10gbit_fec_features) | ||
| 59 | #define PHY_10GBIT_FULL_FEATURES ((unsigned long *)&phy_10gbit_full_features) | 61 | #define PHY_10GBIT_FULL_FEATURES ((unsigned long *)&phy_10gbit_full_features) |
| 60 | 62 | ||
| 61 | extern const int phy_10_100_features_array[4]; | 63 | extern const int phy_10_100_features_array[4]; |
| @@ -467,8 +469,8 @@ struct phy_device { | |||
| 467 | * only works for PHYs with IDs which match this field | 469 | * only works for PHYs with IDs which match this field |
| 468 | * name: The friendly name of this PHY type | 470 | * name: The friendly name of this PHY type |
| 469 | * phy_id_mask: Defines the important bits of the phy_id | 471 | * phy_id_mask: Defines the important bits of the phy_id |
| 470 | * features: A list of features (speed, duplex, etc) supported | 472 | * features: A mandatory list of features (speed, duplex, etc) |
| 471 | * by this PHY | 473 | * supported by this PHY |
| 472 | * flags: A bitfield defining certain other features this PHY | 474 | * flags: A bitfield defining certain other features this PHY |
| 473 | * supports (like interrupts) | 475 | * supports (like interrupts) |
| 474 | * | 476 | * |
| @@ -672,26 +674,13 @@ phy_lookup_setting(int speed, int duplex, const unsigned long *mask, | |||
| 672 | size_t phy_speeds(unsigned int *speeds, size_t size, | 674 | size_t phy_speeds(unsigned int *speeds, size_t size, |
| 673 | unsigned long *mask); | 675 | unsigned long *mask); |
| 674 | 676 | ||
| 675 | static inline bool __phy_is_started(struct phy_device *phydev) | ||
| 676 | { | ||
| 677 | WARN_ON(!mutex_is_locked(&phydev->lock)); | ||
| 678 | |||
| 679 | return phydev->state >= PHY_UP; | ||
| 680 | } | ||
| 681 | |||
| 682 | /** | 677 | /** |
| 683 | * phy_is_started - Convenience function to check whether PHY is started | 678 | * phy_is_started - Convenience function to check whether PHY is started |
| 684 | * @phydev: The phy_device struct | 679 | * @phydev: The phy_device struct |
| 685 | */ | 680 | */ |
| 686 | static inline bool phy_is_started(struct phy_device *phydev) | 681 | static inline bool phy_is_started(struct phy_device *phydev) |
| 687 | { | 682 | { |
| 688 | bool started; | 683 | return phydev->state >= PHY_UP; |
| 689 | |||
| 690 | mutex_lock(&phydev->lock); | ||
| 691 | started = __phy_is_started(phydev); | ||
| 692 | mutex_unlock(&phydev->lock); | ||
| 693 | |||
| 694 | return started; | ||
| 695 | } | 684 | } |
| 696 | 685 | ||
| 697 | void phy_resolve_aneg_linkmode(struct phy_device *phydev); | 686 | void phy_resolve_aneg_linkmode(struct phy_device *phydev); |
| @@ -1003,6 +992,14 @@ static inline int genphy_no_soft_reset(struct phy_device *phydev) | |||
| 1003 | { | 992 | { |
| 1004 | return 0; | 993 | return 0; |
| 1005 | } | 994 | } |
| 995 | static inline int genphy_no_ack_interrupt(struct phy_device *phydev) | ||
| 996 | { | ||
| 997 | return 0; | ||
| 998 | } | ||
| 999 | static inline int genphy_no_config_intr(struct phy_device *phydev) | ||
| 1000 | { | ||
| 1001 | return 0; | ||
| 1002 | } | ||
| 1006 | int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad, | 1003 | int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad, |
| 1007 | u16 regnum); | 1004 | u16 regnum); |
| 1008 | int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum, | 1005 | int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum, |
diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h index e8e118d70fd7..3f350e2749fe 100644 --- a/include/linux/phy/phy.h +++ b/include/linux/phy/phy.h | |||
| @@ -42,6 +42,7 @@ enum phy_mode { | |||
| 42 | PHY_MODE_PCIE, | 42 | PHY_MODE_PCIE, |
| 43 | PHY_MODE_ETHERNET, | 43 | PHY_MODE_ETHERNET, |
| 44 | PHY_MODE_MIPI_DPHY, | 44 | PHY_MODE_MIPI_DPHY, |
| 45 | PHY_MODE_SATA | ||
| 45 | }; | 46 | }; |
| 46 | 47 | ||
| 47 | /** | 48 | /** |
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h index 0a2a88e5a383..b895f4e79868 100644 --- a/include/linux/pm_opp.h +++ b/include/linux/pm_opp.h | |||
| @@ -108,6 +108,7 @@ void dev_pm_opp_put(struct dev_pm_opp *opp); | |||
| 108 | int dev_pm_opp_add(struct device *dev, unsigned long freq, | 108 | int dev_pm_opp_add(struct device *dev, unsigned long freq, |
| 109 | unsigned long u_volt); | 109 | unsigned long u_volt); |
| 110 | void dev_pm_opp_remove(struct device *dev, unsigned long freq); | 110 | void dev_pm_opp_remove(struct device *dev, unsigned long freq); |
| 111 | void dev_pm_opp_remove_all_dynamic(struct device *dev); | ||
| 111 | 112 | ||
| 112 | int dev_pm_opp_enable(struct device *dev, unsigned long freq); | 113 | int dev_pm_opp_enable(struct device *dev, unsigned long freq); |
| 113 | 114 | ||
| @@ -217,6 +218,10 @@ static inline void dev_pm_opp_remove(struct device *dev, unsigned long freq) | |||
| 217 | { | 218 | { |
| 218 | } | 219 | } |
| 219 | 220 | ||
| 221 | static inline void dev_pm_opp_remove_all_dynamic(struct device *dev) | ||
| 222 | { | ||
| 223 | } | ||
| 224 | |||
| 220 | static inline int dev_pm_opp_enable(struct device *dev, unsigned long freq) | 225 | static inline int dev_pm_opp_enable(struct device *dev, unsigned long freq) |
| 221 | { | 226 | { |
| 222 | return 0; | 227 | return 0; |
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h index 54af4eef169f..fed5be706bc9 100644 --- a/include/linux/pm_runtime.h +++ b/include/linux/pm_runtime.h | |||
| @@ -105,7 +105,7 @@ static inline bool pm_runtime_callbacks_present(struct device *dev) | |||
| 105 | 105 | ||
| 106 | static inline void pm_runtime_mark_last_busy(struct device *dev) | 106 | static inline void pm_runtime_mark_last_busy(struct device *dev) |
| 107 | { | 107 | { |
| 108 | WRITE_ONCE(dev->power.last_busy, ktime_to_ns(ktime_get())); | 108 | WRITE_ONCE(dev->power.last_busy, ktime_get_mono_fast_ns()); |
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | static inline bool pm_runtime_is_irq_safe(struct device *dev) | 111 | static inline bool pm_runtime_is_irq_safe(struct device *dev) |
diff --git a/include/linux/qcom_scm.h b/include/linux/qcom_scm.h index 1637385bcc17..d0aecc04c54b 100644 --- a/include/linux/qcom_scm.h +++ b/include/linux/qcom_scm.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #ifndef __QCOM_SCM_H | 13 | #ifndef __QCOM_SCM_H |
| 14 | #define __QCOM_SCM_H | 14 | #define __QCOM_SCM_H |
| 15 | 15 | ||
| 16 | #include <linux/err.h> | ||
| 16 | #include <linux/types.h> | 17 | #include <linux/types.h> |
| 17 | #include <linux/cpumask.h> | 18 | #include <linux/cpumask.h> |
| 18 | 19 | ||
diff --git a/include/linux/qed/qed_chain.h b/include/linux/qed/qed_chain.h index 59ddf9af909e..2dd0a9ed5b36 100644 --- a/include/linux/qed/qed_chain.h +++ b/include/linux/qed/qed_chain.h | |||
| @@ -663,6 +663,37 @@ out: | |||
| 663 | static inline void qed_chain_set_prod(struct qed_chain *p_chain, | 663 | static inline void qed_chain_set_prod(struct qed_chain *p_chain, |
| 664 | u32 prod_idx, void *p_prod_elem) | 664 | u32 prod_idx, void *p_prod_elem) |
| 665 | { | 665 | { |
| 666 | if (p_chain->mode == QED_CHAIN_MODE_PBL) { | ||
| 667 | u32 cur_prod, page_mask, page_cnt, page_diff; | ||
| 668 | |||
| 669 | cur_prod = is_chain_u16(p_chain) ? p_chain->u.chain16.prod_idx : | ||
| 670 | p_chain->u.chain32.prod_idx; | ||
| 671 | |||
| 672 | /* Assume that number of elements in a page is power of 2 */ | ||
| 673 | page_mask = ~p_chain->elem_per_page_mask; | ||
| 674 | |||
| 675 | /* Use "cur_prod - 1" and "prod_idx - 1" since producer index | ||
| 676 | * reaches the first element of next page before the page index | ||
| 677 | * is incremented. See qed_chain_produce(). | ||
| 678 | * Index wrap around is not a problem because the difference | ||
| 679 | * between current and given producer indices is always | ||
| 680 | * positive and lower than the chain's capacity. | ||
| 681 | */ | ||
| 682 | page_diff = (((cur_prod - 1) & page_mask) - | ||
| 683 | ((prod_idx - 1) & page_mask)) / | ||
| 684 | p_chain->elem_per_page; | ||
| 685 | |||
| 686 | page_cnt = qed_chain_get_page_cnt(p_chain); | ||
| 687 | if (is_chain_u16(p_chain)) | ||
| 688 | p_chain->pbl.c.u16.prod_page_idx = | ||
| 689 | (p_chain->pbl.c.u16.prod_page_idx - | ||
| 690 | page_diff + page_cnt) % page_cnt; | ||
| 691 | else | ||
| 692 | p_chain->pbl.c.u32.prod_page_idx = | ||
| 693 | (p_chain->pbl.c.u32.prod_page_idx - | ||
| 694 | page_diff + page_cnt) % page_cnt; | ||
| 695 | } | ||
| 696 | |||
| 666 | if (is_chain_u16(p_chain)) | 697 | if (is_chain_u16(p_chain)) |
| 667 | p_chain->u.chain16.prod_idx = (u16) prod_idx; | 698 | p_chain->u.chain16.prod_idx = (u16) prod_idx; |
| 668 | else | 699 | else |
diff --git a/include/linux/reset.h b/include/linux/reset.h index 29af6d6b2f4b..c1901b61ca30 100644 --- a/include/linux/reset.h +++ b/include/linux/reset.h | |||
| @@ -32,6 +32,8 @@ struct reset_control *devm_reset_control_array_get(struct device *dev, | |||
| 32 | struct reset_control *of_reset_control_array_get(struct device_node *np, | 32 | struct reset_control *of_reset_control_array_get(struct device_node *np, |
| 33 | bool shared, bool optional); | 33 | bool shared, bool optional); |
| 34 | 34 | ||
| 35 | int reset_control_get_count(struct device *dev); | ||
| 36 | |||
| 35 | #else | 37 | #else |
| 36 | 38 | ||
| 37 | static inline int reset_control_reset(struct reset_control *rstc) | 39 | static inline int reset_control_reset(struct reset_control *rstc) |
| @@ -97,6 +99,11 @@ of_reset_control_array_get(struct device_node *np, bool shared, bool optional) | |||
| 97 | return optional ? NULL : ERR_PTR(-ENOTSUPP); | 99 | return optional ? NULL : ERR_PTR(-ENOTSUPP); |
| 98 | } | 100 | } |
| 99 | 101 | ||
| 102 | static inline int reset_control_get_count(struct device *dev) | ||
| 103 | { | ||
| 104 | return -ENOENT; | ||
| 105 | } | ||
| 106 | |||
| 100 | #endif /* CONFIG_RESET_CONTROLLER */ | 107 | #endif /* CONFIG_RESET_CONTROLLER */ |
| 101 | 108 | ||
| 102 | static inline int __must_check device_reset(struct device *dev) | 109 | static inline int __must_check device_reset(struct device *dev) |
| @@ -138,7 +145,7 @@ __must_check reset_control_get_exclusive(struct device *dev, const char *id) | |||
| 138 | * | 145 | * |
| 139 | * Returns a struct reset_control or IS_ERR() condition containing errno. | 146 | * Returns a struct reset_control or IS_ERR() condition containing errno. |
| 140 | * This function is intended for use with reset-controls which are shared | 147 | * This function is intended for use with reset-controls which are shared |
| 141 | * between hardware-blocks. | 148 | * between hardware blocks. |
| 142 | * | 149 | * |
| 143 | * When a reset-control is shared, the behavior of reset_control_assert / | 150 | * When a reset-control is shared, the behavior of reset_control_assert / |
| 144 | * deassert is changed, the reset-core will keep track of a deassert_count | 151 | * deassert is changed, the reset-core will keep track of a deassert_count |
| @@ -187,7 +194,7 @@ static inline struct reset_control *of_reset_control_get_exclusive( | |||
| 187 | } | 194 | } |
| 188 | 195 | ||
| 189 | /** | 196 | /** |
| 190 | * of_reset_control_get_shared - Lookup and obtain an shared reference | 197 | * of_reset_control_get_shared - Lookup and obtain a shared reference |
| 191 | * to a reset controller. | 198 | * to a reset controller. |
| 192 | * @node: device to be reset by the controller | 199 | * @node: device to be reset by the controller |
| 193 | * @id: reset line name | 200 | * @id: reset line name |
| @@ -229,7 +236,7 @@ static inline struct reset_control *of_reset_control_get_exclusive_by_index( | |||
| 229 | } | 236 | } |
| 230 | 237 | ||
| 231 | /** | 238 | /** |
| 232 | * of_reset_control_get_shared_by_index - Lookup and obtain an shared | 239 | * of_reset_control_get_shared_by_index - Lookup and obtain a shared |
| 233 | * reference to a reset controller | 240 | * reference to a reset controller |
| 234 | * by index. | 241 | * by index. |
| 235 | * @node: device to be reset by the controller | 242 | * @node: device to be reset by the controller |
| @@ -322,7 +329,7 @@ devm_reset_control_get_exclusive_by_index(struct device *dev, int index) | |||
| 322 | 329 | ||
| 323 | /** | 330 | /** |
| 324 | * devm_reset_control_get_shared_by_index - resource managed | 331 | * devm_reset_control_get_shared_by_index - resource managed |
| 325 | * reset_control_get_shared | 332 | * reset_control_get_shared |
| 326 | * @dev: device to be reset by the controller | 333 | * @dev: device to be reset by the controller |
| 327 | * @index: index of the reset controller | 334 | * @index: index of the reset controller |
| 328 | * | 335 | * |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 89541d248893..bba3afb4e9bf 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -995,7 +995,7 @@ struct task_struct { | |||
| 995 | /* cg_list protected by css_set_lock and tsk->alloc_lock: */ | 995 | /* cg_list protected by css_set_lock and tsk->alloc_lock: */ |
| 996 | struct list_head cg_list; | 996 | struct list_head cg_list; |
| 997 | #endif | 997 | #endif |
| 998 | #ifdef CONFIG_RESCTRL | 998 | #ifdef CONFIG_X86_CPU_RESCTRL |
| 999 | u32 closid; | 999 | u32 closid; |
| 1000 | u32 rmid; | 1000 | u32 rmid; |
| 1001 | #endif | 1001 | #endif |
| @@ -1406,6 +1406,7 @@ extern struct pid *cad_pid; | |||
| 1406 | #define PF_RANDOMIZE 0x00400000 /* Randomize virtual address space */ | 1406 | #define PF_RANDOMIZE 0x00400000 /* Randomize virtual address space */ |
| 1407 | #define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */ | 1407 | #define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */ |
| 1408 | #define PF_MEMSTALL 0x01000000 /* Stalled due to lack of memory */ | 1408 | #define PF_MEMSTALL 0x01000000 /* Stalled due to lack of memory */ |
| 1409 | #define PF_UMH 0x02000000 /* I'm an Usermodehelper process */ | ||
| 1409 | #define PF_NO_SETAFFINITY 0x04000000 /* Userland is not allowed to meddle with cpus_allowed */ | 1410 | #define PF_NO_SETAFFINITY 0x04000000 /* Userland is not allowed to meddle with cpus_allowed */ |
| 1410 | #define PF_MCE_EARLY 0x08000000 /* Early kill for mce process policy */ | 1411 | #define PF_MCE_EARLY 0x08000000 /* Early kill for mce process policy */ |
| 1411 | #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ | 1412 | #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ |
| @@ -1904,6 +1905,14 @@ static inline void rseq_execve(struct task_struct *t) | |||
| 1904 | 1905 | ||
| 1905 | #endif | 1906 | #endif |
| 1906 | 1907 | ||
| 1908 | void __exit_umh(struct task_struct *tsk); | ||
| 1909 | |||
| 1910 | static inline void exit_umh(struct task_struct *tsk) | ||
| 1911 | { | ||
| 1912 | if (unlikely(tsk->flags & PF_UMH)) | ||
| 1913 | __exit_umh(tsk); | ||
| 1914 | } | ||
| 1915 | |||
| 1907 | #ifdef CONFIG_DEBUG_RSEQ | 1916 | #ifdef CONFIG_DEBUG_RSEQ |
| 1908 | 1917 | ||
| 1909 | void rseq_syscall(struct pt_regs *regs); | 1918 | void rseq_syscall(struct pt_regs *regs); |
diff --git a/include/linux/sched/coredump.h b/include/linux/sched/coredump.h index ec912d01126f..ecdc6542070f 100644 --- a/include/linux/sched/coredump.h +++ b/include/linux/sched/coredump.h | |||
| @@ -71,6 +71,7 @@ static inline int get_dumpable(struct mm_struct *mm) | |||
| 71 | #define MMF_HUGE_ZERO_PAGE 23 /* mm has ever used the global huge zero page */ | 71 | #define MMF_HUGE_ZERO_PAGE 23 /* mm has ever used the global huge zero page */ |
| 72 | #define MMF_DISABLE_THP 24 /* disable THP for all VMAs */ | 72 | #define MMF_DISABLE_THP 24 /* disable THP for all VMAs */ |
| 73 | #define MMF_OOM_VICTIM 25 /* mm is the oom victim */ | 73 | #define MMF_OOM_VICTIM 25 /* mm is the oom victim */ |
| 74 | #define MMF_OOM_REAP_QUEUED 26 /* mm was queued for oom_reaper */ | ||
| 74 | #define MMF_DISABLE_THP_MASK (1 << MMF_DISABLE_THP) | 75 | #define MMF_DISABLE_THP_MASK (1 << MMF_DISABLE_THP) |
| 75 | 76 | ||
| 76 | #define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK |\ | 77 | #define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK |\ |
diff --git a/include/linux/sched/wake_q.h b/include/linux/sched/wake_q.h index 10b19a192b2d..545f37138057 100644 --- a/include/linux/sched/wake_q.h +++ b/include/linux/sched/wake_q.h | |||
| @@ -24,9 +24,13 @@ | |||
| 24 | * called near the end of a function. Otherwise, the list can be | 24 | * called near the end of a function. Otherwise, the list can be |
| 25 | * re-initialized for later re-use by wake_q_init(). | 25 | * re-initialized for later re-use by wake_q_init(). |
| 26 | * | 26 | * |
| 27 | * Note that this can cause spurious wakeups. schedule() callers | 27 | * NOTE that this can cause spurious wakeups. schedule() callers |
| 28 | * must ensure the call is done inside a loop, confirming that the | 28 | * must ensure the call is done inside a loop, confirming that the |
| 29 | * wakeup condition has in fact occurred. | 29 | * wakeup condition has in fact occurred. |
| 30 | * | ||
| 31 | * NOTE that there is no guarantee the wakeup will happen any later than the | ||
| 32 | * wake_q_add() location. Therefore task must be ready to be woken at the | ||
| 33 | * location of the wake_q_add(). | ||
| 30 | */ | 34 | */ |
| 31 | 35 | ||
| 32 | #include <linux/sched.h> | 36 | #include <linux/sched.h> |
diff --git a/include/linux/signal.h b/include/linux/signal.h index cc7e2c1cd444..9702016734b1 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
| @@ -392,7 +392,7 @@ extern bool unhandled_signal(struct task_struct *tsk, int sig); | |||
| 392 | #endif | 392 | #endif |
| 393 | 393 | ||
| 394 | #define siginmask(sig, mask) \ | 394 | #define siginmask(sig, mask) \ |
| 395 | ((sig) < SIGRTMIN && (rt_sigmask(sig) & (mask))) | 395 | ((sig) > 0 && (sig) < SIGRTMIN && (rt_sigmask(sig) & (mask))) |
| 396 | 396 | ||
| 397 | #define SIG_KERNEL_ONLY_MASK (\ | 397 | #define SIG_KERNEL_ONLY_MASK (\ |
| 398 | rt_sigmask(SIGKILL) | rt_sigmask(SIGSTOP)) | 398 | rt_sigmask(SIGKILL) | rt_sigmask(SIGSTOP)) |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 93f56fddd92a..bdb9563c64a0 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -2434,7 +2434,7 @@ static inline void skb_probe_transport_header(struct sk_buff *skb, | |||
| 2434 | 2434 | ||
| 2435 | if (skb_flow_dissect_flow_keys_basic(skb, &keys, NULL, 0, 0, 0, 0)) | 2435 | if (skb_flow_dissect_flow_keys_basic(skb, &keys, NULL, 0, 0, 0, 0)) |
| 2436 | skb_set_transport_header(skb, keys.control.thoff); | 2436 | skb_set_transport_header(skb, keys.control.thoff); |
| 2437 | else | 2437 | else if (offset_hint >= 0) |
| 2438 | skb_set_transport_header(skb, offset_hint); | 2438 | skb_set_transport_header(skb, offset_hint); |
| 2439 | } | 2439 | } |
| 2440 | 2440 | ||
| @@ -3218,6 +3218,7 @@ int pskb_trim_rcsum_slow(struct sk_buff *skb, unsigned int len); | |||
| 3218 | * | 3218 | * |
| 3219 | * This is exactly the same as pskb_trim except that it ensures the | 3219 | * This is exactly the same as pskb_trim except that it ensures the |
| 3220 | * checksum of received packets are still valid after the operation. | 3220 | * checksum of received packets are still valid after the operation. |
| 3221 | * It can change skb pointers. | ||
| 3221 | */ | 3222 | */ |
| 3222 | 3223 | ||
| 3223 | static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len) | 3224 | static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len) |
| @@ -4211,6 +4212,12 @@ static inline bool skb_is_gso_sctp(const struct sk_buff *skb) | |||
| 4211 | return skb_shinfo(skb)->gso_type & SKB_GSO_SCTP; | 4212 | return skb_shinfo(skb)->gso_type & SKB_GSO_SCTP; |
| 4212 | } | 4213 | } |
| 4213 | 4214 | ||
| 4215 | static inline bool skb_is_gso_tcp(const struct sk_buff *skb) | ||
| 4216 | { | ||
| 4217 | return skb_is_gso(skb) && | ||
| 4218 | skb_shinfo(skb)->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6); | ||
| 4219 | } | ||
| 4220 | |||
| 4214 | static inline void skb_gso_reset(struct sk_buff *skb) | 4221 | static inline void skb_gso_reset(struct sk_buff *skb) |
| 4215 | { | 4222 | { |
| 4216 | skb_shinfo(skb)->gso_size = 0; | 4223 | skb_shinfo(skb)->gso_size = 0; |
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index 7ddfc65586b0..4335bd771ce5 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h | |||
| @@ -184,6 +184,7 @@ struct plat_stmmacenet_data { | |||
| 184 | struct clk *pclk; | 184 | struct clk *pclk; |
| 185 | struct clk *clk_ptp_ref; | 185 | struct clk *clk_ptp_ref; |
| 186 | unsigned int clk_ptp_rate; | 186 | unsigned int clk_ptp_rate; |
| 187 | unsigned int clk_ref_rate; | ||
| 187 | struct reset_control *stmmac_rst; | 188 | struct reset_control *stmmac_rst; |
| 188 | struct stmmac_axi *axi; | 189 | struct stmmac_axi *axi; |
| 189 | int has_gmac4; | 190 | int has_gmac4; |
diff --git a/include/linux/umh.h b/include/linux/umh.h index 235f51b62c71..0c08de356d0d 100644 --- a/include/linux/umh.h +++ b/include/linux/umh.h | |||
| @@ -47,6 +47,8 @@ struct umh_info { | |||
| 47 | const char *cmdline; | 47 | const char *cmdline; |
| 48 | struct file *pipe_to_umh; | 48 | struct file *pipe_to_umh; |
| 49 | struct file *pipe_from_umh; | 49 | struct file *pipe_from_umh; |
| 50 | struct list_head list; | ||
| 51 | void (*cleanup)(struct umh_info *info); | ||
| 50 | pid_t pid; | 52 | pid_t pid; |
| 51 | }; | 53 | }; |
| 52 | int fork_usermode_blob(void *data, size_t len, struct umh_info *info); | 54 | int fork_usermode_blob(void *data, size_t len, struct umh_info *info); |
diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h index 32baf8e26735..987b6491b946 100644 --- a/include/linux/virtio_config.h +++ b/include/linux/virtio_config.h | |||
| @@ -12,6 +12,11 @@ struct irq_affinity; | |||
| 12 | 12 | ||
| 13 | /** | 13 | /** |
| 14 | * virtio_config_ops - operations for configuring a virtio device | 14 | * virtio_config_ops - operations for configuring a virtio device |
| 15 | * Note: Do not assume that a transport implements all of the operations | ||
| 16 | * getting/setting a value as a simple read/write! Generally speaking, | ||
| 17 | * any of @get/@set, @get_status/@set_status, or @get_features/ | ||
| 18 | * @finalize_features are NOT safe to be called from an atomic | ||
| 19 | * context. | ||
| 15 | * @get: read the value of a configuration field | 20 | * @get: read the value of a configuration field |
| 16 | * vdev: the virtio_device | 21 | * vdev: the virtio_device |
| 17 | * offset: the offset of the configuration field | 22 | * offset: the offset of the configuration field |
| @@ -22,7 +27,7 @@ struct irq_affinity; | |||
| 22 | * offset: the offset of the configuration field | 27 | * offset: the offset of the configuration field |
| 23 | * buf: the buffer to read the field value from. | 28 | * buf: the buffer to read the field value from. |
| 24 | * len: the length of the buffer | 29 | * len: the length of the buffer |
| 25 | * @generation: config generation counter | 30 | * @generation: config generation counter (optional) |
| 26 | * vdev: the virtio_device | 31 | * vdev: the virtio_device |
| 27 | * Returns the config generation counter | 32 | * Returns the config generation counter |
| 28 | * @get_status: read the status byte | 33 | * @get_status: read the status byte |
| @@ -48,17 +53,17 @@ struct irq_affinity; | |||
| 48 | * @del_vqs: free virtqueues found by find_vqs(). | 53 | * @del_vqs: free virtqueues found by find_vqs(). |
| 49 | * @get_features: get the array of feature bits for this device. | 54 | * @get_features: get the array of feature bits for this device. |
| 50 | * vdev: the virtio_device | 55 | * vdev: the virtio_device |
| 51 | * Returns the first 32 feature bits (all we currently need). | 56 | * Returns the first 64 feature bits (all we currently need). |
| 52 | * @finalize_features: confirm what device features we'll be using. | 57 | * @finalize_features: confirm what device features we'll be using. |
| 53 | * vdev: the virtio_device | 58 | * vdev: the virtio_device |
| 54 | * This gives the final feature bits for the device: it can change | 59 | * This gives the final feature bits for the device: it can change |
| 55 | * the dev->feature bits if it wants. | 60 | * the dev->feature bits if it wants. |
| 56 | * Returns 0 on success or error status | 61 | * Returns 0 on success or error status |
| 57 | * @bus_name: return the bus name associated with the device | 62 | * @bus_name: return the bus name associated with the device (optional) |
| 58 | * vdev: the virtio_device | 63 | * vdev: the virtio_device |
| 59 | * This returns a pointer to the bus name a la pci_name from which | 64 | * This returns a pointer to the bus name a la pci_name from which |
| 60 | * the caller can then copy. | 65 | * the caller can then copy. |
| 61 | * @set_vq_affinity: set the affinity for a virtqueue. | 66 | * @set_vq_affinity: set the affinity for a virtqueue (optional). |
| 62 | * @get_vq_affinity: get the affinity for a virtqueue (optional). | 67 | * @get_vq_affinity: get the affinity for a virtqueue (optional). |
| 63 | */ | 68 | */ |
| 64 | typedef void vq_callback_t(struct virtqueue *); | 69 | typedef void vq_callback_t(struct virtqueue *); |
diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h index cb462f9ab7dd..e0348cb0a1dd 100644 --- a/include/linux/virtio_net.h +++ b/include/linux/virtio_net.h | |||
| @@ -57,6 +57,25 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb, | |||
| 57 | 57 | ||
| 58 | if (!skb_partial_csum_set(skb, start, off)) | 58 | if (!skb_partial_csum_set(skb, start, off)) |
| 59 | return -EINVAL; | 59 | return -EINVAL; |
| 60 | } else { | ||
| 61 | /* gso packets without NEEDS_CSUM do not set transport_offset. | ||
| 62 | * probe and drop if does not match one of the above types. | ||
| 63 | */ | ||
| 64 | if (gso_type && skb->network_header) { | ||
| 65 | if (!skb->protocol) | ||
| 66 | virtio_net_hdr_set_proto(skb, hdr); | ||
| 67 | retry: | ||
| 68 | skb_probe_transport_header(skb, -1); | ||
| 69 | if (!skb_transport_header_was_set(skb)) { | ||
| 70 | /* UFO does not specify ipv4 or 6: try both */ | ||
| 71 | if (gso_type & SKB_GSO_UDP && | ||
| 72 | skb->protocol == htons(ETH_P_IP)) { | ||
| 73 | skb->protocol = htons(ETH_P_IPV6); | ||
| 74 | goto retry; | ||
| 75 | } | ||
| 76 | return -EINVAL; | ||
| 77 | } | ||
| 78 | } | ||
| 60 | } | 79 | } |
| 61 | 80 | ||
| 62 | if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) { | 81 | if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) { |
diff --git a/include/linux/xarray.h b/include/linux/xarray.h index f492e21c4aa2..5d9d318bcf7a 100644 --- a/include/linux/xarray.h +++ b/include/linux/xarray.h | |||
| @@ -176,7 +176,8 @@ static inline bool xa_is_internal(const void *entry) | |||
| 176 | */ | 176 | */ |
| 177 | static inline bool xa_is_err(const void *entry) | 177 | static inline bool xa_is_err(const void *entry) |
| 178 | { | 178 | { |
| 179 | return unlikely(xa_is_internal(entry)); | 179 | return unlikely(xa_is_internal(entry) && |
| 180 | entry >= xa_mk_internal(-MAX_ERRNO)); | ||
| 180 | } | 181 | } |
| 181 | 182 | ||
| 182 | /** | 183 | /** |
| @@ -286,7 +287,6 @@ struct xarray { | |||
| 286 | */ | 287 | */ |
| 287 | #define DEFINE_XARRAY_ALLOC(name) DEFINE_XARRAY_FLAGS(name, XA_FLAGS_ALLOC) | 288 | #define DEFINE_XARRAY_ALLOC(name) DEFINE_XARRAY_FLAGS(name, XA_FLAGS_ALLOC) |
| 288 | 289 | ||
| 289 | void xa_init_flags(struct xarray *, gfp_t flags); | ||
| 290 | void *xa_load(struct xarray *, unsigned long index); | 290 | void *xa_load(struct xarray *, unsigned long index); |
| 291 | void *xa_store(struct xarray *, unsigned long index, void *entry, gfp_t); | 291 | void *xa_store(struct xarray *, unsigned long index, void *entry, gfp_t); |
| 292 | void *xa_erase(struct xarray *, unsigned long index); | 292 | void *xa_erase(struct xarray *, unsigned long index); |
| @@ -304,6 +304,24 @@ unsigned int xa_extract(struct xarray *, void **dst, unsigned long start, | |||
| 304 | void xa_destroy(struct xarray *); | 304 | void xa_destroy(struct xarray *); |
| 305 | 305 | ||
| 306 | /** | 306 | /** |
| 307 | * xa_init_flags() - Initialise an empty XArray with flags. | ||
| 308 | * @xa: XArray. | ||
| 309 | * @flags: XA_FLAG values. | ||
| 310 | * | ||
| 311 | * If you need to initialise an XArray with special flags (eg you need | ||
| 312 | * to take the lock from interrupt context), use this function instead | ||
| 313 | * of xa_init(). | ||
| 314 | * | ||
| 315 | * Context: Any context. | ||
| 316 | */ | ||
| 317 | static inline void xa_init_flags(struct xarray *xa, gfp_t flags) | ||
| 318 | { | ||
| 319 | spin_lock_init(&xa->xa_lock); | ||
| 320 | xa->xa_flags = flags; | ||
| 321 | xa->xa_head = NULL; | ||
| 322 | } | ||
| 323 | |||
| 324 | /** | ||
| 307 | * xa_init() - Initialise an empty XArray. | 325 | * xa_init() - Initialise an empty XArray. |
| 308 | * @xa: XArray. | 326 | * @xa: XArray. |
| 309 | * | 327 | * |
| @@ -342,20 +360,45 @@ static inline bool xa_marked(const struct xarray *xa, xa_mark_t mark) | |||
| 342 | } | 360 | } |
| 343 | 361 | ||
| 344 | /** | 362 | /** |
| 345 | * xa_for_each() - Iterate over a portion of an XArray. | 363 | * xa_for_each_start() - Iterate over a portion of an XArray. |
| 346 | * @xa: XArray. | 364 | * @xa: XArray. |
| 365 | * @index: Index of @entry. | ||
| 347 | * @entry: Entry retrieved from array. | 366 | * @entry: Entry retrieved from array. |
| 367 | * @start: First index to retrieve from array. | ||
| 368 | * | ||
| 369 | * During the iteration, @entry will have the value of the entry stored | ||
| 370 | * in @xa at @index. You may modify @index during the iteration if you | ||
| 371 | * want to skip or reprocess indices. It is safe to modify the array | ||
| 372 | * during the iteration. At the end of the iteration, @entry will be set | ||
| 373 | * to NULL and @index will have a value less than or equal to max. | ||
| 374 | * | ||
| 375 | * xa_for_each_start() is O(n.log(n)) while xas_for_each() is O(n). You have | ||
| 376 | * to handle your own locking with xas_for_each(), and if you have to unlock | ||
| 377 | * after each iteration, it will also end up being O(n.log(n)). | ||
| 378 | * xa_for_each_start() will spin if it hits a retry entry; if you intend to | ||
| 379 | * see retry entries, you should use the xas_for_each() iterator instead. | ||
| 380 | * The xas_for_each() iterator will expand into more inline code than | ||
| 381 | * xa_for_each_start(). | ||
| 382 | * | ||
| 383 | * Context: Any context. Takes and releases the RCU lock. | ||
| 384 | */ | ||
| 385 | #define xa_for_each_start(xa, index, entry, start) \ | ||
| 386 | for (index = start, \ | ||
| 387 | entry = xa_find(xa, &index, ULONG_MAX, XA_PRESENT); \ | ||
| 388 | entry; \ | ||
| 389 | entry = xa_find_after(xa, &index, ULONG_MAX, XA_PRESENT)) | ||
| 390 | |||
| 391 | /** | ||
| 392 | * xa_for_each() - Iterate over present entries in an XArray. | ||
| 393 | * @xa: XArray. | ||
| 348 | * @index: Index of @entry. | 394 | * @index: Index of @entry. |
| 349 | * @max: Maximum index to retrieve from array. | 395 | * @entry: Entry retrieved from array. |
| 350 | * @filter: Selection criterion. | ||
| 351 | * | 396 | * |
| 352 | * Initialise @index to the lowest index you want to retrieve from the | 397 | * During the iteration, @entry will have the value of the entry stored |
| 353 | * array. During the iteration, @entry will have the value of the entry | 398 | * in @xa at @index. You may modify @index during the iteration if you want |
| 354 | * stored in @xa at @index. The iteration will skip all entries in the | 399 | * to skip or reprocess indices. It is safe to modify the array during the |
| 355 | * array which do not match @filter. You may modify @index during the | 400 | * iteration. At the end of the iteration, @entry will be set to NULL and |
| 356 | * iteration if you want to skip or reprocess indices. It is safe to modify | 401 | * @index will have a value less than or equal to max. |
| 357 | * the array during the iteration. At the end of the iteration, @entry will | ||
| 358 | * be set to NULL and @index will have a value less than or equal to max. | ||
| 359 | * | 402 | * |
| 360 | * xa_for_each() is O(n.log(n)) while xas_for_each() is O(n). You have | 403 | * xa_for_each() is O(n.log(n)) while xas_for_each() is O(n). You have |
| 361 | * to handle your own locking with xas_for_each(), and if you have to unlock | 404 | * to handle your own locking with xas_for_each(), and if you have to unlock |
| @@ -366,9 +409,36 @@ static inline bool xa_marked(const struct xarray *xa, xa_mark_t mark) | |||
| 366 | * | 409 | * |
| 367 | * Context: Any context. Takes and releases the RCU lock. | 410 | * Context: Any context. Takes and releases the RCU lock. |
| 368 | */ | 411 | */ |
| 369 | #define xa_for_each(xa, entry, index, max, filter) \ | 412 | #define xa_for_each(xa, index, entry) \ |
| 370 | for (entry = xa_find(xa, &index, max, filter); entry; \ | 413 | xa_for_each_start(xa, index, entry, 0) |
| 371 | entry = xa_find_after(xa, &index, max, filter)) | 414 | |
| 415 | /** | ||
| 416 | * xa_for_each_marked() - Iterate over marked entries in an XArray. | ||
| 417 | * @xa: XArray. | ||
| 418 | * @index: Index of @entry. | ||
| 419 | * @entry: Entry retrieved from array. | ||
| 420 | * @filter: Selection criterion. | ||
| 421 | * | ||
| 422 | * During the iteration, @entry will have the value of the entry stored | ||
| 423 | * in @xa at @index. The iteration will skip all entries in the array | ||
| 424 | * which do not match @filter. You may modify @index during the iteration | ||
| 425 | * if you want to skip or reprocess indices. It is safe to modify the array | ||
| 426 | * during the iteration. At the end of the iteration, @entry will be set to | ||
| 427 | * NULL and @index will have a value less than or equal to max. | ||
| 428 | * | ||
| 429 | * xa_for_each_marked() is O(n.log(n)) while xas_for_each_marked() is O(n). | ||
| 430 | * You have to handle your own locking with xas_for_each(), and if you have | ||
| 431 | * to unlock after each iteration, it will also end up being O(n.log(n)). | ||
| 432 | * xa_for_each_marked() will spin if it hits a retry entry; if you intend to | ||
| 433 | * see retry entries, you should use the xas_for_each_marked() iterator | ||
| 434 | * instead. The xas_for_each_marked() iterator will expand into more inline | ||
| 435 | * code than xa_for_each_marked(). | ||
| 436 | * | ||
| 437 | * Context: Any context. Takes and releases the RCU lock. | ||
| 438 | */ | ||
| 439 | #define xa_for_each_marked(xa, index, entry, filter) \ | ||
| 440 | for (index = 0, entry = xa_find(xa, &index, ULONG_MAX, filter); \ | ||
| 441 | entry; entry = xa_find_after(xa, &index, ULONG_MAX, filter)) | ||
| 372 | 442 | ||
| 373 | #define xa_trylock(xa) spin_trylock(&(xa)->xa_lock) | 443 | #define xa_trylock(xa) spin_trylock(&(xa)->xa_lock) |
| 374 | #define xa_lock(xa) spin_lock(&(xa)->xa_lock) | 444 | #define xa_lock(xa) spin_lock(&(xa)->xa_lock) |
| @@ -393,40 +463,13 @@ void *__xa_erase(struct xarray *, unsigned long index); | |||
| 393 | void *__xa_store(struct xarray *, unsigned long index, void *entry, gfp_t); | 463 | void *__xa_store(struct xarray *, unsigned long index, void *entry, gfp_t); |
| 394 | void *__xa_cmpxchg(struct xarray *, unsigned long index, void *old, | 464 | void *__xa_cmpxchg(struct xarray *, unsigned long index, void *old, |
| 395 | void *entry, gfp_t); | 465 | void *entry, gfp_t); |
| 466 | int __xa_insert(struct xarray *, unsigned long index, void *entry, gfp_t); | ||
| 396 | int __xa_alloc(struct xarray *, u32 *id, u32 max, void *entry, gfp_t); | 467 | int __xa_alloc(struct xarray *, u32 *id, u32 max, void *entry, gfp_t); |
| 397 | int __xa_reserve(struct xarray *, unsigned long index, gfp_t); | 468 | int __xa_reserve(struct xarray *, unsigned long index, gfp_t); |
| 398 | void __xa_set_mark(struct xarray *, unsigned long index, xa_mark_t); | 469 | void __xa_set_mark(struct xarray *, unsigned long index, xa_mark_t); |
| 399 | void __xa_clear_mark(struct xarray *, unsigned long index, xa_mark_t); | 470 | void __xa_clear_mark(struct xarray *, unsigned long index, xa_mark_t); |
| 400 | 471 | ||
| 401 | /** | 472 | /** |
| 402 | * __xa_insert() - Store this entry in the XArray unless another entry is | ||
| 403 | * already present. | ||
| 404 | * @xa: XArray. | ||
| 405 | * @index: Index into array. | ||
| 406 | * @entry: New entry. | ||
| 407 | * @gfp: Memory allocation flags. | ||
| 408 | * | ||
| 409 | * If you would rather see the existing entry in the array, use __xa_cmpxchg(). | ||
| 410 | * This function is for users who don't care what the entry is, only that | ||
| 411 | * one is present. | ||
| 412 | * | ||
| 413 | * Context: Any context. Expects xa_lock to be held on entry. May | ||
| 414 | * release and reacquire xa_lock if the @gfp flags permit. | ||
| 415 | * Return: 0 if the store succeeded. -EEXIST if another entry was present. | ||
| 416 | * -ENOMEM if memory could not be allocated. | ||
| 417 | */ | ||
| 418 | static inline int __xa_insert(struct xarray *xa, unsigned long index, | ||
| 419 | void *entry, gfp_t gfp) | ||
| 420 | { | ||
| 421 | void *curr = __xa_cmpxchg(xa, index, NULL, entry, gfp); | ||
| 422 | if (!curr) | ||
| 423 | return 0; | ||
| 424 | if (xa_is_err(curr)) | ||
| 425 | return xa_err(curr); | ||
| 426 | return -EEXIST; | ||
| 427 | } | ||
| 428 | |||
| 429 | /** | ||
| 430 | * xa_store_bh() - Store this entry in the XArray. | 473 | * xa_store_bh() - Store this entry in the XArray. |
| 431 | * @xa: XArray. | 474 | * @xa: XArray. |
| 432 | * @index: Index into array. | 475 | * @index: Index into array. |
| @@ -453,7 +496,7 @@ static inline void *xa_store_bh(struct xarray *xa, unsigned long index, | |||
| 453 | } | 496 | } |
| 454 | 497 | ||
| 455 | /** | 498 | /** |
| 456 | * xa_store_irq() - Erase this entry from the XArray. | 499 | * xa_store_irq() - Store this entry in the XArray. |
| 457 | * @xa: XArray. | 500 | * @xa: XArray. |
| 458 | * @index: Index into array. | 501 | * @index: Index into array. |
| 459 | * @entry: New entry. | 502 | * @entry: New entry. |
| @@ -615,24 +658,83 @@ static inline void *xa_cmpxchg_irq(struct xarray *xa, unsigned long index, | |||
| 615 | * @entry: New entry. | 658 | * @entry: New entry. |
| 616 | * @gfp: Memory allocation flags. | 659 | * @gfp: Memory allocation flags. |
| 617 | * | 660 | * |
| 618 | * If you would rather see the existing entry in the array, use xa_cmpxchg(). | 661 | * Inserting a NULL entry will store a reserved entry (like xa_reserve()) |
| 619 | * This function is for users who don't care what the entry is, only that | 662 | * if no entry is present. Inserting will fail if a reserved entry is |
| 620 | * one is present. | 663 | * present, even though loading from this index will return NULL. |
| 621 | * | 664 | * |
| 622 | * Context: Process context. Takes and releases the xa_lock. | 665 | * Context: Any context. Takes and releases the xa_lock. May sleep if |
| 623 | * May sleep if the @gfp flags permit. | 666 | * the @gfp flags permit. |
| 624 | * Return: 0 if the store succeeded. -EEXIST if another entry was present. | 667 | * Return: 0 if the store succeeded. -EEXIST if another entry was present. |
| 625 | * -ENOMEM if memory could not be allocated. | 668 | * -ENOMEM if memory could not be allocated. |
| 626 | */ | 669 | */ |
| 627 | static inline int xa_insert(struct xarray *xa, unsigned long index, | 670 | static inline int xa_insert(struct xarray *xa, unsigned long index, |
| 628 | void *entry, gfp_t gfp) | 671 | void *entry, gfp_t gfp) |
| 629 | { | 672 | { |
| 630 | void *curr = xa_cmpxchg(xa, index, NULL, entry, gfp); | 673 | int err; |
| 631 | if (!curr) | 674 | |
| 632 | return 0; | 675 | xa_lock(xa); |
| 633 | if (xa_is_err(curr)) | 676 | err = __xa_insert(xa, index, entry, gfp); |
| 634 | return xa_err(curr); | 677 | xa_unlock(xa); |
| 635 | return -EEXIST; | 678 | |
| 679 | return err; | ||
| 680 | } | ||
| 681 | |||
| 682 | /** | ||
| 683 | * xa_insert_bh() - Store this entry in the XArray unless another entry is | ||
| 684 | * already present. | ||
| 685 | * @xa: XArray. | ||
| 686 | * @index: Index into array. | ||
| 687 | * @entry: New entry. | ||
| 688 | * @gfp: Memory allocation flags. | ||
| 689 | * | ||
| 690 | * Inserting a NULL entry will store a reserved entry (like xa_reserve()) | ||
| 691 | * if no entry is present. Inserting will fail if a reserved entry is | ||
| 692 | * present, even though loading from this index will return NULL. | ||
| 693 | * | ||
| 694 | * Context: Any context. Takes and releases the xa_lock while | ||
| 695 | * disabling softirqs. May sleep if the @gfp flags permit. | ||
| 696 | * Return: 0 if the store succeeded. -EEXIST if another entry was present. | ||
| 697 | * -ENOMEM if memory could not be allocated. | ||
| 698 | */ | ||
| 699 | static inline int xa_insert_bh(struct xarray *xa, unsigned long index, | ||
| 700 | void *entry, gfp_t gfp) | ||
| 701 | { | ||
| 702 | int err; | ||
| 703 | |||
| 704 | xa_lock_bh(xa); | ||
| 705 | err = __xa_insert(xa, index, entry, gfp); | ||
| 706 | xa_unlock_bh(xa); | ||
| 707 | |||
| 708 | return err; | ||
| 709 | } | ||
| 710 | |||
| 711 | /** | ||
| 712 | * xa_insert_irq() - Store this entry in the XArray unless another entry is | ||
| 713 | * already present. | ||
| 714 | * @xa: XArray. | ||
| 715 | * @index: Index into array. | ||
| 716 | * @entry: New entry. | ||
| 717 | * @gfp: Memory allocation flags. | ||
| 718 | * | ||
| 719 | * Inserting a NULL entry will store a reserved entry (like xa_reserve()) | ||
| 720 | * if no entry is present. Inserting will fail if a reserved entry is | ||
| 721 | * present, even though loading from this index will return NULL. | ||
| 722 | * | ||
| 723 | * Context: Process context. Takes and releases the xa_lock while | ||
| 724 | * disabling interrupts. May sleep if the @gfp flags permit. | ||
| 725 | * Return: 0 if the store succeeded. -EEXIST if another entry was present. | ||
| 726 | * -ENOMEM if memory could not be allocated. | ||
| 727 | */ | ||
| 728 | static inline int xa_insert_irq(struct xarray *xa, unsigned long index, | ||
| 729 | void *entry, gfp_t gfp) | ||
| 730 | { | ||
| 731 | int err; | ||
| 732 | |||
| 733 | xa_lock_irq(xa); | ||
| 734 | err = __xa_insert(xa, index, entry, gfp); | ||
| 735 | xa_unlock_irq(xa); | ||
| 736 | |||
| 737 | return err; | ||
| 636 | } | 738 | } |
| 637 | 739 | ||
| 638 | /** | 740 | /** |
| @@ -970,8 +1072,8 @@ static inline bool xa_is_sibling(const void *entry) | |||
| 970 | (entry < xa_mk_sibling(XA_CHUNK_SIZE - 1)); | 1072 | (entry < xa_mk_sibling(XA_CHUNK_SIZE - 1)); |
| 971 | } | 1073 | } |
| 972 | 1074 | ||
| 973 | #define XA_ZERO_ENTRY xa_mk_internal(256) | 1075 | #define XA_RETRY_ENTRY xa_mk_internal(256) |
| 974 | #define XA_RETRY_ENTRY xa_mk_internal(257) | 1076 | #define XA_ZERO_ENTRY xa_mk_internal(257) |
| 975 | 1077 | ||
| 976 | /** | 1078 | /** |
| 977 | * xa_is_zero() - Is the entry a zero entry? | 1079 | * xa_is_zero() - Is the entry a zero entry? |
| @@ -996,6 +1098,17 @@ static inline bool xa_is_retry(const void *entry) | |||
| 996 | } | 1098 | } |
| 997 | 1099 | ||
| 998 | /** | 1100 | /** |
| 1101 | * xa_is_advanced() - Is the entry only permitted for the advanced API? | ||
| 1102 | * @entry: Entry to be stored in the XArray. | ||
| 1103 | * | ||
| 1104 | * Return: %true if the entry cannot be stored by the normal API. | ||
| 1105 | */ | ||
| 1106 | static inline bool xa_is_advanced(const void *entry) | ||
| 1107 | { | ||
| 1108 | return xa_is_internal(entry) && (entry <= XA_RETRY_ENTRY); | ||
| 1109 | } | ||
| 1110 | |||
| 1111 | /** | ||
| 999 | * typedef xa_update_node_t - A callback function from the XArray. | 1112 | * typedef xa_update_node_t - A callback function from the XArray. |
| 1000 | * @node: The node which is being processed | 1113 | * @node: The node which is being processed |
| 1001 | * | 1114 | * |
