SPI NOR core changes:
- move vendor specific code out of the core into vendor drivers. - unify all function and object names in the vendor modules. - make setup() callback optional to improve readability. - skip erase logic when the SPI_NOR_NO_ERASE flag is set at flash declaration. -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEHUIqys8OyG1eHf7fS1VPR6WNFOkFAmInffUACgkQS1VPR6WN FOn9fwf/SCIvgoScBNeQjW4cGTmh11oO+O8i2umibq0pQDLrNF6Ul7ykY6Fdm4Dc +Ce7c4Vp0O+DRphIkaK5MtNgRmXMOQbqUKcNAQftFS0wCtJ+QVQzOvkVGS3jQA74 KVEY3Jiup3Q5qknBg0r890ENwRLmcGJaPi5DAO+uHcf6ItTpwjv3z6C2ZUeiH6UK PMSwZgd86dwwH2eU4G5EoAjA+nqOcVvH0V1F49DFsGZ3kkmUS6nMNnSpb5SykszT 4uq+7+c3E2UOC0TlUkyX/xTv4DoZZDi6qqVEaV14bELL1a0FdltjKyIuWTds1Tei rwPhEOkqOpSnBVjlUWb7icwef21NWg== =QFe+ -----END PGP SIGNATURE----- Merge tag 'spi-nor/for-5.18' into mtd/next SPI NOR core changes: - move vendor specific code out of the core into vendor drivers. - unify all function and object names in the vendor modules. - make setup() callback optional to improve readability. - skip erase logic when the SPI_NOR_NO_ERASE flag is set at flash declaration. Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
This commit is contained in:
commit
4e371d9965
1231 changed files with 13924 additions and 7456 deletions
|
|
@ -324,12 +324,12 @@ enum {
|
|||
ATA_LOG_NCQ_NON_DATA = 0x12,
|
||||
ATA_LOG_NCQ_SEND_RECV = 0x13,
|
||||
ATA_LOG_IDENTIFY_DEVICE = 0x30,
|
||||
ATA_LOG_CONCURRENT_POSITIONING_RANGES = 0x47,
|
||||
|
||||
/* Identify device log pages: */
|
||||
ATA_LOG_SECURITY = 0x06,
|
||||
ATA_LOG_SATA_SETTINGS = 0x08,
|
||||
ATA_LOG_ZONED_INFORMATION = 0x09,
|
||||
ATA_LOG_CONCURRENT_POSITIONING_RANGES = 0x47,
|
||||
|
||||
/* Identify device SATA settings log:*/
|
||||
ATA_LOG_DEVSLP_OFFSET = 0x30,
|
||||
|
|
|
|||
|
|
@ -748,7 +748,8 @@ extern bool blk_queue_can_use_dma_map_merging(struct request_queue *q,
|
|||
|
||||
bool __must_check blk_get_queue(struct request_queue *);
|
||||
extern void blk_put_queue(struct request_queue *);
|
||||
extern void blk_set_queue_dying(struct request_queue *);
|
||||
|
||||
void blk_mark_disk_dead(struct gendisk *disk);
|
||||
|
||||
#ifdef CONFIG_BLOCK
|
||||
/*
|
||||
|
|
@ -1258,6 +1259,7 @@ unsigned long disk_start_io_acct(struct gendisk *disk, unsigned int sectors,
|
|||
void disk_end_io_acct(struct gendisk *disk, unsigned int op,
|
||||
unsigned long start_time);
|
||||
|
||||
void bio_start_io_acct_time(struct bio *bio, unsigned long start_time);
|
||||
unsigned long bio_start_io_acct(struct bio *bio);
|
||||
void bio_end_io_acct_remapped(struct bio *bio, unsigned long start_time,
|
||||
struct block_device *orig_bdev);
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
#define CEPH_OPT_TCP_NODELAY (1<<4) /* TCP_NODELAY on TCP sockets */
|
||||
#define CEPH_OPT_NOMSGSIGN (1<<5) /* don't sign msgs (msgr1) */
|
||||
#define CEPH_OPT_ABORT_ON_FULL (1<<6) /* abort w/ ENOSPC when full */
|
||||
#define CEPH_OPT_RXBOUNCE (1<<7) /* double-buffer read data */
|
||||
|
||||
#define CEPH_OPT_DEFAULT (CEPH_OPT_TCP_NODELAY)
|
||||
|
||||
|
|
|
|||
|
|
@ -383,6 +383,10 @@ struct ceph_connection_v2_info {
|
|||
struct ceph_gcm_nonce in_gcm_nonce;
|
||||
struct ceph_gcm_nonce out_gcm_nonce;
|
||||
|
||||
struct page **in_enc_pages;
|
||||
int in_enc_page_cnt;
|
||||
int in_enc_resid;
|
||||
int in_enc_i;
|
||||
struct page **out_enc_pages;
|
||||
int out_enc_page_cnt;
|
||||
int out_enc_resid;
|
||||
|
|
@ -457,6 +461,7 @@ struct ceph_connection {
|
|||
struct ceph_msg *out_msg; /* sending message (== tail of
|
||||
out_sent) */
|
||||
|
||||
struct page *bounce_page;
|
||||
u32 in_front_crc, in_middle_crc, in_data_crc; /* calculated crc */
|
||||
|
||||
struct timespec64 last_keepalive_ack; /* keepalive2 ack stamp */
|
||||
|
|
|
|||
|
|
@ -117,14 +117,6 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
|
|||
*/
|
||||
#define __stringify_label(n) #n
|
||||
|
||||
#define __annotate_reachable(c) ({ \
|
||||
asm volatile(__stringify_label(c) ":\n\t" \
|
||||
".pushsection .discard.reachable\n\t" \
|
||||
".long " __stringify_label(c) "b - .\n\t" \
|
||||
".popsection\n\t" : : "i" (c)); \
|
||||
})
|
||||
#define annotate_reachable() __annotate_reachable(__COUNTER__)
|
||||
|
||||
#define __annotate_unreachable(c) ({ \
|
||||
asm volatile(__stringify_label(c) ":\n\t" \
|
||||
".pushsection .discard.unreachable\n\t" \
|
||||
|
|
@ -133,24 +125,21 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
|
|||
})
|
||||
#define annotate_unreachable() __annotate_unreachable(__COUNTER__)
|
||||
|
||||
#define ASM_UNREACHABLE \
|
||||
"999:\n\t" \
|
||||
".pushsection .discard.unreachable\n\t" \
|
||||
".long 999b - .\n\t" \
|
||||
#define ASM_REACHABLE \
|
||||
"998:\n\t" \
|
||||
".pushsection .discard.reachable\n\t" \
|
||||
".long 998b - .\n\t" \
|
||||
".popsection\n\t"
|
||||
|
||||
/* Annotate a C jump table to allow objtool to follow the code flow */
|
||||
#define __annotate_jump_table __section(".rodata..c_jump_table")
|
||||
|
||||
#else
|
||||
#define annotate_reachable()
|
||||
#define annotate_unreachable()
|
||||
# define ASM_REACHABLE
|
||||
#define __annotate_jump_table
|
||||
#endif
|
||||
|
||||
#ifndef ASM_UNREACHABLE
|
||||
# define ASM_UNREACHABLE
|
||||
#endif
|
||||
#ifndef unreachable
|
||||
# define unreachable() do { \
|
||||
annotate_unreachable(); \
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ struct ethtool_link_ext_state_info {
|
|||
enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;
|
||||
enum ethtool_link_ext_substate_cable_issue cable_issue;
|
||||
enum ethtool_link_ext_substate_module module;
|
||||
u8 __link_ext_substate;
|
||||
u32 __link_ext_substate;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -262,7 +262,7 @@ struct fb_ops {
|
|||
|
||||
/* Draws a rectangle */
|
||||
void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect);
|
||||
/* Copy data from area to another. Obsolete. */
|
||||
/* Copy data from area to another */
|
||||
void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region);
|
||||
/* Draws a image to the display */
|
||||
void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image);
|
||||
|
|
|
|||
|
|
@ -1483,7 +1483,7 @@ struct super_block {
|
|||
#ifdef CONFIG_FS_VERITY
|
||||
const struct fsverity_operations *s_vop;
|
||||
#endif
|
||||
#ifdef CONFIG_UNICODE
|
||||
#if IS_ENABLED(CONFIG_UNICODE)
|
||||
struct unicode_map *s_encoding;
|
||||
__u16 s_encoding_flags;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -224,6 +224,43 @@ static inline void fsnotify_link(struct inode *dir, struct inode *inode,
|
|||
dir, &new_dentry->d_name, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_delete - @dentry was unlinked and unhashed
|
||||
*
|
||||
* Caller must make sure that dentry->d_name is stable.
|
||||
*
|
||||
* Note: unlike fsnotify_unlink(), we have to pass also the unlinked inode
|
||||
* as this may be called after d_delete() and old_dentry may be negative.
|
||||
*/
|
||||
static inline void fsnotify_delete(struct inode *dir, struct inode *inode,
|
||||
struct dentry *dentry)
|
||||
{
|
||||
__u32 mask = FS_DELETE;
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
mask |= FS_ISDIR;
|
||||
|
||||
fsnotify_name(mask, inode, FSNOTIFY_EVENT_INODE, dir, &dentry->d_name,
|
||||
0);
|
||||
}
|
||||
|
||||
/**
|
||||
* d_delete_notify - delete a dentry and call fsnotify_delete()
|
||||
* @dentry: The dentry to delete
|
||||
*
|
||||
* This helper is used to guaranty that the unlinked inode cannot be found
|
||||
* by lookup of this name after fsnotify_delete() event has been delivered.
|
||||
*/
|
||||
static inline void d_delete_notify(struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode = d_inode(dentry);
|
||||
|
||||
ihold(inode);
|
||||
d_delete(dentry);
|
||||
fsnotify_delete(dir, inode, dentry);
|
||||
iput(inode);
|
||||
}
|
||||
|
||||
/*
|
||||
* fsnotify_unlink - 'name' was unlinked
|
||||
*
|
||||
|
|
@ -231,10 +268,10 @@ static inline void fsnotify_link(struct inode *dir, struct inode *inode,
|
|||
*/
|
||||
static inline void fsnotify_unlink(struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
/* Expected to be called before d_delete() */
|
||||
WARN_ON_ONCE(d_is_negative(dentry));
|
||||
if (WARN_ON_ONCE(d_is_negative(dentry)))
|
||||
return;
|
||||
|
||||
fsnotify_dirent(dir, dentry, FS_DELETE);
|
||||
fsnotify_delete(dir, d_inode(dentry), dentry);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -258,10 +295,10 @@ static inline void fsnotify_mkdir(struct inode *dir, struct dentry *dentry)
|
|||
*/
|
||||
static inline void fsnotify_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
/* Expected to be called before d_delete() */
|
||||
WARN_ON_ONCE(d_is_negative(dentry));
|
||||
if (WARN_ON_ONCE(d_is_negative(dentry)))
|
||||
return;
|
||||
|
||||
fsnotify_dirent(dir, dentry, FS_DELETE | FS_ISDIR);
|
||||
fsnotify_delete(dir, d_inode(dentry), dentry);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -1262,6 +1262,7 @@ struct hv_device {
|
|||
struct vmbus_channel *channel;
|
||||
struct kset *channels_kset;
|
||||
struct device_dma_parameters dma_parms;
|
||||
u64 dma_mask;
|
||||
|
||||
/* place holder to keep track of the dir for hv device in debugfs */
|
||||
struct dentry *debug_dir;
|
||||
|
|
|
|||
|
|
@ -46,8 +46,10 @@ struct vlan_hdr {
|
|||
* @h_vlan_encapsulated_proto: packet type ID or len
|
||||
*/
|
||||
struct vlan_ethhdr {
|
||||
unsigned char h_dest[ETH_ALEN];
|
||||
unsigned char h_source[ETH_ALEN];
|
||||
struct_group(addrs,
|
||||
unsigned char h_dest[ETH_ALEN];
|
||||
unsigned char h_source[ETH_ALEN];
|
||||
);
|
||||
__be16 h_vlan_proto;
|
||||
__be16 h_vlan_TCI;
|
||||
__be16 h_vlan_encapsulated_proto;
|
||||
|
|
|
|||
|
|
@ -263,9 +263,11 @@ struct iomap_ioend {
|
|||
struct list_head io_list; /* next ioend in chain */
|
||||
u16 io_type;
|
||||
u16 io_flags; /* IOMAP_F_* */
|
||||
u32 io_folios; /* folios added to ioend */
|
||||
struct inode *io_inode; /* file being written to */
|
||||
size_t io_size; /* size of the extent */
|
||||
loff_t io_offset; /* offset in the file */
|
||||
sector_t io_sector; /* start sector of ioend */
|
||||
struct bio *io_bio; /* bio being built */
|
||||
struct bio io_inline_bio; /* MUST BE LAST! */
|
||||
};
|
||||
|
|
|
|||
|
|
@ -594,7 +594,7 @@ struct transaction_s
|
|||
*/
|
||||
unsigned long t_log_start;
|
||||
|
||||
/*
|
||||
/*
|
||||
* Number of buffers on the t_buffers list [j_list_lock, no locks
|
||||
* needed for jbd2 thread]
|
||||
*/
|
||||
|
|
@ -1295,7 +1295,7 @@ struct journal_s
|
|||
* Clean-up after fast commit or full commit. JBD2 calls this function
|
||||
* after every commit operation.
|
||||
*/
|
||||
void (*j_fc_cleanup_callback)(struct journal_s *journal, int);
|
||||
void (*j_fc_cleanup_callback)(struct journal_s *journal, int full, tid_t tid);
|
||||
|
||||
/**
|
||||
* @j_fc_replay_callback:
|
||||
|
|
@ -1419,9 +1419,7 @@ extern void jbd2_journal_unfile_buffer(journal_t *, struct journal_head *);
|
|||
extern bool __jbd2_journal_refile_buffer(struct journal_head *);
|
||||
extern void jbd2_journal_refile_buffer(journal_t *, struct journal_head *);
|
||||
extern void __jbd2_journal_file_buffer(struct journal_head *, transaction_t *, int);
|
||||
extern void __journal_free_buffer(struct journal_head *bh);
|
||||
extern void jbd2_journal_file_buffer(struct journal_head *, transaction_t *, int);
|
||||
extern void __journal_clean_data_list(transaction_t *transaction);
|
||||
static inline void jbd2_file_log_bh(struct list_head *head, struct buffer_head *bh)
|
||||
{
|
||||
list_add_tail(&bh->b_assoc_buffers, head);
|
||||
|
|
@ -1486,9 +1484,6 @@ extern int jbd2_journal_write_metadata_buffer(transaction_t *transaction,
|
|||
struct buffer_head **bh_out,
|
||||
sector_t blocknr);
|
||||
|
||||
/* Transaction locking */
|
||||
extern void __wait_on_journal (journal_t *);
|
||||
|
||||
/* Transaction cache support */
|
||||
extern void jbd2_journal_destroy_transaction_cache(void);
|
||||
extern int __init jbd2_journal_init_transaction_cache(void);
|
||||
|
|
@ -1543,6 +1538,8 @@ extern int jbd2_journal_flush(journal_t *journal, unsigned int flags);
|
|||
extern void jbd2_journal_lock_updates (journal_t *);
|
||||
extern void jbd2_journal_unlock_updates (journal_t *);
|
||||
|
||||
void jbd2_journal_wait_updates(journal_t *);
|
||||
|
||||
extern journal_t * jbd2_journal_init_dev(struct block_device *bdev,
|
||||
struct block_device *fs_dev,
|
||||
unsigned long long start, int len, int bsize);
|
||||
|
|
@ -1774,8 +1771,6 @@ static inline unsigned long jbd2_log_space_left(journal_t *journal)
|
|||
#define BJ_Reserved 4 /* Buffer is reserved for access by journal */
|
||||
#define BJ_Types 5
|
||||
|
||||
extern int jbd_blocks_per_page(struct inode *inode);
|
||||
|
||||
/* JBD uses a CRC32 checksum */
|
||||
#define JBD_MAX_CHECKSUM_SIZE 4
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@
|
|||
#include <linux/atomic.h>
|
||||
#include <linux/static_key.h>
|
||||
|
||||
extern unsigned long kfence_sample_interval;
|
||||
|
||||
/*
|
||||
* We allocate an even number of pages, as it simplifies calculations to map
|
||||
* address to metadata indices; effectively, the very first page serves as an
|
||||
|
|
|
|||
|
|
@ -29,7 +29,9 @@
|
|||
#include <linux/refcount.h>
|
||||
#include <linux/nospec.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/ftrace.h>
|
||||
#include <linux/hashtable.h>
|
||||
#include <linux/instrumentation.h>
|
||||
#include <linux/interval_tree.h>
|
||||
#include <linux/rbtree.h>
|
||||
#include <linux/xarray.h>
|
||||
|
|
@ -368,8 +370,11 @@ struct kvm_vcpu {
|
|||
u64 last_used_slot_gen;
|
||||
};
|
||||
|
||||
/* must be called with irqs disabled */
|
||||
static __always_inline void guest_enter_irqoff(void)
|
||||
/*
|
||||
* Start accounting time towards a guest.
|
||||
* Must be called before entering guest context.
|
||||
*/
|
||||
static __always_inline void guest_timing_enter_irqoff(void)
|
||||
{
|
||||
/*
|
||||
* This is running in ioctl context so its safe to assume that it's the
|
||||
|
|
@ -378,7 +383,18 @@ static __always_inline void guest_enter_irqoff(void)
|
|||
instrumentation_begin();
|
||||
vtime_account_guest_enter();
|
||||
instrumentation_end();
|
||||
}
|
||||
|
||||
/*
|
||||
* Enter guest context and enter an RCU extended quiescent state.
|
||||
*
|
||||
* Between guest_context_enter_irqoff() and guest_context_exit_irqoff() it is
|
||||
* unsafe to use any code which may directly or indirectly use RCU, tracing
|
||||
* (including IRQ flag tracing), or lockdep. All code in this period must be
|
||||
* non-instrumentable.
|
||||
*/
|
||||
static __always_inline void guest_context_enter_irqoff(void)
|
||||
{
|
||||
/*
|
||||
* KVM does not hold any references to rcu protected data when it
|
||||
* switches CPU into a guest mode. In fact switching to a guest mode
|
||||
|
|
@ -394,16 +410,79 @@ static __always_inline void guest_enter_irqoff(void)
|
|||
}
|
||||
}
|
||||
|
||||
static __always_inline void guest_exit_irqoff(void)
|
||||
/*
|
||||
* Deprecated. Architectures should move to guest_timing_enter_irqoff() and
|
||||
* guest_state_enter_irqoff().
|
||||
*/
|
||||
static __always_inline void guest_enter_irqoff(void)
|
||||
{
|
||||
guest_timing_enter_irqoff();
|
||||
guest_context_enter_irqoff();
|
||||
}
|
||||
|
||||
/**
|
||||
* guest_state_enter_irqoff - Fixup state when entering a guest
|
||||
*
|
||||
* Entry to a guest will enable interrupts, but the kernel state is interrupts
|
||||
* disabled when this is invoked. Also tell RCU about it.
|
||||
*
|
||||
* 1) Trace interrupts on state
|
||||
* 2) Invoke context tracking if enabled to adjust RCU state
|
||||
* 3) Tell lockdep that interrupts are enabled
|
||||
*
|
||||
* Invoked from architecture specific code before entering a guest.
|
||||
* Must be called with interrupts disabled and the caller must be
|
||||
* non-instrumentable.
|
||||
* The caller has to invoke guest_timing_enter_irqoff() before this.
|
||||
*
|
||||
* Note: this is analogous to exit_to_user_mode().
|
||||
*/
|
||||
static __always_inline void guest_state_enter_irqoff(void)
|
||||
{
|
||||
instrumentation_begin();
|
||||
trace_hardirqs_on_prepare();
|
||||
lockdep_hardirqs_on_prepare(CALLER_ADDR0);
|
||||
instrumentation_end();
|
||||
|
||||
guest_context_enter_irqoff();
|
||||
lockdep_hardirqs_on(CALLER_ADDR0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Exit guest context and exit an RCU extended quiescent state.
|
||||
*
|
||||
* Between guest_context_enter_irqoff() and guest_context_exit_irqoff() it is
|
||||
* unsafe to use any code which may directly or indirectly use RCU, tracing
|
||||
* (including IRQ flag tracing), or lockdep. All code in this period must be
|
||||
* non-instrumentable.
|
||||
*/
|
||||
static __always_inline void guest_context_exit_irqoff(void)
|
||||
{
|
||||
context_tracking_guest_exit();
|
||||
}
|
||||
|
||||
/*
|
||||
* Stop accounting time towards a guest.
|
||||
* Must be called after exiting guest context.
|
||||
*/
|
||||
static __always_inline void guest_timing_exit_irqoff(void)
|
||||
{
|
||||
instrumentation_begin();
|
||||
/* Flush the guest cputime we spent on the guest */
|
||||
vtime_account_guest_exit();
|
||||
instrumentation_end();
|
||||
}
|
||||
|
||||
/*
|
||||
* Deprecated. Architectures should move to guest_state_exit_irqoff() and
|
||||
* guest_timing_exit_irqoff().
|
||||
*/
|
||||
static __always_inline void guest_exit_irqoff(void)
|
||||
{
|
||||
guest_context_exit_irqoff();
|
||||
guest_timing_exit_irqoff();
|
||||
}
|
||||
|
||||
static inline void guest_exit(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
|
@ -413,6 +492,33 @@ static inline void guest_exit(void)
|
|||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* guest_state_exit_irqoff - Establish state when returning from guest mode
|
||||
*
|
||||
* Entry from a guest disables interrupts, but guest mode is traced as
|
||||
* interrupts enabled. Also with NO_HZ_FULL RCU might be idle.
|
||||
*
|
||||
* 1) Tell lockdep that interrupts are disabled
|
||||
* 2) Invoke context tracking if enabled to reactivate RCU
|
||||
* 3) Trace interrupts off state
|
||||
*
|
||||
* Invoked from architecture specific code after exiting a guest.
|
||||
* Must be invoked with interrupts disabled and the caller must be
|
||||
* non-instrumentable.
|
||||
* The caller has to invoke guest_timing_exit_irqoff() after this.
|
||||
*
|
||||
* Note: this is analogous to enter_from_user_mode().
|
||||
*/
|
||||
static __always_inline void guest_state_exit_irqoff(void)
|
||||
{
|
||||
lockdep_hardirqs_off(CALLER_ADDR0);
|
||||
guest_context_exit_irqoff();
|
||||
|
||||
instrumentation_begin();
|
||||
trace_hardirqs_off_finish();
|
||||
instrumentation_end();
|
||||
}
|
||||
|
||||
static inline int kvm_vcpu_exiting_guest_mode(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -380,6 +380,7 @@ enum {
|
|||
ATA_HORKAGE_MAX_TRIM_128M = (1 << 26), /* Limit max trim size to 128M */
|
||||
ATA_HORKAGE_NO_NCQ_ON_ATI = (1 << 27), /* Disable NCQ on ATI chipset */
|
||||
ATA_HORKAGE_NO_ID_DEV_LOG = (1 << 28), /* Identify device log missing */
|
||||
ATA_HORKAGE_NO_LOG_DIR = (1 << 29), /* Do not read log directory */
|
||||
|
||||
/* DMA mask for user DMA control: User visible values; DO NOT
|
||||
renumber */
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ LSM_HOOK(int, 0, sb_clone_mnt_opts, const struct super_block *oldsb,
|
|||
unsigned long *set_kern_flags)
|
||||
LSM_HOOK(int, 0, move_mount, const struct path *from_path,
|
||||
const struct path *to_path)
|
||||
LSM_HOOK(int, 0, dentry_init_security, struct dentry *dentry,
|
||||
LSM_HOOK(int, -EOPNOTSUPP, dentry_init_security, struct dentry *dentry,
|
||||
int mode, const struct qstr *name, const char **xattr_name,
|
||||
void **ctx, u32 *ctxlen)
|
||||
LSM_HOOK(int, 0, dentry_create_files_as, struct dentry *dentry, int mode,
|
||||
|
|
|
|||
|
|
@ -219,7 +219,7 @@ struct obj_cgroup {
|
|||
struct mem_cgroup *memcg;
|
||||
atomic_t nr_charged_bytes;
|
||||
union {
|
||||
struct list_head list;
|
||||
struct list_head list; /* protected by objcg_lock */
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
};
|
||||
|
|
@ -315,7 +315,8 @@ struct mem_cgroup {
|
|||
#ifdef CONFIG_MEMCG_KMEM
|
||||
int kmemcg_id;
|
||||
struct obj_cgroup __rcu *objcg;
|
||||
struct list_head objcg_list; /* list of inherited objcgs */
|
||||
/* list of inherited objcgs, protected by objcg_lock */
|
||||
struct list_head objcg_list;
|
||||
#endif
|
||||
|
||||
MEMCG_PADDING(_pad2_);
|
||||
|
|
|
|||
|
|
@ -1506,11 +1506,18 @@ static inline u8 page_kasan_tag(const struct page *page)
|
|||
|
||||
static inline void page_kasan_tag_set(struct page *page, u8 tag)
|
||||
{
|
||||
if (kasan_enabled()) {
|
||||
tag ^= 0xff;
|
||||
page->flags &= ~(KASAN_TAG_MASK << KASAN_TAG_PGSHIFT);
|
||||
page->flags |= (tag & KASAN_TAG_MASK) << KASAN_TAG_PGSHIFT;
|
||||
}
|
||||
unsigned long old_flags, flags;
|
||||
|
||||
if (!kasan_enabled())
|
||||
return;
|
||||
|
||||
tag ^= 0xff;
|
||||
old_flags = READ_ONCE(page->flags);
|
||||
do {
|
||||
flags = old_flags;
|
||||
flags &= ~(KASAN_TAG_MASK << KASAN_TAG_PGSHIFT);
|
||||
flags |= (tag & KASAN_TAG_MASK) << KASAN_TAG_PGSHIFT;
|
||||
} while (unlikely(!try_cmpxchg(&page->flags, &old_flags, flags)));
|
||||
}
|
||||
|
||||
static inline void page_kasan_tag_reset(struct page *page)
|
||||
|
|
|
|||
|
|
@ -261,6 +261,7 @@ static_assert(sizeof(struct page) == sizeof(struct folio));
|
|||
static_assert(offsetof(struct page, pg) == offsetof(struct folio, fl))
|
||||
FOLIO_MATCH(flags, flags);
|
||||
FOLIO_MATCH(lru, lru);
|
||||
FOLIO_MATCH(mapping, mapping);
|
||||
FOLIO_MATCH(compound_head, lru);
|
||||
FOLIO_MATCH(index, index);
|
||||
FOLIO_MATCH(private, private);
|
||||
|
|
|
|||
|
|
@ -47,8 +47,6 @@
|
|||
#define SPINOR_OP_RDID 0x9f /* Read JEDEC ID */
|
||||
#define SPINOR_OP_RDSFDP 0x5a /* Read SFDP */
|
||||
#define SPINOR_OP_RDCR 0x35 /* Read configuration register */
|
||||
#define SPINOR_OP_RDFSR 0x70 /* Read flag status register */
|
||||
#define SPINOR_OP_CLFSR 0x50 /* Clear flag status register */
|
||||
#define SPINOR_OP_RDEAR 0xc8 /* Read Extended Address Register */
|
||||
#define SPINOR_OP_WREAR 0xc5 /* Write Extended Address Register */
|
||||
#define SPINOR_OP_SRSTEN 0x66 /* Software Reset Enable */
|
||||
|
|
@ -86,22 +84,12 @@
|
|||
#define SPINOR_OP_BP 0x02 /* Byte program */
|
||||
#define SPINOR_OP_AAI_WP 0xad /* Auto address increment word program */
|
||||
|
||||
/* Used for S3AN flashes only */
|
||||
#define SPINOR_OP_XSE 0x50 /* Sector erase */
|
||||
#define SPINOR_OP_XPP 0x82 /* Page program */
|
||||
#define SPINOR_OP_XRDSR 0xd7 /* Read status register */
|
||||
|
||||
#define XSR_PAGESIZE BIT(0) /* Page size in Po2 or Linear */
|
||||
#define XSR_RDY BIT(7) /* Ready */
|
||||
|
||||
|
||||
/* Used for Macronix and Winbond flashes. */
|
||||
#define SPINOR_OP_EN4B 0xb7 /* Enter 4-byte mode */
|
||||
#define SPINOR_OP_EX4B 0xe9 /* Exit 4-byte mode */
|
||||
|
||||
/* Used for Spansion flashes only. */
|
||||
#define SPINOR_OP_BRWR 0x17 /* Bank register write */
|
||||
#define SPINOR_OP_CLSR 0x30 /* Clear status register 1 */
|
||||
|
||||
/* Used for Micron flashes only. */
|
||||
#define SPINOR_OP_RD_EVCR 0x65 /* Read EVCR register */
|
||||
|
|
@ -135,12 +123,6 @@
|
|||
/* Enhanced Volatile Configuration Register bits */
|
||||
#define EVCR_QUAD_EN_MICRON BIT(7) /* Micron Quad I/O */
|
||||
|
||||
/* Flag Status Register bits */
|
||||
#define FSR_READY BIT(7) /* Device status, 0 = Busy, 1 = Ready */
|
||||
#define FSR_E_ERR BIT(5) /* Erase operation status */
|
||||
#define FSR_P_ERR BIT(4) /* Program operation status */
|
||||
#define FSR_PT_ERR BIT(1) /* Protection error bit */
|
||||
|
||||
/* Status Register 2 bits. */
|
||||
#define SR2_QUAD_EN_BIT1 BIT(1)
|
||||
#define SR2_LB1 BIT(3) /* Security Register Lock Bit 1 */
|
||||
|
|
|
|||
|
|
@ -2158,7 +2158,7 @@ struct net_device {
|
|||
struct netdev_queue *_tx ____cacheline_aligned_in_smp;
|
||||
unsigned int num_tx_queues;
|
||||
unsigned int real_num_tx_queues;
|
||||
struct Qdisc *qdisc;
|
||||
struct Qdisc __rcu *qdisc;
|
||||
unsigned int tx_queue_len;
|
||||
spinlock_t tx_global_lock;
|
||||
|
||||
|
|
@ -2548,6 +2548,7 @@ struct packet_type {
|
|||
struct net_device *);
|
||||
bool (*id_match)(struct packet_type *ptype,
|
||||
struct sock *sk);
|
||||
struct net *af_packet_net;
|
||||
void *af_packet_priv;
|
||||
struct list_head list;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -244,6 +244,13 @@ struct netfs_cache_ops {
|
|||
int (*prepare_write)(struct netfs_cache_resources *cres,
|
||||
loff_t *_start, size_t *_len, loff_t i_size,
|
||||
bool no_space_allocated_yet);
|
||||
|
||||
/* Query the occupancy of the cache in a region, returning where the
|
||||
* next chunk of data starts and how long it is.
|
||||
*/
|
||||
int (*query_occupancy)(struct netfs_cache_resources *cres,
|
||||
loff_t start, size_t len, size_t granularity,
|
||||
loff_t *_data_start, size_t *_data_len);
|
||||
};
|
||||
|
||||
struct readahead_control;
|
||||
|
|
|
|||
|
|
@ -36,14 +36,6 @@ static inline void nfs_copy_fh(struct nfs_fh *target, const struct nfs_fh *sourc
|
|||
memcpy(target->data, source->data, source->size);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This is really a general kernel constant, but since nothing like
|
||||
* this is defined in the kernel headers, I have to do it here.
|
||||
*/
|
||||
#define NFS_OFFSET_MAX ((__s64)((~(__u64)0) >> 1))
|
||||
|
||||
|
||||
enum nfs3_stable_how {
|
||||
NFS_UNSTABLE = 0,
|
||||
NFS_DATA_SYNC = 1,
|
||||
|
|
|
|||
|
|
@ -61,7 +61,9 @@
|
|||
struct nfs_access_entry {
|
||||
struct rb_node rb_node;
|
||||
struct list_head lru;
|
||||
const struct cred * cred;
|
||||
kuid_t fsuid;
|
||||
kgid_t fsgid;
|
||||
struct group_info *group_info;
|
||||
__u32 mask;
|
||||
struct rcu_head rcu_head;
|
||||
};
|
||||
|
|
@ -105,6 +107,7 @@ struct nfs_open_dir_context {
|
|||
__u64 dup_cookie;
|
||||
pgoff_t page_index;
|
||||
signed char duped;
|
||||
bool eof;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -395,7 +398,7 @@ extern int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fa
|
|||
extern int nfs_post_op_update_inode_force_wcc_locked(struct inode *inode, struct nfs_fattr *fattr);
|
||||
extern int nfs_getattr(struct user_namespace *, const struct path *,
|
||||
struct kstat *, u32, unsigned int);
|
||||
extern void nfs_access_add_cache(struct inode *, struct nfs_access_entry *);
|
||||
extern void nfs_access_add_cache(struct inode *, struct nfs_access_entry *, const struct cred *);
|
||||
extern void nfs_access_set_mask(struct nfs_access_entry *, u32);
|
||||
extern int nfs_permission(struct user_namespace *, struct inode *, int);
|
||||
extern int nfs_open(struct inode *, struct file *);
|
||||
|
|
@ -532,8 +535,8 @@ extern int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fh,
|
|||
struct nfs_fattr *fattr);
|
||||
extern int nfs_may_open(struct inode *inode, const struct cred *cred, int openflags);
|
||||
extern void nfs_access_zap_cache(struct inode *inode);
|
||||
extern int nfs_access_get_cached(struct inode *inode, const struct cred *cred, struct nfs_access_entry *res,
|
||||
bool may_block);
|
||||
extern int nfs_access_get_cached(struct inode *inode, const struct cred *cred,
|
||||
u32 *mask, bool may_block);
|
||||
|
||||
/*
|
||||
* linux/fs/nfs/symlink.c
|
||||
|
|
|
|||
|
|
@ -266,6 +266,8 @@ struct nfs_server {
|
|||
#define NFS_CAP_ACLS (1U << 3)
|
||||
#define NFS_CAP_ATOMIC_OPEN (1U << 4)
|
||||
#define NFS_CAP_LGOPEN (1U << 5)
|
||||
#define NFS_CAP_CASE_INSENSITIVE (1U << 6)
|
||||
#define NFS_CAP_CASE_PRESERVING (1U << 7)
|
||||
#define NFS_CAP_POSIX_LOCK (1U << 14)
|
||||
#define NFS_CAP_UIDGID_NOMAP (1U << 15)
|
||||
#define NFS_CAP_STATEID_NFSV41 (1U << 16)
|
||||
|
|
@ -282,5 +284,5 @@ struct nfs_server {
|
|||
#define NFS_CAP_COPY_NOTIFY (1U << 27)
|
||||
#define NFS_CAP_XATTR (1U << 28)
|
||||
#define NFS_CAP_READ_PLUS (1U << 29)
|
||||
|
||||
#define NFS_CAP_FS_LOCATIONS (1U << 30)
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1194,6 +1194,8 @@ struct nfs4_server_caps_res {
|
|||
u32 has_links;
|
||||
u32 has_symlinks;
|
||||
u32 fh_expire_type;
|
||||
u32 case_insensitive;
|
||||
u32 case_preserving;
|
||||
};
|
||||
|
||||
#define NFS4_PATHNAME_MAXCOMPONENTS 512
|
||||
|
|
@ -1737,7 +1739,7 @@ struct nfs_rpc_ops {
|
|||
struct nfs_fh *, struct nfs_fattr *);
|
||||
int (*lookupp) (struct inode *, struct nfs_fh *,
|
||||
struct nfs_fattr *);
|
||||
int (*access) (struct inode *, struct nfs_access_entry *);
|
||||
int (*access) (struct inode *, struct nfs_access_entry *, const struct cred *);
|
||||
int (*readlink)(struct inode *, struct page *, unsigned int,
|
||||
unsigned int);
|
||||
int (*create) (struct inode *, struct dentry *,
|
||||
|
|
@ -1795,6 +1797,7 @@ struct nfs_rpc_ops {
|
|||
struct nfs_server *(*create_server)(struct fs_context *);
|
||||
struct nfs_server *(*clone_server)(struct nfs_server *, struct nfs_fh *,
|
||||
struct nfs_fattr *, rpc_authflavor_t);
|
||||
int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -26,6 +26,9 @@ void __page_table_check_pmd_set(struct mm_struct *mm, unsigned long addr,
|
|||
pmd_t *pmdp, pmd_t pmd);
|
||||
void __page_table_check_pud_set(struct mm_struct *mm, unsigned long addr,
|
||||
pud_t *pudp, pud_t pud);
|
||||
void __page_table_check_pte_clear_range(struct mm_struct *mm,
|
||||
unsigned long addr,
|
||||
pmd_t pmd);
|
||||
|
||||
static inline void page_table_check_alloc(struct page *page, unsigned int order)
|
||||
{
|
||||
|
|
@ -100,6 +103,16 @@ static inline void page_table_check_pud_set(struct mm_struct *mm,
|
|||
__page_table_check_pud_set(mm, addr, pudp, pud);
|
||||
}
|
||||
|
||||
static inline void page_table_check_pte_clear_range(struct mm_struct *mm,
|
||||
unsigned long addr,
|
||||
pmd_t pmd)
|
||||
{
|
||||
if (static_branch_likely(&page_table_check_disabled))
|
||||
return;
|
||||
|
||||
__page_table_check_pte_clear_range(mm, addr, pmd);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static inline void page_table_check_alloc(struct page *page, unsigned int order)
|
||||
|
|
@ -143,5 +156,11 @@ static inline void page_table_check_pud_set(struct mm_struct *mm,
|
|||
{
|
||||
}
|
||||
|
||||
static inline void page_table_check_pte_clear_range(struct mm_struct *mm,
|
||||
unsigned long addr,
|
||||
pmd_t pmd)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* CONFIG_PAGE_TABLE_CHECK */
|
||||
#endif /* __LINUX_PAGE_TABLE_CHECK_H */
|
||||
|
|
|
|||
|
|
@ -693,18 +693,6 @@ struct perf_event {
|
|||
u64 total_time_running;
|
||||
u64 tstamp;
|
||||
|
||||
/*
|
||||
* timestamp shadows the actual context timing but it can
|
||||
* be safely used in NMI interrupt context. It reflects the
|
||||
* context time as it was when the event was last scheduled in,
|
||||
* or when ctx_sched_in failed to schedule the event because we
|
||||
* run out of PMC.
|
||||
*
|
||||
* ctx_time already accounts for ctx->timestamp. Therefore to
|
||||
* compute ctx_time for a sample, simply add perf_clock().
|
||||
*/
|
||||
u64 shadow_ctx_time;
|
||||
|
||||
struct perf_event_attr attr;
|
||||
u16 header_size;
|
||||
u16 id_header_size;
|
||||
|
|
@ -852,6 +840,7 @@ struct perf_event_context {
|
|||
*/
|
||||
u64 time;
|
||||
u64 timestamp;
|
||||
u64 timeoffset;
|
||||
|
||||
/*
|
||||
* These fields let us detect when two contexts have both
|
||||
|
|
@ -934,6 +923,8 @@ struct bpf_perf_event_data_kern {
|
|||
struct perf_cgroup_info {
|
||||
u64 time;
|
||||
u64 timestamp;
|
||||
u64 timeoffset;
|
||||
int active;
|
||||
};
|
||||
|
||||
struct perf_cgroup {
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ static inline unsigned long pte_index(unsigned long address)
|
|||
{
|
||||
return (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
|
||||
}
|
||||
#define pte_index pte_index
|
||||
|
||||
#ifndef pmd_index
|
||||
static inline unsigned long pmd_index(unsigned long address)
|
||||
|
|
|
|||
|
|
@ -86,4 +86,9 @@ extern struct pid_namespace *task_active_pid_ns(struct task_struct *tsk);
|
|||
void pidhash_init(void);
|
||||
void pid_idr_init(void);
|
||||
|
||||
static inline bool task_is_in_init_pid_ns(struct task_struct *tsk)
|
||||
{
|
||||
return task_active_pid_ns(tsk) == &init_pid_ns;
|
||||
}
|
||||
|
||||
#endif /* _LINUX_PID_NS_H */
|
||||
|
|
|
|||
|
|
@ -25,18 +25,17 @@ void psi_memstall_enter(unsigned long *flags);
|
|||
void psi_memstall_leave(unsigned long *flags);
|
||||
|
||||
int psi_show(struct seq_file *s, struct psi_group *group, enum psi_res res);
|
||||
struct psi_trigger *psi_trigger_create(struct psi_group *group,
|
||||
char *buf, size_t nbytes, enum psi_res res);
|
||||
void psi_trigger_destroy(struct psi_trigger *t);
|
||||
|
||||
__poll_t psi_trigger_poll(void **trigger_ptr, struct file *file,
|
||||
poll_table *wait);
|
||||
|
||||
#ifdef CONFIG_CGROUPS
|
||||
int psi_cgroup_alloc(struct cgroup *cgrp);
|
||||
void psi_cgroup_free(struct cgroup *cgrp);
|
||||
void cgroup_move_task(struct task_struct *p, struct css_set *to);
|
||||
|
||||
struct psi_trigger *psi_trigger_create(struct psi_group *group,
|
||||
char *buf, size_t nbytes, enum psi_res res);
|
||||
void psi_trigger_replace(void **trigger_ptr, struct psi_trigger *t);
|
||||
|
||||
__poll_t psi_trigger_poll(void **trigger_ptr, struct file *file,
|
||||
poll_table *wait);
|
||||
#endif
|
||||
|
||||
#else /* CONFIG_PSI */
|
||||
|
|
|
|||
|
|
@ -141,9 +141,6 @@ struct psi_trigger {
|
|||
* events to one per window
|
||||
*/
|
||||
u64 last_event_time;
|
||||
|
||||
/* Refcounting to prevent premature destruction */
|
||||
struct kref refcount;
|
||||
};
|
||||
|
||||
struct psi_group {
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ extern bool qid_valid(struct kqid qid);
|
|||
*
|
||||
* When there is no mapping defined for the user-namespace, type,
|
||||
* qid tuple an invalid kqid is returned. Callers are expected to
|
||||
* test for and handle handle invalid kqids being returned.
|
||||
* test for and handle invalid kqids being returned.
|
||||
* Invalid kqids may be tested for using qid_valid().
|
||||
*/
|
||||
static inline struct kqid make_kqid(struct user_namespace *from,
|
||||
|
|
|
|||
|
|
@ -619,10 +619,6 @@ struct sched_dl_entity {
|
|||
* task has to wait for a replenishment to be performed at the
|
||||
* next firing of dl_timer.
|
||||
*
|
||||
* @dl_boosted tells if we are boosted due to DI. If so we are
|
||||
* outside bandwidth enforcement mechanism (but only until we
|
||||
* exit the critical section);
|
||||
*
|
||||
* @dl_yielded tells if task gave up the CPU before consuming
|
||||
* all its available runtime during the last job.
|
||||
*
|
||||
|
|
@ -1684,7 +1680,6 @@ extern struct pid *cad_pid;
|
|||
#define PF_MEMALLOC 0x00000800 /* Allocating memory */
|
||||
#define PF_NPROC_EXCEEDED 0x00001000 /* set_user() noticed that RLIMIT_NPROC was exceeded */
|
||||
#define PF_USED_MATH 0x00002000 /* If unset the fpu must be initialized before use */
|
||||
#define PF_USED_ASYNC 0x00004000 /* Used async_schedule*(), used by module init */
|
||||
#define PF_NOFREEZE 0x00008000 /* This thread should not be frozen */
|
||||
#define PF_FROZEN 0x00010000 /* Frozen for system suspend */
|
||||
#define PF_KSWAPD 0x00020000 /* I am kswapd */
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ extern asmlinkage void schedule_tail(struct task_struct *prev);
|
|||
extern void init_idle(struct task_struct *idle, int cpu);
|
||||
|
||||
extern int sched_fork(unsigned long clone_flags, struct task_struct *p);
|
||||
extern void sched_post_fork(struct task_struct *p,
|
||||
struct kernel_clone_args *kargs);
|
||||
extern void sched_cgroup_fork(struct task_struct *p, struct kernel_clone_args *kargs);
|
||||
extern void sched_post_fork(struct task_struct *p);
|
||||
extern void sched_dead(struct task_struct *p);
|
||||
|
||||
void __noreturn do_task_dead(void);
|
||||
|
|
|
|||
|
|
@ -318,7 +318,7 @@ enum skb_drop_reason {
|
|||
SKB_DROP_REASON_NO_SOCKET,
|
||||
SKB_DROP_REASON_PKT_TOO_SMALL,
|
||||
SKB_DROP_REASON_TCP_CSUM,
|
||||
SKB_DROP_REASON_TCP_FILTER,
|
||||
SKB_DROP_REASON_SOCKET_FILTER,
|
||||
SKB_DROP_REASON_UDP_CSUM,
|
||||
SKB_DROP_REASON_MAX,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -430,15 +430,7 @@ struct platform_hibernation_ops {
|
|||
|
||||
#ifdef CONFIG_HIBERNATION
|
||||
/* kernel/power/snapshot.c */
|
||||
extern void __register_nosave_region(unsigned long b, unsigned long e, int km);
|
||||
static inline void __init register_nosave_region(unsigned long b, unsigned long e)
|
||||
{
|
||||
__register_nosave_region(b, e, 0);
|
||||
}
|
||||
static inline void __init register_nosave_region_late(unsigned long b, unsigned long e)
|
||||
{
|
||||
__register_nosave_region(b, e, 1);
|
||||
}
|
||||
extern void register_nosave_region(unsigned long b, unsigned long e);
|
||||
extern int swsusp_page_is_forbidden(struct page *);
|
||||
extern void swsusp_set_page_free(struct page *);
|
||||
extern void swsusp_unset_page_free(struct page *);
|
||||
|
|
@ -458,7 +450,6 @@ int pfn_is_nosave(unsigned long pfn);
|
|||
int hibernate_quiet_exec(int (*func)(void *data), void *data);
|
||||
#else /* CONFIG_HIBERNATION */
|
||||
static inline void register_nosave_region(unsigned long b, unsigned long e) {}
|
||||
static inline void register_nosave_region_late(unsigned long b, unsigned long e) {}
|
||||
static inline int swsusp_page_is_forbidden(struct page *p) { return 0; }
|
||||
static inline void swsusp_set_page_free(struct page *p) {}
|
||||
static inline void swsusp_unset_page_free(struct page *p) {}
|
||||
|
|
@ -506,14 +497,14 @@ extern void ksys_sync_helper(void);
|
|||
|
||||
/* drivers/base/power/wakeup.c */
|
||||
extern bool events_check_enabled;
|
||||
extern unsigned int pm_wakeup_irq;
|
||||
extern suspend_state_t pm_suspend_target_state;
|
||||
|
||||
extern bool pm_wakeup_pending(void);
|
||||
extern void pm_system_wakeup(void);
|
||||
extern void pm_system_cancel_wakeup(void);
|
||||
extern void pm_wakeup_clear(bool reset);
|
||||
extern void pm_wakeup_clear(unsigned int irq_number);
|
||||
extern void pm_system_irq_wakeup(unsigned int irq_number);
|
||||
extern unsigned int pm_wakeup_irq(void);
|
||||
extern bool pm_get_wakeup_count(unsigned int *count, bool block);
|
||||
extern bool pm_save_wakeup_count(unsigned int count);
|
||||
extern void pm_wakep_autosleep_enabled(bool set);
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ static inline struct ctl_table_header *register_sysctl_table(struct ctl_table *
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct sysctl_header *register_sysctl_mount_point(const char *path)
|
||||
static inline struct ctl_table_header *register_sysctl_mount_point(const char *path)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,6 +91,12 @@ fwnode_usb_role_switch_get(struct fwnode_handle *node)
|
|||
|
||||
static inline void usb_role_switch_put(struct usb_role_switch *sw) { }
|
||||
|
||||
static inline struct usb_role_switch *
|
||||
usb_role_switch_find_by_fwnode(const struct fwnode_handle *fwnode)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct usb_role_switch *
|
||||
usb_role_switch_register(struct device *parent,
|
||||
const struct usb_role_switch_desc *desc)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue