mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH batadv-next v3] batman-adv: tt: batch BH re-enable during TT hash walks
@ 2026-11-08  0:01 Ömer Mete Kaya
  2026-11-08  7:35 ` Sven Eckelmann
  0 siblings, 1 reply; 5+ messages in thread
From: Ömer Mete Kaya @ 2026-11-08  0:01 UTC (permalink / raw)
  To: sven, marek.lindner, sw, antonio
  Cc: b.a.t.m.a.n, netdev, linux-kernel, davem,
	syzbot+61b202fdc410840f0198, Ömer Mete Kaya

Each spin_unlock_bh() re-enables bottom halves and, when softirqs are
pending, processes them inline before returning. During a 1024-bucket
TT hash walk under network load, the purge worker can be repeatedly
interrupted by inline softirq processing at every bucket boundary.

Replace per-bucket spin_lock_bh()/spin_unlock_bh() with an outer
local_bh_disable(), inner spin_lock()/spin_unlock(), and periodic
re-enable points via batadv_hash_bh_resched(). The helper re-enables
BH and calls cond_resched() every BATADV_HASH_BH_BUDGET (64) buckets.
The total softirq work is unchanged, but BH state transitions drop
from 1024 to ~16 per walk, reducing how often the purge loop is
interrupted.

The cond_resched() provides a voluntary preemption point on
non-PREEMPT kernels. Functions called under a spinlock or from
non-sleepable contexts cannot yield; these use the outer
local_bh_disable()/local_bh_enable() conversion without
batadv_hash_bh_resched().

The five converted hash-walking functions are:

  batadv_tt_local_purge():
    Accepts a new @may_sleep parameter. From workqueue context
    (batadv_tt_purge), may_sleep=true allows periodic yielding.
    From batadv_tt_local_resize_to_mtu(), may_sleep=false because
    the caller holds tt.commit_lock.

  batadv_tt_global_del_orig():
    Called from multiple contexts including under spinlocks
    (batadv_purge_orig_ref). Cannot yield. Converts to outer
    local_bh_disable()/local_bh_enable() with inner spin_lock()/
    spin_unlock() but does not use batadv_hash_bh_resched().

  batadv_tt_global_purge():
    Called from workqueue context; yields every 64 buckets.

  batadv_tt_local_transition_new():
  batadv_tt_local_purge_pending_clients():
    Called under tt.commit_lock. Convert to outer local_bh_disable()/
    local_bh_enable() with inner spin_lock()/spin_unlock() but do
    not use batadv_hash_bh_resched().

On PREEMPT_RT, local_bh_disable() maps to migrate_disable() and
softirqs run in dedicated kthreads, so the batching has no effect
on softirq latency but the reduced BH transition overhead still
applies.

Reported-by: syzbot+61b202fdc410840f0198@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=61b202fdc410840f0198
Signed-off-by: Ömer Mete Kaya <omermetekaya0@gmail.com>
---
Changes in v3:
  - Remove batadv_hash_bh_resched() from batadv_tt_global_del_orig():
    called under spinlocks (e.g. batadv_purge_orig_ref).
    Convert to outer local_bh_disable()/local_bh_enable() with
    inner spin_lock()/spin_unlock() only, like the commit_lock paths.
  - Fix reverse christmas tree ordering in batadv_tt_global_purge()
  - Fix Closes: URL (remove backslash escaping)

 net/batman-adv/hash.h              | 30 +++++++++++++++++++
 net/batman-adv/translation-table.c | 48 ++++++++++++++++++++++--------
 2 files changed, 65 insertions(+), 13 deletions(-)

diff --git a/net/batman-adv/hash.h b/net/batman-adv/hash.h
index 5d9a5ab..cf3ef70 100644
--- a/net/batman-adv/hash.h
+++ b/net/batman-adv/hash.h
@@ -10,10 +10,12 @@
 #include "main.h"

 #include <linux/atomic.h>
+#include <linux/bottom_half.h>
 #include <linux/compiler.h>
 #include <linux/list.h>
 #include <linux/lockdep.h>
 #include <linux/rculist.h>
+#include <linux/sched.h>
 #include <linux/spinlock.h>
 #include <linux/stddef.h>
 #include <linux/types.h>
@@ -167,4 +169,32 @@ static inline void *batadv_hash_remove(struct batadv_hashtable *hash,
 	return data_save;
 }

+/* work which can be done in a hash walk before BH gets re-enabled */
+#define BATADV_HASH_BH_BUDGET 64
+
+/**
+ * batadv_hash_bh_resched() - re-enable BH after the work budget is used up
+ * @buckets_done: buckets processed since BH was disabled, reset when BH is
+ *  re-enabled
+ *
+ * A walk over all buckets of a hash disables BH only once instead of
+ * re-enabling it after each bucket. Otherwise, pending softirqs would be
+ * processed inline after each bucket. When @buckets_done reached
+ * BATADV_HASH_BH_BUDGET, BH is re-enabled to run the pending softirqs and to
+ * give other tasks a chance to run.
+ *
+ * Must be called with BH disabled, without any spinlock held and from a
+ * context which is allowed to sleep.
+ */
+static inline void batadv_hash_bh_resched(u32 *buckets_done)
+{
+	if (*buckets_done < BATADV_HASH_BH_BUDGET)
+		return;
+
+	local_bh_enable();
+	cond_resched();
+	local_bh_disable();
+	*buckets_done = 0;
+}
+
 #endif /* _NET_BATMAN_ADV_HASH_H_ */
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index b9407ad..ebeb486 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -36,6 +36,7 @@
 #include <linux/overflow.h>
 #include <linux/rculist.h>
 #include <linux/rcupdate.h>
+#include <linux/sched.h>
 #include <linux/skbuff.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
@@ -1892,23 +1893,32 @@ static void batadv_tt_local_purge_list(struct batadv_priv *bat_priv,
  * @bat_priv: the bat priv with all the mesh interface information
  * @timeout: parameter deciding whether a given tt local entry is considered
  *  inactive or not
+ * @may_sleep: if true, periodically re-enable softirqs and yield the CPU.
+ *  Must be false when called with spinlocks held.
  */
 static void batadv_tt_local_purge(struct batadv_priv *bat_priv,
-				  int timeout)
+				  int timeout, bool may_sleep)
 {
 	spinlock_t *list_lock; /* protects write access to the hash lists */
 	struct batadv_hashtable *hash = bat_priv->tt.local_hash;
 	struct hlist_head *head;
+	u32 buckets_done = 0;
 	u32 i;

+	local_bh_disable();
 	for (i = 0; i < hash->size; i++) {
 		head = &hash->table[i];
 		list_lock = &hash->list_locks[i];

-		spin_lock_bh(list_lock);
+		spin_lock(list_lock);
 		batadv_tt_local_purge_list(bat_priv, head, timeout);
-		spin_unlock_bh(list_lock);
+		spin_unlock(list_lock);
+		buckets_done++;
+
+		if (may_sleep)
+			batadv_hash_bh_resched(&buckets_done);
 	}
+	local_bh_enable();
 }

 /**
@@ -2887,11 +2897,12 @@ void batadv_tt_global_del_orig(struct batadv_priv *bat_priv,
 	if (!hash)
 		return;

+	local_bh_disable();
 	for (i = 0; i < hash->size; i++) {
 		head = &hash->table[i];
 		list_lock = &hash->list_locks[i];

-		spin_lock_bh(list_lock);
+		spin_lock(list_lock);
 		hlist_for_each_entry_safe(tt_common_entry, safe,
 					  head, hash_entry) {
 			/* remove only matching entries */
@@ -2916,8 +2927,9 @@ void batadv_tt_global_del_orig(struct batadv_priv *bat_priv,
 				batadv_tt_global_entry_put(tt_global);
 			}
 		}
-		spin_unlock_bh(list_lock);
+		spin_unlock(list_lock);
 	}
+	local_bh_enable();
 	clear_bit(BATADV_ORIG_CAPA_HAS_TT, &orig_node->capa_initialized);
 }

@@ -2969,14 +2981,16 @@ static void batadv_tt_global_purge(struct batadv_priv *bat_priv)
 	struct batadv_tt_global_entry *tt_global;
 	struct hlist_node *node_tmp;
 	struct hlist_head *head;
+	u32 buckets_done = 0;
 	char *msg = NULL;
 	u32 i;

+	local_bh_disable();
 	for (i = 0; i < hash->size; i++) {
 		head = &hash->table[i];
 		list_lock = &hash->list_locks[i];

-		spin_lock_bh(list_lock);
+		spin_lock(list_lock);
 		hlist_for_each_entry_safe(tt_common, node_tmp, head,
 					  hash_entry) {
 			tt_global = container_of(tt_common,
@@ -2996,8 +3010,12 @@ static void batadv_tt_global_purge(struct batadv_priv *bat_priv)

 			batadv_tt_global_entry_put(tt_global);
 		}
-		spin_unlock_bh(list_lock);
+		spin_unlock(list_lock);
+		buckets_done++;
+
+		batadv_hash_bh_resched(&buckets_done);
 	}
+	local_bh_enable();
 }

 /**
@@ -4402,7 +4420,7 @@ static void batadv_tt_purge(struct work_struct *work)
 	priv_tt = container_of(delayed_work, struct batadv_priv_tt, work);
 	bat_priv = container_of(priv_tt, struct batadv_priv, tt);

-	batadv_tt_local_purge(bat_priv, BATADV_TT_LOCAL_TIMEOUT);
+	batadv_tt_local_purge(bat_priv, BATADV_TT_LOCAL_TIMEOUT, true);
 	batadv_tt_global_purge(bat_priv);
 	batadv_tt_req_purge(bat_priv);
 	batadv_tt_roam_purge(bat_priv);
@@ -4449,11 +4467,12 @@ static void batadv_tt_local_transition_new(struct batadv_priv *bat_priv)
 	if (!hash)
 		return;

+	local_bh_disable();
 	for (i = 0; i < hash->size; i++) {
 		head = &hash->table[i];
 		list_lock = &hash->list_locks[i];

-		spin_lock_bh(list_lock);
+		spin_lock(list_lock);
 		hlist_for_each_entry(tt_common_entry, head, hash_entry) {
 			bool cont = false;

@@ -4472,8 +4491,9 @@ static void batadv_tt_local_transition_new(struct batadv_priv *bat_priv)
 			batadv_tt_local_size_inc(bat_priv,
 						 tt_common_entry->key.vid);
 		}
-		spin_unlock_bh(list_lock);
+		spin_unlock(list_lock);
 	}
+	local_bh_enable();
 }

 /**
@@ -4497,11 +4517,12 @@ static void batadv_tt_local_purge_pending_clients(struct batadv_priv *bat_priv)
 	if (!hash)
 		return;

+	local_bh_disable();
 	for (i = 0; i < hash->size; i++) {
 		head = &hash->table[i];
 		list_lock = &hash->list_locks[i];

-		spin_lock_bh(list_lock);
+		spin_lock(list_lock);
 		hlist_for_each_entry_safe(tt_common, node_tmp, head,
 					  hash_entry) {
 			bool cont = false;
@@ -4536,8 +4557,9 @@ static void batadv_tt_local_purge_pending_clients(struct batadv_priv *bat_priv)

 			batadv_tt_local_entry_put(tt_local);
 		}
-		spin_unlock_bh(list_lock);
+		spin_unlock(list_lock);
 	}
+	local_bh_enable();
 }

 /**
@@ -4839,7 +4861,7 @@ void batadv_tt_local_resize_to_mtu(struct net_device *mesh_iface)
 		if (size_max >= table_size)
 			break;

-		batadv_tt_local_purge(bat_priv, timeout);
+		batadv_tt_local_purge(bat_priv, timeout, false);
 		batadv_tt_local_purge_pending_clients(bat_priv);

 		timeout /= 2;
--
2.56.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH batadv-next v3] batman-adv: tt: batch BH re-enable during TT hash walks
  2026-11-08  0:01 [PATCH batadv-next v3] batman-adv: tt: batch BH re-enable during TT hash walks Ömer Mete Kaya
@ 2026-11-08  7:35 ` Sven Eckelmann
  2026-11-08  8:01   ` [syzbot] [arm?] BUG: workqueue lockup in batadv_tt_purge syzbot
  0 siblings, 1 reply; 5+ messages in thread
From: Sven Eckelmann @ 2026-11-08  7:35 UTC (permalink / raw)
  To: Ömer Mete Kaya
  Cc: marek.lindner, sw, antonio, b.a.t.m.a.n, netdev, linux-kernel,
	davem, syzbot+61b202fdc410840f0198

[-- Attachment #1: Type: text/plain, Size: 2199 bytes --]

On Sunday, 8 November 2026 01:01:11 CET Ömer Mete Kaya wrote:
> Each spin_unlock_bh() re-enables bottom halves and, when softirqs are
> pending, processes them inline before returning. During a 1024-bucket
> TT hash walk under network load, the purge worker can be repeatedly
> interrupted by inline softirq processing at every bucket boundary.
[...]

I already told you that this is not directly for net or net-next. Please don't 
send this to netdev@vger.kernel.org or davem@davemloft.net. The scripts also 
tell you this:

$ ./scripts/get_maintainer.pl ./20261108000137.822325-1-omermetekaya0@gmail.com.mbx
Marek Lindner <marek.lindner@mailbox.org> (maintainer:BATMAN ADVANCED)
Simon Wunderlich <sw@simonwunderlich.de> (maintainer:BATMAN ADVANCED)
Antonio Quartulli <antonio@mandelbit.com> (maintainer:BATMAN ADVANCED)
Sven Eckelmann <sven@narfation.org> (maintainer:BATMAN ADVANCED)
Sebastian Andrzej Siewior <bigeasy@linutronix.de> (maintainer:Real-time Linux (PREEMPT_RT):Keyword:PREEMPT_RT)
Clark Williams <clrkwllms@kernel.org> (maintainer:Real-time Linux (PREEMPT_RT):Keyword:PREEMPT_RT)
Steven Rostedt <rostedt@goodmis.org> (maintainer:Real-time Linux (PREEMPT_RT):Keyword:PREEMPT_RT)
b.a.t.m.a.n@lists.open-mesh.org (moderated list:BATMAN ADVANCED)
linux-kernel@vger.kernel.org (open list)
linux-rt-devel@lists.linux.dev (open list:Real-time Linux (PREEMPT_RT):Keyword:PREEMPT_RT)
Real-time Linux (PREEMPT_RT) status: Supported:Keyword:PREEMPT_RT

And please don't send two versions of the same patch (series) in less than 
24h.

> diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
> index b9407ad..ebeb486 100644
> --- a/net/batman-adv/translation-table.c
> +++ b/net/batman-adv/translation-table.c
> @@ -36,6 +36,7 @@
>  #include <linux/overflow.h>
>  #include <linux/rculist.h>
>  #include <linux/rcupdate.h>
> +#include <linux/sched.h>
>  #include <linux/skbuff.h>
>  #include <linux/slab.h>
>  #include <linux/spinlock.h>

Why do you include linux/sched.h? The correct include would have been
#include <linux/bottom_half.h>


#syz test: https://git.open-mesh.org/batadv.git disable-bh

Regards,
	Sven

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [syzbot] [arm?] BUG: workqueue lockup in batadv_tt_purge
  2026-11-08  7:35 ` Sven Eckelmann
@ 2026-11-08  8:01   ` syzbot
  0 siblings, 0 replies; 5+ messages in thread
From: syzbot @ 2026-11-08  8:01 UTC (permalink / raw)
  To: antonio, b.a.t.m.a.n, davem, linux-kernel, marek.lindner, netdev,
	omermetekaya0, sven, sw, syzkaller-bugs

Hello,

syzbot has tested the proposed patch but the reproducer is still triggering an issue:
BUG: workqueue lockup in nsim_fib_event_work

bridge0: received packet on bridge_slave_1 with own address as source address (addr:aa:aa:aa:aa:aa:0c, vlan:0)
bridge0: received packet on veth1_to_bridge with own address as source address (addr:aa:aa:aa:aa:aa:0c, vlan:0)
BUG: workqueue lockup - pool cpus=1 node=0 flags=0x0 nice=0 stuck for 34s!
Showing busy workqueues and worker pools:
workqueue events: flags=0x100
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=4 refcnt=5
    pending: nsim_dev_hwstats_traffic_work, vmstat_shepherd, 2*ovs_dp_masks_rebalance
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=33 refcnt=34
    in-flight: 26:nsim_fib_event_work for 35s nsim_fib_event_work ,4951:nsim_fib_event_work for 31s ,1503:nsim_fib_event_work for 22s ,1091:nsim_fib_event_work for 15s
    pending: 3*nsim_dev_hwstats_traffic_work, 2*ovs_dp_masks_rebalance, psi_avgs_work, 3*ovs_dp_masks_rebalance, psi_avgs_work, drm_fb_helper_damage_work, 2*l2cap_info_timeout, psi_avgs_work, 2*l2cap_info_timeout, 4*ovs_dp_masks_rebalance, 3*rht_deferred_worker, psi_avgs_work, reg_todo, 3*nsim_fib_event_work
workqueue events_unbound: flags=0x2
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=5 refcnt=6
    in-flight: 14:nsim_dev_trap_report_work for 5s
    pending: 2*nsim_dev_trap_report_work, toggle_allocation_gate, flush_memcg_stats_dwork
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=15 refcnt=16
    in-flight: 5376:cfg80211_wiphy_work for 25s cfg80211_wiphy_work ,1178:cfg80211_wiphy_work for 32s cfg80211_wiphy_work ,1372:cfg80211_wiphy_work for 35s cfg80211_wiphy_work ,5377:nsim_dev_trap_report_work for 7s ,58:cfg80211_wiphy_work for 33s cfg80211_wiphy_work ,49:cfg80211_wiphy_work for 23s cfg80211_wiphy_work ,40:cfg80211_wiphy_work for 31s cfg80211_wiphy_work
    pending: 2*macvlan_process_broadcast
workqueue events_power_efficient: flags=0x82
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=4 refcnt=5
    pending: fb_flashcursor, wg_ratelimiter_gc_entries, 2*neigh_managed_work
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=3 refcnt=4
    in-flight: 1350:gc_worker for 16s ,144:neigh_periodic_work for 20s
    pending: do_cache_clean
workqueue events_dfl_long: flags=0x2
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=11 refcnt=12
    pending: 11*defense_work_handler
workqueue netns: flags=0x6000a
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4
    in-flight: 12:cleanup_net for 36s
workqueue mm_percpu_wq: flags=0x108
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: vmstat_update
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: vmstat_update
workqueue writeback: flags=0x4a
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4 MAYDAY
    in-flight: 33(RESCUER):wb_workfn for 31s
workqueue mld: flags=0x40108
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=1 refcnt=4
    pending: mld_dad_work
    inactive: 2*mld_dad_work
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=108
    pending: mld_dad_work
    inactive: mld_dad_work, 8*mld_ifc_work, 4*mld_dad_work, mld_ifc_work, mld_dad_work, 10*mld_ifc_work, mld_dad_work, 3*mld_ifc_work, mld_dad_work, 11*mld_ifc_work, mld_dad_work, mld_ifc_work, mld_dad_work, mld_ifc_work, 3*mld_dad_work, 10*mld_ifc_work, 3*mld_dad_work, 7*mld_ifc_work, 2*mld_dad_work, 3*mld_ifc_work, mld_dad_work, mld_ifc_work, mld_dad_work, mld_ifc_work, mld_dad_work, mld_ifc_work, mld_dad_work, 17*mld_ifc_work, mld_dad_work, 3*mld_ifc_work, 5*mld_dad_work
workqueue ipv6_addrconf: flags=0x6000a
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=248 MAYDAY
    in-flight: 2822(RESCUER):addrconf_dad_work for 0s
    pending: mayday_cursor_func
    inactive: 242*addrconf_dad_work
workqueue bat_events: flags=0x6000a
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=50 MAYDAY
    in-flight: 2854(RESCUER):batadv_dat_purge for 7s
    inactive: batadv_bla_periodic_work, batadv_dat_purge, batadv_bla_periodic_work, batadv_dat_purge, batadv_bla_periodic_work, batadv_dat_purge, batadv_bla_periodic_work, batadv_dat_purge, batadv_bla_periodic_work, batadv_iv_send_outstanding_bat_ogm_packet, batadv_mcast_mla_update, 4*batadv_iv_send_outstanding_bat_ogm_packet, batadv_purge_orig, 2*batadv_iv_send_outstanding_bat_ogm_packet, 4*batadv_purge_orig, 4*batadv_iv_send_outstanding_bat_ogm_packet, 2*batadv_tt_purge, 4*batadv_iv_send_outstanding_bat_ogm_packet, 3*batadv_tt_purge, batadv_mcast_mla_update, batadv_purge_orig, batadv_iv_send_outstanding_bat_ogm_packet, batadv_tt_purge, 4*batadv_mcast_mla_update, batadv_dat_purge
workqueue wg-kex-wg0: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_encrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg1: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg1: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_decrypt_worker, wg_packet_encrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg2: flags=0x124
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=2 refcnt=3
    in-flight: 4767:wg_packet_handshake_receive_worker for 21s
    pending: wg_packet_handshake_receive_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_decrypt_worker, wg_packet_encrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg0: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-crypt-wg1: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=2 refcnt=3
    in-flight: 932:wg_packet_decrypt_worker for 22s
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_encrypt_worker, wg_packet_decrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg2: flags=0x124
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-kex-wg2: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_encrypt_worker, wg_packet_decrypt_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=3 refcnt=4
    in-flight: 4813:wg_packet_encrypt_worker for 14s
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-kex-wg0: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-kex-wg1: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg1: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_decrypt_worker, wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_encrypt_worker, wg_packet_decrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg2: flags=0x124
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_encrypt_worker, wg_packet_decrypt_worker, wg_packet_tx_worker
workqueue wg-crypt-wg1: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_encrypt_worker, wg_packet_decrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg2: flags=0x124
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_decrypt_worker, wg_packet_encrypt_worker
pool 2: cpus=0 node=0 flags=0x0 nice=0 hung=14s workers=6 idle: 4847 9 10
pool 6: cpus=1 node=0 flags=0x0 nice=0 hung=34s workers=9 idle: 24 4738 5269 5303 4950
pool 8: cpus=0-1 flags=0x6 nice=0 hung=0s workers=12 manager: 5378
Showing backtraces of busy workers in stalled worker pools:
pool 6:
task:kworker/1:1     state:R  running task     stack:0     pid:26    tgid:26    ppid:2      task_flags:0x4208060 flags:0x00000010
Workqueue: events nsim_fib_event_work
Call trace:


Tested on:

commit:         532df11b batman-adv: tt: batch BH re-enable during TT ..
git tree:       https://git.open-mesh.org/batadv.git disable-bh
console output: https://syzkaller.appspot.com/x/log.txt?x=137967a5580000
kernel config:  https://syzkaller.appspot.com/x/.config?x=a3c0ea8c3fd76353
dashboard link: https://syzkaller.appspot.com/bug?extid=61b202fdc410840f0198
compiler:       Debian clang version 22.1.8 (1~deb13u4), Debian LLD 22.1.8
userspace arch: arm64

Note: no patches were applied.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [syzbot] [arm?] BUG: workqueue lockup in batadv_tt_purge
       [not found] <20261029135633.206144-1-omermetekaya0@gmail.com>
@ 2026-10-29 13:58 ` syzbot
  0 siblings, 0 replies; 5+ messages in thread
From: syzbot @ 2026-10-29 13:58 UTC (permalink / raw)
  To: linux-kernel, omermetekaya0, syzkaller-bugs

Hello,

syzbot tried to test the proposed patch but the build/boot failed:

failed to checkout kernel repo git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/master: failed to run ["git" "-c" "core.hooksPath=/dev/null" "fetch" "--force" "f569e972c8e9057ee9c286220c83a480ebf30cc5" "master"]: exit status 128


Tested on:

commit:         [unknown 
git tree:       upstream
kernel config:  https://syzkaller.appspot.com/x/.config?x=26d6221a572842ac
dashboard link: https://syzkaller.appspot.com/bug?extid=61b202fdc410840f0198
compiler:       
userspace arch: arm64
patch:          https://syzkaller.appspot.com/x/patch.diff?x=17ca9b8e580000


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [syzbot] [arm?] BUG: workqueue lockup in batadv_tt_purge
  2026-09-15 15:10 [syzbot] [netfilter?] " syzbot
@ 2026-10-17 10:43 ` syzbot
  0 siblings, 0 replies; 5+ messages in thread
From: syzbot @ 2026-10-17 10:43 UTC (permalink / raw)
  To: davem, dsahern, edumazet, edumazet, fw, herbert, horms, idosch,
	kuba, linux-arm-kernel, linux-kernel, netdev, netfilter-devel,
	pabeni, pablo, steffen.klassert, syzkaller-bugs

syzbot has found a reproducer for the following issue on:

HEAD commit:    7a19f0cc94ad Merge branch 'for-next/core' into for-kernelci
git tree:       git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-kernelci
console output: https://syzkaller.appspot.com/x/log.txt?x=16fb34e1580000
kernel config:  https://syzkaller.appspot.com/x/.config?x=26d6221a572842ac
dashboard link: https://syzkaller.appspot.com/bug?extid=61b202fdc410840f0198
compiler:       Debian clang version 22.1.8 (1~deb13u4), Debian LLD 22.1.8
userspace arch: arm64
syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=11329bd1580000

Downloadable assets:
disk image: https://storage.googleapis.com/syzbot-assets/296cd4b77dbf/disk-7a19f0cc.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/e57669ed895f/vmlinux-7a19f0cc.xz
kernel image: https://storage.googleapis.com/syzbot-assets/c679c1ad76d4/Image-7a19f0cc.gz.xz

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+61b202fdc410840f0198@syzkaller.appspotmail.com

bridge0: received packet on bridge_slave_1 with own address as source address (addr:aa:aa:aa:aa:aa:1c, vlan:0)
BUG: workqueue lockup - pool cpus=1 node=0 flags=0x0 nice=-20 stuck for 32s!
Showing busy workqueues and worker pools:
workqueue events: flags=0x100
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=9 refcnt=10
    pending: free_ipc, rht_deferred_worker, 2*nsim_dev_hwstats_traffic_work, vmstat_shepherd, 2*psi_avgs_work, 2*ovs_dp_masks_rebalance
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=11 refcnt=12
    in-flight: 1503:request_firmware_work_func for 147s
    pending: 3*nsim_dev_hwstats_traffic_work, 2*psi_avgs_work, drm_fb_helper_damage_work, 4*ovs_dp_masks_rebalance
workqueue events_unbound: flags=0x2
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=9 refcnt=10
    in-flight: 5092:call_usermodehelper_exec_work for 84s ,13:nsim_dev_trap_report_work for 17s ,5097:nsim_dev_trap_report_work for 5s ,196:cfg80211_wiphy_work for 25s
    pending: 2*nsim_dev_trap_report_work, flush_memcg_stats_dwork, toggle_allocation_gate, nsim_dev_trap_report_work
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=13 refcnt=14
    in-flight: 5096:cfg80211_wiphy_work for 85s cfg80211_wiphy_work ,5095:cfg80211_wiphy_work for 90s cfg80211_wiphy_work ,49:cfg80211_wiphy_work for 93s cfg80211_wiphy_work ,61:cfg80211_wiphy_work for 94s cfg80211_wiphy_work ,12:linkwatch_event for 93s ,1428:cfg80211_wiphy_work for 93s cfg80211_wiphy_work ,1214:cfg80211_wiphy_work for 91s cfg80211_wiphy_work
workqueue events_power_efficient: flags=0x82
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=6 refcnt=7
    in-flight: 1187:neigh_periodic_work for 2s
    pending: 2*neigh_managed_work, fb_flashcursor, gc_worker, wg_ratelimiter_gc_entries
workqueue events_dfl_long: flags=0x2
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=6 refcnt=7
    pending: 6*defense_work_handler
workqueue rcu_gp: flags=0x108
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=4 MAYDAY
    pending: process_srcu
workqueue mm_percpu_wq: flags=0x108
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=3 MAYDAY
    pending: vmstat_update
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=1 refcnt=4 MAYDAY
    pending: mayday_cursor_func, vmstat_update
workqueue writeback: flags=0x4a
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=3 MAYDAY
    pending: wb_workfn
workqueue kblockd: flags=0x118
  pwq 7: cpus=1 node=0 flags=0x0 nice=-20 active=1 refcnt=2
    pending: blk_mq_timeout_work
workqueue mld: flags=0x40108
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=4 MAYDAY
    pending: mld_ifc_work
    inactive: mld_ifc_work
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=1 refcnt=97 MAYDAY
    in-flight: 2824(RESCUER):mld_ifc_work for 2s
    pending: mayday_cursor_func
    inactive: 3*mld_ifc_work, mld_dad_work, 5*mld_ifc_work, mld_dad_work, 5*mld_ifc_work, mld_dad_work, 2*mld_ifc_work, mld_dad_work, 5*mld_ifc_work, mld_dad_work, 10*mld_ifc_work, mld_dad_work, 3*mld_ifc_work, mld_dad_work, 4*mld_ifc_work, 3*mld_dad_work, mld_ifc_work, mld_dad_work, 6*mld_ifc_work, mld_dad_work, 5*mld_ifc_work, mld_dad_work, 11*mld_ifc_work, mld_dad_work, 4*mld_ifc_work, mld_dad_work, 5*mld_ifc_work, 2*mld_dad_work, 4*mld_ifc_work, 2*mld_dad_work, mld_ifc_work
workqueue ipv6_addrconf: flags=0x6000a
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=386
    in-flight: 40:addrconf_dad_work for 94s
    inactive: 382*addrconf_dad_work
workqueue bat_events: flags=0x6000a
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=40 MAYDAY
    in-flight: 2857(RESCUER):batadv_tt_purge for 0s
    pending: mayday_cursor_func
    inactive: 3*batadv_iv_send_outstanding_bat_ogm_packet, 2*batadv_purge_orig, 2*batadv_iv_send_outstanding_bat_ogm_packet, batadv_purge_orig, 6*batadv_iv_send_outstanding_bat_ogm_packet, 3*batadv_mcast_mla_update, 2*batadv_dat_purge, 2*batadv_bla_periodic_work, batadv_dat_purge, batadv_bla_periodic_work, batadv_dat_purge, batadv_bla_periodic_work, batadv_dat_purge, batadv_bla_periodic_work, batadv_tt_purge, 2*batadv_mcast_mla_update, 2*batadv_purge_orig, 2*batadv_tt_purge
workqueue wg-kex-wg0: flags=0x124
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=1 refcnt=2
    in-flight: 4784:wg_packet_handshake_receive_worker for 47s
workqueue wg-crypt-wg0: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=3 MAYDAY
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=2 refcnt=5 MAYDAY
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-crypt-wg1: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=3 MAYDAY
    pending: wg_packet_decrypt_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=2 refcnt=5 MAYDAY
    pending: mayday_cursor_func, wg_packet_decrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg2: flags=0x124
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=2
    in-flight: 5067:wg_packet_handshake_receive_worker for 30s
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=1 refcnt=2
    in-flight: 5074:wg_packet_handshake_receive_worker for 41s
workqueue wg-kex-wg2: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=2 refcnt=4 MAYDAY
    pending: wg_packet_encrypt_worker, wg_packet_tx_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=3 refcnt=6 MAYDAY
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker, wg_packet_decrypt_worker
workqueue wg-kex-wg0: flags=0x124
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-kex-wg0: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=2 refcnt=4 MAYDAY
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=3 refcnt=6 MAYDAY
    pending: wg_packet_decrypt_worker, wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-kex-wg1: flags=0x124
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-crypt-wg1: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=2 refcnt=4 MAYDAY
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=3 refcnt=6 MAYDAY
    pending: mayday_cursor_func, wg_packet_decrypt_worker, wg_packet_encrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg2: flags=0x124
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=2 refcnt=3
    in-flight: 866:wg_packet_handshake_receive_worker for 31s
    pending: wg_packet_handshake_receive_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=2 refcnt=3
    in-flight: 24:wg_packet_handshake_receive_worker for 44s
    pending: wg_packet_handshake_receive_worker
workqueue wg-kex-wg0: flags=0x124
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-kex-wg0: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=3 MAYDAY
    pending: wg_packet_tx_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=3 refcnt=6 MAYDAY
    pending: wg_packet_decrypt_worker, wg_packet_encrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg1: flags=0x124
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=2 refcnt=3
    in-flight: 4794:wg_packet_handshake_receive_worker for 67s wg_packet_handshake_receive_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=2 refcnt=3
    in-flight: 4833:wg_packet_handshake_receive_worker for 47s
    pending: wg_packet_handshake_receive_worker
workqueue wg-kex-wg1: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg1: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=2 refcnt=4 MAYDAY
    pending: wg_packet_decrypt_worker, wg_packet_tx_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=3 refcnt=6 MAYDAY
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker, wg_packet_decrypt_worker
workqueue wg-kex-wg2: flags=0x124
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=2 refcnt=3
    in-flight: 5091:wg_packet_handshake_receive_worker for 22s
    pending: wg_packet_handshake_receive_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=2 refcnt=3
    in-flight: 4847:wg_packet_handshake_receive_worker for 41s
    pending: wg_packet_handshake_receive_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=2 refcnt=5 MAYDAY
    in-flight: 10:wg_packet_decrypt_worker for 1s
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=2 refcnt=4 MAYDAY
    pending: wg_packet_decrypt_worker, wg_packet_encrypt_worker
workqueue wg-kex-wg0: flags=0x124
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=2
    in-flight: 4955:wg_packet_handshake_receive_worker for 5s
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=3 MAYDAY
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=3 refcnt=6 MAYDAY
    pending: wg_packet_decrypt_worker, wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-kex-wg1: flags=0x124
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-kex-wg1: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg1: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=3 refcnt=5 MAYDAY
    pending: wg_packet_decrypt_worker, wg_packet_tx_worker, wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=3 refcnt=6 MAYDAY
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker, wg_packet_decrypt_worker
workqueue wg-kex-wg2: flags=0x124
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=2 refcnt=3
    in-flight: 9:wg_packet_handshake_receive_worker for 31s wg_packet_handshake_receive_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=2 refcnt=3
    in-flight: 26:wg_packet_handshake_receive_worker for 47s
    pending: wg_packet_handshake_receive_worker
workqueue wg-kex-wg2: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=4 MAYDAY
    pending: wg_packet_decrypt_worker
  pwq 6: cpus=1 node=0 flags=0x2 nice=0 active=2 refcnt=4 MAYDAY
    pending: wg_packet_decrypt_worker, wg_packet_encrypt_worker
pool 2: cpus=0 node=0 flags=0x2 nice=0 hung=1s workers=8 manager: 5019
pool 6: cpus=1 node=0 flags=0x2 nice=0 hung=2s workers=8 manager: 1091
pool 8: cpus=0-1 flags=0x6 nice=0 hung=0s workers=14 manager: 5099
Showing backtraces of busy workers in stalled worker pools:
pool 7: no worker in running state, cpu=1 is busy (nr_workers=2 nr_idle=2)
The pool might have trouble waking an idle worker.
Backtrace of last woken worker:
task:kworker/1:1H    state:R  running task     stack:0     pid:4356  tgid:4356  ppid:2      task_flags:0x4208060 flags:0x00000010
Workqueue:  0x0 (kblockd)
Call trace:
 __switch_to+0x2b4/0x6e4 arch/arm64/kernel/process.c:775 (T)
 context_switch kernel/sched/core.c:5533 [inline]
 __schedule+0x135c/0x2b00 kernel/sched/core.c:7284
 __schedule_loop kernel/sched/core.c:7361 [inline]
 schedule+0x13c/0x20c kernel/sched/core.c:7376
 worker_thread+0x924/0xbd0 kernel/workqueue.c:3575
 kthread+0x304/0x3d4 kernel/kthread.c:436
 ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:854
Sending NMI from CPU 0 to CPUs 1:
NMI backtrace for cpu 1
CPU: 1 UID: 0 PID: 2857 Comm: kworker/R-bat_e Not tainted syzkaller #0 PREEMPT 
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/23/2026
Workqueue: bat_events batadv_tt_purge
pstate: 43400005 (nZcv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--)
pc : check_kcov_mode+0x30/0x54 kernel/kcov.c:179
lr : __sanitizer_cov_trace_pc+0x28/0x5c kernel/kcov.c:213
sp : ffff80008f7f6480
x29: ffff80008f7f6480 x28: ffff0000d7c37cdf x27: dfff800000000000
x26: 1fffe0001af86f99 x25: 0000000000000000 x24: 0000000000000001
x23: 0000000000000003 x22: ffff0000d7c37cc8 x21: 00000000fffffffd
x20: ffff0000c989bb00 x19: ffff800085770458 x18: ffff80011b89c000
x17: 0000000000020010 x16: 0038dd8600000000 x15: 0000000000000001
x14: 000000000453af90 x13: 0000000000000002 x12: 0000000000000000
x11: ffff80008f7f6740 x10: 000000000000003f x9 : 0000000000000101
x8 : 0000000000000000 x7 : ffff80008f7f6750 x6 : 0000000000000003
x5 : ffff80008f7f6750 x4 : ffff80008f7f6740 x3 : ffff800085770444
x2 : 00000000fffffffd x1 : ffff0000c989bb00 x0 : 0000000000000002
Call trace:
 check_kcov_mode+0x30/0x54 kernel/kcov.c:179 (P)
 find_match+0x1b4/0xacc net/ipv6/route.c:790
 __find_rr_leaf+0x1d8/0x634 net/ipv6/route.c:873
 find_rr_leaf net/ipv6/route.c:894 [inline]
 rt6_select net/ipv6/route.c:938 [inline]
 fib6_table_lookup+0x3a4/0x8e8 net/ipv6/route.c:2261
 ip6_pol_route+0x224/0xec4 net/ipv6/route.c:2298
 ip6_pol_route_input+0x74/0x98 net/ipv6/route.c:2357
 pol_lookup_func include/net/ip6_fib.h:670 [inline]
 fib6_rule_lookup+0x1a0/0x474 net/ipv6/fib6_rules.c:123
 ip6_route_input_lookup+0xa8/0xdc net/ipv6/route.c:2369
 ip6_route_input+0x578/0x860 net/ipv6/route.c:2672
 ip6_rcv_finish_core+0x200/0x3a4 net/ipv6/ip6_input.c:106
 ip6_rcv_finish+0x120/0x204 net/ipv6/ip6_input.c:117
 ip_sabotage_in+0x1bc/0x220 net/bridge/br_netfilter_hooks.c:988
 nf_hook_entry_hookfn include/linux/netfilter.h:165 [inline]
 nf_hook_slow+0xc8/0x224 net/netfilter/core.c:619
 nf_hook include/linux/netfilter.h:280 [inline]
 NF_HOOK+0x1f0/0x398 include/linux/netfilter.h:323
 ipv6_rcv+0x9c/0xbc net/ipv6/ip6_input.c:351
 __netif_receive_skb_one_core+0xc8/0x110 net/core/dev.c:6297
 __netif_receive_skb+0x34/0x128 net/core/dev.c:6410
 netif_receive_skb_internal net/core/dev.c:6496 [inline]
 netif_receive_skb+0x1e0/0x888 net/core/dev.c:6555
 br_netif_receive_skb+0x138/0x184 net/bridge/br_input.c:30
 NF_HOOK+0xa8/0x3a0 include/linux/netfilter.h:325
 br_pass_frame_up+0x28c/0x41c net/bridge/br_input.c:70
 br_handle_frame_finish+0xed0/0x14c4 net/bridge/br_input.c:-1
 br_nf_hook_thresh+0x344/0x3e8 net/bridge/br_netfilter_hooks.c:-1
 br_nf_pre_routing_finish_ipv6+0x7ac/0xaa4 net/bridge/br_netfilter_ipv6.c:-1
 NF_HOOK include/linux/netfilter.h:325 [inline]
 br_nf_pre_routing_ipv6+0x2c4/0x5f8 net/bridge/br_netfilter_ipv6.c:183
 br_nf_pre_routing+0x6e0/0x1168 net/bridge/br_netfilter_hooks.c:513
 nf_hook_entry_hookfn include/linux/netfilter.h:165 [inline]
 nf_hook_bridge_pre net/bridge/br_input.c:291 [inline]
 br_handle_frame+0xeb0/0x10dc net/bridge/br_input.c:451
 __netif_receive_skb_core+0x848/0x2a3c net/core/dev.c:6184
 __netif_receive_skb_one_core+0x70/0x110 net/core/dev.c:6295
 __netif_receive_skb+0x34/0x128 net/core/dev.c:6410
 process_backlog+0x588/0x14e0 net/core/dev.c:6761
 __napi_poll+0xb4/0x328 net/core/dev.c:7830
 napi_poll net/core/dev.c:7893 [inline]
 net_rx_action+0x5b0/0xc14 net/core/dev.c:8050
 handle_softirqs+0x324/0xcbc kernel/softirq.c:645
 __do_softirq+0x14/0x20 kernel/softirq.c:679
 ____do_softirq+0x10/0x1c arch/arm64/kernel/irq.c:78
 call_on_irq_stack+0x30/0x48 arch/arm64/kernel/entry.S:901
 do_softirq_own_stack+0x1c/0x28 arch/arm64/kernel/irq.c:83
 do_softirq+0x90/0xf8 kernel/softirq.c:546
 __local_bh_enable_ip+0x190/0x234 kernel/softirq.c:473
 __raw_spin_unlock_bh include/linux/spinlock_api_smp.h:237 [inline]
 _raw_spin_unlock_bh+0x3c/0x4c kernel/locking/spinlock.c:245
 spin_unlock_bh include/linux/spinlock.h:407 [inline]
 batadv_tt_local_purge+0x274/0x2f0 net/batman-adv/translation-table.c:1402
 batadv_tt_purge+0x44/0x7b4 net/batman-adv/translation-table.c:3753
 process_one_work kernel/workqueue.c:3396 [inline]
 process_scheduled_works+0x91c/0x1250 kernel/workqueue.c:3479
 rescuer_thread+0x68c/0xd90 kernel/workqueue.c:3703
 kthread+0x304/0x3d4 kernel/kthread.c:436
 ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:854
net_ratelimit: 106525 callbacks suppressed
bridge0: received packet on bridge_slave_1 with own address as source address (addr:aa:aa:aa:aa:aa:1c, vlan:0)
bridge0: received packet on bridge_slave_1 with own address as source address (addr:aa:aa:aa:aa:aa:1c, vlan:0)
bridge0: received packet on bridge_slave_1 with own address as source address (addr:aa:aa:aa:aa:aa:1c, vlan:0)
bridge0: received packet on bridge_slave_1 with own address as source address (addr:aa:aa:aa:aa:aa:1c, vlan:0)
bridge0: received packet on bridge_slave_1 with own address as source address (addr:aa:aa:aa:aa:aa:1c, vlan:0)
bridge0: received packet on bridge_slave_1 with own address as source address (addr:aa:aa:aa:aa:aa:1c, vlan:0)
bridge0: received packet on bridge_slave_1 with own address as source address (addr:aa:aa:aa:aa:aa:1c, vlan:0)
bridge0: received packet on bridge_slave_1 with own address as source address (addr:aa:aa:aa:aa:aa:1c, vlan:0)
bridge0: received packet on bridge_slave_1 with own address as source address (addr:aa:aa:aa:aa:aa:1c, vlan:0)
bridge0: received packet on bridge_slave_1 with own address as source address (addr:aa:aa:aa:aa:aa:1c, vlan:0)


---
If you want syzbot to run the reproducer, reply with:
#syz test: git://repo/address.git branch-or-commit-hash
If you attach or paste a git patch, syzbot will apply it before testing.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-11-08  8:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-08  0:01 [PATCH batadv-next v3] batman-adv: tt: batch BH re-enable during TT hash walks Ömer Mete Kaya
2026-11-08  7:35 ` Sven Eckelmann
2026-11-08  8:01   ` [syzbot] [arm?] BUG: workqueue lockup in batadv_tt_purge syzbot
     [not found] <20261029135633.206144-1-omermetekaya0@gmail.com>
2026-10-29 13:58 ` syzbot
  -- strict thread matches above, loose matches on Subject: below --
2026-09-15 15:10 [syzbot] [netfilter?] " syzbot
2026-10-17 10:43 ` [syzbot] [arm?] " syzbot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®