Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm

Pull ARM fixes from Russell King:
"I was going to hold these off until v3.8 was out, and send them with a
stable tag, but as everyone else is pushing much bigger fixes which
Linus is accepting, let's save people from the hastle of having to
patch v3.8 back into working or use a stable kernel.

Looking at the diffstat, this really is high value for its size; this
is miniscule compared to how the -rc6 to tip diffstat currently looks.

So, four patches in this set:
- Punit Agrawal reports that the kernel no longer boots on MPCore due
to a new assumption made in the GIC code which isn't true of
earlier GIC designs. This is the biggest change in this set.
- Punit's boot log also revealed a bunch of WARN_ON() dumps caused by
the DT-ification of the GIC support without fixing up non-DT
Realview - which now sees a greater number of interrupts than it
did before.
- A fix for the DMA coherent code from Marek which uses the wrong
check for atomic allocations; this can result in spinlock lockups
or other nasty effects.
- A fix from Will, which will affect all Android based platforms if
not applied (which use the 2G:2G VM split) - this causes
particularly 'make' to misbehave unless this bug is fixed."

* 'fixes' of git://git.linaro.org/people/rmk/linux-arm:
ARM: 7641/1: memory: fix broken mmap by ensuring TASK_UNMAPPED_BASE is aligned
ARM: DMA mapping: fix bad atomic test
ARM: realview: ensure that we have sufficient IRQs available
ARM: GIC: fix GIC cpumask initialization

Changed files
+26 -5
arch
arm
common
include
asm
mach-realview
include
mach
mm
+23 -2
arch/arm/common/gic.c
··· 351 351 irq_set_chained_handler(irq, gic_handle_cascade_irq); 352 352 } 353 353 354 + static u8 gic_get_cpumask(struct gic_chip_data *gic) 355 + { 356 + void __iomem *base = gic_data_dist_base(gic); 357 + u32 mask, i; 358 + 359 + for (i = mask = 0; i < 32; i += 4) { 360 + mask = readl_relaxed(base + GIC_DIST_TARGET + i); 361 + mask |= mask >> 16; 362 + mask |= mask >> 8; 363 + if (mask) 364 + break; 365 + } 366 + 367 + if (!mask) 368 + pr_crit("GIC CPU mask not found - kernel will fail to boot.\n"); 369 + 370 + return mask; 371 + } 372 + 354 373 static void __init gic_dist_init(struct gic_chip_data *gic) 355 374 { 356 375 unsigned int i; ··· 388 369 /* 389 370 * Set all global interrupts to this CPU only. 390 371 */ 391 - cpumask = readl_relaxed(base + GIC_DIST_TARGET + 0); 372 + cpumask = gic_get_cpumask(gic); 373 + cpumask |= cpumask << 8; 374 + cpumask |= cpumask << 16; 392 375 for (i = 32; i < gic_irqs; i += 4) 393 376 writel_relaxed(cpumask, base + GIC_DIST_TARGET + i * 4 / 4); 394 377 ··· 421 400 * Get what the GIC says our CPU mask is. 422 401 */ 423 402 BUG_ON(cpu >= NR_GIC_CPU_IF); 424 - cpu_mask = readl_relaxed(dist_base + GIC_DIST_TARGET + 0); 403 + cpu_mask = gic_get_cpumask(gic); 425 404 gic_cpu_map[cpu] = cpu_mask; 426 405 427 406 /*
+1 -1
arch/arm/include/asm/memory.h
··· 37 37 */ 38 38 #define PAGE_OFFSET UL(CONFIG_PAGE_OFFSET) 39 39 #define TASK_SIZE (UL(CONFIG_PAGE_OFFSET) - UL(0x01000000)) 40 - #define TASK_UNMAPPED_BASE (UL(CONFIG_PAGE_OFFSET) / 3) 40 + #define TASK_UNMAPPED_BASE ALIGN(TASK_SIZE / 3, SZ_16M) 41 41 42 42 /* 43 43 * The maximum size of a 26-bit user space task.
+1 -1
arch/arm/mach-realview/include/mach/irqs-eb.h
··· 115 115 /* 116 116 * Only define NR_IRQS if less than NR_IRQS_EB 117 117 */ 118 - #define NR_IRQS_EB (IRQ_EB_GIC_START + 96) 118 + #define NR_IRQS_EB (IRQ_EB_GIC_START + 128) 119 119 120 120 #if defined(CONFIG_MACH_REALVIEW_EB) \ 121 121 && (!defined(NR_IRQS) || (NR_IRQS < NR_IRQS_EB))
+1 -1
arch/arm/mm/dma-mapping.c
··· 640 640 641 641 if (is_coherent || nommu()) 642 642 addr = __alloc_simple_buffer(dev, size, gfp, &page); 643 - else if (gfp & GFP_ATOMIC) 643 + else if (!(gfp & __GFP_WAIT)) 644 644 addr = __alloc_from_pool(size, &page); 645 645 else if (!IS_ENABLED(CONFIG_CMA)) 646 646 addr = __alloc_remap_buffer(dev, size, gfp, prot, &page, caller);