* [PATCH 1/3] LoongArch: Add guess unwinder support
@ 2022-07-28 14:05 Qing Zhang
2022-07-28 14:05 ` [PATCH 2/3] LoongArch: Add prologue " Qing Zhang
` (2 more replies)
0 siblings, 3 replies; 15+ messages in thread
From: Qing Zhang @ 2022-07-28 14:05 UTC (permalink / raw)
To: Huacai Chen, WANG Xuerui; +Cc: loongarch, linux-kernel, Jiaxun Yang, hejinyang
Name "guess unwinder" comes from x86, It scans the stack and reports
every kernel text address it finds.
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.
Make the dump_stack process go through unwind process.
Add get_stack_info() to get stack info. At present we have irq stack and
task stack. Maybe add another type in future. The next_sp means the key
info between this type stack and next type stack.
Dividing unwinder helps to add new unwinders in the future.
Signed-off-by: Qing Zhang <zhangqing@loongson.cn>
diff --git a/arch/loongarch/Kconfig.debug b/arch/loongarch/Kconfig.debug
index e69de29bb2d1..68634d4fa27b 100644
--- a/arch/loongarch/Kconfig.debug
+++ b/arch/loongarch/Kconfig.debug
@@ -0,0 +1,9 @@
+config UNWINDER_GUESS
+ bool "Guess unwinder"
+ help
+ This option enables the "guess" unwinder for unwinding kernel stack
+ traces. It scans the stack and reports every kernel text address it
+ finds. Some of the addresses it reports may be incorrect.
+
+ While this option often produces false positives, it can still be
+ useful in many cases.
diff --git a/arch/loongarch/include/asm/stacktrace.h b/arch/loongarch/include/asm/stacktrace.h
index 26483e396ad1..33077010356d 100644
--- a/arch/loongarch/include/asm/stacktrace.h
+++ b/arch/loongarch/include/asm/stacktrace.h
@@ -10,6 +10,23 @@
#include <asm/loongarch.h>
#include <linux/stringify.h>
+enum stack_type {
+ STACK_TYPE_UNKNOWN,
+ STACK_TYPE_TASK,
+ STACK_TYPE_IRQ,
+};
+
+struct stack_info {
+ enum stack_type type;
+ unsigned long begin, end, next_sp;
+};
+
+bool in_task_stack(unsigned long stack, struct task_struct *task,
+ struct stack_info *info);
+bool in_irq_stack(unsigned long stack, struct stack_info *info);
+int get_stack_info(unsigned long stack, struct task_struct *task,
+ struct stack_info *info);
+
#define STR_LONG_L __stringify(LONG_L)
#define STR_LONG_S __stringify(LONG_S)
#define STR_LONGSIZE __stringify(LONGSIZE)
diff --git a/arch/loongarch/include/asm/unwind.h b/arch/loongarch/include/asm/unwind.h
new file mode 100644
index 000000000000..243330b39d0d
--- /dev/null
+++ b/arch/loongarch/include/asm/unwind.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Most of this ideas comes from x86.
+ *
+ * Copyright (C) 2022 Loongson Technology Corporation Limited
+ */
+#ifndef _ASM_UNWIND_H
+#define _ASM_UNWIND_H
+
+#include <linux/sched.h>
+
+#include <asm/stacktrace.h>
+
+struct unwind_state {
+ struct stack_info stack_info;
+ struct task_struct *task;
+ unsigned long sp, pc;
+ bool first;
+ bool error;
+};
+
+void unwind_start(struct unwind_state *state, struct task_struct *task,
+ struct pt_regs *regs);
+bool unwind_next_frame(struct unwind_state *state);
+unsigned long unwind_get_return_address(struct unwind_state *state);
+
+static inline bool unwind_done(struct unwind_state *state)
+{
+ return state->stack_info.type == STACK_TYPE_UNKNOWN;
+}
+
+static inline bool unwind_error(struct unwind_state *state)
+{
+ return state->error;
+}
+
+#endif /* _ASM_UNWIND_H */
diff --git a/arch/loongarch/kernel/Makefile b/arch/loongarch/kernel/Makefile
index 940de9173542..c5fa4adb23b6 100644
--- a/arch/loongarch/kernel/Makefile
+++ b/arch/loongarch/kernel/Makefile
@@ -22,4 +22,6 @@ obj-$(CONFIG_SMP) += smp.o
obj-$(CONFIG_NUMA) += numa.o
+obj-$(CONFIG_UNWINDER_GUESS) += unwind_guess.o
+
CPPFLAGS_vmlinux.lds := $(KBUILD_CFLAGS)
diff --git a/arch/loongarch/kernel/process.c b/arch/loongarch/kernel/process.c
index bfa0dfe8b7d7..709b7a1664f8 100644
--- a/arch/loongarch/kernel/process.c
+++ b/arch/loongarch/kernel/process.c
@@ -44,6 +44,7 @@
#include <asm/pgtable.h>
#include <asm/processor.h>
#include <asm/reg.h>
+#include <asm/unwind.h>
#include <asm/vdso.h>
/*
@@ -183,6 +184,66 @@ unsigned long __get_wchan(struct task_struct *task)
return 0;
}
+bool in_task_stack(unsigned long stack, struct task_struct *task,
+ struct stack_info *info)
+{
+ unsigned long begin = (unsigned long)task_stack_page(task);
+ unsigned long end = begin + THREAD_SIZE - 32;
+
+ if (stack < begin || stack >= end)
+ return false;
+
+ info->type = STACK_TYPE_TASK;
+ info->begin = begin;
+ info->end = end;
+ info->next_sp = 0;
+
+ return true;
+}
+
+bool in_irq_stack(unsigned long stack, struct stack_info *info)
+{
+ unsigned long nextsp;
+ unsigned long begin = (unsigned long)this_cpu_read(irq_stack);
+ unsigned long end = begin + IRQ_STACK_START;
+
+ if (stack < begin || stack >= end)
+ return false;
+
+ nextsp = *(unsigned long *)end;
+ if (nextsp & (SZREG - 1))
+ return false;
+
+ info->type = STACK_TYPE_IRQ;
+ info->begin = begin;
+ info->end = end;
+ info->next_sp = nextsp;
+
+ return true;
+}
+
+int get_stack_info(unsigned long stack, struct task_struct *task,
+ struct stack_info *info)
+{
+ task = task ? : current;
+
+ if (!stack || stack & (SZREG - 1))
+ goto unknown;
+
+ if (in_task_stack(stack, task, info))
+ return 0;
+
+ if (task != current)
+ goto unknown;
+
+ if (in_irq_stack(stack, info))
+ return 0;
+
+unknown:
+ info->type = STACK_TYPE_UNKNOWN;
+ return -EINVAL;
+}
+
unsigned long stack_top(void)
{
unsigned long top = TASK_SIZE & PAGE_MASK;
diff --git a/arch/loongarch/kernel/traps.c b/arch/loongarch/kernel/traps.c
index 1bf58c65e2bf..ef2c3aeb1dab 100644
--- a/arch/loongarch/kernel/traps.c
+++ b/arch/loongarch/kernel/traps.c
@@ -43,6 +43,7 @@
#include <asm/stacktrace.h>
#include <asm/tlb.h>
#include <asm/types.h>
+#include <asm/unwind.h>
#include "access-helper.h"
@@ -64,19 +65,18 @@ static void show_backtrace(struct task_struct *task, const struct pt_regs *regs,
const char *loglvl, bool user)
{
unsigned long addr;
- unsigned long *sp = (unsigned long *)(regs->regs[3] & ~3);
+ struct unwind_state state;
+ struct pt_regs *pregs = (struct pt_regs *)regs;
+
+ if (!task)
+ task = current;
+
+ unwind_start(&state, task, pregs);
printk("%sCall Trace:", loglvl);
-#ifdef CONFIG_KALLSYMS
- printk("%s\n", loglvl);
-#endif
- while (!kstack_end(sp)) {
- if (__get_addr(&addr, sp++, user)) {
- printk("%s (Bad stack address)", loglvl);
- break;
- }
- if (__kernel_text_address(addr))
- print_ip_sym(loglvl, addr);
+ for (; !unwind_done(&state); unwind_next_frame(&state)) {
+ addr = unwind_get_return_address(&state);
+ print_ip_sym(loglvl, addr);
}
printk("%s\n", loglvl);
}
diff --git a/arch/loongarch/kernel/unwind_guess.c b/arch/loongarch/kernel/unwind_guess.c
new file mode 100644
index 000000000000..7eeb3e1a989d
--- /dev/null
+++ b/arch/loongarch/kernel/unwind_guess.c
@@ -0,0 +1,65 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2022 Loongson Technology Corporation Limited
+ */
+#include <linux/kernel.h>
+
+#include <asm/unwind.h>
+
+unsigned long unwind_get_return_address(struct unwind_state *state)
+{
+ if (unwind_done(state))
+ return 0;
+ else if (state->first)
+ return state->pc;
+
+ return *(unsigned long *)(state->sp);
+}
+EXPORT_SYMBOL_GPL(unwind_get_return_address);
+
+bool unwind_next_frame(struct unwind_state *state)
+{
+ struct stack_info *info = &state->stack_info;
+ unsigned long addr;
+
+ if (unwind_done(state))
+ return false;
+
+ if (state->first)
+ state->first = false;
+
+ do {
+ for (state->sp += sizeof(unsigned long);
+ state->sp < info->end;
+ state->sp += sizeof(unsigned long)) {
+ addr = *(unsigned long *)(state->sp);
+
+ if (__kernel_text_address(addr))
+ return true;
+ }
+
+ state->sp = info->next_sp;
+
+ } while (!get_stack_info(state->sp, state->task, info));
+
+ return false;
+}
+EXPORT_SYMBOL_GPL(unwind_next_frame);
+
+void unwind_start(struct unwind_state *state, struct task_struct *task,
+ struct pt_regs *regs)
+{
+ memset(state, 0, sizeof(*state));
+
+ state->task = task;
+
+ state->sp = regs->regs[3];
+ state->pc = regs->csr_era;
+ state->first = true;
+
+ get_stack_info(state->sp, state->task, &state->stack_info);
+
+ if (!unwind_done(state) && !__kernel_text_address(state->pc))
+ unwind_next_frame(state);
+}
+EXPORT_SYMBOL_GPL(unwind_start);
--
2.20.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/3] LoongArch: Add prologue unwinder support
2022-07-28 14:05 [PATCH 1/3] LoongArch: Add guess unwinder support Qing Zhang
@ 2022-07-28 14:05 ` Qing Zhang
2022-07-29 2:03 ` Youling Tang
2022-07-29 2:14 ` Jinyang He
2022-07-28 14:05 ` [PATCH 3/3] LoongArch: Add stacktrace support Qing Zhang
2022-07-29 2:01 ` [PATCH 1/3] LoongArch: Add guess unwinder support Youling Tang
2 siblings, 2 replies; 15+ messages in thread
From: Qing Zhang @ 2022-07-28 14:05 UTC (permalink / raw)
To: Huacai Chen, WANG Xuerui; +Cc: loongarch, linux-kernel, Jiaxun Yang, hejinyang
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, eg:
unwind_frame, unwind_orc .etc
Signed-off-by: Qing Zhang <zhangqing@loongson.cn>
diff --git a/arch/loongarch/Kconfig.debug b/arch/loongarch/Kconfig.debug
index 68634d4fa27b..57cdbe0cfd98 100644
--- a/arch/loongarch/Kconfig.debug
+++ b/arch/loongarch/Kconfig.debug
@@ -1,3 +1,11 @@
+choice
+ prompt "Choose kernel unwinder"
+ default UNWINDER_PROLOGUE if KALLSYMS
+ help
+ This determines which method will be used for unwinding kernel stack
+ traces for panics, oopses, bugs, warnings, perf, /proc/<pid>/stack,
+ lockdep, and more.
+
config UNWINDER_GUESS
bool "Guess unwinder"
help
@@ -7,3 +15,14 @@ config UNWINDER_GUESS
While this option often produces false positives, it can still be
useful in many cases.
+
+config UNWINDER_PROLOGUE
+ bool "Prologue unwinder"
+ depends on KALLSYMS
+ help
+ This option enables the "prologue" unwinder for unwinding kernel stack
+ traces. It unwind the stack frame based on prologue code analyze. Symbol
+ information is needed, at least the address and length of each function.
+ Some of the addresses it reports may be incorrect.
+
+endchoice
diff --git a/arch/loongarch/include/asm/inst.h b/arch/loongarch/include/asm/inst.h
index 575d1bb66ffb..bd684cff4008 100644
--- a/arch/loongarch/include/asm/inst.h
+++ b/arch/loongarch/include/asm/inst.h
@@ -23,12 +23,33 @@ enum reg1i20_op {
lu32id_op = 0x0b,
};
+enum reg1i21_op {
+ beqz_op = 0x10,
+ bnez_op = 0x11,
+};
+
enum reg2i12_op {
+ addiw_op = 0x0a,
+ addid_op = 0x0b,
lu52id_op = 0x0c,
+ ldb_op = 0xa0,
+ ldh_op = 0xa1,
+ ldw_op = 0xa2,
+ ldd_op = 0xa3,
+ stb_op = 0xa4,
+ sth_op = 0xa5,
+ stw_op = 0xa6,
+ std_op = 0xa7,
};
enum reg2i16_op {
jirl_op = 0x13,
+ beq_op = 0x16,
+ bne_op = 0x17,
+ blt_op = 0x18,
+ bge_op = 0x19,
+ bltu_op = 0x1a,
+ bgeu_op = 0x1b,
};
struct reg0i26_format {
@@ -110,6 +131,29 @@ enum loongarch_gpr {
LOONGARCH_GPR_MAX
};
+static inline bool is_stack_alloc_ins(union loongarch_instruction *ip)
+{
+ /* addi.d $sp, $sp, -imm */
+ return ip->reg2i12_format.opcode == addid_op &&
+ ip->reg2i12_format.rj == LOONGARCH_GPR_SP &&
+ ip->reg2i12_format.rd == LOONGARCH_GPR_SP &&
+ ip->reg2i12_format.immediate & (1 << 11);
+}
+
+static inline bool is_ra_save_ins(union loongarch_instruction *ip)
+{
+ /* st.d $ra, $sp, offset */
+ return ip->reg2i12_format.opcode == std_op &&
+ ip->reg2i12_format.rj == LOONGARCH_GPR_SP &&
+ ip->reg2i12_format.rd == LOONGARCH_GPR_RA;
+}
+
+static inline bool is_branch_insn(union loongarch_instruction insn)
+{
+ return insn.reg1i21_format.opcode >= beqz_op &&
+ insn.reg1i21_format.opcode <= bgeu_op;
+}
+
u32 larch_insn_gen_lu32id(enum loongarch_gpr rd, int imm);
u32 larch_insn_gen_lu52id(enum loongarch_gpr rd, enum loongarch_gpr rj, int imm);
u32 larch_insn_gen_jirl(enum loongarch_gpr rd, enum loongarch_gpr rj, unsigned long pc, unsigned long dest);
diff --git a/arch/loongarch/include/asm/unwind.h b/arch/loongarch/include/asm/unwind.h
index 243330b39d0d..09394e536ea9 100644
--- a/arch/loongarch/include/asm/unwind.h
+++ b/arch/loongarch/include/asm/unwind.h
@@ -14,6 +14,10 @@
struct unwind_state {
struct stack_info stack_info;
struct task_struct *task;
+#if defined(CONFIG_UNWINDER_PROLOGUE)
+ unsigned long ra;
+ bool enable;
+#endif
unsigned long sp, pc;
bool first;
bool error;
diff --git a/arch/loongarch/kernel/Makefile b/arch/loongarch/kernel/Makefile
index c5fa4adb23b6..918600e7b30f 100644
--- a/arch/loongarch/kernel/Makefile
+++ b/arch/loongarch/kernel/Makefile
@@ -23,5 +23,6 @@ obj-$(CONFIG_SMP) += smp.o
obj-$(CONFIG_NUMA) += numa.o
obj-$(CONFIG_UNWINDER_GUESS) += unwind_guess.o
+obj-$(CONFIG_UNWINDER_PROLOGUE) += unwind_prologue.o
CPPFLAGS_vmlinux.lds := $(KBUILD_CFLAGS)
diff --git a/arch/loongarch/kernel/traps.c b/arch/loongarch/kernel/traps.c
index ef2c3aeb1dab..3e904fa12d48 100644
--- a/arch/loongarch/kernel/traps.c
+++ b/arch/loongarch/kernel/traps.c
@@ -73,6 +73,11 @@ static void show_backtrace(struct task_struct *task, const struct pt_regs *regs,
unwind_start(&state, task, pregs);
+#ifdef CONFIG_UNWINDER_PROLOGUE
+ if (user_mode(regs))
+ state.enable = false;
+#endif
+
printk("%sCall Trace:", loglvl);
for (; !unwind_done(&state); unwind_next_frame(&state)) {
addr = unwind_get_return_address(&state);
diff --git a/arch/loongarch/kernel/unwind_prologue.c b/arch/loongarch/kernel/unwind_prologue.c
new file mode 100644
index 000000000000..6539c9e98364
--- /dev/null
+++ b/arch/loongarch/kernel/unwind_prologue.c
@@ -0,0 +1,174 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2022 Loongson Technology Corporation Limited
+ */
+#include <linux/kallsyms.h>
+
+#include <asm/inst.h>
+#include <asm/ptrace.h>
+#include <asm/unwind.h>
+
+unsigned long unwind_get_return_address(struct unwind_state *state)
+{
+
+ if (unwind_done(state))
+ return 0;
+
+ if (state->enable)
+ return state->pc;
+ else if (state->first)
+ return state->pc;
+
+ return *(unsigned long *)(state->sp);
+
+}
+EXPORT_SYMBOL_GPL(unwind_get_return_address);
+
+static bool unwind_by_prologue(struct unwind_state *state)
+{
+ struct stack_info *info = &state->stack_info;
+ union loongarch_instruction *ip, *ip_end;
+ unsigned long frame_size = 0, frame_ra = -1;
+ unsigned long size, offset, pc = state->pc;
+
+ if (state->sp >= info->end || state->sp < info->begin)
+ return false;
+
+ if (!kallsyms_lookup_size_offset(pc, &size, &offset))
+ return false;
+
+ ip = (union loongarch_instruction *)(pc - offset);
+ ip_end = (union loongarch_instruction *)pc;
+
+ while (ip < ip_end) {
+ if (is_stack_alloc_ins(ip)) {
+ frame_size = (1 << 12) - ip->reg2i12_format.immediate;
+ ip++;
+ break;
+ }
+ ip++;
+ }
+
+ if (!frame_size) {
+ if (state->first)
+ goto first;
+
+ return false;
+ }
+
+ while (ip < ip_end) {
+ if (is_ra_save_ins(ip)) {
+ frame_ra = ip->reg2i12_format.immediate;
+ break;
+ }
+ if (is_branch_insn(*ip))
+ break;
+ ip++;
+ }
+
+ if (frame_ra < 0) {
+ if (state->first) {
+ state->sp = state->sp + frame_size;
+ goto first;
+ }
+ return false;
+ }
+
+ if (state->first)
+ state->first = false;
+
+ state->pc = *(unsigned long *)(state->sp + frame_ra);
+ state->sp = state->sp + frame_size;
+ return !!__kernel_text_address(state->pc);
+
+first:
+ state->first = false;
+ if (state->pc == state->ra)
+ return false;
+
+ state->pc = state->ra;
+
+ return !!__kernel_text_address(state->ra);
+}
+
+static bool unwind_by_guess(struct unwind_state *state)
+{
+ struct stack_info *info = &state->stack_info;
+ unsigned long addr;
+
+ for (state->sp += sizeof(unsigned long);
+ state->sp < info->end;
+ state->sp += sizeof(unsigned long)) {
+ addr = *(unsigned long *)(state->sp);
+ if (__kernel_text_address(addr))
+ return true;
+ }
+
+ return false;
+}
+
+bool unwind_next_frame(struct unwind_state *state)
+{
+ struct stack_info *info = &state->stack_info;
+ struct pt_regs *regs;
+ unsigned long pc;
+
+ if (unwind_done(state))
+ return false;
+
+ do {
+ if (state->enable) {
+ if (unwind_by_prologue(state))
+ return true;
+
+ if (info->type == STACK_TYPE_IRQ &&
+ info->end == state->sp) {
+ regs = (struct pt_regs *)info->next_sp;
+ pc = regs->csr_era;
+ if (user_mode(regs) || !__kernel_text_address(pc))
+ return false;
+
+ state->pc = pc;
+ state->sp = regs->regs[3];
+ state->ra = regs->regs[1];
+ state->first = true;
+ get_stack_info(state->sp, state->task, info);
+
+ return true;
+ }
+ } else {
+ if (state->first)
+ state->first = false;
+
+ if (unwind_by_guess(state))
+ return true;
+ }
+
+ state->sp = info->next_sp;
+
+ } while (!get_stack_info(state->sp, state->task, info));
+
+ return false;
+}
+EXPORT_SYMBOL_GPL(unwind_next_frame);
+
+void unwind_start(struct unwind_state *state, struct task_struct *task,
+ struct pt_regs *regs)
+{
+ memset(state, 0, sizeof(*state));
+
+ if (__kernel_text_address(regs->csr_era))
+ state->enable = true;
+
+ state->task = task;
+ state->pc = regs->csr_era;
+ state->sp = regs->regs[3];
+ state->ra = regs->regs[1];
+ state->first = true;
+
+ get_stack_info(state->sp, state->task, &state->stack_info);
+
+ if (!unwind_done(state) && !__kernel_text_address(state->pc))
+ unwind_next_frame(state);
+}
+EXPORT_SYMBOL_GPL(unwind_start);
--
2.20.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/3] LoongArch: Add stacktrace support
2022-07-28 14:05 [PATCH 1/3] LoongArch: Add guess unwinder support Qing Zhang
2022-07-28 14:05 ` [PATCH 2/3] LoongArch: Add prologue " Qing Zhang
@ 2022-07-28 14:05 ` Qing Zhang
2022-07-29 2:13 ` Youling Tang
` (4 more replies)
2022-07-29 2:01 ` [PATCH 1/3] LoongArch: Add guess unwinder support Youling Tang
2 siblings, 5 replies; 15+ messages in thread
From: Qing Zhang @ 2022-07-28 14:05 UTC (permalink / raw)
To: Huacai Chen, WANG Xuerui; +Cc: loongarch, linux-kernel, Jiaxun Yang, hejinyang
Use common arch_stack_walk infrastructure to avoid duplicated code and
avoid taking care of the stack storage and filtering.
Add sra (means __schedule return address) and scfa (means __schedule call
frame address) to thread_info and store it in switch_to().
Now we can print the process stack by cat /proc/*/stack and can better
support ftrace.
Signed-off-by: Qing Zhang <zhangqing@loongson.cn>
diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
index b57daee98b89..1bd656285674 100644
--- a/arch/loongarch/Kconfig
+++ b/arch/loongarch/Kconfig
@@ -38,6 +38,7 @@ config LOONGARCH
select ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE if !PREEMPTION
select ARCH_MIGHT_HAVE_PC_PARPORT
select ARCH_MIGHT_HAVE_PC_SERIO
+ select ARCH_STACKWALK
select ARCH_SPARSEMEM_ENABLE
select ARCH_SUPPORTS_ACPI
select ARCH_SUPPORTS_ATOMIC_RMW
@@ -141,6 +142,10 @@ config LOCKDEP_SUPPORT
bool
default y
+config STACKTRACE_SUPPORT
+ bool
+ default y
+
# MACH_LOONGSON32 and MACH_LOONGSON64 are delibrately carried over from the
# MIPS Loongson code, to preserve Loongson-specific code paths in drivers that
# are shared between architectures, and specifically expecting the symbols.
diff --git a/arch/loongarch/include/asm/processor.h b/arch/loongarch/include/asm/processor.h
index 57ec45aa078e..1c4b4308378d 100644
--- a/arch/loongarch/include/asm/processor.h
+++ b/arch/loongarch/include/asm/processor.h
@@ -101,6 +101,10 @@ struct thread_struct {
unsigned long reg23, reg24, reg25, reg26; /* s0-s3 */
unsigned long reg27, reg28, reg29, reg30, reg31; /* s4-s8 */
+ /* __schedule() return address / call frame address */
+ unsigned long sched_ra;
+ unsigned long sched_cfa;
+
/* CSR registers */
unsigned long csr_prmd;
unsigned long csr_crmd;
@@ -129,6 +133,9 @@ struct thread_struct {
struct loongarch_fpu fpu FPU_ALIGN;
};
+#define thread_saved_ra(tsk) (tsk->thread.sched_ra)
+#define thread_saved_fp(tsk) (tsk->thread.sched_cfa)
+
#define INIT_THREAD { \
/* \
* Main processor registers \
@@ -145,6 +152,8 @@ struct thread_struct {
.reg29 = 0, \
.reg30 = 0, \
.reg31 = 0, \
+ .sched_ra = 0, \
+ .sched_cfa = 0, \
.csr_crmd = 0, \
.csr_prmd = 0, \
.csr_euen = 0, \
diff --git a/arch/loongarch/include/asm/switch_to.h b/arch/loongarch/include/asm/switch_to.h
index 2a8d04375574..836cfcc19498 100644
--- a/arch/loongarch/include/asm/switch_to.h
+++ b/arch/loongarch/include/asm/switch_to.h
@@ -15,12 +15,15 @@ struct task_struct;
* @prev: The task previously executed.
* @next: The task to begin executing.
* @next_ti: task_thread_info(next).
+ * @sched_ra: __schedule return address.
+ * @sched_cfa: __schedule call frame address.
*
* This function is used whilst scheduling to save the context of prev & load
* the context of next. Returns prev.
*/
extern asmlinkage struct task_struct *__switch_to(struct task_struct *prev,
- struct task_struct *next, struct thread_info *next_ti);
+ struct task_struct *next, struct thread_info *next_ti,
+ void *sched_ra, void *sched_cfa);
/*
* For newly created kernel threads switch_to() will return to
@@ -31,7 +34,8 @@ extern asmlinkage struct task_struct *__switch_to(struct task_struct *prev,
#define switch_to(prev, next, last) \
do { \
lose_fpu_inatomic(1, prev); \
- (last) = __switch_to(prev, next, task_thread_info(next)); \
+ (last) = __switch_to(prev, next, task_thread_info(next), \
+ __builtin_return_address(0), __builtin_frame_address(0)); \
} while (0)
#endif /* _ASM_SWITCH_TO_H */
diff --git a/arch/loongarch/kernel/Makefile b/arch/loongarch/kernel/Makefile
index 918600e7b30f..7449513eb08d 100644
--- a/arch/loongarch/kernel/Makefile
+++ b/arch/loongarch/kernel/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_EFI) += efi.o
obj-$(CONFIG_CPU_HAS_FPU) += fpu.o
obj-$(CONFIG_MODULES) += module.o module-sections.o
+obj-$(CONFIG_STACKTRACE) += stacktrace.o
obj-$(CONFIG_PROC_FS) += proc.o
diff --git a/arch/loongarch/kernel/asm-offsets.c b/arch/loongarch/kernel/asm-offsets.c
index 20cd9e16a95a..eb350f3ffae5 100644
--- a/arch/loongarch/kernel/asm-offsets.c
+++ b/arch/loongarch/kernel/asm-offsets.c
@@ -103,6 +103,8 @@ void output_thread_defines(void)
OFFSET(THREAD_REG29, task_struct, thread.reg29);
OFFSET(THREAD_REG30, task_struct, thread.reg30);
OFFSET(THREAD_REG31, task_struct, thread.reg31);
+ OFFSET(THREAD_SCHED_RA, task_struct, thread.sched_ra);
+ OFFSET(THREAD_SCHED_CFA, task_struct, thread.sched_cfa);
OFFSET(THREAD_CSRCRMD, task_struct,
thread.csr_crmd);
OFFSET(THREAD_CSRPRMD, task_struct,
diff --git a/arch/loongarch/kernel/process.c b/arch/loongarch/kernel/process.c
index 709b7a1664f8..34c3f2148714 100644
--- a/arch/loongarch/kernel/process.c
+++ b/arch/loongarch/kernel/process.c
@@ -135,6 +135,7 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args)
childregs = (struct pt_regs *) childksp - 1;
/* Put the stack after the struct pt_regs. */
childksp = (unsigned long) childregs;
+ p->thread.sched_cfa = 0;
p->thread.csr_euen = 0;
p->thread.csr_crmd = csr_read32(LOONGARCH_CSR_CRMD);
p->thread.csr_prmd = csr_read32(LOONGARCH_CSR_PRMD);
@@ -145,6 +146,7 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args)
p->thread.reg23 = (unsigned long)args->fn;
p->thread.reg24 = (unsigned long)args->fn_arg;
p->thread.reg01 = (unsigned long)ret_from_kernel_thread;
+ p->thread.sched_ra = (unsigned long)ret_from_kernel_thread;
memset(childregs, 0, sizeof(struct pt_regs));
childregs->csr_euen = p->thread.csr_euen;
childregs->csr_crmd = p->thread.csr_crmd;
@@ -161,6 +163,7 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args)
p->thread.reg03 = (unsigned long) childregs;
p->thread.reg01 = (unsigned long) ret_from_fork;
+ p->thread.sched_ra = (unsigned long) ret_from_fork;
/*
* New tasks lose permission to use the fpu. This accelerates context
diff --git a/arch/loongarch/kernel/stacktrace.c b/arch/loongarch/kernel/stacktrace.c
new file mode 100644
index 000000000000..f4f4b8ad3917
--- /dev/null
+++ b/arch/loongarch/kernel/stacktrace.c
@@ -0,0 +1,37 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Stack trace management functions
+ *
+ * Copyright (C) 2022 Loongson Technology Corporation Limited
+ */
+#include <linux/sched.h>
+#include <linux/stacktrace.h>
+
+#include <asm/stacktrace.h>
+#include <asm/unwind.h>
+
+void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie,
+ struct task_struct *task, struct pt_regs *regs)
+{
+ struct pt_regs dummyregs;
+ struct unwind_state state;
+ unsigned long addr;
+
+ regs = &dummyregs;
+
+ if (task == current) {
+ regs->csr_era = (unsigned long)__builtin_return_address(0);
+ regs->regs[3] = (unsigned long)__builtin_frame_address(0);
+ } else {
+ regs->csr_era = thread_saved_ra(task);
+ regs->regs[3] = thread_saved_fp(task);
+ }
+
+ regs->regs[1] = 0;
+ for (unwind_start(&state, task, regs);
+ !unwind_done(&state); unwind_next_frame(&state)) {
+ addr = unwind_get_return_address(&state);
+ if (!addr || !consume_entry(cookie, addr))
+ break;
+ }
+}
diff --git a/arch/loongarch/kernel/switch.S b/arch/loongarch/kernel/switch.S
index 53e2fa8e580e..03d8c7add68f 100644
--- a/arch/loongarch/kernel/switch.S
+++ b/arch/loongarch/kernel/switch.S
@@ -21,6 +21,8 @@ SYM_FUNC_START(__switch_to)
cpu_save_nonscratch a0
stptr.d ra, a0, THREAD_REG01
+ stptr.d a3, a0, THREAD_SCHED_RA
+ stptr.d a4, a0, THREAD_SCHED_CFA
move tp, a2
cpu_restore_nonscratch a1
--
2.20.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 1/3] LoongArch: Add guess unwinder support
2022-07-28 14:05 [PATCH 1/3] LoongArch: Add guess unwinder support Qing Zhang
2022-07-28 14:05 ` [PATCH 2/3] LoongArch: Add prologue " Qing Zhang
2022-07-28 14:05 ` [PATCH 3/3] LoongArch: Add stacktrace support Qing Zhang
@ 2022-07-29 2:01 ` Youling Tang
2022-07-29 2:28 ` Jinyang He
2 siblings, 1 reply; 15+ messages in thread
From: Youling Tang @ 2022-07-29 2:01 UTC (permalink / raw)
To: Qing Zhang, Huacai Chen
Cc: WANG Xuerui, loongarch, linux-kernel, Jiaxun Yang, hejinyang
Hi, Qing
On 07/28/2022 10:05 PM, Qing Zhang wrote:
> Name "guess unwinder" comes from x86, It scans the stack and reports
> every kernel text address it finds.
>
> 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.
>
> Make the dump_stack process go through unwind process.
> Add get_stack_info() to get stack info. At present we have irq stack and
> task stack. Maybe add another type in future. The next_sp means the key
> info between this type stack and next type stack.
>
> Dividing unwinder helps to add new unwinders in the future.
>
> Signed-off-by: Qing Zhang <zhangqing@loongson.cn>
>
> diff --git a/arch/loongarch/Kconfig.debug b/arch/loongarch/Kconfig.debug
> index e69de29bb2d1..68634d4fa27b 100644
> --- a/arch/loongarch/Kconfig.debug
> +++ b/arch/loongarch/Kconfig.debug
> @@ -0,0 +1,9 @@
> +config UNWINDER_GUESS
> + bool "Guess unwinder"
> + help
> + This option enables the "guess" unwinder for unwinding kernel stack
> + traces. It scans the stack and reports every kernel text address it
> + finds. Some of the addresses it reports may be incorrect.
> +
> + While this option often produces false positives, it can still be
> + useful in many cases.
> diff --git a/arch/loongarch/include/asm/stacktrace.h b/arch/loongarch/include/asm/stacktrace.h
> index 26483e396ad1..33077010356d 100644
> --- a/arch/loongarch/include/asm/stacktrace.h
> +++ b/arch/loongarch/include/asm/stacktrace.h
> @@ -10,6 +10,23 @@
> #include <asm/loongarch.h>
> #include <linux/stringify.h>
>
> +enum stack_type {
> + STACK_TYPE_UNKNOWN,
> + STACK_TYPE_TASK,
> + STACK_TYPE_IRQ,
> +};
> +
> +struct stack_info {
> + enum stack_type type;
> + unsigned long begin, end, next_sp;
> +};
> +
> +bool in_task_stack(unsigned long stack, struct task_struct *task,
> + struct stack_info *info);
> +bool in_irq_stack(unsigned long stack, struct stack_info *info);
> +int get_stack_info(unsigned long stack, struct task_struct *task,
> + struct stack_info *info);
> +
> #define STR_LONG_L __stringify(LONG_L)
> #define STR_LONG_S __stringify(LONG_S)
> #define STR_LONGSIZE __stringify(LONGSIZE)
> diff --git a/arch/loongarch/include/asm/unwind.h b/arch/loongarch/include/asm/unwind.h
> new file mode 100644
> index 000000000000..243330b39d0d
> --- /dev/null
> +++ b/arch/loongarch/include/asm/unwind.h
> @@ -0,0 +1,37 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * Most of this ideas comes from x86.
> + *
> + * Copyright (C) 2022 Loongson Technology Corporation Limited
> + */
> +#ifndef _ASM_UNWIND_H
> +#define _ASM_UNWIND_H
> +
> +#include <linux/sched.h>
> +
> +#include <asm/stacktrace.h>
> +
> +struct unwind_state {
> + struct stack_info stack_info;
> + struct task_struct *task;
> + unsigned long sp, pc;
> + bool first;
> + bool error;
> +};
> +
> +void unwind_start(struct unwind_state *state, struct task_struct *task,
> + struct pt_regs *regs);
> +bool unwind_next_frame(struct unwind_state *state);
> +unsigned long unwind_get_return_address(struct unwind_state *state);
> +
> +static inline bool unwind_done(struct unwind_state *state)
> +{
> + return state->stack_info.type == STACK_TYPE_UNKNOWN;
> +}
> +
> +static inline bool unwind_error(struct unwind_state *state)
> +{
> + return state->error;
> +}
> +
> +#endif /* _ASM_UNWIND_H */
> diff --git a/arch/loongarch/kernel/Makefile b/arch/loongarch/kernel/Makefile
> index 940de9173542..c5fa4adb23b6 100644
> --- a/arch/loongarch/kernel/Makefile
> +++ b/arch/loongarch/kernel/Makefile
> @@ -22,4 +22,6 @@ obj-$(CONFIG_SMP) += smp.o
>
> obj-$(CONFIG_NUMA) += numa.o
>
> +obj-$(CONFIG_UNWINDER_GUESS) += unwind_guess.o
> +
> CPPFLAGS_vmlinux.lds := $(KBUILD_CFLAGS)
> diff --git a/arch/loongarch/kernel/process.c b/arch/loongarch/kernel/process.c
> index bfa0dfe8b7d7..709b7a1664f8 100644
> --- a/arch/loongarch/kernel/process.c
> +++ b/arch/loongarch/kernel/process.c
> @@ -44,6 +44,7 @@
> #include <asm/pgtable.h>
> #include <asm/processor.h>
> #include <asm/reg.h>
> +#include <asm/unwind.h>
> #include <asm/vdso.h>
>
> /*
> @@ -183,6 +184,66 @@ unsigned long __get_wchan(struct task_struct *task)
> return 0;
> }
>
> +bool in_task_stack(unsigned long stack, struct task_struct *task,
> + struct stack_info *info)
> +{
> + unsigned long begin = (unsigned long)task_stack_page(task);
> + unsigned long end = begin + THREAD_SIZE - 32;
> +
> + if (stack < begin || stack >= end)
> + return false;
> +
> + info->type = STACK_TYPE_TASK;
> + info->begin = begin;
> + info->end = end;
> + info->next_sp = 0;
> +
> + return true;
> +}
> +
> +bool in_irq_stack(unsigned long stack, struct stack_info *info)
> +{
> + unsigned long nextsp;
> + unsigned long begin = (unsigned long)this_cpu_read(irq_stack);
> + unsigned long end = begin + IRQ_STACK_START;
> +
> + if (stack < begin || stack >= end)
> + return false;
> +
> + nextsp = *(unsigned long *)end;
> + if (nextsp & (SZREG - 1))
> + return false;
> +
> + info->type = STACK_TYPE_IRQ;
> + info->begin = begin;
> + info->end = end;
> + info->next_sp = nextsp;
> +
> + return true;
> +}
> +
> +int get_stack_info(unsigned long stack, struct task_struct *task,
> + struct stack_info *info)
> +{
> + task = task ? : current;
> +
> + if (!stack || stack & (SZREG - 1))
> + goto unknown;
> +
> + if (in_task_stack(stack, task, info))
> + return 0;
> +
> + if (task != current)
> + goto unknown;
> +
> + if (in_irq_stack(stack, info))
> + return 0;
> +
> +unknown:
> + info->type = STACK_TYPE_UNKNOWN;
> + return -EINVAL;
> +}
> +
> unsigned long stack_top(void)
> {
> unsigned long top = TASK_SIZE & PAGE_MASK;
> diff --git a/arch/loongarch/kernel/traps.c b/arch/loongarch/kernel/traps.c
> index 1bf58c65e2bf..ef2c3aeb1dab 100644
> --- a/arch/loongarch/kernel/traps.c
> +++ b/arch/loongarch/kernel/traps.c
> @@ -43,6 +43,7 @@
> #include <asm/stacktrace.h>
> #include <asm/tlb.h>
> #include <asm/types.h>
> +#include <asm/unwind.h>
>
> #include "access-helper.h"
>
> @@ -64,19 +65,18 @@ static void show_backtrace(struct task_struct *task, const struct pt_regs *regs,
> const char *loglvl, bool user)
> {
> unsigned long addr;
> - unsigned long *sp = (unsigned long *)(regs->regs[3] & ~3);
> + struct unwind_state state;
> + struct pt_regs *pregs = (struct pt_regs *)regs;
> +
> + if (!task)
> + task = current;
> +
> + unwind_start(&state, task, pregs);
>
> printk("%sCall Trace:", loglvl);
> -#ifdef CONFIG_KALLSYMS
> - printk("%s\n", loglvl);
> -#endif
> - while (!kstack_end(sp)) {
> - if (__get_addr(&addr, sp++, user)) {
> - printk("%s (Bad stack address)", loglvl);
> - break;
> - }
> - if (__kernel_text_address(addr))
> - print_ip_sym(loglvl, addr);
> + for (; !unwind_done(&state); unwind_next_frame(&state)) {
> + addr = unwind_get_return_address(&state);
> + print_ip_sym(loglvl, addr);
> }
> printk("%s\n", loglvl);
> }
> diff --git a/arch/loongarch/kernel/unwind_guess.c b/arch/loongarch/kernel/unwind_guess.c
> new file mode 100644
> index 000000000000..7eeb3e1a989d
> --- /dev/null
> +++ b/arch/loongarch/kernel/unwind_guess.c
> @@ -0,0 +1,65 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (C) 2022 Loongson Technology Corporation Limited
> + */
> +#include <linux/kernel.h>
> +
> +#include <asm/unwind.h>
> +
> +unsigned long unwind_get_return_address(struct unwind_state *state)
> +{
> + if (unwind_done(state))
> + return 0;
This judgment can be removed, because unwind_done() has been judged
before entering this function, and unwind_get_return_address will not
be called if it is true.
> + else if (state->first)
> + return state->pc;
> +
> + return *(unsigned long *)(state->sp);
> +}
> +EXPORT_SYMBOL_GPL(unwind_get_return_address);
> +
> +bool unwind_next_frame(struct unwind_state *state)
> +{
> + struct stack_info *info = &state->stack_info;
> + unsigned long addr;
> +
> + if (unwind_done(state))
> + return false;
> +
Can be removed as above.
Thanks,
Youling
> + if (state->first)
> + state->first = false;
> +
> + do {
> + for (state->sp += sizeof(unsigned long);
> + state->sp < info->end;
> + state->sp += sizeof(unsigned long)) {
> + addr = *(unsigned long *)(state->sp);
> +
> + if (__kernel_text_address(addr))
> + return true;
> + }
> +
> + state->sp = info->next_sp;
> +
> + } while (!get_stack_info(state->sp, state->task, info));
> +
> + return false;
> +}
> +EXPORT_SYMBOL_GPL(unwind_next_frame);
> +
> +void unwind_start(struct unwind_state *state, struct task_struct *task,
> + struct pt_regs *regs)
> +{
> + memset(state, 0, sizeof(*state));
> +
> + state->task = task;
> +
> + state->sp = regs->regs[3];
> + state->pc = regs->csr_era;
> + state->first = true;
> +
> + get_stack_info(state->sp, state->task, &state->stack_info);
> +
> + if (!unwind_done(state) && !__kernel_text_address(state->pc))
> + unwind_next_frame(state);
> +}
> +EXPORT_SYMBOL_GPL(unwind_start);
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/3] LoongArch: Add prologue unwinder support
2022-07-28 14:05 ` [PATCH 2/3] LoongArch: Add prologue " Qing Zhang
@ 2022-07-29 2:03 ` Youling Tang
2022-07-29 5:38 ` zhangqing
2022-07-29 2:14 ` Jinyang He
1 sibling, 1 reply; 15+ messages in thread
From: Youling Tang @ 2022-07-29 2:03 UTC (permalink / raw)
To: Qing Zhang, Huacai Chen
Cc: WANG Xuerui, loongarch, linux-kernel, Jiaxun Yang, hejinyang
On 07/28/2022 10:05 PM, Qing Zhang wrote:
> 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, eg:
> unwind_frame, unwind_orc .etc
>
> Signed-off-by: Qing Zhang <zhangqing@loongson.cn>
>
> diff --git a/arch/loongarch/Kconfig.debug b/arch/loongarch/Kconfig.debug
> index 68634d4fa27b..57cdbe0cfd98 100644
> --- a/arch/loongarch/Kconfig.debug
> +++ b/arch/loongarch/Kconfig.debug
> @@ -1,3 +1,11 @@
> +choice
> + prompt "Choose kernel unwinder"
> + default UNWINDER_PROLOGUE if KALLSYMS
> + help
> + This determines which method will be used for unwinding kernel stack
> + traces for panics, oopses, bugs, warnings, perf, /proc/<pid>/stack,
> + lockdep, and more.
> +
> config UNWINDER_GUESS
> bool "Guess unwinder"
> help
> @@ -7,3 +15,14 @@ config UNWINDER_GUESS
>
> While this option often produces false positives, it can still be
> useful in many cases.
> +
> +config UNWINDER_PROLOGUE
> + bool "Prologue unwinder"
> + depends on KALLSYMS
> + help
> + This option enables the "prologue" unwinder for unwinding kernel stack
> + traces. It unwind the stack frame based on prologue code analyze. Symbol
> + information is needed, at least the address and length of each function.
> + Some of the addresses it reports may be incorrect.
> +
> +endchoice
> diff --git a/arch/loongarch/include/asm/inst.h b/arch/loongarch/include/asm/inst.h
> index 575d1bb66ffb..bd684cff4008 100644
> --- a/arch/loongarch/include/asm/inst.h
> +++ b/arch/loongarch/include/asm/inst.h
> @@ -23,12 +23,33 @@ enum reg1i20_op {
> lu32id_op = 0x0b,
> };
>
> +enum reg1i21_op {
> + beqz_op = 0x10,
> + bnez_op = 0x11,
> +};
> +
> enum reg2i12_op {
> + addiw_op = 0x0a,
> + addid_op = 0x0b,
> lu52id_op = 0x0c,
> + ldb_op = 0xa0,
> + ldh_op = 0xa1,
> + ldw_op = 0xa2,
> + ldd_op = 0xa3,
> + stb_op = 0xa4,
> + sth_op = 0xa5,
> + stw_op = 0xa6,
> + std_op = 0xa7,
> };
>
> enum reg2i16_op {
> jirl_op = 0x13,
> + beq_op = 0x16,
> + bne_op = 0x17,
> + blt_op = 0x18,
> + bge_op = 0x19,
> + bltu_op = 0x1a,
> + bgeu_op = 0x1b,
> };
>
> struct reg0i26_format {
> @@ -110,6 +131,29 @@ enum loongarch_gpr {
> LOONGARCH_GPR_MAX
> };
>
> +static inline bool is_stack_alloc_ins(union loongarch_instruction *ip)
> +{
> + /* addi.d $sp, $sp, -imm */
> + return ip->reg2i12_format.opcode == addid_op &&
> + ip->reg2i12_format.rj == LOONGARCH_GPR_SP &&
> + ip->reg2i12_format.rd == LOONGARCH_GPR_SP &&
> + ip->reg2i12_format.immediate & (1 << 11);
> +}
> +
> +static inline bool is_ra_save_ins(union loongarch_instruction *ip)
> +{
> + /* st.d $ra, $sp, offset */
> + return ip->reg2i12_format.opcode == std_op &&
> + ip->reg2i12_format.rj == LOONGARCH_GPR_SP &&
> + ip->reg2i12_format.rd == LOONGARCH_GPR_RA;
> +}
> +
> +static inline bool is_branch_insn(union loongarch_instruction insn)
> +{
> + return insn.reg1i21_format.opcode >= beqz_op &&
> + insn.reg1i21_format.opcode <= bgeu_op;
> +}
> +
> u32 larch_insn_gen_lu32id(enum loongarch_gpr rd, int imm);
> u32 larch_insn_gen_lu52id(enum loongarch_gpr rd, enum loongarch_gpr rj, int imm);
> u32 larch_insn_gen_jirl(enum loongarch_gpr rd, enum loongarch_gpr rj, unsigned long pc, unsigned long dest);
> diff --git a/arch/loongarch/include/asm/unwind.h b/arch/loongarch/include/asm/unwind.h
> index 243330b39d0d..09394e536ea9 100644
> --- a/arch/loongarch/include/asm/unwind.h
> +++ b/arch/loongarch/include/asm/unwind.h
> @@ -14,6 +14,10 @@
> struct unwind_state {
> struct stack_info stack_info;
> struct task_struct *task;
> +#if defined(CONFIG_UNWINDER_PROLOGUE)
> + unsigned long ra;
> + bool enable;
> +#endif
> unsigned long sp, pc;
> bool first;
> bool error;
> diff --git a/arch/loongarch/kernel/Makefile b/arch/loongarch/kernel/Makefile
> index c5fa4adb23b6..918600e7b30f 100644
> --- a/arch/loongarch/kernel/Makefile
> +++ b/arch/loongarch/kernel/Makefile
> @@ -23,5 +23,6 @@ obj-$(CONFIG_SMP) += smp.o
> obj-$(CONFIG_NUMA) += numa.o
>
> obj-$(CONFIG_UNWINDER_GUESS) += unwind_guess.o
> +obj-$(CONFIG_UNWINDER_PROLOGUE) += unwind_prologue.o
>
> CPPFLAGS_vmlinux.lds := $(KBUILD_CFLAGS)
> diff --git a/arch/loongarch/kernel/traps.c b/arch/loongarch/kernel/traps.c
> index ef2c3aeb1dab..3e904fa12d48 100644
> --- a/arch/loongarch/kernel/traps.c
> +++ b/arch/loongarch/kernel/traps.c
> @@ -73,6 +73,11 @@ static void show_backtrace(struct task_struct *task, const struct pt_regs *regs,
>
> unwind_start(&state, task, pregs);
>
> +#ifdef CONFIG_UNWINDER_PROLOGUE
> + if (user_mode(regs))
> + state.enable = false;
> +#endif
> +
> printk("%sCall Trace:", loglvl);
> for (; !unwind_done(&state); unwind_next_frame(&state)) {
> addr = unwind_get_return_address(&state);
> diff --git a/arch/loongarch/kernel/unwind_prologue.c b/arch/loongarch/kernel/unwind_prologue.c
> new file mode 100644
> index 000000000000..6539c9e98364
> --- /dev/null
> +++ b/arch/loongarch/kernel/unwind_prologue.c
> @@ -0,0 +1,174 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (C) 2022 Loongson Technology Corporation Limited
> + */
> +#include <linux/kallsyms.h>
> +
> +#include <asm/inst.h>
> +#include <asm/ptrace.h>
> +#include <asm/unwind.h>
> +
> +unsigned long unwind_get_return_address(struct unwind_state *state)
> +{
> +
> + if (unwind_done(state))
> + return 0;
This judgment can be removed, because unwind_done() has been judged
before entering this function, and unwind_get_return_address will not
be called if it is true.
> +
> + if (state->enable)
> + return state->pc;
> + else if (state->first)
> + return state->pc;
> +
> + return *(unsigned long *)(state->sp);
> +
> +}
> +EXPORT_SYMBOL_GPL(unwind_get_return_address);
> +
> +static bool unwind_by_prologue(struct unwind_state *state)
> +{
> + struct stack_info *info = &state->stack_info;
> + union loongarch_instruction *ip, *ip_end;
> + unsigned long frame_size = 0, frame_ra = -1;
> + unsigned long size, offset, pc = state->pc;
> +
> + if (state->sp >= info->end || state->sp < info->begin)
> + return false;
> +
> + if (!kallsyms_lookup_size_offset(pc, &size, &offset))
> + return false;
> +
> + ip = (union loongarch_instruction *)(pc - offset);
> + ip_end = (union loongarch_instruction *)pc;
> +
> + while (ip < ip_end) {
> + if (is_stack_alloc_ins(ip)) {
> + frame_size = (1 << 12) - ip->reg2i12_format.immediate;
> + ip++;
> + break;
> + }
> + ip++;
> + }
> +
> + if (!frame_size) {
> + if (state->first)
> + goto first;
> +
> + return false;
> + }
> +
> + while (ip < ip_end) {
> + if (is_ra_save_ins(ip)) {
> + frame_ra = ip->reg2i12_format.immediate;
Because the immediate member in struct reg2i12_format is defined as an
unsigned type, the value obtained by frame_ra here can only be a
positive number.
> + break;
> + }
> + if (is_branch_insn(*ip))
> + break;
> + ip++;
> + }
> +
> + if (frame_ra < 0) {
In addition to judging whether the initial value of frame_ra is
negative, we also want to judge whether the previously assigned
frame_ra is negative.
Save the ra value to the stack in the prologue, offset must be a
positive number, so we can add another judgment to is_ra_save_ins, the
code is as follows:
+static inline bool is_ra_save_ins(union loongarch_instruction *ip)
+{
+ /* st.d $ra, $sp, offset */
+ return ip->reg2i12_format.opcode == std_op &&
+ ip->reg2i12_format.rj == LOONGARCH_GPR_SP &&
+ ip->reg2i12_format.rd == LOONGARCH_GPR_RA &&
+ !(ip->reg2i12_format.immediate & (1 << 11));
+}
> + if (state->first) {
> + state->sp = state->sp + frame_size;
> + goto first;
> + }
> + return false;
> + }
> +
> + if (state->first)
> + state->first = false;
> +
> + state->pc = *(unsigned long *)(state->sp + frame_ra);
> + state->sp = state->sp + frame_size;
> + return !!__kernel_text_address(state->pc);
> +
> +first:
> + state->first = false;
> + if (state->pc == state->ra)
> + return false;
> +
> + state->pc = state->ra;
> +
> + return !!__kernel_text_address(state->ra);
> +}
> +
> +static bool unwind_by_guess(struct unwind_state *state)
> +{
> + struct stack_info *info = &state->stack_info;
> + unsigned long addr;
> +
> + for (state->sp += sizeof(unsigned long);
> + state->sp < info->end;
> + state->sp += sizeof(unsigned long)) {
> + addr = *(unsigned long *)(state->sp);
> + if (__kernel_text_address(addr))
> + return true;
> + }
> +
> + return false;
> +}
> +
> +bool unwind_next_frame(struct unwind_state *state)
> +{
> + struct stack_info *info = &state->stack_info;
> + struct pt_regs *regs;
> + unsigned long pc;
> +
> + if (unwind_done(state))
> + return false;
Can be removed as above.
Thanks,
Youling
> +
> + do {
> + if (state->enable) {
> + if (unwind_by_prologue(state))
> + return true;
> +
> + if (info->type == STACK_TYPE_IRQ &&
> + info->end == state->sp) {
> + regs = (struct pt_regs *)info->next_sp;
> + pc = regs->csr_era;
> + if (user_mode(regs) || !__kernel_text_address(pc))
> + return false;
> +
> + state->pc = pc;
> + state->sp = regs->regs[3];
> + state->ra = regs->regs[1];
> + state->first = true;
> + get_stack_info(state->sp, state->task, info);
> +
> + return true;
> + }
> + } else {
> + if (state->first)
> + state->first = false;
> +
> + if (unwind_by_guess(state))
> + return true;
> + }
> +
> + state->sp = info->next_sp;
> +
> + } while (!get_stack_info(state->sp, state->task, info));
> +
> + return false;
> +}
> +EXPORT_SYMBOL_GPL(unwind_next_frame);
> +
> +void unwind_start(struct unwind_state *state, struct task_struct *task,
> + struct pt_regs *regs)
> +{
> + memset(state, 0, sizeof(*state));
> +
> + if (__kernel_text_address(regs->csr_era))
> + state->enable = true;
> +
> + state->task = task;
> + state->pc = regs->csr_era;
> + state->sp = regs->regs[3];
> + state->ra = regs->regs[1];
> + state->first = true;
> +
> + get_stack_info(state->sp, state->task, &state->stack_info);
> +
> + if (!unwind_done(state) && !__kernel_text_address(state->pc))
> + unwind_next_frame(state);
> +}
> +EXPORT_SYMBOL_GPL(unwind_start);
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/3] LoongArch: Add stacktrace support
2022-07-28 14:05 ` [PATCH 3/3] LoongArch: Add stacktrace support Qing Zhang
@ 2022-07-29 2:13 ` Youling Tang
2022-07-31 12:17 ` kernel test robot
` (3 subsequent siblings)
4 siblings, 0 replies; 15+ messages in thread
From: Youling Tang @ 2022-07-29 2:13 UTC (permalink / raw)
To: Qing Zhang
Cc: Huacai Chen, WANG Xuerui, loongarch, linux-kernel, Jiaxun Yang,
hejinyang
On 07/28/2022 10:05 PM, Qing Zhang wrote:
> Use common arch_stack_walk infrastructure to avoid duplicated code and
> avoid taking care of the stack storage and filtering.
> Add sra (means __schedule return address) and scfa (means __schedule call
> frame address) to thread_info and store it in switch_to().
>
> Now we can print the process stack by cat /proc/*/stack and can better
> support ftrace.
>
> Signed-off-by: Qing Zhang <zhangqing@loongson.cn>
>
> diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
> index b57daee98b89..1bd656285674 100644
> --- a/arch/loongarch/Kconfig
> +++ b/arch/loongarch/Kconfig
> @@ -38,6 +38,7 @@ config LOONGARCH
> select ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE if !PREEMPTION
> select ARCH_MIGHT_HAVE_PC_PARPORT
> select ARCH_MIGHT_HAVE_PC_SERIO
> + select ARCH_STACKWALK
> select ARCH_SPARSEMEM_ENABLE
> select ARCH_SUPPORTS_ACPI
> select ARCH_SUPPORTS_ATOMIC_RMW
> @@ -141,6 +142,10 @@ config LOCKDEP_SUPPORT
> bool
> default y
>
> +config STACKTRACE_SUPPORT
> + bool
> + default y
> +
> # MACH_LOONGSON32 and MACH_LOONGSON64 are delibrately carried over from the
> # MIPS Loongson code, to preserve Loongson-specific code paths in drivers that
> # are shared between architectures, and specifically expecting the symbols.
> diff --git a/arch/loongarch/include/asm/processor.h b/arch/loongarch/include/asm/processor.h
> index 57ec45aa078e..1c4b4308378d 100644
> --- a/arch/loongarch/include/asm/processor.h
> +++ b/arch/loongarch/include/asm/processor.h
> @@ -101,6 +101,10 @@ struct thread_struct {
> unsigned long reg23, reg24, reg25, reg26; /* s0-s3 */
> unsigned long reg27, reg28, reg29, reg30, reg31; /* s4-s8 */
>
> + /* __schedule() return address / call frame address */
> + unsigned long sched_ra;
> + unsigned long sched_cfa;
> +
> /* CSR registers */
> unsigned long csr_prmd;
> unsigned long csr_crmd;
> @@ -129,6 +133,9 @@ struct thread_struct {
> struct loongarch_fpu fpu FPU_ALIGN;
> };
>
> +#define thread_saved_ra(tsk) (tsk->thread.sched_ra)
> +#define thread_saved_fp(tsk) (tsk->thread.sched_cfa)
> +
> #define INIT_THREAD { \
> /* \
> * Main processor registers \
> @@ -145,6 +152,8 @@ struct thread_struct {
> .reg29 = 0, \
> .reg30 = 0, \
> .reg31 = 0, \
> + .sched_ra = 0, \
> + .sched_cfa = 0, \
> .csr_crmd = 0, \
> .csr_prmd = 0, \
> .csr_euen = 0, \
> diff --git a/arch/loongarch/include/asm/switch_to.h b/arch/loongarch/include/asm/switch_to.h
> index 2a8d04375574..836cfcc19498 100644
> --- a/arch/loongarch/include/asm/switch_to.h
> +++ b/arch/loongarch/include/asm/switch_to.h
> @@ -15,12 +15,15 @@ struct task_struct;
> * @prev: The task previously executed.
> * @next: The task to begin executing.
> * @next_ti: task_thread_info(next).
> + * @sched_ra: __schedule return address.
> + * @sched_cfa: __schedule call frame address.
> *
> * This function is used whilst scheduling to save the context of prev & load
> * the context of next. Returns prev.
> */
> extern asmlinkage struct task_struct *__switch_to(struct task_struct *prev,
> - struct task_struct *next, struct thread_info *next_ti);
> + struct task_struct *next, struct thread_info *next_ti,
> + void *sched_ra, void *sched_cfa);
>
> /*
> * For newly created kernel threads switch_to() will return to
> @@ -31,7 +34,8 @@ extern asmlinkage struct task_struct *__switch_to(struct task_struct *prev,
> #define switch_to(prev, next, last) \
> do { \
> lose_fpu_inatomic(1, prev); \
> - (last) = __switch_to(prev, next, task_thread_info(next)); \
> + (last) = __switch_to(prev, next, task_thread_info(next), \
> + __builtin_return_address(0), __builtin_frame_address(0)); \
'\' format alignment.
Thanks,
Youling
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/3] LoongArch: Add prologue unwinder support
2022-07-28 14:05 ` [PATCH 2/3] LoongArch: Add prologue " Qing Zhang
2022-07-29 2:03 ` Youling Tang
@ 2022-07-29 2:14 ` Jinyang He
2022-07-29 5:39 ` zhangqing
1 sibling, 1 reply; 15+ messages in thread
From: Jinyang He @ 2022-07-29 2:14 UTC (permalink / raw)
To: Qing Zhang, Huacai Chen, WANG Xuerui; +Cc: loongarch, linux-kernel, Jiaxun Yang
Hi, Qing,
On 07/28/2022 10:05 PM, Qing Zhang wrote:
> 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, eg:
> unwind_frame, unwind_orc .etc
>
> Signed-off-by: Qing Zhang <zhangqing@loongson.cn>
>
>
> +static inline bool is_stack_alloc_ins(union loongarch_instruction *ip)
> +{
> + /* addi.d $sp, $sp, -imm */
> + return ip->reg2i12_format.opcode == addid_op &&
> + ip->reg2i12_format.rj == LOONGARCH_GPR_SP &&
> + ip->reg2i12_format.rd == LOONGARCH_GPR_SP &&
> + ip->reg2i12_format.immediate & (1 << 11);
Checking the sign bit can be used in other place.
> +}
> +
> +static inline bool is_ra_save_ins(union loongarch_instruction *ip)
> +{
> + /* st.d $ra, $sp, offset */
> + return ip->reg2i12_format.opcode == std_op &&
> + ip->reg2i12_format.rj == LOONGARCH_GPR_SP &&
> + ip->reg2i12_format.rd == LOONGARCH_GPR_RA;
> +}
> +
> +static inline bool is_branch_insn(union loongarch_instruction insn)
Does it by using pointer parameter as above functions do.
> +{
> + return insn.reg1i21_format.opcode >= beqz_op &&
> + insn.reg1i21_format.opcode <= bgeu_op;
> +}
> +
> u32 larch_insn_gen_lu32id(enum loongarch_gpr rd, int imm);
> u32 larch_insn_gen_lu52id(enum loongarch_gpr rd, enum loongarch_gpr rj, int imm);
> u32 larch_insn_gen_jirl(enum loongarch_gpr rd, enum loongarch_gpr rj, unsigned long pc, unsigned long dest);
> diff --git a/arch/loongarch/include/asm/unwind.h b/arch/loongarch/include/asm/unwind.h
> index 243330b39d0d..09394e536ea9 100644
> --- a/arch/loongarch/include/asm/unwind.h
> +++ b/arch/loongarch/include/asm/unwind.h
> @@ -14,6 +14,10 @@
> struct unwind_state {
> struct stack_info stack_info;
> struct task_struct *task;
> +#if defined(CONFIG_UNWINDER_PROLOGUE)
> + unsigned long ra;
> + bool enable;
Annotating here is appreciating. Enable is the way of prologue analysis
while !enable is the way of guess.
> +#endif
> unsigned long sp, pc;
> bool first;
> bool error;
[...]
> +
> +unsigned long unwind_get_return_address(struct unwind_state *state)
> +{
> +
> + if (unwind_done(state))
> + return 0;
> +
> + if (state->enable)
> + return state->pc;
> + else if (state->first)
> + return state->pc;
Combine conditions.
> +
> + return *(unsigned long *)(state->sp);
> +
> +}
> +EXPORT_SYMBOL_GPL(unwind_get_return_address);
> +
> +static bool unwind_by_prologue(struct unwind_state *state)
> +{
> + struct stack_info *info = &state->stack_info;
> + union loongarch_instruction *ip, *ip_end;
> + unsigned long frame_size = 0, frame_ra = -1;
> + unsigned long size, offset, pc = state->pc;
> +
> + if (state->sp >= info->end || state->sp < info->begin)
> + return false;
> +
> + if (!kallsyms_lookup_size_offset(pc, &size, &offset))
> + return false;
> +
> + ip = (union loongarch_instruction *)(pc - offset);
> + ip_end = (union loongarch_instruction *)pc;
> +
> + while (ip < ip_end) {
> + if (is_stack_alloc_ins(ip)) {
> + frame_size = (1 << 12) - ip->reg2i12_format.immediate;
Due to there will be other place convert unsigned to signed, we have
a chance that create a inline function in inst.h. Do it as same as
checking the sign bit.
> + ip++;
> + break;
> + }
> + ip++;
> + }
> +
[...]
> +
> + do {
> + if (state->enable) {
> + if (unwind_by_prologue(state))
> + return true;
> +
> + if (info->type == STACK_TYPE_IRQ &&
> + info->end == state->sp) {
> + regs = (struct pt_regs *)info->next_sp;
> + pc = regs->csr_era;
> + if (user_mode(regs) || !__kernel_text_address(pc))
> + return false;
> +
> + state->pc = pc;
> + state->sp = regs->regs[3];
> + state->ra = regs->regs[1];
> + state->first = true;
> + get_stack_info(state->sp, state->task, info);
> +
> + return true;
> + }
> + } else {
> + if (state->first)
> + state->first = false;
> +
> + if (unwind_by_guess(state))
> + return true;
> + }
I'd prefer separate the block of 'if...else...' into two inline
functions, that makes codes clear.
Thanks,
Jinyang
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/3] LoongArch: Add guess unwinder support
2022-07-29 2:01 ` [PATCH 1/3] LoongArch: Add guess unwinder support Youling Tang
@ 2022-07-29 2:28 ` Jinyang He
2022-07-29 2:56 ` Youling Tang
0 siblings, 1 reply; 15+ messages in thread
From: Jinyang He @ 2022-07-29 2:28 UTC (permalink / raw)
To: Youling Tang, Qing Zhang, Huacai Chen
Cc: WANG Xuerui, loongarch, linux-kernel, Jiaxun Yang
Hi, Youling,
[...]
>> +unsigned long unwind_get_return_address(struct unwind_state *state)
>> +{
>> + if (unwind_done(state))
>> + return 0;
> This judgment can be removed, because unwind_done() has been judged
> before entering this function, and unwind_get_return_address will not
> be called if it is true.
These unwinder functions are exported by "EXPORT_SYMBOL_GPL".
What's more, new ways to use them will be added in the future possible.
Assuming has judged unwind_done is not reliable.
Thanks,
Jinyang
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/3] LoongArch: Add guess unwinder support
2022-07-29 2:28 ` Jinyang He
@ 2022-07-29 2:56 ` Youling Tang
0 siblings, 0 replies; 15+ messages in thread
From: Youling Tang @ 2022-07-29 2:56 UTC (permalink / raw)
To: Jinyang He, Qing Zhang, Huacai Chen
Cc: WANG Xuerui, loongarch, linux-kernel, Jiaxun Yang
Hi, Jinyang
On 07/29/2022 10:28 AM, Jinyang He wrote:
> Hi, Youling,
>
> [...]
>>> +unsigned long unwind_get_return_address(struct unwind_state *state)
>>> +{
>>> + if (unwind_done(state))
>>> + return 0;
>> This judgment can be removed, because unwind_done() has been judged
>> before entering this function, and unwind_get_return_address will not
>> be called if it is true.
> These unwinder functions are exported by "EXPORT_SYMBOL_GPL".
> What's more, new ways to use them will be added in the future possible.
> Assuming has judged unwind_done is not reliable.
In this case, most of the code will be checked twice by unwind_done(),
which feels a bit redundant.
Thanks,
Youling
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/3] LoongArch: Add prologue unwinder support
2022-07-29 2:03 ` Youling Tang
@ 2022-07-29 5:38 ` zhangqing
0 siblings, 0 replies; 15+ messages in thread
From: zhangqing @ 2022-07-29 5:38 UTC (permalink / raw)
To: Youling Tang, Huacai Chen
Cc: WANG Xuerui, loongarch, linux-kernel, Jiaxun Yang, hejinyang
On 2022/7/29 上午10:03, Youling Tang wrote:
>
>
> On 07/28/2022 10:05 PM, Qing Zhang wrote:
>> 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, eg:
>> unwind_frame, unwind_orc .etc
>>
>> Signed-off-by: Qing Zhang <zhangqing@loongson.cn>
>>
>> +
>> + while (ip < ip_end) {
>> + if (is_ra_save_ins(ip)) {
>> + frame_ra = ip->reg2i12_format.immediate;
> Because the immediate member in struct reg2i12_format is defined as an
> unsigned type, the value obtained by frame_ra here can only be a
> positive number.
>
>> + break;
>> + }
>> + if (is_branch_insn(*ip))
>> + break;
>> + ip++;
>> + }
>> +
>> + if (frame_ra < 0) {
> In addition to judging whether the initial value of frame_ra is
> negative, we also want to judge whether the previously assigned
> frame_ra is negative.
>
> Save the ra value to the stack in the prologue, offset must be a
> positive number, so we can add another judgment to is_ra_save_ins, the
> code is as follows:
> +static inline bool is_ra_save_ins(union loongarch_instruction *ip)
> +{
> + /* st.d $ra, $sp, offset */
> + return ip->reg2i12_format.opcode == std_op &&
> + ip->reg2i12_format.rj == LOONGARCH_GPR_SP &&
> + ip->reg2i12_format.rd == LOONGARCH_GPR_RA &&
> + !(ip->reg2i12_format.immediate & (1 << 11));
> +}
Hi,
youling
you are right and I will send v2.
Thanks,
Qing
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/3] LoongArch: Add prologue unwinder support
2022-07-29 2:14 ` Jinyang He
@ 2022-07-29 5:39 ` zhangqing
0 siblings, 0 replies; 15+ messages in thread
From: zhangqing @ 2022-07-29 5:39 UTC (permalink / raw)
To: Jinyang He, Huacai Chen, WANG Xuerui; +Cc: loongarch, linux-kernel, Jiaxun Yang
On 2022/7/29 上午10:14, Jinyang He wrote:
> Hi, Qing,
>
>
> On 07/28/2022 10:05 PM, Qing Zhang wrote:
>> 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, eg:
>> unwind_frame, unwind_orc .etc
>>
>> Signed-off-by: Qing Zhang <zhangqing@loongson.cn>
>>
>> +static inline bool is_stack_alloc_ins(union loongarch_instruction *ip)
>> +{
>> + /* addi.d $sp, $sp, -imm */
>> + return ip->reg2i12_format.opcode == addid_op &&
>> + ip->reg2i12_format.rj == LOONGARCH_GPR_SP &&
>> + ip->reg2i12_format.rd == LOONGARCH_GPR_SP &&
>> + ip->reg2i12_format.immediate & (1 << 11);
> Checking the sign bit can be used in other place.
>> +}
>> +
>> +static inline bool is_ra_save_ins(union loongarch_instruction *ip)
>> +{
>> + /* st.d $ra, $sp, offset */
>> + return ip->reg2i12_format.opcode == std_op &&
>> + ip->reg2i12_format.rj == LOONGARCH_GPR_SP &&
>> + ip->reg2i12_format.rd == LOONGARCH_GPR_RA;
>> +}
>> +
>> +static inline bool is_branch_insn(union loongarch_instruction insn)
> Does it by using pointer parameter as above functions do.
>> +{
>> + return insn.reg1i21_format.opcode >= beqz_op &&
>> + insn.reg1i21_format.opcode <= bgeu_op;
>> +}
>> +
>> u32 larch_insn_gen_lu32id(enum loongarch_gpr rd, int imm);
>> u32 larch_insn_gen_lu52id(enum loongarch_gpr rd, enum loongarch_gpr
>> rj, int imm);
>> u32 larch_insn_gen_jirl(enum loongarch_gpr rd, enum loongarch_gpr
>> rj, unsigned long pc, unsigned long dest);
>> diff --git a/arch/loongarch/include/asm/unwind.h
>> b/arch/loongarch/include/asm/unwind.h
>> index 243330b39d0d..09394e536ea9 100644
>> --- a/arch/loongarch/include/asm/unwind.h
>> +++ b/arch/loongarch/include/asm/unwind.h
>> @@ -14,6 +14,10 @@
>> struct unwind_state {
>> struct stack_info stack_info;
>> struct task_struct *task;
>> +#if defined(CONFIG_UNWINDER_PROLOGUE)
>> + unsigned long ra;
>> + bool enable;
> Annotating here is appreciating. Enable is the way of prologue analysis
> while !enable is the way of guess.
>> +#endif
>> unsigned long sp, pc;
>> bool first;
>> bool error;
> [...]
>> +
>> +unsigned long unwind_get_return_address(struct unwind_state *state)
>> +{
>> +
>> + if (unwind_done(state))
>> + return 0;
>> +
>> + if (state->enable)
>> + return state->pc;
>> + else if (state->first)
>> + return state->pc;
> Combine conditions.
>> +
>> + return *(unsigned long *)(state->sp);
>> +
>> +}
>> +EXPORT_SYMBOL_GPL(unwind_get_return_address);
>> +
>> +static bool unwind_by_prologue(struct unwind_state *state)
>> +{
>> + struct stack_info *info = &state->stack_info;
>> + union loongarch_instruction *ip, *ip_end;
>> + unsigned long frame_size = 0, frame_ra = -1;
>> + unsigned long size, offset, pc = state->pc;
>> +
>> + if (state->sp >= info->end || state->sp < info->begin)
>> + return false;
>> +
>> + if (!kallsyms_lookup_size_offset(pc, &size, &offset))
>> + return false;
>> +
>> + ip = (union loongarch_instruction *)(pc - offset);
>> + ip_end = (union loongarch_instruction *)pc;
>> +
>> + while (ip < ip_end) {
>> + if (is_stack_alloc_ins(ip)) {
>> + frame_size = (1 << 12) - ip->reg2i12_format.immediate;
> Due to there will be other place convert unsigned to signed, we have
> a chance that create a inline function in inst.h. Do it as same as
> checking the sign bit.Hi,
Jinyang
I will fix all in v2.
eg:
#define is_imm12_negative(val) is_imm_negative(val, 12)
static inline bool is_imm_negative(unsigned long val, unsigned int bit)
{
return val & (1UL << (bit-1));
}
static inline bool is_stack_alloc_ins(union loongarch_instruction *ip)
{
...
ip->reg2i12_format.rd == LOONGARCH_GPR_SP &&
is_imm12_negative(ip->reg2i12_format.immediate);
}
static inline bool is_ra_save_ins(union loongarch_instruction *ip)
{
...
!is_imm12_negative(ip->reg2i12_format.immediate);
}
Thanks,
Qing
>
>> + ip++;
>> + break;
>> + }
>> + ip++;
>> + }
>> +
> [...]
>> +
>> + do {
>> + if (state->enable) {
>> + if (unwind_by_prologue(state))
>> + return true;
>> +
>> + if (info->type == STACK_TYPE_IRQ &&
>> + info->end == state->sp) {
>> + regs = (struct pt_regs *)info->next_sp;
>> + pc = regs->csr_era;
>> + if (user_mode(regs) || !__kernel_text_address(pc))
>> + return false;
>> +
>> + state->pc = pc;
>> + state->sp = regs->regs[3];
>> + state->ra = regs->regs[1];
>> + state->first = true;
>> + get_stack_info(state->sp, state->task, info);
>> +
>> + return true;
>> + }
>> + } else {
>> + if (state->first)
>> + state->first = false;
>> +
>> + if (unwind_by_guess(state))
>> + return true;
>> + }
> I'd prefer separate the block of 'if...else...' into two inline
> functions, that makes codes clear.
>
> Thanks,
> Jinyang
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/3] LoongArch: Add stacktrace support
2022-07-28 14:05 ` [PATCH 3/3] LoongArch: Add stacktrace support Qing Zhang
2022-07-29 2:13 ` Youling Tang
@ 2022-07-31 12:17 ` kernel test robot
2022-08-02 19:18 ` kernel test robot
` (2 subsequent siblings)
4 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2022-07-31 12:17 UTC (permalink / raw)
To: Qing Zhang, Huacai Chen, WANG Xuerui
Cc: kbuild-all, loongarch, linux-kernel, Jiaxun Yang, hejinyang
Hi Qing,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[also build test WARNING on v5.19-rc8 next-20220728]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Qing-Zhang/LoongArch-Add-guess-unwinder-support/20220728-220739
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 6e7765cb477a9753670d4351d14de93f1e9dbbd4
config: loongarch-randconfig-s041-20220731 (https://download.01.org/0day-ci/archive/20220731/202207312058.P3VcvB4t-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 12.1.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://github.com/intel-lab-lkp/linux/commit/32ef6acf6f5ecfadda21be77cbebb07b1c69e56a
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Qing-Zhang/LoongArch-Add-guess-unwinder-support/20220728-220739
git checkout 32ef6acf6f5ecfadda21be77cbebb07b1c69e56a
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=loongarch SHELL=/bin/bash kernel/entry/ kernel/trace/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> kernel/entry/common.c:447:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:447:29: sparse: expected void *ptr
kernel/entry/common.c:447:29: sparse: got int [noderef] __percpu *
>> kernel/entry/common.c:447:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:447:29: sparse: expected void *ptr
kernel/entry/common.c:447:29: sparse: got int [noderef] __percpu *
>> kernel/entry/common.c:447:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:447:29: sparse: expected void *ptr
kernel/entry/common.c:447:29: sparse: got int [noderef] __percpu *
>> kernel/entry/common.c:447:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:447:29: sparse: expected void *ptr
kernel/entry/common.c:447:29: sparse: got int [noderef] __percpu *
kernel/entry/common.c: note: in included file:
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
include/linux/context_tracking.h:98:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int enum ctx_state [noderef] __percpu * @@
include/linux/context_tracking.h:98:17: sparse: expected void *ptr
include/linux/context_tracking.h:98:17: sparse: got int enum ctx_state [noderef] __percpu *
--
>> kernel/trace/trace_preemptirq.c:30:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:30:13: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:30:13: sparse: got int [noderef] __percpu *
>> kernel/trace/trace_preemptirq.c:30:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:30:13: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:30:13: sparse: got int [noderef] __percpu *
>> kernel/trace/trace_preemptirq.c:30:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:30:13: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:30:13: sparse: got int [noderef] __percpu *
>> kernel/trace/trace_preemptirq.c:30:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:30:13: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:30:13: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:34:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:34:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:34:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:34:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:34:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:34:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:34:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:34:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:34:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:34:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:34:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:34:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:42:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:42:13: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:42:13: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:42:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:42:13: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:42:13: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:42:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:42:13: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:42:13: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:42:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:42:13: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:42:13: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:46:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:46:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:46:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:46:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:46:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:46:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:46:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:46:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:46:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:46:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:46:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:46:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:63:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:63:14: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:63:14: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:63:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:63:14: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:63:14: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:63:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:63:14: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:63:14: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:63:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:63:14: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:63:14: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:64:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:64:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:64:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:64:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:64:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:64:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:64:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:64:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:64:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:64:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:64:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:64:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:78:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:78:14: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:78:14: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:78:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:78:14: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:78:14: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:78:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:78:14: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:78:14: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:78:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:78:14: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:78:14: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:79:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:79:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:79:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:79:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:79:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:79:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:79:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:79:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:79:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:79:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:79:17: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:79:17: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:90:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:90:13: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:90:13: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:90:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:90:13: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:90:13: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:90:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:90:13: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:90:13: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:90:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:90:13: sparse: expected void *ptr
kernel/trace/trace_preemptirq.c:90:13: sparse: got int [noderef] __percpu *
kernel/trace/trace_preemptirq.c:94:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/trace/trace_preemptirq.c:94:17: sparse: expected void *ptr
--
kernel/trace/trace_events_user.c:280:37: sparse: sparse: Using plain integer as NULL pointer
kernel/trace/trace_events_user.c:461:38: sparse: sparse: Using plain integer as NULL pointer
kernel/trace/trace_events_user.c:482:40: sparse: sparse: Using plain integer as NULL pointer
kernel/trace/trace_events_user.c:1181:16: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/trace/trace_events_user.c:1181:16: sparse: void [noderef] __rcu *
kernel/trace/trace_events_user.c:1181:16: sparse: void *
kernel/trace/trace_events_user.c:1248:13: sparse: sparse: cast removes address space '__user' of expression
kernel/trace/trace_events_user.c:1248:13: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __user *buf @@ got char * @@
kernel/trace/trace_events_user.c:1248:13: sparse: expected void [noderef] __user *buf
kernel/trace/trace_events_user.c:1248:13: sparse: got char *
kernel/trace/trace_events_user.c:1264:16: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/trace/trace_events_user.c:1264:16: sparse: void [noderef] __rcu *
kernel/trace/trace_events_user.c:1264:16: sparse: void *
kernel/trace/trace_events_user.c:1291:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/trace/trace_events_user.c:1291:9: sparse: void [noderef] __rcu *
kernel/trace/trace_events_user.c:1291:9: sparse: void *
kernel/trace/trace_events_user.c: note: in included file:
>> kernel/trace/trace.h:1338:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got struct ring_buffer_event *[noderef] __percpu * @@
kernel/trace/trace.h:1338:13: sparse: expected void *ptr
kernel/trace/trace.h:1338:13: sparse: got struct ring_buffer_event *[noderef] __percpu *
>> kernel/trace/trace.h:1338:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got struct ring_buffer_event *[noderef] __percpu * @@
kernel/trace/trace.h:1338:13: sparse: expected void *ptr
kernel/trace/trace.h:1338:13: sparse: got struct ring_buffer_event *[noderef] __percpu *
>> kernel/trace/trace.h:1338:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got struct ring_buffer_event *[noderef] __percpu * @@
kernel/trace/trace.h:1338:13: sparse: expected void *ptr
kernel/trace/trace.h:1338:13: sparse: got struct ring_buffer_event *[noderef] __percpu *
>> kernel/trace/trace.h:1338:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got struct ring_buffer_event *[noderef] __percpu * @@
kernel/trace/trace.h:1338:13: sparse: expected void *ptr
kernel/trace/trace.h:1338:13: sparse: got struct ring_buffer_event *[noderef] __percpu *
kernel/trace/trace_events_user.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h, include/linux/sched/signal.h, ...):
arch/loongarch/include/asm/uaccess.h:232:32: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const *from @@ got void const [noderef] __user *from @@
arch/loongarch/include/asm/uaccess.h:232:32: sparse: expected void const *from
arch/loongarch/include/asm/uaccess.h:232:32: sparse: got void const [noderef] __user *from
--
>> kernel/trace/trace_events.c:796:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:796:9: sparse: expected void *ptr
kernel/trace/trace_events.c:796:9: sparse: got bool [noderef] __percpu *
>> kernel/trace/trace_events.c:796:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:796:9: sparse: expected void *ptr
kernel/trace/trace_events.c:796:9: sparse: got bool [noderef] __percpu *
>> kernel/trace/trace_events.c:796:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:796:9: sparse: expected void *ptr
kernel/trace/trace_events.c:796:9: sparse: got bool [noderef] __percpu *
>> kernel/trace/trace_events.c:796:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:796:9: sparse: expected void *ptr
kernel/trace/trace_events.c:796:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:814:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:814:9: sparse: expected void *ptr
kernel/trace/trace_events.c:814:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:814:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:814:9: sparse: expected void *ptr
kernel/trace/trace_events.c:814:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:814:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:814:9: sparse: expected void *ptr
kernel/trace/trace_events.c:814:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:814:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:814:9: sparse: expected void *ptr
kernel/trace/trace_events.c:814:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:826:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:826:14: sparse: expected void *ptr
kernel/trace/trace_events.c:826:14: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:826:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:826:14: sparse: expected void *ptr
kernel/trace/trace_events.c:826:14: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:826:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:826:14: sparse: expected void *ptr
kernel/trace/trace_events.c:826:14: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:826:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:826:14: sparse: expected void *ptr
kernel/trace/trace_events.c:826:14: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:832:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:832:9: sparse: expected void *ptr
kernel/trace/trace_events.c:832:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:832:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:832:9: sparse: expected void *ptr
kernel/trace/trace_events.c:832:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:832:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:832:9: sparse: expected void *ptr
kernel/trace/trace_events.c:832:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:832:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:832:9: sparse: expected void *ptr
kernel/trace/trace_events.c:832:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:844:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:844:13: sparse: expected void *ptr
kernel/trace/trace_events.c:844:13: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:844:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:844:13: sparse: expected void *ptr
kernel/trace/trace_events.c:844:13: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:844:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:844:13: sparse: expected void *ptr
kernel/trace/trace_events.c:844:13: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:844:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:844:13: sparse: expected void *ptr
kernel/trace/trace_events.c:844:13: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:851:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:851:9: sparse: expected void *ptr
kernel/trace/trace_events.c:851:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:851:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:851:9: sparse: expected void *ptr
kernel/trace/trace_events.c:851:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:851:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:851:9: sparse: expected void *ptr
kernel/trace/trace_events.c:851:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:851:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:851:9: sparse: expected void *ptr
kernel/trace/trace_events.c:851:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:999:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct event_filter *filter @@ got struct event_filter [noderef] __rcu *filter @@
kernel/trace/trace_events.c:999:31: sparse: expected struct event_filter *filter
kernel/trace/trace_events.c:999:31: sparse: got struct event_filter [noderef] __rcu *filter
kernel/trace/trace_events.c:1907:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:1907:9: sparse: expected void *ptr
kernel/trace/trace_events.c:1907:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:1907:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:1907:9: sparse: expected void *ptr
kernel/trace/trace_events.c:1907:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:1907:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:1907:9: sparse: expected void *ptr
kernel/trace/trace_events.c:1907:9: sparse: got bool [noderef] __percpu *
kernel/trace/trace_events.c:1907:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got bool [noderef] __percpu * @@
kernel/trace/trace_events.c:1907:9: sparse: expected void *ptr
kernel/trace/trace_events.c:1907:9: sparse: got bool [noderef] __percpu *
--
kernel/trace/trace.c:406:28: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct trace_export **list @@ got struct trace_export [noderef] __rcu ** @@
kernel/trace/trace.c:406:28: sparse: expected struct trace_export **list
kernel/trace/trace.c:406:28: sparse: got struct trace_export [noderef] __rcu **
kernel/trace/trace.c:420:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct trace_export **list @@ got struct trace_export [noderef] __rcu ** @@
kernel/trace/trace.c:420:33: sparse: expected struct trace_export **list
kernel/trace/trace.c:420:33: sparse: got struct trace_export [noderef] __rcu **
kernel/trace/trace.c:2864:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct event_filter *filter @@ got struct event_filter [noderef] __rcu *filter @@
kernel/trace/trace.c:2864:38: sparse: expected struct event_filter *filter
kernel/trace/trace.c:2864:38: sparse: got struct event_filter [noderef] __rcu *filter
>> kernel/trace/trace.c:7333:20: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got struct ring_buffer_event *[noderef] __percpu * @@
kernel/trace/trace.c:7333:20: sparse: expected void *ptr
kernel/trace/trace.c:7333:20: sparse: got struct ring_buffer_event *[noderef] __percpu *
>> kernel/trace/trace.c:7333:20: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got struct ring_buffer_event *[noderef] __percpu * @@
kernel/trace/trace.c:7333:20: sparse: expected void *ptr
kernel/trace/trace.c:7333:20: sparse: got struct ring_buffer_event *[noderef] __percpu *
>> kernel/trace/trace.c:7333:20: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got struct ring_buffer_event *[noderef] __percpu * @@
kernel/trace/trace.c:7333:20: sparse: expected void *ptr
kernel/trace/trace.c:7333:20: sparse: got struct ring_buffer_event *[noderef] __percpu *
>> kernel/trace/trace.c:7333:20: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got struct ring_buffer_event *[noderef] __percpu * @@
kernel/trace/trace.c:7333:20: sparse: expected void *ptr
kernel/trace/trace.c:7333:20: sparse: got struct ring_buffer_event *[noderef] __percpu *
kernel/trace/trace.c:360:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/trace/trace.c:360:9: sparse: struct trace_export [noderef] __rcu *
kernel/trace/trace.c:360:9: sparse: struct trace_export *
kernel/trace/trace.c:375:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/trace/trace.c:375:9: sparse: struct trace_export [noderef] __rcu *
kernel/trace/trace.c:375:9: sparse: struct trace_export *
vim +447 kernel/entry/common.c
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 442
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 443 irqentry_state_t noinstr irqentry_nmi_enter(struct pt_regs *regs)
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 444 {
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 445 irqentry_state_t irq_state;
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 446
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 @447 irq_state.lockdep = lockdep_hardirqs_enabled();
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 448
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 449 __nmi_enter();
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 450 lockdep_hardirqs_off(CALLER_ADDR0);
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 451 lockdep_hardirq_enter();
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 452 rcu_nmi_enter();
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 453
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 454 instrumentation_begin();
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 455 trace_hardirqs_off_finish();
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 456 ftrace_nmi_enter();
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 457 instrumentation_end();
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 458
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 459 return irq_state;
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 460 }
b6be002bcd1dd1 Thomas Gleixner 2020-11-02 461
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/3] LoongArch: Add stacktrace support
2022-07-28 14:05 ` [PATCH 3/3] LoongArch: Add stacktrace support Qing Zhang
2022-07-29 2:13 ` Youling Tang
2022-07-31 12:17 ` kernel test robot
@ 2022-08-02 19:18 ` kernel test robot
2022-08-05 20:31 ` kernel test robot
2022-08-10 13:16 ` kernel test robot
4 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2022-08-02 19:18 UTC (permalink / raw)
To: Qing Zhang, Huacai Chen, WANG Xuerui
Cc: kbuild-all, loongarch, linux-kernel, Jiaxun Yang, hejinyang
Hi Qing,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[also build test WARNING on v5.19 next-20220728]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Qing-Zhang/LoongArch-Add-guess-unwinder-support/20220728-220739
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 6e7765cb477a9753670d4351d14de93f1e9dbbd4
config: loongarch-randconfig-s043-20220801 (https://download.01.org/0day-ci/archive/20220803/202208030339.bOMzIpUt-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 12.1.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://github.com/intel-lab-lkp/linux/commit/32ef6acf6f5ecfadda21be77cbebb07b1c69e56a
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Qing-Zhang/LoongArch-Add-guess-unwinder-support/20220728-220739
git checkout 32ef6acf6f5ecfadda21be77cbebb07b1c69e56a
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=loongarch SHELL=/bin/bash kernel/locking/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
kernel/locking/lockdep.c:110:1: sparse: sparse: symbol '__pcpu_scope_lockdep_recursion' was not declared. Should it be static?
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
>> kernel/locking/lockdep.c:118:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:118:13: sparse: expected void *ptr
kernel/locking/lockdep.c:118:13: sparse: got unsigned int [noderef] __percpu *
vim +118 kernel/locking/lockdep.c
4d004099a668c4 Peter Zijlstra 2020-10-02 112
0afda3a888dccf Peter Zijlstra 2021-01-06 113 static __always_inline bool lockdep_enabled(void)
4d004099a668c4 Peter Zijlstra 2020-10-02 114 {
4d004099a668c4 Peter Zijlstra 2020-10-02 115 if (!debug_locks)
4d004099a668c4 Peter Zijlstra 2020-10-02 116 return false;
4d004099a668c4 Peter Zijlstra 2020-10-02 117
d48e3850030623 Peter Zijlstra 2020-10-26 @118 if (this_cpu_read(lockdep_recursion))
4d004099a668c4 Peter Zijlstra 2020-10-02 119 return false;
4d004099a668c4 Peter Zijlstra 2020-10-02 120
4d004099a668c4 Peter Zijlstra 2020-10-02 121 if (current->lockdep_recursion)
4d004099a668c4 Peter Zijlstra 2020-10-02 122 return false;
4d004099a668c4 Peter Zijlstra 2020-10-02 123
4d004099a668c4 Peter Zijlstra 2020-10-02 124 return true;
4d004099a668c4 Peter Zijlstra 2020-10-02 125 }
4d004099a668c4 Peter Zijlstra 2020-10-02 126
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/3] LoongArch: Add stacktrace support
2022-07-28 14:05 ` [PATCH 3/3] LoongArch: Add stacktrace support Qing Zhang
` (2 preceding siblings ...)
2022-08-02 19:18 ` kernel test robot
@ 2022-08-05 20:31 ` kernel test robot
2022-08-10 13:16 ` kernel test robot
4 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2022-08-05 20:31 UTC (permalink / raw)
To: Qing Zhang, Huacai Chen, WANG Xuerui
Cc: kbuild-all, loongarch, linux-kernel, Jiaxun Yang, hejinyang
Hi Qing,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[also build test WARNING on v5.19 next-20220805]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Qing-Zhang/LoongArch-Add-guess-unwinder-support/20220728-220739
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 6e7765cb477a9753670d4351d14de93f1e9dbbd4
config: loongarch-randconfig-s033-20220805 (https://download.01.org/0day-ci/archive/20220806/202208060426.hJL19duk-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 12.1.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://github.com/intel-lab-lkp/linux/commit/32ef6acf6f5ecfadda21be77cbebb07b1c69e56a
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Qing-Zhang/LoongArch-Add-guess-unwinder-support/20220728-220739
git checkout 32ef6acf6f5ecfadda21be77cbebb07b1c69e56a
# save the config file
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=loongarch
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> kernel/irq_work.c:278:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/irq_work.c:278:9: sparse: expected void *ptr
kernel/irq_work.c:278:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/irq_work.c:278:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/irq_work.c:278:9: sparse: expected void *ptr
kernel/irq_work.c:278:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/irq_work.c:278:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/irq_work.c:278:9: sparse: expected void *ptr
kernel/irq_work.c:278:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/irq_work.c:278:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/irq_work.c:278:9: sparse: expected void *ptr
kernel/irq_work.c:278:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/irq_work.c:278:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/irq_work.c:278:9: sparse: expected void *ptr
kernel/irq_work.c:278:9: sparse: got int [noderef] __percpu *
>> kernel/irq_work.c:278:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/irq_work.c:278:9: sparse: expected void *ptr
kernel/irq_work.c:278:9: sparse: got int [noderef] __percpu *
>> kernel/irq_work.c:278:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/irq_work.c:278:9: sparse: expected void *ptr
kernel/irq_work.c:278:9: sparse: got int [noderef] __percpu *
>> kernel/irq_work.c:278:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/irq_work.c:278:9: sparse: expected void *ptr
kernel/irq_work.c:278:9: sparse: got int [noderef] __percpu *
--
kernel/fork.c:1307:22: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file *[assigned] old_exe_file @@ got struct file [noderef] __rcu *[assigned] __res @@
kernel/fork.c:1307:22: sparse: expected struct file *[assigned] old_exe_file
kernel/fork.c:1307:22: sparse: got struct file [noderef] __rcu *[assigned] __res
kernel/fork.c:1638:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct refcount_struct [usertype] *r @@ got struct refcount_struct [noderef] __rcu * @@
kernel/fork.c:1638:38: sparse: expected struct refcount_struct [usertype] *r
kernel/fork.c:1638:38: sparse: got struct refcount_struct [noderef] __rcu *
kernel/fork.c:1647:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:1647:31: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:1647:31: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:1648:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const * @@ got struct k_sigaction [noderef] __rcu * @@
kernel/fork.c:1648:36: sparse: expected void const *
kernel/fork.c:1648:36: sparse: got struct k_sigaction [noderef] __rcu *
kernel/fork.c:1649:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:1649:33: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:1649:33: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2061:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2061:31: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2061:31: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2065:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2065:33: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2065:33: sparse: got struct spinlock [noderef] __rcu *
>> kernel/fork.c:2096:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/fork.c:2096:9: sparse: expected void *ptr
kernel/fork.c:2096:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/fork.c:2096:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/fork.c:2096:9: sparse: expected void *ptr
kernel/fork.c:2096:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/fork.c:2096:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/fork.c:2096:9: sparse: expected void *ptr
kernel/fork.c:2096:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/fork.c:2096:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/fork.c:2096:9: sparse: expected void *ptr
kernel/fork.c:2096:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/fork.c:2096:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/fork.c:2096:9: sparse: expected void *ptr
kernel/fork.c:2096:9: sparse: got int [noderef] __percpu *
>> kernel/fork.c:2096:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/fork.c:2096:9: sparse: expected void *ptr
kernel/fork.c:2096:9: sparse: got int [noderef] __percpu *
>> kernel/fork.c:2096:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/fork.c:2096:9: sparse: expected void *ptr
kernel/fork.c:2096:9: sparse: got int [noderef] __percpu *
>> kernel/fork.c:2096:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/fork.c:2096:9: sparse: expected void *ptr
kernel/fork.c:2096:9: sparse: got int [noderef] __percpu *
kernel/fork.c:2385:32: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct [noderef] __rcu *real_parent @@ got struct task_struct *task @@
kernel/fork.c:2385:32: sparse: expected struct task_struct [noderef] __rcu *real_parent
kernel/fork.c:2385:32: sparse: got struct task_struct *task
kernel/fork.c:2394:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2394:27: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2394:27: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2439:54: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct list_head *head @@ got struct list_head [noderef] __rcu * @@
kernel/fork.c:2439:54: sparse: expected struct list_head *head
kernel/fork.c:2439:54: sparse: got struct list_head [noderef] __rcu *
kernel/fork.c:2460:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2460:29: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2460:29: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2481:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2481:29: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2481:29: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2508:28: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sighand_struct *sighand @@ got struct sighand_struct [noderef] __rcu *sighand @@
kernel/fork.c:2508:28: sparse: expected struct sighand_struct *sighand
kernel/fork.c:2508:28: sparse: got struct sighand_struct [noderef] __rcu *sighand
kernel/fork.c:2537:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2537:31: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2537:31: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2539:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2539:33: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2539:33: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2975:24: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *[assigned] parent @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/fork.c:2975:24: sparse: expected struct task_struct *[assigned] parent
kernel/fork.c:2975:24: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/fork.c:3056:43: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct refcount_struct const [usertype] *r @@ got struct refcount_struct [noderef] __rcu * @@
kernel/fork.c:3056:43: sparse: expected struct refcount_struct const [usertype] *r
kernel/fork.c:3056:43: sparse: got struct refcount_struct [noderef] __rcu *
kernel/fork.c:2106:22: sparse: sparse: dereference of noderef expression
kernel/fork.c: note: in included file (through include/uapi/asm-generic/bpf_perf_event.h, arch/loongarch/include/generated/uapi/asm/bpf_perf_event.h, ...):
include/linux/ptrace.h:210:45: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *new_parent @@ got struct task_struct [noderef] __rcu *parent @@
include/linux/ptrace.h:210:45: sparse: expected struct task_struct *new_parent
include/linux/ptrace.h:210:45: sparse: got struct task_struct [noderef] __rcu *parent
include/linux/ptrace.h:210:62: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected struct cred const *ptracer_cred @@ got struct cred const [noderef] __rcu *ptracer_cred @@
include/linux/ptrace.h:210:62: sparse: expected struct cred const *ptracer_cred
include/linux/ptrace.h:210:62: sparse: got struct cred const [noderef] __rcu *ptracer_cred
kernel/fork.c:2437:59: sparse: sparse: dereference of noderef expression
kernel/fork.c:2438:59: sparse: sparse: dereference of noderef expression
kernel/fork.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h):
arch/loongarch/include/asm/uaccess.h:232:32: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const *from @@ got void const [noderef] __user *from @@
arch/loongarch/include/asm/uaccess.h:232:32: sparse: expected void const *from
arch/loongarch/include/asm/uaccess.h:232:32: sparse: got void const [noderef] __user *from
arch/loongarch/include/asm/uaccess.h:232:32: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const *from @@ got void const [noderef] __user *from @@
arch/loongarch/include/asm/uaccess.h:232:32: sparse: expected void const *from
arch/loongarch/include/asm/uaccess.h:232:32: sparse: got void const [noderef] __user *from
--
>> kernel/softirq.c:351:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/softirq.c:351:9: sparse: expected void *ptr
kernel/softirq.c:351:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/softirq.c:351:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/softirq.c:351:9: sparse: expected void *ptr
kernel/softirq.c:351:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/softirq.c:351:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/softirq.c:351:9: sparse: expected void *ptr
kernel/softirq.c:351:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/softirq.c:351:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/softirq.c:351:9: sparse: expected void *ptr
kernel/softirq.c:351:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/softirq.c:351:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/softirq.c:351:9: sparse: expected void *ptr
kernel/softirq.c:351:9: sparse: got int [noderef] __percpu *
>> kernel/softirq.c:351:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/softirq.c:351:9: sparse: expected void *ptr
kernel/softirq.c:351:9: sparse: got int [noderef] __percpu *
>> kernel/softirq.c:351:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/softirq.c:351:9: sparse: expected void *ptr
kernel/softirq.c:351:9: sparse: got int [noderef] __percpu *
>> kernel/softirq.c:351:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/softirq.c:351:9: sparse: expected void *ptr
kernel/softirq.c:351:9: sparse: got int [noderef] __percpu *
kernel/softirq.c:376:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/softirq.c:376:9: sparse: expected void *ptr
kernel/softirq.c:376:9: sparse: got unsigned int [noderef] __percpu *
kernel/softirq.c:376:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/softirq.c:376:9: sparse: expected void *ptr
kernel/softirq.c:376:9: sparse: got unsigned int [noderef] __percpu *
kernel/softirq.c:376:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/softirq.c:376:9: sparse: expected void *ptr
kernel/softirq.c:376:9: sparse: got unsigned int [noderef] __percpu *
kernel/softirq.c:376:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/softirq.c:376:9: sparse: expected void *ptr
kernel/softirq.c:376:9: sparse: got unsigned int [noderef] __percpu *
kernel/softirq.c:376:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/softirq.c:376:9: sparse: expected void *ptr
kernel/softirq.c:376:9: sparse: got int [noderef] __percpu *
kernel/softirq.c:376:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/softirq.c:376:9: sparse: expected void *ptr
kernel/softirq.c:376:9: sparse: got int [noderef] __percpu *
kernel/softirq.c:376:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/softirq.c:376:9: sparse: expected void *ptr
kernel/softirq.c:376:9: sparse: got int [noderef] __percpu *
kernel/softirq.c:376:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/softirq.c:376:9: sparse: expected void *ptr
kernel/softirq.c:376:9: sparse: got int [noderef] __percpu *
kernel/softirq.c:711:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/softirq.c:711:9: sparse: expected void *ptr
kernel/softirq.c:711:9: sparse: got unsigned int [noderef] __percpu *
kernel/softirq.c:711:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/softirq.c:711:9: sparse: expected void *ptr
kernel/softirq.c:711:9: sparse: got unsigned int [noderef] __percpu *
kernel/softirq.c:711:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/softirq.c:711:9: sparse: expected void *ptr
kernel/softirq.c:711:9: sparse: got unsigned int [noderef] __percpu *
kernel/softirq.c:711:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/softirq.c:711:9: sparse: expected void *ptr
kernel/softirq.c:711:9: sparse: got unsigned int [noderef] __percpu *
kernel/softirq.c:711:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/softirq.c:711:9: sparse: expected void *ptr
kernel/softirq.c:711:9: sparse: got int [noderef] __percpu *
kernel/softirq.c:711:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/softirq.c:711:9: sparse: expected void *ptr
kernel/softirq.c:711:9: sparse: got int [noderef] __percpu *
kernel/softirq.c:711:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/softirq.c:711:9: sparse: expected void *ptr
kernel/softirq.c:711:9: sparse: got int [noderef] __percpu *
kernel/softirq.c:711:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/softirq.c:711:9: sparse: expected void *ptr
kernel/softirq.c:711:9: sparse: got int [noderef] __percpu *
--
>> kernel/workqueue.c:1433:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/workqueue.c:1433:9: sparse: expected void *ptr
kernel/workqueue.c:1433:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/workqueue.c:1433:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/workqueue.c:1433:9: sparse: expected void *ptr
kernel/workqueue.c:1433:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/workqueue.c:1433:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/workqueue.c:1433:9: sparse: expected void *ptr
kernel/workqueue.c:1433:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/workqueue.c:1433:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/workqueue.c:1433:9: sparse: expected void *ptr
kernel/workqueue.c:1433:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/workqueue.c:1433:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/workqueue.c:1433:9: sparse: expected void *ptr
kernel/workqueue.c:1433:9: sparse: got int [noderef] __percpu *
>> kernel/workqueue.c:1433:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/workqueue.c:1433:9: sparse: expected void *ptr
kernel/workqueue.c:1433:9: sparse: got int [noderef] __percpu *
>> kernel/workqueue.c:1433:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/workqueue.c:1433:9: sparse: expected void *ptr
kernel/workqueue.c:1433:9: sparse: got int [noderef] __percpu *
>> kernel/workqueue.c:1433:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/workqueue.c:1433:9: sparse: expected void *ptr
kernel/workqueue.c:1433:9: sparse: got int [noderef] __percpu *
kernel/workqueue.c:3537:13: sparse: sparse: context imbalance in 'wq_manager_inactive' - different lock contexts for basic block
kernel/workqueue.c:3592:9: sparse: sparse: context imbalance in 'put_unbound_pool' - unexpected unlock
--
>> kernel/locking/lockdep.c:2562:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:2562:9: sparse: expected void *ptr
kernel/locking/lockdep.c:2562:9: sparse: got int [noderef] __percpu *
>> kernel/locking/lockdep.c:2562:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:2562:9: sparse: expected void *ptr
kernel/locking/lockdep.c:2562:9: sparse: got int [noderef] __percpu *
>> kernel/locking/lockdep.c:2562:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:2562:9: sparse: expected void *ptr
kernel/locking/lockdep.c:2562:9: sparse: got int [noderef] __percpu *
>> kernel/locking/lockdep.c:2562:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:2562:9: sparse: expected void *ptr
kernel/locking/lockdep.c:2562:9: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:3943:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:3943:9: sparse: expected void *ptr
kernel/locking/lockdep.c:3943:9: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:3943:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:3943:9: sparse: expected void *ptr
kernel/locking/lockdep.c:3943:9: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:3943:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:3943:9: sparse: expected void *ptr
kernel/locking/lockdep.c:3943:9: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:3943:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:3943:9: sparse: expected void *ptr
kernel/locking/lockdep.c:3943:9: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4282:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:4282:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4282:13: sparse: got unsigned int [noderef] __percpu *
kernel/locking/lockdep.c:4282:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:4282:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4282:13: sparse: got unsigned int [noderef] __percpu *
kernel/locking/lockdep.c:4282:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:4282:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4282:13: sparse: got unsigned int [noderef] __percpu *
kernel/locking/lockdep.c:4282:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:4282:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4282:13: sparse: got unsigned int [noderef] __percpu *
kernel/locking/lockdep.c:4285:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4285:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4285:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4285:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4285:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4285:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4285:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4285:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4285:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4285:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4285:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4285:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4351:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:4351:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4351:13: sparse: got unsigned int [noderef] __percpu *
kernel/locking/lockdep.c:4351:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:4351:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4351:13: sparse: got unsigned int [noderef] __percpu *
kernel/locking/lockdep.c:4351:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:4351:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4351:13: sparse: got unsigned int [noderef] __percpu *
kernel/locking/lockdep.c:4351:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/locking/lockdep.c:4351:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4351:13: sparse: got unsigned int [noderef] __percpu *
kernel/locking/lockdep.c:4354:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4354:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4354:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4354:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4354:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4354:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4354:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4354:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4354:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4354:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4354:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4354:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4414:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4414:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4414:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4414:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4414:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4414:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4414:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4414:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4414:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4414:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4414:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4414:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4465:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4465:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4465:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4465:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4465:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4465:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4465:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4465:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4465:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:4465:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:4465:13: sparse: expected void *ptr
kernel/locking/lockdep.c:4465:13: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:5505:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:5505:21: sparse: expected void *ptr
kernel/locking/lockdep.c:5505:21: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:5505:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:5505:21: sparse: expected void *ptr
kernel/locking/lockdep.c:5505:21: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:5505:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:5505:21: sparse: expected void *ptr
kernel/locking/lockdep.c:5505:21: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:5505:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:5505:21: sparse: expected void *ptr
kernel/locking/lockdep.c:5505:21: sparse: got int [noderef] __percpu *
kernel/locking/lockdep.c:5509:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/locking/lockdep.c:5509:21: sparse: expected void *ptr
--
>> fs/eventpoll.c:620:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:620:9: sparse: expected void *ptr
fs/eventpoll.c:620:9: sparse: got unsigned int [noderef] __percpu *
>> fs/eventpoll.c:620:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:620:9: sparse: expected void *ptr
fs/eventpoll.c:620:9: sparse: got unsigned int [noderef] __percpu *
>> fs/eventpoll.c:620:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:620:9: sparse: expected void *ptr
fs/eventpoll.c:620:9: sparse: got unsigned int [noderef] __percpu *
>> fs/eventpoll.c:620:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:620:9: sparse: expected void *ptr
fs/eventpoll.c:620:9: sparse: got unsigned int [noderef] __percpu *
>> fs/eventpoll.c:620:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:620:9: sparse: expected void *ptr
fs/eventpoll.c:620:9: sparse: got int [noderef] __percpu *
>> fs/eventpoll.c:620:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:620:9: sparse: expected void *ptr
fs/eventpoll.c:620:9: sparse: got int [noderef] __percpu *
>> fs/eventpoll.c:620:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:620:9: sparse: expected void *ptr
fs/eventpoll.c:620:9: sparse: got int [noderef] __percpu *
>> fs/eventpoll.c:620:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:620:9: sparse: expected void *ptr
fs/eventpoll.c:620:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:692:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:692:9: sparse: expected void *ptr
fs/eventpoll.c:692:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:692:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:692:9: sparse: expected void *ptr
fs/eventpoll.c:692:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:692:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:692:9: sparse: expected void *ptr
fs/eventpoll.c:692:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:692:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:692:9: sparse: expected void *ptr
fs/eventpoll.c:692:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:692:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:692:9: sparse: expected void *ptr
fs/eventpoll.c:692:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:692:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:692:9: sparse: expected void *ptr
fs/eventpoll.c:692:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:692:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:692:9: sparse: expected void *ptr
fs/eventpoll.c:692:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:692:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:692:9: sparse: expected void *ptr
fs/eventpoll.c:692:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:1456:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:1456:9: sparse: expected void *ptr
fs/eventpoll.c:1456:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:1456:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:1456:9: sparse: expected void *ptr
fs/eventpoll.c:1456:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:1456:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:1456:9: sparse: expected void *ptr
fs/eventpoll.c:1456:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:1456:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:1456:9: sparse: expected void *ptr
fs/eventpoll.c:1456:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:1456:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:1456:9: sparse: expected void *ptr
fs/eventpoll.c:1456:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:1456:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:1456:9: sparse: expected void *ptr
fs/eventpoll.c:1456:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:1456:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:1456:9: sparse: expected void *ptr
fs/eventpoll.c:1456:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:1456:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:1456:9: sparse: expected void *ptr
fs/eventpoll.c:1456:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:1571:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:1571:9: sparse: expected void *ptr
fs/eventpoll.c:1571:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:1571:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:1571:9: sparse: expected void *ptr
fs/eventpoll.c:1571:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:1571:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:1571:9: sparse: expected void *ptr
fs/eventpoll.c:1571:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:1571:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:1571:9: sparse: expected void *ptr
fs/eventpoll.c:1571:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:1571:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:1571:9: sparse: expected void *ptr
fs/eventpoll.c:1571:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:1571:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:1571:9: sparse: expected void *ptr
fs/eventpoll.c:1571:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:1571:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:1571:9: sparse: expected void *ptr
fs/eventpoll.c:1571:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:1571:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:1571:9: sparse: expected void *ptr
fs/eventpoll.c:1571:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:1775:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:1775:9: sparse: expected void *ptr
fs/eventpoll.c:1775:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:1775:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:1775:9: sparse: expected void *ptr
fs/eventpoll.c:1775:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:1775:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:1775:9: sparse: expected void *ptr
fs/eventpoll.c:1775:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:1775:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
fs/eventpoll.c:1775:9: sparse: expected void *ptr
fs/eventpoll.c:1775:9: sparse: got unsigned int [noderef] __percpu *
fs/eventpoll.c:1775:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:1775:9: sparse: expected void *ptr
fs/eventpoll.c:1775:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:1775:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:1775:9: sparse: expected void *ptr
fs/eventpoll.c:1775:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:1775:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:1775:9: sparse: expected void *ptr
fs/eventpoll.c:1775:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c:1775:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
fs/eventpoll.c:1775:9: sparse: expected void *ptr
fs/eventpoll.c:1775:9: sparse: got int [noderef] __percpu *
fs/eventpoll.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h, include/linux/sched/signal.h):
arch/loongarch/include/asm/uaccess.h:232:32: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const *from @@ got void const [noderef] __user *from @@
--
kernel/rcu/update.c: note: in included file:
>> kernel/rcu/tasks.h:256:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:256:17: sparse: expected void *ptr
kernel/rcu/tasks.h:256:17: sparse: got unsigned int [noderef] __percpu *
>> kernel/rcu/tasks.h:256:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:256:17: sparse: expected void *ptr
kernel/rcu/tasks.h:256:17: sparse: got unsigned int [noderef] __percpu *
>> kernel/rcu/tasks.h:256:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:256:17: sparse: expected void *ptr
kernel/rcu/tasks.h:256:17: sparse: got unsigned int [noderef] __percpu *
>> kernel/rcu/tasks.h:256:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:256:17: sparse: expected void *ptr
kernel/rcu/tasks.h:256:17: sparse: got unsigned int [noderef] __percpu *
>> kernel/rcu/tasks.h:256:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:256:17: sparse: expected void *ptr
kernel/rcu/tasks.h:256:17: sparse: got int [noderef] __percpu *
>> kernel/rcu/tasks.h:256:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:256:17: sparse: expected void *ptr
kernel/rcu/tasks.h:256:17: sparse: got int [noderef] __percpu *
>> kernel/rcu/tasks.h:256:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:256:17: sparse: expected void *ptr
kernel/rcu/tasks.h:256:17: sparse: got int [noderef] __percpu *
>> kernel/rcu/tasks.h:256:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:256:17: sparse: expected void *ptr
kernel/rcu/tasks.h:256:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:303:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:303:17: sparse: expected void *ptr
kernel/rcu/tasks.h:303:17: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:303:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:303:17: sparse: expected void *ptr
kernel/rcu/tasks.h:303:17: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:303:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:303:17: sparse: expected void *ptr
kernel/rcu/tasks.h:303:17: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:303:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:303:17: sparse: expected void *ptr
kernel/rcu/tasks.h:303:17: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:303:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:303:17: sparse: expected void *ptr
kernel/rcu/tasks.h:303:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:303:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:303:17: sparse: expected void *ptr
kernel/rcu/tasks.h:303:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:303:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:303:17: sparse: expected void *ptr
kernel/rcu/tasks.h:303:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:303:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:303:17: sparse: expected void *ptr
kernel/rcu/tasks.h:303:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:309:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:309:9: sparse: expected void *ptr
kernel/rcu/tasks.h:309:9: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:309:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:309:9: sparse: expected void *ptr
kernel/rcu/tasks.h:309:9: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:309:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:309:9: sparse: expected void *ptr
kernel/rcu/tasks.h:309:9: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:309:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:309:9: sparse: expected void *ptr
kernel/rcu/tasks.h:309:9: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:309:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:309:9: sparse: expected void *ptr
kernel/rcu/tasks.h:309:9: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:309:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:309:9: sparse: expected void *ptr
kernel/rcu/tasks.h:309:9: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:309:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:309:9: sparse: expected void *ptr
kernel/rcu/tasks.h:309:9: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:309:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:309:9: sparse: expected void *ptr
kernel/rcu/tasks.h:309:9: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:375:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:375:17: sparse: expected void *ptr
kernel/rcu/tasks.h:375:17: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:375:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:375:17: sparse: expected void *ptr
kernel/rcu/tasks.h:375:17: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:375:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:375:17: sparse: expected void *ptr
kernel/rcu/tasks.h:375:17: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:375:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:375:17: sparse: expected void *ptr
kernel/rcu/tasks.h:375:17: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:375:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:375:17: sparse: expected void *ptr
kernel/rcu/tasks.h:375:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:375:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:375:17: sparse: expected void *ptr
kernel/rcu/tasks.h:375:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:375:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:375:17: sparse: expected void *ptr
kernel/rcu/tasks.h:375:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:375:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:375:17: sparse: expected void *ptr
kernel/rcu/tasks.h:375:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:415:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:415:17: sparse: expected void *ptr
kernel/rcu/tasks.h:415:17: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:415:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:415:17: sparse: expected void *ptr
kernel/rcu/tasks.h:415:17: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:415:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:415:17: sparse: expected void *ptr
kernel/rcu/tasks.h:415:17: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:415:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:415:17: sparse: expected void *ptr
kernel/rcu/tasks.h:415:17: sparse: got unsigned int [noderef] __percpu *
kernel/rcu/tasks.h:415:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:415:17: sparse: expected void *ptr
kernel/rcu/tasks.h:415:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:415:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:415:17: sparse: expected void *ptr
kernel/rcu/tasks.h:415:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:415:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:415:17: sparse: expected void *ptr
kernel/rcu/tasks.h:415:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:415:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/rcu/tasks.h:415:17: sparse: expected void *ptr
kernel/rcu/tasks.h:415:17: sparse: got int [noderef] __percpu *
kernel/rcu/tasks.h:476:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/rcu/tasks.h:476:9: sparse: expected void *ptr
--
>> kernel/entry/common.c:195:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/entry/common.c:195:9: sparse: expected void *ptr
kernel/entry/common.c:195:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/entry/common.c:195:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/entry/common.c:195:9: sparse: expected void *ptr
kernel/entry/common.c:195:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/entry/common.c:195:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/entry/common.c:195:9: sparse: expected void *ptr
kernel/entry/common.c:195:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/entry/common.c:195:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/entry/common.c:195:9: sparse: expected void *ptr
kernel/entry/common.c:195:9: sparse: got unsigned int [noderef] __percpu *
kernel/entry/common.c:195:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:195:9: sparse: expected void *ptr
kernel/entry/common.c:195:9: sparse: got int [noderef] __percpu *
kernel/entry/common.c:195:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:195:9: sparse: expected void *ptr
kernel/entry/common.c:195:9: sparse: got int [noderef] __percpu *
kernel/entry/common.c:195:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:195:9: sparse: expected void *ptr
kernel/entry/common.c:195:9: sparse: got int [noderef] __percpu *
kernel/entry/common.c:195:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:195:9: sparse: expected void *ptr
kernel/entry/common.c:195:9: sparse: got int [noderef] __percpu *
kernel/entry/common.c:208:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/entry/common.c:208:9: sparse: expected void *ptr
kernel/entry/common.c:208:9: sparse: got unsigned int [noderef] __percpu *
kernel/entry/common.c:208:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/entry/common.c:208:9: sparse: expected void *ptr
kernel/entry/common.c:208:9: sparse: got unsigned int [noderef] __percpu *
kernel/entry/common.c:208:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/entry/common.c:208:9: sparse: expected void *ptr
kernel/entry/common.c:208:9: sparse: got unsigned int [noderef] __percpu *
kernel/entry/common.c:208:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/entry/common.c:208:9: sparse: expected void *ptr
kernel/entry/common.c:208:9: sparse: got unsigned int [noderef] __percpu *
kernel/entry/common.c:208:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:208:9: sparse: expected void *ptr
kernel/entry/common.c:208:9: sparse: got int [noderef] __percpu *
kernel/entry/common.c:208:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:208:9: sparse: expected void *ptr
kernel/entry/common.c:208:9: sparse: got int [noderef] __percpu *
kernel/entry/common.c:208:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:208:9: sparse: expected void *ptr
kernel/entry/common.c:208:9: sparse: got int [noderef] __percpu *
kernel/entry/common.c:208:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:208:9: sparse: expected void *ptr
kernel/entry/common.c:208:9: sparse: got int [noderef] __percpu *
kernel/entry/common.c:404:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/entry/common.c:404:9: sparse: expected void *ptr
kernel/entry/common.c:404:9: sparse: got unsigned int [noderef] __percpu *
kernel/entry/common.c:404:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/entry/common.c:404:9: sparse: expected void *ptr
kernel/entry/common.c:404:9: sparse: got unsigned int [noderef] __percpu *
kernel/entry/common.c:404:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/entry/common.c:404:9: sparse: expected void *ptr
kernel/entry/common.c:404:9: sparse: got unsigned int [noderef] __percpu *
kernel/entry/common.c:404:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/entry/common.c:404:9: sparse: expected void *ptr
kernel/entry/common.c:404:9: sparse: got unsigned int [noderef] __percpu *
kernel/entry/common.c:404:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:404:9: sparse: expected void *ptr
kernel/entry/common.c:404:9: sparse: got int [noderef] __percpu *
kernel/entry/common.c:404:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:404:9: sparse: expected void *ptr
kernel/entry/common.c:404:9: sparse: got int [noderef] __percpu *
kernel/entry/common.c:404:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:404:9: sparse: expected void *ptr
kernel/entry/common.c:404:9: sparse: got int [noderef] __percpu *
kernel/entry/common.c:404:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:404:9: sparse: expected void *ptr
kernel/entry/common.c:404:9: sparse: got int [noderef] __percpu *
kernel/entry/common.c:447:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:447:29: sparse: expected void *ptr
kernel/entry/common.c:447:29: sparse: got int [noderef] __percpu *
kernel/entry/common.c:447:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:447:29: sparse: expected void *ptr
kernel/entry/common.c:447:29: sparse: got int [noderef] __percpu *
kernel/entry/common.c:447:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:447:29: sparse: expected void *ptr
kernel/entry/common.c:447:29: sparse: got int [noderef] __percpu *
kernel/entry/common.c:447:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/entry/common.c:447:29: sparse: expected void *ptr
kernel/entry/common.c:447:29: sparse: got int [noderef] __percpu *
--
>> kernel/time/hrtimer.c:1006:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/time/hrtimer.c:1006:9: sparse: expected void *ptr
kernel/time/hrtimer.c:1006:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/time/hrtimer.c:1006:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/time/hrtimer.c:1006:9: sparse: expected void *ptr
kernel/time/hrtimer.c:1006:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/time/hrtimer.c:1006:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/time/hrtimer.c:1006:9: sparse: expected void *ptr
kernel/time/hrtimer.c:1006:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/time/hrtimer.c:1006:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/time/hrtimer.c:1006:9: sparse: expected void *ptr
kernel/time/hrtimer.c:1006:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/time/hrtimer.c:1006:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/time/hrtimer.c:1006:9: sparse: expected void *ptr
kernel/time/hrtimer.c:1006:9: sparse: got int [noderef] __percpu *
>> kernel/time/hrtimer.c:1006:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/time/hrtimer.c:1006:9: sparse: expected void *ptr
kernel/time/hrtimer.c:1006:9: sparse: got int [noderef] __percpu *
>> kernel/time/hrtimer.c:1006:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/time/hrtimer.c:1006:9: sparse: expected void *ptr
kernel/time/hrtimer.c:1006:9: sparse: got int [noderef] __percpu *
>> kernel/time/hrtimer.c:1006:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/time/hrtimer.c:1006:9: sparse: expected void *ptr
kernel/time/hrtimer.c:1006:9: sparse: got int [noderef] __percpu *
--
>> kernel/time/posix-cpu-timers.c:1380:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/time/posix-cpu-timers.c:1380:9: sparse: expected void *ptr
kernel/time/posix-cpu-timers.c:1380:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/time/posix-cpu-timers.c:1380:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/time/posix-cpu-timers.c:1380:9: sparse: expected void *ptr
kernel/time/posix-cpu-timers.c:1380:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/time/posix-cpu-timers.c:1380:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/time/posix-cpu-timers.c:1380:9: sparse: expected void *ptr
kernel/time/posix-cpu-timers.c:1380:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/time/posix-cpu-timers.c:1380:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/time/posix-cpu-timers.c:1380:9: sparse: expected void *ptr
kernel/time/posix-cpu-timers.c:1380:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/time/posix-cpu-timers.c:1380:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/time/posix-cpu-timers.c:1380:9: sparse: expected void *ptr
kernel/time/posix-cpu-timers.c:1380:9: sparse: got int [noderef] __percpu *
>> kernel/time/posix-cpu-timers.c:1380:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/time/posix-cpu-timers.c:1380:9: sparse: expected void *ptr
kernel/time/posix-cpu-timers.c:1380:9: sparse: got int [noderef] __percpu *
>> kernel/time/posix-cpu-timers.c:1380:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/time/posix-cpu-timers.c:1380:9: sparse: expected void *ptr
kernel/time/posix-cpu-timers.c:1380:9: sparse: got int [noderef] __percpu *
>> kernel/time/posix-cpu-timers.c:1380:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/time/posix-cpu-timers.c:1380:9: sparse: expected void *ptr
kernel/time/posix-cpu-timers.c:1380:9: sparse: got int [noderef] __percpu *
kernel/time/posix-cpu-timers.c: note: in included file:
include/linux/sched/signal.h:752:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
include/linux/sched/signal.h:752:37: sparse: expected struct spinlock [usertype] *lock
include/linux/sched/signal.h:752:37: sparse: got struct spinlock [noderef] __rcu *
kernel/time/posix-cpu-timers.c:42:5: sparse: sparse: context imbalance in 'update_rlimit_cpu' - different lock contexts for basic block
include/linux/sched/signal.h:752:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
include/linux/sched/signal.h:752:37: sparse: expected struct spinlock [usertype] *lock
include/linux/sched/signal.h:752:37: sparse: got struct spinlock [noderef] __rcu *
include/linux/sched/signal.h:752:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
include/linux/sched/signal.h:752:37: sparse: expected struct spinlock [usertype] *lock
include/linux/sched/signal.h:752:37: sparse: got struct spinlock [noderef] __rcu *
include/linux/sched/signal.h:752:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
include/linux/sched/signal.h:752:37: sparse: expected struct spinlock [usertype] *lock
include/linux/sched/signal.h:752:37: sparse: got struct spinlock [noderef] __rcu *
include/linux/sched/signal.h:752:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
include/linux/sched/signal.h:752:37: sparse: expected struct spinlock [usertype] *lock
include/linux/sched/signal.h:752:37: sparse: got struct spinlock [noderef] __rcu *
include/linux/sched/signal.h:752:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
include/linux/sched/signal.h:752:37: sparse: expected struct spinlock [usertype] *lock
include/linux/sched/signal.h:752:37: sparse: got struct spinlock [noderef] __rcu *
include/linux/sched/signal.h:752:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
include/linux/sched/signal.h:752:37: sparse: expected struct spinlock [usertype] *lock
include/linux/sched/signal.h:752:37: sparse: got struct spinlock [noderef] __rcu *
--
lib/flex_proportions.c: note: in included file (through include/linux/mmzone.h, include/linux/gfp.h, include/linux/percpu_counter.h, ...):
>> include/linux/seqlock.h:269:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
include/linux/seqlock.h:269:9: sparse: expected void *ptr
include/linux/seqlock.h:269:9: sparse: got unsigned int [noderef] __percpu *
>> include/linux/seqlock.h:269:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
include/linux/seqlock.h:269:9: sparse: expected void *ptr
include/linux/seqlock.h:269:9: sparse: got unsigned int [noderef] __percpu *
>> include/linux/seqlock.h:269:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
include/linux/seqlock.h:269:9: sparse: expected void *ptr
include/linux/seqlock.h:269:9: sparse: got unsigned int [noderef] __percpu *
>> include/linux/seqlock.h:269:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
include/linux/seqlock.h:269:9: sparse: expected void *ptr
include/linux/seqlock.h:269:9: sparse: got unsigned int [noderef] __percpu *
>> include/linux/seqlock.h:269:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
include/linux/seqlock.h:269:9: sparse: expected void *ptr
include/linux/seqlock.h:269:9: sparse: got int [noderef] __percpu *
>> include/linux/seqlock.h:269:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
include/linux/seqlock.h:269:9: sparse: expected void *ptr
include/linux/seqlock.h:269:9: sparse: got int [noderef] __percpu *
>> include/linux/seqlock.h:269:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
include/linux/seqlock.h:269:9: sparse: expected void *ptr
include/linux/seqlock.h:269:9: sparse: got int [noderef] __percpu *
>> include/linux/seqlock.h:269:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
include/linux/seqlock.h:269:9: sparse: expected void *ptr
include/linux/seqlock.h:269:9: sparse: got int [noderef] __percpu *
vim +278 kernel/irq_work.c
76a33061b9323b Frederic Weisbecker 2014-08-16 271
e360adbe29241a Peter Zijlstra 2010-10-14 272 /*
e360adbe29241a Peter Zijlstra 2010-10-14 273 * Synchronize against the irq_work @entry, ensures the entry is not
e360adbe29241a Peter Zijlstra 2010-10-14 274 * currently in use.
e360adbe29241a Peter Zijlstra 2010-10-14 275 */
38aaf8090d34b6 Huang Ying 2011-09-08 276 void irq_work_sync(struct irq_work *work)
e360adbe29241a Peter Zijlstra 2010-10-14 277 {
3c7169a3bf8216 Frederic Weisbecker 2017-11-06 @278 lockdep_assert_irqs_enabled();
810979682ccc98 Sebastian Andrzej Siewior 2021-10-06 279 might_sleep();
810979682ccc98 Sebastian Andrzej Siewior 2021-10-06 280
09089db79859cb Sebastian Andrzej Siewior 2021-10-06 281 if ((IS_ENABLED(CONFIG_PREEMPT_RT) && !irq_work_is_hard(work)) ||
09089db79859cb Sebastian Andrzej Siewior 2021-10-06 282 !arch_irq_work_has_interrupt()) {
810979682ccc98 Sebastian Andrzej Siewior 2021-10-06 283 rcuwait_wait_event(&work->irqwait, !irq_work_is_busy(work),
810979682ccc98 Sebastian Andrzej Siewior 2021-10-06 284 TASK_UNINTERRUPTIBLE);
810979682ccc98 Sebastian Andrzej Siewior 2021-10-06 285 return;
810979682ccc98 Sebastian Andrzej Siewior 2021-10-06 286 }
e360adbe29241a Peter Zijlstra 2010-10-14 287
7a9f50a05843fe Peter Zijlstra 2020-06-15 288 while (irq_work_is_busy(work))
e360adbe29241a Peter Zijlstra 2010-10-14 289 cpu_relax();
e360adbe29241a Peter Zijlstra 2010-10-14 290 }
e360adbe29241a Peter Zijlstra 2010-10-14 291 EXPORT_SYMBOL_GPL(irq_work_sync);
b4c6f86ec2f648 Sebastian Andrzej Siewior 2021-10-07 292
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/3] LoongArch: Add stacktrace support
2022-07-28 14:05 ` [PATCH 3/3] LoongArch: Add stacktrace support Qing Zhang
` (3 preceding siblings ...)
2022-08-05 20:31 ` kernel test robot
@ 2022-08-10 13:16 ` kernel test robot
4 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2022-08-10 13:16 UTC (permalink / raw)
To: Qing Zhang, Huacai Chen, WANG Xuerui
Cc: kbuild-all, loongarch, linux-kernel, Jiaxun Yang, hejinyang
Hi Qing,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[also build test WARNING on v5.19]
[cannot apply to next-20220810]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Qing-Zhang/LoongArch-Add-guess-unwinder-support/20220728-220739
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 6e7765cb477a9753670d4351d14de93f1e9dbbd4
config: loongarch-randconfig-s042-20220810 (https://download.01.org/0day-ci/archive/20220810/202208102109.mnxcQi3g-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 12.1.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://github.com/intel-lab-lkp/linux/commit/32ef6acf6f5ecfadda21be77cbebb07b1c69e56a
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Qing-Zhang/LoongArch-Add-guess-unwinder-support/20220728-220739
git checkout 32ef6acf6f5ecfadda21be77cbebb07b1c69e56a
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=loongarch SHELL=/bin/bash
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> kernel/events/core.c:223:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:223:9: sparse: expected void *ptr
kernel/events/core.c:223:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/events/core.c:223:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:223:9: sparse: expected void *ptr
kernel/events/core.c:223:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/events/core.c:223:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:223:9: sparse: expected void *ptr
kernel/events/core.c:223:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/events/core.c:223:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:223:9: sparse: expected void *ptr
kernel/events/core.c:223:9: sparse: got unsigned int [noderef] __percpu *
>> kernel/events/core.c:223:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:223:9: sparse: expected void *ptr
kernel/events/core.c:223:9: sparse: got int [noderef] __percpu *
>> kernel/events/core.c:223:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:223:9: sparse: expected void *ptr
kernel/events/core.c:223:9: sparse: got int [noderef] __percpu *
>> kernel/events/core.c:223:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:223:9: sparse: expected void *ptr
kernel/events/core.c:223:9: sparse: got int [noderef] __percpu *
>> kernel/events/core.c:223:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:223:9: sparse: expected void *ptr
kernel/events/core.c:223:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:320:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:320:9: sparse: expected void *ptr
kernel/events/core.c:320:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:320:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:320:9: sparse: expected void *ptr
kernel/events/core.c:320:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:320:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:320:9: sparse: expected void *ptr
kernel/events/core.c:320:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:320:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:320:9: sparse: expected void *ptr
kernel/events/core.c:320:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:320:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:320:9: sparse: expected void *ptr
kernel/events/core.c:320:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:320:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:320:9: sparse: expected void *ptr
kernel/events/core.c:320:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:320:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:320:9: sparse: expected void *ptr
kernel/events/core.c:320:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:320:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:320:9: sparse: expected void *ptr
kernel/events/core.c:320:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1074:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:1074:9: sparse: expected void *ptr
kernel/events/core.c:1074:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:1074:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:1074:9: sparse: expected void *ptr
kernel/events/core.c:1074:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:1074:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:1074:9: sparse: expected void *ptr
kernel/events/core.c:1074:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:1074:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:1074:9: sparse: expected void *ptr
kernel/events/core.c:1074:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:1074:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:1074:9: sparse: expected void *ptr
kernel/events/core.c:1074:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1074:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:1074:9: sparse: expected void *ptr
kernel/events/core.c:1074:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1074:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:1074:9: sparse: expected void *ptr
kernel/events/core.c:1074:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1074:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:1074:9: sparse: expected void *ptr
kernel/events/core.c:1074:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1161:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:1161:9: sparse: expected void *ptr
kernel/events/core.c:1161:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:1161:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:1161:9: sparse: expected void *ptr
kernel/events/core.c:1161:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:1161:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:1161:9: sparse: expected void *ptr
kernel/events/core.c:1161:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:1161:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:1161:9: sparse: expected void *ptr
kernel/events/core.c:1161:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:1161:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:1161:9: sparse: expected void *ptr
kernel/events/core.c:1161:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1161:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:1161:9: sparse: expected void *ptr
kernel/events/core.c:1161:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1161:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:1161:9: sparse: expected void *ptr
kernel/events/core.c:1161:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1161:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:1161:9: sparse: expected void *ptr
kernel/events/core.c:1161:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1170:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:1170:9: sparse: expected void *ptr
kernel/events/core.c:1170:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:1170:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:1170:9: sparse: expected void *ptr
kernel/events/core.c:1170:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:1170:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:1170:9: sparse: expected void *ptr
kernel/events/core.c:1170:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:1170:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
kernel/events/core.c:1170:9: sparse: expected void *ptr
kernel/events/core.c:1170:9: sparse: got unsigned int [noderef] __percpu *
kernel/events/core.c:1170:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:1170:9: sparse: expected void *ptr
kernel/events/core.c:1170:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1170:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:1170:9: sparse: expected void *ptr
kernel/events/core.c:1170:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1170:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:1170:9: sparse: expected void *ptr
kernel/events/core.c:1170:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1170:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got int [noderef] __percpu * @@
kernel/events/core.c:1170:9: sparse: expected void *ptr
kernel/events/core.c:1170:9: sparse: got int [noderef] __percpu *
kernel/events/core.c:1402:15: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:1402:15: sparse: struct perf_event_context [noderef] __rcu *
--
>> crypto/crypto_engine.c:56:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
crypto/crypto_engine.c:56:9: sparse: expected void *ptr
crypto/crypto_engine.c:56:9: sparse: got unsigned int [noderef] __percpu *
>> crypto/crypto_engine.c:56:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
crypto/crypto_engine.c:56:9: sparse: expected void *ptr
crypto/crypto_engine.c:56:9: sparse: got unsigned int [noderef] __percpu *
>> crypto/crypto_engine.c:56:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
crypto/crypto_engine.c:56:9: sparse: expected void *ptr
crypto/crypto_engine.c:56:9: sparse: got unsigned int [noderef] __percpu *
>> crypto/crypto_engine.c:56:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *ptr @@ got unsigned int [noderef] __percpu * @@
crypto/crypto_engine.c:56:9: sparse: expected void *ptr
crypto/crypto_engine.c:56:9: sparse: got unsigned int [noderef] __percpu *
vim +223 kernel/events/core.c
fae3fde65138b60 Peter Zijlstra 2016-01-11 213
fae3fde65138b60 Peter Zijlstra 2016-01-11 214 static int event_function(void *info)
fae3fde65138b60 Peter Zijlstra 2016-01-11 215 {
fae3fde65138b60 Peter Zijlstra 2016-01-11 216 struct event_function_struct *efs = info;
fae3fde65138b60 Peter Zijlstra 2016-01-11 217 struct perf_event *event = efs->event;
fae3fde65138b60 Peter Zijlstra 2016-01-11 218 struct perf_event_context *ctx = event->ctx;
fae3fde65138b60 Peter Zijlstra 2016-01-11 219 struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
fae3fde65138b60 Peter Zijlstra 2016-01-11 220 struct perf_event_context *task_ctx = cpuctx->task_ctx;
63b6da39bb38e8f Peter Zijlstra 2016-01-14 221 int ret = 0;
fae3fde65138b60 Peter Zijlstra 2016-01-11 222
164446455a5d3f1 Frederic Weisbecker 2017-11-06 @223 lockdep_assert_irqs_disabled();
fae3fde65138b60 Peter Zijlstra 2016-01-11 224
63b6da39bb38e8f Peter Zijlstra 2016-01-14 225 perf_ctx_lock(cpuctx, task_ctx);
fae3fde65138b60 Peter Zijlstra 2016-01-11 226 /*
fae3fde65138b60 Peter Zijlstra 2016-01-11 227 * Since we do the IPI call without holding ctx->lock things can have
fae3fde65138b60 Peter Zijlstra 2016-01-11 228 * changed, double check we hit the task we set out to hit.
fae3fde65138b60 Peter Zijlstra 2016-01-11 229 */
fae3fde65138b60 Peter Zijlstra 2016-01-11 230 if (ctx->task) {
63b6da39bb38e8f Peter Zijlstra 2016-01-14 231 if (ctx->task != current) {
0da4cf3e0a68c97 Peter Zijlstra 2016-02-24 232 ret = -ESRCH;
63b6da39bb38e8f Peter Zijlstra 2016-01-14 233 goto unlock;
fae3fde65138b60 Peter Zijlstra 2016-01-11 234 }
fae3fde65138b60 Peter Zijlstra 2016-01-11 235
fae3fde65138b60 Peter Zijlstra 2016-01-11 236 /*
fae3fde65138b60 Peter Zijlstra 2016-01-11 237 * We only use event_function_call() on established contexts,
fae3fde65138b60 Peter Zijlstra 2016-01-11 238 * and event_function() is only ever called when active (or
fae3fde65138b60 Peter Zijlstra 2016-01-11 239 * rather, we'll have bailed in task_function_call() or the
fae3fde65138b60 Peter Zijlstra 2016-01-11 240 * above ctx->task != current test), therefore we must have
fae3fde65138b60 Peter Zijlstra 2016-01-11 241 * ctx->is_active here.
fae3fde65138b60 Peter Zijlstra 2016-01-11 242 */
fae3fde65138b60 Peter Zijlstra 2016-01-11 243 WARN_ON_ONCE(!ctx->is_active);
fae3fde65138b60 Peter Zijlstra 2016-01-11 244 /*
fae3fde65138b60 Peter Zijlstra 2016-01-11 245 * And since we have ctx->is_active, cpuctx->task_ctx must
fae3fde65138b60 Peter Zijlstra 2016-01-11 246 * match.
fae3fde65138b60 Peter Zijlstra 2016-01-11 247 */
63b6da39bb38e8f Peter Zijlstra 2016-01-14 248 WARN_ON_ONCE(task_ctx != ctx);
63b6da39bb38e8f Peter Zijlstra 2016-01-14 249 } else {
63b6da39bb38e8f Peter Zijlstra 2016-01-14 250 WARN_ON_ONCE(&cpuctx->ctx != ctx);
fae3fde65138b60 Peter Zijlstra 2016-01-11 251 }
63b6da39bb38e8f Peter Zijlstra 2016-01-14 252
fae3fde65138b60 Peter Zijlstra 2016-01-11 253 efs->func(event, cpuctx, ctx, efs->data);
63b6da39bb38e8f Peter Zijlstra 2016-01-14 254 unlock:
fae3fde65138b60 Peter Zijlstra 2016-01-11 255 perf_ctx_unlock(cpuctx, task_ctx);
fae3fde65138b60 Peter Zijlstra 2016-01-11 256
63b6da39bb38e8f Peter Zijlstra 2016-01-14 257 return ret;
fae3fde65138b60 Peter Zijlstra 2016-01-11 258 }
fae3fde65138b60 Peter Zijlstra 2016-01-11 259
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2022-08-10 13:16 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-28 14:05 [PATCH 1/3] LoongArch: Add guess unwinder support Qing Zhang
2022-07-28 14:05 ` [PATCH 2/3] LoongArch: Add prologue " Qing Zhang
2022-07-29 2:03 ` Youling Tang
2022-07-29 5:38 ` zhangqing
2022-07-29 2:14 ` Jinyang He
2022-07-29 5:39 ` zhangqing
2022-07-28 14:05 ` [PATCH 3/3] LoongArch: Add stacktrace support Qing Zhang
2022-07-29 2:13 ` Youling Tang
2022-07-31 12:17 ` kernel test robot
2022-08-02 19:18 ` kernel test robot
2022-08-05 20:31 ` kernel test robot
2022-08-10 13:16 ` kernel test robot
2022-07-29 2:01 ` [PATCH 1/3] LoongArch: Add guess unwinder support Youling Tang
2022-07-29 2:28 ` Jinyang He
2022-07-29 2:56 ` Youling Tang
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.