16 Oct, 2016

1 commit

  • Pull MIPS updates from Ralf Baechle:
    "This is the main MIPS pull request for 4.9:

    MIPS core arch code:
    - traps: 64bit kernels should read CP0_EBase 64bit
    - traps: Convert ebase to KSEG0
    - c-r4k: Drop bc_wback_inv() from icache flush
    - c-r4k: Split user/kernel flush_icache_range()
    - cacheflush: Use __flush_icache_user_range()
    - uprobes: Flush icache via kernel address
    - KVM: Use __local_flush_icache_user_range()
    - c-r4k: Fix flush_icache_range() for EVA
    - Fix -mabi=64 build of vdso.lds
    - VDSO: Drop duplicated -I*/-E* aflags
    - tracing: move insn_has_delay_slot to a shared header
    - tracing: disable uprobe/kprobe on compact branch instructions
    - ptrace: Fix regs_return_value for kernel context
    - Squash lines for simple wrapper functions
    - Move identification of VP(E) into proc.c from smp-mt.c
    - Add definitions of SYNC barrierstype values
    - traps: Ensure full EBase is written
    - tlb-r4k: If there are wired entries, don't use TLBINVF
    - Sanitise coherentio semantics
    - dma-default: Don't check hw_coherentio if device is non-coherent
    - Support per-device DMA coherence
    - Adjust MIPS64 CAC_BASE to reflect Config.K0
    - Support generating Flattened Image Trees (.itb)
    - generic: Introduce generic DT-based board support
    - generic: Convert SEAD-3 to a generic board
    - Enable hardened usercopy
    - Don't specify STACKPROTECTOR in defconfigs

    Octeon:
    - Delete dead code and files across the platform.
    - Change to use all memory into use by default.
    - Rename upper case variables in setup code to lowercase.
    - Delete legacy hack for broken bootloaders.
    - Leave maintaining the link state to the actual ethernet/PHY drivers.
    - Add DTS for D-Link DSR-500N.
    - Fix PCI interrupt routing on D-Link DSR-500N.

    Pistachio:
    - Remove ANDROID_TIMED_OUTPUT from defconfig

    TX39xx:
    - Move GPIO setup from .mem_setup() to .arch_init()
    - Convert to Common Clock Framework

    TX49xx:
    - Move GPIO setup from .mem_setup() to .arch_init()
    - Convert to Common Clock Framework

    txx9wdt:
    - Add missing clock (un)prepare calls for CCF

    BMIPS:
    - Add PW, GPIO SDHCI and NAND device node names
    - Support APPENDED_DTB
    - Add missing bcm97435svmb to DT_NONE
    - Rename bcm96358nb4ser to bcm6358-neufbox4-sercom
    - Add DT examples for BCM63268, BCM3368 and BCM6362
    - Add support for BCM3368 and BCM6362

    PCI
    - Reduce stack frame usage
    - Use struct list_head lists
    - Support for CONFIG_PCI_DOMAINS_GENERIC
    - Make pcibios_set_cache_line_size an initcall
    - Inline pcibios_assign_all_busses
    - Split pci.c into pci.c & pci-legacy.c
    - Introduce CONFIG_PCI_DRIVERS_LEGACY
    - Support generic drivers

    CPC
    - Convert bare 'unsigned' to 'unsigned int'
    - Avoid lock when MIPS CM >= 3 is present

    GIC:
    - Delete unused file smp-gic.c

    mt7620:
    - Delete unnecessary assignment for the field "owner" from PCI

    BCM63xx:
    - Let clk_disable() return immediately if clk is NULL

    pm-cps:
    - Change FSB workaround to CPU blacklist
    - Update comments on barrier instructions
    - Use MIPS standard lightweight ordering barrier
    - Use MIPS standard completion barrier
    - Remove selection of sync types
    - Add MIPSr6 CPU support
    - Support CM3 changes to Coherence Enable Register

    SMP:
    - Wrap call to mips_cpc_lock_other in mips_cm_lock_other
    - Introduce mechanism for freeing and allocating IPIs

    cpuidle:
    - cpuidle-cps: Enable use with MIPSr6 CPUs.

    SEAD3:
    - Rewrite to use DT and generic kernel feature.

    USB:
    - host: ehci-sead3: Remove SEAD-3 EHCI code

    FBDEV:
    - cobalt_lcdfb: Drop SEAD3 support

    dt-bindings:
    - Document a binding for simple ASCII LCDs

    auxdisplay:
    - img-ascii-lcd: driver for simple ASCII LCD displays

    irqchip i8259:
    - i8259: Add domain before mapping parent irq
    - i8259: Allow platforms to override poll function
    - i8259: Remove unused i8259A_irq_pending

    Malta:
    - Rewrite to use DT

    of/platform:
    - Probe "isa" busses by default

    CM:
    - Print CM error reports upon bus errors

    Module:
    - Migrate exception table users off module.h and onto extable.h
    - Make various drivers explicitly non-modular:
    - Audit and remove any unnecessary uses of module.h

    mailmap:
    - Canonicalize to Qais' current email address.

    Documentation:
    - MIPS supports HAVE_REGS_AND_STACK_ACCESS_API

    Loongson1C:
    - Add CPU support for Loongson1C
    - Add board support
    - Add defconfig
    - Add RTC support for Loongson1C board

    All this except one Documentation fix has sat in linux-next and has
    survived Imagination's automated build test system"

    * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (127 commits)
    Documentation: MIPS supports HAVE_REGS_AND_STACK_ACCESS_API
    MIPS: ptrace: Fix regs_return_value for kernel context
    MIPS: VDSO: Drop duplicated -I*/-E* aflags
    MIPS: Fix -mabi=64 build of vdso.lds
    MIPS: Enable hardened usercopy
    MIPS: generic: Convert SEAD-3 to a generic board
    MIPS: generic: Introduce generic DT-based board support
    MIPS: Support generating Flattened Image Trees (.itb)
    MIPS: Adjust MIPS64 CAC_BASE to reflect Config.K0
    MIPS: Print CM error reports upon bus errors
    MIPS: Support per-device DMA coherence
    MIPS: dma-default: Don't check hw_coherentio if device is non-coherent
    MIPS: Sanitise coherentio semantics
    MIPS: PCI: Support generic drivers
    MIPS: PCI: Introduce CONFIG_PCI_DRIVERS_LEGACY
    MIPS: PCI: Split pci.c into pci.c & pci-legacy.c
    MIPS: PCI: Inline pcibios_assign_all_busses
    MIPS: PCI: Make pcibios_set_cache_line_size an initcall
    MIPS: PCI: Support for CONFIG_PCI_DOMAINS_GENERIC
    MIPS: PCI: Use struct list_head lists
    ...

    Linus Torvalds
     

08 Oct, 2016

1 commit

  • When doing an nmi backtrace of many cores, most of which are idle, the
    output is a little overwhelming and very uninformative. Suppress
    messages for cpus that are idling when they are interrupted and just
    emit one line, "NMI backtrace for N skipped: idling at pc 0xNNN".

    We do this by grouping all the cpuidle code together into a new
    .cpuidle.text section, and then checking the address of the interrupted
    PC to see if it lies within that section.

    This commit suitably tags x86 and tile idle routines, and only adds in
    the minimal framework for other architectures.

    Link: http://lkml.kernel.org/r/1472487169-14923-5-git-send-email-cmetcalf@mellanox.com
    Signed-off-by: Chris Metcalf
    Acked-by: Peter Zijlstra (Intel)
    Tested-by: Peter Zijlstra (Intel)
    Tested-by: Daniel Thompson [arm]
    Tested-by: Petr Mladek
    Cc: Aaron Tomlin
    Cc: Peter Zijlstra (Intel)
    Cc: "Rafael J. Wysocki"
    Cc: Russell King
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chris Metcalf
     

04 Oct, 2016

2 commits

  • This patch enables the MIPS CPS driver for MIPSr6 CPUs.

    Signed-off-by: Matt Redfearn
    Reviewed-by: Paul Burton
    Reviewed-by: Daniel Lezcano
    Cc: Rafael J. Wysocki
    Cc: linux-mips@linux-mips.org
    Cc: linux-pm@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14228/
    Signed-off-by: Ralf Baechle

    Matt Redfearn
     
  • Pull CPU hotplug updates from Thomas Gleixner:
    "Yet another batch of cpu hotplug core updates and conversions:

    - Provide core infrastructure for multi instance drivers so the
    drivers do not have to keep custom lists.

    - Convert custom lists to the new infrastructure. The block-mq custom
    list conversion comes through the block tree and makes the diffstat
    tip over to more lines removed than added.

    - Handle unbalanced hotplug enable/disable calls more gracefully.

    - Remove the obsolete CPU_STARTING/DYING notifier support.

    - Convert another batch of notifier users.

    The relayfs changes which conflicted with the conversion have been
    shipped to me by Andrew.

    The remaining lot is targeted for 4.10 so that we finally can remove
    the rest of the notifiers"

    * 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (46 commits)
    cpufreq: Fix up conversion to hotplug state machine
    blk/mq: Reserve hotplug states for block multiqueue
    x86/apic/uv: Convert to hotplug state machine
    s390/mm/pfault: Convert to hotplug state machine
    mips/loongson/smp: Convert to hotplug state machine
    mips/octeon/smp: Convert to hotplug state machine
    fault-injection/cpu: Convert to hotplug state machine
    padata: Convert to hotplug state machine
    cpufreq: Convert to hotplug state machine
    ACPI/processor: Convert to hotplug state machine
    virtio scsi: Convert to hotplug state machine
    oprofile/timer: Convert to hotplug state machine
    block/softirq: Convert to hotplug state machine
    lib/irq_poll: Convert to hotplug state machine
    x86/microcode: Convert to hotplug state machine
    sh/SH-X3 SMP: Convert to hotplug state machine
    ia64/mca: Convert to hotplug state machine
    ARM/OMAP/wakeupgen: Convert to hotplug state machine
    ARM/shmobile: Convert to hotplug state machine
    arm64/FP/SIMD: Convert to hotplug state machine
    ...

    Linus Torvalds
     

02 Oct, 2016

1 commit


07 Sep, 2016

3 commits


12 Aug, 2016

1 commit

  • We know that 'ret = 0' because it has been tested a few lines above.
    So, if 'kzalloc' fails, 0 will be returned instead of an error code.
    Return -ENOMEM instead.

    Fixes: a0d46a3dfdc3 ("ARM: cpuidle: Register per cpuidle device")
    Signed-off-by: Christophe Jaillet
    Acked-by: Lorenzo Pieralisi
    Cc: 4.1+ # 4.1+
    Signed-off-by: Rafael J. Wysocki

    Christophe Jaillet
     

31 Jul, 2016

1 commit

  • Pull powerpc updates from Michael Ellerman:
    "Highlights:
    - PowerNV PCI hotplug support.
    - Lots more Power9 support.
    - eBPF JIT support on ppc64le.
    - Lots of cxl updates.
    - Boot code consolidation.

    Bug fixes:
    - Fix spin_unlock_wait() from Boqun Feng
    - Fix stack pointer corruption in __tm_recheckpoint() from Michael
    Neuling
    - Fix multiple bugs in memory_hotplug_max() from Bharata B Rao
    - mm: Ensure "special" zones are empty from Oliver O'Halloran
    - ftrace: Separate the heuristics for checking call sites from
    Michael Ellerman
    - modules: Never restore r2 for a mprofile-kernel style mcount() call
    from Michael Ellerman
    - Fix endianness when reading TCEs from Alexey Kardashevskiy
    - start rtasd before PCI probing from Greg Kurz
    - PCI: rpaphp: Fix slot registration for multiple slots under a PHB
    from Tyrel Datwyler
    - powerpc/mm: Add memory barrier in __hugepte_alloc() from Sukadev
    Bhattiprolu

    Cleanups & fixes:
    - Drop support for MPIC in pseries from Rashmica Gupta
    - Define and use PPC64_ELF_ABI_v2/v1 from Michael Ellerman
    - Remove unused symbols in asm-offsets.c from Rashmica Gupta
    - Fix SRIOV not building without EEH enabled from Russell Currey
    - Remove kretprobe_trampoline_holder from Thiago Jung Bauermann
    - Reduce log level of PCI I/O space warning from Benjamin
    Herrenschmidt
    - Add array bounds checking to crash_shutdown_handlers from Suraj
    Jitindar Singh
    - Avoid -maltivec when using clang integrated assembler from Anton
    Blanchard
    - Fix array overrun in ppc_rtas() syscall from Andrew Donnellan
    - Fix error return value in cmm_mem_going_offline() from Rasmus
    Villemoes
    - export cpu_to_core_id() from Mauricio Faria de Oliveira
    - Remove old symbols from defconfigs from Andrew Donnellan
    - Update obsolete comments in setup_32.c about entry conditions from
    Benjamin Herrenschmidt
    - Add comment explaining the purpose of setup_kdump_trampoline() from
    Benjamin Herrenschmidt
    - Merge the RELOCATABLE config entries for ppc32 and ppc64 from Kevin
    Hao
    - Remove RELOCATABLE_PPC32 from Kevin Hao
    - Fix .long's in tlb-radix.c to more meaningful from Balbir Singh

    Minor cleanups & fixes:
    - Andrew Donnellan, Anna-Maria Gleixner, Anton Blanchard, Benjamin
    Herrenschmidt, Bharata B Rao, Christophe Leroy, Colin Ian King,
    Geliang Tang, Greg Kurz, Madhavan Srinivasan, Michael Ellerman,
    Michael Ellerman, Stephen Rothwell, Stewart Smith.

    Freescale updates from Scott:
    - "Highlights include more 8xx optimizations, device tree updates,
    and MVME7100 support."

    PowerNV PCI hotplug from Gavin Shan:
    - PCI: Add pcibios_setup_bridge()
    - Override pcibios_setup_bridge()
    - Remove PCI_RESET_DELAY_US
    - Move pnv_pci_ioda_setup_opal_tce_kill() around
    - Increase PE# capacity
    - Allocate PE# in reverse order
    - Create PEs in pcibios_setup_bridge()
    - Setup PE for root bus
    - Extend PCI bridge resources
    - Make pnv_ioda_deconfigure_pe() visible
    - Dynamically release PE
    - Update bridge windows on PCI plug
    - Delay populating pdn
    - Support PCI slot ID
    - Use PCI slot reset infrastructure
    - Introduce pnv_pci_get_slot_id()
    - Functions to get/set PCI slot state
    - PCI/hotplug: PowerPC PowerNV PCI hotplug driver
    - Print correct PHB type names

    Power9 idle support from Shreyas B. Prabhu:
    - set power_save func after the idle states are initialized
    - Use PNV_THREAD_WINKLE macro while requesting for winkle
    - make hypervisor state restore a function
    - Rename idle_power7.S to idle_book3s.S
    - Rename reusable idle functions to hardware agnostic names
    - Make pnv_powersave_common more generic
    - abstraction for saving SPRs before entering deep idle states
    - Add platform support for stop instruction
    - cpuidle/powernv: Use CPUIDLE_STATE_MAX instead of MAX_POWERNV_IDLE_STATES
    - cpuidle/powernv: cleanup cpuidle-powernv.c
    - cpuidle/powernv: Add support for POWER ISA v3 idle states
    - Use deepest stop state when cpu is offlined

    Power9 PMU from Madhavan Srinivasan:
    - factor out power8 pmu macros and defines
    - factor out power8 pmu functions
    - factor out power8 __init_pmu code
    - Add power9 event list macros for generic and cache events
    - Power9 PMU support
    - Export Power9 generic and cache events to sysfs

    Power9 preliminary interrupt & PCI support from Benjamin Herrenschmidt:
    - Add XICS emulation APIs
    - Move a few exception common handlers to make room
    - Add support for HV virtualization interrupts
    - Add mechanism to force a replay of interrupts
    - Add ICP OPAL backend
    - Discover IODA3 PHBs
    - pci: Remove obsolete SW invalidate
    - opal: Add real mode call wrappers
    - Rename TCE invalidation calls
    - Remove SWINV constants and obsolete TCE code
    - Rework accessing the TCE invalidate register
    - Fallback to OPAL for TCE invalidations
    - Use the device-tree to get available range of M64's
    - Check status of a PHB before using it
    - pci: Don't try to allocate resources that will be reassigned

    Other Power9:
    - Send SIGBUS on unaligned copy and paste from Chris Smart
    - Large Decrementer support from Oliver O'Halloran
    - Load Monitor Register Support from Jack Miller

    Performance improvements from Anton Blanchard:
    - Avoid load hit store in __giveup_fpu() and __giveup_altivec()
    - Avoid load hit store in setup_sigcontext()
    - Remove assembly versions of strcpy, strcat, strlen and strcmp
    - Align hot loops of some string functions

    eBPF JIT from Naveen N. Rao:
    - Fix/enhance 32-bit Load Immediate implementation
    - Optimize 64-bit Immediate loads
    - Introduce rotate immediate instructions
    - A few cleanups
    - Isolate classic BPF JIT specifics into a separate header
    - Implement JIT compiler for extended BPF

    Operator Panel driver from Suraj Jitindar Singh:
    - devicetree/bindings: Add binding for operator panel on FSP machines
    - Add inline function to get rc from an ASYNC_COMP opal_msg
    - Add driver for operator panel on FSP machines

    Sparse fixes from Daniel Axtens:
    - make some things static
    - Introduce asm-prototypes.h
    - Include headers containing prototypes
    - Use #ifdef __BIG_ENDIAN__ #else for REG_BYTE
    - kvm: Clarify __user annotations
    - Pass endianness to sparse
    - Make ppc_md.{halt, restart} __noreturn

    MM fixes & cleanups from Aneesh Kumar K.V:
    - radix: Update LPCR HR bit as per ISA
    - use _raw variant of page table accessors
    - Compile out radix related functions if RADIX_MMU is disabled
    - Clear top 16 bits of va only on older cpus
    - Print formation regarding the the MMU mode
    - hash: Update SDR1 size encoding as documented in ISA 3.0
    - radix: Update PID switch sequence
    - radix: Update machine call back to support new HCALL.
    - radix: Add LPID based tlb flush helpers
    - radix: Add a kernel command line to disable radix
    - Cleanup LPCR defines

    Boot code consolidation from Benjamin Herrenschmidt:
    - Move epapr_paravirt_early_init() to early_init_devtree()
    - cell: Don't use flat device-tree after boot
    - ge_imp3a: Don't use the flat device-tree after boot
    - mpc85xx_ds: Don't use the flat device-tree after boot
    - mpc85xx_rdb: Don't use the flat device-tree after boot
    - Don't test for machine type in rtas_initialize()
    - Don't test for machine type in smp_setup_cpu_maps()
    - dt: Add of_device_compatible_match()
    - Factor do_feature_fixup calls
    - Move 64-bit feature fixup earlier
    - Move 64-bit memory reserves to setup_arch()
    - Use a cachable DART
    - Move FW feature probing out of pseries probe()
    - Put exception configuration in a common place
    - Remove early allocation of the SMU command buffer
    - Move MMU backend selection out of platform code
    - pasemi: Remove IOBMAP allocation from platform probe()
    - mm/hash: Don't use machine_is() early during boot
    - Don't test for machine type to detect HEA special case
    - pmac: Remove spurrious machine type test
    - Move hash table ops to a separate structure
    - Ensure that ppc_md is empty before probing for machine type
    - Move 64-bit probe_machine() to later in the boot process
    - Move 32-bit probe() machine to later in the boot process
    - Get rid of ppc_md.init_early()
    - Move the boot time info banner to a separate function
    - Move setting of {i,d}cache_bsize to initialize_cache_info()
    - Move the content of setup_system() to setup_arch()
    - Move cache info inits to a separate function
    - Re-order the call to smp_setup_cpu_maps()
    - Re-order setup_panic()
    - Make a few boot functions __init
    - Merge 32-bit and 64-bit setup_arch()

    Other new features:
    - tty/hvc: Use IRQF_SHARED for OPAL hvc consoles from Sam Mendoza-Jonas
    - tty/hvc: Use opal irqchip interface if available from Sam Mendoza-Jonas
    - powerpc: Add module autoloading based on CPU features from Alastair D'Silva
    - crypto: vmx - Convert to CPU feature based module autoloading from Alastair D'Silva
    - Wake up kopald polling thread before waiting for events from Benjamin Herrenschmidt
    - xmon: Dump ISA 2.06 SPRs from Michael Ellerman
    - xmon: Dump ISA 2.07 SPRs from Michael Ellerman
    - Add a parameter to disable 1TB segs from Oliver O'Halloran
    - powerpc/boot: Add OPAL console to epapr wrappers from Oliver O'Halloran
    - Assign fixed PHB number based on device-tree properties from Guilherme G. Piccoli
    - pseries: Add pseries hotplug workqueue from John Allen
    - pseries: Add support for hotplug interrupt source from John Allen
    - pseries: Use kernel hotplug queue for PowerVM hotplug events from John Allen
    - pseries: Move property cloning into its own routine from Nathan Fontenot
    - pseries: Dynamic add entires to associativity lookup array from Nathan Fontenot
    - pseries: Auto-online hotplugged memory from Nathan Fontenot
    - pseries: Remove call to memblock_add() from Nathan Fontenot

    cxl:
    - Add set and get private data to context struct from Michael Neuling
    - make base more explicitly non-modular from Paul Gortmaker
    - Use for_each_compatible_node() macro from Wei Yongjun
    - Frederic Barrat
    - Abstract the differences between the PSL and XSL
    - Make vPHB device node match adapter's
    - Philippe Bergheaud
    - Add mechanism for delivering AFU driver specific events
    - Ignore CAPI adapters misplaced in switched slots
    - Refine slice error debug messages
    - Andrew Donnellan
    - static-ify variables to fix sparse warnings
    - PCI/hotplug: pnv_php: export symbols and move struct types needed by cxl
    - PCI/hotplug: pnv_php: handle OPAL_PCI_SLOT_OFFLINE power state
    - Add cxl_check_and_switch_mode() API to switch bi-modal cards
    - remove dead Kconfig options
    - fix potential NULL dereference in free_adapter()
    - Ian Munsie
    - Update process element after allocating interrupts
    - Add support for CAPP DMA mode
    - Fix allowing bogus AFU descriptors with 0 maximum processes
    - Fix allocating a minimum of 2 pages for the SPA
    - Fix bug where AFU disable operation had no effect
    - Workaround XSL bug that does not clear the RA bit after a reset
    - Fix NULL pointer dereference on kernel contexts with no AFU interrupts
    - powerpc/powernv: Split cxl code out into a separate file
    - Add cxl_slot_is_supported API
    - Enable bus mastering for devices using CAPP DMA mode
    - Move cxl_afu_get / cxl_afu_put to base
    - Allow a default context to be associated with an external pci_dev
    - Do not create vPHB if there are no AFU configuration records
    - powerpc/powernv: Add support for the cxl kernel api on the real phb
    - Add support for using the kernel API with a real PHB
    - Add kernel APIs to get & set the max irqs per context
    - Add preliminary workaround for CX4 interrupt limitation
    - Add support for interrupts on the Mellanox CX4
    - Workaround PE=0 hardware limitation in Mellanox CX4
    - powerpc/powernv: Fix pci-cxl.c build when CONFIG_MODULES=n

    selftests:
    - Test unaligned copy and paste from Chris Smart
    - Load Monitor Register Tests from Jack Miller
    - Cyril Bur
    - exec() with suspended transaction
    - Use signed long to read perf_event_paranoid
    - Fix usage message in context_switch
    - Fix generation of vector instructions/types in context_switch
    - Michael Ellerman
    - Use "Delta" rather than "Error" in normal output
    - Import Anton's mmap & futex micro benchmarks
    - Add a test for PROT_SAO"

    * tag 'powerpc-4.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (263 commits)
    powerpc/mm: Parenthesise IS_ENABLED() in if condition
    tty/hvc: Use opal irqchip interface if available
    tty/hvc: Use IRQF_SHARED for OPAL hvc consoles
    selftests/powerpc: exec() with suspended transaction
    powerpc: Improve comment explaining why we modify VRSAVE
    powerpc/mm: Drop unused externs for hpte_init_beat[_v3]()
    powerpc/mm: Rename hpte_init_lpar() and move the fallback to a header
    powerpc/mm: Fix build break when PPC_NATIVE=n
    crypto: vmx - Convert to CPU feature based module autoloading
    powerpc: Add module autoloading based on CPU features
    powerpc/powernv/ioda: Fix endianness when reading TCEs
    powerpc/mm: Add memory barrier in __hugepte_alloc()
    powerpc/modules: Never restore r2 for a mprofile-kernel style mcount() call
    powerpc/ftrace: Separate the heuristics for checking call sites
    powerpc: Merge 32-bit and 64-bit setup_arch()
    powerpc/64: Make a few boot functions __init
    powerpc: Re-order setup_panic()
    powerpc: Re-order the call to smp_setup_cpu_maps()
    powerpc/32: Move cache info inits to a separate function
    powerpc/64: Move the content of setup_system() to setup_arch()
    ...

    Linus Torvalds
     

