Import of kernel-6.12.0-211.37.1.el10_2

This commit is contained in:
almalinux-bot-kernel 2026-07-25 05:08:19 +00:00
parent bc547fd41f
commit 3d82d15658
126 changed files with 1785 additions and 684 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;
}

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;
}

View File

@ -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),

View File

@ -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)

View File

@ -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:

View File

@ -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);

View File

@ -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);

View File

@ -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)

View File

@ -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);

View File

@ -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 */

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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, &copy);
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, &copy);
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);

View File

@ -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);

View File

@ -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 */
}

View File

@ -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;

View File

@ -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;

View File

@ -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)

View File

@ -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:

View File

@ -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);
}
/**

View File

@ -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;
}

View File

@ -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)

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}
/**

View File

@ -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);

View File

@ -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, &copy->cp_flags)) {
kthread_stop(copy->copy_task);
copy->nfserr = nfs_ok;
if (!test_bit(NFSD4_COPY_F_CB_ERROR, &copy->cp_flags))
copy->nfserr = nfs_ok;
set_bit(NFSD4_COPY_F_COMPLETED, &copy->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(&copy->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,
&copy->cp_flags);
list_move(&copy->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(&copy->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, &copy->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 = &copy->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, &copy->cp_flags);
return;
}
memcpy(&cbo->co_res, &copy->cp_res, sizeof(copy->cp_res));
memcpy(&cbo->co_fh, &copy->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, &copy->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, &copy->cp_flags);

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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.
*/

View File

@ -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,

View File

@ -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.

View File

@ -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

View File

@ -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);

View File

@ -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 */

View File

@ -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

View File

@ -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);

View File

@ -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;
}

View File

@ -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();

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -1 +1 @@
CONFIG_PT_RECLAIM=y
# CONFIG_PT_RECLAIM is not set

View File

@ -0,0 +1 @@
CONFIG_ARM64_ERRATUM_4118414=y

View File

@ -0,0 +1 @@
# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set

View File

@ -0,0 +1 @@
# CONFIG_SOFT_WATCHDOG_PRETIMEOUT is not set

View File

@ -0,0 +1 @@
CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT=y

View File

@ -0,0 +1 @@
# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP is not set

View File

@ -0,0 +1 @@
CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC=y

View File

@ -0,0 +1 @@
CONFIG_WATCHDOG_PRETIMEOUT_GOV=y

View File

@ -0,0 +1 @@
# CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP is not set

View File

@ -0,0 +1 @@
CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=y

View File

@ -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]

View File

@ -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}

View File

@ -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"

View File

@ -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]+)'],

View File

@ -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=..

View File

@ -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]

View File

@ -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=..

View File

@ -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]

View File

@ -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=..

View File

@ -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]

View File

@ -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=..

View File

@ -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]

View File

@ -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=..

View File

@ -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]

View File

@ -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=..

View File

@ -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]

View File

@ -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=..

View File

@ -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]

View File

@ -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=..

View File

@ -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]

View File

@ -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=..

View File

@ -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]

View File

@ -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=..

View File

@ -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]

View File

@ -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=..

View File

@ -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]

View File

@ -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=..

View File

@ -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]

View File

@ -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=..

View File

@ -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