Import of kernel-6.12.0-55.24.1.el10_0
This commit is contained in:
parent
c071e463bc
commit
b13887cf82
@ -12,7 +12,7 @@ RHEL_MINOR = 0
|
|||||||
#
|
#
|
||||||
# Use this spot to avoid future merge conflicts.
|
# Use this spot to avoid future merge conflicts.
|
||||||
# Do not trim this comment.
|
# Do not trim this comment.
|
||||||
RHEL_RELEASE = 55.22.1
|
RHEL_RELEASE = 55.24.1
|
||||||
|
|
||||||
#
|
#
|
||||||
# RHEL_REBASE_NUM
|
# RHEL_REBASE_NUM
|
||||||
|
@ -485,6 +485,15 @@ static int coproc_mmap(struct file *fp, struct vm_area_struct *vma)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Map complete page to the paste address. So the user
|
||||||
|
* space should pass 0ULL to the offset parameter.
|
||||||
|
*/
|
||||||
|
if (vma->vm_pgoff) {
|
||||||
|
pr_debug("Page offset unsupported to map paste address\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Ensure instance has an open send window */
|
/* Ensure instance has an open send window */
|
||||||
if (!txwin) {
|
if (!txwin) {
|
||||||
pr_err("No send window open?\n");
|
pr_err("No send window open?\n");
|
||||||
|
@ -48,11 +48,15 @@ static ssize_t memtrace_read(struct file *filp, char __user *ubuf,
|
|||||||
static int memtrace_mmap(struct file *filp, struct vm_area_struct *vma)
|
static int memtrace_mmap(struct file *filp, struct vm_area_struct *vma)
|
||||||
{
|
{
|
||||||
struct memtrace_entry *ent = filp->private_data;
|
struct memtrace_entry *ent = filp->private_data;
|
||||||
|
unsigned long ent_nrpages = ent->size >> PAGE_SHIFT;
|
||||||
|
unsigned long vma_nrpages = vma_pages(vma);
|
||||||
|
|
||||||
if (ent->size < vma->vm_end - vma->vm_start)
|
/* The requested page offset should be within object's page count */
|
||||||
|
if (vma->vm_pgoff >= ent_nrpages)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (vma->vm_pgoff << PAGE_SHIFT >= ent->size)
|
/* The requested mapping range should remain within the bounds */
|
||||||
|
if (vma_nrpages > ent_nrpages - vma->vm_pgoff)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||||
|
@ -1140,7 +1140,6 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)
|
|||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
val = MASK_VAL_WRITE(reg, prev_val, val);
|
val = MASK_VAL_WRITE(reg, prev_val, val);
|
||||||
val |= prev_val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (size) {
|
switch (size) {
|
||||||
|
@ -56,7 +56,7 @@ static void
|
|||||||
create_mkey_callback(int status, struct mlx5_async_work *context);
|
create_mkey_callback(int status, struct mlx5_async_work *context);
|
||||||
static struct mlx5_ib_mr *reg_create(struct ib_pd *pd, struct ib_umem *umem,
|
static struct mlx5_ib_mr *reg_create(struct ib_pd *pd, struct ib_umem *umem,
|
||||||
u64 iova, int access_flags,
|
u64 iova, int access_flags,
|
||||||
unsigned int page_size, bool populate,
|
unsigned long page_size, bool populate,
|
||||||
int access_mode);
|
int access_mode);
|
||||||
static int __mlx5_ib_dereg_mr(struct ib_mr *ibmr);
|
static int __mlx5_ib_dereg_mr(struct ib_mr *ibmr);
|
||||||
|
|
||||||
@ -1115,7 +1115,7 @@ static struct mlx5_ib_mr *alloc_cacheable_mr(struct ib_pd *pd,
|
|||||||
struct mlx5r_cache_rb_key rb_key = {};
|
struct mlx5r_cache_rb_key rb_key = {};
|
||||||
struct mlx5_cache_ent *ent;
|
struct mlx5_cache_ent *ent;
|
||||||
struct mlx5_ib_mr *mr;
|
struct mlx5_ib_mr *mr;
|
||||||
unsigned int page_size;
|
unsigned long page_size;
|
||||||
|
|
||||||
if (umem->is_dmabuf)
|
if (umem->is_dmabuf)
|
||||||
page_size = mlx5_umem_dmabuf_default_pgsz(umem, iova);
|
page_size = mlx5_umem_dmabuf_default_pgsz(umem, iova);
|
||||||
@ -1219,7 +1219,7 @@ err_1:
|
|||||||
*/
|
*/
|
||||||
static struct mlx5_ib_mr *reg_create(struct ib_pd *pd, struct ib_umem *umem,
|
static struct mlx5_ib_mr *reg_create(struct ib_pd *pd, struct ib_umem *umem,
|
||||||
u64 iova, int access_flags,
|
u64 iova, int access_flags,
|
||||||
unsigned int page_size, bool populate,
|
unsigned long page_size, bool populate,
|
||||||
int access_mode)
|
int access_mode)
|
||||||
{
|
{
|
||||||
struct mlx5_ib_dev *dev = to_mdev(pd->device);
|
struct mlx5_ib_dev *dev = to_mdev(pd->device);
|
||||||
@ -1425,7 +1425,7 @@ static struct ib_mr *create_real_mr(struct ib_pd *pd, struct ib_umem *umem,
|
|||||||
mr = alloc_cacheable_mr(pd, umem, iova, access_flags,
|
mr = alloc_cacheable_mr(pd, umem, iova, access_flags,
|
||||||
MLX5_MKC_ACCESS_MODE_MTT);
|
MLX5_MKC_ACCESS_MODE_MTT);
|
||||||
} else {
|
} else {
|
||||||
unsigned int page_size =
|
unsigned long page_size =
|
||||||
mlx5_umem_mkc_find_best_pgsz(dev, umem, iova);
|
mlx5_umem_mkc_find_best_pgsz(dev, umem, iova);
|
||||||
|
|
||||||
mutex_lock(&dev->slow_path_mutex);
|
mutex_lock(&dev->slow_path_mutex);
|
||||||
|
@ -46,6 +46,9 @@ mlx5_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req,
|
|||||||
u32 running_fw, stored_fw;
|
u32 running_fw, stored_fw;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
if (!mlx5_core_is_pf(dev))
|
||||||
|
return 0;
|
||||||
|
|
||||||
err = devlink_info_version_fixed_put(req, "fw.psid", dev->board_id);
|
err = devlink_info_version_fixed_put(req, "fw.psid", dev->board_id);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
@ -979,6 +979,9 @@ int __mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum)
|
|||||||
|
|
||||||
lockdep_assert_held_once(&bus->mdio_lock);
|
lockdep_assert_held_once(&bus->mdio_lock);
|
||||||
|
|
||||||
|
if (addr >= PHY_MAX_ADDR)
|
||||||
|
return -ENXIO;
|
||||||
|
|
||||||
if (bus->read_c45)
|
if (bus->read_c45)
|
||||||
retval = bus->read_c45(bus, addr, devad, regnum);
|
retval = bus->read_c45(bus, addr, devad, regnum);
|
||||||
else
|
else
|
||||||
@ -1010,6 +1013,9 @@ int __mdiobus_c45_write(struct mii_bus *bus, int addr, int devad, u32 regnum,
|
|||||||
|
|
||||||
lockdep_assert_held_once(&bus->mdio_lock);
|
lockdep_assert_held_once(&bus->mdio_lock);
|
||||||
|
|
||||||
|
if (addr >= PHY_MAX_ADDR)
|
||||||
|
return -ENXIO;
|
||||||
|
|
||||||
if (bus->write_c45)
|
if (bus->write_c45)
|
||||||
err = bus->write_c45(bus, addr, devad, regnum, val);
|
err = bus->write_c45(bus, addr, devad, regnum, val);
|
||||||
else
|
else
|
||||||
|
@ -4642,6 +4642,11 @@ static inline int ext4_iget_extra_inode(struct inode *inode,
|
|||||||
*magic == cpu_to_le32(EXT4_XATTR_MAGIC)) {
|
*magic == cpu_to_le32(EXT4_XATTR_MAGIC)) {
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
err = xattr_check_inode(inode, IHDR(inode, raw_inode),
|
||||||
|
ITAIL(inode, raw_inode));
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
ext4_set_inode_state(inode, EXT4_STATE_XATTR);
|
ext4_set_inode_state(inode, EXT4_STATE_XATTR);
|
||||||
err = ext4_find_inline_data_nolock(inode);
|
err = ext4_find_inline_data_nolock(inode);
|
||||||
if (!err && ext4_has_inline_data(inode))
|
if (!err && ext4_has_inline_data(inode))
|
||||||
|
@ -308,7 +308,7 @@ __ext4_xattr_check_block(struct inode *inode, struct buffer_head *bh,
|
|||||||
__ext4_xattr_check_block((inode), (bh), __func__, __LINE__)
|
__ext4_xattr_check_block((inode), (bh), __func__, __LINE__)
|
||||||
|
|
||||||
|
|
||||||
static inline int
|
int
|
||||||
__xattr_check_inode(struct inode *inode, struct ext4_xattr_ibody_header *header,
|
__xattr_check_inode(struct inode *inode, struct ext4_xattr_ibody_header *header,
|
||||||
void *end, const char *function, unsigned int line)
|
void *end, const char *function, unsigned int line)
|
||||||
{
|
{
|
||||||
@ -316,9 +316,6 @@ __xattr_check_inode(struct inode *inode, struct ext4_xattr_ibody_header *header,
|
|||||||
function, line);
|
function, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define xattr_check_inode(inode, header, end) \
|
|
||||||
__xattr_check_inode((inode), (header), (end), __func__, __LINE__)
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
xattr_find_entry(struct inode *inode, struct ext4_xattr_entry **pentry,
|
xattr_find_entry(struct inode *inode, struct ext4_xattr_entry **pentry,
|
||||||
void *end, int name_index, const char *name, int sorted)
|
void *end, int name_index, const char *name, int sorted)
|
||||||
@ -649,10 +646,7 @@ ext4_xattr_ibody_get(struct inode *inode, int name_index, const char *name,
|
|||||||
return error;
|
return error;
|
||||||
raw_inode = ext4_raw_inode(&iloc);
|
raw_inode = ext4_raw_inode(&iloc);
|
||||||
header = IHDR(inode, raw_inode);
|
header = IHDR(inode, raw_inode);
|
||||||
end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
|
end = ITAIL(inode, raw_inode);
|
||||||
error = xattr_check_inode(inode, header, end);
|
|
||||||
if (error)
|
|
||||||
goto cleanup;
|
|
||||||
entry = IFIRST(header);
|
entry = IFIRST(header);
|
||||||
error = xattr_find_entry(inode, &entry, end, name_index, name, 0);
|
error = xattr_find_entry(inode, &entry, end, name_index, name, 0);
|
||||||
if (error)
|
if (error)
|
||||||
@ -783,7 +777,6 @@ ext4_xattr_ibody_list(struct dentry *dentry, char *buffer, size_t buffer_size)
|
|||||||
struct ext4_xattr_ibody_header *header;
|
struct ext4_xattr_ibody_header *header;
|
||||||
struct ext4_inode *raw_inode;
|
struct ext4_inode *raw_inode;
|
||||||
struct ext4_iloc iloc;
|
struct ext4_iloc iloc;
|
||||||
void *end;
|
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR))
|
if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR))
|
||||||
@ -793,14 +786,9 @@ ext4_xattr_ibody_list(struct dentry *dentry, char *buffer, size_t buffer_size)
|
|||||||
return error;
|
return error;
|
||||||
raw_inode = ext4_raw_inode(&iloc);
|
raw_inode = ext4_raw_inode(&iloc);
|
||||||
header = IHDR(inode, raw_inode);
|
header = IHDR(inode, raw_inode);
|
||||||
end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
|
|
||||||
error = xattr_check_inode(inode, header, end);
|
|
||||||
if (error)
|
|
||||||
goto cleanup;
|
|
||||||
error = ext4_xattr_list_entries(dentry, IFIRST(header),
|
error = ext4_xattr_list_entries(dentry, IFIRST(header),
|
||||||
buffer, buffer_size);
|
buffer, buffer_size);
|
||||||
|
|
||||||
cleanup:
|
|
||||||
brelse(iloc.bh);
|
brelse(iloc.bh);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
@ -868,7 +856,6 @@ int ext4_get_inode_usage(struct inode *inode, qsize_t *usage)
|
|||||||
struct ext4_xattr_ibody_header *header;
|
struct ext4_xattr_ibody_header *header;
|
||||||
struct ext4_xattr_entry *entry;
|
struct ext4_xattr_entry *entry;
|
||||||
qsize_t ea_inode_refs = 0;
|
qsize_t ea_inode_refs = 0;
|
||||||
void *end;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
lockdep_assert_held_read(&EXT4_I(inode)->xattr_sem);
|
lockdep_assert_held_read(&EXT4_I(inode)->xattr_sem);
|
||||||
@ -879,10 +866,6 @@ int ext4_get_inode_usage(struct inode *inode, qsize_t *usage)
|
|||||||
goto out;
|
goto out;
|
||||||
raw_inode = ext4_raw_inode(&iloc);
|
raw_inode = ext4_raw_inode(&iloc);
|
||||||
header = IHDR(inode, raw_inode);
|
header = IHDR(inode, raw_inode);
|
||||||
end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
|
|
||||||
ret = xattr_check_inode(inode, header, end);
|
|
||||||
if (ret)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
for (entry = IFIRST(header); !IS_LAST_ENTRY(entry);
|
for (entry = IFIRST(header); !IS_LAST_ENTRY(entry);
|
||||||
entry = EXT4_XATTR_NEXT(entry))
|
entry = EXT4_XATTR_NEXT(entry))
|
||||||
@ -2244,11 +2227,8 @@ int ext4_xattr_ibody_find(struct inode *inode, struct ext4_xattr_info *i,
|
|||||||
header = IHDR(inode, raw_inode);
|
header = IHDR(inode, raw_inode);
|
||||||
is->s.base = is->s.first = IFIRST(header);
|
is->s.base = is->s.first = IFIRST(header);
|
||||||
is->s.here = is->s.first;
|
is->s.here = is->s.first;
|
||||||
is->s.end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
|
is->s.end = ITAIL(inode, raw_inode);
|
||||||
if (ext4_test_inode_state(inode, EXT4_STATE_XATTR)) {
|
if (ext4_test_inode_state(inode, EXT4_STATE_XATTR)) {
|
||||||
error = xattr_check_inode(inode, header, is->s.end);
|
|
||||||
if (error)
|
|
||||||
return error;
|
|
||||||
/* Find the named attribute. */
|
/* Find the named attribute. */
|
||||||
error = xattr_find_entry(inode, &is->s.here, is->s.end,
|
error = xattr_find_entry(inode, &is->s.here, is->s.end,
|
||||||
i->name_index, i->name, 0);
|
i->name_index, i->name, 0);
|
||||||
@ -2795,14 +2775,10 @@ retry:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
base = IFIRST(header);
|
base = IFIRST(header);
|
||||||
end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size;
|
end = ITAIL(inode, raw_inode);
|
||||||
min_offs = end - base;
|
min_offs = end - base;
|
||||||
total_ino = sizeof(struct ext4_xattr_ibody_header) + sizeof(u32);
|
total_ino = sizeof(struct ext4_xattr_ibody_header) + sizeof(u32);
|
||||||
|
|
||||||
error = xattr_check_inode(inode, header, end);
|
|
||||||
if (error)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
ifree = ext4_xattr_free_space(base, &min_offs, base, &total_ino);
|
ifree = ext4_xattr_free_space(base, &min_offs, base, &total_ino);
|
||||||
if (ifree >= isize_diff)
|
if (ifree >= isize_diff)
|
||||||
goto shift;
|
goto shift;
|
||||||
|
@ -67,6 +67,9 @@ struct ext4_xattr_entry {
|
|||||||
((void *)raw_inode + \
|
((void *)raw_inode + \
|
||||||
EXT4_GOOD_OLD_INODE_SIZE + \
|
EXT4_GOOD_OLD_INODE_SIZE + \
|
||||||
EXT4_I(inode)->i_extra_isize))
|
EXT4_I(inode)->i_extra_isize))
|
||||||
|
#define ITAIL(inode, raw_inode) \
|
||||||
|
((void *)(raw_inode) + \
|
||||||
|
EXT4_SB((inode)->i_sb)->s_inode_size)
|
||||||
#define IFIRST(hdr) ((struct ext4_xattr_entry *)((hdr)+1))
|
#define IFIRST(hdr) ((struct ext4_xattr_entry *)((hdr)+1))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -206,6 +209,13 @@ extern int ext4_xattr_ibody_set(handle_t *handle, struct inode *inode,
|
|||||||
extern struct mb_cache *ext4_xattr_create_cache(void);
|
extern struct mb_cache *ext4_xattr_create_cache(void);
|
||||||
extern void ext4_xattr_destroy_cache(struct mb_cache *);
|
extern void ext4_xattr_destroy_cache(struct mb_cache *);
|
||||||
|
|
||||||
|
extern int
|
||||||
|
__xattr_check_inode(struct inode *inode, struct ext4_xattr_ibody_header *header,
|
||||||
|
void *end, const char *function, unsigned int line);
|
||||||
|
|
||||||
|
#define xattr_check_inode(inode, header, end) \
|
||||||
|
__xattr_check_inode((inode), (header), (end), __func__, __LINE__)
|
||||||
|
|
||||||
#ifdef CONFIG_EXT4_FS_SECURITY
|
#ifdef CONFIG_EXT4_FS_SECURITY
|
||||||
extern int ext4_init_security(handle_t *handle, struct inode *inode,
|
extern int ext4_init_security(handle_t *handle, struct inode *inode,
|
||||||
struct inode *dir, const struct qstr *qstr);
|
struct inode *dir, const struct qstr *qstr);
|
||||||
|
@ -958,6 +958,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
|
|||||||
|
|
||||||
if (cl != NULL) {
|
if (cl != NULL) {
|
||||||
int old_flags;
|
int old_flags;
|
||||||
|
int len = 0;
|
||||||
|
|
||||||
if (parentid) {
|
if (parentid) {
|
||||||
if (cl->cl_parent &&
|
if (cl->cl_parent &&
|
||||||
@ -988,9 +989,13 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
|
|||||||
if (usc != NULL)
|
if (usc != NULL)
|
||||||
hfsc_change_usc(cl, usc, cur_time);
|
hfsc_change_usc(cl, usc, cur_time);
|
||||||
|
|
||||||
|
if (cl->qdisc->q.qlen != 0)
|
||||||
|
len = qdisc_peek_len(cl->qdisc);
|
||||||
|
/* Check queue length again since some qdisc implementations
|
||||||
|
* (e.g., netem/codel) might empty the queue during the peek
|
||||||
|
* operation.
|
||||||
|
*/
|
||||||
if (cl->qdisc->q.qlen != 0) {
|
if (cl->qdisc->q.qlen != 0) {
|
||||||
int len = qdisc_peek_len(cl->qdisc);
|
|
||||||
|
|
||||||
if (cl->cl_flags & HFSC_RSC) {
|
if (cl->cl_flags & HFSC_RSC) {
|
||||||
if (old_flags & HFSC_RSC)
|
if (old_flags & HFSC_RSC)
|
||||||
update_ed(cl, len);
|
update_ed(cl, len);
|
||||||
|
Loading…
Reference in New Issue
Block a user