22 Jul, 2016

1 commit

  • The function arm_enter_idle_state is exactly the same in both generic
    ARM{32,64} CPUIdle driver and will be the same even on ARM64 backend
    for ACPI processor idle driver. So we can unify it and move it to a
    common place by introducing CPU_PM_CPU_IDLE_ENTER macro that can be
    used in all places avoiding duplication.

    This is in preparation of reuse of the generic cpuidle entry function
    for ACPI LPI support on ARM64.

    Suggested-by: Rafael J. Wysocki
    Signed-off-by: Sudeep Holla
    Signed-off-by: Rafael J. Wysocki

    Sudeep Holla
     

15 Jul, 2016

3 commits

  • POWER ISA v3 defines a new idle processor core mechanism. In summary,
    a) new instruction named stop is added.
    b) new per thread SPR named PSSCR is added which controls the behavior
    of stop instruction.

    Supported idle states and value to be written to PSSCR register to enter
    any idle state is exposed via ibm,cpu-idle-state-names and
    ibm,cpu-idle-state-psscr respectively. To enter an idle state,
    platform provided power_stop() needs to be invoked with the appropriate
    PSSCR value.

    This patch adds support for this new mechanism in cpuidle powernv driver.

    Cc: Rafael J. Wysocki
    Cc: Daniel Lezcano
    Cc: Rob Herring
    Cc: Lorenzo Pieralisi
    Cc: linux-pm@vger.kernel.org
    Cc: Michael Ellerman
    Cc: Paul Mackerras
    Cc: linuxppc-dev@lists.ozlabs.org
    Reviewed-by: Gautham R. Shenoy
    Signed-off-by: Shreyas B. Prabhu
    Signed-off-by: Michael Ellerman

    Shreyas B. Prabhu
     
  • - Use stack instead of kzalloc'ed memory for variables while probing
    device tree for idle states.
    - Set cap for number of idle states that can be added to
    cpuidle_state_table
    - Minor change in way we check of_property_read_u32_array for error
    for sake of consistency
    - Drop unnecessary "&" while assigning function pointer

    Cc: Rafael J. Wysocki
    Cc: Daniel Lezcano
    Cc: linux-pm@vger.kernel.org
    Signed-off-by: Shreyas B. Prabhu
    Signed-off-by: Michael Ellerman

    Shreyas B. Prabhu
     
  • Use cpuidle's CPUIDLE_STATE_MAX macro instead of powernv specific
    MAX_POWERNV_IDLE_STATES.

    Cc: Rafael J. Wysocki
    Cc: Daniel Lezcano
    Cc: linux-pm@vger.kernel.org
    Acked-by: Daniel Lezcano
    Signed-off-by: Shreyas B. Prabhu
    Signed-off-by: Michael Ellerman

    Shreyas B. Prabhu
     

