Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm
Pull ARM fixes from Russell King: "A random collection of various fixes, mainly from Arnd and a few other people. Not thing really stands out here." * 'fixes' of git://git.linaro.org/people/rmk/linux-arm: ARM: drop experimental status for hotplug and Thumb2 ARM: 7560/1: SMP_TWD: use DIV_ROUND_CLOSEST() for periodic mode ARM: 7559/1: smp: switch away from the idmap before updating init_mm.mm_count ARM: 7556/1: perf: fix updated event period in response to PERF_EVENT_IOC_PERIOD ARM: 7555/1: kexec: fix segment memory addresses check ARM: warnings in arch/arm/include/asm/uaccess.h ARM: binfmt_flat: unused variable 'persistent' ARM: be really quiet when building with 'make -s' ARM: pass -marm to gcc by default for both C and assembler ARM: Xen: fix initial build problems ARM: export default read_current_timer ARM: Fix another build warning in arch/arm/mm/alignment.c ARM: export set_irq_flags ARM: kprobes: make more tests conditional
This commit is contained in:
Коммит
6bb1e3819c
|
@ -1603,8 +1603,8 @@ config NR_CPUS
|
||||||
default "4"
|
default "4"
|
||||||
|
|
||||||
config HOTPLUG_CPU
|
config HOTPLUG_CPU
|
||||||
bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
|
bool "Support for hot-pluggable CPUs"
|
||||||
depends on SMP && HOTPLUG && EXPERIMENTAL
|
depends on SMP && HOTPLUG
|
||||||
help
|
help
|
||||||
Say Y here to experiment with turning CPUs off and on. CPUs
|
Say Y here to experiment with turning CPUs off and on. CPUs
|
||||||
can be controlled through /sys/devices/system/cpu.
|
can be controlled through /sys/devices/system/cpu.
|
||||||
|
@ -1645,8 +1645,8 @@ config HZ
|
||||||
default 100
|
default 100
|
||||||
|
|
||||||
config THUMB2_KERNEL
|
config THUMB2_KERNEL
|
||||||
bool "Compile the kernel in Thumb-2 mode (EXPERIMENTAL)"
|
bool "Compile the kernel in Thumb-2 mode"
|
||||||
depends on CPU_V7 && !CPU_V6 && !CPU_V6K && EXPERIMENTAL
|
depends on CPU_V7 && !CPU_V6 && !CPU_V6K
|
||||||
select AEABI
|
select AEABI
|
||||||
select ARM_ASM_UNIFIED
|
select ARM_ASM_UNIFIED
|
||||||
select ARM_UNWIND
|
select ARM_UNWIND
|
||||||
|
@ -1850,6 +1850,7 @@ config XEN_DOM0
|
||||||
config XEN
|
config XEN
|
||||||
bool "Xen guest support on ARM (EXPERIMENTAL)"
|
bool "Xen guest support on ARM (EXPERIMENTAL)"
|
||||||
depends on EXPERIMENTAL && ARM && OF
|
depends on EXPERIMENTAL && ARM && OF
|
||||||
|
depends on CPU_V7 && !CPU_V6
|
||||||
help
|
help
|
||||||
Say Y if you want to run Linux in a Virtual Machine on Xen on ARM.
|
Say Y if you want to run Linux in a Virtual Machine on Xen on ARM.
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,6 @@ endif
|
||||||
OBJCOPYFLAGS :=-O binary -R .comment -S
|
OBJCOPYFLAGS :=-O binary -R .comment -S
|
||||||
GZFLAGS :=-9
|
GZFLAGS :=-9
|
||||||
#KBUILD_CFLAGS +=-pipe
|
#KBUILD_CFLAGS +=-pipe
|
||||||
# Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb:
|
|
||||||
KBUILD_CFLAGS +=$(call cc-option,-marm,)
|
|
||||||
|
|
||||||
# Never generate .eh_frame
|
# Never generate .eh_frame
|
||||||
KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm)
|
KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm)
|
||||||
|
@ -105,17 +103,20 @@ endif
|
||||||
ifeq ($(CONFIG_THUMB2_KERNEL),y)
|
ifeq ($(CONFIG_THUMB2_KERNEL),y)
|
||||||
AFLAGS_AUTOIT :=$(call as-option,-Wa$(comma)-mimplicit-it=always,-Wa$(comma)-mauto-it)
|
AFLAGS_AUTOIT :=$(call as-option,-Wa$(comma)-mimplicit-it=always,-Wa$(comma)-mauto-it)
|
||||||
AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)
|
AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)
|
||||||
CFLAGS_THUMB2 :=-mthumb $(AFLAGS_AUTOIT) $(AFLAGS_NOWARN)
|
CFLAGS_ISA :=-mthumb $(AFLAGS_AUTOIT) $(AFLAGS_NOWARN)
|
||||||
AFLAGS_THUMB2 :=$(CFLAGS_THUMB2) -Wa$(comma)-mthumb
|
AFLAGS_ISA :=$(CFLAGS_ISA) -Wa$(comma)-mthumb
|
||||||
# Work around buggy relocation from gas if requested:
|
# Work around buggy relocation from gas if requested:
|
||||||
ifeq ($(CONFIG_THUMB2_AVOID_R_ARM_THM_JUMP11),y)
|
ifeq ($(CONFIG_THUMB2_AVOID_R_ARM_THM_JUMP11),y)
|
||||||
CFLAGS_MODULE +=-fno-optimize-sibling-calls
|
CFLAGS_MODULE +=-fno-optimize-sibling-calls
|
||||||
endif
|
endif
|
||||||
|
else
|
||||||
|
CFLAGS_ISA :=$(call cc-option,-marm,)
|
||||||
|
AFLAGS_ISA :=$(CFLAGS_ISA)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Need -Uarm for gcc < 3.x
|
# Need -Uarm for gcc < 3.x
|
||||||
KBUILD_CFLAGS +=$(CFLAGS_ABI) $(CFLAGS_THUMB2) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
|
KBUILD_CFLAGS +=$(CFLAGS_ABI) $(CFLAGS_ISA) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
|
||||||
KBUILD_AFLAGS +=$(CFLAGS_ABI) $(AFLAGS_THUMB2) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float
|
KBUILD_AFLAGS +=$(CFLAGS_ABI) $(AFLAGS_ISA) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float
|
||||||
|
|
||||||
CHECKFLAGS += -D__arm__
|
CHECKFLAGS += -D__arm__
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ ifeq ($(CONFIG_XIP_KERNEL),y)
|
||||||
|
|
||||||
$(obj)/xipImage: vmlinux FORCE
|
$(obj)/xipImage: vmlinux FORCE
|
||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
@echo ' Kernel: $@ is ready (physical address: $(CONFIG_XIP_PHYS_ADDR))'
|
$(kecho) ' Kernel: $@ is ready (physical address: $(CONFIG_XIP_PHYS_ADDR))'
|
||||||
|
|
||||||
$(obj)/Image $(obj)/zImage: FORCE
|
$(obj)/Image $(obj)/zImage: FORCE
|
||||||
@echo 'Kernel configured for XIP (CONFIG_XIP_KERNEL=y)'
|
@echo 'Kernel configured for XIP (CONFIG_XIP_KERNEL=y)'
|
||||||
|
@ -48,14 +48,14 @@ $(obj)/xipImage: FORCE
|
||||||
|
|
||||||
$(obj)/Image: vmlinux FORCE
|
$(obj)/Image: vmlinux FORCE
|
||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
@echo ' Kernel: $@ is ready'
|
$(kecho) ' Kernel: $@ is ready'
|
||||||
|
|
||||||
$(obj)/compressed/vmlinux: $(obj)/Image FORCE
|
$(obj)/compressed/vmlinux: $(obj)/Image FORCE
|
||||||
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
|
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
|
||||||
|
|
||||||
$(obj)/zImage: $(obj)/compressed/vmlinux FORCE
|
$(obj)/zImage: $(obj)/compressed/vmlinux FORCE
|
||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
@echo ' Kernel: $@ is ready'
|
$(kecho) ' Kernel: $@ is ready'
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ fi
|
||||||
$(obj)/uImage: $(obj)/zImage FORCE
|
$(obj)/uImage: $(obj)/zImage FORCE
|
||||||
@$(check_for_multiple_loadaddr)
|
@$(check_for_multiple_loadaddr)
|
||||||
$(call if_changed,uimage)
|
$(call if_changed,uimage)
|
||||||
@echo ' Image $@ is ready'
|
$(kecho) ' Image $@ is ready'
|
||||||
|
|
||||||
$(obj)/bootp/bootp: $(obj)/zImage initrd FORCE
|
$(obj)/bootp/bootp: $(obj)/zImage initrd FORCE
|
||||||
$(Q)$(MAKE) $(build)=$(obj)/bootp $@
|
$(Q)$(MAKE) $(build)=$(obj)/bootp $@
|
||||||
|
@ -98,7 +98,7 @@ $(obj)/bootp/bootp: $(obj)/zImage initrd FORCE
|
||||||
|
|
||||||
$(obj)/bootpImage: $(obj)/bootp/bootp FORCE
|
$(obj)/bootpImage: $(obj)/bootp/bootp FORCE
|
||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
@echo ' Kernel: $@ is ready'
|
$(kecho) ' Kernel: $@ is ready'
|
||||||
|
|
||||||
PHONY += initrd FORCE
|
PHONY += initrd FORCE
|
||||||
initrd:
|
initrd:
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#define flat_argvp_envp_on_stack() 1
|
#define flat_argvp_envp_on_stack() 1
|
||||||
#define flat_old_ram_flag(flags) (flags)
|
#define flat_old_ram_flag(flags) (flags)
|
||||||
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
||||||
#define flat_get_addr_from_rp(rp, relval, flags, persistent) get_unaligned(rp)
|
#define flat_get_addr_from_rp(rp, relval, flags, persistent) ((void)persistent,get_unaligned(rp))
|
||||||
#define flat_put_addr_at_rp(rp, val, relval) put_unaligned(val,rp)
|
#define flat_put_addr_at_rp(rp, val, relval) put_unaligned(val,rp)
|
||||||
#define flat_get_relocate_addr(rel) (rel)
|
#define flat_get_relocate_addr(rel) (rel)
|
||||||
#define flat_set_persistent(relval, p) 0
|
#define flat_set_persistent(relval, p) 0
|
||||||
|
|
|
@ -200,8 +200,8 @@ extern int __put_user_8(void *, unsigned long long);
|
||||||
#define USER_DS KERNEL_DS
|
#define USER_DS KERNEL_DS
|
||||||
|
|
||||||
#define segment_eq(a,b) (1)
|
#define segment_eq(a,b) (1)
|
||||||
#define __addr_ok(addr) (1)
|
#define __addr_ok(addr) ((void)(addr),1)
|
||||||
#define __range_ok(addr,size) (0)
|
#define __range_ok(addr,size) ((void)(addr),0)
|
||||||
#define get_fs() (KERNEL_DS)
|
#define get_fs() (KERNEL_DS)
|
||||||
|
|
||||||
static inline void set_fs(mm_segment_t fs)
|
static inline void set_fs(mm_segment_t fs)
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/kallsyms.h>
|
#include <linux/kallsyms.h>
|
||||||
#include <linux/proc_fs.h>
|
#include <linux/proc_fs.h>
|
||||||
|
#include <linux/export.h>
|
||||||
|
|
||||||
#include <asm/exception.h>
|
#include <asm/exception.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
@ -109,6 +110,7 @@ void set_irq_flags(unsigned int irq, unsigned int iflags)
|
||||||
/* Order is clear bits in "clr" then set bits in "set" */
|
/* Order is clear bits in "clr" then set bits in "set" */
|
||||||
irq_modify_status(irq, clr, set & ~clr);
|
irq_modify_status(irq, clr, set & ~clr);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(set_irq_flags);
|
||||||
|
|
||||||
void __init init_IRQ(void)
|
void __init init_IRQ(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -366,7 +366,9 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST_UNSUPPORTED(".word 0xe04f0392 @ umaal r0, pc, r2, r3")
|
TEST_UNSUPPORTED(".word 0xe04f0392 @ umaal r0, pc, r2, r3")
|
||||||
TEST_UNSUPPORTED(".word 0xe0500090 @ undef")
|
TEST_UNSUPPORTED(".word 0xe0500090 @ undef")
|
||||||
TEST_UNSUPPORTED(".word 0xe05fff9f @ undef")
|
TEST_UNSUPPORTED(".word 0xe05fff9f @ undef")
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __LINUX_ARM_ARCH__ >= 7
|
||||||
TEST_RRR( "mls r0, r",1, VAL1,", r",2, VAL2,", r",3, VAL3,"")
|
TEST_RRR( "mls r0, r",1, VAL1,", r",2, VAL2,", r",3, VAL3,"")
|
||||||
TEST_RRR( "mlshi r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
|
TEST_RRR( "mlshi r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
|
||||||
TEST_RR( "mls lr, r",1, VAL2,", r",2, VAL3,", r13")
|
TEST_RR( "mls lr, r",1, VAL2,", r",2, VAL3,", r13")
|
||||||
|
@ -456,6 +458,8 @@ void kprobe_arm_test_cases(void)
|
||||||
TEST_UNSUPPORTED(".word 0xe1700090") /* Unallocated space */
|
TEST_UNSUPPORTED(".word 0xe1700090") /* Unallocated space */
|
||||||
#if __LINUX_ARM_ARCH__ >= 6
|
#if __LINUX_ARM_ARCH__ >= 6
|
||||||
TEST_UNSUPPORTED("ldrex r2, [sp]")
|
TEST_UNSUPPORTED("ldrex r2, [sp]")
|
||||||
|
#endif
|
||||||
|
#if (__LINUX_ARM_ARCH__ >= 7) || defined(CONFIG_CPU_32v6K)
|
||||||
TEST_UNSUPPORTED("strexd r0, r2, r3, [sp]")
|
TEST_UNSUPPORTED("strexd r0, r2, r3, [sp]")
|
||||||
TEST_UNSUPPORTED("ldrexd r2, r3, [sp]")
|
TEST_UNSUPPORTED("ldrexd r2, r3, [sp]")
|
||||||
TEST_UNSUPPORTED("strexb r0, r2, [sp]")
|
TEST_UNSUPPORTED("strexb r0, r2, [sp]")
|
||||||
|
|
|
@ -45,10 +45,9 @@ int machine_kexec_prepare(struct kimage *image)
|
||||||
for (i = 0; i < image->nr_segments; i++) {
|
for (i = 0; i < image->nr_segments; i++) {
|
||||||
current_segment = &image->segment[i];
|
current_segment = &image->segment[i];
|
||||||
|
|
||||||
err = memblock_is_region_memory(current_segment->mem,
|
if (!memblock_is_region_memory(current_segment->mem,
|
||||||
current_segment->memsz);
|
current_segment->memsz))
|
||||||
if (err)
|
return -EINVAL;
|
||||||
return - EINVAL;
|
|
||||||
|
|
||||||
err = get_user(header, (__be32*)current_segment->buf);
|
err = get_user(header, (__be32*)current_segment->buf);
|
||||||
if (err)
|
if (err)
|
||||||
|
|
|
@ -96,6 +96,10 @@ armpmu_event_set_period(struct perf_event *event,
|
||||||
s64 period = hwc->sample_period;
|
s64 period = hwc->sample_period;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
/* The period may have been changed by PERF_EVENT_IOC_PERIOD */
|
||||||
|
if (unlikely(period != hwc->last_period))
|
||||||
|
left = period - (hwc->last_period - left);
|
||||||
|
|
||||||
if (unlikely(left <= -period)) {
|
if (unlikely(left <= -period)) {
|
||||||
left = period;
|
left = period;
|
||||||
local64_set(&hwc->period_left, left);
|
local64_set(&hwc->period_left, left);
|
||||||
|
|
|
@ -294,18 +294,24 @@ static void percpu_timer_setup(void);
|
||||||
asmlinkage void __cpuinit secondary_start_kernel(void)
|
asmlinkage void __cpuinit secondary_start_kernel(void)
|
||||||
{
|
{
|
||||||
struct mm_struct *mm = &init_mm;
|
struct mm_struct *mm = &init_mm;
|
||||||
unsigned int cpu = smp_processor_id();
|
unsigned int cpu;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The identity mapping is uncached (strongly ordered), so
|
||||||
|
* switch away from it before attempting any exclusive accesses.
|
||||||
|
*/
|
||||||
|
cpu_switch_mm(mm->pgd, mm);
|
||||||
|
enter_lazy_tlb(mm, current);
|
||||||
|
local_flush_tlb_all();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* All kernel threads share the same mm context; grab a
|
* All kernel threads share the same mm context; grab a
|
||||||
* reference and switch to it.
|
* reference and switch to it.
|
||||||
*/
|
*/
|
||||||
|
cpu = smp_processor_id();
|
||||||
atomic_inc(&mm->mm_count);
|
atomic_inc(&mm->mm_count);
|
||||||
current->active_mm = mm;
|
current->active_mm = mm;
|
||||||
cpumask_set_cpu(cpu, mm_cpumask(mm));
|
cpumask_set_cpu(cpu, mm_cpumask(mm));
|
||||||
cpu_switch_mm(mm->pgd, mm);
|
|
||||||
enter_lazy_tlb(mm, current);
|
|
||||||
local_flush_tlb_all();
|
|
||||||
|
|
||||||
printk("CPU%u: Booted secondary processor\n", cpu);
|
printk("CPU%u: Booted secondary processor\n", cpu);
|
||||||
|
|
||||||
|
|
|
@ -42,10 +42,10 @@ static void twd_set_mode(enum clock_event_mode mode,
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case CLOCK_EVT_MODE_PERIODIC:
|
case CLOCK_EVT_MODE_PERIODIC:
|
||||||
/* timer load already set up */
|
|
||||||
ctrl = TWD_TIMER_CONTROL_ENABLE | TWD_TIMER_CONTROL_IT_ENABLE
|
ctrl = TWD_TIMER_CONTROL_ENABLE | TWD_TIMER_CONTROL_IT_ENABLE
|
||||||
| TWD_TIMER_CONTROL_PERIODIC;
|
| TWD_TIMER_CONTROL_PERIODIC;
|
||||||
__raw_writel(twd_timer_rate / HZ, twd_base + TWD_TIMER_LOAD);
|
__raw_writel(DIV_ROUND_CLOSEST(twd_timer_rate, HZ),
|
||||||
|
twd_base + TWD_TIMER_LOAD);
|
||||||
break;
|
break;
|
||||||
case CLOCK_EVT_MODE_ONESHOT:
|
case CLOCK_EVT_MODE_ONESHOT:
|
||||||
/* period set, and timer enabled in 'next_event' hook */
|
/* period set, and timer enabled in 'next_event' hook */
|
||||||
|
|
|
@ -45,6 +45,7 @@ int read_current_timer(unsigned long *timer_val)
|
||||||
*timer_val = delay_timer->read_current_timer();
|
*timer_val = delay_timer->read_current_timer();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(read_current_timer);
|
||||||
|
|
||||||
static void __timer_delay(unsigned long cycles)
|
static void __timer_delay(unsigned long cycles)
|
||||||
{
|
{
|
||||||
|
|
|
@ -856,8 +856,10 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
||||||
if (thumb2_32b) {
|
if (thumb2_32b) {
|
||||||
offset.un = 0;
|
offset.un = 0;
|
||||||
handler = do_alignment_t32_to_handler(&instr, regs, &offset);
|
handler = do_alignment_t32_to_handler(&instr, regs, &offset);
|
||||||
} else
|
} else {
|
||||||
|
offset.un = 0;
|
||||||
handler = do_alignment_ldmstm;
|
handler = do_alignment_ldmstm;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -5,6 +5,6 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
include/generated/mach-types.h: $(src)/gen-mach-types $(src)/mach-types
|
include/generated/mach-types.h: $(src)/gen-mach-types $(src)/mach-types
|
||||||
@echo ' Generating $@'
|
$(kecho) ' Generating $@'
|
||||||
@mkdir -p $(dir $@)
|
@mkdir -p $(dir $@)
|
||||||
$(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }
|
$(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }
|
||||||
|
|
|
@ -3,6 +3,7 @@ menu "Xen driver support"
|
||||||
|
|
||||||
config XEN_BALLOON
|
config XEN_BALLOON
|
||||||
bool "Xen memory balloon driver"
|
bool "Xen memory balloon driver"
|
||||||
|
depends on !ARM
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
The balloon driver allows the Xen domain to request more memory from
|
The balloon driver allows the Xen domain to request more memory from
|
||||||
|
@ -145,6 +146,7 @@ config SWIOTLB_XEN
|
||||||
|
|
||||||
config XEN_TMEM
|
config XEN_TMEM
|
||||||
bool
|
bool
|
||||||
|
depends on !ARM
|
||||||
default y if (CLEANCACHE || FRONTSWAP)
|
default y if (CLEANCACHE || FRONTSWAP)
|
||||||
help
|
help
|
||||||
Shim to interface in-kernel Transcendent Memory hooks
|
Shim to interface in-kernel Transcendent Memory hooks
|
||||||
|
|
Загрузка…
Ссылка в новой задаче