[PATCH OLK-6.6 1/8] objtool: Fix C jump table annotations for Clang

From: Ard Biesheuvel <ardb@kernel.org> mainline inclusion from mainline-v6.14-rc5 commit 73cfc53cc3b6380eccf013049574485f64cb83ca category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/IC10DU CVE: NA Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?i... -------------------------------- A C jump table (such as the one used by the BPF interpreter) is a const global array of absolute code addresses, and this means that the actual values in the table may not be known until the kernel is booted (e.g., when using KASLR or when the kernel VA space is sized dynamically). When using PIE codegen, the compiler will default to placing such const global objects in .data.rel.ro (which is annotated as writable), rather than .rodata (which is annotated as read-only). As C jump tables are explicitly emitted into .rodata, this used to result in warnings for LoongArch builds (which uses PIE codegen for the entire kernel) like Warning: setting incorrect section attributes for .rodata..c_jump_table due to the fact that the explicitly specified .rodata section inherited the read-write annotation that the compiler uses for such objects when using PIE codegen. This warning was suppressed by explicitly adding the read-only annotation to the __attribute__((section(""))) string, by commit c5b1184decc8 ("compiler.h: specify correct attribute for .rodata..c_jump_table") Unfortunately, this hack does not work on Clang's integrated assembler, which happily interprets the appended section type and permission specifiers as part of the section name, which therefore no longer matches the hard-coded pattern '.rodata..c_jump_table' that objtool expects, causing it to emit a warning kernel/bpf/core.o: warning: objtool: ___bpf_prog_run+0x20: sibling call from callable instruction with modified stack frame Work around this, by emitting C jump tables into .data.rel.ro instead, which is treated as .rodata by the linker script for all builds, not just PIE based ones. Fixes: c5b1184decc8 ("compiler.h: specify correct attribute for .rodata..c_jump_table") Tested-by: Tiezhu Yang <yangtiezhu@loongson.cn> # on LoongArch Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Link: https://lore.kernel.org/r/20250221135704.431269-6-ardb+git@google.com Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org> --- include/linux/compiler.h | 2 +- tools/objtool/check.c | 7 ++++--- tools/objtool/include/objtool/special.h | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/include/linux/compiler.h b/include/linux/compiler.h index db140f106f3d..c61c59e26e1b 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -133,7 +133,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, #define annotate_unreachable() __annotate_unreachable(__COUNTER__) /* Annotate a C jump table to allow objtool to follow the code flow */ -#define __annotate_jump_table __section(".rodata..c_jump_table,\"a\",@progbits #") +#define __annotate_jump_table __section(".data.rel.ro.c_jump_table") #else /* !CONFIG_OBJTOOL */ #define annotate_reachable() diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 6e9dd6d6db37..c88131a4b1d3 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -2559,13 +2559,14 @@ static void mark_rodata(struct objtool_file *file) * * - .rodata: can contain GCC switch tables * - .rodata.<func>: same, if -fdata-sections is being used - * - .rodata..c_jump_table: contains C annotated jump tables + * - .data.rel.ro.c_jump_table: contains C annotated jump tables * * .rodata.str1.* sections are ignored; they don't contain jump tables. */ for_each_sec(file, sec) { - if (!strncmp(sec->name, ".rodata", 7) && - !strstr(sec->name, ".str1.")) { + if ((!strncmp(sec->name, ".rodata", 7) && + !strstr(sec->name, ".str1.")) || + !strncmp(sec->name, ".data.rel.ro", 12)) { sec->rodata = true; found = true; } diff --git a/tools/objtool/include/objtool/special.h b/tools/objtool/include/objtool/special.h index 86d4af9c5aa9..89ee12b1a138 100644 --- a/tools/objtool/include/objtool/special.h +++ b/tools/objtool/include/objtool/special.h @@ -10,7 +10,7 @@ #include <objtool/check.h> #include <objtool/elf.h> -#define C_JUMP_TABLE_SECTION ".rodata..c_jump_table" +#define C_JUMP_TABLE_SECTION ".data.rel.ro.c_jump_table" struct special_alt { struct list_head list; -- 2.43.0

From: Ming Wang <wangming01@loongson.cn> LoongArch inclusion category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/IC10DU CVE: NA -------------------------------- This commit disables the `CONFIG_RT_GROUP_SCHED` kernel configuration option. Enabling this option allows group scheduling of real-time (RT) processes. In cgroup2 environments, this can lead to resource management problems, especially for services using the SCHED_RR scheduling policy. While moving all RT processes to the root cgroup is a possible workaround, it's often impractical in complex system configurations, when dealing with legacy applications, or with kernel threads. systemd's cgroup management can also conflict with manual relocation attempts. Link: https://docs.kernel.org/admin-guide/cgroup-v2.html#cpu Change-Id: I3f344f23c784221bc3095dba889c5e247d6a802f Signed-off-by: Ming Wang <wangming01@loongson.cn> --- arch/loongarch/configs/loongson3_defconfig | 1 - 1 file changed, 1 deletion(-) diff --git a/arch/loongarch/configs/loongson3_defconfig b/arch/loongarch/configs/loongson3_defconfig index 980f5f2c99a1..86eae1cee082 100644 --- a/arch/loongarch/configs/loongson3_defconfig +++ b/arch/loongarch/configs/loongson3_defconfig @@ -18,7 +18,6 @@ CONFIG_NUMA_BALANCING=y CONFIG_MEMCG=y CONFIG_BLK_CGROUP=y CONFIG_CFS_BANDWIDTH=y -CONFIG_RT_GROUP_SCHED=y CONFIG_CGROUP_PIDS=y CONFIG_CGROUP_RDMA=y CONFIG_CGROUP_FREEZER=y -- 2.43.0

From: Juxin Gao <gaojuxin@loongson.cn> LoongArch inclusion category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/IC10DU CVE: NA -------------------------------- Change-Id: I47233850df67159b16c2b7f21a1e49a0f18deaa6 Signed-off-by: Juxin Gao <gaojuxin@loongson.cn> --- arch/loongarch/configs/loongson3_defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/loongarch/configs/loongson3_defconfig b/arch/loongarch/configs/loongson3_defconfig index 86eae1cee082..fae86d20fa43 100644 --- a/arch/loongarch/configs/loongson3_defconfig +++ b/arch/loongarch/configs/loongson3_defconfig @@ -2204,4 +2204,5 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60 # CONFIG_RCU_TRACE is not set CONFIG_FUNCTION_TRACER=y # CONFIG_STRICT_DEVMEM is not set +CONFIG_UNWINDER_ORC=y # CONFIG_RUNTIME_TESTING_MENU is not set -- 2.43.0

LoongArch inclusion category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/IC10DU CVE: NA -------------------------------- enable Loongson Binary Translation (LBT) support. Signed-off-by: Hongchen Zhang <zhanghongchen@loongson.cn> --- arch/loongarch/configs/loongson3_defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/loongarch/configs/loongson3_defconfig b/arch/loongarch/configs/loongson3_defconfig index fae86d20fa43..7bbf02c95a03 100644 --- a/arch/loongarch/configs/loongson3_defconfig +++ b/arch/loongarch/configs/loongson3_defconfig @@ -44,6 +44,7 @@ CONFIG_NR_CPUS=256 CONFIG_NUMA=y CONFIG_CPU_HAS_LSX=y CONFIG_CPU_HAS_LASX=y +CONFIG_CPU_HAS_LBT=y CONFIG_LIVEPATCH=y CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_STAT=y -- 2.43.0

From: Gao Qihang <gaoqihang@loongson.cn> LoongArch inclusion category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/IC10DU CVE: NA -------------------------------- According to PCI Firmware Specification, if ACPI DSM#5 function returns 0, the OS must retain the resource allocation for PCI in the firmware; if ACPI DSM#5 function returns 1, the OS can ignore the resource allocation for PCI and reallocate it. Change-Id: I692bcbc4269b2321aff80fe352bfe3aef5340424 Signed-off-by: Gao Qihang <gaoqihang@loongson.cn> Signed-off-by: Juxin Gao <gaojuxin@loongson.cn> --- arch/loongarch/pci/acpi.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/arch/loongarch/pci/acpi.c b/arch/loongarch/pci/acpi.c index 5ba4d3a169b2..38b2a45473e0 100644 --- a/arch/loongarch/pci/acpi.c +++ b/arch/loongarch/pci/acpi.c @@ -346,6 +346,7 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) struct acpi_pci_root_ops *root_ops; int domain = root->segment; int busnum = root->secondary.start; + struct pci_host_bridge *host; info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) { @@ -386,8 +387,17 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) return NULL; } - pci_bus_size_bridges(bus); - pci_bus_assign_resources(bus); + /* If we must preserve the resource configuration, claim now */ + host = pci_find_host_bridge(bus); + if (host->preserve_config) + pci_bus_claim_resources(bus); + + /* + * Assign whatever was left unassigned. If we didn't claim above, + * this will reassign everything. + */ + pci_assign_unassigned_root_bus_resources(bus); + list_for_each_entry(child, &bus->children, node) pcie_bus_configure_settings(child); } -- 2.43.0

From: Tiezhu Yang <yangtiezhu@loongson.cn> LoongArch inclusion category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/IC10DU CVE: NA -------------------------------- Like the other relevant symbols, export them and put the function declarations in header files rather than source files. Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Change-Id: If307f5fe2fac8fe363d072f664f637c3ce1a8cd3 --- arch/loongarch/include/asm/fpu.h | 6 ++++++ arch/loongarch/include/asm/lbt.h | 4 ++++ arch/loongarch/kernel/fpu.S | 6 ++++++ arch/loongarch/kernel/lbt.S | 4 ++++ arch/loongarch/kernel/signal.c | 21 --------------------- 5 files changed, 20 insertions(+), 21 deletions(-) diff --git a/arch/loongarch/include/asm/fpu.h b/arch/loongarch/include/asm/fpu.h index 4d635b8e3245..772741322785 100644 --- a/arch/loongarch/include/asm/fpu.h +++ b/arch/loongarch/include/asm/fpu.h @@ -27,16 +27,22 @@ extern void kernel_fpu_end(void); extern void _init_fpu(unsigned int); extern void _save_fp(struct loongarch_fpu *); extern void _restore_fp(struct loongarch_fpu *); +extern int _save_fp_context(void __user *fpregs, void __user *fcc, void __user *csr); +extern int _restore_fp_context(void __user *fpregs, void __user *fcc, void __user *csr); extern void _save_lsx(struct loongarch_fpu *fpu); extern void _restore_lsx(struct loongarch_fpu *fpu); extern void _init_lsx_upper(void); extern void _restore_lsx_upper(struct loongarch_fpu *fpu); +extern int _save_lsx_context(void __user *fpregs, void __user *fcc, void __user *fcsr); +extern int _restore_lsx_context(void __user *fpregs, void __user *fcc, void __user *fcsr); extern void _save_lasx(struct loongarch_fpu *fpu); extern void _restore_lasx(struct loongarch_fpu *fpu); extern void _init_lasx_upper(void); extern void _restore_lasx_upper(struct loongarch_fpu *fpu); +extern int _save_lasx_context(void __user *fpregs, void __user *fcc, void __user *fcsr); +extern int _restore_lasx_context(void __user *fpregs, void __user *fcc, void __user *fcsr); static inline void enable_lsx(void); static inline void disable_lsx(void); diff --git a/arch/loongarch/include/asm/lbt.h b/arch/loongarch/include/asm/lbt.h index e671978bf552..24a9ee232fee 100644 --- a/arch/loongarch/include/asm/lbt.h +++ b/arch/loongarch/include/asm/lbt.h @@ -15,6 +15,10 @@ extern void _init_lbt(void); extern void _save_lbt(struct loongarch_lbt *); extern void _restore_lbt(struct loongarch_lbt *); +extern int _save_lbt_context(void __user *regs, void __user *eflags); +extern int _restore_lbt_context(void __user *regs, void __user *eflags); +extern int _save_ftop_context(void __user *ftop); +extern int _restore_ftop_context(void __user *ftop); static inline int is_lbt_enabled(void) { diff --git a/arch/loongarch/kernel/fpu.S b/arch/loongarch/kernel/fpu.S index 6ab640101457..28caf416ae36 100644 --- a/arch/loongarch/kernel/fpu.S +++ b/arch/loongarch/kernel/fpu.S @@ -458,6 +458,7 @@ SYM_FUNC_START(_save_fp_context) li.w a0, 0 # success jr ra SYM_FUNC_END(_save_fp_context) +EXPORT_SYMBOL_GPL(_save_fp_context) /* * a0: fpregs @@ -471,6 +472,7 @@ SYM_FUNC_START(_restore_fp_context) li.w a0, 0 # success jr ra SYM_FUNC_END(_restore_fp_context) +EXPORT_SYMBOL_GPL(_restore_fp_context) /* * a0: fpregs @@ -484,6 +486,7 @@ SYM_FUNC_START(_save_lsx_context) li.w a0, 0 # success jr ra SYM_FUNC_END(_save_lsx_context) +EXPORT_SYMBOL_GPL(_save_lsx_context) /* * a0: fpregs @@ -497,6 +500,7 @@ SYM_FUNC_START(_restore_lsx_context) li.w a0, 0 # success jr ra SYM_FUNC_END(_restore_lsx_context) +EXPORT_SYMBOL_GPL(_restore_lsx_context) /* * a0: fpregs @@ -510,6 +514,7 @@ SYM_FUNC_START(_save_lasx_context) li.w a0, 0 # success jr ra SYM_FUNC_END(_save_lasx_context) +EXPORT_SYMBOL_GPL(_save_lasx_context) /* * a0: fpregs @@ -523,6 +528,7 @@ SYM_FUNC_START(_restore_lasx_context) li.w a0, 0 # success jr ra SYM_FUNC_END(_restore_lasx_context) +EXPORT_SYMBOL_GPL(_restore_lasx_context) .L_fpu_fault: li.w a0, -EFAULT # failure diff --git a/arch/loongarch/kernel/lbt.S b/arch/loongarch/kernel/lbt.S index 001f061d226a..71678912d24c 100644 --- a/arch/loongarch/kernel/lbt.S +++ b/arch/loongarch/kernel/lbt.S @@ -90,6 +90,7 @@ SYM_FUNC_START(_save_lbt_context) li.w a0, 0 # success jr ra SYM_FUNC_END(_save_lbt_context) +EXPORT_SYMBOL_GPL(_save_lbt_context) /* * a0: scr @@ -110,6 +111,7 @@ SYM_FUNC_START(_restore_lbt_context) li.w a0, 0 # success jr ra SYM_FUNC_END(_restore_lbt_context) +EXPORT_SYMBOL_GPL(_restore_lbt_context) /* * a0: ftop @@ -120,6 +122,7 @@ SYM_FUNC_START(_save_ftop_context) li.w a0, 0 # success jr ra SYM_FUNC_END(_save_ftop_context) +EXPORT_SYMBOL_GPL(_save_ftop_context) /* * a0: ftop @@ -150,6 +153,7 @@ SYM_FUNC_START(_restore_ftop_context) li.w a0, 0 # success jr ra SYM_FUNC_END(_restore_ftop_context) +EXPORT_SYMBOL_GPL(_restore_ftop_context) .L_lbt_fault: li.w a0, -EFAULT # failure diff --git a/arch/loongarch/kernel/signal.c b/arch/loongarch/kernel/signal.c index 4a3686d13349..12dc72868455 100644 --- a/arch/loongarch/kernel/signal.c +++ b/arch/loongarch/kernel/signal.c @@ -50,27 +50,6 @@ #define lock_lbt_owner() ({ preempt_disable(); pagefault_disable(); }) #define unlock_lbt_owner() ({ pagefault_enable(); preempt_enable(); }) -/* Assembly functions to move context to/from the FPU */ -extern asmlinkage int -_save_fp_context(void __user *fpregs, void __user *fcc, void __user *csr); -extern asmlinkage int -_restore_fp_context(void __user *fpregs, void __user *fcc, void __user *csr); -extern asmlinkage int -_save_lsx_context(void __user *fpregs, void __user *fcc, void __user *fcsr); -extern asmlinkage int -_restore_lsx_context(void __user *fpregs, void __user *fcc, void __user *fcsr); -extern asmlinkage int -_save_lasx_context(void __user *fpregs, void __user *fcc, void __user *fcsr); -extern asmlinkage int -_restore_lasx_context(void __user *fpregs, void __user *fcc, void __user *fcsr); - -#ifdef CONFIG_CPU_HAS_LBT -extern asmlinkage int _save_lbt_context(void __user *regs, void __user *eflags); -extern asmlinkage int _restore_lbt_context(void __user *regs, void __user *eflags); -extern asmlinkage int _save_ftop_context(void __user *ftop); -extern asmlinkage int _restore_ftop_context(void __user *ftop); -#endif - struct rt_sigframe { struct siginfo rs_info; struct ucontext rs_uctx; -- 2.43.0

From: Tiezhu Yang <yangtiezhu@loongson.cn> LoongArch inclusion category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/IC10DU CVE: NA -------------------------------- So that they can be probed in the kernel modules to do something. Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Change-Id: I01c30b086c60e0845cbb83915ccf1990e66836aa --- arch/loongarch/kernel/ptrace.c | 37 ++++++++++++++++++++++++---------- arch/loongarch/kernel/signal.c | 7 +++++-- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/arch/loongarch/kernel/ptrace.c b/arch/loongarch/kernel/ptrace.c index 5e2402cfcab0..d2058102179b 100644 --- a/arch/loongarch/kernel/ptrace.c +++ b/arch/loongarch/kernel/ptrace.c @@ -72,9 +72,13 @@ void ptrace_disable(struct task_struct *child) /* regset get/set implementations */ -static int gpr_get(struct task_struct *target, - const struct user_regset *regset, - struct membuf to) +int gpr_get(struct task_struct *target, + const struct user_regset *regset, + struct membuf to); + +int gpr_get(struct task_struct *target, + const struct user_regset *regset, + struct membuf to) { int r; struct pt_regs *regs = task_pt_regs(target); @@ -87,10 +91,15 @@ static int gpr_get(struct task_struct *target, return r; } -static int gpr_set(struct task_struct *target, - const struct user_regset *regset, - unsigned int pos, unsigned int count, - const void *kbuf, const void __user *ubuf) +int gpr_set(struct task_struct *target, + const struct user_regset *regset, + unsigned int pos, unsigned int count, + const void *kbuf, const void __user *ubuf); + +int gpr_set(struct task_struct *target, + const struct user_regset *regset, + unsigned int pos, unsigned int count, + const void *kbuf, const void __user *ubuf) { int err; int a0_start = sizeof(u64) * GPR_NUM; @@ -950,8 +959,11 @@ const struct user_regset_view *task_user_regset_view(struct task_struct *task) return &user_loongarch64_view; } -static inline int read_user(struct task_struct *target, unsigned long addr, - unsigned long __user *data) +int read_user(struct task_struct *target, unsigned long addr, + unsigned long __user *data); + +int read_user(struct task_struct *target, unsigned long addr, + unsigned long __user *data) { unsigned long tmp = 0; @@ -975,8 +987,11 @@ static inline int read_user(struct task_struct *target, unsigned long addr, return put_user(tmp, data); } -static inline int write_user(struct task_struct *target, unsigned long addr, - unsigned long data) +int write_user(struct task_struct *target, unsigned long addr, + unsigned long data); + +int write_user(struct task_struct *target, unsigned long addr, + unsigned long data) { switch (addr) { case 0 ... 31: diff --git a/arch/loongarch/kernel/signal.c b/arch/loongarch/kernel/signal.c index 12dc72868455..e638a5394a08 100644 --- a/arch/loongarch/kernel/signal.c +++ b/arch/loongarch/kernel/signal.c @@ -935,8 +935,11 @@ SYSCALL_DEFINE0(rt_sigreturn) return 0; } -static int setup_rt_frame(void *sig_return, struct ksignal *ksig, - struct pt_regs *regs, sigset_t *set) +int setup_rt_frame(void *sig_return, struct ksignal *ksig, + struct pt_regs *regs, sigset_t *set); + +int setup_rt_frame(void *sig_return, struct ksignal *ksig, + struct pt_regs *regs, sigset_t *set) { int err = 0; struct extctx_layout extctx; -- 2.43.0

From: Tiezhu Yang <yangtiezhu@loongson.cn> LoongArch inclusion category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/IC10DU CVE: NA -------------------------------- So that they can be called in the kernel modules to do something. Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Change-Id: I8892ff991bfc850f2016203ceb7d61595b7b8cba --- arch/loongarch/kernel/Makefile | 1 + arch/loongarch/kernel/extern.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 arch/loongarch/kernel/extern.c diff --git a/arch/loongarch/kernel/Makefile b/arch/loongarch/kernel/Makefile index caf9a0b5e62d..327af6b33cf6 100644 --- a/arch/loongarch/kernel/Makefile +++ b/arch/loongarch/kernel/Makefile @@ -7,6 +7,7 @@ OBJECT_FILES_NON_STANDARD_head.o := y extra-y := vmlinux.lds +obj-y += extern.o obj-y += head.o cpu-probe.o cacheinfo.o env.o setup.o entry.o genex.o \ traps.o irq.o idle.o process.o dma.o mem.o io.o reset.o switch.o \ elf.o syscall.o signal.o time.o topology.o inst.o ptrace.o vdso.o \ diff --git a/arch/loongarch/kernel/extern.c b/arch/loongarch/kernel/extern.c new file mode 100644 index 000000000000..11a94c331037 --- /dev/null +++ b/arch/loongarch/kernel/extern.c @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0 +#include <linux/signal.h> + +void loongarch_set_current_blocked(sigset_t *newset); +int loongarch_copy_siginfo_to_user(siginfo_t __user *to, const kernel_siginfo_t *from); +int loongarch___save_altstack(stack_t __user *uss, unsigned long sp); +int loongarch_restore_altstack(const stack_t __user *uss); + +void loongarch_set_current_blocked(sigset_t *newset) +{ + return set_current_blocked(newset); +} +EXPORT_SYMBOL_GPL(loongarch_set_current_blocked); + +int loongarch_copy_siginfo_to_user(siginfo_t __user *to, const kernel_siginfo_t *from) +{ + return copy_siginfo_to_user(to, from); +} +EXPORT_SYMBOL_GPL(loongarch_copy_siginfo_to_user); + +int loongarch___save_altstack(stack_t __user *uss, unsigned long sp) +{ + return __save_altstack(uss, sp); +} +EXPORT_SYMBOL_GPL(loongarch___save_altstack); + +int loongarch_restore_altstack(const stack_t __user *uss) +{ + return restore_altstack(uss); +} +EXPORT_SYMBOL_GPL(loongarch_restore_altstack); -- 2.43.0

反馈: 您发送到kernel@openeuler.org的补丁/补丁集,转换为PR失败! 邮件列表地址:https://mailweb.openeuler.org/archives/list/kernel@openeuler.org/message/RYB... 失败原因:补丁集缺失封面信息 建议解决方法:请提供补丁集并重新发送您的补丁集到邮件列表 FeedBack: The patch(es) which you have sent to kernel@openeuler.org has been converted to PR failed! Mailing list address: https://mailweb.openeuler.org/archives/list/kernel@openeuler.org/message/RYB... Failed Reason: the cover of the patches is missing Suggest Solution: please checkout and apply the patches' cover and send all again
participants (2)
-
Hongchen Zhang
-
patchwork bot