6.6.131-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainerPATCH 154/175 xattr: switch to CLASS(fd)
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Viro <[email protected]>
[ Upstream commit a71874379ec8c6e788a61d71b3ad014a8d9a5c08 ]
[ Only switch to CLASS(fd) in v6.6.y for fd_empty() was introduced in commit 88a2f6468d01 ("struct fd: representation change") in 6.12. ]
--- fs/xattr.c | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-)
fs/xattr.c +6 -21
@@ -698,8 +698,6 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, consint error;CLASS (fd, f)(fd); -if (!f.file) -return -EBADF ;audit_file (f.file); error =setxattr_copy (name, &ctx);
@@ -810,16 +808,11 @@ SYSCALL_DEFINE4(lgetxattr, const char __ SYSCALL_DEFINE4(fgetxattr, int, fd, const char __user *, name, void __user *, value, size_t, size) { -struct fd f =fdget (fd); -ssize_t error = -EBADF ; +CLASS (fd, f)(fd); -if (!f.file) -return error;audit_file (f.file); - error =getxattr (file_mnt_idmap (f.file), f.file->f_path.dentry, +return getxattr (file_mnt_idmap (f.file), f.file->f_path.dentry, name, value, size); -fdput (f); -return error; }/*
@@ -886,15 +879,10 @@ SYSCALL_DEFINE3(llistxattr, const char _ SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size) { -struct fd f =fdget (fd); -ssize_t error = -EBADF ; +CLASS (fd, f)(fd); -if (!f.file) -return error;audit_file (f.file); - error =listxattr (f.file->f_path.dentry, list, size); -fdput (f); -return error; +return listxattr (f.file->f_path.dentry, list, size); }/*
@@ -951,12 +939,10 @@ SYSCALL_DEFINE2(lremovexattr, const char SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name) { -struct fd f =fdget (fd); +CLASS (fd, f)(fd);char kname[XATTR_NAME_MAX +1 ]; -int error = -EBADF ; +int error; -if (!f.file) -return error;audit_file (f.file); error =strncpy_from_user (kname, name,sizeof (kname));
@@ -971,7 +957,6 @@ SYSCALL_DEFINE2(fremovexattr, int, fd, c f.file->f_path.dentry, kname);mnt_drop_write_file (f.file); } -fdput (f);return error; }
Greg Kroah-Hartman
maintainerPATCH 155/175 nvme: fix admin queue leak on controller reset
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ming Lei <[email protected]>
[ Upstream commit b84bb7bd913d8ca2f976ee6faf4a174f91c02b8d ]
When nvme_alloc_admin_tag_set() is called during a controller reset, a previous admin queue may still exist. Release it properly before allocating a new one to avoid orphaning the old queue.
This fixes a regression introduced by commit 03b3bcd319b3 ("nvme: fix admin request_queue lifetime").
--- drivers/nvme/host/core.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/nvme/host/core.c +7 -0
@@ -4287,6 +4287,13 @@ int nvme_alloc_admin_tag_set(struct nvmeif (ret)return ret; +/* +* If a previous admin queue exists (e.g., from before a reset), +* put it now before allocating a new one to avoid orphaning it. +*/ +if (ctrl->admin_q) +blk_put_queue (ctrl->admin_q); + ctrl->admin_q =blk_mq_init_queue (set);if (IS_ERR (ctrl->admin_q)) { ret =PTR_ERR (ctrl->admin_q);
Greg Kroah-Hartman
maintainerPATCH 156/175 mm/damon/sysfs: check contexts->nr before accessing contexts_arr[0]
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josh Law <[email protected]>
commit 1bfe9fb5ed2667fb075682408b776b5273162615 upstream.
Multiple sysfs command paths dereference contexts_arr[0] without first verifying that kdamond->contexts->nr == 1. A user can set nr_contexts to 0 via sysfs while DAMON is running, causing NULL pointer dereferences.
In more detail, the issue can be triggered by privileged users like below.
First, start DAMON and make contexts directory empty (kdamond->contexts->nr == 0).
# damo start
# cd /sys/kernel/mm/damon/admin/kdamonds/0
# echo 0 > contexts/nr_contextsThen, each of below commands will cause the NULL pointer dereference.
# echo update_schemes_stats > state
# echo update_schemes_tried_regions > state
# echo update_schemes_tried_bytes > state
# echo update_schemes_effective_quotas > state
# echo update_tuned_intervals > stateGuard all commands (except OFF) at the entry point of damon_sysfs_handle_cmd().
--- mm/damon/sysfs.c | 3 +++ 1 file changed, 3 insertions(+)
mm/damon/sysfs.c +3 -0
@@ -1494,6 +1494,9 @@ static int damon_sysfs_handle_cmd(enum d {bool need_wait = true; +if (cmd !=DAMON_SYSFS_CMD_OFF && kdamond->contexts->nr !=1 ) +return -EINVAL ; +/* Handle commands that doesn't access DAMON context-internal data */ switch (cmd) {case DAMON_SYSFS_CMD_ON :
Greg Kroah-Hartman
maintainerPATCH 157/175 xfs: avoid dereferencing log items after push callbacks
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yuto Ohnuki <[email protected]>
commit 79ef34ec0554ec04bdbafafbc9836423734e1bd6 upstream.
After xfsaild_push_item() calls iop_push(), the log item may have been freed if the AIL lock was dropped during the push. Background inode reclaim or the dquot shrinker can free the log item while the AIL lock is not held, and the tracepoints in the switch statement dereference the log item after iop_push() returns.
Fix this by capturing the log item type, flags, and LSN before calling xfsaild_push_item(), and introducing a new xfs_ail_push_class trace event class that takes these pre-captured values and the ailp pointer instead of the log item pointer.
--- fs/xfs/xfs_trace.c | 1 + fs/xfs/xfs_trace.h | 36 ++++++++++++++++++++++++++++++++---- fs/xfs/xfs_trans_ail.c | 26 +++++++++++++++++++------- 3 files changed, 52 insertions(+), 11 deletions(-)
fs/xfs/xfs_trace.c +1 -0
@@ -22,6 +22,7 @@#include "xfs_trans.h" #include "xfs_log.h" #include "xfs_log_priv.h" +#include "xfs_trans_priv.h" #include "xfs_buf_item.h" #include "xfs_quota.h" #include "xfs_dquot_item.h"
fs/xfs/xfs_trace.h +32 -4
@@ -50,6 +50,7 @@#include <linux/tracepoint.h> struct xfs_agf ; +struct xfs_ail ;struct xfs_alloc_arg ;struct xfs_attr_list_context ;struct xfs_buf_log_item ;
@@ -1332,14 +1333,41 @@ TRACE_EVENT(xfs_log_force,DEFINE_EVENT (xfs_log_item_class, name, \ TP_PROTO(struct xfs_log_item *lip), \ TP_ARGS(lip)) -DEFINE_LOG_ITEM_EVENT (xfs_ail_push); -DEFINE_LOG_ITEM_EVENT (xfs_ail_pinned); -DEFINE_LOG_ITEM_EVENT (xfs_ail_locked); -DEFINE_LOG_ITEM_EVENT (xfs_ail_flushing);DEFINE_LOG_ITEM_EVENT (xfs_cil_whiteout_mark);DEFINE_LOG_ITEM_EVENT (xfs_cil_whiteout_skip);DEFINE_LOG_ITEM_EVENT (xfs_cil_whiteout_unpin); +DECLARE_EVENT_CLASS (xfs_ail_push_class, + TP_PROTO(struct xfs_ail *ailp, uint type, unsigned long flags, xfs_lsn_t lsn), +TP_ARGS (ailp, type, flags, lsn), +TP_STRUCT__entry ( + __field(dev_t, dev) + __field(uint, type) + __field(unsigned long, flags) +__field (xfs_lsn_t, lsn) + ), +TP_fast_assign ( + __entry->dev = ailp->ail_log->l_mp->m_super->s_dev; + __entry->type = type; + __entry->flags = flags; + __entry->lsn = lsn; + ), +TP_printk ("dev %d:%d lsn %d/%d type %s flags %s" , +MAJOR (__entry->dev),MINOR (__entry->dev), +CYCLE_LSN (__entry->lsn),BLOCK_LSN (__entry->lsn), +__print_symbolic (__entry->type,XFS_LI_TYPE_DESC ), +__print_flags (__entry->flags,"|" ,XFS_LI_FLAGS )) +) + +#define DEFINE_AIL_PUSH_EVENT (name) \ +DEFINE_EVENT(xfs_ail_push_class, name, \ + TP_PROTO(struct xfs_ail *ailp, uint type, unsigned long flags, xfs_lsn_t lsn), \ + TP_ARGS(ailp, type, flags, lsn)) +DEFINE_AIL_PUSH_EVENT (xfs_ail_push); +DEFINE_AIL_PUSH_EVENT (xfs_ail_pinned); +DEFINE_AIL_PUSH_EVENT (xfs_ail_locked); +DEFINE_AIL_PUSH_EVENT (xfs_ail_flushing); + DECLARE_EVENT_CLASS(xfs_ail_class, TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn), TP_ARGS(lip, old_lsn, new_lsn),
fs/xfs/xfs_trans_ail.c +19 -7
@@ -389,6 +389,12 @@ xfsaild_resubmit_item(return XFS_ITEM_SUCCESS ; } +/* +* Push a single log item from the AIL. +* +* @lip may have been released and freed by the time this function returns, +* so callers must not dereference the log item afterwards. +*/ static inline uint xfsaild_push_item( struct xfs_ail *ailp,
@@ -476,20 +482,26 @@ xfsaild_push( lsn = lip->li_lsn;while ((XFS_LSN_CMP (lip->li_lsn, target) <=0 )) { -int lock_result; +int lock_result; +uint type = lip->li_type; +unsigned long flags = lip->li_flags; +xfs_lsn_t item_lsn = lip->li_lsn;/* * Note that iop_push may unlock and reacquire the AIL lock. We * rely on the AIL cursor implementation to be able to deal with * the dropped lock. +* +* The log item may have been freed by the push, so it must not +* be accessed or dereferenced below this line. */ lock_result =xfsaild_push_item (ailp, lip);switch (lock_result) {case XFS_ITEM_SUCCESS :XFS_STATS_INC (mp, xs_push_ail_success); -trace_xfs_ail_push (lip); +trace_xfs_ail_push (ailp, type, flags, item_lsn); - ailp->ail_last_pushed_lsn = lsn; + ailp->ail_last_pushed_lsn = item_lsn;break ;case XFS_ITEM_FLUSHING :
@@ -505,22 +517,22 @@ xfsaild_push(* AIL is being flushed. */ XFS_STATS_INC (mp, xs_push_ail_flushing); -trace_xfs_ail_flushing (lip); +trace_xfs_ail_flushing (ailp, type, flags, item_lsn); flushing++; - ailp->ail_last_pushed_lsn = lsn; + ailp->ail_last_pushed_lsn = item_lsn;break ;case XFS_ITEM_PINNED :XFS_STATS_INC (mp, xs_push_ail_pinned); -trace_xfs_ail_pinned (lip); +trace_xfs_ail_pinned (ailp, type, flags, item_lsn); stuck++; ailp->ail_log_flush++;break ;case XFS_ITEM_LOCKED :XFS_STATS_INC (mp, xs_push_ail_locked); -trace_xfs_ail_locked (lip); +trace_xfs_ail_locked (ailp, type, flags, item_lsn); stuck++;break ;
Greg Kroah-Hartman
maintainerPATCH 158/175 xfs: save ailp before dropping the AIL lock in push callbacks
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yuto Ohnuki <[email protected]>
commit 394d70b86fae9fe865e7e6d9540b7696f73aa9b6 upstream.
In xfs_inode_item_push() and xfs_qm_dquot_logitem_push(), the AIL lock is dropped to perform buffer IO. Once the cluster buffer no longer protects the log item from reclaim, the log item may be freed by background reclaim or the dquot shrinker. The subsequent spin_lock() call dereferences lip->li_ailp, which is a use-after-free.
Fix this by saving the ailp pointer in a local variable while the AIL lock is held and the log item is guaranteed to be valid.
--- fs/xfs/xfs_dquot_item.c | 9 +++++++-- fs/xfs/xfs_inode_item.c | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-)
fs/xfs/xfs_dquot_item.c +7 -2
@@ -125,6 +125,7 @@ xfs_qm_dquot_logitem_push( {struct xfs_dquot *dqp =DQUOT_ITEM (lip)->qli_dquot;struct xfs_buf *bp = lip->li_buf; +struct xfs_ail *ailp = lip->li_ailp;uint rval =XFS_ITEM_SUCCESS ;int error;
@@ -153,7 +154,7 @@ xfs_qm_dquot_logitem_push( goto out_unlock; } -spin_unlock (&lip->li_ailp->ail_lock); +spin_unlock (&ailp->ail_lock); error =xfs_qm_dqflush (dqp, &bp);if (!error) {
@@ -163,7 +164,11 @@ xfs_qm_dquot_logitem_push( }else if (error == -EAGAIN ) rval =XFS_ITEM_LOCKED ; -spin_lock (&lip->li_ailp->ail_lock); +/* +* The buffer no longer protects the log item from reclaim, so +* do not reference lip after this point. +*/ +spin_lock (&ailp->ail_lock); out_unlock:xfs_dqunlock (dqp);return rval;
fs/xfs/xfs_inode_item.c +7 -2
@@ -727,6 +727,7 @@ xfs_inode_item_push(struct xfs_inode_log_item *iip =INODE_ITEM (lip);struct xfs_inode *ip = iip->ili_inode;struct xfs_buf *bp = lip->li_buf; +struct xfs_ail *ailp = lip->li_ailp;uint rval =XFS_ITEM_SUCCESS ;int error;
@@ -749,7 +750,7 @@ xfs_inode_item_push(if (!xfs_buf_trylock (bp))return XFS_ITEM_LOCKED ; -spin_unlock (&lip->li_ailp->ail_lock); +spin_unlock (&ailp->ail_lock);/* * We need to hold a reference for flushing the cluster buffer as it may
@@ -773,7 +774,11 @@ xfs_inode_item_push( rval =XFS_ITEM_LOCKED ; } -spin_lock (&lip->li_ailp->ail_lock); +/* +* The buffer no longer protects the log item from reclaim, so +* do not reference lip after this point. +*/ +spin_lock (&ailp->ail_lock);return rval; }
Greg Kroah-Hartman
maintainerPATCH 159/175 erofs: fix "BUG: Bad page state in z_erofs_do_read_page"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gao Xiang <[email protected]>
It's actually a stable-only issue from backporting 9e2f9d34dd12 ("erofs: handle overlapped pclusters out of crafted images properly")
We missed to update oldpage after pcl->compressed_bvecs[nr].page is updated, so that the following cmpxchg() will fail; the original upstream commit doesn't behave like this due to new features and refactoring.
This backport issue only impacts some specific crafted images and normal filesystems won't be impacted at all.
[1] https://lore.kernel.org/r/[email protected]
--- fs/erofs/zdata.c | 1 + 1 file changed, 1 insertion(+)
fs/erofs/zdata.c +1 -0
@@ -1503,6 +1503,7 @@ repeat:lock_page (page);if (likely (page->mapping == mc)) {WRITE_ONCE (pcl->compressed_bvecs[nr].page, page); + oldpage = page;/* * The cached folio is still in managed cache but without
Greg Kroah-Hartman
maintainerPATCH 160/175 dmaengine: idxd: Fix not releasing workqueue on .release()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vinicius Costa Gomes <[email protected]>
[ Upstream commit 3d33de353b1ff9023d5ec73b9becf80ea87af695 ]
The workqueue associated with an DSA/IAA device is not released when the object is freed.
--- drivers/dma/idxd/sysfs.c | 1 + 1 file changed, 1 insertion(+)
drivers/dma/idxd/sysfs.c +1 -0
@@ -1810,6 +1810,7 @@ static void idxd_conf_device_release(struct device *dev) {struct idxd_device *idxd =confdev_to_idxd (dev); +destroy_workqueue (idxd->wq);kfree (idxd->groups);bitmap_free (idxd->wq_enable_map);kfree (idxd->wqs);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 161/175 dmaengine: idxd: Fix memory leak when a wq is reset
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vinicius Costa Gomes <[email protected]>
[ Upstream commit d9cfb5193a047a92a4d3c0e91ea4cc87c8f7c478 ]
idxd_wq_disable_cleanup() which is called from the reset path for a workqueue, sets the wq type to NONE, which for other parts of the driver mean that the wq is empty (all its resources were released).
Only set the wq type to NONE after its resources are released.
--- drivers/dma/idxd/device.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/dma/idxd/device.c +1 -2
@@ -173,6 +173,7 @@ void idxd_wq_free_resources(struct idxd_wq *wq)free_descs (wq);dma_free_coherent (dev, wq->compls_size, wq->compls, wq->compls_addr);sbitmap_queue_free (&wq->sbq); + wq->type =IDXD_WQT_NONE ; }int idxd_wq_enable (struct idxd_wq *wq)
@@ -365,7 +366,6 @@ static void idxd_wq_disable_cleanup(struct idxd_wq *wq)lockdep_assert_held (&wq->wq_lock); wq->state =IDXD_WQ_DISABLED ;memset (wq->wqcfg,0 , idxd->wqcfg_size); - wq->type =IDXD_WQT_NONE ; wq->threshold =0 ; wq->priority =0 ; wq->enqcmds_retries =IDXD_ENQCMDS_RETRIES ;
@@ -1507,7 +1507,6 @@ void drv_disable_wq(struct idxd_wq *wq)idxd_wq_reset (wq);idxd_wq_free_resources (wq);percpu_ref_exit (&wq->wq_active); - wq->type =IDXD_WQT_NONE ; wq->client_count =0 ; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 162/175 phy: ti: j721e-wiz: Fix device node reference leak in wiz_get_lane_phy_types()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Felix Gu <[email protected]>
[ Upstream commit 584b457f4166293bdfa50f930228e9fb91a38392 ]
The serdes device_node is obtained using of_get_child_by_name(), which increments the reference count. However, it is never put, leading to a reference leak.
Add the missing of_node_put() calls to ensure the reference count is properly balanced.
--- drivers/phy/ti/phy-j721e-wiz.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/phy/ti/phy-j721e-wiz.c +2 -0
@@ -1424,6 +1424,7 @@ static int wiz_get_lane_phy_types(struct device *dev, struct wiz *wiz)dev_err (dev,"%s: Reading \"reg\" from \"%s\" failed: %d\n" , __func__, subnode->name, ret); +of_node_put (serdes);return ret; }of_property_read_u32 (subnode,"cdns,num-lanes" , &num_lanes);
@@ -1438,6 +1439,7 @@ static int wiz_get_lane_phy_types(struct device *dev, struct wiz *wiz) } } +of_node_put (serdes);return 0 ; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 163/175 dmaengine: dw-edma: Fix multiple times setting of the CYCLE_STATE and CYCLE_BIT bits for HDMA.
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: LUO Haowen <[email protected]>
[ Upstream commit 3f63297ff61a994b99d710dcb6dbde41c4003233 ]
Others have submitted this issue (https://lore.kernel.org/dmaengine/
[email protected]/),
but it has not been fixed yet. Therefore, more supplementary information is provided here.
As mentioned in the "PCS-CCS-CB-TCB" Producer-Consumer Synchronization of "DesignWare Cores PCI Express Controller Databook, version 6.00a":
1. The Consumer CYCLE_STATE (CCS) bit in the register only needs to be initialized once; the value will update automatically to be ~CYCLE_BIT (CB) in the next chunk.
2. The Consumer CYCLE_BIT bit in the register is loaded from the LL element and tested against CCS. When CB = CCS, the data transfer is executed. Otherwise not.
The current logic sets customer (HDMA) CS and CB bits to 1 in each chunk while setting the producer (software) CB of odd chunks to 0 and even chunks to 1 in the linked list. This is leading to a mismatch between the producer CB and consumer CS bits.
This issue can be reproduced by setting the transmission data size to exceed one chunk. By the way, in the EDMA using the same "PCS-CCS-CB-TCB" mechanism, the CS bit is only initialized once and this issue was not found. Refer to drivers/dma/dw-edma/dw-edma-v0-core.c:dw_edma_v0_core_start.
So fix this issue by initializing the CYCLE_STATE and CYCLE_BIT bits only once.
--- drivers/dma/dw-edma/dw-hdma-v0-core.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/dma/dw-edma/dw-hdma-v0-core.c +3 -3
@@ -252,10 +252,10 @@ static void dw_hdma_v0_core_start(struct dw_edma_chunk *chunk, bool first) lower_32_bits(chunk->ll_region.paddr));SET_CH_32 (dw, chan->dir, chan->id, llp.msb,upper_32_bits (chunk->ll_region.paddr)); +/* Set consumer cycle */ +SET_CH_32 (dw, chan->dir, chan->id, cycle_sync, +HDMA_V0_CONSUMER_CYCLE_STAT |HDMA_V0_CONSUMER_CYCLE_BIT ); } -/* Set consumer cycle */ -SET_CH_32 (dw, chan->dir, chan->id, cycle_sync, -HDMA_V0_CONSUMER_CYCLE_STAT |HDMA_V0_CONSUMER_CYCLE_BIT );dw_hdma_v0_sync_ll_data (chunk);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 164/175 dmaengine: xilinx: xdma: Fix regmap init error handling
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Stein <[email protected]>
[ Upstream commit e0adbf74e2a0455a6bc9628726ba87bcd0b42bf8 ]
devm_regmap_init_mmio returns an ERR_PTR() upon error, not NULL. Fix the error check and also fix the error message. Use the error code from ERR_PTR() instead of the wrong value in ret.
--- drivers/dma/xilinx/xdma.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/dma/xilinx/xdma.c +2 -2
@@ -901,8 +901,8 @@ static int xdma_probe(struct platform_device *pdev) xdev->rmap =devm_regmap_init_mmio (&pdev->dev, reg_base, &xdma_regmap_config); -if (!xdev->rmap) { -xdma_err (xdev,"config regmap failed: %d" , ret); +if (IS_ERR (xdev->rmap)) { +xdma_err (xdev,"config regmap failed: %pe" , xdev->rmap); goto failed; }INIT_LIST_HEAD (&xdev->dma_dev.channels);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 165/175 dmaengine: xilinx: xilinx_dma: Fix dma_device directions
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Vasut <[email protected]>
[ Upstream commit e9cc95397bb7da13fe8a5b53a2f23cfaf9018ade ]
Unlike chan->direction , struct dma_device .directions field is a bitfield. Turn chan->direction into a bitfield to make it compatible with struct dma_device .directions .
--- drivers/dma/xilinx/xilinx_dma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/dma/xilinx/xilinx_dma.c +1 -1
@@ -2901,7 +2901,7 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev,return -EINVAL ; } - xdev->common.directions |= chan->direction; + xdev->common.directions |=BIT (chan->direction);/* Request the interrupt */ chan->irq =of_irq_get (node, chan->tdest);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 166/175 dmaengine: xilinx: xilinx_dma: Fix residue calculation for cyclic DMA
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Vasut <[email protected]>
[ Upstream commit f61d145999d61948a23cd436ebbfa4c3b9ab8987 ]
The cyclic DMA calculation is currently entirely broken and reports residue only for the first segment. The problem is twofold.
First, when the first descriptor finishes, it is moved from active_list to done_list, but it is never returned back into the active_list. The xilinx_dma_tx_status() expects the descriptor to be in the active_list to report any meaningful residue information, which never happens after the first descriptor finishes. Fix this up in xilinx_dma_start_transfer() and if the descriptor is cyclic, lift it from done_list and place it back into active_list list.
Second, the segment .status fields of the descriptor remain dirty. Once the DMA did one pass on the descriptor, the .status fields are populated with data by the DMA, but the .status fields are not cleared before reuse during the next cyclic DMA round. The xilinx_dma_get_residue() recognizes that as if the descriptor was complete and had 0 residue, which is bogus. Reinitialize the status field before placing the descriptor back into the active_list.
--- drivers/dma/xilinx/xilinx_dma.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-)
drivers/dma/xilinx/xilinx_dma.c +22 -1
@@ -1541,8 +1541,29 @@ static void xilinx_dma_start_transfer(struct xilinx_dma_chan *chan)if (chan->err)return ; -if (list_empty (&chan->pending_list)) +if (list_empty (&chan->pending_list)) { +if (chan->cyclic) { +struct xilinx_dma_tx_descriptor *desc; +struct list_head *entry; + + desc =list_last_entry (&chan->done_list, + struct xilinx_dma_tx_descriptor, node); +list_for_each (entry, &desc->segments) { +struct xilinx_axidma_tx_segment *axidma_seg; +struct xilinx_axidma_desc_hw *axidma_hw; + axidma_seg =list_entry (entry, + struct xilinx_axidma_tx_segment, + node); + axidma_hw = &axidma_seg->hw; + axidma_hw->status =0 ; + } + +list_splice_tail_init (&chan->done_list, &chan->active_list); + chan->desc_pendingcount =0 ; + chan->idle = false; + }return ; + }if (!chan->idle)return ;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 167/175 dmaengine: xilinx: xilinx_dma: Fix unmasked residue subtraction
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Vasut <[email protected]>
[ Upstream commit c7d812e33f3e8ca0fa9eeabf71d1c7bc3acedc09 ]
The segment .control and .status fields both contain top bits which are not part of the buffer size, the buffer size is located only in the bottom max_buffer_len bits. To avoid interference from those top bits, mask out the size using max_buffer_len first, and only then subtract the values.
--- drivers/dma/xilinx/xilinx_dma.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/dma/xilinx/xilinx_dma.c +6 -6
@@ -994,16 +994,16 @@ static u32 xilinx_dma_get_residue(struct xilinx_dma_chan *chan, struct xilinx_cdma_tx_segment, node); cdma_hw = &cdma_seg->hw; - residue += (cdma_hw->control - cdma_hw->status) & - chan->xdev->max_buffer_len; + residue += (cdma_hw->control & chan->xdev->max_buffer_len) - + (cdma_hw->status & chan->xdev->max_buffer_len); }else if (chan->xdev->dma_config->dmatype ==XDMA_TYPE_AXIDMA ) { axidma_seg =list_entry (entry, struct xilinx_axidma_tx_segment, node); axidma_hw = &axidma_seg->hw; - residue += (axidma_hw->control - axidma_hw->status) & - chan->xdev->max_buffer_len; + residue += (axidma_hw->control & chan->xdev->max_buffer_len) - + (axidma_hw->status & chan->xdev->max_buffer_len); }else { aximcdma_seg = list_entry(entry,
@@ -1011,8 +1011,8 @@ static u32 xilinx_dma_get_residue(struct xilinx_dma_chan *chan, node); aximcdma_hw = &aximcdma_seg->hw; residue += - (aximcdma_hw->control - aximcdma_hw->status) & - chan->xdev->max_buffer_len; + (aximcdma_hw->control & chan->xdev->max_buffer_len) - + (aximcdma_hw->status & chan->xdev->max_buffer_len); } }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 168/175 dmaengine: xilinx_dma: Fix reset related timeout with two-channel AXIDMA
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tomi Valkeinen <[email protected]>
[ Upstream commit a17ce4bc6f4f9acf77ba416c36791a15602e53aa ]
A single AXIDMA controller can have one or two channels. When it has two channels, the reset for both are tied together: resetting one channel resets the other as well. This creates a problem where resetting one channel will reset the registers for both channels, including clearing interrupt enable bits for the other channel, which can then lead to timeouts as the driver is waiting for an interrupt which never comes.
The driver currently has a probe-time work around for this: when a channel is created, the driver also resets and enables the interrupts. With two channels the reset for the second channel will clear the interrupt enables for the first one. The work around in the driver is just to manually enable the interrupts again in xilinx_dma_alloc_chan_resources().
This workaround only addresses the probe-time issue. When channels are reset at runtime (e.g., in xilinx_dma_terminate_all() or during error recovery), there's no corresponding mechanism to restore the other channel's interrupt enables. This leads to one channel having its interrupts disabled while the driver expects them to work, causing timeouts and DMA failures.
A proper fix is a complicated matter, as we should not reset the other channel when it's operating normally. So, perhaps, there should be some kind of synchronization for a common reset, which is not trivial to implement. To add to the complexity, the driver also supports other DMA types, like VDMA, CDMA and MCDMA, which don't have a shared reset.
However, when the two-channel AXIDMA is used in the (assumably) normal use case, providing DMA for a single memory-to-memory device, the common reset is a bit smaller issue: when something bad happens on one channel, or when one channel is terminated, the assumption is that we also want to terminate the other channel. And thus resetting both at the same time is "ok".
With that line of thinking we can implement a bit better work around than just the current probe time work around: let's enable the AXIDMA interrupts at xilinx_dma_start_transfer() instead. This ensures interrupts are enabled whenever a transfer starts, regardless of any prior resets that may have cleared them.
This approach is also more logical: enable interrupts only when needed for a transfer, rather than at resource allocation time, and, I think, all the other DMA types should also use this model, but I'm reluctant to do such changes as I cannot test them.
The reset function still enables interrupts even though it's not needed for AXIDMA anymore, but it's common code for all DMA types (VDMA, CDMA, MCDMA), so leave it unchanged to avoid affecting other variants.
--- drivers/dma/xilinx/xilinx_dma.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-)
drivers/dma/xilinx/xilinx_dma.c +1 -8
@@ -1214,14 +1214,6 @@ static int xilinx_dma_alloc_chan_resources(struct dma_chan *dchan)dma_cookie_init (dchan); -if (chan->xdev->dma_config->dmatype ==XDMA_TYPE_AXIDMA ) { -/* For AXI DMA resetting once channel will reset the -* other channel as well so enable the interrupts here. -*/ -dma_ctrl_set (chan,XILINX_DMA_REG_DMACR , -XILINX_DMA_DMAXR_ALL_IRQ_MASK ); - } -if ((chan->xdev->dma_config->dmatype ==XDMA_TYPE_CDMA ) && chan->has_sg)dma_ctrl_set (chan,XILINX_DMA_REG_DMACR ,XILINX_CDMA_CR_SGMODE );
@@ -1589,6 +1581,7 @@ static void xilinx_dma_start_transfer(struct xilinx_dma_chan *chan) head_desc->async_tx.phys); reg &= ~XILINX_DMA_CR_DELAY_MAX ; reg |= chan->irq_delay <<XILINX_DMA_CR_DELAY_SHIFT ; + reg |=XILINX_DMA_DMAXR_ALL_IRQ_MASK ;dma_ctrl_write (chan,XILINX_DMA_REG_DMACR , reg);xilinx_dma_start (chan);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 169/175 btrfs: fix super block offset in error message in btrfs_validate_super()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Harmstone <[email protected]>
[ Upstream commit b52fe51f724385b3ed81e37e510a4a33107e8161 ]
Fix the superblock offset mismatch error message in btrfs_validate_super(): we changed it so that it considers all the superblocks, but the message still assumes we're only looking at the first one.
The change from %u to %llu is because we're changing from a constant to a u64.
--- fs/btrfs/disk-io.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/btrfs/disk-io.c +2 -2
@@ -2444,8 +2444,8 @@ int btrfs_validate_super(struct btrfs_fs_info *fs_info,if (mirror_num >=0 &&btrfs_super_bytenr (sb) !=btrfs_sb_offset (mirror_num)) { -btrfs_err (fs_info,"super offset mismatch %llu != %u" , -btrfs_super_bytenr (sb),BTRFS_SUPER_INFO_OFFSET ); +btrfs_err (fs_info,"super offset mismatch %llu != %llu" , +btrfs_super_bytenr (sb),btrfs_sb_offset (mirror_num)); ret = -EINVAL ; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 170/175 btrfs: fix leak of kobject name for sub-group space_info
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shin'ichiro Kawasaki <[email protected]>
[ Upstream commit a4376d9a5d4c9610e69def3fc0b32c86a7ab7a41 ]
When create_space_info_sub_group() allocates elements of space_info->sub_group[], kobject_init_and_add() is called for each element via btrfs_sysfs_add_space_info_type(). However, when check_removing_space_info() frees these elements, it does not call btrfs_sysfs_remove_space_info() on them. As a result, kobject_put() is not called and the associated kobj->name objects are leaked.
This memory leak is reproduced by running the blktests test case zbd/009 on kernels built with CONFIG_DEBUG_KMEMLEAK. The kmemleak feature reports the following error:
unreferenced object 0xffff888112877d40 (size 16):
comm "mount", pid 1244, jiffies 4294996972
hex dump (first 16 bytes):
64 61 74 61 2d 72 65 6c 6f 63 00 c4 c6 a7 cb 7f data-reloc......
backtrace (crc 53ffde4d):
__kmalloc_node_track_caller_noprof+0x619/0x870
kstrdup+0x42/0xc0
kobject_set_name_vargs+0x44/0x110
kobject_init_and_add+0xcf/0x150
btrfs_sysfs_add_space_info_type+0xfc/0x210 [btrfs]
create_space_info_sub_group.constprop.0+0xfb/0x1b0 [btrfs]
create_space_info+0x211/0x320 [btrfs]
btrfs_init_space_info+0x15a/0x1b0 [btrfs]
open_ctree+0x33c7/0x4a50 [btrfs]
btrfs_get_tree.cold+0x9f/0x1ee [btrfs]
vfs_get_tree+0x87/0x2f0
vfs_cmd_create+0xbd/0x280
__do_sys_fsconfig+0x3df/0x990
do_syscall_64+0x136/0x1540
entry_SYSCALL_64_after_hwframe+0x76/0x7eTo avoid the leak, call btrfs_sysfs_remove_space_info() instead of kfree() for the elements.
--- fs/btrfs/block-group.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/btrfs/block-group.c +1 -1
@@ -4386,7 +4386,7 @@ static void check_removing_space_info(struct btrfs_space_info *space_info)for (int i =0 ; i <BTRFS_SPACE_INFO_SUB_GROUP_MAX ; i++) {if (space_info->sub_group[i]) {check_removing_space_info (space_info->sub_group[i]); -kfree (space_info->sub_group[i]); +btrfs_sysfs_remove_space_info (space_info->sub_group[i]); space_info->sub_group[i] =NULL ; } }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 171/175 btrfs: fix lost error when running device stats on multiple devices fs
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Filipe Manana <[email protected]>
[ Upstream commit 1c37d896b12dfd0d4c96e310b0033c6676933917 ]
Whenever we get an error updating the device stats item for a device in btrfs_run_dev_stats() we allow the loop to go to the next device, and if updating the stats item for the next device succeeds, we end up losing the error we had from the previous device.
Fix this by breaking out of the loop once we get an error and make sure it's returned to the caller. Since we are in the transaction commit path (and in the critical section actually), returning the error will result in a transaction abort.
--- fs/btrfs/volumes.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
fs/btrfs/volumes.c +3 -2
@@ -7641,8 +7641,9 @@ int btrfs_run_dev_stats(struct btrfs_trans_handle *trans)smp_rmb (); ret =update_dev_stat_item (trans, device); -if (!ret) -atomic_sub (stats_cnt, &device->dev_stats_ccnt); +if (ret) +break ; +atomic_sub (stats_cnt, &device->dev_stats_ccnt); }mutex_unlock (&fs_devices->device_list_mutex);
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 172/175 dmaengine: idxd: Remove usage of the deprecated ida_simple_xx() API
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit 1075ee66a8c19bfa375b19c236fd6a22a867f138 ]
ida_alloc() and ida_free() should be preferred to the deprecated ida_simple_get() and ida_simple_remove().
This is less verbose.
Note that the upper limit of ida_simple_get() is exclusive, but the one of ida_alloc_range() is inclusive. Sothis change allows one more device.
MINORMASK is ((1U << MINORBITS) - 1), so allowing MINORMASK as a maximum value makes sense. It is also consistent with other "ida_.*MINORMASK" and "ida_*MINOR()" usages.
Stable-dep-of: c311f5e92484 ("dmaengine: idxd: Fix freeing the allocated ida too late")
--- drivers/dma/idxd/cdev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/dma/idxd/cdev.c +2 -2
@@ -165,7 +165,7 @@ static void idxd_cdev_dev_release(struct device *dev)struct idxd_wq *wq = idxd_cdev->wq; cdev_ctx = &ictx[wq->idxd->data->type]; -ida_simple_remove (&cdev_ctx->minor_ida, idxd_cdev->minor); +ida_free (&cdev_ctx->minor_ida, idxd_cdev->minor);kfree (idxd_cdev); }
@@ -550,7 +550,7 @@ int idxd_wq_add_cdev(struct idxd_wq *wq) cdev = &idxd_cdev->cdev; dev =cdev_dev (idxd_cdev); cdev_ctx = &ictx[wq->idxd->data->type]; - minor =ida_simple_get (&cdev_ctx->minor_ida,0 ,MINORMASK ,GFP_KERNEL ); + minor =ida_alloc_max (&cdev_ctx->minor_ida,MINORMASK ,GFP_KERNEL );if (minor <0 ) {kfree (idxd_cdev);return minor;
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 173/175 dmaengine: idxd: Fix freeing the allocated ida too late
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vinicius Costa Gomes <[email protected]>
[ Upstream commit c311f5e9248471a950f0a524c2fd736414d98900 ]
It can happen that when the cdev .release() is called, the driver already called ida_destroy(). Move ida_free() to the _del() path.
We see with DEBUG_KOBJECT_RELEASE enabled and forcing an early PCI unbind.
--- drivers/dma/idxd/cdev.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/dma/idxd/cdev.c +4 -4
@@ -161,11 +161,7 @@ static struct device_type idxd_cdev_file_type = {static void idxd_cdev_dev_release (struct device *dev) {struct idxd_cdev *idxd_cdev =dev_to_cdev (dev); -struct idxd_cdev_context *cdev_ctx; -struct idxd_wq *wq = idxd_cdev->wq; - cdev_ctx = &ictx[wq->idxd->data->type]; -ida_free (&cdev_ctx->minor_ida, idxd_cdev->minor);kfree (idxd_cdev); }
@@ -585,11 +581,15 @@ int idxd_wq_add_cdev(struct idxd_wq *wq)void idxd_wq_del_cdev (struct idxd_wq *wq) { +struct idxd_cdev_context *cdev_ctx;struct idxd_cdev *idxd_cdev; idxd_cdev = wq->idxd_cdev; wq->idxd_cdev =NULL ;cdev_device_del (&idxd_cdev->cdev,cdev_dev (idxd_cdev)); + + cdev_ctx = &ictx[wq->idxd->data->type]; +ida_free (&cdev_ctx->minor_ida, idxd_cdev->minor);put_device (cdev_dev (idxd_cdev)); }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 174/175 futex: Clear stale exiting pointer in futex_lock_pi() retry path
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Davidlohr Bueso <[email protected]>
commit 210d36d892de5195e6766c45519dfb1e65f3eb83 upstream.
Fuzzying/stressing futexes triggered:
WARNING: kernel/futex/core.c:825 at wait_for_owner_exiting+0x7a/0x80, CPU#11: futex_lock_pi_s/524
When futex_lock_pi_atomic() sees the owner is exiting, it returns -EBUSY and stores a refcounted task pointer in 'exiting'.
After wait_for_owner_exiting() consumes that reference, the local pointer is never reset to nil. Upon a retry, if futex_lock_pi_atomic() returns a different error, the bogus pointer is passed to wait_for_owner_exiting().
CPU0 CPU1 CPU2
futex_lock_pi(uaddr)
// acquires the PI futex
exit()
futex_cleanup_begin()
futex_state = EXITING;
futex_lock_pi(uaddr)
futex_lock_pi_atomic()
attach_to_pi_owner()
// observes EXITING
*exiting = owner; // takes ref
return -EBUSY
wait_for_owner_exiting(-EBUSY, owner)
put_task_struct(); // drops ref
// exiting still points to owner
goto retry;
futex_lock_pi_atomic()
lock_pi_update_atomic()
cmpxchg(uaddr)
*uaddr ^= WAITERS // whatever
// value changed
return -EAGAIN;
wait_for_owner_exiting(-EAGAIN, exiting) // stale
WARN_ON_ONCE(exiting)Fix this by resetting upon retry, essentially aligning it with requeue_pi.
--- kernel/futex/pi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
kernel/futex/pi.c +2 -1
@@ -930,9 +930,9 @@ int fixup_pi_owner(u32 __user *uaddr, stint futex_lock_pi (u32 __user *uaddr,unsigned int flags,ktime_t *time,int trylock) {struct hrtimer_sleeper timeout, *to; -struct task_struct *exiting =NULL ;struct rt_mutex_waiter rt_waiter;struct futex_hash_bucket *hb; +struct task_struct *exiting;struct futex_q q = futex_q_init;int res, ret;
@@ -945,6 +945,7 @@ int futex_lock_pi(u32 __user *uaddr, uns to =futex_setup_timer (time, &timeout, flags,0 ); retry: + exiting =NULL ; ret =get_futex_key (uaddr, flags &FLAGS_SHARED , &q.key,FUTEX_WRITE );if (unlikely (ret !=0 )) goto out;
Greg Kroah-Hartman
maintainerPATCH 175/175 tcp: Fix bind() regression for v6-only wildcard and v4-mapped-v6 non-wildcard addresses.
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kuniyuki Iwashima <[email protected]>
commit ea111449501ea32bf6da82750de860243691efc7 upstream.
Commit 5e07e672412b ("tcp: Use bhash2 for v4-mapped-v6 non-wildcard address.") introduced bind() regression for v4-mapped-v6 address.
When we bind() the following two addresses on the same port, the 2nd bind() should succeed but fails now.
1. [::] w/ IPV6_ONLY
2. ::ffff:127.0.0.1
After the chagne, v4-mapped-v6 uses bhash2 instead of bhash to detect conflict faster, but I forgot to add a necessary change.
During the 2nd bind(), inet_bind2_bucket_match_addr_any() returns the tb2 bucket of [::], and inet_bhash2_conflict() finally calls inet_bind_conflict(), which returns true, meaning conflict.
inet_bhash2_addr_any_conflict
|- inet_bind2_bucket_match_addr_any <-- return [::] bucket `- inet_bhash2_conflict
`- __inet_bhash2_conflict <-- checks IPV6_ONLY for AF_INET
| but not for v4-mapped-v6 address
`- inet_bind_conflict <-- does not check address
inet_bind_conflict() does not check socket addresses because __inet_bhash2_conflict() is expected to do so.
However, it checks IPV6_V6ONLY attribute only against AF_INET socket, and not for v4-mapped-v6 address.
As a result, v4-mapped-v6 address conflicts with v6-only wildcard address.
To avoid that, let's add the missing test to use bhash2 for v4-mapped-v6 address.
--- net/ipv4/inet_connection_sock.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
net/ipv4/inet_connection_sock.c +9 -2
@@ -185,8 +185,15 @@ static bool __inet_bhash2_conflict(const kuid_t sk_uid, bool relax, bool reuseport_cb_ok, bool reuseport_ok) { - if (sk->sk_family == AF_INET && ipv6_only_sock(sk2)) - return false; + if (ipv6_only_sock(sk2)) { + if (sk->sk_family == AF_INET) + return false; + +#if IS_ENABLED (CONFIG_IPV6 ) +if (ipv6_addr_v4mapped (&sk->sk_v6_rcv_saddr)) +return false; +#endif + }return inet_bind_conflict (sk, sk2, sk_uid, relax, reuseport_cb_ok, reuseport_ok);
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.131 release. There are 175 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.131-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels, build tested on BMIPS_GENERIC:
Signature · 1 line
Florian
Am 31.03.2026 um 18:19 schrieb Greg Kroah-Hartman:
Quoted 4 lines
This is the start of the stable review cycle for the 6.6.131 release. There are 175 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Builds, boots and works on my 2-socket Ivy Bridge Xeon E5-2697 v2 server. No dmesg oddities or regressions found.
Beste Grüße,
Peter Schneider
Signature · 8 lines
Climb the mountain not to plant your flag, but to embrace the challenge, enjoy the air and behold the view. Climb it so you can see the world, not so the world can see you. -- David McCullough Jr. OpenPGP: 0xA3828BD796CCE11A8CADE8866E3A92C92C3FF244 Download: https://www.peters-netzplatz.de/download/pschneider1968_pub.asc https://keys.mailvelope.com/pks/lookup?op=get&[email protected] https://keys.mailvelope.com/pks/lookup?op=get&[email protected]
Quoted 7 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.131 release. There are 175 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.
test_progs, test_progs-no_alu32, test_progs-cpuv4, test_maps, test_verifier in BPF selftests all passes[1] on x86_64.
1: https://github.com/shunghsiyu/libbpf/actions/runs/23814574909/job/69410511554
[...]
# Librecast Test Results
020/020 [ OK ] liblcrq
010/010 [ OK ] libmld
120/120 [ OK ] liblibrecast
CPU/kernel: Linux auntie 6.6.131-rc1-g616fc3cb7c95 #1 SMP PREEMPT_DYNAMIC Wed Apr 1 07:22:11 -00 2026 x86_64 AMD Ryzen 9 9950X 16-Core Processor AuthenticAMD GNU/Linux
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.131 release. There are 175 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.131-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v6.6:
11 builds: 11 pass, 0 fail
28 boots: 28 pass, 0 fail
133 tests: 133 pass, 0 failLinux version: 6.6.131-rc1-g616fc3cb7c95
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra186-p3509-0000+p3636-0001, tegra194-p2972-0000,
tegra194-p3509-0000+p3668-0000, tegra20-ventana,
tegra210-p2371-2180, tegra210-p3450-0000,
tegra234-p3737-0000+p3701-0000, tegra30-cardhu-a04Jon
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.131 release. There are 175 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.131-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Built and booted successfully on RISC-V RV64 (HiFive Unmatched).
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.131 release. There are 175 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.131-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Tested on an amd64 laptop (Lenovo ThinkPad T14 Gen 1). Working well, no regressions observed.
Signature · 1 line
-Barry K. Nathan <[email protected]>
Quoted 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.131 release. There are 175 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Compiled and tested on
- Verdin iMX8MM
- Colibri iMX6
- Apalis iMX6
- Colibri iMX6ULL
- Colibri iMX7
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.131 release. There are 175 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.131-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.6.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 8 lines · On Tue, 31 Mar 2026 18:19:44 +0200 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 6.6.131 release. There are 175 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.
The pin-init change does not build:
error[E0425]: cannot find value `__refcount_guard` in this scope
--> rust/kernel/init/macros.rs:1320:25
|
1320 | @guards([< __ $field _guard >], $($guards,)*),
| ^^^^^^^^^^^^^^^^^^^^^^ not found in this scope
|
::: rust/kernel/sync/arc.rs:529:49
|
529 | let inner = Box::try_init::<AllocError>(try_init!(ArcInner {
| _________________________________________________-
530 | | // SAFETY: There are no safety requirements for this FFI call.
531 | | refcount: Opaque::new(unsafe { bindings::REFCOUNT_INIT(1) }),
532 | | data <- init::uninit::<T, AllocError>(),
533 | | }? AllocError))?;
| |______________________- in this macro invocation
|
= note: this error originates in the macro `$crate::__init_internal` which comes from the expansion of the macro `try_init` (in Nightly builds, run with -Z macro-backtrace for more info)(among other errors)
I would suggest dropping these for now:
0565326613fa ("rust: pin-init: internal: init: document load-bearing fact of field accessors") 66655aacfa42 ("rust: pin-init: add references to previously initialized fields")
Thanks!
Cheers,
Miguel
Greg KH
maintainerQuoted 32 lines · Miguel Ojeda
Quoted 8 lines · On Tue, 31 Mar 2026 18:19:44 +0200 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 6.6.131 release. There are 175 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.
The pin-init change does not build:
error[E0425]: cannot find value `__refcount_guard` in this scope --> rust/kernel/init/macros.rs:1320:25 | 1320 | @guards([< __ $field _guard >], $($guards,)*), | ^^^^^^^^^^^^^^^^^^^^^^ not found in this scope | ::: rust/kernel/sync/arc.rs:529:49 | 529 | let inner = Box::try_init::<AllocError>(try_init!(ArcInner { | _________________________________________________- 530 | | // SAFETY: There are no safety requirements for this FFI call. 531 | | refcount: Opaque::new(unsafe { bindings::REFCOUNT_INIT(1) }), 532 | | data <- init::uninit::<T, AllocError>(), 533 | | }? AllocError))?; | |______________________- in this macro invocation | = note: this error originates in the macro `$crate::__init_internal` which comes from the expansion of the macro `try_init` (in Nightly builds, run with -Z macro-backtrace for more info)(among other errors)
Quoted 7 lines
I would suggest dropping these for now:
0565326613fa("rust: pin-init: internal: init: document load-bearing fact of field accessors")66655aacfa42("rust: pin-init: add references to previously initialized fields")Cc Benno Lossin <[email protected]>Cc Gary Guo <[email protected]>
Crap, I just did a realease. Let me go revert these and do a new release with that fixed, sorry about that, I guess my builds weren't testing rust on older kernels, my fault :(
greg k-h
Quoted 38 lines · Greg KH
Quoted 37 lines · Miguel Ojeda
Quoted 8 lines · On Tue, 31 Mar 2026 18:19:44 +0200 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 6.6.131 release. There are 175 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.
The pin-init change does not build:
error[E0425]: cannot find value `__refcount_guard` in this scope --> rust/kernel/init/macros.rs:1320:25 | 1320 | @guards([< __ $field _guard >], $($guards,)*), | ^^^^^^^^^^^^^^^^^^^^^^ not found in this scope | ::: rust/kernel/sync/arc.rs:529:49 | 529 | let inner = Box::try_init::<AllocError>(try_init!(ArcInner { | _________________________________________________- 530 | | // SAFETY: There are no safety requirements for this FFI call. 531 | | refcount: Opaque::new(unsafe { bindings::REFCOUNT_INIT(1) }), 532 | | data <- init::uninit::<T, AllocError>(), 533 | | }? AllocError))?; | |______________________- in this macro invocation | = note: this error originates in the macro `$crate::__init_internal` which comes from the expansion of the macro `try_init` (in Nightly builds, run with -Z macro-backtrace for more info)(among other errors)
I would suggest dropping these for now:
0565326613fa("rust: pin-init: internal: init: document load-bearing fact of field accessors")66655aacfa42("rust: pin-init: add references to previously initialized fields")
Quoted 8 lines
Quoted 2 lines
Cc Benno Lossin <[email protected]>Cc Gary Guo <[email protected]>Crap, I just did a realease. Let me go revert these and do a new release with that fixed, sorry about that, I guess my builds weren't testing rust on older kernels, my fault :(
greg k-h
It is probably missing a dependency patch. I could take a look next week, but perhaps not backporting to 6.6 is an easier solution :)
Best,
Gary
Quoted 39 lines · Gary Guo
Quoted 38 lines · Greg KH
Quoted 37 lines · Miguel Ojeda
Quoted 8 lines · On Tue, 31 Mar 2026 18:19:44 +0200 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 6.6.131 release. There are 175 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.
The pin-init change does not build:
error[E0425]: cannot find value `__refcount_guard` in this scope --> rust/kernel/init/macros.rs:1320:25 | 1320 | @guards([< __ $field _guard >], $($guards,)*), | ^^^^^^^^^^^^^^^^^^^^^^ not found in this scope | ::: rust/kernel/sync/arc.rs:529:49 | 529 | let inner = Box::try_init::<AllocError>(try_init!(ArcInner { | _________________________________________________- 530 | | // SAFETY: There are no safety requirements for this FFI call. 531 | | refcount: Opaque::new(unsafe { bindings::REFCOUNT_INIT(1) }), 532 | | data <- init::uninit::<T, AllocError>(), 533 | | }? AllocError))?; | |______________________- in this macro invocation | = note: this error originates in the macro `$crate::__init_internal` which comes from the expansion of the macro `try_init` (in Nightly builds, run with -Z macro-backtrace for more info)(among other errors)
I would suggest dropping these for now:
0565326613fa("rust: pin-init: internal: init: document load-bearing fact of field accessors")66655aacfa42("rust: pin-init: add references to previously initialized fields")
Quoted 6 lines
Quoted 6 lines
Quoted 2 lines
Cc Benno Lossin <[email protected]>Cc Gary Guo <[email protected]>Crap, I just did a realease. Let me go revert these and do a new release with that fixed, sorry about that, I guess my builds weren't testing rust on older kernels, my fault :(
I don't know what happened with this series :( Sorry for the extra work.
Quoted 2 lines
It is probably missing a dependency patch. I could take a look next week, but perhaps not backporting to 6.6 is an easier solution :)
Yeah let's do that.
Cheers,
Benno