04 Jul, 2016

1 commit

  • Snooze is a poll idle state in powernv and pseries platforms. Snooze
    has a timeout so that if a CPU stays in snooze for more than target
    residency of the next available idle state, then it would exit
    thereby giving chance to the cpuidle governor to re-evaluate and
    promote the CPU to a deeper idle state. Therefore whenever snooze
    exits due to this timeout, its last_residency will be target_residency
    of the next deeper state.

    Commit e93e59ce5b85 "cpuidle: Replace ktime_get() with local_clock()"
    changed the math around last_residency calculation. Specifically,
    while converting last_residency value from nano- to microseconds, it
    carries out right shift by 10. Because of that, in snooze timeout
    exit scenarios last_residency calculated is roughly 2.3% less than
    target_residency of the next available state. This pattern is picked
    up by get_typical_interval() in the menu governor and therefore
    expected_interval in menu_select() is frequently less than the
    target_residency of any state other than snooze.

    Due to this we are entering snooze at a higher rate, thereby
    affecting the single thread performance.

    Fix this by using more precise division via ktime_us_delta().

    Fixes: e93e59ce5b85 "cpuidle: Replace ktime_get() with local_clock()"
    Reported-by: Anton Blanchard
    Bisected-by: Shilpasri G Bhat
    Signed-off-by: Shreyas B. Prabhu
    Acked-by: Daniel Lezcano
    Acked-by: Balbir Singh
    Signed-off-by: Rafael J. Wysocki

    Shreyas B. Prabhu
     

18 May, 2016

1 commit

  • Commit 0b89e9aa2856 (cpuidle: delay enabling interrupts until all
    coupled CPUs leave idle) rightfully fixed a regression by letting
    the coupled idle state framework to handle local interrupt enabling
    when the CPU is exiting an idle state.

    The current code checks if the idle state is coupled and, if so, it
    will let the coupled code to enable interrupts. This way, it can
    decrement the ready-count before handling the interrupt. This
    mechanism prevents the other CPUs from waiting for a CPU which is
    handling interrupts.

    But the check is done against the state index returned by the back
    end driver's ->enter functions which could be different from the
    initial index passed as parameter to the cpuidle_enter_state()
    function.

    entered_state = target_state->enter(dev, drv, index);

    [ ... ]

    if (!cpuidle_state_is_coupled(drv, entered_state))
    local_irq_enable();

    [ ... ]

    If the 'index' is referring to a coupled idle state but the
    'entered_state' is *not* coupled, then the interrupts are enabled
    again. All CPUs blocked on the sync barrier may busy loop longer
    if the CPU has interrupts to handle before decrementing the
    ready-count. That's consuming more energy than saving.

    Fixes: 0b89e9aa2856 (cpuidle: delay enabling interrupts until all coupled CPUs leave idle)
    Signed-off-by: Daniel Lezcano
    Cc: 3.15+ # 3.15+
    [ rjw: Subject & changelog ]
    Signed-off-by: Rafael J. Wysocki

    Daniel Lezcano
     

07 May, 2016

1 commit


28 Apr, 2016

1 commit

  • arm_cpuidle_suspend() may return -EOPNOTSUPP, or any value returned
    by the cpu_ops/cpuidle_ops suspend call. arm_enter_idle_state() doesn't
    update 'ret' with this value, meaning we always signal success to
    cpuidle_enter_state(), causing it to update the usage counters as if we
    succeeded.

    Fixes: 191de17aa3c1 ("ARM64: cpuidle: Replace cpu_suspend by the common ARM/ARM64 function")
    Signed-off-by: James Morse
    Acked-by: Lorenzo Pieralisi
    Acked-by: Daniel Lezcano
    Cc: 4.1+ # 4.1+
    Signed-off-by: Rafael J. Wysocki

    James Morse
     

26 Apr, 2016

1 commit

  • The ktime_get() can have a non negligeable overhead, use local_clock()
    instead.

    In order to test the difference between ktime_get() and local_clock(),
    a quick hack has been added to trigger, via debugfs, 10000 times a
    call to ktime_get() and local_clock() and measure the elapsed time.

    Then the average value, the min and max is computed for each call.

    From userspace, the test above was called 100 times every 2 seconds.

    So, ktime_get() and local_clock() have been called 1000000 times in
    total.

    The results are:

    ktime_get():
    ============
    * average: 101 ns (stddev: 27.4)
    * maximum: 38313 ns
    * minimum: 65 ns

    local_clock():
    ==============
    * average: 60 ns (stddev: 9.8)
    * maximum: 13487 ns
    * minimum: 46 ns

    The local_clock() is faster and more stable.

    Even if it is a drop in the ocean, changing the ktime_get() by the
    local_clock() allows to save 80ns at idle time (entry + exit). And
    in some circumstances, especially when there are several CPUs racing
    for the clock access, we save tens of microseconds.

    The idle duration resulting from a diff is converted from nanosec to
    microsec. This could be done with integer division (div 1000) - which is
    an expensive operation or by 10 bits shifting (div 1024) - which is fast
    but unprecise.

    The following table gives some results at the limits.

    ------------------------------------------
    | nsec | div(1000) | div(1024) |
    ------------------------------------------
    | 1e3 | 1 usec | 976 nsec |
    ------------------------------------------
    | 1e6 | 1000 usec | 976 usec |
    ------------------------------------------
    | 1e9 | 1000000 usec | 976562 usec |
    ------------------------------------------

    There is a linear deviation of 2.34%. This loss of precision is acceptable
    in the context of the resulting diff which is used for statistics. These
    ones are processed to guess estimate an approximation of the duration of the
    next idle period which ends up into an idle state selection. The selection
    criteria takes into account the next duration based on large intervals,
    represented by the idle state's target residency.

    The 2^10 division is enough because the approximation regarding the 1e3
    division is lost in all the approximations done for the next idle duration
    computation.

    Signed-off-by: Daniel Lezcano
    Acked-by: Peter Zijlstra (Intel)
    [ rjw: Subject ]
    Signed-off-by: Rafael J. Wysocki

    Daniel Lezcano
     

09 Apr, 2016

