Message ID | 20241014-kunit-loongarch-v1-0-1699b2ad6099@linutronix.de |
---|---|
Headers | show |
Series | kunit: Add support for LoongArch | expand |
On Tue, Oct 15, 2024 at 2:14 PM Thomas Weißschuh <thomas.weissschuh@linutronix.de> wrote: > > Hi Huacai, > > On Tue, Oct 15, 2024 at 10:15:39AM +0800, Huacai Chen wrote: > > I can take this patch to the loongarch tree, but I think others should > > get upstream via kselftests tree? > > Yes, sounds good. > Could you take a look at patches 2 and 4, too? Bibo is more familiar with those, so +CC Bibo. This one is queued in the loongarch tree. Thanks. Huacai > > Thanks, > Thomas > > > On Mon, Oct 14, 2024 at 7:36 PM Thomas Weißschuh > > <thomas.weissschuh@linutronix.de> wrote: > > > > > > Not all tasks have a vDSO mapped, for example kthreads never do. > > > If such a task ever ends up calling stack_top(), it will derefence the > > > NULL vdso pointer and crash. > > > > > > This can for example happen when using kunit: > > > > > > [<9000000000203874>] stack_top+0x58/0xa8 > > > [<90000000002956cc>] arch_pick_mmap_layout+0x164/0x220 > > > [<90000000003c284c>] kunit_vm_mmap_init+0x108/0x12c > > > [<90000000003c1fbc>] __kunit_add_resource+0x38/0x8c > > > [<90000000003c2704>] kunit_vm_mmap+0x88/0xc8 > > > [<9000000000410b14>] usercopy_test_init+0xbc/0x25c > > > [<90000000003c1db4>] kunit_try_run_case+0x5c/0x184 > > > [<90000000003c3d54>] kunit_generic_run_threadfn_adapter+0x24/0x48 > > > [<900000000022e4bc>] kthread+0xc8/0xd4 > > > [<9000000000200ce8>] ret_from_kernel_thread+0xc/0xa4 > > > > > > Fixes: 803b0fc5c3f2 ("LoongArch: Add process management") > > > Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> > > > --- > > > arch/loongarch/kernel/process.c | 16 +++++++++------- > > > 1 file changed, 9 insertions(+), 7 deletions(-) > > > > > > diff --git a/arch/loongarch/kernel/process.c b/arch/loongarch/kernel/process.c > > > index f2ff8b5d591e4fd638109d2c98d75543c01a112c..6e58f65455c7ca3eae2e88ed852c8655a6701e5c 100644 > > > --- a/arch/loongarch/kernel/process.c > > > +++ b/arch/loongarch/kernel/process.c > > > @@ -293,13 +293,15 @@ unsigned long stack_top(void) > > > { > > > unsigned long top = TASK_SIZE & PAGE_MASK; > > > > > > - /* Space for the VDSO & data page */ > > > - top -= PAGE_ALIGN(current->thread.vdso->size); > > > - top -= VVAR_SIZE; > > > - > > > - /* Space to randomize the VDSO base */ > > > - if (current->flags & PF_RANDOMIZE) > > > - top -= VDSO_RANDOMIZE_SIZE; > > > + if (current->thread.vdso) { > > > + /* Space for the VDSO & data page */ > > > + top -= PAGE_ALIGN(current->thread.vdso->size); > > > + top -= VVAR_SIZE; > > > + > > > + /* Space to randomize the VDSO base */ > > > + if (current->flags & PF_RANDOMIZE) > > > + top -= VDSO_RANDOMIZE_SIZE; > > > + } > > > > > > return top; > > > } > > > > > > -- > > > 2.47.0 > > >
Reviewed-by: Bibo Mao <maobibo@loongson.cn> On 2024/10/14 下午7:36, Thomas Weißschuh wrote: > QEMU for LoongArch does not yet support shutdown/restart through ACPI. > Use the pvpanic driver to enable shutdowns. > This requires 9.1.0 for shutdown support in pvpanic, but that is the > requirement of kunit on LoongArch anyways. > > Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> > --- > tools/testing/kunit/qemu_configs/loongarch.py | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/kunit/qemu_configs/loongarch.py b/tools/testing/kunit/qemu_configs/loongarch.py > index e7bb7c07819677dfdefac012821a732555813cae..1d2b780fbd5c0bde20aa6a5cd1217d0b3b443a93 100644 > --- a/tools/testing/kunit/qemu_configs/loongarch.py > +++ b/tools/testing/kunit/qemu_configs/loongarch.py > @@ -4,13 +4,16 @@ QEMU_ARCH = QemuArchParams(linux_arch='loongarch', > kconfig=''' > CONFIG_EFI_STUB=n > CONFIG_PCI_HOST_GENERIC=y > +CONFIG_PVPANIC=y > +CONFIG_PVPANIC_PCI=y > CONFIG_SERIAL_8250=y > CONFIG_SERIAL_8250_CONSOLE=y > CONFIG_SERIAL_OF_PLATFORM=y > ''', > qemu_arch='loongarch64', > kernel_path='arch/loongarch/boot/vmlinux.elf', > - kernel_command_line='console=ttyS0', > + kernel_command_line='console=ttyS0 kunit_shutdown=poweroff', > extra_qemu_params=[ > '-machine', 'virt', > + '-device', 'pvpanic-pci', > '-cpu', 'max',]) >
Enable LoongArch support in kunit. Example: $ ./tools/testing/kunit/kunit.py run --arch=loongarch --cross_compile=$CROSS_COMPILE [13:32:45] Configuring KUnit Kernel ... [13:32:45] Building KUnit Kernel ... Populating config with: $ make ARCH=loongarch olddefconfig CROSS_COMPILE=$CROSS_COMPILE Building with: $ make all compile_commands.json ARCH=loongarch --jobs=8 CROSS_COMPILE=$CROSS_COMPILE [13:32:48] Starting KUnit Kernel (1/1)... [13:32:48] ============================================================ Running tests with: $ qemu-system-loongarch64 -nodefaults -m 1024 -kernel .kunit/arch/loongarch/boot/vmlinux.elf -append 'kunit.enable=1 console=ttyS0 kunit_shutdown=poweroff' -no-reboot -nographic -serial stdio -machine virt -device pvpanic-pci -cpu max ... [13:33:14] ============================================================ [13:33:14] Testing complete. Ran 493 tests: passed: 453, skipped: 40 [13:33:14] Elapsed time: 28.862s total, 0.002s configuring, 2.526s building, 26.302s running Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> --- Thomas Weißschuh (4): LoongArch: Don't crash in stack_top() for tasks without vDSO kunit: qemu_configs: add LoongArch config kunit: tool: Allow overriding the shutdown mode from qemu config kunit: qemu_configs: loongarch: Enable shutdown arch/loongarch/kernel/process.c | 16 +++++++++------- tools/testing/kunit/kunit_kernel.py | 4 +++- tools/testing/kunit/qemu_configs/loongarch.py | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+), 8 deletions(-) --- base-commit: 6485cf5ea253d40d507cd71253c9568c5470cd27 change-id: 20241014-kunit-loongarch-98a5b756e818 Best regards,