31 Jan, 2019

1 commit

  • commit 3affbf0e154ee351add6fcc254c59c3f3947fa8f upstream.

    So far we've mapped branches to "ijmp" which also counts conditional
    branches NOT taken. This makes us different from other architectures
    such as ARM which seem to be counting only taken branches.

    So use "ijmptak" hardware condition which only counts (all jump
    instructions that are taken)

    'ijmptak' event is available on both ARCompact and ARCv2 ISA based
    cores.

    Signed-off-by: Eugeniy Paltsev
    Cc: stable@vger.kernel.org
    Signed-off-by: Vineet Gupta
    [vgupta: reworked changelog]
    Signed-off-by: Greg Kroah-Hartman

    Eugeniy Paltsev
     

21 Dec, 2018

1 commit

  • [ Upstream commit 10d443431dc2bb733cf7add99b453e3fb9047a2e ]

    Some ARC CPU's do not support unaligned loads/stores. Currently, generic
    implementation of reads{b/w/l}()/writes{b/w/l}() is being used with ARC.
    This can lead to misfunction of some drivers as generic functions do a
    plain dereference of a pointer that can be unaligned.

    Let's use {get/put}_unaligned() helpers instead of plain dereference of
    pointer in order to fix. The helpers allow to get and store data from an
    unaligned address whilst preserving the CPU internal alignment.
    According to [1], the use of these helpers are costly in terms of
    performance so we added an initial check for a buffer already aligned so
    that the usage of the helpers can be avoided, when possible.

    [1] Documentation/unaligned-memory-access.txt

    Cc: Alexey Brodkin
    Cc: Joao Pinto
    Cc: David Laight
    Tested-by: Vitor Soares
    Signed-off-by: Jose Abreu
    Signed-off-by: Vineet Gupta
    Signed-off-by: Sasha Levin

    Jose Abreu
     

10 Oct, 2018

