diff --git a/modules/nixos/boot/default.nix b/modules/nixos/boot/default.nix index 45ccd15..60640ad 100755 --- a/modules/nixos/boot/default.nix +++ b/modules/nixos/boot/default.nix @@ -1,13 +1,11 @@ -{ pkgs, inputs, ... }: +{ pkgs, ... }: -let - lfbmqKernel = import ./kernel.nix { inherit pkgs; }; -in { - imports = [ ]; - environment.systemPackages = [ pkgs.efibootmgr ]; + imports = [ + ]; - boot.kernelPackages = pkgs.linuxKernel.packagesFor lfbmqKernel; + environment.systemPackages = [ pkgs.efibootmgr ]; + boot.kernelPackages = pkgs.linuxPackages_cachyos-lto; boot.kernelParams = [ "preempt=full" @@ -22,6 +20,7 @@ in canTouchEfiVariables = false; efiSysMountPoint = "/boot"; }; + systemd-boot = { enable = true; configurationLimit = 5; diff --git a/modules/nixos/boot/kernel.nix b/modules/nixos/boot/kernel.nix deleted file mode 100644 index b9eb3fe..0000000 --- a/modules/nixos/boot/kernel.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ pkgs, ... }: - -pkgs.linuxManualConfig { - stdenv = pkgs.llvmPackages.stdenv; - - src = pkgs.fetchurl { - url = "https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.1.3.tar.xz"; - sha256 = pkgs.lib.fakeSha256; - }; - - version = "7.1.3-lfbmq"; - modDirVersion = "7.1.3-lfbmq"; - pname = "linux-lfbmq"; - configfile = ./lfbmq.config; - allowImportFromDerivation = true; - extraMakeFlags = [ "LLVM=1" ]; - - kernelPatches = [ - { - name = "prjc-cachy-lfbmq"; - patch = ./patches/0001-prjc-cachy-lfbmq.patch; - } - { - name = "clang-polly"; - patch = ./patches/0001-clang-polly.patch; - } - { - name = "acpi-call"; - patch = ./patches/0001-acpi-call.patch; - } - { - name = "more-uarches"; - patch = ./patches/more-ISA-levels-and-uarches-for-kernel-6.16+.patch; - } - ]; -} diff --git a/modules/nixos/boot/lfbmq.config b/modules/nixos/boot/lfbmq.config deleted file mode 100644 index a252e20..0000000 --- a/modules/nixos/boot/lfbmq.config +++ /dev/null @@ -1,12620 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# Linux/x86 7.1.3 Kernel Configuration -# -CONFIG_CC_VERSION_TEXT="clang version 21.1.8" -CONFIG_GCC_VERSION=0 -CONFIG_CC_IS_CLANG=y -CONFIG_CLANG_VERSION=210108 -CONFIG_AS_IS_LLVM=y -CONFIG_AS_VERSION=210108 -CONFIG_LD_VERSION=0 -CONFIG_LD_IS_LLD=y -CONFIG_LLD_VERSION=210108 -CONFIG_RUSTC_VERSION=0 -CONFIG_RUSTC_LLVM_VERSION=0 -CONFIG_RUSTC_LLVM_MAJOR_VERSION=0 -CONFIG_CC_CAN_LINK=y -CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y -CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y -CONFIG_TOOLS_SUPPORT_RELR=y -CONFIG_CC_HAS_ASM_INLINE=y -CONFIG_CC_HAS_ASSUME=y -CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y -CONFIG_CC_HAS_COUNTED_BY=y -CONFIG_CC_HAS_BROKEN_COUNTED_BY_REF=y -CONFIG_CC_HAS_MULTIDIMENSIONAL_NONSTRING=y -CONFIG_LD_CAN_USE_KEEP_IN_OVERLAY=y -CONFIG_PAHOLE_VERSION=0 -CONFIG_IRQ_WORK=y -CONFIG_BUILDTIME_TABLE_SORT=y -CONFIG_THREAD_INFO_IN_TASK=y - -# -# General setup -# -CONFIG_INIT_ENV_ARG_LIMIT=32 -# CONFIG_COMPILE_TEST is not set -# CONFIG_WERROR is not set -CONFIG_LOCALVERSION="" -CONFIG_LOCALVERSION_AUTO=y -CONFIG_BUILD_SALT="" -CONFIG_HAVE_KERNEL_GZIP=y -CONFIG_HAVE_KERNEL_BZIP2=y -CONFIG_HAVE_KERNEL_LZMA=y -CONFIG_HAVE_KERNEL_XZ=y -CONFIG_HAVE_KERNEL_LZO=y -CONFIG_HAVE_KERNEL_LZ4=y -CONFIG_HAVE_KERNEL_ZSTD=y -# CONFIG_KERNEL_GZIP is not set -# CONFIG_KERNEL_BZIP2 is not set -# CONFIG_KERNEL_LZMA is not set -# CONFIG_KERNEL_XZ is not set -# CONFIG_KERNEL_LZO is not set -# CONFIG_KERNEL_LZ4 is not set -CONFIG_KERNEL_ZSTD=y -CONFIG_DEFAULT_INIT="" -CONFIG_DEFAULT_HOSTNAME="cachyos" -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -CONFIG_SYSVIPC_COMPAT=y -CONFIG_POSIX_MQUEUE=y -CONFIG_POSIX_MQUEUE_SYSCTL=y -CONFIG_WATCH_QUEUE=y -CONFIG_CROSS_MEMORY_ATTACH=y -CONFIG_AUDIT=y -CONFIG_HAVE_ARCH_AUDITSYSCALL=y -CONFIG_AUDITSYSCALL=y - -# -# IRQ subsystem -# -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_GENERIC_IRQ_SHOW=y -CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y -CONFIG_GENERIC_PENDING_IRQ=y -CONFIG_GENERIC_IRQ_MIGRATION=y -CONFIG_GENERIC_IRQ_INJECTION=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_CHIP=y -CONFIG_IRQ_DOMAIN=y -CONFIG_IRQ_SIM=y -CONFIG_IRQ_DOMAIN_HIERARCHY=y -CONFIG_GENERIC_MSI_IRQ=y -CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y -CONFIG_GENERIC_IRQ_RESERVATION_MODE=y -CONFIG_GENERIC_IRQ_STAT_SNAPSHOT=y -CONFIG_IRQ_FORCED_THREADING=y -CONFIG_SPARSE_IRQ=y -# CONFIG_GENERIC_IRQ_DEBUGFS is not set -# end of IRQ subsystem - -CONFIG_CLOCKSOURCE_WATCHDOG=y -CONFIG_ARCH_CLOCKSOURCE_INIT=y -CONFIG_ARCH_WANTS_CLOCKSOURCE_READ_INLINE=y -CONFIG_GENERIC_TIME_VSYSCALL=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y -CONFIG_GENERIC_CLOCKEVENTS_BROADCAST_IDLE=y -CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y -CONFIG_GENERIC_CLOCKEVENTS_COUPLED=y -CONFIG_GENERIC_CLOCKEVENTS_COUPLED_INLINE=y -CONFIG_GENERIC_CMOS_UPDATE=y -CONFIG_HRTIMER_REARM_DEFERRED=y -CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y -CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y -CONFIG_CONTEXT_TRACKING=y -CONFIG_CONTEXT_TRACKING_IDLE=y - -# -# Timers subsystem -# -CONFIG_TICK_ONESHOT=y -CONFIG_NO_HZ_COMMON=y -# CONFIG_HZ_PERIODIC is not set -# CONFIG_NO_HZ_IDLE is not set -CONFIG_NO_HZ_FULL=y -CONFIG_CONTEXT_TRACKING_USER=y -# CONFIG_CONTEXT_TRACKING_USER_FORCE is not set -CONFIG_NO_HZ=y -CONFIG_HIGH_RES_TIMERS=y -CONFIG_POSIX_AUX_CLOCKS=y -# end of Timers subsystem - -CONFIG_BPF=y -CONFIG_HAVE_EBPF_JIT=y -CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y - -# -# BPF subsystem -# -CONFIG_BPF_SYSCALL=y -CONFIG_BPF_JIT=y -CONFIG_BPF_JIT_ALWAYS_ON=y -CONFIG_BPF_JIT_DEFAULT_ON=y -CONFIG_BPF_UNPRIV_DEFAULT_OFF=y -# CONFIG_BPF_PRELOAD is not set -CONFIG_BPF_LSM=y -# end of BPF subsystem - -CONFIG_PREEMPT_BUILD=y -CONFIG_ARCH_HAS_PREEMPT_LAZY=y -CONFIG_PREEMPT=y -# CONFIG_PREEMPT_LAZY is not set -CONFIG_PREEMPT_COUNT=y -CONFIG_PREEMPTION=y -CONFIG_PREEMPT_DYNAMIC=y - -# -# CPU/Task time and stats accounting -# -CONFIG_VIRT_CPU_ACCOUNTING=y -CONFIG_VIRT_CPU_ACCOUNTING_GEN=y -CONFIG_IRQ_TIME_ACCOUNTING=y -CONFIG_HAVE_SCHED_AVG_IRQ=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=y -CONFIG_TASKSTATS=y -CONFIG_TASK_DELAY_ACCT=y -CONFIG_TASK_XACCT=y -CONFIG_TASK_IO_ACCOUNTING=y -# end of CPU/Task time and stats accounting - -CONFIG_CPU_ISOLATION=y - -# -# RCU Subsystem -# -CONFIG_TREE_RCU=y -CONFIG_PREEMPT_RCU=y -CONFIG_RCU_EXPERT=y -CONFIG_TREE_SRCU=y -# CONFIG_FORCE_NEED_SRCU_NMI_SAFE is not set -CONFIG_TASKS_RCU_GENERIC=y -# CONFIG_FORCE_TASKS_RCU is not set -CONFIG_NEED_TASKS_RCU=y -CONFIG_TASKS_RCU=y -# CONFIG_FORCE_TASKS_RUDE_RCU is not set -CONFIG_TASKS_RUDE_RCU=y -# CONFIG_FORCE_TASKS_TRACE_RCU is not set -CONFIG_TASKS_TRACE_RCU=y -CONFIG_TASKS_TRACE_RCU_NO_MB=y -CONFIG_RCU_STALL_COMMON=y -CONFIG_RCU_NEED_SEGCBLIST=y -CONFIG_RCU_FANOUT=64 -CONFIG_RCU_FANOUT_LEAF=16 -CONFIG_RCU_BOOST=y -CONFIG_RCU_BOOST_DELAY=500 -# CONFIG_RCU_EXP_KTHREAD is not set -CONFIG_RCU_NOCB_CPU=y -# CONFIG_RCU_NOCB_CPU_DEFAULT_ALL is not set -# CONFIG_RCU_NOCB_CPU_CB_BOOST is not set -CONFIG_RCU_LAZY=y -CONFIG_RCU_LAZY_DEFAULT_OFF=y -CONFIG_RCU_DOUBLE_CHECK_CB_TIME=y -# end of RCU Subsystem - -CONFIG_IKCONFIG=y -CONFIG_IKCONFIG_PROC=y -CONFIG_IKHEADERS=m -CONFIG_LOG_BUF_SHIFT=17 -CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 -CONFIG_PRINTK_INDEX=y -CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y - -# -# Scheduler features -# -CONFIG_UCLAMP_TASK=y -CONFIG_UCLAMP_BUCKETS_COUNT=5 -CONFIG_SCHED_ALT=y -CONFIG_SCHED_BMQ=y -# end of Scheduler features - -CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y -CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y -CONFIG_CC_HAS_INT128=y -CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough" -CONFIG_CC_MS_EXTENSIONS="-fms-extensions" -CONFIG_GCC10_NO_ARRAY_BOUNDS=y -CONFIG_GCC_NO_STRINGOP_OVERFLOW=y -CONFIG_ARCH_SUPPORTS_INT128=y -CONFIG_SLAB_OBJ_EXT=y -CONFIG_CGROUPS=y -CONFIG_PAGE_COUNTER=y -# CONFIG_CGROUP_FAVOR_DYNMODS is not set -CONFIG_MEMCG=y -# CONFIG_MEMCG_V1 is not set -CONFIG_BLK_CGROUP=y -CONFIG_CGROUP_WRITEBACK=y -CONFIG_CGROUP_SCHED=y -CONFIG_GROUP_SCHED_WEIGHT=y -CONFIG_GROUP_SCHED_BANDWIDTH=y -CONFIG_FAIR_GROUP_SCHED=y -CONFIG_CFS_BANDWIDTH=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_SCHED_MM_CID=y -CONFIG_UCLAMP_TASK_GROUP=y -CONFIG_CGROUP_PIDS=y -CONFIG_CGROUP_RDMA=y -CONFIG_CGROUP_DMEM=y -CONFIG_CGROUP_FREEZER=y -CONFIG_CGROUP_HUGETLB=y -CONFIG_CPUSETS=y -CONFIG_CGROUP_DEVICE=y -CONFIG_CGROUP_CPUACCT=y -CONFIG_CGROUP_PERF=y -CONFIG_CGROUP_BPF=y -CONFIG_CGROUP_MISC=y -# CONFIG_CGROUP_DEBUG is not set -CONFIG_SOCK_CGROUP_DATA=y -CONFIG_NAMESPACES=y -CONFIG_UTS_NS=y -CONFIG_TIME_NS=y -CONFIG_TIME_NS_VDSO=y -CONFIG_IPC_NS=y -CONFIG_USER_NS=y -CONFIG_PID_NS=y -CONFIG_NET_NS=y -CONFIG_CHECKPOINT_RESTORE=y -CONFIG_RELAY=y -CONFIG_BLK_DEV_INITRD=y -CONFIG_INITRAMFS_SOURCE="" -CONFIG_RD_GZIP=y -CONFIG_RD_BZIP2=y -CONFIG_RD_LZMA=y -CONFIG_RD_XZ=y -CONFIG_RD_LZO=y -CONFIG_RD_LZ4=y -CONFIG_RD_ZSTD=y -CONFIG_BOOT_CONFIG=y -# CONFIG_BOOT_CONFIG_FORCE is not set -# CONFIG_BOOT_CONFIG_EMBED is not set -CONFIG_CMDLINE_LOG_WRAP_IDEAL_LEN=1021 -CONFIG_INITRAMFS_PRESERVE_MTIME=y -CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -CONFIG_LD_ORPHAN_WARN=y -CONFIG_LD_ORPHAN_WARN_LEVEL="warn" -CONFIG_SYSCTL=y -CONFIG_HAVE_UID16=y -CONFIG_SYSCTL_EXCEPTION_TRACE=y -# CONFIG_SYSFS_SYSCALL is not set -CONFIG_HAVE_PCSPKR_PLATFORM=y -# CONFIG_EXPERT is not set -CONFIG_UID16=y -CONFIG_MULTIUSER=y -CONFIG_SGETMASK_SYSCALL=y -CONFIG_FHANDLE=y -CONFIG_POSIX_TIMERS=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_PCSPKR_PLATFORM=y -CONFIG_FUTEX=y -CONFIG_FUTEX_PI=y -CONFIG_FUTEX_PRIVATE_HASH=y -CONFIG_FUTEX_MPOL=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_TIMERFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_AIO=y -CONFIG_IO_URING=y -CONFIG_ADVISE_SYSCALLS=y -CONFIG_MEMBARRIER=y -CONFIG_KCMP=y -CONFIG_RSEQ=y -CONFIG_RSEQ_SLICE_EXTENSION=y -CONFIG_CACHESTAT_SYSCALL=y -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_SELFTEST is not set -CONFIG_KALLSYMS_ALL=y -CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y -CONFIG_ARCH_SUPPORTS_MSEAL_SYSTEM_MAPPINGS=y -CONFIG_HAVE_PERF_EVENTS=y -CONFIG_GUEST_PERF_EVENTS=y -CONFIG_PERF_GUEST_MEDIATED_PMU=y - -# -# Kernel Performance Events And Counters -# -CONFIG_PERF_EVENTS=y -# CONFIG_DEBUG_PERF_USE_VMALLOC is not set -# end of Kernel Performance Events And Counters - -CONFIG_SYSTEM_DATA_VERIFICATION=y -CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y - -# -# Kexec and crash features -# -CONFIG_CRASH_RESERVE=y -CONFIG_VMCORE_INFO=y -CONFIG_KEXEC_CORE=y -CONFIG_KEXEC=y -CONFIG_KEXEC_FILE=y -CONFIG_KEXEC_SIG=y -# CONFIG_KEXEC_SIG_FORCE is not set -CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y -CONFIG_KEXEC_JUMP=y -CONFIG_CRASH_DUMP=y -CONFIG_CRASH_DM_CRYPT=y -CONFIG_CRASH_DM_CRYPT_CONFIGS=y -CONFIG_CRASH_HOTPLUG=y -CONFIG_CRASH_MAX_MEMORY_RANGES=8192 -# end of Kexec and crash features - -# -# Live Update and Kexec HandOver -# -CONFIG_KEXEC_HANDOVER=y -# CONFIG_KEXEC_HANDOVER_DEBUG is not set -CONFIG_KEXEC_HANDOVER_DEBUGFS=y -# CONFIG_KEXEC_HANDOVER_ENABLE_DEFAULT is not set -CONFIG_LIVEUPDATE=y -CONFIG_LIVEUPDATE_MEMFD=y -# end of Live Update and Kexec HandOver -# end of General setup - -CONFIG_64BIT=y -CONFIG_X86_64=y -CONFIG_X86=y -CONFIG_INSTRUCTION_DECODER=y -CONFIG_OUTPUT_FORMAT="elf64-x86-64" -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_MMU=y -CONFIG_ARCH_MMAP_RND_BITS_MIN=28 -CONFIG_ARCH_MMAP_RND_BITS_MAX=32 -CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 -CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 -CONFIG_GENERIC_ISA_DMA=y -CONFIG_GENERIC_BUG=y -CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y -CONFIG_ARCH_MAY_HAVE_PC_FDC=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_ARCH_HAS_CPU_RELAX=y -CONFIG_ARCH_HIBERNATION_POSSIBLE=y -CONFIG_ARCH_SUSPEND_POSSIBLE=y -CONFIG_AUDIT_ARCH=y -CONFIG_HAVE_INTEL_TXT=y -CONFIG_ARCH_SUPPORTS_UPROBES=y -CONFIG_FIX_EARLYCON_MEM=y -CONFIG_DYNAMIC_PHYSICAL_MASK=y -CONFIG_PGTABLE_LEVELS=5 - -# -# Processor type and features -# -CONFIG_SMP=y -CONFIG_X86_X2APIC=y -CONFIG_AMD_SECURE_AVIC=y -CONFIG_X86_POSTED_MSI=y -CONFIG_X86_MPPARSE=y -CONFIG_X86_CPU_RESCTRL=y -CONFIG_X86_FRED=y -# CONFIG_X86_EXTENDED_PLATFORM is not set -CONFIG_X86_INTEL_LPSS=y -CONFIG_X86_AMD_PLATFORM_DEVICE=y -CONFIG_IOSF_MBI=y -# CONFIG_IOSF_MBI_DEBUG is not set -CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y -CONFIG_SCHED_OMIT_FRAME_POINTER=y -CONFIG_HYPERVISOR_GUEST=y -CONFIG_PARAVIRT=y -CONFIG_PARAVIRT_XXL=y -CONFIG_PARAVIRT_SPINLOCKS=y -CONFIG_X86_HV_CALLBACK_VECTOR=y -CONFIG_XEN=y -CONFIG_XEN_PV=y -CONFIG_XEN_512GB=y -CONFIG_XEN_PV_SMP=y -CONFIG_XEN_PV_DOM0=y -CONFIG_XEN_PVHVM=y -CONFIG_XEN_PVHVM_SMP=y -CONFIG_XEN_PVHVM_GUEST=y -# CONFIG_XEN_DEBUG_FS is not set -CONFIG_XEN_PVH=y -CONFIG_XEN_DOM0=y -CONFIG_XEN_PV_MSR_SAFE=y -CONFIG_KVM_GUEST=y -CONFIG_ARCH_CPUIDLE_HALTPOLL=y -CONFIG_PVH=y -CONFIG_PARAVIRT_TIME_ACCOUNTING=y -CONFIG_PARAVIRT_CLOCK=y -CONFIG_JAILHOUSE_GUEST=y -CONFIG_ACRN_GUEST=y -CONFIG_BHYVE_GUEST=y -CONFIG_INTEL_TDX_GUEST=y -CONFIG_CC_HAS_MARCH_NATIVE=y -# CONFIG_X86_NATIVE_CPU is not set -# CONFIG_GENERIC_CPU is not set -# CONFIG_MK8 is not set -# CONFIG_MK8SSE3 is not set -# CONFIG_MK10 is not set -# CONFIG_MBARCELONA is not set -# CONFIG_MBOBCAT is not set -# CONFIG_MJAGUAR is not set -# CONFIG_MBULLDOZER is not set -# CONFIG_MPILEDRIVER is not set -# CONFIG_MSTEAMROLLER is not set -# CONFIG_MEXCAVATOR is not set -# CONFIG_MZEN is not set -# CONFIG_MZEN2 is not set -# CONFIG_MZEN3 is not set -# CONFIG_MZEN4 is not set -# CONFIG_MZEN5 is not set -# CONFIG_MPSC is not set -# CONFIG_MCORE2 is not set -# CONFIG_MNEHALEM is not set -# CONFIG_MWESTMERE is not set -# CONFIG_MSILVERMONT is not set -# CONFIG_MGOLDMONT is not set -# CONFIG_MGOLDMONTPLUS is not set -# CONFIG_MSANDYBRIDGE is not set -CONFIG_MIVYBRIDGE=y -# CONFIG_MHASWELL is not set -# CONFIG_MBROADWELL is not set -# CONFIG_MSKYLAKE is not set -# CONFIG_MSKYLAKEX is not set -# CONFIG_MCANNONLAKE is not set -# CONFIG_MICELAKE_CLIENT is not set -# CONFIG_MICELAKE_SERVER is not set -# CONFIG_MCOOPERLAKE is not set -# CONFIG_MCASCADELAKE is not set -# CONFIG_MTIGERLAKE is not set -# CONFIG_MSAPPHIRERAPIDS is not set -# CONFIG_MROCKETLAKE is not set -# CONFIG_MALDERLAKE is not set -# CONFIG_MRAPTORLAKE is not set -# CONFIG_MMETEORLAKE is not set -# CONFIG_MEMERALDRAPIDS is not set -# CONFIG_MDIAMONDRAPIDS is not set -CONFIG_X86_INTERNODE_CACHE_SHIFT=6 -CONFIG_X86_L1_CACHE_SHIFT=6 -CONFIG_X86_INTEL_USERCOPY=y -CONFIG_X86_USE_PPRO_CHECKSUM=y -CONFIG_X86_TSC=y -CONFIG_X86_HAVE_PAE=y -CONFIG_X86_CX8=y -CONFIG_X86_CMOV=y -CONFIG_X86_MINIMUM_CPU_FAMILY=64 -CONFIG_X86_DEBUGCTLMSR=y -CONFIG_IA32_FEAT_CTL=y -CONFIG_X86_VMX_FEATURE_NAMES=y -CONFIG_BROADCAST_TLB_FLUSH=y -CONFIG_CPU_SUP_INTEL=y -CONFIG_CPU_SUP_AMD=y -CONFIG_CPU_SUP_HYGON=y -CONFIG_CPU_SUP_CENTAUR=y -CONFIG_CPU_SUP_ZHAOXIN=y -CONFIG_HPET_TIMER=y -CONFIG_HPET_EMULATE_RTC=y -CONFIG_DMI=y -# CONFIG_GART_IOMMU is not set -CONFIG_BOOT_VESA_SUPPORT=y -CONFIG_MAXSMP=y -CONFIG_NR_CPUS_RANGE_BEGIN=8192 -CONFIG_NR_CPUS_RANGE_END=8192 -CONFIG_NR_CPUS_DEFAULT=8192 -CONFIG_NR_CPUS=8192 -CONFIG_SCHED_MC_PRIO=y -CONFIG_X86_LOCAL_APIC=y -CONFIG_ACPI_MADT_WAKEUP=y -CONFIG_X86_IO_APIC=y -CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y -CONFIG_X86_MCE=y -# CONFIG_X86_MCELOG_LEGACY is not set -CONFIG_X86_MCE_INTEL=y -CONFIG_X86_MCE_AMD=y -CONFIG_X86_MCE_THRESHOLD=y -CONFIG_X86_MCE_INJECT=m - -# -# Performance monitoring -# -CONFIG_PERF_EVENTS_INTEL_UNCORE=m -CONFIG_PERF_EVENTS_INTEL_RAPL=m -CONFIG_PERF_EVENTS_INTEL_CSTATE=m -CONFIG_PERF_EVENTS_AMD_POWER=m -CONFIG_PERF_EVENTS_AMD_UNCORE=m -CONFIG_PERF_EVENTS_AMD_BRS=y -# end of Performance monitoring - -CONFIG_X86_16BIT=y -CONFIG_X86_ESPFIX64=y -CONFIG_X86_VSYSCALL_EMULATION=y -CONFIG_X86_IOPL_IOPERM=y -CONFIG_MICROCODE=y -# CONFIG_MICROCODE_LATE_LOADING is not set -# CONFIG_MICROCODE_DBG is not set -CONFIG_X86_MSR=y -CONFIG_X86_CPUID=y -CONFIG_X86_DIRECT_GBPAGES=y -CONFIG_X86_CPA_STATISTICS=y -CONFIG_X86_MEM_ENCRYPT=y -CONFIG_AMD_MEM_ENCRYPT=y -CONFIG_NUMA=y -CONFIG_AMD_NUMA=y -CONFIG_X86_64_ACPI_NUMA=y -CONFIG_NODES_SHIFT=10 -CONFIG_ARCH_SPARSEMEM_ENABLE=y -CONFIG_ARCH_SPARSEMEM_DEFAULT=y -# CONFIG_ARCH_MEMORY_PROBE is not set -CONFIG_ARCH_PROC_KCORE_TEXT=y -CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 -CONFIG_X86_PMEM_LEGACY_DEVICE=y -CONFIG_X86_PMEM_LEGACY=m -CONFIG_X86_CHECK_BIOS_CORRUPTION=y -CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y -CONFIG_MTRR=y -CONFIG_MTRR_SANITIZER=y -CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 -CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=0 -CONFIG_X86_PAT=y -CONFIG_X86_UMIP=y -CONFIG_CC_HAS_IBT=y -CONFIG_X86_CET=y -CONFIG_X86_KERNEL_IBT=y -CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y -CONFIG_ARCH_PKEY_BITS=4 -# CONFIG_X86_INTEL_TSX_MODE_OFF is not set -# CONFIG_X86_INTEL_TSX_MODE_ON is not set -CONFIG_X86_INTEL_TSX_MODE_AUTO=y -CONFIG_X86_SGX=y -CONFIG_X86_USER_SHADOW_STACK=y -CONFIG_INTEL_TDX_HOST=y -CONFIG_EFI=y -CONFIG_EFI_STUB=y -CONFIG_EFI_HANDOVER_PROTOCOL=y -CONFIG_EFI_MIXED=y -CONFIG_EFI_RUNTIME_MAP=y -# CONFIG_HZ_100 is not set -# CONFIG_HZ_250 is not set -# CONFIG_HZ_300 is not set -CONFIG_HZ_1000=y -CONFIG_HZ=1000 -CONFIG_SCHED_HRTICK=y -CONFIG_ARCH_SUPPORTS_KEXEC=y -CONFIG_ARCH_SUPPORTS_KEXEC_FILE=y -CONFIG_ARCH_SELECTS_KEXEC_FILE=y -CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY=y -CONFIG_ARCH_SUPPORTS_KEXEC_SIG=y -CONFIG_ARCH_SUPPORTS_KEXEC_SIG_FORCE=y -CONFIG_ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG=y -CONFIG_ARCH_SUPPORTS_KEXEC_JUMP=y -CONFIG_ARCH_SUPPORTS_KEXEC_HANDOVER=y -CONFIG_ARCH_SUPPORTS_CRASH_DUMP=y -CONFIG_ARCH_DEFAULT_CRASH_DUMP=y -CONFIG_ARCH_SUPPORTS_CRASH_HOTPLUG=y -CONFIG_ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION=y -CONFIG_PHYSICAL_START=0x1000000 -CONFIG_RELOCATABLE=y -CONFIG_RANDOMIZE_BASE=y -CONFIG_X86_NEED_RELOCS=y -CONFIG_PHYSICAL_ALIGN=0x200000 -CONFIG_RANDOMIZE_MEMORY=y -CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa -CONFIG_HOTPLUG_CPU=y -# CONFIG_COMPAT_VDSO is not set -CONFIG_LEGACY_VSYSCALL_XONLY=y -# CONFIG_LEGACY_VSYSCALL_NONE is not set -# CONFIG_CMDLINE_BOOL is not set -CONFIG_MODIFY_LDT_SYSCALL=y -# CONFIG_STRICT_SIGALTSTACK_SIZE is not set -CONFIG_HAVE_LIVEPATCH=y -# CONFIG_LIVEPATCH is not set -CONFIG_HAVE_KLP_BUILD=y -CONFIG_X86_BUS_LOCK_DETECT=y -# end of Processor type and features - -CONFIG_CC_HAS_NAMED_AS_FIXED_SANITIZERS=y -CONFIG_CC_HAS_SLS=y -CONFIG_CC_HAS_RETURN_THUNK=y -CONFIG_CC_HAS_ENTRY_PADDING=y -CONFIG_CC_HAS_KCFI_ARITY=y -CONFIG_FUNCTION_PADDING_CFI=11 -CONFIG_FUNCTION_PADDING_BYTES=16 -CONFIG_CALL_PADDING=y -CONFIG_HAVE_CALL_THUNKS=y -CONFIG_CALL_THUNKS=y -CONFIG_PREFIX_SYMBOLS=y -CONFIG_CPU_MITIGATIONS=y -CONFIG_MITIGATION_PAGE_TABLE_ISOLATION=y -CONFIG_MITIGATION_RETPOLINE=y -CONFIG_MITIGATION_RETHUNK=y -CONFIG_MITIGATION_UNRET_ENTRY=y -CONFIG_MITIGATION_CALL_DEPTH_TRACKING=y -# CONFIG_CALL_THUNKS_DEBUG is not set -CONFIG_MITIGATION_IBPB_ENTRY=y -CONFIG_MITIGATION_IBRS_ENTRY=y -CONFIG_MITIGATION_SRSO=y -CONFIG_MITIGATION_SLS=y -CONFIG_MITIGATION_GDS=y -CONFIG_MITIGATION_RFDS=y -CONFIG_MITIGATION_SPECTRE_BHI=y -CONFIG_MITIGATION_MDS=y -CONFIG_MITIGATION_TAA=y -CONFIG_MITIGATION_MMIO_STALE_DATA=y -CONFIG_MITIGATION_L1TF=y -CONFIG_MITIGATION_RETBLEED=y -CONFIG_MITIGATION_SPECTRE_V1=y -CONFIG_MITIGATION_SPECTRE_V2=y -CONFIG_MITIGATION_SRBDS=y -CONFIG_MITIGATION_SSB=y -CONFIG_MITIGATION_ITS=y -CONFIG_MITIGATION_TSA=y -CONFIG_MITIGATION_VMSCAPE=y -CONFIG_ARCH_HAS_ADD_PAGES=y - -# -# Power management and ACPI options -# -CONFIG_ARCH_HIBERNATION_HEADER=y -CONFIG_SUSPEND=y -CONFIG_SUSPEND_FREEZER=y -CONFIG_HIBERNATE_CALLBACKS=y -CONFIG_HIBERNATION=y -CONFIG_HIBERNATION_SNAPSHOT_DEV=y -CONFIG_HIBERNATION_COMP_LZO=y -# CONFIG_HIBERNATION_COMP_LZ4 is not set -CONFIG_HIBERNATION_DEF_COMP="lzo" -CONFIG_PM_STD_PARTITION="" -CONFIG_PM_SLEEP=y -CONFIG_PM_SLEEP_SMP=y -# CONFIG_PM_AUTOSLEEP is not set -# CONFIG_PM_USERSPACE_AUTOSLEEP is not set -# CONFIG_PM_WAKELOCKS is not set -CONFIG_PM_QOS_CPU_SYSTEM_WAKEUP=y -CONFIG_PM=y -CONFIG_PM_DEBUG=y -# CONFIG_PM_ADVANCED_DEBUG is not set -# CONFIG_PM_TEST_SUSPEND is not set -CONFIG_PM_SLEEP_DEBUG=y -CONFIG_PM_TRACE=y -CONFIG_PM_TRACE_RTC=y -CONFIG_PM_CLK=y -CONFIG_PM_GENERIC_DOMAINS=y -CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y -CONFIG_PM_GENERIC_DOMAINS_SLEEP=y -CONFIG_ENERGY_MODEL=y -CONFIG_ARCH_SUPPORTS_ACPI=y -CONFIG_ACPI=y -CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y -CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y -CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y -CONFIG_ACPI_TABLE_LIB=y -CONFIG_ACPI_THERMAL_LIB=y -# CONFIG_ACPI_DEBUGGER is not set -CONFIG_ACPI_SPCR_TABLE=y -CONFIG_ACPI_FPDT=y -CONFIG_ACPI_LPIT=y -CONFIG_ACPI_SLEEP=y -CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y -CONFIG_ACPI_EC=y -CONFIG_ACPI_EC_DEBUGFS=m -CONFIG_ACPI_AC=y -CONFIG_ACPI_BATTERY=y -CONFIG_ACPI_BUTTON=y -CONFIG_ACPI_VIDEO=m -CONFIG_ACPI_FAN=y -CONFIG_ACPI_TAD=m -CONFIG_ACPI_DOCK=y -CONFIG_ACPI_CPU_FREQ_PSS=y -CONFIG_ACPI_PROCESSOR_CSTATE=y -CONFIG_ACPI_PROCESSOR_IDLE=y -CONFIG_ACPI_CPPC_LIB=y -CONFIG_ACPI_PROCESSOR=y -CONFIG_ACPI_IPMI=m -CONFIG_ACPI_HOTPLUG_CPU=y -CONFIG_ACPI_PROCESSOR_AGGREGATOR=m -CONFIG_ACPI_THERMAL=y -CONFIG_ACPI_PLATFORM_PROFILE=y -CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y -CONFIG_ACPI_TABLE_UPGRADE=y -CONFIG_ACPI_DEBUG=y -CONFIG_ACPI_PCI_SLOT=y -CONFIG_ACPI_CONTAINER=y -CONFIG_ACPI_HOTPLUG_MEMORY=y -CONFIG_ACPI_HOTPLUG_IOAPIC=y -CONFIG_ACPI_SBS=m -CONFIG_ACPI_HED=y -CONFIG_ACPI_BGRT=y -CONFIG_ACPI_NHLT=y -CONFIG_ACPI_NFIT=m -# CONFIG_NFIT_SECURITY_DEBUG is not set -CONFIG_ACPI_NUMA=y -CONFIG_ACPI_HMAT=y -CONFIG_HAVE_ACPI_APEI=y -CONFIG_HAVE_ACPI_APEI_NMI=y -CONFIG_ACPI_APEI=y -CONFIG_ACPI_APEI_GHES=y -CONFIG_ACPI_APEI_PCIEAER=y -CONFIG_ACPI_APEI_MEMORY_FAILURE=y -CONFIG_ACPI_APEI_EINJ=m -CONFIG_ACPI_APEI_EINJ_CXL=y -CONFIG_ACPI_APEI_GHES_NVIDIA=m -CONFIG_ACPI_APEI_ERST_DEBUG=m -CONFIG_ACPI_DPTF=y -CONFIG_DPTF_POWER=m -CONFIG_DPTF_PCH_FIVR=m -CONFIG_ACPI_WATCHDOG=y -CONFIG_ACPI_EXTLOG=m -CONFIG_ACPI_ADXL=y -CONFIG_ACPI_CONFIGFS=m -CONFIG_ACPI_PFRUT=m -CONFIG_ACPI_PCC=y -CONFIG_ACPI_FFH=y -CONFIG_ACPI_MRRM=y -CONFIG_PMIC_OPREGION=y -CONFIG_BYTCRC_PMIC_OPREGION=y -CONFIG_CHTCRC_PMIC_OPREGION=y -CONFIG_XPOWER_PMIC_OPREGION=y -CONFIG_BXT_WC_PMIC_OPREGION=y -CONFIG_CHT_WC_PMIC_OPREGION=y -CONFIG_CHT_DC_TI_PMIC_OPREGION=y -CONFIG_TPS68470_PMIC_OPREGION=y -CONFIG_ACPI_VIOT=y -CONFIG_ACPI_PRMT=y -CONFIG_X86_PM_TIMER=y - -# -# CPU Frequency scaling -# -CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_GOV_ATTR_SET=y -CONFIG_CPU_FREQ_GOV_COMMON=y -CONFIG_CPU_FREQ_STAT=y -# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set -CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y -CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y -CONFIG_CPU_FREQ_GOV_USERSPACE=y -CONFIG_CPU_FREQ_GOV_ONDEMAND=y -CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y -CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y - -# -# CPU frequency scaling drivers -# -CONFIG_X86_INTEL_PSTATE=y -CONFIG_X86_PCC_CPUFREQ=m -CONFIG_X86_AMD_PSTATE=y -CONFIG_X86_AMD_PSTATE_DEFAULT_MODE=3 -# CONFIG_X86_AMD_PSTATE_UT is not set -CONFIG_X86_ACPI_CPUFREQ=m -CONFIG_X86_ACPI_CPUFREQ_CPB=y -CONFIG_X86_POWERNOW_K8=m -CONFIG_X86_AMD_FREQ_SENSITIVITY=m -# CONFIG_X86_SPEEDSTEP_CENTRINO is not set -CONFIG_X86_P4_CLOCKMOD=m - -# -# shared options -# -CONFIG_X86_SPEEDSTEP_LIB=m -CONFIG_CPUFREQ_ARCH_CUR_FREQ=y -# end of CPU Frequency scaling - -# -# CPU Idle -# -CONFIG_CPU_IDLE=y -CONFIG_CPU_IDLE_GOV_LADDER=y -CONFIG_CPU_IDLE_GOV_MENU=y -CONFIG_CPU_IDLE_GOV_TEO=y -CONFIG_CPU_IDLE_GOV_HALTPOLL=y -CONFIG_HALTPOLL_CPUIDLE=m -# end of CPU Idle - -CONFIG_INTEL_IDLE=y -# end of Power management and ACPI options - -# -# Bus options (PCI etc.) -# -CONFIG_PCI_DIRECT=y -CONFIG_PCI_MMCONFIG=y -CONFIG_PCI_XEN=y -CONFIG_MMCONF_FAM10H=y -CONFIG_ISA_DMA_API=y -CONFIG_AMD_NB=y -CONFIG_AMD_NODE=y -# end of Bus options (PCI etc.) - -# -# Binary Emulations -# -CONFIG_IA32_EMULATION=y -# CONFIG_IA32_EMULATION_DEFAULT_DISABLED is not set -CONFIG_COMPAT_32=y -CONFIG_COMPAT=y -CONFIG_COMPAT_FOR_U64_ALIGNMENT=y -# end of Binary Emulations - -CONFIG_KVM_COMMON=y -CONFIG_HAVE_KVM_PFNCACHE=y -CONFIG_HAVE_KVM_IRQCHIP=y -CONFIG_HAVE_KVM_IRQ_ROUTING=y -CONFIG_HAVE_KVM_DIRTY_RING=y -CONFIG_HAVE_KVM_DIRTY_RING_TSO=y -CONFIG_HAVE_KVM_DIRTY_RING_ACQ_REL=y -CONFIG_KVM_MMIO=y -CONFIG_KVM_ASYNC_PF=y -CONFIG_HAVE_KVM_MSI=y -CONFIG_HAVE_KVM_READONLY_MEM=y -CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y -CONFIG_KVM_VFIO=y -CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y -CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY=y -CONFIG_KVM_COMPAT=y -CONFIG_HAVE_KVM_IRQ_BYPASS=m -CONFIG_HAVE_KVM_NO_POLL=y -CONFIG_VIRT_XFER_TO_GUEST_WORK=y -CONFIG_HAVE_KVM_PM_NOTIFIER=y -CONFIG_KVM_GENERIC_HARDWARE_ENABLING=y -CONFIG_KVM_ELIDE_TLB_FLUSH_IF_YOUNG=y -CONFIG_KVM_MMU_LOCKLESS_AGING=y -CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES=y -CONFIG_KVM_GUEST_MEMFD=y -CONFIG_HAVE_KVM_ARCH_GMEM_PREPARE=y -CONFIG_HAVE_KVM_ARCH_GMEM_INVALIDATE=y -CONFIG_HAVE_KVM_ARCH_GMEM_POPULATE=y -CONFIG_VIRTUALIZATION=y -CONFIG_KVM_X86=m -CONFIG_KVM=m -CONFIG_KVM_INTEL=m -CONFIG_X86_SGX_KVM=y -CONFIG_KVM_INTEL_TDX=y -CONFIG_KVM_AMD=m -CONFIG_KVM_AMD_SEV=y -CONFIG_KVM_IOAPIC=y -CONFIG_KVM_SMM=y -CONFIG_KVM_HYPERV=y -CONFIG_KVM_XEN=y -CONFIG_KVM_EXTERNAL_WRITE_TRACKING=y -CONFIG_KVM_MAX_NR_VCPUS=1024 -CONFIG_X86_REQUIRED_FEATURE_ALWAYS=y -CONFIG_X86_REQUIRED_FEATURE_NOPL=y -CONFIG_X86_REQUIRED_FEATURE_CX8=y -CONFIG_X86_REQUIRED_FEATURE_CMOV=y -CONFIG_X86_REQUIRED_FEATURE_CPUID=y -CONFIG_X86_REQUIRED_FEATURE_FPU=y -CONFIG_X86_REQUIRED_FEATURE_PAE=y -CONFIG_X86_REQUIRED_FEATURE_MSR=y -CONFIG_X86_REQUIRED_FEATURE_FXSR=y -CONFIG_X86_REQUIRED_FEATURE_XMM=y -CONFIG_X86_REQUIRED_FEATURE_XMM2=y -CONFIG_X86_REQUIRED_FEATURE_LM=y -CONFIG_X86_DISABLED_FEATURE_VME=y -CONFIG_X86_DISABLED_FEATURE_K6_MTRR=y -CONFIG_X86_DISABLED_FEATURE_CYRIX_ARR=y -CONFIG_X86_DISABLED_FEATURE_CENTAUR_MCR=y -CONFIG_X86_DISABLED_FEATURE_LAM=y -CONFIG_AS_WRUSS=y -CONFIG_ARCH_CONFIGURES_CPU_MITIGATIONS=y -CONFIG_ARCH_HAS_DMA_OPS=y - -# -# General architecture-dependent options -# -CONFIG_HOTPLUG_SMT=y -CONFIG_ARCH_SUPPORTS_SCHED_SMT=y -CONFIG_ARCH_SUPPORTS_SCHED_CLUSTER=y -CONFIG_ARCH_SUPPORTS_SCHED_MC=y -CONFIG_SCHED_SMT=y -CONFIG_SCHED_CLUSTER=y -CONFIG_SCHED_MC=y -CONFIG_HOTPLUG_CORE_SYNC=y -CONFIG_HOTPLUG_CORE_SYNC_DEAD=y -CONFIG_HOTPLUG_CORE_SYNC_FULL=y -CONFIG_HOTPLUG_SPLIT_STARTUP=y -CONFIG_HOTPLUG_PARALLEL=y -CONFIG_GENERIC_IRQ_ENTRY=y -CONFIG_GENERIC_SYSCALL=y -CONFIG_GENERIC_ENTRY=y -CONFIG_KPROBES=y -CONFIG_JUMP_LABEL=y -# CONFIG_STATIC_KEYS_SELFTEST is not set -# CONFIG_STATIC_CALL_SELFTEST is not set -CONFIG_OPTPROBES=y -CONFIG_KPROBES_ON_FTRACE=y -CONFIG_UPROBES=y -CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y -CONFIG_ARCH_USE_BUILTIN_BSWAP=y -CONFIG_KRETPROBES=y -CONFIG_KRETPROBE_ON_RETHOOK=y -CONFIG_USER_RETURN_NOTIFIER=y -CONFIG_HAVE_IOREMAP_PROT=y -CONFIG_HAVE_KPROBES=y -CONFIG_HAVE_KRETPROBES=y -CONFIG_HAVE_OPTPROBES=y -CONFIG_HAVE_KPROBES_ON_FTRACE=y -CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y -CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y -CONFIG_HAVE_NMI=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y -CONFIG_HAVE_ARCH_TRACEHOOK=y -CONFIG_HAVE_DMA_CONTIGUOUS=y -CONFIG_GENERIC_SMP_IDLE_THREAD=y -CONFIG_ARCH_HAS_FORTIFY_SOURCE=y -CONFIG_ARCH_HAS_SET_MEMORY=y -CONFIG_ARCH_HAS_SET_DIRECT_MAP=y -CONFIG_ARCH_HAS_CPU_FINALIZE_INIT=y -CONFIG_ARCH_HAS_CPU_PASID=y -CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y -CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y -CONFIG_ARCH_WANTS_NO_INSTR=y -CONFIG_HAVE_ASM_MODVERSIONS=y -CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y -CONFIG_HAVE_RSEQ=y -CONFIG_HAVE_RUST=y -CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y -CONFIG_HAVE_HW_BREAKPOINT=y -CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y -CONFIG_HAVE_USER_RETURN_NOTIFIER=y -CONFIG_HAVE_PERF_EVENTS_NMI=y -CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y -CONFIG_UNWIND_USER=y -CONFIG_HAVE_UNWIND_USER_FP=y -CONFIG_HAVE_PERF_REGS=y -CONFIG_HAVE_PERF_USER_STACK_DUMP=y -CONFIG_HAVE_ARCH_JUMP_LABEL=y -CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y -CONFIG_MMU_GATHER_TABLE_FREE=y -CONFIG_MMU_GATHER_RCU_TABLE_FREE=y -CONFIG_MMU_GATHER_MERGE_VMAS=y -CONFIG_ARCH_WANT_IRQS_OFF_ACTIVATE_MM=y -CONFIG_MMU_LAZY_TLB_REFCOUNT=y -CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y -CONFIG_ARCH_HAVE_EXTRA_ELF_NOTES=y -CONFIG_ARCH_HAS_NMI_SAFE_THIS_CPU_OPS=y -CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y -CONFIG_HAVE_CMPXCHG_LOCAL=y -CONFIG_HAVE_CMPXCHG_DOUBLE=y -CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y -CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y -CONFIG_HAVE_ARCH_SECCOMP=y -CONFIG_HAVE_ARCH_SECCOMP_FILTER=y -CONFIG_SECCOMP=y -CONFIG_SECCOMP_FILTER=y -# CONFIG_SECCOMP_CACHE_DEBUG is not set -CONFIG_HAVE_ARCH_KSTACK_ERASE=y -CONFIG_HAVE_STACKPROTECTOR=y -CONFIG_STACKPROTECTOR=y -CONFIG_STACKPROTECTOR_STRONG=y -CONFIG_LTO=y -CONFIG_LTO_CLANG=y -CONFIG_ARCH_SUPPORTS_LTO_CLANG=y -CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y -CONFIG_HAS_LTO_CLANG=y -# CONFIG_LTO_NONE is not set -# CONFIG_LTO_CLANG_FULL is not set -CONFIG_LTO_CLANG_THIN=y -CONFIG_ARCH_SUPPORTS_AUTOFDO_CLANG=y -# CONFIG_AUTOFDO_CLANG is not set -CONFIG_ARCH_SUPPORTS_PROPELLER_CLANG=y -# CONFIG_PROPELLER_CLANG is not set -CONFIG_ARCH_SUPPORTS_CFI=y -# CONFIG_CFI is not set -CONFIG_HAVE_CFI_ICALL_NORMALIZE_INTEGERS=y -CONFIG_HAVE_CFI_ICALL_NORMALIZE_INTEGERS_RUSTC=y -CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y -CONFIG_HAVE_CONTEXT_TRACKING_USER=y -CONFIG_HAVE_CONTEXT_TRACKING_USER_OFFSTACK=y -CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y -CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y -CONFIG_HAVE_PV_STEAL_CLOCK_GEN=y -CONFIG_HAVE_MOVE_PUD=y -CONFIG_HAVE_MOVE_PMD=y -CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y -CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y -CONFIG_HAVE_ARCH_HUGE_VMAP=y -CONFIG_HAVE_ARCH_HUGE_VMALLOC=y -CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y -CONFIG_ARCH_WANT_PMD_MKWRITE=y -CONFIG_HAVE_ARCH_SOFT_DIRTY=y -CONFIG_HAVE_MOD_ARCH_SPECIFIC=y -CONFIG_MODULES_USE_ELF_RELA=y -CONFIG_ARCH_HAS_EXECMEM_ROX=y -CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y -CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y -CONFIG_SOFTIRQ_ON_OWN_STACK=y -CONFIG_ARCH_HAS_ELF_RANDOMIZE=y -CONFIG_HAVE_ARCH_MMAP_RND_BITS=y -CONFIG_HAVE_EXIT_THREAD=y -CONFIG_ARCH_MMAP_RND_BITS=28 -CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y -CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8 -CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y -CONFIG_HAVE_PAGE_SIZE_4KB=y -CONFIG_PAGE_SIZE_4KB=y -CONFIG_PAGE_SIZE_LESS_THAN_64KB=y -CONFIG_PAGE_SIZE_LESS_THAN_256KB=y -CONFIG_PAGE_SHIFT=12 -CONFIG_HAVE_OBJTOOL=y -CONFIG_HAVE_JUMP_LABEL_HACK=y -CONFIG_HAVE_NOINSTR_HACK=y -CONFIG_HAVE_NOINSTR_VALIDATION=y -CONFIG_HAVE_UACCESS_VALIDATION=y -CONFIG_HAVE_STACK_VALIDATION=y -CONFIG_HAVE_RELIABLE_STACKTRACE=y -CONFIG_ISA_BUS_API=y -CONFIG_OLD_SIGSUSPEND3=y -CONFIG_COMPAT_OLD_SIGACTION=y -CONFIG_COMPAT_32BIT_TIME=y -CONFIG_ARCH_SUPPORTS_RT=y -CONFIG_HAVE_ARCH_VMAP_STACK=y -CONFIG_VMAP_STACK=y -CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y -CONFIG_RANDOMIZE_KSTACK_OFFSET=y -CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y -CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y -CONFIG_STRICT_KERNEL_RWX=y -CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y -CONFIG_STRICT_MODULE_RWX=y -CONFIG_ARCH_HAS_CPU_RESCTRL=y -CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y -CONFIG_ARCH_USE_MEMREMAP_PROT=y -CONFIG_LOCK_EVENT_COUNTS=y -CONFIG_ARCH_HAS_MEM_ENCRYPT=y -CONFIG_ARCH_HAS_CC_PLATFORM=y -CONFIG_HAVE_STATIC_CALL=y -CONFIG_HAVE_STATIC_CALL_INLINE=y -CONFIG_HAVE_PREEMPT_DYNAMIC=y -CONFIG_HAVE_PREEMPT_DYNAMIC_CALL=y -CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y -CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y -CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y -CONFIG_ARCH_HAS_ELFCORE_COMPAT=y -CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y -CONFIG_DYNAMIC_SIGFRAME=y -CONFIG_HAVE_ARCH_NODE_DEV_GROUP=y -CONFIG_ARCH_HAS_HW_PTE_YOUNG=y -CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG=y -CONFIG_ARCH_HAS_KERNEL_FPU_SUPPORT=y -CONFIG_ARCH_VMLINUX_NEEDS_RELOCS=y -CONFIG_HAVE_GENERIC_TIF_BITS=y - -# -# GCOV-based kernel profiling -# -# CONFIG_GCOV_KERNEL is not set -CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y -# end of GCOV-based kernel profiling - -CONFIG_HAVE_GCC_PLUGINS=y -CONFIG_FUNCTION_ALIGNMENT_4B=y -CONFIG_FUNCTION_ALIGNMENT_16B=y -CONFIG_FUNCTION_ALIGNMENT=16 -CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT=y -CONFIG_ARCH_HAS_CPU_ATTACK_VECTORS=y -CONFIG_HAVE_ARCH_GET_SECUREBOOT=y -# end of General architecture-dependent options - -CONFIG_RT_MUTEXES=y -CONFIG_MODULE_SIG_FORMAT=y -CONFIG_MODULES=y -CONFIG_MODULE_DEBUGFS=y -# CONFIG_MODULE_DEBUG is not set -CONFIG_MODULE_FORCE_LOAD=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -CONFIG_MODULE_UNLOAD_TAINT_TRACKING=y -# CONFIG_MODVERSIONS is not set -CONFIG_MODULE_SRCVERSION_ALL=y -CONFIG_MODULE_SIG=y -# CONFIG_MODULE_SIG_FORCE is not set -CONFIG_MODULE_SIG_ALL=y -# CONFIG_MODULE_SIG_SHA256 is not set -# CONFIG_MODULE_SIG_SHA384 is not set -CONFIG_MODULE_SIG_SHA512=y -# CONFIG_MODULE_SIG_SHA3_256 is not set -# CONFIG_MODULE_SIG_SHA3_384 is not set -# CONFIG_MODULE_SIG_SHA3_512 is not set -CONFIG_MODULE_SIG_HASH="sha512" -CONFIG_MODULE_COMPRESS=y -# CONFIG_MODULE_COMPRESS_GZIP is not set -# CONFIG_MODULE_COMPRESS_XZ is not set -CONFIG_MODULE_COMPRESS_ZSTD=y -CONFIG_MODULE_COMPRESS_ALL=y -CONFIG_MODULE_DECOMPRESS=y -CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=y -CONFIG_MODPROBE_PATH="/sbin/modprobe" -# CONFIG_TRIM_UNUSED_KSYMS is not set -CONFIG_MODULES_TREE_LOOKUP=y -CONFIG_BLOCK=y -CONFIG_BLOCK_LEGACY_AUTOLOAD=y -CONFIG_BLK_RQ_ALLOC_TIME=y -CONFIG_BLK_CGROUP_RWSTAT=y -CONFIG_BLK_CGROUP_PUNT_BIO=y -CONFIG_BLK_DEV_BSG_COMMON=y -CONFIG_BLK_ICQ=y -CONFIG_BLK_DEV_BSGLIB=y -CONFIG_BLK_DEV_INTEGRITY=y -CONFIG_BLK_DEV_WRITE_MOUNTED=y -CONFIG_BLK_DEV_ZONED=y -CONFIG_BLK_DEV_THROTTLING=y -CONFIG_BLK_WBT=y -CONFIG_BLK_WBT_MQ=y -CONFIG_BLK_CGROUP_IOLATENCY=y -CONFIG_BLK_CGROUP_FC_APPID=y -CONFIG_BLK_CGROUP_IOCOST=y -CONFIG_BLK_CGROUP_IOPRIO=y -CONFIG_BLK_DEBUG_FS=y -CONFIG_BLK_SED_OPAL=y -CONFIG_BLK_INLINE_ENCRYPTION=y -CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -CONFIG_AIX_PARTITION=y -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -CONFIG_MAC_PARTITION=y -CONFIG_MSDOS_PARTITION=y -CONFIG_BSD_DISKLABEL=y -CONFIG_MINIX_SUBPARTITION=y -CONFIG_SOLARIS_X86_PARTITION=y -# CONFIG_UNIXWARE_DISKLABEL is not set -CONFIG_LDM_PARTITION=y -# CONFIG_LDM_DEBUG is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -CONFIG_KARMA_PARTITION=y -CONFIG_EFI_PARTITION=y -# CONFIG_SYSV68_PARTITION is not set -# CONFIG_CMDLINE_PARTITION is not set -# end of Partition Types - -CONFIG_BLK_PM=y -CONFIG_BLOCK_HOLDER_DEPRECATED=y -CONFIG_BLK_MQ_STACKING=y - -# -# IO Schedulers -# -CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=y -CONFIG_IOSCHED_BFQ=y -CONFIG_BFQ_GROUP_IOSCHED=y -# CONFIG_BFQ_CGROUP_DEBUG is not set -# end of IO Schedulers - -CONFIG_PREEMPT_NOTIFIERS=y -CONFIG_PADATA=y -CONFIG_ASN1=y -CONFIG_UNINLINE_SPIN_UNLOCK=y -CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y -CONFIG_MUTEX_SPIN_ON_OWNER=y -CONFIG_RWSEM_SPIN_ON_OWNER=y -CONFIG_LOCK_SPIN_ON_OWNER=y -CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y -CONFIG_QUEUED_SPINLOCKS=y -CONFIG_ARCH_USE_QUEUED_RWLOCKS=y -CONFIG_QUEUED_RWLOCKS=y -CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y -CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y -CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y -CONFIG_FREEZER=y - -# -# Executable file formats -# -CONFIG_BINFMT_ELF=y -CONFIG_COMPAT_BINFMT_ELF=y -CONFIG_ELFCORE=y -CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y -CONFIG_BINFMT_SCRIPT=y -CONFIG_BINFMT_MISC=y -CONFIG_COREDUMP=y -# end of Executable file formats - -# -# Memory Management options -# -CONFIG_SWAP=y -CONFIG_ZSWAP=y -CONFIG_ZSWAP_DEFAULT_ON=y -CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y -# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set -# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO is not set -# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set -# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set -# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set -CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD=y -CONFIG_ZSWAP_COMPRESSOR_DEFAULT="zstd" -CONFIG_ZSMALLOC=y - -# -# Zsmalloc allocator options -# - -# -# Zsmalloc is a common backend allocator for zswap & zram -# -CONFIG_ZSMALLOC_STAT=y -CONFIG_ZSMALLOC_CHAIN_SIZE=8 -# end of Zsmalloc allocator options - -# -# Slab allocator options -# -CONFIG_SLUB=y -CONFIG_KVFREE_RCU_BATCHED=y -CONFIG_SLAB_MERGE_DEFAULT=y -CONFIG_SLAB_FREELIST_RANDOM=y -CONFIG_SLAB_FREELIST_HARDENED=y -CONFIG_SLAB_BUCKETS=y -# CONFIG_SLUB_STATS is not set -# CONFIG_RANDOM_KMALLOC_CACHES is not set -# end of Slab allocator options - -CONFIG_SHUFFLE_PAGE_ALLOCATOR=y -# CONFIG_COMPAT_BRK is not set -CONFIG_SPARSEMEM=y -CONFIG_SPARSEMEM_EXTREME=y -CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y -CONFIG_SPARSEMEM_VMEMMAP=y -CONFIG_SPARSEMEM_VMEMMAP_PREINIT=y -CONFIG_ARCH_WANT_OPTIMIZE_DAX_VMEMMAP=y -CONFIG_ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP=y -CONFIG_ARCH_WANT_HUGETLB_VMEMMAP_PREINIT=y -CONFIG_HAVE_GUP_FAST=y -CONFIG_MEMBLOCK_KHO_SCRATCH=y -CONFIG_ARCH_KEEP_MEMBLOCK=y -CONFIG_NUMA_KEEP_MEMINFO=y -CONFIG_MEMORY_ISOLATION=y -CONFIG_EXCLUSIVE_SYSTEM_RAM=y -CONFIG_HAVE_BOOTMEM_INFO_NODE=y -CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y -CONFIG_MEMORY_HOTPLUG=y -# CONFIG_MHP_DEFAULT_ONLINE_TYPE_OFFLINE is not set -CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_AUTO=y -# CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_KERNEL is not set -# CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_MOVABLE is not set -CONFIG_MEMORY_HOTREMOVE=y -CONFIG_MHP_MEMMAP_ON_MEMORY=y -CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y -CONFIG_SPLIT_PTE_PTLOCKS=y -CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y -CONFIG_SPLIT_PMD_PTLOCKS=y -CONFIG_BALLOON=y -CONFIG_BALLOON_MIGRATION=y -CONFIG_COMPACTION=y -CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 -CONFIG_PAGE_REPORTING=y -CONFIG_NUMA_MIGRATION=y -CONFIG_MIGRATION=y -CONFIG_DEVICE_MIGRATION=y -CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y -CONFIG_ARCH_ENABLE_THP_MIGRATION=y -CONFIG_CONTIG_ALLOC=y -CONFIG_PCP_BATCH_SCALE_MAX=5 -CONFIG_PHYS_ADDR_T_64BIT=y -CONFIG_MMU_NOTIFIER=y -CONFIG_KSM=y -CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 -CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y -CONFIG_MEMORY_FAILURE=y -CONFIG_HWPOISON_INJECT=m -CONFIG_ARCH_WANT_GENERAL_HUGETLB=y -CONFIG_ARCH_WANTS_THP_SWAP=y -CONFIG_PERSISTENT_HUGE_ZERO_FOLIO=y -CONFIG_MM_ID=y -CONFIG_TRANSPARENT_HUGEPAGE=y -CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y -# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set -# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set -# CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_NEVER is not set -# CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_ALWAYS is not set -# CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_WITHIN_SIZE is not set -CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_ADVISE=y -# CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_NEVER is not set -# CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_ALWAYS is not set -# CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_WITHIN_SIZE is not set -CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_ADVISE=y -CONFIG_THP_SWAP=y -CONFIG_READ_ONLY_THP_FOR_FS=y -# CONFIG_NO_PAGE_MAPCOUNT is not set -CONFIG_PAGE_MAPCOUNT=y -CONFIG_PGTABLE_HAS_HUGE_LEAVES=y -CONFIG_HAVE_GIGANTIC_FOLIOS=y -CONFIG_ASYNC_KERNEL_PGTABLE_FREE=y -CONFIG_ARCH_SUPPORTS_HUGE_PFNMAP=y -CONFIG_ARCH_SUPPORTS_PMD_PFNMAP=y -CONFIG_ARCH_SUPPORTS_PUD_PFNMAP=y -CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y -CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y -CONFIG_USE_PERCPU_NUMA_NODE_ID=y -CONFIG_HAVE_SETUP_PER_CPU_AREA=y -CONFIG_CMA=y -CONFIG_CMA_DEBUGFS=y -CONFIG_CMA_SYSFS=y -CONFIG_CMA_AREAS=7 -CONFIG_PAGE_BLOCK_MAX_ORDER=10 -CONFIG_MEM_SOFT_DIRTY=y -CONFIG_GENERIC_EARLY_IOREMAP=y -# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set -CONFIG_PAGE_IDLE_FLAG=y -CONFIG_IDLE_PAGE_TRACKING=y -CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y -CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y -CONFIG_ZONE_DMA=y -CONFIG_ZONE_DMA32=y -CONFIG_ZONE_DEVICE=y -CONFIG_HMM_MIRROR=y -CONFIG_GET_FREE_REGION=y -CONFIG_DEVICE_PRIVATE=y -CONFIG_VMAP_PFN=y -CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y -CONFIG_ARCH_HAS_PKEYS=y -CONFIG_ARCH_USES_PG_ARCH_2=y -CONFIG_VM_EVENT_COUNTERS=y -# CONFIG_PERCPU_STATS is not set -# CONFIG_GUP_TEST is not set -# CONFIG_DMAPOOL_TEST is not set -CONFIG_ARCH_HAS_PTE_SPECIAL=y -CONFIG_MAPPING_DIRTY_HELPERS=y -CONFIG_MEMFD_CREATE=y -CONFIG_SECRETMEM=y -CONFIG_ANON_VMA_NAME=y -CONFIG_HAVE_ARCH_USERFAULTFD_WP=y -CONFIG_HAVE_ARCH_USERFAULTFD_MINOR=y -CONFIG_USERFAULTFD=y -CONFIG_PTE_MARKER_UFFD_WP=y -CONFIG_LRU_GEN=y -CONFIG_LRU_GEN_ENABLED=y -# CONFIG_LRU_GEN_STATS is not set -CONFIG_LRU_GEN_WALKS_MMU=y -CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y -CONFIG_PER_VMA_LOCK=y -CONFIG_LOCK_MM_AND_FIND_VMA=y -CONFIG_IOMMU_MM_DATA=y -CONFIG_EXECMEM=y -CONFIG_NUMA_MEMBLKS=y -# CONFIG_NUMA_EMU is not set -CONFIG_ARCH_HAS_USER_SHADOW_STACK=y -CONFIG_PT_RECLAIM=y -CONFIG_FIND_NORMAL_PAGE=y -CONFIG_ARCH_HAS_LAZY_MMU_MODE=y - -# -# Data Access Monitoring -# -CONFIG_DAMON=y -# CONFIG_DAMON_DEBUG_SANITY is not set -CONFIG_DAMON_VADDR=y -CONFIG_DAMON_PADDR=y -CONFIG_DAMON_SYSFS=y -CONFIG_DAMON_RECLAIM=y -CONFIG_DAMON_LRU_SORT=y -CONFIG_DAMON_STAT=y -# CONFIG_DAMON_STAT_ENABLED_DEFAULT is not set -# end of Data Access Monitoring -# end of Memory Management options - -CONFIG_NET=y -CONFIG_COMPAT_NETLINK_MESSAGES=y -CONFIG_NET_INGRESS=y -CONFIG_NET_EGRESS=y -CONFIG_NET_XGRESS=y -CONFIG_NET_REDIRECT=y -CONFIG_SKB_DECRYPTED=y -CONFIG_SKB_EXTENSIONS=y -CONFIG_NET_DEVMEM=y -CONFIG_NET_SHAPER=y -CONFIG_NET_CRC32C=y - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_DIAG=m -CONFIG_INET_PSP=y -CONFIG_UNIX=y -CONFIG_AF_UNIX_OOB=y -CONFIG_UNIX_DIAG=m -CONFIG_TLS=m -CONFIG_TLS_DEVICE=y -# CONFIG_TLS_TOE is not set -CONFIG_XFRM=y -CONFIG_XFRM_OFFLOAD=y -CONFIG_XFRM_ALGO=m -CONFIG_XFRM_USER=m -# CONFIG_XFRM_USER_COMPAT is not set -CONFIG_XFRM_INTERFACE=m -CONFIG_XFRM_SUB_POLICY=y -CONFIG_XFRM_MIGRATE=y -CONFIG_XFRM_STATISTICS=y -CONFIG_XFRM_AH=m -CONFIG_XFRM_ESP=m -CONFIG_XFRM_IPCOMP=m -CONFIG_NET_KEY=m -CONFIG_NET_KEY_MIGRATE=y -CONFIG_XFRM_IPTFS=m -CONFIG_XFRM_ESPINTCP=y -CONFIG_SMC=m -CONFIG_SMC_DIAG=m -CONFIG_SMC_HS_CTRL_BPF=y -CONFIG_DIBS=m -CONFIG_DIBS_LO=y -CONFIG_XDP_SOCKETS=y -CONFIG_XDP_SOCKETS_DIAG=m -CONFIG_NET_HANDSHAKE=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -CONFIG_IP_FIB_TRIE_STATS=y -CONFIG_IP_MULTIPLE_TABLES=y -CONFIG_IP_ROUTE_MULTIPATH=y -CONFIG_IP_ROUTE_VERBOSE=y -CONFIG_IP_ROUTE_CLASSID=y -# CONFIG_IP_PNP is not set -CONFIG_NET_IPIP=m -CONFIG_NET_IPGRE_DEMUX=m -CONFIG_NET_IP_TUNNEL=m -CONFIG_NET_IPGRE=m -CONFIG_NET_IPGRE_BROADCAST=y -CONFIG_IP_MROUTE_COMMON=y -CONFIG_IP_MROUTE=y -CONFIG_IP_MROUTE_MULTIPLE_TABLES=y -CONFIG_IP_PIMSM_V1=y -CONFIG_IP_PIMSM_V2=y -CONFIG_SYN_COOKIES=y -CONFIG_NET_IPVTI=m -CONFIG_NET_UDP_TUNNEL=m -CONFIG_NET_FOU=m -CONFIG_NET_FOU_IP_TUNNELS=y -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_ESP_OFFLOAD=m -CONFIG_INET_ESPINTCP=y -CONFIG_INET_IPCOMP=m -CONFIG_INET_TABLE_PERTURB_ORDER=16 -CONFIG_INET_XFRM_TUNNEL=m -CONFIG_INET_TUNNEL=m -CONFIG_INET_DIAG=m -CONFIG_INET_TCP_DIAG=m -CONFIG_INET_UDP_DIAG=m -CONFIG_INET_RAW_DIAG=m -CONFIG_INET_DIAG_DESTROY=y -CONFIG_TCP_CONG_ADVANCED=y -CONFIG_TCP_CONG_BIC=m -CONFIG_TCP_CONG_CUBIC=y -CONFIG_TCP_CONG_WESTWOOD=m -CONFIG_TCP_CONG_HTCP=m -CONFIG_TCP_CONG_HSTCP=m -CONFIG_TCP_CONG_HYBLA=m -CONFIG_TCP_CONG_VEGAS=m -CONFIG_TCP_CONG_NV=m -CONFIG_TCP_CONG_SCALABLE=m -CONFIG_TCP_CONG_LP=m -CONFIG_TCP_CONG_VENO=m -CONFIG_TCP_CONG_YEAH=m -CONFIG_TCP_CONG_ILLINOIS=m -CONFIG_TCP_CONG_DCTCP=m -CONFIG_TCP_CONG_CDG=m -CONFIG_TCP_CONG_BBR=m -CONFIG_DEFAULT_CUBIC=y -# CONFIG_DEFAULT_RENO is not set -CONFIG_DEFAULT_TCP_CONG="cubic" -CONFIG_TCP_SIGPOOL=y -CONFIG_TCP_AO=y -CONFIG_TCP_MD5SIG=y -CONFIG_IPV6=y -CONFIG_IPV6_ROUTER_PREF=y -CONFIG_IPV6_ROUTE_INFO=y -CONFIG_IPV6_OPTIMISTIC_DAD=y -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_ESP_OFFLOAD=m -CONFIG_INET6_ESPINTCP=y -CONFIG_INET6_IPCOMP=m -CONFIG_IPV6_MIP6=m -CONFIG_IPV6_ILA=m -CONFIG_INET6_XFRM_TUNNEL=m -CONFIG_INET6_TUNNEL=m -CONFIG_IPV6_VTI=m -CONFIG_IPV6_SIT=m -CONFIG_IPV6_SIT_6RD=y -CONFIG_IPV6_NDISC_NODETYPE=y -CONFIG_IPV6_TUNNEL=m -CONFIG_IPV6_GRE=m -CONFIG_IPV6_FOU=m -CONFIG_IPV6_FOU_TUNNEL=m -CONFIG_IPV6_MULTIPLE_TABLES=y -CONFIG_IPV6_SUBTREES=y -CONFIG_IPV6_MROUTE=y -CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y -CONFIG_IPV6_PIMSM_V2=y -CONFIG_IPV6_SEG6_LWTUNNEL=y -CONFIG_IPV6_SEG6_HMAC=y -CONFIG_IPV6_SEG6_BPF=y -CONFIG_IPV6_RPL_LWTUNNEL=y -CONFIG_IPV6_IOAM6_LWTUNNEL=y -CONFIG_NETLABEL=y -CONFIG_MPTCP=y -CONFIG_INET_MPTCP_DIAG=m -CONFIG_MPTCP_IPV6=y -CONFIG_NETWORK_SECMARK=y -CONFIG_NET_PTP_CLASSIFY=y -CONFIG_NETWORK_PHY_TIMESTAMPING=y -CONFIG_NETFILTER=y -CONFIG_NETFILTER_ADVANCED=y -CONFIG_BRIDGE_NETFILTER=m - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_INGRESS=y -CONFIG_NETFILTER_EGRESS=y -CONFIG_NETFILTER_SKIP_EGRESS=y -CONFIG_NETFILTER_NETLINK=m -CONFIG_NETFILTER_FAMILY_BRIDGE=y -CONFIG_NETFILTER_FAMILY_ARP=y -CONFIG_NETFILTER_BPF_LINK=y -CONFIG_NETFILTER_NETLINK_HOOK=m -CONFIG_NETFILTER_NETLINK_ACCT=m -CONFIG_NETFILTER_NETLINK_QUEUE=m -CONFIG_NETFILTER_NETLINK_LOG=m -CONFIG_NETFILTER_NETLINK_OSF=m -CONFIG_NF_CONNTRACK=m -CONFIG_NF_LOG_SYSLOG=m -CONFIG_NETFILTER_CONNCOUNT=m -CONFIG_NF_CONNTRACK_MARK=y -CONFIG_NF_CONNTRACK_SECMARK=y -CONFIG_NF_CONNTRACK_ZONES=y -CONFIG_NF_CONNTRACK_PROCFS=y -CONFIG_NF_CONNTRACK_EVENTS=y -CONFIG_NF_CONNTRACK_TIMEOUT=y -CONFIG_NF_CONNTRACK_TIMESTAMP=y -CONFIG_NF_CONNTRACK_LABELS=y -CONFIG_NF_CONNTRACK_OVS=y -CONFIG_NF_CT_PROTO_GRE=y -CONFIG_NF_CT_PROTO_SCTP=y -CONFIG_NF_CONNTRACK_AMANDA=m -CONFIG_NF_CONNTRACK_FTP=m -CONFIG_NF_CONNTRACK_H323=m -CONFIG_NF_CONNTRACK_IRC=m -CONFIG_NF_CONNTRACK_BROADCAST=m -CONFIG_NF_CONNTRACK_NETBIOS_NS=m -CONFIG_NF_CONNTRACK_SNMP=m -CONFIG_NF_CONNTRACK_PPTP=m -CONFIG_NF_CONNTRACK_SANE=m -CONFIG_NF_CONNTRACK_SIP=m -CONFIG_NF_CONNTRACK_TFTP=m -CONFIG_NF_CT_NETLINK=m -CONFIG_NF_CT_NETLINK_TIMEOUT=m -CONFIG_NF_CT_NETLINK_HELPER=m -CONFIG_NETFILTER_NETLINK_GLUE_CT=y -CONFIG_NF_NAT=m -CONFIG_NF_NAT_AMANDA=m -CONFIG_NF_NAT_FTP=m -CONFIG_NF_NAT_IRC=m -CONFIG_NF_NAT_SIP=m -CONFIG_NF_NAT_TFTP=m -CONFIG_NF_NAT_REDIRECT=y -CONFIG_NF_NAT_MASQUERADE=y -CONFIG_NF_NAT_OVS=y -CONFIG_NETFILTER_SYNPROXY=m -CONFIG_NF_TABLES=m -CONFIG_NF_TABLES_INET=y -CONFIG_NF_TABLES_NETDEV=y -CONFIG_NFT_NUMGEN=m -CONFIG_NFT_CT=m -# CONFIG_NFT_EXTHDR_DCCP is not set -CONFIG_NFT_FLOW_OFFLOAD=m -CONFIG_NFT_CONNLIMIT=m -CONFIG_NFT_LOG=m -CONFIG_NFT_LIMIT=m -CONFIG_NFT_MASQ=m -CONFIG_NFT_REDIR=m -CONFIG_NFT_NAT=m -CONFIG_NFT_TUNNEL=m -CONFIG_NFT_QUEUE=m -CONFIG_NFT_QUOTA=m -CONFIG_NFT_REJECT=m -CONFIG_NFT_REJECT_INET=m -CONFIG_NFT_COMPAT=m -CONFIG_NFT_HASH=m -CONFIG_NFT_FIB=m -CONFIG_NFT_FIB_INET=m -CONFIG_NFT_XFRM=m -CONFIG_NFT_SOCKET=m -CONFIG_NFT_OSF=m -CONFIG_NFT_TPROXY=m -CONFIG_NFT_SYNPROXY=m -CONFIG_NF_DUP_NETDEV=m -CONFIG_NFT_DUP_NETDEV=m -CONFIG_NFT_FWD_NETDEV=m -CONFIG_NFT_FIB_NETDEV=m -CONFIG_NFT_REJECT_NETDEV=m -CONFIG_NF_FLOW_TABLE_INET=m -CONFIG_NF_FLOW_TABLE=m -CONFIG_NF_FLOW_TABLE_PROCFS=y -CONFIG_NETFILTER_XTABLES=m -CONFIG_NETFILTER_XTABLES_COMPAT=y -CONFIG_NETFILTER_XTABLES_LEGACY=y - -# -# Xtables combined modules -# -CONFIG_NETFILTER_XT_MARK=m -CONFIG_NETFILTER_XT_CONNMARK=m -CONFIG_NETFILTER_XT_SET=m - -# -# Xtables targets -# -CONFIG_NETFILTER_XT_TARGET_AUDIT=m -CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -CONFIG_NETFILTER_XT_TARGET_CONNMARK=m -CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m -CONFIG_NETFILTER_XT_TARGET_CT=m -CONFIG_NETFILTER_XT_TARGET_DSCP=m -CONFIG_NETFILTER_XT_TARGET_HL=m -CONFIG_NETFILTER_XT_TARGET_HMARK=m -CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m -CONFIG_NETFILTER_XT_TARGET_LED=m -CONFIG_NETFILTER_XT_TARGET_LOG=m -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_NAT=m -CONFIG_NETFILTER_XT_TARGET_NETMAP=m -CONFIG_NETFILTER_XT_TARGET_NFLOG=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NOTRACK=m -CONFIG_NETFILTER_XT_TARGET_RATEEST=m -CONFIG_NETFILTER_XT_TARGET_REDIRECT=m -CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m -CONFIG_NETFILTER_XT_TARGET_TEE=m -CONFIG_NETFILTER_XT_TARGET_TPROXY=m -CONFIG_NETFILTER_XT_TARGET_TRACE=m -CONFIG_NETFILTER_XT_TARGET_SECMARK=m -CONFIG_NETFILTER_XT_TARGET_TCPMSS=m -CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m - -# -# Xtables matches -# -CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m -CONFIG_NETFILTER_XT_MATCH_BPF=m -CONFIG_NETFILTER_XT_MATCH_CGROUP=m -CONFIG_NETFILTER_XT_MATCH_CLUSTER=m -CONFIG_NETFILTER_XT_MATCH_COMMENT=m -CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m -CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m -CONFIG_NETFILTER_XT_MATCH_CONNMARK=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_CPU=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m -CONFIG_NETFILTER_XT_MATCH_DSCP=m -CONFIG_NETFILTER_XT_MATCH_ECN=m -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_HL=m -CONFIG_NETFILTER_XT_MATCH_IPCOMP=m -CONFIG_NETFILTER_XT_MATCH_IPRANGE=m -CONFIG_NETFILTER_XT_MATCH_IPVS=m -CONFIG_NETFILTER_XT_MATCH_L2TP=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_NFACCT=m -CONFIG_NETFILTER_XT_MATCH_OSF=m -CONFIG_NETFILTER_XT_MATCH_OWNER=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -CONFIG_NETFILTER_XT_MATCH_QUOTA=m -CONFIG_NETFILTER_XT_MATCH_RATEEST=m -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_RECENT=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_SOCKET=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_TIME=m -CONFIG_NETFILTER_XT_MATCH_U32=m -# end of Core Netfilter Configuration - -CONFIG_IP_SET=m -CONFIG_IP_SET_MAX=256 -CONFIG_IP_SET_BITMAP_IP=m -CONFIG_IP_SET_BITMAP_IPMAC=m -CONFIG_IP_SET_BITMAP_PORT=m -CONFIG_IP_SET_HASH_IP=m -CONFIG_IP_SET_HASH_IPMARK=m -CONFIG_IP_SET_HASH_IPPORT=m -CONFIG_IP_SET_HASH_IPPORTIP=m -CONFIG_IP_SET_HASH_IPPORTNET=m -CONFIG_IP_SET_HASH_IPMAC=m -CONFIG_IP_SET_HASH_MAC=m -CONFIG_IP_SET_HASH_NETPORTNET=m -CONFIG_IP_SET_HASH_NET=m -CONFIG_IP_SET_HASH_NETNET=m -CONFIG_IP_SET_HASH_NETPORT=m -CONFIG_IP_SET_HASH_NETIFACE=m -CONFIG_IP_SET_LIST_SET=m -CONFIG_IP_VS=m -CONFIG_IP_VS_IPV6=y -# CONFIG_IP_VS_DEBUG is not set -CONFIG_IP_VS_TAB_BITS=15 - -# -# IPVS transport protocol load balancing support -# -CONFIG_IP_VS_PROTO_TCP=y -CONFIG_IP_VS_PROTO_UDP=y -CONFIG_IP_VS_PROTO_AH_ESP=y -CONFIG_IP_VS_PROTO_ESP=y -CONFIG_IP_VS_PROTO_AH=y -CONFIG_IP_VS_PROTO_SCTP=y - -# -# IPVS scheduler -# -CONFIG_IP_VS_RR=m -CONFIG_IP_VS_WRR=m -CONFIG_IP_VS_LC=m -CONFIG_IP_VS_WLC=m -CONFIG_IP_VS_FO=m -CONFIG_IP_VS_OVF=m -CONFIG_IP_VS_LBLC=m -CONFIG_IP_VS_LBLCR=m -CONFIG_IP_VS_DH=m -CONFIG_IP_VS_SH=m -CONFIG_IP_VS_MH=m -CONFIG_IP_VS_SED=m -CONFIG_IP_VS_NQ=m -CONFIG_IP_VS_TWOS=m - -# -# IPVS SH scheduler -# -CONFIG_IP_VS_SH_TAB_BITS=8 - -# -# IPVS MH scheduler -# -CONFIG_IP_VS_MH_TAB_INDEX=12 - -# -# IPVS application helper -# -CONFIG_IP_VS_FTP=m -CONFIG_IP_VS_NFCT=y -CONFIG_IP_VS_PE_SIP=m - -# -# IP: Netfilter Configuration -# -CONFIG_NF_DEFRAG_IPV4=m -CONFIG_IP_NF_IPTABLES_LEGACY=m -CONFIG_NF_SOCKET_IPV4=m -CONFIG_NF_TPROXY_IPV4=m -CONFIG_NF_TABLES_IPV4=y -CONFIG_NFT_REJECT_IPV4=m -CONFIG_NFT_DUP_IPV4=m -CONFIG_NFT_FIB_IPV4=m -CONFIG_NF_TABLES_ARP=y -CONFIG_NF_DUP_IPV4=m -CONFIG_NF_LOG_ARP=m -CONFIG_NF_LOG_IPV4=m -CONFIG_NF_REJECT_IPV4=m -CONFIG_NF_NAT_SNMP_BASIC=m -CONFIG_NF_NAT_PPTP=m -CONFIG_NF_NAT_H323=m -CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_MATCH_AH=m -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_RPFILTER=m -CONFIG_IP_NF_MATCH_TTL=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_SYNPROXY=m -CONFIG_IP_NF_NAT=m -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_TARGET_NETMAP=m -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_MANGLE=m -CONFIG_IP_NF_TARGET_ECN=m -CONFIG_IP_NF_TARGET_TTL=m -CONFIG_IP_NF_RAW=m -CONFIG_IP_NF_SECURITY=m -CONFIG_IP_NF_ARPTABLES=m -CONFIG_NFT_COMPAT_ARP=m -CONFIG_IP_NF_ARPFILTER=m -CONFIG_IP_NF_ARP_MANGLE=m -# end of IP: Netfilter Configuration - -# -# IPv6: Netfilter Configuration -# -CONFIG_IP6_NF_IPTABLES_LEGACY=m -CONFIG_NF_SOCKET_IPV6=m -CONFIG_NF_TPROXY_IPV6=m -CONFIG_NF_TABLES_IPV6=y -CONFIG_NFT_REJECT_IPV6=m -CONFIG_NFT_DUP_IPV6=m -CONFIG_NFT_FIB_IPV6=m -CONFIG_NF_DUP_IPV6=m -CONFIG_NF_REJECT_IPV6=m -CONFIG_NF_LOG_IPV6=m -CONFIG_IP6_NF_IPTABLES=m -CONFIG_IP6_NF_MATCH_AH=m -CONFIG_IP6_NF_MATCH_EUI64=m -CONFIG_IP6_NF_MATCH_FRAG=m -CONFIG_IP6_NF_MATCH_OPTS=m -CONFIG_IP6_NF_MATCH_HL=m -CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_MATCH_MH=m -CONFIG_IP6_NF_MATCH_RPFILTER=m -CONFIG_IP6_NF_MATCH_RT=m -CONFIG_IP6_NF_MATCH_SRH=m -CONFIG_IP6_NF_TARGET_HL=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_TARGET_SYNPROXY=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_RAW=m -CONFIG_IP6_NF_SECURITY=m -CONFIG_IP6_NF_NAT=m -CONFIG_IP6_NF_TARGET_MASQUERADE=m -CONFIG_IP6_NF_TARGET_NPT=m -# end of IPv6: Netfilter Configuration - -CONFIG_NF_DEFRAG_IPV6=m -CONFIG_NF_TABLES_BRIDGE=m -CONFIG_NFT_BRIDGE_META=m -CONFIG_NFT_BRIDGE_REJECT=m -CONFIG_NF_CONNTRACK_BRIDGE=m -CONFIG_BRIDGE_NF_EBTABLES_LEGACY=m -CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m -CONFIG_BRIDGE_EBT_802_3=m -CONFIG_BRIDGE_EBT_AMONG=m -CONFIG_BRIDGE_EBT_ARP=m -CONFIG_BRIDGE_EBT_IP=m -CONFIG_BRIDGE_EBT_IP6=m -CONFIG_BRIDGE_EBT_LIMIT=m -CONFIG_BRIDGE_EBT_MARK=m -CONFIG_BRIDGE_EBT_PKTTYPE=m -CONFIG_BRIDGE_EBT_STP=m -CONFIG_BRIDGE_EBT_VLAN=m -CONFIG_BRIDGE_EBT_ARPREPLY=m -CONFIG_BRIDGE_EBT_DNAT=m -CONFIG_BRIDGE_EBT_MARK_T=m -CONFIG_BRIDGE_EBT_REDIRECT=m -CONFIG_BRIDGE_EBT_SNAT=m -CONFIG_BRIDGE_EBT_LOG=m -CONFIG_BRIDGE_EBT_NFLOG=m -CONFIG_IP_SCTP=m -# CONFIG_SCTP_DBG_OBJCNT is not set -CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA256=y -# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set -CONFIG_INET_SCTP_DIAG=m -CONFIG_RDS=m -CONFIG_RDS_RDMA=m -CONFIG_RDS_TCP=m -# CONFIG_RDS_DEBUG is not set -CONFIG_TIPC=m -CONFIG_TIPC_MEDIA_IB=y -CONFIG_TIPC_MEDIA_UDP=y -CONFIG_TIPC_CRYPTO=y -CONFIG_TIPC_DIAG=m -CONFIG_ATM=m -CONFIG_ATM_BR2684=m -# CONFIG_ATM_BR2684_IPFILTER is not set -CONFIG_L2TP=m -CONFIG_L2TP_DEBUGFS=m -CONFIG_L2TP_V3=y -CONFIG_L2TP_IP=m -CONFIG_L2TP_ETH=m -CONFIG_STP=m -CONFIG_GARP=m -CONFIG_MRP=m -CONFIG_BRIDGE=m -CONFIG_BRIDGE_IGMP_SNOOPING=y -CONFIG_BRIDGE_VLAN_FILTERING=y -CONFIG_BRIDGE_MRP=y -CONFIG_BRIDGE_CFM=y -CONFIG_NET_DSA=m -CONFIG_NET_DSA_TAG_NONE=m -CONFIG_NET_DSA_TAG_AR9331=m -CONFIG_NET_DSA_TAG_BRCM_COMMON=m -CONFIG_NET_DSA_TAG_BRCM=m -CONFIG_NET_DSA_TAG_BRCM_LEGACY=m -CONFIG_NET_DSA_TAG_BRCM_LEGACY_FCS=m -CONFIG_NET_DSA_TAG_BRCM_PREPEND=m -CONFIG_NET_DSA_TAG_HELLCREEK=m -CONFIG_NET_DSA_TAG_GSWIP=m -CONFIG_NET_DSA_TAG_DSA_COMMON=m -CONFIG_NET_DSA_TAG_DSA=m -CONFIG_NET_DSA_TAG_EDSA=m -CONFIG_NET_DSA_TAG_MTK=m -CONFIG_NET_DSA_TAG_MXL_862XX=m -CONFIG_NET_DSA_TAG_MXL_GSW1XX=m -CONFIG_NET_DSA_TAG_KSZ=m -CONFIG_NET_DSA_TAG_OCELOT=m -CONFIG_NET_DSA_TAG_OCELOT_8021Q=m -CONFIG_NET_DSA_TAG_QCA=m -CONFIG_NET_DSA_TAG_RTL4_A=m -CONFIG_NET_DSA_TAG_RTL8_4=m -CONFIG_NET_DSA_TAG_RZN1_A5PSW=m -CONFIG_NET_DSA_TAG_LAN9303=m -CONFIG_NET_DSA_TAG_SJA1105=m -CONFIG_NET_DSA_TAG_TRAILER=m -CONFIG_NET_DSA_TAG_VSC73XX_8021Q=m -CONFIG_NET_DSA_TAG_XRS700X=m -CONFIG_NET_DSA_TAG_YT921X=m -CONFIG_VLAN_8021Q=m -CONFIG_VLAN_8021Q_GVRP=y -CONFIG_VLAN_8021Q_MVRP=y -CONFIG_LLC=m -CONFIG_LLC2=m -CONFIG_ATALK=m -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -CONFIG_PHONET=m -CONFIG_6LOWPAN=m -CONFIG_6LOWPAN_DEBUGFS=y -CONFIG_6LOWPAN_NHC=m -CONFIG_6LOWPAN_NHC_DEST=m -CONFIG_6LOWPAN_NHC_FRAGMENT=m -CONFIG_6LOWPAN_NHC_HOP=m -CONFIG_6LOWPAN_NHC_IPV6=m -CONFIG_6LOWPAN_NHC_MOBILITY=m -CONFIG_6LOWPAN_NHC_ROUTING=m -CONFIG_6LOWPAN_NHC_UDP=m -CONFIG_6LOWPAN_GHC_EXT_HDR_HOP=m -CONFIG_6LOWPAN_GHC_UDP=m -CONFIG_6LOWPAN_GHC_ICMPV6=m -CONFIG_6LOWPAN_GHC_EXT_HDR_DEST=m -CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG=m -CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE=m -CONFIG_IEEE802154=m -CONFIG_IEEE802154_NL802154_EXPERIMENTAL=y -CONFIG_IEEE802154_SOCKET=m -CONFIG_IEEE802154_6LOWPAN=m -CONFIG_MAC802154=m -CONFIG_NET_SCHED=y - -# -# Queueing/Scheduling -# -CONFIG_NET_SCH_HTB=m -CONFIG_NET_SCH_HFSC=m -CONFIG_NET_SCH_PRIO=m -CONFIG_NET_SCH_MULTIQ=m -CONFIG_NET_SCH_RED=m -CONFIG_NET_SCH_SFB=m -CONFIG_NET_SCH_SFQ=m -CONFIG_NET_SCH_TEQL=m -CONFIG_NET_SCH_TBF=m -CONFIG_NET_SCH_CBS=m -CONFIG_NET_SCH_ETF=m -CONFIG_NET_SCH_MQPRIO_LIB=m -CONFIG_NET_SCH_TAPRIO=m -CONFIG_NET_SCH_GRED=m -CONFIG_NET_SCH_NETEM=m -CONFIG_NET_SCH_DRR=m -CONFIG_NET_SCH_MQPRIO=m -CONFIG_NET_SCH_SKBPRIO=m -CONFIG_NET_SCH_CHOKE=m -CONFIG_NET_SCH_QFQ=m -CONFIG_NET_SCH_CODEL=m -CONFIG_NET_SCH_FQ_CODEL=y -CONFIG_NET_SCH_CAKE=m -CONFIG_NET_SCH_FQ=m -CONFIG_NET_SCH_HHF=m -CONFIG_NET_SCH_PIE=m -CONFIG_NET_SCH_FQ_PIE=m -CONFIG_NET_SCH_INGRESS=m -CONFIG_NET_SCH_PLUG=m -CONFIG_NET_SCH_ETS=m -CONFIG_NET_SCH_DUALPI2=m -CONFIG_NET_SCH_DEFAULT=y -# CONFIG_DEFAULT_FQ is not set -# CONFIG_DEFAULT_CODEL is not set -CONFIG_DEFAULT_FQ_CODEL=y -# CONFIG_DEFAULT_FQ_PIE is not set -# CONFIG_DEFAULT_SFQ is not set -# CONFIG_DEFAULT_PFIFO_FAST is not set -CONFIG_DEFAULT_NET_SCH="fq_codel" - -# -# Classification -# -CONFIG_NET_CLS=y -CONFIG_NET_CLS_BASIC=m -CONFIG_NET_CLS_ROUTE4=m -CONFIG_NET_CLS_FW=m -CONFIG_NET_CLS_U32=m -CONFIG_CLS_U32_PERF=y -CONFIG_CLS_U32_MARK=y -CONFIG_NET_CLS_FLOW=m -CONFIG_NET_CLS_CGROUP=m -CONFIG_NET_CLS_BPF=m -CONFIG_NET_CLS_FLOWER=m -CONFIG_NET_CLS_MATCHALL=m -CONFIG_NET_EMATCH=y -CONFIG_NET_EMATCH_STACK=32 -CONFIG_NET_EMATCH_CMP=m -CONFIG_NET_EMATCH_NBYTE=m -CONFIG_NET_EMATCH_U32=m -CONFIG_NET_EMATCH_META=m -CONFIG_NET_EMATCH_TEXT=m -CONFIG_NET_EMATCH_CANID=m -CONFIG_NET_EMATCH_IPSET=m -CONFIG_NET_EMATCH_IPT=m -CONFIG_NET_CLS_ACT=y -CONFIG_NET_ACT_POLICE=m -CONFIG_NET_ACT_GACT=m -CONFIG_GACT_PROB=y -CONFIG_NET_ACT_MIRRED=m -CONFIG_NET_ACT_SAMPLE=m -CONFIG_NET_ACT_NAT=m -CONFIG_NET_ACT_PEDIT=m -CONFIG_NET_ACT_SIMP=m -CONFIG_NET_ACT_SKBEDIT=m -CONFIG_NET_ACT_CSUM=m -CONFIG_NET_ACT_MPLS=m -CONFIG_NET_ACT_VLAN=m -CONFIG_NET_ACT_BPF=m -CONFIG_NET_ACT_CONNMARK=m -CONFIG_NET_ACT_CTINFO=m -CONFIG_NET_ACT_SKBMOD=m -CONFIG_NET_ACT_IFE=m -CONFIG_NET_ACT_TUNNEL_KEY=m -CONFIG_NET_ACT_CT=m -CONFIG_NET_ACT_GATE=m -CONFIG_NET_IFE_SKBMARK=m -CONFIG_NET_IFE_SKBPRIO=m -CONFIG_NET_IFE_SKBTCINDEX=m -CONFIG_NET_TC_SKB_EXT=y -CONFIG_NET_SCH_FIFO=y -CONFIG_DCB=y -CONFIG_DNS_RESOLVER=m -CONFIG_BATMAN_ADV=m -CONFIG_BATMAN_ADV_BATMAN_V=y -CONFIG_BATMAN_ADV_BLA=y -CONFIG_BATMAN_ADV_DAT=y -CONFIG_BATMAN_ADV_MCAST=y -# CONFIG_BATMAN_ADV_DEBUG is not set -# CONFIG_BATMAN_ADV_TRACING is not set -CONFIG_OPENVSWITCH=m -CONFIG_OPENVSWITCH_GRE=m -CONFIG_OPENVSWITCH_VXLAN=m -CONFIG_OPENVSWITCH_GENEVE=m -CONFIG_VSOCKETS=m -CONFIG_VSOCKETS_DIAG=m -CONFIG_VSOCKETS_LOOPBACK=m -CONFIG_VMWARE_VMCI_VSOCKETS=m -CONFIG_VIRTIO_VSOCKETS=m -CONFIG_VIRTIO_VSOCKETS_COMMON=m -CONFIG_HYPERV_VSOCKETS=m -CONFIG_NETLINK_DIAG=m -CONFIG_MPLS=y -CONFIG_NET_MPLS_GSO=m -CONFIG_MPLS_ROUTING=m -CONFIG_MPLS_IPTUNNEL=m -CONFIG_NET_NSH=m -CONFIG_HSR=m -CONFIG_NET_SWITCHDEV=y -CONFIG_NET_L3_MASTER_DEV=y -CONFIG_QRTR=m -CONFIG_QRTR_SMD=m -CONFIG_QRTR_TUN=m -CONFIG_QRTR_MHI=m -CONFIG_NET_NCSI=y -CONFIG_NCSI_OEM_CMD_GET_MAC=y -CONFIG_NCSI_OEM_CMD_KEEP_PHY=y -CONFIG_PCPU_DEV_REFCNT=y -CONFIG_MAX_SKB_FRAGS=17 -CONFIG_RPS=y -CONFIG_RFS_ACCEL=y -CONFIG_SOCK_RX_QUEUE_MAPPING=y -CONFIG_XPS=y -CONFIG_CGROUP_NET_PRIO=y -CONFIG_CGROUP_NET_CLASSID=y -CONFIG_NET_RX_BUSY_POLL=y -CONFIG_BQL=y -CONFIG_BPF_STREAM_PARSER=y -CONFIG_NET_FLOW_LIMIT=y - -# -# Network testing -# -CONFIG_NET_PKTGEN=m -CONFIG_NET_DROP_MONITOR=y -# end of Network testing -# end of Networking options - -CONFIG_CAN=m -CONFIG_CAN_RAW=m -CONFIG_CAN_BCM=m -CONFIG_CAN_GW=m -CONFIG_CAN_J1939=m -CONFIG_CAN_ISOTP=m -CONFIG_BT=m -CONFIG_BT_BREDR=y -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=m -CONFIG_BT_LE=y -CONFIG_BT_LE_L2CAP_ECRED=y -CONFIG_BT_6LOWPAN=m -CONFIG_BT_LEDS=y -CONFIG_BT_MSFTEXT=y -CONFIG_BT_AOSPEXT=y -CONFIG_BT_DEBUGFS=y -# CONFIG_BT_SELFTEST is not set - -# -# Bluetooth device drivers -# -CONFIG_BT_INTEL=m -CONFIG_BT_BCM=m -CONFIG_BT_RTL=m -CONFIG_BT_QCA=m -CONFIG_BT_MTK=m -CONFIG_BT_HCIBTUSB=m -CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y -CONFIG_BT_HCIBTUSB_POLL_SYNC=y -CONFIG_BT_HCIBTUSB_BCM=y -CONFIG_BT_HCIBTUSB_MTK=y -CONFIG_BT_HCIBTUSB_RTL=y -CONFIG_BT_HCIBTSDIO=m -CONFIG_BT_HCIUART=m -CONFIG_BT_HCIUART_SERDEV=y -CONFIG_BT_HCIUART_H4=y -CONFIG_BT_HCIUART_NOKIA=m -CONFIG_BT_HCIUART_BCSP=y -CONFIG_BT_HCIUART_ATH3K=y -CONFIG_BT_HCIUART_LL=y -CONFIG_BT_HCIUART_3WIRE=y -CONFIG_BT_HCIUART_INTEL=y -CONFIG_BT_HCIUART_BCM=y -CONFIG_BT_HCIUART_RTL=y -CONFIG_BT_HCIUART_QCA=y -CONFIG_BT_HCIUART_AG6XX=y -CONFIG_BT_HCIUART_MRVL=y -CONFIG_BT_HCIUART_AML=y -CONFIG_BT_HCIBCM203X=m -CONFIG_BT_HCIBCM4377=m -CONFIG_BT_HCIBPA10X=m -CONFIG_BT_HCIBFUSB=m -CONFIG_BT_HCIDTL1=m -CONFIG_BT_HCIBT3C=m -CONFIG_BT_HCIBLUECARD=m -CONFIG_BT_HCIVHCI=m -CONFIG_BT_MRVL=m -CONFIG_BT_MRVL_SDIO=m -CONFIG_BT_ATH3K=m -CONFIG_BT_MTKSDIO=m -CONFIG_BT_MTKUART=m -CONFIG_BT_HCIRSI=m -CONFIG_BT_VIRTIO=m -CONFIG_BT_NXPUART=m -CONFIG_BT_INTEL_PCIE=m -# end of Bluetooth device drivers - -CONFIG_AF_RXRPC=m -CONFIG_AF_RXRPC_IPV6=y -# CONFIG_AF_RXRPC_INJECT_LOSS is not set -# CONFIG_AF_RXRPC_INJECT_RX_DELAY is not set -CONFIG_AF_RXRPC_DEBUG=y -CONFIG_RXKAD=y -CONFIG_RXGK=y -# CONFIG_RXPERF is not set -CONFIG_AF_KCM=m -CONFIG_STREAM_PARSER=y -CONFIG_MCTP=y -CONFIG_MCTP_FLOWS=y -CONFIG_FIB_RULES=y -CONFIG_WIRELESS=y -CONFIG_WIRELESS_EXT=y -CONFIG_WEXT_CORE=y -CONFIG_WEXT_PROC=y -CONFIG_WEXT_PRIV=y -CONFIG_CFG80211=m -# CONFIG_NL80211_TESTMODE is not set -# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set -CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y -CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y -CONFIG_CFG80211_DEFAULT_PS=y -CONFIG_CFG80211_DEBUGFS=y -CONFIG_CFG80211_CRDA_SUPPORT=y -CONFIG_CFG80211_WEXT=y -CONFIG_MAC80211=m -CONFIG_MAC80211_HAS_RC=y -CONFIG_MAC80211_RC_MINSTREL=y -CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y -CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" -CONFIG_MAC80211_MESH=y -CONFIG_MAC80211_LEDS=y -CONFIG_MAC80211_DEBUGFS=y -# CONFIG_MAC80211_MESSAGE_TRACING is not set -# CONFIG_MAC80211_DEBUG_MENU is not set -CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 -CONFIG_RFKILL=m -CONFIG_RFKILL_LEDS=y -CONFIG_RFKILL_INPUT=y -CONFIG_RFKILL_GPIO=m -CONFIG_NET_9P=m -CONFIG_NET_9P_FD=m -CONFIG_NET_9P_VIRTIO=m -CONFIG_NET_9P_XEN=m -CONFIG_NET_9P_USBG=m -CONFIG_NET_9P_RDMA=m -# CONFIG_NET_9P_DEBUG is not set -CONFIG_CEPH_LIB=m -CONFIG_CEPH_LIB_PRETTYDEBUG=y -CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y -CONFIG_NFC=m -CONFIG_NFC_DIGITAL=m -CONFIG_NFC_NCI=m -CONFIG_NFC_NCI_SPI=m -CONFIG_NFC_NCI_UART=m -CONFIG_NFC_HCI=m -CONFIG_NFC_SHDLC=y - -# -# Near Field Communication (NFC) devices -# -CONFIG_NFC_TRF7970A=m -CONFIG_NFC_MEI_PHY=m -CONFIG_NFC_SIM=m -CONFIG_NFC_PORT100=m -CONFIG_NFC_VIRTUAL_NCI=m -CONFIG_NFC_FDP=m -CONFIG_NFC_FDP_I2C=m -CONFIG_NFC_PN544=m -CONFIG_NFC_PN544_I2C=m -CONFIG_NFC_PN544_MEI=m -CONFIG_NFC_PN533=m -CONFIG_NFC_PN533_USB=m -CONFIG_NFC_PN533_I2C=m -CONFIG_NFC_PN532_UART=m -CONFIG_NFC_MICROREAD=m -CONFIG_NFC_MICROREAD_I2C=m -CONFIG_NFC_MICROREAD_MEI=m -CONFIG_NFC_MRVL=m -CONFIG_NFC_MRVL_USB=m -CONFIG_NFC_MRVL_UART=m -CONFIG_NFC_MRVL_I2C=m -CONFIG_NFC_MRVL_SPI=m -CONFIG_NFC_ST21NFCA=m -CONFIG_NFC_ST21NFCA_I2C=m -CONFIG_NFC_ST_NCI=m -CONFIG_NFC_ST_NCI_I2C=m -CONFIG_NFC_ST_NCI_SPI=m -CONFIG_NFC_NXP_NCI=m -CONFIG_NFC_NXP_NCI_I2C=m -CONFIG_NFC_S3FWRN5=m -CONFIG_NFC_S3FWRN5_I2C=m -CONFIG_NFC_S3FWRN82_UART=m -CONFIG_NFC_ST95HF=m -# end of Near Field Communication (NFC) devices - -CONFIG_PSAMPLE=m -CONFIG_NET_IFE=m -CONFIG_LWTUNNEL=y -CONFIG_LWTUNNEL_BPF=y -CONFIG_DST_CACHE=y -CONFIG_GRO_CELLS=y -CONFIG_SOCK_VALIDATE_XMIT=y -CONFIG_NET_IEEE8021Q_HELPERS=y -CONFIG_NET_SELFTESTS=m -CONFIG_NET_SOCK_MSG=y -CONFIG_NET_DEVLINK=y -CONFIG_PAGE_POOL=y -CONFIG_PAGE_POOL_STATS=y -CONFIG_FAILOVER=m -CONFIG_ETHTOOL_NETLINK=y - -# -# Device Drivers -# -CONFIG_HAVE_PCI=y -CONFIG_GENERIC_PCI_IOMAP=y -CONFIG_PCI=y -CONFIG_PCI_DOMAINS=y -CONFIG_PCIEPORTBUS=y -CONFIG_HOTPLUG_PCI_PCIE=y -CONFIG_PCIEAER=y -CONFIG_PCIEAER_INJECT=m -CONFIG_PCIE_ECRC=y -CONFIG_PCIEASPM=y -CONFIG_PCIEASPM_DEFAULT=y -# CONFIG_PCIEASPM_POWERSAVE is not set -# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set -# CONFIG_PCIEASPM_PERFORMANCE is not set -CONFIG_PCIE_PME=y -CONFIG_PCIE_DPC=y -CONFIG_PCIE_PTM=y -CONFIG_PCIE_EDR=y -CONFIG_PCI_MSI=y -CONFIG_PCI_QUIRKS=y -# CONFIG_PCI_DEBUG is not set -# CONFIG_PCI_REALLOC_ENABLE_AUTO is not set -CONFIG_PCI_STUB=y -CONFIG_PCI_PF_STUB=m -CONFIG_XEN_PCIDEV_FRONTEND=m -CONFIG_PCI_ATS=y -CONFIG_PCI_IDE=y -CONFIG_PCI_TSM=y -CONFIG_PCI_DOE=y -CONFIG_PCI_ECAM=y -CONFIG_PCI_LOCKLESS_CONFIG=y -CONFIG_PCI_IOV=y -CONFIG_PCI_NPEM=y -CONFIG_PCI_PRI=y -CONFIG_PCI_PASID=y -CONFIG_PCIE_TPH=y -CONFIG_PCI_P2PDMA=y -CONFIG_PCI_LABEL=y -CONFIG_PCI_HYPERV=m -CONFIG_VGA_ARB=y -CONFIG_VGA_ARB_MAX_GPUS=10 -CONFIG_HOTPLUG_PCI=y -CONFIG_HOTPLUG_PCI_ACPI=y -CONFIG_HOTPLUG_PCI_ACPI_IBM=m -CONFIG_HOTPLUG_PCI_CPCI=y -CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m -CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m -# CONFIG_HOTPLUG_PCI_OCTEONEP is not set -CONFIG_HOTPLUG_PCI_SHPC=y - -# -# PCI controller drivers -# -CONFIG_PCI_HOST_COMMON=y -CONFIG_VMD=m -CONFIG_PCI_HYPERV_INTERFACE=m - -# -# Cadence-based PCIe controllers -# -# end of Cadence-based PCIe controllers - -# -# DesignWare-based PCIe controllers -# -CONFIG_PCIE_DW=y -CONFIG_PCIE_DW_DEBUGFS=y -CONFIG_PCIE_DW_HOST=y -CONFIG_PCI_MESON=m -CONFIG_PCIE_DW_PLAT=y -CONFIG_PCIE_DW_PLAT_HOST=y -# end of DesignWare-based PCIe controllers - -# -# Mobiveil-based PCIe controllers -# -# end of Mobiveil-based PCIe controllers - -# -# PLDA-based PCIe controllers -# -# end of PLDA-based PCIe controllers -# end of PCI controller drivers - -# -# PCI Endpoint -# -# CONFIG_PCI_ENDPOINT is not set -# end of PCI Endpoint - -# -# PCI switch controller drivers -# -CONFIG_PCI_SW_SWITCHTEC=m -# end of PCI switch controller drivers - -CONFIG_PCI_PWRCTRL=m -CONFIG_PCI_PWRCTRL_GENERIC=m -CONFIG_PCI_PWRCTRL_TC9563=m -CONFIG_CXL_BUS=m -CONFIG_CXL_PCI=m -# CONFIG_CXL_MEM_RAW_COMMANDS is not set -CONFIG_CXL_ACPI=m -CONFIG_CXL_PMEM=m -CONFIG_CXL_MEM=m -CONFIG_CXL_FEATURES=y -CONFIG_CXL_PORT=m -CONFIG_CXL_SUSPEND=y -CONFIG_CXL_REGION=y -# CONFIG_CXL_REGION_INVALIDATION_TEST is not set -CONFIG_CXL_MCE=y -CONFIG_CXL_RAS=y -CONFIG_CXL_ATL=y -CONFIG_PCCARD=m -CONFIG_PCMCIA=m -CONFIG_PCMCIA_LOAD_CIS=y -CONFIG_CARDBUS=y - -# -# PC-card bridges -# -CONFIG_YENTA=m -CONFIG_YENTA_O2=y -CONFIG_YENTA_RICOH=y -CONFIG_YENTA_TI=y -CONFIG_YENTA_ENE_TUNE=y -CONFIG_YENTA_TOSHIBA=y -CONFIG_PD6729=m -CONFIG_PCCARD_NONSTATIC=y -# CONFIG_RAPIDIO is not set - -# -# Generic Driver Options -# -CONFIG_AUXILIARY_BUS=y -# CONFIG_UEVENT_HELPER is not set -CONFIG_DEVTMPFS=y -CONFIG_DEVTMPFS_MOUNT=y -CONFIG_DEVTMPFS_SAFE=y -CONFIG_DRIVER_DEFERRED_PROBE_TIMEOUT=10 -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y - -# -# Firmware loader -# -CONFIG_FW_LOADER=y -CONFIG_FW_LOADER_DEBUG=y -CONFIG_FW_LOADER_PAGED_BUF=y -CONFIG_FW_LOADER_SYSFS=y -CONFIG_EXTRA_FIRMWARE="" -# CONFIG_FW_LOADER_USER_HELPER is not set -CONFIG_FW_LOADER_COMPRESS=y -CONFIG_FW_LOADER_COMPRESS_XZ=y -CONFIG_FW_LOADER_COMPRESS_ZSTD=y -CONFIG_FW_CACHE=y -CONFIG_FW_UPLOAD=y -# end of Firmware loader - -CONFIG_WANT_DEV_COREDUMP=y -CONFIG_ALLOW_DEV_COREDUMP=y -CONFIG_DEV_COREDUMP=y -# CONFIG_DEBUG_DRIVER is not set -# CONFIG_DEBUG_DEVRES is not set -# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set -CONFIG_HMEM_REPORTING=y -# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set -CONFIG_SYS_HYPERVISOR=y -CONFIG_GENERIC_CPU_DEVICES=y -CONFIG_GENERIC_CPU_AUTOPROBE=y -CONFIG_GENERIC_CPU_VULNERABILITIES=y -CONFIG_SOC_BUS=y -CONFIG_REGMAP=y -CONFIG_REGMAP_I2C=y -CONFIG_REGMAP_SLIMBUS=m -CONFIG_REGMAP_SPI=y -CONFIG_REGMAP_W1=m -CONFIG_REGMAP_MMIO=y -CONFIG_REGMAP_IRQ=y -CONFIG_REGMAP_SOUNDWIRE=m -CONFIG_REGMAP_SOUNDWIRE_MBQ=m -CONFIG_REGMAP_SCCB=m -CONFIG_REGMAP_SPI_AVMM=m -CONFIG_DMA_SHARED_BUFFER=y -# CONFIG_DMA_FENCE_TRACE is not set -# CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set -# end of Generic Driver Options - -# -# Bus devices -# -CONFIG_MHI_BUS=m -# CONFIG_MHI_BUS_DEBUG is not set -CONFIG_MHI_BUS_PCI_GENERIC=m -CONFIG_MHI_BUS_EP=m -# end of Bus devices - -CONFIG_CONNECTOR=y -CONFIG_PROC_EVENTS=y - -# -# Firmware Drivers -# - -# -# ARM System Control and Management Interface Protocol -# -# end of ARM System Control and Management Interface Protocol - -CONFIG_EDD=m -# CONFIG_EDD_OFF is not set -CONFIG_FIRMWARE_MEMMAP=y -CONFIG_DMIID=y -CONFIG_DMI_SYSFS=y -CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y -CONFIG_ISCSI_IBFT_FIND=y -CONFIG_ISCSI_IBFT=m -CONFIG_FW_CFG_SYSFS=m -# CONFIG_FW_CFG_SYSFS_CMDLINE is not set -CONFIG_SYSFB=y -CONFIG_SYSFB_SIMPLEFB=y -CONFIG_FW_CS_DSP=m -CONFIG_GOOGLE_FIRMWARE=y -# CONFIG_GOOGLE_SMI is not set -CONFIG_GOOGLE_CBMEM=m -CONFIG_GOOGLE_COREBOOT_TABLE=m -CONFIG_GOOGLE_MEMCONSOLE=m -# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set -CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m -CONFIG_GOOGLE_MEMCONSOLE_COREBOOT=m -CONFIG_GOOGLE_VPD=m - -# -# EFI (Extensible Firmware Interface) Support -# -CONFIG_EFI_ESRT=y -CONFIG_EFI_VARS_PSTORE=y -CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE=y -CONFIG_EFI_SOFT_RESERVE=y -CONFIG_EFI_DXE_MEM_ATTRIBUTES=y -CONFIG_EFI_RUNTIME_WRAPPERS=y -CONFIG_EFI_BOOTLOADER_CONTROL=m -CONFIG_EFI_CAPSULE_LOADER=m -# CONFIG_EFI_TEST is not set -CONFIG_EFI_DEV_PATH_PARSER=y -CONFIG_APPLE_PROPERTIES=y -# CONFIG_RESET_ATTACK_MITIGATION is not set -CONFIG_EFI_RCI2_TABLE=y -# CONFIG_EFI_DISABLE_PCI_DMA is not set -CONFIG_EFI_EARLYCON=y -CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y -# CONFIG_EFI_DISABLE_RUNTIME is not set -CONFIG_EFI_COCO_SECRET=y -CONFIG_OVMF_DEBUG_LOG=y -CONFIG_UNACCEPTED_MEMORY=y -CONFIG_EFI_EMBEDDED_FIRMWARE=y -CONFIG_EFI_SBAT_FILE="" -# end of EFI (Extensible Firmware Interface) Support - -CONFIG_UEFI_CPER=y -CONFIG_UEFI_CPER_X86=y - -# -# Qualcomm firmware drivers -# -CONFIG_QCOM_SCM=m -CONFIG_QCOM_TZMEM=m -CONFIG_QCOM_TZMEM_MODE_GENERIC=y -# CONFIG_QCOM_TZMEM_MODE_SHMBRIDGE is not set -# end of Qualcomm firmware drivers - -# -# Tegra firmware driver -# -# end of Tegra firmware driver -# end of Firmware Drivers - -CONFIG_FWCTL=m -CONFIG_FWCTL_BNXT=m -CONFIG_FWCTL_MLX5=m -CONFIG_FWCTL_PDS=m -CONFIG_GNSS=m -CONFIG_GNSS_SERIAL=m -CONFIG_GNSS_MTK_SERIAL=m -CONFIG_GNSS_SIRF_SERIAL=m -CONFIG_GNSS_UBX_SERIAL=m -CONFIG_GNSS_USB=m -CONFIG_MTD=m -# CONFIG_MTD_TESTS is not set - -# -# Partition parsers -# -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_REDBOOT_PARTS is not set -# end of Partition parsers - -# -# User Modules And Translation Layers -# -CONFIG_MTD_BLKDEVS=m -CONFIG_MTD_BLOCK=m -# CONFIG_MTD_BLOCK_RO is not set - -# -# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK. -# -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set -# CONFIG_SM_FTL is not set -# CONFIG_MTD_OOPS is not set -CONFIG_MTD_PSTORE=m -# CONFIG_MTD_SWAP is not set -CONFIG_MTD_PARTITIONED_MASTER=y -CONFIG_MTD_VIRT_CONCAT=y - -# -# RAM/ROM/Flash chip drivers -# -# CONFIG_MTD_CFI is not set -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -CONFIG_MTD_MAP_BANK_WIDTH_2=y -CONFIG_MTD_MAP_BANK_WIDTH_4=y -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_RAM is not set -CONFIG_MTD_ROM=m -# CONFIG_MTD_ABSENT is not set -# end of RAM/ROM/Flash chip drivers - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_PLATRAM is not set -# end of Mapping drivers for chip access - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_MCHP23K256 is not set -# CONFIG_MTD_MCHP48L640 is not set -# CONFIG_MTD_SST25L is not set -# CONFIG_MTD_SLRAM is not set -CONFIG_MTD_PHRAM=m -CONFIG_MTD_MTDRAM=m -CONFIG_MTDRAM_TOTAL_SIZE=4096 -CONFIG_MTDRAM_ERASE_SIZE=128 -CONFIG_MTD_BLOCK2MTD=m -CONFIG_MTD_INTEL_DG=m - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOCG3 is not set -# end of Self-contained MTD device drivers - -# -# NAND -# -CONFIG_MTD_NAND_CORE=m -# CONFIG_MTD_ONENAND is not set -CONFIG_MTD_RAW_NAND=m - -# -# Raw/parallel NAND flash controllers -# -# CONFIG_MTD_NAND_DENALI_PCI is not set -# CONFIG_MTD_NAND_CAFE is not set -# CONFIG_MTD_NAND_MXIC is not set -# CONFIG_MTD_NAND_GPIO is not set -# CONFIG_MTD_NAND_PLATFORM is not set -# CONFIG_MTD_NAND_ARASAN is not set - -# -# Misc -# -CONFIG_MTD_NAND_NANDSIM=m -# CONFIG_MTD_NAND_RICOH is not set -# CONFIG_MTD_NAND_DISKONCHIP is not set -# CONFIG_MTD_SPI_NAND is not set - -# -# ECC engine support -# -CONFIG_MTD_NAND_ECC=y -CONFIG_MTD_NAND_ECC_SW_HAMMING=y -CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC=y -CONFIG_MTD_NAND_ECC_SW_BCH=y -CONFIG_MTD_NAND_ECC_MXIC=y -# end of ECC engine support -# end of NAND - -# -# LPDDR & LPDDR2 PCM memory drivers -# -# CONFIG_MTD_LPDDR is not set -# end of LPDDR & LPDDR2 PCM memory drivers - -CONFIG_MTD_SPI_NOR=m -CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y -# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set -CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y -# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set -CONFIG_MTD_UBI=m -CONFIG_MTD_UBI_WL_THRESHOLD=4096 -CONFIG_MTD_UBI_BEB_LIMIT=20 -# CONFIG_MTD_UBI_FASTMAP is not set -# CONFIG_MTD_UBI_GLUEBI is not set -# CONFIG_MTD_UBI_BLOCK is not set -CONFIG_MTD_UBI_NVMEM=m -# CONFIG_MTD_HYPERBUS is not set -# CONFIG_OF is not set -CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y -CONFIG_PARPORT=m -CONFIG_PARPORT_PC=m -CONFIG_PARPORT_SERIAL=m -CONFIG_PARPORT_PC_FIFO=y -CONFIG_PARPORT_PC_SUPERIO=y -CONFIG_PARPORT_PC_PCMCIA=m -CONFIG_PARPORT_1284=y -CONFIG_PARPORT_NOT_PC=y -CONFIG_PNP=y -CONFIG_PNP_DEBUG_MESSAGES=y - -# -# Protocols -# -CONFIG_PNPACPI=y -CONFIG_BLK_DEV=y -CONFIG_BLK_DEV_NULL_BLK=m -CONFIG_BLK_DEV_FD=m -# CONFIG_BLK_DEV_FD_RAWCMD is not set -CONFIG_CDROM=m -CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m -CONFIG_ZRAM=m -CONFIG_ZRAM_BACKEND_LZ4=y -CONFIG_ZRAM_BACKEND_LZ4HC=y -CONFIG_ZRAM_BACKEND_ZSTD=y -CONFIG_ZRAM_BACKEND_DEFLATE=y -CONFIG_ZRAM_BACKEND_842=y -CONFIG_ZRAM_BACKEND_LZO=y -# CONFIG_ZRAM_DEF_COMP_LZORLE is not set -# CONFIG_ZRAM_DEF_COMP_LZO is not set -# CONFIG_ZRAM_DEF_COMP_LZ4 is not set -# CONFIG_ZRAM_DEF_COMP_LZ4HC is not set -CONFIG_ZRAM_DEF_COMP_ZSTD=y -# CONFIG_ZRAM_DEF_COMP_DEFLATE is not set -# CONFIG_ZRAM_DEF_COMP_842 is not set -CONFIG_ZRAM_DEF_COMP="zstd" -CONFIG_ZRAM_WRITEBACK=y -CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y -CONFIG_ZRAM_MEMORY_TRACKING=y -CONFIG_ZRAM_MULTI_COMP=y -CONFIG_BLK_DEV_LOOP=m -CONFIG_BLK_DEV_LOOP_MIN_COUNT=0 -CONFIG_BLK_DEV_DRBD=m -# CONFIG_DRBD_FAULT_INJECTION is not set -CONFIG_BLK_DEV_NBD=m -CONFIG_BLK_DEV_RAM=m -CONFIG_BLK_DEV_RAM_COUNT=16 -CONFIG_BLK_DEV_RAM_SIZE=16384 -CONFIG_ATA_OVER_ETH=m -CONFIG_XEN_BLKDEV_FRONTEND=m -CONFIG_XEN_BLKDEV_BACKEND=m -CONFIG_VIRTIO_BLK=y -CONFIG_BLK_DEV_RBD=m -CONFIG_BLK_DEV_UBLK=m -CONFIG_BLKDEV_UBLK_LEGACY_OPCODES=y -CONFIG_BLK_DEV_RNBD=y -CONFIG_BLK_DEV_RNBD_CLIENT=m -CONFIG_BLK_DEV_RNBD_SERVER=m -CONFIG_BLK_DEV_ZONED_LOOP=m - -# -# NVME Support -# -CONFIG_NVME_KEYRING=m -CONFIG_NVME_AUTH=m -CONFIG_NVME_CORE=m -CONFIG_BLK_DEV_NVME=m -CONFIG_NVME_MULTIPATH=y -CONFIG_NVME_VERBOSE_ERRORS=y -CONFIG_NVME_HWMON=y -CONFIG_NVME_FABRICS=m -CONFIG_NVME_RDMA=m -CONFIG_NVME_FC=m -CONFIG_NVME_TCP=m -CONFIG_NVME_TCP_TLS=y -CONFIG_NVME_HOST_AUTH=y -CONFIG_NVME_TARGET=m -CONFIG_NVME_TARGET_DEBUGFS=y -CONFIG_NVME_TARGET_PASSTHRU=y -CONFIG_NVME_TARGET_LOOP=m -CONFIG_NVME_TARGET_RDMA=m -CONFIG_NVME_TARGET_FC=m -CONFIG_NVME_TARGET_FCLOOP=m -CONFIG_NVME_TARGET_TCP=m -CONFIG_NVME_TARGET_TCP_TLS=y -CONFIG_NVME_TARGET_AUTH=y -# CONFIG_NVME_TARGET_AUTH_DEBUG is not set -# end of NVME Support - -# -# Misc devices -# -CONFIG_SENSORS_LIS3LV02D=m -CONFIG_AD525X_DPOT=m -CONFIG_AD525X_DPOT_I2C=m -CONFIG_AD525X_DPOT_SPI=m -# CONFIG_DUMMY_IRQ is not set -CONFIG_IBM_ASM=m -CONFIG_PHANTOM=m -CONFIG_RPMB=m -CONFIG_TI_FPC202=m -CONFIG_TIFM_CORE=m -CONFIG_TIFM_7XX1=m -CONFIG_ICS932S401=m -CONFIG_ENCLOSURE_SERVICES=m -CONFIG_SMPRO_ERRMON=m -CONFIG_SMPRO_MISC=m -CONFIG_HP_ILO=m -CONFIG_APDS9802ALS=m -CONFIG_ISL29003=m -CONFIG_ISL29020=m -CONFIG_SENSORS_TSL2550=m -CONFIG_SENSORS_BH1770=m -CONFIG_SENSORS_APDS990X=m -CONFIG_HMC6352=m -CONFIG_DS1682=m -CONFIG_VMWARE_BALLOON=m -CONFIG_LATTICE_ECP3_CONFIG=m -# CONFIG_SRAM is not set -CONFIG_DW_XDATA_PCIE=m -CONFIG_PCI_ENDPOINT_TEST=m -CONFIG_XILINX_SDFEC=m -CONFIG_MISC_RTSX=m -CONFIG_NTSYNC=m -CONFIG_TPS6594_ESM=m -CONFIG_TPS6594_PFSM=m -CONFIG_NSM=m -CONFIG_C2PORT=m -CONFIG_C2PORT_DURAMAR_2150=m - -# -# EEPROM support -# -CONFIG_EEPROM_AT24=m -# CONFIG_EEPROM_AT25 is not set -CONFIG_EEPROM_MAX6875=m -CONFIG_EEPROM_93CX6=m -# CONFIG_EEPROM_93XX46 is not set -CONFIG_EEPROM_IDT_89HPESX=m -CONFIG_EEPROM_EE1004=m -CONFIG_EEPROM_M24LR=m -# end of EEPROM support - -CONFIG_CB710_CORE=m -# CONFIG_CB710_DEBUG is not set -CONFIG_CB710_DEBUG_ASSUMPTIONS=y -CONFIG_SENSORS_LIS3_I2C=m -CONFIG_ALTERA_STAPL=m -CONFIG_INTEL_MEI=m -CONFIG_INTEL_MEI_ME=m -CONFIG_INTEL_MEI_TXE=m -CONFIG_INTEL_MEI_GSC=m -CONFIG_INTEL_MEI_CSC=m -CONFIG_INTEL_MEI_VSC_HW=m -CONFIG_INTEL_MEI_VSC=m -CONFIG_INTEL_MEI_LB=m -CONFIG_INTEL_MEI_HDCP=m -CONFIG_INTEL_MEI_PXP=m -CONFIG_INTEL_MEI_GSC_PROXY=m -CONFIG_VMWARE_VMCI=m -CONFIG_GENWQE=m -CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0 -CONFIG_BCM_VK=m -CONFIG_BCM_VK_TTY=y -CONFIG_MISC_ALCOR_PCI=m -CONFIG_MISC_RTSX_PCI=m -CONFIG_MISC_RTSX_USB=m -CONFIG_UACCE=m -CONFIG_PVPANIC=y -CONFIG_PVPANIC_MMIO=m -CONFIG_PVPANIC_PCI=m -CONFIG_GP_PCI1XXXX=m -CONFIG_KEBA_CP500=m -CONFIG_KEBA_LAN9252=m -# end of Misc devices - -# -# SCSI device support -# -CONFIG_SCSI_MOD=y -CONFIG_RAID_ATTRS=m -CONFIG_SCSI_COMMON=y -CONFIG_SCSI=y -CONFIG_SCSI_DMA=y -CONFIG_SCSI_NETLINK=y -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=y -CONFIG_CHR_DEV_ST=m -CONFIG_BLK_DEV_SR=m -CONFIG_CHR_DEV_SG=m -CONFIG_BLK_DEV_BSG=y -CONFIG_CHR_DEV_SCH=m -CONFIG_SCSI_ENCLOSURE=m -CONFIG_SCSI_CONSTANTS=y -CONFIG_SCSI_LOGGING=y -CONFIG_SCSI_SCAN_ASYNC=y - -# -# SCSI Transports -# -CONFIG_SCSI_SPI_ATTRS=m -CONFIG_SCSI_FC_ATTRS=m -CONFIG_SCSI_ISCSI_ATTRS=m -CONFIG_SCSI_SAS_ATTRS=m -CONFIG_SCSI_SAS_LIBSAS=m -CONFIG_SCSI_SAS_ATA=y -CONFIG_SCSI_SAS_HOST_SMP=y -CONFIG_SCSI_SRP_ATTRS=m -# end of SCSI Transports - -CONFIG_SCSI_LOWLEVEL=y -CONFIG_ISCSI_TCP=m -CONFIG_ISCSI_BOOT_SYSFS=m -CONFIG_SCSI_CXGB3_ISCSI=m -CONFIG_SCSI_CXGB4_ISCSI=m -CONFIG_SCSI_BNX2_ISCSI=m -CONFIG_SCSI_BNX2X_FCOE=m -CONFIG_BE2ISCSI=m -CONFIG_BLK_DEV_3W_XXXX_RAID=m -CONFIG_SCSI_HPSA=m -CONFIG_SCSI_3W_9XXX=m -CONFIG_SCSI_3W_SAS=m -CONFIG_SCSI_ACARD=m -CONFIG_SCSI_AACRAID=m -CONFIG_SCSI_AIC7XXX=m -CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 -CONFIG_AIC7XXX_RESET_DELAY_MS=15000 -CONFIG_AIC7XXX_DEBUG_ENABLE=y -CONFIG_AIC7XXX_DEBUG_MASK=0 -CONFIG_AIC7XXX_REG_PRETTY_PRINT=y -CONFIG_SCSI_AIC79XX=m -CONFIG_AIC79XX_CMDS_PER_DEVICE=32 -CONFIG_AIC79XX_RESET_DELAY_MS=15000 -CONFIG_AIC79XX_DEBUG_ENABLE=y -CONFIG_AIC79XX_DEBUG_MASK=0 -CONFIG_AIC79XX_REG_PRETTY_PRINT=y -CONFIG_SCSI_AIC94XX=m -CONFIG_AIC94XX_DEBUG=y -CONFIG_SCSI_MVSAS=m -CONFIG_SCSI_MVSAS_DEBUG=y -CONFIG_SCSI_MVSAS_TASKLET=y -CONFIG_SCSI_MVUMI=m -CONFIG_SCSI_ADVANSYS=m -CONFIG_SCSI_ARCMSR=m -CONFIG_SCSI_ESAS2R=m -CONFIG_MEGARAID_NEWGEN=y -CONFIG_MEGARAID_MM=m -CONFIG_MEGARAID_MAILBOX=m -CONFIG_MEGARAID_LEGACY=m -CONFIG_MEGARAID_SAS=m -CONFIG_SCSI_MPT3SAS=m -CONFIG_SCSI_MPT2SAS_MAX_SGE=128 -CONFIG_SCSI_MPT3SAS_MAX_SGE=128 -CONFIG_SCSI_MPT2SAS=m -CONFIG_SCSI_MPI3MR=m -CONFIG_SCSI_SMARTPQI=m -CONFIG_SCSI_HPTIOP=m -CONFIG_SCSI_BUSLOGIC=m -CONFIG_SCSI_FLASHPOINT=y -CONFIG_SCSI_MYRB=m -CONFIG_SCSI_MYRS=m -CONFIG_VMWARE_PVSCSI=m -CONFIG_XEN_SCSI_FRONTEND=m -CONFIG_HYPERV_STORAGE=m -CONFIG_LIBFC=m -CONFIG_LIBFCOE=m -CONFIG_FCOE=m -CONFIG_FCOE_FNIC=m -CONFIG_SCSI_SNIC=m -# CONFIG_SCSI_SNIC_DEBUG_FS is not set -CONFIG_SCSI_DMX3191D=m -CONFIG_SCSI_FDOMAIN=m -CONFIG_SCSI_FDOMAIN_PCI=m -CONFIG_SCSI_ISCI=m -CONFIG_SCSI_IPS=m -CONFIG_SCSI_INITIO=m -CONFIG_SCSI_INIA100=m -CONFIG_SCSI_PPA=m -CONFIG_SCSI_IMM=m -# CONFIG_SCSI_IZIP_SLOW_CTR is not set -CONFIG_SCSI_STEX=m -CONFIG_SCSI_SYM53C8XX_2=m -CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 -CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 -CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 -CONFIG_SCSI_SYM53C8XX_MMIO=y -CONFIG_SCSI_IPR=m -CONFIG_SCSI_IPR_TRACE=y -CONFIG_SCSI_IPR_DUMP=y -CONFIG_SCSI_QLOGIC_1280=m -CONFIG_SCSI_QLA_FC=m -CONFIG_TCM_QLA2XXX=m -# CONFIG_TCM_QLA2XXX_DEBUG is not set -CONFIG_SCSI_QLA_ISCSI=m -CONFIG_QEDI=m -CONFIG_QEDF=m -CONFIG_SCSI_LPFC=m -# CONFIG_SCSI_LPFC_DEBUG_FS is not set -CONFIG_SCSI_EFCT=m -CONFIG_SCSI_DC395x=m -CONFIG_SCSI_AM53C974=m -CONFIG_SCSI_WD719X=m -CONFIG_SCSI_DEBUG=m -CONFIG_SCSI_PMCRAID=m -CONFIG_SCSI_PM8001=m -CONFIG_SCSI_BFA_FC=m -CONFIG_SCSI_VIRTIO=m -CONFIG_SCSI_CHELSIO_FCOE=m -CONFIG_SCSI_LOWLEVEL_PCMCIA=y -CONFIG_PCMCIA_AHA152X=m -CONFIG_PCMCIA_FDOMAIN=m -CONFIG_PCMCIA_QLOGIC=m -CONFIG_PCMCIA_SYM53C500=m -CONFIG_SCSI_DH=y -CONFIG_SCSI_DH_RDAC=m -CONFIG_SCSI_DH_HP_SW=m -CONFIG_SCSI_DH_EMC=m -CONFIG_SCSI_DH_ALUA=m -# end of SCSI device support - -CONFIG_ATA=y -CONFIG_SATA_HOST=y -CONFIG_PATA_TIMINGS=y -CONFIG_ATA_VERBOSE_ERROR=y -CONFIG_ATA_FORCE=y -CONFIG_ATA_ACPI=y -CONFIG_SATA_ZPODD=y -CONFIG_SATA_PMP=y - -# -# Controllers with non-SFF native interface -# -CONFIG_SATA_AHCI=y -CONFIG_SATA_MOBILE_LPM_POLICY=3 -CONFIG_SATA_AHCI_PLATFORM=m -CONFIG_AHCI_DWC=m -CONFIG_SATA_INIC162X=m -CONFIG_SATA_ACARD_AHCI=m -CONFIG_SATA_SIL24=m -CONFIG_ATA_SFF=y - -# -# SFF controllers with custom DMA interface -# -CONFIG_PDC_ADMA=m -CONFIG_SATA_QSTOR=m -CONFIG_SATA_SX4=m -CONFIG_ATA_BMDMA=y - -# -# SATA SFF controllers with BMDMA -# -CONFIG_ATA_PIIX=m -CONFIG_SATA_DWC=m -# CONFIG_SATA_DWC_OLD_DMA is not set -CONFIG_SATA_MV=m -CONFIG_SATA_NV=m -CONFIG_SATA_PROMISE=m -CONFIG_SATA_SIL=m -CONFIG_SATA_SIS=m -CONFIG_SATA_SVW=m -CONFIG_SATA_ULI=m -CONFIG_SATA_VIA=m -CONFIG_SATA_VITESSE=m - -# -# PATA SFF controllers with BMDMA -# -CONFIG_PATA_ALI=m -CONFIG_PATA_AMD=m -CONFIG_PATA_ARTOP=m -CONFIG_PATA_ATIIXP=m -CONFIG_PATA_ATP867X=m -CONFIG_PATA_CMD64X=m -CONFIG_PATA_CYPRESS=m -CONFIG_PATA_EFAR=m -CONFIG_PATA_HPT366=m -CONFIG_PATA_HPT37X=m -CONFIG_PATA_HPT3X2N=m -CONFIG_PATA_HPT3X3=m -CONFIG_PATA_HPT3X3_DMA=y -CONFIG_PATA_IT8213=m -CONFIG_PATA_IT821X=m -CONFIG_PATA_JMICRON=m -CONFIG_PATA_MARVELL=m -CONFIG_PATA_NETCELL=m -CONFIG_PATA_NINJA32=m -CONFIG_PATA_NS87415=m -CONFIG_PATA_OLDPIIX=m -CONFIG_PATA_OPTIDMA=m -CONFIG_PATA_PDC2027X=m -CONFIG_PATA_PDC_OLD=m -CONFIG_PATA_RADISYS=m -CONFIG_PATA_RDC=m -CONFIG_PATA_SCH=m -CONFIG_PATA_SERVERWORKS=m -CONFIG_PATA_SIL680=m -CONFIG_PATA_SIS=m -CONFIG_PATA_TOSHIBA=m -CONFIG_PATA_TRIFLEX=m -CONFIG_PATA_VIA=m -CONFIG_PATA_WINBOND=m - -# -# PIO-only SFF controllers -# -CONFIG_PATA_CMD640_PCI=m -CONFIG_PATA_MPIIX=m -CONFIG_PATA_NS87410=m -CONFIG_PATA_OPTI=m -CONFIG_PATA_PCMCIA=m -CONFIG_PATA_RZ1000=m -CONFIG_PATA_PARPORT=m - -# -# Parallel IDE protocol modules -# -CONFIG_PATA_PARPORT_ATEN=m -CONFIG_PATA_PARPORT_BPCK=m -CONFIG_PATA_PARPORT_BPCK6=m -CONFIG_PATA_PARPORT_COMM=m -CONFIG_PATA_PARPORT_DSTR=m -CONFIG_PATA_PARPORT_FIT2=m -CONFIG_PATA_PARPORT_FIT3=m -CONFIG_PATA_PARPORT_EPAT=m -CONFIG_PATA_PARPORT_EPATC8=y -CONFIG_PATA_PARPORT_EPIA=m -CONFIG_PATA_PARPORT_FRIQ=m -CONFIG_PATA_PARPORT_FRPW=m -CONFIG_PATA_PARPORT_KBIC=m -CONFIG_PATA_PARPORT_KTTI=m -CONFIG_PATA_PARPORT_ON20=m -CONFIG_PATA_PARPORT_ON26=m - -# -# Generic fallback / legacy drivers -# -CONFIG_PATA_ACPI=m -CONFIG_ATA_GENERIC=m -CONFIG_PATA_LEGACY=m -CONFIG_MD=y -CONFIG_BLK_DEV_MD=m -CONFIG_MD_BITMAP=y -CONFIG_MD_LLBITMAP=y -CONFIG_MD_BITMAP_FILE=y -CONFIG_MD_LINEAR=m -CONFIG_MD_RAID0=m -CONFIG_MD_RAID1=m -CONFIG_MD_RAID10=m -CONFIG_MD_RAID456=m -CONFIG_MD_CLUSTER=m -CONFIG_BCACHE=m -# CONFIG_BCACHE_DEBUG is not set -CONFIG_BCACHE_ASYNC_REGISTRATION=y -CONFIG_BLK_DEV_DM_BUILTIN=y -CONFIG_BLK_DEV_DM=m -CONFIG_DM_DEBUG=y -CONFIG_DM_BUFIO=m -CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING=y -# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set -CONFIG_DM_BIO_PRISON=m -CONFIG_DM_PERSISTENT_DATA=m -CONFIG_DM_UNSTRIPED=m -CONFIG_DM_CRYPT=m -CONFIG_DM_SNAPSHOT=m -CONFIG_DM_THIN_PROVISIONING=m -CONFIG_DM_CACHE=m -CONFIG_DM_CACHE_SMQ=m -CONFIG_DM_WRITECACHE=m -CONFIG_DM_EBS=m -CONFIG_DM_ERA=m -CONFIG_DM_CLONE=m -CONFIG_DM_MIRROR=m -CONFIG_DM_LOG_USERSPACE=m -CONFIG_DM_RAID=m -CONFIG_DM_ZERO=m -CONFIG_DM_MULTIPATH=m -CONFIG_DM_MULTIPATH_QL=m -CONFIG_DM_MULTIPATH_ST=m -CONFIG_DM_MULTIPATH_HST=m -CONFIG_DM_MULTIPATH_IOA=m -CONFIG_DM_DELAY=m -CONFIG_DM_DUST=m -CONFIG_DM_UEVENT=y -CONFIG_DM_FLAKEY=m -CONFIG_DM_VERITY=m -CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG=y -CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING=y -CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG_PLATFORM_KEYRING=y -CONFIG_DM_VERITY_FEC=y -CONFIG_DM_SWITCH=m -CONFIG_DM_LOG_WRITES=m -CONFIG_DM_INTEGRITY=m -CONFIG_DM_ZONED=m -CONFIG_DM_AUDIT=y -CONFIG_DM_VDO=m -CONFIG_DM_PCACHE=m -CONFIG_TARGET_CORE=m -CONFIG_TCM_IBLOCK=m -CONFIG_TCM_FILEIO=m -CONFIG_TCM_PSCSI=m -CONFIG_TCM_USER2=m -CONFIG_LOOPBACK_TARGET=m -CONFIG_TCM_FC=m -CONFIG_ISCSI_TARGET=m -CONFIG_ISCSI_TARGET_CXGB4=m -CONFIG_SBP_TARGET=m -CONFIG_REMOTE_TARGET=m -CONFIG_FUSION=y -CONFIG_FUSION_SPI=m -CONFIG_FUSION_FC=m -CONFIG_FUSION_SAS=m -CONFIG_FUSION_MAX_SGE=128 -CONFIG_FUSION_CTL=m -CONFIG_FUSION_LAN=m -# CONFIG_FUSION_LOGGING is not set - -# -# IEEE 1394 (FireWire) support -# -CONFIG_FIREWIRE=m -CONFIG_FIREWIRE_OHCI=m -CONFIG_FIREWIRE_SBP2=m -CONFIG_FIREWIRE_NET=m -CONFIG_FIREWIRE_NOSY=m -# end of IEEE 1394 (FireWire) support - -CONFIG_MACINTOSH_DRIVERS=y -CONFIG_MAC_EMUMOUSEBTN=m -CONFIG_NETDEVICES=y -CONFIG_MII=m -CONFIG_NET_CORE=y -CONFIG_BONDING=m -CONFIG_DUMMY=m -CONFIG_WIREGUARD=m -# CONFIG_WIREGUARD_DEBUG is not set -CONFIG_OVPN=m -CONFIG_EQUALIZER=m -CONFIG_NET_FC=y -CONFIG_IFB=m -CONFIG_NET_TEAM=m -CONFIG_NET_TEAM_MODE_BROADCAST=m -CONFIG_NET_TEAM_MODE_ROUNDROBIN=m -CONFIG_NET_TEAM_MODE_RANDOM=m -CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m -CONFIG_NET_TEAM_MODE_LOADBALANCE=m -CONFIG_MACVLAN=m -CONFIG_MACVTAP=m -CONFIG_IPVLAN_L3S=y -CONFIG_IPVLAN=m -CONFIG_IPVTAP=m -CONFIG_VXLAN=m -CONFIG_GENEVE=m -CONFIG_BAREUDP=m -CONFIG_GTP=m -CONFIG_PFCP=m -CONFIG_AMT=m -CONFIG_MACSEC=m -CONFIG_NETCONSOLE=m -CONFIG_NETCONSOLE_DYNAMIC=y -# CONFIG_NETCONSOLE_EXTENDED_LOG is not set -CONFIG_NETPOLL=y -CONFIG_NET_POLL_CONTROLLER=y -CONFIG_NTB_NETDEV=m -CONFIG_TUN=m -CONFIG_TAP=m -# CONFIG_TUN_VNET_CROSS_LE is not set -CONFIG_VETH=m -CONFIG_VIRTIO_NET=m -CONFIG_NLMON=m -CONFIG_NETKIT=y -CONFIG_NET_VRF=m -CONFIG_VSOCKMON=m -CONFIG_MHI_NET=m -CONFIG_SUNGEM_PHY=m -# CONFIG_ARCNET is not set -CONFIG_ATM_DRIVERS=y -CONFIG_ATM_SOLOS=m - -# -# Distributed Switch Architecture drivers -# -CONFIG_B53=m -CONFIG_B53_SPI_DRIVER=m -CONFIG_B53_MDIO_DRIVER=m -CONFIG_B53_MMAP_DRIVER=m -CONFIG_B53_SRAB_DRIVER=m -CONFIG_B53_SERDES=m -CONFIG_NET_DSA_BCM_SF2=m -CONFIG_NET_DSA_LOOP=m -CONFIG_NET_DSA_HIRSCHMANN_HELLCREEK=m -CONFIG_NET_DSA_LANTIQ_COMMON=m -# CONFIG_NET_DSA_LANTIQ_GSWIP is not set -CONFIG_NET_DSA_MXL_GSW1XX=m -CONFIG_NET_DSA_MT7530=m -CONFIG_NET_DSA_MT7530_MDIO=m -CONFIG_NET_DSA_MT7530_MMIO=m -CONFIG_NET_DSA_MV88E6060=m -CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON=m -CONFIG_NET_DSA_MICROCHIP_KSZ9477_I2C=m -CONFIG_NET_DSA_MICROCHIP_KSZ_SPI=m -CONFIG_NET_DSA_MICROCHIP_KSZ_PTP=y -CONFIG_NET_DSA_MICROCHIP_KSZ8863_SMI=m -CONFIG_NET_DSA_MV88E6XXX=m -CONFIG_NET_DSA_MV88E6XXX_PTP=y -CONFIG_NET_DSA_MV88E6XXX_LEDS=y -CONFIG_NET_DSA_MXL862=m -CONFIG_NET_DSA_MSCC_FELIX_DSA_LIB=m -CONFIG_NET_DSA_MSCC_OCELOT_EXT=m -CONFIG_NET_DSA_MSCC_SEVILLE=m -CONFIG_NET_DSA_AR9331=m -CONFIG_NET_DSA_QCA8K=m -CONFIG_NET_DSA_QCA8K_LEDS_SUPPORT=y -CONFIG_NET_DSA_SJA1105=m -CONFIG_NET_DSA_SJA1105_PTP=y -CONFIG_NET_DSA_SJA1105_TAS=y -CONFIG_NET_DSA_SJA1105_VL=y -CONFIG_NET_DSA_XRS700X=m -CONFIG_NET_DSA_XRS700X_I2C=m -CONFIG_NET_DSA_XRS700X_MDIO=m -CONFIG_NET_DSA_REALTEK=m -CONFIG_NET_DSA_KS8995=m -CONFIG_NET_DSA_SMSC_LAN9303=m -CONFIG_NET_DSA_SMSC_LAN9303_I2C=m -CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m -CONFIG_NET_DSA_VITESSE_VSC73XX=m -CONFIG_NET_DSA_VITESSE_VSC73XX_SPI=m -CONFIG_NET_DSA_VITESSE_VSC73XX_PLATFORM=m -CONFIG_NET_DSA_YT921X=m -# end of Distributed Switch Architecture drivers - -CONFIG_ETHERNET=y -CONFIG_MDIO=m -CONFIG_NET_VENDOR_3COM=y -CONFIG_VORTEX=m -CONFIG_TYPHOON=m -CONFIG_NET_VENDOR_ADAPTEC=y -CONFIG_ADAPTEC_STARFIRE=m -CONFIG_NET_VENDOR_AGERE=y -CONFIG_ET131X=m -CONFIG_NET_VENDOR_ALACRITECH=y -CONFIG_SLICOSS=m -CONFIG_ALTERA_TSE=m -CONFIG_NET_VENDOR_AMAZON=y -CONFIG_ENA_ETHERNET=m -CONFIG_NET_VENDOR_AMD=y -CONFIG_AMD8111_ETH=m -CONFIG_PCNET32=m -CONFIG_AMD_XGBE=m -CONFIG_AMD_XGBE_DCB=y -CONFIG_AMD_XGBE_HAVE_ECC=y -CONFIG_PDS_CORE=m -CONFIG_NET_VENDOR_AQUANTIA=y -CONFIG_AQTION=m -CONFIG_NET_VENDOR_ARC=y -CONFIG_NET_VENDOR_ASIX=y -CONFIG_SPI_AX88796C=m -CONFIG_SPI_AX88796C_COMPRESSION=y -CONFIG_NET_VENDOR_ATHEROS=y -CONFIG_ATL2=m -CONFIG_ATL1=m -CONFIG_ATL1E=m -CONFIG_ATL1C=m -CONFIG_ALX=m -CONFIG_CX_ECAT=m -CONFIG_NET_VENDOR_BROADCOM=y -CONFIG_B44=m -CONFIG_B44_PCI_AUTOSELECT=y -CONFIG_B44_PCICORE_AUTOSELECT=y -CONFIG_B44_PCI=y -CONFIG_BCMGENET=m -CONFIG_BNX2=m -CONFIG_CNIC=m -CONFIG_TIGON3=m -CONFIG_TIGON3_HWMON=y -CONFIG_BNX2X=m -CONFIG_BNX2X_SRIOV=y -CONFIG_SYSTEMPORT=m -CONFIG_BNXT=m -CONFIG_BNXT_SRIOV=y -CONFIG_BNXT_FLOWER_OFFLOAD=y -CONFIG_BNXT_DCB=y -CONFIG_BNXT_HWMON=y -CONFIG_BNGE=m -CONFIG_NET_VENDOR_CADENCE=y -CONFIG_MACB=m -CONFIG_MACB_USE_HWSTAMP=y -CONFIG_MACB_PCI=m -CONFIG_NET_VENDOR_CAVIUM=y -CONFIG_THUNDER_NIC_PF=m -CONFIG_THUNDER_NIC_VF=m -CONFIG_THUNDER_NIC_BGX=m -CONFIG_THUNDER_NIC_RGX=m -CONFIG_CAVIUM_PTP=m -CONFIG_LIQUIDIO_CORE=m -CONFIG_LIQUIDIO=m -CONFIG_LIQUIDIO_VF=m -CONFIG_NET_VENDOR_CHELSIO=y -CONFIG_CHELSIO_T1=m -CONFIG_CHELSIO_T1_1G=y -CONFIG_CHELSIO_T3=m -CONFIG_CHELSIO_T4=m -CONFIG_CHELSIO_T4_DCB=y -CONFIG_CHELSIO_T4_FCOE=y -CONFIG_CHELSIO_T4VF=m -CONFIG_CHELSIO_LIB=m -CONFIG_CHELSIO_INLINE_CRYPTO=y -CONFIG_CHELSIO_IPSEC_INLINE=m -CONFIG_CHELSIO_TLS_DEVICE=m -CONFIG_NET_VENDOR_CISCO=y -CONFIG_ENIC=m -CONFIG_NET_VENDOR_CORTINA=y -CONFIG_NET_VENDOR_DAVICOM=y -CONFIG_DM9051=m -CONFIG_NET_VENDOR_DEC=y -CONFIG_NET_TULIP=y -CONFIG_DE2104X=m -CONFIG_DE2104X_DSL=0 -CONFIG_TULIP=m -CONFIG_TULIP_MWI=y -CONFIG_TULIP_MMIO=y -CONFIG_TULIP_NAPI=y -CONFIG_TULIP_NAPI_HW_MITIGATION=y -CONFIG_WINBOND_840=m -CONFIG_DM9102=m -CONFIG_ULI526X=m -CONFIG_PCMCIA_XIRCOM=m -CONFIG_NET_VENDOR_DLINK=y -CONFIG_DL2K=m -CONFIG_SUNDANCE=m -# CONFIG_SUNDANCE_MMIO is not set -CONFIG_NET_VENDOR_EMULEX=y -CONFIG_BE2NET=m -CONFIG_BE2NET_HWMON=y -CONFIG_BE2NET_BE2=y -CONFIG_BE2NET_BE3=y -CONFIG_BE2NET_LANCER=y -CONFIG_BE2NET_SKYHAWK=y -CONFIG_NET_VENDOR_ENGLEDER=y -CONFIG_TSNEP=m -# CONFIG_TSNEP_SELFTESTS is not set -CONFIG_NET_VENDOR_EZCHIP=y -CONFIG_NET_VENDOR_FUNGIBLE=y -CONFIG_FUN_CORE=m -CONFIG_FUN_ETH=m -CONFIG_NET_VENDOR_GOOGLE=y -CONFIG_GVE=m -CONFIG_NET_VENDOR_HISILICON=y -CONFIG_HIBMCGE=m -CONFIG_NET_VENDOR_HUAWEI=y -CONFIG_HINIC=m -CONFIG_HINIC3=m -CONFIG_NET_VENDOR_I825XX=y -CONFIG_NET_VENDOR_INTEL=y -CONFIG_LIBETH=m -CONFIG_LIBETH_XDP=m -CONFIG_LIBIE=m -CONFIG_LIBIE_ADMINQ=m -CONFIG_LIBIE_FWLOG=m -CONFIG_E100=m -CONFIG_E1000=m -CONFIG_E1000E=m -CONFIG_E1000E_HWTS=y -CONFIG_IGB=m -CONFIG_IGB_HWMON=y -CONFIG_IGB_DCA=y -CONFIG_IGBVF=m -CONFIG_IXGBE=m -CONFIG_IXGBE_HWMON=y -CONFIG_IXGBE_DCA=y -CONFIG_IXGBE_DCB=y -# CONFIG_IXGBE_IPSEC is not set -CONFIG_IXGBEVF=m -CONFIG_IXGBEVF_IPSEC=y -CONFIG_I40E=m -CONFIG_I40E_DCB=y -CONFIG_IAVF=m -CONFIG_I40EVF=m -CONFIG_ICE=m -CONFIG_ICE_HWMON=y -CONFIG_ICE_SWITCHDEV=y -CONFIG_ICE_HWTS=y -CONFIG_FM10K=m -CONFIG_IGC=m -CONFIG_IGC_LEDS=y -CONFIG_IDPF=m -# CONFIG_IDPF_SINGLEQ is not set -CONFIG_JME=m -CONFIG_NET_VENDOR_ADI=y -CONFIG_ADIN1110=m -CONFIG_NET_VENDOR_LITEX=y -CONFIG_NET_VENDOR_MARVELL=y -CONFIG_MVMDIO=m -CONFIG_SKGE=m -# CONFIG_SKGE_DEBUG is not set -CONFIG_SKGE_GENESIS=y -CONFIG_SKY2=m -# CONFIG_SKY2_DEBUG is not set -CONFIG_OCTEON_EP=m -CONFIG_OCTEON_EP_VF=m -CONFIG_PRESTERA=m -CONFIG_PRESTERA_PCI=m -CONFIG_NET_VENDOR_MELLANOX=y -CONFIG_MLX4_EN=m -CONFIG_MLX4_EN_DCB=y -CONFIG_MLX4_CORE=m -CONFIG_MLX4_DEBUG=y -CONFIG_MLX4_CORE_GEN2=y -CONFIG_MLX5_CORE=m -CONFIG_MLX5_FPGA=y -CONFIG_MLX5_CORE_EN=y -CONFIG_MLX5_EN_ARFS=y -CONFIG_MLX5_EN_RXNFC=y -CONFIG_MLX5_MPFS=y -CONFIG_MLX5_ESWITCH=y -CONFIG_MLX5_BRIDGE=y -CONFIG_MLX5_CLS_ACT=y -CONFIG_MLX5_TC_CT=y -CONFIG_MLX5_TC_SAMPLE=y -CONFIG_MLX5_CORE_EN_DCB=y -CONFIG_MLX5_CORE_IPOIB=y -CONFIG_MLX5_MACSEC=y -CONFIG_MLX5_EN_IPSEC=y -CONFIG_MLX5_EN_TLS=y -CONFIG_MLX5_SW_STEERING=y -CONFIG_MLX5_HW_STEERING=y -CONFIG_MLX5_SF=y -CONFIG_MLX5_SF_MANAGER=y -CONFIG_MLX5_DPLL=m -CONFIG_MLX5_EN_PSP=y -CONFIG_MLXSW_CORE=m -CONFIG_MLXSW_CORE_HWMON=y -CONFIG_MLXSW_CORE_THERMAL=y -CONFIG_MLXSW_PCI=m -CONFIG_MLXSW_I2C=m -CONFIG_MLXSW_SPECTRUM=m -CONFIG_MLXSW_SPECTRUM_DCB=y -CONFIG_MLXSW_MINIMAL=m -CONFIG_MLXFW=m -CONFIG_NET_VENDOR_META=y -CONFIG_FBNIC=m -CONFIG_NET_VENDOR_MICREL=y -CONFIG_KS8842=m -CONFIG_KS8851=m -CONFIG_KS8851_MLL=m -CONFIG_KSZ884X_PCI=m -CONFIG_NET_VENDOR_MICROCHIP=y -CONFIG_ENC28J60=m -# CONFIG_ENC28J60_WRITEVERIFY is not set -CONFIG_ENCX24J600=m -CONFIG_LAN743X=m -CONFIG_LAN865X=m -CONFIG_VCAP=y -CONFIG_NET_VENDOR_MICROSEMI=y -CONFIG_MSCC_OCELOT_SWITCH_LIB=m -CONFIG_NET_VENDOR_MICROSOFT=y -CONFIG_MICROSOFT_MANA=m -CONFIG_NET_VENDOR_MUCSE=y -CONFIG_MGBE=m -CONFIG_NET_VENDOR_MYRI=y -CONFIG_MYRI10GE=m -CONFIG_MYRI10GE_DCA=y -CONFIG_FEALNX=m -CONFIG_NET_VENDOR_NI=y -CONFIG_NI_XGE_MANAGEMENT_ENET=m -CONFIG_NET_VENDOR_NATSEMI=y -CONFIG_NATSEMI=m -CONFIG_NS83820=m -CONFIG_NET_VENDOR_NETRONOME=y -CONFIG_NFP=m -CONFIG_NFP_APP_FLOWER=y -CONFIG_NFP_APP_ABM_NIC=y -CONFIG_NFP_NET_IPSEC=y -# CONFIG_NFP_DEBUG is not set -CONFIG_NET_VENDOR_8390=y -CONFIG_NE2K_PCI=m -CONFIG_PCMCIA_PCNET=m -CONFIG_NET_VENDOR_NVIDIA=y -CONFIG_FORCEDETH=m -CONFIG_NET_VENDOR_OKI=y -CONFIG_ETHOC=m -CONFIG_OA_TC6=m -CONFIG_NET_VENDOR_PENSANDO=y -CONFIG_IONIC=m -CONFIG_NET_VENDOR_QLOGIC=y -CONFIG_QLA3XXX=m -CONFIG_QLCNIC=m -CONFIG_QLCNIC_SRIOV=y -CONFIG_QLCNIC_DCB=y -CONFIG_QLCNIC_HWMON=y -CONFIG_NETXEN_NIC=m -CONFIG_QED=m -CONFIG_QED_LL2=y -CONFIG_QED_SRIOV=y -CONFIG_QEDE=m -CONFIG_QED_RDMA=y -CONFIG_QED_ISCSI=y -CONFIG_QED_FCOE=y -CONFIG_QED_OOO=y -CONFIG_NET_VENDOR_BROCADE=y -CONFIG_BNA=m -CONFIG_NET_VENDOR_QUALCOMM=y -CONFIG_QCOM_EMAC=m -CONFIG_RMNET=m -CONFIG_NET_VENDOR_RDC=y -CONFIG_R6040=m -CONFIG_NET_VENDOR_REALTEK=y -CONFIG_8139CP=m -CONFIG_8139TOO=m -# CONFIG_8139TOO_PIO is not set -CONFIG_8139TOO_TUNE_TWISTER=y -CONFIG_8139TOO_8129=y -# CONFIG_8139_OLD_RX_RESET is not set -CONFIG_R8169=m -CONFIG_R8169_LEDS=y -CONFIG_RTASE=m -CONFIG_NET_VENDOR_RENESAS=y -CONFIG_NET_VENDOR_ROCKER=y -CONFIG_ROCKER=m -CONFIG_NET_VENDOR_SAMSUNG=y -CONFIG_SXGBE_ETH=m -CONFIG_NET_VENDOR_SEEQ=y -CONFIG_NET_VENDOR_SILAN=y -CONFIG_SC92031=m -CONFIG_NET_VENDOR_SIS=y -CONFIG_SIS900=m -CONFIG_SIS190=m -CONFIG_NET_VENDOR_SOLARFLARE=y -CONFIG_SFC=m -CONFIG_SFC_MTD=y -CONFIG_SFC_MCDI_MON=y -CONFIG_SFC_SRIOV=y -CONFIG_SFC_MCDI_LOGGING=y -CONFIG_SFC_FALCON=m -CONFIG_SFC_FALCON_MTD=y -CONFIG_SFC_SIENA=m -CONFIG_SFC_SIENA_MTD=y -CONFIG_SFC_SIENA_MCDI_MON=y -CONFIG_SFC_SIENA_SRIOV=y -CONFIG_SFC_SIENA_MCDI_LOGGING=y -CONFIG_NET_VENDOR_SMSC=y -CONFIG_EPIC100=m -CONFIG_SMSC911X=m -CONFIG_SMSC9420=m -CONFIG_NET_VENDOR_SOCIONEXT=y -CONFIG_NET_VENDOR_STMICRO=y -CONFIG_STMMAC_ETH=m -# CONFIG_STMMAC_SELFTESTS is not set -CONFIG_STMMAC_PLATFORM=m -CONFIG_DWMAC_GENERIC=m -CONFIG_STMMAC_LIBPCI=m -CONFIG_DWMAC_INTEL=m -CONFIG_DWMAC_MOTORCOMM=m -CONFIG_STMMAC_PCI=m -CONFIG_NET_VENDOR_SUN=y -CONFIG_HAPPYMEAL=m -CONFIG_SUNGEM=m -CONFIG_CASSINI=m -CONFIG_NIU=m -CONFIG_NET_VENDOR_SYNOPSYS=y -CONFIG_DWC_XLGMAC=m -CONFIG_DWC_XLGMAC_PCI=m -CONFIG_NET_VENDOR_TEHUTI=y -CONFIG_TEHUTI=m -CONFIG_TEHUTI_TN40=m -CONFIG_NET_VENDOR_TI=y -# CONFIG_TI_CPSW_PHY_SEL is not set -CONFIG_TLAN=m -CONFIG_NET_VENDOR_VERTEXCOM=y -CONFIG_MSE102X=m -CONFIG_NET_VENDOR_VIA=y -CONFIG_VIA_RHINE=m -CONFIG_VIA_RHINE_MMIO=y -CONFIG_VIA_VELOCITY=m -CONFIG_NET_VENDOR_WANGXUN=y -CONFIG_LIBWX=m -CONFIG_NGBE=m -CONFIG_TXGBE=m -CONFIG_TXGBEVF=m -CONFIG_NGBEVF=m -CONFIG_NET_VENDOR_WIZNET=y -CONFIG_WIZNET_W5100=m -CONFIG_WIZNET_W5300=m -# CONFIG_WIZNET_BUS_DIRECT is not set -# CONFIG_WIZNET_BUS_INDIRECT is not set -CONFIG_WIZNET_BUS_ANY=y -CONFIG_WIZNET_W5100_SPI=m -CONFIG_NET_VENDOR_XILINX=y -CONFIG_XILINX_EMACLITE=m -CONFIG_XILINX_AXI_EMAC=m -CONFIG_XILINX_LL_TEMAC=m -CONFIG_NET_VENDOR_XIRCOM=y -CONFIG_PCMCIA_XIRC2PS=m -CONFIG_FDDI=m -CONFIG_DEFXX=m -CONFIG_SKFP=m -CONFIG_PHYLINK=m -CONFIG_PHYLIB=m -CONFIG_SWPHY=y -CONFIG_PHY_PACKAGE=m -CONFIG_LED_TRIGGER_PHY=y -CONFIG_OPEN_ALLIANCE_HELPERS=y -CONFIG_FIXED_PHY=m -CONFIG_SFP=m - -# -# MII PHY device drivers -# -CONFIG_AS21XXX_PHY=m -CONFIG_AIR_EN8811H_PHY=m -CONFIG_AMD_PHY=m -CONFIG_ADIN_PHY=m -CONFIG_ADIN1100_PHY=m -CONFIG_AQUANTIA_PHY=m -CONFIG_AX88796B_PHY=m -CONFIG_BROADCOM_PHY=m -CONFIG_BCM54140_PHY=m -CONFIG_BCM7XXX_PHY=m -CONFIG_BCM84881_PHY=m -CONFIG_BCM87XX_PHY=m -CONFIG_BCM_NET_PHYLIB=m -CONFIG_BCM_NET_PHYPTP=m -CONFIG_CICADA_PHY=m -CONFIG_CORTINA_PHY=m -CONFIG_DAVICOM_PHY=m -CONFIG_ICPLUS_PHY=m -CONFIG_LXT_PHY=m -CONFIG_INTEL_XWAY_PHY=m -CONFIG_LSI_ET1011C_PHY=m -CONFIG_MARVELL_PHY=m -CONFIG_MARVELL_10G_PHY=m -CONFIG_MARVELL_88Q2XXX_PHY=m -CONFIG_MARVELL_88X2222_PHY=m -CONFIG_MAXLINEAR_GPHY=m -CONFIG_MAXLINEAR_86110_PHY=m -CONFIG_MEDIATEK_GE_PHY=m -# CONFIG_MEDIATEK_GE_SOC_PHY is not set -CONFIG_MTK_NET_PHYLIB=m -CONFIG_MICREL_PHY=m -CONFIG_MICROCHIP_T1S_PHY=m -CONFIG_MICROCHIP_PHY=m -CONFIG_MICROCHIP_T1_PHY=m -CONFIG_MICROCHIP_PHY_RDS_PTP=m -CONFIG_MICROSEMI_PHY=m -CONFIG_MOTORCOMM_PHY=m -CONFIG_NATIONAL_PHY=m -CONFIG_NXP_CBTX_PHY=m -CONFIG_NXP_C45_TJA11XX_PHY=m -CONFIG_NXP_TJA11XX_PHY=m -CONFIG_NCN26000_PHY=m -CONFIG_QCOM_NET_PHYLIB=m -CONFIG_AT803X_PHY=m -CONFIG_QCA83XX_PHY=m -CONFIG_QCA808X_PHY=m -CONFIG_QSEMI_PHY=m -CONFIG_REALTEK_PHY=m -CONFIG_REALTEK_PHY_HWMON=y -CONFIG_RENESAS_PHY=m -# CONFIG_ROCKCHIP_PHY is not set -CONFIG_SMSC_PHY=m -CONFIG_STE10XP=m -CONFIG_TERANETICS_PHY=m -CONFIG_DP83822_PHY=m -CONFIG_DP83TC811_PHY=m -CONFIG_DP83848_PHY=m -CONFIG_DP83867_PHY=m -CONFIG_DP83869_PHY=m -CONFIG_DP83TD510_PHY=m -CONFIG_DP83TG720_PHY=m -CONFIG_VITESSE_PHY=m -CONFIG_XILINX_GMII2RGMII=m -CONFIG_PSE_CONTROLLER=y -CONFIG_PSE_REGULATOR=m -CONFIG_PSE_PD692X0=m -CONFIG_PSE_SI3474=m -CONFIG_PSE_TPS23881=m -CONFIG_CAN_DEV=m -CONFIG_CAN_VCAN=m -CONFIG_CAN_VXCAN=m -CONFIG_CAN_NETLINK=y -CONFIG_CAN_CALC_BITTIMING=y -CONFIG_CAN_RX_OFFLOAD=y -CONFIG_CAN_CAN327=m -# CONFIG_CAN_DUMMY is not set -CONFIG_CAN_JANZ_ICAN3=m -CONFIG_CAN_KVASER_PCIEFD=m -CONFIG_CAN_SLCAN=m -CONFIG_CAN_C_CAN=m -CONFIG_CAN_C_CAN_PLATFORM=m -CONFIG_CAN_C_CAN_PCI=m -CONFIG_CAN_CC770=m -CONFIG_CAN_CC770_ISA=m -CONFIG_CAN_CC770_PLATFORM=m -CONFIG_CAN_CTUCANFD=m -CONFIG_CAN_CTUCANFD_PCI=m -CONFIG_CAN_ESD_402_PCI=m -CONFIG_CAN_IFI_CANFD=m -CONFIG_CAN_M_CAN=m -CONFIG_CAN_M_CAN_PCI=m -CONFIG_CAN_M_CAN_PLATFORM=m -CONFIG_CAN_M_CAN_TCAN4X5X=m -CONFIG_CAN_PEAK_PCIEFD=m -CONFIG_CAN_SJA1000=m -CONFIG_CAN_EMS_PCI=m -# CONFIG_CAN_EMS_PCMCIA is not set -CONFIG_CAN_F81601=m -CONFIG_CAN_KVASER_PCI=m -CONFIG_CAN_PEAK_PCI=m -CONFIG_CAN_PEAK_PCIEC=y -CONFIG_CAN_PEAK_PCMCIA=m -CONFIG_CAN_PLX_PCI=m -CONFIG_CAN_SJA1000_ISA=m -CONFIG_CAN_SJA1000_PLATFORM=m -CONFIG_CAN_SOFTING=m -CONFIG_CAN_SOFTING_CS=m - -# -# CAN SPI interfaces -# -CONFIG_CAN_HI311X=m -CONFIG_CAN_MCP251X=m -CONFIG_CAN_MCP251XFD=m -# CONFIG_CAN_MCP251XFD_SANITY is not set -# end of CAN SPI interfaces - -# -# CAN USB interfaces -# -CONFIG_CAN_8DEV_USB=m -CONFIG_CAN_EMS_USB=m -CONFIG_CAN_ESD_USB=m -CONFIG_CAN_ETAS_ES58X=m -CONFIG_CAN_F81604=m -CONFIG_CAN_GS_USB=m -CONFIG_CAN_KVASER_USB=m -CONFIG_CAN_MCBA_USB=m -CONFIG_CAN_NCT6694=m -CONFIG_CAN_PEAK_USB=m -CONFIG_CAN_UCAN=m -# end of CAN USB interfaces - -# CONFIG_CAN_DEBUG_DEVICES is not set - -# -# MCTP Device Drivers -# -CONFIG_MCTP_SERIAL=m -CONFIG_MCTP_TRANSPORT_I2C=m -CONFIG_MCTP_TRANSPORT_USB=m -# end of MCTP Device Drivers - -CONFIG_FWNODE_MDIO=m -CONFIG_ACPI_MDIO=m -CONFIG_MDIO_BITBANG=m -CONFIG_MDIO_BCM_UNIMAC=m -CONFIG_MDIO_CAVIUM=m -CONFIG_MDIO_GPIO=m -CONFIG_MDIO_I2C=m -CONFIG_MDIO_MVUSB=m -CONFIG_MDIO_MSCC_MIIM=m -CONFIG_MDIO_REGMAP=m -CONFIG_MDIO_THUNDER=m - -# -# MDIO Multiplexers -# - -# -# PCS device drivers -# -CONFIG_PCS_XPCS=m -CONFIG_PCS_LYNX=m -CONFIG_PCS_MTK_LYNXI=m -# end of PCS device drivers - -CONFIG_PLIP=m -CONFIG_PPP=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_FILTER=y -CONFIG_PPP_MPPE=m -CONFIG_PPP_MULTILINK=y -CONFIG_PPPOATM=m -CONFIG_PPPOE=m -# CONFIG_PPPOE_HASH_BITS_1 is not set -# CONFIG_PPPOE_HASH_BITS_2 is not set -CONFIG_PPPOE_HASH_BITS_4=y -# CONFIG_PPPOE_HASH_BITS_8 is not set -CONFIG_PPPOE_HASH_BITS=4 -CONFIG_PPTP=m -CONFIG_PPPOL2TP=m -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_SLIP=m -CONFIG_SLHC=m -CONFIG_SLIP_COMPRESSED=y -CONFIG_SLIP_SMART=y -CONFIG_SLIP_MODE_SLIP6=y -CONFIG_USB_NET_DRIVERS=m -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8150=m -CONFIG_USB_RTL8152=m -CONFIG_USB_LAN78XX=m -CONFIG_USB_USBNET=m -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_AX88179_178A=m -CONFIG_USB_NET_CDCETHER=m -CONFIG_USB_NET_CDC_EEM=m -CONFIG_USB_NET_CDC_NCM=m -CONFIG_USB_NET_HUAWEI_CDC_NCM=m -CONFIG_USB_NET_CDC_MBIM=m -CONFIG_USB_NET_DM9601=m -CONFIG_USB_NET_SR9700=m -CONFIG_USB_NET_SR9800=m -CONFIG_USB_NET_SMSC75XX=m -CONFIG_USB_NET_SMSC95XX=m -CONFIG_USB_NET_GL620A=m -CONFIG_USB_NET_NET1080=m -CONFIG_USB_NET_PLUSB=m -CONFIG_USB_NET_MCS7830=m -CONFIG_USB_NET_RNDIS_HOST=m -CONFIG_USB_NET_CDC_SUBSET_ENABLE=m -CONFIG_USB_NET_CDC_SUBSET=m -CONFIG_USB_ALI_M5632=y -CONFIG_USB_AN2720=y -CONFIG_USB_BELKIN=y -CONFIG_USB_ARMLINUX=y -CONFIG_USB_EPSON2888=y -CONFIG_USB_KC2190=y -CONFIG_USB_NET_ZAURUS=m -CONFIG_USB_NET_CX82310_ETH=m -CONFIG_USB_NET_KALMIA=m -CONFIG_USB_NET_QMI_WWAN=m -CONFIG_USB_HSO=m -CONFIG_USB_NET_INT51X1=m -CONFIG_USB_CDC_PHONET=m -CONFIG_USB_IPHETH=m -CONFIG_USB_SIERRA_NET=m -CONFIG_USB_VL600=m -CONFIG_USB_NET_CH9200=m -CONFIG_USB_NET_AQC111=m -CONFIG_USB_RTL8153_ECM=m -CONFIG_WLAN=y -CONFIG_WLAN_VENDOR_ADMTEK=y -CONFIG_ADM8211=m -CONFIG_ATH_COMMON=m -CONFIG_WLAN_VENDOR_ATH=y -# CONFIG_ATH_DEBUG is not set -CONFIG_ATH5K=m -CONFIG_ATH5K_DEBUG=y -CONFIG_ATH5K_TRACER=y -CONFIG_ATH5K_PCI=y -CONFIG_ATH9K_HW=m -CONFIG_ATH9K_COMMON=m -CONFIG_ATH9K_COMMON_DEBUG=y -CONFIG_ATH9K_BTCOEX_SUPPORT=y -CONFIG_ATH9K=m -CONFIG_ATH9K_PCI=y -CONFIG_ATH9K_DEBUGFS=y -CONFIG_ATH9K_STATION_STATISTICS=y -CONFIG_ATH9K_DYNACK=y -CONFIG_ATH9K_WOW=y -CONFIG_ATH9K_RFKILL=y -CONFIG_ATH9K_CHANNEL_CONTEXT=y -CONFIG_ATH9K_PCOEM=y -CONFIG_ATH9K_PCI_NO_EEPROM=m -CONFIG_ATH9K_HTC=m -CONFIG_ATH9K_HTC_DEBUGFS=y -CONFIG_ATH9K_HWRNG=y -CONFIG_ATH9K_COMMON_SPECTRAL=y -CONFIG_CARL9170=m -CONFIG_CARL9170_LEDS=y -CONFIG_CARL9170_DEBUGFS=y -CONFIG_CARL9170_WPC=y -# CONFIG_CARL9170_HWRNG is not set -CONFIG_ATH6KL=m -CONFIG_ATH6KL_SDIO=m -CONFIG_ATH6KL_USB=m -CONFIG_ATH6KL_DEBUG=y -CONFIG_ATH6KL_TRACING=y -CONFIG_AR5523=m -CONFIG_WIL6210=m -CONFIG_WIL6210_ISR_COR=y -CONFIG_WIL6210_TRACING=y -CONFIG_WIL6210_DEBUGFS=y -CONFIG_ATH10K=m -CONFIG_ATH10K_CE=y -CONFIG_ATH10K_PCI=m -CONFIG_ATH10K_SDIO=m -CONFIG_ATH10K_USB=m -CONFIG_ATH10K_DEBUG=y -CONFIG_ATH10K_DEBUGFS=y -CONFIG_ATH10K_LEDS=y -CONFIG_ATH10K_SPECTRAL=y -CONFIG_ATH10K_TRACING=y -CONFIG_WCN36XX=m -CONFIG_WCN36XX_DEBUGFS=y -CONFIG_ATH11K=m -CONFIG_ATH11K_AHB=m -CONFIG_ATH11K_PCI=m -CONFIG_ATH11K_DEBUG=y -CONFIG_ATH11K_DEBUGFS=y -# CONFIG_ATH11K_TRACING is not set -CONFIG_ATH11K_SPECTRAL=y -CONFIG_ATH11K_CFR=y -CONFIG_ATH12K=m -CONFIG_ATH12K_AHB=y -CONFIG_ATH12K_DEBUG=y -CONFIG_ATH12K_DEBUGFS=y -CONFIG_ATH12K_TRACING=y -CONFIG_ATH12K_COREDUMP=y -CONFIG_WLAN_VENDOR_ATMEL=y -CONFIG_AT76C50X_USB=m -CONFIG_WLAN_VENDOR_BROADCOM=y -CONFIG_B43=m -CONFIG_B43_BCMA=y -CONFIG_B43_SSB=y -CONFIG_B43_BUSES_BCMA_AND_SSB=y -# CONFIG_B43_BUSES_BCMA is not set -# CONFIG_B43_BUSES_SSB is not set -CONFIG_B43_PCI_AUTOSELECT=y -CONFIG_B43_PCICORE_AUTOSELECT=y -CONFIG_B43_SDIO=y -CONFIG_B43_BCMA_PIO=y -CONFIG_B43_PIO=y -CONFIG_B43_PHY_G=y -CONFIG_B43_PHY_N=y -CONFIG_B43_PHY_LP=y -CONFIG_B43_PHY_HT=y -CONFIG_B43_LEDS=y -CONFIG_B43_HWRNG=y -# CONFIG_B43_DEBUG is not set -CONFIG_B43LEGACY=m -CONFIG_B43LEGACY_PCI_AUTOSELECT=y -CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y -CONFIG_B43LEGACY_LEDS=y -CONFIG_B43LEGACY_HWRNG=y -CONFIG_B43LEGACY_DEBUG=y -CONFIG_B43LEGACY_DMA=y -CONFIG_B43LEGACY_PIO=y -CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y -# CONFIG_B43LEGACY_DMA_MODE is not set -# CONFIG_B43LEGACY_PIO_MODE is not set -CONFIG_BRCMUTIL=m -CONFIG_BRCMSMAC=m -CONFIG_BRCMSMAC_LEDS=y -CONFIG_BRCMFMAC=m -CONFIG_BRCMFMAC_PROTO_BCDC=y -CONFIG_BRCMFMAC_PROTO_MSGBUF=y -CONFIG_BRCMFMAC_SDIO=y -CONFIG_BRCMFMAC_USB=y -CONFIG_BRCMFMAC_PCIE=y -CONFIG_BRCM_TRACING=y -CONFIG_BRCMDBG=y -CONFIG_WLAN_VENDOR_INTEL=y -CONFIG_IPW2100=m -CONFIG_IPW2100_MONITOR=y -# CONFIG_IPW2100_DEBUG is not set -CONFIG_IPW2200=m -CONFIG_IPW2200_MONITOR=y -CONFIG_IPW2200_RADIOTAP=y -CONFIG_IPW2200_PROMISCUOUS=y -CONFIG_IPW2200_QOS=y -# CONFIG_IPW2200_DEBUG is not set -CONFIG_LIBIPW=m -# CONFIG_LIBIPW_DEBUG is not set -CONFIG_IWLEGACY=m -CONFIG_IWL4965=m -CONFIG_IWL3945=m - -# -# iwl3945 / iwl4965 Debugging Options -# -CONFIG_IWLEGACY_DEBUG=y -CONFIG_IWLEGACY_DEBUGFS=y -# end of iwl3945 / iwl4965 Debugging Options - -CONFIG_IWLWIFI=m -CONFIG_IWLWIFI_LEDS=y -CONFIG_IWLDVM=m -CONFIG_IWLMVM=m -CONFIG_IWLMLD=m -CONFIG_IWLWIFI_OPMODE_MODULAR=y - -# -# Debugging Options -# -CONFIG_IWLWIFI_DEBUG=y -CONFIG_IWLWIFI_DEBUGFS=y -CONFIG_IWLWIFI_DEVICE_TRACING=y -# end of Debugging Options - -CONFIG_WLAN_VENDOR_INTERSIL=y -CONFIG_P54_COMMON=m -CONFIG_P54_USB=m -CONFIG_P54_PCI=m -CONFIG_P54_SPI=m -# CONFIG_P54_SPI_DEFAULT_EEPROM is not set -CONFIG_P54_LEDS=y -CONFIG_WLAN_VENDOR_MARVELL=y -CONFIG_LIBERTAS=m -CONFIG_LIBERTAS_USB=m -CONFIG_LIBERTAS_SDIO=m -CONFIG_LIBERTAS_SPI=m -# CONFIG_LIBERTAS_DEBUG is not set -CONFIG_LIBERTAS_MESH=y -CONFIG_LIBERTAS_THINFIRM=m -# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set -CONFIG_LIBERTAS_THINFIRM_USB=m -CONFIG_MWIFIEX=m -CONFIG_MWIFIEX_SDIO=m -CONFIG_MWIFIEX_PCIE=m -CONFIG_MWIFIEX_USB=m -CONFIG_MWL8K=m -CONFIG_WLAN_VENDOR_MEDIATEK=y -CONFIG_MT7601U=m -CONFIG_MT76_CORE=m -CONFIG_MT76_LEDS=y -CONFIG_MT76_USB=m -CONFIG_MT76_SDIO=m -CONFIG_MT76x02_LIB=m -CONFIG_MT76x02_USB=m -CONFIG_MT76_CONNAC_LIB=m -CONFIG_MT792x_LIB=m -CONFIG_MT792x_USB=m -CONFIG_MT76x0_COMMON=m -CONFIG_MT76x0U=m -CONFIG_MT76x0E=m -CONFIG_MT76x2_COMMON=m -CONFIG_MT76x2E=m -CONFIG_MT76x2U=m -CONFIG_MT7603E=m -CONFIG_MT7615_COMMON=m -CONFIG_MT7615E=m -CONFIG_MT7663_USB_SDIO_COMMON=m -CONFIG_MT7663U=m -CONFIG_MT7663S=m -CONFIG_MT7915E=m -CONFIG_MT7921_COMMON=m -CONFIG_MT7921E=m -CONFIG_MT7921S=m -CONFIG_MT7921U=m -CONFIG_MT7996E=m -CONFIG_MT7925_COMMON=m -CONFIG_MT7925E=m -CONFIG_MT7925U=m -CONFIG_WLAN_VENDOR_MICROCHIP=y -CONFIG_WILC1000=m -CONFIG_WILC1000_SDIO=m -CONFIG_WILC1000_SPI=m -# CONFIG_WILC1000_HW_OOB_INTR is not set -CONFIG_WLAN_VENDOR_PURELIFI=y -CONFIG_PLFXLC=m -CONFIG_WLAN_VENDOR_RALINK=y -CONFIG_RT2X00=m -CONFIG_RT2400PCI=m -CONFIG_RT2500PCI=m -CONFIG_RT61PCI=m -CONFIG_RT2800PCI=m -CONFIG_RT2800PCI_RT33XX=y -CONFIG_RT2800PCI_RT35XX=y -CONFIG_RT2800PCI_RT53XX=y -CONFIG_RT2800PCI_RT3290=y -CONFIG_RT2500USB=m -CONFIG_RT73USB=m -CONFIG_RT2800USB=m -CONFIG_RT2800USB_RT33XX=y -CONFIG_RT2800USB_RT35XX=y -CONFIG_RT2800USB_RT3573=y -CONFIG_RT2800USB_RT53XX=y -CONFIG_RT2800USB_RT55XX=y -CONFIG_RT2800USB_UNKNOWN=y -CONFIG_RT2800_LIB=m -CONFIG_RT2800_LIB_MMIO=m -CONFIG_RT2X00_LIB_MMIO=m -CONFIG_RT2X00_LIB_PCI=m -CONFIG_RT2X00_LIB_USB=m -CONFIG_RT2X00_LIB=m -CONFIG_RT2X00_LIB_FIRMWARE=y -CONFIG_RT2X00_LIB_CRYPTO=y -CONFIG_RT2X00_LIB_LEDS=y -CONFIG_RT2X00_LIB_DEBUGFS=y -# CONFIG_RT2X00_DEBUG is not set -CONFIG_WLAN_VENDOR_REALTEK=y -CONFIG_RTL8180=m -CONFIG_RTL8187=m -CONFIG_RTL8187_LEDS=y -CONFIG_RTL_CARDS=m -CONFIG_RTL8192CE=m -CONFIG_RTL8192SE=m -CONFIG_RTL8192DE=m -CONFIG_RTL8723AE=m -CONFIG_RTL8723BE=m -CONFIG_RTL8188EE=m -CONFIG_RTL8192EE=m -CONFIG_RTL8821AE=m -CONFIG_RTL8192CU=m -CONFIG_RTL8192DU=m -CONFIG_RTLWIFI=m -CONFIG_RTLWIFI_PCI=m -CONFIG_RTLWIFI_USB=m -CONFIG_RTLWIFI_DEBUG=y -CONFIG_RTL8192C_COMMON=m -CONFIG_RTL8192D_COMMON=m -CONFIG_RTL8723_COMMON=m -CONFIG_RTLBTCOEXIST=m -CONFIG_RTL8XXXU=m -CONFIG_RTL8XXXU_UNTESTED=y -CONFIG_RTW88=m -CONFIG_RTW88_CORE=m -CONFIG_RTW88_PCI=m -CONFIG_RTW88_SDIO=m -CONFIG_RTW88_USB=m -CONFIG_RTW88_8822B=m -CONFIG_RTW88_8822C=m -CONFIG_RTW88_8723X=m -CONFIG_RTW88_8703B=m -CONFIG_RTW88_8723D=m -CONFIG_RTW88_8821C=m -CONFIG_RTW88_88XXA=m -CONFIG_RTW88_8821A=m -CONFIG_RTW88_8812A=m -CONFIG_RTW88_8814A=m -CONFIG_RTW88_8822BE=m -CONFIG_RTW88_8822BS=m -CONFIG_RTW88_8822BU=m -CONFIG_RTW88_8822CE=m -CONFIG_RTW88_8822CS=m -CONFIG_RTW88_8822CU=m -CONFIG_RTW88_8723DE=m -CONFIG_RTW88_8723DS=m -CONFIG_RTW88_8723CS=m -CONFIG_RTW88_8723DU=m -CONFIG_RTW88_8821CE=m -CONFIG_RTW88_8821CS=m -CONFIG_RTW88_8821CU=m -CONFIG_RTW88_8821AU=m -CONFIG_RTW88_8812AU=m -CONFIG_RTW88_8814AE=m -CONFIG_RTW88_8814AU=m -CONFIG_RTW88_DEBUG=y -CONFIG_RTW88_DEBUGFS=y -CONFIG_RTW88_LEDS=y -CONFIG_RTW89=m -CONFIG_RTW89_CORE=m -CONFIG_RTW89_PCI=m -CONFIG_RTW89_USB=m -CONFIG_RTW89_8851B=m -CONFIG_RTW89_8852A=m -CONFIG_RTW89_8852B_COMMON=m -CONFIG_RTW89_8852B=m -CONFIG_RTW89_8852BT=m -CONFIG_RTW89_8852C=m -CONFIG_RTW89_8922A=m -CONFIG_RTW89_8851BE=m -CONFIG_RTW89_8851BU=m -CONFIG_RTW89_8852AE=m -CONFIG_RTW89_8852AU=m -CONFIG_RTW89_8852BE=m -CONFIG_RTW89_8852BU=m -CONFIG_RTW89_8852BTE=m -CONFIG_RTW89_8852CE=m -CONFIG_RTW89_8852CU=m -CONFIG_RTW89_8922AE=m -CONFIG_RTW89_DEBUG=y -CONFIG_RTW89_DEBUGMSG=y -CONFIG_RTW89_DEBUGFS=y -CONFIG_WLAN_VENDOR_RSI=y -CONFIG_RSI_91X=m -CONFIG_RSI_DEBUGFS=y -CONFIG_RSI_SDIO=m -CONFIG_RSI_USB=m -CONFIG_RSI_COEX=y -CONFIG_WLAN_VENDOR_SILABS=y -CONFIG_WFX=m -CONFIG_WLAN_VENDOR_ST=y -CONFIG_CW1200=m -CONFIG_CW1200_WLAN_SDIO=m -CONFIG_CW1200_WLAN_SPI=m -CONFIG_WLAN_VENDOR_TI=y -CONFIG_WL1251=m -CONFIG_WL1251_SPI=m -CONFIG_WL1251_SDIO=m -CONFIG_WL12XX=m -CONFIG_WL18XX=m -CONFIG_WLCORE=m -CONFIG_WLCORE_SDIO=m -CONFIG_WLAN_VENDOR_ZYDAS=y -CONFIG_ZD1211RW=m -# CONFIG_ZD1211RW_DEBUG is not set -CONFIG_WLAN_VENDOR_QUANTENNA=y -CONFIG_QTNFMAC=m -CONFIG_QTNFMAC_PCIE=m -CONFIG_MAC80211_HWSIM=m -CONFIG_VIRT_WIFI=m -# CONFIG_WAN is not set -CONFIG_IEEE802154_DRIVERS=m -CONFIG_IEEE802154_FAKELB=m -CONFIG_IEEE802154_AT86RF230=m -CONFIG_IEEE802154_MRF24J40=m -CONFIG_IEEE802154_CC2520=m -CONFIG_IEEE802154_ATUSB=m -CONFIG_IEEE802154_ADF7242=m -CONFIG_IEEE802154_CA8210=m -# CONFIG_IEEE802154_CA8210_DEBUGFS is not set -CONFIG_IEEE802154_MCR20A=m -CONFIG_IEEE802154_HWSIM=m - -# -# Wireless WAN -# -CONFIG_WWAN=m -CONFIG_WWAN_DEBUGFS=y -CONFIG_WWAN_HWSIM=m -CONFIG_MHI_WWAN_CTRL=m -CONFIG_MHI_WWAN_MBIM=m -CONFIG_RPMSG_WWAN_CTRL=m -CONFIG_IOSM=m -CONFIG_MTK_T7XX=m -# end of Wireless WAN - -CONFIG_XEN_NETDEV_FRONTEND=m -CONFIG_XEN_NETDEV_BACKEND=m -CONFIG_VMXNET3=m -CONFIG_FUJITSU_ES=m -CONFIG_USB4_NET=m -CONFIG_HYPERV_NET=m -CONFIG_NETDEVSIM=m -CONFIG_NET_FAILOVER=m - -# -# Input device support -# -CONFIG_INPUT=y -CONFIG_INPUT_LEDS=y -CONFIG_INPUT_FF_MEMLESS=m -CONFIG_INPUT_SPARSEKMAP=m -CONFIG_INPUT_MATRIXKMAP=m -CONFIG_INPUT_VIVALDIFMAP=y - -# -# Userland interfaces -# -CONFIG_INPUT_MOUSEDEV=m -CONFIG_INPUT_MOUSEDEV_PSAUX=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -CONFIG_INPUT_JOYDEV=m -CONFIG_INPUT_EVDEV=y - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -CONFIG_KEYBOARD_ADC=m -CONFIG_KEYBOARD_ADP5520=m -CONFIG_KEYBOARD_ADP5588=m -CONFIG_KEYBOARD_APPLESPI=m -CONFIG_KEYBOARD_ATKBD=y -CONFIG_KEYBOARD_QT1050=m -CONFIG_KEYBOARD_QT1070=m -CONFIG_KEYBOARD_QT2160=m -CONFIG_KEYBOARD_DLINK_DIR685=m -CONFIG_KEYBOARD_LKKBD=m -CONFIG_KEYBOARD_GPIO=m -CONFIG_KEYBOARD_GPIO_POLLED=m -CONFIG_KEYBOARD_TCA8418=m -CONFIG_KEYBOARD_MATRIX=m -CONFIG_KEYBOARD_CHARLIEPLEX=m -CONFIG_KEYBOARD_LM8323=m -CONFIG_KEYBOARD_LM8333=m -CONFIG_KEYBOARD_MAX7359=m -CONFIG_KEYBOARD_MAX7360=m -CONFIG_KEYBOARD_MPR121=m -CONFIG_KEYBOARD_NEWTON=m -CONFIG_KEYBOARD_OPENCORES=m -CONFIG_KEYBOARD_PINEPHONE=m -CONFIG_KEYBOARD_SAMSUNG=m -CONFIG_KEYBOARD_STOWAWAY=m -CONFIG_KEYBOARD_SUNKBD=m -CONFIG_KEYBOARD_IQS62X=m -CONFIG_KEYBOARD_TM2_TOUCHKEY=m -CONFIG_KEYBOARD_TWL4030=m -CONFIG_KEYBOARD_XTKBD=m -CONFIG_KEYBOARD_CROS_EC=m -CONFIG_KEYBOARD_MTK_PMIC=m -CONFIG_KEYBOARD_CYPRESS_SF=m -CONFIG_INPUT_MOUSE=y -CONFIG_MOUSE_PS2=m -CONFIG_MOUSE_PS2_ALPS=y -CONFIG_MOUSE_PS2_BYD=y -CONFIG_MOUSE_PS2_LOGIPS2PP=y -CONFIG_MOUSE_PS2_SYNAPTICS=y -CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y -CONFIG_MOUSE_PS2_CYPRESS=y -CONFIG_MOUSE_PS2_LIFEBOOK=y -CONFIG_MOUSE_PS2_TRACKPOINT=y -CONFIG_MOUSE_PS2_ELANTECH=y -CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y -CONFIG_MOUSE_PS2_SENTELIC=y -CONFIG_MOUSE_PS2_TOUCHKIT=y -CONFIG_MOUSE_PS2_FOCALTECH=y -CONFIG_MOUSE_PS2_VMMOUSE=y -CONFIG_MOUSE_PS2_SMBUS=y -CONFIG_MOUSE_SERIAL=m -CONFIG_MOUSE_APPLETOUCH=m -CONFIG_MOUSE_BCM5974=m -CONFIG_MOUSE_CYAPA=m -CONFIG_MOUSE_ELAN_I2C=m -CONFIG_MOUSE_ELAN_I2C_I2C=y -CONFIG_MOUSE_ELAN_I2C_SMBUS=y -CONFIG_MOUSE_VSXXXAA=m -CONFIG_MOUSE_GPIO=m -CONFIG_MOUSE_SYNAPTICS_I2C=m -CONFIG_MOUSE_SYNAPTICS_USB=m -CONFIG_INPUT_JOYSTICK=y -CONFIG_JOYSTICK_ANALOG=m -CONFIG_JOYSTICK_A3D=m -CONFIG_JOYSTICK_ADC=m -CONFIG_JOYSTICK_ADI=m -CONFIG_JOYSTICK_COBRA=m -CONFIG_JOYSTICK_GF2K=m -CONFIG_JOYSTICK_GRIP=m -CONFIG_JOYSTICK_GRIP_MP=m -CONFIG_JOYSTICK_GUILLEMOT=m -CONFIG_JOYSTICK_INTERACT=m -CONFIG_JOYSTICK_SIDEWINDER=m -CONFIG_JOYSTICK_TMDC=m -CONFIG_JOYSTICK_IFORCE=m -CONFIG_JOYSTICK_IFORCE_USB=m -CONFIG_JOYSTICK_IFORCE_232=m -CONFIG_JOYSTICK_WARRIOR=m -CONFIG_JOYSTICK_MAGELLAN=m -CONFIG_JOYSTICK_SPACEORB=m -CONFIG_JOYSTICK_SPACEBALL=m -CONFIG_JOYSTICK_STINGER=m -CONFIG_JOYSTICK_TWIDJOY=m -CONFIG_JOYSTICK_ZHENHUA=m -CONFIG_JOYSTICK_DB9=m -CONFIG_JOYSTICK_GAMECON=m -CONFIG_JOYSTICK_TURBOGRAFX=m -CONFIG_JOYSTICK_AS5011=m -CONFIG_JOYSTICK_JOYDUMP=m -CONFIG_JOYSTICK_XPAD=m -CONFIG_JOYSTICK_XPAD_FF=y -CONFIG_JOYSTICK_XPAD_LEDS=y -CONFIG_JOYSTICK_WALKERA0701=m -CONFIG_JOYSTICK_PSXPAD_SPI=m -CONFIG_JOYSTICK_PSXPAD_SPI_FF=y -CONFIG_JOYSTICK_PXRC=m -CONFIG_JOYSTICK_QWIIC=m -CONFIG_JOYSTICK_FSIA6B=m -CONFIG_JOYSTICK_SENSEHAT=m -CONFIG_JOYSTICK_SEESAW=m -CONFIG_INPUT_TABLET=y -CONFIG_TABLET_USB_ACECAD=m -CONFIG_TABLET_USB_AIPTEK=m -CONFIG_TABLET_USB_HANWANG=m -CONFIG_TABLET_USB_KBTAB=m -CONFIG_TABLET_USB_PEGASUS=m -CONFIG_TABLET_SERIAL_WACOM4=m -CONFIG_INPUT_TOUCHSCREEN=y -CONFIG_TOUCHSCREEN_88PM860X=m -CONFIG_TOUCHSCREEN_ADS7846=m -CONFIG_TOUCHSCREEN_AD7877=m -CONFIG_TOUCHSCREEN_AD7879=m -CONFIG_TOUCHSCREEN_AD7879_I2C=m -CONFIG_TOUCHSCREEN_AD7879_SPI=m -CONFIG_TOUCHSCREEN_ADC=m -CONFIG_TOUCHSCREEN_ATMEL_MXT=m -CONFIG_TOUCHSCREEN_ATMEL_MXT_T37=y -CONFIG_TOUCHSCREEN_AUO_PIXCIR=m -CONFIG_TOUCHSCREEN_BU21013=m -CONFIG_TOUCHSCREEN_BU21029=m -CONFIG_TOUCHSCREEN_CHIPONE_ICN8505=m -CONFIG_TOUCHSCREEN_CY8CTMA140=m -CONFIG_TOUCHSCREEN_CY8CTMG110=m -CONFIG_TOUCHSCREEN_CYTTSP_CORE=m -CONFIG_TOUCHSCREEN_CYTTSP_I2C=m -CONFIG_TOUCHSCREEN_CYTTSP_SPI=m -CONFIG_TOUCHSCREEN_CYTTSP5=m -CONFIG_TOUCHSCREEN_DA9034=m -CONFIG_TOUCHSCREEN_DA9052=m -CONFIG_TOUCHSCREEN_DYNAPRO=m -CONFIG_TOUCHSCREEN_HAMPSHIRE=m -CONFIG_TOUCHSCREEN_EETI=m -CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m -CONFIG_TOUCHSCREEN_EXC3000=m -CONFIG_TOUCHSCREEN_FUJITSU=m -CONFIG_TOUCHSCREEN_GOODIX=m -CONFIG_TOUCHSCREEN_GOODIX_BERLIN_CORE=m -CONFIG_TOUCHSCREEN_GOODIX_BERLIN_I2C=m -CONFIG_TOUCHSCREEN_GOODIX_BERLIN_SPI=m -CONFIG_TOUCHSCREEN_HIDEEP=m -CONFIG_TOUCHSCREEN_HIMAX_HX852X=m -CONFIG_TOUCHSCREEN_HYCON_HY46XX=m -CONFIG_TOUCHSCREEN_HYNITRON_CSTXXX=m -CONFIG_TOUCHSCREEN_HYNITRON_CST816X=m -CONFIG_TOUCHSCREEN_ILI210X=m -CONFIG_TOUCHSCREEN_ILITEK=m -CONFIG_TOUCHSCREEN_S6SY761=m -CONFIG_TOUCHSCREEN_GUNZE=m -CONFIG_TOUCHSCREEN_EKTF2127=m -CONFIG_TOUCHSCREEN_ELAN=m -CONFIG_TOUCHSCREEN_ELO=m -CONFIG_TOUCHSCREEN_WACOM_W8001=m -CONFIG_TOUCHSCREEN_WACOM_I2C=m -CONFIG_TOUCHSCREEN_MAX11801=m -CONFIG_TOUCHSCREEN_MMS114=m -CONFIG_TOUCHSCREEN_MELFAS_MIP4=m -CONFIG_TOUCHSCREEN_MSG2638=m -CONFIG_TOUCHSCREEN_MTOUCH=m -CONFIG_TOUCHSCREEN_NOVATEK_NVT_TS=m -CONFIG_TOUCHSCREEN_IMAGIS=m -CONFIG_TOUCHSCREEN_INEXIO=m -CONFIG_TOUCHSCREEN_PENMOUNT=m -CONFIG_TOUCHSCREEN_EDT_FT5X06=m -CONFIG_TOUCHSCREEN_TOUCHRIGHT=m -CONFIG_TOUCHSCREEN_TOUCHWIN=m -CONFIG_TOUCHSCREEN_PIXCIR=m -CONFIG_TOUCHSCREEN_WDT87XX_I2C=m -CONFIG_TOUCHSCREEN_WM831X=m -CONFIG_TOUCHSCREEN_WM97XX=m -CONFIG_TOUCHSCREEN_WM9705=y -CONFIG_TOUCHSCREEN_WM9712=y -CONFIG_TOUCHSCREEN_WM9713=y -CONFIG_TOUCHSCREEN_USB_COMPOSITE=m -CONFIG_TOUCHSCREEN_MC13783=m -CONFIG_TOUCHSCREEN_USB_EGALAX=y -CONFIG_TOUCHSCREEN_USB_PANJIT=y -CONFIG_TOUCHSCREEN_USB_3M=y -CONFIG_TOUCHSCREEN_USB_ITM=y -CONFIG_TOUCHSCREEN_USB_ETURBO=y -CONFIG_TOUCHSCREEN_USB_GUNZE=y -CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y -CONFIG_TOUCHSCREEN_USB_IRTOUCH=y -CONFIG_TOUCHSCREEN_USB_IDEALTEK=y -CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y -CONFIG_TOUCHSCREEN_USB_GOTOP=y -CONFIG_TOUCHSCREEN_USB_JASTEC=y -CONFIG_TOUCHSCREEN_USB_ELO=y -CONFIG_TOUCHSCREEN_USB_E2I=y -CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y -CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y -CONFIG_TOUCHSCREEN_USB_NEXIO=y -CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y -CONFIG_TOUCHSCREEN_TOUCHIT213=m -CONFIG_TOUCHSCREEN_TSC_SERIO=m -CONFIG_TOUCHSCREEN_TSC200X_CORE=m -CONFIG_TOUCHSCREEN_TSC2004=m -CONFIG_TOUCHSCREEN_TSC2005=m -CONFIG_TOUCHSCREEN_TSC2007=m -CONFIG_TOUCHSCREEN_TSC2007_IIO=y -CONFIG_TOUCHSCREEN_PCAP=m -CONFIG_TOUCHSCREEN_RM_TS=m -CONFIG_TOUCHSCREEN_SILEAD=m -CONFIG_TOUCHSCREEN_SIS_I2C=m -CONFIG_TOUCHSCREEN_ST1232=m -CONFIG_TOUCHSCREEN_STMFTS=m -CONFIG_TOUCHSCREEN_SUR40=m -CONFIG_TOUCHSCREEN_SURFACE3_SPI=m -CONFIG_TOUCHSCREEN_SX8654=m -CONFIG_TOUCHSCREEN_TPS6507X=m -CONFIG_TOUCHSCREEN_ZET6223=m -CONFIG_TOUCHSCREEN_ZFORCE=m -CONFIG_TOUCHSCREEN_COLIBRI_VF50=m -CONFIG_TOUCHSCREEN_ROHM_BU21023=m -CONFIG_TOUCHSCREEN_IQS5XX=m -CONFIG_TOUCHSCREEN_IQS7211=m -CONFIG_TOUCHSCREEN_ZINITIX=m -CONFIG_TOUCHSCREEN_HIMAX_HX83112B=m -CONFIG_INPUT_MISC=y -CONFIG_INPUT_88PM860X_ONKEY=m -CONFIG_INPUT_88PM80X_ONKEY=m -CONFIG_INPUT_AD714X=m -CONFIG_INPUT_AD714X_I2C=m -CONFIG_INPUT_AD714X_SPI=m -CONFIG_INPUT_ARIZONA_HAPTICS=m -CONFIG_INPUT_ATC260X_ONKEY=m -CONFIG_INPUT_AW86927=m -CONFIG_INPUT_BMA150=m -# CONFIG_INPUT_CS40L50_VIBRA is not set -CONFIG_INPUT_E3X0_BUTTON=m -CONFIG_INPUT_PCSPKR=m -CONFIG_INPUT_MAX7360_ROTARY=m -CONFIG_INPUT_MAX77693_HAPTIC=m -CONFIG_INPUT_MAX8925_ONKEY=m -CONFIG_INPUT_MAX8997_HAPTIC=m -CONFIG_INPUT_MC13783_PWRBUTTON=m -CONFIG_INPUT_MMA8450=m -CONFIG_INPUT_APANEL=m -CONFIG_INPUT_GPIO_BEEPER=m -CONFIG_INPUT_GPIO_DECODER=m -CONFIG_INPUT_GPIO_VIBRA=m -CONFIG_INPUT_ATLAS_BTNS=m -CONFIG_INPUT_ATI_REMOTE2=m -CONFIG_INPUT_KEYSPAN_REMOTE=m -CONFIG_INPUT_KXTJ9=m -CONFIG_INPUT_POWERMATE=m -CONFIG_INPUT_YEALINK=m -CONFIG_INPUT_CM109=m -CONFIG_INPUT_REGULATOR_HAPTIC=m -CONFIG_INPUT_RETU_PWRBUTTON=m -CONFIG_INPUT_TPS6594_PWRBUTTON=m -CONFIG_INPUT_AXP20X_PEK=m -CONFIG_INPUT_TWL4030_PWRBUTTON=m -CONFIG_INPUT_TWL4030_VIBRA=m -CONFIG_INPUT_TWL6040_VIBRA=m -CONFIG_INPUT_UINPUT=m -CONFIG_INPUT_PALMAS_PWRBUTTON=m -CONFIG_INPUT_PCF8574=m -CONFIG_INPUT_PWM_BEEPER=m -CONFIG_INPUT_PWM_VIBRA=m -CONFIG_INPUT_GPIO_ROTARY_ENCODER=m -CONFIG_INPUT_DA7280_HAPTICS=m -CONFIG_INPUT_DA9052_ONKEY=m -CONFIG_INPUT_DA9055_ONKEY=m -CONFIG_INPUT_DA9063_ONKEY=m -CONFIG_INPUT_WM831X_ON=m -CONFIG_INPUT_PCAP=m -CONFIG_INPUT_ADXL34X=m -CONFIG_INPUT_ADXL34X_I2C=m -CONFIG_INPUT_ADXL34X_SPI=m -CONFIG_INPUT_IBM_PANEL=m -CONFIG_INPUT_IMS_PCU=m -CONFIG_INPUT_IQS269A=m -CONFIG_INPUT_IQS626A=m -CONFIG_INPUT_IQS7222=m -CONFIG_INPUT_CMA3000=m -CONFIG_INPUT_CMA3000_I2C=m -CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m -CONFIG_INPUT_IDEAPAD_SLIDEBAR=m -CONFIG_INPUT_SOC_BUTTON_ARRAY=m -CONFIG_INPUT_DRV260X_HAPTICS=m -CONFIG_INPUT_DRV2665_HAPTICS=m -CONFIG_INPUT_DRV2667_HAPTICS=m -CONFIG_INPUT_QNAP_MCU=m -CONFIG_INPUT_RAVE_SP_PWRBUTTON=m -CONFIG_INPUT_RT5120_PWRKEY=m -CONFIG_RMI4_CORE=m -CONFIG_RMI4_I2C=m -CONFIG_RMI4_SPI=m -CONFIG_RMI4_SMB=m -CONFIG_RMI4_F03=y -CONFIG_RMI4_F03_SERIO=m -CONFIG_RMI4_2D_SENSOR=y -CONFIG_RMI4_F11=y -CONFIG_RMI4_F12=y -CONFIG_RMI4_F1A=y -CONFIG_RMI4_F21=y -CONFIG_RMI4_F30=y -CONFIG_RMI4_F34=y -CONFIG_RMI4_F3A=y -# CONFIG_RMI4_F54 is not set -CONFIG_RMI4_F55=y - -# -# Hardware I/O ports -# -CONFIG_SERIO=y -CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y -CONFIG_SERIO_I8042=y -CONFIG_SERIO_SERPORT=m -CONFIG_SERIO_PARKBD=m -CONFIG_SERIO_PCIPS2=m -CONFIG_SERIO_LIBPS2=y -CONFIG_SERIO_RAW=m -CONFIG_SERIO_ALTERA_PS2=m -CONFIG_SERIO_PS2MULT=m -CONFIG_SERIO_ARC_PS2=m -CONFIG_HYPERV_KEYBOARD=m -CONFIG_SERIO_GPIO_PS2=m -CONFIG_USERIO=m -CONFIG_GAMEPORT=m -CONFIG_GAMEPORT_EMU10K1=m -CONFIG_GAMEPORT_FM801=m -# end of Hardware I/O ports -# end of Input device support - -# -# Character devices -# -CONFIG_TTY=y -CONFIG_VT=y -CONFIG_CONSOLE_TRANSLATIONS=y -CONFIG_VT_CONSOLE=y -CONFIG_VT_CONSOLE_SLEEP=y -CONFIG_VT_HW_CONSOLE_BINDING=y -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set -# CONFIG_LEGACY_TIOCSTI is not set -CONFIG_LDISC_AUTOLOAD=y - -# -# Serial drivers -# -CONFIG_SERIAL_EARLYCON=y -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_PNP=y -# CONFIG_SERIAL_8250_16550A_VARIANTS is not set -CONFIG_SERIAL_8250_FINTEK=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_DMA=y -CONFIG_SERIAL_8250_PCILIB=y -CONFIG_SERIAL_8250_PCI=y -CONFIG_SERIAL_8250_EXAR=m -CONFIG_SERIAL_8250_CS=m -CONFIG_SERIAL_8250_MEN_MCB=m -CONFIG_SERIAL_8250_NR_UARTS=32 -CONFIG_SERIAL_8250_RUNTIME_UARTS=32 -CONFIG_SERIAL_8250_EXTENDED=y -CONFIG_SERIAL_8250_SHARE_IRQ=y -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -CONFIG_SERIAL_8250_RSA=y -CONFIG_SERIAL_8250_MANY_PORTS=y -CONFIG_SERIAL_8250_PCI1XXXX=m -CONFIG_SERIAL_8250_DFL=m -CONFIG_SERIAL_8250_DW=m -CONFIG_SERIAL_8250_KEBA=m -CONFIG_SERIAL_8250_RT288X=y -CONFIG_SERIAL_8250_LPSS=m -CONFIG_SERIAL_8250_MID=m -CONFIG_SERIAL_8250_PERICOM=m -CONFIG_SERIAL_8250_NI=m -CONFIG_SERIAL_8250_DWLIB=y - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_MAX3100=m -CONFIG_SERIAL_MAX310X=m -CONFIG_SERIAL_UARTLITE=m -CONFIG_SERIAL_UARTLITE_NR_UARTS=1 -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_SERIAL_JSM=m -# CONFIG_SERIAL_LANTIQ is not set -CONFIG_SERIAL_SCCNXP=m -CONFIG_SERIAL_SC16IS7XX=m -CONFIG_SERIAL_SC16IS7XX_I2C=m -CONFIG_SERIAL_SC16IS7XX_SPI=m -CONFIG_SERIAL_ALTERA_JTAGUART=m -CONFIG_SERIAL_ALTERA_UART=m -CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4 -CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200 -CONFIG_SERIAL_ARC=m -CONFIG_SERIAL_ARC_NR_PORTS=1 -CONFIG_SERIAL_RP2=m -CONFIG_SERIAL_RP2_NR_UARTS=32 -CONFIG_SERIAL_FSL_LPUART=m -CONFIG_SERIAL_FSL_LINFLEXUART=m -CONFIG_SERIAL_MEN_Z135=m -CONFIG_SERIAL_SPRD=m -# end of Serial drivers - -CONFIG_SERIAL_MCTRL_GPIO=y -CONFIG_SERIAL_NONSTANDARD=y -CONFIG_MOXA_INTELLIO=m -CONFIG_MOXA_SMARTIO=m -CONFIG_N_HDLC=m -CONFIG_IPWIRELESS=m -# CONFIG_N_GSM is not set -CONFIG_NOZOMI=m -CONFIG_NULL_TTY=m -CONFIG_HVC_DRIVER=y -CONFIG_HVC_IRQ=y -CONFIG_HVC_XEN=y -CONFIG_HVC_XEN_FRONTEND=y -CONFIG_RPMSG_TTY=m -CONFIG_SERIAL_DEV_BUS=y -CONFIG_SERIAL_DEV_CTRL_TTYPORT=y -CONFIG_PRINTER=m -CONFIG_LP_CONSOLE=y -CONFIG_PPDEV=m -CONFIG_VIRTIO_CONSOLE=y -CONFIG_IPMI_HANDLER=m -CONFIG_IPMI_DMI_DECODE=y -CONFIG_IPMI_PLAT_DATA=y -# CONFIG_IPMI_PANIC_EVENT is not set -CONFIG_IPMI_DEVICE_INTERFACE=m -CONFIG_IPMI_SI=m -CONFIG_IPMI_SSIF=m -CONFIG_IPMI_IPMB=m -CONFIG_IPMI_WATCHDOG=m -CONFIG_IPMI_POWEROFF=m -CONFIG_SSIF_IPMI_BMC=m -CONFIG_IPMB_DEVICE_INTERFACE=m -CONFIG_HW_RANDOM=y -CONFIG_HW_RANDOM_TIMERIOMEM=m -CONFIG_HW_RANDOM_INTEL=m -CONFIG_HW_RANDOM_AMD=m -CONFIG_HW_RANDOM_BA431=m -CONFIG_HW_RANDOM_VIA=m -CONFIG_HW_RANDOM_VIRTIO=m -CONFIG_HW_RANDOM_XIPHERA=m -CONFIG_APPLICOM=m -CONFIG_DEVMEM=y -CONFIG_NVRAM=y -CONFIG_DEVPORT=y -CONFIG_HPET=y -# CONFIG_HPET_MMAP is not set -CONFIG_HANGCHECK_TIMER=m -CONFIG_TCG_TPM=y -CONFIG_TCG_TPM2_HMAC=y -CONFIG_HW_RANDOM_TPM=y -CONFIG_TCG_TIS_CORE=y -CONFIG_TCG_TIS=y -CONFIG_TCG_TIS_SPI=m -CONFIG_TCG_TIS_SPI_CR50=y -CONFIG_TCG_TIS_I2C=m -CONFIG_TCG_TIS_I2C_CR50=m -CONFIG_TCG_TIS_I2C_ATMEL=m -CONFIG_TCG_TIS_I2C_INFINEON=m -CONFIG_TCG_TIS_I2C_NUVOTON=m -CONFIG_TCG_NSC=m -CONFIG_TCG_ATMEL=m -CONFIG_TCG_INFINEON=m -CONFIG_TCG_XEN=m -CONFIG_TCG_CRB=y -CONFIG_TCG_VTPM_PROXY=m -CONFIG_TCG_SVSM=m -CONFIG_TCG_TIS_ST33ZP24=m -CONFIG_TCG_TIS_ST33ZP24_I2C=m -CONFIG_TCG_TIS_ST33ZP24_SPI=m -CONFIG_TELCLOCK=m -CONFIG_XILLYBUS_CLASS=m -CONFIG_XILLYBUS=m -CONFIG_XILLYBUS_PCIE=m -CONFIG_XILLYUSB=m -# end of Character devices - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_ACPI_I2C_OPREGION=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=m -CONFIG_I2C_MUX=m - -# -# Multiplexer I2C Chip support -# -CONFIG_I2C_MUX_GPIO=m -CONFIG_I2C_MUX_LTC4306=m -CONFIG_I2C_MUX_PCA9541=m -CONFIG_I2C_MUX_PCA954x=m -CONFIG_I2C_MUX_REG=m -CONFIG_I2C_MUX_MLXCPLD=m -# end of Multiplexer I2C Chip support - -CONFIG_I2C_ATR=m -CONFIG_I2C_HELPER_AUTO=y -CONFIG_I2C_SMBUS=m -CONFIG_I2C_ALGOBIT=m -CONFIG_I2C_ALGOPCA=m - -# -# I2C Hardware Bus support -# - -# -# PC SMBus host controller drivers -# -CONFIG_I2C_CCGX_UCSI=y -CONFIG_I2C_ALI1535=m -CONFIG_I2C_ALI1563=m -CONFIG_I2C_ALI15X3=m -CONFIG_I2C_AMD756=m -CONFIG_I2C_AMD8111=m -CONFIG_I2C_AMD_MP2=m -CONFIG_I2C_AMD_ASF=m -CONFIG_I2C_I801=m -CONFIG_I2C_I801_MUX=y -CONFIG_I2C_ISCH=m -CONFIG_I2C_ISMT=m -CONFIG_I2C_PIIX4=m -CONFIG_I2C_CHT_WC=m -CONFIG_I2C_NFORCE2=m -CONFIG_I2C_NVIDIA_GPU=m -CONFIG_I2C_SIS5595=m -CONFIG_I2C_SIS630=m -CONFIG_I2C_SIS96X=m -CONFIG_I2C_VIA=m -CONFIG_I2C_VIAPRO=m -CONFIG_I2C_ZHAOXIN=m - -# -# ACPI drivers -# -CONFIG_I2C_SCMI=m - -# -# I2C system bus drivers (mostly embedded / system-on-chip) -# -CONFIG_I2C_CBUS_GPIO=m -CONFIG_I2C_CGBC=m -CONFIG_I2C_DESIGNWARE_CORE=y -CONFIG_I2C_DESIGNWARE_PLATFORM=y -CONFIG_I2C_DESIGNWARE_AMDISP=m -CONFIG_I2C_DESIGNWARE_BAYTRAIL=y -CONFIG_I2C_DESIGNWARE_PCI=y -CONFIG_I2C_EMEV2=m -CONFIG_I2C_GPIO=m -# CONFIG_I2C_GPIO_FAULT_INJECTOR is not set -CONFIG_I2C_KEBA=m -CONFIG_I2C_KEMPLD=m -CONFIG_I2C_OCORES=m -CONFIG_I2C_PCA_PLATFORM=m -CONFIG_I2C_SIMTEC=m -CONFIG_I2C_XILINX=m - -# -# External I2C/SMBus adapter drivers -# -CONFIG_I2C_DIOLAN_U2C=m -CONFIG_I2C_DLN2=m -CONFIG_I2C_LJCA=m -CONFIG_I2C_NCT6694=m -CONFIG_I2C_USBIO=m -CONFIG_I2C_CP2615=m -CONFIG_I2C_PARPORT=m -CONFIG_I2C_PCI1XXXX=m -CONFIG_I2C_ROBOTFUZZ_OSIF=m -CONFIG_I2C_TAOS_EVM=m -CONFIG_I2C_TINY_USB=m -CONFIG_I2C_VIPERBOARD=m - -# -# Other I2C/SMBus bus drivers -# -CONFIG_I2C_MLXCPLD=m -CONFIG_I2C_CROS_EC_TUNNEL=m -CONFIG_I2C_VIRTIO=m -# end of I2C Hardware Bus support - -CONFIG_I2C_STUB=m -CONFIG_I2C_SLAVE=y -CONFIG_I2C_SLAVE_EEPROM=m -CONFIG_I2C_SLAVE_TESTUNIT=m -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# end of I2C support - -# CONFIG_I3C is not set -CONFIG_I3C_OR_I2C=y -CONFIG_SPI=y -# CONFIG_SPI_DEBUG is not set -CONFIG_SPI_MASTER=y -CONFIG_SPI_MEM=y -CONFIG_SPI_OFFLOAD=y - -# -# SPI Master Controller Drivers -# -CONFIG_SPI_ALTERA=m -CONFIG_SPI_ALTERA_CORE=m -CONFIG_SPI_ALTERA_DFL=m -CONFIG_SPI_AXI_SPI_ENGINE=m -CONFIG_SPI_BITBANG=m -CONFIG_SPI_BUTTERFLY=m -CONFIG_SPI_CADENCE=m -CONFIG_SPI_CH341=m -CONFIG_SPI_CS42L43=m -CONFIG_SPI_DESIGNWARE=m -CONFIG_SPI_DW_DMA=y -CONFIG_SPI_DW_PCI=m -CONFIG_SPI_DW_MMIO=m -CONFIG_SPI_DLN2=m -CONFIG_SPI_GPIO=m -CONFIG_SPI_INTEL=m -CONFIG_SPI_INTEL_PCI=m -CONFIG_SPI_INTEL_PLATFORM=m -CONFIG_SPI_KSPI2=m -CONFIG_SPI_LM70_LLP=m -CONFIG_SPI_LJCA=m -CONFIG_SPI_MICROCHIP_CORE_QSPI=m -CONFIG_SPI_MICROCHIP_CORE_SPI=m -# CONFIG_SPI_LANTIQ_SSC is not set -CONFIG_SPI_OC_TINY=m -CONFIG_SPI_PCI1XXXX=m -CONFIG_SPI_PXA2XX=m -CONFIG_SPI_PXA2XX_PCI=m -CONFIG_SPI_SC18IS602=m -CONFIG_SPI_SIFIVE=m -CONFIG_SPI_MXIC=m -CONFIG_SPI_VIRTIO=m -CONFIG_SPI_XCOMM=m -CONFIG_SPI_XILINX=m -CONFIG_SPI_ZYNQMP_GQSPI=m -CONFIG_SPI_AMD=m - -# -# SPI Multiplexer support -# -CONFIG_SPI_MUX=m - -# -# SPI Protocol Masters -# -CONFIG_SPI_SPIDEV=m -CONFIG_SPI_LOOPBACK_TEST=m -CONFIG_SPI_TLE62X0=m -CONFIG_SPI_SLAVE=y -CONFIG_SPI_SLAVE_TIME=m -CONFIG_SPI_SLAVE_SYSTEM_CONTROL=m -CONFIG_SPI_DYNAMIC=y - -# -# SPI Offload triggers -# -CONFIG_SPI_OFFLOAD_TRIGGER_ADI_UTIL_SD=m -CONFIG_SPI_OFFLOAD_TRIGGER_PWM=m -# CONFIG_SPMI is not set -# CONFIG_HSI is not set -CONFIG_PPS=m -# CONFIG_PPS_DEBUG is not set - -# -# PPS clients support -# -CONFIG_PPS_CLIENT_KTIMER=m -CONFIG_PPS_CLIENT_LDISC=m -CONFIG_PPS_CLIENT_PARPORT=m -CONFIG_PPS_CLIENT_GPIO=m -CONFIG_PPS_GENERATOR=m -# CONFIG_PPS_GENERATOR_DUMMY is not set -CONFIG_PPS_GENERATOR_TIO=m - -# -# PTP clock support -# -CONFIG_PTP_1588_CLOCK=m -CONFIG_PTP_1588_CLOCK_OPTIONAL=m -CONFIG_DP83640_PHY=m -CONFIG_PTP_1588_CLOCK_INES=m -CONFIG_PTP_1588_CLOCK_KVM=m -CONFIG_PTP_1588_CLOCK_VMCLOCK=m -CONFIG_PTP_1588_CLOCK_IDT82P33=m -CONFIG_PTP_1588_CLOCK_IDTCM=m -CONFIG_PTP_1588_CLOCK_FC3W=m -CONFIG_PTP_1588_CLOCK_MOCK=m -CONFIG_PTP_1588_CLOCK_VMW=m -CONFIG_PTP_1588_CLOCK_OCP=m -CONFIG_PTP_DFL_TOD=m -CONFIG_PTP_NETC_V4_TIMER=m -# end of PTP clock support - -# -# DPLL device support -# -CONFIG_DPLL=y -# CONFIG_DPLL_REFCNT_TRACKER is not set -CONFIG_ZL3073X=m -CONFIG_ZL3073X_I2C=m -CONFIG_ZL3073X_SPI=m -# end of DPLL device support - -CONFIG_PINCTRL=y -CONFIG_GENERIC_PINCTRL_GROUPS=y -CONFIG_PINMUX=y -CONFIG_GENERIC_PINMUX_FUNCTIONS=y -CONFIG_PINCONF=y -CONFIG_GENERIC_PINCONF=y -# CONFIG_DEBUG_PINCTRL is not set -CONFIG_PINCTRL_AMD=y -CONFIG_PINCTRL_AMDISP=m -CONFIG_PINCTRL_CY8C95X0=m -CONFIG_PINCTRL_DA9062=m -CONFIG_PINCTRL_MAX7360=m -CONFIG_PINCTRL_MCP23S08_I2C=m -CONFIG_PINCTRL_MCP23S08_SPI=m -CONFIG_PINCTRL_MCP23S08=m -CONFIG_PINCTRL_STMFX=m -CONFIG_PINCTRL_SX150X=y -CONFIG_PINCTRL_UPBOARD=m -CONFIG_PINCTRL_CS42L43=m -CONFIG_PINCTRL_MADERA=m -CONFIG_PINCTRL_CS47L15=y -CONFIG_PINCTRL_CS47L35=y -CONFIG_PINCTRL_CS47L85=y -CONFIG_PINCTRL_CS47L90=y -CONFIG_PINCTRL_CS47L92=y - -# -# Intel pinctrl drivers -# -CONFIG_PINCTRL_BAYTRAIL=y -CONFIG_PINCTRL_CHERRYVIEW=y -CONFIG_PINCTRL_LYNXPOINT=m -CONFIG_PINCTRL_INTEL=y -CONFIG_PINCTRL_INTEL_PLATFORM=m -CONFIG_PINCTRL_ALDERLAKE=m -CONFIG_PINCTRL_BROXTON=m -CONFIG_PINCTRL_CANNONLAKE=m -CONFIG_PINCTRL_CEDARFORK=m -CONFIG_PINCTRL_DENVERTON=m -CONFIG_PINCTRL_ELKHARTLAKE=m -CONFIG_PINCTRL_EMMITSBURG=m -CONFIG_PINCTRL_GEMINILAKE=m -CONFIG_PINCTRL_ICELAKE=m -CONFIG_PINCTRL_JASPERLAKE=m -CONFIG_PINCTRL_LAKEFIELD=m -CONFIG_PINCTRL_LEWISBURG=m -CONFIG_PINCTRL_METEORLAKE=m -CONFIG_PINCTRL_METEORPOINT=m -CONFIG_PINCTRL_SUNRISEPOINT=m -CONFIG_PINCTRL_TIGERLAKE=m -# end of Intel pinctrl drivers - -# -# Renesas pinctrl drivers -# -# end of Renesas pinctrl drivers - -CONFIG_GPIOLIB_LEGACY=y -CONFIG_GPIOLIB=y -CONFIG_GPIOLIB_FASTPATH_LIMIT=512 -CONFIG_GPIO_ACPI=y -CONFIG_GPIOLIB_IRQCHIP=y -# CONFIG_DEBUG_GPIO is not set -CONFIG_GPIO_CDEV=y -CONFIG_GPIO_CDEV_V1=y -CONFIG_GPIO_GENERIC=m -CONFIG_GPIO_REGMAP=m -CONFIG_GPIO_SWNODE_UNDEFINED=y -CONFIG_GPIO_MAX730X=m -CONFIG_GPIO_IDIO_16=m - -# -# Memory mapped GPIO drivers -# -CONFIG_GPIO_ALTERA=m -CONFIG_GPIO_AMDPT=m -CONFIG_GPIO_BY_PINCTRL=m -CONFIG_GPIO_DWAPB=m -CONFIG_GPIO_EXAR=m -CONFIG_GPIO_GENERIC_PLATFORM=m -CONFIG_GPIO_GRANITERAPIDS=m -CONFIG_GPIO_ICH=m -CONFIG_GPIO_MB86S7X=m -CONFIG_GPIO_MENZ127=m -# CONFIG_GPIO_POLARFIRE_SOC is not set -CONFIG_GPIO_SIOX=m -CONFIG_GPIO_TANGIER=m -CONFIG_GPIO_WCD934X=m -CONFIG_GPIO_XILINX=m -CONFIG_GPIO_AMD_FCH=m -# end of Memory mapped GPIO drivers - -# -# Port-mapped I/O GPIO drivers -# -CONFIG_GPIO_VX855=m -CONFIG_GPIO_F7188X=m -CONFIG_GPIO_IT87=m -CONFIG_GPIO_SCH=m -CONFIG_GPIO_NOVALAKE=m -CONFIG_GPIO_SCH311X=m -CONFIG_GPIO_WINBOND=m -CONFIG_GPIO_WS16C48=m -# end of Port-mapped I/O GPIO drivers - -# -# I2C GPIO expanders -# -CONFIG_GPIO_FXL6408=m -CONFIG_GPIO_DS4520=m -CONFIG_GPIO_MAX7300=m -CONFIG_GPIO_MAX732X=m -CONFIG_GPIO_PCA953X=m -CONFIG_GPIO_PCA953X_IRQ=y -CONFIG_GPIO_PCA9570=m -CONFIG_GPIO_PCF857X=m -CONFIG_GPIO_TPIC2810=m -# end of I2C GPIO expanders - -# -# MFD GPIO expanders -# -CONFIG_GPIO_ADP5520=m -CONFIG_GPIO_ARIZONA=m -CONFIG_GPIO_BD9571MWV=m -CONFIG_GPIO_CGBC=m -CONFIG_GPIO_CROS_EC=m -CONFIG_GPIO_CRYSTAL_COVE=y -CONFIG_GPIO_DA9052=m -CONFIG_GPIO_DA9055=m -CONFIG_GPIO_DLN2=m -CONFIG_GPIO_ELKHARTLAKE=m -CONFIG_GPIO_JANZ_TTL=m -CONFIG_GPIO_KEMPLD=m -CONFIG_GPIO_LJCA=m -CONFIG_GPIO_LP3943=m -CONFIG_GPIO_LP873X=m -CONFIG_GPIO_MADERA=m -CONFIG_GPIO_MAX7360=m -CONFIG_GPIO_NCT6694=m -CONFIG_GPIO_PALMAS=m -CONFIG_GPIO_QIXIS_FPGA=m -CONFIG_GPIO_RC5T583=y -CONFIG_GPIO_TPS65086=m -CONFIG_GPIO_TPS6586X=y -CONFIG_GPIO_TPS65910=y -CONFIG_GPIO_TPS65912=m -CONFIG_GPIO_TPS68470=m -CONFIG_GPIO_TQMX86=m -CONFIG_GPIO_TWL4030=m -CONFIG_GPIO_TWL6040=m -CONFIG_GPIO_WHISKEY_COVE=m -CONFIG_GPIO_WM831X=m -CONFIG_GPIO_WM8350=m -CONFIG_GPIO_WM8994=m -# end of MFD GPIO expanders - -# -# PCI GPIO expanders -# -CONFIG_GPIO_AMD8111=m -CONFIG_GPIO_ML_IOH=m -CONFIG_GPIO_PCI_IDIO_16=m -CONFIG_GPIO_PCIE_IDIO_24=m -CONFIG_GPIO_RDC321X=m -# end of PCI GPIO expanders - -# -# SPI GPIO expanders -# -CONFIG_GPIO_74X164=m -CONFIG_GPIO_MAX3191X=m -CONFIG_GPIO_MAX7301=m -CONFIG_GPIO_MC33880=m -CONFIG_GPIO_PISOSR=m -CONFIG_GPIO_XRA1403=m -# end of SPI GPIO expanders - -# -# USB GPIO expanders -# -CONFIG_GPIO_VIPERBOARD=m -CONFIG_GPIO_MPSSE=m -CONFIG_GPIO_USBIO=m -# end of USB GPIO expanders - -# -# Virtual GPIO drivers -# -CONFIG_GPIO_AGGREGATOR=m -CONFIG_GPIO_LATCH=m -CONFIG_GPIO_MOCKUP=m -CONFIG_GPIO_VIRTIO=m -CONFIG_GPIO_SIM=m -# end of Virtual GPIO drivers - -# -# GPIO Debugging utilities -# -# CONFIG_GPIO_VIRTUSER is not set -# end of GPIO Debugging utilities - -CONFIG_W1=m -CONFIG_W1_CON=y - -# -# 1-wire Bus Masters -# -CONFIG_W1_MASTER_AMD_AXI=m -CONFIG_W1_MASTER_MATROX=m -CONFIG_W1_MASTER_DS2490=m -CONFIG_W1_MASTER_DS2482=m -CONFIG_W1_MASTER_GPIO=m -CONFIG_W1_MASTER_SGI=m -CONFIG_W1_MASTER_UART=m -# end of 1-wire Bus Masters - -# -# 1-wire Slaves -# -CONFIG_W1_SLAVE_THERM=m -CONFIG_W1_SLAVE_SMEM=m -CONFIG_W1_SLAVE_DS2405=m -CONFIG_W1_SLAVE_DS2408=m -# CONFIG_W1_SLAVE_DS2408_READBACK is not set -CONFIG_W1_SLAVE_DS2413=m -CONFIG_W1_SLAVE_DS2406=m -CONFIG_W1_SLAVE_DS2423=m -CONFIG_W1_SLAVE_DS2805=m -CONFIG_W1_SLAVE_DS2430=m -CONFIG_W1_SLAVE_DS2431=m -CONFIG_W1_SLAVE_DS2433=m -# CONFIG_W1_SLAVE_DS2433_CRC is not set -CONFIG_W1_SLAVE_DS2438=m -CONFIG_W1_SLAVE_DS250X=m -CONFIG_W1_SLAVE_DS2780=m -CONFIG_W1_SLAVE_DS2781=m -CONFIG_W1_SLAVE_DS28E04=m -CONFIG_W1_SLAVE_DS28E17=m -# end of 1-wire Slaves - -CONFIG_POWER_RESET=y -CONFIG_POWER_RESET_ATC260X=m -CONFIG_POWER_RESET_MT6323=y -CONFIG_POWER_RESET_RESTART=y -CONFIG_POWER_RESET_TPS65086=y -CONFIG_POWER_RESET_QEMU_VIRT_CTRL=m -CONFIG_POWER_SEQUENCING=m -CONFIG_POWER_SUPPLY=y -# CONFIG_POWER_SUPPLY_DEBUG is not set -CONFIG_POWER_SUPPLY_HWMON=y -CONFIG_ADC_BATTERY_HELPER=m -CONFIG_GENERIC_ADC_BATTERY=m -CONFIG_IP5XXX_POWER=m -CONFIG_MAX8925_POWER=m -CONFIG_WM831X_BACKUP=m -CONFIG_WM831X_POWER=m -CONFIG_WM8350_POWER=m -CONFIG_TEST_POWER=m -CONFIG_BATTERY_88PM860X=m -CONFIG_CHARGER_ADP5061=m -CONFIG_BATTERY_CHAGALL=m -CONFIG_BATTERY_CW2015=m -CONFIG_BATTERY_DS2760=m -CONFIG_BATTERY_DS2780=m -CONFIG_BATTERY_DS2781=m -CONFIG_BATTERY_DS2782=m -# CONFIG_BATTERY_SAMSUNG_SDI is not set -CONFIG_BATTERY_S2MU005=m -CONFIG_BATTERY_INTEL_DC_TI=m -CONFIG_BATTERY_SBS=m -CONFIG_CHARGER_SBS=m -CONFIG_MANAGER_SBS=m -CONFIG_BATTERY_BQ27XXX=m -CONFIG_BATTERY_BQ27XXX_I2C=m -CONFIG_BATTERY_BQ27XXX_HDQ=m -# CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM is not set -CONFIG_BATTERY_DA9030=m -CONFIG_BATTERY_DA9052=m -CONFIG_CHARGER_DA9150=m -CONFIG_BATTERY_DA9150=m -CONFIG_CHARGER_AXP20X=m -CONFIG_BATTERY_AXP20X=m -CONFIG_AXP20X_POWER=m -CONFIG_AXP288_CHARGER=m -CONFIG_AXP288_FUEL_GAUGE=m -CONFIG_BATTERY_MAX17040=m -CONFIG_BATTERY_MAX17042=m -CONFIG_BATTERY_MAX1720X=m -CONFIG_BATTERY_MAX1721X=m -CONFIG_BATTERY_TWL4030_MADC=m -CONFIG_CHARGER_88PM860X=m -CONFIG_BATTERY_RX51=m -CONFIG_CHARGER_ISP1704=m -CONFIG_CHARGER_MAX8903=m -CONFIG_CHARGER_TWL4030=m -CONFIG_CHARGER_TWL6030=m -CONFIG_CHARGER_LP8727=m -CONFIG_CHARGER_LP8788=m -CONFIG_CHARGER_GPIO=m -CONFIG_CHARGER_MANAGER=m -CONFIG_CHARGER_LT3651=m -CONFIG_CHARGER_LTC4162L=m -CONFIG_CHARGER_MAX14577=m -CONFIG_CHARGER_MAX77693=m -CONFIG_CHARGER_MAX77705=m -CONFIG_CHARGER_MAX77976=m -CONFIG_CHARGER_MAX8971=m -CONFIG_CHARGER_MAX8997=m -CONFIG_CHARGER_MAX8998=m -CONFIG_CHARGER_MP2629=m -CONFIG_CHARGER_MT6360=m -CONFIG_CHARGER_MT6370=m -CONFIG_CHARGER_BQ2415X=m -CONFIG_CHARGER_BQ24190=m -CONFIG_CHARGER_BQ24257=m -CONFIG_CHARGER_BQ24735=m -CONFIG_CHARGER_BQ2515X=m -CONFIG_CHARGER_BQ257XX=m -CONFIG_CHARGER_BQ25890=m -CONFIG_CHARGER_BQ25980=m -CONFIG_CHARGER_BQ256XX=m -CONFIG_CHARGER_SMB347=m -CONFIG_CHARGER_TPS65090=m -CONFIG_BATTERY_GAUGE_LTC2941=m -CONFIG_BATTERY_GOLDFISH=m -CONFIG_BATTERY_RT5033=m -CONFIG_CHARGER_RT5033=m -CONFIG_CHARGER_RT9455=m -CONFIG_CHARGER_RT9467=m -CONFIG_CHARGER_RT9471=m -CONFIG_CHARGER_RT9756=m -CONFIG_CHARGER_CROS_USBPD=m -CONFIG_CHARGER_CROS_PCHG=m -CONFIG_CHARGER_CROS_CONTROL=m -CONFIG_FUEL_GAUGE_STC3117=m -CONFIG_CHARGER_BD99954=m -CONFIG_CHARGER_WILCO=m -CONFIG_BATTERY_SURFACE=m -CONFIG_CHARGER_SURFACE=m -CONFIG_BATTERY_UG3105=m -CONFIG_FUEL_GAUGE_MM8013=m -CONFIG_HWMON=y -CONFIG_HWMON_VID=m -# CONFIG_HWMON_DEBUG_CHIP is not set - -# -# Native drivers -# -CONFIG_SENSORS_ABITUGURU=m -CONFIG_SENSORS_ABITUGURU3=m -CONFIG_SENSORS_SMPRO=m -CONFIG_SENSORS_AD7314=m -CONFIG_SENSORS_AD7414=m -CONFIG_SENSORS_AD7418=m -CONFIG_SENSORS_ADM1025=m -CONFIG_SENSORS_ADM1026=m -CONFIG_SENSORS_ADM1029=m -CONFIG_SENSORS_ADM1031=m -CONFIG_SENSORS_ADM1177=m -CONFIG_SENSORS_ADM9240=m -CONFIG_SENSORS_ADT7X10=m -CONFIG_SENSORS_ADT7310=m -CONFIG_SENSORS_ADT7410=m -CONFIG_SENSORS_ADT7411=m -CONFIG_SENSORS_ADT7462=m -CONFIG_SENSORS_ADT7470=m -CONFIG_SENSORS_ADT7475=m -CONFIG_SENSORS_AHT10=m -CONFIG_SENSORS_AQUACOMPUTER_D5NEXT=m -CONFIG_SENSORS_AS370=m -CONFIG_SENSORS_ASC7621=m -CONFIG_SENSORS_ASUS_ROG_RYUJIN=m -CONFIG_SENSORS_AXI_FAN_CONTROL=m -CONFIG_SENSORS_K8TEMP=m -CONFIG_SENSORS_K10TEMP=m -CONFIG_SENSORS_KBATT=m -CONFIG_SENSORS_KFAN=m -CONFIG_SENSORS_FAM15H_POWER=m -CONFIG_SENSORS_APPLESMC=m -CONFIG_SENSORS_ASB100=m -CONFIG_SENSORS_ATXP1=m -CONFIG_SENSORS_CGBC=m -CONFIG_SENSORS_CHIPCAP2=m -CONFIG_SENSORS_CORSAIR_CPRO=m -CONFIG_SENSORS_CORSAIR_PSU=m -CONFIG_SENSORS_CROS_EC=m -CONFIG_SENSORS_DRIVETEMP=m -CONFIG_SENSORS_DS620=m -CONFIG_SENSORS_DS1621=m -CONFIG_SENSORS_DELL_SMM=m -CONFIG_I8K=y -CONFIG_SENSORS_DA9052_ADC=m -CONFIG_SENSORS_DA9055=m -CONFIG_SENSORS_I5K_AMB=m -CONFIG_SENSORS_F71805F=m -CONFIG_SENSORS_F71882FG=m -CONFIG_SENSORS_F75375S=m -CONFIG_SENSORS_MC13783_ADC=m -CONFIG_SENSORS_FSCHMD=m -CONFIG_SENSORS_FTSTEUTATES=m -CONFIG_SENSORS_GIGABYTE_WATERFORCE=m -CONFIG_SENSORS_GL518SM=m -CONFIG_SENSORS_GL520SM=m -CONFIG_SENSORS_GPD=m -CONFIG_SENSORS_G760A=m -CONFIG_SENSORS_G762=m -CONFIG_SENSORS_GPIO_FAN=m -CONFIG_SENSORS_HIH6130=m -CONFIG_SENSORS_HS3001=m -CONFIG_SENSORS_HTU31=m -CONFIG_SENSORS_IBMAEM=m -CONFIG_SENSORS_IBMPEX=m -CONFIG_SENSORS_IIO_HWMON=m -CONFIG_SENSORS_I5500=m -CONFIG_SENSORS_CORETEMP=m -CONFIG_SENSORS_ISL28022=m -CONFIG_SENSORS_IT87=m -CONFIG_SENSORS_JC42=m -CONFIG_SENSORS_POWERZ=m -CONFIG_SENSORS_POWR1220=m -CONFIG_SENSORS_LATTEPANDA_SIGMA_EC=m -CONFIG_SENSORS_LENOVO_EC=m -CONFIG_SENSORS_LINEAGE=m -CONFIG_SENSORS_LTC2945=m -CONFIG_SENSORS_LTC2947=m -CONFIG_SENSORS_LTC2947_I2C=m -CONFIG_SENSORS_LTC2947_SPI=m -CONFIG_SENSORS_LTC2990=m -CONFIG_SENSORS_LTC2991=m -CONFIG_SENSORS_LTC2992=m -CONFIG_SENSORS_LTC4151=m -CONFIG_SENSORS_LTC4215=m -CONFIG_SENSORS_LTC4222=m -CONFIG_SENSORS_LTC4245=m -CONFIG_SENSORS_LTC4260=m -CONFIG_SENSORS_LTC4261=m -CONFIG_SENSORS_LTC4282=m -CONFIG_SENSORS_MAX1111=m -CONFIG_SENSORS_MAX127=m -CONFIG_SENSORS_MAX16065=m -CONFIG_SENSORS_MAX1619=m -CONFIG_SENSORS_MAX1668=m -CONFIG_SENSORS_MAX197=m -CONFIG_SENSORS_MAX31722=m -CONFIG_SENSORS_MAX31730=m -CONFIG_SENSORS_MAX31760=m -CONFIG_MAX31827=m -CONFIG_SENSORS_MAX6620=m -CONFIG_SENSORS_MAX6621=m -CONFIG_SENSORS_MAX6639=m -CONFIG_SENSORS_MAX6650=m -CONFIG_SENSORS_MAX6697=m -CONFIG_SENSORS_MAX31790=m -CONFIG_SENSORS_MAX77705=m -CONFIG_SENSORS_MC34VR500=m -CONFIG_SENSORS_MCP3021=m -CONFIG_SENSORS_MCP9982=m -CONFIG_SENSORS_MLXREG_FAN=m -CONFIG_SENSORS_TC654=m -CONFIG_SENSORS_TPS23861=m -CONFIG_SENSORS_MENF21BMC_HWMON=m -CONFIG_SENSORS_MR75203=m -CONFIG_SENSORS_ADCXX=m -CONFIG_SENSORS_LM63=m -CONFIG_SENSORS_LM70=m -CONFIG_SENSORS_LM73=m -CONFIG_SENSORS_LM75=m -CONFIG_SENSORS_LM77=m -CONFIG_SENSORS_LM78=m -CONFIG_SENSORS_LM80=m -CONFIG_SENSORS_LM83=m -CONFIG_SENSORS_LM85=m -CONFIG_SENSORS_LM87=m -CONFIG_SENSORS_LM90=m -CONFIG_SENSORS_LM92=m -CONFIG_SENSORS_LM93=m -CONFIG_SENSORS_LM95234=m -CONFIG_SENSORS_LM95241=m -CONFIG_SENSORS_LM95245=m -CONFIG_SENSORS_PC87360=m -CONFIG_SENSORS_PC87427=m -CONFIG_SENSORS_NTC_THERMISTOR=m -CONFIG_SENSORS_NCT6683=m -CONFIG_SENSORS_NCT6694=m -CONFIG_SENSORS_NCT6775_CORE=m -CONFIG_SENSORS_NCT6775=m -CONFIG_SENSORS_NCT6775_I2C=m -CONFIG_SENSORS_NCT7363=m -CONFIG_SENSORS_NCT7802=m -CONFIG_SENSORS_NCT7904=m -CONFIG_SENSORS_NPCM7XX=m -CONFIG_SENSORS_NZXT_KRAKEN2=m -CONFIG_SENSORS_NZXT_KRAKEN3=m -CONFIG_SENSORS_NZXT_SMART2=m -CONFIG_SENSORS_OCC_P8_I2C=m -CONFIG_SENSORS_OCC=m -CONFIG_SENSORS_PCF8591=m -CONFIG_PMBUS=m -CONFIG_SENSORS_PMBUS=m -CONFIG_SENSORS_ACBEL_FSG032=m -CONFIG_SENSORS_ADM1266=m -CONFIG_SENSORS_ADM1275=m -CONFIG_SENSORS_ADP1050=m -CONFIG_SENSORS_ADP1050_REGULATOR=y -CONFIG_SENSORS_APS_379=m -CONFIG_SENSORS_BEL_PFE=m -CONFIG_SENSORS_BPA_RS600=m -CONFIG_SENSORS_CRPS=m -CONFIG_SENSORS_DELTA_AHE50DC_FAN=m -CONFIG_SENSORS_FSP_3Y=m -CONFIG_SENSORS_HAC300S=m -CONFIG_SENSORS_IBM_CFFPS=m -CONFIG_SENSORS_DPS920AB=m -CONFIG_SENSORS_INA233=m -CONFIG_SENSORS_INSPUR_IPSPS=m -CONFIG_SENSORS_IR35221=m -CONFIG_SENSORS_IR36021=m -CONFIG_SENSORS_IR38064=m -CONFIG_SENSORS_IR38064_REGULATOR=y -CONFIG_SENSORS_IRPS5401=m -CONFIG_SENSORS_ISL68137=m -CONFIG_SENSORS_LM25066=m -CONFIG_SENSORS_LM25066_REGULATOR=y -CONFIG_SENSORS_LT3074=m -CONFIG_SENSORS_LT3074_REGULATOR=m -CONFIG_SENSORS_LT7182S=m -CONFIG_SENSORS_LTC2978=m -# CONFIG_SENSORS_LTC2978_REGULATOR is not set -CONFIG_SENSORS_LTC3815=m -CONFIG_SENSORS_LTC4286=y -CONFIG_SENSORS_MAX15301=m -CONFIG_SENSORS_MAX16064=m -CONFIG_SENSORS_MAX16601=m -CONFIG_SENSORS_MAX17616=m -CONFIG_SENSORS_MAX20730=m -CONFIG_SENSORS_MAX20751=m -CONFIG_SENSORS_MAX31785=m -CONFIG_SENSORS_MAX34440=m -CONFIG_SENSORS_MAX8688=m -CONFIG_SENSORS_MP2856=m -CONFIG_SENSORS_MP2869=m -CONFIG_SENSORS_MP2888=m -CONFIG_SENSORS_MP2891=m -CONFIG_SENSORS_MP2925=m -CONFIG_SENSORS_MP29502=m -CONFIG_SENSORS_MP2975=m -CONFIG_SENSORS_MP2993=m -CONFIG_SENSORS_MP2975_REGULATOR=y -CONFIG_SENSORS_MP5023=m -CONFIG_SENSORS_MP5920=m -CONFIG_SENSORS_MP5926=m -CONFIG_SENSORS_MP5990=m -CONFIG_SENSORS_MP9941=m -CONFIG_SENSORS_MP9945=m -CONFIG_SENSORS_MPQ7932_REGULATOR=y -CONFIG_SENSORS_MPQ7932=m -CONFIG_SENSORS_MPQ8785=m -CONFIG_SENSORS_PIM4328=m -CONFIG_SENSORS_PLI1209BC=m -CONFIG_SENSORS_PLI1209BC_REGULATOR=y -CONFIG_SENSORS_PM6764TR=m -CONFIG_SENSORS_PXE1610=m -CONFIG_SENSORS_Q54SJ108A2=m -CONFIG_SENSORS_STEF48H28=m -CONFIG_SENSORS_STPDDC60=m -CONFIG_SENSORS_TDA38640=m -CONFIG_SENSORS_TDA38640_REGULATOR=y -CONFIG_SENSORS_TPS25990=m -CONFIG_SENSORS_TPS25990_REGULATOR=y -CONFIG_SENSORS_TPS40422=m -CONFIG_SENSORS_TPS53679=m -CONFIG_SENSORS_TPS546D24=m -CONFIG_SENSORS_UCD9000=m -CONFIG_SENSORS_UCD9200=m -CONFIG_SENSORS_XDP710=m -CONFIG_SENSORS_XDP720=m -CONFIG_SENSORS_XDPE152=m -CONFIG_SENSORS_XDPE1A2G7B=m -CONFIG_SENSORS_XDPE122=m -CONFIG_SENSORS_XDPE122_REGULATOR=y -CONFIG_SENSORS_ZL6100=m -CONFIG_SENSORS_PT5161L=m -CONFIG_SENSORS_PWM_FAN=m -CONFIG_SENSORS_QNAP_MCU_HWMON=m -CONFIG_SENSORS_SBTSI=m -CONFIG_SENSORS_SHT15=m -CONFIG_SENSORS_SHT21=m -CONFIG_SENSORS_SHT3x=m -CONFIG_SENSORS_SHT4x=m -CONFIG_SENSORS_SHTC1=m -CONFIG_SENSORS_SIS5595=m -CONFIG_SENSORS_SY7636A=m -CONFIG_SENSORS_DME1737=m -CONFIG_SENSORS_EMC1403=m -CONFIG_SENSORS_EMC2103=m -CONFIG_SENSORS_EMC2305=m -CONFIG_SENSORS_EMC6W201=m -CONFIG_SENSORS_SMSC47M1=m -CONFIG_SENSORS_SMSC47M192=m -CONFIG_SENSORS_SMSC47B397=m -CONFIG_SENSORS_SCH56XX_COMMON=m -CONFIG_SENSORS_SCH5627=m -CONFIG_SENSORS_SCH5636=m -CONFIG_SENSORS_STTS751=m -CONFIG_SENSORS_SURFACE_FAN=m -CONFIG_SENSORS_SURFACE_TEMP=m -CONFIG_SENSORS_ADC128D818=m -CONFIG_SENSORS_ADS7828=m -CONFIG_SENSORS_ADS7871=m -CONFIG_SENSORS_AMC6821=m -CONFIG_SENSORS_INA209=m -CONFIG_SENSORS_INA2XX=m -CONFIG_SENSORS_INA238=m -CONFIG_SENSORS_INA3221=m -CONFIG_SENSORS_SPD5118=m -CONFIG_SENSORS_SPD5118_DETECT=y -CONFIG_SENSORS_TC74=m -CONFIG_SENSORS_THMC50=m -CONFIG_SENSORS_TMP102=m -CONFIG_SENSORS_TMP103=m -CONFIG_SENSORS_TMP108=m -CONFIG_SENSORS_TMP401=m -CONFIG_SENSORS_TMP421=m -CONFIG_SENSORS_TMP464=m -CONFIG_SENSORS_TMP513=m -CONFIG_SENSORS_TSC1641=m -CONFIG_SENSORS_VIA_CPUTEMP=m -CONFIG_SENSORS_VIA686A=m -CONFIG_SENSORS_VT1211=m -CONFIG_SENSORS_VT8231=m -CONFIG_SENSORS_W83773G=m -CONFIG_SENSORS_W83781D=m -CONFIG_SENSORS_W83791D=m -CONFIG_SENSORS_W83792D=m -CONFIG_SENSORS_W83793=m -CONFIG_SENSORS_W83795=m -# CONFIG_SENSORS_W83795_FANCTRL is not set -CONFIG_SENSORS_W83L785TS=m -CONFIG_SENSORS_W83L786NG=m -CONFIG_SENSORS_W83627HF=m -CONFIG_SENSORS_W83627EHF=m -CONFIG_SENSORS_WM831X=m -CONFIG_SENSORS_WM8350=m -CONFIG_SENSORS_XGENE=m -CONFIG_SENSORS_YOGAFAN=m -CONFIG_SENSORS_INTEL_M10_BMC_HWMON=m - -# -# ACPI drivers -# -CONFIG_SENSORS_ACPI_POWER=m -CONFIG_SENSORS_ATK0110=m -CONFIG_SENSORS_ASUS_WMI=m -CONFIG_SENSORS_ASUS_EC=m -CONFIG_SENSORS_HP_WMI=m -CONFIG_THERMAL=y -CONFIG_THERMAL_NETLINK=y -# CONFIG_THERMAL_STATISTICS is not set -# CONFIG_THERMAL_DEBUGFS is not set -CONFIG_THERMAL_CORE_TESTING=m -CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=100 -CONFIG_THERMAL_HWMON=y -CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y -# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set -# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set -# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set -# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set -CONFIG_THERMAL_GOV_FAIR_SHARE=y -CONFIG_THERMAL_GOV_STEP_WISE=y -CONFIG_THERMAL_GOV_BANG_BANG=y -CONFIG_THERMAL_GOV_USER_SPACE=y -CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y -CONFIG_DEVFREQ_THERMAL=y -# CONFIG_PCIE_THERMAL is not set -# CONFIG_THERMAL_EMULATION is not set - -# -# Intel thermal drivers -# -CONFIG_INTEL_POWERCLAMP=m -CONFIG_X86_THERMAL_VECTOR=y -CONFIG_INTEL_TCC=y -CONFIG_X86_PKG_TEMP_THERMAL=m -CONFIG_INTEL_SOC_DTS_IOSF_CORE=m -CONFIG_INTEL_SOC_DTS_THERMAL=m - -# -# ACPI INT340X thermal drivers -# -CONFIG_INT340X_THERMAL=m -CONFIG_ACPI_THERMAL_REL=m -CONFIG_INT3406_THERMAL=m -CONFIG_PROC_THERMAL_MMIO_RAPL=m -# end of ACPI INT340X thermal drivers - -CONFIG_INTEL_BXT_PMIC_THERMAL=m -CONFIG_INTEL_PCH_THERMAL=m -CONFIG_INTEL_TCC_COOLING=m -CONFIG_INTEL_HFI_THERMAL=y -# end of Intel thermal drivers - -CONFIG_GENERIC_ADC_THERMAL=m -CONFIG_WATCHDOG=y -CONFIG_WATCHDOG_CORE=y -# CONFIG_WATCHDOG_NOWAYOUT is not set -CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y -CONFIG_WATCHDOG_OPEN_TIMEOUT=0 -CONFIG_WATCHDOG_SYSFS=y -# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set - -# -# Watchdog Pretimeout Governors -# -CONFIG_WATCHDOG_PRETIMEOUT_GOV=y -CONFIG_WATCHDOG_PRETIMEOUT_GOV_SEL=m -CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=m -CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=y -# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP is not set -CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC=y - -# -# Watchdog Device Drivers -# -CONFIG_SOFT_WATCHDOG=m -# CONFIG_SOFT_WATCHDOG_PRETIMEOUT is not set -CONFIG_CROS_EC_WATCHDOG=m -CONFIG_DA9052_WATCHDOG=m -CONFIG_DA9055_WATCHDOG=m -CONFIG_DA9063_WATCHDOG=m -CONFIG_DA9062_WATCHDOG=m -CONFIG_LENOVO_SE10_WDT=m -CONFIG_LENOVO_SE30_WDT=m -CONFIG_MENF21BMC_WATCHDOG=m -CONFIG_MENZ069_WATCHDOG=m -CONFIG_WDAT_WDT=m -CONFIG_WM831X_WATCHDOG=m -CONFIG_WM8350_WATCHDOG=m -CONFIG_XILINX_WATCHDOG=m -CONFIG_ZIIRAVE_WATCHDOG=m -CONFIG_RAVE_SP_WATCHDOG=m -CONFIG_MLX_WDT=m -CONFIG_CADENCE_WATCHDOG=m -CONFIG_DW_WATCHDOG=m -CONFIG_TWL4030_WATCHDOG=m -CONFIG_MAX63XX_WATCHDOG=m -CONFIG_NCT6694_WATCHDOG=m -CONFIG_RETU_WATCHDOG=m -CONFIG_ACQUIRE_WDT=m -CONFIG_ADVANTECH_WDT=m -CONFIG_ADVANTECH_EC_WDT=m -CONFIG_ALIM1535_WDT=m -CONFIG_ALIM7101_WDT=m -CONFIG_CGBC_WDT=m -CONFIG_EBC_C384_WDT=m -CONFIG_EXAR_WDT=m -CONFIG_F71808E_WDT=m -CONFIG_SP5100_TCO=m -CONFIG_SBC_FITPC2_WATCHDOG=m -CONFIG_EUROTECH_WDT=m -CONFIG_IB700_WDT=m -CONFIG_IBMASR=m -CONFIG_WAFER_WDT=m -CONFIG_I6300ESB_WDT=m -CONFIG_IE6XX_WDT=m -CONFIG_INTEL_OC_WATCHDOG=m -CONFIG_ITCO_WDT=m -CONFIG_IT8712F_WDT=m -CONFIG_IT87_WDT=m -CONFIG_HP_WATCHDOG=m -CONFIG_HPWDT_NMI_DECODING=y -CONFIG_KEMPLD_WDT=m -CONFIG_SC1200_WDT=m -CONFIG_PC87413_WDT=m -CONFIG_NV_TCO=m -CONFIG_60XX_WDT=m -CONFIG_SMSC_SCH311X_WDT=m -CONFIG_SMSC37B787_WDT=m -CONFIG_TQMX86_WDT=m -CONFIG_VIA_WDT=m -CONFIG_W83627HF_WDT=m -CONFIG_W83877F_WDT=m -CONFIG_W83977F_WDT=m -CONFIG_MACHZ_WDT=m -CONFIG_SBC_EPX_C3_WATCHDOG=m -CONFIG_INTEL_MEI_WDT=m -CONFIG_NI903X_WDT=m -CONFIG_NIC7018_WDT=m -CONFIG_SIEMENS_SIMATIC_IPC_WDT=m -CONFIG_MEN_A21_WDT=m -CONFIG_XEN_WDT=m - -# -# PCI-based Watchdog Cards -# -CONFIG_PCIPCWATCHDOG=m -CONFIG_WDTPCI=m - -# -# USB-based Watchdog Cards -# -CONFIG_USBPCWATCHDOG=m -CONFIG_SSB_POSSIBLE=y -CONFIG_SSB=m -CONFIG_SSB_SPROM=y -CONFIG_SSB_BLOCKIO=y -CONFIG_SSB_PCIHOST_POSSIBLE=y -CONFIG_SSB_PCIHOST=y -CONFIG_SSB_B43_PCI_BRIDGE=y -CONFIG_SSB_PCMCIAHOST_POSSIBLE=y -CONFIG_SSB_PCMCIAHOST=y -CONFIG_SSB_SDIOHOST_POSSIBLE=y -CONFIG_SSB_SDIOHOST=y -CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y -CONFIG_SSB_DRIVER_PCICORE=y -CONFIG_SSB_DRIVER_GPIO=y -CONFIG_BCMA_POSSIBLE=y -CONFIG_BCMA=m -CONFIG_BCMA_BLOCKIO=y -CONFIG_BCMA_HOST_PCI_POSSIBLE=y -CONFIG_BCMA_HOST_PCI=y -# CONFIG_BCMA_HOST_SOC is not set -CONFIG_BCMA_DRIVER_PCI=y -CONFIG_BCMA_DRIVER_GMAC_CMN=y -CONFIG_BCMA_DRIVER_GPIO=y -# CONFIG_BCMA_DEBUG is not set - -# -# Multifunction device drivers -# -CONFIG_MFD_CORE=y -CONFIG_MFD_AS3711=y -CONFIG_MFD_SMPRO=m -CONFIG_PMIC_ADP5520=y -CONFIG_MFD_AAT2870_CORE=y -CONFIG_MFD_BCM590XX=m -CONFIG_MFD_BD9571MWV=m -CONFIG_MFD_AXP20X=m -CONFIG_MFD_AXP20X_I2C=m -CONFIG_MFD_CGBC=m -CONFIG_MFD_CROS_EC_DEV=m -CONFIG_MFD_CS40L50_CORE=m -CONFIG_MFD_CS40L50_I2C=m -CONFIG_MFD_CS40L50_SPI=m -CONFIG_MFD_CS42L43=m -CONFIG_MFD_CS42L43_I2C=m -CONFIG_MFD_CS42L43_SDW=m -CONFIG_MFD_MADERA=m -CONFIG_MFD_MADERA_I2C=m -CONFIG_MFD_MADERA_SPI=m -CONFIG_MFD_CS47L15=y -CONFIG_MFD_CS47L35=y -CONFIG_MFD_CS47L85=y -CONFIG_MFD_CS47L90=y -CONFIG_MFD_CS47L92=y -CONFIG_PMIC_DA903X=y -CONFIG_PMIC_DA9052=y -CONFIG_MFD_DA9052_SPI=y -CONFIG_MFD_DA9052_I2C=y -CONFIG_MFD_DA9055=y -CONFIG_MFD_DA9062=m -CONFIG_MFD_DA9063=m -CONFIG_MFD_DA9150=m -CONFIG_MFD_DLN2=m -CONFIG_MFD_MC13XXX=m -CONFIG_MFD_MC13XXX_SPI=m -CONFIG_MFD_MC13XXX_I2C=m -CONFIG_MFD_MP2629=m -CONFIG_MFD_INTEL_QUARK_I2C_GPIO=m -CONFIG_LPC_ICH=m -CONFIG_LPC_SCH=m -CONFIG_INTEL_SOC_PMIC=y -CONFIG_INTEL_SOC_PMIC_BXTWC=m -CONFIG_INTEL_SOC_PMIC_CHTWC=y -CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m -CONFIG_INTEL_SOC_PMIC_MRFLD=m -CONFIG_MFD_INTEL_LPSS=m -CONFIG_MFD_INTEL_LPSS_ACPI=m -CONFIG_MFD_INTEL_LPSS_PCI=m -CONFIG_MFD_INTEL_PMC_BXT=m -CONFIG_MFD_IQS62X=m -CONFIG_MFD_JANZ_CMODIO=m -CONFIG_MFD_KEMPLD=m -CONFIG_MFD_88PM800=m -CONFIG_MFD_88PM805=m -CONFIG_MFD_88PM860X=y -CONFIG_MFD_MAX5970=m -CONFIG_MFD_MAX14577=m -CONFIG_MFD_MAX77541=m -CONFIG_MFD_MAX77693=m -CONFIG_MFD_MAX77705=m -CONFIG_MFD_MAX77843=y -CONFIG_MFD_MAX8907=m -CONFIG_MFD_MAX8925=y -CONFIG_MFD_MAX8997=y -CONFIG_MFD_MAX8998=y -CONFIG_MFD_MT6360=m -CONFIG_MFD_MT6370=m -CONFIG_MFD_MT6397=m -CONFIG_MFD_MENF21BMC=m -CONFIG_MFD_NCT6694=m -CONFIG_MFD_OCELOT=m -CONFIG_EZX_PCAP=y -CONFIG_MFD_VIPERBOARD=m -CONFIG_MFD_RETU=m -CONFIG_MFD_SY7636A=m -CONFIG_MFD_RDC321X=m -CONFIG_MFD_RT4831=m -CONFIG_MFD_RT5033=m -CONFIG_MFD_RT5120=m -CONFIG_MFD_RC5T583=y -CONFIG_MFD_SI476X_CORE=m -CONFIG_MFD_SIMPLE_MFD_I2C=m -CONFIG_MFD_SM501=m -CONFIG_MFD_SM501_GPIO=y -CONFIG_MFD_SKY81452=m -CONFIG_MFD_SYSCON=y -CONFIG_MFD_LP3943=m -CONFIG_MFD_LP8788=y -CONFIG_MFD_TI_LMU=m -CONFIG_MFD_BQ257XX=m -CONFIG_MFD_PALMAS=m -CONFIG_TPS6105X=m -CONFIG_TPS65010=m -CONFIG_TPS6507X=m -CONFIG_MFD_TPS65086=m -CONFIG_MFD_TPS65090=y -CONFIG_MFD_TI_LP873X=m -CONFIG_MFD_TPS6586X=y -CONFIG_MFD_TPS65910=y -CONFIG_MFD_TPS65912=m -CONFIG_MFD_TPS65912_I2C=m -CONFIG_MFD_TPS65912_SPI=m -CONFIG_MFD_TPS6594=m -CONFIG_MFD_TPS6594_I2C=m -CONFIG_MFD_TPS6594_SPI=m -CONFIG_TWL4030_CORE=y -CONFIG_MFD_TWL4030_AUDIO=y -CONFIG_TWL6040_CORE=y -CONFIG_MFD_LM3533=m -CONFIG_MFD_TQMX86=m -CONFIG_MFD_VX855=m -CONFIG_MFD_ARIZONA=m -CONFIG_MFD_ARIZONA_I2C=m -CONFIG_MFD_ARIZONA_SPI=m -CONFIG_MFD_CS47L24=y -CONFIG_MFD_WM5102=y -CONFIG_MFD_WM5110=y -CONFIG_MFD_WM8997=y -CONFIG_MFD_WM8998=y -CONFIG_MFD_WM8400=y -CONFIG_MFD_WM831X=y -CONFIG_MFD_WM831X_I2C=y -CONFIG_MFD_WM831X_SPI=y -CONFIG_MFD_WM8350=y -CONFIG_MFD_WM8350_I2C=y -CONFIG_MFD_WM8994=m -CONFIG_MFD_STMFX=m -CONFIG_MFD_WCD934X=m -CONFIG_MFD_ATC260X=m -CONFIG_MFD_ATC260X_I2C=m -CONFIG_RAVE_SP_CORE=m -CONFIG_MFD_INTEL_M10_BMC_CORE=m -CONFIG_MFD_INTEL_M10_BMC_SPI=m -CONFIG_MFD_INTEL_M10_BMC_PMCI=m -CONFIG_MFD_QNAP_MCU=m -CONFIG_MFD_UPBOARD_FPGA=m -CONFIG_MFD_MAX7360=m -# end of Multifunction device drivers - -CONFIG_REGULATOR=y -# CONFIG_REGULATOR_DEBUG is not set -CONFIG_REGULATOR_FIXED_VOLTAGE=m -CONFIG_REGULATOR_VIRTUAL_CONSUMER=m -CONFIG_REGULATOR_USERSPACE_CONSUMER=m -CONFIG_REGULATOR_NETLINK_EVENTS=y -CONFIG_REGULATOR_88PG86X=m -CONFIG_REGULATOR_88PM800=m -CONFIG_REGULATOR_88PM8607=m -CONFIG_REGULATOR_ACT8865=m -CONFIG_REGULATOR_AD5398=m -CONFIG_REGULATOR_ADP5055=m -CONFIG_REGULATOR_AAT2870=m -CONFIG_REGULATOR_ARIZONA_LDO1=m -CONFIG_REGULATOR_ARIZONA_MICSUPP=m -CONFIG_REGULATOR_AS3711=m -CONFIG_REGULATOR_ATC260X=m -CONFIG_REGULATOR_AW37503=m -CONFIG_REGULATOR_AXP20X=m -CONFIG_REGULATOR_BCM590XX=m -CONFIG_REGULATOR_BD9571MWV=m -CONFIG_REGULATOR_BQ257XX=m -CONFIG_REGULATOR_DA9052=m -CONFIG_REGULATOR_DA9055=m -CONFIG_REGULATOR_DA9062=m -CONFIG_REGULATOR_DA9210=m -CONFIG_REGULATOR_DA9211=m -CONFIG_REGULATOR_FAN53555=m -CONFIG_REGULATOR_GPIO=m -CONFIG_REGULATOR_ISL9305=m -CONFIG_REGULATOR_ISL6271A=m -CONFIG_REGULATOR_FP9931=m -CONFIG_REGULATOR_LM363X=m -CONFIG_REGULATOR_LP3971=m -CONFIG_REGULATOR_LP3972=m -CONFIG_REGULATOR_LP872X=m -CONFIG_REGULATOR_LP8755=m -CONFIG_REGULATOR_LP8788=m -CONFIG_REGULATOR_LTC3589=m -CONFIG_REGULATOR_LTC3676=m -CONFIG_REGULATOR_MAX14577=m -CONFIG_REGULATOR_MAX1586=m -CONFIG_REGULATOR_MAX77503=m -CONFIG_REGULATOR_MAX77541=m -CONFIG_REGULATOR_MAX77857=m -CONFIG_REGULATOR_MAX8649=m -CONFIG_REGULATOR_MAX8660=m -CONFIG_REGULATOR_MAX8893=m -CONFIG_REGULATOR_MAX8907=m -CONFIG_REGULATOR_MAX8925=m -CONFIG_REGULATOR_MAX8952=m -CONFIG_REGULATOR_MAX8997=m -CONFIG_REGULATOR_MAX8998=m -CONFIG_REGULATOR_MAX20086=m -CONFIG_REGULATOR_MAX20411=m -CONFIG_REGULATOR_MAX77693=m -CONFIG_REGULATOR_MAX77826=m -CONFIG_REGULATOR_MAX77838=m -CONFIG_REGULATOR_MC13XXX_CORE=m -CONFIG_REGULATOR_MC13783=m -CONFIG_REGULATOR_MC13892=m -CONFIG_REGULATOR_MP8859=m -CONFIG_REGULATOR_MT6311=m -CONFIG_REGULATOR_MT6323=m -CONFIG_REGULATOR_MT6331=m -CONFIG_REGULATOR_MT6332=m -CONFIG_REGULATOR_MT6357=m -CONFIG_REGULATOR_MT6358=m -CONFIG_REGULATOR_MT6359=m -CONFIG_REGULATOR_MT6360=m -CONFIG_REGULATOR_MT6370=m -CONFIG_REGULATOR_MT6397=m -CONFIG_REGULATOR_PALMAS=m -CONFIG_REGULATOR_PCA9450=m -CONFIG_REGULATOR_PF9453=m -CONFIG_REGULATOR_PCAP=m -CONFIG_REGULATOR_PF0900=m -CONFIG_REGULATOR_PV88060=m -CONFIG_REGULATOR_PV88080=m -CONFIG_REGULATOR_PV88090=m -CONFIG_REGULATOR_PWM=m -CONFIG_REGULATOR_RAA215300=m -CONFIG_REGULATOR_RC5T583=m -CONFIG_REGULATOR_RT4801=m -CONFIG_REGULATOR_RT4803=m -CONFIG_REGULATOR_RT4831=m -CONFIG_REGULATOR_RT5033=m -CONFIG_REGULATOR_RT5120=m -CONFIG_REGULATOR_RT5190A=m -CONFIG_REGULATOR_RT5739=m -CONFIG_REGULATOR_RT5759=m -CONFIG_REGULATOR_RT6160=m -CONFIG_REGULATOR_RT6190=m -CONFIG_REGULATOR_RT6245=m -CONFIG_REGULATOR_RT8092=m -CONFIG_REGULATOR_RTQ2134=m -CONFIG_REGULATOR_RTMV20=m -CONFIG_REGULATOR_RTQ6752=m -CONFIG_REGULATOR_RTQ2208=m -CONFIG_REGULATOR_SKY81452=m -CONFIG_REGULATOR_SLG51000=m -CONFIG_REGULATOR_SY7636A=m -CONFIG_REGULATOR_TPS51632=m -CONFIG_REGULATOR_TPS6105X=m -CONFIG_REGULATOR_TPS62360=m -CONFIG_REGULATOR_TPS65023=m -CONFIG_REGULATOR_TPS6507X=m -CONFIG_REGULATOR_TPS65086=m -CONFIG_REGULATOR_TPS65090=m -CONFIG_REGULATOR_TPS65132=m -CONFIG_REGULATOR_TPS65185=m -CONFIG_REGULATOR_TPS6524X=m -CONFIG_REGULATOR_TPS6586X=m -CONFIG_REGULATOR_TPS65910=m -CONFIG_REGULATOR_TPS65912=m -CONFIG_REGULATOR_TPS68470=m -CONFIG_REGULATOR_TWL4030=m -CONFIG_REGULATOR_WM831X=m -CONFIG_REGULATOR_WM8350=m -CONFIG_REGULATOR_WM8400=m -CONFIG_REGULATOR_WM8994=m -CONFIG_RC_CORE=y -CONFIG_BPF_LIRC_MODE2=y -CONFIG_LIRC=y -CONFIG_RC_MAP=m -CONFIG_RC_DECODERS=y -CONFIG_IR_IMON_DECODER=m -CONFIG_IR_JVC_DECODER=m -CONFIG_IR_MCE_KBD_DECODER=m -CONFIG_IR_NEC_DECODER=m -CONFIG_IR_RC5_DECODER=m -CONFIG_IR_RC6_DECODER=m -CONFIG_IR_RCMM_DECODER=m -CONFIG_IR_SANYO_DECODER=m -CONFIG_IR_SHARP_DECODER=m -CONFIG_IR_SONY_DECODER=m -CONFIG_IR_XMP_DECODER=m -CONFIG_RC_DEVICES=y -CONFIG_IR_ENE=m -CONFIG_IR_FINTEK=m -CONFIG_IR_IGORPLUGUSB=m -CONFIG_IR_IGUANA=m -CONFIG_IR_IMON=m -CONFIG_IR_IMON_RAW=m -CONFIG_IR_ITE_CIR=m -CONFIG_IR_MCEUSB=m -CONFIG_IR_NUVOTON=m -CONFIG_IR_REDRAT3=m -CONFIG_IR_SERIAL=m -CONFIG_IR_SERIAL_TRANSMITTER=y -CONFIG_IR_STREAMZAP=m -CONFIG_IR_TOY=m -CONFIG_IR_TTUSBIR=m -CONFIG_IR_WINBOND_CIR=m -CONFIG_RC_ATI_REMOTE=m -CONFIG_RC_LOOPBACK=m -CONFIG_RC_XBOX_DVD=m -CONFIG_CEC_CORE=m -CONFIG_CEC_NOTIFIER=y -CONFIG_CEC_PIN=y - -# -# CEC support -# -CONFIG_MEDIA_CEC_RC=y -# CONFIG_CEC_PIN_ERROR_INJ is not set -CONFIG_MEDIA_CEC_SUPPORT=y -CONFIG_CEC_CH7322=m -CONFIG_CEC_NXP_TDA9950=m -CONFIG_CEC_CROS_EC=m -CONFIG_CEC_GPIO=m -CONFIG_CEC_SECO=m -CONFIG_CEC_SECO_RC=y -CONFIG_USB_EXTRON_DA_HD_4K_PLUS_CEC=m -CONFIG_USB_PULSE8_CEC=m -CONFIG_USB_RAINSHADOW_CEC=m -# end of CEC support - -CONFIG_MEDIA_SUPPORT=m -CONFIG_MEDIA_SUPPORT_FILTER=y -CONFIG_MEDIA_SUBDRV_AUTOSELECT=y - -# -# Media device types -# -CONFIG_MEDIA_CAMERA_SUPPORT=y -CONFIG_MEDIA_ANALOG_TV_SUPPORT=y -CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y -CONFIG_MEDIA_RADIO_SUPPORT=y -# CONFIG_MEDIA_SDR_SUPPORT is not set -CONFIG_MEDIA_PLATFORM_SUPPORT=y -CONFIG_MEDIA_TEST_SUPPORT=y -# end of Media device types - -CONFIG_VIDEO_DEV=m -CONFIG_MEDIA_CONTROLLER=y -CONFIG_DVB_CORE=m - -# -# Video4Linux options -# -CONFIG_VIDEO_V4L2_I2C=y -CONFIG_VIDEO_V4L2_SUBDEV_API=y -# CONFIG_VIDEO_ADV_DEBUG is not set -# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set -CONFIG_VIDEO_TUNER=m -CONFIG_V4L2_MEM2MEM_DEV=m -CONFIG_V4L2_FLASH_LED_CLASS=m -CONFIG_V4L2_FWNODE=m -CONFIG_V4L2_ASYNC=m -CONFIG_V4L2_CCI=m -CONFIG_V4L2_CCI_I2C=m -# end of Video4Linux options - -# -# Media controller options -# -CONFIG_MEDIA_CONTROLLER_DVB=y -# end of Media controller options - -# -# Digital TV options -# -CONFIG_DVB_MMAP=y -CONFIG_DVB_NET=y -CONFIG_DVB_MAX_ADAPTERS=16 -CONFIG_DVB_DYNAMIC_MINORS=y -# CONFIG_DVB_DEMUX_SECTION_LOSS_LOG is not set -# CONFIG_DVB_ULE_DEBUG is not set -# end of Digital TV options - -# -# Media drivers -# - -# -# Drivers filtered as selected at 'Filter media drivers' -# - -# -# Media drivers -# -CONFIG_MEDIA_USB_SUPPORT=y - -# -# Webcam devices -# -CONFIG_USB_GSPCA=m -CONFIG_USB_GSPCA_BENQ=m -CONFIG_USB_GSPCA_CONEX=m -CONFIG_USB_GSPCA_CPIA1=m -CONFIG_USB_GSPCA_DTCS033=m -CONFIG_USB_GSPCA_ETOMS=m -CONFIG_USB_GSPCA_FINEPIX=m -CONFIG_USB_GSPCA_JEILINJ=m -CONFIG_USB_GSPCA_JL2005BCD=m -CONFIG_USB_GSPCA_KINECT=m -CONFIG_USB_GSPCA_KONICA=m -CONFIG_USB_GSPCA_MARS=m -CONFIG_USB_GSPCA_MR97310A=m -CONFIG_USB_GSPCA_NW80X=m -CONFIG_USB_GSPCA_OV519=m -CONFIG_USB_GSPCA_OV534=m -CONFIG_USB_GSPCA_OV534_9=m -CONFIG_USB_GSPCA_PAC207=m -CONFIG_USB_GSPCA_PAC7302=m -CONFIG_USB_GSPCA_PAC7311=m -CONFIG_USB_GSPCA_SE401=m -CONFIG_USB_GSPCA_SN9C2028=m -CONFIG_USB_GSPCA_SN9C20X=m -CONFIG_USB_GSPCA_SONIXB=m -CONFIG_USB_GSPCA_SONIXJ=m -CONFIG_USB_GSPCA_SPCA1528=m -CONFIG_USB_GSPCA_SPCA500=m -CONFIG_USB_GSPCA_SPCA501=m -CONFIG_USB_GSPCA_SPCA505=m -CONFIG_USB_GSPCA_SPCA506=m -CONFIG_USB_GSPCA_SPCA508=m -CONFIG_USB_GSPCA_SPCA561=m -CONFIG_USB_GSPCA_SQ905=m -CONFIG_USB_GSPCA_SQ905C=m -CONFIG_USB_GSPCA_SQ930X=m -CONFIG_USB_GSPCA_STK014=m -CONFIG_USB_GSPCA_STK1135=m -CONFIG_USB_GSPCA_STV0680=m -CONFIG_USB_GSPCA_SUNPLUS=m -CONFIG_USB_GSPCA_T613=m -CONFIG_USB_GSPCA_TOPRO=m -CONFIG_USB_GSPCA_TOUPTEK=m -CONFIG_USB_GSPCA_TV8532=m -CONFIG_USB_GSPCA_VC032X=m -CONFIG_USB_GSPCA_VICAM=m -CONFIG_USB_GSPCA_XIRLINK_CIT=m -CONFIG_USB_GSPCA_ZC3XX=m -CONFIG_USB_GL860=m -CONFIG_USB_M5602=m -CONFIG_USB_STV06XX=m -CONFIG_USB_PWC=m -# CONFIG_USB_PWC_DEBUG is not set -CONFIG_USB_PWC_INPUT_EVDEV=y -CONFIG_USB_S2255=m -CONFIG_VIDEO_USBTV=m -CONFIG_USB_VIDEO_CLASS=m -CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y - -# -# Analog TV USB devices -# -CONFIG_VIDEO_GO7007=m -CONFIG_VIDEO_GO7007_USB=m -CONFIG_VIDEO_GO7007_LOADER=m -CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m -CONFIG_VIDEO_HDPVR=m -CONFIG_VIDEO_PVRUSB2=m -CONFIG_VIDEO_PVRUSB2_SYSFS=y -CONFIG_VIDEO_PVRUSB2_DVB=y -# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set -CONFIG_VIDEO_STK1160=m - -# -# Analog/digital TV USB devices -# -CONFIG_VIDEO_AU0828=m -CONFIG_VIDEO_AU0828_V4L2=y -CONFIG_VIDEO_AU0828_RC=y -CONFIG_VIDEO_CX231XX=m -CONFIG_VIDEO_CX231XX_RC=y -CONFIG_VIDEO_CX231XX_ALSA=m -CONFIG_VIDEO_CX231XX_DVB=m - -# -# Digital TV USB devices -# -CONFIG_DVB_AS102=m -CONFIG_DVB_B2C2_FLEXCOP_USB=m -# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set -CONFIG_DVB_USB_V2=m -CONFIG_DVB_USB_AF9015=m -CONFIG_DVB_USB_AF9035=m -CONFIG_DVB_USB_ANYSEE=m -CONFIG_DVB_USB_AU6610=m -CONFIG_DVB_USB_AZ6007=m -CONFIG_DVB_USB_CE6230=m -CONFIG_DVB_USB_DVBSKY=m -CONFIG_DVB_USB_EC168=m -CONFIG_DVB_USB_GL861=m -CONFIG_DVB_USB_LME2510=m -CONFIG_DVB_USB_MXL111SF=m -CONFIG_DVB_USB_RTL28XXU=m -CONFIG_DVB_USB_ZD1301=m -CONFIG_DVB_USB=m -# CONFIG_DVB_USB_DEBUG is not set -CONFIG_DVB_USB_A800=m -CONFIG_DVB_USB_AF9005=m -CONFIG_DVB_USB_AF9005_REMOTE=m -CONFIG_DVB_USB_AZ6027=m -CONFIG_DVB_USB_CINERGY_T2=m -CONFIG_DVB_USB_CXUSB=m -CONFIG_DVB_USB_CXUSB_ANALOG=y -CONFIG_DVB_USB_DIB0700=m -CONFIG_DVB_USB_DIB3000MC=m -CONFIG_DVB_USB_DIBUSB_MB=m -CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y -CONFIG_DVB_USB_DIBUSB_MC=m -CONFIG_DVB_USB_DIGITV=m -CONFIG_DVB_USB_DTT200U=m -CONFIG_DVB_USB_DTV5100=m -CONFIG_DVB_USB_DW2102=m -CONFIG_DVB_USB_GP8PSK=m -CONFIG_DVB_USB_M920X=m -CONFIG_DVB_USB_NOVA_T_USB2=m -CONFIG_DVB_USB_OPERA1=m -CONFIG_DVB_USB_PCTV452E=m -CONFIG_DVB_USB_TECHNISAT_USB2=m -CONFIG_DVB_USB_TTUSB2=m -CONFIG_DVB_USB_UMT_010=m -CONFIG_DVB_USB_VP702X=m -CONFIG_DVB_USB_VP7045=m -CONFIG_SMS_USB_DRV=m -CONFIG_DVB_TTUSB_BUDGET=m -CONFIG_DVB_TTUSB_DEC=m - -# -# Webcam, TV (analog/digital) USB devices -# -CONFIG_VIDEO_EM28XX=m -CONFIG_VIDEO_EM28XX_V4L2=m -CONFIG_VIDEO_EM28XX_ALSA=m -CONFIG_VIDEO_EM28XX_DVB=m -CONFIG_VIDEO_EM28XX_RC=m -CONFIG_MEDIA_PCI_SUPPORT=y - -# -# Media capture support -# -CONFIG_VIDEO_MGB4=m -CONFIG_VIDEO_SOLO6X10=m -CONFIG_VIDEO_TW5864=m -CONFIG_VIDEO_TW68=m -CONFIG_VIDEO_TW686X=m -# CONFIG_VIDEO_ZORAN is not set - -# -# Media capture/analog TV support -# -CONFIG_VIDEO_DT3155=m -CONFIG_VIDEO_IVTV=m -CONFIG_VIDEO_IVTV_ALSA=m -# CONFIG_VIDEO_FB_IVTV is not set -CONFIG_VIDEO_HEXIUM_GEMINI=m -CONFIG_VIDEO_HEXIUM_ORION=m -CONFIG_VIDEO_MXB=m - -# -# Media capture/analog/hybrid TV support -# -CONFIG_VIDEO_BT848=m -CONFIG_DVB_BT8XX=m -CONFIG_VIDEO_CX18=m -CONFIG_VIDEO_CX18_ALSA=m -CONFIG_VIDEO_CX23885=m -CONFIG_MEDIA_ALTERA_CI=m -CONFIG_VIDEO_CX25821=m -CONFIG_VIDEO_CX25821_ALSA=m -CONFIG_VIDEO_CX88=m -CONFIG_VIDEO_CX88_ALSA=m -CONFIG_VIDEO_CX88_BLACKBIRD=m -CONFIG_VIDEO_CX88_DVB=m -CONFIG_VIDEO_CX88_ENABLE_VP3054=y -CONFIG_VIDEO_CX88_VP3054=m -CONFIG_VIDEO_CX88_MPEG=m -CONFIG_VIDEO_SAA7134=m -CONFIG_VIDEO_SAA7134_ALSA=m -CONFIG_VIDEO_SAA7134_RC=y -CONFIG_VIDEO_SAA7134_DVB=m -CONFIG_VIDEO_SAA7134_GO7007=m -CONFIG_VIDEO_SAA7164=m - -# -# Media digital TV PCI Adapters -# -CONFIG_DVB_B2C2_FLEXCOP_PCI=m -# CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set -CONFIG_DVB_DDBRIDGE=m -# CONFIG_DVB_DDBRIDGE_MSIENABLE is not set -CONFIG_DVB_DM1105=m -CONFIG_MANTIS_CORE=m -CONFIG_DVB_MANTIS=m -CONFIG_DVB_HOPPER=m -CONFIG_DVB_NETUP_UNIDVB=m -CONFIG_DVB_NGENE=m -CONFIG_DVB_PLUTO2=m -CONFIG_DVB_PT1=m -CONFIG_DVB_PT3=m -CONFIG_DVB_SMIPCIE=m -CONFIG_DVB_BUDGET_CORE=m -CONFIG_DVB_BUDGET=m -CONFIG_DVB_BUDGET_CI=m -CONFIG_DVB_BUDGET_AV=m -CONFIG_VIDEO_IPU3_CIO2=m -CONFIG_VIDEO_INTEL_IPU6=m -CONFIG_INTEL_VSC=m -CONFIG_IPU_BRIDGE=m -CONFIG_RADIO_ADAPTERS=m -CONFIG_RADIO_MAXIRADIO=m -CONFIG_RADIO_SAA7706H=m -CONFIG_RADIO_SHARK=m -CONFIG_RADIO_SHARK2=m -CONFIG_RADIO_SI4713=m -CONFIG_RADIO_SI476X=m -CONFIG_RADIO_TEA575X=m -CONFIG_RADIO_TEA5764=m -CONFIG_RADIO_TEF6862=m -CONFIG_USB_DSBR=m -CONFIG_USB_KEENE=m -CONFIG_USB_MA901=m -CONFIG_USB_MR800=m -CONFIG_USB_RAREMONO=m -CONFIG_RADIO_SI470X=m -CONFIG_USB_SI470X=m -CONFIG_I2C_SI470X=m -CONFIG_USB_SI4713=m -CONFIG_PLATFORM_SI4713=m -CONFIG_I2C_SI4713=m -CONFIG_MEDIA_PLATFORM_DRIVERS=y -CONFIG_V4L_PLATFORM_DRIVERS=y -CONFIG_DVB_PLATFORM_DRIVERS=y -CONFIG_V4L_MEM2MEM_DRIVERS=y -CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m - -# -# Allegro DVT media platform drivers -# - -# -# Amlogic media platform drivers -# - -# -# Amphion drivers -# - -# -# ARM media platform drivers -# - -# -# Aspeed media platform drivers -# - -# -# Atmel media platform drivers -# - -# -# Cadence media platform drivers -# -CONFIG_VIDEO_CADENCE_CSI2RX=m -CONFIG_VIDEO_CADENCE_CSI2TX=m - -# -# Chips&Media media platform drivers -# - -# -# Intel media platform drivers -# - -# -# Marvell media platform drivers -# -CONFIG_VIDEO_CAFE_CCIC=m - -# -# Mediatek media platform drivers -# - -# -# Microchip Technology, Inc. media platform drivers -# - -# -# Nuvoton media platform drivers -# - -# -# NVidia media platform drivers -# - -# -# NXP media platform drivers -# - -# -# Qualcomm media platform drivers -# - -# -# Raspberry Pi media platform drivers -# -CONFIG_VIDEO_RP1_CFE=m - -# -# Renesas media platform drivers -# - -# -# Rockchip media platform drivers -# - -# -# Samsung media platform drivers -# - -# -# STMicroelectronics media platform drivers -# - -# -# Sunxi media platform drivers -# - -# -# Texas Instruments drivers -# - -# -# Verisilicon media platform drivers -# - -# -# VIA media platform drivers -# - -# -# Xilinx media platform drivers -# - -# -# MMC/SDIO DVB adapters -# -CONFIG_SMS_SDIO_DRV=m -CONFIG_V4L_TEST_DRIVERS=y -CONFIG_VIDEO_VIM2M=m -CONFIG_VIDEO_VICODEC=m -CONFIG_VIDEO_VIMC=m -CONFIG_VIDEO_VIVID=m -CONFIG_VIDEO_VIVID_CEC=y -CONFIG_VIDEO_VIVID_OSD=y -CONFIG_VIDEO_VIVID_MAX_DEVS=64 -CONFIG_VIDEO_VISL=m -# CONFIG_VISL_DEBUGFS is not set -CONFIG_DVB_TEST_DRIVERS=y -CONFIG_DVB_VIDTV=m - -# -# FireWire (IEEE 1394) Adapters -# -CONFIG_DVB_FIREDTV=m -CONFIG_DVB_FIREDTV_INPUT=y -CONFIG_MEDIA_COMMON_OPTIONS=y - -# -# common driver options -# -CONFIG_CYPRESS_FIRMWARE=m -CONFIG_TTPCI_EEPROM=m -CONFIG_UVC_COMMON=m -CONFIG_VIDEO_CX2341X=m -CONFIG_VIDEO_TVEEPROM=m -CONFIG_DVB_B2C2_FLEXCOP=m -CONFIG_VIDEO_SAA7146=m -CONFIG_VIDEO_SAA7146_VV=m -CONFIG_SMS_SIANO_MDTV=m -CONFIG_SMS_SIANO_RC=y -# CONFIG_SMS_SIANO_DEBUGFS is not set -CONFIG_VIDEO_V4L2_TPG=m -CONFIG_VIDEOBUF2_CORE=m -CONFIG_VIDEOBUF2_V4L2=m -CONFIG_VIDEOBUF2_MEMOPS=m -CONFIG_VIDEOBUF2_DMA_CONTIG=m -CONFIG_VIDEOBUF2_VMALLOC=m -CONFIG_VIDEOBUF2_DMA_SG=m -CONFIG_VIDEOBUF2_DVB=m -# end of Media drivers - -CONFIG_MEDIA_HIDE_ANCILLARY_SUBDRV=y - -# -# Media ancillary drivers -# -CONFIG_MEDIA_ATTACH=y - -# -# IR I2C driver auto-selected by 'Autoselect ancillary drivers' -# -CONFIG_VIDEO_IR_I2C=m -CONFIG_VIDEO_CAMERA_SENSOR=y -CONFIG_VIDEO_APTINA_PLL=m -CONFIG_VIDEO_CCS_PLL=m -CONFIG_VIDEO_ALVIUM_CSI2=m -CONFIG_VIDEO_AR0521=m -CONFIG_VIDEO_GC0308=m -CONFIG_VIDEO_GC0310=m -CONFIG_VIDEO_GC05A2=m -CONFIG_VIDEO_GC08A3=m -CONFIG_VIDEO_GC2145=m -CONFIG_VIDEO_HI556=m -CONFIG_VIDEO_HI846=m -CONFIG_VIDEO_HI847=m -CONFIG_VIDEO_IMX111=m -CONFIG_VIDEO_IMX208=m -CONFIG_VIDEO_IMX214=m -CONFIG_VIDEO_IMX219=m -CONFIG_VIDEO_IMX258=m -CONFIG_VIDEO_IMX274=m -CONFIG_VIDEO_IMX283=m -CONFIG_VIDEO_IMX290=m -CONFIG_VIDEO_IMX296=m -CONFIG_VIDEO_IMX319=m -CONFIG_VIDEO_IMX355=m -CONFIG_VIDEO_MAX9271_LIB=m -CONFIG_VIDEO_MT9M001=m -CONFIG_VIDEO_MT9M111=m -CONFIG_VIDEO_MT9M114=m -CONFIG_VIDEO_MT9P031=m -CONFIG_VIDEO_MT9T112=m -CONFIG_VIDEO_MT9V011=m -CONFIG_VIDEO_MT9V111=m -CONFIG_VIDEO_OG01A1B=m -CONFIG_VIDEO_OG0VE1B=m -CONFIG_VIDEO_OS05B10=m -CONFIG_VIDEO_OV01A10=m -CONFIG_VIDEO_OV02A10=m -CONFIG_VIDEO_OV02E10=m -CONFIG_VIDEO_OV02C10=m -CONFIG_VIDEO_OV08D10=m -CONFIG_VIDEO_OV08X40=m -CONFIG_VIDEO_OV13858=m -CONFIG_VIDEO_OV13B10=m -CONFIG_VIDEO_OV2640=m -CONFIG_VIDEO_OV2659=m -CONFIG_VIDEO_OV2680=m -CONFIG_VIDEO_OV2685=m -CONFIG_VIDEO_OV2735=m -CONFIG_VIDEO_OV2740=m -CONFIG_VIDEO_OV4689=m -CONFIG_VIDEO_OV5647=m -CONFIG_VIDEO_OV5648=m -CONFIG_VIDEO_OV5670=m -CONFIG_VIDEO_OV5675=m -CONFIG_VIDEO_OV5693=m -CONFIG_VIDEO_OV5695=m -CONFIG_VIDEO_OV6211=m -CONFIG_VIDEO_OV64A40=m -CONFIG_VIDEO_OV7251=m -CONFIG_VIDEO_OV7640=m -CONFIG_VIDEO_OV7670=m -CONFIG_VIDEO_OV772X=m -CONFIG_VIDEO_OV7740=m -CONFIG_VIDEO_OV8856=m -CONFIG_VIDEO_OV8858=m -CONFIG_VIDEO_OV8865=m -CONFIG_VIDEO_OV9640=m -CONFIG_VIDEO_OV9650=m -CONFIG_VIDEO_OV9734=m -CONFIG_VIDEO_RDACM20=m -CONFIG_VIDEO_RDACM21=m -CONFIG_VIDEO_RJ54N1=m -CONFIG_VIDEO_S5C73M3=m -CONFIG_VIDEO_S5K3M5=m -CONFIG_VIDEO_S5K5BAF=m -CONFIG_VIDEO_S5K6A3=m -CONFIG_VIDEO_S5KJN1=m -CONFIG_VIDEO_T4KA3=m -CONFIG_VIDEO_VD55G1=m -CONFIG_VIDEO_VD56G3=m -CONFIG_VIDEO_CCS=m -CONFIG_VIDEO_ET8EK8=m - -# -# Camera ISPs -# -CONFIG_VIDEO_THP7312=m -# end of Camera ISPs - -CONFIG_VIDEO_CAMERA_LENS=y -CONFIG_VIDEO_AD5820=m -CONFIG_VIDEO_AK7375=m -CONFIG_VIDEO_DW9714=m -CONFIG_VIDEO_DW9719=m -CONFIG_VIDEO_DW9768=m -CONFIG_VIDEO_DW9807_VCM=m - -# -# Flash devices -# -CONFIG_VIDEO_ADP1653=m -CONFIG_VIDEO_LM3560=m -CONFIG_VIDEO_LM3646=m -# end of Flash devices - -# -# audio, video and radio I2C drivers auto-selected by 'Autoselect ancillary drivers' -# -CONFIG_VIDEO_CS3308=m -CONFIG_VIDEO_CS5345=m -CONFIG_VIDEO_CS53L32A=m -CONFIG_VIDEO_MSP3400=m -CONFIG_VIDEO_SONY_BTF_MPX=m -CONFIG_VIDEO_TDA7432=m -CONFIG_VIDEO_TDA9840=m -CONFIG_VIDEO_TEA6415C=m -CONFIG_VIDEO_TEA6420=m -CONFIG_VIDEO_TVAUDIO=m -CONFIG_VIDEO_UDA1342=m -CONFIG_VIDEO_VP27SMPX=m -CONFIG_VIDEO_WM8739=m -CONFIG_VIDEO_WM8775=m -CONFIG_VIDEO_SAA6588=m -CONFIG_VIDEO_SAA711X=m -CONFIG_VIDEO_TVP5150=m -CONFIG_VIDEO_TW2804=m -CONFIG_VIDEO_TW9903=m -CONFIG_VIDEO_TW9906=m - -# -# Video and audio decoders -# -CONFIG_VIDEO_SAA717X=m -CONFIG_VIDEO_CX25840=m -CONFIG_VIDEO_SAA7127=m -CONFIG_VIDEO_UPD64031A=m -CONFIG_VIDEO_UPD64083=m -CONFIG_VIDEO_SAA6752HS=m -CONFIG_VIDEO_M52790=m - -# -# Video serializers and deserializers -# -CONFIG_VIDEO_MAX96717=m -# end of Video serializers and deserializers - -# -# SPI I2C drivers auto-selected by 'Autoselect ancillary drivers' -# - -# -# Media SPI Adapters -# -CONFIG_CXD2880_SPI_DRV=m -CONFIG_VIDEO_GS1662=m -# end of Media SPI Adapters - -CONFIG_MEDIA_TUNER=m - -# -# Tuner drivers auto-selected by 'Autoselect ancillary drivers' -# -CONFIG_MEDIA_TUNER_E4000=m -CONFIG_MEDIA_TUNER_FC0011=m -CONFIG_MEDIA_TUNER_FC0012=m -CONFIG_MEDIA_TUNER_FC0013=m -CONFIG_MEDIA_TUNER_FC2580=m -CONFIG_MEDIA_TUNER_IT913X=m -CONFIG_MEDIA_TUNER_M88RS6000T=m -CONFIG_MEDIA_TUNER_MAX2165=m -CONFIG_MEDIA_TUNER_MC44S803=m -CONFIG_MEDIA_TUNER_MT2060=m -CONFIG_MEDIA_TUNER_MT2063=m -CONFIG_MEDIA_TUNER_MT20XX=m -CONFIG_MEDIA_TUNER_MT2131=m -CONFIG_MEDIA_TUNER_MT2266=m -CONFIG_MEDIA_TUNER_MXL301RF=m -CONFIG_MEDIA_TUNER_MXL5005S=m -CONFIG_MEDIA_TUNER_MXL5007T=m -CONFIG_MEDIA_TUNER_QM1D1B0004=m -CONFIG_MEDIA_TUNER_QM1D1C0042=m -CONFIG_MEDIA_TUNER_QT1010=m -CONFIG_MEDIA_TUNER_R820T=m -CONFIG_MEDIA_TUNER_SI2157=m -CONFIG_MEDIA_TUNER_SIMPLE=m -CONFIG_MEDIA_TUNER_TDA18212=m -CONFIG_MEDIA_TUNER_TDA18218=m -CONFIG_MEDIA_TUNER_TDA18250=m -CONFIG_MEDIA_TUNER_TDA18271=m -CONFIG_MEDIA_TUNER_TDA827X=m -CONFIG_MEDIA_TUNER_TDA8290=m -CONFIG_MEDIA_TUNER_TDA9887=m -CONFIG_MEDIA_TUNER_TEA5761=m -CONFIG_MEDIA_TUNER_TEA5767=m -CONFIG_MEDIA_TUNER_TUA9001=m -CONFIG_MEDIA_TUNER_XC2028=m -CONFIG_MEDIA_TUNER_XC4000=m -CONFIG_MEDIA_TUNER_XC5000=m - -# -# DVB Frontend drivers auto-selected by 'Autoselect ancillary drivers' -# - -# -# Multistandard (satellite) frontends -# -CONFIG_DVB_M88DS3103=m -CONFIG_DVB_MXL5XX=m -CONFIG_DVB_STB0899=m -CONFIG_DVB_STB6100=m -CONFIG_DVB_STV090x=m -CONFIG_DVB_STV0910=m -CONFIG_DVB_STV6110x=m -CONFIG_DVB_STV6111=m - -# -# Multistandard (cable + terrestrial) frontends -# -CONFIG_DVB_DRXK=m -CONFIG_DVB_MN88472=m -CONFIG_DVB_MN88473=m -CONFIG_DVB_SI2165=m -CONFIG_DVB_TDA18271C2DD=m - -# -# DVB-S (satellite) frontends -# -CONFIG_DVB_CX24110=m -CONFIG_DVB_CX24116=m -CONFIG_DVB_CX24117=m -CONFIG_DVB_CX24120=m -CONFIG_DVB_CX24123=m -CONFIG_DVB_DS3000=m -CONFIG_DVB_MB86A16=m -CONFIG_DVB_MT312=m -CONFIG_DVB_S5H1420=m -CONFIG_DVB_SI21XX=m -CONFIG_DVB_STB6000=m -CONFIG_DVB_STV0288=m -CONFIG_DVB_STV0299=m -CONFIG_DVB_STV0900=m -CONFIG_DVB_STV6110=m -CONFIG_DVB_TDA10071=m -CONFIG_DVB_TDA10086=m -CONFIG_DVB_TDA8083=m -CONFIG_DVB_TDA8261=m -CONFIG_DVB_TDA826X=m -CONFIG_DVB_TS2020=m -CONFIG_DVB_TUA6100=m -CONFIG_DVB_TUNER_CX24113=m -CONFIG_DVB_TUNER_ITD1000=m -CONFIG_DVB_VES1X93=m -CONFIG_DVB_ZL10036=m -CONFIG_DVB_ZL10039=m - -# -# DVB-T (terrestrial) frontends -# -CONFIG_DVB_AF9013=m -CONFIG_DVB_AS102_FE=m -CONFIG_DVB_CX22700=m -CONFIG_DVB_CX22702=m -CONFIG_DVB_CXD2820R=m -CONFIG_DVB_CXD2841ER=m -CONFIG_DVB_DIB3000MB=m -CONFIG_DVB_DIB3000MC=m -CONFIG_DVB_DIB7000M=m -CONFIG_DVB_DIB7000P=m -CONFIG_DVB_DRXD=m -CONFIG_DVB_EC100=m -CONFIG_DVB_GP8PSK_FE=m -CONFIG_DVB_L64781=m -CONFIG_DVB_MT352=m -CONFIG_DVB_NXT6000=m -CONFIG_DVB_RTL2830=m -CONFIG_DVB_RTL2832=m -CONFIG_DVB_SI2168=m -CONFIG_DVB_SP887X=m -CONFIG_DVB_STV0367=m -CONFIG_DVB_TDA10048=m -CONFIG_DVB_TDA1004X=m -CONFIG_DVB_ZD1301_DEMOD=m -CONFIG_DVB_ZL10353=m - -# -# DVB-C (cable) frontends -# -CONFIG_DVB_STV0297=m -CONFIG_DVB_TDA10021=m -CONFIG_DVB_TDA10023=m -CONFIG_DVB_VES1820=m - -# -# ATSC (North American/Korean Terrestrial/Cable DTV) frontends -# -CONFIG_DVB_AU8522=m -CONFIG_DVB_AU8522_DTV=m -CONFIG_DVB_AU8522_V4L=m -CONFIG_DVB_BCM3510=m -CONFIG_DVB_LG2160=m -CONFIG_DVB_LGDT3305=m -CONFIG_DVB_LGDT3306A=m -CONFIG_DVB_LGDT330X=m -CONFIG_DVB_MXL692=m -CONFIG_DVB_NXT200X=m -CONFIG_DVB_OR51132=m -CONFIG_DVB_OR51211=m -CONFIG_DVB_S5H1409=m -CONFIG_DVB_S5H1411=m - -# -# ISDB-T (terrestrial) frontends -# -CONFIG_DVB_DIB8000=m -CONFIG_DVB_MB86A20S=m -CONFIG_DVB_S921=m - -# -# ISDB-S (satellite) & ISDB-T (terrestrial) frontends -# -CONFIG_DVB_TC90522=m - -# -# Digital terrestrial only tuners/PLL -# -CONFIG_DVB_PLL=m -CONFIG_DVB_TUNER_DIB0070=m -CONFIG_DVB_TUNER_DIB0090=m - -# -# SEC control devices for DVB-S -# -CONFIG_DVB_A8293=m -CONFIG_DVB_AF9033=m -CONFIG_DVB_ASCOT2E=m -CONFIG_DVB_ATBM8830=m -CONFIG_DVB_HELENE=m -CONFIG_DVB_HORUS3A=m -CONFIG_DVB_ISL6405=m -CONFIG_DVB_ISL6421=m -CONFIG_DVB_ISL6423=m -CONFIG_DVB_IX2505V=m -CONFIG_DVB_LGS8GXX=m -CONFIG_DVB_LNBH25=m -CONFIG_DVB_LNBP21=m -CONFIG_DVB_LNBP22=m -CONFIG_DVB_M88RS2000=m -CONFIG_DVB_TDA665x=m -CONFIG_DVB_DRX39XYJ=m - -# -# Common Interface (EN50221) controller drivers -# -CONFIG_DVB_CXD2099=m -CONFIG_DVB_SP2=m - -# -# Tools to develop new frontends -# -CONFIG_DVB_DUMMY_FE=m -# end of Media ancillary drivers - -# -# Graphics support -# -CONFIG_APERTURE_HELPERS=y -CONFIG_SCREEN_INFO=y -CONFIG_VIDEO=y -# CONFIG_AUXDISPLAY is not set -# CONFIG_PANEL is not set -CONFIG_AGP=y -CONFIG_AGP_AMD64=m -CONFIG_AGP_INTEL=m -CONFIG_AGP_SIS=m -CONFIG_AGP_VIA=m -CONFIG_INTEL_GTT=m -CONFIG_VGA_SWITCHEROO=y -CONFIG_GPU_BUDDY=y -CONFIG_DRM=y - -# -# DRM debugging options -# -# CONFIG_DRM_DEBUG_MM is not set -# end of DRM debugging options - -CONFIG_DRM_MIPI_DBI=m -CONFIG_DRM_MIPI_DSI=y -CONFIG_DRM_KMS_HELPER=y -CONFIG_DRM_DRAW=y -CONFIG_DRM_PANIC=y -CONFIG_DRM_PANIC_FOREGROUND_COLOR=0xffffff -CONFIG_DRM_PANIC_BACKGROUND_COLOR=0x0000aa -# CONFIG_DRM_PANIC_DEBUG is not set -CONFIG_DRM_PANIC_SCREEN="kmsg" -CONFIG_DRM_RAS=y -CONFIG_DRM_CLIENT=y -CONFIG_DRM_CLIENT_LIB=y -CONFIG_DRM_CLIENT_SELECTION=y -CONFIG_DRM_CLIENT_SETUP=y - -# -# Supported DRM clients -# -CONFIG_DRM_FBDEV_EMULATION=y -CONFIG_DRM_FBDEV_OVERALLOC=100 -CONFIG_DRM_CLIENT_LOG=y -CONFIG_DRM_CLIENT_DEFAULT_FBDEV=y -# CONFIG_DRM_CLIENT_DEFAULT_LOG is not set -CONFIG_DRM_CLIENT_DEFAULT="fbdev" -# end of Supported DRM clients - -CONFIG_DRM_LOAD_EDID_FIRMWARE=y -CONFIG_DRM_DISPLAY_HELPER=m -CONFIG_DRM_DISPLAY_DP_AUX_CEC=y -CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y -CONFIG_DRM_DISPLAY_DP_HELPER=y -CONFIG_DRM_DISPLAY_DP_TUNNEL=y -CONFIG_DRM_DISPLAY_DSC_HELPER=y -CONFIG_DRM_DISPLAY_HDCP_HELPER=y -CONFIG_DRM_DISPLAY_HDMI_CEC_NOTIFIER_HELPER=y -CONFIG_DRM_DISPLAY_HDMI_HELPER=y -CONFIG_DRM_TTM=m -CONFIG_DRM_EXEC=m -CONFIG_DRM_GPUVM=m -CONFIG_DRM_GPUSVM=m -CONFIG_DRM_BUDDY=m -CONFIG_DRM_VRAM_HELPER=m -CONFIG_DRM_TTM_HELPER=m -CONFIG_DRM_GEM_DMA_HELPER=m -CONFIG_DRM_GEM_SHMEM_HELPER=y -CONFIG_DRM_SUBALLOC_HELPER=m -CONFIG_DRM_SCHED=m -CONFIG_DRM_PANEL_BACKLIGHT_QUIRKS=m -CONFIG_DRM_PRIVACY_SCREEN=y -CONFIG_DRM_AMDGPU=m -CONFIG_DRM_AMDGPU_SI=y -CONFIG_DRM_AMDGPU_CIK=y -CONFIG_DRM_AMDGPU_USERPTR=y -CONFIG_DRM_AMD_ISP=y - -# -# ACP (Audio CoProcessor) Configuration -# -CONFIG_DRM_AMD_ACP=y -# end of ACP (Audio CoProcessor) Configuration - -# -# Display Engine Configuration -# -CONFIG_DRM_AMD_DC=y -CONFIG_DRM_AMD_DC_FP=y -CONFIG_DRM_AMD_DC_SI=y -CONFIG_DRM_AMD_SECURE_DISPLAY=y -# end of Display Engine Configuration - -CONFIG_HSA_AMD=y -CONFIG_HSA_AMD_SVM=y -CONFIG_HSA_AMD_P2P=y - -# -# ARM devices -# -# end of ARM devices - -CONFIG_DRM_AST=m -CONFIG_DRM_BRIDGE=y -CONFIG_DRM_PANEL_BRIDGE=y - -# -# Display Interface Bridges -# -CONFIG_DRM_I2C_NXP_TDA998X=m -CONFIG_DRM_ANALOGIX_ANX78XX=m -CONFIG_DRM_ANALOGIX_DP=m -# end of Display Interface Bridges - -# CONFIG_DRM_ETNAVIV is not set -CONFIG_DRM_GMA500=m -CONFIG_DRM_GUD=m -CONFIG_DRM_HISI_HIBMC=m -CONFIG_DRM_HYPERV=m -CONFIG_DRM_I915=m -CONFIG_DRM_I915_FORCE_PROBE="*" -CONFIG_DRM_I915_CAPTURE_ERROR=y -CONFIG_DRM_I915_COMPRESS_ERROR=y -CONFIG_DRM_I915_USERPTR=y -CONFIG_DRM_I915_GVT_KVMGT=m -CONFIG_DRM_I915_PXP=y -CONFIG_DRM_I915_DP_TUNNEL=y -CONFIG_DRM_I915_REQUEST_TIMEOUT=20000 -CONFIG_DRM_I915_FENCE_TIMEOUT=10000 -CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND=250 -CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500 -CONFIG_DRM_I915_PREEMPT_TIMEOUT=640 -CONFIG_DRM_I915_PREEMPT_TIMEOUT_COMPUTE=7500 -CONFIG_DRM_I915_MAX_REQUEST_BUSYWAIT=8000 -CONFIG_DRM_I915_STOP_TIMEOUT=100 -CONFIG_DRM_I915_TIMESLICE_DURATION=1 -CONFIG_DRM_I915_GVT=y -CONFIG_DRM_MGAG200=m -CONFIG_DRM_NOUVEAU=m -CONFIG_NOUVEAU_DEBUG=5 -CONFIG_NOUVEAU_DEBUG_DEFAULT=3 -# CONFIG_NOUVEAU_DEBUG_MMU is not set -# CONFIG_NOUVEAU_DEBUG_PUSH is not set -CONFIG_DRM_NOUVEAU_BACKLIGHT=y -CONFIG_DRM_NOUVEAU_SVM=y -CONFIG_DRM_NOUVEAU_CH7006=m -CONFIG_DRM_NOUVEAU_SIL164=m -CONFIG_DRM_PANEL=y - -# -# Display Panels -# -CONFIG_DRM_PANEL_AUO_A030JTN01=m -CONFIG_DRM_PANEL_ILITEK_ILI9341=m -CONFIG_DRM_PANEL_ORISETECH_OTA5601A=m -CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m -CONFIG_DRM_PANEL_WIDECHIPS_WS2401=m -# end of Display Panels - -CONFIG_DRM_QXL=m -CONFIG_DRM_RADEON=m -CONFIG_DRM_RADEON_USERPTR=y -CONFIG_DRM_ST7571=m -CONFIG_DRM_ST7571_I2C=m -CONFIG_DRM_ST7571_SPI=m -CONFIG_DRM_ST7586=m -CONFIG_DRM_ST7735R=m -CONFIG_DRM_ST7920=m -CONFIG_DRM_SSD130X=m -CONFIG_DRM_SSD130X_I2C=m -CONFIG_DRM_SSD130X_SPI=m - -# -# Drivers for system framebuffers -# -CONFIG_DRM_SYSFB_HELPER=y -CONFIG_DRM_COREBOOTDRM=m -CONFIG_DRM_SIMPLEDRM=y -# end of Drivers for system framebuffers - -CONFIG_DRM_APPLETBDRM=m -CONFIG_DRM_BOCHS=m -CONFIG_DRM_CIRRUS_QEMU=m -CONFIG_DRM_GM12U320=m -CONFIG_DRM_PANEL_MIPI_DBI=m -CONFIG_DRM_PIXPAPER=m -CONFIG_TINYDRM_HX8357D=m -CONFIG_TINYDRM_ILI9163=m -CONFIG_TINYDRM_ILI9225=m -CONFIG_TINYDRM_ILI9341=m -CONFIG_TINYDRM_ILI9486=m -CONFIG_TINYDRM_MI0283QT=m -CONFIG_TINYDRM_REPAPER=m -CONFIG_TINYDRM_SHARP_MEMORY=m -CONFIG_DRM_UDL=m -CONFIG_DRM_VBOXVIDEO=m -CONFIG_DRM_VGEM=m -CONFIG_DRM_VIRTIO_GPU=m -CONFIG_DRM_VIRTIO_GPU_KMS=y -CONFIG_DRM_VKMS=m -CONFIG_DRM_VMWGFX=m -CONFIG_DRM_VMWGFX_MKSSTATS=y -CONFIG_DRM_XE=m -CONFIG_DRM_XE_DISPLAY=y -CONFIG_DRM_XE_DP_TUNNEL=y -CONFIG_DRM_XE_GPUSVM=y -CONFIG_DRM_XE_PAGEMAP=y -CONFIG_DRM_XE_FORCE_PROBE="" -CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000 -CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1 -CONFIG_DRM_XE_TIMESLICE_MAX=10000000 -CONFIG_DRM_XE_TIMESLICE_MIN=1 -CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000 -CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000 -CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1 -CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y -CONFIG_DRM_XEN=y -CONFIG_DRM_XEN_FRONTEND=m -CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y - -# -# Frame buffer Devices -# -CONFIG_FB=y -# CONFIG_FB_CIRRUS is not set -# CONFIG_FB_PM2 is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_ARC is not set -# CONFIG_FB_ASILIANT is not set -# CONFIG_FB_IMSTT is not set -# CONFIG_FB_VGA16 is not set -# CONFIG_FB_UVESA is not set -CONFIG_FB_VESA=y -CONFIG_FB_EFI=y -# CONFIG_FB_N411 is not set -# CONFIG_FB_HGA is not set -# CONFIG_FB_OPENCORES is not set -# CONFIG_FB_S1D13XXX is not set -# CONFIG_FB_NVIDIA is not set -# CONFIG_FB_RIVA is not set -# CONFIG_FB_I740 is not set -# CONFIG_FB_RADEON is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_SAVAGE is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_VIA is not set -# CONFIG_FB_NEOMAGIC is not set -# CONFIG_FB_KYRO is not set -# CONFIG_FB_3DFX is not set -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_PM3 is not set -# CONFIG_FB_CARMINE is not set -# CONFIG_FB_SM501 is not set -# CONFIG_FB_SMSCUFX is not set -# CONFIG_FB_UDL is not set -# CONFIG_FB_IBM_GXT4500 is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_XEN_FBDEV_FRONTEND=m -# CONFIG_FB_METRONOME is not set -# CONFIG_FB_MB862XX is not set -# CONFIG_FB_SSD1307 is not set -# CONFIG_FB_SM712 is not set -CONFIG_FB_CORE=y -CONFIG_FB_NOTIFY=y -CONFIG_FB_DEVICE=y -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -CONFIG_FB_SYS_FILLRECT=y -CONFIG_FB_SYS_COPYAREA=y -CONFIG_FB_SYS_IMAGEBLIT=y -# CONFIG_FB_FOREIGN_ENDIAN is not set -CONFIG_FB_SYSMEM_FOPS=y -CONFIG_FB_DEFERRED_IO=y -CONFIG_FB_DMAMEM_HELPERS=y -CONFIG_FB_DMAMEM_HELPERS_DEFERRED=y -CONFIG_FB_IOMEM_FOPS=y -CONFIG_FB_IOMEM_HELPERS=y -CONFIG_FB_SYSMEM_HELPERS=y -CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y -# CONFIG_FB_TILEBLITTING is not set -# end of Frame buffer Devices - -# -# Backlight & LCD device support -# -CONFIG_LCD_CLASS_DEVICE=m -CONFIG_LCD_L4F00242T03=m -CONFIG_LCD_LMS283GF05=m -CONFIG_LCD_LTV350QV=m -CONFIG_LCD_ILI922X=m -CONFIG_LCD_ILI9320=m -CONFIG_LCD_TDO24M=m -CONFIG_LCD_VGG2432A4=m -CONFIG_LCD_PLATFORM=m -CONFIG_LCD_AMS369FG06=m -CONFIG_LCD_LMS501KF03=m -CONFIG_LCD_HX8357=m -CONFIG_LCD_OTM3225A=m -CONFIG_BACKLIGHT_CLASS_DEVICE=y -CONFIG_BACKLIGHT_AW99706=m -CONFIG_BACKLIGHT_KTD253=m -CONFIG_BACKLIGHT_KTD2801=m -CONFIG_BACKLIGHT_KTZ8866=m -CONFIG_BACKLIGHT_LM3533=m -CONFIG_BACKLIGHT_PWM=m -CONFIG_BACKLIGHT_CGBC=m -CONFIG_BACKLIGHT_DA903X=m -CONFIG_BACKLIGHT_DA9052=m -CONFIG_BACKLIGHT_MAX8925=m -CONFIG_BACKLIGHT_MT6370=m -CONFIG_BACKLIGHT_APPLE=m -CONFIG_BACKLIGHT_QCOM_WLED=m -CONFIG_BACKLIGHT_RT4831=m -CONFIG_BACKLIGHT_SAHARA=m -CONFIG_BACKLIGHT_WM831X=m -CONFIG_BACKLIGHT_ADP5520=m -CONFIG_BACKLIGHT_ADP8860=m -CONFIG_BACKLIGHT_ADP8870=m -CONFIG_BACKLIGHT_88PM860X=m -CONFIG_BACKLIGHT_AAT2870=m -CONFIG_BACKLIGHT_LM3509=m -CONFIG_BACKLIGHT_LM3630A=m -CONFIG_BACKLIGHT_LM3639=m -CONFIG_BACKLIGHT_LP855X=m -CONFIG_BACKLIGHT_LP8788=m -CONFIG_BACKLIGHT_MP3309C=m -CONFIG_BACKLIGHT_PANDORA=m -CONFIG_BACKLIGHT_SKY81452=m -CONFIG_BACKLIGHT_AS3711=m -CONFIG_BACKLIGHT_GPIO=m -CONFIG_BACKLIGHT_LV5207LP=m -CONFIG_BACKLIGHT_BD6107=m -CONFIG_BACKLIGHT_ARCXCNN=m -CONFIG_BACKLIGHT_RAVE_SP=m -# end of Backlight & LCD device support - -CONFIG_VIDEOMODE_HELPERS=y -CONFIG_HDMI=y -# CONFIG_FIRMWARE_EDID is not set - -# -# Console display driver support -# -CONFIG_VGA_CONSOLE=y -CONFIG_DUMMY_CONSOLE=y -CONFIG_DUMMY_CONSOLE_COLUMNS=80 -CONFIG_DUMMY_CONSOLE_ROWS=25 -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set -CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y -CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y -CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y -# end of Console display driver support - -# CONFIG_LOGO is not set -CONFIG_TRACE_GPU_MEM=y -# end of Graphics support - -CONFIG_DRM_ACCEL=y -CONFIG_DRM_ACCEL_AMDXDNA=m -CONFIG_DRM_ACCEL_HABANALABS=m -CONFIG_HL_HLDIO=y -CONFIG_DRM_ACCEL_IVPU=m -# CONFIG_DRM_ACCEL_IVPU_DEBUG is not set -CONFIG_DRM_ACCEL_QAIC=m -CONFIG_SOUND=m -CONFIG_SOUND_OSS_CORE=y -# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set -CONFIG_SND=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -CONFIG_SND_PCM_ELD=y -CONFIG_SND_PCM_IEC958=y -CONFIG_SND_DMAENGINE_PCM=m -CONFIG_SND_HWDEP=m -CONFIG_SND_SEQ_DEVICE=m -CONFIG_SND_RAWMIDI=m -CONFIG_SND_UMP=m -CONFIG_SND_UMP_LEGACY_RAWMIDI=y -CONFIG_SND_COMPRESS_OFFLOAD=m -CONFIG_SND_JACK=y -CONFIG_SND_JACK_INPUT_DEV=y -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=m -CONFIG_SND_PCM_OSS=m -CONFIG_SND_PCM_OSS_PLUGINS=y -CONFIG_SND_PCM_TIMER=y -CONFIG_SND_HRTIMER=m -CONFIG_SND_DYNAMIC_MINORS=y -CONFIG_SND_MAX_CARDS=32 -# CONFIG_SND_SUPPORT_OLD_API is not set -CONFIG_SND_PROC_FS=y -CONFIG_SND_VERBOSE_PROCFS=y -CONFIG_SND_CTL_FAST_LOOKUP=y -CONFIG_SND_DEBUG=y -# CONFIG_SND_DEBUG_VERBOSE is not set -# CONFIG_SND_PCM_XRUN_DEBUG is not set -CONFIG_SND_CTL_INPUT_VALIDATION=y -# CONFIG_SND_CTL_DEBUG is not set -# CONFIG_SND_JACK_INJECTION_DEBUG is not set -CONFIG_SND_UTIMER=y -CONFIG_SND_VMASTER=y -CONFIG_SND_DMA_SGBUF=y -CONFIG_SND_CTL_LED=m -CONFIG_SND_SEQUENCER=m -CONFIG_SND_SEQ_DUMMY=m -CONFIG_SND_SEQUENCER_OSS=m -CONFIG_SND_SEQ_HRTIMER_DEFAULT=y -CONFIG_SND_SEQ_MIDI_EVENT=m -CONFIG_SND_SEQ_MIDI=m -CONFIG_SND_SEQ_MIDI_EMUL=m -CONFIG_SND_SEQ_VIRMIDI=m -CONFIG_SND_SEQ_UMP=y -CONFIG_SND_SEQ_UMP_CLIENT=m -CONFIG_SND_MPU401_UART=m -CONFIG_SND_OPL3_LIB=m -CONFIG_SND_OPL3_LIB_SEQ=m -CONFIG_SND_VX_LIB=m -CONFIG_SND_AC97_CODEC=m -CONFIG_SND_DRIVERS=y -# CONFIG_SND_PCSP is not set -CONFIG_SND_DUMMY=m -CONFIG_SND_ALOOP=m -CONFIG_SND_PCMTEST=m -CONFIG_SND_VIRMIDI=m -CONFIG_SND_MTPAV=m -CONFIG_SND_MTS64=m -CONFIG_SND_SERIAL_U16550=m -CONFIG_SND_MPU401=m -CONFIG_SND_PORTMAN2X4=m -CONFIG_SND_AC97_POWER_SAVE=y -CONFIG_SND_AC97_POWER_SAVE_DEFAULT=10 -CONFIG_SND_SB_COMMON=m -CONFIG_SND_PCI=y -CONFIG_SND_AD1889=m -CONFIG_SND_ALS300=m -CONFIG_SND_ALS4000=m -CONFIG_SND_ALI5451=m -CONFIG_SND_ASIHPI=m -CONFIG_SND_ATIIXP=m -CONFIG_SND_ATIIXP_MODEM=m -CONFIG_SND_AU8810=m -CONFIG_SND_AU8820=m -CONFIG_SND_AU8830=m -CONFIG_SND_AW2=m -CONFIG_SND_AZT3328=m -CONFIG_SND_BT87X=m -# CONFIG_SND_BT87X_OVERCLOCK is not set -CONFIG_SND_CA0106=m -CONFIG_SND_CMIPCI=m -CONFIG_SND_OXYGEN_LIB=m -CONFIG_SND_OXYGEN=m -CONFIG_SND_CS4281=m -CONFIG_SND_CS46XX=m -CONFIG_SND_CS46XX_NEW_DSP=y -CONFIG_SND_CTXFI=m -CONFIG_SND_DARLA20=m -CONFIG_SND_GINA20=m -CONFIG_SND_LAYLA20=m -CONFIG_SND_DARLA24=m -CONFIG_SND_GINA24=m -CONFIG_SND_LAYLA24=m -CONFIG_SND_MONA=m -CONFIG_SND_MIA=m -CONFIG_SND_ECHO3G=m -CONFIG_SND_INDIGO=m -CONFIG_SND_INDIGOIO=m -CONFIG_SND_INDIGODJ=m -CONFIG_SND_INDIGOIOX=m -CONFIG_SND_INDIGODJX=m -CONFIG_SND_EMU10K1=m -CONFIG_SND_EMU10K1_SEQ=m -CONFIG_SND_EMU10K1X=m -CONFIG_SND_ENS1370=m -CONFIG_SND_ENS1371=m -CONFIG_SND_ES1938=m -CONFIG_SND_ES1968=m -CONFIG_SND_ES1968_INPUT=y -CONFIG_SND_ES1968_RADIO=y -CONFIG_SND_FM801=m -CONFIG_SND_FM801_TEA575X_BOOL=y -CONFIG_SND_HDSP=m -CONFIG_SND_HDSPM=m -CONFIG_SND_ICE1712=m -CONFIG_SND_ICE1724=m -CONFIG_SND_INTEL8X0=m -CONFIG_SND_INTEL8X0M=m -CONFIG_SND_KORG1212=m -CONFIG_SND_LOLA=m -CONFIG_SND_LX6464ES=m -CONFIG_SND_MAESTRO3=m -CONFIG_SND_MAESTRO3_INPUT=y -CONFIG_SND_MIXART=m -CONFIG_SND_NM256=m -CONFIG_SND_PCXHR=m -CONFIG_SND_RIPTIDE=m -CONFIG_SND_RME32=m -CONFIG_SND_RME96=m -CONFIG_SND_RME9652=m -CONFIG_SND_SONICVIBES=m -CONFIG_SND_TRIDENT=m -CONFIG_SND_VIA82XX=m -CONFIG_SND_VIA82XX_MODEM=m -CONFIG_SND_VIRTUOSO=m -CONFIG_SND_VX222=m -CONFIG_SND_YMFPCI=m - -# -# HD-Audio -# -CONFIG_SND_HDA=m -CONFIG_SND_HDA_HWDEP=y -CONFIG_SND_HDA_RECONFIG=y -CONFIG_SND_HDA_INPUT_BEEP=y -CONFIG_SND_HDA_INPUT_BEEP_MODE=0 -CONFIG_SND_HDA_PATCH_LOADER=y -CONFIG_SND_HDA_POWER_SAVE_DEFAULT=10 -# CONFIG_SND_HDA_CTL_DEV_ID is not set -CONFIG_SND_HDA_PREALLOC_SIZE=0 -CONFIG_SND_HDA_INTEL=m -CONFIG_SND_HDA_ACPI=m -CONFIG_SND_HDA_GENERIC_LEDS=y -CONFIG_SND_HDA_CODEC_ANALOG=m -CONFIG_SND_HDA_CODEC_SIGMATEL=m -CONFIG_SND_HDA_CODEC_VIA=m -CONFIG_SND_HDA_CODEC_CONEXANT=m -CONFIG_SND_HDA_CODEC_SENARYTECH=m -CONFIG_SND_HDA_CODEC_CA0110=m -CONFIG_SND_HDA_CODEC_CA0132=m -CONFIG_SND_HDA_CODEC_CA0132_DSP=y -CONFIG_SND_HDA_CODEC_CMEDIA=m -CONFIG_SND_HDA_CODEC_CM9825=m -CONFIG_SND_HDA_CODEC_SI3054=m -CONFIG_SND_HDA_GENERIC=m -CONFIG_SND_HDA_CODEC_REALTEK=m -CONFIG_SND_HDA_CODEC_REALTEK_LIB=m -CONFIG_SND_HDA_CODEC_ALC260=m -CONFIG_SND_HDA_CODEC_ALC262=m -CONFIG_SND_HDA_CODEC_ALC268=m -CONFIG_SND_HDA_CODEC_ALC269=m -CONFIG_SND_HDA_CODEC_ALC662=m -CONFIG_SND_HDA_CODEC_ALC680=m -CONFIG_SND_HDA_CODEC_ALC861=m -CONFIG_SND_HDA_CODEC_ALC861VD=m -CONFIG_SND_HDA_CODEC_ALC880=m -CONFIG_SND_HDA_CODEC_ALC882=m -CONFIG_SND_HDA_CODEC_CIRRUS=m -CONFIG_SND_HDA_CODEC_CS420X=m -CONFIG_SND_HDA_CODEC_CS421X=m -CONFIG_SND_HDA_CODEC_CS8409=m -CONFIG_SND_HDA_CODEC_HDMI=m -CONFIG_SND_HDA_CODEC_HDMI_GENERIC=m -CONFIG_SND_HDA_CODEC_HDMI_SIMPLE=m -CONFIG_SND_HDA_CODEC_HDMI_INTEL=m -CONFIG_SND_HDA_INTEL_HDMI_SILENT_STREAM=y -CONFIG_SND_HDA_CODEC_HDMI_ATI=m -CONFIG_SND_HDA_CODEC_HDMI_NVIDIA=m -CONFIG_SND_HDA_CODEC_HDMI_NVIDIA_MCP=m -CONFIG_SND_HDA_CODEC_HDMI_TEGRA=m -CONFIG_SND_HDA_CIRRUS_SCODEC=m -CONFIG_SND_HDA_SCODEC_CS35L41=m -CONFIG_SND_HDA_SCODEC_COMPONENT=m -CONFIG_SND_HDA_SCODEC_CS35L41_I2C=m -CONFIG_SND_HDA_SCODEC_CS35L41_SPI=m -CONFIG_SND_HDA_SCODEC_CS35L56=m -CONFIG_SND_HDA_SCODEC_CS35L56_I2C=m -CONFIG_SND_HDA_SCODEC_CS35L56_SPI=m - -# -# CS35L56 driver options -# -# CONFIG_SND_HDA_SCODEC_CS35L56_CAL_DEBUGFS is not set -# end of CS35L56 driver options - -CONFIG_SND_HDA_SCODEC_TAS2781=m -CONFIG_SND_HDA_SCODEC_TAS2781_I2C=m -CONFIG_SND_HDA_SCODEC_TAS2781_SPI=m -CONFIG_SND_HDA_CORE=m -CONFIG_SND_HDA_DSP_LOADER=y -CONFIG_SND_HDA_COMPONENT=y -CONFIG_SND_HDA_I915=y -CONFIG_SND_HDA_EXT_CORE=m -CONFIG_SND_INTEL_NHLT=y -CONFIG_SND_INTEL_DSP_CONFIG=m -CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m -# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set -# end of HD-Audio - -CONFIG_SND_SPI=y -CONFIG_SND_USB=y -CONFIG_SND_USB_AUDIO=m -CONFIG_SND_USB_AUDIO_MIDI_V2=y -CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y -CONFIG_SND_USB_UA101=m -CONFIG_SND_USB_USX2Y=m -CONFIG_SND_USB_CAIAQ=m -CONFIG_SND_USB_CAIAQ_INPUT=y -CONFIG_SND_USB_US122L=m -CONFIG_SND_USB_US144MKII=m -CONFIG_SND_USB_6FIRE=m -CONFIG_SND_USB_HIFACE=m -CONFIG_SND_BCD2000=m -CONFIG_SND_USB_AUDIO_QMI=m -CONFIG_SND_USB_LINE6=m -CONFIG_SND_USB_POD=m -CONFIG_SND_USB_PODHD=m -CONFIG_SND_USB_TONEPORT=m -CONFIG_SND_USB_VARIAX=m -CONFIG_SND_FIREWIRE=y -CONFIG_SND_FIREWIRE_LIB=m -CONFIG_SND_DICE=m -CONFIG_SND_OXFW=m -CONFIG_SND_ISIGHT=m -CONFIG_SND_FIREWORKS=m -CONFIG_SND_BEBOB=m -CONFIG_SND_FIREWIRE_DIGI00X=m -CONFIG_SND_FIREWIRE_TASCAM=m -CONFIG_SND_FIREWIRE_MOTU=m -CONFIG_SND_FIREFACE=m -CONFIG_SND_PCMCIA=y -CONFIG_SND_VXPOCKET=m -CONFIG_SND_PDAUDIOCF=m -CONFIG_SND_SOC=m -CONFIG_SND_SOC_AC97_BUS=y -CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y -CONFIG_SND_SOC_COMPRESS=y -CONFIG_SND_SOC_TOPOLOGY=y -CONFIG_SND_SOC_ACPI=m -CONFIG_SND_SOC_USB=m - -# -# Analog Devices -# -CONFIG_SND_SOC_ADI_AXI_I2S=m -CONFIG_SND_SOC_ADI_AXI_SPDIF=m -# end of Analog Devices - -# -# AMD -# -CONFIG_SND_SOC_AMD_ACP=m -CONFIG_SND_SOC_AMD_CZ_DA7219MX98357_MACH=m -CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m -CONFIG_SND_SOC_AMD_ST_ES8336_MACH=m -CONFIG_SND_SOC_AMD_ACP3x=m -CONFIG_SND_SOC_AMD_RV_RT5682_MACH=m -CONFIG_SND_SOC_AMD_RENOIR=m -CONFIG_SND_SOC_AMD_RENOIR_MACH=m -CONFIG_SND_SOC_AMD_ACP5x=m -CONFIG_SND_SOC_AMD_VANGOGH_MACH=m -CONFIG_SND_SOC_AMD_ACP6x=m -CONFIG_SND_SOC_AMD_YC_MACH=m -CONFIG_SND_AMD_ACP_CONFIG=m -CONFIG_SND_SOC_AMD_ACP_COMMON=m -CONFIG_SND_SOC_ACPI_AMD_MATCH=m -CONFIG_SND_SOC_ACPI_AMD_SDCA_QUIRKS=m -CONFIG_SND_SOC_AMD_ACP_PDM=m -CONFIG_SND_SOC_AMD_ACP_LEGACY_COMMON=m -CONFIG_SND_SOC_AMD_ACP_I2S=m -CONFIG_SND_SOC_AMD_ACPI_MACH=m -CONFIG_SND_SOC_AMD_ACP_PCM=m -CONFIG_SND_SOC_AMD_ACP_PCI=m -CONFIG_SND_AMD_ASOC_RENOIR=m -CONFIG_SND_AMD_ASOC_REMBRANDT=m -CONFIG_SND_AMD_ASOC_ACP63=m -CONFIG_SND_AMD_ASOC_ACP70=m -CONFIG_SND_SOC_AMD_MACH_COMMON=m -CONFIG_SND_SOC_AMD_LEGACY_MACH=m -CONFIG_SND_SOC_AMD_SOF_MACH=m -CONFIG_SND_SOC_AMD_SDW_MACH_COMMON=m -CONFIG_SND_SOC_AMD_SOF_SDW_MACH=m -CONFIG_SND_SOC_AMD_LEGACY_SDW_MACH=m -CONFIG_SND_AMD_SOUNDWIRE_ACPI=m -CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m -CONFIG_SND_SOC_AMD_SOUNDWIRE_LINK_BASELINE=m -CONFIG_SND_SOC_AMD_SOUNDWIRE=m -CONFIG_SND_SOC_AMD_PS=m -CONFIG_SND_SOC_AMD_PS_MACH=m -# end of AMD - -# -# Apple -# -# end of Apple - -# -# Atmel -# -# end of Atmel - -# -# Au1x -# -# end of Au1x - -# -# Broadcom -# -# CONFIG_SND_BCM63XX_I2S_WHISTLER is not set -# end of Broadcom - -# -# Cirrus Logic -# -# end of Cirrus Logic - -# -# DesignWare -# -CONFIG_SND_DESIGNWARE_I2S=m -CONFIG_SND_DESIGNWARE_PCM=y -# end of DesignWare - -# -# Freescale -# - -# -# Common SoC Audio options for Freescale CPUs: -# -# CONFIG_SND_SOC_FSL_ASRC is not set -# CONFIG_SND_SOC_FSL_SAI is not set -# CONFIG_SND_SOC_FSL_AUDMIX is not set -# CONFIG_SND_SOC_FSL_SSI is not set -# CONFIG_SND_SOC_FSL_SPDIF is not set -# CONFIG_SND_SOC_FSL_ESAI is not set -# CONFIG_SND_SOC_FSL_MICFIL is not set -CONFIG_SND_SOC_FSL_XCVR=m -CONFIG_SND_SOC_FSL_UTILS=m -# CONFIG_SND_SOC_IMX_AUDMUX is not set -# end of Freescale - -# -# Google -# -CONFIG_SND_SOC_CHV3_I2S=m -# end of Google - -# -# Hisilicon -# -CONFIG_SND_I2S_HI6210_I2S=m -# end of Hisilicon - -# -# JZ4740 -# -# end of JZ4740 - -# -# Kirkwood -# -# end of Kirkwood - -# -# Loongson -# -# end of Loongson - -# -# Intel -# -CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y -CONFIG_SND_SOC_INTEL_CATPT=m -CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m -CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_PCI=m -CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_ACPI=m -CONFIG_SND_SOC_ACPI_INTEL_MATCH=m -CONFIG_SND_SOC_ACPI_INTEL_SDCA_QUIRKS=m -CONFIG_SND_SOC_INTEL_AVS=m - -# -# Intel AVS Machine drivers -# - -# -# Available DSP configurations -# -# CONFIG_SND_SOC_INTEL_AVS_CARDNAME_OBSOLETE is not set -CONFIG_SND_SOC_INTEL_AVS_MACH_DA7219=m -CONFIG_SND_SOC_INTEL_AVS_MACH_DMIC=m -CONFIG_SND_SOC_INTEL_AVS_MACH_ES8336=m -CONFIG_SND_SOC_INTEL_AVS_MACH_HDAUDIO=m -CONFIG_SND_SOC_INTEL_AVS_MACH_I2S_TEST=m -CONFIG_SND_SOC_INTEL_AVS_MACH_MAX98927=m -CONFIG_SND_SOC_INTEL_AVS_MACH_MAX98357A=m -CONFIG_SND_SOC_INTEL_AVS_MACH_MAX98373=m -CONFIG_SND_SOC_INTEL_AVS_MACH_NAU8825=m -CONFIG_SND_SOC_INTEL_AVS_MACH_PCM3168A=m -CONFIG_SND_SOC_INTEL_AVS_MACH_PROBE=m -CONFIG_SND_SOC_INTEL_AVS_MACH_RT274=m -CONFIG_SND_SOC_INTEL_AVS_MACH_RT286=m -CONFIG_SND_SOC_INTEL_AVS_MACH_RT298=m -CONFIG_SND_SOC_INTEL_AVS_MACH_RT5514=m -CONFIG_SND_SOC_INTEL_AVS_MACH_RT5640=m -CONFIG_SND_SOC_INTEL_AVS_MACH_RT5663=m -CONFIG_SND_SOC_INTEL_AVS_MACH_RT5682=m -CONFIG_SND_SOC_INTEL_AVS_MACH_SSM4567=m -# end of Intel AVS Machine drivers - -CONFIG_SND_SOC_INTEL_MACH=y -CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y -CONFIG_SND_SOC_INTEL_HDA_DSP_COMMON=m -CONFIG_SND_SOC_INTEL_SOF_MAXIM_COMMON=m -CONFIG_SND_SOC_INTEL_SOF_REALTEK_COMMON=m -CONFIG_SND_SOC_INTEL_SOF_CIRRUS_COMMON=m -CONFIG_SND_SOC_INTEL_SOF_NUVOTON_COMMON=m -CONFIG_SND_SOC_INTEL_SOF_TI_COMMON=m -CONFIG_SND_SOC_INTEL_SOF_BOARD_HELPERS=m -CONFIG_SND_SOC_INTEL_HASWELL_MACH=m -CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH=m -CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m -CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m -CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m -CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m -CONFIG_SND_SOC_INTEL_BYTCR_WM5102_MACH=m -CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m -CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m -CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m -CONFIG_SND_SOC_INTEL_CHT_BSW_NAU8824_MACH=m -CONFIG_SND_SOC_INTEL_BYT_CHT_CX2072X_MACH=m -CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH=m -CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH=m -# CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH is not set -CONFIG_SND_SOC_INTEL_SOF_WM8804_MACH=m -CONFIG_SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH=m -CONFIG_SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH=m -CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m -CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m -CONFIG_SND_SOC_INTEL_SOF_CS42L42_MACH=m -CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m -CONFIG_SND_SOC_INTEL_SOF_ES8336_MACH=m -CONFIG_SND_SOC_INTEL_SOF_NAU8825_MACH=m -CONFIG_SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH=m -CONFIG_SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH=m -CONFIG_SND_SOC_INTEL_SOF_DA7219_MACH=m -CONFIG_SND_SOC_INTEL_SOF_SSP_AMP_MACH=m -CONFIG_SND_SOC_INTEL_EHL_RT5660_MACH=m -CONFIG_SND_SOC_INTEL_SOUNDWIRE_SOF_MACH=m -# end of Intel - -# -# Mediatek -# -CONFIG_SND_SOC_MTK_BTCVSD=m -# end of Mediatek - -# -# PXA -# -# end of PXA - -# -# SoundWire (SDCA) -# -CONFIG_SND_SOC_SDCA=m -CONFIG_SND_SOC_SDCA_HID=y -CONFIG_SND_SOC_SDCA_IRQ=y -CONFIG_SND_SOC_SDCA_FDL=y -CONFIG_SND_SOC_SDCA_OPTIONAL=m -CONFIG_SND_SOC_SDCA_CLASS=m -CONFIG_SND_SOC_SDCA_CLASS_FUNCTION=m -# end of SoundWire (SDCA) - -# -# ST SPEAr -# -# end of ST SPEAr - -# -# Spreadtrum -# -# end of Spreadtrum - -# -# STMicroelectronics STM32 -# -# end of STMicroelectronics STM32 - -# -# Tegra -# -# end of Tegra - -# -# Xilinx -# -CONFIG_SND_SOC_XILINX_I2S=m -CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m -CONFIG_SND_SOC_XILINX_SPDIF=m -# end of Xilinx - -# -# Xtensa -# -CONFIG_SND_SOC_XTFPGA_I2S=m -# end of Xtensa - -CONFIG_SND_SOC_SOF_TOPLEVEL=y -CONFIG_SND_SOC_SOF_PCI_DEV=m -CONFIG_SND_SOC_SOF_PCI=m -CONFIG_SND_SOC_SOF_ACPI=m -CONFIG_SND_SOC_SOF_ACPI_DEV=m -CONFIG_SND_SOC_SOF_DEBUG_PROBES=m -CONFIG_SND_SOC_SOF_CLIENT=m -CONFIG_SND_SOC_SOF=m -CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE=y -CONFIG_SND_SOC_SOF_IPC3=y -CONFIG_SND_SOC_SOF_IPC4=y -CONFIG_SND_SOC_SOF_AMD_TOPLEVEL=m -CONFIG_SND_SOC_SOF_AMD_COMMON=m -CONFIG_SND_SOC_SOF_AMD_RENOIR=m -CONFIG_SND_SOC_SOF_AMD_VANGOGH=m -CONFIG_SND_SOC_SOF_AMD_REMBRANDT=m -CONFIG_SND_SOC_SOF_ACP_PROBES=m -CONFIG_SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE=m -CONFIG_SND_SOC_SOF_AMD_SOUNDWIRE=m -CONFIG_SND_SOC_SOF_AMD_ACP63=m -CONFIG_SND_SOC_SOF_AMD_ACP70=m -CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y -CONFIG_SND_SOC_SOF_INTEL_HIFI_EP_IPC=m -CONFIG_SND_SOC_SOF_INTEL_ATOM_HIFI_EP=m -CONFIG_SND_SOC_SOF_INTEL_COMMON=m -CONFIG_SND_SOC_SOF_BAYTRAIL=m -# CONFIG_SND_SOC_SOF_BROADWELL is not set -CONFIG_SND_SOC_SOF_MERRIFIELD=m -# CONFIG_SND_SOC_SOF_SKYLAKE is not set -# CONFIG_SND_SOC_SOF_KABYLAKE is not set -CONFIG_SND_SOC_SOF_INTEL_APL=m -CONFIG_SND_SOC_SOF_APOLLOLAKE=m -CONFIG_SND_SOC_SOF_GEMINILAKE=m -CONFIG_SND_SOC_SOF_INTEL_CNL=m -CONFIG_SND_SOC_SOF_CANNONLAKE=m -CONFIG_SND_SOC_SOF_COFFEELAKE=m -CONFIG_SND_SOC_SOF_COMETLAKE=m -CONFIG_SND_SOC_SOF_INTEL_ICL=m -CONFIG_SND_SOC_SOF_ICELAKE=m -CONFIG_SND_SOC_SOF_JASPERLAKE=m -CONFIG_SND_SOC_SOF_INTEL_TGL=m -CONFIG_SND_SOC_SOF_TIGERLAKE=m -CONFIG_SND_SOC_SOF_ELKHARTLAKE=m -CONFIG_SND_SOC_SOF_ALDERLAKE=m -CONFIG_SND_SOC_SOF_INTEL_MTL=m -CONFIG_SND_SOC_SOF_METEORLAKE=m -CONFIG_SND_SOC_SOF_INTEL_LNL=m -CONFIG_SND_SOC_SOF_LUNARLAKE=m -CONFIG_SND_SOC_SOF_INTEL_PTL=m -CONFIG_SND_SOC_SOF_PANTHERLAKE=m -CONFIG_SND_SOC_SOF_INTEL_NVL=m -CONFIG_SND_SOC_SOF_NOVALAKE=m -CONFIG_SND_SOC_SOF_HDA_COMMON=m -CONFIG_SND_SOC_SOF_HDA_GENERIC=m -CONFIG_SND_SOC_SOF_HDA_MLINK=m -CONFIG_SND_SOC_SOF_HDA_LINK=y -CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC=y -CONFIG_SND_SOF_SOF_HDA_SDW_BPT=m -CONFIG_SND_SOC_SOF_HDA_LINK_BASELINE=m -CONFIG_SND_SOC_SOF_HDA=m -CONFIG_SND_SOC_SOF_HDA_PROBES=m -CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE=m -CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE=m -CONFIG_SND_SOC_SOF_XTENSA=m -CONFIG_SND_SOC_I2C_AND_SPI=m - -# -# CODEC drivers -# -CONFIG_SND_SOC_ARIZONA=m -CONFIG_SND_SOC_WM_ADSP=m -CONFIG_SND_SOC_AC97_CODEC=m -CONFIG_SND_SOC_ADAU_UTILS=m -CONFIG_SND_SOC_ADAU1372=m -CONFIG_SND_SOC_ADAU1372_I2C=m -CONFIG_SND_SOC_ADAU1372_SPI=m -CONFIG_SND_SOC_ADAU1373=m -CONFIG_SND_SOC_ADAU1701=m -CONFIG_SND_SOC_ADAU17X1=m -CONFIG_SND_SOC_ADAU1761=m -CONFIG_SND_SOC_ADAU1761_I2C=m -CONFIG_SND_SOC_ADAU1761_SPI=m -CONFIG_SND_SOC_ADAU7002=m -CONFIG_SND_SOC_ADAU7118=m -CONFIG_SND_SOC_ADAU7118_HW=m -CONFIG_SND_SOC_ADAU7118_I2C=m -CONFIG_SND_SOC_AK4104=m -CONFIG_SND_SOC_AK4118=m -CONFIG_SND_SOC_AK4375=m -CONFIG_SND_SOC_AK4458=m -CONFIG_SND_SOC_AK4554=m -CONFIG_SND_SOC_AK4613=m -CONFIG_SND_SOC_AK4619=m -CONFIG_SND_SOC_AK4642=m -CONFIG_SND_SOC_AK5386=m -CONFIG_SND_SOC_AK5558=m -CONFIG_SND_SOC_ALC5623=m -CONFIG_SND_SOC_AUDIO_IIO_AUX=m -CONFIG_SND_SOC_AW8738=m -CONFIG_SND_SOC_AW88395_LIB=m -CONFIG_SND_SOC_AW88395=m -CONFIG_SND_SOC_AW88166=m -CONFIG_SND_SOC_AW88261=m -CONFIG_SND_SOC_AW88081=m -CONFIG_SND_SOC_AW87390=m -CONFIG_SND_SOC_AW88399=m -CONFIG_SND_SOC_BD28623=m -# CONFIG_SND_SOC_BT_SCO is not set -CONFIG_SND_SOC_CHV3_CODEC=m -CONFIG_SND_SOC_CROS_EC_CODEC=m -CONFIG_SND_SOC_CS_AMP_LIB=m -CONFIG_SND_SOC_CS35L32=m -CONFIG_SND_SOC_CS35L33=m -CONFIG_SND_SOC_CS35L34=m -CONFIG_SND_SOC_CS35L35=m -CONFIG_SND_SOC_CS35L36=m -CONFIG_SND_SOC_CS35L41_LIB=m -CONFIG_SND_SOC_CS35L41=m -CONFIG_SND_SOC_CS35L41_SPI=m -CONFIG_SND_SOC_CS35L41_I2C=m -CONFIG_SND_SOC_CS35L45=m -CONFIG_SND_SOC_CS35L45_SPI=m -CONFIG_SND_SOC_CS35L45_I2C=m -CONFIG_SND_SOC_CS35L56=m -CONFIG_SND_SOC_CS35L56_SHARED=m -CONFIG_SND_SOC_CS35L56_I2C=m -CONFIG_SND_SOC_CS35L56_SPI=m -CONFIG_SND_SOC_CS35L56_SDW=m -CONFIG_SND_SOC_CS35L56_CAL_DEBUGFS_COMMON=y - -# -# CS35L56 driver options -# -# CONFIG_SND_SOC_CS35L56_CAL_DEBUGFS is not set -CONFIG_SND_SOC_CS35L56_CAL_SET_CTRL=y -# CONFIG_SND_SOC_CS35L56_CAL_PERFORM_CTRL is not set -# end of CS35L56 driver options - -CONFIG_SND_SOC_CS40L50=m -CONFIG_SND_SOC_CS42L42_CORE=m -CONFIG_SND_SOC_CS42L42=m -CONFIG_SND_SOC_CS42L42_SDW=m -CONFIG_SND_SOC_CS42L43=m -CONFIG_SND_SOC_CS42L43_SDW=m -CONFIG_SND_SOC_CS42L51=m -CONFIG_SND_SOC_CS42L51_I2C=m -CONFIG_SND_SOC_CS42L52=m -CONFIG_SND_SOC_CS42L56=m -CONFIG_SND_SOC_CS42L73=m -CONFIG_SND_SOC_CS42L83=m -CONFIG_SND_SOC_CS42L84=m -CONFIG_SND_SOC_CS4234=m -CONFIG_SND_SOC_CS4265=m -CONFIG_SND_SOC_CS4270=m -CONFIG_SND_SOC_CS4271=m -CONFIG_SND_SOC_CS4271_I2C=m -CONFIG_SND_SOC_CS4271_SPI=m -CONFIG_SND_SOC_CS42XX8=m -CONFIG_SND_SOC_CS42XX8_I2C=m -CONFIG_SND_SOC_CS43130=m -CONFIG_SND_SOC_CS4341=m -CONFIG_SND_SOC_CS4349=m -CONFIG_SND_SOC_CS48L32=m -CONFIG_SND_SOC_CS53L30=m -CONFIG_SND_SOC_CS530X=m -CONFIG_SND_SOC_CS530X_I2C=m -CONFIG_SND_SOC_CS530X_SPI=m -CONFIG_SND_SOC_CX2072X=m -CONFIG_SND_SOC_DA7213=m -CONFIG_SND_SOC_DA7219=m -CONFIG_SND_SOC_DMIC=m -CONFIG_SND_SOC_HDMI_CODEC=m -CONFIG_SND_SOC_ES7134=m -CONFIG_SND_SOC_ES7241=m -CONFIG_SND_SOC_ES83XX_DSM_COMMON=m -CONFIG_SND_SOC_ES8311=m -CONFIG_SND_SOC_ES8316=m -CONFIG_SND_SOC_ES8323=m -CONFIG_SND_SOC_ES8326=m -CONFIG_SND_SOC_ES8328=m -CONFIG_SND_SOC_ES8328_I2C=m -CONFIG_SND_SOC_ES8328_SPI=m -CONFIG_SND_SOC_ES8375=m -CONFIG_SND_SOC_ES8389=m -CONFIG_SND_SOC_FS_AMP_LIB=m -CONFIG_SND_SOC_FS210X=m -CONFIG_SND_SOC_GTM601=m -CONFIG_SND_SOC_HDAC_HDA=m -CONFIG_SND_SOC_HDA=m -CONFIG_SND_SOC_ICS43432=m -CONFIG_SND_SOC_IDT821034=m -CONFIG_SND_SOC_MAX98088=m -CONFIG_SND_SOC_MAX98090=m -CONFIG_SND_SOC_MAX98357A=m -CONFIG_SND_SOC_MAX98504=m -CONFIG_SND_SOC_MAX9867=m -CONFIG_SND_SOC_MAX98927=m -CONFIG_SND_SOC_MAX98520=m -CONFIG_SND_SOC_MAX98363=m -CONFIG_SND_SOC_MAX98373=m -CONFIG_SND_SOC_MAX98373_I2C=m -CONFIG_SND_SOC_MAX98373_SDW=m -CONFIG_SND_SOC_MAX98388=m -CONFIG_SND_SOC_MAX98390=m -CONFIG_SND_SOC_MAX98396=m -CONFIG_SND_SOC_MAX9860=m -CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m -CONFIG_SND_SOC_PCM1681=m -CONFIG_SND_SOC_PCM1754=m -CONFIG_SND_SOC_PCM1789=m -CONFIG_SND_SOC_PCM1789_I2C=m -CONFIG_SND_SOC_PCM179X=m -CONFIG_SND_SOC_PCM179X_I2C=m -CONFIG_SND_SOC_PCM179X_SPI=m -CONFIG_SND_SOC_PCM186X=m -CONFIG_SND_SOC_PCM186X_I2C=m -CONFIG_SND_SOC_PCM186X_SPI=m -CONFIG_SND_SOC_PCM3060=m -CONFIG_SND_SOC_PCM3060_I2C=m -CONFIG_SND_SOC_PCM3060_SPI=m -CONFIG_SND_SOC_PCM3168A=m -CONFIG_SND_SOC_PCM3168A_I2C=m -CONFIG_SND_SOC_PCM3168A_SPI=m -CONFIG_SND_SOC_PCM5102A=m -CONFIG_SND_SOC_PCM512x=m -CONFIG_SND_SOC_PCM512x_I2C=m -CONFIG_SND_SOC_PCM512x_SPI=m -CONFIG_SND_SOC_PCM6240=m -CONFIG_SND_SOC_PEB2466=m -CONFIG_SND_SOC_PM4125=m -CONFIG_SND_SOC_PM4125_SDW=m -CONFIG_SND_SOC_RL6231=m -CONFIG_SND_SOC_RT_SDW_COMMON=m -CONFIG_SND_SOC_RL6347A=m -CONFIG_SND_SOC_RT274=m -CONFIG_SND_SOC_RT286=m -CONFIG_SND_SOC_RT298=m -CONFIG_SND_SOC_RT1011=m -CONFIG_SND_SOC_RT1015=m -CONFIG_SND_SOC_RT1015P=m -CONFIG_SND_SOC_RT1017_SDCA_SDW=m -CONFIG_SND_SOC_RT1019=m -CONFIG_SND_SOC_RT1308=m -CONFIG_SND_SOC_RT1308_SDW=m -CONFIG_SND_SOC_RT1316_SDW=m -CONFIG_SND_SOC_RT1318_SDW=m -CONFIG_SND_SOC_RT1320_SDW=m -CONFIG_SND_SOC_RT5514=m -CONFIG_SND_SOC_RT5575=m -CONFIG_SND_SOC_RT5575_SPI=y -CONFIG_SND_SOC_RT5616=m -CONFIG_SND_SOC_RT5631=m -CONFIG_SND_SOC_RT5640=m -CONFIG_SND_SOC_RT5645=m -CONFIG_SND_SOC_RT5651=m -CONFIG_SND_SOC_RT5659=m -CONFIG_SND_SOC_RT5660=m -CONFIG_SND_SOC_RT5663=m -CONFIG_SND_SOC_RT5670=m -CONFIG_SND_SOC_RT5677=m -CONFIG_SND_SOC_RT5677_SPI=m -CONFIG_SND_SOC_RT5682=m -CONFIG_SND_SOC_RT5682_I2C=m -CONFIG_SND_SOC_RT5682_SDW=m -CONFIG_SND_SOC_RT5682S=m -CONFIG_SND_SOC_RT700=m -CONFIG_SND_SOC_RT700_SDW=m -CONFIG_SND_SOC_RT711=m -CONFIG_SND_SOC_RT711_SDW=m -CONFIG_SND_SOC_RT711_SDCA_SDW=m -CONFIG_SND_SOC_RT712_SDCA_SDW=m -CONFIG_SND_SOC_RT712_SDCA_DMIC_SDW=m -CONFIG_SND_SOC_RT721_SDCA_SDW=m -CONFIG_SND_SOC_RT722_SDCA_SDW=m -CONFIG_SND_SOC_RT715=m -CONFIG_SND_SOC_RT715_SDW=m -CONFIG_SND_SOC_RT715_SDCA_SDW=m -CONFIG_SND_SOC_RT9120=m -CONFIG_SND_SOC_RT9123=m -CONFIG_SND_SOC_RT9123P=m -CONFIG_SND_SOC_RTQ9124=m -CONFIG_SND_SOC_RTQ9128=m -# CONFIG_SND_SOC_SDW_MOCKUP is not set -CONFIG_SND_SOC_SGTL5000=m -CONFIG_SND_SOC_SI476X=m -CONFIG_SND_SOC_SIGMADSP=m -CONFIG_SND_SOC_SIGMADSP_I2C=m -CONFIG_SND_SOC_SIGMADSP_REGMAP=m -CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m -CONFIG_SND_SOC_SIMPLE_MUX=m -CONFIG_SND_SOC_SMA1303=m -CONFIG_SND_SOC_SMA1307=m -CONFIG_SND_SOC_SPDIF=m -CONFIG_SND_SOC_SRC4XXX_I2C=m -CONFIG_SND_SOC_SRC4XXX=m -CONFIG_SND_SOC_SSM2305=m -CONFIG_SND_SOC_SSM2518=m -CONFIG_SND_SOC_SSM2602=m -CONFIG_SND_SOC_SSM2602_SPI=m -CONFIG_SND_SOC_SSM2602_I2C=m -CONFIG_SND_SOC_SSM4567=m -CONFIG_SND_SOC_STA32X=m -CONFIG_SND_SOC_STA350=m -CONFIG_SND_SOC_STI_SAS=m -CONFIG_SND_SOC_TAS2552=m -CONFIG_SND_SOC_TAS2562=m -CONFIG_SND_SOC_TAS2764=m -CONFIG_SND_SOC_TAS2770=m -CONFIG_SND_SOC_TAS2780=m -CONFIG_SND_SOC_TAS2781_COMLIB=m -CONFIG_SND_SOC_TAS2781_COMLIB_I2C=m -CONFIG_SND_SOC_TAS2781_FMWLIB=m -CONFIG_SND_SOC_TAS2781_I2C=m -CONFIG_SND_SOC_TAS2783_SDW=m -CONFIG_SND_SOC_TAS5086=m -CONFIG_SND_SOC_TAS571X=m -CONFIG_SND_SOC_TAS5720=m -CONFIG_SND_SOC_TAS5805M=m -CONFIG_SND_SOC_TAS6424=m -CONFIG_SND_SOC_TDA7419=m -CONFIG_SND_SOC_TFA9879=m -CONFIG_SND_SOC_TFA989X=m -CONFIG_SND_SOC_TLV320ADC3XXX=m -CONFIG_SND_SOC_TLV320AIC23=m -CONFIG_SND_SOC_TLV320AIC23_I2C=m -CONFIG_SND_SOC_TLV320AIC23_SPI=m -CONFIG_SND_SOC_TLV320AIC31XX=m -CONFIG_SND_SOC_TLV320AIC32X4=m -CONFIG_SND_SOC_TLV320AIC32X4_I2C=m -CONFIG_SND_SOC_TLV320AIC32X4_SPI=m -CONFIG_SND_SOC_TLV320AIC3X=m -CONFIG_SND_SOC_TLV320AIC3X_I2C=m -CONFIG_SND_SOC_TLV320AIC3X_SPI=m -CONFIG_SND_SOC_TLV320ADCX140=m -CONFIG_SND_SOC_TS3A227E=m -CONFIG_SND_SOC_TSCS42XX=m -CONFIG_SND_SOC_TSCS454=m -CONFIG_SND_SOC_UDA1334=m -CONFIG_SND_SOC_UDA1342=m -CONFIG_SND_SOC_UDA1380=m -CONFIG_SND_SOC_WCD_CLASSH=m -CONFIG_SND_SOC_WCD_COMMON=m -CONFIG_SND_SOC_WCD9335=m -CONFIG_SND_SOC_WCD_MBHC=m -CONFIG_SND_SOC_WCD934X=m -CONFIG_SND_SOC_WCD937X=m -CONFIG_SND_SOC_WCD937X_SDW=m -CONFIG_SND_SOC_WCD938X=m -CONFIG_SND_SOC_WCD938X_SDW=m -CONFIG_SND_SOC_WCD939X=m -CONFIG_SND_SOC_WCD939X_SDW=m -CONFIG_SND_SOC_WM5102=m -CONFIG_SND_SOC_WM8510=m -CONFIG_SND_SOC_WM8523=m -CONFIG_SND_SOC_WM8524=m -CONFIG_SND_SOC_WM8580=m -CONFIG_SND_SOC_WM8711=m -CONFIG_SND_SOC_WM8728=m -CONFIG_SND_SOC_WM8731=m -CONFIG_SND_SOC_WM8731_I2C=m -CONFIG_SND_SOC_WM8731_SPI=m -CONFIG_SND_SOC_WM8737=m -CONFIG_SND_SOC_WM8741=m -CONFIG_SND_SOC_WM8750=m -CONFIG_SND_SOC_WM8753=m -CONFIG_SND_SOC_WM8770=m -CONFIG_SND_SOC_WM8776=m -CONFIG_SND_SOC_WM8782=m -CONFIG_SND_SOC_WM8804=m -CONFIG_SND_SOC_WM8804_I2C=m -CONFIG_SND_SOC_WM8804_SPI=m -CONFIG_SND_SOC_WM8903=m -CONFIG_SND_SOC_WM8904=m -CONFIG_SND_SOC_WM8940=m -CONFIG_SND_SOC_WM8960=m -CONFIG_SND_SOC_WM8961=m -CONFIG_SND_SOC_WM8962=m -CONFIG_SND_SOC_WM8974=m -CONFIG_SND_SOC_WM8978=m -CONFIG_SND_SOC_WM8985=m -CONFIG_SND_SOC_WM8998=m -CONFIG_SND_SOC_WSA881X=m -CONFIG_SND_SOC_WSA883X=m -CONFIG_SND_SOC_WSA884X=m -CONFIG_SND_SOC_ZL38060=m -CONFIG_SND_SOC_MAX9759=m -CONFIG_SND_SOC_MT6351=m -CONFIG_SND_SOC_MT6357=m -CONFIG_SND_SOC_MT6358=m -CONFIG_SND_SOC_MT6660=m -CONFIG_SND_SOC_NAU8315=m -CONFIG_SND_SOC_NAU8325=m -CONFIG_SND_SOC_NAU8540=m -CONFIG_SND_SOC_NAU8810=m -CONFIG_SND_SOC_NAU8821=m -CONFIG_SND_SOC_NAU8822=m -CONFIG_SND_SOC_NAU8824=m -CONFIG_SND_SOC_NAU8825=m -CONFIG_SND_SOC_NTPFW=m -CONFIG_SND_SOC_NTP8918=m -CONFIG_SND_SOC_NTP8835=m -CONFIG_SND_SOC_TPA6130A2=m -CONFIG_SND_SOC_LPASS_MACRO_COMMON=m -CONFIG_SND_SOC_LPASS_WSA_MACRO=m -CONFIG_SND_SOC_LPASS_VA_MACRO=m -CONFIG_SND_SOC_LPASS_RX_MACRO=m -CONFIG_SND_SOC_LPASS_TX_MACRO=m -# end of CODEC drivers - -CONFIG_SND_SOC_SDW_UTILS=m - -# -# Generic drivers -# -CONFIG_SND_SIMPLE_CARD_UTILS=m -CONFIG_SND_SIMPLE_CARD=m -# end of Generic drivers - -CONFIG_SND_X86=y -CONFIG_HDMI_LPE_AUDIO=m -CONFIG_SND_SYNTH_EMUX=m -CONFIG_SND_XEN_FRONTEND=m -CONFIG_SND_VIRTIO=m -CONFIG_AC97_BUS=m -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -CONFIG_HID_BATTERY_STRENGTH=y -CONFIG_HIDRAW=y -CONFIG_UHID=m -CONFIG_HID_GENERIC=y -CONFIG_HID_HAPTIC=y - -# -# Special HID drivers -# -CONFIG_HID_A4TECH=m -CONFIG_HID_ACCUTOUCH=m -CONFIG_HID_ACRUX=m -CONFIG_HID_ACRUX_FF=y -CONFIG_HID_APPLE=m -CONFIG_HID_APPLEIR=m -CONFIG_HID_APPLETB_BL=m -CONFIG_HID_APPLETB_KBD=m -CONFIG_HID_ASUS=m -CONFIG_HID_AUREAL=m -CONFIG_HID_BELKIN=m -CONFIG_HID_BETOP_FF=m -CONFIG_HID_BIGBEN_FF=m -CONFIG_HID_CHERRY=m -CONFIG_HID_CHICONY=m -CONFIG_HID_CORSAIR=m -CONFIG_HID_COUGAR=m -CONFIG_HID_MACALLY=m -CONFIG_HID_PRODIKEYS=m -CONFIG_HID_CMEDIA=m -CONFIG_HID_CP2112=m -CONFIG_HID_CREATIVE_SB0540=m -CONFIG_HID_CYPRESS=m -CONFIG_HID_DRAGONRISE=m -CONFIG_DRAGONRISE_FF=y -CONFIG_HID_EMS_FF=m -CONFIG_HID_ELAN=m -CONFIG_HID_ELECOM=m -CONFIG_HID_ELO=m -CONFIG_HID_EVISION=m -CONFIG_HID_EZKEY=m -CONFIG_HID_FT260=m -CONFIG_HID_GEMBIRD=m -CONFIG_HID_GFRM=m -CONFIG_HID_GLORIOUS=m -CONFIG_HID_HOLTEK=m -CONFIG_HOLTEK_FF=y -CONFIG_HID_VIVALDI_COMMON=m -CONFIG_HID_GOODIX_SPI=m -CONFIG_HID_GOOGLE_HAMMER=m -CONFIG_HID_GOOGLE_STADIA_FF=m -CONFIG_HID_VIVALDI=m -CONFIG_HID_GT683R=m -CONFIG_HID_KEYTOUCH=m -CONFIG_HID_KYE=m -CONFIG_HID_KYSONA=m -CONFIG_HID_UCLOGIC=m -CONFIG_HID_WALTOP=m -CONFIG_HID_VIEWSONIC=m -CONFIG_HID_VRC2=m -CONFIG_HID_XIAOMI=m -CONFIG_HID_GYRATION=m -CONFIG_HID_ICADE=m -CONFIG_HID_ITE=m -CONFIG_HID_JABRA=m -CONFIG_HID_TWINHAN=m -CONFIG_HID_KENSINGTON=m -CONFIG_HID_LCPOWER=m -CONFIG_HID_LED=m -CONFIG_HID_LENOVO=m -CONFIG_HID_LENOVO_GO=m -CONFIG_HID_LENOVO_GO_S=m -CONFIG_HID_LETSKETCH=m -CONFIG_HID_LOGITECH=m -CONFIG_HID_LOGITECH_DJ=m -CONFIG_HID_LOGITECH_HIDPP=m -CONFIG_LOGITECH_FF=y -CONFIG_LOGIRUMBLEPAD2_FF=y -CONFIG_LOGIG940_FF=y -CONFIG_LOGIWHEELS_FF=y -CONFIG_HID_MAGICMOUSE=m -CONFIG_HID_MALTRON=m -CONFIG_HID_MAYFLASH=m -CONFIG_HID_MEGAWORLD_FF=m -CONFIG_HID_REDRAGON=m -CONFIG_HID_MICROSOFT=m -CONFIG_HID_MONTEREY=m -CONFIG_HID_MULTITOUCH=m -CONFIG_HID_NINTENDO=m -CONFIG_NINTENDO_FF=y -CONFIG_HID_NTI=m -CONFIG_HID_NTRIG=m -CONFIG_HID_NVIDIA_SHIELD=m -CONFIG_NVIDIA_SHIELD_FF=y -CONFIG_HID_ORTEK=m -CONFIG_HID_PANTHERLORD=m -CONFIG_PANTHERLORD_FF=y -CONFIG_HID_PENMOUNT=m -CONFIG_HID_PETALYNX=m -CONFIG_HID_PICOLCD=m -CONFIG_HID_PICOLCD_FB=y -CONFIG_HID_PICOLCD_BACKLIGHT=y -CONFIG_HID_PICOLCD_LCD=y -CONFIG_HID_PICOLCD_LEDS=y -CONFIG_HID_PICOLCD_CIR=y -CONFIG_HID_PLANTRONICS=m -CONFIG_HID_PLAYSTATION=m -CONFIG_PLAYSTATION_FF=y -CONFIG_HID_PXRC=m -CONFIG_HID_RAPOO=m -CONFIG_HID_RAZER=m -CONFIG_HID_PRIMAX=m -CONFIG_HID_RETRODE=m -CONFIG_HID_ROCCAT=m -CONFIG_HID_SAITEK=m -CONFIG_HID_SAMSUNG=m -CONFIG_HID_SEMITEK=m -CONFIG_HID_SIGMAMICRO=m -CONFIG_HID_SONY=m -CONFIG_SONY_FF=y -CONFIG_HID_SPEEDLINK=m -CONFIG_HID_STEAM=m -CONFIG_STEAM_FF=y -CONFIG_HID_STEELSERIES=m -CONFIG_HID_SUNPLUS=m -CONFIG_HID_RMI=m -CONFIG_HID_GREENASIA=m -CONFIG_GREENASIA_FF=y -CONFIG_HID_HYPERV_MOUSE=m -CONFIG_HID_SMARTJOYPLUS=m -CONFIG_SMARTJOYPLUS_FF=y -CONFIG_HID_TIVO=m -CONFIG_HID_TOPSEED=m -CONFIG_HID_TOPRE=m -CONFIG_HID_THINGM=m -CONFIG_HID_THRUSTMASTER=m -CONFIG_THRUSTMASTER_FF=y -CONFIG_HID_UDRAW_PS3=m -CONFIG_HID_U2FZERO=m -CONFIG_HID_UNIVERSAL_PIDFF=m -CONFIG_HID_WACOM=m -CONFIG_HID_WIIMOTE=m -CONFIG_HID_WINWING=m -CONFIG_HID_XINMO=m -CONFIG_HID_ZEROPLUS=m -CONFIG_ZEROPLUS_FF=y -CONFIG_HID_ZYDACRON=m -CONFIG_HID_SENSOR_HUB=m -CONFIG_HID_SENSOR_CUSTOM_SENSOR=m -CONFIG_HID_ALPS=m -CONFIG_HID_MCP2200=m -CONFIG_HID_MCP2221=m -CONFIG_HID_HUAWEI=m -# end of Special HID drivers - -# -# HID-BPF support -# -CONFIG_HID_BPF=y -# end of HID-BPF support - -CONFIG_I2C_HID=m -CONFIG_I2C_HID_ACPI=m -CONFIG_I2C_HID_OF=m -CONFIG_I2C_HID_CORE=m - -# -# Intel ISH HID support -# -CONFIG_INTEL_ISH_HID=m -CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER=m -# end of Intel ISH HID support - -# -# AMD SFH HID Support -# -CONFIG_AMD_SFH_HID=m -# end of AMD SFH HID Support - -# -# Surface System Aggregator Module HID support -# -CONFIG_SURFACE_HID=m -CONFIG_SURFACE_KBD=m -# end of Surface System Aggregator Module HID support - -CONFIG_SURFACE_HID_CORE=m - -# -# Intel THC HID Support -# -CONFIG_INTEL_THC_HID=m -CONFIG_INTEL_QUICKSPI=m -CONFIG_INTEL_QUICKI2C=m -# end of Intel THC HID Support - -# -# USB HID support -# -CONFIG_USB_HID=y -CONFIG_HID_PID=y -CONFIG_USB_HIDDEV=y -# end of USB HID support - -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -CONFIG_USB_SUPPORT=y -CONFIG_USB_COMMON=y -CONFIG_USB_LED_TRIG=y -CONFIG_USB_ULPI_BUS=m -CONFIG_USB_CONN_GPIO=m -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB=y -CONFIG_USB_PCI=y -CONFIG_USB_PCI_AMD=y -CONFIG_USB_ANNOUNCE_NEW_DEVICES=y - -# -# Miscellaneous USB options -# -CONFIG_USB_DEFAULT_PERSIST=y -# CONFIG_USB_FEW_INIT_RETRIES is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_OTG is not set -# CONFIG_USB_OTG_PRODUCTLIST is not set -CONFIG_USB_LEDS_TRIGGER_USBPORT=m -CONFIG_USB_AUTOSUSPEND_DELAY=2 -CONFIG_USB_DEFAULT_AUTHORIZATION_MODE=1 -CONFIG_USB_MON=m - -# -# USB Host Controller Drivers -# -CONFIG_USB_C67X00_HCD=m -CONFIG_USB_XHCI_HCD=y -CONFIG_USB_XHCI_DBGCAP=y -CONFIG_USB_XHCI_PCI=y -CONFIG_USB_XHCI_PCI_RENESAS=m -CONFIG_USB_XHCI_PLATFORM=m -CONFIG_USB_XHCI_SIDEBAND=y -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -CONFIG_USB_EHCI_TT_NEWSCHED=y -CONFIG_USB_EHCI_PCI=y -CONFIG_USB_EHCI_FSL=m -CONFIG_USB_EHCI_HCD_PLATFORM=m -CONFIG_USB_OXU210HP_HCD=m -CONFIG_USB_ISP116X_HCD=m -CONFIG_USB_MAX3421_HCD=m -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_OHCI_HCD_PCI=y -CONFIG_USB_OHCI_HCD_PLATFORM=m -CONFIG_USB_UHCI_HCD=y -CONFIG_USB_SL811_HCD=m -# CONFIG_USB_SL811_HCD_ISO is not set -CONFIG_USB_SL811_CS=m -CONFIG_USB_R8A66597_HCD=m -CONFIG_USB_HCD_BCMA=m -CONFIG_USB_HCD_SSB=m -# CONFIG_USB_HCD_TEST_MODE is not set -CONFIG_USB_XEN_HCD=m - -# -# USB Device Class drivers -# -CONFIG_USB_ACM=m -CONFIG_USB_PRINTER=m -CONFIG_USB_WDM=m -CONFIG_USB_TMC=m - -# -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; see USB_STORAGE Help for more info -# -CONFIG_USB_STORAGE=m -# CONFIG_USB_STORAGE_DEBUG is not set -CONFIG_USB_STORAGE_REALTEK=m -CONFIG_REALTEK_AUTOPM=y -CONFIG_USB_STORAGE_DATAFAB=m -CONFIG_USB_STORAGE_FREECOM=m -CONFIG_USB_STORAGE_ISD200=m -CONFIG_USB_STORAGE_USBAT=m -CONFIG_USB_STORAGE_SDDR09=m -CONFIG_USB_STORAGE_SDDR55=m -CONFIG_USB_STORAGE_JUMPSHOT=m -CONFIG_USB_STORAGE_ALAUDA=m -CONFIG_USB_STORAGE_ONETOUCH=m -CONFIG_USB_STORAGE_KARMA=m -CONFIG_USB_STORAGE_CYPRESS_ATACB=m -CONFIG_USB_STORAGE_ENE_UB6250=m -CONFIG_USB_UAS=m - -# -# USB Imaging devices -# -CONFIG_USB_MDC800=m -CONFIG_USB_MICROTEK=m -CONFIG_USBIP_CORE=m -CONFIG_USBIP_VHCI_HCD=m -CONFIG_USBIP_VHCI_HC_PORTS=8 -CONFIG_USBIP_VHCI_NR_HCS=1 -CONFIG_USBIP_HOST=m -CONFIG_USBIP_VUDC=m -# CONFIG_USBIP_DEBUG is not set - -# -# USB dual-mode controller drivers -# -CONFIG_USB_CDNS_SUPPORT=m -CONFIG_USB_CDNS_HOST=y -CONFIG_USB_CDNS3=m -CONFIG_USB_CDNS3_GADGET=y -CONFIG_USB_CDNS3_HOST=y -CONFIG_USB_CDNS3_PCI_WRAP=m -CONFIG_USB_CDNSP_PCI=m -CONFIG_USB_CDNSP_GADGET=y -CONFIG_USB_CDNSP_HOST=y -CONFIG_USB_MUSB_HDRC=m -# CONFIG_USB_MUSB_HOST is not set -# CONFIG_USB_MUSB_GADGET is not set -CONFIG_USB_MUSB_DUAL_ROLE=y - -# -# Platform Glue Layer -# - -# -# MUSB DMA mode -# -# CONFIG_MUSB_PIO_ONLY is not set -CONFIG_USB_DWC3=m -CONFIG_USB_DWC3_ULPI=y -# CONFIG_USB_DWC3_HOST is not set -# CONFIG_USB_DWC3_GADGET is not set -CONFIG_USB_DWC3_DUAL_ROLE=y - -# -# Platform Glue Driver Support -# -CONFIG_USB_DWC3_PCI=m -CONFIG_USB_DWC3_HAPS=m -CONFIG_USB_DWC3_GOOGLE=m -CONFIG_USB_DWC2=m -# CONFIG_USB_DWC2_HOST is not set - -# -# Gadget/Dual-role mode requires USB Gadget support to be enabled -# -# CONFIG_USB_DWC2_PERIPHERAL is not set -CONFIG_USB_DWC2_DUAL_ROLE=y -CONFIG_USB_DWC2_PCI=m -# CONFIG_USB_DWC2_DEBUG is not set -# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set -CONFIG_USB_CHIPIDEA=m -CONFIG_USB_CHIPIDEA_UDC=y -CONFIG_USB_CHIPIDEA_HOST=y -CONFIG_USB_CHIPIDEA_PCI=m -CONFIG_USB_CHIPIDEA_MSM=m -CONFIG_USB_CHIPIDEA_NPCM=m -CONFIG_USB_CHIPIDEA_GENERIC=m -CONFIG_USB_ISP1760=m -CONFIG_USB_ISP1760_HCD=y -CONFIG_USB_ISP1761_UDC=y -# CONFIG_USB_ISP1760_HOST_ROLE is not set -# CONFIG_USB_ISP1760_GADGET_ROLE is not set -CONFIG_USB_ISP1760_DUAL_ROLE=y - -# -# USB port drivers -# -CONFIG_USB_SERIAL=y -CONFIG_USB_SERIAL_CONSOLE=y -CONFIG_USB_SERIAL_GENERIC=y -CONFIG_USB_SERIAL_SIMPLE=m -CONFIG_USB_SERIAL_AIRCABLE=m -CONFIG_USB_SERIAL_ARK3116=m -CONFIG_USB_SERIAL_BELKIN=m -CONFIG_USB_SERIAL_CH341=m -CONFIG_USB_SERIAL_WHITEHEAT=m -CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m -CONFIG_USB_SERIAL_CP210X=m -CONFIG_USB_SERIAL_CYPRESS_M8=m -CONFIG_USB_SERIAL_EMPEG=m -CONFIG_USB_SERIAL_FTDI_SIO=m -CONFIG_USB_SERIAL_VISOR=m -CONFIG_USB_SERIAL_IPAQ=m -CONFIG_USB_SERIAL_IR=m -CONFIG_USB_SERIAL_EDGEPORT=m -CONFIG_USB_SERIAL_EDGEPORT_TI=m -CONFIG_USB_SERIAL_F81232=m -CONFIG_USB_SERIAL_F8153X=m -CONFIG_USB_SERIAL_GARMIN=m -CONFIG_USB_SERIAL_IPW=m -CONFIG_USB_SERIAL_IUU=m -CONFIG_USB_SERIAL_KEYSPAN_PDA=m -CONFIG_USB_SERIAL_KEYSPAN=m -CONFIG_USB_SERIAL_KLSI=m -CONFIG_USB_SERIAL_KOBIL_SCT=m -CONFIG_USB_SERIAL_MCT_U232=m -CONFIG_USB_SERIAL_METRO=m -CONFIG_USB_SERIAL_MOS7720=m -CONFIG_USB_SERIAL_MOS7715_PARPORT=y -CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_MXUPORT=m -CONFIG_USB_SERIAL_NAVMAN=m -CONFIG_USB_SERIAL_PL2303=m -CONFIG_USB_SERIAL_OTI6858=m -CONFIG_USB_SERIAL_QCAUX=m -CONFIG_USB_SERIAL_QUALCOMM=m -CONFIG_USB_SERIAL_SPCP8X5=m -CONFIG_USB_SERIAL_SAFE=m -# CONFIG_USB_SERIAL_SAFE_PADDED is not set -CONFIG_USB_SERIAL_SIERRAWIRELESS=m -CONFIG_USB_SERIAL_SYMBOL=m -CONFIG_USB_SERIAL_TI=m -CONFIG_USB_SERIAL_CYBERJACK=m -CONFIG_USB_SERIAL_WWAN=m -CONFIG_USB_SERIAL_OPTION=m -CONFIG_USB_SERIAL_OMNINET=m -CONFIG_USB_SERIAL_OPTICON=m -CONFIG_USB_SERIAL_XSENS_MT=m -CONFIG_USB_SERIAL_WISHBONE=m -CONFIG_USB_SERIAL_SSU100=m -CONFIG_USB_SERIAL_QT2=m -CONFIG_USB_SERIAL_UPD78F0730=m -CONFIG_USB_SERIAL_XR=m -CONFIG_USB_SERIAL_DEBUG=m - -# -# USB Miscellaneous drivers -# -CONFIG_USB_USS720=m -CONFIG_USB_EMI62=m -CONFIG_USB_EMI26=m -CONFIG_USB_ADUTUX=m -CONFIG_USB_SEVSEG=m -CONFIG_USB_LEGOTOWER=m -CONFIG_USB_LCD=m -CONFIG_USB_CYPRESS_CY7C63=m -CONFIG_USB_CYTHERM=m -CONFIG_USB_IDMOUSE=m -CONFIG_USB_APPLEDISPLAY=m -CONFIG_APPLE_MFI_FASTCHARGE=m -CONFIG_USB_LJCA=m -CONFIG_USB_USBIO=m -CONFIG_USB_SISUSBVGA=m -CONFIG_USB_LD=m -CONFIG_USB_TRANCEVIBRATOR=m -CONFIG_USB_IOWARRIOR=m -CONFIG_USB_TEST=m -CONFIG_USB_EHSET_TEST_FIXTURE=m -CONFIG_USB_ISIGHTFW=m -CONFIG_USB_YUREX=m -CONFIG_USB_EZUSB_FX2=m -CONFIG_USB_HUB_USB251XB=m -CONFIG_USB_HSIC_USB3503=m -CONFIG_USB_HSIC_USB4604=m -CONFIG_USB_LINK_LAYER_TEST=m -CONFIG_USB_CHAOSKEY=m -CONFIG_USB_ATM=m -CONFIG_USB_SPEEDTOUCH=m -CONFIG_USB_CXACRU=m -CONFIG_USB_UEAGLEATM=m -CONFIG_USB_XUSBATM=m - -# -# USB Physical Layer drivers -# -CONFIG_USB_PHY=y -CONFIG_NOP_USB_XCEIV=m -CONFIG_USB_GPIO_VBUS=m -CONFIG_TAHVO_USB=m -# CONFIG_TAHVO_USB_HOST_BY_DEFAULT is not set -CONFIG_USB_ISP1301=m -# end of USB Physical Layer drivers - -CONFIG_USB_GADGET=m -# CONFIG_USB_GADGET_DEBUG is not set -# CONFIG_USB_GADGET_DEBUG_FILES is not set -# CONFIG_USB_GADGET_DEBUG_FS is not set -CONFIG_USB_GADGET_VBUS_DRAW=2 -CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 -CONFIG_U_SERIAL_CONSOLE=y - -# -# USB Peripheral Controller -# -CONFIG_USB_GR_UDC=m -CONFIG_USB_R8A66597=m -CONFIG_USB_PXA27X=m -CONFIG_USB_SNP_CORE=m -CONFIG_USB_M66592=m -CONFIG_USB_BDC_UDC=m -CONFIG_USB_AMD5536UDC=m -CONFIG_USB_NET2280=m -CONFIG_USB_GOKU=m -CONFIG_USB_EG20T=m -CONFIG_USB_MAX3420_UDC=m -CONFIG_USB_CDNS2_UDC=m -CONFIG_USB_DUMMY_HCD=m -# end of USB Peripheral Controller - -CONFIG_USB_LIBCOMPOSITE=m -CONFIG_USB_F_ACM=m -CONFIG_USB_F_SS_LB=m -CONFIG_USB_U_SERIAL=m -CONFIG_USB_U_ETHER=m -CONFIG_USB_U_AUDIO=m -CONFIG_USB_F_SERIAL=m -CONFIG_USB_F_OBEX=m -CONFIG_USB_F_NCM=m -CONFIG_USB_F_ECM=m -CONFIG_USB_F_PHONET=m -CONFIG_USB_F_EEM=m -CONFIG_USB_F_SUBSET=m -CONFIG_USB_F_RNDIS=m -CONFIG_USB_F_MASS_STORAGE=m -CONFIG_USB_F_FS=m -CONFIG_USB_F_UAC1=m -CONFIG_USB_F_UAC1_LEGACY=m -CONFIG_USB_F_UAC2=m -CONFIG_USB_F_UVC=m -CONFIG_USB_F_MIDI=m -CONFIG_USB_F_MIDI2=m -CONFIG_USB_F_HID=m -CONFIG_USB_F_PRINTER=m -CONFIG_USB_F_TCM=m -CONFIG_USB_CONFIGFS=m -CONFIG_USB_CONFIGFS_SERIAL=y -CONFIG_USB_CONFIGFS_ACM=y -CONFIG_USB_CONFIGFS_OBEX=y -CONFIG_USB_CONFIGFS_NCM=y -CONFIG_USB_CONFIGFS_ECM=y -CONFIG_USB_CONFIGFS_ECM_SUBSET=y -CONFIG_USB_CONFIGFS_RNDIS=y -CONFIG_USB_CONFIGFS_EEM=y -CONFIG_USB_CONFIGFS_PHONET=y -CONFIG_USB_CONFIGFS_MASS_STORAGE=y -CONFIG_USB_CONFIGFS_F_LB_SS=y -CONFIG_USB_CONFIGFS_F_FS=y -CONFIG_USB_CONFIGFS_F_UAC1=y -CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y -CONFIG_USB_CONFIGFS_F_UAC2=y -CONFIG_USB_CONFIGFS_F_MIDI=y -CONFIG_USB_CONFIGFS_F_MIDI2=y -CONFIG_USB_CONFIGFS_F_HID=y -CONFIG_USB_CONFIGFS_F_UVC=y -CONFIG_USB_CONFIGFS_F_PRINTER=y -CONFIG_USB_CONFIGFS_F_TCM=y - -# -# USB Gadget precomposed configurations -# -CONFIG_USB_ZERO=m -CONFIG_USB_AUDIO=m -# CONFIG_GADGET_UAC1 is not set -CONFIG_USB_ETH=m -CONFIG_USB_ETH_RNDIS=y -CONFIG_USB_ETH_EEM=y -CONFIG_USB_G_NCM=m -CONFIG_USB_GADGETFS=m -CONFIG_USB_FUNCTIONFS=m -CONFIG_USB_FUNCTIONFS_ETH=y -CONFIG_USB_FUNCTIONFS_RNDIS=y -CONFIG_USB_FUNCTIONFS_GENERIC=y -CONFIG_USB_MASS_STORAGE=m -CONFIG_USB_GADGET_TARGET=m -CONFIG_USB_G_SERIAL=m -CONFIG_USB_MIDI_GADGET=m -CONFIG_USB_G_PRINTER=m -CONFIG_USB_CDC_COMPOSITE=m -CONFIG_USB_G_NOKIA=m -CONFIG_USB_G_ACM_MS=m -CONFIG_USB_G_MULTI=m -CONFIG_USB_G_MULTI_RNDIS=y -CONFIG_USB_G_MULTI_CDC=y -CONFIG_USB_G_HID=m -CONFIG_USB_G_DBGP=m -# CONFIG_USB_G_DBGP_PRINTK is not set -CONFIG_USB_G_DBGP_SERIAL=y -CONFIG_USB_G_WEBCAM=m -CONFIG_USB_RAW_GADGET=m -# end of USB Gadget precomposed configurations - -CONFIG_TYPEC=m -CONFIG_TYPEC_TCPM=m -CONFIG_TYPEC_TCPCI=m -CONFIG_TYPEC_RT1711H=m -CONFIG_TYPEC_MT6360=m -CONFIG_TYPEC_TCPCI_MT6370=m -CONFIG_TYPEC_TCPCI_MAXIM=m -CONFIG_TYPEC_FUSB302=m -CONFIG_TYPEC_WCOVE=m -CONFIG_TYPEC_UCSI=m -CONFIG_UCSI_CCG=m -CONFIG_UCSI_ACPI=m -CONFIG_UCSI_STM32G0=m -CONFIG_CROS_EC_UCSI=m -CONFIG_TYPEC_TPS6598X=m -CONFIG_TYPEC_ANX7411=m -CONFIG_TYPEC_RT1719=m -CONFIG_TYPEC_HD3SS3220=m -CONFIG_TYPEC_STUSB160X=m -CONFIG_TYPEC_WUSB3801=m - -# -# USB Type-C Multiplexer/DeMultiplexer Switch support -# -CONFIG_TYPEC_MUX_FSA4480=m -CONFIG_TYPEC_MUX_GPIO_SBU=m -CONFIG_TYPEC_MUX_PI3USB30532=m -CONFIG_TYPEC_MUX_INTEL_PMC=m -CONFIG_TYPEC_MUX_IT5205=m -CONFIG_TYPEC_MUX_NB7VPQ904M=m -CONFIG_TYPEC_MUX_PS883X=m -CONFIG_TYPEC_MUX_PTN36502=m -CONFIG_TYPEC_MUX_TUSB1046=m -CONFIG_TYPEC_MUX_WCD939X_USBSS=m -# end of USB Type-C Multiplexer/DeMultiplexer Switch support - -# -# USB Type-C Alternate Mode drivers -# -CONFIG_TYPEC_DP_ALTMODE=m -CONFIG_TYPEC_NVIDIA_ALTMODE=m -CONFIG_TYPEC_TBT_ALTMODE=m -# end of USB Type-C Alternate Mode drivers - -CONFIG_USB_ROLE_SWITCH=m -CONFIG_USB_ROLES_INTEL_XHCI=m -CONFIG_MMC=m -CONFIG_MMC_BLOCK=m -CONFIG_MMC_BLOCK_MINORS=8 -CONFIG_SDIO_UART=m -CONFIG_MMC_TEST=m -CONFIG_MMC_CRYPTO=y - -# -# MMC/SD/SDIO Host Controller Drivers -# -# CONFIG_MMC_DEBUG is not set -CONFIG_MMC_SDHCI=m -CONFIG_MMC_SDHCI_IO_ACCESSORS=y -CONFIG_MMC_SDHCI_UHS2=m -CONFIG_MMC_SDHCI_PCI=m -CONFIG_MMC_RICOH_MMC=y -CONFIG_MMC_SDHCI_ACPI=m -CONFIG_MMC_SDHCI_PLTFM=m -CONFIG_MMC_SDHCI_F_SDH30=m -CONFIG_MMC_WBSD=m -CONFIG_MMC_ALCOR=m -CONFIG_MMC_TIFM_SD=m -CONFIG_MMC_SPI=m -CONFIG_MMC_SDRICOH_CS=m -CONFIG_MMC_CB710=m -CONFIG_MMC_VIA_SDMMC=m -CONFIG_MMC_VUB300=m -CONFIG_MMC_USHC=m -CONFIG_MMC_USDHI6ROL0=m -CONFIG_MMC_REALTEK_PCI=m -CONFIG_MMC_REALTEK_USB=m -CONFIG_MMC_CQHCI=m -CONFIG_MMC_HSQ=m -CONFIG_MMC_TOSHIBA_PCI=m -CONFIG_MMC_MTK=m -CONFIG_MMC_SDHCI_XENON=m -CONFIG_SCSI_UFSHCD=m -CONFIG_SCSI_UFS_BSG=y -CONFIG_SCSI_UFS_CRYPTO=y -CONFIG_SCSI_UFS_HWMON=y -CONFIG_SCSI_UFSHCD_PCI=m -# CONFIG_SCSI_UFS_DWC_TC_PCI is not set -CONFIG_SCSI_UFSHCD_PLATFORM=m -CONFIG_SCSI_UFS_CDNS_PLATFORM=m -CONFIG_MEMSTICK=m -# CONFIG_MEMSTICK_DEBUG is not set - -# -# MemoryStick drivers -# -# CONFIG_MEMSTICK_UNSAFE_RESUME is not set -CONFIG_MSPRO_BLOCK=m -CONFIG_MS_BLOCK=m - -# -# MemoryStick Host Controller Drivers -# -CONFIG_MEMSTICK_TIFM_MS=m -CONFIG_MEMSTICK_JMICRON_38X=m -CONFIG_MEMSTICK_R592=m -CONFIG_MEMSTICK_REALTEK_USB=m -CONFIG_LEDS_EXPRESSWIRE=y -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y -CONFIG_LEDS_CLASS_FLASH=m -CONFIG_LEDS_CLASS_MULTICOLOR=m -CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y - -# -# LED drivers -# -CONFIG_LEDS_88PM860X=m -CONFIG_LEDS_APU=m -CONFIG_LEDS_OSRAM_AMS_AS3668=m -CONFIG_LEDS_AW200XX=m -CONFIG_LEDS_CHT_WCOVE=m -CONFIG_LEDS_CROS_EC=m -CONFIG_LEDS_LM3530=m -CONFIG_LEDS_LM3532=m -CONFIG_LEDS_LM3533=m -CONFIG_LEDS_LM3642=m -CONFIG_LEDS_MT6323=m -CONFIG_LEDS_PCA9532=m -CONFIG_LEDS_PCA9532_GPIO=y -CONFIG_LEDS_GPIO=m -CONFIG_LEDS_LP3944=m -CONFIG_LEDS_LP3952=m -CONFIG_LEDS_LP50XX=m -CONFIG_LEDS_LP8788=m -CONFIG_LEDS_PCA955X=m -CONFIG_LEDS_PCA955X_GPIO=y -CONFIG_LEDS_PCA963X=m -CONFIG_LEDS_PCA995X=m -CONFIG_LEDS_QNAP_MCU=m -CONFIG_LEDS_WM831X_STATUS=m -CONFIG_LEDS_WM8350=m -CONFIG_LEDS_DA903X=m -CONFIG_LEDS_DA9052=m -CONFIG_LEDS_DAC124S085=m -CONFIG_LEDS_PWM=m -CONFIG_LEDS_REGULATOR=m -CONFIG_LEDS_BD2606MVV=m -CONFIG_LEDS_BD2802=m -CONFIG_LEDS_INTEL_SS4200=m -CONFIG_LEDS_LT3593=m -CONFIG_LEDS_ADP5520=m -CONFIG_LEDS_MAX5970=m -CONFIG_LEDS_MC13783=m -CONFIG_LEDS_TCA6507=m -CONFIG_LEDS_TLC591XX=m -CONFIG_LEDS_MAX77705=m -CONFIG_LEDS_MAX8997=m -CONFIG_LEDS_LM355x=m -CONFIG_LEDS_MENF21BMC=m -CONFIG_LEDS_IS31FL319X=m -CONFIG_LEDS_UPBOARD=m - -# -# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) -# -CONFIG_LEDS_BLINKM=m -CONFIG_LEDS_BLINKM_MULTICOLOR=y -CONFIG_LEDS_MLXCPLD=m -CONFIG_LEDS_MLXREG=m -CONFIG_LEDS_USER=m -CONFIG_LEDS_NIC78BX=m -CONFIG_LEDS_SPI_BYTE=m -CONFIG_LEDS_TI_LMU_COMMON=m -CONFIG_LEDS_LM36274=m -CONFIG_LEDS_TPS6105X=m - -# -# Flash and Torch LED drivers -# -CONFIG_LEDS_AS3645A=m -CONFIG_LEDS_LM3601X=m -CONFIG_LEDS_MT6370_FLASH=m -CONFIG_LEDS_RT8515=m -CONFIG_LEDS_SGM3140=m - -# -# RGB LED drivers -# -CONFIG_LEDS_KTD202X=m -CONFIG_LEDS_LP5812=m -CONFIG_LEDS_PWM_MULTICOLOR=m -CONFIG_LEDS_MT6370_RGB=m - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=m -CONFIG_LEDS_TRIGGER_ONESHOT=m -CONFIG_LEDS_TRIGGER_DISK=y -CONFIG_LEDS_TRIGGER_MTD=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=m -CONFIG_LEDS_TRIGGER_BACKLIGHT=m -CONFIG_LEDS_TRIGGER_CPU=y -CONFIG_LEDS_TRIGGER_ACTIVITY=m -CONFIG_LEDS_TRIGGER_GPIO=m -CONFIG_LEDS_TRIGGER_DEFAULT_ON=m - -# -# iptables trigger is under Netfilter config (LED target) -# -CONFIG_LEDS_TRIGGER_TRANSIENT=m -CONFIG_LEDS_TRIGGER_CAMERA=m -CONFIG_LEDS_TRIGGER_PANIC=y -CONFIG_LEDS_TRIGGER_NETDEV=m -CONFIG_LEDS_TRIGGER_PATTERN=m -CONFIG_LEDS_TRIGGER_TTY=m -CONFIG_LEDS_TRIGGER_INPUT_EVENTS=m - -# -# Simatic LED drivers -# -CONFIG_LEDS_SIEMENS_SIMATIC_IPC=m -CONFIG_LEDS_SIEMENS_SIMATIC_IPC_APOLLOLAKE=m -CONFIG_LEDS_SIEMENS_SIMATIC_IPC_F7188X=m -CONFIG_LEDS_SIEMENS_SIMATIC_IPC_ELKHARTLAKE=m -CONFIG_ACCESSIBILITY=y -CONFIG_A11Y_BRAILLE_CONSOLE=y - -# -# Speakup console speech -# -CONFIG_SPEAKUP=m -CONFIG_SPEAKUP_SYNTH_ACNTSA=m -CONFIG_SPEAKUP_SYNTH_APOLLO=m -CONFIG_SPEAKUP_SYNTH_AUDPTR=m -CONFIG_SPEAKUP_SYNTH_BNS=m -CONFIG_SPEAKUP_SYNTH_DECTLK=m -CONFIG_SPEAKUP_SYNTH_DECEXT=m -CONFIG_SPEAKUP_SYNTH_LTLK=m -CONFIG_SPEAKUP_SYNTH_SOFT=m -CONFIG_SPEAKUP_SYNTH_SPKOUT=m -CONFIG_SPEAKUP_SYNTH_TXPRT=m -CONFIG_SPEAKUP_SYNTH_DUMMY=m -# end of Speakup console speech - -CONFIG_INFINIBAND=m -CONFIG_INFINIBAND_USER_MAD=m -CONFIG_INFINIBAND_USER_ACCESS=m -CONFIG_INFINIBAND_USER_MEM=y -CONFIG_INFINIBAND_ON_DEMAND_PAGING=y -CONFIG_INFINIBAND_ADDR_TRANS=y -CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y -CONFIG_INFINIBAND_VIRT_DMA=y -CONFIG_INFINIBAND_BNXT_RE=m -CONFIG_INFINIBAND_BNG_RE=m -CONFIG_INFINIBAND_CXGB4=m -CONFIG_INFINIBAND_EFA=m -CONFIG_INFINIBAND_ERDMA=m -CONFIG_INFINIBAND_HFI1=m -# CONFIG_HFI1_DEBUG_SDMA_ORDER is not set -# CONFIG_SDMA_VERBOSITY is not set -CONFIG_INFINIBAND_IONIC=m -CONFIG_INFINIBAND_IRDMA=m -CONFIG_MANA_INFINIBAND=m -CONFIG_MLX4_INFINIBAND=m -CONFIG_MLX5_INFINIBAND=m -CONFIG_INFINIBAND_MTHCA=m -CONFIG_INFINIBAND_MTHCA_DEBUG=y -CONFIG_INFINIBAND_OCRDMA=m -CONFIG_INFINIBAND_QEDR=m -CONFIG_INFINIBAND_USNIC=m -CONFIG_INFINIBAND_VMWARE_PVRDMA=m -CONFIG_INFINIBAND_RDMAVT=m -CONFIG_RDMA_RXE=m -CONFIG_RDMA_SIW=m -CONFIG_INFINIBAND_IPOIB=m -CONFIG_INFINIBAND_IPOIB_CM=y -CONFIG_INFINIBAND_IPOIB_DEBUG=y -# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set -CONFIG_INFINIBAND_SRP=m -CONFIG_INFINIBAND_SRPT=m -CONFIG_INFINIBAND_ISER=m -CONFIG_INFINIBAND_ISERT=m -CONFIG_INFINIBAND_RTRS=m -CONFIG_INFINIBAND_RTRS_CLIENT=m -CONFIG_INFINIBAND_RTRS_SERVER=m -CONFIG_EDAC_ATOMIC_SCRUB=y -CONFIG_EDAC_SUPPORT=y -CONFIG_EDAC=y -# CONFIG_EDAC_DEBUG is not set -CONFIG_EDAC_DECODE_MCE=y -CONFIG_EDAC_GHES=y -CONFIG_EDAC_SCRUB=y -CONFIG_EDAC_ECS=y -CONFIG_EDAC_MEM_REPAIR=y -CONFIG_EDAC_AMD64=m -CONFIG_EDAC_E752X=m -CONFIG_EDAC_I82975X=m -CONFIG_EDAC_I3000=m -CONFIG_EDAC_I3200=m -CONFIG_EDAC_IE31200=m -CONFIG_EDAC_X38=m -CONFIG_EDAC_I5400=m -CONFIG_EDAC_I7CORE=m -CONFIG_EDAC_I5100=m -CONFIG_EDAC_I7300=m -CONFIG_EDAC_SBRIDGE=m -CONFIG_EDAC_SKX=m -CONFIG_EDAC_I10NM=m -CONFIG_EDAC_IMH=m -CONFIG_EDAC_PND2=m -CONFIG_EDAC_IGEN6=m -CONFIG_RTC_LIB=y -CONFIG_RTC_MC146818_LIB=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_HCTOSYS=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -CONFIG_RTC_SYSTOHC=y -CONFIG_RTC_SYSTOHC_DEVICE="rtc0" -# CONFIG_RTC_DEBUG is not set -CONFIG_RTC_NVMEM=y - -# -# RTC interfaces -# -CONFIG_RTC_INTF_SYSFS=y -CONFIG_RTC_INTF_PROC=y -CONFIG_RTC_INTF_DEV=y -CONFIG_RTC_INTF_DEV_UIE_EMUL=y -# CONFIG_RTC_DRV_TEST is not set - -# -# I2C RTC drivers -# -CONFIG_RTC_DRV_88PM860X=m -CONFIG_RTC_DRV_88PM80X=m -CONFIG_RTC_DRV_ABB5ZES3=m -CONFIG_RTC_DRV_ABEOZ9=m -CONFIG_RTC_DRV_ABX80X=m -CONFIG_RTC_DRV_DS1307=m -CONFIG_RTC_DRV_DS1307_CENTURY=y -CONFIG_RTC_DRV_DS1374=m -CONFIG_RTC_DRV_DS1374_WDT=y -CONFIG_RTC_DRV_DS1672=m -CONFIG_RTC_DRV_LP8788=m -CONFIG_RTC_DRV_MAX6900=m -CONFIG_RTC_DRV_MAX8907=m -CONFIG_RTC_DRV_MAX8925=m -CONFIG_RTC_DRV_MAX8998=m -CONFIG_RTC_DRV_MAX8997=m -CONFIG_RTC_DRV_MAX31335=m -CONFIG_RTC_DRV_NCT6694=m -CONFIG_RTC_DRV_RS5C372=m -CONFIG_RTC_DRV_ISL1208=m -CONFIG_RTC_DRV_ISL12022=m -CONFIG_RTC_DRV_X1205=m -CONFIG_RTC_DRV_PCF8523=m -CONFIG_RTC_DRV_PCF85363=m -CONFIG_RTC_DRV_PCF8563=m -CONFIG_RTC_DRV_PCF8583=m -CONFIG_RTC_DRV_M41T80=m -CONFIG_RTC_DRV_M41T80_WDT=y -CONFIG_RTC_DRV_BQ32K=m -CONFIG_RTC_DRV_PALMAS=m -CONFIG_RTC_DRV_TPS6586X=m -CONFIG_RTC_DRV_TPS6594=m -CONFIG_RTC_DRV_TPS65910=m -CONFIG_RTC_DRV_RC5T583=m -CONFIG_RTC_DRV_S35390A=m -CONFIG_RTC_DRV_FM3130=m -CONFIG_RTC_DRV_RX8010=m -CONFIG_RTC_DRV_RX8111=m -CONFIG_RTC_DRV_RX8581=m -CONFIG_RTC_DRV_RX8025=m -CONFIG_RTC_DRV_EM3027=m -CONFIG_RTC_DRV_RV3028=m -CONFIG_RTC_DRV_RV3032=m -CONFIG_RTC_DRV_RV8803=m -CONFIG_RTC_DRV_SD2405AL=m -CONFIG_RTC_DRV_SD3078=m - -# -# SPI RTC drivers -# -CONFIG_RTC_DRV_M41T93=m -CONFIG_RTC_DRV_M41T94=m -CONFIG_RTC_DRV_DS1302=m -CONFIG_RTC_DRV_DS1305=m -CONFIG_RTC_DRV_DS1343=m -CONFIG_RTC_DRV_DS1347=m -CONFIG_RTC_DRV_DS1390=m -CONFIG_RTC_DRV_MAX6916=m -CONFIG_RTC_DRV_R9701=m -CONFIG_RTC_DRV_RX4581=m -CONFIG_RTC_DRV_RS5C348=m -CONFIG_RTC_DRV_MAX6902=m -CONFIG_RTC_DRV_PCF2123=m -CONFIG_RTC_DRV_MCP795=m -CONFIG_RTC_I2C_AND_SPI=y - -# -# SPI and I2C RTC drivers -# -CONFIG_RTC_DRV_DS3232=m -CONFIG_RTC_DRV_DS3232_HWMON=y -CONFIG_RTC_DRV_PCF2127=m -CONFIG_RTC_DRV_PCF85063=m -CONFIG_RTC_DRV_RV3029C2=m -CONFIG_RTC_DRV_RV3029_HWMON=y -CONFIG_RTC_DRV_RX6110=m - -# -# Platform RTC drivers -# -CONFIG_RTC_DRV_CMOS=y -CONFIG_RTC_DRV_DS1286=m -CONFIG_RTC_DRV_DS1511=m -CONFIG_RTC_DRV_DS1553=m -CONFIG_RTC_DRV_DS1685_FAMILY=m -CONFIG_RTC_DRV_DS1685=y -# CONFIG_RTC_DRV_DS1689 is not set -# CONFIG_RTC_DRV_DS17285 is not set -# CONFIG_RTC_DRV_DS17485 is not set -# CONFIG_RTC_DRV_DS17885 is not set -CONFIG_RTC_DRV_DS1742=m -CONFIG_RTC_DRV_DS2404=m -CONFIG_RTC_DRV_DA9052=m -CONFIG_RTC_DRV_DA9055=m -CONFIG_RTC_DRV_DA9063=m -CONFIG_RTC_DRV_STK17TA8=m -CONFIG_RTC_DRV_M48T86=m -CONFIG_RTC_DRV_M48T35=m -CONFIG_RTC_DRV_M48T59=m -CONFIG_RTC_DRV_MSM6242=m -CONFIG_RTC_DRV_RP5C01=m -CONFIG_RTC_DRV_WM831X=m -CONFIG_RTC_DRV_WM8350=m -CONFIG_RTC_DRV_CROS_EC=m - -# -# on-CPU RTC drivers -# -CONFIG_RTC_DRV_FTRTC010=m -CONFIG_RTC_DRV_PCAP=m -CONFIG_RTC_DRV_MC13XXX=m -CONFIG_RTC_DRV_MT6397=m -CONFIG_RTC_DRV_GOLDFISH=m -CONFIG_RTC_DRV_WILCO_EC=m - -# -# HID Sensor RTC drivers -# -CONFIG_RTC_DRV_HID_SENSOR_TIME=m -CONFIG_DMADEVICES=y -# CONFIG_DMADEVICES_DEBUG is not set - -# -# DMA Devices -# -CONFIG_DMA_ENGINE=y -CONFIG_DMA_VIRTUAL_CHANNELS=y -CONFIG_DMA_ACPI=y -CONFIG_ALTERA_MSGDMA=m -CONFIG_INTEL_IDMA64=m -CONFIG_INTEL_IDXD_BUS=m -CONFIG_INTEL_IDXD=m -# CONFIG_INTEL_IDXD_COMPAT is not set -CONFIG_INTEL_IDXD_SVM=y -CONFIG_INTEL_IDXD_PERFMON=y -CONFIG_INTEL_IOATDMA=m -CONFIG_PLX_DMA=m -CONFIG_SWITCHTEC_DMA=m -CONFIG_XILINX_DMA=m -CONFIG_XILINX_XDMA=m -CONFIG_AMD_AE4DMA=m -CONFIG_AMD_PTDMA=m -CONFIG_AMD_QDMA=m -CONFIG_QCOM_HIDMA_MGMT=m -CONFIG_QCOM_HIDMA=m -CONFIG_DW_DMAC_CORE=y -CONFIG_DW_DMAC=m -CONFIG_DW_DMAC_PCI=y -CONFIG_DW_EDMA=m -CONFIG_DW_EDMA_PCIE=m -CONFIG_HSU_DMA=m -CONFIG_SF_PDMA=m -CONFIG_INTEL_LDMA=y - -# -# DMA Clients -# -CONFIG_ASYNC_TX_DMA=y -# CONFIG_DMATEST is not set -CONFIG_DMA_ENGINE_RAID=y - -# -# DMABUF options -# -CONFIG_SYNC_FILE=y -# CONFIG_SW_SYNC is not set -CONFIG_UDMABUF=y -# CONFIG_DMABUF_DEBUG is not set -# CONFIG_DMABUF_SELFTESTS is not set -CONFIG_DMABUF_HEAPS=y -CONFIG_DMABUF_HEAPS_SYSTEM=y -CONFIG_DMABUF_HEAPS_CMA=y -# end of DMABUF options - -CONFIG_DCA=m -CONFIG_UIO=m -CONFIG_UIO_CIF=m -CONFIG_UIO_PDRV_GENIRQ=m -CONFIG_UIO_DMEM_GENIRQ=m -CONFIG_UIO_AEC=m -CONFIG_UIO_SERCOS3=m -CONFIG_UIO_PCI_GENERIC=m -CONFIG_UIO_NETX=m -CONFIG_UIO_MF624=m -CONFIG_UIO_HV_GENERIC=m -CONFIG_UIO_DFL=m -CONFIG_UIO_PCI_GENERIC_SVA=m -CONFIG_VFIO=m -CONFIG_VFIO_DEVICE_CDEV=y -CONFIG_VFIO_GROUP=y -CONFIG_VFIO_CONTAINER=y -CONFIG_VFIO_IOMMU_TYPE1=m -# CONFIG_VFIO_NOIOMMU is not set -CONFIG_VFIO_VIRQFD=y -CONFIG_VFIO_DEBUGFS=y - -# -# VFIO support for PCI devices -# -CONFIG_VFIO_PCI_CORE=m -CONFIG_VFIO_PCI_INTX=y -CONFIG_VFIO_PCI=m -CONFIG_VFIO_PCI_VGA=y -CONFIG_VFIO_PCI_IGD=y -CONFIG_VFIO_PCI_DMABUF=y -CONFIG_MLX5_VFIO_PCI=m -CONFIG_PDS_VFIO_PCI=m -CONFIG_VIRTIO_VFIO_PCI=m -CONFIG_VIRTIO_VFIO_PCI_ADMIN_LEGACY=y -CONFIG_QAT_VFIO_PCI=m -CONFIG_XE_VFIO_PCI=m -# end of VFIO support for PCI devices - -CONFIG_VFIO_MDEV=m -CONFIG_IRQ_BYPASS_MANAGER=m -CONFIG_VIRT_DRIVERS=y -CONFIG_VMGENID=y -CONFIG_VBOXGUEST=m -CONFIG_NITRO_ENCLAVES=m -CONFIG_ACRN_HSM=m -CONFIG_EFI_SECRET=m -CONFIG_SEV_GUEST=m -CONFIG_TDX_GUEST_DRIVER=m -CONFIG_TSM_GUEST=y -CONFIG_TSM_REPORTS=m -CONFIG_TSM_MEASUREMENTS=y -CONFIG_TSM=y -CONFIG_VIRTIO_ANCHOR=y -CONFIG_VIRTIO=y -CONFIG_VIRTIO_PCI_LIB=y -CONFIG_VIRTIO_PCI_LIB_LEGACY=y -CONFIG_VIRTIO_MENU=y -CONFIG_VIRTIO_PCI=y -CONFIG_VIRTIO_PCI_ADMIN_LEGACY=y -CONFIG_VIRTIO_PCI_LEGACY=y -CONFIG_VIRTIO_VDPA=m -CONFIG_VIRTIO_PMEM=m -CONFIG_VIRTIO_BALLOON=m -CONFIG_VIRTIO_MEM=m -CONFIG_VIRTIO_INPUT=m -CONFIG_VIRTIO_MMIO=m -CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y -CONFIG_VIRTIO_DMA_SHARED_BUFFER=m -CONFIG_VIRTIO_DEBUG=y -CONFIG_VIRTIO_RTC=m -CONFIG_VIRTIO_RTC_PTP=y -CONFIG_VIRTIO_RTC_CLASS=y -CONFIG_VDPA=m -CONFIG_VDPA_SIM=m -CONFIG_VDPA_SIM_NET=m -CONFIG_VDPA_SIM_BLOCK=m -CONFIG_VDPA_USER=m -CONFIG_IFCVF=m -CONFIG_MLX5_VDPA=y -CONFIG_MLX5_VDPA_NET=m -# CONFIG_MLX5_VDPA_STEERING_DEBUG is not set -CONFIG_VP_VDPA=m -CONFIG_ALIBABA_ENI_VDPA=m -CONFIG_SNET_VDPA=m -CONFIG_PDS_VDPA=m -CONFIG_OCTEONEP_VDPA=m -CONFIG_VHOST_IOTLB=m -CONFIG_VHOST_RING=m -CONFIG_VHOST_TASK=y -CONFIG_VHOST=m -CONFIG_VHOST_MENU=y -CONFIG_VHOST_NET=m -CONFIG_VHOST_SCSI=m -CONFIG_VHOST_VSOCK=m -CONFIG_VHOST_VDPA=m -# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set -CONFIG_VHOST_ENABLE_FORK_OWNER_CONTROL=y - -# -# Microsoft Hyper-V guest support -# -CONFIG_HYPERV=y -# CONFIG_HYPERV_VTL_MODE is not set -CONFIG_HYPERV_TIMER=y -CONFIG_HYPERV_UTILS=m -CONFIG_HYPERV_BALLOON=m -CONFIG_HYPERV_VMBUS=m -CONFIG_MSHV_ROOT=m -# end of Microsoft Hyper-V guest support - -# -# Xen driver support -# -CONFIG_XEN_BALLOON=y -CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y -CONFIG_XEN_MEMORY_HOTPLUG_LIMIT=512 -CONFIG_XEN_SCRUB_PAGES_DEFAULT=y -CONFIG_XEN_DEV_EVTCHN=m -CONFIG_XEN_BACKEND=y -CONFIG_XENFS=m -CONFIG_XEN_COMPAT_XENFS=y -CONFIG_XEN_SYS_HYPERVISOR=y -CONFIG_XEN_XENBUS_FRONTEND=y -CONFIG_XEN_GNTDEV=m -CONFIG_XEN_GNTDEV_DMABUF=y -CONFIG_XEN_GRANT_DEV_ALLOC=m -CONFIG_XEN_GRANT_DMA_ALLOC=y -CONFIG_SWIOTLB_XEN=y -CONFIG_XEN_PCI_STUB=y -CONFIG_XEN_PCIDEV_BACKEND=m -CONFIG_XEN_PVCALLS_FRONTEND=m -CONFIG_XEN_PVCALLS_BACKEND=m -CONFIG_XEN_SCSI_BACKEND=m -CONFIG_XEN_PRIVCMD=m -CONFIG_XEN_PRIVCMD_EVENTFD=y -CONFIG_XEN_ACPI_PROCESSOR=m -CONFIG_XEN_MCE_LOG=y -CONFIG_XEN_HAVE_PVMMU=y -CONFIG_XEN_EFI=y -CONFIG_XEN_AUTO_XLATE=y -CONFIG_XEN_ACPI=y -CONFIG_XEN_SYMS=y -CONFIG_XEN_HAVE_VPMU=y -CONFIG_XEN_FRONT_PGDIR_SHBUF=m -CONFIG_XEN_UNPOPULATED_ALLOC=y -CONFIG_XEN_GRANT_DMA_OPS=y -CONFIG_XEN_VIRTIO=y -# CONFIG_XEN_VIRTIO_FORCE_GRANT is not set -# end of Xen driver support - -# CONFIG_GREYBUS is not set -# CONFIG_COMEDI is not set -CONFIG_GPIB=m -CONFIG_GPIB_COMMON=m -CONFIG_GPIB_AGILENT_82350B=m -CONFIG_GPIB_AGILENT_82357A=m -CONFIG_GPIB_CEC_PCI=m -CONFIG_GPIB_NI_PCI_ISA=m -CONFIG_GPIB_CB7210=m -CONFIG_GPIB_NI_USB=m -CONFIG_GPIB_INES=m -CONFIG_GPIB_PCMCIA=y -CONFIG_GPIB_LPVO=m -CONFIG_GPIB_TMS9914=m -CONFIG_GPIB_NEC7210=m -CONFIG_STAGING=y -CONFIG_RTL8723BS=m - -# -# IIO staging drivers -# - -# -# Accelerometers -# -CONFIG_ADIS16203=m -# end of Accelerometers - -# -# Analog to digital converters -# -CONFIG_AD7816=m -# end of Analog to digital converters - -# -# Analog digital bi-direction converters -# -CONFIG_ADT7316=m -CONFIG_ADT7316_SPI=m -CONFIG_ADT7316_I2C=m -# end of Analog digital bi-direction converters - -# -# Direct Digital Synthesis -# -CONFIG_AD9832=m -CONFIG_AD9834=m -# end of Direct Digital Synthesis - -# -# Network Analyzer, Impedance Converters -# -CONFIG_AD5933=m -# end of Network Analyzer, Impedance Converters -# end of IIO staging drivers - -# CONFIG_FB_SM750 is not set -CONFIG_STAGING_MEDIA=y -# CONFIG_INTEL_ATOMISP is not set -CONFIG_DVB_AV7110_IR=y -CONFIG_DVB_AV7110=m -CONFIG_DVB_AV7110_OSD=y -CONFIG_DVB_SP8870=m -CONFIG_VIDEO_IPU3_IMGU=m -CONFIG_VIDEO_INTEL_IPU7=m -# CONFIG_STAGING_MEDIA_DEPRECATED is not set -# CONFIG_FB_TFT is not set -CONFIG_MOST_COMPONENTS=m -CONFIG_MOST_NET=m -CONFIG_MOST_VIDEO=m -# CONFIG_VME_BUS is not set -# CONFIG_GOLDFISH is not set -CONFIG_CHROME_PLATFORMS=y -CONFIG_CHROMEOS_ACPI=m -CONFIG_CHROMEOS_LAPTOP=m -CONFIG_CHROMEOS_PSTORE=m -CONFIG_CHROMEOS_TBMC=m -CONFIG_CROS_EC=m -CONFIG_CROS_EC_I2C=m -CONFIG_CROS_EC_ISHTP=m -CONFIG_CROS_EC_SPI=m -CONFIG_CROS_EC_UART=m -CONFIG_CROS_EC_LPC=m -CONFIG_CROS_EC_PROTO=m -CONFIG_CROS_KBD_LED_BACKLIGHT=m -CONFIG_CROS_EC_CHARDEV=m -CONFIG_CROS_EC_LIGHTBAR=m -CONFIG_CROS_EC_DEBUGFS=m -CONFIG_CROS_EC_SENSORHUB=m -CONFIG_CROS_EC_SYSFS=m -CONFIG_CROS_EC_TYPEC_ALTMODES=y -CONFIG_CROS_EC_TYPEC=m -CONFIG_CROS_HPS_I2C=m -CONFIG_CROS_USBPD_LOGGER=m -CONFIG_CROS_USBPD_NOTIFY=m -CONFIG_CHROMEOS_PRIVACY_SCREEN=m -CONFIG_CROS_TYPEC_SWITCH=m -CONFIG_WILCO_EC=m -CONFIG_WILCO_EC_DEBUGFS=m -CONFIG_WILCO_EC_EVENTS=m -CONFIG_WILCO_EC_TELEMETRY=m -CONFIG_MELLANOX_PLATFORM=y -CONFIG_MLX_PLATFORM=m -CONFIG_MLXREG_DPU=m -CONFIG_MLXREG_HOTPLUG=m -CONFIG_MLXREG_IO=m -CONFIG_MLXREG_LC=m -CONFIG_NVSW_SN2201=m -CONFIG_SURFACE_PLATFORMS=y -CONFIG_SURFACE3_WMI=m -CONFIG_SURFACE_3_POWER_OPREGION=m -CONFIG_SURFACE_ACPI_NOTIFY=m -CONFIG_SURFACE_AGGREGATOR_CDEV=m -CONFIG_SURFACE_AGGREGATOR_HUB=m -CONFIG_SURFACE_AGGREGATOR_REGISTRY=m -CONFIG_SURFACE_AGGREGATOR_TABLET_SWITCH=m -CONFIG_SURFACE_DTX=m -CONFIG_SURFACE_GPE=m -CONFIG_SURFACE_HOTPLUG=m -CONFIG_SURFACE_PLATFORM_PROFILE=m -CONFIG_SURFACE_PRO3_BUTTON=m -CONFIG_SURFACE_AGGREGATOR=m -CONFIG_SURFACE_AGGREGATOR_BUS=y -# CONFIG_SURFACE_AGGREGATOR_ERROR_INJECTION is not set -CONFIG_X86_PLATFORM_DEVICES=y -CONFIG_WMI_BMOF=m -CONFIG_HUAWEI_WMI=m -CONFIG_X86_PLATFORM_DRIVERS_UNIWILL=y -CONFIG_UNIWILL_LAPTOP=m -CONFIG_MXM_WMI=m -CONFIG_NVIDIA_WMI_EC_BACKLIGHT=m -CONFIG_XIAOMI_WMI=m -CONFIG_REDMI_WMI=m -CONFIG_GIGABYTE_WMI=m -CONFIG_BITLAND_MIFS_WMI=m -CONFIG_ACERHDF=m -CONFIG_ACER_WIRELESS=m -CONFIG_ACPI_CALL=m -CONFIG_ACER_WMI=m -CONFIG_AMD_HSMP=m - -# -# AMD HSMP Driver -# -CONFIG_AMD_HSMP_ACPI=m -CONFIG_AMD_HSMP_PLAT=m -# end of AMD HSMP Driver - -CONFIG_AMD_PMF=m -# CONFIG_AMD_PMF_DEBUG is not set -CONFIG_AMD_PMC=m -CONFIG_AMD_MP2_STB=y -CONFIG_AMD_HFI=y -CONFIG_AMD_3D_VCACHE=y -CONFIG_AMD_WBRF=y -CONFIG_AMD_ISP_PLATFORM=m -CONFIG_ADV_SWBUTTON=m -CONFIG_APPLE_GMUX=m -CONFIG_ASUS_LAPTOP=m -CONFIG_ASUS_WIRELESS=m -CONFIG_ASUS_ARMOURY=m -CONFIG_ASUS_WMI=m -CONFIG_ASUS_WMI_DEPRECATED_ATTRS=y -CONFIG_ASUS_NB_WMI=m -CONFIG_ASUS_TF103C_DOCK=m -CONFIG_AYANEO_EC=m -CONFIG_MERAKI_MX100=m -CONFIG_EEEPC_LAPTOP=m -CONFIG_EEEPC_WMI=m -CONFIG_X86_PLATFORM_DRIVERS_DELL=y -CONFIG_ALIENWARE_WMI=m -CONFIG_ALIENWARE_WMI_LEGACY=y -CONFIG_ALIENWARE_WMI_WMAX=y -CONFIG_DCDBAS=m -CONFIG_DELL_LAPTOP=m -# CONFIG_DELL_RBU is not set -CONFIG_DELL_RBTN=m -CONFIG_DELL_PC=m -CONFIG_DELL_SMBIOS=m -CONFIG_DELL_SMBIOS_WMI=y -CONFIG_DELL_SMBIOS_SMM=y -CONFIG_DELL_SMO8800=m -CONFIG_DELL_UART_BACKLIGHT=m -CONFIG_DELL_WMI=m -CONFIG_DELL_WMI_PRIVACY=y -CONFIG_DELL_WMI_AIO=m -CONFIG_DELL_WMI_DESCRIPTOR=m -CONFIG_DELL_WMI_DDV=m -CONFIG_DELL_WMI_LED=m -CONFIG_DELL_WMI_SYSMAN=m -CONFIG_AMILO_RFKILL=m -CONFIG_FUJITSU_LAPTOP=m -CONFIG_FUJITSU_TABLET=m -CONFIG_GPD_POCKET_FAN=m -CONFIG_X86_PLATFORM_DRIVERS_HP=y -CONFIG_HP_ACCEL=m -CONFIG_HP_WMI=m -CONFIG_HP_BIOSCFG=m -CONFIG_WIRELESS_HOTKEY=m -CONFIG_IBM_RTL=m -CONFIG_SENSORS_HDAPS=m -CONFIG_INTEL_ATOMISP2_PDX86=y -CONFIG_INTEL_ATOMISP2_LED=m -CONFIG_INTEL_ATOMISP2_PM=m -CONFIG_INTEL_IFS=m -CONFIG_INTEL_SAR_INT1092=m -CONFIG_INTEL_SKL_INT3472=m -CONFIG_INTEL_PMC_CORE=m -CONFIG_INTEL_PMC_SSRAM_TELEMETRY=m -CONFIG_INTEL_PMT_CLASS=m -CONFIG_INTEL_PMT_TELEMETRY=m -CONFIG_INTEL_PMT_CRASHLOG=m -CONFIG_INTEL_PMT_DISCOVERY=m - -# -# Intel Speed Select Technology interface support -# -CONFIG_INTEL_SPEED_SELECT_TPMI=m -CONFIG_INTEL_SPEED_SELECT_INTERFACE=m -# end of Intel Speed Select Technology interface support - -CONFIG_INTEL_TELEMETRY=m -CONFIG_INTEL_WMI=y -CONFIG_INTEL_WMI_SBL_FW_UPDATE=m -CONFIG_INTEL_WMI_THUNDERBOLT=m - -# -# Intel Uncore Frequency Control -# -CONFIG_INTEL_UNCORE_FREQ_CONTROL_TPMI=m -CONFIG_INTEL_UNCORE_FREQ_CONTROL=m -# end of Intel Uncore Frequency Control - -CONFIG_INTEL_HID_EVENT=m -CONFIG_INTEL_VBTN=m -CONFIG_INTEL_EHL_PSE_IO=m -CONFIG_INTEL_INT0002_VGPIO=m -CONFIG_INTEL_OAKTRAIL=m -CONFIG_INTEL_BXTWC_PMIC_TMU=m -CONFIG_INTEL_BYTCRC_PWRSRC=m -CONFIG_INTEL_CHTDC_TI_PWRBTN=m -CONFIG_INTEL_CHTWC_INT33FE=m -CONFIG_INTEL_ISHTP_ECLITE=m -CONFIG_INTEL_MRFLD_PWRBTN=m -CONFIG_INTEL_PUNIT_IPC=m -CONFIG_INTEL_RST=m -CONFIG_INTEL_SDSI=m -CONFIG_INTEL_SMARTCONNECT=m -CONFIG_INTEL_TPMI_POWER_DOMAINS=m -CONFIG_INTEL_TPMI=m -CONFIG_INTEL_PLR_TPMI=m -CONFIG_INTEL_TURBO_MAX_3=y -CONFIG_INTEL_VSEC=m -CONFIG_IDEAPAD_LAPTOP=m -CONFIG_LENOVO_WMI_HOTKEY_UTILITIES=m -CONFIG_LENOVO_WMI_CAMERA=m -CONFIG_LENOVO_YMC=m -CONFIG_THINKPAD_ACPI=m -CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y -# CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set -# CONFIG_THINKPAD_ACPI_DEBUG is not set -# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set -CONFIG_THINKPAD_ACPI_VIDEO=y -CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y -CONFIG_THINKPAD_LMI=m -CONFIG_YOGABOOK=m -CONFIG_YT2_1380=m -CONFIG_LENOVO_WMI_CAPDATA=m -CONFIG_LENOVO_WMI_EVENTS=m -CONFIG_LENOVO_WMI_HELPERS=m -CONFIG_LENOVO_WMI_GAMEZONE=m -CONFIG_LENOVO_WMI_TUNING=m -CONFIG_ACPI_QUICKSTART=m -CONFIG_MEEGOPAD_ANX7428=m -CONFIG_MSI_EC=m -CONFIG_MSI_LAPTOP=m -CONFIG_MSI_WMI=m -CONFIG_MSI_WMI_PLATFORM=m -CONFIG_PCENGINES_APU2=m -CONFIG_PORTWELL_EC=m -CONFIG_BARCO_P50_GPIO=m -CONFIG_SAMSUNG_GALAXYBOOK=m -CONFIG_SAMSUNG_LAPTOP=m -CONFIG_SAMSUNG_Q10=m -CONFIG_ACPI_TOSHIBA=m -CONFIG_TOSHIBA_BT_RFKILL=m -CONFIG_TOSHIBA_HAPS=m -CONFIG_TOSHIBA_WMI=m -CONFIG_ACPI_CMPC=m -CONFIG_COMPAL_LAPTOP=m -CONFIG_LG_LAPTOP=m -CONFIG_PANASONIC_LAPTOP=m -CONFIG_SONY_LAPTOP=m -CONFIG_SONYPI_COMPAT=y -CONFIG_SYSTEM76_ACPI=m -CONFIG_TOPSTAR_LAPTOP=m -CONFIG_SERIAL_MULTI_INSTANTIATE=m -CONFIG_TOUCHSCREEN_DMI=y -CONFIG_INSPUR_PLATFORM_PROFILE=m -CONFIG_DASHARO_ACPI=m -CONFIG_X86_ANDROID_TABLETS=m -CONFIG_FW_ATTR_CLASS=m -CONFIG_INTEL_IPS=m -CONFIG_INTEL_SCU_IPC=y -CONFIG_INTEL_SCU=y -CONFIG_INTEL_SCU_PCI=y -CONFIG_INTEL_SCU_PLATFORM=m -CONFIG_INTEL_SCU_IPC_UTIL=m -CONFIG_SIEMENS_SIMATIC_IPC=m -CONFIG_SIEMENS_SIMATIC_IPC_BATT=m -CONFIG_SIEMENS_SIMATIC_IPC_BATT_APOLLOLAKE=m -CONFIG_SIEMENS_SIMATIC_IPC_BATT_ELKHARTLAKE=m -CONFIG_SIEMENS_SIMATIC_IPC_BATT_F7188X=m -CONFIG_SILICOM_PLATFORM=m -CONFIG_WINMATE_FM07_KEYS=m -CONFIG_SEL3350_PLATFORM=m -CONFIG_OXP_EC=m -CONFIG_TUXEDO_NB04_WMI_AB=m -CONFIG_P2SB=y -CONFIG_ACPI_WMI=m -# CONFIG_ACPI_WMI_LEGACY_DEVICE_NAMES is not set -CONFIG_HAVE_CLK=y -CONFIG_HAVE_CLK_PREPARE=y -CONFIG_COMMON_CLK=y -CONFIG_COMMON_CLK_WM831X=m -CONFIG_LMK04832=m -CONFIG_COMMON_CLK_MAX9485=m -CONFIG_COMMON_CLK_SI5341=m -CONFIG_COMMON_CLK_SI5351=m -CONFIG_COMMON_CLK_SI544=m -CONFIG_COMMON_CLK_CDCE706=m -CONFIG_COMMON_CLK_TPS68470=m -CONFIG_COMMON_CLK_CS2000_CP=m -CONFIG_CLK_TWL=m -CONFIG_CLK_TWL6040=m -CONFIG_COMMON_CLK_PALMAS=m -CONFIG_COMMON_CLK_PWM=m -CONFIG_XILINX_VCU=m -CONFIG_HWSPINLOCK=y - -# -# Clock Source drivers -# -CONFIG_CLKEVT_I8253=y -CONFIG_I8253_LOCK=y -CONFIG_CLKBLD_I8253=y -# end of Clock Source drivers - -CONFIG_MAILBOX=y -CONFIG_PCC=y -CONFIG_ALTERA_MBOX=m -CONFIG_IOMMU_IOVA=y -CONFIG_IOMMU_API=y -CONFIG_IOMMUFD_DRIVER=y -CONFIG_IOMMU_SUPPORT=y - -# -# Generic IOMMU Pagetable Support -# -# end of Generic IOMMU Pagetable Support - -# CONFIG_IOMMU_DEBUGFS is not set -# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set -CONFIG_IOMMU_DEFAULT_DMA_LAZY=y -# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set -CONFIG_IOMMU_DMA=y -CONFIG_IOMMU_SVA=y -CONFIG_IOMMU_IOPF=y -CONFIG_AMD_IOMMU=y -# CONFIG_AMD_IOMMU_IOMMUFD is not set -CONFIG_DMAR_TABLE=y -CONFIG_INTEL_IOMMU=y -CONFIG_INTEL_IOMMU_SVM=y -# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set -CONFIG_INTEL_IOMMU_FLOPPY_WA=y -CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON=y -CONFIG_INTEL_IOMMU_PERF_EVENTS=y -CONFIG_IOMMUFD_DRIVER_CORE=y -CONFIG_IOMMUFD=m -CONFIG_IRQ_REMAP=y -CONFIG_HYPERV_IOMMU=y -CONFIG_VIRTIO_IOMMU=m -CONFIG_GENERIC_PT=y -# CONFIG_DEBUG_GENERIC_PT is not set -CONFIG_IOMMU_PT=y -CONFIG_IOMMU_PT_AMDV1=y -CONFIG_IOMMU_PT_VTDSS=y -CONFIG_IOMMU_PT_RISCV64=m -CONFIG_IOMMU_PT_X86_64=y - -# -# Remoteproc drivers -# -CONFIG_REMOTEPROC=y -CONFIG_REMOTEPROC_CDEV=y -# end of Remoteproc drivers - -# -# Rpmsg drivers -# -CONFIG_RPMSG=m -CONFIG_RPMSG_CHAR=m -CONFIG_RPMSG_CTRL=m -CONFIG_RPMSG_NS=m -CONFIG_RPMSG_QCOM_GLINK=m -CONFIG_RPMSG_QCOM_GLINK_RPM=m -CONFIG_RPMSG_VIRTIO=m -# end of Rpmsg drivers - -CONFIG_SOUNDWIRE=m - -# -# SoundWire Devices -# -CONFIG_SOUNDWIRE_AMD=m -CONFIG_SOUNDWIRE_CADENCE=m -CONFIG_SOUNDWIRE_INTEL=m -CONFIG_SOUNDWIRE_QCOM=m -CONFIG_SOUNDWIRE_GENERIC_ALLOCATION=m - -# -# SOC (System On Chip) specific Drivers -# - -# -# Amlogic SoC drivers -# -# end of Amlogic SoC drivers - -# -# Broadcom SoC drivers -# -# end of Broadcom SoC drivers - -# -# NXP/Freescale QorIQ SoC drivers -# -# end of NXP/Freescale QorIQ SoC drivers - -# -# fujitsu SoC drivers -# -# end of fujitsu SoC drivers - -# -# i.MX SoC drivers -# -# end of i.MX SoC drivers - -# -# Enable LiteX SoC Builder specific drivers -# -# end of Enable LiteX SoC Builder specific drivers - -CONFIG_WPCM450_SOC=m - -# -# Qualcomm SoC drivers -# -CONFIG_QCOM_MDT_LOADER=m -CONFIG_QCOM_PMIC_PDCHARGER_ULOG=m -CONFIG_QCOM_QMI_HELPERS=m -# end of Qualcomm SoC drivers - -CONFIG_SOC_TI=y - -# -# Xilinx SoC drivers -# -# end of Xilinx SoC drivers -# end of SOC (System On Chip) specific Drivers - -# -# PM Domains -# - -# -# Amlogic PM Domains -# -# end of Amlogic PM Domains - -# -# Broadcom PM Domains -# -# end of Broadcom PM Domains - -# -# i.MX PM Domains -# -# end of i.MX PM Domains - -# -# Qualcomm PM Domains -# -# end of Qualcomm PM Domains -# end of PM Domains - -CONFIG_PM_DEVFREQ=y - -# -# DEVFREQ Governors -# -CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m -CONFIG_DEVFREQ_GOV_PERFORMANCE=m -CONFIG_DEVFREQ_GOV_POWERSAVE=m -CONFIG_DEVFREQ_GOV_USERSPACE=m -CONFIG_DEVFREQ_GOV_PASSIVE=m - -# -# DEVFREQ Drivers -# -CONFIG_PM_DEVFREQ_EVENT=y -CONFIG_EXTCON=y - -# -# Extcon Device Drivers -# -CONFIG_EXTCON_ADC_JACK=m -CONFIG_EXTCON_AXP288=m -CONFIG_EXTCON_FSA9480=m -CONFIG_EXTCON_GPIO=m -CONFIG_EXTCON_INTEL_INT3496=m -CONFIG_EXTCON_INTEL_CHT_WC=m -CONFIG_EXTCON_INTEL_MRFLD=m -CONFIG_EXTCON_LC824206XA=m -CONFIG_EXTCON_MAX14577=m -CONFIG_EXTCON_MAX3355=m -CONFIG_EXTCON_MAX77693=m -CONFIG_EXTCON_MAX77843=m -CONFIG_EXTCON_MAX8997=m -CONFIG_EXTCON_MAX14526=m -CONFIG_EXTCON_PALMAS=m -CONFIG_EXTCON_PTN5150=m -CONFIG_EXTCON_RT8973A=m -CONFIG_EXTCON_SM5502=m -CONFIG_EXTCON_USB_GPIO=m -CONFIG_EXTCON_USBC_CROS_EC=m -CONFIG_EXTCON_USBC_TUSB320=m -CONFIG_MEMORY=y -CONFIG_FPGA_DFL_EMIF=m -CONFIG_IIO=m -CONFIG_IIO_BUFFER=y -CONFIG_IIO_BUFFER_CB=m -CONFIG_IIO_BUFFER_DMA=m -CONFIG_IIO_BUFFER_DMAENGINE=m -CONFIG_IIO_BUFFER_HW_CONSUMER=m -CONFIG_IIO_KFIFO_BUF=m -CONFIG_IIO_TRIGGERED_BUFFER=m -CONFIG_IIO_CONFIGFS=m -CONFIG_IIO_GTS_HELPER=m -CONFIG_IIO_TRIGGER=y -CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 -CONFIG_IIO_SW_DEVICE=m -CONFIG_IIO_SW_TRIGGER=m -CONFIG_IIO_TRIGGERED_EVENT=m -CONFIG_IIO_BACKEND=m - -# -# Accelerometers -# -CONFIG_ADIS16201=m -CONFIG_ADIS16209=m -CONFIG_ADXL313=m -CONFIG_ADXL313_I2C=m -CONFIG_ADXL313_SPI=m -CONFIG_ADXL345=m -CONFIG_ADXL345_I2C=m -CONFIG_ADXL345_SPI=m -CONFIG_ADXL355=m -CONFIG_ADXL355_I2C=m -CONFIG_ADXL355_SPI=m -CONFIG_ADXL367=m -CONFIG_ADXL367_SPI=m -CONFIG_ADXL367_I2C=m -CONFIG_ADXL372=m -CONFIG_ADXL372_SPI=m -CONFIG_ADXL372_I2C=m -CONFIG_ADXL380=m -CONFIG_ADXL380_SPI=m -CONFIG_ADXL380_I2C=m -CONFIG_BMA220=m -CONFIG_BMA220_I2C=m -CONFIG_BMA220_SPI=m -CONFIG_BMA400=m -CONFIG_BMA400_I2C=m -CONFIG_BMA400_SPI=m -CONFIG_BMC150_ACCEL=m -CONFIG_BMC150_ACCEL_I2C=m -CONFIG_BMC150_ACCEL_SPI=m -CONFIG_BMI088_ACCEL=m -CONFIG_BMI088_ACCEL_I2C=m -CONFIG_BMI088_ACCEL_SPI=m -CONFIG_DA280=m -CONFIG_DA311=m -CONFIG_DMARD06=m -CONFIG_DMARD09=m -CONFIG_DMARD10=m -CONFIG_FXLS8962AF=m -CONFIG_FXLS8962AF_I2C=m -CONFIG_FXLS8962AF_SPI=m -CONFIG_HID_SENSOR_ACCEL_3D=m -CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m -CONFIG_IIO_ST_ACCEL_3AXIS=m -CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m -CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m -CONFIG_IIO_KX022A=m -CONFIG_IIO_KX022A_SPI=m -CONFIG_IIO_KX022A_I2C=m -CONFIG_KXSD9=m -CONFIG_KXSD9_SPI=m -CONFIG_KXSD9_I2C=m -CONFIG_KXCJK1013=m -CONFIG_MC3230=m -CONFIG_MMA7455=m -CONFIG_MMA7455_I2C=m -CONFIG_MMA7455_SPI=m -CONFIG_MMA7660=m -CONFIG_MMA8452=m -CONFIG_MMA9551_CORE=m -CONFIG_MMA9551=m -CONFIG_MMA9553=m -CONFIG_MSA311=m -CONFIG_MXC4005=m -CONFIG_MXC6255=m -CONFIG_SCA3000=m -CONFIG_SCA3300=m -CONFIG_STK8312=m -CONFIG_STK8BA50=m -# end of Accelerometers - -# -# Analog to digital converters -# -CONFIG_IIO_ADC_HELPER=m -CONFIG_AD_SIGMA_DELTA=m -CONFIG_AD4000=m -CONFIG_AD4030=m -CONFIG_AD4080=m -CONFIG_AD4130=m -CONFIG_AD4134=m -CONFIG_AD4170_4=m -CONFIG_AD4695=m -CONFIG_AD4851=m -CONFIG_AD7091R=m -CONFIG_AD7091R5=m -CONFIG_AD7091R8=m -CONFIG_AD7124=m -CONFIG_AD7173=m -CONFIG_AD7191=m -CONFIG_AD7192=m -CONFIG_AD7266=m -CONFIG_AD7280=m -CONFIG_AD7291=m -CONFIG_AD7292=m -CONFIG_AD7298=m -CONFIG_AD7380=m -CONFIG_AD7405=m -CONFIG_AD7476=m -CONFIG_AD7606=m -CONFIG_AD7606_IFACE_PARALLEL=m -CONFIG_AD7606_IFACE_SPI=m -CONFIG_AD7625=m -CONFIG_AD7766=m -CONFIG_AD7768_1=m -CONFIG_AD7779=m -CONFIG_AD7780=m -CONFIG_AD7791=m -CONFIG_AD7793=m -CONFIG_AD7887=m -CONFIG_AD7923=m -CONFIG_AD7944=m -CONFIG_AD7949=m -CONFIG_AD799X=m -CONFIG_AD9467=m -CONFIG_ADE9000=m -CONFIG_AXP20X_ADC=m -CONFIG_AXP288_ADC=m -CONFIG_CC10001_ADC=m -CONFIG_DA9150_GPADC=m -CONFIG_DLN2_ADC=m -CONFIG_ENVELOPE_DETECTOR=m -CONFIG_GEHC_PMC_ADC=m -CONFIG_HI8435=m -CONFIG_HX711=m -CONFIG_INA2XX_ADC=m -CONFIG_INTEL_DC_TI_ADC=m -CONFIG_INTEL_MRFLD_ADC=m -CONFIG_LP8788_ADC=m -CONFIG_LTC2309=m -CONFIG_LTC2471=m -CONFIG_LTC2485=m -CONFIG_LTC2496=m -CONFIG_LTC2497=m -CONFIG_MAX1027=m -CONFIG_MAX11100=m -CONFIG_MAX1118=m -CONFIG_MAX11205=m -CONFIG_MAX11410=m -CONFIG_MAX1241=m -CONFIG_MAX1363=m -CONFIG_MAX14001=m -CONFIG_MAX34408=m -CONFIG_MAX77541_ADC=m -CONFIG_MAX9611=m -CONFIG_MCP320X=m -CONFIG_MCP3422=m -CONFIG_MCP3564=m -CONFIG_MCP3911=m -CONFIG_MEDIATEK_MT6359_AUXADC=m -CONFIG_MEDIATEK_MT6360_ADC=m -CONFIG_MEDIATEK_MT6370_ADC=m -CONFIG_MEN_Z188_ADC=m -CONFIG_MP2629_ADC=m -CONFIG_NAU7802=m -CONFIG_NCT7201=m -CONFIG_PAC1921=m -CONFIG_PAC1934=m -CONFIG_PALMAS_GPADC=m -CONFIG_ROHM_BD79112=m -CONFIG_ROHM_BD79124=m -CONFIG_RICHTEK_RTQ6056=m -CONFIG_SD_ADC_MODULATOR=m -CONFIG_TI_ADC081C=m -CONFIG_TI_ADC0832=m -CONFIG_TI_ADC084S021=m -CONFIG_TI_ADC108S102=m -CONFIG_TI_ADC12138=m -CONFIG_TI_ADC128S052=m -CONFIG_TI_ADC161S626=m -CONFIG_TI_ADS1015=m -CONFIG_TI_ADS1018=m -CONFIG_TI_ADS1100=m -CONFIG_TI_ADS1119=m -CONFIG_TI_ADS124S08=m -CONFIG_TI_ADS1298=m -CONFIG_TI_ADS131E08=m -CONFIG_TI_ADS131M02=m -CONFIG_TI_ADS7138=m -CONFIG_TI_ADS7924=m -CONFIG_TI_ADS7950=m -CONFIG_TI_ADS8344=m -CONFIG_TI_ADS8688=m -CONFIG_TI_LMP92064=m -CONFIG_TI_TLC4541=m -CONFIG_TI_TSC2046=m -CONFIG_TWL4030_MADC=m -CONFIG_TWL6030_GPADC=m -CONFIG_VF610_ADC=m -CONFIG_VIPERBOARD_ADC=m -CONFIG_XILINX_XADC=m -# end of Analog to digital converters - -# -# Analog to digital and digital to analog converters -# -CONFIG_AD74115=m -CONFIG_AD74413R=m -# end of Analog to digital and digital to analog converters - -# -# Analog Front Ends -# -CONFIG_IIO_RESCALE=m -# end of Analog Front Ends - -# -# Amplifiers -# -CONFIG_AD8366=m -CONFIG_ADA4250=m -CONFIG_ADL8113=m -CONFIG_HMC425=m -# end of Amplifiers - -# -# Capacitance to digital converters -# -CONFIG_AD7150=m -CONFIG_AD7746=m -# end of Capacitance to digital converters - -# -# Chemical Sensors -# -CONFIG_AOSONG_AGS02MA=m -CONFIG_ATLAS_PH_SENSOR=m -CONFIG_ATLAS_EZO_SENSOR=m -CONFIG_BME680=m -CONFIG_BME680_I2C=m -CONFIG_BME680_SPI=m -CONFIG_CCS811=m -CONFIG_ENS160=m -CONFIG_ENS160_I2C=m -CONFIG_ENS160_SPI=m -CONFIG_IAQCORE=m -CONFIG_MHZ19B=m -CONFIG_PMS7003=m -CONFIG_SCD30_CORE=m -CONFIG_SCD30_I2C=m -CONFIG_SCD30_SERIAL=m -CONFIG_SCD4X=m -CONFIG_SEN0322=m -CONFIG_SENSIRION_SGP30=m -CONFIG_SENSIRION_SGP40=m -CONFIG_SPS30=m -CONFIG_SPS30_I2C=m -CONFIG_SPS30_SERIAL=m -CONFIG_SENSEAIR_SUNRISE_CO2=m -CONFIG_VZ89X=m -# end of Chemical Sensors - -CONFIG_IIO_CROS_EC_SENSORS_CORE=m -CONFIG_IIO_CROS_EC_SENSORS=m -CONFIG_IIO_CROS_EC_SENSORS_LID_ANGLE=m -CONFIG_IIO_CROS_EC_ACTIVITY=m - -# -# Hid Sensor IIO Common -# -CONFIG_HID_SENSOR_IIO_COMMON=m -CONFIG_HID_SENSOR_IIO_TRIGGER=m -# end of Hid Sensor IIO Common - -CONFIG_IIO_INV_SENSORS_TIMESTAMP=m -CONFIG_IIO_MS_SENSORS_I2C=m - -# -# IIO SCMI Sensors -# -# end of IIO SCMI Sensors - -# -# SSP Sensor Common -# -CONFIG_IIO_SSP_SENSORS_COMMONS=m -CONFIG_IIO_SSP_SENSORHUB=m -# end of SSP Sensor Common - -CONFIG_IIO_ST_SENSORS_I2C=m -CONFIG_IIO_ST_SENSORS_SPI=m -CONFIG_IIO_ST_SENSORS_CORE=m - -# -# Digital to analog converters -# -CONFIG_AD3530R=m -CONFIG_AD3552R_HS=m -CONFIG_AD3552R_LIB=m -CONFIG_AD3552R=m -CONFIG_AD5064=m -CONFIG_AD5360=m -CONFIG_AD5380=m -CONFIG_AD5421=m -CONFIG_AD5446=m -CONFIG_AD5446_SPI=m -CONFIG_AD5446_I2C=m -CONFIG_AD5449=m -CONFIG_AD5592R_BASE=m -CONFIG_AD5592R=m -CONFIG_AD5593R=m -CONFIG_AD5504=m -CONFIG_AD5624R_SPI=m -CONFIG_AD9739A=m -CONFIG_LTC2688=m -CONFIG_AD5686=m -CONFIG_AD5686_SPI=m -CONFIG_AD5696_I2C=m -CONFIG_AD5755=m -CONFIG_AD5758=m -CONFIG_AD5761=m -CONFIG_AD5764=m -CONFIG_AD5766=m -CONFIG_AD5770R=m -CONFIG_AD5791=m -CONFIG_AD7293=m -CONFIG_AD7303=m -CONFIG_AD8460=m -CONFIG_AD8801=m -CONFIG_BD79703=m -CONFIG_DPOT_DAC=m -CONFIG_DS4424=m -CONFIG_LTC1660=m -CONFIG_LTC2632=m -CONFIG_LTC2664=m -CONFIG_M62332=m -CONFIG_MAX517=m -CONFIG_MAX22007=m -CONFIG_MAX5522=m -CONFIG_MAX5821=m -CONFIG_MCP4725=m -CONFIG_MCP4728=m -CONFIG_MCP47FEB02=m -CONFIG_MCP4821=m -CONFIG_MCP4922=m -CONFIG_TI_DAC082S085=m -CONFIG_TI_DAC5571=m -CONFIG_TI_DAC7311=m -CONFIG_TI_DAC7612=m -CONFIG_VF610_DAC=m -# end of Digital to analog converters - -# -# IIO dummy driver -# -# CONFIG_IIO_SIMPLE_DUMMY is not set -# end of IIO dummy driver - -# -# Filters -# -CONFIG_ADMV8818=m -# end of Filters - -# -# Frequency Synthesizers DDS/PLL -# - -# -# Clock Generator/Distribution -# -CONFIG_AD9523=m -# end of Clock Generator/Distribution - -# -# Phase-Locked Loop (PLL) frequency synthesizers -# -CONFIG_ADF4350=m -CONFIG_ADF4371=m -CONFIG_ADF4377=m -CONFIG_ADMFM2000=m -CONFIG_ADMV1013=m -CONFIG_ADMV1014=m -CONFIG_ADMV4420=m -CONFIG_ADRF6780=m -# end of Phase-Locked Loop (PLL) frequency synthesizers -# end of Frequency Synthesizers DDS/PLL - -# -# Digital gyroscope sensors -# -CONFIG_ADIS16080=m -CONFIG_ADIS16130=m -CONFIG_ADIS16136=m -CONFIG_ADIS16260=m -CONFIG_ADXRS290=m -CONFIG_ADXRS450=m -CONFIG_BMG160=m -CONFIG_BMG160_I2C=m -CONFIG_BMG160_SPI=m -CONFIG_FXAS21002C=m -CONFIG_FXAS21002C_I2C=m -CONFIG_FXAS21002C_SPI=m -CONFIG_HID_SENSOR_GYRO_3D=m -CONFIG_MPU3050=m -CONFIG_MPU3050_I2C=m -CONFIG_IIO_ST_GYRO_3AXIS=m -CONFIG_IIO_ST_GYRO_I2C_3AXIS=m -CONFIG_IIO_ST_GYRO_SPI_3AXIS=m -CONFIG_ITG3200=m -# end of Digital gyroscope sensors - -# -# Health Sensors -# - -# -# Heart Rate Monitors -# -CONFIG_AFE4403=m -CONFIG_AFE4404=m -CONFIG_MAX30100=m -CONFIG_MAX30102=m -# end of Heart Rate Monitors -# end of Health Sensors - -# -# Humidity sensors -# -CONFIG_AM2315=m -CONFIG_DHT11=m -CONFIG_ENS210=m -CONFIG_HDC100X=m -CONFIG_HDC2010=m -CONFIG_HDC3020=m -CONFIG_HID_SENSOR_HUMIDITY=m -CONFIG_HTS221=m -CONFIG_HTS221_I2C=m -CONFIG_HTS221_SPI=m -CONFIG_HTU21=m -CONFIG_SI7005=m -CONFIG_SI7020=m -# end of Humidity sensors - -# -# Inertial measurement units -# -CONFIG_ADIS16400=m -CONFIG_ADIS16460=m -CONFIG_ADIS16475=m -CONFIG_ADIS16480=m -CONFIG_ADIS16550=m -CONFIG_BMI160=m -CONFIG_BMI160_I2C=m -CONFIG_BMI160_SPI=m -CONFIG_BMI270=m -CONFIG_BMI270_I2C=m -CONFIG_BMI270_SPI=m -CONFIG_BMI323=m -CONFIG_BMI323_I2C=m -CONFIG_BMI323_SPI=m -CONFIG_BOSCH_BNO055=m -CONFIG_BOSCH_BNO055_SERIAL=m -CONFIG_BOSCH_BNO055_I2C=m -CONFIG_FXOS8700=m -CONFIG_FXOS8700_I2C=m -CONFIG_FXOS8700_SPI=m -CONFIG_KMX61=m -CONFIG_INV_ICM42600=m -CONFIG_INV_ICM42600_I2C=m -CONFIG_INV_ICM42600_SPI=m -CONFIG_INV_ICM45600=m -CONFIG_INV_ICM45600_I2C=m -CONFIG_INV_ICM45600_SPI=m -CONFIG_INV_MPU6050_IIO=m -CONFIG_INV_MPU6050_I2C=m -CONFIG_INV_MPU6050_SPI=m -CONFIG_SMI240=m -CONFIG_SMI330=m -CONFIG_SMI330_I2C=m -CONFIG_SMI330_SPI=m -CONFIG_IIO_ST_LSM6DSX=m -CONFIG_IIO_ST_LSM6DSX_I2C=m -CONFIG_IIO_ST_LSM6DSX_SPI=m -CONFIG_IIO_ST_LSM9DS0=m -CONFIG_IIO_ST_LSM9DS0_I2C=m -CONFIG_IIO_ST_LSM9DS0_SPI=m -# end of Inertial measurement units - -CONFIG_IIO_ADIS_LIB=m -CONFIG_IIO_ADIS_LIB_BUFFER=y - -# -# Light sensors -# -CONFIG_ACPI_ALS=m -CONFIG_ADJD_S311=m -CONFIG_ADUX1020=m -CONFIG_AL3000A=m -CONFIG_AL3010=m -CONFIG_AL3320A=m -CONFIG_APDS9160=m -CONFIG_APDS9300=m -CONFIG_APDS9306=m -CONFIG_APDS9960=m -CONFIG_AS73211=m -CONFIG_BH1745=m -CONFIG_BH1750=m -CONFIG_BH1780=m -CONFIG_CM32181=m -CONFIG_CM3232=m -CONFIG_CM3323=m -CONFIG_CM3605=m -CONFIG_CM36651=m -CONFIG_IIO_CROS_EC_LIGHT_PROX=m -CONFIG_GP2AP002=m -CONFIG_GP2AP020A00F=m -CONFIG_IQS621_ALS=m -CONFIG_SENSORS_ISL29018=m -CONFIG_SENSORS_ISL29028=m -CONFIG_ISL29125=m -CONFIG_ISL76682=m -CONFIG_HID_SENSOR_ALS=m -CONFIG_HID_SENSOR_PROX=m -CONFIG_JSA1212=m -CONFIG_ROHM_BU27034=m -CONFIG_RPR0521=m -CONFIG_SENSORS_LM3533=m -CONFIG_LTR390=m -CONFIG_LTR501=m -CONFIG_LTRF216A=m -CONFIG_LV0104CS=m -CONFIG_MAX44000=m -CONFIG_MAX44009=m -CONFIG_NOA1305=m -CONFIG_OPT3001=m -CONFIG_OPT4001=m -CONFIG_OPT4060=m -CONFIG_PA12203001=m -CONFIG_SI1133=m -CONFIG_SI1145=m -CONFIG_STK3310=m -CONFIG_ST_UVIS25=m -CONFIG_ST_UVIS25_I2C=m -CONFIG_ST_UVIS25_SPI=m -CONFIG_TCS3414=m -CONFIG_TCS3472=m -CONFIG_SENSORS_TSL2563=m -CONFIG_TSL2583=m -CONFIG_TSL2591=m -CONFIG_TSL2772=m -CONFIG_TSL4531=m -CONFIG_US5182D=m -CONFIG_VCNL4000=m -CONFIG_VCNL4035=m -CONFIG_VEML3235=m -CONFIG_VEML6030=m -CONFIG_VEML6040=m -CONFIG_VEML6046X00=m -CONFIG_VEML6070=m -CONFIG_VEML6075=m -CONFIG_VL6180=m -CONFIG_ZOPT2201=m -# end of Light sensors - -# -# Magnetometer sensors -# -CONFIG_AK8974=m -CONFIG_AK8975=m -CONFIG_AK09911=m -CONFIG_ALS31300=m -CONFIG_BMC150_MAGN=m -CONFIG_BMC150_MAGN_I2C=m -CONFIG_BMC150_MAGN_SPI=m -CONFIG_MAG3110=m -CONFIG_HID_SENSOR_MAGNETOMETER_3D=m -CONFIG_MMC35240=m -CONFIG_MMC5633=m -CONFIG_IIO_ST_MAGN_3AXIS=m -CONFIG_IIO_ST_MAGN_I2C_3AXIS=m -CONFIG_IIO_ST_MAGN_SPI_3AXIS=m -CONFIG_INFINEON_TLV493D=m -CONFIG_SENSORS_HMC5843=m -CONFIG_SENSORS_HMC5843_I2C=m -CONFIG_SENSORS_HMC5843_SPI=m -CONFIG_SENSORS_RM3100=m -CONFIG_SENSORS_RM3100_I2C=m -CONFIG_SENSORS_RM3100_SPI=m -CONFIG_SI7210=m -CONFIG_TI_TMAG5273=m -CONFIG_YAMAHA_YAS530=m -# end of Magnetometer sensors - -# -# Multiplexers -# -CONFIG_IIO_MUX=m -# end of Multiplexers - -# -# Inclinometer sensors -# -CONFIG_HID_SENSOR_INCLINOMETER_3D=m -CONFIG_HID_SENSOR_DEVICE_ROTATION=m -# end of Inclinometer sensors - -# -# Triggers - standalone -# -CONFIG_IIO_HRTIMER_TRIGGER=m -CONFIG_IIO_INTERRUPT_TRIGGER=m -CONFIG_IIO_TIGHTLOOP_TRIGGER=m -CONFIG_IIO_SYSFS_TRIGGER=m -# end of Triggers - standalone - -# -# Linear and angular position sensors -# -CONFIG_IQS624_POS=m -CONFIG_HID_SENSOR_CUSTOM_INTEL_HINGE=m -# end of Linear and angular position sensors - -# -# Digital potentiometers -# -CONFIG_AD5110=m -CONFIG_AD5272=m -CONFIG_DS1803=m -CONFIG_MAX5432=m -CONFIG_MAX5481=m -CONFIG_MAX5487=m -CONFIG_MCP4018=m -CONFIG_MCP4131=m -CONFIG_MCP4531=m -CONFIG_MCP41010=m -CONFIG_TPL0102=m -CONFIG_X9250=m -# end of Digital potentiometers - -# -# Digital potentiostats -# -CONFIG_LMP91000=m -# end of Digital potentiostats - -# -# Pressure sensors -# -CONFIG_ABP060MG=m -CONFIG_ABP2030PA=m -CONFIG_ABP2030PA_I2C=m -CONFIG_ABP2030PA_SPI=m -CONFIG_ROHM_BM1390=m -CONFIG_BMP280=m -CONFIG_BMP280_I2C=m -CONFIG_BMP280_SPI=m -CONFIG_IIO_CROS_EC_BARO=m -CONFIG_DLHL60D=m -CONFIG_DPS310=m -CONFIG_HID_SENSOR_PRESS=m -CONFIG_HP03=m -CONFIG_HSC030PA=m -CONFIG_HSC030PA_I2C=m -CONFIG_HSC030PA_SPI=m -CONFIG_ICP10100=m -CONFIG_MPL115=m -CONFIG_MPL115_I2C=m -CONFIG_MPL115_SPI=m -CONFIG_MPL3115=m -CONFIG_MPRLS0025PA=m -CONFIG_MPRLS0025PA_I2C=m -CONFIG_MPRLS0025PA_SPI=m -CONFIG_MS5611=m -CONFIG_MS5611_I2C=m -CONFIG_MS5611_SPI=m -CONFIG_MS5637=m -CONFIG_SDP500=m -CONFIG_IIO_ST_PRESS=m -CONFIG_IIO_ST_PRESS_I2C=m -CONFIG_IIO_ST_PRESS_SPI=m -CONFIG_T5403=m -CONFIG_HP206C=m -CONFIG_ZPA2326=m -CONFIG_ZPA2326_I2C=m -CONFIG_ZPA2326_SPI=m -CONFIG_ADP810=m -# end of Pressure sensors - -# -# Lightning sensors -# -CONFIG_AS3935=m -# end of Lightning sensors - -# -# Proximity and distance sensors -# -CONFIG_CROS_EC_MKBP_PROXIMITY=m -CONFIG_D3323AA=m -CONFIG_HX9023S=m -CONFIG_IRSD200=m -CONFIG_ISL29501=m -CONFIG_LIDAR_LITE_V2=m -CONFIG_MB1232=m -CONFIG_PING=m -CONFIG_RFD77402=m -CONFIG_SRF04=m -CONFIG_SX_COMMON=m -CONFIG_SX9310=m -CONFIG_SX9324=m -CONFIG_SX9360=m -CONFIG_SX9500=m -CONFIG_SRF08=m -CONFIG_VCNL3020=m -CONFIG_VL53L0X_I2C=m -CONFIG_VL53L1X_I2C=m -CONFIG_AW96103=m -# end of Proximity and distance sensors - -# -# Resolver to digital converters -# -CONFIG_AD2S90=m -CONFIG_AD2S1200=m -CONFIG_AD2S1210=m -# end of Resolver to digital converters - -# -# Temperature sensors -# -CONFIG_IQS620AT_TEMP=m -CONFIG_LTC2983=m -CONFIG_MAXIM_THERMOCOUPLE=m -CONFIG_HID_SENSOR_TEMP=m -CONFIG_MLX90614=m -CONFIG_MLX90632=m -CONFIG_MLX90635=m -CONFIG_TMP006=m -CONFIG_TMP007=m -CONFIG_TMP117=m -CONFIG_TSYS01=m -CONFIG_TSYS02D=m -CONFIG_MAX30208=m -CONFIG_MAX31856=m -CONFIG_MAX31865=m -CONFIG_MCP9600=m -# end of Temperature sensors - -CONFIG_NTB=m -CONFIG_NTB_MSI=y -CONFIG_NTB_AMD=m -CONFIG_NTB_IDT=m -CONFIG_NTB_INTEL=m -CONFIG_NTB_EPF=m -CONFIG_NTB_SWITCHTEC=m -# CONFIG_NTB_PINGPONG is not set -# CONFIG_NTB_TOOL is not set -# CONFIG_NTB_PERF is not set -# CONFIG_NTB_MSI_TEST is not set -CONFIG_NTB_TRANSPORT=m -CONFIG_PWM=y -# CONFIG_PWM_DEBUG is not set -CONFIG_PWM_PROVIDE_GPIO=y -CONFIG_PWM_CLK=m -CONFIG_PWM_CRC=y -CONFIG_PWM_CROS_EC=m -CONFIG_PWM_DWC_CORE=m -CONFIG_PWM_DWC=m -CONFIG_PWM_GPIO=m -CONFIG_PWM_IQS620A=m -CONFIG_PWM_LP3943=m -CONFIG_PWM_LPSS=m -CONFIG_PWM_LPSS_PCI=m -CONFIG_PWM_LPSS_PLATFORM=m -CONFIG_PWM_MAX7360=m -CONFIG_PWM_PCA9685=m -CONFIG_PWM_TWL=m -CONFIG_PWM_TWL_LED=m - -# -# IRQ chip support -# -CONFIG_IRQ_MSI_LIB=y -CONFIG_MADERA_IRQ=m -# end of IRQ chip support - -CONFIG_IPACK_BUS=m -CONFIG_BOARD_TPCI200=m -CONFIG_SERIAL_IPOCTAL=m -CONFIG_RESET_CONTROLLER=y -CONFIG_RESET_GPIO=m -CONFIG_RESET_TI_SYSCON=m -CONFIG_RESET_TI_TPS380X=m - -# -# PHY Subsystem -# -CONFIG_PHY_COMMON_PROPS=y -CONFIG_GENERIC_PHY=y -CONFIG_GENERIC_PHY_MIPI_DPHY=y -CONFIG_PHY_CAN_TRANSCEIVER=m -CONFIG_PHY_GOOGLE_USB=m -CONFIG_USB_LGM_PHY=m - -# -# PHY drivers for Broadcom platforms -# -CONFIG_BCM_KONA_USB2_PHY=m -# end of PHY drivers for Broadcom platforms - -CONFIG_PHY_INTEL_LGM_EMMC=m -CONFIG_PHY_PXA_28NM_HSIC=m -CONFIG_PHY_PXA_28NM_USB2=m -CONFIG_PHY_CPCAP_USB=m -CONFIG_PHY_QCOM_USB_HS=m -CONFIG_PHY_QCOM_USB_HSIC=m -CONFIG_PHY_SAMSUNG_USB2=m -CONFIG_PHY_TUSB1210=m -# end of PHY Subsystem - -CONFIG_POWERCAP=y -CONFIG_INTEL_RAPL_CORE=m -CONFIG_INTEL_RAPL=m -CONFIG_INTEL_RAPL_TPMI=m -CONFIG_IDLE_INJECT=y -CONFIG_MCB=m -CONFIG_MCB_PCI=m -CONFIG_MCB_LPC=m - -# -# Performance monitor support -# -CONFIG_DWC_PCIE_PMU=m -CONFIG_CXL_PMU=m -# end of Performance monitor support - -CONFIG_RAS=y -CONFIG_RAS_CEC=y -# CONFIG_RAS_CEC_DEBUG is not set -CONFIG_AMD_ATL=m -CONFIG_AMD_ATL_PRM=y -CONFIG_RAS_FMPM=m -CONFIG_USB4=m -# CONFIG_USB4_DEBUGFS_WRITE is not set -# CONFIG_USB4_DMA_TEST is not set - -# -# Android -# -CONFIG_ANDROID_BINDER_IPC=y -CONFIG_ANDROID_BINDERFS=y -CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder" -# end of Android - -CONFIG_LIBNVDIMM=m -CONFIG_BLK_DEV_PMEM=m -CONFIG_ND_CLAIM=y -CONFIG_ND_BTT=m -CONFIG_BTT=y -CONFIG_ND_PFN=m -CONFIG_NVDIMM_PFN=y -CONFIG_NVDIMM_DAX=y -CONFIG_RAMDAX=m -CONFIG_NVDIMM_KEYS=y -# CONFIG_NVDIMM_SECURITY_TEST is not set -CONFIG_DAX=y -CONFIG_DEV_DAX=m -CONFIG_DEV_DAX_PMEM=m -CONFIG_DEV_DAX_HMEM=m -CONFIG_DEV_DAX_CXL=m -CONFIG_DEV_DAX_HMEM_DEVICES=y -CONFIG_DEV_DAX_FSDEV=m -CONFIG_DEV_DAX_KMEM=m -CONFIG_NVMEM=y -CONFIG_NVMEM_SYSFS=y -# CONFIG_NVMEM_LAYOUTS is not set -CONFIG_NVMEM_QNAP_MCU_EEPROM=m -CONFIG_NVMEM_RAVE_SP_EEPROM=m -CONFIG_NVMEM_RMEM=m - -# -# HW tracing support -# -CONFIG_STM=m -CONFIG_STM_PROTO_BASIC=m -CONFIG_STM_PROTO_SYS_T=m -# CONFIG_STM_DUMMY is not set -CONFIG_STM_SOURCE_CONSOLE=m -CONFIG_STM_SOURCE_HEARTBEAT=m -CONFIG_STM_SOURCE_FTRACE=m -CONFIG_INTEL_TH=m -CONFIG_INTEL_TH_PCI=m -CONFIG_INTEL_TH_ACPI=m -CONFIG_INTEL_TH_GTH=m -CONFIG_INTEL_TH_STH=m -CONFIG_INTEL_TH_MSU=m -CONFIG_INTEL_TH_PTI=m -# CONFIG_INTEL_TH_DEBUG is not set -# end of HW tracing support - -CONFIG_FPGA=m -CONFIG_ALTERA_PR_IP_CORE=m -CONFIG_FPGA_MGR_ALTERA_PS_SPI=m -CONFIG_FPGA_MGR_ALTERA_CVP=m -CONFIG_FPGA_MGR_XILINX_CORE=m -CONFIG_FPGA_MGR_XILINX_SELECTMAP=m -CONFIG_FPGA_MGR_XILINX_SPI=m -CONFIG_FPGA_MGR_MACHXO2_SPI=m -CONFIG_FPGA_BRIDGE=m -CONFIG_ALTERA_FREEZE_BRIDGE=m -CONFIG_XILINX_PR_DECOUPLER=m -CONFIG_FPGA_REGION=m -CONFIG_FPGA_DFL=m -CONFIG_FPGA_DFL_FME=m -CONFIG_FPGA_DFL_FME_MGR=m -CONFIG_FPGA_DFL_FME_BRIDGE=m -CONFIG_FPGA_DFL_FME_REGION=m -CONFIG_FPGA_DFL_AFU=m -CONFIG_FPGA_DFL_NIOS_INTEL_PAC_N3000=m -CONFIG_FPGA_DFL_PCI=m -CONFIG_FPGA_M10_BMC_SEC_UPDATE=m -CONFIG_FPGA_MGR_MICROCHIP_SPI=m -CONFIG_FPGA_MGR_LATTICE_SYSCONFIG=m -CONFIG_FPGA_MGR_LATTICE_SYSCONFIG_SPI=m -CONFIG_TEE=m -CONFIG_TEE_DMABUF_HEAPS=y -CONFIG_OPTEE_STATIC_PROTMEM_POOL=y -CONFIG_AMDTEE=m -CONFIG_MULTIPLEXER=y -CONFIG_MUX_CORE=y - -# -# Multiplexer drivers -# -CONFIG_MUX_ADG792A=m -CONFIG_MUX_ADGS1408=m -CONFIG_MUX_GPIO=m -# end of Multiplexer drivers - -CONFIG_PM_OPP=y -CONFIG_SIOX=m -CONFIG_SIOX_BUS_GPIO=m -CONFIG_SLIMBUS=m -CONFIG_INTERCONNECT=y -CONFIG_COUNTER=m -CONFIG_INTEL_QEP=m -CONFIG_INTERRUPT_CNT=m -CONFIG_MOST=m -CONFIG_MOST_USB_HDM=m -CONFIG_MOST_CDEV=m -CONFIG_MOST_SND=m -# CONFIG_PECI is not set -CONFIG_HTE=y -# end of Device Drivers - -# -# File systems -# -CONFIG_DCACHE_WORD_ACCESS=y -CONFIG_VALIDATE_FS_PARSER=y -CONFIG_FS_IOMAP=y -CONFIG_FS_STACK=y -CONFIG_BUFFER_HEAD=y -CONFIG_LEGACY_DIRECT_IO=y -# CONFIG_EXT2_FS is not set -CONFIG_EXT4_FS=y -CONFIG_EXT4_USE_FOR_EXT2=y -CONFIG_EXT4_FS_POSIX_ACL=y -CONFIG_EXT4_FS_SECURITY=y -# CONFIG_EXT4_DEBUG is not set -CONFIG_JBD2=y -# CONFIG_JBD2_DEBUG is not set -CONFIG_FS_MBCACHE=y -CONFIG_JFS_FS=m -CONFIG_JFS_POSIX_ACL=y -CONFIG_JFS_SECURITY=y -# CONFIG_JFS_DEBUG is not set -CONFIG_JFS_STATISTICS=y -CONFIG_XFS_FS=m -CONFIG_XFS_SUPPORT_V4=y -CONFIG_XFS_SUPPORT_ASCII_CI=y -CONFIG_XFS_QUOTA=y -CONFIG_XFS_POSIX_ACL=y -CONFIG_XFS_RT=y -CONFIG_XFS_DRAIN_INTENTS=y -CONFIG_XFS_LIVE_HOOKS=y -CONFIG_XFS_MEMORY_BUFS=y -CONFIG_XFS_BTREE_IN_MEM=y -CONFIG_XFS_ONLINE_SCRUB=y -# CONFIG_XFS_ONLINE_SCRUB_STATS is not set -CONFIG_XFS_ONLINE_REPAIR=y -# CONFIG_XFS_WARN is not set -# CONFIG_XFS_DEBUG is not set -CONFIG_GFS2_FS=m -CONFIG_GFS2_FS_LOCKING_DLM=y -CONFIG_OCFS2_FS=m -CONFIG_OCFS2_FS_O2CB=m -CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m -CONFIG_OCFS2_FS_STATS=y -CONFIG_OCFS2_DEBUG_MASKLOG=y -# CONFIG_OCFS2_DEBUG_FS is not set -CONFIG_BTRFS_FS=y -CONFIG_BTRFS_FS_POSIX_ACL=y -# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set -# CONFIG_BTRFS_DEBUG is not set -# CONFIG_BTRFS_ASSERT is not set -# CONFIG_BTRFS_EXPERIMENTAL is not set -CONFIG_NILFS2_FS=m -CONFIG_F2FS_FS=m -CONFIG_F2FS_STAT_FS=y -CONFIG_F2FS_FS_XATTR=y -CONFIG_F2FS_FS_POSIX_ACL=y -CONFIG_F2FS_FS_SECURITY=y -CONFIG_F2FS_CHECK_FS=y -# CONFIG_F2FS_FAULT_INJECTION is not set -CONFIG_F2FS_FS_COMPRESSION=y -CONFIG_F2FS_FS_LZO=y -CONFIG_F2FS_FS_LZORLE=y -CONFIG_F2FS_FS_LZ4=y -CONFIG_F2FS_FS_LZ4HC=y -CONFIG_F2FS_FS_ZSTD=y -CONFIG_F2FS_IOSTAT=y -CONFIG_F2FS_UNFAIR_RWSEM=y -CONFIG_ZONEFS_FS=m -CONFIG_FS_DAX=y -CONFIG_FS_DAX_PMD=y -CONFIG_FS_POSIX_ACL=y -CONFIG_EXPORTFS=y -CONFIG_EXPORTFS_BLOCK_OPS=y -CONFIG_FILE_LOCKING=y -CONFIG_FS_ENCRYPTION=y -CONFIG_FS_ENCRYPTION_ALGS=y -CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y -CONFIG_FS_VERITY=y -CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y -CONFIG_FSNOTIFY=y -CONFIG_DNOTIFY=y -CONFIG_INOTIFY_USER=y -CONFIG_FANOTIFY=y -CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y -CONFIG_QUOTA=y -CONFIG_QUOTA_NETLINK_INTERFACE=y -# CONFIG_QUOTA_DEBUG is not set -CONFIG_QUOTA_TREE=m -CONFIG_QFMT_V1=m -CONFIG_QFMT_V2=m -CONFIG_QUOTACTL=y -CONFIG_AUTOFS_FS=y -CONFIG_FUSE_FS=y -CONFIG_CUSE=m -CONFIG_VIRTIO_FS=y -CONFIG_FUSE_DAX=y -CONFIG_FUSE_PASSTHROUGH=y -CONFIG_FUSE_IO_URING=y -CONFIG_OVERLAY_FS=m -CONFIG_OVERLAY_FS_REDIRECT_DIR=y -# CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW is not set -CONFIG_OVERLAY_FS_INDEX=y -CONFIG_OVERLAY_FS_XINO_AUTO=y -CONFIG_OVERLAY_FS_METACOPY=y -# CONFIG_OVERLAY_FS_DEBUG is not set - -# -# Caches -# -CONFIG_NETFS_SUPPORT=m -CONFIG_NETFS_STATS=y -CONFIG_NETFS_DEBUG=y -CONFIG_FSCACHE=y -CONFIG_FSCACHE_STATS=y -CONFIG_CACHEFILES=m -# CONFIG_CACHEFILES_DEBUG is not set -# CONFIG_CACHEFILES_ERROR_INJECTION is not set -CONFIG_CACHEFILES_ONDEMAND=y -# end of Caches - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -CONFIG_UDF_FS=m -# end of CD-ROM/DVD Filesystems - -# -# DOS/FAT/EXFAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="ascii" -CONFIG_FAT_DEFAULT_UTF8=y -CONFIG_EXFAT_FS=m -CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" -CONFIG_NTFS_FS=m -# CONFIG_NTFS_DEBUG is not set -CONFIG_NTFS_FS_POSIX_ACL=y -CONFIG_NTFS3_FS=m -# CONFIG_NTFS3_64BIT_CLUSTER is not set -CONFIG_NTFS3_LZX_XPRESS=y -CONFIG_NTFS3_FS_POSIX_ACL=y -# end of DOS/FAT/EXFAT/NT Filesystems - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_KCORE=y -CONFIG_PROC_VMCORE=y -CONFIG_PROC_VMCORE_DEVICE_DUMP=y -CONFIG_PROC_SYSCTL=y -CONFIG_PROC_PAGE_MONITOR=y -CONFIG_PROC_CHILDREN=y -CONFIG_PROC_PID_ARCH_STATUS=y -CONFIG_PROC_CPU_RESCTRL=y -CONFIG_KERNFS=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -CONFIG_TMPFS_POSIX_ACL=y -CONFIG_TMPFS_XATTR=y -CONFIG_TMPFS_INODE64=y -CONFIG_TMPFS_QUOTA=y -CONFIG_ARCH_SUPPORTS_HUGETLBFS=y -CONFIG_HUGETLBFS=y -# CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON is not set -CONFIG_HUGETLB_PAGE=y -CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP=y -CONFIG_HUGETLB_PMD_PAGE_TABLE_SHARING=y -CONFIG_ARCH_HAS_GIGANTIC_PAGE=y -CONFIG_CONFIGFS_FS=y -CONFIG_EFIVAR_FS=y -# end of Pseudo filesystems - -CONFIG_MISC_FILESYSTEMS=y -CONFIG_ORANGEFS_FS=m -# CONFIG_ADFS_FS is not set -CONFIG_AFFS_FS=m -CONFIG_ECRYPT_FS=m -# CONFIG_ECRYPT_FS_MESSAGING is not set -CONFIG_HFS_FS=m -CONFIG_HFSPLUS_FS=m -CONFIG_BEFS_FS=m -# CONFIG_BEFS_DEBUG is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_JFFS2_FS=m -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_FS_WBUF_VERIFY is not set -CONFIG_JFFS2_SUMMARY=y -CONFIG_JFFS2_FS_XATTR=y -CONFIG_JFFS2_FS_POSIX_ACL=y -CONFIG_JFFS2_FS_SECURITY=y -# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -CONFIG_JFFS2_ZLIB=y -CONFIG_JFFS2_RTIME=y -CONFIG_UBIFS_FS=m -# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set -CONFIG_UBIFS_FS_LZO=y -CONFIG_UBIFS_FS_ZLIB=y -CONFIG_UBIFS_FS_ZSTD=y -CONFIG_UBIFS_ATIME_SUPPORT=y -CONFIG_UBIFS_FS_XATTR=y -CONFIG_UBIFS_FS_SECURITY=y -CONFIG_UBIFS_FS_AUTHENTICATION=y -CONFIG_CRAMFS=m -CONFIG_CRAMFS_BLOCKDEV=y -CONFIG_CRAMFS_MTD=y -CONFIG_SQUASHFS=m -# CONFIG_SQUASHFS_FILE_CACHE is not set -CONFIG_SQUASHFS_FILE_DIRECT=y -CONFIG_SQUASHFS_DECOMP_SINGLE=y -CONFIG_SQUASHFS_DECOMP_MULTI=y -CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y -CONFIG_SQUASHFS_CHOICE_DECOMP_BY_MOUNT=y -CONFIG_SQUASHFS_MOUNT_DECOMP_THREADS=y -CONFIG_SQUASHFS_XATTR=y -CONFIG_SQUASHFS_COMP_CACHE_FULL=y -CONFIG_SQUASHFS_ZLIB=y -CONFIG_SQUASHFS_LZ4=y -CONFIG_SQUASHFS_LZO=y -CONFIG_SQUASHFS_XZ=y -CONFIG_SQUASHFS_ZSTD=y -# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set -# CONFIG_SQUASHFS_EMBEDDED is not set -CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 -# CONFIG_VXFS_FS is not set -CONFIG_MINIX_FS=m -CONFIG_OMFS_FS=m -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX6FS_FS is not set -CONFIG_RESCTRL_FS=y -CONFIG_RESCTRL_FS_PSEUDO_LOCK=y -CONFIG_ROMFS_FS=m -CONFIG_ROMFS_BACKED_BY_BLOCK=y -# CONFIG_ROMFS_BACKED_BY_MTD is not set -# CONFIG_ROMFS_BACKED_BY_BOTH is not set -CONFIG_ROMFS_ON_BLOCK=y -CONFIG_PSTORE=y -CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240 -CONFIG_PSTORE_COMPRESS=y -# CONFIG_PSTORE_CONSOLE is not set -# CONFIG_PSTORE_PMSG is not set -# CONFIG_PSTORE_FTRACE is not set -CONFIG_PSTORE_RAM=m -CONFIG_PSTORE_ZONE=m -CONFIG_PSTORE_BLK=m -CONFIG_PSTORE_BLK_BLKDEV="" -CONFIG_PSTORE_BLK_KMSG_SIZE=64 -CONFIG_PSTORE_BLK_MAX_REASON=2 -CONFIG_UFS_FS=m -# CONFIG_UFS_FS_WRITE is not set -# CONFIG_UFS_DEBUG is not set -CONFIG_EROFS_FS=m -# CONFIG_EROFS_FS_DEBUG is not set -CONFIG_EROFS_FS_XATTR=y -CONFIG_EROFS_FS_POSIX_ACL=y -CONFIG_EROFS_FS_SECURITY=y -CONFIG_EROFS_FS_BACKED_BY_FILE=y -CONFIG_EROFS_FS_ZIP=y -CONFIG_EROFS_FS_ZIP_LZMA=y -CONFIG_EROFS_FS_ZIP_DEFLATE=y -CONFIG_EROFS_FS_ZIP_ZSTD=y -CONFIG_EROFS_FS_ZIP_ACCEL=y -CONFIG_EROFS_FS_ONDEMAND=y -CONFIG_EROFS_FS_PCPU_KTHREAD=y -CONFIG_EROFS_FS_PCPU_KTHREAD_HIPRI=y -CONFIG_VBOXSF_FS=m -CONFIG_NETWORK_FILESYSTEMS=y -CONFIG_NFS_FS=m -CONFIG_NFS_V2=m -CONFIG_NFS_V3=m -CONFIG_NFS_V3_ACL=y -CONFIG_NFS_V4=m -CONFIG_NFS_SWAP=y -CONFIG_NFS_V4_0=y -CONFIG_NFS_V4_2=y -CONFIG_PNFS_FILE_LAYOUT=m -CONFIG_PNFS_BLOCK=m -CONFIG_PNFS_FLEXFILE_LAYOUT=m -CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" -# CONFIG_NFS_V4_1_MIGRATION is not set -CONFIG_NFS_V4_SECURITY_LABEL=y -CONFIG_NFS_FSCACHE=y -# CONFIG_NFS_USE_LEGACY_DNS is not set -CONFIG_NFS_USE_KERNEL_DNS=y -CONFIG_NFS_DEBUG=y -# CONFIG_NFS_DISABLE_UDP_SUPPORT is not set -# CONFIG_NFS_V4_2_READ_PLUS is not set -CONFIG_NFSD=m -# CONFIG_NFSD_V2 is not set -CONFIG_NFSD_V3_ACL=y -CONFIG_NFSD_V4=y -CONFIG_NFSD_PNFS=y -CONFIG_NFSD_BLOCKLAYOUT=y -CONFIG_NFSD_SCSILAYOUT=y -# CONFIG_NFSD_FLEXFILELAYOUT is not set -CONFIG_NFSD_V4_2_INTER_SSC=y -CONFIG_NFSD_V4_SECURITY_LABEL=y -# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set -# CONFIG_NFSD_V4_POSIX_ACLS is not set -CONFIG_GRACE_PERIOD=m -CONFIG_LOCKD=m -CONFIG_LOCKD_V4=y -CONFIG_NFS_ACL_SUPPORT=m -CONFIG_NFS_COMMON=y -CONFIG_NFS_COMMON_LOCALIO_SUPPORT=m -CONFIG_NFS_LOCALIO=y -CONFIG_NFS_V4_2_SSC_HELPER=y -CONFIG_SUNRPC=m -CONFIG_SUNRPC_GSS=m -CONFIG_SUNRPC_BACKCHANNEL=y -CONFIG_SUNRPC_SWAP=y -CONFIG_RPCSEC_GSS_KRB5=m -CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA1=y -CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_CAMELLIA=y -CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA2=y -CONFIG_SUNRPC_DEBUG=y -# CONFIG_SUNRPC_DEBUG_TRACE is not set -CONFIG_SUNRPC_XPRT_RDMA=m -CONFIG_CEPH_FS=m -CONFIG_CEPH_FSCACHE=y -CONFIG_CEPH_FS_POSIX_ACL=y -CONFIG_CEPH_FS_SECURITY_LABEL=y -CONFIG_CIFS=m -# CONFIG_CIFS_STATS2 is not set -CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y -CONFIG_CIFS_UPCALL=y -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -CONFIG_CIFS_DEBUG=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_DEBUG_DUMP_KEYS is not set -CONFIG_CIFS_DFS_UPCALL=y -CONFIG_CIFS_SWN_UPCALL=y -CONFIG_CIFS_SMB_DIRECT=y -CONFIG_CIFS_FSCACHE=y -CONFIG_CIFS_COMPRESSION=y -CONFIG_SMB_SERVER=m -CONFIG_SMB_SERVER_SMBDIRECT=y -CONFIG_SMB_SERVER_CHECK_CAP_NET_ADMIN=y -CONFIG_SMB_SERVER_KERBEROS5=y -CONFIG_SMBDIRECT=m -CONFIG_SMBFS=m -CONFIG_CODA_FS=m -CONFIG_AFS_FS=m -# CONFIG_AFS_DEBUG is not set -CONFIG_AFS_FSCACHE=y -# CONFIG_AFS_DEBUG_CURSOR is not set -CONFIG_9P_FS=m -CONFIG_9P_FSCACHE=y -CONFIG_9P_FS_POSIX_ACL=y -CONFIG_9P_FS_SECURITY=y -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="utf8" -CONFIG_NLS_CODEPAGE_437=y -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=y -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_MAC_ROMAN=m -CONFIG_NLS_MAC_CELTIC=m -CONFIG_NLS_MAC_CENTEURO=m -CONFIG_NLS_MAC_CROATIAN=m -CONFIG_NLS_MAC_CYRILLIC=m -CONFIG_NLS_MAC_GAELIC=m -CONFIG_NLS_MAC_GREEK=m -CONFIG_NLS_MAC_ICELAND=m -CONFIG_NLS_MAC_INUIT=m -CONFIG_NLS_MAC_ROMANIAN=m -CONFIG_NLS_MAC_TURKISH=m -CONFIG_NLS_UTF8=m -CONFIG_NLS_UCS2_UTILS=m -CONFIG_DLM=m -CONFIG_DLM_DEBUG=y -CONFIG_UNICODE=y -CONFIG_IO_WQ=y -# end of File systems - -# -# Security options -# -CONFIG_KEYS=y -CONFIG_KEYS_REQUEST_CACHE=y -CONFIG_PERSISTENT_KEYRINGS=y -CONFIG_BIG_KEYS=y -CONFIG_TRUSTED_KEYS=m -CONFIG_HAVE_TRUSTED_KEYS=y -CONFIG_TRUSTED_KEYS_TPM=y -CONFIG_TRUSTED_KEYS_TEE=y -CONFIG_ENCRYPTED_KEYS=m -# CONFIG_USER_DECRYPTED_DATA is not set -CONFIG_KEY_DH_OPERATIONS=y -CONFIG_KEY_NOTIFICATIONS=y -CONFIG_SECURITY_DMESG_RESTRICT=y -CONFIG_PROC_MEM_ALWAYS_FORCE=y -# CONFIG_PROC_MEM_FORCE_PTRACE is not set -# CONFIG_PROC_MEM_NO_FORCE is not set -CONFIG_SECURITY=y -CONFIG_HAS_SECURITY_AUDIT=y -CONFIG_SECURITYFS=y -CONFIG_SECURITY_NETWORK=y -CONFIG_SECURITY_INFINIBAND=y -CONFIG_SECURITY_NETWORK_XFRM=y -CONFIG_SECURITY_PATH=y -# CONFIG_INTEL_TXT is not set -CONFIG_LSM_MMAP_MIN_ADDR=65536 -# CONFIG_STATIC_USERMODEHELPER is not set -CONFIG_SECURITY_SELINUX=y -CONFIG_SECURITY_SELINUX_BOOTPARAM=y -CONFIG_SECURITY_SELINUX_DEVELOP=y -CONFIG_SECURITY_SELINUX_AVC_STATS=y -CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS=9 -CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256 -CONFIG_SECURITY_SELINUX_AVC_HASH_BITS=9 -# CONFIG_SECURITY_SELINUX_DEBUG is not set -CONFIG_SECURITY_SMACK=y -CONFIG_SECURITY_SMACK_BRINGUP=y -CONFIG_SECURITY_SMACK_NETFILTER=y -CONFIG_SECURITY_SMACK_APPEND_SIGNALS=y -# CONFIG_SECURITY_TOMOYO is not set -CONFIG_SECURITY_APPARMOR=y -# CONFIG_SECURITY_APPARMOR_DEBUG is not set -CONFIG_SECURITY_APPARMOR_INTROSPECT_POLICY=y -CONFIG_SECURITY_APPARMOR_HASH=y -CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y -CONFIG_SECURITY_APPARMOR_EXPORT_BINARY=y -CONFIG_SECURITY_APPARMOR_PARANOID_LOAD=y -CONFIG_SECURITY_LOADPIN=y -CONFIG_SECURITY_LOADPIN_ENFORCE=y -CONFIG_SECURITY_YAMA=y -CONFIG_SECURITY_SAFESETID=y -CONFIG_SECURITY_LOCKDOWN_LSM=y -# CONFIG_SECURITY_LOCKDOWN_LSM_EARLY is not set -CONFIG_LOCK_DOWN_KERNEL_FORCE_NONE=y -# CONFIG_LOCK_DOWN_KERNEL_FORCE_INTEGRITY is not set -# CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY is not set -CONFIG_SECURITY_LANDLOCK=y -CONFIG_SECURITY_IPE=y -CONFIG_IPE_BOOT_POLICY="" -CONFIG_IPE_POLICY_SIG_SECONDARY_KEYRING=y -CONFIG_IPE_POLICY_SIG_PLATFORM_KEYRING=y - -# -# IPE Trust Providers -# -CONFIG_IPE_PROP_DM_VERITY=y -CONFIG_IPE_PROP_DM_VERITY_SIGNATURE=y -CONFIG_IPE_PROP_FS_VERITY=y -CONFIG_IPE_PROP_FS_VERITY_BUILTIN_SIG=y -# end of IPE Trust Providers - -CONFIG_INTEGRITY=y -CONFIG_INTEGRITY_SIGNATURE=y -CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y -CONFIG_INTEGRITY_TRUSTED_KEYRING=y -CONFIG_INTEGRITY_PLATFORM_KEYRING=y -CONFIG_INTEGRITY_MACHINE_KEYRING=y -# CONFIG_INTEGRITY_CA_MACHINE_KEYRING is not set -CONFIG_LOAD_UEFI_KEYS=y -CONFIG_INTEGRITY_AUDIT=y -# CONFIG_IMA is not set -# CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set -# CONFIG_EVM is not set -# CONFIG_DEFAULT_SECURITY_SELINUX is not set -# CONFIG_DEFAULT_SECURITY_SMACK is not set -# CONFIG_DEFAULT_SECURITY_APPARMOR is not set -CONFIG_DEFAULT_SECURITY_DAC=y -CONFIG_LSM="landlock,lockdown,yama,integrity,bpf" - -# -# Kernel hardening options -# - -# -# Memory initialization -# -CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y -CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y -CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y -# CONFIG_INIT_STACK_NONE is not set -# CONFIG_INIT_STACK_ALL_PATTERN is not set -CONFIG_INIT_STACK_ALL_ZERO=y -CONFIG_CC_HAS_SANCOV_STACK_DEPTH_CALLBACK=y -# CONFIG_KSTACK_ERASE is not set -CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y -# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set -CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y -# CONFIG_ZERO_CALL_USED_REGS is not set -# end of Memory initialization - -# -# Bounds checking -# -CONFIG_FORTIFY_SOURCE=y -CONFIG_HARDENED_USERCOPY=y -CONFIG_HARDENED_USERCOPY_DEFAULT_ON=y -# end of Bounds checking - -# -# Hardening of kernel data structures -# -CONFIG_LIST_HARDENED=y -# CONFIG_BUG_ON_DATA_CORRUPTION is not set -# end of Hardening of kernel data structures - -CONFIG_CC_HAS_RANDSTRUCT=y -CONFIG_RANDSTRUCT_NONE=y -# CONFIG_RANDSTRUCT_FULL is not set -# end of Kernel hardening options -# end of Security options - -CONFIG_ASYNC_CORE=m -CONFIG_ASYNC_MEMCPY=m -CONFIG_ASYNC_XOR=m -CONFIG_ASYNC_PQ=m -CONFIG_ASYNC_RAID6_RECOV=m -CONFIG_CRYPTO=y - -# -# Crypto core or helper -# -CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_ALGAPI2=y -CONFIG_CRYPTO_AEAD=m -CONFIG_CRYPTO_AEAD2=m -CONFIG_CRYPTO_SIG=y -CONFIG_CRYPTO_SIG2=y -CONFIG_CRYPTO_SKCIPHER=y -CONFIG_CRYPTO_SKCIPHER2=y -CONFIG_CRYPTO_HASH=y -CONFIG_CRYPTO_HASH2=y -CONFIG_CRYPTO_RNG=y -CONFIG_CRYPTO_RNG2=y -CONFIG_CRYPTO_AKCIPHER2=y -CONFIG_CRYPTO_AKCIPHER=y -CONFIG_CRYPTO_KPP2=y -CONFIG_CRYPTO_KPP=y -CONFIG_CRYPTO_ACOMP2=y -CONFIG_CRYPTO_ACOMP=m -CONFIG_CRYPTO_MANAGER=y -CONFIG_CRYPTO_MANAGER2=y -CONFIG_CRYPTO_USER=m -CONFIG_CRYPTO_NULL=m -CONFIG_CRYPTO_PCRYPT=m -CONFIG_CRYPTO_CRYPTD=m -CONFIG_CRYPTO_AUTHENC=m -CONFIG_CRYPTO_KRB5ENC=m -# CONFIG_CRYPTO_BENCHMARK is not set -CONFIG_CRYPTO_ENGINE=m -# end of Crypto core or helper - -# -# Public-key cryptography -# -CONFIG_CRYPTO_RSA=y -CONFIG_CRYPTO_DH=y -CONFIG_CRYPTO_DH_RFC7919_GROUPS=y -CONFIG_CRYPTO_ECC=y -CONFIG_CRYPTO_ECDH=y -CONFIG_CRYPTO_ECDSA=y -CONFIG_CRYPTO_ECRDSA=m -CONFIG_CRYPTO_MLDSA=m -# end of Public-key cryptography - -# -# Block ciphers -# -CONFIG_CRYPTO_AES=y -CONFIG_CRYPTO_ARIA=m -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_BLOWFISH_COMMON=m -CONFIG_CRYPTO_CAMELLIA=m -CONFIG_CRYPTO_CAST_COMMON=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_DES=m -CONFIG_CRYPTO_FCRYPT=m -CONFIG_CRYPTO_SERPENT=m -CONFIG_CRYPTO_SM4=m -CONFIG_CRYPTO_SM4_GENERIC=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_TWOFISH_COMMON=m -# end of Block ciphers - -# -# Length-preserving ciphers and modes -# -CONFIG_CRYPTO_ADIANTUM=m -CONFIG_CRYPTO_CHACHA20=m -CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_CTR=y -CONFIG_CRYPTO_CTS=y -CONFIG_CRYPTO_ECB=y -CONFIG_CRYPTO_HCTR2=m -CONFIG_CRYPTO_LRW=m -CONFIG_CRYPTO_PCBC=m -CONFIG_CRYPTO_XCTR=m -CONFIG_CRYPTO_XTS=y -# end of Length-preserving ciphers and modes - -# -# AEAD (authenticated encryption with associated data) ciphers -# -CONFIG_CRYPTO_AEGIS128=m -CONFIG_CRYPTO_CHACHA20POLY1305=m -CONFIG_CRYPTO_CCM=m -CONFIG_CRYPTO_GCM=m -CONFIG_CRYPTO_GENIV=m -CONFIG_CRYPTO_SEQIV=m -CONFIG_CRYPTO_ECHAINIV=m -CONFIG_CRYPTO_ESSIV=m -# end of AEAD (authenticated encryption with associated data) ciphers - -# -# Hashes, digests, and MACs -# -CONFIG_CRYPTO_BLAKE2B=y -CONFIG_CRYPTO_CMAC=m -CONFIG_CRYPTO_HMAC=y -CONFIG_CRYPTO_MD4=m -CONFIG_CRYPTO_MD5=y -CONFIG_CRYPTO_RMD160=m -CONFIG_CRYPTO_SHA1=y -CONFIG_CRYPTO_SHA256=y -CONFIG_CRYPTO_SHA512=y -CONFIG_CRYPTO_SHA3=y -CONFIG_CRYPTO_SM3=m -CONFIG_CRYPTO_STREEBOG=m -CONFIG_CRYPTO_WP512=m -CONFIG_CRYPTO_XCBC=m -CONFIG_CRYPTO_XXHASH=y -# end of Hashes, digests, and MACs - -# -# CRCs (cyclic redundancy checks) -# -CONFIG_CRYPTO_CRC32C=y -CONFIG_CRYPTO_CRC32=m -# end of CRCs (cyclic redundancy checks) - -# -# Compression -# -CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_LZO=y -CONFIG_CRYPTO_842=m -CONFIG_CRYPTO_LZ4=m -CONFIG_CRYPTO_LZ4HC=m -CONFIG_CRYPTO_ZSTD=y -# end of Compression - -# -# Random number generation -# -CONFIG_CRYPTO_DRBG_MENU=y -CONFIG_CRYPTO_DRBG_HMAC=y -CONFIG_CRYPTO_DRBG_HASH=y -CONFIG_CRYPTO_DRBG_CTR=y -CONFIG_CRYPTO_DRBG=y -CONFIG_CRYPTO_JITTERENTROPY=y -CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=64 -CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=32 -CONFIG_CRYPTO_JITTERENTROPY_OSR=1 -CONFIG_CRYPTO_KDF800108_CTR=y -CONFIG_CRYPTO_DF80090A=y -# end of Random number generation - -# -# Userspace interface -# -CONFIG_CRYPTO_USER_API=m -CONFIG_CRYPTO_USER_API_HASH=m -CONFIG_CRYPTO_USER_API_SKCIPHER=m -CONFIG_CRYPTO_USER_API_RNG=m -# CONFIG_CRYPTO_USER_API_RNG_CAVP is not set -CONFIG_CRYPTO_USER_API_AEAD=m -# CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE is not set -# end of Userspace interface - -# -# Accelerated Cryptographic Algorithms for CPU (x86) -# -CONFIG_CRYPTO_AES_NI_INTEL=m -CONFIG_CRYPTO_BLOWFISH_X86_64=m -CONFIG_CRYPTO_CAMELLIA_X86_64=m -CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=m -CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m -CONFIG_CRYPTO_CAST5_AVX_X86_64=m -CONFIG_CRYPTO_CAST6_AVX_X86_64=m -CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m -CONFIG_CRYPTO_SERPENT_AVX_X86_64=m -CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m -CONFIG_CRYPTO_SM4_AESNI_AVX_X86_64=m -CONFIG_CRYPTO_SM4_AESNI_AVX2_X86_64=m -CONFIG_CRYPTO_TWOFISH_X86_64=m -CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m -CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m -CONFIG_CRYPTO_ARIA_AESNI_AVX_X86_64=m -CONFIG_CRYPTO_ARIA_AESNI_AVX2_X86_64=m -CONFIG_CRYPTO_ARIA_GFNI_AVX512_X86_64=m -CONFIG_CRYPTO_AEGIS128_AESNI_SSE2=m -# end of Accelerated Cryptographic Algorithms for CPU (x86) - -CONFIG_CRYPTO_HW=y -CONFIG_CRYPTO_DEV_PADLOCK=m -CONFIG_CRYPTO_DEV_PADLOCK_AES=m -CONFIG_CRYPTO_DEV_PADLOCK_SHA=m -CONFIG_CRYPTO_DEV_ATMEL_I2C=m -CONFIG_CRYPTO_DEV_ATMEL_ECC=m -CONFIG_CRYPTO_DEV_ATMEL_SHA204A=m -CONFIG_CRYPTO_DEV_CCP=y -CONFIG_CRYPTO_DEV_CCP_DD=m -CONFIG_CRYPTO_DEV_SP_CCP=y -CONFIG_CRYPTO_DEV_CCP_CRYPTO=m -CONFIG_CRYPTO_DEV_SP_PSP=y -CONFIG_CRYPTO_DEV_CCP_DEBUGFS=y -CONFIG_CRYPTO_DEV_NITROX=m -CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m -CONFIG_CRYPTO_DEV_QAT=m -CONFIG_CRYPTO_DEV_QAT_DH895xCC=m -CONFIG_CRYPTO_DEV_QAT_C3XXX=m -CONFIG_CRYPTO_DEV_QAT_C62X=m -CONFIG_CRYPTO_DEV_QAT_4XXX=m -CONFIG_CRYPTO_DEV_QAT_420XX=m -CONFIG_CRYPTO_DEV_QAT_6XXX=m -CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m -CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m -CONFIG_CRYPTO_DEV_QAT_C62XVF=m -# CONFIG_CRYPTO_DEV_QAT_ERROR_INJECTION is not set -CONFIG_CRYPTO_DEV_IAA_CRYPTO=m -# CONFIG_CRYPTO_DEV_IAA_CRYPTO_STATS is not set -CONFIG_CRYPTO_DEV_CHELSIO=m -CONFIG_CRYPTO_DEV_VIRTIO=m -CONFIG_CRYPTO_DEV_SAFEXCEL=m -CONFIG_CRYPTO_DEV_AMLOGIC_GXL=m -CONFIG_CRYPTO_DEV_AMLOGIC_GXL_DEBUG=y -CONFIG_ASYMMETRIC_KEY_TYPE=y -CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y -CONFIG_X509_CERTIFICATE_PARSER=y -CONFIG_PKCS8_PRIVATE_KEY_PARSER=m -CONFIG_PKCS7_MESSAGE_PARSER=y -# CONFIG_PKCS7_WAIVE_AUTHATTRS_REJECTION_FOR_MLDSA is not set -# CONFIG_PKCS7_TEST_KEY is not set -CONFIG_SIGNED_PE_FILE_VERIFICATION=y -# CONFIG_FIPS_SIGNATURE_SELFTEST is not set - -# -# Certificates for signature checking -# -CONFIG_MODULE_SIG_KEY="certs/signing_key.pem" -# CONFIG_MODULE_SIG_KEY_TYPE_RSA is not set -CONFIG_MODULE_SIG_KEY_TYPE_ECDSA=y -# CONFIG_MODULE_SIG_KEY_TYPE_MLDSA_44 is not set -# CONFIG_MODULE_SIG_KEY_TYPE_MLDSA_65 is not set -# CONFIG_MODULE_SIG_KEY_TYPE_MLDSA_87 is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y -CONFIG_SYSTEM_TRUSTED_KEYS="" -# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set -CONFIG_SECONDARY_TRUSTED_KEYRING=y -# CONFIG_SECONDARY_TRUSTED_KEYRING_SIGNED_BY_BUILTIN is not set -CONFIG_SYSTEM_BLACKLIST_KEYRING=y -CONFIG_SYSTEM_BLACKLIST_HASH_LIST="" -CONFIG_SYSTEM_REVOCATION_LIST=y -CONFIG_SYSTEM_REVOCATION_KEYS="" -CONFIG_SYSTEM_BLACKLIST_AUTH_UPDATE=y -CONFIG_OPENSSL_SUPPORTS_ML_DSA=y -# end of Certificates for signature checking - -CONFIG_CRYPTO_KRB5=m -# CONFIG_CRYPTO_KRB5_SELFTESTS is not set -CONFIG_BINARY_PRINTF=y - -# -# Library routines -# -CONFIG_RAID6_PQ=y -# CONFIG_RAID6_PQ_BENCHMARK is not set -CONFIG_LINEAR_RANGES=y -CONFIG_PACKING=y -CONFIG_BITREVERSE=y -CONFIG_GENERIC_STRNCPY_FROM_USER=y -CONFIG_GENERIC_STRNLEN_USER=y -CONFIG_GENERIC_NET_UTILS=y -CONFIG_CORDIC=m -CONFIG_POLYNOMIAL=m -# CONFIG_PRIME_NUMBERS is not set -CONFIG_RATIONAL=y -CONFIG_GENERIC_IOMAP=y -CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y -CONFIG_ARCH_HAS_FAST_MULTIPLIER=y -CONFIG_ARCH_USE_SYM_ANNOTATIONS=y -CONFIG_CRC7=m -CONFIG_CRC8=m -CONFIG_CRC16=y -CONFIG_CRC_CCITT=y -CONFIG_CRC_ITU_T=m -CONFIG_CRC_T10DIF=y -CONFIG_CRC_T10DIF_ARCH=y -CONFIG_CRC32=y -CONFIG_CRC32_ARCH=y -CONFIG_CRC64=y -CONFIG_CRC64_ARCH=y -CONFIG_CRC_OPTIMIZATIONS=y -CONFIG_CRYPTO_HASH_INFO=y -CONFIG_CRYPTO_LIB_UTILS=y -CONFIG_CRYPTO_LIB_AES=y -CONFIG_CRYPTO_LIB_AES_ARCH=y -CONFIG_CRYPTO_LIB_AESCFB=y -CONFIG_CRYPTO_LIB_AES_CBC_MACS=m -CONFIG_CRYPTO_LIB_AESGCM=y -CONFIG_CRYPTO_LIB_ARC4=m -CONFIG_CRYPTO_LIB_GF128MUL=m -CONFIG_CRYPTO_LIB_BLAKE2B=y -CONFIG_CRYPTO_LIB_BLAKE2S_ARCH=y -CONFIG_CRYPTO_LIB_CHACHA=y -CONFIG_CRYPTO_LIB_CHACHA_ARCH=y -CONFIG_CRYPTO_LIB_CURVE25519=m -CONFIG_CRYPTO_LIB_CURVE25519_ARCH=y -CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y -CONFIG_CRYPTO_LIB_DES=m -CONFIG_CRYPTO_LIB_GF128HASH=y -CONFIG_CRYPTO_LIB_GF128HASH_ARCH=y -CONFIG_CRYPTO_LIB_MD5=y -CONFIG_CRYPTO_LIB_MLDSA=m -CONFIG_CRYPTO_LIB_NH=m -CONFIG_CRYPTO_LIB_NH_ARCH=y -CONFIG_CRYPTO_LIB_POLY1305=y -CONFIG_CRYPTO_LIB_POLY1305_ARCH=y -CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y -CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11 -CONFIG_CRYPTO_LIB_CHACHA20POLY1305=y -CONFIG_CRYPTO_LIB_SHA1=y -CONFIG_CRYPTO_LIB_SHA1_ARCH=y -CONFIG_CRYPTO_LIB_SHA256=y -CONFIG_CRYPTO_LIB_SHA256_ARCH=y -CONFIG_CRYPTO_LIB_SHA512=y -CONFIG_CRYPTO_LIB_SHA512_ARCH=y -CONFIG_CRYPTO_LIB_SHA3=y -CONFIG_CRYPTO_LIB_SM3=m -CONFIG_CRYPTO_LIB_SM3_ARCH=y -CONFIG_XOR_BLOCKS=y -CONFIG_XOR_BLOCKS_ARCH=y -CONFIG_XXHASH=y -# CONFIG_RANDOM32_SELFTEST is not set -CONFIG_842_COMPRESS=m -CONFIG_842_DECOMPRESS=m -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y -CONFIG_LZO_COMPRESS=y -CONFIG_LZO_DECOMPRESS=y -CONFIG_LZ4_COMPRESS=m -CONFIG_LZ4HC_COMPRESS=m -CONFIG_LZ4_DECOMPRESS=y -CONFIG_ZSTD_COMMON=y -CONFIG_ZSTD_COMPRESS=y -CONFIG_ZSTD_DECOMPRESS=y -CONFIG_XZ_DEC=y -CONFIG_XZ_DEC_X86=y -CONFIG_XZ_DEC_POWERPC=y -CONFIG_XZ_DEC_ARM=y -CONFIG_XZ_DEC_ARMTHUMB=y -CONFIG_XZ_DEC_ARM64=y -CONFIG_XZ_DEC_SPARC=y -CONFIG_XZ_DEC_RISCV=y -CONFIG_XZ_DEC_MICROLZMA=y -CONFIG_XZ_DEC_BCJ=y -# CONFIG_XZ_DEC_TEST is not set -CONFIG_DECOMPRESS_GZIP=y -CONFIG_DECOMPRESS_BZIP2=y -CONFIG_DECOMPRESS_LZMA=y -CONFIG_DECOMPRESS_XZ=y -CONFIG_DECOMPRESS_LZO=y -CONFIG_DECOMPRESS_LZ4=y -CONFIG_DECOMPRESS_ZSTD=y -CONFIG_GENERIC_ALLOCATOR=y -CONFIG_REED_SOLOMON=m -CONFIG_REED_SOLOMON_ENC8=y -CONFIG_REED_SOLOMON_DEC8=y -CONFIG_BCH=m -CONFIG_TEXTSEARCH=y -CONFIG_TEXTSEARCH_KMP=m -CONFIG_TEXTSEARCH_BM=m -CONFIG_TEXTSEARCH_FSM=m -CONFIG_BTREE=y -CONFIG_INTERVAL_TREE=y -CONFIG_INTERVAL_TREE_SPAN_ITER=y -CONFIG_XARRAY_MULTI=y -CONFIG_ASSOCIATIVE_ARRAY=y -CONFIG_CLOSURES=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_IOPORT_MAP=y -CONFIG_HAS_DMA=y -CONFIG_DMA_OPS_HELPERS=y -CONFIG_NEED_SG_DMA_FLAGS=y -CONFIG_NEED_SG_DMA_LENGTH=y -CONFIG_NEED_DMA_MAP_STATE=y -CONFIG_ARCH_DMA_ADDR_T_64BIT=y -CONFIG_ARCH_HAS_FORCE_DMA_UNENCRYPTED=y -CONFIG_SWIOTLB=y -# CONFIG_SWIOTLB_DYNAMIC is not set -CONFIG_DMA_NEED_SYNC=y -CONFIG_DMA_COHERENT_POOL=y -CONFIG_DMA_CMA=y -# CONFIG_DMA_NUMA_CMA is not set - -# -# Default contiguous memory area size: -# -CONFIG_CMA_SIZE_MBYTES=0 -CONFIG_CMA_SIZE_SEL_MBYTES=y -# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set -# CONFIG_CMA_SIZE_SEL_MIN is not set -# CONFIG_CMA_SIZE_SEL_MAX is not set -CONFIG_CMA_ALIGNMENT=8 -# CONFIG_DMA_API_DEBUG is not set -# CONFIG_DMA_MAP_BENCHMARK is not set -CONFIG_SGL_ALLOC=y -CONFIG_CHECK_SIGNATURE=y -CONFIG_CPUMASK_OFFSTACK=y -CONFIG_CPU_RMAP=y -CONFIG_DQL=y -CONFIG_GLOB=y -CONFIG_NLATTR=y -CONFIG_LRU_CACHE=m -CONFIG_CLZ_TAB=y -CONFIG_IRQ_POLL=y -CONFIG_MPILIB=y -CONFIG_SIGNATURE=y -CONFIG_DIMLIB=y -CONFIG_LIBFDT=y -CONFIG_OID_REGISTRY=y -CONFIG_UCS2_STRING=y -CONFIG_HAVE_GENERIC_VDSO=y -CONFIG_GENERIC_GETTIMEOFDAY=y -CONFIG_GENERIC_VDSO_OVERFLOW_PROTECT=y -CONFIG_VDSO_GETRANDOM=y -CONFIG_FONT_SUPPORT=y -CONFIG_FONTS=y -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_7x14 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set -# CONFIG_FONT_MINI_4x6 is not set -# CONFIG_FONT_6x10 is not set -# CONFIG_FONT_10x18 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -# CONFIG_FONT_TER10x18 is not set -CONFIG_FONT_TER16x32=y -# CONFIG_FONT_6x8 is not set -CONFIG_SG_POOL=y -CONFIG_ARCH_HAS_PMEM_API=y -CONFIG_MEMREGION=y -CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION=y -CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y -CONFIG_ARCH_HAS_COPY_MC=y -CONFIG_ARCH_STACKWALK=y -CONFIG_STACKDEPOT=y -CONFIG_STACKDEPOT_MAX_FRAMES=64 -CONFIG_SBITMAP=y -CONFIG_PARMAN=m -CONFIG_OBJAGG=m -# CONFIG_LWQ_TEST is not set -# end of Library routines - -CONFIG_PLDMFW=y -CONFIG_ASN1_ENCODER=m -CONFIG_FIRMWARE_TABLE=y -CONFIG_UNION_FIND=y -CONFIG_MIN_HEAP=y - -# -# Kernel hacking -# - -# -# printk and dmesg options -# -CONFIG_PRINTK_TIME=y -# CONFIG_PRINTK_CALLER is not set -CONFIG_PRINTK_EXECUTION_CTX=y -CONFIG_STACKTRACE_BUILD_ID=y -CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4 -CONFIG_CONSOLE_LOGLEVEL_QUIET=1 -CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 -CONFIG_BOOT_PRINTK_DELAY=y -CONFIG_DYNAMIC_DEBUG=y -CONFIG_DYNAMIC_DEBUG_CORE=y -CONFIG_SYMBOLIC_ERRNAME=y -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_BUGVERBOSE_DETAILED=y -# end of printk and dmesg options - -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_MISC is not set - -# -# Compile-time checks and compiler options -# -CONFIG_DEBUG_INFO=y -CONFIG_AS_HAS_NON_CONST_ULEB128=y -# CONFIG_DEBUG_INFO_NONE is not set -# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set -# CONFIG_DEBUG_INFO_DWARF4 is not set -CONFIG_DEBUG_INFO_DWARF5=y -# CONFIG_DEBUG_INFO_REDUCED is not set -CONFIG_DEBUG_INFO_COMPRESSED_NONE=y -# CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set -# CONFIG_DEBUG_INFO_SPLIT is not set -CONFIG_GDB_SCRIPTS=y -CONFIG_FRAME_WARN=2048 -CONFIG_STRIP_ASM_SYMS=y -# CONFIG_HEADERS_INSTALL is not set -CONFIG_SECTION_MISMATCH_WARN_ONLY=y -CONFIG_OBJTOOL=y -# CONFIG_OBJTOOL_WERROR is not set -# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set -# end of Compile-time checks and compiler options - -# -# Generic Kernel Debugging Instruments -# -CONFIG_MAGIC_SYSRQ=y -CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x0 -CONFIG_MAGIC_SYSRQ_SERIAL=y -CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE="" -CONFIG_DEBUG_FS=y -CONFIG_DEBUG_FS_ALLOW_ALL=y -# CONFIG_DEBUG_FS_ALLOW_NONE is not set -CONFIG_HAVE_ARCH_KGDB=y -# CONFIG_KGDB is not set -CONFIG_ARCH_HAS_UBSAN=y -# CONFIG_UBSAN is not set -CONFIG_HAVE_ARCH_KCSAN=y -CONFIG_HAVE_KCSAN_COMPILER=y -# CONFIG_KCSAN is not set -# end of Generic Kernel Debugging Instruments - -# -# Networking Debugging -# -# CONFIG_NET_DEV_REFCNT_TRACKER is not set -# CONFIG_NET_NS_REFCNT_TRACKER is not set -# CONFIG_DEBUG_NET is not set -# CONFIG_DEBUG_NET_SMALL_RTNL is not set -# end of Networking Debugging - -# -# Memory Debugging -# -# CONFIG_PAGE_EXTENSION is not set -# CONFIG_DEBUG_PAGEALLOC is not set -CONFIG_SLUB_DEBUG=y -# CONFIG_SLUB_DEBUG_ON is not set -# CONFIG_PAGE_OWNER is not set -# CONFIG_PAGE_TABLE_CHECK is not set -CONFIG_PAGE_POISONING=y -# CONFIG_DEBUG_PAGE_REF is not set -CONFIG_DEBUG_RODATA_TEST=y -CONFIG_ARCH_HAS_DEBUG_WX=y -CONFIG_DEBUG_WX=y -CONFIG_ARCH_HAS_PTDUMP=y -CONFIG_PTDUMP=y -# CONFIG_PTDUMP_DEBUGFS is not set -CONFIG_HAVE_DEBUG_KMEMLEAK=y -# CONFIG_DEBUG_KMEMLEAK is not set -# CONFIG_PER_VMA_LOCK_STATS is not set -# CONFIG_DEBUG_OBJECTS is not set -CONFIG_SHRINKER_DEBUG=y -# CONFIG_DEBUG_STACK_USAGE is not set -CONFIG_SCHED_STACK_END_CHECK=y -CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y -# CONFIG_DEBUG_VFS is not set -# CONFIG_DEBUG_VM is not set -# CONFIG_DEBUG_VM_PGTABLE is not set -CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y -# CONFIG_DEBUG_VIRTUAL is not set -CONFIG_DEBUG_MEMORY_INIT=y -# CONFIG_DEBUG_PER_CPU_MAPS is not set -# CONFIG_MEM_ALLOC_PROFILING is not set -CONFIG_HAVE_ARCH_KASAN=y -CONFIG_HAVE_ARCH_KASAN_VMALLOC=y -CONFIG_CC_HAS_KASAN_GENERIC=y -CONFIG_CC_HAS_KASAN_SW_TAGS=y -CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y -# CONFIG_KASAN is not set -CONFIG_HAVE_ARCH_KFENCE=y -CONFIG_KFENCE=y -CONFIG_KFENCE_SAMPLE_INTERVAL=100 -CONFIG_KFENCE_NUM_OBJECTS=255 -CONFIG_KFENCE_DEFERRABLE=y -CONFIG_KFENCE_STRESS_TEST_FAULTS=0 -CONFIG_HAVE_ARCH_KMSAN=y -CONFIG_HAVE_KMSAN_COMPILER=y -# CONFIG_KMSAN is not set -# end of Memory Debugging - -CONFIG_DEBUG_SHIRQ=y - -# -# Debug Oops, Lockups and Hangs -# -# CONFIG_PANIC_ON_OOPS is not set -CONFIG_PANIC_TIMEOUT=0 -CONFIG_LOCKUP_DETECTOR=y -CONFIG_SOFTLOCKUP_DETECTOR=y -CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y -CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=0 -CONFIG_HAVE_HARDLOCKUP_DETECTOR_BUDDY=y -CONFIG_HARDLOCKUP_DETECTOR=y -# CONFIG_HARDLOCKUP_DETECTOR_PREFER_BUDDY is not set -CONFIG_HARDLOCKUP_DETECTOR_PERF=y -# CONFIG_HARDLOCKUP_DETECTOR_BUDDY is not set -# CONFIG_HARDLOCKUP_DETECTOR_ARCH is not set -CONFIG_HARDLOCKUP_DETECTOR_COUNTS_HRTIMER=y -CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y -# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set -CONFIG_DETECT_HUNG_TASK=y -CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 -CONFIG_BOOTPARAM_HUNG_TASK_PANIC=0 -CONFIG_DETECT_HUNG_TASK_BLOCKER=y -# CONFIG_WQ_WATCHDOG is not set -# CONFIG_WQ_CPU_INTENSIVE_REPORT is not set -# CONFIG_TEST_LOCKUP is not set -# end of Debug Oops, Lockups and Hangs - -# -# Scheduler Debugging -# -CONFIG_SCHED_INFO=y -CONFIG_SCHEDSTATS=y -# end of Scheduler Debugging - -# CONFIG_DEBUG_PREEMPT is not set -# CONFIG_DEBUG_ATOMIC is not set - -# -# Lock Debugging (spinlocks, mutexes, etc...) -# -CONFIG_LOCK_DEBUGGING_SUPPORT=y -# CONFIG_PROVE_LOCKING is not set -# CONFIG_LOCK_STAT is not set -# CONFIG_DEBUG_RT_MUTEXES is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set -# CONFIG_DEBUG_RWSEMS is not set -# CONFIG_DEBUG_LOCK_ALLOC is not set -# CONFIG_DEBUG_ATOMIC_SLEEP is not set -# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_LOCK_TORTURE_TEST is not set -# CONFIG_WW_MUTEX_SELFTEST is not set -# CONFIG_SCF_TORTURE_TEST is not set -# CONFIG_CSD_LOCK_WAIT_DEBUG is not set -# end of Lock Debugging (spinlocks, mutexes, etc...) - -# CONFIG_NMI_CHECK_CPU is not set -# CONFIG_DEBUG_IRQFLAGS is not set -CONFIG_STACKTRACE=y -# CONFIG_DEBUG_KOBJECT is not set - -# -# Debug kernel data structures -# -# CONFIG_DEBUG_LIST is not set -# CONFIG_DEBUG_PLIST is not set -# CONFIG_DEBUG_SG is not set -# CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_DEBUG_CLOSURES is not set -# CONFIG_DEBUG_MAPLE_TREE is not set -# end of Debug kernel data structures - -# -# RCU Debugging -# -# CONFIG_RCU_SCALE_TEST is not set -# CONFIG_RCU_TORTURE_TEST is not set -# CONFIG_RCU_REF_SCALE_TEST is not set -CONFIG_RCU_CPU_STALL_TIMEOUT=60 -CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 -# CONFIG_RCU_CPU_STALL_CPUTIME is not set -# CONFIG_RCU_CPU_STALL_NOTIFIER is not set -# CONFIG_RCU_TRACE is not set -# CONFIG_RCU_EQS_DEBUG is not set -# CONFIG_RCU_DYNTICKS_TORTURE is not set -# end of RCU Debugging - -# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set -# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set -# CONFIG_LATENCYTOP is not set -# CONFIG_DEBUG_CGROUP_REF is not set -CONFIG_USER_STACKTRACE_SUPPORT=y -CONFIG_NOP_TRACER=y -CONFIG_HAVE_RETHOOK=y -CONFIG_RETHOOK=y -CONFIG_HAVE_FUNCTION_TRACER=y -CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y -CONFIG_HAVE_FUNCTION_GRAPH_FREGS=y -CONFIG_HAVE_FTRACE_GRAPH_FUNC=y -CONFIG_HAVE_DYNAMIC_FTRACE=y -CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y -CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y -CONFIG_HAVE_SINGLE_FTRACE_DIRECT_OPS=y -CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y -CONFIG_HAVE_FTRACE_REGS_HAVING_PT_REGS=y -CONFIG_HAVE_DYNAMIC_FTRACE_NO_PATCHABLE=y -CONFIG_HAVE_DYNAMIC_FTRACE_WITH_JMP=y -CONFIG_HAVE_SYSCALL_TRACEPOINTS=y -CONFIG_HAVE_FENTRY=y -CONFIG_HAVE_OBJTOOL_MCOUNT=y -CONFIG_HAVE_OBJTOOL_NOP_MCOUNT=y -CONFIG_HAVE_C_RECORDMCOUNT=y -CONFIG_HAVE_BUILDTIME_MCOUNT_SORT=y -CONFIG_BUILDTIME_MCOUNT_SORT=y -CONFIG_TRACER_MAX_TRACE=y -CONFIG_TRACE_CLOCK=y -CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y -CONFIG_TRACING=y -CONFIG_GENERIC_TRACER=y -CONFIG_TRACING_SUPPORT=y -CONFIG_FTRACE=y -# CONFIG_TRACEFS_AUTOMOUNT_DEPRECATED is not set -CONFIG_BOOTTIME_TRACING=y -CONFIG_FUNCTION_TRACER=y -CONFIG_FUNCTION_GRAPH_TRACER=y -CONFIG_FUNCTION_GRAPH_RETVAL=y -CONFIG_FUNCTION_GRAPH_RETADDR=y -CONFIG_DYNAMIC_FTRACE=y -CONFIG_DYNAMIC_FTRACE_WITH_REGS=y -CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y -CONFIG_DYNAMIC_FTRACE_WITH_ARGS=y -CONFIG_DYNAMIC_FTRACE_WITH_JMP=y -# CONFIG_FUNCTION_SELF_TRACING is not set -CONFIG_FPROBE=y -CONFIG_FUNCTION_PROFILER=y -CONFIG_STACK_TRACER=y -# CONFIG_IRQSOFF_TRACER is not set -# CONFIG_PREEMPT_TRACER is not set -CONFIG_SCHED_TRACER=y -CONFIG_HWLAT_TRACER=y -CONFIG_OSNOISE_TRACER=y -CONFIG_TIMERLAT_TRACER=y -CONFIG_MMIOTRACE=y -CONFIG_FTRACE_SYSCALLS=y -CONFIG_TRACE_SYSCALL_BUF_SIZE_DEFAULT=63 -CONFIG_TRACER_SNAPSHOT=y -# CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP is not set -CONFIG_BRANCH_PROFILE_NONE=y -# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set -CONFIG_BLK_DEV_IO_TRACE=y -CONFIG_FPROBE_EVENTS=y -CONFIG_KPROBE_EVENTS=y -# CONFIG_KPROBE_EVENTS_ON_NOTRACE is not set -CONFIG_UPROBE_EVENTS=y -CONFIG_EPROBE_EVENTS=y -CONFIG_BPF_EVENTS=y -CONFIG_DYNAMIC_EVENTS=y -CONFIG_PROBE_EVENTS=y -CONFIG_BPF_KPROBE_OVERRIDE=y -CONFIG_FTRACE_MCOUNT_USE_OBJTOOL=y -CONFIG_TRACING_MAP=y -CONFIG_SYNTH_EVENTS=y -CONFIG_USER_EVENTS=y -CONFIG_HIST_TRIGGERS=y -# CONFIG_TRACE_EVENT_INJECT is not set -# CONFIG_TRACEPOINT_BENCHMARK is not set -# CONFIG_RING_BUFFER_BENCHMARK is not set -# CONFIG_TRACE_EVAL_MAP_FILE is not set -# CONFIG_FTRACE_RECORD_RECURSION is not set -# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set -# CONFIG_FTRACE_STARTUP_TEST is not set -# CONFIG_FTRACE_SORT_STARTUP_TEST is not set -# CONFIG_RING_BUFFER_STARTUP_TEST is not set -# CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS is not set -# CONFIG_MMIOTRACE_TEST is not set -# CONFIG_PREEMPTIRQ_DELAY_TEST is not set -# CONFIG_SYNTH_EVENT_GEN_TEST is not set -# CONFIG_KPROBE_EVENT_GEN_TEST is not set -# CONFIG_HIST_TRIGGERS_DEBUG is not set -# CONFIG_RV is not set -# CONFIG_TRACE_REMOTE_TEST is not set -# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set -# CONFIG_SAMPLES is not set -CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y -CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y -CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y -CONFIG_STRICT_DEVMEM=y -CONFIG_IO_STRICT_DEVMEM=y - -# -# x86 Debugging -# -CONFIG_EARLY_PRINTK_USB=y -CONFIG_X86_VERBOSE_BOOTUP=y -CONFIG_EARLY_PRINTK=y -CONFIG_EARLY_PRINTK_DBGP=y -CONFIG_EARLY_PRINTK_USB_XDBC=y -# CONFIG_EFI_PGT_DUMP is not set -# CONFIG_DEBUG_TLBFLUSH is not set -CONFIG_HAVE_MMIOTRACE_SUPPORT=y -CONFIG_X86_DECODER_SELFTEST=y -CONFIG_IO_DELAY_0X80=y -# CONFIG_IO_DELAY_0XED is not set -# CONFIG_IO_DELAY_UDELAY is not set -# CONFIG_IO_DELAY_NONE is not set -CONFIG_DEBUG_BOOT_PARAMS=y -# CONFIG_CPA_DEBUG is not set -# CONFIG_DEBUG_ENTRY is not set -# CONFIG_DEBUG_NMI_SELFTEST is not set -# CONFIG_X86_DEBUG_FPU is not set -# CONFIG_PUNIT_ATOM_DEBUG is not set -CONFIG_UNWINDER_ORC=y -# CONFIG_UNWINDER_FRAME_POINTER is not set -# end of x86 Debugging - -# -# Kernel Testing and Coverage -# -# CONFIG_KUNIT is not set -# CONFIG_NOTIFIER_ERROR_INJECTION is not set -CONFIG_FUNCTION_ERROR_INJECTION=y -# CONFIG_FAULT_INJECTION is not set -CONFIG_ARCH_HAS_KCOV=y -# CONFIG_KCOV is not set -CONFIG_RUNTIME_TESTING_MENU=y -# CONFIG_TEST_DHRY is not set -# CONFIG_LKDTM is not set -# CONFIG_TEST_DIV64 is not set -# CONFIG_TEST_MULDIV64 is not set -# CONFIG_BACKTRACE_SELF_TEST is not set -# CONFIG_TEST_REF_TRACKER is not set -# CONFIG_RBTREE_TEST is not set -# CONFIG_REED_SOLOMON_TEST is not set -# CONFIG_INTERVAL_TREE_TEST is not set -# CONFIG_PERCPU_TEST is not set -# CONFIG_ATOMIC64_SELFTEST is not set -CONFIG_ASYNC_RAID6_TEST=m -# CONFIG_TEST_HEXDUMP is not set -# CONFIG_TEST_KSTRTOX is not set -# CONFIG_TEST_BITMAP is not set -# CONFIG_TEST_XARRAY is not set -# CONFIG_TEST_MAPLE_TREE is not set -# CONFIG_TEST_RHASHTABLE is not set -# CONFIG_TEST_IDA is not set -# CONFIG_TEST_PARMAN is not set -# CONFIG_TEST_LKM is not set -# CONFIG_TEST_BITOPS is not set -# CONFIG_TEST_VMALLOC is not set -# CONFIG_TEST_WORKQUEUE is not set -# CONFIG_TEST_BPF is not set -# CONFIG_FIND_BIT_BENCHMARK is not set -# CONFIG_TEST_FIRMWARE is not set -# CONFIG_TEST_SYSCTL is not set -# CONFIG_LIVEUPDATE_TEST is not set -# CONFIG_TEST_UDELAY is not set -# CONFIG_TEST_STATIC_KEYS is not set -# CONFIG_TEST_DYNAMIC_DEBUG is not set -# CONFIG_TEST_KMOD is not set -# CONFIG_TEST_KALLSYMS is not set -# CONFIG_TEST_MEMCAT_P is not set -# CONFIG_TEST_OBJAGG is not set -# CONFIG_TEST_MEMINIT is not set -# CONFIG_TEST_HMM is not set -# CONFIG_TEST_FREE_PAGES is not set -# CONFIG_TEST_FPU is not set -# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set -# CONFIG_TEST_OBJPOOL is not set -# CONFIG_TEST_KEXEC_HANDOVER is not set -CONFIG_ARCH_USE_MEMTEST=y -CONFIG_MEMTEST=y -# CONFIG_HYPERV_TESTING is not set -# end of Kernel Testing and Coverage - -# -# Rust hacking -# -# end of Rust hacking -# end of Kernel hacking - -CONFIG_IO_URING_ZCRX=y -CONFIG_IO_URING_BPF=y diff --git a/modules/nixos/boot/patches/0001-acpi-call.patch b/modules/nixos/boot/patches/0001-acpi-call.patch deleted file mode 100644 index a631b9f..0000000 --- a/modules/nixos/boot/patches/0001-acpi-call.patch +++ /dev/null @@ -1,506 +0,0 @@ -From b8928a98ce5f7beb440fc34bd0aee8bfd340eedc Mon Sep 17 00:00:00 2001 -From: Eric Naim -Date: Wed, 11 Feb 2026 01:38:45 +0800 -Subject: [PATCH] acpi-call - -Signed-off-by: Eric Naim ---- - drivers/platform/x86/Kconfig | 5 + - drivers/platform/x86/Makefile | 4 + - drivers/platform/x86/acpi_call.c | 449 +++++++++++++++++++++++++++++++ - 3 files changed, 458 insertions(+) - create mode 100644 drivers/platform/x86/acpi_call.c - -diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig -index 4cb7d97a9fcc..5bef98aa8ecb 100644 ---- a/drivers/platform/x86/Kconfig -+++ b/drivers/platform/x86/Kconfig -@@ -148,6 +148,11 @@ config ACER_WIRELESS - If you choose to compile this driver as a module the module will be - called acer-wireless. - -+config ACPI_CALL -+ tristate "acpi_call module" -+ help -+ This embeds acpi_call module into the kernel -+ - config ACER_WMI - tristate "Acer WMI Laptop Extras" - depends on BACKLIGHT_CLASS_DEVICE -diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile -index d25762f7114f..42134c481ef1 100644 ---- a/drivers/platform/x86/Makefile -+++ b/drivers/platform/x86/Makefile -@@ -4,9 +4,13 @@ - # x86 Platform-Specific Drivers - # - -+# ACPI Calls -+ - # Windows Management Interface - obj-$(CONFIG_WMI_BMOF) += wmi-bmof.o - -+obj-$(CONFIG_ACPI_CALL) += acpi_call.o -+ - # WMI drivers - obj-$(CONFIG_HUAWEI_WMI) += huawei-wmi.o - obj-$(CONFIG_MXM_WMI) += mxm-wmi.o -diff --git a/drivers/platform/x86/acpi_call.c b/drivers/platform/x86/acpi_call.c -new file mode 100644 -index 000000000000..d7bc238e16da ---- /dev/null -+++ b/drivers/platform/x86/acpi_call.c -@@ -0,0 +1,449 @@ -+/* Copyright (c) 2010: Michal Kottman */ -+ -+#define BUILDING_ACPICA -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0) -+#include -+#endif -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0) -+#include -+#else -+#include -+#endif -+ -+MODULE_LICENSE("GPL"); -+ -+/* Uncomment the following line to enable debug messages */ -+/* -+#define DEBUG -+*/ -+ -+#define BUFFER_SIZE 4096 -+#define INPUT_BUFFER_SIZE (2 * BUFFER_SIZE) -+#define MAX_ACPI_ARGS 16 -+ -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0) -+#define HAVE_PROC_CREATE -+#endif -+ -+extern struct proc_dir_entry *acpi_root_dir; -+ -+static char input_buffer[INPUT_BUFFER_SIZE]; -+static char result_buffer[BUFFER_SIZE]; -+static char not_called_message[11] = "not called"; -+ -+static u8 temporary_buffer[BUFFER_SIZE]; -+ -+static size_t get_avail_bytes(void) { -+ return BUFFER_SIZE - strlen(result_buffer); -+} -+static char *get_buffer_end(void) { -+ return result_buffer + strlen(result_buffer); -+} -+ -+/** Appends the contents of an acpi_object to the result buffer -+@param result An acpi object holding result data -+@returns 0 if the result could fully be saved, a higher value otherwise -+*/ -+static int acpi_result_to_string(union acpi_object *result) { -+ if (result->type == ACPI_TYPE_INTEGER) { -+ snprintf(get_buffer_end(), get_avail_bytes(), -+ "0x%x", (int)result->integer.value); -+ } else if (result->type == ACPI_TYPE_STRING) { -+ snprintf(get_buffer_end(), get_avail_bytes(), -+ "\"%*s\"", result->string.length, result->string.pointer); -+ } else if (result->type == ACPI_TYPE_BUFFER) { -+ int i; -+ // do not store more than data if it does not fit. The first element is -+ // just 4 chars, but there is also two bytes from the curly brackets -+ int show_values = min((size_t)result->buffer.length, get_avail_bytes() / 6); -+ -+ snprintf(get_buffer_end(), get_avail_bytes(), "{"); -+ for (i = 0; i < show_values; i++) -+ sprintf(get_buffer_end(), -+ i == 0 ? "0x%02x" : ", 0x%02x", result->buffer.pointer[i]); -+ -+ if (result->buffer.length > show_values) { -+ // if data was truncated, show a trailing comma if there is space -+ snprintf(get_buffer_end(), get_avail_bytes(), ","); -+ return 1; -+ } else { -+ // in case show_values == 0, but the buffer is too small to hold -+ // more values (i.e. the buffer cannot have anything more than "{") -+ snprintf(get_buffer_end(), get_avail_bytes(), "}"); -+ } -+ } else if (result->type == ACPI_TYPE_PACKAGE) { -+ int i; -+ snprintf(get_buffer_end(), get_avail_bytes(), "["); -+ for (i=0; ipackage.count; i++) { -+ if (i > 0) -+ snprintf(get_buffer_end(), get_avail_bytes(), ", "); -+ -+ // abort if there is no more space available -+ if (!get_avail_bytes() || acpi_result_to_string(&result->package.elements[i])) -+ return 1; -+ } -+ snprintf(get_buffer_end(), get_avail_bytes(), "]"); -+ } else { -+ snprintf(get_buffer_end(), get_avail_bytes(), -+ "Object type 0x%x\n", result->type); -+ } -+ -+ // return 0 if there are still bytes available, 1 otherwise -+ return !get_avail_bytes(); -+} -+ -+/** -+@param method The full name of ACPI method to call -+@param argc The number of parameters -+@param argv A pre-allocated array of arguments of type acpi_object -+*/ -+static void do_acpi_call(const char * method, int argc, union acpi_object *argv) -+{ -+ acpi_status status; -+ acpi_handle handle; -+ struct acpi_object_list arg; -+ struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; -+ -+#ifdef DEBUG -+ printk(KERN_INFO "acpi_call: Calling %s\n", method); -+#endif -+ -+ // get the handle of the method, must be a fully qualified path -+ status = acpi_get_handle(NULL, (acpi_string) method, &handle); -+ -+ if (ACPI_FAILURE(status)) -+ { -+ snprintf(result_buffer, BUFFER_SIZE, "Error: %s", acpi_format_exception(status)); -+ printk(KERN_ERR "acpi_call: Cannot get handle: %s\n", result_buffer); -+ return; -+ } -+ -+ // prepare parameters -+ arg.count = argc; -+ arg.pointer = argv; -+ -+ // call the method -+ status = acpi_evaluate_object(handle, NULL, &arg, &buffer); -+ if (ACPI_FAILURE(status)) -+ { -+ snprintf(result_buffer, BUFFER_SIZE, "Error: %s", acpi_format_exception(status)); -+ printk(KERN_ERR "acpi_call: Method call failed: %s\n", result_buffer); -+ return; -+ } -+ -+ // reset the result buffer -+ *result_buffer = '\0'; -+ acpi_result_to_string(buffer.pointer); -+ kfree(buffer.pointer); -+ -+#ifdef DEBUG -+ printk(KERN_INFO "acpi_call: Call successful: %s\n", result_buffer); -+#endif -+} -+ -+/** Decodes 2 hex characters to an u8 int -+*/ -+u8 decodeHex(char *hex) { -+ char buf[3] = { hex[0], hex[1], 0}; -+ return (u8) simple_strtoul(buf, NULL, 16); -+} -+ -+/** Parses method name and arguments -+@param input Input string to be parsed. Modified in the process. -+@param nargs Set to number of arguments parsed (output) -+@param args -+*/ -+static char *parse_acpi_args(char *input, int *nargs, union acpi_object **args) -+{ -+ char *s = input; -+ int i; -+ -+ *nargs = 0; -+ *args = NULL; -+ -+ // the method name is separated from the arguments by a space -+ while (*s && *s != ' ') -+ s++; -+ // if no space is found, return 0 arguments -+ if (*s == 0) -+ return input; -+ -+ *args = (union acpi_object *) kmalloc(MAX_ACPI_ARGS * sizeof(union acpi_object), GFP_KERNEL); -+ if (!*args) { -+ printk(KERN_ERR "acpi_call: unable to allocate buffer\n"); -+ return NULL; -+ } -+ -+ while (*s) { -+ if (*s == ' ') { -+ if (*nargs == 0) -+ *s = 0; // change first space to nul -+ ++ *nargs; -+ ++ s; -+ } else { -+ union acpi_object *arg = (*args) + (*nargs - 1); -+ if (*s == '"') { -+ // decode string -+ arg->type = ACPI_TYPE_STRING; -+ arg->string.pointer = ++s; -+ arg->string.length = 0; -+ while (*s && *s++ != '"') -+ arg->string.length ++; -+ // skip the last " -+ if (*s == '"') -+ ++s; -+ } else if (*s == 'b') { -+ // decode buffer - bXXXX -+ char *p = ++s; -+ int len = 0, i; -+ u8 *buf = NULL; -+ -+ while (*p && *p!=' ') -+ p++; -+ -+ len = p - s; -+ if (len % 2 == 1) { -+ printk(KERN_ERR "acpi_call: buffer arg%d is not multiple of 8 bits\n", *nargs); -+ --*nargs; -+ goto err; -+ } -+ len /= 2; -+ -+ buf = (u8*) kmalloc(len, GFP_KERNEL); -+ if (!buf) { -+ printk(KERN_ERR "acpi_call: unable to allocate buffer\n"); -+ --*nargs; -+ goto err; -+ } -+ for (i=0; itype = ACPI_TYPE_BUFFER; -+ arg->buffer.pointer = buf; -+ arg->buffer.length = len; -+ } else if (*s == '{') { -+ // decode buffer - { b1, b2 ...} -+ u8 *buf = temporary_buffer; -+ arg->type = ACPI_TYPE_BUFFER; -+ arg->buffer.pointer = buf; -+ arg->buffer.length = 0; -+ while (*s && *s++ != '}') { -+ if (buf >= temporary_buffer + sizeof(temporary_buffer)) { -+ printk(KERN_ERR "acpi_call: buffer arg%d is truncated because the buffer is full\n", *nargs); -+ // clear remaining arguments -+ while (*s && *s != '}') -+ ++s; -+ break; -+ } -+ else if (*s >= '0' && *s <= '9') { -+ // decode integer into buffer -+ arg->buffer.length ++; -+ if (s[0] == '0' && s[1] == 'x') -+ *buf++ = simple_strtol(s+2, 0, 16); -+ else -+ *buf++ = simple_strtol(s, 0, 10); -+ } -+ // skip until space or comma or '}' -+ while (*s && *s != ' ' && *s != ',' && *s != '}') -+ ++s; -+ } -+ // store the result in new allocated buffer -+ buf = (u8*) kmalloc(arg->buffer.length, GFP_KERNEL); -+ if (!buf) { -+ printk(KERN_ERR "acpi_call: unable to allocate buffer\n"); -+ --*nargs; -+ goto err; -+ } -+ memcpy(buf, temporary_buffer, arg->buffer.length); -+ arg->buffer.pointer = buf; -+ } else { -+ // decode integer, N or 0xN -+ arg->type = ACPI_TYPE_INTEGER; -+ if (s[0] == '0' && s[1] == 'x') { -+ arg->integer.value = simple_strtol(s+2, 0, 16); -+ } else { -+ arg->integer.value = simple_strtol(s, 0, 10); -+ } -+ while (*s && *s != ' ') { -+ ++s; -+ } -+ } -+ } -+ } -+ -+ return input; -+ -+err: -+ for (i=0; i<*nargs; i++) -+ if ((*args)[i].type == ACPI_TYPE_BUFFER && (*args)[i].buffer.pointer) -+ kfree((*args)[i].buffer.pointer); -+ kfree(*args); -+ return NULL; -+} -+ -+/** procfs write callback. Called when writing into /proc/acpi/call. -+*/ -+#ifdef HAVE_PROC_CREATE -+static ssize_t acpi_proc_write( struct file *filp, const char __user *buff, -+ size_t len, loff_t *data ) -+#else -+static int acpi_proc_write( struct file *filp, const char __user *buff, -+ unsigned long len, void *data ) -+#endif -+{ -+ union acpi_object *args; -+ int nargs, i; -+ char *method; -+ -+ memset(input_buffer, 0, INPUT_BUFFER_SIZE); -+ if (len > sizeof(input_buffer) - 1) { -+#ifdef HAVE_PROC_CREATE -+ printk(KERN_ERR "acpi_call: Input too long! (%zu)\n", len); -+#else -+ printk(KERN_ERR "acpi_call: Input too long! (%lu)\n", len); -+#endif -+ return -ENOSPC; -+ } -+ -+ if (copy_from_user( input_buffer, buff, len )) { -+ return -EFAULT; -+ } -+ input_buffer[len] = '\0'; -+ if (input_buffer[len-1] == '\n') -+ input_buffer[len-1] = '\0'; -+ -+ method = parse_acpi_args(input_buffer, &nargs, &args); -+ if (method) { -+ do_acpi_call(method, nargs, args); -+ if (args) { -+ for (i=0; i count) { -+ // user buffer is too small -+ ret = 0; -+ } else if(*off == len + 1) { -+ // we're done -+ ret = 0; -+ result_buffer[0] = '\0'; -+ } else { -+ // output the current result buffer -+ ret = simple_read_from_buffer(buff, count, off, result_buffer, len + 1); -+ *off = ret; -+ } -+ -+ return ret; -+} -+ -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0) -+static struct proc_ops proc_acpi_operations = { -+ .proc_read = acpi_proc_read, -+ .proc_write = acpi_proc_write, -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 13, 0) -+ .proc_lseek = default_llseek, -+#endif -+}; -+#else -+static struct file_operations proc_acpi_operations = { -+ .owner = THIS_MODULE, -+ .read = acpi_proc_read, -+ .write = acpi_proc_write, -+}; -+#endif -+ -+#else -+static int acpi_proc_read(char *page, char **start, off_t off, -+ int count, int *eof, void *data) -+{ -+ int len = 0; -+ -+ if (off > 0) { -+ *eof = 1; -+ return 0; -+ } -+ -+ // output the current result buffer -+ len = strlen(result_buffer); -+ memcpy(page, result_buffer, len + 1); -+ -+ // initialize the result buffer for later -+ strcpy(result_buffer, "not called"); -+ -+ return len; -+} -+#endif -+ -+/** module initialization function */ -+static int __init init_acpi_call(void) -+{ -+#ifdef HAVE_PROC_CREATE -+ struct proc_dir_entry *acpi_entry = proc_create("call", -+ 0660, -+ acpi_root_dir, -+ &proc_acpi_operations); -+#else -+ struct proc_dir_entry *acpi_entry = create_proc_entry("call", 0660, acpi_root_dir); -+#endif -+ -+ strcpy(result_buffer, "not called"); -+ -+ if (acpi_entry == NULL) { -+ printk(KERN_ERR "acpi_call: Couldn't create proc entry\n"); -+ return -ENOMEM; -+ } -+ -+#ifndef HAVE_PROC_CREATE -+ acpi_entry->write_proc = acpi_proc_write; -+ acpi_entry->read_proc = acpi_proc_read; -+#endif -+ -+#ifdef DEBUG -+ printk(KERN_INFO "acpi_call: Module loaded successfully\n"); -+#endif -+ -+ return 0; -+} -+ -+static void __exit unload_acpi_call(void) -+{ -+ remove_proc_entry("call", acpi_root_dir); -+ -+#ifdef DEBUG -+ printk(KERN_INFO "acpi_call: Module unloaded successfully\n"); -+#endif -+} -+ -+module_init(init_acpi_call); -+module_exit(unload_acpi_call); -\ No newline at end of file --- -2.53.0 - diff --git a/modules/nixos/boot/patches/0001-clang-polly.patch b/modules/nixos/boot/patches/0001-clang-polly.patch deleted file mode 100644 index 1bbdcf9..0000000 --- a/modules/nixos/boot/patches/0001-clang-polly.patch +++ /dev/null @@ -1,156 +0,0 @@ -From 836c16fbbd981fcf4f6b39faad2e7e7be13d5434 Mon Sep 17 00:00:00 2001 -From: Peter Jung -Date: Thu, 12 Dec 2024 17:28:45 +0100 -Subject: [PATCH 1/3] kbuild: Add support for Clang's polyhedral loop - optimizer. - -Polly is able to optimize various loops throughout the kernel for cache -locality. A mathematical representation of the program, based on -polyhedra, is analysed to find opportunistic optimisations in memory -access patterns which then leads to loop transformations. - -Polly is not built with LLVM by default, and requires LLVM to be compiled -with the Polly "project". This can be done by adding Polly to --DLLVM_ENABLE_PROJECTS, for example: - --DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;polly" - -Preliminary benchmarking seems to show an improvement of around two -percent across perf benchmarks: - -Benchmark | Control | Polly --------------------------------------------------------- -bonnie++ -x 2 -s 4096 -r 0 | 12.610s | 12.547s -perf bench futex requeue | 33.553s | 33.094s -perf bench futex wake | 1.032s | 1.021s -perf bench futex wake-parallel | 1.049s | 1.025s -perf bench futex requeue | 1.037s | 1.020s - -Furthermore, Polly does not produce a much larger image size netting it -to be a "free" optimisation. A comparison of a bzImage for a kernel with -and without Polly is shown below: - -bzImage | stat --printf="%s\n" -------------------------------------- -Control | 9333728 -Polly | 9345792 - -Compile times were one percent different at best, which is well within -the range of noise. Therefore, I can say with certainty that Polly has -a minimal effect on compile times, if none. - -Signed-off-by: Peter Jung ---- - Makefile | 16 ++++++++++++++++ - init/Kconfig | 13 +++++++++++++ - 2 files changed, 29 insertions(+) - -diff --git a/Makefile b/Makefile -index 64c594bd7..5f0cb6238 100644 ---- a/Makefile -+++ b/Makefile -@@ -870,6 +870,22 @@ endif - KBUILD_RUSTFLAGS += -Cdebug-assertions=$(if $(CONFIG_RUST_DEBUG_ASSERTIONS),y,n) - KBUILD_RUSTFLAGS += -Coverflow-checks=$(if $(CONFIG_RUST_OVERFLOW_CHECKS),y,n) - -+ifdef CONFIG_POLLY_CLANG -+KBUILD_CFLAGS += -mllvm -polly \ -+ -mllvm -polly-ast-use-context \ -+ -mllvm -polly-invariant-load-hoisting \ -+ -mllvm -polly-opt-fusion=max \ -+ -mllvm -polly-run-inliner \ -+ -mllvm -polly-vectorizer=stripmine -+# Polly may optimise loops with dead paths beyound what the linker -+# can understand. This may negate the effect of the linker's DCE -+# so we tell Polly to perfom proven DCE on the loops it optimises -+# in order to preserve the overall effect of the linker's DCE. -+ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION -+KBUILD_CFLAGS += -mllvm -polly-run-dce -+endif -+endif -+ - # Tell gcc to never replace conditional load with a non-conditional one - ifdef CONFIG_CC_IS_GCC - # gcc-10 renamed --param=allow-store-data-races=0 to -diff --git a/init/Kconfig b/init/Kconfig -index a20e6efd3..66adb2fc9 100644 ---- a/init/Kconfig -+++ b/init/Kconfig -@@ -251,6 +251,19 @@ config BUILD_SALT - This is mostly useful for distributions which want to ensure the - build is unique between builds. It's safe to leave the default. - -+config POLLY_CLANG -+ bool "Use Clang Polly optimizations" -+ depends on CC_IS_CLANG && $(cc-option,-mllvm -polly -fplugin=LLVMPolly.so) -+ depends on !COMPILE_TEST -+ help -+ This option enables Clang's polyhedral loop optimizer known as -+ Polly. Polly is able to optimize various loops throughout the -+ kernel for cache locality. This requires a Clang toolchain -+ compiled with support for Polly. More information can be found -+ from Polly's website: -+ -+ https://polly.llvm.org -+ - config HAVE_KERNEL_GZIP - bool - --- -2.47.1 - - -From 8b5347cd5e745e8d0a68b28e55b48c62e6c0c513 Mon Sep 17 00:00:00 2001 -From: Username404-59 -Date: Thu, 12 Dec 2024 21:25:40 +0100 -Subject: [PATCH 2/3] kbuild: Update old polly option - -Signed-off-by: Username404-59 ---- - Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index 5f0cb6238..fa433f1d9 100644 ---- a/Makefile -+++ b/Makefile -@@ -874,7 +874,7 @@ ifdef CONFIG_POLLY_CLANG - KBUILD_CFLAGS += -mllvm -polly \ - -mllvm -polly-ast-use-context \ - -mllvm -polly-invariant-load-hoisting \ -- -mllvm -polly-opt-fusion=max \ -+ -mllvm -polly-loopfusion-greedy \ - -mllvm -polly-run-inliner \ - -mllvm -polly-vectorizer=stripmine - # Polly may optimise loops with dead paths beyound what the linker --- -2.47.1 - - -From 562335afe34f24f9940d198d536e941e326a9716 Mon Sep 17 00:00:00 2001 -From: Username404-59 -Date: Thu, 12 Dec 2024 21:41:01 +0100 -Subject: [PATCH 3/3] kbuild: load polly llvm plugin - -Signed-off-by: Username404-59 ---- - Makefile | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index fa433f1d9..e8737f5ea 100644 ---- a/Makefile -+++ b/Makefile -@@ -871,7 +871,8 @@ KBUILD_RUSTFLAGS += -Cdebug-assertions=$(if $(CONFIG_RUST_DEBUG_ASSERTIONS),y,n) - KBUILD_RUSTFLAGS += -Coverflow-checks=$(if $(CONFIG_RUST_OVERFLOW_CHECKS),y,n) - - ifdef CONFIG_POLLY_CLANG --KBUILD_CFLAGS += -mllvm -polly \ -+KBUILD_CFLAGS += -fplugin=LLVMPolly.so \ -+ -mllvm -polly \ - -mllvm -polly-ast-use-context \ - -mllvm -polly-invariant-load-hoisting \ - -mllvm -polly-loopfusion-greedy \ --- -2.47.1 - diff --git a/modules/nixos/boot/patches/0001-prjc-cachy-lfbmq.patch b/modules/nixos/boot/patches/0001-prjc-cachy-lfbmq.patch deleted file mode 100644 index 0744114..0000000 --- a/modules/nixos/boot/patches/0001-prjc-cachy-lfbmq.patch +++ /dev/null @@ -1,11586 +0,0 @@ -From c4dc19c67ce41b5f43b349ea1f4ced963cb4f6e4 Mon Sep 17 00:00:00 2001 -From: Piotr Gorski -Date: Tue, 30 Jun 2026 12:14:48 +0200 -Subject: [PATCH] prjc-cachy-lfbmq - -Signed-off-by: Piotr Gorski ---- - Documentation/admin-guide/sysctl/kernel.rst | 9 + - Documentation/scheduler/sched-BMQ.txt | 110 + - fs/f2fs/checkpoint.c | 2 +- - fs/proc/base.c | 2 +- - include/linux/rseq_entry.h | 3 + - include/linux/sched.h | 79 + - include/linux/sched/deadline.h | 20 + - include/linux/sched/nohz.h | 2 +- - include/linux/sched/prio.h | 22 + - include/linux/sched/rt.h | 2 + - include/linux/sched/topology.h | 3 +- - init/Kconfig | 30 +- - init/init_task.c | 21 + - kernel/Kconfig.preempt | 4 +- - kernel/cgroup/cpuset.c | 14 +- - kernel/delayacct.c | 2 +- - kernel/exit.c | 6 +- - kernel/locking/rtmutex.c | 16 +- - kernel/locking/ww_mutex.h | 2 + - kernel/sched/Makefile | 5 + - kernel/sched/alt_core.c | 7354 +++++++++++++++++++ - kernel/sched/alt_core.h | 290 + - kernel/sched/alt_debug.c | 32 + - kernel/sched/alt_sched.h | 1001 +++ - kernel/sched/alt_topology.c | 389 + - kernel/sched/bmq.h | 84 + - kernel/sched/build_policy.c | 8 +- - kernel/sched/build_utility.c | 6 +- - kernel/sched/cpufreq_schedutil.c | 12 +- - kernel/sched/cputime.c | 12 +- - kernel/sched/debug.c | 20 + - kernel/sched/idle.c | 11 +- - kernel/sched/loadavg.c | 14 +- - kernel/sched/pds.h | 139 + - kernel/sched/pelt.c | 6 +- - kernel/sched/pelt.h | 6 +- - kernel/sched/sched.h | 9 + - kernel/sched/stats.c | 4 + - kernel/sched/stats.h | 2 + - kernel/sched/syscalls.c | 156 +- - kernel/sched/topology.c | 42 + - kernel/sysctl.c | 15 + - kernel/time/posix-cpu-timers.c | 10 +- - kernel/trace/trace_osnoise.c | 4 + - kernel/trace/trace_selftest.c | 5 + - kernel/workqueue.c | 15 + - 46 files changed, 9957 insertions(+), 43 deletions(-) - create mode 100644 Documentation/scheduler/sched-BMQ.txt - create mode 100644 kernel/sched/alt_core.c - create mode 100644 kernel/sched/alt_core.h - create mode 100644 kernel/sched/alt_debug.c - create mode 100644 kernel/sched/alt_sched.h - create mode 100644 kernel/sched/alt_topology.c - create mode 100644 kernel/sched/bmq.h - create mode 100644 kernel/sched/pds.h - -diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/admin-guide/sysctl/kernel.rst -index c6994e55d..cf28e5f29 100644 ---- a/Documentation/admin-guide/sysctl/kernel.rst -+++ b/Documentation/admin-guide/sysctl/kernel.rst -@@ -1734,3 +1734,12 @@ is 10 seconds. - - The softlockup threshold is (``2 * watchdog_thresh``). Setting this - tunable to zero will disable lockup detection altogether. -+ -+yield_type: -+=========== -+ -+BMQ/PDS CPU scheduler only. This determines what type of yield calls -+to sched_yield() will be performed. -+ -+ 0 - No yield. -+ 1 - Requeue task. (default) -diff --git a/Documentation/scheduler/sched-BMQ.txt b/Documentation/scheduler/sched-BMQ.txt -new file mode 100644 -index 000000000..05c84eec0 ---- /dev/null -+++ b/Documentation/scheduler/sched-BMQ.txt -@@ -0,0 +1,110 @@ -+ BitMap queue CPU Scheduler -+ -------------------------- -+ -+CONTENT -+======== -+ -+ Background -+ Design -+ Overview -+ Task policy -+ Priority management -+ BitMap Queue -+ CPU Assignment and Migration -+ -+ -+Background -+========== -+ -+BitMap Queue CPU scheduler, referred to as BMQ from here on, is an evolution -+of previous Priority and Deadline based Skiplist multiple queue scheduler(PDS), -+and inspired by Zircon scheduler. The goal of it is to keep the scheduler code -+simple, while efficiency and scalable for interactive tasks, such as desktop, -+movie playback and gaming etc. -+ -+Design -+====== -+ -+Overview -+-------- -+ -+BMQ use per CPU run queue design, each CPU(logical) has it's own run queue, -+each CPU is responsible for scheduling the tasks that are putting into it's -+run queue. -+ -+The run queue is a set of priority queues. Note that these queues are fifo -+queue for non-rt tasks or priority queue for rt tasks in data structure. See -+BitMap Queue below for details. BMQ is optimized for non-rt tasks in the fact -+that most applications are non-rt tasks. No matter the queue is fifo or -+priority, In each queue is an ordered list of runnable tasks awaiting execution -+and the data structures are the same. When it is time for a new task to run, -+the scheduler simply looks the lowest numbered queueue that contains a task, -+and runs the first task from the head of that queue. And per CPU idle task is -+also in the run queue, so the scheduler can always find a task to run on from -+its run queue. -+ -+Each task will assigned the same timeslice(default 4ms) when it is picked to -+start running. Task will be reinserted at the end of the appropriate priority -+queue when it uses its whole timeslice. When the scheduler selects a new task -+from the priority queue it sets the CPU's preemption timer for the remainder of -+the previous timeslice. When that timer fires the scheduler will stop execution -+on that task, select another task and start over again. -+ -+If a task blocks waiting for a shared resource then it's taken out of its -+priority queue and is placed in a wait queue for the shared resource. When it -+is unblocked it will be reinserted in the appropriate priority queue of an -+eligible CPU. -+ -+Task policy -+----------- -+ -+BMQ supports DEADLINE, FIFO, RR, NORMAL, BATCH and IDLE task policy like the -+mainline CFS scheduler. But BMQ is heavy optimized for non-rt task, that's -+NORMAL/BATCH/IDLE policy tasks. Below is the implementation detail of each -+policy. -+ -+DEADLINE -+ It is squashed as priority 0 FIFO task. -+ -+FIFO/RR -+ All RT tasks share one single priority queue in BMQ run queue designed. The -+complexity of insert operation is O(n). BMQ is not designed for system runs -+with major rt policy tasks. -+ -+NORMAL/BATCH/IDLE -+ BATCH and IDLE tasks are treated as the same policy. They compete CPU with -+NORMAL policy tasks, but they just don't boost. To control the priority of -+NORMAL/BATCH/IDLE tasks, simply use nice level. -+ -+ISO -+ ISO policy is not supported in BMQ. Please use nice level -20 NORMAL policy -+task instead. -+ -+Priority management -+------------------- -+ -+RT tasks have priority from 0-99. For non-rt tasks, there are three different -+factors used to determine the effective priority of a task. The effective -+priority being what is used to determine which queue it will be in. -+ -+The first factor is simply the task’s static priority. Which is assigned from -+task's nice level, within [-20, 19] in userland's point of view and [0, 39] -+internally. -+ -+The second factor is the priority boost. This is a value bounded between -+[-MAX_PRIORITY_ADJ, MAX_PRIORITY_ADJ] used to offset the base priority, it is -+modified by the following cases: -+ -+*When a thread has used up its entire timeslice, always deboost its boost by -+increasing by one. -+*When a thread gives up cpu control(voluntary or non-voluntary) to reschedule, -+and its switch-in time(time after last switch and run) below the thredhold -+based on its priority boost, will boost its boost by decreasing by one buti is -+capped at 0 (won’t go negative). -+ -+The intent in this system is to ensure that interactive threads are serviced -+quickly. These are usually the threads that interact directly with the user -+and cause user-perceivable latency. These threads usually do little work and -+spend most of their time blocked awaiting another user event. So they get the -+priority boost from unblocking while background threads that do most of the -+processing receive the priority penalty for using their entire timeslice. -diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c -index c00a6b6eb..0fa976ca0 100644 ---- a/fs/f2fs/checkpoint.c -+++ b/fs/f2fs/checkpoint.c -@@ -28,7 +28,7 @@ static inline void get_lock_elapsed_time(struct f2fs_time_stat *ts) - { - ts->total_time = ktime_get(); - #ifdef CONFIG_64BIT -- ts->running_time = current->se.sum_exec_runtime; -+ ts->running_time = tsk_seruntime(current); - #endif - #if defined(CONFIG_SCHED_INFO) && defined(CONFIG_SCHEDSTATS) - ts->runnable_time = current->sched_info.run_delay; -diff --git a/fs/proc/base.c b/fs/proc/base.c -index d9acfa89c..61a7726c5 100644 ---- a/fs/proc/base.c -+++ b/fs/proc/base.c -@@ -515,7 +515,7 @@ static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns, - seq_puts(m, "0 0 0\n"); - else - seq_printf(m, "%llu %llu %lu\n", -- (unsigned long long)task->se.sum_exec_runtime, -+ (unsigned long long)tsk_seruntime(task), - (unsigned long long)task->sched_info.run_delay, - task->sched_info.pcount); - -diff --git a/include/linux/rseq_entry.h b/include/linux/rseq_entry.h -index ed9da6e41..4ad444d63 100644 ---- a/include/linux/rseq_entry.h -+++ b/include/linux/rseq_entry.h -@@ -729,7 +729,10 @@ static __always_inline void rseq_syscall_exit_to_user_mode(void) - - /* Needed to remove the store for the !lockdep case */ - if (IS_ENABLED(CONFIG_LOCKDEP)) { -+#ifndef CONFIG_SCHED_ALT -+/* WA for sched/alt: [Sync] 9a723ed7facf sched/mmcid: Provide new scheduler CID mechanism */ - WARN_ON_ONCE(ev->sched_switch); -+#endif /* !CONFIG_SCHED_ALT */ - ev->events = 0; - } - } -diff --git a/include/linux/sched.h b/include/linux/sched.h -index f9c0b4724..cddd46432 100644 ---- a/include/linux/sched.h -+++ b/include/linux/sched.h -@@ -847,7 +847,9 @@ struct task_struct { - #endif - - int on_cpu; -+ - struct __call_single_node wake_entry; -+#ifndef CONFIG_SCHED_ALT - unsigned int wakee_flips; - unsigned long wakee_flip_decay_ts; - struct task_struct *last_wakee; -@@ -860,6 +862,7 @@ struct task_struct { - * used CPU that may be idle. - */ - int recent_used_cpu; -+#endif /* !CONFIG_SCHED_ALT */ - int wake_cpu; - int on_rq; - -@@ -868,6 +871,20 @@ struct task_struct { - int normal_prio; - unsigned int rt_priority; - -+#ifdef CONFIG_SCHED_ALT -+ u64 last_ran; -+ s64 time_slice; -+ struct llist_node pq_node; -+ int __sched_prio; -+#ifdef CONFIG_SCHED_BMQ -+ int boost_prio; -+#endif /* CONFIG_SCHED_BMQ */ -+#ifdef CONFIG_SCHED_PDS -+ u64 deadline; -+#endif /* CONFIG_SCHED_PDS */ -+ /* sched_clock time spent running */ -+ u64 sched_time; -+#else /* !CONFIG_SCHED_ALT */ - struct sched_entity se; - struct sched_rt_entity rt; - struct sched_dl_entity dl; -@@ -882,6 +899,7 @@ struct task_struct { - unsigned long core_cookie; - unsigned int core_occupation; - #endif -+#endif /* !CONFIG_SCHED_ALT */ - - #ifdef CONFIG_CGROUP_SCHED - struct task_group *sched_task_group; -@@ -923,9 +941,13 @@ struct task_struct { - const cpumask_t *cpus_ptr; - cpumask_t *user_cpus_ptr; - cpumask_t cpus_mask; -+#ifndef CONFIG_SCHED_ALT - void *migration_pending; -+#endif - unsigned short migration_disabled; -+#ifndef CONFIG_SCHED_ALT - unsigned short migration_flags; -+#endif - - #ifdef CONFIG_PREEMPT_RCU - int rcu_read_lock_nesting; -@@ -956,8 +978,10 @@ struct task_struct { - struct sched_info sched_info; - - struct list_head tasks; -+#ifndef CONFIG_SCHED_ALT - struct plist_node pushable_tasks; - struct rb_node pushable_dl_tasks; -+#endif - - struct mm_struct *mm; - struct mm_struct *active_mm; -@@ -1670,6 +1694,15 @@ static inline bool sched_proxy_exec(void) - } - #endif - -+#ifdef CONFIG_SCHED_ALT -+#define tsk_seruntime(t) ((t)->sched_time) -+/* replace the uncertian rt_timeout with 0UL */ -+#define tsk_rttimeout(t) (0UL) -+#else /* !CONFIG_SCHED_ALT: */ -+#define tsk_seruntime(t) ((t)->se.sum_exec_runtime) -+#define tsk_rttimeout(t) ((t)->rt.timeout) -+#endif /* !CONFIG_SCHED_ALT */ -+ - #define TASK_REPORT_IDLE (TASK_REPORT + 1) - #define TASK_REPORT_MAX (TASK_REPORT_IDLE << 1) - -@@ -2302,7 +2335,9 @@ static inline unsigned int task_cpu(const struct task_struct *p) - return READ_ONCE(task_thread_info(p)->cpu); - } - -+#ifndef CONFIG_SCHED_ALT - extern void set_task_cpu(struct task_struct *p, unsigned int cpu); -+#endif - - #else - -@@ -2319,7 +2354,11 @@ static inline void set_task_cpu(struct task_struct *p, unsigned int cpu) - - static inline bool task_is_runnable(struct task_struct *p) - { -+#ifdef CONFIG_SCHED_ALT -+ return p->on_rq; -+#else - return p->on_rq && !p->se.sched_delayed; -+#endif /* !CONFIG_SCHED_ALT */ - } - - extern bool sched_task_on_rq(struct task_struct *p); -@@ -2440,6 +2479,25 @@ DECLARE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); - #endif - #define this_rq_pinned() (*(unsigned int *)((void *)this_rq_raw() + RQ_nr_pinned)) - -+static inline void -+__do_set_cpus_ptr(struct task_struct *p, const struct cpumask *new_mask) -+{ -+ /* -+ * This here violates the locking rules for affinity, since we're only -+ * supposed to change these variables while holding both rq->lock and -+ * p->pi_lock. -+ * -+ * HOWEVER, it magically works, because ttwu() is the only code that -+ * accesses these variables under p->pi_lock and only does so after -+ * smp_cond_load_acquire(&p->on_cpu, !VAL), and we're in __schedule() -+ * before finish_task(). -+ * -+ * XXX do further audits, this smells like something putrid. -+ */ -+ WARN_ON_ONCE(!p->on_cpu); -+ p->cpus_ptr = new_mask; -+} -+ - static inline void __migrate_enable(void) - { - struct task_struct *p = current; -@@ -2463,8 +2521,17 @@ static inline void __migrate_enable(void) - * __set_cpus_allowed_ptr(SCA_MIGRATE_ENABLE) doesn't schedule(). - */ - guard(preempt)(); -+#ifdef CONFIG_SCHED_ALT -+ /* -+ * Assumption: current should be running on allowed cpu -+ */ -+ WARN_ON_ONCE(!cpumask_test_cpu(smp_processor_id(), &p->cpus_mask)); -+ if (p->cpus_ptr != &p->cpus_mask) -+ __do_set_cpus_ptr(p, &p->cpus_mask); -+#else - if (unlikely(p->cpus_ptr != &p->cpus_mask)) - ___migrate_enable(); -+#endif - /* - * Mustn't clear migration_disabled() until cpus_ptr points back at the - * regular cpus_mask, otherwise things that race (eg. -@@ -2491,8 +2558,20 @@ static inline void __migrate_disable(void) - } - - guard(preempt)(); -+#ifdef CONFIG_SCHED_ALT -+ int cpu = smp_processor_id(); -+ if (cpumask_test_cpu(cpu, &p->cpus_mask)) { -+#endif - this_rq_pinned()++; - p->migration_disabled = 1; -+#ifdef CONFIG_SCHED_ALT -+ /* -+ * Violates locking rules! see comment in __do_set_cpus_ptr(). -+ */ -+ if (p->cpus_ptr == &p->cpus_mask) -+ __do_set_cpus_ptr(p, cpumask_of(cpu)); -+ } -+#endif - } - #else /* !COMPILE_OFFSETS */ - static inline void __migrate_disable(void) { } -diff --git a/include/linux/sched/deadline.h b/include/linux/sched/deadline.h -index 273538200..12b41502a 100644 ---- a/include/linux/sched/deadline.h -+++ b/include/linux/sched/deadline.h -@@ -2,6 +2,25 @@ - #ifndef _LINUX_SCHED_DEADLINE_H - #define _LINUX_SCHED_DEADLINE_H - -+#ifdef CONFIG_SCHED_ALT -+ -+static inline int dl_task(struct task_struct *p) -+{ -+ return 0; -+} -+ -+#ifdef CONFIG_SCHED_BMQ -+#define __tsk_deadline(p) (0UL) -+#endif -+ -+#ifdef CONFIG_SCHED_PDS -+#define __tsk_deadline(p) ((((u64) ((p)->prio))<<56) | (p)->deadline) -+#endif -+ -+#else -+ -+#define __tsk_deadline(p) ((p)->dl.deadline) -+ - /* - * SCHED_DEADLINE tasks has negative priorities, reflecting - * the fact that any of them has higher prio than RT and -@@ -72,5 +91,6 @@ static inline bool dl_is_implicit(struct sched_dl_entity *dl_se) - { - return dl_se->dl_deadline == dl_se->dl_period; - } -+#endif /* !CONFIG_SCHED_ALT */ - - #endif /* _LINUX_SCHED_DEADLINE_H */ -diff --git a/include/linux/sched/nohz.h b/include/linux/sched/nohz.h -index 0db7f6793..4352cd9c5 100644 ---- a/include/linux/sched/nohz.h -+++ b/include/linux/sched/nohz.h -@@ -13,7 +13,7 @@ extern int get_nohz_timer_target(void); - static inline void nohz_balance_enter_idle(int cpu) { } - #endif - --#ifdef CONFIG_NO_HZ_COMMON -+#if defined(CONFIG_NO_HZ_COMMON) && !defined(CONFIG_SCHED_ALT) - void calc_load_nohz_start(void); - void calc_load_nohz_remote(struct rq *rq); - void calc_load_nohz_stop(void); -diff --git a/include/linux/sched/prio.h b/include/linux/sched/prio.h -index 6ab43b4f7..ef1cff556 100644 ---- a/include/linux/sched/prio.h -+++ b/include/linux/sched/prio.h -@@ -19,6 +19,28 @@ - #define MAX_PRIO (MAX_RT_PRIO + NICE_WIDTH) - #define DEFAULT_PRIO (MAX_RT_PRIO + NICE_WIDTH / 2) - -+#ifdef CONFIG_SCHED_ALT -+ -+/* Undefine MAX_PRIO and DEFAULT_PRIO */ -+#undef MAX_PRIO -+#undef DEFAULT_PRIO -+ -+/* +/- priority levels from the base priority */ -+#ifdef CONFIG_SCHED_BMQ -+#define MAX_PRIORITY_ADJ (12) -+#endif -+ -+#ifdef CONFIG_SCHED_PDS -+#define MAX_PRIORITY_ADJ (0) -+#endif -+ -+#define MIN_NORMAL_PRIO (128) -+#define NORMAL_PRIO_NUM (64) -+#define MAX_PRIO (MIN_NORMAL_PRIO + NORMAL_PRIO_NUM) -+#define DEFAULT_PRIO (MAX_PRIO - MAX_PRIORITY_ADJ - NICE_WIDTH / 2) -+ -+#endif /* CONFIG_SCHED_ALT */ -+ - /* - * Convert user-nice values [ -20 ... 0 ... 19 ] - * to static priority [ MAX_RT_PRIO..MAX_PRIO-1 ], -diff --git a/include/linux/sched/rt.h b/include/linux/sched/rt.h -index 4e3338103..6dfef878f 100644 ---- a/include/linux/sched/rt.h -+++ b/include/linux/sched/rt.h -@@ -45,8 +45,10 @@ static inline bool rt_or_dl_task_policy(struct task_struct *tsk) - - if (policy == SCHED_FIFO || policy == SCHED_RR) - return true; -+#ifndef CONFIG_SCHED_ALT - if (policy == SCHED_DEADLINE) - return true; -+#endif - return false; - } - -diff --git a/include/linux/sched/topology.h b/include/linux/sched/topology.h -index 35c9c37a0..89c67556b 100644 ---- a/include/linux/sched/topology.h -+++ b/include/linux/sched/topology.h -@@ -248,7 +248,8 @@ extern void sched_update_asym_prefer_cpu(int cpu, int old_prio, int new_prio); - #define SDTL_INIT(maskfn, flagsfn, dname) ((struct sched_domain_topology_level) \ - { .mask = maskfn, .sd_flags = flagsfn, .name = #dname }) - --#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) -+#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) && \ -+ !defined(CONFIG_SCHED_ALT) - extern void rebuild_sched_domains_energy(void); - #else - static inline void rebuild_sched_domains_energy(void) -diff --git a/init/Kconfig b/init/Kconfig -index c8f3cccd8..bb37f11dd 100644 ---- a/init/Kconfig -+++ b/init/Kconfig -@@ -723,6 +723,7 @@ config TASK_IO_ACCOUNTING - - config PSI - bool "Pressure stall information tracking" -+ depends on !SCHED_ALT - select KERNFS - help - Collect metrics that indicate how overcommitted the CPU, memory, -@@ -946,6 +947,29 @@ config SCHED_PROXY_EXEC - This option enables proxy execution, a mechanism for mutex-owning - tasks to inherit the scheduling context of higher priority waiters. - -+menuconfig SCHED_ALT -+ bool "Alternative CPU Schedulers" -+ default y -+ help -+ This feature enable alternative CPU scheduler" -+ -+if SCHED_ALT -+ -+choice -+ prompt "Alternative CPU Scheduler" -+ default SCHED_BMQ -+ -+config SCHED_BMQ -+ bool "BMQ CPU scheduler" -+ help -+ The BitMap Queue CPU scheduler for excellent interactivity and -+ responsiveness on the desktop and solid scalability on normal -+ hardware and commodity servers. -+ -+endchoice -+ -+endif -+ - endmenu - - # -@@ -1016,6 +1040,7 @@ config NUMA_BALANCING - depends on ARCH_SUPPORTS_NUMA_BALANCING - depends on !ARCH_WANT_NUMA_VARIABLE_LOCALITY - depends on SMP && NUMA_MIGRATION && !PREEMPT_RT -+ depends on !SCHED_ALT - help - This option adds support for automatic NUMA aware memory/task placement. - The mechanism is quite primitive and is based on migrating memory when -@@ -1302,7 +1327,7 @@ config CPUSETS - - config CPUSETS_V1 - bool "Legacy cgroup v1 cpusets controller" -- depends on CPUSETS -+ depends on (CPUSETS && !SCHED_ALT) - default n - help - Legacy cgroup v1 cpusets controller which has been deprecated by -@@ -1472,6 +1497,7 @@ config CHECKPOINT_RESTORE - - config SCHED_AUTOGROUP - bool "Automatic process group scheduling" -+ depends on !SCHED_ALT - select CGROUPS - select CGROUP_SCHED - select FAIR_GROUP_SCHED -@@ -1484,7 +1510,7 @@ config SCHED_AUTOGROUP - - config SCHED_POC_SELECTOR - bool "Piece-Of-Cake Fast Idle CPU Selector" -- depends on SMP -+ depends on SMP && !SCHED_ALT - default y - help - Idle CPU selector using cached bitmasks inspired by the scx_cake BPF -diff --git a/init/init_task.c b/init/init_task.c -index b5f48ebdc..760b5626a 100644 ---- a/init/init_task.c -+++ b/init/init_task.c -@@ -102,9 +102,16 @@ struct task_struct init_task __aligned(L1_CACHE_BYTES) = { - .stack = init_stack, - .usage = REFCOUNT_INIT(2), - .flags = PF_KTHREAD, -+#ifdef CONFIG_SCHED_ALT -+ .on_cpu = 1, -+ .prio = DEFAULT_PRIO, -+ .static_prio = DEFAULT_PRIO, -+ .normal_prio = DEFAULT_PRIO, -+#else - .prio = MAX_PRIO - 20, - .static_prio = MAX_PRIO - 20, - .normal_prio = MAX_PRIO - 20, -+#endif - .policy = SCHED_NORMAL, - .cpus_ptr = &init_task.cpus_mask, - .user_cpus_ptr = NULL, -@@ -116,6 +123,17 @@ struct task_struct init_task __aligned(L1_CACHE_BYTES) = { - .restart_block = { - .fn = do_no_restart_syscall, - }, -+#ifdef CONFIG_SCHED_ALT -+ .pq_node = { NULL }, -+ .__sched_prio = -1, -+#ifdef CONFIG_SCHED_BMQ -+ .boost_prio = 0, -+#endif -+#ifdef CONFIG_SCHED_PDS -+ .deadline = 0, -+#endif -+ .time_slice = HZ, -+#else - .se = { - .group_node = LIST_HEAD_INIT(init_task.se.group_node), - }, -@@ -123,10 +141,13 @@ struct task_struct init_task __aligned(L1_CACHE_BYTES) = { - .run_list = LIST_HEAD_INIT(init_task.rt.run_list), - .time_slice = RR_TIMESLICE, - }, -+#endif - .tasks = LIST_HEAD_INIT(init_task.tasks), -+#ifndef CONFIG_SCHED_ALT - #ifdef CONFIG_SMP - .pushable_tasks = PLIST_NODE_INIT(init_task.pushable_tasks, MAX_PRIO), - #endif -+#endif - #ifdef CONFIG_CGROUP_SCHED - .sched_task_group = &root_task_group, - #endif -diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt -index 2471a502c..67aaddc46 100644 ---- a/kernel/Kconfig.preempt -+++ b/kernel/Kconfig.preempt -@@ -150,7 +150,7 @@ config PREEMPT_DYNAMIC - - config SCHED_CORE - bool "Core Scheduling for SMT" -- depends on SCHED_SMT -+ depends on SCHED_SMT && !SCHED_ALT - help - This option permits Core Scheduling, a means of coordinated task - selection across SMT siblings. When enabled -- see -@@ -168,7 +168,7 @@ config SCHED_CORE - - config SCHED_CLASS_EXT - bool "Extensible Scheduling Class" -- depends on BPF_SYSCALL && BPF_JIT && DEBUG_INFO_BTF -+ depends on BPF_SYSCALL && BPF_JIT && DEBUG_INFO_BTF && !SCHED_ALT - select STACKTRACE if STACKTRACE_SUPPORT - help - This option enables a new scheduler class sched_ext (SCX), which -diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c -index c9e14fda3..02a6a1557 100644 ---- a/kernel/cgroup/cpuset.c -+++ b/kernel/cgroup/cpuset.c -@@ -767,7 +767,7 @@ static int validate_change(struct cpuset *cur, struct cpuset *trial) - return ret; - } - --#ifdef CONFIG_SMP -+#if defined(CONFIG_SMP) && !defined(CONFIG_SCHED_ALT) - - /* - * generate_sched_domains() -@@ -1011,7 +1011,7 @@ void rebuild_sched_domains_locked(void) - /* Have scheduler rebuild the domains */ - partition_sched_domains(ndoms, doms, attr); - } --#else /* !CONFIG_SMP */ -+#else /* !CONFIG_SMP || CONFIG_SCHED_ALT */ - void rebuild_sched_domains_locked(void) - { - } -@@ -2995,7 +2995,7 @@ static int cpuset_can_attach(struct cgroup_taskset *tset) - struct cpuset *cs, *oldcs; - struct task_struct *task; - bool setsched_check; -- int cpu, ret; -+ int ret; - - /* used later by cpuset_attach() */ - cpuset_attach_old_cs = task_cs(cgroup_taskset_first(tset, &css)); -@@ -3039,6 +3039,7 @@ static int cpuset_can_attach(struct cgroup_taskset *tset) - goto out_unlock; - } - -+#ifndef CONFIG_SCHED_ALT - if (dl_task(task)) { - /* - * Count all migrating DL tasks for cpuset task accounting. -@@ -3049,12 +3050,14 @@ static int cpuset_can_attach(struct cgroup_taskset *tset) - if (dl_task_needs_bw_move(task, cs->effective_cpus)) - cs->sum_migrate_dl_bw += task->dl.dl_bw; - } -+#endif - } - -+#ifndef CONFIG_SCHED_ALT - if (!cs->sum_migrate_dl_bw) - goto out_success; - -- cpu = cpumask_any_and(cpu_active_mask, cs->effective_cpus); -+ int cpu = cpumask_any_and(cpu_active_mask, cs->effective_cpus); - if (unlikely(cpu >= nr_cpu_ids)) { - ret = -EINVAL; - goto out_unlock; -@@ -3067,6 +3070,7 @@ static int cpuset_can_attach(struct cgroup_taskset *tset) - cs->dl_bw_cpu = cpu; - - out_success: -+#endif - /* - * Mark attach is in progress. This makes validate_change() fail - * changes which zero cpus/mems_allowed. -@@ -3091,11 +3095,13 @@ static void cpuset_cancel_attach(struct cgroup_taskset *tset) - mutex_lock(&cpuset_mutex); - dec_attach_in_progress_locked(cs); - -+#ifndef CONFIG_SCHED_ALT - if (cs->dl_bw_cpu >= 0) - dl_bw_free(cs->dl_bw_cpu, cs->sum_migrate_dl_bw); - - if (cs->nr_migrate_dl_tasks) - reset_migrate_dl_data(cs); -+#endif - - mutex_unlock(&cpuset_mutex); - } -diff --git a/kernel/delayacct.c b/kernel/delayacct.c -index 2e55c493c..5c2262a24 100644 ---- a/kernel/delayacct.c -+++ b/kernel/delayacct.c -@@ -170,7 +170,7 @@ int delayacct_add_tsk(struct taskstats *d, struct task_struct *tsk) - */ - t1 = tsk->sched_info.pcount; - t2 = tsk->sched_info.run_delay; -- t3 = tsk->se.sum_exec_runtime; -+ t3 = tsk_seruntime(tsk); - - d->cpu_count += t1; - -diff --git a/kernel/exit.c b/kernel/exit.c -index f50d73c27..a62d6f4d2 100644 ---- a/kernel/exit.c -+++ b/kernel/exit.c -@@ -207,7 +207,7 @@ static void __exit_signal(struct release_task_post *post, struct task_struct *ts - sig->inblock += task_io_get_inblock(tsk); - sig->oublock += task_io_get_oublock(tsk); - task_io_accounting_add(&sig->ioac, &tsk->ioac); -- sig->sum_sched_runtime += tsk->se.sum_exec_runtime; -+ sig->sum_sched_runtime += tsk_seruntime(tsk); - sig->nr_threads--; - __unhash_process(post, tsk, group_dead); - write_sequnlock(&sig->stats_lock); -@@ -290,8 +290,8 @@ void release_task(struct task_struct *p) - /* @thread_pid can't go away until free_pids() below */ - proc_flush_pid(thread_pid); - exit_cred_namespaces(p); -- add_device_randomness(&p->se.sum_exec_runtime, -- sizeof(p->se.sum_exec_runtime)); -+ add_device_randomness((const void*) &tsk_seruntime(p), -+ sizeof(unsigned long long)); - free_pids(post.pids); - release_thread(p); - /* -diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c -index daeeeef97..b7bb3cdec 100644 ---- a/kernel/locking/rtmutex.c -+++ b/kernel/locking/rtmutex.c -@@ -372,7 +372,7 @@ waiter_update_prio(struct rt_mutex_waiter *waiter, struct task_struct *task) - lockdep_assert(RB_EMPTY_NODE(&waiter->tree.entry)); - - waiter->tree.prio = __waiter_prio(task); -- waiter->tree.deadline = task->dl.deadline; -+ waiter->tree.deadline = __tsk_deadline(task); - } - - /* -@@ -393,16 +393,20 @@ waiter_clone_prio(struct rt_mutex_waiter *waiter, struct task_struct *task) - * Only use with rt_waiter_node_{less,equal}() - */ - #define task_to_waiter_node(p) \ -- &(struct rt_waiter_node){ .prio = __waiter_prio(p), .deadline = (p)->dl.deadline } -+ &(struct rt_waiter_node){ .prio = __waiter_prio(p), .deadline = __tsk_deadline(p) } - #define task_to_waiter(p) \ - &(struct rt_mutex_waiter){ .tree = *task_to_waiter_node(p) } - - static __always_inline int rt_waiter_node_less(struct rt_waiter_node *left, - struct rt_waiter_node *right) - { -+#ifdef CONFIG_SCHED_PDS -+ return (left->deadline < right->deadline); -+#else - if (left->prio < right->prio) - return 1; - -+#ifndef CONFIG_SCHED_BMQ - /* - * If both waiters have dl_prio(), we check the deadlines of the - * associated tasks. -@@ -411,16 +415,22 @@ static __always_inline int rt_waiter_node_less(struct rt_waiter_node *left, - */ - if (dl_prio(left->prio)) - return dl_time_before(left->deadline, right->deadline); -+#endif - - return 0; -+#endif - } - - static __always_inline int rt_waiter_node_equal(struct rt_waiter_node *left, - struct rt_waiter_node *right) - { -+#ifdef CONFIG_SCHED_PDS -+ return (left->deadline == right->deadline); -+#else - if (left->prio != right->prio) - return 0; - -+#ifndef CONFIG_SCHED_BMQ - /* - * If both waiters have dl_prio(), we check the deadlines of the - * associated tasks. -@@ -429,8 +439,10 @@ static __always_inline int rt_waiter_node_equal(struct rt_waiter_node *left, - */ - if (dl_prio(left->prio)) - return left->deadline == right->deadline; -+#endif - - return 1; -+#endif - } - - static inline bool rt_mutex_steal(struct rt_mutex_waiter *waiter, -diff --git a/kernel/locking/ww_mutex.h b/kernel/locking/ww_mutex.h -index 6c1245209..330fa4ac2 100644 ---- a/kernel/locking/ww_mutex.h -+++ b/kernel/locking/ww_mutex.h -@@ -282,6 +282,7 @@ __ww_ctx_less(struct ww_acquire_ctx *a, struct ww_acquire_ctx *b) - - /* equal static prio */ - -+#ifndef CONFIG_SCHED_ALT - if (dl_prio(a_prio)) { - if (dl_time_before(b->task->dl.deadline, - a->task->dl.deadline)) -@@ -291,6 +292,7 @@ __ww_ctx_less(struct ww_acquire_ctx *a, struct ww_acquire_ctx *b) - b->task->dl.deadline)) - return false; - } -+#endif - - /* equal prio */ - } -diff --git a/kernel/sched/Makefile b/kernel/sched/Makefile -index b1f1a3670..b7f5f9931 100644 ---- a/kernel/sched/Makefile -+++ b/kernel/sched/Makefile -@@ -36,7 +36,12 @@ endif - # These compilation units have roughly the same size and complexity - so their - # build parallelizes well and finishes roughly at once: - # -+ifdef CONFIG_SCHED_ALT -+obj-y += alt_core.o -+obj-$(CONFIG_SCHED_DEBUG) += alt_debug.o -+else - obj-y += core.o - obj-y += fair.o -+endif - obj-y += build_policy.o - obj-y += build_utility.o -diff --git a/kernel/sched/alt_core.c b/kernel/sched/alt_core.c -new file mode 100644 -index 000000000..48f1654bc ---- /dev/null -+++ b/kernel/sched/alt_core.c -@@ -0,0 +1,7354 @@ -+/* -+ * kernel/sched/alt_core.c -+ * -+ * Core alternative kernel scheduler code and related syscalls -+ * -+ * Copyright (C) 1991-2002 Linus Torvalds -+ * -+ * 2009-08-13 Brainfuck deadline scheduling policy by Con Kolivas deletes -+ * a whole lot of those previous things. -+ * 2017-09-06 Priority and Deadline based Skip list multiple queue kernel -+ * scheduler by Alfred Chen. -+ * 2019-02-20 BMQ(BitMap Queue) kernel scheduler by Alfred Chen. -+ */ -+#define INSTANTIATE_EXPORTED_MIGRATE_DISABLE -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include -+#include -+ -+#define CREATE_TRACE_POINTS -+#include -+#include -+#undef CREATE_TRACE_POINTS -+ -+#include "sched.h" -+#include "smp.h" -+ -+#include "pelt.h" -+ -+#include "../../io_uring/io-wq.h" -+#include "../smpboot.h" -+ -+/* Use CONFIG_PARAVIRT as this will avoid more #ifdef in arch code. */ -+#ifdef CONFIG_PARAVIRT -+struct static_key paravirt_steal_rq_enabled; -+#endif -+ -+EXPORT_TRACEPOINT_SYMBOL_GPL(ipi_send_cpu); -+EXPORT_TRACEPOINT_SYMBOL_GPL(ipi_send_cpumask); -+ -+/* -+ * Export tracepoints that act as a bare tracehook (ie: have no trace event -+ * associated with them) to allow external modules to probe them. -+ */ -+EXPORT_TRACEPOINT_SYMBOL_GPL(pelt_irq_tp); -+ -+#define sched_feat(x) (1) -+/* -+ * Print a warning if need_resched is set for the given duration (if -+ * LATENCY_WARN is enabled). -+ * -+ * If sysctl_resched_latency_warn_once is set, only one warning will be shown -+ * per boot. -+ */ -+__read_mostly int sysctl_resched_latency_warn_ms = 100; -+__read_mostly int sysctl_resched_latency_warn_once = 1; -+ -+#define ALT_SCHED_VERSION "v7.1-r0-lf" -+ -+#define STOP_PRIO (MAX_RT_PRIO - 1) -+ -+/* -+ * Time slice -+ * (default: 4 msec, units: nanoseconds) -+ */ -+unsigned int sysctl_sched_base_slice __read_mostly = (4 << 20); -+ -+#include "alt_core.h" -+ -+/* Reschedule if less than this many μs left */ -+#define RESCHED_NS (100 << 10) -+ -+/** -+ * sched_yield_type - Type of sched_yield() will be performed. -+ * 0: No yield. -+ * 1: Requeue task. (default) -+ */ -+int sched_yield_type __read_mostly = 1; -+ -+#ifdef CONFIG_SCHED_SMT -+DEFINE_STATIC_KEY_FALSE(sched_smt_present); -+EXPORT_SYMBOL_GPL(sched_smt_present); -+ -+cpumask_t sched_smt_mask ____cacheline_aligned_in_smp; -+#endif -+ -+DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); -+ -+struct sched_run_queue grq ____cacheline_aligned_in_smp; -+ -+DEFINE_PER_CPU_SHARED_ALIGNED(struct llist_head, preempt_list) = { NULL }; -+ -+#ifndef prepare_arch_switch -+# define prepare_arch_switch(next) do { } while (0) -+#endif -+#ifndef finish_arch_post_lock_switch -+# define finish_arch_post_lock_switch() do { } while (0) -+#endif -+ -+static int cpu_prio[NR_CPUS] ____cacheline_aligned_in_smp; -+ -+cpumask_t cpu_sched_prio_mask[SCHED_LEVELS] ____cacheline_aligned_in_smp; -+DECLARE_BITMAP(cpu_sched_prio_bitmap, SCHED_LEVELS) ____cacheline_aligned_in_smp; -+ -+#define sched_idle_mask (cpu_sched_prio_mask + SCHED_LEVELS - 1 - IDLE_TASK_SCHED_PRIO) -+ -+#include "alt_topology.c" -+ -+static __always_inline void update_sched_cpu_prio(const int cpu, const int prio) -+{ -+ int last_prio = READ_ONCE(cpu_prio[cpu]); -+ -+ if (prio == last_prio) -+ return; -+ -+ WRITE_ONCE(cpu_prio[cpu], prio); -+ -+ if (IDLE_TASK_SCHED_PRIO == last_prio) { -+ sched_clear_idle_mask(cpu); -+ } else { -+ int idx = SCHED_LEVELS - 1 - last_prio; -+ cpumask_clear_cpu(cpu, cpu_sched_prio_mask + idx); -+ if (cpumask_empty(cpu_sched_prio_mask + idx)) -+ clear_bit(idx, cpu_sched_prio_bitmap); -+ } -+ -+ if (IDLE_TASK_SCHED_PRIO == prio) { -+ sched_set_idle_mask(cpu); -+ } else { -+ int idx = SCHED_LEVELS - 1 - prio; -+ cpumask_set_cpu(cpu, cpu_sched_prio_mask + idx); -+ set_bit(idx, cpu_sched_prio_bitmap); -+ } -+} -+ -+/* task function */ -+static inline const struct cpumask *task_user_cpus(struct task_struct *p) -+{ -+ if (!p->user_cpus_ptr) -+ return cpu_possible_mask; /* &init_task.cpus_mask */ -+ return p->user_cpus_ptr; -+} -+ -+/* sched_run_queue related functions */ -+static inline void sched_run_queue_init(struct sched_run_queue *q) -+{ -+ int i; -+ -+ for(i = 0; i < SCHED_QUEUE_BITS; i++) { -+ raw_spin_lock_init(&q->_lock[i]); -+ init_llist_head(&q->_head[i]); -+ } -+ bitmap_zero(q->bitmap, SCHED_QUEUE_BITS); -+ atomic_set(&q->nr_queued, 0); -+ atomic_set(&q->nr_uninterruptible, 0); -+ atomic_set(&q->nr_iowait, 0); -+} -+ -+/* need a wrapper since we may need to trace from modules */ -+EXPORT_TRACEPOINT_SYMBOL(sched_set_state_tp); -+ -+/* Call via the helper macro trace_set_current_state. */ -+void __trace_set_current_state(int state_value) -+{ -+ trace_sched_set_state_tp(current, state_value); -+} -+EXPORT_SYMBOL(__trace_set_current_state); -+ -+/* -+ * Serialization rules: -+ * -+ * Lock order: -+ * -+ * p->pi_lock -+ * rq->lock -+ * hrtimer_cpu_base->lock (hrtimer_start() for bandwidth controls) -+ * -+ * rq1->lock -+ * rq2->lock where: rq1 < rq2 -+ * -+ * Regular state: -+ * -+ * Normal scheduling state is serialized by rq->lock. __schedule() takes the -+ * local CPU's rq->lock, it optionally removes the task from the runqueue and -+ * always looks at the local rq data structures to find the most eligible task -+ * to run next. -+ * -+ * Task enqueue is also under rq->lock, possibly taken from another CPU. -+ * Wakeups from another LLC domain might use an IPI to transfer the enqueue to -+ * the local CPU to avoid bouncing the runqueue state around [ see -+ * ttwu_queue_wakelist() ] -+ * -+ * Task wakeup, specifically wakeups that involve migration, are horribly -+ * complicated to avoid having to take two rq->locks. -+ * -+ * Special state: -+ * -+ * System-calls and anything external will use task_rq_lock() which acquires -+ * both p->pi_lock and rq->lock. As a consequence the state they change is -+ * stable while holding either lock: -+ * -+ * - sched_setaffinity()/ -+ * set_cpus_allowed_ptr(): p->cpus_ptr, p->nr_cpus_allowed -+ * - set_user_nice(): p->se.load, p->*prio -+ * - __sched_setscheduler(): p->sched_class, p->policy, p->*prio, -+ * p->se.load, p->rt_priority, -+ * p->dl.dl_{runtime, deadline, period, flags, bw, density} -+ * - sched_setnuma(): p->numa_preferred_nid -+ * - sched_move_task(): p->sched_task_group -+ * - uclamp_update_active() p->uclamp* -+ * -+ * p->state <- TASK_*: -+ * -+ * is changed locklessly using set_current_state(), __set_current_state() or -+ * set_special_state(), see their respective comments, or by -+ * try_to_wake_up(). This latter uses p->pi_lock to serialize against -+ * concurrent self. -+ * -+ * p->on_rq <- { 0, 1 = TASK_ON_RQ_QUEUED, 2 = TASK_ON_RQ_MIGRATING }: -+ * -+ * is set by activate_task() and cleared by deactivate_task()/block_task(), -+ * under rq->lock. Non-zero indicates the task is runnable, the special -+ * ON_RQ_MIGRATING state is used for migration without holding both -+ * rq->locks. It indicates task_cpu() is not stable, see task_rq_lock(). -+ * -+ * Additionally it is possible to be ->on_rq but still be considered not -+ * runnable when p->se.sched_delayed is true. These tasks are on the runqueue -+ * but will be dequeued as soon as they get picked again. See the -+ * task_is_runnable() helper. -+ * -+ * p->on_cpu <- { 0, 1 }: -+ * -+ * is set by prepare_task() and cleared by finish_task() such that it will be -+ * set before p is scheduled-in and cleared after p is scheduled-out, both -+ * under rq->lock. Non-zero indicates the task is running on its CPU. -+ * -+ * [ The astute reader will observe that it is possible for two tasks on one -+ * CPU to have ->on_cpu = 1 at the same time. ] -+ * -+ * task_cpu(p): is changed by set_task_cpu(), the rules are: -+ * -+ * - Don't call set_task_cpu() on a blocked task: -+ * -+ * We don't care what CPU we're not running on, this simplifies hotplug, -+ * the CPU assignment of blocked tasks isn't required to be valid. -+ * -+ * - for try_to_wake_up(), called under p->pi_lock: -+ * -+ * This allows try_to_wake_up() to only take one rq->lock, see its comment. -+ * -+ * - for migration called under rq->lock: -+ * [ see task_on_rq_migrating() in task_rq_lock() ] -+ * -+ * o move_queued_task() -+ * o detach_task() -+ * -+ * - for migration called under double_rq_lock(): -+ * -+ * o __migrate_swap_task() -+ * o push_rt_task() / pull_rt_task() -+ * o push_dl_task() / pull_dl_task() -+ * o dl_task_offline_migration() -+ * -+ */ -+ -+/* -+ * Context: p->pi_lock -+ */ -+ -+/* -+ * __task_rq_lock - lock the rq @p resides on. -+ */ -+static inline struct rq *__task_rq_lock(struct task_struct *p, struct rq_flags *rf) -+{ -+ lockdep_assert_held(&p->pi_lock); -+ -+ for (;;) { -+ if (TASK_ON_RQ_WAKING == p->on_rq) { -+ struct rq *rq = cpu_rq(p->wake_cpu); -+ -+ raw_spin_lock(&rq->lock); -+ if (likely(TASK_ON_RQ_WAKING == p->on_rq && rq == task_rq(p))) { -+ rf->lock = &rq->lock; -+ rf->queued = false; -+ return rq; -+ } -+ raw_spin_unlock(&rq->lock); -+ } else if (task_on_rq_queued(p)) { -+ if (p->on_cpu) { -+ struct rq *rq = task_rq(p); -+ -+ raw_spin_lock(&rq->lock); -+ if (likely(p->on_cpu && rq == task_rq(p))) { -+ rf->lock = &rq->lock; -+ return rq; -+ } -+ raw_spin_unlock(&rq->lock); -+ } else { -+ rf->lock = NULL; -+ return NULL; -+ } -+ } else if (task_on_rq_migrating(p)) { -+ do { -+ cpu_relax(); -+ } while (unlikely(task_on_rq_migrating(p))); -+ } else { -+ rf->lock = NULL; -+ return NULL; -+ } -+ } -+} -+ -+static inline void __task_rq_unlock(struct rq_flags *rf) -+{ -+ if (NULL != rf->lock) -+ raw_spin_unlock(rf->lock); -+} -+ -+/* -+ * task_rq_lock - lock p->pi_lock and lock the rq @p resides on. -+ */ -+struct rq *_task_rq_lock(struct task_struct *p, struct rq_flags *rf) -+{ -+ struct rq *rq; -+ -+ for (;;) { -+ raw_spin_lock_irqsave(&p->pi_lock, rf->flags); -+ rq = task_rq(p); -+ raw_spin_lock(&rq->lock); -+ /* -+ * move_queued_task() task_rq_lock() -+ * -+ * ACQUIRE (rq->lock) -+ * [S] ->on_rq = MIGRATING [L] rq = task_rq() -+ * WMB (__set_task_cpu()) ACQUIRE (rq->lock); -+ * [S] ->cpu = new_cpu [L] task_rq() -+ * [L] ->on_rq -+ * RELEASE (rq->lock) -+ * -+ * If we observe the old CPU in task_rq_lock(), the acquire of -+ * the old rq->lock will fully serialize against the stores. -+ * -+ * If we observe the new CPU in task_rq_lock(), the address -+ * dependency headed by '[L] rq = task_rq()' and the acquire -+ * will pair with the WMB to ensure we then also see migrating. -+ */ -+ if (likely(rq == task_rq(p) && !task_on_rq_migrating(p))) { -+ return rq; -+ } -+ raw_spin_unlock(&rq->lock); -+ raw_spin_unlock_irqrestore(&p->pi_lock, rf->flags); -+ -+ while (unlikely(task_on_rq_migrating(p))) -+ cpu_relax(); -+ } -+} -+ -+static inline void rq_lock_irqsave(struct rq *rq, struct rq_flags *rf) -+ __acquires(rq->lock) -+{ -+ raw_spin_lock_irqsave(&rq->lock, rf->flags); -+} -+ -+static inline void rq_unlock_irqrestore(struct rq *rq, struct rq_flags *rf) -+ __releases(rq->lock) -+{ -+ raw_spin_unlock_irqrestore(&rq->lock, rf->flags); -+} -+ -+DEFINE_LOCK_GUARD_1(rq_lock_irqsave, struct rq, -+ rq_lock_irqsave(_T->lock, &_T->rf), -+ rq_unlock_irqrestore(_T->lock, &_T->rf), -+ struct rq_flags rf) -+ -+/* -+ * RQ-clock updating methods: -+ */ -+ -+static void update_rq_clock_task(struct rq *rq, s64 delta) -+{ -+/* -+ * In theory, the compile should just see 0 here, and optimize out the call -+ * to sched_rt_avg_update. But I don't trust it... -+ */ -+ s64 __maybe_unused steal = 0, irq_delta = 0; -+ -+#ifdef CONFIG_IRQ_TIME_ACCOUNTING -+ if (irqtime_enabled()) { -+ irq_delta = irq_time_read(cpu_of(rq)) - rq->prev_irq_time; -+ -+ /* -+ * Since irq_time is only updated on {soft,}irq_exit, we might run into -+ * this case when a previous update_rq_clock() happened inside a -+ * {soft,}IRQ region. -+ * -+ * When this happens, we stop ->clock_task and only update the -+ * prev_irq_time stamp to account for the part that fit, so that a next -+ * update will consume the rest. This ensures ->clock_task is -+ * monotonic. -+ * -+ * It does however cause some slight miss-attribution of {soft,}IRQ -+ * time, a more accurate solution would be to update the irq_time using -+ * the current rq->clock timestamp, except that would require using -+ * atomic ops. -+ */ -+ if (irq_delta > delta) -+ irq_delta = delta; -+ -+ rq->prev_irq_time += irq_delta; -+ delta -= irq_delta; -+ delayacct_irq(rq->curr, irq_delta); -+ } -+#endif -+#ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING -+ if (static_key_false((¶virt_steal_rq_enabled))) { -+ u64 prev_steal; -+ -+ steal = prev_steal = paravirt_steal_clock(cpu_of(rq)); -+ steal -= rq->prev_steal_time_rq; -+ -+ if (unlikely(steal > delta)) -+ steal = delta; -+ -+ rq->prev_steal_time_rq = prev_steal; -+ delta -= steal; -+ } -+#endif -+ -+ rq->clock_task += delta; -+ -+#ifdef CONFIG_HAVE_SCHED_AVG_IRQ -+ if ((irq_delta + steal)) -+ update_irq_load_avg(rq, irq_delta + steal); -+#endif -+} -+ -+static inline void update_rq_clock(struct rq *rq) -+{ -+ s64 delta = sched_clock_cpu(cpu_of(rq)) - rq->clock; -+ -+ if (unlikely(delta <= 0)) -+ return; -+ rq->clock += delta; -+ sched_update_rq_clock(rq); -+ update_rq_clock_task(rq, delta); -+} -+ -+/* -+ * RQ Load update routine -+ */ -+#define RQ_LOAD_HISTORY_BITS (sizeof(s32) * 8ULL) -+#define RQ_UTIL_SHIFT (8) -+#define RQ_LOAD_HISTORY_TO_UTIL(l) (((l) >> (RQ_LOAD_HISTORY_BITS - 1 - RQ_UTIL_SHIFT)) & 0xff) -+ -+#define LOAD_BLOCK(t) ((t) >> 17) -+#define LOAD_HALF_BLOCK(t) ((t) >> 16) -+#define BLOCK_MASK(t) ((t) & ((0x01 << 18) - 1)) -+#define LOAD_BLOCK_BIT(b) (1UL << (RQ_LOAD_HISTORY_BITS - 1 - (b))) -+#define CURRENT_LOAD_BIT LOAD_BLOCK_BIT(0) -+ -+static inline void rq_load_update(struct rq *rq) -+{ -+ u64 time = rq->clock; -+ u64 delta = min(LOAD_BLOCK(time) - LOAD_BLOCK(rq->load_stamp), RQ_LOAD_HISTORY_BITS - 1); -+ u64 prev = !!(rq->load_history & CURRENT_LOAD_BIT); -+ u64 curr = (rq->curr != rq->idle); -+ -+ if (delta) { -+ rq->load_history = rq->load_history >> delta; -+ -+ if (delta < RQ_UTIL_SHIFT) { -+ rq->load_block += (~BLOCK_MASK(rq->load_stamp)) * prev; -+ if (!!LOAD_HALF_BLOCK(rq->load_block) ^ curr) -+ rq->load_history ^= LOAD_BLOCK_BIT(delta); -+ } -+ -+ rq->load_block = BLOCK_MASK(time) * prev; -+ } else { -+ rq->load_block += (time - rq->load_stamp) * prev; -+ } -+ if (prev ^ curr) -+ rq->load_history ^= CURRENT_LOAD_BIT; -+ rq->load_stamp = time; -+} -+ -+unsigned long rq_load_util(struct rq *rq, unsigned long max) -+{ -+ return RQ_LOAD_HISTORY_TO_UTIL(rq->load_history) * (max >> RQ_UTIL_SHIFT); -+} -+ -+unsigned long sched_cpu_util(int cpu) -+{ -+ return rq_load_util(cpu_rq(cpu), arch_scale_cpu_capacity(cpu)); -+} -+ -+#ifdef CONFIG_CPU_FREQ -+/** -+ * cpufreq_update_util - Take a note about CPU utilization changes. -+ * @rq: Runqueue to carry out the update for. -+ * @flags: Update reason flags. -+ * -+ * This function is called by the scheduler on the CPU whose utilization is -+ * being updated. -+ * -+ * It can only be called from RCU-sched read-side critical sections. -+ * -+ * The way cpufreq is currently arranged requires it to evaluate the CPU -+ * performance state (frequency/voltage) on a regular basis to prevent it from -+ * being stuck in a completely inadequate performance level for too long. -+ * That is not guaranteed to happen if the updates are only triggered from CFS -+ * and DL, though, because they may not be coming in if only RT tasks are -+ * active all the time (or there are RT tasks only). -+ * -+ * As a workaround for that issue, this function is called periodically by the -+ * RT sched class to trigger extra cpufreq updates to prevent it from stalling, -+ * but that really is a band-aid. Going forward it should be replaced with -+ * solutions targeted more specifically at RT tasks. -+ */ -+static inline void cpufreq_update_util(struct rq *rq, unsigned int flags) -+{ -+ struct update_util_data *data; -+ -+ rq_load_update(rq); -+ data = rcu_dereference_sched(*per_cpu_ptr(&cpufreq_update_util_data, cpu_of(rq))); -+ if (data) -+ data->func(data, rq_clock(rq), flags); -+} -+#else /* !CONFIG_CPU_FREQ: */ -+static inline void cpufreq_update_util(struct rq *rq, unsigned int flags) -+{ -+ rq_load_update(rq); -+} -+#endif /* !CONFIG_CPU_FREQ */ -+ -+#ifdef CONFIG_NO_HZ_FULL -+/* -+ * Tick may be needed by tasks in the runqueue depending on their policy and -+ * requirements. If tick is needed, lets send the target an IPI to kick it out -+ * of nohz mode if necessary. -+ */ -+static inline void sched_update_tick_dependency(struct rq *rq) -+{ -+ int cpu = cpu_of(rq); -+ -+ if (!tick_nohz_full_cpu(cpu)) -+ return; -+ -+ if ((IDLE_TASK_SCHED_PRIO != READ_ONCE(cpu_prio[cpu])) && -+ (0 == srq_nr_queued(cpu)) && is_preempt_list_empty(cpu)) -+ tick_nohz_dep_clear_cpu(cpu, TICK_DEP_BIT_SCHED); -+ else -+ tick_nohz_dep_set_cpu(cpu, TICK_DEP_BIT_SCHED); -+} -+#else /* !CONFIG_NO_HZ_FULL: */ -+static inline void sched_update_tick_dependency(struct rq *rq) { } -+#endif /* !CONFIG_NO_HZ_FULL */ -+ -+bool sched_task_on_rq(struct task_struct *p) -+{ -+ return task_on_rq_queued(p); -+} -+ -+unsigned long get_wchan(struct task_struct *p) -+{ -+ unsigned long ip = 0; -+ unsigned int state; -+ -+ if (!p || p == current) -+ return 0; -+ -+ /* Only get wchan if task is blocked and we can keep it that way. */ -+ raw_spin_lock_irq(&p->pi_lock); -+ state = READ_ONCE(p->__state); -+ smp_rmb(); /* see try_to_wake_up() */ -+ if (state != TASK_RUNNING && state != TASK_WAKING && !p->on_rq) -+ ip = __get_wchan(p); -+ raw_spin_unlock_irq(&p->pi_lock); -+ -+ return ip; -+} -+ -+/* -+ * try_cmpxchg based fetch_or() macro so it works for different integer types: -+ */ -+#define fetch_or(ptr, mask) \ -+ ({ \ -+ typeof(ptr) _ptr = (ptr); \ -+ typeof(mask) _mask = (mask); \ -+ typeof(*_ptr) _val = *_ptr; \ -+ \ -+ do { \ -+ } while (!try_cmpxchg(_ptr, &_val, _val | _mask)); \ -+ _val; \ -+}) -+ -+#ifdef TIF_POLLING_NRFLAG -+/* -+ * Atomically set TIF_NEED_RESCHED and test for TIF_POLLING_NRFLAG, -+ * this avoids any races wrt polling state changes and thereby avoids -+ * spurious IPIs. -+ */ -+static inline bool set_nr_and_not_polling(struct thread_info *ti, int tif) -+{ -+ return !(fetch_or(&ti->flags, 1 << tif) & _TIF_POLLING_NRFLAG); -+} -+ -+/* -+ * Atomically set TIF_NEED_RESCHED if TIF_POLLING_NRFLAG is set. -+ * -+ * If this returns true, then the idle task promises to call -+ * sched_ttwu_pending() and reschedule soon. -+ */ -+static bool set_nr_if_polling(struct task_struct *p) -+{ -+ struct thread_info *ti = task_thread_info(p); -+ typeof(ti->flags) val = READ_ONCE(ti->flags); -+ -+ do { -+ if (!(val & _TIF_POLLING_NRFLAG)) -+ return false; -+ if (val & _TIF_NEED_RESCHED) -+ return true; -+ } while (!try_cmpxchg(&ti->flags, &val, val | _TIF_NEED_RESCHED)); -+ -+ return true; -+} -+ -+#else /* !TIF_POLLING_NRFLAG: */ -+static inline bool set_nr_and_not_polling(struct thread_info *ti, int tif) -+{ -+ set_ti_thread_flag(ti, tif); -+ return true; -+} -+ -+static inline bool set_nr_if_polling(struct task_struct *p) -+{ -+ return false; -+} -+#endif /* !TIF_POLLING_NRFLAG */ -+ -+static bool __wake_q_add(struct wake_q_head *head, struct task_struct *task) -+{ -+ struct wake_q_node *node = &task->wake_q; -+ -+ /* -+ * Atomically grab the task, if ->wake_q is !nil already it means -+ * it's already queued (either by us or someone else) and will get the -+ * wakeup due to that. -+ * -+ * In order to ensure that a pending wakeup will observe our pending -+ * state, even in the failed case, an explicit smp_mb() must be used. -+ */ -+ smp_mb__before_atomic(); -+ if (unlikely(cmpxchg_relaxed(&node->next, NULL, WAKE_Q_TAIL))) -+ return false; -+ -+ /* -+ * The head is context local, there can be no concurrency. -+ */ -+ *head->lastp = node; -+ head->lastp = &node->next; -+ return true; -+} -+ -+/** -+ * wake_q_add() - queue a wakeup for 'later' waking. -+ * @head: the wake_q_head to add @task to -+ * @task: the task to queue for 'later' wakeup -+ * -+ * Queue a task for later wakeup, most likely by the wake_up_q() call in the -+ * same context, _HOWEVER_ this is not guaranteed, the wakeup can come -+ * instantly. -+ * -+ * This function must be used as-if it were wake_up_process(); IOW the task -+ * must be ready to be woken at this location. -+ */ -+void wake_q_add(struct wake_q_head *head, struct task_struct *task) -+{ -+ if (__wake_q_add(head, task)) -+ get_task_struct(task); -+} -+ -+/** -+ * wake_q_add_safe() - safely queue a wakeup for 'later' waking. -+ * @head: the wake_q_head to add @task to -+ * @task: the task to queue for 'later' wakeup -+ * -+ * Queue a task for later wakeup, most likely by the wake_up_q() call in the -+ * same context, _HOWEVER_ this is not guaranteed, the wakeup can come -+ * instantly. -+ * -+ * This function must be used as-if it were wake_up_process(); IOW the task -+ * must be ready to be woken at this location. -+ * -+ * This function is essentially a task-safe equivalent to wake_q_add(). Callers -+ * that already hold reference to @task can call the 'safe' version and trust -+ * wake_q to do the right thing depending whether or not the @task is already -+ * queued for wakeup. -+ */ -+void wake_q_add_safe(struct wake_q_head *head, struct task_struct *task) -+{ -+ if (!__wake_q_add(head, task)) -+ put_task_struct(task); -+} -+ -+void wake_up_q(struct wake_q_head *head) -+{ -+ struct wake_q_node *node = head->first; -+ -+ while (node != WAKE_Q_TAIL) { -+ struct task_struct *task; -+ -+ task = container_of(node, struct task_struct, wake_q); -+ node = node->next; -+ /* pairs with cmpxchg_relaxed() in __wake_q_add() */ -+ WRITE_ONCE(task->wake_q.next, NULL); -+ /* Task can safely be re-inserted now. */ -+ -+ /* -+ * wake_up_process() executes a full barrier, which pairs with -+ * the queueing in wake_q_add() so as not to miss wakeups. -+ */ -+ wake_up_process(task); -+ put_task_struct(task); -+ } -+} -+ -+/* -+ * resched_curr - mark rq's current task 'to be rescheduled now'. -+ * -+ * On UP this means the setting of the need_resched flag, on SMP it -+ * might also involve a cross-CPU call to trigger the scheduler on -+ * the target CPU. -+ */ -+static inline void __resched_curr(struct rq *rq, int tif) -+{ -+ struct task_struct *curr = rq->curr; -+ struct thread_info *cti = task_thread_info(curr); -+ int cpu; -+ -+ lockdep_assert_held(&rq->lock); -+ -+ /* -+ * Always immediately preempt the idle task; no point in delaying doing -+ * actual work. -+ */ -+ if (is_idle_task(curr) && tif == TIF_NEED_RESCHED_LAZY) -+ tif = TIF_NEED_RESCHED; -+ -+ if (cti->flags & ((1 << tif) | _TIF_NEED_RESCHED)) -+ return; -+ -+ cpu = cpu_of(rq); -+ -+ trace_sched_set_need_resched_tp(curr, cpu, tif); -+ if (cpu == smp_processor_id()) { -+ set_ti_thread_flag(cti, tif); -+ if (tif == TIF_NEED_RESCHED) -+ set_preempt_need_resched(); -+ return; -+ } -+ -+ if (set_nr_and_not_polling(cti, tif)) { -+ if (tif == TIF_NEED_RESCHED) -+ smp_send_reschedule(cpu); -+ } else { -+ trace_sched_wake_idle_without_ipi(cpu); -+ } -+} -+ -+void __trace_set_need_resched(struct task_struct *curr, int tif) -+{ -+ trace_sched_set_need_resched_tp(curr, smp_processor_id(), tif); -+} -+EXPORT_SYMBOL_GPL(__trace_set_need_resched); -+ -+static inline void resched_curr(struct rq *rq) -+{ -+ __resched_curr(rq, TIF_NEED_RESCHED); -+} -+ -+#ifdef CONFIG_PREEMPT_DYNAMIC -+static DEFINE_STATIC_KEY_FALSE(sk_dynamic_preempt_lazy); -+static __always_inline bool dynamic_preempt_lazy(void) -+{ -+ return static_branch_unlikely(&sk_dynamic_preempt_lazy); -+} -+#else /* !CONFIG_PREEMPT_DYNAMIC: */ -+static __always_inline bool dynamic_preempt_lazy(void) -+{ -+ return IS_ENABLED(CONFIG_PREEMPT_LAZY); -+} -+#endif /* !CONFIG_PREEMPT_DYNAMIC */ -+ -+static __always_inline int get_lazy_tif_bit(void) -+{ -+ if (dynamic_preempt_lazy()) -+ return TIF_NEED_RESCHED_LAZY; -+ -+ return TIF_NEED_RESCHED; -+} -+ -+static inline void resched_curr_lazy(struct rq *rq) -+{ -+ __resched_curr(rq, get_lazy_tif_bit()); -+} -+ -+void resched_cpu(int cpu) -+{ -+ struct rq *rq = cpu_rq(cpu); -+ unsigned long flags; -+ -+ raw_spin_lock_irqsave(&rq->lock, flags); -+ if (cpu_online(cpu) || cpu == smp_processor_id()) -+ resched_curr(cpu_rq(cpu)); -+ raw_spin_unlock_irqrestore(&rq->lock, flags); -+} -+ -+#ifdef CONFIG_NO_HZ_COMMON -+/* -+ * This routine will record that the CPU is going idle with tick stopped. -+ * This info will be used in performing idle load balancing in the future. -+ */ -+void nohz_balance_enter_idle(int cpu) {} -+ -+/* -+ * In the semi idle case, use the nearest busy CPU for migrating timers -+ * from an idle CPU. This is good for power-savings. -+ * -+ * We don't do similar optimization for completely idle system, as -+ * selecting an idle CPU will add more delays to the timers than intended -+ * (as that CPU's timer base may not be up to date wrt jiffies etc). -+ */ -+int get_nohz_timer_target(void) -+{ -+ int i, cpu = smp_processor_id(), default_cpu = -1; -+ struct cpumask *mask; -+ const struct cpumask *hk_mask, *end_mask; -+ -+ if (housekeeping_cpu(cpu, HK_TYPE_KERNEL_NOISE)) { -+ if (!idle_cpu(cpu)) -+ return cpu; -+ default_cpu = cpu; -+ } -+ -+ hk_mask = housekeeping_cpumask(HK_TYPE_KERNEL_NOISE); -+ end_mask = per_cpu(cpu_affinity_end_mask, cpu); -+ -+ for (mask = per_cpu(cpu_affinity_masks, cpu); mask < end_mask; mask++) -+ for_each_cpu_and(i, mask, hk_mask) -+ if (!idle_cpu(i)) -+ return i; -+ -+ if (default_cpu == -1) -+ default_cpu = housekeeping_any_cpu(HK_TYPE_KERNEL_NOISE); -+ cpu = default_cpu; -+ -+ return cpu; -+} -+ -+/* -+ * When add_timer_on() enqueues a timer into the timer wheel of an -+ * idle CPU then this timer might expire before the next timer event -+ * which is scheduled to wake up that CPU. In case of a completely -+ * idle system the next event might even be infinite time into the -+ * future. wake_up_idle_cpu() ensures that the CPU is woken up and -+ * leaves the inner idle loop so the newly added timer is taken into -+ * account when the CPU goes back to idle and evaluates the timer -+ * wheel for the next timer event. -+ */ -+static inline void wake_up_idle_cpu(int cpu) -+{ -+ struct rq *rq = cpu_rq(cpu); -+ -+ if (cpu == smp_processor_id()) -+ return; -+ -+ /* -+ * Set TIF_NEED_RESCHED and send an IPI if in the non-polling -+ * part of the idle loop. This forces an exit from the idle loop -+ * and a round trip to schedule(). Now this could be optimized -+ * because a simple new idle loop iteration is enough to -+ * re-evaluate the next tick. Provided some re-ordering of tick -+ * nohz functions that would need to follow TIF_NR_POLLING -+ * clearing: -+ * -+ * - On most architectures, a simple fetch_or on ti::flags with a -+ * "0" value would be enough to know if an IPI needs to be sent. -+ * -+ * - x86 needs to perform a last need_resched() check between -+ * monitor and mwait which doesn't take timers into account. -+ * There a dedicated TIF_TIMER flag would be required to -+ * fetch_or here and be checked along with TIF_NEED_RESCHED -+ * before mwait(). -+ * -+ * However, remote timer enqueue is not such a frequent event -+ * and testing of the above solutions didn't appear to report -+ * much benefits. -+ */ -+ if (set_nr_and_not_polling(task_thread_info(rq->idle), TIF_NEED_RESCHED)) -+ smp_send_reschedule(cpu); -+ else -+ trace_sched_wake_idle_without_ipi(cpu); -+} -+ -+static inline bool wake_up_full_nohz_cpu(int cpu) -+{ -+ /* -+ * We just need the target to call irq_exit() and re-evaluate -+ * the next tick. The nohz full kick at least implies that. -+ * If needed we can still optimize that later with an -+ * empty IRQ. -+ */ -+ if (cpu_is_offline(cpu)) -+ return true; /* Don't try to wake offline CPUs. */ -+ if (tick_nohz_full_cpu(cpu)) { -+ if (cpu != smp_processor_id() || -+ tick_nohz_tick_stopped()) -+ tick_nohz_full_kick_cpu(cpu); -+ return true; -+ } -+ -+ return false; -+} -+ -+void wake_up_nohz_cpu(int cpu) -+{ -+ if (!wake_up_full_nohz_cpu(cpu)) -+ wake_up_idle_cpu(cpu); -+} -+ -+static void nohz_csd_func(void *info) -+{ -+ struct rq *rq = info; -+ int cpu = cpu_of(rq); -+ unsigned int flags; -+ -+ /* -+ * Release the rq::nohz_csd. -+ */ -+ flags = atomic_fetch_andnot(NOHZ_KICK_MASK, nohz_flags(cpu)); -+ WARN_ON(!(flags & NOHZ_KICK_MASK)); -+ -+ rq->idle_balance = idle_cpu(cpu); -+ if (rq->idle_balance) { -+ rq->nohz_idle_balance = flags; -+ __raise_softirq_irqoff(SCHED_SOFTIRQ); -+ } -+} -+ -+#endif /* CONFIG_NO_HZ_COMMON */ -+ -+void yield_task(struct rq *rq) -+{ -+ struct task_struct *p; -+ -+ if (!sched_yield_type) -+ return; -+ -+ p = current; -+ if (!rt_task(p) && p != rq->idle) { -+ do_sched_yield_type_1(p, rq); -+ update_sched_cpu_prio(cpu_of(rq), task_sched_prio(p)); -+ } -+} -+ -+static __always_inline -+int __task_state_match(struct task_struct *p, unsigned int state) -+{ -+ if (READ_ONCE(p->__state) & state) -+ return 1; -+ -+ if (READ_ONCE(p->saved_state) & state) -+ return -1; -+ -+ return 0; -+} -+ -+static __always_inline -+int task_state_match(struct task_struct *p, unsigned int state) -+{ -+ /* -+ * Serialize against current_save_and_set_rtlock_wait_state(), -+ * current_restore_rtlock_saved_state(), and __refrigerator(). -+ */ -+ guard(raw_spinlock_irq)(&p->pi_lock); -+ -+ return __task_state_match(p, state); -+} -+ -+/* -+ * wait_task_inactive - wait for a thread to unschedule. -+ * -+ * Wait for the thread to block in any of the states set in @match_state. -+ * If it changes, i.e. @p might have woken up, then return zero. When we -+ * succeed in waiting for @p to be off its CPU, we return a positive number -+ * (its total switch count). If a second call a short while later returns the -+ * same number, the caller can be sure that @p has remained unscheduled the -+ * whole time. -+ * -+ * The caller must ensure that the task *will* unschedule sometime soon, -+ * else this function might spin for a *long* time. This function can't -+ * be called with interrupts off, or it may introduce deadlock with -+ * smp_call_function() if an IPI is sent by the same process we are -+ * waiting to become inactive. -+ */ -+unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state) -+{ -+ int running, queued, match; -+ unsigned long ncsw; -+ struct rq_flags rf; -+ -+ for (;;) { -+ /* -+ * If the task is actively running on another CPU -+ * still, just relax and busy-wait without holding -+ * any locks. -+ * -+ * NOTE! Since we don't hold any locks, it's not -+ * even sure that "rq" stays as the right runqueue! -+ * But we don't care, since this will return false -+ * if the runqueue has changed and p is actually now -+ * running somewhere else! -+ */ -+ while (task_on_cpu(p)) { -+ if (!task_state_match(p, match_state)) -+ return 0; -+ cpu_relax(); -+ } -+ -+ /* -+ * Ok, time to look more closely! We need the rq -+ * lock now, to be *sure*. If we're wrong, we'll -+ * just go back and repeat. -+ */ -+ raw_spin_lock_irqsave(&p->pi_lock, rf.flags); -+ __task_rq_lock(p, &rf); -+ trace_sched_wait_task(p); -+ running = task_on_cpu(p); -+ queued = task_on_rq_queued(p); -+ ncsw = 0; -+ if ((match = __task_state_match(p, match_state))) { -+ /* -+ * When matching on p->saved_state, consider this task -+ * still queued so it will wait. -+ */ -+ if (match < 0) -+ queued = 1; -+ ncsw = p->nvcsw | LONG_MIN; /* sets MSB */ -+ } -+ __task_rq_unlock(&rf); -+ raw_spin_unlock_irqrestore(&p->pi_lock, rf.flags); -+ -+ /* -+ * If it changed from the expected state, bail out now. -+ */ -+ if (unlikely(!ncsw)) -+ break; -+ -+ /* -+ * Was it really running after all now that we -+ * checked with the proper locks actually held? -+ * -+ * Oops. Go back and try again.. -+ */ -+ if (unlikely(running)) { -+ cpu_relax(); -+ continue; -+ } -+ -+ /* -+ * It's not enough that it's not actively running, -+ * it must be off the runqueue _entirely_, and not -+ * preempted! -+ * -+ * So if it was still runnable (but just not actively -+ * running right now), it's preempted, and we should -+ * yield - it could be a while. -+ */ -+ if (unlikely(queued)) { -+ ktime_t to = NSEC_PER_SEC / HZ; -+ -+ set_current_state(TASK_UNINTERRUPTIBLE); -+ schedule_hrtimeout(&to, HRTIMER_MODE_REL_HARD); -+ continue; -+ } -+ -+ /* -+ * Ahh, all good. It wasn't running, and it wasn't -+ * runnable, which means that it will never become -+ * running in the future either. We're all done! -+ */ -+ break; -+ } -+ -+ return ncsw; -+} -+ -+#ifdef CONFIG_SCHED_HRTICK -+/* -+ * Use HR-timers to deliver accurate preemption points. -+ */ -+ -+enum { -+ HRTICK_SCHED_NONE = 0, -+ HRTICK_SCHED_DEFER = BIT(1), -+ HRTICK_SCHED_START = BIT(2), -+ HRTICK_SCHED_REARM_HRTIMER = BIT(3) -+}; -+ -+static void __used hrtick_clear(struct rq *rq) -+{ -+ if (hrtimer_active(&rq->hrtick_timer)) -+ hrtimer_cancel(&rq->hrtick_timer); -+} -+ -+/* -+ * High-resolution timer tick. -+ * Runs from hardirq context with interrupts disabled. -+ */ -+static enum hrtimer_restart hrtick(struct hrtimer *timer) -+{ -+ struct rq *rq = container_of(timer, struct rq, hrtick_timer); -+ -+ WARN_ON_ONCE(cpu_of(rq) != smp_processor_id()); -+ -+ raw_spin_lock(&rq->lock); -+ resched_curr(rq); -+ raw_spin_unlock(&rq->lock); -+ -+ return HRTIMER_NORESTART; -+} -+ -+/* -+ * Use hrtick when: -+ * - enabled by features -+ * - hrtimer is actually high res -+ */ -+static inline bool hrtick_enabled(struct rq *rq) -+{ -+ return cpu_active(cpu_of(rq)) && hrtimer_highres_enabled(); -+} -+ -+static inline bool hrtick_needs_rearm(struct hrtimer *timer, ktime_t expires) -+{ -+ /* -+ * Queued is false when the timer is not started or currently -+ * running the callback. In both cases, restart. If queued check -+ * whether the expiry time actually changes substantially. -+ */ -+ return !hrtimer_is_queued(timer) || -+ abs(expires - hrtimer_get_expires(timer)) > 5000; -+} -+ -+static void hrtick_cond_restart(struct rq *rq) -+{ -+ struct hrtimer *timer = &rq->hrtick_timer; -+ ktime_t time = rq->hrtick_time; -+ -+ if (hrtick_needs_rearm(timer, time)) -+ hrtimer_start(timer, time, HRTIMER_MODE_ABS_PINNED_HARD); -+} -+ -+/* -+ * called from hardirq (IPI) context -+ */ -+static void __hrtick_start(void *arg) -+{ -+ struct rq *rq = arg; -+ -+ raw_spin_lock(&rq->lock); -+ hrtick_cond_restart(rq); -+ raw_spin_unlock(&rq->lock); -+} -+ -+/* -+ * Called to set the hrtick timer state. -+ * -+ * called with rq->lock held and IRQs disabled -+ */ -+static inline void hrtick_start(struct rq *rq, u64 delay) -+{ -+ s64 delta; -+ -+ /* -+ * Don't schedule slices shorter than 10000ns, that just -+ * doesn't make sense and can cause timer DoS. -+ */ -+ delta = max_t(s64, delay, 10000LL); -+ -+ rq->hrtick_time = ktime_add_ns(ktime_get(), delta); -+ if (!hrtick_needs_rearm(&rq->hrtick_timer, rq->hrtick_time)) -+ return; -+ -+ /* -+ * If this is in the middle of schedule() only note the delay -+ * and let hrtick_schedule_exit() deal with it. -+ */ -+ if (rq->hrtick_sched) { -+ rq->hrtick_sched |= HRTICK_SCHED_START; -+ rq->hrtick_delay = delta; -+ return; -+ } -+ -+ if (rq == this_rq()) -+ hrtimer_start(&rq->hrtick_timer, rq->hrtick_time, HRTIMER_MODE_ABS_PINNED_HARD); -+ else -+ smp_call_function_single_async(cpu_of(rq), &rq->hrtick_csd); -+} -+ -+static inline void hrtick_schedule_enter(struct rq *rq) -+{ -+ rq->hrtick_sched = HRTICK_SCHED_DEFER; -+ if (hrtimer_test_and_clear_rearm_deferred()) -+ rq->hrtick_sched |= HRTICK_SCHED_REARM_HRTIMER; -+} -+ -+static inline void hrtick_schedule_exit(struct rq *rq) -+{ -+ if (rq->hrtick_sched & HRTICK_SCHED_START) { -+ rq->hrtick_time = ktime_add_ns(ktime_get(), rq->hrtick_delay); -+ hrtick_cond_restart(rq); -+ } else if (idle_rq(rq)) { -+ /* -+ * No need for using hrtimer_is_active(). The timer is CPU local -+ * and interrupts are disabled, so the callback cannot be -+ * running and the queued state is valid. -+ */ -+ if (hrtimer_is_queued(&rq->hrtick_timer)) -+ hrtimer_cancel(&rq->hrtick_timer); -+ } -+ -+ if (rq->hrtick_sched & HRTICK_SCHED_REARM_HRTIMER) -+ __hrtimer_rearm_deferred(); -+ -+ rq->hrtick_sched = HRTICK_SCHED_NONE; -+} -+ -+static void hrtick_rq_init(struct rq *rq) -+{ -+ INIT_CSD(&rq->hrtick_csd, __hrtick_start, rq); -+ rq->hrtick_sched = HRTICK_SCHED_NONE; -+ hrtimer_setup(&rq->hrtick_timer, hrtick, CLOCK_MONOTONIC, -+ HRTIMER_MODE_REL_HARD | HRTIMER_MODE_LAZY_REARM); -+} -+#else /* !CONFIG_SCHED_HRTICK: */ -+static inline void hrtick_clear(struct rq *rq) { } -+static inline void hrtick_rq_init(struct rq *rq) { } -+static inline void hrtick_schedule_enter(struct rq *rq) { } -+static inline void hrtick_schedule_exit(struct rq *rq) { } -+#endif /* !CONFIG_SCHED_HRTICK */ -+ -+/* -+ * activate_task - enqueue a task to the schedule runqueue @srq. -+ */ -+static inline void activate_task(struct task_struct *p, struct sched_run_queue *srq) -+{ -+ SRQ_ENQUEUE_TASK(srq, p, -+ { -+ WRITE_ONCE(p->on_rq, TASK_ON_RQ_QUEUED); -+ ASSERT_EXCLUSIVE_WRITER(p->on_rq); -+ -+ WRITE_ONCE(p->__state, TASK_RUNNING); -+ }); -+ /* -+ * If in_iowait is set, the code below may not trigger any cpufreq -+ * utilization updates, so do it here explicitly with the IOWAIT flag -+ * passed. -+ */ -+ //cpufreq_update_util(rq, SCHED_CPUFREQ_IOWAIT * p->in_iowait); -+} -+ -+static void block_task(struct rq *rq, struct task_struct *p) -+{ -+ sched_task_deactivate(p, rq); -+ -+ if (p->sched_contributes_to_load) -+ atomic_inc(&rq_srq(rq)->nr_uninterruptible); -+ -+ if (p->in_iowait) { -+ atomic_inc(&rq_srq(rq)->nr_iowait); -+ delayacct_blkio_start(); -+ } -+ -+ ASSERT_EXCLUSIVE_WRITER(p->on_rq); -+ -+ /* -+ * The moment this write goes through, ttwu() can swoop in and migrate -+ * this task, rendering our rq->__lock ineffective. -+ * -+ * __schedule() try_to_wake_up() -+ * LOCK rq->__lock LOCK p->pi_lock -+ * pick_next_task() -+ * pick_next_task_fair() -+ * pick_next_entity() -+ * dequeue_entities() -+ * __block_task() -+ * RELEASE p->on_rq = 0 if (p->on_rq && ...) -+ * break; -+ * -+ * ACQUIRE (after ctrl-dep) -+ * -+ * cpu = select_task_rq(); -+ * set_task_cpu(p, cpu); -+ * ttwu_queue() -+ * ttwu_do_activate() -+ * LOCK rq->__lock -+ * activate_task() -+ * STORE p->on_rq = 1 -+ * UNLOCK rq->__lock -+ * -+ * Callers must ensure to not reference @p after this -- we no longer -+ * own it. -+ */ -+ smp_store_release(&p->on_rq, 0); -+} -+ -+static inline void __set_task_cpu(struct task_struct *p, unsigned int cpu) -+{ -+ /* -+ * After ->cpu is set up to a new value, task_access_lock(p, ...) can be -+ * successfully executed on another CPU. We must ensure that updates of -+ * per-task data have been completed by this moment. -+ */ -+ smp_wmb(); -+ -+ WRITE_ONCE(task_thread_info(p)->cpu, cpu); -+ rseq_sched_set_ids_changed(p); -+} -+ -+static inline void set_task_cpu(struct task_struct *p, unsigned int new_cpu) -+{ -+ unsigned int state = READ_ONCE(p->__state); -+ -+ /* -+ * We should only call set_task_cpu() on a running task in pick_next_task(). -+ */ -+ WARN_ON_ONCE(state != TASK_RUNNING && !task_on_rq_queued(p) && -+ TASK_ON_RQ_WAKING != p->on_rq); -+ -+ /* -+ * Clearly, migrating tasks to offline CPUs is a fairly daft thing. -+ */ -+ WARN_ON_ONCE(!cpu_online(new_cpu)); -+ -+ /* -+ * We should not see migration disabled task be picked in pick_next_task(). -+ * If cpus_ptr changed on migration disabled task, __migrate_force_enable() -+ * will be called. -+ */ -+ WARN_ON_ONCE(is_migration_disabled(p)); -+ trace_sched_migrate_task(p, new_cpu); -+ -+ if (task_cpu(p) != new_cpu) -+ perf_event_task_migrate(p); -+ -+ __set_task_cpu(p, new_cpu); -+} -+ -+void ___migrate_enable(void) -+{ -+ struct task_struct *p = current; -+ __do_set_cpus_ptr(p, &p->cpus_mask); -+} -+EXPORT_SYMBOL_GPL(___migrate_enable); -+ -+void migrate_disable(void) -+{ -+ __migrate_disable(); -+} -+EXPORT_SYMBOL_GPL(migrate_disable); -+ -+void migrate_enable(void) -+{ -+ __migrate_enable(); -+} -+EXPORT_SYMBOL_GPL(migrate_enable); -+ -+static void __migrate_force_enable(struct task_struct *p, struct rq *rq) -+{ -+ if (likely(p->cpus_ptr != &p->cpus_mask)) -+ __do_set_cpus_ptr(p, &p->cpus_mask); -+ p->migration_disabled = 0; -+ /* When p is migrate_disabled, rq->lock should be held */ -+ rq->nr_pinned--; -+} -+ -+static inline bool rq_has_pinned_tasks(struct rq *rq) -+{ -+ return rq->nr_pinned; -+} -+ -+/* -+ * Per-CPU kthreads are allowed to run on !active && online CPUs, see -+ * __set_cpus_allowed_ptr() and select_fallback_rq(). -+ */ -+static inline bool is_cpu_allowed(struct task_struct *p, int cpu) -+{ -+ /* When not in the task's cpumask, no point in looking further. */ -+ if (!cpumask_test_cpu(cpu, p->cpus_ptr)) -+ return false; -+ -+ /* migrate_disabled() must be allowed to finish. */ -+ if (is_migration_disabled(p)) -+ return cpu_online(cpu); -+ -+ /* Non kernel threads are not allowed during either online or offline. */ -+ if (!(p->flags & PF_KTHREAD)) -+ return cpu_active(cpu) && task_cpu_possible(cpu, p); -+ -+ /* KTHREAD_IS_PER_CPU is always allowed. */ -+ if (kthread_is_per_cpu(p)) -+ return cpu_online(cpu); -+ -+ /* Regular kernel threads don't get to stay during offline. */ -+ if (cpu_dying(cpu)) -+ return false; -+ -+ /* But are allowed during online. */ -+ return cpu_online(cpu); -+} -+ -+static inline void mm_update_cpus_allowed(struct mm_struct *mm, const cpumask_t *affmask); -+ -+static inline void -+set_cpus_allowed_common(struct task_struct *p, struct affinity_context *ctx) -+{ -+ cpumask_copy(&p->cpus_mask, ctx->new_mask); -+ p->nr_cpus_allowed = cpumask_weight(ctx->new_mask); -+ mm_update_cpus_allowed(p->mm, ctx->new_mask); -+ -+ /* -+ * Swap in a new user_cpus_ptr if SCA_USER flag set -+ */ -+ if (ctx->flags & SCA_USER) -+ swap(p->user_cpus_ptr, ctx->user_mask); -+} -+ -+static void -+do_set_cpus_allowed(struct task_struct *p, struct affinity_context *ctx) -+{ -+ lockdep_assert_held(&p->pi_lock); -+ set_cpus_allowed_common(p, ctx); -+} -+ -+/* -+ * Used for kthread_bind() and select_fallback_rq(), in both cases the user -+ * affinity (if any) should be destroyed too. -+ */ -+void set_cpus_allowed_force(struct task_struct *p, const struct cpumask *new_mask) -+{ -+ struct affinity_context ac = { -+ .new_mask = new_mask, -+ .user_mask = NULL, -+ .flags = SCA_USER, /* clear the user requested mask */ -+ }; -+ union cpumask_rcuhead { -+ cpumask_t cpumask; -+ struct rcu_head rcu; -+ }; -+ -+ do_set_cpus_allowed(p, &ac); -+ -+ if (is_migration_disabled(p) && !cpumask_test_cpu(task_cpu(p), &p->cpus_mask)) -+ __migrate_force_enable(p, task_rq(p)); -+ -+ /* -+ * Because this is called with p->pi_lock held, it is not possible -+ * to use kfree() here (when PREEMPT_RT=y), therefore punt to using -+ * kfree_rcu(). -+ */ -+ kfree_rcu((union cpumask_rcuhead *)ac.user_mask, rcu); -+} -+ -+int dup_user_cpus_ptr(struct task_struct *dst, struct task_struct *src, -+ int node) -+{ -+ cpumask_t *user_mask; -+ unsigned long flags; -+ -+ /* -+ * Always clear dst->user_cpus_ptr first as their user_cpus_ptr's -+ * may differ by now due to racing. -+ */ -+ dst->user_cpus_ptr = NULL; -+ -+ /* -+ * This check is racy and losing the race is a valid situation. -+ * It is not worth the extra overhead of taking the pi_lock on -+ * every fork/clone. -+ */ -+ if (data_race(!src->user_cpus_ptr)) -+ return 0; -+ -+ user_mask = alloc_user_cpus_ptr(node); -+ if (!user_mask) -+ return -ENOMEM; -+ -+ /* -+ * Use pi_lock to protect content of user_cpus_ptr -+ * -+ * Though unlikely, user_cpus_ptr can be reset to NULL by a concurrent -+ * do_set_cpus_allowed(). -+ */ -+ raw_spin_lock_irqsave(&src->pi_lock, flags); -+ if (src->user_cpus_ptr) { -+ swap(dst->user_cpus_ptr, user_mask); -+ cpumask_copy(dst->user_cpus_ptr, src->user_cpus_ptr); -+ } -+ raw_spin_unlock_irqrestore(&src->pi_lock, flags); -+ -+ if (unlikely(user_mask)) -+ kfree(user_mask); -+ -+ return 0; -+} -+ -+static inline struct cpumask *clear_user_cpus_ptr(struct task_struct *p) -+{ -+ struct cpumask *user_mask = NULL; -+ -+ swap(p->user_cpus_ptr, user_mask); -+ -+ return user_mask; -+} -+ -+void release_user_cpus_ptr(struct task_struct *p) -+{ -+ kfree(clear_user_cpus_ptr(p)); -+} -+ -+/** -+ * task_curr - is this task currently executing on a CPU? -+ * @p: the task in question. -+ * -+ * Return: 1 if the task is currently executing. 0 otherwise. -+ */ -+inline int task_curr(const struct task_struct *p) -+{ -+ return cpu_curr(task_cpu(p)) == p; -+} -+ -+/*** -+ * kick_process - kick a running thread to enter/exit the kernel -+ * @p: the to-be-kicked thread -+ * -+ * Cause a process which is running on another CPU to enter -+ * kernel-mode, without any delay. (to get signals handled.) -+ * -+ * NOTE: this function doesn't have to take the runqueue lock, -+ * because all it wants to ensure is that the remote task enters -+ * the kernel. If the IPI races and the task has been migrated -+ * to another CPU then no harm is done and the purpose has been -+ * achieved as well. -+ */ -+void kick_process(struct task_struct *p) -+{ -+ guard(preempt)(); -+ int cpu = task_cpu(p); -+ -+ if ((cpu != smp_processor_id()) && task_curr(p)) -+ smp_send_reschedule(cpu); -+} -+EXPORT_SYMBOL_GPL(kick_process); -+ -+/* -+ * ->cpus_ptr is protected by both rq->lock and p->pi_lock -+ * -+ * A few notes on cpu_active vs cpu_online: -+ * -+ * - cpu_active must be a subset of cpu_online -+ * -+ * - on CPU-up we allow per-CPU kthreads on the online && !active CPU, -+ * see __set_cpus_allowed_ptr(). At this point the newly online -+ * CPU isn't yet part of the sched domains, and balancing will not -+ * see it. -+ * -+ * - on cpu-down we clear cpu_active() to mask the sched domains and -+ * avoid the load balancer to place new tasks on the to be removed -+ * CPU. Existing tasks will remain running there and will be taken -+ * off. -+ * -+ * This means that fallback selection must not select !active CPUs. -+ * And can assume that any active CPU must be online. Conversely -+ * select_task_rq() below may allow selection of !active CPUs in order -+ * to satisfy the above rules. -+ */ -+static int select_fallback_rq(int cpu, struct task_struct *p) -+{ -+ int nid = cpu_to_node(cpu); -+ const struct cpumask *nodemask = NULL; -+ enum { cpuset, possible, fail } state = cpuset; -+ int dest_cpu; -+ -+ /* -+ * If the node that the CPU is on has been offlined, cpu_to_node() -+ * will return -1. There is no CPU on the node, and we should -+ * select the CPU on the other node. -+ */ -+ if (nid != -1) { -+ nodemask = cpumask_of_node(nid); -+ -+ /* Look for allowed, online CPU in same node. */ -+ for_each_cpu(dest_cpu, nodemask) { -+ if (is_cpu_allowed(p, dest_cpu)) -+ return dest_cpu; -+ } -+ } -+ -+ for (;;) { -+ /* Any allowed, online CPU? */ -+ for_each_cpu(dest_cpu, p->cpus_ptr) { -+ if (!is_cpu_allowed(p, dest_cpu)) -+ continue; -+ goto out; -+ } -+ -+ /* No more Mr. Nice Guy. */ -+ switch (state) { -+ case cpuset: -+ if (cpuset_cpus_allowed_fallback(p)) { -+ state = possible; -+ break; -+ } -+ fallthrough; -+ case possible: -+ set_cpus_allowed_force(p, task_cpu_fallback_mask(p)); -+ state = fail; -+ break; -+ -+ case fail: -+ BUG(); -+ break; -+ } -+ } -+ -+out: -+ if (state != cpuset) { -+ /* -+ * Don't tell them about moving exiting tasks or -+ * kernel threads (both mm NULL), since they never -+ * leave kernel. -+ */ -+ if (p->mm && printk_ratelimit()) { -+ printk_deferred("process %d (%s) no longer affine to cpu%d\n", -+ task_pid_nr(p), p->comm, cpu); -+ } -+ } -+ -+ return dest_cpu; -+} -+ -+static inline void __resched_cpu(const int cpu) -+{ -+ struct rq *rq = cpu_rq(cpu); -+ -+ raw_spin_lock(&rq->lock); -+ resched_curr(rq); -+ raw_spin_unlock(&rq->lock); -+} -+ -+static inline struct rq * -+__wakeup_rq_trylock(const struct task_struct *p, const int sched_prio, const cpumask_t *filter) -+{ -+ struct rq *rq; -+ int idx, preempt_idx = SCHED_LEVELS - 1 - sched_prio, cpu = task_cpu(p); -+ const bool filter_test_cpu = cpumask_test_cpu(cpu, filter); -+ cpumask_t *end_mask = per_cpu(cpu_affinity_end_mask, cpu); -+ -+ for_each_set_bit (idx, cpu_sched_prio_bitmap, preempt_idx) { -+ cpumask_t *mask; -+ const struct cpumask *prio_mask = cpu_sched_prio_mask + idx; -+ -+ if (filter_test_cpu && cpumask_test_cpu(cpu, prio_mask)) { -+ rq = cpu_rq(cpu); -+ if (raw_spin_trylock(&rq->lock)) -+ return rq; -+ } -+ for (mask = per_cpu(cpu_affinity_masks, cpu); mask < end_mask; mask++) { -+ int i; -+ for_each_cpu_and (i, filter, mask) -+ if (cpumask_test_cpu(i, prio_mask)) { -+ rq = cpu_rq(i); -+ if (raw_spin_trylock(&rq->lock)) -+ return rq; -+ } -+ } -+ } -+ -+ return NULL; -+} -+ -+static inline struct rq *wakeup_rq_trylock(const struct task_struct *p) -+{ -+ const int sched_prio = task_sched_prio(p); -+ -+ if (1 == p->nr_cpus_allowed || is_migration_disabled(p)) { -+ /* Fastpath */ -+ const int cpu = cpumask_any(p->cpus_ptr); -+ -+ if (sched_prio < READ_ONCE(cpu_prio[cpu])) { -+ struct rq *rq = cpu_rq(cpu); -+ if (likely(raw_spin_trylock(&rq->lock))) -+ return rq; -+ } -+ -+ return NULL; -+ } -+ -+ return __wakeup_rq_trylock(p, sched_prio, p->cpus_ptr); -+} -+ -+static __always_inline void preempt_on_rq(struct task_struct *p, struct rq *rq) -+{ -+ int cpu = p->wake_cpu = cpu_of(rq); -+ -+ llist_add(&p->pq_node, per_cpu_ptr(&preempt_list, cpu)); -+ -+ resched_curr(rq); -+ -+ raw_spin_unlock(&rq->lock); -+} -+ -+static __always_inline void wakeup_preempt_on_rq(struct task_struct *p, struct rq *rq) -+{ -+ WRITE_ONCE(p->on_rq, TASK_ON_RQ_WAKING); -+ ASSERT_EXCLUSIVE_WRITER(p->on_rq); -+ -+ WRITE_ONCE(p->__state, TASK_RUNNING); -+ -+ preempt_on_rq(p, rq); -+} -+ -+void wakeup_modified_task(struct task_struct *p) -+{ -+ struct rq *rq = wakeup_rq_trylock(p); -+ -+ if (rq) { -+ WRITE_ONCE(p->on_rq, TASK_ON_RQ_WAKING); -+ ASSERT_EXCLUSIVE_WRITER(p->on_rq); -+ -+ preempt_on_rq(p, rq); -+ return; -+ } -+ -+ SRQ_ENQUEUE_TASK(&grq, p, -+ { -+ WRITE_ONCE(p->on_rq, TASK_ON_RQ_QUEUED); -+ ASSERT_EXCLUSIVE_WRITER(p->on_rq); -+ }); -+} -+ -+void sched_set_stop_task(int cpu, struct task_struct *stop) -+{ -+ static struct lock_class_key stop_pi_lock; -+ struct sched_param stop_param = { .sched_priority = STOP_PRIO }; -+ struct sched_param start_param = { .sched_priority = 0 }; -+ struct task_struct *old_stop = cpu_rq(cpu)->stop; -+ -+ if (stop) { -+ /* -+ * Make it appear like a SCHED_FIFO task, its something -+ * userspace knows about and won't get confused about. -+ * -+ * Also, it will make PI more or less work without too -+ * much confusion -- but then, stop work should not -+ * rely on PI working anyway. -+ */ -+ sched_setscheduler_nocheck(stop, SCHED_FIFO, &stop_param); -+ -+ /* -+ * The PI code calls rt_mutex_setprio() with ->pi_lock held to -+ * adjust the effective priority of a task. As a result, -+ * rt_mutex_setprio() can trigger (RT) balancing operations, -+ * which can then trigger wakeups of the stop thread to push -+ * around the current task. -+ * -+ * The stop task itself will never be part of the PI-chain, it -+ * never blocks, therefore that ->pi_lock recursion is safe. -+ * Tell lockdep about this by placing the stop->pi_lock in its -+ * own class. -+ */ -+ lockdep_set_class(&stop->pi_lock, &stop_pi_lock); -+ } -+ -+ cpu_rq(cpu)->stop = stop; -+ -+ if (old_stop) { -+ /* -+ * Reset it back to a normal scheduling policy so that -+ * it can die in pieces. -+ */ -+ sched_setscheduler_nocheck(old_stop, SCHED_NORMAL, &start_param); -+ } -+} -+ -+/* -+ * dummy_cpu_stop - this will be executed by a high-prio stopper thread and bump -+ * current thread off CPU to schedule rq, when switching out, this thread will be -+ * waken up on correct idle CPU, see finish_task() for detail. -+ */ -+static int dummy_cpu_stop(void *data) -+{ -+ return 0; -+} -+ -+static int affine_move_task(struct rq *rq, struct task_struct *p, struct rq_flags *rf) -+{ -+ /* Can the task run on the task's current CPU? If so, we're done */ -+ if (!cpumask_test_cpu(task_cpu(p), &p->cpus_mask)) { -+ if (is_migration_disabled(p)) -+ __migrate_force_enable(p, rq); -+ -+ if (task_on_cpu(p)) { -+ /* Need help from cpu stop thread: drop lock and wait. */ -+ __task_modify_unlock(p, rf); -+ raw_spin_unlock_irqrestore(&p->pi_lock, rf->flags); -+ stop_one_cpu(cpu_of(rq), dummy_cpu_stop, p); -+ return 0; -+ } -+ /* Nothing we should do for task_on_rq_queued(p) */ -+ } -+ __task_modify_unlock(p, rf); -+ raw_spin_unlock_irqrestore(&p->pi_lock, rf->flags); -+ return 0; -+} -+ -+static int __set_cpus_allowed_ptr_locked(struct task_struct *p, -+ struct affinity_context *ctx, -+ struct rq *rq, -+ struct rq_flags *rf) -+{ -+ const struct cpumask *cpu_allowed_mask = task_cpu_possible_mask(p); -+ bool kthread = p->flags & PF_KTHREAD; -+ int ret = 0; -+ -+ /* -+ * Kernel threads are allowed on online && !active CPUs, -+ * however, during cpu-hot-unplug, even these might get pushed -+ * away if not KTHREAD_IS_PER_CPU. -+ * -+ * Specifically, migration_disabled() tasks must not fail the -+ * cpumask_any_and_distribute() pick below, esp. so on -+ * SCA_MIGRATE_ENABLE, otherwise we'll not call -+ * set_cpus_allowed_common() and actually reset p->cpus_ptr. -+ */ -+ if (unlikely(cpumask_empty(ctx->new_mask))) { -+ ret = -EINVAL; -+ goto out; -+ } -+ -+ if (!kthread && !cpumask_subset(ctx->new_mask, cpu_allowed_mask)) { -+ ret = -EINVAL; -+ goto out; -+ } -+ -+ /* -+ * Must re-check here, to close a race against __kthread_bind(), -+ * sched_setaffinity() is not guaranteed to observe the flag. -+ */ -+ if ((ctx->flags & SCA_CHECK) && (p->flags & PF_NO_SETAFFINITY)) { -+ ret = -EINVAL; -+ goto out; -+ } -+ -+ if (cpumask_equal(&p->cpus_mask, ctx->new_mask)) { -+ if (ctx->flags & SCA_USER) -+ swap(p->user_cpus_ptr, ctx->user_mask); -+ goto out; -+ } -+ -+ do_set_cpus_allowed(p, ctx); -+ -+ return affine_move_task(rq, p, rf); -+ -+out: -+ __task_modify_unlock(p, rf); -+ raw_spin_unlock_irqrestore(&p->pi_lock, rf->flags); -+ -+ return ret; -+} -+ -+/* -+ * Change a given task's CPU affinity. Migrate the thread to a -+ * is removed from the allowed bitmask. -+ * -+ * NOTE: the caller must have a valid reference to the task, the -+ * task must not exit() & deallocate itself prematurely. The -+ * call is not atomic; no spinlocks may be held. -+ */ -+int __set_cpus_allowed_ptr(struct task_struct *p, -+ struct affinity_context *ctx) -+{ -+ struct rq *rq; -+ struct rq_flags rf; -+ -+ raw_spin_lock_irqsave(&p->pi_lock, rf.flags); -+ rq = __task_modify_lock(p, &rf); -+ /* -+ * Masking should be skipped if SCA_USER or any of the SCA_MIGRATE_* -+ * flags are set. -+ */ -+ if (p->user_cpus_ptr && -+ !(ctx->flags & SCA_USER) && -+ cpumask_and(rq->scratch_mask, ctx->new_mask, p->user_cpus_ptr)) -+ ctx->new_mask = rq->scratch_mask; -+ -+ -+ return __set_cpus_allowed_ptr_locked(p, ctx, rq, &rf); -+} -+ -+int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask) -+{ -+ struct affinity_context ac = { -+ .new_mask = new_mask, -+ .flags = 0, -+ }; -+ -+ return __set_cpus_allowed_ptr(p, &ac); -+} -+EXPORT_SYMBOL_GPL(set_cpus_allowed_ptr); -+ -+/* -+ * Change a given task's CPU affinity to the intersection of its current -+ * affinity mask and @subset_mask, writing the resulting mask to @new_mask. -+ * If user_cpus_ptr is defined, use it as the basis for restricting CPU -+ * affinity or use cpu_online_mask instead. -+ * -+ * If the resulting mask is empty, leave the affinity unchanged and return -+ * -EINVAL. -+ */ -+static int restrict_cpus_allowed_ptr(struct task_struct *p, -+ struct cpumask *new_mask, -+ const struct cpumask *subset_mask) -+{ -+ struct affinity_context ac = { -+ .new_mask = new_mask, -+ .flags = 0, -+ }; -+ struct rq *rq; -+ struct rq_flags rf; -+ int err; -+ -+ raw_spin_lock_irqsave(&p->pi_lock, rf.flags); -+ rq = __task_modify_lock(p, &rf); -+ -+ if (!cpumask_and(new_mask, task_user_cpus(p), subset_mask)) { -+ err = -EINVAL; -+ goto err_unlock; -+ } -+ -+ return __set_cpus_allowed_ptr_locked(p, &ac, rq, &rf); -+ -+err_unlock: -+ __task_modify_unlock(p, &rf); -+ raw_spin_unlock_irqrestore(&p->pi_lock, rf.flags); -+ return err; -+} -+ -+/* -+ * Restrict the CPU affinity of task @p so that it is a subset of -+ * task_cpu_possible_mask() and point @p->user_cpus_ptr to a copy of the -+ * old affinity mask. If the resulting mask is empty, we warn and walk -+ * up the cpuset hierarchy until we find a suitable mask. -+ */ -+void force_compatible_cpus_allowed_ptr(struct task_struct *p) -+{ -+ cpumask_var_t new_mask; -+ const struct cpumask *override_mask = task_cpu_possible_mask(p); -+ -+ alloc_cpumask_var(&new_mask, GFP_KERNEL); -+ -+ /* -+ * __migrate_task() can fail silently in the face of concurrent -+ * offlining of the chosen destination CPU, so take the hotplug -+ * lock to ensure that the migration succeeds. -+ */ -+ cpus_read_lock(); -+ if (!cpumask_available(new_mask)) -+ goto out_set_mask; -+ -+ if (!restrict_cpus_allowed_ptr(p, new_mask, override_mask)) -+ goto out_free_mask; -+ -+ /* -+ * We failed to find a valid subset of the affinity mask for the -+ * task, so override it based on its cpuset hierarchy. -+ */ -+ cpuset_cpus_allowed(p, new_mask); -+ override_mask = new_mask; -+ -+out_set_mask: -+ if (printk_ratelimit()) { -+ printk_deferred("Overriding affinity for process %d (%s) to CPUs %*pbl\n", -+ task_pid_nr(p), p->comm, -+ cpumask_pr_args(override_mask)); -+ } -+ -+ WARN_ON(set_cpus_allowed_ptr(p, override_mask)); -+out_free_mask: -+ cpus_read_unlock(); -+ free_cpumask_var(new_mask); -+} -+ -+/* -+ * Restore the affinity of a task @p which was previously restricted by a -+ * call to force_compatible_cpus_allowed_ptr(). -+ * -+ * It is the caller's responsibility to serialise this with any calls to -+ * force_compatible_cpus_allowed_ptr(@p). -+ */ -+void relax_compatible_cpus_allowed_ptr(struct task_struct *p) -+{ -+ struct affinity_context ac = { -+ .new_mask = task_user_cpus(p), -+ .flags = 0, -+ }; -+ int ret; -+ -+ /* -+ * Try to restore the old affinity mask with __sched_setaffinity(). -+ * Cpuset masking will be done there too. -+ */ -+ ret = __sched_setaffinity(p, &ac); -+ WARN_ON_ONCE(ret); -+} -+ -+static void -+ttwu_stat(struct task_struct *p, int cpu, int wake_flags) -+{ -+ struct rq *rq; -+ -+ if (!schedstat_enabled()) -+ return; -+ -+ rq = this_rq(); -+ -+ if (cpu == rq->cpu) { -+ __schedstat_inc(rq->ttwu_local); -+ __schedstat_inc(p->stats.nr_wakeups_local); -+ } else { -+ /** Alt schedule FW ToDo: -+ * How to do ttwu_wake_remote -+ */ -+ } -+ -+ __schedstat_inc(rq->ttwu_count); -+ __schedstat_inc(p->stats.nr_wakeups); -+} -+ -+/* -+ * Mark the task runnable. -+ */ -+static inline void ttwu_do_wakeup(struct task_struct *p) -+{ -+ WRITE_ONCE(p->__state, TASK_RUNNING); -+ trace_sched_wakeup(p); -+} -+ -+static inline void ttwu_do_activate(struct task_struct *p, int wake_flags) -+{ -+ struct sched_run_queue *srq = cpu_srq(0); -+ struct rq *rq; -+ -+ if (p->sched_contributes_to_load) -+ atomic_dec(&srq->nr_uninterruptible); -+ -+ if (p->in_iowait) { -+ delayacct_blkio_end(p); -+ atomic_dec(&srq->nr_iowait); -+ } -+ -+ trace_sched_wakeup(p); -+ -+ if ((wake_flags & WF_CURRENT_CPU) && cpumask_test_cpu(smp_processor_id(), p->cpus_ptr)) { -+ rq = this_rq(); -+ raw_spin_lock(&rq->lock); -+ } else -+ rq = wakeup_rq_trylock(p); -+ -+ if (rq) { -+ if (unlikely(!cpumask_test_cpu(cpu_of(rq), cpu_active_mask))) { -+ raw_spin_unlock(&rq->lock); -+ rq = cpu_rq(select_fallback_rq(task_cpu(p), p)); -+ raw_spin_lock(&rq->lock); -+ } -+ -+ wakeup_preempt_on_rq(p, rq); -+ } else -+ activate_task(p, srq); -+} -+ -+/* -+ * Consider @p being inside a wait loop: -+ * -+ * for (;;) { -+ * set_current_state(TASK_UNINTERRUPTIBLE); -+ * -+ * if (CONDITION) -+ * break; -+ * -+ * schedule(); -+ * } -+ * __set_current_state(TASK_RUNNING); -+ * -+ * between set_current_state() and schedule(). In this case @p is still -+ * runnable, so all that needs doing is change p->state back to TASK_RUNNING in -+ * an atomic manner. -+ * -+ * By taking task_rq(p)->lock we serialize against schedule(), if @p->on_rq -+ * then schedule() must still happen and p->state can be changed to -+ * TASK_RUNNING. Otherwise we lost the race, schedule() has happened, and we -+ * need to do a full wakeup with enqueue. -+ * -+ * Returns: %true when the wakeup is done, -+ * %false otherwise. -+ */ -+static int ttwu_runnable(struct task_struct *p, int wake_flags) -+{ -+ struct rq *rq; -+ int ret = 0; -+ -+ rq = task_rq(p); -+ raw_spin_lock(&rq->lock); -+ if (task_on_rq_queued(p)) { -+ update_rq_clock(rq); -+ if (!task_on_cpu(p)) { -+ /* -+ * When on_rq && !on_cpu the task is preempted, see if -+ * it should preempt the task that is current now. -+ */ -+ if (task_sched_prio(p) < READ_ONCE(cpu_prio[cpu_of(rq)])) { -+ resched_curr(rq); -+ } -+ } -+ ttwu_do_wakeup(p); -+ ret = 1; -+ } -+ raw_spin_unlock(&rq->lock); -+ -+ return ret; -+} -+ -+void sched_ttwu_pending(void *arg) -+{ -+ struct llist_node *llist = arg; -+ struct rq *rq = this_rq(); -+ struct task_struct *p, *t; -+ struct rq_flags rf; -+ -+ if (!llist) -+ return; -+ -+ rq_lock_irqsave(rq, &rf); -+ update_rq_clock(rq); -+ -+ llist_for_each_entry_safe(p, t, llist, wake_entry.llist) { -+ if (WARN_ON_ONCE(p->on_cpu)) -+ smp_cond_load_acquire(&p->on_cpu, !VAL); -+ -+ if (WARN_ON_ONCE(task_cpu(p) != cpu_of(rq))) -+ set_task_cpu(p, cpu_of(rq)); -+ -+ ttwu_do_activate(p, p->sched_remote_wakeup ? WF_MIGRATED : 0); -+ } -+ -+ /* -+ * Must be after enqueueing at least once task such that -+ * idle_cpu() does not observe a false-negative -- if it does, -+ * it is possible for select_idle_siblings() to stack a number -+ * of tasks on this CPU during that window. -+ * -+ * It is OK to clear ttwu_pending when another task pending. -+ * We will receive IPI after local IRQ enabled and then enqueue it. -+ * Since now nr_running > 0, idle_cpu() will always get correct result. -+ */ -+ WRITE_ONCE(rq->ttwu_pending, 0); -+ rq_unlock_irqrestore(rq, &rf); -+} -+ -+/* -+ * Prepare the scene for sending an IPI for a remote smp_call -+ * -+ * Returns true if the caller can proceed with sending the IPI. -+ * Returns false otherwise. -+ */ -+bool call_function_single_prep_ipi(int cpu) -+{ -+ if (set_nr_if_polling(cpu_rq(cpu)->idle)) { -+ trace_sched_wake_idle_without_ipi(cpu); -+ return false; -+ } -+ -+ return true; -+} -+ -+/* -+ * Queue a task on the target CPUs wake_list and wake the CPU via IPI if -+ * necessary. The wakee CPU on receipt of the IPI will queue the task -+ * via sched_ttwu_wakeup() for activation so the wakee incurs the cost -+ * of the wakeup instead of the waker. -+ */ -+static void __ttwu_queue_wakelist(struct task_struct *p, int cpu, int wake_flags) -+{ -+ struct rq *rq = cpu_rq(cpu); -+ -+ p->sched_remote_wakeup = !!(wake_flags & WF_MIGRATED); -+ -+ WRITE_ONCE(rq->ttwu_pending, 1); -+ __smp_call_single_queue(cpu, &p->wake_entry.llist); -+} -+ -+static inline bool ttwu_queue_cond(struct task_struct *p, int cpu) -+{ -+ int this_cpu = smp_processor_id(); -+ -+ /* -+ * Do not complicate things with the async wake_list while the CPU is -+ * in hotplug state. -+ */ -+ if (!cpu_active(cpu)) -+ return false; -+ -+ /* Ensure the task will still be allowed to run on the CPU. */ -+ if (!cpumask_test_cpu(cpu, p->cpus_ptr)) -+ return false; -+ -+ /* -+ * If the CPU does not share cache, then queue the task on the -+ * remote rqs wakelist to avoid accessing remote data. -+ */ -+ if (!cpus_share_cache(this_cpu, cpu)) -+ return true; -+ -+ if (cpu == this_cpu) -+ return false; -+ -+ /* -+ * If the wakee cpu is idle, or the task is descheduling and the -+ * only running task on the CPU, then use the wakelist to offload -+ * the task activation to the idle (or soon-to-be-idle) CPU as -+ * the current CPU is likely busy. nr_running is checked to -+ * avoid unnecessary task stacking. -+ * -+ * Note that we can only get here with (wakee) p->on_rq=0, -+ * p->on_cpu can be whatever, we've done the dequeue, so -+ * the wakee has been accounted out of ->nr_running. -+ */ -+ if (cpumask_test_cpu(cpu, sched_idle_mask) && !srq_nr_queued(cpu) && -+ is_preempt_list_empty(cpu)) -+ return true; -+ -+ return false; -+} -+ -+static bool ttwu_queue_wakelist(struct task_struct *p, int cpu, int wake_flags) -+{ -+ if (__is_defined(ALT_SCHED_TTWU_QUEUE) && ttwu_queue_cond(p, cpu)) { -+ sched_clock_cpu(cpu); /* Sync clocks across CPUs */ -+ __ttwu_queue_wakelist(p, cpu, wake_flags); -+ return true; -+ } -+ -+ return false; -+} -+ -+void wake_up_if_idle(int cpu) -+{ -+ struct rq *rq = cpu_rq(cpu); -+ -+ guard(rcu)(); -+ if (is_idle_task(rcu_dereference(rq->curr))) { -+ guard(raw_spinlock_irqsave)(&rq->lock); -+ if (is_idle_task(rq->curr)) -+ resched_curr(rq); -+ } -+} -+ -+extern struct static_key_false sched_asym_cpucapacity; -+ -+static __always_inline bool sched_asym_cpucap_active(void) -+{ -+ return static_branch_unlikely(&sched_asym_cpucapacity); -+} -+ -+bool cpus_equal_capacity(int this_cpu, int that_cpu) -+{ -+ if (!sched_asym_cpucap_active()) -+ return true; -+ -+ if (this_cpu == that_cpu) -+ return true; -+ -+ return arch_scale_cpu_capacity(this_cpu) == arch_scale_cpu_capacity(that_cpu); -+} -+ -+static inline void ttwu_queue(struct task_struct *p, int wake_flags) -+{ -+ if (ttwu_queue_wakelist(p, 0, wake_flags)) -+ return; -+ -+ ttwu_do_activate(p, wake_flags); -+} -+ -+/* -+ * Invoked from try_to_wake_up() to check whether the task can be woken up. -+ * -+ * The caller holds p::pi_lock if p != current or has preemption -+ * disabled when p == current. -+ * -+ * The rules of saved_state: -+ * -+ * The related locking code always holds p::pi_lock when updating -+ * p::saved_state, which means the code is fully serialized in both cases. -+ * -+ * For PREEMPT_RT, the lock wait and lock wakeups happen via TASK_RTLOCK_WAIT. -+ * No other bits set. This allows to distinguish all wakeup scenarios. -+ * -+ * For FREEZER, the wakeup happens via TASK_FROZEN. No other bits set. This -+ * allows us to prevent early wakeup of tasks before they can be run on -+ * asymmetric ISA architectures (eg ARMv9). -+ */ -+static __always_inline -+bool ttwu_state_match(struct task_struct *p, unsigned int state, int *success) -+{ -+ int match; -+ -+ if (IS_ENABLED(CONFIG_DEBUG_PREEMPT)) { -+ WARN_ON_ONCE((state & TASK_RTLOCK_WAIT) && -+ state != TASK_RTLOCK_WAIT); -+ } -+ -+ *success = !!(match = __task_state_match(p, state)); -+ -+ /* -+ * Saved state preserves the task state across blocking on -+ * an RT lock or TASK_FREEZABLE tasks. If the state matches, -+ * set p::saved_state to TASK_RUNNING, but do not wake the task -+ * because it waits for a lock wakeup or __thaw_task(). Also -+ * indicate success because from the regular waker's point of -+ * view this has succeeded. -+ * -+ * After acquiring the lock the task will restore p::__state -+ * from p::saved_state which ensures that the regular -+ * wakeup is not lost. The restore will also set -+ * p::saved_state to TASK_RUNNING so any further tests will -+ * not result in false positives vs. @success -+ */ -+ if (match < 0) -+ p->saved_state = TASK_RUNNING; -+ -+ return match > 0; -+} -+ -+/* -+ * Notes on Program-Order guarantees on SMP systems. -+ * -+ * MIGRATION -+ * -+ * The basic program-order guarantee on SMP systems is that when a task [t] -+ * migrates, all its activity on its old CPU [c0] happens-before any subsequent -+ * execution on its new CPU [c1]. -+ * -+ * For migration (of runnable tasks) this is provided by the following means: -+ * -+ * A) UNLOCK of the rq(c0)->lock scheduling out task t -+ * B) migration for t is required to synchronize *both* rq(c0)->lock and -+ * rq(c1)->lock (if not at the same time, then in that order). -+ * C) LOCK of the rq(c1)->lock scheduling in task -+ * -+ * Transitivity guarantees that B happens after A and C after B. -+ * Note: we only require RCpc transitivity. -+ * Note: the CPU doing B need not be c0 or c1 -+ * -+ * Example: -+ * -+ * CPU0 CPU1 CPU2 -+ * -+ * LOCK rq(0)->lock -+ * sched-out X -+ * sched-in Y -+ * UNLOCK rq(0)->lock -+ * -+ * LOCK rq(0)->lock // orders against CPU0 -+ * dequeue X -+ * UNLOCK rq(0)->lock -+ * -+ * LOCK rq(1)->lock -+ * enqueue X -+ * UNLOCK rq(1)->lock -+ * -+ * LOCK rq(1)->lock // orders against CPU2 -+ * sched-out Z -+ * sched-in X -+ * UNLOCK rq(1)->lock -+ * -+ * -+ * BLOCKING -- aka. SLEEP + WAKEUP -+ * -+ * For blocking we (obviously) need to provide the same guarantee as for -+ * migration. However the means are completely different as there is no lock -+ * chain to provide order. Instead we do: -+ * -+ * 1) smp_store_release(X->on_cpu, 0) -- finish_task() -+ * 2) smp_cond_load_acquire(!X->on_cpu) -- try_to_wake_up() -+ * -+ * Example: -+ * -+ * CPU0 (schedule) CPU1 (try_to_wake_up) CPU2 (schedule) -+ * -+ * LOCK rq(0)->lock LOCK X->pi_lock -+ * dequeue X -+ * sched-out X -+ * smp_store_release(X->on_cpu, 0); -+ * -+ * smp_cond_load_acquire(&X->on_cpu, !VAL); -+ * X->state = WAKING -+ * set_task_cpu(X,2) -+ * -+ * LOCK rq(2)->lock -+ * enqueue X -+ * X->state = RUNNING -+ * UNLOCK rq(2)->lock -+ * -+ * LOCK rq(2)->lock // orders against CPU1 -+ * sched-out Z -+ * sched-in X -+ * UNLOCK rq(2)->lock -+ * -+ * UNLOCK X->pi_lock -+ * UNLOCK rq(0)->lock -+ * -+ * -+ * However; for wakeups there is a second guarantee we must provide, namely we -+ * must observe the state that lead to our wakeup. That is, not only must our -+ * task observe its own prior state, it must also observe the stores prior to -+ * its wakeup. -+ * -+ * This means that any means of doing remote wakeups must order the CPU doing -+ * the wakeup against the CPU the task is going to end up running on. This, -+ * however, is already required for the regular Program-Order guarantee above, -+ * since the waking CPU is the one issueing the ACQUIRE (smp_cond_load_acquire). -+ * -+ */ -+ -+/** -+ * try_to_wake_up - wake up a thread -+ * @p: the thread to be awakened -+ * @state: the mask of task states that can be woken -+ * @wake_flags: wake modifier flags (WF_*) -+ * -+ * Conceptually does: -+ * -+ * If (@state & @p->state) @p->state = TASK_RUNNING. -+ * -+ * If the task was not queued/runnable, also place it back on a runqueue. -+ * -+ * This function is atomic against schedule() which would dequeue the task. -+ * -+ * It issues a full memory barrier before accessing @p->state, see the comment -+ * with set_current_state(). -+ * -+ * Uses p->pi_lock to serialize against concurrent wake-ups. -+ * -+ * Relies on p->pi_lock stabilizing: -+ * - p->sched_class -+ * - p->cpus_ptr -+ * - p->sched_task_group -+ * in order to do migration, see its use of select_task_rq()/set_task_cpu(). -+ * -+ * Tries really hard to only take one task_rq(p)->lock for performance. -+ * Takes rq->lock in: -+ * - ttwu_runnable() -- old rq, unavoidable, see comment there; -+ * - ttwu_queue() -- new rq, for enqueue of the task; -+ * - psi_ttwu_dequeue() -- much sadness :-( accounting will kill us. -+ * -+ * As a consequence we race really badly with just about everything. See the -+ * many memory barriers and their comments for details. -+ * -+ * Return: %true if @p->state changes (an actual wakeup was done), -+ * %false otherwise. -+ */ -+int try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) -+{ -+ guard(preempt)(); -+ int success = 0; -+ -+ if (p == current) { -+ /* -+ * We're waking current, this means 'p->on_rq' and 'task_cpu(p) -+ * == smp_processor_id()'. Together this means we can special -+ * case the whole 'p->on_rq && ttwu_runnable()' case below -+ * without taking any locks. -+ * -+ * In particular: -+ * - we rely on Program-Order guarantees for all the ordering, -+ * - we're serialized against set_special_state() by virtue of -+ * it disabling IRQs (this allows not taking ->pi_lock). -+ */ -+ if (!ttwu_state_match(p, state, &success)) -+ goto out; -+ -+ trace_sched_waking(p); -+ ttwu_do_wakeup(p); -+ goto out; -+ } -+ -+ /* -+ * If we are going to wake up a thread waiting for CONDITION we -+ * need to ensure that CONDITION=1 done by the caller can not be -+ * reordered with p->state check below. This pairs with smp_store_mb() -+ * in set_current_state() that the waiting thread does. -+ */ -+ scoped_guard (raw_spinlock_irqsave, &p->pi_lock) { -+ smp_mb__after_spinlock(); -+ if (!ttwu_state_match(p, state, &success)) -+ break; -+ -+ trace_sched_waking(p); -+ -+ /* -+ * Ensure we load p->on_rq _after_ p->state, otherwise it would -+ * be possible to, falsely, observe p->on_rq == 0 and get stuck -+ * in smp_cond_load_acquire() below. -+ * -+ * sched_ttwu_pending() try_to_wake_up() -+ * STORE p->on_rq = 1 LOAD p->state -+ * UNLOCK rq->lock -+ * -+ * __schedule() (switch to task 'p') -+ * LOCK rq->lock smp_rmb(); -+ * smp_mb__after_spinlock(); -+ * UNLOCK rq->lock -+ * -+ * [task p] -+ * STORE p->state = UNINTERRUPTIBLE LOAD p->on_rq -+ * -+ * Pairs with the LOCK+smp_mb__after_spinlock() on rq->lock in -+ * __schedule(). See the comment for smp_mb__after_spinlock(). -+ * -+ * A similar smp_rmb() lives in __task_needs_rq_lock(). -+ */ -+ smp_rmb(); -+ if (READ_ONCE(p->on_rq) && ttwu_runnable(p, wake_flags)) -+ break; -+ -+ /* -+ * Ensure we load p->on_cpu _after_ p->on_rq, otherwise it would be -+ * possible to, falsely, observe p->on_cpu == 0. -+ * -+ * One must be running (->on_cpu == 1) in order to remove oneself -+ * from the runqueue. -+ * -+ * __schedule() (switch to task 'p') try_to_wake_up() -+ * STORE p->on_cpu = 1 LOAD p->on_rq -+ * UNLOCK rq->lock -+ * -+ * __schedule() (put 'p' to sleep) -+ * LOCK rq->lock smp_rmb(); -+ * smp_mb__after_spinlock(); -+ * STORE p->on_rq = 0 LOAD p->on_cpu -+ * -+ * Pairs with the LOCK+smp_mb__after_spinlock() on rq->lock in -+ * __schedule(). See the comment for smp_mb__after_spinlock(). -+ * -+ * Form a control-dep-acquire with p->on_rq == 0 above, to ensure -+ * schedule()'s block_task() has 'happened' and p will no longer -+ * care about it's own p->state. See the comment in __schedule(). -+ */ -+ smp_acquire__after_ctrl_dep(); -+ -+ /* -+ * We're doing the wakeup (@success == 1), they did a dequeue (p->on_rq -+ * == 0), which means we need to do an enqueue, change p->state to -+ * TASK_WAKING such that we can unlock p->pi_lock before doing the -+ * enqueue, such as ttwu_queue_wakelist(). -+ */ -+ WRITE_ONCE(p->__state, TASK_WAKING); -+ -+ /* -+ * If the owning (remote) CPU is still in the middle of schedule() with -+ * this task as prev, considering queueing p on the remote CPUs wake_list -+ * which potentially sends an IPI instead of spinning on p->on_cpu to -+ * let the waker make forward progress. This is safe because IRQs are -+ * disabled and the IPI will deliver after on_cpu is cleared. -+ * -+ * Ensure we load task_cpu(p) after p->on_cpu: -+ * -+ * set_task_cpu(p, cpu); -+ * STORE p->cpu = @cpu -+ * __schedule() (switch to task 'p') -+ * LOCK rq->lock -+ * smp_mb__after_spin_lock() smp_cond_load_acquire(&p->on_cpu) -+ * STORE p->on_cpu = 1 LOAD p->cpu -+ * -+ * to ensure we observe the correct CPU on which the task is currently -+ * scheduling. -+ */ -+ if (smp_load_acquire(&p->on_cpu) && -+ ttwu_queue_wakelist(p, task_cpu(p), wake_flags)) -+ break; -+ -+ /* -+ * If the owning (remote) CPU is still in the middle of schedule() with -+ * this task as prev, wait until it's done referencing the task. -+ * -+ * Pairs with the smp_store_release() in finish_task(). -+ * -+ * This ensures that tasks getting woken will be fully ordered against -+ * their previous state and preserve Program Order. -+ */ -+ smp_cond_load_acquire(&p->on_cpu, !VAL); -+ -+ sched_task_ttwu(p); -+ -+ ttwu_queue(p, wake_flags); -+ } -+out: -+ if (success) -+ ttwu_stat(p, task_cpu(p), wake_flags); -+ -+ return success; -+} -+ -+static bool __task_needs_rq_lock(struct task_struct *p) -+{ -+ unsigned int state = READ_ONCE(p->__state); -+ -+ /* -+ * Since pi->lock blocks try_to_wake_up(), we don't need rq->lock when -+ * the task is blocked. Make sure to check @state since ttwu() can drop -+ * locks at the end, see ttwu_queue_wakelist(). -+ */ -+ if (state == TASK_RUNNING || state == TASK_WAKING) -+ return true; -+ -+ /* -+ * Ensure we load p->on_rq after p->__state, otherwise it would be -+ * possible to, falsely, observe p->on_rq == 0. -+ * -+ * See try_to_wake_up() for a longer comment. -+ */ -+ smp_rmb(); -+ if (p->on_rq) -+ return true; -+ -+ /* -+ * Ensure the task has finished __schedule() and will not be referenced -+ * anymore. Again, see try_to_wake_up() for a longer comment. -+ */ -+ smp_rmb(); -+ smp_cond_load_acquire(&p->on_cpu, !VAL); -+ -+ return false; -+} -+ -+/** -+ * task_call_func - Invoke a function on task in fixed state -+ * @p: Process for which the function is to be invoked, can be @current. -+ * @func: Function to invoke. -+ * @arg: Argument to function. -+ * -+ * Fix the task in it's current state by avoiding wakeups and or rq operations -+ * and call @func(@arg) on it. This function can use task_is_runnable() and -+ * task_curr() to work out what the state is, if required. Given that @func -+ * can be invoked with a runqueue lock held, it had better be quite -+ * lightweight. -+ * -+ * Returns: -+ * Whatever @func returns -+ */ -+int task_call_func(struct task_struct *p, task_call_f func, void *arg) -+{ -+ struct rq *rq = NULL; -+ struct rq_flags rf; -+ int ret; -+ -+ raw_spin_lock_irqsave(&p->pi_lock, rf.flags); -+ -+ if (__task_needs_rq_lock(p)) -+ rq = __task_rq_lock(p, &rf); -+ -+ /* -+ * At this point the task is pinned; either: -+ * - blocked and we're holding off wakeups (pi->lock) -+ * - woken, and we're holding off enqueue (rq->lock) -+ * - queued, and we're holding off schedule (rq->lock) -+ * - running, and we're holding off de-schedule (rq->lock) -+ * -+ * The called function (@func) can use: task_curr(), p->on_rq and -+ * p->__state to differentiate between these states. -+ */ -+ ret = func(p, arg); -+ -+ if (rq) -+ __task_rq_unlock(&rf); -+ -+ raw_spin_unlock_irqrestore(&p->pi_lock, rf.flags); -+ return ret; -+} -+ -+/** -+ * cpu_curr_snapshot - Return a snapshot of the currently running task -+ * @cpu: The CPU on which to snapshot the task. -+ * -+ * Returns the task_struct pointer of the task "currently" running on -+ * the specified CPU. If the same task is running on that CPU throughout, -+ * the return value will be a pointer to that task's task_struct structure. -+ * If the CPU did any context switches even vaguely concurrently with the -+ * execution of this function, the return value will be a pointer to the -+ * task_struct structure of a randomly chosen task that was running on -+ * that CPU somewhere around the time that this function was executing. -+ * -+ * If the specified CPU was offline, the return value is whatever it -+ * is, perhaps a pointer to the task_struct structure of that CPU's idle -+ * task, but there is no guarantee. Callers wishing a useful return -+ * value must take some action to ensure that the specified CPU remains -+ * online throughout. -+ * -+ * This function executes full memory barriers before and after fetching -+ * the pointer, which permits the caller to confine this function's fetch -+ * with respect to the caller's accesses to other shared variables. -+ */ -+struct task_struct *cpu_curr_snapshot(int cpu) -+{ -+ struct task_struct *t; -+ -+ smp_mb(); /* Pairing determined by caller's synchronization design. */ -+ t = rcu_dereference(cpu_curr(cpu)); -+ smp_mb(); /* Pairing determined by caller's synchronization design. */ -+ return t; -+} -+ -+/** -+ * wake_up_process - Wake up a specific process -+ * @p: The process to be woken up. -+ * -+ * Attempt to wake up the nominated process and move it to the set of runnable -+ * processes. -+ * -+ * Return: 1 if the process was woken up, 0 if it was already running. -+ * -+ * This function executes a full memory barrier before accessing the task state. -+ */ -+int wake_up_process(struct task_struct *p) -+{ -+ return try_to_wake_up(p, TASK_NORMAL, 0); -+} -+EXPORT_SYMBOL(wake_up_process); -+ -+int wake_up_state(struct task_struct *p, unsigned int state) -+{ -+ return try_to_wake_up(p, state, 0); -+} -+ -+/* -+ * Perform scheduler related setup for a newly forked process p. -+ * p is forked by current. -+ * -+ * __sched_fork() is basic setup which is also used by sched_init() to -+ * initialize the boot CPU's idle task. -+ */ -+static inline void __sched_fork(u64 clone_flags, struct task_struct *p) -+{ -+ p->on_rq = 0; -+ p->on_cpu = 0; -+ p->utime = 0; -+ p->stime = 0; -+ p->sched_time = 0; -+ -+#ifdef CONFIG_SCHEDSTATS -+ /* Even if schedstat is disabled, there should not be garbage */ -+ memset(&p->stats, 0, sizeof(p->stats)); -+#endif -+ -+#ifdef CONFIG_PREEMPT_NOTIFIERS -+ INIT_HLIST_HEAD(&p->preempt_notifiers); -+#endif -+ -+#ifdef CONFIG_COMPACTION -+ p->capture_control = NULL; -+#endif -+ p->wake_entry.u_flags = CSD_TYPE_TTWU; -+} -+ -+/* -+ * fork()/clone()-time setup: -+ */ -+int sched_fork(u64 clone_flags, struct task_struct *p) -+{ -+ __sched_fork(clone_flags, p); -+ /* -+ * We mark the process as NEW here. This guarantees that -+ * nobody will actually run it, and a signal or other external -+ * event cannot wake it up and insert it on the runqueue either. -+ */ -+ p->__state = TASK_NEW; -+ -+ /* -+ * Make sure we do not leak PI boosting priority to the child. -+ */ -+ p->prio = current->normal_prio; -+ -+ /* -+ * Revert to default priority/policy on fork if requested. -+ */ -+ if (unlikely(p->sched_reset_on_fork)) { -+ if (task_has_rt_policy(p)) { -+ p->policy = SCHED_NORMAL; -+ p->static_prio = NICE_TO_PRIO(0); -+ p->rt_priority = 0; -+ } else if (PRIO_TO_NICE(p->static_prio) < 0) -+ p->static_prio = NICE_TO_PRIO(0); -+ -+ p->prio = p->normal_prio = p->static_prio; -+ -+ /* -+ * We don't need the reset flag anymore after the fork. It has -+ * fulfilled its duty: -+ */ -+ p->sched_reset_on_fork = 0; -+ } -+ -+#ifdef CONFIG_SCHED_INFO -+ if (unlikely(sched_info_on())) -+ memset(&p->sched_info, 0, sizeof(p->sched_info)); -+#endif -+ init_task_preempt_count(p); -+ -+ return 0; -+} -+ -+int sched_cgroup_fork(struct task_struct *p, struct kernel_clone_args *kargs) -+{ -+ unsigned long flags; -+ struct rq *rq; -+ -+ /* -+ * Because we're not yet on the pid-hash, p->pi_lock isn't strictly -+ * required yet, but lockdep gets upset if rules are violated. -+ */ -+ raw_spin_lock_irqsave(&p->pi_lock, flags); -+ /* -+ * Share the timeslice between parent and child, thus the -+ * total amount of pending timeslices in the system doesn't change, -+ * resulting in more scheduling fairness. -+ */ -+ rq = this_rq(); -+ raw_spin_lock(&rq->lock); -+ -+ rq->curr->time_slice /= 2; -+ p->time_slice = rq->curr->time_slice; -+#ifdef CONFIG_SCHED_HRTICK -+ hrtick_start(rq, rq->curr->time_slice); -+#endif -+ -+ if (p->time_slice < RESCHED_NS) { -+ p->time_slice = sysctl_sched_base_slice; -+ resched_curr(rq); -+ } -+ sched_task_fork(p, rq); -+ raw_spin_unlock(&rq->lock); -+ -+ /* -+ * We're setting the CPU for the first time, we don't migrate, -+ * so use __set_task_cpu(). -+ */ -+ __set_task_cpu(p, smp_processor_id()); -+ raw_spin_unlock_irqrestore(&p->pi_lock, flags); -+ -+ return 0; -+} -+ -+void sched_cancel_fork(struct task_struct *p) -+{ -+} -+ -+static void sched_mm_cid_fork(struct task_struct *t); -+ -+void sched_post_fork(struct task_struct *p) -+{ -+ sched_mm_cid_fork(p); -+} -+ -+#ifdef CONFIG_SCHEDSTATS -+ -+DEFINE_STATIC_KEY_FALSE(sched_schedstats); -+ -+static void set_schedstats(bool enabled) -+{ -+ if (enabled) -+ static_branch_enable(&sched_schedstats); -+ else -+ static_branch_disable(&sched_schedstats); -+} -+ -+void force_schedstat_enabled(void) -+{ -+ if (!schedstat_enabled()) { -+ pr_info("kernel profiling enabled schedstats, disable via kernel.sched_schedstats.\n"); -+ static_branch_enable(&sched_schedstats); -+ } -+} -+ -+static int __init setup_schedstats(char *str) -+{ -+ int ret = 0; -+ if (!str) -+ goto out; -+ -+ if (!strcmp(str, "enable")) { -+ set_schedstats(true); -+ ret = 1; -+ } else if (!strcmp(str, "disable")) { -+ set_schedstats(false); -+ ret = 1; -+ } -+out: -+ if (!ret) -+ pr_warn("Unable to parse schedstats=\n"); -+ -+ return ret; -+} -+__setup("schedstats=", setup_schedstats); -+ -+#ifdef CONFIG_PROC_SYSCTL -+static int sysctl_schedstats(const struct ctl_table *table, int write, void *buffer, -+ size_t *lenp, loff_t *ppos) -+{ -+ struct ctl_table t; -+ int err; -+ int state = static_branch_likely(&sched_schedstats); -+ -+ if (write && !capable(CAP_SYS_ADMIN)) -+ return -EPERM; -+ -+ t = *table; -+ t.data = &state; -+ err = proc_dointvec_minmax(&t, write, buffer, lenp, ppos); -+ if (err < 0) -+ return err; -+ if (write) -+ set_schedstats(state); -+ return err; -+} -+#endif /* CONFIG_PROC_SYSCTL */ -+#endif /* CONFIG_SCHEDSTATS */ -+ -+#ifdef CONFIG_SYSCTL -+static const struct ctl_table sched_core_sysctls[] = { -+#ifdef CONFIG_SCHEDSTATS -+ { -+ .procname = "sched_schedstats", -+ .data = NULL, -+ .maxlen = sizeof(unsigned int), -+ .mode = 0644, -+ .proc_handler = sysctl_schedstats, -+ .extra1 = SYSCTL_ZERO, -+ .extra2 = SYSCTL_ONE, -+ }, -+#endif /* CONFIG_SCHEDSTATS */ -+}; -+static int __init sched_core_sysctl_init(void) -+{ -+ register_sysctl_init("kernel", sched_core_sysctls); -+ return 0; -+} -+late_initcall(sched_core_sysctl_init); -+#endif /* CONFIG_SYSCTL */ -+ -+/* -+ * wake_up_new_task - wake up a newly created task for the first time. -+ * -+ * This function will do some initial scheduler statistics housekeeping -+ * that must be done for every newly created context, then puts the task -+ * on the runqueue and wakes it. -+ */ -+void wake_up_new_task(struct task_struct *p) -+{ -+ struct rq *rq; -+ unsigned long flags; -+ -+ raw_spin_lock_irqsave(&p->pi_lock, flags); -+ -+ trace_sched_wakeup_new(p); -+ -+ rq = wakeup_rq_trylock(p); -+ -+ if (rq) -+ wakeup_preempt_on_rq(p, rq); -+ else -+ activate_task(p, cpu_srq(0)); -+ -+ raw_spin_unlock_irqrestore(&p->pi_lock, flags); -+} -+ -+#ifdef CONFIG_PREEMPT_NOTIFIERS -+ -+static DEFINE_STATIC_KEY_FALSE(preempt_notifier_key); -+ -+void preempt_notifier_inc(void) -+{ -+ static_branch_inc(&preempt_notifier_key); -+} -+EXPORT_SYMBOL_GPL(preempt_notifier_inc); -+ -+void preempt_notifier_dec(void) -+{ -+ static_branch_dec(&preempt_notifier_key); -+} -+EXPORT_SYMBOL_GPL(preempt_notifier_dec); -+ -+/** -+ * preempt_notifier_register - tell me when current is being preempted & rescheduled -+ * @notifier: notifier struct to register -+ */ -+void preempt_notifier_register(struct preempt_notifier *notifier) -+{ -+ if (!static_branch_unlikely(&preempt_notifier_key)) -+ WARN(1, "registering preempt_notifier while notifiers disabled\n"); -+ -+ hlist_add_head(¬ifier->link, ¤t->preempt_notifiers); -+} -+EXPORT_SYMBOL_GPL(preempt_notifier_register); -+ -+/** -+ * preempt_notifier_unregister - no longer interested in preemption notifications -+ * @notifier: notifier struct to unregister -+ * -+ * This is *not* safe to call from within a preemption notifier. -+ */ -+void preempt_notifier_unregister(struct preempt_notifier *notifier) -+{ -+ hlist_del(¬ifier->link); -+} -+EXPORT_SYMBOL_GPL(preempt_notifier_unregister); -+ -+static void __fire_sched_in_preempt_notifiers(struct task_struct *curr) -+{ -+ struct preempt_notifier *notifier; -+ -+ hlist_for_each_entry(notifier, &curr->preempt_notifiers, link) -+ notifier->ops->sched_in(notifier, raw_smp_processor_id()); -+} -+ -+static __always_inline void fire_sched_in_preempt_notifiers(struct task_struct *curr) -+{ -+ if (static_branch_unlikely(&preempt_notifier_key)) -+ __fire_sched_in_preempt_notifiers(curr); -+} -+ -+static void -+__fire_sched_out_preempt_notifiers(struct task_struct *curr, -+ struct task_struct *next) -+{ -+ struct preempt_notifier *notifier; -+ -+ hlist_for_each_entry(notifier, &curr->preempt_notifiers, link) -+ notifier->ops->sched_out(notifier, next); -+} -+ -+static __always_inline void -+fire_sched_out_preempt_notifiers(struct task_struct *curr, -+ struct task_struct *next) -+{ -+ if (static_branch_unlikely(&preempt_notifier_key)) -+ __fire_sched_out_preempt_notifiers(curr, next); -+} -+ -+#else /* !CONFIG_PREEMPT_NOTIFIERS: */ -+ -+static inline void fire_sched_in_preempt_notifiers(struct task_struct *curr) -+{ -+} -+ -+static inline void -+fire_sched_out_preempt_notifiers(struct task_struct *curr, -+ struct task_struct *next) -+{ -+} -+ -+#endif /* !CONFIG_PREEMPT_NOTIFIERS */ -+ -+static inline void prepare_task(struct task_struct *next) -+{ -+ /* -+ * Claim the task as running, we do this before switching to it -+ * such that any running task will have this set. -+ * -+ * See the smp_load_acquire(&p->on_cpu) case in ttwu() and -+ * its ordering comment. -+ */ -+ WRITE_ONCE(next->on_cpu, 1); -+} -+ -+static inline void finish_task(struct task_struct *prev, struct rq *rq) -+{ -+ /* -+ * This must be the very last reference to @prev from this CPU. After -+ * p->on_cpu is cleared, the task can be moved to a different CPU. We -+ * must ensure this doesn't happen until the switch is completely -+ * finished. -+ * -+ * In particular, the load of prev->state in finish_task_switch() must -+ * happen before this. -+ * -+ * Pairs with the smp_cond_load_acquire() in try_to_wake_up(). -+ */ -+ smp_store_release(&prev->on_cpu, 0); -+ -+ /* -+ * Enqueue prev if not rq->idle and prev is not blocked -+ */ -+ if (prev != rq->idle && !rq->block) { -+ struct rq *trq; -+ struct sched_run_queue *srq = rq_srq(rq); -+ -+ SRQ_ENQUEUE_TASK(srq, prev, ); -+ -+ trq = __wakeup_rq_trylock(prev, IDLE_TASK_SCHED_PRIO - 1, prev->cpus_ptr); -+ if (trq) { -+ resched_curr(trq); -+ raw_spin_unlock(&trq->lock); -+ } -+ } -+} -+ -+static void do_balance_callbacks(struct rq *rq, struct balance_callback *head) -+{ -+ void (*func)(struct rq *rq); -+ struct balance_callback *next; -+ -+ lockdep_assert_held(&rq->lock); -+ -+ while (head) { -+ func = (void (*)(struct rq *))head->func; -+ next = head->next; -+ head->next = NULL; -+ head = next; -+ -+ func(rq); -+ } -+} -+ -+static void balance_push(struct rq *rq); -+ -+/* -+ * balance_push_callback is a right abuse of the callback interface and plays -+ * by significantly different rules. -+ * -+ * Where the normal balance_callback's purpose is to be ran in the same context -+ * that queued it (only later, when it's safe to drop rq->lock again), -+ * balance_push_callback is specifically targeted at __schedule(). -+ * -+ * This abuse is tolerated because it places all the unlikely/odd cases behind -+ * a single test, namely: rq->balance_callback == NULL. -+ */ -+struct balance_callback balance_push_callback = { -+ .next = NULL, -+ .func = balance_push, -+}; -+ -+static inline struct balance_callback * -+__splice_balance_callbacks(struct rq *rq, bool split) -+{ -+ struct balance_callback *head = rq->balance_callback; -+ -+ if (likely(!head)) -+ return NULL; -+ -+ lockdep_assert_rq_held(rq); -+ /* -+ * Must not take balance_push_callback off the list when -+ * splice_balance_callbacks() and balance_callbacks() are not -+ * in the same rq->lock section. -+ * -+ * In that case it would be possible for __schedule() to interleave -+ * and observe the list empty. -+ */ -+ if (split && head == &balance_push_callback) -+ head = NULL; -+ else -+ rq->balance_callback = NULL; -+ -+ return head; -+} -+ -+struct balance_callback *splice_balance_callbacks(struct rq *rq) -+{ -+ return __splice_balance_callbacks(rq, true); -+} -+ -+static void __balance_callbacks(struct rq *rq) -+{ -+ do_balance_callbacks(rq, __splice_balance_callbacks(rq, false)); -+} -+ -+void balance_callbacks(struct rq *rq, struct balance_callback *head) -+{ -+ unsigned long flags; -+ -+ if (unlikely(head)) { -+ raw_spin_lock_irqsave(&rq->lock, flags); -+ do_balance_callbacks(rq, head); -+ raw_spin_unlock_irqrestore(&rq->lock, flags); -+ } -+} -+ -+static inline void -+prepare_lock_switch(struct rq *rq, struct task_struct *next) -+{ -+ /* -+ * Since the runqueue lock will be released by the next -+ * task (which is an invalid locking op but in the case -+ * of the scheduler it's an obvious special-case), so we -+ * do an early lockdep release here: -+ */ -+ spin_release(&rq->lock.dep_map, _THIS_IP_); -+#ifdef CONFIG_DEBUG_SPINLOCK -+ /* this is a valid case when another task releases the spinlock */ -+ rq->lock.owner = next; -+#endif -+} -+ -+static inline void finish_lock_switch(struct rq *rq) -+{ -+ /* -+ * If we are tracking spinlock dependencies then we have to -+ * fix up the runqueue lock - which gets 'carried over' from -+ * prev into current: -+ */ -+ spin_acquire(&rq->lock.dep_map, 0, 0, _THIS_IP_); -+ __balance_callbacks(rq); -+ hrtick_schedule_exit(rq); -+ raw_spin_unlock_irq(&rq->lock); -+} -+ -+/* -+ * NOP if the arch has not defined these: -+ */ -+ -+#ifndef prepare_arch_switch -+# define prepare_arch_switch(next) do { } while (0) -+#endif -+ -+#ifndef finish_arch_post_lock_switch -+# define finish_arch_post_lock_switch() do { } while (0) -+#endif -+ -+static inline void kmap_local_sched_out(void) -+{ -+#ifdef CONFIG_KMAP_LOCAL -+ if (unlikely(current->kmap_ctrl.idx)) -+ __kmap_local_sched_out(); -+#endif -+} -+ -+static inline void kmap_local_sched_in(void) -+{ -+#ifdef CONFIG_KMAP_LOCAL -+ if (unlikely(current->kmap_ctrl.idx)) -+ __kmap_local_sched_in(); -+#endif -+} -+ -+/** -+ * prepare_task_switch - prepare to switch tasks -+ * @rq: the runqueue preparing to switch -+ * @next: the task we are going to switch to. -+ * -+ * This is called with the rq lock held and interrupts off. It must -+ * be paired with a subsequent finish_task_switch after the context -+ * switch. -+ * -+ * prepare_task_switch sets up locking and calls architecture specific -+ * hooks. -+ */ -+static inline void -+prepare_task_switch(struct rq *rq, struct task_struct *prev, -+ struct task_struct *next) -+{ -+ kcov_prepare_switch(prev); -+ sched_info_switch(rq, prev, next); -+ perf_event_task_sched_out(prev, next); -+ fire_sched_out_preempt_notifiers(prev, next); -+ kmap_local_sched_out(); -+ prepare_task(next); -+ prepare_arch_switch(next); -+} -+ -+/** -+ * finish_task_switch - clean up after a task-switch -+ * @rq: runqueue associated with task-switch -+ * @prev: the thread we just switched away from. -+ * -+ * finish_task_switch must be called after the context switch, paired -+ * with a prepare_task_switch call before the context switch. -+ * finish_task_switch will reconcile locking set up by prepare_task_switch, -+ * and do any other architecture-specific cleanup actions. -+ * -+ * Note that we may have delayed dropping an mm in context_switch(). If -+ * so, we finish that here outside of the runqueue lock. (Doing it -+ * with the lock held can cause deadlocks; see schedule() for -+ * details.) -+ * -+ * The context switch have flipped the stack from under us and restored the -+ * local variables which were saved when this task called schedule() in the -+ * past. 'prev == current' is still correct but we need to recalculate this_rq -+ * because prev may have moved to another CPU. -+ */ -+static struct rq *finish_task_switch(struct task_struct *prev) -+ __releases(rq->lock) -+{ -+ struct rq *rq = this_rq(); -+ struct mm_struct *mm = rq->prev_mm; -+ unsigned int prev_state; -+ -+ /* -+ * The previous task will have left us with a preempt_count of 2 -+ * because it left us after: -+ * -+ * schedule() -+ * preempt_disable(); // 1 -+ * __schedule() -+ * raw_spin_lock_irq(&rq->lock) // 2 -+ * -+ * Also, see FORK_PREEMPT_COUNT. -+ */ -+ if (WARN_ONCE(preempt_count() != 2*PREEMPT_DISABLE_OFFSET, -+ "corrupted preempt_count: %s/%d/0x%x\n", -+ current->comm, current->pid, preempt_count())) -+ preempt_count_set(FORK_PREEMPT_COUNT); -+ -+ rq->prev_mm = NULL; -+ -+ /* -+ * A task struct has one reference for the use as "current". -+ * If a task dies, then it sets TASK_DEAD in tsk->state and calls -+ * schedule one last time. The schedule call will never return, and -+ * the scheduled task must drop that reference. -+ * -+ * We must observe prev->state before clearing prev->on_cpu (in -+ * finish_task), otherwise a concurrent wakeup can get prev -+ * running on another CPU and we could rave with its RUNNING -> DEAD -+ * transition, resulting in a double drop. -+ */ -+ prev_state = READ_ONCE(prev->__state); -+ vtime_task_switch(prev); -+ perf_event_task_sched_in(prev, current); -+ finish_task(prev, rq); -+ tick_nohz_task_switch(); -+ finish_lock_switch(rq); -+ finish_arch_post_lock_switch(); -+ kcov_finish_switch(current); -+ /* -+ * kmap_local_sched_out() is invoked with rq::lock held and -+ * interrupts disabled. There is no requirement for that, but the -+ * sched out code does not have an interrupt enabled section. -+ * Restoring the maps on sched in does not require interrupts being -+ * disabled either. -+ */ -+ kmap_local_sched_in(); -+ -+ fire_sched_in_preempt_notifiers(current); -+ /* -+ * When switching through a kernel thread, the loop in -+ * membarrier_{private,global}_expedited() may have observed that -+ * kernel thread and not issued an IPI. It is therefore possible to -+ * schedule between user->kernel->user threads without passing though -+ * switch_mm(). Membarrier requires a barrier after storing to -+ * rq->curr, before returning to userspace, so provide them here: -+ * -+ * - a full memory barrier for {PRIVATE,GLOBAL}_EXPEDITED, implicitly -+ * provided by mmdrop_lazy_tlb(), -+ * - a sync_core for SYNC_CORE. -+ */ -+ if (mm) { -+ membarrier_mm_sync_core_before_usermode(mm); -+ mmdrop_lazy_tlb_sched(mm); -+ } -+ if (unlikely(prev_state == TASK_DEAD)) { -+ cgroup_task_dead(prev); -+ -+ /* Task is done with its stack. */ -+ put_task_stack(prev); -+ -+ put_task_struct_rcu_user(prev); -+ } -+ -+ return rq; -+} -+ -+/** -+ * schedule_tail - first thing a freshly forked thread must call. -+ * @prev: the thread we just switched away from. -+ */ -+asmlinkage __visible void schedule_tail(struct task_struct *prev) -+ __releases(rq->lock) -+{ -+ /* -+ * New tasks start with FORK_PREEMPT_COUNT, see there and -+ * finish_task_switch() for details. -+ * -+ * finish_task_switch() will drop rq->lock() and lower preempt_count -+ * and the preempt_enable() will end up enabling preemption (on -+ * PREEMPT_COUNT kernels). -+ */ -+ -+ finish_task_switch(prev); -+ /* -+ * This is a special case: the newly created task has just -+ * switched the context for the first time. It is returning from -+ * schedule for the first time in this path. -+ */ -+ trace_sched_exit_tp(true); -+ preempt_enable(); -+ -+ if (current->set_child_tid) -+ put_user(task_pid_vnr(current), current->set_child_tid); -+ -+ calculate_sigpending(); -+} -+ -+/* -+ * context_switch - switch to the new MM and the new thread's register state. -+ */ -+static __always_inline struct rq * -+context_switch(struct rq *rq, struct task_struct *prev, -+ struct task_struct *next) -+{ -+ prepare_task_switch(rq, prev, next); -+ -+ /* -+ * For paravirt, this is coupled with an exit in switch_to to -+ * combine the page table reload and the switch backend into -+ * one hypercall. -+ */ -+ arch_start_context_switch(prev); -+ -+ /* -+ * kernel -> kernel lazy + transfer active -+ * user -> kernel lazy + mmgrab_lazy_tlb() active -+ * -+ * kernel -> user switch + mmdrop_lazy_tlb() active -+ * user -> user switch -+ */ -+ if (!next->mm) { // to kernel -+ enter_lazy_tlb(prev->active_mm, next); -+ -+ next->active_mm = prev->active_mm; -+ if (prev->mm) // from user -+ mmgrab_lazy_tlb(prev->active_mm); -+ else -+ prev->active_mm = NULL; -+ } else { // to user -+ membarrier_switch_mm(rq, prev->active_mm, next->mm); -+ /* -+ * sys_membarrier() requires an smp_mb() between setting -+ * rq->curr / membarrier_switch_mm() and returning to userspace. -+ * -+ * The below provides this either through switch_mm(), or in -+ * case 'prev->active_mm == next->mm' through -+ * finish_task_switch()'s mmdrop(). -+ */ -+ switch_mm_irqs_off(prev->active_mm, next->mm, next); -+ lru_gen_use_mm(next->mm); -+ -+ if (!prev->mm) { // from kernel -+ /* will mmdrop_lazy_tlb() in finish_task_switch(). */ -+ rq->prev_mm = prev->active_mm; -+ prev->active_mm = NULL; -+ } -+ } -+ -+ mm_cid_switch_to(prev, next); -+ -+ /* -+ * Tell rseq that the task was scheduled in. Must be after -+ * switch_mm_cid() to get the TIF flag set. -+ */ -+ rseq_sched_switch_event(prev); -+ -+ prepare_lock_switch(rq, next); -+ -+ /* Here we just switch the register state and the stack. */ -+ switch_to(prev, next, prev); -+ barrier(); -+ -+ return finish_task_switch(prev); -+} -+ -+/* -+ * nr_running, nr_uninterruptible and nr_context_switches: -+ * -+ * externally visible scheduler statistics: current number of runnable -+ * threads, total number of context switches performed since bootup. -+ */ -+unsigned int nr_running(void) -+{ -+ return srq_nr_queued(0) + num_active_cpus() - cpumask_weight(sched_idle_mask); -+} -+ -+/* -+ * Check if only the current task is running on the CPU. -+ * -+ * Caution: this function does not check that the caller has disabled -+ * preemption, thus the result might have a time-of-check-to-time-of-use -+ * race. The caller is responsible to use it correctly, for example: -+ * -+ * - from a non-preemptible section (of course) -+ * -+ * - from a thread that is bound to a single CPU -+ * -+ * - in a loop with very short iterations (e.g. a polling loop) -+ */ -+bool single_task_running(void) -+{ -+ const int cpu = cpu_of(raw_rq()); -+ -+ return cpumask_test_cpu(cpu, sched_idle_mask) && -+ (0 == srq_nr_queued(0)) && is_preempt_list_empty(cpu); -+} -+EXPORT_SYMBOL(single_task_running); -+ -+unsigned long long nr_context_switches_cpu(int cpu) -+{ -+ return cpu_rq(cpu)->nr_switches; -+} -+ -+unsigned long long nr_context_switches(void) -+{ -+ int i; -+ unsigned long long sum = 0; -+ -+ for_each_possible_cpu(i) -+ sum += cpu_rq(i)->nr_switches; -+ -+ return sum; -+} -+ -+/* -+ * Consumers of these two interfaces, like for example the cpuidle menu -+ * governor, are using nonsensical data. Preferring shallow idle state selection -+ * for a CPU that has IO-wait which might not even end up running the task when -+ * it does become runnable. -+ */ -+ -+unsigned int nr_iowait_cpu(int cpu) -+{ -+ return (0 == cpu) ? atomic_read(&cpu_srq(0)->nr_iowait) : 0; -+} -+ -+/* -+ * IO-wait accounting, and how it's mostly bollocks (on SMP). -+ * -+ * The idea behind IO-wait account is to account the idle time that we could -+ * have spend running if it were not for IO. That is, if we were to improve the -+ * storage performance, we'd have a proportional reduction in IO-wait time. -+ * -+ * This all works nicely on UP, where, when a task blocks on IO, we account -+ * idle time as IO-wait, because if the storage were faster, it could've been -+ * running and we'd not be idle. -+ * -+ * This has been extended to SMP, by doing the same for each CPU. This however -+ * is broken. -+ * -+ * Imagine for instance the case where two tasks block on one CPU, only the one -+ * CPU will have IO-wait accounted, while the other has regular idle. Even -+ * though, if the storage were faster, both could've ran at the same time, -+ * utilising both CPUs. -+ * -+ * This means, that when looking globally, the current IO-wait accounting on -+ * SMP is a lower bound, by reason of under accounting. -+ * -+ * Worse, since the numbers are provided per CPU, they are sometimes -+ * interpreted per CPU, and that is nonsensical. A blocked task isn't strictly -+ * associated with any one particular CPU, it can wake to another CPU than it -+ * blocked on. This means the per CPU IO-wait number is meaningless. -+ * -+ * Task CPU affinities can make all that even more 'interesting'. -+ */ -+ -+unsigned int nr_iowait(void) -+{ -+ return nr_iowait_cpu(0); -+} -+ -+/* -+ * sched_exec - execve() is a valuable balancing opportunity, because at -+ * this point the task has the smallest effective memory and cache -+ * footprint. -+ */ -+void sched_exec(void) -+{ -+} -+ -+DEFINE_PER_CPU(struct kernel_stat, kstat); -+DEFINE_PER_CPU(struct kernel_cpustat, kernel_cpustat); -+ -+EXPORT_PER_CPU_SYMBOL(kstat); -+EXPORT_PER_CPU_SYMBOL(kernel_cpustat); -+ -+static inline void update_curr(struct rq *rq, struct task_struct *p) -+{ -+ s64 ns = rq->clock_task - p->last_ran; -+ -+ p->sched_time += ns; -+ cgroup_account_cputime(p, ns); -+ account_group_exec_runtime(p, ns); -+ -+ p->time_slice -= ns; -+ p->last_ran = rq->clock_task; -+} -+ -+/* -+ * Return accounted runtime for the task. -+ * Return separately the current's pending runtime that have not been -+ * accounted yet. -+ */ -+unsigned long long task_sched_runtime(struct task_struct *p) -+{ -+ struct rq *rq; -+ struct rq_flags rf; -+ u64 ns; -+ -+#ifdef CONFIG_64BIT -+ /* -+ * 64-bit doesn't need locks to atomically read a 64-bit value. -+ * So we have a optimization chance when the task's delta_exec is 0. -+ * Reading ->on_cpu is racy, but this is OK. -+ * -+ * If we race with it leaving CPU, we'll take a lock. So we're correct. -+ * If we race with it entering CPU, unaccounted time is 0. This is -+ * indistinguishable from the read occurring a few cycles earlier. -+ * If we see ->on_cpu without ->on_rq, the task is leaving, and has -+ * been accounted, so we're correct here as well. -+ */ -+ if (!p->on_cpu || !task_on_rq_queued(p)) -+ return tsk_seruntime(p); -+#endif -+ -+ raw_spin_lock_irqsave(&p->pi_lock, rf.flags); -+ rq = task_rq(p); -+ /* -+ * Must be ->curr _and_ ->on_rq. If dequeued, we would -+ * project cycles that may never be accounted to this -+ * thread, breaking clock_gettime(). -+ */ -+ if (p == rq->curr && task_on_rq_queued(p)) { -+ raw_spin_lock(&rq->lock); -+ if (likely(p == rq->curr && task_on_rq_queued(p) && task_rq(p) == rq)) { -+ update_rq_clock(rq); -+ update_curr(rq, p); -+ } -+ raw_spin_unlock(&rq->lock); -+ } -+ ns = tsk_seruntime(p); -+ raw_spin_unlock_irqrestore(&p->pi_lock, rf.flags); -+ -+ return ns; -+} -+ -+/* This manages tasks that have run out of timeslice during a scheduler_tick */ -+static inline void scheduler_task_tick(struct rq *rq) -+{ -+ struct task_struct *p = rq->curr; -+ -+ if (is_idle_task(p)) -+ return; -+ -+ update_curr(rq, p); -+ cpufreq_update_util(rq, 0); -+ -+ /* -+ * Tasks have less than RESCHED_NS of time slice left they will be -+ * rescheduled. -+ */ -+ if (p->time_slice >= RESCHED_NS) -+ return; -+ set_tsk_need_resched(p); -+ set_preempt_need_resched(); -+} -+ -+static u64 cpu_resched_latency(struct rq *rq) -+{ -+ int latency_warn_ms = READ_ONCE(sysctl_resched_latency_warn_ms); -+ u64 resched_latency, now = rq_clock(rq); -+ static bool warned_once; -+ -+ if (sysctl_resched_latency_warn_once && warned_once) -+ return 0; -+ -+ if (!need_resched() || !latency_warn_ms) -+ return 0; -+ -+ if (system_state == SYSTEM_BOOTING) -+ return 0; -+ -+ if (!rq->last_seen_need_resched_ns) { -+ rq->last_seen_need_resched_ns = now; -+ rq->ticks_without_resched = 0; -+ return 0; -+ } -+ -+ rq->ticks_without_resched++; -+ resched_latency = now - rq->last_seen_need_resched_ns; -+ if (resched_latency <= latency_warn_ms * NSEC_PER_MSEC) -+ return 0; -+ -+ warned_once = true; -+ -+ return resched_latency; -+} -+ -+static int __init setup_resched_latency_warn_ms(char *str) -+{ -+ long val; -+ -+ if ((kstrtol(str, 0, &val))) { -+ pr_warn("Unable to set resched_latency_warn_ms\n"); -+ return 1; -+ } -+ -+ sysctl_resched_latency_warn_ms = val; -+ return 1; -+} -+__setup("resched_latency_warn_ms=", setup_resched_latency_warn_ms); -+ -+/* -+ * This function gets called by the timer code, with HZ frequency. -+ * We call it with interrupts disabled. -+ */ -+void sched_tick(void) -+{ -+ int cpu __maybe_unused = smp_processor_id(); -+ struct rq *rq = cpu_rq(cpu); -+ struct task_struct *curr = rq->curr; -+ u64 resched_latency; -+ -+ if (housekeeping_cpu(cpu, HK_TYPE_KERNEL_NOISE)) -+ arch_scale_freq_tick(); -+ -+ sched_clock_tick(); -+ -+ raw_spin_lock(&rq->lock); -+ update_rq_clock(rq); -+ -+ if (dynamic_preempt_lazy() && tif_test_bit(TIF_NEED_RESCHED_LAZY)) -+ resched_curr(rq); -+ -+ scheduler_task_tick(rq); -+ if (sched_feat(LATENCY_WARN)) -+ resched_latency = cpu_resched_latency(rq); -+ -+ raw_spin_unlock(&rq->lock); -+ -+ if (sched_feat(LATENCY_WARN) && resched_latency) -+ resched_latency_warn(cpu, resched_latency); -+ -+ perf_event_task_tick(); -+ -+ if (curr->flags & PF_WQ_WORKER) -+ wq_worker_tick(curr); -+} -+ -+#ifdef CONFIG_NO_HZ_FULL -+ -+struct tick_work { -+ int cpu; -+ atomic_t state; -+ struct delayed_work work; -+}; -+/* Values for ->state, see diagram below. */ -+#define TICK_SCHED_REMOTE_OFFLINE 0 -+#define TICK_SCHED_REMOTE_OFFLINING 1 -+#define TICK_SCHED_REMOTE_RUNNING 2 -+ -+/* -+ * State diagram for ->state: -+ * -+ * -+ * TICK_SCHED_REMOTE_OFFLINE -+ * | ^ -+ * | | -+ * | | sched_tick_remote() -+ * | | -+ * | | -+ * +--TICK_SCHED_REMOTE_OFFLINING -+ * | ^ -+ * | | -+ * sched_tick_start() | | sched_tick_stop() -+ * | | -+ * V | -+ * TICK_SCHED_REMOTE_RUNNING -+ * -+ * -+ * Other transitions get WARN_ON_ONCE(), except that sched_tick_remote() -+ * and sched_tick_start() are happy to leave the state in RUNNING. -+ */ -+ -+static struct tick_work __percpu *tick_work_cpu; -+ -+static void sched_tick_remote(struct work_struct *work) -+{ -+ struct delayed_work *dwork = to_delayed_work(work); -+ struct tick_work *twork = container_of(dwork, struct tick_work, work); -+ int cpu = twork->cpu; -+ struct rq *rq = cpu_rq(cpu); -+ int os; -+ -+ /* -+ * Handle the tick only if it appears the remote CPU is running in full -+ * dynticks mode. The check is racy by nature, but missing a tick or -+ * having one too much is no big deal because the scheduler tick updates -+ * statistics and checks timeslices in a time-independent way, regardless -+ * of when exactly it is running. -+ */ -+ if (tick_nohz_tick_stopped_cpu(cpu)) { -+ guard(raw_spinlock_irqsave)(&rq->lock); -+ struct task_struct *curr = rq->curr; -+ -+ if (cpu_online(cpu)) { -+ update_rq_clock(rq); -+ -+ if (!is_idle_task(curr)) { -+ /* -+ * Make sure the next tick runs within a -+ * reasonable amount of time. -+ */ -+ u64 delta = rq_clock_task(rq) - curr->last_ran; -+ WARN_ON_ONCE(delta > (u64)NSEC_PER_SEC * 30); -+ } -+ scheduler_task_tick(rq); -+ -+ calc_load_nohz_remote(rq); -+ } -+ } -+ -+ /* -+ * Run the remote tick once per second (1Hz). This arbitrary -+ * frequency is large enough to avoid overload but short enough -+ * to keep scheduler internal stats reasonably up to date. But -+ * first update state to reflect hotplug activity if required. -+ */ -+ os = atomic_fetch_add_unless(&twork->state, -1, TICK_SCHED_REMOTE_RUNNING); -+ WARN_ON_ONCE(os == TICK_SCHED_REMOTE_OFFLINE); -+ if (os == TICK_SCHED_REMOTE_RUNNING) -+ queue_delayed_work(system_dfl_wq, dwork, HZ); -+} -+ -+static void sched_tick_start(int cpu) -+{ -+ int os; -+ struct tick_work *twork; -+ -+ if (housekeeping_cpu(cpu, HK_TYPE_KERNEL_NOISE)) -+ return; -+ -+ WARN_ON_ONCE(!tick_work_cpu); -+ -+ twork = per_cpu_ptr(tick_work_cpu, cpu); -+ os = atomic_xchg(&twork->state, TICK_SCHED_REMOTE_RUNNING); -+ WARN_ON_ONCE(os == TICK_SCHED_REMOTE_RUNNING); -+ if (os == TICK_SCHED_REMOTE_OFFLINE) { -+ twork->cpu = cpu; -+ INIT_DELAYED_WORK(&twork->work, sched_tick_remote); -+ queue_delayed_work(system_dfl_wq, &twork->work, HZ); -+ } -+} -+ -+#ifdef CONFIG_HOTPLUG_CPU -+static void sched_tick_stop(int cpu) -+{ -+ struct tick_work *twork; -+ int os; -+ -+ if (housekeeping_cpu(cpu, HK_TYPE_KERNEL_NOISE)) -+ return; -+ -+ WARN_ON_ONCE(!tick_work_cpu); -+ -+ twork = per_cpu_ptr(tick_work_cpu, cpu); -+ /* There cannot be competing actions, but don't rely on stop-machine. */ -+ os = atomic_xchg(&twork->state, TICK_SCHED_REMOTE_OFFLINING); -+ WARN_ON_ONCE(os != TICK_SCHED_REMOTE_RUNNING); -+ /* Don't cancel, as this would mess up the state machine. */ -+} -+#endif /* CONFIG_HOTPLUG_CPU */ -+ -+int __init sched_tick_offload_init(void) -+{ -+ tick_work_cpu = alloc_percpu(struct tick_work); -+ BUG_ON(!tick_work_cpu); -+ return 0; -+} -+ -+#else /* !CONFIG_NO_HZ_FULL: */ -+static inline void sched_tick_start(int cpu) { } -+static inline void sched_tick_stop(int cpu) { } -+#endif /* !CONFIG_NO_HZ_FULL */ -+ -+#if defined(CONFIG_PREEMPTION) && (defined(CONFIG_DEBUG_PREEMPT) || \ -+ defined(CONFIG_PREEMPT_TRACER)) -+/* -+ * If the value passed in is equal to the current preempt count -+ * then we just disabled preemption. Start timing the latency. -+ */ -+static inline void preempt_latency_start(int val) -+{ -+ if (preempt_count() == val) { -+ unsigned long ip = get_lock_parent_ip(); -+#ifdef CONFIG_DEBUG_PREEMPT -+ current->preempt_disable_ip = ip; -+#endif -+ trace_preempt_off(CALLER_ADDR0, ip); -+ } -+} -+ -+void preempt_count_add(int val) -+{ -+#ifdef CONFIG_DEBUG_PREEMPT -+ /* -+ * Underflow? -+ */ -+ if (DEBUG_LOCKS_WARN_ON((preempt_count() < 0))) -+ return; -+#endif -+ __preempt_count_add(val); -+#ifdef CONFIG_DEBUG_PREEMPT -+ /* -+ * Spinlock count overflowing soon? -+ */ -+ DEBUG_LOCKS_WARN_ON((preempt_count() & PREEMPT_MASK) >= -+ PREEMPT_MASK - 10); -+#endif -+ preempt_latency_start(val); -+} -+EXPORT_SYMBOL(preempt_count_add); -+NOKPROBE_SYMBOL(preempt_count_add); -+ -+/* -+ * If the value passed in equals to the current preempt count -+ * then we just enabled preemption. Stop timing the latency. -+ */ -+static inline void preempt_latency_stop(int val) -+{ -+ if (preempt_count() == val) -+ trace_preempt_on(CALLER_ADDR0, get_lock_parent_ip()); -+} -+ -+void preempt_count_sub(int val) -+{ -+#ifdef CONFIG_DEBUG_PREEMPT -+ /* -+ * Underflow? -+ */ -+ if (DEBUG_LOCKS_WARN_ON(val > preempt_count())) -+ return; -+ /* -+ * Is the spinlock portion underflowing? -+ */ -+ if (DEBUG_LOCKS_WARN_ON((val < PREEMPT_MASK) && -+ !(preempt_count() & PREEMPT_MASK))) -+ return; -+#endif -+ -+ preempt_latency_stop(val); -+ __preempt_count_sub(val); -+} -+EXPORT_SYMBOL(preempt_count_sub); -+NOKPROBE_SYMBOL(preempt_count_sub); -+ -+#else -+static inline void preempt_latency_start(int val) { } -+static inline void preempt_latency_stop(int val) { } -+#endif -+ -+static inline unsigned long get_preempt_disable_ip(struct task_struct *p) -+{ -+#ifdef CONFIG_DEBUG_PREEMPT -+ return p->preempt_disable_ip; -+#else -+ return 0; -+#endif -+} -+ -+/* -+ * Print scheduling while atomic bug: -+ */ -+static noinline void __schedule_bug(struct task_struct *prev) -+{ -+ /* Save this before calling printk(), since that will clobber it */ -+ unsigned long preempt_disable_ip = get_preempt_disable_ip(current); -+ -+ if (oops_in_progress) -+ return; -+ -+ printk(KERN_ERR "BUG: scheduling while atomic: %s/%d/0x%08x\n", -+ prev->comm, prev->pid, preempt_count()); -+ -+ debug_show_held_locks(prev); -+ print_modules(); -+ if (irqs_disabled()) -+ print_irqtrace_events(prev); -+ if (IS_ENABLED(CONFIG_DEBUG_PREEMPT)) { -+ pr_err("Preemption disabled at:"); -+ print_ip_sym(KERN_ERR, preempt_disable_ip); -+ } -+ check_panic_on_warn("scheduling while atomic"); -+ -+ dump_stack(); -+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK); -+} -+ -+/* -+ * Various schedule()-time debugging checks and statistics: -+ */ -+static inline void schedule_debug(struct task_struct *prev, bool preempt) -+{ -+#ifdef CONFIG_SCHED_STACK_END_CHECK -+ if (task_stack_end_corrupted(prev)) -+ panic("corrupted stack end detected inside scheduler\n"); -+ -+ if (task_scs_end_corrupted(prev)) -+ panic("corrupted shadow stack detected inside scheduler\n"); -+#endif -+ -+#ifdef CONFIG_DEBUG_ATOMIC_SLEEP -+ if (!preempt && READ_ONCE(prev->__state) && prev->non_block_count) { -+ printk(KERN_ERR "BUG: scheduling in a non-blocking section: %s/%d/%i\n", -+ prev->comm, prev->pid, prev->non_block_count); -+ dump_stack(); -+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK); -+ } -+#endif -+ -+ if (unlikely(in_atomic_preempt_off())) { -+ __schedule_bug(prev); -+ preempt_count_set(PREEMPT_DISABLED); -+ } -+ rcu_sleep_check(); -+ WARN_ON_ONCE(ct_state() == CT_STATE_USER); -+ -+ profile_hit(SCHED_PROFILING, __builtin_return_address(0)); -+ -+ schedstat_inc(this_rq()->sched_count); -+} -+ -+#ifdef ALT_SCHED_DEBUG -+static inline void alt_sched_rq_debug(struct rq *rq) -+{ -+ const int cpu = cpu_of(rq); -+ -+ printk(KERN_INFO "sched: rq(%02d) nr_pinned=%d, prio=%d\n", -+ cpu, rq->nr_pinned, READ_ONCE(cpu_prio[cpu])); -+} -+ -+static inline void alt_sched_task_debug(struct task_struct *p) -+{ -+ printk(KERN_INFO "sched: task %px, sched_prio: %d, cpumask: 0x%04lx, cpu: %d\n", -+ p, task_sched_prio(p), p->cpus_ptr->bits[0], task_cpu(p)); -+} -+ -+static void alt_sched_srq_debug(struct sched_run_queue *srq) -+{ -+ int idx = find_first_bit(srq->bitmap, SCHED_QUEUE_BITS); -+ -+ printk(KERN_INFO "sched: srq debug, srq_nr_queued:%d, bitmap:0x%016lx, firstbit:%d\n", -+ srq_nr_queued(0), srq->bitmap[0], idx); -+ -+ if (SCHED_QUEUE_BITS != idx) { -+ struct llist_node *entry = srq->_head[idx].first; -+ -+ if (entry) { -+ while (entry->next) { -+ entry = entry->next; -+ } -+ struct task_struct *p = llist_entry(entry, struct task_struct, pq_node); -+ alt_sched_task_debug(p); -+ } -+ } -+} -+ -+static void alt_sched_cpu_prio_debug(void) -+{ -+ int i; -+ -+ printk(KERN_INFO "sched: cpu_prio[idle] : 0x%08lx\n", cpu_sched_prio_mask[6].bits[0]); -+ -+ for_each_set_bit (i, cpu_sched_prio_bitmap, SCHED_LEVELS) { -+ printk(KERN_INFO "sched: cpu_prio[%4d] : 0x%08lx\n", -+ SCHED_LEVELS - 1 - i, -+ cpu_sched_prio_mask[i].bits[0]); -+ } -+} -+ -+void alt_sched_debug(void) -+{ -+ int cpu; -+ -+ alt_sched_cpu_prio_debug(); -+ -+ alt_sched_srq_debug(&grq); -+ -+ for_each_cpu(cpu, cpu_active_mask) -+ alt_sched_rq_debug(cpu_rq(cpu)); -+ -+/* -+ for (int i = 0; i < 8; i++) -+ printk(KERN_INFO "sched: [%d] = %d\n", i, alt_debug[i]); -+*/ -+} -+#endif -+ -+/* -+ * Timeslices below RESCHED_NS are considered as good as expired as there's no -+ * point rescheduling when there's so little time left. -+ * -+ * Return: 1 on timeslice of @p is expired, 0 otherwise. -+ */ -+static __always_inline int check_curr(struct task_struct *p, struct rq *rq) -+{ -+ if (unlikely(rq->idle == p)) -+ return 0; -+ -+ update_curr(rq, p); -+ -+ if (p->time_slice < RESCHED_NS) { -+ p->time_slice = sysctl_sched_base_slice; -+ sched_task_renew(p, rq); -+ -+ return 1; -+ } -+ -+ return 0; -+} -+ -+static __always_inline void migrate_preempt_task(struct task_struct *p, const int cpu) -+{ -+ /* idle preempt success rate ~52.7% */ -+ struct rq *rq = __wakeup_rq_trylock(p, task_sched_prio(p), p->cpus_ptr); -+ -+ if (rq) -+ preempt_on_rq(p, rq); -+ else -+ activate_task(p, cpu_srq(cpu)); -+} -+ -+static __always_inline struct task_struct *pick_preempt_task(const int cpu, int pick_sched_prio) -+{ -+ struct llist_node *plist; -+ struct task_struct *p, *n, *preempt = NULL; -+ -+ plist = llist_del_all(this_cpu_ptr(&preempt_list)); -+ if (NULL == plist) -+ return preempt; -+ -+ plist = llist_reverse_order(plist); -+ llist_for_each_entry_safe(p, n, plist, pq_node) { -+ int sched_prio = task_sched_prio(p); -+ -+ if (is_cpu_allowed(p, cpu) && sched_prio < pick_sched_prio) { -+ if (NULL != preempt) -+ migrate_preempt_task(preempt, cpu); -+ pick_sched_prio = sched_prio; -+ preempt = p; -+ } else { -+ migrate_preempt_task(p, cpu); -+ } -+ } -+ if (NULL != preempt) { -+ WRITE_ONCE(preempt->on_rq, TASK_ON_RQ_QUEUED); -+ ASSERT_EXCLUSIVE_WRITER(preempt->on_rq); -+ -+ if (task_cpu(preempt) != cpu) -+ set_task_cpu(preempt, cpu); -+ } -+ -+ return preempt; -+} -+ -+static __always_inline void wakeup_srq_task(const int cpu) -+{ -+ struct sched_run_queue *srq = cpu_srq(cpu); -+ int idx = find_first_bit(srq->bitmap, SCHED_QUEUE_BITS); -+ -+ if (unlikely(SCHED_QUEUE_BITS == idx)) -+ return; -+ -+ struct llist_node *entry= srq->_head[idx].first; -+ if (unlikely(NULL == entry)) -+ return; -+ -+ struct task_struct *p = llist_entry(entry, struct task_struct, pq_node); -+ int i; -+ -+ /* At this point, p is most likely per-cpu task */ -+ for_each_cpu_and (i, p->cpus_ptr, cpu_active_mask) { -+ if (idx < READ_ONCE(cpu_prio[i])) { -+ struct rq *rq = cpu_rq(i); -+ if (likely(raw_spin_trylock(&rq->lock))) { -+ resched_curr(rq); -+ raw_spin_unlock(&rq->lock); -+ } -+ } -+ } -+} -+ -+#define PQ_PICK_TASK \ -+{ \ -+ struct llist_node *first = llist_del_all(head); \ -+ if (first) { \ -+ first = llist_reverse_order(first); \ -+ struct llist_node **curr = &first; \ -+ while (*curr) { \ -+ struct llist_node *entry = *curr; \ -+ struct task_struct *p = llist_entry(entry, struct task_struct, pq_node);\ -+ if (is_cpu_allowed(p, cpu)) { \ -+ *curr = entry->next; \ -+ next = p; \ -+ break; \ -+ } \ -+ curr = &entry->next; \ -+ } \ -+ if (first) { \ -+ /* ~3.3% to process all remain tasks to other cpu, no point to do so*/ \ -+ struct llist_node *last = first; \ -+ first = llist_reverse_order(first); \ -+ sched_llist_merge(head, first, last); \ -+ } else if (llist_empty(head)) { \ -+ clear_bit(idx, srq->bitmap); \ -+ smp_rmb(); \ -+ if (!llist_empty(head)) \ -+ set_bit(idx, srq->bitmap); \ -+ } \ -+ if (next) { \ -+ if (task_cpu(next) != cpu) \ -+ set_task_cpu(next, cpu); \ -+ WRITE_ONCE(next->__sched_prio, -1); \ -+ atomic_dec(&srq->nr_queued); \ -+ raw_spin_unlock(lock); \ -+ goto picked; \ -+ } \ -+ } \ -+} -+ -+static inline struct task_struct *pick_next_task(const int cpu, struct rq *rq, int expired) -+{ -+ struct sched_run_queue *srq; -+ struct task_struct *next; -+ bool blocked = rq->block; -+ int pick_sched_prio = blocked ? IDLE_TASK_SCHED_PRIO : READ_ONCE(cpu_prio[cpu]) + expired; -+ -+ if ((next = pick_preempt_task(cpu, pick_sched_prio))) -+ goto picked; -+ -+ /* pick next task from schedule run queue */ -+ srq = cpu_srq(cpu); -+ if (!bitmap_empty(srq->bitmap, pick_sched_prio)) { -+ int idx; -+ DECLARE_BITMAP(lock_bitmap, SCHED_QUEUE_BITS) = { 0 }; -+ -+ /* trylock loop, reduce waiting time of pq lock */ -+ for_each_set_bit(idx, srq->bitmap, pick_sched_prio) { -+ raw_spinlock_t *lock = &srq->_lock[idx]; -+ struct llist_head *head = &srq->_head[idx]; -+ -+ if (raw_spin_trylock(lock)) { -+ PQ_PICK_TASK; -+ raw_spin_unlock(lock); -+ } else { -+ set_bit(idx, lock_bitmap); -+ } -+ } -+ -+ /* lock loop */ -+ for_each_set_bit(idx, lock_bitmap, pick_sched_prio) { -+ raw_spinlock_t *lock = &srq->_lock[idx]; -+ struct llist_head *head = &srq->_head[idx]; -+ -+ raw_spin_lock(lock); -+ PQ_PICK_TASK; -+ raw_spin_unlock(lock); -+ } -+ } -+ -+ struct task_struct *idle = rq->idle; -+ next = blocked ? idle : rq->curr; -+ if (next == idle) { -+ if (rq->online) { -+ if (srq_nr_queued(cpu)) -+ wakeup_srq_task(cpu); -+ else -+ sched_cpu_topology_balance(cpu, rq); -+ } -+ -+ schedstat_inc(rq->sched_goidle); -+ /*printk(KERN_INFO "sched: choose_next_task(%d) idle %px\n", cpu, next);*/ -+ return idle; -+ } -+picked: -+#ifdef CONFIG_SCHED_HRTICK -+ hrtick_start(rq, next->time_slice); -+#endif -+ /*printk(KERN_INFO "sched: choose_next_task(%d) next %px\n", cpu, next);*/ -+ return next; -+} -+ -+/* -+ * Constants for the sched_mode argument of __schedule(). -+ * -+ * The mode argument allows RT enabled kernels to differentiate a -+ * preemption from blocking on an 'sleeping' spin/rwlock. -+ */ -+ #define SM_IDLE (-1) -+ #define SM_NONE 0 -+ #define SM_PREEMPT 1 -+ #define SM_RTLOCK_WAIT 2 -+ -+/* -+ * Helper function for __schedule() -+ * -+ * If a task does not have signals pending, deactivate it -+ * Otherwise marks the task's __state as RUNNING -+ */ -+static bool try_to_block_task(struct rq *rq, struct task_struct *p, -+ unsigned long *task_state_p) -+{ -+ unsigned long task_state = *task_state_p; -+ if (signal_pending_state(task_state, p)) { -+ WRITE_ONCE(p->__state, TASK_RUNNING); -+ *task_state_p = TASK_RUNNING; -+ return false; -+ } -+ p->sched_contributes_to_load = -+ (task_state & TASK_UNINTERRUPTIBLE) && -+ !(task_state & TASK_NOLOAD) && -+ !(task_state & TASK_FROZEN); -+ -+ /* -+ * __schedule() ttwu() -+ * prev_state = prev->state; if (p->on_rq && ...) -+ * if (prev_state) goto out; -+ * p->on_rq = 0; smp_acquire__after_ctrl_dep(); -+ * p->state = TASK_WAKING -+ * -+ * Where __schedule() and ttwu() have matching control dependencies. -+ * -+ * After this, schedule() must not care about p->state any more. -+ */ -+ block_task(rq, p); -+ return true; -+} -+ -+/* -+ * schedule() is the main scheduler function. -+ * -+ * The main means of driving the scheduler and thus entering this function are: -+ * -+ * 1. Explicit blocking: mutex, semaphore, waitqueue, etc. -+ * -+ * 2. TIF_NEED_RESCHED flag is checked on interrupt and userspace return -+ * paths. For example, see arch/x86/entry_64.S. -+ * -+ * To drive preemption between tasks, the scheduler sets the flag in timer -+ * interrupt handler sched_tick(). -+ * -+ * 3. Wakeups don't really cause entry into schedule(). They add a -+ * task to the run-queue and that's it. -+ * -+ * Now, if the new task added to the run-queue preempts the current -+ * task, then the wakeup sets TIF_NEED_RESCHED and schedule() gets -+ * called on the nearest possible occasion: -+ * -+ * - If the kernel is preemptible (CONFIG_PREEMPTION=y): -+ * -+ * - in syscall or exception context, at the next outmost -+ * preempt_enable(). (this might be as soon as the wake_up()'s -+ * spin_unlock()!) -+ * -+ * - in IRQ context, return from interrupt-handler to -+ * preemptible context -+ * -+ * - If the kernel is not preemptible (CONFIG_PREEMPTION is not set) -+ * then at the next: -+ * -+ * - cond_resched() call -+ * - explicit schedule() call -+ * - return from syscall or exception to user-space -+ * - return from interrupt-handler to user-space -+ * -+ * WARNING: must be called with preemption disabled! -+ */ -+static void __sched notrace __schedule(int sched_mode) -+{ -+ struct task_struct *prev, *next; -+ /* -+ * On PREEMPT_RT kernel, SM_RTLOCK_WAIT is noted -+ * as a preemption by schedule_debug() and RCU. -+ */ -+ bool preempt = sched_mode > SM_NONE; -+ bool is_switch = false; -+ unsigned long *switch_count; -+ unsigned long prev_state; -+ struct rq *rq; -+ int cpu, expired; -+ -+ /* Trace preemptions consistently with task switches */ -+ trace_sched_entry_tp(preempt); -+ -+ cpu = smp_processor_id(); -+ rq = cpu_rq(cpu); -+ prev = rq->curr; -+ rq->block = false; -+ -+ schedule_debug(prev, preempt); -+ -+ klp_sched_try_switch(prev); -+ -+ local_irq_disable(); -+ rcu_note_context_switch(preempt); -+ -+ /* -+ * Make sure that signal_pending_state()->signal_pending() below -+ * can't be reordered with __set_current_state(TASK_INTERRUPTIBLE) -+ * done by the caller to avoid the race with signal_wake_up(): -+ * -+ * __set_current_state(@state) signal_wake_up() -+ * schedule() set_tsk_thread_flag(p, TIF_SIGPENDING) -+ * wake_up_state(p, state) -+ * LOCK rq->lock LOCK p->pi_state -+ * smp_mb__after_spinlock() smp_mb__after_spinlock() -+ * if (signal_pending_state()) if (p->state & @state) -+ * -+ * Also, the membarrier system call requires a full memory barrier -+ * after coming from user-space, before storing to rq->curr; this -+ * barrier matches a full barrier in the proximity of the membarrier -+ * system call exit. -+ */ -+ raw_spin_lock(&rq->lock); -+ smp_mb__after_spinlock(); -+ -+ hrtick_schedule_enter(rq); -+ -+ update_rq_clock(rq); -+ -+ switch_count = &prev->nivcsw; -+ -+ /* Task state changes only considers SM_PREEMPT as preemption */ -+ preempt = sched_mode == SM_PREEMPT; -+ -+ /* -+ * We must load prev->state once (task_struct::state is volatile), such -+ * that we form a control dependency vs deactivate_task() below. -+ */ -+ prev_state = READ_ONCE(prev->__state); -+ if (sched_mode == SM_IDLE) { -+ if (!srq_nr_queued(cpu) && is_preempt_list_empty(cpu)) { -+ next = prev; -+ goto picked; -+ } -+ } else if (!preempt && prev_state) { -+ rq->block = try_to_block_task(rq, prev, &prev_state); -+ switch_count = &prev->nvcsw; -+ } -+ -+ expired = check_curr(rq->curr, rq); -+ next = pick_next_task(cpu, rq, expired); -+picked: -+ clear_tsk_need_resched(prev); -+ clear_preempt_need_resched(); -+ rq->last_seen_need_resched_ns = 0; -+ -+ is_switch = prev != next; -+ if (likely(is_switch)) { -+ next->last_ran = rq->clock_task; -+ -+ /*printk(KERN_INFO "sched: %px -> %px\n", prev, next);*/ -+ rq->nr_switches++; -+ /* -+ * RCU users of rcu_dereference(rq->curr) may not see -+ * changes to task_struct made by pick_next_task(). -+ */ -+ RCU_INIT_POINTER(rq->curr, next); -+ /* -+ * The membarrier system call requires each architecture -+ * to have a full memory barrier after updating -+ * rq->curr, before returning to user-space. -+ * -+ * Here are the schemes providing that barrier on the -+ * various architectures: -+ * - mm ? switch_mm() : mmdrop() for x86, s390, sparc, PowerPC, -+ * RISC-V. switch_mm() relies on membarrier_arch_switch_mm() -+ * on PowerPC and on RISC-V. -+ * - finish_lock_switch() for weakly-ordered -+ * architectures where spin_unlock is a full barrier, -+ * - switch_to() for arm64 (weakly-ordered, spin_unlock -+ * is a RELEASE barrier), -+ * -+ * The barrier matches a full barrier in the proximity of -+ * the membarrier system call entry. -+ * -+ * On RISC-V, this barrier pairing is also needed for the -+ * SYNC_CORE command when switching between processes, cf. -+ * the inline comments in membarrier_arch_switch_mm(). -+ */ -+ ++*switch_count; -+ -+ trace_sched_switch(preempt, prev, next, prev_state); -+ -+ update_sched_cpu_prio(cpu, task_sched_prio(next)); -+ -+ /* Also unlocks the rq: */ -+ rq = context_switch(rq, prev, next); -+ -+ cpu = cpu_of(rq); -+ } else { -+ if (expired) -+ update_sched_cpu_prio(cpu, task_sched_prio(next)); -+ __balance_callbacks(rq); -+ hrtick_schedule_exit(rq); -+ raw_spin_unlock_irq(&rq->lock); -+ } -+ trace_sched_exit_tp(is_switch); -+} -+ -+void __noreturn do_task_dead(void) -+{ -+ /* Causes final put_task_struct in finish_task_switch(): */ -+ set_special_state(TASK_DEAD); -+ -+ /* Tell freezer to ignore us: */ -+ current->flags |= PF_NOFREEZE; -+ -+ __schedule(SM_NONE); -+ BUG(); -+ -+ /* Avoid "noreturn function does return" - but don't continue if BUG() is a NOP: */ -+ for (;;) -+ cpu_relax(); -+} -+ -+static inline void sched_submit_work(struct task_struct *tsk) -+{ -+ static DEFINE_WAIT_OVERRIDE_MAP(sched_map, LD_WAIT_CONFIG); -+ unsigned int task_flags; -+ -+ /* -+ * Establish LD_WAIT_CONFIG context to ensure none of the code called -+ * will use a blocking primitive -- which would lead to recursion. -+ */ -+ lock_map_acquire_try(&sched_map); -+ -+ task_flags = tsk->flags; -+ /* -+ * If a worker goes to sleep, notify and ask workqueue whether it -+ * wants to wake up a task to maintain concurrency. -+ */ -+ if (task_flags & PF_WQ_WORKER) -+ wq_worker_sleeping(tsk); -+ else if (task_flags & PF_IO_WORKER) -+ io_wq_worker_sleeping(tsk); -+ -+ /* -+ * spinlock and rwlock must not flush block requests. This will -+ * deadlock if the callback attempts to acquire a lock which is -+ * already acquired. -+ */ -+ WARN_ON_ONCE(current->__state & TASK_RTLOCK_WAIT); -+ -+ /* -+ * If we are going to sleep and we have plugged IO queued, -+ * make sure to submit it to avoid deadlocks. -+ */ -+ blk_flush_plug(tsk->plug, true); -+ -+ lock_map_release(&sched_map); -+} -+ -+static void sched_update_worker(struct task_struct *tsk) -+{ -+ if (tsk->flags & (PF_WQ_WORKER | PF_IO_WORKER | PF_BLOCK_TS)) { -+ if (tsk->flags & PF_BLOCK_TS) -+ blk_plug_invalidate_ts(tsk); -+ if (tsk->flags & PF_WQ_WORKER) -+ wq_worker_running(tsk); -+ else if (tsk->flags & PF_IO_WORKER) -+ io_wq_worker_running(tsk); -+ } -+} -+ -+static __always_inline void __schedule_loop(int sched_mode) -+{ -+ do { -+ preempt_disable(); -+ __schedule(sched_mode); -+ sched_preempt_enable_no_resched(); -+ } while (need_resched()); -+} -+ -+asmlinkage __visible void __sched schedule(void) -+{ -+ struct task_struct *tsk = current; -+ -+#ifdef CONFIG_RT_MUTEXES -+ lockdep_assert(!tsk->sched_rt_mutex); -+#endif -+ -+ if (!task_is_running(tsk)) -+ sched_submit_work(tsk); -+ __schedule_loop(SM_NONE); -+ sched_update_worker(tsk); -+} -+EXPORT_SYMBOL(schedule); -+ -+/* -+ * synchronize_rcu_tasks() makes sure that no task is stuck in preempted -+ * state (have scheduled out non-voluntarily) by making sure that all -+ * tasks have either left the run queue or have gone into user space. -+ * As idle tasks do not do either, they must not ever be preempted -+ * (schedule out non-voluntarily). -+ * -+ * schedule_idle() is similar to schedule_preempt_disable() except that it -+ * never enables preemption because it does not call sched_submit_work(). -+ */ -+void __sched schedule_idle(void) -+{ -+ /* -+ * As this skips calling sched_submit_work(), which the idle task does -+ * regardless because that function is a NOP when the task is in a -+ * TASK_RUNNING state, make sure this isn't used someplace that the -+ * current task can be in any other state. Note, idle is always in the -+ * TASK_RUNNING state. -+ */ -+ WARN_ON_ONCE(current->__state); -+ do { -+ __schedule(SM_IDLE); -+ } while (need_resched()); -+} -+ -+#if defined(CONFIG_CONTEXT_TRACKING_USER) && !defined(CONFIG_HAVE_CONTEXT_TRACKING_USER_OFFSTACK) -+asmlinkage __visible void __sched schedule_user(void) -+{ -+ /* -+ * If we come here after a random call to set_need_resched(), -+ * or we have been woken up remotely but the IPI has not yet arrived, -+ * we haven't yet exited the RCU idle mode. Do it here manually until -+ * we find a better solution. -+ * -+ * NB: There are buggy callers of this function. Ideally we -+ * should warn if prev_state != CT_STATE_USER, but that will trigger -+ * too frequently to make sense yet. -+ */ -+ enum ctx_state prev_state = exception_enter(); -+ schedule(); -+ exception_exit(prev_state); -+} -+#endif -+ -+/** -+ * schedule_preempt_disabled - called with preemption disabled -+ * -+ * Returns with preemption disabled. Note: preempt_count must be 1 -+ */ -+void __sched schedule_preempt_disabled(void) -+{ -+ sched_preempt_enable_no_resched(); -+ schedule(); -+ preempt_disable(); -+} -+ -+#ifdef CONFIG_PREEMPT_RT -+void __sched notrace schedule_rtlock(void) -+{ -+ __schedule_loop(SM_RTLOCK_WAIT); -+} -+NOKPROBE_SYMBOL(schedule_rtlock); -+#endif -+ -+static void __sched notrace preempt_schedule_common(void) -+{ -+ do { -+ /* -+ * Because the function tracer can trace preempt_count_sub() -+ * and it also uses preempt_enable/disable_notrace(), if -+ * NEED_RESCHED is set, the preempt_enable_notrace() called -+ * by the function tracer will call this function again and -+ * cause infinite recursion. -+ * -+ * Preemption must be disabled here before the function -+ * tracer can trace. Break up preempt_disable() into two -+ * calls. One to disable preemption without fear of being -+ * traced. The other to still record the preemption latency, -+ * which can also be traced by the function tracer. -+ */ -+ preempt_disable_notrace(); -+ preempt_latency_start(1); -+ __schedule(SM_PREEMPT); -+ preempt_latency_stop(1); -+ preempt_enable_no_resched_notrace(); -+ -+ /* -+ * Check again in case we missed a preemption opportunity -+ * between schedule and now. -+ */ -+ } while (need_resched()); -+} -+ -+#ifdef CONFIG_PREEMPTION -+/* -+ * This is the entry point to schedule() from in-kernel preemption -+ * off of preempt_enable. -+ */ -+asmlinkage __visible void __sched notrace preempt_schedule(void) -+{ -+ /* -+ * If there is a non-zero preempt_count or interrupts are disabled, -+ * we do not want to preempt the current task. Just return.. -+ */ -+ if (likely(!preemptible())) -+ return; -+ -+ preempt_schedule_common(); -+} -+NOKPROBE_SYMBOL(preempt_schedule); -+EXPORT_SYMBOL(preempt_schedule); -+ -+#ifdef CONFIG_PREEMPT_DYNAMIC -+# ifdef CONFIG_HAVE_PREEMPT_DYNAMIC_CALL -+# ifndef preempt_schedule_dynamic_enabled -+# define preempt_schedule_dynamic_enabled preempt_schedule -+# define preempt_schedule_dynamic_disabled NULL -+# endif -+DEFINE_STATIC_CALL(preempt_schedule, preempt_schedule_dynamic_enabled); -+EXPORT_STATIC_CALL_TRAMP(preempt_schedule); -+# elif defined(CONFIG_HAVE_PREEMPT_DYNAMIC_KEY) -+static DEFINE_STATIC_KEY_TRUE(sk_dynamic_preempt_schedule); -+void __sched notrace dynamic_preempt_schedule(void) -+{ -+ if (!static_branch_unlikely(&sk_dynamic_preempt_schedule)) -+ return; -+ preempt_schedule(); -+} -+NOKPROBE_SYMBOL(dynamic_preempt_schedule); -+EXPORT_SYMBOL(dynamic_preempt_schedule); -+# endif -+#endif /* CONFIG_PREEMPT_DYNAMIC */ -+ -+/** -+ * preempt_schedule_notrace - preempt_schedule called by tracing -+ * -+ * The tracing infrastructure uses preempt_enable_notrace to prevent -+ * recursion and tracing preempt enabling caused by the tracing -+ * infrastructure itself. But as tracing can happen in areas coming -+ * from userspace or just about to enter userspace, a preempt enable -+ * can occur before user_exit() is called. This will cause the scheduler -+ * to be called when the system is still in usermode. -+ * -+ * To prevent this, the preempt_enable_notrace will use this function -+ * instead of preempt_schedule() to exit user context if needed before -+ * calling the scheduler. -+ */ -+asmlinkage __visible void __sched notrace preempt_schedule_notrace(void) -+{ -+ enum ctx_state prev_ctx; -+ -+ if (likely(!preemptible())) -+ return; -+ -+ do { -+ /* -+ * Because the function tracer can trace preempt_count_sub() -+ * and it also uses preempt_enable/disable_notrace(), if -+ * NEED_RESCHED is set, the preempt_enable_notrace() called -+ * by the function tracer will call this function again and -+ * cause infinite recursion. -+ * -+ * Preemption must be disabled here before the function -+ * tracer can trace. Break up preempt_disable() into two -+ * calls. One to disable preemption without fear of being -+ * traced. The other to still record the preemption latency, -+ * which can also be traced by the function tracer. -+ */ -+ preempt_disable_notrace(); -+ preempt_latency_start(1); -+ /* -+ * Needs preempt disabled in case user_exit() is traced -+ * and the tracer calls preempt_enable_notrace() causing -+ * an infinite recursion. -+ */ -+ prev_ctx = exception_enter(); -+ __schedule(SM_PREEMPT); -+ exception_exit(prev_ctx); -+ -+ preempt_latency_stop(1); -+ preempt_enable_no_resched_notrace(); -+ } while (need_resched()); -+} -+EXPORT_SYMBOL_GPL(preempt_schedule_notrace); -+ -+#ifdef CONFIG_PREEMPT_DYNAMIC -+# ifdef CONFIG_HAVE_PREEMPT_DYNAMIC_CALL -+# ifndef preempt_schedule_notrace_dynamic_enabled -+# define preempt_schedule_notrace_dynamic_enabled preempt_schedule_notrace -+# define preempt_schedule_notrace_dynamic_disabled NULL -+# endif -+DEFINE_STATIC_CALL(preempt_schedule_notrace, preempt_schedule_notrace_dynamic_enabled); -+EXPORT_STATIC_CALL_TRAMP(preempt_schedule_notrace); -+# elif defined(CONFIG_HAVE_PREEMPT_DYNAMIC_KEY) -+static DEFINE_STATIC_KEY_TRUE(sk_dynamic_preempt_schedule_notrace); -+void __sched notrace dynamic_preempt_schedule_notrace(void) -+{ -+ if (!static_branch_unlikely(&sk_dynamic_preempt_schedule_notrace)) -+ return; -+ preempt_schedule_notrace(); -+} -+NOKPROBE_SYMBOL(dynamic_preempt_schedule_notrace); -+EXPORT_SYMBOL(dynamic_preempt_schedule_notrace); -+# endif -+#endif /* CONFIG_PREEMPT_DYNAMIC */ -+ -+#endif /* CONFIG_PREEMPTION */ -+ -+/* -+ * This is the entry point to schedule() from kernel preemption -+ * off of IRQ context. -+ * Note, that this is called and return with IRQs disabled. This will -+ * protect us against recursive calling from IRQ contexts. -+ */ -+asmlinkage __visible void __sched preempt_schedule_irq(void) -+{ -+ enum ctx_state prev_state; -+ -+ /* Catch callers which need to be fixed */ -+ BUG_ON(preempt_count() || !irqs_disabled()); -+ -+ prev_state = exception_enter(); -+ -+ do { -+ preempt_disable(); -+ local_irq_enable(); -+ __schedule(SM_PREEMPT); -+ local_irq_disable(); -+ sched_preempt_enable_no_resched(); -+ } while (need_resched()); -+ -+ exception_exit(prev_state); -+} -+ -+int default_wake_function(wait_queue_entry_t *curr, unsigned mode, int wake_flags, -+ void *key) -+{ -+ WARN_ON_ONCE(wake_flags & ~(WF_SYNC|WF_CURRENT_CPU)); -+ return try_to_wake_up(curr->private, mode, wake_flags); -+} -+EXPORT_SYMBOL(default_wake_function); -+ -+#ifdef CONFIG_RT_MUTEXES -+ -+/* -+ * Would be more useful with typeof()/auto_type but they don't mix with -+ * bit-fields. Since it's a local thing, use int. Keep the generic sounding -+ * name such that if someone were to implement this function we get to compare -+ * notes. -+ */ -+#define fetch_and_set(x, v) ({ int _x = (x); (x) = (v); _x; }) -+ -+void rt_mutex_pre_schedule(void) -+{ -+ lockdep_assert(!fetch_and_set(current->sched_rt_mutex, 1)); -+ sched_submit_work(current); -+} -+ -+void rt_mutex_schedule(void) -+{ -+ lockdep_assert(current->sched_rt_mutex); -+ __schedule_loop(SM_NONE); -+} -+ -+void rt_mutex_post_schedule(void) -+{ -+ sched_update_worker(current); -+ lockdep_assert(fetch_and_set(current->sched_rt_mutex, 0)); -+} -+ -+/* -+ * rt_mutex_setprio - set the current priority of a task -+ * @p: task to boost -+ * @pi_task: donor task -+ * -+ * This function changes the 'effective' priority of a task. It does -+ * not touch ->normal_prio like __setscheduler(). -+ * -+ * Used by the rt_mutex code to implement priority inheritance -+ * logic. Call site only calls if the priority of the task changed. -+ */ -+void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task) -+{ -+ int prio, queue_flag = DEQUEUE_SAVE | DEQUEUE_MOVE | DEQUEUE_NOCLOCK; -+ struct rq *rq; -+ struct rq_flags rf; -+ -+ /* XXX used to be waiter->prio, not waiter->task->prio */ -+ prio = __rt_effective_prio(pi_task, p->normal_prio); -+ -+ /* -+ * If nothing changed; bail early. -+ */ -+ if (p->pi_top_task == pi_task && prio == p->prio) -+ return; -+ -+ rq = __task_modify_lock(p, &rf); -+ /* -+ * Set under pi_lock && rq->lock, such that the value can be used under -+ * either lock. -+ * -+ * Note that there is loads of tricky to make this pointer cache work -+ * right. rt_mutex_slowunlock()+rt_mutex_postunlock() work together to -+ * ensure a task is de-boosted (pi_task is set to NULL) before the -+ * task is allowed to run again (and can exit). This ensures the pointer -+ * points to a blocked task -- which guarantees the task is present. -+ */ -+ p->pi_top_task = pi_task; -+ -+ /* -+ * For FIFO/RR we only need to set prio, if that matches we're done. -+ */ -+ if (prio == p->prio) -+ goto out_unlock; -+ -+ /* -+ * Idle task boosting is a no-no in general. There is one -+ * exception, when PREEMPT_RT and NOHZ is active: -+ * -+ * The idle task calls get_next_timer_interrupt() and holds -+ * the timer wheel base->lock on the CPU and another CPU wants -+ * to access the timer (probably to cancel it). We can safely -+ * ignore the boosting request, as the idle CPU runs this code -+ * with interrupts disabled and will complete the lock -+ * protected section without being interrupted. So there is no -+ * real need to boost. -+ */ -+ if (unlikely(p == rq->idle)) { -+ WARN_ON(p != rq->curr); -+ WARN_ON(p->pi_blocked_on); -+ goto out_unlock; -+ } -+ -+ trace_sched_pi_setprio(p, pi_task); -+ -+ scoped_guard (sched_change, p, queue_flag) { -+ p->prio = prio; -+ } -+ -+out_unlock: -+ /* Caller holds task_struct::pi_lock, IRQs are still disabled */ -+ -+ __balance_callbacks(rq); -+ __task_modify_unlock(p, &rf); -+} -+#endif /* CONFIG_RT_MUTEXES */ -+ -+#if !defined(CONFIG_PREEMPTION) || defined(CONFIG_PREEMPT_DYNAMIC) -+int __sched __cond_resched(void) -+{ -+ if (should_resched(0) && !irqs_disabled()) { -+ preempt_schedule_common(); -+ return 1; -+ } -+ /* -+ * In PREEMPT_RCU kernels, ->rcu_read_lock_nesting tells the tick -+ * whether the current CPU is in an RCU read-side critical section, -+ * so the tick can report quiescent states even for CPUs looping -+ * in kernel context. In contrast, in non-preemptible kernels, -+ * RCU readers leave no in-memory hints, which means that CPU-bound -+ * processes executing in kernel context might never report an -+ * RCU quiescent state. Therefore, the following code causes -+ * cond_resched() to report a quiescent state, but only when RCU -+ * is in urgent need of one. -+ * A third case, preemptible, but non-PREEMPT_RCU provides for -+ * urgently needed quiescent states via rcu_flavor_sched_clock_irq(). -+ */ -+#ifndef CONFIG_PREEMPT_RCU -+ rcu_all_qs(); -+#endif -+ return 0; -+} -+EXPORT_SYMBOL(__cond_resched); -+#endif -+ -+#ifdef CONFIG_PREEMPT_DYNAMIC -+# ifdef CONFIG_HAVE_PREEMPT_DYNAMIC_CALL -+# define cond_resched_dynamic_enabled __cond_resched -+# define cond_resched_dynamic_disabled ((void *)&__static_call_return0) -+DEFINE_STATIC_CALL_RET0(cond_resched, __cond_resched); -+EXPORT_STATIC_CALL_TRAMP(cond_resched); -+ -+# define might_resched_dynamic_enabled __cond_resched -+# define might_resched_dynamic_disabled ((void *)&__static_call_return0) -+DEFINE_STATIC_CALL_RET0(might_resched, __cond_resched); -+EXPORT_STATIC_CALL_TRAMP(might_resched); -+# elif defined(CONFIG_HAVE_PREEMPT_DYNAMIC_KEY) -+static DEFINE_STATIC_KEY_FALSE(sk_dynamic_cond_resched); -+int __sched dynamic_cond_resched(void) -+{ -+ if (!static_branch_unlikely(&sk_dynamic_cond_resched)) -+ return 0; -+ return __cond_resched(); -+} -+EXPORT_SYMBOL(dynamic_cond_resched); -+ -+static DEFINE_STATIC_KEY_FALSE(sk_dynamic_might_resched); -+int __sched dynamic_might_resched(void) -+{ -+ if (!static_branch_unlikely(&sk_dynamic_might_resched)) -+ return 0; -+ return __cond_resched(); -+} -+EXPORT_SYMBOL(dynamic_might_resched); -+# endif -+#endif /* CONFIG_PREEMPT_DYNAMIC */ -+ -+/* -+ * __cond_resched_lock() - if a reschedule is pending, drop the given lock, -+ * call schedule, and on return reacquire the lock. -+ * -+ * This works OK both with and without CONFIG_PREEMPTION. We do strange low-level -+ * operations here to prevent schedule() from being called twice (once via -+ * spin_unlock(), once by hand). -+ */ -+int __cond_resched_lock(spinlock_t *lock) -+{ -+ int resched = should_resched(PREEMPT_LOCK_OFFSET); -+ int ret = 0; -+ -+ lockdep_assert_held(lock); -+ -+ if (spin_needbreak(lock) || resched) { -+ spin_unlock(lock); -+ if (!_cond_resched()) -+ cpu_relax(); -+ ret = 1; -+ spin_lock(lock); -+ } -+ return ret; -+} -+EXPORT_SYMBOL(__cond_resched_lock); -+ -+int __cond_resched_rwlock_read(rwlock_t *lock) -+{ -+ int resched = should_resched(PREEMPT_LOCK_OFFSET); -+ int ret = 0; -+ -+ lockdep_assert_held_read(lock); -+ -+ if (rwlock_needbreak(lock) || resched) { -+ read_unlock(lock); -+ if (!_cond_resched()) -+ cpu_relax(); -+ ret = 1; -+ read_lock(lock); -+ } -+ return ret; -+} -+EXPORT_SYMBOL(__cond_resched_rwlock_read); -+ -+int __cond_resched_rwlock_write(rwlock_t *lock) -+{ -+ int resched = should_resched(PREEMPT_LOCK_OFFSET); -+ int ret = 0; -+ -+ lockdep_assert_held_write(lock); -+ -+ if (rwlock_needbreak(lock) || resched) { -+ write_unlock(lock); -+ if (!_cond_resched()) -+ cpu_relax(); -+ ret = 1; -+ write_lock(lock); -+ } -+ return ret; -+} -+EXPORT_SYMBOL(__cond_resched_rwlock_write); -+ -+#ifdef CONFIG_PREEMPT_DYNAMIC -+ -+# ifdef CONFIG_GENERIC_ENTRY -+# include -+# endif -+ -+/* -+ * SC:cond_resched -+ * SC:might_resched -+ * SC:preempt_schedule -+ * SC:preempt_schedule_notrace -+ * SC:irqentry_exit_cond_resched -+ * -+ * -+ * NONE: -+ * cond_resched <- __cond_resched -+ * might_resched <- RET0 -+ * preempt_schedule <- NOP -+ * preempt_schedule_notrace <- NOP -+ * irqentry_exit_cond_resched <- NOP -+ * dynamic_preempt_lazy <- false -+ * -+ * VOLUNTARY: -+ * cond_resched <- __cond_resched -+ * might_resched <- __cond_resched -+ * preempt_schedule <- NOP -+ * preempt_schedule_notrace <- NOP -+ * irqentry_exit_cond_resched <- NOP -+ * dynamic_preempt_lazy <- false -+ * -+ * FULL: -+ * cond_resched <- RET0 -+ * might_resched <- RET0 -+ * preempt_schedule <- preempt_schedule -+ * preempt_schedule_notrace <- preempt_schedule_notrace -+ * irqentry_exit_cond_resched <- irqentry_exit_cond_resched -+ * dynamic_preempt_lazy <- false -+ * -+ * LAZY: -+ * cond_resched <- RET0 -+ * might_resched <- RET0 -+ * preempt_schedule <- preempt_schedule -+ * preempt_schedule_notrace <- preempt_schedule_notrace -+ * irqentry_exit_cond_resched <- irqentry_exit_cond_resched -+ * dynamic_preempt_lazy <- true -+ */ -+ -+enum { -+ preempt_dynamic_undefined = -1, -+ preempt_dynamic_none, -+ preempt_dynamic_voluntary, -+ preempt_dynamic_full, -+ preempt_dynamic_lazy, -+}; -+ -+int preempt_dynamic_mode = preempt_dynamic_undefined; -+ -+int sched_dynamic_mode(const char *str) -+{ -+# if !(defined(CONFIG_PREEMPT_RT) || defined(CONFIG_ARCH_HAS_PREEMPT_LAZY)) -+ if (!strcmp(str, "none")) -+ return preempt_dynamic_none; -+ -+ if (!strcmp(str, "voluntary")) -+ return preempt_dynamic_voluntary; -+# endif -+ -+ if (!strcmp(str, "full")) -+ return preempt_dynamic_full; -+ -+# ifdef CONFIG_ARCH_HAS_PREEMPT_LAZY -+ if (!strcmp(str, "lazy")) -+ return preempt_dynamic_lazy; -+# endif -+ -+ return -EINVAL; -+} -+ -+# define preempt_dynamic_key_enable(f) static_key_enable(&sk_dynamic_##f.key) -+# define preempt_dynamic_key_disable(f) static_key_disable(&sk_dynamic_##f.key) -+ -+# if defined(CONFIG_HAVE_PREEMPT_DYNAMIC_CALL) -+# define preempt_dynamic_enable(f) static_call_update(f, f##_dynamic_enabled) -+# define preempt_dynamic_disable(f) static_call_update(f, f##_dynamic_disabled) -+# elif defined(CONFIG_HAVE_PREEMPT_DYNAMIC_KEY) -+# define preempt_dynamic_enable(f) preempt_dynamic_key_enable(f) -+# define preempt_dynamic_disable(f) preempt_dynamic_key_disable(f) -+# else -+# error "Unsupported PREEMPT_DYNAMIC mechanism" -+# endif -+ -+static DEFINE_MUTEX(sched_dynamic_mutex); -+ -+static void __sched_dynamic_update(int mode) -+{ -+ /* -+ * Avoid {NONE,VOLUNTARY} -> FULL transitions from ever ending up in -+ * the ZERO state, which is invalid. -+ */ -+ preempt_dynamic_enable(cond_resched); -+ preempt_dynamic_enable(cond_resched); -+ preempt_dynamic_enable(might_resched); -+ preempt_dynamic_enable(preempt_schedule); -+ preempt_dynamic_enable(preempt_schedule_notrace); -+ preempt_dynamic_enable(irqentry_exit_cond_resched); -+ preempt_dynamic_key_disable(preempt_lazy); -+ -+ switch (mode) { -+ case preempt_dynamic_none: -+ preempt_dynamic_enable(cond_resched); -+ preempt_dynamic_disable(might_resched); -+ preempt_dynamic_disable(preempt_schedule); -+ preempt_dynamic_disable(preempt_schedule_notrace); -+ preempt_dynamic_disable(irqentry_exit_cond_resched); -+ preempt_dynamic_key_disable(preempt_lazy); -+ if (mode != preempt_dynamic_mode) -+ pr_info("Dynamic Preempt: none\n"); -+ break; -+ -+ case preempt_dynamic_voluntary: -+ preempt_dynamic_enable(cond_resched); -+ preempt_dynamic_enable(might_resched); -+ preempt_dynamic_disable(preempt_schedule); -+ preempt_dynamic_disable(preempt_schedule_notrace); -+ preempt_dynamic_disable(irqentry_exit_cond_resched); -+ preempt_dynamic_key_disable(preempt_lazy); -+ if (mode != preempt_dynamic_mode) -+ pr_info("Dynamic Preempt: voluntary\n"); -+ break; -+ -+ case preempt_dynamic_full: -+ preempt_dynamic_enable(cond_resched); -+ preempt_dynamic_disable(might_resched); -+ preempt_dynamic_enable(preempt_schedule); -+ preempt_dynamic_enable(preempt_schedule_notrace); -+ preempt_dynamic_enable(irqentry_exit_cond_resched); -+ preempt_dynamic_key_disable(preempt_lazy); -+ if (mode != preempt_dynamic_mode) -+ pr_info("Dynamic Preempt: full\n"); -+ break; -+ -+ case preempt_dynamic_lazy: -+ preempt_dynamic_disable(cond_resched); -+ preempt_dynamic_disable(might_resched); -+ preempt_dynamic_enable(preempt_schedule); -+ preempt_dynamic_enable(preempt_schedule_notrace); -+ preempt_dynamic_enable(irqentry_exit_cond_resched); -+ preempt_dynamic_key_enable(preempt_lazy); -+ if (mode != preempt_dynamic_mode) -+ pr_info("Dynamic Preempt: lazy\n"); -+ break; -+ } -+ -+ preempt_dynamic_mode = mode; -+} -+ -+void sched_dynamic_update(int mode) -+{ -+ mutex_lock(&sched_dynamic_mutex); -+ __sched_dynamic_update(mode); -+ mutex_unlock(&sched_dynamic_mutex); -+} -+ -+static int __init setup_preempt_mode(char *str) -+{ -+ int mode = sched_dynamic_mode(str); -+ if (mode < 0) { -+ pr_warn("Dynamic Preempt: unsupported mode: %s\n", str); -+ return 0; -+ } -+ -+ sched_dynamic_update(mode); -+ return 1; -+} -+__setup("preempt=", setup_preempt_mode); -+ -+static void __init preempt_dynamic_init(void) -+{ -+ if (preempt_dynamic_mode == preempt_dynamic_undefined) { -+ if (IS_ENABLED(CONFIG_PREEMPT_NONE)) { -+ sched_dynamic_update(preempt_dynamic_none); -+ } else if (IS_ENABLED(CONFIG_PREEMPT_VOLUNTARY)) { -+ sched_dynamic_update(preempt_dynamic_voluntary); -+ } else if (IS_ENABLED(CONFIG_PREEMPT_LAZY)) { -+ sched_dynamic_update(preempt_dynamic_lazy); -+ } else { -+ /* Default static call setting, nothing to do */ -+ WARN_ON_ONCE(!IS_ENABLED(CONFIG_PREEMPT)); -+ preempt_dynamic_mode = preempt_dynamic_full; -+ pr_info("Dynamic Preempt: full\n"); -+ } -+ } -+} -+ -+# define PREEMPT_MODEL_ACCESSOR(mode) \ -+ bool preempt_model_##mode(void) \ -+ { \ -+ WARN_ON_ONCE(preempt_dynamic_mode == preempt_dynamic_undefined); \ -+ return preempt_dynamic_mode == preempt_dynamic_##mode; \ -+ } \ -+ EXPORT_SYMBOL_GPL(preempt_model_##mode) -+ -+PREEMPT_MODEL_ACCESSOR(none); -+PREEMPT_MODEL_ACCESSOR(voluntary); -+PREEMPT_MODEL_ACCESSOR(full); -+PREEMPT_MODEL_ACCESSOR(lazy); -+ -+#else /* !CONFIG_PREEMPT_DYNAMIC: */ -+ -+#define preempt_dynamic_mode -1 -+ -+static inline void preempt_dynamic_init(void) { } -+ -+#endif /* CONFIG_PREEMPT_DYNAMIC */ -+ -+const char *preempt_modes[] = { -+ "none", "voluntary", "full", "lazy", NULL, -+}; -+ -+const char *preempt_model_str(void) -+{ -+ bool brace = IS_ENABLED(CONFIG_PREEMPT_RT) && -+ (IS_ENABLED(CONFIG_PREEMPT_DYNAMIC) || -+ IS_ENABLED(CONFIG_PREEMPT_LAZY)); -+ static char buf[128]; -+ -+ if (IS_ENABLED(CONFIG_PREEMPT_BUILD)) { -+ struct seq_buf s; -+ -+ seq_buf_init(&s, buf, sizeof(buf)); -+ seq_buf_puts(&s, "PREEMPT"); -+ -+ if (IS_ENABLED(CONFIG_PREEMPT_RT)) -+ seq_buf_printf(&s, "%sRT%s", -+ brace ? "_{" : "_", -+ brace ? "," : ""); -+ -+ if (IS_ENABLED(CONFIG_PREEMPT_DYNAMIC)) { -+ seq_buf_printf(&s, "(%s)%s", -+ preempt_dynamic_mode >= 0 ? -+ preempt_modes[preempt_dynamic_mode] : "undef", -+ brace ? "}" : ""); -+ return seq_buf_str(&s); -+ } -+ -+ if (IS_ENABLED(CONFIG_PREEMPT_LAZY)) { -+ seq_buf_printf(&s, "LAZY%s", -+ brace ? "}" : ""); -+ return seq_buf_str(&s); -+ } -+ -+ return seq_buf_str(&s); -+ } -+ -+ if (IS_ENABLED(CONFIG_PREEMPT_VOLUNTARY_BUILD)) -+ return "VOLUNTARY"; -+ -+ return "NONE"; -+} -+ -+int io_schedule_prepare(void) -+{ -+ int old_iowait = current->in_iowait; -+ -+ current->in_iowait = 1; -+ blk_flush_plug(current->plug, true); -+ return old_iowait; -+} -+ -+void io_schedule_finish(int token) -+{ -+ current->in_iowait = token; -+} -+ -+/* -+ * This task is about to go to sleep on IO. Increment rq->nr_iowait so -+ * that process accounting knows that this is a task in IO wait state. -+ * -+ * But don't do that if it is a deliberate, throttling IO wait (this task -+ * has set its backing_dev_info: the queue against which it should throttle) -+ */ -+ -+long __sched io_schedule_timeout(long timeout) -+{ -+ int token; -+ long ret; -+ -+ token = io_schedule_prepare(); -+ ret = schedule_timeout(timeout); -+ io_schedule_finish(token); -+ -+ return ret; -+} -+EXPORT_SYMBOL(io_schedule_timeout); -+ -+void __sched io_schedule(void) -+{ -+ int token; -+ -+ token = io_schedule_prepare(); -+ schedule(); -+ io_schedule_finish(token); -+} -+EXPORT_SYMBOL(io_schedule); -+ -+void sched_show_task(struct task_struct *p) -+{ -+ unsigned long free; -+ int ppid; -+ -+ if (!try_get_task_stack(p)) -+ return; -+ -+ pr_info("task:%-15.15s state:%c", p->comm, task_state_to_char(p)); -+ -+ if (task_is_running(p)) -+ pr_cont(" running task "); -+ free = stack_not_used(p); -+ ppid = 0; -+ rcu_read_lock(); -+ if (pid_alive(p)) -+ ppid = task_pid_nr(rcu_dereference(p->real_parent)); -+ rcu_read_unlock(); -+ pr_cont(" stack:%-5lu pid:%-5d tgid:%-5d ppid:%-6d task_flags:0x%04x flags:0x%08lx\n", -+ free, task_pid_nr(p), task_tgid_nr(p), -+ ppid, p->flags, read_task_thread_flags(p)); -+ -+ print_worker_info(KERN_INFO, p); -+ print_stop_info(KERN_INFO, p); -+ show_stack(p, NULL, KERN_INFO); -+ put_task_stack(p); -+} -+EXPORT_SYMBOL_GPL(sched_show_task); -+ -+static inline bool -+state_filter_match(unsigned long state_filter, struct task_struct *p) -+{ -+ unsigned int state = READ_ONCE(p->__state); -+ -+ /* no filter, everything matches */ -+ if (!state_filter) -+ return true; -+ -+ /* filter, but doesn't match */ -+ if (!(state & state_filter)) -+ return false; -+ -+ /* -+ * When looking for TASK_UNINTERRUPTIBLE skip TASK_IDLE (allows -+ * TASK_KILLABLE). -+ */ -+ if (state_filter == TASK_UNINTERRUPTIBLE && (state & TASK_NOLOAD)) -+ return false; -+ -+ return true; -+} -+ -+ -+void show_state_filter(unsigned int state_filter) -+{ -+ struct task_struct *g, *p; -+ -+ rcu_read_lock(); -+ for_each_process_thread(g, p) { -+ /* -+ * reset the NMI-timeout, listing all files on a slow -+ * console might take a lot of time: -+ * Also, reset softlockup watchdogs on all CPUs, because -+ * another CPU might be blocked waiting for us to process -+ * an IPI. -+ */ -+ touch_nmi_watchdog(); -+ touch_all_softlockup_watchdogs(); -+ if (state_filter_match(state_filter, p)) -+ sched_show_task(p); -+ } -+ -+ /* TODO: Alt schedule FW should support this -+ if (!state_filter) -+ sysrq_sched_debug_show(); -+ */ -+ rcu_read_unlock(); -+ /* -+ * Only show locks if all tasks are dumped: -+ */ -+ if (!state_filter) -+ debug_show_all_locks(); -+} -+ -+void dump_cpu_task(int cpu) -+{ -+ if (in_hardirq() && cpu == smp_processor_id()) { -+ struct pt_regs *regs; -+ -+ regs = get_irq_regs(); -+ if (regs) { -+ show_regs(regs); -+ return; -+ } -+ } -+ -+ if (trigger_single_cpu_backtrace(cpu)) -+ return; -+ -+ pr_info("Task dump for CPU %d:\n", cpu); -+ sched_show_task(cpu_curr(cpu)); -+} -+ -+/** -+ * init_idle - set up an idle thread for a given CPU -+ * @idle: task in question -+ * @cpu: CPU the idle task belongs to -+ * -+ * NOTE: this function does not set the idle thread's NEED_RESCHED -+ * flag, to make booting more robust. -+ */ -+void __init init_idle(struct task_struct *idle, int cpu) -+{ -+ struct affinity_context ac = (struct affinity_context) { -+ .new_mask = cpumask_of(cpu), -+ .flags = 0, -+ }; -+ struct rq *rq = cpu_rq(cpu); -+ unsigned long flags; -+ -+ raw_spin_lock_irqsave(&idle->pi_lock, flags); -+ raw_spin_lock(&rq->lock); -+ -+ idle->prio = IDLE_TASK_PRIO; -+ idle->boost_prio = 0; -+ idle->time_slice = sysctl_sched_base_slice; -+ idle->last_ran = rq->clock_task; -+ idle->__state = TASK_RUNNING; -+ /* -+ * PF_KTHREAD should already be set at this point; regardless, make it -+ * look like a proper per-CPU kthread. -+ */ -+ idle->flags |= PF_KTHREAD | PF_NO_SETAFFINITY; -+ kthread_set_per_cpu(idle, cpu); -+ -+ /* -+ * No validation and serialization required at boot time and for -+ * setting up the idle tasks of not yet online CPUs. -+ */ -+ set_cpus_allowed_common(idle, &ac); -+ -+ /* Silence PROVE_RCU */ -+ rcu_read_lock(); -+ __set_task_cpu(idle, cpu); -+ rcu_read_unlock(); -+ -+ rq->idle = idle; -+ rcu_assign_pointer(rq->curr, idle); -+ idle->on_cpu = 1; -+ -+ raw_spin_unlock(&rq->lock); -+ raw_spin_unlock_irqrestore(&idle->pi_lock, flags); -+ -+ /* Set the preempt count _outside_ the spinlocks! */ -+ init_idle_preempt_count(idle, cpu); -+ -+ ftrace_graph_init_idle_task(idle, cpu); -+ vtime_init_idle(idle, cpu); -+ sprintf(idle->comm, "%s/%d", INIT_TASK_COMM, cpu); -+} -+ -+int cpuset_cpumask_can_shrink(const struct cpumask __maybe_unused *cur, -+ const struct cpumask __maybe_unused *trial) -+{ -+ return 1; -+} -+ -+int task_can_attach(struct task_struct *p) -+{ -+ int ret = 0; -+ -+ /* -+ * Kthreads which disallow setaffinity shouldn't be moved -+ * to a new cpuset; we don't want to change their CPU -+ * affinity and isolating such threads by their set of -+ * allowed nodes is unnecessary. Thus, cpusets are not -+ * applicable for such threads. This prevents checking for -+ * success of set_cpus_allowed_ptr() on all attached tasks -+ * before cpus_mask may be changed. -+ */ -+ if (p->flags & PF_NO_SETAFFINITY) -+ ret = -EINVAL; -+ -+ return ret; -+} -+ -+bool sched_smp_initialized __read_mostly; -+ -+#ifdef CONFIG_HOTPLUG_CPU -+/* -+ * Invoked on the outgoing CPU in context of the CPU hotplug thread -+ * after ensuring that there are no user space tasks left on the CPU. -+ * -+ * If there is a lazy mm in use on the hotplug thread, drop it and -+ * switch to init_mm. -+ * -+ * The reference count on init_mm is dropped in finish_cpu(). -+ */ -+static void sched_force_init_mm(void) -+{ -+ struct mm_struct *mm = current->active_mm; -+ -+ if (mm != &init_mm) { -+ mmgrab_lazy_tlb(&init_mm); -+ local_irq_disable(); -+ current->active_mm = &init_mm; -+ switch_mm_irqs_off(mm, &init_mm, current); -+ local_irq_enable(); -+ finish_arch_post_lock_switch(); -+ mmdrop_lazy_tlb(mm); -+ } -+ -+ /* finish_cpu(), as ran on the BP, will clean up the active_mm state */ -+} -+ -+static DEFINE_PER_CPU(struct cpu_stop_work, push_work); -+ -+/* -+ * This is enabled below SCHED_AP_ACTIVE; when !cpu_active(), but only -+ * effective when the hotplug motion is down. -+ */ -+static void balance_push(struct rq *rq) -+{ -+ struct task_struct *push_task = rq->curr; -+ -+ lockdep_assert_held(&rq->lock); -+ -+ /* -+ * Ensure the thing is persistent until balance_push_set(.on = false); -+ */ -+ rq->balance_callback = &balance_push_callback; -+ -+ /* -+ * Only active while going offline and when invoked on the outgoing -+ * CPU. -+ */ -+ if (!cpu_dying(rq->cpu) || rq != this_rq()) -+ return; -+ -+ /* -+ * Both the cpu-hotplug and stop task are in this case and are -+ * required to complete the hotplug process. -+ */ -+ if (kthread_is_per_cpu(push_task) || -+ is_migration_disabled(push_task)) { -+ -+ /* -+ * If this is the idle task on the outgoing CPU try to wake -+ * up the hotplug control thread which might wait for the -+ * last task to vanish. The rcuwait_active() check is -+ * accurate here because the waiter is pinned on this CPU -+ * and can't obviously be running in parallel. -+ * -+ * On RT kernels this also has to check whether there are -+ * pinned and scheduled out tasks on the runqueue. They -+ * need to leave the migrate disabled section first. -+ */ -+ if (rq->curr == rq->idle && !rq_has_pinned_tasks(rq) && -+ rcuwait_active(&rq->hotplug_wait)) { -+ raw_spin_unlock(&rq->lock); -+ rcuwait_wake_up(&rq->hotplug_wait); -+ raw_spin_lock(&rq->lock); -+ } -+ return; -+ } -+ -+ /* -+ * Temporarily drop rq->lock such that we can wake-up the stop task. -+ * Both preemption and IRQs are still disabled. -+ */ -+ preempt_disable(); -+ raw_spin_unlock(&rq->lock); -+ stop_one_cpu_nowait(rq->cpu, dummy_cpu_stop, push_task, this_cpu_ptr(&push_work)); -+ preempt_enable(); -+ /* -+ * At this point need_resched() is true and we'll take the loop in -+ * schedule(). The next pick is obviously going to be the stop task -+ * which kthread_is_per_cpu() and will push this task away. -+ */ -+ raw_spin_lock(&rq->lock); -+} -+ -+static void balance_push_set(int cpu, bool on) -+{ -+ struct rq *rq = cpu_rq(cpu); -+ struct rq_flags rf; -+ -+ rq_lock_irqsave(rq, &rf); -+ if (on) { -+ WARN_ON_ONCE(rq->balance_callback); -+ rq->balance_callback = &balance_push_callback; -+ } else if (rq->balance_callback == &balance_push_callback) { -+ rq->balance_callback = NULL; -+ } -+ rq_unlock_irqrestore(rq, &rf); -+} -+ -+/* -+ * Invoked from a CPUs hotplug control thread after the CPU has been marked -+ * inactive. All tasks which are not per CPU kernel threads are either -+ * pushed off this CPU now via balance_push() or placed on a different CPU -+ * during wakeup. Wait until the CPU is quiescent. -+ */ -+static void balance_hotplug_wait(void) -+{ -+ struct rq *rq = this_rq(); -+ int cpu = cpu_of(rq); -+ -+ rcuwait_wait_event(&rq->hotplug_wait, !rq_has_pinned_tasks(rq) && \ -+ is_preempt_list_empty(cpu), TASK_UNINTERRUPTIBLE); -+} -+ -+#else /* !CONFIG_HOTPLUG_CPU: */ -+ -+static void balance_push(struct rq *rq) -+{ -+} -+ -+static void balance_push_set(int cpu, bool on) -+{ -+} -+ -+static inline void balance_hotplug_wait(void) -+{ -+} -+#endif /* !CONFIG_HOTPLUG_CPU */ -+ -+static void set_rq_offline(struct rq *rq) -+{ -+ if (rq->online) { -+ update_rq_clock(rq); -+ rq->online = false; -+ } -+} -+ -+static void set_rq_online(struct rq *rq) -+{ -+ if (!rq->online) -+ rq->online = true; -+} -+ -+static inline void sched_set_rq_online(struct rq *rq, int cpu) -+{ -+ unsigned long flags; -+ -+ raw_spin_lock_irqsave(&rq->lock, flags); -+ set_rq_online(rq); -+ raw_spin_unlock_irqrestore(&rq->lock, flags); -+} -+ -+static inline void sched_set_rq_offline(struct rq *rq, int cpu) -+{ -+ unsigned long flags; -+ -+ raw_spin_lock_irqsave(&rq->lock, flags); -+ set_rq_offline(rq); -+ raw_spin_unlock_irqrestore(&rq->lock, flags); -+} -+ -+/* -+ * used to mark begin/end of suspend/resume: -+ */ -+static int num_cpus_frozen; -+ -+/* -+ * Update cpusets according to cpu_active mask. If cpusets are -+ * disabled, cpuset_update_active_cpus() becomes a simple wrapper -+ * around partition_sched_domains(). -+ * -+ * If we come here as part of a suspend/resume, don't touch cpusets because we -+ * want to restore it back to its original state upon resume anyway. -+ */ -+static void cpuset_cpu_active(void) -+{ -+ if (cpuhp_tasks_frozen) { -+ /* -+ * num_cpus_frozen tracks how many CPUs are involved in suspend -+ * resume sequence. As long as this is not the last online -+ * operation in the resume sequence, just build a single sched -+ * domain, ignoring cpusets. -+ */ -+ cpuset_reset_sched_domains(); -+ if (--num_cpus_frozen) -+ return; -+ /* -+ * This is the last CPU online operation. So fall through and -+ * restore the original sched domains by considering the -+ * cpuset configurations. -+ */ -+ cpuset_force_rebuild(); -+ } -+ -+ cpuset_update_active_cpus(); -+} -+ -+static void cpuset_cpu_inactive(unsigned int cpu) -+{ -+ if (!cpuhp_tasks_frozen) { -+ cpuset_update_active_cpus(); -+ } else { -+ num_cpus_frozen++; -+ cpuset_reset_sched_domains(); -+ } -+} -+ -+static inline void sched_smt_present_inc(int cpu) -+{ -+#ifdef CONFIG_SCHED_SMT -+ if (cpumask_weight(cpu_smt_mask(cpu)) == 2) { -+ static_branch_inc_cpuslocked(&sched_smt_present); -+ cpumask_or(&sched_smt_mask, &sched_smt_mask, cpu_smt_mask(cpu)); -+ } -+#endif /* CONFIG_SCHED_SMT */ -+} -+ -+static inline void sched_smt_present_dec(int cpu) -+{ -+#ifdef CONFIG_SCHED_SMT -+ if (cpumask_weight(cpu_smt_mask(cpu)) == 2) { -+ static_branch_dec_cpuslocked(&sched_smt_present); -+ cpumask_andnot(&sched_smt_mask, &sched_smt_mask, cpu_smt_mask(cpu)); -+ } -+#endif /* CONFIG_SCHED_SMT */ -+} -+ -+int sched_cpu_activate(unsigned int cpu) -+{ -+ struct rq *rq = cpu_rq(cpu); -+ -+ /* -+ * Clear the balance_push callback and prepare to schedule -+ * regular tasks. -+ */ -+ balance_push_set(cpu, false); -+ -+ set_cpu_active(cpu, true); -+ -+ if (sched_smp_initialized) -+ cpuset_cpu_active(); -+ -+ /* -+ * Put the rq online, if not already. This happens: -+ * -+ * 1) In the early boot process, because we build the real domains -+ * after all cpus have been brought up. -+ * -+ * 2) At runtime, if cpuset_cpu_active() fails to rebuild the -+ * domains. -+ */ -+ sched_set_rq_online(rq, cpu); -+ -+ /* -+ * When going up, increment the number of cores with SMT present. -+ */ -+ sched_smt_present_inc(cpu); -+ -+ return 0; -+} -+ -+int sched_cpu_deactivate(unsigned int cpu) -+{ -+ struct rq *rq = cpu_rq(cpu); -+ -+ set_cpu_active(cpu, false); -+ -+ /* -+ * From this point forward, this CPU will refuse to run any task that -+ * is not: migrate_disable() or KTHREAD_IS_PER_CPU, and will actively -+ * push those tasks away until this gets cleared, see -+ * sched_cpu_dying(). -+ */ -+ balance_push_set(cpu, true); -+ -+ /* -+ * We've cleared cpu_active_mask, wait for all preempt-disabled and RCU -+ * users of this state to go away such that all new such users will -+ * observe it. -+ * -+ * Specifically, we rely on ttwu to no longer target this CPU, see -+ * ttwu_queue_cond() and is_cpu_allowed(). -+ * -+ * Do sync before park smpboot threads to take care the RCU boost case. -+ */ -+ synchronize_rcu(); -+ -+ sched_set_rq_offline(rq, cpu); -+ -+ /* -+ * When going down, decrement the number of cores with SMT present. -+ */ -+ sched_smt_present_dec(cpu); -+ -+ if (!sched_smp_initialized) -+ return 0; -+ -+ cpuset_cpu_inactive(cpu); -+ -+ return 0; -+} -+ -+static void sched_rq_cpu_starting(unsigned int cpu) -+{ -+ struct rq *rq = cpu_rq(cpu); -+ -+ rq->calc_load_update = calc_load_update; -+} -+ -+int sched_cpu_starting(unsigned int cpu) -+{ -+ sched_rq_cpu_starting(cpu); -+ sched_tick_start(cpu); -+ return 0; -+} -+ -+#ifdef CONFIG_HOTPLUG_CPU -+ -+/* -+ * Invoked immediately before the stopper thread is invoked to bring the -+ * CPU down completely. At this point all per CPU kthreads except the -+ * hotplug thread (current) and the stopper thread (inactive) have been -+ * either parked or have been unbound from the outgoing CPU. Ensure that -+ * any of those which might be on the way out are gone. -+ * -+ * If after this point a bound task is being woken on this CPU then the -+ * responsible hotplug callback has failed to do it's job. -+ * sched_cpu_dying() will catch it with the appropriate fireworks. -+ */ -+int sched_cpu_wait_empty(unsigned int cpu) -+{ -+ balance_hotplug_wait(); -+ sched_force_init_mm(); -+ return 0; -+} -+ -+static void dump_rq_tasks(struct rq *rq, const char *loglvl) -+{ -+ struct task_struct *g, *p; -+ int cpu = cpu_of(rq); -+ -+ lockdep_assert_held(&rq->lock); -+ -+ printk("%sCPU%d\n", loglvl, cpu); -+ for_each_process_thread(g, p) { -+ if (task_cpu(p) != cpu) -+ continue; -+ -+ if (!task_on_rq_queued(p)) -+ continue; -+ -+ printk("%s\tpid: %d, name: %s\n", loglvl, p->pid, p->comm); -+ } -+} -+ -+int sched_cpu_dying(unsigned int cpu) -+{ -+ struct rq *rq = cpu_rq(cpu); -+ unsigned long flags; -+ -+ /* Handle pending wakeups and then migrate everything off */ -+ sched_tick_stop(cpu); -+ -+ raw_spin_lock_irqsave(&rq->lock, flags); -+ if (rq_has_pinned_tasks(rq)) { -+ WARN(true, "Dying CPU not properly vacated!"); -+ dump_rq_tasks(rq, KERN_WARNING); -+ } -+ raw_spin_unlock_irqrestore(&rq->lock, flags); -+ -+ hrtick_clear(rq); -+ return 0; -+} -+#endif /* CONFIG_HOTPLUG_CPU */ -+ -+void __init sched_init_smp(void) -+{ -+ /* Move init over to a non-isolated CPU */ -+ if (set_cpus_allowed_ptr(current, housekeeping_cpumask(HK_TYPE_DOMAIN)) < 0) -+ BUG(); -+ current->flags &= ~PF_NO_SETAFFINITY; -+ -+ sched_init_topology(); -+ -+ sched_smp_initialized = true; -+} -+ -+static int __init migration_init(void) -+{ -+ sched_cpu_starting(smp_processor_id()); -+ return 0; -+} -+early_initcall(migration_init); -+ -+int in_sched_functions(unsigned long addr) -+{ -+ return in_lock_functions(addr) || -+ (addr >= (unsigned long)__sched_text_start -+ && addr < (unsigned long)__sched_text_end); -+} -+ -+#ifdef CONFIG_CGROUP_SCHED -+/* -+ * Default task group. -+ * Every task in system belongs to this group at bootup. -+ */ -+struct task_group root_task_group; -+LIST_HEAD(task_groups); -+ -+/* Cacheline aligned slab cache for task_group */ -+static struct kmem_cache *task_group_cache __ro_after_init; -+#endif /* CONFIG_CGROUP_SCHED */ -+ -+void __init sched_init(void) -+{ -+ int i; -+ struct rq *rq; -+ -+ printk(KERN_INFO "sched/alt: "ALT_SCHED_NAME" CPU Scheduler "ALT_SCHED_VERSION\ -+ " by Alfred Chen.\n"); -+ -+ wait_bit_init(); -+ -+#ifdef CONFIG_CGROUP_SCHED -+ task_group_cache = KMEM_CACHE(task_group, 0); -+ -+ list_add(&root_task_group.list, &task_groups); -+ INIT_LIST_HEAD(&root_task_group.children); -+ INIT_LIST_HEAD(&root_task_group.siblings); -+#endif /* CONFIG_CGROUP_SCHED */ -+ sched_run_queue_init(&grq); -+ for_each_possible_cpu(i) { -+ WRITE_ONCE(cpu_prio[i], IDLE_TASK_SCHED_PRIO); -+ -+ rq = cpu_rq(i); -+ -+#ifdef CONFIG_SCHED_PDS -+ rq->prio_idx = rq->prio; -+#endif -+ -+ raw_spin_lock_init(&rq->lock); -+ rq->calc_load_active = 0; -+ rq->calc_load_update = jiffies + LOAD_FREQ; -+ rq->online = false; -+ rq->cpu = i; -+ -+ rq->balance_func = NULL; -+ rq->active_balance_arg.active = 0; -+ -+#ifdef CONFIG_NO_HZ_COMMON -+ INIT_CSD(&rq->nohz_csd, nohz_csd_func, rq); -+#endif -+ rq->balance_callback = &balance_push_callback; -+#ifdef CONFIG_HOTPLUG_CPU -+ rcuwait_init(&rq->hotplug_wait); -+#endif -+ rq->nr_switches = 0; -+ -+ hrtick_rq_init(rq); -+ -+ zalloc_cpumask_var_node(&rq->scratch_mask, GFP_KERNEL, cpu_to_node(i)); -+ } -+ /* Set rq->online for cpu 0 */ -+ cpu_rq(0)->online = true; -+ /* -+ * The boot idle thread does lazy MMU switching as well: -+ */ -+ mmgrab_lazy_tlb(&init_mm); -+ enter_lazy_tlb(&init_mm, current); -+ -+ /* -+ * The idle task doesn't need the kthread struct to function, but it -+ * is dressed up as a per-CPU kthread and thus needs to play the part -+ * if we want to avoid special-casing it in code that deals with per-CPU -+ * kthreads. -+ */ -+ WARN_ON(!set_kthread_struct(current)); -+ -+ /* -+ * Make us the idle thread. Technically, schedule() should not be -+ * called from this thread, however somewhere below it might be, -+ * but because we are the idle thread, we just pick up running again -+ * when this runqueue becomes "idle". -+ */ -+ __sched_fork(0, current); -+ init_idle(current, smp_processor_id()); -+ -+ calc_load_update = jiffies + LOAD_FREQ; -+ -+ idle_thread_set_boot_cpu(); -+ balance_push_set(smp_processor_id(), false); -+ -+ sched_init_topology_early(); -+ -+ preempt_dynamic_init(); -+} -+ -+#ifdef CONFIG_DEBUG_ATOMIC_SLEEP -+ -+void __might_sleep(const char *file, int line) -+{ -+ unsigned int state = get_current_state(); -+ /* -+ * Blocking primitives will set (and therefore destroy) current->state, -+ * since we will exit with TASK_RUNNING make sure we enter with it, -+ * otherwise we will destroy state. -+ */ -+ WARN_ONCE(state != TASK_RUNNING && current->task_state_change, -+ "do not call blocking ops when !TASK_RUNNING; " -+ "state=%x set at [<%p>] %pS\n", state, -+ (void *)current->task_state_change, -+ (void *)current->task_state_change); -+ -+ __might_resched(file, line, 0); -+} -+EXPORT_SYMBOL(__might_sleep); -+ -+static void print_preempt_disable_ip(int preempt_offset, unsigned long ip) -+{ -+ if (!IS_ENABLED(CONFIG_DEBUG_PREEMPT)) -+ return; -+ -+ if (preempt_count() == preempt_offset) -+ return; -+ -+ pr_err("Preemption disabled at:"); -+ print_ip_sym(KERN_ERR, ip); -+} -+ -+static inline bool resched_offsets_ok(unsigned int offsets) -+{ -+ unsigned int nested = preempt_count(); -+ -+ nested += rcu_preempt_depth() << MIGHT_RESCHED_RCU_SHIFT; -+ -+ return nested == offsets; -+} -+ -+void __might_resched(const char *file, int line, unsigned int offsets) -+{ -+ /* Ratelimiting timestamp: */ -+ static unsigned long prev_jiffy; -+ -+ unsigned long preempt_disable_ip; -+ -+ /* WARN_ON_ONCE() by default, no rate limit required: */ -+ rcu_sleep_check(); -+ -+ if ((resched_offsets_ok(offsets) && !irqs_disabled() && -+ !is_idle_task(current) && !current->non_block_count) || -+ system_state == SYSTEM_BOOTING || system_state > SYSTEM_RUNNING || -+ oops_in_progress) -+ return; -+ if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy) -+ return; -+ prev_jiffy = jiffies; -+ -+ /* Save this before calling printk(), since that will clobber it: */ -+ preempt_disable_ip = get_preempt_disable_ip(current); -+ -+ pr_err("BUG: sleeping function called from invalid context at %s:%d\n", -+ file, line); -+ pr_err("in_atomic(): %d, irqs_disabled(): %d, non_block: %d, pid: %d, name: %s\n", -+ in_atomic(), irqs_disabled(), current->non_block_count, -+ current->pid, current->comm); -+ pr_err("preempt_count: %x, expected: %x\n", preempt_count(), -+ offsets & MIGHT_RESCHED_PREEMPT_MASK); -+ -+ if (IS_ENABLED(CONFIG_PREEMPT_RCU)) { -+ pr_err("RCU nest depth: %d, expected: %u\n", -+ rcu_preempt_depth(), offsets >> MIGHT_RESCHED_RCU_SHIFT); -+ } -+ -+ if (task_stack_end_corrupted(current)) -+ pr_emerg("Thread overran stack, or stack corrupted\n"); -+ -+ debug_show_held_locks(current); -+ if (irqs_disabled()) -+ print_irqtrace_events(current); -+ -+ print_preempt_disable_ip(offsets & MIGHT_RESCHED_PREEMPT_MASK, -+ preempt_disable_ip); -+ -+ dump_stack(); -+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK); -+} -+EXPORT_SYMBOL(__might_resched); -+ -+void __cant_sleep(const char *file, int line, int preempt_offset) -+{ -+ static unsigned long prev_jiffy; -+ -+ if (irqs_disabled()) -+ return; -+ -+ if (!IS_ENABLED(CONFIG_PREEMPT_COUNT)) -+ return; -+ -+ if (preempt_count() > preempt_offset) -+ return; -+ -+ if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy) -+ return; -+ prev_jiffy = jiffies; -+ -+ printk(KERN_ERR "BUG: assuming atomic context at %s:%d\n", file, line); -+ printk(KERN_ERR "in_atomic(): %d, irqs_disabled(): %d, pid: %d, name: %s\n", -+ in_atomic(), irqs_disabled(), -+ current->pid, current->comm); -+ -+ debug_show_held_locks(current); -+ dump_stack(); -+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK); -+} -+EXPORT_SYMBOL_GPL(__cant_sleep); -+ -+void __cant_migrate(const char *file, int line) -+{ -+ static unsigned long prev_jiffy; -+ -+ if (irqs_disabled()) -+ return; -+ -+ if (is_migration_disabled(current)) -+ return; -+ -+ if (!IS_ENABLED(CONFIG_PREEMPT_COUNT)) -+ return; -+ -+ if (preempt_count() > 0) -+ return; -+ -+ if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy) -+ return; -+ prev_jiffy = jiffies; -+ -+ pr_err("BUG: assuming non migratable context at %s:%d\n", file, line); -+ pr_err("in_atomic(): %d, irqs_disabled(): %d, migration_disabled() %u pid: %d, name: %s\n", -+ in_atomic(), irqs_disabled(), is_migration_disabled(current), -+ current->pid, current->comm); -+ -+ debug_show_held_locks(current); -+ dump_stack(); -+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK); -+} -+EXPORT_SYMBOL_GPL(__cant_migrate); -+#endif /* CONFIG_DEBUG_ATOMIC_SLEEP */ -+ -+#ifdef CONFIG_MAGIC_SYSRQ -+void normalize_rt_tasks(void) -+{ -+ struct task_struct *g, *p; -+ struct sched_attr attr = { -+ .sched_policy = SCHED_NORMAL, -+ }; -+ -+ read_lock(&tasklist_lock); -+ for_each_process_thread(g, p) { -+ /* -+ * Only normalize user tasks: -+ */ -+ if (p->flags & PF_KTHREAD) -+ continue; -+ -+ schedstat_set(p->stats.wait_start, 0); -+ schedstat_set(p->stats.sleep_start, 0); -+ schedstat_set(p->stats.block_start, 0); -+ -+ if (!rt_or_dl_task(p)) { -+ /* -+ * Renice negative nice level userspace -+ * tasks back to 0: -+ */ -+ if (task_nice(p) < 0) -+ set_user_nice(p, 0); -+ continue; -+ } -+ -+ __sched_setscheduler(p, &attr, false, false); -+ } -+ read_unlock(&tasklist_lock); -+} -+#endif /* CONFIG_MAGIC_SYSRQ */ -+ -+#ifdef CONFIG_KGDB_KDB -+/* -+ * These functions are only useful for KDB. -+ * -+ * They can only be called when the whole system has been -+ * stopped - every CPU needs to be quiescent, and no scheduling -+ * activity can take place. Using them for anything else would -+ * be a serious bug, and as a result, they aren't even visible -+ * under any other configuration. -+ */ -+ -+/** -+ * curr_task - return the current task for a given CPU. -+ * @cpu: the processor in question. -+ * -+ * ONLY VALID WHEN THE WHOLE SYSTEM IS STOPPED! -+ * -+ * Return: The current task for @cpu. -+ */ -+struct task_struct *curr_task(int cpu) -+{ -+ return cpu_curr(cpu); -+} -+ -+#endif /* CONFIG_KGDB_KDB */ -+ -+#ifdef CONFIG_CGROUP_SCHED -+static void sched_free_group(struct task_group *tg) -+{ -+ kmem_cache_free(task_group_cache, tg); -+} -+ -+static void sched_free_group_rcu(struct rcu_head *rhp) -+{ -+ sched_free_group(container_of(rhp, struct task_group, rcu)); -+} -+ -+static void sched_unregister_group(struct task_group *tg) -+{ -+ /* -+ * We have to wait for yet another RCU grace period to expire, as -+ * print_cfs_stats() might run concurrently. -+ */ -+ call_rcu(&tg->rcu, sched_free_group_rcu); -+} -+ -+/* allocate runqueue etc for a new task group */ -+struct task_group *sched_create_group(struct task_group *parent) -+{ -+ struct task_group *tg; -+ -+ tg = kmem_cache_alloc(task_group_cache, GFP_KERNEL | __GFP_ZERO); -+ if (!tg) -+ return ERR_PTR(-ENOMEM); -+ -+ return tg; -+} -+ -+void sched_online_group(struct task_group *tg, struct task_group *parent) -+{ -+} -+ -+/* RCU callback to free various structures associated with a task group */ -+static void sched_unregister_group_rcu(struct rcu_head *rhp) -+{ -+ /* Now it should be safe to free those cfs_rqs: */ -+ sched_unregister_group(container_of(rhp, struct task_group, rcu)); -+} -+ -+void sched_destroy_group(struct task_group *tg) -+{ -+ /* Wait for possible concurrent references to cfs_rqs complete: */ -+ call_rcu(&tg->rcu, sched_unregister_group_rcu); -+} -+ -+void sched_release_group(struct task_group *tg) -+{ -+} -+ -+static inline struct task_group *css_tg(struct cgroup_subsys_state *css) -+{ -+ return css ? container_of(css, struct task_group, css) : NULL; -+} -+ -+static struct cgroup_subsys_state * -+cpu_cgroup_css_alloc(struct cgroup_subsys_state *parent_css) -+{ -+ struct task_group *parent = css_tg(parent_css); -+ struct task_group *tg; -+ -+ if (!parent) { -+ /* This is early initialization for the top cgroup */ -+ return &root_task_group.css; -+ } -+ -+ tg = sched_create_group(parent); -+ if (IS_ERR(tg)) -+ return ERR_PTR(-ENOMEM); -+ return &tg->css; -+} -+ -+/* Expose task group only after completing cgroup initialization */ -+static int cpu_cgroup_css_online(struct cgroup_subsys_state *css) -+{ -+ struct task_group *tg = css_tg(css); -+ struct task_group *parent = css_tg(css->parent); -+ -+ if (parent) -+ sched_online_group(tg, parent); -+ return 0; -+} -+ -+static void cpu_cgroup_css_released(struct cgroup_subsys_state *css) -+{ -+ struct task_group *tg = css_tg(css); -+ -+ sched_release_group(tg); -+} -+ -+static void cpu_cgroup_css_free(struct cgroup_subsys_state *css) -+{ -+ struct task_group *tg = css_tg(css); -+ -+ /* -+ * Relies on the RCU grace period between css_released() and this. -+ */ -+ sched_unregister_group(tg); -+} -+ -+#ifdef CONFIG_RT_GROUP_SCHED -+static int cpu_cgroup_can_attach(struct cgroup_taskset *tset) -+{ -+ return 0; -+} -+#endif /* CONFIG_RT_GROUP_SCHED */ -+ -+static void cpu_cgroup_attach(struct cgroup_taskset *tset) -+{ -+} -+ -+#ifdef CONFIG_GROUP_SCHED_WEIGHT -+static int sched_group_set_shares(struct task_group *tg, unsigned long shares) -+{ -+ return 0; -+} -+ -+static int sched_group_set_idle(struct task_group *tg, long idle) -+{ -+ return 0; -+} -+ -+static int cpu_shares_write_u64(struct cgroup_subsys_state *css, -+ struct cftype *cftype, u64 shareval) -+{ -+ return sched_group_set_shares(css_tg(css), shareval); -+} -+ -+static u64 cpu_shares_read_u64(struct cgroup_subsys_state *css, -+ struct cftype *cft) -+{ -+ return 1024; -+} -+ -+static s64 cpu_idle_read_s64(struct cgroup_subsys_state *css, -+ struct cftype *cft) -+{ -+ return 0; -+} -+ -+static int cpu_idle_write_s64(struct cgroup_subsys_state *css, -+ struct cftype *cft, s64 idle) -+{ -+ return sched_group_set_idle(css_tg(css), idle); -+} -+#endif /* CONFIG_GROUP_SCHED_WEIGHT */ -+ -+#ifdef CONFIG_CFS_BANDWIDTH -+static s64 cpu_cfs_quota_read_s64(struct cgroup_subsys_state *css, -+ struct cftype *cft) -+{ -+ return -1; -+} -+ -+static int cpu_cfs_quota_write_s64(struct cgroup_subsys_state *css, -+ struct cftype *cftype, s64 cfs_quota_us) -+{ -+ return 0; -+} -+ -+static u64 cpu_cfs_period_read_u64(struct cgroup_subsys_state *css, -+ struct cftype *cft) -+{ -+ return 100000ULL; -+} -+ -+static int cpu_cfs_period_write_u64(struct cgroup_subsys_state *css, -+ struct cftype *cftype, u64 cfs_period_us) -+{ -+ return 0; -+} -+ -+static u64 cpu_cfs_burst_read_u64(struct cgroup_subsys_state *css, -+ struct cftype *cft) -+{ -+ return 0; -+} -+ -+static int cpu_cfs_burst_write_u64(struct cgroup_subsys_state *css, -+ struct cftype *cftype, u64 cfs_burst_us) -+{ -+ return 0; -+} -+ -+static int cpu_cfs_stat_show(struct seq_file *sf, void *v) -+{ -+ return 0; -+} -+ -+static int cpu_cfs_local_stat_show(struct seq_file *sf, void *v) -+{ -+ return 0; -+} -+#endif /* CONFIG_CFS_BANDWIDTH */ -+ -+#ifdef CONFIG_RT_GROUP_SCHED -+static int cpu_rt_runtime_write(struct cgroup_subsys_state *css, -+ struct cftype *cft, s64 val) -+{ -+ return 0; -+} -+ -+static s64 cpu_rt_runtime_read(struct cgroup_subsys_state *css, -+ struct cftype *cft) -+{ -+ return 0; -+} -+ -+static int cpu_rt_period_write_uint(struct cgroup_subsys_state *css, -+ struct cftype *cftype, u64 rt_period_us) -+{ -+ return 0; -+} -+ -+static u64 cpu_rt_period_read_uint(struct cgroup_subsys_state *css, -+ struct cftype *cft) -+{ -+ return 0; -+} -+#endif /* CONFIG_RT_GROUP_SCHED */ -+ -+#ifdef CONFIG_UCLAMP_TASK_GROUP -+static int cpu_uclamp_min_show(struct seq_file *sf, void *v) -+{ -+ seq_puts(sf, "0\n"); -+ return 0; -+} -+ -+static int cpu_uclamp_max_show(struct seq_file *sf, void *v) -+{ -+ seq_puts(sf, "max\n"); -+ return 0; -+} -+ -+static ssize_t cpu_uclamp_min_write(struct kernfs_open_file *of, -+ char *buf, size_t nbytes, -+ loff_t off) -+{ -+ return nbytes; -+} -+ -+static ssize_t cpu_uclamp_max_write(struct kernfs_open_file *of, -+ char *buf, size_t nbytes, -+ loff_t off) -+{ -+ return nbytes; -+} -+#endif /* CONFIG_UCLAMP_TASK_GROUP */ -+ -+static struct cftype cpu_legacy_files[] = { -+#ifdef CONFIG_GROUP_SCHED_WEIGHT -+ { -+ .name = "shares", -+ .read_u64 = cpu_shares_read_u64, -+ .write_u64 = cpu_shares_write_u64, -+ }, -+ { -+ .name = "idle", -+ .read_s64 = cpu_idle_read_s64, -+ .write_s64 = cpu_idle_write_s64, -+ }, -+#endif /* CONFIG_GROUP_SCHED_WEIGHT */ -+#ifdef CONFIG_CFS_BANDWIDTH -+ { -+ .name = "cfs_quota_us", -+ .read_s64 = cpu_cfs_quota_read_s64, -+ .write_s64 = cpu_cfs_quota_write_s64, -+ }, -+ { -+ .name = "cfs_period_us", -+ .read_u64 = cpu_cfs_period_read_u64, -+ .write_u64 = cpu_cfs_period_write_u64, -+ }, -+ { -+ .name = "cfs_burst_us", -+ .read_u64 = cpu_cfs_burst_read_u64, -+ .write_u64 = cpu_cfs_burst_write_u64, -+ }, -+ { -+ .name = "stat", -+ .seq_show = cpu_cfs_stat_show, -+ }, -+ { -+ .name = "stat.local", -+ .seq_show = cpu_cfs_local_stat_show, -+ }, -+#endif /* CONFIG_CFS_BANDWIDTH */ -+#ifdef CONFIG_RT_GROUP_SCHED -+ { -+ .name = "rt_runtime_us", -+ .read_s64 = cpu_rt_runtime_read, -+ .write_s64 = cpu_rt_runtime_write, -+ }, -+ { -+ .name = "rt_period_us", -+ .read_u64 = cpu_rt_period_read_uint, -+ .write_u64 = cpu_rt_period_write_uint, -+ }, -+#endif /* CONFIG_RT_GROUP_SCHED */ -+#ifdef CONFIG_UCLAMP_TASK_GROUP -+ { -+ .name = "uclamp.min", -+ .flags = CFTYPE_NOT_ON_ROOT, -+ .seq_show = cpu_uclamp_min_show, -+ .write = cpu_uclamp_min_write, -+ }, -+ { -+ .name = "uclamp.max", -+ .flags = CFTYPE_NOT_ON_ROOT, -+ .seq_show = cpu_uclamp_max_show, -+ .write = cpu_uclamp_max_write, -+ }, -+#endif /* CONFIG_UCLAMP_TASK_GROUP */ -+ { } /* Terminate */ -+}; -+ -+#ifdef CONFIG_GROUP_SCHED_WEIGHT -+static u64 cpu_weight_read_u64(struct cgroup_subsys_state *css, -+ struct cftype *cft) -+{ -+ return 100; -+} -+ -+static int cpu_weight_write_u64(struct cgroup_subsys_state *css, -+ struct cftype *cft, u64 weight) -+{ -+ return 0; -+} -+ -+static s64 cpu_weight_nice_read_s64(struct cgroup_subsys_state *css, -+ struct cftype *cft) -+{ -+ return 0; -+} -+ -+static int cpu_weight_nice_write_s64(struct cgroup_subsys_state *css, -+ struct cftype *cft, s64 nice) -+{ -+ return 0; -+} -+#endif /* CONFIG_GROUP_SCHED_WEIGHT */ -+ -+#ifdef CONFIG_CFS_BANDWIDTH -+static int cpu_max_show(struct seq_file *sf, void *v) -+{ -+ seq_puts(sf, "max 100000\n"); -+ return 0; -+} -+ -+static ssize_t cpu_max_write(struct kernfs_open_file *of, -+ char *buf, size_t nbytes, loff_t off) -+{ -+ return nbytes; -+} -+#endif /* CONFIG_CFS_BANDWIDTH */ -+ -+static struct cftype cpu_files[] = { -+#ifdef CONFIG_GROUP_SCHED_WEIGHT -+ { -+ .name = "weight", -+ .flags = CFTYPE_NOT_ON_ROOT, -+ .read_u64 = cpu_weight_read_u64, -+ .write_u64 = cpu_weight_write_u64, -+ }, -+ { -+ .name = "weight.nice", -+ .flags = CFTYPE_NOT_ON_ROOT, -+ .read_s64 = cpu_weight_nice_read_s64, -+ .write_s64 = cpu_weight_nice_write_s64, -+ }, -+ { -+ .name = "idle", -+ .flags = CFTYPE_NOT_ON_ROOT, -+ .read_s64 = cpu_idle_read_s64, -+ .write_s64 = cpu_idle_write_s64, -+ }, -+#endif /* CONFIG_GROUP_SCHED_WEIGHT */ -+#ifdef CONFIG_CFS_BANDWIDTH -+ { -+ .name = "max", -+ .flags = CFTYPE_NOT_ON_ROOT, -+ .seq_show = cpu_max_show, -+ .write = cpu_max_write, -+ }, -+ { -+ .name = "max.burst", -+ .flags = CFTYPE_NOT_ON_ROOT, -+ .read_u64 = cpu_cfs_burst_read_u64, -+ .write_u64 = cpu_cfs_burst_write_u64, -+ }, -+#endif /* CONFIG_CFS_BANDWIDTH */ -+#ifdef CONFIG_UCLAMP_TASK_GROUP -+ { -+ .name = "uclamp.min", -+ .flags = CFTYPE_NOT_ON_ROOT, -+ .seq_show = cpu_uclamp_min_show, -+ .write = cpu_uclamp_min_write, -+ }, -+ { -+ .name = "uclamp.max", -+ .flags = CFTYPE_NOT_ON_ROOT, -+ .seq_show = cpu_uclamp_max_show, -+ .write = cpu_uclamp_max_write, -+ }, -+#endif /* CONFIG_UCLAMP_TASK_GROUP */ -+ { } /* terminate */ -+}; -+ -+static int cpu_extra_stat_show(struct seq_file *sf, -+ struct cgroup_subsys_state *css) -+{ -+ return 0; -+} -+ -+static int cpu_local_stat_show(struct seq_file *sf, -+ struct cgroup_subsys_state *css) -+{ -+ return 0; -+} -+ -+struct cgroup_subsys cpu_cgrp_subsys = { -+ .css_alloc = cpu_cgroup_css_alloc, -+ .css_online = cpu_cgroup_css_online, -+ .css_released = cpu_cgroup_css_released, -+ .css_free = cpu_cgroup_css_free, -+ .css_extra_stat_show = cpu_extra_stat_show, -+ .css_local_stat_show = cpu_local_stat_show, -+#ifdef CONFIG_RT_GROUP_SCHED -+ .can_attach = cpu_cgroup_can_attach, -+#endif /* CONFIG_RT_GROUP_SCHED */ -+ .attach = cpu_cgroup_attach, -+ .legacy_cftypes = cpu_legacy_files, -+ .dfl_cftypes = cpu_files, -+ .early_init = true, -+ .threaded = true, -+}; -+#endif /* CONFIG_CGROUP_SCHED */ -+ -+#undef CREATE_TRACE_POINTS -+ -+#ifdef CONFIG_SCHED_MM_CID -+/* -+ * Concurrency IDentifier management -+ * -+ * Serialization rules: -+ * -+ * mm::mm_cid::mutex: Serializes fork() and exit() and therefore -+ * protects mm::mm_cid::users and mode switch -+ * transitions -+ * -+ * mm::mm_cid::lock: Serializes mm_update_max_cids() and -+ * mm_update_cpus_allowed(). Nests in mm_cid::mutex -+ * and runqueue lock. -+ * -+ * The mm_cidmask bitmap is not protected by any of the mm::mm_cid locks -+ * and can only be modified with atomic operations. -+ * -+ * The mm::mm_cid:pcpu per CPU storage is protected by the CPUs runqueue -+ * lock. -+ * -+ * CID ownership: -+ * -+ * A CID is either owned by a task (stored in task_struct::mm_cid.cid) or -+ * by a CPU (stored in mm::mm_cid.pcpu::cid). CIDs owned by CPUs have the -+ * MM_CID_ONCPU bit set. -+ * -+ * During the transition of ownership mode, the MM_CID_TRANSIT bit is set -+ * on the CIDs. When this bit is set the tasks drop the CID back into the -+ * pool when scheduling out. -+ * -+ * Both bits (ONCPU and TRANSIT) are filtered out by task_cid() when the -+ * CID is actually handed over to user space in the RSEQ memory. -+ * -+ * Mode switching: -+ * -+ * The ownership mode is per process and stored in mm:mm_cid::mode with the -+ * following possible states: -+ * -+ * 0: Per task ownership -+ * 0 | MM_CID_TRANSIT: Transition from per CPU to per task -+ * MM_CID_ONCPU: Per CPU ownership -+ * MM_CID_ONCPU | MM_CID_TRANSIT: Transition from per task to per CPU -+ * -+ * All transitions of ownership mode happen in two phases: -+ * -+ * 1) mm:mm_cid::mode has the MM_CID_TRANSIT bit set. This is OR'ed on the -+ * CIDs and denotes that the CID is only temporarily owned by a -+ * task. When the task schedules out it drops the CID back into the -+ * pool if this bit is set. -+ * -+ * 2) The initiating context walks the per CPU space or the tasks to fixup -+ * or drop the CIDs and after completion it clears MM_CID_TRANSIT in -+ * mm:mm_cid::mode. After that point the CIDs are strictly task or CPU -+ * owned again. -+ * -+ * This two phase transition is required to prevent CID space exhaustion -+ * during the transition as a direct transfer of ownership would fail: -+ * -+ * - On task to CPU mode switch if a task is scheduled in on one CPU and -+ * then migrated to another CPU before the fixup freed enough per task -+ * CIDs. -+ * -+ * - On CPU to task mode switch if two tasks are scheduled in on the same -+ * CPU before the fixup freed per CPU CIDs. -+ * -+ * Both scenarios can result in a live lock because sched_in() is invoked -+ * with runqueue lock held and loops in search of a CID and the fixup -+ * thread can't make progress freeing them up because it is stuck on the -+ * same runqueue lock. -+ * -+ * While MM_CID_TRANSIT is active during the transition phase the MM_CID -+ * bitmap can be contended, but that's a temporary contention bound to the -+ * transition period. After that everything goes back into steady state and -+ * nothing except fork() and exit() will touch the bitmap. This is an -+ * acceptable tradeoff as it completely avoids complex serialization, -+ * memory barriers and atomic operations for the common case. -+ * -+ * Aside of that this mechanism also ensures RT compability: -+ * -+ * - The task which runs the fixup is fully preemptible except for the -+ * short runqueue lock held sections. -+ * -+ * - The transient impact of the bitmap contention is only problematic -+ * when there is a thundering herd scenario of tasks scheduling in and -+ * out concurrently. There is not much which can be done about that -+ * except for avoiding mode switching by a proper overall system -+ * configuration. -+ * -+ * Switching to per CPU mode happens when the user count becomes greater -+ * than the maximum number of CIDs, which is calculated by: -+ * -+ * opt_cids = min(mm_cid::nr_cpus_allowed, mm_cid::users); -+ * max_cids = min(1.25 * opt_cids, num_possible_cpus()); -+ * -+ * The +25% allowance is useful for tight CPU masks in scenarios where only -+ * a few threads are created and destroyed to avoid frequent mode -+ * switches. Though this allowance shrinks, the closer opt_cids becomes to -+ * num_possible_cpus(), which is the (unfortunate) hard ABI limit. -+ * -+ * At the point of switching to per CPU mode the new user is not yet -+ * visible in the system, so the task which initiated the fork() runs the -+ * fixup function. mm_cid_fixup_tasks_to_cpu() walks the thread list and -+ * either marks each task owned CID with MM_CID_TRANSIT if the task is -+ * running on a CPU or drops it into the CID pool if a task is not on a -+ * CPU. Tasks which schedule in before the task walk reaches them do the -+ * handover in mm_cid_schedin(). When mm_cid_fixup_tasks_to_cpus() -+ * completes it is guaranteed that no task related to that MM owns a CID -+ * anymore. -+ * -+ * Switching back to task mode happens when the user count goes below the -+ * threshold which was recorded on the per CPU mode switch: -+ * -+ * pcpu_thrs = min(opt_cids - (opt_cids / 4), num_possible_cpus() / 2); -+ * -+ * This threshold is updated when a affinity change increases the number of -+ * allowed CPUs for the MM, which might cause a switch back to per task -+ * mode. -+ * -+ * If the switch back was initiated by a exiting task, then that task runs -+ * the fixup function. If it was initiated by a affinity change, then it's -+ * run either in the deferred update function in context of a workqueue or -+ * by a task which forks a new one or by a task which exits. Whatever -+ * happens first. mm_cid_fixup_cpus_to_task() walks through the possible -+ * CPUs and either transfers the CPU owned CIDs to a related task which -+ * runs on the CPU or drops it into the pool. Tasks which schedule in on a -+ * CPU which the walk did not cover yet do the handover themself. -+ * -+ * This transition from CPU to per task ownership happens in two phases: -+ * -+ * 1) mm:mm_cid.transit contains MM_CID_TRANSIT This is OR'ed on the task -+ * CID and denotes that the CID is only temporarily owned by the -+ * task. When it schedules out the task drops the CID back into the -+ * pool if this bit is set. -+ * -+ * 2) The initiating context walks the per CPU space and after completion -+ * clears mm:mm_cid.transit. So after that point the CIDs are strictly -+ * task owned again. -+ * -+ * This two phase transition is required to prevent CID space exhaustion -+ * during the transition as a direct transfer of ownership would fail if -+ * two tasks are scheduled in on the same CPU before the fixup freed per -+ * CPU CIDs. -+ * -+ * When mm_cid_fixup_cpus_to_tasks() completes it's guaranteed that no CID -+ * related to that MM is owned by a CPU anymore. -+ */ -+ -+/* -+ * Update the CID range properties when the constraints change. Invoked via -+ * fork(), exit() and affinity changes -+ */ -+static void __mm_update_max_cids(struct mm_mm_cid *mc) -+{ -+ unsigned int opt_cids, max_cids; -+ -+ /* Calculate the new optimal constraint */ -+ opt_cids = min(mc->nr_cpus_allowed, mc->users); -+ -+ /* Adjust the maximum CIDs to +25% limited by the number of possible CPUs */ -+ max_cids = min(opt_cids + (opt_cids / 4), num_possible_cpus()); -+ WRITE_ONCE(mc->max_cids, max_cids); -+} -+ -+static inline unsigned int mm_cid_calc_pcpu_thrs(struct mm_mm_cid *mc) -+{ -+ unsigned int opt_cids; -+ -+ opt_cids = min(mc->nr_cpus_allowed, mc->users); -+ /* Has to be at least 1 because 0 indicates PCPU mode off */ -+ return max(min(opt_cids - opt_cids / 4, num_possible_cpus() / 2), 1); -+} -+ -+static bool mm_update_max_cids(struct mm_struct *mm) -+{ -+ struct mm_mm_cid *mc = &mm->mm_cid; -+ bool percpu = cid_on_cpu(mc->mode); -+ -+ lockdep_assert_held(&mm->mm_cid.lock); -+ -+ /* Clear deferred mode switch flag. A change is handled by the caller */ -+ mc->update_deferred = false; -+ __mm_update_max_cids(mc); -+ -+ /* Check whether owner mode must be changed */ -+ if (!percpu) { -+ /* Enable per CPU mode when the number of users is above max_cids */ -+ if (mc->users > mc->max_cids) -+ mc->pcpu_thrs = mm_cid_calc_pcpu_thrs(mc); -+ } else { -+ /* Switch back to per task if user count under threshold */ -+ if (mc->users < mc->pcpu_thrs) -+ mc->pcpu_thrs = 0; -+ } -+ -+ /* Mode change required? */ -+ if (percpu == !!mc->pcpu_thrs) -+ return false; -+ -+ /* Flip the mode and set the transition flag to bridge the transfer */ -+ WRITE_ONCE(mc->mode, mc->mode ^ (MM_CID_TRANSIT | MM_CID_ONCPU)); -+ /* -+ * Order the store against the subsequent fixups so that -+ * acquire(rq::lock) cannot be reordered by the CPU before the -+ * store. -+ */ -+ smp_mb(); -+ return true; -+} -+ -+static inline void mm_update_cpus_allowed(struct mm_struct *mm, const struct cpumask *affmsk) -+{ -+ struct cpumask *mm_allowed; -+ struct mm_mm_cid *mc; -+ unsigned int weight; -+ -+ if (!mm || !READ_ONCE(mm->mm_cid.users)) -+ return; -+ /* -+ * mm::mm_cid::mm_cpus_allowed is the superset of each threads -+ * allowed CPUs mask which means it can only grow. -+ */ -+ mc = &mm->mm_cid; -+ guard(raw_spinlock)(&mc->lock); -+ mm_allowed = mm_cpus_allowed(mm); -+ weight = cpumask_weighted_or(mm_allowed, mm_allowed, affmsk); -+ if (weight == mc->nr_cpus_allowed) -+ return; -+ -+ WRITE_ONCE(mc->nr_cpus_allowed, weight); -+ __mm_update_max_cids(mc); -+ if (!cid_on_cpu(mc->mode)) -+ return; -+ -+ /* Adjust the threshold to the wider set */ -+ mc->pcpu_thrs = mm_cid_calc_pcpu_thrs(mc); -+ /* Switch back to per task mode? */ -+ if (mc->users >= mc->pcpu_thrs) -+ return; -+ -+ /* Don't queue twice */ -+ if (mc->update_deferred) -+ return; -+ -+ /* Queue the irq work, which schedules the real work */ -+ mc->update_deferred = true; -+ irq_work_queue(&mc->irq_work); -+} -+ -+static inline void mm_cid_complete_transit(struct mm_struct *mm, unsigned int mode) -+{ -+ /* -+ * Ensure that the store removing the TRANSIT bit cannot be -+ * reordered by the CPU before the fixups have been completed. -+ */ -+ smp_mb(); -+ WRITE_ONCE(mm->mm_cid.mode, mode); -+} -+ -+static inline void mm_cid_transit_to_task(struct task_struct *t, struct mm_cid_pcpu *pcp) -+{ -+ if (cid_on_cpu(t->mm_cid.cid)) { -+ unsigned int cid = cpu_cid_to_cid(t->mm_cid.cid); -+ -+ t->mm_cid.cid = cid_to_transit_cid(cid); -+ pcp->cid = t->mm_cid.cid; -+ } -+} -+ -+static void mm_cid_fixup_cpus_to_tasks(struct mm_struct *mm) -+{ -+ unsigned int cpu; -+ -+ /* Walk the CPUs and fixup all stale CIDs */ -+ for_each_possible_cpu(cpu) { -+ struct mm_cid_pcpu *pcp = per_cpu_ptr(mm->mm_cid.pcpu, cpu); -+ struct rq *rq = cpu_rq(cpu); -+ -+ /* Remote access to mm::mm_cid::pcpu requires rq_lock */ -+ guard(rq_lock_irq)(rq); -+ /* Is the CID still owned by the CPU? */ -+ if (cid_on_cpu(pcp->cid)) { -+ /* -+ * If rq->curr has @mm, transfer it with the -+ * transition bit set. Otherwise drop it. -+ */ -+ if (rq->curr->mm == mm && rq->curr->mm_cid.active) -+ mm_cid_transit_to_task(rq->curr, pcp); -+ else -+ mm_drop_cid_on_cpu(mm, pcp); -+ -+ } else if (rq->curr->mm == mm && rq->curr->mm_cid.active) { -+ unsigned int cid = rq->curr->mm_cid.cid; -+ -+ /* Ensure it has the transition bit set */ -+ if (!cid_in_transit(cid)) { -+ cid = cid_to_transit_cid(cid); -+ rq->curr->mm_cid.cid = cid; -+ pcp->cid = cid; -+ } -+ } -+ } -+ mm_cid_complete_transit(mm, 0); -+} -+ -+static inline void mm_cid_transit_to_cpu(struct task_struct *t, struct mm_cid_pcpu *pcp) -+{ -+ if (cid_on_task(t->mm_cid.cid)) { -+ t->mm_cid.cid = cid_to_transit_cid(t->mm_cid.cid); -+ pcp->cid = t->mm_cid.cid; -+ } -+} -+ -+static void mm_cid_fixup_task_to_cpu(struct task_struct *t, struct mm_struct *mm) -+{ -+ /* Remote access to mm::mm_cid::pcpu requires rq_lock */ -+ guard(task_rq_lock)(t); -+ if (cid_on_task(t->mm_cid.cid)) { -+ /* If running on the CPU, put the CID in transit mode, otherwise drop it */ -+ if (task_rq(t)->curr == t) -+ mm_cid_transit_to_cpu(t, per_cpu_ptr(mm->mm_cid.pcpu, task_cpu(t))); -+ else -+ mm_unset_cid_on_task(t); -+ } -+} -+ -+static void mm_cid_fixup_tasks_to_cpus(void) -+{ -+ struct mm_struct *mm = current->mm; -+ struct task_struct *t; -+ -+ lockdep_assert_held(&mm->mm_cid.mutex); -+ -+ hlist_for_each_entry(t, &mm->mm_cid.user_list, mm_cid.node) { -+ /* Current has already transferred before invoking the fixup. */ -+ if (t != current) -+ mm_cid_fixup_task_to_cpu(t, mm); -+ } -+ -+ mm_cid_complete_transit(mm, MM_CID_ONCPU); -+} -+ -+static bool sched_mm_cid_add_user(struct task_struct *t, struct mm_struct *mm) -+{ -+ lockdep_assert_held(&mm->mm_cid.lock); -+ -+ t->mm_cid.active = 1; -+ hlist_add_head(&t->mm_cid.node, &mm->mm_cid.user_list); -+ mm->mm_cid.users++; -+ return mm_update_max_cids(mm); -+} -+ -+static void sched_mm_cid_fork(struct task_struct *t) -+{ -+ struct mm_struct *mm = t->mm; -+ bool percpu; -+ -+ if (!mm) -+ return; -+ -+ WARN_ON_ONCE(t->mm_cid.cid != MM_CID_UNSET); -+ -+ guard(mutex)(&mm->mm_cid.mutex); -+ scoped_guard(raw_spinlock_irq, &mm->mm_cid.lock) { -+ struct mm_cid_pcpu *pcp = this_cpu_ptr(mm->mm_cid.pcpu); -+ -+ /* First user ? */ -+ if (!mm->mm_cid.users) { -+ sched_mm_cid_add_user(t, mm); -+ t->mm_cid.cid = mm_get_cid(mm); -+ /* Required for execve() */ -+ pcp->cid = t->mm_cid.cid; -+ return; -+ } -+ -+ if (!sched_mm_cid_add_user(t, mm)) { -+ if (!cid_on_cpu(mm->mm_cid.mode)) -+ t->mm_cid.cid = mm_get_cid(mm); -+ return; -+ } -+ -+ /* Handle the mode change and transfer current's CID */ -+ percpu = cid_on_cpu(mm->mm_cid.mode); -+ if (!percpu) -+ mm_cid_transit_to_task(current, pcp); -+ else -+ mm_cid_transit_to_cpu(current, pcp); -+ } -+ -+ if (percpu) { -+ mm_cid_fixup_tasks_to_cpus(); -+ } else { -+ mm_cid_fixup_cpus_to_tasks(mm); -+ t->mm_cid.cid = mm_get_cid(mm); -+ } -+} -+ -+static bool sched_mm_cid_remove_user(struct task_struct *t) -+{ -+ lockdep_assert_held(&t->mm->mm_cid.lock); -+ -+ t->mm_cid.active = 0; -+ /* Clear the transition bit */ -+ t->mm_cid.cid = cid_from_transit_cid(t->mm_cid.cid); -+ mm_unset_cid_on_task(t); -+ hlist_del_init(&t->mm_cid.node); -+ t->mm->mm_cid.users--; -+ return mm_update_max_cids(t->mm); -+} -+ -+static bool __sched_mm_cid_exit(struct task_struct *t) -+{ -+ struct mm_struct *mm = t->mm; -+ -+ if (!sched_mm_cid_remove_user(t)) -+ return false; -+ /* -+ * Contrary to fork() this only deals with a switch back to per -+ * task mode either because the above decreased users or an -+ * affinity change increased the number of allowed CPUs and the -+ * deferred fixup did not run yet. -+ */ -+ if (WARN_ON_ONCE(cid_on_cpu(mm->mm_cid.mode))) -+ return false; -+ /* -+ * A failed fork(2) cleanup never gets here, so @current must have -+ * the same MM as @t. That's true for exit() and the failed -+ * pthread_create() cleanup case. -+ */ -+ if (WARN_ON_ONCE(current->mm != mm)) -+ return false; -+ return true; -+} -+ -+/* -+ * When a task exits, the MM CID held by the task is not longer required as -+ * the task cannot return to user space. -+ */ -+void sched_mm_cid_exit(struct task_struct *t) -+{ -+ struct mm_struct *mm = t->mm; -+ -+ if (!mm || !t->mm_cid.active) -+ return; -+ /* -+ * Ensure that only one instance is doing MM CID operations within -+ * a MM. The common case is uncontended. The rare fixup case adds -+ * some overhead. -+ */ -+ scoped_guard(mutex, &mm->mm_cid.mutex) { -+ /* mm_cid::mutex is sufficient to protect mm_cid::users */ -+ if (likely(mm->mm_cid.users > 1)) { -+ scoped_guard(raw_spinlock_irq, &mm->mm_cid.lock) { -+ if (!__sched_mm_cid_exit(t)) -+ return; -+ /* -+ * Mode change. The task has the CID unset -+ * already and dealt with an eventually set -+ * TRANSIT bit. If the CID is owned by the CPU -+ * then drop it. -+ */ -+ mm_drop_cid_on_cpu(mm, this_cpu_ptr(mm->mm_cid.pcpu)); -+ } -+ mm_cid_fixup_cpus_to_tasks(mm); -+ return; -+ } -+ /* Last user */ -+ scoped_guard(raw_spinlock_irq, &mm->mm_cid.lock) { -+ /* Required across execve() */ -+ if (t == current) -+ mm_cid_transit_to_task(t, this_cpu_ptr(mm->mm_cid.pcpu)); -+ /* Ignore mode change. There is nothing to do. */ -+ sched_mm_cid_remove_user(t); -+ } -+ } -+ -+ /* -+ * As this is the last user (execve(), process exit or failed -+ * fork(2)) there is no concurrency anymore. -+ * -+ * Synchronize eventually pending work to ensure that there are no -+ * dangling references left. @t->mm_cid.users is zero so nothing -+ * can queue this work anymore. -+ */ -+ irq_work_sync(&mm->mm_cid.irq_work); -+ cancel_work_sync(&mm->mm_cid.work); -+} -+ -+/* Deactivate MM CID allocation across execve() */ -+void sched_mm_cid_before_execve(struct task_struct *t) -+{ -+ sched_mm_cid_exit(t); -+} -+ -+/* Reactivate MM CID after execve() */ -+void sched_mm_cid_after_execve(struct task_struct *t) -+{ -+ if (t->mm) -+ sched_mm_cid_fork(t); -+} -+ -+static void mm_cid_work_fn(struct work_struct *work) -+{ -+ struct mm_struct *mm = container_of(work, struct mm_struct, mm_cid.work); -+ -+ guard(mutex)(&mm->mm_cid.mutex); -+ /* Did the last user task exit already? */ -+ if (!mm->mm_cid.users) -+ return; -+ -+ scoped_guard(raw_spinlock_irq, &mm->mm_cid.lock) { -+ /* Have fork() or exit() handled it already? */ -+ if (!mm->mm_cid.update_deferred) -+ return; -+ /* This clears mm_cid::update_deferred */ -+ if (!mm_update_max_cids(mm)) -+ return; -+ /* Affinity changes can only switch back to task mode */ -+ if (WARN_ON_ONCE(cid_on_cpu(mm->mm_cid.mode))) -+ return; -+ } -+ mm_cid_fixup_cpus_to_tasks(mm); -+} -+ -+static void mm_cid_irq_work(struct irq_work *work) -+{ -+ struct mm_struct *mm = container_of(work, struct mm_struct, mm_cid.irq_work); -+ -+ /* -+ * Needs to be unconditional because mm_cid::lock cannot be held -+ * when scheduling work as mm_update_cpus_allowed() nests inside -+ * rq::lock and schedule_work() might end up in wakeup... -+ */ -+ schedule_work(&mm->mm_cid.work); -+} -+ -+void mm_init_cid(struct mm_struct *mm, struct task_struct *p) -+{ -+ mm->mm_cid.max_cids = 0; -+ mm->mm_cid.mode = 0; -+ mm->mm_cid.nr_cpus_allowed = p->nr_cpus_allowed; -+ mm->mm_cid.users = 0; -+ mm->mm_cid.pcpu_thrs = 0; -+ mm->mm_cid.update_deferred = 0; -+ raw_spin_lock_init(&mm->mm_cid.lock); -+ mutex_init(&mm->mm_cid.mutex); -+ mm->mm_cid.irq_work = IRQ_WORK_INIT_HARD(mm_cid_irq_work); -+ INIT_WORK(&mm->mm_cid.work, mm_cid_work_fn); -+ INIT_HLIST_HEAD(&mm->mm_cid.user_list); -+ cpumask_copy(mm_cpus_allowed(mm), &p->cpus_mask); -+ bitmap_zero(mm_cidmask(mm), num_possible_cpus()); -+} -+#else /* CONFIG_SCHED_MM_CID */ -+static inline void mm_update_cpus_allowed(struct mm_struct *mm, const struct cpumask *affmsk) { } -+static inline void sched_mm_cid_fork(struct task_struct *t) { } -+#endif /* !CONFIG_SCHED_MM_CID */ -+ -+static DEFINE_PER_CPU(struct sched_change_ctx, sched_change_ctx); -+ -+struct sched_change_ctx *sched_change_begin(struct task_struct *p, unsigned int flags) -+{ -+ struct sched_change_ctx *ctx = this_cpu_ptr(&sched_change_ctx); -+ struct rq *rq = task_rq(p); -+ -+ /* -+ * Must exclusively use matched flags since this is both dequeue and -+ * enqueue. -+ */ -+ WARN_ON_ONCE(flags & 0xFFFF0000); -+ -+ *ctx = (struct sched_change_ctx){ -+ .p = p, -+ .flags = flags, -+ .queued = task_on_rq_queued(p), -+ .running = (p == rq->curr), -+ }; -+ -+ return ctx; -+} -+ -+void sched_change_end(struct sched_change_ctx *ctx) -+{ -+ if (ctx->running) { -+ struct rq *rq = task_rq(ctx->p); -+ const int cpu = cpu_of(rq); -+ -+ update_sched_cpu_prio(cpu, task_sched_prio(ctx->p)); -+ if (find_first_bit(rq_srq(rq)->bitmap, SCHED_QUEUE_BITS) < -+ READ_ONCE(cpu_prio[cpu])) -+ resched_curr(rq); -+ } -+} -diff --git a/kernel/sched/alt_core.h b/kernel/sched/alt_core.h -new file mode 100644 -index 000000000..9eb967501 ---- /dev/null -+++ b/kernel/sched/alt_core.h -@@ -0,0 +1,290 @@ -+#ifndef _KERNEL_SCHED_ALT_CORE_H -+#define _KERNEL_SCHED_ALT_CORE_H -+ -+/* -+ * Compile time debug macro -+ * #define ALT_SCHED_DEBUG -+ */ -+#define ALT_SCHED_DEBUG -+ -+#ifdef ALT_SCHED_DEBUG -+extern void alt_sched_debug(void); -+#else -+static inline void alt_sched_debug(void) {} -+#endif -+ -+/* preempt list function */ -+DECLARE_PER_CPU_SHARED_ALIGNED(struct llist_head, preempt_list); -+ -+static inline bool is_preempt_list_empty(const int cpu) -+{ -+ return llist_empty(per_cpu_ptr(&preempt_list, cpu)); -+} -+ -+/* -+ * Task related inlined functions -+ */ -+static inline bool is_migration_disabled(const struct task_struct *p) -+{ -+ return p->migration_disabled; -+} -+ -+/* rt_prio(prio) defined in include/linux/sched/rt.h */ -+#define rt_task(p) rt_prio((p)->prio) -+#define rt_policy(policy) ((policy) == SCHED_FIFO || (policy) == SCHED_RR) -+#define task_has_rt_policy(p) (rt_policy((p)->policy)) -+ -+#define fair_policy(policy) ((policy) == SCHED_NORMAL || (policy) == SCHED_BATCH) -+ -+#define valid_policy(policy) ((policy) <= SCHED_IDLE) -+ -+#define task_has_dl_policy(p) (false) -+#define dl_prio(prio) (false) -+ -+struct affinity_context { -+ const struct cpumask *new_mask; -+ struct cpumask *user_mask; -+ unsigned int flags; -+}; -+ -+/* CONFIG_SCHED_CLASS_EXT is not supported */ -+#define scx_switched_all() false -+ -+#define SCA_CHECK 0x01 -+/* SCA_MIGRATE_DISABLE & SCA_MIGRATE_ENABLE is not supported */ -+//#define SCA_MIGRATE_DISABLE 0x02 -+//#define SCA_MIGRATE_ENABLE 0x04 -+#define SCA_USER 0x08 -+ -+extern int __set_cpus_allowed_ptr(struct task_struct *p, struct affinity_context *ctx); -+ -+static inline cpumask_t *alloc_user_cpus_ptr(int node) -+{ -+ /* -+ * See set_cpus_allowed_force() above for the rcu_head usage. -+ */ -+ int size = max_t(int, cpumask_size(), sizeof(struct rcu_head)); -+ -+ return kmalloc_node(size, GFP_KERNEL, node); -+} -+ -+#ifdef CONFIG_RT_MUTEXES -+ -+static inline int __rt_effective_prio(struct task_struct *pi_task, int prio) -+{ -+ if (pi_task) -+ prio = min(prio, pi_task->prio); -+ -+ return prio; -+} -+ -+static inline int rt_effective_prio(struct task_struct *p, int prio) -+{ -+ struct task_struct *pi_task = rt_mutex_get_top_task(p); -+ -+ return __rt_effective_prio(pi_task, prio); -+} -+ -+#else /* !CONFIG_RT_MUTEXES: */ -+ -+static inline int rt_effective_prio(struct task_struct *p, int prio) -+{ -+ return prio; -+} -+ -+#endif /* !CONFIG_RT_MUTEXES */ -+ -+extern int __sched_setscheduler(struct task_struct *p, const struct sched_attr *attr, bool user, bool pi); -+extern int __sched_setaffinity(struct task_struct *p, struct affinity_context *ctx); -+ -+extern void wakeup_modified_task(struct task_struct *p); -+ -+/* -+ * run queue related inlined functions -+ */ -+static __always_inline -+struct llist_node *sched_llist_del(struct llist_node **curr, struct llist_node *target) -+{ -+ struct llist_node *entry; -+ -+ while (*curr) { -+ entry = *curr; -+ -+ if (entry == target) { -+ *curr = entry->next; -+ entry = container_of(curr, struct llist_node, next); -+ while (entry->next) -+ entry = entry->next; -+ -+ return entry; -+ } -+ curr = &entry->next; -+ } -+ WARN_ONCE(true, "sched/alt: llist_del() target should be in list\n"); -+ return NULL; -+} -+ -+static __always_inline -+void sched_llist_merge(struct llist_head *head, struct llist_node *first, struct llist_node *last) -+{ -+ while (!llist_add_batch(first, last, head)) { -+ struct llist_node *node, *new_first = llist_del_all(head); -+ -+ /* move [first, last] to the tail */ -+ for (node = last->next; node->next; node = node->next); -+ node->next = first; -+ -+ /* merge new first if any */ -+ if (new_first != first) { -+ for (node = new_first; first != node->next; node = node->next); -+ node->next = last->next; -+ first = new_first; -+ } else { -+ first = last->next; -+ } -+ /* terminal the tail */ -+ last->next = NULL; -+ } -+} -+ -+#define SRQ_DEQUEUE_TASK(srq, p, __modify_body__) \ -+{ \ -+ int idx = READ_ONCE(p->__sched_prio); \ -+ struct llist_head *head = &srq->_head[idx]; \ -+ struct llist_node *last, *first = llist_del_all(head); \ -+ \ -+ last = sched_llist_del(&first, &p->pq_node); \ -+ if (first) { \ -+ sched_llist_merge(head, first, last); \ -+ } else if (llist_empty(head)) { \ -+ WARN_ONCE(task_sched_prio(p) != idx, "sched: srq en/dequeue bug.\n"); \ -+ clear_bit(idx, srq->bitmap); \ -+ smp_rmb(); \ -+ if (!llist_empty(head)) \ -+ set_bit(idx, srq->bitmap); \ -+ } \ -+ __modify_body__ \ -+ WRITE_ONCE(p->__sched_prio, -1); \ -+ atomic_dec(&srq->nr_queued); \ -+} -+ -+#define SRQ_ENQUEUE_TASK(srq, p, __modify_body__) \ -+{ \ -+ int sched_prio = task_sched_prio(p); \ -+ \ -+ WRITE_ONCE(p->__sched_prio, sched_prio); \ -+ __modify_body__ \ -+ if (llist_add(&p->pq_node, &(srq)->_head[sched_prio])) \ -+ set_bit(sched_prio, (srq)->bitmap); \ -+ atomic_inc(&(srq)->nr_queued); \ -+} -+ -+/* -+ * Context API -+ */ -+static inline struct rq *__task_modify_lock(struct task_struct *p, struct rq_flags *rf) -+{ -+ for (;;) { -+ if (TASK_ON_RQ_WAKING == p->on_rq) { -+ struct rq *rq = cpu_rq(p->wake_cpu); -+ -+ raw_spin_lock(&rq->lock); -+ if (likely(TASK_ON_RQ_WAKING == p->on_rq && rq == task_rq(p))) { -+ rf->lock = &rq->lock; -+ rf->queued = false; -+ return rq; -+ } -+ raw_spin_unlock(&rq->lock); -+ } else if (task_on_rq_queued(p)) { -+ int idx; -+ if (p->on_cpu) { -+ struct rq *rq = task_rq(p); -+ -+ raw_spin_lock(&rq->lock); -+ if (likely(task_on_rq_queued(p) && p->on_cpu && rq == task_rq(p))) { -+ rf->lock = &rq->lock; -+ rf->queued = false; -+ return rq; -+ } -+ raw_spin_unlock(&rq->lock); -+ } else if ((idx = READ_ONCE(p->__sched_prio)) != -1) { -+ struct sched_run_queue *srq = cpu_srq(0); -+ raw_spinlock_t *lock = &srq->_lock[idx]; -+ -+ raw_spin_lock(lock); -+ if (task_on_rq_queued(p) && !p->on_cpu && -+ idx == READ_ONCE(p->__sched_prio)) { -+ -+ SRQ_DEQUEUE_TASK(srq, p, { -+ WRITE_ONCE(p->on_rq, TASK_ON_RQ_MIGRATING); -+ }); -+ -+ raw_spin_unlock(lock); -+ -+ rf->lock = NULL; -+ rf->queued = true; -+ return task_rq(p); -+ } -+ raw_spin_unlock(lock); -+ } -+ } else if (task_on_rq_migrating(p)) { -+ do { -+ cpu_relax(); -+ } while (unlikely(task_on_rq_migrating(p))); -+ } else { -+ rf->lock = NULL; -+ rf->queued = false; -+ return task_rq(p); -+ } -+ } -+} -+ -+static inline void __task_modify_unlock(struct task_struct *p, struct rq_flags *rf) -+{ -+ if (NULL != rf->lock) -+ raw_spin_unlock(rf->lock); -+ if (rf->queued) -+ wakeup_modified_task(p); -+} -+ -+static inline struct rq *task_access_lock(struct task_struct *p, struct rq_flags *rf) -+{ -+ raw_spin_lock_irqsave(&p->pi_lock, rf->flags); -+ return __task_modify_lock(p, rf); -+} -+ -+static inline void task_access_unlock(struct task_struct *p, struct rq_flags *rf) -+{ -+ __task_modify_unlock(p, rf); -+ raw_spin_unlock_irqrestore(&p->pi_lock, rf->flags); -+} -+ -+DEFINE_LOCK_GUARD_1(task_access_lock, struct task_struct, -+ _T->rq = task_access_lock(_T->lock, &_T->rf), -+ task_access_unlock(_T->lock, &_T->rf), -+ struct rq *rq; struct rq_flags rf) -+ -+#define task_rq_lock(...) _task_rq_lock(__VA_ARGS__) -+extern struct rq *_task_rq_lock(struct task_struct *p, struct rq_flags *rf); -+ -+static inline void -+task_rq_unlock(struct rq *rq, struct task_struct *p, struct rq_flags *rf) -+{ -+ raw_spin_unlock(&rq->lock); -+ raw_spin_unlock_irqrestore(&p->pi_lock, rf->flags); -+} -+ -+DEFINE_LOCK_GUARD_1(task_rq_lock, struct task_struct, -+ _T->rq = task_rq_lock(_T->lock, &_T->rf), -+ task_rq_unlock(_T->rq, _T->lock, &_T->rf), -+ struct rq *rq; struct rq_flags rf) -+ -+extern void yield_task(struct rq *rq); -+ -+DECLARE_STATIC_KEY_FALSE(sched_smt_present); -+ -+/* balance callback */ -+extern struct balance_callback *splice_balance_callbacks(struct rq *rq); -+extern void balance_callbacks(struct rq *rq, struct balance_callback *head); -+ -+#endif /* _KERNEL_SCHED_ALT_CORE_H */ -diff --git a/kernel/sched/alt_debug.c b/kernel/sched/alt_debug.c -new file mode 100644 -index 000000000..1dbd7eb6a ---- /dev/null -+++ b/kernel/sched/alt_debug.c -@@ -0,0 +1,32 @@ -+/* -+ * kernel/sched/alt_debug.c -+ * -+ * Print the alt scheduler debugging details -+ * -+ * Author: Alfred Chen -+ * Date : 2020 -+ */ -+#include "sched.h" -+#include "linux/sched/debug.h" -+ -+/* -+ * This allows printing both to /proc/sched_debug and -+ * to the console -+ */ -+#define SEQ_printf(m, x...) \ -+ do { \ -+ if (m) \ -+ seq_printf(m, x); \ -+ else \ -+ pr_cont(x); \ -+ } while (0) -+ -+void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns, -+ struct seq_file *m) -+{ -+ SEQ_printf(m, "%s (%d, #threads: %d)\n", p->comm, task_pid_nr_ns(p, ns), -+ get_nr_threads(p)); -+} -+ -+void proc_sched_set_task(struct task_struct *p) -+{} -diff --git a/kernel/sched/alt_sched.h b/kernel/sched/alt_sched.h -new file mode 100644 -index 000000000..f0c0fe25a ---- /dev/null -+++ b/kernel/sched/alt_sched.h -@@ -0,0 +1,1001 @@ -+#ifndef _KERNEL_SCHED_ALT_SCHED_H -+#define _KERNEL_SCHED_ALT_SCHED_H -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+ -+#include "../workqueue_internal.h" -+ -+#include "cpupri.h" -+ -+#ifdef CONFIG_CGROUP_SCHED -+/* task group related information */ -+struct task_group { -+ struct cgroup_subsys_state css; -+ -+ struct rcu_head rcu; -+ struct list_head list; -+ -+ struct task_group *parent; -+ struct list_head siblings; -+ struct list_head children; -+}; -+ -+extern struct task_group *sched_create_group(struct task_group *parent); -+extern void sched_online_group(struct task_group *tg, -+ struct task_group *parent); -+extern void sched_destroy_group(struct task_group *tg); -+extern void sched_release_group(struct task_group *tg); -+#endif /* CONFIG_CGROUP_SCHED */ -+ -+#define MIN_SCHED_NORMAL_PRIO (25) -+/* -+ * levels : RT[0-24], NORMAL[25-56], cpu idle task[57] -+ * vlevels : ecore/pcore/ucore single idle task -- [58,60] -+ * ecore/pcore/ucore smt_group idle task -- [61,63] -+ * -- BMQ -- -+ * NORMAL: (lower boost range 12, NICE_WIDTH 40, higher boost range 12) / 2 -+ * -- PDS -- -+ * NORMAL: SCHED_EDGE_DELTA + ((NICE_WIDTH 40) / 2) -+ */ -+#define SCHED_LEVELS (64) -+#define IDLE_TASK_SCHED_PRIO (MIN_SCHED_NORMAL_PRIO + NORMAL_PRIO_NUM / 2) -+ -+#define IDLE_TASK_PRIO (MIN_NORMAL_PRIO + NORMAL_PRIO_NUM) -+ -+/* -+ * Increase resolution of nice-level calculations for 64-bit architectures. -+ * The extra resolution improves shares distribution and load balancing of -+ * low-weight task groups (eg. nice +19 on an autogroup), deeper taskgroup -+ * hierarchies, especially on larger systems. This is not a user-visible change -+ * and does not change the user-interface for setting shares/weights. -+ * -+ * We increase resolution only if we have enough bits to allow this increased -+ * resolution (i.e. 64-bit). The costs for increasing resolution when 32-bit -+ * are pretty high and the returns do not justify the increased costs. -+ * -+ * Really only required when CONFIG_FAIR_GROUP_SCHED=y is also set, but to -+ * increase coverage and consistency always enable it on 64-bit platforms. -+ */ -+#ifdef CONFIG_64BIT -+# define NICE_0_LOAD_SHIFT (SCHED_FIXEDPOINT_SHIFT + SCHED_FIXEDPOINT_SHIFT) -+# define scale_load(w) ((w) << SCHED_FIXEDPOINT_SHIFT) -+# define scale_load_down(w) \ -+({ \ -+ unsigned long __w = (w); \ -+ if (__w) \ -+ __w = max(2UL, __w >> SCHED_FIXEDPOINT_SHIFT); \ -+ __w; \ -+}) -+#else -+# define NICE_0_LOAD_SHIFT (SCHED_FIXEDPOINT_SHIFT) -+# define scale_load(w) (w) -+# define scale_load_down(w) (w) -+#endif -+ -+/* task_struct::on_rq states: */ -+#define TASK_ON_RQ_QUEUED 1 -+#define TASK_ON_RQ_MIGRATING 2 -+#define TASK_ON_RQ_WAKING 11 -+ -+static inline int task_on_rq_queued(struct task_struct *p) -+{ -+ return READ_ONCE(p->on_rq) == TASK_ON_RQ_QUEUED; -+} -+ -+static inline int task_on_rq_migrating(struct task_struct *p) -+{ -+ return READ_ONCE(p->on_rq) == TASK_ON_RQ_MIGRATING; -+} -+ -+/* Wake flags. The first three directly map to some SD flag value */ -+#define WF_EXEC 0x02 /* Wakeup after exec; maps to SD_BALANCE_EXEC */ -+#define WF_FORK 0x04 /* Wakeup after fork; maps to SD_BALANCE_FORK */ -+#define WF_TTWU 0x08 /* Wakeup; maps to SD_BALANCE_WAKE */ -+ -+#define WF_SYNC 0x10 /* Waker goes to sleep after wakeup */ -+#define WF_MIGRATED 0x20 /* Internal use, task got migrated */ -+#define WF_CURRENT_CPU 0x40 /* Prefer to move the wakee to the current CPU. */ -+ -+static_assert(WF_EXEC == SD_BALANCE_EXEC); -+static_assert(WF_FORK == SD_BALANCE_FORK); -+static_assert(WF_TTWU == SD_BALANCE_WAKE); -+ -+/* -+ * {de,en}queue flags: -+ * -+ * SLEEP/WAKEUP - task is no-longer/just-became runnable -+ * -+ * SAVE/RESTORE - an otherwise spurious dequeue/enqueue, done to ensure tasks -+ * are in a known state which allows modification. Such pairs -+ * should preserve as much state as possible. -+ * -+ * MOVE - paired with SAVE/RESTORE, explicitly does not preserve the location -+ * in the runqueue. -+ * -+ * NOCLOCK - skip the update_rq_clock() (avoids double updates) -+ * -+ * MIGRATION - p->on_rq == TASK_ON_RQ_MIGRATING (used for DEADLINE) -+ * -+ * DELAYED - de/re-queue a sched_delayed task -+ * -+ * CLASS - going to update p->sched_class; makes sched_change call the -+ * various switch methods. -+ * -+ * ENQUEUE_HEAD - place at front of runqueue (tail if not specified) -+ * ENQUEUE_REPLENISH - CBS (replenish runtime and postpone deadline) -+ * ENQUEUE_MIGRATED - the task was migrated during wakeup -+ * ENQUEUE_RQ_SELECTED - ->select_task_rq() was called -+ * -+ * XXX SAVE/RESTORE in combination with CLASS doesn't really make sense, but -+ * SCHED_DEADLINE seems to rely on this for now. -+ */ -+ -+#define DEQUEUE_SLEEP 0x0001 /* Matches ENQUEUE_WAKEUP */ -+#define DEQUEUE_SAVE 0x0002 /* Matches ENQUEUE_RESTORE */ -+#define DEQUEUE_MOVE 0x0004 /* Matches ENQUEUE_MOVE */ -+#define DEQUEUE_NOCLOCK 0x0008 /* Matches ENQUEUE_NOCLOCK */ -+ -+#define DEQUEUE_MIGRATING 0x0010 /* Matches ENQUEUE_MIGRATING */ -+#define DEQUEUE_DELAYED 0x0020 /* Matches ENQUEUE_DELAYED */ -+#define DEQUEUE_CLASS 0x0040 /* Matches ENQUEUE_CLASS */ -+ -+#define DEQUEUE_SPECIAL 0x00010000 -+#define DEQUEUE_THROTTLE 0x00020000 -+ -+#define ENQUEUE_WAKEUP 0x0001 -+#define ENQUEUE_RESTORE 0x0002 -+#define ENQUEUE_MOVE 0x0004 -+#define ENQUEUE_NOCLOCK 0x0008 -+ -+#define ENQUEUE_MIGRATING 0x0010 -+#define ENQUEUE_DELAYED 0x0020 -+#define ENQUEUE_CLASS 0x0040 -+ -+#define ENQUEUE_HEAD 0x00010000 -+#define ENQUEUE_REPLENISH 0x00020000 -+#define ENQUEUE_MIGRATED 0x00040000 -+#define ENQUEUE_INITIAL 0x00080000 -+#define ENQUEUE_RQ_SELECTED 0x00100000 -+ -+struct rq; -+struct cpuidle_state; -+ -+struct balance_callback { -+ struct balance_callback *next; -+ void (*func)(struct rq *rq); -+}; -+ -+typedef void (*balance_func_t)(struct rq *rq, int cpu); -+ -+struct balance_arg { -+ int active; -+}; -+ -+/* -+ * This is the main, per-CPU runqueue data structure. -+ * This data should only be modified by the local cpu. -+ */ -+struct rq { -+ /* runqueue lock: */ -+ raw_spinlock_t lock; -+ -+ struct task_struct __rcu *curr; -+ struct task_struct *idle; -+ struct task_struct *stop; -+ struct mm_struct *prev_mm; -+ bool block; -+ -+ /* switch count */ -+ u64 nr_switches; -+ -+ u64 last_seen_need_resched_ns; -+ int ticks_without_resched; -+ -+#ifdef CONFIG_MEMBARRIER -+ int membarrier_state; -+#endif -+ -+ int cpu; /* cpu of this runqueue */ -+ bool online; -+ -+ unsigned int ttwu_pending; -+ unsigned char nohz_idle_balance; -+ unsigned char idle_balance; -+ -+#ifdef CONFIG_HAVE_SCHED_AVG_IRQ -+ struct sched_avg avg_irq; -+#endif -+ -+ balance_func_t balance_func; -+ struct balance_arg active_balance_arg ____cacheline_aligned; -+ struct cpu_stop_work active_balance_work; -+ -+ struct balance_callback *balance_callback; -+ -+#ifdef CONFIG_HOTPLUG_CPU -+ struct rcuwait hotplug_wait; -+#endif -+ unsigned int nr_pinned; -+ -+#ifdef CONFIG_IRQ_TIME_ACCOUNTING -+ u64 prev_irq_time; -+#endif /* CONFIG_IRQ_TIME_ACCOUNTING */ -+#ifdef CONFIG_PARAVIRT -+ u64 prev_steal_time; -+#endif /* CONFIG_PARAVIRT */ -+#ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING -+ u64 prev_steal_time_rq; -+#endif /* CONFIG_PARAVIRT_TIME_ACCOUNTING */ -+ -+ /* For genenal cpu load util */ -+ s32 load_history; -+ u64 load_block; -+ u64 load_stamp; -+ -+ /* calc_load related fields */ -+ unsigned long calc_load_update; -+ long calc_load_active; -+ -+ /* Ensure that all clocks are in the same cache line */ -+ u64 clock ____cacheline_aligned; -+ u64 clock_task; -+ -+#ifdef CONFIG_SCHED_HRTICK -+ call_single_data_t hrtick_csd; -+ struct hrtimer hrtick_timer; -+ ktime_t hrtick_time; -+ ktime_t hrtick_delay; -+ unsigned int hrtick_sched; -+#endif -+ -+#ifdef CONFIG_SCHEDSTATS -+ -+ /* latency stats */ -+ struct sched_info rq_sched_info; -+ unsigned long long rq_cpu_time; -+ /* could above be rq->cfs_rq.exec_clock + rq->rt_rq.rt_runtime ? */ -+ -+ /* sys_sched_yield() stats */ -+ unsigned int yld_count; -+ -+ /* schedule() stats */ -+ unsigned int sched_switch; -+ unsigned int sched_count; -+ unsigned int sched_goidle; -+ -+ /* try_to_wake_up() stats */ -+ unsigned int ttwu_count; -+ unsigned int ttwu_local; -+#endif /* CONFIG_SCHEDSTATS */ -+ -+#ifdef CONFIG_CPU_IDLE -+ /* Must be inspected within a rcu lock section */ -+ struct cpuidle_state *idle_state; -+#endif -+ -+#ifdef CONFIG_NO_HZ_COMMON -+ call_single_data_t nohz_csd; -+ atomic_t nohz_flags; -+#endif /* CONFIG_NO_HZ_COMMON */ -+ -+ /* Scratch cpumask to be temporarily used under rq_lock */ -+ cpumask_var_t scratch_mask; -+}; -+ -+extern unsigned int sysctl_sched_base_slice; -+ -+extern unsigned long rq_load_util(struct rq *rq, unsigned long max); -+ -+extern unsigned long calc_load_update; -+extern atomic_long_t calc_load_tasks; -+ -+DECLARE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); -+#define cpu_rq(cpu) (&per_cpu(runqueues, (cpu))) -+#define this_rq() this_cpu_ptr(&runqueues) -+#define task_rq(p) cpu_rq(task_cpu(p)) -+#define cpu_curr(cpu) (cpu_rq(cpu)->curr) -+#define raw_rq() raw_cpu_ptr(&runqueues) -+ -+#ifdef CONFIG_SYSCTL -+void register_sched_domain_sysctl(void); -+void unregister_sched_domain_sysctl(void); -+#else -+static inline void register_sched_domain_sysctl(void) -+{ -+} -+static inline void unregister_sched_domain_sysctl(void) -+{ -+} -+#endif -+ -+extern bool sched_smp_initialized; -+ -+enum { -+#ifdef CONFIG_SCHED_SMT -+ SMT_LEVEL_SPACE_HOLDER, -+#endif -+ CLUSTER_LEVEL_SPACE_HOLDER, -+ COREGROUP_LEVEL_SPACE_HOLDER, -+ CORE_LEVEL_SPACE_HOLDER, -+ OTHER_LEVEL_SPACE_HOLDER, -+ NR_CPU_AFFINITY_LEVELS -+}; -+ -+DECLARE_PER_CPU_ALIGNED(cpumask_t [NR_CPU_AFFINITY_LEVELS], cpu_affinity_masks); -+ -+extern void resched_latency_warn(int cpu, u64 latency); -+ -+#ifndef arch_scale_freq_tick -+static __always_inline -+void arch_scale_freq_tick(void) -+{ -+} -+#endif -+ -+#ifndef arch_scale_freq_capacity -+static __always_inline -+unsigned long arch_scale_freq_capacity(int cpu) -+{ -+ return SCHED_CAPACITY_SCALE; -+} -+#endif -+ -+static inline u64 __rq_clock_broken(struct rq *rq) -+{ -+ return READ_ONCE(rq->clock); -+} -+ -+static inline u64 rq_clock(struct rq *rq) -+{ -+ /* -+ * Relax lockdep_assert_held() checking as in VRQ, call to -+ * sched_info_xxxx() may not held rq->lock -+ * lockdep_assert_held(&rq->lock); -+ */ -+ return rq->clock; -+} -+ -+static inline u64 rq_clock_task(struct rq *rq) -+{ -+ /* -+ * Relax lockdep_assert_held() checking as in VRQ, call to -+ * sched_info_xxxx() may not held rq->lock -+ * lockdep_assert_held(&rq->lock); -+ */ -+ return rq->clock_task; -+} -+ -+/* -+ * Below are scheduler API which using in other kernel code -+ * It use the dummy rq_flags -+ * ToDo : BMQ need to support these APIs for compatibility with mainline -+ * scheduler code. -+ */ -+struct rq_flags { -+ unsigned long flags; -+ raw_spinlock_t *lock; -+ bool queued; -+}; -+ -+static inline void -+rq_lock_irq(struct rq *rq, struct rq_flags *rf) -+ __acquires(rq->lock) -+{ -+ raw_spin_lock_irq(&rq->lock); -+} -+ -+static inline void -+rq_unlock_irq(struct rq *rq, struct rq_flags *rf) -+ __releases(rq->lock) -+{ -+ raw_spin_unlock_irq(&rq->lock); -+} -+ -+DEFINE_LOCK_GUARD_1(rq_lock_irq, struct rq, -+ rq_lock_irq(_T->lock, &_T->rf), -+ rq_unlock_irq(_T->lock, &_T->rf), -+ struct rq_flags rf) -+ -+static inline struct rq * -+this_rq_lock_irq(struct rq_flags *rf) -+ __acquires(rq->lock) -+{ -+ struct rq *rq; -+ -+ local_irq_disable(); -+ rq = this_rq(); -+ raw_spin_lock(&rq->lock); -+ -+ return rq; -+} -+ -+static inline raw_spinlock_t *__rq_lockp(struct rq *rq) -+{ -+ return &rq->lock; -+} -+ -+static inline raw_spinlock_t *rq_lockp(struct rq *rq) -+{ -+ return __rq_lockp(rq); -+} -+ -+static inline void lockdep_assert_rq_held(struct rq *rq) -+{ -+ lockdep_assert_held(__rq_lockp(rq)); -+} -+ -+static inline int task_current(struct rq *rq, struct task_struct *p) -+{ -+ return rq->curr == p; -+} -+ -+static inline bool task_on_cpu(struct task_struct *p) -+{ -+ return p->on_cpu; -+} -+ -+extern struct static_key_false sched_schedstats; -+ -+#ifdef CONFIG_CPU_IDLE -+static inline void idle_set_state(struct rq *rq, -+ struct cpuidle_state *idle_state) -+{ -+ rq->idle_state = idle_state; -+} -+#else -+static inline void idle_set_state(struct rq *rq, -+ struct cpuidle_state *idle_state) -+{ -+} -+#endif -+ -+static inline int cpu_of(const struct rq *rq) -+{ -+ return rq->cpu; -+} -+ -+extern void resched_cpu(int cpu); -+ -+#define SCHED_QUEUE_BITS (SCHED_LEVELS - 1) -+#define IDLE_TASK_PRIO (MIN_NORMAL_PRIO + NORMAL_PRIO_NUM) -+ -+struct sched_run_queue { -+ raw_spinlock_t _lock[SCHED_QUEUE_BITS]; -+ struct llist_head _head[SCHED_QUEUE_BITS]; -+ DECLARE_BITMAP(bitmap, SCHED_QUEUE_BITS); -+ atomic_t nr_queued; -+ atomic_t nr_uninterruptible; -+ atomic_t nr_iowait; -+}; -+ -+extern struct sched_run_queue grq; -+ -+/* -+ * schedule run queue functions -+ */ -+static inline struct sched_run_queue *cpu_srq(const int cpu) -+{ -+ return &grq; -+} -+ -+static inline struct sched_run_queue *rq_srq(struct rq *rq) -+{ -+ return cpu_srq(cpu_of(rq)); -+} -+ -+static inline int srq_nr_queued(const int cpu) -+{ -+ return raw_atomic_read(&cpu_srq(cpu)->nr_queued); -+} -+ -+static inline unsigned int nr_uninterruptible(void) -+{ -+ return raw_atomic_read(&cpu_srq(0)->nr_uninterruptible); -+} -+ -+static inline bool idle_rq(struct rq *rq) -+{ -+ return rq->curr == rq->idle && !srq_nr_queued(cpu_of(rq)) && !rq->ttwu_pending; -+} -+ -+/** -+ * available_idle_cpu - is a given CPU idle for enqueuing work. -+ * @cpu: the CPU in question. -+ * -+ * Return: 1 if the CPU is currently idle. 0 otherwise. -+ */ -+static inline bool available_idle_cpu(int cpu) -+{ -+ if (!idle_rq(cpu_rq(cpu))) -+ return 0; -+ -+ if (vcpu_is_preempted(cpu)) -+ return 0; -+ -+ return 1; -+} -+ -+#include "stats.h" -+ -+#ifdef CONFIG_NO_HZ_COMMON -+#define NOHZ_BALANCE_KICK_BIT 0 -+#define NOHZ_STATS_KICK_BIT 1 -+ -+#define NOHZ_BALANCE_KICK BIT(NOHZ_BALANCE_KICK_BIT) -+#define NOHZ_STATS_KICK BIT(NOHZ_STATS_KICK_BIT) -+ -+#define NOHZ_KICK_MASK (NOHZ_BALANCE_KICK | NOHZ_STATS_KICK) -+ -+#define nohz_flags(cpu) (&cpu_rq(cpu)->nohz_flags) -+ -+/* TODO: needed? -+extern void nohz_balance_exit_idle(struct rq *rq); -+#else -+static inline void nohz_balance_exit_idle(struct rq *rq) { } -+*/ -+#endif -+ -+#ifdef CONFIG_IRQ_TIME_ACCOUNTING -+struct irqtime { -+ u64 total; -+ u64 tick_delta; -+ u64 irq_start_time; -+ struct u64_stats_sync sync; -+}; -+ -+DECLARE_PER_CPU(struct irqtime, cpu_irqtime); -+DECLARE_STATIC_KEY_FALSE(sched_clock_irqtime); -+ -+static inline int irqtime_enabled(void) -+{ -+ return static_branch_likely(&sched_clock_irqtime); -+} -+ -+/* -+ * Returns the irqtime minus the softirq time computed by ksoftirqd. -+ * Otherwise ksoftirqd's sum_exec_runtime is substracted its own runtime -+ * and never move forward. -+ */ -+static inline u64 irq_time_read(int cpu) -+{ -+ struct irqtime *irqtime = &per_cpu(cpu_irqtime, cpu); -+ unsigned int seq; -+ u64 total; -+ -+ do { -+ seq = __u64_stats_fetch_begin(&irqtime->sync); -+ total = irqtime->total; -+ } while (__u64_stats_fetch_retry(&irqtime->sync, seq)); -+ -+ return total; -+} -+#else -+ -+static inline int irqtime_enabled(void) -+{ -+ return 0; -+} -+ -+#endif /* CONFIG_IRQ_TIME_ACCOUNTING */ -+ -+#ifdef CONFIG_CPU_FREQ -+DECLARE_PER_CPU(struct update_util_data __rcu *, cpufreq_update_util_data); -+#endif /* CONFIG_CPU_FREQ */ -+ -+#ifdef CONFIG_NO_HZ_FULL -+extern int __init sched_tick_offload_init(void); -+#else -+static inline int sched_tick_offload_init(void) { return 0; } -+#endif -+ -+#ifdef arch_scale_freq_capacity -+#ifndef arch_scale_freq_invariant -+#define arch_scale_freq_invariant() (true) -+#endif -+#else /* arch_scale_freq_capacity */ -+#define arch_scale_freq_invariant() (false) -+#endif -+ -+unsigned long sugov_effective_cpu_perf(int cpu, unsigned long actual, -+ unsigned long min, -+ unsigned long max); -+ -+extern void schedule_idle(void); -+ -+#define cap_scale(v, s) ((v)*(s) >> SCHED_CAPACITY_SHIFT) -+ -+/* -+ * !! For sched_setattr_nocheck() (kernel) only !! -+ * -+ * This is actually gross. :( -+ * -+ * It is used to make schedutil kworker(s) higher priority than SCHED_DEADLINE -+ * tasks, but still be able to sleep. We need this on platforms that cannot -+ * atomically change clock frequency. Remove once fast switching will be -+ * available on such platforms. -+ * -+ * SUGOV stands for SchedUtil GOVernor. -+ */ -+#define SCHED_FLAG_SUGOV 0x10000000 -+ -+#ifdef CONFIG_MEMBARRIER -+/* -+ * The scheduler provides memory barriers required by membarrier between: -+ * - prior user-space memory accesses and store to rq->membarrier_state, -+ * - store to rq->membarrier_state and following user-space memory accesses. -+ * In the same way it provides those guarantees around store to rq->curr. -+ */ -+static inline void membarrier_switch_mm(struct rq *rq, -+ struct mm_struct *prev_mm, -+ struct mm_struct *next_mm) -+{ -+ int membarrier_state; -+ -+ if (prev_mm == next_mm) -+ return; -+ -+ membarrier_state = atomic_read(&next_mm->membarrier_state); -+ if (READ_ONCE(rq->membarrier_state) == membarrier_state) -+ return; -+ -+ WRITE_ONCE(rq->membarrier_state, membarrier_state); -+} -+#else -+static inline void membarrier_switch_mm(struct rq *rq, -+ struct mm_struct *prev_mm, -+ struct mm_struct *next_mm) -+{ -+} -+#endif -+ -+#ifdef CONFIG_NUMA -+extern int sched_numa_find_closest(const struct cpumask *cpus, int cpu); -+#else -+static inline int sched_numa_find_closest(const struct cpumask *cpus, int cpu) -+{ -+ return nr_cpu_ids; -+} -+#endif -+ -+extern void swake_up_all_locked(struct swait_queue_head *q); -+extern void __prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait); -+ -+extern int try_to_wake_up(struct task_struct *tsk, unsigned int state, int wake_flags); -+ -+#ifdef CONFIG_PREEMPT_DYNAMIC -+extern int preempt_dynamic_mode; -+extern int sched_dynamic_mode(const char *str); -+extern void sched_dynamic_update(int mode); -+#endif -+extern const char *preempt_modes[]; -+ -+static inline void nohz_run_idle_balance(int cpu) { } -+ -+static inline unsigned long -+uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id) -+{ -+ if (clamp_id == UCLAMP_MIN) -+ return 0; -+ -+ return SCHED_CAPACITY_SCALE; -+} -+ -+static inline bool uclamp_rq_is_capped(struct rq *rq) { return false; } -+ -+static inline bool uclamp_is_used(void) -+{ -+ return false; -+} -+ -+static inline unsigned long -+uclamp_rq_get(struct rq *rq, enum uclamp_id clamp_id) -+{ -+ if (clamp_id == UCLAMP_MIN) -+ return 0; -+ -+ return SCHED_CAPACITY_SCALE; -+} -+ -+static inline void -+uclamp_rq_set(struct rq *rq, enum uclamp_id clamp_id, unsigned int value) -+{ -+} -+ -+static inline bool uclamp_rq_is_idle(struct rq *rq) -+{ -+ return false; -+} -+ -+#ifdef CONFIG_SCHED_MM_CID -+ -+static __always_inline bool cid_on_cpu(unsigned int cid) -+{ -+ return cid & MM_CID_ONCPU; -+} -+ -+static __always_inline bool cid_in_transit(unsigned int cid) -+{ -+ return cid & MM_CID_TRANSIT; -+} -+ -+static __always_inline unsigned int cpu_cid_to_cid(unsigned int cid) -+{ -+ return cid & ~MM_CID_ONCPU; -+} -+ -+static __always_inline unsigned int cid_to_cpu_cid(unsigned int cid) -+{ -+ return cid | MM_CID_ONCPU; -+} -+ -+static __always_inline unsigned int cid_to_transit_cid(unsigned int cid) -+{ -+ return cid | MM_CID_TRANSIT; -+} -+ -+static __always_inline unsigned int cid_from_transit_cid(unsigned int cid) -+{ -+ return cid & ~MM_CID_TRANSIT; -+} -+ -+static __always_inline bool cid_on_task(unsigned int cid) -+{ -+ /* True if none of the MM_CID_ONCPU, MM_CID_TRANSIT, MM_CID_UNSET bits is set */ -+ return cid < MM_CID_TRANSIT; -+} -+ -+static __always_inline void mm_drop_cid(struct mm_struct *mm, unsigned int cid) -+{ -+ clear_bit(cid, mm_cidmask(mm)); -+} -+ -+static __always_inline void mm_unset_cid_on_task(struct task_struct *t) -+{ -+ unsigned int cid = t->mm_cid.cid; -+ -+ t->mm_cid.cid = MM_CID_UNSET; -+ if (cid_on_task(cid)) -+ mm_drop_cid(t->mm, cid); -+} -+ -+static __always_inline void mm_drop_cid_on_cpu(struct mm_struct *mm, struct mm_cid_pcpu *pcp) -+{ -+ /* Clear the ONCPU bit, but do not set UNSET in the per CPU storage */ -+ if (cid_on_cpu(pcp->cid)) { -+ pcp->cid = cpu_cid_to_cid(pcp->cid); -+ mm_drop_cid(mm, pcp->cid); -+ } -+} -+ -+static inline unsigned int __mm_get_cid(struct mm_struct *mm, unsigned int max_cids) -+{ -+ unsigned int cid = find_first_zero_bit(mm_cidmask(mm), max_cids); -+ -+ if (cid >= max_cids) -+ return MM_CID_UNSET; -+ if (test_and_set_bit(cid, mm_cidmask(mm))) -+ return MM_CID_UNSET; -+ return cid; -+} -+ -+static inline unsigned int mm_get_cid(struct mm_struct *mm) -+{ -+ unsigned int cid = __mm_get_cid(mm, READ_ONCE(mm->mm_cid.max_cids)); -+ -+ while (cid == MM_CID_UNSET) { -+ cpu_relax(); -+ cid = __mm_get_cid(mm, num_possible_cpus()); -+ } -+ return cid; -+} -+ -+static inline unsigned int mm_cid_converge(struct mm_struct *mm, unsigned int orig_cid, -+ unsigned int max_cids) -+{ -+ unsigned int new_cid, cid = cpu_cid_to_cid(orig_cid); -+ -+ /* Is it in the optimal CID space? */ -+ if (likely(cid < max_cids)) -+ return orig_cid; -+ -+ /* Try to find one in the optimal space. Otherwise keep the provided. */ -+ new_cid = __mm_get_cid(mm, max_cids); -+ if (new_cid != MM_CID_UNSET) { -+ mm_drop_cid(mm, cid); -+ /* Preserve the ONCPU mode of the original CID */ -+ return new_cid | (orig_cid & MM_CID_ONCPU); -+ } -+ return orig_cid; -+} -+ -+static __always_inline void mm_cid_update_task_cid(struct task_struct *t, unsigned int cid) -+{ -+ if (t->mm_cid.cid != cid) { -+ t->mm_cid.cid = cid; -+ rseq_sched_set_ids_changed(t); -+ } -+} -+ -+static __always_inline void mm_cid_update_pcpu_cid(struct mm_struct *mm, unsigned int cid) -+{ -+ __this_cpu_write(mm->mm_cid.pcpu->cid, cid); -+} -+ -+static __always_inline void mm_cid_from_cpu(struct task_struct *t, unsigned int cpu_cid, -+ unsigned int mode) -+{ -+ unsigned int max_cids, tcid = t->mm_cid.cid; -+ struct mm_struct *mm = t->mm; -+ -+ max_cids = READ_ONCE(mm->mm_cid.max_cids); -+ /* Optimize for the common case where both have the ONCPU bit set */ -+ if (likely(cid_on_cpu(cpu_cid & tcid))) { -+ if (likely(cpu_cid_to_cid(cpu_cid) < max_cids)) { -+ mm_cid_update_task_cid(t, cpu_cid); -+ return; -+ } -+ /* Try to converge into the optimal CID space */ -+ cpu_cid = mm_cid_converge(mm, cpu_cid, max_cids); -+ } else { -+ /* Hand over or drop the task owned CID */ -+ if (cid_on_task(tcid)) { -+ if (cid_on_cpu(cpu_cid)) -+ mm_unset_cid_on_task(t); -+ else -+ cpu_cid = cid_to_cpu_cid(tcid); -+ } -+ /* Still nothing, allocate a new one */ -+ if (!cid_on_cpu(cpu_cid)) -+ cpu_cid = cid_to_cpu_cid(mm_get_cid(mm)); -+ -+ /* Handle the transition mode flag if required */ -+ if (mode & MM_CID_TRANSIT) -+ cpu_cid = cpu_cid_to_cid(cpu_cid) | MM_CID_TRANSIT; -+ } -+ mm_cid_update_pcpu_cid(mm, cpu_cid); -+ mm_cid_update_task_cid(t, cpu_cid); -+} -+ -+static __always_inline void mm_cid_from_task(struct task_struct *t, unsigned int cpu_cid, -+ unsigned int mode) -+{ -+ unsigned int max_cids, tcid = t->mm_cid.cid; -+ struct mm_struct *mm = t->mm; -+ -+ max_cids = READ_ONCE(mm->mm_cid.max_cids); -+ /* Optimize for the common case, where both have the ONCPU bit clear */ -+ if (likely(cid_on_task(tcid | cpu_cid))) { -+ if (likely(tcid < max_cids)) { -+ mm_cid_update_pcpu_cid(mm, tcid); -+ return; -+ } -+ /* Try to converge into the optimal CID space */ -+ tcid = mm_cid_converge(mm, tcid, max_cids); -+ } else { -+ /* Hand over or drop the CPU owned CID */ -+ if (cid_on_cpu(cpu_cid)) { -+ if (cid_on_task(tcid)) -+ mm_drop_cid_on_cpu(mm, this_cpu_ptr(mm->mm_cid.pcpu)); -+ else -+ tcid = cpu_cid_to_cid(cpu_cid); -+ } -+ /* Still nothing, allocate a new one */ -+ if (!cid_on_task(tcid)) -+ tcid = mm_get_cid(mm); -+ /* Set the transition mode flag if required */ -+ tcid |= mode & MM_CID_TRANSIT; -+ } -+ mm_cid_update_pcpu_cid(mm, tcid); -+ mm_cid_update_task_cid(t, tcid); -+} -+ -+static __always_inline void mm_cid_schedin(struct task_struct *next) -+{ -+ struct mm_struct *mm = next->mm; -+ unsigned int cpu_cid, mode; -+ -+ if (!next->mm_cid.active) -+ return; -+ -+ cpu_cid = __this_cpu_read(mm->mm_cid.pcpu->cid); -+ mode = READ_ONCE(mm->mm_cid.mode); -+ if (likely(!cid_on_cpu(mode))) -+ mm_cid_from_task(next, cpu_cid, mode); -+ else -+ mm_cid_from_cpu(next, cpu_cid, mode); -+} -+ -+static __always_inline void mm_cid_schedout(struct task_struct *prev) -+{ -+ /* During mode transitions CIDs are temporary and need to be dropped */ -+ if (likely(!cid_in_transit(prev->mm_cid.cid))) -+ return; -+ -+ mm_drop_cid(prev->mm, cid_from_transit_cid(prev->mm_cid.cid)); -+ prev->mm_cid.cid = MM_CID_UNSET; -+} -+ -+static inline void mm_cid_switch_to(struct task_struct *prev, struct task_struct *next) -+{ -+ mm_cid_schedout(prev); -+ mm_cid_schedin(next); -+} -+ -+#else /* !CONFIG_SCHED_MM_CID: */ -+static inline void mm_cid_switch_to(struct task_struct *prev, struct task_struct *next) { } -+#endif /* !CONFIG_SCHED_MM_CID */ -+ -+extern struct balance_callback balance_push_callback; -+ -+static inline void -+queue_balance_callback(struct rq *rq, -+ struct balance_callback *head, -+ void (*func)(struct rq *rq)) -+{ -+ lockdep_assert_rq_held(rq); -+ -+ /* -+ * Don't (re)queue an already queued item; nor queue anything when -+ * balance_push() is active, see the comment with -+ * balance_push_callback. -+ */ -+ if (unlikely(head->next || rq->balance_callback == &balance_push_callback)) -+ return; -+ -+ head->func = func; -+ head->next = rq->balance_callback; -+ rq->balance_callback = head; -+} -+ -+/* -+ * The 'sched_change' pattern is the safe, easy and slow way of changing a -+ * task's scheduling properties. It dequeues a task, such that the scheduler -+ * is fully unaware of it; at which point its properties can be modified; -+ * after which it is enqueued again. -+ * -+ * Typically this must be called while holding task_rq_lock, since most/all -+ * properties are serialized under those locks. There is currently one -+ * exception to this rule in sched/ext which only holds rq->lock. -+ */ -+ -+/* -+ * This structure is a temporary, used to preserve/convey the queueing state -+ * of the task between sched_change_begin() and sched_change_end(). Ensuring -+ * the task's queueing state is idempotent across the operation. -+ */ -+struct sched_change_ctx { -+ u64 prio; -+ struct task_struct *p; -+ int flags; -+ bool queued; -+ bool running; -+}; -+ -+struct sched_change_ctx *sched_change_begin(struct task_struct *p, unsigned int flags); -+void sched_change_end(struct sched_change_ctx *ctx); -+ -+DEFINE_CLASS(sched_change, struct sched_change_ctx *, -+ sched_change_end(_T), -+ sched_change_begin(p, flags), -+ struct task_struct *p, unsigned int flags) -+ -+DEFINE_CLASS_IS_UNCONDITIONAL(sched_change) -+ -+#ifdef CONFIG_SCHED_BMQ -+#include "bmq.h" -+#endif -+#ifdef CONFIG_SCHED_PDS -+#include "pds.h" -+#endif -+ -+#endif /* _KERNEL_SCHED_ALT_SCHED_H */ -diff --git a/kernel/sched/alt_topology.c b/kernel/sched/alt_topology.c -new file mode 100644 -index 000000000..1b542b705 ---- /dev/null -+++ b/kernel/sched/alt_topology.c -@@ -0,0 +1,389 @@ -+#ifdef ALT_SCHED_DEBUG -+#define SCHED_DEBUG_INFO(...) printk(KERN_INFO __VA_ARGS__) -+#else -+#define SCHED_DEBUG_INFO(...) do { } while(0) -+#endif -+ -+static cpumask_t cpu_topo_masks[6] ____cacheline_aligned_in_smp; -+ -+#define sched_ucore_mask (cpu_topo_masks) -+#define sched_pcore_mask (cpu_topo_masks + 1) -+#define sched_ecore_mask (cpu_topo_masks + 2) -+ -+/* -+ * pcore_cpus kernel parameter -+ */ -+static int __init pcore_cpus_setup(char *str) -+{ -+ if (cpulist_parse(str, sched_pcore_mask)) -+ pr_warn("sched/alt: pcore_cpus= incorrect CPU range\n"); -+ -+ return 1; -+} -+__setup("pcore_cpus=", pcore_cpus_setup); -+ -+/* -+ * ultra_core_cpus kernel parameter -+ */ -+static int __init ucore_cpus_setup(char *str) -+{ -+ if (cpulist_parse(str, sched_ucore_mask)) -+ pr_warn("sched/alt: ucore_cpus= incorrect CPU range\n"); -+ -+ return 1; -+} -+__setup("ucore_cpus=", ucore_cpus_setup); -+ -+/* -+ * CPU topology type -+ */ -+enum cpu_topo_type { -+ CPU_TOPOLOGY_DEFAULT = 0, -+ CPU_TOPOLOGY_UCORE, -+ CPU_TOPOLOGY_PCORE, -+ CPU_TOPOLOGY_ECORE, -+ CPU_TOPOLOGY_NONE, -+#ifdef CONFIG_SCHED_SMT -+ CPU_TOPOLOGY_UCORE_SMT, -+ CPU_TOPOLOGY_PCORE_SMT, -+ CPU_TOPOLOGY_SMT = CPU_TOPOLOGY_PCORE_SMT, -+ CPU_TOPOLOGY_ECORE_SMT, -+#endif -+}; -+ -+#define CPU_TOPOLOGY_MASK (0x03) -+ -+static DEFINE_PER_CPU_READ_MOSTLY(enum cpu_topo_type, sched_cpu_topo); -+ -+static __always_inline void sched_set_idle_mask(const unsigned int cpu) -+{ -+ int topo = per_cpu(sched_cpu_topo, cpu); -+ -+ switch (topo) { -+ case CPU_TOPOLOGY_DEFAULT: -+ case CPU_TOPOLOGY_NONE: -+ break; -+ case CPU_TOPOLOGY_UCORE: -+ case CPU_TOPOLOGY_PCORE: -+ case CPU_TOPOLOGY_ECORE: -+ topo--; -+ cpumask_set_cpu(cpu, cpu_sched_prio_mask + topo); -+ set_bit(topo, cpu_sched_prio_bitmap); -+ break; -+#ifdef CONFIG_SCHED_SMT -+ case CPU_TOPOLOGY_UCORE_SMT: -+ case CPU_TOPOLOGY_PCORE_SMT: -+ case CPU_TOPOLOGY_ECORE_SMT: -+ topo -= CPU_TOPOLOGY_UCORE_SMT; -+ if (cpumask_intersects(cpu_smt_mask(cpu), sched_idle_mask)) { -+ cpumask_or(cpu_sched_prio_mask + topo, cpu_sched_prio_mask + topo, -+ cpu_smt_mask(cpu)); -+ set_bit(topo, cpu_sched_prio_bitmap); -+ -+ topo += 3; -+ if (!cpumask_andnot(cpu_sched_prio_mask + topo, cpu_sched_prio_mask + topo, -+ cpu_smt_mask(cpu))) -+ clear_bit(topo, cpu_sched_prio_bitmap); -+ } else { -+ topo += 3; -+ cpumask_set_cpu(cpu, cpu_sched_prio_mask + topo); -+ set_bit(topo, cpu_sched_prio_bitmap); -+ } -+ break; -+#endif -+ } -+ -+ cpumask_set_cpu(cpu, sched_idle_mask); -+ set_bit(SCHED_LEVELS - 1 - IDLE_TASK_SCHED_PRIO, cpu_sched_prio_bitmap); -+} -+ -+static __always_inline void sched_clear_idle_mask(const unsigned int cpu) -+{ -+ int topo = per_cpu(sched_cpu_topo, cpu); -+ -+ switch (topo) { -+ case CPU_TOPOLOGY_DEFAULT: -+ case CPU_TOPOLOGY_NONE: -+ break; -+ case CPU_TOPOLOGY_UCORE: -+ case CPU_TOPOLOGY_PCORE: -+ case CPU_TOPOLOGY_ECORE: -+ topo--; -+ cpumask_clear_cpu(cpu, cpu_sched_prio_mask + topo); -+ if (cpumask_empty(cpu_sched_prio_mask + topo)) -+ clear_bit(topo, cpu_sched_prio_bitmap); -+ break; -+#ifdef CONFIG_SCHED_SMT -+ case CPU_TOPOLOGY_UCORE_SMT: -+ case CPU_TOPOLOGY_PCORE_SMT: -+ case CPU_TOPOLOGY_ECORE_SMT: -+ topo -= CPU_TOPOLOGY_UCORE_SMT; -+ if (cpumask_test_cpu(cpu, cpu_sched_prio_mask + topo)) { -+ if (!cpumask_andnot(cpu_sched_prio_mask + topo, cpu_sched_prio_mask + topo, -+ cpu_smt_mask(cpu))) -+ clear_bit(topo, cpu_sched_prio_bitmap); -+ -+ topo += 3; -+ cpumask_or(cpu_sched_prio_mask + topo, cpu_sched_prio_mask + topo, -+ per_cpu(cpu_affinity_masks, cpu)); -+ set_bit(topo, cpu_sched_prio_bitmap); -+ } else { -+ topo += 3; -+ cpumask_clear_cpu(cpu, cpu_sched_prio_mask + topo); -+ if (cpumask_empty(cpu_sched_prio_mask + topo)) -+ clear_bit(topo, cpu_sched_prio_bitmap); -+ } -+ break; -+#endif -+ } -+ -+ cpumask_clear_cpu(cpu, sched_idle_mask); -+ if (cpumask_empty(sched_idle_mask)) -+ clear_bit(SCHED_LEVELS - 1 - IDLE_TASK_SCHED_PRIO, cpu_sched_prio_bitmap); -+} -+ -+ -+/* -+ * CPU topology balance type -+ */ -+static DEFINE_PER_CPU(struct balance_callback, active_balance_head); -+ -+/* common balance functions */ -+static int active_balance_cpu_stop(void *data) -+{ -+ struct balance_arg *arg = data; -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ arg->active = 0; -+ local_irq_restore(flags); -+ -+ return 0; -+} -+ -+/* trigger_active_balance - for @cpu */ -+static __always_inline int -+trigger_active_balance(const int cpu, struct rq *src_rq, cpumask_t *target_mask) -+{ -+ struct rq *rq = cpu_rq(cpu); -+ struct balance_arg *arg; -+ unsigned long flags; -+ struct task_struct *p; -+ int res; -+ -+ if (!raw_spin_trylock_irqsave(&rq->lock, flags)) -+ return 0; -+ -+ arg = &rq->active_balance_arg; -+ p = rq->curr; -+ res = (p != rq->idle) && (0 == srq_nr_queued(cpu)) && is_preempt_list_empty(cpu) && \ -+ !is_migration_disabled(p) && cpumask_intersects(p->cpus_ptr, target_mask) && \ -+ !arg->active; -+ if (res) -+ arg->active = 1; -+ -+ raw_spin_unlock_irqrestore(&rq->lock, flags); -+ -+ if (res) { -+ preempt_disable(); -+ raw_spin_unlock(&src_rq->lock); -+ -+ stop_one_cpu_nowait(cpu, active_balance_cpu_stop, arg, &rq->active_balance_work); -+ -+ preempt_enable(); -+ raw_spin_lock(&src_rq->lock); -+ } -+ -+ return res; -+} -+ -+static __always_inline void cpu_topo_balance(struct rq *rq) -+{ -+ int i, cpu = cpu_of(rq); -+ int idx = (per_cpu(sched_cpu_topo, cpu) & CPU_TOPOLOGY_MASK) - 1; -+ cpumask_t *target_mask = cpu_sched_prio_mask + idx; -+ -+#ifdef CONFIG_SCHED_SMT -+ for (int level = 3; level < 6; level++) { -+ if (cpumask_empty(cpu_topo_masks + level)) -+ continue; -+ -+ for_each_cpu_andnot(i, cpu_topo_masks + level, sched_idle_mask) { -+ if (!cpumask_intersects(cpu_smt_mask(i), sched_idle_mask) && -+ trigger_active_balance(i, rq, target_mask)) -+ return; -+ } -+ } -+#endif /* CONFIG_SCHED_SMT */ -+ -+ if (2 != idx) { -+ for_each_cpu_andnot(i, sched_ecore_mask, sched_idle_mask) { -+ if (trigger_active_balance(i, rq, target_mask)) -+ return; -+ } -+ } -+} -+ -+static inline void sched_cpu_topology_balance(const unsigned int cpu, struct rq *rq) -+{ -+ const int topo = per_cpu(sched_cpu_topo, cpu); -+ switch (topo) { -+ case CPU_TOPOLOGY_DEFAULT: -+ break; -+ case CPU_TOPOLOGY_UCORE: -+ case CPU_TOPOLOGY_PCORE: -+#ifdef CONFIG_SCHED_SMT -+ case CPU_TOPOLOGY_ECORE: -+#endif -+ queue_balance_callback(rq, &per_cpu(active_balance_head, cpu), cpu_topo_balance); -+ break; -+ case CPU_TOPOLOGY_UCORE_SMT: -+ case CPU_TOPOLOGY_PCORE_SMT: /* as same as CPU_TOPOLOGY_SMT */ -+ case CPU_TOPOLOGY_ECORE_SMT: -+ int idx = (topo & CPU_TOPOLOGY_MASK) - 1; -+ -+ if (bitmap_empty(cpu_sched_prio_bitmap, idx) && -+ cpumask_test_cpu(cpu, cpu_sched_prio_mask + idx)) -+ queue_balance_callback(rq, &per_cpu(active_balance_head, cpu), -+ cpu_topo_balance); -+ break; -+ } -+} -+ -+/* -+ * Keep a unique ID per domain (we use the first CPUs number in the cpumask of -+ * the domain), this allows us to quickly tell if two cpus are in the same cache -+ * domain, see cpus_share_cache(). -+ */ -+static DEFINE_PER_CPU_READ_MOSTLY(int, sd_llc_id); -+ -+bool cpus_share_cache(int this_cpu, int that_cpu) -+{ -+ if (this_cpu == that_cpu) -+ return true; -+ -+ return per_cpu(sd_llc_id, this_cpu) == per_cpu(sd_llc_id, that_cpu); -+} -+ -+ -+/* -+ * CPU topology mask -+ */ -+DEFINE_PER_CPU_ALIGNED(cpumask_t [NR_CPU_AFFINITY_LEVELS], cpu_affinity_masks); -+DEFINE_PER_CPU_ALIGNED(cpumask_t *, cpu_affinity_end_mask); -+ -+static inline void sched_init_topology_early(void) -+{ -+ int cpu; -+ -+ for_each_possible_cpu(cpu) { -+ /* init topo masks */ -+ cpumask_t *tmp = per_cpu(cpu_affinity_masks, cpu); -+ -+ cpumask_copy(tmp, cpu_possible_mask); -+ per_cpu(cpu_affinity_end_mask, cpu) = ++tmp; -+ } -+} -+ -+/* init schedule cpu topology masks: ucore/pcore/ecore and smt mask */ -+static inline void sched_init_cpu_topology(void) -+{ -+ bool cpu_topo_smt_present = false; -+ -+#ifdef CONFIG_SCHED_SMT -+ if (!cpumask_empty(&sched_smt_mask)) { -+ printk(KERN_INFO "sched: (smt) mask : 0x%08lx\n", sched_smt_mask.bits[0]); -+ if (cpumask_empty(sched_pcore_mask)) -+ cpumask_copy(sched_pcore_mask, &sched_smt_mask); -+ } -+#endif -+ -+ if (cpumask_empty(sched_pcore_mask) && cpumask_empty(sched_ucore_mask)) -+ return; -+ -+ cpumask_andnot(sched_pcore_mask, sched_pcore_mask, sched_ucore_mask); -+ -+ cpumask_andnot(sched_ecore_mask, cpu_online_mask, sched_pcore_mask); -+ cpumask_andnot(sched_ecore_mask, sched_ecore_mask, sched_ucore_mask); -+ -+ printk(KERN_INFO "sched: topo ucore: 0x%08lx, pcore: 0x%08lx, ecore: 0x%08lx\n", -+ sched_ucore_mask->bits[0], -+ sched_pcore_mask->bits[0], -+ sched_ecore_mask->bits[0]); -+ -+#ifdef CONFIG_SCHED_SMT -+ if (cpumask_empty(&sched_smt_mask)) -+ return; -+ -+ for (int i = 0; i < 3; i++) -+ if (cpumask_and(cpu_topo_masks + i + 3, -+ cpu_topo_masks + i, &sched_smt_mask)) -+ cpu_topo_smt_present = true; -+ -+ if (!cpu_topo_smt_present) -+ return; -+ -+ printk(KERN_INFO "sched: (smt) ucore: 0x%08lx, pcore: 0x%08lx, ecore: 0x%08lx\n", -+ (sched_ucore_mask + 3)->bits[0], -+ (sched_pcore_mask + 3)->bits[0], -+ (sched_ecore_mask + 3)->bits[0]); -+#endif -+} -+ -+#define TOPOLOGY_CPUMASK(name, mask, last) \ -+ if (cpumask_and(topo, topo, mask)) { \ -+ printk(KERN_INFO "sched: cpu#%02d affinity: 0x%08lx - "#name, \ -+ cpu, (topo++)->bits[0]); \ -+ } \ -+ if (!last) \ -+ bitmap_complement(cpumask_bits(topo), cpumask_bits(mask), \ -+ nr_cpumask_bits); -+ -+static inline void sched_init_topology(void) -+{ -+ int cpu; -+ -+ sched_init_cpu_topology(); -+ -+ /* CPU topology setup */ -+ for_each_online_cpu(cpu) { -+ cpumask_t *topo; -+ int cpu_topo = 0; -+#ifdef CONFIG_SCHED_SMT -+ if (cpumask_weight(cpu_smt_mask(cpu)) > 1) -+ cpu_topo += CPU_TOPOLOGY_NONE; -+#endif -+ if (cpumask_test_cpu(cpu, sched_ucore_mask)) -+ cpu_topo += CPU_TOPOLOGY_UCORE; -+ else if (cpumask_test_cpu(cpu, sched_pcore_mask)) -+ cpu_topo += CPU_TOPOLOGY_PCORE; -+ else if (cpumask_test_cpu(cpu, sched_ecore_mask)) -+ cpu_topo += CPU_TOPOLOGY_ECORE; -+ -+ if (cpu_topo) -+ per_cpu(sched_cpu_topo, cpu) = cpu_topo; -+ -+ topo = per_cpu(cpu_affinity_masks, cpu); -+ -+ bitmap_complement(cpumask_bits(topo), cpumask_bits(cpumask_of(cpu)), -+ nr_cpumask_bits); -+#ifdef CONFIG_SCHED_SMT -+ TOPOLOGY_CPUMASK(smt, topology_sibling_cpumask(cpu), false); -+#endif /* CONFIG_SCHED_SMT */ -+ TOPOLOGY_CPUMASK(cluster, topology_cluster_cpumask(cpu), false); -+ -+ per_cpu(sd_llc_id, cpu) = cpumask_first(cpu_coregroup_mask(cpu)); -+ TOPOLOGY_CPUMASK(coregroup, cpu_coregroup_mask(cpu), false); -+ -+ TOPOLOGY_CPUMASK(core, topology_core_cpumask(cpu), false); -+ -+ TOPOLOGY_CPUMASK(others, cpu_online_mask, true); -+ -+ per_cpu(cpu_affinity_end_mask, cpu) = topo; -+ -+ SCHED_DEBUG_INFO("sched: cpu#%02d topology: %d%5s, llc_id = %d", -+ cpu, cpu_topo & CPU_TOPOLOGY_MASK, -+ (cpu_topo > CPU_TOPOLOGY_MASK) ? "(smt)" : "", -+ per_cpu(sd_llc_id, cpu)); -+ } -+} -diff --git a/kernel/sched/bmq.h b/kernel/sched/bmq.h -new file mode 100644 -index 000000000..9b307fcc1 ---- /dev/null -+++ b/kernel/sched/bmq.h -@@ -0,0 +1,84 @@ -+#ifndef _KERNEL_SCHED_BMQ_H -+#define _KERNEL_SCHED_BMQ_H -+ -+#define ALT_SCHED_NAME "BMQ" -+ -+/* -+ * BMQ only routines -+ */ -+static inline void boost_task(struct task_struct *p, int n) -+{ -+ int limit; -+ -+ switch (p->policy) { -+ case SCHED_NORMAL: -+ limit = -MAX_PRIORITY_ADJ; -+ break; -+ case SCHED_BATCH: -+ limit = 0; -+ break; -+ default: -+ return; -+ } -+ -+ p->boost_prio = max(limit, p->boost_prio - n); -+} -+ -+static inline void deboost_task(struct task_struct *p) -+{ -+ if ((SCHED_NORMAL == p->policy || SCHED_BATCH == p->policy) && -+ p->boost_prio < MAX_PRIORITY_ADJ) -+ p->boost_prio++; -+} -+ -+/* -+ * Common interfaces -+ */ -+ -+/* This API is used in task_prio(), return value readed by human users */ -+static inline int -+task_sched_prio_normal(const struct task_struct *p, const struct rq *rq) -+{ -+ return p->prio + p->boost_prio - MIN_NORMAL_PRIO; -+} -+ -+static inline int task_sched_prio(const struct task_struct *p) -+{ -+ return (p->prio < MIN_NORMAL_PRIO)? (p->prio >> 2) : -+ MIN_SCHED_NORMAL_PRIO + (p->prio + p->boost_prio - MIN_NORMAL_PRIO) / 2; -+} -+ -+static inline int task_running_nice(struct task_struct *p) -+{ -+ return (p->prio + p->boost_prio > DEFAULT_PRIO); -+} -+ -+static inline void sched_update_rq_clock(struct rq *rq) {} -+ -+static inline void sched_task_renew(struct task_struct *p, const struct rq *rq) -+{ -+ deboost_task(p); -+} -+ -+static inline void sched_task_sanity_check(struct task_struct *p, struct rq *rq) {} -+static inline void sched_task_fork(struct task_struct *p, struct rq *rq) {} -+ -+static inline void do_sched_yield_type_1(struct task_struct *p, struct rq *rq) -+{ -+ p->boost_prio = MAX_PRIORITY_ADJ; -+} -+ -+static inline void sched_task_ttwu(struct task_struct *p) -+{ -+ s64 delta = this_rq()->clock_task > p->last_ran; -+ -+ if (likely(delta > 0)) -+ boost_task(p, delta >> 22); -+} -+ -+static inline void sched_task_deactivate(struct task_struct *p, struct rq *rq) -+{ -+ boost_task(p, 1); -+} -+ -+#endif /* _KERNEL_SCHED_BMQ_H */ -diff --git a/kernel/sched/build_policy.c b/kernel/sched/build_policy.c -index 755883faf..f50aae196 100644 ---- a/kernel/sched/build_policy.c -+++ b/kernel/sched/build_policy.c -@@ -49,13 +49,17 @@ - - #include "idle.c" - --#include "rt.c" --#include "cpudeadline.c" -+#ifndef CONFIG_SCHED_ALT -+# include "rt.c" -+# include "cpudeadline.c" -+#endif - - #include "pelt.c" - - #include "cputime.c" -+#ifndef CONFIG_SCHED_ALT - #include "deadline.c" -+#endif - - #ifdef CONFIG_SCHED_CLASS_EXT - # include "ext_internal.h" -diff --git a/kernel/sched/build_utility.c b/kernel/sched/build_utility.c -index e2cf3b08d..92cf7cd1f 100644 ---- a/kernel/sched/build_utility.c -+++ b/kernel/sched/build_utility.c -@@ -68,7 +68,7 @@ - # include "cpufreq_schedutil.c" - #endif - --#include "debug.c" -+# include "debug.c" - - #ifdef CONFIG_SCHEDSTATS - # include "stats.c" -@@ -81,7 +81,9 @@ - #include "wait.c" - - #include "cpupri.c" --#include "stop_task.c" -+#ifndef CONFIG_SCHED_ALT -+# include "stop_task.c" -+#endif - - #include "topology.c" - -diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c -index ae9fd211c..1a3ecefdb 100644 ---- a/kernel/sched/cpufreq_schedutil.c -+++ b/kernel/sched/cpufreq_schedutil.c -@@ -225,6 +225,7 @@ unsigned long sugov_effective_cpu_perf(int cpu, unsigned long actual, - - static void sugov_get_util(struct sugov_cpu *sg_cpu, unsigned long boost) - { -+#ifndef CONFIG_SCHED_ALT - unsigned long min, max, util = scx_cpuperf_target(sg_cpu->cpu); - - if (!scx_switched_all()) -@@ -233,6 +234,10 @@ static void sugov_get_util(struct sugov_cpu *sg_cpu, unsigned long boost) - util = max(util, boost); - sg_cpu->bw_min = min; - sg_cpu->util = sugov_effective_cpu_perf(sg_cpu->cpu, util, min, max); -+#else /* CONFIG_SCHED_ALT */ -+ sg_cpu->bw_min = 0; -+ sg_cpu->util = rq_load_util(cpu_rq(sg_cpu->cpu), arch_scale_cpu_capacity(sg_cpu->cpu)); -+#endif /* CONFIG_SCHED_ALT */ - } - - /** -@@ -360,6 +365,7 @@ static bool sugov_hold_freq(struct sugov_cpu *sg_cpu) - unsigned long idle_calls; - bool ret; - -+#ifndef CONFIG_SCHED_ALT - /* - * The heuristics in this function is for the fair class. For SCX, the - * performance target comes directly from the BPF scheduler. Let's just -@@ -367,6 +373,7 @@ static bool sugov_hold_freq(struct sugov_cpu *sg_cpu) - */ - if (scx_switched_all()) - return false; -+#endif /* !CONFIG_SCHED_ALT */ - - /* if capped by uclamp_max, always update to be in compliance */ - if (uclamp_rq_is_capped(cpu_rq(sg_cpu->cpu))) -@@ -392,8 +399,10 @@ static inline bool sugov_hold_freq(struct sugov_cpu *sg_cpu) { return false; } - */ - static inline void ignore_dl_rate_limit(struct sugov_cpu *sg_cpu) - { -+#ifndef CONFIG_SCHED_ALT - if (cpu_bw_dl(cpu_rq(sg_cpu->cpu)) > sg_cpu->bw_min) -- sg_cpu->sg_policy->need_freq_update = true; -+ sg_cpu->sg_policy->limits_changed = true; -+#endif - } - - static inline bool sugov_update_single_common(struct sugov_cpu *sg_cpu, -@@ -688,6 +697,7 @@ static int sugov_kthread_create(struct sugov_policy *sg_policy) - } - - ret = sched_setattr_nocheck(thread, &attr); -+ - if (ret) { - kthread_stop(thread); - pr_warn("%s: failed to set SCHED_DEADLINE\n", __func__); -diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c -index fbf31db0d..92f1e27e1 100644 ---- a/kernel/sched/cputime.c -+++ b/kernel/sched/cputime.c -@@ -128,7 +128,7 @@ void account_user_time(struct task_struct *p, u64 cputime) - p->utime += cputime; - account_group_user_time(p, cputime); - -- index = (task_nice(p) > 0) ? CPUTIME_NICE : CPUTIME_USER; -+ index = task_running_nice(p) ? CPUTIME_NICE : CPUTIME_USER; - - /* Add user time to cpustat. */ - task_group_account_field(p, index, cputime); -@@ -152,7 +152,7 @@ void account_guest_time(struct task_struct *p, u64 cputime) - p->gtime += cputime; - - /* Add guest time to cpustat. */ -- if (task_nice(p) > 0) { -+ if (task_running_nice(p)) { - task_group_account_field(p, CPUTIME_NICE, cputime); - cpustat[CPUTIME_GUEST_NICE] += cputime; - } else { -@@ -226,7 +226,7 @@ void account_idle_time(u64 cputime) - u64 *cpustat = kcpustat_this_cpu->cpustat; - struct rq *rq = this_rq(); - -- if (atomic_read(&rq->nr_iowait) > 0) -+ if (nr_iowait_cpu(cpu_of(rq)) > 0) - cpustat[CPUTIME_IOWAIT] += cputime; - else - cpustat[CPUTIME_IDLE] += cputime; -@@ -303,7 +303,7 @@ static inline u64 account_other_time(u64 max) - #ifdef CONFIG_64BIT - static inline u64 read_sum_exec_runtime(struct task_struct *t) - { -- return t->se.sum_exec_runtime; -+ return tsk_seruntime(t); - } - #else /* !CONFIG_64BIT: */ - static u64 read_sum_exec_runtime(struct task_struct *t) -@@ -313,7 +313,7 @@ static u64 read_sum_exec_runtime(struct task_struct *t) - struct rq *rq; - - rq = task_rq_lock(t, &rf); -- ns = t->se.sum_exec_runtime; -+ ns = tsk_seruntime(t); - task_rq_unlock(rq, t, &rf); - - return ns; -@@ -628,7 +628,7 @@ void cputime_adjust(struct task_cputime *curr, struct prev_cputime *prev, - void task_cputime_adjusted(struct task_struct *p, u64 *ut, u64 *st) - { - struct task_cputime cputime = { -- .sum_exec_runtime = p->se.sum_exec_runtime, -+ .sum_exec_runtime = tsk_seruntime(p), - }; - - if (task_cputime(p, &cputime.utime, &cputime.stime)) -diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c -index 74c1617cf..5b38a3ba7 100644 ---- a/kernel/sched/debug.c -+++ b/kernel/sched/debug.c -@@ -11,6 +11,7 @@ - #include - #include "sched.h" - -+#ifndef CONFIG_SCHED_ALT - /* - * This allows printing both to /sys/kernel/debug/sched/debug and - * to the console -@@ -210,6 +211,8 @@ static const struct file_operations sched_scaling_fops = { - .release = single_release, - }; - -+#endif /* !CONFIG_SCHED_ALT */ -+ - #ifdef CONFIG_PREEMPT_DYNAMIC - - static ssize_t sched_dynamic_write(struct file *filp, const char __user *ubuf, -@@ -275,6 +278,7 @@ static const struct file_operations sched_dynamic_fops = { - - #endif /* CONFIG_PREEMPT_DYNAMIC */ - -+#ifndef CONFIG_SCHED_ALT - __read_mostly bool sched_debug_verbose; - - static struct dentry *sd_dentry; -@@ -510,6 +514,7 @@ static const struct file_operations fair_server_period_fops = { - .llseek = seq_lseek, - .release = single_release, - }; -+#endif /* !CONFIG_SCHED_ALT */ - - #ifdef CONFIG_SCHED_CLASS_EXT - static ssize_t -@@ -547,6 +552,7 @@ static const struct file_operations ext_server_period_fops = { - - static struct dentry *debugfs_sched; - -+#ifndef CONFIG_SCHED_ALT - static void debugfs_fair_server_init(void) - { - struct dentry *d_fair; -@@ -567,6 +573,7 @@ static void debugfs_fair_server_init(void) - debugfs_create_file("period", 0644, d_cpu, (void *) cpu, &fair_server_period_fops); - } - } -+#endif /* !CONFIG_SCHED_ALT */ - - #ifdef CONFIG_SCHED_CLASS_EXT - static void debugfs_ext_server_init(void) -@@ -597,14 +604,17 @@ static __init int sched_init_debug(void) - - debugfs_sched = debugfs_create_dir("sched", NULL); - -+#ifndef CONFIG_SCHED_ALT - debugfs_create_file("features", 0644, debugfs_sched, NULL, &sched_feat_fops); - debugfs_create_file_unsafe("verbose", 0644, debugfs_sched, &sched_debug_verbose, &sched_verbose_fops); -+#endif /* !CONFIG_SCHED_ALT */ - #ifdef CONFIG_PREEMPT_DYNAMIC - debugfs_create_file("preempt", 0644, debugfs_sched, NULL, &sched_dynamic_fops); - #endif - - debugfs_create_u32("base_slice_ns", 0644, debugfs_sched, &sysctl_sched_base_slice); - -+#ifndef CONFIG_SCHED_ALT - debugfs_create_u32("latency_warn_ms", 0644, debugfs_sched, &sysctl_resched_latency_warn_ms); - debugfs_create_u32("latency_warn_once", 0644, debugfs_sched, &sysctl_resched_latency_warn_once); - -@@ -627,16 +637,21 @@ static __init int sched_init_debug(void) - #endif /* CONFIG_NUMA_BALANCING */ - - debugfs_create_file("debug", 0444, debugfs_sched, NULL, &sched_debug_fops); -+#endif /* !CONFIG_SCHED_ALT */ - -+#ifndef CONFIG_SCHED_ALT - debugfs_fair_server_init(); - #ifdef CONFIG_SCHED_CLASS_EXT - debugfs_ext_server_init(); - #endif -+#endif /* !CONFIG_SCHED_ALT */ - - return 0; - } - late_initcall(sched_init_debug); - -+#ifndef CONFIG_SCHED_ALT -+ - static cpumask_var_t sd_sysctl_cpus; - - static int sd_flags_show(struct seq_file *m, void *v) -@@ -1382,6 +1397,11 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns, - - sched_show_numa(p, m); - } -+#else -+void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns, -+ struct seq_file *m) -+{ } -+#endif /* !CONFIG_SCHED_ALT */ - - void proc_sched_set_task(struct task_struct *p) - { -diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c -index 912b2a846..3848a9c06 100644 ---- a/kernel/sched/idle.c -+++ b/kernel/sched/idle.c -@@ -297,10 +297,10 @@ static void do_idle(void) - __current_set_polling(); - tick_nohz_idle_enter(); - --#ifdef CONFIG_SCHED_POC_SELECTOR -+#if defined(CONFIG_SCHED_POC_SELECTOR) && !defined(CONFIG_SCHED_ALT) - /* POC Selector: mark CPU as idle */ - set_cpu_idle_state_poc(cpu, 1); --#endif /* CONFIG_SCHED_POC_SELECTOR */ -+#endif /* CONFIG_SCHED_POC_SELECTOR && !CONFIG_SCHED_ALT */ - - while (!need_resched()) { - -@@ -360,10 +360,10 @@ static void do_idle(void) - arch_cpu_idle_exit(); - } - --#ifdef CONFIG_SCHED_POC_SELECTOR -+#if defined(CONFIG_SCHED_POC_SELECTOR) && !defined(CONFIG_SCHED_ALT) - /* POC Selector: mark CPU as busy */ - set_cpu_idle_state_poc(cpu, 0); --#endif /* CONFIG_SCHED_POC_SELECTOR */ -+#endif /* CONFIG_SCHED_POC_SELECTOR && !CONFIG_SCHED_ALT */ - - /* - * Since we fell out of the loop above, we know TIF_NEED_RESCHED must -@@ -461,6 +461,8 @@ void cpu_startup_entry(enum cpuhp_state state) - do_idle(); - } - -+#ifndef CONFIG_SCHED_ALT -+#ifndef CONFIG_SCHED_ALT - /* - * idle-task scheduling class. - */ -@@ -598,3 +600,4 @@ DEFINE_SCHED_CLASS(idle) = { - .switching_to = switching_to_idle, - .update_curr = update_curr_idle, - }; -+#endif -diff --git a/kernel/sched/loadavg.c b/kernel/sched/loadavg.c -index b601e0243..1a11c505d 100644 ---- a/kernel/sched/loadavg.c -+++ b/kernel/sched/loadavg.c -@@ -77,6 +77,7 @@ void get_avenrun(unsigned long *loads, unsigned long offset, int shift) - loads[2] = (avenrun[2] + offset) << shift; - } - -+#ifndef CONFIG_SCHED_ALT - long calc_load_fold_active(struct rq *this_rq, long adjust) - { - long nr_active, delta = 0; -@@ -91,6 +92,7 @@ long calc_load_fold_active(struct rq *this_rq, long adjust) - - return delta; - } -+#endif - - /** - * fixed_power_int - compute: x^n, in O(log n) time -@@ -161,7 +163,7 @@ calc_load_n(unsigned long load, unsigned long exp, - return calc_load(load, fixed_power_int(exp, FSHIFT, n), active); - } - --#ifdef CONFIG_NO_HZ_COMMON -+#if defined(CONFIG_NO_HZ_COMMON) && !defined(CONFIG_SCHED_ALT) - /* - * Handle NO_HZ for the global load-average. - * -@@ -351,12 +353,19 @@ static inline void calc_global_nohz(void) { } - void calc_global_load(void) - { - unsigned long sample_window; -+#ifdef CONFIG_SCHED_BMQ -+ long active; -+#else - long active, delta; -+#endif - - sample_window = READ_ONCE(calc_load_update); - if (time_before(jiffies, sample_window + 10)) - return; - -+#ifdef CONFIG_SCHED_BMQ -+ active = nr_running() + nr_uninterruptible(); -+#else - /* - * Fold the 'old' NO_HZ-delta to include all NO_HZ CPUs. - */ -@@ -365,6 +374,7 @@ void calc_global_load(void) - atomic_long_add(delta, &calc_load_tasks); - - active = atomic_long_read(&calc_load_tasks); -+#endif - active = active > 0 ? active * FIXED_1 : 0; - - avenrun[0] = calc_load(avenrun[0], EXP_1, active); -@@ -380,6 +390,7 @@ void calc_global_load(void) - calc_global_nohz(); - } - -+#ifndef CONFIG_SCHED_ALT - /* - * Called from sched_tick() to periodically update this CPU's - * active count. -@@ -397,3 +408,4 @@ void calc_global_load_tick(struct rq *this_rq) - - this_rq->calc_load_update += LOAD_FREQ; - } -+#endif -diff --git a/kernel/sched/pds.h b/kernel/sched/pds.h -new file mode 100644 -index 000000000..fe3099071 ---- /dev/null -+++ b/kernel/sched/pds.h -@@ -0,0 +1,139 @@ -+#ifndef _KERNEL_SCHED_PDS_H -+#define _KERNEL_SCHED_PDS_H -+ -+#define ALT_SCHED_NAME "PDS" -+ -+static const u64 RT_MASK = ((1ULL << MIN_SCHED_NORMAL_PRIO) - 1); -+ -+#define SCHED_NORMAL_PRIO_NUM (32) -+#define SCHED_EDGE_DELTA (SCHED_NORMAL_PRIO_NUM - NICE_WIDTH / 2) -+ -+/* PDS assume SCHED_NORMAL_PRIO_NUM is power of 2 */ -+#define SCHED_NORMAL_PRIO_MOD(x) ((x) & (SCHED_NORMAL_PRIO_NUM - 1)) -+ -+/* default time slice 4ms -> shift 22, 2 time slice slots -> shift 23 */ -+static __read_mostly int sched_timeslice_shift = 23; -+ -+/* -+ * Common interfaces -+ */ -+static inline int -+task_sched_prio_normal(const struct task_struct *p, const struct rq *rq) -+{ -+ u64 sched_dl = max(p->deadline, rq->time_edge); -+ -+#ifdef ALT_SCHED_DEBUG -+ if (WARN_ONCE(sched_dl - rq->time_edge > NORMAL_PRIO_NUM - 1, -+ "pds: task_sched_prio_normal() delta %lld\n", sched_dl - rq->time_edge)) -+ return SCHED_NORMAL_PRIO_NUM - 1; -+#endif -+ -+ return sched_dl - rq->time_edge; -+} -+ -+static inline int task_sched_prio(const struct task_struct *p) -+{ -+ return (p->prio < MIN_NORMAL_PRIO) ? (p->prio >> 2) : -+ MIN_SCHED_NORMAL_PRIO + task_sched_prio_normal(p, task_rq(p)); -+} -+ -+#define TASK_SCHED_PRIO_IDX(p, rq, idx, prio) \ -+ if (p->prio < MIN_NORMAL_PRIO) { \ -+ prio = p->prio >> 2; \ -+ idx = prio; \ -+ } else { \ -+ u64 sched_dl = max(p->deadline, rq->time_edge); \ -+ prio = MIN_SCHED_NORMAL_PRIO + sched_dl - rq->time_edge; \ -+ idx = MIN_SCHED_NORMAL_PRIO + SCHED_NORMAL_PRIO_MOD(sched_dl); \ -+ } -+ -+static inline int sched_prio2idx(int sched_prio, struct rq *rq) -+{ -+ return (IDLE_TASK_SCHED_PRIO == sched_prio || sched_prio < MIN_SCHED_NORMAL_PRIO) ? -+ sched_prio : -+ MIN_SCHED_NORMAL_PRIO + SCHED_NORMAL_PRIO_MOD(sched_prio + rq->time_edge); -+} -+ -+static inline int sched_idx2prio(int sched_idx, struct rq *rq) -+{ -+ return (sched_idx < MIN_SCHED_NORMAL_PRIO) ? -+ sched_idx : -+ MIN_SCHED_NORMAL_PRIO + SCHED_NORMAL_PRIO_MOD(sched_idx - rq->time_edge); -+} -+ -+static inline int sched_rq_prio_idx(struct rq *rq) -+{ -+ return rq->prio_idx; -+} -+ -+static inline int task_running_nice(struct task_struct *p) -+{ -+ return (p->prio > DEFAULT_PRIO); -+} -+ -+static inline void sched_update_rq_clock(struct rq *rq) -+{ -+ struct list_head head; -+ u64 old = rq->time_edge; -+ u64 now = rq->clock >> sched_timeslice_shift; -+ u64 prio, delta; -+ DECLARE_BITMAP(normal, SCHED_QUEUE_BITS); -+ -+ if (now == old) -+ return; -+ -+ rq->time_edge = now; -+ delta = min_t(u64, SCHED_NORMAL_PRIO_NUM, now - old); -+ INIT_LIST_HEAD(&head); -+ -+ prio = MIN_SCHED_NORMAL_PRIO; -+ for_each_set_bit_from(prio, rq->queue.bitmap, MIN_SCHED_NORMAL_PRIO + delta) -+ list_splice_tail_init(rq->queue.heads + MIN_SCHED_NORMAL_PRIO + -+ SCHED_NORMAL_PRIO_MOD(prio + old), &head); -+ -+ bitmap_shift_right(normal, rq->queue.bitmap, delta, SCHED_QUEUE_BITS); -+ if (!list_empty(&head)) { -+ u64 idx = MIN_SCHED_NORMAL_PRIO + SCHED_NORMAL_PRIO_MOD(now); -+ -+ __list_splice(&head, rq->queue.heads + idx, rq->queue.heads[idx].next); -+ set_bit(MIN_SCHED_NORMAL_PRIO, normal); -+ } -+ bitmap_replace(rq->queue.bitmap, normal, rq->queue.bitmap, -+ (const unsigned long *)&RT_MASK, SCHED_QUEUE_BITS); -+ -+ if (rq->prio < MIN_SCHED_NORMAL_PRIO || IDLE_TASK_SCHED_PRIO == rq->prio) -+ return; -+ -+ rq->prio = max_t(u64, MIN_SCHED_NORMAL_PRIO, rq->prio - delta); -+ rq->prio_idx = sched_prio2idx(rq->prio, rq); -+} -+ -+static inline void sched_task_renew(struct task_struct *p, const struct rq *rq) -+{ -+ if (p->prio >= MIN_NORMAL_PRIO) -+ p->deadline = rq->time_edge + SCHED_EDGE_DELTA + -+ (p->static_prio - (MAX_PRIO - NICE_WIDTH)) / 2; -+} -+ -+static inline void sched_task_sanity_check(struct task_struct *p, struct rq *rq) -+{ -+ u64 max_dl = rq->time_edge + SCHED_EDGE_DELTA + NICE_WIDTH / 2 - 1; -+ if (unlikely(p->deadline > max_dl)) -+ p->deadline = max_dl; -+} -+ -+static inline void sched_task_fork(struct task_struct *p, struct rq *rq) -+{ -+ sched_task_renew(p, rq); -+} -+ -+static inline void do_sched_yield_type_1(struct task_struct *p, struct rq *rq) -+{ -+ p->time_slice = sysctl_sched_base_slice; -+ sched_task_renew(p, rq); -+} -+ -+static inline void sched_task_ttwu(struct task_struct *p) {} -+static inline void sched_task_deactivate(struct task_struct *p, struct rq *rq) {} -+ -+#endif /* _KERNEL_SCHED_PDS_H */ -diff --git a/kernel/sched/pelt.c b/kernel/sched/pelt.c -index 897790889..376f039d2 100644 ---- a/kernel/sched/pelt.c -+++ b/kernel/sched/pelt.c -@@ -267,6 +267,7 @@ ___update_load_avg(struct sched_avg *sa, unsigned long load) - WRITE_ONCE(sa->util_avg, sa->util_sum / divider); - } - -+#ifndef CONFIG_SCHED_ALT - /* - * sched_entity: - * -@@ -384,8 +385,9 @@ int update_dl_rq_load_avg(u64 now, struct rq *rq, int running) - - return 0; - } -+#endif - --#ifdef CONFIG_SCHED_HW_PRESSURE -+#if defined(CONFIG_SCHED_HW_PRESSURE) && !defined(CONFIG_SCHED_ALT) - /* - * hardware: - * -@@ -469,6 +471,7 @@ int update_irq_load_avg(struct rq *rq, u64 running) - } - #endif /* CONFIG_HAVE_SCHED_AVG_IRQ */ - -+#ifndef CONFIG_SCHED_ALT - /* - * Load avg and utiliztion metrics need to be updated periodically and before - * consumption. This function updates the metrics for all subsystems except for -@@ -488,3 +491,4 @@ bool update_other_load_avgs(struct rq *rq) - update_hw_load_avg(rq_clock_task(rq), rq, hw_pressure) | - update_irq_load_avg(rq, 0); - } -+#endif /* !CONFIG_SCHED_ALT */ -diff --git a/kernel/sched/pelt.h b/kernel/sched/pelt.h -index f921302dc..2fade7dab 100644 ---- a/kernel/sched/pelt.h -+++ b/kernel/sched/pelt.h -@@ -5,14 +5,16 @@ - - #include "sched-pelt.h" - -+#ifndef CONFIG_SCHED_ALT - int __update_load_avg_blocked_se(u64 now, struct sched_entity *se); - int __update_load_avg_se(u64 now, struct cfs_rq *cfs_rq, struct sched_entity *se); - int __update_load_avg_cfs_rq(u64 now, struct cfs_rq *cfs_rq); - int update_rt_rq_load_avg(u64 now, struct rq *rq, int running); - int update_dl_rq_load_avg(u64 now, struct rq *rq, int running); - bool update_other_load_avgs(struct rq *rq); -+#endif - --#ifdef CONFIG_SCHED_HW_PRESSURE -+#if defined(CONFIG_SCHED_HW_PRESSURE) && !defined(CONFIG_SCHED_ALT) - int update_hw_load_avg(u64 now, struct rq *rq, u64 capacity); - - static inline u64 hw_load_avg(struct rq *rq) -@@ -49,6 +51,7 @@ static inline u32 get_pelt_divider(struct sched_avg *avg) - return PELT_MIN_DIVIDER + avg->period_contrib; - } - -+#ifndef CONFIG_SCHED_ALT - static inline void cfs_se_util_change(struct sched_avg *avg) - { - unsigned int enqueued; -@@ -185,5 +188,6 @@ static inline u64 cfs_rq_clock_pelt(struct cfs_rq *cfs_rq) - return rq_clock_pelt(rq_of(cfs_rq)); - } - #endif /* !CONFIG_CFS_BANDWIDTH */ -+#endif /* CONFIG_SCHED_ALT */ - - #endif /* _KERNEL_SCHED_PELT_H */ -diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index a4eb46e12..4bd19581d 100644 ---- a/kernel/sched/sched.h -+++ b/kernel/sched/sched.h -@@ -5,6 +5,10 @@ - #ifndef _KERNEL_SCHED_SCHED_H - #define _KERNEL_SCHED_SCHED_H - -+#ifdef CONFIG_SCHED_ALT -+#include "alt_sched.h" -+#else -+ - #include - #include - #include -@@ -4248,4 +4252,9 @@ DEFINE_CLASS_IS_UNCONDITIONAL(sched_change) - - #include "ext.h" - -+static inline int task_running_nice(struct task_struct *p) -+{ -+ return (task_nice(p) > 0); -+} -+#endif /* !CONFIG_SCHED_ALT */ - #endif /* _KERNEL_SCHED_SCHED_H */ -diff --git a/kernel/sched/stats.c b/kernel/sched/stats.c -index d1c9429a4..cc3764073 100644 ---- a/kernel/sched/stats.c -+++ b/kernel/sched/stats.c -@@ -115,8 +115,10 @@ static int show_schedstat(struct seq_file *seq, void *v) - seq_printf(seq, "timestamp %lu\n", jiffies); - } else { - struct rq *rq; -+#ifndef CONFIG_SCHED_ALT - struct sched_domain *sd; - int dcount = 0; -+#endif - cpu = (unsigned long)(v - 2); - rq = cpu_rq(cpu); - -@@ -131,6 +133,7 @@ static int show_schedstat(struct seq_file *seq, void *v) - - seq_printf(seq, "\n"); - -+#ifndef CONFIG_SCHED_ALT - /* domain-specific stats */ - rcu_read_lock(); - for_each_domain(cpu, sd) { -@@ -161,6 +164,7 @@ static int show_schedstat(struct seq_file *seq, void *v) - sd->ttwu_move_balance); - } - rcu_read_unlock(); -+#endif - } - return 0; - } -diff --git a/kernel/sched/stats.h b/kernel/sched/stats.h -index a612cf253..1018d72ff 100644 ---- a/kernel/sched/stats.h -+++ b/kernel/sched/stats.h -@@ -89,6 +89,7 @@ static inline void rq_sched_info_depart (struct rq *rq, unsigned long long delt - - #endif /* CONFIG_SCHEDSTATS */ - -+#ifndef CONFIG_SCHED_ALT - #ifdef CONFIG_FAIR_GROUP_SCHED - struct sched_entity_stats { - struct sched_entity se; -@@ -105,6 +106,7 @@ __schedstats_from_se(struct sched_entity *se) - #endif - return &task_of(se)->stats; - } -+#endif /* CONFIG_SCHED_ALT */ - - #ifdef CONFIG_PSI - void psi_task_change(struct task_struct *task, int clear, int set); -diff --git a/kernel/sched/syscalls.c b/kernel/sched/syscalls.c -index b215b0ead..33f41fe32 100644 ---- a/kernel/sched/syscalls.c -+++ b/kernel/sched/syscalls.c -@@ -16,6 +16,14 @@ - #include "sched.h" - #include "autogroup.h" - -+#ifdef CONFIG_SCHED_ALT -+#include "alt_core.h" -+ -+static inline int __normal_prio(int policy, int rt_prio, int static_prio) -+{ -+ return rt_policy(policy) ? (MAX_RT_PRIO - 1 - rt_prio) : static_prio; -+} -+#else /* !CONFIG_SCHED_ALT */ - static inline int __normal_prio(int policy, int rt_prio, int nice) - { - int prio; -@@ -29,6 +37,7 @@ static inline int __normal_prio(int policy, int rt_prio, int nice) - - return prio; - } -+#endif /* !CONFIG_SCHED_ALT */ - - /* - * Calculate the expected normal priority: i.e. priority -@@ -39,7 +48,11 @@ static inline int __normal_prio(int policy, int rt_prio, int nice) - */ - static inline int normal_prio(struct task_struct *p) - { -+#ifdef CONFIG_SCHED_ALT -+ return __normal_prio(p->policy, p->rt_priority, p->static_prio); -+#else /* !CONFIG_SCHED_ALT */ - return __normal_prio(p->policy, p->rt_priority, PRIO_TO_NICE(p->static_prio)); -+#endif /* !CONFIG_SCHED_ALT */ - } - - /* -@@ -64,7 +77,9 @@ static int effective_prio(struct task_struct *p) - - void set_user_nice(struct task_struct *p, long nice) - { -+#ifndef CONFIG_SCHED_ALT - int old_prio; -+#endif - - if (task_nice(p) == nice || nice < MIN_NICE || nice > MAX_NICE) - return; -@@ -72,7 +87,11 @@ void set_user_nice(struct task_struct *p, long nice) - * We have to be careful, if called from sys_setpriority(), - * the task might be in the middle of scheduling on another CPU. - */ -+#ifdef CONFIG_SCHED_ALT -+ guard(task_access_lock)(p); -+#else - guard(task_rq_lock)(p); -+#endif - - /* - * The RT priorities are set via sched_setscheduler(), but we still -@@ -87,8 +106,10 @@ void set_user_nice(struct task_struct *p, long nice) - - scoped_guard (sched_change, p, DEQUEUE_SAVE) { - p->static_prio = NICE_TO_PRIO(nice); -+#ifndef CONFIG_SCHED_ALT - set_load_weight(p, true); - old_prio = p->prio; -+#endif - p->prio = effective_prio(p); - } - } -@@ -169,7 +190,19 @@ SYSCALL_DEFINE1(nice, int, increment) - */ - int task_prio(const struct task_struct *p) - { -+#ifdef CONFIG_SCHED_ALT -+/* -+ * sched policy return value kernel prio user prio/nice -+ * -+ * (BMQ)normal, batch, idle[0 ... 53] [100 ... 139] 0/[-20 ... 19]/[-7 ... 7] -+ * (PDS)normal, batch, idle[0 ... 39] 100 0/[-20 ... 19] -+ * fifo, rr [-1 ... -100] [99 ... 0] [0 ... 99] -+ */ -+ return (p->prio < MAX_RT_PRIO) ? p->prio - MAX_RT_PRIO : -+ task_sched_prio_normal(p, task_rq(p)); -+#else - return p->prio - MAX_RT_PRIO; -+#endif /* !CONFIG_SCHED_ALT */ - } - - /** -@@ -248,11 +281,16 @@ static void __setscheduler_params(struct task_struct *p, - - p->policy = policy; - -+#ifndef CONFIG_SCHED_ALT - if (dl_policy(policy)) - __setparam_dl(p, attr); - else if (fair_policy(policy)) - __setparam_fair(p, attr); -+#else /* !CONFIG_SCHED_ALT */ -+ p->static_prio = NICE_TO_PRIO(attr->sched_nice); -+#endif /* CONFIG_SCHED_ALT */ - -+#ifndef CONFIG_SCHED_ALT - /* rt-policy tasks do not have a timerslack */ - if (rt_or_dl_task_policy(p)) { - p->timer_slack_ns = 0; -@@ -260,6 +298,7 @@ static void __setscheduler_params(struct task_struct *p, - /* when switching back to non-rt policy, restore timerslack */ - p->timer_slack_ns = p->default_timer_slack_ns; - } -+#endif /* !CONFIG_SCHED_ALT */ - - /* - * __sched_setscheduler() ensures attr->sched_priority == 0 when -@@ -268,7 +307,9 @@ static void __setscheduler_params(struct task_struct *p, - */ - p->rt_priority = attr->sched_priority; - p->normal_prio = normal_prio(p); -+#ifndef CONFIG_SCHED_ALT - set_load_weight(p, true); -+#endif /* !CONFIG_SCHED_ALT */ - } - - /* -@@ -284,7 +325,7 @@ static bool check_same_owner(struct task_struct *p) - uid_eq(cred->euid, pcred->uid)); - } - --#ifdef CONFIG_RT_MUTEXES -+#if defined(CONFIG_RT_MUTEXES) && !defined(CONFIG_SCHED_ALT) - static inline void __setscheduler_dl_pi(int newprio, int policy, - struct task_struct *p, - struct sched_change_ctx *scope) -@@ -313,6 +354,7 @@ static inline void __setscheduler_dl_pi(int newprio, int policy, - } - #endif /* !CONFIG_RT_MUTEXES */ - -+#ifndef CONFIG_SCHED_ALT - #ifdef CONFIG_UCLAMP_TASK - - static int uclamp_validate(struct task_struct *p, -@@ -426,6 +468,7 @@ static inline int uclamp_validate(struct task_struct *p, - static void __setscheduler_uclamp(struct task_struct *p, - const struct sched_attr *attr) { } - #endif /* !CONFIG_UCLAMP_TASK */ -+#endif /* !CONFIG_SCHED_ALT */ - - /* - * Allow unprivileged RT tasks to decrease priority. -@@ -436,11 +479,13 @@ static int user_check_sched_setscheduler(struct task_struct *p, - const struct sched_attr *attr, - int policy, int reset_on_fork) - { -+#ifndef CONFIG_SCHED_ALT - if (fair_policy(policy)) { - if (attr->sched_nice < task_nice(p) && - !is_nice_reduction(p, attr->sched_nice)) - goto req_priv; - } -+#endif /* !CONFIG_SCHED_ALT */ - - if (rt_policy(policy)) { - unsigned long rlim_rtprio = task_rlimit(p, RLIMIT_RTPRIO); -@@ -455,6 +500,7 @@ static int user_check_sched_setscheduler(struct task_struct *p, - goto req_priv; - } - -+#ifndef CONFIG_SCHED_ALT - /* - * Can't set/change SCHED_DEADLINE policy at all for now - * (safest behavior); in the future we would like to allow -@@ -472,6 +518,7 @@ static int user_check_sched_setscheduler(struct task_struct *p, - if (!is_nice_reduction(p, task_nice(p))) - goto req_priv; - } -+#endif /* !CONFIG_SCHED_ALT */ - - /* Can't change other user's priorities: */ - if (!check_same_owner(p)) -@@ -491,12 +538,22 @@ static int user_check_sched_setscheduler(struct task_struct *p, - } - - int __sched_setscheduler(struct task_struct *p, -- const struct sched_attr *attr, -- bool user, bool pi) -+ const struct sched_attr *attr, -+ bool user, bool pi) - { -+#ifdef CONFIG_SCHED_ALT -+ const struct sched_attr dl_squash_attr = { -+ .size = sizeof(struct sched_attr), -+ .sched_policy = SCHED_FIFO, -+ .sched_nice = 0, -+ .sched_priority = 99, -+ }; -+#endif /* CONFIG_SCHED_ALT */ - int oldpolicy = -1, policy = attr->sched_policy; - int retval, oldprio, newprio; -+#ifndef CONFIG_SCHED_ALT - const struct sched_class *prev_class, *next_class; -+#endif /* !CONFIG_SCHED_ALT */ - struct balance_callback *head; - struct rq_flags rf; - int reset_on_fork; -@@ -506,6 +563,15 @@ int __sched_setscheduler(struct task_struct *p, - - /* The pi code expects interrupts enabled */ - BUG_ON(pi && in_interrupt()); -+#ifdef CONFIG_SCHED_ALT -+ /* -+ * Alt schedule FW supports SCHED_DEADLINE by squash it as prio 0 SCHED_FIFO -+ */ -+ if (unlikely(SCHED_DEADLINE == policy)) { -+ attr = &dl_squash_attr; -+ policy = attr->sched_policy; -+ } -+#endif /* CONFIG_SCHED_ALT */ - recheck: - /* Double check policy once rq lock held: */ - if (policy < 0) { -@@ -528,8 +594,12 @@ int __sched_setscheduler(struct task_struct *p, - */ - if (attr->sched_priority > MAX_RT_PRIO-1) - return -EINVAL; -+#ifdef CONFIG_SCHED_ALT -+ if ((rt_policy(policy) != (attr->sched_priority != 0))) -+#else - if ((dl_policy(policy) && !__checkparam_dl(attr)) || - (rt_policy(policy) != (attr->sched_priority != 0))) -+#endif /* !CONFIG_SCHED_ALT */ - return -EINVAL; - - if (user) { -@@ -545,6 +615,7 @@ int __sched_setscheduler(struct task_struct *p, - return retval; - } - -+#ifndef CONFIG_SCHED_ALT - /* Update task specific "requested" clamps */ - if (attr->sched_flags & SCHED_FLAG_UTIL_CLAMP) { - retval = uclamp_validate(p, attr); -@@ -560,6 +631,7 @@ int __sched_setscheduler(struct task_struct *p, - cpuset_locked = true; - cpuset_lock(); - } -+#endif /* !CONFIG_SCHED_ALT */ - - /* - * Make sure no PI-waiters arrive (or leave) while we are -@@ -568,8 +640,12 @@ int __sched_setscheduler(struct task_struct *p, - * To be able to change p->policy safely, the appropriate - * runqueue lock must be held. - */ -+#ifdef CONFIG_SCHED_ALT -+ rq = task_access_lock(p, &rf); -+#else - rq = task_rq_lock(p, &rf); - update_rq_clock(rq); -+#endif /* !CONFIG_SCHED_ALT */ - - /* - * Changing the policy of the stop threads its a very bad idea: -@@ -579,23 +655,31 @@ int __sched_setscheduler(struct task_struct *p, - goto unlock; - } - -+#ifndef CONFIG_SCHED_ALT - retval = scx_check_setscheduler(p, policy); - if (retval) - goto unlock; -+#endif /* !CONFIG_SCHED_ALT */ - - /* - * If not changing anything there's no need to proceed further, - * but store a possible modification of reset_on_fork. - */ - if (unlikely(policy == p->policy)) { -+#ifdef CONFIG_SCHED_ALT -+ if (!rt_policy(policy) && NICE_TO_PRIO(attr->sched_nice) != p->static_prio) -+#else - if (fair_policy(policy) && - (attr->sched_nice != task_nice(p) || - (attr->sched_runtime != p->se.slice))) -+#endif /* !CONFIG_SCHED_ALT */ - goto change; - if (rt_policy(policy) && attr->sched_priority != p->rt_priority) - goto change; -+#ifndef CONFIG_SCHED_ALT - if (dl_policy(policy) && dl_param_changed(p, attr)) - goto change; -+#endif /* !CONFIG_SCHED_ALT */ - if (attr->sched_flags & SCHED_FLAG_UTIL_CLAMP) - goto change; - -@@ -605,6 +689,7 @@ int __sched_setscheduler(struct task_struct *p, - } - change: - -+#ifndef CONFIG_SCHED_ALT - if (user) { - #ifdef CONFIG_RT_GROUP_SCHED - /* -@@ -635,16 +720,22 @@ int __sched_setscheduler(struct task_struct *p, - } - } - } -+#endif /* !CONFIG_SCHED_ALT */ - - /* Re-check policy now with rq lock held: */ - if (unlikely(oldpolicy != -1 && oldpolicy != p->policy)) { - policy = oldpolicy = -1; -+#ifdef CONFIG_SCHED_ALT -+ task_access_unlock(p, &rf); -+#else - task_rq_unlock(rq, p, &rf); -+#endif /* !CONFIG_SCHED_ALT */ - if (cpuset_locked) - cpuset_unlock(); - goto recheck; - } - -+#ifndef CONFIG_SCHED_ALT - /* - * If setscheduling to SCHED_DEADLINE (or changing the parameters - * of a SCHED_DEADLINE task) we need to check if enough bandwidth -@@ -654,11 +745,16 @@ int __sched_setscheduler(struct task_struct *p, - retval = -EBUSY; - goto unlock; - } -+#endif /* !CONFIG_SCHED_ALT */ - - p->sched_reset_on_fork = reset_on_fork; - oldprio = p->prio; - -+#ifdef CONFIG_SCHED_ALT -+ newprio = __normal_prio(policy, attr->sched_priority, NICE_TO_PRIO(attr->sched_nice)); -+#else - newprio = __normal_prio(policy, attr->sched_priority, attr->sched_nice); -+#endif /* !CONFIG_SCHED_ALT */ - if (pi) { - /* - * Take priority boosted tasks into account. If the new -@@ -672,21 +768,27 @@ int __sched_setscheduler(struct task_struct *p, - queue_flags &= ~DEQUEUE_MOVE; - } - -+#ifndef CONFIG_SCHED_ALT - prev_class = p->sched_class; - next_class = __setscheduler_class(policy, newprio); - - if (prev_class != next_class) - queue_flags |= DEQUEUE_CLASS; -+#endif /* !CONFIG_SCHED_ALT */ - - scoped_guard (sched_change, p, queue_flags) { - - if (!(attr->sched_flags & SCHED_FLAG_KEEP_PARAMS)) { - __setscheduler_params(p, attr); -+#ifndef CONFIG_SCHED_ALT - p->sched_class = next_class; -+#endif /* !CONFIG_SCHED_ALT */ - p->prio = newprio; - __setscheduler_dl_pi(newprio, policy, p, scope); - } -+#ifndef CONFIG_SCHED_ALT - __setscheduler_uclamp(p, attr); -+#endif /* !CONFIG_SCHED_ALT */ - - if (scope->queued) { - /* -@@ -701,7 +803,11 @@ int __sched_setscheduler(struct task_struct *p, - /* Avoid rq from going away on us: */ - preempt_disable(); - head = splice_balance_callbacks(rq); -+#ifdef CONFIG_SCHED_ALT -+ task_access_unlock(p, &rf); -+#else - task_rq_unlock(rq, p, &rf); -+#endif /* !CONFIG_SCHED_ALT */ - - if (pi) { - if (cpuset_locked) -@@ -716,7 +822,11 @@ int __sched_setscheduler(struct task_struct *p, - return 0; - - unlock: -+#ifdef CONFIG_SCHED_ALT -+ task_access_unlock(p, &rf); -+#else - task_rq_unlock(rq, p, &rf); -+#endif /* !CONFIG_SCHED_ALT */ - if (cpuset_locked) - cpuset_unlock(); - return retval; -@@ -731,8 +841,10 @@ static int _sched_setscheduler(struct task_struct *p, int policy, - .sched_nice = PRIO_TO_NICE(p->static_prio), - }; - -+#ifndef CONFIG_SCHED_ALT - if (p->se.custom_slice) - attr.sched_runtime = p->se.slice; -+#endif /* !CONFIG_SCHED_ALT */ - - /* Fixup the legacy SCHED_RESET_ON_FORK hack. */ - if ((policy != SETPARAM_POLICY) && (policy & SCHED_RESET_ON_FORK)) { -@@ -913,13 +1025,18 @@ static int sched_copy_attr(struct sched_attr __user *uattr, struct sched_attr *a - - static void get_params(struct task_struct *p, struct sched_attr *attr, unsigned int flags) - { -+#ifndef CONFIG_SCHED_ALT - if (task_has_dl_policy(p)) { - __getparam_dl(p, attr, flags); -- } else if (task_has_rt_policy(p)) { -+ } else -+#endif -+ if (task_has_rt_policy(p)) { - attr->sched_priority = p->rt_priority; - } else { - attr->sched_nice = task_nice(p); -+#ifndef CONFIG_SCHED_ALT - attr->sched_runtime = p->se.slice; -+#endif - } - } - -@@ -1106,6 +1223,7 @@ SYSCALL_DEFINE4(sched_getattr, pid_t, pid, struct sched_attr __user *, uattr, - - int dl_task_check_affinity(struct task_struct *p, const struct cpumask *mask) - { -+#ifndef CONFIG_SCHED_ALT - /* - * If the task isn't a deadline task or admission control is - * disabled then we don't care about affinity changes. -@@ -1129,6 +1247,7 @@ int dl_task_check_affinity(struct task_struct *p, const struct cpumask *mask) - guard(rcu)(); - if (!cpumask_subset(task_rq(p)->rd->span, mask)) - return -EBUSY; -+#endif - - return 0; - } -@@ -1152,9 +1271,11 @@ int __sched_setaffinity(struct task_struct *p, struct affinity_context *ctx) - ctx->new_mask = new_mask; - ctx->flags |= SCA_CHECK; - -+#ifndef CONFIG_SCHED_ALT - retval = dl_task_check_affinity(p, new_mask); - if (retval) - goto out_free_new_mask; -+#endif - - retval = __set_cpus_allowed_ptr(p, ctx); - if (retval) -@@ -1334,13 +1455,20 @@ SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len, - - static void do_sched_yield(void) - { -- struct rq_flags rf; - struct rq *rq; -+ struct rq_flags rf; - - rq = this_rq_lock_irq(&rf); - -+ schedstat_inc(rq->yld_count); -+#ifdef CONFIG_SCHED_ALT -+ yield_task(rq); -+#else /* !CONFIG_SCHED_ALT */ -+ rq = this_rq_lock_irq(&rf); -+ - schedstat_inc(rq->yld_count); - rq->donor->sched_class->yield_task(rq); -+#endif /* !CONFIG_SCHED_ALT */ - - preempt_disable(); - rq_unlock_irq(rq, &rf); -@@ -1409,6 +1537,9 @@ EXPORT_SYMBOL(yield); - */ - int __sched yield_to(struct task_struct *p, bool preempt) - { -+#ifdef CONFIG_SCHED_ALT -+ return 0; -+#else /* !CONFIG_SCHED_ALT */ - struct task_struct *curr; - struct rq *rq, *p_rq; - int yielded = 0; -@@ -1455,6 +1586,7 @@ int __sched yield_to(struct task_struct *p, bool preempt) - schedule(); - - return yielded; -+#endif /* !CONFIG_SCHED_ALT */ - } - EXPORT_SYMBOL_GPL(yield_to); - -@@ -1475,7 +1607,9 @@ SYSCALL_DEFINE1(sched_get_priority_max, int, policy) - case SCHED_RR: - ret = MAX_RT_PRIO-1; - break; -+#ifndef CONFIG_SCHED_ALT - case SCHED_DEADLINE: -+#endif - case SCHED_NORMAL: - case SCHED_BATCH: - case SCHED_IDLE: -@@ -1503,7 +1637,9 @@ SYSCALL_DEFINE1(sched_get_priority_min, int, policy) - case SCHED_RR: - ret = 1; - break; -+#ifndef CONFIG_SCHED_ALT - case SCHED_DEADLINE: -+#endif - case SCHED_NORMAL: - case SCHED_BATCH: - case SCHED_IDLE: -@@ -1515,7 +1651,9 @@ SYSCALL_DEFINE1(sched_get_priority_min, int, policy) - - static int sched_rr_get_interval(pid_t pid, struct timespec64 *t) - { -+#ifndef CONFIG_SCHED_ALT - unsigned int time_slice = 0; -+#endif - int retval; - - if (pid < 0) -@@ -1530,6 +1668,7 @@ static int sched_rr_get_interval(pid_t pid, struct timespec64 *t) - if (retval) - return retval; - -+#ifndef CONFIG_SCHED_ALT - scoped_guard (task_rq_lock, p) { - struct rq *rq = scope.rq; - if (p->sched_class->get_rr_interval) -@@ -1538,6 +1677,13 @@ static int sched_rr_get_interval(pid_t pid, struct timespec64 *t) - } - - jiffies_to_timespec64(time_slice, t); -+#else -+ } -+ -+ alt_sched_debug(); -+ -+ *t = ns_to_timespec64(sysctl_sched_base_slice); -+#endif /* !CONFIG_SCHED_ALT */ - return 0; - } - -diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c -index e4e84f92c..0eda3b3cc 100644 ---- a/kernel/sched/topology.c -+++ b/kernel/sched/topology.c -@@ -3,6 +3,7 @@ - * Scheduler topology setup/handling methods - */ - -+#ifndef CONFIG_SCHED_ALT - #include - #include - #include -@@ -1514,8 +1515,10 @@ static void asym_cpu_capacity_scan(void) - */ - - static int default_relax_domain_level = -1; -+#endif /* CONFIG_SCHED_ALT */ - int sched_domain_level_max; - -+#ifndef CONFIG_SCHED_ALT - static int __init setup_relax_domain_level(char *str) - { - if (kstrtoint(str, 0, &default_relax_domain_level)) -@@ -1765,6 +1768,7 @@ sd_init(struct sched_domain_topology_level *tl, - - return sd; - } -+#endif /* CONFIG_SCHED_ALT */ - - #ifdef CONFIG_SCHED_SMT - int cpu_smt_flags(void) -@@ -1842,6 +1846,7 @@ void __init set_sched_topology(struct sched_domain_topology_level *tl) - sched_domain_topology_saved = NULL; - } - -+#ifndef CONFIG_SCHED_ALT - #ifdef CONFIG_NUMA - static int cpu_numa_flags(void) - { -@@ -3027,3 +3032,40 @@ void partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[], - partition_sched_domains_locked(ndoms_new, doms_new, dattr_new); - sched_domains_mutex_unlock(); - } -+#else /* CONFIG_SCHED_ALT */ -+DEFINE_STATIC_KEY_FALSE(sched_asym_cpucapacity); -+ -+void partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[], -+ struct sched_domain_attr *dattr_new) -+{} -+ -+#ifdef CONFIG_NUMA -+int sched_numa_find_closest(const struct cpumask *cpus, int cpu) -+{ -+ struct cpumask *mask; -+ -+ if (cpumask_test_cpu(cpu, cpus)) -+ return cpu; -+ -+ mask = per_cpu(cpu_affinity_masks, cpu); -+ while ((cpu = cpumask_any_and(cpus, mask)) >= nr_cpu_ids) -+ mask++; -+ -+ return cpu; -+} -+ -+int sched_numa_find_nth_cpu(const struct cpumask *cpus, int cpu, int node) -+{ -+ return cpumask_nth(cpu, cpus); -+} -+ -+const struct cpumask *sched_numa_hop_mask(unsigned int node, unsigned int hops) -+{ -+ return ERR_PTR(-EOPNOTSUPP); -+} -+EXPORT_SYMBOL_GPL(sched_numa_hop_mask); -+#endif /* CONFIG_NUMA */ -+ -+void sched_update_asym_prefer_cpu(int cpu, int old_prio, int new_prio) -+{} -+#endif -diff --git a/kernel/sysctl.c b/kernel/sysctl.c -index c9efb17cc..efe0de047 100644 ---- a/kernel/sysctl.c -+++ b/kernel/sysctl.c -@@ -35,6 +35,10 @@ EXPORT_SYMBOL_GPL(sysctl_long_vals); - static const int ngroups_max = NGROUPS_MAX; - static const int cap_last_cap = CAP_LAST_CAP; - -+#ifdef CONFIG_SCHED_ALT -+extern int sched_yield_type; -+#endif -+ - #ifdef CONFIG_PROC_SYSCTL - - /** -@@ -1406,6 +1410,17 @@ static const struct ctl_table sysctl_subsys_table[] = { - .proc_handler = proc_dointvec, - }, - #endif -+#ifdef CONFIG_SCHED_ALT -+ { -+ .procname = "yield_type", -+ .data = &sched_yield_type, -+ .maxlen = sizeof (int), -+ .mode = 0644, -+ .proc_handler = &proc_dointvec_minmax, -+ .extra1 = SYSCTL_ZERO, -+ .extra2 = SYSCTL_TWO, -+ }, -+#endif - #ifdef CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN - { - .procname = "ignore-unaligned-usertrap", -diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c -index 0de2bb7cb..36ba69ac1 100644 ---- a/kernel/time/posix-cpu-timers.c -+++ b/kernel/time/posix-cpu-timers.c -@@ -223,7 +223,7 @@ static void task_sample_cputime(struct task_struct *p, u64 *samples) - u64 stime, utime; - - task_cputime(p, &utime, &stime); -- store_samples(samples, stime, utime, p->se.sum_exec_runtime); -+ store_samples(samples, stime, utime, tsk_seruntime(p)); - } - - static void proc_sample_cputime_atomic(struct task_cputime_atomic *at, -@@ -835,6 +835,7 @@ static void collect_posix_cputimers(struct posix_cputimers *pct, u64 *samples, - } - } - -+#ifndef CONFIG_SCHED_ALT - static inline void check_dl_overrun(struct task_struct *tsk) - { - if (tsk->dl.dl_overrun) { -@@ -842,6 +843,7 @@ static inline void check_dl_overrun(struct task_struct *tsk) - send_signal_locked(SIGXCPU, SEND_SIG_PRIV, tsk, PIDTYPE_TGID); - } - } -+#endif - - static bool check_rlimit(u64 time, u64 limit, int signo, bool rt, bool hard) - { -@@ -869,8 +871,10 @@ static void check_thread_timers(struct task_struct *tsk, - u64 samples[CPUCLOCK_MAX]; - unsigned long soft; - -+#ifndef CONFIG_SCHED_ALT - if (dl_task(tsk)) - check_dl_overrun(tsk); -+#endif - - if (expiry_cache_is_inactive(pct)) - return; -@@ -884,7 +888,7 @@ static void check_thread_timers(struct task_struct *tsk, - soft = task_rlimit(tsk, RLIMIT_RTTIME); - if (soft != RLIM_INFINITY) { - /* Task RT timeout is accounted in jiffies. RTTIME is usec */ -- unsigned long rttime = tsk->rt.timeout * (USEC_PER_SEC / HZ); -+ unsigned long rttime = tsk_rttimeout(tsk) * (USEC_PER_SEC / HZ); - unsigned long hard = task_rlimit_max(tsk, RLIMIT_RTTIME); - - /* At the hard limit, send SIGKILL. No further action. */ -@@ -1120,8 +1124,10 @@ static inline bool fastpath_timer_check(struct task_struct *tsk) - return true; - } - -+#ifndef CONFIG_SCHED_ALT - if (dl_task(tsk) && tsk->dl.dl_overrun) - return true; -+#endif - - return false; - } -diff --git a/kernel/trace/trace_osnoise.c b/kernel/trace/trace_osnoise.c -index 75678053b..268e42381 100644 ---- a/kernel/trace/trace_osnoise.c -+++ b/kernel/trace/trace_osnoise.c -@@ -1662,6 +1662,9 @@ static void osnoise_sleep(bool skip_period) - */ - static inline int osnoise_migration_pending(void) - { -+#ifdef CONFIG_SCHED_ALT -+ return 0; -+#else - if (!current->migration_pending) - return 0; - -@@ -1683,6 +1686,7 @@ static inline int osnoise_migration_pending(void) - mutex_unlock(&interface_lock); - - return 1; -+#endif - } - - /* -diff --git a/kernel/trace/trace_selftest.c b/kernel/trace/trace_selftest.c -index 929c84075..0cba8b036 100644 ---- a/kernel/trace/trace_selftest.c -+++ b/kernel/trace/trace_selftest.c -@@ -1423,10 +1423,15 @@ static int trace_wakeup_test_thread(void *data) - { - /* Make this a -deadline thread */ - static const struct sched_attr attr = { -+#ifdef CONFIG_SCHED_ALT -+ /* No deadline on BMQ/PDS, use RR */ -+ .sched_policy = SCHED_RR, -+#else - .sched_policy = SCHED_DEADLINE, - .sched_runtime = 100000ULL, - .sched_deadline = 10000000ULL, - .sched_period = 10000000ULL -+#endif - }; - struct wakeup_test_data *x = data; - -diff --git a/kernel/workqueue.c b/kernel/workqueue.c -index 33b721a9a..2aeb5b697 100644 ---- a/kernel/workqueue.c -+++ b/kernel/workqueue.c -@@ -1281,6 +1281,7 @@ static bool kick_pool(struct worker_pool *pool) - - p = worker->task; - -+#ifndef CONFIG_SCHED_ALT - #ifdef CONFIG_SMP - /* - * Idle @worker is about to execute @work and waking up provides an -@@ -1310,6 +1311,8 @@ static bool kick_pool(struct worker_pool *pool) - } - } - #endif -+#endif /* !CONFIG_SCHED_ALT */ -+ - wake_up_process(p); - return true; - } -@@ -1438,7 +1441,11 @@ void wq_worker_running(struct task_struct *task) - * CPU intensive auto-detection cares about how long a work item hogged - * CPU without sleeping. Reset the starting timestamp on wakeup. - */ -+#ifdef CONFIG_SCHED_ALT -+ worker->current_at = worker->task->sched_time; -+#else - worker->current_at = worker->task->se.sum_exec_runtime; -+#endif - - WRITE_ONCE(worker->sleeping, 0); - } -@@ -1523,7 +1530,11 @@ void wq_worker_tick(struct task_struct *task) - * We probably want to make this prettier in the future. - */ - if ((worker->flags & WORKER_NOT_RUNNING) || READ_ONCE(worker->sleeping) || -+#ifdef CONFIG_SCHED_ALT -+ worker->task->sched_time - worker->current_at < -+#else - worker->task->se.sum_exec_runtime - worker->current_at < -+#endif - wq_cpu_intensive_thresh_us * NSEC_PER_USEC) - return; - -@@ -3241,7 +3252,11 @@ __acquires(&pool->lock) - worker->current_func = work->func; - worker->current_pwq = pwq; - if (worker->task) -+#ifdef CONFIG_SCHED_ALT -+ worker->current_at = worker->task->sched_time; -+#else - worker->current_at = worker->task->se.sum_exec_runtime; -+#endif - worker->current_start = jiffies; - work_data = *work_data_bits(work); - worker->current_color = get_work_color(work_data); --- -2.54.0 - diff --git a/modules/nixos/boot/patches/more-ISA-levels-and-uarches-for-kernel-6.16+.patch b/modules/nixos/boot/patches/more-ISA-levels-and-uarches-for-kernel-6.16+.patch deleted file mode 100644 index 962a82a..0000000 --- a/modules/nixos/boot/patches/more-ISA-levels-and-uarches-for-kernel-6.16+.patch +++ /dev/null @@ -1,846 +0,0 @@ -From 6b1d270f55e3143bcb3ad914adf920774351a6b9 Mon Sep 17 00:00:00 2001 -From: graysky -Date: Mon, 18 Aug 2025 04:14:48 -0400 - -1. New generic x86-64 ISA levels - -These are selectable under: - Processor type and features ---> x86-64 compiler ISA level - -• x86-64 A value of (1) is the default -• x86-64-v2 A value of (2) brings support for vector - instructions up to Streaming SIMD Extensions 4.2 (SSE4.2) - and Supplemental Streaming SIMD Extensions 3 (SSSE3), the - POPCNT instruction, and CMPXCHG16B. -• x86-64-v3 A value of (3) adds vector instructions up to AVX2, MOVBE, - and additional bit-manipulation instructions. - -There is also x86-64-v4 but including this makes little sense as -the kernel does not use any of the AVX512 instructions anyway. - -Users of glibc 2.33 and above can see which level is supported by running: - /lib/ld-linux-x86-64.so.2 --help | grep supported -Or - /lib64/ld-linux-x86-64.so.2 --help | grep supported - -2. New micro-architectures - -These are selectable under: - Processor type and features ---> Processor family - -• AMD Improved K8-family -• AMD K10-family -• AMD Family 10h (Barcelona) -• AMD Family 14h (Bobcat) -• AMD Family 16h (Jaguar) -• AMD Family 15h (Bulldozer) -• AMD Family 15h (Piledriver) -• AMD Family 15h (Steamroller) -• AMD Family 15h (Excavator) -• AMD Family 17h (Zen) -• AMD Family 17h (Zen 2) -• AMD Family 19h (Zen 3)** -• AMD Family 19h (Zen 4)‡ -• AMD Family 1Ah (Zen 5)§ -• Intel Silvermont low-power processors -• Intel Goldmont low-power processors (Apollo Lake and Denverton) -• Intel Goldmont Plus low-power processors (Gemini Lake) -• Intel 1st Gen Core i3/i5/i7 (Nehalem) -• Intel 1.5 Gen Core i3/i5/i7 (Westmere) -• Intel 2nd Gen Core i3/i5/i7 (Sandybridge) -• Intel 3rd Gen Core i3/i5/i7 (Ivybridge) -• Intel 4th Gen Core i3/i5/i7 (Haswell) -• Intel 5th Gen Core i3/i5/i7 (Broadwell) -• Intel 6th Gen Core i3/i5/i7 (Skylake) -• Intel 6th Gen Core i7/i9 (Skylake X) -• Intel 8th Gen Core i3/i5/i7 (Cannon Lake) -• Intel 10th Gen Core i7/i9 (Ice Lake) -• Intel Xeon (Cascade Lake) -• Intel Xeon (Cooper Lake)* -• Intel 3rd Gen 10nm++ i3/i5/i7/i9-family (Tiger Lake)* -• Intel 4th Gen 10nm++ Xeon (Sapphire Rapids)† -• Intel 11th Gen i3/i5/i7/i9-family (Rocket Lake)† -• Intel 12th Gen i3/i5/i7/i9-family (Alder Lake)† -• Intel 13th Gen i3/i5/i7/i9-family (Raptor Lake)‡ -• Intel 14th Gen i3/i5/i7/i9-family (Meteor Lake)‡ -• Intel 5th Gen 10nm++ Xeon (Emerald Rapids)‡ - -Notes: If not otherwise noted, gcc >=9.1 is required for support. - *Requires gcc >=10.1 or clang >=10.0 - **Required gcc >=10.3 or clang >=12.0 - †Required gcc >=11.1 or clang >=12.0 - ‡Required gcc >=13.0 or clang >=15.0.5 - §Required gcc >14.0 or clang >=19.0? - -3. Auto-detected micro-architecture levels - -Compile by passing the '-march=native' option which, "selects the CPU -to generate code for at compilation time by determining the processor type of -the compiling machine. Using -march=native enables all instruction subsets -supported by the local machine and will produce code optimized for the local -machine under the constraints of the selected instruction set."[1] - -Users of Intel CPUs should select the 'Intel-Native' option and users of AMD -CPUs should select the 'AMD-Native' option. - -MINOR NOTES RELATING TO INTEL ATOM PROCESSORS -This patch also changes -march=atom to -march=bonnell in accordance with the -gcc v4.9 changes. Upstream is using the deprecated -match=atom flags when I -believe it should use the newer -march=bonnell flag for atom processors.[2] - -It is not recommended to compile on Atom-CPUs with the 'native' option.[3] The -recommendation is to use the 'atom' option instead. - -BENEFITS -Small but real speed increases are measurable using a make endpoint comparing -a generic kernel to one built with one of the respective microarchs. - -See the following experimental evidence supporting this statement: -https://github.com/graysky2/kernel_compiler_patch?tab=readme-ov-file#benchmarks - -REQUIREMENTS -linux version 6.16+ -gcc version >=9.0 or clang version >=9.0 - -ACKNOWLEDGMENTS -This patch builds on the seminal work by Jeroen.[4] - -REFERENCES -1. https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html#index-x86-Options -2. https://bugzilla.kernel.org/show_bug.cgi?id=77461 -3. https://github.com/graysky2/kernel_gcc_patch/issues/15 -4. http://www.linuxforge.net/docs/linux/linux-gcc.php - ---- - arch/x86/Kconfig.cpu | 427 ++++++++++++++++++++++++++++++++++++++++++- - arch/x86/Makefile | 213 ++++++++++++++++++++- - 2 files changed, 631 insertions(+), 9 deletions(-) - -diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu -index f928cf6e3252..2802936f2e62 100644 ---- a/arch/x86/Kconfig.cpu -+++ b/arch/x86/Kconfig.cpu -@@ -31,6 +31,7 @@ choice - - "Pentium-4" for the Intel Pentium 4 or P4-based Celeron. - - "K6" for the AMD K6, K6-II and K6-III (aka K6-3D). - - "Athlon" for the AMD K7 family (Athlon/Duron/Thunderbird). -+ - "Opteron/Athlon64/Hammer/K8" for all K8 and newer AMD CPUs. - - "Crusoe" for the Transmeta Crusoe series. - - "Efficeon" for the Transmeta Efficeon series. - - "Winchip-C6" for original IDT Winchip. -@@ -41,7 +42,10 @@ choice - - "CyrixIII/VIA C3" for VIA Cyrix III or VIA C3. - - "VIA C3-2" for VIA C3-2 "Nehemiah" (model 9 and above). - - "VIA C7" for VIA C7. -+ - "Intel P4" for the Pentium 4/Netburst microarchitecture. -+ - "Core 2/newer Xeon" for all core2 and newer Intel CPUs. - - "Intel Atom" for the Atom-microarchitecture CPUs. -+ - "Generic-x86-64" for a kernel which runs on any x86-64 CPU. - - See each option's help text for additional details. If you don't know - what to do, choose "Pentium-Pro". -@@ -135,10 +139,21 @@ config MPENTIUM4 - -Mobile Pentium 4 - -Mobile Pentium 4 M - -Extreme Edition (Gallatin) -+ -Prescott -+ -Prescott 2M -+ -Cedar Mill -+ -Presler -+ -Smithfiled - Xeons (Intel Xeon, Xeon MP, Xeon LV, Xeon MV) corename: - -Foster - -Prestonia - -Gallatin -+ -Nocona -+ -Irwindale -+ -Cranford -+ -Potomac -+ -Paxville -+ -Dempsey - - config MK6 - bool "K6/K6-II/K6-III" -@@ -281,6 +296,402 @@ config X86_GENERIC - This is really intended for distributors who need more - generic optimizations. - -+choice -+ prompt "x86_64 Compiler Build Optimization" -+ depends on !X86_NATIVE_CPU -+ default GENERIC_CPU -+ -+config GENERIC_CPU -+ bool "Generic-x86-64" -+ depends on X86_64 -+ help -+ Generic x86-64 CPU. -+ Runs equally well on all x86-64 CPUs. -+ -+config MK8 -+ bool "AMD Opteron/Athlon64/Hammer/K8" -+ help -+ Select this for an AMD Opteron or Athlon64 Hammer-family processor. -+ Enables use of some extended instructions, and passes appropriate -+ optimization flags to GCC. -+ -+config MK8SSE3 -+ bool "AMD Opteron/Athlon64/Hammer/K8 with SSE3" -+ help -+ Select this for improved AMD Opteron or Athlon64 Hammer-family processors. -+ Enables use of some extended instructions, and passes appropriate -+ optimization flags to GCC. -+ -+config MK10 -+ bool "AMD 61xx/7x50/PhenomX3/X4/II/K10" -+ help -+ Select this for an AMD 61xx Eight-Core Magny-Cours, Athlon X2 7x50, -+ Phenom X3/X4/II, Athlon II X2/X3/X4, or Turion II-family processor. -+ Enables use of some extended instructions, and passes appropriate -+ optimization flags to GCC. -+ -+config MBARCELONA -+ bool "AMD Barcelona" -+ help -+ Select this for AMD Family 10h Barcelona processors. -+ -+ Enables -march=barcelona -+ -+config MBOBCAT -+ bool "AMD Bobcat" -+ help -+ Select this for AMD Family 14h Bobcat processors. -+ -+ Enables -march=btver1 -+ -+config MJAGUAR -+ bool "AMD Jaguar" -+ help -+ Select this for AMD Family 16h Jaguar processors. -+ -+ Enables -march=btver2 -+ -+config MBULLDOZER -+ bool "AMD Bulldozer" -+ help -+ Select this for AMD Family 15h Bulldozer processors. -+ -+ Enables -march=bdver1 -+ -+config MPILEDRIVER -+ bool "AMD Piledriver" -+ help -+ Select this for AMD Family 15h Piledriver processors. -+ -+ Enables -march=bdver2 -+ -+config MSTEAMROLLER -+ bool "AMD Steamroller" -+ help -+ Select this for AMD Family 15h Steamroller processors. -+ -+ Enables -march=bdver3 -+ -+config MEXCAVATOR -+ bool "AMD Excavator" -+ help -+ Select this for AMD Family 15h Excavator processors. -+ -+ Enables -march=bdver4 -+ -+config MZEN -+ bool "AMD Ryzen" -+ help -+ Select this for AMD Family 17h Zen processors. -+ -+ Enables -march=znver1 -+ -+config MZEN2 -+ bool "AMD Ryzen 2" -+ help -+ Select this for AMD Family 17h Zen 2 processors. -+ -+ Enables -march=znver2 -+ -+config MZEN3 -+ bool "AMD Ryzen 3" -+ depends on (CC_IS_GCC && GCC_VERSION >= 100300) || (CC_IS_CLANG && CLANG_VERSION >= 120000) -+ help -+ Select this for AMD Family 19h Zen 3 processors. -+ -+ Enables -march=znver3 -+ -+config MZEN4 -+ bool "AMD Ryzen 4" -+ depends on (CC_IS_GCC && GCC_VERSION >= 130000) || (CC_IS_CLANG && CLANG_VERSION >= 160000) -+ help -+ Select this for AMD Family 19h Zen 4 processors. -+ -+ Enables -march=znver4 -+ -+config MZEN5 -+ bool "AMD Ryzen 5" -+ depends on (CC_IS_GCC && GCC_VERSION > 140000) || (CC_IS_CLANG && CLANG_VERSION >= 190100) -+ help -+ Select this for AMD Family 19h Zen 5 processors. -+ -+ Enables -march=znver5 -+ -+config MPSC -+ bool "Intel P4 / older Netburst based Xeon" -+ depends on X86_64 -+ help -+ Optimize for Intel Pentium 4, Pentium D and older Nocona/Dempsey -+ Xeon CPUs with Intel 64bit which is compatible with x86-64. -+ Note that the latest Xeons (Xeon 51xx and 53xx) are not based on the -+ Netburst core and shouldn't use this option. You can distinguish them -+ using the cpu family field -+ in /proc/cpuinfo. Family 15 is an older Xeon, Family 6 a newer one. -+ -+config MCORE2 -+ bool "Intel Core 2" -+ depends on X86_64 -+ help -+ -+ Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and -+ 53xx) CPUs. You can distinguish newer from older Xeons by the CPU -+ family in /proc/cpuinfo. Newer ones have 6 and older ones 15 -+ (not a typo) -+ -+ Enables -march=core2 -+ -+config MNEHALEM -+ bool "Intel Nehalem" -+ depends on X86_64 -+ help -+ -+ Select this for 1st Gen Core processors in the Nehalem family. -+ -+ Enables -march=nehalem -+ -+config MWESTMERE -+ bool "Intel Westmere" -+ depends on X86_64 -+ help -+ -+ Select this for the Intel Westmere formerly Nehalem-C family. -+ -+ Enables -march=westmere -+ -+config MSILVERMONT -+ bool "Intel Silvermont" -+ depends on X86_64 -+ help -+ -+ Select this for the Intel Silvermont platform. -+ -+ Enables -march=silvermont -+ -+config MGOLDMONT -+ bool "Intel Goldmont" -+ depends on X86_64 -+ help -+ -+ Select this for the Intel Goldmont platform including Apollo Lake and Denverton. -+ -+ Enables -march=goldmont -+ -+config MGOLDMONTPLUS -+ bool "Intel Goldmont Plus" -+ depends on X86_64 -+ help -+ -+ Select this for the Intel Goldmont Plus platform including Gemini Lake. -+ -+ Enables -march=goldmont-plus -+ -+config MSANDYBRIDGE -+ bool "Intel Sandy Bridge" -+ depends on X86_64 -+ help -+ -+ Select this for 2nd Gen Core processors in the Sandy Bridge family. -+ -+ Enables -march=sandybridge -+ -+config MIVYBRIDGE -+ bool "Intel Ivy Bridge" -+ depends on X86_64 -+ help -+ -+ Select this for 3rd Gen Core processors in the Ivy Bridge family. -+ -+ Enables -march=ivybridge -+ -+config MHASWELL -+ bool "Intel Haswell" -+ depends on X86_64 -+ help -+ -+ Select this for 4th Gen Core processors in the Haswell family. -+ -+ Enables -march=haswell -+ -+config MBROADWELL -+ bool "Intel Broadwell" -+ depends on X86_64 -+ help -+ -+ Select this for 5th Gen Core processors in the Broadwell family. -+ -+ Enables -march=broadwell -+ -+config MSKYLAKE -+ bool "Intel Skylake" -+ depends on X86_64 -+ help -+ -+ Select this for 6th Gen Core processors in the Skylake family. -+ -+ Enables -march=skylake -+ -+config MSKYLAKEX -+ bool "Intel Skylake-X (7th Gen Core i7/i9)" -+ depends on X86_64 -+ help -+ -+ Select this for 7th Gen Core i7/i9 processors in the Skylake-X family. -+ -+ Enables -march=skylake-avx512 -+ -+config MCANNONLAKE -+ bool "Intel Coffee Lake/Kaby Lake Refresh (8th Gen Core i3/i5/i7)" -+ depends on X86_64 -+ help -+ -+ Select this for 8th Gen Core i3/i5/i7 processors in the Coffee Lake or Kaby Lake Refresh families. -+ -+ Enables -march=cannonlake -+ -+config MICELAKE_CLIENT -+ bool "Intel Ice Lake" -+ depends on X86_64 -+ help -+ -+ Select this for 10th Gen Core client processors in the Ice Lake family. -+ -+ Enables -march=icelake-client -+ -+config MICELAKE_SERVER -+ bool "Intel Ice Lake-SP (3rd Gen Xeon Scalable)" -+ depends on X86_64 -+ help -+ -+ Select this for 3rd Gen Xeon Scalable processors in the Ice Lake-SP family. -+ -+ Enables -march=icelake-server -+ -+config MCOOPERLAKE -+ bool "Intel Cooper Lake" -+ depends on X86_64 -+ depends on (CC_IS_GCC && GCC_VERSION > 100100) || (CC_IS_CLANG && CLANG_VERSION >= 100000) -+ help -+ -+ Select this for Xeon processors in the Cooper Lake family. -+ -+ Enables -march=cooperlake -+ -+config MCASCADELAKE -+ bool "Intel Cascade Lake" -+ depends on X86_64 -+ depends on (CC_IS_GCC && GCC_VERSION > 100100) || (CC_IS_CLANG && CLANG_VERSION >= 100000) -+ help -+ -+ Select this for Xeon processors in the Cascade Lake family. -+ -+ Enables -march=cascadelake -+ -+config MTIGERLAKE -+ bool "Intel Tiger Lake" -+ depends on X86_64 -+ depends on (CC_IS_GCC && GCC_VERSION > 100100) || (CC_IS_CLANG && CLANG_VERSION >= 100000) -+ help -+ -+ Select this for third-generation 10 nm process processors in the Tiger Lake family. -+ -+ Enables -march=tigerlake -+ -+config MSAPPHIRERAPIDS -+ bool "Intel Sapphire Rapids" -+ depends on X86_64 -+ depends on (CC_IS_GCC && GCC_VERSION > 110000) || (CC_IS_CLANG && CLANG_VERSION >= 120000) -+ help -+ -+ Select this for fourth-generation 10 nm process processors in the Sapphire Rapids family. -+ -+ Enables -march=sapphirerapids -+ -+config MROCKETLAKE -+ bool "Intel Rocket Lake" -+ depends on X86_64 -+ depends on (CC_IS_GCC && GCC_VERSION > 110000) || (CC_IS_CLANG && CLANG_VERSION >= 120000) -+ help -+ -+ Select this for eleventh-generation processors in the Rocket Lake family. -+ -+ Enables -march=rocketlake -+ -+config MALDERLAKE -+ bool "Intel Alder Lake" -+ depends on X86_64 -+ depends on (CC_IS_GCC && GCC_VERSION > 110000) || (CC_IS_CLANG && CLANG_VERSION >= 120000) -+ help -+ -+ Select this for twelfth-generation processors in the Alder Lake family. -+ -+ Enables -march=alderlake -+ -+config MRAPTORLAKE -+ bool "Intel Raptor Lake" -+ depends on X86_64 -+ depends on (CC_IS_GCC && GCC_VERSION >= 130000) || (CC_IS_CLANG && CLANG_VERSION >= 150500) -+ help -+ -+ Select this for thirteenth-generation processors in the Raptor Lake family. -+ -+ Enables -march=raptorlake -+ -+config MMETEORLAKE -+ bool "Intel Meteor Lake" -+ depends on X86_64 -+ depends on (CC_IS_GCC && GCC_VERSION >= 130000) || (CC_IS_CLANG && CLANG_VERSION >= 150500) -+ help -+ -+ Select this for fourteenth-generation processors in the Meteor Lake family. -+ -+ Enables -march=meteorlake -+ -+config MEMERALDRAPIDS -+ bool "Intel Emerald Rapids" -+ depends on X86_64 -+ depends on (CC_IS_GCC && GCC_VERSION > 130000) || (CC_IS_CLANG && CLANG_VERSION >= 150500) -+ help -+ -+ Select this for fifth-generation Xeon Scalable processors in the Emerald Rapids family. -+ -+ Enables -march=emeraldrapids -+ -+config MDIAMONDRAPIDS -+ bool "Intel Diamond Rapids (7th Gen Xeon Scalable)" -+ depends on X86_64 -+ depends on (CC_IS_GCC && GCC_VERSION > 150000) || (CC_IS_CLANG && CLANG_VERSION >= 200000) -+ help -+ -+ Select this for seventh-generation Xeon Scalable processors in the Diamond Rapids family. -+ -+ Enables -march=diamondrapids -+ -+endchoice -+ -+config X86_64_VERSION -+ int "x86-64 compiler ISA level" -+ range 1 3 -+ depends on (CC_IS_GCC && GCC_VERSION > 110000) || (CC_IS_CLANG && CLANG_VERSION >= 120000) -+ depends on X86_64 && GENERIC_CPU -+ help -+ Specify a specific x86-64 compiler ISA level. -+ -+ There are three x86-64 ISA levels that work on top of -+ the x86-64 baseline, namely: x86-64-v2 and x86-64-v3. -+ -+ x86-64-v2 brings support for vector instructions up to Streaming SIMD -+ Extensions 4.2 (SSE4.2) and Supplemental Streaming SIMD Extensions 3 -+ (SSSE3), the POPCNT instruction, and CMPXCHG16B. -+ -+ x86-64-v3 adds vector instructions up to AVX2, MOVBE, and additional -+ bit-manipulation instructions. -+ -+ x86-64-v4 is not included since the kernel does not use AVX512 instructions -+ -+ You can find the best version for your CPU by running one of the following: -+ /lib/ld-linux-x86-64.so.2 --help | grep supported -+ /lib64/ld-linux-x86-64.so.2 --help | grep supported -+ - # - # Define implied options from the CPU selection here - config X86_INTERNODE_CACHE_SHIFT -@@ -290,8 +701,8 @@ config X86_INTERNODE_CACHE_SHIFT - - config X86_L1_CACHE_SHIFT - int -- default "7" if MPENTIUM4 -- default "6" if MK7 || MPENTIUMM || MATOM || MVIAC7 || X86_GENERIC || X86_64 -+ default "7" if MPENTIUM4 || MPSC -+ default "6" if MK7 || MK8 || MPENTIUMM || MCORE2 || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU || MK8SSE3 || MK10 || MBARCELONA || MBOBCAT || MJAGUAR || MBULLDOZER || MPILEDRIVER || MSTEAMROLLER || MEXCAVATOR || MZEN || MZEN2 || MZEN3 || MZEN4 || MZEN5 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MDIAMONDRAPIDS || X86_NATIVE_CPU - default "4" if MELAN || M486SX || M486 || MGEODEGX1 - default "5" if MWINCHIP3D || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 || MGEODE_LX - -@@ -309,19 +720,19 @@ config X86_ALIGNMENT_16 - - config X86_INTEL_USERCOPY - def_bool y -- depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK7 || MEFFICEON -+ depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7 || MEFFICEON || MCORE2 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MDIAMONDRAPIDS - - config X86_USE_PPRO_CHECKSUM - def_bool y -- depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MEFFICEON || MGEODE_LX || MATOM -+ depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 || MVIAC7 || MEFFICEON || MGEODE_LX || MCORE2 || MATOM || MK8SSE3 || MK10 || MBARCELONA || MBOBCAT || MJAGUAR || MBULLDOZER || MPILEDRIVER || MSTEAMROLLER || MEXCAVATOR || MZEN || MZEN2 || MZEN3 || MZEN4 || MZEN5 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MDIAMONDRAPIDS - - config X86_TSC - def_bool y -- depends on (MWINCHIP3D || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MVIAC3_2 || MVIAC7 || MGEODEGX1 || MGEODE_LX || MATOM) || X86_64 -+ depends on (MWINCHIP3D || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MVIAC7 || MGEODEGX1 || MGEODE_LX || MCORE2 || MATOM) || X86_64 - - config X86_HAVE_PAE - def_bool y -- depends on MCRUSOE || MEFFICEON || MCYRIXIII || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC7 || MATOM || X86_64 -+ depends on MCRUSOE || MEFFICEON || MCYRIXIII || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC7 || MCORE2 || MATOM || X86_64 - - config X86_CX8 - def_bool y -@@ -331,12 +742,12 @@ config X86_CX8 - # generates cmov. - config X86_CMOV - def_bool y -- depends on (MK7 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MCRUSOE || MEFFICEON || MATOM || MGEODE_LX || X86_64) -+ depends on (MK8 || MK7 || MCORE2 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MCRUSOE || MEFFICEON || X86_64 || MATOM || MGEODE_LX) - - config X86_MINIMUM_CPU_FAMILY - int - default "64" if X86_64 -- default "6" if X86_32 && (MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MEFFICEON || MATOM || MK7) -+ default "6" if X86_32 && (MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MEFFICEON || MATOM || MCORE2 || MK7 || MK8) - default "5" if X86_32 && X86_CX8 - default "4" - -diff --git a/arch/x86/Makefile b/arch/x86/Makefile -index 1913d342969b..6c165daccb3d 100644 ---- a/arch/x86/Makefile -+++ b/arch/x86/Makefile -@@ -177,10 +177,221 @@ ifdef CONFIG_X86_NATIVE_CPU - KBUILD_CFLAGS += -march=native - KBUILD_RUSTFLAGS += -Ctarget-cpu=native - else -+ifdef CONFIG_MK8 -+ KBUILD_CFLAGS += -march=k8 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=k8 -+endif -+ -+ifdef CONFIG_MK8SSE3 -+ KBUILD_CFLAGS += -march=k8-sse3 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=k8-sse3 -+endif -+ -+ifdef CONFIG_MK10 -+ KBUILD_CFLAGS += -march=amdfam10 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=amdfam10 -+endif -+ -+ifdef CONFIG_MBARCELONA -+ KBUILD_CFLAGS += -march=barcelona -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=barcelona -+endif -+ -+ifdef CONFIG_MBOBCAT -+ KBUILD_CFLAGS += -march=btver1 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=btver1 -+endif -+ -+ifdef CONFIG_MJAGUAR -+ KBUILD_CFLAGS += -march=btver2 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=btver2 -+endif -+ -+ifdef CONFIG_MBULLDOZER -+ KBUILD_CFLAGS += -march=bdver1 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=bdver1 -+endif -+ -+ifdef CONFIG_MPILEDRIVER -+ KBUILD_CFLAGS += -march=bdver2 -mno-tbm -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=bdver2 -mno-tbm -+endif -+ -+ifdef CONFIG_MSTEAMROLLER -+ KBUILD_CFLAGS += -march=bdver3 -mno-tbm -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=bdver3 -mno-tbm -+endif -+ -+ifdef CONFIG_MEXCAVATOR -+ KBUILD_CFLAGS += -march=bdver4 -mno-tbm -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=bdver4 -mno-tbm -+endif -+ -+ifdef CONFIG_MZEN -+ KBUILD_CFLAGS += -march=znver1 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=znver1 -+endif -+ -+ifdef CONFIG_MZEN2 -+ KBUILD_CFLAGS += -march=znver2 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=znver2 -+endif -+ -+ifdef CONFIG_MZEN3 -+ KBUILD_CFLAGS += -march=znver3 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=znver3 -+endif -+ -+ifdef CONFIG_MZEN4 -+ KBUILD_CFLAGS += -march=znver4 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=znver4 -+endif -+ -+ifdef CONFIG_MZEN5 -+ KBUILD_CFLAGS += -march=znver5 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=znver5 -+endif -+ -+ifdef CONFIG_MPSC -+ KBUILD_CFLAGS += -march=nocona -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=nocona -+endif -+ -+ifdef CONFIG_MCORE2 -+ KBUILD_CFLAGS += -march=core2 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=core2 -+endif -+ -+ifdef CONFIG_MNEHALEM -+ KBUILD_CFLAGS += -march=nehalem -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=nehalem -+endif -+ -+ifdef CONFIG_MWESTMERE -+ KBUILD_CFLAGS += -march=westmere -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=westmere -+endif -+ -+ifdef CONFIG_MSILVERMONT -+ KBUILD_CFLAGS += -march=silvermont -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=silvermont -+endif -+ -+ifdef CONFIG_MGOLDMONT -+ KBUILD_CFLAGS += -march=goldmont -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=goldmont -+endif -+ -+ifdef CONFIG_MGOLDMONTPLUS -+ KBUILD_CFLAGS += -march=goldmont-plus -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=goldmont-plus -+endif -+ -+ifdef CONFIG_MSANDYBRIDGE -+ KBUILD_CFLAGS += -march=sandybridge -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=sandybridge -+endif -+ -+ifdef CONFIG_MIVYBRIDGE -+ KBUILD_CFLAGS += -march=ivybridge -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=ivybridge -+endif -+ -+ifdef CONFIG_MHASWELL -+ KBUILD_CFLAGS += -march=haswell -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=haswell -+endif -+ -+ifdef CONFIG_MBROADWELL -+ KBUILD_CFLAGS += -march=broadwell -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=broadwell -+endif -+ -+ifdef CONFIG_MSKYLAKE -+ KBUILD_CFLAGS += -march=skylake -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=skylake -+endif -+ -+ifdef CONFIG_MSKYLAKEX -+ KBUILD_CFLAGS += -march=skylake-avx512 -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=skylake-avx512 -+endif -+ -+ifdef CONFIG_MCANNONLAKE -+ KBUILD_CFLAGS += -march=cannonlake -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=cannonlake -+endif -+ -+ifdef CONFIG_MICELAKE_CLIENT -+ KBUILD_CFLAGS += -march=icelake-client -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=icelake-client -+endif -+ -+ifdef CONFIG_MICELAKE_SERVER -+ KBUILD_CFLAGS += -march=icelake-server -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=icelake-server -+endif -+ -+ifdef CONFIG_MCOOPERLAKE -+ KBUILD_CFLAGS += -march=cooperlake -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=cooperlake -+endif -+ -+ifdef CONFIG_MCASCADELAKE -+ KBUILD_CFLAGS += -march=cascadelake -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=cascadelake -+endif -+ -+ifdef CONFIG_MTIGERLAKE -+ KBUILD_CFLAGS += -march=tigerlake -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=tigerlake -+endif -+ -+ifdef CONFIG_MSAPPHIRERAPIDS -+ KBUILD_CFLAGS += -march=sapphirerapids -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=sapphirerapids -+endif -+ -+ifdef CONFIG_MROCKETLAKE -+ KBUILD_CFLAGS += -march=rocketlake -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=rocketlake -+endif -+ -+ifdef CONFIG_MALDERLAKE -+ KBUILD_CFLAGS += -march=alderlake -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=alderlake -+endif -+ -+ifdef CONFIG_MRAPTORLAKE -+ KBUILD_CFLAGS += -march=raptorlake -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=raptorlake -+endif -+ -+ifdef CONFIG_MMETEORLAKE -+ KBUILD_CFLAGS += -march=meteorlake -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=meteorlake -+endif -+ -+ifdef CONFIG_MEMERALDRAPIDS -+ KBUILD_CFLAGS += -march=emeraldrapids -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=emeraldrapids -+endif -+ -+ifdef CONFIG_MDIAMONDRAPIDS -+ KBUILD_CFLAGS += -march=diamondrapids -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=diamondrapids -+endif -+ -+ifdef CONFIG_GENERIC_CPU -+ifeq ($(CONFIG_X86_64_VERSION),1) - KBUILD_CFLAGS += -march=x86-64 -mtune=generic - KBUILD_RUSTFLAGS += -Ctarget-cpu=x86-64 -Ztune-cpu=generic -+else -+ KBUILD_CFLAGS +=-march=x86-64-v$(CONFIG_X86_64_VERSION) -+ KBUILD_RUSTFLAGS += -Ctarget-cpu=x86-64-v$(CONFIG_X86_64_VERSION) -+endif -+endif - endif -- - KBUILD_CFLAGS += -mno-red-zone - KBUILD_CFLAGS += -mcmodel=kernel - KBUILD_RUSTFLAGS += -Cno-redzone=y --- -2.50.1 -