23 Aug, 2016

1 commit

  • Pull ARC fixes from Vineet Gupta:

    - support for Syscall ABI v4 with upstream gcc 6.x

    - lockdep fix (Daniel Mentz)

    - gdb register clobber (Liav Rehana)

    - couple of missing exports for modules

    - other fixes here and there

    * tag 'arc-4.8-rc4-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
    ARC: export __udivdi3 for modules
    ARC: mm: fix build breakage with STRICT_MM_TYPECHECKS
    ARC: export kmap
    ARC: Support syscall ABI v4
    ARC: use correct offset in pt_regs for saving/restoring user mode r25
    ARC: Elide redundant setup of DMA callbacks
    ARC: Call trace_hardirqs_on() before enabling irqs

    Linus Torvalds
     

20 Aug, 2016

7 commits

  • When building gccgo in userspace, errno.h gets parsed and the go include file
    sysinfo.go is generated.

    Since EREFUSED is defined to the same value as ECONNREFUSED, and ECONNREFUSED
    is defined later on in errno.h, this leads to go complaining that EREFUSED
    isn't defined yet.

    Fix this trivial problem by moving the define of EREFUSED down after
    ECONNREFUSED in errno.h (and clean up the indenting while touching this line).

    Signed-off-by: Helge Deller
    Cc: stable@vger.kernel.org

    Helge Deller
     
  • Commit 54b66800907 (parisc: Add native high-resolution sched_clock()
    implementation) added support to use the CPU-internal cr16 counters as reliable
    clocksource with the help of HAVE_UNSTABLE_SCHED_CLOCK.

    Sadly the commit missed to remove the hack which prevented cr16 to become the
    default clocksource even on SMP systems.

    Signed-off-by: Helge Deller
    Cc: stable@vger.kernel.org # 4.7+

    Helge Deller
     
  • Some module using div_u64() was failing to link because the libgcc 64-bit
    divide assist routine was not being exported for modules

    Reported-by: avinashp@quantenna.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • | CC mm/memory.o
    | In file included from ../mm/memory.c:53:0:
    | ../include/linux/pfn_t.h: In function ‘pfn_t_pte’:
    | ../include/linux/pfn_t.h:78:2: error: conversion to non-scalar type requested
    | return pfn_pte(pfn_t_to_pfn(pfn), pgprot);

    With STRICT_MM_TYPECHECKS pte_t is a struct and the offending code
    forces a cast which ends up shifting a struct and hence the gcc warning.

    Note that in recent past some of the arches (aarch64, s390) made
    STRICT_MM_TYPECHECKS default, but we don't for ARC as this leads to slightly
    worse generated code, given ARC ABI definition of returning structs
    (which pte_t would become)

    Quoting from ARC ABI...

    "Results of type struct are returned in a caller-supplied temporary
    variable whose address is passed in r0.
    For such functions, the arguments are shifted so that they are
    passed in r1 and up."

    So
    - struct to be returned would be allocated on stack requiring extra
    code at call sites
    - callee updates stack memory to facilitate the return (vs. simple
    MOV into return reg r0)

    Hence STRICT_MM_TYPECHECKS is not enabled by default for ARC

    Cc: #4.4+
    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • | MODPOST 7 modules
    | ERROR: "kmap" [fs/ext2/ext2.ko] undefined!
    | ../scripts/Makefile.modpost:91: recipe for target '__modpost' failed

    Cc:
    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • The syscall ABI includes the gcc functional calling ABI since a syscall
    implies userland caller and kernel callee.

    The current gcc ABI (v3) for ARCv2 ISA required 64-bit data be passed in
    even-odd register pairs, (potentially punching reg holes when passing such
    values as args). This was partly driven by the fact that the double-word
    LDD/STD instructions in ARCv2 expect the register alignment and thus gcc
    forcing this avoids extra MOV at the cost of a few unused register (which we
    have plenty anyways).

    This however was rejected as part of upstreaming gcc port to HS. So the new
    ABI v4 doesn't enforce the even-odd reg restriction.

    Do note that for ARCompact ISA builds v3 and v4 are practically the same in
    terms of gcc code generation.

    In terms of change management, we infer the new ABI if gcc 6.x onwards
    is used for building the kernel.

    This also needs a stable backport to enable older kernels to work with
    new tools/user-space

    Cc:
    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • User mode callee regs are explicitly collected before signal delivery or
    breakpoint trap. r25 is special for kernel as it serves as task pointer,
    so user mode value is clobbered very early. It is saved in pt_regs where
    generally only scratch (aka caller saved) regs are saved.

    The code to access the corresponding pt_regs location had a subtle bug as
    it was using load/store with scaling of offset, whereas the offset was already
    byte wise correct. So fix this by replacing LD.AS with a standard LD

    Cc:
    Signed-off-by: Liav Rehana
    Reviewed-by: Alexey Brodkin
    [vgupta: rewrote title and commit log]
    Signed-off-by: Vineet Gupta

    Liav Rehana
     

