Linux 4.8-rc8
-----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJX6H4uAAoJEHm+PkMAQRiG5sMH/3yzrMiUCSokdS+cvY+jgKAG JS58JmRvBPz2mRaU3MRPBGRDeCz/Nc9LggL2ZcgM+E1ZYirlYyQfIED3lkqk5R07 kIN1wmb+kQhXyU4IY3fEX7joqyKC6zOy4DUChPkBQU0/0+VUmdVmcJvsuPlnMZtf g95m0BdYTui+eDezASRqOEp3Lb5ONL4c3ao4yBP0LHF033ctj3VJQiyi5uERPZJ0 5e6Mo7Wxn78t9WqJLQAiEH46kTwT2plNlxf3XXqTenfIdbWhqE873HPGeSMa3VQV VywXTpCpSPQsA8BYg66qIbebdKOhs9MOviHVfqDtwQlvwhjlBDya0gNHfI5fSy4= =Y/L5 -----END PGP SIGNATURE----- Merge tag 'v4.8-rc8' into drm-next Linux 4.8-rc8 There was a lot of fallout in the imx/amdgpu/i915 drivers, so backmerge it now to avoid troubles. * tag 'v4.8-rc8': (1442 commits) Linux 4.8-rc8 fault_in_multipages_readable() throws set-but-unused error mm: check VMA flags to avoid invalid PROT_NONE NUMA balancing radix tree: fix sibling entry handling in radix_tree_descend() radix tree test suite: Test radix_tree_replace_slot() for multiorder entries fix memory leaks in tracing_buffers_splice_read() tracing: Move mutex to protect against resetting of seq data MIPS: Fix delay slot emulation count in debugfs MIPS: SMP: Fix possibility of deadlock when bringing CPUs online mm: delete unnecessary and unsafe init_tlb_ubc() huge tmpfs: fix Committed_AS leak shmem: fix tmpfs to handle the huge= option properly blk-mq: skip unmapped queues in blk_mq_alloc_request_hctx MIPS: Fix pre-r6 emulation FPU initialisation arm64: kgdb: handle read-only text / modules arm64: Call numa_store_cpu_info() earlier. locking/hung_task: Fix typo in CONFIG_DETECT_HUNG_TASK help text nvme-rdma: only clear queue flags after successful connect i2c: qup: skip qup_i2c_suspend if the device is already runtime suspended perf/core: Limit matching exclusive events to one PMU ...
This commit is contained in:
commit
ca09fb9f60
1280 changed files with 13520 additions and 7765 deletions
|
|
@ -1056,7 +1056,7 @@ static inline struct fwnode_handle *acpi_get_next_subnode(struct device *dev,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#define ACPI_DECLARE_PROBE_ENTRY(table, name, table_id, subtable, validate, data, fn) \
|
||||
#define ACPI_DECLARE_PROBE_ENTRY(table, name, table_id, subtable, valid, data, fn) \
|
||||
static const void * __acpi_table_##name[] \
|
||||
__attribute__((unused)) \
|
||||
= { (void *) table_id, \
|
||||
|
|
|
|||
|
|
@ -71,7 +71,8 @@ static inline bool bio_has_data(struct bio *bio)
|
|||
{
|
||||
if (bio &&
|
||||
bio->bi_iter.bi_size &&
|
||||
bio_op(bio) != REQ_OP_DISCARD)
|
||||
bio_op(bio) != REQ_OP_DISCARD &&
|
||||
bio_op(bio) != REQ_OP_SECURE_ERASE)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
|
@ -79,7 +80,9 @@ static inline bool bio_has_data(struct bio *bio)
|
|||
|
||||
static inline bool bio_no_advance_iter(struct bio *bio)
|
||||
{
|
||||
return bio_op(bio) == REQ_OP_DISCARD || bio_op(bio) == REQ_OP_WRITE_SAME;
|
||||
return bio_op(bio) == REQ_OP_DISCARD ||
|
||||
bio_op(bio) == REQ_OP_SECURE_ERASE ||
|
||||
bio_op(bio) == REQ_OP_WRITE_SAME;
|
||||
}
|
||||
|
||||
static inline bool bio_is_rw(struct bio *bio)
|
||||
|
|
@ -199,6 +202,9 @@ static inline unsigned bio_segments(struct bio *bio)
|
|||
if (bio_op(bio) == REQ_OP_DISCARD)
|
||||
return 1;
|
||||
|
||||
if (bio_op(bio) == REQ_OP_SECURE_ERASE)
|
||||
return 1;
|
||||
|
||||
if (bio_op(bio) == REQ_OP_WRITE_SAME)
|
||||
return 1;
|
||||
|
||||
|
|
|
|||
|
|
@ -882,7 +882,7 @@ static inline unsigned int blk_rq_cur_sectors(const struct request *rq)
|
|||
static inline unsigned int blk_queue_get_max_sectors(struct request_queue *q,
|
||||
int op)
|
||||
{
|
||||
if (unlikely(op == REQ_OP_DISCARD))
|
||||
if (unlikely(op == REQ_OP_DISCARD || op == REQ_OP_SECURE_ERASE))
|
||||
return min(q->limits.max_discard_sectors, UINT_MAX >> 9);
|
||||
|
||||
if (unlikely(op == REQ_OP_WRITE_SAME))
|
||||
|
|
@ -913,7 +913,9 @@ static inline unsigned int blk_rq_get_max_sectors(struct request *rq,
|
|||
if (unlikely(rq->cmd_type != REQ_TYPE_FS))
|
||||
return q->limits.max_hw_sectors;
|
||||
|
||||
if (!q->limits.chunk_sectors || (req_op(rq) == REQ_OP_DISCARD))
|
||||
if (!q->limits.chunk_sectors ||
|
||||
req_op(rq) == REQ_OP_DISCARD ||
|
||||
req_op(rq) == REQ_OP_SECURE_ERASE)
|
||||
return blk_queue_get_max_sectors(q, req_op(rq));
|
||||
|
||||
return min(blk_max_size_offset(q, offset),
|
||||
|
|
|
|||
|
|
@ -162,10 +162,11 @@ static inline void cec_msg_standby(struct cec_msg *msg)
|
|||
|
||||
|
||||
/* One Touch Record Feature */
|
||||
static inline void cec_msg_record_off(struct cec_msg *msg)
|
||||
static inline void cec_msg_record_off(struct cec_msg *msg, bool reply)
|
||||
{
|
||||
msg->len = 2;
|
||||
msg->msg[1] = CEC_MSG_RECORD_OFF;
|
||||
msg->reply = reply ? CEC_MSG_RECORD_STATUS : 0;
|
||||
}
|
||||
|
||||
struct cec_op_arib_data {
|
||||
|
|
@ -227,7 +228,7 @@ static inline void cec_set_digital_service_id(__u8 *msg,
|
|||
if (digital->service_id_method == CEC_OP_SERVICE_ID_METHOD_BY_CHANNEL) {
|
||||
*msg++ = (digital->channel.channel_number_fmt << 2) |
|
||||
(digital->channel.major >> 8);
|
||||
*msg++ = digital->channel.major && 0xff;
|
||||
*msg++ = digital->channel.major & 0xff;
|
||||
*msg++ = digital->channel.minor >> 8;
|
||||
*msg++ = digital->channel.minor & 0xff;
|
||||
*msg++ = 0;
|
||||
|
|
@ -323,6 +324,7 @@ static inline void cec_msg_record_on_phys_addr(struct cec_msg *msg,
|
|||
}
|
||||
|
||||
static inline void cec_msg_record_on(struct cec_msg *msg,
|
||||
bool reply,
|
||||
const struct cec_op_record_src *rec_src)
|
||||
{
|
||||
switch (rec_src->type) {
|
||||
|
|
@ -346,6 +348,7 @@ static inline void cec_msg_record_on(struct cec_msg *msg,
|
|||
rec_src->ext_phys_addr.phys_addr);
|
||||
break;
|
||||
}
|
||||
msg->reply = reply ? CEC_MSG_RECORD_STATUS : 0;
|
||||
}
|
||||
|
||||
static inline void cec_ops_record_on(const struct cec_msg *msg,
|
||||
|
|
@ -1141,6 +1144,75 @@ static inline void cec_msg_give_device_vendor_id(struct cec_msg *msg,
|
|||
msg->reply = reply ? CEC_MSG_DEVICE_VENDOR_ID : 0;
|
||||
}
|
||||
|
||||
static inline void cec_msg_vendor_command(struct cec_msg *msg,
|
||||
__u8 size, const __u8 *vendor_cmd)
|
||||
{
|
||||
if (size > 14)
|
||||
size = 14;
|
||||
msg->len = 2 + size;
|
||||
msg->msg[1] = CEC_MSG_VENDOR_COMMAND;
|
||||
memcpy(msg->msg + 2, vendor_cmd, size);
|
||||
}
|
||||
|
||||
static inline void cec_ops_vendor_command(const struct cec_msg *msg,
|
||||
__u8 *size,
|
||||
const __u8 **vendor_cmd)
|
||||
{
|
||||
*size = msg->len - 2;
|
||||
|
||||
if (*size > 14)
|
||||
*size = 14;
|
||||
*vendor_cmd = msg->msg + 2;
|
||||
}
|
||||
|
||||
static inline void cec_msg_vendor_command_with_id(struct cec_msg *msg,
|
||||
__u32 vendor_id, __u8 size,
|
||||
const __u8 *vendor_cmd)
|
||||
{
|
||||
if (size > 11)
|
||||
size = 11;
|
||||
msg->len = 5 + size;
|
||||
msg->msg[1] = CEC_MSG_VENDOR_COMMAND_WITH_ID;
|
||||
msg->msg[2] = vendor_id >> 16;
|
||||
msg->msg[3] = (vendor_id >> 8) & 0xff;
|
||||
msg->msg[4] = vendor_id & 0xff;
|
||||
memcpy(msg->msg + 5, vendor_cmd, size);
|
||||
}
|
||||
|
||||
static inline void cec_ops_vendor_command_with_id(const struct cec_msg *msg,
|
||||
__u32 *vendor_id, __u8 *size,
|
||||
const __u8 **vendor_cmd)
|
||||
{
|
||||
*size = msg->len - 5;
|
||||
|
||||
if (*size > 11)
|
||||
*size = 11;
|
||||
*vendor_id = (msg->msg[2] << 16) | (msg->msg[3] << 8) | msg->msg[4];
|
||||
*vendor_cmd = msg->msg + 5;
|
||||
}
|
||||
|
||||
static inline void cec_msg_vendor_remote_button_down(struct cec_msg *msg,
|
||||
__u8 size,
|
||||
const __u8 *rc_code)
|
||||
{
|
||||
if (size > 14)
|
||||
size = 14;
|
||||
msg->len = 2 + size;
|
||||
msg->msg[1] = CEC_MSG_VENDOR_REMOTE_BUTTON_DOWN;
|
||||
memcpy(msg->msg + 2, rc_code, size);
|
||||
}
|
||||
|
||||
static inline void cec_ops_vendor_remote_button_down(const struct cec_msg *msg,
|
||||
__u8 *size,
|
||||
const __u8 **rc_code)
|
||||
{
|
||||
*size = msg->len - 2;
|
||||
|
||||
if (*size > 14)
|
||||
*size = 14;
|
||||
*rc_code = msg->msg + 2;
|
||||
}
|
||||
|
||||
static inline void cec_msg_vendor_remote_button_up(struct cec_msg *msg)
|
||||
{
|
||||
msg->len = 2;
|
||||
|
|
@ -1277,7 +1349,7 @@ static inline void cec_msg_user_control_pressed(struct cec_msg *msg,
|
|||
msg->len += 4;
|
||||
msg->msg[3] = (ui_cmd->channel_identifier.channel_number_fmt << 2) |
|
||||
(ui_cmd->channel_identifier.major >> 8);
|
||||
msg->msg[4] = ui_cmd->channel_identifier.major && 0xff;
|
||||
msg->msg[4] = ui_cmd->channel_identifier.major & 0xff;
|
||||
msg->msg[5] = ui_cmd->channel_identifier.minor >> 8;
|
||||
msg->msg[6] = ui_cmd->channel_identifier.minor & 0xff;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -364,7 +364,7 @@ struct cec_caps {
|
|||
* @num_log_addrs: how many logical addresses should be claimed. Set by the
|
||||
* caller.
|
||||
* @vendor_id: the vendor ID of the device. Set by the caller.
|
||||
* @flags: set to 0.
|
||||
* @flags: flags.
|
||||
* @osd_name: the OSD name of the device. Set by the caller.
|
||||
* @primary_device_type: the primary device type for each logical address.
|
||||
* Set by the caller.
|
||||
|
|
@ -389,6 +389,9 @@ struct cec_log_addrs {
|
|||
__u8 features[CEC_MAX_LOG_ADDRS][12];
|
||||
};
|
||||
|
||||
/* Allow a fallback to unregistered */
|
||||
#define CEC_LOG_ADDRS_FL_ALLOW_UNREG_FALLBACK (1 << 0)
|
||||
|
||||
/* Events */
|
||||
|
||||
/* Event that occurs when the adapter state changes */
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@
|
|||
#define __compiler_offsetof(a, b) \
|
||||
__builtin_offsetof(a, b)
|
||||
|
||||
#if GCC_VERSION >= 40100 && GCC_VERSION < 40600
|
||||
#if GCC_VERSION >= 40100
|
||||
# define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
|
||||
#endif
|
||||
|
||||
|
|
@ -242,7 +242,11 @@
|
|||
*/
|
||||
#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
|
||||
|
||||
#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
|
||||
/*
|
||||
* sparse (__CHECKER__) pretends to be gcc, but can't do constant
|
||||
* folding in __builtin_bswap*() (yet), so don't set these for it.
|
||||
*/
|
||||
#if defined(CONFIG_ARCH_USE_BUILTIN_BSWAP) && !defined(__CHECKER__)
|
||||
#if GCC_VERSION >= 40400
|
||||
#define __HAVE_BUILTIN_BSWAP32__
|
||||
#define __HAVE_BUILTIN_BSWAP64__
|
||||
|
|
@ -250,7 +254,7 @@
|
|||
#if GCC_VERSION >= 40800
|
||||
#define __HAVE_BUILTIN_BSWAP16__
|
||||
#endif
|
||||
#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
|
||||
#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP && !__CHECKER__ */
|
||||
|
||||
#if GCC_VERSION >= 50000
|
||||
#define KASAN_ABI_VERSION 4
|
||||
|
|
|
|||
|
|
@ -527,13 +527,14 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
|
|||
* object's lifetime is managed by something other than RCU. That
|
||||
* "something other" might be reference counting or simple immortality.
|
||||
*
|
||||
* The seemingly unused void * variable is to validate @p is indeed a pointer
|
||||
* type. All pointer types silently cast to void *.
|
||||
* The seemingly unused variable ___typecheck_p validates that @p is
|
||||
* indeed a pointer type by using a pointer to typeof(*p) as the type.
|
||||
* Taking a pointer to typeof(*p) again is needed in case p is void *.
|
||||
*/
|
||||
#define lockless_dereference(p) \
|
||||
({ \
|
||||
typeof(p) _________p1 = READ_ONCE(p); \
|
||||
__maybe_unused const void * const _________p2 = _________p1; \
|
||||
typeof(*(p)) *___typecheck_p __maybe_unused; \
|
||||
smp_read_barrier_depends(); /* Dependency order vs. p above. */ \
|
||||
(_________p1); \
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef __CPUHOTPLUG_H
|
||||
#define __CPUHOTPLUG_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum cpuhp_state {
|
||||
CPUHP_OFFLINE,
|
||||
CPUHP_CREATE_THREADS,
|
||||
|
|
|
|||
|
|
@ -118,6 +118,15 @@ typedef struct {
|
|||
u32 imagesize;
|
||||
} efi_capsule_header_t;
|
||||
|
||||
struct efi_boot_memmap {
|
||||
efi_memory_desc_t **map;
|
||||
unsigned long *map_size;
|
||||
unsigned long *desc_size;
|
||||
u32 *desc_ver;
|
||||
unsigned long *key_ptr;
|
||||
unsigned long *buff_size;
|
||||
};
|
||||
|
||||
/*
|
||||
* EFI capsule flags
|
||||
*/
|
||||
|
|
@ -946,7 +955,7 @@ extern int efi_memattr_apply_permissions(struct mm_struct *mm,
|
|||
/* Iterate through an efi_memory_map */
|
||||
#define for_each_efi_memory_desc_in_map(m, md) \
|
||||
for ((md) = (m)->map; \
|
||||
((void *)(md) + (m)->desc_size) <= (m)->map_end; \
|
||||
(md) && ((void *)(md) + (m)->desc_size) <= (m)->map_end; \
|
||||
(md) = (void *)(md) + (m)->desc_size)
|
||||
|
||||
/**
|
||||
|
|
@ -1371,11 +1380,7 @@ char *efi_convert_cmdline(efi_system_table_t *sys_table_arg,
|
|||
efi_loaded_image_t *image, int *cmd_line_len);
|
||||
|
||||
efi_status_t efi_get_memory_map(efi_system_table_t *sys_table_arg,
|
||||
efi_memory_desc_t **map,
|
||||
unsigned long *map_size,
|
||||
unsigned long *desc_size,
|
||||
u32 *desc_ver,
|
||||
unsigned long *key_ptr);
|
||||
struct efi_boot_memmap *map);
|
||||
|
||||
efi_status_t efi_low_alloc(efi_system_table_t *sys_table_arg,
|
||||
unsigned long size, unsigned long align,
|
||||
|
|
@ -1457,4 +1462,14 @@ extern void efi_call_virt_check_flags(unsigned long flags, const char *call);
|
|||
arch_efi_call_virt_teardown(); \
|
||||
})
|
||||
|
||||
typedef efi_status_t (*efi_exit_boot_map_processing)(
|
||||
efi_system_table_t *sys_table_arg,
|
||||
struct efi_boot_memmap *map,
|
||||
void *priv);
|
||||
|
||||
efi_status_t efi_exit_boot_services(efi_system_table_t *sys_table,
|
||||
void *handle,
|
||||
struct efi_boot_memmap *map,
|
||||
void *priv,
|
||||
efi_exit_boot_map_processing priv_func);
|
||||
#endif /* _LINUX_EFI_H */
|
||||
|
|
|
|||
|
|
@ -574,6 +574,7 @@ static inline void mapping_allow_writable(struct address_space *mapping)
|
|||
|
||||
struct posix_acl;
|
||||
#define ACL_NOT_CACHED ((void *)(-1))
|
||||
#define ACL_DONT_CACHE ((void *)(-3))
|
||||
|
||||
static inline struct posix_acl *
|
||||
uncached_acl_sentinel(struct task_struct *task)
|
||||
|
|
|
|||
|
|
@ -274,8 +274,7 @@ extern void fscrypt_restore_control_page(struct page *);
|
|||
extern int fscrypt_zeroout_range(struct inode *, pgoff_t, sector_t,
|
||||
unsigned int);
|
||||
/* policy.c */
|
||||
extern int fscrypt_process_policy(struct inode *,
|
||||
const struct fscrypt_policy *);
|
||||
extern int fscrypt_process_policy(struct file *, const struct fscrypt_policy *);
|
||||
extern int fscrypt_get_policy(struct inode *, struct fscrypt_policy *);
|
||||
extern int fscrypt_has_permitted_context(struct inode *, struct inode *);
|
||||
extern int fscrypt_inherit_context(struct inode *, struct inode *,
|
||||
|
|
@ -345,7 +344,7 @@ static inline int fscrypt_notsupp_zeroout_range(struct inode *i, pgoff_t p,
|
|||
}
|
||||
|
||||
/* policy.c */
|
||||
static inline int fscrypt_notsupp_process_policy(struct inode *i,
|
||||
static inline int fscrypt_notsupp_process_policy(struct file *f,
|
||||
const struct fscrypt_policy *p)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
|
|
|
|||
|
|
@ -148,6 +148,7 @@ struct fsnotify_group {
|
|||
#define FS_PRIO_1 1 /* fanotify content based access control */
|
||||
#define FS_PRIO_2 2 /* fanotify pre-content access */
|
||||
unsigned int priority;
|
||||
bool shutdown; /* group is being shut down, don't queue more events */
|
||||
|
||||
/* stores all fastpath marks assoc with this group so they can be cleaned on unregister */
|
||||
struct mutex mark_mutex; /* protect marks_list */
|
||||
|
|
@ -179,7 +180,6 @@ struct fsnotify_group {
|
|||
spinlock_t access_lock;
|
||||
struct list_head access_list;
|
||||
wait_queue_head_t access_waitq;
|
||||
atomic_t bypass_perm;
|
||||
#endif /* CONFIG_FANOTIFY_ACCESS_PERMISSIONS */
|
||||
int f_flags;
|
||||
unsigned int max_marks;
|
||||
|
|
@ -292,6 +292,8 @@ extern struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *op
|
|||
extern void fsnotify_get_group(struct fsnotify_group *group);
|
||||
/* drop reference on a group from fsnotify_alloc_group */
|
||||
extern void fsnotify_put_group(struct fsnotify_group *group);
|
||||
/* group destruction begins, stop queuing new events */
|
||||
extern void fsnotify_group_stop_queueing(struct fsnotify_group *group);
|
||||
/* destroy group */
|
||||
extern void fsnotify_destroy_group(struct fsnotify_group *group);
|
||||
/* fasync handler function */
|
||||
|
|
@ -304,8 +306,6 @@ extern int fsnotify_add_event(struct fsnotify_group *group,
|
|||
struct fsnotify_event *event,
|
||||
int (*merge)(struct list_head *,
|
||||
struct fsnotify_event *));
|
||||
/* Remove passed event from groups notification queue */
|
||||
extern void fsnotify_remove_event(struct fsnotify_group *group, struct fsnotify_event *event);
|
||||
/* true if the group notification queue is empty */
|
||||
extern bool fsnotify_notify_queue_is_empty(struct fsnotify_group *group);
|
||||
/* return, but do not dequeue the first event on the notification queue */
|
||||
|
|
|
|||
|
|
@ -304,6 +304,8 @@ struct tegra_mipi_device;
|
|||
|
||||
struct tegra_mipi_device *tegra_mipi_request(struct device *device);
|
||||
void tegra_mipi_free(struct tegra_mipi_device *device);
|
||||
int tegra_mipi_enable(struct tegra_mipi_device *device);
|
||||
int tegra_mipi_disable(struct tegra_mipi_device *device);
|
||||
int tegra_mipi_calibrate(struct tegra_mipi_device *device);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ void iio_swt_group_init_type_name(struct iio_sw_trigger *t,
|
|||
const char *name,
|
||||
struct config_item_type *type)
|
||||
{
|
||||
#ifdef CONFIG_CONFIGFS_FS
|
||||
#if IS_ENABLED(CONFIG_CONFIGFS_FS)
|
||||
config_group_init_type_name(&t->group, name, type);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,11 @@ struct vm_fault;
|
|||
#define IOMAP_MAPPED 0x03 /* blocks allocated @blkno */
|
||||
#define IOMAP_UNWRITTEN 0x04 /* blocks allocated @blkno in unwritten state */
|
||||
|
||||
/*
|
||||
* Flags for iomap mappings:
|
||||
*/
|
||||
#define IOMAP_F_MERGED 0x01 /* contains multiple blocks/extents */
|
||||
|
||||
/*
|
||||
* Magic value for blkno:
|
||||
*/
|
||||
|
|
@ -27,7 +32,8 @@ struct iomap {
|
|||
sector_t blkno; /* 1st sector of mapping, 512b units */
|
||||
loff_t offset; /* file offset of mapping, bytes */
|
||||
u64 length; /* length of mapping, bytes */
|
||||
int type; /* type of mapping */
|
||||
u16 type; /* type of mapping */
|
||||
u16 flags; /* flags for mapping */
|
||||
struct block_device *bdev; /* block device for I/O */
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -945,6 +945,16 @@ static inline void irq_gc_lock(struct irq_chip_generic *gc) { }
|
|||
static inline void irq_gc_unlock(struct irq_chip_generic *gc) { }
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The irqsave variants are for usage in non interrupt code. Do not use
|
||||
* them in irq_chip callbacks. Use irq_gc_lock() instead.
|
||||
*/
|
||||
#define irq_gc_lock_irqsave(gc, flags) \
|
||||
raw_spin_lock_irqsave(&(gc)->lock, flags)
|
||||
|
||||
#define irq_gc_unlock_irqrestore(gc, flags) \
|
||||
raw_spin_unlock_irqrestore(&(gc)->lock, flags)
|
||||
|
||||
static inline void irq_reg_writel(struct irq_chip_generic *gc,
|
||||
u32 val, int reg_offset)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -337,6 +337,7 @@
|
|||
*/
|
||||
#define E_ITS_MOVI_UNMAPPED_INTERRUPT 0x010107
|
||||
#define E_ITS_MOVI_UNMAPPED_COLLECTION 0x010109
|
||||
#define E_ITS_INT_UNMAPPED_INTERRUPT 0x010307
|
||||
#define E_ITS_CLEAR_UNMAPPED_INTERRUPT 0x010507
|
||||
#define E_ITS_MAPD_DEVICE_OOR 0x010801
|
||||
#define E_ITS_MAPC_PROCNUM_OOR 0x010902
|
||||
|
|
|
|||
|
|
@ -195,6 +195,7 @@ static inline bool vma_migratable(struct vm_area_struct *vma)
|
|||
}
|
||||
|
||||
extern int mpol_misplaced(struct page *, struct vm_area_struct *, unsigned long);
|
||||
extern void mpol_put_task_policy(struct task_struct *);
|
||||
|
||||
#else
|
||||
|
||||
|
|
@ -297,5 +298,8 @@ static inline int mpol_misplaced(struct page *page, struct vm_area_struct *vma,
|
|||
return -1; /* no node preference */
|
||||
}
|
||||
|
||||
static inline void mpol_put_task_policy(struct task_struct *task)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_NUMA */
|
||||
#endif
|
||||
|
|
|
|||
153
include/linux/mfd/da8xx-cfgchip.h
Normal file
153
include/linux/mfd/da8xx-cfgchip.h
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
/*
|
||||
* TI DaVinci DA8xx CHIPCFGx registers for syscon consumers.
|
||||
*
|
||||
* Copyright (C) 2016 David Lechner <david@lechnology.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MFD_DA8XX_CFGCHIP_H
|
||||
#define __LINUX_MFD_DA8XX_CFGCHIP_H
|
||||
|
||||
#include <linux/bitops.h>
|
||||
|
||||
/* register offset (32-bit registers) */
|
||||
#define CFGCHIP(n) ((n) * 4)
|
||||
|
||||
/* CFGCHIP0 (PLL0/EDMA3_0) register bits */
|
||||
#define CFGCHIP0_PLL_MASTER_LOCK BIT(4)
|
||||
#define CFGCHIP0_EDMA30TC1DBS(n) ((n) << 2)
|
||||
#define CFGCHIP0_EDMA30TC1DBS_MASK CFGCHIP0_EDMA30TC1DBS(0x3)
|
||||
#define CFGCHIP0_EDMA30TC1DBS_16 CFGCHIP0_EDMA30TC1DBS(0x0)
|
||||
#define CFGCHIP0_EDMA30TC1DBS_32 CFGCHIP0_EDMA30TC1DBS(0x1)
|
||||
#define CFGCHIP0_EDMA30TC1DBS_64 CFGCHIP0_EDMA30TC1DBS(0x2)
|
||||
#define CFGCHIP0_EDMA30TC0DBS(n) ((n) << 0)
|
||||
#define CFGCHIP0_EDMA30TC0DBS_MASK CFGCHIP0_EDMA30TC0DBS(0x3)
|
||||
#define CFGCHIP0_EDMA30TC0DBS_16 CFGCHIP0_EDMA30TC0DBS(0x0)
|
||||
#define CFGCHIP0_EDMA30TC0DBS_32 CFGCHIP0_EDMA30TC0DBS(0x1)
|
||||
#define CFGCHIP0_EDMA30TC0DBS_64 CFGCHIP0_EDMA30TC0DBS(0x2)
|
||||
|
||||
/* CFGCHIP1 (eCAP/HPI/EDMA3_1/eHRPWM TBCLK/McASP0 AMUTEIN) register bits */
|
||||
#define CFGCHIP1_CAP2SRC(n) ((n) << 27)
|
||||
#define CFGCHIP1_CAP2SRC_MASK CFGCHIP1_CAP2SRC(0x1f)
|
||||
#define CFGCHIP1_CAP2SRC_ECAP_PIN CFGCHIP1_CAP2SRC(0x0)
|
||||
#define CFGCHIP1_CAP2SRC_MCASP0_TX CFGCHIP1_CAP2SRC(0x1)
|
||||
#define CFGCHIP1_CAP2SRC_MCASP0_RX CFGCHIP1_CAP2SRC(0x2)
|
||||
#define CFGCHIP1_CAP2SRC_EMAC_C0_RX_THRESHOLD CFGCHIP1_CAP2SRC(0x7)
|
||||
#define CFGCHIP1_CAP2SRC_EMAC_C0_RX CFGCHIP1_CAP2SRC(0x8)
|
||||
#define CFGCHIP1_CAP2SRC_EMAC_C0_TX CFGCHIP1_CAP2SRC(0x9)
|
||||
#define CFGCHIP1_CAP2SRC_EMAC_C0_MISC CFGCHIP1_CAP2SRC(0xa)
|
||||
#define CFGCHIP1_CAP2SRC_EMAC_C1_RX_THRESHOLD CFGCHIP1_CAP2SRC(0xb)
|
||||
#define CFGCHIP1_CAP2SRC_EMAC_C1_RX CFGCHIP1_CAP2SRC(0xc)
|
||||
#define CFGCHIP1_CAP2SRC_EMAC_C1_TX CFGCHIP1_CAP2SRC(0xd)
|
||||
#define CFGCHIP1_CAP2SRC_EMAC_C1_MISC CFGCHIP1_CAP2SRC(0xe)
|
||||
#define CFGCHIP1_CAP2SRC_EMAC_C2_RX_THRESHOLD CFGCHIP1_CAP2SRC(0xf)
|
||||
#define CFGCHIP1_CAP2SRC_EMAC_C2_RX CFGCHIP1_CAP2SRC(0x10)
|
||||
#define CFGCHIP1_CAP2SRC_EMAC_C2_TX CFGCHIP1_CAP2SRC(0x11)
|
||||
#define CFGCHIP1_CAP2SRC_EMAC_C2_MISC CFGCHIP1_CAP2SRC(0x12)
|
||||
#define CFGCHIP1_CAP1SRC(n) ((n) << 22)
|
||||
#define CFGCHIP1_CAP1SRC_MASK CFGCHIP1_CAP1SRC(0x1f)
|
||||
#define CFGCHIP1_CAP1SRC_ECAP_PIN CFGCHIP1_CAP1SRC(0x0)
|
||||
#define CFGCHIP1_CAP1SRC_MCASP0_TX CFGCHIP1_CAP1SRC(0x1)
|
||||
#define CFGCHIP1_CAP1SRC_MCASP0_RX CFGCHIP1_CAP1SRC(0x2)
|
||||
#define CFGCHIP1_CAP1SRC_EMAC_C0_RX_THRESHOLD CFGCHIP1_CAP1SRC(0x7)
|
||||
#define CFGCHIP1_CAP1SRC_EMAC_C0_RX CFGCHIP1_CAP1SRC(0x8)
|
||||
#define CFGCHIP1_CAP1SRC_EMAC_C0_TX CFGCHIP1_CAP1SRC(0x9)
|
||||
#define CFGCHIP1_CAP1SRC_EMAC_C0_MISC CFGCHIP1_CAP1SRC(0xa)
|
||||
#define CFGCHIP1_CAP1SRC_EMAC_C1_RX_THRESHOLD CFGCHIP1_CAP1SRC(0xb)
|
||||
#define CFGCHIP1_CAP1SRC_EMAC_C1_RX CFGCHIP1_CAP1SRC(0xc)
|
||||
#define CFGCHIP1_CAP1SRC_EMAC_C1_TX CFGCHIP1_CAP1SRC(0xd)
|
||||
#define CFGCHIP1_CAP1SRC_EMAC_C1_MISC CFGCHIP1_CAP1SRC(0xe)
|
||||
#define CFGCHIP1_CAP1SRC_EMAC_C2_RX_THRESHOLD CFGCHIP1_CAP1SRC(0xf)
|
||||
#define CFGCHIP1_CAP1SRC_EMAC_C2_RX CFGCHIP1_CAP1SRC(0x10)
|
||||
#define CFGCHIP1_CAP1SRC_EMAC_C2_TX CFGCHIP1_CAP1SRC(0x11)
|
||||
#define CFGCHIP1_CAP1SRC_EMAC_C2_MISC CFGCHIP1_CAP1SRC(0x12)
|
||||
#define CFGCHIP1_CAP0SRC(n) ((n) << 17)
|
||||
#define CFGCHIP1_CAP0SRC_MASK CFGCHIP1_CAP0SRC(0x1f)
|
||||
#define CFGCHIP1_CAP0SRC_ECAP_PIN CFGCHIP1_CAP0SRC(0x0)
|
||||
#define CFGCHIP1_CAP0SRC_MCASP0_TX CFGCHIP1_CAP0SRC(0x1)
|
||||
#define CFGCHIP1_CAP0SRC_MCASP0_RX CFGCHIP1_CAP0SRC(0x2)
|
||||
#define CFGCHIP1_CAP0SRC_EMAC_C0_RX_THRESHOLD CFGCHIP1_CAP0SRC(0x7)
|
||||
#define CFGCHIP1_CAP0SRC_EMAC_C0_RX CFGCHIP1_CAP0SRC(0x8)
|
||||
#define CFGCHIP1_CAP0SRC_EMAC_C0_TX CFGCHIP1_CAP0SRC(0x9)
|
||||
#define CFGCHIP1_CAP0SRC_EMAC_C0_MISC CFGCHIP1_CAP0SRC(0xa)
|
||||
#define CFGCHIP1_CAP0SRC_EMAC_C1_RX_THRESHOLD CFGCHIP1_CAP0SRC(0xb)
|
||||
#define CFGCHIP1_CAP0SRC_EMAC_C1_RX CFGCHIP1_CAP0SRC(0xc)
|
||||
#define CFGCHIP1_CAP0SRC_EMAC_C1_TX CFGCHIP1_CAP0SRC(0xd)
|
||||
#define CFGCHIP1_CAP0SRC_EMAC_C1_MISC CFGCHIP1_CAP0SRC(0xe)
|
||||
#define CFGCHIP1_CAP0SRC_EMAC_C2_RX_THRESHOLD CFGCHIP1_CAP0SRC(0xf)
|
||||
#define CFGCHIP1_CAP0SRC_EMAC_C2_RX CFGCHIP1_CAP0SRC(0x10)
|
||||
#define CFGCHIP1_CAP0SRC_EMAC_C2_TX CFGCHIP1_CAP0SRC(0x11)
|
||||
#define CFGCHIP1_CAP0SRC_EMAC_C2_MISC CFGCHIP1_CAP0SRC(0x12)
|
||||
#define CFGCHIP1_HPIBYTEAD BIT(16)
|
||||
#define CFGCHIP1_HPIENA BIT(15)
|
||||
#define CFGCHIP0_EDMA31TC0DBS(n) ((n) << 13)
|
||||
#define CFGCHIP0_EDMA31TC0DBS_MASK CFGCHIP0_EDMA31TC0DBS(0x3)
|
||||
#define CFGCHIP0_EDMA31TC0DBS_16 CFGCHIP0_EDMA31TC0DBS(0x0)
|
||||
#define CFGCHIP0_EDMA31TC0DBS_32 CFGCHIP0_EDMA31TC0DBS(0x1)
|
||||
#define CFGCHIP0_EDMA31TC0DBS_64 CFGCHIP0_EDMA31TC0DBS(0x2)
|
||||
#define CFGCHIP1_TBCLKSYNC BIT(12)
|
||||
#define CFGCHIP1_AMUTESEL0(n) ((n) << 0)
|
||||
#define CFGCHIP1_AMUTESEL0_MASK CFGCHIP1_AMUTESEL0(0xf)
|
||||
#define CFGCHIP1_AMUTESEL0_LOW CFGCHIP1_AMUTESEL0(0x0)
|
||||
#define CFGCHIP1_AMUTESEL0_BANK_0 CFGCHIP1_AMUTESEL0(0x1)
|
||||
#define CFGCHIP1_AMUTESEL0_BANK_1 CFGCHIP1_AMUTESEL0(0x2)
|
||||
#define CFGCHIP1_AMUTESEL0_BANK_2 CFGCHIP1_AMUTESEL0(0x3)
|
||||
#define CFGCHIP1_AMUTESEL0_BANK_3 CFGCHIP1_AMUTESEL0(0x4)
|
||||
#define CFGCHIP1_AMUTESEL0_BANK_4 CFGCHIP1_AMUTESEL0(0x5)
|
||||
#define CFGCHIP1_AMUTESEL0_BANK_5 CFGCHIP1_AMUTESEL0(0x6)
|
||||
#define CFGCHIP1_AMUTESEL0_BANK_6 CFGCHIP1_AMUTESEL0(0x7)
|
||||
#define CFGCHIP1_AMUTESEL0_BANK_7 CFGCHIP1_AMUTESEL0(0x8)
|
||||
|
||||
/* CFGCHIP2 (USB PHY) register bits */
|
||||
#define CFGCHIP2_PHYCLKGD BIT(17)
|
||||
#define CFGCHIP2_VBUSSENSE BIT(16)
|
||||
#define CFGCHIP2_RESET BIT(15)
|
||||
#define CFGCHIP2_OTGMODE(n) ((n) << 13)
|
||||
#define CFGCHIP2_OTGMODE_MASK CFGCHIP2_OTGMODE(0x3)
|
||||
#define CFGCHIP2_OTGMODE_NO_OVERRIDE CFGCHIP2_OTGMODE(0x0)
|
||||
#define CFGCHIP2_OTGMODE_FORCE_HOST CFGCHIP2_OTGMODE(0x1)
|
||||
#define CFGCHIP2_OTGMODE_FORCE_DEVICE CFGCHIP2_OTGMODE(0x2)
|
||||
#define CFGCHIP2_OTGMODE_FORCE_HOST_VBUS_LOW CFGCHIP2_OTGMODE(0x3)
|
||||
#define CFGCHIP2_USB1PHYCLKMUX BIT(12)
|
||||
#define CFGCHIP2_USB2PHYCLKMUX BIT(11)
|
||||
#define CFGCHIP2_PHYPWRDN BIT(10)
|
||||
#define CFGCHIP2_OTGPWRDN BIT(9)
|
||||
#define CFGCHIP2_DATPOL BIT(8)
|
||||
#define CFGCHIP2_USB1SUSPENDM BIT(7)
|
||||
#define CFGCHIP2_PHY_PLLON BIT(6)
|
||||
#define CFGCHIP2_SESENDEN BIT(5)
|
||||
#define CFGCHIP2_VBDTCTEN BIT(4)
|
||||
#define CFGCHIP2_REFFREQ(n) ((n) << 0)
|
||||
#define CFGCHIP2_REFFREQ_MASK CFGCHIP2_REFFREQ(0xf)
|
||||
#define CFGCHIP2_REFFREQ_12MHZ CFGCHIP2_REFFREQ(0x1)
|
||||
#define CFGCHIP2_REFFREQ_24MHZ CFGCHIP2_REFFREQ(0x2)
|
||||
#define CFGCHIP2_REFFREQ_48MHZ CFGCHIP2_REFFREQ(0x3)
|
||||
#define CFGCHIP2_REFFREQ_19_2MHZ CFGCHIP2_REFFREQ(0x4)
|
||||
#define CFGCHIP2_REFFREQ_38_4MHZ CFGCHIP2_REFFREQ(0x5)
|
||||
#define CFGCHIP2_REFFREQ_13MHZ CFGCHIP2_REFFREQ(0x6)
|
||||
#define CFGCHIP2_REFFREQ_26MHZ CFGCHIP2_REFFREQ(0x7)
|
||||
#define CFGCHIP2_REFFREQ_20MHZ CFGCHIP2_REFFREQ(0x8)
|
||||
#define CFGCHIP2_REFFREQ_40MHZ CFGCHIP2_REFFREQ(0x9)
|
||||
|
||||
/* CFGCHIP3 (EMAC/uPP/PLL1/ASYNC3/PRU/DIV4.5/EMIFA) register bits */
|
||||
#define CFGCHIP3_RMII_SEL BIT(8)
|
||||
#define CFGCHIP3_UPP_TX_CLKSRC BIT(6)
|
||||
#define CFGCHIP3_PLL1_MASTER_LOCK BIT(5)
|
||||
#define CFGCHIP3_ASYNC3_CLKSRC BIT(4)
|
||||
#define CFGCHIP3_PRUEVTSEL BIT(3)
|
||||
#define CFGCHIP3_DIV45PENA BIT(2)
|
||||
#define CFGCHIP3_EMA_CLKSRC BIT(1)
|
||||
|
||||
/* CFGCHIP4 (McASP0 AMUNTEIN) register bits */
|
||||
#define CFGCHIP4_AMUTECLR0 BIT(0)
|
||||
|
||||
#endif /* __LINUX_MFD_DA8XX_CFGCHIP_H */
|
||||
|
|
@ -138,16 +138,16 @@
|
|||
/*
|
||||
* time in us for processing a single channel, calculated as follows:
|
||||
*
|
||||
* num cycles = open delay + (sample delay + conv time) * averaging
|
||||
* max num cycles = open delay + (sample delay + conv time) * averaging
|
||||
*
|
||||
* num cycles: 152 + (1 + 13) * 16 = 376
|
||||
* max num cycles: 262143 + (255 + 13) * 16 = 266431
|
||||
*
|
||||
* clock frequency: 26MHz / 8 = 3.25MHz
|
||||
* clock period: 1 / 3.25MHz = 308ns
|
||||
*
|
||||
* processing time: 376 * 308ns = 116us
|
||||
* max processing time: 266431 * 308ns = 83ms(approx)
|
||||
*/
|
||||
#define IDLE_TIMEOUT 116 /* microsec */
|
||||
#define IDLE_TIMEOUT 83 /* milliseconds */
|
||||
|
||||
#define TSCADC_CELLS 2
|
||||
|
||||
|
|
|
|||
|
|
@ -6710,9 +6710,10 @@ struct mlx5_ifc_pude_reg_bits {
|
|||
};
|
||||
|
||||
struct mlx5_ifc_ptys_reg_bits {
|
||||
u8 an_disable_cap[0x1];
|
||||
u8 reserved_at_0[0x1];
|
||||
u8 an_disable_admin[0x1];
|
||||
u8 reserved_at_2[0x6];
|
||||
u8 an_disable_cap[0x1];
|
||||
u8 reserved_at_3[0x5];
|
||||
u8 local_port[0x8];
|
||||
u8 reserved_at_10[0xd];
|
||||
u8 proto_mask[0x3];
|
||||
|
|
|
|||
|
|
@ -2014,6 +2014,7 @@ extern void mm_drop_all_locks(struct mm_struct *mm);
|
|||
|
||||
extern void set_mm_exe_file(struct mm_struct *mm, struct file *new_exe_file);
|
||||
extern struct file *get_mm_exe_file(struct mm_struct *mm);
|
||||
extern struct file *get_task_exe_file(struct task_struct *task);
|
||||
|
||||
extern bool may_expand_vm(struct mm_struct *, vm_flags_t, unsigned long npages);
|
||||
extern void vm_stat_account(struct mm_struct *, vm_flags_t, long npages);
|
||||
|
|
|
|||
|
|
@ -828,9 +828,21 @@ unsigned long __init node_memmap_size_bytes(int, unsigned long, unsigned long);
|
|||
*/
|
||||
#define zone_idx(zone) ((zone) - (zone)->zone_pgdat->node_zones)
|
||||
|
||||
static inline int populated_zone(struct zone *zone)
|
||||
/*
|
||||
* Returns true if a zone has pages managed by the buddy allocator.
|
||||
* All the reclaim decisions have to use this function rather than
|
||||
* populated_zone(). If the whole zone is reserved then we can easily
|
||||
* end up with populated_zone() && !managed_zone().
|
||||
*/
|
||||
static inline bool managed_zone(struct zone *zone)
|
||||
{
|
||||
return (!!zone->present_pages);
|
||||
return zone->managed_pages;
|
||||
}
|
||||
|
||||
/* Returns true if a zone has memory */
|
||||
static inline bool populated_zone(struct zone *zone)
|
||||
{
|
||||
return zone->present_pages;
|
||||
}
|
||||
|
||||
extern int movable_zone;
|
||||
|
|
|
|||
|
|
@ -3267,6 +3267,7 @@ static inline void napi_free_frags(struct napi_struct *napi)
|
|||
napi->skb = NULL;
|
||||
}
|
||||
|
||||
bool netdev_is_rx_handler_busy(struct net_device *dev);
|
||||
int netdev_rx_handler_register(struct net_device *dev,
|
||||
rx_handler_func_t *rx_handler,
|
||||
void *rx_handler_data);
|
||||
|
|
@ -3891,8 +3892,7 @@ void netdev_default_l2upper_neigh_destroy(struct net_device *dev,
|
|||
extern u8 netdev_rss_key[NETDEV_RSS_KEY_LEN] __read_mostly;
|
||||
void netdev_rss_key_fill(void *buffer, size_t len);
|
||||
|
||||
int dev_get_nest_level(struct net_device *dev,
|
||||
bool (*type_check)(const struct net_device *dev));
|
||||
int dev_get_nest_level(struct net_device *dev);
|
||||
int skb_checksum_help(struct sk_buff *skb);
|
||||
struct sk_buff *__skb_gso_segment(struct sk_buff *skb,
|
||||
netdev_features_t features, bool tx_path);
|
||||
|
|
|
|||
|
|
@ -15,6 +15,6 @@ struct nf_acct;
|
|||
struct nf_acct *nfnl_acct_find_get(struct net *net, const char *filter_name);
|
||||
void nfnl_acct_put(struct nf_acct *acct);
|
||||
void nfnl_acct_update(const struct sk_buff *skb, struct nf_acct *nfacct);
|
||||
extern int nfnl_acct_overquota(const struct sk_buff *skb,
|
||||
struct nf_acct *nfacct);
|
||||
int nfnl_acct_overquota(struct net *net, const struct sk_buff *skb,
|
||||
struct nf_acct *nfacct);
|
||||
#endif /* _NFNL_ACCT_H */
|
||||
|
|
|
|||
|
|
@ -794,7 +794,7 @@ struct nvmf_connect_command {
|
|||
};
|
||||
|
||||
struct nvmf_connect_data {
|
||||
uuid_le hostid;
|
||||
uuid_be hostid;
|
||||
__le16 cntlid;
|
||||
char resv4[238];
|
||||
char subsysnqn[NVMF_NQN_FIELD_LEN];
|
||||
|
|
|
|||
|
|
@ -571,56 +571,57 @@ static inline int fault_in_pages_readable(const char __user *uaddr, int size)
|
|||
*/
|
||||
static inline int fault_in_multipages_writeable(char __user *uaddr, int size)
|
||||
{
|
||||
int ret = 0;
|
||||
char __user *end = uaddr + size - 1;
|
||||
|
||||
if (unlikely(size == 0))
|
||||
return ret;
|
||||
return 0;
|
||||
|
||||
if (unlikely(uaddr > end))
|
||||
return -EFAULT;
|
||||
/*
|
||||
* Writing zeroes into userspace here is OK, because we know that if
|
||||
* the zero gets there, we'll be overwriting it.
|
||||
*/
|
||||
while (uaddr <= end) {
|
||||
ret = __put_user(0, uaddr);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
do {
|
||||
if (unlikely(__put_user(0, uaddr) != 0))
|
||||
return -EFAULT;
|
||||
uaddr += PAGE_SIZE;
|
||||
}
|
||||
} while (uaddr <= end);
|
||||
|
||||
/* Check whether the range spilled into the next page. */
|
||||
if (((unsigned long)uaddr & PAGE_MASK) ==
|
||||
((unsigned long)end & PAGE_MASK))
|
||||
ret = __put_user(0, end);
|
||||
return __put_user(0, end);
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int fault_in_multipages_readable(const char __user *uaddr,
|
||||
int size)
|
||||
{
|
||||
volatile char c;
|
||||
int ret = 0;
|
||||
const char __user *end = uaddr + size - 1;
|
||||
|
||||
if (unlikely(size == 0))
|
||||
return ret;
|
||||
return 0;
|
||||
|
||||
while (uaddr <= end) {
|
||||
ret = __get_user(c, uaddr);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
if (unlikely(uaddr > end))
|
||||
return -EFAULT;
|
||||
|
||||
do {
|
||||
if (unlikely(__get_user(c, uaddr) != 0))
|
||||
return -EFAULT;
|
||||
uaddr += PAGE_SIZE;
|
||||
}
|
||||
} while (uaddr <= end);
|
||||
|
||||
/* Check whether the range spilled into the next page. */
|
||||
if (((unsigned long)uaddr & PAGE_MASK) ==
|
||||
((unsigned long)end & PAGE_MASK)) {
|
||||
ret = __get_user(c, end);
|
||||
(void)c;
|
||||
return __get_user(c, end);
|
||||
}
|
||||
|
||||
return ret;
|
||||
(void)c;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int add_to_page_cache_locked(struct page *page, struct address_space *mapping,
|
||||
|
|
|
|||
|
|
@ -682,15 +682,6 @@ struct pci_driver {
|
|||
|
||||
#define to_pci_driver(drv) container_of(drv, struct pci_driver, driver)
|
||||
|
||||
/**
|
||||
* DEFINE_PCI_DEVICE_TABLE - macro used to describe a pci device table
|
||||
* @_table: device table name
|
||||
*
|
||||
* This macro is deprecated and should not be used in new code.
|
||||
*/
|
||||
#define DEFINE_PCI_DEVICE_TABLE(_table) \
|
||||
const struct pci_device_id _table[]
|
||||
|
||||
/**
|
||||
* PCI_DEVICE - macro used to describe a specific pci device
|
||||
* @vend: the 16 bit PCI Vendor ID
|
||||
|
|
@ -1251,10 +1242,12 @@ resource_size_t pcibios_iov_resource_alignment(struct pci_dev *dev, int resno);
|
|||
int pci_set_vga_state(struct pci_dev *pdev, bool decode,
|
||||
unsigned int command_bits, u32 flags);
|
||||
|
||||
#define PCI_IRQ_NOLEGACY (1 << 0) /* don't use legacy interrupts */
|
||||
#define PCI_IRQ_NOMSI (1 << 1) /* don't use MSI interrupts */
|
||||
#define PCI_IRQ_NOMSIX (1 << 2) /* don't use MSI-X interrupts */
|
||||
#define PCI_IRQ_NOAFFINITY (1 << 3) /* don't auto-assign affinity */
|
||||
#define PCI_IRQ_LEGACY (1 << 0) /* allow legacy interrupts */
|
||||
#define PCI_IRQ_MSI (1 << 1) /* allow MSI interrupts */
|
||||
#define PCI_IRQ_MSIX (1 << 2) /* allow MSI-X interrupts */
|
||||
#define PCI_IRQ_AFFINITY (1 << 3) /* auto-assign affinity */
|
||||
#define PCI_IRQ_ALL_TYPES \
|
||||
(PCI_IRQ_LEGACY | PCI_IRQ_MSI | PCI_IRQ_MSIX)
|
||||
|
||||
/* kmem_cache style wrapper around pci_alloc_consistent() */
|
||||
|
||||
|
|
|
|||
|
|
@ -70,8 +70,16 @@ struct qed_dbcx_pfc_params {
|
|||
u8 max_tc;
|
||||
};
|
||||
|
||||
enum qed_dcbx_sf_ieee_type {
|
||||
QED_DCBX_SF_IEEE_ETHTYPE,
|
||||
QED_DCBX_SF_IEEE_TCP_PORT,
|
||||
QED_DCBX_SF_IEEE_UDP_PORT,
|
||||
QED_DCBX_SF_IEEE_TCP_UDP_PORT
|
||||
};
|
||||
|
||||
struct qed_app_entry {
|
||||
bool ethtype;
|
||||
enum qed_dcbx_sf_ieee_type sf_ieee;
|
||||
bool enabled;
|
||||
u8 prio;
|
||||
u16 proto_id;
|
||||
|
|
|
|||
|
|
@ -705,70 +705,6 @@ typedef struct sctp_auth_chunk {
|
|||
sctp_authhdr_t auth_hdr;
|
||||
} __packed sctp_auth_chunk_t;
|
||||
|
||||
struct sctp_info {
|
||||
__u32 sctpi_tag;
|
||||
__u32 sctpi_state;
|
||||
__u32 sctpi_rwnd;
|
||||
__u16 sctpi_unackdata;
|
||||
__u16 sctpi_penddata;
|
||||
__u16 sctpi_instrms;
|
||||
__u16 sctpi_outstrms;
|
||||
__u32 sctpi_fragmentation_point;
|
||||
__u32 sctpi_inqueue;
|
||||
__u32 sctpi_outqueue;
|
||||
__u32 sctpi_overall_error;
|
||||
__u32 sctpi_max_burst;
|
||||
__u32 sctpi_maxseg;
|
||||
__u32 sctpi_peer_rwnd;
|
||||
__u32 sctpi_peer_tag;
|
||||
__u8 sctpi_peer_capable;
|
||||
__u8 sctpi_peer_sack;
|
||||
__u16 __reserved1;
|
||||
|
||||
/* assoc status info */
|
||||
__u64 sctpi_isacks;
|
||||
__u64 sctpi_osacks;
|
||||
__u64 sctpi_opackets;
|
||||
__u64 sctpi_ipackets;
|
||||
__u64 sctpi_rtxchunks;
|
||||
__u64 sctpi_outofseqtsns;
|
||||
__u64 sctpi_idupchunks;
|
||||
__u64 sctpi_gapcnt;
|
||||
__u64 sctpi_ouodchunks;
|
||||
__u64 sctpi_iuodchunks;
|
||||
__u64 sctpi_oodchunks;
|
||||
__u64 sctpi_iodchunks;
|
||||
__u64 sctpi_octrlchunks;
|
||||
__u64 sctpi_ictrlchunks;
|
||||
|
||||
/* primary transport info */
|
||||
struct sockaddr_storage sctpi_p_address;
|
||||
__s32 sctpi_p_state;
|
||||
__u32 sctpi_p_cwnd;
|
||||
__u32 sctpi_p_srtt;
|
||||
__u32 sctpi_p_rto;
|
||||
__u32 sctpi_p_hbinterval;
|
||||
__u32 sctpi_p_pathmaxrxt;
|
||||
__u32 sctpi_p_sackdelay;
|
||||
__u32 sctpi_p_sackfreq;
|
||||
__u32 sctpi_p_ssthresh;
|
||||
__u32 sctpi_p_partial_bytes_acked;
|
||||
__u32 sctpi_p_flight_size;
|
||||
__u16 sctpi_p_error;
|
||||
__u16 __reserved2;
|
||||
|
||||
/* sctp sock info */
|
||||
__u32 sctpi_s_autoclose;
|
||||
__u32 sctpi_s_adaptation_ind;
|
||||
__u32 sctpi_s_pd_point;
|
||||
__u8 sctpi_s_nodelay;
|
||||
__u8 sctpi_s_disable_fragments;
|
||||
__u8 sctpi_s_v4mapped;
|
||||
__u8 sctpi_s_frag_interleave;
|
||||
__u32 sctpi_s_type;
|
||||
__u32 __reserved3;
|
||||
};
|
||||
|
||||
struct sctp_infox {
|
||||
struct sctp_info *sctpinfo;
|
||||
struct sctp_association *asoc;
|
||||
|
|
|
|||
|
|
@ -111,7 +111,6 @@ struct uart_8250_port {
|
|||
* if no_console_suspend
|
||||
*/
|
||||
unsigned char probe;
|
||||
struct mctrl_gpios *gpios;
|
||||
#define UART_PROBE_RSA (1 << 0)
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -2847,6 +2847,18 @@ static inline int skb_linearize_cow(struct sk_buff *skb)
|
|||
__skb_linearize(skb) : 0;
|
||||
}
|
||||
|
||||
static __always_inline void
|
||||
__skb_postpull_rcsum(struct sk_buff *skb, const void *start, unsigned int len,
|
||||
unsigned int off)
|
||||
{
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->csum = csum_block_sub(skb->csum,
|
||||
csum_partial(start, len, 0), off);
|
||||
else if (skb->ip_summed == CHECKSUM_PARTIAL &&
|
||||
skb_checksum_start_offset(skb) < 0)
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_postpull_rcsum - update checksum for received skb after pull
|
||||
* @skb: buffer to update
|
||||
|
|
@ -2857,36 +2869,38 @@ static inline int skb_linearize_cow(struct sk_buff *skb)
|
|||
* update the CHECKSUM_COMPLETE checksum, or set ip_summed to
|
||||
* CHECKSUM_NONE so that it can be recomputed from scratch.
|
||||
*/
|
||||
|
||||
static inline void skb_postpull_rcsum(struct sk_buff *skb,
|
||||
const void *start, unsigned int len)
|
||||
{
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0));
|
||||
else if (skb->ip_summed == CHECKSUM_PARTIAL &&
|
||||
skb_checksum_start_offset(skb) < 0)
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
__skb_postpull_rcsum(skb, start, len, 0);
|
||||
}
|
||||
|
||||
unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len);
|
||||
static __always_inline void
|
||||
__skb_postpush_rcsum(struct sk_buff *skb, const void *start, unsigned int len,
|
||||
unsigned int off)
|
||||
{
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->csum = csum_block_add(skb->csum,
|
||||
csum_partial(start, len, 0), off);
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_postpush_rcsum - update checksum for received skb after push
|
||||
* @skb: buffer to update
|
||||
* @start: start of data after push
|
||||
* @len: length of data pushed
|
||||
*
|
||||
* After doing a push on a received packet, you need to call this to
|
||||
* update the CHECKSUM_COMPLETE checksum.
|
||||
*/
|
||||
static inline void skb_postpush_rcsum(struct sk_buff *skb,
|
||||
const void *start, unsigned int len)
|
||||
{
|
||||
/* For performing the reverse operation to skb_postpull_rcsum(),
|
||||
* we can instead of ...
|
||||
*
|
||||
* skb->csum = csum_add(skb->csum, csum_partial(start, len, 0));
|
||||
*
|
||||
* ... just use this equivalent version here to save a few
|
||||
* instructions. Feeding csum of 0 in csum_partial() and later
|
||||
* on adding skb->csum is equivalent to feed skb->csum in the
|
||||
* first place.
|
||||
*/
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->csum = csum_partial(start, len, skb->csum);
|
||||
__skb_postpush_rcsum(skb, start, len, 0);
|
||||
}
|
||||
|
||||
unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len);
|
||||
|
||||
/**
|
||||
* skb_push_rcsum - push skb and update receive checksum
|
||||
* @skb: buffer to update
|
||||
|
|
|
|||
|
|
@ -1,6 +1,16 @@
|
|||
#ifndef __SMC91X_H__
|
||||
#define __SMC91X_H__
|
||||
|
||||
/*
|
||||
* These bits define which access sizes a platform can support, rather
|
||||
* than the maximal access size. So, if your platform can do 16-bit
|
||||
* and 32-bit accesses to the SMC91x device, but not 8-bit, set both
|
||||
* SMC91X_USE_16BIT and SMC91X_USE_32BIT.
|
||||
*
|
||||
* The SMC91x driver requires at least one of SMC91X_USE_8BIT or
|
||||
* SMC91X_USE_16BIT to be supported - just setting SMC91X_USE_32BIT is
|
||||
* an invalid configuration.
|
||||
*/
|
||||
#define SMC91X_USE_8BIT (1 << 0)
|
||||
#define SMC91X_USE_16BIT (1 << 1)
|
||||
#define SMC91X_USE_32BIT (1 << 2)
|
||||
|
|
|
|||
|
|
@ -42,6 +42,8 @@ extern int proc_dostring(struct ctl_table *, int,
|
|||
void __user *, size_t *, loff_t *);
|
||||
extern int proc_dointvec(struct ctl_table *, int,
|
||||
void __user *, size_t *, loff_t *);
|
||||
extern int proc_douintvec(struct ctl_table *, int,
|
||||
void __user *, size_t *, loff_t *);
|
||||
extern int proc_dointvec_minmax(struct ctl_table *, int,
|
||||
void __user *, size_t *, loff_t *);
|
||||
extern int proc_dointvec_jiffies(struct ctl_table *, int,
|
||||
|
|
|
|||
|
|
@ -118,10 +118,11 @@ static inline int arch_within_stack_frames(const void * const stack,
|
|||
extern void __check_object_size(const void *ptr, unsigned long n,
|
||||
bool to_user);
|
||||
|
||||
static inline void check_object_size(const void *ptr, unsigned long n,
|
||||
bool to_user)
|
||||
static __always_inline void check_object_size(const void *ptr, unsigned long n,
|
||||
bool to_user)
|
||||
{
|
||||
__check_object_size(ptr, n, to_user);
|
||||
if (!__builtin_constant_p(n))
|
||||
__check_object_size(ptr, n, to_user);
|
||||
}
|
||||
#else
|
||||
static inline void check_object_size(const void *ptr, unsigned long n,
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ size_t iov_iter_copy_from_user_atomic(struct page *page,
|
|||
struct iov_iter *i, unsigned long offset, size_t bytes);
|
||||
void iov_iter_advance(struct iov_iter *i, size_t bytes);
|
||||
int iov_iter_fault_in_readable(struct iov_iter *i, size_t bytes);
|
||||
int iov_iter_fault_in_multipages_readable(struct iov_iter *i, size_t bytes);
|
||||
#define iov_iter_fault_in_multipages_readable iov_iter_fault_in_readable
|
||||
size_t iov_iter_single_seg_count(const struct iov_iter *i);
|
||||
size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes,
|
||||
struct iov_iter *i);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue