Skip to content

Commit fb5bc34

Browse files
committed
Merge tag 'loongarch-6.18' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
Pull LoongArch updates from Huacai Chen: - Initialize acpi_gbl_use_global_lock to false - Allow specify SIMD width via kernel parameters - Add kexec_file (both EFI & ELF format) support - Add PER_VMA_LOCK for page fault handling support - Improve BPF trampoline support - Update the default config file - Some bug fixes and other small changes * tag 'loongarch-6.18' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson: (23 commits) LoongArch: Update Loongson-3 default config file LoongArch: BPF: Sign-extend struct ops return values properly LoongArch: BPF: Make error handling robust in arch_prepare_bpf_trampoline() LoongArch: BPF: Make trampoline size stable LoongArch: BPF: Don't align trampoline size LoongArch: BPF: No support of struct argument in trampoline programs LoongArch: BPF: No text_poke() for kernel text LoongArch: BPF: Remove duplicated bpf_flush_icache() LoongArch: BPF: Remove duplicated flags check LoongArch: BPF: Fix uninitialized symbol 'retval_off' LoongArch: BPF: Optimize sign-extention mov instructions LoongArch: Handle new atomic instructions for probes LoongArch: Try VMA lock-based page fault handling first LoongArch: Automatically disable kaslr if boot from kexec_file LoongArch: Add crash dump support for kexec_file LoongArch: Add ELF binary support for kexec_file LoongArch: Add EFI binary support for kexec_file LoongArch: Add preparatory infrastructure for kexec_file LoongArch: Add struct loongarch_image_header for kernel LoongArch: Allow specify SIMD width via kernel parameters ...
2 parents fc282d1 + 032676f commit fb5bc34

File tree

17 files changed

+809
-50
lines changed

17 files changed

+809
-50
lines changed

arch/loongarch/Kconfig

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ config LOONGARCH
7070
select ARCH_SUPPORTS_LTO_CLANG_THIN
7171
select ARCH_SUPPORTS_MSEAL_SYSTEM_MAPPINGS
7272
select ARCH_SUPPORTS_NUMA_BALANCING
73+
select ARCH_SUPPORTS_PER_VMA_LOCK
7374
select ARCH_SUPPORTS_RT
7475
select ARCH_SUPPORTS_SCHED_SMT if SMP
7576
select ARCH_SUPPORTS_SCHED_MC if SMP
@@ -618,6 +619,16 @@ config CPU_HAS_PREFETCH
618619
config ARCH_SUPPORTS_KEXEC
619620
def_bool y
620621

622+
config ARCH_SUPPORTS_KEXEC_FILE
623+
def_bool 64BIT
624+
625+
config ARCH_SELECTS_KEXEC_FILE
626+
def_bool 64BIT
627+
depends on KEXEC_FILE
628+
select KEXEC_ELF
629+
select RELOCATABLE
630+
select HAVE_IMA_KEXEC if IMA
631+
621632
config ARCH_SUPPORTS_CRASH_DUMP
622633
def_bool y
623634

arch/loongarch/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ ifdef CONFIG_LTO_CLANG
115115
# The annotate-tablejump option can not be passed to LLVM backend when LTO is enabled.
116116
# Ensure it is aware of linker with LTO, '--loongarch-annotate-tablejump' also needs to
117117
# be passed via '-mllvm' to ld.lld.
118-
KBUILD_LDFLAGS += -mllvm --loongarch-annotate-tablejump
118+
KBUILD_LDFLAGS += $(call ld-option,-mllvm --loongarch-annotate-tablejump)
119119
endif
120120
endif
121121

@@ -129,7 +129,7 @@ KBUILD_RUSTFLAGS_KERNEL += -Crelocation-model=pie
129129
LDFLAGS_vmlinux += -static -pie --no-dynamic-linker -z notext $(call ld-option, --apply-dynamic-relocs)
130130
endif
131131

132-
cflags-y += $(call cc-option, -mno-check-zero-division)
132+
cflags-y += $(call cc-option, -mno-check-zero-division -fno-isolate-erroneous-paths-dereference)
133133

134134
ifndef CONFIG_KASAN
135135
cflags-y += -fno-builtin-memcpy -fno-builtin-memmove -fno-builtin-memset

arch/loongarch/configs/loongson3_defconfig

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ CONFIG_EXPERT=y
4545
CONFIG_KALLSYMS_ALL=y
4646
CONFIG_PERF_EVENTS=y
4747
CONFIG_KEXEC=y
48+
CONFIG_KEXEC_FILE=y
4849
CONFIG_CRASH_DUMP=y
4950
CONFIG_LOONGARCH=y
5051
CONFIG_64BIT=y
@@ -55,7 +56,7 @@ CONFIG_DMI=y
5556
CONFIG_EFI=y
5657
CONFIG_SMP=y
5758
CONFIG_HOTPLUG_CPU=y
58-
CONFIG_NR_CPUS=256
59+
CONFIG_NR_CPUS=2048
5960
CONFIG_NUMA=y
6061
CONFIG_CPU_HAS_FPU=y
6162
CONFIG_CPU_HAS_LSX=y
@@ -154,7 +155,16 @@ CONFIG_INET_ESPINTCP=y
154155
CONFIG_INET_IPCOMP=m
155156
CONFIG_INET_UDP_DIAG=y
156157
CONFIG_TCP_CONG_ADVANCED=y
157-
CONFIG_TCP_CONG_BBR=m
158+
CONFIG_TCP_CONG_BIC=y
159+
CONFIG_TCP_CONG_HSTCP=m
160+
CONFIG_TCP_CONG_HYBLA=m
161+
CONFIG_TCP_CONG_VEGAS=m
162+
CONFIG_TCP_CONG_NV=m
163+
CONFIG_TCP_CONG_SCALABLE=m
164+
CONFIG_TCP_CONG_VENO=m
165+
CONFIG_TCP_CONG_DCTCP=m
166+
CONFIG_TCP_CONG_CDG=m
167+
CONFIG_TCP_CONG_BBR=y
158168
CONFIG_IPV6_ROUTER_PREF=y
159169
CONFIG_IPV6_ROUTE_INFO=y
160170
CONFIG_INET6_AH=m
@@ -331,15 +341,33 @@ CONFIG_LLC2=m
331341
CONFIG_NET_SCHED=y
332342
CONFIG_NET_SCH_HTB=m
333343
CONFIG_NET_SCH_PRIO=m
344+
CONFIG_NET_SCH_MULTIQ=m
345+
CONFIG_NET_SCH_RED=m
346+
CONFIG_NET_SCH_SFB=m
334347
CONFIG_NET_SCH_SFQ=m
335348
CONFIG_NET_SCH_TBF=m
349+
CONFIG_NET_SCH_CBS=m
350+
CONFIG_NET_SCH_GRED=m
336351
CONFIG_NET_SCH_NETEM=m
352+
CONFIG_NET_SCH_MQPRIO=m
353+
CONFIG_NET_SCH_SKBPRIO=m
354+
CONFIG_NET_SCH_QFQ=m
355+
CONFIG_NET_SCH_CODEL=m
356+
CONFIG_NET_SCH_FQ_CODEL=m
357+
CONFIG_NET_SCH_CAKE=m
358+
CONFIG_NET_SCH_FQ=m
359+
CONFIG_NET_SCH_PIE=m
360+
CONFIG_NET_SCH_FQ_PIE=m
337361
CONFIG_NET_SCH_INGRESS=m
362+
CONFIG_NET_SCH_DEFAULT=y
338363
CONFIG_NET_CLS_BASIC=m
339364
CONFIG_NET_CLS_FW=m
340365
CONFIG_NET_CLS_U32=m
366+
CONFIG_NET_CLS_FLOW=m
341367
CONFIG_NET_CLS_CGROUP=m
342368
CONFIG_NET_CLS_BPF=m
369+
CONFIG_NET_CLS_FLOWER=m
370+
CONFIG_NET_CLS_MATCHALL=m
343371
CONFIG_NET_CLS_ACT=y
344372
CONFIG_NET_ACT_POLICE=m
345373
CONFIG_NET_ACT_GACT=m
@@ -407,6 +435,7 @@ CONFIG_DEVTMPFS=y
407435
CONFIG_DEVTMPFS_MOUNT=y
408436
CONFIG_FW_LOADER_COMPRESS=y
409437
CONFIG_FW_LOADER_COMPRESS_ZSTD=y
438+
CONFIG_SYSFB_SIMPLEFB=y
410439
CONFIG_EFI_ZBOOT=y
411440
CONFIG_EFI_BOOTLOADER_CONTROL=m
412441
CONFIG_EFI_CAPSULE_LOADER=m
@@ -420,6 +449,11 @@ CONFIG_MTD_CFI_AMDSTD=m
420449
CONFIG_MTD_CFI_STAA=m
421450
CONFIG_MTD_RAM=m
422451
CONFIG_MTD_ROM=m
452+
CONFIG_MTD_RAW_NAND=m
453+
CONFIG_MTD_NAND_PLATFORM=m
454+
CONFIG_MTD_NAND_LOONGSON=m
455+
CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC=y
456+
CONFIG_MTD_NAND_ECC_SW_BCH=y
423457
CONFIG_MTD_UBI=m
424458
CONFIG_MTD_UBI_BLOCK=y
425459
CONFIG_PARPORT=y
@@ -575,6 +609,11 @@ CONFIG_E1000=y
575609
CONFIG_E1000E=y
576610
CONFIG_IGB=y
577611
CONFIG_IXGBE=y
612+
CONFIG_I40E=y
613+
CONFIG_ICE=y
614+
CONFIG_FM10K=y
615+
CONFIG_IGC=y
616+
CONFIG_IDPF=y
578617
# CONFIG_NET_VENDOR_MARVELL is not set
579618
# CONFIG_NET_VENDOR_MELLANOX is not set
580619
# CONFIG_NET_VENDOR_MICREL is not set
@@ -679,6 +718,9 @@ CONFIG_USB4_NET=m
679718
CONFIG_INPUT_MOUSEDEV=y
680719
CONFIG_INPUT_MOUSEDEV_PSAUX=y
681720
CONFIG_INPUT_EVDEV=y
721+
CONFIG_KEYBOARD_GPIO=m
722+
CONFIG_KEYBOARD_GPIO_POLLED=m
723+
CONFIG_KEYBOARD_MATRIX=m
682724
CONFIG_KEYBOARD_XTKBD=m
683725
CONFIG_MOUSE_PS2_ELANTECH=y
684726
CONFIG_MOUSE_PS2_SENTELIC=y
@@ -703,8 +745,11 @@ CONFIG_VIRTIO_CONSOLE=y
703745
CONFIG_IPMI_HANDLER=m
704746
CONFIG_IPMI_DEVICE_INTERFACE=m
705747
CONFIG_IPMI_SI=m
748+
CONFIG_IPMI_LS2K=y
706749
CONFIG_HW_RANDOM=y
707750
CONFIG_HW_RANDOM_VIRTIO=m
751+
CONFIG_TCG_TPM=m
752+
CONFIG_TCG_LOONGSON=m
708753
CONFIG_I2C_CHARDEV=y
709754
CONFIG_I2C_PIIX4=y
710755
CONFIG_I2C_DESIGNWARE_CORE=y
@@ -720,6 +765,10 @@ CONFIG_PINCTRL_LOONGSON2=y
720765
CONFIG_GPIO_SYSFS=y
721766
CONFIG_GPIO_LOONGSON=y
722767
CONFIG_GPIO_LOONGSON_64BIT=y
768+
CONFIG_GPIO_PCA953X=m
769+
CONFIG_GPIO_PCA953X_IRQ=y
770+
CONFIG_GPIO_PCA9570=m
771+
CONFIG_GPIO_PCF857X=m
723772
CONFIG_POWER_RESET=y
724773
CONFIG_POWER_RESET_RESTART=y
725774
CONFIG_POWER_RESET_SYSCON=y
@@ -730,6 +779,7 @@ CONFIG_SENSORS_LM93=m
730779
CONFIG_SENSORS_W83795=m
731780
CONFIG_SENSORS_W83627HF=m
732781
CONFIG_LOONGSON2_THERMAL=m
782+
CONFIG_MFD_LOONGSON_SE=m
733783
CONFIG_RC_CORE=m
734784
CONFIG_LIRC=y
735785
CONFIG_RC_DECODERS=y
@@ -761,6 +811,7 @@ CONFIG_DRM_AST=y
761811
CONFIG_DRM_QXL=m
762812
CONFIG_DRM_VIRTIO_GPU=m
763813
CONFIG_DRM_LOONGSON=y
814+
CONFIG_DRM_SIMPLEDRM=y
764815
CONFIG_FB=y
765816
CONFIG_FB_EFI=y
766817
CONFIG_FB_RADEON=y
@@ -801,6 +852,7 @@ CONFIG_SND_HDA_CODEC_HDMI_ATI=y
801852
CONFIG_SND_HDA_CODEC_HDMI_NVIDIA=y
802853
CONFIG_SND_HDA_CODEC_CONEXANT=y
803854
CONFIG_SND_USB_AUDIO=m
855+
CONFIG_SND_USB_AUDIO_MIDI_V2=y
804856
CONFIG_SND_SOC=m
805857
CONFIG_SND_SOC_LOONGSON_CARD=m
806858
CONFIG_SND_SOC_ES7134=m
@@ -861,6 +913,8 @@ CONFIG_TYPEC_TCPM=m
861913
CONFIG_TYPEC_TCPCI=m
862914
CONFIG_TYPEC_UCSI=m
863915
CONFIG_UCSI_ACPI=m
916+
CONFIG_MMC=y
917+
CONFIG_MMC_LOONGSON2=m
864918
CONFIG_INFINIBAND=m
865919
CONFIG_EDAC=y
866920
# CONFIG_EDAC_LEGACY_SYSFS is not set
@@ -922,19 +976,22 @@ CONFIG_NTB_SWITCHTEC=m
922976
CONFIG_NTB_PERF=m
923977
CONFIG_NTB_TRANSPORT=m
924978
CONFIG_PWM=y
979+
CONFIG_PWM_LOONGSON=y
925980
CONFIG_GENERIC_PHY=y
926981
CONFIG_USB4=y
927982
CONFIG_EXT2_FS=y
928983
CONFIG_EXT2_FS_XATTR=y
929984
CONFIG_EXT2_FS_POSIX_ACL=y
930985
CONFIG_EXT2_FS_SECURITY=y
931-
CONFIG_EXT3_FS=y
932-
CONFIG_EXT3_FS_POSIX_ACL=y
933-
CONFIG_EXT3_FS_SECURITY=y
986+
CONFIG_EXT4_FS=y
987+
CONFIG_EXT4_FS_POSIX_ACL=y
988+
CONFIG_EXT4_FS_SECURITY=y
934989
CONFIG_JFS_FS=m
935990
CONFIG_JFS_POSIX_ACL=y
936991
CONFIG_JFS_SECURITY=y
937992
CONFIG_XFS_FS=y
993+
CONFIG_XFS_SUPPORT_V4=y
994+
CONFIG_XFS_SUPPORT_ASCII_CI=y
938995
CONFIG_XFS_QUOTA=y
939996
CONFIG_XFS_POSIX_ACL=y
940997
CONFIG_GFS2_FS=m
@@ -1026,9 +1083,12 @@ CONFIG_CEPH_FS_SECURITY_LABEL=y
10261083
CONFIG_CIFS=m
10271084
# CONFIG_CIFS_DEBUG is not set
10281085
CONFIG_9P_FS=y
1086+
CONFIG_NLS_DEFAULT="utf8"
10291087
CONFIG_NLS_CODEPAGE_437=y
10301088
CONFIG_NLS_CODEPAGE_936=y
1089+
CONFIG_NLS_CODEPAGE_950=y
10311090
CONFIG_NLS_ASCII=y
1091+
CONFIG_NLS_ISO8859_1=y
10321092
CONFIG_NLS_UTF8=y
10331093
CONFIG_DLM=m
10341094
CONFIG_KEY_DH_OPERATIONS=y
@@ -1049,9 +1109,11 @@ CONFIG_CRYPTO_CAST6=m
10491109
CONFIG_CRYPTO_KHAZAD=m
10501110
CONFIG_CRYPTO_SEED=m
10511111
CONFIG_CRYPTO_SERPENT=m
1112+
CONFIG_CRYPTO_SM4_GENERIC=m
10521113
CONFIG_CRYPTO_TEA=m
10531114
CONFIG_CRYPTO_TWOFISH=m
10541115
CONFIG_CRYPTO_CHACHA20POLY1305=m
1116+
CONFIG_CRYPTO_SM3_GENERIC=m
10551117
CONFIG_CRYPTO_WP512=m
10561118
CONFIG_CRYPTO_DEFLATE=m
10571119
CONFIG_CRYPTO_LZO=m
@@ -1063,6 +1125,7 @@ CONFIG_CRYPTO_USER_API_SKCIPHER=m
10631125
CONFIG_CRYPTO_USER_API_RNG=m
10641126
CONFIG_CRYPTO_USER_API_AEAD=m
10651127
CONFIG_CRYPTO_DEV_VIRTIO=m
1128+
CONFIG_CRYPTO_DEV_LOONGSON_RNG=m
10661129
CONFIG_DMA_CMA=y
10671130
CONFIG_DMA_NUMA_CMA=y
10681131
CONFIG_CMA_SIZE_MBYTES=0

arch/loongarch/include/asm/image.h

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
/*
3+
* LoongArch binary image header for EFI(PE/COFF) format.
4+
*
5+
* Author: Youling Tang <[email protected]>
6+
* Copyright (C) 2025 KylinSoft Corporation.
7+
*/
8+
9+
#ifndef __ASM_IMAGE_H
10+
#define __ASM_IMAGE_H
11+
12+
#ifndef __ASSEMBLER__
13+
14+
/**
15+
* struct loongarch_image_header
16+
*
17+
* @dos_sig: Optional PE format 'MZ' signature.
18+
* @padding_1: Reserved.
19+
* @kernel_entry: Kernel image entry pointer.
20+
* @kernel_asize: An estimated size of the memory image size in LSB byte order.
21+
* @text_offset: The image load offset in LSB byte order.
22+
* @padding_2: Reserved.
23+
* @pe_header: Optional offset to a PE format header.
24+
**/
25+
26+
struct loongarch_image_header {
27+
uint8_t dos_sig[2];
28+
uint16_t padding_1[3];
29+
uint64_t kernel_entry;
30+
uint64_t kernel_asize;
31+
uint64_t text_offset;
32+
uint32_t padding_2[7];
33+
uint32_t pe_header;
34+
};
35+
36+
/*
37+
* loongarch_header_check_dos_sig - Helper to check the header
38+
*
39+
* Returns true (non-zero) if 'MZ' signature is found.
40+
*/
41+
42+
static inline int loongarch_header_check_dos_sig(const struct loongarch_image_header *h)
43+
{
44+
if (!h)
45+
return 0;
46+
47+
return (h->dos_sig[0] == 'M' && h->dos_sig[1] == 'Z');
48+
}
49+
50+
#endif /* __ASSEMBLER__ */
51+
52+
#endif /* __ASM_IMAGE_H */

arch/loongarch/include/asm/inst.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ enum reg2_op {
7777
iocsrwrh_op = 0x19205,
7878
iocsrwrw_op = 0x19206,
7979
iocsrwrd_op = 0x19207,
80+
llacqw_op = 0xe15e0,
81+
screlw_op = 0xe15e1,
82+
llacqd_op = 0xe15e2,
83+
screld_op = 0xe15e3,
8084
};
8185

8286
enum reg2i5_op {
@@ -189,6 +193,7 @@ enum reg3_op {
189193
fldxd_op = 0x7068,
190194
fstxs_op = 0x7070,
191195
fstxd_op = 0x7078,
196+
scq_op = 0x70ae,
192197
amswapw_op = 0x70c0,
193198
amswapd_op = 0x70c1,
194199
amaddw_op = 0x70c2,

arch/loongarch/include/asm/kexec.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,18 @@ struct kimage_arch {
4141
unsigned long systable_ptr;
4242
};
4343

44+
#ifdef CONFIG_KEXEC_FILE
45+
extern const struct kexec_file_ops kexec_efi_ops;
46+
extern const struct kexec_file_ops kexec_elf_ops;
47+
48+
int arch_kimage_file_post_load_cleanup(struct kimage *image);
49+
#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
50+
51+
extern int load_other_segments(struct kimage *image,
52+
unsigned long kernel_load_addr, unsigned long kernel_size,
53+
char *initrd, unsigned long initrd_len, char *cmdline, unsigned long cmdline_len);
54+
#endif
55+
4456
typedef void (*do_kexec_t)(unsigned long efi_boot,
4557
unsigned long cmdline_ptr,
4658
unsigned long systable_ptr,

arch/loongarch/kernel/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o
6262
obj-$(CONFIG_RELOCATABLE) += relocate.o
6363

6464
obj-$(CONFIG_KEXEC_CORE) += machine_kexec.o relocate_kernel.o
65+
obj-$(CONFIG_KEXEC_FILE) += machine_kexec_file.o kexec_efi.o kexec_elf.o
6566
obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
6667

6768
obj-$(CONFIG_UNWINDER_GUESS) += unwind_guess.o

0 commit comments

Comments
 (0)