19 Aug, 2016

5 commits

  • Pull DeviceTree fixes from Rob Herring:

    - a couple of DT node ref counting fixes

    - fix __unflatten_device_tree for PPC PCI hotplug case

    - rework marking irq controllers as OF_POPULATED in cases where real
    driver is used.

    - disable of_platform_default_populate_init on PPC. The change in
    initcall order causes problems which need to be sorted out later.

    * tag 'devicetree-fixes-for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux:
    of: fix reference counting in of_graph_get_endpoint_by_regs
    of/platform: disable the of_platform_default_populate_init() for all the ppc boards
    ARM: imx6: mark GPC node as not populated after irq init to probe pm domain driver
    of/irq: Mark interrupt controllers as populated before initialisation
    drivers/of: Validate device node in __unflatten_device_tree()
    of: Delete an unnecessary check before the function call "of_node_put"

    Linus Torvalds
     
  • Pull x86 fixes from Ingo Molnar:
    "An initrd microcode loading fix, and an SMP bootup topology setup fix
    to resolve crashes on SGI/UV systems if the BIOS is configured in a
    certain way"

    * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/smp: Fix __max_logical_packages value setup
    x86/microcode/AMD: Fix initrd loading with CONFIG_RANDOMIZE_MEMORY=y

    Linus Torvalds
     
  • Pull arm64 fixes from Catalin Marinas:

    - Avoid a literal load with the MMU off on the CPU resume path
    (potential inconsistency between cache and RAM)

    - Build error with CONFIG_ACPI=n fixed

    - Compiler warning in the arch/arm64/mm/dump.c code fixed

    * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
    arm64: Fix shift warning in arch/arm64/mm/dump.c
    arm64: kernel: avoid literal load of virtual address with MMU off
    arm64: Fix NUMA build error when !CONFIG_ACPI

    Linus Torvalds
     
  • Pull ARM fixes from Russell King:
    "Only three fixes this time:

    - Emil found an overflow problem with the memory layout sanity check.

    - Ard Biesheuvel noticed that late-allocated page tables (for EFI)
    weren't being properly constructed.

    - Guenter Roeck reported a problem found on qemu caused by the recent
    addr_limit changes"

    * 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm:
    ARM: fix address limit restoration for undefined instructions
    ARM: 8591/1: mm: use fully constructed struct pages for EFI pgd allocations
    ARM: 8590/1: sanity_check_meminfo(): avoid overflow on vmalloc_limit

    Linus Torvalds
     
  • Pull power management fixes from Rafael Wysocki:
    "More hibernation-related material: one fix for a recent regression in
    the core, one small cleanup of the x86-64 resume code and a
    documentation update.

    Specifics:

    - Fix a hibernate core regression resulting from uncovering a latent
    bug in its implementation of memory bitmaps by a recent commit
    (James Morse).

    - Use __pa() to compute a physical address in the x86-64 code
    finalizing resume from hibernation (Rafael Wysocki).

    - Update power management documentation related to system sleep
    states to remove outdated information from it and to add a
    description of a recently introduced hibernation debug feature to
    it (Rafael Wysocki)"

    * tag 'pm-4.8-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
    PM / hibernate: Fix rtree_next_node() to avoid walking off list ends
    x86/power/64: Use __pa() for physical address computation
    PM / sleep: Update some system sleep documentation

    Linus Torvalds
     

18 Aug, 2016

