06 Dec, 2018

1 commit

  • commit d48ebb24866edea2c35be02a878f25bc65529370 upstream.

    The function_graph_enter() function does the work of calling the function
    graph hook function and the management of the shadow stack, simplifying the
    work done in the architecture dependent prepare_ftrace_return().

    Have nds32 use the new code, and remove the shadow stack management as well as
    having to set up the trace structure.

    This is needed to prepare for a fix of a design bug on how the curr_ret_stack
    is used.

    Cc: Greentime Hu
    Cc: stable@kernel.org
    Fixes: 03274a3ffb449 ("tracing/fgraph: Adjust fgraph depth before calling trace return callback")
    Reviewed-by: Masami Hiramatsu
    Signed-off-by: Steven Rostedt (VMware)
    Signed-off-by: Greg Kroah-Hartman

    Steven Rostedt (VMware)
     

05 Sep, 2018

1 commit

  • This patch is used to fix nds32 allmodconfig/allyesconfig build error
    because GCOV kernel embeds counters in the kernel for each line
    and a part of that embed in __exit text. So we need to keep the
    EXIT_TEXT and EXIT_DATA if CONFIG_GCOV_KERNEL=y.

    Link: https://lkml.org/lkml/2018/9/1/125
    Signed-off-by: Greentime Hu
    Reviewed-by: Masami Hiramatsu

    Greentime Hu
     

04 Sep, 2018

12 commits

  • It can make sure that trace_hardirqs_off/trace_hardirqs_on can get a correct
    return address by frame pointer through __builtin_return_address() in this fix.

    Unable to handle kernel paging request at virtual address fffffffc
    pgd = 3c42e9cf
    [fffffffc] *pgd=02a9c000

    Internal error: Oops: 1 [#1]
    Modules linked in:
    CPU: 0
    PC is at trace_hardirqs_off+0x78/0xec
    LP is at common_exception_handler+0xda/0xf4
    pc : [] lp : [] Tainted: G W
    sp : ada60ab0 fp : efcaff48 gp : 3a020490
    r25: efcb0000 r24: 00000000
    r23: 00000000 r22: 00000000 r21: 00000000 r20: 000700c1
    r19: 000700ca r18: 3a21b018 r17: 00000001 r16: 00000002
    r15: 00000001 r14: 0000002a r13: 3a00a804 r12: ada60ab0
    r11: 3a113af8 r10: 3a01c530 r9 : 3a124404 r8 : 00120f9c
    r7 : b2352eba r6 : 00000000 r5 : 3a126b58 r4 : 00000000
    r3 : 3a1726a8 r2 : b2921000 r1 : 00000000 r0 : 00000000
    IRQs off Segment user
    Process init (pid: 1, stack limit = 0x069d7f15)
    Stack: (0xada60ab0 to 0xada61000)
    Stack: 0aa0: 00000000 00000003 3a110000 0011f000
    Stack: 0ac0: 00000005 00000000 00000000 00000000 ada60b10 3a01fe68 ada60b0c ada60b08
    Stack: 0ae0: 00000000 ada60ab8 ada60b30 3a020550 00000000 00000001 3a11c2f8 3a01c6e8
    Stack: 0b00: 3a01cb80 fffffba8 3a113af8 3a21b018 3a122c28 00003ec4 00000165 00000000
    Stack: 0b20: 3a126aec 0000006c 00000000 00000001 3a01fe68 00000000 00000003 00000000
    Stack: 0b40: 00000001 000003f8 3a020930 3a01c530 00000008 ada60c18 3a020490 3a003120
    Stack: 0b60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    Stack: 0b80: 00000000 00000000 00000000 00000000 ffff8000 00000000 00000000 00000000
    Stack: 0ba0: 00000000 00000001 3a020550 00000000 3a01d020 00000000 fffff000 fffff000
    Stack: 0bc0: 00000000 00000000 00000000 00000000 ada60f2c 00000000 00000001 00000000
    Stack: 0be0: 00000000 00000000 3a01fe68 fffffab0 00008034 00000008 3a0010cc 3a01fe68
    Stack: 0c00: 00000000 00000000 00000001 ada60c88 3a020490 3a0139d4 0009dc6f 00000000
    Stack: 0c20: 00000000 00000000 ada60fce fffff000 00000000 0000ebe0 3a020038 3a020550
    Stack: 0c40: ada60f20 ada60c90 3a0007f0 3a0002a8 ada60c8c 00000000 00000000 ada60c88
    Stack: 0c60: 3a020490 3a004570 00000000 00000000 ada60f20 3a0007f0 3a000000 00000000
    Stack: 0c80: 3a020490 3a004850 00000000 3a013f24 3a000000 00000000 3a01ff44 00000000
    Stack: 0ca0: 00000000 00000000 00000000 00000000 00000000 00000000 3a01ff84 3a01ff7c
    Stack: 0cc0: 3a01ff4c 3a01ff5c 3a01ff64 3a01ff9c 3a01ffa4 3a01ffac 3a01ff6c 3a01ff74
    Stack: 0ce0: 00000000 00000000 3a01ff44 00000000 00000000 00000000 00000000 00000000
    Stack: 0d00: 3a01ff8c 00000000 00000000 3a01ff94 00000000 00000000 00000000 00000000
    Stack: 0d20: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    Stack: 0d40: 3a01ffbc 3a01ffb4 00000000 00000000 00000000 00000000 00000000 00000000
    Stack: 0d60: 00000000 00000000 00000000 00000000 00000000 3a01ffc4 00000000 00000000
    Stack: 0d80: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    Stack: 0da0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    Stack: 0dc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 3a01ff54
    Stack: 0de0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    Stack: 0e00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    Stack: 0e20: 00000000 00000004 00000000 00000000 00000000 00000000 00000000 00000000
    Stack: 0e40: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    Stack: 0e60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    Stack: 0e80: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    Stack: 0ea0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    Stack: 0ec0: 00000000 00000000 00000000 00000000 ffffffff 00000000 00000000 00000000
    Stack: 0ee0: 00000000 00000000 00000000 00000000 ada60f20 00000000 00000000 00000000
    Stack: 0f00: 00000000 00000000 00000000 00000000 00000000 00000000 3a020490 3a000b24
    Stack: 0f20: 00000001 ada60fde 00000000 ada60fe4 ada60feb 00000000 00000021 3a038000
    Stack: 0f40: 00000010 0009dc6f 00000006 00001000 00000011 00000064 00000003 00008034
    Stack: 0f60: 00000004 00000020 00000005 00000008 00000007 3a000000 00000008 00000000
    Stack: 0f80: 00000009 0000ebe0 0000000b 00000000 0000000c 00000000 0000000d 00000000
    Stack: 0fa0: 0000000e 00000000 00000017 00000000 00000019 ada60fce 0000001f ada60ff6
    Stack: 0fc0: 00000000 00000000 00000000 b5010000 fa839914 23b5dd89 a2aea540 692fc82e
    Stack: 0fe0: 0074696e 454d4f48 54002f3d 3d4d5245 756e696c 692f0078 0074696e 00000000
    CPU: 0 PID: 1 Comm: init Tainted: G W 4.18.0-00015-g1888b64a2558-dirty #112
    Hardware name: andestech,ae3xx (DT)
    Call Trace:
    [] dump_stack+0x2c/0x38
    [] die+0x128/0x18c
    [] do_page_fault+0x3b8/0x4e0
    [] ret_from_exception+0x0/0x10
    [] common_exception_handler+0xda/0xf4

    Signed-off-by: Greentime Hu

    Greentime Hu
     
  • It may print too much information sometimes if the stack is wrong or
    too big. This patch can limit the debug information in a page of stack.

    Signed-off-by: Greentime Hu

    Greentime Hu
     
  • Use macro to replace the magic number.

    Signed-off-by: Zong Li
    Acked-by: Greentime Hu
    Signed-off-by: Greentime Hu

    Zong Li
     
  • We are not using NDS32 ABI 2 for now, just remove the preprocessor
    directives __NDS32_ABI_2.

    Signed-off-by: Zong Li
    Acked-by: Greentime Hu
    Signed-off-by: Greentime Hu

    Zong Li
     
  • Function graph tracer has modified the return address to
    'return_to_handler' on stack, and provide the 'ftrace_graph_ret_addr' to
    get the real return address.

    Signed-off-by: Zong Li
    Acked-by: Greentime Hu
    Signed-off-by: Greentime Hu

    Zong Li
     
  • This patch contains the implementation of dynamic function graph tracer.

    Signed-off-by: Zong Li
    Acked-by: Greentime Hu
    Signed-off-by: Greentime Hu

    Zong Li
     
  • This patch contains the implementation of dynamic function tracer.
    The mcount call is composed of three instructions, so there are three
    nop for enough placeholder.

    Signed-off-by: Zong Li
    Acked-by: Greentime Hu
    Signed-off-by: Greentime Hu

    Zong Li
     
  • This patch contains implementation of static function graph tracer.

    Signed-off-by: Zong Li
    Acked-by: Greentime Hu
    Signed-off-by: Greentime Hu

    Zong Li
     
  • This patch support the static function tracer. On nds32 ABI, we need to
    always push return address to stack for __builtin_return_address can
    work correctly, otherwise, it will get the wrong value of $lp at leaf
    function.

    Signed-off-by: Zong Li
    Acked-by: Greentime Hu
    Signed-off-by: Greentime Hu

    Zong Li
     
  • The compiler predefined macro 'NDS32_ABI_2' had been removed, it should
    use the '__NDS32_ABI_2' here.

    Signed-off-by: Zong Li
    Acked-by: Greentime Hu
    Signed-off-by: Greentime Hu

    Zong Li
     
  • Make sure of_device_id tables are NULL terminated.
    Found by coccinelle spatch "misc/of_table.cocci"

    Signed-off-by: YueHaibing
    Acked-by: Greentime Hu
    Signed-off-by: Greentime Hu

    YueHaibing
     
  • This bug is report by Dan Carpenter. We shall use ~loc_mask instead of
    !loc_mask because we need to and(&) the bits of ~loc_mask.

    Reported-by: Dan Carpenter
    Fixes: c9a4a8da6baa ("nds32: Loadable modules")
    Signed-off-by: Greentime Hu

    Greentime Hu
     

03 Jul, 2018

1 commit


05 Jun, 2018

2 commits

  • …iederm/user-namespace

    Pull siginfo updates from Eric Biederman:
    "This set of changes close the known issues with setting si_code to an
    invalid value, and with not fully initializing struct siginfo. There
    remains work to do on nds32, arc, unicore32, powerpc, arm, arm64, ia64
    and x86 to get the code that generates siginfo into a simpler and more
    maintainable state. Most of that work involves refactoring the signal
    handling code and thus careful code review.

    Also not included is the work to shrink the in kernel version of
    struct siginfo. That depends on getting the number of places that
    directly manipulate struct siginfo under control, as it requires the
    introduction of struct kernel_siginfo for the in kernel things.

    Overall this set of changes looks like it is making good progress, and
    with a little luck I will be wrapping up the siginfo work next
    development cycle"

    * 'siginfo-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (46 commits)
    signal/sh: Stop gcc warning about an impossible case in do_divide_error
    signal/mips: Report FPE_FLTUNK for undiagnosed floating point exceptions
    signal/um: More carefully relay signals in relay_signal.
    signal: Extend siginfo_layout with SIL_FAULT_{MCEERR|BNDERR|PKUERR}
    signal: Remove unncessary #ifdef SEGV_PKUERR in 32bit compat code
    signal/signalfd: Add support for SIGSYS
    signal/signalfd: Remove __put_user from signalfd_copyinfo
    signal/xtensa: Use force_sig_fault where appropriate
    signal/xtensa: Consistenly use SIGBUS in do_unaligned_user
    signal/um: Use force_sig_fault where appropriate
    signal/sparc: Use force_sig_fault where appropriate
    signal/sparc: Use send_sig_fault where appropriate
    signal/sh: Use force_sig_fault where appropriate
    signal/s390: Use force_sig_fault where appropriate
    signal/riscv: Replace do_trap_siginfo with force_sig_fault
    signal/riscv: Use force_sig_fault where appropriate
    signal/parisc: Use force_sig_fault where appropriate
    signal/parisc: Use force_sig_mceerr where appropriate
    signal/openrisc: Use force_sig_fault where appropriate
    signal/nios2: Use force_sig_fault where appropriate
    ...

    Linus Torvalds
     
  • Pull dma-mapping updates from Christoph Hellwig:

    - replace the force_dma flag with a dma_configure bus method. (Nipun
    Gupta, although one patch is іncorrectly attributed to me due to a
    git rebase bug)

    - use GFP_DMA32 more agressively in dma-direct. (Takashi Iwai)

    - remove PCI_DMA_BUS_IS_PHYS and rely on the dma-mapping API to do the
    right thing for bounce buffering.

    - move dma-debug initialization to common code, and apply a few
    cleanups to the dma-debug code.

    - cleanup the Kconfig mess around swiotlb selection

    - swiotlb comment fixup (Yisheng Xie)

    - a trivial swiotlb fix. (Dan Carpenter)

    - support swiotlb on RISC-V. (based on a patch from Palmer Dabbelt)

    - add a new generic dma-noncoherent dma_map_ops implementation and use
    it for arc, c6x and nds32.

    - improve scatterlist validity checking in dma-debug. (Robin Murphy)

    - add a struct device quirk to limit the dma-mask to 32-bit due to
    bridge/system issues, and switch x86 to use it instead of a local
    hack for VIA bridges.

    - handle devices without a dma_mask more gracefully in the dma-direct
    code.

    * tag 'dma-mapping-4.18' of git://git.infradead.org/users/hch/dma-mapping: (48 commits)
    dma-direct: don't crash on device without dma_mask
    nds32: use generic dma_noncoherent_ops
    nds32: implement the unmap_sg DMA operation
    nds32: consolidate DMA cache maintainance routines
    x86/pci-dma: switch the VIA 32-bit DMA quirk to use the struct device flag
    x86/pci-dma: remove the explicit nodac and allowdac option
    x86/pci-dma: remove the experimental forcesac boot option
    Documentation/x86: remove a stray reference to pci-nommu.c
    core, dma-direct: add a flag 32-bit dma limits
    dma-mapping: remove unused gfp_t parameter to arch_dma_alloc_attrs
    dma-debug: check scatterlist segments
    c6x: use generic dma_noncoherent_ops
    arc: use generic dma_noncoherent_ops
    arc: fix arc_dma_{map,unmap}_page
    arc: fix arc_dma_sync_sg_for_{cpu,device}
    arc: simplify arc_dma_sync_single_for_{cpu,device}
    dma-mapping: provide a generic dma-noncoherent implementation
    dma-mapping: simplify Kconfig dependencies
    riscv: add swiotlb support
    riscv: only enable ZONE_DMA32 for 64-bit
    ...

    Linus Torvalds
     

29 May, 2018

3 commits


23 May, 2018

5 commits


25 Apr, 2018

4 commits

  • Filling in struct siginfo before calling force_sig_info a tedious and
    error prone process, where once in a great while the wrong fields
    are filled out, and siginfo has been inconsistently cleared.

    Simplify this process by using the helper force_sig_fault. Which
    takes as a parameters all of the information it needs, ensures
    all of the fiddly bits of filling in struct siginfo are done properly
    and then calls force_sig_info.

    In short about a 5 line reduction in code for every time force_sig_info
    is called, which makes the calling function clearer.

    Cc: Greentime Hu
    Cc: Vincent Chen
    Acked-by: Vincent Chen
    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     
  • Call clear_siginfo to ensure every stack allocated siginfo is properly
    initialized before being passed to the signal sending functions.

    Note: It is not safe to depend on C initializers to initialize struct
    siginfo on the stack because C is allowed to skip holes when
    initializing a structure.

    The initialization of struct siginfo in tracehook_report_syscall_exit
    was moved from the helper user_single_step_siginfo into
    tracehook_report_syscall_exit itself, to make it clear that the local
    variable siginfo gets fully initialized.

    In a few cases the scope of struct siginfo has been reduced to make it
    clear that siginfo siginfo is not used on other paths in the function
    in which it is declared.

    Instances of using memset to initialize siginfo have been replaced
    with calls clear_siginfo for clarity.

    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     
  • As originally committed do_revisn would deliver a siginfo for SIGILL
    with an si_code composed of random stack contents. That makes no
    sense and is not something userspace can depend on. So simplify
    the code and just use "force_sig(SIG_ILL, current)" instead.

    Fixes: 2923f5ea7738 ("nds32: Exception handling")
    Cc: Vincent Chen
    Cc: Greentime Hu
    Cc: Arnd Bergmann
    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     
  • Neither unhandled_interrupt nor unhandled_exceptions fills in any of the
    siginfo fields whend sending SIGKILL. Further because it is SIGKILL
    even if all of the fields were filled out appropriately it would be impossible
    for the process to read any of the siginfo fields. So simplfy things and
    just use force_sig instead of force_sig_info.

    Fixes: 2923f5ea7738 ("nds32: Exception handling")
    Cc: Vincent Chen
    Cc: Greentime Hu
    Cc: Arnd Bergmann
    Acked-by: Vincent Chen
    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     

16 Mar, 2018

2 commits

  • Use the generic dump_stack() instead of nds32 one because they are doing
    the same thing.

    Signed-off-by: Greentime Hu
    Acked-by: Arnd Bergmann

    Greentime Hu
     
  • OUTPUT_FORMAT is not necessary here and the elf toolchain doesn't
    support these formats. Since kernel should be built pass with elf
    or Linux toolchain. This can be removed from vdso.ld.S

    These are the built failed messages.
    VDSOL arch/nds32/kernel/vdso/vdso.so.dbg
    /home/users/greentime/tmp/nds32le-elf-newlib-v3-upstream-b224/bin/../lib/gcc/nds32le-elf/8.0.1/../../../../nds32le-elf/bin/ld:
    target elf32-nds32le-linux not found
    collect2: error: ld returned 1 exit status
    make[1]: *** [arch/nds32/kernel/vdso/vdso.so.dbg] Error 1
    make: *** [vdso_prepare] Error 2

    Signed-off-by: Greentime Hu

    Greentime Hu
     

22 Feb, 2018

9 commits