1 commit

  • [ Upstream commit 3fcbb8260a87efb691d837e8cd24e81f65b3eb70 ]

    In 4.19-rc1, Eugeniy reported weird boot and IO errors on ARC HSDK

    | INFO: task syslogd:77 blocked for more than 10 seconds.
    | Not tainted 4.19.0-rc1-00007-gf213acea4e88 #40
    | "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this
    | message.
    | syslogd D 0 77 76 0x00000000
    |
    | Stack Trace:
    | __switch_to+0x0/0xac
    | __schedule+0x1b2/0x730
    | io_schedule+0x5c/0xc0
    | __lock_page+0x98/0xdc
    | find_lock_entry+0x38/0x100
    | shmem_getpage_gfp.isra.3+0x82/0xbfc
    | shmem_fault+0x46/0x138
    | handle_mm_fault+0x5bc/0x924
    | do_page_fault+0x100/0x2b8
    | ret_from_exception+0x0/0x8

    He bisected to 84c6591103db ("locking/atomics,
    asm-generic/bitops/lock.h: Rewrite using atomic_fetch_*()")

    This commit however only unmasked the real issue introduced by commit
    4aef66c8ae9 ("locking/atomic, arch/arc: Fix build") which missed the
    retry-if-scond-failed branch in atomic_fetch_##op() macros.

    The bisected commit started using atomic_fetch_##op() macros for building
    the rest of atomics.

    Fixes: 4aef66c8ae9 ("locking/atomic, arch/arc: Fix build")
    Reported-by: Eugeniy Paltsev
    Acked-by: Peter Zijlstra (Intel)
    Signed-off-by: Will Deacon
    Signed-off-by: Vineet Gupta
    [vgupta: wrote changelog]
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Will Deacon
     

05 Sep, 2018

2 commits

  • [ Upstream commit 2423665ec53f2a29191b35382075e9834288a975 ]

    Fix build errors in arch/arc/'s delay.h:
    - add "extern unsigned long loops_per_jiffy;"
    - add for "u64"

    In file included from ../drivers/infiniband/hw/cxgb3/cxio_hal.c:32:
    ../arch/arc/include/asm/delay.h: In function '__udelay':
    ../arch/arc/include/asm/delay.h:61:12: error: 'u64' undeclared (first use in this function)
    loops = ((u64) usecs * 4295 * HZ * loops_per_jiffy) >> 32;
    ^~~

    In file included from ../drivers/infiniband/hw/cxgb3/cxio_hal.c:32:
    ../arch/arc/include/asm/delay.h: In function '__udelay':
    ../arch/arc/include/asm/delay.h:63:37: error: 'loops_per_jiffy' undeclared (first use in this function)
    loops = ((u64) usecs * 4295 * HZ * loops_per_jiffy) >> 32;
    ^~~~~~~~~~~~~~~

    Signed-off-by: Randy Dunlap
    Cc: Vineet Gupta
    Cc: linux-snps-arc@lists.infradead.org
    Cc: Elad Kanfi
    Cc: Leon Romanovsky
    Cc: Ofer Levi
    Signed-off-by: Vineet Gupta
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Randy Dunlap
     
  • [ Upstream commit eb2777397fd83a4a7eaa26984d09d3babb845d2a ]

    As for today we don't setup SMP_CACHE_BYTES and cache_line_size for
    ARC, so they are set to L1_CACHE_BYTES by default. L1 line length
    (L1_CACHE_BYTES) might be easily smaller than L2 line (which is
    usually the case BTW). This breaks code.

    For example this breaks ethernet infrastructure on HSDK/AXS103 boards
    with IOC disabled, involving manual cache flushes
    Functions which alloc and manage sk_buff packet data area rely on
    SMP_CACHE_BYTES define. In the result we can share last L2 cache
    line in sk_buff linear packet data area between DMA buffer and
    some useful data in other structure. So we can lose this data when
    we invalidate DMA buffer.

    sk_buff linear packet data area
    |
    |
    | skb->end skb->tail
    V | |
    V V
    ----------------------------------------------.
    packet data | |
    ----------------------------------------------.

    ---------------------.--------------------------------------------------.
    SLC line | SLC (L2 cache) line (128B) |
    ---------------------.--------------------------------------------------.
    ^ ^
    | |
    These cache lines will be invalidated when we invalidate skb
    linear packet data area before DMA transaction starting.

    This leads to issues painful to debug as it reproduces only if
    (sk_buff->end - sk_buff->tail) < SLC_LINE_SIZE and
    if we have some useful data right after sk_buff->end.

    Fix that by hardcode SMP_CACHE_BYTES to max line length we may have.

    Signed-off-by: Eugeniy Paltsev
    Signed-off-by: Vineet Gupta

    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Eugeniy Paltsev
     

24 Aug, 2018

1 commit

  • [ Upstream commit 2f24ef7413a4d91657ef04e77c27ce0b313e6c95 ]

    machine_desc->init_per_cpu() hook is supposed to be per cpu
    initialization and would seem to apply equally to UP and/or SMP.
    Infact the comment in header file seems to suggest it works for
    UP too, which was not the case and this patch.

    This enables !CONFIG_SMP build for platforms such as hsdk.

    Signed-off-by: Alexey Brodkin
    Signed-off-by: Vineet Gupta
    [vgupta: trimmeed changelog]
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Alexey Brodkin
     

25 Jul, 2018

2 commits

  • commit 93312b6da4df31e4102ce5420e6217135a16c7ea upstream.

    mprotect(EXEC) was failing for stack mappings as default vm flags was
    missing MAYEXEC.

    This was triggered by glibc test suite nptl/tst-execstack testcase

    What is surprising is that despite running LTP for years on, we didn't
    catch this issue as it lacks a directed test case.

    gcc dejagnu tests with nested functions also requiring exec stack work
    fine though because they rely on the GNU_STACK segment spit out by
    compiler and handled in kernel elf loader.

    This glibc case is different as the stack is non exec to begin with and
    a dlopen of shared lib with GNU_STACK segment triggers the exec stack
    proceedings using a mprotect(PROT_EXEC) which was broken.

    CC: stable@vger.kernel.org
    Signed-off-by: Vineet Gupta
    Signed-off-by: Greg Kroah-Hartman

    Vineet Gupta
     
  • commit 6e3761145a9ba3ce267c330b6bff51cf6a057b06 upstream.

    swap was broken on ARC due to silly copy-paste issue.

    We encode offset from swapcache page in __swp_entry() as (off << 13) but
    were not decoding back in __swp_offset() as (off >> 13) - it was still
    (off << 13).

    This finally fixes swap usage on ARC.

    | # mkswap /dev/sda2
    |
    | # swapon -a -e /dev/sda2
    | Adding 500728k swap on /dev/sda2. Priority:-2 extents:1 across:500728k
    |
    | # free
    | total used free shared buffers cached
    | Mem: 765104 13456 751648 4736 8 4736
    | -/+ buffers/cache: 8712 756392
    | Swap: 500728 0 500728

    Cc: stable@vger.kernel.org
    Signed-off-by: Alexey Brodkin
    Signed-off-by: Vineet Gupta
    Signed-off-by: Greg Kroah-Hartman

    Alexey Brodkin
     

30 May, 2018

1 commit

  • [ Upstream commit 173a3efd3edb2ef6ef07471397c5f542a360e9c1 ]

    Looking at functions with large stack frames across all architectures
    led me discovering that BUG() suffers from the same problem as
    fortify_panic(), which I've added a workaround for already.

    In short, variables that go out of scope by calling a noreturn function
    or __builtin_unreachable() keep using stack space in functions
    afterwards.

    A workaround that was identified is to insert an empty assembler
    statement just before calling the function that doesn't return. I'm
    adding a macro "barrier_before_unreachable()" to document this, and
    insert calls to that in all instances of BUG() that currently suffer
    from this problem.

    The files that saw the largest change from this had these frame sizes
    before, and much less with my patch:

    fs/ext4/inode.c:82:1: warning: the frame size of 1672 bytes is larger than 800 bytes [-Wframe-larger-than=]
    fs/ext4/namei.c:434:1: warning: the frame size of 904 bytes is larger than 800 bytes [-Wframe-larger-than=]
    fs/ext4/super.c:2279:1: warning: the frame size of 1160 bytes is larger than 800 bytes [-Wframe-larger-than=]
    fs/ext4/xattr.c:146:1: warning: the frame size of 1168 bytes is larger than 800 bytes [-Wframe-larger-than=]
    fs/f2fs/inode.c:152:1: warning: the frame size of 1424 bytes is larger than 800 bytes [-Wframe-larger-than=]
    net/netfilter/ipvs/ip_vs_core.c:1195:1: warning: the frame size of 1068 bytes is larger than 800 bytes [-Wframe-larger-than=]
    net/netfilter/ipvs/ip_vs_core.c:395:1: warning: the frame size of 1084 bytes is larger than 800 bytes [-Wframe-larger-than=]
    net/netfilter/ipvs/ip_vs_ftp.c:298:1: warning: the frame size of 928 bytes is larger than 800 bytes [-Wframe-larger-than=]
    net/netfilter/ipvs/ip_vs_ftp.c:418:1: warning: the frame size of 908 bytes is larger than 800 bytes [-Wframe-larger-than=]
    net/netfilter/ipvs/ip_vs_lblcr.c:718:1: warning: the frame size of 960 bytes is larger than 800 bytes [-Wframe-larger-than=]
    drivers/net/xen-netback/netback.c:1500:1: warning: the frame size of 1088 bytes is larger than 800 bytes [-Wframe-larger-than=]

    In case of ARC and CRIS, it turns out that the BUG() implementation
    actually does return (or at least the compiler thinks it does),
    resulting in lots of warnings about uninitialized variable use and
    leaving noreturn functions, such as:

    block/cfq-iosched.c: In function 'cfq_async_queue_prio':
    block/cfq-iosched.c:3804:1: error: control reaches end of non-void function [-Werror=return-type]
    include/linux/dmaengine.h: In function 'dma_maxpq':
    include/linux/dmaengine.h:1123:1: error: control reaches end of non-void function [-Werror=return-type]

    This makes them call __builtin_trap() instead, which should normally
    dump the stack and kill the current process, like some of the other
    architectures already do.

    I tried adding barrier_before_unreachable() to panic() and
    fortify_panic() as well, but that had very little effect, so I'm not
    submitting that patch.

    Vineet said:

    : For ARC, it is double win.
    :
    : 1. Fixes 3 -Wreturn-type warnings
    :
    : | ../net/core/ethtool.c:311:1: warning: control reaches end of non-void function
    : [-Wreturn-type]
    : | ../kernel/sched/core.c:3246:1: warning: control reaches end of non-void function
    : [-Wreturn-type]
    : | ../include/linux/sunrpc/svc_xprt.h:180:1: warning: control reaches end of
    : non-void function [-Wreturn-type]
    :
    : 2. bloat-o-meter reports code size improvements as gcc elides the
    : generated code for stack return.

    Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82365
    Link: http://lkml.kernel.org/r/20171219114112.939391-1-arnd@arndb.de
    Signed-off-by: Arnd Bergmann
    Acked-by: Vineet Gupta [arch/arc]
    Tested-by: Vineet Gupta [arch/arc]
    Cc: Mikael Starvik
    Cc: Jesper Nilsson
    Cc: Tony Luck
    Cc: Fenghua Yu
    Cc: Geert Uytterhoeven
    Cc: "David S. Miller"
    Cc: Christopher Li
    Cc: Thomas Gleixner
    Cc: Peter Zijlstra
    Cc: Kees Cook
    Cc: Ingo Molnar
    Cc: Josh Poimboeuf
    Cc: Will Deacon
    Cc: "Steven Rostedt (VMware)"
    Cc: Mark Rutland
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Arnd Bergmann
     

10 Jan, 2018

1 commit

  • commit 79435ac78d160e4c245544d457850a56f805ac0d upstream.

    This used to setup the LP_COUNT register automatically, but now has been
    removed.

    There was an earlier fix 3c7c7a2fc8811 which fixed instance in delay.h but
    somehow missed this one as gcc change had not made its way into
    production toolchains and was not pedantic as it is now !

    Signed-off-by: Vineet Gupta
    Signed-off-by: Greg Kroah-Hartman

    Vineet Gupta
     

02 Nov, 2017

2 commits

  • Many user space API headers have licensing information, which is either
    incomplete, badly formatted or just a shorthand for referring to the
    license under which the file is supposed to be. This makes it hard for
    compliance tools to determine the correct license.

    Update these files with an SPDX license identifier. The identifier was
    chosen based on the license information in the file.

    GPL/LGPL licensed headers get the matching GPL/LGPL SPDX license
    identifier with the added 'WITH Linux-syscall-note' exception, which is
    the officially assigned exception identifier for the kernel syscall
    exception:

    NOTE! This copyright does *not* cover user programs that use kernel
    services by normal system calls - this is merely considered normal use
    of the kernel, and does *not* fall under the heading of "derived work".

    This exception makes it possible to include GPL headers into non GPL
    code, without confusing license compliance tools.

    Headers which have either explicit dual licensing or are just licensed
    under a non GPL license are updated with the corresponding SPDX
    identifier and the GPLv2 with syscall exception identifier. The format
    is:
    ((GPL-2.0 WITH Linux-syscall-note) OR SPDX-ID-OF-OTHER-LICENSE)

    SPDX license identifiers are a legally binding shorthand, which can be
    used instead of the full boiler plate text. The update does not remove
    existing license information as this has to be done on a case by case
    basis and the copyright holders might have to be consulted. This will
    happen in a separate step.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne. See the previous patch in this series for the
    methodology of how this patch was researched.

    Reviewed-by: Kate Stewart
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

04 Oct, 2017

2 commits

  • Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • ARCv2 ISA_CONFIG and ARC700_BUILD build config registers are not
    compatible. cpuinfo_arc had isa info placeholder which was mashup of bits
    form both.

    Untangle this by defining it off of ARCv2 ISA info and it is fine even
    for ARC700 since former is a super set of latter (ARC700 buildonly has 2
    bits for atomics and stack check).

    At runtime, we treat ARCv2 ISA info as a generic placeholder but
    populate it correctly depending on ARC700 or HS.

    This paves way for adding more HS specific bits in isa info which was
    colliding with the extra bits for arc700.

    Signed-off-by: Vineet Gupta

    Vineet Gupta
     

23 Sep, 2017

1 commit


09 Sep, 2017

1 commit

  • Pull ARC updates from Vineet Gupta:

    - Support for HSDK board hosting a Quad core HS38x4 based SoC running
    @1GHz (and some prerrquisite changes such as ability to scoot the
    kernel code/data from start of memory map etc)

    - Quite a few updates for EZChip (Mellanox) platform

    - Fixes to fault/exception printing

    * tag 'arc-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc: (26 commits)
    ARC: Re-enable MMU upon Machine Check exception
    ARC: Show fault information passed to show_kernel_fault_diag()
    ARC: [plat-hsdk] initial port for HSDK board
    ARC: mm: Decouple RAM base address from kernel link address
    ARCv2: IOC: Tighten up the contraints (specifically base / size alignment)
    ARC: [plat-axs103] refactor the DT fudging code
    ARC: [plat-axs103] use clk driver #2: Add core pll node to DT to manage cpu clk
    ARC: [plat-axs103] use clk driver #1: Get rid of platform specific cpu clk setting
    ARCv2: SLC: provide a line based flush routine for debugging
    ARC: Hardcode ARCH_DMA_MINALIGN to max line length we may have
    ARC: [plat-eznps] handle extra aux regs #2: kernel/entry exit
    ARC: [plat-eznps] handle extra aux regs #1: save/restore on context switch
    ARC: [plat-eznps] avoid toggling of DPC register
    ARC: [plat-eznps] Update the init sequence of aux regs per cpu.
    ARC: [plat-eznps] new command line argument for HW scheduler at MTM
    ARC: set boot print log level to PR_INFO
    ARC: [plat-eznps] Handle user memory error same in simulation and silicon
    ARC: [plat-eznps] use schd.wft instruction instead of sleep at idle task
    ARC: create cpu specific version of arch_cpu_idle()
    ARC: [plat-eznps] spinlock aware for MTM
    ...

    Linus Torvalds
     

05 Sep, 2017

1 commit

  • Pull locking updates from Ingo Molnar:

    - Add 'cross-release' support to lockdep, which allows APIs like
    completions, where it's not the 'owner' who releases the lock, to be
    tracked. It's all activated automatically under
    CONFIG_PROVE_LOCKING=y.

    - Clean up (restructure) the x86 atomics op implementation to be more
    readable, in preparation of KASAN annotations. (Dmitry Vyukov)

    - Fix static keys (Paolo Bonzini)

    - Add killable versions of down_read() et al (Kirill Tkhai)

    - Rework and fix jump_label locking (Marc Zyngier, Paolo Bonzini)

    - Rework (and fix) tlb_flush_pending() barriers (Peter Zijlstra)

    - Remove smp_mb__before_spinlock() and convert its usages, introduce
    smp_mb__after_spinlock() (Peter Zijlstra)

    * 'locking-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (56 commits)
    locking/lockdep/selftests: Fix mixed read-write ABBA tests
    sched/completion: Avoid unnecessary stack allocation for COMPLETION_INITIALIZER_ONSTACK()
    acpi/nfit: Fix COMPLETION_INITIALIZER_ONSTACK() abuse
    locking/pvqspinlock: Relax cmpxchg's to improve performance on some architectures
    smp: Avoid using two cache lines for struct call_single_data
    locking/lockdep: Untangle xhlock history save/restore from task independence
    locking/refcounts, x86/asm: Disable CONFIG_ARCH_HAS_REFCOUNT for the time being
    futex: Remove duplicated code and fix undefined behaviour
    Documentation/locking/atomic: Finish the document...
    locking/lockdep: Fix workqueue crossrelease annotation
    workqueue/lockdep: 'Fix' flush_work() annotation
    locking/lockdep/selftests: Add mixed read-write ABBA tests
    mm, locking/barriers: Clarify tlb_flush_pending() barriers
    locking/lockdep: Make CONFIG_LOCKDEP_CROSSRELEASE and CONFIG_LOCKDEP_COMPLETIONS truly non-interactive
    locking/lockdep: Explicitly initialize wq_barrier::done::map
    locking/lockdep: Rename CONFIG_LOCKDEP_COMPLETE to CONFIG_LOCKDEP_COMPLETIONS
    locking/lockdep: Reword title of LOCKDEP_CROSSRELEASE config
    locking/lockdep: Make CONFIG_LOCKDEP_CROSSRELEASE part of CONFIG_PROVE_LOCKING
    locking/refcounts, x86/asm: Implement fast refcount overflow protection
    locking/lockdep: Fix the rollback and overwrite detection logic in crossrelease
    ...

    Linus Torvalds
     

04 Sep, 2017

1 commit

  • Pull RCU updates from Ingo Molnad:
    "The main RCU related changes in this cycle were:

    - Removal of spin_unlock_wait()
    - SRCU updates
    - RCU torture-test updates
    - RCU Documentation updates
    - Extend the sys_membarrier() ABI with the MEMBARRIER_CMD_PRIVATE_EXPEDITED variant
    - Miscellaneous RCU fixes
    - CPU-hotplug fixes"

    * 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (63 commits)
    arch: Remove spin_unlock_wait() arch-specific definitions
    locking: Remove spin_unlock_wait() generic definitions
    drivers/ata: Replace spin_unlock_wait() with lock/unlock pair
    ipc: Replace spin_unlock_wait() with lock/unlock pair
    exit: Replace spin_unlock_wait() with lock/unlock pair
    completion: Replace spin_unlock_wait() with lock/unlock pair
    doc: Set down RCU's scheduling-clock-interrupt needs
    doc: No longer allowed to use rcu_dereference on non-pointers
    doc: Add RCU files to docbook-generation files
    doc: Update memory-barriers.txt for read-to-write dependencies
    doc: Update RCU documentation
    membarrier: Provide expedited private command
    rcu: Remove exports from rcu_idle_exit() and rcu_idle_enter()
    rcu: Add warning to rcu_idle_enter() for irqs enabled
    rcu: Make rcu_idle_enter() rely on callers disabling irqs
    rcu: Add assertions verifying blocked-tasks list
    rcu/tracing: Set disable_rcu_irq_enter on rcu_eqs_exit()
    rcu: Add TPS() protection for _rcu_barrier_trace strings
    rcu: Use idle versions of swait to make idle-hack clear
    swait: Add idle variants which don't contribute to load average
    ...

    Linus Torvalds
     

02 Sep, 2017

1 commit

  • [Needed for HSDK]

    Currently the first page of system (hence RAM base) is assumed to be
    @ CONFIG_LINUX_LINK_BASE, where kernel itself is linked.

    However is case of HSDK platform, for reasons explained in that patch,
    this is not true. kernel needs to be linked @ 0x9000_0000 while DDR
    is still wired at 0x8000_0000. To properly account for this 256M of RAM,
    we need to introduce a new option and base page frame accountiing off of
    it.

    Signed-off-by: Eugeniy Paltsev
    Signed-off-by: Vineet Gupta
    [vgupta: renamed CONFIG_KERNEL_RAM_BASE_ADDRESS => CONFIG_LINUX_RAM_BASE
    : simplified changelog]

    Eugeniy Paltsev
     

31 Aug, 2017

2 commits

  • Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • Current implementation relies on L1 line length which might easily
    be smaller than L2 line (which is usually the case BTW).

    Imagine this typical case: L2 line is 128 bytes while L1 line is
    64-bytes. Now we want to allocate small buffer and later use it for DMA
    (consider IOC is not available).

    kmalloc() allocates small KMALLOC_MIN_SIZE-sized, KMALLOC_MIN_SIZE-aligned
    That way if buffer happens to be aligned to L1 line and not L2 line we'll be
    flushing and invalidating extra portions of data from L2 which will cause
    cache coherency issues.

    And since KMALLOC_MIN_SIZE is bound to ARCH_DMA_MINALIGN the fix could
    be simple - set ARCH_DMA_MINALIGN to the largest cache line we may ever
    get. As of today neither L1 of ARC700 and ARC HS38 nor SLC might not be
    longer than 128 bytes.

    Signed-off-by: Alexey Brodkin
    Signed-off-by: Vineet Gupta

    Alexey Brodkin
     

29 Aug, 2017

5 commits


26 Aug, 2017

1 commit

  • There is code duplicated over all architecture's headers for
    futex_atomic_op_inuser. Namely op decoding, access_ok check for uaddr,
    and comparison of the result.

    Remove this duplication and leave up to the arches only the needed
    assembly which is now in arch_futex_atomic_op_inuser.

    This effectively distributes the Will Deacon's arm64 fix for undefined
    behaviour reported by UBSAN to all architectures. The fix was done in
    commit 5f16a046f8e1 (arm64: futex: Fix undefined behaviour with
    FUTEX_OP_OPARG_SHIFT usage). Look there for an example dump.

    And as suggested by Thomas, check for negative oparg too, because it was
    also reported to cause undefined behaviour report.

    Note that s390 removed access_ok check in d12a29703 ("s390/uaccess:
    remove pointless access_ok() checks") as access_ok there returns true.
    We introduce it back to the helper for the sake of simplicity (it gets
    optimized away anyway).

    Signed-off-by: Jiri Slaby
    Signed-off-by: Thomas Gleixner
    Acked-by: Russell King
    Acked-by: Michael Ellerman (powerpc)
    Acked-by: Heiko Carstens [s390]
    Acked-by: Chris Metcalf [for tile]
    Reviewed-by: Darren Hart (VMware)
    Reviewed-by: Will Deacon [core/arm64]
    Cc: linux-mips@linux-mips.org
    Cc: Rich Felker
    Cc: linux-ia64@vger.kernel.org
    Cc: linux-sh@vger.kernel.org
    Cc: peterz@infradead.org
    Cc: Benjamin Herrenschmidt
    Cc: Max Filippov
    Cc: Paul Mackerras
    Cc: sparclinux@vger.kernel.org
    Cc: Jonas Bonn
    Cc: linux-s390@vger.kernel.org
    Cc: linux-arch@vger.kernel.org
    Cc: Yoshinori Sato
    Cc: linux-hexagon@vger.kernel.org
    Cc: Helge Deller
    Cc: "James E.J. Bottomley"
    Cc: Catalin Marinas
    Cc: Matt Turner
    Cc: linux-snps-arc@lists.infradead.org
    Cc: Fenghua Yu
    Cc: Arnd Bergmann
    Cc: linux-xtensa@linux-xtensa.org
    Cc: Stefan Kristiansson
    Cc: openrisc@lists.librecores.org
    Cc: Ivan Kokshaysky
    Cc: Stafford Horne
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Richard Henderson
    Cc: Chris Zankel
    Cc: Michal Simek
    Cc: Tony Luck
    Cc: linux-parisc@vger.kernel.org
    Cc: Vineet Gupta
    Cc: Ralf Baechle
    Cc: Richard Kuo
    Cc: linux-alpha@vger.kernel.org
    Cc: Martin Schwidefsky
    Cc: linuxppc-dev@lists.ozlabs.org
    Cc: "David S. Miller"
    Link: http://lkml.kernel.org/r/20170824073105.3901-1-jslaby@suse.cz

    Jiri Slaby
     

25 Aug, 2017

1 commit


17 Aug, 2017

1 commit

  • There is no agreed-upon definition of spin_unlock_wait()'s semantics,
    and it appears that all callers could do just as well with a lock/unlock
    pair. This commit therefore removes the underlying arch-specific
    arch_spin_unlock_wait() for all architectures providing them.

    Signed-off-by: Paul E. McKenney
    Cc:
    Cc: Peter Zijlstra
    Cc: Alan Stern
    Cc: Andrea Parri
    Cc: Linus Torvalds
    Acked-by: Will Deacon
    Acked-by: Boqun Feng

    Paul E. McKenney
     

10 Aug, 2017

1 commit

  • Those architectures that have a special atomic_set implementation also
    need a special atomic_set_release(), because for the very same reason
    WRITE_ONCE() is broken for them, smp_store_release() is too.

    The vast majority is architectures that have spinlock hash based atomic
    implementation except hexagon which seems to have a hardware 'feature'.

    The spinlock based atomics should be SC, that is, none of them appear to
    place extra barriers in atomic_cmpxchg() or any of the other SC atomic
    primitives and therefore seem to rely on their spinlock implementation
    being SC (I did not fully validate all that).

    Therefore, the normal atomic_set() is SC and can be used at
    atomic_set_release().

    Signed-off-by: Peter Zijlstra (Intel)
    Acked-by: Chris Metcalf [for tile]
    Cc: Boqun Feng
    Cc: Linus Torvalds
    Cc: Paul McKenney
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: Will Deacon
    Cc: davem@davemloft.net
    Cc: james.hogan@imgtec.com
    Cc: jejb@parisc-linux.org
    Cc: rkuo@codeaurora.org
    Cc: vgupta@synopsys.com
    Link: http://lkml.kernel.org/r/20170609110506.yod47flaav3wgoj5@hirez.programming.kicks-ass.net
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

04 Aug, 2017

2 commits

  • PAE40 confiuration in hardware extends some of the address registers
    for TLB/cache ops to 2 words.

    So far kernel was NOT setting the higher word if feature was not enabled
    in software which is wrong. Those need to be set to 0 in such case.

    Normally this would be done in the cache flush / tlb ops, however since
    these registers only exist conditionally, this would have to be
    conditional to a flag being set on boot which is expensive/ugly -
    specially for the more common case of PAE exists but not in use.
    Optimize that by zero'ing them once at boot - nobody will write to
    them afterwards

    Cc: stable@vger.kernel.org #4.4+
    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • It is necessary to explicitly set both SLC_AUX_RGN_START1 and SLC_AUX_RGN_END1
    which hold MSB bits of the physical address correspondingly of region start
    and end otherwise SLC region operation is executed in unpredictable manner

    Without this patch, SLC flushes on HSDK (IOC disabled) were taking
    seconds.

    Cc: stable@vger.kernel.org #4.4+
    Reported-by: Vladimir Kondratiev
    Signed-off-by: Alexey Brodkin
    Signed-off-by: Vineet Gupta
    [vgupta: PAR40 regs only written if PAE40 exist]

    Alexey Brodkin
     

10 Jul, 2017

1 commit

  • Since commit fcc8487d477a ("uapi: export all headers under uapi
    directories"), all (and only) headers under uapi directories are
    exported, but asm-generic wrappers are still exceptions.

    To complete de-coupling the uapi from kernel headers, move generic-y
    of exported headers to uapi/asm/Kbuild.

    With this change, "make headers_install" will just need to parse
    uapi/asm/Kbuild to build up exported headers.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

04 Jul, 2017

1 commit

  • Pull timer updates from Thomas Gleixner:
    "A rather large update for timers/timekeeping:

    - compat syscall consolidation (Al Viro)

    - Posix timer consolidation (Christoph Helwig / Thomas Gleixner)

    - Cleanup of the device tree based initialization for clockevents and
    clocksources (Daniel Lezcano)

    - Consolidation of the FTTMR010 clocksource/event driver (Linus
    Walleij)

    - The usual set of small fixes and updates all over the place"

    * 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (93 commits)
    timers: Make the cpu base lock raw
    clocksource/drivers/mips-gic-timer: Fix an error code in 'gic_clocksource_of_init()'
    clocksource/drivers/fsl_ftm_timer: Unmap region obtained by of_iomap
    clocksource/drivers/tcb_clksrc: Make IO endian agnostic
    clocksource/drivers/sun4i: Switch to the timer-of common init
    clocksource/drivers/timer-of: Fix invalid iomap check
    Revert "ktime: Simplify ktime_compare implementation"
    clocksource/drivers: Fix uninitialized variable use in timer_of_init
    kselftests: timers: Add test for frequency step
    kselftests: timers: Fix inconsistency-check to not ignore first timestamp
    time: Add warning about imminent deprecation of CONFIG_GENERIC_TIME_VSYSCALL_OLD
    time: Clean up CLOCK_MONOTONIC_RAW time handling
    posix-cpu-timers: Make timespec to nsec conversion safe
    itimer: Make timeval to nsec conversion range limited
    timers: Fix parameter description of try_to_del_timer_sync()
    ktime: Simplify ktime_compare implementation
    clocksource/drivers/fttmr010: Factor out clock read code
    clocksource/drivers/fttmr010: Implement delay timer
    clocksource/drivers: Add timer-of common init routine
    clocksource/drivers/tcb_clksrc: Save timer context on suspend/resume
    ...

    Linus Torvalds
     

29 Jun, 2017

1 commit

  • The only user of thread_saved_pc() in non-arch-specific code was removed
    in commit 8243d5597793 ("sched/core: Remove pointless printout in
    sched_show_task()"). Remove the implementations as well.

    Some architectures use thread_saved_pc() in their arch-specific code.
    Leave their thread_saved_pc() intact.

    Signed-off-by: Tobias Klauser
    Acked-by: Geert Uytterhoeven
    Cc: Ingo Molnar
    Signed-off-by: Linus Torvalds

    Tobias Klauser
     

04 Jun, 2017

1 commit

  • By moving the kernel side __SI_* defintions right next to the userspace
    ones we can kill the non-uapi versions of include
    include/asm-generic/siginfo.h and untangle the unholy mess of includes.

    [ tglx: Removed uapi/asm/siginfo.h from m32r, microblaze, mn10300 and score ]

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Thomas Gleixner
    Cc: linux-arch@vger.kernel.org
    Cc: Fenghua Yu
    Cc: Tony Luck
    Cc: linux-ia64@vger.kernel.org
    Cc: Arnd Bergmann
    Cc: sparclinux@vger.kernel.org
    Cc: "David S. Miller"
    Link: http://lkml.kernel.org/r/20170603190102.28866-6-hch@lst.de

    Christoph Hellwig
     

11 May, 2017

1 commit

  • …asahiroy/linux-kbuild

    Pull Kbuild UAPI updates from Masahiro Yamada:
    "Improvement of headers_install by Nicolas Dichtel.

    It has been long since the introduction of uapi directories, but the
    de-coupling of exported headers has not been completed. Headers listed
    in header-y are exported whether they exist in uapi directories or
    not. His work fixes this inconsistency.

    All (and only) headers under uapi directories are now exported. The
    asm-generic wrappers are still exceptions, but this is a big step
    forward"

    * tag 'kbuild-uapi-v4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
    arch/include: remove empty Kbuild files
    uapi: export all arch specifics directories
    uapi: export all headers under uapi directories
    smc_diag.h: fix include from userland
    btrfs_tree.h: fix include from userland
    uapi: includes linux/types.h before exporting files
    Makefile.headersinst: remove destination-y option
    Makefile.headersinst: cleanup input files
    x86: stop exporting msr-index.h to userland
    nios2: put setup.h in uapi
    h8300: put bitsperlong.h in uapi

    Linus Torvalds
     

10 May, 2017

2 commits

  • Regularly, when a new header is created in include/uapi/, the developer
    forgets to add it in the corresponding Kbuild file. This error is usually
    detected after the release is out.

    In fact, all headers under uapi directories should be exported, thus it's
    useless to have an exhaustive list.

    After this patch, the following files, which were not exported, are now
    exported (with make headers_install_all):
    asm-arc/kvm_para.h
    asm-arc/ucontext.h
    asm-blackfin/shmparam.h
    asm-blackfin/ucontext.h
    asm-c6x/shmparam.h
    asm-c6x/ucontext.h
    asm-cris/kvm_para.h
    asm-h8300/shmparam.h
    asm-h8300/ucontext.h
    asm-hexagon/shmparam.h
    asm-m32r/kvm_para.h
    asm-m68k/kvm_para.h
    asm-m68k/shmparam.h
    asm-metag/kvm_para.h
    asm-metag/shmparam.h
    asm-metag/ucontext.h
    asm-mips/hwcap.h
    asm-mips/reg.h
    asm-mips/ucontext.h
    asm-nios2/kvm_para.h
    asm-nios2/ucontext.h
    asm-openrisc/shmparam.h
    asm-parisc/kvm_para.h
    asm-powerpc/perf_regs.h
    asm-sh/kvm_para.h
    asm-sh/ucontext.h
    asm-tile/shmparam.h
    asm-unicore32/shmparam.h
    asm-unicore32/ucontext.h
    asm-x86/hwcap2.h
    asm-xtensa/kvm_para.h
    drm/armada_drm.h
    drm/etnaviv_drm.h
    drm/vgem_drm.h
    linux/aspeed-lpc-ctrl.h
    linux/auto_dev-ioctl.h
    linux/bcache.h
    linux/btrfs_tree.h
    linux/can/vxcan.h
    linux/cifs/cifs_mount.h
    linux/coresight-stm.h
    linux/cryptouser.h
    linux/fsmap.h
    linux/genwqe/genwqe_card.h
    linux/hash_info.h
    linux/kcm.h
    linux/kcov.h
    linux/kfd_ioctl.h
    linux/lightnvm.h
    linux/module.h
    linux/nbd-netlink.h
    linux/nilfs2_api.h
    linux/nilfs2_ondisk.h
    linux/nsfs.h
    linux/pr.h
    linux/qrtr.h
    linux/rpmsg.h
    linux/sched/types.h
    linux/sed-opal.h
    linux/smc.h
    linux/smc_diag.h
    linux/stm.h
    linux/switchtec_ioctl.h
    linux/vfio_ccw.h
    linux/wil6210_uapi.h
    rdma/bnxt_re-abi.h

    Note that I have removed from this list the files which are generated in every
    exported directories (like .install or .install.cmd).

    Thanks to Julien Floret for the tip to get all
    subdirs with a pure makefile command.

    For the record, note that exported files for asm directories are a mix of
    files listed by:
    - include/uapi/asm-generic/Kbuild.asm;
    - arch//include/uapi/asm/Kbuild;
    - arch//include/asm/Kbuild.

    Signed-off-by: Nicolas Dichtel
    Acked-by: Daniel Vetter
    Acked-by: Russell King
    Acked-by: Mark Salter
    Acked-by: Michael Ellerman (powerpc)
    Signed-off-by: Masahiro Yamada

    Nicolas Dichtel
     
  • Pull ARC updates from Vineet Gupta:

    - AXS10x platform clk updates for I2S, PGU

    - add region based cache flush operation for ARCv2 cores

    - enforce PAE40 dependency on HIGHMEM

    - ptrace support for additional regs in ARCv2 cores

    - fix build failure in linux-next dut to a header include ordering
    change

    * tag 'arc-4.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
    Revert "ARCv2: Allow enabling PAE40 w/o HIGHMEM"
    ARC: mm: fix build failure in linux-next for UP builds
    ARCv2: ptrace: provide regset for accumulator/r30 regs
    elf: Add ARCv2 specific core note section
    ARCv2: mm: micro-optimize region flush generated code
    ARCv2: mm: Merge 2 updates to DC_CTRL for region flush
    ARCv2: mm: Implement cache region flush operations
    ARC: mm: Move full_page computation into cache version agnostic wrapper
    arc: axs10x: Fix ARC PGU default clock frequency
    arc: axs10x: Add DT bindings for I2S audio playback

    Linus Torvalds
     

06 May, 2017

1 commit

  • kisskb build service reported ARC defconfig build failures in linux-next

    | arch/arc/include/asm/mmu.h:75:21: error: 'NR_CPUS' undeclared here (not in a function)
    | make[3]: *** [arch/arc/mm/ioremap.o] Error 1
    | make[2]: *** [arch/arc/mm] Error 2
    | make[1]: *** [arch/arc] Error 2

    which I bisected to a subtle side-effect of a totally benign mm patch
    ("mm, vmalloc: properly track vmalloc users") which caused a header
    include chain deviation - asm/mmu.h using NR_CPUS before including
    linux/threads.h

    Fix that by adding the dependnet header and while it at fix a related
    header to include linux headers aheads of asm headers as sometimes that
    slso triggers such issues !

    Reported-by: noreply@ellerman.id.au
    Signed-off-by: Vineet Gupta

    Vineet Gupta