mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 17:57:38 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
net/dsa/dsa2.c commitafb3cc1a39("net: dsa: unlock the rtnl_mutex when dsa_master_setup() fails") commite83d565378("net: dsa: replay master state events in dsa_tree_{setup,teardown}_master") https://lore.kernel.org/all/20220307101436.7ae87da0@canb.auug.org.au/ drivers/net/ethernet/intel/ice/ice.h commit97b0129146("ice: Fix error with handling of bonding MTU") commit43113ff734("ice: add TTY for GNSS module for E810T device") https://lore.kernel.org/all/20220310112843.3233bcf1@canb.auug.org.au/ drivers/staging/gdm724x/gdm_lte.c commitfc7f750dc9("staging: gdm724x: fix use after free in gdm_lte_rx()") commit4bcc4249b4("staging: Use netif_rx().") https://lore.kernel.org/all/20220308111043.1018a59d@canb.auug.org.au/ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -92,6 +92,11 @@
|
||||
ARM_SMCCC_SMC_32, \
|
||||
0, 0x7fff)
|
||||
|
||||
#define ARM_SMCCC_ARCH_WORKAROUND_3 \
|
||||
ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \
|
||||
ARM_SMCCC_SMC_32, \
|
||||
0, 0x3fff)
|
||||
|
||||
#define ARM_SMCCC_VENDOR_HYP_CALL_UID_FUNC_ID \
|
||||
ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \
|
||||
ARM_SMCCC_SMC_32, \
|
||||
|
||||
@@ -1822,6 +1822,11 @@ struct bpf_core_ctx {
|
||||
int bpf_core_apply(struct bpf_core_ctx *ctx, const struct bpf_core_relo *relo,
|
||||
int relo_idx, void *insn);
|
||||
|
||||
static inline bool unprivileged_ebpf_enabled(void)
|
||||
{
|
||||
return !sysctl_unprivileged_bpf_disabled;
|
||||
}
|
||||
|
||||
#else /* !CONFIG_BPF_SYSCALL */
|
||||
static inline struct bpf_prog *bpf_prog_get(u32 ufd)
|
||||
{
|
||||
@@ -2025,6 +2030,12 @@ bpf_jit_find_kfunc_model(const struct bpf_prog *prog,
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline bool unprivileged_ebpf_enabled(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_BPF_SYSCALL */
|
||||
|
||||
void __bpf_free_used_btfs(struct bpf_prog_aux *aux,
|
||||
|
||||
@@ -61,14 +61,6 @@
|
||||
*/
|
||||
#define DMA_ATTR_PRIVILEGED (1UL << 9)
|
||||
|
||||
/*
|
||||
* This is a hint to the DMA-mapping subsystem that the device is expected
|
||||
* to overwrite the entire mapped size, thus the caller does not require any
|
||||
* of the previous buffer contents to be preserved. This allows
|
||||
* bounce-buffering implementations to optimise DMA_FROM_DEVICE transfers.
|
||||
*/
|
||||
#define DMA_ATTR_OVERWRITE (1UL << 10)
|
||||
|
||||
/*
|
||||
* A dma_addr_t can hold any valid DMA or bus address for the platform. It can
|
||||
* be given to a device to use as a DMA source or target. It is specific to a
|
||||
|
||||
@@ -3432,7 +3432,6 @@ enum {
|
||||
enum {
|
||||
MLX5_TIRC_PACKET_MERGE_MASK_IPV4_LRO = BIT(0),
|
||||
MLX5_TIRC_PACKET_MERGE_MASK_IPV6_LRO = BIT(1),
|
||||
MLX5_TIRC_PACKET_MERGE_MASK_SHAMPO = BIT(2),
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -9899,8 +9898,8 @@ struct mlx5_ifc_bufferx_reg_bits {
|
||||
u8 reserved_at_0[0x6];
|
||||
u8 lossy[0x1];
|
||||
u8 epsb[0x1];
|
||||
u8 reserved_at_8[0xc];
|
||||
u8 size[0xc];
|
||||
u8 reserved_at_8[0x8];
|
||||
u8 size[0x10];
|
||||
|
||||
u8 xoff_threshold[0x10];
|
||||
u8 xon_threshold[0x10];
|
||||
|
||||
@@ -2626,7 +2626,7 @@ static inline int vma_adjust(struct vm_area_struct *vma, unsigned long start,
|
||||
extern struct vm_area_struct *vma_merge(struct mm_struct *,
|
||||
struct vm_area_struct *prev, unsigned long addr, unsigned long end,
|
||||
unsigned long vm_flags, struct anon_vma *, struct file *, pgoff_t,
|
||||
struct mempolicy *, struct vm_userfaultfd_ctx, const char *);
|
||||
struct mempolicy *, struct vm_userfaultfd_ctx, struct anon_vma_name *);
|
||||
extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *);
|
||||
extern int __split_vma(struct mm_struct *, struct vm_area_struct *,
|
||||
unsigned long addr, int new_below);
|
||||
@@ -3372,11 +3372,12 @@ static inline int seal_check_future_write(int seals, struct vm_area_struct *vma)
|
||||
|
||||
#ifdef CONFIG_ANON_VMA_NAME
|
||||
int madvise_set_anon_name(struct mm_struct *mm, unsigned long start,
|
||||
unsigned long len_in, const char *name);
|
||||
unsigned long len_in,
|
||||
struct anon_vma_name *anon_name);
|
||||
#else
|
||||
static inline int
|
||||
madvise_set_anon_name(struct mm_struct *mm, unsigned long start,
|
||||
unsigned long len_in, const char *name) {
|
||||
unsigned long len_in, struct anon_vma_name *anon_name) {
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -140,50 +140,91 @@ static __always_inline void del_page_from_lru_list(struct page *page,
|
||||
|
||||
#ifdef CONFIG_ANON_VMA_NAME
|
||||
/*
|
||||
* mmap_lock should be read-locked when calling vma_anon_name() and while using
|
||||
* the returned pointer.
|
||||
* mmap_lock should be read-locked when calling anon_vma_name(). Caller should
|
||||
* either keep holding the lock while using the returned pointer or it should
|
||||
* raise anon_vma_name refcount before releasing the lock.
|
||||
*/
|
||||
extern const char *vma_anon_name(struct vm_area_struct *vma);
|
||||
|
||||
/*
|
||||
* mmap_lock should be read-locked for orig_vma->vm_mm.
|
||||
* mmap_lock should be write-locked for new_vma->vm_mm or new_vma should be
|
||||
* isolated.
|
||||
*/
|
||||
extern void dup_vma_anon_name(struct vm_area_struct *orig_vma,
|
||||
struct vm_area_struct *new_vma);
|
||||
|
||||
/*
|
||||
* mmap_lock should be write-locked or vma should have been isolated under
|
||||
* write-locked mmap_lock protection.
|
||||
*/
|
||||
extern void free_vma_anon_name(struct vm_area_struct *vma);
|
||||
extern struct anon_vma_name *anon_vma_name(struct vm_area_struct *vma);
|
||||
extern struct anon_vma_name *anon_vma_name_alloc(const char *name);
|
||||
extern void anon_vma_name_free(struct kref *kref);
|
||||
|
||||
/* mmap_lock should be read-locked */
|
||||
static inline bool is_same_vma_anon_name(struct vm_area_struct *vma,
|
||||
const char *name)
|
||||
static inline void anon_vma_name_get(struct anon_vma_name *anon_name)
|
||||
{
|
||||
const char *vma_name = vma_anon_name(vma);
|
||||
if (anon_name)
|
||||
kref_get(&anon_name->kref);
|
||||
}
|
||||
|
||||
/* either both NULL, or pointers to same string */
|
||||
if (vma_name == name)
|
||||
static inline void anon_vma_name_put(struct anon_vma_name *anon_name)
|
||||
{
|
||||
if (anon_name)
|
||||
kref_put(&anon_name->kref, anon_vma_name_free);
|
||||
}
|
||||
|
||||
static inline
|
||||
struct anon_vma_name *anon_vma_name_reuse(struct anon_vma_name *anon_name)
|
||||
{
|
||||
/* Prevent anon_name refcount saturation early on */
|
||||
if (kref_read(&anon_name->kref) < REFCOUNT_MAX) {
|
||||
anon_vma_name_get(anon_name);
|
||||
return anon_name;
|
||||
|
||||
}
|
||||
return anon_vma_name_alloc(anon_name->name);
|
||||
}
|
||||
|
||||
static inline void dup_anon_vma_name(struct vm_area_struct *orig_vma,
|
||||
struct vm_area_struct *new_vma)
|
||||
{
|
||||
struct anon_vma_name *anon_name = anon_vma_name(orig_vma);
|
||||
|
||||
if (anon_name)
|
||||
new_vma->anon_name = anon_vma_name_reuse(anon_name);
|
||||
}
|
||||
|
||||
static inline void free_anon_vma_name(struct vm_area_struct *vma)
|
||||
{
|
||||
/*
|
||||
* Not using anon_vma_name because it generates a warning if mmap_lock
|
||||
* is not held, which might be the case here.
|
||||
*/
|
||||
if (!vma->vm_file)
|
||||
anon_vma_name_put(vma->anon_name);
|
||||
}
|
||||
|
||||
static inline bool anon_vma_name_eq(struct anon_vma_name *anon_name1,
|
||||
struct anon_vma_name *anon_name2)
|
||||
{
|
||||
if (anon_name1 == anon_name2)
|
||||
return true;
|
||||
|
||||
return name && vma_name && !strcmp(name, vma_name);
|
||||
return anon_name1 && anon_name2 &&
|
||||
!strcmp(anon_name1->name, anon_name2->name);
|
||||
}
|
||||
|
||||
#else /* CONFIG_ANON_VMA_NAME */
|
||||
static inline const char *vma_anon_name(struct vm_area_struct *vma)
|
||||
static inline struct anon_vma_name *anon_vma_name(struct vm_area_struct *vma)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
static inline void dup_vma_anon_name(struct vm_area_struct *orig_vma,
|
||||
struct vm_area_struct *new_vma) {}
|
||||
static inline void free_vma_anon_name(struct vm_area_struct *vma) {}
|
||||
static inline bool is_same_vma_anon_name(struct vm_area_struct *vma,
|
||||
const char *name)
|
||||
|
||||
static inline struct anon_vma_name *anon_vma_name_alloc(const char *name)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void anon_vma_name_get(struct anon_vma_name *anon_name) {}
|
||||
static inline void anon_vma_name_put(struct anon_vma_name *anon_name) {}
|
||||
static inline void dup_anon_vma_name(struct vm_area_struct *orig_vma,
|
||||
struct vm_area_struct *new_vma) {}
|
||||
static inline void free_anon_vma_name(struct vm_area_struct *vma) {}
|
||||
|
||||
static inline bool anon_vma_name_eq(struct anon_vma_name *anon_name1,
|
||||
struct anon_vma_name *anon_name2)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_ANON_VMA_NAME */
|
||||
|
||||
static inline void init_tlb_flush_pending(struct mm_struct *mm)
|
||||
|
||||
@@ -416,7 +416,10 @@ struct vm_area_struct {
|
||||
struct rb_node rb;
|
||||
unsigned long rb_subtree_last;
|
||||
} shared;
|
||||
/* Serialized by mmap_sem. */
|
||||
/*
|
||||
* Serialized by mmap_sem. Never use directly because it is
|
||||
* valid only when vm_file is NULL. Use anon_vma_name instead.
|
||||
*/
|
||||
struct anon_vma_name *anon_name;
|
||||
};
|
||||
|
||||
|
||||
@@ -4672,6 +4672,8 @@ int skb_csum_hwoffload_help(struct sk_buff *skb,
|
||||
|
||||
struct sk_buff *__skb_gso_segment(struct sk_buff *skb,
|
||||
netdev_features_t features, bool tx_path);
|
||||
struct sk_buff *skb_eth_gso_segment(struct sk_buff *skb,
|
||||
netdev_features_t features, __be16 type);
|
||||
struct sk_buff *skb_mac_gso_segment(struct sk_buff *skb,
|
||||
netdev_features_t features);
|
||||
|
||||
|
||||
@@ -87,8 +87,8 @@ extern const int phy_10gbit_features_array[1];
|
||||
*
|
||||
* @PHY_INTERFACE_MODE_NA: Not Applicable - don't touch
|
||||
* @PHY_INTERFACE_MODE_INTERNAL: No interface, MAC and PHY combined
|
||||
* @PHY_INTERFACE_MODE_MII: Median-independent interface
|
||||
* @PHY_INTERFACE_MODE_GMII: Gigabit median-independent interface
|
||||
* @PHY_INTERFACE_MODE_MII: Media-independent interface
|
||||
* @PHY_INTERFACE_MODE_GMII: Gigabit media-independent interface
|
||||
* @PHY_INTERFACE_MODE_SGMII: Serial gigabit media-independent interface
|
||||
* @PHY_INTERFACE_MODE_TBI: Ten Bit Interface
|
||||
* @PHY_INTERFACE_MODE_REVMII: Reverse Media Independent Interface
|
||||
|
||||
@@ -401,18 +401,24 @@ static inline int vdpa_reset(struct vdpa_device *vdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int vdpa_set_features(struct vdpa_device *vdev, u64 features, bool locked)
|
||||
static inline int vdpa_set_features_unlocked(struct vdpa_device *vdev, u64 features)
|
||||
{
|
||||
const struct vdpa_config_ops *ops = vdev->config;
|
||||
int ret;
|
||||
|
||||
if (!locked)
|
||||
mutex_lock(&vdev->cf_mutex);
|
||||
|
||||
vdev->features_valid = true;
|
||||
ret = ops->set_driver_features(vdev, features);
|
||||
if (!locked)
|
||||
mutex_unlock(&vdev->cf_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int vdpa_set_features(struct vdpa_device *vdev, u64 features)
|
||||
{
|
||||
int ret;
|
||||
|
||||
mutex_lock(&vdev->cf_mutex);
|
||||
ret = vdpa_set_features_unlocked(vdev, features);
|
||||
mutex_unlock(&vdev->cf_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -133,7 +133,6 @@ bool is_virtio_device(struct device *dev);
|
||||
void virtio_break_device(struct virtio_device *dev);
|
||||
|
||||
void virtio_config_changed(struct virtio_device *dev);
|
||||
int virtio_finalize_features(struct virtio_device *dev);
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
int virtio_device_freeze(struct virtio_device *dev);
|
||||
int virtio_device_restore(struct virtio_device *dev);
|
||||
|
||||
@@ -64,8 +64,9 @@ struct virtio_shm_region {
|
||||
* Returns the first 64 feature bits (all we currently need).
|
||||
* @finalize_features: confirm what device features we'll be using.
|
||||
* vdev: the virtio_device
|
||||
* This gives the final feature bits for the device: it can change
|
||||
* This sends the driver feature bits to the device: it can change
|
||||
* the dev->feature bits if it wants.
|
||||
* Note: despite the name this can be called any number of times.
|
||||
* Returns 0 on success or error status
|
||||
* @bus_name: return the bus name associated with the device (optional)
|
||||
* vdev: the virtio_device
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
#define ESP_SKB_FRAG_MAXSIZE (PAGE_SIZE << SKB_FRAG_PAGE_ORDER)
|
||||
|
||||
struct ip_esp_hdr;
|
||||
|
||||
static inline struct ip_esp_hdr *ip_esp_hdr(const struct sk_buff *skb)
|
||||
|
||||
@@ -278,7 +278,8 @@
|
||||
#define KEY_PAUSECD 201
|
||||
#define KEY_PROG3 202
|
||||
#define KEY_PROG4 203
|
||||
#define KEY_DASHBOARD 204 /* AL Dashboard */
|
||||
#define KEY_ALL_APPLICATIONS 204 /* AC Desktop Show All Applications */
|
||||
#define KEY_DASHBOARD KEY_ALL_APPLICATIONS
|
||||
#define KEY_SUSPEND 205
|
||||
#define KEY_CLOSE 206 /* AC Close */
|
||||
#define KEY_PLAY 207
|
||||
@@ -612,6 +613,7 @@
|
||||
#define KEY_ASSISTANT 0x247 /* AL Context-aware desktop assistant */
|
||||
#define KEY_KBD_LAYOUT_NEXT 0x248 /* AC Next Keyboard Layout Select */
|
||||
#define KEY_EMOJI_PICKER 0x249 /* Show/hide emoji picker (HUTRR101) */
|
||||
#define KEY_DICTATE 0x24a /* Start or Stop Voice Dictation Session (HUTRR99) */
|
||||
|
||||
#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
|
||||
#define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#define EFIVARFS_MAGIC 0xde5e81e4
|
||||
#define HOSTFS_SUPER_MAGIC 0x00c0ffee
|
||||
#define OVERLAYFS_SUPER_MAGIC 0x794c7630
|
||||
#define FUSE_SUPER_MAGIC 0x65735546
|
||||
|
||||
#define MINIX_SUPER_MAGIC 0x137F /* minix v1 fs, 14 char names */
|
||||
#define MINIX_SUPER_MAGIC2 0x138F /* minix v1 fs, 30 char names */
|
||||
|
||||
@@ -104,17 +104,32 @@ int gnttab_end_foreign_access_ref(grant_ref_t ref, int readonly);
|
||||
* access has been ended, free the given page too. Access will be ended
|
||||
* immediately iff the grant entry is not in use, otherwise it will happen
|
||||
* some time later. page may be 0, in which case no freeing will occur.
|
||||
* Note that the granted page might still be accessed (read or write) by the
|
||||
* other side after gnttab_end_foreign_access() returns, so even if page was
|
||||
* specified as 0 it is not allowed to just reuse the page for other
|
||||
* purposes immediately. gnttab_end_foreign_access() will take an additional
|
||||
* reference to the granted page in this case, which is dropped only after
|
||||
* the grant is no longer in use.
|
||||
* This requires that multi page allocations for areas subject to
|
||||
* gnttab_end_foreign_access() are done via alloc_pages_exact() (and freeing
|
||||
* via free_pages_exact()) in order to avoid high order pages.
|
||||
*/
|
||||
void gnttab_end_foreign_access(grant_ref_t ref, int readonly,
|
||||
unsigned long page);
|
||||
|
||||
/*
|
||||
* End access through the given grant reference, iff the grant entry is
|
||||
* no longer in use. In case of success ending foreign access, the
|
||||
* grant reference is deallocated.
|
||||
* Return 1 if the grant entry was freed, 0 if it is still in use.
|
||||
*/
|
||||
int gnttab_try_end_foreign_access(grant_ref_t ref);
|
||||
|
||||
int gnttab_grant_foreign_transfer(domid_t domid, unsigned long pfn);
|
||||
|
||||
unsigned long gnttab_end_foreign_transfer_ref(grant_ref_t ref);
|
||||
unsigned long gnttab_end_foreign_transfer(grant_ref_t ref);
|
||||
|
||||
int gnttab_query_foreign_access(grant_ref_t ref);
|
||||
|
||||
/*
|
||||
* operations on reserved batches of grant references
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user