Linux 5.5-rc7
-----BEGIN PGP SIGNATURE----- iQFSBAABCAA8FiEEq68RxlopcLEwq+PEeb4+QwBBGIYFAl4k7i8eHHRvcnZhbGRz QGxpbnV4LWZvdW5kYXRpb24ub3JnAAoJEHm+PkMAQRiGvk0IAKRenVOdiudY77SQ VZjsteyrYTTQtPPv494ToIRjR0XQ+gYp8vyWzXTUC5Nm9Y9U3VzDqUPUjWszrSXE 6mU+tzcMc9qwuUxnIFn8zfg64ygw+37sn/w3xqeH4QmF9Z5Wl3EX3SdXTs7jp3RS VxiztkUNI5ZBV2GDtla5K/9qLPqCQnUYXIiyi5lAtBtiitZDVXFp7dy7hMgEiaEO +78K5Kh3xlt5ndDsBFOlwIb2Oof3KL7bBXntdbSBc/bjol6IRvAgln48HWCv59G2 jzAp2tj2KobX9GRAEPj+v4TQZEW0SXDNDi8MgQsM+3DYVCTmANsv57CBKRuf01+F nB1kAys= =zSnJ -----END PGP SIGNATURE----- Backmerge v5.5-rc7 into drm-next msm needs 5.5-rc4, go to the latest. Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
commit
3d4743131b
1204 changed files with 11973 additions and 7250 deletions
|
|
@ -19,6 +19,8 @@ struct ahci_host_priv;
|
|||
struct platform_device;
|
||||
struct scsi_host_template;
|
||||
|
||||
int ahci_platform_enable_phys(struct ahci_host_priv *hpriv);
|
||||
void ahci_platform_disable_phys(struct ahci_host_priv *hpriv);
|
||||
int ahci_platform_enable_clks(struct ahci_host_priv *hpriv);
|
||||
void ahci_platform_disable_clks(struct ahci_host_priv *hpriv);
|
||||
int ahci_platform_enable_regulators(struct ahci_host_priv *hpriv);
|
||||
|
|
|
|||
|
|
@ -470,6 +470,7 @@ extern struct bio *bio_copy_user_iov(struct request_queue *,
|
|||
gfp_t);
|
||||
extern int bio_uncopy_user(struct bio *);
|
||||
void zero_fill_bio_iter(struct bio *bio, struct bvec_iter iter);
|
||||
void bio_truncate(struct bio *bio, unsigned new_size);
|
||||
|
||||
static inline void zero_fill_bio(struct bio *bio)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -328,6 +328,7 @@ struct queue_limits {
|
|||
unsigned int max_sectors;
|
||||
unsigned int max_segment_size;
|
||||
unsigned int physical_block_size;
|
||||
unsigned int logical_block_size;
|
||||
unsigned int alignment_offset;
|
||||
unsigned int io_min;
|
||||
unsigned int io_opt;
|
||||
|
|
@ -338,7 +339,6 @@ struct queue_limits {
|
|||
unsigned int discard_granularity;
|
||||
unsigned int discard_alignment;
|
||||
|
||||
unsigned short logical_block_size;
|
||||
unsigned short max_segments;
|
||||
unsigned short max_integrity_segments;
|
||||
unsigned short max_discard_segments;
|
||||
|
|
@ -1077,7 +1077,7 @@ extern void blk_queue_max_write_same_sectors(struct request_queue *q,
|
|||
unsigned int max_write_same_sectors);
|
||||
extern void blk_queue_max_write_zeroes_sectors(struct request_queue *q,
|
||||
unsigned int max_write_same_sectors);
|
||||
extern void blk_queue_logical_block_size(struct request_queue *, unsigned short);
|
||||
extern void blk_queue_logical_block_size(struct request_queue *, unsigned int);
|
||||
extern void blk_queue_physical_block_size(struct request_queue *, unsigned int);
|
||||
extern void blk_queue_alignment_offset(struct request_queue *q,
|
||||
unsigned int alignment);
|
||||
|
|
@ -1291,7 +1291,7 @@ static inline unsigned int queue_max_segment_size(const struct request_queue *q)
|
|||
return q->limits.max_segment_size;
|
||||
}
|
||||
|
||||
static inline unsigned short queue_logical_block_size(const struct request_queue *q)
|
||||
static inline unsigned queue_logical_block_size(const struct request_queue *q)
|
||||
{
|
||||
int retval = 512;
|
||||
|
||||
|
|
@ -1301,7 +1301,7 @@ static inline unsigned short queue_logical_block_size(const struct request_queue
|
|||
return retval;
|
||||
}
|
||||
|
||||
static inline unsigned short bdev_logical_block_size(struct block_device *bdev)
|
||||
static inline unsigned int bdev_logical_block_size(struct block_device *bdev)
|
||||
{
|
||||
return queue_logical_block_size(bdev_get_queue(bdev));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -157,8 +157,8 @@ void bpf_cgroup_storage_link(struct bpf_cgroup_storage *storage,
|
|||
struct cgroup *cgroup,
|
||||
enum bpf_attach_type type);
|
||||
void bpf_cgroup_storage_unlink(struct bpf_cgroup_storage *storage);
|
||||
int bpf_cgroup_storage_assign(struct bpf_prog *prog, struct bpf_map *map);
|
||||
void bpf_cgroup_storage_release(struct bpf_prog *prog, struct bpf_map *map);
|
||||
int bpf_cgroup_storage_assign(struct bpf_prog_aux *aux, struct bpf_map *map);
|
||||
void bpf_cgroup_storage_release(struct bpf_prog_aux *aux, struct bpf_map *map);
|
||||
|
||||
int bpf_percpu_cgroup_storage_copy(struct bpf_map *map, void *key, void *value);
|
||||
int bpf_percpu_cgroup_storage_update(struct bpf_map *map, void *key,
|
||||
|
|
@ -360,9 +360,9 @@ static inline int cgroup_bpf_prog_query(const union bpf_attr *attr,
|
|||
|
||||
static inline void bpf_cgroup_storage_set(
|
||||
struct bpf_cgroup_storage *storage[MAX_BPF_CGROUP_STORAGE_TYPE]) {}
|
||||
static inline int bpf_cgroup_storage_assign(struct bpf_prog *prog,
|
||||
static inline int bpf_cgroup_storage_assign(struct bpf_prog_aux *aux,
|
||||
struct bpf_map *map) { return 0; }
|
||||
static inline void bpf_cgroup_storage_release(struct bpf_prog *prog,
|
||||
static inline void bpf_cgroup_storage_release(struct bpf_prog_aux *aux,
|
||||
struct bpf_map *map) {}
|
||||
static inline struct bpf_cgroup_storage *bpf_cgroup_storage_alloc(
|
||||
struct bpf_prog *prog, enum bpf_cgroup_storage_type stype) { return NULL; }
|
||||
|
|
|
|||
|
|
@ -461,6 +461,7 @@ struct bpf_trampoline {
|
|||
struct {
|
||||
struct btf_func_model model;
|
||||
void *addr;
|
||||
bool ftrace_managed;
|
||||
} func;
|
||||
/* list of BPF programs using this trampoline */
|
||||
struct hlist_head progs_hlist[BPF_TRAMP_MAX];
|
||||
|
|
@ -817,6 +818,8 @@ struct bpf_prog * __must_check bpf_prog_inc_not_zero(struct bpf_prog *prog);
|
|||
void bpf_prog_put(struct bpf_prog *prog);
|
||||
int __bpf_prog_charge(struct user_struct *user, u32 pages);
|
||||
void __bpf_prog_uncharge(struct user_struct *user, u32 pages);
|
||||
void __bpf_free_used_maps(struct bpf_prog_aux *aux,
|
||||
struct bpf_map **used_maps, u32 len);
|
||||
|
||||
void bpf_prog_free_id(struct bpf_prog *prog, bool do_idr_lock);
|
||||
void bpf_map_free_id(struct bpf_map *map, bool do_idr_lock);
|
||||
|
|
|
|||
|
|
@ -153,26 +153,4 @@ static inline void bvec_advance(const struct bio_vec *bvec,
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the last single-page segment from the multi-page bvec and store it
|
||||
* in @seg
|
||||
*/
|
||||
static inline void mp_bvec_last_segment(const struct bio_vec *bvec,
|
||||
struct bio_vec *seg)
|
||||
{
|
||||
unsigned total = bvec->bv_offset + bvec->bv_len;
|
||||
unsigned last_page = (total - 1) / PAGE_SIZE;
|
||||
|
||||
seg->bv_page = bvec->bv_page + last_page;
|
||||
|
||||
/* the whole segment is inside the last page */
|
||||
if (bvec->bv_offset >= last_page * PAGE_SIZE) {
|
||||
seg->bv_offset = bvec->bv_offset % PAGE_SIZE;
|
||||
seg->bv_len = bvec->bv_len;
|
||||
} else {
|
||||
seg->bv_offset = 0;
|
||||
seg->bv_len = total - last_page * PAGE_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* __LINUX_BVEC_ITER_H */
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include <linux/can/error.h>
|
||||
#include <linux/can/led.h>
|
||||
#include <linux/can/netlink.h>
|
||||
#include <linux/can/skb.h>
|
||||
#include <linux/netdevice.h>
|
||||
|
||||
/*
|
||||
|
|
@ -91,6 +92,36 @@ struct can_priv {
|
|||
#define get_can_dlc(i) (min_t(__u8, (i), CAN_MAX_DLC))
|
||||
#define get_canfd_dlc(i) (min_t(__u8, (i), CANFD_MAX_DLC))
|
||||
|
||||
/* Check for outgoing skbs that have not been created by the CAN subsystem */
|
||||
static inline bool can_skb_headroom_valid(struct net_device *dev,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
/* af_packet creates a headroom of HH_DATA_MOD bytes which is fine */
|
||||
if (WARN_ON_ONCE(skb_headroom(skb) < sizeof(struct can_skb_priv)))
|
||||
return false;
|
||||
|
||||
/* af_packet does not apply CAN skb specific settings */
|
||||
if (skb->ip_summed == CHECKSUM_NONE) {
|
||||
/* init headroom */
|
||||
can_skb_prv(skb)->ifindex = dev->ifindex;
|
||||
can_skb_prv(skb)->skbcnt = 0;
|
||||
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
|
||||
/* preform proper loopback on capable devices */
|
||||
if (dev->flags & IFF_ECHO)
|
||||
skb->pkt_type = PACKET_LOOPBACK;
|
||||
else
|
||||
skb->pkt_type = PACKET_HOST;
|
||||
|
||||
skb_reset_mac_header(skb);
|
||||
skb_reset_network_header(skb);
|
||||
skb_reset_transport_header(skb);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Drop a given socketbuffer if it does not contain a valid CAN frame. */
|
||||
static inline bool can_dropped_invalid_skb(struct net_device *dev,
|
||||
struct sk_buff *skb)
|
||||
|
|
@ -108,6 +139,9 @@ static inline bool can_dropped_invalid_skb(struct net_device *dev,
|
|||
} else
|
||||
goto inval_skb;
|
||||
|
||||
if (!can_skb_headroom_valid(dev, skb))
|
||||
goto inval_skb;
|
||||
|
||||
return false;
|
||||
|
||||
inval_skb:
|
||||
|
|
|
|||
|
|
@ -595,17 +595,6 @@ struct governor_attr {
|
|||
size_t count);
|
||||
};
|
||||
|
||||
static inline bool cpufreq_this_cpu_can_update(struct cpufreq_policy *policy)
|
||||
{
|
||||
/*
|
||||
* Allow remote callbacks if:
|
||||
* - dvfs_possible_from_any_cpu flag is set
|
||||
* - the local and remote CPUs share cpufreq policy
|
||||
*/
|
||||
return policy->dvfs_possible_from_any_cpu ||
|
||||
cpumask_test_cpu(smp_processor_id(), policy->cpus);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* FREQUENCY TABLE HELPERS *
|
||||
*********************************************************************/
|
||||
|
|
|
|||
|
|
@ -1364,8 +1364,11 @@ static inline int dma_get_slave_caps(struct dma_chan *chan,
|
|||
static inline int dmaengine_desc_set_reuse(struct dma_async_tx_descriptor *tx)
|
||||
{
|
||||
struct dma_slave_caps caps;
|
||||
int ret;
|
||||
|
||||
dma_get_slave_caps(tx->chan, &caps);
|
||||
ret = dma_get_slave_caps(tx->chan, &caps);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (caps.descriptor_reuse) {
|
||||
tx->flags |= DMA_CTRL_REUSE;
|
||||
|
|
|
|||
|
|
@ -824,7 +824,7 @@ typedef struct {
|
|||
__aligned_u64 image_size;
|
||||
unsigned int image_code_type;
|
||||
unsigned int image_data_type;
|
||||
unsigned long unload;
|
||||
u32 unload;
|
||||
} efi_loaded_image_32_t;
|
||||
|
||||
typedef struct {
|
||||
|
|
@ -840,14 +840,14 @@ typedef struct {
|
|||
__aligned_u64 image_size;
|
||||
unsigned int image_code_type;
|
||||
unsigned int image_data_type;
|
||||
unsigned long unload;
|
||||
u64 unload;
|
||||
} efi_loaded_image_64_t;
|
||||
|
||||
typedef struct {
|
||||
u32 revision;
|
||||
void *parent_handle;
|
||||
efi_handle_t parent_handle;
|
||||
efi_system_table_t *system_table;
|
||||
void *device_handle;
|
||||
efi_handle_t device_handle;
|
||||
void *file_path;
|
||||
void *reserved;
|
||||
u32 load_options_size;
|
||||
|
|
@ -856,7 +856,7 @@ typedef struct {
|
|||
__aligned_u64 image_size;
|
||||
unsigned int image_code_type;
|
||||
unsigned int image_data_type;
|
||||
unsigned long unload;
|
||||
efi_status_t (*unload)(efi_handle_t image_handle);
|
||||
} efi_loaded_image_t;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,14 @@ static inline struct ethhdr *eth_hdr(const struct sk_buff *skb)
|
|||
return (struct ethhdr *)skb_mac_header(skb);
|
||||
}
|
||||
|
||||
/* Prefer this version in TX path, instead of
|
||||
* skb_reset_mac_header() + eth_hdr()
|
||||
*/
|
||||
static inline struct ethhdr *skb_eth_hdr(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct ethhdr *)skb->data;
|
||||
}
|
||||
|
||||
static inline struct ethhdr *inner_eth_hdr(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct ethhdr *)skb_inner_mac_header(skb);
|
||||
|
|
|
|||
|
|
@ -457,7 +457,7 @@ struct jbd2_revoke_table_s;
|
|||
* @h_journal: Which journal handle belongs to - used iff h_reserved set.
|
||||
* @h_rsv_handle: Handle reserved for finishing the logical operation.
|
||||
* @h_total_credits: Number of remaining buffers we are allowed to add to
|
||||
journal. These are dirty buffers and revoke descriptor blocks.
|
||||
* journal. These are dirty buffers and revoke descriptor blocks.
|
||||
* @h_revoke_credits: Number of remaining revoke records available for handle
|
||||
* @h_ref: Reference count on this handle.
|
||||
* @h_err: Field for caller's use to track errors through large fs operations.
|
||||
|
|
|
|||
|
|
@ -205,20 +205,23 @@ static inline void *kasan_reset_tag(const void *addr)
|
|||
#endif /* CONFIG_KASAN_SW_TAGS */
|
||||
|
||||
#ifdef CONFIG_KASAN_VMALLOC
|
||||
int kasan_populate_vmalloc(unsigned long requested_size,
|
||||
struct vm_struct *area);
|
||||
void kasan_poison_vmalloc(void *start, unsigned long size);
|
||||
int kasan_populate_vmalloc(unsigned long addr, unsigned long size);
|
||||
void kasan_poison_vmalloc(const void *start, unsigned long size);
|
||||
void kasan_unpoison_vmalloc(const void *start, unsigned long size);
|
||||
void kasan_release_vmalloc(unsigned long start, unsigned long end,
|
||||
unsigned long free_region_start,
|
||||
unsigned long free_region_end);
|
||||
#else
|
||||
static inline int kasan_populate_vmalloc(unsigned long requested_size,
|
||||
struct vm_struct *area)
|
||||
static inline int kasan_populate_vmalloc(unsigned long start,
|
||||
unsigned long size)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void kasan_poison_vmalloc(void *start, unsigned long size) {}
|
||||
static inline void kasan_poison_vmalloc(const void *start, unsigned long size)
|
||||
{ }
|
||||
static inline void kasan_unpoison_vmalloc(const void *start, unsigned long size)
|
||||
{ }
|
||||
static inline void kasan_release_vmalloc(unsigned long start,
|
||||
unsigned long end,
|
||||
unsigned long free_region_start,
|
||||
|
|
|
|||
|
|
@ -79,15 +79,6 @@
|
|||
*/
|
||||
#define round_down(x, y) ((x) & ~__round_mask(x, y))
|
||||
|
||||
/**
|
||||
* FIELD_SIZEOF - get the size of a struct's field
|
||||
* @t: the target struct
|
||||
* @f: the target struct's field
|
||||
* Return: the size of @f in the struct definition without having a
|
||||
* declared instance of @t.
|
||||
*/
|
||||
#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
|
||||
|
||||
#define typeof_member(T, m) typeof(((T*)0)->m)
|
||||
|
||||
#define DIV_ROUND_UP __KERNEL_DIV_ROUND_UP
|
||||
|
|
|
|||
|
|
@ -1175,6 +1175,7 @@ extern unsigned int ata_do_dev_read_id(struct ata_device *dev,
|
|||
struct ata_taskfile *tf, u16 *id);
|
||||
extern void ata_qc_complete(struct ata_queued_cmd *qc);
|
||||
extern int ata_qc_complete_multiple(struct ata_port *ap, u64 qc_active);
|
||||
extern u64 ata_qc_get_active(struct ata_port *ap);
|
||||
extern void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd);
|
||||
extern int ata_std_bios_param(struct scsi_device *sdev,
|
||||
struct block_device *bdev,
|
||||
|
|
|
|||
|
|
@ -122,8 +122,8 @@ static inline bool movable_node_is_enabled(void)
|
|||
|
||||
extern void arch_remove_memory(int nid, u64 start, u64 size,
|
||||
struct vmem_altmap *altmap);
|
||||
extern void __remove_pages(struct zone *zone, unsigned long start_pfn,
|
||||
unsigned long nr_pages, struct vmem_altmap *altmap);
|
||||
extern void __remove_pages(unsigned long start_pfn, unsigned long nr_pages,
|
||||
struct vmem_altmap *altmap);
|
||||
|
||||
/* reasonably generic interface to expand the physical pages */
|
||||
extern int __add_pages(int nid, unsigned long start_pfn, unsigned long nr_pages,
|
||||
|
|
@ -342,6 +342,9 @@ extern int add_memory(int nid, u64 start, u64 size);
|
|||
extern int add_memory_resource(int nid, struct resource *resource);
|
||||
extern void move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn,
|
||||
unsigned long nr_pages, struct vmem_altmap *altmap);
|
||||
extern void remove_pfn_range_from_zone(struct zone *zone,
|
||||
unsigned long start_pfn,
|
||||
unsigned long nr_pages);
|
||||
extern bool is_memblock_offlined(struct memory_block *mem);
|
||||
extern int sparse_add_section(int nid, unsigned long pfn,
|
||||
unsigned long nr_pages, struct vmem_altmap *altmap);
|
||||
|
|
|
|||
|
|
@ -46,6 +46,14 @@
|
|||
|
||||
#define RTC_AL_SEC 0x0018
|
||||
|
||||
#define RTC_AL_SEC_MASK 0x003f
|
||||
#define RTC_AL_MIN_MASK 0x003f
|
||||
#define RTC_AL_HOU_MASK 0x001f
|
||||
#define RTC_AL_DOM_MASK 0x001f
|
||||
#define RTC_AL_DOW_MASK 0x0007
|
||||
#define RTC_AL_MTH_MASK 0x000f
|
||||
#define RTC_AL_YEA_MASK 0x007f
|
||||
|
||||
#define RTC_PDN2 0x002e
|
||||
#define RTC_PDN2_PWRON_ALARM BIT(4)
|
||||
|
||||
|
|
|
|||
|
|
@ -2621,6 +2621,9 @@ static inline int vm_fault_to_errno(vm_fault_t vm_fault, int foll_flags)
|
|||
typedef int (*pte_fn_t)(pte_t *pte, unsigned long addr, void *data);
|
||||
extern int apply_to_page_range(struct mm_struct *mm, unsigned long address,
|
||||
unsigned long size, pte_fn_t fn, void *data);
|
||||
extern int apply_to_existing_page_range(struct mm_struct *mm,
|
||||
unsigned long address, unsigned long size,
|
||||
pte_fn_t fn, void *data);
|
||||
|
||||
#ifdef CONFIG_PAGE_POISONING
|
||||
extern bool page_poisoning_enabled(void);
|
||||
|
|
@ -2655,13 +2658,25 @@ static inline bool want_init_on_free(void)
|
|||
!page_poisoning_enabled();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT
|
||||
DECLARE_STATIC_KEY_TRUE(_debug_pagealloc_enabled);
|
||||
#ifdef CONFIG_DEBUG_PAGEALLOC
|
||||
extern void init_debug_pagealloc(void);
|
||||
#else
|
||||
DECLARE_STATIC_KEY_FALSE(_debug_pagealloc_enabled);
|
||||
static inline void init_debug_pagealloc(void) {}
|
||||
#endif
|
||||
extern bool _debug_pagealloc_enabled_early;
|
||||
DECLARE_STATIC_KEY_FALSE(_debug_pagealloc_enabled);
|
||||
|
||||
static inline bool debug_pagealloc_enabled(void)
|
||||
{
|
||||
return IS_ENABLED(CONFIG_DEBUG_PAGEALLOC) &&
|
||||
_debug_pagealloc_enabled_early;
|
||||
}
|
||||
|
||||
/*
|
||||
* For use in fast paths after init_debug_pagealloc() has run, or when a
|
||||
* false negative result is not harmful when called too early.
|
||||
*/
|
||||
static inline bool debug_pagealloc_enabled_static(void)
|
||||
{
|
||||
if (!IS_ENABLED(CONFIG_DEBUG_PAGEALLOC))
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -215,9 +215,8 @@ enum node_stat_item {
|
|||
NR_INACTIVE_FILE, /* " " " " " */
|
||||
NR_ACTIVE_FILE, /* " " " " " */
|
||||
NR_UNEVICTABLE, /* " " " " " */
|
||||
NR_SLAB_RECLAIMABLE, /* Please do not reorder this item */
|
||||
NR_SLAB_UNRECLAIMABLE, /* and this one without looking at
|
||||
* memcg_flush_percpu_vmstats() first. */
|
||||
NR_SLAB_RECLAIMABLE,
|
||||
NR_SLAB_UNRECLAIMABLE,
|
||||
NR_ISOLATED_ANON, /* Temporary isolated pages from anon lru */
|
||||
NR_ISOLATED_FILE, /* Temporary isolated pages from file lru */
|
||||
WORKINGSET_NODES,
|
||||
|
|
|
|||
|
|
@ -587,9 +587,9 @@ struct platform_device_id {
|
|||
#define MDIO_NAME_SIZE 32
|
||||
#define MDIO_MODULE_PREFIX "mdio:"
|
||||
|
||||
#define MDIO_ID_FMT "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
|
||||
#define MDIO_ID_FMT "%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u"
|
||||
#define MDIO_ID_ARGS(_id) \
|
||||
(_id)>>31, ((_id)>>30) & 1, ((_id)>>29) & 1, ((_id)>>28) & 1, \
|
||||
((_id)>>31) & 1, ((_id)>>30) & 1, ((_id)>>29) & 1, ((_id)>>28) & 1, \
|
||||
((_id)>>27) & 1, ((_id)>>26) & 1, ((_id)>>25) & 1, ((_id)>>24) & 1, \
|
||||
((_id)>>23) & 1, ((_id)>>22) & 1, ((_id)>>21) & 1, ((_id)>>20) & 1, \
|
||||
((_id)>>19) & 1, ((_id)>>18) & 1, ((_id)>>17) & 1, ((_id)>>16) & 1, \
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ typedef enum {
|
|||
FL_READING,
|
||||
FL_CACHEDPRG,
|
||||
/* These 4 come from onenand_state_t, which has been unified here */
|
||||
FL_RESETING,
|
||||
FL_RESETTING,
|
||||
FL_OTPING,
|
||||
FL_PREPARING_ERASE,
|
||||
FL_VERIFYING_ERASE,
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND};
|
|||
|
||||
/* internal use only */
|
||||
#define LOOKUP_PARENT 0x0010
|
||||
#define LOOKUP_NO_REVAL 0x0080
|
||||
#define LOOKUP_JUMPED 0x1000
|
||||
#define LOOKUP_ROOT 0x2000
|
||||
#define LOOKUP_ROOT_GRABBED 0x0008
|
||||
|
|
|
|||
|
|
@ -1775,7 +1775,7 @@ enum netdev_priv_flags {
|
|||
* for hardware timestamping
|
||||
* @sfp_bus: attached &struct sfp_bus structure.
|
||||
* @qdisc_tx_busylock_key: lockdep class annotating Qdisc->busylock
|
||||
spinlock
|
||||
* spinlock
|
||||
* @qdisc_running_key: lockdep class annotating Qdisc->running seqcount
|
||||
* @qdisc_xmit_lock_key: lockdep class annotating
|
||||
* netdev_queue->_xmit_lock spinlock
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
#include <linux/of.h>
|
||||
|
||||
#if IS_ENABLED(CONFIG_OF_MDIO)
|
||||
extern bool of_mdiobus_child_is_phy(struct device_node *child);
|
||||
extern int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np);
|
||||
extern struct phy_device *of_phy_find_device(struct device_node *phy_np);
|
||||
extern struct phy_device *of_phy_connect(struct net_device *dev,
|
||||
|
|
@ -54,6 +55,11 @@ static inline int of_mdio_parse_addr(struct device *dev,
|
|||
}
|
||||
|
||||
#else /* CONFIG_OF_MDIO */
|
||||
static inline bool of_mdiobus_child_is_phy(struct device_node *child)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
|
||||
{
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -1000,7 +1000,7 @@ int phy_modify_paged_changed(struct phy_device *phydev, int page, u32 regnum,
|
|||
int phy_modify_paged(struct phy_device *phydev, int page, u32 regnum,
|
||||
u16 mask, u16 set);
|
||||
|
||||
struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
|
||||
struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
|
||||
bool is_c45,
|
||||
struct phy_c45_device_ids *c45_ids);
|
||||
#if IS_ENABLED(CONFIG_PHYLIB)
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ struct sysc_regbits {
|
|||
s8 emufree_shift;
|
||||
};
|
||||
|
||||
#define SYSC_QUIRK_FORCE_MSTANDBY BIT(20)
|
||||
#define SYSC_MODULE_QUIRK_AESS BIT(19)
|
||||
#define SYSC_MODULE_QUIRK_SGX BIT(18)
|
||||
#define SYSC_MODULE_QUIRK_HDQ1W BIT(17)
|
||||
|
|
|
|||
|
|
@ -69,29 +69,32 @@ struct posix_clock_operations {
|
|||
*
|
||||
* @ops: Functional interface to the clock
|
||||
* @cdev: Character device instance for this clock
|
||||
* @kref: Reference count.
|
||||
* @dev: Pointer to the clock's device.
|
||||
* @rwsem: Protects the 'zombie' field from concurrent access.
|
||||
* @zombie: If 'zombie' is true, then the hardware has disappeared.
|
||||
* @release: A function to free the structure when the reference count reaches
|
||||
* zero. May be NULL if structure is statically allocated.
|
||||
*
|
||||
* Drivers should embed their struct posix_clock within a private
|
||||
* structure, obtaining a reference to it during callbacks using
|
||||
* container_of().
|
||||
*
|
||||
* Drivers should supply an initialized but not exposed struct device
|
||||
* to posix_clock_register(). It is used to manage lifetime of the
|
||||
* driver's private structure. It's 'release' field should be set to
|
||||
* a release function for this private structure.
|
||||
*/
|
||||
struct posix_clock {
|
||||
struct posix_clock_operations ops;
|
||||
struct cdev cdev;
|
||||
struct kref kref;
|
||||
struct device *dev;
|
||||
struct rw_semaphore rwsem;
|
||||
bool zombie;
|
||||
void (*release)(struct posix_clock *clk);
|
||||
};
|
||||
|
||||
/**
|
||||
* posix_clock_register() - register a new clock
|
||||
* @clk: Pointer to the clock. Caller must provide 'ops' and 'release'
|
||||
* @devid: Allocated device id
|
||||
* @clk: Pointer to the clock. Caller must provide 'ops' field
|
||||
* @dev: Pointer to the initialized device. Caller must provide
|
||||
* 'release' field
|
||||
*
|
||||
* A clock driver calls this function to register itself with the
|
||||
* clock device subsystem. If 'clk' points to dynamically allocated
|
||||
|
|
@ -100,7 +103,7 @@ struct posix_clock {
|
|||
*
|
||||
* Returns zero on success, non-zero otherwise.
|
||||
*/
|
||||
int posix_clock_register(struct posix_clock *clk, dev_t devid);
|
||||
int posix_clock_register(struct posix_clock *clk, struct device *dev);
|
||||
|
||||
/**
|
||||
* posix_clock_unregister() - unregister a clock
|
||||
|
|
|
|||
|
|
@ -100,6 +100,43 @@ static inline void hlist_nulls_add_head_rcu(struct hlist_nulls_node *n,
|
|||
first->pprev = &n->next;
|
||||
}
|
||||
|
||||
/**
|
||||
* hlist_nulls_add_tail_rcu
|
||||
* @n: the element to add to the hash list.
|
||||
* @h: the list to add to.
|
||||
*
|
||||
* Description:
|
||||
* Adds the specified element to the specified hlist_nulls,
|
||||
* while permitting racing traversals.
|
||||
*
|
||||
* The caller must take whatever precautions are necessary
|
||||
* (such as holding appropriate locks) to avoid racing
|
||||
* with another list-mutation primitive, such as hlist_nulls_add_head_rcu()
|
||||
* or hlist_nulls_del_rcu(), running on this same list.
|
||||
* However, it is perfectly legal to run concurrently with
|
||||
* the _rcu list-traversal primitives, such as
|
||||
* hlist_nulls_for_each_entry_rcu(), used to prevent memory-consistency
|
||||
* problems on Alpha CPUs. Regardless of the type of CPU, the
|
||||
* list-traversal primitive must be guarded by rcu_read_lock().
|
||||
*/
|
||||
static inline void hlist_nulls_add_tail_rcu(struct hlist_nulls_node *n,
|
||||
struct hlist_nulls_head *h)
|
||||
{
|
||||
struct hlist_nulls_node *i, *last = NULL;
|
||||
|
||||
/* Note: write side code, so rcu accessors are not needed. */
|
||||
for (i = h->first; !is_a_nulls(i); i = i->next)
|
||||
last = i;
|
||||
|
||||
if (last) {
|
||||
n->next = last->next;
|
||||
n->pprev = &last->next;
|
||||
rcu_assign_pointer(hlist_next_rcu(last), n);
|
||||
} else {
|
||||
hlist_nulls_add_head_rcu(n, h);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* hlist_nulls_for_each_entry_rcu - iterate over rcu list of given type
|
||||
* @tpos: the type * to use as a loop cursor.
|
||||
|
|
|
|||
|
|
@ -1929,11 +1929,11 @@ static inline void rseq_migrate(struct task_struct *t)
|
|||
|
||||
/*
|
||||
* If parent process has a registered restartable sequences area, the
|
||||
* child inherits. Only applies when forking a process, not a thread.
|
||||
* child inherits. Unregister rseq for a clone with CLONE_VM set.
|
||||
*/
|
||||
static inline void rseq_fork(struct task_struct *t, unsigned long clone_flags)
|
||||
{
|
||||
if (clone_flags & CLONE_THREAD) {
|
||||
if (clone_flags & CLONE_VM) {
|
||||
t->rseq = NULL;
|
||||
t->rseq_sig = 0;
|
||||
t->rseq_event_mask = 0;
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@
|
|||
#define SCHED_CPUFREQ_MIGRATION (1U << 1)
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
struct cpufreq_policy;
|
||||
|
||||
struct update_util_data {
|
||||
void (*func)(struct update_util_data *data, u64 time, unsigned int flags);
|
||||
};
|
||||
|
|
@ -20,6 +22,7 @@ void cpufreq_add_update_util_hook(int cpu, struct update_util_data *data,
|
|||
void (*func)(struct update_util_data *data, u64 time,
|
||||
unsigned int flags));
|
||||
void cpufreq_remove_update_util_hook(int cpu);
|
||||
bool cpufreq_this_cpu_can_update(struct cpufreq_policy *policy);
|
||||
|
||||
static inline unsigned long map_util_freq(unsigned long util,
|
||||
unsigned long freq, unsigned long cap)
|
||||
|
|
|
|||
|
|
@ -358,17 +358,22 @@ static inline void sk_psock_update_proto(struct sock *sk,
|
|||
static inline void sk_psock_restore_proto(struct sock *sk,
|
||||
struct sk_psock *psock)
|
||||
{
|
||||
sk->sk_write_space = psock->saved_write_space;
|
||||
sk->sk_prot->unhash = psock->saved_unhash;
|
||||
|
||||
if (psock->sk_proto) {
|
||||
struct inet_connection_sock *icsk = inet_csk(sk);
|
||||
bool has_ulp = !!icsk->icsk_ulp_data;
|
||||
|
||||
if (has_ulp)
|
||||
tcp_update_ulp(sk, psock->sk_proto);
|
||||
else
|
||||
if (has_ulp) {
|
||||
tcp_update_ulp(sk, psock->sk_proto,
|
||||
psock->saved_write_space);
|
||||
} else {
|
||||
sk->sk_prot = psock->sk_proto;
|
||||
sk->sk_write_space = psock->saved_write_space;
|
||||
}
|
||||
psock->sk_proto = NULL;
|
||||
} else {
|
||||
sk->sk_write_space = psock->saved_write_space;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -689,10 +689,10 @@ extern void spi_finalize_current_transfer(struct spi_controller *ctlr);
|
|||
/* Helper calls for driver to timestamp transfer */
|
||||
void spi_take_timestamp_pre(struct spi_controller *ctlr,
|
||||
struct spi_transfer *xfer,
|
||||
const void *tx, bool irqs_off);
|
||||
size_t progress, bool irqs_off);
|
||||
void spi_take_timestamp_post(struct spi_controller *ctlr,
|
||||
struct spi_transfer *xfer,
|
||||
const void *tx, bool irqs_off);
|
||||
size_t progress, bool irqs_off);
|
||||
|
||||
/* the spi driver core manages memory for the spi_controller classdev */
|
||||
extern struct spi_controller *__spi_alloc_controller(struct device *host,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* 10G controller driver for Samsung EXYNOS SoCs
|
||||
* 10G controller driver for Samsung Exynos SoCs
|
||||
*
|
||||
* Copyright (C) 2013 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com
|
||||
|
|
|
|||
|
|
@ -1232,6 +1232,7 @@ asmlinkage long sys_ni_syscall(void);
|
|||
*/
|
||||
|
||||
int ksys_umount(char __user *name, int flags);
|
||||
int ksys_dup(unsigned int fildes);
|
||||
int ksys_chroot(const char __user *filename);
|
||||
ssize_t ksys_write(unsigned int fd, const char __user *buf, size_t count);
|
||||
int ksys_chdir(const char __user *filename);
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ struct tnum tnum_lshift(struct tnum a, u8 shift);
|
|||
/* Shift (rsh) a tnum right (by a fixed shift) */
|
||||
struct tnum tnum_rshift(struct tnum a, u8 shift);
|
||||
/* Shift (arsh) a tnum right (by a fixed min_shift) */
|
||||
struct tnum tnum_arshift(struct tnum a, u8 min_shift);
|
||||
struct tnum tnum_arshift(struct tnum a, u8 min_shift, u8 insn_bitness);
|
||||
/* Add two tnums, return @a + @b */
|
||||
struct tnum tnum_add(struct tnum a, struct tnum b);
|
||||
/* Subtract two tnums, return @a - @b */
|
||||
|
|
|
|||
|
|
@ -403,6 +403,7 @@ extern int tpm_pcr_extend(struct tpm_chip *chip, u32 pcr_idx,
|
|||
extern int tpm_send(struct tpm_chip *chip, void *cmd, size_t buflen);
|
||||
extern int tpm_get_random(struct tpm_chip *chip, u8 *data, size_t max);
|
||||
extern struct tpm_chip *tpm_default_chip(void);
|
||||
void tpm2_flush_context(struct tpm_chip *chip, u32 handle);
|
||||
#else
|
||||
static inline int tpm_is_tpm2(struct tpm_chip *chip)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue