Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

Pull ARM fixes from Russell King:
"Small set of fixes again."

* 'fixes' of git://git.linaro.org/people/rmk/linux-arm:
ARM: 7419/1: vfp: fix VFP flushing regression on sigreturn path
ARM: 7418/1: LPAE: fix access flag setup in mem_type_table
ARM: prevent VM_GROWSDOWN mmaps extending below FIRST_USER_ADDRESS
ARM: 7417/1: vfp: ensure preemption is disabled when enabling VFP access

+13 -18
+3 -1
arch/arm/mm/fault.c
··· 247 247 return handle_mm_fault(mm, vma, addr & PAGE_MASK, flags); 248 248 249 249 check_stack: 250 - if (vma->vm_flags & VM_GROWSDOWN && !expand_stack(vma, addr)) 250 + /* Don't allow expansion below FIRST_USER_ADDRESS */ 251 + if (vma->vm_flags & VM_GROWSDOWN && 252 + addr >= FIRST_USER_ADDRESS && !expand_stack(vma, addr)) 251 253 goto good_area; 252 254 out: 253 255 return fault;
+2 -1
arch/arm/mm/mmu.c
··· 489 489 */ 490 490 for (i = 0; i < ARRAY_SIZE(mem_types); i++) { 491 491 mem_types[i].prot_pte |= PTE_EXT_AF; 492 - mem_types[i].prot_sect |= PMD_SECT_AF; 492 + if (mem_types[i].prot_sect) 493 + mem_types[i].prot_sect |= PMD_SECT_AF; 493 494 } 494 495 kern_pgprot |= PTE_EXT_AF; 495 496 vecs_pgprot |= PTE_EXT_AF;
+8 -16
arch/arm/vfp/vfpmodule.c
··· 11 11 #include <linux/types.h> 12 12 #include <linux/cpu.h> 13 13 #include <linux/cpu_pm.h> 14 + #include <linux/hardirq.h> 14 15 #include <linux/kernel.h> 15 16 #include <linux/notifier.h> 16 17 #include <linux/signal.h> ··· 433 432 434 433 static void vfp_enable(void *unused) 435 434 { 436 - u32 access = get_copro_access(); 435 + u32 access; 436 + 437 + BUG_ON(preemptible()); 438 + access = get_copro_access(); 437 439 438 440 /* 439 441 * Enable full access to VFP (cp10 and cp11) ··· 577 573 * entry. 578 574 */ 579 575 hwstate->fpscr &= ~(FPSCR_LENGTH_MASK | FPSCR_STRIDE_MASK); 580 - 581 - /* 582 - * Disable VFP in the hwstate so that we can detect if it gets 583 - * used. 584 - */ 585 - hwstate->fpexc &= ~FPEXC_EN; 586 576 return 0; 587 577 } 588 578 ··· 589 591 unsigned long fpexc; 590 592 int err = 0; 591 593 592 - /* 593 - * If VFP has been used, then disable it to avoid corrupting 594 - * the new thread state. 595 - */ 596 - if (hwstate->fpexc & FPEXC_EN) 597 - vfp_flush_hwstate(thread); 594 + /* Disable VFP to avoid corrupting the new thread state. */ 595 + vfp_flush_hwstate(thread); 598 596 599 597 /* 600 598 * Copy the floating point registers. There can be unused ··· 651 657 unsigned int cpu_arch = cpu_architecture(); 652 658 653 659 if (cpu_arch >= CPU_ARCH_ARMv6) 654 - vfp_enable(NULL); 660 + on_each_cpu(vfp_enable, NULL, 1); 655 661 656 662 /* 657 663 * First check that there is a VFP that we can use. ··· 671 677 printk("no double precision support\n"); 672 678 } else { 673 679 hotcpu_notifier(vfp_hotplug, 0); 674 - 675 - smp_call_function(vfp_enable, NULL, 1); 676 680 677 681 VFP_arch = (vfpsid & FPSID_ARCH_MASK) >> FPSID_ARCH_BIT; /* Extract the architecture version */ 678 682 printk("implementor %02x architecture %d part %02x variant %x rev %x\n",