31 Jan, 2019

3 commits

  • 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
     
  • commit a3010a0465383300f909f62b8a83f83ffa7b2517 upstream.

    In setup_arch_memory we reserve the memory area wherein the kernel
    is located. Current implementation may reserve more memory than
    it actually required in case of CONFIG_LINUX_LINK_BASE is not
    equal to CONFIG_LINUX_RAM_BASE. This happens because we calculate
    start of the reserved region relatively to the CONFIG_LINUX_RAM_BASE
    and end of the region relatively to the CONFIG_LINUX_RAM_BASE.

    For example in case of HSDK board we wasted 256MiB of physical memory:
    ------------------->8------------------------------
    Memory: 770416K/1048576K available (5496K kernel code,
    240K rwdata, 1064K rodata, 2200K init, 275K bss,
    278160K reserved, 0K cma-reserved)
    ------------------->8------------------------------

    Fix that.

    Fixes: 9ed68785f7f2b ("ARC: mm: Decouple RAM base address from kernel link addr")
    Cc: stable@vger.kernel.org #4.14+
    Signed-off-by: Eugeniy Paltsev
    Signed-off-by: Vineet Gupta
    Signed-off-by: Greg Kroah-Hartman

    Eugeniy Paltsev
     
  • commit e6a72b7daeeb521753803550f0ed711152bb2555 upstream.

    ARCv2 optimized memset uses PREFETCHW instruction for prefetching the
    next cache line but doesn't ensure that the line is not past the end of
    the buffer. PRETECHW changes the line ownership and marks it dirty,
    which can cause issues in SMP config when next line was already owned by
    other core. Fix the issue by avoiding the PREFETCHW

    Some more details:

    The current code has 3 logical loops (ignroing the unaligned part)
    (a) Big loop for doing aligned 64 bytes per iteration with PREALLOC
    (b) Loop for 32 x 2 bytes with PREFETCHW
    (c) any left over bytes

    loop (a) was already eliding the last 64 bytes, so PREALLOC was
    safe. The fix was removing PREFETCW from (b).

    Another potential issue (applicable to configs with 32 or 128 byte L1
    cache line) is that PREALLOC assumes 64 byte cache line and may not do
    the right thing specially for 32b. While it would be easy to adapt,
    there are no known configs with those lie sizes, so for now, just
    compile out PREALLOC in such cases.

    Signed-off-by: Eugeniy Paltsev
    Cc: stable@vger.kernel.org #4.4+
    Signed-off-by: Vineet Gupta
    [vgupta: rewrote changelog, used asm .macro vs. "C" macro]
    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
     

08 Dec, 2018

2 commits

  • commit 6b04114f6fae5e84d33404c2970b1949c032546e upstream.

    By default NFSv3 doesn't support ACL (Access Control Lists)
    which might be quite convenient to have so that
    mounted NFS behaves exactly as any other local file-system.

    In particular missing support of ACL makes umask useless.
    This among other thigs fixes Glibc's "nptl/tst-umask1".

    Signed-off-by: Alexey Brodkin
    Cc: Cupertino Miranda
    Cc: stable@vger.kernel.org #4.14+
    Signed-off-by: Vineet Gupta
    Signed-off-by: Greg Kroah-Hartman

    Alexey Brodkin
     
  • commit b7cc40c32a8bfa6f2581a71747f6a7d491fe43ba upstream.

    Change the default defconfig (used with 'make defconfig') to the ARCv2
    nsim_hs_defconfig, and also switch the default Kconfig ISA selection to
    ARCv2.

    This allows several default defconfigs (e.g. make defconfig, make
    allnoconfig, make tinyconfig) to all work with ARCv2 by default.

    Note since we change default architecture from ARCompact to ARCv2
    it's required to explicitly mention architecture type in ARCompact
    defconfigs otherwise ARCv2 will be implied and binaries will be
    generated for ARCv2.

    Cc: # 4.4.x
    Signed-off-by: Kevin Hilman
    Signed-off-by: Alexey Brodkin
    Signed-off-by: Vineet Gupta
    Signed-off-by: Greg Kroah-Hartman

    Kevin Hilman
     

20 Oct, 2018

2 commits

  • commit 40660f1fcee8d524a60b5101538e42b1f39f106d upstream.

    There's not much sense in doing that because if user or
    his build-system didn't set CROSS_COMPILE we still may
    very well make incorrect guess.

    But as it turned out setting CROSS_COMPILE is not as harmless
    as one may think: with recent changes that implemented automatic
    discovery of __host__ gcc features unconditional setup of
    CROSS_COMPILE leads to failures on execution of "make xxx_defconfig"
    with absent cross-compiler, for more info see [1].

    Set CROSS_COMPILE as well gets in the way if we want only to build
    .dtb's (again with absent cross-compiler which is not really needed
    for building .dtb's), see [2].

    Note, we had to change LIBGCC assignment type from ":=" to "="
    so that is is resolved on its usage, otherwise if it is resolved
    at declaration time with missing CROSS_COMPILE we're getting this
    error message from host GCC:

    | gcc: error: unrecognized command line option -mmedium-calls
    | gcc: error: unrecognized command line option -mno-sdata

    [1] http://lists.infradead.org/pipermail/linux-snps-arc/2018-September/004308.html
    [2] http://lists.infradead.org/pipermail/linux-snps-arc/2018-September/004320.html

    Signed-off-by: Alexey Brodkin
    Cc: Masahiro Yamada
    Cc: Rob Herring
    Signed-off-by: Vineet Gupta
    Signed-off-by: Greg Kroah-Hartman

    Alexey Brodkin
     
  • commit 615f64458ad890ef94abc879a66d8b27236e733a upstream.

    This check is very naive: we simply test if GCC invoked without
    "-mcpu=XXX" has ARC700 define set. In that case we think that GCC
    was built with "--with-cpu=arc700" and has libgcc built for ARC700.

    Otherwise if ARC700 is not defined we think that everythng was built
    for ARCv2.

    But in reality our life is much more interesting.

    1. Regardless of GCC configuration (i.e. what we pass in "--with-cpu"
    it may generate code for any ARC core).

    2. libgcc might be built with explicitly specified "--mcpu=YYY"

    That's exactly what happens in case of multilibbed toolchains:
    - GCC is configured with default settings
    - All the libs built for many different CPU flavors

    I.e. that check gets in the way of usage of multilibbed
    toolchains. And even non-multilibbed toolchains are affected.
    OpenEmbedded also builds GCC without "--with-cpu" because
    each and every target component later is compiled with explicitly
    set "-mcpu=ZZZ".

    Acked-by: Rob Herring
    Signed-off-by: Alexey Brodkin
    Signed-off-by: Vineet Gupta
    Signed-off-by: Greg Kroah-Hartman

    Alexey Brodkin
     

13 Oct, 2018

1 commit

  • commit c58a584f05e35d1d4342923cd7aac07d9c3d3d16 upstream.

    Per ARC TLS ABI, r25 is designated TP (thread pointer register).
    However so far kernel didn't do any special treatment, like setting up
    usermode r25, even for CLONE_SETTLS. We instead relied on libc runtime
    to do this, in say clone libc wrapper [1]. This was deliberate to keep
    kernel ABI agnostic (userspace could potentially change TP, specially
    for different ARC ISA say ARCompact vs. ARCv2 with different spare
    registers etc)

    However userspace setting up r25, after clone syscall opens a race, if
    child is not scheduled and gets a signal instead. It starts off in
    userspace not in clone but in a signal handler and anything TP sepcific
    there such as pthread_self() fails which showed up with uClibc
    testsuite nptl/tst-kill6 [2]

    Fix this by having kernel populate r25 to TP value. So this locks in
    ABI, but it was not going to change anyways, and fwiw is same for both
    ARCompact (arc700 core) and ARCvs (HS3x cores)

    [1] https://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/tree/libc/sysdeps/linux/arc/clone.S
    [2] https://github.com/wbx-github/uclibc-ng-test/blob/master/test/nptl/tst-kill6.c

    Fixes: ARC STAR 9001378481
    Cc: stable@vger.kernel.org
    Reported-by: Nikita Sobolev
    Signed-off-by: Vineet Gupta
    Signed-off-by: Greg Kroah-Hartman

    Vineet Gupta
     

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
     

