20 Nov, 2013

2 commits

  • Pull second set of ARC changes from Vineet Gupta:
    - Support for Perf from Mischa
    - Enabling GPIO/Pinctrl drivers for Abilis TB10x platform
    - New defconfig for buildroot

    * tag 'arc-v3.13-rc1-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
    ARC: [plat-arcfpga] Add defconfig without initramfs location
    ARC: perf: ARC 700 PMU doesn't support sampling events
    ARC: Add documentation on DT binding for ARC700 PMU
    ARC: Add perf support for ARC700 cores
    ARC: [TB10x] Updates for GPIO and pinctrl

    Linus Torvalds
     
  • Pull irq cleanups from Ingo Molnar:
    "This is a multi-arch cleanup series from Thomas Gleixner, which we
    kept to near the end of the merge window, to not interfere with
    architecture updates.

    This series (motivated by the -rt kernel) unifies more aspects of IRQ
    handling and generalizes PREEMPT_ACTIVE"

    * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    preempt: Make PREEMPT_ACTIVE generic
    sparc: Use preempt_schedule_irq
    ia64: Use preempt_schedule_irq
    m32r: Use preempt_schedule_irq
    hardirq: Make hardirq bits generic
    m68k: Simplify low level interrupt handling code
    genirq: Prevent spurious detection for unconditionally polled interrupts

    Linus Torvalds
     

16 Nov, 2013

1 commit

  • Pull trivial tree updates from Jiri Kosina:
    "Usual earth-shaking, news-breaking, rocket science pile from
    trivial.git"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (23 commits)
    doc: usb: Fix typo in Documentation/usb/gadget_configs.txt
    doc: add missing files to timers/00-INDEX
    timekeeping: Fix some trivial typos in comments
    mm: Fix some trivial typos in comments
    irq: Fix some trivial typos in comments
    NUMA: fix typos in Kconfig help text
    mm: update 00-INDEX
    doc: Documentation/DMA-attributes.txt fix typo
    DRM: comment: `halve' -> `half'
    Docs: Kconfig: `devlopers' -> `developers'
    doc: typo on word accounting in kprobes.c in mutliple architectures
    treewide: fix "usefull" typo
    treewide: fix "distingush" typo
    mm/Kconfig: Grammar s/an/a/
    kexec: Typo s/the/then/
    Documentation/kvm: Update cpuid documentation for steal time and pv eoi
    treewide: Fix common typo in "identify"
    __page_to_pfn: Fix typo in comment
    Correct some typos for word frequency
    clk: fixed-factor: Fix a trivial typo
    ...

    Linus Torvalds
     

15 Nov, 2013

4 commits


14 Nov, 2013

1 commit


12 Nov, 2013

3 commits

  • Pull devicetree updates from Rob Herring:
    "DeviceTree updates for 3.13. This is a bit larger pull request than
    usual for this cycle with lots of clean-up.

    - Cross arch clean-up and consolidation of early DT scanning code.
    - Clean-up and removal of arch prom.h headers. Makes arch specific
    prom.h optional on all but Sparc.
    - Addition of interrupts-extended property for devices connected to
    multiple interrupt controllers.
    - Refactoring of DT interrupt parsing code in preparation for
    deferred probe of interrupts.
    - ARM cpu and cpu topology bindings documentation.
    - Various DT vendor binding documentation updates"

    * tag 'devicetree-for-3.13' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: (82 commits)
    powerpc: add missing explicit OF includes for ppc
    dt/irq: add empty of_irq_count for !OF_IRQ
    dt: disable self-tests for !OF_IRQ
    of: irq: Fix interrupt-map entry matching
    MIPS: Netlogic: replace early_init_devtree() call
    of: Add Panasonic Corporation vendor prefix
    of: Add Chunghwa Picture Tubes Ltd. vendor prefix
    of: Add AU Optronics Corporation vendor prefix
    of/irq: Fix potential buffer overflow
    of/irq: Fix bug in interrupt parsing refactor.
    of: set dma_mask to point to coherent_dma_mask
    of: add vendor prefix for PHYTEC Messtechnik GmbH
    DT: sort vendor-prefixes.txt
    of: Add vendor prefix for Cadence
    of: Add empty for_each_available_child_of_node() macro definition
    arm/versatile: Fix versatile irq specifications.
    of/irq: create interrupts-extended property
    microblaze/pci: Drop PowerPC-ism from irq parsing
    of/irq: Create of_irq_parse_and_map_pci() to consolidate arch code.
    of/irq: Use irq_of_parse_and_map()
    ...

    Linus Torvalds
     
  • This adds basic perf support for ARC700 cores. Most PERF_COUNT_HW* events
    are supported now.

    Signed-off-by: Mischa Jonker
    Acked-by: Peter Zijlstra
    Signed-off-by: Vineet Gupta

    Mischa Jonker
     
  • Pull scheduler changes from Ingo Molnar:
    "The main changes in this cycle are:

    - (much) improved CONFIG_NUMA_BALANCING support from Mel Gorman, Rik
    van Riel, Peter Zijlstra et al. Yay!

    - optimize preemption counter handling: merge the NEED_RESCHED flag
    into the preempt_count variable, by Peter Zijlstra.

    - wait.h fixes and code reorganization from Peter Zijlstra

    - cfs_bandwidth fixes from Ben Segall

    - SMP load-balancer cleanups from Peter Zijstra

    - idle balancer improvements from Jason Low

    - other fixes and cleanups"

    * 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (129 commits)
    ftrace, sched: Add TRACE_FLAG_PREEMPT_RESCHED
    stop_machine: Fix race between stop_two_cpus() and stop_cpus()
    sched: Remove unnecessary iteration over sched domains to update nr_busy_cpus
    sched: Fix asymmetric scheduling for POWER7
    sched: Move completion code from core.c to completion.c
    sched: Move wait code from core.c to wait.c
    sched: Move wait.c into kernel/sched/
    sched/wait: Fix __wait_event_interruptible_lock_irq_timeout()
    sched: Avoid throttle_cfs_rq() racing with period_timer stopping
    sched: Guarantee new group-entities always have weight
    sched: Fix hrtimer_cancel()/rq->lock deadlock
    sched: Fix cfs_bandwidth misuse of hrtimer_expires_remaining
    sched: Fix race on toggling cfs_bandwidth_used
    sched: Remove extra put_online_cpus() inside sched_setaffinity()
    sched/rt: Fix task_tick_rt() comment
    sched/wait: Fix build breakage
    sched/wait: Introduce prepare_to_wait_event()
    sched/wait: Add ___wait_cond_timeout() to wait_event*_timeout() too
    sched: Remove get_online_cpus() usage
    sched: Fix race in migrate_swap_stop()
    ...

    Linus Torvalds
     

11 Nov, 2013

1 commit


08 Nov, 2013

1 commit


07 Nov, 2013

3 commits


06 Nov, 2013

