diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/drm/drm_atomic.h | 3 | ||||
-rw-r--r-- | include/kvm/arm_vgic.h | 2 | ||||
-rw-r--r-- | include/linux/blkdev.h | 2 | ||||
-rw-r--r-- | include/linux/configfs.h | 10 | ||||
-rw-r--r-- | include/linux/gfp.h | 2 | ||||
-rw-r--r-- | include/linux/marvell_phy.h | 1 | ||||
-rw-r--r-- | include/linux/mlx5/mlx5_ifc.h | 24 | ||||
-rw-r--r-- | include/linux/netdevice.h | 32 | ||||
-rw-r--r-- | include/linux/netfilter/ipset/ip_set.h | 2 | ||||
-rw-r--r-- | include/linux/netfilter_ingress.h | 13 | ||||
-rw-r--r-- | include/linux/of_dma.h | 2 | ||||
-rw-r--r-- | include/linux/signal.h | 1 | ||||
-rw-r--r-- | include/linux/slab.h | 45 | ||||
-rw-r--r-- | include/linux/tty.h | 6 | ||||
-rw-r--r-- | include/net/ip6_fib.h | 3 | ||||
-rw-r--r-- | include/net/ip6_tunnel.h | 3 | ||||
-rw-r--r-- | include/net/ip_tunnels.h | 3 | ||||
-rw-r--r-- | include/net/netfilter/nf_tables.h | 16 | ||||
-rw-r--r-- | include/net/sock.h | 25 | ||||
-rw-r--r-- | include/net/switchdev.h | 2 |
20 files changed, 138 insertions, 59 deletions
diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h index e67aeac2aee0..4b74c97d297a 100644 --- a/include/drm/drm_atomic.h +++ b/include/drm/drm_atomic.h | |||
@@ -136,6 +136,9 @@ drm_atomic_connectors_for_crtc(struct drm_atomic_state *state, | |||
136 | 136 | ||
137 | void drm_atomic_legacy_backoff(struct drm_atomic_state *state); | 137 | void drm_atomic_legacy_backoff(struct drm_atomic_state *state); |
138 | 138 | ||
139 | void | ||
140 | drm_atomic_clean_old_fb(struct drm_device *dev, unsigned plane_mask, int ret); | ||
141 | |||
139 | int __must_check drm_atomic_check_only(struct drm_atomic_state *state); | 142 | int __must_check drm_atomic_check_only(struct drm_atomic_state *state); |
140 | int __must_check drm_atomic_commit(struct drm_atomic_state *state); | 143 | int __must_check drm_atomic_commit(struct drm_atomic_state *state); |
141 | int __must_check drm_atomic_async_commit(struct drm_atomic_state *state); | 144 | int __must_check drm_atomic_async_commit(struct drm_atomic_state *state); |
diff --git a/include/kvm/arm_vgic.h b/include/kvm/arm_vgic.h index 9c747cb14ad8..d2f41477f8ae 100644 --- a/include/kvm/arm_vgic.h +++ b/include/kvm/arm_vgic.h | |||
@@ -342,10 +342,10 @@ int kvm_vgic_inject_mapped_irq(struct kvm *kvm, int cpuid, | |||
342 | struct irq_phys_map *map, bool level); | 342 | struct irq_phys_map *map, bool level); |
343 | void vgic_v3_dispatch_sgi(struct kvm_vcpu *vcpu, u64 reg); | 343 | void vgic_v3_dispatch_sgi(struct kvm_vcpu *vcpu, u64 reg); |
344 | int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu); | 344 | int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu); |
345 | int kvm_vgic_vcpu_active_irq(struct kvm_vcpu *vcpu); | ||
346 | struct irq_phys_map *kvm_vgic_map_phys_irq(struct kvm_vcpu *vcpu, | 345 | struct irq_phys_map *kvm_vgic_map_phys_irq(struct kvm_vcpu *vcpu, |
347 | int virt_irq, int irq); | 346 | int virt_irq, int irq); |
348 | int kvm_vgic_unmap_phys_irq(struct kvm_vcpu *vcpu, struct irq_phys_map *map); | 347 | int kvm_vgic_unmap_phys_irq(struct kvm_vcpu *vcpu, struct irq_phys_map *map); |
348 | bool kvm_vgic_map_is_active(struct kvm_vcpu *vcpu, struct irq_phys_map *map); | ||
349 | 349 | ||
350 | #define irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel)) | 350 | #define irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel)) |
351 | #define vgic_initialized(k) (!!((k)->arch.vgic.nr_cpus)) | 351 | #define vgic_initialized(k) (!!((k)->arch.vgic.nr_cpus)) |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 3fe27f8d91f0..c0d2b7927c1f 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -794,6 +794,8 @@ extern int scsi_cmd_ioctl(struct request_queue *, struct gendisk *, fmode_t, | |||
794 | extern int sg_scsi_ioctl(struct request_queue *, struct gendisk *, fmode_t, | 794 | extern int sg_scsi_ioctl(struct request_queue *, struct gendisk *, fmode_t, |
795 | struct scsi_ioctl_command __user *); | 795 | struct scsi_ioctl_command __user *); |
796 | 796 | ||
797 | extern int blk_queue_enter(struct request_queue *q, gfp_t gfp); | ||
798 | extern void blk_queue_exit(struct request_queue *q); | ||
797 | extern void blk_start_queue(struct request_queue *q); | 799 | extern void blk_start_queue(struct request_queue *q); |
798 | extern void blk_stop_queue(struct request_queue *q); | 800 | extern void blk_stop_queue(struct request_queue *q); |
799 | extern void blk_sync_queue(struct request_queue *q); | 801 | extern void blk_sync_queue(struct request_queue *q); |
diff --git a/include/linux/configfs.h b/include/linux/configfs.h index a8a335b7fce0..758a029011b1 100644 --- a/include/linux/configfs.h +++ b/include/linux/configfs.h | |||
@@ -197,6 +197,16 @@ static inline struct configfs_subsystem *to_configfs_subsystem(struct config_gro | |||
197 | int configfs_register_subsystem(struct configfs_subsystem *subsys); | 197 | int configfs_register_subsystem(struct configfs_subsystem *subsys); |
198 | void configfs_unregister_subsystem(struct configfs_subsystem *subsys); | 198 | void configfs_unregister_subsystem(struct configfs_subsystem *subsys); |
199 | 199 | ||
200 | int configfs_register_group(struct config_group *parent_group, | ||
201 | struct config_group *group); | ||
202 | void configfs_unregister_group(struct config_group *group); | ||
203 | |||
204 | struct config_group * | ||
205 | configfs_register_default_group(struct config_group *parent_group, | ||
206 | const char *name, | ||
207 | struct config_item_type *item_type); | ||
208 | void configfs_unregister_default_group(struct config_group *group); | ||
209 | |||
200 | /* These functions can sleep and can alloc with GFP_KERNEL */ | 210 | /* These functions can sleep and can alloc with GFP_KERNEL */ |
201 | /* WARNING: These cannot be called underneath configfs callbacks!! */ | 211 | /* WARNING: These cannot be called underneath configfs callbacks!! */ |
202 | int configfs_depend_item(struct configfs_subsystem *subsys, struct config_item *target); | 212 | int configfs_depend_item(struct configfs_subsystem *subsys, struct config_item *target); |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 6523109e136d..8942af0813e3 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
@@ -271,7 +271,7 @@ static inline int gfpflags_to_migratetype(const gfp_t gfp_flags) | |||
271 | 271 | ||
272 | static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags) | 272 | static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags) |
273 | { | 273 | { |
274 | return gfp_flags & __GFP_DIRECT_RECLAIM; | 274 | return (bool __force)(gfp_flags & __GFP_DIRECT_RECLAIM); |
275 | } | 275 | } |
276 | 276 | ||
277 | #ifdef CONFIG_HIGHMEM | 277 | #ifdef CONFIG_HIGHMEM |
diff --git a/include/linux/marvell_phy.h b/include/linux/marvell_phy.h index e6982ac3200d..a57f0dfb6db7 100644 --- a/include/linux/marvell_phy.h +++ b/include/linux/marvell_phy.h | |||
@@ -16,6 +16,7 @@ | |||
16 | #define MARVELL_PHY_ID_88E1318S 0x01410e90 | 16 | #define MARVELL_PHY_ID_88E1318S 0x01410e90 |
17 | #define MARVELL_PHY_ID_88E1116R 0x01410e40 | 17 | #define MARVELL_PHY_ID_88E1116R 0x01410e40 |
18 | #define MARVELL_PHY_ID_88E1510 0x01410dd0 | 18 | #define MARVELL_PHY_ID_88E1510 0x01410dd0 |
19 | #define MARVELL_PHY_ID_88E1540 0x01410eb0 | ||
19 | #define MARVELL_PHY_ID_88E3016 0x01410e60 | 20 | #define MARVELL_PHY_ID_88E3016 0x01410e60 |
20 | 21 | ||
21 | /* struct phy_device dev_flags definitions */ | 22 | /* struct phy_device dev_flags definitions */ |
diff --git a/include/linux/mlx5/mlx5_ifc.h b/include/linux/mlx5/mlx5_ifc.h index dd2097455a2e..1565324eb620 100644 --- a/include/linux/mlx5/mlx5_ifc.h +++ b/include/linux/mlx5/mlx5_ifc.h | |||
@@ -453,26 +453,28 @@ struct mlx5_ifc_per_protocol_networking_offload_caps_bits { | |||
453 | u8 lro_cap[0x1]; | 453 | u8 lro_cap[0x1]; |
454 | u8 lro_psh_flag[0x1]; | 454 | u8 lro_psh_flag[0x1]; |
455 | u8 lro_time_stamp[0x1]; | 455 | u8 lro_time_stamp[0x1]; |
456 | u8 reserved_0[0x6]; | 456 | u8 reserved_0[0x3]; |
457 | u8 self_lb_en_modifiable[0x1]; | ||
458 | u8 reserved_1[0x2]; | ||
457 | u8 max_lso_cap[0x5]; | 459 | u8 max_lso_cap[0x5]; |
458 | u8 reserved_1[0x4]; | 460 | u8 reserved_2[0x4]; |
459 | u8 rss_ind_tbl_cap[0x4]; | 461 | u8 rss_ind_tbl_cap[0x4]; |
460 | u8 reserved_2[0x3]; | 462 | u8 reserved_3[0x3]; |
461 | u8 tunnel_lso_const_out_ip_id[0x1]; | 463 | u8 tunnel_lso_const_out_ip_id[0x1]; |
462 | u8 reserved_3[0x2]; | 464 | u8 reserved_4[0x2]; |
463 | u8 tunnel_statless_gre[0x1]; | 465 | u8 tunnel_statless_gre[0x1]; |
464 | u8 tunnel_stateless_vxlan[0x1]; | 466 | u8 tunnel_stateless_vxlan[0x1]; |
465 | 467 | ||
466 | u8 reserved_4[0x20]; | 468 | u8 reserved_5[0x20]; |
467 | 469 | ||
468 | u8 reserved_5[0x10]; | 470 | u8 reserved_6[0x10]; |
469 | u8 lro_min_mss_size[0x10]; | 471 | u8 lro_min_mss_size[0x10]; |
470 | 472 | ||
471 | u8 reserved_6[0x120]; | 473 | u8 reserved_7[0x120]; |
472 | 474 | ||
473 | u8 lro_timer_supported_periods[4][0x20]; | 475 | u8 lro_timer_supported_periods[4][0x20]; |
474 | 476 | ||
475 | u8 reserved_7[0x600]; | 477 | u8 reserved_8[0x600]; |
476 | }; | 478 | }; |
477 | 479 | ||
478 | struct mlx5_ifc_roce_cap_bits { | 480 | struct mlx5_ifc_roce_cap_bits { |
@@ -4051,9 +4053,11 @@ struct mlx5_ifc_modify_tis_in_bits { | |||
4051 | }; | 4053 | }; |
4052 | 4054 | ||
4053 | struct mlx5_ifc_modify_tir_bitmask_bits { | 4055 | struct mlx5_ifc_modify_tir_bitmask_bits { |
4054 | u8 reserved[0x20]; | 4056 | u8 reserved_0[0x20]; |
4055 | 4057 | ||
4056 | u8 reserved1[0x1f]; | 4058 | u8 reserved_1[0x1b]; |
4059 | u8 self_lb_en[0x1]; | ||
4060 | u8 reserved_2[0x3]; | ||
4057 | u8 lro[0x1]; | 4061 | u8 lro[0x1]; |
4058 | }; | 4062 | }; |
4059 | 4063 | ||
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index d20891465247..67bfac1abfc1 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -2068,20 +2068,23 @@ struct pcpu_sw_netstats { | |||
2068 | struct u64_stats_sync syncp; | 2068 | struct u64_stats_sync syncp; |
2069 | }; | 2069 | }; |
2070 | 2070 | ||
2071 | #define netdev_alloc_pcpu_stats(type) \ | 2071 | #define __netdev_alloc_pcpu_stats(type, gfp) \ |
2072 | ({ \ | 2072 | ({ \ |
2073 | typeof(type) __percpu *pcpu_stats = alloc_percpu(type); \ | 2073 | typeof(type) __percpu *pcpu_stats = alloc_percpu_gfp(type, gfp);\ |
2074 | if (pcpu_stats) { \ | 2074 | if (pcpu_stats) { \ |
2075 | int __cpu; \ | 2075 | int __cpu; \ |
2076 | for_each_possible_cpu(__cpu) { \ | 2076 | for_each_possible_cpu(__cpu) { \ |
2077 | typeof(type) *stat; \ | 2077 | typeof(type) *stat; \ |
2078 | stat = per_cpu_ptr(pcpu_stats, __cpu); \ | 2078 | stat = per_cpu_ptr(pcpu_stats, __cpu); \ |
2079 | u64_stats_init(&stat->syncp); \ | 2079 | u64_stats_init(&stat->syncp); \ |
2080 | } \ | 2080 | } \ |
2081 | } \ | 2081 | } \ |
2082 | pcpu_stats; \ | 2082 | pcpu_stats; \ |
2083 | }) | 2083 | }) |
2084 | 2084 | ||
2085 | #define netdev_alloc_pcpu_stats(type) \ | ||
2086 | __netdev_alloc_pcpu_stats(type, GFP_KERNEL); | ||
2087 | |||
2085 | #include <linux/notifier.h> | 2088 | #include <linux/notifier.h> |
2086 | 2089 | ||
2087 | /* netdevice notifier chain. Please remember to update the rtnetlink | 2090 | /* netdevice notifier chain. Please remember to update the rtnetlink |
@@ -3854,6 +3857,11 @@ static inline bool netif_is_bridge_master(const struct net_device *dev) | |||
3854 | return dev->priv_flags & IFF_EBRIDGE; | 3857 | return dev->priv_flags & IFF_EBRIDGE; |
3855 | } | 3858 | } |
3856 | 3859 | ||
3860 | static inline bool netif_is_bridge_port(const struct net_device *dev) | ||
3861 | { | ||
3862 | return dev->priv_flags & IFF_BRIDGE_PORT; | ||
3863 | } | ||
3864 | |||
3857 | static inline bool netif_is_ovs_master(const struct net_device *dev) | 3865 | static inline bool netif_is_ovs_master(const struct net_device *dev) |
3858 | { | 3866 | { |
3859 | return dev->priv_flags & IFF_OPENVSWITCH; | 3867 | return dev->priv_flags & IFF_OPENVSWITCH; |
diff --git a/include/linux/netfilter/ipset/ip_set.h b/include/linux/netfilter/ipset/ip_set.h index 48bb01edcf30..0e1f433cc4b7 100644 --- a/include/linux/netfilter/ipset/ip_set.h +++ b/include/linux/netfilter/ipset/ip_set.h | |||
@@ -421,7 +421,7 @@ extern void ip_set_free(void *members); | |||
421 | extern int ip_set_get_ipaddr4(struct nlattr *nla, __be32 *ipaddr); | 421 | extern int ip_set_get_ipaddr4(struct nlattr *nla, __be32 *ipaddr); |
422 | extern int ip_set_get_ipaddr6(struct nlattr *nla, union nf_inet_addr *ipaddr); | 422 | extern int ip_set_get_ipaddr6(struct nlattr *nla, union nf_inet_addr *ipaddr); |
423 | extern size_t ip_set_elem_len(struct ip_set *set, struct nlattr *tb[], | 423 | extern size_t ip_set_elem_len(struct ip_set *set, struct nlattr *tb[], |
424 | size_t len); | 424 | size_t len, size_t align); |
425 | extern int ip_set_get_extensions(struct ip_set *set, struct nlattr *tb[], | 425 | extern int ip_set_get_extensions(struct ip_set *set, struct nlattr *tb[], |
426 | struct ip_set_ext *ext); | 426 | struct ip_set_ext *ext); |
427 | 427 | ||
diff --git a/include/linux/netfilter_ingress.h b/include/linux/netfilter_ingress.h index 187feabe557c..5fcd375ef175 100644 --- a/include/linux/netfilter_ingress.h +++ b/include/linux/netfilter_ingress.h | |||
@@ -5,10 +5,13 @@ | |||
5 | #include <linux/netdevice.h> | 5 | #include <linux/netdevice.h> |
6 | 6 | ||
7 | #ifdef CONFIG_NETFILTER_INGRESS | 7 | #ifdef CONFIG_NETFILTER_INGRESS |
8 | static inline int nf_hook_ingress_active(struct sk_buff *skb) | 8 | static inline bool nf_hook_ingress_active(const struct sk_buff *skb) |
9 | { | 9 | { |
10 | return nf_hook_list_active(&skb->dev->nf_hooks_ingress, | 10 | #ifdef HAVE_JUMP_LABEL |
11 | NFPROTO_NETDEV, NF_NETDEV_INGRESS); | 11 | if (!static_key_false(&nf_hooks_needed[NFPROTO_NETDEV][NF_NETDEV_INGRESS])) |
12 | return false; | ||
13 | #endif | ||
14 | return !list_empty(&skb->dev->nf_hooks_ingress); | ||
12 | } | 15 | } |
13 | 16 | ||
14 | static inline int nf_hook_ingress(struct sk_buff *skb) | 17 | static inline int nf_hook_ingress(struct sk_buff *skb) |
@@ -16,8 +19,8 @@ static inline int nf_hook_ingress(struct sk_buff *skb) | |||
16 | struct nf_hook_state state; | 19 | struct nf_hook_state state; |
17 | 20 | ||
18 | nf_hook_state_init(&state, &skb->dev->nf_hooks_ingress, | 21 | nf_hook_state_init(&state, &skb->dev->nf_hooks_ingress, |
19 | NF_NETDEV_INGRESS, INT_MIN, NFPROTO_NETDEV, NULL, | 22 | NF_NETDEV_INGRESS, INT_MIN, NFPROTO_NETDEV, |
20 | skb->dev, NULL, dev_net(skb->dev), NULL); | 23 | skb->dev, NULL, NULL, dev_net(skb->dev), NULL); |
21 | return nf_hook_slow(skb, &state); | 24 | return nf_hook_slow(skb, &state); |
22 | } | 25 | } |
23 | 26 | ||
diff --git a/include/linux/of_dma.h b/include/linux/of_dma.h index 36112cdd665a..b90d8ec57c1f 100644 --- a/include/linux/of_dma.h +++ b/include/linux/of_dma.h | |||
@@ -80,7 +80,7 @@ static inline int of_dma_router_register(struct device_node *np, | |||
80 | static inline struct dma_chan *of_dma_request_slave_channel(struct device_node *np, | 80 | static inline struct dma_chan *of_dma_request_slave_channel(struct device_node *np, |
81 | const char *name) | 81 | const char *name) |
82 | { | 82 | { |
83 | return NULL; | 83 | return ERR_PTR(-ENODEV); |
84 | } | 84 | } |
85 | 85 | ||
86 | static inline struct dma_chan *of_dma_simple_xlate(struct of_phandle_args *dma_spec, | 86 | static inline struct dma_chan *of_dma_simple_xlate(struct of_phandle_args *dma_spec, |
diff --git a/include/linux/signal.h b/include/linux/signal.h index ab1e0392b5ac..92557bbce7e7 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
@@ -239,7 +239,6 @@ extern int sigprocmask(int, sigset_t *, sigset_t *); | |||
239 | extern void set_current_blocked(sigset_t *); | 239 | extern void set_current_blocked(sigset_t *); |
240 | extern void __set_current_blocked(const sigset_t *); | 240 | extern void __set_current_blocked(const sigset_t *); |
241 | extern int show_unhandled_signals; | 241 | extern int show_unhandled_signals; |
242 | extern int sigsuspend(sigset_t *); | ||
243 | 242 | ||
244 | struct sigaction { | 243 | struct sigaction { |
245 | #ifndef __ARCH_HAS_IRIX_SIGACTION | 244 | #ifndef __ARCH_HAS_IRIX_SIGACTION |
diff --git a/include/linux/slab.h b/include/linux/slab.h index 7c82e3b307a3..2037a861e367 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -158,6 +158,24 @@ size_t ksize(const void *); | |||
158 | #endif | 158 | #endif |
159 | 159 | ||
160 | /* | 160 | /* |
161 | * Setting ARCH_SLAB_MINALIGN in arch headers allows a different alignment. | ||
162 | * Intended for arches that get misalignment faults even for 64 bit integer | ||
163 | * aligned buffers. | ||
164 | */ | ||
165 | #ifndef ARCH_SLAB_MINALIGN | ||
166 | #define ARCH_SLAB_MINALIGN __alignof__(unsigned long long) | ||
167 | #endif | ||
168 | |||
169 | /* | ||
170 | * kmalloc and friends return ARCH_KMALLOC_MINALIGN aligned | ||
171 | * pointers. kmem_cache_alloc and friends return ARCH_SLAB_MINALIGN | ||
172 | * aligned pointers. | ||
173 | */ | ||
174 | #define __assume_kmalloc_alignment __assume_aligned(ARCH_KMALLOC_MINALIGN) | ||
175 | #define __assume_slab_alignment __assume_aligned(ARCH_SLAB_MINALIGN) | ||
176 | #define __assume_page_alignment __assume_aligned(PAGE_SIZE) | ||
177 | |||
178 | /* | ||
161 | * Kmalloc array related definitions | 179 | * Kmalloc array related definitions |
162 | */ | 180 | */ |
163 | 181 | ||
@@ -286,8 +304,8 @@ static __always_inline int kmalloc_index(size_t size) | |||
286 | } | 304 | } |
287 | #endif /* !CONFIG_SLOB */ | 305 | #endif /* !CONFIG_SLOB */ |
288 | 306 | ||
289 | void *__kmalloc(size_t size, gfp_t flags); | 307 | void *__kmalloc(size_t size, gfp_t flags) __assume_kmalloc_alignment; |
290 | void *kmem_cache_alloc(struct kmem_cache *, gfp_t flags); | 308 | void *kmem_cache_alloc(struct kmem_cache *, gfp_t flags) __assume_slab_alignment; |
291 | void kmem_cache_free(struct kmem_cache *, void *); | 309 | void kmem_cache_free(struct kmem_cache *, void *); |
292 | 310 | ||
293 | /* | 311 | /* |
@@ -298,11 +316,11 @@ void kmem_cache_free(struct kmem_cache *, void *); | |||
298 | * Note that interrupts must be enabled when calling these functions. | 316 | * Note that interrupts must be enabled when calling these functions. |
299 | */ | 317 | */ |
300 | void kmem_cache_free_bulk(struct kmem_cache *, size_t, void **); | 318 | void kmem_cache_free_bulk(struct kmem_cache *, size_t, void **); |
301 | bool kmem_cache_alloc_bulk(struct kmem_cache *, gfp_t, size_t, void **); | 319 | int kmem_cache_alloc_bulk(struct kmem_cache *, gfp_t, size_t, void **); |
302 | 320 | ||
303 | #ifdef CONFIG_NUMA | 321 | #ifdef CONFIG_NUMA |
304 | void *__kmalloc_node(size_t size, gfp_t flags, int node); | 322 | void *__kmalloc_node(size_t size, gfp_t flags, int node) __assume_kmalloc_alignment; |
305 | void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node); | 323 | void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node) __assume_slab_alignment; |
306 | #else | 324 | #else |
307 | static __always_inline void *__kmalloc_node(size_t size, gfp_t flags, int node) | 325 | static __always_inline void *__kmalloc_node(size_t size, gfp_t flags, int node) |
308 | { | 326 | { |
@@ -316,12 +334,12 @@ static __always_inline void *kmem_cache_alloc_node(struct kmem_cache *s, gfp_t f | |||
316 | #endif | 334 | #endif |
317 | 335 | ||
318 | #ifdef CONFIG_TRACING | 336 | #ifdef CONFIG_TRACING |
319 | extern void *kmem_cache_alloc_trace(struct kmem_cache *, gfp_t, size_t); | 337 | extern void *kmem_cache_alloc_trace(struct kmem_cache *, gfp_t, size_t) __assume_slab_alignment; |
320 | 338 | ||
321 | #ifdef CONFIG_NUMA | 339 | #ifdef CONFIG_NUMA |
322 | extern void *kmem_cache_alloc_node_trace(struct kmem_cache *s, | 340 | extern void *kmem_cache_alloc_node_trace(struct kmem_cache *s, |
323 | gfp_t gfpflags, | 341 | gfp_t gfpflags, |
324 | int node, size_t size); | 342 | int node, size_t size) __assume_slab_alignment; |
325 | #else | 343 | #else |
326 | static __always_inline void * | 344 | static __always_inline void * |
327 | kmem_cache_alloc_node_trace(struct kmem_cache *s, | 345 | kmem_cache_alloc_node_trace(struct kmem_cache *s, |
@@ -354,10 +372,10 @@ kmem_cache_alloc_node_trace(struct kmem_cache *s, | |||
354 | } | 372 | } |
355 | #endif /* CONFIG_TRACING */ | 373 | #endif /* CONFIG_TRACING */ |
356 | 374 | ||
357 | extern void *kmalloc_order(size_t size, gfp_t flags, unsigned int order); | 375 | extern void *kmalloc_order(size_t size, gfp_t flags, unsigned int order) __assume_page_alignment; |
358 | 376 | ||
359 | #ifdef CONFIG_TRACING | 377 | #ifdef CONFIG_TRACING |
360 | extern void *kmalloc_order_trace(size_t size, gfp_t flags, unsigned int order); | 378 | extern void *kmalloc_order_trace(size_t size, gfp_t flags, unsigned int order) __assume_page_alignment; |
361 | #else | 379 | #else |
362 | static __always_inline void * | 380 | static __always_inline void * |
363 | kmalloc_order_trace(size_t size, gfp_t flags, unsigned int order) | 381 | kmalloc_order_trace(size_t size, gfp_t flags, unsigned int order) |
@@ -482,15 +500,6 @@ static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) | |||
482 | return __kmalloc_node(size, flags, node); | 500 | return __kmalloc_node(size, flags, node); |
483 | } | 501 | } |
484 | 502 | ||
485 | /* | ||
486 | * Setting ARCH_SLAB_MINALIGN in arch headers allows a different alignment. | ||
487 | * Intended for arches that get misalignment faults even for 64 bit integer | ||
488 | * aligned buffers. | ||
489 | */ | ||
490 | #ifndef ARCH_SLAB_MINALIGN | ||
491 | #define ARCH_SLAB_MINALIGN __alignof__(unsigned long long) | ||
492 | #endif | ||
493 | |||
494 | struct memcg_cache_array { | 503 | struct memcg_cache_array { |
495 | struct rcu_head rcu; | 504 | struct rcu_head rcu; |
496 | struct kmem_cache *entries[0]; | 505 | struct kmem_cache *entries[0]; |
diff --git a/include/linux/tty.h b/include/linux/tty.h index 5b04b0a5375b..5e31f1b99037 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -607,7 +607,7 @@ extern void n_tty_inherit_ops(struct tty_ldisc_ops *ops); | |||
607 | 607 | ||
608 | /* tty_audit.c */ | 608 | /* tty_audit.c */ |
609 | #ifdef CONFIG_AUDIT | 609 | #ifdef CONFIG_AUDIT |
610 | extern void tty_audit_add_data(struct tty_struct *tty, unsigned char *data, | 610 | extern void tty_audit_add_data(struct tty_struct *tty, const void *data, |
611 | size_t size, unsigned icanon); | 611 | size_t size, unsigned icanon); |
612 | extern void tty_audit_exit(void); | 612 | extern void tty_audit_exit(void); |
613 | extern void tty_audit_fork(struct signal_struct *sig); | 613 | extern void tty_audit_fork(struct signal_struct *sig); |
@@ -615,8 +615,8 @@ extern void tty_audit_tiocsti(struct tty_struct *tty, char ch); | |||
615 | extern void tty_audit_push(struct tty_struct *tty); | 615 | extern void tty_audit_push(struct tty_struct *tty); |
616 | extern int tty_audit_push_current(void); | 616 | extern int tty_audit_push_current(void); |
617 | #else | 617 | #else |
618 | static inline void tty_audit_add_data(struct tty_struct *tty, | 618 | static inline void tty_audit_add_data(struct tty_struct *tty, const void *data, |
619 | unsigned char *data, size_t size, unsigned icanon) | 619 | size_t size, unsigned icanon) |
620 | { | 620 | { |
621 | } | 621 | } |
622 | static inline void tty_audit_tiocsti(struct tty_struct *tty, char ch) | 622 | static inline void tty_audit_tiocsti(struct tty_struct *tty, char ch) |
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h index aaf9700fc9e5..fb961a576abe 100644 --- a/include/net/ip6_fib.h +++ b/include/net/ip6_fib.h | |||
@@ -167,7 +167,8 @@ static inline void rt6_update_expires(struct rt6_info *rt0, int timeout) | |||
167 | 167 | ||
168 | static inline u32 rt6_get_cookie(const struct rt6_info *rt) | 168 | static inline u32 rt6_get_cookie(const struct rt6_info *rt) |
169 | { | 169 | { |
170 | if (rt->rt6i_flags & RTF_PCPU || unlikely(rt->dst.flags & DST_NOCACHE)) | 170 | if (rt->rt6i_flags & RTF_PCPU || |
171 | (unlikely(rt->dst.flags & DST_NOCACHE) && rt->dst.from)) | ||
171 | rt = (struct rt6_info *)(rt->dst.from); | 172 | rt = (struct rt6_info *)(rt->dst.from); |
172 | 173 | ||
173 | return rt->rt6i_node ? rt->rt6i_node->fn_sernum : 0; | 174 | return rt->rt6i_node ? rt->rt6i_node->fn_sernum : 0; |
diff --git a/include/net/ip6_tunnel.h b/include/net/ip6_tunnel.h index aaee6fa02cf1..ff788b665277 100644 --- a/include/net/ip6_tunnel.h +++ b/include/net/ip6_tunnel.h | |||
@@ -90,11 +90,12 @@ static inline void ip6tunnel_xmit(struct sock *sk, struct sk_buff *skb, | |||
90 | err = ip6_local_out(dev_net(skb_dst(skb)->dev), sk, skb); | 90 | err = ip6_local_out(dev_net(skb_dst(skb)->dev), sk, skb); |
91 | 91 | ||
92 | if (net_xmit_eval(err) == 0) { | 92 | if (net_xmit_eval(err) == 0) { |
93 | struct pcpu_sw_netstats *tstats = this_cpu_ptr(dev->tstats); | 93 | struct pcpu_sw_netstats *tstats = get_cpu_ptr(dev->tstats); |
94 | u64_stats_update_begin(&tstats->syncp); | 94 | u64_stats_update_begin(&tstats->syncp); |
95 | tstats->tx_bytes += pkt_len; | 95 | tstats->tx_bytes += pkt_len; |
96 | tstats->tx_packets++; | 96 | tstats->tx_packets++; |
97 | u64_stats_update_end(&tstats->syncp); | 97 | u64_stats_update_end(&tstats->syncp); |
98 | put_cpu_ptr(tstats); | ||
98 | } else { | 99 | } else { |
99 | stats->tx_errors++; | 100 | stats->tx_errors++; |
100 | stats->tx_aborted_errors++; | 101 | stats->tx_aborted_errors++; |
diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h index f6dafec9102c..62a750a6a8f8 100644 --- a/include/net/ip_tunnels.h +++ b/include/net/ip_tunnels.h | |||
@@ -287,12 +287,13 @@ static inline void iptunnel_xmit_stats(int err, | |||
287 | struct pcpu_sw_netstats __percpu *stats) | 287 | struct pcpu_sw_netstats __percpu *stats) |
288 | { | 288 | { |
289 | if (err > 0) { | 289 | if (err > 0) { |
290 | struct pcpu_sw_netstats *tstats = this_cpu_ptr(stats); | 290 | struct pcpu_sw_netstats *tstats = get_cpu_ptr(stats); |
291 | 291 | ||
292 | u64_stats_update_begin(&tstats->syncp); | 292 | u64_stats_update_begin(&tstats->syncp); |
293 | tstats->tx_bytes += err; | 293 | tstats->tx_bytes += err; |
294 | tstats->tx_packets++; | 294 | tstats->tx_packets++; |
295 | u64_stats_update_end(&tstats->syncp); | 295 | u64_stats_update_end(&tstats->syncp); |
296 | put_cpu_ptr(tstats); | ||
296 | } else if (err < 0) { | 297 | } else if (err < 0) { |
297 | err_stats->tx_errors++; | 298 | err_stats->tx_errors++; |
298 | err_stats->tx_aborted_errors++; | 299 | err_stats->tx_aborted_errors++; |
diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h index c9149cc0a02d..4bd7508bedc9 100644 --- a/include/net/netfilter/nf_tables.h +++ b/include/net/netfilter/nf_tables.h | |||
@@ -618,6 +618,8 @@ struct nft_expr_ops { | |||
618 | void (*eval)(const struct nft_expr *expr, | 618 | void (*eval)(const struct nft_expr *expr, |
619 | struct nft_regs *regs, | 619 | struct nft_regs *regs, |
620 | const struct nft_pktinfo *pkt); | 620 | const struct nft_pktinfo *pkt); |
621 | int (*clone)(struct nft_expr *dst, | ||
622 | const struct nft_expr *src); | ||
621 | unsigned int size; | 623 | unsigned int size; |
622 | 624 | ||
623 | int (*init)(const struct nft_ctx *ctx, | 625 | int (*init)(const struct nft_ctx *ctx, |
@@ -660,10 +662,20 @@ void nft_expr_destroy(const struct nft_ctx *ctx, struct nft_expr *expr); | |||
660 | int nft_expr_dump(struct sk_buff *skb, unsigned int attr, | 662 | int nft_expr_dump(struct sk_buff *skb, unsigned int attr, |
661 | const struct nft_expr *expr); | 663 | const struct nft_expr *expr); |
662 | 664 | ||
663 | static inline void nft_expr_clone(struct nft_expr *dst, struct nft_expr *src) | 665 | static inline int nft_expr_clone(struct nft_expr *dst, struct nft_expr *src) |
664 | { | 666 | { |
667 | int err; | ||
668 | |||
665 | __module_get(src->ops->type->owner); | 669 | __module_get(src->ops->type->owner); |
666 | memcpy(dst, src, src->ops->size); | 670 | if (src->ops->clone) { |
671 | dst->ops = src->ops; | ||
672 | err = src->ops->clone(dst, src); | ||
673 | if (err < 0) | ||
674 | return err; | ||
675 | } else { | ||
676 | memcpy(dst, src, src->ops->size); | ||
677 | } | ||
678 | return 0; | ||
667 | } | 679 | } |
668 | 680 | ||
669 | /** | 681 | /** |
diff --git a/include/net/sock.h b/include/net/sock.h index bbf7c2cf15b4..7f89e4ba18d1 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -2226,6 +2226,31 @@ static inline bool sk_listener(const struct sock *sk) | |||
2226 | return (1 << sk->sk_state) & (TCPF_LISTEN | TCPF_NEW_SYN_RECV); | 2226 | return (1 << sk->sk_state) & (TCPF_LISTEN | TCPF_NEW_SYN_RECV); |
2227 | } | 2227 | } |
2228 | 2228 | ||
2229 | /** | ||
2230 | * sk_state_load - read sk->sk_state for lockless contexts | ||
2231 | * @sk: socket pointer | ||
2232 | * | ||
2233 | * Paired with sk_state_store(). Used in places we do not hold socket lock : | ||
2234 | * tcp_diag_get_info(), tcp_get_info(), tcp_poll(), get_tcp4_sock() ... | ||
2235 | */ | ||
2236 | static inline int sk_state_load(const struct sock *sk) | ||
2237 | { | ||
2238 | return smp_load_acquire(&sk->sk_state); | ||
2239 | } | ||
2240 | |||
2241 | /** | ||
2242 | * sk_state_store - update sk->sk_state | ||
2243 | * @sk: socket pointer | ||
2244 | * @newstate: new state | ||
2245 | * | ||
2246 | * Paired with sk_state_load(). Should be used in contexts where | ||
2247 | * state change might impact lockless readers. | ||
2248 | */ | ||
2249 | static inline void sk_state_store(struct sock *sk, int newstate) | ||
2250 | { | ||
2251 | smp_store_release(&sk->sk_state, newstate); | ||
2252 | } | ||
2253 | |||
2229 | void sock_enable_timestamp(struct sock *sk, int flag); | 2254 | void sock_enable_timestamp(struct sock *sk, int flag); |
2230 | int sock_get_timestamp(struct sock *, struct timeval __user *); | 2255 | int sock_get_timestamp(struct sock *, struct timeval __user *); |
2231 | int sock_get_timestampns(struct sock *, struct timespec __user *); | 2256 | int sock_get_timestampns(struct sock *, struct timespec __user *); |
diff --git a/include/net/switchdev.h b/include/net/switchdev.h index bc865e244efe..1d22ce9f352e 100644 --- a/include/net/switchdev.h +++ b/include/net/switchdev.h | |||
@@ -323,7 +323,7 @@ static inline int switchdev_port_fdb_dump(struct sk_buff *skb, | |||
323 | struct net_device *filter_dev, | 323 | struct net_device *filter_dev, |
324 | int idx) | 324 | int idx) |
325 | { | 325 | { |
326 | return -EOPNOTSUPP; | 326 | return idx; |
327 | } | 327 | } |
328 | 328 | ||
329 | static inline void switchdev_port_fwd_mark_set(struct net_device *dev, | 329 | static inline void switchdev_port_fwd_mark_set(struct net_device *dev, |