20 Sep, 2018

1 commit

  • commit c83532fb0fe053d2e43e9387354cb1b52ba26427 upstream.

    SWAP support on ARC was fixed earlier by
    commit 6e3761145a9b ("ARC: Fix CONFIG_SWAP")
    so now we may safely enable it on platforms that
    have external media like USB and SD-card.

    Note: it was already allowed for HSDK

    Signed-off-by: Alexey Brodkin
    Cc: stable@vger.kernel.org # 6e3761145a9b: ARC: Fix CONFIG_SWAP
    Signed-off-by: Vineet Gupta
    Signed-off-by: Greg Kroah-Hartman

    Alexey Brodkin
     

05 Sep, 2018

6 commits

  • [ Upstream commit ec837d620c750c0d4996a907c8c4f7febe1bbeee ]

    Fix type warnings in arch/arc/mm/cache.c.

    ../arch/arc/mm/cache.c: In function 'flush_anon_page':
    ../arch/arc/mm/cache.c:1062:55: warning: passing argument 2 of '__flush_dcache_page' makes integer from pointer without a cast [-Wint-conversion]
    __flush_dcache_page((phys_addr_t)page_address(page), page_address(page));
    ^~~~~~~~~~~~~~~~~~
    ../arch/arc/mm/cache.c:1013:59: note: expected 'long unsigned int' but argument is of type 'void *'
    void __flush_dcache_page(phys_addr_t paddr, unsigned long vaddr)
    ~~~~~~~~~~~~~~^~~~~

    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 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 9e2ea405543d9ddfe05b351f1679e53bd9c11f80 ]

    Fix printk format warning in arch/arc/plat-eznps/mtm.c:

    In file included from ../include/linux/printk.h:7,
    from ../include/linux/kernel.h:14,
    from ../include/linux/list.h:9,
    from ../include/linux/smp.h:12,
    from ../arch/arc/plat-eznps/mtm.c:17:
    ../arch/arc/plat-eznps/mtm.c: In function 'set_mtm_hs_ctr':
    ../include/linux/kern_levels.h:5:18: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long int' [-Wformat=]
    #define KERN_SOH "\001" /* ASCII Start Of Header */
    ^~~~~~
    ../include/linux/kern_levels.h:11:18: note: in expansion of macro 'KERN_SOH'
    #define KERN_ERR KERN_SOH "3" /* error conditions */
    ^~~~~~~~
    ../include/linux/printk.h:308:9: note: in expansion of macro 'KERN_ERR'
    printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
    ^~~~~~~~
    ../arch/arc/plat-eznps/mtm.c:166:3: note: in expansion of macro 'pr_err'
    pr_err("** Invalid @nps_mtm_hs_ctr [%d] needs to be [%d:%d] (incl)\n",
    ^~~~~~
    ../arch/arc/plat-eznps/mtm.c:166:40: note: format string is defined here
    pr_err("** Invalid @nps_mtm_hs_ctr [%d] needs to be [%d:%d] (incl)\n",
    ~^
    %ld
    The hs_ctr variable can just be int instead of long, so also change
    kstrtol() to kstrtoint() and leave the format string as %d.

    Also add 2 header files since they are used in mtm.c and we prefer
    not to depend on accidental/indirect #includes.

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

    Randy Dunlap
     
  • [ Upstream commit b1f32ce1c3d2c11959b7e6a2c58dc5197c581966 ]

    Add to fix build errors.
    Both ctop.h and use u32 types and cause many
    errors.

    Examples:
    ../include/soc/nps/common.h:71:4: error: unknown type name 'u32'
    u32 __reserved:20, cluster:4, core:4, thread:4;
    ../include/soc/nps/common.h:76:3: error: unknown type name 'u32'
    u32 value;
    ../include/soc/nps/common.h:124:4: error: unknown type name 'u32'
    u32 base:8, cl_x:4, cl_y:4,
    ../include/soc/nps/common.h:127:3: error: unknown type name 'u32'
    u32 value;

    ../arch/arc/plat-eznps/include/plat/ctop.h:83:4: error: unknown type name 'u32'
    u32 gen:1, gdis:1, clk_gate_dis:1, asb:1,
    ../arch/arc/plat-eznps/include/plat/ctop.h:86:3: error: unknown type name 'u32'
    u32 value;
    ../arch/arc/plat-eznps/include/plat/ctop.h:93:4: error: unknown type name 'u32'
    u32 csa:22, dmsid:6, __reserved:3, cs:1;
    ../arch/arc/plat-eznps/include/plat/ctop.h:95:3: error: unknown type name 'u32'
    u32 value;

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

    Randy Dunlap
     
  • [ Upstream commit 05b466bf846d2e8d2f0baf8dfd81a42cc933e237 ]

    Fixing compilation issue caused by missing struct nps_host_reg_aux_dpc
    definition.

    Fixes: 3f9cd874dcc87 ("ARC: [plat-eznps] avoid toggling of DPC register")
    Reported-by: Randy Dunlap
    Signed-off-by: Ofer Levi
    Signed-off-by: Vineet Gupta
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Ofer Levi
     
  • [ 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

3 commits

  • [ Upstream commit e8708786d4fe21c043d38d760f768949a3d71185 ]

    This is used in configs lacking hardware atomics to emulate atomic r-m-w
    for user space, implemented by disabling preemption in kernel.

    However there are issues in current implementation:

    1. Process not terminated if invalid user pointer passed:
    i.e. __get_user() failed.

    2. The reason for this patch was __put_user() failure not being handled
    either, specifically for the COW break scenario.
    The zero page is initially wired up and read from __get_user()
    succeeds. A subsequent write by __put_user() induces a
    Protection Violation, but COW can't finish as Linux page fault
    handler is disabled due to preempt disable.
    And what's worse is we silently return the stale value to user space.
    Fix this specific case by re-enabling preemption and explicitly
    fixing up the fault and retrying the whole sequence over.

    Cc: Max Filippov
    Cc: linux-arch@vger.kernel.org
    Signed-off-by: Alexey Brodkin
    Signed-off-by: Peter Zijlstra
    Signed-off-by: Vineet Gupta
    [vgupta: rewrote the changelog]
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Peter Zijlstra
     
  • [ 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
     
  • [ Upstream commit 74c11e300c103af47db5b658fdcf28002421e250 ]

    GCC built for arc*-*-linux has "-mmedium-calls" implicitly enabled by default
    thus we don't see any problems during Linux kernel compilation.
    ----------------------------->8------------------------
    arc-linux-gcc -mcpu=arc700 -Q --help=target | grep calls
    -mlong-calls [disabled]
    -mmedium-calls [enabled]
    ----------------------------->8------------------------

    But if we try to use so-called Elf32 toolchain with GCC configured for
    arc*-*-elf* then we'd see the following failure:
    ----------------------------->8------------------------
    init/do_mounts.o: In function 'init_rootfs':
    do_mounts.c:(.init.text+0x108): relocation truncated to fit: R_ARC_S21W_PCREL
    against symbol 'unregister_filesystem' defined in .text section in fs/filesystems.o

    arc-elf32-ld: final link failed: Symbol needs debug section which does not exist
    make: *** [vmlinux] Error 1
    ----------------------------->8------------------------

    That happens because neither "-mmedium-calls" nor "-mlong-calls" are enabled in
    Elf32 GCC:
    ----------------------------->8------------------------
    arc-elf32-gcc -mcpu=arc700 -Q --help=target | grep calls
    -mlong-calls [disabled]
    -mmedium-calls [disabled]
    ----------------------------->8------------------------

    Now to make it possible to use Elf32 toolchain for building Linux kernel
    we're explicitly add "-mmedium-calls" to CFLAGS.

    And since we add "-mmedium-calls" to the global CFLAGS there's no point in
    having per-file copies thus removing them.

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

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

    Alexey Brodkin
     

25 Jul, 2018

4 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 64234961c145606b36eaa82c47b11be842b21049 upstream.

    We used to have pre-set CONFIG_INITRAMFS_SOURCE with local path
    to intramfs in ARC defconfigs. This was quite convenient for
    in-house development but not that convenient for newcomers
    who obviusly don't have folders like "arc_initramfs" next to
    the Linux source tree. Which leads to quite surprising failure
    of defconfig building:
    ------------------------------->8-----------------------------
    ../scripts/gen_initramfs_list.sh: Cannot open '../../arc_initramfs_hs/'
    ../usr/Makefile:57: recipe for target 'usr/initramfs_data.cpio.gz' failed
    make[2]: *** [usr/initramfs_data.cpio.gz] Error 1
    ------------------------------->8-----------------------------

    So now when more and more people start to deal with our defconfigs
    let's make their life easier with removal of CONFIG_INITRAMFS_SOURCE.

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

    Alexey Brodkin
     
  • 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
     
  • commit af1fc5baa724c63ce1733dfcf855bad5ef6078e3 upstream.

    This manifsted as strace segfaulting on HSDK because gcc was targetting
    the accumulator registers as GPRs, which kernek was not saving/restoring
    by default.

    Cc: stable@vger.kernel.org #4.14+
    Signed-off-by: Vineet Gupta
    Signed-off-by: Greg Kroah-Hartman

    Vineet Gupta
     

30 May, 2018

5 commits

  • [ Upstream commit a29a25275452c97fe35815f1eb9564f2a07a1965 ]

    As we have option in u-boot to set CPU mask for running linux,
    we want to pass information to kernel about CPU cores should
    be brought up. So we patch kernel dtb in u-boot to set
    possible-cpus property.

    This also allows us to have correctly setuped MCIP debug mask.

    Signed-off-by: Eugeniy Paltsev
    Signed-off-by: Vineet Gupta
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Eugeniy Paltsev
     
  • [ Upstream commit f3205de98db2fc8083796dd5ad81b191e436fab8 ]

    As of today we use hardcoded MCIP debug mask, so if we launch
    kernel via debugger and kick fever cores than HW has all cpus
    hang at the momemt of setup MCIP debug mask.

    So update MCIP debug mask when the new cpu came online, instead of
    use hardcoded MCIP debug mask.

    Signed-off-by: Eugeniy Paltsev
    Signed-off-by: Vineet Gupta
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Eugeniy Paltsev
     
  • [ Upstream commit 07423d00a2b2a71a97e4287d9262cb83c4c4c89f ]

    In SMP systems, GFRC is used for clocksource. However by default the
    counter keeps running even when core is halted (say when debugging via a
    JTAG debugger). This confuses Linux timekeeping and triggers flase RCU stall
    splat such as below:

    | [ARCLinux]# while true; do ./shm_open_23-1.run-test ; done
    | Running with 1000 processes for 1000 objects
    | hrtimer: interrupt took 485060 ns
    |
    | create_cnt: 1000
    | Running with 1000 processes for 1000 objects
    | [ARCLinux]# INFO: rcu_preempt self-detected stall on CPU
    | 2-...: (1 GPs behind) idle=a01/1/0 softirq=135770/135773 fqs=0
    | INFO: rcu_preempt detected stalls on CPUs/tasks:
    | 0-...: (1 GPs behind) idle=71e/0/0 softirq=135264/135264 fqs=0
    | 2-...: (1 GPs behind) idle=a01/1/0 softirq=135770/135773 fqs=0
    | 3-...: (1 GPs behind) idle=4e0/0/0 softirq=134304/134304 fqs=0
    | (detected by 1, t=13648 jiffies, g=31493, c=31492, q=1)

    Starting from ARC HS v3.0 it's possible to tie GFRC to state of up-to 4
    ARC cores with help of GFRC's CORE register where we set a mask for
    cores which state we need to rely on.

    We update cpu mask every time new cpu came online instead of using
    hardcoded one or using mask generated from "possible_cpus" as we
    want it set correctly even if we run kernel on HW which has fewer cores
    than expected (or we launch kernel via debugger and kick fever cores
    than HW has)

    Note that GFRC halts when all cores have halted and thus relies on
    programming of Inter-Core-dEbug register to halt all cores when one
    halts.

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

    Eugeniy Paltsev
     
  • [ 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
     
  • [ Upstream commit 827cc2fa024dd6517d62de7a44c7b42f32af371b ]

    'default N' should be 'default n', though they happen to have the same
    effect here, due to undefined symbols (N in this case) evaluating to n
    in a tristate sense.

    Remove the default from ARC_EMUL_UNALIGNED instead of changing it. bool
    and tristate symbols implicitly default to n.

    Discovered with the
    https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_ulfalizer_Kconfiglib_blob_master_examples_list-5Fundefined.py&d=DwIBAg&c=DPL6_X_6JkXFx7AXWqB0tg&r=c14YS-cH-kdhTOW89KozFhBtBJgs1zXscZojEZQ0THs&m=WxxD8ozR7QQUVzNCBksiznaisBGO_crN7PBOvAoju8s&s=1LmxsNqxwT-7wcInVpZ6Z1J27duZKSoyKxHIJclXU_M&e=
    script.

    Signed-off-by: Ulf Magnusson
    Signed-off-by: Vineet Gupta
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Ulf Magnusson
     

13 Feb, 2018

1 commit

  • commit 10b62a2f785ab55857380f0c63d9fa468fd8c676 upstream.

    Most of DT files are compiled under arch/*/boot/dts/, but we have some
    other directories, like drivers/of/unittest-data/. We often miss to
    add gitignore patterns per directory. Since there are no source files
    that end with .dtb or .dtb.S, we can ignore the patterns globally.

    Signed-off-by: Masahiro Yamada
    Signed-off-by: Rob Herring
    Signed-off-by: Greg Kroah-Hartman

    Masahiro Yamada
     

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
     

03 Nov, 2017

1 commit

  • …el/git/gregkh/driver-core

    Pull initial SPDX identifiers from Greg KH:
    "License cleanup: add SPDX license identifiers to some files

    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 <5
    lines).

    All documentation files were explicitly excluded.

    The following heuristics were used to determine which SPDX license
    identifiers to apply.

    - when both scanners couldn't find any license traces, file was
    considered to have no license information in it, and the top level
    COPYING file license applied.

    For non */uapi/* files that summary was:

    SPDX license identifier # files
    ---------------------------------------------------|-------
    GPL-2.0 11139

    and resulted in the first patch in this series.

    If that file was a */uapi/* path one, it was "GPL-2.0 WITH
    Linux-syscall-note" otherwise it was "GPL-2.0". Results of that
    was:

    SPDX license identifier # files
    ---------------------------------------------------|-------
    GPL-2.0 WITH Linux-syscall-note 930

    and resulted in the second patch in this series.

    - if a file had some form of licensing information in it, and was one
    of the */uapi/* ones, it was denoted with the Linux-syscall-note if
    any GPL family license was found in the file or had no licensing in
    it (per prior point). Results summary:

    SPDX license identifier # files
    ---------------------------------------------------|------
    GPL-2.0 WITH Linux-syscall-note 270
    GPL-2.0+ WITH Linux-syscall-note 169
    ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) 21
    ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) 17
    LGPL-2.1+ WITH Linux-syscall-note 15
    GPL-1.0+ WITH Linux-syscall-note 14
    ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) 5
    LGPL-2.0+ WITH Linux-syscall-note 4
    LGPL-2.1 WITH Linux-syscall-note 3
    ((GPL-2.0 WITH Linux-syscall-note) OR MIT) 3
    ((GPL-2.0 WITH Linux-syscall-note) AND MIT) 1

    and that resulted in the third patch in this series.

    - when the two scanners agreed on the detected license(s), that
    became the concluded license(s).

    - when there was disagreement between the two scanners (one detected
    a license but the other didn't, or they both detected different
    licenses) a manual inspection of the file occurred.

    - In most cases a manual inspection of the information in the file
    resulted in a clear resolution of the license that should apply
    (and which scanner probably needed to revisit its heuristics).

    - When it was not immediately clear, the license identifier was
    confirmed with lawyers working with the Linux Foundation.

    - If there was any question as to the appropriate license identifier,
    the file was flagged for further research and to be revisited later
    in time.

    In total, over 70 hours of logged manual review was done on the
    spreadsheet to determine the SPDX license identifiers to apply to the
    source files by Kate, Philippe, Thomas and, in some cases,
    confirmation by lawyers working with the Linux Foundation.

    Kate also obtained a third independent scan of the 4.13 code base from
    FOSSology, and compared selected files where the other two scanners
    disagreed against that SPDX file, to see if there was new insights.
    The Windriver scanner is based on an older version of FOSSology in
    part, so they are related.

    Thomas did random spot checks in about 500 files from the spreadsheets
    for the uapi headers and agreed with SPDX license identifier in the
    files he inspected. For the non-uapi files Thomas did random spot
    checks in about 15000 files.

    In initial set of patches against 4.14-rc6, 3 files were found to have
    copy/paste license identifier errors, and have been fixed to reflect
    the correct identifier.

    Additionally Philippe spent 10 hours this week doing a detailed manual
    inspection and review of the 12,461 patched files from the initial
    patch version early this week with:

    - a full scancode scan run, collecting the matched texts, detected
    license ids and scores

    - reviewing anything where there was a license detected (about 500+
    files) to ensure that the applied SPDX license was correct

    - reviewing anything where there was no detection but the patch
    license was not GPL-2.0 WITH Linux-syscall-note to ensure that the
    applied SPDX license was correct

    This produced a worksheet with 20 files needing minor correction. This
    worksheet was then exported into 3 different .csv files for the
    different types of files to be modified.

    These .csv files were then reviewed by Greg. Thomas wrote a script to
    parse the csv files and add the proper SPDX tag to the file, in the
    format that the file expected. This script was further refined by Greg
    based on the output to detect more types of files automatically and to
    distinguish between header and source .c files (which need different
    comment types.) Finally Greg ran the script using the .csv files to
    generate the patches.

    Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org>
    Reviewed-by: Philippe Ombredanne <pombredanne@nexb.com>
    Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>"

    * tag 'spdx_identifiers-4.14-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core:
    License cleanup: add SPDX license identifier to uapi header files with a license
    License cleanup: add SPDX license identifier to uapi header files with no license
    License cleanup: add SPDX GPL-2.0 license identifier to files with no license

    Linus Torvalds
     

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
     

12 Oct, 2017

2 commits

  • | SYSMAP System.map
    | Building modules, stage 2.
    | MODPOST 18 modules
    |ERROR: "smp_atomic_ops_lock" [drivers/gpu/drm/drm_kms_helper.ko] undefined!
    |ERROR: "smp_bitops_lock" [drivers/gpu/drm/drm_kms_helper.ko] undefined!
    |ERROR: "smp_atomic_ops_lock" [drivers/gpu/drm/drm.ko] undefined!
    | ERROR: "smp_bitops_lock" [drivers/gpu/drm/drm.ko] undefined!
    |../scripts/Makefile.modpost:91: recipe for target '__modpost' failed

    Signed-off-by: Vineet Gupta

    Vineet Gupta
     
  • With current SDIO CIU clock frequency (12500000Hz) DW MMC
    controller fails to initialize some SD cards (which don't
    support slow mode).

    So increase SDIO CIU frequency from 12500000Hz to 50000000Hz by
    switching from the default divisor value (div-by-8) to the
    minimum possible value of the divisor (div-by-2) in HSDK platform
    code.

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

    Eugeniy Paltsev
     

10 Oct, 2017

1 commit


06 Oct, 2017

1 commit


04 Oct, 2017

2 commits