All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: Weijie Yang <weijie.yang@samsung.com>,
	Akinobu Mita <akinobu.mita@gmail.com>
Cc: tglx@linutronix.de, hpa@zytor.com, fengguang.wu@intel.com,
	m.szyprowski@samsung.com, mina86@mina86.com,
	iamjoonsoo.kim@lge.com,
	'Andrew Morton' <akpm@linux-foundation.org>,
	'linux-kernel' <linux-kernel@vger.kernel.org>,
	'Linux-MM' <linux-mm@kvack.org>,
	'Weijie Yang' <weijie.yang.kh@gmail.com>
Subject: Re: [PATCH] x86, cma: reserve dma contiguous area after initmem_init()
Date: Fri, 24 Oct 2014 19:19:13 +0200	[thread overview]
Message-ID: <20141024171913.GA31052@gmail.com> (raw)
In-Reply-To: <000101cfef69$31e528a0$95af79e0$%yang@samsung.com>


* Weijie Yang <weijie.yang@samsung.com> wrote:

> Fengguang Wu reported a BUG: Int 6: CR2 (null) on x86 platform in
> 0-day Linux Kernel Performance Test:
> 
> [    0.000000] BRK [0x025ee000, 0x025eefff] PGTABLE
> [    0.000000] cma: dma_contiguous_reserve(limit 13ffe000)
> [    0.000000] cma: dma_contiguous_reserve: reserving 31 MiB for global area
> [    0.000000] BUG: Int 6: CR2   (null)
> [    0.000000]      EDI c0000000  ESI   (null)  EBP 41c11ea4  EBX 425cc101
> [    0.000000]      ESP 41c11e98   ES 0000007b   DS 0000007b
> [    0.000000]      EDX 00000001  ECX   (null)  EAX 41cd8150
> [    0.000000]      vec 00000006  err   (null)  EIP 41072227   CS 00000060  flg 00210002
> [    0.000000] Stack: 425cc150   (null)   (null) 41c11ef4 41d4ee4d   (null) 13ffe000 41c11ec4
> [    0.000000]        41c2d900   (null) 13ffe000   (null) 4185793e 0000002e 410c2982 41c11f00
> [    0.000000]        410c2df5   (null)   (null)   (null) 425cc150 00013efe   (null) 41c11f28
> [    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 3.17.0-next-20141008 #815
> [    0.000000]  00000000 425cc101 41c11e48 41850786 41c11ea4 41d2b1db 41d95f71 00000006
> [    0.000000]  00000000 c0000000 00000000 41c11ea4 425cc101 41c11e98 0000007b 0000007b
> [    0.000000]  00000001 00000000 41cd8150 00000006 00000000 41072227 00000060 00210002
> [    0.000000] Call Trace:
> [    0.000000]  [<41850786>] dump_stack+0x16/0x18
> [    0.000000]  [<41d2b1db>] early_idt_handler+0x6b/0x6b
> [    0.000000]  [<41072227>] ? __phys_addr+0x2e/0xca
> [    0.000000]  [<41d4ee4d>] cma_declare_contiguous+0x3c/0x2d7
> [    0.000000]  [<4185793e>] ? _raw_spin_unlock_irqrestore+0x59/0x91
> [    0.000000]  [<410c2982>] ? wake_up_klogd+0x8/0x33
> [    0.000000]  [<410c2df5>] ? console_unlock+0x448/0x461
> [    0.000000]  [<41d6d359>] dma_contiguous_reserve_area+0x27/0x47
> [    0.000000]  [<41d6d4d1>] dma_contiguous_reserve+0x158/0x163
> [    0.000000]  [<41d33e0f>] setup_arch+0x79b/0xc68
> [    0.000000]  [<4184c0b4>] ? printk+0x1c/0x1e
> [    0.000000]  [<41d2b7cf>] start_kernel+0x9c/0x456
> [    0.000000]  [<41d2b2ca>] i386_start_kernel+0x79/0x7d
> 
> see detail: https://lkml.org/lkml/2014/10/8/708
> 
> It is because dma_contiguous_reserve() is called before initmem_init() in x86,
> the variable high_memory is not initialized but accessed by __pa(high_memory)
> in dma_contiguous_reserve().
> 
> This patch moves dma_contiguous_reserve() after initmem_init() so that
> high_memory is initialized before accessed.
> 
> Reported-by: Fengguang Wu <fengguang.wu@intel.com>
> Signed-off-by: Weijie Yang <weijie.yang@samsung.com>
> ---
>  arch/x86/kernel/setup.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index 235cfd3..ab08aa2 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -1128,7 +1128,6 @@ void __init setup_arch(char **cmdline_p)
>  	setup_real_mode();
>  
>  	memblock_set_current_limit(get_max_mapped());
> -	dma_contiguous_reserve(max_pfn_mapped << PAGE_SHIFT);
>  
>  	/*
>  	 * NOTE: On x86-32, only from this point on, fixmaps are ready for use.
> @@ -1159,6 +1158,7 @@ void __init setup_arch(char **cmdline_p)
>  	early_acpi_boot_init();
>  
>  	initmem_init();
> +	dma_contiguous_reserve(max_pfn_mapped << PAGE_SHIFT);
>  
>  	/*
>  	 * Reserve memory for crash kernel after SRAT is parsed so that it

I think this might be a boot regression that went upstream via 
akpm's tree, via the recent 'cma' change:

5ea3b1b2f8ad cma: add placement specifier for "cma=" kernel parameter

Next time around please put 'x86' into patches that 
enable features on x86 and which change its early init 
behavior. The 'cma: ...' prefix was rather misleading.

Thanks,

	Ingo

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Ingo Molnar <mingo@kernel.org>
To: Weijie Yang <weijie.yang@samsung.com>,
	Akinobu Mita <akinobu.mita@gmail.com>
Cc: tglx@linutronix.de, hpa@zytor.com, fengguang.wu@intel.com,
	m.szyprowski@samsung.com, mina86@mina86.com,
	iamjoonsoo.kim@lge.com,
	"'Andrew Morton'" <akpm@linux-foundation.org>,
	"'linux-kernel'" <linux-kernel@vger.kernel.org>,
	"'Linux-MM'" <linux-mm@kvack.org>,
	"'Weijie Yang'" <weijie.yang.kh@gmail.com>
Subject: Re: [PATCH] x86, cma: reserve dma contiguous area after initmem_init()
Date: Fri, 24 Oct 2014 19:19:13 +0200	[thread overview]
Message-ID: <20141024171913.GA31052@gmail.com> (raw)
In-Reply-To: <000101cfef69$31e528a0$95af79e0$%yang@samsung.com>


* Weijie Yang <weijie.yang@samsung.com> wrote:

> Fengguang Wu reported a BUG: Int 6: CR2 (null) on x86 platform in
> 0-day Linux Kernel Performance Test:
> 
> [    0.000000] BRK [0x025ee000, 0x025eefff] PGTABLE
> [    0.000000] cma: dma_contiguous_reserve(limit 13ffe000)
> [    0.000000] cma: dma_contiguous_reserve: reserving 31 MiB for global area
> [    0.000000] BUG: Int 6: CR2   (null)
> [    0.000000]      EDI c0000000  ESI   (null)  EBP 41c11ea4  EBX 425cc101
> [    0.000000]      ESP 41c11e98   ES 0000007b   DS 0000007b
> [    0.000000]      EDX 00000001  ECX   (null)  EAX 41cd8150
> [    0.000000]      vec 00000006  err   (null)  EIP 41072227   CS 00000060  flg 00210002
> [    0.000000] Stack: 425cc150   (null)   (null) 41c11ef4 41d4ee4d   (null) 13ffe000 41c11ec4
> [    0.000000]        41c2d900   (null) 13ffe000   (null) 4185793e 0000002e 410c2982 41c11f00
> [    0.000000]        410c2df5   (null)   (null)   (null) 425cc150 00013efe   (null) 41c11f28
> [    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 3.17.0-next-20141008 #815
> [    0.000000]  00000000 425cc101 41c11e48 41850786 41c11ea4 41d2b1db 41d95f71 00000006
> [    0.000000]  00000000 c0000000 00000000 41c11ea4 425cc101 41c11e98 0000007b 0000007b
> [    0.000000]  00000001 00000000 41cd8150 00000006 00000000 41072227 00000060 00210002
> [    0.000000] Call Trace:
> [    0.000000]  [<41850786>] dump_stack+0x16/0x18
> [    0.000000]  [<41d2b1db>] early_idt_handler+0x6b/0x6b
> [    0.000000]  [<41072227>] ? __phys_addr+0x2e/0xca
> [    0.000000]  [<41d4ee4d>] cma_declare_contiguous+0x3c/0x2d7
> [    0.000000]  [<4185793e>] ? _raw_spin_unlock_irqrestore+0x59/0x91
> [    0.000000]  [<410c2982>] ? wake_up_klogd+0x8/0x33
> [    0.000000]  [<410c2df5>] ? console_unlock+0x448/0x461
> [    0.000000]  [<41d6d359>] dma_contiguous_reserve_area+0x27/0x47
> [    0.000000]  [<41d6d4d1>] dma_contiguous_reserve+0x158/0x163
> [    0.000000]  [<41d33e0f>] setup_arch+0x79b/0xc68
> [    0.000000]  [<4184c0b4>] ? printk+0x1c/0x1e
> [    0.000000]  [<41d2b7cf>] start_kernel+0x9c/0x456
> [    0.000000]  [<41d2b2ca>] i386_start_kernel+0x79/0x7d
> 
> see detail: https://lkml.org/lkml/2014/10/8/708
> 
> It is because dma_contiguous_reserve() is called before initmem_init() in x86,
> the variable high_memory is not initialized but accessed by __pa(high_memory)
> in dma_contiguous_reserve().
> 
> This patch moves dma_contiguous_reserve() after initmem_init() so that
> high_memory is initialized before accessed.
> 
> Reported-by: Fengguang Wu <fengguang.wu@intel.com>
> Signed-off-by: Weijie Yang <weijie.yang@samsung.com>
> ---
>  arch/x86/kernel/setup.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index 235cfd3..ab08aa2 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -1128,7 +1128,6 @@ void __init setup_arch(char **cmdline_p)
>  	setup_real_mode();
>  
>  	memblock_set_current_limit(get_max_mapped());
> -	dma_contiguous_reserve(max_pfn_mapped << PAGE_SHIFT);
>  
>  	/*
>  	 * NOTE: On x86-32, only from this point on, fixmaps are ready for use.
> @@ -1159,6 +1158,7 @@ void __init setup_arch(char **cmdline_p)
>  	early_acpi_boot_init();
>  
>  	initmem_init();
> +	dma_contiguous_reserve(max_pfn_mapped << PAGE_SHIFT);
>  
>  	/*
>  	 * Reserve memory for crash kernel after SRAT is parsed so that it

I think this might be a boot regression that went upstream via 
akpm's tree, via the recent 'cma' change:

5ea3b1b2f8ad cma: add placement specifier for "cma=" kernel parameter

Next time around please put 'x86' into patches that 
enable features on x86 and which change its early init 
behavior. The 'cma: ...' prefix was rather misleading.

Thanks,

	Ingo

  parent reply	other threads:[~2014-10-24 17:19 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-24  9:00 [PATCH] x86, cma: reserve dma contiguous area after initmem_init() Weijie Yang
2014-10-24  9:00 ` Weijie Yang
2014-10-24  9:45 ` Marek Szyprowski
2014-10-24  9:45   ` Marek Szyprowski
2014-10-24 16:38 ` Michal Nazarewicz
2014-10-24 16:38   ` Michal Nazarewicz
2014-10-24 17:19 ` Ingo Molnar [this message]
2014-10-24 17:19   ` Ingo Molnar
2014-10-28  6:39 ` [tip:x86/urgent] x86, cma: Reserve DMA " tip-bot for Weijie Yang
2014-10-28  6:39   ` tip-bot for Weijie Yang

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=20141024171913.GA31052@gmail.com \
    --to=mingo@kernel.org \
    --cc=akinobu.mita@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=fengguang.wu@intel.com \
    --cc=hpa@zytor.com \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=m.szyprowski@samsung.com \
    --cc=mina86@mina86.com \
    --cc=tglx@linutronix.de \
    --cc=weijie.yang.kh@gmail.com \
    --cc=weijie.yang@samsung.com \
    /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.