mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-23 13:09:04 -04:00
Linux 4.13-rc7
-----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJZo2HiAAoJEHm+PkMAQRiG3OcIAJqSeVK2uQ/QhmqFN1ExYay4 bdTjSTtSk7GH6PxI2C0cqfZvsxOUU7ICDHG8bYM1LA0S0SxfOtoFhHGKc/BcFLX8 MiKJWlF51ZbX0mkIEpKF+C8pRrXPgSqtk3N450/k2BzG9qCZSM93A2NCOB7v9T9w XOBUIYHqfTS2tdmCinjwu8Ls+w8oPOGH1gLjxZyGnBlg4lTqHMcUufmHeVEAh11d giGByqqqXH69kGD1HNC7H6quzXN9rz4n0gEwEG0mIhfkJ98b+ESSWwSEXXypOAQD QT5/6+2YizXf5DPCqR46xasQCPjRsS6Sv0cF2cntW2PEAb4jBjhx5gTFlJcoOC8= =efWJ -----END PGP SIGNATURE----- Merge tag 'v4.13-rc7' into mtd/next Merge v4.13-rc7 back to resolve merge conflicts in drivers/mtd/nand/nandsim.c and include/asm-generic/vmlinux.lds.h.
This commit is contained in:
commit
5ffa70b2a3
1585 changed files with 28964 additions and 24116 deletions
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#ifdef CONFIG_ACPI_NUMA
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/numa.h>
|
||||
|
||||
/* Proximity bitmap length */
|
||||
#if MAX_NUMNODES > 256
|
||||
|
|
|
|||
|
|
@ -112,10 +112,11 @@ struct mmu_gather {
|
|||
|
||||
#define HAVE_GENERIC_MMU_GATHER
|
||||
|
||||
void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long start, unsigned long end);
|
||||
void arch_tlb_gather_mmu(struct mmu_gather *tlb,
|
||||
struct mm_struct *mm, unsigned long start, unsigned long end);
|
||||
void tlb_flush_mmu(struct mmu_gather *tlb);
|
||||
void tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start,
|
||||
unsigned long end);
|
||||
void arch_tlb_finish_mmu(struct mmu_gather *tlb,
|
||||
unsigned long start, unsigned long end, bool force);
|
||||
extern bool __tlb_remove_page_size(struct mmu_gather *tlb, struct page *page,
|
||||
int page_size);
|
||||
|
||||
|
|
|
|||
|
|
@ -59,6 +59,22 @@
|
|||
/* Align . to a 8 byte boundary equals to maximum function alignment. */
|
||||
#define ALIGN_FUNCTION() . = ALIGN(8)
|
||||
|
||||
/*
|
||||
* LD_DEAD_CODE_DATA_ELIMINATION option enables -fdata-sections, which
|
||||
* generates .data.identifier sections, which need to be pulled in with
|
||||
* .data. We don't want to pull in .data..other sections, which Linux
|
||||
* has defined. Same for text and bss.
|
||||
*/
|
||||
#ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
|
||||
#define TEXT_MAIN .text .text.[0-9a-zA-Z_]*
|
||||
#define DATA_MAIN .data .data.[0-9a-zA-Z_]*
|
||||
#define BSS_MAIN .bss .bss.[0-9a-zA-Z_]*
|
||||
#else
|
||||
#define TEXT_MAIN .text
|
||||
#define DATA_MAIN .data
|
||||
#define BSS_MAIN .bss
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Align to a 32 byte boundary equal to the
|
||||
* alignment gcc 4.5 uses for a struct
|
||||
|
|
@ -198,13 +214,10 @@
|
|||
|
||||
/*
|
||||
* .data section
|
||||
* LD_DEAD_CODE_DATA_ELIMINATION option enables -fdata-sections generates
|
||||
* .data.identifier which needs to be pulled in with .data, but don't want to
|
||||
* pull in .data..stuff which has its own requirements. Same for bss.
|
||||
*/
|
||||
#define DATA_DATA \
|
||||
*(.xiptext) \
|
||||
*(.data .data.[0-9a-zA-Z_]*) \
|
||||
*(DATA_MAIN) \
|
||||
*(.ref.data) \
|
||||
*(.data..shared_aligned) /* percpu related */ \
|
||||
MEM_KEEP(init.data) \
|
||||
|
|
@ -435,16 +448,17 @@
|
|||
VMLINUX_SYMBOL(__security_initcall_end) = .; \
|
||||
}
|
||||
|
||||
/* .text section. Map to function alignment to avoid address changes
|
||||
/*
|
||||
* .text section. Map to function alignment to avoid address changes
|
||||
* during second ld run in second ld pass when generating System.map
|
||||
* LD_DEAD_CODE_DATA_ELIMINATION option enables -ffunction-sections generates
|
||||
* .text.identifier which needs to be pulled in with .text , but some
|
||||
* architectures define .text.foo which is not intended to be pulled in here.
|
||||
* Those enabling LD_DEAD_CODE_DATA_ELIMINATION must ensure they don't have
|
||||
* conflicting section names, and must pull in .text.[0-9a-zA-Z_]* */
|
||||
*
|
||||
* TEXT_MAIN here will match .text.fixup and .text.unlikely if dead
|
||||
* code elimination is enabled, so these sections should be converted
|
||||
* to use ".." first.
|
||||
*/
|
||||
#define TEXT_TEXT \
|
||||
ALIGN_FUNCTION(); \
|
||||
*(.text.hot .text .text.fixup .text.unlikely) \
|
||||
*(.text.hot TEXT_MAIN .text.fixup .text.unlikely) \
|
||||
*(.ref.text) \
|
||||
MEM_KEEP(init.text) \
|
||||
MEM_KEEP(exit.text) \
|
||||
|
|
@ -614,7 +628,7 @@
|
|||
BSS_FIRST_SECTIONS \
|
||||
*(.bss..page_aligned) \
|
||||
*(.dynbss) \
|
||||
*(.bss .bss.[0-9a-zA-Z_]*) \
|
||||
*(BSS_MAIN) \
|
||||
*(COMMON) \
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@ void kvm_pmu_vcpu_reset(struct kvm_vcpu *vcpu);
|
|||
void kvm_pmu_vcpu_destroy(struct kvm_vcpu *vcpu);
|
||||
void kvm_pmu_disable_counter(struct kvm_vcpu *vcpu, u64 val);
|
||||
void kvm_pmu_enable_counter(struct kvm_vcpu *vcpu, u64 val);
|
||||
void kvm_pmu_overflow_set(struct kvm_vcpu *vcpu, u64 val);
|
||||
void kvm_pmu_flush_hwstate(struct kvm_vcpu *vcpu);
|
||||
void kvm_pmu_sync_hwstate(struct kvm_vcpu *vcpu);
|
||||
bool kvm_pmu_should_notify_user(struct kvm_vcpu *vcpu);
|
||||
|
|
@ -86,7 +85,6 @@ static inline void kvm_pmu_vcpu_reset(struct kvm_vcpu *vcpu) {}
|
|||
static inline void kvm_pmu_vcpu_destroy(struct kvm_vcpu *vcpu) {}
|
||||
static inline void kvm_pmu_disable_counter(struct kvm_vcpu *vcpu, u64 val) {}
|
||||
static inline void kvm_pmu_enable_counter(struct kvm_vcpu *vcpu, u64 val) {}
|
||||
static inline void kvm_pmu_overflow_set(struct kvm_vcpu *vcpu, u64 val) {}
|
||||
static inline void kvm_pmu_flush_hwstate(struct kvm_vcpu *vcpu) {}
|
||||
static inline void kvm_pmu_sync_hwstate(struct kvm_vcpu *vcpu) {}
|
||||
static inline bool kvm_pmu_should_notify_user(struct kvm_vcpu *vcpu)
|
||||
|
|
|
|||
|
|
@ -1209,6 +1209,7 @@ static inline bool acpi_has_watchdog(void) { return false; }
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_ACPI_SPCR_TABLE
|
||||
extern bool qdf2400_e44_present;
|
||||
int parse_spcr(bool earlycon);
|
||||
#else
|
||||
static inline int parse_spcr(bool earlycon) { return 0; }
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ struct linux_binprm {
|
|||
unsigned interp_flags;
|
||||
unsigned interp_data;
|
||||
unsigned long loader, exec;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
#define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0
|
||||
#define BINPRM_FLAGS_ENFORCE_NONDUMP (1 << BINPRM_FLAGS_ENFORCE_NONDUMP_BIT)
|
||||
|
|
@ -81,7 +81,7 @@ struct linux_binfmt {
|
|||
int (*load_shlib)(struct file *);
|
||||
int (*core_dump)(struct coredump_params *cprm);
|
||||
unsigned long min_coredump; /* minimal dump size */
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
extern void __register_binfmt(struct linux_binfmt *fmt, int insert);
|
||||
|
||||
|
|
|
|||
|
|
@ -568,7 +568,6 @@ struct request_queue {
|
|||
|
||||
#if defined(CONFIG_BLK_DEV_BSG)
|
||||
bsg_job_fn *bsg_job_fn;
|
||||
int bsg_job_size;
|
||||
struct bsg_class_device bsg_dev;
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ int __cgroup_bpf_run_filter_sock_ops(struct sock *sk,
|
|||
int __ret = 0; \
|
||||
if (cgroup_bpf_enabled && (sock_ops)->sk) { \
|
||||
typeof(sk) __sk = sk_to_full_sk((sock_ops)->sk); \
|
||||
if (sk_fullsock(__sk)) \
|
||||
if (__sk && sk_fullsock(__sk)) \
|
||||
__ret = __cgroup_bpf_run_filter_sock_ops(__sk, \
|
||||
sock_ops, \
|
||||
BPF_CGROUP_SOCK_OPS); \
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ struct bpf_reg_state {
|
|||
u32 min_align;
|
||||
u32 aux_off;
|
||||
u32 aux_off_align;
|
||||
bool value_from_signed;
|
||||
};
|
||||
|
||||
enum bpf_stack_slot_type {
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#define _BLK_BSG_
|
||||
|
||||
#include <linux/blkdev.h>
|
||||
#include <scsi/scsi_request.h>
|
||||
|
||||
struct request;
|
||||
struct device;
|
||||
|
|
@ -37,6 +38,7 @@ struct bsg_buffer {
|
|||
};
|
||||
|
||||
struct bsg_job {
|
||||
struct scsi_request sreq;
|
||||
struct device *dev;
|
||||
struct request *req;
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ struct cdev {
|
|||
struct list_head list;
|
||||
dev_t dev;
|
||||
unsigned int count;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
void cdev_init(struct cdev *, const struct file_operations *);
|
||||
|
||||
|
|
|
|||
|
|
@ -10,14 +10,14 @@
|
|||
#define CEPH_FEATURE_INCARNATION_2 (1ull<<57) // CEPH_FEATURE_SERVER_JEWEL
|
||||
|
||||
#define DEFINE_CEPH_FEATURE(bit, incarnation, name) \
|
||||
const static uint64_t CEPH_FEATURE_##name = (1ULL<<bit); \
|
||||
const static uint64_t CEPH_FEATUREMASK_##name = \
|
||||
static const uint64_t CEPH_FEATURE_##name = (1ULL<<bit); \
|
||||
static const uint64_t CEPH_FEATUREMASK_##name = \
|
||||
(1ULL<<bit | CEPH_FEATURE_INCARNATION_##incarnation);
|
||||
|
||||
/* this bit is ignored but still advertised by release *when* */
|
||||
#define DEFINE_CEPH_FEATURE_DEPRECATED(bit, incarnation, name, when) \
|
||||
const static uint64_t DEPRECATED_CEPH_FEATURE_##name = (1ULL<<bit); \
|
||||
const static uint64_t DEPRECATED_CEPH_FEATUREMASK_##name = \
|
||||
static const uint64_t DEPRECATED_CEPH_FEATURE_##name = (1ULL<<bit); \
|
||||
static const uint64_t DEPRECATED_CEPH_FEATUREMASK_##name = \
|
||||
(1ULL<<bit | CEPH_FEATURE_INCARNATION_##incarnation);
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -148,6 +148,7 @@ struct ceph_osd_request_target {
|
|||
int size;
|
||||
int min_size;
|
||||
bool sort_bitwise;
|
||||
bool recovery_deletes;
|
||||
|
||||
unsigned int flags; /* CEPH_OSD_FLAG_* */
|
||||
bool paused;
|
||||
|
|
|
|||
|
|
@ -272,6 +272,8 @@ bool ceph_is_new_interval(const struct ceph_osds *old_acting,
|
|||
u32 new_pg_num,
|
||||
bool old_sort_bitwise,
|
||||
bool new_sort_bitwise,
|
||||
bool old_recovery_deletes,
|
||||
bool new_recovery_deletes,
|
||||
const struct ceph_pg *pgid);
|
||||
bool ceph_osds_changed(const struct ceph_osds *old_acting,
|
||||
const struct ceph_osds *new_acting,
|
||||
|
|
|
|||
|
|
@ -158,6 +158,10 @@ extern const char *ceph_osd_state_name(int s);
|
|||
#define CEPH_OSDMAP_NOTIERAGENT (1<<13) /* disable tiering agent */
|
||||
#define CEPH_OSDMAP_NOREBALANCE (1<<14) /* block osd backfill unless pg is degraded */
|
||||
#define CEPH_OSDMAP_SORTBITWISE (1<<15) /* use bitwise hobject_t sort */
|
||||
#define CEPH_OSDMAP_REQUIRE_JEWEL (1<<16) /* require jewel for booting osds */
|
||||
#define CEPH_OSDMAP_REQUIRE_KRAKEN (1<<17) /* require kraken for booting osds */
|
||||
#define CEPH_OSDMAP_REQUIRE_LUMINOUS (1<<18) /* require l for booting osds */
|
||||
#define CEPH_OSDMAP_RECOVERY_DELETES (1<<19) /* deletes performed during recovery instead of peering */
|
||||
|
||||
/*
|
||||
* The error code to return when an OSD can't handle a write
|
||||
|
|
|
|||
|
|
@ -235,6 +235,7 @@
|
|||
#endif /* GCC_VERSION >= 40500 */
|
||||
|
||||
#if GCC_VERSION >= 40600
|
||||
|
||||
/*
|
||||
* When used with Link Time Optimization, gcc can optimize away C functions or
|
||||
* variables which are referenced only from assembly code. __visible tells the
|
||||
|
|
@ -242,7 +243,17 @@
|
|||
* this.
|
||||
*/
|
||||
#define __visible __attribute__((externally_visible))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* RANDSTRUCT_PLUGIN wants to use an anonymous struct, but it is only
|
||||
* possible since GCC 4.6. To provide as much build testing coverage
|
||||
* as possible, this is used for all GCC 4.6+ builds, and not just on
|
||||
* RANDSTRUCT_PLUGIN builds.
|
||||
*/
|
||||
#define randomized_struct_fields_start struct {
|
||||
#define randomized_struct_fields_end } __randomize_layout;
|
||||
|
||||
#endif /* GCC_VERSION >= 40600 */
|
||||
|
||||
|
||||
#if GCC_VERSION >= 40900 && !defined(__CHECKER__)
|
||||
|
|
|
|||
|
|
@ -452,6 +452,11 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
|
|||
# define __no_randomize_layout
|
||||
#endif
|
||||
|
||||
#ifndef randomized_struct_fields_start
|
||||
# define randomized_struct_fields_start
|
||||
# define randomized_struct_fields_end
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Tell gcc if a function is cold. The compiler will assume any path
|
||||
* directly leading to the call is unlikely.
|
||||
|
|
|
|||
|
|
@ -39,8 +39,6 @@ enum cpuhp_state {
|
|||
CPUHP_PCI_XGENE_DEAD,
|
||||
CPUHP_IOMMU_INTEL_DEAD,
|
||||
CPUHP_LUSTRE_CFS_DEAD,
|
||||
CPUHP_SCSI_BNX2FC_DEAD,
|
||||
CPUHP_SCSI_BNX2I_DEAD,
|
||||
CPUHP_WORKQUEUE_PREP,
|
||||
CPUHP_POWER_NUMA_PREPARE,
|
||||
CPUHP_HRTIMERS_PREPARE,
|
||||
|
|
|
|||
|
|
@ -18,6 +18,19 @@
|
|||
|
||||
#ifdef CONFIG_CPUSETS
|
||||
|
||||
/*
|
||||
* Static branch rewrites can happen in an arbitrary order for a given
|
||||
* key. In code paths where we need to loop with read_mems_allowed_begin() and
|
||||
* read_mems_allowed_retry() to get a consistent view of mems_allowed, we need
|
||||
* to ensure that begin() always gets rewritten before retry() in the
|
||||
* disabled -> enabled transition. If not, then if local irqs are disabled
|
||||
* around the loop, we can deadlock since retry() would always be
|
||||
* comparing the latest value of the mems_allowed seqcount against 0 as
|
||||
* begin() still would see cpusets_enabled() as false. The enabled -> disabled
|
||||
* transition should happen in reverse order for the same reasons (want to stop
|
||||
* looking at real value of mems_allowed.sequence in retry() first).
|
||||
*/
|
||||
extern struct static_key_false cpusets_pre_enable_key;
|
||||
extern struct static_key_false cpusets_enabled_key;
|
||||
static inline bool cpusets_enabled(void)
|
||||
{
|
||||
|
|
@ -32,12 +45,14 @@ static inline int nr_cpusets(void)
|
|||
|
||||
static inline void cpuset_inc(void)
|
||||
{
|
||||
static_branch_inc(&cpusets_pre_enable_key);
|
||||
static_branch_inc(&cpusets_enabled_key);
|
||||
}
|
||||
|
||||
static inline void cpuset_dec(void)
|
||||
{
|
||||
static_branch_dec(&cpusets_enabled_key);
|
||||
static_branch_dec(&cpusets_pre_enable_key);
|
||||
}
|
||||
|
||||
extern int cpuset_init(void);
|
||||
|
|
@ -115,7 +130,7 @@ extern void cpuset_print_current_mems_allowed(void);
|
|||
*/
|
||||
static inline unsigned int read_mems_allowed_begin(void)
|
||||
{
|
||||
if (!cpusets_enabled())
|
||||
if (!static_branch_unlikely(&cpusets_pre_enable_key))
|
||||
return 0;
|
||||
|
||||
return read_seqcount_begin(¤t->mems_allowed_seq);
|
||||
|
|
@ -129,7 +144,7 @@ static inline unsigned int read_mems_allowed_begin(void)
|
|||
*/
|
||||
static inline bool read_mems_allowed_retry(unsigned int seq)
|
||||
{
|
||||
if (!cpusets_enabled())
|
||||
if (!static_branch_unlikely(&cpusets_enabled_key))
|
||||
return false;
|
||||
|
||||
return read_seqcount_retry(¤t->mems_allowed_seq, seq);
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ struct group_info {
|
|||
atomic_t usage;
|
||||
int ngroups;
|
||||
kgid_t gid[0];
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
/**
|
||||
* get_group_info - Get a reference to a group info structure
|
||||
|
|
@ -145,7 +145,7 @@ struct cred {
|
|||
struct user_namespace *user_ns; /* user_ns the caps and keyrings are relative to. */
|
||||
struct group_info *group_info; /* supplementary groups for euid/fsgid */
|
||||
struct rcu_head rcu; /* RCU deletion hook */
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
extern void __put_cred(struct cred *);
|
||||
extern void exit_creds(struct task_struct *);
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ struct crush_choose_arg {
|
|||
struct crush_choose_arg_map {
|
||||
#ifdef __KERNEL__
|
||||
struct rb_node node;
|
||||
u64 choose_args_index;
|
||||
s64 choose_args_index;
|
||||
#endif
|
||||
struct crush_choose_arg *args; /*!< replacement for each bucket
|
||||
in the crushmap */
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ size_t dax_copy_from_iter(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
|
|||
void dax_flush(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
|
||||
size_t size);
|
||||
void dax_write_cache(struct dax_device *dax_dev, bool wc);
|
||||
bool dax_write_cache_enabled(struct dax_device *dax_dev);
|
||||
|
||||
/*
|
||||
* We use lowest available bit in exceptional entry for locking, one bit for
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ struct dentry {
|
|||
struct hlist_bl_node d_in_lookup_hash; /* only for in-lookup ones */
|
||||
struct rcu_head d_rcu;
|
||||
} d_u;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
/*
|
||||
* dentry->d_lock spinlock nesting subclasses:
|
||||
|
|
|
|||
|
|
@ -843,7 +843,7 @@ struct dev_links_info {
|
|||
* hibernation, system resume and during runtime PM transitions
|
||||
* along with subsystem-level and driver-level callbacks.
|
||||
* @pins: For device pin management.
|
||||
* See Documentation/pinctrl.txt for details.
|
||||
* See Documentation/driver-api/pinctl.rst for details.
|
||||
* @msi_list: Hosts MSI descriptors
|
||||
* @msi_domain: The generic MSI domain this device is using.
|
||||
* @numa_node: NUMA node this device is close to.
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
struct pts_fs_info;
|
||||
|
||||
struct vfsmount *devpts_mntget(struct file *, struct pts_fs_info *);
|
||||
struct pts_fs_info *devpts_acquire(struct file *);
|
||||
void devpts_release(struct pts_fs_info *);
|
||||
|
||||
|
|
@ -32,6 +33,15 @@ void *devpts_get_priv(struct dentry *);
|
|||
/* unlink */
|
||||
void devpts_pty_kill(struct dentry *);
|
||||
|
||||
/* in pty.c */
|
||||
int ptm_open_peer(struct file *master, struct tty_struct *tty, int flags);
|
||||
|
||||
#else
|
||||
static inline int
|
||||
ptm_open_peer(struct file *master, struct tty_struct *tty, int flags)
|
||||
{
|
||||
return -EIO;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ struct dma_fence_cb;
|
|||
* of the time.
|
||||
*
|
||||
* DMA_FENCE_FLAG_SIGNALED_BIT - fence is already signaled
|
||||
* DMA_FENCE_FLAG_TIMESTAMP_BIT - timestamp recorded for fence signaling
|
||||
* DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT - enable_signaling might have been called
|
||||
* DMA_FENCE_FLAG_USER_BITS - start of the unused bits, can be used by the
|
||||
* implementer of the fence for its own purposes. Can be used in different
|
||||
|
|
@ -84,6 +85,7 @@ struct dma_fence {
|
|||
|
||||
enum dma_fence_flag_bits {
|
||||
DMA_FENCE_FLAG_SIGNALED_BIT,
|
||||
DMA_FENCE_FLAG_TIMESTAMP_BIT,
|
||||
DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT,
|
||||
DMA_FENCE_FLAG_USER_BITS, /* must always be last member */
|
||||
};
|
||||
|
|
|
|||
|
|
@ -157,16 +157,40 @@ static inline int is_device_dma_capable(struct device *dev)
|
|||
* These three functions are only for dma allocator.
|
||||
* Don't use them in device drivers.
|
||||
*/
|
||||
int dma_alloc_from_coherent(struct device *dev, ssize_t size,
|
||||
int dma_alloc_from_dev_coherent(struct device *dev, ssize_t size,
|
||||
dma_addr_t *dma_handle, void **ret);
|
||||
int dma_release_from_coherent(struct device *dev, int order, void *vaddr);
|
||||
int dma_release_from_dev_coherent(struct device *dev, int order, void *vaddr);
|
||||
|
||||
int dma_mmap_from_coherent(struct device *dev, struct vm_area_struct *vma,
|
||||
int dma_mmap_from_dev_coherent(struct device *dev, struct vm_area_struct *vma,
|
||||
void *cpu_addr, size_t size, int *ret);
|
||||
|
||||
void *dma_alloc_from_global_coherent(ssize_t size, dma_addr_t *dma_handle);
|
||||
int dma_release_from_global_coherent(int order, void *vaddr);
|
||||
int dma_mmap_from_global_coherent(struct vm_area_struct *vma, void *cpu_addr,
|
||||
size_t size, int *ret);
|
||||
|
||||
#else
|
||||
#define dma_alloc_from_coherent(dev, size, handle, ret) (0)
|
||||
#define dma_release_from_coherent(dev, order, vaddr) (0)
|
||||
#define dma_mmap_from_coherent(dev, vma, vaddr, order, ret) (0)
|
||||
#define dma_alloc_from_dev_coherent(dev, size, handle, ret) (0)
|
||||
#define dma_release_from_dev_coherent(dev, order, vaddr) (0)
|
||||
#define dma_mmap_from_dev_coherent(dev, vma, vaddr, order, ret) (0)
|
||||
|
||||
static inline void *dma_alloc_from_global_coherent(ssize_t size,
|
||||
dma_addr_t *dma_handle)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline int dma_release_from_global_coherent(int order, void *vaddr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int dma_mmap_from_global_coherent(struct vm_area_struct *vma,
|
||||
void *cpu_addr, size_t size,
|
||||
int *ret)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_HAVE_GENERIC_DMA_COHERENT */
|
||||
|
||||
#ifdef CONFIG_HAS_DMA
|
||||
|
|
@ -481,7 +505,7 @@ static inline void *dma_alloc_attrs(struct device *dev, size_t size,
|
|||
|
||||
BUG_ON(!ops);
|
||||
|
||||
if (dma_alloc_from_coherent(dev, size, dma_handle, &cpu_addr))
|
||||
if (dma_alloc_from_dev_coherent(dev, size, dma_handle, &cpu_addr))
|
||||
return cpu_addr;
|
||||
|
||||
if (!arch_dma_alloc_attrs(&dev, &flag))
|
||||
|
|
@ -503,7 +527,7 @@ static inline void dma_free_attrs(struct device *dev, size_t size,
|
|||
BUG_ON(!ops);
|
||||
WARN_ON(irqs_disabled());
|
||||
|
||||
if (dma_release_from_coherent(dev, get_order(size), cpu_addr))
|
||||
if (dma_release_from_dev_coherent(dev, get_order(size), cpu_addr))
|
||||
return;
|
||||
|
||||
if (!ops->free || !cpu_addr)
|
||||
|
|
|
|||
|
|
@ -296,7 +296,7 @@ struct kiocb {
|
|||
void *private;
|
||||
int ki_flags;
|
||||
enum rw_hint ki_hint;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
static inline bool is_sync_kiocb(struct kiocb *kiocb)
|
||||
{
|
||||
|
|
@ -404,7 +404,7 @@ struct address_space {
|
|||
struct list_head private_list; /* ditto */
|
||||
void *private_data; /* ditto */
|
||||
errseq_t wb_err;
|
||||
} __attribute__((aligned(sizeof(long))));
|
||||
} __attribute__((aligned(sizeof(long)))) __randomize_layout;
|
||||
/*
|
||||
* On most architectures that alignment is already the case; but
|
||||
* must be enforced here for CRIS, to let the least significant bit
|
||||
|
|
@ -447,7 +447,7 @@ struct block_device {
|
|||
int bd_fsfreeze_count;
|
||||
/* Mutex for freeze */
|
||||
struct mutex bd_fsfreeze_mutex;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
/*
|
||||
* Radix-tree tags, for tagging dirty and writeback pages within the pagecache
|
||||
|
|
@ -666,7 +666,7 @@ struct inode {
|
|||
#endif
|
||||
|
||||
void *i_private; /* fs or device private pointer */
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
static inline unsigned int i_blocksize(const struct inode *node)
|
||||
{
|
||||
|
|
@ -883,7 +883,8 @@ struct file {
|
|||
#endif /* #ifdef CONFIG_EPOLL */
|
||||
struct address_space *f_mapping;
|
||||
errseq_t f_wb_err;
|
||||
} __attribute__((aligned(4))); /* lest something weird decides that 2 is OK */
|
||||
} __randomize_layout
|
||||
__attribute__((aligned(4))); /* lest something weird decides that 2 is OK */
|
||||
|
||||
struct file_handle {
|
||||
__u32 handle_bytes;
|
||||
|
|
@ -906,9 +907,9 @@ static inline struct file *get_file(struct file *f)
|
|||
/* Page cache limit. The filesystems should put that into their s_maxbytes
|
||||
limits, otherwise bad things can happen in VM. */
|
||||
#if BITS_PER_LONG==32
|
||||
#define MAX_LFS_FILESIZE (((loff_t)PAGE_SIZE << (BITS_PER_LONG-1))-1)
|
||||
#define MAX_LFS_FILESIZE ((loff_t)ULONG_MAX << PAGE_SHIFT)
|
||||
#elif BITS_PER_LONG==64
|
||||
#define MAX_LFS_FILESIZE ((loff_t)0x7fffffffffffffffLL)
|
||||
#define MAX_LFS_FILESIZE ((loff_t)LLONG_MAX)
|
||||
#endif
|
||||
|
||||
#define FL_POSIX 1
|
||||
|
|
@ -1020,7 +1021,7 @@ struct file_lock {
|
|||
int state; /* state of grant or error if -ve */
|
||||
} afs;
|
||||
} fl_u;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
struct file_lock_context {
|
||||
spinlock_t flc_lock;
|
||||
|
|
@ -1412,7 +1413,7 @@ struct super_block {
|
|||
|
||||
spinlock_t s_inode_wblist_lock;
|
||||
struct list_head s_inodes_wb; /* writeback inodes */
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
/* Helper functions so that in most cases filesystems will
|
||||
* not need to deal directly with kuid_t and kgid_t and can
|
||||
|
|
@ -1698,7 +1699,7 @@ struct file_operations {
|
|||
u64);
|
||||
ssize_t (*dedupe_file_range)(struct file *, u64, u64, struct file *,
|
||||
u64);
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
struct inode_operations {
|
||||
struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ struct fs_struct {
|
|||
int umask;
|
||||
int in_exec;
|
||||
struct path root, pwd;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
extern struct kmem_cache *fs_cachep;
|
||||
|
||||
|
|
|
|||
|
|
@ -145,8 +145,8 @@ enum {
|
|||
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||
/* The hash used to know what functions callbacks trace */
|
||||
struct ftrace_ops_hash {
|
||||
struct ftrace_hash *notrace_hash;
|
||||
struct ftrace_hash *filter_hash;
|
||||
struct ftrace_hash __rcu *notrace_hash;
|
||||
struct ftrace_hash __rcu *filter_hash;
|
||||
struct mutex regex_lock;
|
||||
};
|
||||
|
||||
|
|
@ -168,7 +168,7 @@ static inline void ftrace_free_init_mem(void) { }
|
|||
*/
|
||||
struct ftrace_ops {
|
||||
ftrace_func_t func;
|
||||
struct ftrace_ops *next;
|
||||
struct ftrace_ops __rcu *next;
|
||||
unsigned long flags;
|
||||
void *private;
|
||||
ftrace_func_t saved_func;
|
||||
|
|
|
|||
|
|
@ -689,7 +689,8 @@ i2c_unlock_adapter(struct i2c_adapter *adapter)
|
|||
#define I2C_CLASS_HWMON (1<<0) /* lm_sensors, ... */
|
||||
#define I2C_CLASS_DDC (1<<3) /* DDC bus on graphics adapters */
|
||||
#define I2C_CLASS_SPD (1<<7) /* Memory modules */
|
||||
#define I2C_CLASS_DEPRECATED (1<<8) /* Warn users that adapter will stop using classes */
|
||||
/* Warn users that the adapter doesn't support classes anymore */
|
||||
#define I2C_CLASS_DEPRECATED (1<<8)
|
||||
|
||||
/* Internal numbers to terminate lists */
|
||||
#define I2C_CLIENT_END 0xfffeU
|
||||
|
|
|
|||
|
|
@ -105,6 +105,11 @@ struct st_sensor_fullscale {
|
|||
struct st_sensor_fullscale_avl fs_avl[ST_SENSORS_FULLSCALE_AVL_MAX];
|
||||
};
|
||||
|
||||
struct st_sensor_sim {
|
||||
u8 addr;
|
||||
u8 value;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct st_sensor_bdu - ST sensor device block data update
|
||||
* @addr: address of the register.
|
||||
|
|
@ -197,6 +202,7 @@ struct st_sensor_transfer_function {
|
|||
* @bdu: Block data update register.
|
||||
* @das: Data Alignment Selection register.
|
||||
* @drdy_irq: Data ready register of the sensor.
|
||||
* @sim: SPI serial interface mode register of the sensor.
|
||||
* @multi_read_bit: Use or not particular bit for [I2C/SPI] multi-read.
|
||||
* @bootime: samples to discard when sensor passing from power-down to power-up.
|
||||
*/
|
||||
|
|
@ -213,6 +219,7 @@ struct st_sensor_settings {
|
|||
struct st_sensor_bdu bdu;
|
||||
struct st_sensor_das das;
|
||||
struct st_sensor_data_ready_irq drdy_irq;
|
||||
struct st_sensor_sim sim;
|
||||
bool multi_read_bit;
|
||||
unsigned int bootime;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -535,7 +535,7 @@ struct iio_buffer_setup_ops {
|
|||
* @scan_timestamp: [INTERN] set if any buffers have requested timestamp
|
||||
* @scan_index_timestamp:[INTERN] cache of the index to the timestamp
|
||||
* @trig: [INTERN] current device trigger (buffer modes)
|
||||
* @trig_readonly [INTERN] mark the current trigger immutable
|
||||
* @trig_readonly: [INTERN] mark the current trigger immutable
|
||||
* @pollfunc: [DRIVER] function run on trigger being received
|
||||
* @pollfunc_event: [DRIVER] function run on events trigger being received
|
||||
* @channels: [DRIVER] channel specification structure table
|
||||
|
|
|
|||
|
|
@ -144,8 +144,8 @@ void devm_iio_trigger_unregister(struct device *dev,
|
|||
/**
|
||||
* iio_trigger_set_immutable() - set an immutable trigger on destination
|
||||
*
|
||||
* @indio_dev - IIO device structure containing the device
|
||||
* @trig - trigger to assign to device
|
||||
* @indio_dev: IIO device structure containing the device
|
||||
* @trig: trigger to assign to device
|
||||
*
|
||||
**/
|
||||
int iio_trigger_set_immutable(struct iio_dev *indio_dev, struct iio_trigger *trig);
|
||||
|
|
|
|||
|
|
@ -240,7 +240,7 @@ struct iommu_device {
|
|||
struct list_head list;
|
||||
const struct iommu_ops *ops;
|
||||
struct fwnode_handle *fwnode;
|
||||
struct device dev;
|
||||
struct device *dev;
|
||||
};
|
||||
|
||||
int iommu_device_register(struct iommu_device *iommu);
|
||||
|
|
@ -265,6 +265,11 @@ static inline void iommu_device_set_fwnode(struct iommu_device *iommu,
|
|||
iommu->fwnode = fwnode;
|
||||
}
|
||||
|
||||
static inline struct iommu_device *dev_to_iommu_device(struct device *dev)
|
||||
{
|
||||
return (struct iommu_device *)dev_get_drvdata(dev);
|
||||
}
|
||||
|
||||
#define IOMMU_GROUP_NOTIFY_ADD_DEVICE 1 /* Device added */
|
||||
#define IOMMU_GROUP_NOTIFY_DEL_DEVICE 2 /* Pre Device removed */
|
||||
#define IOMMU_GROUP_NOTIFY_BIND_DRIVER 3 /* Pre Driver bind */
|
||||
|
|
@ -589,6 +594,11 @@ static inline void iommu_device_set_fwnode(struct iommu_device *iommu,
|
|||
{
|
||||
}
|
||||
|
||||
static inline struct iommu_device *dev_to_iommu_device(struct device *dev)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void iommu_device_unregister(struct iommu_device *iommu)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,6 @@ struct kern_ipc_perm {
|
|||
|
||||
struct rcu_head rcu;
|
||||
atomic_t refcount;
|
||||
} ____cacheline_aligned_in_smp;
|
||||
} ____cacheline_aligned_in_smp __randomize_layout;
|
||||
|
||||
#endif /* _LINUX_IPC_H */
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ struct ipc_namespace {
|
|||
struct ucounts *ucounts;
|
||||
|
||||
struct ns_common ns;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
extern struct ipc_namespace init_ipc_ns;
|
||||
extern spinlock_t mq_lock;
|
||||
|
|
|
|||
|
|
@ -128,6 +128,7 @@ struct inet6_skb_parm {
|
|||
#define IP6SKB_FRAGMENTED 16
|
||||
#define IP6SKB_HOPBYHOP 32
|
||||
#define IP6SKB_L3SLAVE 64
|
||||
#define IP6SKB_JUMBOGRAM 128
|
||||
};
|
||||
|
||||
#if defined(CONFIG_NET_L3_MASTER_DEV)
|
||||
|
|
@ -152,6 +153,11 @@ static inline int inet6_iif(const struct sk_buff *skb)
|
|||
return l3_slave ? skb->skb_iif : IP6CB(skb)->iif;
|
||||
}
|
||||
|
||||
static inline bool inet6_is_jumbogram(const struct sk_buff *skb)
|
||||
{
|
||||
return !!(IP6CB(skb)->flags & IP6SKB_JUMBOGRAM);
|
||||
}
|
||||
|
||||
/* can not be used in TCP layer after tcp_v6_fill_cb */
|
||||
static inline bool inet6_exact_dif_match(struct net *net, struct sk_buff *skb)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -388,7 +388,12 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)
|
|||
* @irq_mask_ack: ack and mask an interrupt source
|
||||
* @irq_unmask: unmask an interrupt source
|
||||
* @irq_eoi: end of interrupt
|
||||
* @irq_set_affinity: set the CPU affinity on SMP machines
|
||||
* @irq_set_affinity: Set the CPU affinity on SMP machines. If the force
|
||||
* argument is true, it tells the driver to
|
||||
* unconditionally apply the affinity setting. Sanity
|
||||
* checks against the supplied affinity mask are not
|
||||
* required. This is used for CPU hotplug where the
|
||||
* target CPU is not yet set in the cpu_online_mask.
|
||||
* @irq_retrigger: resend an IRQ to the CPU
|
||||
* @irq_set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ
|
||||
* @irq_set_wake: enable/disable power-management wake-on of an IRQ
|
||||
|
|
|
|||
|
|
@ -85,19 +85,18 @@ static inline u32 jhash(const void *key, u32 length, u32 initval)
|
|||
k += 12;
|
||||
}
|
||||
/* Last block: affect all 32 bits of (c) */
|
||||
/* All the case statements fall through */
|
||||
switch (length) {
|
||||
case 12: c += (u32)k[11]<<24;
|
||||
case 11: c += (u32)k[10]<<16;
|
||||
case 10: c += (u32)k[9]<<8;
|
||||
case 9: c += k[8];
|
||||
case 8: b += (u32)k[7]<<24;
|
||||
case 7: b += (u32)k[6]<<16;
|
||||
case 6: b += (u32)k[5]<<8;
|
||||
case 5: b += k[4];
|
||||
case 4: a += (u32)k[3]<<24;
|
||||
case 3: a += (u32)k[2]<<16;
|
||||
case 2: a += (u32)k[1]<<8;
|
||||
case 12: c += (u32)k[11]<<24; /* fall through */
|
||||
case 11: c += (u32)k[10]<<16; /* fall through */
|
||||
case 10: c += (u32)k[9]<<8; /* fall through */
|
||||
case 9: c += k[8]; /* fall through */
|
||||
case 8: b += (u32)k[7]<<24; /* fall through */
|
||||
case 7: b += (u32)k[6]<<16; /* fall through */
|
||||
case 6: b += (u32)k[5]<<8; /* fall through */
|
||||
case 5: b += k[4]; /* fall through */
|
||||
case 4: a += (u32)k[3]<<24; /* fall through */
|
||||
case 3: a += (u32)k[2]<<16; /* fall through */
|
||||
case 2: a += (u32)k[1]<<8; /* fall through */
|
||||
case 1: a += k[0];
|
||||
__jhash_final(a, b, c);
|
||||
case 0: /* Nothing left to add */
|
||||
|
|
@ -131,10 +130,10 @@ static inline u32 jhash2(const u32 *k, u32 length, u32 initval)
|
|||
k += 3;
|
||||
}
|
||||
|
||||
/* Handle the last 3 u32's: all the case statements fall through */
|
||||
/* Handle the last 3 u32's */
|
||||
switch (length) {
|
||||
case 3: c += k[2];
|
||||
case 2: b += k[1];
|
||||
case 3: c += k[2]; /* fall through */
|
||||
case 2: b += k[1]; /* fall through */
|
||||
case 1: a += k[0];
|
||||
__jhash_final(a, b, c);
|
||||
case 0: /* Nothing left to add */
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ struct key_preparsed_payload {
|
|||
size_t datalen; /* Raw datalen */
|
||||
size_t quotalen; /* Quota length for proposed payload */
|
||||
time_t expiry; /* Expiry time of key */
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
typedef int (*request_key_actor_t)(struct key_construction *key,
|
||||
const char *op, void *aux);
|
||||
|
|
@ -158,7 +158,7 @@ struct key_type {
|
|||
/* internal fields */
|
||||
struct list_head link; /* link in types list */
|
||||
struct lock_class_key lock_class; /* key->sem lock class */
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
extern struct key_type key_type_keyring;
|
||||
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ struct subprocess_info {
|
|||
int (*init)(struct subprocess_info *info, struct cred *new);
|
||||
void (*cleanup)(struct subprocess_info *info);
|
||||
void *data;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
extern int
|
||||
call_usermodehelper(const char *path, char **argv, char **envp, int wait);
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ struct kset {
|
|||
spinlock_t list_lock;
|
||||
struct kobject kobj;
|
||||
const struct kset_uevent_ops *uevent_ops;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
extern void kset_init(struct kset *kset);
|
||||
extern int __must_check kset_register(struct kset *kset);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ struct task_struct *kthread_create_on_node(int (*threadfn)(void *data),
|
|||
* @threadfn: the function to run in the thread
|
||||
* @data: data pointer for @threadfn()
|
||||
* @namefmt: printf-style format string for the thread name
|
||||
* @...: arguments for @namefmt.
|
||||
* @arg...: arguments for @namefmt.
|
||||
*
|
||||
* This macro will create a kthread on the current node, leaving it in
|
||||
* the stopped state. This is just a helper for kthread_create_on_node();
|
||||
|
|
|
|||
|
|
@ -445,6 +445,7 @@ struct kvm {
|
|||
struct kvm_stat_data **debugfs_stat_data;
|
||||
struct srcu_struct srcu;
|
||||
struct srcu_struct irq_srcu;
|
||||
pid_t userspace_pid;
|
||||
};
|
||||
|
||||
#define kvm_err(fmt, ...) \
|
||||
|
|
@ -476,7 +477,8 @@ struct kvm {
|
|||
static inline struct kvm_io_bus *kvm_get_bus(struct kvm *kvm, enum kvm_bus idx)
|
||||
{
|
||||
return srcu_dereference_check(kvm->buses[idx], &kvm->srcu,
|
||||
lockdep_is_held(&kvm->slots_lock));
|
||||
lockdep_is_held(&kvm->slots_lock) ||
|
||||
!refcount_read(&kvm->users_count));
|
||||
}
|
||||
|
||||
static inline struct kvm_vcpu *kvm_get_vcpu(struct kvm *kvm, int i)
|
||||
|
|
@ -569,7 +571,8 @@ void kvm_put_kvm(struct kvm *kvm);
|
|||
static inline struct kvm_memslots *__kvm_memslots(struct kvm *kvm, int as_id)
|
||||
{
|
||||
return srcu_dereference_check(kvm->memslots[as_id], &kvm->srcu,
|
||||
lockdep_is_held(&kvm->slots_lock));
|
||||
lockdep_is_held(&kvm->slots_lock) ||
|
||||
!refcount_read(&kvm->users_count));
|
||||
}
|
||||
|
||||
static inline struct kvm_memslots *kvm_memslots(struct kvm *kvm)
|
||||
|
|
|
|||
|
|
@ -435,7 +435,7 @@ enum {
|
|||
ATA_HORKAGE_NOLPM = (1 << 20), /* don't use LPM */
|
||||
ATA_HORKAGE_WD_BROKEN_LPM = (1 << 21), /* some WDs have broken LPM */
|
||||
ATA_HORKAGE_ZERO_AFTER_TRIM = (1 << 22),/* guarantees zero after trim */
|
||||
ATA_HORKAGE_NO_NCQ_LOG = (1 << 23), /* don't use NCQ for log read */
|
||||
ATA_HORKAGE_NO_DMA_LOG = (1 << 23), /* don't use DMA for log read */
|
||||
ATA_HORKAGE_NOTRIM = (1 << 24), /* don't use TRIM */
|
||||
ATA_HORKAGE_MAX_SEC_1024 = (1 << 25), /* Limit max sects to 1024 */
|
||||
|
||||
|
|
|
|||
|
|
@ -92,6 +92,23 @@ static inline void init_llist_head(struct llist_head *list)
|
|||
#define llist_entry(ptr, type, member) \
|
||||
container_of(ptr, type, member)
|
||||
|
||||
/**
|
||||
* member_address_is_nonnull - check whether the member address is not NULL
|
||||
* @ptr: the object pointer (struct type * that contains the llist_node)
|
||||
* @member: the name of the llist_node within the struct.
|
||||
*
|
||||
* This macro is conceptually the same as
|
||||
* &ptr->member != NULL
|
||||
* but it works around the fact that compilers can decide that taking a member
|
||||
* address is never a NULL pointer.
|
||||
*
|
||||
* Real objects that start at a high address and have a member at NULL are
|
||||
* unlikely to exist, but such pointers may be returned e.g. by the
|
||||
* container_of() macro.
|
||||
*/
|
||||
#define member_address_is_nonnull(ptr, member) \
|
||||
((uintptr_t)(ptr) + offsetof(typeof(*(ptr)), member) != 0)
|
||||
|
||||
/**
|
||||
* llist_for_each - iterate over some deleted entries of a lock-less list
|
||||
* @pos: the &struct llist_node to use as a loop cursor
|
||||
|
|
@ -145,7 +162,7 @@ static inline void init_llist_head(struct llist_head *list)
|
|||
*/
|
||||
#define llist_for_each_entry(pos, node, member) \
|
||||
for ((pos) = llist_entry((node), typeof(*(pos)), member); \
|
||||
&(pos)->member != NULL; \
|
||||
member_address_is_nonnull(pos, member); \
|
||||
(pos) = llist_entry((pos)->member.next, typeof(*(pos)), member))
|
||||
|
||||
/**
|
||||
|
|
@ -167,7 +184,7 @@ static inline void init_llist_head(struct llist_head *list)
|
|||
*/
|
||||
#define llist_for_each_entry_safe(pos, n, node, member) \
|
||||
for (pos = llist_entry((node), typeof(*pos), member); \
|
||||
&pos->member != NULL && \
|
||||
member_address_is_nonnull(pos, member) && \
|
||||
(n = llist_entry(pos->member.next, typeof(*n), member), true); \
|
||||
pos = n)
|
||||
|
||||
|
|
|
|||
|
|
@ -1912,7 +1912,7 @@ struct security_hook_heads {
|
|||
struct list_head audit_rule_match;
|
||||
struct list_head audit_rule_free;
|
||||
#endif /* CONFIG_AUDIT */
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
/*
|
||||
* Security module hook list structure.
|
||||
|
|
@ -1923,7 +1923,7 @@ struct security_hook_list {
|
|||
struct list_head *head;
|
||||
union security_list_options hook;
|
||||
char *lsm;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
/*
|
||||
* Initializing a security_hook_list structure takes
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ extern int memblock_debug;
|
|||
#ifdef CONFIG_ARCH_DISCARD_MEMBLOCK
|
||||
#define __init_memblock __meminit
|
||||
#define __initdata_memblock __meminitdata
|
||||
void memblock_discard(void);
|
||||
#else
|
||||
#define __init_memblock
|
||||
#define __initdata_memblock
|
||||
|
|
@ -74,8 +75,6 @@ phys_addr_t memblock_find_in_range_node(phys_addr_t size, phys_addr_t align,
|
|||
int nid, ulong flags);
|
||||
phys_addr_t memblock_find_in_range(phys_addr_t start, phys_addr_t end,
|
||||
phys_addr_t size, phys_addr_t align);
|
||||
phys_addr_t get_allocated_memblock_reserved_regions_info(phys_addr_t *addr);
|
||||
phys_addr_t get_allocated_memblock_memory_regions_info(phys_addr_t *addr);
|
||||
void memblock_allow_resize(void);
|
||||
int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid);
|
||||
int memblock_add(phys_addr_t base, phys_addr_t size);
|
||||
|
|
@ -110,6 +109,9 @@ void __next_mem_range_rev(u64 *idx, int nid, ulong flags,
|
|||
void __next_reserved_mem_region(u64 *idx, phys_addr_t *out_start,
|
||||
phys_addr_t *out_end);
|
||||
|
||||
void __memblock_free_early(phys_addr_t base, phys_addr_t size);
|
||||
void __memblock_free_late(phys_addr_t base, phys_addr_t size);
|
||||
|
||||
/**
|
||||
* for_each_mem_range - iterate through memblock areas from type_a and not
|
||||
* included in type_b. Or just type_a if type_b is NULL.
|
||||
|
|
|
|||
|
|
@ -484,7 +484,8 @@ bool mem_cgroup_oom_synchronize(bool wait);
|
|||
extern int do_swap_account;
|
||||
#endif
|
||||
|
||||
void lock_page_memcg(struct page *page);
|
||||
struct mem_cgroup *lock_page_memcg(struct page *page);
|
||||
void __unlock_page_memcg(struct mem_cgroup *memcg);
|
||||
void unlock_page_memcg(struct page *page);
|
||||
|
||||
static inline unsigned long memcg_page_state(struct mem_cgroup *memcg,
|
||||
|
|
@ -809,7 +810,12 @@ mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
|
|||
{
|
||||
}
|
||||
|
||||
static inline void lock_page_memcg(struct page *page)
|
||||
static inline struct mem_cgroup *lock_page_memcg(struct page *page)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void __unlock_page_memcg(struct mem_cgroup *memcg)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -620,6 +620,7 @@ struct mlx4_caps {
|
|||
u32 dmfs_high_rate_qpn_base;
|
||||
u32 dmfs_high_rate_qpn_range;
|
||||
u32 vf_caps;
|
||||
bool wol_port[MLX4_MAX_PORTS + 1];
|
||||
struct mlx4_rate_limit_caps rl_caps;
|
||||
};
|
||||
|
||||
|
|
@ -1068,7 +1069,7 @@ static inline int mlx4_is_eth(struct mlx4_dev *dev, int port)
|
|||
}
|
||||
|
||||
int mlx4_buf_alloc(struct mlx4_dev *dev, int size, int max_direct,
|
||||
struct mlx4_buf *buf, gfp_t gfp);
|
||||
struct mlx4_buf *buf);
|
||||
void mlx4_buf_free(struct mlx4_dev *dev, int size, struct mlx4_buf *buf);
|
||||
static inline void *mlx4_buf_offset(struct mlx4_buf *buf, int offset)
|
||||
{
|
||||
|
|
@ -1105,10 +1106,9 @@ int mlx4_mw_enable(struct mlx4_dev *dev, struct mlx4_mw *mw);
|
|||
int mlx4_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
|
||||
int start_index, int npages, u64 *page_list);
|
||||
int mlx4_buf_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
|
||||
struct mlx4_buf *buf, gfp_t gfp);
|
||||
struct mlx4_buf *buf);
|
||||
|
||||
int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, int order,
|
||||
gfp_t gfp);
|
||||
int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, int order);
|
||||
void mlx4_db_free(struct mlx4_dev *dev, struct mlx4_db *db);
|
||||
|
||||
int mlx4_alloc_hwq_res(struct mlx4_dev *dev, struct mlx4_hwq_resources *wqres,
|
||||
|
|
@ -1124,8 +1124,7 @@ int mlx4_qp_reserve_range(struct mlx4_dev *dev, int cnt, int align,
|
|||
int *base, u8 flags);
|
||||
void mlx4_qp_release_range(struct mlx4_dev *dev, int base_qpn, int cnt);
|
||||
|
||||
int mlx4_qp_alloc(struct mlx4_dev *dev, int qpn, struct mlx4_qp *qp,
|
||||
gfp_t gfp);
|
||||
int mlx4_qp_alloc(struct mlx4_dev *dev, int qpn, struct mlx4_qp *qp);
|
||||
void mlx4_qp_free(struct mlx4_dev *dev, struct mlx4_qp *qp);
|
||||
|
||||
int mlx4_srq_alloc(struct mlx4_dev *dev, u32 pdn, u32 cqn, u16 xrcdn,
|
||||
|
|
|
|||
|
|
@ -7749,8 +7749,10 @@ struct mlx5_ifc_pcam_reg_bits {
|
|||
};
|
||||
|
||||
struct mlx5_ifc_mcam_enhanced_features_bits {
|
||||
u8 reserved_at_0[0x7f];
|
||||
u8 reserved_at_0[0x7d];
|
||||
|
||||
u8 mtpps_enh_out_per_adj[0x1];
|
||||
u8 mtpps_fs[0x1];
|
||||
u8 pcie_performance_group[0x1];
|
||||
};
|
||||
|
||||
|
|
@ -8159,7 +8161,8 @@ struct mlx5_ifc_mtpps_reg_bits {
|
|||
u8 reserved_at_78[0x4];
|
||||
u8 cap_pin_4_mode[0x4];
|
||||
|
||||
u8 reserved_at_80[0x80];
|
||||
u8 field_select[0x20];
|
||||
u8 reserved_at_a0[0x60];
|
||||
|
||||
u8 enable[0x1];
|
||||
u8 reserved_at_101[0xb];
|
||||
|
|
@ -8174,8 +8177,9 @@ struct mlx5_ifc_mtpps_reg_bits {
|
|||
|
||||
u8 out_pulse_duration[0x10];
|
||||
u8 out_periodic_adjustment[0x10];
|
||||
u8 enhanced_out_periodic_adjustment[0x20];
|
||||
|
||||
u8 reserved_at_1a0[0x60];
|
||||
u8 reserved_at_1c0[0x20];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_mtppse_reg_bits {
|
||||
|
|
|
|||
|
|
@ -212,7 +212,6 @@ struct mlx5_wqe_ctrl_seg {
|
|||
#define MLX5_WQE_CTRL_OPCODE_MASK 0xff
|
||||
#define MLX5_WQE_CTRL_WQE_INDEX_MASK 0x00ffff00
|
||||
#define MLX5_WQE_CTRL_WQE_INDEX_SHIFT 8
|
||||
#define MLX5_WQE_AV_EXT 0x80000000
|
||||
|
||||
enum {
|
||||
MLX5_ETH_WQE_L3_INNER_CSUM = 1 << 4,
|
||||
|
|
|
|||
|
|
@ -342,7 +342,7 @@ struct vm_area_struct {
|
|||
struct mempolicy *vm_policy; /* NUMA policy for the VMA */
|
||||
#endif
|
||||
struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
struct core_thread {
|
||||
struct task_struct *task;
|
||||
|
|
@ -487,20 +487,22 @@ struct mm_struct {
|
|||
/* numa_scan_seq prevents two threads setting pte_numa */
|
||||
int numa_scan_seq;
|
||||
#endif
|
||||
#if defined(CONFIG_NUMA_BALANCING) || defined(CONFIG_COMPACTION)
|
||||
/*
|
||||
* An operation with batched TLB flushing is going on. Anything that
|
||||
* can move process memory needs to flush the TLB when moving a
|
||||
* PROT_NONE or PROT_NUMA mapped page.
|
||||
*/
|
||||
bool tlb_flush_pending;
|
||||
atomic_t tlb_flush_pending;
|
||||
#ifdef CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
|
||||
/* See flush_tlb_batched_pending() */
|
||||
bool tlb_flush_batched;
|
||||
#endif
|
||||
struct uprobes_state uprobes_state;
|
||||
#ifdef CONFIG_HUGETLB_PAGE
|
||||
atomic_long_t hugetlb_usage;
|
||||
#endif
|
||||
struct work_struct async_put_work;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
extern struct mm_struct init_mm;
|
||||
|
||||
|
|
@ -518,46 +520,60 @@ static inline cpumask_t *mm_cpumask(struct mm_struct *mm)
|
|||
return mm->cpu_vm_mask_var;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_NUMA_BALANCING) || defined(CONFIG_COMPACTION)
|
||||
struct mmu_gather;
|
||||
extern void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm,
|
||||
unsigned long start, unsigned long end);
|
||||
extern void tlb_finish_mmu(struct mmu_gather *tlb,
|
||||
unsigned long start, unsigned long end);
|
||||
|
||||
/*
|
||||
* Memory barriers to keep this state in sync are graciously provided by
|
||||
* the page table locks, outside of which no page table modifications happen.
|
||||
* The barriers below prevent the compiler from re-ordering the instructions
|
||||
* around the memory barriers that are already present in the code.
|
||||
* The barriers are used to ensure the order between tlb_flush_pending updates,
|
||||
* which happen while the lock is not taken, and the PTE updates, which happen
|
||||
* while the lock is taken, are serialized.
|
||||
*/
|
||||
static inline bool mm_tlb_flush_pending(struct mm_struct *mm)
|
||||
{
|
||||
barrier();
|
||||
return mm->tlb_flush_pending;
|
||||
return atomic_read(&mm->tlb_flush_pending) > 0;
|
||||
}
|
||||
static inline void set_tlb_flush_pending(struct mm_struct *mm)
|
||||
|
||||
/*
|
||||
* Returns true if there are two above TLB batching threads in parallel.
|
||||
*/
|
||||
static inline bool mm_tlb_flush_nested(struct mm_struct *mm)
|
||||
{
|
||||
mm->tlb_flush_pending = true;
|
||||
return atomic_read(&mm->tlb_flush_pending) > 1;
|
||||
}
|
||||
|
||||
static inline void init_tlb_flush_pending(struct mm_struct *mm)
|
||||
{
|
||||
atomic_set(&mm->tlb_flush_pending, 0);
|
||||
}
|
||||
|
||||
static inline void inc_tlb_flush_pending(struct mm_struct *mm)
|
||||
{
|
||||
atomic_inc(&mm->tlb_flush_pending);
|
||||
|
||||
/*
|
||||
* Guarantee that the tlb_flush_pending store does not leak into the
|
||||
* Guarantee that the tlb_flush_pending increase does not leak into the
|
||||
* critical section updating the page tables
|
||||
*/
|
||||
smp_mb__before_spinlock();
|
||||
}
|
||||
|
||||
/* Clearing is done after a TLB flush, which also provides a barrier. */
|
||||
static inline void clear_tlb_flush_pending(struct mm_struct *mm)
|
||||
static inline void dec_tlb_flush_pending(struct mm_struct *mm)
|
||||
{
|
||||
barrier();
|
||||
mm->tlb_flush_pending = false;
|
||||
/*
|
||||
* Guarantee that the tlb_flush_pending does not not leak into the
|
||||
* critical section, since we must order the PTE change and changes to
|
||||
* the pending TLB flush indication. We could have relied on TLB flush
|
||||
* as a memory barrier, but this behavior is not clearly documented.
|
||||
*/
|
||||
smp_mb__before_atomic();
|
||||
atomic_dec(&mm->tlb_flush_pending);
|
||||
}
|
||||
#else
|
||||
static inline bool mm_tlb_flush_pending(struct mm_struct *mm)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
static inline void set_tlb_flush_pending(struct mm_struct *mm)
|
||||
{
|
||||
}
|
||||
static inline void clear_tlb_flush_pending(struct mm_struct *mm)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
struct vm_fault;
|
||||
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ struct module_kobject {
|
|||
struct kobject *drivers_dir;
|
||||
struct module_param_attrs *mp;
|
||||
struct completion *kobj_completion;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
struct module_attribute {
|
||||
struct attribute attr;
|
||||
|
|
@ -475,7 +475,7 @@ struct module {
|
|||
ctor_fn_t *ctors;
|
||||
unsigned int num_ctors;
|
||||
#endif
|
||||
} ____cacheline_aligned;
|
||||
} ____cacheline_aligned __randomize_layout;
|
||||
#ifndef MODULE_ARCH_INIT
|
||||
#define MODULE_ARCH_INIT {}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ struct vfsmount {
|
|||
struct dentry *mnt_root; /* root of the mounted tree */
|
||||
struct super_block *mnt_sb; /* pointer to superblock */
|
||||
int mnt_flags;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
struct file; /* forward dec */
|
||||
struct path;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ struct msg_queue {
|
|||
struct list_head q_messages;
|
||||
struct list_head q_receivers;
|
||||
struct list_head q_senders;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
/* Helper routines for sys_msgsnd and sys_msgrcv */
|
||||
extern long do_msgsnd(int msqid, long mtype, void __user *mtext,
|
||||
|
|
|
|||
|
|
@ -681,10 +681,10 @@ struct nand_buffers {
|
|||
* @tWW_min: WP# transition to WE# low
|
||||
*/
|
||||
struct nand_sdr_timings {
|
||||
u32 tBERS_max;
|
||||
u64 tBERS_max;
|
||||
u32 tCCS_min;
|
||||
u32 tPROG_max;
|
||||
u32 tR_max;
|
||||
u64 tPROG_max;
|
||||
u64 tR_max;
|
||||
u32 tALH_min;
|
||||
u32 tADL_min;
|
||||
u32 tALS_min;
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ struct net;
|
|||
|
||||
/* Historically, SOCKWQ_ASYNC_NOSPACE & SOCKWQ_ASYNC_WAITDATA were located
|
||||
* in sock->flags, but moved into sk->sk_wq->flags to be RCU protected.
|
||||
* Eventually all flags will be in sk->sk_wq_flags.
|
||||
* Eventually all flags will be in sk->sk_wq->flags.
|
||||
*/
|
||||
#define SOCKWQ_ASYNC_NOSPACE 0
|
||||
#define SOCKWQ_ASYNC_WAITDATA 1
|
||||
|
|
|
|||
|
|
@ -61,8 +61,6 @@ typedef unsigned int nf_hookfn(void *priv,
|
|||
struct sk_buff *skb,
|
||||
const struct nf_hook_state *state);
|
||||
struct nf_hook_ops {
|
||||
struct list_head list;
|
||||
|
||||
/* User fills in from here down. */
|
||||
nf_hookfn *hook;
|
||||
struct net_device *dev;
|
||||
|
|
@ -160,13 +158,6 @@ int nf_register_net_hooks(struct net *net, const struct nf_hook_ops *reg,
|
|||
void nf_unregister_net_hooks(struct net *net, const struct nf_hook_ops *reg,
|
||||
unsigned int n);
|
||||
|
||||
int nf_register_hook(struct nf_hook_ops *reg);
|
||||
void nf_unregister_hook(struct nf_hook_ops *reg);
|
||||
int nf_register_hooks(struct nf_hook_ops *reg, unsigned int n);
|
||||
void nf_unregister_hooks(struct nf_hook_ops *reg, unsigned int n);
|
||||
int _nf_register_hooks(struct nf_hook_ops *reg, unsigned int n);
|
||||
void _nf_unregister_hooks(struct nf_hook_ops *reg, unsigned int n);
|
||||
|
||||
/* Functions to register get/setsockopt ranges (non-inclusive). You
|
||||
need to check permissions yourself! */
|
||||
int nf_register_sockopt(struct nf_sockopt_ops *reg);
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ struct nfs_access_entry {
|
|||
struct list_head lru;
|
||||
unsigned long jiffies;
|
||||
struct rpc_cred * cred;
|
||||
int mask;
|
||||
__u32 mask;
|
||||
struct rcu_head rcu_head;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1235,7 +1235,7 @@ struct nfs41_state_protection {
|
|||
|
||||
struct nfs41_exchange_id_args {
|
||||
struct nfs_client *client;
|
||||
nfs4_verifier *verifier;
|
||||
nfs4_verifier verifier;
|
||||
u32 flags;
|
||||
struct nfs41_state_protection state_protect;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -168,6 +168,14 @@ extern int sysctl_hardlockup_all_cpu_backtrace;
|
|||
#define sysctl_softlockup_all_cpu_backtrace 0
|
||||
#define sysctl_hardlockup_all_cpu_backtrace 0
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_HARDLOCKUP_CHECK_TIMESTAMP) && \
|
||||
defined(CONFIG_HARDLOCKUP_DETECTOR)
|
||||
void watchdog_update_hrtimer_threshold(u64 period);
|
||||
#else
|
||||
static inline void watchdog_update_hrtimer_threshold(u64 period) { }
|
||||
#endif
|
||||
|
||||
extern bool is_hardlockup(void);
|
||||
struct ctl_table;
|
||||
extern int proc_watchdog(struct ctl_table *, int ,
|
||||
|
|
|
|||
|
|
@ -346,6 +346,11 @@ struct nvme_fc_remote_port {
|
|||
* indicating an FC transport Aborted status.
|
||||
* Entrypoint is Mandatory.
|
||||
*
|
||||
* @defer_rcv: Called by the transport to signal the LLLD that it has
|
||||
* begun processing of a previously received NVME CMD IU. The LLDD
|
||||
* is now free to re-use the rcv buffer associated with the
|
||||
* nvmefc_tgt_fcp_req.
|
||||
*
|
||||
* @max_hw_queues: indicates the maximum number of hw queues the LLDD
|
||||
* supports for cpu affinitization.
|
||||
* Value is Mandatory. Must be at least 1.
|
||||
|
|
@ -846,6 +851,8 @@ struct nvmet_fc_target_template {
|
|||
struct nvmefc_tgt_fcp_req *fcpreq);
|
||||
void (*fcp_req_release)(struct nvmet_fc_target_port *tgtport,
|
||||
struct nvmefc_tgt_fcp_req *fcpreq);
|
||||
void (*defer_rcv)(struct nvmet_fc_target_port *tgtport,
|
||||
struct nvmefc_tgt_fcp_req *fcpreq);
|
||||
|
||||
u32 max_hw_queues;
|
||||
u16 max_sgl_segments;
|
||||
|
|
|
|||
|
|
@ -334,5 +334,24 @@ struct fcnvme_ls_disconnect_acc {
|
|||
#define NVME_FC_LS_TIMEOUT_SEC 2 /* 2 seconds */
|
||||
#define NVME_FC_TGTOP_TIMEOUT_SEC 2 /* 2 seconds */
|
||||
|
||||
/*
|
||||
* TRADDR string must be of form "nn-<16hexdigits>:pn-<16hexdigits>"
|
||||
* the string is allowed to be specified with or without a "0x" prefix
|
||||
* infront of the <16hexdigits>. Without is considered the "min" string
|
||||
* and with is considered the "max" string. The hexdigits may be upper
|
||||
* or lower case.
|
||||
*/
|
||||
#define NVME_FC_TRADDR_NNLEN 3 /* "?n-" */
|
||||
#define NVME_FC_TRADDR_OXNNLEN 5 /* "?n-0x" */
|
||||
#define NVME_FC_TRADDR_HEXNAMELEN 16
|
||||
#define NVME_FC_TRADDR_MINLENGTH \
|
||||
(2 * (NVME_FC_TRADDR_NNLEN + NVME_FC_TRADDR_HEXNAMELEN) + 1)
|
||||
#define NVME_FC_TRADDR_MAXLENGTH \
|
||||
(2 * (NVME_FC_TRADDR_OXNNLEN + NVME_FC_TRADDR_HEXNAMELEN) + 1)
|
||||
#define NVME_FC_TRADDR_MIN_PN_OFFSET \
|
||||
(NVME_FC_TRADDR_NNLEN + NVME_FC_TRADDR_HEXNAMELEN + 1)
|
||||
#define NVME_FC_TRADDR_MAX_PN_OFFSET \
|
||||
(NVME_FC_TRADDR_OXNNLEN + NVME_FC_TRADDR_HEXNAMELEN + 1)
|
||||
|
||||
|
||||
#endif /* _NVME_FC_H */
|
||||
|
|
|
|||
|
|
@ -963,14 +963,14 @@ struct nvme_dbbuf {
|
|||
};
|
||||
|
||||
struct streams_directive_params {
|
||||
__u16 msl;
|
||||
__u16 nssa;
|
||||
__u16 nsso;
|
||||
__le16 msl;
|
||||
__le16 nssa;
|
||||
__le16 nsso;
|
||||
__u8 rsvd[10];
|
||||
__u32 sws;
|
||||
__u16 sgs;
|
||||
__u16 nsa;
|
||||
__u16 nso;
|
||||
__le32 sws;
|
||||
__le16 sgs;
|
||||
__le16 nsa;
|
||||
__le16 nso;
|
||||
__u8 rsvd2[6];
|
||||
};
|
||||
|
||||
|
|
@ -1006,7 +1006,7 @@ static inline bool nvme_is_write(struct nvme_command *cmd)
|
|||
* Why can't we simply have a Fabrics In and Fabrics out command?
|
||||
*/
|
||||
if (unlikely(cmd->common.opcode == nvme_fabrics_command))
|
||||
return cmd->fabrics.opcode & 1;
|
||||
return cmd->fabrics.fctype & 1;
|
||||
return cmd->common.opcode & 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/nodemask.h>
|
||||
#include <uapi/linux/oom.h>
|
||||
#include <linux/sched/coredump.h> /* MMF_* */
|
||||
#include <linux/mm.h> /* VM_FAULT* */
|
||||
|
||||
struct zonelist;
|
||||
struct notifier_block;
|
||||
|
|
@ -63,6 +65,26 @@ static inline bool tsk_is_oom_victim(struct task_struct * tsk)
|
|||
return tsk->signal->oom_mm;
|
||||
}
|
||||
|
||||
/*
|
||||
* Checks whether a page fault on the given mm is still reliable.
|
||||
* This is no longer true if the oom reaper started to reap the
|
||||
* address space which is reflected by MMF_UNSTABLE flag set in
|
||||
* the mm. At that moment any !shared mapping would lose the content
|
||||
* and could cause a memory corruption (zero pages instead of the
|
||||
* original content).
|
||||
*
|
||||
* User should call this before establishing a page table entry for
|
||||
* a !shared mapping and under the proper page table lock.
|
||||
*
|
||||
* Return 0 when the PF is safe VM_FAULT_SIGBUS otherwise.
|
||||
*/
|
||||
static inline int check_stable_address_space(struct mm_struct *mm)
|
||||
{
|
||||
if (unlikely(test_bit(MMF_UNSTABLE, &mm->flags)))
|
||||
return VM_FAULT_SIGBUS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern unsigned long oom_badness(struct task_struct *p,
|
||||
struct mem_cgroup *memcg, const nodemask_t *nodemask,
|
||||
unsigned long totalpages);
|
||||
|
|
|
|||
|
|
@ -163,8 +163,6 @@ void release_pages(struct page **pages, int nr, bool cold);
|
|||
*/
|
||||
static inline int page_cache_get_speculative(struct page *page)
|
||||
{
|
||||
VM_BUG_ON(in_interrupt());
|
||||
|
||||
#ifdef CONFIG_TINY_RCU
|
||||
# ifdef CONFIG_PREEMPT_COUNT
|
||||
VM_BUG_ON(!in_atomic() && !irqs_disabled());
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ struct vfsmount;
|
|||
struct path {
|
||||
struct vfsmount *mnt;
|
||||
struct dentry *dentry;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
extern void path_get(const struct path *);
|
||||
extern void path_put(const struct path *);
|
||||
|
|
|
|||
|
|
@ -188,6 +188,8 @@ enum pci_dev_flags {
|
|||
* the direct_complete optimization.
|
||||
*/
|
||||
PCI_DEV_FLAGS_NEEDS_RESUME = (__force pci_dev_flags_t) (1 << 11),
|
||||
/* Don't use Relaxed Ordering for TLPs directed at this device */
|
||||
PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 << 12),
|
||||
};
|
||||
|
||||
enum pci_irq_reroute_variant {
|
||||
|
|
@ -1067,6 +1069,7 @@ void pcie_flr(struct pci_dev *dev);
|
|||
int __pci_reset_function(struct pci_dev *dev);
|
||||
int __pci_reset_function_locked(struct pci_dev *dev);
|
||||
int pci_reset_function(struct pci_dev *dev);
|
||||
int pci_reset_function_locked(struct pci_dev *dev);
|
||||
int pci_try_reset_function(struct pci_dev *dev);
|
||||
int pci_probe_reset_slot(struct pci_slot *slot);
|
||||
int pci_reset_slot(struct pci_slot *slot);
|
||||
|
|
@ -1125,6 +1128,7 @@ bool pci_check_pme_status(struct pci_dev *dev);
|
|||
void pci_pme_wakeup_bus(struct pci_bus *bus);
|
||||
void pci_d3cold_enable(struct pci_dev *dev);
|
||||
void pci_d3cold_disable(struct pci_dev *dev);
|
||||
bool pcie_relaxed_ordering_enabled(struct pci_dev *dev);
|
||||
|
||||
/* PCI Virtual Channel */
|
||||
int pci_save_vc_state(struct pci_dev *dev);
|
||||
|
|
|
|||
|
|
@ -24,10 +24,14 @@
|
|||
* interrupt and passed the address of the low level handler,
|
||||
* and can be used to implement any platform specific handling
|
||||
* before or after calling it.
|
||||
*
|
||||
* @irq_flags: if non-zero, these flags will be passed to request_irq
|
||||
* when requesting interrupts for this PMU device.
|
||||
*/
|
||||
struct arm_pmu_platdata {
|
||||
irqreturn_t (*handle_irq)(int irq, void *dev,
|
||||
irq_handler_t pmu_handler);
|
||||
unsigned long irq_flags;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ARM_PMU
|
||||
|
|
|
|||
|
|
@ -310,8 +310,8 @@ struct pmu {
|
|||
* Notification that the event was mapped or unmapped. Called
|
||||
* in the context of the mapping task.
|
||||
*/
|
||||
void (*event_mapped) (struct perf_event *event); /*optional*/
|
||||
void (*event_unmapped) (struct perf_event *event); /*optional*/
|
||||
void (*event_mapped) (struct perf_event *event, struct mm_struct *mm); /* optional */
|
||||
void (*event_unmapped) (struct perf_event *event, struct mm_struct *mm); /* optional */
|
||||
|
||||
/*
|
||||
* Flags for ->add()/->del()/ ->start()/->stop(). There are
|
||||
|
|
|
|||
|
|
@ -830,7 +830,7 @@ static inline int phy_read_status(struct phy_device *phydev)
|
|||
dev_err(&_phydev->mdio.dev, format, ##args)
|
||||
|
||||
#define phydev_dbg(_phydev, format, args...) \
|
||||
dev_dbg(&_phydev->mdio.dev, format, ##args);
|
||||
dev_dbg(&_phydev->mdio.dev, format, ##args)
|
||||
|
||||
static inline const char *phydev_name(const struct phy_device *phydev)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,7 +8,9 @@ enum pid_type
|
|||
PIDTYPE_PID,
|
||||
PIDTYPE_PGID,
|
||||
PIDTYPE_SID,
|
||||
PIDTYPE_MAX
|
||||
PIDTYPE_MAX,
|
||||
/* only valid to __task_pid_nr_ns() */
|
||||
__PIDTYPE_TGID
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ struct pid_namespace {
|
|||
int hide_pid;
|
||||
int reboot; /* group exit code if this pidns was rebooted */
|
||||
struct ns_common ns;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
extern struct pid_namespace init_pid_ns;
|
||||
|
||||
|
|
|
|||
|
|
@ -81,8 +81,8 @@
|
|||
* it.
|
||||
* @PIN_CONFIG_OUTPUT: this will configure the pin as an output and drive a
|
||||
* value on the line. Use argument 1 to indicate high level, argument 0 to
|
||||
* indicate low level. (Please see Documentation/pinctrl.txt, section
|
||||
* "GPIO mode pitfalls" for a discussion around this parameter.)
|
||||
* indicate low level. (Please see Documentation/driver-api/pinctl.rst,
|
||||
* section "GPIO mode pitfalls" for a discussion around this parameter.)
|
||||
* @PIN_CONFIG_POWER_SOURCE: if the pin can select between different power
|
||||
* supplies, the argument to this parameter (on a custom format) tells
|
||||
* the driver which alternative power source to use.
|
||||
|
|
|
|||
|
|
@ -55,9 +55,6 @@ struct omap_hsmmc_platform_data {
|
|||
u32 caps; /* Used for the MMC driver on 2430 and later */
|
||||
u32 pm_caps; /* PM capabilities of the mmc */
|
||||
|
||||
/* use the internal clock */
|
||||
unsigned internal_clock:1;
|
||||
|
||||
/* nonremovable e.g. eMMC */
|
||||
unsigned nonremovable:1;
|
||||
|
||||
|
|
@ -73,13 +70,6 @@ struct omap_hsmmc_platform_data {
|
|||
int gpio_cd; /* gpio (card detect) */
|
||||
int gpio_cod; /* gpio (cover detect) */
|
||||
int gpio_wp; /* gpio (write protect) */
|
||||
|
||||
int (*set_power)(struct device *dev, int power_on, int vdd);
|
||||
void (*remux)(struct device *dev, int power_on);
|
||||
/* Call back before enabling / disabling regulators */
|
||||
void (*before_set_reg)(struct device *dev, int power_on, int vdd);
|
||||
/* Call back after enabling / disabling regulators */
|
||||
void (*after_set_reg)(struct device *dev, int power_on, int vdd);
|
||||
/* if we have special card, init it using this callback */
|
||||
void (*init_card)(struct mmc_card *card);
|
||||
|
||||
|
|
|
|||
|
|
@ -17,10 +17,12 @@
|
|||
* Available only for accelerometer and pressure sensors.
|
||||
* Accelerometer DRDY on LSM330 available only on pin 1 (see datasheet).
|
||||
* @open_drain: set the interrupt line to be open drain if possible.
|
||||
* @spi_3wire: enable spi-3wire mode.
|
||||
*/
|
||||
struct st_sensors_platform_data {
|
||||
u8 drdy_int_pin;
|
||||
bool open_drain;
|
||||
bool spi_3wire;
|
||||
};
|
||||
|
||||
#endif /* ST_SENSORS_PDATA_H */
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ struct proc_ns_operations {
|
|||
int (*install)(struct nsproxy *nsproxy, struct ns_common *ns);
|
||||
struct user_namespace *(*owner)(struct ns_common *ns);
|
||||
struct ns_common *(*get_parent)(struct ns_common *ns);
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
extern const struct proc_ns_operations netns_operations;
|
||||
extern const struct proc_ns_operations utsns_operations;
|
||||
|
|
|
|||
|
|
@ -99,6 +99,11 @@ struct system_device_crosststamp;
|
|||
* parameter func: the desired function to use.
|
||||
* parameter chan: the function channel index to use.
|
||||
*
|
||||
* @do_work: Request driver to perform auxiliary (periodic) operations
|
||||
* Driver should return delay of the next auxiliary work scheduling
|
||||
* time (>=0) or negative value in case further scheduling
|
||||
* is not required.
|
||||
*
|
||||
* Drivers should embed their ptp_clock_info within a private
|
||||
* structure, obtaining a reference to it using container_of().
|
||||
*
|
||||
|
|
@ -126,6 +131,7 @@ struct ptp_clock_info {
|
|||
struct ptp_clock_request *request, int on);
|
||||
int (*verify)(struct ptp_clock_info *ptp, unsigned int pin,
|
||||
enum ptp_pin_function func, unsigned int chan);
|
||||
long (*do_aux_work)(struct ptp_clock_info *ptp);
|
||||
};
|
||||
|
||||
struct ptp_clock;
|
||||
|
|
@ -211,6 +217,16 @@ extern int ptp_clock_index(struct ptp_clock *ptp);
|
|||
int ptp_find_pin(struct ptp_clock *ptp,
|
||||
enum ptp_pin_function func, unsigned int chan);
|
||||
|
||||
/**
|
||||
* ptp_schedule_worker() - schedule ptp auxiliary work
|
||||
*
|
||||
* @ptp: The clock obtained from ptp_clock_register().
|
||||
* @delay: number of jiffies to wait before queuing
|
||||
* See kthread_queue_delayed_work() for more info.
|
||||
*/
|
||||
|
||||
int ptp_schedule_worker(struct ptp_clock *ptp, unsigned long delay);
|
||||
|
||||
#else
|
||||
static inline struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
|
||||
struct device *parent)
|
||||
|
|
@ -225,6 +241,10 @@ static inline int ptp_clock_index(struct ptp_clock *ptp)
|
|||
static inline int ptp_find_pin(struct ptp_clock *ptp,
|
||||
enum ptp_pin_function func, unsigned int chan)
|
||||
{ return -1; }
|
||||
static inline int ptp_schedule_worker(struct ptp_clock *ptp,
|
||||
unsigned long delay)
|
||||
{ return -EOPNOTSUPP; }
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -436,9 +436,9 @@ static inline int ptr_ring_consume_batched_bh(struct ptr_ring *r,
|
|||
__PTR_RING_PEEK_CALL_v; \
|
||||
})
|
||||
|
||||
static inline void **__ptr_ring_init_queue_alloc(int size, gfp_t gfp)
|
||||
static inline void **__ptr_ring_init_queue_alloc(unsigned int size, gfp_t gfp)
|
||||
{
|
||||
return kzalloc(ALIGN(size * sizeof(void *), SMP_CACHE_BYTES), gfp);
|
||||
return kcalloc(size, sizeof(void *), gfp);
|
||||
}
|
||||
|
||||
static inline void __ptr_ring_set_size(struct ptr_ring *r, int size)
|
||||
|
|
@ -582,7 +582,8 @@ static inline int ptr_ring_resize(struct ptr_ring *r, int size, gfp_t gfp,
|
|||
* In particular if you consume ring in interrupt or BH context, you must
|
||||
* disable interrupts/BH when doing so.
|
||||
*/
|
||||
static inline int ptr_ring_resize_multiple(struct ptr_ring **rings, int nrings,
|
||||
static inline int ptr_ring_resize_multiple(struct ptr_ring **rings,
|
||||
unsigned int nrings,
|
||||
int size,
|
||||
gfp_t gfp, void (*destroy)(void *))
|
||||
{
|
||||
|
|
@ -590,7 +591,7 @@ static inline int ptr_ring_resize_multiple(struct ptr_ring **rings, int nrings,
|
|||
void ***queues;
|
||||
int i;
|
||||
|
||||
queues = kmalloc(nrings * sizeof *queues, gfp);
|
||||
queues = kmalloc_array(nrings, sizeof(*queues), gfp);
|
||||
if (!queues)
|
||||
goto noqueues;
|
||||
|
||||
|
|
|
|||
|
|
@ -426,7 +426,7 @@ struct sched_rt_entity {
|
|||
/* rq "owned" by this entity/group: */
|
||||
struct rt_rq *my_q;
|
||||
#endif
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
struct sched_dl_entity {
|
||||
struct rb_node rb_node;
|
||||
|
|
@ -526,6 +526,13 @@ struct task_struct {
|
|||
#endif
|
||||
/* -1 unrunnable, 0 runnable, >0 stopped: */
|
||||
volatile long state;
|
||||
|
||||
/*
|
||||
* This begins the randomizable portion of task_struct. Only
|
||||
* scheduling-critical items should be added above here.
|
||||
*/
|
||||
randomized_struct_fields_start
|
||||
|
||||
void *stack;
|
||||
atomic_t usage;
|
||||
/* Per task flags (PF_*), defined further below: */
|
||||
|
|
@ -1079,6 +1086,13 @@ struct task_struct {
|
|||
/* Used by LSM modules for access restriction: */
|
||||
void *security;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* New fields for task_struct should be added above here, so that
|
||||
* they are included in the randomized portion of task_struct.
|
||||
*/
|
||||
randomized_struct_fields_end
|
||||
|
||||
/* CPU-specific state of this task: */
|
||||
struct thread_struct thread;
|
||||
|
||||
|
|
@ -1149,13 +1163,6 @@ static inline pid_t task_tgid_nr(struct task_struct *tsk)
|
|||
return tsk->tgid;
|
||||
}
|
||||
|
||||
extern pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns);
|
||||
|
||||
static inline pid_t task_tgid_vnr(struct task_struct *tsk)
|
||||
{
|
||||
return pid_vnr(task_tgid(tsk));
|
||||
}
|
||||
|
||||
/**
|
||||
* pid_alive - check that a task structure is not stale
|
||||
* @p: Task structure to be checked.
|
||||
|
|
@ -1171,23 +1178,6 @@ static inline int pid_alive(const struct task_struct *p)
|
|||
return p->pids[PIDTYPE_PID].pid != NULL;
|
||||
}
|
||||
|
||||
static inline pid_t task_ppid_nr_ns(const struct task_struct *tsk, struct pid_namespace *ns)
|
||||
{
|
||||
pid_t pid = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
if (pid_alive(tsk))
|
||||
pid = task_tgid_nr_ns(rcu_dereference(tsk->real_parent), ns);
|
||||
rcu_read_unlock();
|
||||
|
||||
return pid;
|
||||
}
|
||||
|
||||
static inline pid_t task_ppid_nr(const struct task_struct *tsk)
|
||||
{
|
||||
return task_ppid_nr_ns(tsk, &init_pid_ns);
|
||||
}
|
||||
|
||||
static inline pid_t task_pgrp_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
|
||||
{
|
||||
return __task_pid_nr_ns(tsk, PIDTYPE_PGID, ns);
|
||||
|
|
@ -1209,6 +1199,33 @@ static inline pid_t task_session_vnr(struct task_struct *tsk)
|
|||
return __task_pid_nr_ns(tsk, PIDTYPE_SID, NULL);
|
||||
}
|
||||
|
||||
static inline pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
|
||||
{
|
||||
return __task_pid_nr_ns(tsk, __PIDTYPE_TGID, ns);
|
||||
}
|
||||
|
||||
static inline pid_t task_tgid_vnr(struct task_struct *tsk)
|
||||
{
|
||||
return __task_pid_nr_ns(tsk, __PIDTYPE_TGID, NULL);
|
||||
}
|
||||
|
||||
static inline pid_t task_ppid_nr_ns(const struct task_struct *tsk, struct pid_namespace *ns)
|
||||
{
|
||||
pid_t pid = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
if (pid_alive(tsk))
|
||||
pid = task_tgid_nr_ns(rcu_dereference(tsk->real_parent), ns);
|
||||
rcu_read_unlock();
|
||||
|
||||
return pid;
|
||||
}
|
||||
|
||||
static inline pid_t task_ppid_nr(const struct task_struct *tsk)
|
||||
{
|
||||
return task_ppid_nr_ns(tsk, &init_pid_ns);
|
||||
}
|
||||
|
||||
/* Obsolete, do not use: */
|
||||
static inline pid_t task_pgrp_nr(struct task_struct *tsk)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -222,7 +222,7 @@ struct signal_struct {
|
|||
struct mutex cred_guard_mutex; /* guard against foreign influences on
|
||||
* credential calculations
|
||||
* (notably. ptrace) */
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
/*
|
||||
* Bits in flags field of signal_struct.
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ struct sem_array {
|
|||
unsigned int use_global_lock;/* >0: global lock required */
|
||||
|
||||
struct sem sems[];
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
#ifdef CONFIG_SYSVIPC
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ struct shmid_kernel /* private to the kernel */
|
|||
/* The task created the shm object. NULL if the task is dead. */
|
||||
struct task_struct *shm_creator;
|
||||
struct list_head shm_clist; /* list by creator */
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
/* shm_mode upper byte flags */
|
||||
#define SHM_DEST 01000 /* segment will be destroyed on last detach */
|
||||
|
|
|
|||
|
|
@ -193,7 +193,8 @@ static inline int skb_array_resize(struct skb_array *a, int size, gfp_t gfp)
|
|||
}
|
||||
|
||||
static inline int skb_array_resize_multiple(struct skb_array **rings,
|
||||
int nrings, int size, gfp_t gfp)
|
||||
int nrings, unsigned int size,
|
||||
gfp_t gfp)
|
||||
{
|
||||
BUILD_BUG_ON(offsetof(struct skb_array, ring));
|
||||
return ptr_ring_resize_multiple((struct ptr_ring **)rings,
|
||||
|
|
|
|||
|
|
@ -43,12 +43,13 @@ struct sync_file {
|
|||
#endif
|
||||
|
||||
wait_queue_head_t wq;
|
||||
unsigned long flags;
|
||||
|
||||
struct dma_fence *fence;
|
||||
struct dma_fence_cb cb;
|
||||
};
|
||||
|
||||
#define POLL_ENABLED DMA_FENCE_FLAG_USER_BITS
|
||||
#define POLL_ENABLED 0
|
||||
|
||||
struct sync_file *sync_file_create(struct dma_fence *fence);
|
||||
struct dma_fence *sync_file_get_fence(int fd);
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ struct ctl_table
|
|||
struct ctl_table_poll *poll;
|
||||
void *extra1;
|
||||
void *extra2;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
struct ctl_node {
|
||||
struct rb_node node;
|
||||
|
|
|
|||
|
|
@ -338,7 +338,7 @@ enum {
|
|||
struct trace_event_file {
|
||||
struct list_head list;
|
||||
struct trace_event_call *event_call;
|
||||
struct event_filter *filter;
|
||||
struct event_filter __rcu *filter;
|
||||
struct dentry *dir;
|
||||
struct trace_array *tr;
|
||||
struct trace_subsystem_dir *system;
|
||||
|
|
|
|||
|
|
@ -332,7 +332,7 @@ struct tty_struct {
|
|||
/* If the tty has a pending do_SAK, queue it here - akpm */
|
||||
struct work_struct SAK_work;
|
||||
struct tty_port *port;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
/* Each of a tty's open files has private_data pointing to tty_file_private */
|
||||
struct tty_file_private {
|
||||
|
|
|
|||
|
|
@ -291,7 +291,7 @@ struct tty_operations {
|
|||
void (*poll_put_char)(struct tty_driver *driver, int line, char ch);
|
||||
#endif
|
||||
const struct file_operations *proc_fops;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
struct tty_driver {
|
||||
int magic; /* magic number for this structure */
|
||||
|
|
@ -325,7 +325,7 @@ struct tty_driver {
|
|||
|
||||
const struct tty_operations *ops;
|
||||
struct list_head tty_drivers;
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
extern struct list_head tty_drivers;
|
||||
|
||||
|
|
|
|||
|
|
@ -115,13 +115,13 @@ struct uac2_input_terminal_descriptor {
|
|||
__u8 bDescriptorType;
|
||||
__u8 bDescriptorSubtype;
|
||||
__u8 bTerminalID;
|
||||
__u16 wTerminalType;
|
||||
__le16 wTerminalType;
|
||||
__u8 bAssocTerminal;
|
||||
__u8 bCSourceID;
|
||||
__u8 bNrChannels;
|
||||
__u32 bmChannelConfig;
|
||||
__le32 bmChannelConfig;
|
||||
__u8 iChannelNames;
|
||||
__u16 bmControls;
|
||||
__le16 bmControls;
|
||||
__u8 iTerminal;
|
||||
} __attribute__((packed));
|
||||
|
||||
|
|
@ -132,11 +132,11 @@ struct uac2_output_terminal_descriptor {
|
|||
__u8 bDescriptorType;
|
||||
__u8 bDescriptorSubtype;
|
||||
__u8 bTerminalID;
|
||||
__u16 wTerminalType;
|
||||
__le16 wTerminalType;
|
||||
__u8 bAssocTerminal;
|
||||
__u8 bSourceID;
|
||||
__u8 bCSourceID;
|
||||
__u16 bmControls;
|
||||
__le16 bmControls;
|
||||
__u8 iTerminal;
|
||||
} __attribute__((packed));
|
||||
|
||||
|
|
@ -164,9 +164,9 @@ struct uac2_as_header_descriptor {
|
|||
__u8 bTerminalLink;
|
||||
__u8 bmControls;
|
||||
__u8 bFormatType;
|
||||
__u32 bmFormats;
|
||||
__le32 bmFormats;
|
||||
__u8 bNrChannels;
|
||||
__u32 bmChannelConfig;
|
||||
__le32 bmChannelConfig;
|
||||
__u8 iChannelNames;
|
||||
} __attribute__((packed));
|
||||
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@
|
|||
/* Driver flags */
|
||||
#define CDC_NCM_FLAG_NDP_TO_END 0x02 /* NDP is placed at end of frame */
|
||||
#define CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE 0x04 /* Avoid altsetting toggle during init */
|
||||
#define CDC_NCM_FLAG_RESET_NTB16 0x08 /* set NDP16 one more time after altsetting switch */
|
||||
|
||||
#define cdc_ncm_comm_intf_is_mbim(x) ((x)->desc.bInterfaceSubClass == USB_CDC_SUBCLASS_MBIM && \
|
||||
(x)->desc.bInterfaceProtocol == USB_CDC_PROTO_NONE)
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ struct user_namespace {
|
|||
#endif
|
||||
struct ucounts *ucounts;
|
||||
int ucount_max[UCOUNT_COUNTS];
|
||||
};
|
||||
} __randomize_layout;
|
||||
|
||||
struct ucounts {
|
||||
struct hlist_node node;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ struct uts_namespace {
|
|||
struct user_namespace *user_ns;
|
||||
struct ucounts *ucounts;
|
||||
struct ns_common ns;
|
||||
};
|
||||
} __randomize_layout;
|
||||
extern struct uts_namespace init_uts_ns;
|
||||
|
||||
#ifdef CONFIG_UTS_NS
|
||||
|
|
|
|||
|
|
@ -84,26 +84,12 @@ int guid_parse(const char *uuid, guid_t *u);
|
|||
int uuid_parse(const char *uuid, uuid_t *u);
|
||||
|
||||
/* backwards compatibility, don't use in new code */
|
||||
typedef uuid_t uuid_be;
|
||||
#define UUID_BE(a, _b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
|
||||
UUID_INIT(a, _b, c, d0, d1, d2, d3, d4, d5, d6, d7)
|
||||
#define NULL_UUID_BE \
|
||||
UUID_BE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, \
|
||||
0x00, 0x00, 0x00, 0x00)
|
||||
|
||||
#define uuid_le_gen(u) guid_gen(u)
|
||||
#define uuid_be_gen(u) uuid_gen(u)
|
||||
#define uuid_le_to_bin(guid, u) guid_parse(guid, u)
|
||||
#define uuid_be_to_bin(uuid, u) uuid_parse(uuid, u)
|
||||
|
||||
static inline int uuid_le_cmp(const guid_t u1, const guid_t u2)
|
||||
{
|
||||
return memcmp(&u1, &u2, sizeof(guid_t));
|
||||
}
|
||||
|
||||
static inline int uuid_be_cmp(const uuid_t u1, const uuid_t u2)
|
||||
{
|
||||
return memcmp(&u1, &u2, sizeof(uuid_t));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@ extern int vfio_set_irqs_validate_and_prepare(struct vfio_irq_set *hdr,
|
|||
size_t *data_size);
|
||||
|
||||
struct pci_dev;
|
||||
#ifdef CONFIG_EEH
|
||||
#if IS_ENABLED(CONFIG_VFIO_SPAPR_EEH)
|
||||
extern void vfio_spapr_pci_eeh_open(struct pci_dev *pdev);
|
||||
extern void vfio_spapr_pci_eeh_release(struct pci_dev *pdev);
|
||||
extern long vfio_spapr_iommu_eeh_ioctl(struct iommu_group *group,
|
||||
|
|
@ -173,7 +173,7 @@ static inline long vfio_spapr_iommu_eeh_ioctl(struct iommu_group *group,
|
|||
{
|
||||
return -ENOTTY;
|
||||
}
|
||||
#endif /* CONFIG_EEH */
|
||||
#endif /* CONFIG_VFIO_SPAPR_EEH */
|
||||
|
||||
/*
|
||||
* IRQfd - generic
|
||||
|
|
|
|||
|
|
@ -529,13 +529,13 @@ do { \
|
|||
|
||||
/**
|
||||
* wait_event_interruptible_hrtimeout - sleep until a condition gets true or a timeout elapses
|
||||
* @wq_head: the waitqueue to wait on
|
||||
* @wq: the waitqueue to wait on
|
||||
* @condition: a C expression for the event to wait for
|
||||
* @timeout: timeout, as a ktime_t
|
||||
*
|
||||
* The process is put to sleep (TASK_INTERRUPTIBLE) until the
|
||||
* @condition evaluates to true or a signal is received.
|
||||
* The @condition is checked each time the waitqueue @wq_head is woken up.
|
||||
* The @condition is checked each time the waitqueue @wq is woken up.
|
||||
*
|
||||
* wake_up() has to be called after changing any variable that could
|
||||
* change the result of the wait condition.
|
||||
|
|
@ -735,12 +735,12 @@ extern int do_wait_intr_irq(wait_queue_head_t *, wait_queue_entry_t *);
|
|||
|
||||
/**
|
||||
* wait_event_killable - sleep until a condition gets true
|
||||
* @wq: the waitqueue to wait on
|
||||
* @wq_head: the waitqueue to wait on
|
||||
* @condition: a C expression for the event to wait for
|
||||
*
|
||||
* The process is put to sleep (TASK_KILLABLE) until the
|
||||
* @condition evaluates to true or a signal is received.
|
||||
* The @condition is checked each time the waitqueue @wq is woken up.
|
||||
* The @condition is checked each time the waitqueue @wq_head is woken up.
|
||||
*
|
||||
* wake_up() has to be called after changing any variable that could
|
||||
* change the result of the wait condition.
|
||||
|
|
@ -757,6 +757,43 @@ extern int do_wait_intr_irq(wait_queue_head_t *, wait_queue_entry_t *);
|
|||
__ret; \
|
||||
})
|
||||
|
||||
#define __wait_event_killable_timeout(wq_head, condition, timeout) \
|
||||
___wait_event(wq_head, ___wait_cond_timeout(condition), \
|
||||
TASK_KILLABLE, 0, timeout, \
|
||||
__ret = schedule_timeout(__ret))
|
||||
|
||||
/**
|
||||
* wait_event_killable_timeout - sleep until a condition gets true or a timeout elapses
|
||||
* @wq_head: the waitqueue to wait on
|
||||
* @condition: a C expression for the event to wait for
|
||||
* @timeout: timeout, in jiffies
|
||||
*
|
||||
* The process is put to sleep (TASK_KILLABLE) until the
|
||||
* @condition evaluates to true or a kill signal is received.
|
||||
* The @condition is checked each time the waitqueue @wq_head is woken up.
|
||||
*
|
||||
* wake_up() has to be called after changing any variable that could
|
||||
* change the result of the wait condition.
|
||||
*
|
||||
* Returns:
|
||||
* 0 if the @condition evaluated to %false after the @timeout elapsed,
|
||||
* 1 if the @condition evaluated to %true after the @timeout elapsed,
|
||||
* the remaining jiffies (at least 1) if the @condition evaluated
|
||||
* to %true before the @timeout elapsed, or -%ERESTARTSYS if it was
|
||||
* interrupted by a kill signal.
|
||||
*
|
||||
* Only kill signals interrupt this process.
|
||||
*/
|
||||
#define wait_event_killable_timeout(wq_head, condition, timeout) \
|
||||
({ \
|
||||
long __ret = timeout; \
|
||||
might_sleep(); \
|
||||
if (!___wait_cond_timeout(condition)) \
|
||||
__ret = __wait_event_killable_timeout(wq_head, \
|
||||
condition, timeout); \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
|
||||
#define __wait_event_lock_irq(wq_head, condition, lock, cmd) \
|
||||
(void)___wait_event(wq_head, condition, TASK_UNINTERRUPTIBLE, 0, 0, \
|
||||
|
|
|
|||
|
|
@ -323,6 +323,7 @@ enum {
|
|||
|
||||
__WQ_DRAINING = 1 << 16, /* internal: workqueue is draining */
|
||||
__WQ_ORDERED = 1 << 17, /* internal: workqueue is ordered */
|
||||
__WQ_ORDERED_EXPLICIT = 1 << 18, /* internal: alloc_ordered_workqueue() */
|
||||
__WQ_LEGACY = 1 << 18, /* internal: create*_workqueue() */
|
||||
|
||||
WQ_MAX_ACTIVE = 512, /* I like 512, better ideas? */
|
||||
|
|
@ -422,7 +423,8 @@ __alloc_workqueue_key(const char *fmt, unsigned int flags, int max_active,
|
|||
* Pointer to the allocated workqueue on success, %NULL on failure.
|
||||
*/
|
||||
#define alloc_ordered_workqueue(fmt, flags, args...) \
|
||||
alloc_workqueue(fmt, WQ_UNBOUND | __WQ_ORDERED | (flags), 1, ##args)
|
||||
alloc_workqueue(fmt, WQ_UNBOUND | __WQ_ORDERED | \
|
||||
__WQ_ORDERED_EXPLICIT | (flags), 1, ##args)
|
||||
|
||||
#define create_workqueue(name) \
|
||||
alloc_workqueue("%s", __WQ_LEGACY | WQ_MEM_RECLAIM, 1, (name))
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ void cec_notifier_put(struct cec_notifier *n);
|
|||
* @pa: the CEC physical address
|
||||
*
|
||||
* Set a new CEC physical address.
|
||||
* Does nothing if @n == NULL.
|
||||
*/
|
||||
void cec_notifier_set_phys_addr(struct cec_notifier *n, u16 pa);
|
||||
|
||||
|
|
@ -66,6 +67,7 @@ void cec_notifier_set_phys_addr(struct cec_notifier *n, u16 pa);
|
|||
* @edid: the struct edid pointer
|
||||
*
|
||||
* Parses the EDID to obtain the new CEC physical address and set it.
|
||||
* Does nothing if @n == NULL.
|
||||
*/
|
||||
void cec_notifier_set_phys_addr_from_edid(struct cec_notifier *n,
|
||||
const struct edid *edid);
|
||||
|
|
@ -118,4 +120,17 @@ static inline void cec_notifier_unregister(struct cec_notifier *n)
|
|||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* cec_notifier_phys_addr_invalidate() - set the physical address to INVALID
|
||||
*
|
||||
* @n: the CEC notifier
|
||||
*
|
||||
* This is a simple helper function to invalidate the physical
|
||||
* address. Does nothing if @n == NULL.
|
||||
*/
|
||||
static inline void cec_notifier_phys_addr_invalidate(struct cec_notifier *n)
|
||||
{
|
||||
cec_notifier_set_phys_addr(n, CEC_PHYS_ADDR_INVALID);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue