* [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; 3+ 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] 3+ 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; 3+ 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] 3+ 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; 3+ 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] 3+ messages in thread
end of thread, other threads:[~2026-11-08 8:01 UTC | newest] Thread overview: 3+ 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
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®