History

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

Pull late ARM updates from Russell King: "Here is the late set of ARM updates for this merge window; in here is: - The ARM parts of the broadcast timer support, core parts merged through tglx's tree. This was left over from the previous merge to allow the dependency on tglx's tree to be resolved. - A fix to the VFP code which shows up on Raspberry Pi's, as well as fixing the fallout from a previous commit in this area. - A number of smaller fixes scattered throughout the ARM tree" * 'for-linus' of git://git.linaro.org/people/rmk/linux-arm: ARM: Fix broken commit 0cc41e4a21d43 corrupting kernel messages ARM: fix scheduling while atomic warning in alignment handling code ARM: VFP: fix emulation of second VFP instruction ARM: 7656/1: uImage: Error out on build of multiplatform without LOADADDR ARM: 7640/1: memory: tegra_ahb_enable_smmu() depends on TEGRA_IOMMU_SMMU ARM: 7654/1: Preserve L_PTE_VALID in pte_modify() ARM: 7653/2: do not scale loops_per_jiffy when using a constant delay clock ARM: 7651/1: remove unused smp_timer_broadcast #define

Linus Torvalds committed 13 years ago

Commit 529e5fb2 parents 686c094 16af43f9 files · +36 −29Browse files

Unified · Split

9 files
  1. arch/arm/boot/Makefile +2 −2
  2. arch/arm/include/asm/delay.h +1 −0
  3. arch/arm/include/asm/pgtable.h +2 −1
  4. arch/arm/kernel/smp.c +3 −2
  5. arch/arm/lib/delay.c +1 −0
  6. arch/arm/mm/alignment.c +4 −7
  7. arch/arm/vfp/vfphw.S +21 −15
  8. arch/arm/vfp/vfpmodule.c +1 −1
  9. drivers/amba/tegra-ahb.c +1 −1
arch/arm/boot/Makefile+2−2
@@ -68,8 +68,8 @@ else · 67 unmodified lines
6868 endif
6969
7070 check_for_multiple_loadaddr = \
71−if [ $(words $(UIMAGE_LOADADDR)) -gt 1 ]; then \
72− echo 'multiple load addresses: $(UIMAGE_LOADADDR)'; \
71+if [ $(words $(UIMAGE_LOADADDR)) -ne 1 ]; then \
72+ echo 'multiple (or no) load addresses: $(UIMAGE_LOADADDR)'; \
7373 echo 'This is incompatible with uImages'; \
7474 echo 'Specify LOADADDR on the commandline to build an uImage'; \
7575 false; \
arch/arm/include/asm/delay.h+1−0
@@ -24,6 +24,7 @@ extern struct arm_delay_ops { · 23 unmodified lines
2424 void (*delay)(unsigned long);
2525 void (*const_udelay)(unsigned long);
2626 void (*udelay)(unsigned long);
27+ bool const_clock;
2728 } arm_delay_ops;
2829
2930 #define __delay(n) arm_delay_ops.delay(n)
arch/arm/include/asm/pgtable.h+2−1
@@ -247,7 +247,8 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; } · 246 unmodified lines
247247
248248 static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
249249 {
250− const pteval_t mask = L_PTE_XN | L_PTE_RDONLY | L_PTE_USER | L_PTE_NONE;
250+ const pteval_t mask = L_PTE_XN | L_PTE_RDONLY | L_PTE_USER |
251+ L_PTE_NONE | L_PTE_VALID;
251252 pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
252253 return pte;
253254 }
arch/arm/kernel/smp.c+3−2
@@ -466,8 +466,6 @@ void tick_broadcast(const struct cpumask *mask) · 465 unmodified lines
466466 {
467467 smp_cross_call(mask, IPI_TIMER);
468468 }
469−#else
470−#define smp_timer_broadcast NULL
471469 #endif
472470
473471 static void broadcast_timer_set_mode(enum clock_event_mode mode,
@@ -674,6 +672,9 @@ static int cpufreq_callback(struct notifier_block *nb, · 200 unmodified lines
674672 if (freq->flags & CPUFREQ_CONST_LOOPS)
675673 return NOTIFY_OK;
676674
675+ if (arm_delay_ops.const_clock)
676+ return NOTIFY_OK;
677+
677678 if (!per_cpu(l_p_j_ref, cpu)) {
678679 per_cpu(l_p_j_ref, cpu) =
679680 per_cpu(cpu_data, cpu).loops_per_jiffy;
arch/arm/lib/delay.c+1−0
@@ -77,6 +77,7 @@ void __init register_current_timer_delay(const struct delay_timer *timer) · 76 unmodified lines
7777 arm_delay_ops.delay = __timer_delay;
7878 arm_delay_ops.const_udelay = __timer_const_udelay;
7979 arm_delay_ops.udelay = __timer_udelay;
80+ arm_delay_ops.const_clock = true;
8081 delay_calibrated = true;
8182 } else {
8283 pr_info("Ignoring duplicate/late registration of read_current_timer delay\n");
arch/arm/mm/alignment.c+4−7
@@ -749,7 +749,6 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) · 748 unmodified lines
749749 unsigned long instr = 0, instrptr;
750750 int (*handler)(unsigned long addr, unsigned long instr, struct pt_regs *regs);
751751 unsigned int type;
752− mm_segment_t fs;
753752 unsigned int fault;
754753 u16 tinstr = 0;
755754 int isize = 4;
@@ -760,16 +759,15 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) · 4 unmodified lines
760759
761760 instrptr = instruction_pointer(regs);
762761
763− fs = get_fs();
764− set_fs(KERNEL_DS);
765762 if (thumb_mode(regs)) {
766− fault = __get_user(tinstr, (u16 *)(instrptr & ~1));
763+ u16 *ptr = (u16 *)(instrptr & ~1);
764+ fault = probe_kernel_address(ptr, tinstr);
767765 if (!fault) {
768766 if (cpu_architecture() >= CPU_ARCH_ARMv7 &&
769767 IS_T32(tinstr)) {
770768 /* Thumb-2 32-bit */
771769 u16 tinst2 = 0;
772− fault = __get_user(tinst2, (u16 *)(instrptr+2));
770+ fault = probe_kernel_address(ptr + 1, tinst2);
773771 instr = (tinstr << 16) | tinst2;
774772 thumb2_32b = 1;
775773 } else {
@@ -778,8 +776,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs) · 2 unmodified lines
778776 }
779777 }
780778 } else
781− fault = __get_user(instr, (u32 *)instrptr);
782− set_fs(fs);
779+ fault = probe_kernel_address(instrptr, instr);
783780
784781 if (fault) {
785782 type = TYPE_FAULT;
arch/arm/vfp/vfphw.S+21−15
@@ -22,12 +22,14 @@ · 21 unmodified lines
2222 .macro DBGSTR, str
2323 #ifdef DEBUG
2424 stmfd sp!, {r0-r3, ip, lr}
25− add r0, pc, #4
25+ ldr r0, =1f
2626 bl printk
27− b 1f
28− .asciz KERN_DEBUG "VFP: \str\n"
29− .balign 4
30−1: ldmfd sp!, {r0-r3, ip, lr}
27+ ldmfd sp!, {r0-r3, ip, lr}
28+
29+ .pushsection .rodata, "a"
30+1: .ascii KERN_DEBUG "VFP: \str\n"
31+ .byte 0
32+ .previous
3133 #endif
3234 .endm
3335
@@ -35,12 +37,14 @@ · 1 unmodified line
3537 #ifdef DEBUG
3638 stmfd sp!, {r0-r3, ip, lr}
3739 mov r1, \arg
38− add r0, pc, #4
40+ ldr r0, =1f
3941 bl printk
40− b 1f
41− .asciz KERN_DEBUG "VFP: \str\n"
42− .balign 4
43−1: ldmfd sp!, {r0-r3, ip, lr}
42+ ldmfd sp!, {r0-r3, ip, lr}
43+
44+ .pushsection .rodata, "a"
45+1: .ascii KERN_DEBUG "VFP: \str\n"
46+ .byte 0
47+ .previous
4448 #endif
4549 .endm
4650
@@ -50,12 +54,14 @@ · 3 unmodified lines
5054 mov r3, \arg3
5155 mov r2, \arg2
5256 mov r1, \arg1
53− add r0, pc, #4
57+ ldr r0, =1f
5458 bl printk
55− b 1f
56− .asciz KERN_DEBUG "VFP: \str\n"
57− .balign 4
58−1: ldmfd sp!, {r0-r3, ip, lr}
59+ ldmfd sp!, {r0-r3, ip, lr}
60+
61+ .pushsection .rodata, "a"
62+1: .ascii KERN_DEBUG "VFP: \str\n"
63+ .byte 0
64+ .previous
5965 #endif
6066 .endm
6167
arch/arm/vfp/vfpmodule.c+1−1
@@ -413,7 +413,7 @@ void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) · 412 unmodified lines
413413 * If there isn't a second FP instruction, exit now. Note that
414414 * the FPEXC.FP2V bit is valid only if FPEXC.EX is 1.
415415 */
416− if (fpexc ^ (FPEXC_EX | FPEXC_FP2V))
416+ if ((fpexc & (FPEXC_EX | FPEXC_FP2V)) != (FPEXC_EX | FPEXC_FP2V))
417417 goto exit;
418418
419419 /*
drivers/amba/tegra-ahb.c+1−1
@@ -130,7 +130,7 @@ static inline void gizmo_writel(struct tegra_ahb *ahb, u32 value, u32 offset) · 129 unmodified lines
130130 writel(value, ahb->regs + offset);
131131 }
132132
133−#ifdef CONFIG_ARCH_TEGRA_3x_SOC
133+#ifdef CONFIG_TEGRA_IOMMU_SMMU
134134 static int tegra_ahb_match_by_smmu(struct device *dev, void *data)
135135 {
136136 struct tegra_ahb *ahb = dev_get_drvdata(dev);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t