This series makes room in the driver for differentiation between the controllers which currently operate in TCFQ mode. Most of these are actually capable of a lot more in terms of throughput. This is in preparation of a second series which will convert the remaining users of TCFQ mode altogether to XSPI mode with command cycling. Vladimir Oltean (6): doc: spi-fsl-dspi: Add specific compatibles for all Layerscape SoCs spi: spi-fsl-dspi: Use specific compatible strings for all SoC instantiations spi: spi-fsl-dspi: Parameterize the FIFO size and DMA buffer size spi: spi-fsl-dspi: LS2080A and LX2160A support XSPI mode spi: spi-fsl-dspi: Support SPI software timestamping in all non-DMA modes spi: spi-fsl-dspi: Convert the instantiations that support it to DMA .../devicetree/bindings/spi/spi-fsl-dspi.txt | 17 +- drivers/spi/spi-fsl-dspi.c | 162 +++++++++++++----- 2 files changed, 128 insertions(+), 51 deletions(-) -- 2.17.1
Showing the changes to include/linux (28 of 979 files). Show all
Unified · Split
| @@ -524,7 +524,7 @@ struct request_queue { · 523 unmodified lines | |||
| 524 | unsigned int sg_reserved_size; | 524 | unsigned int sg_reserved_size; |
| 525 | int node; | 525 | int node; |
| 526 | #ifdef CONFIG_BLK_DEV_IO_TRACE | 526 | #ifdef CONFIG_BLK_DEV_IO_TRACE |
| 527 | struct blk_trace *blk_trace; | 527 | struct blk_trace __rcu *blk_trace; |
| 528 | struct mutex blk_trace_mutex; | 528 | struct mutex blk_trace_mutex; |
| 529 | #endif | 529 | #endif |
| 530 | /* | 530 | /* |
| @@ -51,9 +51,13 @@ void __trace_note_message(struct blk_trace *, struct blkcg *blkcg, const char *f · 50 unmodified lines | |||
| 51 | **/ | 51 | **/ |
| 52 | #define blk_add_cgroup_trace_msg(q, cg, fmt, ...) \ | 52 | #define blk_add_cgroup_trace_msg(q, cg, fmt, ...) \ |
| 53 | do { \ | 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 | if (unlikely(bt)) \ | 58 | if (unlikely(bt)) \ |
| 56 | __trace_note_message(bt, cg, fmt, ##__VA_ARGS__);\ | 59 | __trace_note_message(bt, cg, fmt, ##__VA_ARGS__);\ |
| 60 | rcu_read_unlock(); \ | ||
| 57 | } while (0) | 61 | } while (0) |
| 58 | #define blk_add_trace_msg(q, fmt, ...) \ | 62 | #define blk_add_trace_msg(q, fmt, ...) \ |
| 59 | blk_add_cgroup_trace_msg(q, NULL, fmt, ##__VA_ARGS__) | 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 | static inline bool blk_trace_note_message_enabled(struct request_queue *q) | 66 | static inline bool blk_trace_note_message_enabled(struct request_queue *q) |
| 63 | { | 67 | { |
| 64 | struct blk_trace *bt = q->blk_trace; | 68 | struct blk_trace *bt; |
| 65 | if (likely(!bt)) | 69 | bool ret; |
| 66 | return false; | 70 | |
| 67 | return bt->act_mask & BLK_TC_NOTIFY; | 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 | extern void blk_add_driver_data(struct request_queue *q, struct request *rq, | 78 | extern void blk_add_driver_data(struct request_queue *q, struct request *rq, |
| @@ -10,6 +10,9 @@ · 9 unmodified lines | |||
| 10 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
| 11 | #include <linux/types.h> | 11 | #include <linux/types.h> |
| 12 | 12 | ||
| 13 | #define BOOTCONFIG_MAGIC "#BOOTCONFIG\n" | ||
| 14 | #define BOOTCONFIG_MAGIC_LEN 12 | ||
| 15 | |||
| 13 | /* XBC tree node */ | 16 | /* XBC tree node */ |
| 14 | struct xbc_node { | 17 | struct xbc_node { |
| 15 | u16 next; | 18 | u16 next; |
| @@ -248,15 +248,6 @@ typedef struct compat_siginfo { · 247 unmodified lines | |||
| 248 | } _sifields; | 248 | } _sifields; |
| 249 | } compat_siginfo_t; | 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 | struct compat_iovec { | 251 | struct compat_iovec { |
| 261 | compat_uptr_t iov_base; | 252 | compat_uptr_t iov_base; |
| 262 | compat_size_t iov_len; | 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 | int get_compat_sigevent(struct sigevent *event, | 407 | int get_compat_sigevent(struct sigevent *event, |
| 417 | const struct compat_sigevent __user *u_event); | 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 | extern int get_compat_sigset(sigset_t *set, const compat_sigset_t __user *compat); | 410 | extern int get_compat_sigset(sigset_t *set, const compat_sigset_t __user *compat); |
| 440 | 411 | ||
| 441 | /* | 412 | /* |
| @@ -201,9 +201,6 @@ static inline bool policy_is_shared(struct cpufreq_policy *policy) · 200 unmodified lines | |||
| 201 | return cpumask_weight(policy->cpus) > 1; | 201 | return cpumask_weight(policy->cpus) > 1; |
| 202 | } | 202 | } |
| 203 | 203 | ||
| 204 | /* /sys/devices/system/cpu/cpufreq: entry point for global variables */ | ||
| 205 | extern struct kobject *cpufreq_global_kobject; | ||
| 206 | |||
| 207 | #ifdef CONFIG_CPU_FREQ | 204 | #ifdef CONFIG_CPU_FREQ |
| 208 | unsigned int cpufreq_get(unsigned int cpu); | 205 | unsigned int cpufreq_get(unsigned int cpu); |
| 209 | unsigned int cpufreq_quick_get(unsigned int cpu); | 206 | unsigned int cpufreq_quick_get(unsigned int cpu); |
| @@ -129,11 +129,6 @@ static inline bool generic_fsdax_supported(struct dax_device *dax_dev, · 128 unmodified lines | |||
| 129 | sectors); | 129 | sectors); |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | static inline struct dax_device *fs_dax_get_by_host(const char *host) | ||
| 133 | { | ||
| 134 | return dax_get_by_host(host); | ||
| 135 | } | ||
| 136 | |||
| 137 | static inline void fs_put_dax(struct dax_device *dax_dev) | 132 | static inline void fs_put_dax(struct dax_device *dax_dev) |
| 138 | { | 133 | { |
| 139 | put_dax(dax_dev); | 134 | put_dax(dax_dev); |
| @@ -141,7 +136,7 @@ static inline void fs_put_dax(struct dax_device *dax_dev) · 1 unmodified line | |||
| 141 | 136 | ||
| 142 | struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev); | 137 | struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev); |
| 143 | int dax_writeback_mapping_range(struct address_space *mapping, | 138 | int dax_writeback_mapping_range(struct address_space *mapping, |
| 144 | struct block_device *bdev, struct writeback_control *wbc); | 139 | struct dax_device *dax_dev, struct writeback_control *wbc); |
| 145 | 140 | ||
| 146 | struct page *dax_layout_busy_page(struct address_space *mapping); | 141 | struct page *dax_layout_busy_page(struct address_space *mapping); |
| 147 | dax_entry_t dax_lock_page(struct page *page); | 142 | dax_entry_t dax_lock_page(struct page *page); |
| @@ -160,11 +155,6 @@ static inline bool generic_fsdax_supported(struct dax_device *dax_dev, · 12 unmodified lines | |||
| 160 | return false; | 155 | return false; |
| 161 | } | 156 | } |
| 162 | 157 | ||
| 163 | static inline struct dax_device *fs_dax_get_by_host(const char *host) | ||
| 164 | { | ||
| 165 | return NULL; | ||
| 166 | } | ||
| 167 | |||
| 168 | static inline void fs_put_dax(struct dax_device *dax_dev) | 158 | static inline void fs_put_dax(struct dax_device *dax_dev) |
| 169 | { | 159 | { |
| 170 | } | 160 | } |
| @@ -180,7 +170,7 @@ static inline struct page *dax_layout_busy_page(struct address_space *mapping) · 9 unmodified lines | |||
| 180 | } | 170 | } |
| 181 | 171 | ||
| 182 | static inline int dax_writeback_mapping_range(struct address_space *mapping, | 172 | static inline int dax_writeback_mapping_range(struct address_space *mapping, |
| 183 | struct block_device *bdev, struct writeback_control *wbc) | 173 | struct dax_device *dax_dev, struct writeback_control *wbc) |
| 184 | { | 174 | { |
| 185 | return -EOPNOTSUPP; | 175 | return -EOPNOTSUPP; |
| 186 | } | 176 | } |
| @@ -492,7 +492,7 @@ struct hid_report_enum { · 491 unmodified lines | |||
| 492 | }; | 492 | }; |
| 493 | 493 | ||
| 494 | #define HID_MIN_BUFFER_SIZE 64 /* make sure there is at least a packet size of space */ | 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 | #define HID_CONTROL_FIFO_SIZE 256 /* to init devices with >100 reports */ | 496 | #define HID_CONTROL_FIFO_SIZE 256 /* to init devices with >100 reports */ |
| 497 | #define HID_OUTPUT_FIFO_SIZE 64 | 497 | #define HID_OUTPUT_FIFO_SIZE 64 |
| 498 | 498 | ||
| @@ -22,12 +22,22 @@ extern int inet6_unregister_icmp_sender(ip6_icmp_send_t *fn); · 21 unmodified lines | |||
| 22 | int ip6_err_gen_icmpv6_unreach(struct sk_buff *skb, int nhs, int type, | 22 | int ip6_err_gen_icmpv6_unreach(struct sk_buff *skb, int nhs, int type, |
| 23 | unsigned int data_len); | 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 | #else | 31 | #else |
| 26 | 32 | ||
| 27 | static inline void icmpv6_send(struct sk_buff *skb, | 33 | static inline void icmpv6_send(struct sk_buff *skb, |
| 28 | u8 type, u8 code, __u32 info) | 34 | u8 type, u8 code, __u32 info) |
| 29 | { | 35 | { |
| 36 | } | ||
| 30 | 37 | ||
| 38 | static inline void icmpv6_ndo_send(struct sk_buff *skb, | ||
| 39 | u8 type, u8 code, __u32 info) | ||
| 40 | { | ||
| 31 | } | 41 | } |
| 32 | #endif | 42 | #endif |
| 33 | 43 | ||
| @@ -122,7 +122,7 @@ static inline int intel_svm_unbind_mm(struct device *dev, int pasid) · 121 unmodified lines | |||
| 122 | BUG(); | 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 | return -EINVAL; | 127 | return -EINVAL; |
| 128 | } | 128 | } |
| @@ -192,7 +192,7 @@ enum { · 191 unmodified lines | |||
| 192 | IRQ_DOMAIN_FLAG_HIERARCHY = (1 << 0), | 192 | IRQ_DOMAIN_FLAG_HIERARCHY = (1 << 0), |
| 193 | 193 | ||
| 194 | /* Irq domain name was allocated in __irq_domain_add() */ | 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 | /* Irq domain is an IPI domain with virq per cpu */ | 197 | /* Irq domain is an IPI domain with virq per cpu */ |
| 198 | IRQ_DOMAIN_FLAG_IPI_PER_CPU = (1 << 2), | 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 | #define ktime_sub_ns(kt, nsval) ((kt) - (nsval)) | 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 | /* convert a timespec64 to ktime_t format: */ | 69 | /* convert a timespec64 to ktime_t format: */ |
| 76 | static inline ktime_t timespec64_to_ktime(struct timespec64 ts) | 70 | static inline ktime_t timespec64_to_ktime(struct timespec64 ts) |
| 77 | { | 71 | { |
| 78 | return ktime_set(ts.tv_sec, ts.tv_nsec); | 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 | /* Map the ktime_t to timespec conversion to ns_to_timespec function */ | 75 | /* Map the ktime_t to timespec conversion to ns_to_timespec function */ |
| 91 | #define ktime_to_timespec64(kt) ns_to_timespec64((kt)) | 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 | /* Convert ktime_t to nanoseconds */ | 78 | /* Convert ktime_t to nanoseconds */ |
| 97 | static inline s64 ktime_to_ns(const ktime_t kt) | 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 | extern ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs); | 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 | * ktime_to_timespec64_cond - convert a ktime_t variable to timespec64 | 201 | * ktime_to_timespec64_cond - convert a ktime_t variable to timespec64 |
| 239 | * format only if the variable contains data | 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 | bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu); | 889 | bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu); |
| 890 | int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu); | 890 | int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu); |
| 891 | bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu); | 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 | #ifndef __KVM_HAVE_ARCH_VM_ALLOC | 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 | #endif /* CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT */ | 1344 | #endif /* CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT */ |
| 1343 | 1345 | ||
| 1344 | struct kvm_vcpu *kvm_get_running_vcpu(void); | 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 | #ifdef CONFIG_HAVE_KVM_IRQ_BYPASS | 1349 | #ifdef CONFIG_HAVE_KVM_IRQ_BYPASS |
| 1348 | bool kvm_arch_has_irq_bypass(void); | 1350 | bool kvm_arch_has_irq_bypass(void); |
| @@ -688,7 +688,10 @@ struct mlx5_ifc_flow_table_nic_cap_bits { · 687 unmodified lines | |||
| 688 | u8 nic_rx_multi_path_tirs[0x1]; | 688 | u8 nic_rx_multi_path_tirs[0x1]; |
| 689 | u8 nic_rx_multi_path_tirs_fts[0x1]; | 689 | u8 nic_rx_multi_path_tirs_fts[0x1]; |
| 690 | u8 allow_sniffer_and_nic_rx_shared_tir[0x1]; | 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 | u8 encap_general_header[0x1]; | 695 | u8 encap_general_header[0x1]; |
| 693 | u8 reserved_at_21[0xa]; | 696 | u8 reserved_at_21[0xa]; |
| 694 | u8 log_max_packet_reformat_context[0x5]; | 697 | u8 log_max_packet_reformat_context[0x5]; |
| @@ -72,6 +72,8 @@ void netdev_set_default_ethtool_ops(struct net_device *dev, · 71 unmodified lines | |||
| 72 | #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ | 72 | #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ |
| 73 | #define NET_RX_DROP 1 /* packet dropped */ | 73 | #define NET_RX_DROP 1 /* packet dropped */ |
| 74 | 74 | ||
| 75 | #define MAX_NEST_DEV 8 | ||
| 76 | |||
| 75 | /* | 77 | /* |
| 76 | * Transmit return codes: transmit return codes originate from three different | 78 | * Transmit return codes: transmit return codes originate from three different |
| 77 | * namespaces: | 79 | * namespaces: |
| @@ -1616,6 +1618,7 @@ enum netdev_priv_flags { · 1538 unmodified lines | |||
| 1616 | * and drivers will need to set them appropriately. | 1618 | * and drivers will need to set them appropriately. |
| 1617 | * | 1619 | * |
| 1618 | * @mpls_features: Mask of features inheritable by MPLS | 1620 | * @mpls_features: Mask of features inheritable by MPLS |
| 1621 | * @gso_partial_features: value(s) from NETIF_F_GSO\* | ||
| 1619 | * | 1622 | * |
| 1620 | * @ifindex: interface index | 1623 | * @ifindex: interface index |
| 1621 | * @group: The group the device belongs to | 1624 | * @group: The group the device belongs to |
| @@ -1640,8 +1643,11 @@ enum netdev_priv_flags { · 18 unmodified lines | |||
| 1640 | * @netdev_ops: Includes several pointers to callbacks, | 1643 | * @netdev_ops: Includes several pointers to callbacks, |
| 1641 | * if one wants to override the ndo_*() functions | 1644 | * if one wants to override the ndo_*() functions |
| 1642 | * @ethtool_ops: Management operations | 1645 | * @ethtool_ops: Management operations |
| 1646 | * @l3mdev_ops: Layer 3 master device operations | ||
| 1643 | * @ndisc_ops: Includes callbacks for different IPv6 neighbour | 1647 | * @ndisc_ops: Includes callbacks for different IPv6 neighbour |
| 1644 | * discovery handling. Necessary for e.g. 6LoWPAN. | 1648 | * discovery handling. Necessary for e.g. 6LoWPAN. |
| 1649 | * @xfrmdev_ops: Transformation offload operations | ||
| 1650 | * @tlsdev_ops: Transport Layer Security offload operations | ||
| 1645 | * @header_ops: Includes callbacks for creating,parsing,caching,etc | 1651 | * @header_ops: Includes callbacks for creating,parsing,caching,etc |
| 1646 | * of Layer 2 headers. | 1652 | * of Layer 2 headers. |
| 1647 | * | 1653 | * |
| @@ -1680,6 +1686,7 @@ enum netdev_priv_flags { · 32 unmodified lines | |||
| 1680 | * @dev_port: Used to differentiate devices that share | 1686 | * @dev_port: Used to differentiate devices that share |
| 1681 | * the same function | 1687 | * the same function |
| 1682 | * @addr_list_lock: XXX: need comments on this one | 1688 | * @addr_list_lock: XXX: need comments on this one |
| 1689 | * @name_assign_type: network interface name assignment type | ||
| 1683 | * @uc_promisc: Counter that indicates promiscuous mode | 1690 | * @uc_promisc: Counter that indicates promiscuous mode |
| 1684 | * has been enabled due to the need to listen to | 1691 | * has been enabled due to the need to listen to |
| 1685 | * additional unicast addresses in a device that | 1692 | * additional unicast addresses in a device that |
| @@ -1702,6 +1709,9 @@ enum netdev_priv_flags { · 16 unmodified lines | |||
| 1702 | * @ip6_ptr: IPv6 specific data | 1709 | * @ip6_ptr: IPv6 specific data |
| 1703 | * @ax25_ptr: AX.25 specific data | 1710 | * @ax25_ptr: AX.25 specific data |
| 1704 | * @ieee80211_ptr: IEEE 802.11 specific data, assign before registering | 1711 | * @ieee80211_ptr: IEEE 802.11 specific data, assign before registering |
| 1712 | * @ieee802154_ptr: IEEE 802.15.4 low-rate Wireless Personal Area Network | ||
| 1713 | * device struct | ||
| 1714 | * @mpls_ptr: mpls_dev struct pointer | ||
| 1705 | * | 1715 | * |
| 1706 | * @dev_addr: Hw address (before bcast, | 1716 | * @dev_addr: Hw address (before bcast, |
| 1707 | * because most packets are unicast) | 1717 | * because most packets are unicast) |
| @@ -1710,6 +1720,8 @@ enum netdev_priv_flags { · 2 unmodified lines | |||
| 1710 | * @num_rx_queues: Number of RX queues | 1720 | * @num_rx_queues: Number of RX queues |
| 1711 | * allocated at register_netdev() time | 1721 | * allocated at register_netdev() time |
| 1712 | * @real_num_rx_queues: Number of RX queues currently active in device | 1722 | * @real_num_rx_queues: Number of RX queues currently active in device |
| 1723 | * @xdp_prog: XDP sockets filter program pointer | ||
| 1724 | * @gro_flush_timeout: timeout for GRO layer in NAPI | ||
| 1713 | * | 1725 | * |
| 1714 | * @rx_handler: handler for received packets | 1726 | * @rx_handler: handler for received packets |
| 1715 | * @rx_handler_data: XXX: need comments on this one | 1727 | * @rx_handler_data: XXX: need comments on this one |
| @@ -1731,10 +1743,14 @@ enum netdev_priv_flags { · 15 unmodified lines | |||
| 1731 | * @qdisc: Root qdisc from userspace point of view | 1743 | * @qdisc: Root qdisc from userspace point of view |
| 1732 | * @tx_queue_len: Max frames per queue allowed | 1744 | * @tx_queue_len: Max frames per queue allowed |
| 1733 | * @tx_global_lock: XXX: need comments on this one | 1745 | * @tx_global_lock: XXX: need comments on this one |
| 1746 | * @xdp_bulkq: XDP device bulk queue | ||
| 1747 | * @xps_cpus_map: all CPUs map for XPS device | ||
| 1748 | * @xps_rxqs_map: all RXQs map for XPS device | ||
| 1734 | * | 1749 | * |
| 1735 | * @xps_maps: XXX: need comments on this one | 1750 | * @xps_maps: XXX: need comments on this one |
| 1736 | * @miniq_egress: clsact qdisc specific data for | 1751 | * @miniq_egress: clsact qdisc specific data for |
| 1737 | * egress processing | 1752 | * egress processing |
| 1753 | * @qdisc_hash: qdisc hash table | ||
| 1738 | * @watchdog_timeo: Represents the timeout that is used by | 1754 | * @watchdog_timeo: Represents the timeout that is used by |
| 1739 | * the watchdog (see dev_watchdog()) | 1755 | * the watchdog (see dev_watchdog()) |
| 1740 | * @watchdog_timer: List of timers | 1756 | * @watchdog_timer: List of timers |
| @@ -3548,7 +3564,7 @@ static inline unsigned int netif_attrmask_next(int n, const unsigned long *srcp, · 1807 unmodified lines | |||
| 3548 | } | 3564 | } |
| 3549 | 3565 | ||
| 3550 | /** | 3566 | /** |
| 3551 | * netif_attrmask_next_and - get the next CPU/Rx queue in *src1p & *src2p | 3567 | * netif_attrmask_next_and - get the next CPU/Rx queue in \*src1p & \*src2p |
| 3552 | * @n: CPU/Rx queue index | 3568 | * @n: CPU/Rx queue index |
| 3553 | * @src1p: the first CPUs/Rx queues mask pointer | 3569 | * @src1p: the first CPUs/Rx queues mask pointer |
| 3554 | * @src2p: the second CPUs/Rx queues mask pointer | 3570 | * @src2p: the second CPUs/Rx queues mask pointer |
| @@ -4375,11 +4391,8 @@ void *netdev_lower_get_next(struct net_device *dev, · 820 unmodified lines | |||
| 4375 | ldev; \ | 4391 | ldev; \ |
| 4376 | ldev = netdev_lower_get_next(dev, &(iter))) | 4392 | ldev = netdev_lower_get_next(dev, &(iter))) |
| 4377 | 4393 | ||
| 4378 | 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, |
| 4379 | struct list_head **iter); | 4395 | struct list_head **iter); |
| 4380 | struct net_device *netdev_all_lower_get_next_rcu(struct net_device *dev, | ||
| 4381 | struct list_head **iter); | ||
| 4382 | |||
| 4383 | int netdev_walk_all_lower_dev(struct net_device *dev, | 4396 | int netdev_walk_all_lower_dev(struct net_device *dev, |
| 4384 | int (*fn)(struct net_device *lower_dev, | 4397 | int (*fn)(struct net_device *lower_dev, |
| 4385 | void *data), | 4398 | void *data), |
| @@ -121,6 +121,7 @@ struct ip_set_ext { · 120 unmodified lines | |||
| 121 | u32 timeout; | 121 | u32 timeout; |
| 122 | u8 packets_op; | 122 | u8 packets_op; |
| 123 | u8 bytes_op; | 123 | u8 bytes_op; |
| 124 | bool target; | ||
| 124 | }; | 125 | }; |
| 125 | 126 | ||
| 126 | struct ip_set; | 127 | struct ip_set; |
| @@ -187,6 +188,14 @@ struct ip_set_type_variant { · 60 unmodified lines | |||
| 187 | /* Return true if "b" set is the same as "a" | 188 | /* Return true if "b" set is the same as "a" |
| 188 | * according to the create set parameters */ | 189 | * according to the create set parameters */ |
| 189 | bool (*same_set)(const struct ip_set *a, const struct ip_set *b); | 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 | /* The core set type structure */ | 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 | #define IP_SET_INIT_KEXT(skb, opt, set) \ | 512 | #define IP_SET_INIT_KEXT(skb, opt, set) \ |
| 504 | { .bytes = (skb)->len, .packets = 1, \ | 513 | { .bytes = (skb)->len, .packets = 1, .target = true,\ |
| 505 | .timeout = ip_set_adt_opt_timeout(opt, set) } | 514 | .timeout = ip_set_adt_opt_timeout(opt, set) } |
| 506 | 515 | ||
| 507 | #define IP_SET_INIT_UEXT(set) \ | 516 | #define IP_SET_INIT_UEXT(set) \ |
| @@ -337,35 +337,17 @@ static inline int nfs_server_capable(struct inode *inode, int cap) · 336 unmodified lines | |||
| 337 | return NFS_SERVER(inode)->caps & cap; | 337 | return NFS_SERVER(inode)->caps & cap; |
| 338 | } | 338 | } |
| 339 | 339 | ||
| 340 | static inline void nfs_set_verifier(struct dentry * dentry, unsigned long verf) | ||
| 341 | { | ||
| 342 | dentry->d_time = verf; | ||
| 343 | } | ||
| 344 | |||
| 345 | /** | 340 | /** |
| 346 | * nfs_save_change_attribute - Returns the inode attribute change cookie | 341 | * nfs_save_change_attribute - Returns the inode attribute change cookie |
| 347 | * @dir - pointer to parent directory inode | 342 | * @dir - pointer to parent directory inode |
| 348 | * The "change attribute" is updated every time we finish an operation | 343 | * The "cache change attribute" is updated when we need to revalidate |
| 349 | * that will result in a metadata change on the server. | 344 | * our dentry cache after a directory was seen to change on the server. |
| 350 | */ | 345 | */ |
| 351 | static inline unsigned long nfs_save_change_attribute(struct inode *dir) | 346 | static inline unsigned long nfs_save_change_attribute(struct inode *dir) |
| 352 | { | 347 | { |
| 353 | return NFS_I(dir)->cache_change_attribute; | 348 | return NFS_I(dir)->cache_change_attribute; |
| 354 | } | 349 | } |
| 355 | 350 | ||
| 356 | /** | ||
| 357 | * nfs_verify_change_attribute - Detects NFS remote directory changes | ||
| 358 | * @dir - pointer to parent directory inode | ||
| 359 | * @chattr - previously saved change attribute | ||
| 360 | * Return "false" if the verifiers doesn't match the change attribute. | ||
| 361 | * This would usually indicate that the directory contents have changed on | ||
| 362 | * the server, and that any dentries need revalidating. | ||
| 363 | */ | ||
| 364 | static inline int nfs_verify_change_attribute(struct inode *dir, unsigned long chattr) | ||
| 365 | { | ||
| 366 | return chattr == NFS_I(dir)->cache_change_attribute; | ||
| 367 | } | ||
| 368 | |||
| 369 | /* | 351 | /* |
| 370 | * linux/fs/nfs/inode.c | 352 | * linux/fs/nfs/inode.c |
| 371 | */ | 353 | */ |
| @@ -495,6 +477,10 @@ extern const struct file_operations nfs_dir_operations; · 123 unmodified lines | |||
| 495 | extern const struct dentry_operations nfs_dentry_operations; | 477 | extern const struct dentry_operations nfs_dentry_operations; |
| 496 | 478 | ||
| 497 | extern void nfs_force_lookup_revalidate(struct inode *dir); | 479 | extern void nfs_force_lookup_revalidate(struct inode *dir); |
| 480 | extern void nfs_set_verifier(struct dentry * dentry, unsigned long verf); | ||
| 481 | #if IS_ENABLED(CONFIG_NFS_V4) | ||
| 482 | extern void nfs_clear_verifier_delegated(struct inode *inode); | ||
| 483 | #endif /* IS_ENABLED(CONFIG_NFS_V4) */ | ||
| 498 | extern struct dentry *nfs_add_or_obtain(struct dentry *dentry, | 484 | extern struct dentry *nfs_add_or_obtain(struct dentry *dentry, |
| 499 | struct nfs_fh *fh, struct nfs_fattr *fattr, | 485 | struct nfs_fh *fh, struct nfs_fattr *fattr, |
| 500 | struct nfs4_label *label); | 486 | struct nfs4_label *label); |
| @@ -29,7 +29,8 @@ struct pipe_buffer { · 28 unmodified lines | |||
| 29 | /** | 29 | /** |
| 30 | * struct pipe_inode_info - a linux kernel pipe | 30 | * struct pipe_inode_info - a linux kernel pipe |
| 31 | * @mutex: mutex protecting the whole thing | 31 | * @mutex: mutex protecting the whole thing |
| 32 | * @wait: reader/writer wait point in case of empty/full pipe | 32 | * @rd_wait: reader wait point in case of empty pipe |
| 33 | * @wr_wait: writer wait point in case of full pipe | ||
| 33 | * @head: The point of buffer production | 34 | * @head: The point of buffer production |
| 34 | * @tail: The point of buffer consumption | 35 | * @tail: The point of buffer consumption |
| 35 | * @max_usage: The maximum number of slots that may be used in the ring | 36 | * @max_usage: The maximum number of slots that may be used in the ring |
| @@ -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 | * hlist_nulls_for_each_entry_rcu - iterate over rcu list of given type | 156 | * hlist_nulls_for_each_entry_rcu - iterate over rcu list of given type |
| 150 | * @tpos: the type * to use as a loop cursor. | 157 | * @tpos: the type * to use as a loop cursor. |
| @@ -15,9 +15,11 @@ static inline void nohz_balance_enter_idle(int cpu) { } · 14 unmodified lines | |||
| 15 | 15 | ||
| 16 | #ifdef CONFIG_NO_HZ_COMMON | 16 | #ifdef CONFIG_NO_HZ_COMMON |
| 17 | void calc_load_nohz_start(void); | 17 | void calc_load_nohz_start(void); |
| 18 | void calc_load_nohz_remote(struct rq *rq); | ||
| 18 | void calc_load_nohz_stop(void); | 19 | void calc_load_nohz_stop(void); |
| 19 | #else | 20 | #else |
| 20 | static inline void calc_load_nohz_start(void) { } | 21 | static inline void calc_load_nohz_start(void) { } |
| 22 | static inline void calc_load_nohz_remote(struct rq *rq) { } | ||
| 21 | static inline void calc_load_nohz_stop(void) { } | 23 | static inline void calc_load_nohz_stop(void) { } |
| 22 | #endif /* CONFIG_NO_HZ_COMMON */ | 24 | #endif /* CONFIG_NO_HZ_COMMON */ |
| 23 | 25 | ||
| @@ -611,9 +611,15 @@ typedef unsigned char *sk_buff_data_t; · 610 unmodified lines | |||
| 611 | * @next: Next buffer in list | 611 | * @next: Next buffer in list |
| 612 | * @prev: Previous buffer in list | 612 | * @prev: Previous buffer in list |
| 613 | * @tstamp: Time we arrived/left | 613 | * @tstamp: Time we arrived/left |
| 614 | * @skb_mstamp_ns: (aka @tstamp) earliest departure time; start point | ||
| 615 | * for retransmit timer | ||
| 614 | * @rbnode: RB tree node, alternative to next/prev for netem/tcp | 616 | * @rbnode: RB tree node, alternative to next/prev for netem/tcp |
| 617 | * @list: queue head | ||
| 615 | * @sk: Socket we are owned by | 618 | * @sk: Socket we are owned by |
| 619 | * @ip_defrag_offset: (aka @sk) alternate use of @sk, used in | ||
| 620 | * fragmentation management | ||
| 616 | * @dev: Device we arrived on/are leaving by | 621 | * @dev: Device we arrived on/are leaving by |
| 622 | * @dev_scratch: (aka @dev) alternate use of @dev when @dev would be %NULL | ||
| 617 | * @cb: Control buffer. Free for use by every layer. Put private vars here | 623 | * @cb: Control buffer. Free for use by every layer. Put private vars here |
| 618 | * @_skb_refdst: destination entry (with norefcount bit) | 624 | * @_skb_refdst: destination entry (with norefcount bit) |
| 619 | * @sp: the security path, used for xfrm | 625 | * @sp: the security path, used for xfrm |
| @@ -632,6 +638,9 @@ typedef unsigned char *sk_buff_data_t; · 12 unmodified lines | |||
| 632 | * @pkt_type: Packet class | 638 | * @pkt_type: Packet class |
| 633 | * @fclone: skbuff clone status | 639 | * @fclone: skbuff clone status |
| 634 | * @ipvs_property: skbuff is owned by ipvs | 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 | * @offload_fwd_mark: Packet was L2-forwarded in hardware | 644 | * @offload_fwd_mark: Packet was L2-forwarded in hardware |
| 636 | * @offload_l3_fwd_mark: Packet was L3-forwarded in hardware | 645 | * @offload_l3_fwd_mark: Packet was L3-forwarded in hardware |
| 637 | * @tc_skip_classify: do not classify packet. set by IFB device | 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 | * @tc_index: Traffic control index | 659 | * @tc_index: Traffic control index |
| 651 | * @hash: the packet hash | 660 | * @hash: the packet hash |
| 652 | * @queue_mapping: Queue mapping for multiqueue devices | 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 | * @pfmemalloc: skbuff was allocated from PFMEMALLOC reserves | 664 | * @pfmemalloc: skbuff was allocated from PFMEMALLOC reserves |
| 654 | * @active_extensions: active extensions (skb_ext_id types) | 665 | * @active_extensions: active extensions (skb_ext_id types) |
| 655 | * @ndisc_nodetype: router type (from link layer) | 666 | * @ndisc_nodetype: router type (from link layer) |
| @@ -660,15 +671,28 @@ typedef unsigned char *sk_buff_data_t; · 4 unmodified lines | |||
| 660 | * @wifi_acked_valid: wifi_acked was set | 671 | * @wifi_acked_valid: wifi_acked was set |
| 661 | * @wifi_acked: whether frame was acked on wifi or not | 672 | * @wifi_acked: whether frame was acked on wifi or not |
| 662 | * @no_fcs: Request NIC to treat last 4 bytes as Ethernet FCS | 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 | * @csum_not_inet: use CRC32c to resolve CHECKSUM_PARTIAL | 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 | * @dst_pending_confirm: need to confirm neighbour | 682 | * @dst_pending_confirm: need to confirm neighbour |
| 665 | * @decrypted: Decrypted SKB | 683 | * @decrypted: Decrypted SKB |
| 666 | * @napi_id: id of the NAPI struct this skb came from | 684 | * @napi_id: id of the NAPI struct this skb came from |
| 685 | * @sender_cpu: (aka @napi_id) source CPU in XPS | ||
| 667 | * @secmark: security marking | 686 | * @secmark: security marking |
| 668 | * @mark: Generic packet mark | 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 | * @vlan_proto: vlan encapsulation protocol | 691 | * @vlan_proto: vlan encapsulation protocol |
| 670 | * @vlan_tci: vlan tag control information | 692 | * @vlan_tci: vlan tag control information |
| 671 | * @inner_protocol: Protocol (encapsulation) | 693 | * @inner_protocol: Protocol (encapsulation) |
| 694 | * @inner_ipproto: (aka @inner_protocol) stores ipproto when | ||
| 695 | * skb->inner_protocol_type == ENCAP_TYPE_IPPROTO; | ||
| 672 | * @inner_transport_header: Inner transport layer header (encapsulation) | 696 | * @inner_transport_header: Inner transport layer header (encapsulation) |
| 673 | * @inner_network_header: Network layer header (encapsulation) | 697 | * @inner_network_header: Network layer header (encapsulation) |
| 674 | * @inner_mac_header: Link layer header (encapsulation) | 698 | * @inner_mac_header: Link layer header (encapsulation) |
| @@ -750,7 +774,9 @@ struct sk_buff { · 75 unmodified lines | |||
| 750 | #endif | 774 | #endif |
| 751 | #define CLONED_OFFSET() offsetof(struct sk_buff, __cloned_offset) | 775 | #define CLONED_OFFSET() offsetof(struct sk_buff, __cloned_offset) |
| 752 | 776 | ||
| 777 | /* private: */ | ||
| 753 | __u8 __cloned_offset[0]; | 778 | __u8 __cloned_offset[0]; |
| 779 | /* public: */ | ||
| 754 | __u8 cloned:1, | 780 | __u8 cloned:1, |
| 755 | nohdr:1, | 781 | nohdr:1, |
| 756 | fclone:2, | 782 | fclone:2, |
| @@ -775,7 +801,9 @@ struct sk_buff { · 18 unmodified lines | |||
| 775 | #endif | 801 | #endif |
| 776 | #define PKT_TYPE_OFFSET() offsetof(struct sk_buff, __pkt_type_offset) | 802 | #define PKT_TYPE_OFFSET() offsetof(struct sk_buff, __pkt_type_offset) |
| 777 | 803 | ||
| 804 | /* private: */ | ||
| 778 | __u8 __pkt_type_offset[0]; | 805 | __u8 __pkt_type_offset[0]; |
| 806 | /* public: */ | ||
| 779 | __u8 pkt_type:3; | 807 | __u8 pkt_type:3; |
| 780 | __u8 ignore_df:1; | 808 | __u8 ignore_df:1; |
| 781 | __u8 nf_trace:1; | 809 | __u8 nf_trace:1; |
| @@ -798,7 +826,9 @@ struct sk_buff { · 16 unmodified lines | |||
| 798 | #define PKT_VLAN_PRESENT_BIT 0 | 826 | #define PKT_VLAN_PRESENT_BIT 0 |
| 799 | #endif | 827 | #endif |
| 800 | #define PKT_VLAN_PRESENT_OFFSET() offsetof(struct sk_buff, __pkt_vlan_present_offset) | 828 | #define PKT_VLAN_PRESENT_OFFSET() offsetof(struct sk_buff, __pkt_vlan_present_offset) |
| 829 | /* private: */ | ||
| 801 | __u8 __pkt_vlan_present_offset[0]; | 830 | __u8 __pkt_vlan_present_offset[0]; |
| 831 | /* public: */ | ||
| 802 | __u8 vlan_present:1; | 832 | __u8 vlan_present:1; |
| 803 | __u8 csum_complete_sw:1; | 833 | __u8 csum_complete_sw:1; |
| 804 | __u8 csum_level:2; | 834 | __u8 csum_level:2; |
| @@ -191,7 +191,7 @@ struct platform_s2idle_ops { · 190 unmodified lines | |||
| 191 | int (*begin)(void); | 191 | int (*begin)(void); |
| 192 | int (*prepare)(void); | 192 | int (*prepare)(void); |
| 193 | int (*prepare_late)(void); | 193 | int (*prepare_late)(void); |
| 194 | void (*wake)(void); | 194 | bool (*wake)(void); |
| 195 | void (*restore_early)(void); | 195 | void (*restore_early)(void); |
| 196 | void (*restore)(void); | 196 | void (*restore)(void); |
| 197 | void (*end)(void); | 197 | void (*end)(void); |
| @@ -64,6 +64,9 @@ extern void swiotlb_tbl_sync_single(struct device *hwdev, · 63 unmodified lines | |||
| 64 | size_t size, enum dma_data_direction dir, | 64 | size_t size, enum dma_data_direction dir, |
| 65 | enum dma_sync_target target); | 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 | #ifdef CONFIG_SWIOTLB | 70 | #ifdef CONFIG_SWIOTLB |
| 68 | extern enum swiotlb_force swiotlb_force; | 71 | extern enum swiotlb_force swiotlb_force; |
| 69 | extern phys_addr_t io_tlb_start, io_tlb_end; | 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 | return paddr >= io_tlb_start && paddr < io_tlb_end; | 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 | void __init swiotlb_exit(void); | 79 | void __init swiotlb_exit(void); |
| 79 | unsigned int swiotlb_max_segment(void); | 80 | unsigned int swiotlb_max_segment(void); |
| 80 | size_t swiotlb_max_mapping_size(struct device *dev); | 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 | return false; | 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 | static inline void swiotlb_exit(void) | 89 | static inline void swiotlb_exit(void) |
| 95 | { | 90 | { |
| 96 | } | 91 | } |
| @@ -12,8 +12,6 @@ · 11 unmodified lines | |||
| 12 | #include <linux/time64.h> | 12 | #include <linux/time64.h> |
| 13 | #include <linux/timex.h> | 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 | typedef s32 old_time32_t; | 15 | typedef s32 old_time32_t; |
| 18 | 16 | ||
| 19 | struct old_timespec32 { | 17 | struct old_timespec32 { |
| @@ -73,162 +71,12 @@ struct __kernel_timex; · 53 unmodified lines | |||
| 73 | int get_old_timex32(struct __kernel_timex *, const struct old_timex32 __user *); | 71 | int get_old_timex32(struct __kernel_timex *, const struct old_timex32 __user *); |
| 74 | int put_old_timex32(struct old_timex32 __user *, const struct __kernel_timex *); | 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 | 75 | * ns_to_kernel_old_timeval - Convert nanoseconds to timeval |
| 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 | ||
| 213 | * @nsec: the nanoseconds value to be converted | 76 | * @nsec: the nanoseconds value to be converted |
| 214 | * | 77 | * |
| 215 | * Returns the timeval representation of the nsec parameter. | 78 | * Returns the timeval representation of the nsec parameter. |
| 216 | */ | 79 | */ |
| 217 | extern struct timeval ns_to_timeval(const s64 nsec); | ||
| 218 | extern struct __kernel_old_timeval ns_to_kernel_old_timeval(s64 nsec); | 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 | #endif | 82 | #endif |
| @@ -11,36 +11,4 @@ static inline unsigned long get_seconds(void) · 10 unmodified lines | |||
| 11 | return ktime_get_real_seconds(); | 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 | #endif | 14 | #endif |
| @@ -440,7 +440,7 @@ struct synth_event_trace_state { · 439 unmodified lines | |||
| 440 | struct synth_event *event; | 440 | struct synth_event *event; |
| 441 | unsigned int cur_field; | 441 | unsigned int cur_field; |
| 442 | unsigned int n_u64; | 442 | unsigned int n_u64; |
| 443 | bool enabled; | 443 | bool disabled; |
| 444 | bool add_next; | 444 | bool add_next; |
| 445 | bool add_name; | 445 | bool add_name; |
| 446 | }; | 446 | }; |
| @@ -225,6 +225,8 @@ struct tty_port_client_operations { · 224 unmodified lines | |||
| 225 | void (*write_wakeup)(struct tty_port *port); | 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 | struct tty_port { | 230 | struct tty_port { |
| 229 | struct tty_bufhead buf; /* Locked internally */ | 231 | struct tty_bufhead buf; /* Locked internally */ |
| 230 | struct tty_struct *tty; /* Back pointer */ | 232 | struct tty_struct *tty; /* Back pointer */ |
| @@ -65,11 +65,6 @@ typedef __kernel_ssize_t ssize_t; · 64 unmodified lines | |||
| 65 | typedef __kernel_ptrdiff_t ptrdiff_t; | 65 | typedef __kernel_ptrdiff_t ptrdiff_t; |
| 66 | #endif | 66 | #endif |
| 67 | 67 | ||
| 68 | #ifndef _TIME_T | ||
| 69 | #define _TIME_T | ||
| 70 | typedef __kernel_old_time_t time_t; | ||
| 71 | #endif | ||
| 72 | |||
| 73 | #ifndef _CLOCK_T | 68 | #ifndef _CLOCK_T |
| 74 | #define _CLOCK_T | 69 | #define _CLOCK_T |
| 75 | typedef __kernel_clock_t clock_t; | 70 | typedef __kernel_clock_t clock_t; |
| @@ -69,4 +69,7 @@ · 68 unmodified lines | |||
| 69 | /* Hub needs extra delay after resetting its port. */ | 69 | /* Hub needs extra delay after resetting its port. */ |
| 70 | #define USB_QUIRK_HUB_SLOW_RESET BIT(14) | 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 | #endif /* __LINUX_USB_QUIRKS_H */ | 75 | #endif /* __LINUX_USB_QUIRKS_H */ |