mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 12:10:38 -04:00
Merge branch 'linus' into x86/entry, to resolve conflicts
Conflicts: arch/x86/kernel/traps.c Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
@@ -122,7 +122,7 @@ static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma,
|
||||
#ifndef __HAVE_ARCH_HUGE_PTEP_GET
|
||||
static inline pte_t huge_ptep_get(pte_t *ptep)
|
||||
{
|
||||
return READ_ONCE(*ptep);
|
||||
return ptep_get(ptep);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ struct displayid_detailed_timings_1 {
|
||||
|
||||
struct displayid_detailed_timing_block {
|
||||
struct displayid_block base;
|
||||
struct displayid_detailed_timings_1 timings[0];
|
||||
struct displayid_detailed_timings_1 timings[];
|
||||
};
|
||||
|
||||
#define for_each_displayid_db(displayid, block, idx, length) \
|
||||
|
||||
@@ -27,7 +27,7 @@ struct encrypted_key_payload {
|
||||
unsigned short payload_datalen; /* payload data length */
|
||||
unsigned short encrypted_key_format; /* encrypted key format */
|
||||
u8 *decrypted_data; /* decrypted data */
|
||||
u8 payload_data[0]; /* payload data + datablob + hmac */
|
||||
u8 payload_data[]; /* payload data + datablob + hmac */
|
||||
};
|
||||
|
||||
extern struct key_type key_type_encrypted;
|
||||
|
||||
@@ -28,7 +28,7 @@ struct rxkad_key {
|
||||
u8 primary_flag; /* T if key for primary cell for this user */
|
||||
u16 ticket_len; /* length of ticket[] */
|
||||
u8 session_key[8]; /* DES session key */
|
||||
u8 ticket[0]; /* the encrypted ticket */
|
||||
u8 ticket[]; /* the encrypted ticket */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -100,7 +100,7 @@ struct rxrpc_key_data_v1 {
|
||||
u32 expiry; /* time_t */
|
||||
u32 kvno;
|
||||
u8 session_key[8];
|
||||
u8 ticket[0];
|
||||
u8 ticket[];
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
struct can_skb_priv {
|
||||
int ifindex;
|
||||
int skbcnt;
|
||||
struct can_frame cf[0];
|
||||
struct can_frame cf[];
|
||||
};
|
||||
|
||||
static inline struct can_skb_priv *can_skb_prv(struct sk_buff *skb)
|
||||
|
||||
@@ -36,7 +36,7 @@ struct cb710_chip {
|
||||
unsigned slot_mask;
|
||||
unsigned slots;
|
||||
spinlock_t irq_lock;
|
||||
struct cb710_slot slot[0];
|
||||
struct cb710_slot slot[];
|
||||
};
|
||||
|
||||
/* NOTE: cb710_chip.slots is modified only during device init/exit and
|
||||
|
||||
@@ -52,8 +52,7 @@ struct ceph_options {
|
||||
unsigned long osd_idle_ttl; /* jiffies */
|
||||
unsigned long osd_keepalive_timeout; /* jiffies */
|
||||
unsigned long osd_request_timeout; /* jiffies */
|
||||
|
||||
u32 osd_req_flags; /* CEPH_OSD_FLAG_*, applied to each OSD request */
|
||||
u32 read_from_replica; /* CEPH_OSD_FLAG_BALANCE/LOCALIZE_READS */
|
||||
|
||||
/*
|
||||
* any type that can't be simply compared or doesn't need
|
||||
@@ -76,6 +75,7 @@ struct ceph_options {
|
||||
#define CEPH_OSD_KEEPALIVE_DEFAULT msecs_to_jiffies(5 * 1000)
|
||||
#define CEPH_OSD_IDLE_TTL_DEFAULT msecs_to_jiffies(60 * 1000)
|
||||
#define CEPH_OSD_REQUEST_TIMEOUT_DEFAULT 0 /* no timeout */
|
||||
#define CEPH_READ_FROM_REPLICA_DEFAULT 0 /* read from primary */
|
||||
|
||||
#define CEPH_MONC_HUNT_INTERVAL msecs_to_jiffies(3 * 1000)
|
||||
#define CEPH_MONC_PING_INTERVAL msecs_to_jiffies(10 * 1000)
|
||||
|
||||
@@ -5,20 +5,20 @@
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#ifdef __CHECKER__
|
||||
# define __user __attribute__((noderef, address_space(1)))
|
||||
# define __kernel __attribute__((address_space(0)))
|
||||
# define __user __attribute__((noderef, address_space(__user)))
|
||||
# define __safe __attribute__((safe))
|
||||
# define __force __attribute__((force))
|
||||
# define __nocast __attribute__((nocast))
|
||||
# define __iomem __attribute__((noderef, address_space(2)))
|
||||
# define __iomem __attribute__((noderef, address_space(__iomem)))
|
||||
# define __must_hold(x) __attribute__((context(x,1,1)))
|
||||
# define __acquires(x) __attribute__((context(x,0,1)))
|
||||
# define __releases(x) __attribute__((context(x,1,0)))
|
||||
# define __acquire(x) __context__(x,1)
|
||||
# define __release(x) __context__(x,-1)
|
||||
# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0)
|
||||
# define __percpu __attribute__((noderef, address_space(3)))
|
||||
# define __rcu __attribute__((noderef, address_space(4)))
|
||||
# define __percpu __attribute__((noderef, address_space(__percpu)))
|
||||
# define __rcu __attribute__((noderef, address_space(__rcu)))
|
||||
# define __private __attribute__((noderef))
|
||||
extern void __chk_user_ptr(const volatile void __user *);
|
||||
extern void __chk_io_ptr(const volatile void __iomem *);
|
||||
|
||||
@@ -153,7 +153,7 @@ struct dma_interleaved_template {
|
||||
bool dst_sgl;
|
||||
size_t numf;
|
||||
size_t frame_size;
|
||||
struct data_chunk sgl[0];
|
||||
struct data_chunk sgl[];
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -535,7 +535,7 @@ struct dmaengine_unmap_data {
|
||||
struct device *dev;
|
||||
struct kref kref;
|
||||
size_t len;
|
||||
dma_addr_t addr[0];
|
||||
dma_addr_t addr[];
|
||||
};
|
||||
|
||||
struct dma_async_tx_descriptor;
|
||||
|
||||
@@ -2592,7 +2592,6 @@ extern void bdput(struct block_device *);
|
||||
extern void invalidate_bdev(struct block_device *);
|
||||
extern void iterate_bdevs(void (*)(struct block_device *, void *), void *);
|
||||
extern int sync_blockdev(struct block_device *bdev);
|
||||
extern void kill_bdev(struct block_device *);
|
||||
extern struct super_block *freeze_bdev(struct block_device *);
|
||||
extern void emergency_thaw_all(void);
|
||||
extern void emergency_thaw_bdev(struct super_block *sb);
|
||||
@@ -2608,7 +2607,6 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb)
|
||||
#else
|
||||
static inline void bd_forget(struct inode *inode) {}
|
||||
static inline int sync_blockdev(struct block_device *bdev) { return 0; }
|
||||
static inline void kill_bdev(struct block_device *bdev) {}
|
||||
static inline void invalidate_bdev(struct block_device *bdev) {}
|
||||
|
||||
static inline struct super_block *freeze_bdev(struct block_device *sb)
|
||||
|
||||
@@ -46,7 +46,7 @@ struct fscache_cache_tag {
|
||||
unsigned long flags;
|
||||
#define FSCACHE_TAG_RESERVED 0 /* T if tag is reserved for a cache */
|
||||
atomic_t usage;
|
||||
char name[0]; /* tag name */
|
||||
char name[]; /* tag name */
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -408,7 +408,7 @@ static inline bool i2c_detect_slave_mode(struct device *dev) { return false; }
|
||||
* that are present. This information is used to grow the driver model tree.
|
||||
* For mainboards this is done statically using i2c_register_board_info();
|
||||
* bus numbers identify adapters that aren't yet available. For add-on boards,
|
||||
* i2c_new_device() does this dynamically with the adapter already known.
|
||||
* i2c_new_client_device() does this dynamically with the adapter already known.
|
||||
*/
|
||||
struct i2c_board_info {
|
||||
char type[I2C_NAME_SIZE];
|
||||
@@ -439,13 +439,11 @@ struct i2c_board_info {
|
||||
|
||||
|
||||
#if IS_ENABLED(CONFIG_I2C)
|
||||
/* Add-on boards should register/unregister their devices; e.g. a board
|
||||
/*
|
||||
* Add-on boards should register/unregister their devices; e.g. a board
|
||||
* with integrated I2C, a config eeprom, sensors, and a codec that's
|
||||
* used in conjunction with the primary hardware.
|
||||
*/
|
||||
struct i2c_client *
|
||||
i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info);
|
||||
|
||||
struct i2c_client *
|
||||
i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *info);
|
||||
|
||||
|
||||
@@ -765,6 +765,11 @@ struct journal_s
|
||||
*/
|
||||
int j_errno;
|
||||
|
||||
/**
|
||||
* @j_abort_mutex: Lock the whole aborting procedure.
|
||||
*/
|
||||
struct mutex j_abort_mutex;
|
||||
|
||||
/**
|
||||
* @j_sb_buffer: The first part of the superblock buffer.
|
||||
*/
|
||||
@@ -1247,7 +1252,6 @@ JBD2_FEATURE_INCOMPAT_FUNCS(csum3, CSUM_V3)
|
||||
#define JBD2_ABORT_ON_SYNCDATA_ERR 0x040 /* Abort the journal on file
|
||||
* data write error in ordered
|
||||
* mode */
|
||||
#define JBD2_REC_ERR 0x080 /* The errno in the sb has been recorded */
|
||||
|
||||
/*
|
||||
* Function declarations for the journaling transaction and buffer
|
||||
|
||||
@@ -208,7 +208,7 @@ struct crash_mem_range {
|
||||
struct crash_mem {
|
||||
unsigned int max_nr_ranges;
|
||||
unsigned int nr_ranges;
|
||||
struct crash_mem_range ranges[0];
|
||||
struct crash_mem_range ranges[];
|
||||
};
|
||||
|
||||
extern int crash_exclude_mem_range(struct crash_mem *mem,
|
||||
|
||||
@@ -161,7 +161,7 @@ struct kretprobe_instance {
|
||||
kprobe_opcode_t *ret_addr;
|
||||
struct task_struct *task;
|
||||
void *fp;
|
||||
char data[0];
|
||||
char data[];
|
||||
};
|
||||
|
||||
struct kretprobe_blackpoint {
|
||||
@@ -350,6 +350,10 @@ static inline struct kprobe_ctlblk *get_kprobe_ctlblk(void)
|
||||
return this_cpu_ptr(&kprobe_ctlblk);
|
||||
}
|
||||
|
||||
extern struct kprobe kprobe_busy;
|
||||
void kprobe_busy_begin(void);
|
||||
void kprobe_busy_end(void);
|
||||
|
||||
kprobe_opcode_t *kprobe_lookup_name(const char *name, unsigned int offset);
|
||||
int register_kprobe(struct kprobe *p);
|
||||
void unregister_kprobe(struct kprobe *p);
|
||||
|
||||
@@ -409,7 +409,7 @@ struct kvm_irq_routing_table {
|
||||
* Array indexed by gsi. Each entry contains list of irq chips
|
||||
* the gsi is connected to.
|
||||
*/
|
||||
struct hlist_head map[0];
|
||||
struct hlist_head map[];
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/cdrom.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/async.h>
|
||||
|
||||
/*
|
||||
* Define if arch has non-standard setup. This is a _PCI_ standard
|
||||
@@ -609,7 +610,7 @@ struct ata_host {
|
||||
struct task_struct *eh_owner;
|
||||
|
||||
struct ata_port *simplex_claimed; /* channel owning the DMA */
|
||||
struct ata_port *ports[0];
|
||||
struct ata_port *ports[];
|
||||
};
|
||||
|
||||
struct ata_queued_cmd {
|
||||
@@ -872,6 +873,8 @@ struct ata_port {
|
||||
struct timer_list fastdrain_timer;
|
||||
unsigned long fastdrain_cnt;
|
||||
|
||||
async_cookie_t cookie;
|
||||
|
||||
int em_message_type;
|
||||
void *private_data;
|
||||
|
||||
@@ -1092,7 +1095,11 @@ extern int ata_scsi_ioctl(struct scsi_device *dev, unsigned int cmd,
|
||||
#define ATA_SCSI_COMPAT_IOCTL /* empty */
|
||||
#endif
|
||||
extern int ata_scsi_queuecmd(struct Scsi_Host *h, struct scsi_cmnd *cmd);
|
||||
#if IS_ENABLED(CONFIG_ATA)
|
||||
bool ata_scsi_dma_need_drain(struct request *rq);
|
||||
#else
|
||||
#define ata_scsi_dma_need_drain NULL
|
||||
#endif
|
||||
extern int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *dev,
|
||||
unsigned int cmd, void __user *arg);
|
||||
extern bool ata_link_online(struct ata_link *link);
|
||||
|
||||
@@ -304,16 +304,33 @@ static inline __must_check size_t __ab_c_size(size_t a, size_t b, size_t c)
|
||||
* struct_size() - Calculate size of structure with trailing array.
|
||||
* @p: Pointer to the structure.
|
||||
* @member: Name of the array member.
|
||||
* @n: Number of elements in the array.
|
||||
* @count: Number of elements in the array.
|
||||
*
|
||||
* Calculates size of memory needed for structure @p followed by an
|
||||
* array of @n @member elements.
|
||||
* array of @count number of @member elements.
|
||||
*
|
||||
* Return: number of bytes needed or SIZE_MAX on overflow.
|
||||
*/
|
||||
#define struct_size(p, member, n) \
|
||||
__ab_c_size(n, \
|
||||
#define struct_size(p, member, count) \
|
||||
__ab_c_size(count, \
|
||||
sizeof(*(p)->member) + __must_be_array((p)->member),\
|
||||
sizeof(*(p)))
|
||||
|
||||
/**
|
||||
* flex_array_size() - Calculate size of a flexible array member
|
||||
* within an enclosing structure.
|
||||
*
|
||||
* @p: Pointer to the structure.
|
||||
* @member: Name of the flexible array member.
|
||||
* @count: Number of elements in the array.
|
||||
*
|
||||
* Calculates size of a flexible array of @count number of @member
|
||||
* elements, at the end of structure @p.
|
||||
*
|
||||
* Return: number of bytes needed or SIZE_MAX on overflow.
|
||||
*/
|
||||
#define flex_array_size(p, member, count) \
|
||||
array_size(count, \
|
||||
sizeof(*(p)->member) + __must_be_array((p)->member))
|
||||
|
||||
#endif /* __LINUX_OVERFLOW_H */
|
||||
|
||||
@@ -249,6 +249,13 @@ static inline pte_t ptep_get_and_clear(struct mm_struct *mm,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef __HAVE_ARCH_PTEP_GET
|
||||
static inline pte_t ptep_get(pte_t *ptep)
|
||||
{
|
||||
return READ_ONCE(*ptep);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
#ifndef __HAVE_ARCH_PMDP_HUGE_GET_AND_CLEAR
|
||||
static inline pmd_t pmdp_huge_get_and_clear(struct mm_struct *mm,
|
||||
|
||||
@@ -597,7 +597,7 @@ int sev_guest_df_flush(int *error);
|
||||
*/
|
||||
int sev_guest_decommission(struct sev_data_decommission *data, int *error);
|
||||
|
||||
void *psp_copy_user_blob(u64 __user uaddr, u32 len);
|
||||
void *psp_copy_user_blob(u64 uaddr, u32 len);
|
||||
|
||||
#else /* !CONFIG_CRYPTO_DEV_SP_PSP */
|
||||
|
||||
|
||||
@@ -221,7 +221,7 @@ struct sctp_datahdr {
|
||||
__be16 stream;
|
||||
__be16 ssn;
|
||||
__u32 ppid;
|
||||
__u8 payload[0];
|
||||
__u8 payload[];
|
||||
};
|
||||
|
||||
struct sctp_data_chunk {
|
||||
@@ -269,7 +269,7 @@ struct sctp_inithdr {
|
||||
__be16 num_outbound_streams;
|
||||
__be16 num_inbound_streams;
|
||||
__be32 initial_tsn;
|
||||
__u8 params[0];
|
||||
__u8 params[];
|
||||
};
|
||||
|
||||
struct sctp_init_chunk {
|
||||
@@ -299,13 +299,13 @@ struct sctp_cookie_preserve_param {
|
||||
/* Section 3.3.2.1 Host Name Address (11) */
|
||||
struct sctp_hostname_param {
|
||||
struct sctp_paramhdr param_hdr;
|
||||
uint8_t hostname[0];
|
||||
uint8_t hostname[];
|
||||
};
|
||||
|
||||
/* Section 3.3.2.1 Supported Address Types (12) */
|
||||
struct sctp_supported_addrs_param {
|
||||
struct sctp_paramhdr param_hdr;
|
||||
__be16 types[0];
|
||||
__be16 types[];
|
||||
};
|
||||
|
||||
/* ADDIP Section 3.2.6 Adaptation Layer Indication */
|
||||
@@ -317,25 +317,25 @@ struct sctp_adaptation_ind_param {
|
||||
/* ADDIP Section 4.2.7 Supported Extensions Parameter */
|
||||
struct sctp_supported_ext_param {
|
||||
struct sctp_paramhdr param_hdr;
|
||||
__u8 chunks[0];
|
||||
__u8 chunks[];
|
||||
};
|
||||
|
||||
/* AUTH Section 3.1 Random */
|
||||
struct sctp_random_param {
|
||||
struct sctp_paramhdr param_hdr;
|
||||
__u8 random_val[0];
|
||||
__u8 random_val[];
|
||||
};
|
||||
|
||||
/* AUTH Section 3.2 Chunk List */
|
||||
struct sctp_chunks_param {
|
||||
struct sctp_paramhdr param_hdr;
|
||||
__u8 chunks[0];
|
||||
__u8 chunks[];
|
||||
};
|
||||
|
||||
/* AUTH Section 3.3 HMAC Algorithm */
|
||||
struct sctp_hmac_algo_param {
|
||||
struct sctp_paramhdr param_hdr;
|
||||
__be16 hmac_ids[0];
|
||||
__be16 hmac_ids[];
|
||||
};
|
||||
|
||||
/* RFC 2960. Section 3.3.3 Initiation Acknowledgement (INIT ACK) (2):
|
||||
@@ -350,7 +350,7 @@ struct sctp_initack_chunk {
|
||||
/* Section 3.3.3.1 State Cookie (7) */
|
||||
struct sctp_cookie_param {
|
||||
struct sctp_paramhdr p;
|
||||
__u8 body[0];
|
||||
__u8 body[];
|
||||
};
|
||||
|
||||
/* Section 3.3.3.1 Unrecognized Parameters (8) */
|
||||
@@ -384,7 +384,7 @@ struct sctp_sackhdr {
|
||||
__be32 a_rwnd;
|
||||
__be16 num_gap_ack_blocks;
|
||||
__be16 num_dup_tsns;
|
||||
union sctp_sack_variable variable[0];
|
||||
union sctp_sack_variable variable[];
|
||||
};
|
||||
|
||||
struct sctp_sack_chunk {
|
||||
@@ -436,7 +436,7 @@ struct sctp_shutdown_chunk {
|
||||
struct sctp_errhdr {
|
||||
__be16 cause;
|
||||
__be16 length;
|
||||
__u8 variable[0];
|
||||
__u8 variable[];
|
||||
};
|
||||
|
||||
struct sctp_operr_chunk {
|
||||
@@ -594,7 +594,7 @@ struct sctp_fwdtsn_skip {
|
||||
|
||||
struct sctp_fwdtsn_hdr {
|
||||
__be32 new_cum_tsn;
|
||||
struct sctp_fwdtsn_skip skip[0];
|
||||
struct sctp_fwdtsn_skip skip[];
|
||||
};
|
||||
|
||||
struct sctp_fwdtsn_chunk {
|
||||
@@ -611,7 +611,7 @@ struct sctp_ifwdtsn_skip {
|
||||
|
||||
struct sctp_ifwdtsn_hdr {
|
||||
__be32 new_cum_tsn;
|
||||
struct sctp_ifwdtsn_skip skip[0];
|
||||
struct sctp_ifwdtsn_skip skip[];
|
||||
};
|
||||
|
||||
struct sctp_ifwdtsn_chunk {
|
||||
@@ -658,7 +658,7 @@ struct sctp_addip_param {
|
||||
|
||||
struct sctp_addiphdr {
|
||||
__be32 serial;
|
||||
__u8 params[0];
|
||||
__u8 params[];
|
||||
};
|
||||
|
||||
struct sctp_addip_chunk {
|
||||
@@ -718,7 +718,7 @@ struct sctp_addip_chunk {
|
||||
struct sctp_authhdr {
|
||||
__be16 shkey_id;
|
||||
__be16 hmac_id;
|
||||
__u8 hmac[0];
|
||||
__u8 hmac[];
|
||||
};
|
||||
|
||||
struct sctp_auth_chunk {
|
||||
@@ -733,7 +733,7 @@ struct sctp_infox {
|
||||
|
||||
struct sctp_reconf_chunk {
|
||||
struct sctp_chunkhdr chunk_hdr;
|
||||
__u8 params[0];
|
||||
__u8 params[];
|
||||
};
|
||||
|
||||
struct sctp_strreset_outreq {
|
||||
@@ -741,13 +741,13 @@ struct sctp_strreset_outreq {
|
||||
__be32 request_seq;
|
||||
__be32 response_seq;
|
||||
__be32 send_reset_at_tsn;
|
||||
__be16 list_of_streams[0];
|
||||
__be16 list_of_streams[];
|
||||
};
|
||||
|
||||
struct sctp_strreset_inreq {
|
||||
struct sctp_paramhdr param_hdr;
|
||||
__be32 request_seq;
|
||||
__be16 list_of_streams[0];
|
||||
__be16 list_of_streams[];
|
||||
};
|
||||
|
||||
struct sctp_strreset_tsnreq {
|
||||
|
||||
@@ -124,7 +124,7 @@ struct tifm_adapter {
|
||||
int (*has_ms_pif)(struct tifm_adapter *fm,
|
||||
struct tifm_dev *sock);
|
||||
|
||||
struct tifm_dev *sockets[0];
|
||||
struct tifm_dev *sockets[];
|
||||
};
|
||||
|
||||
struct tifm_adapter *tifm_alloc_adapter(unsigned int num_sockets,
|
||||
|
||||
@@ -301,13 +301,14 @@ copy_struct_from_user(void *dst, size_t ksize, const void __user *src,
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool probe_kernel_read_allowed(const void *unsafe_src, size_t size);
|
||||
bool copy_from_kernel_nofault_allowed(const void *unsafe_src, size_t size);
|
||||
|
||||
extern long probe_kernel_read(void *dst, const void *src, size_t size);
|
||||
extern long probe_user_read(void *dst, const void __user *src, size_t size);
|
||||
long copy_from_kernel_nofault(void *dst, const void *src, size_t size);
|
||||
long notrace copy_to_kernel_nofault(void *dst, const void *src, size_t size);
|
||||
|
||||
extern long notrace probe_kernel_write(void *dst, const void *src, size_t size);
|
||||
extern long notrace probe_user_write(void __user *dst, const void *src, size_t size);
|
||||
long copy_from_user_nofault(void *dst, const void __user *src, size_t size);
|
||||
long notrace copy_to_user_nofault(void __user *dst, const void *src,
|
||||
size_t size);
|
||||
|
||||
long strncpy_from_kernel_nofault(char *dst, const void *unsafe_addr,
|
||||
long count);
|
||||
@@ -317,14 +318,16 @@ long strncpy_from_user_nofault(char *dst, const void __user *unsafe_addr,
|
||||
long strnlen_user_nofault(const void __user *unsafe_addr, long count);
|
||||
|
||||
/**
|
||||
* probe_kernel_address(): safely attempt to read from a location
|
||||
* @addr: address to read from
|
||||
* @retval: read into this variable
|
||||
* get_kernel_nofault(): safely attempt to read from a location
|
||||
* @val: read into this variable
|
||||
* @ptr: address to read from
|
||||
*
|
||||
* Returns 0 on success, or -EFAULT.
|
||||
*/
|
||||
#define probe_kernel_address(addr, retval) \
|
||||
probe_kernel_read(&retval, addr, sizeof(retval))
|
||||
#define get_kernel_nofault(val, ptr) ({ \
|
||||
const typeof(val) *__gk_ptr = (ptr); \
|
||||
copy_from_kernel_nofault(&(val), __gk_ptr, sizeof(val));\
|
||||
})
|
||||
|
||||
#ifndef user_access_begin
|
||||
#define user_access_begin(ptr,len) access_ok(ptr, len)
|
||||
|
||||
@@ -161,10 +161,51 @@ struct nf_flow_route {
|
||||
struct flow_offload *flow_offload_alloc(struct nf_conn *ct);
|
||||
void flow_offload_free(struct flow_offload *flow);
|
||||
|
||||
int nf_flow_table_offload_add_cb(struct nf_flowtable *flow_table,
|
||||
flow_setup_cb_t *cb, void *cb_priv);
|
||||
void nf_flow_table_offload_del_cb(struct nf_flowtable *flow_table,
|
||||
flow_setup_cb_t *cb, void *cb_priv);
|
||||
static inline int
|
||||
nf_flow_table_offload_add_cb(struct nf_flowtable *flow_table,
|
||||
flow_setup_cb_t *cb, void *cb_priv)
|
||||
{
|
||||
struct flow_block *block = &flow_table->flow_block;
|
||||
struct flow_block_cb *block_cb;
|
||||
int err = 0;
|
||||
|
||||
down_write(&flow_table->flow_block_lock);
|
||||
block_cb = flow_block_cb_lookup(block, cb, cb_priv);
|
||||
if (block_cb) {
|
||||
err = -EEXIST;
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
block_cb = flow_block_cb_alloc(cb, cb_priv, cb_priv, NULL);
|
||||
if (IS_ERR(block_cb)) {
|
||||
err = PTR_ERR(block_cb);
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
list_add_tail(&block_cb->list, &block->cb_list);
|
||||
|
||||
unlock:
|
||||
up_write(&flow_table->flow_block_lock);
|
||||
return err;
|
||||
}
|
||||
|
||||
static inline void
|
||||
nf_flow_table_offload_del_cb(struct nf_flowtable *flow_table,
|
||||
flow_setup_cb_t *cb, void *cb_priv)
|
||||
{
|
||||
struct flow_block *block = &flow_table->flow_block;
|
||||
struct flow_block_cb *block_cb;
|
||||
|
||||
down_write(&flow_table->flow_block_lock);
|
||||
block_cb = flow_block_cb_lookup(block, cb, cb_priv);
|
||||
if (block_cb) {
|
||||
list_del(&block_cb->list);
|
||||
flow_block_cb_free(block_cb);
|
||||
} else {
|
||||
WARN_ON(true);
|
||||
}
|
||||
up_write(&flow_table->flow_block_lock);
|
||||
}
|
||||
|
||||
int flow_offload_route_init(struct flow_offload *flow,
|
||||
const struct nf_flow_route *route);
|
||||
|
||||
@@ -66,7 +66,16 @@ static inline struct nf_flowtable *tcf_ct_ft(const struct tc_action *a)
|
||||
#endif /* CONFIG_NF_CONNTRACK */
|
||||
|
||||
#if IS_ENABLED(CONFIG_NET_ACT_CT)
|
||||
void tcf_ct_flow_table_restore_skb(struct sk_buff *skb, unsigned long cookie);
|
||||
static inline void
|
||||
tcf_ct_flow_table_restore_skb(struct sk_buff *skb, unsigned long cookie)
|
||||
{
|
||||
enum ip_conntrack_info ctinfo = cookie & NFCT_INFOMASK;
|
||||
struct nf_conn *ct;
|
||||
|
||||
ct = (struct nf_conn *)(cookie & NFCT_PTRMASK);
|
||||
nf_conntrack_get(&ct->ct_general);
|
||||
nf_ct_set(skb, ct, ctinfo);
|
||||
}
|
||||
#else
|
||||
static inline void
|
||||
tcf_ct_flow_table_restore_skb(struct sk_buff *skb, unsigned long cookie) { }
|
||||
|
||||
@@ -254,7 +254,6 @@ TRACE_EVENT(block_bio_bounce,
|
||||
* block_bio_complete - completed all work on the block operation
|
||||
* @q: queue holding the block operation
|
||||
* @bio: block operation completed
|
||||
* @error: io error value
|
||||
*
|
||||
* This tracepoint indicates there is no further work to do on this
|
||||
* block IO operation @bio.
|
||||
|
||||
@@ -262,6 +262,7 @@ struct fsxattr {
|
||||
#define FS_EA_INODE_FL 0x00200000 /* Inode used for large EA */
|
||||
#define FS_EOFBLOCKS_FL 0x00400000 /* Reserved for ext4 */
|
||||
#define FS_NOCOW_FL 0x00800000 /* Do not cow file */
|
||||
#define FS_DAX_FL 0x02000000 /* Inode is DAX */
|
||||
#define FS_INLINE_DATA_FL 0x10000000 /* Reserved for ext4 */
|
||||
#define FS_PROJINHERIT_FL 0x20000000 /* Create with parents projid */
|
||||
#define FS_CASEFOLD_FL 0x40000000 /* Folder is case insensitive */
|
||||
|
||||
@@ -244,6 +244,7 @@ struct nd_cmd_pkg {
|
||||
#define NVDIMM_FAMILY_HPE2 2
|
||||
#define NVDIMM_FAMILY_MSFT 3
|
||||
#define NVDIMM_FAMILY_HYPERV 4
|
||||
#define NVDIMM_FAMILY_PAPR 5
|
||||
|
||||
#define ND_IOCTL_CALL _IOWR(ND_IOCTL, ND_CMD_CALL,\
|
||||
struct nd_cmd_pkg)
|
||||
|
||||
@@ -48,6 +48,10 @@
|
||||
#define SPI_TX_QUAD 0x200
|
||||
#define SPI_RX_DUAL 0x400
|
||||
#define SPI_RX_QUAD 0x800
|
||||
#define SPI_CS_WORD 0x1000
|
||||
#define SPI_TX_OCTAL 0x2000
|
||||
#define SPI_RX_OCTAL 0x4000
|
||||
#define SPI_3WIRE_HIZ 0x8000
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
|
||||
Copyright (c) 2001-2002 Silicon Graphics, Inc. All Rights Reserved.
|
||||
Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
|
||||
Copyright (c) 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
*/
|
||||
|
||||
#include <linux/libc-compat.h>
|
||||
@@ -31,6 +32,9 @@
|
||||
#define XATTR_BTRFS_PREFIX "btrfs."
|
||||
#define XATTR_BTRFS_PREFIX_LEN (sizeof(XATTR_BTRFS_PREFIX) - 1)
|
||||
|
||||
#define XATTR_HURD_PREFIX "gnu."
|
||||
#define XATTR_HURD_PREFIX_LEN (sizeof(XATTR_HURD_PREFIX) - 1)
|
||||
|
||||
#define XATTR_SECURITY_PREFIX "security."
|
||||
#define XATTR_SECURITY_PREFIX_LEN (sizeof(XATTR_SECURITY_PREFIX) - 1)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user