1 commit

  • Currently the 'registered' member of the cpuidle_device struct is set
    to 1 during cpuidle_register_device. In this same function there are
    checks to see if the device is already registered to prevent duplicate
    calls to register the device, but this value is never set to 0 even on
    unregister of the device. Because of this, any attempt to call
    cpuidle_register_device after a call to cpuidle_unregister_device will
    fail which shouldn't be the case.

    To prevent this, set registered to 0 when the device is unregistered.

    Fixes: c878a52d3c7c (cpuidle: Check if device is already registered)
    Signed-off-by: Dave Gerlach
    Acked-by: Daniel Lezcano
    Cc: All applicable
    Signed-off-by: Rafael J. Wysocki

    Dave Gerlach
     

21 Mar, 2016

1 commit

  • Commit a9ceb78bc75c (cpuidle,menu: use interactivity_req to disable
    polling) changed the behavior of the fallback state selection part
    of menu_select() so it looks at interactivity_req instead of
    data->next_timer_us when it makes its decision. That effectively
    caused polling to be used more often as fallback idle which led to
    significant increases of energy consumption in some cases.

    Commit e132b9b3bc7f (cpuidle: menu: use high confidence factors
    only when considering polling) changed that logic again to be more
    predictable, but that didn't help with the increased energy
    consumption problem.

    For this reason, go back to making decisions on which state to fall
    back to based on data->next_timer_us which is the time we know for
    sure something will happen rather than a prediction (which may be
    inaccurate and turns out to be so often enough to be problematic).
    However, take the target residency of the first proper idle state
    (C1) into account, so that state is not used as the fallback one
    if its target residency is greater than data->next_timer_us.

    Fixes: a9ceb78bc75c (cpuidle,menu: use interactivity_req to disable polling)
    Signed-off-by: Rafael J. Wysocki
    Reported-and-tested-by: Doug Smythies

    Rafael J. Wysocki
     

17 Mar, 2016

1 commit

  • The menu governor uses five different factors to pick the
    idle state:
    - the user configured latency_req
    - the time until the next timer (next_timer_us)
    - the typical sleep interval, as measured recently
    - an estimate of sleep time by dividing next_timer_us by an observed factor
    - a load corrected version of the above, divided again by load

    Only the first three items are known with enough confidence that
    we can use them to consider polling, instead of an actual CPU
    idle state, because the cost of being wrong about polling can be
    excessive power use.

    The latter two are used in the menu governor's main selection
    loop, and can result in choosing a shallower idle state when
    the system is expected to be busy again soon.

    This pushes a busy system in the "performance" direction of
    the performance<>power tradeoff, when choosing between idle
    states, but stays more strictly on the "power" state when
    deciding between polling and C1.

    Signed-off-by: Rik van Riel
    Signed-off-by: Rafael J. Wysocki

    Rik van Riel
     

17 Feb, 2016

2 commits


30 Jan, 2016

1 commit

  • * pm-cpuidle:
    cpuidle: coupled: remove unused define cpuidle_coupled_lock
    cpuidle: fix fallback mechanism for suspend to idle in absence of enter_freeze

    * pm-cpufreq:
    cpufreq: cpufreq-dt: avoid uninitialized variable warnings:
    cpufreq: pxa2xx: fix pxa_cpufreq_change_voltage prototype
    cpufreq: Use list_is_last() to check last entry of the policy list
    cpufreq: Fix NULL reference crash while accessing policy->governor_data

    * pm-domains:
    PM / Domains: Fix typo in comment
    PM / Domains: Fix potential deadlock while adding/removing subdomains
    PM / domains: fix lockdep issue for all subdomains

    * pm-sleep:
    PM: APM_EMULATION does not depend on PM

    Rafael J. Wysocki
     

28 Jan, 2016

1 commit

  • This was found with the -RT patch enabled, but the fix should apply to
    non-RT also.

    Used multi_v7_defconfig+PREEMPT_RT_FULL=y and this caused a compilation
    warning without this fix:
    ../drivers/cpuidle/coupled.c:122:21: warning: 'cpuidle_coupled_lock'
    defined but not used [-Wunused-variable]

    Signed-off-by: Anders Roxell
    Signed-off-by: Rafael J. Wysocki

    Anders Roxell
     

22 Jan, 2016

1 commit

  • Commit 51164251f5c3 "sched / idle: Drop default_idle_call() fallback
    from call_cpuidle()" made find_deepest_state() return non-negative
    value and check all the states with index > 0. Also as a result,
    find_deepest_state() returns 0 even when enter_freeze callbacks are not
    implemented and enter_freeze_proper() is called which ends up crashing
    the kernel.

    This patch updates the check for index > 0 in cpuidle_enter_freeze and
    cpuidle_idle_call(when idle_should_freeze is true) to restore the
    suspend-to-idle functionality in absence of enter_freeze callback.

    Fixes: 51164251f5c3 "sched / idle: Drop default_idle_call() fallback from call_cpuidle()"
    Signed-off-by: Sudeep Holla
    Signed-off-by: Rafael J. Wysocki

    Sudeep Holla
     

21 Jan, 2016

1 commit

  • Pull more power management and ACPI updates from Rafael Wysocki:
    "This includes fixes on top of the previous batch of PM+ACPI updates
    and some new material as well.

    From the new material perspective the most significant are the driver
    core changes that should allow USB devices to stay suspended over
    system suspend/resume cycles if they have been runtime-suspended
    already beforehand. Apart from that, ACPICA is updated to upstream
    revision 20160108 (cosmetic mostly, but including one fixup on top of
    the previous ACPICA update) and there are some devfreq updates the
    didn't make it before (due to timing).

    A few recent regressions are fixed, most importantly in the cpuidle
    menu governor and in the ACPI backlight driver and some x86 platform
    drivers depending on it.

    Some more bugs are fixed and cleanups are made on top of that.

    Specifics:

    - Modify the driver core and the USB subsystem to allow USB devices
    to stay suspended over system suspend/resume cycles if they have
    been runtime-suspended already beforehand and fix some bugs on top
    of these changes (Tomeu Vizoso, Rafael Wysocki).

    - Update ACPICA to upstream revision 20160108, including updates of
    the ACPICA's copyright notices, a code fixup resulting from a
    regression fix that was necessary in the upstream code only (the
    regression fixed by it has never been present in Linux) and a
    compiler warning fix (Bob Moore, Lv Zheng).

    - Fix a recent regression in the cpuidle menu governor that broke it
    on practically all architectures other than x86 and make a couple
    of optimizations on top of that fix (Rafael Wysocki).

    - Clean up the selection of cpuidle governors depending on whether or
    not the kernel is configured for tickless systems (Jean Delvare).

    - Revert a recent commit that introduced a regression in the ACPI
    backlight driver, address the problem it attempted to fix in a
    different way and revert one more cosmetic change depending on the
    problematic commit (Hans de Goede).

    - Add two more ACPI backlight quirks (Hans de Goede).

    - Fix a few minor problems in the core devfreq code, clean it up a
    bit and update the MAINTAINERS information related to it (Chanwoo
    Choi, MyungJoo Ham).

    - Improve an error message in the ACPI fan driver (Andy Lutomirski).

    - Fix a recent build regression in the cpupower tool (Shreyas
    Prabhu)"

    * tag 'pm+acpi-4.5-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (32 commits)
    cpuidle: menu: Avoid pointless checks in menu_select()
    sched / idle: Drop default_idle_call() fallback from call_cpuidle()
    cpupower: Fix build error in cpufreq-info
    cpuidle: Don't enable all governors by default
    cpuidle: Default to ladder governor on ticking systems
    time: nohz: Expose tick_nohz_enabled
    ACPICA: Update version to 20160108
    ACPICA: Silence a -Wbad-function-cast warning when acpi_uintptr_t is 'uintptr_t'
    ACPICA: Additional 2016 copyright changes
    ACPICA: Reduce regression fix divergence from upstream ACPICA
    ACPI / video: Add disable_backlight_sysfs_if quirk for the Toshiba Satellite R830
    ACPI / video: Revert "thinkpad_acpi: Use acpi_video_handles_brightness_key_presses()"
    ACPI / video: Document acpi_video_handles_brightness_key_presses() a bit
    ACPI / video: Fix using an uninitialized mutex / list_head in acpi_video_handles_brightness_key_presses()
    ACPI / video: Revert "ACPI / video: driver must be registered before checking for keypresses"
    ACPI / fan: Improve acpi_device_update_power error message
    ACPI / video: Add disable_backlight_sysfs_if quirk for the Toshiba Portege R700
    cpuidle: menu: Fix menu_select() for CPUIDLE_DRIVER_STATE_START == 0
    MAINTAINERS: Add devfreq-event entry
    MAINTAINERS: Add missing git repository and directory for devfreq
    ...

    Linus Torvalds
     

