Requested my mripard for some misc patches that need this as a base.
Showing the changes to include/linux (25 of 895 files). Show all
Unified · Split
| @@ -524,7 +524,7 @@ struct request_queue { · 523 unmodified lines | ||
| 524 | 524 | unsigned int sg_reserved_size; |
| 525 | 525 | int node; |
| 526 | 526 | #ifdef CONFIG_BLK_DEV_IO_TRACE |
| 527 | − struct blk_trace *blk_trace; | |
| 527 | + struct blk_trace __rcu *blk_trace; | |
| 528 | 528 | struct mutex blk_trace_mutex; |
| 529 | 529 | #endif |
| 530 | 530 | /* |
| @@ -1494,7 +1494,6 @@ static inline void put_dev_sector(Sector p) · 963 unmodified lines | ||
| 1494 | 1494 | } |
| 1495 | 1495 | |
| 1496 | 1496 | int kblockd_schedule_work(struct work_struct *work); |
| 1497 | −int kblockd_schedule_work_on(int cpu, struct work_struct *work); | |
| 1498 | 1497 | int kblockd_mod_delayed_work_on(int cpu, struct delayed_work *dwork, unsigned long delay); |
| 1499 | 1498 | |
| 1500 | 1499 | #define MODULE_ALIAS_BLOCKDEV(major,minor) \ |
| @@ -51,9 +51,13 @@ void __trace_note_message(struct blk_trace *, struct blkcg *blkcg, const char *f · 50 unmodified lines | ||
| 51 | 51 | **/ |
| 52 | 52 | #define blk_add_cgroup_trace_msg(q, cg, fmt, ...) \ |
| 53 | 53 | do { \ |
| 54 | − struct blk_trace *bt = (q)->blk_trace; \ | |
| 54 | + struct blk_trace *bt; \ | |
| 55 | + \ | |
| 56 | + rcu_read_lock(); \ | |
| 57 | + bt = rcu_dereference((q)->blk_trace); \ | |
| 55 | 58 | if (unlikely(bt)) \ |
| 56 | 59 | __trace_note_message(bt, cg, fmt, ##__VA_ARGS__);\ |
| 60 | + rcu_read_unlock(); \ | |
| 57 | 61 | } while (0) |
| 58 | 62 | #define blk_add_trace_msg(q, fmt, ...) \ |
| 59 | 63 | blk_add_cgroup_trace_msg(q, NULL, fmt, ##__VA_ARGS__) |
| @@ -61,10 +65,14 @@ void __trace_note_message(struct blk_trace *, struct blkcg *blkcg, const char *f · 1 unmodified line | ||
| 61 | 65 | |
| 62 | 66 | static inline bool blk_trace_note_message_enabled(struct request_queue *q) |
| 63 | 67 | { |
| 64 | − struct blk_trace *bt = q->blk_trace; | |
| 65 | − if (likely(!bt)) | |
| 66 | − return false; | |
| 67 | − return bt->act_mask & BLK_TC_NOTIFY; | |
| 68 | + struct blk_trace *bt; | |
| 69 | + bool ret; | |
| 70 | + | |
| 71 | + rcu_read_lock(); | |
| 72 | + bt = rcu_dereference(q->blk_trace); | |
| 73 | + ret = bt && (bt->act_mask & BLK_TC_NOTIFY); | |
| 74 | + rcu_read_unlock(); | |
| 75 | + return ret; | |
| 68 | 76 | } |
| 69 | 77 | |
| 70 | 78 | extern void blk_add_driver_data(struct request_queue *q, struct request *rq, |
| @@ -10,6 +10,9 @@ · 9 unmodified lines | ||
| 10 | 10 | #include <linux/kernel.h> |
| 11 | 11 | #include <linux/types.h> |
| 12 | 12 | |
| 13 | +#define BOOTCONFIG_MAGIC "#BOOTCONFIG\n" | |
| 14 | +#define BOOTCONFIG_MAGIC_LEN 12 | |
| 15 | + | |
| 13 | 16 | /* XBC tree node */ |
| 14 | 17 | struct xbc_node { |
| 15 | 18 | u16 next; |
| @@ -248,15 +248,6 @@ typedef struct compat_siginfo { · 247 unmodified lines | ||
| 248 | 248 | } _sifields; |
| 249 | 249 | } compat_siginfo_t; |
| 250 | 250 | |
| 251 | −/* | |
| 252 | − * These functions operate on 32- or 64-bit specs depending on | |
| 253 | − * COMPAT_USE_64BIT_TIME, hence the void user pointer arguments. | |
| 254 | − */ | |
| 255 | −extern int compat_get_timespec(struct timespec *, const void __user *); | |
| 256 | −extern int compat_put_timespec(const struct timespec *, void __user *); | |
| 257 | −extern int compat_get_timeval(struct timeval *, const void __user *); | |
| 258 | −extern int compat_put_timeval(const struct timeval *, void __user *); | |
| 259 | − | |
| 260 | 251 | struct compat_iovec { |
| 261 | 252 | compat_uptr_t iov_base; |
| 262 | 253 | compat_size_t iov_len; |
| @@ -416,26 +407,6 @@ int copy_siginfo_to_user32(struct compat_siginfo __user *to, const kernel_siginf · 153 unmodified lines | ||
| 416 | 407 | int get_compat_sigevent(struct sigevent *event, |
| 417 | 408 | const struct compat_sigevent __user *u_event); |
| 418 | 409 | |
| 419 | −static inline int old_timeval32_compare(struct old_timeval32 *lhs, | |
| 420 | − struct old_timeval32 *rhs) | |
| 421 | −{ | |
| 422 | − if (lhs->tv_sec < rhs->tv_sec) | |
| 423 | − return -1; | |
| 424 | − if (lhs->tv_sec > rhs->tv_sec) | |
| 425 | − return 1; | |
| 426 | − return lhs->tv_usec - rhs->tv_usec; | |
| 427 | −} | |
| 428 | − | |
| 429 | −static inline int old_timespec32_compare(struct old_timespec32 *lhs, | |
| 430 | − struct old_timespec32 *rhs) | |
| 431 | −{ | |
| 432 | − if (lhs->tv_sec < rhs->tv_sec) | |
| 433 | − return -1; | |
| 434 | − if (lhs->tv_sec > rhs->tv_sec) | |
| 435 | − return 1; | |
| 436 | − return lhs->tv_nsec - rhs->tv_nsec; | |
| 437 | −} | |
| 438 | − | |
| 439 | 410 | extern int get_compat_sigset(sigset_t *set, const compat_sigset_t __user *compat); |
| 440 | 411 | |
| 441 | 412 | /* |
| @@ -127,9 +127,9 @@ struct dentry *debugfs_create_blob(const char *name, umode_t mode, · 126 unmodified lines | ||
| 127 | 127 | struct dentry *parent, |
| 128 | 128 | struct debugfs_blob_wrapper *blob); |
| 129 | 129 | |
| 130 | −struct dentry *debugfs_create_regset32(const char *name, umode_t mode, | |
| 131 | − struct dentry *parent, | |
| 132 | − struct debugfs_regset32 *regset); | |
| 130 | +void debugfs_create_regset32(const char *name, umode_t mode, | |
| 131 | + struct dentry *parent, | |
| 132 | + struct debugfs_regset32 *regset); | |
| 133 | 133 | |
| 134 | 134 | void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs, |
| 135 | 135 | int nregs, void __iomem *base, char *prefix); |
| @@ -304,11 +304,10 @@ static inline struct dentry *debugfs_create_blob(const char *name, umode_t mode, · 168 unmodified lines | ||
| 304 | 304 | return ERR_PTR(-ENODEV); |
| 305 | 305 | } |
| 306 | 306 | |
| 307 | −static inline struct dentry *debugfs_create_regset32(const char *name, | |
| 308 | − umode_t mode, struct dentry *parent, | |
| 309 | − struct debugfs_regset32 *regset) | |
| 307 | +static inline void debugfs_create_regset32(const char *name, umode_t mode, | |
| 308 | + struct dentry *parent, | |
| 309 | + struct debugfs_regset32 *regset) | |
| 310 | 310 | { |
| 311 | − return ERR_PTR(-ENODEV); | |
| 312 | 311 | } |
| 313 | 312 | |
| 314 | 313 | static inline void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *regs, |
| @@ -798,6 +798,17 @@ static inline struct device_node *dev_of_node(struct device *dev) · 797 unmodified lines | ||
| 798 | 798 | return dev->of_node; |
| 799 | 799 | } |
| 800 | 800 | |
| 801 | +static inline bool dev_has_sync_state(struct device *dev) | |
| 802 | +{ | |
| 803 | + if (!dev) | |
| 804 | + return false; | |
| 805 | + if (dev->driver && dev->driver->sync_state) | |
| 806 | + return true; | |
| 807 | + if (dev->bus && dev->bus->sync_state) | |
| 808 | + return true; | |
| 809 | + return false; | |
| 810 | +} | |
| 811 | + | |
| 801 | 812 | /* |
| 802 | 813 | * High level routines for use by the bus drivers |
| 803 | 814 | */ |
| @@ -492,7 +492,7 @@ struct hid_report_enum { · 491 unmodified lines | ||
| 492 | 492 | }; |
| 493 | 493 | |
| 494 | 494 | #define HID_MIN_BUFFER_SIZE 64 /* make sure there is at least a packet size of space */ |
| 495 | −#define HID_MAX_BUFFER_SIZE 4096 /* 4kb */ | |
| 495 | +#define HID_MAX_BUFFER_SIZE 8192 /* 8kb */ | |
| 496 | 496 | #define HID_CONTROL_FIFO_SIZE 256 /* to init devices with >100 reports */ |
| 497 | 497 | #define HID_OUTPUT_FIFO_SIZE 64 |
| 498 | 498 | |
| @@ -22,19 +22,23 @@ extern int inet6_unregister_icmp_sender(ip6_icmp_send_t *fn); · 21 unmodified lines | ||
| 22 | 22 | int ip6_err_gen_icmpv6_unreach(struct sk_buff *skb, int nhs, int type, |
| 23 | 23 | unsigned int data_len); |
| 24 | 24 | |
| 25 | +#if IS_ENABLED(CONFIG_NF_NAT) | |
| 26 | +void icmpv6_ndo_send(struct sk_buff *skb_in, u8 type, u8 code, __u32 info); | |
| 27 | +#else | |
| 28 | +#define icmpv6_ndo_send icmpv6_send | |
| 29 | +#endif | |
| 30 | + | |
| 25 | 31 | #else |
| 26 | 32 | |
| 27 | 33 | static inline void icmpv6_send(struct sk_buff *skb, |
| 28 | 34 | u8 type, u8 code, __u32 info) |
| 29 | 35 | { |
| 30 | − | |
| 31 | 36 | } |
| 32 | −#endif | |
| 33 | 37 | |
| 34 | −#if IS_ENABLED(CONFIG_NF_NAT) | |
| 35 | −void icmpv6_ndo_send(struct sk_buff *skb_in, u8 type, u8 code, __u32 info); | |
| 36 | −#else | |
| 37 | −#define icmpv6_ndo_send icmpv6_send | |
| 38 | +static inline void icmpv6_ndo_send(struct sk_buff *skb, | |
| 39 | + u8 type, u8 code, __u32 info) | |
| 40 | +{ | |
| 41 | +} | |
| 38 | 42 | #endif |
| 39 | 43 | |
| 40 | 44 | extern int icmpv6_init(void); |
| @@ -122,7 +122,7 @@ static inline int intel_svm_unbind_mm(struct device *dev, int pasid) · 121 unmodified lines | ||
| 122 | 122 | BUG(); |
| 123 | 123 | } |
| 124 | 124 | |
| 125 | −static int intel_svm_is_pasid_valid(struct device *dev, int pasid) | |
| 125 | +static inline int intel_svm_is_pasid_valid(struct device *dev, int pasid) | |
| 126 | 126 | { |
| 127 | 127 | return -EINVAL; |
| 128 | 128 | } |
| @@ -192,7 +192,7 @@ enum { · 191 unmodified lines | ||
| 192 | 192 | IRQ_DOMAIN_FLAG_HIERARCHY = (1 << 0), |
| 193 | 193 | |
| 194 | 194 | /* Irq domain name was allocated in __irq_domain_add() */ |
| 195 | − IRQ_DOMAIN_NAME_ALLOCATED = (1 << 6), | |
| 195 | + IRQ_DOMAIN_NAME_ALLOCATED = (1 << 1), | |
| 196 | 196 | |
| 197 | 197 | /* Irq domain is an IPI domain with virq per cpu */ |
| 198 | 198 | IRQ_DOMAIN_FLAG_IPI_PER_CPU = (1 << 2), |
| @@ -66,33 +66,15 @@ static inline ktime_t ktime_set(const s64 secs, const unsigned long nsecs) · 65 unmodified lines | ||
| 66 | 66 | */ |
| 67 | 67 | #define ktime_sub_ns(kt, nsval) ((kt) - (nsval)) |
| 68 | 68 | |
| 69 | −/* convert a timespec to ktime_t format: */ | |
| 70 | −static inline ktime_t timespec_to_ktime(struct timespec ts) | |
| 71 | −{ | |
| 72 | − return ktime_set(ts.tv_sec, ts.tv_nsec); | |
| 73 | −} | |
| 74 | − | |
| 75 | 69 | /* convert a timespec64 to ktime_t format: */ |
| 76 | 70 | static inline ktime_t timespec64_to_ktime(struct timespec64 ts) |
| 77 | 71 | { |
| 78 | 72 | return ktime_set(ts.tv_sec, ts.tv_nsec); |
| 79 | 73 | } |
| 80 | 74 | |
| 81 | −/* convert a timeval to ktime_t format: */ | |
| 82 | −static inline ktime_t timeval_to_ktime(struct timeval tv) | |
| 83 | −{ | |
| 84 | − return ktime_set(tv.tv_sec, tv.tv_usec * NSEC_PER_USEC); | |
| 85 | −} | |
| 86 | − | |
| 87 | −/* Map the ktime_t to timespec conversion to ns_to_timespec function */ | |
| 88 | −#define ktime_to_timespec(kt) ns_to_timespec((kt)) | |
| 89 | − | |
| 90 | 75 | /* Map the ktime_t to timespec conversion to ns_to_timespec function */ |
| 91 | 76 | #define ktime_to_timespec64(kt) ns_to_timespec64((kt)) |
| 92 | 77 | |
| 93 | −/* Map the ktime_t to timeval conversion to ns_to_timeval function */ | |
| 94 | −#define ktime_to_timeval(kt) ns_to_timeval((kt)) | |
| 95 | − | |
| 96 | 78 | /* Convert ktime_t to nanoseconds */ |
| 97 | 79 | static inline s64 ktime_to_ns(const ktime_t kt) |
| 98 | 80 | { |
| @@ -215,25 +197,6 @@ static inline ktime_t ktime_sub_ms(const ktime_t kt, const u64 msec) · 116 unmodified lines | ||
| 215 | 197 | |
| 216 | 198 | extern ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs); |
| 217 | 199 | |
| 218 | −/** | |
| 219 | − * ktime_to_timespec_cond - convert a ktime_t variable to timespec | |
| 220 | − * format only if the variable contains data | |
| 221 | − * @kt: the ktime_t variable to convert | |
| 222 | − * @ts: the timespec variable to store the result in | |
| 223 | − * | |
| 224 | − * Return: %true if there was a successful conversion, %false if kt was 0. | |
| 225 | − */ | |
| 226 | −static inline __must_check bool ktime_to_timespec_cond(const ktime_t kt, | |
| 227 | − struct timespec *ts) | |
| 228 | −{ | |
| 229 | − if (kt) { | |
| 230 | − *ts = ktime_to_timespec(kt); | |
| 231 | − return true; | |
| 232 | − } else { | |
| 233 | − return false; | |
| 234 | − } | |
| 235 | −} | |
| 236 | − | |
| 237 | 200 | /** |
| 238 | 201 | * ktime_to_timespec64_cond - convert a ktime_t variable to timespec64 |
| 239 | 202 | * format only if the variable contains data |
| @@ -889,6 +889,8 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); · 888 unmodified lines | ||
| 889 | 889 | bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu); |
| 890 | 890 | int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu); |
| 891 | 891 | bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu); |
| 892 | +int kvm_arch_post_init_vm(struct kvm *kvm); | |
| 893 | +void kvm_arch_pre_destroy_vm(struct kvm *kvm); | |
| 892 | 894 | |
| 893 | 895 | #ifndef __KVM_HAVE_ARCH_VM_ALLOC |
| 894 | 896 | /* |
| @@ -1342,7 +1344,7 @@ static inline void kvm_vcpu_set_dy_eligible(struct kvm_vcpu *vcpu, bool val) · 447 unmodified lines | ||
| 1342 | 1344 | #endif /* CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT */ |
| 1343 | 1345 | |
| 1344 | 1346 | struct kvm_vcpu *kvm_get_running_vcpu(void); |
| 1345 | −struct kvm_vcpu __percpu **kvm_get_running_vcpus(void); | |
| 1347 | +struct kvm_vcpu * __percpu *kvm_get_running_vcpus(void); | |
| 1346 | 1348 | |
| 1347 | 1349 | #ifdef CONFIG_HAVE_KVM_IRQ_BYPASS |
| 1348 | 1350 | bool kvm_arch_has_irq_bypass(void); |
| @@ -688,7 +688,10 @@ struct mlx5_ifc_flow_table_nic_cap_bits { · 687 unmodified lines | ||
| 688 | 688 | u8 nic_rx_multi_path_tirs[0x1]; |
| 689 | 689 | u8 nic_rx_multi_path_tirs_fts[0x1]; |
| 690 | 690 | u8 allow_sniffer_and_nic_rx_shared_tir[0x1]; |
| 691 | − u8 reserved_at_3[0x1d]; | |
| 691 | + u8 reserved_at_3[0x4]; | |
| 692 | + u8 sw_owner_reformat_supported[0x1]; | |
| 693 | + u8 reserved_at_8[0x18]; | |
| 694 | + | |
| 692 | 695 | u8 encap_general_header[0x1]; |
| 693 | 696 | u8 reserved_at_21[0xa]; |
| 694 | 697 | u8 log_max_packet_reformat_context[0x5]; |
| @@ -2715,6 +2715,10 @@ static inline bool debug_pagealloc_enabled_static(void) · 2714 unmodified lines | ||
| 2715 | 2715 | #if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_ARCH_HAS_SET_DIRECT_MAP) |
| 2716 | 2716 | extern void __kernel_map_pages(struct page *page, int numpages, int enable); |
| 2717 | 2717 | |
| 2718 | +/* | |
| 2719 | + * When called in DEBUG_PAGEALLOC context, the call should most likely be | |
| 2720 | + * guarded by debug_pagealloc_enabled() or debug_pagealloc_enabled_static() | |
| 2721 | + */ | |
| 2718 | 2722 | static inline void |
| 2719 | 2723 | kernel_map_pages(struct page *page, int numpages, int enable) |
| 2720 | 2724 | { |
| @@ -72,6 +72,8 @@ void netdev_set_default_ethtool_ops(struct net_device *dev, · 71 unmodified lines | ||
| 72 | 72 | #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ |
| 73 | 73 | #define NET_RX_DROP 1 /* packet dropped */ |
| 74 | 74 | |
| 75 | +#define MAX_NEST_DEV 8 | |
| 76 | + | |
| 75 | 77 | /* |
| 76 | 78 | * Transmit return codes: transmit return codes originate from three different |
| 77 | 79 | * namespaces: |
| @@ -4389,11 +4391,8 @@ void *netdev_lower_get_next(struct net_device *dev, · 4311 unmodified lines | ||
| 4389 | 4391 | ldev; \ |
| 4390 | 4392 | ldev = netdev_lower_get_next(dev, &(iter))) |
| 4391 | 4393 | |
| 4392 | −struct net_device *netdev_all_lower_get_next(struct net_device *dev, | |
| 4394 | +struct net_device *netdev_next_lower_dev_rcu(struct net_device *dev, | |
| 4393 | 4395 | struct list_head **iter); |
| 4394 | −struct net_device *netdev_all_lower_get_next_rcu(struct net_device *dev, | |
| 4395 | − struct list_head **iter); | |
| 4396 | − | |
| 4397 | 4396 | int netdev_walk_all_lower_dev(struct net_device *dev, |
| 4398 | 4397 | int (*fn)(struct net_device *lower_dev, |
| 4399 | 4398 | void *data), |
| @@ -121,6 +121,7 @@ struct ip_set_ext { · 120 unmodified lines | ||
| 121 | 121 | u32 timeout; |
| 122 | 122 | u8 packets_op; |
| 123 | 123 | u8 bytes_op; |
| 124 | + bool target; | |
| 124 | 125 | }; |
| 125 | 126 | |
| 126 | 127 | struct ip_set; |
| @@ -187,6 +188,14 @@ struct ip_set_type_variant { · 60 unmodified lines | ||
| 187 | 188 | /* Return true if "b" set is the same as "a" |
| 188 | 189 | * according to the create set parameters */ |
| 189 | 190 | bool (*same_set)(const struct ip_set *a, const struct ip_set *b); |
| 191 | + /* Region-locking is used */ | |
| 192 | + bool region_lock; | |
| 193 | +}; | |
| 194 | + | |
| 195 | +struct ip_set_region { | |
| 196 | + spinlock_t lock; /* Region lock */ | |
| 197 | + size_t ext_size; /* Size of the dynamic extensions */ | |
| 198 | + u32 elements; /* Number of elements vs timeout */ | |
| 190 | 199 | }; |
| 191 | 200 | |
| 192 | 201 | /* The core set type structure */ |
| @@ -501,7 +510,7 @@ ip_set_init_skbinfo(struct ip_set_skbinfo *skbinfo, · 308 unmodified lines | ||
| 501 | 510 | } |
| 502 | 511 | |
| 503 | 512 | #define IP_SET_INIT_KEXT(skb, opt, set) \ |
| 504 | − { .bytes = (skb)->len, .packets = 1, \ | |
| 513 | + { .bytes = (skb)->len, .packets = 1, .target = true,\ | |
| 505 | 514 | .timeout = ip_set_adt_opt_timeout(opt, set) } |
| 506 | 515 | |
| 507 | 516 | #define IP_SET_INIT_UEXT(set) \ |
| @@ -11,6 +11,7 @@ struct omap2_mcspi_platform_config { · 10 unmodified lines | ||
| 11 | 11 | unsigned short num_cs; |
| 12 | 12 | unsigned int regs_offset; |
| 13 | 13 | unsigned int pin_dir:1; |
| 14 | + size_t max_xfer_len; | |
| 14 | 15 | }; |
| 15 | 16 | |
| 16 | 17 | struct omap2_mcspi_device_config { |
| @@ -145,6 +145,13 @@ static inline void hlist_nulls_add_tail_rcu(struct hlist_nulls_node *n, · 144 unmodified lines | ||
| 145 | 145 | } |
| 146 | 146 | } |
| 147 | 147 | |
| 148 | +/* after that hlist_nulls_del will work */ | |
| 149 | +static inline void hlist_nulls_add_fake(struct hlist_nulls_node *n) | |
| 150 | +{ | |
| 151 | + n->pprev = &n->next; | |
| 152 | + n->next = (struct hlist_nulls_node *)NULLS_MARKER(NULL); | |
| 153 | +} | |
| 154 | + | |
| 148 | 155 | /** |
| 149 | 156 | * hlist_nulls_for_each_entry_rcu - iterate over rcu list of given type |
| 150 | 157 | * @tpos: the type * to use as a loop cursor. |
| @@ -611,9 +611,15 @@ typedef unsigned char *sk_buff_data_t; · 610 unmodified lines | ||
| 611 | 611 | * @next: Next buffer in list |
| 612 | 612 | * @prev: Previous buffer in list |
| 613 | 613 | * @tstamp: Time we arrived/left |
| 614 | + * @skb_mstamp_ns: (aka @tstamp) earliest departure time; start point | |
| 615 | + * for retransmit timer | |
| 614 | 616 | * @rbnode: RB tree node, alternative to next/prev for netem/tcp |
| 617 | + * @list: queue head | |
| 615 | 618 | * @sk: Socket we are owned by |
| 619 | + * @ip_defrag_offset: (aka @sk) alternate use of @sk, used in | |
| 620 | + * fragmentation management | |
| 616 | 621 | * @dev: Device we arrived on/are leaving by |
| 622 | + * @dev_scratch: (aka @dev) alternate use of @dev when @dev would be %NULL | |
| 617 | 623 | * @cb: Control buffer. Free for use by every layer. Put private vars here |
| 618 | 624 | * @_skb_refdst: destination entry (with norefcount bit) |
| 619 | 625 | * @sp: the security path, used for xfrm |
| @@ -632,6 +638,9 @@ typedef unsigned char *sk_buff_data_t; · 12 unmodified lines | ||
| 632 | 638 | * @pkt_type: Packet class |
| 633 | 639 | * @fclone: skbuff clone status |
| 634 | 640 | * @ipvs_property: skbuff is owned by ipvs |
| 641 | + * @inner_protocol_type: whether the inner protocol is | |
| 642 | + * ENCAP_TYPE_ETHER or ENCAP_TYPE_IPPROTO | |
| 643 | + * @remcsum_offload: remote checksum offload is enabled | |
| 635 | 644 | * @offload_fwd_mark: Packet was L2-forwarded in hardware |
| 636 | 645 | * @offload_l3_fwd_mark: Packet was L3-forwarded in hardware |
| 637 | 646 | * @tc_skip_classify: do not classify packet. set by IFB device |
| @@ -650,6 +659,8 @@ typedef unsigned char *sk_buff_data_t; · 12 unmodified lines | ||
| 650 | 659 | * @tc_index: Traffic control index |
| 651 | 660 | * @hash: the packet hash |
| 652 | 661 | * @queue_mapping: Queue mapping for multiqueue devices |
| 662 | + * @head_frag: skb was allocated from page fragments, | |
| 663 | + * not allocated by kmalloc() or vmalloc(). | |
| 653 | 664 | * @pfmemalloc: skbuff was allocated from PFMEMALLOC reserves |
| 654 | 665 | * @active_extensions: active extensions (skb_ext_id types) |
| 655 | 666 | * @ndisc_nodetype: router type (from link layer) |
| @@ -660,15 +671,28 @@ typedef unsigned char *sk_buff_data_t; · 4 unmodified lines | ||
| 660 | 671 | * @wifi_acked_valid: wifi_acked was set |
| 661 | 672 | * @wifi_acked: whether frame was acked on wifi or not |
| 662 | 673 | * @no_fcs: Request NIC to treat last 4 bytes as Ethernet FCS |
| 674 | + * @encapsulation: indicates the inner headers in the skbuff are valid | |
| 675 | + * @encap_hdr_csum: software checksum is needed | |
| 676 | + * @csum_valid: checksum is already valid | |
| 663 | 677 | * @csum_not_inet: use CRC32c to resolve CHECKSUM_PARTIAL |
| 678 | + * @csum_complete_sw: checksum was completed by software | |
| 679 | + * @csum_level: indicates the number of consecutive checksums found in | |
| 680 | + * the packet minus one that have been verified as | |
| 681 | + * CHECKSUM_UNNECESSARY (max 3) | |
| 664 | 682 | * @dst_pending_confirm: need to confirm neighbour |
| 665 | 683 | * @decrypted: Decrypted SKB |
| 666 | 684 | * @napi_id: id of the NAPI struct this skb came from |
| 685 | + * @sender_cpu: (aka @napi_id) source CPU in XPS | |
| 667 | 686 | * @secmark: security marking |
| 668 | 687 | * @mark: Generic packet mark |
| 688 | + * @reserved_tailroom: (aka @mark) number of bytes of free space available | |
| 689 | + * at the tail of an sk_buff | |
| 690 | + * @vlan_present: VLAN tag is present | |
| 669 | 691 | * @vlan_proto: vlan encapsulation protocol |
| 670 | 692 | * @vlan_tci: vlan tag control information |
| 671 | 693 | * @inner_protocol: Protocol (encapsulation) |
| 694 | + * @inner_ipproto: (aka @inner_protocol) stores ipproto when | |
| 695 | + * skb->inner_protocol_type == ENCAP_TYPE_IPPROTO; | |
| 672 | 696 | * @inner_transport_header: Inner transport layer header (encapsulation) |
| 673 | 697 | * @inner_network_header: Network layer header (encapsulation) |
| 674 | 698 | * @inner_mac_header: Link layer header (encapsulation) |
| @@ -750,7 +774,9 @@ struct sk_buff { · 75 unmodified lines | ||
| 750 | 774 | #endif |
| 751 | 775 | #define CLONED_OFFSET() offsetof(struct sk_buff, __cloned_offset) |
| 752 | 776 | |
| 777 | + /* private: */ | |
| 753 | 778 | __u8 __cloned_offset[0]; |
| 779 | + /* public: */ | |
| 754 | 780 | __u8 cloned:1, |
| 755 | 781 | nohdr:1, |
| 756 | 782 | fclone:2, |
| @@ -775,7 +801,9 @@ struct sk_buff { · 18 unmodified lines | ||
| 775 | 801 | #endif |
| 776 | 802 | #define PKT_TYPE_OFFSET() offsetof(struct sk_buff, __pkt_type_offset) |
| 777 | 803 | |
| 804 | + /* private: */ | |
| 778 | 805 | __u8 __pkt_type_offset[0]; |
| 806 | + /* public: */ | |
| 779 | 807 | __u8 pkt_type:3; |
| 780 | 808 | __u8 ignore_df:1; |
| 781 | 809 | __u8 nf_trace:1; |
| @@ -798,7 +826,9 @@ struct sk_buff { · 16 unmodified lines | ||
| 798 | 826 | #define PKT_VLAN_PRESENT_BIT 0 |
| 799 | 827 | #endif |
| 800 | 828 | #define PKT_VLAN_PRESENT_OFFSET() offsetof(struct sk_buff, __pkt_vlan_present_offset) |
| 829 | + /* private: */ | |
| 801 | 830 | __u8 __pkt_vlan_present_offset[0]; |
| 831 | + /* public: */ | |
| 802 | 832 | __u8 vlan_present:1; |
| 803 | 833 | __u8 csum_complete_sw:1; |
| 804 | 834 | __u8 csum_level:2; |
| @@ -64,6 +64,9 @@ extern void swiotlb_tbl_sync_single(struct device *hwdev, · 63 unmodified lines | ||
| 64 | 64 | size_t size, enum dma_data_direction dir, |
| 65 | 65 | enum dma_sync_target target); |
| 66 | 66 | |
| 67 | +dma_addr_t swiotlb_map(struct device *dev, phys_addr_t phys, | |
| 68 | + size_t size, enum dma_data_direction dir, unsigned long attrs); | |
| 69 | + | |
| 67 | 70 | #ifdef CONFIG_SWIOTLB |
| 68 | 71 | extern enum swiotlb_force swiotlb_force; |
| 69 | 72 | extern phys_addr_t io_tlb_start, io_tlb_end; |
| @@ -73,8 +76,6 @@ static inline bool is_swiotlb_buffer(phys_addr_t paddr) · 3 unmodified lines | ||
| 73 | 76 | return paddr >= io_tlb_start && paddr < io_tlb_end; |
| 74 | 77 | } |
| 75 | 78 | |
| 76 | −bool swiotlb_map(struct device *dev, phys_addr_t *phys, dma_addr_t *dma_addr, | |
| 77 | − size_t size, enum dma_data_direction dir, unsigned long attrs); | |
| 78 | 79 | void __init swiotlb_exit(void); |
| 79 | 80 | unsigned int swiotlb_max_segment(void); |
| 80 | 81 | size_t swiotlb_max_mapping_size(struct device *dev); |
| @@ -85,12 +86,6 @@ static inline bool is_swiotlb_buffer(phys_addr_t paddr) · 4 unmodified lines | ||
| 85 | 86 | { |
| 86 | 87 | return false; |
| 87 | 88 | } |
| 88 | −static inline bool swiotlb_map(struct device *dev, phys_addr_t *phys, | |
| 89 | − dma_addr_t *dma_addr, size_t size, enum dma_data_direction dir, | |
| 90 | − unsigned long attrs) | |
| 91 | −{ | |
| 92 | − return false; | |
| 93 | −} | |
| 94 | 89 | static inline void swiotlb_exit(void) |
| 95 | 90 | { |
| 96 | 91 | } |
| @@ -12,8 +12,6 @@ · 11 unmodified lines | ||
| 12 | 12 | #include <linux/time64.h> |
| 13 | 13 | #include <linux/timex.h> |
| 14 | 14 | |
| 15 | −#define TIME_T_MAX (__kernel_old_time_t)((1UL << ((sizeof(__kernel_old_time_t) << 3) - 1)) - 1) | |
| 16 | − | |
| 17 | 15 | typedef s32 old_time32_t; |
| 18 | 16 | |
| 19 | 17 | struct old_timespec32 { |
| @@ -73,162 +71,12 @@ struct __kernel_timex; · 53 unmodified lines | ||
| 73 | 71 | int get_old_timex32(struct __kernel_timex *, const struct old_timex32 __user *); |
| 74 | 72 | int put_old_timex32(struct old_timex32 __user *, const struct __kernel_timex *); |
| 75 | 73 | |
| 76 | −#if __BITS_PER_LONG == 64 | |
| 77 | − | |
| 78 | −/* timespec64 is defined as timespec here */ | |
| 79 | −static inline struct timespec timespec64_to_timespec(const struct timespec64 ts64) | |
| 80 | −{ | |
| 81 | − return *(const struct timespec *)&ts64; | |
| 82 | −} | |
| 83 | − | |
| 84 | −static inline struct timespec64 timespec_to_timespec64(const struct timespec ts) | |
| 85 | −{ | |
| 86 | − return *(const struct timespec64 *)&ts; | |
| 87 | −} | |
| 88 | − | |
| 89 | −#else | |
| 90 | −static inline struct timespec timespec64_to_timespec(const struct timespec64 ts64) | |
| 91 | −{ | |
| 92 | − struct timespec ret; | |
| 93 | − | |
| 94 | − ret.tv_sec = (time_t)ts64.tv_sec; | |
| 95 | − ret.tv_nsec = ts64.tv_nsec; | |
| 96 | − return ret; | |
| 97 | −} | |
| 98 | − | |
| 99 | −static inline struct timespec64 timespec_to_timespec64(const struct timespec ts) | |
| 100 | −{ | |
| 101 | − struct timespec64 ret; | |
| 102 | − | |
| 103 | − ret.tv_sec = ts.tv_sec; | |
| 104 | − ret.tv_nsec = ts.tv_nsec; | |
| 105 | − return ret; | |
| 106 | −} | |
| 107 | −#endif | |
| 108 | − | |
| 109 | −static inline int timespec_equal(const struct timespec *a, | |
| 110 | − const struct timespec *b) | |
| 111 | −{ | |
| 112 | − return (a->tv_sec == b->tv_sec) && (a->tv_nsec == b->tv_nsec); | |
| 113 | −} | |
| 114 | − | |
| 115 | −/* | |
| 116 | − * lhs < rhs: return <0 | |
| 117 | − * lhs == rhs: return 0 | |
| 118 | − * lhs > rhs: return >0 | |
| 119 | − */ | |
| 120 | −static inline int timespec_compare(const struct timespec *lhs, const struct timespec *rhs) | |
| 121 | −{ | |
| 122 | − if (lhs->tv_sec < rhs->tv_sec) | |
| 123 | − return -1; | |
| 124 | − if (lhs->tv_sec > rhs->tv_sec) | |
| 125 | − return 1; | |
| 126 | − return lhs->tv_nsec - rhs->tv_nsec; | |
| 127 | −} | |
| 128 | − | |
| 129 | −/* | |
| 130 | − * Returns true if the timespec is norm, false if denorm: | |
| 131 | − */ | |
| 132 | −static inline bool timespec_valid(const struct timespec *ts) | |
| 133 | −{ | |
| 134 | − /* Dates before 1970 are bogus */ | |
| 135 | − if (ts->tv_sec < 0) | |
| 136 | − return false; | |
| 137 | − /* Can't have more nanoseconds then a second */ | |
| 138 | − if ((unsigned long)ts->tv_nsec >= NSEC_PER_SEC) | |
| 139 | − return false; | |
| 140 | − return true; | |
| 141 | −} | |
| 142 | − | |
| 143 | −/** | |
| 144 | − * timespec_to_ns - Convert timespec to nanoseconds | |
| 145 | − * @ts: pointer to the timespec variable to be converted | |
| 146 | − * | |
| 147 | − * Returns the scalar nanosecond representation of the timespec | |
| 148 | − * parameter. | |
| 149 | − */ | |
| 150 | −static inline s64 timespec_to_ns(const struct timespec *ts) | |
| 151 | −{ | |
| 152 | − return ((s64) ts->tv_sec * NSEC_PER_SEC) + ts->tv_nsec; | |
| 153 | −} | |
| 154 | − | |
| 155 | 74 | /** |
| 156 | − * ns_to_timespec - Convert nanoseconds to timespec | |
| 157 | − * @nsec: the nanoseconds value to be converted | |
| 158 | − * | |
| 159 | − * Returns the timespec representation of the nsec parameter. | |
| 160 | − */ | |
| 161 | −extern struct timespec ns_to_timespec(const s64 nsec); | |
| 162 | − | |
| 163 | −/** | |
| 164 | − * timespec_add_ns - Adds nanoseconds to a timespec | |
| 165 | − * @a: pointer to timespec to be incremented | |
| 166 | − * @ns: unsigned nanoseconds value to be added | |
| 167 | − * | |
| 168 | − * This must always be inlined because its used from the x86-64 vdso, | |
| 169 | − * which cannot call other kernel functions. | |
| 170 | − */ | |
| 171 | −static __always_inline void timespec_add_ns(struct timespec *a, u64 ns) | |
| 172 | −{ | |
| 173 | − a->tv_sec += __iter_div_u64_rem(a->tv_nsec + ns, NSEC_PER_SEC, &ns); | |
| 174 | − a->tv_nsec = ns; | |
| 175 | −} | |
| 176 | − | |
| 177 | −static inline unsigned long mktime(const unsigned int year, | |
| 178 | − const unsigned int mon, const unsigned int day, | |
| 179 | − const unsigned int hour, const unsigned int min, | |
| 180 | − const unsigned int sec) | |
| 181 | −{ | |
| 182 | − return mktime64(year, mon, day, hour, min, sec); | |
| 183 | −} | |
| 184 | − | |
| 185 | −static inline bool timeval_valid(const struct timeval *tv) | |
| 186 | −{ | |
| 187 | − /* Dates before 1970 are bogus */ | |
| 188 | − if (tv->tv_sec < 0) | |
| 189 | − return false; | |
| 190 | − | |
| 191 | − /* Can't have more microseconds then a second */ | |
| 192 | − if (tv->tv_usec < 0 || tv->tv_usec >= USEC_PER_SEC) | |
| 193 | − return false; | |
| 194 | − | |
| 195 | − return true; | |
| 196 | −} | |
| 197 | − | |
| 198 | −/** | |
| 199 | − * timeval_to_ns - Convert timeval to nanoseconds | |
| 200 | − * @ts: pointer to the timeval variable to be converted | |
| 201 | − * | |
| 202 | − * Returns the scalar nanosecond representation of the timeval | |
| 203 | − * parameter. | |
| 204 | − */ | |
| 205 | −static inline s64 timeval_to_ns(const struct timeval *tv) | |
| 206 | −{ | |
| 207 | − return ((s64) tv->tv_sec * NSEC_PER_SEC) + | |
| 208 | − tv->tv_usec * NSEC_PER_USEC; | |
| 209 | −} | |
| 210 | − | |
| 211 | −/** | |
| 212 | − * ns_to_timeval - Convert nanoseconds to timeval | |
| 75 | + * ns_to_kernel_old_timeval - Convert nanoseconds to timeval | |
| 213 | 76 | * @nsec: the nanoseconds value to be converted |
| 214 | 77 | * |
| 215 | 78 | * Returns the timeval representation of the nsec parameter. |
| 216 | 79 | */ |
| 217 | −extern struct timeval ns_to_timeval(const s64 nsec); | |
| 218 | 80 | extern struct __kernel_old_timeval ns_to_kernel_old_timeval(s64 nsec); |
| 219 | 81 | |
| 220 | −/* | |
| 221 | − * Old names for the 32-bit time_t interfaces, these will be removed | |
| 222 | − * when everything uses the new names. | |
| 223 | − */ | |
| 224 | −#define compat_time_t old_time32_t | |
| 225 | −#define compat_timeval old_timeval32 | |
| 226 | −#define compat_timespec old_timespec32 | |
| 227 | −#define compat_itimerspec old_itimerspec32 | |
| 228 | −#define ns_to_compat_timeval ns_to_old_timeval32 | |
| 229 | −#define get_compat_itimerspec64 get_old_itimerspec32 | |
| 230 | −#define put_compat_itimerspec64 put_old_itimerspec32 | |
| 231 | −#define compat_get_timespec64 get_old_timespec32 | |
| 232 | −#define compat_put_timespec64 put_old_timespec32 | |
| 233 | − | |
| 234 | 82 | #endif |
| @@ -11,36 +11,4 @@ static inline unsigned long get_seconds(void) · 10 unmodified lines | ||
| 11 | 11 | return ktime_get_real_seconds(); |
| 12 | 12 | } |
| 13 | 13 | |
| 14 | −static inline void getnstimeofday(struct timespec *ts) | |
| 15 | −{ | |
| 16 | − struct timespec64 ts64; | |
| 17 | − | |
| 18 | − ktime_get_real_ts64(&ts64); | |
| 19 | − *ts = timespec64_to_timespec(ts64); | |
| 20 | −} | |
| 21 | − | |
| 22 | −static inline void ktime_get_ts(struct timespec *ts) | |
| 23 | −{ | |
| 24 | − struct timespec64 ts64; | |
| 25 | − | |
| 26 | − ktime_get_ts64(&ts64); | |
| 27 | − *ts = timespec64_to_timespec(ts64); | |
| 28 | −} | |
| 29 | − | |
| 30 | −static inline void getrawmonotonic(struct timespec *ts) | |
| 31 | −{ | |
| 32 | − struct timespec64 ts64; | |
| 33 | − | |
| 34 | − ktime_get_raw_ts64(&ts64); | |
| 35 | − *ts = timespec64_to_timespec(ts64); | |
| 36 | −} | |
| 37 | − | |
| 38 | −static inline void getboottime(struct timespec *ts) | |
| 39 | −{ | |
| 40 | − struct timespec64 ts64; | |
| 41 | − | |
| 42 | − getboottime64(&ts64); | |
| 43 | − *ts = timespec64_to_timespec(ts64); | |
| 44 | −} | |
| 45 | − | |
| 46 | 14 | #endif |
| @@ -225,6 +225,8 @@ struct tty_port_client_operations { · 224 unmodified lines | ||
| 225 | 225 | void (*write_wakeup)(struct tty_port *port); |
| 226 | 226 | }; |
| 227 | 227 | |
| 228 | +extern const struct tty_port_client_operations tty_port_default_client_ops; | |
| 229 | + | |
| 228 | 230 | struct tty_port { |
| 229 | 231 | struct tty_bufhead buf; /* Locked internally */ |
| 230 | 232 | struct tty_struct *tty; /* Back pointer */ |
| @@ -65,11 +65,6 @@ typedef __kernel_ssize_t ssize_t; · 64 unmodified lines | ||
| 65 | 65 | typedef __kernel_ptrdiff_t ptrdiff_t; |
| 66 | 66 | #endif |
| 67 | 67 | |
| 68 | −#ifndef _TIME_T | |
| 69 | −#define _TIME_T | |
| 70 | −typedef __kernel_old_time_t time_t; | |
| 71 | −#endif | |
| 72 | − | |
| 73 | 68 | #ifndef _CLOCK_T |
| 74 | 69 | #define _CLOCK_T |
| 75 | 70 | typedef __kernel_clock_t clock_t; |
| @@ -69,4 +69,7 @@ · 68 unmodified lines | ||
| 69 | 69 | /* Hub needs extra delay after resetting its port. */ |
| 70 | 70 | #define USB_QUIRK_HUB_SLOW_RESET BIT(14) |
| 71 | 71 | |
| 72 | +/* device has blacklisted endpoints */ | |
| 73 | +#define USB_QUIRK_ENDPOINT_BLACKLIST BIT(15) | |
| 74 | + | |
| 72 | 75 | #endif /* __LINUX_USB_QUIRKS_H */ |