Import of kernel-6.12.0-211.37.1.el10_2
This commit is contained in:
parent
bc547fd41f
commit
3d82d15658
@ -12,7 +12,7 @@ RHEL_MINOR = 2
|
||||
#
|
||||
# Use this spot to avoid future merge conflicts.
|
||||
# Do not trim this comment.
|
||||
RHEL_RELEASE = 211.7.1
|
||||
RHEL_RELEASE = 211.37.1
|
||||
|
||||
#
|
||||
# RHEL_REBASE_NUM
|
||||
|
||||
@ -1289,7 +1289,7 @@ CONFIG_NUMA_MEMBLKS=y
|
||||
CONFIG_NUMA_EMU=y
|
||||
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
|
||||
CONFIG_ARCH_SUPPORTS_PT_RECLAIM=y
|
||||
CONFIG_PT_RECLAIM=y
|
||||
# CONFIG_PT_RECLAIM is not set
|
||||
|
||||
#
|
||||
# Data Access Monitoring
|
||||
|
||||
@ -1275,7 +1275,7 @@ CONFIG_NUMA_MEMBLKS=y
|
||||
CONFIG_NUMA_EMU=y
|
||||
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
|
||||
CONFIG_ARCH_SUPPORTS_PT_RECLAIM=y
|
||||
CONFIG_PT_RECLAIM=y
|
||||
# CONFIG_PT_RECLAIM is not set
|
||||
|
||||
#
|
||||
# Data Access Monitoring
|
||||
|
||||
@ -1271,7 +1271,7 @@ CONFIG_NUMA_MEMBLKS=y
|
||||
CONFIG_NUMA_EMU=y
|
||||
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
|
||||
CONFIG_ARCH_SUPPORTS_PT_RECLAIM=y
|
||||
CONFIG_PT_RECLAIM=y
|
||||
# CONFIG_PT_RECLAIM is not set
|
||||
|
||||
#
|
||||
# Data Access Monitoring
|
||||
|
||||
@ -1285,7 +1285,7 @@ CONFIG_NUMA_MEMBLKS=y
|
||||
CONFIG_NUMA_EMU=y
|
||||
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
|
||||
CONFIG_ARCH_SUPPORTS_PT_RECLAIM=y
|
||||
CONFIG_PT_RECLAIM=y
|
||||
# CONFIG_PT_RECLAIM is not set
|
||||
|
||||
#
|
||||
# Data Access Monitoring
|
||||
|
||||
@ -1289,7 +1289,7 @@ CONFIG_NUMA_MEMBLKS=y
|
||||
CONFIG_NUMA_EMU=y
|
||||
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
|
||||
CONFIG_ARCH_SUPPORTS_PT_RECLAIM=y
|
||||
CONFIG_PT_RECLAIM=y
|
||||
# CONFIG_PT_RECLAIM is not set
|
||||
|
||||
#
|
||||
# Data Access Monitoring
|
||||
|
||||
@ -1275,7 +1275,7 @@ CONFIG_NUMA_MEMBLKS=y
|
||||
CONFIG_NUMA_EMU=y
|
||||
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
|
||||
CONFIG_ARCH_SUPPORTS_PT_RECLAIM=y
|
||||
CONFIG_PT_RECLAIM=y
|
||||
# CONFIG_PT_RECLAIM is not set
|
||||
|
||||
#
|
||||
# Data Access Monitoring
|
||||
|
||||
@ -1271,7 +1271,7 @@ CONFIG_NUMA_MEMBLKS=y
|
||||
CONFIG_NUMA_EMU=y
|
||||
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
|
||||
CONFIG_ARCH_SUPPORTS_PT_RECLAIM=y
|
||||
CONFIG_PT_RECLAIM=y
|
||||
# CONFIG_PT_RECLAIM is not set
|
||||
|
||||
#
|
||||
# Data Access Monitoring
|
||||
|
||||
@ -1285,7 +1285,7 @@ CONFIG_NUMA_MEMBLKS=y
|
||||
CONFIG_NUMA_EMU=y
|
||||
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
|
||||
CONFIG_ARCH_SUPPORTS_PT_RECLAIM=y
|
||||
CONFIG_PT_RECLAIM=y
|
||||
# CONFIG_PT_RECLAIM is not set
|
||||
|
||||
#
|
||||
# Data Access Monitoring
|
||||
|
||||
@ -1177,15 +1177,14 @@ struct af_alg_async_req *af_alg_alloc_areq(struct sock *sk,
|
||||
if (unlikely(!areq))
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
memset(areq, 0, areqlen);
|
||||
|
||||
ctx->inflight = true;
|
||||
|
||||
areq->areqlen = areqlen;
|
||||
areq->sk = sk;
|
||||
areq->first_rsgl.sgl.sgt.sgl = areq->first_rsgl.sgl.sgl;
|
||||
areq->last_rsgl = NULL;
|
||||
INIT_LIST_HEAD(&areq->rsgl_list);
|
||||
areq->tsgl = NULL;
|
||||
areq->tsgl_entries = 0;
|
||||
|
||||
return areq;
|
||||
}
|
||||
|
||||
@ -416,9 +416,8 @@ static int hash_accept_parent_nokey(void *private, struct sock *sk)
|
||||
if (!ctx)
|
||||
return -ENOMEM;
|
||||
|
||||
ctx->result = NULL;
|
||||
memset(ctx, 0, len);
|
||||
ctx->len = len;
|
||||
ctx->more = false;
|
||||
crypto_init_wait(&ctx->wait);
|
||||
|
||||
ask->private = ctx;
|
||||
|
||||
@ -248,9 +248,8 @@ static int rng_accept_parent(void *private, struct sock *sk)
|
||||
if (!ctx)
|
||||
return -ENOMEM;
|
||||
|
||||
memset(ctx, 0, len);
|
||||
ctx->len = len;
|
||||
ctx->addtl = NULL;
|
||||
ctx->addtl_len = 0;
|
||||
|
||||
/*
|
||||
* No seeding done at that point -- if multiple accepts are
|
||||
|
||||
@ -549,10 +549,13 @@ static void cxl_port_release(struct device *dev)
|
||||
xa_destroy(&port->dports);
|
||||
xa_destroy(&port->regions);
|
||||
ida_free(&cxl_port_ida, port->id);
|
||||
if (is_cxl_root(port))
|
||||
|
||||
if (is_cxl_root(port)) {
|
||||
kfree(to_cxl_root(port));
|
||||
else
|
||||
} else {
|
||||
put_device(dev->parent);
|
||||
kfree(port);
|
||||
}
|
||||
}
|
||||
|
||||
static ssize_t decoders_committed_show(struct device *dev,
|
||||
@ -718,6 +721,7 @@ static struct cxl_port *cxl_port_alloc(struct device *uport_dev,
|
||||
struct cxl_port *iter;
|
||||
|
||||
dev->parent = &parent_port->dev;
|
||||
get_device(dev->parent);
|
||||
port->depth = parent_port->depth + 1;
|
||||
port->parent_dport = parent_dport;
|
||||
|
||||
|
||||
@ -965,40 +965,63 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* This ioctl is disabled for security reasons but also it failed
|
||||
* to follow process in terms of adding testing in igt and verifying
|
||||
* all the corner cases which made fixing security bugs in it even
|
||||
* harder than necessary.
|
||||
*
|
||||
* To re-enable this ioctl
|
||||
* 1. land working IGT tests in igt-gpu-tools that cover
|
||||
* all corner cases and race conditions.
|
||||
* 2. handle idr_preload
|
||||
* 3. handle == 0
|
||||
* 4. handle == new_handle semantics definition.
|
||||
*/
|
||||
int drm_gem_change_handle_ioctl(struct drm_device *dev, void *data,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
struct drm_gem_change_handle *args = data;
|
||||
struct drm_gem_object *obj;
|
||||
int ret;
|
||||
int new_handle, ret;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_GEM))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
obj = drm_gem_object_lookup(file_priv, args->handle);
|
||||
if (!obj)
|
||||
return -ENOENT;
|
||||
/* idr_alloc() limitation. */
|
||||
if (args->new_handle > INT_MAX)
|
||||
return -EINVAL;
|
||||
new_handle = args->new_handle;
|
||||
|
||||
if (args->handle == args->new_handle) {
|
||||
ret = 0;
|
||||
goto out;
|
||||
}
|
||||
if (args->handle == new_handle)
|
||||
return 0;
|
||||
|
||||
mutex_lock(&file_priv->prime.lock);
|
||||
|
||||
spin_lock(&file_priv->table_lock);
|
||||
ret = idr_alloc(&file_priv->object_idr, obj,
|
||||
args->new_handle, args->new_handle + 1, GFP_NOWAIT);
|
||||
ret = idr_alloc(&file_priv->object_idr, NULL, new_handle, new_handle + 1,
|
||||
GFP_NOWAIT);
|
||||
|
||||
if (ret < 0) {
|
||||
spin_unlock(&file_priv->table_lock);
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
obj = idr_replace(&file_priv->object_idr, NULL, args->handle);
|
||||
if (IS_ERR_OR_NULL(obj)) {
|
||||
idr_remove(&file_priv->object_idr, new_handle);
|
||||
spin_unlock(&file_priv->table_lock);
|
||||
ret = -ENOENT;
|
||||
goto out_unlock;
|
||||
}
|
||||
spin_unlock(&file_priv->table_lock);
|
||||
|
||||
if (ret < 0)
|
||||
goto out_unlock;
|
||||
|
||||
if (obj->dma_buf) {
|
||||
ret = drm_prime_add_buf_handle(&file_priv->prime, obj->dma_buf, args->new_handle);
|
||||
ret = drm_prime_add_buf_handle(&file_priv->prime, obj->dma_buf,
|
||||
new_handle);
|
||||
if (ret < 0) {
|
||||
spin_lock(&file_priv->table_lock);
|
||||
idr_remove(&file_priv->object_idr, args->new_handle);
|
||||
idr_remove(&file_priv->object_idr, new_handle);
|
||||
idr_replace(&file_priv->object_idr, obj, args->handle);
|
||||
spin_unlock(&file_priv->table_lock);
|
||||
goto out_unlock;
|
||||
}
|
||||
@ -1010,12 +1033,12 @@ int drm_gem_change_handle_ioctl(struct drm_device *dev, void *data,
|
||||
|
||||
spin_lock(&file_priv->table_lock);
|
||||
idr_remove(&file_priv->object_idr, args->handle);
|
||||
obj = idr_replace(&file_priv->object_idr, obj, new_handle);
|
||||
spin_unlock(&file_priv->table_lock);
|
||||
WARN_ON(obj != NULL);
|
||||
|
||||
out_unlock:
|
||||
mutex_unlock(&file_priv->prime.lock);
|
||||
out:
|
||||
drm_gem_object_put(obj);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -653,7 +653,8 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_GEM_CLOSE, drm_gem_close_ioctl, DRM_RENDER_ALLOW),
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_GEM_FLINK, drm_gem_flink_ioctl, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_GEM_OPEN, drm_gem_open_ioctl, DRM_AUTH),
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_GEM_CHANGE_HANDLE, drm_gem_change_handle_ioctl, DRM_RENDER_ALLOW),
|
||||
/* see drm_gem.c:drm_gem_change_handle_ioctl for why this is invalid */
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_GEM_CHANGE_HANDLE, drm_invalid_op, DRM_RENDER_ALLOW),
|
||||
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETRESOURCES, drm_mode_getresources, 0),
|
||||
|
||||
|
||||
@ -228,8 +228,7 @@ struct dma_buf *xe_gem_prime_export(struct drm_gem_object *obj, int flags)
|
||||
}
|
||||
|
||||
static struct drm_gem_object *
|
||||
xe_dma_buf_init_obj(struct drm_device *dev, struct xe_bo *storage,
|
||||
struct dma_buf *dma_buf)
|
||||
xe_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
|
||||
{
|
||||
struct dma_resv *resv = dma_buf->resv;
|
||||
struct xe_device *xe = to_xe_device(dev);
|
||||
@ -250,7 +249,7 @@ xe_dma_buf_init_obj(struct drm_device *dev, struct xe_bo *storage,
|
||||
if (ret)
|
||||
break;
|
||||
|
||||
bo = xe_bo_init_locked(xe, storage, NULL, resv, NULL, dma_buf->size,
|
||||
bo = xe_bo_init_locked(xe, NULL, NULL, resv, NULL, dma_buf->size,
|
||||
0, /* Will require 1way or 2way for vm_bind */
|
||||
ttm_bo_type_sg, XE_BO_FLAG_SYSTEM, &exec);
|
||||
drm_exec_retry_on_contention(&exec);
|
||||
@ -301,7 +300,6 @@ struct drm_gem_object *xe_gem_prime_import(struct drm_device *dev,
|
||||
const struct dma_buf_attach_ops *attach_ops;
|
||||
struct dma_buf_attachment *attach;
|
||||
struct drm_gem_object *obj;
|
||||
struct xe_bo *bo;
|
||||
|
||||
if (dma_buf->ops == &xe_dmabuf_ops) {
|
||||
obj = dma_buf->priv;
|
||||
@ -317,13 +315,15 @@ struct drm_gem_object *xe_gem_prime_import(struct drm_device *dev,
|
||||
}
|
||||
|
||||
/*
|
||||
* Don't publish the bo until we have a valid attachment, and a
|
||||
* valid attachment needs the bo address. So pre-create a bo before
|
||||
* creating the attachment and publish.
|
||||
* This needs to happen before the attach, since it will create a new
|
||||
* attachment for this, and add it to the list of attachments, at which
|
||||
* point it is globally visible, and at any point the export side can
|
||||
* call into on invalidate_mappings callback, which require a working
|
||||
* object.
|
||||
*/
|
||||
bo = xe_bo_alloc();
|
||||
if (IS_ERR(bo))
|
||||
return ERR_CAST(bo);
|
||||
obj = xe_dma_buf_create_obj(dev, dma_buf);
|
||||
if (IS_ERR(obj))
|
||||
return obj;
|
||||
|
||||
attach_ops = &xe_dma_buf_attach_ops;
|
||||
#if IS_ENABLED(CONFIG_DRM_XE_KUNIT_TEST)
|
||||
@ -331,26 +331,15 @@ struct drm_gem_object *xe_gem_prime_import(struct drm_device *dev,
|
||||
attach_ops = test->attach_ops;
|
||||
#endif
|
||||
|
||||
attach = dma_buf_dynamic_attach(dma_buf, dev->dev, attach_ops, &bo->ttm.base);
|
||||
attach = dma_buf_dynamic_attach(dma_buf, dev->dev, attach_ops, obj);
|
||||
if (IS_ERR(attach)) {
|
||||
obj = ERR_CAST(attach);
|
||||
goto out_err;
|
||||
xe_bo_put(gem_to_xe_bo(obj));
|
||||
return ERR_CAST(attach);
|
||||
}
|
||||
|
||||
/* Errors here will take care of freeing the bo. */
|
||||
obj = xe_dma_buf_init_obj(dev, bo, dma_buf);
|
||||
if (IS_ERR(obj))
|
||||
return obj;
|
||||
|
||||
|
||||
get_dma_buf(dma_buf);
|
||||
obj->import_attach = attach;
|
||||
return obj;
|
||||
|
||||
out_err:
|
||||
xe_bo_free(bo);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_DRM_XE_KUNIT_TEST)
|
||||
|
||||
@ -759,7 +759,7 @@ int xe_exec_queue_create_ioctl(struct drm_device *dev, void *data,
|
||||
if (q->vm && q->hwe->hw_engine_group) {
|
||||
err = xe_hw_engine_group_add_exec_queue(q->hwe->hw_engine_group, q);
|
||||
if (err)
|
||||
goto put_exec_queue;
|
||||
goto kill_exec_queue;
|
||||
}
|
||||
}
|
||||
|
||||
@ -768,12 +768,15 @@ int xe_exec_queue_create_ioctl(struct drm_device *dev, void *data,
|
||||
/* user id alloc must always be last in ioctl to prevent UAF */
|
||||
err = xa_alloc(&xef->exec_queue.xa, &id, q, xa_limit_32b, GFP_KERNEL);
|
||||
if (err)
|
||||
goto kill_exec_queue;
|
||||
goto del_hw_engine_group;
|
||||
|
||||
args->exec_queue_id = id;
|
||||
|
||||
return 0;
|
||||
|
||||
del_hw_engine_group:
|
||||
if (q->vm && q->hwe && q->hwe->hw_engine_group)
|
||||
xe_hw_engine_group_del_exec_queue(q->hwe->hw_engine_group, q);
|
||||
kill_exec_queue:
|
||||
xe_exec_queue_kill(q);
|
||||
put_exec_queue:
|
||||
|
||||
@ -1357,7 +1357,7 @@ ice_devlink_enable_roce_get(struct devlink *devlink, u32 id,
|
||||
|
||||
cdev = pf->cdev_info;
|
||||
if (!cdev)
|
||||
return -ENODEV;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
ctx->val.vbool = !!(cdev->rdma_protocol & IIDC_RDMA_PROTOCOL_ROCEV2);
|
||||
|
||||
@ -1423,7 +1423,7 @@ ice_devlink_enable_iw_get(struct devlink *devlink, u32 id,
|
||||
|
||||
cdev = pf->cdev_info;
|
||||
if (!cdev)
|
||||
return -ENODEV;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
ctx->val.vbool = !!(cdev->rdma_protocol & IIDC_RDMA_PROTOCOL_IWARP);
|
||||
|
||||
|
||||
@ -979,9 +979,6 @@ u16 ice_get_avail_rxq_count(struct ice_pf *pf);
|
||||
int ice_vsi_recfg_qs(struct ice_vsi *vsi, int new_rx, int new_tx, bool locked);
|
||||
void ice_update_vsi_stats(struct ice_vsi *vsi);
|
||||
void ice_update_pf_stats(struct ice_pf *pf);
|
||||
void
|
||||
ice_fetch_u64_stats_per_ring(struct u64_stats_sync *syncp,
|
||||
struct ice_q_stats stats, u64 *pkts, u64 *bytes);
|
||||
int ice_up(struct ice_vsi *vsi);
|
||||
int ice_down(struct ice_vsi *vsi);
|
||||
int ice_down_up(struct ice_vsi *vsi);
|
||||
@ -1012,6 +1009,7 @@ int ice_schedule_reset(struct ice_pf *pf, enum ice_reset_req reset);
|
||||
void ice_print_link_msg(struct ice_vsi *vsi, bool isup);
|
||||
int ice_plug_aux_dev(struct ice_pf *pf);
|
||||
void ice_unplug_aux_dev(struct ice_pf *pf);
|
||||
void ice_rdma_finalize_setup(struct ice_pf *pf);
|
||||
int ice_init_rdma(struct ice_pf *pf);
|
||||
void ice_deinit_rdma(struct ice_pf *pf);
|
||||
bool ice_is_wol_supported(struct ice_hw *hw);
|
||||
|
||||
@ -666,23 +666,12 @@ static int ice_vsi_cfg_rxq(struct ice_rx_ring *ring)
|
||||
|
||||
if (ring->vsi->type == ICE_VSI_PF || ring->vsi->type == ICE_VSI_SF ||
|
||||
ring->vsi->type == ICE_VSI_LB) {
|
||||
if (!xdp_rxq_info_is_reg(&ring->xdp_rxq)) {
|
||||
err = __xdp_rxq_info_reg(&ring->xdp_rxq, ring->netdev,
|
||||
ring->q_index,
|
||||
ring->q_vector->napi.napi_id,
|
||||
ring->rx_buf_len);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
ice_rx_xsk_pool(ring);
|
||||
err = ice_realloc_rx_xdp_bufs(ring, ring->xsk_pool);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (ring->xsk_pool) {
|
||||
xdp_rxq_info_unreg(&ring->xdp_rxq);
|
||||
|
||||
rx_buf_len =
|
||||
xsk_pool_get_rx_frame_size(ring->xsk_pool);
|
||||
err = __xdp_rxq_info_reg(&ring->xdp_rxq, ring->netdev,
|
||||
@ -705,14 +694,13 @@ static int ice_vsi_cfg_rxq(struct ice_rx_ring *ring)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (!xdp_rxq_info_is_reg(&ring->xdp_rxq)) {
|
||||
err = __xdp_rxq_info_reg(&ring->xdp_rxq, ring->netdev,
|
||||
ring->q_index,
|
||||
ring->q_vector->napi.napi_id,
|
||||
ring->rx_buf_len);
|
||||
if (err)
|
||||
goto err_destroy_fq;
|
||||
}
|
||||
err = __xdp_rxq_info_reg(&ring->xdp_rxq, ring->netdev,
|
||||
ring->q_index,
|
||||
ring->q_vector->napi.napi_id,
|
||||
ring->rx_buf_len);
|
||||
if (err)
|
||||
goto err_destroy_fq;
|
||||
|
||||
xdp_rxq_info_attach_page_pool(&ring->xdp_rxq,
|
||||
ring->pp);
|
||||
}
|
||||
@ -1417,8 +1405,8 @@ static void ice_qp_reset_stats(struct ice_vsi *vsi, u16 q_idx)
|
||||
if (!vsi_stat)
|
||||
return;
|
||||
|
||||
memset(&vsi_stat->rx_ring_stats[q_idx]->rx_stats, 0,
|
||||
sizeof(vsi_stat->rx_ring_stats[q_idx]->rx_stats));
|
||||
memset(&vsi_stat->rx_ring_stats[q_idx]->stats, 0,
|
||||
sizeof(vsi_stat->rx_ring_stats[q_idx]->stats));
|
||||
memset(&vsi_stat->tx_ring_stats[q_idx]->stats, 0,
|
||||
sizeof(vsi_stat->tx_ring_stats[q_idx]->stats));
|
||||
if (vsi->xdp_rings)
|
||||
|
||||
@ -203,42 +203,6 @@ bool ice_is_generic_mac(struct ice_hw *hw)
|
||||
hw->mac_type == ICE_MAC_GENERIC_3K_E825);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_is_pf_c827 - check if pf contains c827 phy
|
||||
* @hw: pointer to the hw struct
|
||||
*
|
||||
* Return: true if the device has c827 phy.
|
||||
*/
|
||||
static bool ice_is_pf_c827(struct ice_hw *hw)
|
||||
{
|
||||
struct ice_aqc_get_link_topo cmd = {};
|
||||
u8 node_part_number;
|
||||
u16 node_handle;
|
||||
int status;
|
||||
|
||||
if (hw->mac_type != ICE_MAC_E810)
|
||||
return false;
|
||||
|
||||
if (hw->device_id != ICE_DEV_ID_E810C_QSFP)
|
||||
return true;
|
||||
|
||||
cmd.addr.topo_params.node_type_ctx =
|
||||
FIELD_PREP(ICE_AQC_LINK_TOPO_NODE_TYPE_M, ICE_AQC_LINK_TOPO_NODE_TYPE_PHY) |
|
||||
FIELD_PREP(ICE_AQC_LINK_TOPO_NODE_CTX_M, ICE_AQC_LINK_TOPO_NODE_CTX_PORT);
|
||||
cmd.addr.topo_params.index = 0;
|
||||
|
||||
status = ice_aq_get_netlist_node(hw, &cmd, &node_part_number,
|
||||
&node_handle);
|
||||
|
||||
if (status || node_part_number != ICE_AQC_GET_LINK_TOPO_NODE_NR_C827)
|
||||
return false;
|
||||
|
||||
if (node_handle == E810C_QSFP_C827_0_HANDLE || node_handle == E810C_QSFP_C827_1_HANDLE)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_clear_pf_cfg - Clear PF configuration
|
||||
* @hw: pointer to the hardware structure
|
||||
@ -958,30 +922,31 @@ static void ice_get_itr_intrl_gran(struct ice_hw *hw)
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_wait_for_fw - wait for full FW readiness
|
||||
* ice_wait_fw_load - wait for PHY firmware loading to complete
|
||||
* @hw: pointer to the hardware structure
|
||||
* @timeout: milliseconds that can elapse before timing out
|
||||
* @timeout: milliseconds that can elapse before timing out, 0 to bypass waiting
|
||||
*
|
||||
* Return: 0 on success, -ETIMEDOUT on timeout.
|
||||
* Return:
|
||||
* * 0 on success
|
||||
* * negative on timeout
|
||||
*/
|
||||
static int ice_wait_for_fw(struct ice_hw *hw, u32 timeout)
|
||||
static int ice_wait_fw_load(struct ice_hw *hw, u32 timeout)
|
||||
{
|
||||
int fw_loading;
|
||||
u32 elapsed = 0;
|
||||
int fw_loading_reg;
|
||||
|
||||
while (elapsed <= timeout) {
|
||||
fw_loading = rd32(hw, GL_MNG_FWSM) & GL_MNG_FWSM_FW_LOADING_M;
|
||||
|
||||
/* firmware was not yet loaded, we have to wait more */
|
||||
if (fw_loading) {
|
||||
elapsed += 100;
|
||||
msleep(100);
|
||||
continue;
|
||||
}
|
||||
if (!timeout)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -ETIMEDOUT;
|
||||
fw_loading_reg = rd32(hw, GL_MNG_FWSM) & GL_MNG_FWSM_FW_LOADING_M;
|
||||
/* notify the user only once if PHY FW is still loading */
|
||||
if (fw_loading_reg)
|
||||
dev_info(ice_hw_to_dev(hw), "Link initialization is blocked by PHY FW initialization. Link initialization will continue after PHY FW initialization completes.\n");
|
||||
else
|
||||
return 0;
|
||||
|
||||
return rd32_poll_timeout(hw, GL_MNG_FWSM, fw_loading_reg,
|
||||
!(fw_loading_reg & GL_MNG_FWSM_FW_LOADING_M),
|
||||
10000, timeout * 1000);
|
||||
}
|
||||
|
||||
static int __fwlog_send_cmd(void *priv, struct libie_aq_desc *desc, void *buf,
|
||||
@ -1171,12 +1136,10 @@ int ice_init_hw(struct ice_hw *hw)
|
||||
* due to necessity of loading FW from an external source.
|
||||
* This can take even half a minute.
|
||||
*/
|
||||
if (ice_is_pf_c827(hw)) {
|
||||
status = ice_wait_for_fw(hw, 30000);
|
||||
if (status) {
|
||||
dev_err(ice_hw_to_dev(hw), "ice_wait_for_fw timed out");
|
||||
goto err_unroll_fltr_mgmt_struct;
|
||||
}
|
||||
status = ice_wait_fw_load(hw, 30000);
|
||||
if (status) {
|
||||
dev_err(ice_hw_to_dev(hw), "ice_wait_fw_load timed out");
|
||||
goto err_unroll_fltr_mgmt_struct;
|
||||
}
|
||||
|
||||
hw->lane_num = ice_get_phy_lane_number(hw);
|
||||
@ -1854,6 +1817,7 @@ static bool ice_should_retry_sq_send_cmd(u16 opcode)
|
||||
case ice_aqc_opc_lldp_stop:
|
||||
case ice_aqc_opc_lldp_start:
|
||||
case ice_aqc_opc_lldp_filter_ctrl:
|
||||
case ice_aqc_opc_sff_eeprom:
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1879,6 +1843,7 @@ ice_sq_send_cmd_retry(struct ice_hw *hw, struct ice_ctl_q_info *cq,
|
||||
{
|
||||
struct libie_aq_desc desc_cpy;
|
||||
bool is_cmd_for_retry;
|
||||
u8 *buf_cpy = NULL;
|
||||
u8 idx = 0;
|
||||
u16 opcode;
|
||||
int status;
|
||||
@ -1888,8 +1853,11 @@ ice_sq_send_cmd_retry(struct ice_hw *hw, struct ice_ctl_q_info *cq,
|
||||
memset(&desc_cpy, 0, sizeof(desc_cpy));
|
||||
|
||||
if (is_cmd_for_retry) {
|
||||
/* All retryable cmds are direct, without buf. */
|
||||
WARN_ON(buf);
|
||||
if (buf) {
|
||||
buf_cpy = kmemdup(buf, buf_size, GFP_KERNEL);
|
||||
if (!buf_cpy)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
memcpy(&desc_cpy, desc, sizeof(desc_cpy));
|
||||
}
|
||||
@ -1901,12 +1869,14 @@ ice_sq_send_cmd_retry(struct ice_hw *hw, struct ice_ctl_q_info *cq,
|
||||
hw->adminq.sq_last_status != LIBIE_AQ_RC_EBUSY)
|
||||
break;
|
||||
|
||||
if (buf_cpy)
|
||||
memcpy(buf, buf_cpy, buf_size);
|
||||
memcpy(desc, &desc_cpy, sizeof(desc_cpy));
|
||||
|
||||
msleep(ICE_SQ_SEND_DELAY_TIME_MS);
|
||||
|
||||
} while (++idx < ICE_SQ_SEND_MAX_EXECUTE);
|
||||
|
||||
kfree(buf_cpy);
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -6429,7 +6399,7 @@ int ice_lldp_fltr_add_remove(struct ice_hw *hw, struct ice_vsi *vsi, bool add)
|
||||
struct ice_aqc_lldp_filter_ctrl *cmd;
|
||||
struct libie_aq_desc desc;
|
||||
|
||||
if (vsi->type != ICE_VSI_PF || !ice_fw_supports_lldp_fltr_ctrl(hw))
|
||||
if (!ice_fw_supports_lldp_fltr_ctrl(hw))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
cmd = libie_aq_raw(&desc);
|
||||
|
||||
@ -33,8 +33,8 @@ static int ice_q_stats_len(struct net_device *netdev)
|
||||
{
|
||||
struct ice_netdev_priv *np = netdev_priv(netdev);
|
||||
|
||||
return ((np->vsi->alloc_txq + np->vsi->alloc_rxq) *
|
||||
(sizeof(struct ice_q_stats) / sizeof(u64)));
|
||||
/* One packets and one bytes count per queue */
|
||||
return ((np->vsi->alloc_txq + np->vsi->alloc_rxq) * 2);
|
||||
}
|
||||
|
||||
#define ICE_PF_STATS_LEN ARRAY_SIZE(ice_gstrings_pf_stats)
|
||||
@ -1930,6 +1930,17 @@ __ice_get_ethtool_stats(struct net_device *netdev,
|
||||
int i = 0;
|
||||
char *p;
|
||||
|
||||
if (ice_is_port_repr_netdev(netdev)) {
|
||||
ice_update_eth_stats(vsi);
|
||||
|
||||
for (j = 0; j < ICE_VSI_STATS_LEN; j++) {
|
||||
p = (char *)vsi + ice_gstrings_vsi_stats[j].stat_offset;
|
||||
data[i++] = (ice_gstrings_vsi_stats[j].sizeof_stat ==
|
||||
sizeof(u64)) ? *(u64 *)p : *(u32 *)p;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
ice_update_pf_stats(pf);
|
||||
ice_update_vsi_stats(vsi);
|
||||
|
||||
@ -1939,32 +1950,39 @@ __ice_get_ethtool_stats(struct net_device *netdev,
|
||||
sizeof(u64)) ? *(u64 *)p : *(u32 *)p;
|
||||
}
|
||||
|
||||
if (ice_is_port_repr_netdev(netdev))
|
||||
return;
|
||||
|
||||
/* populate per queue stats */
|
||||
rcu_read_lock();
|
||||
|
||||
ice_for_each_alloc_txq(vsi, j) {
|
||||
u64 pkts, bytes;
|
||||
|
||||
tx_ring = READ_ONCE(vsi->tx_rings[j]);
|
||||
if (tx_ring && tx_ring->ring_stats) {
|
||||
data[i++] = tx_ring->ring_stats->stats.pkts;
|
||||
data[i++] = tx_ring->ring_stats->stats.bytes;
|
||||
} else {
|
||||
if (!tx_ring || !tx_ring->ring_stats) {
|
||||
data[i++] = 0;
|
||||
data[i++] = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
ice_fetch_tx_ring_stats(tx_ring, &pkts, &bytes);
|
||||
|
||||
data[i++] = pkts;
|
||||
data[i++] = bytes;
|
||||
}
|
||||
|
||||
ice_for_each_alloc_rxq(vsi, j) {
|
||||
u64 pkts, bytes;
|
||||
|
||||
rx_ring = READ_ONCE(vsi->rx_rings[j]);
|
||||
if (rx_ring && rx_ring->ring_stats) {
|
||||
data[i++] = rx_ring->ring_stats->stats.pkts;
|
||||
data[i++] = rx_ring->ring_stats->stats.bytes;
|
||||
} else {
|
||||
if (!rx_ring || !rx_ring->ring_stats) {
|
||||
data[i++] = 0;
|
||||
data[i++] = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
ice_fetch_rx_ring_stats(rx_ring, &pkts, &bytes);
|
||||
|
||||
data[i++] = pkts;
|
||||
data[i++] = bytes;
|
||||
}
|
||||
|
||||
rcu_read_unlock();
|
||||
@ -3332,6 +3350,7 @@ process_rx:
|
||||
rx_rings[i].cached_phctime = pf->ptp.cached_phc_time;
|
||||
rx_rings[i].desc = NULL;
|
||||
rx_rings[i].xdp_buf = NULL;
|
||||
rx_rings[i].xdp_rxq = (struct xdp_rxq_info){ };
|
||||
|
||||
/* this is to allow wr32 to have something to write to
|
||||
* during early allocation of Rx buffers
|
||||
@ -3382,7 +3401,6 @@ process_link:
|
||||
*/
|
||||
rx_rings[i].next_to_use = 0;
|
||||
rx_rings[i].next_to_clean = 0;
|
||||
rx_rings[i].next_to_alloc = 0;
|
||||
*vsi->rx_rings[i] = rx_rings[i];
|
||||
}
|
||||
kfree(rx_rings);
|
||||
@ -4482,7 +4500,7 @@ ice_get_module_eeprom(struct net_device *netdev,
|
||||
u8 addr = ICE_I2C_EEPROM_DEV_ADDR;
|
||||
struct ice_hw *hw = &pf->hw;
|
||||
bool is_sfp = false;
|
||||
unsigned int i, j;
|
||||
unsigned int i;
|
||||
u16 offset = 0;
|
||||
u8 page = 0;
|
||||
int status;
|
||||
@ -4524,26 +4542,19 @@ ice_get_module_eeprom(struct net_device *netdev,
|
||||
if (page == 0 || !(data[0x2] & 0x4)) {
|
||||
u32 copy_len;
|
||||
|
||||
/* If i2c bus is busy due to slow page change or
|
||||
* link management access, call can fail. This is normal.
|
||||
* So we retry this a few times.
|
||||
*/
|
||||
for (j = 0; j < 4; j++) {
|
||||
status = ice_aq_sff_eeprom(hw, 0, addr, offset, page,
|
||||
!is_sfp, value,
|
||||
SFF_READ_BLOCK_SIZE,
|
||||
0, NULL);
|
||||
netdev_dbg(netdev, "SFF %02X %02X %02X %X = %02X%02X%02X%02X.%02X%02X%02X%02X (%X)\n",
|
||||
addr, offset, page, is_sfp,
|
||||
value[0], value[1], value[2], value[3],
|
||||
value[4], value[5], value[6], value[7],
|
||||
status);
|
||||
if (status) {
|
||||
usleep_range(1500, 2500);
|
||||
memset(value, 0, SFF_READ_BLOCK_SIZE);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
status = ice_aq_sff_eeprom(hw, 0, addr, offset, page,
|
||||
!is_sfp, value,
|
||||
SFF_READ_BLOCK_SIZE,
|
||||
0, NULL);
|
||||
netdev_dbg(netdev, "SFF %02X %02X %02X %X = %02X%02X%02X%02X.%02X%02X%02X%02X (%pe)\n",
|
||||
addr, offset, page, is_sfp,
|
||||
value[0], value[1], value[2], value[3],
|
||||
value[4], value[5], value[6], value[7],
|
||||
ERR_PTR(status));
|
||||
if (status) {
|
||||
netdev_err(netdev, "%s: error reading module EEPROM: status %pe\n",
|
||||
__func__, ERR_PTR(status));
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Make sure we have enough room for the new block */
|
||||
|
||||
@ -360,6 +360,39 @@ void ice_unplug_aux_dev(struct ice_pf *pf)
|
||||
auxiliary_device_uninit(adev);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_rdma_finalize_setup - Complete RDMA setup after VSI is ready
|
||||
* @pf: ptr to ice_pf
|
||||
*
|
||||
* Sets VSI-dependent information and plugs aux device.
|
||||
* Must be called after ice_init_rdma(), ice_vsi_rebuild(), and
|
||||
* ice_dcb_rebuild() complete.
|
||||
*/
|
||||
void ice_rdma_finalize_setup(struct ice_pf *pf)
|
||||
{
|
||||
struct device *dev = ice_pf_to_dev(pf);
|
||||
struct iidc_rdma_priv_dev_info *privd;
|
||||
int ret;
|
||||
|
||||
if (!ice_is_rdma_ena(pf) || !pf->cdev_info)
|
||||
return;
|
||||
|
||||
privd = pf->cdev_info->iidc_priv;
|
||||
if (!privd || !pf->vsi || !pf->vsi[0] || !pf->vsi[0]->netdev)
|
||||
return;
|
||||
|
||||
/* Assign VSI info now that VSI is valid */
|
||||
privd->netdev = pf->vsi[0]->netdev;
|
||||
privd->vport_id = pf->vsi[0]->vsi_num;
|
||||
|
||||
/* Update QoS info after DCB has been rebuilt */
|
||||
ice_setup_dcb_qos_info(pf, &privd->qos_info);
|
||||
|
||||
ret = ice_plug_aux_dev(pf);
|
||||
if (ret)
|
||||
dev_warn(dev, "Failed to plug RDMA aux device: %d\n", ret);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_init_rdma - initializes PF for RDMA use
|
||||
* @pf: ptr to ice_pf
|
||||
@ -398,22 +431,14 @@ int ice_init_rdma(struct ice_pf *pf)
|
||||
}
|
||||
|
||||
cdev->iidc_priv = privd;
|
||||
privd->netdev = pf->vsi[0]->netdev;
|
||||
|
||||
privd->hw_addr = (u8 __iomem *)pf->hw.hw_addr;
|
||||
cdev->pdev = pf->pdev;
|
||||
privd->vport_id = pf->vsi[0]->vsi_num;
|
||||
|
||||
pf->cdev_info->rdma_protocol |= IIDC_RDMA_PROTOCOL_ROCEV2;
|
||||
ice_setup_dcb_qos_info(pf, &privd->qos_info);
|
||||
ret = ice_plug_aux_dev(pf);
|
||||
if (ret)
|
||||
goto err_plug_aux_dev;
|
||||
|
||||
return 0;
|
||||
|
||||
err_plug_aux_dev:
|
||||
pf->cdev_info->adev = NULL;
|
||||
xa_erase(&ice_aux_id, pf->aux_idx);
|
||||
err_alloc_xa:
|
||||
kfree(privd);
|
||||
err_privd_alloc:
|
||||
@ -432,7 +457,6 @@ void ice_deinit_rdma(struct ice_pf *pf)
|
||||
if (!ice_is_rdma_ena(pf))
|
||||
return;
|
||||
|
||||
ice_unplug_aux_dev(pf);
|
||||
xa_erase(&ice_aux_id, pf->aux_idx);
|
||||
kfree(pf->cdev_info->iidc_priv);
|
||||
kfree(pf->cdev_info);
|
||||
|
||||
@ -2792,12 +2792,14 @@ void ice_vsi_set_napi_queues(struct ice_vsi *vsi)
|
||||
|
||||
ASSERT_RTNL();
|
||||
ice_for_each_rxq(vsi, q_idx)
|
||||
netif_queue_set_napi(netdev, q_idx, NETDEV_QUEUE_TYPE_RX,
|
||||
&vsi->rx_rings[q_idx]->q_vector->napi);
|
||||
if (vsi->rx_rings[q_idx] && vsi->rx_rings[q_idx]->q_vector)
|
||||
netif_queue_set_napi(netdev, q_idx, NETDEV_QUEUE_TYPE_RX,
|
||||
&vsi->rx_rings[q_idx]->q_vector->napi);
|
||||
|
||||
ice_for_each_txq(vsi, q_idx)
|
||||
netif_queue_set_napi(netdev, q_idx, NETDEV_QUEUE_TYPE_TX,
|
||||
&vsi->tx_rings[q_idx]->q_vector->napi);
|
||||
if (vsi->tx_rings[q_idx] && vsi->tx_rings[q_idx]->q_vector)
|
||||
netif_queue_set_napi(netdev, q_idx, NETDEV_QUEUE_TYPE_TX,
|
||||
&vsi->tx_rings[q_idx]->q_vector->napi);
|
||||
/* Also set the interrupt number for the NAPI */
|
||||
ice_for_each_q_vector(vsi, v_idx) {
|
||||
struct ice_q_vector *q_vector = vsi->q_vectors[v_idx];
|
||||
@ -3437,20 +3439,6 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_update_ring_stats - Update ring statistics
|
||||
* @stats: stats to be updated
|
||||
* @pkts: number of processed packets
|
||||
* @bytes: number of processed bytes
|
||||
*
|
||||
* This function assumes that caller has acquired a u64_stats_sync lock.
|
||||
*/
|
||||
static void ice_update_ring_stats(struct ice_q_stats *stats, u64 pkts, u64 bytes)
|
||||
{
|
||||
stats->bytes += bytes;
|
||||
stats->pkts += pkts;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_update_tx_ring_stats - Update Tx ring specific counters
|
||||
* @tx_ring: ring to update
|
||||
@ -3460,7 +3448,8 @@ static void ice_update_ring_stats(struct ice_q_stats *stats, u64 pkts, u64 bytes
|
||||
void ice_update_tx_ring_stats(struct ice_tx_ring *tx_ring, u64 pkts, u64 bytes)
|
||||
{
|
||||
u64_stats_update_begin(&tx_ring->ring_stats->syncp);
|
||||
ice_update_ring_stats(&tx_ring->ring_stats->stats, pkts, bytes);
|
||||
u64_stats_add(&tx_ring->ring_stats->pkts, pkts);
|
||||
u64_stats_add(&tx_ring->ring_stats->bytes, bytes);
|
||||
u64_stats_update_end(&tx_ring->ring_stats->syncp);
|
||||
}
|
||||
|
||||
@ -3473,10 +3462,47 @@ void ice_update_tx_ring_stats(struct ice_tx_ring *tx_ring, u64 pkts, u64 bytes)
|
||||
void ice_update_rx_ring_stats(struct ice_rx_ring *rx_ring, u64 pkts, u64 bytes)
|
||||
{
|
||||
u64_stats_update_begin(&rx_ring->ring_stats->syncp);
|
||||
ice_update_ring_stats(&rx_ring->ring_stats->stats, pkts, bytes);
|
||||
u64_stats_add(&rx_ring->ring_stats->pkts, pkts);
|
||||
u64_stats_add(&rx_ring->ring_stats->bytes, bytes);
|
||||
u64_stats_update_end(&rx_ring->ring_stats->syncp);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_fetch_tx_ring_stats - Fetch Tx ring packet and byte counters
|
||||
* @ring: ring to update
|
||||
* @pkts: number of processed packets
|
||||
* @bytes: number of processed bytes
|
||||
*/
|
||||
void ice_fetch_tx_ring_stats(const struct ice_tx_ring *ring,
|
||||
u64 *pkts, u64 *bytes)
|
||||
{
|
||||
unsigned int start;
|
||||
|
||||
do {
|
||||
start = u64_stats_fetch_begin(&ring->ring_stats->syncp);
|
||||
*pkts = u64_stats_read(&ring->ring_stats->pkts);
|
||||
*bytes = u64_stats_read(&ring->ring_stats->bytes);
|
||||
} while (u64_stats_fetch_retry(&ring->ring_stats->syncp, start));
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_fetch_rx_ring_stats - Fetch Rx ring packet and byte counters
|
||||
* @ring: ring to read
|
||||
* @pkts: number of processed packets
|
||||
* @bytes: number of processed bytes
|
||||
*/
|
||||
void ice_fetch_rx_ring_stats(const struct ice_rx_ring *ring,
|
||||
u64 *pkts, u64 *bytes)
|
||||
{
|
||||
unsigned int start;
|
||||
|
||||
do {
|
||||
start = u64_stats_fetch_begin(&ring->ring_stats->syncp);
|
||||
*pkts = u64_stats_read(&ring->ring_stats->pkts);
|
||||
*bytes = u64_stats_read(&ring->ring_stats->bytes);
|
||||
} while (u64_stats_fetch_retry(&ring->ring_stats->syncp, start));
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_is_dflt_vsi_in_use - check if the default forwarding VSI is being used
|
||||
* @pi: port info of the switch with default VSI
|
||||
|
||||
@ -93,6 +93,12 @@ void ice_update_tx_ring_stats(struct ice_tx_ring *ring, u64 pkts, u64 bytes);
|
||||
|
||||
void ice_update_rx_ring_stats(struct ice_rx_ring *ring, u64 pkts, u64 bytes);
|
||||
|
||||
void ice_fetch_tx_ring_stats(const struct ice_tx_ring *ring,
|
||||
u64 *pkts, u64 *bytes);
|
||||
|
||||
void ice_fetch_rx_ring_stats(const struct ice_rx_ring *ring,
|
||||
u64 *pkts, u64 *bytes);
|
||||
|
||||
void ice_write_intrl(struct ice_q_vector *q_vector, u8 intrl);
|
||||
void ice_write_itr(struct ice_ring_container *rc, u16 itr);
|
||||
void ice_set_q_vector_intrl(struct ice_q_vector *q_vector);
|
||||
|
||||
@ -159,8 +159,8 @@ static void ice_check_for_hang_subtask(struct ice_pf *pf)
|
||||
* prev_pkt would be negative if there was no
|
||||
* pending work.
|
||||
*/
|
||||
packets = ring_stats->stats.pkts & INT_MAX;
|
||||
if (ring_stats->tx_stats.prev_pkt == packets) {
|
||||
packets = ice_stats_read(ring_stats, pkts) & INT_MAX;
|
||||
if (ring_stats->tx.prev_pkt == packets) {
|
||||
/* Trigger sw interrupt to revive the queue */
|
||||
ice_trigger_sw_intr(hw, tx_ring->q_vector);
|
||||
continue;
|
||||
@ -170,7 +170,7 @@ static void ice_check_for_hang_subtask(struct ice_pf *pf)
|
||||
* to ice_get_tx_pending()
|
||||
*/
|
||||
smp_rmb();
|
||||
ring_stats->tx_stats.prev_pkt =
|
||||
ring_stats->tx.prev_pkt =
|
||||
ice_get_tx_pending(tx_ring) ? packets : -1;
|
||||
}
|
||||
}
|
||||
@ -5138,6 +5138,9 @@ int ice_load(struct ice_pf *pf)
|
||||
if (err)
|
||||
goto err_init_rdma;
|
||||
|
||||
/* Finalize RDMA: VSI already created, assign info and plug device */
|
||||
ice_rdma_finalize_setup(pf);
|
||||
|
||||
ice_service_task_restart(pf);
|
||||
|
||||
clear_bit(ICE_DOWN, pf->state);
|
||||
@ -5169,6 +5172,7 @@ void ice_unload(struct ice_pf *pf)
|
||||
|
||||
devl_assert_locked(priv_to_devlink(pf));
|
||||
|
||||
ice_unplug_aux_dev(pf);
|
||||
ice_deinit_rdma(pf);
|
||||
ice_deinit_features(pf);
|
||||
ice_tc_indir_block_unregister(vsi);
|
||||
@ -5595,6 +5599,7 @@ static int ice_suspend(struct device *dev)
|
||||
*/
|
||||
disabled = ice_service_task_stop(pf);
|
||||
|
||||
ice_unplug_aux_dev(pf);
|
||||
ice_deinit_rdma(pf);
|
||||
|
||||
/* Already suspended?, then there is nothing to do */
|
||||
@ -6826,58 +6831,132 @@ int ice_up(struct ice_vsi *vsi)
|
||||
return err;
|
||||
}
|
||||
|
||||
struct ice_vsi_tx_stats {
|
||||
u64 pkts;
|
||||
u64 bytes;
|
||||
u64 tx_restart_q;
|
||||
u64 tx_busy;
|
||||
u64 tx_linearize;
|
||||
};
|
||||
|
||||
struct ice_vsi_rx_stats {
|
||||
u64 pkts;
|
||||
u64 bytes;
|
||||
u64 rx_non_eop_descs;
|
||||
u64 rx_page_failed;
|
||||
u64 rx_buf_failed;
|
||||
};
|
||||
|
||||
/**
|
||||
* ice_fetch_u64_stats_per_ring - get packets and bytes stats per ring
|
||||
* @syncp: pointer to u64_stats_sync
|
||||
* @stats: stats that pkts and bytes count will be taken from
|
||||
* @pkts: packets stats counter
|
||||
* @bytes: bytes stats counter
|
||||
* ice_fetch_u64_tx_stats - get Tx stats from a ring
|
||||
* @ring: the Tx ring to copy stats from
|
||||
* @copy: temporary storage for the ring statistics
|
||||
*
|
||||
* This function fetches stats from the ring considering the atomic operations
|
||||
* that needs to be performed to read u64 values in 32 bit machine.
|
||||
* Fetch the u64 stats from the ring using u64_stats_fetch. This ensures each
|
||||
* stat value is self-consistent, though not necessarily consistent w.r.t
|
||||
* other stats.
|
||||
*/
|
||||
void
|
||||
ice_fetch_u64_stats_per_ring(struct u64_stats_sync *syncp,
|
||||
struct ice_q_stats stats, u64 *pkts, u64 *bytes)
|
||||
static void ice_fetch_u64_tx_stats(struct ice_tx_ring *ring,
|
||||
struct ice_vsi_tx_stats *copy)
|
||||
{
|
||||
struct ice_ring_stats *stats = ring->ring_stats;
|
||||
unsigned int start;
|
||||
|
||||
do {
|
||||
start = u64_stats_fetch_begin(syncp);
|
||||
*pkts = stats.pkts;
|
||||
*bytes = stats.bytes;
|
||||
} while (u64_stats_fetch_retry(syncp, start));
|
||||
start = u64_stats_fetch_begin(&stats->syncp);
|
||||
copy->pkts = u64_stats_read(&stats->pkts);
|
||||
copy->bytes = u64_stats_read(&stats->bytes);
|
||||
copy->tx_restart_q = u64_stats_read(&stats->tx_restart_q);
|
||||
copy->tx_busy = u64_stats_read(&stats->tx_busy);
|
||||
copy->tx_linearize = u64_stats_read(&stats->tx_linearize);
|
||||
} while (u64_stats_fetch_retry(&stats->syncp, start));
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_fetch_u64_rx_stats - get Rx stats from a ring
|
||||
* @ring: the Rx ring to copy stats from
|
||||
* @copy: temporary storage for the ring statistics
|
||||
*
|
||||
* Fetch the u64 stats from the ring using u64_stats_fetch. This ensures each
|
||||
* stat value is self-consistent, though not necessarily consistent w.r.t
|
||||
* other stats.
|
||||
*/
|
||||
static void ice_fetch_u64_rx_stats(struct ice_rx_ring *ring,
|
||||
struct ice_vsi_rx_stats *copy)
|
||||
{
|
||||
struct ice_ring_stats *stats = ring->ring_stats;
|
||||
unsigned int start;
|
||||
|
||||
do {
|
||||
start = u64_stats_fetch_begin(&stats->syncp);
|
||||
copy->pkts = u64_stats_read(&stats->pkts);
|
||||
copy->bytes = u64_stats_read(&stats->bytes);
|
||||
copy->rx_non_eop_descs =
|
||||
u64_stats_read(&stats->rx_non_eop_descs);
|
||||
copy->rx_page_failed = u64_stats_read(&stats->rx_page_failed);
|
||||
copy->rx_buf_failed = u64_stats_read(&stats->rx_buf_failed);
|
||||
} while (u64_stats_fetch_retry(&stats->syncp, start));
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_update_vsi_tx_ring_stats - Update VSI Tx ring stats counters
|
||||
* @vsi: the VSI to be updated
|
||||
* @vsi_stats: the stats struct to be updated
|
||||
* @vsi_stats: accumulated stats for this VSI
|
||||
* @rings: rings to work on
|
||||
* @count: number of rings
|
||||
*/
|
||||
static void
|
||||
ice_update_vsi_tx_ring_stats(struct ice_vsi *vsi,
|
||||
struct rtnl_link_stats64 *vsi_stats,
|
||||
struct ice_tx_ring **rings, u16 count)
|
||||
static void ice_update_vsi_tx_ring_stats(struct ice_vsi *vsi,
|
||||
struct ice_vsi_tx_stats *vsi_stats,
|
||||
struct ice_tx_ring **rings, u16 count)
|
||||
{
|
||||
struct ice_vsi_tx_stats copy = {};
|
||||
u16 i;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
struct ice_tx_ring *ring;
|
||||
u64 pkts = 0, bytes = 0;
|
||||
|
||||
ring = READ_ONCE(rings[i]);
|
||||
if (!ring || !ring->ring_stats)
|
||||
continue;
|
||||
ice_fetch_u64_stats_per_ring(&ring->ring_stats->syncp,
|
||||
ring->ring_stats->stats, &pkts,
|
||||
&bytes);
|
||||
vsi_stats->tx_packets += pkts;
|
||||
vsi_stats->tx_bytes += bytes;
|
||||
vsi->tx_restart += ring->ring_stats->tx_stats.restart_q;
|
||||
vsi->tx_busy += ring->ring_stats->tx_stats.tx_busy;
|
||||
vsi->tx_linearize += ring->ring_stats->tx_stats.tx_linearize;
|
||||
|
||||
ice_fetch_u64_tx_stats(ring, ©);
|
||||
|
||||
vsi_stats->pkts += copy.pkts;
|
||||
vsi_stats->bytes += copy.bytes;
|
||||
vsi_stats->tx_restart_q += copy.tx_restart_q;
|
||||
vsi_stats->tx_busy += copy.tx_busy;
|
||||
vsi_stats->tx_linearize += copy.tx_linearize;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_update_vsi_rx_ring_stats - Update VSI Rx ring stats counters
|
||||
* @vsi: the VSI to be updated
|
||||
* @vsi_stats: accumulated stats for this VSI
|
||||
* @rings: rings to work on
|
||||
* @count: number of rings
|
||||
*/
|
||||
static void ice_update_vsi_rx_ring_stats(struct ice_vsi *vsi,
|
||||
struct ice_vsi_rx_stats *vsi_stats,
|
||||
struct ice_rx_ring **rings, u16 count)
|
||||
{
|
||||
struct ice_vsi_rx_stats copy = {};
|
||||
u16 i;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
struct ice_rx_ring *ring;
|
||||
|
||||
ring = READ_ONCE(rings[i]);
|
||||
if (!ring || !ring->ring_stats)
|
||||
continue;
|
||||
|
||||
ice_fetch_u64_rx_stats(ring, ©);
|
||||
|
||||
vsi_stats->pkts += copy.pkts;
|
||||
vsi_stats->bytes += copy.bytes;
|
||||
vsi_stats->rx_non_eop_descs += copy.rx_non_eop_descs;
|
||||
vsi_stats->rx_page_failed += copy.rx_page_failed;
|
||||
vsi_stats->rx_buf_failed += copy.rx_buf_failed;
|
||||
}
|
||||
}
|
||||
|
||||
@ -6888,50 +6967,34 @@ ice_update_vsi_tx_ring_stats(struct ice_vsi *vsi,
|
||||
static void ice_update_vsi_ring_stats(struct ice_vsi *vsi)
|
||||
{
|
||||
struct rtnl_link_stats64 *net_stats, *stats_prev;
|
||||
struct rtnl_link_stats64 *vsi_stats;
|
||||
struct ice_vsi_tx_stats tx_stats = {};
|
||||
struct ice_vsi_rx_stats rx_stats = {};
|
||||
struct ice_pf *pf = vsi->back;
|
||||
u64 pkts, bytes;
|
||||
int i;
|
||||
|
||||
vsi_stats = kzalloc(sizeof(*vsi_stats), GFP_ATOMIC);
|
||||
if (!vsi_stats)
|
||||
return;
|
||||
|
||||
/* reset non-netdev (extended) stats */
|
||||
vsi->tx_restart = 0;
|
||||
vsi->tx_busy = 0;
|
||||
vsi->tx_linearize = 0;
|
||||
vsi->rx_buf_failed = 0;
|
||||
vsi->rx_page_failed = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
|
||||
/* update Tx rings counters */
|
||||
ice_update_vsi_tx_ring_stats(vsi, vsi_stats, vsi->tx_rings,
|
||||
ice_update_vsi_tx_ring_stats(vsi, &tx_stats, vsi->tx_rings,
|
||||
vsi->num_txq);
|
||||
|
||||
/* update Rx rings counters */
|
||||
ice_for_each_rxq(vsi, i) {
|
||||
struct ice_rx_ring *ring = READ_ONCE(vsi->rx_rings[i]);
|
||||
struct ice_ring_stats *ring_stats;
|
||||
|
||||
ring_stats = ring->ring_stats;
|
||||
ice_fetch_u64_stats_per_ring(&ring_stats->syncp,
|
||||
ring_stats->stats, &pkts,
|
||||
&bytes);
|
||||
vsi_stats->rx_packets += pkts;
|
||||
vsi_stats->rx_bytes += bytes;
|
||||
vsi->rx_buf_failed += ring_stats->rx_stats.alloc_buf_failed;
|
||||
vsi->rx_page_failed += ring_stats->rx_stats.alloc_page_failed;
|
||||
}
|
||||
ice_update_vsi_rx_ring_stats(vsi, &rx_stats, vsi->rx_rings,
|
||||
vsi->num_rxq);
|
||||
|
||||
/* update XDP Tx rings counters */
|
||||
if (ice_is_xdp_ena_vsi(vsi))
|
||||
ice_update_vsi_tx_ring_stats(vsi, vsi_stats, vsi->xdp_rings,
|
||||
ice_update_vsi_tx_ring_stats(vsi, &tx_stats, vsi->xdp_rings,
|
||||
vsi->num_xdp_txq);
|
||||
|
||||
rcu_read_unlock();
|
||||
|
||||
/* Save non-netdev (extended) stats */
|
||||
vsi->tx_restart = tx_stats.tx_restart_q;
|
||||
vsi->tx_busy = tx_stats.tx_busy;
|
||||
vsi->tx_linearize = tx_stats.tx_linearize;
|
||||
vsi->rx_buf_failed = rx_stats.rx_buf_failed;
|
||||
vsi->rx_page_failed = rx_stats.rx_page_failed;
|
||||
|
||||
net_stats = &vsi->net_stats;
|
||||
stats_prev = &vsi->net_stats_prev;
|
||||
|
||||
@ -6941,18 +7004,16 @@ static void ice_update_vsi_ring_stats(struct ice_vsi *vsi)
|
||||
* let's skip this round.
|
||||
*/
|
||||
if (likely(pf->stat_prev_loaded)) {
|
||||
net_stats->tx_packets += vsi_stats->tx_packets - stats_prev->tx_packets;
|
||||
net_stats->tx_bytes += vsi_stats->tx_bytes - stats_prev->tx_bytes;
|
||||
net_stats->rx_packets += vsi_stats->rx_packets - stats_prev->rx_packets;
|
||||
net_stats->rx_bytes += vsi_stats->rx_bytes - stats_prev->rx_bytes;
|
||||
net_stats->tx_packets += tx_stats.pkts - stats_prev->tx_packets;
|
||||
net_stats->tx_bytes += tx_stats.bytes - stats_prev->tx_bytes;
|
||||
net_stats->rx_packets += rx_stats.pkts - stats_prev->rx_packets;
|
||||
net_stats->rx_bytes += rx_stats.bytes - stats_prev->rx_bytes;
|
||||
}
|
||||
|
||||
stats_prev->tx_packets = vsi_stats->tx_packets;
|
||||
stats_prev->tx_bytes = vsi_stats->tx_bytes;
|
||||
stats_prev->rx_packets = vsi_stats->rx_packets;
|
||||
stats_prev->rx_bytes = vsi_stats->rx_bytes;
|
||||
|
||||
kfree(vsi_stats);
|
||||
stats_prev->tx_packets = tx_stats.pkts;
|
||||
stats_prev->tx_bytes = tx_stats.bytes;
|
||||
stats_prev->rx_packets = rx_stats.pkts;
|
||||
stats_prev->rx_bytes = rx_stats.bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -6986,7 +7047,6 @@ void ice_update_vsi_stats(struct ice_vsi *vsi)
|
||||
cur_ns->rx_errors = pf->stats.crc_errors +
|
||||
pf->stats.illegal_bytes +
|
||||
pf->stats.rx_undersize +
|
||||
pf->hw_csum_rx_error +
|
||||
pf->stats.rx_jabber +
|
||||
pf->stats.rx_fragments +
|
||||
pf->stats.rx_oversize;
|
||||
@ -7806,7 +7866,7 @@ static void ice_rebuild(struct ice_pf *pf, enum ice_reset_req reset_type)
|
||||
|
||||
ice_health_clear(pf);
|
||||
|
||||
ice_plug_aux_dev(pf);
|
||||
ice_rdma_finalize_setup(pf);
|
||||
if (ice_is_feature_supported(pf, ICE_F_SRIOV_LAG))
|
||||
ice_lag_rebuild(pf);
|
||||
|
||||
|
||||
@ -1296,12 +1296,10 @@ void ice_ptp_link_change(struct ice_pf *pf, bool linkup)
|
||||
if (pf->hw.reset_ongoing)
|
||||
return;
|
||||
|
||||
if (hw->mac_type == ICE_MAC_GENERIC_3K_E825) {
|
||||
if (hw->mac_type == ICE_MAC_GENERIC_3K_E825 &&
|
||||
test_bit(ICE_FLAG_DPLL, pf->flags)) {
|
||||
int pin, err;
|
||||
|
||||
if (!test_bit(ICE_FLAG_DPLL, pf->flags))
|
||||
return;
|
||||
|
||||
mutex_lock(&pf->dplls.lock);
|
||||
for (pin = 0; pin < ICE_SYNCE_CLK_NUM; pin++) {
|
||||
enum ice_synce_clk clk_pin;
|
||||
@ -1314,15 +1312,19 @@ void ice_ptp_link_change(struct ice_pf *pf, bool linkup)
|
||||
port_num,
|
||||
&active,
|
||||
clk_pin);
|
||||
if (WARN_ON_ONCE(err)) {
|
||||
mutex_unlock(&pf->dplls.lock);
|
||||
return;
|
||||
if (err) {
|
||||
dev_err_once(ice_pf_to_dev(pf),
|
||||
"Failed to read SyncE bypass mux for pin %d, err %d\n",
|
||||
pin, err);
|
||||
break;
|
||||
}
|
||||
|
||||
err = ice_tspll_cfg_synce_ethdiv_e825c(hw, clk_pin);
|
||||
if (active && WARN_ON_ONCE(err)) {
|
||||
mutex_unlock(&pf->dplls.lock);
|
||||
return;
|
||||
if (active && err) {
|
||||
dev_err_once(ice_pf_to_dev(pf),
|
||||
"Failed to configure SyncE ETH divider for pin %d, err %d\n",
|
||||
pin, err);
|
||||
break;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&pf->dplls.lock);
|
||||
@ -1334,9 +1336,12 @@ void ice_ptp_link_change(struct ice_pf *pf, bool linkup)
|
||||
/* Do not reconfigure E810 or E830 PHY */
|
||||
return;
|
||||
case ICE_MAC_GENERIC:
|
||||
case ICE_MAC_GENERIC_3K_E825:
|
||||
ice_ptp_port_phy_restart(ptp_port);
|
||||
return;
|
||||
case ICE_MAC_GENERIC_3K_E825:
|
||||
if (linkup)
|
||||
ice_ptp_port_phy_restart(ptp_port);
|
||||
return;
|
||||
default:
|
||||
dev_warn(ice_pf_to_dev(pf), "%s: Unknown PHY type\n", __func__);
|
||||
}
|
||||
@ -3077,7 +3082,13 @@ static int ice_ptp_setup_pf(struct ice_pf *pf)
|
||||
struct ice_ptp *ctrl_ptp = ice_get_ctrl_ptp(pf);
|
||||
struct ice_ptp *ptp = &pf->ptp;
|
||||
|
||||
if (WARN_ON(!ctrl_ptp) || pf->hw.mac_type == ICE_MAC_UNKNOWN)
|
||||
if (!ctrl_ptp) {
|
||||
dev_info(ice_pf_to_dev(pf),
|
||||
"PTP unavailable: no controlling PF\n");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (pf->hw.mac_type == ICE_MAC_UNKNOWN)
|
||||
return -ENODEV;
|
||||
|
||||
INIT_LIST_HEAD(&ptp->port.list_node);
|
||||
|
||||
@ -78,14 +78,14 @@ struct ice_eth56g_mac_reg_cfg eth56g_mac_cfg[NUM_ICE_ETH56G_LNK_SPD] = {
|
||||
.blktime = 0x666, /* 3.2 */
|
||||
.tx_offset = {
|
||||
.serdes = 0x234c, /* 17.6484848 */
|
||||
.no_fec = 0x8e80, /* 71.25 */
|
||||
.no_fec = 0x93d9, /* 73 */
|
||||
.fc = 0xb4a4, /* 90.32 */
|
||||
.sfd = 0x4a4, /* 2.32 */
|
||||
.onestep = 0x4ccd /* 38.4 */
|
||||
},
|
||||
.rx_offset = {
|
||||
.serdes = 0xffffeb27, /* -10.42424 */
|
||||
.no_fec = 0xffffcccd, /* -25.6 */
|
||||
.no_fec = 0xffffc7b6, /* -28 */
|
||||
.fc = 0xfffc557b, /* -469.26 */
|
||||
.sfd = 0x4a4, /* 2.32 */
|
||||
.bs_ds = 0x32 /* 0.0969697 */
|
||||
@ -118,17 +118,17 @@ struct ice_eth56g_mac_reg_cfg eth56g_mac_cfg[NUM_ICE_ETH56G_LNK_SPD] = {
|
||||
.mktime = 0x147b, /* 10.24, only if RS-FEC enabled */
|
||||
.tx_offset = {
|
||||
.serdes = 0xe1e, /* 7.0593939 */
|
||||
.no_fec = 0x3857, /* 28.17 */
|
||||
.no_fec = 0x4266, /* 33 */
|
||||
.fc = 0x48c3, /* 36.38 */
|
||||
.rs = 0x8100, /* 64.5 */
|
||||
.rs = 0x8a00, /* 69 */
|
||||
.sfd = 0x1dc, /* 0.93 */
|
||||
.onestep = 0x1eb8 /* 15.36 */
|
||||
},
|
||||
.rx_offset = {
|
||||
.serdes = 0xfffff7a9, /* -4.1697 */
|
||||
.no_fec = 0xffffe71a, /* -12.45 */
|
||||
.no_fec = 0xffffe700, /* -12 */
|
||||
.fc = 0xfffe894d, /* -187.35 */
|
||||
.rs = 0xfffff8cd, /* -3.6 */
|
||||
.rs = 0xfffff8cc, /* -3 */
|
||||
.sfd = 0x1dc, /* 0.93 */
|
||||
.bs_ds = 0x14 /* 0.0387879, RS-FEC 0 */
|
||||
}
|
||||
|
||||
@ -5381,8 +5381,8 @@ int ice_ptp_write_incval_locked(struct ice_hw *hw, u64 incval)
|
||||
*/
|
||||
int ice_ptp_adj_clock(struct ice_hw *hw, s32 adj)
|
||||
{
|
||||
int err = 0;
|
||||
u8 tmr_idx;
|
||||
int err;
|
||||
|
||||
tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
|
||||
|
||||
@ -5399,8 +5399,8 @@ int ice_ptp_adj_clock(struct ice_hw *hw, s32 adj)
|
||||
err = ice_ptp_prep_phy_adj_e810(hw, adj);
|
||||
break;
|
||||
case ICE_MAC_E830:
|
||||
/* E830 sync PHYs automatically after setting GLTSYN_SHADJ */
|
||||
return 0;
|
||||
/* E830 sync PHYs automatically after setting cmd register */
|
||||
break;
|
||||
case ICE_MAC_GENERIC:
|
||||
err = ice_ptp_prep_phy_adj_e82x(hw, adj);
|
||||
break;
|
||||
|
||||
@ -258,7 +258,7 @@ enum ice_si_cgu_out_pins {
|
||||
};
|
||||
|
||||
struct ice_cgu_pin_desc {
|
||||
char *name;
|
||||
const char *name;
|
||||
u8 index;
|
||||
enum dpll_pin_type type;
|
||||
u32 freq_supp_num;
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
/* Copyright (C) 2019-2021, Intel Corporation. */
|
||||
|
||||
#include "ice.h"
|
||||
#include "ice_lib.h"
|
||||
#include "ice_eswitch.h"
|
||||
#include "devlink/devlink.h"
|
||||
#include "devlink/port.h"
|
||||
@ -67,7 +68,7 @@ ice_repr_get_stats64(struct net_device *netdev, struct rtnl_link_stats64 *stats)
|
||||
return;
|
||||
vsi = repr->src_vsi;
|
||||
|
||||
ice_update_vsi_stats(vsi);
|
||||
ice_update_eth_stats(vsi);
|
||||
eth_stats = &vsi->eth_stats;
|
||||
|
||||
stats->tx_packets = eth_stats->tx_unicast + eth_stats->tx_broadcast +
|
||||
@ -315,7 +316,7 @@ ice_repr_reg_netdev(struct net_device *netdev, const struct net_device_ops *ops)
|
||||
|
||||
static int ice_repr_ready_vf(struct ice_repr *repr)
|
||||
{
|
||||
return !ice_check_vf_ready_for_cfg(repr->vf);
|
||||
return ice_check_vf_ready_for_cfg(repr->vf);
|
||||
}
|
||||
|
||||
static int ice_repr_ready_sf(struct ice_repr *repr)
|
||||
|
||||
@ -305,6 +305,8 @@ ice_sf_eth_activate(struct ice_dynamic_port *dyn_port,
|
||||
|
||||
aux_dev_uninit:
|
||||
auxiliary_device_uninit(&sf_dev->adev);
|
||||
return err;
|
||||
|
||||
sf_dev_free:
|
||||
kfree(sf_dev);
|
||||
xa_erase:
|
||||
|
||||
@ -4984,10 +4984,8 @@ ice_find_free_recp_res_idx(struct ice_hw *hw, const unsigned long *profiles,
|
||||
hw->switch_info->recp_list[bit].res_idxs,
|
||||
ICE_MAX_FV_WORDS);
|
||||
|
||||
bitmap_xor(free_idx, used_idx, possible_idx, ICE_MAX_FV_WORDS);
|
||||
|
||||
/* return number of free indexes */
|
||||
return (u16)bitmap_weight(free_idx, ICE_MAX_FV_WORDS);
|
||||
return (u16)bitmap_weighted_xor(free_idx, used_idx, possible_idx, ICE_MAX_FV_WORDS);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -379,7 +379,7 @@ static bool ice_clean_tx_irq(struct ice_tx_ring *tx_ring, int napi_budget)
|
||||
if (netif_tx_queue_stopped(txring_txq(tx_ring)) &&
|
||||
!test_bit(ICE_VSI_DOWN, vsi->state)) {
|
||||
netif_tx_wake_queue(txring_txq(tx_ring));
|
||||
++tx_ring->ring_stats->tx_stats.restart_q;
|
||||
ice_stats_inc(tx_ring->ring_stats, tx_restart_q);
|
||||
}
|
||||
}
|
||||
|
||||
@ -499,7 +499,7 @@ int ice_setup_tx_ring(struct ice_tx_ring *tx_ring)
|
||||
|
||||
tx_ring->next_to_use = 0;
|
||||
tx_ring->next_to_clean = 0;
|
||||
tx_ring->ring_stats->tx_stats.prev_pkt = -1;
|
||||
tx_ring->ring_stats->tx.prev_pkt = -1;
|
||||
return 0;
|
||||
|
||||
err:
|
||||
@ -560,7 +560,9 @@ void ice_clean_rx_ring(struct ice_rx_ring *rx_ring)
|
||||
i = 0;
|
||||
}
|
||||
|
||||
if (rx_ring->vsi->type == ICE_VSI_PF &&
|
||||
if ((rx_ring->vsi->type == ICE_VSI_PF ||
|
||||
rx_ring->vsi->type == ICE_VSI_SF ||
|
||||
rx_ring->vsi->type == ICE_VSI_LB) &&
|
||||
xdp_rxq_info_is_reg(&rx_ring->xdp_rxq)) {
|
||||
xdp_rxq_info_detach_mem_model(&rx_ring->xdp_rxq);
|
||||
xdp_rxq_info_unreg(&rx_ring->xdp_rxq);
|
||||
@ -574,7 +576,6 @@ rx_skip_free:
|
||||
PAGE_SIZE);
|
||||
memset(rx_ring->desc, 0, size);
|
||||
|
||||
rx_ring->next_to_alloc = 0;
|
||||
rx_ring->next_to_clean = 0;
|
||||
rx_ring->next_to_use = 0;
|
||||
}
|
||||
@ -849,7 +850,7 @@ bool ice_alloc_rx_bufs(struct ice_rx_ring *rx_ring, unsigned int cleaned_count)
|
||||
|
||||
addr = libeth_rx_alloc(&fq, ntu);
|
||||
if (addr == DMA_MAPPING_ERROR) {
|
||||
rx_ring->ring_stats->rx_stats.alloc_page_failed++;
|
||||
ice_stats_inc(rx_ring->ring_stats, rx_page_failed);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -863,7 +864,7 @@ bool ice_alloc_rx_bufs(struct ice_rx_ring *rx_ring, unsigned int cleaned_count)
|
||||
|
||||
addr = libeth_rx_alloc(&hdr_fq, ntu);
|
||||
if (addr == DMA_MAPPING_ERROR) {
|
||||
rx_ring->ring_stats->rx_stats.alloc_page_failed++;
|
||||
ice_stats_inc(rx_ring->ring_stats, rx_page_failed);
|
||||
|
||||
libeth_rx_recycle_slow(fq.fqes[ntu].netmem);
|
||||
break;
|
||||
@ -1045,7 +1046,7 @@ construct_skb:
|
||||
/* exit if we failed to retrieve a buffer */
|
||||
if (!skb) {
|
||||
libeth_xdp_return_buff_slow(xdp);
|
||||
rx_ring->ring_stats->rx_stats.alloc_buf_failed++;
|
||||
ice_stats_inc(rx_ring->ring_stats, rx_buf_failed);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1087,35 +1088,36 @@ static void __ice_update_sample(struct ice_q_vector *q_vector,
|
||||
struct dim_sample *sample,
|
||||
bool is_tx)
|
||||
{
|
||||
u64 packets = 0, bytes = 0;
|
||||
u64 total_packets = 0, total_bytes = 0, pkts, bytes;
|
||||
|
||||
if (is_tx) {
|
||||
struct ice_tx_ring *tx_ring;
|
||||
|
||||
ice_for_each_tx_ring(tx_ring, *rc) {
|
||||
struct ice_ring_stats *ring_stats;
|
||||
|
||||
ring_stats = tx_ring->ring_stats;
|
||||
if (!ring_stats)
|
||||
if (!tx_ring->ring_stats)
|
||||
continue;
|
||||
packets += ring_stats->stats.pkts;
|
||||
bytes += ring_stats->stats.bytes;
|
||||
|
||||
ice_fetch_tx_ring_stats(tx_ring, &pkts, &bytes);
|
||||
|
||||
total_packets += pkts;
|
||||
total_bytes += bytes;
|
||||
}
|
||||
} else {
|
||||
struct ice_rx_ring *rx_ring;
|
||||
|
||||
ice_for_each_rx_ring(rx_ring, *rc) {
|
||||
struct ice_ring_stats *ring_stats;
|
||||
|
||||
ring_stats = rx_ring->ring_stats;
|
||||
if (!ring_stats)
|
||||
if (!rx_ring->ring_stats)
|
||||
continue;
|
||||
packets += ring_stats->stats.pkts;
|
||||
bytes += ring_stats->stats.bytes;
|
||||
|
||||
ice_fetch_rx_ring_stats(rx_ring, &pkts, &bytes);
|
||||
|
||||
total_packets += pkts;
|
||||
total_bytes += bytes;
|
||||
}
|
||||
}
|
||||
|
||||
dim_update_sample(q_vector->total_events, packets, bytes, sample);
|
||||
dim_update_sample(q_vector->total_events,
|
||||
total_packets, total_bytes, sample);
|
||||
sample->comp_ctr = 0;
|
||||
|
||||
/* if dim settings get stale, like when not updated for 1
|
||||
@ -1362,7 +1364,7 @@ static int __ice_maybe_stop_tx(struct ice_tx_ring *tx_ring, unsigned int size)
|
||||
|
||||
/* A reprieve! - use start_queue because it doesn't call schedule */
|
||||
netif_tx_start_queue(txring_txq(tx_ring));
|
||||
++tx_ring->ring_stats->tx_stats.restart_q;
|
||||
ice_stats_inc(tx_ring->ring_stats, tx_restart_q);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2156,6 +2158,9 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_tx_ring *tx_ring)
|
||||
|
||||
ice_trace(xmit_frame_ring, tx_ring, skb);
|
||||
|
||||
/* record the location of the first descriptor for this packet */
|
||||
first = &tx_ring->tx_buf[tx_ring->next_to_use];
|
||||
|
||||
if (unlikely(ipv6_hopopt_jumbo_remove(skb)))
|
||||
goto out_drop;
|
||||
|
||||
@ -2164,7 +2169,7 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_tx_ring *tx_ring)
|
||||
if (__skb_linearize(skb))
|
||||
goto out_drop;
|
||||
count = ice_txd_use_count(skb->len);
|
||||
tx_ring->ring_stats->tx_stats.tx_linearize++;
|
||||
ice_stats_inc(tx_ring->ring_stats, tx_linearize);
|
||||
}
|
||||
|
||||
/* need: 1 descriptor per page * PAGE_SIZE/ICE_MAX_DATA_PER_TXD,
|
||||
@ -2175,7 +2180,7 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_tx_ring *tx_ring)
|
||||
*/
|
||||
if (ice_maybe_stop_tx(tx_ring, count + ICE_DESCS_PER_CACHE_LINE +
|
||||
ICE_DESCS_FOR_CTX_DESC)) {
|
||||
tx_ring->ring_stats->tx_stats.tx_busy++;
|
||||
ice_stats_inc(tx_ring->ring_stats, tx_busy);
|
||||
return NETDEV_TX_BUSY;
|
||||
}
|
||||
|
||||
@ -2184,8 +2189,6 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_tx_ring *tx_ring)
|
||||
|
||||
offload.tx_ring = tx_ring;
|
||||
|
||||
/* record the location of the first descriptor for this packet */
|
||||
first = &tx_ring->tx_buf[tx_ring->next_to_use];
|
||||
first->skb = skb;
|
||||
first->type = ICE_TX_BUF_SKB;
|
||||
first->bytecount = max_t(unsigned int, skb->len, ETH_ZLEN);
|
||||
@ -2250,6 +2253,7 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_tx_ring *tx_ring)
|
||||
out_drop:
|
||||
ice_trace(xmit_frame_ring_drop, tx_ring, skb);
|
||||
dev_kfree_skb_any(skb);
|
||||
first->type = ICE_TX_BUF_EMPTY;
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
||||
|
||||
@ -129,34 +129,65 @@ struct ice_tx_offload_params {
|
||||
u8 header_len;
|
||||
};
|
||||
|
||||
struct ice_q_stats {
|
||||
u64 pkts;
|
||||
u64 bytes;
|
||||
};
|
||||
|
||||
struct ice_txq_stats {
|
||||
u64 restart_q;
|
||||
u64 tx_busy;
|
||||
u64 tx_linearize;
|
||||
int prev_pkt; /* negative if no pending Tx descriptors */
|
||||
};
|
||||
|
||||
struct ice_rxq_stats {
|
||||
u64 non_eop_descs;
|
||||
u64 alloc_page_failed;
|
||||
u64 alloc_buf_failed;
|
||||
};
|
||||
|
||||
struct ice_ring_stats {
|
||||
struct rcu_head rcu; /* to avoid race on free */
|
||||
struct ice_q_stats stats;
|
||||
struct u64_stats_sync syncp;
|
||||
union {
|
||||
struct ice_txq_stats tx_stats;
|
||||
struct ice_rxq_stats rx_stats;
|
||||
};
|
||||
struct_group(stats,
|
||||
u64_stats_t pkts;
|
||||
u64_stats_t bytes;
|
||||
union {
|
||||
struct_group(tx,
|
||||
u64_stats_t tx_restart_q;
|
||||
u64_stats_t tx_busy;
|
||||
u64_stats_t tx_linearize;
|
||||
/* negative if no pending Tx descriptors */
|
||||
int prev_pkt;
|
||||
);
|
||||
struct_group(rx,
|
||||
u64_stats_t rx_non_eop_descs;
|
||||
u64_stats_t rx_page_failed;
|
||||
u64_stats_t rx_buf_failed;
|
||||
);
|
||||
};
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* ice_stats_read - Read a single ring stat value
|
||||
* @stats: pointer to ring_stats structure for a queue
|
||||
* @member: the ice_ring_stats member to read
|
||||
*
|
||||
* Shorthand for reading a single 64-bit stat value from struct
|
||||
* ice_ring_stats.
|
||||
*
|
||||
* Return: the value of the requested stat.
|
||||
*/
|
||||
#define ice_stats_read(stats, member) ({ \
|
||||
struct ice_ring_stats *__stats = (stats); \
|
||||
unsigned int start; \
|
||||
u64 val; \
|
||||
do { \
|
||||
start = u64_stats_fetch_begin(&__stats->syncp); \
|
||||
val = u64_stats_read(&__stats->member); \
|
||||
} while (u64_stats_fetch_retry(&__stats->syncp, start)); \
|
||||
val; \
|
||||
})
|
||||
|
||||
/**
|
||||
* ice_stats_inc - Increment a single ring stat value
|
||||
* @stats: pointer to the ring_stats structure for a queue
|
||||
* @member: the ice_ring_stats member to increment
|
||||
*
|
||||
* Shorthand for incrementing a single 64-bit stat value in struct
|
||||
* ice_ring_stats.
|
||||
*/
|
||||
#define ice_stats_inc(stats, member) do { \
|
||||
struct ice_ring_stats *__stats = (stats); \
|
||||
u64_stats_update_begin(&__stats->syncp); \
|
||||
u64_stats_inc(&__stats->member); \
|
||||
u64_stats_update_end(&__stats->syncp); \
|
||||
} while (0)
|
||||
|
||||
enum ice_ring_state_t {
|
||||
ICE_TX_XPS_INIT_DONE,
|
||||
ICE_TX_NBITS,
|
||||
@ -236,34 +267,49 @@ struct ice_tstamp_ring {
|
||||
} ____cacheline_internodealigned_in_smp;
|
||||
|
||||
struct ice_rx_ring {
|
||||
/* CL1 - 1st cacheline starts here */
|
||||
__cacheline_group_begin_aligned(read_mostly);
|
||||
void *desc; /* Descriptor ring memory */
|
||||
struct page_pool *pp;
|
||||
struct net_device *netdev; /* netdev ring maps to */
|
||||
struct ice_vsi *vsi; /* Backreference to associated VSI */
|
||||
struct ice_q_vector *q_vector; /* Backreference to associated vector */
|
||||
u8 __iomem *tail;
|
||||
u16 q_index; /* Queue number of ring */
|
||||
|
||||
u16 count; /* Number of descriptors */
|
||||
u16 reg_idx; /* HW register index of the ring */
|
||||
u16 next_to_alloc;
|
||||
|
||||
union {
|
||||
struct libeth_fqe *rx_fqes;
|
||||
struct xdp_buff **xdp_buf;
|
||||
};
|
||||
|
||||
/* CL2 - 2nd cacheline starts here */
|
||||
struct libeth_fqe *hdr_fqes;
|
||||
struct page_pool *hdr_pp;
|
||||
u16 count; /* Number of descriptors */
|
||||
u8 ptp_rx;
|
||||
|
||||
u8 flags;
|
||||
#define ICE_RX_FLAGS_CRC_STRIP_DIS BIT(2)
|
||||
#define ICE_RX_FLAGS_MULTIDEV BIT(3)
|
||||
#define ICE_RX_FLAGS_RING_GCS BIT(4)
|
||||
|
||||
u32 truesize;
|
||||
|
||||
struct page_pool *hdr_pp;
|
||||
struct libeth_fqe *hdr_fqes;
|
||||
|
||||
struct bpf_prog *xdp_prog;
|
||||
struct ice_tx_ring *xdp_ring;
|
||||
struct xsk_buff_pool *xsk_pool;
|
||||
|
||||
/* stats structs */
|
||||
struct ice_ring_stats *ring_stats;
|
||||
struct ice_rx_ring *next; /* pointer to next ring in q_vector */
|
||||
|
||||
u32 hdr_truesize;
|
||||
|
||||
struct xdp_rxq_info xdp_rxq;
|
||||
__cacheline_group_end_aligned(read_mostly);
|
||||
|
||||
__cacheline_group_begin_aligned(read_write);
|
||||
union {
|
||||
struct libeth_xdp_buff_stash xdp;
|
||||
struct libeth_xdp_buff *xsk;
|
||||
};
|
||||
|
||||
/* CL3 - 3rd cacheline starts here */
|
||||
union {
|
||||
struct ice_pkt_ctx pkt_ctx;
|
||||
struct {
|
||||
@ -271,75 +317,78 @@ struct ice_rx_ring {
|
||||
__be16 vlan_proto;
|
||||
};
|
||||
};
|
||||
struct bpf_prog *xdp_prog;
|
||||
|
||||
/* used in interrupt processing */
|
||||
u16 next_to_use;
|
||||
u16 next_to_clean;
|
||||
__cacheline_group_end_aligned(read_write);
|
||||
|
||||
u32 hdr_truesize;
|
||||
u32 truesize;
|
||||
|
||||
/* stats structs */
|
||||
struct ice_ring_stats *ring_stats;
|
||||
|
||||
__cacheline_group_begin_aligned(cold);
|
||||
struct rcu_head rcu; /* to avoid race on free */
|
||||
/* CL4 - 4th cacheline starts here */
|
||||
struct ice_vsi *vsi; /* Backreference to associated VSI */
|
||||
struct ice_channel *ch;
|
||||
struct ice_tx_ring *xdp_ring;
|
||||
struct ice_rx_ring *next; /* pointer to next ring in q_vector */
|
||||
struct xsk_buff_pool *xsk_pool;
|
||||
|
||||
dma_addr_t dma; /* physical address of ring */
|
||||
u16 q_index; /* Queue number of ring */
|
||||
u16 reg_idx; /* HW register index of the ring */
|
||||
u8 dcb_tc; /* Traffic class of ring */
|
||||
|
||||
u16 rx_hdr_len;
|
||||
u16 rx_buf_len;
|
||||
dma_addr_t dma; /* physical address of ring */
|
||||
u8 dcb_tc; /* Traffic class of ring */
|
||||
u8 ptp_rx;
|
||||
#define ICE_RX_FLAGS_CRC_STRIP_DIS BIT(2)
|
||||
#define ICE_RX_FLAGS_MULTIDEV BIT(3)
|
||||
#define ICE_RX_FLAGS_RING_GCS BIT(4)
|
||||
u8 flags;
|
||||
/* CL5 - 5th cacheline starts here */
|
||||
struct xdp_rxq_info xdp_rxq;
|
||||
__cacheline_group_end_aligned(cold);
|
||||
} ____cacheline_internodealigned_in_smp;
|
||||
|
||||
struct ice_tx_ring {
|
||||
/* CL1 - 1st cacheline starts here */
|
||||
struct ice_tx_ring *next; /* pointer to next ring in q_vector */
|
||||
__cacheline_group_begin_aligned(read_mostly);
|
||||
void *desc; /* Descriptor ring memory */
|
||||
struct device *dev; /* Used for DMA mapping */
|
||||
u8 __iomem *tail;
|
||||
struct ice_tx_buf *tx_buf;
|
||||
|
||||
struct ice_q_vector *q_vector; /* Backreference to associated vector */
|
||||
struct net_device *netdev; /* netdev ring maps to */
|
||||
struct ice_vsi *vsi; /* Backreference to associated VSI */
|
||||
/* CL2 - 2nd cacheline starts here */
|
||||
dma_addr_t dma; /* physical address of ring */
|
||||
struct xsk_buff_pool *xsk_pool;
|
||||
u16 next_to_use;
|
||||
u16 next_to_clean;
|
||||
u16 q_handle; /* Queue handle per TC */
|
||||
u16 reg_idx; /* HW register index of the ring */
|
||||
|
||||
u16 count; /* Number of descriptors */
|
||||
u16 q_index; /* Queue number of ring */
|
||||
u16 xdp_tx_active;
|
||||
/* stats structs */
|
||||
struct ice_ring_stats *ring_stats;
|
||||
/* CL3 - 3rd cacheline starts here */
|
||||
struct rcu_head rcu; /* to avoid race on free */
|
||||
DECLARE_BITMAP(xps_state, ICE_TX_NBITS); /* XPS Config State */
|
||||
struct ice_channel *ch;
|
||||
struct ice_ptp_tx *tx_tstamps;
|
||||
spinlock_t tx_lock;
|
||||
u32 txq_teid; /* Added Tx queue TEID */
|
||||
/* CL4 - 4th cacheline starts here */
|
||||
struct ice_tstamp_ring *tstamp_ring;
|
||||
|
||||
u8 flags;
|
||||
#define ICE_TX_FLAGS_RING_XDP BIT(0)
|
||||
#define ICE_TX_FLAGS_RING_VLAN_L2TAG1 BIT(1)
|
||||
#define ICE_TX_FLAGS_RING_VLAN_L2TAG2 BIT(2)
|
||||
#define ICE_TX_FLAGS_TXTIME BIT(3)
|
||||
u8 flags;
|
||||
|
||||
struct xsk_buff_pool *xsk_pool;
|
||||
|
||||
/* stats structs */
|
||||
struct ice_ring_stats *ring_stats;
|
||||
struct ice_tx_ring *next; /* pointer to next ring in q_vector */
|
||||
|
||||
struct ice_tstamp_ring *tstamp_ring;
|
||||
struct ice_ptp_tx *tx_tstamps;
|
||||
__cacheline_group_end_aligned(read_mostly);
|
||||
|
||||
__cacheline_group_begin_aligned(read_write);
|
||||
u16 next_to_use;
|
||||
u16 next_to_clean;
|
||||
|
||||
u16 xdp_tx_active;
|
||||
spinlock_t tx_lock;
|
||||
__cacheline_group_end_aligned(read_write);
|
||||
|
||||
__cacheline_group_begin_aligned(cold);
|
||||
struct rcu_head rcu; /* to avoid race on free */
|
||||
DECLARE_BITMAP(xps_state, ICE_TX_NBITS); /* XPS Config State */
|
||||
struct ice_channel *ch;
|
||||
|
||||
dma_addr_t dma; /* physical address of ring */
|
||||
u16 q_handle; /* Queue handle per TC */
|
||||
u16 reg_idx; /* HW register index of the ring */
|
||||
u8 dcb_tc; /* Traffic class of ring */
|
||||
|
||||
u16 quanta_prof_id;
|
||||
u32 txq_teid; /* Added Tx queue TEID */
|
||||
__cacheline_group_end_aligned(cold);
|
||||
} ____cacheline_internodealigned_in_smp;
|
||||
|
||||
static inline bool ice_ring_ch_enabled(struct ice_tx_ring *ring)
|
||||
|
||||
@ -20,9 +20,6 @@ void ice_release_rx_desc(struct ice_rx_ring *rx_ring, u16 val)
|
||||
|
||||
rx_ring->next_to_use = val;
|
||||
|
||||
/* update next to alloc since we have filled the ring */
|
||||
rx_ring->next_to_alloc = val;
|
||||
|
||||
/* QRX_TAIL will be updated with any tail value, but hardware ignores
|
||||
* the lower 3 bits. This makes it so we only bump tail on meaningful
|
||||
* boundaries. Also, this allows us to bump tail on intervals of 8 up to
|
||||
@ -480,7 +477,7 @@ dma_unmap:
|
||||
return ICE_XDP_CONSUMED;
|
||||
|
||||
busy:
|
||||
xdp_ring->ring_stats->tx_stats.tx_busy++;
|
||||
ice_stats_inc(xdp_ring->ring_stats, tx_busy);
|
||||
|
||||
return ICE_XDP_CONSUMED;
|
||||
}
|
||||
|
||||
@ -38,7 +38,7 @@ ice_is_non_eop(const struct ice_rx_ring *rx_ring,
|
||||
if (likely(ice_test_staterr(rx_desc->wb.status_error0, ICE_RXD_EOF)))
|
||||
return false;
|
||||
|
||||
rx_ring->ring_stats->rx_stats.non_eop_descs++;
|
||||
ice_stats_inc(rx_ring->ring_stats, rx_non_eop_descs);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1217,8 +1217,8 @@ bool ice_is_vf_trusted(struct ice_vf *vf)
|
||||
*/
|
||||
bool ice_vf_has_no_qs_ena(struct ice_vf *vf)
|
||||
{
|
||||
return (!bitmap_weight(vf->rxq_ena, ICE_MAX_RSS_QS_PER_VF) &&
|
||||
!bitmap_weight(vf->txq_ena, ICE_MAX_RSS_QS_PER_VF));
|
||||
return bitmap_empty(vf->rxq_ena, ICE_MAX_RSS_QS_PER_VF) &&
|
||||
bitmap_empty(vf->txq_ena, ICE_MAX_RSS_QS_PER_VF);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -497,7 +497,7 @@ static int ice_xmit_xdp_tx_zc(struct xdp_buff *xdp,
|
||||
return ICE_XDP_TX;
|
||||
|
||||
busy:
|
||||
xdp_ring->ring_stats->tx_stats.tx_busy++;
|
||||
ice_stats_inc(xdp_ring->ring_stats, tx_busy);
|
||||
|
||||
return ICE_XDP_CONSUMED;
|
||||
}
|
||||
@ -659,7 +659,7 @@ construct_skb:
|
||||
xsk_buff_free(first);
|
||||
first = NULL;
|
||||
|
||||
rx_ring->ring_stats->rx_stats.alloc_buf_failed++;
|
||||
ice_stats_inc(rx_ring->ring_stats, rx_buf_failed);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -900,6 +900,9 @@ void ice_xsk_clean_rx_ring(struct ice_rx_ring *rx_ring)
|
||||
u16 ntc = rx_ring->next_to_clean;
|
||||
u16 ntu = rx_ring->next_to_use;
|
||||
|
||||
if (xdp_rxq_info_is_reg(&rx_ring->xdp_rxq))
|
||||
xdp_rxq_info_unreg(&rx_ring->xdp_rxq);
|
||||
|
||||
while (ntc != ntu) {
|
||||
struct xdp_buff *xdp = *ice_xdp_buf(rx_ring, ntc);
|
||||
|
||||
|
||||
@ -1428,14 +1428,26 @@ static void nfs4_put_copy(struct nfsd4_copy *copy)
|
||||
kfree(copy);
|
||||
}
|
||||
|
||||
static void release_copy_files(struct nfsd4_copy *copy);
|
||||
|
||||
static void nfsd4_stop_copy(struct nfsd4_copy *copy)
|
||||
{
|
||||
trace_nfsd_copy_async_cancel(copy);
|
||||
if (!test_and_set_bit(NFSD4_COPY_F_STOPPED, ©->cp_flags)) {
|
||||
kthread_stop(copy->copy_task);
|
||||
copy->nfserr = nfs_ok;
|
||||
if (!test_bit(NFSD4_COPY_F_CB_ERROR, ©->cp_flags))
|
||||
copy->nfserr = nfs_ok;
|
||||
set_bit(NFSD4_COPY_F_COMPLETED, ©->cp_flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* The copy was removed from async_copies before this function
|
||||
* was called, so the reaper cannot clean it up. Release files
|
||||
* here regardless of who won the STOPPED race. If the thread
|
||||
* set STOPPED, it has finished using the files. If STOPPED
|
||||
* was set here, kthread_stop() waited for the thread to exit.
|
||||
*/
|
||||
release_copy_files(copy);
|
||||
nfs4_put_copy(copy);
|
||||
}
|
||||
|
||||
@ -1463,6 +1475,72 @@ void nfsd4_shutdown_copy(struct nfs4_client *clp)
|
||||
while ((copy = nfsd4_unhash_copy(clp)) != NULL)
|
||||
nfsd4_stop_copy(copy);
|
||||
}
|
||||
|
||||
static bool nfsd4_copy_on_sb(const struct nfsd4_copy *copy,
|
||||
const struct super_block *sb)
|
||||
{
|
||||
if (copy->nf_src &&
|
||||
file_inode(copy->nf_src->nf_file)->i_sb == sb)
|
||||
return true;
|
||||
if (copy->nf_dst &&
|
||||
file_inode(copy->nf_dst->nf_file)->i_sb == sb)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* nfsd4_cancel_copy_by_sb - cancel async copy operations on @sb
|
||||
* @net: net namespace containing the copy operations
|
||||
* @sb: targeted superblock
|
||||
*/
|
||||
void nfsd4_cancel_copy_by_sb(struct net *net, struct super_block *sb)
|
||||
{
|
||||
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
|
||||
struct nfsd4_copy *copy, *tmp;
|
||||
struct nfs4_client *clp;
|
||||
unsigned int idhashval;
|
||||
LIST_HEAD(to_cancel);
|
||||
|
||||
spin_lock(&nn->client_lock);
|
||||
for (idhashval = 0; idhashval < CLIENT_HASH_SIZE; idhashval++) {
|
||||
struct list_head *head = &nn->conf_id_hashtbl[idhashval];
|
||||
|
||||
list_for_each_entry(clp, head, cl_idhash) {
|
||||
spin_lock(&clp->async_lock);
|
||||
list_for_each_entry_safe(copy, tmp,
|
||||
&clp->async_copies, copies) {
|
||||
if (nfsd4_copy_on_sb(copy, sb)) {
|
||||
refcount_inc(©->refcount);
|
||||
/*
|
||||
* Hold a reference on the client while
|
||||
* nfsd4_stop_copy() runs. Unlike
|
||||
* nfsd4_unhash_copy(), cp_clp is not
|
||||
* NULLed here because nfsd4_send_cb_offload()
|
||||
* needs a valid client to send CB_OFFLOAD.
|
||||
* That function takes its own reference to
|
||||
* survive callback flight.
|
||||
*/
|
||||
kref_get(&clp->cl_nfsdfs.cl_ref);
|
||||
copy->nfserr = nfserr_admin_revoked;
|
||||
set_bit(NFSD4_COPY_F_CB_ERROR,
|
||||
©->cp_flags);
|
||||
list_move(©->copies, &to_cancel);
|
||||
}
|
||||
}
|
||||
spin_unlock(&clp->async_lock);
|
||||
}
|
||||
}
|
||||
spin_unlock(&nn->client_lock);
|
||||
|
||||
list_for_each_entry_safe(copy, tmp, &to_cancel, copies) {
|
||||
struct nfs4_client *clp = copy->cp_clp;
|
||||
|
||||
list_del_init(©->copies);
|
||||
nfsd4_stop_copy(copy);
|
||||
nfsd4_put_client(clp);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NFSD_V4_2_INTER_SSC
|
||||
|
||||
extern struct file *nfs42_ssc_open(struct vfsmount *ss_mnt,
|
||||
@ -1752,6 +1830,7 @@ static void nfsd4_cb_offload_release(struct nfsd4_callback *cb)
|
||||
container_of(cbo, struct nfsd4_copy, cp_cb_offload);
|
||||
|
||||
set_bit(NFSD4_COPY_F_OFFLOAD_DONE, ©->cp_flags);
|
||||
nfsd4_put_client(cb->cb_clp);
|
||||
}
|
||||
|
||||
static int nfsd4_cb_offload_done(struct nfsd4_callback *cb,
|
||||
@ -1871,10 +1950,14 @@ static void dup_copy_fields(struct nfsd4_copy *src, struct nfsd4_copy *dst)
|
||||
|
||||
static void release_copy_files(struct nfsd4_copy *copy)
|
||||
{
|
||||
if (copy->nf_src)
|
||||
if (copy->nf_src) {
|
||||
nfsd_file_put(copy->nf_src);
|
||||
if (copy->nf_dst)
|
||||
copy->nf_src = NULL;
|
||||
}
|
||||
if (copy->nf_dst) {
|
||||
nfsd_file_put(copy->nf_dst);
|
||||
copy->nf_dst = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void cleanup_async_copy(struct nfsd4_copy *copy)
|
||||
@ -1893,18 +1976,34 @@ static void cleanup_async_copy(struct nfsd4_copy *copy)
|
||||
static void nfsd4_send_cb_offload(struct nfsd4_copy *copy)
|
||||
{
|
||||
struct nfsd4_cb_offload *cbo = ©->cp_cb_offload;
|
||||
struct nfs4_client *clp = copy->cp_clp;
|
||||
|
||||
/*
|
||||
* cp_clp is NULL when called via nfsd4_shutdown_copy() during
|
||||
* client destruction. Skip the callback; the client is gone.
|
||||
*/
|
||||
if (!clp) {
|
||||
set_bit(NFSD4_COPY_F_OFFLOAD_DONE, ©->cp_flags);
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(&cbo->co_res, ©->cp_res, sizeof(copy->cp_res));
|
||||
memcpy(&cbo->co_fh, ©->fh, sizeof(copy->fh));
|
||||
cbo->co_nfserr = copy->nfserr;
|
||||
cbo->co_retries = 5;
|
||||
|
||||
nfsd4_init_cb(&cbo->co_cb, copy->cp_clp, &nfsd4_cb_offload_ops,
|
||||
/*
|
||||
* Hold a reference on the client while the callback is in flight.
|
||||
* Released in nfsd4_cb_offload_release().
|
||||
*/
|
||||
kref_get(&clp->cl_nfsdfs.cl_ref);
|
||||
|
||||
nfsd4_init_cb(&cbo->co_cb, clp, &nfsd4_cb_offload_ops,
|
||||
NFSPROC4_CLNT_CB_OFFLOAD);
|
||||
nfsd41_cb_referring_call(&cbo->co_cb, &cbo->co_referring_sessionid,
|
||||
cbo->co_referring_slotid,
|
||||
cbo->co_referring_seqno);
|
||||
trace_nfsd_cb_offload(copy->cp_clp, &cbo->co_res.cb_stateid,
|
||||
trace_nfsd_cb_offload(clp, &cbo->co_res.cb_stateid,
|
||||
&cbo->co_fh, copy->cp_count, copy->nfserr);
|
||||
nfsd4_try_run_cb(&cbo->co_cb);
|
||||
}
|
||||
@ -1919,6 +2018,7 @@ static void nfsd4_send_cb_offload(struct nfsd4_copy *copy)
|
||||
static int nfsd4_do_async_copy(void *data)
|
||||
{
|
||||
struct nfsd4_copy *copy = (struct nfsd4_copy *)data;
|
||||
__be32 nfserr = nfs_ok;
|
||||
|
||||
trace_nfsd_copy_async(copy);
|
||||
if (nfsd4_ssc_is_inter(copy)) {
|
||||
@ -1929,23 +2029,25 @@ static int nfsd4_do_async_copy(void *data)
|
||||
if (IS_ERR(filp)) {
|
||||
switch (PTR_ERR(filp)) {
|
||||
case -EBADF:
|
||||
copy->nfserr = nfserr_wrong_type;
|
||||
nfserr = nfserr_wrong_type;
|
||||
break;
|
||||
default:
|
||||
copy->nfserr = nfserr_offload_denied;
|
||||
nfserr = nfserr_offload_denied;
|
||||
}
|
||||
/* ss_mnt will be unmounted by the laundromat */
|
||||
goto do_callback;
|
||||
}
|
||||
copy->nfserr = nfsd4_do_copy(copy, filp, copy->nf_dst->nf_file,
|
||||
false);
|
||||
nfserr = nfsd4_do_copy(copy, filp, copy->nf_dst->nf_file,
|
||||
false);
|
||||
nfsd4_cleanup_inter_ssc(copy->ss_nsui, filp, copy->nf_dst);
|
||||
} else {
|
||||
copy->nfserr = nfsd4_do_copy(copy, copy->nf_src->nf_file,
|
||||
copy->nf_dst->nf_file, false);
|
||||
nfserr = nfsd4_do_copy(copy, copy->nf_src->nf_file,
|
||||
copy->nf_dst->nf_file, false);
|
||||
}
|
||||
|
||||
do_callback:
|
||||
if (!test_bit(NFSD4_COPY_F_CB_ERROR, ©->cp_flags))
|
||||
copy->nfserr = nfserr;
|
||||
/* The kthread exits forthwith. Ensure that a subsequent
|
||||
* OFFLOAD_CANCEL won't try to kill it again. */
|
||||
set_bit(NFSD4_COPY_F_STOPPED, ©->cp_flags);
|
||||
|
||||
@ -1722,7 +1722,7 @@ static struct nfs4_stid *find_one_sb_stid(struct nfs4_client *clp,
|
||||
|
||||
/**
|
||||
* nfsd4_revoke_states - revoke all nfsv4 states associated with given filesystem
|
||||
* @net: used to identify instance of nfsd (there is one per net namespace)
|
||||
* @nn: used to identify instance of nfsd (there is one per net namespace)
|
||||
* @sb: super_block used to identify target filesystem
|
||||
*
|
||||
* All nfs4 states (open, lock, delegation, layout) held by the server instance
|
||||
@ -1734,16 +1734,15 @@ static struct nfs4_stid *find_one_sb_stid(struct nfs4_client *clp,
|
||||
* The clients which own the states will subsequently being notified that the
|
||||
* states have been "admin-revoked".
|
||||
*/
|
||||
void nfsd4_revoke_states(struct net *net, struct super_block *sb)
|
||||
void nfsd4_revoke_states(struct nfsd_net *nn, struct super_block *sb)
|
||||
{
|
||||
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
|
||||
unsigned int idhashval;
|
||||
unsigned int sc_types;
|
||||
|
||||
sc_types = SC_TYPE_OPEN | SC_TYPE_LOCK | SC_TYPE_DELEG | SC_TYPE_LAYOUT;
|
||||
|
||||
spin_lock(&nn->client_lock);
|
||||
for (idhashval = 0; idhashval < CLIENT_HASH_MASK; idhashval++) {
|
||||
for (idhashval = 0; idhashval < CLIENT_HASH_SIZE; idhashval++) {
|
||||
struct list_head *head = &nn->conf_id_hashtbl[idhashval];
|
||||
struct nfs4_client *clp;
|
||||
retry:
|
||||
@ -2377,7 +2376,13 @@ static void __free_client(struct kref *k)
|
||||
kmem_cache_free(client_slab, clp);
|
||||
}
|
||||
|
||||
static void drop_client(struct nfs4_client *clp)
|
||||
/**
|
||||
* nfsd4_put_client - release a reference on an nfs4_client
|
||||
* @clp: the client to be released
|
||||
*
|
||||
* When the last reference is released, the client is freed.
|
||||
*/
|
||||
void nfsd4_put_client(struct nfs4_client *clp)
|
||||
{
|
||||
kref_put(&clp->cl_nfsdfs.cl_ref, __free_client);
|
||||
}
|
||||
@ -2399,7 +2404,7 @@ free_client(struct nfs4_client *clp)
|
||||
clp->cl_nfsd_dentry = NULL;
|
||||
wake_up_all(&expiry_wq);
|
||||
}
|
||||
drop_client(clp);
|
||||
nfsd4_put_client(clp);
|
||||
}
|
||||
|
||||
/* must be called under the client_lock */
|
||||
@ -2797,7 +2802,7 @@ static int client_info_show(struct seq_file *m, void *v)
|
||||
spin_unlock(&clp->cl_lock);
|
||||
seq_puts(m, "\n");
|
||||
|
||||
drop_client(clp);
|
||||
nfsd4_put_client(clp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -3063,7 +3068,7 @@ static int client_states_open(struct inode *inode, struct file *file)
|
||||
|
||||
ret = seq_open(file, &states_seq_ops);
|
||||
if (ret) {
|
||||
drop_client(clp);
|
||||
nfsd4_put_client(clp);
|
||||
return ret;
|
||||
}
|
||||
s = file->private_data;
|
||||
@ -3077,7 +3082,7 @@ static int client_opens_release(struct inode *inode, struct file *file)
|
||||
struct nfs4_client *clp = m->private;
|
||||
|
||||
/* XXX: alternatively, we could get/drop in seq start/stop */
|
||||
drop_client(clp);
|
||||
nfsd4_put_client(clp);
|
||||
return seq_release(inode, file);
|
||||
}
|
||||
|
||||
@ -3133,7 +3138,7 @@ static ssize_t client_ctl_write(struct file *file, const char __user *buf,
|
||||
if (!clp)
|
||||
return -ENXIO;
|
||||
force_expire_client(clp);
|
||||
drop_client(clp);
|
||||
nfsd4_put_client(clp);
|
||||
return 7;
|
||||
}
|
||||
|
||||
@ -3168,7 +3173,7 @@ nfsd4_cb_recall_any_release(struct nfsd4_callback *cb)
|
||||
{
|
||||
struct nfs4_client *clp = cb->cb_clp;
|
||||
|
||||
drop_client(clp);
|
||||
nfsd4_put_client(clp);
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
@ -259,6 +259,7 @@ static ssize_t write_unlock_fs(struct file *file, char *buf, size_t size)
|
||||
struct path path;
|
||||
char *fo_path;
|
||||
int error;
|
||||
struct nfsd_net *nn;
|
||||
|
||||
/* sanity check */
|
||||
if (size == 0)
|
||||
@ -284,8 +285,15 @@ static ssize_t write_unlock_fs(struct file *file, char *buf, size_t size)
|
||||
* 2. Is that directory a mount point, or
|
||||
* 3. Is that directory the root of an exported file system?
|
||||
*/
|
||||
nfsd4_cancel_copy_by_sb(netns(file), path.dentry->d_sb);
|
||||
error = nlmsvc_unlock_all_by_sb(path.dentry->d_sb);
|
||||
nfsd4_revoke_states(netns(file), path.dentry->d_sb);
|
||||
mutex_lock(&nfsd_mutex);
|
||||
nn = net_generic(netns(file), nfsd_net_id);
|
||||
if (nn->nfsd_serv)
|
||||
nfsd4_revoke_states(nn, path.dentry->d_sb);
|
||||
else
|
||||
error = -EINVAL;
|
||||
mutex_unlock(&nfsd_mutex);
|
||||
|
||||
path_put(&path);
|
||||
return error;
|
||||
|
||||
@ -827,6 +827,7 @@ static inline void nfsd4_try_run_cb(struct nfsd4_callback *cb)
|
||||
|
||||
extern void nfsd4_shutdown_callback(struct nfs4_client *);
|
||||
extern void nfsd4_shutdown_copy(struct nfs4_client *clp);
|
||||
void nfsd4_put_client(struct nfs4_client *clp);
|
||||
void nfsd4_async_copy_reaper(struct nfsd_net *nn);
|
||||
bool nfsd4_has_active_async_copies(struct nfs4_client *clp);
|
||||
extern struct nfs4_client_reclaim *nfs4_client_to_reclaim(struct xdr_netobj name,
|
||||
@ -846,9 +847,13 @@ static inline void get_nfs4_file(struct nfs4_file *fi)
|
||||
struct nfsd_file *find_any_file(struct nfs4_file *f);
|
||||
|
||||
#ifdef CONFIG_NFSD_V4
|
||||
void nfsd4_revoke_states(struct net *net, struct super_block *sb);
|
||||
void nfsd4_revoke_states(struct nfsd_net *nn, struct super_block *sb);
|
||||
void nfsd4_cancel_copy_by_sb(struct net *net, struct super_block *sb);
|
||||
#else
|
||||
static inline void nfsd4_revoke_states(struct net *net, struct super_block *sb)
|
||||
static inline void nfsd4_revoke_states(struct nfsd_net *nn, struct super_block *sb)
|
||||
{
|
||||
}
|
||||
static inline void nfsd4_cancel_copy_by_sb(struct net *net, struct super_block *sb)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -732,6 +732,7 @@ struct nfsd4_copy {
|
||||
#define NFSD4_COPY_F_COMMITTED (3)
|
||||
#define NFSD4_COPY_F_COMPLETED (4)
|
||||
#define NFSD4_COPY_F_OFFLOAD_DONE (5)
|
||||
#define NFSD4_COPY_F_CB_ERROR (6)
|
||||
|
||||
/* response */
|
||||
__be32 nfserr;
|
||||
|
||||
@ -414,7 +414,7 @@ static struct fsnotify_mark *fsnotify_first_mark(struct fsnotify_mark_connector
|
||||
return hlist_entry_safe(node, struct fsnotify_mark, obj_list);
|
||||
}
|
||||
|
||||
static struct fsnotify_mark *fsnotify_next_mark(struct fsnotify_mark *mark)
|
||||
struct fsnotify_mark *fsnotify_next_mark(struct fsnotify_mark *mark)
|
||||
{
|
||||
struct hlist_node *node = NULL;
|
||||
|
||||
|
||||
@ -440,9 +440,6 @@ EXPORT_SYMBOL_GPL(fsnotify_put_mark);
|
||||
*/
|
||||
static bool fsnotify_get_mark_safe(struct fsnotify_mark *mark)
|
||||
{
|
||||
if (!mark)
|
||||
return true;
|
||||
|
||||
if (refcount_inc_not_zero(&mark->refcnt)) {
|
||||
spin_lock(&mark->lock);
|
||||
if (mark->flags & FSNOTIFY_MARK_FLAG_ATTACHED) {
|
||||
@ -483,15 +480,22 @@ bool fsnotify_prepare_user_wait(struct fsnotify_iter_info *iter_info)
|
||||
int type;
|
||||
|
||||
fsnotify_foreach_iter_type(type) {
|
||||
struct fsnotify_mark *mark = iter_info->marks[type];
|
||||
|
||||
/* This can fail if mark is being removed */
|
||||
if (!fsnotify_get_mark_safe(iter_info->marks[type])) {
|
||||
__release(&fsnotify_mark_srcu);
|
||||
goto fail;
|
||||
while (mark && !fsnotify_get_mark_safe(mark)) {
|
||||
if (mark->group == iter_info->current_group) {
|
||||
__release(&fsnotify_mark_srcu);
|
||||
goto fail;
|
||||
}
|
||||
/* This is a mark in an unrelated group, skip */
|
||||
mark = fsnotify_next_mark(mark);
|
||||
iter_info->marks[type] = mark;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Now that both marks are pinned by refcount in the inode / vfsmount
|
||||
* Now that all marks are pinned by refcount in the inode / vfsmount / etc
|
||||
* lists, we can drop SRCU lock, and safely resume the list iteration
|
||||
* once userspace returns.
|
||||
*/
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
* Copyright (C) 2008-2009 Red Hat, Inc. All rights reserved.
|
||||
*
|
||||
* This file is a stub providing documentation for what functions
|
||||
* asm-ARCH/syscall.h files need to define. Most arch definitions
|
||||
* arch/ARCH/include/asm/syscall.h files need to define. Most arch definitions
|
||||
* will be simple inlines.
|
||||
*
|
||||
* All of these functions expect to be called with no locks,
|
||||
|
||||
@ -23,7 +23,7 @@ struct device;
|
||||
*
|
||||
* Function implementations generic to all architectures are in
|
||||
* lib/bitmap.c. Functions implementations that are architecture
|
||||
* specific are in various include/asm-<arch>/bitops.h headers
|
||||
* specific are in various arch/<arch>/include/asm/bitops.h headers
|
||||
* and other arch/<arch> specific files.
|
||||
*
|
||||
* See lib/bitmap.c for more details.
|
||||
@ -45,6 +45,8 @@ struct device;
|
||||
* bitmap_copy(dst, src, nbits) *dst = *src
|
||||
* bitmap_and(dst, src1, src2, nbits) *dst = *src1 & *src2
|
||||
* bitmap_or(dst, src1, src2, nbits) *dst = *src1 | *src2
|
||||
* bitmap_weighted_or(dst, src1, src2, nbits) *dst = *src1 | *src2. Returns Hamming Weight of dst
|
||||
* bitmap_weighted_xor(dst, src1, src2, nbits) *dst = *src1 ^ *src2. Returns Hamming Weight of dst
|
||||
* bitmap_xor(dst, src1, src2, nbits) *dst = *src1 ^ *src2
|
||||
* bitmap_andnot(dst, src1, src2, nbits) *dst = *src1 & ~(*src2)
|
||||
* bitmap_complement(dst, src, nbits) *dst = ~(*src)
|
||||
@ -56,6 +58,7 @@ struct device;
|
||||
* bitmap_weight(src, nbits) Hamming Weight: number set bits
|
||||
* bitmap_weight_and(src1, src2, nbits) Hamming Weight of and'ed bitmap
|
||||
* bitmap_weight_andnot(src1, src2, nbits) Hamming Weight of andnot'ed bitmap
|
||||
* bitmap_weight_from(src, start, end) Hamming Weight starting from @start
|
||||
* bitmap_set(dst, pos, nbits) Set specified bit area
|
||||
* bitmap_clear(dst, pos, nbits) Clear specified bit area
|
||||
* bitmap_find_next_zero_area(buf, len, pos, n, mask) Find bit free area
|
||||
@ -165,6 +168,10 @@ bool __bitmap_and(unsigned long *dst, const unsigned long *bitmap1,
|
||||
const unsigned long *bitmap2, unsigned int nbits);
|
||||
void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1,
|
||||
const unsigned long *bitmap2, unsigned int nbits);
|
||||
unsigned int __bitmap_weighted_or(unsigned long *dst, const unsigned long *bitmap1,
|
||||
const unsigned long *bitmap2, unsigned int nbits);
|
||||
unsigned int __bitmap_weighted_xor(unsigned long *dst, const unsigned long *bitmap1,
|
||||
const unsigned long *bitmap2, unsigned int nbits);
|
||||
void __bitmap_xor(unsigned long *dst, const unsigned long *bitmap1,
|
||||
const unsigned long *bitmap2, unsigned int nbits);
|
||||
bool __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1,
|
||||
@ -337,6 +344,30 @@ void bitmap_or(unsigned long *dst, const unsigned long *src1,
|
||||
__bitmap_or(dst, src1, src2, nbits);
|
||||
}
|
||||
|
||||
static __always_inline
|
||||
unsigned int bitmap_weighted_or(unsigned long *dst, const unsigned long *src1,
|
||||
const unsigned long *src2, unsigned int nbits)
|
||||
{
|
||||
if (small_const_nbits(nbits)) {
|
||||
*dst = *src1 | *src2;
|
||||
return hweight_long(*dst & BITMAP_LAST_WORD_MASK(nbits));
|
||||
} else {
|
||||
return __bitmap_weighted_or(dst, src1, src2, nbits);
|
||||
}
|
||||
}
|
||||
|
||||
static __always_inline
|
||||
unsigned int bitmap_weighted_xor(unsigned long *dst, const unsigned long *src1,
|
||||
const unsigned long *src2, unsigned int nbits)
|
||||
{
|
||||
if (small_const_nbits(nbits)) {
|
||||
*dst = *src1 ^ *src2;
|
||||
return hweight_long(*dst & BITMAP_LAST_WORD_MASK(nbits));
|
||||
} else {
|
||||
return __bitmap_weighted_xor(dst, src1, src2, nbits);
|
||||
}
|
||||
}
|
||||
|
||||
static __always_inline
|
||||
void bitmap_xor(unsigned long *dst, const unsigned long *src1,
|
||||
const unsigned long *src2, unsigned int nbits)
|
||||
@ -464,6 +495,38 @@ unsigned long bitmap_weight_andnot(const unsigned long *src1,
|
||||
return __bitmap_weight_andnot(src1, src2, nbits);
|
||||
}
|
||||
|
||||
/**
|
||||
* bitmap_weight_from - Hamming weight for a memory region
|
||||
* @bitmap: The base address
|
||||
* @start: The bitnumber to starts weighting
|
||||
* @end: the bitmap size in bits
|
||||
*
|
||||
* Returns the number of set bits in the region. If @start >= @end,
|
||||
* return >= end.
|
||||
*/
|
||||
static __always_inline
|
||||
unsigned long bitmap_weight_from(const unsigned long *bitmap,
|
||||
unsigned int start, unsigned int end)
|
||||
{
|
||||
unsigned long w;
|
||||
|
||||
if (unlikely(start >= end))
|
||||
return end;
|
||||
|
||||
if (small_const_nbits(end))
|
||||
return hweight_long(*bitmap & GENMASK(end - 1, start));
|
||||
|
||||
bitmap += start / BITS_PER_LONG;
|
||||
/* Opencode round_down() to not include math.h */
|
||||
end -= start & ~(BITS_PER_LONG - 1);
|
||||
start %= BITS_PER_LONG;
|
||||
w = bitmap_weight(bitmap, end);
|
||||
if (start)
|
||||
w -= hweight_long(*bitmap & BITMAP_LAST_WORD_MASK(start));
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
static __always_inline
|
||||
void bitmap_set(unsigned long *map, unsigned int start, unsigned int nbits)
|
||||
{
|
||||
@ -560,9 +623,9 @@ void bitmap_replace(unsigned long *dst,
|
||||
* ...0..11...0..10
|
||||
* dst: 0000001100000010
|
||||
*
|
||||
* A relationship exists between bitmap_scatter() and bitmap_gather().
|
||||
* A relationship exists between bitmap_scatter() and bitmap_gather(). See
|
||||
* bitmap_gather() for the bitmap gather detailed operations. TL;DR:
|
||||
* bitmap_gather() can be seen as the 'reverse' bitmap_scatter() operation.
|
||||
* See bitmap_scatter() for details related to this relationship.
|
||||
*/
|
||||
static __always_inline
|
||||
void bitmap_scatter(unsigned long *dst, const unsigned long *src,
|
||||
@ -608,7 +671,9 @@ void bitmap_scatter(unsigned long *dst, const unsigned long *src,
|
||||
* dst: 0000000000011010
|
||||
*
|
||||
* A relationship exists between bitmap_gather() and bitmap_scatter(). See
|
||||
* bitmap_scatter() for the bitmap scatter detailed operations.
|
||||
* bitmap_scatter() for the bitmap scatter detailed operations. TL;DR:
|
||||
* bitmap_scatter() can be seen as the 'reverse' bitmap_gather() operation.
|
||||
*
|
||||
* Suppose scattered computed using bitmap_scatter(scattered, src, mask, n).
|
||||
* The operation bitmap_gather(result, scattered, mask, n) leads to a result
|
||||
* equal or equivalent to src.
|
||||
|
||||
@ -720,6 +720,22 @@ void cpumask_or(struct cpumask *dstp, const struct cpumask *src1p,
|
||||
cpumask_bits(src2p), small_cpumask_bits);
|
||||
}
|
||||
|
||||
/**
|
||||
* cpumask_weighted_or - *dstp = *src1p | *src2p and return the weight of the result
|
||||
* @dstp: the cpumask result
|
||||
* @src1p: the first input
|
||||
* @src2p: the second input
|
||||
*
|
||||
* Return: The number of bits set in the resulting cpumask @dstp
|
||||
*/
|
||||
static __always_inline
|
||||
unsigned int cpumask_weighted_or(struct cpumask *dstp, const struct cpumask *src1p,
|
||||
const struct cpumask *src2p)
|
||||
{
|
||||
return bitmap_weighted_or(cpumask_bits(dstp), cpumask_bits(src1p),
|
||||
cpumask_bits(src2p), small_cpumask_bits);
|
||||
}
|
||||
|
||||
/**
|
||||
* cpumask_xor - *dstp = *src1p ^ *src2p
|
||||
* @dstp: the cpumask result
|
||||
|
||||
@ -849,6 +849,7 @@ static inline void fsnotify_clear_sb_marks_by_group(struct fsnotify_group *group
|
||||
}
|
||||
extern void fsnotify_get_mark(struct fsnotify_mark *mark);
|
||||
extern void fsnotify_put_mark(struct fsnotify_mark *mark);
|
||||
struct fsnotify_mark *fsnotify_next_mark(struct fsnotify_mark *mark);
|
||||
extern void fsnotify_finish_user_wait(struct fsnotify_iter_info *iter_info);
|
||||
extern bool fsnotify_prepare_user_wait(struct fsnotify_iter_info *iter_info);
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ typedef unsigned long uintptr_t;
|
||||
typedef long intptr_t;
|
||||
|
||||
#ifdef CONFIG_HAVE_UID16
|
||||
/* This is defined by include/asm-{arch}/posix_types.h */
|
||||
/* This is defined by arch/{arch}/include/asm/posix_types.h */
|
||||
typedef __kernel_old_uid_t old_uid_t;
|
||||
typedef __kernel_old_gid_t old_gid_t;
|
||||
#endif /* CONFIG_UID16 */
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md
|
||||
kernel.almalinux,1,AlmaLinux,kernel-core,6.12.0-211.34.1.el10.x86_64,mailto:security@almalinux.org
|
||||
kernel.almalinux,1,AlmaLinux,kernel-core,6.12.0-211.37.1.el10.x86_64,mailto:security@almalinux.org
|
||||
|
||||
15
lib/bitmap.c
15
lib/bitmap.c
@ -69,6 +69,7 @@ bool __bitmap_or_equal(const unsigned long *bitmap1,
|
||||
tmp = (bitmap1[k] | bitmap2[k]) ^ bitmap3[k];
|
||||
return (tmp & BITMAP_LAST_WORD_MASK(bits)) == 0;
|
||||
}
|
||||
EXPORT_SYMBOL(__bitmap_or_equal);
|
||||
|
||||
void __bitmap_complement(unsigned long *dst, const unsigned long *src, unsigned int bits)
|
||||
{
|
||||
@ -355,6 +356,20 @@ unsigned int __bitmap_weight_andnot(const unsigned long *bitmap1,
|
||||
}
|
||||
EXPORT_SYMBOL(__bitmap_weight_andnot);
|
||||
|
||||
unsigned int __bitmap_weighted_or(unsigned long *dst, const unsigned long *bitmap1,
|
||||
const unsigned long *bitmap2, unsigned int bits)
|
||||
{
|
||||
return BITMAP_WEIGHT(({dst[idx] = bitmap1[idx] | bitmap2[idx]; dst[idx]; }), bits);
|
||||
}
|
||||
EXPORT_SYMBOL(__bitmap_weighted_or);
|
||||
|
||||
unsigned int __bitmap_weighted_xor(unsigned long *dst, const unsigned long *bitmap1,
|
||||
const unsigned long *bitmap2, unsigned int bits)
|
||||
{
|
||||
return BITMAP_WEIGHT(({dst[idx] = bitmap1[idx] ^ bitmap2[idx]; dst[idx]; }), bits);
|
||||
}
|
||||
EXPORT_SYMBOL(__bitmap_weighted_xor);
|
||||
|
||||
void __bitmap_set(unsigned long *map, unsigned int start, int len)
|
||||
{
|
||||
unsigned long *p = map + BIT_WORD(start);
|
||||
|
||||
@ -64,13 +64,14 @@ void fprop_global_destroy(struct fprop_global *p)
|
||||
bool fprop_new_period(struct fprop_global *p, int periods)
|
||||
{
|
||||
s64 events = percpu_counter_sum(&p->events);
|
||||
unsigned long flags;
|
||||
|
||||
/*
|
||||
* Don't do anything if there are no events.
|
||||
*/
|
||||
if (events <= 1)
|
||||
return false;
|
||||
preempt_disable_nested();
|
||||
local_irq_save(flags);
|
||||
write_seqcount_begin(&p->sequence);
|
||||
if (periods < 64)
|
||||
events -= events >> periods;
|
||||
@ -78,7 +79,7 @@ bool fprop_new_period(struct fprop_global *p, int periods)
|
||||
percpu_counter_add(&p->events, -events);
|
||||
p->period += periods;
|
||||
write_seqcount_end(&p->sequence);
|
||||
preempt_enable_nested();
|
||||
local_irq_restore(flags);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -100,34 +100,6 @@ __check_eq_pbl(const char *srcfile, unsigned int line,
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool __init
|
||||
__check_eq_u32_array(const char *srcfile, unsigned int line,
|
||||
const u32 *exp_arr, unsigned int exp_len,
|
||||
const u32 *arr, unsigned int len) __used;
|
||||
static bool __init
|
||||
__check_eq_u32_array(const char *srcfile, unsigned int line,
|
||||
const u32 *exp_arr, unsigned int exp_len,
|
||||
const u32 *arr, unsigned int len)
|
||||
{
|
||||
if (exp_len != len) {
|
||||
pr_warn("[%s:%u] array length differ: expected %u, got %u\n",
|
||||
srcfile, line,
|
||||
exp_len, len);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (memcmp(exp_arr, arr, len*sizeof(*arr))) {
|
||||
pr_warn("[%s:%u] array contents differ\n", srcfile, line);
|
||||
print_hex_dump(KERN_WARNING, " exp: ", DUMP_PREFIX_OFFSET,
|
||||
32, 4, exp_arr, exp_len*sizeof(*exp_arr), false);
|
||||
print_hex_dump(KERN_WARNING, " got: ", DUMP_PREFIX_OFFSET,
|
||||
32, 4, arr, len*sizeof(*arr), false);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool __init __check_eq_clump8(const char *srcfile, unsigned int line,
|
||||
const unsigned int offset,
|
||||
const unsigned int size,
|
||||
@ -382,18 +354,22 @@ static void __init test_replace(void)
|
||||
|
||||
static const unsigned long sg_mask[] __initconst = {
|
||||
BITMAP_FROM_U64(0x000000000000035aULL),
|
||||
BITMAP_FROM_U64(0x0000000000000000ULL),
|
||||
};
|
||||
|
||||
static const unsigned long sg_src[] __initconst = {
|
||||
BITMAP_FROM_U64(0x0000000000000667ULL),
|
||||
BITMAP_FROM_U64(0x0000000000000000ULL),
|
||||
};
|
||||
|
||||
static const unsigned long sg_gather_exp[] __initconst = {
|
||||
BITMAP_FROM_U64(0x0000000000000029ULL),
|
||||
BITMAP_FROM_U64(0x0000000000000000ULL),
|
||||
};
|
||||
|
||||
static const unsigned long sg_scatter_exp[] __initconst = {
|
||||
BITMAP_FROM_U64(0x000000000000021aULL),
|
||||
BITMAP_FROM_U64(0x0000000000000000ULL),
|
||||
};
|
||||
|
||||
static void __init test_bitmap_sg(void)
|
||||
@ -407,18 +383,18 @@ static void __init test_bitmap_sg(void)
|
||||
/* Simple gather call */
|
||||
bitmap_zero(bmap_gather, 100);
|
||||
bitmap_gather(bmap_gather, sg_src, sg_mask, nbits);
|
||||
expect_eq_bitmap(sg_gather_exp, bmap_gather, nbits);
|
||||
expect_eq_bitmap(sg_gather_exp, bmap_gather, 100);
|
||||
|
||||
/* Simple scatter call */
|
||||
bitmap_zero(bmap_scatter, 100);
|
||||
bitmap_scatter(bmap_scatter, sg_src, sg_mask, nbits);
|
||||
expect_eq_bitmap(sg_scatter_exp, bmap_scatter, nbits);
|
||||
expect_eq_bitmap(sg_scatter_exp, bmap_scatter, 100);
|
||||
|
||||
/* Scatter/gather relationship */
|
||||
bitmap_zero(bmap_tmp, 100);
|
||||
bitmap_gather(bmap_tmp, bmap_scatter, sg_mask, nbits);
|
||||
bitmap_scatter(bmap_res, bmap_tmp, sg_mask, nbits);
|
||||
expect_eq_bitmap(bmap_scatter, bmap_res, nbits);
|
||||
expect_eq_bitmap(bmap_scatter, bmap_res, 100);
|
||||
}
|
||||
|
||||
#define PARSE_TIME 0x1
|
||||
@ -548,8 +524,7 @@ static void __init test_bitmap_parselist(void)
|
||||
}
|
||||
|
||||
if (ptest.flags & PARSE_TIME)
|
||||
pr_info("parselist: %d: input is '%s' OK, Time: %llu\n",
|
||||
i, ptest.in, time);
|
||||
pr_info("parselist('%s'):\t%llu\n", ptest.in, time);
|
||||
|
||||
#undef ptest
|
||||
}
|
||||
@ -572,22 +547,22 @@ static void __init test_bitmap_printlist(void)
|
||||
goto out;
|
||||
|
||||
time = ktime_get();
|
||||
ret = bitmap_print_to_pagebuf(true, buf, bmap, PAGE_SIZE * 8);
|
||||
ret = scnprintf(buf, PAGE_SIZE, "%*pbl", (int)PAGE_SIZE * 8, bmap);
|
||||
time = ktime_get() - time;
|
||||
|
||||
if (ret != slen + 1) {
|
||||
pr_err("bitmap_print_to_pagebuf: result is %d, expected %d\n", ret, slen);
|
||||
if (ret != slen) {
|
||||
pr_err("scnprintf(\"%%*pbl\"): result is %d, expected %d\n", ret, slen);
|
||||
failed_tests++;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (strncmp(buf, expected, slen)) {
|
||||
pr_err("bitmap_print_to_pagebuf: result is %s, expected %s\n", buf, expected);
|
||||
pr_err("scnprintf(\"%%*pbl\"): result is %s, expected %s\n", buf, expected);
|
||||
failed_tests++;
|
||||
goto out;
|
||||
}
|
||||
|
||||
pr_info("bitmap_print_to_pagebuf: input is '%s', Time: %llu\n", buf, time);
|
||||
pr_info("scnprintf(\"%%*pbl\", '%s'):\t%llu\n", buf, time);
|
||||
out:
|
||||
kfree(buf);
|
||||
kfree(bmap);
|
||||
@ -678,7 +653,7 @@ static void __init test_bitmap_arr32(void)
|
||||
|
||||
memset(arr, 0xa5, sizeof(arr));
|
||||
|
||||
for (nbits = 0; nbits < EXP1_IN_BITS; ++nbits) {
|
||||
for (nbits = 1; nbits < EXP1_IN_BITS; ++nbits) {
|
||||
bitmap_to_arr32(arr, exp1, nbits);
|
||||
bitmap_from_arr32(bmap2, arr, nbits);
|
||||
expect_eq_bitmap(bmap2, exp1, nbits);
|
||||
@ -706,7 +681,7 @@ static void __init test_bitmap_arr64(void)
|
||||
|
||||
memset(arr, 0xa5, sizeof(arr));
|
||||
|
||||
for (nbits = 0; nbits < EXP1_IN_BITS; ++nbits) {
|
||||
for (nbits = 1; nbits < EXP1_IN_BITS; ++nbits) {
|
||||
memset(bmap2, 0xff, sizeof(arr));
|
||||
bitmap_to_arr64(arr, exp1, nbits);
|
||||
bitmap_from_arr64(bmap2, arr, nbits);
|
||||
@ -739,7 +714,7 @@ static void noinline __init test_mem_optimisations(void)
|
||||
unsigned int start, nbits;
|
||||
|
||||
for (start = 0; start < 1024; start += 8) {
|
||||
for (nbits = 0; nbits < 1024 - start; nbits += 8) {
|
||||
for (nbits = 1; nbits < 1024 - start; nbits += 8) {
|
||||
memset(bmap1, 0x5a, sizeof(bmap1));
|
||||
memset(bmap2, 0x5a, sizeof(bmap2));
|
||||
|
||||
@ -879,6 +854,50 @@ static void __init test_for_each_set_bit_from(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void __init test_bitmap_weight(void)
|
||||
{
|
||||
unsigned int bit, w1, w2, w;
|
||||
DECLARE_BITMAP(b, 30);
|
||||
DECLARE_BITMAP(b1, 128);
|
||||
|
||||
bitmap_parselist("all:1/2", b, 30);
|
||||
|
||||
/* Test inline implementation */
|
||||
w = bitmap_weight(b, 30);
|
||||
w1 = bitmap_weight(b, 15);
|
||||
w2 = bitmap_weight_from(b, 15, 30);
|
||||
|
||||
expect_eq_uint(15, w);
|
||||
expect_eq_uint(8, w1);
|
||||
expect_eq_uint(7, w2);
|
||||
|
||||
/* Test outline implementation */
|
||||
w = bitmap_weight(exp1, EXP1_IN_BITS);
|
||||
for (bit = 1; bit < EXP1_IN_BITS; bit++) {
|
||||
w1 = bitmap_weight(exp1, bit);
|
||||
w2 = bitmap_weight_from(exp1, bit, EXP1_IN_BITS);
|
||||
expect_eq_uint(w1 + w2, w);
|
||||
}
|
||||
|
||||
/* Test out-of-range */
|
||||
w = bitmap_weight_from(b, 31, 30);
|
||||
expect_eq_uint(0, !!(w < 30));
|
||||
|
||||
/*
|
||||
* Test bitmap_weight() for correctness in case of some bits set between
|
||||
* nbits and end of the last word.
|
||||
*/
|
||||
bitmap_fill(b1, 128);
|
||||
|
||||
/* Inline */
|
||||
expect_eq_uint(30, bitmap_weight(b1, 30));
|
||||
expect_eq_uint(100, bitmap_weight(b1, 100));
|
||||
|
||||
/* Outline */
|
||||
for (int i = 1; i < 128; i++)
|
||||
expect_eq_uint(i, bitmap_weight(b1, i));
|
||||
}
|
||||
|
||||
static void __init test_for_each_clear_bit(void)
|
||||
{
|
||||
DECLARE_BITMAP(orig, 500);
|
||||
@ -1423,7 +1442,7 @@ static void __init test_bitmap_read_perf(void)
|
||||
}
|
||||
}
|
||||
time = ktime_get() - time;
|
||||
pr_info("Time spent in %s:\t%llu\n", __func__, time);
|
||||
pr_info("%s:\t\t%llu\n", __func__, time);
|
||||
}
|
||||
|
||||
static void __init test_bitmap_write_perf(void)
|
||||
@ -1445,7 +1464,63 @@ static void __init test_bitmap_write_perf(void)
|
||||
}
|
||||
}
|
||||
time = ktime_get() - time;
|
||||
pr_info("Time spent in %s:\t%llu\n", __func__, time);
|
||||
pr_info("%s:\t\t%llu\n", __func__, time);
|
||||
}
|
||||
|
||||
/*
|
||||
* nbits == 0 is most commonly not a valid case. Bitmap users should revisit
|
||||
* the caller logic. Bitmap API doesn't provide any guarantees on returned
|
||||
* value. The pointers are not dereferenced. The return value is intentionally
|
||||
* ignored.
|
||||
*/
|
||||
static void __init test_zero_nbits(void)
|
||||
{
|
||||
static volatile __always_used unsigned long ret __initdata;
|
||||
|
||||
bitmap_clear(NULL, 0, 0);
|
||||
bitmap_complement(NULL, NULL, 0);
|
||||
bitmap_copy(NULL, NULL, 0);
|
||||
bitmap_copy_clear_tail(NULL, NULL, 0);
|
||||
bitmap_fill(NULL, 0);
|
||||
bitmap_from_arr32(NULL, NULL, 0);
|
||||
bitmap_from_arr64(NULL, NULL, 0);
|
||||
bitmap_or(NULL, NULL, NULL, 0);
|
||||
bitmap_set(NULL, 0, 0);
|
||||
bitmap_shift_left(NULL, NULL, 0, 0);
|
||||
bitmap_shift_right(NULL, NULL, 0, 0);
|
||||
bitmap_to_arr32(NULL, NULL, 0);
|
||||
bitmap_to_arr64(NULL, NULL, 0);
|
||||
bitmap_write(NULL, 0, 0, 0);
|
||||
bitmap_xor(NULL, NULL, NULL, 0);
|
||||
bitmap_zero(NULL, 0);
|
||||
|
||||
ret = bitmap_and(NULL, NULL, NULL, 0);
|
||||
ret = bitmap_empty(NULL, 0);
|
||||
ret = bitmap_equal(NULL, NULL, 0);
|
||||
ret = bitmap_full(NULL, 0);
|
||||
ret = bitmap_or_equal(NULL, NULL, NULL, 0);
|
||||
ret = bitmap_read(NULL, 0, 0);
|
||||
ret = bitmap_subset(NULL, NULL, 0);
|
||||
ret = bitmap_weight(NULL, 0);
|
||||
ret = bitmap_weight_and(NULL, NULL, 0);
|
||||
ret = bitmap_weight_andnot(NULL, NULL, 0);
|
||||
ret = bitmap_weight_from(NULL, 0, 0);
|
||||
ret = bitmap_weighted_or(NULL, NULL, NULL, 0);
|
||||
|
||||
ret = find_first_and_and_bit(NULL, NULL, NULL, 0);
|
||||
ret = find_first_and_bit(NULL, NULL, 0);
|
||||
ret = find_first_andnot_bit(NULL, NULL, 0);
|
||||
ret = find_first_bit(NULL, 0);
|
||||
ret = find_first_zero_bit(NULL, 0);
|
||||
ret = find_last_bit(NULL, 0);
|
||||
ret = find_next_and_bit(NULL, NULL, 0, 0);
|
||||
ret = find_next_andnot_bit(NULL, NULL, 0, 0);
|
||||
ret = find_next_bit(NULL, 0, 0);
|
||||
ret = find_next_clump8(NULL, NULL, 0, 0);
|
||||
ret = find_next_zero_bit(NULL, 0, 0);
|
||||
ret = find_nth_and_bit(NULL, NULL, 0, 0);
|
||||
ret = find_nth_bit(NULL, 0, 0);
|
||||
ret = find_random_bit(NULL, 0);
|
||||
}
|
||||
|
||||
#undef TEST_BIT_LEN
|
||||
@ -1469,7 +1544,9 @@ static void __init selftest(void)
|
||||
test_bitmap_const_eval();
|
||||
test_bitmap_read_write();
|
||||
test_bitmap_read_perf();
|
||||
test_bitmap_weight();
|
||||
test_bitmap_write_perf();
|
||||
test_zero_nbits();
|
||||
|
||||
test_find_nth_bit();
|
||||
test_for_each_set_bit();
|
||||
|
||||
@ -5380,7 +5380,13 @@ static inline int l2cap_ecred_reconf_rsp(struct l2cap_conn *conn,
|
||||
if (chan->ident != cmd->ident)
|
||||
continue;
|
||||
|
||||
l2cap_chan_hold(chan);
|
||||
l2cap_chan_lock(chan);
|
||||
|
||||
l2cap_chan_del(chan, ECONNRESET);
|
||||
|
||||
l2cap_chan_unlock(chan);
|
||||
l2cap_chan_put(chan);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@ -56,6 +56,7 @@
|
||||
#include <linux/can.h>
|
||||
#include <linux/can/core.h>
|
||||
#include <linux/can/skb.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/can/bcm.h>
|
||||
#include <linux/slab.h>
|
||||
#include <net/sock.h>
|
||||
@ -90,6 +91,8 @@ MODULE_ALIAS("can-proto-2");
|
||||
|
||||
#define BCM_MIN_NAMELEN CAN_REQUIRED_SIZE(struct sockaddr_can, can_ifindex)
|
||||
|
||||
static struct workqueue_struct *bcm_wq;
|
||||
|
||||
/*
|
||||
* easy access to the first 64 bit of can(fd)_frame payload. cp->data is
|
||||
* 64 bit aligned so the offset has to be multiples of 8 which is ensured
|
||||
@ -103,6 +106,7 @@ static inline u64 get_u64(const struct canfd_frame *cp, int offset)
|
||||
struct bcm_op {
|
||||
struct list_head list;
|
||||
struct rcu_head rcu;
|
||||
struct work_struct work;
|
||||
int ifindex;
|
||||
canid_t can_id;
|
||||
u32 flags;
|
||||
@ -768,9 +772,12 @@ static struct bcm_op *bcm_find_op(struct list_head *ops,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void bcm_free_op_rcu(struct rcu_head *rcu_head)
|
||||
static void bcm_free_op_work(struct work_struct *work)
|
||||
{
|
||||
struct bcm_op *op = container_of(rcu_head, struct bcm_op, rcu);
|
||||
struct bcm_op *op = container_of(work, struct bcm_op, work);
|
||||
|
||||
hrtimer_cancel(&op->timer);
|
||||
hrtimer_cancel(&op->thrtimer);
|
||||
|
||||
if ((op->frames) && (op->frames != &op->sframe))
|
||||
kfree(op->frames);
|
||||
@ -778,9 +785,23 @@ static void bcm_free_op_rcu(struct rcu_head *rcu_head)
|
||||
if ((op->last_frames) && (op->last_frames != &op->last_sframe))
|
||||
kfree(op->last_frames);
|
||||
|
||||
/* the last possible access to op->timer/op->thrtimer has now
|
||||
* happened above via hrtimer_cancel() - op->sk is no longer
|
||||
* needed by any pending timer callback, so drop our reference
|
||||
*/
|
||||
sock_put(op->sk);
|
||||
|
||||
kfree(op);
|
||||
}
|
||||
|
||||
static void bcm_free_op_rcu(struct rcu_head *rcu_head)
|
||||
{
|
||||
struct bcm_op *op = container_of(rcu_head, struct bcm_op, rcu);
|
||||
|
||||
INIT_WORK(&op->work, bcm_free_op_work);
|
||||
queue_work(bcm_wq, &op->work);
|
||||
}
|
||||
|
||||
static void bcm_remove_op(struct bcm_op *op)
|
||||
{
|
||||
hrtimer_cancel(&op->timer);
|
||||
@ -1009,6 +1030,7 @@ static int bcm_tx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg,
|
||||
|
||||
/* bcm_can_tx / bcm_tx_timeout_handler needs this */
|
||||
op->sk = sk;
|
||||
sock_hold(sk);
|
||||
op->ifindex = ifindex;
|
||||
|
||||
/* initialize uninitialized (kzalloc) structure */
|
||||
@ -1186,6 +1208,7 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg,
|
||||
|
||||
/* bcm_can_tx / bcm_tx_timeout_handler needs this */
|
||||
op->sk = sk;
|
||||
sock_hold(sk);
|
||||
op->ifindex = ifindex;
|
||||
|
||||
/* ifindex for timeout events w/o previous frame reception */
|
||||
@ -1799,11 +1822,15 @@ static int __init bcm_module_init(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
bcm_wq = alloc_workqueue("can-bcm-wq", WQ_UNBOUND, 0);
|
||||
if (!bcm_wq)
|
||||
return -ENOMEM;
|
||||
|
||||
pr_info("can: broadcast manager protocol\n");
|
||||
|
||||
err = register_pernet_subsys(&canbcm_pernet_ops);
|
||||
if (err)
|
||||
return err;
|
||||
goto register_pernet_failed;
|
||||
|
||||
err = register_netdevice_notifier(&canbcm_notifier);
|
||||
if (err)
|
||||
@ -1821,6 +1848,8 @@ register_proto_failed:
|
||||
unregister_netdevice_notifier(&canbcm_notifier);
|
||||
register_notifier_failed:
|
||||
unregister_pernet_subsys(&canbcm_pernet_ops);
|
||||
register_pernet_failed:
|
||||
destroy_workqueue(bcm_wq);
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -1829,6 +1858,8 @@ static void __exit bcm_module_exit(void)
|
||||
can_proto_unregister(&bcm_can_proto);
|
||||
unregister_netdevice_notifier(&canbcm_notifier);
|
||||
unregister_pernet_subsys(&canbcm_pernet_ops);
|
||||
rcu_barrier();
|
||||
destroy_workqueue(bcm_wq);
|
||||
}
|
||||
|
||||
module_init(bcm_module_init);
|
||||
|
||||
@ -751,12 +751,12 @@ int __xfrm_state_delete(struct xfrm_state *x)
|
||||
x->km.state = XFRM_STATE_DEAD;
|
||||
spin_lock(&net->xfrm.xfrm_state_lock);
|
||||
list_del(&x->km.all);
|
||||
hlist_del_rcu(&x->bydst);
|
||||
hlist_del_rcu(&x->bysrc);
|
||||
if (x->km.seq)
|
||||
hlist_del_rcu(&x->byseq);
|
||||
if (x->id.spi)
|
||||
hlist_del_rcu(&x->byspi);
|
||||
hlist_del_init_rcu(&x->bydst);
|
||||
hlist_del_init_rcu(&x->bysrc);
|
||||
if (!hlist_unhashed(&x->byseq))
|
||||
hlist_del_init_rcu(&x->byseq);
|
||||
if (!hlist_unhashed(&x->byspi))
|
||||
hlist_del_init_rcu(&x->byspi);
|
||||
net->xfrm.state_num--;
|
||||
xfrm_nat_keepalive_state_updated(x);
|
||||
spin_unlock(&net->xfrm.xfrm_state_lock);
|
||||
|
||||
@ -18,4 +18,4 @@ INCLUDE_AUTOMOTIVE_FILES ?= 0
|
||||
# use the following to define packaging variables. When creating a new
|
||||
# automotive kernel, set the package name and the disttag here.
|
||||
AUTOMOTIVE_PKG_NAME ?= kernel-automotive
|
||||
AUTOMOTIVE_PKG_DIST ?= .el$(RHEL_MAJOR)iv
|
||||
AUTOMOTIVE_PKG_DIST ?= .el10_2iv
|
||||
|
||||
@ -1 +1 @@
|
||||
CONFIG_PT_RECLAIM=y
|
||||
# CONFIG_PT_RECLAIM is not set
|
||||
|
||||
@ -0,0 +1 @@
|
||||
CONFIG_ARM64_ERRATUM_4118414=y
|
||||
@ -0,0 +1 @@
|
||||
# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set
|
||||
@ -0,0 +1 @@
|
||||
# CONFIG_SOFT_WATCHDOG_PRETIMEOUT is not set
|
||||
@ -0,0 +1 @@
|
||||
CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT=y
|
||||
@ -0,0 +1 @@
|
||||
# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP is not set
|
||||
@ -0,0 +1 @@
|
||||
CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC=y
|
||||
@ -0,0 +1 @@
|
||||
CONFIG_WATCHDOG_PRETIMEOUT_GOV=y
|
||||
@ -0,0 +1 @@
|
||||
# CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP is not set
|
||||
@ -0,0 +1 @@
|
||||
CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=y
|
||||
@ -1,3 +1,504 @@
|
||||
* Tue Jul 21 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.37.1.el10_2]
|
||||
- can: bcm: defer rx_op deallocation to workqueue to fix thrtimer UAF (CKI Backport Bot) [RHEL-212681]
|
||||
- fanotify: fix false positive on permission events (CKI Backport Bot) [RHEL-180076] {CVE-2026-46150}
|
||||
Resolves: RHEL-180076, RHEL-212681
|
||||
|
||||
* Mon Jul 20 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.36.1.el10_2]
|
||||
- ice: fix double-free of tx_buf skb (Jakub Ramaseuski) [RHEL-191324 RHEL-192200] {CVE-2026-53009}
|
||||
- ice: fix double free in ice_sf_eth_activate() error path (Jakub Ramaseuski) [RHEL-191324] {CVE-2026-46162}
|
||||
- ice: update PCS latency settings for E825 10G/25Gb modes (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: fix 'adjust' timer programming for E830 devices (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: use bitmap_empty() in ice_vf_has_no_qs_ena (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: use bitmap_weighted_xor() in ice_find_free_recp_res_idx() (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: Make name member of struct ice_cgu_pin_desc const (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: fix PTP timestamping broken by SyncE code on E825C (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: ptp: don't WARN when controlling PF is unavailable (Jakub Ramaseuski) [RHEL-191324] {CVE-2026-43346}
|
||||
- ice: use ice_update_eth_stats() for representor stats (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: fix inverted ready check for VF representors (Jakub Ramaseuski) [RHEL-191324]
|
||||
- drivers: net: ice: fix devlink parameters get without irdma (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: fix rxq info registering in mbuf packets (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: fix retry for AQ command 0x06EE (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: reintroduce retry mechanism for indirect AQ (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: fix adding AQ LLDP filter for VF (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: recap the VSI and QoS info after rebuild (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: fix missing TX timestamps interrupts on E825 devices (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: stop counting UDP csum mismatch as rx_errors (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: reshuffle and group Rx and Tx queue fields by cachelines (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: convert all ring stats to u64_stats_t (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: shorten ring stat names and add accessors (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: use u64_stats API to access pkts/bytes in dim sample (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: remove ice_q_stats struct and use struct_group (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: pass pointer to ice_fetch_u64_stats_per_ring (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: unify PHY FW loading status handler for E800 devices (Jakub Ramaseuski) [RHEL-191324]
|
||||
- ice: Fix NULL pointer dereference in ice_vsi_set_napi_queues (Jakub Ramaseuski) [RHEL-191324] {CVE-2026-23166}
|
||||
- bitmap: introduce bitmap_weighted_xor() (Jakub Ramaseuski) [RHEL-191324]
|
||||
- bitmap: add test_zero_nbits() (Jakub Ramaseuski) [RHEL-191324]
|
||||
- bitmap: exclude nbits == 0 cases from bitmap test (Jakub Ramaseuski) [RHEL-191324]
|
||||
- bitmap: test bitmap_weight() for more (Jakub Ramaseuski) [RHEL-191324]
|
||||
- bitmap: add bitmap_weight_from() (Jakub Ramaseuski) [RHEL-191324]
|
||||
- bitmap: align test_bitmap output (Jakub Ramaseuski) [RHEL-191324]
|
||||
- bitmap: switch test to scnprintf("%%*pbl") (Jakub Ramaseuski) [RHEL-191324]
|
||||
- bitmap: Add test for out-of-boundary modifications for scatter & gather (Jakub Ramaseuski) [RHEL-191324]
|
||||
- cpumask: Introduce cpumask_weighted_or() (Jakub Ramaseuski) [RHEL-191324]
|
||||
- bitmap: Align documentation between bitmap_gather() and bitmap_scatter() (Jakub Ramaseuski) [RHEL-191324]
|
||||
- bitmap: remove _check_eq_u32_array (Jakub Ramaseuski) [RHEL-191324]
|
||||
- include: update references to include/asm-<arch> (Jakub Ramaseuski) [RHEL-191324]
|
||||
- KEYS: trusted: Fix a memory leak in tpm2_load_cmd (CKI Backport Bot) [RHEL-189604] {CVE-2025-71147}
|
||||
- crypto: af_alg - zero initialize memory allocated via sock_kmalloc (CKI Backport Bot) [RHEL-189576] {CVE-2025-71113}
|
||||
- drm/xe: Fix error cleanup in xe_exec_queue_create_ioctl() (CKI Backport Bot) [RHEL-188644] {CVE-2026-52976}
|
||||
- xfrm: defensively unhash xfrm_state lists in __xfrm_state_delete (Sabrina Dubroca) [RHEL-180167] {CVE-2026-46116}
|
||||
Resolves: RHEL-180167, RHEL-188644, RHEL-189576, RHEL-189604, RHEL-191324, RHEL-192200
|
||||
|
||||
* Thu Jul 16 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.35.1.el10_2]
|
||||
- drm/xe/dma-buf: fix UAF with retry loop (Karol Herbst) [RHEL-192232] {CVE-2026-52950}
|
||||
- drm/xe/dma-buf: handle empty bo and UAF races (Karol Herbst) [RHEL-192232]
|
||||
- drm/xe: Fix bo leak in xe_dma_buf_init_obj() on allocation failure (Karol Herbst) [RHEL-192232]
|
||||
- drm/xe: Fix dma-buf attachment leak in xe_gem_prime_import() (Karol Herbst) [RHEL-192232]
|
||||
- nfsd: cancel async COPY operations when admin revokes filesystem state (Olga Kornievskaia) [RHEL-173103]
|
||||
- nfsd: use correct loop termination in nfsd4_revoke_states() (Olga Kornievskaia) [RHEL-173103]
|
||||
- nfsd: check that server is running in unlock_filesystem (Olga Kornievskaia) [RHEL-173103]
|
||||
- drm/gem: Try to fix change_handle ioctl, attempt 4 (Jocelyn Falempe) [RHEL-179887]
|
||||
- drm/gem: fix race between change_handle and handle_delete (Jocelyn Falempe) [RHEL-179887]
|
||||
- drm: Replace old pointer to new idr (Jocelyn Falempe) [RHEL-179887]
|
||||
- drm: Set old handle to NULL before prime swap in change_handle (Jocelyn Falempe) [RHEL-179887] {CVE-2026-46215}
|
||||
- drm: Do not allow userspace to trigger kernel warnings in drm_gem_change_handle_ioctl() (Jocelyn Falempe) [RHEL-179887]
|
||||
- cxl/port: Fix use after free of parent_port in cxl_detach_ep() (Myron Stowe) [RHEL-180697] {CVE-2026-31530}
|
||||
- flex_proportions: make fprop_new_period() hardirq safe (CKI Backport Bot) [RHEL-189658] {CVE-2026-23168}
|
||||
- Bluetooth: l2cap: Add missing chan lock in l2cap_ecred_reconf_rsp (CKI Backport Bot) [RHEL-188331] {CVE-2026-53071}
|
||||
- redhat/configs: disable CONFIG_PT_RECLAIM (Luiz Capitulino) [RHEL-186311]
|
||||
- libperf build: Always place libperf includes first (Michael Petlan) [RHEL-183975]
|
||||
Resolves: RHEL-173103, RHEL-179887, RHEL-180697, RHEL-183975, RHEL-186311, RHEL-188331, RHEL-189658, RHEL-192232
|
||||
|
||||
* Tue Jul 14 2026 Jan Stancek <jstancek@redhat.com> [6.12.0-211.34.1.el10_2]
|
||||
- crypto: ccp - copy IV using skcipher ivsize (CKI Backport Bot) [RHEL-188463] {CVE-2026-53016}
|
||||
- xfs: resample the data fork mapping after cycling ILOCK (Carlos Maiolino) [RHEL-193945]
|
||||
- xfrm: esp: restore combined single-frag length gate (CKI Backport Bot) [RHEL-178326]
|
||||
Resolves: RHEL-178326, RHEL-188463, RHEL-193945
|
||||
|
||||
* Thu Jul 09 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.33.1.el10_2]
|
||||
- futex/requeue: Revert "Prevent NULL pointer dereference in remove_waiter() on self-deadlock"" (CKI Backport Bot) [RHEL-193250] {CVE-2026-53166}
|
||||
- futex/requeue: Prevent NULL pointer dereference in remove_waiter() on self-deadlock (CKI Backport Bot) [RHEL-193250] {CVE-2026-43499}
|
||||
- locking/rtmutex: Skip remove_waiter() when waiter is not enqueued (CKI Backport Bot) [RHEL-193153] {CVE-2026-43499}
|
||||
- rtmutex: Use waiter::task instead of current in remove_waiter() (CKI Backport Bot) [RHEL-193153] {CVE-2026-43499}
|
||||
- md/bitmap: fix GPF in write_page caused by resize race (Nigel Croxon) [RHEL-174092] {CVE-2026-43163}
|
||||
Resolves: RHEL-174092, RHEL-193153, RHEL-193250
|
||||
|
||||
* Tue Jul 07 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.32.1.el10_2]
|
||||
- KVM: x86: Fix shadow paging use-after-free due to unexpected role (Paolo Bonzini) [RHEL-192407] {CVE-2026-53359}
|
||||
- KVM: x86: Fix shadow paging use-after-free due to unexpected GFN (CKI Backport Bot) [RHEL-186698] {CVE-2026-46113}
|
||||
- net/sched: ets: Always remove class from active list before deleting in ets_qdisc_change (CKI Backport Bot) [RHEL-183007] {CVE-2025-71066}
|
||||
- sctp: revalidate list cursor after sctp_sendmsg_to_asoc() in SCTP_SENDALL (CKI Backport Bot) [RHEL-179854] {CVE-2026-46227}
|
||||
Resolves: RHEL-179854, RHEL-183007, RHEL-186698, RHEL-192407
|
||||
|
||||
* Mon Jul 06 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.31.1.el10_2]
|
||||
- eventpoll: refresh epi_fget() / ep_remove_file() comments (Ian Kent) [RHEL-180776]
|
||||
- eventpoll: Fix integer overflow in ep_loop_check_proc() (Ian Kent) [RHEL-180776]
|
||||
- eventpoll: drop vestigial epi->dying flag (Ian Kent) [RHEL-180776]
|
||||
- eventpoll: Fix semi-unbounded recursion (Ian Kent) [RHEL-180776] {CVE-2025-38614}
|
||||
- eventpoll: drop dead bool return from ep_remove_epi() (Ian Kent) [RHEL-180776]
|
||||
- eventpoll: refresh eventpoll_release() fast-path comment (Ian Kent) [RHEL-180776]
|
||||
- eventpoll: move f_lock acquisition into ep_remove_file() (Ian Kent) [RHEL-180776]
|
||||
- eventpoll: fix ep_remove struct eventpoll / struct file UAF (Ian Kent) [RHEL-180776] {CVE-2026-46242}
|
||||
- eventpoll: drop vestigial __ prefix from ep_remove_{file,epi}() (Ian Kent) [RHEL-180776]
|
||||
- eventpoll: move epi_fget() up (Ian Kent) [RHEL-180776]
|
||||
- eventpoll: rename ep_remove_safe() back to ep_remove() (Ian Kent) [RHEL-180776]
|
||||
- eventpoll: kill __ep_remove() (Ian Kent) [RHEL-180776]
|
||||
- eventpoll: split __ep_remove() (Ian Kent) [RHEL-180776]
|
||||
- eventpoll: use hlist_is_singular_node() in __ep_remove() (Ian Kent) [RHEL-180776]
|
||||
- eventpoll: defer struct eventpoll free to RCU grace period (Ian Kent) [RHEL-173832] {CVE-2026-43074}
|
||||
- epoll: annotate racy check (Ian Kent) [RHEL-180776]
|
||||
- smb/client: fix out-of-bounds read in smb2_compound_op() (Paulo Alcantara) [RHEL-180048] {CVE-2026-46155}
|
||||
- smb: client: fix off-by-8 bounds check in check_wsl_eas() (Paulo Alcantara) [RHEL-180048]
|
||||
- tg3: Fix race for querying speed/duplex (CKI Backport Bot) [RHEL-182770]
|
||||
- procfs: fix missing RCU protection when reading real_parent in do_task_stat() (CKI Backport Bot) [RHEL-181902] {CVE-2026-46259}
|
||||
- net/ipv6: ioam6: prevent schema length wraparound in trace fill (Antoine Tenart) [RHEL-174786] {CVE-2026-43341}
|
||||
- net/mana: Null service_wq on setup error to prevent double destroy (CKI Backport Bot) [RHEL-180277] {CVE-2026-43276}
|
||||
- net: mana: Fix double destroy_workqueue on service rescan PCI path (CKI Backport Bot) [RHEL-180277] {CVE-2026-43276}
|
||||
- net: page_pool: avoid false positive warning if NAPI was never added (Ivan Vecera) [RHEL-162140]
|
||||
Resolves: RHEL-162140, RHEL-173832, RHEL-174786, RHEL-180048, RHEL-180277, RHEL-180776, RHEL-181902, RHEL-182770
|
||||
|
||||
* Wed Jul 01 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.30.1.el10_2]
|
||||
- ipv6: account for fraggap on the paged allocation path (Sabrina Dubroca) [RHEL-191349]
|
||||
- ipv4: account for fraggap on the paged allocation path (Sabrina Dubroca) [RHEL-191349]
|
||||
- fs/smb/client: fix out-of-bounds read in cifs_sanitize_prepath (CKI Backport Bot) [RHEL-189491] {CVE-2026-43112}
|
||||
- Enable workaround for ARM64 ERRATUM 4118414 (Mark Salter) [RHEL-183592] {CVE-2025-10263}
|
||||
- arm64: errata: Mitigate TLBI errata on Microsoft Azure Cobalt 100 CPU (Mark Salter) [RHEL-183592] {CVE-2025-10263}
|
||||
- arm64: errata: Mitigate TLBI errata on NVIDIA Olympus CPU (Mark Salter) [RHEL-183592] {CVE-2025-10263}
|
||||
- arm64: errata: Mitigate TLBI errata on various Arm CPUs (Mark Salter) [RHEL-183592] {CVE-2025-10263}
|
||||
- arm64: cputype: Add C1-Ultra definitions (Mark Salter) [RHEL-183592] {CVE-2025-10263}
|
||||
- arm64: cputype: Add C1-Premium definitions (Mark Salter) [RHEL-183592] {CVE-2025-10263}
|
||||
- arm64: cputype: Add C1-Pro definitions (Mark Salter) [RHEL-183592] {CVE-2025-10263}
|
||||
- crypto: krb5 - filter out async aead implementations at alloc (CKI Backport Bot) [RHEL-182537]
|
||||
- crypto: krb5enc - fix async decrypt skipping hash verification (CKI Backport Bot) [RHEL-182537]
|
||||
- crypto: krb5enc - fix sleepable flag handling in encrypt dispatch (CKI Backport Bot) [RHEL-182537]
|
||||
- crypto: testmgr - allow authenc(hmac(sha{256,384}),cts(cbc(aes))) in FIPS mode (CKI Backport Bot) [RHEL-182537]
|
||||
- ASoC: SDCA: fix NULL pointer dereference in sdca_dev_unregister_functions (CKI Backport Bot) [RHEL-185110]
|
||||
- KVM: arm64: vgic-its: Drop the translation cache reference only for the erased entry (CKI Backport Bot) [RHEL-183965] {CVE-2026-46316}
|
||||
- netfilter: nft_inner: Fix IPv6 inner_thoff desync (CKI Backport Bot) [RHEL-181936] {CVE-2026-46244}
|
||||
- drm/gem: Fix inconsistent plane dimension calculation in drm_gem_fb_init_with_funcs() (CKI Backport Bot) [RHEL-179912] {CVE-2026-46209}
|
||||
- rxrpc: Fix rxrpc_input_call_event() to only unshare DATA packets (CKI Backport Bot) [RHEL-179566] {CVE-2026-45998}
|
||||
- rxrpc: Fix potential UAF after skb_unshare() failure (CKI Backport Bot) [RHEL-179566] {CVE-2026-45998}
|
||||
Resolves: RHEL-179566, RHEL-179912, RHEL-181936, RHEL-182537, RHEL-183592, RHEL-183965, RHEL-185110, RHEL-189491, RHEL-191349
|
||||
|
||||
* Mon Jun 29 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.29.1.el10_2]
|
||||
- RDMA/mlx5: Fix error path fall-through in mlx5_ib_dev_res_srq_init() (CKI Backport Bot) [RHEL-180001] {CVE-2026-46176}
|
||||
- crypto: tegra - Return ENOMEM when input buffer allocation fails for ccm (Vladislav Dronov) [RHEL-182759]
|
||||
- crypto: tegra - Fix dma_free_coherent size error (Vladislav Dronov) [RHEL-182759]
|
||||
- crypto: tegra - Don't touch bo refcount in host1x bo pin/unpin (Vladislav Dronov) [RHEL-182759]
|
||||
- crypto: tegra - Add missing CRYPTO_ALG_ASYNC (Vladislav Dronov) [RHEL-182759] {CVE-2026-31739}
|
||||
- crypto: tegra - Use int type to store negative error codes (Vladislav Dronov) [RHEL-182759]
|
||||
- crypto: tegra - Remove the use of dev_err_probe() (Vladislav Dronov) [RHEL-182759]
|
||||
- crypto: tegra - use API helpers to setup fallback request (Vladislav Dronov) [RHEL-182759]
|
||||
- crypto: tegra - remove unneeded crypto_engine_stop() call (Vladislav Dronov) [RHEL-182759]
|
||||
- scsi: qla2xxx: Add support to report MPI FW state (Ewan D. Milne) [RHEL-181887]
|
||||
- RDMA/vmw_pvrdma: Fix double free on pvrdma_alloc_ucontext() error path (CKI Backport Bot) [RHEL-179965] {CVE-2026-46189}
|
||||
- ALSA: aloop: Fix peer runtime UAF during format-change stop (CKI Backport Bot) [RHEL-179317] {CVE-2026-46090}
|
||||
- ALSA: usb-audio: Add sanity check for OOB writes at silencing (CKI Backport Bot) [RHEL-173937] {CVE-2026-43279}
|
||||
Resolves: RHEL-173937, RHEL-179317, RHEL-179965, RHEL-180001, RHEL-181887, RHEL-182759
|
||||
|
||||
* Thu Jun 25 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.28.1.el10_2]
|
||||
- selinux: RHEL-only hotfix for execmem regression (Ondrej Mosnacek) [RHEL-185117]
|
||||
- tcp: fix potential race in tcp_v6_syn_recv_sock() (Paolo Abeni) [RHEL-174242] {CVE-2026-43198}
|
||||
- scsi: qla2xxx: Completely fix fcport double free (Ewan D. Milne) [RHEL-179755] {CVE-2026-43414}
|
||||
- RDMA/mana: Remove user triggerable WARN_ON() in mana_ib_create_qp_rss() (CKI Backport Bot) [RHEL-180155] {CVE-2026-46117}
|
||||
- RDMA/iwcm: Fix workqueue list corruption by removing work_list (CKI Backport Bot) [RHEL-179665] {CVE-2026-45898}
|
||||
- rxrpc: fix RESPONSE authenticator parser OOB read (CKI Backport Bot) [RHEL-171456] {CVE-2026-31636}
|
||||
Resolves: RHEL-171456, RHEL-174242, RHEL-179665, RHEL-179755, RHEL-180155, RHEL-185117
|
||||
|
||||
* Mon Jun 22 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.27.1.el10_2]
|
||||
- nvmet-tcp: fix race between ICReq handling and queue teardown (CKI Backport Bot) [RHEL-180106] {CVE-2026-46135}
|
||||
- RDMA/mana: Validate rx_hash_key_len (CKI Backport Bot) [RHEL-180090] {CVE-2026-46145}
|
||||
- ipv6: icmp: clear skb2->cb[] in ip6_err_gen_icmpv6_unreach() (Guillaume Nault) [RHEL-172675] {CVE-2026-43038}
|
||||
Resolves: RHEL-172675, RHEL-180090, RHEL-180106
|
||||
|
||||
* Thu Jun 18 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.26.1.el10_2]
|
||||
- net/sched: fix pedit partial COW leading to page cache corruption (Ivan Vecera) [RHEL-177380] {CVE-2026-46331}
|
||||
- exit: prevent preemption of oopsing TASK_DEAD task (CKI Backport Bot) [RHEL-180009] {CVE-2026-46173}
|
||||
- crypto: caam - fix overflow on long hmac keys (CKI Backport Bot) [RHEL-179769] {CVE-2026-43330}
|
||||
- net: mana: fix use-after-free in add_adev() error path (CKI Backport Bot) [RHEL-172772] {CVE-2026-43056}
|
||||
Resolves: RHEL-172772, RHEL-177380, RHEL-179769, RHEL-180009
|
||||
|
||||
* Wed Jun 17 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.25.1.el10_2]
|
||||
- gitlab-ci: use rhel10.2 builder image (Michael Krausch-Hofmann)
|
||||
- redhat/configs: enable watchdog pretimout panic functionality for x86 (David Arcari) [RHEL-182299]
|
||||
- watchdog: wdat_wdt: Fix ACPI table leak in probe function (David Arcari) [RHEL-182299]
|
||||
- mptcp: fix slab-use-after-free in __inet_lookup_established (CKI Backport Bot) [RHEL-171510] {CVE-2026-31669}
|
||||
Resolves: RHEL-171510, RHEL-182299
|
||||
|
||||
* Mon Jun 15 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.24.1.el10_2]
|
||||
- s390/mm: Add missing secure storage access fixups for donated memory (Jan Polensky) [RHEL-183319]
|
||||
- ibmveth: Disable GSO for packets with small MSS (Mamatha Inamdar) [RHEL-179723]
|
||||
- rbd: eliminate a race in lock_dwork draining on unmap (CKI Backport Bot) [RHEL-183127]
|
||||
- objtool/klp: Fix unexported static call key access for manually built livepatch modules (Joe Lawrence) [RHEL-178495]
|
||||
- bnxt_en: Fix RSS context delete logic (CKI Backport Bot) [RHEL-180307] {CVE-2026-43260}
|
||||
- wifi: mac80211: remove station if connection prep fails (CKI Backport Bot) [RHEL-180126] {CVE-2026-46125}
|
||||
- wifi: mac80211: drop stray 'static' from fast-RX rx_result (CKI Backport Bot) [RHEL-180060] {CVE-2026-46152}
|
||||
- wifi: mac80211: use safe list iteration in radar detect work (CKI Backport Bot) [RHEL-180022] {CVE-2026-46166}
|
||||
- Bluetooth: hci_event: fix potential UAF in SSP passkey handlers (CKI Backport Bot) [RHEL-179358] {CVE-2026-46056}
|
||||
- scsi: lpfc: Fix reusing an ndlp that is marked NLP_DROPPED during FLOGI (Ewan D. Milne) [RHEL-171774]
|
||||
- can: isotp: fix tx.buf use-after-free in isotp_sendmsg() (CKI Backport Bot) [RHEL-175533] {CVE-2026-31474}
|
||||
- Buffer overflow in drivers/xen/sys-hypervisor.c (Vitaly Kuznetsov) [RHEL-172516] {CVE-2026-31786}
|
||||
- Bluetooth: hci_sync: fix stack buffer overflow in hci_le_big_create_sync (CKI Backport Bot) [RHEL-172862] {CVE-2026-31772}
|
||||
- xen/privcmd: fix double free via VMA splitting (CKI Backport Bot) [RHEL-172492] {CVE-2026-31787}
|
||||
- rxrpc: Fix RxGK token loading to check bounds (CKI Backport Bot) [RHEL-171419] {CVE-2026-31641}
|
||||
Resolves: RHEL-171419, RHEL-171774, RHEL-172492, RHEL-172516, RHEL-172862, RHEL-175533, RHEL-178495, RHEL-179358, RHEL-179723, RHEL-180022, RHEL-180060, RHEL-180126, RHEL-180307, RHEL-183127, RHEL-183319
|
||||
|
||||
* Thu Jun 11 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.23.1.el10_2]
|
||||
- s390/ap: Expose ap_bindings_complete_count counter via sysfs (Mircea Dragan) [RHEL-166047]
|
||||
Resolves: RHEL-166047
|
||||
|
||||
* Wed Jun 10 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.22.1.el10_2]
|
||||
- redhat: Fix rebuild changelog generation for automotive (Oleksii Baranov)
|
||||
- scripts/sorttable: Fix endianness handling in build-time mcount sort (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Allow matches to functions before function entry (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Use normal sort if theres no relocs in the mcount section (Jerome Marchand) [RHEL-180932]
|
||||
- ftrace: Check against is_kernel_text() instead of kaslr_offset() (Jerome Marchand) [RHEL-180932]
|
||||
- ftrace: Test mcount_loc addr before calling ftrace_call_addr() (Jerome Marchand) [RHEL-180932]
|
||||
- ftrace: Do not over-allocate ftrace memory (Jerome Marchand) [RHEL-180932]
|
||||
- ftrace: Have ftrace pages output reflect freed pages (Jerome Marchand) [RHEL-180932]
|
||||
- ftrace: Update the mcount_loc check of skipped entries (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Zero out weak functions in mcount_loc table (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Always use an array for the mcount_loc sorting (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Have mcount rela sort use direct values (Jerome Marchand) [RHEL-180932]
|
||||
- arm64: scripts/sorttable: Implement sorting mcount_loc at boot for arm64 (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Use a structure of function pointers for elf helpers (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Get start/stop_mcount_loc from ELF file directly (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Move code from sorttable.h into sorttable.c (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Use uint64_t for mcount sorting (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Add helper functions for Elf_Sym (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Add helper functions for Elf_Shdr (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Add helper functions for Elf_Ehdr (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Convert Elf_Sym MACRO over to a union (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Replace Elf_Shdr Macro with a union (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Convert Elf_Ehdr to union (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Make compare_extable() into two functions (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Have the ORC code use the _r() functions to read (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Remove unneeded Elf_Rel (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Remove unused write functions (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: Remove unused macro defines (Jerome Marchand) [RHEL-180932]
|
||||
- scripts/sorttable: fix orc_sort_cmp() to maintain symmetry and transitivity (Jerome Marchand) [RHEL-180932]
|
||||
- selinux: fix overlayfs mmap() and mprotect() access checks (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: add backing_file LSM hooks (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- fs: prepare for adding LSM blob to backing_file (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: cleanup the debug and console output in lsm_init.c (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: add/tweak function header comment blocks in lsm_init.c (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: fold lsm_init_ordered() into security_init() (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: cleanup initialize_lsm() and rename to lsm_init_single() (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: cleanup the LSM blob size code (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: rename/rework ordered_lsm_parse() to lsm_order_parse() (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: rename/rework append_ordered_lsm() into lsm_order_append() (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: rename exists_ordered_lsm() to lsm_order_exists() (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: rework the LSM enable/disable setter/getter functions (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: get rid of the lsm_names list and do some cleanup (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: rework lsm_active_cnt and lsm_idlist[] (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: rename the lsm order variables for consistency (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: replace the name field with a pointer to the lsm_id struct (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: rename ordered_lsm_init() to lsm_init_ordered() (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: integrate lsm_early_cred() and lsm_early_task() into caller (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: integrate report_lsm_order() code into caller (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: introduce looping macros for the initialization code (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: consolidate lsm_allowed() and prepare_lsm() into lsm_prepare() (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: split the init code out into lsm_init.c (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- lsm: split the notifier code out into lsm_notifier.c (Ondrej Mosnacek) [RHEL-179437] {CVE-2026-46054}
|
||||
- fs: constify file ptr in backing_file accessor helpers (Ondrej Mosnacek) [RHEL-179437]
|
||||
- ipv6: rpl: reserve mac_len headroom when recompressed SRH grows (Antoine Tenart) [RHEL-178413] {CVE-2026-43501}
|
||||
- ip6_tunnel: clear skb2->cb[] in ip4ip6_err() (Guillaume Nault) [RHEL-172651] {CVE-2026-43037}
|
||||
- ALSA: 6fire: fix use-after-free on disconnect (CKI Backport Bot) [RHEL-172973] {CVE-2026-31581}
|
||||
- erofs: add GFP_NOIO in the bio completion if needed (CKI Backport Bot) [RHEL-171686] {CVE-2026-31467}
|
||||
- can: raw: fix ro->uniq use-after-free in raw_rcv() (CKI Backport Bot) [RHEL-170764] {CVE-2026-31532}
|
||||
- nouveau/gsp: drop WARN_ON in ACPI probes (Gary Guo) [RHEL-167788]
|
||||
Resolves: RHEL-167788, RHEL-170764, RHEL-171686, RHEL-172651, RHEL-172973, RHEL-178413, RHEL-179437, RHEL-180932
|
||||
|
||||
* Thu Jun 04 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.21.1.el10_2]
|
||||
- s390/dasd: Copy detected format information to secondary device (Ramesh Chhetri) [RHEL-176473]
|
||||
- s390/dasd: Move quiesce state with pprc swap (Ramesh Chhetri) [RHEL-176473]
|
||||
- s390/dasd: Fix gendisk parent after copy pair swap (Ramesh Chhetri) [RHEL-176473]
|
||||
- ice: fix stats array overflow when VF requests more queues (Michal Schmidt) [RHEL-177518]
|
||||
- s390/pci: Avoid deadlock between PCI error recovery and mlx5 crdump (Mircea Dragan) [RHEL-166855]
|
||||
- net: bonding: fix use-after-free in bond_xmit_broadcast() (CKI Backport Bot) [RHEL-168073] {CVE-2026-31419}
|
||||
Resolves: RHEL-166855, RHEL-168073, RHEL-176473, RHEL-177518
|
||||
|
||||
* Tue Jun 02 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.20.1.el10_2]
|
||||
- smb: client: reject userspace cifs.spnego descriptions (Paulo Alcantara) [RHEL-178932] {CVE-2026-46243}
|
||||
- redhat/configs: automotive: disable CONFIG_IO_URING (Brian Masney) [RHEL-179469]
|
||||
- sched/deadline: Fix dl_server time accounting (Phil Auld) [RHEL-173950]
|
||||
- smb: client: fix OOB reads parsing symlink error response (CKI Backport Bot) [RHEL-171475] {CVE-2026-31613}
|
||||
- pNFS: fix a missing wake up while waiting on NFS_LAYOUT_DRAIN (Olga Kornievskaia) [RHEL-157466]
|
||||
Resolves: RHEL-157466, RHEL-171475, RHEL-173950, RHEL-178932, RHEL-179469
|
||||
|
||||
* Thu May 28 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.19.1.el10_2]
|
||||
- Bluetooth: hci_sync: Fix UAF in le_read_features_complete (David Marlin) [RHEL-176903] {CVE-2026-43322}
|
||||
- Bluetooth: hci_sync: fix leaks when hci_cmd_sync_queue_once fails (David Marlin) [RHEL-176903]
|
||||
- Bluetooth: hci_sync: hci_cmd_sync_queue_once() return -EEXIST if exists (David Marlin) [RHEL-176903]
|
||||
- Bluetooth: L2CAP: Add support for setting BT_PHY (David Marlin) [RHEL-176903]
|
||||
- Bluetooth: hci_conn: Fix using conn->le_{tx,rx}_phy as supported PHYs (David Marlin) [RHEL-176903]
|
||||
- Bluetooth: HCI: Add support for LL Extended Feature Set (David Marlin) [RHEL-176903]
|
||||
- Bluetooth: ISO: Add support to bind to trigger PAST (David Marlin) [RHEL-176903]
|
||||
- Bluetooth: HCI: Add initial support for PAST (David Marlin) [RHEL-176903]
|
||||
- netfilter: flowtable: strictly check for maximum number of actions (CKI Backport Bot) [RHEL-176915] {CVE-2026-43329}
|
||||
- dpll: zl3073x: report FFO as DPLL vs input reference offset (Ivan Vecera) [RHEL-175824]
|
||||
- dpll: add fractional frequency offset to pin-parent-device (Ivan Vecera) [RHEL-175824]
|
||||
- dpll: zl3073x: implement pin operational state reporting (Ivan Vecera) [RHEL-175821]
|
||||
- dpll: add pin operational state (Ivan Vecera) [RHEL-175821]
|
||||
- smb: client: validate dacloffset before building DACL pointers (Paulo Alcantara) [RHEL-172827]
|
||||
- smb: client: use kzalloc to zero-initialize security descriptor buffer (Paulo Alcantara) [RHEL-172827]
|
||||
- smb: client: scope end_of_dacl to CIFS_DEBUG2 use in parse_dacl (Paulo Alcantara) [RHEL-172827]
|
||||
- smb: client: require a full NFS mode SID before reading mode bits (Paulo Alcantara) [RHEL-172827]
|
||||
- smb: client: validate the whole DACL before rewriting it in cifsacl (Paulo Alcantara) [RHEL-172827] {CVE-2026-31709}
|
||||
- dpll: zl3073x: add ref-sync pair support (Ivan Vecera) [RHEL-167277]
|
||||
- dpll: zl3073x: add ref sync and output clock type helpers (Ivan Vecera) [RHEL-167277]
|
||||
- dpll: zl3073x: use FIELD_MODIFY() for clear-and-set patterns (Ivan Vecera) [RHEL-167277]
|
||||
- dpll: zl3073x: clean up esync get/set and use zl3073x_out_is_ndiv() (Ivan Vecera) [RHEL-167277]
|
||||
- dpll: zl3073x: implement frequency monitoring (Ivan Vecera) [RHEL-167837]
|
||||
- dpll: add frequency monitoring callback ops (Ivan Vecera) [RHEL-167837]
|
||||
- dpll: add frequency monitoring to netlink spec (Ivan Vecera) [RHEL-167837]
|
||||
- dpll: zl3073x: drop selected and simplify connected ref getter (Ivan Vecera) [RHEL-172930]
|
||||
- dpll: zl3073x: add reference priority to zl3073x_chan (Ivan Vecera) [RHEL-172930]
|
||||
- dpll: zl3073x: add DPLL channel status fields to zl3073x_chan (Ivan Vecera) [RHEL-172930]
|
||||
- dpll: zl3073x: introduce zl3073x_chan for DPLL channel state (Ivan Vecera) [RHEL-172930]
|
||||
- dpll: zl3073x: add zl3073x_ref_state_update helper (Ivan Vecera) [RHEL-172930]
|
||||
- dpll: zl3073x: use struct_group to partition states (Ivan Vecera) [RHEL-172930]
|
||||
- dpll: zl3073x: add die temperature reporting for supported chips (Ivan Vecera) [RHEL-172930]
|
||||
- dpll: zl3073x: detect DPLL channel count from chip ID at runtime (Ivan Vecera) [RHEL-172930]
|
||||
- crypto: authenc - Correctly pass EINPROGRESS back up to the caller (CKI Backport Bot) [RHEL-171302]
|
||||
- nbd: defer config unlock in nbd_genl_connect (CKI Backport Bot) [RHEL-166953] {CVE-2025-68366}
|
||||
- proc: fix type confusion in pde_set_flags() (Abhi Das) [RHEL-163345] {CVE-2025-38653}
|
||||
- proc: fix missing pde_set_flags() for net proc files (Abhi Das) [RHEL-163345] {CVE-2025-38653}
|
||||
- proc: use the same treatment to check proc_lseek as ones for proc_read_iter et.al (CKI Backport Bot) [RHEL-163345] {CVE-2025-38653}
|
||||
Resolves: RHEL-163345, RHEL-166953, RHEL-167277, RHEL-167837, RHEL-171302, RHEL-172827, RHEL-172930, RHEL-175821, RHEL-175824, RHEL-176903, RHEL-176915
|
||||
|
||||
* Thu May 21 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.18.1.el10_2]
|
||||
- xfs: fix freemap adjustments when adding xattrs to leaf blocks (CKI Backport Bot) [RHEL-174051] {CVE-2026-43158}
|
||||
- xfs: delete attr leaf freemap entries when empty (CKI Backport Bot) [RHEL-174051] {CVE-2026-43158}
|
||||
- Bluetooth: SCO: fix race conditions in sco_sock_connect() (CKI Backport Bot) [RHEL-172603] {CVE-2026-43023}
|
||||
- Bluetooth: MGMT: validate LTK enc_size on load (CKI Backport Bot) [RHEL-172577] {CVE-2026-43020}
|
||||
- crypto: tegra - Disable softirqs before finalizing request (CKI Backport Bot) [RHEL-133872]
|
||||
Resolves: RHEL-133872, RHEL-172577, RHEL-172603, RHEL-174051
|
||||
|
||||
* Wed May 20 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.17.1.el10_2]
|
||||
- dm-thin: fix metadata refcount underflow (Benjamin Marzinski) [RHEL-169625]
|
||||
- redhat/kernel.spec.template: disable OBJTOOL_WERROR for gcov builds (Oleksii Baranov)
|
||||
- mm/page_alloc: clear page->private in free_pages_prepare() (Rafael Aquini) [RHEL-174756] {CVE-2026-43303}
|
||||
- dpaa2-switch: validate num_ifs to prevent out-of-bounds write (CKI Backport Bot) [RHEL-174258] {CVE-2026-43205}
|
||||
- dpaa2-switch: prevent ZERO_SIZE_PTR dereference when num_ifs is zero (CKI Backport Bot) [RHEL-174258] {CVE-2026-43205}
|
||||
- mm: thp: deny THP for files on anonymous inodes (Rafael Aquini) [RHEL-171617] {CVE-2026-23375}
|
||||
- fs: add S_ANON_INODE (Rafael Aquini) [RHEL-171617]
|
||||
- anon_inode: raise SB_I_NODEV and SB_I_NOEXEC (Rafael Aquini) [RHEL-171617]
|
||||
- pidfs: use anon_inode_setattr() (Rafael Aquini) [RHEL-171617]
|
||||
- anon_inode: explicitly block ->setattr() (Rafael Aquini) [RHEL-171617]
|
||||
- pidfs: use anon_inode_getattr() (Rafael Aquini) [RHEL-171617]
|
||||
- anon_inode: use a proper mode internally (Rafael Aquini) [RHEL-171617]
|
||||
- ice: set max queues in alloc_etherdev_mqs() (CKI Backport Bot) [RHEL-174331]
|
||||
- ice: use netif_get_num_default_rss_queues() (CKI Backport Bot) [RHEL-174331]
|
||||
- net: Fix rcu_tasks stall in threaded busypoll (CKI Backport Bot) [RHEL-170809]
|
||||
- netfilter: xt_tcpmss: check remaining length before reading optlen (CKI Backport Bot) [RHEL-174217] {CVE-2026-43190}
|
||||
- netfilter: ctnetlink: ensure safe access to master conntrack (CKI Backport Bot) [RHEL-173872] {CVE-2026-43116}
|
||||
- wifi: brcmfmac: validate bsscfg indices in IF events (CKI Backport Bot) [RHEL-173857] {CVE-2026-43110}
|
||||
- redhat/configs: enable CONFIG_AQTION on all archs (CKI Backport Bot) [RHEL-171944]
|
||||
- HID: wacom: fix out-of-bounds read in wacom_intuos_bt_irq (CKI Backport Bot) [RHEL-172745] {CVE-2026-43051}
|
||||
- netfilter: nf_conntrack_helper: pass helper to expect cleanup (CKI Backport Bot) [RHEL-172625] {CVE-2026-43027}
|
||||
- io_uring/rsrc: reject zero-length fixed buffer import (CKI Backport Bot) [RHEL-172556] {CVE-2026-43006}
|
||||
- dpll: zl3073x: Remove redundant cleanup in devm_dpll_init() (CKI Backport Bot) [RHEL-164434]
|
||||
- dpll: zl3073x: fix REF_PHASE_OFFSET_COMP register width for some chip IDs (CKI Backport Bot) [RHEL-164434]
|
||||
- dpll: zl3073x: Fix ref frequency setting (CKI Backport Bot) [RHEL-164434]
|
||||
- dpll: zl3073x: Include current frequency in supported frequencies list (CKI Backport Bot) [RHEL-164434]
|
||||
- dpll: zl3073x: Add output pin frequency helper (CKI Backport Bot) [RHEL-164434]
|
||||
- cifs: make default value of retrans as zero (Paulo Alcantara) [RHEL-171637]
|
||||
- cifs: remove unnecessary tracing after put tcon (Paulo Alcantara) [RHEL-171637]
|
||||
- netfilter: ip6t_eui64: reject invalid MAC header for all packets (CKI Backport Bot) [RHEL-171159] {CVE-2026-31685}
|
||||
- net: sched: act_csum: validate nested VLAN headers (CKI Backport Bot) [RHEL-171142] {CVE-2026-31684}
|
||||
- drm/mgag200: fix mgag200_bmc_stop_scanout() (Jocelyn Falempe) [RHEL-150180]
|
||||
- scsi: lpfc: avoid crashing in lpfc_nlp_get() if lpfc_nodelist was freed (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Revise logging format for failed CT MIB requests" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Update debugfs trace ring initialization messages" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Check for hdwq null ptr when cleaning up lpfc_vport structure" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Skip RSCN processing when FC_UNLOADING flag is set" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Early return out of FDMI cmpl for locally rejected statuses" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Simplify error handling for failed lpfc_get_sli4_parameters cmd" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Relocate clearing initial phba flags from link up to link down hdlr" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Ensure HBA_SETUP flag is used only for SLI4 in dev_loss_tmo_callbk" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Move clearing of HBA_SETUP flag to before lpfc_sli4_queue_unset" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Revise CQ_CREATE_SET mailbox bitfield definitions" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Modify end-of-life adapters' model descriptions" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Update lpfc version to 14.4.0.10" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Copyright updates for 14.4.0.10 patches" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "lpfc: don't use file->f_path.dentry for comparisons" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Fix wrong function reference in a comment" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: use min() to improve code" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Use int type to store negative error codes" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Remove unused member variables in struct lpfc_hba and lpfc_vport" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Abort outstanding ELS WQEs regardless of if rmmod is in progress" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Clean up allocated queues when queue setup mbox commands fail" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Remove ndlp kref decrement clause for F_Port_Ctrl in lpfc_cleanup" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Decrement ndlp kref after FDISC retries exhausted" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Check return status of lpfc_reset_flush_io_context during TGT_RESET" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Ensure PLOGI_ACC is sent prior to PRLI in Point to Point topology" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Define size of debugfs entry for xri rebalancing" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Fix memory leak when nvmeio_trc debugfs entry is used" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Use switch case statements in DIF debugfs handlers" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Clean up extraneous phba dentries" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Convert debugfs directory counts from atomic to unsigned int" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Update lpfc version to 14.4.0.11" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Copyright updates for 14.4.0.11 patches" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Update various NPIV diagnostic log messaging" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Revise discovery related function headers and comments" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Remove redundant NULL ptr assignment in lpfc_els_free_iocb()" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Ensure unregistration of rpis for received PLOGIs" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Fix leaked ndlp krefs when in point-to-point topology" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Modify kref handling for Fabric Controller ndlps" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Fix reusing an ndlp that is marked NLP_DROPPED during FLOGI" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Allow support for BB credit recovery in point-to-point topology" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Add capability to register Platform Name ID to fabric" (Ewan D. Milne) [RHEL-169786]
|
||||
- Revert "scsi: lpfc: Update lpfc version to 14.4.0.12" (Ewan D. Milne) [RHEL-169786]
|
||||
- netfilter: nf_conntrack_h323: check for zero length in DecodeQ931() (CKI Backport Bot) [RHEL-166991] {CVE-2026-23455}
|
||||
- ima: don't clear IMA_DIGSIG flag when setting or removing non-IMA xattr (Bruno Meneguele) [RHEL-169738] {CVE-2025-68183}
|
||||
- can: j1939: j1939_session_new(): fix skb reference counting (CKI Backport Bot) [RHEL-162260] {CVE-2024-56645}
|
||||
- netfilter: nf_tables: release flowtable after rcu grace period on error (CKI Backport Bot) [RHEL-160469] {CVE-2026-23392}
|
||||
Resolves: RHEL-150180, RHEL-160469, RHEL-162260, RHEL-164434, RHEL-166991, RHEL-169625, RHEL-169738, RHEL-169786, RHEL-170809, RHEL-171142, RHEL-171159, RHEL-171617, RHEL-171637, RHEL-171944, RHEL-172556, RHEL-172625, RHEL-172745, RHEL-173857, RHEL-173872, RHEL-174217, RHEL-174258, RHEL-174331, RHEL-174756
|
||||
|
||||
* Mon May 18 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.16.1.el10_2]
|
||||
- net: skbuff: propagate shared-frag marker through frag-transfer helpers (Sabrina Dubroca) [RHEL-176053] {CVE-2026-46300}
|
||||
- net: skbuff: preserve shared-frag marker during coalescing (Sabrina Dubroca) [RHEL-176053] {CVE-2026-46300}
|
||||
- ptrace: slightly saner 'get_dumpable()' logic (Ricardo Robaina) [RHEL-176449] {CVE-2026-46333}
|
||||
- RDMA/umem: Fix double dma_buf_unpin in failure path (CKI Backport Bot) [RHEL-174029] {CVE-2026-43128}
|
||||
- usbip: validate number_of_packets in usbip_pack_ret_submit() (CKI Backport Bot) [RHEL-171434] {CVE-2026-31607}
|
||||
Resolves: RHEL-171434, RHEL-174029, RHEL-176053, RHEL-176449
|
||||
|
||||
* Mon May 11 2026 Patrick Talbert <ptalbert@redhat.com> [6.12.0-211.15.1.el10_2]
|
||||
- xfrm: esp: avoid in-place decrypt on shared skb frags (CKI Backport Bot) [RHEL-174546] {CVE-2026-43284}
|
||||
Resolves: RHEL-174546
|
||||
|
||||
* Mon May 04 2026 Patrick Talbert <ptalbert@redhat.com> [6.12.0-211.14.1.el10_2]
|
||||
- crypto: algif_aead - snapshot IV for async AEAD requests (Herbert Xu) [RHEL-172213]
|
||||
- crypto: algif_aead - Fix minimum RX size check for decryption (Herbert Xu) [RHEL-172213]
|
||||
- crypto: authencesn - reject short ahash digests during instance creation (Herbert Xu) [RHEL-172213]
|
||||
- crypto: authencesn - Fix src offset when decrypting in-place (Herbert Xu) [RHEL-172213]
|
||||
- crypto: authencesn - Do not place hiseq at end of dst for out-of-place decryption (Herbert Xu) [RHEL-172213] {CVE-2026-31431}
|
||||
- crypto: authencesn - reject too-short AAD (assoclen<8) to match ESP/ESN spec (Herbert Xu) [RHEL-172213] {CVE-2026-23060}
|
||||
- crypto: af_alg - Fix page reassignment overflow in af_alg_pull_tsgl (Herbert Xu) [RHEL-172213]
|
||||
- crypto: af_alg - limit RX SG extraction by receive buffer budget (Herbert Xu) [RHEL-172213] {CVE-2026-31677}
|
||||
- crypto: algif_aead - Revert to operating out-of-place (Herbert Xu) [RHEL-172213] {CVE-2026-31431}
|
||||
- crypto: af-alg - fix NULL pointer dereference in scatterwalk (Herbert Xu) [RHEL-172213]
|
||||
Resolves: RHEL-172213
|
||||
|
||||
* Thu Apr 30 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.13.1.el10_2]
|
||||
- scsi: storvsc: Handle PERSISTENT_RESERVE_IN truncation for Hyper-V vFC (Vitaly Kuznetsov) [RHEL-171531]
|
||||
- Bluetooth: SCO: Fix use-after-free in sco_recv_frame() due to missing sock_hold (CKI Backport Bot) [RHEL-170974] {CVE-2026-31408}
|
||||
Resolves: RHEL-170974, RHEL-171531
|
||||
|
||||
* Mon Apr 27 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.12.1.el10_2]
|
||||
- drm/i915/dp: Fix panel replay when DSC is enabled (Anusha Srivatsa) [RHEL-169354]
|
||||
- drm/i915/dp_mst: Recompute all MST link CRTCs if DSC gets enabled on the link (Anusha Srivatsa) [RHEL-169354]
|
||||
- drm/i915/dp_mst: Track DSC enabled status on the MST link (Anusha Srivatsa) [RHEL-169354]
|
||||
- drm/i915/dp_mst: Reuse the DP-SST helper function to compute FEC config (Anusha Srivatsa) [RHEL-169354]
|
||||
- drm/i915/dp: Export helper to determine if FEC on non-UHBR links is required (Anusha Srivatsa) [RHEL-169354]
|
||||
- drm/i915/dp: Ensure the FEC state stays disabled for UHBR links (Anusha Srivatsa) [RHEL-169354]
|
||||
- drm/i915/dsc: Add helper to enable the DSC configuration for a CRTC (Anusha Srivatsa) [RHEL-169354]
|
||||
- crypto: asymmetric_keys - prevent overflow in asymmetric_key_generate_id (CKI Backport Bot) [RHEL-166932] {CVE-2025-68724}
|
||||
- net: af_can: do not leave a dangling sk pointer in can_create() (CKI Backport Bot) [RHEL-162253] {CVE-2024-56603}
|
||||
Resolves: RHEL-162253, RHEL-166932, RHEL-169354
|
||||
|
||||
* Thu Apr 23 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.11.1.el10_2]
|
||||
- nfsd: fix heap overflow in NFSv4.0 LOCK replay cache (Scott Mayhew) [RHEL-168569] {CVE-2026-31402}
|
||||
- KVM: x86/mmu: Only WARN in direct MMUs when overwriting shadow-present SPTE (Paolo Bonzini) [RHEL-153716] {CVE-2026-23401}
|
||||
- KVM: x86/mmu: Drop/zap existing present SPTE even when creating an MMIO SPTE (Paolo Bonzini) [RHEL-153716] {CVE-2026-23401}
|
||||
Resolves: RHEL-153716, RHEL-168569
|
||||
|
||||
* Thu Apr 23 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.10.1.el10_2]
|
||||
- ASoC: soc_sdw_utils: remove index from sdca codec name (Jaroslav Kysela) [RHEL-163717]
|
||||
- ASoC: soc_sdw_utils: partial match the codec name (Jaroslav Kysela) [RHEL-163717]
|
||||
- ASoC: add snd_soc_lookup_component_by_name helper (Jaroslav Kysela) [RHEL-163717]
|
||||
- ASoC: SDCA: Update counting of SU/GE DAPM routes (Jaroslav Kysela) [RHEL-163717]
|
||||
- ASoC: SDCA: Handle CONFIG_PM_SLEEP not being set (Jaroslav Kysela) [RHEL-163717]
|
||||
- ASoC: SDCA: Tidy up some memory allocations (Jaroslav Kysela) [RHEL-163717]
|
||||
- net/sched: Only allow act_ct to bind to clsact/ingress qdiscs and shared blocks (CKI Backport Bot) [RHEL-157332] {CVE-2026-23270}
|
||||
Resolves: RHEL-157332, RHEL-163717
|
||||
|
||||
* Mon Apr 20 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.9.1.el10_2]
|
||||
- x86/boot: Handle relative CONFIG_EFI_SBAT_FILE file paths (Oleksii Baranov) [RHEL-157855]
|
||||
Resolves: RHEL-157855
|
||||
|
||||
* Thu Apr 16 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.8.1.el10_2]
|
||||
- ice: drop udp_tunnel_get_rx_info() call from ndo_open() (Mohammad Heib) [RHEL-165081]
|
||||
- i40e: drop udp_tunnel_get_rx_info() call from i40e_open() (Mohammad Heib) [RHEL-165081]
|
||||
- ALSA: hda/tas2781: Ignore reset check for SPI device (Jaroslav Kysela) [RHEL-157285]
|
||||
- smb: client: fix krb5 mount with username option (Paulo Alcantara) [RHEL-158990]
|
||||
- scsi: qla2xxx: Fix improper freeing of purex item (CKI Backport Bot) [RHEL-159227] {CVE-2025-68741}
|
||||
- net: hv_netvsc: reject RSS hash key programming without RX indirection table (Vinay Mulugund) [RHEL-155205]
|
||||
- ionic: fix persistent MAC address override on PF (Mohammad Heib) [RHEL-158206]
|
||||
- net: openvswitch: Avoid releasing netdev before teardown completes (Toke Høiland-Jørgensen) [RHEL-157946]
|
||||
- RDMA/bnxt_re: convert timeouts to secs_to_jiffies() (CKI Backport Bot) [RHEL-155971]
|
||||
- RDMA/bnxt_re: Fix return code of bnxt_re_configure_cc (CKI Backport Bot) [RHEL-155971]
|
||||
- RDMA/bnxt_re: Fix missing error handling for tx_queue (CKI Backport Bot) [RHEL-155971]
|
||||
- RDMA/bnxt_re: Fix incorrect display of inactivity_cp in debugfs output (CKI Backport Bot) [RHEL-155971]
|
||||
- RDMA/bnxt_re: Use macro instead of hard coded value (CKI Backport Bot) [RHEL-155971]
|
||||
- RDMA/bnxt_re: Support 2G message size (CKI Backport Bot) [RHEL-155971]
|
||||
- RDMA/bnxt_re: Fix size of uverbs_copy_to() in BNXT_RE_METHOD_GET_TOGGLE_MEM (CKI Backport Bot) [RHEL-155971]
|
||||
- RDMA/bnxt_re: Support extended stats for Thor2 VF (CKI Backport Bot) [RHEL-155971]
|
||||
- net/sched: sch_cake: Fix incorrect qlen reduction in cake_drop (Davide Caratti) [RHEL-150456] {CVE-2025-39766}
|
||||
- net/sched: Make cake_enqueue return NET_XMIT_CN when past buffer_limit (Davide Caratti) [RHEL-150456] {CVE-2025-39766}
|
||||
Resolves: RHEL-150456, RHEL-155205, RHEL-155971, RHEL-157285, RHEL-157946, RHEL-158206, RHEL-158990, RHEL-159227, RHEL-165081
|
||||
|
||||
* Wed Apr 01 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [6.12.0-211.7.1.el10_2]
|
||||
- kabi: enable check-kabi (Čestmír Kalina) [RHEL-153673]
|
||||
- kabi: add symbols to stablelist (Čestmír Kalina) [RHEL-153673]
|
||||
|
||||
@ -4,18 +4,10 @@ product_versions:
|
||||
decision_context: osci_compose_gate
|
||||
rules:
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-64k-aarch64.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-64k-debug-aarch64.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-aarch64.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-debug-aarch64.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-debug-ppc64le.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-debug-s390x.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-debug-x86_64.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-ppc64le.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-rt-64k-aarch64.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-rt-64k-debug-aarch64.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-rt-aarch64.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-rt-debug-aarch64.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-rt-debug-x86_64.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-rt-x86_64.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-s390x.tier1.functional}
|
||||
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.kernel-x86_64.tier1.functional}
|
||||
|
||||
@ -1,15 +1,62 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Generate a changelog for a kernel rebuild package.
|
||||
# generate-rebuild-changelog.sh - generate a changelog for a kernel rebuild package
|
||||
#
|
||||
# When rebuilding the kernel for a separate package, the changelog should
|
||||
# clearly indicate that this is a rebuild. This script fetches the previous
|
||||
# changelog from dist-git, identifies new entries from the source kernel
|
||||
# changelog, and prepends them along with a rebuild log entry.
|
||||
# When a kernel is rebuilt as a separate package (e.g. kernel-automotive), its
|
||||
# changelog must list the base kernel commits that went into the rebuild. This
|
||||
# script fetches the previous changelog from dist-git, determines which base
|
||||
# kernel tags are new since the last rebuild, and produces a single changelog
|
||||
# block with all the commits merged under one rebuild header. The result is
|
||||
# prepended to the existing dist-git changelog so that the full history is
|
||||
# preserved in chronological order.
|
||||
#
|
||||
# This is intended to be called from make dist-git which exports the required
|
||||
# environment variables. To test standalone, pass the variables on the command
|
||||
# line, e.g.:
|
||||
# The script handles two scenarios:
|
||||
#
|
||||
# 1) Rebuilding the next tag (+1)
|
||||
#
|
||||
# The previous rebuild was kernel-6.12.0-231.el10 and the new rebuild is
|
||||
# kernel-6.12.0-232.el10. The new changelog block contains only the commits
|
||||
# from tag 232:
|
||||
#
|
||||
# * Wed Jun 03 2026 J. Doe <jdoe@redhat.com> - 6.12.0-232.el10iv
|
||||
# - Rebuild base kernel commit d3e637abf7ff for kernel-automotive
|
||||
# - Mon May 25 2026 CKI KWF Bot <bot@redhat.com> [6.12.0-232.el10]
|
||||
# - PCI: Fix alignment calculation ... [RHEL-151449]
|
||||
# - scsi: ses: Fix devices attaching ... [RHEL-153020]
|
||||
# Resolves: RHEL-151449, RHEL-153020
|
||||
#
|
||||
# * Tue Jun 02 2026 J. Doe <jdoe@redhat.com> - 6.12.0-231.el10iv
|
||||
# - Rebuild base kernel commit 1d47564ebba9 for kernel-automotive
|
||||
# ... (previous dist-git changelog, unchanged)
|
||||
#
|
||||
# 2) Skipping tags (+N, e.g. rebuilding 233 after 231)
|
||||
#
|
||||
# Tags 232 and 233 were both released since the last rebuild. Their commits
|
||||
# are merged into a single block and their Resolves lines are combined:
|
||||
#
|
||||
# * Wed Jun 03 2026 J. Doe <jdoe@redhat.com> - 6.12.0-233.el10iv
|
||||
# - Rebuild base kernel commit 069b862c9daf for kernel-automotive
|
||||
# - Tue May 26 2026 CKI KWF Bot <bot@redhat.com> [6.12.0-233.el10]
|
||||
# - crypto: authenc - Correctly pass EINPROGRESS ... [RHEL-130557]
|
||||
# - Mon May 25 2026 CKI KWF Bot <bot@redhat.com> [6.12.0-232.el10]
|
||||
# - PCI: Fix alignment calculation ... [RHEL-151449]
|
||||
# Resolves: RHEL-130557, RHEL-151449
|
||||
#
|
||||
# * Tue Jun 02 2026 J. Doe <jdoe@redhat.com> - 6.12.0-231.el10iv
|
||||
# ... (previous dist-git changelog, unchanged)
|
||||
#
|
||||
# The base kernel "* " headers are converted to "- " entries so they do
|
||||
# not create separate RPM changelog entries, keeping everything under the
|
||||
# single rebuild header in chronological order. The first such "- " line
|
||||
# also serves as a version marker that the next rebuild uses to determine
|
||||
# last_synced tag name. In such way we ensure that the change log contains
|
||||
# only proper rebuilt tags.
|
||||
#
|
||||
# Generally it is not recommended to use scenario 2 for rebuilds. Use the
|
||||
# first one instead.
|
||||
#
|
||||
#
|
||||
# Called from make dist-git. To test standalone:
|
||||
#
|
||||
# REDHAT=$PWD/redhat TOPDIR=$PWD RHEL_MAJOR=10 RHEL_MINOR=2 \
|
||||
# SPECPACKAGE_NAME=kernel-automotive \
|
||||
@ -55,32 +102,56 @@ if ! fetch_distgit_clog "$tmpdir" > "$distgit_clog"; then
|
||||
true > "$distgit_clog"
|
||||
fi
|
||||
|
||||
# Find the last kernel version rebuilt by extracting the version from the first
|
||||
# [version] header of our dist-git changelog, e.g. [6.12.0-209.el10].
|
||||
last_synced=$(sed -n '/\[.*\]$/{s/.*\[\([^]]*\)\]$/\1/p;q;}' "$distgit_clog")
|
||||
# Determine the base kernel version from the previous rebuild.
|
||||
# Primary: read from the "- <date> ... [version]" marker left by a prior run.
|
||||
# Fallback: look up the git tag for the commit recorded in the rebuild line.
|
||||
last_synced=$(sed -n '/^- .*\[[0-9][^]]*\]$/{s/.*\[\([^]]*\)\]$/\1/p;q;}' "$distgit_clog")
|
||||
|
||||
if [[ -z "$last_synced" ]]; then
|
||||
prev_commit=$(sed -n 's/^- Rebuild.*commit \([0-9a-f]*\) for .*/\1/p;T;q' "$distgit_clog")
|
||||
if [[ -n "$prev_commit" ]]; then
|
||||
tag=$(git tag --points-at "$prev_commit" 2>/dev/null \
|
||||
| grep '^kernel-' | head -1)
|
||||
[[ -n "$tag" ]] && last_synced="${tag#kernel-}"
|
||||
fi
|
||||
fi
|
||||
|
||||
pkg_version="$DISTBASEVERSION"
|
||||
HEAD="${HEAD:-HEAD}"
|
||||
commit_sha=$(git rev-parse --short=12 "$HEAD")
|
||||
|
||||
# Assemble: rebuild entry + new kernel entries + previous changelog
|
||||
# Build the new changelog block and prepend it to the existing dist-git changelog.
|
||||
{
|
||||
# Create the rebuild entry, e.g.:
|
||||
# * Thu Feb 19 2026 Scott Weaver <scweaver@redhat.com> - 6.12.0-209.el10iv
|
||||
# - Rebuilt for kernel-automotive
|
||||
# Extract kernel changelog entries since last_synced. On first build
|
||||
# (last_synced empty), take only the newest tag's entries.
|
||||
new_entries=$(mktemp)
|
||||
if [[ -n "$last_synced" ]]; then
|
||||
sed "/\[${last_synced}\]/,\$d" "$kernel_clog" > "$new_entries"
|
||||
else
|
||||
awk '/^\* /{if(n++)exit}1' "$kernel_clog" > "$new_entries"
|
||||
fi
|
||||
|
||||
# Merge all Resolves lines into one (relevant for +N rebuilds).
|
||||
resolves=$(grep '^Resolves:' "$new_entries" \
|
||||
| sed 's/^Resolves: *//' \
|
||||
| tr ',[:space:]' '\n' | sed '/^$/d; s/^ *//' | sort -u \
|
||||
| paste -sd, | sed 's/,/, /g')
|
||||
|
||||
# Rebuild header
|
||||
cdate=$(LC_ALL=C date +"%a %b %d %Y")
|
||||
cname="$(git config user.name) <$(git config user.email)>"
|
||||
echo "* $cdate $cname - $pkg_version"
|
||||
echo "- Rebuilt for ${SPECPACKAGE_NAME}"
|
||||
echo "- Rebuild base kernel commit ${commit_sha} for ${SPECPACKAGE_NAME}"
|
||||
|
||||
# Kernel entries: convert "* " headers to "- " (the first becomes a
|
||||
# version marker for the next rebuild), drop per-tag Resolves and blanks.
|
||||
sed 's/^\* /- /; /^Resolves:/d; /^$/d' "$new_entries"
|
||||
|
||||
echo "Resolves: $resolves"
|
||||
rm -f "$new_entries"
|
||||
|
||||
# Previous dist-git changelog, unchanged
|
||||
echo ""
|
||||
|
||||
# Extract only new entries from the kernel changelog.
|
||||
# Take everything since the last synced version.
|
||||
if [[ -n "$last_synced" ]]; then
|
||||
sed "/\[${last_synced}\]/,\$d" "$kernel_clog"
|
||||
else
|
||||
cat "$kernel_clog"
|
||||
fi
|
||||
|
||||
# Append the changelog that we fetched from dist-git
|
||||
cat "$distgit_clog"
|
||||
} > "$pkg_clog"
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ class CommitTags:
|
||||
r'(\d{4,8})\s*$',
|
||||
r'https?://bugzilla\.redhat\.com/(?:show_bug\.cgi\?id=)?(\d{4,8})',
|
||||
],
|
||||
'JIRA': [r'https://issues\.redhat\.com/(?:browse|projects/RHEL/issues)/(RHEL-\d{1,8})'],
|
||||
'JIRA': [r'https://(?:issues\.redhat\.com|redhat\.atlassian\.net)/(?:browse|projects/RHEL/issues)/(RHEL-\d{1,8})'],
|
||||
'CVE': [r'(CVE-\d{4}-\d{4,7})'],
|
||||
'MR': [r'(.*)'],
|
||||
'Y-Commit': [r'([0-9a-fA-F]+)'],
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-0.rc5.6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=-p stream
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16-rc5
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 0.rc5.6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0-0.rc5.6.test.el7
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-0.rc5.6.test]
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-0.rc5.6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=-p stream
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16-rc5
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 0.rc5.6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0-0.rc5.6.test.fc25
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-0.rc5.6.test]
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=-p stream
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0-6.test.el7
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-6.test]
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=-p stream
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0-6.test.fc25
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-6.test]
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=-p stream
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0-6.test.el7
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-6.test]
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=-p stream
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0-6.test.fc25
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-6.test]
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-0.rc5.6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=-p stream
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16-rc5
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 0.rc5.6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0-0.rc5.6.test.el7
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-0.rc5.6.test]
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-0.rc5.6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=-p stream
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16-rc5
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 0.rc5.6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0-0.rc5.6.test.fc25
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-0.rc5.6.test]
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-0.rc5.6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16-rc5
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 0.rc5.6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-0.rc5.6.test]
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-0.rc5.6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16-rc5
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 0.rc5.6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-0.rc5.6.test]
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-6.test]
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-6.test]
|
||||
|
||||
@ -5,11 +5,11 @@ ARCH_LIST=aarch64 ppc64le s390x x86_64 riscv64
|
||||
AUTOMOTIVE_BUILD=
|
||||
AUTOMOTIVE_MAJOR=2
|
||||
AUTOMOTIVE_MINOR=0
|
||||
AUTOMOTIVE_PKG_DIST=.el10iv
|
||||
AUTOMOTIVE_PKG_DIST=.el10_2iv
|
||||
AUTOMOTIVE_PKG_NAME=kernel-automotive
|
||||
BASEVERSION=5.16.0-6.test
|
||||
BUILD=6
|
||||
BUILDOPTS=
|
||||
BUILDOPTS=+kabidupchk
|
||||
BUILD_FLAGS=
|
||||
BUILD_PROFILE=
|
||||
BUILD_PROFILE_USERDEF=
|
||||
@ -108,7 +108,7 @@ UPSTREAMBUILD_GIT_ONLY=
|
||||
UPSTREAM_BRANCH=v6.12
|
||||
UPSTREAM_TARBALL_NAME=5.16
|
||||
VERSION_ON_UPSTREAM=0
|
||||
YSTREAM_FLAG=yes
|
||||
ZSTREAM=no
|
||||
ZSTREAM_FLAG=no
|
||||
YSTREAM_FLAG=no
|
||||
ZSTREAM=yes
|
||||
ZSTREAM_FLAG=yes
|
||||
_OUTPUT=..
|
||||
|
||||
@ -17,4 +17,5 @@
|
||||
%define specrelease 6%{?buildid}%{?dist}
|
||||
%define kabiversion 5.16.0
|
||||
%define selftests_must_build 0
|
||||
%define _with_kabidupchk 1
|
||||
Mon Mar 28 2022 Fedora Kernel Team <kernel-team@fedoraproject.org> [5.16.0-6.test]
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user