From: gregory.clement@free-electrons.com (Gregory CLEMENT)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] n_tty: use kmalloc() instead of vmalloc() to avoid crash on armada-xp
Date: Wed, 11 Mar 2015 13:44:57 +0100 [thread overview]
Message-ID: <550038C9.7010807@free-electrons.com> (raw)
In-Reply-To: <54FF21BE.2040506@list.ru>
Hi Stas,
On 10/03/2015 17:54, Stas Sergeev wrote:
> Hello, the patch below is needed for a successful boot on armada-xp.
>
I am really surprised by this patch because I used the Armada XP based
board in a daily base and I never saw this issue.
Could you provide your .config?
Also could you confirm that you use the dts from arch/arm/boot/dts
wihtout any change?
Thanks,
Gregory
> -=-=-=-=-=-=-=-=-=# Don't remove this line #=-=-=-=-=-=-=-=-=-
> This fixes the following crash at boot:
>
> Unhandled fault: external abort on non-linefetch (0x808) at 0xf00ca018
> Internal error: : 808 [#1] SMP ARM
>
> CPU: 2 PID: 1 Comm: swapper/0 Not tainted 4.0.0-rc1 #3
> Hardware name: Marvell Armada 370/XP (Device Tree)
> task: ed41e800 ti: ed43e000 task.ti: ed43e000
> PC is at _set_bit+0x28/0x50
> LR is at n_tty_set_termios+0x328/0x358
> pc : [<c01bc858>] lr : [<c0207314>] psr: 40000113
> sp : ed43fd00 ip : 00000000 fp : 00000000
> r10: 00000002 r9 : 00000000 r8 : ec930200
> r7 : 00000000 r6 : f00ca018 r5 : f00ca000 r4 : ed69cc00
> r3 : 00002000 r2 : 00002000 r1 : f00ca018 r0 : 00000000
> Flags: nZcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
> Control: 10c5387d Table: 0000406a DAC: 00000015
> Process swapper/0 (pid: 1, stack limit = 0xed43e220)
>
> The offending instruction in _set_bit() is "strex r0, r2, [r1]"
> For some reason the exclusive access instructions do not like the
> vmalloc() space... While there may be another fix to make them
> fine about vmalloc() space, it still looks like a good idea to
> use kmalloc() for allocating a small (sub-page) struct.
>
> Signed-off-by: Stas Sergeev <stsp@users.sourceforge.net>
> ---
> drivers/tty/n_tty.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
> index cf6e0f2..e03622e 100644
> --- a/drivers/tty/n_tty.c
> +++ b/drivers/tty/n_tty.c
> @@ -50,7 +50,6 @@
> #include <linux/uaccess.h>
> #include <linux/module.h>
> #include <linux/ratelimit.h>
> -#include <linux/vmalloc.h>
>
>
> /* number of characters left in xmit buffer before select has we have
> room */
> @@ -1892,7 +1891,7 @@ static void n_tty_close(struct tty_struct *tty)
> if (tty->link)
> n_tty_packet_mode_flush(tty);
>
> - vfree(ldata);
> + kfree(ldata);
> tty->disc_data = NULL;
> }
>
> @@ -1911,7 +1910,7 @@ static int n_tty_open(struct tty_struct *tty)
> struct n_tty_data *ldata;
>
> /* Currently a malloc failure here can panic */
> - ldata = vmalloc(sizeof(*ldata));
> + ldata = kmalloc(sizeof(*ldata), GFP_KERNEL);
> if (!ldata)
> goto err;
>
>
--
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
WARNING: multiple messages have this Message-ID (diff)
From: Gregory CLEMENT <gregory.clement@free-electrons.com>
To: Stas Sergeev <stsp@list.ru>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Linux kernel <linux-kernel@vger.kernel.org>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] n_tty: use kmalloc() instead of vmalloc() to avoid crash on armada-xp
Date: Wed, 11 Mar 2015 13:44:57 +0100 [thread overview]
Message-ID: <550038C9.7010807@free-electrons.com> (raw)
In-Reply-To: <54FF21BE.2040506@list.ru>
Hi Stas,
On 10/03/2015 17:54, Stas Sergeev wrote:
> Hello, the patch below is needed for a successful boot on armada-xp.
>
I am really surprised by this patch because I used the Armada XP based
board in a daily base and I never saw this issue.
Could you provide your .config?
Also could you confirm that you use the dts from arch/arm/boot/dts
wihtout any change?
Thanks,
Gregory
> -=-=-=-=-=-=-=-=-=# Don't remove this line #=-=-=-=-=-=-=-=-=-
> This fixes the following crash at boot:
>
> Unhandled fault: external abort on non-linefetch (0x808) at 0xf00ca018
> Internal error: : 808 [#1] SMP ARM
>
> CPU: 2 PID: 1 Comm: swapper/0 Not tainted 4.0.0-rc1 #3
> Hardware name: Marvell Armada 370/XP (Device Tree)
> task: ed41e800 ti: ed43e000 task.ti: ed43e000
> PC is at _set_bit+0x28/0x50
> LR is at n_tty_set_termios+0x328/0x358
> pc : [<c01bc858>] lr : [<c0207314>] psr: 40000113
> sp : ed43fd00 ip : 00000000 fp : 00000000
> r10: 00000002 r9 : 00000000 r8 : ec930200
> r7 : 00000000 r6 : f00ca018 r5 : f00ca000 r4 : ed69cc00
> r3 : 00002000 r2 : 00002000 r1 : f00ca018 r0 : 00000000
> Flags: nZcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
> Control: 10c5387d Table: 0000406a DAC: 00000015
> Process swapper/0 (pid: 1, stack limit = 0xed43e220)
>
> The offending instruction in _set_bit() is "strex r0, r2, [r1]"
> For some reason the exclusive access instructions do not like the
> vmalloc() space... While there may be another fix to make them
> fine about vmalloc() space, it still looks like a good idea to
> use kmalloc() for allocating a small (sub-page) struct.
>
> Signed-off-by: Stas Sergeev <stsp@users.sourceforge.net>
> ---
> drivers/tty/n_tty.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
> index cf6e0f2..e03622e 100644
> --- a/drivers/tty/n_tty.c
> +++ b/drivers/tty/n_tty.c
> @@ -50,7 +50,6 @@
> #include <linux/uaccess.h>
> #include <linux/module.h>
> #include <linux/ratelimit.h>
> -#include <linux/vmalloc.h>
>
>
> /* number of characters left in xmit buffer before select has we have
> room */
> @@ -1892,7 +1891,7 @@ static void n_tty_close(struct tty_struct *tty)
> if (tty->link)
> n_tty_packet_mode_flush(tty);
>
> - vfree(ldata);
> + kfree(ldata);
> tty->disc_data = NULL;
> }
>
> @@ -1911,7 +1910,7 @@ static int n_tty_open(struct tty_struct *tty)
> struct n_tty_data *ldata;
>
> /* Currently a malloc failure here can panic */
> - ldata = vmalloc(sizeof(*ldata));
> + ldata = kmalloc(sizeof(*ldata), GFP_KERNEL);
> if (!ldata)
> goto err;
>
>
--
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
next prev parent reply other threads:[~2015-03-11 12:44 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-10 16:54 [PATCH] n_tty: use kmalloc() instead of vmalloc() to avoid crash on armada-xp Stas Sergeev
2015-03-10 16:54 ` Stas Sergeev
2015-03-10 17:17 ` Catalin Marinas
2015-03-10 17:17 ` Catalin Marinas
2015-03-10 17:27 ` Stas Sergeev
2015-03-10 17:27 ` Stas Sergeev
2015-03-10 17:38 ` Russell King - ARM Linux
2015-03-10 17:38 ` Russell King - ARM Linux
2015-03-10 18:31 ` Stas Sergeev
2015-03-10 18:31 ` Stas Sergeev
2015-03-10 18:54 ` Russell King - ARM Linux
2015-03-10 18:54 ` Russell King - ARM Linux
2015-03-11 12:30 ` Stas Sergeev
2015-03-11 12:30 ` Stas Sergeev
2015-03-11 12:47 ` Russell King - ARM Linux
2015-03-11 12:47 ` Russell King - ARM Linux
2015-03-11 14:24 ` Stas Sergeev
2015-03-11 14:24 ` Stas Sergeev
2015-03-11 16:30 ` Peter Hurley
2015-03-11 16:30 ` Peter Hurley
2015-03-11 16:39 ` Stas Sergeev
2015-03-11 16:39 ` Stas Sergeev
2015-03-12 12:33 ` Peter Hurley
2015-03-12 12:33 ` Peter Hurley
2015-03-12 12:47 ` Stas Sergeev
2015-03-12 12:47 ` Stas Sergeev
2015-03-12 13:04 ` Russell King - ARM Linux
2015-03-12 13:04 ` Russell King - ARM Linux
2015-03-12 13:11 ` Stas Sergeev
2015-03-12 13:11 ` Stas Sergeev
2015-03-12 15:34 ` Vladimir Murzin
2015-03-12 15:34 ` Vladimir Murzin
2015-03-12 12:59 ` Russell King - ARM Linux
2015-03-12 12:59 ` Russell King - ARM Linux
2015-03-10 17:29 ` Russell King - ARM Linux
2015-03-10 17:29 ` Russell King - ARM Linux
2015-03-10 17:35 ` Peter Hurley
2015-03-10 17:35 ` Peter Hurley
2015-03-10 17:51 ` Stas Sergeev
2015-03-10 17:51 ` Stas Sergeev
2015-03-10 18:45 ` Peter Hurley
2015-03-10 18:45 ` Peter Hurley
2015-03-11 12:44 ` Gregory CLEMENT [this message]
2015-03-11 12:44 ` Gregory CLEMENT
2015-03-11 12:57 ` Stas Sergeev
2015-03-11 12:57 ` Stas Sergeev
2015-03-11 13:14 ` Russell King - ARM Linux
2015-03-11 13:14 ` Russell King - ARM Linux
2015-03-11 14:33 ` Stas Sergeev
2015-03-11 14:33 ` Stas Sergeev
2015-03-11 15:01 ` Stas Sergeev
2015-03-11 15:01 ` Stas Sergeev
2015-03-11 15:13 ` Gregory CLEMENT
2015-03-11 15:13 ` Gregory CLEMENT
2015-03-11 15:22 ` Stas Sergeev
2015-03-11 15:22 ` Stas Sergeev
2015-03-12 13:06 ` Russell King - ARM Linux
2015-03-12 13:06 ` Russell King - ARM Linux
2015-03-11 16:52 ` Thomas Petazzoni
2015-03-11 16:52 ` Thomas Petazzoni
2015-03-11 17:26 ` Stas Sergeev
2015-03-11 17:26 ` Stas Sergeev
2015-03-11 17:46 ` Russell King - ARM Linux
2015-03-11 17:46 ` Russell King - ARM Linux
2015-03-11 17:56 ` Stas Sergeev
2015-03-11 17:56 ` Stas Sergeev
2015-03-11 18:11 ` Thomas Petazzoni
2015-03-11 18:11 ` Thomas Petazzoni
2015-03-11 18:38 ` Stas Sergeev
2015-03-11 18:38 ` Stas Sergeev
2015-03-11 18:41 ` Russell King - ARM Linux
2015-03-11 18:41 ` Russell King - ARM Linux
2015-03-11 18:08 ` Stas Sergeev
2015-03-11 18:08 ` Stas Sergeev
2015-03-11 18:33 ` Thomas Petazzoni
2015-03-11 18:33 ` Thomas Petazzoni
2015-03-12 12:44 ` Stas Sergeev
2015-03-12 12:44 ` Stas Sergeev
2015-03-12 12:47 ` Thomas Petazzoni
2015-03-12 12:47 ` Thomas Petazzoni
2015-03-12 13:03 ` Stas Sergeev
2015-03-12 13:03 ` Stas Sergeev
2015-03-12 13:12 ` Russell King - ARM Linux
2015-03-12 13:12 ` Russell King - ARM Linux
2015-03-12 13:16 ` Stas Sergeev
2015-03-12 13:16 ` Stas Sergeev
2015-03-12 13:55 ` Thomas Petazzoni
2015-03-12 13:55 ` Thomas Petazzoni
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=550038C9.7010807@free-electrons.com \
--to=gregory.clement@free-electrons.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.