Subject: Re: linux-next: Tree for Sep 1

From: Bartlomiej Zolnierkiewicz <[email-masked]>
Date: Tue, 02 Sep 2014 15:19:22 +0200

[ this time with the patch and right cc: list, sorry for the noise ]

Hi,

On Tuesday, September 02, 2014 12:07:28 AM Mark Brown wrote:
> Changes since 20140829:
> 
> The akpm-current gained a conflict against Linus' tree.
> 
> Non-merge commits (relative to Linus' tree): 2553
>  2686 files changed, 98625 insertions(+), 79475 deletions(-)
> 
> I have created today's linux-next tree at
> git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git .
> If you are tracking the linux-next tree using git, you should not use
> "git pull" to do so as that will try to merge the new linux-next release
> with the old one.  You should use "git fetch" and checkout or reset to
> the new master.
> 
> You can see which trees have been included by looking in the Next/Trees
> file in the source.  There are also quilt-import.log and merge.log files
> in the Next directory.  Between each merge, the tree was built with an
> allmodconfig for x86_64 and a multi_v7_defconfig for arm.
> 
> Below is a summary of the state of the merge.
> 
> I am currently merging 214 trees (counting Linus' and 30 trees of patches
> pending for Linus' tree).
> 
> Stats about the size of the tree over time can be seen at
> http://neuling.org/linux-next-size.html .
> 
> Status of Stephen's local build tests will be at
> http://kisskb.ellerman.id.au/linux-next .  If maintainers want to give
> advice about cross compilers/configs that work, we are always open to add
> more builds.

I need following patch to make it boot on ODROID U3 board
(ARM Exynos4412 SoC based).  next-20140825 was good, next-20140828
is bad (I haven't tried next-20140826 and next-20140827).

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

From: Bartlomiej Zolnierkiewicz <[email-masked]>
Subject: [RFC PATCH] irqchips: gic_get_percpu_base() fix

Commit 532d0d0690d1 ("irqchips: Replace __this_cpu_ptr uses")
incorrectly converted *__this_cpu_ptr() to raw_cpu_read() instead
of *raw_cpu_ptr().  Fix it.

Fixes following panic on ODROID U3 board (using ARM Exynos4412 SoC):

Unable to handle kernel NULL pointer dereference at virtual address 00000004
pgd = c0004000
[00000004] *pgd=00000000
Internal error: Oops: 5 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.17.0-rc2-next-20140828-dirty #837
task: c05ece28 ti: c05e2000 task.ti: c05e2000
PC is at gic_init_bases+0x170/0x380
LR is at gic_init_bases+0x170/0x380
pc : [<c05b12bc>]    lr : [<c05b12bc>]    psr: 600001d3
sp : c05e3f18  ip : 00000004  fp : c05edd7c
r10: c05ea560  r9 : c05ea488  r8 : 00000010
r7 : 00004000  r6 : c05ea93c  r5 : c05ea93c  r4 : c05ea93c
r3 : 2a1a0000  r2 : ffffffff  r1 : 00000008  r0 : 00000000
Flags: nZCv  IRQs off  FIQs off  Mode SVC_32  ISA ARM  Segment kernel
Control: 10c5387d  Table: 4000404a  DAC: 00000015
Process swapper/0 (pid: 0, stack limit = 0xc05e2240)
Stack: (0xc05e3f18 to 0xc05e4000)
3f00:                                                       c05e3f88 c040b2bc
3f20: c061c3b8 ffffffff 00000004 c05e3f64 00000000 ea7a3b20 c05c5ff0 00000000
3f40: f8820000 f8810000 c05de880 00200200 c05e3f88 c05b157c 00004000 ea7a3b20
3f60: c061c3b8 00004000 ea0027c0 ea002800 c05e3f80 00000000 00100100 c05b89c8
3f80: ea002800 ea002800 c05e3f88 c05e3f88 413fc090 c05c3f50 ffffffff c0626600
3fa0: c05c3f60 eb7ff780 413fc090 00000000 00000000 c05a2e80 c05c3f50 c059e1c4
3fc0: 00000001 c059ba24 ffffffff ffffffff c059b600 00000000 00000000 c05c3f60
3fe0: c06269d4 c05ea47c c05c3f5c c05edeac 4000406a 40008074 00000000 00000000
[<c05b12bc>] (gic_init_bases) from [<c05b157c>] (gic_of_init+0xb0/0x118)
[<c05b157c>] (gic_of_init) from [<c05b89c8>] (of_irq_init+0x164/0x29c)
[<c05b89c8>] (of_irq_init) from [<c05a2e80>] (exynos_init_irq+0x8/0x50)
[<c05a2e80>] (exynos_init_irq) from [<c059e1c4>] (init_IRQ+0x24/0x74)
[<c059e1c4>] (init_IRQ) from [<c059ba24>] (start_kernel+0x200/0x384)
[<c059ba24>] (start_kernel) from [<40008074>] (0x40008074)
Code: e59f61d8 e5953594 e1a00006 e12fff33 (e5907004) 
---[ end trace cb88537fdc8fa200 ]---
Kernel panic - not syncing: Attempted to kill the idle task!
---[ end Kernel panic - not syncing: Attempted to kill the idle task!

Signed-off-by: Bartlomiej Zolnierkiewicz <[email-masked]>
Acked-by: Kyungmin Park <[email-masked]>
Cc: [email-masked]
Cc: Russell King <[email-masked]>
Cc: Christoph Lameter <[email-masked]>
Cc: Tejun Heo <[email-masked]>
---
I'm not sure that it is a correct fix but some other *__this_cpu_ptr()
usages were not converted to raw_cpu_read() but also to *raw_cpu_ptr()
(like arch_local_irqs_enabled() in arch/tile/include/asm/irqflags.h).

 drivers/irqchip/irq-gic.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: b/drivers/irqchip/irq-gic.c
===================================================================
--- a/drivers/irqchip/irq-gic.c	2014-09-02 14:03:41.026758653 +0200
+++ b/drivers/irqchip/irq-gic.c	2014-09-02 14:37:04.466811546 +0200
@@ -102,7 +102,7 @@ static struct gic_chip_data gic_data[MAX
 #ifdef CONFIG_GIC_NON_BANKED
 static void __iomem *gic_get_percpu_base(union gic_base *base)
 {
-	return raw_cpu_read(base->percpu_base);
+	return *raw_cpu_ptr(base->percpu_base);
 }
 
 static void __iomem *gic_get_common_base(union gic_base *base)