19 Jan, 2016

2 commits

  • If menu_select() cannot find a suitable state to return, it will
    return the state index stored in data->last_state_idx. This
    means that it is pointless to look at the states whose indices
    are less than or equal to data->last_state_idx in the main loop,
    so don't do that.

    Given that those checks are done on every idle state selection, this
    change can save quite a bit of completely unnecessary overhead.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Ingo Molnar
    Tested-by: Sudeep Holla

    Rafael J. Wysocki
     
  • After commit 9c4b2867ed7c (cpuidle: menu: Fix menu_select() for
    CPUIDLE_DRIVER_STATE_START == 0) it is clear that menu_select()
    cannot return negative values. Moreover, ladder_select_state()
    will never return a negative value too, so make find_deepest_state()
    return non-negative values too and drop the default_idle_call()
    fallback from call_cpuidle().

    This eliminates one branch from the idle loop and makes the governors
    and find_deepest_state() handle the case when all states have been
    disabled from sysfs consistently.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Peter Zijlstra (Intel)
    Acked-by: Ingo Molnar
    Tested-by: Sudeep Holla

    Rafael J. Wysocki
     

16 Jan, 2016

3 commits

  • Since commit d6f346f2d2 (cpuidle: improve governor Kconfig options)
    the best cpuidle governor is selected automatically. There is little
    point in additionally selecting the other one as it will not be used,
    so don't select both governors by default.

    Being able to select more than one governor is still good for
    developers booting with cpuidle_sysfs_switch, though.

    This fixes the second half of kernel BZ #65531.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=65531
    Signed-off-by: Jean Delvare
    Signed-off-by: Rafael J. Wysocki

    Jean Delvare
     
  • The menu governor is currently the default on all systems. However the
    documentation claims that the ladder governor is preferred on ticking
    systems. So bump the rating of the ladder governor when NO_HZ is
    disabled, or when booting with nohz=off.

    This fixes the first half of kernel BZ #65531.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=65531
    Signed-off-by: Jean Delvare
    Signed-off-by: Rafael J. Wysocki

    Jean Delvare
     
  • Pull powerpc updates from Michael Ellerman:
    "Core:
    - Ground work for the new Power9 MMU from Aneesh Kumar K.V
    - Optimise FP/VMX/VSX context switching from Anton Blanchard

    Misc:
    - Various cleanups from Krzysztof Kozlowski, John Ogness, Rashmica
    Gupta, Russell Currey, Gavin Shan, Daniel Axtens, Michael Neuling,
    Andrew Donnellan
    - Allow wrapper to work on non-english system from Laurent Vivier
    - Add rN aliases to the pt_regs_offset table from Rashmica Gupta
    - Fix module autoload for rackmeter & axonram drivers from Luis de
    Bethencourt
    - Include KVM guest test in all interrupt vectors from Paul Mackerras
    - Fix DSCR inheritance over fork() from Anton Blanchard
    - Make value-returning atomics & {cmp}xchg* & their atomic_ versions
    fully ordered from Boqun Feng
    - Print MSR TM bits in oops messages from Michael Neuling
    - Add TM signal return & invalid stack selftests from Michael Neuling
    - Limit EPOW reset event warnings from Vipin K Parashar
    - Remove the Cell QPACE code from Rashmica Gupta
    - Append linux_banner to exception information in xmon from Rashmica
    Gupta
    - Add selftest to check if VSRs are corrupted from Rashmica Gupta
    - Remove broken GregorianDay() from Daniel Axtens
    - Import Anton's context_switch2 benchmark into selftests from
    Michael Ellerman
    - Add selftest script to test HMI functionality from Daniel Axtens
    - Remove obsolete OPAL v2 support from Stewart Smith
    - Make enter_rtas() private from Michael Ellerman
    - PPR exception cleanups from Michael Ellerman
    - Add page soft dirty tracking from Laurent Dufour
    - Add support for Nvlink NPUs from Alistair Popple
    - Add support for kexec on 476fpe from Alistair Popple
    - Enable kernel CPU dlpar from sysfs from Nathan Fontenot
    - Copy only required pieces of the mm_context_t to the paca from
    Michael Neuling
    - Add a kmsg_dumper that flushes OPAL console output on panic from
    Russell Currey
    - Implement save_stack_trace_regs() to enable kprobe stack tracing
    from Steven Rostedt
    - Add HWCAP bits for Power9 from Michael Ellerman
    - Fix _PAGE_PTE breaking swapoff from Aneesh Kumar K.V
    - Fix _PAGE_SWP_SOFT_DIRTY breaking swapoff from Hugh Dickins
    - scripts/recordmcount.pl: support data in text section on powerpc
    from Ulrich Weigand
    - Handle R_PPC64_ENTRY relocations in modules from Ulrich Weigand

    cxl:
    - cxl: Fix possible idr warning when contexts are released from
    Vaibhav Jain
    - cxl: use correct operator when writing pcie config space values
    from Andrew Donnellan
    - cxl: Fix DSI misses when the context owning task exits from Vaibhav
    Jain
    - cxl: fix build for GCC 4.6.x from Brian Norris
    - cxl: use -Werror only with CONFIG_PPC_WERROR from Brian Norris
    - cxl: Enable PCI device ID for future IBM CXL adapter from Uma
    Krishnan

    Freescale:
    - Freescale updates from Scott: Highlights include moving QE code out
    of arch/powerpc (to be shared with arm), device tree updates, and
    minor fixes"

    * tag 'powerpc-4.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (149 commits)
    powerpc/module: Handle R_PPC64_ENTRY relocations
    scripts/recordmcount.pl: support data in text section on powerpc
    powerpc/powernv: Fix OPAL_CONSOLE_FLUSH prototype and usages
    powerpc/mm: fix _PAGE_SWP_SOFT_DIRTY breaking swapoff
    powerpc/mm: Fix _PAGE_PTE breaking swapoff
    cxl: Enable PCI device ID for future IBM CXL adapter
    cxl: use -Werror only with CONFIG_PPC_WERROR
    cxl: fix build for GCC 4.6.x
    powerpc: Add HWCAP bits for Power9
    powerpc/powernv: Reserve PE#0 on NPU
    powerpc/powernv: Change NPU PE# assignment
    powerpc/powernv: Fix update of NVLink DMA mask
    powerpc/powernv: Remove misleading comment in pci.c
    powerpc: Implement save_stack_trace_regs() to enable kprobe stack tracing
    powerpc: Fix build break due to paca mm_context_t changes
    cxl: Fix DSI misses when the context owning task exits
    MAINTAINERS: Update Scott Wood's e-mail address
    powerpc/powernv: Fix minor off-by-one error in opal_mce_check_early_recovery()
    powerpc: Fix style of self-test config prompts
    powerpc/powernv: Only delay opal_rtc_read() retry when necessary
    ...

    Linus Torvalds
     

15 Jan, 2016

1 commit

  • Commit a9ceb78bc75c (cpuidle,menu: use interactivity_req to disable
    polling) exposed a bug in menu_select() causing it to return -1
    on systems with CPUIDLE_DRIVER_STATE_START equal to zero, although
    it should have returned 0. As a result, idle states are not entered
    by CPUs on those systems.

    Namely, on the systems in question data->last_state_idx is initially
    equal to -1 and the above commit modified the condition that would
    have caused it to be changed to 0 to be less likely to trigger which
    exposed the problem. However, setting data->last_state_idx initially
    to -1 doesn't make sense at all and on the affected systems it should
    always be set to CPUIDLE_DRIVER_STATE_START (ie. 0) unconditionally,
    so make that happen.

    Fixes: a9ceb78bc75c (cpuidle,menu: use interactivity_req to disable polling)
    Reported-and-tested-by: Sudeep Holla
    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

17 Dec, 2015

1 commit


15 Dec, 2015

3 commits

  • The Kconfig currently controlling compilation of this code is:

    cpuidle/Kconfig.arm:config ARM_EXYNOS_CPUIDLE
    cpuidle/Kconfig.arm: bool "Cpu Idle Driver for the Exynos processors"

    ...meaning that it currently is not being built as a module by anyone.

    Lets remove the couple traces of modularity so that when reading the
    driver there is no doubt it is builtin-only.

    Since module_platform_driver() uses the same init level priority as
    builtin_platform_driver() the init ordering remains unchanged with
    this commit.

    Acked-by: Daniel Lezcano
    Signed-off-by: Paul Gortmaker
    Signed-off-by: Rafael J. Wysocki

    Paul Gortmaker
     
  • The Kconfig currently controlling compilation of this code is:

    cpuidle/Kconfig.arm:config ARM_U8500_CPUIDLE
    cpuidle/Kconfig.arm: bool "Cpu Idle Driver for the ST-E u8500 processors"

    ...meaning that it currently is not being built as a module by anyone.

    Lets remove the couple traces of modularity so that when reading the
    driver there is no doubt it is builtin-only.

    Since module_platform_driver() uses the same init level priority as
    builtin_platform_driver() the init ordering remains unchanged with
    this commit.

    Acked-by: Daniel Lezcano
    Signed-off-by: Paul Gortmaker
    Signed-off-by: Rafael J. Wysocki

    Paul Gortmaker
     
  • The Kconfig currently controlling compilation of this code is:

    drivers/cpuidle/Kconfig.arm:config ARM_CLPS711X_CPUIDLE
    drivers/cpuidle/Kconfig.arm: bool "CPU Idle Driver for CLPS711X processors"

    ...meaning that it currently is not being built as a module by anyone.

    Lets remove the modular code that is essentially orphaned, so that
    when reading the driver there is no doubt it is builtin-only.

    Since module_platform_driver() uses the same init level priority as
    builtin_platform_driver() the init ordering remains unchanged with
    this commit.

    Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

    We also delete the MODULE_LICENSE tag etc. since all that information
    is already contained at the top of the file in the comments.

    Acked-by: Daniel Lezcano
    Signed-off-by: Paul Gortmaker
    Signed-off-by: Rafael J. Wysocki

    Paul Gortmaker
     

17 Nov, 2015

2 commits

  • The cpuidle state tables contain the maximum exit latency for each
    cpuidle state. On x86, that is the exit latency for when the entire
    package goes into that same idle state.

    However, a lot of the time we only go into the core idle state,
    not the package idle state. This means we see a much smaller exit
    latency.

    We have no way to detect whether we went into the core or package
    idle state while idle, and that is ok.

    However, the current menu_update logic does have the potential to
    trip up the repeating pattern detection in get_typical_interval.
    If the system is experiencing an exit latency near the idle state's
    exit latency, some of the samples will have exit_us subtracted,
    while others will not. This turns a repeating pattern into mush,
    potentially breaking get_typical_interval.

    Furthermore, for smaller sleep intervals, we know the chance that
    all the cores in the package went to the same idle state are fairly
    small. Dividing the measured_us by two, instead of subtracting the
    full exit latency when hitting a small measured_us, will reduce the
    error.

    Signed-off-by: Rik van Riel
    Acked-by: Arjan van de Ven
    Signed-off-by: Rafael J. Wysocki

    Rik van Riel
     
  • The menu governor carefully figures out how much time we typically
    sleep for an estimated sleep interval, or whether there is a repeating
    pattern going on, and corrects that estimate for the CPU load.

    Then it proceeds to ignore that information when determining whether
    or not to consider polling. This is not a big deal on most x86 CPUs,
    which have very low C1 latencies, and the patch should not have any
    effect on those CPUs.

    However, certain CPUs (eg. Atom) have much higher C1 latencies, and
    it would be good to not waste performance and power on those CPUs if
    we are expecting a very low wakeup latency.

    Disable polling based on the estimated interactivity requirement, not
    on the time to the next timer interrupt.

    Signed-off-by: Rik van Riel
    Acked-by: Arjan van de Ven
    Signed-off-by: Rafael J. Wysocki

    Rik van Riel