From: Thomas Gleixner <tglx@linutronix.de>
To: Vlastimil Babka <vbabka@suse.cz>,
Linus Torvalds <torvalds@linux-foundation.org>,
Guenter Roeck <linux@roeck-us.net>
Cc: linux-kernel@vger.kernel.org, Linux-MM <linux-mm@kvack.org>,
Helge Deller <deller@gmx.de>,
linux-parisc@vger.kernel.org
Subject: Re: [PATCH 6.10 000/809] 6.10.3-rc3 review
Date: Wed, 07 Aug 2024 01:24:08 +0200 [thread overview]
Message-ID: <87frrh44mf.ffs@tglx> (raw)
In-Reply-To: <90e02d99-37a2-437e-ad42-44b80c4e94f6@suse.cz>
Cc+: Helge, parisc ML
We're chasing a weird failure which has been tracked down to the
placement of the division library functions (I assume they are imported
from libgcc).
See the thread starting at:
https://lore.kernel.org/all/718b8afe-222f-4b3a-96d3-93af0e4ceff1@roeck-us.net
On Tue, Aug 06 2024 at 21:25, Vlastimil Babka wrote:
> On 8/6/24 19:33, Thomas Gleixner wrote:
>>
>> So this change adds 16 bytes to __softirq() which moves the division
>> functions up by 16 bytes. That's all it takes to make the stupid go
>> away....
>
> Heh I was actually wondering if the division is somhow messed up because
> maxobj = order_objects() and order_objects() does a division. Now I suspect
> it even more.
check_slab() calls into that muck, but I checked the disassembly of a
working and a broken kernel and the only difference there is the
displacement offset when the code calculates the call address, but
that's as expected a difference of 16 bytes.
Now it becomes interesting.
I added a unused function after __do_softirq() into the softirq text
section and filled it with ASM nonsense so that it occupies exactly one
page. That moves $$divoI, which is what check_slab() calls, exactly one
page forward:
-0000000041218c70 T $$divoI
+0000000041219c70 T $$divoI
Guess what happens? If falls on it's nose again.
Now with that ASM gunk I can steer the size conveniently. It works up
to:
0000000041219c50 T $$divoI
and fails for
0000000041219c60 T $$divoI
0000000041219c70 T $$divoI
and works again at
0000000041219c80 T $$divoI
So I added the following:
+extern void testme(void);
+extern unsigned int testsize;
+
+unsigned int testsize = 192;
+
+void __init testme(void)
+{
+ pr_info("TESTME: %lu\n", PAGE_SIZE / testsize);
+}
called that _before_ mm_core_init() from init/main.c and adjusted my ASM
hack to make $$divoI be at:
0000000041219c70 T $$divoI
again and surprisingly the output is:
[ 0.000000] softirq: TESTME: 21
Now I went back to the hppa64 gcc version 12.2.0 again and did the same
ASM gunk adjustment so that $$divoI ends up at the offset 0xc70 in the
page and the same happens.
So it's not a compiler dependent problem.
But then I added a testme() call to the error path and get:
[ 0.000000] softirq: TESTME: 21
[ 0.000000] =============================================================================
[ 0.000000] BUG kmem_cache_node (Not tainted): objects 21 > max 16 size 192 sorder 0
Now what's wrong?
Adding more debug:
[ 0.000000] BUG kmem_cache_node (Not tainted): objects 21 > max 16 size 192 sorder 0 21
where the last '21' is the output of the same call which made maxobj go
south:
static int check_slab(struct kmem_cache *s, struct slab *slab)
{
int maxobj;
@@ -1386,8 +1388,10 @@ static int check_slab(struct kmem_cache
maxobj = order_objects(slab_order(slab), s->size);
if (slab->objects > maxobj) {
- slab_err(s, slab, "objects %u > max %u",
- slab->objects, maxobj);
+ testme();
+ slab_err(s, slab, "objects %u > max %u size %u sorder %u %u",
+ slab->objects, maxobj, s->size, slab_order(slab),
+ order_objects(slab_order(slab), s->size));
return 0;
}
if (slab->inuse > slab->objects) {
I don't know and I don't want to know TBH...
Thanks,
tglx
next prev parent reply other threads:[~2024-08-06 23:24 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-31 10:03 [PATCH 6.10 000/809] 6.10.3-rc3 review Greg Kroah-Hartman
2024-07-31 11:03 ` Pavel Machek
2024-07-31 12:18 ` Mark Brown
2024-07-31 13:33 ` Luna Jernberg
2024-07-31 14:59 ` Jon Hunter
2024-07-31 15:12 ` Christian Heusel
2024-07-31 16:49 ` Markus Reichelt
2024-07-31 19:04 ` Peter Schneider
2024-07-31 19:29 ` Naresh Kamboju
2024-07-31 19:47 ` Justin Forbes
2024-07-31 20:25 ` Shuah Khan
2024-07-31 20:37 ` Allen
2024-07-31 21:03 ` Florian Fainelli
2024-08-01 5:15 ` Jiri Slaby
2024-08-01 7:49 ` Ron Economos
2024-08-02 6:59 ` Miguel Ojeda
2024-08-04 18:36 ` Guenter Roeck
2024-08-05 3:28 ` Guenter Roeck
2024-08-05 8:56 ` Thomas Gleixner
2024-08-05 12:51 ` Thomas Gleixner
2024-08-05 15:02 ` Guenter Roeck
2024-08-05 21:49 ` Thomas Gleixner
2024-08-06 1:16 ` Guenter Roeck
2024-08-05 17:42 ` Guenter Roeck
2024-08-06 2:40 ` Linus Torvalds
2024-08-06 11:02 ` Vlastimil Babka
2024-08-06 17:20 ` Guenter Roeck
2024-08-06 17:34 ` Linus Torvalds
2024-08-06 17:49 ` Linus Torvalds
2024-08-06 18:10 ` Linus Torvalds
2024-08-06 18:13 ` Guenter Roeck
2024-08-06 18:23 ` Linus Torvalds
2024-08-06 19:21 ` Vlastimil Babka
2024-08-06 19:40 ` Vlastimil Babka
2024-08-07 18:51 ` Alexander Gordeev
2024-08-06 17:33 ` Thomas Gleixner
2024-08-06 19:25 ` Vlastimil Babka
2024-08-06 23:24 ` Thomas Gleixner [this message]
2024-08-07 0:49 ` James Bottomley
2024-08-07 1:38 ` Guenter Roeck
2024-08-07 12:45 ` Thomas Gleixner
2024-08-08 1:07 ` Guenter Roeck
2024-08-08 7:48 ` Vlastimil Babka
2024-08-08 14:46 ` Guenter Roeck
2024-08-08 9:57 ` Thomas Gleixner
2024-08-08 14:59 ` Guenter Roeck
2024-08-08 15:58 ` John David Anglin
2024-08-08 15:53 ` Linus Torvalds
2024-08-08 16:12 ` Thomas Gleixner
2024-08-08 16:33 ` Linus Torvalds
2024-08-08 17:48 ` Thomas Gleixner
2024-08-08 18:19 ` Linus Torvalds
2024-08-08 20:52 ` Guenter Roeck
2024-08-08 21:50 ` John David Anglin
2024-08-08 22:29 ` John David Anglin
2024-08-08 23:33 ` Linus Torvalds
2024-08-09 0:33 ` John David Anglin
2024-08-09 0:56 ` Guenter Roeck
2024-08-09 0:50 ` Guenter Roeck
2024-08-08 22:15 ` Richard Henderson
2024-09-03 7:54 ` Helge Deller
2024-09-03 14:13 ` Guenter Roeck
2024-09-03 18:43 ` Linus Torvalds
2024-08-06 18:09 ` Guenter Roeck
2024-08-06 19:31 ` Vlastimil Babka
-- strict thread matches above, loose matches on Subject: below --
2024-07-31 14:09 Ronald Warsow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87frrh44mf.ffs@tglx \
--to=tglx@linutronix.de \
--cc=deller@gmx.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=torvalds@linux-foundation.org \
--cc=vbabka@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.