6.6.25-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 6.6.25-rc1 review
This is the start of the stable review cycle for the 6.6.25 release. There are 11 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 Fri, 05 Apr 2024 17:51:13 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.6.25-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.6.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 6.6.25-rc1
Greg Kroah-Hartman <[email protected]>
Revert "workqueue.c: Increase workqueue name length"
Greg Kroah-Hartman <[email protected]>
Revert "workqueue: Move pwq->max_active to wq->max_active"
Greg Kroah-Hartman <[email protected]>
Revert "workqueue: Factor out pwq_is_empty()"
Greg Kroah-Hartman <[email protected]>
Revert "workqueue: Replace pwq_activate_inactive_work() with [__]pwq_activate_work()"
Greg Kroah-Hartman <[email protected]>
Revert "workqueue: Move nr_active handling into helpers"
Greg Kroah-Hartman <[email protected]>
Revert "workqueue: Make wq_adjust_max_active() round-robin pwqs while activating"
Greg Kroah-Hartman <[email protected]>
Revert "workqueue: RCU protect wq->dfl_pwq and implement accessors for it"
Greg Kroah-Hartman <[email protected]>
Revert "workqueue: Introduce struct wq_node_nr_active"
Greg Kroah-Hartman <[email protected]>
Revert "workqueue: Implement system-wide nr_active enforcement for unbound workqueues"
Greg Kroah-Hartman <[email protected]>
Revert "workqueue: Don't call cpumask_test_cpu() with -1 CPU in wq_update_node_max_active()"
Greg Kroah-Hartman <[email protected]>
Revert "workqueue: Shorten events_freezable_power_efficient name"
-------------
Diffstat:
Makefile | 4 +- include/linux/workqueue.h | 35 +-- kernel/workqueue.c | 757 ++++++++-------------------------------------- 3 files changed, 132 insertions(+), 664 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/11 Revert "workqueue: Shorten events_freezable_power_efficient name"
6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 8b934390272d50ae0e7e320617437a03e5712baa which is commit 8318d6a6362f5903edb4c904a8dd447e59be4ad1 upstream.
The workqueue patches backported to 6.6.y caused some reported regressions, so revert them for now.
--- kernel/workqueue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/workqueue.c +1 -1
@@ -7109,7 +7109,7 @@ void __init workqueue_init_early(void) WQ_FREEZABLE, 0); system_power_efficient_wq =alloc_workqueue ("events_power_efficient" ,WQ_POWER_EFFICIENT ,0 ); - system_freezable_power_efficient_wq =alloc_workqueue ("events_freezable_pwr_efficient" , + system_freezable_power_efficient_wq =alloc_workqueue ("events_freezable_power_efficient" ,WQ_FREEZABLE |WQ_POWER_EFFICIENT ,0 ); BUG_ON(!system_wq || !system_highpri_wq || !system_long_wq ||
Greg Kroah-Hartman
maintainerPATCH 2/11 Revert "workqueue: Dont call cpumask_test_cpu() with -1 CPU in wq_update_node_max_active()"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 7df62b8cca38aa452b508b477b16544cba615084 which is commit 15930da42f8981dc42c19038042947b475b19f47 upstream.
The workqueue patches backported to 6.6.y caused some reported regressions, so revert them for now.
--- kernel/workqueue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/workqueue.c +1 -1
@@ -1500,7 +1500,7 @@ static void wq_update_node_max_active(stlockdep_assert_held (&wq->mutex); -if (off_cpu >=0 && !cpumask_test_cpu (off_cpu, effective)) +if (!cpumask_test_cpu (off_cpu, effective)) off_cpu =-1 ; total_cpus =cpumask_weight_and (effective, cpu_online_mask);
Greg Kroah-Hartman
maintainerPATCH 3/11 Revert "workqueue: Implement system-wide nr_active enforcement for unbound workqueues"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 5a70baec2294e8a7d0fcc4558741c23e752dad5c which is commit 5797b1c18919cd9c289ded7954383e499f729ce0 upstream.
The workqueue patches backported to 6.6.y caused some reported regressions, so revert them for now.
--- include/linux/workqueue.h | 35 ---- kernel/workqueue.c | 341 ++++------------------------------------------ 2 files changed, 35 insertions(+), 341 deletions(-)
include/linux/workqueue.h +3 -32
@@ -405,13 +405,6 @@ enum {WQ_MAX_ACTIVE =512 ,/* I like 512, better ideas? */ WQ_UNBOUND_MAX_ACTIVE =WQ_MAX_ACTIVE , WQ_DFL_ACTIVE = WQ_MAX_ACTIVE / 2, - -/* -* Per-node default cap on min_active. Unless explicitly set, min_active -* is set to min(max_active, WQ_DFL_MIN_ACTIVE). For more details, see -* workqueue_struct->min_active definition. -*/ - WQ_DFL_MIN_ACTIVE = 8, };/*
@@ -454,33 +447,11 @@ extern struct workqueue_struct *system_f* alloc_workqueue - allocate a workqueue * @fmt: printf format for the name of the workqueue * @flags: WQ_* flags -* @max_active: max in-flight work items, 0 for default +* @max_active: max in-flight work items per CPU, 0 for default * remaining args: args for @fmt * -* For a per-cpu workqueue, @max_active limits the number of in-flight work -* items for each CPU. e.g. @max_active of 1 indicates that each CPU can be -* executing at most one work item for the workqueue. -* -* For unbound workqueues, @max_active limits the number of in-flight work items -* for the whole system. e.g. @max_active of 16 indicates that that there can be -* at most 16 work items executing for the workqueue in the whole system. -* -* As sharing the same active counter for an unbound workqueue across multiple -* NUMA nodes can be expensive, @max_active is distributed to each NUMA node -* according to the proportion of the number of online CPUs and enforced -* independently. -* -* Depending on online CPU distribution, a node may end up with per-node -* max_active which is significantly lower than @max_active, which can lead to -* deadlocks if the per-node concurrency limit is lower than the maximum number -* of interdependent work items for the workqueue. -* -* To guarantee forward progress regardless of online CPU distribution, the -* concurrency limit on every node is guaranteed to be equal to or greater than -* min_active which is set to min(@max_active, %WQ_DFL_MIN_ACTIVE). This means -* that the sum of per-node max_active's may be larger than @max_active. -* -* For detailed information on %WQ_* flags, please refer to +* Allocate a workqueue with the specified parameters. For detailed +* information on WQ_* flags, please refer to * Documentation/core-api/workqueue.rst. * * RETURNS:
kernel/workqueue.c +32 -309
540 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 4/11 Revert "workqueue: Introduce struct wq_node_nr_active"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit b522229a56941adac1ea1da6593b2b5c734b5359 which is commit 91ccc6e7233bb10a9c176aa4cc70d6f432a441a5 upstream.
The workqueue patches backported to 6.6.y caused some reported regressions, so revert them for now.
--- kernel/workqueue.c | 142 ++--------------------------------------------------- 1 file changed, 7 insertions(+), 135 deletions(-)
kernel/workqueue.c +7 -135
@@ -281,16 +281,6 @@ struct wq_flusher {struct wq_device ;/* -* Unlike in a per-cpu workqueue where max_active limits its concurrency level -* on each CPU, in an unbound workqueue, max_active applies to the whole system. -* As sharing a single nr_active across multiple sockets can be very expensive, -* the counting and enforcement is per NUMA node. -*/ -struct wq_node_nr_active { -atomic_t nr;/* per-node nr_active count */ -}; - -/* * The externally visible workqueue. It relays the issued work items to * the appropriate worker_pool through its pool_workqueues. */
@@ -336,7 +326,6 @@ struct workqueue_struct {/* hot fields used during command issue, aligned to cacheline */ unsigned int flags____cacheline_aligned ;/* WQ: WQ_* flags */ struct pool_workqueue __percpu __rcu **cpu_pwq;/* I: per-cpu pwqs */ -struct wq_node_nr_active *node_nr_active[];/* I: per-node nr_active */ };static struct kmem_cache *pwq_cache;
@@ -1427,31 +1416,6 @@ work_func_t wq_worker_last_func(struct t }/** -* wq_node_nr_active - Determine wq_node_nr_active to use -* @wq: workqueue of interest -* @node: NUMA node, can be %NUMA_NO_NODE -* -* Determine wq_node_nr_active to use for @wq on @node. Returns: -* -* - %NULL for per-cpu workqueues as they don't need to use shared nr_active. -* -* - node_nr_active[nr_node_ids] if @node is %NUMA_NO_NODE. -* -* - Otherwise, node_nr_active[@node]. -*/ -static struct wq_node_nr_active *wq_node_nr_active (struct workqueue_struct *wq, -int node) -{ -if (!(wq->flags &WQ_UNBOUND )) -return NULL ; - -if (node ==NUMA_NO_NODE ) - node = nr_node_ids; - -return wq->node_nr_active[node]; -} - -/** * get_pwq - get an extra reference on the specified pool_workqueue * @pwq: pool_workqueue to get *
@@ -1532,17 +1496,12 @@ static bool pwq_activate_work(struct poo struct work_struct *work) {struct worker_pool *pool = pwq->pool; -struct wq_node_nr_active *nna;lockdep_assert_held (&pool->lock);if (!(*work_data_bits (work) &WORK_STRUCT_INACTIVE ))return false; - nna =wq_node_nr_active (pwq->wq, pool->node); -if (nna) -atomic_inc (&nna->nr); - pwq->nr_active++;__pwq_activate_work (pwq, work);return true;
@@ -1559,18 +1518,14 @@ static bool pwq_tryinc_nr_active(struct {struct workqueue_struct *wq = pwq->wq;struct worker_pool *pool = pwq->pool; -struct wq_node_nr_active *nna =wq_node_nr_active (wq, pool->node);bool obtained;lockdep_assert_held (&pool->lock); obtained = pwq->nr_active <READ_ONCE (wq->max_active); -if (obtained) { +if (obtained) pwq->nr_active++; -if (nna) -atomic_inc (&nna->nr); - }return obtained; }
@@ -1607,26 +1562,10 @@ static bool pwq_activate_first_inactive(static void pwq_dec_nr_active (struct pool_workqueue *pwq) {struct worker_pool *pool = pwq->pool; -struct wq_node_nr_active *nna =wq_node_nr_active (pwq->wq, pool->node);lockdep_assert_held (&pool->lock); -/* -* @pwq->nr_active should be decremented for both percpu and unbound -* workqueues. -*/ pwq->nr_active--; - -/* -* For a percpu workqueue, it's simple. Just need to kick the first -* inactive work item on @pwq itself. -*/ -if (!nna) { -pwq_activate_first_inactive (pwq); -return ; - } - -atomic_dec (&nna->nr);pwq_activate_first_inactive (pwq); }
@@ -4081,63 +4020,11 @@ static void wq_free_lockdep(struct workq }#endif -static void free_node_nr_active (struct wq_node_nr_active **nna_ar) -{ -int node; - -for_each_node (node) { -kfree (nna_ar[node]); - nna_ar[node] =NULL ; - } - -kfree (nna_ar[nr_node_ids]); - nna_ar[nr_node_ids] =NULL ; -} - -static void init_node_nr_active (struct wq_node_nr_active *nna) -{ -atomic_set (&nna->nr,0 ); -} - -/* -* Each node's nr_active counter will be accessed mostly from its own node and -* should be allocated in the node. -*/ -static int alloc_node_nr_active (struct wq_node_nr_active **nna_ar) -{ -struct wq_node_nr_active *nna; -int node; - -for_each_node (node) { - nna =kzalloc_node (sizeof (*nna),GFP_KERNEL , node); -if (!nna) - goto err_free; -init_node_nr_active (nna); - nna_ar[node] = nna; - } - -/* [nr_node_ids] is used as the fallback */ - nna =kzalloc_node (sizeof (*nna),GFP_KERNEL ,NUMA_NO_NODE ); -if (!nna) - goto err_free; -init_node_nr_active (nna); - nna_ar[nr_node_ids] = nna; - -return 0 ; - -err_free: -free_node_nr_active (nna_ar); -return -ENOMEM ; -} -static void rcu_free_wq (struct rcu_head *rcu) {struct workqueue_struct *wq = container_of(rcu, struct workqueue_struct, rcu); -if (wq->flags &WQ_UNBOUND ) -free_node_nr_active (wq->node_nr_active); -wq_free_lockdep (wq);free_percpu (wq->cpu_pwq);free_workqueue_attrs (wq->unbound_attrs);
@@ -4889,8 +4776,7 @@ struct workqueue_struct *alloc_workqueue {va_list args;struct workqueue_struct *wq; -size_t wq_size; -int name_len; +int len;/* * Unbound && max_active == 1 used to imply ordered, which is no longer
@@ -4906,12 +4792,7 @@ struct workqueue_struct *alloc_workqueue flags |=WQ_UNBOUND ;/* allocate wq and format name */ -if (flags &WQ_UNBOUND ) - wq_size =struct_size (wq, node_nr_active, nr_node_ids +1 ); -else - wq_size =sizeof (*wq); - - wq =kzalloc (wq_size,GFP_KERNEL ); + wq =kzalloc (sizeof (*wq),GFP_KERNEL );if (!wq)return NULL ;
@@ -4922,12 +4803,11 @@ struct workqueue_struct *alloc_workqueue }va_start (args, max_active); - name_len =vsnprintf (wq->name,sizeof (wq->name), fmt, args); + len =vsnprintf (wq->name,sizeof (wq->name), fmt, args);va_end (args); -if (name_len >=WQ_NAME_LEN ) -pr_warn_once ("workqueue: name exceeds WQ_NAME_LEN. Truncating to: %s\n" , - wq->name); +if (len >=WQ_NAME_LEN ) +pr_warn_once ("workqueue: name exceeds WQ_NAME_LEN. Truncating to: %s\n" , wq->name); max_active = max_active ?:WQ_DFL_ACTIVE ; max_active =wq_clamp_max_active (max_active, flags, wq->name);
@@ -4946,13 +4826,8 @@ struct workqueue_struct *alloc_workqueuewq_init_lockdep (wq);INIT_LIST_HEAD (&wq->list); -if (flags &WQ_UNBOUND ) { -if (alloc_node_nr_active (wq->node_nr_active) <0 ) - goto err_unreg_lockdep; - } -if (alloc_and_link_pwqs (wq) <0 ) - goto err_free_node_nr_active; + goto err_unreg_lockdep;if (wq_online &&init_rescuer (wq) <0 ) goto err_destroy;
@@ -4977,9 +4852,6 @@ struct workqueue_struct *alloc_workqueuereturn wq; -err_free_node_nr_active: -if (wq->flags &WQ_UNBOUND ) -free_node_nr_active (wq->node_nr_active); err_unreg_lockdep:wq_unregister_lockdep (wq);wq_free_lockdep (wq);
Greg Kroah-Hartman
maintainerPATCH 5/11 Revert "workqueue: RCU protect wq->dfl_pwq and implement accessors for it"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit bd31fb926dfa02d2ccfb4b79389168b1d16f36b1 which is commit 9f66cff212bb3c1cd25996aaa0dfd0c9e9d8baab upstream.
The workqueue patches backported to 6.6.y caused some reported regressions, so revert them for now.
--- kernel/workqueue.c | 64 +++++++++++++++++++---------------------------------- 1 file changed, 24 insertions(+), 40 deletions(-)
kernel/workqueue.c +24 -40
@@ -304,7 +304,7 @@ struct workqueue_struct {int saved_max_active;/* WQ: saved max_active */ struct workqueue_attrs *unbound_attrs;/* PW: only for unbound wqs */ -struct pool_workqueue __rcu *dfl_pwq;/* PW: only for unbound wqs */ +struct pool_workqueue *dfl_pwq;/* PW: only for unbound wqs */ #ifdef CONFIG_SYSFS struct wq_device *wq_dev;/* I: for sysfs interface */
@@ -629,23 +629,6 @@ static int worker_pool_assign_id(structreturn ret; } -static struct pool_workqueue __rcu ** -unbound_pwq_slot (struct workqueue_struct *wq,int cpu) -{ -if (cpu >=0 ) -return per_cpu_ptr (wq->cpu_pwq, cpu); -else -return &wq->dfl_pwq; -} - -/* @cpu < 0 for dfl_pwq */ -static struct pool_workqueue *unbound_pwq (struct workqueue_struct *wq,int cpu) -{ -return rcu_dereference_check (*unbound_pwq_slot (wq, cpu), -lockdep_is_held (&wq_pool_mutex) || -lockdep_is_held (&wq->mutex)); -} -static unsigned int work_color_to_flags (int color) {return color <<WORK_STRUCT_COLOR_SHIFT ;
@@ -4335,11 +4318,10 @@ static void wq_calc_pod_cpumask(struct w "possible intersect\n"); } -/* install @pwq into @wq and return the old pwq, @cpu < 0 for dfl_pwq */ +/* install @pwq into @wq's cpu_pwq and return the old pwq */ static struct pool_workqueue *install_unbound_pwq (struct workqueue_struct *wq,int cpu,struct pool_workqueue *pwq) { -struct pool_workqueue __rcu **slot =unbound_pwq_slot (wq, cpu);struct pool_workqueue *old_pwq;lockdep_assert_held (&wq_pool_mutex);
@@ -4348,8 +4330,8 @@ static struct pool_workqueue *install_un/* link_pwq() can handle duplicate calls */ link_pwq (pwq); - old_pwq =rcu_access_pointer (*slot); -rcu_assign_pointer (*slot, pwq); + old_pwq =rcu_access_pointer (*per_cpu_ptr (wq->cpu_pwq, cpu)); +rcu_assign_pointer (*per_cpu_ptr (wq->cpu_pwq, cpu), pwq);return old_pwq; }
@@ -4449,11 +4431,14 @@ static void apply_wqattrs_commit(structcopy_workqueue_attrs (ctx->wq->unbound_attrs, ctx->attrs); -/* save the previous pwqs and install the new ones */ +/* save the previous pwq and install the new one */ for_each_possible_cpu (cpu) ctx->pwq_tbl[cpu] =install_unbound_pwq (ctx->wq, cpu, ctx->pwq_tbl[cpu]); - ctx->dfl_pwq =install_unbound_pwq (ctx->wq,-1 , ctx->dfl_pwq); + +/* @dfl_pwq might not have been used, ensure it's linked */ +link_pwq (ctx->dfl_pwq); +swap (ctx->wq->dfl_pwq, ctx->dfl_pwq);mutex_unlock (&ctx->wq->mutex); }
@@ -4576,7 +4561,9 @@ static void wq_update_pod(struct workque/* nothing to do if the target cpumask matches the current pwq */ wq_calc_pod_cpumask (target_attrs, cpu, off_cpu); -if (wqattrs_equal (target_attrs,unbound_pwq (wq, cpu)->pool->attrs)) + pwq =rcu_dereference_protected (*per_cpu_ptr (wq->cpu_pwq, cpu), +lockdep_is_held (&wq_pool_mutex)); +if (wqattrs_equal (target_attrs, pwq->pool->attrs))return ;/* create a new pwq */
@@ -4594,11 +4581,10 @@ static void wq_update_pod(struct workque use_dfl_pwq:mutex_lock (&wq->mutex); - pwq =unbound_pwq (wq,-1 ); -raw_spin_lock_irq (&pwq->pool->lock); -get_pwq (pwq); -raw_spin_unlock_irq (&pwq->pool->lock); - old_pwq =install_unbound_pwq (wq, cpu, pwq); +raw_spin_lock_irq (&wq->dfl_pwq->pool->lock); +get_pwq (wq->dfl_pwq); +raw_spin_unlock_irq (&wq->dfl_pwq->pool->lock); + old_pwq =install_unbound_pwq (wq, cpu, wq->dfl_pwq); out_unlock:mutex_unlock (&wq->mutex);put_pwq_unlocked (old_pwq);
@@ -4636,13 +4622,10 @@ static int alloc_and_link_pwqs(struct wocpus_read_lock ();if (wq->flags & __WQ_ORDERED) { -struct pool_workqueue *dfl_pwq; - ret =apply_workqueue_attrs (wq, ordered_wq_attrs[highpri]);/* there should only be single pwq for ordering guarantee */ - dfl_pwq =rcu_access_pointer (wq->dfl_pwq); -WARN (!ret && (wq->pwqs.next != &dfl_pwq->pwqs_node || - wq->pwqs.prev != &dfl_pwq->pwqs_node), +WARN (!ret && (wq->pwqs.next != &wq->dfl_pwq->pwqs_node || + wq->pwqs.prev != &wq->dfl_pwq->pwqs_node),"ordering guarantee broken for workqueue %s\n" , wq->name); }else { ret =apply_workqueue_attrs (wq, unbound_std_wq_attrs[highpri]);
@@ -4873,7 +4856,7 @@ static bool pwq_busy(struct pool_workqueif (pwq->nr_in_flight[i])return true; -if ((pwq !=rcu_access_pointer (pwq->wq->dfl_pwq)) && (pwq->refcnt >1 )) +if ((pwq != pwq->wq->dfl_pwq) && (pwq->refcnt >1 ))return true;if (!pwq_is_empty (pwq))return true;
@@ -4957,12 +4940,13 @@ void destroy_workqueue(struct workqueue_rcu_read_lock ();for_each_possible_cpu (cpu) { -put_pwq_unlocked (unbound_pwq (wq, cpu)); -RCU_INIT_POINTER (*unbound_pwq_slot (wq, cpu),NULL ); + pwq =rcu_access_pointer (*per_cpu_ptr (wq->cpu_pwq, cpu)); +RCU_INIT_POINTER (*per_cpu_ptr (wq->cpu_pwq, cpu),NULL ); +put_pwq_unlocked (pwq); } -put_pwq_unlocked (unbound_pwq (wq,-1 )); -RCU_INIT_POINTER (*unbound_pwq_slot (wq,-1 ),NULL ); +put_pwq_unlocked (wq->dfl_pwq); + wq->dfl_pwq =NULL ;rcu_read_unlock (); }
Greg Kroah-Hartman
maintainerPATCH 6/11 Revert "workqueue: Make wq_adjust_max_active() round-robin pwqs while activating"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 5f99fee6f2dea1228980c3e785ab1a2c69b4da3c which is commit qc5404d4e6df6faba1007544b5f4e62c7c14416dd upstream.
The workqueue patches backported to 6.6.y caused some reported regressions, so revert them for now.
--- kernel/workqueue.c | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-)
kernel/workqueue.c +13 -20
@@ -4710,7 +4710,7 @@ static int init_rescuer(struct workqueue*/ static void wq_adjust_max_active (struct workqueue_struct *wq) { -bool activated; +struct pool_workqueue *pwq;lockdep_assert_held (&wq->mutex);
@@ -4730,26 +4730,19 @@ static void wq_adjust_max_active(struct*/ WRITE_ONCE (wq->max_active, wq->saved_max_active); -/* -* Round-robin through pwq's activating the first inactive work item -* until max_active is filled. -*/ -do { -struct pool_workqueue *pwq; +for_each_pwq (pwq, wq) { +unsigned long flags; + +/* this function can be called during early boot w/ irq disabled */ +raw_spin_lock_irqsave (&pwq->pool->lock, flags); - activated = false; -for_each_pwq (pwq, wq) { -unsigned long flags; - -/* can be called during early boot w/ irq disabled */ -raw_spin_lock_irqsave (&pwq->pool->lock, flags); -if (pwq_activate_first_inactive (pwq)) { - activated = true; -kick_pool (pwq->pool); - } -raw_spin_unlock_irqrestore (&pwq->pool->lock, flags); - } - }while (activated); +while (pwq_activate_first_inactive (pwq)) + ; + +kick_pool (pwq->pool); + +raw_spin_unlock_irqrestore (&pwq->pool->lock, flags); + } }__printf (1 ,4 )
Greg Kroah-Hartman
maintainerPATCH 7/11 Revert "workqueue: Move nr_active handling into helpers"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 4023a2d95076918abe2757d60810642a8115b586 which is commit 1c270b79ce0b8290f146255ea9057243f6dd3c17 upstream.
The workqueue patches backported to 6.6.y caused some reported regressions, so revert them for now.
--- kernel/workqueue.c | 86 +++++++++++------------------------------------------ 1 file changed, 19 insertions(+), 67 deletions(-)
kernel/workqueue.c +19 -67
@@ -1458,14 +1458,11 @@ static bool pwq_is_empty(struct pool_worstatic void __pwq_activate_work (struct pool_workqueue *pwq,struct work_struct *work) { -unsigned long *wdb =work_data_bits (work); - -WARN_ON_ONCE (!(*wdb &WORK_STRUCT_INACTIVE ));trace_workqueue_activate_work (work);if (list_empty (&pwq->pool->worklist)) pwq->pool->watchdog_ts = jiffies;move_linked_works (work, &pwq->pool->worklist,NULL ); -__clear_bit (WORK_STRUCT_INACTIVE_BIT , wdb); +__clear_bit (WORK_STRUCT_INACTIVE_BIT ,work_data_bits (work)); }/**
@@ -1490,66 +1487,12 @@ static bool pwq_activate_work(struct pooreturn true; } -/** -* pwq_tryinc_nr_active - Try to increment nr_active for a pwq -* @pwq: pool_workqueue of interest -* -* Try to increment nr_active for @pwq. Returns %true if an nr_active count is -* successfully obtained. %false otherwise. -*/ -static bool pwq_tryinc_nr_active (struct pool_workqueue *pwq) -{ -struct workqueue_struct *wq = pwq->wq; -struct worker_pool *pool = pwq->pool; -bool obtained; - -lockdep_assert_held (&pool->lock); - - obtained = pwq->nr_active <READ_ONCE (wq->max_active); - -if (obtained) - pwq->nr_active++; -return obtained; -} - -/** -* pwq_activate_first_inactive - Activate the first inactive work item on a pwq -* @pwq: pool_workqueue of interest -* -* Activate the first inactive work item of @pwq if available and allowed by -* max_active limit. -* -* Returns %true if an inactive work item has been activated. %false if no -* inactive work item is found or max_active limit is reached. -*/ -static bool pwq_activate_first_inactive (struct pool_workqueue *pwq) -{ -struct work_struct *work = -list_first_entry_or_null (&pwq->inactive_works, - struct work_struct, entry); - -if (work &&pwq_tryinc_nr_active (pwq)) { -__pwq_activate_work (pwq, work); -return true; - }else { -return false; - } -} - -/** -* pwq_dec_nr_active - Retire an active count -* @pwq: pool_workqueue of interest -* -* Decrement @pwq's nr_active and try to activate the first inactive work item. -*/ -static void pwq_dec_nr_active (struct pool_workqueue *pwq) +static void pwq_activate_first_inactive (struct pool_workqueue *pwq) { -struct worker_pool *pool = pwq->pool; +struct work_struct *work =list_first_entry (&pwq->inactive_works, + struct work_struct, entry); -lockdep_assert_held (&pool->lock); - - pwq->nr_active--; -pwq_activate_first_inactive (pwq); +pwq_activate_work (pwq, work); }/**
@@ -1567,8 +1510,14 @@ static void pwq_dec_nr_in_flight(struct {int color =get_work_color (work_data); -if (!(work_data &WORK_STRUCT_INACTIVE )) -pwq_dec_nr_active (pwq); +if (!(work_data &WORK_STRUCT_INACTIVE )) { + pwq->nr_active--; +if (!list_empty (&pwq->inactive_works)) { +/* one down, submit an inactive one */ +if (pwq->nr_active <READ_ONCE (pwq->wq->max_active)) +pwq_activate_first_inactive (pwq); + } + } pwq->nr_in_flight[color]--;
@@ -1870,11 +1819,13 @@ retry:* @work must also queue behind existing inactive work items to maintain * ordering when max_active changes. See wq_adjust_max_active(). */ -if (list_empty (&pwq->inactive_works) &&pwq_tryinc_nr_active (pwq)) { +if (list_empty (&pwq->inactive_works) && + pwq->nr_active <READ_ONCE (pwq->wq->max_active)) {if (list_empty (&pool->worklist)) pool->watchdog_ts = jiffies;trace_workqueue_activate_work (work); + pwq->nr_active++;insert_work (pwq, work, &pool->worklist, work_flags);kick_pool (pool); }else {
@@ -4736,8 +4687,9 @@ static void wq_adjust_max_active(struct/* this function can be called during early boot w/ irq disabled */ raw_spin_lock_irqsave (&pwq->pool->lock, flags); -while (pwq_activate_first_inactive (pwq)) - ; +while (!list_empty (&pwq->inactive_works) && + pwq->nr_active < wq->max_active) +pwq_activate_first_inactive (pwq);kick_pool (pwq->pool);
Greg Kroah-Hartman
maintainerPATCH 8/11 Revert "workqueue: Replace pwq_activate_inactive_work() with [__]pwq_activate_work()"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 6c592f0bb96815117538491e5ba12e0a8a8c4493 which is commit 4c6380305d21e36581b451f7337a36c93b64e050 upstream.
The workqueue patches backported to 6.6.y caused some reported regressions, so revert them for now.
--- kernel/workqueue.c | 31 ++++++------------------------- 1 file changed, 6 insertions(+), 25 deletions(-)
kernel/workqueue.c +6 -25
@@ -1455,36 +1455,16 @@ static bool pwq_is_empty(struct pool_worreturn !pwq->nr_active &&list_empty (&pwq->inactive_works); } -static void __pwq_activate_work (struct pool_workqueue *pwq, -struct work_struct *work) +static void pwq_activate_inactive_work (struct work_struct *work) { +struct pool_workqueue *pwq =get_work_pwq (work); +trace_workqueue_activate_work (work);if (list_empty (&pwq->pool->worklist)) pwq->pool->watchdog_ts = jiffies;move_linked_works (work, &pwq->pool->worklist,NULL );__clear_bit (WORK_STRUCT_INACTIVE_BIT ,work_data_bits (work)); -} - -/** -* pwq_activate_work - Activate a work item if inactive -* @pwq: pool_workqueue @work belongs to -* @work: work item to activate -* -* Returns %true if activated. %false if already active. -*/ -static bool pwq_activate_work (struct pool_workqueue *pwq, -struct work_struct *work) -{ -struct worker_pool *pool = pwq->pool; - -lockdep_assert_held (&pool->lock); - -if (!(*work_data_bits (work) &WORK_STRUCT_INACTIVE )) -return false; - pwq->nr_active++; -__pwq_activate_work (pwq, work); -return true; }static void pwq_activate_first_inactive (struct pool_workqueue *pwq)
@@ -1492,7 +1472,7 @@ static void pwq_activate_first_inactive(struct work_struct *work =list_first_entry (&pwq->inactive_works, struct work_struct, entry); -pwq_activate_work (pwq, work); +pwq_activate_inactive_work (work); }/**
@@ -1630,7 +1610,8 @@ static int try_to_grab_pending(struct wo* management later on and cause stall. Make sure the work * item is activated before grabbing. */ -pwq_activate_work (pwq, work); +if (*work_data_bits (work) &WORK_STRUCT_INACTIVE ) +pwq_activate_inactive_work (work);list_del_init (&work->entry);pwq_dec_nr_in_flight (pwq, *work_data_bits (work));
Greg Kroah-Hartman
maintainerPATCH 9/11 Revert "workqueue: Factor out pwq_is_empty()"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit bad184d26a4f68aa00ad75502f9669950a790f71 which is commit afa87ce85379e2d93863fce595afdb5771a84004 upstream.
The workqueue patches backported to 6.6.y caused some reported regressions, so revert them for now.
--- kernel/workqueue.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-)
kernel/workqueue.c +4 -9
@@ -1450,11 +1450,6 @@ static void put_pwq_unlocked(struct pool } } -static bool pwq_is_empty (struct pool_workqueue *pwq) -{ -return !pwq->nr_active &&list_empty (&pwq->inactive_works); -} -static void pwq_activate_inactive_work (struct work_struct *work) {struct pool_workqueue *pwq =get_work_pwq (work);
@@ -3324,7 +3319,7 @@ reflush:bool drained;raw_spin_lock_irq (&pwq->pool->lock); - drained =pwq_is_empty (pwq); + drained = !pwq->nr_active &&list_empty (&pwq->inactive_works);raw_spin_unlock_irq (&pwq->pool->lock);if (drained)
@@ -4784,7 +4779,7 @@ static bool pwq_busy(struct pool_workqueif ((pwq != pwq->wq->dfl_pwq) && (pwq->refcnt >1 ))return true; -if (!pwq_is_empty (pwq)) +if (pwq->nr_active || !list_empty (&pwq->inactive_works))return true;return false;
@@ -5222,7 +5217,7 @@ void show_one_workqueue(struct workqueueunsigned long flags;for_each_pwq (pwq, wq) { -if (!pwq_is_empty (pwq)) { +if (pwq->nr_active || !list_empty (&pwq->inactive_works)) { idle = false;break ; }
@@ -5234,7 +5229,7 @@ void show_one_workqueue(struct workqueuefor_each_pwq (pwq, wq) {raw_spin_lock_irqsave (&pwq->pool->lock, flags); -if (!pwq_is_empty (pwq)) { +if (pwq->nr_active || !list_empty (&pwq->inactive_works)) {/* * Defer printing to avoid deadlocks in console * drivers that queue work while holding locks
Greg Kroah-Hartman
maintainerPATCH 10/11 Revert "workqueue: Move pwq->max_active to wq->max_active"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 82e098f5bed1ff167332d26f8551662098747ec4 which is commit a045a272d887575da17ad86d6573e82871b50c27 upstream.
The workqueue patches backported to 6.6.y caused some reported regressions, so revert them for now.
--- kernel/workqueue.c | 133 ++++++++++++++++++++++++++--------------------------- 1 file changed, 67 insertions(+), 66 deletions(-)
kernel/workqueue.c +67 -66
@@ -143,9 +143,6 @@ enum {* * WR: wq->mutex protected for writes. RCU protected for reads. * -* WO: wq->mutex protected for writes. Updated with WRITE_ONCE() and can be read -* with READ_ONCE() without locking. -* * MD: wq_mayday_lock protected. * * WD: Used internally by the watchdog.
@@ -253,6 +250,7 @@ struct pool_workqueue {* is marked with WORK_STRUCT_INACTIVE iff it is in pwq->inactive_works. */ int nr_active;/* L: nr of active works */ +int max_active;/* L: max active works */ struct list_head inactive_works;/* L: inactive works */ struct list_head pwqs_node;/* WR: node on wq->pwqs */ struct list_head mayday_node;/* MD: node on wq->maydays */
@@ -300,8 +298,7 @@ struct workqueue_struct {struct worker *rescuer;/* MD: rescue worker */ int nr_drainers;/* WQ: drain in progress */ -int max_active;/* WO: max active works */ -int saved_max_active;/* WQ: saved max_active */ +int saved_max_active;/* WQ: saved pwq max_active */ struct workqueue_attrs *unbound_attrs;/* PW: only for unbound wqs */ struct pool_workqueue *dfl_pwq;/* PW: only for unbound wqs */
@@ -1489,7 +1486,7 @@ static void pwq_dec_nr_in_flight(struct pwq->nr_active--;if (!list_empty (&pwq->inactive_works)) {/* one down, submit an inactive one */ -if (pwq->nr_active <READ_ONCE (pwq->wq->max_active)) +if (pwq->nr_active < pwq->max_active)pwq_activate_first_inactive (pwq); } }
@@ -1790,13 +1787,7 @@ retry: pwq->nr_in_flight[pwq->work_color]++; work_flags =work_color_to_flags (pwq->work_color); -/* -* Limit the number of concurrently active work items to max_active. -* @work must also queue behind existing inactive work items to maintain -* ordering when max_active changes. See wq_adjust_max_active(). -*/ -if (list_empty (&pwq->inactive_works) && - pwq->nr_active <READ_ONCE (pwq->wq->max_active)) { +if (likely (pwq->nr_active < pwq->max_active)) {if (list_empty (&pool->worklist)) pool->watchdog_ts = jiffies;
@@ -4145,6 +4136,50 @@ static void pwq_release_workfn(struct kt } } +/** +* pwq_adjust_max_active - update a pwq's max_active to the current setting +* @pwq: target pool_workqueue +* +* If @pwq isn't freezing, set @pwq->max_active to the associated +* workqueue's saved_max_active and activate inactive work items +* accordingly. If @pwq is freezing, clear @pwq->max_active to zero. +*/ +static void pwq_adjust_max_active (struct pool_workqueue *pwq) +{ +struct workqueue_struct *wq = pwq->wq; +bool freezable = wq->flags &WQ_FREEZABLE ; +unsigned long flags; + +/* for @wq->saved_max_active */ +lockdep_assert_held (&wq->mutex); + +/* fast exit for non-freezable wqs */ +if (!freezable && pwq->max_active == wq->saved_max_active) +return ; + +/* this function can be called during early boot w/ irq disabled */ +raw_spin_lock_irqsave (&pwq->pool->lock, flags); + +/* +* During [un]freezing, the caller is responsible for ensuring that +* this function is called at least once after @workqueue_freezing +* is updated and visible. +*/ +if (!freezable || !workqueue_freezing) { + pwq->max_active = wq->saved_max_active; + +while (!list_empty (&pwq->inactive_works) && + pwq->nr_active < pwq->max_active) +pwq_activate_first_inactive (pwq); + +kick_pool (pwq->pool); + }else { + pwq->max_active =0 ; + } + +raw_spin_unlock_irqrestore (&pwq->pool->lock, flags); +} +/* initialize newly allocated @pwq which is associated with @wq and @pool */ static void init_pwq (struct pool_workqueue *pwq,struct workqueue_struct *wq,struct worker_pool *pool)
@@ -4177,6 +4212,9 @@ static void link_pwq(struct pool_workque/* set the matching work_color */ pwq->work_color = wq->work_color; +/* sync max_active to the current setting */ +pwq_adjust_max_active (pwq); +/* link in @pwq */ list_add_rcu (&pwq->pwqs_node, &wq->pwqs); }
@@ -4627,52 +4665,6 @@ static int init_rescuer(struct workqueuereturn 0 ; } -/** -* wq_adjust_max_active - update a wq's max_active to the current setting -* @wq: target workqueue -* -* If @wq isn't freezing, set @wq->max_active to the saved_max_active and -* activate inactive work items accordingly. If @wq is freezing, clear -* @wq->max_active to zero. -*/ -static void wq_adjust_max_active (struct workqueue_struct *wq) -{ -struct pool_workqueue *pwq; - -lockdep_assert_held (&wq->mutex); - -if ((wq->flags &WQ_FREEZABLE ) && workqueue_freezing) { -WRITE_ONCE (wq->max_active,0 ); -return ; - } - -if (wq->max_active == wq->saved_max_active) -return ; - -/* -* Update @wq->max_active and then kick inactive work items if more -* active work items are allowed. This doesn't break work item ordering -* because new work items are always queued behind existing inactive -* work items if there are any. -*/ -WRITE_ONCE (wq->max_active, wq->saved_max_active); - -for_each_pwq (pwq, wq) { -unsigned long flags; - -/* this function can be called during early boot w/ irq disabled */ -raw_spin_lock_irqsave (&pwq->pool->lock, flags); - -while (!list_empty (&pwq->inactive_works) && - pwq->nr_active < wq->max_active) -pwq_activate_first_inactive (pwq); - -kick_pool (pwq->pool); - -raw_spin_unlock_irqrestore (&pwq->pool->lock, flags); - } -} - __printf(1, 4) struct workqueue_struct *alloc_workqueue(const char *fmt, unsigned int flags,
@@ -4680,6 +4672,7 @@ struct workqueue_struct *alloc_workqueue {va_list args;struct workqueue_struct *wq; +struct pool_workqueue *pwq;int len;/*
@@ -4718,7 +4711,6 @@ struct workqueue_struct *alloc_workqueue/* init wq */ wq->flags = flags; - wq->max_active = max_active; wq->saved_max_active = max_active;mutex_init (&wq->mutex);atomic_set (&wq->nr_pwqs_to_flush,0 );
@@ -4747,7 +4739,8 @@ struct workqueue_struct *alloc_workqueuemutex_lock (&wq_pool_mutex);mutex_lock (&wq->mutex); -wq_adjust_max_active (wq); +for_each_pwq (pwq, wq) +pwq_adjust_max_active (pwq);mutex_unlock (&wq->mutex);list_add_tail_rcu (&wq->list, &workqueues);
@@ -4885,6 +4878,8 @@ EXPORT_SYMBOL_GPL(destroy_workqueue);*/ void workqueue_set_max_active (struct workqueue_struct *wq,int max_active) { +struct pool_workqueue *pwq; +/* disallow meddling with max_active for ordered workqueues */ if (WARN_ON (wq->flags & __WQ_ORDERED_EXPLICIT))return ;
@@ -4895,7 +4890,9 @@ void workqueue_set_max_active(struct wor wq->flags &= ~__WQ_ORDERED; wq->saved_max_active = max_active; -wq_adjust_max_active (wq); + +for_each_pwq (pwq, wq) +pwq_adjust_max_active (pwq);mutex_unlock (&wq->mutex); }
@@ -5142,8 +5139,8 @@ static void show_pwq(struct pool_workquepr_info (" pwq %d:" , pool->id);pr_cont_pool_info (pool); -pr_cont (" active=%d refcnt=%d%s\n" , - pwq->nr_active, pwq->refcnt, +pr_cont (" active=%d/%d refcnt=%d%s\n" , + pwq->nr_active, pwq->max_active, pwq->refcnt, !list_empty (&pwq->mayday_node) ?" MAYDAY" :"" );hash_for_each (pool->busy_hash, bkt, worker, hentry) {
@@ -5691,6 +5688,7 @@ EXPORT_SYMBOL_GPL(work_on_cpu_safe_key);void freeze_workqueues_begin (void ) {struct workqueue_struct *wq; +struct pool_workqueue *pwq;mutex_lock (&wq_pool_mutex);
@@ -5699,7 +5697,8 @@ void freeze_workqueues_begin(void)list_for_each_entry (wq, &workqueues, list) {mutex_lock (&wq->mutex); -wq_adjust_max_active (wq); +for_each_pwq (pwq, wq) +pwq_adjust_max_active (pwq);mutex_unlock (&wq->mutex); }
@@ -5764,6 +5763,7 @@ out_unlock:void thaw_workqueues (void ) {struct workqueue_struct *wq; +struct pool_workqueue *pwq;mutex_lock (&wq_pool_mutex);
@@ -5775,7 +5775,8 @@ void thaw_workqueues(void)/* restore max_active and repopulate worklist */ list_for_each_entry (wq, &workqueues, list) {mutex_lock (&wq->mutex); -wq_adjust_max_active (wq); +for_each_pwq (pwq, wq) +pwq_adjust_max_active (pwq);mutex_unlock (&wq->mutex); }
Greg Kroah-Hartman
maintainerPATCH 11/11 Revert "workqueue.c: Increase workqueue name length"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 43a181f8f41aca27e7454cf44a6dfbccc8b14e92 which is commit 31c89007285d365aa36f71d8fb0701581c770a27 upstream.
The workqueue patches backported to 6.6.y caused some reported regressions, so revert them for now.
--- kernel/workqueue.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
kernel/workqueue.c +2 -6
@@ -108,7 +108,7 @@ enum {RESCUER_NICE_LEVEL =MIN_NICE ,HIGHPRI_NICE_LEVEL =MIN_NICE , - WQ_NAME_LEN = 32, + WQ_NAME_LEN = 24, };/*
@@ -4673,7 +4673,6 @@ struct workqueue_struct *alloc_workqueueva_list args;struct workqueue_struct *wq;struct pool_workqueue *pwq; -int len;/* * Unbound && max_active == 1 used to imply ordered, which is no longer
@@ -4700,12 +4699,9 @@ struct workqueue_struct *alloc_workqueue }va_start (args, max_active); - len =vsnprintf (wq->name,sizeof (wq->name), fmt, args); +vsnprintf (wq->name,sizeof (wq->name), fmt, args);va_end (args); -if (len >=WQ_NAME_LEN ) -pr_warn_once ("workqueue: name exceeds WQ_NAME_LEN. Truncating to: %s\n" , wq->name); - max_active = max_active ?:WQ_DFL_ACTIVE ; max_active =wq_clamp_max_active (max_active, flags, wq->name);
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.25 release. There are 11 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 Fri, 05 Apr 2024 17:51:13 +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.25-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 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.25 release. There are 11 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 Fri, 05 Apr 2024 17:51:13 +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.25-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.25 release. There are 11 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 Fri, 05 Apr 2024 17:51:13 +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.25-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:
10 builds: 10 pass, 0 fail
26 boots: 26 pass, 0 fail
116 tests: 116 pass, 0 failLinux version: 6.6.25-rc1-ge253a5c1b7de
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
tegra20-ventana, tegra210-p2371-2180,
tegra210-p3450-0000, tegra30-cardhu-a04Jon
Hi Greg
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.25 release. There are 11 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 Fri, 05 Apr 2024 17:51:13 +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.25-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
6.6.25-rc1 tested.
Build successfully completed.
Boot successfully completed.
No dmesg regressions.
Video output normal.
Sound output normal.
Lenovo ThinkPad X1 Carbon Gen10(Intel i7-1260P(x86_64) arch linux)
[ 0.000000] Linux version 6.6.25-rc1rv
(takeshi@ThinkPadX1Gen10J0764) (gcc (GCC) 13.2.1 20230801, GNU ld (GNU Binutils) 2.42.0) #1 SMP PREEMPT_DYNAMIC Thu Apr 4 18:22:42 JST 2024
Thanks
Quoted 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.25 release. There are 11 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.
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.25 release. There are 11 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 Fri, 05 Apr 2024 17:51:13 +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.25-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
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
## Build
* kernel: 6.6.25-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-6.6.y
* git commit: e253a5c1b7de55d37ff656141e7001bdfd035d8c
* git describe: v6.6.24-12-ge253a5c1b7de
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.6.y/build/v6.6.24-12-ge253a5c1b7de
## Test Regressions (compared to v6.6.21)
## Metric Regressions (compared to v6.6.21)
## Test Fixes (compared to v6.6.21)
## Metric Fixes (compared to v6.6.21)
## Test result summary
total: 121780, pass: 106264, fail: 997, skip: 14420, xfail: 99
## Build Summary
* arc: 5 total, 5 passed, 0 failed
* arm: 131 total, 131 passed, 0 failed
* arm64: 40 total, 39 passed, 1 failed
* i386: 31 total, 31 passed, 0 failed
* mips: 24 total, 24 passed, 0 failed
* parisc: 3 total, 3 passed, 0 failed
* powerpc: 34 total, 34 passed, 0 failed
* riscv: 16 total, 16 passed, 0 failed
* s390: 12 total, 12 passed, 0 failed
* sh: 10 total, 10 passed, 0 failed
* sparc: 6 total, 6 passed, 0 failed
* x86_64: 35 total, 35 passed, 0 failed
## Test suites summary
* boot
* kselftest-arm64
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-exec
* kselftest-fpu
* kselftest-ftrace
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-kcmp
* kselftest-membarrier
* kselftest-memfd
* kselftest-mincore
* kselftest-mqueue
* kselftest-net
* kselftest-net-mptcp
* kselftest-openat2
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-seccomp
* kselftest-sigaltstack
* kselftest-size
* kselftest-tc-testing
* kselftest-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user_events
* kselftest-vDSO
* kselftest-x86
* kunit
* libgpiod
* libhugetlbfs
* log-parser-boot
* log-parser-test
* ltp-cap_bounds
* ltp-commands
* ltp-containers
* ltp-controllers
* ltp-crypto
* ltp-cve
* ltp-fcntl-locktests
* ltp-filecaps
* ltp-fs
* ltp-fs_bind
* ltp-fs_perms_simple
* ltp-hugetlb
* ltp-io
* ltp-ipc
* ltp-math
* ltp-mm
* ltp-nptl
* ltp-pty
* ltp-sched
* ltp-securebits
* ltp-smoke
* ltp-smoketest
* ltp-syscalls
* ltp-tracing
* perf
* rcutorture
--
Linaro LKFT
https://lkft.linaro.org
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.6.25 release. There are 11 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 Fri, 05 Apr 2024 17:51:13 +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.25-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