Thread (27 messages) 27 messages, 7 authors, 2025-02-19

Re: [PATCH v10 1/8] sched/core: Add __might_sleep_precision()

From: Boqun Feng <hidden>
Date: 2025-02-17 01:51:36
Also in: lkml, rust-for-linux

On Mon, Feb 10, 2025 at 10:41:00AM +0100, Alice Ryhl wrote:
On Sat, Feb 8, 2025 at 4:01 AM FUJITA Tomonori
[off-list ref] wrote:
quoted
On Fri, 7 Feb 2025 18:12:58 +0000
David Laight [off-list ref] wrote:
quoted
quoted
 static void print_preempt_disable_ip(int preempt_offset, unsigned long ip)
 {
     if (!IS_ENABLED(CONFIG_DEBUG_PREEMPT))
@@ -8717,7 +8699,8 @@ static inline bool resched_offsets_ok(unsigned int offsets)
     return nested == offsets;
 }

-void __might_resched(const char *file, int line, unsigned int offsets)
+static void __might_resched_precision(const char *file, int len, int line,
For clarity that ought to be file_len.
Yeah, I'll update.
quoted
quoted
+                                  unsigned int offsets)
 {
     /* Ratelimiting timestamp: */
     static unsigned long prev_jiffy;
@@ -8740,8 +8723,10 @@ void __might_resched(const char *file, int line, unsigned int offsets)
     /* Save this before calling printk(), since that will clobber it: */
     preempt_disable_ip = get_preempt_disable_ip(current);

-    pr_err("BUG: sleeping function called from invalid context at %s:%d\n",
-           file, line);
+    if (len < 0)
+            len = strlen(file);
No need for strlen(), just use a big number instead of -1.
Anything bigger than a sane upper limit on the filename length will do.
Ah, that's right. Just passing the maximum precision (1<<15-1) works.

The precision specifies the maximum length. vsnprintf() always
iterates through a string until it reaches the maximum length or
encounters the null terminator. So strlen() here is useless.

Alice and Boqun, the above change is fine? Can I keep the tags?
I'd probably like a comment explaining the meaning of this constant
somewhere, but sure ok with me.
Agreed. The code should be fine but need some comments.

Regards,
Boqun
Alice
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help