22 commits

  • ST.as only takes S9 (255) for offset. This was going out of range when
    accessing a task_struct field with 4k NR_CPUS (due to 128b of coumaks
    itself in there).

    Workaround by using an intermediate register to do the address scaling.

    There is some duplication of fix for ctx_sw.c and ctx_sw_asm.S however
    given that C version will go away soon I'm not bothering to factor out
    the common code.

    Reported-by: Noam Camus
    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • Signed-off-by: Noam Camus
    Signed-off-by: Vineet Gupta

    Noam Camus
     
  • - Add mm_cpumask setting (aggregating only, unlike some other arches)
    used to restrict the TLB flush cross-calling

    - cross-calling versions of TLB flush routines (thanks to Noam)

    Signed-off-by: Noam Camus
    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • -Track a Per CPU ASID counter
    -mm-per-cpu ASID (multiple threads, or mm migrated around)

    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • Need export symbol for it, or can not pass compiling, the related error
    with allmodconfig:

    MODPOST 2994 modules
    ERROR: "pm_power_off" [drivers/mfd/retu-mfd.ko] undefined!
    ERROR: "pm_power_off" [drivers/char/ipmi/ipmi_poweroff.ko] undefined!

    Signed-off-by: Chen Gang
    Signed-off-by: Vineet Gupta

    Chen Gang
     
  • Need export its symbol just like other architectures done, or can not
    pass compiling with allmodconfig, the related error:

    MODPOST 2994 modules
    ERROR: "save_stack_trace" [kernel/backtracetest.ko] undefined!
    ERROR: "save_stack_trace" [drivers/md/persistent-data/dm-persistent-data.ko] undefined!

    Signed-off-by: Chen Gang
    Signed-off-by: Vineet Gupta

    Chen Gang
     
  • get_hw_config_num_irq() may be called by normal iss_model_init_smp()
    which is a function pointer for 'init_smp' which may be called by
    first_lines_of_secondary() which also need be normal too.

    The related warning (with allmodconfig):

    MODPOST vmlinux.o
    WARNING: vmlinux.o(.text+0x5814): Section mismatch in reference from the function iss_model_init_smp() to the function .init.text:get_hw_config_num_irq()
    The function iss_model_init_smp() references
    the function __init get_hw_config_num_irq().
    This is often because iss_model_init_smp lacks a __init
    annotation or the annotation of get_hw_config_num_irq is wrong.

    Signed-off-by: Chen Gang

    Chen Gang
     
  • first_lines_of_secondary() is a '__init' function, but it may be called
    by __cpu_up() by _cpu_up() by cpu_up() which is a normal export symbol
    function. So recommend to remove '__init'.

    The related warning (with allmodconfig):

    MODPOST vmlinux.o
    WARNING: vmlinux.o(.text+0x315c): Section mismatch in reference from the function __cpu_up() to the function .init.text:first_lines_of_secondary()
    The function __cpu_up() references
    the function __init first_lines_of_secondary().
    This is often because __cpu_up lacks a __init
    annotation or the annotation of first_lines_of_secondary is wrong.

    Signed-off-by: Chen Gang

    Chen Gang
     
  • They haven't '__init' in definition, but has '__init' in declaration.
    And normal function start_kernel_secondary() may call setup_processor()
    which will call arc_init_IRQ().

    So need remove '__init' for both of them. The related warning (with
    allmodconfig):

    MODPOST vmlinux.o
    WARNING: vmlinux.o(.text+0x3084): Section mismatch in reference from the function start_kernel_secondary() to the function .init.text:setup_processor()
    The function start_kernel_secondary() references
    the function __init setup_processor().
    This is often because start_kernel_secondary lacks a __init
    annotation or the annotation of setup_processor is wrong.

    Signed-off-by: Chen Gang

    Chen Gang
     
  • arc supports kgdb, but need update -- add function kgdb_roundup_cpus(),
    or can not pass compiling. At present, add the simple generic one just
    like other architectures(e.g. tile, mips ...).

    The related error (with allmodconfig):

    kernel/built-in.o: In function `kgdb_cpu_enter':
    kernel/debug/debug_core.c:580: undefined reference to `kgdb_roundup_cpus'

    Signed-off-by: Chen Gang
    Signed-off-by: Vineet Gupta

    Chen Gang
     
  • ------------------>8----------------------
    arch/arc/mm/tlb.c: In function ‘do_tlb_overlap_fault’:
    arch/arc/mm/tlb.c:688:13: warning: array subscript is above array bounds
    [-Warray-bounds]
    (pd0[n] & PAGE_MASK)) {
    ^
    ------------------>8----------------------

    While at it, remove the usless last iteration of outer loop when reading
    a TLB SET for duplicate entries.

    Suggested-by: Mischa Jonker
    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • Lockdep required a small fix to stacktrace API which was incorrectly
    unwindign out of __switch_to for the current call frame.

    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • In case bootloader has changed the priority of one/more IRQ lines

    Reported-by: Noam Camus
    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • Emulation not enabled is treated as if the fixup failed, so no need for
    special #ifdef checks.

    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • switch the args (address, pt_regs) to match with all the other "C"
    exception handlers.

    This removes the awkwardness in EV_ProtV for page fault vs. unaligned
    access.

    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • Line op needs vaddr (indexing) and paddr (tag match). For page sized
    flushes (V-P const), each line op will need a different index, but the
    tag bits wil remain constant, hence paddr can be setup once outside the
    loop.

    This improves select LMBench numbers for Aliasing dcache where we have
    more "preventive" cache flushing.

    Processor, Processes - times in microseconds - smaller is better
    ------------------------------------------------------------------------------
    Host OS Mhz null null open slct sig sig fork exec sh
    call I/O stat clos TCP inst hndl proc proc proc
    --------- ------------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
    3.11-rc7- Linux 3.11.0- 80 4.66 8.88 69.7 112. 268. 8.60 28.0 3489 13.K 27.K # Non alias ARC700
    3.11-rc7- Linux 3.11.0- 80 4.64 8.51 68.6 98.5 271. 8.58 28.1 4160 15.K 32.K # Aliasing
    3.11-rc7- Linux 3.11.0- 80 4.64 8.51 69.8 99.4 270. 8.73 27.5 3880 15.K 31.K # PTAG loop Inv

    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • With Line length being constant now, we can fold the 2 helpers into 1.
    This allows applying any optimizations (forthcoming) to single place.

    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • Having them be different seems an obscure configuration.

    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • ARC dcache supports 3 ops - Inv, Flush, Flush-n-Inv.
    The programming model however provides 2 commands FLUSH, INV.
    INV will either discard or flush-n-discard (based on DT_CTRL bit)

    The leaf helper __dc_line_loop() used to take the AUX register
    (corresponding to the 2 commands). Now we push that to within the
    helper, paving way for code consolidations to follow.

    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • __get_cpu_var() is used for multiple purposes in the kernel source. One of them is
    address calculation via the form &__get_cpu_var(x). This calculates the address for
    the instance of the percpu variable of the current processor based on an offset.

    Other use cases are for storing and retrieving data from the current processors percpu area.
    __get_cpu_var() can be used as an lvalue when writing data or on the right side of an assignment.

    __get_cpu_var() is defined as :

    #define __get_cpu_var(var) (*this_cpu_ptr(&(var)))

    __get_cpu_var() always only does an address determination. However, store and retrieve operations
    could use a segment prefix (or global register on other platforms) to avoid the address calculation.

    this_cpu_write() and this_cpu_read() can directly take an offset into a percpu area and use
    optimized assembly code to read and write per cpu variables.

    This patch converts __get_cpu_var into either an explicit address calculation using this_cpu_ptr()
    or into a use of this_cpu operations that use the offset. Thereby address calcualtions are avoided
    and less registers are used when code is generated.

    At the end of the patchset all uses of __get_cpu_var have been removed so the macro is removed too.

    The patchset includes passes over all arches as well. Once these operations are used throughout then
    specialized macros can be defined in non -x86 arches as well in order to optimize per cpu access by
    f.e. using a global register that may be set to the per cpu base.

    Transformations done to __get_cpu_var()

    1. Determine the address of the percpu instance of the current processor.

    DEFINE_PER_CPU(int, y);
    int *x = &__get_cpu_var(y);

    Converts to

    int *x = this_cpu_ptr(&y);

    2. Same as #1 but this time an array structure is involved.

    DEFINE_PER_CPU(int, y[20]);
    int *x = __get_cpu_var(y);

    Converts to

    int *x = this_cpu_ptr(y);

    3. Retrieve the content of the current processors instance of a per cpu variable.

    DEFINE_PER_CPU(int, u);
    int x = __get_cpu_var(y)

    Converts to

    int x = __this_cpu_read(y);

    4. Retrieve the content of a percpu struct

    DEFINE_PER_CPU(struct mystruct, y);
    struct mystruct x = __get_cpu_var(y);

    Converts to

    memcpy(this_cpu_ptr(&x), y, sizeof(x));

    5. Assignment to a per cpu variable

    DEFINE_PER_CPU(int, y)
    __get_cpu_var(y) = x;

    Converts to

    this_cpu_write(y, x);

    6. Increment/Decrement etc of a per cpu variable

    DEFINE_PER_CPU(int, y);
    __get_cpu_var(y)++

    Converts to

    this_cpu_inc(y)

    Acked-by: Vineet Gupta
    Signed-off-by: Christoph Lameter

    Christoph Lameter
     

03 Nov, 2013

1 commit

  • A vmalloc fault needs to sync up PGD/PTE entry from init_mm to current
    task's "active_mm". ARC vmalloc fault handler however was using mm.

    A vmalloc fault for non user task context (actually pre-userland, from
    init thread's open for /dev/console) caused the handler to deref NULL mm
    (for mm->pgd)

    The reasons it worked so far is amazing:

    1. By default (!SMP), vmalloc fault handler uses a cached value of PGD.
    In SMP that MMU register is repurposed hence need for mm pointer deref.

    2. In pre-3.12 SMP kernel, the problem triggering vmalloc didn't exist in
    pre-userland code path - it was introduced with commit 20bafb3d23d108bc
    "n_tty: Move buffers into n_tty_data"

    Signed-off-by: Vineet Gupta
    Cc: Gilad Ben-Yossef
    Cc: Noam Camus
    Cc: stable@vger.kernel.org #3.10 and 3.11
    Cc: Peter Hurley
    Signed-off-by: Linus Torvalds

    Vineet Gupta
     

01 Nov, 2013

1 commit

  • Resolve cherry-picking conflicts:

    Conflicts:
    mm/huge_memory.c
    mm/memory.c
    mm/mprotect.c

    See this upstream merge commit for more details:

    52469b4fcd4f Merge branch 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

    Signed-off-by: Ingo Molnar

    Ingo Molnar