Date: Fri, 13 Jun 2025 11:59:54 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 287501] Observing witness warning w.r.t rcu_read_lock() API Message-ID: <bug-287501-227@https.bugs.freebsd.org/bugzilla/>
index | next in thread | raw e-mail
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=287501 Bug ID: 287501 Summary: Observing witness warning w.r.t rcu_read_lock() API Product: Base System Version: 15.0-CURRENT Hardware: Any OS: Any Status: New Severity: Affects Only Me Priority: --- Component: kern Assignee: bugs@FreeBSD.org Reporter: sreekanth.reddy@broadcom.com Created attachment 261234 --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=261234&action=edit patch which fixes the witness warning related rcu_read_lock() Observing below witness calltrace while running KTLS enabled traffic. uma_zalloc_debug: zone "lkpicurr" with the following non-sleepable locks held: exclusive rw tcpinp (tcpinp) r = 0 (0xfffff809e6146020) locked @ /usr/srreddy/freebsd-src/sys/kern/uipc_ktls.c:195 stack backtrace: #0 0xffffffff80bee42c at witness_debugger+0x6c #1 0xffffffff80bef640 at witness_warn+0x430 #2 0xffffffff80f34044 at uma_zalloc_debug+0x34 #3 0xffffffff80f33b97 at uma_zalloc_arg+0x27 #4 0xffffffff80e2a029 at linux_alloc_current+0x69 #5 0xffffffff80e370a3 at linux_rcu_read_lock+0x183 #6 0xffffffff82f4ad55 at bnxt_tls_snd_tag_free+0xe5 #7 0xffffffff80b4bec0 at m_snd_tag_destroy+0x10 #8 0xffffffff80c19e77 at ktls_destroy+0x2e7 #9 0xffffffff80c1d18f at ktls_work_thread+0xf0f According to rcu_read_lock() definition this API should be a NON-Preemptable, but I see that uma_zalloc_arg is called without M_NOWAIT flag set and it leads to above witness warning. I have made below kernel changes which fixed this witness warnings. So please review it. diff --git a/sys/compat/linuxkpi/common/include/linux/sched.h b/sys/compat/linuxkpi/common/include/linux/sched.h index 3ad2f8e4ce8b..30a61a9e806c 100644 --- a/sys/compat/linuxkpi/common/include/linux/sched.h +++ b/sys/compat/linuxkpi/common/include/linux/sched.h @@ -98,6 +98,12 @@ struct task_struct { ((struct task_struct *)__td->td_lkpi_task); \ }) +#define current_nowait ({ \ + struct thread *__td = curthread; \ + linux_set_current_flags(__td, M_NOWAIT); \ + ((struct task_struct *)__td->td_lkpi_task); \ +}) + #define task_pid_group_leader(task) (task)->task_thread->td_proc->p_pid #define task_pid(task) ((task)->pid) #define task_pid_nr(task) ((task)->pid) diff --git a/sys/compat/linuxkpi/common/src/linux_rcu.c b/sys/compat/linuxkpi/common/src/linux_rcu.c index c0b864d269b3..cd6db8e47b91 100644 --- a/sys/compat/linuxkpi/common/src/linux_rcu.c +++ b/sys/compat/linuxkpi/common/src/linux_rcu.c @@ -188,7 +188,7 @@ linux_rcu_read_lock(unsigned type) if (RCU_SKIP()) return; - ts = current; + ts = current_nowait; /* assert valid refcount */ MPASS(ts->rcu_recurse[type] != INT_MAX); @@ -226,11 +226,11 @@ linux_rcu_read_unlock(unsigned type) if (RCU_SKIP()) return; - ts = current; + ts = current_nowait; /* assert valid refcount */ MPASS(ts->rcu_recurse[type] > 0); - + if (--(ts->rcu_recurse[type]) != 0) return; Thanks, Sreekanth -- You are receiving this mail because: You are the assignee for the bug.home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-287501-227>
