Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
No conflicts. Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
9cbc991126
201 changed files with 2493 additions and 1676 deletions
|
|
@ -403,7 +403,6 @@ enum {
|
|||
extern int bioset_init(struct bio_set *, unsigned int, unsigned int, int flags);
|
||||
extern void bioset_exit(struct bio_set *);
|
||||
extern int biovec_init_pool(mempool_t *pool, int pool_entries);
|
||||
extern int bioset_init_from_src(struct bio_set *bs, struct bio_set *src);
|
||||
|
||||
struct bio *bio_alloc_bioset(struct block_device *bdev, unsigned short nr_vecs,
|
||||
unsigned int opf, gfp_t gfp_mask,
|
||||
|
|
|
|||
|
|
@ -65,6 +65,9 @@ extern ssize_t cpu_show_tsx_async_abort(struct device *dev,
|
|||
extern ssize_t cpu_show_itlb_multihit(struct device *dev,
|
||||
struct device_attribute *attr, char *buf);
|
||||
extern ssize_t cpu_show_srbds(struct device *dev, struct device_attribute *attr, char *buf);
|
||||
extern ssize_t cpu_show_mmio_stale_data(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf);
|
||||
|
||||
extern __printf(4, 5)
|
||||
struct device *cpu_device_create(struct device *parent, void *drvdata,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* Implements the standard CRC ITU-T V.41:
|
||||
* Width 16
|
||||
* Poly 0x1021 (x^16 + x^12 + x^15 + 1)
|
||||
* Poly 0x1021 (x^16 + x^12 + x^5 + 1)
|
||||
* Init 0
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -227,6 +227,7 @@ struct page {
|
|||
* struct folio - Represents a contiguous set of bytes.
|
||||
* @flags: Identical to the page flags.
|
||||
* @lru: Least Recently Used list; tracks how recently this folio was used.
|
||||
* @mlock_count: Number of times this folio has been pinned by mlock().
|
||||
* @mapping: The file this page belongs to, or refers to the anon_vma for
|
||||
* anonymous memory.
|
||||
* @index: Offset within the file, in units of pages. For anonymous memory,
|
||||
|
|
@ -255,10 +256,14 @@ struct folio {
|
|||
unsigned long flags;
|
||||
union {
|
||||
struct list_head lru;
|
||||
/* private: avoid cluttering the output */
|
||||
struct {
|
||||
void *__filler;
|
||||
/* public: */
|
||||
unsigned int mlock_count;
|
||||
/* private: */
|
||||
};
|
||||
/* public: */
|
||||
};
|
||||
struct address_space *mapping;
|
||||
pgoff_t index;
|
||||
|
|
|
|||
|
|
@ -206,7 +206,9 @@ struct netfs_io_request {
|
|||
*/
|
||||
struct netfs_request_ops {
|
||||
int (*init_request)(struct netfs_io_request *rreq, struct file *file);
|
||||
void (*free_request)(struct netfs_io_request *rreq);
|
||||
int (*begin_cache_operation)(struct netfs_io_request *rreq);
|
||||
|
||||
void (*expand_readahead)(struct netfs_io_request *rreq);
|
||||
bool (*clamp_length)(struct netfs_io_subrequest *subreq);
|
||||
void (*issue_read)(struct netfs_io_subrequest *subreq);
|
||||
|
|
@ -214,7 +216,6 @@ struct netfs_request_ops {
|
|||
int (*check_write_begin)(struct file *file, loff_t pos, unsigned len,
|
||||
struct folio *folio, void **_fsdata);
|
||||
void (*done)(struct netfs_io_request *rreq);
|
||||
void (*cleanup)(struct address_space *mapping, void *netfs_priv);
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -277,7 +278,8 @@ struct netfs_cache_ops {
|
|||
struct readahead_control;
|
||||
extern void netfs_readahead(struct readahead_control *);
|
||||
int netfs_read_folio(struct file *, struct folio *);
|
||||
extern int netfs_write_begin(struct file *, struct address_space *,
|
||||
extern int netfs_write_begin(struct netfs_inode *,
|
||||
struct file *, struct address_space *,
|
||||
loff_t, unsigned int, struct folio **,
|
||||
void **);
|
||||
|
||||
|
|
@ -302,19 +304,17 @@ static inline struct netfs_inode *netfs_inode(struct inode *inode)
|
|||
|
||||
/**
|
||||
* netfs_inode_init - Initialise a netfslib inode context
|
||||
* @inode: The inode with which the context is associated
|
||||
* @ctx: The netfs inode to initialise
|
||||
* @ops: The netfs's operations list
|
||||
*
|
||||
* Initialise the netfs library context struct. This is expected to follow on
|
||||
* directly from the VFS inode struct.
|
||||
*/
|
||||
static inline void netfs_inode_init(struct inode *inode,
|
||||
static inline void netfs_inode_init(struct netfs_inode *ctx,
|
||||
const struct netfs_request_ops *ops)
|
||||
{
|
||||
struct netfs_inode *ctx = netfs_inode(inode);
|
||||
|
||||
ctx->ops = ops;
|
||||
ctx->remote_i_size = i_size_read(inode);
|
||||
ctx->remote_i_size = i_size_read(&ctx->inode);
|
||||
#if IS_ENABLED(CONFIG_FSCACHE)
|
||||
ctx->cache = NULL;
|
||||
#endif
|
||||
|
|
@ -322,28 +322,25 @@ static inline void netfs_inode_init(struct inode *inode,
|
|||
|
||||
/**
|
||||
* netfs_resize_file - Note that a file got resized
|
||||
* @inode: The inode being resized
|
||||
* @ctx: The netfs inode being resized
|
||||
* @new_i_size: The new file size
|
||||
*
|
||||
* Inform the netfs lib that a file got resized so that it can adjust its state.
|
||||
*/
|
||||
static inline void netfs_resize_file(struct inode *inode, loff_t new_i_size)
|
||||
static inline void netfs_resize_file(struct netfs_inode *ctx, loff_t new_i_size)
|
||||
{
|
||||
struct netfs_inode *ctx = netfs_inode(inode);
|
||||
|
||||
ctx->remote_i_size = new_i_size;
|
||||
}
|
||||
|
||||
/**
|
||||
* netfs_i_cookie - Get the cache cookie from the inode
|
||||
* @inode: The inode to query
|
||||
* @ctx: The netfs inode to query
|
||||
*
|
||||
* Get the caching cookie (if enabled) from the network filesystem's inode.
|
||||
*/
|
||||
static inline struct fscache_cookie *netfs_i_cookie(struct inode *inode)
|
||||
static inline struct fscache_cookie *netfs_i_cookie(struct netfs_inode *ctx)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_FSCACHE)
|
||||
struct netfs_inode *ctx = netfs_inode(inode);
|
||||
return ctx->cache;
|
||||
#else
|
||||
return NULL;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
struct notifier_block;
|
||||
|
||||
void add_device_randomness(const void *buf, size_t len);
|
||||
void add_bootloader_randomness(const void *buf, size_t len);
|
||||
void __init add_bootloader_randomness(const void *buf, size_t len);
|
||||
void add_input_randomness(unsigned int type, unsigned int code,
|
||||
unsigned int value) __latent_entropy;
|
||||
void add_interrupt_randomness(int irq) __latent_entropy;
|
||||
|
|
@ -74,7 +74,6 @@ static inline unsigned long get_random_canary(void)
|
|||
|
||||
int __init random_init(const char *command_line);
|
||||
bool rng_is_initialized(void);
|
||||
bool rng_has_arch_random(void);
|
||||
int wait_for_random_bytes(void);
|
||||
|
||||
/* Calls wait_for_random_bytes() and then calls get_random_bytes(buf, nbytes).
|
||||
|
|
|
|||
|
|
@ -243,7 +243,7 @@ extern void xdr_init_encode(struct xdr_stream *xdr, struct xdr_buf *buf,
|
|||
extern __be32 *xdr_reserve_space(struct xdr_stream *xdr, size_t nbytes);
|
||||
extern int xdr_reserve_space_vec(struct xdr_stream *xdr, struct kvec *vec,
|
||||
size_t nbytes);
|
||||
extern void xdr_commit_encode(struct xdr_stream *xdr);
|
||||
extern void __xdr_commit_encode(struct xdr_stream *xdr);
|
||||
extern void xdr_truncate_encode(struct xdr_stream *xdr, size_t len);
|
||||
extern int xdr_restrict_buflen(struct xdr_stream *xdr, int newbuflen);
|
||||
extern void xdr_write_pages(struct xdr_stream *xdr, struct page **pages,
|
||||
|
|
@ -306,6 +306,20 @@ xdr_reset_scratch_buffer(struct xdr_stream *xdr)
|
|||
xdr_set_scratch_buffer(xdr, NULL, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* xdr_commit_encode - Ensure all data is written to xdr->buf
|
||||
* @xdr: pointer to xdr_stream
|
||||
*
|
||||
* Handle encoding across page boundaries by giving the caller a
|
||||
* temporary location to write to, then later copying the data into
|
||||
* place. __xdr_commit_encode() does that copying.
|
||||
*/
|
||||
static inline void xdr_commit_encode(struct xdr_stream *xdr)
|
||||
{
|
||||
if (unlikely(xdr->scratch.iov_len))
|
||||
__xdr_commit_encode(xdr);
|
||||
}
|
||||
|
||||
/**
|
||||
* xdr_stream_remaining - Return the number of bytes remaining in the stream
|
||||
* @xdr: pointer to struct xdr_stream
|
||||
|
|
|
|||
|
|
@ -178,7 +178,8 @@ struct vdpa_map_file {
|
|||
* for the device
|
||||
* @vdev: vdpa device
|
||||
* Returns virtqueue algin requirement
|
||||
* @get_vq_group: Get the group id for a specific virtqueue
|
||||
* @get_vq_group: Get the group id for a specific
|
||||
* virtqueue (optional)
|
||||
* @vdev: vdpa device
|
||||
* @idx: virtqueue index
|
||||
* Returns u32: group id for this virtqueue
|
||||
|
|
@ -243,7 +244,7 @@ struct vdpa_map_file {
|
|||
* Returns the iova range supported by
|
||||
* the device.
|
||||
* @set_group_asid: Set address space identifier for a
|
||||
* virtqueue group
|
||||
* virtqueue group (optional)
|
||||
* @vdev: vdpa device
|
||||
* @group: virtqueue group
|
||||
* @asid: address space id for this group
|
||||
|
|
|
|||
|
|
@ -215,6 +215,7 @@ extern struct vm_struct *__get_vm_area_caller(unsigned long size,
|
|||
void free_vm_area(struct vm_struct *area);
|
||||
extern struct vm_struct *remove_vm_area(const void *addr);
|
||||
extern struct vm_struct *find_vm_area(const void *addr);
|
||||
struct vmap_area *find_vmap_area(unsigned long addr);
|
||||
|
||||
static inline bool is_vm_area_hugepages(const void *addr)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -406,7 +406,7 @@ alloc_workqueue(const char *fmt, unsigned int flags, int max_active, ...);
|
|||
* alloc_ordered_workqueue - allocate an ordered workqueue
|
||||
* @fmt: printf format for the name of the workqueue
|
||||
* @flags: WQ_* flags (only WQ_FREEZABLE and WQ_MEM_RECLAIM are meaningful)
|
||||
* @args...: args for @fmt
|
||||
* @args: args for @fmt
|
||||
*
|
||||
* Allocate an ordered workqueue. An ordered workqueue executes at
|
||||
* most one work item at any given time in the queued order. They are
|
||||
|
|
@ -445,7 +445,7 @@ extern bool mod_delayed_work_on(int cpu, struct workqueue_struct *wq,
|
|||
struct delayed_work *dwork, unsigned long delay);
|
||||
extern bool queue_rcu_work(struct workqueue_struct *wq, struct rcu_work *rwork);
|
||||
|
||||
extern void flush_workqueue(struct workqueue_struct *wq);
|
||||
extern void __flush_workqueue(struct workqueue_struct *wq);
|
||||
extern void drain_workqueue(struct workqueue_struct *wq);
|
||||
|
||||
extern int schedule_on_each_cpu(work_func_t func);
|
||||
|
|
@ -563,15 +563,23 @@ static inline bool schedule_work(struct work_struct *work)
|
|||
return queue_work(system_wq, work);
|
||||
}
|
||||
|
||||
/*
|
||||
* Detect attempt to flush system-wide workqueues at compile time when possible.
|
||||
*
|
||||
* See https://lkml.kernel.org/r/49925af7-78a8-a3dd-bce6-cfc02e1a9236@I-love.SAKURA.ne.jp
|
||||
* for reasons and steps for converting system-wide workqueues into local workqueues.
|
||||
*/
|
||||
extern void __warn_flushing_systemwide_wq(void)
|
||||
__compiletime_warning("Please avoid flushing system-wide workqueues.");
|
||||
|
||||
/**
|
||||
* flush_scheduled_work - ensure that any scheduled work has run to completion.
|
||||
*
|
||||
* Forces execution of the kernel-global workqueue and blocks until its
|
||||
* completion.
|
||||
*
|
||||
* Think twice before calling this function! It's very easy to get into
|
||||
* trouble if you don't take great care. Either of the following situations
|
||||
* will lead to deadlock:
|
||||
* It's very easy to get into trouble if you don't take great care.
|
||||
* Either of the following situations will lead to deadlock:
|
||||
*
|
||||
* One of the work items currently on the workqueue needs to acquire
|
||||
* a lock held by your code or its caller.
|
||||
|
|
@ -586,11 +594,51 @@ static inline bool schedule_work(struct work_struct *work)
|
|||
* need to know that a particular work item isn't queued and isn't running.
|
||||
* In such cases you should use cancel_delayed_work_sync() or
|
||||
* cancel_work_sync() instead.
|
||||
*
|
||||
* Please stop calling this function! A conversion to stop flushing system-wide
|
||||
* workqueues is in progress. This function will be removed after all in-tree
|
||||
* users stopped calling this function.
|
||||
*/
|
||||
static inline void flush_scheduled_work(void)
|
||||
{
|
||||
flush_workqueue(system_wq);
|
||||
}
|
||||
/*
|
||||
* The background of commit 771c035372a036f8 ("deprecate the
|
||||
* '__deprecated' attribute warnings entirely and for good") is that,
|
||||
* since Linus builds all modules between every single pull he does,
|
||||
* the standard kernel build needs to be _clean_ in order to be able to
|
||||
* notice when new problems happen. Therefore, don't emit warning while
|
||||
* there are in-tree users.
|
||||
*/
|
||||
#define flush_scheduled_work() \
|
||||
({ \
|
||||
if (0) \
|
||||
__warn_flushing_systemwide_wq(); \
|
||||
__flush_workqueue(system_wq); \
|
||||
})
|
||||
|
||||
/*
|
||||
* Although there is no longer in-tree caller, for now just emit warning
|
||||
* in order to give out-of-tree callers time to update.
|
||||
*/
|
||||
#define flush_workqueue(wq) \
|
||||
({ \
|
||||
struct workqueue_struct *_wq = (wq); \
|
||||
\
|
||||
if ((__builtin_constant_p(_wq == system_wq) && \
|
||||
_wq == system_wq) || \
|
||||
(__builtin_constant_p(_wq == system_highpri_wq) && \
|
||||
_wq == system_highpri_wq) || \
|
||||
(__builtin_constant_p(_wq == system_long_wq) && \
|
||||
_wq == system_long_wq) || \
|
||||
(__builtin_constant_p(_wq == system_unbound_wq) && \
|
||||
_wq == system_unbound_wq) || \
|
||||
(__builtin_constant_p(_wq == system_freezable_wq) && \
|
||||
_wq == system_freezable_wq) || \
|
||||
(__builtin_constant_p(_wq == system_power_efficient_wq) && \
|
||||
_wq == system_power_efficient_wq) || \
|
||||
(__builtin_constant_p(_wq == system_freezable_power_efficient_wq) && \
|
||||
_wq == system_freezable_power_efficient_wq)) \
|
||||
__warn_flushing_systemwide_wq(); \
|
||||
__flush_workqueue(_wq); \
|
||||
})
|
||||
|
||||
/**
|
||||
* schedule_delayed_work_on - queue work in global workqueue on CPU after delay
|
||||
|
|
|
|||
|
|
@ -1508,6 +1508,7 @@ void *xas_find_marked(struct xa_state *, unsigned long max, xa_mark_t);
|
|||
void xas_init_marks(const struct xa_state *);
|
||||
|
||||
bool xas_nomem(struct xa_state *, gfp_t);
|
||||
void xas_destroy(struct xa_state *);
|
||||
void xas_pause(struct xa_state *);
|
||||
|
||||
void xas_create_range(struct xa_state *);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue