Commit f5ce0466 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm

Pull ARM fixes from Russell King:

 - Halve maximum number of CPUs if DEBUG_KMAP_LOCAL is enabled

 - Fix conversion for_each_membock() to for_each_mem_range()

 - Fix footbridge PCI mapping

 - Avoid uprobes hooking on thumb instructions

* tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm:
  ARM: 9071/1: uprobes: Don't hook on thumb instructions
  ARM: footbridge: fix PCI interrupt mapping
  ARM: 9069/1: NOMMU: Fix conversion for_each_membock() to for_each_mem_range()
  ARM: 9063/1: mm: reduce maximum number of CPUs if DEBUG_KMAP_LOCAL is enabled
parents c98ff1d0 d2f7eca6
...@@ -1293,9 +1293,15 @@ config KASAN_SHADOW_OFFSET ...@@ -1293,9 +1293,15 @@ config KASAN_SHADOW_OFFSET
config NR_CPUS config NR_CPUS
int "Maximum number of CPUs (2-32)" int "Maximum number of CPUs (2-32)"
range 2 32 range 2 16 if DEBUG_KMAP_LOCAL
range 2 32 if !DEBUG_KMAP_LOCAL
depends on SMP depends on SMP
default "4" default "4"
help
The maximum number of CPUs that the kernel can support.
Up to 32 CPUs can be supported, or up to 16 if kmap_local()
debugging is enabled, which uses half of the per-CPU fixmap
slots as guard regions.
config HOTPLUG_CPU config HOTPLUG_CPU
bool "Support for hot-pluggable CPUs" bool "Support for hot-pluggable CPUs"
......
...@@ -15,14 +15,14 @@ ...@@ -15,14 +15,14 @@
#include <asm/mach-types.h> #include <asm/mach-types.h>
/* cats host-specific stuff */ /* cats host-specific stuff */
static int irqmap_cats[] __initdata = { IRQ_PCI, IRQ_IN0, IRQ_IN1, IRQ_IN3 }; static int irqmap_cats[] = { IRQ_PCI, IRQ_IN0, IRQ_IN1, IRQ_IN3 };
static u8 cats_no_swizzle(struct pci_dev *dev, u8 *pin) static u8 cats_no_swizzle(struct pci_dev *dev, u8 *pin)
{ {
return 0; return 0;
} }
static int __init cats_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) static int cats_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
{ {
if (dev->irq >= 255) if (dev->irq >= 255)
return -1; /* not a valid interrupt. */ return -1; /* not a valid interrupt. */
......
...@@ -14,9 +14,9 @@ ...@@ -14,9 +14,9 @@
#include <asm/mach/pci.h> #include <asm/mach/pci.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
static int irqmap_ebsa285[] __initdata = { IRQ_IN3, IRQ_IN1, IRQ_IN0, IRQ_PCI }; static int irqmap_ebsa285[] = { IRQ_IN3, IRQ_IN1, IRQ_IN0, IRQ_PCI };
static int __init ebsa285_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) static int ebsa285_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
{ {
if (dev->vendor == PCI_VENDOR_ID_CONTAQ && if (dev->vendor == PCI_VENDOR_ID_CONTAQ &&
dev->device == PCI_DEVICE_ID_CONTAQ_82C693) dev->device == PCI_DEVICE_ID_CONTAQ_82C693)
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
* We now use the slot ID instead of the device identifiers to select * We now use the slot ID instead of the device identifiers to select
* which interrupt is routed where. * which interrupt is routed where.
*/ */
static int __init netwinder_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) static int netwinder_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
{ {
switch (slot) { switch (slot) {
case 0: /* host bridge */ case 0: /* host bridge */
......
...@@ -14,13 +14,12 @@ ...@@ -14,13 +14,12 @@
#include <asm/mach/pci.h> #include <asm/mach/pci.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
static int irqmap_personal_server[] __initdata = { static int irqmap_personal_server[] = {
IRQ_IN0, IRQ_IN1, IRQ_IN2, IRQ_IN3, 0, 0, 0, IRQ_IN0, IRQ_IN1, IRQ_IN2, IRQ_IN3, 0, 0, 0,
IRQ_DOORBELLHOST, IRQ_DMA1, IRQ_DMA2, IRQ_PCI IRQ_DOORBELLHOST, IRQ_DMA1, IRQ_DMA2, IRQ_PCI
}; };
static int __init personal_server_map_irq(const struct pci_dev *dev, u8 slot, static int personal_server_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
u8 pin)
{ {
unsigned char line; unsigned char line;
......
...@@ -387,8 +387,7 @@ void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot) ...@@ -387,8 +387,7 @@ void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot)
pte_t *pte = pte_offset_fixmap(pmd_off_k(vaddr), vaddr); pte_t *pte = pte_offset_fixmap(pmd_off_k(vaddr), vaddr);
/* Make sure fixmap region does not exceed available allocation. */ /* Make sure fixmap region does not exceed available allocation. */
BUILD_BUG_ON(FIXADDR_START + (__end_of_fixed_addresses * PAGE_SIZE) > BUILD_BUG_ON(__fix_to_virt(__end_of_fixed_addresses) < FIXADDR_START);
FIXADDR_END);
BUG_ON(idx >= __end_of_fixed_addresses); BUG_ON(idx >= __end_of_fixed_addresses);
/* we only support device mappings until pgprot_kernel has been set */ /* we only support device mappings until pgprot_kernel has been set */
......
...@@ -235,6 +235,7 @@ void __init pmsav7_adjust_lowmem_bounds(void) ...@@ -235,6 +235,7 @@ void __init pmsav7_adjust_lowmem_bounds(void)
phys_addr_t mem_end; phys_addr_t mem_end;
phys_addr_t reg_start, reg_end; phys_addr_t reg_start, reg_end;
unsigned int mem_max_regions; unsigned int mem_max_regions;
bool first = true;
int num; int num;
u64 i; u64 i;
...@@ -263,7 +264,7 @@ void __init pmsav7_adjust_lowmem_bounds(void) ...@@ -263,7 +264,7 @@ void __init pmsav7_adjust_lowmem_bounds(void)
#endif #endif
for_each_mem_range(i, &reg_start, &reg_end) { for_each_mem_range(i, &reg_start, &reg_end) {
if (i == 0) { if (first) {
phys_addr_t phys_offset = PHYS_OFFSET; phys_addr_t phys_offset = PHYS_OFFSET;
/* /*
...@@ -275,6 +276,7 @@ void __init pmsav7_adjust_lowmem_bounds(void) ...@@ -275,6 +276,7 @@ void __init pmsav7_adjust_lowmem_bounds(void)
mem_start = reg_start; mem_start = reg_start;
mem_end = reg_end; mem_end = reg_end;
specified_mem_size = mem_end - mem_start; specified_mem_size = mem_end - mem_start;
first = false;
} else { } else {
/* /*
* memblock auto merges contiguous blocks, remove * memblock auto merges contiguous blocks, remove
......
...@@ -95,10 +95,11 @@ void __init pmsav8_adjust_lowmem_bounds(void) ...@@ -95,10 +95,11 @@ void __init pmsav8_adjust_lowmem_bounds(void)
{ {
phys_addr_t mem_end; phys_addr_t mem_end;
phys_addr_t reg_start, reg_end; phys_addr_t reg_start, reg_end;
bool first = true;
u64 i; u64 i;
for_each_mem_range(i, &reg_start, &reg_end) { for_each_mem_range(i, &reg_start, &reg_end) {
if (i == 0) { if (first) {
phys_addr_t phys_offset = PHYS_OFFSET; phys_addr_t phys_offset = PHYS_OFFSET;
/* /*
...@@ -107,6 +108,7 @@ void __init pmsav8_adjust_lowmem_bounds(void) ...@@ -107,6 +108,7 @@ void __init pmsav8_adjust_lowmem_bounds(void)
if (reg_start != phys_offset) if (reg_start != phys_offset)
panic("First memory bank must be contiguous from PHYS_OFFSET"); panic("First memory bank must be contiguous from PHYS_OFFSET");
mem_end = reg_end; mem_end = reg_end;
first = false;
} else { } else {
/* /*
* memblock auto merges contiguous blocks, remove * memblock auto merges contiguous blocks, remove
......
...@@ -204,7 +204,7 @@ unsigned long uprobe_get_swbp_addr(struct pt_regs *regs) ...@@ -204,7 +204,7 @@ unsigned long uprobe_get_swbp_addr(struct pt_regs *regs)
static struct undef_hook uprobes_arm_break_hook = { static struct undef_hook uprobes_arm_break_hook = {
.instr_mask = 0x0fffffff, .instr_mask = 0x0fffffff,
.instr_val = (UPROBE_SWBP_ARM_INSN & 0x0fffffff), .instr_val = (UPROBE_SWBP_ARM_INSN & 0x0fffffff),
.cpsr_mask = MODE_MASK, .cpsr_mask = (PSR_T_BIT | MODE_MASK),
.cpsr_val = USR_MODE, .cpsr_val = USR_MODE,
.fn = uprobe_trap_handler, .fn = uprobe_trap_handler,
}; };
...@@ -212,7 +212,7 @@ static struct undef_hook uprobes_arm_break_hook = { ...@@ -212,7 +212,7 @@ static struct undef_hook uprobes_arm_break_hook = {
static struct undef_hook uprobes_arm_ss_hook = { static struct undef_hook uprobes_arm_ss_hook = {
.instr_mask = 0x0fffffff, .instr_mask = 0x0fffffff,
.instr_val = (UPROBE_SS_ARM_INSN & 0x0fffffff), .instr_val = (UPROBE_SS_ARM_INSN & 0x0fffffff),
.cpsr_mask = MODE_MASK, .cpsr_mask = (PSR_T_BIT | MODE_MASK),
.cpsr_val = USR_MODE, .cpsr_val = USR_MODE,
.fn = uprobe_trap_handler, .fn = uprobe_trap_handler,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment