From: robherring2@gmail.com (Rob Herring)
To: linux-arm-kernel@lists.infradead.org
Subject: alignment faults in 3.6
Date: Thu, 04 Oct 2012 18:10:26 -0500 [thread overview]
Message-ID: <506E1762.3010601@gmail.com> (raw)
I've been scratching my head with a "scheduling while atomic" bug I
started seeing on 3.6. I can easily reproduce this problem when doing a
wget on my system. It ultimately seems to be a combination of factors.
The "scheduling while atomic" bug is triggered in do_alignment which
gets triggered by this code in net/ipv4/af_inet.c, line 1356:
id = ntohl(*(__be32 *)&iph->id);
flush = (u16)((ntohl(*(__be32 *)iph) ^ skb_gro_len(skb)) | (id ^ IP_DF));
id >>= 16;
This code compiles into this using "gcc version 4.6.3 (Ubuntu/Linaro
4.6.3-1ubuntu5)":
c02ac020: e8920840 ldm r2, {r6, fp}
c02ac024: e6bfbf3b rev fp, fp
c02ac028: e6bf6f36 rev r6, r6
c02ac02c: e22bc901 eor ip, fp, #16384 ; 0x4000
c02ac030: e0266008 eor r6, r6, r8
c02ac034: e18c6006 orr r6, ip, r6
which generates alignment faults on the ldm. These are silent until this
commit is applied:
commit ad72907acd2943304c292ae36960bb66e6dc23c9
Author: Will Deacon <will.deacon@arm.com>
Date: Fri Sep 7 18:24:10 2012 +0100
ARM: 7528/1: uaccess: annotate [__]{get,put}_user functions with
might_fault()
The user access functions may generate a fault, resulting in invocation
of a handler that may sleep.
This patch annotates the accessors with might_fault() so that we print a
warning if they are invoked from atomic context and help lockdep keep
track of mmap_sem.
I would think the scheduling while atomic messages are harmless in this
case. However, in addition to spewing out BUG messages this commit also
seems to eventually cause a kernel panic in __napi_complete. That panic
seems to go away if I put barrier() between the 2 accesses above which
eliminates the alignment faults. I haven't figured that part out yet.
There's at least a couple of problems here:
This seems like an overly aggressive compiler optimization considering
unaligned accesses are not supported by ldm/stm.
The alignment fault handler should handle kernel address faults atomically.
I need to fix alignment of the network rx buffers if possible.
Rob
next reply other threads:[~2012-10-04 23:10 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-04 23:10 Rob Herring [this message]
2012-10-05 0:58 ` alignment faults in 3.6 Michael Hope
2012-10-05 1:26 ` Mans Rullgard
2012-10-05 1:56 ` Rob Herring
2012-10-05 2:25 ` Mans Rullgard
2012-10-05 3:04 ` Rob Herring
2012-10-05 5:37 ` Khem Raj
2012-10-05 7:12 ` Russell King - ARM Linux
2012-10-05 8:20 ` Mans Rullgard
2012-10-05 8:24 ` Russell King - ARM Linux
2012-10-05 8:33 ` Mans Rullgard
2012-10-05 8:33 ` Russell King - ARM Linux
2012-10-05 8:37 ` Mans Rullgard
2012-10-05 8:50 ` Russell King - ARM Linux
2012-10-05 13:49 ` Mikael Pettersson
2012-10-05 12:24 ` Rob Herring
2012-10-05 13:51 ` Mikael Pettersson
2012-10-05 16:01 ` Rob Herring
2012-10-05 22:37 ` Mans Rullgard
2012-10-05 22:42 ` Russell King - ARM Linux
2012-10-06 1:41 ` Nicolas Pitre
2012-10-06 16:04 ` Mans Rullgard
2012-10-06 16:19 ` Nicolas Pitre
2012-10-06 16:31 ` Russell King - ARM Linux
2012-10-06 10:58 ` Mikael Pettersson
2012-10-09 14:05 ` Scott Bambrough
2012-10-09 14:18 ` Mans Rullgard
2012-10-05 14:05 ` Russell King - ARM Linux
2012-10-05 14:33 ` Rob Herring
2012-10-11 0:59 ` Jon Masters
2012-10-11 2:27 ` Måns Rullgård
2012-10-11 2:34 ` Jon Masters
2012-10-11 8:21 ` David Laight
2012-10-11 8:53 ` Russell King - ARM Linux
2012-10-11 9:45 ` Måns Rullgård
2012-10-11 10:00 ` Eric Dumazet
2012-10-11 10:20 ` Måns Rullgård
2012-10-11 10:22 ` Eric Dumazet
2012-10-11 10:32 ` Russell King - ARM Linux
2012-10-11 10:49 ` Eric Dumazet
2012-10-11 10:56 ` Maxime Bizon
2012-10-11 11:28 ` Eric Dumazet
2012-10-11 11:47 ` Maxime Bizon
2012-10-11 11:54 ` Eric Dumazet
2012-10-11 12:00 ` Eric Dumazet
2012-10-11 12:51 ` Maxime Bizon
2012-10-11 12:59 ` Eric Dumazet
2012-10-11 12:28 ` Arnd Bergmann
2012-10-11 12:40 ` Eric Dumazet
2012-10-11 13:20 ` Rob Herring
2012-10-11 13:32 ` Måns Rullgård
2012-10-11 13:35 ` Arnd Bergmann
2012-10-11 13:47 ` Eric Dumazet
2012-10-11 15:23 ` Rob Herring
2012-10-11 15:39 ` David Laight
2012-10-11 16:18 ` Måns Rullgård
2012-10-12 8:11 ` Arnd Bergmann
2012-10-12 9:03 ` Russell King - ARM Linux
2012-10-12 10:04 ` Eric Dumazet
2012-10-12 12:24 ` Russell King - ARM Linux
2012-10-12 11:00 ` Måns Rullgård
2012-10-12 11:07 ` Russell King - ARM Linux
2012-10-12 11:18 ` Måns Rullgård
2012-10-12 11:44 ` Russell King - ARM Linux
2012-10-12 12:08 ` Eric Dumazet
2012-10-12 14:22 ` Benjamin LaHaise
2012-10-12 14:36 ` David Laight
2012-10-12 14:48 ` Eric Dumazet
2012-10-12 15:00 ` Benjamin LaHaise
2012-10-12 15:04 ` Ben Hutchings
2012-10-12 15:47 ` David Laight
2012-10-12 16:13 ` Ben Hutchings
2012-10-12 12:16 ` Måns Rullgård
2012-10-12 11:19 ` Russell King - ARM Linux
2012-10-11 16:15 ` Eric Dumazet
2012-10-11 16:59 ` Catalin Marinas
2012-10-11 10:16 ` David Laight
2012-10-11 10:46 ` Måns Rullgård
2012-10-05 16:08 ` Rob Herring
2012-10-05 7:29 ` Russell King - ARM Linux
2012-10-05 10:51 ` Russell King - ARM Linux
2012-10-23 16:30 ` Jon Masters
2012-10-23 16:58 ` Russell King - ARM Linux
2012-10-23 17:15 ` Jon Masters
2012-10-23 19:14 ` Rob Herring
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=506E1762.3010601@gmail.com \
--to=robherring2@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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.