6 commits

  • When building with 48-bit VAs and 16K page configuration, it's possible
    to get the following warning when building the arm64 page table dumping
    code:

    arch/arm64/mm/dump.c: In function ‘walk_pud’:
    arch/arm64/mm/dump.c:274:102: warning: right shift count >= width of type [-Wshift-count-overflow]

    This is because pud_offset(pgd, 0) performs a shift to the right by 36
    while the value 0 has the type 'int' by default, therefore 32-bit.

    This patch modifies all the p*_offset() uses in arch/arm64/mm/dump.c to
    use 0UL for the address argument.

    Acked-by: Mark Rutland
    Signed-off-by: Catalin Marinas

    Catalin Marinas
     
  • Frank reported kernel panic when he disabled several cores in BIOS
    via following option:

    Core Disable Bitmap(Hex) [0]

    with number 0xFFE, which leaves 16 CPUs in system (out of 48).

    The kernel panic below goes along with following messages:

    smpboot: Max logical packages: 2^M
    smpboot: APIC(0) Converting physical 0 to logical package 0^M
    smpboot: APIC(20) Converting physical 1 to logical package 1^M
    smpboot: APIC(40) Package 2 exceeds logical package map^M
    smpboot: CPU 8 APICId 40 disabled^M
    smpboot: APIC(60) Package 3 exceeds logical package map^M
    smpboot: CPU 12 APICId 60 disabled^M
    ...
    general protection fault: 0000 [#1] SMP^M
    Modules linked in:^M
    CPU: 15 PID: 1 Comm: swapper/0 Not tainted 4.7.0-rc5+ #1^M
    Hardware name: SGI UV300/UV300, BIOS SGI UV 300 series BIOS 05/25/2016^M
    task: ffff8801673e0000 ti: ffff8801673ac000 task.ti: ffff8801673ac000^M
    RIP: 0010:[] [] uncore_change_context+0xd4/0x180^M
    ...
    [] uncore_event_init_cpu+0x6c/0x70^M
    [] intel_uncore_init+0x1c2/0x2dd^M
    [] ? uncore_cpu_setup+0x17/0x17^M
    [] do_one_initcall+0x50/0x190^M
    [] ? parse_args+0x293/0x480^M
    [] kernel_init_freeable+0x1a5/0x249^M
    [] ? set_debug_rodata+0x12/0x12^M
    [] kernel_init+0xe/0x110^M
    [] ret_from_fork+0x1f/0x40^M
    [] ? rest_init+0x80/0x80^M

    The reason for the panic is wrong value of __max_logical_packages,
    which lets logical_package_map uninitialized and the uncore code
    relying on this map being properly initialized (maybe we should
    add some safety checks there as well).

    The __max_logical_packages is computed as:

    DIV_ROUND_UP(total_cpus, ncpus);
    - ncpus being number of cores

    With above BIOS setup we get total_cpus == 16 which set
    __max_logical_packages to 2 (ncpus is 12).

    Once topology_update_package_map processes CPU with logical
    pkg over 2 we display above messages and fail to initialize
    the physical_to_logical_pkg map, which makes the uncore code
    crash.

    The fix is to remove logical_package_map bitmap completely
    and keep and update the logical_packages number instead.

    After we enumerate all the present CPUs, we check if the
    enumerated logical packages count is within its computed
    maximum from BIOS data.

    If it's not the case, we set this maximum to the new enumerated
    value and freeze any new addition of logical packages.

    The freeze is because lot of init code like uncore/rapl/cqm
    depends on having maximum logical package value set to allocate
    their data, so we can't change it later on.

    Prarit Bhargava tested the patch and confirms that it solves
    the problem:

    From dmidecode:
    Core Count: 24
    Core Enabled: 24
    Thread Count: 48

    Orig kernel boot log:

    [ 0.464981] smpboot: Max logical packages: 19
    [ 0.469861] smpboot: APIC(0) Converting physical 0 to logical package 0
    [ 0.477261] smpboot: APIC(40) Converting physical 1 to logical package 1
    [ 0.484760] smpboot: APIC(80) Converting physical 2 to logical package 2
    [ 0.492258] smpboot: APIC(c0) Converting physical 3 to logical package 3

    1. nr_cpus=8, should stop enumerating in package 0:

    [ 0.533664] smpboot: APIC(0) Converting physical 0 to logical package 0
    [ 0.539596] smpboot: Max logical packages: 19

    2. max_cpus=8, should still enumerate all packages:

    [ 0.526494] smpboot: APIC(0) Converting physical 0 to logical package 0
    [ 0.532428] smpboot: APIC(40) Converting physical 1 to logical package 1
    [ 0.538456] smpboot: APIC(80) Converting physical 2 to logical package 2
    [ 0.544486] smpboot: APIC(c0) Converting physical 3 to logical package 3
    [ 0.550524] smpboot: Max logical packages: 19

    3. nr_cpus=49 ( 2 socket + 1 core on 3rd socket), should stop enumerating in
    package 2:

    [ 0.521378] smpboot: APIC(0) Converting physical 0 to logical package 0
    [ 0.527314] smpboot: APIC(40) Converting physical 1 to logical package 1
    [ 0.533345] smpboot: APIC(80) Converting physical 2 to logical package 2
    [ 0.539368] smpboot: Max logical packages: 19

    4. maxcpus=49, should still enumerate all packages:

    [ 0.525591] smpboot: APIC(0) Converting physical 0 to logical package 0
    [ 0.531525] smpboot: APIC(40) Converting physical 1 to logical package 1
    [ 0.537547] smpboot: APIC(80) Converting physical 2 to logical package 2
    [ 0.543579] smpboot: APIC(c0) Converting physical 3 to logical package 3
    [ 0.549624] smpboot: Max logical packages: 19

    5. kdump (nr_cpus=1) works as well.

    Reported-by: Frank Ramsay
    Tested-by: Prarit Bhargava
    Signed-off-by: Jiri Olsa
    Reviewed-by: Prarit Bhargava
    Acked-by: Peter Zijlstra
    Cc: Linus Torvalds
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/20160815101700.GA30090@krava
    Signed-off-by: Ingo Molnar

    Jiri Olsa
     
  • Similar to:

    efaad554b4ff ("x86/microcode/intel: Fix initrd loading with CONFIG_RANDOMIZE_MEMORY=y")

    ... fix microcode loading from the initrd on AMD by adding the
    randomization offset to the microcode patch container within the initrd.

    Reported-and-tested-by: Brian Gerst
    Signed-off-by: Borislav Petkov
    Cc: Andy Lutomirski
    Cc: Borislav Petkov
    Cc: Denys Vlasenko
    Cc: H. Peter Anvin
    Cc: Josh Poimboeuf
    Cc: Kees Cook
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: linux-tip-commits@vger.kernel.org
    Link: http://lkml.kernel.org/r/20160817113314.GA19221@nazgul.tnic
    Signed-off-by: Ingo Molnar

    Borislav Petkov
     
  • * pm-sleep:
    PM / hibernate: Fix rtree_next_node() to avoid walking off list ends
    x86/power/64: Use __pa() for physical address computation
    PM / sleep: Update some system sleep documentation

    Rafael J. Wysocki
     
  • Literal loads of virtual addresses are subject to runtime relocation when
    CONFIG_RELOCATABLE=y, and given that the relocation routines run with the
    MMU and caches enabled, literal loads of relocated values performed with
    the MMU off are not guaranteed to return the latest value unless the
    memory covering the literal is cleaned to the PoC explicitly.

    So defer the literal load until after the MMU has been enabled, just like
    we do for primary_switch() and secondary_switch() in head.S.

    Fixes: 1e48ef7fcc37 ("arm64: add support for building vmlinux as a relocatable PIE binary")
    Cc: # 4.6+
    Signed-off-by: Ard Biesheuvel
    Acked-by: Mark Rutland
    Signed-off-by: Catalin Marinas

    Ard Biesheuvel
     
  • Since asm/acpi.h is only included by linux/acpi.h when CONFIG_ACPI is
    enabled, disabling the latter leads to the following build error on
    arm64:

    arch/arm64/mm/numa.c: In function ‘arm64_numa_init’:
    arch/arm64/mm/numa.c:395:24: error: ‘arm64_acpi_numa_init’ undeclared (first use in this function)
    if (!acpi_disabled && !numa_init(arm64_acpi_numa_init))

    This patch include the asm/acpi.h explicitly in arch/arm64/mm/numa.c for
    the arm64_acpi_numa_init() definition.

    Fixes: d8b47fca8c23 ("arm64, ACPI, NUMA: NUMA support based on SRAT and SLIT")
    Reviewed-by: Hanjun Guo
    Signed-off-by: Catalin Marinas

    Catalin Marinas
     

17 Aug, 2016

1 commit

  • Pull s390 fixes from Martin Schwidefsky:
    "A couple of bug fixes, minor cleanup and a change to the default
    config"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
    s390/dasd: fix failing CUIR assignment under LPAR
    s390/pageattr: handle numpages parameter correctly
    s390/dasd: fix hanging device after clear subchannel
    s390/qdio: avoid reschedule of outbound tasklet once killed
    s390/qdio: remove checks for ccw device internal state
    s390/qdio: fix double return code evaluation
    s390/qdio: get rid of spin_lock_irqsave usage
    s390/cio: remove subchannel_id from ccw_device_private
    s390/qdio: obtain subchannel_id via ccw_device_get_schid()
    s390/cio: stop using subchannel_id from ccw_device_private
    s390/config: make the vector optimized crc function builtin
    s390/lib: fix memcmp and strstr
    s390/crc32-vx: Fix checksum calculation for small sizes
    s390: clarify compressed image code path

    Linus Torvalds
     

16 Aug, 2016

1 commit


15 Aug, 2016

1 commit


14 Aug, 2016

3 commits

  • …/groeck/linux-staging

    Pull h8300 and unicore32 architecture fixes from Guenter Roeck:
    "Two patches to fix h8300 and unicore32 builds.

    unicore32 builds have been broken since v4.6. The fix has been
    available in -next since March of this year.

    h8300 builds have been broken since the last commit window. The fix
    has been available in -next since June of this year"

    * tag 'fixes-for-linus-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
    h8300: Add missing include file to asm/io.h
    unicore32: mm: Add missing parameter to arch_vma_access_permitted

    Linus Torvalds
     
  • Pull arm64 fixes from Catalin Marinas:

    - support for nr_cpus= command line argument (maxcpus was previously
    changed to allow secondary CPUs to be hot-plugged)

    - ARM PMU interrupt handling fix

    - fix potential TLB conflict in the hibernate code

    - improved handling of EL1 instruction aborts (better error reporting)

    - removal of useless jprobes code for stack saving/restoring

    - defconfig updates

    * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
    arm64: defconfig: enable CONFIG_LOCALVERSION_AUTO
    arm64: defconfig: add options for virtualization and containers
    arm64: hibernate: handle allocation failures
    arm64: hibernate: avoid potential TLB conflict
    arm64: Handle el1 synchronous instruction aborts cleanly
    arm64: Remove stack duplicating code from jprobes
    drivers/perf: arm-pmu: Fix handling of SPI lacking "interrupt-affinity" property
    drivers/perf: arm-pmu: convert arm_pmu_mutex to spinlock
    arm64: Support hard limit of cpu count by nr_cpus

    Linus Torvalds
     
  • Pull KVM fixes from Radim Krčmář:
    "KVM:
    - lock kvm_device list to prevent corruption on device creation.

    PPC:
    - split debugfs initialization from creation of the xics device to
    unlock the newly taken kvm lock earlier.

    s390:
    - prevent userspace from triggering two WARN_ON_ONCE.

    MIPS:
    - fix several issues in the management of TLB faults (Cc: stable)"

    * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
    MIPS: KVM: Propagate kseg0/mapped tlb fault errors
    MIPS: KVM: Fix gfn range check in kseg0 tlb faults
    MIPS: KVM: Add missing gfn range check
    MIPS: KVM: Fix mapped fault broken commpage handling
    KVM: Protect device ops->create and list_add with kvm->lock
    KVM: PPC: Move xics_debugfs_init out of create
    KVM: s390: reset KVM_REQ_MMU_RELOAD if mapping the prefix failed
    KVM: s390: set the prefix initially properly

    Linus Torvalds
     

13 Aug, 2016

14 commits

  • h8300 builds fail with

    arch/h8300/include/asm/io.h:9:15: error: unknown type name ‘u8’
    arch/h8300/include/asm/io.h:15:15: error: unknown type name ‘u16’
    arch/h8300/include/asm/io.h:21:15: error: unknown type name ‘u32’

    and many related errors.

    Fixes: 23c82d41bdf4 ("kexec-allow-architectures-to-override-boot-mapping-fix")
    Cc: Andrew Morton
    Signed-off-by: Guenter Roeck

    Guenter Roeck
     
  • unicore32 fails to compile with the following errors.

    mm/memory.c: In function ‘__handle_mm_fault’:
    mm/memory.c:3381: error:
    too many arguments to function ‘arch_vma_access_permitted’
    mm/gup.c: In function ‘check_vma_flags’:
    mm/gup.c:456: error:
    too many arguments to function ‘arch_vma_access_permitted’
    mm/gup.c: In function ‘vma_permits_fault’:
    mm/gup.c:640: error:
    too many arguments to function ‘arch_vma_access_permitted’

    Fixes: d61172b4b695b ("mm/core, x86/mm/pkeys: Differentiate instruction fetches")
    Cc: Dave Hansen
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Signed-off-by: Guenter Roeck
    Acked-by: Guan Xuetao

    Guenter Roeck
     
  • Pull power management fixes from Rafael Wysocki:
    "Two hibernation fixes allowing it to work with the recently added
    randomization of the kernel identity mapping base on x86-64 and one
    cpufreq driver regression fix.

    Specifics:

    - Fix the x86 identity mapping creation helpers to avoid the
    assumption that the base address of the mapping will always be
    aligned at the PGD level, as it may be aligned at the PUD level if
    address space randomization is enabled (Rafael Wysocki).

    - Fix the hibernation core to avoid executing tracing functions
    before restoring the processor state completely during resume
    (Thomas Garnier).

    - Fix a recently introduced regression in the powernv cpufreq driver
    that causes it to crash due to an out-of-bounds array access
    (Akshay Adiga)"

    * tag 'pm-4.8-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
    PM / hibernate: Restore processor state before using per-CPU variables
    x86/power/64: Always create temporary identity mapping correctly
    cpufreq: powernv: Fix crash in gpstate_timer_handler()

    Linus Torvalds
     
  • Pull x86 fixes from Ingo Molnar:
    "This is bigger than usual - the reason is partly a pent-up stream of
    fixes after the merge window and partly accidental. The fixes are:

    - five patches to fix a boot failure on Andy Lutomirsky's laptop
    - four SGI UV platform fixes
    - KASAN fix
    - warning fix
    - documentation update
    - swap entry definition fix
    - pkeys fix
    - irq stats fix"

    * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/apic/x2apic, smp/hotplug: Don't use before alloc in x2apic_cluster_probe()
    x86/efi: Allocate a trampoline if needed in efi_free_boot_services()
    x86/boot: Rework reserve_real_mode() to allow multiple tries
    x86/boot: Defer setup_real_mode() to early_initcall time
    x86/boot: Synchronize trampoline_cr4_features and mmu_cr4_features directly
    x86/boot: Run reserve_bios_regions() after we initialize the memory map
    x86/irq: Do not substract irq_tlb_count from irq_call_count
    x86/mm: Fix swap entry comment and macro
    x86/mm/kaslr: Fix -Wformat-security warning
    x86/mm/pkeys: Fix compact mode by removing protection keys' XSAVE buffer manipulation
    x86/build: Reduce the W=1 warnings noise when compiling x86 syscall tables
    x86/platform/UV: Fix kernel panic running RHEL kdump kernel on UV systems
    x86/platform/UV: Fix problem with UV4 BIOS providing incorrect PXM values
    x86/platform/UV: Fix bug with iounmap() of the UV4 EFI System Table causing a crash
    x86/platform/UV: Fix problem with UV4 Socket IDs not being contiguous
    x86/entry: Clarify the RF saving/restoring situation with SYSCALL/SYSRET
    x86/mm: Disable preemption during CR3 read+write
    x86/mm/KASLR: Increase BRK pages for KASLR memory randomization
    x86/mm/KASLR: Fix physical memory calculation on KASLR memory randomization
    x86, kasan, ftrace: Put APIC interrupt handlers into .irqentry.text

    Linus Torvalds
     
  • Pull timer fixes from Ingo Molnar:
    "Misc fixes: a /dev/rtc regression fix, two APIC timer period
    calibration fixes, an ARM clocksource driver fix and a NOHZ
    power use regression fix"

    * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/hpet: Fix /dev/rtc breakage caused by RTC cleanup
    x86/timers/apic: Inform TSC deadline clockevent device about recalibration
    x86/timers/apic: Fix imprecise timer interrupts by eliminating TSC clockevents frequency roundoff error
    timers: Fix get_next_timer_interrupt() computation
    clocksource/arm_arch_timer: Force per-CPU interrupt to be level-triggered

    Linus Torvalds
     
  • * pm-sleep:
    PM / hibernate: Restore processor state before using per-CPU variables
    x86/power/64: Always create temporary identity mapping correctly

    * pm-cpufreq:
    cpufreq: powernv: Fix crash in gpstate_timer_handler()

    Rafael J. Wysocki
     
  • Pull perf fixes from Ingo Molnar:
    "Mostly tooling fixes, plus two uncore-PMU fixes, an uprobes fix, a
    perf-cgroups fix and an AUX events fix"

    * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    perf/x86/intel/uncore: Add enable_box for client MSR uncore
    perf/x86/intel/uncore: Fix uncore num_counters
    uprobes/x86: Fix RIP-relative handling of EVEX-encoded instructions
    perf/core: Set cgroup in CPU contexts for new cgroup events
    perf/core: Fix sideband list-iteration vs. event ordering NULL pointer deference crash
    perf probe ppc64le: Fix probe location when using DWARF
    perf probe: Add function to post process kernel trace events
    tools: Sync cpufeatures headers with the kernel
    toops: Sync tools/include/uapi/linux/bpf.h with the kernel
    tools: Sync cpufeatures.h and vmx.h with the kernel
    perf probe: Support signedness casting
    perf stat: Avoid skew when reading events
    perf probe: Fix module name matching
    perf probe: Adjust map->reloc offset when finding kernel symbol from map
    perf hists: Trim libtraceevent trace_seq buffers
    perf script: Add 'bpf-output' field to usage message

    Linus Torvalds
     
  • Pull EFI fixes from Ingo Molnar:
    "A fix for EFI capsules and an SGI UV platform fix"

    * 'efi-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    efi/capsule: Allocate whole capsule into virtual memory
    x86/platform/uv: Skip UV runtime services mapping in the efi_runtime_disabled case

    Linus Torvalds
     
  • Pull powerpc fixes from Michael Ellerman:
    "Some powerpc fixes for 4.8:

    Misc:
    - powerpc/vdso: Fix build rules to rebuild vdsos correctly from Nicholas Piggin
    - powerpc/ptrace: Fix coredump since ptrace TM changes from Cyril Bur
    - powerpc/32: Fix csum_partial_copy_generic() from Christophe Leroy
    - cxl: Set psl_fir_cntl to production environment value from Frederic Barrat
    - powerpc/eeh: Switch to conventional PCI address output in EEH log from Guilherme G. Piccoli
    - cxl: Use fixed width predefined types in data structure. from Philippe Bergheaud
    - powerpc/vdso: Add missing include file from Guenter Roeck
    - powerpc: Fix unused function warning 'lmb_to_memblock' from Alastair D'Silva
    - powerpc/powernv/ioda: Fix TCE invalidate to work in real mode again from Alexey Kardashevskiy
    - powerpc/cell: Add missing error code in spufs_mkgang() from Dan Carpenter
    - crypto: crc32c-vpmsum - Convert to CPU feature based module autoloading from Anton Blanchard
    - powerpc/pasemi: Fix coherent_dma_mask for dma engine from Darren Stevens

    Benjamin Herrenschmidt:
    - powerpc/32: Fix crash during static key init
    - powerpc: Update obsolete comment in setup_32.c about early_init()
    - powerpc: Print the kernel load address at the end of prom_init()
    - powerpc/pnv/pci: Fix incorrect PE reservation attempt on some 64-bit BARs
    - powerpc/xics: Properly set Edge/Level type and enable resend

    Mahesh Salgaonkar:
    - powerpc/book3s: Fix MCE console messages for unrecoverable MCE.
    - powerpc/powernv: Fix MCE handler to avoid trashing CR0/CR1 registers.
    - powerpc/powernv: Move IDLE_STATE_ENTER_SEQ macro to cpuidle.h
    - powerpc/powernv: Load correct TOC pointer while waking up from winkle.

    Andrew Donnellan:
    - cxl: Fix sparse warnings
    - cxl: Fix NULL dereference in cxl_context_init() on PowerVM guests

    Michael Ellerman:
    - selftests/powerpc: Specify we expect to build with std=gnu99
    - powerpc/Makefile: Use cflags-y/aflags-y for setting endian options
    - powerpc/pci: Fix endian bug in fixed PHB numbering"

    * tag 'powerpc-4.8-3' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (26 commits)
    selftests/powerpc: Specify we expect to build with std=gnu99
    powerpc/vdso: Fix build rules to rebuild vdsos correctly
    powerpc/Makefile: Use cflags-y/aflags-y for setting endian options
    powerpc/32: Fix crash during static key init
    powerpc: Update obsolete comment in setup_32.c about early_init()
    powerpc: Print the kernel load address at the end of prom_init()
    powerpc/ptrace: Fix coredump since ptrace TM changes
    powerpc/32: Fix csum_partial_copy_generic()
    cxl: Set psl_fir_cntl to production environment value
    powerpc/pnv/pci: Fix incorrect PE reservation attempt on some 64-bit BARs
    powerpc/book3s: Fix MCE console messages for unrecoverable MCE.
    powerpc/pci: Fix endian bug in fixed PHB numbering
    powerpc/eeh: Switch to conventional PCI address output in EEH log
    cxl: Fix sparse warnings
    cxl: Fix NULL dereference in cxl_context_init() on PowerVM guests
    cxl: Use fixed width predefined types in data structure.
    powerpc/vdso: Add missing include file
    powerpc: Fix unused function warning 'lmb_to_memblock'
    powerpc/powernv: Fix MCE handler to avoid trashing CR0/CR1 registers.
    powerpc/powernv: Move IDLE_STATE_ENTER_SEQ macro to cpuidle.h
    ...

    Linus Torvalds
     
  • When CONFIG_LOCALVERSION_AUTO is disabled, the version string is
    just a tag name (or with a '+' appended if HEAD is not a tagged
    commit).

    During the development (and especially when git-bisecting), longer
    version string would be helpful to identify the commit we are running.

    This is a default y option, so drop the unset to enable it.

    Signed-off-by: Masahiro Yamada
    Signed-off-by: Catalin Marinas

    Masahiro Yamada
     
  • Enable options commonly needed by popular virtualization
    and container applications. Use modules when possible to
    avoid too much overhead for users not interested.

    - add namespace and cgroup options needed
    - add seccomp - optional, but enhances Qemu etc
    - bridge, nat, veth, macvtap and multicast for routing
    guests and containers
    - btfrs and overlayfs modules for container COW backends
    - while near it, make fuse a module instead of built-in.

    Generated with make saveconfig and dropping unrelated spurious
    change hunks while commiting. bloat-o-meter old-vmlinux vmlinux:

    add/remove: 905/390 grow/shrink: 767/229 up/down: 183513/-94861 (88652)
    ....
    Total: Before=10515408, After=10604060, chg +0.84%

    Signed-off-by: Riku Voipio
    Signed-off-by: Catalin Marinas

    Riku Voipio
     
  • In create_safe_exec_page(), we create a copy of the hibernate exit text,
    along with some page tables to map this via TTBR0. We then install the
    new tables in TTBR0.

    In swsusp_arch_resume() we call create_safe_exec_page() before trying a
    number of operations which may fail (e.g. copying the linear map page
    tables). If these fail, we bail out of swsusp_arch_resume() and return
    an error code, but leave TTBR0 as-is. Subsequently, the core hibernate
    code will call free_basic_memory_bitmaps(), which will free all of the
    memory allocations we made, including the page tables installed in
    TTBR0.

    Thus, we may have TTBR0 pointing at dangling freed memory for some
    period of time. If the hibernate attempt was triggered by a user
    requesting a hibernate test via the reboot syscall, we may return to
    userspace with the clobbered TTBR0 value.

    Avoid these issues by reorganising swsusp_arch_resume() such that we
    have no failure paths after create_safe_exec_page(). We also add a check
    that the zero page allocation succeeded, matching what we have for other
    allocations.

    Fixes: 82869ac57b5d ("arm64: kernel: Add support for hibernate/suspend-to-disk")
    Signed-off-by: Mark Rutland
    Acked-by: James Morse
    Cc: Lorenzo Pieralisi
    Cc: Will Deacon
    Cc: # 4.7+
    Signed-off-by: Catalin Marinas

    Mark Rutland
     
  • In create_safe_exec_page we install a set of global mappings in TTBR0,
    then subsequently invalidate TLBs. While TTBR0 points at the zero page,
    and the TLBs should be free of stale global entries, we may have stale
    ASID-tagged entries (e.g. from the EFI runtime services mappings) for
    the same VAs. Per the ARM ARM these ASID-tagged entries may conflict
    with newly-allocated global entries, and we must follow a
    Break-Before-Make approach to avoid issues resulting from this.

    This patch reworks create_safe_exec_page to invalidate TLBs while the
    zero page is still in place, ensuring that there are no potential
    conflicts when the new TTBR0 value is installed. As a single CPU is
    online while this code executes, we do not need to perform broadcast TLB
    maintenance, and can call local_flush_tlb_all(), which also subsumes
    some barriers. The remaining assembly is converted to use write_sysreg()
    and isb().

    Other than this, we safely manipulate TTBRs in the hibernate dance. The
    code we install as part of the new TTBR0 mapping (the hibernated
    kernel's swsusp_arch_suspend_exit) installs a zero page into TTBR1,
    invalidates TLBs, then installs its preferred value. Upon being restored
    to the middle of swsusp_arch_suspend, the new image will call
    __cpu_suspend_exit, which will call cpu_uninstall_idmap, installing the
    zero page in TTBR0 and invalidating all TLB entries.

    Fixes: 82869ac57b5d ("arm64: kernel: Add support for hibernate/suspend-to-disk")
    Signed-off-by: Mark Rutland
    Acked-by: James Morse
    Tested-by: James Morse
    Cc: Lorenzo Pieralisi
    Cc: Will Deacon
    Cc: # 4.7+
    Signed-off-by: Catalin Marinas

    Mark Rutland
     
  • Executing from a non-executable area gives an ugly message:

    lkdtm: Performing direct entry EXEC_RODATA
    lkdtm: attempting ok execution at ffff0000084c0e08
    lkdtm: attempting bad execution at ffff000008880700
    Bad mode in Synchronous Abort handler detected on CPU2, code 0x8400000e -- IABT (current EL)
    CPU: 2 PID: 998 Comm: sh Not tainted 4.7.0-rc2+ #13
    Hardware name: linux,dummy-virt (DT)
    task: ffff800077e35780 ti: ffff800077970000 task.ti: ffff800077970000
    PC is at lkdtm_rodata_do_nothing+0x0/0x8
    LR is at execute_location+0x74/0x88

    The 'IABT (current EL)' indicates the error but it's a bit cryptic
    without knowledge of the ARM ARM. There is also no indication of the
    specific address which triggered the fault. The increase in kernel
    page permissions makes hitting this case more likely as well.
    Handling the case in the vectors gives a much more familiar looking
    error message:

    lkdtm: Performing direct entry EXEC_RODATA
    lkdtm: attempting ok execution at ffff0000084c0840
    lkdtm: attempting bad execution at ffff000008880680
    Unable to handle kernel paging request at virtual address ffff000008880680
    pgd = ffff8000089b2000
    [ffff000008880680] *pgd=00000000489b4003, *pud=0000000048904003, *pmd=0000000000000000
    Internal error: Oops: 8400000e [#1] PREEMPT SMP
    Modules linked in:
    CPU: 1 PID: 997 Comm: sh Not tainted 4.7.0-rc1+ #24
    Hardware name: linux,dummy-virt (DT)
    task: ffff800077f9f080 ti: ffff800008a1c000 task.ti: ffff800008a1c000
    PC is at lkdtm_rodata_do_nothing+0x0/0x8
    LR is at execute_location+0x74/0x88

    Acked-by: Mark Rutland
    Signed-off-by: Laura Abbott
    Signed-off-by: Catalin Marinas

    Laura Abbott
     

12 Aug, 2016

1 commit