History

Merge series "Compatible string consolidation for NXP DSPI driver" from Vladimir Oltean <olteanv@gmail.com>:

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

Mark Brown committed 6 years ago

Commit cb71d8e2 parents 4709d86 50b6207979 files · +16305 −11462Browse files

Showing the changes to include/linux (28 of 979 files). Show all

Unified · Split

28 files
  1. include/linux/blkdev.h +1 −1
  2. include/linux/blktrace_api.h +13 −5
  3. include/linux/bootconfig.h +3 −0
  4. include/linux/compat.h +0 −29
  5. include/linux/cpufreq.h +0 −3
  6. include/linux/dax.h +2 −12
  7. include/linux/hid.h +1 −1
  8. include/linux/icmpv6.h +10 −0
  9. include/linux/intel-svm.h +1 −1
  10. include/linux/irqdomain.h +1 −1
  11. include/linux/ktime.h +0 −37
  12. include/linux/kvm_host.h +3 −1
  13. include/linux/mlx5/mlx5_ifc.h +4 −1
  14. include/linux/netdevice.h +18 −5
  15. include/linux/netfilter/ipset/ip_set.h +10 −1
  16. include/linux/nfs_fs.h +6 −20
  17. include/linux/pipe_fs_i.h +2 −1
  18. include/linux/rculist_nulls.h +7 −0
  19. include/linux/sched/nohz.h +2 −0
  20. include/linux/skbuff.h +30 −0
  21. include/linux/suspend.h +1 −1
  22. include/linux/swiotlb.h +3 −8
  23. include/linux/time32.h +1 −153
  24. include/linux/timekeeping32.h +0 −32
  25. include/linux/trace_events.h +1 −1
  26. include/linux/tty.h +2 −0
  27. include/linux/types.h +0 −5
  28. include/linux/usb/quirks.h +3 −0
include/linux/blkdev.h+1−1
@@ -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_TRACE526#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#endif529#endif
530 /*530 /*
include/linux/blktrace_api.h+13−5
@@ -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
62static inline bool blk_trace_note_message_enabled(struct request_queue *q)66static 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
70extern void blk_add_driver_data(struct request_queue *q, struct request *rq,78extern void blk_add_driver_data(struct request_queue *q, struct request *rq,
include/linux/bootconfig.h+3−0
@@ -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 */
14struct xbc_node {17struct xbc_node {
15 u16 next;18 u16 next;
include/linux/compat.h+0−29
@@ -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 */
255extern int compat_get_timespec(struct timespec *, const void __user *);
256extern int compat_put_timespec(const struct timespec *, void __user *);
257extern int compat_get_timeval(struct timeval *, const void __user *);
258extern int compat_put_timeval(const struct timeval *, void __user *);
259
260struct compat_iovec {251struct 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
416int get_compat_sigevent(struct sigevent *event,407int get_compat_sigevent(struct sigevent *event,
417 const struct compat_sigevent __user *u_event);408 const struct compat_sigevent __user *u_event);
418 409
419static 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
429static 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
439extern int get_compat_sigset(sigset_t *set, const compat_sigset_t __user *compat);410extern int get_compat_sigset(sigset_t *set, const compat_sigset_t __user *compat);
440 411
441/*412/*
include/linux/cpufreq.h+0−3
@@ -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 */
205extern struct kobject *cpufreq_global_kobject;
206
207#ifdef CONFIG_CPU_FREQ204#ifdef CONFIG_CPU_FREQ
208unsigned int cpufreq_get(unsigned int cpu);205unsigned int cpufreq_get(unsigned int cpu);
209unsigned int cpufreq_quick_get(unsigned int cpu);206unsigned int cpufreq_quick_get(unsigned int cpu);
include/linux/dax.h+2−12
@@ -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
132static inline struct dax_device *fs_dax_get_by_host(const char *host)
133{
134 return dax_get_by_host(host);
135}
136
137static inline void fs_put_dax(struct dax_device *dax_dev)132static 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
142struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev);137struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev);
143int dax_writeback_mapping_range(struct address_space *mapping,138int 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
146struct page *dax_layout_busy_page(struct address_space *mapping);141struct page *dax_layout_busy_page(struct address_space *mapping);
147dax_entry_t dax_lock_page(struct page *page);142dax_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
163static inline struct dax_device *fs_dax_get_by_host(const char *host)
164{
165 return NULL;
166}
167
168static inline void fs_put_dax(struct dax_device *dax_dev)158static 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
182static inline int dax_writeback_mapping_range(struct address_space *mapping,172static 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}
include/linux/hid.h+1−1
@@ -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 64497#define HID_OUTPUT_FIFO_SIZE 64
498 498
include/linux/icmpv6.h+10−0
@@ -22,12 +22,22 @@ extern int inet6_unregister_icmp_sender(ip6_icmp_send_t *fn); · 21 unmodified lines
22int ip6_err_gen_icmpv6_unreach(struct sk_buff *skb, int nhs, int type,22int 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)
26void 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#else31#else
26 32
27static inline void icmpv6_send(struct sk_buff *skb,33static 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
38static inline void icmpv6_ndo_send(struct sk_buff *skb,
39 u8 type, u8 code, __u32 info)
40{
31}41}
32#endif42#endif
33 43
include/linux/intel-svm.h+1−1
@@ -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
125static int intel_svm_is_pasid_valid(struct device *dev, int pasid)125static inline int intel_svm_is_pasid_valid(struct device *dev, int pasid)
126{126{
127 return -EINVAL;127 return -EINVAL;
128}128}
include/linux/irqdomain.h+1−1
@@ -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),
include/linux/ktime.h+0−37
@@ -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: */
70static 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: */
76static inline ktime_t timespec64_to_ktime(struct timespec64 ts)70static 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: */
82static 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 */
97static inline s64 ktime_to_ns(const ktime_t kt)79static 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
216extern ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs);198extern 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 */
226static 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 timespec64201 * ktime_to_timespec64_cond - convert a ktime_t variable to timespec64
239 * format only if the variable contains data202 * format only if the variable contains data
include/linux/kvm_host.h+3−1
@@ -889,6 +889,8 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); · 888 unmodified lines
889bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu);889bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu);
890int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu);890int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu);
891bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu);891bool kvm_arch_dy_runnable(struct kvm_vcpu *vcpu);
892int kvm_arch_post_init_vm(struct kvm *kvm);
893void kvm_arch_pre_destroy_vm(struct kvm *kvm);
892 894
893#ifndef __KVM_HAVE_ARCH_VM_ALLOC895#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
1344struct kvm_vcpu *kvm_get_running_vcpu(void);1346struct kvm_vcpu *kvm_get_running_vcpu(void);
1345struct kvm_vcpu __percpu **kvm_get_running_vcpus(void);1347struct kvm_vcpu * __percpu *kvm_get_running_vcpus(void);
1346 1348
1347#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS1349#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS
1348bool kvm_arch_has_irq_bypass(void);1350bool kvm_arch_has_irq_bypass(void);
include/linux/mlx5/mlx5_ifc.h+4−1
@@ -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];
include/linux/netdevice.h+18−5
@@ -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 different78 * 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 MPLS1620 * @mpls_features: Mask of features inheritable by MPLS
1621 * @gso_partial_features: value(s) from NETIF_F_GSO\*
1619 *1622 *
1620 * @ifindex: interface index1623 * @ifindex: interface index
1621 * @group: The group the device belongs to1624 * @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_*() functions1644 * if one wants to override the ndo_*() functions
1642 * @ethtool_ops: Management operations1645 * @ethtool_ops: Management operations
1646 * @l3mdev_ops: Layer 3 master device operations
1643 * @ndisc_ops: Includes callbacks for different IPv6 neighbour1647 * @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,etc1651 * @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 share1686 * @dev_port: Used to differentiate devices that share
1681 * the same function1687 * the same function
1682 * @addr_list_lock: XXX: need comments on this one1688 * @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 mode1690 * @uc_promisc: Counter that indicates promiscuous mode
1684 * has been enabled due to the need to listen to1691 * has been enabled due to the need to listen to
1685 * additional unicast addresses in a device that1692 * additional unicast addresses in a device that
@@ -1702,6 +1709,9 @@ enum netdev_priv_flags { · 16 unmodified lines
1702 * @ip6_ptr: IPv6 specific data1709 * @ip6_ptr: IPv6 specific data
1703 * @ax25_ptr: AX.25 specific data1710 * @ax25_ptr: AX.25 specific data
1704 * @ieee80211_ptr: IEEE 802.11 specific data, assign before registering1711 * @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 queues1720 * @num_rx_queues: Number of RX queues
1711 * allocated at register_netdev() time1721 * allocated at register_netdev() time
1712 * @real_num_rx_queues: Number of RX queues currently active in device1722 * @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 packets1726 * @rx_handler: handler for received packets
1715 * @rx_handler_data: XXX: need comments on this one1727 * @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 view1743 * @qdisc: Root qdisc from userspace point of view
1732 * @tx_queue_len: Max frames per queue allowed1744 * @tx_queue_len: Max frames per queue allowed
1733 * @tx_global_lock: XXX: need comments on this one1745 * @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 one1750 * @xps_maps: XXX: need comments on this one
1736 * @miniq_egress: clsact qdisc specific data for1751 * @miniq_egress: clsact qdisc specific data for
1737 * egress processing1752 * egress processing
1753 * @qdisc_hash: qdisc hash table
1738 * @watchdog_timeo: Represents the timeout that is used by1754 * @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 timers1756 * @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 & *src2p3567 * netif_attrmask_next_and - get the next CPU/Rx queue in \*src1p & \*src2p
3552 * @n: CPU/Rx queue index3568 * @n: CPU/Rx queue index
3553 * @src1p: the first CPUs/Rx queues mask pointer3569 * @src1p: the first CPUs/Rx queues mask pointer
3554 * @src2p: the second CPUs/Rx queues mask pointer3570 * @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
4378struct net_device *netdev_all_lower_get_next(struct net_device *dev,4394struct net_device *netdev_next_lower_dev_rcu(struct net_device *dev,
4379 struct list_head **iter);4395 struct list_head **iter);
4380struct net_device *netdev_all_lower_get_next_rcu(struct net_device *dev,
4381 struct list_head **iter);
4382
4383int netdev_walk_all_lower_dev(struct net_device *dev,4396int 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),
include/linux/netfilter/ipset/ip_set.h+10−1
@@ -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
126struct ip_set;127struct 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
195struct 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) \
include/linux/nfs_fs.h+6−20
@@ -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
340static 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 cookie341 * nfs_save_change_attribute - Returns the inode attribute change cookie
347 * @dir - pointer to parent directory inode342 * @dir - pointer to parent directory inode
348 * The "change attribute" is updated every time we finish an operation343 * 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 */
351static inline unsigned long nfs_save_change_attribute(struct inode *dir)346static 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 */
364static 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.c352 * linux/fs/nfs/inode.c
371 */353 */
@@ -495,6 +477,10 @@ extern const struct file_operations nfs_dir_operations; · 123 unmodified lines
495extern const struct dentry_operations nfs_dentry_operations;477extern const struct dentry_operations nfs_dentry_operations;
496 478
497extern void nfs_force_lookup_revalidate(struct inode *dir);479extern void nfs_force_lookup_revalidate(struct inode *dir);
480extern void nfs_set_verifier(struct dentry * dentry, unsigned long verf);
481#if IS_ENABLED(CONFIG_NFS_V4)
482extern void nfs_clear_verifier_delegated(struct inode *inode);
483#endif /* IS_ENABLED(CONFIG_NFS_V4) */
498extern struct dentry *nfs_add_or_obtain(struct dentry *dentry,484extern 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);
include/linux/pipe_fs_i.h+2−1
@@ -29,7 +29,8 @@ struct pipe_buffer { · 28 unmodified lines
29/**29/**
30 * struct pipe_inode_info - a linux kernel pipe30 * struct pipe_inode_info - a linux kernel pipe
31 * @mutex: mutex protecting the whole thing31 * @mutex: mutex protecting the whole thing
32 * @wait: reader/writer wait point in case of empty/full pipe32 * @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 production34 * @head: The point of buffer production
34 * @tail: The point of buffer consumption35 * @tail: The point of buffer consumption
35 * @max_usage: The maximum number of slots that may be used in the ring36 * @max_usage: The maximum number of slots that may be used in the ring
include/linux/rculist_nulls.h+7−0
@@ -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 */
149static 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 type156 * 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.
include/linux/sched/nohz.h+2−0
@@ -15,9 +15,11 @@ static inline void nohz_balance_enter_idle(int cpu) { } · 14 unmodified lines
15 15
16#ifdef CONFIG_NO_HZ_COMMON16#ifdef CONFIG_NO_HZ_COMMON
17void calc_load_nohz_start(void);17void calc_load_nohz_start(void);
18void calc_load_nohz_remote(struct rq *rq);
18void calc_load_nohz_stop(void);19void calc_load_nohz_stop(void);
19#else20#else
20static inline void calc_load_nohz_start(void) { }21static inline void calc_load_nohz_start(void) { }
22static inline void calc_load_nohz_remote(struct rq *rq) { }
21static inline void calc_load_nohz_stop(void) { }23static inline void calc_load_nohz_stop(void) { }
22#endif /* CONFIG_NO_HZ_COMMON */24#endif /* CONFIG_NO_HZ_COMMON */
23 25
include/linux/skbuff.h+30−0
@@ -611,9 +611,15 @@ typedef unsigned char *sk_buff_data_t; · 610 unmodified lines
611 * @next: Next buffer in list611 * @next: Next buffer in list
612 * @prev: Previous buffer in list612 * @prev: Previous buffer in list
613 * @tstamp: Time we arrived/left613 * @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/tcp616 * @rbnode: RB tree node, alternative to next/prev for netem/tcp
617 * @list: queue head
615 * @sk: Socket we are owned by618 * @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 by621 * @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 here623 * @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 xfrm625 * @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 class638 * @pkt_type: Packet class
633 * @fclone: skbuff clone status639 * @fclone: skbuff clone status
634 * @ipvs_property: skbuff is owned by ipvs640 * @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 hardware644 * @offload_fwd_mark: Packet was L2-forwarded in hardware
636 * @offload_l3_fwd_mark: Packet was L3-forwarded in hardware645 * @offload_l3_fwd_mark: Packet was L3-forwarded in hardware
637 * @tc_skip_classify: do not classify packet. set by IFB device646 * @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 index659 * @tc_index: Traffic control index
651 * @hash: the packet hash660 * @hash: the packet hash
652 * @queue_mapping: Queue mapping for multiqueue devices661 * @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 reserves664 * @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 set671 * @wifi_acked_valid: wifi_acked was set
661 * @wifi_acked: whether frame was acked on wifi or not672 * @wifi_acked: whether frame was acked on wifi or not
662 * @no_fcs: Request NIC to treat last 4 bytes as Ethernet FCS673 * @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_PARTIAL677 * @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 neighbour682 * @dst_pending_confirm: need to confirm neighbour
665 * @decrypted: Decrypted SKB683 * @decrypted: Decrypted SKB
666 * @napi_id: id of the NAPI struct this skb came from684 * @napi_id: id of the NAPI struct this skb came from
685 * @sender_cpu: (aka @napi_id) source CPU in XPS
667 * @secmark: security marking686 * @secmark: security marking
668 * @mark: Generic packet mark687 * @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 protocol691 * @vlan_proto: vlan encapsulation protocol
670 * @vlan_tci: vlan tag control information692 * @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#endif774#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#endif801#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 0826#define PKT_VLAN_PRESENT_BIT 0
799#endif827#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;
include/linux/suspend.h+1−1
@@ -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);
include/linux/swiotlb.h+3−8
@@ -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
67dma_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_SWIOTLB70#ifdef CONFIG_SWIOTLB
68extern enum swiotlb_force swiotlb_force;71extern enum swiotlb_force swiotlb_force;
69extern phys_addr_t io_tlb_start, io_tlb_end;72extern 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
76bool 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);
78void __init swiotlb_exit(void);79void __init swiotlb_exit(void);
79unsigned int swiotlb_max_segment(void);80unsigned int swiotlb_max_segment(void);
80size_t swiotlb_max_mapping_size(struct device *dev);81size_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}
88static 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}
94static inline void swiotlb_exit(void)89static inline void swiotlb_exit(void)
95{90{
96}91}
include/linux/time32.h+1−153
@@ -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
17typedef s32 old_time32_t;15typedef s32 old_time32_t;
18 16
19struct old_timespec32 {17struct old_timespec32 {
@@ -73,162 +71,12 @@ struct __kernel_timex; · 53 unmodified lines
73int get_old_timex32(struct __kernel_timex *, const struct old_timex32 __user *);71int get_old_timex32(struct __kernel_timex *, const struct old_timex32 __user *);
74int put_old_timex32(struct old_timex32 __user *, const struct __kernel_timex *);72int 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 */
79static inline struct timespec timespec64_to_timespec(const struct timespec64 ts64)
80{
81 return *(const struct timespec *)&ts64;
82}
83
84static inline struct timespec64 timespec_to_timespec64(const struct timespec ts)
85{
86 return *(const struct timespec64 *)&ts;
87}
88
89#else
90static 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
99static 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
109static 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 */
120static 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 */
132static 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 */
150static 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 timespec75 * 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 */
161extern 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 */
171static __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
177static 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
185static 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 */
205static 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 converted76 * @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 */
217extern struct timeval ns_to_timeval(const s64 nsec);
218extern struct __kernel_old_timeval ns_to_kernel_old_timeval(s64 nsec);80extern 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#endif82#endif
include/linux/timekeeping32.h+0−32
@@ -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
14static 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
22static 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
30static 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
38static inline void getboottime(struct timespec *ts)
39{
40 struct timespec64 ts64;
41
42 getboottime64(&ts64);
43 *ts = timespec64_to_timespec(ts64);
44}
45
46#endif14#endif
include/linux/trace_events.h+1−1
@@ -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};
include/linux/tty.h+2−0
@@ -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
228extern const struct tty_port_client_operations tty_port_default_client_ops;
229
228struct tty_port {230struct 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 */
include/linux/types.h+0−5
@@ -65,11 +65,6 @@ typedef __kernel_ssize_t ssize_t; · 64 unmodified lines
65typedef __kernel_ptrdiff_t ptrdiff_t;65typedef __kernel_ptrdiff_t ptrdiff_t;
66#endif66#endif
67 67
68#ifndef _TIME_T
69#define _TIME_T
70typedef __kernel_old_time_t time_t;
71#endif
72
73#ifndef _CLOCK_T68#ifndef _CLOCK_T
74#define _CLOCK_T69#define _CLOCK_T
75typedef __kernel_clock_t clock_t;70typedef __kernel_clock_t clock_t;
include/linux/usb/quirks.h+3−0
@@ -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 */