1. 12 Aug, 2022 12 commits
    • Qing Zhang's avatar
      LoongArch: Add USER_STACKTRACE support · 4d7bf939
      Qing Zhang authored
      To get the best stacktrace output, you can compile your userspace
      programs with frame pointers (at least glibc + the app you are tracing).
      
      1, export "CC = gcc -fno-omit-frame-pointer";
      2, compile your programs with "CC";
      3, use uprobe to get stacktrace output.
      
      ...
           echo 'p:malloc /usr/lib64/libc.so.6:0x0a4704 size=%r4:u64' > uprobe_events
           echo 'p:free /usr/lib64/libc.so.6:0x0a4d50 ptr=%r4:x64' >> uprobe_events
           echo 'comm == "demo"' > ./events/uprobes/malloc/filter
           echo 'comm == "demo"' > ./events/uprobes/free/filter
           echo 1 > ./options/userstacktrace
           echo 1 > ./options/sym-userobj
      ...
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      4d7bf939
    • Qing Zhang's avatar
      LoongArch: Add STACKTRACE support · 93a4fa62
      Qing Zhang authored
      1. Use common arch_stack_walk() infrastructure to avoid duplicated code
         and avoid taking care of the stack storage and filtering.
      2. Add sched_ra (means sched return address) and sched_cfa (means sched
         call frame address) to thread_info, and store them in switch_to().
      3. Add __get_wchan() implementation.
      
      Now we can print the process stack and wait channel by cat /proc/*/stack
      and /proc/*/wchan.
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      93a4fa62
    • Qing Zhang's avatar
      LoongArch: Add prologue unwinder support · 49aef111
      Qing Zhang authored
      It unwind the stack frame based on prologue code analyze.
      CONFIG_KALLSYMS is needed, at least the address and length
      of each function.
      
      Three stages when we do unwind,
        1) unwind_start(), the prapare of unwinding, fill unwind_state.
        2) unwind_done(), judge whether the unwind process is finished or not.
        3) unwind_next_frame(), unwind the next frame.
      
      Dividing unwinder helps to add new unwinders in the future, e.g.:
      unwinder_frame, unwinder_orc, .etc.
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      49aef111
    • Qing Zhang's avatar
      LoongArch: Add guess unwinder support · 49232773
      Qing Zhang authored
      Name "guess unwinder" comes from x86, it scans the stack and reports
      every kernel text address it finds.
      
      Unwinders can be used by dump_stack() and other stacktrace functions.
      
      Three stages when we do unwind,
        1) unwind_start(), the prapare of unwinding, fill unwind_state.
        2) unwind_done(), judge whether the unwind process is finished or not.
        3) unwind_next_frame(), unwind the next frame.
      
      Add get_stack_info() to get stack info. At present we have irq stack and
      task stack. The next_sp is the key info between two types of stacks.
      
      Dividing unwinder helps to add new unwinders in the future.
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      49232773
    • Huacai Chen's avatar
      LoongArch: Add vDSO syscall __vdso_getcpu() · dce6098b
      Huacai Chen authored
      We test 20 million times of getcpu(), the real syscall version take 25
      seconds, while the vsyscall version take only 2.4 seconds.
      Signed-off-by: default avatarRui Wang <wangrui@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      dce6098b
    • Huacai Chen's avatar
      LoongArch: Add PCI controller support · 57fc7323
      Huacai Chen authored
      Loongson64 based systems are PC-like systems which use PCI/PCIe as its
      I/O bus, This patch adds the PCI host controller support for LoongArch.
      Reviewed-by: default avatarWANG Xuerui <git@xen0n.name>
      Signed-off-by: default avatarJianmin Lv <lvjianmin@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      57fc7323
    • Huacai Chen's avatar
      LoongArch: Parse MADT to get multi-processor information · e9e7ff16
      Huacai Chen authored
      Parse MADT to get multi-processor information, in order to fix the boot
      problem and cpu-hotplug problem for SMP platform.
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      e9e7ff16
    • Huacai Chen's avatar
      LoongArch: Jump to the link address before enable PG · ab2579d7
      Huacai Chen authored
      The kernel entry points of both boot CPU (i.e., kernel_entry) and non-
      boot CPUs (i.e., smpboot_entry) may be physical address from BootLoader
      (in DA mode or identity-mapping PG mode). So we should jump to the link
      address before PG enabled (because DA is disabled at the same time) and
      just after DMW configured.
      
      Specifically: With some older firmwares, non-boot CPUs started with PG
      enabled, but this need firmware cooperation in the form of a temporary
      page table, which is deemed unnecessary. OTOH, latest firmware versions
      configure the non-boot CPUs to start in DA mode, so kernel-side changes
      are needed.
      Reviewed-by: default avatarWANG Xuerui <git@xen0n.name>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      ab2579d7
    • Qing Zhang's avatar
      LoongArch: Requires __force attributes for any casts · 5e8be07c
      Qing Zhang authored
      This fix a warning when "make C=2":
      arch/loongarch/kernel/ptrace.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h, include/linux/sched/signal.h, include/linux/ptrace.h, include/linux/audit.h):
      ./arch/loongarch/include/asm/uaccess.h:232:32: warning: incorrect type in argument 2 (different address spaces)
      ./arch/loongarch/include/asm/uaccess.h:232:32:    expected void const *from
      ./arch/loongarch/include/asm/uaccess.h:232:32:    got void const [noderef] __user *from
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      5e8be07c
    • Yang Li's avatar
      LoongArch: Fix unsigned comparison with less than zero · aafcac81
      Yang Li authored
      The return value from the call to get_timer_irq() is int, which can be
      a negative error code. However, the return value is being assigned to an
      unsigned int variable 'irq', so making 'irq' an int.
      
      Eliminate the following coccicheck warning:
      ./arch/loongarch/kernel/time.c:146:5-8: WARNING: Unsigned expression compared with zero: irq < 0
      Reported-by: default avatarAbaci Robot <abaci@linux.alibaba.com>
      Signed-off-by: default avatarYang Li <yang.lee@linux.alibaba.com>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      aafcac81
    • Huacai Chen's avatar
      LoongArch: Adjust arch/loongarch/Kconfig · f30d1f49
      Huacai Chen authored
      1, ACPI, EFI and SMP are mandatories for LoongArch, select them
      unconditionally to avoid various build errors for 'make randconfig'.
      2, Move the MMU_GATHER_MERGE_VMAS selection to the correct place.
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      f30d1f49
    • Huacai Chen's avatar
      LoongArch: cpuinfo: Fix a warning for CONFIG_CPUMASK_OFFSTACK · 28e112af
      Huacai Chen authored
      When CONFIG_CPUMASK_OFFSTACK and CONFIG_DEBUG_PER_CPU_MAPS is selected,
      cpu_max_bits_warn() generates a runtime warning similar as below while
      we show /proc/cpuinfo. Fix this by using nr_cpu_ids (the runtime limit)
      instead of NR_CPUS to iterate CPUs.
      
      [    3.052463] ------------[ cut here ]------------
      [    3.059679] WARNING: CPU: 3 PID: 1 at include/linux/cpumask.h:108 show_cpuinfo+0x5e8/0x5f0
      [    3.070072] Modules linked in: efivarfs autofs4
      [    3.076257] CPU: 0 PID: 1 Comm: systemd Not tainted 5.19-rc5+ #1052
      [    3.084034] Hardware name: Loongson Loongson-3A5000-7A1000-1w-V0.1-CRB/Loongson-LS3A5000-7A1000-1w-EVB-V1.21, BIOS Loongson-UDK2018-V2.0.04082-beta7 04/27
      [    3.099465] Stack : 9000000100157b08 9000000000f18530 9000000000cf846c 9000000100154000
      [    3.109127]         9000000100157a50 0000000000000000 9000000100157a58 9000000000ef7430
      [    3.118774]         90000001001578e8 0000000000000040 0000000000000020 ffffffffffffffff
      [    3.128412]         0000000000aaaaaa 1ab25f00eec96a37 900000010021de80 900000000101c890
      [    3.138056]         0000000000000000 0000000000000000 0000000000000000 0000000000aaaaaa
      [    3.147711]         ffff8000339dc220 0000000000000001 0000000006ab4000 0000000000000000
      [    3.157364]         900000000101c998 0000000000000004 9000000000ef7430 0000000000000000
      [    3.167012]         0000000000000009 000000000000006c 0000000000000000 0000000000000000
      [    3.176641]         9000000000d3de08 9000000001639390 90000000002086d8 00007ffff0080286
      [    3.186260]         00000000000000b0 0000000000000004 0000000000000000 0000000000071c1c
      [    3.195868]         ...
      [    3.199917] Call Trace:
      [    3.203941] [<90000000002086d8>] show_stack+0x38/0x14c
      [    3.210666] [<9000000000cf846c>] dump_stack_lvl+0x60/0x88
      [    3.217625] [<900000000023d268>] __warn+0xd0/0x100
      [    3.223958] [<9000000000cf3c90>] warn_slowpath_fmt+0x7c/0xcc
      [    3.231150] [<9000000000210220>] show_cpuinfo+0x5e8/0x5f0
      [    3.238080] [<90000000004f578c>] seq_read_iter+0x354/0x4b4
      [    3.245098] [<90000000004c2e90>] new_sync_read+0x17c/0x1c4
      [    3.252114] [<90000000004c5174>] vfs_read+0x138/0x1d0
      [    3.258694] [<90000000004c55f8>] ksys_read+0x70/0x100
      [    3.265265] [<9000000000cfde9c>] do_syscall+0x7c/0x94
      [    3.271820] [<9000000000202fe4>] handle_syscall+0xc4/0x160
      [    3.281824] ---[ end trace 8b484262b4b8c24c ]---
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      28e112af
  2. 11 Aug, 2022 1 commit
  3. 31 Jul, 2022 6 commits
  4. 30 Jul, 2022 2 commits
  5. 29 Jul, 2022 19 commits