syzbot


ID Workflow Result Correct Bug Created Started Finished Revision Error
f4ea46b8-4ef0-4454-a0ca-d3dcb332f9f5 assessment-security DenialOfService: ❌ Exploitable: ❌ FilesystemTrigger: ❌ NetworkTrigger: ❌ PeripheralTrigger: ❌ RemoteTrigger: ❌ Unprivileged: ❌ UserNamespace: ❌ VMGuestTrigger: ❌ VMHostTrigger: ❌ ❓ WARNING in gid_table_release_one (4) 2026/05/21 20:27 2026/05/21 20:27 2026/05/21 21:36 d57425845dbe663f86e1e54a4997e95bd557b624

			
		
Agent: prod-syz-agent-1
External Bug ID: ---

Inputs:
BaseBranch master
BaseCommit RC
BaseRepository git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
BugTitle WARNING in gid_table_release_one
CrashLogID 5009757334667264
CrashReportID 4585113045696512
KernelCommit c1f49dea2b8f335813d3b348fd39117fb8efb428
KernelConfig
Show (281204 bytes)
#
# Automatically generated file; DO NOT EDIT.
# Linux/x86_64 syzkaller Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="Debian clang version 21.1.8 (++20251221033036+2078da43e25a-1~exp1~20251221153213.50)"
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=109101
CONFIG_RUST_IS_AVAILABLE=y
CONFIG_RUSTC_LLVM_VERSION=210102
CONFIG_RUSTC_LLVM_MAJOR_VERSION=21
CONFIG_RUSTC_CLANG_LLVM_COMPATIBLE=y
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_RUSTC_HAS_SPAN_FILE=y
CONFIG_RUSTC_HAS_UNNECESSARY_TRANSMUTES=y
CONFIG_RUSTC_HAS_FILE_WITH_NUL=y
CONFIG_RUSTC_HAS_FILE_AS_C_STR=y
CONFIG_PAHOLE_VERSION=130
CONFIG_CONSTRUCTORS=y
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=y
# 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 is not set
CONFIG_DEFAULT_INIT=""
CONFIG_DEFAULT_HOSTNAME="(none)"
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_HARDIRQS_SW_RESEND=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y
CONFIG_GENERIC_IRQ_RESERVATION_MODE=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=y
# CONFIG_NO_HZ_FULL is not set
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 is not set
CONFIG_BPF_PRELOAD=y
CONFIG_BPF_PRELOAD_UMD=y
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_RT is not set
CONFIG_PREEMPT_COUNT=y
CONFIG_PREEMPTION=y
CONFIG_PREEMPT_DYNAMIC=y
CONFIG_SCHED_CORE=y

#
# CPU/Task time and stats accounting
#
CONFIG_VIRT_CPU_ACCOUNTING=y
# CONFIG_TICK_CPU_ACCOUNTING is not set
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
CONFIG_PSI=y
# CONFIG_PSI_DEFAULT_DISABLED is not set
# 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 is not set
CONFIG_TREE_SRCU=y
CONFIG_TASKS_RCU_GENERIC=y
CONFIG_NEED_TASKS_RCU=y
CONFIG_TASKS_RCU=y
CONFIG_TASKS_TRACE_RCU=y
CONFIG_RCU_STALL_COMMON=y
CONFIG_RCU_NEED_SEGCBLIST=y
# end of RCU Subsystem

CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
# CONFIG_IKHEADERS is not set
CONFIG_LOG_BUF_SHIFT=18
CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
# CONFIG_PRINTK_INDEX is not set
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y

#
# Scheduler features
#
# CONFIG_UCLAMP_TASK is not set
# CONFIG_SCHED_PROXY_EXEC is not set
# 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_NUMA_BALANCING=y
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=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=y
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_CGROUP_PIDS=y
CONFIG_CGROUP_RDMA=y
# CONFIG_CGROUP_DMEM is not set
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CPUSETS=y
# CONFIG_CPUSETS_V1 is not set
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_BPF=y
CONFIG_CGROUP_MISC=y
CONFIG_CGROUP_DEBUG=y
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_SCHED_AUTOGROUP is not set
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 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=y
CONFIG_HAVE_PCSPKR_PLATFORM=y
CONFIG_EXPERT=y
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_BASE_SMALL is not set
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_IO_URING_MOCK_FILE=y
CONFIG_ADVISE_SYSCALLS=y
CONFIG_MEMBARRIER=y
CONFIG_KCMP=y
CONFIG_RSEQ=y
# CONFIG_RSEQ_SLICE_EXTENSION is not set
# CONFIG_RSEQ_STATS is not set
# CONFIG_RSEQ_DEBUG_DEFAULT_ENABLE is not set
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_RUST is not set
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 is not set
# CONFIG_KEXEC_JUMP is not set
CONFIG_CRASH_DUMP=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 is not set
# 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_CSUM=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_KASAN_SHADOW_OFFSET=0xdffffc0000000000
CONFIG_HAVE_INTEL_TXT=y
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_PGTABLE_LEVELS=5

#
# Processor type and features
#
CONFIG_SMP=y
CONFIG_X86_X2APIC=y
# CONFIG_X86_POSTED_MSI is not set
CONFIG_X86_MPPARSE=y
# CONFIG_X86_CPU_RESCTRL is not set
CONFIG_X86_FRED=y
CONFIG_X86_EXTENDED_PLATFORM=y
# CONFIG_X86_NUMACHIP is not set
# CONFIG_X86_VSMP is not set
# CONFIG_X86_INTEL_MID is not set
# CONFIG_X86_GOLDFISH is not set
# CONFIG_X86_INTEL_LPSS is not set
# CONFIG_X86_AMD_PLATFORM_DEVICE is not set
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_SPINLOCKS=y
CONFIG_X86_HV_CALLBACK_VECTOR=y
# CONFIG_XEN is not set
CONFIG_KVM_GUEST=y
CONFIG_ARCH_CPUIDLE_HALTPOLL=y
CONFIG_PVH=y
# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
CONFIG_PARAVIRT_CLOCK=y
# CONFIG_JAILHOUSE_GUEST is not set
# CONFIG_ACRN_GUEST is not set
# CONFIG_BHYVE_GUEST is not set
CONFIG_CC_HAS_MARCH_NATIVE=y
# CONFIG_X86_NATIVE_CPU is not set
CONFIG_X86_INTERNODE_CACHE_SHIFT=6
CONFIG_X86_L1_CACHE_SHIFT=6
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_PROCESSOR_SELECT=y
CONFIG_BROADCAST_TLB_FLUSH=y
CONFIG_CPU_SUP_INTEL=y
CONFIG_CPU_SUP_AMD=y
# CONFIG_CPU_SUP_HYGON is not set
# CONFIG_CPU_SUP_CENTAUR is not set
# CONFIG_CPU_SUP_ZHAOXIN is not set
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 is not set
CONFIG_NR_CPUS_RANGE_BEGIN=2
CONFIG_NR_CPUS_RANGE_END=512
CONFIG_NR_CPUS_DEFAULT=64
CONFIG_NR_CPUS=8
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 is not set

#
# Performance monitoring
#
CONFIG_PERF_EVENTS_INTEL_UNCORE=y
CONFIG_PERF_EVENTS_INTEL_RAPL=y
CONFIG_PERF_EVENTS_INTEL_CSTATE=y
# CONFIG_PERF_EVENTS_AMD_POWER is not set
CONFIG_PERF_EVENTS_AMD_UNCORE=y
# CONFIG_PERF_EVENTS_AMD_BRS is not set
# 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 is not set
CONFIG_NUMA=y
CONFIG_AMD_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
CONFIG_NODES_SHIFT=6
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 is not set
# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
CONFIG_MTRR=y
# CONFIG_MTRR_SANITIZER is not set
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=y
# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set
CONFIG_X86_SGX=y
CONFIG_X86_USER_SHADOW_STACK=y
# CONFIG_INTEL_TDX_HOST is not set
# CONFIG_EFI is not set
CONFIG_HZ_100=y
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=100
CONFIG_SCHED_HRTICK=y
CONFIG_ARCH_SUPPORTS_KEXEC=y
CONFIG_ARCH_SUPPORTS_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 is not set
CONFIG_PHYSICAL_ALIGN=0x200000
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=y
CONFIG_CMDLINE="earlyprintk=serial net.ifnames=0 sysctl.kernel.hung_task_all_cpu_backtrace=1 ima_policy=tcb nf-conntrack-ftp.ports=20000 nf-conntrack-tftp.ports=20000 nf-conntrack-sip.ports=20000 nf-conntrack-irc.ports=20000 nf-conntrack-sane.ports=20000 binder.debug_mask=0 rcupdate.rcu_expedited=1 rcupdate.rcu_cpu_stall_cputime=1 no_hash_pointers page_owner=on sysctl.vm.nr_hugepages=4 sysctl.vm.nr_overcommit_hugepages=4 secretmem.enable=1 sysctl.max_rcu_stall_to_panic=1 msr.allow_writes=off coredump_filter=0xffff root=/dev/sda console=ttyS0 vsyscall=native numa=fake=2 kvm-intel.nested=1 spec_store_bypass_disable=prctl nopcid vivid.n_devs=64 vivid.multiplanar=1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2 netrom.nr_ndevs=32 rose.rose_ndevs=32 smp.csd_lock_timeout=100000 watchdog_thresh=55 workqueue.watchdog_thresh=140 sysctl.net.core.netdev_unregister_timeout_secs=140 dummy_hcd.num=32 max_loop=32 nbds_max=32 comedi.comedi_num_legacy_minors=4 panic_on_warn=1"
# CONFIG_CMDLINE_OVERRIDE is not set
CONFIG_MODIFY_LDT_SYSCALL=y
# CONFIG_STRICT_SIGALTSTACK_SIZE is not set
CONFIG_HAVE_LIVEPATCH=y
CONFIG_HAVE_KLP_BUILD=y
CONFIG_X86_BUS_LOCK_DETECT=y
# end of Processor type and features

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 is not set
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 is not set
CONFIG_ARCH_HAS_ADD_PAGES=y

#
# Power management and ACPI options
#
CONFIG_ARCH_HIBERNATION_HEADER=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
# CONFIG_SUSPEND_SKIP_SYNC is not set
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 is not set
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_DPM_WATCHDOG is not set
CONFIG_PM_TRACE=y
CONFIG_PM_TRACE_RTC=y
CONFIG_PM_CLK=y
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
# CONFIG_ENERGY_MODEL is not set
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_THERMAL_LIB=y
# CONFIG_ACPI_DEBUGGER is not set
CONFIG_ACPI_SPCR_TABLE=y
# CONFIG_ACPI_FPDT is not set
CONFIG_ACPI_LPIT=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_EC=y
# CONFIG_ACPI_EC_DEBUGFS is not set
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_VIDEO=y
CONFIG_ACPI_FAN=y
# CONFIG_ACPI_TAD is not set
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_HOTPLUG_CPU=y
# CONFIG_ACPI_PROCESSOR_AGGREGATOR is not set
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 is not set
CONFIG_ACPI_CONTAINER=y
# CONFIG_ACPI_HOTPLUG_MEMORY is not set
CONFIG_ACPI_HOTPLUG_IOAPIC=y
# CONFIG_ACPI_SBS is not set
# CONFIG_ACPI_HED is not set
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
CONFIG_ACPI_NHLT=y
CONFIG_ACPI_NFIT=y
# CONFIG_NFIT_SECURITY_DEBUG is not set
CONFIG_ACPI_NUMA=y
# CONFIG_ACPI_HMAT is not set
CONFIG_HAVE_ACPI_APEI=y
CONFIG_HAVE_ACPI_APEI_NMI=y
# CONFIG_ACPI_APEI is not set
# CONFIG_ACPI_DPTF is not set
# CONFIG_ACPI_EXTLOG is not set
# CONFIG_ACPI_CONFIGFS is not set
# CONFIG_ACPI_PFRUT is not set
CONFIG_ACPI_PCC=y
# CONFIG_ACPI_FFH is not set
CONFIG_ACPI_MRRM=y
CONFIG_PMIC_OPREGION=y
CONFIG_BXT_WC_PMIC_OPREGION=y
# CONFIG_CHT_WC_PMIC_OPREGION is not set
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 is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y

#
# CPU frequency scaling drivers
#
# CONFIG_CPUFREQ_DT is not set
# CONFIG_CPUFREQ_DT_PLATDEV is not set
CONFIG_X86_INTEL_PSTATE=y
# CONFIG_X86_PCC_CPUFREQ is not set
CONFIG_X86_AMD_PSTATE=y
CONFIG_X86_AMD_PSTATE_DEFAULT_MODE=3
# CONFIG_X86_AMD_PSTATE_DYNAMIC_EPP is not set
# CONFIG_X86_AMD_PSTATE_UT is not set
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_X86_ACPI_CPUFREQ_CPB=y
# CONFIG_X86_POWERNOW_K8 is not set
# CONFIG_X86_AMD_FREQ_SENSITIVITY is not set
# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
# CONFIG_X86_P4_CLOCKMOD is not set

#
# shared options
#
CONFIG_CPUFREQ_ARCH_CUR_FREQ=y
# end of CPU Frequency scaling

#
# CPU Idle
#
CONFIG_CPU_IDLE=y
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE_GOV_MENU=y
# CONFIG_CPU_IDLE_GOV_TEO is not set
CONFIG_CPU_IDLE_GOV_HALTPOLL=y
CONFIG_HALTPOLL_CPUIDLE=y
# 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_MMCONF_FAM10H=y
CONFIG_ISA_BUS=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=y
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_VIRTUALIZATION=y
CONFIG_KVM_X86=y
CONFIG_KVM=y
CONFIG_KVM_SW_PROTECTED_VM=y
CONFIG_KVM_INTEL=y
# CONFIG_KVM_INTEL_PROVE_VE is not set
CONFIG_X86_SGX_KVM=y
CONFIG_KVM_AMD=y
CONFIG_KVM_IOAPIC=y
# CONFIG_KVM_SMM is not set
CONFIG_KVM_HYPERV=y
CONFIG_KVM_XEN=y
CONFIG_KVM_PROVE_MMU=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_PSE=y
CONFIG_X86_REQUIRED_FEATURE_PGE=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_X86_DISABLED_FEATURE_XENPV=y
CONFIG_X86_DISABLED_FEATURE_TDX_GUEST=y
CONFIG_X86_DISABLED_FEATURE_SEV_SNP=y
CONFIG_AS_WRUSS=y
CONFIG_ARCH_CONFIGURES_CPU_MITIGATIONS=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 is not set
CONFIG_JUMP_LABEL=y
# CONFIG_STATIC_KEYS_SELFTEST is not set
# CONFIG_STATIC_CALL_SELFTEST is not set
CONFIG_UPROBES=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_ARCH_USE_BUILTIN_BSWAP=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_ARCH_SUPPORTS_LTO_CLANG=y
CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
CONFIG_HAS_LTO_CLANG=y
CONFIG_LTO_NONE=y
# CONFIG_LTO_CLANG_FULL is not set
# CONFIG_LTO_CLANG_THIN is not set
CONFIG_ARCH_SUPPORTS_AUTOFDO_CLANG=y
CONFIG_AUTOFDO_CLANG=y
CONFIG_ARCH_SUPPORTS_PROPELLER_CLANG=y
CONFIG_PROPELLER_CLANG=y
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_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 is not set
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_HAVE_ARCH_PREL32_RELOCATIONS=y
# CONFIG_LOCK_EVENT_COUNTS is not set
CONFIG_ARCH_HAS_MEM_ENCRYPT=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_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
# end of General architecture-dependent options

CONFIG_RT_MUTEXES=y
CONFIG_MODULE_SIG_FORMAT=y
CONFIG_MODULES=y
# CONFIG_MODULE_DEBUG is not set
# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set
CONFIG_MODVERSIONS=y
# CONFIG_GENKSYMS is not set
CONFIG_GENDWARFKSYMS=y
CONFIG_ASM_MODVERSIONS=y
# CONFIG_EXTENDED_MODVERSIONS is not set
# CONFIG_BASIC_MODVERSIONS is not set
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_MODULE_SIG=y
# CONFIG_MODULE_SIG_FORCE is not set
# CONFIG_MODULE_SIG_ALL is not set
CONFIG_MODULE_SIG_SHA256=y
# CONFIG_MODULE_SIG_SHA384 is not set
# CONFIG_MODULE_SIG_SHA512 is not set
# 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="sha256"
# CONFIG_MODULE_COMPRESS is not set
# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set
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 is not set
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 is not set
CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOPRIO=y
CONFIG_BLK_DEBUG_FS=y
# CONFIG_BLK_SED_OPAL is not set
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
CONFIG_ACORN_PARTITION=y
CONFIG_ACORN_PARTITION_CUMANA=y
CONFIG_ACORN_PARTITION_EESOX=y
CONFIG_ACORN_PARTITION_ICS=y
CONFIG_ACORN_PARTITION_ADFS=y
CONFIG_ACORN_PARTITION_POWERTEC=y
CONFIG_ACORN_PARTITION_RISCIX=y
CONFIG_AIX_PARTITION=y
CONFIG_OSF_PARTITION=y
CONFIG_AMIGA_PARTITION=y
CONFIG_ATARI_PARTITION=y
CONFIG_MAC_PARTITION=y
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
CONFIG_MINIX_SUBPARTITION=y
CONFIG_SOLARIS_X86_PARTITION=y
CONFIG_UNIXWARE_DISKLABEL=y
CONFIG_LDM_PARTITION=y
# CONFIG_LDM_DEBUG is not set
CONFIG_SGI_PARTITION=y
CONFIG_ULTRIX_PARTITION=y
CONFIG_SUN_PARTITION=y
CONFIG_KARMA_PARTITION=y
CONFIG_EFI_PARTITION=y
CONFIG_SYSV68_PARTITION=y
CONFIG_CMDLINE_PARTITION=y
# CONFIG_OF_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=y
# 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=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT="842"
CONFIG_ZSMALLOC=y

#
# Zsmalloc allocator options
#

#
# Zsmalloc is a common backend allocator for zswap & zram
#
# CONFIG_ZSMALLOC_STAT is not set
CONFIG_ZSMALLOC_CHAIN_SIZE=8
# end of Zsmalloc allocator options

#
# Slab allocator options
#
CONFIG_SLUB=y
CONFIG_KVFREE_RCU_BATCHED=y
# CONFIG_SLUB_TINY is not set
CONFIG_SLAB_MERGE_DEFAULT=y
# CONFIG_SLAB_FREELIST_RANDOM is not set
# CONFIG_SLAB_FREELIST_HARDENED is not set
# CONFIG_SLAB_BUCKETS is not set
# CONFIG_SLUB_STATS is not set
# CONFIG_RANDOM_KMALLOC_CACHES is not set
# end of Slab allocator options

# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set
# 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_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=4096
CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
# CONFIG_MEMORY_FAILURE is not set
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
CONFIG_ARCH_WANTS_THP_SWAP=y
# CONFIG_PERSISTENT_HUGE_ZERO_FOLIO is not set
CONFIG_MM_ID=y
CONFIG_TRANSPARENT_HUGEPAGE=y
# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
# 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 is not set
# CONFIG_CMA_SYSFS is not set
CONFIG_CMA_AREAS=20
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 is not set
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y
CONFIG_ARCH_HAS_ZONE_DMA_SET=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=y
# CONFIG_GUP_TEST is not set
# CONFIG_DMAPOOL_TEST is not set
CONFIG_ARCH_HAS_PTE_SPECIAL=y
CONFIG_MAPPING_DIRTY_HELPERS=y
CONFIG_KMAP_LOCAL=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 is not set
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=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
CONFIG_PT_RECLAIM=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 is not set
CONFIG_DAMON_RECLAIM=y
# CONFIG_DAMON_LRU_SORT is not set
# CONFIG_DAMON_STAT is not set
# end of Data Access Monitoring
# end of Memory Management options

CONFIG_NET=y
CONFIG_WANT_COMPAT_NETLINK_MESSAGES=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=y
CONFIG_INET_PSP=y
CONFIG_UNIX=y
CONFIG_AF_UNIX_OOB=y
CONFIG_UNIX_DIAG=y
CONFIG_TLS=y
CONFIG_TLS_DEVICE=y
CONFIG_TLS_TOE=y
CONFIG_XFRM=y
CONFIG_XFRM_OFFLOAD=y
CONFIG_XFRM_ALGO=y
CONFIG_XFRM_USER=y
CONFIG_XFRM_USER_COMPAT=y
CONFIG_XFRM_INTERFACE=y
CONFIG_XFRM_SUB_POLICY=y
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_AH=y
CONFIG_XFRM_ESP=y
CONFIG_XFRM_IPCOMP=y
CONFIG_NET_KEY=y
CONFIG_NET_KEY_MIGRATE=y
# CONFIG_XFRM_IPTFS is not set
CONFIG_XFRM_ESPINTCP=y
CONFIG_SMC=y
CONFIG_SMC_DIAG=y
# CONFIG_SMC_HS_CTRL_BPF is not set
CONFIG_DIBS=y
CONFIG_DIBS_LO=y
CONFIG_XDP_SOCKETS=y
CONFIG_XDP_SOCKETS_DIAG=y
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=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
CONFIG_NET_IPIP=y
CONFIG_NET_IPGRE_DEMUX=y
CONFIG_NET_IP_TUNNEL=y
CONFIG_NET_IPGRE=y
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=y
CONFIG_NET_UDP_TUNNEL=y
CONFIG_NET_FOU=y
CONFIG_NET_FOU_IP_TUNNELS=y
CONFIG_INET_AH=y
CONFIG_INET_ESP=y
CONFIG_INET_ESP_OFFLOAD=y
CONFIG_INET_ESPINTCP=y
CONFIG_INET_IPCOMP=y
CONFIG_INET_TABLE_PERTURB_ORDER=16
CONFIG_INET_XFRM_TUNNEL=y
CONFIG_INET_TUNNEL=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
CONFIG_INET_UDP_DIAG=y
CONFIG_INET_RAW_DIAG=y
CONFIG_INET_DIAG_DESTROY=y
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=y
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=y
CONFIG_TCP_CONG_HTCP=y
CONFIG_TCP_CONG_HSTCP=y
CONFIG_TCP_CONG_HYBLA=y
CONFIG_TCP_CONG_VEGAS=y
CONFIG_TCP_CONG_NV=y
CONFIG_TCP_CONG_SCALABLE=y
CONFIG_TCP_CONG_LP=y
CONFIG_TCP_CONG_VENO=y
CONFIG_TCP_CONG_YEAH=y
CONFIG_TCP_CONG_ILLINOIS=y
CONFIG_TCP_CONG_DCTCP=y
CONFIG_TCP_CONG_CDG=y
CONFIG_TCP_CONG_BBR=y
# CONFIG_DEFAULT_BIC is not set
CONFIG_DEFAULT_CUBIC=y
# CONFIG_DEFAULT_HTCP is not set
# CONFIG_DEFAULT_HYBLA is not set
# CONFIG_DEFAULT_VEGAS is not set
# CONFIG_DEFAULT_VENO is not set
# CONFIG_DEFAULT_WESTWOOD is not set
# CONFIG_DEFAULT_DCTCP is not set
# CONFIG_DEFAULT_CDG is not set
# CONFIG_DEFAULT_BBR is not set
# CONFIG_DEFAULT_RENO is not set
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_AO is not set
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=y
CONFIG_INET6_ESP=y
CONFIG_INET6_ESP_OFFLOAD=y
CONFIG_INET6_ESPINTCP=y
CONFIG_INET6_IPCOMP=y
CONFIG_IPV6_MIP6=y
CONFIG_IPV6_ILA=y
CONFIG_INET6_XFRM_TUNNEL=y
CONFIG_INET6_TUNNEL=y
CONFIG_IPV6_VTI=y
CONFIG_IPV6_SIT=y
CONFIG_IPV6_SIT_6RD=y
CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=y
CONFIG_IPV6_GRE=y
CONFIG_IPV6_FOU=y
CONFIG_IPV6_FOU_TUNNEL=y
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 is not set
CONFIG_NETLABEL=y
CONFIG_MPTCP=y
CONFIG_INET_MPTCP_DIAG=y
CONFIG_MPTCP_IPV6=y
CONFIG_NETWORK_SECMARK=y
CONFIG_NET_PTP_CLASSIFY=y
# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=y

#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_EGRESS=y
CONFIG_NETFILTER_SKIP_EGRESS=y
CONFIG_NETFILTER_NETLINK=y
CONFIG_NETFILTER_FAMILY_BRIDGE=y
CONFIG_NETFILTER_FAMILY_ARP=y
CONFIG_NETFILTER_BPF_LINK=y
# CONFIG_NETFILTER_NETLINK_HOOK is not set
CONFIG_NETFILTER_NETLINK_ACCT=y
CONFIG_NETFILTER_NETLINK_QUEUE=y
CONFIG_NETFILTER_NETLINK_LOG=y
CONFIG_NETFILTER_NETLINK_OSF=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_LOG_SYSLOG=y
CONFIG_NETFILTER_CONNCOUNT=y
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
# CONFIG_NF_CONNTRACK_PROCFS is not set
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=y
CONFIG_NF_CONNTRACK_FTP=y
CONFIG_NF_CONNTRACK_H323=y
CONFIG_NF_CONNTRACK_IRC=y
CONFIG_NF_CONNTRACK_BROADCAST=y
CONFIG_NF_CONNTRACK_NETBIOS_NS=y
CONFIG_NF_CONNTRACK_SNMP=y
CONFIG_NF_CONNTRACK_PPTP=y
CONFIG_NF_CONNTRACK_SANE=y
CONFIG_NF_CONNTRACK_SIP=y
CONFIG_NF_CONNTRACK_TFTP=y
CONFIG_NF_CT_NETLINK=y
CONFIG_NF_CT_NETLINK_TIMEOUT=y
CONFIG_NF_CT_NETLINK_HELPER=y
CONFIG_NETFILTER_NETLINK_GLUE_CT=y
CONFIG_NF_NAT=y
CONFIG_NF_NAT_AMANDA=y
CONFIG_NF_NAT_FTP=y
CONFIG_NF_NAT_IRC=y
CONFIG_NF_NAT_SIP=y
CONFIG_NF_NAT_TFTP=y
CONFIG_NF_NAT_REDIRECT=y
CONFIG_NF_NAT_MASQUERADE=y
CONFIG_NF_NAT_OVS=y
CONFIG_NETFILTER_SYNPROXY=y
CONFIG_NF_TABLES=y
CONFIG_NF_TABLES_INET=y
CONFIG_NF_TABLES_NETDEV=y
CONFIG_NFT_NUMGEN=y
CONFIG_NFT_CT=y
CONFIG_NFT_EXTHDR_DCCP=y
CONFIG_NFT_FLOW_OFFLOAD=y
CONFIG_NFT_CONNLIMIT=y
CONFIG_NFT_LOG=y
CONFIG_NFT_LIMIT=y
CONFIG_NFT_MASQ=y
CONFIG_NFT_REDIR=y
CONFIG_NFT_NAT=y
CONFIG_NFT_TUNNEL=y
CONFIG_NFT_QUEUE=y
CONFIG_NFT_QUOTA=y
CONFIG_NFT_REJECT=y
CONFIG_NFT_REJECT_INET=y
CONFIG_NFT_COMPAT=y
CONFIG_NFT_HASH=y
CONFIG_NFT_FIB=y
CONFIG_NFT_FIB_INET=y
CONFIG_NFT_XFRM=y
CONFIG_NFT_SOCKET=y
CONFIG_NFT_OSF=y
CONFIG_NFT_TPROXY=y
CONFIG_NFT_SYNPROXY=y
CONFIG_NF_DUP_NETDEV=y
CONFIG_NFT_DUP_NETDEV=y
CONFIG_NFT_FWD_NETDEV=y
CONFIG_NFT_FIB_NETDEV=y
CONFIG_NFT_REJECT_NETDEV=y
CONFIG_NF_FLOW_TABLE_INET=y
CONFIG_NF_FLOW_TABLE=y
# CONFIG_NF_FLOW_TABLE_PROCFS is not set
CONFIG_NETFILTER_XTABLES=y
CONFIG_NETFILTER_XTABLES_COMPAT=y
CONFIG_NETFILTER_XTABLES_LEGACY=y

#
# Xtables combined modules
#
CONFIG_NETFILTER_XT_MARK=y
CONFIG_NETFILTER_XT_CONNMARK=y
CONFIG_NETFILTER_XT_SET=y

#
# Xtables targets
#
CONFIG_NETFILTER_XT_TARGET_AUDIT=y
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=y
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
CONFIG_NETFILTER_XT_TARGET_CT=y
CONFIG_NETFILTER_XT_TARGET_DSCP=y
CONFIG_NETFILTER_XT_TARGET_HL=y
CONFIG_NETFILTER_XT_TARGET_HMARK=y
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
CONFIG_NETFILTER_XT_TARGET_LED=y
CONFIG_NETFILTER_XT_TARGET_LOG=y
CONFIG_NETFILTER_XT_TARGET_MARK=y
CONFIG_NETFILTER_XT_NAT=y
CONFIG_NETFILTER_XT_TARGET_NETMAP=y
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
CONFIG_NETFILTER_XT_TARGET_NOTRACK=y
CONFIG_NETFILTER_XT_TARGET_RATEEST=y
CONFIG_NETFILTER_XT_TARGET_REDIRECT=y
CONFIG_NETFILTER_XT_TARGET_MASQUERADE=y
CONFIG_NETFILTER_XT_TARGET_TEE=y
CONFIG_NETFILTER_XT_TARGET_TPROXY=y
CONFIG_NETFILTER_XT_TARGET_TRACE=y
CONFIG_NETFILTER_XT_TARGET_SECMARK=y
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=y

#
# Xtables matches
#
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_MATCH_BPF=y
CONFIG_NETFILTER_XT_MATCH_CGROUP=y
CONFIG_NETFILTER_XT_MATCH_CLUSTER=y
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=y
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_CPU=y
CONFIG_NETFILTER_XT_MATCH_DCCP=y
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=y
CONFIG_NETFILTER_XT_MATCH_DSCP=y
CONFIG_NETFILTER_XT_MATCH_ECN=y
CONFIG_NETFILTER_XT_MATCH_ESP=y
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
CONFIG_NETFILTER_XT_MATCH_HELPER=y
CONFIG_NETFILTER_XT_MATCH_HL=y
CONFIG_NETFILTER_XT_MATCH_IPCOMP=y
CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
CONFIG_NETFILTER_XT_MATCH_IPVS=y
CONFIG_NETFILTER_XT_MATCH_L2TP=y
CONFIG_NETFILTER_XT_MATCH_LENGTH=y
CONFIG_NETFILTER_XT_MATCH_LIMIT=y
CONFIG_NETFILTER_XT_MATCH_MAC=y
CONFIG_NETFILTER_XT_MATCH_MARK=y
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
CONFIG_NETFILTER_XT_MATCH_NFACCT=y
CONFIG_NETFILTER_XT_MATCH_OSF=y
CONFIG_NETFILTER_XT_MATCH_OWNER=y
CONFIG_NETFILTER_XT_MATCH_POLICY=y
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=y
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
CONFIG_NETFILTER_XT_MATCH_QUOTA=y
CONFIG_NETFILTER_XT_MATCH_RATEEST=y
CONFIG_NETFILTER_XT_MATCH_REALM=y
CONFIG_NETFILTER_XT_MATCH_RECENT=y
CONFIG_NETFILTER_XT_MATCH_SCTP=y
CONFIG_NETFILTER_XT_MATCH_SOCKET=y
CONFIG_NETFILTER_XT_MATCH_STATE=y
CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
CONFIG_NETFILTER_XT_MATCH_STRING=y
CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
CONFIG_NETFILTER_XT_MATCH_TIME=y
CONFIG_NETFILTER_XT_MATCH_U32=y
# end of Core Netfilter Configuration

CONFIG_IP_SET=y
CONFIG_IP_SET_MAX=256
CONFIG_IP_SET_BITMAP_IP=y
CONFIG_IP_SET_BITMAP_IPMAC=y
CONFIG_IP_SET_BITMAP_PORT=y
CONFIG_IP_SET_HASH_IP=y
CONFIG_IP_SET_HASH_IPMARK=y
CONFIG_IP_SET_HASH_IPPORT=y
CONFIG_IP_SET_HASH_IPPORTIP=y
CONFIG_IP_SET_HASH_IPPORTNET=y
CONFIG_IP_SET_HASH_IPMAC=y
CONFIG_IP_SET_HASH_MAC=y
CONFIG_IP_SET_HASH_NETPORTNET=y
CONFIG_IP_SET_HASH_NET=y
CONFIG_IP_SET_HASH_NETNET=y
CONFIG_IP_SET_HASH_NETPORT=y
CONFIG_IP_SET_HASH_NETIFACE=y
CONFIG_IP_SET_LIST_SET=y
CONFIG_IP_VS=y
CONFIG_IP_VS_IPV6=y
# CONFIG_IP_VS_DEBUG is not set
CONFIG_IP_VS_TAB_BITS=12

#
# 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=y
CONFIG_IP_VS_WRR=y
CONFIG_IP_VS_LC=y
CONFIG_IP_VS_WLC=y
CONFIG_IP_VS_FO=y
CONFIG_IP_VS_OVF=y
CONFIG_IP_VS_LBLC=y
CONFIG_IP_VS_LBLCR=y
CONFIG_IP_VS_DH=y
CONFIG_IP_VS_SH=y
CONFIG_IP_VS_MH=y
CONFIG_IP_VS_SED=y
CONFIG_IP_VS_NQ=y
CONFIG_IP_VS_TWOS=y

#
# 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=y
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PE_SIP=y

#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=y
CONFIG_IP_NF_IPTABLES_LEGACY=y
CONFIG_NF_SOCKET_IPV4=y
CONFIG_NF_TPROXY_IPV4=y
CONFIG_NF_TABLES_IPV4=y
CONFIG_NFT_REJECT_IPV4=y
CONFIG_NFT_DUP_IPV4=y
CONFIG_NFT_FIB_IPV4=y
CONFIG_NF_TABLES_ARP=y
CONFIG_NF_DUP_IPV4=y
CONFIG_NF_LOG_ARP=y
CONFIG_NF_LOG_IPV4=y
CONFIG_NF_REJECT_IPV4=y
CONFIG_NF_NAT_SNMP_BASIC=y
CONFIG_NF_NAT_PPTP=y
CONFIG_NF_NAT_H323=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_MATCH_AH=y
CONFIG_IP_NF_MATCH_ECN=y
CONFIG_IP_NF_MATCH_RPFILTER=y
CONFIG_IP_NF_MATCH_TTL=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=y
CONFIG_IP_NF_TARGET_SYNPROXY=y
CONFIG_IP_NF_NAT=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_IP_NF_TARGET_NETMAP=y
CONFIG_IP_NF_TARGET_REDIRECT=y
CONFIG_IP_NF_MANGLE=y
CONFIG_IP_NF_TARGET_ECN=y
CONFIG_IP_NF_TARGET_TTL=y
CONFIG_IP_NF_RAW=y
CONFIG_IP_NF_SECURITY=y
CONFIG_IP_NF_ARPTABLES=y
CONFIG_NFT_COMPAT_ARP=y
CONFIG_IP_NF_ARPFILTER=y
CONFIG_IP_NF_ARP_MANGLE=y
# end of IP: Netfilter Configuration

#
# IPv6: Netfilter Configuration
#
CONFIG_IP6_NF_IPTABLES_LEGACY=y
CONFIG_NF_SOCKET_IPV6=y
CONFIG_NF_TPROXY_IPV6=y
CONFIG_NF_TABLES_IPV6=y
CONFIG_NFT_REJECT_IPV6=y
CONFIG_NFT_DUP_IPV6=y
CONFIG_NFT_FIB_IPV6=y
CONFIG_NF_DUP_IPV6=y
CONFIG_NF_REJECT_IPV6=y
CONFIG_NF_LOG_IPV6=y
CONFIG_IP6_NF_IPTABLES=y
CONFIG_IP6_NF_MATCH_AH=y
CONFIG_IP6_NF_MATCH_EUI64=y
CONFIG_IP6_NF_MATCH_FRAG=y
CONFIG_IP6_NF_MATCH_OPTS=y
CONFIG_IP6_NF_MATCH_HL=y
CONFIG_IP6_NF_MATCH_IPV6HEADER=y
CONFIG_IP6_NF_MATCH_MH=y
CONFIG_IP6_NF_MATCH_RPFILTER=y
CONFIG_IP6_NF_MATCH_RT=y
CONFIG_IP6_NF_MATCH_SRH=y
CONFIG_IP6_NF_TARGET_HL=y
CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_IP6_NF_TARGET_SYNPROXY=y
CONFIG_IP6_NF_MANGLE=y
CONFIG_IP6_NF_RAW=y
CONFIG_IP6_NF_SECURITY=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
CONFIG_IP6_NF_TARGET_NPT=y
# end of IPv6: Netfilter Configuration

CONFIG_NF_DEFRAG_IPV6=y
CONFIG_NF_TABLES_BRIDGE=y
CONFIG_NFT_BRIDGE_META=y
CONFIG_NFT_BRIDGE_REJECT=y
CONFIG_NF_CONNTRACK_BRIDGE=y
CONFIG_BRIDGE_NF_EBTABLES_LEGACY=y
CONFIG_BRIDGE_NF_EBTABLES=y
CONFIG_BRIDGE_EBT_BROUTE=y
CONFIG_BRIDGE_EBT_T_FILTER=y
CONFIG_BRIDGE_EBT_T_NAT=y
CONFIG_BRIDGE_EBT_802_3=y
CONFIG_BRIDGE_EBT_AMONG=y
CONFIG_BRIDGE_EBT_ARP=y
CONFIG_BRIDGE_EBT_IP=y
CONFIG_BRIDGE_EBT_IP6=y
CONFIG_BRIDGE_EBT_LIMIT=y
CONFIG_BRIDGE_EBT_MARK=y
CONFIG_BRIDGE_EBT_PKTTYPE=y
CONFIG_BRIDGE_EBT_STP=y
CONFIG_BRIDGE_EBT_VLAN=y
CONFIG_BRIDGE_EBT_ARPREPLY=y
CONFIG_BRIDGE_EBT_DNAT=y
CONFIG_BRIDGE_EBT_MARK_T=y
CONFIG_BRIDGE_EBT_REDIRECT=y
CONFIG_BRIDGE_EBT_SNAT=y
CONFIG_BRIDGE_EBT_LOG=y
CONFIG_BRIDGE_EBT_NFLOG=y
CONFIG_IP_SCTP=y
# 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=y
CONFIG_RDS=y
CONFIG_RDS_RDMA=y
CONFIG_RDS_TCP=y
# CONFIG_RDS_DEBUG is not set
CONFIG_TIPC=y
CONFIG_TIPC_MEDIA_IB=y
CONFIG_TIPC_MEDIA_UDP=y
CONFIG_TIPC_CRYPTO=y
CONFIG_TIPC_DIAG=y
CONFIG_ATM=y
CONFIG_ATM_CLIP=y
# CONFIG_ATM_CLIP_NO_ICMP is not set
CONFIG_ATM_LANE=y
CONFIG_ATM_MPOA=y
CONFIG_ATM_BR2684=y
# CONFIG_ATM_BR2684_IPFILTER is not set
CONFIG_L2TP=y
# CONFIG_L2TP_DEBUGFS is not set
CONFIG_L2TP_V3=y
CONFIG_L2TP_IP=y
CONFIG_L2TP_ETH=y
CONFIG_STP=y
CONFIG_GARP=y
CONFIG_MRP=y
CONFIG_BRIDGE=y
CONFIG_BRIDGE_IGMP_SNOOPING=y
CONFIG_BRIDGE_VLAN_FILTERING=y
CONFIG_BRIDGE_MRP=y
CONFIG_BRIDGE_CFM=y
CONFIG_NET_DSA=y
# CONFIG_NET_DSA_TAG_NONE is not set
# CONFIG_NET_DSA_TAG_AR9331 is not set
CONFIG_NET_DSA_TAG_BRCM_COMMON=y
CONFIG_NET_DSA_TAG_BRCM=y
# CONFIG_NET_DSA_TAG_BRCM_LEGACY is not set
# CONFIG_NET_DSA_TAG_BRCM_LEGACY_FCS is not set
CONFIG_NET_DSA_TAG_BRCM_PREPEND=y
# CONFIG_NET_DSA_TAG_HELLCREEK is not set
# CONFIG_NET_DSA_TAG_GSWIP is not set
# CONFIG_NET_DSA_TAG_DSA is not set
# CONFIG_NET_DSA_TAG_EDSA is not set
CONFIG_NET_DSA_TAG_MTK=y
# CONFIG_NET_DSA_TAG_MXL_862XX is not set
# CONFIG_NET_DSA_TAG_MXL_GSW1XX is not set
# CONFIG_NET_DSA_TAG_KSZ is not set
# CONFIG_NET_DSA_TAG_OCELOT is not set
# CONFIG_NET_DSA_TAG_OCELOT_8021Q is not set
CONFIG_NET_DSA_TAG_QCA=y
CONFIG_NET_DSA_TAG_RTL4_A=y
# CONFIG_NET_DSA_TAG_RTL8_4 is not set
# CONFIG_NET_DSA_TAG_RZN1_A5PSW is not set
# CONFIG_NET_DSA_TAG_LAN9303 is not set
# CONFIG_NET_DSA_TAG_SJA1105 is not set
# CONFIG_NET_DSA_TAG_TRAILER is not set
# CONFIG_NET_DSA_TAG_VSC73XX_8021Q is not set
# CONFIG_NET_DSA_TAG_XRS700X is not set
# CONFIG_NET_DSA_TAG_YT921X is not set
CONFIG_VLAN_8021Q=y
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y
CONFIG_LLC=y
CONFIG_LLC2=y
# CONFIG_ATALK is not set
CONFIG_X25=y
CONFIG_LAPB=y
CONFIG_PHONET=y
CONFIG_6LOWPAN=y
# CONFIG_6LOWPAN_DEBUGFS is not set
CONFIG_6LOWPAN_NHC=y
CONFIG_6LOWPAN_NHC_DEST=y
CONFIG_6LOWPAN_NHC_FRAGMENT=y
CONFIG_6LOWPAN_NHC_HOP=y
CONFIG_6LOWPAN_NHC_IPV6=y
CONFIG_6LOWPAN_NHC_MOBILITY=y
CONFIG_6LOWPAN_NHC_ROUTING=y
CONFIG_6LOWPAN_NHC_UDP=y
CONFIG_6LOWPAN_GHC_EXT_HDR_HOP=y
CONFIG_6LOWPAN_GHC_UDP=y
CONFIG_6LOWPAN_GHC_ICMPV6=y
CONFIG_6LOWPAN_GHC_EXT_HDR_DEST=y
CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG=y
CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE=y
CONFIG_IEEE802154=y
CONFIG_IEEE802154_NL802154_EXPERIMENTAL=y
CONFIG_IEEE802154_SOCKET=y
CONFIG_IEEE802154_6LOWPAN=y
CONFIG_MAC802154=y
CONFIG_NET_SCHED=y

#
# Queueing/Scheduling
#
CONFIG_NET_SCH_HTB=y
CONFIG_NET_SCH_HFSC=y
CONFIG_NET_SCH_PRIO=y
CONFIG_NET_SCH_MULTIQ=y
CONFIG_NET_SCH_RED=y
CONFIG_NET_SCH_SFB=y
CONFIG_NET_SCH_SFQ=y
CONFIG_NET_SCH_TEQL=y
CONFIG_NET_SCH_TBF=y
CONFIG_NET_SCH_CBS=y
CONFIG_NET_SCH_ETF=y
CONFIG_NET_SCH_MQPRIO_LIB=y
CONFIG_NET_SCH_TAPRIO=y
CONFIG_NET_SCH_GRED=y
CONFIG_NET_SCH_NETEM=y
CONFIG_NET_SCH_DRR=y
CONFIG_NET_SCH_MQPRIO=y
CONFIG_NET_SCH_SKBPRIO=y
CONFIG_NET_SCH_CHOKE=y
CONFIG_NET_SCH_QFQ=y
CONFIG_NET_SCH_CODEL=y
CONFIG_NET_SCH_FQ_CODEL=y
CONFIG_NET_SCH_CAKE=y
CONFIG_NET_SCH_FQ=y
CONFIG_NET_SCH_HHF=y
CONFIG_NET_SCH_PIE=y
CONFIG_NET_SCH_FQ_PIE=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_SCH_PLUG=y
CONFIG_NET_SCH_ETS=y
# CONFIG_NET_SCH_DUALPI2 is not set
CONFIG_NET_SCH_DEFAULT=y
# CONFIG_DEFAULT_FQ is not set
CONFIG_DEFAULT_CODEL=y
# CONFIG_DEFAULT_FQ_CODEL is not set
# CONFIG_DEFAULT_FQ_PIE is not set
# CONFIG_DEFAULT_SFQ is not set
# CONFIG_DEFAULT_PFIFO_FAST is not set
CONFIG_DEFAULT_NET_SCH="pfifo_fast"

#
# Classification
#
CONFIG_NET_CLS=y
CONFIG_NET_CLS_BASIC=y
CONFIG_NET_CLS_ROUTE4=y
CONFIG_NET_CLS_FW=y
CONFIG_NET_CLS_U32=y
CONFIG_CLS_U32_PERF=y
CONFIG_CLS_U32_MARK=y
CONFIG_NET_CLS_FLOW=y
CONFIG_NET_CLS_CGROUP=y
CONFIG_NET_CLS_BPF=y
CONFIG_NET_CLS_FLOWER=y
CONFIG_NET_CLS_MATCHALL=y
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
CONFIG_NET_EMATCH_CMP=y
CONFIG_NET_EMATCH_NBYTE=y
CONFIG_NET_EMATCH_U32=y
CONFIG_NET_EMATCH_META=y
CONFIG_NET_EMATCH_TEXT=y
CONFIG_NET_EMATCH_CANID=y
CONFIG_NET_EMATCH_IPSET=y
CONFIG_NET_EMATCH_IPT=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=y
CONFIG_NET_ACT_GACT=y
CONFIG_GACT_PROB=y
CONFIG_NET_ACT_MIRRED=y
CONFIG_NET_ACT_SAMPLE=y
CONFIG_NET_ACT_NAT=y
CONFIG_NET_ACT_PEDIT=y
CONFIG_NET_ACT_SIMP=y
CONFIG_NET_ACT_SKBEDIT=y
CONFIG_NET_ACT_CSUM=y
CONFIG_NET_ACT_MPLS=y
CONFIG_NET_ACT_VLAN=y
CONFIG_NET_ACT_BPF=y
CONFIG_NET_ACT_CONNMARK=y
CONFIG_NET_ACT_CTINFO=y
CONFIG_NET_ACT_SKBMOD=y
CONFIG_NET_ACT_IFE=y
CONFIG_NET_ACT_TUNNEL_KEY=y
CONFIG_NET_ACT_CT=y
CONFIG_NET_ACT_GATE=y
CONFIG_NET_IFE_SKBMARK=y
CONFIG_NET_IFE_SKBPRIO=y
CONFIG_NET_IFE_SKBTCINDEX=y
CONFIG_NET_TC_SKB_EXT=y
CONFIG_NET_SCH_FIFO=y
CONFIG_DCB=y
CONFIG_DNS_RESOLVER=y
CONFIG_BATMAN_ADV=y
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=y
CONFIG_OPENVSWITCH_GRE=y
CONFIG_OPENVSWITCH_VXLAN=y
CONFIG_OPENVSWITCH_GENEVE=y
CONFIG_VSOCKETS=y
CONFIG_VSOCKETS_DIAG=y
CONFIG_VSOCKETS_LOOPBACK=y
# CONFIG_VMWARE_VMCI_VSOCKETS is not set
CONFIG_VIRTIO_VSOCKETS=y
CONFIG_VIRTIO_VSOCKETS_COMMON=y
CONFIG_NETLINK_DIAG=y
CONFIG_MPLS=y
CONFIG_NET_MPLS_GSO=y
CONFIG_MPLS_ROUTING=y
CONFIG_MPLS_IPTUNNEL=y
CONFIG_NET_NSH=y
CONFIG_HSR=y
CONFIG_NET_SWITCHDEV=y
CONFIG_NET_L3_MASTER_DEV=y
CONFIG_QRTR=y
CONFIG_QRTR_TUN=y
# CONFIG_QRTR_MHI is not set
CONFIG_NET_NCSI=y
# CONFIG_NCSI_OEM_CMD_GET_MAC is not set
# CONFIG_NCSI_OEM_CMD_KEEP_PHY is not set
# CONFIG_PCPU_DEV_REFCNT is not set
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 is not set
CONFIG_NET_DROP_MONITOR=y
# end of Network testing
# end of Networking options

CONFIG_HAMRADIO=y

#
# Packet Radio protocols
#
CONFIG_AX25=y
CONFIG_AX25_DAMA_SLAVE=y
CONFIG_NETROM=y
CONFIG_ROSE=y

#
# AX.25 network device drivers
#
CONFIG_MKISS=y
CONFIG_6PACK=y
CONFIG_BPQETHER=y
# CONFIG_BAYCOM_SER_FDX is not set
# CONFIG_BAYCOM_SER_HDX is not set
# CONFIG_BAYCOM_PAR is not set
# CONFIG_YAM is not set
# end of AX.25 network device drivers

CONFIG_CAN=y
CONFIG_CAN_RAW=y
CONFIG_CAN_BCM=y
CONFIG_CAN_GW=y
CONFIG_CAN_J1939=y
CONFIG_CAN_ISOTP=y
CONFIG_BT=y
CONFIG_BT_BREDR=y
CONFIG_BT_RFCOMM=y
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=y
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_HIDP=y
CONFIG_BT_LE=y
CONFIG_BT_LE_L2CAP_ECRED=y
CONFIG_BT_6LOWPAN=y
CONFIG_BT_LEDS=y
CONFIG_BT_MSFTEXT=y
# CONFIG_BT_AOSPEXT is not set
# CONFIG_BT_DEBUGFS is not set
# CONFIG_BT_SELFTEST is not set

#
# Bluetooth device drivers
#
CONFIG_BT_INTEL=y
CONFIG_BT_BCM=y
CONFIG_BT_RTL=y
CONFIG_BT_QCA=y
CONFIG_BT_MTK=y
CONFIG_BT_HCIBTUSB=y
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 is not set
CONFIG_BT_HCIUART=y
CONFIG_BT_HCIUART_SERDEV=y
CONFIG_BT_HCIUART_H4=y
# CONFIG_BT_HCIUART_NOKIA is not set
CONFIG_BT_HCIUART_BCSP=y
# CONFIG_BT_HCIUART_ATH3K is not set
CONFIG_BT_HCIUART_LL=y
CONFIG_BT_HCIUART_3WIRE=y
# CONFIG_BT_HCIUART_INTEL is not set
# CONFIG_BT_HCIUART_BCM is not set
# CONFIG_BT_HCIUART_RTL is not set
CONFIG_BT_HCIUART_QCA=y
CONFIG_BT_HCIUART_AG6XX=y
CONFIG_BT_HCIUART_MRVL=y
# CONFIG_BT_HCIUART_AML is not set
CONFIG_BT_HCIBCM203X=y
# CONFIG_BT_HCIBCM4377 is not set
CONFIG_BT_HCIBPA10X=y
CONFIG_BT_HCIBFUSB=y
# CONFIG_BT_HCIDTL1 is not set
# CONFIG_BT_HCIBT3C is not set
# CONFIG_BT_HCIBLUECARD is not set
CONFIG_BT_HCIVHCI=y
CONFIG_BT_MRVL=y
CONFIG_BT_MRVL_SDIO=y
CONFIG_BT_ATH3K=y
CONFIG_BT_MTKSDIO=y
CONFIG_BT_MTKUART=y
# CONFIG_BT_VIRTIO is not set
# CONFIG_BT_NXPUART is not set
# CONFIG_BT_INTEL_PCIE is not set
# end of Bluetooth device drivers

CONFIG_AF_RXRPC=y
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 is not set
CONFIG_RXKAD=y
# CONFIG_RXGK is not set
# CONFIG_RXPERF is not set
CONFIG_AF_KCM=y
CONFIG_STREAM_PARSER=y
CONFIG_MCTP=y
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_CFG80211=y
# CONFIG_NL80211_TESTMODE is not set
# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
# CONFIG_CFG80211_CERTIFICATION_ONUS 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=y
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=y
CONFIG_RFKILL_LEDS=y
CONFIG_RFKILL_INPUT=y
# CONFIG_RFKILL_GPIO is not set
CONFIG_NET_9P=y
CONFIG_NET_9P_FD=y
CONFIG_NET_9P_VIRTIO=y
# CONFIG_NET_9P_USBG is not set
CONFIG_NET_9P_RDMA=y
# CONFIG_NET_9P_DEBUG is not set
CONFIG_CAIF=y
CONFIG_CAIF_DEBUG=y
CONFIG_CAIF_NETDEV=y
CONFIG_CAIF_USB=y
CONFIG_CEPH_LIB=y
# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y
CONFIG_NFC=y
CONFIG_NFC_DIGITAL=y
CONFIG_NFC_NCI=y
# CONFIG_NFC_NCI_SPI is not set
CONFIG_NFC_NCI_UART=y
CONFIG_NFC_HCI=y
CONFIG_NFC_SHDLC=y

#
# Near Field Communication (NFC) devices
#
# CONFIG_NFC_TRF7970A is not set
# CONFIG_NFC_MEI_PHY is not set
CONFIG_NFC_SIM=y
CONFIG_NFC_PORT100=y
CONFIG_NFC_VIRTUAL_NCI=y
CONFIG_NFC_FDP=y
# CONFIG_NFC_FDP_I2C is not set
# CONFIG_NFC_PN544_I2C is not set
CONFIG_NFC_PN533=y
CONFIG_NFC_PN533_USB=y
# CONFIG_NFC_PN533_I2C is not set
# CONFIG_NFC_PN532_UART is not set
# CONFIG_NFC_MICROREAD_I2C is not set
CONFIG_NFC_MRVL=y
CONFIG_NFC_MRVL_USB=y
# CONFIG_NFC_MRVL_UART is not set
# CONFIG_NFC_MRVL_I2C is not set
# CONFIG_NFC_ST21NFCA_I2C is not set
# CONFIG_NFC_ST_NCI_I2C is not set
# CONFIG_NFC_ST_NCI_SPI is not set
# CONFIG_NFC_NXP_NCI is not set
# CONFIG_NFC_S3FWRN5_I2C is not set
# CONFIG_NFC_S3FWRN82_UART is not set
# CONFIG_NFC_ST95HF is not set
# end of Near Field Communication (NFC) devices

CONFIG_PSAMPLE=y
CONFIG_NET_IFE=y
CONFIG_LWTUNNEL=y
CONFIG_LWTUNNEL_BPF=y
CONFIG_DST_CACHE=y
CONFIG_GRO_CELLS=y
CONFIG_SOCK_VALIDATE_XMIT=y
CONFIG_NET_SELFTESTS=y
CONFIG_NET_SOCK_MSG=y
CONFIG_NET_DEVLINK=y
CONFIG_PAGE_POOL=y
# CONFIG_PAGE_POOL_STATS is not set
CONFIG_FAILOVER=y
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 is not set
# CONFIG_PCIE_ECRC is not set
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 is not set
# CONFIG_PCIE_PTM is not set
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 is not set
# CONFIG_PCI_PF_STUB is not set
CONFIG_PCI_ATS=y
# CONFIG_PCI_TSM is not set
# CONFIG_PCI_DOE is not set
CONFIG_PCI_ECAM=y
CONFIG_PCI_LOCKLESS_CONFIG=y
CONFIG_PCI_IOV=y
# CONFIG_PCI_NPEM is not set
CONFIG_PCI_PRI=y
CONFIG_PCI_PASID=y
# CONFIG_PCIE_TPH is not set
# CONFIG_PCI_P2PDMA is not set
CONFIG_PCI_LABEL=y
# CONFIG_PCI_DYNAMIC_OF_NODES is not set
# CONFIG_PCIE_BUS_TUNE_OFF is not set
CONFIG_PCIE_BUS_DEFAULT=y
# CONFIG_PCIE_BUS_SAFE is not set
# CONFIG_PCIE_BUS_PERFORMANCE is not set
# CONFIG_PCIE_BUS_PEER2PEER is not set
CONFIG_VGA_ARB=y
CONFIG_VGA_ARB_MAX_GPUS=16
CONFIG_HOTPLUG_PCI=y
# CONFIG_HOTPLUG_PCI_ACPI is not set
# CONFIG_HOTPLUG_PCI_CPCI is not set
# CONFIG_HOTPLUG_PCI_OCTEONEP is not set
# CONFIG_HOTPLUG_PCI_SHPC is not set

#
# PCI controller drivers
#
CONFIG_PCI_HOST_COMMON=y
# CONFIG_PCI_FTPCI100 is not set
CONFIG_PCI_HOST_GENERIC=y
# CONFIG_VMD is not set
# CONFIG_PCIE_XILINX is not set

#
# Cadence-based PCIe controllers
#
# CONFIG_PCIE_CADENCE_PLAT_HOST is not set
# CONFIG_PCIE_CADENCE_PLAT_EP is not set
# end of Cadence-based PCIe controllers

#
# DesignWare-based PCIe controllers
#
# CONFIG_PCI_MESON is not set
# CONFIG_PCIE_INTEL_GW is not set
# CONFIG_PCIE_DW_PLAT_HOST is not set
# CONFIG_PCIE_DW_PLAT_EP is not set
# end of DesignWare-based PCIe controllers

#
# Mobiveil-based PCIe controllers
#
# end of Mobiveil-based PCIe controllers

#
# PLDA-based PCIe controllers
#
# CONFIG_PCIE_MICROCHIP_HOST is not set
# end of PLDA-based PCIe controllers
# end of PCI controller drivers

#
# PCI Endpoint
#
CONFIG_PCI_ENDPOINT=y
# CONFIG_PCI_ENDPOINT_CONFIGFS is not set
# CONFIG_PCI_ENDPOINT_MSI_DOORBELL is not set
# CONFIG_PCI_EPF_TEST is not set
# CONFIG_PCI_EPF_NTB is not set
# end of PCI Endpoint

#
# PCI switch controller drivers
#
# CONFIG_PCI_SW_SWITCHTEC is not set
# end of PCI switch controller drivers

# CONFIG_PCI_PWRCTRL_GENERIC is not set
# CONFIG_PCI_PWRCTRL_TC9563 is not set
# CONFIG_CXL_BUS is not set
CONFIG_PCCARD=y
CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_CARDBUS=y

#
# PC-card bridges
#
CONFIG_YENTA=y
CONFIG_YENTA_O2=y
CONFIG_YENTA_RICOH=y
CONFIG_YENTA_TI=y
CONFIG_YENTA_ENE_TUNE=y
CONFIG_YENTA_TOSHIBA=y
# CONFIG_PD6729 is not set
# CONFIG_I82092 is not set
CONFIG_PCCARD_NONSTATIC=y
# CONFIG_RAPIDIO is not set
# CONFIG_PC104 is not set

#
# Generic Driver Options
#
CONFIG_AUXILIARY_BUS=y
CONFIG_UEVENT_HELPER=y
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
# CONFIG_DEVTMPFS_SAFE is not set
CONFIG_DRIVER_DEFERRED_PROBE_TIMEOUT=10
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y

#
# Firmware loader
#
CONFIG_FW_LOADER=y
# CONFIG_FW_LOADER_DEBUG is not set
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
CONFIG_FW_LOADER_COMPRESS=y
# CONFIG_FW_LOADER_COMPRESS_XZ is not set
# CONFIG_FW_LOADER_COMPRESS_ZSTD is not set
CONFIG_FW_CACHE=y
# CONFIG_FW_UPLOAD is not set
# 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=y
# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set
# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set
CONFIG_GENERIC_CPU_DEVICES=y
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_GENERIC_CPU_VULNERABILITIES=y
CONFIG_REGMAP=y
CONFIG_REGMAP_I2C=y
CONFIG_REGMAP_SPI=y
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
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_MOXTET is not set
CONFIG_MHI_BUS=y
# CONFIG_MHI_BUS_DEBUG is not set
# CONFIG_MHI_BUS_PCI_GENERIC is not set
# CONFIG_MHI_BUS_EP is not set
# 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 is not set
CONFIG_FIRMWARE_MEMMAP=y
CONFIG_DMIID=y
# CONFIG_DMI_SYSFS is not set
CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
# CONFIG_ISCSI_IBFT is not set
# CONFIG_FW_CFG_SYSFS is not set
CONFIG_SYSFB=y
# CONFIG_SYSFB_SIMPLEFB is not set
CONFIG_GOOGLE_FIRMWARE=y
# CONFIG_GOOGLE_SMI is not set
# CONFIG_GOOGLE_CBMEM is not set
CONFIG_GOOGLE_COREBOOT_TABLE=y
CONFIG_GOOGLE_MEMCONSOLE=y
# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
# CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT is not set
CONFIG_GOOGLE_MEMCONSOLE_COREBOOT=y
CONFIG_GOOGLE_VPD=y

#
# Qualcomm firmware drivers
#
# end of Qualcomm firmware drivers

#
# Tegra firmware driver
#
# end of Tegra firmware driver
# end of Firmware Drivers

# CONFIG_FWCTL is not set
CONFIG_GNSS=y
# CONFIG_GNSS_MTK_SERIAL is not set
# CONFIG_GNSS_SIRF_SERIAL is not set
# CONFIG_GNSS_UBX_SERIAL is not set
CONFIG_GNSS_USB=y
CONFIG_MTD=y
# CONFIG_MTD_TESTS is not set

#
# Partition parsers
#
# CONFIG_MTD_CMDLINE_PARTS is not set
# CONFIG_MTD_OF_PARTS is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# end of Partition parsers

#
# User Modules And Translation Layers
#
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y

#
# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK.
#
CONFIG_FTL=y
# 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_SWAP is not set
# CONFIG_MTD_PARTITIONED_MASTER is not set

#
# 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 is not set
# 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_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=y
CONFIG_MTD_PHRAM=y
CONFIG_MTD_MTDRAM=y
CONFIG_MTDRAM_TOTAL_SIZE=128
CONFIG_MTDRAM_ERASE_SIZE=4
CONFIG_MTD_BLOCK2MTD=y
# CONFIG_MTD_INTEL_DG is not set

#
# Disk-On-Chip Device Drivers
#
# CONFIG_MTD_DOCG3 is not set
# end of Self-contained MTD device drivers

#
# NAND
#
# CONFIG_MTD_ONENAND is not set
# CONFIG_MTD_RAW_NAND is not set
# CONFIG_MTD_SPI_NAND is not set

#
# ECC engine support
#
# CONFIG_MTD_NAND_ECC_SW_HAMMING is not set
# CONFIG_MTD_NAND_ECC_SW_BCH is not set
# CONFIG_MTD_NAND_ECC_MXIC is not set
# 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 is not set
CONFIG_MTD_UBI=y
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_FAULT_INJECTION is not set
# CONFIG_MTD_UBI_NVMEM is not set
# CONFIG_MTD_HYPERBUS is not set
CONFIG_DTC=y
CONFIG_OF=y
# CONFIG_OF_UNITTEST is not set
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_KOBJ=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_IRQ=y
CONFIG_OF_RESERVED_MEM=y
# CONFIG_OF_OVERLAY is not set
CONFIG_OF_NUMA=y
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
CONFIG_PARPORT=y
# CONFIG_PARPORT_PC is not set
# CONFIG_PARPORT_1284 is not set
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=y
CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION=y
# CONFIG_BLK_DEV_FD is not set
CONFIG_CDROM=y
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
CONFIG_ZRAM=y
# CONFIG_ZRAM_BACKEND_LZ4 is not set
# CONFIG_ZRAM_BACKEND_LZ4HC is not set
# CONFIG_ZRAM_BACKEND_ZSTD is not set
# CONFIG_ZRAM_BACKEND_DEFLATE is not set
# CONFIG_ZRAM_BACKEND_842 is not set
CONFIG_ZRAM_BACKEND_FORCE_LZO=y
CONFIG_ZRAM_BACKEND_LZO=y
# CONFIG_ZRAM_DEF_COMP_LZORLE is not set
CONFIG_ZRAM_DEF_COMP_LZO=y
CONFIG_ZRAM_DEF_COMP="lzo"
# CONFIG_ZRAM_WRITEBACK is not set
# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
# CONFIG_ZRAM_MEMORY_TRACKING is not set
# CONFIG_ZRAM_MULTI_COMP is not set
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_LOOP_MIN_COUNT=16
# CONFIG_BLK_DEV_DRBD is not set
CONFIG_BLK_DEV_NBD=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_ATA_OVER_ETH=y
CONFIG_VIRTIO_BLK=y
# CONFIG_BLK_DEV_RBD is not set
# CONFIG_BLK_DEV_UBLK is not set
CONFIG_BLK_DEV_RNBD=y
CONFIG_BLK_DEV_RNBD_CLIENT=y
# CONFIG_BLK_DEV_ZONED_LOOP is not set

#
# NVME Support
#
CONFIG_NVME_CORE=y
CONFIG_BLK_DEV_NVME=y
CONFIG_NVME_MULTIPATH=y
# CONFIG_NVME_VERBOSE_ERRORS is not set
# CONFIG_NVME_HWMON is not set
CONFIG_NVME_FABRICS=y
CONFIG_NVME_RDMA=y
CONFIG_NVME_FC=y
CONFIG_NVME_TCP=y
# CONFIG_NVME_TCP_TLS is not set
# CONFIG_NVME_HOST_AUTH is not set
CONFIG_NVME_TARGET=y
# CONFIG_NVME_TARGET_DEBUGFS is not set
# CONFIG_NVME_TARGET_PASSTHRU is not set
CONFIG_NVME_TARGET_LOOP=y
CONFIG_NVME_TARGET_RDMA=y
CONFIG_NVME_TARGET_FC=y
CONFIG_NVME_TARGET_FCLOOP=y
CONFIG_NVME_TARGET_TCP=y
# CONFIG_NVME_TARGET_TCP_TLS is not set
# CONFIG_NVME_TARGET_AUTH is not set
# CONFIG_NVME_TARGET_PCI_EPF is not set
# end of NVME Support

#
# Misc devices
#
# CONFIG_AD525X_DPOT is not set
# CONFIG_DUMMY_IRQ is not set
# CONFIG_IBM_ASM is not set
# CONFIG_PHANTOM is not set
# CONFIG_RPMB is not set
# CONFIG_TI_FPC202 is not set
# CONFIG_TIFM_CORE is not set
# CONFIG_ICS932S401 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_HP_ILO is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_ISL29003 is not set
# CONFIG_ISL29020 is not set
# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_SENSORS_BH1770 is not set
# CONFIG_SENSORS_APDS990X is not set
# CONFIG_HMC6352 is not set
# CONFIG_DS1682 is not set
# CONFIG_VMWARE_BALLOON is not set
# CONFIG_LATTICE_ECP3_CONFIG is not set
# CONFIG_SRAM is not set
# CONFIG_DW_XDATA_PCIE is not set
# CONFIG_PCI_ENDPOINT_TEST is not set
# CONFIG_XILINX_SDFEC is not set
CONFIG_MISC_RTSX=y
# CONFIG_HISI_HIKEY_USB is not set
# CONFIG_OPEN_DICE is not set
# CONFIG_NTSYNC is not set
# CONFIG_VCPU_STALL_DETECTOR is not set
# CONFIG_NSM is not set
# CONFIG_C2PORT is not set

#
# EEPROM support
#
# CONFIG_EEPROM_AT24 is not set
# CONFIG_EEPROM_AT25 is not set
# CONFIG_EEPROM_MAX6875 is not set
CONFIG_EEPROM_93CX6=y
# CONFIG_EEPROM_93XX46 is not set
# CONFIG_EEPROM_IDT_89HPESX is not set
# CONFIG_EEPROM_EE1004 is not set
# CONFIG_EEPROM_M24LR is not set
# end of EEPROM support

# CONFIG_CB710_CORE is not set
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_ALTERA_STAPL is not set
CONFIG_INTEL_MEI=y
CONFIG_INTEL_MEI_ME=y
# CONFIG_INTEL_MEI_TXE is not set
# CONFIG_INTEL_MEI_GSC is not set
# CONFIG_INTEL_MEI_VSC_HW is not set
# CONFIG_INTEL_MEI_HDCP is not set
# CONFIG_INTEL_MEI_PXP is not set
# CONFIG_INTEL_MEI_GSC_PROXY is not set
CONFIG_VMWARE_VMCI=y
# CONFIG_GENWQE is not set
# CONFIG_BCM_VK is not set
# CONFIG_MISC_ALCOR_PCI is not set
# CONFIG_MISC_RTSX_PCI is not set
CONFIG_MISC_RTSX_USB=y
# CONFIG_UACCE is not set
# CONFIG_PVPANIC is not set
# CONFIG_GP_PCI1XXXX is not set
# CONFIG_KEBA_CP500 is not set
# CONFIG_MISC_RP1 is not set
# end of Misc devices

#
# SCSI device support
#
CONFIG_SCSI_MOD=y
CONFIG_RAID_ATTRS=y
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=y
CONFIG_BLK_DEV_SR=y
CONFIG_CHR_DEV_SG=y
CONFIG_BLK_DEV_BSG=y
# CONFIG_CHR_DEV_SCH is not set
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=y
CONFIG_SCSI_FC_ATTRS=y
CONFIG_SCSI_ISCSI_ATTRS=y
CONFIG_SCSI_SAS_ATTRS=y
CONFIG_SCSI_SAS_LIBSAS=y
CONFIG_SCSI_SAS_ATA=y
# CONFIG_SCSI_SAS_HOST_SMP is not set
CONFIG_SCSI_SRP_ATTRS=y
# end of SCSI Transports

CONFIG_SCSI_LOWLEVEL=y
# CONFIG_ISCSI_TCP is not set
# CONFIG_ISCSI_BOOT_SYSFS is not set
# CONFIG_SCSI_CXGB3_ISCSI is not set
# CONFIG_SCSI_CXGB4_ISCSI is not set
# CONFIG_SCSI_BNX2_ISCSI is not set
# CONFIG_BE2ISCSI is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
CONFIG_SCSI_HPSA=y
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_3W_SAS is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC79XX is not set
# CONFIG_SCSI_AIC94XX is not set
# CONFIG_SCSI_MVSAS is not set
# CONFIG_SCSI_MVUMI is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_ARCMSR is not set
# CONFIG_SCSI_ESAS2R is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_SAS is not set
# CONFIG_SCSI_MPT3SAS is not set
# CONFIG_SCSI_MPT2SAS is not set
# CONFIG_SCSI_MPI3MR is not set
# CONFIG_SCSI_SMARTPQI is not set
# CONFIG_SCSI_HPTIOP is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_MYRB is not set
# CONFIG_SCSI_MYRS is not set
# CONFIG_VMWARE_PVSCSI is not set
# CONFIG_LIBFC is not set
# CONFIG_SCSI_SNIC is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_FDOMAIN_PCI is not set
# CONFIG_SCSI_ISCI is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_STEX is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_QLA_FC is not set
# CONFIG_SCSI_QLA_ISCSI is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_EFCT is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_WD719X is not set
# CONFIG_SCSI_DEBUG is not set
# CONFIG_SCSI_PMCRAID is not set
# CONFIG_SCSI_PM8001 is not set
# CONFIG_SCSI_BFA_FC is not set
CONFIG_SCSI_VIRTIO=y
# CONFIG_SCSI_CHELSIO_FCOE is not set
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
# CONFIG_SCSI_DH is not set
# 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 is not set
CONFIG_SATA_PMP=y

#
# Controllers with non-SFF native interface
#
CONFIG_SATA_AHCI=y
CONFIG_SATA_MOBILE_LPM_POLICY=3
# CONFIG_SATA_AHCI_PLATFORM is not set
# CONFIG_AHCI_DWC is not set
# CONFIG_AHCI_CEVA is not set
# CONFIG_SATA_INIC162X is not set
# CONFIG_SATA_ACARD_AHCI is not set
# CONFIG_SATA_SIL24 is not set
CONFIG_ATA_SFF=y

#
# SFF controllers with custom DMA interface
#
# CONFIG_PDC_ADMA is not set
# CONFIG_SATA_QSTOR is not set
# CONFIG_SATA_SX4 is not set
CONFIG_ATA_BMDMA=y

#
# SATA SFF controllers with BMDMA
#
CONFIG_ATA_PIIX=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_MV is not set
# CONFIG_SATA_NV is not set
# CONFIG_SATA_PROMISE is not set
# CONFIG_SATA_SIL is not set
# CONFIG_SATA_SIS is not set
# CONFIG_SATA_SVW is not set
# CONFIG_SATA_ULI is not set
# CONFIG_SATA_VIA is not set
# CONFIG_SATA_VITESSE is not set

#
# PATA SFF controllers with BMDMA
#
# CONFIG_PATA_ALI is not set
CONFIG_PATA_AMD=y
# CONFIG_PATA_ARTOP is not set
# CONFIG_PATA_ATIIXP is not set
# CONFIG_PATA_ATP867X is not set
# CONFIG_PATA_CMD64X is not set
# CONFIG_PATA_CYPRESS is not set
# CONFIG_PATA_EFAR is not set
# CONFIG_PATA_HPT366 is not set
# CONFIG_PATA_HPT37X is not set
# CONFIG_PATA_HPT3X2N is not set
# CONFIG_PATA_HPT3X3 is not set
# CONFIG_PATA_IT8213 is not set
# CONFIG_PATA_IT821X is not set
# CONFIG_PATA_JMICRON is not set
# CONFIG_PATA_MARVELL is not set
# CONFIG_PATA_NETCELL is not set
# CONFIG_PATA_NINJA32 is not set
# CONFIG_PATA_NS87415 is not set
CONFIG_PATA_OLDPIIX=y
# CONFIG_PATA_OPTIDMA is not set
# CONFIG_PATA_PDC2027X is not set
# CONFIG_PATA_PDC_OLD is not set
# CONFIG_PATA_RADISYS is not set
# CONFIG_PATA_RDC is not set
CONFIG_PATA_SCH=y
# CONFIG_PATA_SERVERWORKS is not set
# CONFIG_PATA_SIL680 is not set
# CONFIG_PATA_SIS is not set
# CONFIG_PATA_TOSHIBA is not set
# CONFIG_PATA_TRIFLEX is not set
# CONFIG_PATA_VIA is not set
# CONFIG_PATA_WINBOND is not set

#
# PIO-only SFF controllers
#
# CONFIG_PATA_CMD640_PCI is not set
# CONFIG_PATA_MPIIX is not set
# CONFIG_PATA_NS87410 is not set
# CONFIG_PATA_OPTI is not set
# CONFIG_PATA_PCMCIA is not set
# CONFIG_PATA_OF_PLATFORM is not set
# CONFIG_PATA_RZ1000 is not set

#
# Generic fallback / legacy drivers
#
# CONFIG_PATA_ACPI is not set
CONFIG_ATA_GENERIC=y
# CONFIG_PATA_LEGACY is not set
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_BITMAP=y
# CONFIG_MD_LLBITMAP is not set
CONFIG_MD_AUTODETECT=y
CONFIG_MD_BITMAP_FILE=y
# CONFIG_MD_LINEAR is not set
CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y
CONFIG_MD_RAID10=y
CONFIG_MD_RAID456=y
# CONFIG_MD_CLUSTER is not set
CONFIG_BCACHE=y
# CONFIG_BCACHE_DEBUG is not set
# CONFIG_BCACHE_ASYNC_REGISTRATION is not set
CONFIG_BLK_DEV_DM_BUILTIN=y
CONFIG_BLK_DEV_DM=y
# CONFIG_DM_DEBUG is not set
CONFIG_DM_BUFIO=y
# CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set
CONFIG_DM_BIO_PRISON=y
CONFIG_DM_PERSISTENT_DATA=y
# CONFIG_DM_UNSTRIPED is not set
CONFIG_DM_CRYPT=y
CONFIG_DM_SNAPSHOT=y
CONFIG_DM_THIN_PROVISIONING=y
CONFIG_DM_CACHE=y
CONFIG_DM_CACHE_SMQ=y
CONFIG_DM_WRITECACHE=y
# CONFIG_DM_EBS is not set
# CONFIG_DM_ERA is not set
CONFIG_DM_CLONE=y
CONFIG_DM_MIRROR=y
# CONFIG_DM_LOG_USERSPACE is not set
CONFIG_DM_RAID=y
CONFIG_DM_ZERO=y
CONFIG_DM_MULTIPATH=y
CONFIG_DM_MULTIPATH_QL=y
CONFIG_DM_MULTIPATH_ST=y
# CONFIG_DM_MULTIPATH_HST is not set
# CONFIG_DM_MULTIPATH_IOA is not set
# CONFIG_DM_DELAY is not set
# CONFIG_DM_DUST is not set
# CONFIG_DM_INIT is not set
CONFIG_DM_UEVENT=y
CONFIG_DM_FLAKEY=y
CONFIG_DM_VERITY=y
# CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG is not set
CONFIG_DM_VERITY_FEC=y
# CONFIG_DM_SWITCH is not set
# CONFIG_DM_LOG_WRITES is not set
CONFIG_DM_INTEGRITY=y
CONFIG_DM_ZONED=y
CONFIG_DM_AUDIT=y
# CONFIG_DM_VDO is not set
# CONFIG_DM_PCACHE is not set
CONFIG_TARGET_CORE=y
# CONFIG_TCM_IBLOCK is not set
# CONFIG_TCM_FILEIO is not set
# CONFIG_TCM_PSCSI is not set
# CONFIG_LOOPBACK_TARGET is not set
# CONFIG_ISCSI_TARGET is not set
# CONFIG_SBP_TARGET is not set
# CONFIG_REMOTE_TARGET is not set
# CONFIG_FUSION is not set

#
# IEEE 1394 (FireWire) support
#
CONFIG_FIREWIRE=y
CONFIG_FIREWIRE_OHCI=y
CONFIG_FIREWIRE_SBP2=y
CONFIG_FIREWIRE_NET=y
# CONFIG_FIREWIRE_NOSY is not set
# end of IEEE 1394 (FireWire) support

# CONFIG_MACINTOSH_DRIVERS is not set
CONFIG_NETDEVICES=y
CONFIG_MII=y
CONFIG_NET_CORE=y
CONFIG_BONDING=y
CONFIG_DUMMY=y
CONFIG_WIREGUARD=y
# CONFIG_WIREGUARD_DEBUG is not set
# CONFIG_OVPN is not set
CONFIG_EQUALIZER=y
CONFIG_NET_FC=y
CONFIG_IFB=y
CONFIG_NET_TEAM=y
CONFIG_NET_TEAM_MODE_BROADCAST=y
CONFIG_NET_TEAM_MODE_ROUNDROBIN=y
CONFIG_NET_TEAM_MODE_RANDOM=y
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=y
CONFIG_NET_TEAM_MODE_LOADBALANCE=y
CONFIG_MACVLAN=y
CONFIG_MACVTAP=y
CONFIG_IPVLAN_L3S=y
CONFIG_IPVLAN=y
CONFIG_IPVTAP=y
CONFIG_VXLAN=y
CONFIG_GENEVE=y
CONFIG_BAREUDP=y
CONFIG_GTP=y
# CONFIG_PFCP is not set
# CONFIG_AMT is not set
CONFIG_MACSEC=y
CONFIG_NETCONSOLE=y
# CONFIG_NETCONSOLE_DYNAMIC is not set
# CONFIG_NETCONSOLE_EXTENDED_LOG is not set
CONFIG_NETPOLL=y
CONFIG_NET_POLL_CONTROLLER=y
CONFIG_TUN=y
CONFIG_TAP=y
CONFIG_TUN_VNET_CROSS_LE=y
CONFIG_VETH=y
CONFIG_VIRTIO_NET=y
CONFIG_NLMON=y
# CONFIG_NETKIT is not set
CONFIG_NET_VRF=y
CONFIG_VSOCKMON=y
# CONFIG_MHI_NET is not set
# CONFIG_ARCNET is not set
CONFIG_ATM_DRIVERS=y
# CONFIG_ATM_DUMMY is not set
CONFIG_ATM_TCP=y
# CONFIG_ATM_LANAI is not set
# CONFIG_ATM_ENI is not set
# CONFIG_ATM_NICSTAR is not set
# CONFIG_ATM_IDT77252 is not set
# CONFIG_ATM_IA is not set
# CONFIG_ATM_FORE200E is not set
# CONFIG_ATM_HE is not set
# CONFIG_ATM_SOLOS is not set
CONFIG_CAIF_DRIVERS=y
CONFIG_CAIF_TTY=y
CONFIG_CAIF_VIRTIO=y

#
# Distributed Switch Architecture drivers
#
# CONFIG_B53 is not set
# CONFIG_NET_DSA_BCM_SF2 is not set
# CONFIG_NET_DSA_LOOP is not set
# CONFIG_NET_DSA_HIRSCHMANN_HELLCREEK is not set
# CONFIG_NET_DSA_LANTIQ_GSWIP is not set
# CONFIG_NET_DSA_MXL_GSW1XX is not set
# CONFIG_NET_DSA_MT7530 is not set
# CONFIG_NET_DSA_MV88E6060 is not set
# CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON is not set
# CONFIG_NET_DSA_MV88E6XXX is not set
# CONFIG_NET_DSA_MXL862 is not set
# CONFIG_NET_DSA_AR9331 is not set
# CONFIG_NET_DSA_QCA8K is not set
# CONFIG_NET_DSA_SJA1105 is not set
# CONFIG_NET_DSA_XRS700X_I2C is not set
# CONFIG_NET_DSA_XRS700X_MDIO is not set
# CONFIG_NET_DSA_REALTEK is not set
# CONFIG_NET_DSA_KS8995 is not set
# CONFIG_NET_DSA_SMSC_LAN9303_I2C is not set
# CONFIG_NET_DSA_SMSC_LAN9303_MDIO is not set
# CONFIG_NET_DSA_VITESSE_VSC73XX_SPI is not set
# CONFIG_NET_DSA_VITESSE_VSC73XX_PLATFORM is not set
# CONFIG_NET_DSA_YT921X is not set
# end of Distributed Switch Architecture drivers

CONFIG_ETHERNET=y
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_VENDOR_ADAPTEC is not set
# CONFIG_NET_VENDOR_AGERE is not set
# CONFIG_NET_VENDOR_ALACRITECH is not set
# CONFIG_ALTERA_TSE is not set
CONFIG_NET_VENDOR_AMAZON=y
# CONFIG_ENA_ETHERNET is not set
# CONFIG_NET_VENDOR_AMD is not set
# CONFIG_NET_VENDOR_AQUANTIA is not set
# CONFIG_NET_VENDOR_ARC is not set
CONFIG_NET_VENDOR_ASIX=y
# CONFIG_SPI_AX88796C is not set
# CONFIG_NET_VENDOR_ATHEROS is not set
# CONFIG_CX_ECAT is not set
# CONFIG_NET_VENDOR_BROADCOM is not set
# CONFIG_NET_VENDOR_CADENCE is not set
# CONFIG_NET_VENDOR_CAVIUM is not set
# CONFIG_NET_VENDOR_CHELSIO is not set
CONFIG_NET_VENDOR_CISCO=y
# CONFIG_ENIC is not set
# CONFIG_NET_VENDOR_CORTINA is not set
CONFIG_NET_VENDOR_DAVICOM=y
# CONFIG_DM9051 is not set
# CONFIG_NET_VENDOR_DEC is not set
# CONFIG_NET_VENDOR_DLINK is not set
# CONFIG_NET_VENDOR_EMULEX is not set
CONFIG_NET_VENDOR_ENGLEDER=y
# CONFIG_TSNEP is not set
# CONFIG_NET_VENDOR_EZCHIP is not set
# CONFIG_NET_VENDOR_FUJITSU is not set
CONFIG_NET_VENDOR_FUNGIBLE=y
# CONFIG_FUN_ETH is not set
CONFIG_NET_VENDOR_GOOGLE=y
CONFIG_GVE=y
CONFIG_NET_VENDOR_HISILICON=y
# CONFIG_HIBMCGE is not set
# CONFIG_NET_VENDOR_HUAWEI is not set
CONFIG_NET_VENDOR_I825XX=y
CONFIG_NET_VENDOR_INTEL=y
CONFIG_E100=y
CONFIG_E1000=y
CONFIG_E1000E=y
CONFIG_E1000E_HWTS=y
# CONFIG_IGB is not set
# CONFIG_IGBVF is not set
# CONFIG_IXGBE is not set
# CONFIG_IXGBEVF is not set
# CONFIG_I40E is not set
# CONFIG_I40EVF is not set
# CONFIG_ICE is not set
# CONFIG_FM10K is not set
# CONFIG_IGC is not set
# CONFIG_IDPF is not set
# CONFIG_JME is not set
# CONFIG_NET_VENDOR_ADI is not set
CONFIG_NET_VENDOR_LITEX=y
# CONFIG_LITEX_LITEETH is not set
# CONFIG_NET_VENDOR_MARVELL is not set
CONFIG_NET_VENDOR_MELLANOX=y
# CONFIG_MLX4_EN is not set
CONFIG_MLX4_CORE=y
# CONFIG_MLX4_DEBUG is not set
# CONFIG_MLX4_CORE_GEN2 is not set
# CONFIG_MLX5_CORE is not set
# CONFIG_MLXSW_CORE is not set
# CONFIG_MLXFW is not set
CONFIG_NET_VENDOR_META=y
# CONFIG_FBNIC is not set
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
CONFIG_NET_VENDOR_MICROSOFT=y
CONFIG_NET_VENDOR_MUCSE=y
# CONFIG_MGBE is not set
# CONFIG_NET_VENDOR_MYRI is not set
# CONFIG_FEALNX is not set
# CONFIG_NET_VENDOR_NI is not set
# CONFIG_NET_VENDOR_NATSEMI is not set
# CONFIG_NET_VENDOR_NETRONOME is not set
# CONFIG_NET_VENDOR_NVIDIA is not set
# CONFIG_NET_VENDOR_OKI is not set
# CONFIG_ETHOC is not set
# CONFIG_NET_VENDOR_PACKET_ENGINES is not set
# CONFIG_NET_VENDOR_PENSANDO is not set
# CONFIG_NET_VENDOR_QLOGIC is not set
# CONFIG_NET_VENDOR_BROCADE is not set
# CONFIG_NET_VENDOR_QUALCOMM is not set
# CONFIG_NET_VENDOR_RDC is not set
# CONFIG_NET_VENDOR_REALTEK is not set
# CONFIG_NET_VENDOR_RENESAS is not set
# CONFIG_NET_VENDOR_ROCKER is not set
# CONFIG_NET_VENDOR_SAMSUNG is not set
# CONFIG_NET_VENDOR_SEEQ is not set
# CONFIG_NET_VENDOR_SILAN is not set
# CONFIG_NET_VENDOR_SIS is not set
# CONFIG_NET_VENDOR_SOLARFLARE is not set
# CONFIG_NET_VENDOR_SMSC is not set
# CONFIG_NET_VENDOR_SOCIONEXT is not set
# CONFIG_NET_VENDOR_STMICRO is not set
# CONFIG_NET_VENDOR_SUN is not set
# CONFIG_NET_VENDOR_SYNOPSYS is not set
# CONFIG_NET_VENDOR_TEHUTI is not set
# CONFIG_NET_VENDOR_TI is not set
CONFIG_NET_VENDOR_VERTEXCOM=y
# CONFIG_MSE102X is not set
# CONFIG_NET_VENDOR_VIA is not set
CONFIG_NET_VENDOR_WANGXUN=y
# CONFIG_NGBE is not set
# CONFIG_TXGBE is not set
# CONFIG_TXGBEVF is not set
# CONFIG_NGBEVF is not set
# CONFIG_NET_VENDOR_WIZNET is not set
# CONFIG_NET_VENDOR_XILINX is not set
# CONFIG_NET_VENDOR_XIRCOM is not set
CONFIG_FDDI=y
# CONFIG_DEFXX is not set
# CONFIG_SKFP is not set
CONFIG_PHYLINK=y
CONFIG_PHYLIB=y
CONFIG_SWPHY=y
CONFIG_PHY_PACKAGE=y
# CONFIG_LED_TRIGGER_PHY is not set
CONFIG_PHYLIB_LEDS=y
CONFIG_FIXED_PHY=y
# CONFIG_SFP is not set

#
# MII PHY device drivers
#
# CONFIG_AS21XXX_PHY is not set
# CONFIG_AIR_EN8811H_PHY is not set
# CONFIG_AMD_PHY is not set
# CONFIG_ADIN_PHY is not set
# CONFIG_ADIN1100_PHY is not set
# CONFIG_AQUANTIA_PHY is not set
CONFIG_AX88796B_PHY=y
# CONFIG_BROADCOM_PHY is not set
# CONFIG_BCM54140_PHY is not set
# CONFIG_BCM7XXX_PHY is not set
# CONFIG_BCM84881_PHY is not set
# CONFIG_BCM87XX_PHY is not set
# CONFIG_CICADA_PHY is not set
# CONFIG_CORTINA_PHY is not set
# CONFIG_DAVICOM_PHY is not set
# CONFIG_ICPLUS_PHY is not set
# CONFIG_LXT_PHY is not set
# CONFIG_INTEL_XWAY_PHY is not set
# CONFIG_LSI_ET1011C_PHY is not set
# CONFIG_MARVELL_PHY is not set
# CONFIG_MARVELL_10G_PHY is not set
# CONFIG_MARVELL_88Q2XXX_PHY is not set
# CONFIG_MARVELL_88X2222_PHY is not set
# CONFIG_MAXLINEAR_GPHY is not set
# CONFIG_MAXLINEAR_86110_PHY is not set
# CONFIG_MEDIATEK_GE_PHY is not set
# CONFIG_MICREL_PHY is not set
# CONFIG_MICROCHIP_T1S_PHY is not set
CONFIG_MICROCHIP_PHY=y
# CONFIG_MICROCHIP_T1_PHY is not set
# CONFIG_MICROSEMI_PHY is not set
# CONFIG_MOTORCOMM_PHY is not set
# CONFIG_NATIONAL_PHY is not set
# CONFIG_NXP_CBTX_PHY is not set
# CONFIG_NXP_C45_TJA11XX_PHY is not set
# CONFIG_NXP_TJA11XX_PHY is not set
# CONFIG_NCN26000_PHY is not set
# CONFIG_AT803X_PHY is not set
# CONFIG_QCA83XX_PHY is not set
# CONFIG_QCA808X_PHY is not set
# CONFIG_QCA807X_PHY is not set
# CONFIG_QSEMI_PHY is not set
CONFIG_REALTEK_PHY=y
# CONFIG_REALTEK_PHY_HWMON is not set
# CONFIG_RENESAS_PHY is not set
# CONFIG_ROCKCHIP_PHY is not set
CONFIG_SMSC_PHY=y
# CONFIG_STE10XP is not set
# CONFIG_TERANETICS_PHY is not set
# CONFIG_DP83822_PHY is not set
# CONFIG_DP83TC811_PHY is not set
# CONFIG_DP83848_PHY is not set
# CONFIG_DP83867_PHY is not set
# CONFIG_DP83869_PHY is not set
# CONFIG_DP83TD510_PHY is not set
# CONFIG_DP83TG720_PHY is not set
# CONFIG_VITESSE_PHY is not set
# CONFIG_XILINX_GMII2RGMII is not set
# CONFIG_PSE_CONTROLLER is not set
CONFIG_CAN_DEV=y
CONFIG_CAN_VCAN=y
CONFIG_CAN_VXCAN=y
CONFIG_CAN_NETLINK=y
CONFIG_CAN_CALC_BITTIMING=y
CONFIG_CAN_RX_OFFLOAD=y
# CONFIG_CAN_CAN327 is not set
# CONFIG_CAN_DUMMY is not set
# CONFIG_CAN_FLEXCAN is not set
# CONFIG_CAN_GRCAN is not set
# CONFIG_CAN_KVASER_PCIEFD is not set
CONFIG_CAN_SLCAN=y
# CONFIG_CAN_C_CAN is not set
# CONFIG_CAN_CC770 is not set
# CONFIG_CAN_CTUCANFD_PCI is not set
# CONFIG_CAN_CTUCANFD_PLATFORM is not set
# CONFIG_CAN_ESD_402_PCI is not set
CONFIG_CAN_IFI_CANFD=y
# CONFIG_CAN_M_CAN is not set
# CONFIG_CAN_PEAK_PCIEFD is not set
# CONFIG_CAN_SJA1000 is not set
# CONFIG_CAN_SOFTING is not set

#
# CAN SPI interfaces
#
# CONFIG_CAN_HI311X is not set
# CONFIG_CAN_MCP251X is not set
# CONFIG_CAN_MCP251XFD is not set
# end of CAN SPI interfaces

#
# CAN USB interfaces
#
CONFIG_CAN_8DEV_USB=y
CONFIG_CAN_EMS_USB=y
CONFIG_CAN_ESD_USB=y
CONFIG_CAN_ETAS_ES58X=y
CONFIG_CAN_F81604=y
CONFIG_CAN_GS_USB=y
CONFIG_CAN_KVASER_USB=y
CONFIG_CAN_MCBA_USB=y
CONFIG_CAN_PEAK_USB=y
CONFIG_CAN_UCAN=y
# end of CAN USB interfaces

# CONFIG_CAN_DEBUG_DEVICES is not set

#
# MCTP Device Drivers
#
# CONFIG_MCTP_SERIAL is not set
# CONFIG_MCTP_TRANSPORT_I2C is not set
# CONFIG_MCTP_TRANSPORT_USB is not set
# end of MCTP Device Drivers

CONFIG_FWNODE_MDIO=y
CONFIG_OF_MDIO=y
CONFIG_ACPI_MDIO=y
# CONFIG_MDIO_BITBANG is not set
# CONFIG_MDIO_BCM_UNIMAC is not set
# CONFIG_MDIO_HISI_FEMAC is not set
CONFIG_MDIO_MVUSB=y
# CONFIG_MDIO_MSCC_MIIM is not set
# CONFIG_MDIO_OCTEON is not set
# CONFIG_MDIO_PIC64HPSC is not set
# CONFIG_MDIO_IPQ4019 is not set
# CONFIG_MDIO_IPQ8064 is not set
# CONFIG_MDIO_THUNDER is not set

#
# MDIO Multiplexers
#
# CONFIG_MDIO_BUS_MUX_GPIO is not set
# CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set
# CONFIG_MDIO_BUS_MUX_MMIOREG is not set

#
# PCS device drivers
#
# CONFIG_PCS_XPCS is not set
# end of PCS device drivers

# CONFIG_PLIP is not set
CONFIG_PPP=y
CONFIG_PPP_BSDCOMP=y
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_MPPE=y
CONFIG_PPP_MULTILINK=y
CONFIG_PPPOATM=y
CONFIG_PPPOE=y
CONFIG_PPPOE_HASH_BITS_1=y
# CONFIG_PPPOE_HASH_BITS_2 is not set
# CONFIG_PPPOE_HASH_BITS_4 is not set
# CONFIG_PPPOE_HASH_BITS_8 is not set
CONFIG_PPPOE_HASH_BITS=1
CONFIG_PPTP=y
CONFIG_PPPOL2TP=y
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
CONFIG_SLIP=y
CONFIG_SLHC=y
CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP_SMART=y
CONFIG_SLIP_MODE_SLIP6=y
CONFIG_USB_NET_DRIVERS=y
CONFIG_USB_CATC=y
CONFIG_USB_KAWETH=y
CONFIG_USB_PEGASUS=y
CONFIG_USB_RTL8150=y
CONFIG_USB_RTL8152=y
CONFIG_USB_LAN78XX=y
CONFIG_USB_USBNET=y
CONFIG_USB_NET_AX8817X=y
CONFIG_USB_NET_AX88179_178A=y
CONFIG_USB_NET_CDCETHER=y
CONFIG_USB_NET_CDC_EEM=y
CONFIG_USB_NET_CDC_NCM=y
CONFIG_USB_NET_HUAWEI_CDC_NCM=y
CONFIG_USB_NET_CDC_MBIM=y
CONFIG_USB_NET_DM9601=y
CONFIG_USB_NET_SR9700=y
CONFIG_USB_NET_SR9800=y
CONFIG_USB_NET_SMSC75XX=y
CONFIG_USB_NET_SMSC95XX=y
CONFIG_USB_NET_GL620A=y
CONFIG_USB_NET_NET1080=y
CONFIG_USB_NET_PLUSB=y
CONFIG_USB_NET_MCS7830=y
CONFIG_USB_NET_RNDIS_HOST=y
CONFIG_USB_NET_CDC_SUBSET_ENABLE=y
CONFIG_USB_NET_CDC_SUBSET=y
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=y
CONFIG_USB_NET_CX82310_ETH=y
CONFIG_USB_NET_KALMIA=y
CONFIG_USB_NET_QMI_WWAN=y
CONFIG_USB_HSO=y
CONFIG_USB_NET_INT51X1=y
CONFIG_USB_CDC_PHONET=y
CONFIG_USB_IPHETH=y
CONFIG_USB_SIERRA_NET=y
CONFIG_USB_VL600=y
CONFIG_USB_NET_CH9200=y
CONFIG_USB_NET_AQC111=y
CONFIG_USB_RTL8153_ECM=y
CONFIG_WLAN=y
CONFIG_WLAN_VENDOR_ADMTEK=y
# CONFIG_ADM8211 is not set
CONFIG_ATH_COMMON=y
CONFIG_WLAN_VENDOR_ATH=y
# CONFIG_ATH_DEBUG is not set
# CONFIG_ATH5K is not set
# CONFIG_ATH5K_PCI is not set
CONFIG_ATH9K_HW=y
CONFIG_ATH9K_COMMON=y
CONFIG_ATH9K_COMMON_DEBUG=y
CONFIG_ATH9K_BTCOEX_SUPPORT=y
CONFIG_ATH9K=y
CONFIG_ATH9K_PCI=y
CONFIG_ATH9K_AHB=y
CONFIG_ATH9K_DEBUGFS=y
# CONFIG_ATH9K_STATION_STATISTICS is not set
CONFIG_ATH9K_DYNACK=y
# CONFIG_ATH9K_WOW is not set
CONFIG_ATH9K_RFKILL=y
CONFIG_ATH9K_CHANNEL_CONTEXT=y
CONFIG_ATH9K_PCOEM=y
# CONFIG_ATH9K_PCI_NO_EEPROM is not set
CONFIG_ATH9K_HTC=y
CONFIG_ATH9K_HTC_DEBUGFS=y
# CONFIG_ATH9K_HWRNG is not set
CONFIG_ATH9K_COMMON_SPECTRAL=y
CONFIG_CARL9170=y
CONFIG_CARL9170_LEDS=y
# CONFIG_CARL9170_DEBUGFS is not set
CONFIG_CARL9170_WPC=y
CONFIG_CARL9170_HWRNG=y
CONFIG_ATH6KL=y
# CONFIG_ATH6KL_SDIO is not set
CONFIG_ATH6KL_USB=y
# CONFIG_ATH6KL_DEBUG is not set
# CONFIG_ATH6KL_TRACING is not set
CONFIG_AR5523=y
# CONFIG_WIL6210 is not set
CONFIG_ATH10K=y
CONFIG_ATH10K_CE=y
CONFIG_ATH10K_PCI=y
# CONFIG_ATH10K_AHB is not set
# CONFIG_ATH10K_SDIO is not set
CONFIG_ATH10K_USB=y
# CONFIG_ATH10K_DEBUG is not set
# CONFIG_ATH10K_DEBUGFS is not set
CONFIG_ATH10K_LEDS=y
# CONFIG_ATH10K_TRACING is not set
# CONFIG_WCN36XX is not set
CONFIG_ATH11K=y
# CONFIG_ATH11K_PCI is not set
# CONFIG_ATH11K_DEBUG is not set
# CONFIG_ATH11K_DEBUGFS is not set
# CONFIG_ATH11K_TRACING is not set
# CONFIG_ATH12K is not set
# CONFIG_WLAN_VENDOR_ATMEL is not set
# CONFIG_WLAN_VENDOR_BROADCOM is not set
# CONFIG_WLAN_VENDOR_INTEL is not set
# CONFIG_WLAN_VENDOR_INTERSIL is not set
# CONFIG_WLAN_VENDOR_MARVELL is not set
# CONFIG_WLAN_VENDOR_MEDIATEK is not set
# CONFIG_WLAN_VENDOR_MICROCHIP is not set
CONFIG_WLAN_VENDOR_PURELIFI=y
CONFIG_PLFXLC=y
# CONFIG_WLAN_VENDOR_RALINK is not set
# CONFIG_WLAN_VENDOR_REALTEK is not set
# CONFIG_WLAN_VENDOR_RSI is not set
CONFIG_WLAN_VENDOR_SILABS=y
# CONFIG_WFX is not set
# CONFIG_WLAN_VENDOR_ST is not set
# CONFIG_WLAN_VENDOR_TI is not set
# CONFIG_WLAN_VENDOR_ZYDAS is not set
# CONFIG_WLAN_VENDOR_QUANTENNA is not set
CONFIG_MAC80211_HWSIM=y
CONFIG_VIRT_WIFI=y
CONFIG_WAN=y
CONFIG_HDLC=y
CONFIG_HDLC_RAW=y
CONFIG_HDLC_RAW_ETH=y
CONFIG_HDLC_CISCO=y
CONFIG_HDLC_FR=y
CONFIG_HDLC_PPP=y
CONFIG_HDLC_X25=y
# CONFIG_FRAMER is not set
# CONFIG_PCI200SYN is not set
# CONFIG_WANXL is not set
# CONFIG_PC300TOO is not set
# CONFIG_FARSYNC is not set
CONFIG_LAPBETHER=y
CONFIG_IEEE802154_DRIVERS=y
# CONFIG_IEEE802154_FAKELB is not set
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_MRF24J40 is not set
# CONFIG_IEEE802154_CC2520 is not set
CONFIG_IEEE802154_ATUSB=y
# CONFIG_IEEE802154_ADF7242 is not set
# CONFIG_IEEE802154_CA8210 is not set
# CONFIG_IEEE802154_MCR20A is not set
CONFIG_IEEE802154_HWSIM=y

#
# Wireless WAN
#
CONFIG_WWAN=y
# CONFIG_WWAN_DEBUGFS is not set
# CONFIG_WWAN_HWSIM is not set
CONFIG_MHI_WWAN_CTRL=y
# CONFIG_MHI_WWAN_MBIM is not set
# CONFIG_IOSM is not set
# CONFIG_MTK_T7XX is not set
# end of Wireless WAN

CONFIG_VMXNET3=y
# CONFIG_FUJITSU_ES is not set
CONFIG_USB4_NET=y
CONFIG_NETDEVSIM=y
CONFIG_NET_FAILOVER=y
CONFIG_ISDN=y
CONFIG_ISDN_CAPI=y
CONFIG_MISDN=y
CONFIG_MISDN_DSP=y
CONFIG_MISDN_L1OIP=y

#
# mISDN hardware drivers
#
# CONFIG_MISDN_HFCPCI is not set
# CONFIG_MISDN_HFCMULTI is not set
CONFIG_MISDN_HFCUSB=y
# CONFIG_MISDN_AVMFRITZ is not set
# CONFIG_MISDN_SPEEDFAX is not set
# CONFIG_MISDN_INFINEON is not set
# CONFIG_MISDN_W6692 is not set
# CONFIG_MISDN_NETJET is not set

#
# Input device support
#
CONFIG_INPUT=y
CONFIG_INPUT_LEDS=y
CONFIG_INPUT_FF_MEMLESS=y
CONFIG_INPUT_SPARSEKMAP=y
# CONFIG_INPUT_MATRIXKMAP is not set
CONFIG_INPUT_VIVALDIFMAP=y

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_JOYDEV=y
CONFIG_INPUT_EVDEV=y

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ADC is not set
# CONFIG_KEYBOARD_ADP5588 is not set
CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_QT1050 is not set
# CONFIG_KEYBOARD_QT1070 is not set
# CONFIG_KEYBOARD_QT2160 is not set
# CONFIG_KEYBOARD_DLINK_DIR685 is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_KEYBOARD_GPIO_POLLED is not set
# CONFIG_KEYBOARD_TCA8418 is not set
# CONFIG_KEYBOARD_MATRIX is not set
# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_LM8333 is not set
# CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_MPR121 is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_OPENCORES is not set
# CONFIG_KEYBOARD_PINEPHONE is not set
# CONFIG_KEYBOARD_SAMSUNG is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_OMAP4 is not set
# CONFIG_KEYBOARD_TM2_TOUCHKEY is not set
# CONFIG_KEYBOARD_TWL4030 is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_CAP11XX is not set
# CONFIG_KEYBOARD_BCM is not set
# CONFIG_KEYBOARD_CYPRESS_SF is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
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 is not set
# CONFIG_MOUSE_PS2_SENTELIC is not set
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
CONFIG_MOUSE_PS2_FOCALTECH=y
# CONFIG_MOUSE_PS2_VMMOUSE is not set
CONFIG_MOUSE_PS2_SMBUS=y
# CONFIG_MOUSE_SERIAL is not set
CONFIG_MOUSE_APPLETOUCH=y
CONFIG_MOUSE_BCM5974=y
# CONFIG_MOUSE_CYAPA is not set
# CONFIG_MOUSE_ELAN_I2C is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_MOUSE_GPIO is not set
# CONFIG_MOUSE_SYNAPTICS_I2C is not set
CONFIG_MOUSE_SYNAPTICS_USB=y
CONFIG_INPUT_JOYSTICK=y
# CONFIG_JOYSTICK_ANALOG is not set
# CONFIG_JOYSTICK_A3D is not set
# CONFIG_JOYSTICK_ADC is not set
# CONFIG_JOYSTICK_ADI is not set
# CONFIG_JOYSTICK_COBRA is not set
# CONFIG_JOYSTICK_GF2K is not set
# CONFIG_JOYSTICK_GRIP is not set
# CONFIG_JOYSTICK_GRIP_MP is not set
# CONFIG_JOYSTICK_GUILLEMOT is not set
# CONFIG_JOYSTICK_INTERACT is not set
# CONFIG_JOYSTICK_SIDEWINDER is not set
# CONFIG_JOYSTICK_TMDC is not set
CONFIG_JOYSTICK_IFORCE=y
CONFIG_JOYSTICK_IFORCE_USB=y
# CONFIG_JOYSTICK_IFORCE_232 is not set
# CONFIG_JOYSTICK_WARRIOR is not set
# CONFIG_JOYSTICK_MAGELLAN is not set
# CONFIG_JOYSTICK_SPACEORB is not set
# CONFIG_JOYSTICK_SPACEBALL is not set
# CONFIG_JOYSTICK_STINGER is not set
# CONFIG_JOYSTICK_TWIDJOY is not set
# CONFIG_JOYSTICK_ZHENHUA is not set
# CONFIG_JOYSTICK_DB9 is not set
# CONFIG_JOYSTICK_GAMECON is not set
# CONFIG_JOYSTICK_TURBOGRAFX is not set
# CONFIG_JOYSTICK_AS5011 is not set
# CONFIG_JOYSTICK_JOYDUMP is not set
CONFIG_JOYSTICK_XPAD=y
CONFIG_JOYSTICK_XPAD_FF=y
CONFIG_JOYSTICK_XPAD_LEDS=y
# CONFIG_JOYSTICK_WALKERA0701 is not set
# CONFIG_JOYSTICK_PSXPAD_SPI is not set
CONFIG_JOYSTICK_PXRC=y
# CONFIG_JOYSTICK_QWIIC is not set
# CONFIG_JOYSTICK_FSIA6B is not set
# CONFIG_JOYSTICK_SENSEHAT is not set
# CONFIG_JOYSTICK_SEESAW is not set
CONFIG_INPUT_TABLET=y
CONFIG_TABLET_USB_ACECAD=y
CONFIG_TABLET_USB_AIPTEK=y
CONFIG_TABLET_USB_HANWANG=y
CONFIG_TABLET_USB_KBTAB=y
CONFIG_TABLET_USB_PEGASUS=y
# CONFIG_TABLET_SERIAL_WACOM4 is not set
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ADS7846 is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
# CONFIG_TOUCHSCREEN_AD7879 is not set
# CONFIG_TOUCHSCREEN_ADC is not set
# CONFIG_TOUCHSCREEN_AR1021_I2C is not set
# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
# CONFIG_TOUCHSCREEN_BU21013 is not set
# CONFIG_TOUCHSCREEN_BU21029 is not set
# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set
# CONFIG_TOUCHSCREEN_CHIPONE_ICN8505 is not set
# CONFIG_TOUCHSCREEN_CY8CTMA140 is not set
# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set
# CONFIG_TOUCHSCREEN_CYTTSP5 is not set
# CONFIG_TOUCHSCREEN_DYNAPRO is not set
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
# CONFIG_TOUCHSCREEN_EETI is not set
# CONFIG_TOUCHSCREEN_EGALAX is not set
# CONFIG_TOUCHSCREEN_EGALAX_SERIAL is not set
# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FUJITSU is not set
# CONFIG_TOUCHSCREEN_GOODIX is not set
# CONFIG_TOUCHSCREEN_GOODIX_BERLIN_I2C is not set
# CONFIG_TOUCHSCREEN_GOODIX_BERLIN_SPI is not set
# CONFIG_TOUCHSCREEN_HIDEEP is not set
# CONFIG_TOUCHSCREEN_HIMAX_HX852X is not set
# CONFIG_TOUCHSCREEN_HYCON_HY46XX is not set
# CONFIG_TOUCHSCREEN_HYNITRON_CSTXXX is not set
# CONFIG_TOUCHSCREEN_HYNITRON_CST816X is not set
# CONFIG_TOUCHSCREEN_ILI210X is not set
# CONFIG_TOUCHSCREEN_ILITEK is not set
# CONFIG_TOUCHSCREEN_S6SY761 is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
# CONFIG_TOUCHSCREEN_ELAN is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
# CONFIG_TOUCHSCREEN_WACOM_I2C is not set
# CONFIG_TOUCHSCREEN_MAX11801 is not set
# CONFIG_TOUCHSCREEN_MMS114 is not set
# CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set
# CONFIG_TOUCHSCREEN_MSG2638 is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_NOVATEK_NVT_TS is not set
# CONFIG_TOUCHSCREEN_IMAGIS is not set
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
# CONFIG_TOUCHSCREEN_INEXIO is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_PIXCIR is not set
# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set
CONFIG_TOUCHSCREEN_USB_COMPOSITE=y
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 is not set
# CONFIG_TOUCHSCREEN_TSC_SERIO is not set
# CONFIG_TOUCHSCREEN_TSC2004 is not set
# CONFIG_TOUCHSCREEN_TSC2005 is not set
# CONFIG_TOUCHSCREEN_TSC2007 is not set
# CONFIG_TOUCHSCREEN_RM_TS is not set
# CONFIG_TOUCHSCREEN_SILEAD is not set
# CONFIG_TOUCHSCREEN_SIS_I2C is not set
# CONFIG_TOUCHSCREEN_ST1232 is not set
# CONFIG_TOUCHSCREEN_STMFTS is not set
CONFIG_TOUCHSCREEN_SUR40=y
# CONFIG_TOUCHSCREEN_SURFACE3_SPI is not set
# CONFIG_TOUCHSCREEN_SX8654 is not set
# CONFIG_TOUCHSCREEN_TPS6507X is not set
# CONFIG_TOUCHSCREEN_ZET6223 is not set
# CONFIG_TOUCHSCREEN_ZFORCE is not set
# CONFIG_TOUCHSCREEN_COLIBRI_VF50 is not set
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
# CONFIG_TOUCHSCREEN_IQS5XX is not set
# CONFIG_TOUCHSCREEN_IQS7211 is not set
# CONFIG_TOUCHSCREEN_ZINITIX is not set
# CONFIG_TOUCHSCREEN_HIMAX_HX83112B is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_AD714X is not set
# CONFIG_INPUT_ATMEL_CAPTOUCH is not set
# CONFIG_INPUT_AW86927 is not set
# CONFIG_INPUT_BMA150 is not set
# CONFIG_INPUT_E3X0_BUTTON is not set
# CONFIG_INPUT_PCSPKR is not set
# CONFIG_INPUT_MMA8450 is not set
# CONFIG_INPUT_APANEL is not set
# CONFIG_INPUT_GPIO_BEEPER is not set
# CONFIG_INPUT_GPIO_DECODER is not set
# CONFIG_INPUT_GPIO_VIBRA is not set
# CONFIG_INPUT_ATLAS_BTNS is not set
CONFIG_INPUT_ATI_REMOTE2=y
CONFIG_INPUT_KEYSPAN_REMOTE=y
# CONFIG_INPUT_KXTJ9 is not set
CONFIG_INPUT_POWERMATE=y
CONFIG_INPUT_YEALINK=y
CONFIG_INPUT_CM109=y
# CONFIG_INPUT_REGULATOR_HAPTIC is not set
# CONFIG_INPUT_RETU_PWRBUTTON is not set
# CONFIG_INPUT_TWL4030_PWRBUTTON is not set
# CONFIG_INPUT_TWL4030_VIBRA is not set
CONFIG_INPUT_UINPUT=y
# CONFIG_INPUT_PCF8574 is not set
# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
# CONFIG_INPUT_DA7280_HAPTICS is not set
# CONFIG_INPUT_ADXL34X is not set
# CONFIG_INPUT_IBM_PANEL is not set
CONFIG_INPUT_IMS_PCU=y
# CONFIG_INPUT_IQS269A is not set
# CONFIG_INPUT_IQS626A is not set
# CONFIG_INPUT_IQS7222 is not set
# CONFIG_INPUT_CMA3000 is not set
# CONFIG_INPUT_IDEAPAD_SLIDEBAR is not set
# CONFIG_INPUT_DRV260X_HAPTICS is not set
# CONFIG_INPUT_DRV2665_HAPTICS is not set
# CONFIG_INPUT_DRV2667_HAPTICS is not set
CONFIG_RMI4_CORE=y
# CONFIG_RMI4_I2C is not set
# CONFIG_RMI4_SPI is not set
# CONFIG_RMI4_SMB is not set
CONFIG_RMI4_F03=y
CONFIG_RMI4_F03_SERIO=y
CONFIG_RMI4_2D_SENSOR=y
CONFIG_RMI4_F11=y
CONFIG_RMI4_F12=y
# CONFIG_RMI4_F1A is not set
# CONFIG_RMI4_F21 is not set
CONFIG_RMI4_F30=y
# CONFIG_RMI4_F34 is not set
CONFIG_RMI4_F3A=y
# CONFIG_RMI4_F54 is not set
# CONFIG_RMI4_F55 is not set

#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not set
# CONFIG_SERIO_PCIPS2 is not set
CONFIG_SERIO_LIBPS2=y
# CONFIG_SERIO_RAW is not set
# CONFIG_SERIO_ALTERA_PS2 is not set
# CONFIG_SERIO_PS2MULT is not set
# CONFIG_SERIO_ARC_PS2 is not set
# CONFIG_SERIO_APBPS2 is not set
# CONFIG_SERIO_GPIO_PS2 is not set
CONFIG_USERIO=y
# CONFIG_GAMEPORT is not set
# 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=y
CONFIG_LEGACY_PTY_COUNT=256
CONFIG_LEGACY_TIOCSTI=y
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 is not set
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_PCILIB=y
CONFIG_SERIAL_8250_PCI=y
# CONFIG_SERIAL_8250_EXAR is not set
# CONFIG_SERIAL_8250_CS is not set
CONFIG_SERIAL_8250_NR_UARTS=32
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y
CONFIG_SERIAL_8250_MANY_PORTS=y
# CONFIG_SERIAL_8250_PCI1XXXX is not set
# CONFIG_SERIAL_8250_DW is not set
# CONFIG_SERIAL_8250_RT288X is not set
CONFIG_SERIAL_8250_LPSS=y
CONFIG_SERIAL_8250_MID=y
CONFIG_SERIAL_8250_PERICOM=y
# CONFIG_SERIAL_8250_NI is not set
# CONFIG_SERIAL_OF_PLATFORM is not set
CONFIG_SERIAL_8250_DWLIB=y

#
# Non-8250 serial port support
#
# CONFIG_SERIAL_MAX3100 is not set
# CONFIG_SERIAL_MAX310X is not set
# CONFIG_SERIAL_UARTLITE is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
# CONFIG_SERIAL_SIFIVE is not set
# CONFIG_SERIAL_LANTIQ is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_SC16IS7XX is not set
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
# CONFIG_SERIAL_ALTERA_UART is not set
# CONFIG_SERIAL_XILINX_PS_UART is not set
# CONFIG_SERIAL_ARC is not set
# CONFIG_SERIAL_RP2 is not set
# CONFIG_SERIAL_FSL_LPUART is not set
# CONFIG_SERIAL_FSL_LINFLEXUART is not set
# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set
# CONFIG_SERIAL_SPRD is not set
# end of Serial drivers

CONFIG_SERIAL_MCTRL_GPIO=y
CONFIG_SERIAL_NONSTANDARD=y
# CONFIG_MOXA_INTELLIO is not set
# CONFIG_MOXA_SMARTIO is not set
CONFIG_N_HDLC=y
# CONFIG_IPWIRELESS is not set
CONFIG_N_GSM=y
CONFIG_NOZOMI=y
CONFIG_NULL_TTY=y
CONFIG_HVC_DRIVER=y
CONFIG_SERIAL_DEV_BUS=y
CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
CONFIG_TTY_PRINTK=y
CONFIG_TTY_PRINTK_LEVEL=6
# CONFIG_PRINTER is not set
# CONFIG_PPDEV is not set
CONFIG_VIRTIO_CONSOLE=y
# CONFIG_IPMI_HANDLER is not set
# CONFIG_SSIF_IPMI_BMC is not set
# CONFIG_IPMB_DEVICE_INTERFACE is not set
CONFIG_HW_RANDOM=y
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
# CONFIG_HW_RANDOM_INTEL is not set
# CONFIG_HW_RANDOM_AMD is not set
# CONFIG_HW_RANDOM_BA431 is not set
# CONFIG_HW_RANDOM_VIA is not set
CONFIG_HW_RANDOM_VIRTIO=y
# CONFIG_HW_RANDOM_CCTRNG is not set
# CONFIG_HW_RANDOM_XIPHERA is not set
# CONFIG_APPLICOM is not set
# CONFIG_DEVMEM is not set
CONFIG_NVRAM=y
# CONFIG_DEVPORT is not set
CONFIG_HPET=y
CONFIG_HPET_MMAP=y
CONFIG_HPET_MMAP_DEFAULT=y
# CONFIG_HANGCHECK_TIMER is not set
CONFIG_TCG_TPM=y
# CONFIG_TCG_TPM2_HMAC is not set
# CONFIG_HW_RANDOM_TPM is not set
CONFIG_TCG_TIS_CORE=y
CONFIG_TCG_TIS=y
# CONFIG_TCG_TIS_SPI is not set
# CONFIG_TCG_TIS_I2C is not set
# CONFIG_TCG_TIS_I2C_CR50 is not set
# CONFIG_TCG_TIS_I2C_ATMEL is not set
# CONFIG_TCG_TIS_I2C_INFINEON is not set
# CONFIG_TCG_TIS_I2C_NUVOTON is not set
# CONFIG_TCG_NSC is not set
# CONFIG_TCG_ATMEL is not set
# CONFIG_TCG_INFINEON is not set
CONFIG_TCG_CRB=y
# CONFIG_TCG_VTPM_PROXY is not set
# CONFIG_TCG_TIS_ST33ZP24_I2C is not set
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
# CONFIG_TELCLOCK is not set
CONFIG_XILLYBUS_CLASS=y
# CONFIG_XILLYBUS is not set
CONFIG_XILLYUSB=y
# end of Character devices

#
# I2C support
#
CONFIG_I2C=y
CONFIG_ACPI_I2C_OPREGION=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MUX=y

#
# Multiplexer I2C Chip support
#
# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
# CONFIG_I2C_MUX_GPIO is not set
# CONFIG_I2C_MUX_GPMUX is not set
# CONFIG_I2C_MUX_LTC4306 is not set
# CONFIG_I2C_MUX_PCA9541 is not set
# CONFIG_I2C_MUX_PCA954x is not set
CONFIG_I2C_MUX_REG=y
# CONFIG_I2C_MUX_MLXCPLD is not set
# end of Multiplexer I2C Chip support

CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_SMBUS=y
CONFIG_I2C_ALGOBIT=y

#
# I2C Hardware Bus support
#

#
# PC SMBus host controller drivers
#
# CONFIG_I2C_ALI1535 is not set
# CONFIG_I2C_ALI1563 is not set
# CONFIG_I2C_ALI15X3 is not set
# CONFIG_I2C_AMD756 is not set
# CONFIG_I2C_AMD8111 is not set
# CONFIG_I2C_AMD_MP2 is not set
CONFIG_I2C_I801=y
# CONFIG_I2C_ISCH is not set
# CONFIG_I2C_ISMT is not set
# CONFIG_I2C_PIIX4 is not set
# CONFIG_I2C_CHT_WC is not set
# CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_NVIDIA_GPU is not set
# CONFIG_I2C_SIS5595 is not set
# CONFIG_I2C_SIS630 is not set
# CONFIG_I2C_SIS96X is not set
# CONFIG_I2C_VIA is not set
# CONFIG_I2C_VIAPRO is not set
# CONFIG_I2C_ZHAOXIN is not set

#
# ACPI drivers
#
# CONFIG_I2C_SCMI is not set

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
# CONFIG_I2C_CBUS_GPIO is not set
CONFIG_I2C_DESIGNWARE_CORE=y
CONFIG_I2C_DESIGNWARE_PLATFORM=y
# CONFIG_I2C_DESIGNWARE_BAYTRAIL is not set
# CONFIG_I2C_DESIGNWARE_PCI is not set
# CONFIG_I2C_EMEV2 is not set
# CONFIG_I2C_GPIO is not set
# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PCA_PLATFORM is not set
# CONFIG_I2C_RK3X is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_XILINX is not set

#
# External I2C/SMBus adapter drivers
#
CONFIG_I2C_DIOLAN_U2C=y
CONFIG_I2C_DLN2=y
CONFIG_I2C_LJCA=y
CONFIG_I2C_CP2615=y
# CONFIG_I2C_PARPORT is not set
# CONFIG_I2C_PCI1XXXX is not set
CONFIG_I2C_ROBOTFUZZ_OSIF=y
# CONFIG_I2C_TAOS_EVM is not set
CONFIG_I2C_TINY_USB=y
CONFIG_I2C_VIPERBOARD=y

#
# Other I2C/SMBus bus drivers
#
# CONFIG_I2C_MLXCPLD is not set
# CONFIG_I2C_VIRTIO is not set
# end of I2C Hardware Bus support

# CONFIG_I2C_STUB is not set
CONFIG_I2C_SLAVE=y
CONFIG_I2C_SLAVE_EEPROM=y
# CONFIG_I2C_SLAVE_TESTUNIT is not set
# 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 is not set

#
# SPI Master Controller Drivers
#
# CONFIG_SPI_ALTERA is not set
# CONFIG_SPI_AXI_SPI_ENGINE is not set
# CONFIG_SPI_BITBANG is not set
# CONFIG_SPI_BUTTERFLY is not set
# CONFIG_SPI_CADENCE is not set
# CONFIG_SPI_CADENCE_QUADSPI is not set
# CONFIG_SPI_CH341 is not set
# CONFIG_SPI_DESIGNWARE is not set
CONFIG_SPI_DLN2=y
# CONFIG_SPI_GPIO is not set
# CONFIG_SPI_LM70_LLP is not set
# CONFIG_SPI_FSL_SPI is not set
CONFIG_SPI_LJCA=y
# CONFIG_SPI_MICROCHIP_CORE_QSPI is not set
# CONFIG_SPI_MICROCHIP_CORE_SPI is not set
# CONFIG_SPI_LANTIQ_SSC is not set
# CONFIG_SPI_OC_TINY is not set
# CONFIG_SPI_PCI1XXXX is not set
# CONFIG_SPI_PXA2XX is not set
# CONFIG_SPI_SC18IS602 is not set
# CONFIG_SPI_SIFIVE is not set
# CONFIG_SPI_MXIC is not set
# CONFIG_SPI_VIRTIO is not set
# CONFIG_SPI_XCOMM is not set
# CONFIG_SPI_XILINX is not set

#
# SPI Multiplexer support
#
# CONFIG_SPI_MUX is not set

#
# SPI Protocol Masters
#
# CONFIG_SPI_SPIDEV is not set
# CONFIG_SPI_LOOPBACK_TEST is not set
# CONFIG_SPI_TLE62X0 is not set
# CONFIG_SPI_SLAVE is not set
CONFIG_SPI_DYNAMIC=y
# CONFIG_SPMI is not set
# CONFIG_HSI is not set
CONFIG_PPS=y
# CONFIG_PPS_DEBUG is not set

#
# PPS clients support
#
# CONFIG_PPS_CLIENT_KTIMER is not set
# CONFIG_PPS_CLIENT_LDISC is not set
# CONFIG_PPS_CLIENT_PARPORT is not set
# CONFIG_PPS_CLIENT_GPIO is not set
# CONFIG_PPS_GENERATOR is not set

#
# PTP clock support
#
CONFIG_PTP_1588_CLOCK=y
CONFIG_PTP_1588_CLOCK_OPTIONAL=y

#
# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
#
CONFIG_PTP_1588_CLOCK_KVM=y
CONFIG_PTP_1588_CLOCK_VMCLOCK=y
# CONFIG_PTP_1588_CLOCK_IDT82P33 is not set
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
# CONFIG_PTP_1588_CLOCK_FC3W is not set
# CONFIG_PTP_1588_CLOCK_MOCK is not set
# CONFIG_PTP_1588_CLOCK_VMW is not set
# CONFIG_PTP_1588_CLOCK_OCP is not set
# CONFIG_PTP_NETC_V4_TIMER is not set
# end of PTP clock support

#
# DPLL device support
#
# CONFIG_ZL3073X_I2C is not set
# CONFIG_ZL3073X_SPI is not set
# end of DPLL device support

# CONFIG_PINCTRL is not set
CONFIG_GPIOLIB_LEGACY=y
CONFIG_GPIOLIB=y
CONFIG_GPIOLIB_FASTPATH_LIMIT=512
CONFIG_OF_GPIO=y
CONFIG_GPIO_ACPI=y
CONFIG_GPIOLIB_IRQCHIP=y
# CONFIG_DEBUG_GPIO is not set
# CONFIG_GPIO_SYSFS is not set
# CONFIG_GPIO_CDEV is not set

#
# Memory mapped GPIO drivers
#
# CONFIG_GPIO_74XX_MMIO is not set
# CONFIG_GPIO_ALTERA is not set
# CONFIG_GPIO_AMDPT is not set
# CONFIG_GPIO_BY_PINCTRL is not set
# CONFIG_GPIO_CADENCE is not set
# CONFIG_GPIO_DWAPB is not set
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
# CONFIG_GPIO_GRANITERAPIDS is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_HLWD is not set
# CONFIG_GPIO_ICH is not set
# CONFIG_GPIO_LOGICVC is not set
# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_POLARFIRE_SOC is not set
# CONFIG_GPIO_SIFIVE is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_XILINX is not set
# CONFIG_GPIO_AMD_FCH is not set
# end of Memory mapped GPIO drivers

#
# Port-mapped I/O GPIO drivers
#
# CONFIG_GPIO_VX855 is not set
# CONFIG_GPIO_F7188X is not set
# CONFIG_GPIO_IT87 is not set
# CONFIG_GPIO_NOVALAKE is not set
# CONFIG_GPIO_SCH311X is not set
# CONFIG_GPIO_WINBOND is not set
# CONFIG_GPIO_WS16C48 is not set
# end of Port-mapped I/O GPIO drivers

#
# I2C GPIO expanders
#
# CONFIG_GPIO_ADNP is not set
# CONFIG_GPIO_FXL6408 is not set
# CONFIG_GPIO_DS4520 is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX732X is not set
# CONFIG_GPIO_PCA953X is not set
# CONFIG_GPIO_PCA9570 is not set
# CONFIG_GPIO_PCF857X is not set
# CONFIG_GPIO_TPIC2810 is not set
# end of I2C GPIO expanders

#
# MFD GPIO expanders
#
CONFIG_GPIO_DLN2=y
CONFIG_GPIO_LJCA=y
# CONFIG_GPIO_TWL4030 is not set
# CONFIG_GPIO_WHISKEY_COVE is not set
# end of MFD GPIO expanders

#
# PCI GPIO expanders
#
# CONFIG_GPIO_AMD8111 is not set
# CONFIG_GPIO_BT8XX is not set
# CONFIG_GPIO_ML_IOH is not set
# CONFIG_GPIO_PCI_IDIO_16 is not set
# CONFIG_GPIO_PCIE_IDIO_24 is not set
# CONFIG_GPIO_RDC321X is not set
# CONFIG_GPIO_SODAVILLE is not set
# end of PCI GPIO expanders

#
# SPI GPIO expanders
#
# CONFIG_GPIO_74X164 is not set
# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_PISOSR is not set
# CONFIG_GPIO_XRA1403 is not set
# end of SPI GPIO expanders

#
# USB GPIO expanders
#
CONFIG_GPIO_VIPERBOARD=y
# CONFIG_GPIO_MPSSE is not set
# end of USB GPIO expanders

#
# Virtual GPIO drivers
#
# CONFIG_GPIO_AGGREGATOR is not set
# CONFIG_GPIO_LATCH is not set
# CONFIG_GPIO_LINE_MUX is not set
# CONFIG_GPIO_MOCKUP is not set
# CONFIG_GPIO_VIRTIO is not set
# CONFIG_GPIO_SIM is not set
# end of Virtual GPIO drivers

#
# GPIO Debugging utilities
#
# CONFIG_GPIO_SLOPPY_LOGIC_ANALYZER is not set
# CONFIG_GPIO_VIRTUSER is not set
# end of GPIO Debugging utilities

# CONFIG_W1 is not set
# CONFIG_POWER_RESET is not set
# CONFIG_POWER_SEQUENCING is not set
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
CONFIG_POWER_SUPPLY_HWMON=y
# CONFIG_GENERIC_ADC_BATTERY is not set
# CONFIG_IP5XXX_POWER is not set
# CONFIG_TEST_POWER is not set
# CONFIG_CHARGER_ADP5061 is not set
# CONFIG_BATTERY_CHAGALL is not set
# CONFIG_BATTERY_CW2015 is not set
# CONFIG_BATTERY_DS2780 is not set
# CONFIG_BATTERY_DS2781 is not set
# CONFIG_BATTERY_DS2782 is not set
# CONFIG_BATTERY_SAMSUNG_SDI is not set
# CONFIG_BATTERY_S2MU005 is not set
# CONFIG_BATTERY_SBS is not set
# CONFIG_CHARGER_SBS is not set
# CONFIG_MANAGER_SBS is not set
# CONFIG_BATTERY_BQ27XXX is not set
# CONFIG_BATTERY_MAX17040 is not set
# CONFIG_BATTERY_MAX17042 is not set
# CONFIG_BATTERY_MAX1720X is not set
CONFIG_CHARGER_ISP1704=y
# CONFIG_CHARGER_MAX8903 is not set
# CONFIG_CHARGER_TWL4030 is not set
# CONFIG_CHARGER_TWL6030 is not set
# CONFIG_CHARGER_LP8727 is not set
# CONFIG_CHARGER_GPIO is not set
# CONFIG_CHARGER_MANAGER is not set
# CONFIG_CHARGER_LT3651 is not set
# CONFIG_CHARGER_LTC4162L is not set
# CONFIG_CHARGER_DETECTOR_MAX14656 is not set
# CONFIG_CHARGER_MAX77976 is not set
# CONFIG_CHARGER_MAX8971 is not set
# CONFIG_CHARGER_MT6360 is not set
# CONFIG_CHARGER_MT6370 is not set
# CONFIG_CHARGER_BQ2415X is not set
CONFIG_CHARGER_BQ24190=y
# CONFIG_CHARGER_BQ24257 is not set
# CONFIG_CHARGER_BQ24735 is not set
# CONFIG_CHARGER_BQ2515X is not set
# CONFIG_CHARGER_BQ25890 is not set
# CONFIG_CHARGER_BQ25980 is not set
# CONFIG_CHARGER_BQ256XX is not set
# CONFIG_CHARGER_SMB347 is not set
# CONFIG_BATTERY_GAUGE_LTC2941 is not set
# CONFIG_BATTERY_GOLDFISH is not set
# CONFIG_BATTERY_RT5033 is not set
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_RT9467 is not set
# CONFIG_CHARGER_RT9471 is not set
# CONFIG_CHARGER_RT9756 is not set
# CONFIG_FUEL_GAUGE_STC3117 is not set
# CONFIG_CHARGER_UCS1002 is not set
# CONFIG_CHARGER_BD99954 is not set
# CONFIG_BATTERY_SURFACE is not set
# CONFIG_CHARGER_SURFACE is not set
# CONFIG_BATTERY_UG3105 is not set
# CONFIG_FUEL_GAUGE_MM8013 is not set
CONFIG_HWMON=y
# CONFIG_HWMON_DEBUG_CHIP is not set

#
# Native drivers
#
# CONFIG_SENSORS_ABITUGURU is not set
# CONFIG_SENSORS_ABITUGURU3 is not set
# CONFIG_SENSORS_AD7314 is not set
# CONFIG_SENSORS_AD7414 is not set
# CONFIG_SENSORS_AD7418 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1029 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM1177 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_ADT7310 is not set
# CONFIG_SENSORS_ADT7410 is not set
# CONFIG_SENSORS_ADT7411 is not set
# CONFIG_SENSORS_ADT7462 is not set
# CONFIG_SENSORS_ADT7470 is not set
# CONFIG_SENSORS_ADT7475 is not set
# CONFIG_SENSORS_AHT10 is not set
CONFIG_SENSORS_AQUACOMPUTER_D5NEXT=y
# CONFIG_SENSORS_AS370 is not set
# CONFIG_SENSORS_ASC7621 is not set
# CONFIG_SENSORS_ASUS_ROG_RYUJIN is not set
# CONFIG_SENSORS_AXI_FAN_CONTROL is not set
# CONFIG_SENSORS_K8TEMP is not set
# CONFIG_SENSORS_K10TEMP is not set
# CONFIG_SENSORS_FAM15H_POWER is not set
# CONFIG_SENSORS_APPLESMC is not set
# CONFIG_SENSORS_ASB100 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_CHIPCAP2 is not set
CONFIG_SENSORS_CORSAIR_CPRO=y
CONFIG_SENSORS_CORSAIR_PSU=y
# CONFIG_SENSORS_DRIVETEMP is not set
# CONFIG_SENSORS_DS620 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_DELL_SMM is not set
# CONFIG_SENSORS_I5K_AMB is not set
# CONFIG_SENSORS_F71805F is not set
# CONFIG_SENSORS_F71882FG is not set
# CONFIG_SENSORS_F75375S is not set
# CONFIG_SENSORS_FSCHMD is not set
# CONFIG_SENSORS_FTSTEUTATES is not set
CONFIG_SENSORS_GIGABYTE_WATERFORCE=y
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_GPD is not set
# CONFIG_SENSORS_G760A is not set
# CONFIG_SENSORS_G762 is not set
# CONFIG_SENSORS_GPIO_FAN is not set
# CONFIG_SENSORS_HIH6130 is not set
# CONFIG_SENSORS_HS3001 is not set
# CONFIG_SENSORS_HTU31 is not set
# CONFIG_SENSORS_IIO_HWMON is not set
# CONFIG_SENSORS_I5500 is not set
# CONFIG_SENSORS_CORETEMP is not set
# CONFIG_SENSORS_ISL28022 is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_JC42 is not set
CONFIG_SENSORS_POWERZ=y
# CONFIG_SENSORS_POWR1220 is not set
# CONFIG_SENSORS_LATTEPANDA_SIGMA_EC is not set
# CONFIG_SENSORS_LENOVO_EC is not set
# CONFIG_SENSORS_LINEAGE is not set
# CONFIG_SENSORS_LTC2945 is not set
# CONFIG_SENSORS_LTC2947_I2C is not set
# CONFIG_SENSORS_LTC2947_SPI is not set
# CONFIG_SENSORS_LTC2990 is not set
# CONFIG_SENSORS_LTC2991 is not set
# CONFIG_SENSORS_LTC2992 is not set
# CONFIG_SENSORS_LTC4151 is not set
# CONFIG_SENSORS_LTC4215 is not set
# CONFIG_SENSORS_LTC4222 is not set
# CONFIG_SENSORS_LTC4245 is not set
# CONFIG_SENSORS_LTC4260 is not set
# CONFIG_SENSORS_LTC4261 is not set
# CONFIG_SENSORS_LTC4282 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX127 is not set
# CONFIG_SENSORS_MAX16065 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_MAX1668 is not set
# CONFIG_SENSORS_MAX197 is not set
# CONFIG_SENSORS_MAX31722 is not set
# CONFIG_SENSORS_MAX31730 is not set
# CONFIG_SENSORS_MAX31760 is not set
# CONFIG_MAX31827 is not set
# CONFIG_SENSORS_MAX6620 is not set
# CONFIG_SENSORS_MAX6621 is not set
# CONFIG_SENSORS_MAX6639 is not set
# CONFIG_SENSORS_MAX6650 is not set
# CONFIG_SENSORS_MAX6697 is not set
# CONFIG_SENSORS_MAX31790 is not set
# CONFIG_SENSORS_MC34VR500 is not set
# CONFIG_SENSORS_MCP3021 is not set
# CONFIG_SENSORS_MCP9982 is not set
# CONFIG_SENSORS_TC654 is not set
# CONFIG_SENSORS_TPS23861 is not set
# CONFIG_SENSORS_MR75203 is not set
# CONFIG_SENSORS_ADCXX is not set
# CONFIG_SENSORS_LM63 is not set
# CONFIG_SENSORS_LM70 is not set
# CONFIG_SENSORS_LM73 is not set
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM87 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_LM93 is not set
# CONFIG_SENSORS_LM95234 is not set
# CONFIG_SENSORS_LM95241 is not set
# CONFIG_SENSORS_LM95245 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_PC87427 is not set
# CONFIG_SENSORS_NTC_THERMISTOR is not set
# CONFIG_SENSORS_NCT6683 is not set
# CONFIG_SENSORS_NCT6775 is not set
# CONFIG_SENSORS_NCT6775_I2C is not set
# CONFIG_SENSORS_NCT7363 is not set
# CONFIG_SENSORS_NCT7802 is not set
# CONFIG_SENSORS_NCT7904 is not set
# CONFIG_SENSORS_NPCM7XX is not set
CONFIG_SENSORS_NZXT_KRAKEN2=y
# CONFIG_SENSORS_NZXT_KRAKEN3 is not set
CONFIG_SENSORS_NZXT_SMART2=y
# CONFIG_SENSORS_OCC_P8_I2C is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_PMBUS is not set
# CONFIG_SENSORS_PT5161L is not set
# CONFIG_SENSORS_SBTSI is not set
# CONFIG_SENSORS_SHT15 is not set
# CONFIG_SENSORS_SHT21 is not set
# CONFIG_SENSORS_SHT3x is not set
# CONFIG_SENSORS_SHT4x is not set
# CONFIG_SENSORS_SHTC1 is not set
# CONFIG_SENSORS_SIS5595 is not set
# CONFIG_SENSORS_DME1737 is not set
# CONFIG_SENSORS_EMC1403 is not set
# CONFIG_SENSORS_EMC2103 is not set
# CONFIG_SENSORS_EMC2305 is not set
# CONFIG_SENSORS_EMC6W201 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47M192 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_SCH5627 is not set
# CONFIG_SENSORS_SCH5636 is not set
# CONFIG_SENSORS_STTS751 is not set
# CONFIG_SENSORS_SURFACE_FAN is not set
# CONFIG_SENSORS_SURFACE_TEMP is not set
# CONFIG_SENSORS_ADC128D818 is not set
# CONFIG_SENSORS_ADS7828 is not set
# CONFIG_SENSORS_ADS7871 is not set
# CONFIG_SENSORS_AMC6821 is not set
# CONFIG_SENSORS_INA209 is not set
# CONFIG_SENSORS_INA2XX is not set
# CONFIG_SENSORS_INA238 is not set
# CONFIG_SENSORS_INA3221 is not set
# CONFIG_SENSORS_SPD5118 is not set
# CONFIG_SENSORS_TC74 is not set
# CONFIG_SENSORS_THMC50 is not set
# CONFIG_SENSORS_TMP102 is not set
# CONFIG_SENSORS_TMP103 is not set
# CONFIG_SENSORS_TMP108 is not set
# CONFIG_SENSORS_TMP401 is not set
# CONFIG_SENSORS_TMP421 is not set
# CONFIG_SENSORS_TMP464 is not set
# CONFIG_SENSORS_TMP513 is not set
# CONFIG_SENSORS_TSC1641 is not set
# CONFIG_SENSORS_VIA_CPUTEMP is not set
# CONFIG_SENSORS_VIA686A is not set
# CONFIG_SENSORS_VT1211 is not set
# CONFIG_SENSORS_VT8231 is not set
# CONFIG_SENSORS_W83773G is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83791D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83793 is not set
# CONFIG_SENSORS_W83795 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_SENSORS_XGENE is not set
# CONFIG_SENSORS_YOGAFAN is not set

#
# ACPI drivers
#
# CONFIG_SENSORS_ACPI_POWER is not set
# CONFIG_SENSORS_ATK0110 is not set
# CONFIG_SENSORS_ASUS_WMI is not set
# CONFIG_SENSORS_ASUS_EC is not set
# CONFIG_SENSORS_HP_WMI is not set
CONFIG_THERMAL=y
CONFIG_THERMAL_NETLINK=y
# CONFIG_THERMAL_STATISTICS is not set
# CONFIG_THERMAL_DEBUGFS is not set
# CONFIG_THERMAL_CORE_TESTING is not set
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
CONFIG_THERMAL_HWMON=y
# CONFIG_THERMAL_OF is not set
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_GOV_FAIR_SHARE is not set
CONFIG_THERMAL_GOV_STEP_WISE=y
# CONFIG_THERMAL_GOV_BANG_BANG is not set
# CONFIG_THERMAL_GOV_USER_SPACE is not set
# CONFIG_PCIE_THERMAL is not set
# CONFIG_THERMAL_EMULATION is not set
# CONFIG_THERMAL_MMIO is not set

#
# Intel thermal drivers
#
# CONFIG_INTEL_POWERCLAMP is not set
CONFIG_X86_THERMAL_VECTOR=y
# CONFIG_X86_PKG_TEMP_THERMAL is not set
# CONFIG_INTEL_SOC_DTS_THERMAL is not set

#
# ACPI INT340X thermal drivers
#
# CONFIG_INT340X_THERMAL is not set
# end of ACPI INT340X thermal drivers

# CONFIG_INTEL_BXT_PMIC_THERMAL is not set
# CONFIG_INTEL_PCH_THERMAL is not set
# CONFIG_INTEL_TCC_COOLING is not set
# CONFIG_INTEL_HFI_THERMAL is not set
# end of Intel thermal drivers

# CONFIG_GENERIC_ADC_THERMAL is not set
CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_CORE is not set
# CONFIG_WATCHDOG_NOWAYOUT is not set
CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
CONFIG_WATCHDOG_OPEN_TIMEOUT=0
# CONFIG_WATCHDOG_SYSFS is not set
# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set

#
# Watchdog Pretimeout Governors
#

#
# Watchdog Device Drivers
#
# CONFIG_SOFT_WATCHDOG is not set
# CONFIG_GPIO_WATCHDOG is not set
# CONFIG_LENOVO_SE10_WDT is not set
# CONFIG_LENOVO_SE30_WDT is not set
# CONFIG_WDAT_WDT is not set
# CONFIG_XILINX_WATCHDOG is not set
# CONFIG_ZIIRAVE_WATCHDOG is not set
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_DW_WATCHDOG is not set
# CONFIG_TWL4030_WATCHDOG is not set
# CONFIG_MAX63XX_WATCHDOG is not set
# CONFIG_RETU_WATCHDOG is not set
# CONFIG_ACQUIRE_WDT is not set
# CONFIG_ADVANTECH_WDT is not set
# CONFIG_ADVANTECH_EC_WDT is not set
# CONFIG_ALIM1535_WDT is not set
# CONFIG_ALIM7101_WDT is not set
# CONFIG_EBC_C384_WDT is not set
# CONFIG_EXAR_WDT is not set
# CONFIG_F71808E_WDT is not set
# CONFIG_SP5100_TCO is not set
# CONFIG_SBC_FITPC2_WATCHDOG is not set
# CONFIG_EUROTECH_WDT is not set
# CONFIG_IB700_WDT is not set
# CONFIG_IBMASR is not set
# CONFIG_WAFER_WDT is not set
# CONFIG_I6300ESB_WDT is not set
# CONFIG_IE6XX_WDT is not set
# CONFIG_INTEL_OC_WATCHDOG is not set
# CONFIG_ITCO_WDT is not set
# CONFIG_IT8712F_WDT is not set
# CONFIG_IT87_WDT is not set
# CONFIG_HP_WATCHDOG is not set
# CONFIG_SC1200_WDT is not set
# CONFIG_PC87413_WDT is not set
# CONFIG_NV_TCO is not set
# CONFIG_60XX_WDT is not set
# CONFIG_SMSC_SCH311X_WDT is not set
# CONFIG_SMSC37B787_WDT is not set
# CONFIG_TQMX86_WDT is not set
# CONFIG_VIA_WDT is not set
# CONFIG_W83627HF_WDT is not set
# CONFIG_W83877F_WDT is not set
# CONFIG_W83977F_WDT is not set
# CONFIG_MACHZ_WDT is not set
# CONFIG_SBC_EPX_C3_WATCHDOG is not set
# CONFIG_INTEL_MEI_WDT is not set
# CONFIG_NI903X_WDT is not set
# CONFIG_NIC7018_WDT is not set
# CONFIG_MEN_A21_WDT is not set

#
# PCI-based Watchdog Cards
#
# CONFIG_PCIPCWATCHDOG is not set
# CONFIG_WDTPCI is not set

#
# USB-based Watchdog Cards
#
CONFIG_USBPCWATCHDOG=y
CONFIG_SSB_POSSIBLE=y
CONFIG_SSB=y
CONFIG_SSB_PCIHOST_POSSIBLE=y
# CONFIG_SSB_PCIHOST is not set
CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
# CONFIG_SSB_PCMCIAHOST is not set
CONFIG_SSB_SDIOHOST_POSSIBLE=y
# CONFIG_SSB_SDIOHOST is not set
# CONFIG_SSB_DRIVER_GPIO is not set
CONFIG_BCMA_POSSIBLE=y
CONFIG_BCMA=y
CONFIG_BCMA_HOST_PCI_POSSIBLE=y
# CONFIG_BCMA_HOST_PCI is not set
# CONFIG_BCMA_HOST_SOC is not set
# CONFIG_BCMA_DRIVER_PCI is not set
# CONFIG_BCMA_DRIVER_GMAC_CMN is not set
# CONFIG_BCMA_DRIVER_GPIO is not set
# CONFIG_BCMA_DEBUG is not set

#
# Multifunction device drivers
#
CONFIG_MFD_CORE=y
# CONFIG_MFD_ADP5585 is not set
# CONFIG_MFD_ACT8945A is not set
# CONFIG_MFD_AS3711 is not set
# CONFIG_MFD_SMPRO is not set
# CONFIG_MFD_AS3722 is not set
# CONFIG_PMIC_ADP5520 is not set
# CONFIG_MFD_AAT2870_CORE is not set
# CONFIG_MFD_ATMEL_FLEXCOM is not set
# CONFIG_MFD_ATMEL_HLCDC is not set
# CONFIG_MFD_BCM590XX is not set
# CONFIG_MFD_BD9571MWV is not set
# CONFIG_MFD_AXP20X_I2C is not set
# CONFIG_MFD_CGBC is not set
# CONFIG_MFD_CS40L50_I2C is not set
# CONFIG_MFD_CS40L50_SPI is not set
# CONFIG_MFD_CS42L43_I2C is not set
# CONFIG_MFD_CS42L43_SDW is not set
# CONFIG_MFD_LOCHNAGAR is not set
# CONFIG_MFD_MADERA is not set
# CONFIG_PMIC_DA903X is not set
# CONFIG_MFD_DA9052_SPI is not set
# CONFIG_MFD_DA9052_I2C is not set
# CONFIG_MFD_DA9055 is not set
# CONFIG_MFD_DA9062 is not set
# CONFIG_MFD_DA9063 is not set
# CONFIG_MFD_DA9150 is not set
CONFIG_MFD_DLN2=y
# CONFIG_MFD_GATEWORKS_GSC is not set
# CONFIG_MFD_MC13XXX_SPI is not set
# CONFIG_MFD_MC13XXX_I2C is not set
# CONFIG_MFD_MP2629 is not set
# CONFIG_MFD_PF1550 is not set
# CONFIG_MFD_HI6421_PMIC is not set
# CONFIG_MFD_INTEL_QUARK_I2C_GPIO is not set
CONFIG_LPC_ICH=y
# CONFIG_LPC_SCH is not set
# CONFIG_INTEL_SOC_PMIC is not set
CONFIG_INTEL_SOC_PMIC_BXTWC=y
CONFIG_INTEL_SOC_PMIC_CHTWC=y
# CONFIG_INTEL_SOC_PMIC_CHTDC_TI is not set
# CONFIG_MFD_INTEL_LPSS_ACPI is not set
# CONFIG_MFD_INTEL_LPSS_PCI is not set
CONFIG_MFD_INTEL_PMC_BXT=y
# CONFIG_MFD_IQS62X is not set
# CONFIG_MFD_JANZ_CMODIO is not set
# CONFIG_MFD_KEMPLD is not set
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
# CONFIG_MFD_88PM860X is not set
# CONFIG_MFD_88PM886_PMIC is not set
# CONFIG_MFD_MAX5970 is not set
# CONFIG_MFD_MAX14577 is not set
# CONFIG_MFD_MAX77541 is not set
# CONFIG_MFD_MAX77620 is not set
# CONFIG_MFD_MAX77650 is not set
# CONFIG_MFD_MAX77686 is not set
# CONFIG_MFD_MAX77693 is not set
# CONFIG_MFD_MAX77705 is not set
# CONFIG_MFD_MAX77714 is not set
# CONFIG_MFD_MAX77759 is not set
# CONFIG_MFD_MAX77843 is not set
# CONFIG_MFD_MAX8907 is not set
# CONFIG_MFD_MAX8925 is not set
# CONFIG_MFD_MAX8997 is not set
# CONFIG_MFD_MAX8998 is not set
CONFIG_MFD_MT6360=y
CONFIG_MFD_MT6370=y
# CONFIG_MFD_MT6397 is not set
# CONFIG_MFD_MENF21BMC is not set
# CONFIG_MFD_NCT6694 is not set
# CONFIG_MFD_OCELOT is not set
# CONFIG_EZX_PCAP is not set
# CONFIG_MFD_CPCAP is not set
CONFIG_MFD_VIPERBOARD=y
# CONFIG_MFD_NTXEC is not set
CONFIG_MFD_RETU=y
# CONFIG_MFD_SY7636A is not set
# CONFIG_MFD_RDC321X is not set
# CONFIG_MFD_RT4831 is not set
# CONFIG_MFD_RT5033 is not set
# CONFIG_MFD_RT5120 is not set
# CONFIG_MFD_RC5T583 is not set
# CONFIG_MFD_RK8XX_I2C is not set
# CONFIG_MFD_RK8XX_SPI is not set
# CONFIG_MFD_RN5T618 is not set
# CONFIG_MFD_SEC_I2C is not set
# CONFIG_MFD_SI476X_CORE is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_MFD_SKY81452 is not set
# CONFIG_MFD_STMPE is not set
CONFIG_MFD_SYSCON=y
# CONFIG_MFD_LP3943 is not set
# CONFIG_MFD_LP8788 is not set
# CONFIG_MFD_TI_LMU is not set
# CONFIG_MFD_BQ257XX is not set
# CONFIG_MFD_PALMAS is not set
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
# CONFIG_MFD_TPS65086 is not set
# CONFIG_MFD_TPS65090 is not set
# CONFIG_MFD_TPS65217 is not set
# CONFIG_MFD_TI_LP873X is not set
# CONFIG_MFD_TI_LP87565 is not set
# CONFIG_MFD_TPS65218 is not set
# CONFIG_MFD_TPS65219 is not set
# CONFIG_MFD_TPS6586X is not set
# CONFIG_MFD_TPS65910 is not set
# CONFIG_MFD_TPS65912_I2C is not set
# CONFIG_MFD_TPS65912_SPI is not set
# CONFIG_MFD_TPS6594_I2C is not set
# CONFIG_MFD_TPS6594_SPI is not set
CONFIG_TWL4030_CORE=y
# CONFIG_MFD_TWL4030_AUDIO is not set
# CONFIG_TWL6040_CORE is not set
# CONFIG_MFD_LM3533 is not set
# CONFIG_MFD_TC3589X is not set
# CONFIG_MFD_TQMX86 is not set
# CONFIG_MFD_VX855 is not set
# CONFIG_MFD_ARIZONA_I2C is not set
# CONFIG_MFD_ARIZONA_SPI is not set
# CONFIG_MFD_WM8400 is not set
# CONFIG_MFD_WM831X_I2C is not set
# CONFIG_MFD_WM831X_SPI is not set
# CONFIG_MFD_WM8350_I2C is not set
# CONFIG_MFD_WM8994 is not set
# CONFIG_MFD_ROHM_BD718XX is not set
# CONFIG_MFD_ROHM_BD71828 is not set
# CONFIG_MFD_ROHM_BD957XMUF is not set
# CONFIG_MFD_ROHM_BD96801 is not set
# CONFIG_MFD_STPMIC1 is not set
# CONFIG_MFD_STMFX is not set
# CONFIG_MFD_ATC260X_I2C is not set
# CONFIG_MFD_QCOM_PM8008 is not set
# CONFIG_RAVE_SP_CORE is not set
# CONFIG_MFD_INTEL_M10_BMC_SPI is not set
# CONFIG_MFD_QNAP_MCU is not set
# CONFIG_MFD_RSMU_I2C is not set
# CONFIG_MFD_RSMU_SPI is not set
# CONFIG_MFD_UPBOARD_FPGA is not set
# CONFIG_MFD_MAX7360 is not set
# end of Multifunction device drivers

CONFIG_REGULATOR=y
# CONFIG_REGULATOR_DEBUG is not set
CONFIG_REGULATOR_FIXED_VOLTAGE=y
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
# CONFIG_REGULATOR_NETLINK_EVENTS is not set
# CONFIG_REGULATOR_88PG86X is not set
# CONFIG_REGULATOR_ACT8865 is not set
# CONFIG_REGULATOR_AD5398 is not set
# CONFIG_REGULATOR_ADP5055 is not set
# CONFIG_REGULATOR_AW37503 is not set
# CONFIG_REGULATOR_DA9121 is not set
# CONFIG_REGULATOR_DA9210 is not set
# CONFIG_REGULATOR_DA9211 is not set
# CONFIG_REGULATOR_FAN53555 is not set
# CONFIG_REGULATOR_FAN53880 is not set
# CONFIG_REGULATOR_GPIO is not set
# CONFIG_REGULATOR_ISL9305 is not set
# CONFIG_REGULATOR_ISL6271A is not set
# CONFIG_REGULATOR_FP9931 is not set
# CONFIG_REGULATOR_LP3971 is not set
# CONFIG_REGULATOR_LP3972 is not set
# CONFIG_REGULATOR_LP872X is not set
# CONFIG_REGULATOR_LP8755 is not set
# CONFIG_REGULATOR_LTC3589 is not set
# CONFIG_REGULATOR_LTC3676 is not set
# CONFIG_REGULATOR_MAX1586 is not set
# CONFIG_REGULATOR_MAX77503 is not set
# CONFIG_REGULATOR_MAX77675 is not set
# CONFIG_REGULATOR_MAX77857 is not set
# CONFIG_REGULATOR_MAX8649 is not set
# CONFIG_REGULATOR_MAX8660 is not set
# CONFIG_REGULATOR_MAX8893 is not set
# CONFIG_REGULATOR_MAX8952 is not set
# CONFIG_REGULATOR_MAX20086 is not set
# CONFIG_REGULATOR_MAX20411 is not set
# CONFIG_REGULATOR_MAX77826 is not set
# CONFIG_REGULATOR_MAX77838 is not set
# CONFIG_REGULATOR_MCP16502 is not set
# CONFIG_REGULATOR_MP5416 is not set
# CONFIG_REGULATOR_MP8859 is not set
# CONFIG_REGULATOR_MP886X is not set
# CONFIG_REGULATOR_MPQ7920 is not set
# CONFIG_REGULATOR_MT6311 is not set
# CONFIG_REGULATOR_MT6360 is not set
# CONFIG_REGULATOR_MT6370 is not set
# CONFIG_REGULATOR_PCA9450 is not set
# CONFIG_REGULATOR_PF9453 is not set
# CONFIG_REGULATOR_PF0900 is not set
# CONFIG_REGULATOR_PF530X is not set
# CONFIG_REGULATOR_PF8X00 is not set
# CONFIG_REGULATOR_PFUZE100 is not set
# CONFIG_REGULATOR_PV88060 is not set
# CONFIG_REGULATOR_PV88080 is not set
# CONFIG_REGULATOR_PV88090 is not set
# CONFIG_REGULATOR_RAA215300 is not set
# CONFIG_REGULATOR_RT4801 is not set
# CONFIG_REGULATOR_RT4803 is not set
# CONFIG_REGULATOR_RT5133 is not set
# CONFIG_REGULATOR_RT5190A is not set
# CONFIG_REGULATOR_RT5739 is not set
# CONFIG_REGULATOR_RT5759 is not set
# CONFIG_REGULATOR_RT6160 is not set
# CONFIG_REGULATOR_RT6190 is not set
# CONFIG_REGULATOR_RT6245 is not set
# CONFIG_REGULATOR_RT8092 is not set
# CONFIG_REGULATOR_RTQ2134 is not set
# CONFIG_REGULATOR_RTMV20 is not set
# CONFIG_REGULATOR_RTQ6752 is not set
# CONFIG_REGULATOR_RTQ2208 is not set
# CONFIG_REGULATOR_SLG51000 is not set
# CONFIG_REGULATOR_SY8106A is not set
# CONFIG_REGULATOR_SY8824X is not set
# CONFIG_REGULATOR_SY8827N is not set
# CONFIG_REGULATOR_TPS51632 is not set
# CONFIG_REGULATOR_TPS62360 is not set
# CONFIG_REGULATOR_TPS6286X is not set
# CONFIG_REGULATOR_TPS6287X is not set
# CONFIG_REGULATOR_TPS65023 is not set
# CONFIG_REGULATOR_TPS6507X is not set
# CONFIG_REGULATOR_TPS65132 is not set
# CONFIG_REGULATOR_TPS65185 is not set
# CONFIG_REGULATOR_TPS6524X is not set
CONFIG_REGULATOR_TWL4030=y
# CONFIG_REGULATOR_VCTRL is not set
CONFIG_RC_CORE=y
# CONFIG_LIRC is not set
# CONFIG_RC_MAP is not set
# CONFIG_RC_DECODERS is not set
CONFIG_RC_DEVICES=y
# CONFIG_IR_ENE is not set
# CONFIG_IR_FINTEK is not set
# CONFIG_IR_GPIO_CIR is not set
# CONFIG_IR_HIX5HD2 is not set
CONFIG_IR_IGORPLUGUSB=y
CONFIG_IR_IGUANA=y
CONFIG_IR_IMON=y
CONFIG_IR_IMON_RAW=y
# CONFIG_IR_ITE_CIR is not set
CONFIG_IR_MCEUSB=y
# CONFIG_IR_NUVOTON is not set
CONFIG_IR_REDRAT3=y
# CONFIG_IR_SERIAL is not set
CONFIG_IR_STREAMZAP=y
CONFIG_IR_TOY=y
CONFIG_IR_TTUSBIR=y
# CONFIG_IR_WINBOND_CIR is not set
CONFIG_RC_ATI_REMOTE=y
# CONFIG_RC_LOOPBACK is not set
CONFIG_RC_XBOX_DVD=y
CONFIG_CEC_CORE=y

#
# CEC support
#
# CONFIG_MEDIA_CEC_RC is not set
CONFIG_MEDIA_CEC_SUPPORT=y
# CONFIG_CEC_CH7322 is not set
# CONFIG_CEC_NXP_TDA9950 is not set
# CONFIG_CEC_GPIO is not set
# CONFIG_CEC_SECO is not set
# CONFIG_USB_EXTRON_DA_HD_4K_PLUS_CEC is not set
CONFIG_USB_PULSE8_CEC=y
CONFIG_USB_RAINSHADOW_CEC=y
# end of CEC support

CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_SUPPORT_FILTER=y
# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set

#
# 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=y
CONFIG_MEDIA_PLATFORM_SUPPORT=y
CONFIG_MEDIA_TEST_SUPPORT=y
# end of Media device types

CONFIG_VIDEO_DEV=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_DVB_CORE=y

#
# 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=y
CONFIG_V4L2_MEM2MEM_DEV=y
# end of Video4Linux options

#
# Media controller options
#
CONFIG_MEDIA_CONTROLLER_DVB=y
# end of Media controller options

#
# Digital TV options
#
# CONFIG_DVB_MMAP is not set
# CONFIG_DVB_NET is not set
CONFIG_DVB_MAX_ADAPTERS=16
# CONFIG_DVB_DYNAMIC_MINORS is not set
# 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=y
CONFIG_USB_GSPCA_BENQ=y
CONFIG_USB_GSPCA_CONEX=y
CONFIG_USB_GSPCA_CPIA1=y
CONFIG_USB_GSPCA_DTCS033=y
CONFIG_USB_GSPCA_ETOMS=y
CONFIG_USB_GSPCA_FINEPIX=y
CONFIG_USB_GSPCA_JEILINJ=y
CONFIG_USB_GSPCA_JL2005BCD=y
CONFIG_USB_GSPCA_KINECT=y
CONFIG_USB_GSPCA_KONICA=y
CONFIG_USB_GSPCA_MARS=y
CONFIG_USB_GSPCA_MR97310A=y
CONFIG_USB_GSPCA_NW80X=y
CONFIG_USB_GSPCA_OV519=y
CONFIG_USB_GSPCA_OV534=y
CONFIG_USB_GSPCA_OV534_9=y
CONFIG_USB_GSPCA_PAC207=y
CONFIG_USB_GSPCA_PAC7302=y
CONFIG_USB_GSPCA_PAC7311=y
CONFIG_USB_GSPCA_SE401=y
CONFIG_USB_GSPCA_SN9C2028=y
CONFIG_USB_GSPCA_SN9C20X=y
CONFIG_USB_GSPCA_SONIXB=y
CONFIG_USB_GSPCA_SONIXJ=y
CONFIG_USB_GSPCA_SPCA1528=y
CONFIG_USB_GSPCA_SPCA500=y
CONFIG_USB_GSPCA_SPCA501=y
CONFIG_USB_GSPCA_SPCA505=y
CONFIG_USB_GSPCA_SPCA506=y
CONFIG_USB_GSPCA_SPCA508=y
CONFIG_USB_GSPCA_SPCA561=y
CONFIG_USB_GSPCA_SQ905=y
CONFIG_USB_GSPCA_SQ905C=y
CONFIG_USB_GSPCA_SQ930X=y
CONFIG_USB_GSPCA_STK014=y
CONFIG_USB_GSPCA_STK1135=y
CONFIG_USB_GSPCA_STV0680=y
CONFIG_USB_GSPCA_SUNPLUS=y
CONFIG_USB_GSPCA_T613=y
CONFIG_USB_GSPCA_TOPRO=y
CONFIG_USB_GSPCA_TOUPTEK=y
CONFIG_USB_GSPCA_TV8532=y
CONFIG_USB_GSPCA_VC032X=y
CONFIG_USB_GSPCA_VICAM=y
CONFIG_USB_GSPCA_XIRLINK_CIT=y
CONFIG_USB_GSPCA_ZC3XX=y
CONFIG_USB_GL860=y
CONFIG_USB_M5602=y
CONFIG_USB_STV06XX=y
CONFIG_USB_PWC=y
# CONFIG_USB_PWC_DEBUG is not set
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_USB_S2255=y
CONFIG_VIDEO_USBTV=y
CONFIG_USB_VIDEO_CLASS=y
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y

#
# Analog TV USB devices
#
CONFIG_VIDEO_GO7007=y
CONFIG_VIDEO_GO7007_USB=y
CONFIG_VIDEO_GO7007_LOADER=y
CONFIG_VIDEO_GO7007_USB_S2250_BOARD=y
CONFIG_VIDEO_HDPVR=y
CONFIG_VIDEO_PVRUSB2=y
CONFIG_VIDEO_PVRUSB2_SYSFS=y
CONFIG_VIDEO_PVRUSB2_DVB=y
# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
CONFIG_VIDEO_STK1160=y

#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=y
CONFIG_VIDEO_AU0828_V4L2=y
CONFIG_VIDEO_AU0828_RC=y
CONFIG_VIDEO_CX231XX=y
CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_CX231XX_ALSA=y
CONFIG_VIDEO_CX231XX_DVB=y

#
# Digital TV USB devices
#
CONFIG_DVB_AS102=y
CONFIG_DVB_B2C2_FLEXCOP_USB=y
# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set
CONFIG_DVB_USB_V2=y
CONFIG_DVB_USB_AF9015=y
CONFIG_DVB_USB_AF9035=y
CONFIG_DVB_USB_ANYSEE=y
CONFIG_DVB_USB_AU6610=y
CONFIG_DVB_USB_AZ6007=y
CONFIG_DVB_USB_CE6230=y
CONFIG_DVB_USB_DVBSKY=y
CONFIG_DVB_USB_EC168=y
CONFIG_DVB_USB_GL861=y
CONFIG_DVB_USB_LME2510=y
CONFIG_DVB_USB_MXL111SF=y
CONFIG_DVB_USB_RTL28XXU=y
CONFIG_DVB_USB_ZD1301=y
CONFIG_DVB_USB=y
# CONFIG_DVB_USB_DEBUG is not set
CONFIG_DVB_USB_A800=y
CONFIG_DVB_USB_AF9005=y
CONFIG_DVB_USB_AF9005_REMOTE=y
CONFIG_DVB_USB_AZ6027=y
CONFIG_DVB_USB_CINERGY_T2=y
CONFIG_DVB_USB_CXUSB=y
CONFIG_DVB_USB_CXUSB_ANALOG=y
CONFIG_DVB_USB_DIB0700=y
CONFIG_DVB_USB_DIB3000MC=y
CONFIG_DVB_USB_DIBUSB_MB=y
# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
CONFIG_DVB_USB_DIBUSB_MC=y
CONFIG_DVB_USB_DIGITV=y
CONFIG_DVB_USB_DTT200U=y
CONFIG_DVB_USB_DTV5100=y
CONFIG_DVB_USB_DW2102=y
CONFIG_DVB_USB_GP8PSK=y
CONFIG_DVB_USB_M920X=y
CONFIG_DVB_USB_NOVA_T_USB2=y
CONFIG_DVB_USB_OPERA1=y
CONFIG_DVB_USB_PCTV452E=y
CONFIG_DVB_USB_TECHNISAT_USB2=y
CONFIG_DVB_USB_TTUSB2=y
CONFIG_DVB_USB_UMT_010=y
CONFIG_DVB_USB_VP702X=y
CONFIG_DVB_USB_VP7045=y
CONFIG_SMS_USB_DRV=y
CONFIG_DVB_TTUSB_BUDGET=y
CONFIG_DVB_TTUSB_DEC=y

#
# Webcam, TV (analog/digital) USB devices
#
CONFIG_VIDEO_EM28XX=y
CONFIG_VIDEO_EM28XX_V4L2=y
CONFIG_VIDEO_EM28XX_ALSA=y
CONFIG_VIDEO_EM28XX_DVB=y
CONFIG_VIDEO_EM28XX_RC=y

#
# Software defined radio USB devices
#
CONFIG_USB_AIRSPY=y
CONFIG_USB_HACKRF=y
CONFIG_USB_MSI2500=y
# CONFIG_MEDIA_PCI_SUPPORT is not set
CONFIG_RADIO_ADAPTERS=y
# CONFIG_RADIO_MAXIRADIO is not set
# CONFIG_RADIO_SAA7706H is not set
CONFIG_RADIO_SHARK=y
CONFIG_RADIO_SHARK2=y
CONFIG_RADIO_SI4713=y
CONFIG_RADIO_TEA575X=y
# CONFIG_RADIO_TEA5764 is not set
# CONFIG_RADIO_TEF6862 is not set
CONFIG_USB_DSBR=y
CONFIG_USB_KEENE=y
CONFIG_USB_MA901=y
CONFIG_USB_MR800=y
CONFIG_USB_RAREMONO=y
CONFIG_RADIO_SI470X=y
CONFIG_USB_SI470X=y
# CONFIG_I2C_SI470X is not set
CONFIG_USB_SI4713=y
# CONFIG_PLATFORM_SI4713 is not set
CONFIG_I2C_SI4713=y
# CONFIG_MEDIA_PLATFORM_DRIVERS is not set

#
# MMC/SDIO DVB adapters
#
CONFIG_SMS_SDIO_DRV=y
CONFIG_V4L_TEST_DRIVERS=y
CONFIG_VIDEO_VIM2M=y
CONFIG_VIDEO_VICODEC=y
CONFIG_VIDEO_VIMC=y
CONFIG_VIDEO_VIVID=y
CONFIG_VIDEO_VIVID_CEC=y
# CONFIG_VIDEO_VIVID_OSD is not set
CONFIG_VIDEO_VIVID_MAX_DEVS=64
# CONFIG_VIDEO_VISL is not set
CONFIG_DVB_TEST_DRIVERS=y
CONFIG_DVB_VIDTV=y

#
# FireWire (IEEE 1394) Adapters
#
# CONFIG_DVB_FIREDTV is not set
CONFIG_MEDIA_COMMON_OPTIONS=y

#
# common driver options
#
CONFIG_CYPRESS_FIRMWARE=y
CONFIG_TTPCI_EEPROM=y
CONFIG_UVC_COMMON=y
CONFIG_VIDEO_CX2341X=y
CONFIG_VIDEO_TVEEPROM=y
CONFIG_DVB_B2C2_FLEXCOP=y
CONFIG_SMS_SIANO_MDTV=y
CONFIG_SMS_SIANO_RC=y
CONFIG_SMS_SIANO_DEBUGFS=y
CONFIG_VIDEO_V4L2_TPG=y
CONFIG_VIDEOBUF2_CORE=y
CONFIG_VIDEOBUF2_V4L2=y
CONFIG_VIDEOBUF2_MEMOPS=y
CONFIG_VIDEOBUF2_DMA_CONTIG=y
CONFIG_VIDEOBUF2_VMALLOC=y
CONFIG_VIDEOBUF2_DMA_SG=y
# end of Media drivers

#
# Media ancillary drivers
#
CONFIG_MEDIA_ATTACH=y
# CONFIG_VIDEO_IR_I2C is not set
# CONFIG_VIDEO_CAMERA_SENSOR is not set

#
# Camera ISPs
#
# CONFIG_VIDEO_THP7312 is not set
# end of Camera ISPs

# CONFIG_VIDEO_CAMERA_LENS is not set

#
# Flash devices
#
# CONFIG_VIDEO_ADP1653 is not set
# CONFIG_VIDEO_LM3560 is not set
# CONFIG_VIDEO_LM3646 is not set
# end of Flash devices

#
# Audio decoders, processors and mixers
#
# CONFIG_VIDEO_CS3308 is not set
# CONFIG_VIDEO_CS5345 is not set
CONFIG_VIDEO_CS53L32A=y
CONFIG_VIDEO_MSP3400=y
# CONFIG_VIDEO_SONY_BTF_MPX is not set
# CONFIG_VIDEO_TDA1997X is not set
# CONFIG_VIDEO_TDA7432 is not set
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
# CONFIG_VIDEO_TVAUDIO is not set
# CONFIG_VIDEO_UDA1342 is not set
# CONFIG_VIDEO_VP27SMPX is not set
# CONFIG_VIDEO_WM8739 is not set
CONFIG_VIDEO_WM8775=y
# end of Audio decoders, processors and mixers

#
# RDS decoders
#
# CONFIG_VIDEO_SAA6588 is not set
# end of RDS decoders

#
# Video decoders
#
# CONFIG_VIDEO_ADV7180 is not set
# CONFIG_VIDEO_ADV7183 is not set
# CONFIG_VIDEO_ADV748X is not set
# CONFIG_VIDEO_ADV7604 is not set
# CONFIG_VIDEO_ADV7842 is not set
# CONFIG_VIDEO_BT819 is not set
# CONFIG_VIDEO_BT856 is not set
# CONFIG_VIDEO_BT866 is not set
# CONFIG_VIDEO_ISL7998X is not set
# CONFIG_VIDEO_LT6911UXE is not set
# CONFIG_VIDEO_KS0127 is not set
# CONFIG_VIDEO_MAX9286 is not set
# CONFIG_VIDEO_ML86V7667 is not set
# CONFIG_VIDEO_SAA7110 is not set
CONFIG_VIDEO_SAA711X=y
# CONFIG_VIDEO_TC358743 is not set
# CONFIG_VIDEO_TC358746 is not set
# CONFIG_VIDEO_TVP514X is not set
# CONFIG_VIDEO_TVP5150 is not set
# CONFIG_VIDEO_TVP7002 is not set
# CONFIG_VIDEO_TW2804 is not set
# CONFIG_VIDEO_TW9900 is not set
# CONFIG_VIDEO_TW9903 is not set
# CONFIG_VIDEO_TW9906 is not set
# CONFIG_VIDEO_TW9910 is not set
# CONFIG_VIDEO_VPX3220 is not set

#
# Video and audio decoders
#
# CONFIG_VIDEO_SAA717X is not set
CONFIG_VIDEO_CX25840=y
# end of Video decoders

#
# Video encoders
#
# CONFIG_VIDEO_ADV7170 is not set
# CONFIG_VIDEO_ADV7175 is not set
# CONFIG_VIDEO_ADV7343 is not set
# CONFIG_VIDEO_ADV7393 is not set
# CONFIG_VIDEO_ADV7511 is not set
# CONFIG_VIDEO_AK881X is not set
# CONFIG_VIDEO_SAA7127 is not set
# CONFIG_VIDEO_SAA7185 is not set
# CONFIG_VIDEO_THS8200 is not set
# end of Video encoders

#
# Video improvement chips
#
# CONFIG_VIDEO_UPD64031A is not set
# CONFIG_VIDEO_UPD64083 is not set
# end of Video improvement chips

#
# Audio/Video compression chips
#
# CONFIG_VIDEO_SAA6752HS is not set
# end of Audio/Video compression chips

#
# SDR tuner chips
#
# CONFIG_SDR_MAX2175 is not set
# end of SDR tuner chips

#
# Miscellaneous helper chips
#
# CONFIG_VIDEO_I2C is not set
# CONFIG_VIDEO_M52790 is not set
# CONFIG_VIDEO_ST_MIPID02 is not set
# CONFIG_VIDEO_THS7303 is not set
# end of Miscellaneous helper chips

#
# Video serializers and deserializers
#
# CONFIG_VIDEO_DS90UB913 is not set
# CONFIG_VIDEO_DS90UB953 is not set
# CONFIG_VIDEO_DS90UB960 is not set
# CONFIG_VIDEO_MAX96714 is not set
# CONFIG_VIDEO_MAX96717 is not set
# end of Video serializers and deserializers

#
# Media SPI Adapters
#
# CONFIG_CXD2880_SPI_DRV is not set
# CONFIG_VIDEO_GS1662 is not set
# end of Media SPI Adapters

CONFIG_MEDIA_TUNER=y

#
# Customize TV tuners
#
# CONFIG_MEDIA_TUNER_E4000 is not set
# CONFIG_MEDIA_TUNER_FC0011 is not set
# CONFIG_MEDIA_TUNER_FC0012 is not set
# CONFIG_MEDIA_TUNER_FC0013 is not set
# CONFIG_MEDIA_TUNER_FC2580 is not set
# CONFIG_MEDIA_TUNER_IT913X is not set
# CONFIG_MEDIA_TUNER_M88RS6000T is not set
# CONFIG_MEDIA_TUNER_MAX2165 is not set
# CONFIG_MEDIA_TUNER_MC44S803 is not set
CONFIG_MEDIA_TUNER_MSI001=y
# CONFIG_MEDIA_TUNER_MT2060 is not set
# CONFIG_MEDIA_TUNER_MT2063 is not set
# CONFIG_MEDIA_TUNER_MT20XX is not set
# CONFIG_MEDIA_TUNER_MT2131 is not set
# CONFIG_MEDIA_TUNER_MT2266 is not set
# CONFIG_MEDIA_TUNER_MXL301RF is not set
# CONFIG_MEDIA_TUNER_MXL5005S is not set
# CONFIG_MEDIA_TUNER_MXL5007T is not set
# CONFIG_MEDIA_TUNER_QM1D1B0004 is not set
# CONFIG_MEDIA_TUNER_QM1D1C0042 is not set
# CONFIG_MEDIA_TUNER_QT1010 is not set
# CONFIG_MEDIA_TUNER_R820T is not set
# CONFIG_MEDIA_TUNER_SI2157 is not set
# CONFIG_MEDIA_TUNER_SIMPLE is not set
# CONFIG_MEDIA_TUNER_TDA18212 is not set
# CONFIG_MEDIA_TUNER_TDA18218 is not set
# CONFIG_MEDIA_TUNER_TDA18250 is not set
# CONFIG_MEDIA_TUNER_TDA18271 is not set
# CONFIG_MEDIA_TUNER_TDA827X is not set
# CONFIG_MEDIA_TUNER_TDA8290 is not set
# CONFIG_MEDIA_TUNER_TDA9887 is not set
# CONFIG_MEDIA_TUNER_TEA5761 is not set
# CONFIG_MEDIA_TUNER_TEA5767 is not set
# CONFIG_MEDIA_TUNER_TUA9001 is not set
# CONFIG_MEDIA_TUNER_XC2028 is not set
# CONFIG_MEDIA_TUNER_XC4000 is not set
# CONFIG_MEDIA_TUNER_XC5000 is not set
# end of Customize TV tuners

#
# Customise DVB Frontends
#

#
# Multistandard (satellite) frontends
#
# CONFIG_DVB_M88DS3103 is not set
# CONFIG_DVB_MXL5XX is not set
# CONFIG_DVB_STB0899 is not set
# CONFIG_DVB_STB6100 is not set
# CONFIG_DVB_STV090x is not set
# CONFIG_DVB_STV0910 is not set
# CONFIG_DVB_STV6110x is not set
# CONFIG_DVB_STV6111 is not set

#
# Multistandard (cable + terrestrial) frontends
#
# CONFIG_DVB_DRXK is not set
# CONFIG_DVB_MN88472 is not set
# CONFIG_DVB_MN88473 is not set
# CONFIG_DVB_SI2165 is not set
# CONFIG_DVB_TDA18271C2DD is not set

#
# DVB-S (satellite) frontends
#
# CONFIG_DVB_CX24110 is not set
# CONFIG_DVB_CX24116 is not set
# CONFIG_DVB_CX24117 is not set
# CONFIG_DVB_CX24120 is not set
# CONFIG_DVB_CX24123 is not set
# CONFIG_DVB_DS3000 is not set
# CONFIG_DVB_MB86A16 is not set
# CONFIG_DVB_MT312 is not set
# CONFIG_DVB_S5H1420 is not set
# CONFIG_DVB_SI21XX is not set
# CONFIG_DVB_STB6000 is not set
# CONFIG_DVB_STV0288 is not set
# CONFIG_DVB_STV0299 is not set
# CONFIG_DVB_STV0900 is not set
# CONFIG_DVB_STV6110 is not set
# CONFIG_DVB_TDA10071 is not set
# CONFIG_DVB_TDA10086 is not set
# CONFIG_DVB_TDA8083 is not set
# CONFIG_DVB_TDA8261 is not set
# CONFIG_DVB_TDA826X is not set
# CONFIG_DVB_TS2020 is not set
# CONFIG_DVB_TUA6100 is not set
# CONFIG_DVB_TUNER_CX24113 is not set
# CONFIG_DVB_TUNER_ITD1000 is not set
# CONFIG_DVB_VES1X93 is not set
# CONFIG_DVB_ZL10036 is not set
# CONFIG_DVB_ZL10039 is not set

#
# DVB-T (terrestrial) frontends
#
CONFIG_DVB_AF9013=y
CONFIG_DVB_AS102_FE=y
# CONFIG_DVB_CX22700 is not set
# CONFIG_DVB_CX22702 is not set
# CONFIG_DVB_CXD2820R is not set
# CONFIG_DVB_CXD2841ER is not set
CONFIG_DVB_DIB3000MB=y
CONFIG_DVB_DIB3000MC=y
# CONFIG_DVB_DIB7000M is not set
# CONFIG_DVB_DIB7000P is not set
# CONFIG_DVB_DIB9000 is not set
# CONFIG_DVB_DRXD is not set
CONFIG_DVB_EC100=y
CONFIG_DVB_GP8PSK_FE=y
# CONFIG_DVB_L64781 is not set
# CONFIG_DVB_MT352 is not set
# CONFIG_DVB_NXT6000 is not set
CONFIG_DVB_RTL2830=y
CONFIG_DVB_RTL2832=y
CONFIG_DVB_RTL2832_SDR=y
# CONFIG_DVB_S5H1432 is not set
# CONFIG_DVB_SI2168 is not set
# CONFIG_DVB_SP887X is not set
# CONFIG_DVB_STV0367 is not set
# CONFIG_DVB_TDA10048 is not set
# CONFIG_DVB_TDA1004X is not set
# CONFIG_DVB_ZD1301_DEMOD is not set
CONFIG_DVB_ZL10353=y
# CONFIG_DVB_CXD2880 is not set

#
# DVB-C (cable) frontends
#
# CONFIG_DVB_STV0297 is not set
# CONFIG_DVB_TDA10021 is not set
# CONFIG_DVB_TDA10023 is not set
# CONFIG_DVB_VES1820 is not set

#
# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
#
# CONFIG_DVB_AU8522_DTV is not set
# CONFIG_DVB_AU8522_V4L is not set
# CONFIG_DVB_BCM3510 is not set
# CONFIG_DVB_LG2160 is not set
# CONFIG_DVB_LGDT3305 is not set
# CONFIG_DVB_LGDT3306A is not set
# CONFIG_DVB_LGDT330X is not set
# CONFIG_DVB_MXL692 is not set
# CONFIG_DVB_NXT200X is not set
# CONFIG_DVB_OR51132 is not set
# CONFIG_DVB_OR51211 is not set
# CONFIG_DVB_S5H1409 is not set
# CONFIG_DVB_S5H1411 is not set

#
# ISDB-T (terrestrial) frontends
#
# CONFIG_DVB_DIB8000 is not set
# CONFIG_DVB_MB86A20S is not set
# CONFIG_DVB_S921 is not set

#
# ISDB-S (satellite) & ISDB-T (terrestrial) frontends
#
# CONFIG_DVB_MN88443X is not set
# CONFIG_DVB_TC90522 is not set

#
# Digital terrestrial only tuners/PLL
#
# CONFIG_DVB_PLL is not set
# CONFIG_DVB_TUNER_DIB0070 is not set
# CONFIG_DVB_TUNER_DIB0090 is not set

#
# SEC control devices for DVB-S
#
# CONFIG_DVB_A8293 is not set
CONFIG_DVB_AF9033=y
# CONFIG_DVB_ASCOT2E is not set
# CONFIG_DVB_ATBM8830 is not set
# CONFIG_DVB_HELENE is not set
# CONFIG_DVB_HORUS3A is not set
# CONFIG_DVB_ISL6405 is not set
# CONFIG_DVB_ISL6421 is not set
# CONFIG_DVB_ISL6423 is not set
# CONFIG_DVB_IX2505V is not set
# CONFIG_DVB_LGS8GL5 is not set
# CONFIG_DVB_LGS8GXX is not set
# CONFIG_DVB_LNBH25 is not set
# CONFIG_DVB_LNBH29 is not set
# CONFIG_DVB_LNBP21 is not set
# CONFIG_DVB_LNBP22 is not set
# CONFIG_DVB_M88RS2000 is not set
# CONFIG_DVB_TDA665x is not set
# CONFIG_DVB_DRX39XYJ is not set

#
# Common Interface (EN50221) controller drivers
#
# CONFIG_DVB_CXD2099 is not set
# CONFIG_DVB_SP2 is not set
# end of Customise DVB Frontends

#
# Tools to develop new frontends
#
# CONFIG_DVB_DUMMY_FE is not set
# 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=y
CONFIG_AGP_INTEL=y
# CONFIG_AGP_SIS is not set
# CONFIG_AGP_VIA is not set
CONFIG_INTEL_GTT=y
# CONFIG_VGA_SWITCHEROO is not set
CONFIG_GPU_BUDDY=y
CONFIG_DRM=y

#
# DRM debugging options
#
# CONFIG_DRM_WERROR is not set
CONFIG_DRM_DEBUG_MM=y
# end of DRM debugging options

CONFIG_DRM_MIPI_DSI=y
CONFIG_DRM_KMS_HELPER=y
# CONFIG_DRM_PANIC is not set
# CONFIG_DRM_RAS is not set
# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set
# CONFIG_DRM_DEBUG_MODESET_LOCK is not set
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_FBDEV_LEAK_PHYS_SMEM is not set
# CONFIG_DRM_CLIENT_LOG is not set
CONFIG_DRM_CLIENT_DEFAULT_FBDEV=y
CONFIG_DRM_CLIENT_DEFAULT="fbdev"
# end of Supported DRM clients

# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
CONFIG_DRM_DISPLAY_DP_AUX_BUS=y
CONFIG_DRM_DISPLAY_HELPER=y
# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
CONFIG_DRM_DISPLAY_DP_HELPER=y
CONFIG_DRM_DISPLAY_DSC_HELPER=y
CONFIG_DRM_DISPLAY_HDCP_HELPER=y
CONFIG_DRM_DISPLAY_HDMI_HELPER=y
CONFIG_DRM_TTM=y
CONFIG_DRM_BUDDY=y
CONFIG_DRM_TTM_HELPER=y
CONFIG_DRM_GEM_SHMEM_HELPER=y
# CONFIG_DRM_AMDGPU is not set

#
# ARM devices
#
# CONFIG_DRM_KOMEDA is not set
# end of ARM devices

# CONFIG_DRM_AST is not set
CONFIG_DRM_BRIDGE=y
CONFIG_DRM_PANEL_BRIDGE=y
CONFIG_DRM_AUX_BRIDGE=y
CONFIG_DRM_AUX_HPD_BRIDGE=y

#
# Display Interface Bridges
#
# CONFIG_DRM_CHIPONE_ICN6211 is not set
# CONFIG_DRM_CHRONTEL_CH7033 is not set
# CONFIG_DRM_DISPLAY_CONNECTOR is not set
# CONFIG_DRM_I2C_NXP_TDA998X is not set
# CONFIG_DRM_ITE_IT6263 is not set
# CONFIG_DRM_ITE_IT6505 is not set
# CONFIG_DRM_LONTIUM_LT8912B is not set
# CONFIG_DRM_LONTIUM_LT9211 is not set
# CONFIG_DRM_LONTIUM_LT9611 is not set
# CONFIG_DRM_LONTIUM_LT9611UXC is not set
# CONFIG_DRM_LONTIUM_LT8713SX is not set
# CONFIG_DRM_ITE_IT66121 is not set
# CONFIG_DRM_LVDS_CODEC is not set
# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set
# CONFIG_DRM_NWL_MIPI_DSI is not set
# CONFIG_DRM_NXP_PTN3460 is not set
# CONFIG_DRM_PARADE_PS8622 is not set
# CONFIG_DRM_PARADE_PS8640 is not set
# CONFIG_DRM_SAMSUNG_DSIM is not set
# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SII902X is not set
# CONFIG_DRM_SII9234 is not set
# CONFIG_DRM_SIMPLE_BRIDGE is not set
# CONFIG_DRM_SOLOMON_SSD2825 is not set
# CONFIG_DRM_THINE_THC63LVD1024 is not set
# CONFIG_DRM_TOSHIBA_TC358762 is not set
# CONFIG_DRM_TOSHIBA_TC358764 is not set
# CONFIG_DRM_TOSHIBA_TC358767 is not set
# CONFIG_DRM_TOSHIBA_TC358768 is not set
# CONFIG_DRM_TOSHIBA_TC358775 is not set
# CONFIG_DRM_TI_DLPC3433 is not set
# CONFIG_DRM_TI_TDP158 is not set
# CONFIG_DRM_TI_TFP410 is not set
# CONFIG_DRM_TI_SN65DSI83 is not set
# CONFIG_DRM_TI_SN65DSI86 is not set
# CONFIG_DRM_TI_TPD12S015 is not set
# CONFIG_DRM_WAVESHARE_BRIDGE is not set
# CONFIG_DRM_ANALOGIX_ANX6345 is not set
# CONFIG_DRM_ANALOGIX_ANX78XX is not set
# CONFIG_DRM_ANALOGIX_ANX7625 is not set
# CONFIG_DRM_I2C_ADV7511 is not set
# CONFIG_DRM_CDNS_DSI is not set
# CONFIG_DRM_CDNS_MHDP8546 is not set
# end of Display Interface Bridges

# CONFIG_DRM_ETNAVIV is not set
# CONFIG_DRM_GMA500 is not set
CONFIG_DRM_GUD=y
# CONFIG_DRM_HISI_HIBMC is not set
CONFIG_DRM_I915=y
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 is not set
# CONFIG_DRM_I915_DP_TUNNEL is not set

#
# drm/i915 Debugging
#
# CONFIG_DRM_I915_WERROR is not set
# CONFIG_DRM_I915_REPLAY_GPU_HANGS_API is not set
# CONFIG_DRM_I915_DEBUG is not set
# CONFIG_DRM_I915_DEBUG_MMIO is not set
# CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS is not set
# CONFIG_DRM_I915_SW_FENCE_CHECK_DAG is not set
# CONFIG_DRM_I915_DEBUG_GUC is not set
# CONFIG_DRM_I915_SELFTEST is not set
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
# end of drm/i915 Debugging

#
# drm/i915 Profile Guided Optimisation
#
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
# end of drm/i915 Profile Guided Optimisation

# CONFIG_DRM_LOGICVC is not set
# CONFIG_DRM_MGAG200 is not set
# CONFIG_DRM_NOUVEAU is not set
CONFIG_DRM_PANEL=y

#
# Display Panels
#
# CONFIG_DRM_PANEL_ABT_Y030XX067A is not set
# CONFIG_DRM_PANEL_ARM_VERSATILE is not set
# CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596 is not set
# CONFIG_DRM_PANEL_AUO_A030JTN01 is not set
# CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0 is not set
# CONFIG_DRM_PANEL_BOE_HIMAX8279D is not set
# CONFIG_DRM_PANEL_BOE_TD4320 is not set
# CONFIG_DRM_PANEL_BOE_TH101MB31UIG002_28A is not set
# CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set
# CONFIG_DRM_PANEL_BOE_TV101WUM_LL2 is not set
# CONFIG_DRM_PANEL_EBBG_FT8719 is not set
# CONFIG_DRM_PANEL_ELIDA_KD35T133 is not set
# CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02 is not set
# CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set
# CONFIG_DRM_PANEL_DSI_CM is not set
# CONFIG_DRM_PANEL_LVDS is not set
# CONFIG_DRM_PANEL_HIMAX_HX8279 is not set
# CONFIG_DRM_PANEL_HIMAX_HX83102 is not set
# CONFIG_DRM_PANEL_HIMAX_HX83112A is not set
# CONFIG_DRM_PANEL_HIMAX_HX83112B is not set
# CONFIG_DRM_PANEL_HIMAX_HX83121A is not set
# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
# CONFIG_DRM_PANEL_HYDIS_HV101HD1 is not set
# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9806E_DSI is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9806E_SPI is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
# CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set
# CONFIG_DRM_PANEL_JADARD_JD9365DA_H3 is not set
# CONFIG_DRM_PANEL_JDI_LPM102A188A is not set
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_JDI_R63452 is not set
# CONFIG_DRM_PANEL_KHADAS_TS050 is not set
# CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04 is not set
# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set
# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
# CONFIG_DRM_PANEL_LINCOLNTECH_LCD197 is not set
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
# CONFIG_DRM_PANEL_LG_LD070WX3 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
# CONFIG_DRM_PANEL_LG_SW43408 is not set
# CONFIG_DRM_PANEL_LXD_M9189A is not set
# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
# CONFIG_DRM_PANEL_MOTOROLA_MOT is not set
# CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set
# CONFIG_DRM_PANEL_NEWVISION_NV3051D is not set
# CONFIG_DRM_PANEL_NEWVISION_NV3052C is not set
# CONFIG_DRM_PANEL_NOVATEK_NT35510 is not set
# CONFIG_DRM_PANEL_NOVATEK_NT35560 is not set
# CONFIG_DRM_PANEL_NOVATEK_NT35950 is not set
# CONFIG_DRM_PANEL_NOVATEK_NT36523 is not set
# CONFIG_DRM_PANEL_NOVATEK_NT36672A is not set
# CONFIG_DRM_PANEL_NOVATEK_NT36672E is not set
# CONFIG_DRM_PANEL_NOVATEK_NT37700F is not set
# CONFIG_DRM_PANEL_NOVATEK_NT37801 is not set
# CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set
# CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO is not set
# CONFIG_DRM_PANEL_ORISETECH_OTA5601A is not set
# CONFIG_DRM_PANEL_ORISETECH_OTM8009A is not set
# CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS is not set
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
# CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM67200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
# CONFIG_DRM_PANEL_RENESAS_R61307 is not set
# CONFIG_DRM_PANEL_RENESAS_R69328 is not set
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
# CONFIG_DRM_PANEL_SAMSUNG_AMS581VF01 is not set
# CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS427AP24 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set
# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_LTL106HL02 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3FC2X01 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA8 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA5X01_AMS561RA01 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E8FC0 is not set
# CONFIG_DRM_PANEL_SAMSUNG_SOFEF00 is not set
# CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set
# CONFIG_DRM_PANEL_SHARP_LQ079L1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS037V7DW01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SHARP_LS060T1SX01 is not set
# CONFIG_DRM_PANEL_SITRONIX_ST7701 is not set
# CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set
# CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set
# CONFIG_DRM_PANEL_SONY_ACX565AKM is not set
# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
CONFIG_DRM_PANEL_EDP=y
# CONFIG_DRM_PANEL_SIMPLE is not set
# CONFIG_DRM_PANEL_SUMMIT is not set
# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
# CONFIG_DRM_PANEL_SYNAPTICS_TDDI is not set
# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
# CONFIG_DRM_PANEL_TPO_TPG110 is not set
# CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set
# CONFIG_DRM_PANEL_VISIONOX_G2647FB105 is not set
# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set
# CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set
# CONFIG_DRM_PANEL_VISIONOX_RM692E5 is not set
# CONFIG_DRM_PANEL_VISIONOX_VTDR6130 is not set
# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
# end of Display Panels

# CONFIG_DRM_QXL is not set
# CONFIG_DRM_RADEON is not set
# CONFIG_DRM_ST7571 is not set
# CONFIG_DRM_ST7586 is not set
# CONFIG_DRM_ST7735R is not set
# CONFIG_DRM_ST7920 is not set
# CONFIG_DRM_SSD130X is not set

#
# Drivers for system framebuffers
#
CONFIG_DRM_SYSFB_HELPER=y
CONFIG_DRM_SIMPLEDRM=y
# CONFIG_DRM_VESADRM is not set
# end of Drivers for system framebuffers

# CONFIG_DRM_APPLETBDRM is not set
# CONFIG_DRM_ARCPGU is not set
CONFIG_DRM_BOCHS=y
CONFIG_DRM_CIRRUS_QEMU=y
CONFIG_DRM_GM12U320=y
# CONFIG_DRM_PANEL_MIPI_DBI is not set
# CONFIG_DRM_PIXPAPER is not set
# CONFIG_TINYDRM_HX8357D is not set
# CONFIG_TINYDRM_ILI9163 is not set
# CONFIG_TINYDRM_ILI9225 is not set
# CONFIG_TINYDRM_ILI9341 is not set
# CONFIG_TINYDRM_ILI9486 is not set
# CONFIG_TINYDRM_MI0283QT is not set
# CONFIG_TINYDRM_REPAPER is not set
# CONFIG_TINYDRM_SHARP_MEMORY is not set
CONFIG_DRM_UDL=y
# CONFIG_DRM_VBOXVIDEO is not set
CONFIG_DRM_VGEM=y
CONFIG_DRM_VIRTIO_GPU=y
CONFIG_DRM_VIRTIO_GPU_KMS=y
CONFIG_DRM_VKMS=y
CONFIG_DRM_VMWGFX=y
# CONFIG_DRM_VMWGFX_MKSSTATS is not set
# CONFIG_DRM_XE is not set
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=y
# CONFIG_FB_UVESA is not set
CONFIG_FB_VESA=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_MATROX is not set
# CONFIG_FB_RADEON is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_S3 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_VT8623 is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_ARK is not set
# CONFIG_FB_PM3 is not set
# CONFIG_FB_CARMINE 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=y
# 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_IOMEM_FOPS=y
CONFIG_FB_IOMEM_HELPERS=y
CONFIG_FB_SYSMEM_HELPERS=y
CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y
CONFIG_FB_TILEBLITTING=y
# end of Frame buffer Devices

#
# Backlight & LCD device support
#
CONFIG_LCD_CLASS_DEVICE=y
# CONFIG_LCD_L4F00242T03 is not set
# CONFIG_LCD_LMS283GF05 is not set
# CONFIG_LCD_LTV350QV is not set
# CONFIG_LCD_ILI922X is not set
# CONFIG_LCD_ILI9320 is not set
# CONFIG_LCD_TDO24M is not set
# CONFIG_LCD_VGG2432A4 is not set
# CONFIG_LCD_PLATFORM is not set
# CONFIG_LCD_AMS369FG06 is not set
# CONFIG_LCD_LMS501KF03 is not set
# CONFIG_LCD_HX8357 is not set
# CONFIG_LCD_OTM3225A is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=y
# CONFIG_BACKLIGHT_AW99706 is not set
# CONFIG_BACKLIGHT_KTD253 is not set
# CONFIG_BACKLIGHT_KTD2801 is not set
# CONFIG_BACKLIGHT_KTZ8866 is not set
# CONFIG_BACKLIGHT_MT6370 is not set
# CONFIG_BACKLIGHT_APPLE is not set
# CONFIG_BACKLIGHT_QCOM_WLED is not set
# CONFIG_BACKLIGHT_SAHARA is not set
# CONFIG_BACKLIGHT_ADP8860 is not set
# CONFIG_BACKLIGHT_ADP8870 is not set
# CONFIG_BACKLIGHT_LM3509 is not set
# CONFIG_BACKLIGHT_LM3639 is not set
# CONFIG_BACKLIGHT_PANDORA is not set
# CONFIG_BACKLIGHT_GPIO is not set
# CONFIG_BACKLIGHT_LV5207LP is not set
# CONFIG_BACKLIGHT_BD6107 is not set
# CONFIG_BACKLIGHT_ARCXCNN is not set
# CONFIG_BACKLIGHT_LED is not set
# end of Backlight & LCD device support

CONFIG_VGASTATE=y
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 is not set
# end of Console display driver support

CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_MONO_FILE="drivers/video/logo/logo_linux_mono.pbm"
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_VGA16_FILE="drivers/video/logo/logo_linux_vga16.ppm"
# CONFIG_LOGO_LINUX_CLUT224 is not set
# CONFIG_TRACE_GPU_MEM is not set
# end of Graphics support

# CONFIG_DRM_ACCEL is not set
CONFIG_SOUND=y
CONFIG_SOUND_OSS_CORE=y
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
CONFIG_SND_HWDEP=y
CONFIG_SND_SEQ_DEVICE=y
CONFIG_SND_RAWMIDI=y
CONFIG_SND_UMP=y
CONFIG_SND_UMP_LEGACY_RAWMIDI=y
CONFIG_SND_JACK=y
CONFIG_SND_JACK_INPUT_DEV=y
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=y
CONFIG_SND_PCM_OSS=y
CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_PCM_TIMER=y
CONFIG_SND_HRTIMER=y
# CONFIG_SND_DYNAMIC_MINORS is not set
# 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=y
# CONFIG_SND_CTL_INPUT_VALIDATION is not set
# CONFIG_SND_CTL_DEBUG is not set
# CONFIG_SND_JACK_INJECTION_DEBUG is not set
# CONFIG_SND_UTIMER is not set
CONFIG_SND_VMASTER=y
CONFIG_SND_DMA_SGBUF=y
CONFIG_SND_CTL_LED=y
CONFIG_SND_SEQUENCER=y
CONFIG_SND_SEQ_DUMMY=y
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
CONFIG_SND_SEQ_MIDI_EVENT=y
CONFIG_SND_SEQ_MIDI=y
CONFIG_SND_SEQ_VIRMIDI=y
# CONFIG_SND_SEQ_UMP is not set
CONFIG_SND_DRIVERS=y
# CONFIG_SND_PCSP is not set
CONFIG_SND_DUMMY=y
CONFIG_SND_ALOOP=y
# CONFIG_SND_PCMTEST is not set
CONFIG_SND_VIRMIDI=y
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_MTS64 is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_SERIAL_GENERIC is not set
# CONFIG_SND_MPU401 is not set
# CONFIG_SND_PORTMAN2X4 is not set
CONFIG_SND_PCI=y
# CONFIG_SND_AD1889 is not set
# CONFIG_SND_ALS300 is not set
# CONFIG_SND_ALS4000 is not set
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ASIHPI is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set
# CONFIG_SND_AW2 is not set
# CONFIG_SND_AZT3328 is not set
# CONFIG_SND_BT87X is not set
# CONFIG_SND_CA0106 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_OXYGEN is not set
# CONFIG_SND_CS4281 is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_CTXFI is not set
# CONFIG_SND_DARLA20 is not set
# CONFIG_SND_GINA20 is not set
# CONFIG_SND_LAYLA20 is not set
# CONFIG_SND_DARLA24 is not set
# CONFIG_SND_GINA24 is not set
# CONFIG_SND_LAYLA24 is not set
# CONFIG_SND_MONA is not set
# CONFIG_SND_MIA is not set
# CONFIG_SND_ECHO3G is not set
# CONFIG_SND_INDIGO is not set
# CONFIG_SND_INDIGOIO is not set
# CONFIG_SND_INDIGODJ is not set
# CONFIG_SND_INDIGOIOX is not set
# CONFIG_SND_INDIGODJX is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_FM801 is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not set
# CONFIG_SND_INTEL8X0 is not set
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_LOLA is not set
# CONFIG_SND_LX6464ES is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_PCXHR is not set
# CONFIG_SND_RIPTIDE is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_SE6X is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VIRTUOSO is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_YMFPCI is not set

#
# HD-Audio
#
CONFIG_SND_HDA=y
CONFIG_SND_HDA_HWDEP=y
CONFIG_SND_HDA_RECONFIG=y
CONFIG_SND_HDA_INPUT_BEEP=y
CONFIG_SND_HDA_INPUT_BEEP_MODE=1
CONFIG_SND_HDA_PATCH_LOADER=y
CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
# CONFIG_SND_HDA_CTL_DEV_ID is not set
CONFIG_SND_HDA_PREALLOC_SIZE=0
CONFIG_SND_HDA_INTEL=y
# CONFIG_SND_HDA_ACPI is not set
CONFIG_SND_HDA_GENERIC_LEDS=y
CONFIG_SND_HDA_CODEC_ANALOG=y
CONFIG_SND_HDA_CODEC_SIGMATEL=y
CONFIG_SND_HDA_CODEC_VIA=y
CONFIG_SND_HDA_CODEC_CONEXANT=y
# CONFIG_SND_HDA_CODEC_SENARYTECH is not set
CONFIG_SND_HDA_CODEC_CA0110=y
CONFIG_SND_HDA_CODEC_CA0132=y
# CONFIG_SND_HDA_CODEC_CA0132_DSP is not set
CONFIG_SND_HDA_CODEC_CMEDIA=y
# CONFIG_SND_HDA_CODEC_CM9825 is not set
CONFIG_SND_HDA_CODEC_SI3054=y
CONFIG_SND_HDA_GENERIC=y
CONFIG_SND_HDA_CODEC_REALTEK=y
# CONFIG_SND_HDA_CODEC_ALC260 is not set
# CONFIG_SND_HDA_CODEC_ALC262 is not set
# CONFIG_SND_HDA_CODEC_ALC268 is not set
# CONFIG_SND_HDA_CODEC_ALC269 is not set
# CONFIG_SND_HDA_CODEC_ALC662 is not set
# CONFIG_SND_HDA_CODEC_ALC680 is not set
# CONFIG_SND_HDA_CODEC_ALC861 is not set
# CONFIG_SND_HDA_CODEC_ALC861VD is not set
# CONFIG_SND_HDA_CODEC_ALC880 is not set
# CONFIG_SND_HDA_CODEC_ALC882 is not set
CONFIG_SND_HDA_CODEC_CIRRUS=y
# CONFIG_SND_HDA_CODEC_CS420X is not set
# CONFIG_SND_HDA_CODEC_CS421X is not set
# CONFIG_SND_HDA_CODEC_CS8409 is not set
CONFIG_SND_HDA_CODEC_HDMI=y
# CONFIG_SND_HDA_CODEC_HDMI_GENERIC is not set
# CONFIG_SND_HDA_CODEC_HDMI_SIMPLE is not set
# CONFIG_SND_HDA_CODEC_HDMI_INTEL is not set
# CONFIG_SND_HDA_CODEC_HDMI_ATI is not set
# CONFIG_SND_HDA_CODEC_HDMI_NVIDIA is not set
# CONFIG_SND_HDA_CODEC_HDMI_NVIDIA_MCP is not set
# CONFIG_SND_HDA_CODEC_HDMI_TEGRA is not set
# CONFIG_SND_HDA_SCODEC_CS35L56_I2C is not set
# CONFIG_SND_HDA_SCODEC_CS35L56_SPI is not set
CONFIG_SND_HDA_CORE=y
CONFIG_SND_HDA_COMPONENT=y
CONFIG_SND_HDA_I915=y
CONFIG_SND_INTEL_NHLT=y
CONFIG_SND_INTEL_DSP_CONFIG=y
CONFIG_SND_INTEL_SOUNDWIRE_ACPI=y
# end of HD-Audio

# CONFIG_SND_SPI is not set
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=y
CONFIG_SND_USB_AUDIO_MIDI_V2=y
CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y
CONFIG_SND_USB_UA101=y
CONFIG_SND_USB_USX2Y=y
CONFIG_SND_USB_CAIAQ=y
CONFIG_SND_USB_CAIAQ_INPUT=y
CONFIG_SND_USB_US122L=y
# CONFIG_SND_USB_US144MKII is not set
CONFIG_SND_USB_6FIRE=y
CONFIG_SND_USB_HIFACE=y
CONFIG_SND_BCD2000=y
CONFIG_SND_USB_LINE6=y
CONFIG_SND_USB_POD=y
CONFIG_SND_USB_PODHD=y
CONFIG_SND_USB_TONEPORT=y
CONFIG_SND_USB_VARIAX=y
# CONFIG_SND_FIREWIRE is not set
CONFIG_SND_PCMCIA=y
# CONFIG_SND_VXPOCKET is not set
# CONFIG_SND_PDAUDIOCF is not set
CONFIG_SND_SOC=y
# CONFIG_SND_SOC_USB is not set

#
# Analog Devices
#
# CONFIG_SND_SOC_ADI_AXI_I2S is not set
# CONFIG_SND_SOC_ADI_AXI_SPDIF is not set
# end of Analog Devices

#
# AMD
#
# CONFIG_SND_SOC_AMD_ACP is not set
# CONFIG_SND_SOC_AMD_ACP3x is not set
# CONFIG_SND_SOC_AMD_RENOIR is not set
# CONFIG_SND_SOC_AMD_ACP5x is not set
# CONFIG_SND_SOC_AMD_ACP6x is not set
# CONFIG_SND_AMD_ACP_CONFIG is not set
# CONFIG_SND_SOC_AMD_ACP_COMMON is not set
# end of AMD

#
# Apple
#
# end of Apple

#
# Atmel
#
# CONFIG_SND_SOC_MIKROE_PROTO is not set
# 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 is not set
# 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 is not set
# CONFIG_SND_SOC_IMX_AUDMUX is not set
# end of Freescale

#
# Google
#
# CONFIG_SND_SOC_CHV3_I2S is not set
# end of Google

#
# Hisilicon
#
# CONFIG_SND_I2S_HI6210_I2S is not set
# end of Hisilicon

#
# JZ4740
#
# end of JZ4740

#
# Kirkwood
#
# end of Kirkwood

#
# Loongson
#
# end of Loongson

#
# Intel
#
# CONFIG_SND_SOC_INTEL_SST_TOPLEVEL is not set
# CONFIG_SND_SOC_INTEL_AVS is not set
# end of Intel

#
# Mediatek
#
# CONFIG_SND_SOC_MTK_BTCVSD is not set
# end of Mediatek

#
# PXA
#
# end of PXA

#
# SoundWire (SDCA)
#
CONFIG_SND_SOC_SDCA_OPTIONAL=y
# 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 is not set
# CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set
# CONFIG_SND_SOC_XILINX_SPDIF is not set
# end of Xilinx

#
# Xtensa
#
# CONFIG_SND_SOC_XTFPGA_I2S is not set
# end of Xtensa

# CONFIG_SND_SOC_SOF_TOPLEVEL is not set
CONFIG_SND_SOC_I2C_AND_SPI=y

#
# CODEC drivers
#
# CONFIG_SND_SOC_AC97_CODEC is not set
# CONFIG_SND_SOC_ADAU1372_I2C is not set
# CONFIG_SND_SOC_ADAU1372_SPI is not set
# CONFIG_SND_SOC_ADAU1373 is not set
# CONFIG_SND_SOC_ADAU1701 is not set
# CONFIG_SND_SOC_ADAU1761_I2C is not set
# CONFIG_SND_SOC_ADAU1761_SPI is not set
# CONFIG_SND_SOC_ADAU7002 is not set
# CONFIG_SND_SOC_ADAU7118_HW is not set
# CONFIG_SND_SOC_ADAU7118_I2C is not set
# CONFIG_SND_SOC_AK4104 is not set
# CONFIG_SND_SOC_AK4118 is not set
# CONFIG_SND_SOC_AK4375 is not set
# CONFIG_SND_SOC_AK4458 is not set
# CONFIG_SND_SOC_AK4554 is not set
# CONFIG_SND_SOC_AK4613 is not set
# CONFIG_SND_SOC_AK4619 is not set
# CONFIG_SND_SOC_AK4642 is not set
# CONFIG_SND_SOC_AK5386 is not set
# CONFIG_SND_SOC_AK5558 is not set
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AUDIO_IIO_AUX is not set
# CONFIG_SND_SOC_AW8738 is not set
# CONFIG_SND_SOC_AW88395 is not set
# CONFIG_SND_SOC_AW88166 is not set
# CONFIG_SND_SOC_AW88261 is not set
# CONFIG_SND_SOC_AW88081 is not set
# CONFIG_SND_SOC_AW87390 is not set
# CONFIG_SND_SOC_AW88399 is not set
# CONFIG_SND_SOC_BD28623 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CHV3_CODEC is not set
# CONFIG_SND_SOC_CS35L32 is not set
# CONFIG_SND_SOC_CS35L33 is not set
# CONFIG_SND_SOC_CS35L34 is not set
# CONFIG_SND_SOC_CS35L35 is not set
# CONFIG_SND_SOC_CS35L36 is not set
# CONFIG_SND_SOC_CS35L41_SPI is not set
# CONFIG_SND_SOC_CS35L41_I2C is not set
# CONFIG_SND_SOC_CS35L45_SPI is not set
# CONFIG_SND_SOC_CS35L45_I2C is not set
# CONFIG_SND_SOC_CS35L56_I2C is not set
# CONFIG_SND_SOC_CS35L56_SPI is not set
# CONFIG_SND_SOC_CS35L56_SDW is not set
# CONFIG_SND_SOC_CS42L42 is not set
# CONFIG_SND_SOC_CS42L42_SDW is not set
# CONFIG_SND_SOC_CS42L51_I2C is not set
# CONFIG_SND_SOC_CS42L52 is not set
# CONFIG_SND_SOC_CS42L56 is not set
# CONFIG_SND_SOC_CS42L73 is not set
# CONFIG_SND_SOC_CS42L83 is not set
# CONFIG_SND_SOC_CS42L84 is not set
# CONFIG_SND_SOC_CS4234 is not set
# CONFIG_SND_SOC_CS4265 is not set
# CONFIG_SND_SOC_CS4270 is not set
# CONFIG_SND_SOC_CS4271_I2C is not set
# CONFIG_SND_SOC_CS4271_SPI is not set
# CONFIG_SND_SOC_CS42XX8_I2C is not set
# CONFIG_SND_SOC_CS43130 is not set
# CONFIG_SND_SOC_CS4341 is not set
# CONFIG_SND_SOC_CS4349 is not set
# CONFIG_SND_SOC_CS48L32 is not set
# CONFIG_SND_SOC_CS53L30 is not set
# CONFIG_SND_SOC_CS530X_I2C is not set
# CONFIG_SND_SOC_CS530X_SPI is not set
# CONFIG_SND_SOC_CX2072X is not set
# CONFIG_SND_SOC_DA7213 is not set
# CONFIG_SND_SOC_DMIC is not set
# CONFIG_SND_SOC_ES7134 is not set
# CONFIG_SND_SOC_ES7241 is not set
# CONFIG_SND_SOC_ES8311 is not set
# CONFIG_SND_SOC_ES8316 is not set
# CONFIG_SND_SOC_ES8323 is not set
# CONFIG_SND_SOC_ES8326 is not set
# CONFIG_SND_SOC_ES8328_I2C is not set
# CONFIG_SND_SOC_ES8328_SPI is not set
# CONFIG_SND_SOC_ES8375 is not set
# CONFIG_SND_SOC_ES8389 is not set
# CONFIG_SND_SOC_FS210X is not set
# CONFIG_SND_SOC_GTM601 is not set
# CONFIG_SND_SOC_HDA is not set
# CONFIG_SND_SOC_ICS43432 is not set
# CONFIG_SND_SOC_IDT821034 is not set
# CONFIG_SND_SOC_MAX98088 is not set
# CONFIG_SND_SOC_MAX98090 is not set
# CONFIG_SND_SOC_MAX98357A is not set
# CONFIG_SND_SOC_MAX98504 is not set
# CONFIG_SND_SOC_MAX9867 is not set
# CONFIG_SND_SOC_MAX98927 is not set
# CONFIG_SND_SOC_MAX98520 is not set
# CONFIG_SND_SOC_MAX98363 is not set
# CONFIG_SND_SOC_MAX98373_I2C is not set
# CONFIG_SND_SOC_MAX98373_SDW is not set
# CONFIG_SND_SOC_MAX98388 is not set
# CONFIG_SND_SOC_MAX98390 is not set
# CONFIG_SND_SOC_MAX98396 is not set
# CONFIG_SND_SOC_MAX9860 is not set
# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set
# CONFIG_SND_SOC_PCM1681 is not set
# CONFIG_SND_SOC_PCM1754 is not set
# CONFIG_SND_SOC_PCM1789_I2C is not set
# CONFIG_SND_SOC_PCM179X_I2C is not set
# CONFIG_SND_SOC_PCM179X_SPI is not set
# CONFIG_SND_SOC_PCM186X_I2C is not set
# CONFIG_SND_SOC_PCM186X_SPI is not set
# CONFIG_SND_SOC_PCM3060_I2C is not set
# CONFIG_SND_SOC_PCM3060_SPI is not set
# CONFIG_SND_SOC_PCM3168A_I2C is not set
# CONFIG_SND_SOC_PCM3168A_SPI is not set
# CONFIG_SND_SOC_PCM5102A is not set
# CONFIG_SND_SOC_PCM512x_I2C is not set
# CONFIG_SND_SOC_PCM512x_SPI is not set
# CONFIG_SND_SOC_PCM6240 is not set
# CONFIG_SND_SOC_PEB2466 is not set
# CONFIG_SND_SOC_PM4125_SDW is not set
# CONFIG_SND_SOC_RT1017_SDCA_SDW is not set
# CONFIG_SND_SOC_RT1308_SDW is not set
# CONFIG_SND_SOC_RT1316_SDW is not set
# CONFIG_SND_SOC_RT1318_SDW is not set
# CONFIG_SND_SOC_RT1320_SDW is not set
# CONFIG_SND_SOC_RT5575 is not set
# CONFIG_SND_SOC_RT5616 is not set
# CONFIG_SND_SOC_RT5631 is not set
# CONFIG_SND_SOC_RT5640 is not set
# CONFIG_SND_SOC_RT5659 is not set
# CONFIG_SND_SOC_RT5682_SDW is not set
# CONFIG_SND_SOC_RT700_SDW is not set
# CONFIG_SND_SOC_RT711_SDW is not set
# CONFIG_SND_SOC_RT711_SDCA_SDW is not set
# CONFIG_SND_SOC_RT712_SDCA_SDW is not set
# CONFIG_SND_SOC_RT712_SDCA_DMIC_SDW is not set
# CONFIG_SND_SOC_RT721_SDCA_SDW is not set
# CONFIG_SND_SOC_RT722_SDCA_SDW is not set
# CONFIG_SND_SOC_RT715_SDW is not set
# CONFIG_SND_SOC_RT715_SDCA_SDW is not set
# CONFIG_SND_SOC_RT9120 is not set
# CONFIG_SND_SOC_RT9123 is not set
# CONFIG_SND_SOC_RT9123P is not set
# CONFIG_SND_SOC_RTQ9124 is not set
# CONFIG_SND_SOC_RTQ9128 is not set
# CONFIG_SND_SOC_SDW_MOCKUP is not set
# CONFIG_SND_SOC_SGTL5000 is not set
# CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set
# CONFIG_SND_SOC_SIMPLE_MUX is not set
# CONFIG_SND_SOC_SMA1303 is not set
# CONFIG_SND_SOC_SMA1307 is not set
# CONFIG_SND_SOC_SPDIF is not set
# CONFIG_SND_SOC_SRC4XXX_I2C is not set
# CONFIG_SND_SOC_SSM2305 is not set
# CONFIG_SND_SOC_SSM2518 is not set
# CONFIG_SND_SOC_SSM2602_SPI is not set
# CONFIG_SND_SOC_SSM2602_I2C is not set
# CONFIG_SND_SOC_SSM3515 is not set
# CONFIG_SND_SOC_SSM4567 is not set
# CONFIG_SND_SOC_STA32X is not set
# CONFIG_SND_SOC_STA350 is not set
# CONFIG_SND_SOC_STI_SAS is not set
# CONFIG_SND_SOC_TAS2552 is not set
# CONFIG_SND_SOC_TAS2562 is not set
# CONFIG_SND_SOC_TAS2764 is not set
# CONFIG_SND_SOC_TAS2770 is not set
# CONFIG_SND_SOC_TAS2780 is not set
# CONFIG_SND_SOC_TAS2781_I2C is not set
# CONFIG_SND_SOC_TAS5086 is not set
# CONFIG_SND_SOC_TAS571X is not set
# CONFIG_SND_SOC_TAS5720 is not set
# CONFIG_SND_SOC_TAS5805M is not set
# CONFIG_SND_SOC_TAS6424 is not set
# CONFIG_SND_SOC_TDA7419 is not set
# CONFIG_SND_SOC_TFA9879 is not set
# CONFIG_SND_SOC_TFA989X is not set
# CONFIG_SND_SOC_TLV320ADC3XXX is not set
# CONFIG_SND_SOC_TLV320AIC23_I2C is not set
# CONFIG_SND_SOC_TLV320AIC23_SPI is not set
# CONFIG_SND_SOC_TLV320AIC31XX is not set
# CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set
# CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set
# CONFIG_SND_SOC_TLV320AIC3X_I2C is not set
# CONFIG_SND_SOC_TLV320AIC3X_SPI is not set
# CONFIG_SND_SOC_TLV320ADCX140 is not set
# CONFIG_SND_SOC_TS3A227E is not set
# CONFIG_SND_SOC_TSCS42XX is not set
# CONFIG_SND_SOC_TSCS454 is not set
# CONFIG_SND_SOC_UDA1334 is not set
# CONFIG_SND_SOC_UDA1342 is not set
# CONFIG_SND_SOC_UDA1380 is not set
# CONFIG_SND_SOC_WCD937X_SDW is not set
# CONFIG_SND_SOC_WCD938X_SDW is not set
# CONFIG_SND_SOC_WCD939X_SDW is not set
# CONFIG_SND_SOC_WM8510 is not set
# CONFIG_SND_SOC_WM8523 is not set
# CONFIG_SND_SOC_WM8524 is not set
# CONFIG_SND_SOC_WM8580 is not set
# CONFIG_SND_SOC_WM8711 is not set
# CONFIG_SND_SOC_WM8728 is not set
# CONFIG_SND_SOC_WM8731_I2C is not set
# CONFIG_SND_SOC_WM8731_SPI is not set
# CONFIG_SND_SOC_WM8737 is not set
# CONFIG_SND_SOC_WM8741 is not set
# CONFIG_SND_SOC_WM8750 is not set
# CONFIG_SND_SOC_WM8753 is not set
# CONFIG_SND_SOC_WM8770 is not set
# CONFIG_SND_SOC_WM8776 is not set
# CONFIG_SND_SOC_WM8782 is not set
# CONFIG_SND_SOC_WM8804_I2C is not set
# CONFIG_SND_SOC_WM8804_SPI is not set
# CONFIG_SND_SOC_WM8903 is not set
# CONFIG_SND_SOC_WM8904 is not set
# CONFIG_SND_SOC_WM8940 is not set
# CONFIG_SND_SOC_WM8960 is not set
# CONFIG_SND_SOC_WM8961 is not set
# CONFIG_SND_SOC_WM8962 is not set
# CONFIG_SND_SOC_WM8974 is not set
# CONFIG_SND_SOC_WM8978 is not set
# CONFIG_SND_SOC_WM8985 is not set
# CONFIG_SND_SOC_WSA881X is not set
# CONFIG_SND_SOC_WSA883X is not set
# CONFIG_SND_SOC_WSA884X is not set
# CONFIG_SND_SOC_ZL38060 is not set
# CONFIG_SND_SOC_MAX9759 is not set
# CONFIG_SND_SOC_MT6351 is not set
# CONFIG_SND_SOC_MT6357 is not set
# CONFIG_SND_SOC_MT6358 is not set
# CONFIG_SND_SOC_MT6660 is not set
# CONFIG_SND_SOC_NAU8315 is not set
# CONFIG_SND_SOC_NAU8325 is not set
# CONFIG_SND_SOC_NAU8540 is not set
# CONFIG_SND_SOC_NAU8810 is not set
# CONFIG_SND_SOC_NAU8821 is not set
# CONFIG_SND_SOC_NAU8822 is not set
# CONFIG_SND_SOC_NAU8824 is not set
# CONFIG_SND_SOC_NTP8918 is not set
# CONFIG_SND_SOC_NTP8835 is not set
# CONFIG_SND_SOC_TPA6130A2 is not set
# CONFIG_SND_SOC_LPASS_WSA_MACRO is not set
# CONFIG_SND_SOC_LPASS_VA_MACRO is not set
# CONFIG_SND_SOC_LPASS_RX_MACRO is not set
# CONFIG_SND_SOC_LPASS_TX_MACRO is not set
# end of CODEC drivers

#
# Generic drivers
#
# CONFIG_SND_SIMPLE_CARD is not set
# CONFIG_SND_AUDIO_GRAPH_CARD is not set
# CONFIG_SND_AUDIO_GRAPH_CARD2 is not set
# CONFIG_SND_TEST_COMPONENT is not set
# end of Generic drivers

CONFIG_SND_X86=y
# CONFIG_HDMI_LPE_AUDIO is not set
CONFIG_SND_VIRTIO=y
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
CONFIG_HID_BATTERY_STRENGTH=y
CONFIG_HIDRAW=y
CONFIG_UHID=y
CONFIG_HID_GENERIC=y
CONFIG_HID_HAPTIC=y

#
# Special HID drivers
#
CONFIG_HID_A4TECH=y
CONFIG_HID_ACCUTOUCH=y
CONFIG_HID_ACRUX=y
CONFIG_HID_ACRUX_FF=y
CONFIG_HID_APPLE=y
CONFIG_HID_APPLEIR=y
# CONFIG_HID_APPLETB_BL is not set
# CONFIG_HID_APPLETB_KBD is not set
CONFIG_HID_ASUS=y
CONFIG_HID_AUREAL=y
CONFIG_HID_BELKIN=y
CONFIG_HID_BETOP_FF=y
CONFIG_HID_BIGBEN_FF=y
CONFIG_HID_CHERRY=y
CONFIG_HID_CHICONY=y
CONFIG_HID_CORSAIR=y
CONFIG_HID_COUGAR=y
CONFIG_HID_MACALLY=y
CONFIG_HID_PRODIKEYS=y
CONFIG_HID_CMEDIA=y
CONFIG_HID_CP2112=y
CONFIG_HID_CREATIVE_SB0540=y
CONFIG_HID_CYPRESS=y
CONFIG_HID_DRAGONRISE=y
CONFIG_DRAGONRISE_FF=y
CONFIG_HID_EMS_FF=y
CONFIG_HID_ELAN=y
CONFIG_HID_ELECOM=y
CONFIG_HID_ELO=y
CONFIG_HID_EVISION=y
CONFIG_HID_EZKEY=y
CONFIG_HID_FT260=y
CONFIG_HID_GEMBIRD=y
CONFIG_HID_GFRM=y
CONFIG_HID_GLORIOUS=y
CONFIG_HID_HOLTEK=y
CONFIG_HOLTEK_FF=y
CONFIG_HID_VIVALDI_COMMON=y
# CONFIG_HID_GOODIX_SPI is not set
CONFIG_HID_GOOGLE_STADIA_FF=y
CONFIG_HID_VIVALDI=y
CONFIG_HID_GT683R=y
CONFIG_HID_KEYTOUCH=y
CONFIG_HID_KYE=y
# CONFIG_HID_KYSONA is not set
CONFIG_HID_UCLOGIC=y
CONFIG_HID_WALTOP=y
CONFIG_HID_VIEWSONIC=y
CONFIG_HID_VRC2=y
CONFIG_HID_XIAOMI=y
CONFIG_HID_GYRATION=y
CONFIG_HID_ICADE=y
CONFIG_HID_ITE=y
CONFIG_HID_JABRA=y
CONFIG_HID_TWINHAN=y
CONFIG_HID_KENSINGTON=y
CONFIG_HID_LCPOWER=y
CONFIG_HID_LED=y
CONFIG_HID_LENOVO=y
# CONFIG_HID_LENOVO_GO is not set
# CONFIG_HID_LENOVO_GO_S is not set
CONFIG_HID_LETSKETCH=y
CONFIG_HID_LOGITECH=y
CONFIG_HID_LOGITECH_DJ=y
CONFIG_HID_LOGITECH_HIDPP=y
CONFIG_LOGITECH_FF=y
CONFIG_LOGIRUMBLEPAD2_FF=y
CONFIG_LOGIG940_FF=y
CONFIG_LOGIWHEELS_FF=y
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MALTRON=y
CONFIG_HID_MAYFLASH=y
CONFIG_HID_MEGAWORLD_FF=y
CONFIG_HID_REDRAGON=y
CONFIG_HID_MICROSOFT=y
CONFIG_HID_MONTEREY=y
CONFIG_HID_MULTITOUCH=y
CONFIG_HID_NINTENDO=y
CONFIG_NINTENDO_FF=y
CONFIG_HID_NTI=y
CONFIG_HID_NTRIG=y
CONFIG_HID_NVIDIA_SHIELD=y
CONFIG_NVIDIA_SHIELD_FF=y
CONFIG_HID_ORTEK=y
CONFIG_HID_PANTHERLORD=y
CONFIG_PANTHERLORD_FF=y
CONFIG_HID_PENMOUNT=y
CONFIG_HID_PETALYNX=y
CONFIG_HID_PICOLCD=y
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=y
CONFIG_HID_PLAYSTATION=y
CONFIG_PLAYSTATION_FF=y
CONFIG_HID_PXRC=y
# CONFIG_HID_RAPOO is not set
CONFIG_HID_RAZER=y
CONFIG_HID_PRIMAX=y
CONFIG_HID_RETRODE=y
CONFIG_HID_ROCCAT=y
CONFIG_HID_SAITEK=y
CONFIG_HID_SAMSUNG=y
CONFIG_HID_SEMITEK=y
CONFIG_HID_SIGMAMICRO=y
CONFIG_HID_SONY=y
CONFIG_SONY_FF=y
CONFIG_HID_SPEEDLINK=y
CONFIG_HID_STEAM=y
CONFIG_STEAM_FF=y
CONFIG_HID_STEELSERIES=y
CONFIG_HID_SUNPLUS=y
CONFIG_HID_RMI=y
CONFIG_HID_GREENASIA=y
CONFIG_GREENASIA_FF=y
CONFIG_HID_SMARTJOYPLUS=y
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_HID_TIVO=y
CONFIG_HID_TOPSEED=y
CONFIG_HID_TOPRE=y
CONFIG_HID_THINGM=y
CONFIG_HID_THRUSTMASTER=y
CONFIG_THRUSTMASTER_FF=y
CONFIG_HID_UDRAW_PS3=y
CONFIG_HID_U2FZERO=y
# CONFIG_HID_UNIVERSAL_PIDFF is not set
CONFIG_HID_WACOM=y
CONFIG_HID_WIIMOTE=y
# CONFIG_HID_WINWING is not set
CONFIG_HID_XINMO=y
CONFIG_HID_ZEROPLUS=y
CONFIG_ZEROPLUS_FF=y
CONFIG_HID_ZYDACRON=y
CONFIG_HID_SENSOR_HUB=y
CONFIG_HID_SENSOR_CUSTOM_SENSOR=y
CONFIG_HID_ALPS=y
CONFIG_HID_MCP2200=y
CONFIG_HID_MCP2221=y
# CONFIG_HID_HUAWEI is not set
# end of Special HID drivers

#
# HID-BPF support
#
# end of HID-BPF support

CONFIG_I2C_HID=y
CONFIG_I2C_HID_ACPI=y
CONFIG_I2C_HID_OF=y
# CONFIG_I2C_HID_OF_ELAN is not set
# CONFIG_I2C_HID_OF_GOODIX is not set
CONFIG_I2C_HID_CORE=y

#
# Intel ISH HID support
#
CONFIG_INTEL_ISH_HID=y
CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER=y
# end of Intel ISH HID support

#
# AMD SFH HID Support
#
CONFIG_AMD_SFH_HID=y
# end of AMD SFH HID Support

#
# Surface System Aggregator Module HID support
#
CONFIG_SURFACE_HID=y
CONFIG_SURFACE_KBD=y
# end of Surface System Aggregator Module HID support

CONFIG_SURFACE_HID_CORE=y

#
# Intel THC HID Support
#
# CONFIG_INTEL_THC_HID is not set
# 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=y
CONFIG_USB_CONN_GPIO=y
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=y
CONFIG_USB_DYNAMIC_MINORS=y
CONFIG_USB_OTG=y
# CONFIG_USB_OTG_PRODUCTLIST is not set
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
CONFIG_USB_OTG_FSM=y
CONFIG_USB_LEDS_TRIGGER_USBPORT=y
CONFIG_USB_AUTOSUSPEND_DELAY=2
CONFIG_USB_DEFAULT_AUTHORIZATION_MODE=1
CONFIG_USB_MON=y

#
# USB Host Controller Drivers
#
CONFIG_USB_C67X00_HCD=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_DBGCAP=y
CONFIG_USB_XHCI_PCI=y
CONFIG_USB_XHCI_PCI_RENESAS=y
CONFIG_USB_XHCI_PLATFORM=y
# CONFIG_USB_XHCI_SIDEBAND is not set
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=y
CONFIG_USB_EHCI_HCD_PLATFORM=y
CONFIG_USB_OXU210HP_HCD=y
CONFIG_USB_ISP116X_HCD=y
CONFIG_USB_MAX3421_HCD=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PCI=y
# CONFIG_USB_OHCI_HCD_SSB is not set
CONFIG_USB_OHCI_HCD_PLATFORM=y
CONFIG_USB_UHCI_HCD=y
CONFIG_USB_SL811_HCD=y
CONFIG_USB_SL811_HCD_ISO=y
CONFIG_USB_SL811_CS=y
CONFIG_USB_R8A66597_HCD=y
CONFIG_USB_HCD_BCMA=y
CONFIG_USB_HCD_SSB=y
# CONFIG_USB_HCD_TEST_MODE is not set

#
# USB Device Class drivers
#
CONFIG_USB_ACM=y
CONFIG_USB_PRINTER=y
CONFIG_USB_WDM=y
CONFIG_USB_TMC=y

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
CONFIG_USB_STORAGE_REALTEK=y
CONFIG_REALTEK_AUTOPM=y
CONFIG_USB_STORAGE_DATAFAB=y
CONFIG_USB_STORAGE_FREECOM=y
CONFIG_USB_STORAGE_ISD200=y
CONFIG_USB_STORAGE_USBAT=y
CONFIG_USB_STORAGE_SDDR09=y
CONFIG_USB_STORAGE_SDDR55=y
CONFIG_USB_STORAGE_JUMPSHOT=y
CONFIG_USB_STORAGE_ALAUDA=y
CONFIG_USB_STORAGE_ONETOUCH=y
CONFIG_USB_STORAGE_KARMA=y
CONFIG_USB_STORAGE_CYPRESS_ATACB=y
CONFIG_USB_STORAGE_ENE_UB6250=y
CONFIG_USB_UAS=y

#
# USB Imaging devices
#
CONFIG_USB_MDC800=y
CONFIG_USB_MICROTEK=y
CONFIG_USBIP_CORE=y
CONFIG_USBIP_VHCI_HCD=y
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=16
CONFIG_USBIP_HOST=y
CONFIG_USBIP_VUDC=y
# CONFIG_USBIP_DEBUG is not set

#
# USB dual-mode controller drivers
#
CONFIG_USB_CDNS_SUPPORT=y
CONFIG_USB_CDNS_HOST=y
CONFIG_USB_CDNS3=y
CONFIG_USB_CDNS3_GADGET=y
CONFIG_USB_CDNS3_HOST=y
CONFIG_USB_CDNS3_PCI_WRAP=y
CONFIG_USB_CDNSP_PCI=y
CONFIG_USB_CDNSP_GADGET=y
CONFIG_USB_CDNSP_HOST=y
CONFIG_USB_MUSB_HDRC=y
# 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=y
CONFIG_USB_DWC3=y
CONFIG_USB_DWC3_ULPI=y
# CONFIG_USB_DWC3_HOST is not set
CONFIG_USB_DWC3_GADGET=y
# CONFIG_USB_DWC3_DUAL_ROLE is not set

#
# Platform Glue Driver Support
#
CONFIG_USB_DWC3_PCI=y
CONFIG_USB_DWC3_HAPS=y
CONFIG_USB_DWC3_OF_SIMPLE=y
CONFIG_USB_DWC3_GENERIC_PLAT=y
# CONFIG_USB_DWC3_GOOGLE is not set
CONFIG_USB_DWC2=y
CONFIG_USB_DWC2_HOST=y

#
# Gadget/Dual-role mode requires USB Gadget support to be enabled
#
# CONFIG_USB_DWC2_PERIPHERAL is not set
# CONFIG_USB_DWC2_DUAL_ROLE is not set
CONFIG_USB_DWC2_PCI=y
# CONFIG_USB_DWC2_DEBUG is not set
# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
CONFIG_USB_CHIPIDEA=y
CONFIG_USB_CHIPIDEA_UDC=y
CONFIG_USB_CHIPIDEA_HOST=y
CONFIG_USB_CHIPIDEA_PCI=y
CONFIG_USB_CHIPIDEA_MSM=y
CONFIG_USB_CHIPIDEA_NPCM=y
# CONFIG_USB_CHIPIDEA_IMX is not set
CONFIG_USB_CHIPIDEA_GENERIC=y
# CONFIG_USB_CHIPIDEA_TEGRA is not set
CONFIG_USB_ISP1760=y
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=y
CONFIG_USB_SERIAL_AIRCABLE=y
CONFIG_USB_SERIAL_ARK3116=y
CONFIG_USB_SERIAL_BELKIN=y
CONFIG_USB_SERIAL_CH341=y
CONFIG_USB_SERIAL_WHITEHEAT=y
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=y
CONFIG_USB_SERIAL_CP210X=y
CONFIG_USB_SERIAL_CYPRESS_M8=y
CONFIG_USB_SERIAL_EMPEG=y
CONFIG_USB_SERIAL_FTDI_SIO=y
CONFIG_USB_SERIAL_VISOR=y
CONFIG_USB_SERIAL_IPAQ=y
CONFIG_USB_SERIAL_IR=y
CONFIG_USB_SERIAL_EDGEPORT=y
CONFIG_USB_SERIAL_EDGEPORT_TI=y
CONFIG_USB_SERIAL_F81232=y
CONFIG_USB_SERIAL_F8153X=y
CONFIG_USB_SERIAL_GARMIN=y
CONFIG_USB_SERIAL_IPW=y
CONFIG_USB_SERIAL_IUU=y
CONFIG_USB_SERIAL_KEYSPAN_PDA=y
CONFIG_USB_SERIAL_KEYSPAN=y
CONFIG_USB_SERIAL_KLSI=y
CONFIG_USB_SERIAL_KOBIL_SCT=y
CONFIG_USB_SERIAL_MCT_U232=y
CONFIG_USB_SERIAL_METRO=y
CONFIG_USB_SERIAL_MOS7720=y
CONFIG_USB_SERIAL_MOS7715_PARPORT=y
CONFIG_USB_SERIAL_MOS7840=y
CONFIG_USB_SERIAL_MXUPORT=y
CONFIG_USB_SERIAL_NAVMAN=y
CONFIG_USB_SERIAL_PL2303=y
CONFIG_USB_SERIAL_OTI6858=y
CONFIG_USB_SERIAL_QCAUX=y
CONFIG_USB_SERIAL_QUALCOMM=y
CONFIG_USB_SERIAL_SPCP8X5=y
CONFIG_USB_SERIAL_SAFE=y
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
CONFIG_USB_SERIAL_SIERRAWIRELESS=y
CONFIG_USB_SERIAL_SYMBOL=y
CONFIG_USB_SERIAL_TI=y
CONFIG_USB_SERIAL_CYBERJACK=y
CONFIG_USB_SERIAL_WWAN=y
CONFIG_USB_SERIAL_OPTION=y
CONFIG_USB_SERIAL_OMNINET=y
CONFIG_USB_SERIAL_OPTICON=y
CONFIG_USB_SERIAL_XSENS_MT=y
CONFIG_USB_SERIAL_WISHBONE=y
CONFIG_USB_SERIAL_SSU100=y
CONFIG_USB_SERIAL_QT2=y
CONFIG_USB_SERIAL_UPD78F0730=y
CONFIG_USB_SERIAL_XR=y
CONFIG_USB_SERIAL_DEBUG=y

#
# USB Miscellaneous drivers
#
CONFIG_USB_USS720=y
CONFIG_USB_EMI62=y
CONFIG_USB_EMI26=y
CONFIG_USB_ADUTUX=y
CONFIG_USB_SEVSEG=y
CONFIG_USB_LEGOTOWER=y
CONFIG_USB_LCD=y
CONFIG_USB_CYPRESS_CY7C63=y
CONFIG_USB_CYTHERM=y
CONFIG_USB_IDMOUSE=y
CONFIG_USB_APPLEDISPLAY=y
CONFIG_APPLE_MFI_FASTCHARGE=y
CONFIG_USB_LJCA=y
# CONFIG_USB_USBIO is not set
CONFIG_USB_SISUSBVGA=y
CONFIG_USB_LD=y
CONFIG_USB_TRANCEVIBRATOR=y
CONFIG_USB_IOWARRIOR=y
CONFIG_USB_TEST=y
CONFIG_USB_EHSET_TEST_FIXTURE=y
CONFIG_USB_ISIGHTFW=y
CONFIG_USB_YUREX=y
CONFIG_USB_EZUSB_FX2=y
CONFIG_USB_HUB_USB251XB=y
CONFIG_USB_HSIC_USB3503=y
CONFIG_USB_HSIC_USB4604=y
CONFIG_USB_LINK_LAYER_TEST=y
CONFIG_USB_CHAOSKEY=y
# CONFIG_USB_ONBOARD_DEV is not set
CONFIG_USB_ATM=y
CONFIG_USB_SPEEDTOUCH=y
CONFIG_USB_CXACRU=y
CONFIG_USB_UEAGLEATM=y
CONFIG_USB_XUSBATM=y

#
# USB Physical Layer drivers
#
CONFIG_USB_PHY=y
CONFIG_NOP_USB_XCEIV=y
CONFIG_TAHVO_USB=y
CONFIG_TAHVO_USB_HOST_BY_DEFAULT=y
CONFIG_USB_ISP1301=y
# end of USB Physical Layer drivers

CONFIG_USB_GADGET=y
# CONFIG_USB_GADGET_DEBUG is not set
CONFIG_USB_GADGET_DEBUG_FILES=y
CONFIG_USB_GADGET_DEBUG_FS=y
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=y
CONFIG_USB_R8A66597=y
CONFIG_USB_PXA27X=y
CONFIG_USB_SNP_CORE=y
# CONFIG_USB_SNP_UDC_PLAT is not set
# CONFIG_USB_M66592 is not set
CONFIG_USB_BDC_UDC=y
CONFIG_USB_AMD5536UDC=y
CONFIG_USB_NET2280=y
CONFIG_USB_GOKU=y
CONFIG_USB_EG20T=y
# CONFIG_USB_GADGET_XILINX is not set
CONFIG_USB_MAX3420_UDC=y
CONFIG_USB_CDNS2_UDC=y
CONFIG_USB_DUMMY_HCD=y
# end of USB Peripheral Controller

CONFIG_USB_LIBCOMPOSITE=y
CONFIG_USB_F_ACM=y
CONFIG_USB_F_SS_LB=y
CONFIG_USB_U_SERIAL=y
CONFIG_USB_U_ETHER=y
CONFIG_USB_U_AUDIO=y
CONFIG_USB_F_SERIAL=y
CONFIG_USB_F_OBEX=y
CONFIG_USB_F_NCM=y
CONFIG_USB_F_ECM=y
CONFIG_USB_F_PHONET=y
CONFIG_USB_F_EEM=y
CONFIG_USB_F_SUBSET=y
CONFIG_USB_F_RNDIS=y
CONFIG_USB_F_MASS_STORAGE=y
CONFIG_USB_F_FS=y
CONFIG_USB_F_UAC1=y
CONFIG_USB_F_UAC1_LEGACY=y
CONFIG_USB_F_UAC2=y
CONFIG_USB_F_UVC=y
CONFIG_USB_F_MIDI=y
CONFIG_USB_F_MIDI2=y
CONFIG_USB_F_HID=y
CONFIG_USB_F_PRINTER=y
CONFIG_USB_F_TCM=y
CONFIG_USB_CONFIGFS=y
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 is not set
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_ETH is not set
# CONFIG_USB_G_NCM is not set
CONFIG_USB_GADGETFS=y
# CONFIG_USB_FUNCTIONFS is not set
# CONFIG_USB_MASS_STORAGE is not set
# CONFIG_USB_GADGET_TARGET is not set
# CONFIG_USB_G_SERIAL is not set
# CONFIG_USB_MIDI_GADGET is not set
# CONFIG_USB_G_PRINTER is not set
# CONFIG_USB_CDC_COMPOSITE is not set
# CONFIG_USB_G_NOKIA is not set
# CONFIG_USB_G_ACM_MS is not set
# CONFIG_USB_G_MULTI is not set
# CONFIG_USB_G_HID is not set
# CONFIG_USB_G_DBGP is not set
# CONFIG_USB_G_WEBCAM is not set
CONFIG_USB_RAW_GADGET=y
# end of USB Gadget precomposed configurations

CONFIG_TYPEC=y
CONFIG_TYPEC_TCPM=y
CONFIG_TYPEC_TCPCI=y
CONFIG_TYPEC_RT1711H=y
CONFIG_TYPEC_MT6360=y
CONFIG_TYPEC_TCPCI_MT6370=y
CONFIG_TYPEC_TCPCI_MAXIM=y
CONFIG_TYPEC_FUSB302=y
CONFIG_TYPEC_WCOVE=y
CONFIG_TYPEC_UCSI=y
CONFIG_UCSI_CCG=y
CONFIG_UCSI_ACPI=y
CONFIG_UCSI_STM32G0=y
CONFIG_TYPEC_TPS6598X=y
CONFIG_TYPEC_ANX7411=y
CONFIG_TYPEC_RT1719=y
CONFIG_TYPEC_HD3SS3220=y
CONFIG_TYPEC_STUSB160X=y
CONFIG_TYPEC_WUSB3801=y

#
# USB Type-C Multiplexer/DeMultiplexer Switch support
#
CONFIG_TYPEC_MUX_FSA4480=y
CONFIG_TYPEC_MUX_GPIO_SBU=y
CONFIG_TYPEC_MUX_PI3USB30532=y
CONFIG_TYPEC_MUX_INTEL_PMC=y
# CONFIG_TYPEC_MUX_IT5205 is not set
CONFIG_TYPEC_MUX_NB7VPQ904M=y
# CONFIG_TYPEC_MUX_PS883X is not set
CONFIG_TYPEC_MUX_PTN36502=y
# CONFIG_TYPEC_MUX_TUSB1046 is not set
CONFIG_TYPEC_MUX_WCD939X_USBSS=y
# end of USB Type-C Multiplexer/DeMultiplexer Switch support

#
# USB Type-C Alternate Mode drivers
#
CONFIG_TYPEC_DP_ALTMODE=y
CONFIG_TYPEC_NVIDIA_ALTMODE=y
# CONFIG_TYPEC_TBT_ALTMODE is not set
# end of USB Type-C Alternate Mode drivers

CONFIG_USB_ROLE_SWITCH=y
CONFIG_USB_ROLES_INTEL_XHCI=y
CONFIG_MMC=y
# CONFIG_PWRSEQ_EMMC is not set
# CONFIG_PWRSEQ_SD8787 is not set
# CONFIG_PWRSEQ_SIMPLE is not set
# CONFIG_MMC_BLOCK is not set
# CONFIG_SDIO_UART is not set
# CONFIG_MMC_TEST is not set
# CONFIG_MMC_CRYPTO is not set

#
# MMC/SD/SDIO Host Controller Drivers
#
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_SDHCI is not set
# CONFIG_MMC_WBSD is not set
# CONFIG_MMC_TIFM_SD is not set
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_SDRICOH_CS is not set
# CONFIG_MMC_CB710 is not set
# CONFIG_MMC_VIA_SDMMC is not set
CONFIG_MMC_VUB300=y
CONFIG_MMC_USHC=y
# CONFIG_MMC_USDHI6ROL0 is not set
CONFIG_MMC_REALTEK_USB=y
# CONFIG_MMC_CQHCI is not set
# CONFIG_MMC_HSQ is not set
# CONFIG_MMC_TOSHIBA_PCI is not set
# CONFIG_MMC_MTK is not set
# CONFIG_SCSI_UFSHCD is not set
CONFIG_MEMSTICK=y
# CONFIG_MEMSTICK_DEBUG is not set

#
# MemoryStick drivers
#
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MSPRO_BLOCK is not set
# CONFIG_MS_BLOCK is not set

#
# MemoryStick Host Controller Drivers
#
# CONFIG_MEMSTICK_TIFM_MS is not set
# CONFIG_MEMSTICK_JMICRON_38X is not set
# CONFIG_MEMSTICK_R592 is not set
CONFIG_MEMSTICK_REALTEK_USB=y
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
# CONFIG_LEDS_CLASS_FLASH is not set
CONFIG_LEDS_CLASS_MULTICOLOR=y
# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set

#
# LED drivers
#
# CONFIG_LEDS_AN30259A is not set
# CONFIG_LEDS_APU is not set
# CONFIG_LEDS_OSRAM_AMS_AS3668 is not set
# CONFIG_LEDS_AW200XX is not set
# CONFIG_LEDS_AW2013 is not set
# CONFIG_LEDS_BCM6328 is not set
# CONFIG_LEDS_BCM6358 is not set
# CONFIG_LEDS_CHT_WCOVE is not set
# CONFIG_LEDS_CR0014114 is not set
# CONFIG_LEDS_EL15203000 is not set
# CONFIG_LEDS_LM3530 is not set
# CONFIG_LEDS_LM3532 is not set
# CONFIG_LEDS_LM3642 is not set
# CONFIG_LEDS_LM3692X is not set
# CONFIG_LEDS_PCA9532 is not set
# CONFIG_LEDS_GPIO is not set
# CONFIG_LEDS_LP3944 is not set
# CONFIG_LEDS_LP3952 is not set
# CONFIG_LEDS_LP50XX is not set
# CONFIG_LEDS_LP55XX_COMMON is not set
# CONFIG_LEDS_LP8860 is not set
# CONFIG_LEDS_LP8864 is not set
# CONFIG_LEDS_PCA955X is not set
# CONFIG_LEDS_PCA963X is not set
# CONFIG_LEDS_PCA995X is not set
# CONFIG_LEDS_DAC124S085 is not set
# CONFIG_LEDS_REGULATOR is not set
# CONFIG_LEDS_BD2606MVV is not set
# CONFIG_LEDS_BD2802 is not set
# CONFIG_LEDS_INTEL_SS4200 is not set
# CONFIG_LEDS_LT3593 is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
# CONFIG_LEDS_LM355x is not set
# CONFIG_LEDS_IS31FL319X is not set
# CONFIG_LEDS_IS31FL32XX is not set

#
# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
#
# CONFIG_LEDS_BLINKM is not set
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_MLXCPLD is not set
# CONFIG_LEDS_MLXREG is not set
# CONFIG_LEDS_USER is not set
# CONFIG_LEDS_NIC78BX is not set
# CONFIG_LEDS_SPI_BYTE is not set
# CONFIG_LEDS_LM3697 is not set
# CONFIG_LEDS_ST1202 is not set
# CONFIG_LEDS_LGM is not set

#
# Flash and Torch LED drivers
#

#
# RGB LED drivers
#
# CONFIG_LEDS_GROUP_MULTICOLOR is not set
# CONFIG_LEDS_KTD202X is not set
# CONFIG_LEDS_LP5812 is not set
# CONFIG_LEDS_NCP5623 is not set
# CONFIG_LEDS_MT6370_RGB is not set

#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
# CONFIG_LEDS_TRIGGER_TIMER is not set
# CONFIG_LEDS_TRIGGER_ONESHOT is not set
# CONFIG_LEDS_TRIGGER_DISK is not set
# CONFIG_LEDS_TRIGGER_MTD is not set
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
# CONFIG_LEDS_TRIGGER_CPU is not set
# CONFIG_LEDS_TRIGGER_ACTIVITY is not set
# CONFIG_LEDS_TRIGGER_GPIO is not set
# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set

#
# iptables trigger is under Netfilter config (LED target)
#
# CONFIG_LEDS_TRIGGER_TRANSIENT is not set
# CONFIG_LEDS_TRIGGER_CAMERA is not set
# CONFIG_LEDS_TRIGGER_PANIC is not set
# CONFIG_LEDS_TRIGGER_NETDEV is not set
# CONFIG_LEDS_TRIGGER_PATTERN is not set
# CONFIG_LEDS_TRIGGER_TTY is not set
# CONFIG_LEDS_TRIGGER_INPUT_EVENTS is not set

#
# Simatic LED drivers
#
# CONFIG_ACCESSIBILITY is not set
CONFIG_INFINIBAND=y
CONFIG_INFINIBAND_USER_MAD=y
CONFIG_INFINIBAND_USER_ACCESS=y
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_EFA is not set
# CONFIG_INFINIBAND_ERDMA is not set
CONFIG_MLX4_INFINIBAND=y
# CONFIG_INFINIBAND_MTHCA is not set
# CONFIG_INFINIBAND_OCRDMA is not set
# CONFIG_INFINIBAND_USNIC is not set
# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set
# CONFIG_INFINIBAND_RDMAVT is not set
CONFIG_RDMA_RXE=y
CONFIG_RDMA_SIW=y
CONFIG_INFINIBAND_IPOIB=y
CONFIG_INFINIBAND_IPOIB_CM=y
CONFIG_INFINIBAND_IPOIB_DEBUG=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
CONFIG_INFINIBAND_SRP=y
# CONFIG_INFINIBAND_SRPT is not set
CONFIG_INFINIBAND_ISER=y
CONFIG_INFINIBAND_RTRS=y
CONFIG_INFINIBAND_RTRS_CLIENT=y
# CONFIG_INFINIBAND_RTRS_SERVER is not set
# CONFIG_INFINIBAND_OPA_VNIC is not set
CONFIG_EDAC_ATOMIC_SCRUB=y
CONFIG_EDAC_SUPPORT=y
CONFIG_EDAC=y
# CONFIG_EDAC_DEBUG is not set
# CONFIG_EDAC_DECODE_MCE is not set
# CONFIG_EDAC_SCRUB is not set
# CONFIG_EDAC_ECS is not set
# CONFIG_EDAC_MEM_REPAIR is not set
# CONFIG_EDAC_E752X is not set
# CONFIG_EDAC_I82975X is not set
# CONFIG_EDAC_I3000 is not set
# CONFIG_EDAC_I3200 is not set
# CONFIG_EDAC_IE31200 is not set
# CONFIG_EDAC_X38 is not set
# CONFIG_EDAC_I5400 is not set
# CONFIG_EDAC_I7CORE is not set
# CONFIG_EDAC_I5100 is not set
# CONFIG_EDAC_I7300 is not set
# CONFIG_EDAC_SBRIDGE is not set
# CONFIG_EDAC_SKX is not set
# CONFIG_EDAC_I10NM is not set
# CONFIG_EDAC_IMH is not set
# CONFIG_EDAC_PND2 is not set
# CONFIG_EDAC_IGEN6 is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_MC146818_LIB=y
CONFIG_RTC_CLASS=y
# CONFIG_RTC_HCTOSYS is not set
CONFIG_RTC_SYSTOHC=y
CONFIG_RTC_SYSTOHC_DEVICE="rtc0"
# CONFIG_RTC_DEBUG is not set
# CONFIG_RTC_NVMEM is not set

#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
# CONFIG_RTC_DRV_TEST is not set

#
# I2C RTC drivers
#
# CONFIG_RTC_DRV_ABB5ZES3 is not set
# CONFIG_RTC_DRV_ABEOZ9 is not set
# CONFIG_RTC_DRV_ABX80X is not set
# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1374 is not set
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_HYM8563 is not set
# CONFIG_RTC_DRV_MAX6900 is not set
# CONFIG_RTC_DRV_MAX31335 is not set
# CONFIG_RTC_DRV_NCT3018Y is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_ISL1208 is not set
# CONFIG_RTC_DRV_ISL12022 is not set
# CONFIG_RTC_DRV_ISL12026 is not set
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_PCF8523 is not set
# CONFIG_RTC_DRV_PCF85363 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_M41T80 is not set
# CONFIG_RTC_DRV_BQ32K is not set
# CONFIG_RTC_DRV_TWL4030 is not set
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_FM3130 is not set
# CONFIG_RTC_DRV_RX8010 is not set
# CONFIG_RTC_DRV_RX8111 is not set
# CONFIG_RTC_DRV_RX8581 is not set
# CONFIG_RTC_DRV_RX8025 is not set
# CONFIG_RTC_DRV_EM3027 is not set
# CONFIG_RTC_DRV_RV3028 is not set
# CONFIG_RTC_DRV_RV3032 is not set
# CONFIG_RTC_DRV_RV8803 is not set
# CONFIG_RTC_DRV_SD2405AL is not set
# CONFIG_RTC_DRV_SD3078 is not set

#
# SPI RTC drivers
#
# CONFIG_RTC_DRV_M41T93 is not set
# CONFIG_RTC_DRV_M41T94 is not set
# CONFIG_RTC_DRV_DS1302 is not set
# CONFIG_RTC_DRV_DS1305 is not set
# CONFIG_RTC_DRV_DS1343 is not set
# CONFIG_RTC_DRV_DS1347 is not set
# CONFIG_RTC_DRV_DS1390 is not set
# CONFIG_RTC_DRV_MAX6916 is not set
# CONFIG_RTC_DRV_R9701 is not set
# CONFIG_RTC_DRV_RX4581 is not set
# CONFIG_RTC_DRV_RS5C348 is not set
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_PCF2123 is not set
# CONFIG_RTC_DRV_MCP795 is not set
CONFIG_RTC_I2C_AND_SPI=y

#
# SPI and I2C RTC drivers
#
# CONFIG_RTC_DRV_DS3232 is not set
# CONFIG_RTC_DRV_PCF2127 is not set
# CONFIG_RTC_DRV_PCF85063 is not set
# CONFIG_RTC_DRV_RV3029C2 is not set
# CONFIG_RTC_DRV_RX6110 is not set

#
# Platform RTC drivers
#
CONFIG_RTC_DRV_CMOS=y
# CONFIG_RTC_DRV_DS1286 is not set
# CONFIG_RTC_DRV_DS1511 is not set
# CONFIG_RTC_DRV_DS1553 is not set
# CONFIG_RTC_DRV_DS1685_FAMILY is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_DS2404 is not set
# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not set
# CONFIG_RTC_DRV_MSM6242 is not set
# CONFIG_RTC_DRV_RP5C01 is not set
# CONFIG_RTC_DRV_ZYNQMP is not set

#
# on-CPU RTC drivers
#
# CONFIG_RTC_DRV_CADENCE is not set
# CONFIG_RTC_DRV_FTRTC010 is not set
# CONFIG_RTC_DRV_R7301 is not set
# CONFIG_RTC_DRV_GOLDFISH is not set

#
# HID Sensor RTC drivers
#
CONFIG_RTC_DRV_HID_SENSOR_TIME=y
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_DMA_OF=y
# CONFIG_ALTERA_MSGDMA is not set
# CONFIG_DW_AXI_DMAC is not set
# CONFIG_FSL_EDMA is not set
CONFIG_INTEL_IDMA64=y
# CONFIG_INTEL_IDXD is not set
# CONFIG_INTEL_IDXD_COMPAT is not set
CONFIG_INTEL_IOATDMA=y
# CONFIG_PLX_DMA is not set
# CONFIG_SWITCHTEC_DMA is not set
# CONFIG_XILINX_DMA is not set
# CONFIG_XILINX_XDMA is not set
# CONFIG_XILINX_ZYNQMP_DPDMA is not set
# CONFIG_AMD_PTDMA is not set
# CONFIG_AMD_QDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
# CONFIG_QCOM_HIDMA is not set
CONFIG_DW_DMAC_CORE=y
# CONFIG_DW_DMAC is not set
# CONFIG_DW_DMAC_PCI is not set
# CONFIG_DW_EDMA is not set
CONFIG_HSU_DMA=y
# CONFIG_SF_PDMA is not set
# CONFIG_INTEL_LDMA is not set

#
# 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=y
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=y
# CONFIG_UIO is not set
CONFIG_VFIO=y
CONFIG_VFIO_DEVICE_CDEV=y
# CONFIG_VFIO_GROUP is not set
CONFIG_VFIO_VIRQFD=y
# CONFIG_VFIO_DEBUGFS is not set

#
# VFIO support for PCI devices
#
CONFIG_VFIO_PCI_CORE=y
CONFIG_VFIO_PCI_INTX=y
CONFIG_VFIO_PCI=y
# CONFIG_VFIO_PCI_VGA is not set
# CONFIG_VFIO_PCI_IGD is not set
# CONFIG_VIRTIO_VFIO_PCI is not set
# end of VFIO support for PCI devices

CONFIG_IRQ_BYPASS_MANAGER=y
# CONFIG_VIRT_DRIVERS is not set
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=y
CONFIG_VIRTIO_PMEM=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_VIRTIO_MEM=y
CONFIG_VIRTIO_INPUT=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_VIRTIO_DMA_SHARED_BUFFER=y
# CONFIG_VIRTIO_DEBUG is not set
# CONFIG_VIRTIO_RTC is not set
CONFIG_VDPA=y
CONFIG_VDPA_SIM=y
CONFIG_VDPA_SIM_NET=y
CONFIG_VDPA_SIM_BLOCK=y
# CONFIG_VDPA_USER is not set
# CONFIG_IFCVF is not set
# CONFIG_MLX5_VDPA_STEERING_DEBUG is not set
CONFIG_VP_VDPA=y
# CONFIG_ALIBABA_ENI_VDPA is not set
# CONFIG_SNET_VDPA is not set
# CONFIG_OCTEONEP_VDPA is not set
CONFIG_VHOST_IOTLB=y
CONFIG_VHOST_RING=y
CONFIG_VHOST_TASK=y
CONFIG_VHOST=y
CONFIG_VHOST_MENU=y
CONFIG_VHOST_NET=y
# CONFIG_VHOST_SCSI is not set
CONFIG_VHOST_VSOCK=y
CONFIG_VHOST_VDPA=y
CONFIG_VHOST_CROSS_ENDIAN_LEGACY=y
CONFIG_VHOST_ENABLE_FORK_OWNER_CONTROL=y

#
# Microsoft Hyper-V guest support
#
# CONFIG_HYPERV is not set
# end of Microsoft Hyper-V guest support

CONFIG_GREYBUS=y
# CONFIG_GREYBUS_BEAGLEPLAY is not set
CONFIG_GREYBUS_ES2=y
CONFIG_COMEDI=y
# CONFIG_COMEDI_DEBUG is not set
CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048
CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
CONFIG_COMEDI_MISC_DRIVERS=y
CONFIG_COMEDI_BOND=y
CONFIG_COMEDI_TEST=y
CONFIG_COMEDI_PARPORT=y
CONFIG_COMEDI_ISA_DRIVERS=y
CONFIG_COMEDI_PCL711=y
CONFIG_COMEDI_PCL724=y
CONFIG_COMEDI_PCL726=y
CONFIG_COMEDI_PCL730=y
CONFIG_COMEDI_PCL812=y
CONFIG_COMEDI_PCL816=y
CONFIG_COMEDI_PCL818=y
CONFIG_COMEDI_PCM3724=y
CONFIG_COMEDI_AMPLC_DIO200_ISA=y
CONFIG_COMEDI_AMPLC_PC236_ISA=y
CONFIG_COMEDI_AMPLC_PC263_ISA=y
CONFIG_COMEDI_RTI800=y
CONFIG_COMEDI_RTI802=y
CONFIG_COMEDI_DAC02=y
CONFIG_COMEDI_DAS16M1=y
CONFIG_COMEDI_DAS08_ISA=y
# CONFIG_COMEDI_DAS16 is not set
CONFIG_COMEDI_DAS800=y
CONFIG_COMEDI_DAS1800=y
CONFIG_COMEDI_DAS6402=y
CONFIG_COMEDI_DT2801=y
CONFIG_COMEDI_DT2811=y
CONFIG_COMEDI_DT2814=y
CONFIG_COMEDI_DT2815=y
CONFIG_COMEDI_DT2817=y
CONFIG_COMEDI_DT282X=y
CONFIG_COMEDI_DMM32AT=y
CONFIG_COMEDI_FL512=y
CONFIG_COMEDI_AIO_AIO12_8=y
CONFIG_COMEDI_AIO_IIRO_16=y
# CONFIG_COMEDI_II_PCI20KC is not set
CONFIG_COMEDI_C6XDIGIO=y
CONFIG_COMEDI_MPC624=y
CONFIG_COMEDI_ADQ12B=y
CONFIG_COMEDI_NI_AT_A2150=y
CONFIG_COMEDI_NI_AT_AO=y
# CONFIG_COMEDI_NI_ATMIO is not set
CONFIG_COMEDI_NI_ATMIO16D=y
CONFIG_COMEDI_NI_LABPC_ISA=y
CONFIG_COMEDI_PCMAD=y
CONFIG_COMEDI_PCMDA12=y
CONFIG_COMEDI_PCMMIO=y
CONFIG_COMEDI_PCMUIO=y
CONFIG_COMEDI_MULTIQ3=y
CONFIG_COMEDI_S526=y
CONFIG_COMEDI_PCI_DRIVERS=y
CONFIG_COMEDI_8255_PCI=y
# CONFIG_COMEDI_ADDI_APCI_1032 is not set
# CONFIG_COMEDI_ADDI_APCI_1500 is not set
# CONFIG_COMEDI_ADDI_APCI_1516 is not set
# CONFIG_COMEDI_ADDI_APCI_1564 is not set
# CONFIG_COMEDI_ADDI_APCI_16XX is not set
# CONFIG_COMEDI_ADDI_APCI_2032 is not set
# CONFIG_COMEDI_ADDI_APCI_2200 is not set
# CONFIG_COMEDI_ADDI_APCI_3120 is not set
# CONFIG_COMEDI_ADDI_APCI_3501 is not set
# CONFIG_COMEDI_ADDI_APCI_3XXX is not set
# CONFIG_COMEDI_ADL_PCI6208 is not set
# CONFIG_COMEDI_ADL_PCI7250 is not set
# CONFIG_COMEDI_ADL_PCI7X3X is not set
# CONFIG_COMEDI_ADL_PCI8164 is not set
# CONFIG_COMEDI_ADL_PCI9111 is not set
CONFIG_COMEDI_ADL_PCI9118=y
# CONFIG_COMEDI_ADV_PCI1710 is not set
# CONFIG_COMEDI_ADV_PCI1720 is not set
# CONFIG_COMEDI_ADV_PCI1723 is not set
# CONFIG_COMEDI_ADV_PCI1724 is not set
# CONFIG_COMEDI_ADV_PCI1760 is not set
# CONFIG_COMEDI_ADV_PCI_DIO is not set
# CONFIG_COMEDI_AMPLC_DIO200_PCI is not set
# CONFIG_COMEDI_AMPLC_PC236_PCI is not set
# CONFIG_COMEDI_AMPLC_PC263_PCI is not set
# CONFIG_COMEDI_AMPLC_PCI224 is not set
# CONFIG_COMEDI_AMPLC_PCI230 is not set
# CONFIG_COMEDI_CONTEC_PCI_DIO is not set
# CONFIG_COMEDI_DAS08_PCI is not set
# CONFIG_COMEDI_DT3000 is not set
# CONFIG_COMEDI_DYNA_PCI10XX is not set
# CONFIG_COMEDI_GSC_HPDI is not set
# CONFIG_COMEDI_MF6X4 is not set
# CONFIG_COMEDI_ICP_MULTI is not set
# CONFIG_COMEDI_DAQBOARD2000 is not set
# CONFIG_COMEDI_JR3_PCI is not set
# CONFIG_COMEDI_KE_COUNTER is not set
# CONFIG_COMEDI_CB_PCIDAS64 is not set
# CONFIG_COMEDI_CB_PCIDAS is not set
# CONFIG_COMEDI_CB_PCIDDA is not set
# CONFIG_COMEDI_CB_PCIMDAS is not set
# CONFIG_COMEDI_CB_PCIMDDA is not set
# CONFIG_COMEDI_ME4000 is not set
# CONFIG_COMEDI_ME_DAQ is not set
# CONFIG_COMEDI_NI_6527 is not set
# CONFIG_COMEDI_NI_65XX is not set
# CONFIG_COMEDI_NI_660X is not set
# CONFIG_COMEDI_NI_670X is not set
CONFIG_COMEDI_NI_LABPC_PCI=y
# CONFIG_COMEDI_NI_PCIDIO is not set
# CONFIG_COMEDI_NI_PCIMIO is not set
# CONFIG_COMEDI_RTD520 is not set
# CONFIG_COMEDI_S626 is not set
CONFIG_COMEDI_PCMCIA_DRIVERS=y
# CONFIG_COMEDI_CB_DAS16_CS is not set
# CONFIG_COMEDI_DAS08_CS is not set
CONFIG_COMEDI_NI_DAQ_700_CS=y
# CONFIG_COMEDI_NI_DAQ_DIO24_CS is not set
CONFIG_COMEDI_NI_LABPC_CS=y
# CONFIG_COMEDI_NI_MIO_CS is not set
# CONFIG_COMEDI_QUATECH_DAQP_CS is not set
CONFIG_COMEDI_USB_DRIVERS=y
CONFIG_COMEDI_DT9812=y
CONFIG_COMEDI_NI_USB6501=y
CONFIG_COMEDI_USBDUX=y
CONFIG_COMEDI_USBDUXFAST=y
CONFIG_COMEDI_USBDUXSIGMA=y
CONFIG_COMEDI_VMK80XX=y
CONFIG_COMEDI_8254=y
CONFIG_COMEDI_8255=y
CONFIG_COMEDI_8255_SA=y
CONFIG_COMEDI_KCOMEDILIB=y
CONFIG_COMEDI_AMPLC_DIO200=y
CONFIG_COMEDI_AMPLC_PC236=y
CONFIG_COMEDI_DAS08=y
CONFIG_COMEDI_ISADMA=y
CONFIG_COMEDI_NI_LABPC=y
CONFIG_COMEDI_NI_LABPC_ISADMA=y
# CONFIG_COMEDI_TESTS is not set
# CONFIG_GPIB is not set
CONFIG_STAGING=y
# CONFIG_RTL8723BS is not set

#
# IIO staging drivers
#

#
# Accelerometers
#
# CONFIG_ADIS16203 is not set
# end of Accelerometers

#
# Analog to digital converters
#
# CONFIG_AD7816 is not set
# end of Analog to digital converters

#
# Analog digital bi-direction converters
#
# CONFIG_ADT7316 is not set
# end of Analog digital bi-direction converters

#
# Direct Digital Synthesis
#
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# end of Direct Digital Synthesis

#
# Network Analyzer, Impedance Converters
#
# CONFIG_AD5933 is not set
# end of Network Analyzer, Impedance Converters
# end of IIO staging drivers

# CONFIG_FB_SM750 is not set
# CONFIG_STAGING_MEDIA is not set
# CONFIG_FB_TFT is not set
# CONFIG_MOST_COMPONENTS is not set
# CONFIG_GREYBUS_AUDIO is not set
# CONFIG_GREYBUS_BOOTROM is not set
# CONFIG_GREYBUS_FIRMWARE is not set
CONFIG_GREYBUS_HID=y
# CONFIG_GREYBUS_LOG is not set
# CONFIG_GREYBUS_LOOPBACK is not set
# CONFIG_GREYBUS_POWER is not set
# CONFIG_GREYBUS_RAW is not set
# CONFIG_GREYBUS_VIBRATOR is not set
CONFIG_GREYBUS_BRIDGED_PHY=y
# CONFIG_GREYBUS_GPIO is not set
# CONFIG_GREYBUS_I2C is not set
# CONFIG_GREYBUS_SDIO is not set
# CONFIG_GREYBUS_SPI is not set
# CONFIG_GREYBUS_UART is not set
CONFIG_GREYBUS_USB=y
# CONFIG_XIL_AXIS_FIFO is not set
# CONFIG_VME_BUS is not set
# CONFIG_GOLDFISH is not set
# CONFIG_CHROME_PLATFORMS is not set
# CONFIG_MELLANOX_PLATFORM is not set
CONFIG_SURFACE_PLATFORMS=y
# CONFIG_SURFACE3_WMI is not set
# CONFIG_SURFACE_3_POWER_OPREGION is not set
# CONFIG_SURFACE_ACPI_NOTIFY is not set
# CONFIG_SURFACE_AGGREGATOR_CDEV is not set
# CONFIG_SURFACE_AGGREGATOR_HUB is not set
CONFIG_SURFACE_AGGREGATOR_REGISTRY=y
# CONFIG_SURFACE_AGGREGATOR_TABLET_SWITCH is not set
# CONFIG_SURFACE_DTX is not set
# CONFIG_SURFACE_GPE is not set
# CONFIG_SURFACE_HOTPLUG is not set
# CONFIG_SURFACE_PLATFORM_PROFILE is not set
# CONFIG_SURFACE_PRO3_BUTTON is not set
CONFIG_SURFACE_AGGREGATOR=y
CONFIG_SURFACE_AGGREGATOR_BUS=y
CONFIG_X86_PLATFORM_DEVICES=y
CONFIG_WMI_BMOF=y
# CONFIG_HUAWEI_WMI is not set
# CONFIG_X86_PLATFORM_DRIVERS_UNIWILL is not set
# CONFIG_MXM_WMI is not set
# CONFIG_NVIDIA_WMI_EC_BACKLIGHT is not set
# CONFIG_XIAOMI_WMI is not set
# CONFIG_REDMI_WMI is not set
# CONFIG_GIGABYTE_WMI is not set
# CONFIG_ACERHDF is not set
# CONFIG_ACER_WIRELESS is not set
# CONFIG_ACER_WMI is not set

#
# AMD HSMP Driver
#
# CONFIG_AMD_HSMP_ACPI is not set
# CONFIG_AMD_HSMP_PLAT is not set
# end of AMD HSMP Driver

# CONFIG_AMD_PMC is not set
# CONFIG_AMD_HFI is not set
# CONFIG_AMD_3D_VCACHE is not set
# CONFIG_AMD_WBRF is not set
# CONFIG_AMD_ISP_PLATFORM is not set
# CONFIG_ADV_SWBUTTON is not set
# CONFIG_APPLE_GMUX is not set
# CONFIG_ASUS_LAPTOP is not set
# CONFIG_ASUS_WIRELESS is not set
# CONFIG_ASUS_ARMOURY is not set
CONFIG_ASUS_WMI=y
# CONFIG_ASUS_WMI_DEPRECATED_ATTRS is not set
# CONFIG_ASUS_NB_WMI is not set
CONFIG_ASUS_TF103C_DOCK=y
# CONFIG_AYANEO_EC is not set
CONFIG_EEEPC_LAPTOP=y
# CONFIG_EEEPC_WMI is not set
# CONFIG_X86_PLATFORM_DRIVERS_DELL is not set
# CONFIG_AMILO_RFKILL is not set
# CONFIG_FUJITSU_LAPTOP is not set
# CONFIG_FUJITSU_TABLET is not set
# CONFIG_GPD_POCKET_FAN is not set
# CONFIG_X86_PLATFORM_DRIVERS_HP is not set
# CONFIG_WIRELESS_HOTKEY is not set
# CONFIG_IBM_RTL is not set
# CONFIG_SENSORS_HDAPS is not set
# CONFIG_INTEL_ATOMISP2_PM is not set
# CONFIG_INTEL_IFS is not set
# CONFIG_INTEL_SAR_INT1092 is not set
# CONFIG_INTEL_SKL_INT3472 is not set

#
# Intel Speed Select Technology interface support
#
# CONFIG_INTEL_SPEED_SELECT_INTERFACE is not set
# end of Intel Speed Select Technology interface support

# CONFIG_INTEL_WMI_SBL_FW_UPDATE is not set
# CONFIG_INTEL_WMI_THUNDERBOLT is not set

#
# Intel Uncore Frequency Control
#
# CONFIG_INTEL_UNCORE_FREQ_CONTROL is not set
# end of Intel Uncore Frequency Control

# CONFIG_INTEL_HID_EVENT is not set
# CONFIG_INTEL_VBTN is not set
# CONFIG_INTEL_EHL_PSE_IO is not set
# CONFIG_INTEL_INT0002_VGPIO is not set
# CONFIG_INTEL_OAKTRAIL is not set
# CONFIG_INTEL_BXTWC_PMIC_TMU is not set
CONFIG_INTEL_CHTWC_INT33FE=y
CONFIG_INTEL_ISHTP_ECLITE=y
# CONFIG_INTEL_PUNIT_IPC is not set
# CONFIG_INTEL_RST is not set
# CONFIG_INTEL_SMARTCONNECT is not set
# CONFIG_INTEL_TURBO_MAX_3 is not set
# CONFIG_INTEL_VSEC is not set
# CONFIG_IDEAPAD_LAPTOP is not set
# CONFIG_LENOVO_WMI_HOTKEY_UTILITIES is not set
# CONFIG_LENOVO_WMI_CAMERA is not set
# CONFIG_THINKPAD_ACPI is not set
# CONFIG_THINKPAD_LMI is not set
# CONFIG_YOGABOOK is not set
# CONFIG_YT2_1380 is not set
# CONFIG_LENOVO_WMI_GAMEZONE is not set
# CONFIG_LENOVO_WMI_TUNING is not set
# CONFIG_ACPI_QUICKSTART is not set
# CONFIG_MEEGOPAD_ANX7428 is not set
# CONFIG_MSI_EC is not set
# CONFIG_MSI_LAPTOP is not set
# CONFIG_MSI_WMI is not set
# CONFIG_MSI_WMI_PLATFORM is not set
# CONFIG_PCENGINES_APU2 is not set
# CONFIG_PORTWELL_EC is not set
# CONFIG_BARCO_P50_GPIO is not set
# CONFIG_SAMSUNG_GALAXYBOOK is not set
# CONFIG_SAMSUNG_LAPTOP is not set
# CONFIG_SAMSUNG_Q10 is not set
# CONFIG_ACPI_TOSHIBA is not set
# CONFIG_TOSHIBA_BT_RFKILL is not set
# CONFIG_TOSHIBA_HAPS is not set
# CONFIG_TOSHIBA_WMI is not set
# CONFIG_ACPI_CMPC is not set
# CONFIG_COMPAL_LAPTOP is not set
# CONFIG_LG_LAPTOP is not set
# CONFIG_PANASONIC_LAPTOP is not set
# CONFIG_SONY_LAPTOP is not set
# CONFIG_SYSTEM76_ACPI is not set
# CONFIG_TOPSTAR_LAPTOP is not set
# CONFIG_SERIAL_MULTI_INSTANTIATE is not set
# CONFIG_INSPUR_PLATFORM_PROFILE is not set
# CONFIG_DASHARO_ACPI is not set
# CONFIG_INTEL_IPS is not set
CONFIG_INTEL_SCU_IPC=y
# CONFIG_INTEL_SCU_PCI is not set
# CONFIG_INTEL_SCU_PLATFORM is not set
# CONFIG_SIEMENS_SIMATIC_IPC is not set
# CONFIG_SILICOM_PLATFORM is not set
# CONFIG_WINMATE_FM07_KEYS is not set
# CONFIG_OXP_EC is not set
# CONFIG_TUXEDO_NB04_WMI_AB is not set
CONFIG_P2SB=y
CONFIG_ACPI_WMI=y
# CONFIG_ACPI_WMI_LEGACY_DEVICE_NAMES is not set
CONFIG_HAVE_CLK=y
CONFIG_HAVE_CLK_PREPARE=y
CONFIG_COMMON_CLK=y
# CONFIG_LMK04832 is not set
# CONFIG_COMMON_CLK_MAX9485 is not set
# CONFIG_COMMON_CLK_SI5341 is not set
# CONFIG_COMMON_CLK_SI5351 is not set
# CONFIG_COMMON_CLK_SI514 is not set
# CONFIG_COMMON_CLK_SI544 is not set
# CONFIG_COMMON_CLK_SI570 is not set
# CONFIG_COMMON_CLK_CDCE706 is not set
# CONFIG_COMMON_CLK_CDCE925 is not set
# CONFIG_COMMON_CLK_CS2000_CP is not set
# CONFIG_CLK_TWL is not set
# CONFIG_COMMON_CLK_AXI_CLKGEN is not set
# CONFIG_COMMON_CLK_RS9_PCIE is not set
# CONFIG_COMMON_CLK_SI521XX is not set
# CONFIG_COMMON_CLK_VC3 is not set
# CONFIG_COMMON_CLK_VC5 is not set
# CONFIG_COMMON_CLK_VC7 is not set
# CONFIG_COMMON_CLK_FIXED_MMIO is not set
# CONFIG_CLK_LGM_CGU is not set
# CONFIG_XILINX_VCU is not set
# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set
# CONFIG_HWSPINLOCK is not set

#
# Clock Source drivers
#
CONFIG_CLKEVT_I8253=y
CONFIG_I8253_LOCK=y
CONFIG_CLKBLD_I8253=y
# end of Clock Source drivers

CONFIG_MAILBOX=y
# CONFIG_PLATFORM_MHU is not set
CONFIG_PCC=y
# CONFIG_ALTERA_MBOX is not set
# CONFIG_MAILBOX_TEST is not set
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_OF_IOMMU=y
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=y
CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON=y
CONFIG_INTEL_IOMMU_PERF_EVENTS=y
CONFIG_IOMMUFD_DRIVER_CORE=y
CONFIG_IOMMUFD=y
CONFIG_IOMMUFD_TEST=y
CONFIG_IRQ_REMAP=y
# CONFIG_VIRTIO_IOMMU is not set
CONFIG_GENERIC_PT=y
CONFIG_DEBUG_GENERIC_PT=y
CONFIG_IOMMU_PT=y
CONFIG_IOMMU_PT_AMDV1=y
CONFIG_IOMMU_PT_VTDSS=y
# CONFIG_IOMMU_PT_RISCV64 is not set
CONFIG_IOMMU_PT_X86_64=y

#
# Remoteproc drivers
#
# CONFIG_REMOTEPROC is not set
# end of Remoteproc drivers

#
# Rpmsg drivers
#
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_VIRTIO is not set
# end of Rpmsg drivers

CONFIG_SOUNDWIRE=y

#
# SoundWire Devices
#
# CONFIG_SOUNDWIRE_AMD is not set
# CONFIG_SOUNDWIRE_INTEL is not set
# CONFIG_SOUNDWIRE_QCOM is not set

#
# 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
#
# CONFIG_LITEX_SOC_CONTROLLER is not set
# end of Enable LiteX SoC Builder specific drivers

# CONFIG_WPCM450_SOC is not set

#
# Qualcomm SoC drivers
#
CONFIG_QCOM_QMI_HELPERS=y
# end of Qualcomm SoC drivers

# CONFIG_SOC_TI is not set

#
# 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 is not set
CONFIG_EXTCON=y

#
# Extcon Device Drivers
#
# CONFIG_EXTCON_ADC_JACK is not set
# CONFIG_EXTCON_FSA9480 is not set
# CONFIG_EXTCON_GPIO is not set
# CONFIG_EXTCON_INTEL_INT3496 is not set
CONFIG_EXTCON_INTEL_CHT_WC=y
# CONFIG_EXTCON_LC824206XA is not set
# CONFIG_EXTCON_MAX3355 is not set
# CONFIG_EXTCON_MAX14526 is not set
CONFIG_EXTCON_PTN5150=y
# CONFIG_EXTCON_RT8973A is not set
# CONFIG_EXTCON_SM5502 is not set
# CONFIG_EXTCON_USB_GPIO is not set
CONFIG_EXTCON_USBC_TUSB320=y
# CONFIG_MEMORY is not set
CONFIG_IIO=y
CONFIG_IIO_BUFFER=y
# CONFIG_IIO_BUFFER_CB is not set
# CONFIG_IIO_BUFFER_DMA is not set
# CONFIG_IIO_BUFFER_DMAENGINE is not set
# CONFIG_IIO_BUFFER_HW_CONSUMER is not set
CONFIG_IIO_KFIFO_BUF=y
CONFIG_IIO_TRIGGERED_BUFFER=y
# CONFIG_IIO_CONFIGFS is not set
CONFIG_IIO_TRIGGER=y
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
# CONFIG_IIO_SW_DEVICE is not set
# CONFIG_IIO_SW_TRIGGER is not set
# CONFIG_IIO_TRIGGERED_EVENT is not set

#
# Accelerometers
#
# CONFIG_ADIS16201 is not set
# CONFIG_ADIS16209 is not set
# CONFIG_ADXL313_I2C is not set
# CONFIG_ADXL313_SPI is not set
# CONFIG_ADXL345_I2C is not set
# CONFIG_ADXL345_SPI is not set
# CONFIG_ADXL355_I2C is not set
# CONFIG_ADXL355_SPI is not set
# CONFIG_ADXL367_SPI is not set
# CONFIG_ADXL367_I2C is not set
# CONFIG_ADXL372_SPI is not set
# CONFIG_ADXL372_I2C is not set
# CONFIG_ADXL380_SPI is not set
# CONFIG_ADXL380_I2C is not set
# CONFIG_BMA180 is not set
# CONFIG_BMA220 is not set
# CONFIG_BMA400 is not set
# CONFIG_BMC150_ACCEL is not set
# CONFIG_BMI088_ACCEL is not set
# CONFIG_DA280 is not set
# CONFIG_DA311 is not set
# CONFIG_DMARD06 is not set
# CONFIG_DMARD09 is not set
# CONFIG_DMARD10 is not set
# CONFIG_FXLS8962AF_I2C is not set
# CONFIG_FXLS8962AF_SPI is not set
CONFIG_HID_SENSOR_ACCEL_3D=y
# CONFIG_IIO_ST_ACCEL_3AXIS is not set
# CONFIG_IIO_KX022A_SPI is not set
# CONFIG_IIO_KX022A_I2C is not set
# CONFIG_KXSD9 is not set
# CONFIG_KXCJK1013 is not set
# CONFIG_MC3230 is not set
# CONFIG_MMA7455_I2C is not set
# CONFIG_MMA7455_SPI is not set
# CONFIG_MMA7660 is not set
# CONFIG_MMA8452 is not set
# CONFIG_MMA9551 is not set
# CONFIG_MMA9553 is not set
# CONFIG_MSA311 is not set
# CONFIG_MXC4005 is not set
# CONFIG_MXC6255 is not set
# CONFIG_SCA3000 is not set
# CONFIG_SCA3300 is not set
# CONFIG_STK8312 is not set
# CONFIG_STK8BA50 is not set
# end of Accelerometers

#
# Analog to digital converters
#
# CONFIG_AD4000 is not set
# CONFIG_AD4030 is not set
# CONFIG_AD4080 is not set
# CONFIG_AD4130 is not set
# CONFIG_AD4134 is not set
# CONFIG_AD4170_4 is not set
# CONFIG_AD4695 is not set
# CONFIG_AD7091R5 is not set
# CONFIG_AD7091R8 is not set
# CONFIG_AD7124 is not set
# CONFIG_AD7173 is not set
# CONFIG_AD7191 is not set
# CONFIG_AD7192 is not set
# CONFIG_AD7266 is not set
# CONFIG_AD7280 is not set
# CONFIG_AD7291 is not set
# CONFIG_AD7292 is not set
# CONFIG_AD7298 is not set
# CONFIG_AD7380 is not set
# CONFIG_AD7476 is not set
# CONFIG_AD7606_IFACE_PARALLEL is not set
# CONFIG_AD7606_IFACE_SPI is not set
# CONFIG_AD7766 is not set
# CONFIG_AD7768_1 is not set
# CONFIG_AD7779 is not set
# CONFIG_AD7780 is not set
# CONFIG_AD7791 is not set
# CONFIG_AD7793 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
# CONFIG_AD7944 is not set
# CONFIG_AD7949 is not set
# CONFIG_AD799X is not set
# CONFIG_AD9467 is not set
# CONFIG_ADE9000 is not set
# CONFIG_CC10001_ADC is not set
CONFIG_DLN2_ADC=y
# CONFIG_ENVELOPE_DETECTOR is not set
# CONFIG_GEHC_PMC_ADC is not set
# CONFIG_HI8435 is not set
# CONFIG_HX711 is not set
# CONFIG_INA2XX_ADC is not set
# CONFIG_LTC2309 is not set
# CONFIG_LTC2471 is not set
# CONFIG_LTC2485 is not set
# CONFIG_LTC2496 is not set
# CONFIG_LTC2497 is not set
# CONFIG_MAX1027 is not set
# CONFIG_MAX11100 is not set
# CONFIG_MAX1118 is not set
# CONFIG_MAX11205 is not set
# CONFIG_MAX11410 is not set
# CONFIG_MAX1241 is not set
# CONFIG_MAX1363 is not set
# CONFIG_MAX14001 is not set
# CONFIG_MAX34408 is not set
# CONFIG_MAX9611 is not set
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP3564 is not set
# CONFIG_MCP3911 is not set
# CONFIG_MEDIATEK_MT6360_ADC is not set
# CONFIG_MEDIATEK_MT6370_ADC is not set
# CONFIG_NAU7802 is not set
# CONFIG_NCT7201 is not set
# CONFIG_PAC1921 is not set
# CONFIG_PAC1934 is not set
# CONFIG_ROHM_BD79112 is not set
# CONFIG_ROHM_BD79124 is not set
# CONFIG_RICHTEK_RTQ6056 is not set
# CONFIG_SD_ADC_MODULATOR is not set
# CONFIG_TI_ADC081C is not set
# CONFIG_TI_ADC0832 is not set
# CONFIG_TI_ADC084S021 is not set
# CONFIG_TI_ADC108S102 is not set
# CONFIG_TI_ADC12138 is not set
# CONFIG_TI_ADC128S052 is not set
# CONFIG_TI_ADC161S626 is not set
# CONFIG_TI_ADS1015 is not set
# CONFIG_TI_ADS1018 is not set
# CONFIG_TI_ADS1100 is not set
# CONFIG_TI_ADS1119 is not set
# CONFIG_TI_ADS124S08 is not set
# CONFIG_TI_ADS1298 is not set
# CONFIG_TI_ADS131E08 is not set
# CONFIG_TI_ADS131M02 is not set
# CONFIG_TI_ADS7138 is not set
# CONFIG_TI_ADS7924 is not set
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8344 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_LMP92064 is not set
# CONFIG_TI_TLC4541 is not set
# CONFIG_TI_TSC2046 is not set
# CONFIG_TWL4030_MADC is not set
# CONFIG_TWL6030_GPADC is not set
# CONFIG_VF610_ADC is not set
CONFIG_VIPERBOARD_ADC=y
# CONFIG_XILINX_XADC is not set
# end of Analog to digital converters

#
# Analog to digital and digital to analog converters
#
# CONFIG_AD74115 is not set
# CONFIG_AD74413R is not set
# end of Analog to digital and digital to analog converters

#
# Analog Front Ends
#
# CONFIG_IIO_RESCALE is not set
# end of Analog Front Ends

#
# Amplifiers
#
# CONFIG_AD8366 is not set
# CONFIG_ADA4250 is not set
# CONFIG_ADL8113 is not set
# CONFIG_HMC425 is not set
# end of Amplifiers

#
# Capacitance to digital converters
#
# CONFIG_AD7150 is not set
# CONFIG_AD7746 is not set
# end of Capacitance to digital converters

#
# Chemical Sensors
#
# CONFIG_AOSONG_AGS02MA is not set
# CONFIG_ATLAS_PH_SENSOR is not set
# CONFIG_ATLAS_EZO_SENSOR is not set
# CONFIG_BME680 is not set
# CONFIG_CCS811 is not set
# CONFIG_ENS160 is not set
# CONFIG_IAQCORE is not set
# CONFIG_MHZ19B is not set
# CONFIG_PMS7003 is not set
# CONFIG_SCD30_CORE is not set
# CONFIG_SCD4X is not set
# CONFIG_SEN0322 is not set
# CONFIG_SENSIRION_SGP30 is not set
# CONFIG_SENSIRION_SGP40 is not set
# CONFIG_SPS30_I2C is not set
# CONFIG_SPS30_SERIAL is not set
# CONFIG_SENSEAIR_SUNRISE_CO2 is not set
# CONFIG_VZ89X is not set
# end of Chemical Sensors

#
# Hid Sensor IIO Common
#
CONFIG_HID_SENSOR_IIO_COMMON=y
CONFIG_HID_SENSOR_IIO_TRIGGER=y
# end of Hid Sensor IIO Common

#
# IIO SCMI Sensors
#
# end of IIO SCMI Sensors

#
# SSP Sensor Common
#
# CONFIG_IIO_SSP_SENSORHUB is not set
# end of SSP Sensor Common

#
# Digital to analog converters
#
# CONFIG_AD3530R is not set
# CONFIG_AD3552R_HS is not set
# CONFIG_AD3552R is not set
# CONFIG_AD5064 is not set
# CONFIG_AD5360 is not set
# CONFIG_AD5380 is not set
# CONFIG_AD5421 is not set
# CONFIG_AD5446_SPI is not set
# CONFIG_AD5446_I2C is not set
# CONFIG_AD5449 is not set
# CONFIG_AD5592R is not set
# CONFIG_AD5593R is not set
# CONFIG_AD5504 is not set
# CONFIG_AD5624R_SPI is not set
# CONFIG_AD9739A is not set
# CONFIG_LTC2688 is not set
# CONFIG_AD5686_SPI is not set
# CONFIG_AD5696_I2C is not set
# CONFIG_AD5755 is not set
# CONFIG_AD5758 is not set
# CONFIG_AD5761 is not set
# CONFIG_AD5764 is not set
# CONFIG_AD5766 is not set
# CONFIG_AD5770R is not set
# CONFIG_AD5791 is not set
# CONFIG_AD7293 is not set
# CONFIG_AD7303 is not set
# CONFIG_AD8460 is not set
# CONFIG_AD8801 is not set
# CONFIG_BD79703 is not set
# CONFIG_CIO_DAC is not set
# CONFIG_DPOT_DAC is not set
# CONFIG_DS4424 is not set
# CONFIG_LTC1660 is not set
# CONFIG_LTC2632 is not set
# CONFIG_LTC2664 is not set
# CONFIG_M62332 is not set
# CONFIG_MAX517 is not set
# CONFIG_MAX22007 is not set
# CONFIG_MAX5522 is not set
# CONFIG_MAX5821 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4728 is not set
# CONFIG_MCP47FEB02 is not set
# CONFIG_MCP4821 is not set
# CONFIG_MCP4922 is not set
# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC5571 is not set
# CONFIG_TI_DAC7311 is not set
# CONFIG_TI_DAC7612 is not set
# CONFIG_VF610_DAC is not set
# end of Digital to analog converters

#
# IIO dummy driver
#
# end of IIO dummy driver

#
# Filters
#
# CONFIG_ADMV8818 is not set
# end of Filters

#
# Frequency Synthesizers DDS/PLL
#

#
# Clock Generator/Distribution
#
# CONFIG_AD9523 is not set
# end of Clock Generator/Distribution

#
# Phase-Locked Loop (PLL) frequency synthesizers
#
# CONFIG_ADF4350 is not set
# CONFIG_ADF4371 is not set
# CONFIG_ADF4377 is not set
# CONFIG_ADMFM2000 is not set
# CONFIG_ADMV1013 is not set
# CONFIG_ADMV1014 is not set
# CONFIG_ADMV4420 is not set
# CONFIG_ADRF6780 is not set
# end of Phase-Locked Loop (PLL) frequency synthesizers
# end of Frequency Synthesizers DDS/PLL

#
# Digital gyroscope sensors
#
# CONFIG_ADIS16080 is not set
# CONFIG_ADIS16130 is not set
# CONFIG_ADIS16136 is not set
# CONFIG_ADIS16260 is not set
# CONFIG_ADXRS290 is not set
# CONFIG_ADXRS450 is not set
# CONFIG_BMG160 is not set
# CONFIG_FXAS21002C is not set
CONFIG_HID_SENSOR_GYRO_3D=y
# CONFIG_MPU3050_I2C is not set
# CONFIG_IIO_ST_GYRO_3AXIS is not set
# CONFIG_ITG3200 is not set
# end of Digital gyroscope sensors

#
# Health Sensors
#

#
# Heart Rate Monitors
#
# CONFIG_AFE4403 is not set
# CONFIG_AFE4404 is not set
# CONFIG_MAX30100 is not set
# CONFIG_MAX30102 is not set
# end of Heart Rate Monitors
# end of Health Sensors

#
# Humidity sensors
#
# CONFIG_AM2315 is not set
# CONFIG_DHT11 is not set
# CONFIG_ENS210 is not set
# CONFIG_HDC100X is not set
# CONFIG_HDC2010 is not set
# CONFIG_HDC3020 is not set
CONFIG_HID_SENSOR_HUMIDITY=y
# CONFIG_HTS221 is not set
# CONFIG_HTU21 is not set
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# end of Humidity sensors

#
# Inertial measurement units
#
# CONFIG_ADIS16400 is not set
# CONFIG_ADIS16460 is not set
# CONFIG_ADIS16475 is not set
# CONFIG_ADIS16480 is not set
# CONFIG_ADIS16550 is not set
# CONFIG_BMI160_I2C is not set
# CONFIG_BMI160_SPI is not set
# CONFIG_BMI270_I2C is not set
# CONFIG_BMI270_SPI is not set
# CONFIG_BMI323_I2C is not set
# CONFIG_BMI323_SPI is not set
# CONFIG_BOSCH_BNO055_SERIAL is not set
# CONFIG_BOSCH_BNO055_I2C is not set
# CONFIG_FXOS8700_I2C is not set
# CONFIG_FXOS8700_SPI is not set
# CONFIG_KMX61 is not set
# CONFIG_INV_ICM42600_I2C is not set
# CONFIG_INV_ICM42600_SPI is not set
# CONFIG_INV_ICM45600_I2C is not set
# CONFIG_INV_ICM45600_SPI is not set
# CONFIG_INV_MPU6050_I2C is not set
# CONFIG_INV_MPU6050_SPI is not set
# CONFIG_SMI240 is not set
# CONFIG_SMI330_I2C is not set
# CONFIG_SMI330_SPI is not set
# CONFIG_IIO_ST_LSM6DSX is not set
# CONFIG_IIO_ST_LSM9DS0 is not set
# end of Inertial measurement units

#
# Light sensors
#
# CONFIG_ACPI_ALS is not set
# CONFIG_ADJD_S311 is not set
# CONFIG_ADUX1020 is not set
# CONFIG_AL3000A is not set
# CONFIG_AL3010 is not set
# CONFIG_AL3320A is not set
# CONFIG_APDS9160 is not set
# CONFIG_APDS9300 is not set
# CONFIG_APDS9306 is not set
# CONFIG_APDS9960 is not set
# CONFIG_AS73211 is not set
# CONFIG_BH1745 is not set
# CONFIG_BH1750 is not set
# CONFIG_BH1780 is not set
# CONFIG_CM32181 is not set
# CONFIG_CM3232 is not set
# CONFIG_CM3323 is not set
# CONFIG_CM3605 is not set
# CONFIG_CM36651 is not set
# CONFIG_GP2AP002 is not set
# CONFIG_GP2AP020A00F is not set
# CONFIG_SENSORS_ISL29018 is not set
# CONFIG_SENSORS_ISL29028 is not set
# CONFIG_ISL29125 is not set
# CONFIG_ISL76682 is not set
CONFIG_HID_SENSOR_ALS=y
CONFIG_HID_SENSOR_PROX=y
# CONFIG_JSA1212 is not set
# CONFIG_ROHM_BU27034 is not set
# CONFIG_RPR0521 is not set
# CONFIG_LTR390 is not set
# CONFIG_LTR501 is not set
# CONFIG_LTRF216A is not set
# CONFIG_LV0104CS is not set
# CONFIG_MAX44000 is not set
# CONFIG_MAX44009 is not set
# CONFIG_NOA1305 is not set
# CONFIG_OPT3001 is not set
# CONFIG_OPT4001 is not set
# CONFIG_OPT4060 is not set
# CONFIG_PA12203001 is not set
# CONFIG_SI1133 is not set
# CONFIG_SI1145 is not set
# CONFIG_STK3310 is not set
# CONFIG_ST_UVIS25 is not set
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_SENSORS_TSL2563 is not set
# CONFIG_TSL2583 is not set
# CONFIG_TSL2591 is not set
# CONFIG_TSL2772 is not set
# CONFIG_TSL4531 is not set
# CONFIG_US5182D is not set
# CONFIG_VCNL4000 is not set
# CONFIG_VCNL4035 is not set
# CONFIG_VEML3235 is not set
# CONFIG_VEML6030 is not set
# CONFIG_VEML6040 is not set
# CONFIG_VEML6046X00 is not set
# CONFIG_VEML6070 is not set
# CONFIG_VEML6075 is not set
# CONFIG_VL6180 is not set
# CONFIG_ZOPT2201 is not set
# end of Light sensors

#
# Magnetometer sensors
#
# CONFIG_AF8133J is not set
# CONFIG_AK8974 is not set
# CONFIG_AK8975 is not set
# CONFIG_AK09911 is not set
# CONFIG_ALS31300 is not set
# CONFIG_BMC150_MAGN_I2C is not set
# CONFIG_BMC150_MAGN_SPI is not set
# CONFIG_MAG3110 is not set
CONFIG_HID_SENSOR_MAGNETOMETER_3D=y
# CONFIG_MMC35240 is not set
# CONFIG_MMC5633 is not set
# CONFIG_IIO_ST_MAGN_3AXIS is not set
# CONFIG_INFINEON_TLV493D is not set
# CONFIG_SENSORS_HMC5843_I2C is not set
# CONFIG_SENSORS_HMC5843_SPI is not set
# CONFIG_SENSORS_RM3100_I2C is not set
# CONFIG_SENSORS_RM3100_SPI is not set
# CONFIG_SI7210 is not set
# CONFIG_TI_TMAG5273 is not set
# CONFIG_YAMAHA_YAS530 is not set
# end of Magnetometer sensors

#
# Multiplexers
#
# CONFIG_IIO_MUX is not set
# end of Multiplexers

#
# Inclinometer sensors
#
CONFIG_HID_SENSOR_INCLINOMETER_3D=y
CONFIG_HID_SENSOR_DEVICE_ROTATION=y
# end of Inclinometer sensors

#
# Triggers - standalone
#
# CONFIG_IIO_INTERRUPT_TRIGGER is not set
# CONFIG_IIO_SYSFS_TRIGGER is not set
# end of Triggers - standalone

#
# Linear and angular position sensors
#
CONFIG_HID_SENSOR_CUSTOM_INTEL_HINGE=y
# end of Linear and angular position sensors

#
# Digital potentiometers
#
# CONFIG_AD5110 is not set
# CONFIG_AD5272 is not set
# CONFIG_DS1803 is not set
# CONFIG_MAX5432 is not set
# CONFIG_MAX5481 is not set
# CONFIG_MAX5487 is not set
# CONFIG_MCP4018 is not set
# CONFIG_MCP4131 is not set
# CONFIG_MCP4531 is not set
# CONFIG_MCP41010 is not set
# CONFIG_TPL0102 is not set
# CONFIG_X9250 is not set
# end of Digital potentiometers

#
# Digital potentiostats
#
# CONFIG_LMP91000 is not set
# end of Digital potentiostats

#
# Pressure sensors
#
# CONFIG_ABP060MG is not set
# CONFIG_ABP2030PA_I2C is not set
# CONFIG_ABP2030PA_SPI is not set
# CONFIG_ROHM_BM1390 is not set
# CONFIG_BMP280 is not set
# CONFIG_DLHL60D is not set
# CONFIG_DPS310 is not set
CONFIG_HID_SENSOR_PRESS=y
# CONFIG_HP03 is not set
# CONFIG_HSC030PA is not set
# CONFIG_ICP10100 is not set
# CONFIG_MPL115_I2C is not set
# CONFIG_MPL115_SPI is not set
# CONFIG_MPL3115 is not set
# CONFIG_MPRLS0025PA_I2C is not set
# CONFIG_MPRLS0025PA_SPI is not set
# CONFIG_MS5611 is not set
# CONFIG_MS5637 is not set
# CONFIG_SDP500 is not set
# CONFIG_IIO_ST_PRESS is not set
# CONFIG_T5403 is not set
# CONFIG_HP206C is not set
# CONFIG_ZPA2326 is not set
# CONFIG_ADP810 is not set
# end of Pressure sensors

#
# Lightning sensors
#
# CONFIG_AS3935 is not set
# end of Lightning sensors

#
# Proximity and distance sensors
#
# CONFIG_D3323AA is not set
# CONFIG_HX9023S is not set
# CONFIG_IRSD200 is not set
# CONFIG_ISL29501 is not set
# CONFIG_LIDAR_LITE_V2 is not set
# CONFIG_MB1232 is not set
# CONFIG_PING is not set
# CONFIG_RFD77402 is not set
# CONFIG_SRF04 is not set
# CONFIG_SX9310 is not set
# CONFIG_SX9324 is not set
# CONFIG_SX9360 is not set
# CONFIG_SX9500 is not set
# CONFIG_SRF08 is not set
# CONFIG_VCNL3020 is not set
# CONFIG_VL53L0X_I2C is not set
# CONFIG_AW96103 is not set
# end of Proximity and distance sensors

#
# Resolver to digital converters
#
# CONFIG_AD2S90 is not set
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# end of Resolver to digital converters

#
# Temperature sensors
#
# CONFIG_LTC2983 is not set
# CONFIG_MAXIM_THERMOCOUPLE is not set
CONFIG_HID_SENSOR_TEMP=y
# CONFIG_MLX90614 is not set
# CONFIG_MLX90632 is not set
# CONFIG_MLX90635 is not set
# CONFIG_TMP006 is not set
# CONFIG_TMP007 is not set
# CONFIG_TMP117 is not set
# CONFIG_TSYS01 is not set
# CONFIG_TSYS02D is not set
# CONFIG_MAX30208 is not set
# CONFIG_MAX31856 is not set
# CONFIG_MAX31865 is not set
# CONFIG_MCP9600 is not set
# end of Temperature sensors

# CONFIG_NTB is not set
# CONFIG_PWM is not set

#
# IRQ chip support
#
CONFIG_IRQCHIP=y
CONFIG_IRQ_MSI_LIB=y
# CONFIG_AL_FIC is not set
# CONFIG_XILINX_INTC is not set
# end of IRQ chip support

# CONFIG_IPACK_BUS is not set
CONFIG_RESET_CONTROLLER=y
# CONFIG_RESET_GPIO is not set
# CONFIG_RESET_INTEL_GW is not set
# CONFIG_RESET_SIMPLE is not set
# CONFIG_RESET_TI_SYSCON is not set
# CONFIG_RESET_TI_TPS380X is not set

#
# PHY Subsystem
#
CONFIG_GENERIC_PHY=y
# CONFIG_PHY_CAN_TRANSCEIVER is not set
# CONFIG_PHY_GOOGLE_USB is not set
CONFIG_USB_LGM_PHY=y
# CONFIG_PHY_NXP_PTN3222 is not set

#
# PHY drivers for Broadcom platforms
#
# CONFIG_BCM_KONA_USB2_PHY is not set
# end of PHY drivers for Broadcom platforms

# CONFIG_PHY_CADENCE_TORRENT is not set
# CONFIG_PHY_CADENCE_DPHY is not set
# CONFIG_PHY_CADENCE_DPHY_RX is not set
# CONFIG_PHY_CADENCE_SIERRA is not set
# CONFIG_PHY_CADENCE_SALVO is not set
# CONFIG_PHY_INTEL_LGM_COMBO is not set
# CONFIG_PHY_INTEL_LGM_EMMC is not set
# CONFIG_PHY_PXA_28NM_HSIC is not set
# CONFIG_PHY_PXA_28NM_USB2 is not set
CONFIG_PHY_CPCAP_USB=y
# CONFIG_PHY_MAPPHONE_MDM6600 is not set
# CONFIG_PHY_OCELOT_SERDES is not set
CONFIG_PHY_QCOM_USB_HS=y
CONFIG_PHY_QCOM_USB_HSIC=y
CONFIG_PHY_SAMSUNG_USB2=y
CONFIG_PHY_TUSB1210=y
# end of PHY Subsystem

# CONFIG_POWERCAP is not set
# CONFIG_MCB is not set

#
# Performance monitor support
#
# CONFIG_DWC_PCIE_PMU is not set
# end of Performance monitor support

CONFIG_RAS=y
CONFIG_USB4=y
# 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="binder0,binder1"
# end of Android

CONFIG_LIBNVDIMM=y
CONFIG_BLK_DEV_PMEM=y
CONFIG_ND_CLAIM=y
CONFIG_ND_BTT=y
CONFIG_BTT=y
CONFIG_ND_PFN=y
CONFIG_NVDIMM_PFN=y
CONFIG_NVDIMM_DAX=y
CONFIG_OF_PMEM=y
# CONFIG_RAMDAX is not set
CONFIG_NVDIMM_KEYS=y
# CONFIG_NVDIMM_SECURITY_TEST is not set
CONFIG_DAX=y
CONFIG_DEV_DAX=y
# CONFIG_DEV_DAX_PMEM is not set
# CONFIG_DEV_DAX_KMEM is not set
CONFIG_NVMEM=y
CONFIG_NVMEM_SYSFS=y
CONFIG_NVMEM_LAYOUTS=y

#
# Layout Types
#
# CONFIG_NVMEM_LAYOUT_SL28_VPD is not set
# CONFIG_NVMEM_LAYOUT_ONIE_TLV is not set
# CONFIG_NVMEM_LAYOUT_U_BOOT_ENV is not set
# end of Layout Types

# CONFIG_NVMEM_RMEM is not set
# CONFIG_NVMEM_U_BOOT_ENV is not set

#
# HW tracing support
#
# CONFIG_STM is not set
# CONFIG_INTEL_TH is not set
# end of HW tracing support

# CONFIG_FPGA is not set
# CONFIG_FSI is not set
CONFIG_TEE=y
CONFIG_TEE_DMABUF_HEAPS=y
CONFIG_OPTEE_STATIC_PROTMEM_POOL=y
# CONFIG_MUX_CORE is not set
# CONFIG_SIOX is not set
# CONFIG_SLIMBUS is not set
# CONFIG_INTERCONNECT is not set
CONFIG_COUNTER=y
# CONFIG_INTEL_QEP is not set
# CONFIG_INTERRUPT_CNT is not set
CONFIG_MOST=y
CONFIG_MOST_USB_HDM=y
# CONFIG_MOST_CDEV is not set
# CONFIG_MOST_SND is not set
# CONFIG_PECI is not set
# CONFIG_HTE is not set
# 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=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_JFS_SECURITY=y
CONFIG_JFS_DEBUG=y
# CONFIG_JFS_STATISTICS is not set
CONFIG_XFS_FS=y
# CONFIG_XFS_SUPPORT_V4 is not set
# CONFIG_XFS_SUPPORT_ASCII_CI is not set
CONFIG_XFS_QUOTA=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_RT=y
# CONFIG_XFS_ONLINE_SCRUB is not set
# CONFIG_XFS_WARN is not set
# CONFIG_XFS_DEBUG is not set
CONFIG_GFS2_FS=y
CONFIG_GFS2_FS_LOCKING_DLM=y
CONFIG_OCFS2_FS=y
CONFIG_OCFS2_FS_O2CB=y
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=y
CONFIG_OCFS2_FS_STATS=y
# CONFIG_OCFS2_DEBUG_MASKLOG is not set
CONFIG_OCFS2_DEBUG_FS=y
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=y
# CONFIG_BTRFS_EXPERIMENTAL is not set
CONFIG_NILFS2_FS=y
CONFIG_F2FS_FS=y
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=y
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 is not set
# CONFIG_F2FS_UNFAIR_RWSEM is not set
CONFIG_ZONEFS_FS=y
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 is not set
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=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
CONFIG_QUOTACTL=y
CONFIG_AUTOFS_FS=y
CONFIG_FUSE_FS=y
CONFIG_CUSE=y
CONFIG_VIRTIO_FS=y
CONFIG_FUSE_DAX=y
# CONFIG_FUSE_PASSTHROUGH is not set
# CONFIG_FUSE_IO_URING is not set
CONFIG_OVERLAY_FS=y
CONFIG_OVERLAY_FS_REDIRECT_DIR=y
CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
CONFIG_OVERLAY_FS_INDEX=y
# CONFIG_OVERLAY_FS_NFS_EXPORT is not set
# CONFIG_OVERLAY_FS_XINO_AUTO is not set
# CONFIG_OVERLAY_FS_METACOPY is not set
CONFIG_OVERLAY_FS_DEBUG=y

#
# Caches
#
CONFIG_NETFS_SUPPORT=y
# CONFIG_NETFS_STATS is not set
# CONFIG_NETFS_DEBUG is not set
CONFIG_FSCACHE=y
# CONFIG_FSCACHE_STATS is not set
CONFIG_CACHEFILES=y
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_ERROR_INJECTION is not set
# CONFIG_CACHEFILES_ONDEMAND is not set
# end of Caches

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=y
# end of CD-ROM/DVD Filesystems

#
# DOS/FAT/EXFAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_FAT_DEFAULT_UTF8 is not set
CONFIG_EXFAT_FS=y
CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
# CONFIG_NTFS_FS is not set
CONFIG_NTFS3_FS=y
# 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 is not set
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_PROC_CHILDREN=y
CONFIG_PROC_PID_ARCH_STATUS=y
CONFIG_KERNFS=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
# CONFIG_TMPFS_INODE64 is not set
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
# end of Pseudo filesystems

CONFIG_MISC_FILESYSTEMS=y
CONFIG_ORANGEFS_FS=y
CONFIG_ADFS_FS=y
# CONFIG_ADFS_FS_RW is not set
CONFIG_AFFS_FS=y
CONFIG_ECRYPT_FS=y
CONFIG_ECRYPT_FS_MESSAGING=y
CONFIG_HFS_FS=y
CONFIG_HFSPLUS_FS=y
CONFIG_BEFS_FS=y
# CONFIG_BEFS_DEBUG is not set
CONFIG_BFS_FS=y
CONFIG_EFS_FS=y
CONFIG_JFFS2_FS=y
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=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
CONFIG_JFFS2_RUBIN=y
# CONFIG_JFFS2_CMODE_NONE is not set
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
CONFIG_UBIFS_FS=y
CONFIG_UBIFS_FS_ADVANCED_COMPR=y
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 is not set
CONFIG_CRAMFS=y
CONFIG_CRAMFS_BLOCKDEV=y
CONFIG_CRAMFS_MTD=y
CONFIG_SQUASHFS=y
# CONFIG_SQUASHFS_FILE_CACHE is not set
CONFIG_SQUASHFS_FILE_DIRECT=y
CONFIG_SQUASHFS_DECOMP_MULTI=y
# CONFIG_SQUASHFS_CHOICE_DECOMP_BY_MOUNT is not set
# CONFIG_SQUASHFS_COMPILE_DECOMP_SINGLE is not set
CONFIG_SQUASHFS_COMPILE_DECOMP_MULTI=y
# CONFIG_SQUASHFS_COMPILE_DECOMP_MULTI_PERCPU is not set
# CONFIG_SQUASHFS_MOUNT_DECOMP_THREADS is not set
CONFIG_SQUASHFS_XATTR=y
# CONFIG_SQUASHFS_COMP_CACHE_FULL is not set
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=y
# CONFIG_SQUASHFS_EMBEDDED is not set
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
CONFIG_VXFS_FS=y
CONFIG_MINIX_FS=y
CONFIG_OMFS_FS=y
CONFIG_HPFS_FS=y
CONFIG_QNX4FS_FS=y
CONFIG_QNX6FS_FS=y
# CONFIG_QNX6FS_DEBUG is not set
CONFIG_ROMFS_FS=y
# CONFIG_ROMFS_BACKED_BY_BLOCK is not set
# CONFIG_ROMFS_BACKED_BY_MTD is not set
CONFIG_ROMFS_BACKED_BY_BOTH=y
CONFIG_ROMFS_ON_BLOCK=y
CONFIG_ROMFS_ON_MTD=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_RAM is not set
# CONFIG_PSTORE_BLK is not set
CONFIG_UFS_FS=y
CONFIG_UFS_FS_WRITE=y
# CONFIG_UFS_DEBUG is not set
CONFIG_EROFS_FS=y
# 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 is not set
CONFIG_EROFS_FS_ZIP=y
# CONFIG_EROFS_FS_ZIP_LZMA is not set
# CONFIG_EROFS_FS_ZIP_DEFLATE is not set
# CONFIG_EROFS_FS_ZIP_ZSTD is not set
# CONFIG_EROFS_FS_ZIP_ACCEL is not set
# CONFIG_EROFS_FS_ONDEMAND is not set
# CONFIG_EROFS_FS_PCPU_KTHREAD is not set
# CONFIG_EROFS_FS_PAGE_CACHE_SHARE is not set
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
# CONFIG_NFS_V2 is not set
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
# CONFIG_NFS_SWAP is not set
CONFIG_NFS_V4_0=y
CONFIG_NFS_V4_2=y
CONFIG_PNFS_FILE_LAYOUT=y
CONFIG_PNFS_BLOCK=y
CONFIG_PNFS_FLEXFILE_LAYOUT=y
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
# CONFIG_NFS_V4_1_MIGRATION is not set
CONFIG_NFS_V4_SECURITY_LABEL=y
CONFIG_ROOT_NFS=y
CONFIG_NFS_FSCACHE=y
# CONFIG_NFS_USE_LEGACY_DNS is not set
CONFIG_NFS_USE_KERNEL_DNS=y
# CONFIG_NFS_DISABLE_UDP_SUPPORT is not set
CONFIG_NFS_V4_2_READ_PLUS=y
CONFIG_NFSD=y
# 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=y
CONFIG_NFSD_V4_2_INTER_SSC=y
CONFIG_NFSD_V4_SECURITY_LABEL=y
# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set
# CONFIG_NFSD_V4_DELEG_TIMESTAMPS is not set
# CONFIG_NFSD_V4_POSIX_ACLS is not set
CONFIG_GRACE_PERIOD=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
# CONFIG_NFS_LOCALIO is not set
CONFIG_NFS_V4_2_SSC_HELPER=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
CONFIG_SUNRPC_BACKCHANNEL=y
CONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA1 is not set
# CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_CAMELLIA is not set
# CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA2 is not set
# CONFIG_SUNRPC_DEBUG is not set
# CONFIG_SUNRPC_XPRT_RDMA is not set
CONFIG_CEPH_FS=y
CONFIG_CEPH_FSCACHE=y
CONFIG_CEPH_FS_POSIX_ACL=y
# CONFIG_CEPH_FS_SECURITY_LABEL is not set
CONFIG_CIFS=y
# 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_ROOT is not set
# CONFIG_CIFS_COMPRESSION is not set
CONFIG_SMB_SERVER=y
# CONFIG_SMB_SERVER_SMBDIRECT is not set
# CONFIG_SMB_SERVER_CHECK_CAP_NET_ADMIN is not set
# CONFIG_SMB_SERVER_KERBEROS5 is not set
CONFIG_SMB_COMMON_SMBDIRECT=y
CONFIG_SMBFS=y
# CONFIG_CODA_FS is not set
CONFIG_AFS_FS=y
# CONFIG_AFS_DEBUG is not set
CONFIG_AFS_FSCACHE=y
# CONFIG_AFS_DEBUG_CURSOR is not set
CONFIG_9P_FS=y
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=y
CONFIG_NLS_CODEPAGE_775=y
CONFIG_NLS_CODEPAGE_850=y
CONFIG_NLS_CODEPAGE_852=y
CONFIG_NLS_CODEPAGE_855=y
CONFIG_NLS_CODEPAGE_857=y
CONFIG_NLS_CODEPAGE_860=y
CONFIG_NLS_CODEPAGE_861=y
CONFIG_NLS_CODEPAGE_862=y
CONFIG_NLS_CODEPAGE_863=y
CONFIG_NLS_CODEPAGE_864=y
CONFIG_NLS_CODEPAGE_865=y
CONFIG_NLS_CODEPAGE_866=y
CONFIG_NLS_CODEPAGE_869=y
CONFIG_NLS_CODEPAGE_936=y
CONFIG_NLS_CODEPAGE_950=y
CONFIG_NLS_CODEPAGE_932=y
CONFIG_NLS_CODEPAGE_949=y
CONFIG_NLS_CODEPAGE_874=y
CONFIG_NLS_ISO8859_8=y
CONFIG_NLS_CODEPAGE_1250=y
CONFIG_NLS_CODEPAGE_1251=y
CONFIG_NLS_ASCII=y
CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_ISO8859_2=y
CONFIG_NLS_ISO8859_3=y
CONFIG_NLS_ISO8859_4=y
CONFIG_NLS_ISO8859_5=y
CONFIG_NLS_ISO8859_6=y
CONFIG_NLS_ISO8859_7=y
CONFIG_NLS_ISO8859_9=y
CONFIG_NLS_ISO8859_13=y
CONFIG_NLS_ISO8859_14=y
CONFIG_NLS_ISO8859_15=y
CONFIG_NLS_KOI8_R=y
CONFIG_NLS_KOI8_U=y
CONFIG_NLS_MAC_ROMAN=y
CONFIG_NLS_MAC_CELTIC=y
CONFIG_NLS_MAC_CENTEURO=y
CONFIG_NLS_MAC_CROATIAN=y
CONFIG_NLS_MAC_CYRILLIC=y
CONFIG_NLS_MAC_GAELIC=y
CONFIG_NLS_MAC_GREEK=y
CONFIG_NLS_MAC_ICELAND=y
CONFIG_NLS_MAC_INUIT=y
CONFIG_NLS_MAC_ROMANIAN=y
CONFIG_NLS_MAC_TURKISH=y
CONFIG_NLS_UTF8=y
CONFIG_NLS_UCS2_UTILS=y
CONFIG_DLM=y
# CONFIG_DLM_DEBUG is not set
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=y
# CONFIG_TRUSTED_KEYS_TPM is not set
# CONFIG_TRUSTED_KEYS_TEE is not set

#
# No trust source selected!
#
CONFIG_ENCRYPTED_KEYS=y
# CONFIG_USER_DECRYPTED_DATA is not set
CONFIG_KEY_DH_OPERATIONS=y
CONFIG_KEY_NOTIFICATIONS=y
# CONFIG_SECURITY_DMESG_RESTRICT is not set
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_STATIC_USERMODEHELPER is not set
# CONFIG_SECURITY_SELINUX is not set
# CONFIG_SECURITY_SMACK is not set
CONFIG_SECURITY_TOMOYO=y
CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=64
CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=32
CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER=y
CONFIG_SECURITY_TOMOYO_INSECURE_BUILTIN_SETTING=y
CONFIG_SECURITY_APPARMOR=y
CONFIG_SECURITY_APPARMOR_DEBUG=y
CONFIG_SECURITY_APPARMOR_DEBUG_ASSERTS=y
# CONFIG_SECURITY_APPARMOR_DEBUG_MESSAGES 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 is not set
# CONFIG_SECURITY_APPARMOR_PARANOID_LOAD is not set
# CONFIG_SECURITY_LOADPIN is not set
CONFIG_SECURITY_YAMA=y
CONFIG_SECURITY_SAFESETID=y
CONFIG_SECURITY_LOCKDOWN_LSM=y
CONFIG_SECURITY_LOCKDOWN_LSM_EARLY=y
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 is not set
CONFIG_INTEGRITY=y
CONFIG_INTEGRITY_SIGNATURE=y
CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
CONFIG_INTEGRITY_TRUSTED_KEYRING=y
CONFIG_INTEGRITY_AUDIT=y
CONFIG_IMA=y
CONFIG_IMA_MEASURE_PCR_IDX=10
CONFIG_IMA_LSM_RULES=y
CONFIG_IMA_NG_TEMPLATE=y
# CONFIG_IMA_SIG_TEMPLATE is not set
CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng"
# CONFIG_IMA_DEFAULT_HASH_SHA1 is not set
CONFIG_IMA_DEFAULT_HASH_SHA256=y
# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set
# CONFIG_IMA_DEFAULT_HASH_WP512 is not set
CONFIG_IMA_DEFAULT_HASH="sha256"
CONFIG_IMA_WRITE_POLICY=y
CONFIG_IMA_READ_POLICY=y
CONFIG_IMA_APPRAISE=y
# CONFIG_IMA_ARCH_POLICY is not set
# CONFIG_IMA_APPRAISE_BUILD_POLICY is not set
# CONFIG_IMA_APPRAISE_BOOTPARAM is not set
CONFIG_IMA_APPRAISE_MODSIG=y
# CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY is not set
# CONFIG_IMA_BLACKLIST_KEYRING is not set
# CONFIG_IMA_LOAD_X509 is not set
CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS=y
CONFIG_IMA_QUEUE_EARLY_BOOT_KEYS=y
# CONFIG_IMA_DISABLE_HTABLE is not set
CONFIG_EVM=y
CONFIG_EVM_ATTR_FSUUID=y
CONFIG_EVM_ADD_XATTRS=y
# CONFIG_EVM_LOAD_X509 is not set
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
CONFIG_DEFAULT_SECURITY_APPARMOR=y
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_LSM="landlock,lockdown,yama,safesetid,integrity,tomoyo,apparmor,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 is not set
# end of Bounds checking

#
# Hardening of kernel data structures
#
CONFIG_LIST_HARDENED=y
CONFIG_BUG_ON_DATA_CORRUPTION=y
# 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=y
CONFIG_ASYNC_MEMCPY=y
CONFIG_ASYNC_XOR=y
CONFIG_ASYNC_PQ=y
CONFIG_ASYNC_RAID6_RECOV=y
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=y
CONFIG_CRYPTO_AEAD2=y
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=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
CONFIG_CRYPTO_USER=y
# CONFIG_CRYPTO_SELFTESTS is not set
# CONFIG_CRYPTO_NULL is not set
CONFIG_CRYPTO_PCRYPT=y
CONFIG_CRYPTO_CRYPTD=y
CONFIG_CRYPTO_AUTHENC=y
CONFIG_CRYPTO_KRB5ENC=y
# CONFIG_CRYPTO_BENCHMARK is not set
CONFIG_CRYPTO_ENGINE=y
# end of Crypto core or helper

#
# Public-key cryptography
#
CONFIG_CRYPTO_RSA=y
CONFIG_CRYPTO_DH=y
# CONFIG_CRYPTO_DH_RFC7919_GROUPS is not set
CONFIG_CRYPTO_ECC=y
CONFIG_CRYPTO_ECDH=y
# CONFIG_CRYPTO_ECDSA is not set
CONFIG_CRYPTO_ECRDSA=y
# CONFIG_CRYPTO_MLDSA is not set
# end of Public-key cryptography

#
# Block ciphers
#
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_ANUBIS=y
CONFIG_CRYPTO_ARIA=y
CONFIG_CRYPTO_BLOWFISH=y
CONFIG_CRYPTO_BLOWFISH_COMMON=y
CONFIG_CRYPTO_CAMELLIA=y
CONFIG_CRYPTO_CAST_COMMON=y
CONFIG_CRYPTO_CAST5=y
CONFIG_CRYPTO_CAST6=y
CONFIG_CRYPTO_DES=y
CONFIG_CRYPTO_FCRYPT=y
CONFIG_CRYPTO_KHAZAD=y
CONFIG_CRYPTO_SEED=y
CONFIG_CRYPTO_SERPENT=y
CONFIG_CRYPTO_SM4=y
CONFIG_CRYPTO_SM4_GENERIC=y
CONFIG_CRYPTO_TEA=y
CONFIG_CRYPTO_TWOFISH=y
CONFIG_CRYPTO_TWOFISH_COMMON=y
# end of Block ciphers

#
# Length-preserving ciphers and modes
#
CONFIG_CRYPTO_ADIANTUM=y
CONFIG_CRYPTO_ARC4=y
CONFIG_CRYPTO_CHACHA20=y
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_ECB=y
CONFIG_CRYPTO_HCTR2=y
CONFIG_CRYPTO_LRW=y
CONFIG_CRYPTO_PCBC=y
CONFIG_CRYPTO_XCTR=y
CONFIG_CRYPTO_XTS=y
# end of Length-preserving ciphers and modes

#
# AEAD (authenticated encryption with associated data) ciphers
#
CONFIG_CRYPTO_AEGIS128=y
CONFIG_CRYPTO_CHACHA20POLY1305=y
CONFIG_CRYPTO_CCM=y
CONFIG_CRYPTO_GCM=y
CONFIG_CRYPTO_GENIV=y
CONFIG_CRYPTO_SEQIV=y
CONFIG_CRYPTO_ECHAINIV=y
CONFIG_CRYPTO_ESSIV=y
# end of AEAD (authenticated encryption with associated data) ciphers

#
# Hashes, digests, and MACs
#
# CONFIG_CRYPTO_BLAKE2B is not set
CONFIG_CRYPTO_CMAC=y
CONFIG_CRYPTO_HMAC=y
# CONFIG_CRYPTO_MD4 is not set
# CONFIG_CRYPTO_MD5 is not set
CONFIG_CRYPTO_RMD160=y
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_CRYPTO_SHA3=y
# CONFIG_CRYPTO_SM3 is not set
CONFIG_CRYPTO_STREEBOG=y
CONFIG_CRYPTO_WP512=y
CONFIG_CRYPTO_XCBC=y
# CONFIG_CRYPTO_XXHASH is not set
# end of Hashes, digests, and MACs

#
# CRCs (cyclic redundancy checks)
#
# CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_CRC32 is not set
# end of CRCs (cyclic redundancy checks)

#
# Compression
#
CONFIG_CRYPTO_DEFLATE=y
CONFIG_CRYPTO_LZO=y
CONFIG_CRYPTO_842=y
CONFIG_CRYPTO_LZ4=y
CONFIG_CRYPTO_LZ4HC=y
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=y
CONFIG_CRYPTO_USER_API_HASH=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_USER_API_RNG=y
# CONFIG_CRYPTO_USER_API_RNG_CAVP is not set
CONFIG_CRYPTO_USER_API_AEAD=y
CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y
# end of Userspace interface

#
# Accelerated Cryptographic Algorithms for CPU (x86)
#
CONFIG_CRYPTO_AES_NI_INTEL=y
CONFIG_CRYPTO_BLOWFISH_X86_64=y
CONFIG_CRYPTO_CAMELLIA_X86_64=y
CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=y
CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=y
CONFIG_CRYPTO_CAST5_AVX_X86_64=y
CONFIG_CRYPTO_CAST6_AVX_X86_64=y
CONFIG_CRYPTO_SERPENT_SSE2_X86_64=y
CONFIG_CRYPTO_SERPENT_AVX_X86_64=y
CONFIG_CRYPTO_SERPENT_AVX2_X86_64=y
CONFIG_CRYPTO_SM4_AESNI_AVX_X86_64=y
CONFIG_CRYPTO_SM4_AESNI_AVX2_X86_64=y
CONFIG_CRYPTO_TWOFISH_X86_64=y
CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=y
CONFIG_CRYPTO_TWOFISH_AVX_X86_64=y
CONFIG_CRYPTO_ARIA_AESNI_AVX_X86_64=y
# CONFIG_CRYPTO_ARIA_AESNI_AVX2_X86_64 is not set
# CONFIG_CRYPTO_ARIA_GFNI_AVX512_X86_64 is not set
CONFIG_CRYPTO_AEGIS128_AESNI_SSE2=y
# end of Accelerated Cryptographic Algorithms for CPU (x86)

CONFIG_CRYPTO_HW=y
CONFIG_CRYPTO_DEV_PADLOCK=y
CONFIG_CRYPTO_DEV_PADLOCK_AES=y
CONFIG_CRYPTO_DEV_PADLOCK_SHA=y
# CONFIG_CRYPTO_DEV_ATMEL_ECC is not set
# CONFIG_CRYPTO_DEV_ATMEL_SHA204A is not set
CONFIG_CRYPTO_DEV_CCP=y
CONFIG_CRYPTO_DEV_CCP_DD=y
# CONFIG_CRYPTO_DEV_SP_CCP is not set
# CONFIG_CRYPTO_DEV_SP_PSP is not set
# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set
CONFIG_CRYPTO_DEV_QAT=y
CONFIG_CRYPTO_DEV_QAT_DH895xCC=y
CONFIG_CRYPTO_DEV_QAT_C3XXX=y
CONFIG_CRYPTO_DEV_QAT_C62X=y
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
# CONFIG_CRYPTO_DEV_QAT_420XX is not set
# CONFIG_CRYPTO_DEV_QAT_6XXX is not set
CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=y
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=y
CONFIG_CRYPTO_DEV_QAT_C62XVF=y
# CONFIG_CRYPTO_DEV_QAT_ERROR_INJECTION is not set
CONFIG_CRYPTO_DEV_VIRTIO=y
# CONFIG_CRYPTO_DEV_SAFEXCEL is not set
# CONFIG_CRYPTO_DEV_CCREE is not set
# CONFIG_CRYPTO_DEV_AMLOGIC_GXL is not set
CONFIG_ASYMMETRIC_KEY_TYPE=y
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
CONFIG_X509_CERTIFICATE_PARSER=y
CONFIG_PKCS8_PRIVATE_KEY_PARSER=y
CONFIG_PKCS7_MESSAGE_PARSER=y
CONFIG_PKCS7_TEST_KEY=y
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=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 is not set
CONFIG_OPENSSL_SUPPORTS_ML_DSA=y
# end of Certificates for signature checking

CONFIG_CRYPTO_KRB5=y
# 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 is not set
CONFIG_BITREVERSE=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
CONFIG_GENERIC_NET_UTILS=y
# CONFIG_CORDIC is not set
# 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_CRC8=y
CONFIG_CRC16=y
CONFIG_CRC_CCITT=y
CONFIG_CRC_ITU_T=y
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_AES_CBC_MACS=y
CONFIG_CRYPTO_LIB_ARC4=y
CONFIG_CRYPTO_LIB_GF128MUL=y
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=y
CONFIG_CRYPTO_LIB_CURVE25519_ARCH=y
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y
CONFIG_CRYPTO_LIB_DES=y
CONFIG_CRYPTO_LIB_GF128HASH=y
CONFIG_CRYPTO_LIB_GF128HASH_ARCH=y
CONFIG_CRYPTO_LIB_MD5=y
CONFIG_CRYPTO_LIB_NH=y
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_XOR_BLOCKS=y
CONFIG_XOR_BLOCKS_ARCH=y
CONFIG_XXHASH=y
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_842_COMPRESS=y
CONFIG_842_DECOMPRESS=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_LZ4_COMPRESS=y
CONFIG_LZ4HC_COMPRESS=y
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 is not set
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=y
CONFIG_REED_SOLOMON_DEC8=y
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=y
CONFIG_TEXTSEARCH_BM=y
CONFIG_TEXTSEARCH_FSM=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_DMA_DECLARE_COHERENT=y
CONFIG_SWIOTLB=y
# CONFIG_SWIOTLB_DYNAMIC is not set
CONFIG_DMA_NEED_SYNC=y
# CONFIG_DMA_RESTRICTED_POOL is not set
CONFIG_DMA_CMA=y
# CONFIG_DMA_NUMA_CMA is not set

#
# Default contiguous memory area size:
#
CONFIG_CMA_SIZE_MBYTES=0
CONFIG_CMA_SIZE_PERCENTAGE=0
# CONFIG_CMA_SIZE_SEL_MBYTES is not set
# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
# CONFIG_CMA_SIZE_SEL_MIN is not set
CONFIG_CMA_SIZE_SEL_MAX=y
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 is not set
CONFIG_CPU_RMAP=y
CONFIG_DQL=y
CONFIG_GLOB=y
CONFIG_NLATTR=y
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_HAVE_GENERIC_VDSO=y
CONFIG_GENERIC_GETTIMEOFDAY=y
CONFIG_GENERIC_VDSO_OVERFLOW_PROTECT=y
CONFIG_VDSO_GETRANDOM=y
CONFIG_FONT_SUPPORT=y
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
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_ALWAYS_INIT=y
CONFIG_STACKDEPOT_MAX_FRAMES=64
CONFIG_REF_TRACKER=y
CONFIG_SBITMAP=y
# CONFIG_LWQ_TEST is not set
# end of Library routines

CONFIG_FIRMWARE_TABLE=y
CONFIG_UNION_FIND=y

#
# Kernel hacking
#

#
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
CONFIG_PRINTK_CALLER=y
# CONFIG_STACKTRACE_BUILD_ID is not set
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
CONFIG_CONSOLE_LOGLEVEL_QUIET=4
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_BOOT_PRINTK_DELAY is not set
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=y

#
# 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=y
# CONFIG_DEBUG_INFO_DWARF5 is not set
# CONFIG_DEBUG_INFO_REDUCED is not set
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
# CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set
# CONFIG_DEBUG_INFO_COMPRESSED_ZSTD is not set
# CONFIG_DEBUG_INFO_SPLIT is not set
# CONFIG_DEBUG_INFO_BTF is not set
CONFIG_PAHOLE_HAS_BTF_TAG=y
CONFIG_PAHOLE_HAS_LANG_EXCLUDE=y
# CONFIG_GDB_SCRIPTS is not set
CONFIG_FRAME_WARN=2048
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_HEADERS_INSTALL is not set
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set
CONFIG_OBJTOOL=y
# CONFIG_OBJTOOL_WERROR is not set
CONFIG_NOINSTR_VALIDATION=y
# CONFIG_VMLINUX_MAP 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 is not set
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=y
# CONFIG_UBSAN_TRAP is not set
CONFIG_CC_HAS_UBSAN_ARRAY_BOUNDS=y
CONFIG_UBSAN_BOUNDS=y
CONFIG_UBSAN_ARRAY_BOUNDS=y
CONFIG_UBSAN_SHIFT=y
# CONFIG_UBSAN_BOOL is not set
# CONFIG_UBSAN_ENUM is not set
# CONFIG_UBSAN_ALIGNMENT is not set
# CONFIG_TEST_UBSAN is not set
CONFIG_HAVE_ARCH_KCSAN=y
CONFIG_HAVE_KCSAN_COMPILER=y
# end of Generic Kernel Debugging Instruments

#
# Networking Debugging
#
CONFIG_NET_DEV_REFCNT_TRACKER=y
CONFIG_NET_NS_REFCNT_TRACKER=y
CONFIG_DEBUG_NET=y
# CONFIG_DEBUG_NET_SMALL_RTNL is not set
# end of Networking Debugging

#
# Memory Debugging
#
CONFIG_PAGE_EXTENSION=y
# CONFIG_DEBUG_PAGEALLOC is not set
CONFIG_SLUB_DEBUG=y
# CONFIG_SLUB_DEBUG_ON is not set
CONFIG_SLUB_RCU_DEBUG=y
CONFIG_PAGE_OWNER=y
CONFIG_PAGE_TABLE_CHECK=y
CONFIG_PAGE_TABLE_CHECK_ENFORCED=y
CONFIG_PAGE_POISONING=y
# CONFIG_DEBUG_PAGE_REF is not set
# CONFIG_DEBUG_RODATA_TEST is not set
CONFIG_ARCH_HAS_DEBUG_WX=y
CONFIG_DEBUG_WX=y
CONFIG_ARCH_HAS_PTDUMP=y
CONFIG_PTDUMP=y
CONFIG_PTDUMP_DEBUGFS=y
CONFIG_HAVE_DEBUG_KMEMLEAK=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_PER_VMA_LOCK_STATS is not set
CONFIG_DEBUG_OBJECTS=y
# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
CONFIG_DEBUG_OBJECTS_FREE=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_OBJECTS_WORK=y
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
# CONFIG_SHRINKER_DEBUG is not set
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_SCHED_STACK_END_CHECK=y
CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
CONFIG_DEBUG_VFS=y
CONFIG_DEBUG_VM_IRQSOFF=y
CONFIG_DEBUG_VM=y
CONFIG_DEBUG_VM_MAPLE_TREE=y
CONFIG_DEBUG_VM_RB=y
CONFIG_DEBUG_VM_PGFLAGS=y
CONFIG_DEBUG_VM_PGTABLE=y
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
CONFIG_DEBUG_VIRTUAL=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_DEBUG_PER_CPU_MAPS=y
CONFIG_DEBUG_KMAP_LOCAL=y
CONFIG_ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP=y
CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP=y
# 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=y
CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX=y
CONFIG_KASAN_GENERIC=y
# CONFIG_KASAN_OUTLINE is not set
CONFIG_KASAN_INLINE=y
CONFIG_KASAN_STACK=y
CONFIG_KASAN_VMALLOC=y
# CONFIG_KASAN_EXTRA_INFO is not set
CONFIG_HAVE_ARCH_KFENCE=y
CONFIG_KFENCE=y
CONFIG_KFENCE_SAMPLE_INTERVAL=100
CONFIG_KFENCE_NUM_OBJECTS=255
# CONFIG_KFENCE_DEFERRABLE is not set
CONFIG_KFENCE_STATIC_KEYS=y
CONFIG_KFENCE_STRESS_TEST_FAULTS=0
CONFIG_HAVE_ARCH_KMSAN=y
CONFIG_HAVE_KMSAN_COMPILER=y
# end of Memory Debugging

# CONFIG_DEBUG_SHIRQ is not set

#
# Debug Oops, Lockups and Hangs
#
CONFIG_PANIC_ON_OOPS=y
CONFIG_PANIC_TIMEOUT=86400
CONFIG_LOCKUP_DETECTOR=y
CONFIG_SOFTLOCKUP_DETECTOR=y
# CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=1
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=y
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=140
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=1
# CONFIG_DETECT_HUNG_TASK_BLOCKER is not set
CONFIG_WQ_WATCHDOG=y
CONFIG_BOOTPARAM_WQ_STALL_PANIC=0
# 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=y
# CONFIG_DEBUG_ATOMIC is not set

#
# Lock Debugging (spinlocks, mutexes, etc...)
#
CONFIG_LOCK_DEBUGGING_SUPPORT=y
CONFIG_PROVE_LOCKING=y
CONFIG_PROVE_RAW_LOCK_NESTING=y
# CONFIG_LOCK_STAT is not set
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
CONFIG_DEBUG_RWSEMS=y
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_LOCKDEP=y
CONFIG_LOCKDEP_BITS=20
CONFIG_LOCKDEP_CHAINS_BITS=20
CONFIG_LOCKDEP_STACK_TRACE_BITS=20
CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14
CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12
# CONFIG_DEBUG_LOCKDEP is not set
CONFIG_DEBUG_ATOMIC_SLEEP=y
# 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=y
# CONFIG_CSD_LOCK_WAIT_DEBUG_DEFAULT is not set
# end of Lock Debugging (spinlocks, mutexes, etc...)

CONFIG_TRACE_IRQFLAGS=y
CONFIG_TRACE_IRQFLAGS_NMI=y
CONFIG_NMI_CHECK_CPU=y
CONFIG_DEBUG_IRQFLAGS=y
CONFIG_STACKTRACE=y
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_KOBJECT_RELEASE is not set

#
# Debug kernel data structures
#
CONFIG_DEBUG_LIST=y
CONFIG_DEBUG_PLIST=y
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_NOTIFIERS=y
# CONFIG_DEBUG_CLOSURES is not set
CONFIG_DEBUG_MAPLE_TREE=y
# end of Debug kernel data structures

#
# RCU Debugging
#
CONFIG_PROVE_RCU=y
# 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=100
CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0
# CONFIG_RCU_CPU_STALL_CPUTIME is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_EQS_DEBUG=y
# 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_USER_STACKTRACE_SUPPORT=y
CONFIG_NOP_TRACER=y
CONFIG_HAVE_RETHOOK=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=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_TRACE_CLOCK=y
CONFIG_RING_BUFFER=y
CONFIG_EVENT_TRACING=y
CONFIG_CONTEXT_SWITCH_TRACER=y
CONFIG_PREEMPTIRQ_TRACEPOINTS=y
CONFIG_TRACING=y
CONFIG_GENERIC_TRACER=y
CONFIG_TRACING_SUPPORT=y
CONFIG_FTRACE=y
CONFIG_TRACEFS_AUTOMOUNT_DEPRECATED=y
# CONFIG_BOOTTIME_TRACING is not set
# CONFIG_FUNCTION_TRACER is not set
# CONFIG_STACK_TRACER is not set
# CONFIG_IRQSOFF_TRACER is not set
# CONFIG_PREEMPT_TRACER is not set
# CONFIG_SCHED_TRACER is not set
# CONFIG_HWLAT_TRACER is not set
# CONFIG_OSNOISE_TRACER is not set
# CONFIG_TIMERLAT_TRACER is not set
# CONFIG_MMIOTRACE is not set
# CONFIG_FTRACE_SYSCALLS is not set
# CONFIG_TRACER_SNAPSHOT is not set
CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
CONFIG_BLK_DEV_IO_TRACE=y
CONFIG_UPROBE_EVENTS=y
CONFIG_EPROBE_EVENTS=y
CONFIG_BPF_EVENTS=y
CONFIG_DYNAMIC_EVENTS=y
CONFIG_PROBE_EVENTS=y
# CONFIG_SYNTH_EVENTS is not set
# CONFIG_USER_EVENTS is not set
# CONFIG_HIST_TRIGGERS is not set
CONFIG_TRACE_EVENT_INJECT=y
# CONFIG_TRACEPOINT_BENCHMARK is not set
# CONFIG_RING_BUFFER_BENCHMARK is not set
# CONFIG_TRACE_EVAL_MAP_FILE is not set
# CONFIG_FTRACE_STARTUP_TEST is not set
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS=y
# CONFIG_PREEMPTIRQ_DELAY_TEST is not set
# CONFIG_RV is not set
# CONFIG_TRACE_REMOTE_TEST is not set
CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
# 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 is not set

#
# 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 is not set
# CONFIG_DEBUG_TLBFLUSH is not set
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
# CONFIG_X86_DECODER_SELFTEST is not set
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=y
# CONFIG_DEBUG_NMI_SELFTEST is not set
CONFIG_X86_DEBUG_FPU=y
# 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_FAULT_INJECTION=y
CONFIG_FAILSLAB=y
CONFIG_FAIL_PAGE_ALLOC=y
CONFIG_FAULT_INJECTION_USERCOPY=y
CONFIG_FAIL_MAKE_REQUEST=y
CONFIG_FAIL_IO_TIMEOUT=y
CONFIG_FAIL_FUTEX=y
CONFIG_FAULT_INJECTION_DEBUG_FS=y
# CONFIG_FAIL_MMC_REQUEST is not set
# CONFIG_FAIL_SKB_REALLOC is not set
CONFIG_FAULT_INJECTION_CONFIGFS=y
# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set
CONFIG_ARCH_HAS_KCOV=y
CONFIG_KCOV=y
CONFIG_KCOV_ENABLE_COMPARISONS=y
CONFIG_KCOV_INSTRUMENT_ALL=y
CONFIG_KCOV_IRQ_AREA_SIZE=0x40000
# CONFIG_KCOV_SELFTEST 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 is not set
# 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_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_CONTEXT_ANALYSIS_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_DEBUG_VIRTUAL is not set
# CONFIG_TEST_MEMCAT_P is not set
# CONFIG_TEST_MEMINIT is not set
# CONFIG_TEST_HMM is not set
# CONFIG_TEST_FREE_PAGES is not set
# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set
# CONFIG_TEST_OBJPOOL is not set
CONFIG_ARCH_USE_MEMTEST=y
# CONFIG_MEMTEST 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
KernelRepo git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
ReproCID 0
ReproOpts
ReproSyzID 0
SyzkallerCommit e65da4eee4fd7ddb5a55c73c958410c8d90d8e82

Outputs:
DenialOfService ❌
Exploitable ❌
FilesystemTrigger ❌
NetworkTrigger ❌
PeripheralTrigger ❌
RemoteTrigger ❌
Unprivileged ❌
UserNamespace ❌
VMGuestTrigger ❌
VMHostTrigger ❌
Explanation
Based on the analysis of the bug report and the kernel source code, here is the
assessment of the bug:

**Bug Analysis:**
The bug is a `WARNING` indicating a reference count leak for a GID (Global
Identifier) table entry in the InfiniBand core (`GID entry ref leak for dev syz1
index 2 ref=1`).
This happens when an InfiniBand device (in this case, a Soft RoCE `rxe` device
named `syz1`) is being unregistered and destroyed. During the device teardown,
the kernel cleans up the GID table and expects all references to the GID entries
to have been released by clients. If any client still holds a reference, the
kernel prints this warning.

The typical way this is triggered by a fuzzer (like syzkaller) is:
1. Create a virtual network device (e.g., a TUN/TAP device).
2. Create an `rxe` (Soft RoCE) InfiniBand device on top of the netdev.
3. Create an RDMA CM (Communication Manager) ID and bind it to a local IP
address. This acquires a reference to the corresponding GID entry in the IB
device's GID table.
4. Delete the underlying netdev or the `rxe` device directly while the RDMA CM
ID is still alive and holding the reference.
5. The device unregistration routine (`ib_unregister_device`) proceeds to clean
up the GID table, sees the elevated reference count, and emits the `WARNING`.

**Security Impact:**
- **Exploitable:** No. This is a simple reference count leak tied to the
lifetime of a user-space file descriptor (the RDMA CM ID). When the process
exits or closes the file descriptor, the RDMA CM ID is destroyed, and the
reference is properly released. It does not lead to memory corruption,
use-after-free, or privilege escalation.
- **Denial of Service:** No. In production kernels, a `WARNING` does not halt
the system. The memory associated with the leaked reference is bounded and will
be reclaimed when the holding process terminates.
- **Unprivileged / User Namespace Access:** No. Creating an `rxe` device or
deleting it (either directly via netlink or by deleting the underlying netdev)
requires `CAP_NET_ADMIN` in the **initial** user namespace (`init_user_ns`). The
netlink command `RDMA_NLDEV_CMD_NEWLINK` and `RDMA_NLDEV_CMD_DELLINK` are
protected by `RDMA_NL_ADMIN_PERM`, which explicitly checks
`netlink_ns_capable(skb, &init_user_ns, CAP_NET_ADMIN)`. Therefore, an
unprivileged user, even within a new user namespace, cannot create the required
IB device to trigger this bug.
- **Remote / Network / Peripheral / Filesystem Trigger:** No. The bug is
triggered by local administrative configuration changes (adding/removing IB
devices) combined with local RDMA API usage.

In conclusion, this is a benign warning that occurs due to the asynchronous
nature of device removal versus client resource cleanup in the RDMA subsystem.
It poses no security risk.

Crash report:
infiniband syz1: set active
infiniband syz1: added syz_tun
smbdirect: ib_dev[syz1]: added: IB_CA max_fast_reg_page_list_len=512 device_cap_flags=0x1c001223c76 kernel_cap_flags=0x14 page_size_cap=0xfffff000
smbdirect: ib_dev[syz1]: num_ports=1 max_qp_rd_atom=128 max_qp_init_rd_atom=128 max_sgl_rd=0 max_sge_rd=32 max_cqe=32767 max_qp_wr=1048576 max_send_sge=32 max_recv_sge=32
smbdirect: ib_dev[syz1]PORT[1]: iwarp=0 ib=0 roce=1 v1=0 v2=1 core_cap_flags=0x803005
RDS/IB: syz1: added
smc: adding ib device syz1 with port count 1
smc:    ib device syz1 port 1 has no pnetid
syz.0.0: attempt to access beyond end of device
loop0: rw=2057, sector=68719479088, nr_sectors = 2056 limit=32768
gfs2: fsid=syz:syz.0: Failed to zero data buffers
syz.0.0: attempt to access beyond end of device
loop0: rw=2049, sector=68719479088, nr_sectors = 8 limit=32768
syz.0.0: attempt to access beyond end of device
loop0: rw=2049, sector=68719481144, nr_sectors = 8 limit=32768
syz.0.0: attempt to access beyond end of device
loop0: rw=14337, sector=68719479080, nr_sectors = 8 limit=32768
Buffer I/O error on dev loop0, logical block 8589934885, lost async page write
syz.0.0: attempt to access beyond end of device
loop0: rw=12288, sector=68719479080, nr_sectors = 8 limit=32768
smc: removing ib device syz1
smbdirect: ib_dev[syz1] removed
------------[ cut here ]------------
GID entry ref leak for dev syz1 index 2 ref=1
WARNING: drivers/infiniband/core/cache.c:808 at release_gid_table drivers/infiniband/core/cache.c:805 [inline], CPU#0: syz.0.0/5341
WARNING: drivers/infiniband/core/cache.c:808 at gid_table_release_one+0x1fa/0x440 drivers/infiniband/core/cache.c:885, CPU#0: syz.0.0/5341
Modules linked in:
CPU: 0 UID: 0 PID: 5341 Comm: syz.0.0 Not tainted syzkaller #0 PREEMPT(full) 
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
RIP: 0010:release_gid_table drivers/infiniband/core/cache.c:805 [inline]
RIP: 0010:gid_table_release_one+0x2aa/0x440 drivers/infiniband/core/cache.c:885
Code: 00 48 89 ef be 04 00 00 00 e8 f2 3c 8c f9 48 89 e8 48 c1 e8 03 42 0f b6 04 28 84 c0 75 54 8b 4d 00 48 89 df 4c 89 fe 44 89 e2 <67> 48 0f b9 3a 4d 89 ef 4c 8b 6c 24 68 48 8b 44 24 70 42 0f b6 04
RSP: 0018:ffffc9000f1e7030 EFLAGS: 00010246
RAX: 0000000000000000 RBX: ffffffff9041ae60 RCX: 0000000000000001
RDX: 0000000000000002 RSI: ffff88801ed9ba40 RDI: ffffffff9041ae60
RBP: ffff888037480b00 R08: ffff888037480b03 R09: 1ffff11006e90160
R10: dffffc0000000000 R11: ffffed1006e90161 R12: 0000000000000002
R13: dffffc0000000000 R14: ffff88804291d0d0 R15: ffff88801ed9ba40
FS:  00007fcee1ac66c0(0000) GS:ffff88808c812000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fcee1ac3f20 CR3: 000000001f6a7000 CR4: 0000000000352ef0
Call Trace:
 <TASK>
 ib_device_release+0xd2/0x1c0 drivers/infiniband/core/device.c:482
 device_release+0xc4/0x1f0 drivers/base/core.c:-1
 kobject_cleanup lib/kobject.c:689 [inline]
 kobject_release lib/kobject.c:720 [inline]
 kref_put include/linux/kref.h:65 [inline]
 kobject_put+0x228/0x560 lib/kobject.c:737
 nldev_dellink+0x288/0x320 drivers/infiniband/core/nldev.c:1827
 rdma_nl_rcv_msg drivers/infiniband/core/netlink.c:-1 [inline]
 rdma_nl_rcv_skb drivers/infiniband/core/netlink.c:239 [inline]
 rdma_nl_rcv+0x6d1/0xa10 drivers/infiniband/core/netlink.c:259
 netlink_unicast_kernel net/netlink/af_netlink.c:1318 [inline]
 netlink_unicast+0x75c/0x8e0 net/netlink/af_netlink.c:1344
 netlink_sendmsg+0x813/0xb40 net/netlink/af_netlink.c:1894
 sock_sendmsg_nosec net/socket.c:787 [inline]
 __sock_sendmsg net/socket.c:802 [inline]
 ____sys_sendmsg+0x972/0x9f0 net/socket.c:2698
 ___sys_sendmsg+0x2a5/0x360 net/socket.c:2752
 __sys_sendmsg net/socket.c:2784 [inline]
 __do_sys_sendmsg net/socket.c:2789 [inline]
 __se_sys_sendmsg net/socket.c:2787 [inline]
 __x64_sys_sendmsg+0x1bd/0x2a0 net/socket.c:2787
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x15f/0xf80 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fcee0b9c819
Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007fcee1ac5fe8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 00007fcee0e15fa0 RCX: 00007fcee0b9c819
RDX: 0000000000000000 RSI: 00002000000002c0 RDI: 000000000000000a
RBP: 00007fcee0c32c91 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007fcee0e16038 R14: 00007fcee0e15fa0 R15: 00007ffde4e47ea8
 </TASK>
----------------
Code disassembly (best guess):
   0:	00 48 89             	add    %cl,-0x77(%rax)
   3:	ef                   	out    %eax,(%dx)
   4:	be 04 00 00 00       	mov    $0x4,%esi
   9:	e8 f2 3c 8c f9       	call   0xf98c3d00
   e:	48 89 e8             	mov    %rbp,%rax
  11:	48 c1 e8 03          	shr    $0x3,%rax
  15:	42 0f b6 04 28       	movzbl (%rax,%r13,1),%eax
  1a:	84 c0                	test   %al,%al
  1c:	75 54                	jne    0x72
  1e:	8b 4d 00             	mov    0x0(%rbp),%ecx
  21:	48 89 df             	mov    %rbx,%rdi
  24:	4c 89 fe             	mov    %r15,%rsi
  27:	44 89 e2             	mov    %r12d,%edx
* 2a:	67 48 0f b9 3a       	ud1    (%edx),%rdi <-- trapping instruction
  2f:	4d 89 ef             	mov    %r13,%r15
  32:	4c 8b 6c 24 68       	mov    0x68(%rsp),%r13
  37:	48 8b 44 24 70       	mov    0x70(%rsp),%rax
  3c:	42                   	rex.X
  3d:	0f                   	.byte 0xf
  3e:	b6 04                	mov    $0x4,%dh

Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/05/21 20:27 flow assessment-security
1h08m Results:
map[DenialOfService:false Explanation:Based on the analysis of the bug report and the kernel source code, here is the
assessment of the bug:

**Bug Analysis:**
The bug is a `WARNING` indicating a reference count leak for a GID (Global
Identifier) table entry in the InfiniBand core (`GID entry ref leak for dev syz1
index 2 ref=1`).
This happens when an InfiniBand device (in this case, a Soft RoCE `rxe` device
named `syz1`) is being unregistered and destroyed. During the device teardown,
the kernel cleans up the GID table and expects all references to the GID entries
to have been released by clients. If any client still holds a reference, the
kernel prints this warning.

The typical way this is triggered by a fuzzer (like syzkaller) is:
1. Create a virtual network device (e.g., a TUN/TAP device).
2. Create an `rxe` (Soft RoCE) InfiniBand device on top of the netdev.
3. Create an RDMA CM (Communication Manager) ID and bind it to a local IP
address. This acquires a reference to the corresponding GID entry in the IB
device's GID table.
4. Delete the underlying netdev or the `rxe` device directly while the RDMA CM
ID is still alive and holding the reference.
5. The device unregistration routine (`ib_unregister_device`) proceeds to clean
up the GID table, sees the elevated reference count, and emits the `WARNING`.

**Security Impact:**
- **Exploitable:** No. This is a simple reference count leak tied to the
lifetime of a user-space file descriptor (the RDMA CM ID). When the process
exits or closes the file descriptor, the RDMA CM ID is destroyed, and the
reference is properly released. It does not lead to memory corruption,
use-after-free, or privilege escalation.
- **Denial of Service:** No. In production kernels, a `WARNING` does not halt
the system. The memory associated with the leaked reference is bounded and will
be reclaimed when the holding process terminates.
- **Unprivileged / User Namespace Access:** No. Creating an `rxe` device or
deleting it (either directly via netlink or by deleting the underlying netdev)
requires `CAP_NET_ADMIN` in the **initial** user namespace (`init_user_ns`). The
netlink command `RDMA_NLDEV_CMD_NEWLINK` and `RDMA_NLDEV_CMD_DELLINK` are
protected by `RDMA_NL_ADMIN_PERM`, which explicitly checks
`netlink_ns_capable(skb, &init_user_ns, CAP_NET_ADMIN)`. Therefore, an
unprivileged user, even within a new user namespace, cannot create the required
IB device to trigger this bug.
- **Remote / Network / Peripheral / Filesystem Trigger:** No. The bug is
triggered by local administrative configuration changes (adding/removing IB
devices) combined with local RDMA API usage.

In conclusion, this is a benign warning that occurs due to the asynchronous
nature of device removal versus client resource cleanup in the RDMA subsystem.
It poses no security risk. Exploitable:false FilesystemTrigger:false NetworkTrigger:false PeripheralTrigger:false RemoteTrigger:false Unprivileged:false UserNamespace:false VMGuestTrigger:false VMHostTrigger:false]

1/1 2026/05/21 20:27 action syz-repro-to-c-repro
0m Results:
map[SimplifiedCRepro:]

2/1 2026/05/21 20:27 action kernel-checkouter
1m Results:
map[KernelSrc:/app/workdir/cache/src/2e6c93e91a2d626bf15a702572d6fb7684f3cbc2]

3/1 2026/05/21 20:29 action kernel-builder
24m Results:
map[KernelObj:/app/workdir/cache/build/4537d0f8ea5769945d05eafd2380ea7476acba84]

4/1 2026/05/21 20:53 action codesearch-prepare
19m Results:
map[Index:codesearch-index]

5/1 2026/05/21 21:12 agent expert
23m Model:
gemini-3.1-pro-preview

Results:
map[DenialOfService:false Exploitable:false FilesystemTrigger:false NetworkTrigger:false PeripheralTrigger:false RemoteTrigger:false Unprivileged:false UserNamespace:false VMGuestTrigger:false VMHostTrigger:false]

Instruction:
You are an experienced Linux kernel security engineer. Your task is to analyze given kernel bug report
and determine its security impact based on the following dimensions.

Use the provided tools to examine the source code, check for capability checks (e.g., capable(), ns_capable()),
and understand the nature of the bug. Analyze the given kernel build and configuration.
You can check the kernel config by grepping ".config" file; you can check kernel cmdline by greeping
".config" file for "CONFIG_CMDLINE=". Assume sysctl parameters have default values.
But analyze for the corresponding production build w/o debugging tools enabled (like KASAN, KMSAN, UBSAN).

Don't make assumptions; verify them with source code access. Try different strategies when analyzing the bug:
 - think of ways in which the vulnerable code is unreachable
 - or the other way around: try to come up with different ideas of how an unprivileged user can reach the bug
If still unsure err on the side of the bug being non-exploitable/not-accessible.
In the final reply, provide a reasoning for your assessment.

Analysis dimensions:

* Exploitable:
Determine if the bug can result in memory corruption or elevated privileges.
Memory safety issues are almost always exploitable (KASAN or UBSAN reports for use-after-free, out-of-bounds;
refcounting issues, corrupted lists, etc). When kernel is crashing on a completly wild pointer access
(e.g. user-space address, or non-canonical address, but not on NULL or address corresponding to KASAN shadow
for NULL address), including both data accesses and control tranfers, that's also usually implies possibility
of exploitation. Such reports usually say "unable to handle kernel paging request".
Uses of uninitialized values detected by KMSAN may be exploitable b/c attacker frequently can affect uninit
values with spraying techniques. However, for these exploitabability depends on how exactly the uninit value
is used in the code, and what it affects.

Think of what happens after the bug is triggered. Some bugs cause kernel panic and halt execution,
they are harder to exploit. For example, BUG reports halts the kernel. However, WARNING reports don't halt
execution in production builds. Debug bug detection tools (like KASAN, KMSAN, KCSAN, UBSAN) are also not enabled
in production builds, so attacker can freely exploit these bugs w/o being detected by these tools.
If you see an integer overflow, think how the overflowed value used later (if it's used as allocation size,
or an array index). If you see an out-of-bounds read, think if it's followed by an out-of-bounds write as well.
Some KCSAN data-races may be exploitable by skilled attackers as well. Think what data structures got corrupted
as the result of data races and how. However, note that kernel has lots of "benign" data races that don't lead
to any runtime misbehavior at all.

* Denial Of Service:
Determine if the bug can result in denial-of-service. Most bugs can, since they cause system crash,
hangs, deadlocks, or resource leaks. This is mostly applicable to WARNING bugs that won't cause system crash
in production. For these think what will be consequences of the violation of the kernel assumptions flagged
by the WARNING. In some cases the unexpected condition is also properly handled by the normal control flow
(e.g. with "if (WARN_ON(...))"), these won't cause denial-of-service. If the condition is not handled,
then it may or may not cause denial-of-service.

* Accessible From Unprivileged Processes:
Determine if the bug can be reached from a typical (non-root) user process that does NOT have any special capabilities
(like CAP_SYS_ADMIN, CAP_NET_ADMIN, CAP_NET_RAW, CAP_PERFMON) or access to device nodes restricted to root.
Assume that unprivileged_bpf_disabled=1, that is eBPF loading is not accessible. However, cBPF (classical BPF)
is still accessible to non-root processes.
Assume that user namespaces are not accessible, that is, the process cannot get the mentioned capabilities even
within a new user namespace (checked by ns_capable() function in the kernel sources).

* Accessible From User Namespaces:
Determine if the bug can be reached within a user-namespace where the process has all capabilities
(including CAP_SYS_ADMIN, CAP_NET_ADMIN, CAP_NET_RAW, CAP_PERFMON). Such capabilities are checked with ns_capable()
function in the kernel sources.

* VM Guest Trigger:
Determine if the bug can be triggered from the context of a typical KVM guest (e.g., set up by a QEMU VMM).
Consider accesses to standard Linux host paravirtualized features (virtio-blk, virtio-net, etc.),
and handling of VM exits in the KVM code.

* VM Host Trigger in The Confidetial Computing Context:
Determine if the bug can be triggered in a confidential computing guest kernel from the context of a KVM host.
Consider access to standard Linux guest paravirtualized features (virtio-blk, virtio-net, etc.).

* Ethernet Network Trigger:
Determine if the bug can be triggered by processing ingress network Ethernet traffic, either directly (network stack)
or via drivers exposed to network data.

* Other Remote Trigger:
Determine if the bug can be triggered by processing remote traffic other than Ethernet (Wifi, Bluetooth, NFC, etc).

* Peripheral Trigger:
Determine if the bug can be triggered via an untrusted peripheral device that can be physically plugged
into a system, such as a USB device or a niche hardware driver handling external hardware inputs.
This is particularly important for mobile and desktop environments where users can plug in unknown devices.

* Malicious Filesystem Trigger:
Determine if the bug can be triggered by the kernel mounting and parsing a malicious filesystem image.
This is highly critical for Desktop and Mobile environments where external media or downloaded images
might be auto-mounted.

Prefer calling several tools at the same time to save round-trips.


Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.

Prompt:
The kernel bug report is:

infiniband syz1: set active
infiniband syz1: added syz_tun
smbdirect: ib_dev[syz1]: added: IB_CA max_fast_reg_page_list_len=512 device_cap_flags=0x1c001223c76 kernel_cap_flags=0x14 page_size_cap=0xfffff000
smbdirect: ib_dev[syz1]: num_ports=1 max_qp_rd_atom=128 max_qp_init_rd_atom=128 max_sgl_rd=0 max_sge_rd=32 max_cqe=32767 max_qp_wr=1048576 max_send_sge=32 max_recv_sge=32
smbdirect: ib_dev[syz1]PORT[1]: iwarp=0 ib=0 roce=1 v1=0 v2=1 core_cap_flags=0x803005
RDS/IB: syz1: added
smc: adding ib device syz1 with port count 1
smc:    ib device syz1 port 1 has no pnetid
syz.0.0: attempt to access beyond end of device
loop0: rw=2057, sector=68719479088, nr_sectors = 2056 limit=32768
gfs2: fsid=syz:syz.0: Failed to zero data buffers
syz.0.0: attempt to access beyond end of device
loop0: rw=2049, sector=68719479088, nr_sectors = 8 limit=32768
syz.0.0: attempt to access beyond end of device
loop0: rw=2049, sector=68719481144, nr_sectors = 8 limit=32768
syz.0.0: attempt to access beyond end of device
loop0: rw=14337, sector=68719479080, nr_sectors = 8 limit=32768
Buffer I/O error on dev loop0, logical block 8589934885, lost async page write
syz.0.0: attempt to access beyond end of device
loop0: rw=12288, sector=68719479080, nr_sectors = 8 limit=32768
smc: removing ib device syz1
smbdirect: ib_dev[syz1] removed
------------[ cut here ]------------
GID entry ref leak for dev syz1 index 2 ref=1
WARNING: drivers/infiniband/core/cache.c:808 at release_gid_table drivers/infiniband/core/cache.c:805 [inline], CPU#0: syz.0.0/5341
WARNING: drivers/infiniband/core/cache.c:808 at gid_table_release_one+0x1fa/0x440 drivers/infiniband/core/cache.c:885, CPU#0: syz.0.0/5341
Modules linked in:
CPU: 0 UID: 0 PID: 5341 Comm: syz.0.0 Not tainted syzkaller #0 PREEMPT(full) 
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
RIP: 0010:release_gid_table drivers/infiniband/core/cache.c:805 [inline]
RIP: 0010:gid_table_release_one+0x2aa/0x440 drivers/infiniband/core/cache.c:885
Code: 00 48 89 ef be 04 00 00 00 e8 f2 3c 8c f9 48 89 e8 48 c1 e8 03 42 0f b6 04 28 84 c0 75 54 8b 4d 00 48 89 df 4c 89 fe 44 89 e2 <67> 48 0f b9 3a 4d 89 ef 4c 8b 6c 24 68 48 8b 44 24 70 42 0f b6 04
RSP: 0018:ffffc9000f1e7030 EFLAGS: 00010246
RAX: 0000000000000000 RBX: ffffffff9041ae60 RCX: 0000000000000001
RDX: 0000000000000002 RSI: ffff88801ed9ba40 RDI: ffffffff9041ae60
RBP: ffff888037480b00 R08: ffff888037480b03 R09: 1ffff11006e90160
R10: dffffc0000000000 R11: ffffed1006e90161 R12: 0000000000000002
R13: dffffc0000000000 R14: ffff88804291d0d0 R15: ffff88801ed9ba40
FS:  00007fcee1ac66c0(0000) GS:ffff88808c812000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fcee1ac3f20 CR3: 000000001f6a7000 CR4: 0000000000352ef0
Call Trace:
 <TASK>
 ib_device_release+0xd2/0x1c0 drivers/infiniband/core/device.c:482
 device_release+0xc4/0x1f0 drivers/base/core.c:-1
 kobject_cleanup lib/kobject.c:689 [inline]
 kobject_release lib/kobject.c:720 [inline]
 kref_put include/linux/kref.h:65 [inline]
 kobject_put+0x228/0x560 lib/kobject.c:737
 nldev_dellink+0x288/0x320 drivers/infiniband/core/nldev.c:1827
 rdma_nl_rcv_msg drivers/infiniband/core/netlink.c:-1 [inline]
 rdma_nl_rcv_skb drivers/infiniband/core/netlink.c:239 [inline]
 rdma_nl_rcv+0x6d1/0xa10 drivers/infiniband/core/netlink.c:259
 netlink_unicast_kernel net/netlink/af_netlink.c:1318 [inline]
 netlink_unicast+0x75c/0x8e0 net/netlink/af_netlink.c:1344
 netlink_sendmsg+0x813/0xb40 net/netlink/af_netlink.c:1894
 sock_sendmsg_nosec net/socket.c:787 [inline]
 __sock_sendmsg net/socket.c:802 [inline]
 ____sys_sendmsg+0x972/0x9f0 net/socket.c:2698
 ___sys_sendmsg+0x2a5/0x360 net/socket.c:2752
 __sys_sendmsg net/socket.c:2784 [inline]
 __do_sys_sendmsg net/socket.c:2789 [inline]
 __se_sys_sendmsg net/socket.c:2787 [inline]
 __x64_sys_sendmsg+0x1bd/0x2a0 net/socket.c:2787
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0x15f/0xf80 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fcee0b9c819
Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007fcee1ac5fe8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 00007fcee0e15fa0 RCX: 00007fcee0b9c819
RDX: 0000000000000000 RSI: 00002000000002c0 RDI: 000000000000000a
RBP: 00007fcee0c32c91 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007fcee0e16038 R14: 00007fcee0e15fa0 R15: 00007ffde4e47ea8
 </TASK>
----------------
Code disassembly (best guess):
   0:	00 48 89             	add    %cl,-0x77(%rax)
   3:	ef                   	out    %eax,(%dx)
   4:	be 04 00 00 00       	mov    $0x4,%esi
   9:	e8 f2 3c 8c f9       	call   0xf98c3d00
   e:	48 89 e8             	mov    %rbp,%rax
  11:	48 c1 e8 03          	shr    $0x3,%rax
  15:	42 0f b6 04 28       	movzbl (%rax,%r13,1),%eax
  1a:	84 c0                	test   %al,%al
  1c:	75 54                	jne    0x72
  1e:	8b 4d 00             	mov    0x0(%rbp),%ecx
  21:	48 89 df             	mov    %rbx,%rdi
  24:	4c 89 fe             	mov    %r15,%rsi
  27:	44 89 e2             	mov    %r12d,%edx
* 2a:	67 48 0f b9 3a       	ud1    (%edx),%rdi <-- trapping instruction
  2f:	4d 89 ef             	mov    %r13,%r15
  32:	4c 8b 6c 24 68       	mov    0x68(%rsp),%r13
  37:	48 8b 44 24 70       	mov    0x70(%rsp),%rax
  3c:	42                   	rex.X
  3d:	0f                   	.byte 0xf
  3e:	b6 04                	mov    $0x4,%dh




Reply:
Based on the analysis of the bug report and the kernel source code, here is the assessment of the bug:

**Bug Analysis:**
The bug is a `WARNING` indicating a reference count leak for a GID (Global Identifier) table entry in the InfiniBand core (`GID entry ref leak for dev syz1 index 2 ref=1`).
This happens when an InfiniBand device (in this case, a Soft RoCE `rxe` device named `syz1`) is being unregistered and destroyed. During the device teardown, the kernel cleans up the GID table and expects all references to the GID entries to have been released by clients. If any client still holds a reference, the kernel prints this warning.

The typical way this is triggered by a fuzzer (like syzkaller) is:
1. Create a virtual network device (e.g., a TUN/TAP device).
2. Create an `rxe` (Soft RoCE) InfiniBand device on top of the netdev.
3. Create an RDMA CM (Communication Manager) ID and bind it to a local IP address. This acquires a reference to the corresponding GID entry in the IB device's GID table.
4. Delete the underlying netdev or the `rxe` device directly while the RDMA CM ID is still alive and holding the reference.
5. The device unregistration routine (`ib_unregister_device`) proceeds to clean up the GID table, sees the elevated reference count, and emits the `WARNING`.

**Security Impact:**
- **Exploitable:** No. This is a simple reference count leak tied to the lifetime of a user-space file descriptor (the RDMA CM ID). When the process exits or closes the file descriptor, the RDMA CM ID is destroyed, and the reference is properly released. It does not lead to memory corruption, use-after-free, or privilege escalation.
- **Denial of Service:** No. In production kernels, a `WARNING` does not halt the system. The memory associated with the leaked reference is bounded and will be reclaimed when the holding process terminates.
- **Unprivileged / User Namespace Access:** No. Creating an `rxe` device or deleting it (either directly via netlink or by deleting the underlying netdev) requires `CAP_NET_ADMIN` in the **initial** user namespace (`init_user_ns`). The netlink command `RDMA_NLDEV_CMD_NEWLINK` and `RDMA_NLDEV_CMD_DELLINK` are protected by `RDMA_NL_ADMIN_PERM`, which explicitly checks `netlink_ns_capable(skb, &init_user_ns, CAP_NET_ADMIN)`. Therefore, an unprivileged user, even within a new user namespace, cannot create the required IB device to trigger this bug.
- **Remote / Network / Peripheral / Filesystem Trigger:** No. The bug is triggered by local administrative configuration changes (adding/removing IB devices) combined with local RDMA API usage.

In conclusion, this is a benign warning that occurs due to the asynchronous nature of device removal versus client resource cleanup in the RDMA subsystem. It poses no security risk.

6/2 2026/05/21 21:12 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 7658
							output: 46
							thoughts: 187
						

Thoughts:
**Analyzing a Syzkaller Bug Report: GID Entry Leak**

Okay, here's the situation. I've got a syzkaller bug report screaming about a "GID entry ref leak" for `dev syz1` at index 2, with a reference count of 1. Right away, this piques my interest. GID entries and reference counts within the InfiniBand subsystem… those are potential trouble spots.

The report also helpfully points me directly to the kernel code: `drivers/infiniband/core/cache.c`, specifically around line 808. It throws a couple of warnings, one from within `release_gid_table` (inlined from line 805) and the other from `gid_table_release_one`, which, from the looks of it, calls `release_gid_table` at some point. The call stack information mentions CPU#0 and a syz process. All pretty standard for a syzkaller report.

My immediate next step is to examine the code at and around that line 808 in `drivers/infiniband/core/cache.c`. I need to understand what's happening in those functions and why a reference count might be leaking. I expect that I'll need to trace the refcount through calls to `release_gid_table` and `gid_table_release_one` to determine what's going wrong. Looks like a classic memory management or reference counting issue. Let's dig in.



7/2 2026/05/21 21:12 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:release_gid_table]

Results:
map[SourceCode: 793:	static void release_gid_table(struct ib_device *device,
 794:				      struct ib_gid_table *table)
 795:	{
 796:		int i;
 797:	
 798:		if (!table)
 799:			return;
 800:	
 801:		for (i = 0; i < table->sz; i++) {
 802:			if (is_gid_entry_free(table->data_vec[i]))
 803:				continue;
 804:	
 805:			WARN_ONCE(true,
 806:				  "GID entry ref leak for dev %s index %d ref=%u\n",
 807:				  dev_name(&device->dev), i,
 808:				  kref_read(&table->data_vec[i]->kref));
 809:		}
 810:	
 811:		mutex_destroy(&table->lock);
 812:		kfree(table->data_vec);
 813:		kfree(table);
 814:	}
 SourceFile:drivers/infiniband/core/cache.c]

8/2 2026/05/21 21:12 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 8551
							output: 49
							thoughts: 111
						

Thoughts:
**Refcount Leak Alert!**

Okay, so I'm seeing a potential refcount leak in the GID table, and this is serious. The trail leads from `ib_device_release`, which is then firing off `nldev_dellink` and subsequently, `rdma_nl_rcv_msg`. Wait a minute... `ib_device_release` is being called from `kobject_put`, which itself is invoked by `nldev_dellink`. This definitely warrants a closer look. I need to dive into `drivers/infiniband/core/nldev.c` and specifically examine the `nldev_dellink` function. Let's see what's going on in there.



9/2 2026/05/21 21:12 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/nldev.c IncludeLines:true Name:nldev_dellink]

Results:
map[SourceCode:1804:	static int nldev_dellink(struct sk_buff *skb, struct nlmsghdr *nlh,
1805:				  struct netlink_ext_ack *extack)
1806:	{
1807:		struct nlattr *tb[RDMA_NLDEV_ATTR_MAX];
1808:		struct ib_device *device;
1809:		u32 index;
1810:		int err;
1811:	
1812:		err = nlmsg_parse(nlh, 0, tb, RDMA_NLDEV_ATTR_MAX - 1,
1813:				    nldev_policy, extack);
1814:		if (err || !tb[RDMA_NLDEV_ATTR_DEV_INDEX])
1815:			return -EINVAL;
1816:	
1817:		index = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
1818:		device = ib_device_get_by_index(sock_net(skb->sk), index);
1819:		if (!device)
1820:			return -EINVAL;
1821:	
1822:		if (!(device->attrs.kernel_cap_flags & IBK_ALLOW_USER_UNREG)) {
1823:			ib_device_put(device);
1824:			return -EINVAL;
1825:		}
1826:	
1827:		ib_unregister_device_and_put(device);
1828:		return 0;
1829:	}
 SourceFile:drivers/infiniband/core/nldev.c]

10/2 2026/05/21 21:12 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 9331
							output: 46
							thoughts: 294
						

Thoughts:
**Analyzing a Refcount Leak in Kernel Code**

Okay, so I've got a bug report: a refcount leak. My first thought is always, "Is this exploitable?" A refcount leak, by its nature, means memory isn't being freed properly. It's a memory leak, plain and simple. Generally, these aren't the go-to vulnerabilities for privilege escalation or immediate memory corruption, and usually cause a Denial of Service (OOM). But, this is marked as a `WARNING`. In a production environment, `WARNING` messages *don't* typically halt the kernel.

Wait a second, let me think this through. If the refcount is leaked, the memory that *should* be freed isn't. But, isn't the table itself, specifically `table->data_vec` and `table`, freed later on? Let me check the `release_gid_table` function.

```c
	for (i = 0; i < table->sz; i++) {
		if (is_gid_entry_free(table->data_vec[i]))
			continue;

		WARN_ONCE(true,
			  "GID entry ref leak for dev %s index %d ref=%u\n",
			  dev_name(&device->dev), i,
			  kref_read(&table->data_vec[i]->kref));
	}

	mutex_destroy(&table->lock);
	kfree(table->data_vec);
	kfree(table);
```

Okay, I see it. `table->data_vec[i]` is a pointer, right? A pointer to a `struct ib_gid_table_entry`? I need to confirm that. That's a critical detail. This is where I need to dig into the structure definitions to really grasp the impact. Let's see...



11/2 2026/05/21 21:12 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:ib_gid_table]

Results:
map[SourceCode:  99:	struct ib_gid_table {
 100:		int				sz;
 101:		/* In RoCE, adding a GID to the table requires:
 102:		 * (a) Find if this GID is already exists.
 103:		 * (b) Find a free space.
 104:		 * (c) Write the new GID
 105:		 *
 106:		 * Delete requires different set of operations:
 107:		 * (a) Find the GID
 108:		 * (b) Delete it.
 109:		 *
 110:		 **/
 111:		/* Any writer to data_vec must hold this lock and the write side of
 112:		 * rwlock. Readers must hold only rwlock. All writers must be in a
 113:		 * sleepable context.
 114:		 */
 115:		struct mutex			lock;
 116:		/* rwlock protects data_vec[ix]->state and entry pointer.
 117:		 */
 118:		rwlock_t			rwlock;
 119:		struct ib_gid_table_entry	**data_vec;
 120:		/* bit field, each bit indicates the index of default GID */
 121:		u32				default_gid_indices;
 122:	};
 SourceFile:drivers/infiniband/core/cache.c]

12/2 2026/05/21 21:12 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 10470
							output: 48
							thoughts: 87
						

Thoughts:
Okay, here's my breakdown of what's going through my mind as I analyze this:

**Refcount Leak Detection**

Alright, so `data_vec` is definitely an array of pointers, that much is clear. The key question is, if we're seeing a refcount leak, where exactly is the problem? My initial thought is that if `table->data_vec[i]` isn't freed at some point, that's a prime suspect. But wait... upon further reflection, and considering the data structures involved, it seems that it is indeed the `table->data_vec` that is getting freed. Therefore, the issue has to lie with the `ib_gid_table_entry` objects *pointed to* by the elements of `data_vec`. Those objects are potentially the source of the memory leak. I need to confirm if we're properly releasing those entries. Let me examine the `is_gid_entry_free` function for clues on how those entries are handled.



13/2 2026/05/21 21:12 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:is_gid_entry_free]

Results:
map[SourceCode: 205:	static bool is_gid_entry_free(const struct ib_gid_table_entry *entry)
 206:	{
 207:		return !entry;
 208:	}
 SourceFile:drivers/infiniband/core/cache.c]

14/2 2026/05/21 21:12 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 10908
							output: 48
							thoughts: 83
						

Thoughts:
**Analyzing a Potential Memory Leak**

Okay, so I'm looking at this code and if `entry` isn't NULL, the function seems to be doing some cleanup. It warns and then frees `table->data_vec` and `table` themselves. That seems standard, but then I realize something's missing. The code explicitly says that the `ib_gid_table_entry` is being leaked. It's a memory leak, that's clear enough, but I need to understand the full impact. What exactly is `ib_gid_table_entry`?

Hold on. If that's leaked, what else is potentially leaking? It's not enough to say "memory leak", I need to dig deeper. I need to know the composition of `ib_gid_table_entry` to understand its scope. Let's start by checking its definition and see what other data structures it might be holding or referencing. I have a feeling this is more complex than it first appears.



15/2 2026/05/21 21:13 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:ib_gid_table_entry]

Results:
map[SourceCode:  85:	struct ib_gid_table_entry {
  86:		struct kref			kref;
  87:		struct work_struct		del_work;
  88:		struct ib_gid_attr		attr;
  89:		void				*context;
  90:		/* Store the ndev pointer to release reference later on in
  91:		 * call_rcu context because by that time gid_table_entry
  92:		 * and attr might be already freed. So keep a copy of it.
  93:		 * ndev_storage is freed by rcu callback.
  94:		 */
  95:		struct roce_gid_ndev_storage	*ndev_storage;
  96:		enum gid_table_entry_state	state;
  97:	};
 SourceFile:drivers/infiniband/core/cache.c]

16/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 11485
							output: 50
							thoughts: 87
						

Thoughts:
**Analyzing a Potential Memory Leak Vulnerability**

Okay, so I'm looking at this structure – it has a `kref`, a `del_work`, some `attr` data, a `context`, and `ndev_storage`. My first thought is, if this thing isn't being managed correctly – if it leaks – we're staring down a memory leak. That's never good. The real question is, can an unprivileged user exploit this? That's what I need to figure out.

The vulnerability is apparently triggered by `nldev_dellink`. Right, that's a netlink command. Now, the key is whether that command requires any specific capabilities. That's the next check I'm going to make. If it's something a standard user can invoke, we've got a much bigger problem on our hands. So, capabilites are what I need to look at here.



17/2 2026/05/21 21:13 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/nldev.c IncludeLines:true Name:nldev_cb_table]

Results:
map[SourceCode:2640:	static const struct rdma_nl_cbs nldev_cb_table[RDMA_NLDEV_NUM_OPS] = {
2641:		[RDMA_NLDEV_CMD_GET] = {
2642:			.doit = nldev_get_doit,
2643:			.dump = nldev_get_dumpit,
2644:		},
2645:		[RDMA_NLDEV_CMD_GET_CHARDEV] = {
2646:			.doit = nldev_get_chardev,
2647:		},
2648:		[RDMA_NLDEV_CMD_SET] = {
2649:			.doit = nldev_set_doit,
2650:			.flags = RDMA_NL_ADMIN_PERM,
2651:		},
2652:		[RDMA_NLDEV_CMD_NEWLINK] = {
2653:			.doit = nldev_newlink,
2654:			.flags = RDMA_NL_ADMIN_PERM,
2655:		},
2656:		[RDMA_NLDEV_CMD_DELLINK] = {
2657:			.doit = nldev_dellink,
2658:			.flags = RDMA_NL_ADMIN_PERM,
2659:		},
2660:		[RDMA_NLDEV_CMD_PORT_GET] = {
2661:			.doit = nldev_port_get_doit,
2662:			.dump = nldev_port_get_dumpit,
2663:		},
2664:		[RDMA_NLDEV_CMD_RES_GET] = {
2665:			.doit = nldev_res_get_doit,
2666:			.dump = nldev_res_get_dumpit,
2667:		},
2668:		[RDMA_NLDEV_CMD_RES_QP_GET] = {
2669:			.doit = nldev_res_get_qp_doit,
2670:			.dump = nldev_res_get_qp_dumpit,
2671:		},
2672:		[RDMA_NLDEV_CMD_RES_CM_ID_GET] = {
2673:			.doit = nldev_res_get_cm_id_doit,
2674:			.dump = nldev_res_get_cm_id_dumpit,
2675:		},
2676:		[RDMA_NLDEV_CMD_RES_CQ_GET] = {
2677:			.doit = nldev_res_get_cq_doit,
2678:			.dump = nldev_res_get_cq_dumpit,
2679:		},
2680:		[RDMA_NLDEV_CMD_RES_MR_GET] = {
2681:			.doit = nldev_res_get_mr_doit,
2682:			.dump = nldev_res_get_mr_dumpit,
2683:		},
2684:		[RDMA_NLDEV_CMD_RES_PD_GET] = {
2685:			.doit = nldev_res_get_pd_doit,
2686:			.dump = nldev_res_get_pd_dumpit,
2687:		},
2688:		[RDMA_NLDEV_CMD_RES_CTX_GET] = {
2689:			.doit = nldev_res_get_ctx_doit,
2690:			.dump = nldev_res_get_ctx_dumpit,
2691:		},
2692:		[RDMA_NLDEV_CMD_RES_SRQ_GET] = {
2693:			.doit = nldev_res_get_srq_doit,
2694:			.dump = nldev_res_get_srq_dumpit,
2695:		},
2696:		[RDMA_NLDEV_CMD_SYS_GET] = {
2697:			.doit = nldev_sys_get_doit,
2698:		},
2699:		[RDMA_NLDEV_CMD_SYS_SET] = {
2700:			.doit = nldev_set_sys_set_doit,
2701:			.flags = RDMA_NL_ADMIN_PERM,
2702:		},
2703:		[RDMA_NLDEV_CMD_STAT_SET] = {
2704:			.doit = nldev_stat_set_doit,
2705:			.flags = RDMA_NL_ADMIN_PERM,
2706:		},
2707:		[RDMA_NLDEV_CMD_STAT_GET] = {
2708:			.doit = nldev_stat_get_doit,
2709:			.dump = nldev_stat_get_dumpit,
2710:		},
2711:		[RDMA_NLDEV_CMD_STAT_DEL] = {
2712:			.doit = nldev_stat_del_doit,
2713:			.flags = RDMA_NL_ADMIN_PERM,
2714:		},
2715:		[RDMA_NLDEV_CMD_RES_QP_GET_RAW] = {
2716:			.doit = nldev_res_get_qp_raw_doit,
2717:			.dump = nldev_res_get_qp_raw_dumpit,
2718:			.flags = RDMA_NL_ADMIN_PERM,
2719:		},
2720:		[RDMA_NLDEV_CMD_RES_CQ_GET_RAW] = {
2721:			.doit = nldev_res_get_cq_raw_doit,
2722:			.dump = nldev_res_get_cq_raw_dumpit,
2723:			.flags = RDMA_NL_ADMIN_PERM,
2724:		},
2725:		[RDMA_NLDEV_CMD_RES_MR_GET_RAW] = {
2726:			.doit = nldev_res_get_mr_raw_doit,
2727:			.dump = nldev_res_get_mr_raw_dumpit,
2728:			.flags = RDMA_NL_ADMIN_PERM,
2729:		},
2730:		[RDMA_NLDEV_CMD_RES_SRQ_GET_RAW] = {
2731:			.doit = nldev_res_get_srq_raw_doit,
2732:			.dump = nldev_res_get_srq_raw_dumpit,
2733:			.flags = RDMA_NL_ADMIN_PERM,
2734:		},
2735:		[RDMA_NLDEV_CMD_STAT_GET_STATUS] = {
2736:			.doit = nldev_stat_get_counter_status_doit,
2737:		},
2738:		[RDMA_NLDEV_CMD_NEWDEV] = {
2739:			.doit = nldev_newdev,
2740:			.flags = RDMA_NL_ADMIN_PERM,
2741:		},
2742:		[RDMA_NLDEV_CMD_DELDEV] = {
2743:			.doit = nldev_deldev,
2744:			.flags = RDMA_NL_ADMIN_PERM,
2745:		},
2746:	};
 SourceFile:drivers/infiniband/core/nldev.c]

18/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 13888
							output: 51
							thoughts: 46
						

Thoughts:
**Analyzing RDMA Link Deletion Permissions**

Okay, so I'm looking at this `RDMA_NLDEV_CMD_DELLINK` command and I see it's setting the `.flags` field to `RDMA_NL_ADMIN_PERM`. Naturally, my immediate thought is "Right, what does that actually *mean* in practical terms?" I need to dig into the definition of `RDMA_NL_ADMIN_PERM` and understand the implications of this flag being set during a link deletion. Is it simply requiring elevated privileges? Does it imply specific security checks are bypassed? Are there side effects I need to consider? I'm going to need to review the relevant documentation and code to get a complete grasp of the security and operational impact. I'll need to know whether this is a hard requirement, or an advisory flag, and exactly how it is enforced in the kernel.



19/2 2026/05/21 21:13 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/netlink.c IncludeLines:true Name:rdma_nl_rcv_msg]

Results:
map[SourceCode: 152:	static int rdma_nl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
 153:				   struct netlink_ext_ack *extack)
 154:	{
 155:		int type = nlh->nlmsg_type;
 156:		unsigned int index = RDMA_NL_GET_CLIENT(type);
 157:		unsigned int op = RDMA_NL_GET_OP(type);
 158:		const struct rdma_nl_cbs *cb_table;
 159:		int err = -EINVAL;
 160:	
 161:		if (!is_nl_msg_valid(index, op))
 162:			return -EINVAL;
 163:	
 164:		down_read(&rdma_nl_types[index].sem);
 165:		cb_table = get_cb_table(skb, index, op);
 166:		if (!cb_table)
 167:			goto done;
 168:	
 169:		if ((cb_table[op].flags & RDMA_NL_ADMIN_PERM) &&
 170:		    !netlink_capable(skb, CAP_NET_ADMIN)) {
 171:			err = -EPERM;
 172:			goto done;
 173:		}
 174:	
 175:		/*
 176:		 * LS responses overload the 0x100 (NLM_F_ROOT) flag.  Don't
 177:		 * mistakenly call the .dump() function.
 178:		 */
 179:		if (index == RDMA_NL_LS) {
 180:			if (cb_table[op].doit)
 181:				err = cb_table[op].doit(skb, nlh, extack);
 182:			goto done;
 183:		}
 184:		/* FIXME: Convert IWCM to properly handle doit callbacks */
 185:		if ((nlh->nlmsg_flags & NLM_F_DUMP) || index == RDMA_NL_IWCM) {
 186:			struct netlink_dump_control c = {
 187:				.dump = cb_table[op].dump,
 188:			};
 189:			if (c.dump)
 190:				err = netlink_dump_start(skb->sk, skb, nlh, &c);
 191:			goto done;
 192:		}
 193:	
 194:		if (cb_table[op].doit)
 195:			err = cb_table[op].doit(skb, nlh, extack);
 196:	done:
 197:		up_read(&rdma_nl_types[index].sem);
 198:		return err;
 199:	}
 SourceFile:drivers/infiniband/core/netlink.c]

20/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 14991
							output: 41
							thoughts: 29
						

Thoughts:
Okay, here's my interpretation of those thoughts, tailored for an expert audience, and presented as my own mental process:

**Network Capability Validation**

Alright, so the system is telling me this particular operation demands `netlink_capable(skb, CAP_NET_ADMIN)`. That's the gatekeeper, right? It's the check to see if the socket buffer (`skb`) possesses the `CAP_NET_ADMIN` capability. I immediately want to dig into that `netlink_capable` function. Let's make sure that check is actually implemented correctly. I need to be certain we're not inadvertently bypassing it, which could lead to a security hole, or worse, incorrect permissions. The specifics of the `netlink_capable` implementation are key here. I'll need to remember the kernel version and its corresponding source code.



21/2 2026/05/21 21:13 tool codesearch-definition-source
0m Args:
map[ContextFile:include/linux/netlink.h IncludeLines:true Name:netlink_capable]

Results:
map[SourceCode: 873:	/**
 874:	 * netlink_capable - Netlink global message capability test
 875:	 * @skb: socket buffer holding a netlink command from userspace
 876:	 * @cap: The capability to use
 877:	 *
 878:	 * Test to see if the opener of the socket we received the message
 879:	 * from had when the netlink socket was created and the sender of the
 880:	 * message has the capability @cap in all user namespaces.
 881:	 */
 882:	bool netlink_capable(const struct sk_buff *skb, int cap)
 883:	{
 884:		return netlink_ns_capable(skb, &init_user_ns, cap);
 885:	}
 SourceFile:net/netlink/af_netlink.c]

22/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 15485
							output: 49
							thoughts: 650
						

Thoughts:
**Analyzing the Infiniband Device Release and Potential Refcount Leak**

Okay, let's break this down. First, `netlink_capable` relies on `netlink_ns_capable` and ultimately requires `CAP_NET_ADMIN` in the `init_user_ns`. This means, as expected, it's off-limits to unprivileged processes and user namespaces. My focus now is understanding how `ib_device_release` is triggered, since that seems to be the critical point. It's the release function for an `ib_device` kobject, called when the last reference drops.

The logs indicate that `syz1`, the infiniband device in question, is created by either the `smbdirect` or `smc` drivers – and it appears related to `syz_tun`, which I recognize as a syzkaller pseudo-device, so it could well be a custom setup. The log output shows `syz1` getting added, port information, and RDS/IB integration. Crucially, the log mentions `nldev_dellink` being called, which hints at a network link deletion operation. If a user creates this device (or, somehow, has a hand in it), could they also cause its deletion? I need to think about that. Network interface deletion or USB device unplugging could also trigger this release.

My main concern is that refcount leak warning: "GID entry ref leak for dev syz1 index 2 ref=1". This screams vulnerability. It means the reference count is stuck at 1 when it should be zero. One reference left – who is holding it? That's what I must understand. The bug report is talking about a leak on the GID entry, so now I need to trace the allocation and referencing of the `ib_gid_table_entry` to understand this leak.



23/2 2026/05/21 21:13 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeSnippetLines:0 Name:ib_gid_table_entry]

Results:
map[References:[map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:add_modify_gid SourceFile:drivers/infiniband/core/cache.c SourceLine:428] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:add_roce_gid SourceFile:drivers/infiniband/core/cache.c SourceLine:350] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:alloc_gid_entry SourceFile:drivers/infiniband/core/cache.c SourceLine:296] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:del_gid SourceFile:drivers/infiniband/core/cache.c SourceLine:385] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:find_gid SourceFile:drivers/infiniband/core/cache.c SourceLine:474] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:free_gid_entry SourceFile:drivers/infiniband/core/cache.c SourceLine:266] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:free_gid_entry SourceFile:drivers/infiniband/core/cache.c SourceLine:267] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:free_gid_entry SourceFile:drivers/infiniband/core/cache.c SourceLine:267] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:free_gid_entry SourceFile:drivers/infiniband/core/cache.c SourceLine:267] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:free_gid_entry_locked SourceFile:drivers/infiniband/core/cache.c SourceLine:237] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:free_gid_work SourceFile:drivers/infiniband/core/cache.c SourceLine:282] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:free_gid_work SourceFile:drivers/infiniband/core/cache.c SourceLine:283] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:free_gid_work SourceFile:drivers/infiniband/core/cache.c SourceLine:283] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:free_gid_work SourceFile:drivers/infiniband/core/cache.c SourceLine:283] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:get_gid_entry SourceFile:drivers/infiniband/core/cache.c SourceLine:335] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:is_gid_entry_free SourceFile:drivers/infiniband/core/cache.c SourceLine:205] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:is_gid_entry_valid SourceFile:drivers/infiniband/core/cache.c SourceLine:210] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:put_gid_entry SourceFile:drivers/infiniband/core/cache.c SourceLine:340] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:put_gid_entry_locked SourceFile:drivers/infiniband/core/cache.c SourceLine:345] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_find_gid_by_filter SourceFile:drivers/infiniband/core/cache.c SourceLine:753] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_hold_gid_attr SourceFile:drivers/infiniband/core/cache.c SourceLine:1300] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_hold_gid_attr SourceFile:drivers/infiniband/core/cache.c SourceLine:1301] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_hold_gid_attr SourceFile:drivers/infiniband/core/cache.c SourceLine:1301] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_hold_gid_attr SourceFile:drivers/infiniband/core/cache.c SourceLine:1301] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_put_gid_attr SourceFile:drivers/infiniband/core/cache.c SourceLine:1281] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_put_gid_attr SourceFile:drivers/infiniband/core/cache.c SourceLine:1282] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_put_gid_attr SourceFile:drivers/infiniband/core/cache.c SourceLine:1282] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_put_gid_attr SourceFile:drivers/infiniband/core/cache.c SourceLine:1282] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_read_gid_attr_ndev_rcu SourceFile:drivers/infiniband/core/cache.c SourceLine:1321] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_read_gid_attr_ndev_rcu SourceFile:drivers/infiniband/core/cache.c SourceLine:1322] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_read_gid_attr_ndev_rcu SourceFile:drivers/infiniband/core/cache.c SourceLine:1322] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_read_gid_attr_ndev_rcu SourceFile:drivers/infiniband/core/cache.c SourceLine:1322] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_read_gid_hw_context SourceFile:drivers/infiniband/core/cache.c SourceLine:1000] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_read_gid_hw_context SourceFile:drivers/infiniband/core/cache.c SourceLine:1000] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:rdma_read_gid_hw_context SourceFile:drivers/infiniband/core/cache.c SourceLine:1000] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:schedule_free_gid SourceFile:drivers/infiniband/core/cache.c SourceLine:217] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:schedule_free_gid SourceFile:drivers/infiniband/core/cache.c SourceLine:218] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:schedule_free_gid SourceFile:drivers/infiniband/core/cache.c SourceLine:218] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:schedule_free_gid SourceFile:drivers/infiniband/core/cache.c SourceLine:218] map[ReferenceKind:uses ReferencingEntityKind:function ReferencingEntityName:store_gid_entry SourceFile:drivers/infiniband/core/cache.c SourceLine:321]] TruncatedOutput:false]

24/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 18858
							output: 49
							thoughts: 25
						

Thoughts:
Here's my attempt at summarizing the thought process, tailored for an expert audience:

**Examining RDMA GID Attribute Handling**

Alright, let's dive into this. My initial instinct is to take a look at the interplay between `rdma_hold_gid_attr` and `rdma_put_gid_attr`. Given my experience with RDMA and its nuances, I immediately want to understand how these functions are managing the GID attributes. I need to refresh my understanding of the reference counting or lifecycle management involved here. Are we dealing with allocation/deallocation, or is it more a matter of tracking ownership and synchronization? A thorough inspection of these two specific functions will likely reveal the core logic. I'm thinking about potential race conditions, memory leaks, or incorrect attribute state transitions. The devil, as always, is in the details. Time to start digging into the code.



25/2 2026/05/21 21:13 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:rdma_hold_gid_attr]

Results:
map[SourceCode:1288:	/**
1289:	 * rdma_hold_gid_attr - Get reference to existing GID attribute
1290:	 *
1291:	 * @attr:		Pointer to the GID attribute whose reference
1292:	 *			needs to be taken.
1293:	 *
1294:	 * Increase the reference count to a GID attribute to keep it from being
1295:	 * freed. Callers are required to already be holding a reference to attribute.
1296:	 *
1297:	 */
1298:	void rdma_hold_gid_attr(const struct ib_gid_attr *attr)
1299:	{
1300:		struct ib_gid_table_entry *entry =
1301:			container_of(attr, struct ib_gid_table_entry, attr);
1302:	
1303:		get_gid_entry(entry);
1304:	}
 SourceFile:drivers/infiniband/core/cache.c]

26/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 19403
							output: 50
							thoughts: 37
						

Thoughts:
Okay, here's my take on those thoughts, tailored for an expert audience:

**Analyzing `rdma_hold_gid_attr` Callsites**

Alright, so `rdma_hold_gid_attr` is clearly managing the lifecycle of a GID entry, specifically by taking a reference to it. The immediate question, as always in kernel code, is *who* is using this reference, and *why*? I need to understand the control flow here. I'm going to track down every caller of `rdma_hold_gid_attr` to get a handle on the various contexts where this GID attribute is being managed. This is key to understanding the potential for race conditions, memory leaks, or general resource contention. What are the calling sequences? Are there corresponding `rdma_release_gid_attr` calls to ensure that the references are properly decremented? I need to see the bigger picture to assess the robustness of this GID handling.



27/2 2026/05/21 21:13 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeSnippetLines:0 Name:rdma_hold_gid_attr]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:init_ah_attr_grh_fields SourceFile:drivers/infiniband/core/sa_query.c SourceLine:1268] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_copy_ah_attr SourceFile:drivers/infiniband/core/verbs.c SourceLine:422] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_replace_ah_attr SourceFile:drivers/infiniband/core/verbs.c SourceLine:442] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_update_sgid_attr SourceFile:drivers/infiniband/core/verbs.c SourceLine:552]] TruncatedOutput:false]

28/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 19947
							output: 50
							thoughts: 73
						

Thoughts:
Here's my take on those thoughts:

**Analyzing RDMA GID Attribute Handling**

Okay, so I'm digging into how these GID attributes are managed within the RDMA stack. It seems that `rdma_hold_gid_attr` is a key function, as I see it's called by a pretty significant group of functions: `rdma_copy_ah_attr`, `rdma_replace_ah_attr`, `rdma_update_sgid_attr`, and also by `init_ah_attr_grh_fields`. Given this, I really should understand its role deeply. My next logical step is to delve into what `rdma_put_gid_attr` does.



29/2 2026/05/21 21:13 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeSnippetLines:0 Name:rdma_put_gid_attr]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:_rdma_create_ah SourceFile:drivers/infiniband/core/verbs.c SourceLine:594] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:_show_port_gid_attr SourceFile:drivers/infiniband/core/sysfs.c SourceLine:425] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cma_release_dev SourceFile:drivers/infiniband/core/cma.c SourceLine:604] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cma_validate_port SourceFile:drivers/infiniband/core/cma.c SourceLine:723] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:get_cm_port_from_path SourceFile:drivers/infiniband/core/cm.c SourceLine:521] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:ib_destroy_qp_user SourceFile:drivers/infiniband/core/verbs.c SourceLine:2175] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:ib_destroy_qp_user SourceFile:drivers/infiniband/core/verbs.c SourceLine:2177] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:ib_uverbs_handler_UVERBS_METHOD_QUERY_GID_ENTRY SourceFile:drivers/infiniband/core/uverbs_std_types_device.c SourceLine:463] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_destroy_ah_attr SourceFile:drivers/infiniband/core/verbs.c SourceLine:969] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_destroy_ah_user SourceFile:drivers/infiniband/core/verbs.c SourceLine:1041] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_update_sgid_attr SourceFile:drivers/infiniband/core/verbs.c SourceLine:550] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rxe_chk_dgid SourceFile:drivers/infiniband/sw/rxe/rxe_recv.c SourceLine:311] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rxe_init_packet SourceFile:drivers/infiniband/sw/rxe/rxe_net.c SourceLine:585] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:show_port_gid SourceFile:drivers/infiniband/core/sysfs.c SourceLine:454] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:smc_ib_check_link_gid SourceFile:net/smc/smc_ib.c SourceLine:327] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:smc_ib_determine_gid SourceFile:net/smc/smc_ib.c SourceLine:296] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:smc_ib_determine_gid SourceFile:net/smc/smc_ib.c SourceLine:301] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:smc_ib_fill_mac SourceFile:net/smc/smc_ib.c SourceLine:165]] TruncatedOutput:false]

30/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 21292
							output: 48
							thoughts: 115
						

Thoughts:
**SMC GID Determination: Digging into the Connection**

Okay, so I'm seeing a pattern here. I've noticed that `smc_ib_determine_gid`, `smc_ib_check_link_gid`, and `smc_ib_fill_mac` all make calls to `rdma_put_gid_attr`. This is interesting. And then I glance at the syzkaller log, and I see:

```
smc: adding ib device syz1 with port count 1
smc:    ib device syz1 port 1 has no pnetid
```

Bingo. SMC is clearly in the picture, and the lack of a pnetid on the IB device port is a critical piece of information. Since I'm tracking GID determination, and the calls I noted involve it as well, I need to focus in on `smc_ib_determine_gid`. Let's see what's going on there.



31/2 2026/05/21 21:13 tool codesearch-definition-source
0m Args:
map[ContextFile:net/smc/smc_ib.c IncludeLines:true Name:smc_ib_determine_gid]

Results:
map[SourceCode: 273:	/* determine the gid for an ib-device port and vlan id */
 274:	int smc_ib_determine_gid(struct smc_ib_device *smcibdev, u8 ibport,
 275:				 unsigned short vlan_id, u8 gid[], u8 *sgid_index,
 276:				 struct smc_init_info_smcrv2 *smcrv2)
 277:	{
 278:		const struct ib_gid_attr *attr;
 279:		const struct net_device *ndev;
 280:		int i;
 281:	
 282:		for (i = 0; i < smcibdev->pattr[ibport - 1].gid_tbl_len; i++) {
 283:			attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, i);
 284:			if (IS_ERR(attr))
 285:				continue;
 286:	
 287:			rcu_read_lock();
 288:			ndev = rdma_read_gid_attr_ndev_rcu(attr);
 289:			if (!IS_ERR(ndev) &&
 290:			    ((!vlan_id && !is_vlan_dev(ndev)) ||
 291:			     (vlan_id && is_vlan_dev(ndev) &&
 292:			      vlan_dev_vlan_id(ndev) == vlan_id))) {
 293:				if (!smc_ib_determine_gid_rcu(ndev, attr, gid,
 294:							      sgid_index, smcrv2)) {
 295:					rcu_read_unlock();
 296:					rdma_put_gid_attr(attr);
 297:					return 0;
 298:				}
 299:			}
 300:			rcu_read_unlock();
 301:			rdma_put_gid_attr(attr);
 302:		}
 303:		return -ENODEV;
 304:	}
 SourceFile:net/smc/smc_ib.c]

32/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 22271
							output: 50
							thoughts: 142
						

Thoughts:
**Checking for GID Attribute Leaks**

Okay, let me think this through. `rdma_get_gid_attr` gets me a handle to the GID attribute, and `rdma_put_gid_attr` releases it. That's the basic pattern. I need to make sure there isn't a resource leak in `smc_ib_determine_gid`.

Right, if `smc_ib_determine_gid_rcu` returns 0, then `rdma_put_gid_attr(attr)` gets called and returns 0. If it returns anything else, we still call `rdma_put_gid_attr(attr)` before continuing with the loop. So, in either case, the attribute is released. I'm fairly confident there's no leak there.

Now, I should move on to check how `smc_ib_check_link_gid` works.



33/2 2026/05/21 21:13 tool codesearch-definition-source
0m Args:
map[ContextFile:net/smc/smc_ib.c IncludeLines:true Name:smc_ib_check_link_gid]

Results:
map[SourceCode: 306:	/* check if gid is still defined on smcibdev */
 307:	static bool smc_ib_check_link_gid(u8 gid[SMC_GID_SIZE], bool smcrv2,
 308:					  struct smc_ib_device *smcibdev, u8 ibport)
 309:	{
 310:		const struct ib_gid_attr *attr;
 311:		bool rc = false;
 312:		int i;
 313:	
 314:		for (i = 0; !rc && i < smcibdev->pattr[ibport - 1].gid_tbl_len; i++) {
 315:			attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, i);
 316:			if (IS_ERR(attr))
 317:				continue;
 318:	
 319:			rcu_read_lock();
 320:			if ((!smcrv2 && attr->gid_type == IB_GID_TYPE_ROCE) ||
 321:			    (smcrv2 && attr->gid_type == IB_GID_TYPE_ROCE_UDP_ENCAP &&
 322:			     !(ipv6_addr_type((const struct in6_addr *)&attr->gid)
 323:					     & IPV6_ADDR_LINKLOCAL)))
 324:				if (!memcmp(gid, &attr->gid, SMC_GID_SIZE))
 325:					rc = true;
 326:			rcu_read_unlock();
 327:			rdma_put_gid_attr(attr);
 328:		}
 329:		return rc;
 330:	}
 SourceFile:net/smc/smc_ib.c]

34/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 23154
							output: 48
							thoughts: 20
						

Thoughts:
Okay, let's see. No obvious problems detected here either. I need to be methodical. The last area I was investigating didn't reveal anything, so where next? Ah, yes. The `smc_ib_fill_mac` function. That seems like a logical next step to examine. Let's dig in there and see if the issue is hiding within those lines of code.



35/2 2026/05/21 21:13 tool codesearch-definition-source
0m Args:
map[ContextFile:net/smc/smc_ib.c IncludeLines:true Name:smc_ib_fill_mac]

Results:
map[SourceCode: 155:	static int smc_ib_fill_mac(struct smc_ib_device *smcibdev, u8 ibport)
 156:	{
 157:		const struct ib_gid_attr *attr;
 158:		int rc;
 159:	
 160:		attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, 0);
 161:		if (IS_ERR(attr))
 162:			return -ENODEV;
 163:	
 164:		rc = rdma_read_gid_l2_fields(attr, NULL, smcibdev->mac[ibport - 1]);
 165:		rdma_put_gid_attr(attr);
 166:		return rc;
 167:	}
 SourceFile:net/smc/smc_ib.c]

36/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 23558
							output: 48
							thoughts: 51
						

Thoughts:
Okay, here's my take on those thoughts, framed as my own:

**Investigating the Absence of a Leak**

Alright, still no sign of the leak. Time to dig deeper. I'm going to start by looking at the SMC files, particularly focusing on `net/smc/smc_pnet.c`, but I'll broaden the search to include other relevant SMC-related code. My gut tells me something is happening during the initialization or device addition phase. Ah, wait a minute, I remember now. `smc_ib_add_dev` gets called whenever an InfiniBand device is detected and added. That's a key point to investigate, as it's a critical entry point to how the system is initialised. I should start there!



37/2 2026/05/21 21:13 tool codesearch-definition-source
0m Args:
map[ContextFile:net/smc/smc_ib.c IncludeLines:true Name:smc_ib_add_dev]

Results:
map[SourceCode: 937:	/* callback function for ib_register_client() */
 938:	static int smc_ib_add_dev(struct ib_device *ibdev)
 939:	{
 940:		struct smc_ib_device *smcibdev;
 941:		u8 port_cnt;
 942:		int i;
 943:	
 944:		if (ibdev->node_type != RDMA_NODE_IB_CA)
 945:			return -EOPNOTSUPP;
 946:	
 947:		smcibdev = kzalloc_obj(*smcibdev);
 948:		if (!smcibdev)
 949:			return -ENOMEM;
 950:	
 951:		smcibdev->ibdev = ibdev;
 952:		INIT_WORK(&smcibdev->port_event_work, smc_ib_port_event_work);
 953:		atomic_set(&smcibdev->lnk_cnt, 0);
 954:		init_waitqueue_head(&smcibdev->lnks_deleted);
 955:		mutex_init(&smcibdev->mutex);
 956:		mutex_lock(&smc_ib_devices.mutex);
 957:		list_add_tail(&smcibdev->list, &smc_ib_devices.list);
 958:		mutex_unlock(&smc_ib_devices.mutex);
 959:		ib_set_client_data(ibdev, &smc_ib_client, smcibdev);
 960:		INIT_IB_EVENT_HANDLER(&smcibdev->event_handler, smcibdev->ibdev,
 961:				      smc_ib_global_event_handler);
 962:		ib_register_event_handler(&smcibdev->event_handler);
 963:	
 964:		/* trigger reading of the port attributes */
 965:		port_cnt = smcibdev->ibdev->phys_port_cnt;
 966:		pr_warn_ratelimited("smc: adding ib device %s with port count %d\n",
 967:				    smcibdev->ibdev->name, port_cnt);
 968:		for (i = 0;
 969:		     i < min_t(size_t, port_cnt, SMC_MAX_PORTS);
 970:		     i++) {
 971:			set_bit(i, &smcibdev->port_event_mask);
 972:			/* determine pnetids of the port */
 973:			if (smc_pnetid_by_dev_port(ibdev->dev.parent, i,
 974:						   smcibdev->pnetid[i]))
 975:				smc_pnetid_by_table_ib(smcibdev, i + 1);
 976:			smc_copy_netdev_ifindex(smcibdev, i);
 977:			if (smc_pnet_is_pnetid_set(smcibdev->pnetid[i]))
 978:				pr_warn_ratelimited("smc:    ib device %s port %d has pnetid %.16s%s\n",
 979:						    smcibdev->ibdev->name, i + 1,
 980:						    smcibdev->pnetid[i],
 981:						    smcibdev->pnetid_by_user[i] ?
 982:							" (user defined)" :
 983:							"");
 984:			else
 985:				pr_warn_ratelimited("smc:    ib device %s port %d has no pnetid\n",
 986:						    smcibdev->ibdev->name, i + 1);
 987:	
 988:		}
 989:		schedule_work(&smcibdev->port_event_work);
 990:		return 0;
 991:	}
 SourceFile:net/smc/smc_ib.c]

38/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 24935
							output: 50
							thoughts: 23
						

Thoughts:
Here's my attempt at summarizing the thought process, tailored for an expert audience:

**Investigating a Scheduled IB Port Event**

Okay, so `smc_ib_port_event_work` has been flagged as scheduled. That immediately flags a potential issue, or at least a situation requiring close examination. Given my experience, I know this routine is critical for handling InfiniBand port events, which can range from routine link state changes to more serious hardware errors. My initial thought is to dive into the context of *why* this work item was scheduled. What triggered it? The error queues? A link partner negotiation? Any recent configuration changes? I need to understand the preceding events to determine the nature of the event and its potential impact. I will need to look into any relevant logs, traces or performance metrics to see if there is any indication of an underlying problem. From here, I'll need to correlate the scheduling of `smc_ib_port_event_work` with any other concurrent activities within the InfiniBand stack. That would offer a more robust picture of the system state, the scope of what is affected, and what I should prioritize if this needs active troubleshooting.



39/2 2026/05/21 21:13 tool codesearch-definition-source
0m Args:
map[ContextFile:net/smc/smc_ib.c IncludeLines:true Name:smc_ib_port_event_work]

Results:
map[SourceCode: 380:	/* process context wrapper for might_sleep smc_ib_remember_port_attr */
 381:	static void smc_ib_port_event_work(struct work_struct *work)
 382:	{
 383:		struct smc_ib_device *smcibdev = container_of(
 384:			work, struct smc_ib_device, port_event_work);
 385:		u8 port_idx;
 386:	
 387:		for_each_set_bit(port_idx, &smcibdev->port_event_mask, SMC_MAX_PORTS) {
 388:			smc_ib_remember_port_attr(smcibdev, port_idx + 1);
 389:			clear_bit(port_idx, &smcibdev->port_event_mask);
 390:			if (!smc_ib_port_active(smcibdev, port_idx + 1)) {
 391:				set_bit(port_idx, smcibdev->ports_going_away);
 392:				smcr_port_err(smcibdev, port_idx + 1);
 393:			} else {
 394:				clear_bit(port_idx, smcibdev->ports_going_away);
 395:				smcr_port_add(smcibdev, port_idx + 1);
 396:				smc_ib_gid_check(smcibdev, port_idx + 1);
 397:			}
 398:		}
 399:	}
 SourceFile:net/smc/smc_ib.c]

40/2 2026/05/21 21:13 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 25708
							output: 50
							thoughts: 16
						

Thoughts:
Okay, here's my interpretation of that thought process, assuming I'm an expert in this field, and writing in the first person:

**Checking `smc_ib_remember_port_attr`**

Right, let's dive into this. The mental checklist starts with `smc_ib_remember_port_attr`. That specific function or module is critical, as it likely handles the persistence of InfiniBand port attributes. Given the name, I'm immediately thinking about how it deals with aspects such as MTU, LID, state, perhaps even some more advanced features tied to the Subnet Manager configuration. I need to refresh my memory on the interactions here, especially in the context of persistent configurations. I want to quickly evaluate what it does, how, and why, and what specific attributes it manages. My primary concern here is how it affects the larger system architecture. Does it interact with a database, a file, or is it transient? Is this where I should look for persistent config related issues?



41/2 2026/05/21 21:14 tool codesearch-definition-source
0m Args:
map[ContextFile:net/smc/smc_ib.c IncludeLines:true Name:smc_ib_remember_port_attr]

Results:
map[SourceCode: 358:	static int smc_ib_remember_port_attr(struct smc_ib_device *smcibdev, u8 ibport)
 359:	{
 360:		int rc;
 361:	
 362:		memset(&smcibdev->pattr[ibport - 1], 0,
 363:		       sizeof(smcibdev->pattr[ibport - 1]));
 364:		rc = ib_query_port(smcibdev->ibdev, ibport,
 365:				   &smcibdev->pattr[ibport - 1]);
 366:		if (rc)
 367:			goto out;
 368:		/* the SMC protocol requires specification of the RoCE MAC address */
 369:		rc = smc_ib_fill_mac(smcibdev, ibport);
 370:		if (rc)
 371:			goto out;
 372:		if (!smc_ib_is_valid_local_systemid() &&
 373:		    smc_ib_port_active(smcibdev, ibport))
 374:			/* create unique system identifier */
 375:			smc_ib_define_local_systemid(smcibdev, ibport);
 376:	out:
 377:		return rc;
 378:	}
 SourceFile:net/smc/smc_ib.c]

42/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 26386
							output: 48
							thoughts: 14
						

Thoughts:
Okay, here's my attempt at summarizing that thought process, keeping in mind I'm speaking to an expert:

**Investigating `smc_ib_gid_check`**

Alright, let's dive into this. The mental checklist starts with `smc_ib_gid_check`. I need to figure out what's going on with this function, what it's doing, and potentially why we're focusing on it. My immediate thoughts are: Is this a critical path issue? A performance bottleneck? Or maybe just an anomaly that surfaced during testing? Knowing the context is key, of course, but the starting point is always understanding the function itself. I need to refresh my understanding of its purpose within the broader InfiniBand (or whatever system this applies to) context. What specific GID-related issues could this be addressing? Are we seeing GID mismatches, configuration errors, or perhaps some security implications related to GID validation? Time to dig into the documentation, the code itself, and maybe any recent commit logs to get a clearer picture. I'll need to look for any obvious red flags: potential race conditions, inefficient algorithms, or interactions with other modules that could be contributing to the problem. It's a journey into the weeds, but someone needs to do it, and it's on me.



43/2 2026/05/21 21:14 tool codesearch-definition-source
0m Args:
map[ContextFile:net/smc/smc_ib.c IncludeLines:true Name:smc_ib_gid_check]

Results:
map[SourceCode: 332:	/* check all links if the gid is still defined on smcibdev */
 333:	static void smc_ib_gid_check(struct smc_ib_device *smcibdev, u8 ibport)
 334:	{
 335:		struct smc_link_group *lgr;
 336:		int i;
 337:	
 338:		spin_lock_bh(&smc_lgr_list.lock);
 339:		list_for_each_entry(lgr, &smc_lgr_list.list, list) {
 340:			if (strncmp(smcibdev->pnetid[ibport - 1], lgr->pnet_id,
 341:				    SMC_MAX_PNETID_LEN))
 342:				continue; /* lgr is not affected */
 343:			if (list_empty(&lgr->list))
 344:				continue;
 345:			for (i = 0; i < SMC_LINKS_PER_LGR_MAX; i++) {
 346:				if (lgr->lnk[i].state == SMC_LNK_UNUSED ||
 347:				    lgr->lnk[i].smcibdev != smcibdev)
 348:					continue;
 349:				if (!smc_ib_check_link_gid(lgr->lnk[i].gid,
 350:							   lgr->smc_version == SMC_V2,
 351:							   smcibdev, ibport))
 352:					smcr_port_err(smcibdev, ibport);
 353:			}
 354:		}
 355:		spin_unlock_bh(&smc_lgr_list.lock);
 356:	}
 SourceFile:net/smc/smc_ib.c]

44/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 27239
							output: 50
							thoughts: 113
						

Thoughts:
**Investigating the SMC-IB Port Event Workflow**

Okay, let's break this down. My initial observation is that `smc_ib_port_event_work` triggers a sequence of calls: it hits `smc_ib_remember_port_attr`, which then leads to `smc_ib_fill_mac`. That's the core chain of events for this port event processing. Now, inside `smc_ib_fill_mac`, I see a critical interaction with the RDMA stack involving `rdma_get_gid_attr` and `rdma_put_gid_attr`. My main concern here centers on the use of `rdma_get_gid_attr`.

The fact that `rdma_get_gid_attr` is involved means that this function is grabbing a reference to the GID attributes. This raises a red flag in my mind. Any time you're dealing with GID attributes in an RDMA context, you have to be extra careful about how these attributes are managed. The potential for resource leaks or stale data is elevated. So, I need to know where else is `rdma_get_gid_attr` being used. If the same GID attribute is being managed by multiple concurrent processes, that may lead to performance issue or, worse, race conditions and integrity issues.



45/2 2026/05/21 21:14 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeSnippetLines:0 Name:rdma_get_gid_attr]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:_show_port_gid_attr SourceFile:drivers/infiniband/core/sysfs.c SourceLine:419] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cma_validate_port SourceFile:drivers/infiniband/core/cma.c SourceLine:700] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:ib_init_ah_attr_from_wc SourceFile:drivers/infiniband/core/verbs.c SourceLine:915] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:ib_uverbs_handler_UVERBS_METHOD_QUERY_GID_ENTRY SourceFile:drivers/infiniband/core/uverbs_std_types_device.c SourceLine:437] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_fill_sgid_attr SourceFile:drivers/infiniband/core/verbs.c SourceLine:518] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rxe_init_packet SourceFile:drivers/infiniband/sw/rxe/rxe_net.c SourceLine:540] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:show_port_gid SourceFile:drivers/infiniband/core/sysfs.c SourceLine:437] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:smc_ib_check_link_gid SourceFile:net/smc/smc_ib.c SourceLine:315] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:smc_ib_determine_gid SourceFile:net/smc/smc_ib.c SourceLine:283] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:smc_ib_fill_mac SourceFile:net/smc/smc_ib.c SourceLine:160]] TruncatedOutput:false]

46/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 28296
							output: 50
							thoughts: 15
						

Thoughts:
Okay, here's my summary, presented as a stream of thought:

**Checking `rdma_fill_sgid_attr`**

Right, let's dive in. I need to make sure I understand the current state of things, especially within the context of RDMA. My immediate thought is to zero in on `rdma_fill_sgid_attr`. This function... what exactly is its role again? I'm familiar with the general RDMA ecosystem, but this specific function needs a quick refresher. Is it responsible for filling in the Source Global Identifier (SGID) attributes? I need to be precise here; minor mistakes can have cascading effects in RDMA's performance characteristics. I need to understand its logic, any potential edge cases it handles, and how it interacts with other related functions. I'll need to go through the source code, maybe even walk through it with a debugger to trace the execution flow, especially related to the device and transport layers. I need to figure out: Does it correctly handle different types of RDMA devices? Does it appropriately consider the current network configuration? Are there any known issues associated with specific firmware versions? I must be thorough.



47/2 2026/05/21 21:14 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:rdma_fill_sgid_attr]

Results:
map[SourceCode: 492:	/*
 493:	 * If the ah requires a GRH then ensure that sgid_attr pointer is filled in.
 494:	 * On success the caller is responsible to call rdma_unfill_sgid_attr().
 495:	 */
 496:	static int rdma_fill_sgid_attr(struct ib_device *device,
 497:				       struct rdma_ah_attr *ah_attr,
 498:				       const struct ib_gid_attr **old_sgid_attr)
 499:	{
 500:		const struct ib_gid_attr *sgid_attr;
 501:		struct ib_global_route *grh;
 502:		int ret;
 503:	
 504:		*old_sgid_attr = ah_attr->grh.sgid_attr;
 505:	
 506:		ret = rdma_check_ah_attr(device, ah_attr);
 507:		if (ret)
 508:			return ret;
 509:	
 510:		if (!(ah_attr->ah_flags & IB_AH_GRH))
 511:			return 0;
 512:	
 513:		grh = rdma_ah_retrieve_grh(ah_attr);
 514:		if (grh->sgid_attr)
 515:			return 0;
 516:	
 517:		sgid_attr =
 518:			rdma_get_gid_attr(device, ah_attr->port_num, grh->sgid_index);
 519:		if (IS_ERR(sgid_attr))
 520:			return PTR_ERR(sgid_attr);
 521:	
 522:		/* Move ownerhip of the kref into the ah_attr */
 523:		grh->sgid_attr = sgid_attr;
 524:		return 0;
 525:	}
 SourceFile:drivers/infiniband/core/verbs.c]

48/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 29178
							output: 51
							thoughts: 39
						

Thoughts:
Okay, here's my take on those thoughts, framed as an expert's internal monologue:

**Investigating `rdma_fill_sgid_attr` Ownership**

Alright, let's break this down. The code's making a call to `rdma_fill_sgid_attr`, which is setting up the SGID attributes for an Address Handle. The critical point is that it's *moving* ownership of the `kref` into the `ah_attr`. That's a classic memory management pattern, but it always demands close scrutiny to avoid leaks or double frees. So, I need to understand *who* is responsible for calling `rdma_fill_sgid_attr`. That's the key question. Knowing the caller tells me the overall flow, what's expected to happen with the `ah_attr` after the call, and most importantly, how the `kref` lifecycle is managed. I need to trace back from that function call to map the code execution and understand the overall process. This is something I will need to look into and analyse, to determine how safe this memory move is. Let's see if the code comments offer some insight.



49/2 2026/05/21 21:14 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeSnippetLines:0 Name:rdma_fill_sgid_attr]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:_ib_modify_qp SourceFile:drivers/infiniband/core/verbs.c SourceLine:1835] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:_ib_modify_qp SourceFile:drivers/infiniband/core/verbs.c SourceLine:1873] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_create_ah SourceFile:drivers/infiniband/core/verbs.c SourceLine:622] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_create_user_ah SourceFile:drivers/infiniband/core/verbs.c SourceLine:660] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_modify_ah SourceFile:drivers/infiniband/core/verbs.c SourceLine:1001]] TruncatedOutput:false]

50/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 29819
							output: 47
							thoughts: 12
						

Thoughts:
Okay, here's my take on those thoughts, tailored for an expert audience, and delivered as a first-person summary:

**Digging into the `_ib_modify_qp` Function**

Alright, time to dive into this. The initial impulse is to zero in on `_ib_modify_qp`. Given my experience, I'm immediately thinking about what layer this is operating at. Is this the low-level, hardware-interaction piece or a more abstracted function? My gut tells me this is likely the core function responsible for manipulating the QP state, which is crucial for managing the flow of RDMA operations. This could be where the state transitions (RTS, RTS->RTR, etc.) are handled. Understanding how this function works is paramount because a single misstep here could cause major problems: deadlocks, data corruption, or connection failures. So, I need to look into this function carefully and think about the critical sections or any potential race conditions. Let's get to work!



51/2 2026/05/21 21:14 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:_ib_modify_qp]

Results:
map[SourceCode:1822:	/*
1823:	 * IB core internal function to perform QP attributes modification.
1824:	 */
1825:	static int _ib_modify_qp(struct ib_qp *qp, struct ib_qp_attr *attr,
1826:				 int attr_mask, struct ib_udata *udata)
1827:	{
1828:		u32 port = attr_mask & IB_QP_PORT ? attr->port_num : qp->port;
1829:		const struct ib_gid_attr *old_sgid_attr_av;
1830:		const struct ib_gid_attr *old_sgid_attr_alt_av;
1831:		int ret;
1832:	
1833:		attr->xmit_slave = NULL;
1834:		if (attr_mask & IB_QP_AV) {
1835:			ret = rdma_fill_sgid_attr(qp->device, &attr->ah_attr,
1836:						  &old_sgid_attr_av);
1837:			if (ret)
1838:				return ret;
1839:	
1840:			if (attr->ah_attr.type == RDMA_AH_ATTR_TYPE_ROCE &&
1841:			    is_qp_type_connected(qp)) {
1842:				struct net_device *slave;
1843:	
1844:				/*
1845:				 * If the user provided the qp_attr then we have to
1846:				 * resolve it. Kerne users have to provide already
1847:				 * resolved rdma_ah_attr's.
1848:				 */
1849:				if (udata) {
1850:					ret = ib_resolve_eth_dmac(qp->device,
1851:								  &attr->ah_attr);
1852:					if (ret)
1853:						goto out_av;
1854:				}
1855:				slave = rdma_lag_get_ah_roce_slave(qp->device,
1856:								   &attr->ah_attr,
1857:								   GFP_KERNEL);
1858:				if (IS_ERR(slave)) {
1859:					ret = PTR_ERR(slave);
1860:					goto out_av;
1861:				}
1862:				attr->xmit_slave = slave;
1863:			}
1864:		}
1865:		if (attr_mask & IB_QP_ALT_PATH) {
1866:			/*
1867:			 * FIXME: This does not track the migration state, so if the
1868:			 * user loads a new alternate path after the HW has migrated
1869:			 * from primary->alternate we will keep the wrong
1870:			 * references. This is OK for IB because the reference
1871:			 * counting does not serve any functional purpose.
1872:			 */
1873:			ret = rdma_fill_sgid_attr(qp->device, &attr->alt_ah_attr,
1874:						  &old_sgid_attr_alt_av);
1875:			if (ret)
1876:				goto out_av;
1877:	
1878:			/*
1879:			 * Today the core code can only handle alternate paths and APM
1880:			 * for IB. Ban them in roce mode.
1881:			 */
1882:			if (!(rdma_protocol_ib(qp->device,
1883:					       attr->alt_ah_attr.port_num) &&
1884:			      rdma_protocol_ib(qp->device, port))) {
1885:				ret = -EINVAL;
1886:				goto out;
1887:			}
1888:		}
1889:	
1890:		if (rdma_ib_or_roce(qp->device, port)) {
1891:			if (attr_mask & IB_QP_RQ_PSN && attr->rq_psn & ~0xffffff) {
1892:				dev_warn(&qp->device->dev,
1893:					 "%s rq_psn overflow, masking to 24 bits\n",
1894:					 __func__);
1895:				attr->rq_psn &= 0xffffff;
1896:			}
1897:	
1898:			if (attr_mask & IB_QP_SQ_PSN && attr->sq_psn & ~0xffffff) {
1899:				dev_warn(&qp->device->dev,
1900:					 " %s sq_psn overflow, masking to 24 bits\n",
1901:					 __func__);
1902:				attr->sq_psn &= 0xffffff;
1903:			}
1904:		}
1905:	
1906:		/*
1907:		 * Bind this qp to a counter automatically based on the rdma counter
1908:		 * rules. This only set in RST2INIT with port specified
1909:		 */
1910:		if (!qp->counter && (attr_mask & IB_QP_PORT) &&
1911:		    ((attr_mask & IB_QP_STATE) && attr->qp_state == IB_QPS_INIT))
1912:			rdma_counter_bind_qp_auto(qp, attr->port_num);
1913:	
1914:		ret = ib_security_modify_qp(qp, attr, attr_mask, udata);
1915:		if (ret)
1916:			goto out;
1917:	
1918:		if (attr_mask & IB_QP_PORT)
1919:			qp->port = attr->port_num;
1920:		if (attr_mask & IB_QP_AV)
1921:			qp->av_sgid_attr =
1922:				rdma_update_sgid_attr(&attr->ah_attr, qp->av_sgid_attr);
1923:		if (attr_mask & IB_QP_ALT_PATH)
1924:			qp->alt_path_sgid_attr = rdma_update_sgid_attr(
1925:				&attr->alt_ah_attr, qp->alt_path_sgid_attr);
1926:	
1927:	out:
1928:		if (attr_mask & IB_QP_ALT_PATH)
1929:			rdma_unfill_sgid_attr(&attr->alt_ah_attr, old_sgid_attr_alt_av);
1930:	out_av:
1931:		if (attr_mask & IB_QP_AV) {
1932:			rdma_lag_put_ah_roce_slave(attr->xmit_slave);
1933:			rdma_unfill_sgid_attr(&attr->ah_attr, old_sgid_attr_av);
1934:		}
1935:		return ret;
1936:	}
 SourceFile:drivers/infiniband/core/verbs.c]

52/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 32015
							output: 50
							thoughts: 43
						

Thoughts:
Okay, here's my interpretation of that thought process, from an expert's perspective:

**Diving into SGID Attribute Updates**

Alright, hang on a second. I'm looking at this code, and I see `rdma_update_sgid_attr` getting called. My immediate thought is, "Wait, that's being used to update `qp->av_sgid_attr`?" That's interesting. I know how significant the Source Global ID (SGID) attribute is for RDMA communication, especially in the context of an Address Vector (AV). It looks like this function is where the QP's SGID attributes are updated, and that is going to be part of the QP's address vector, so this is important to understand. Time to crack open the definition of `rdma_update_sgid_attr`. I need to figure out exactly what it's doing with that specific field.



53/2 2026/05/21 21:14 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:rdma_update_sgid_attr]

Results:
map[SourceCode: 545:	static const struct ib_gid_attr *
 546:	rdma_update_sgid_attr(struct rdma_ah_attr *ah_attr,
 547:			      const struct ib_gid_attr *old_attr)
 548:	{
 549:		if (old_attr)
 550:			rdma_put_gid_attr(old_attr);
 551:		if (ah_attr->ah_flags & IB_AH_GRH) {
 552:			rdma_hold_gid_attr(ah_attr->grh.sgid_attr);
 553:			return ah_attr->grh.sgid_attr;
 554:		}
 555:		return NULL;
 556:	}
 SourceFile:drivers/infiniband/core/verbs.c]

54/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 32545
							output: 50
							thoughts: 103
						

Thoughts:
Okay, here's my breakdown of this RDMA GID attribute issue, tailored for someone who knows their way around this stuff:

**RDMA GID Attribute Reference Leakage - Deep Dive**

Alright, so `rdma_update_sgid_attr` – that's the function that shuffles around GID attributes, storing the new one and swapping out the old. I see that the QP, the Queue Pair, actually *holds* a reference to this GID attribute. Right, that makes sense.

Now, here's the kicker: if the QP doesn't get properly destroyed, that reference is going to stick around. We've got a potential memory leak on our hands, a dangling pointer to this GID data. I need to make sure we're handling this correctly.

My next thought - and I need to check this – is if the RDMA device itself is removed, are *all* associated QPs guaranteed to be automatically destroyed in the process? If so, that might offer some mitigation.

I know `ib_unregister_device` is the function responsible for that. And there's also `ib_unregister_device_and_put`... I need to dive into the code for those two, and see what the device removal/destruction process does regarding QPs. Specifically, does device removal trigger cleanup of the QPs, thereby releasing the reference to the GID attributes? I'll probably start with the `ib_unregister_device` code. Gotta be sure those QPs are getting cleaned up properly.



55/2 2026/05/21 21:14 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/device.c IncludeLines:true Name:ib_unregister_device_and_put]

Results:
map[SourceCode:1574:	/**
1575:	 * ib_unregister_device_and_put - Unregister a device while holding a 'get'
1576:	 * @ib_dev: The device to unregister
1577:	 *
1578:	 * This is the same as ib_unregister_device(), except it includes an internal
1579:	 * ib_device_put() that should match a 'get' obtained by the caller.
1580:	 *
1581:	 * It is safe to call this routine concurrently from multiple threads while
1582:	 * holding the 'get'. When the function returns the device is fully
1583:	 * unregistered.
1584:	 *
1585:	 * Drivers using this flow MUST use the driver_unregister callback to clean up
1586:	 * their resources associated with the device and dealloc it.
1587:	 */
1588:	void ib_unregister_device_and_put(struct ib_device *ib_dev)
1589:	{
1590:		WARN_ON(!ib_dev->ops.dealloc_driver);
1591:		get_device(&ib_dev->dev);
1592:		ib_device_put(ib_dev);
1593:		__ib_unregister_device(ib_dev);
1594:		put_device(&ib_dev->dev);
1595:	}
 SourceFile:drivers/infiniband/core/device.c]

56/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 33420
							output: 47
							thoughts: 12
						

Thoughts:
Here's a summary of my thought process:

**Diving into Unregistration**

Okay, time to dissect `__ib_unregister_device`. I need to understand exactly how this function works, especially from a low-level perspective. I'm going to want to see how the InfiniBand device is actually removed from the system's management, the specific data structures that are updated, and any potential side effects or race conditions that might be involved. My focus will be on the core mechanisms - the nuts and bolts of device removal. I'm thinking about the implications for resource allocation and deallocation, memory management, and overall system stability. It's crucial to grasp the entirety of the function's responsibility to understand the intricacies of IB device lifecycle management. I'll need to correlate this to other device operations, to understand the flow and make sure no leaks or dangling references might be introduced. Let's dig in.



57/2 2026/05/21 21:14 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/device.c IncludeLines:true Name:__ib_unregister_device]

Results:
map[SourceCode:1502:	/* Callers must hold a get on the device. */
1503:	static void __ib_unregister_device(struct ib_device *ib_dev)
1504:	{
1505:		struct ib_device *sub, *tmp;
1506:	
1507:		mutex_lock(&ib_dev->subdev_lock);
1508:		list_for_each_entry_safe_reverse(sub, tmp,
1509:						 &ib_dev->subdev_list_head,
1510:						 subdev_list) {
1511:			list_del(&sub->subdev_list);
1512:			ib_dev->ops.del_sub_dev(sub);
1513:			ib_device_put(ib_dev);
1514:		}
1515:		mutex_unlock(&ib_dev->subdev_lock);
1516:	
1517:		/*
1518:		 * We have a registration lock so that all the calls to unregister are
1519:		 * fully fenced, once any unregister returns the device is truly
1520:		 * unregistered even if multiple callers are unregistering it at the
1521:		 * same time. This also interacts with the registration flow and
1522:		 * provides sane semantics if register and unregister are racing.
1523:		 */
1524:		mutex_lock(&ib_dev->unregistration_lock);
1525:		if (!refcount_read(&ib_dev->refcount))
1526:			goto out;
1527:	
1528:		disable_device(ib_dev);
1529:		rdma_nl_notify_event(ib_dev, 0, RDMA_UNREGISTER_EVENT);
1530:	
1531:		/* Expedite removing unregistered pointers from the hash table */
1532:		free_netdevs(ib_dev);
1533:	
1534:		ib_free_port_attrs(&ib_dev->coredev);
1535:		device_del(&ib_dev->dev);
1536:		ib_device_unregister_rdmacg(ib_dev);
1537:		ib_cache_cleanup_one(ib_dev);
1538:	
1539:		/*
1540:		 * Drivers using the new flow may not call ib_dealloc_device except
1541:		 * in error unwind prior to registration success.
1542:		 */
1543:		if (ib_dev->ops.dealloc_driver &&
1544:		    ib_dev->ops.dealloc_driver != prevent_dealloc_device) {
1545:			WARN_ON(kref_read(&ib_dev->dev.kobj.kref) <= 1);
1546:			ib_dealloc_device(ib_dev);
1547:		}
1548:	out:
1549:		mutex_unlock(&ib_dev->unregistration_lock);
1550:	}
 SourceFile:drivers/infiniband/core/device.c]

58/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 34501
							output: 48
							thoughts: 15
						

Thoughts:
Okay, let's see. Here's my take on those thoughts, tailored for an expert like myself:

**Concerning `ib_cache_cleanup_one`**

Hmm, `ib_cache_cleanup_one` is being invoked right here. That's interesting, as this likely means we're dealing with a specific cleanup routine related to InfiniBand caching, or at least a subsystem that interacts with it. Given the context, I'm immediately trying to assess *why* it's being called at *this* point in the code path. Is it happening predictably, based on a specific event? Or is this a more generic cleanup call as a potential optimization, or perhaps a defensive measure? I need to look closely to determine whether this call is triggered due to a particular state, such as an object going out of scope, a connection teardown, or resource exhaustion. I'm also thinking about the implications of the cleanup itself. Is this a low-overhead operation, or could it potentially block if there are contended resources involved? Understanding this will be key to evaluating performance characteristics and identifying any potential bottlenecks or race conditions. Knowing precisely which cache entry is being cleaned up is crucial here, as it may suggest underlying issues in the allocation or releasing mechanism, particularly in a multi-threaded system.



59/2 2026/05/21 21:14 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:ib_cache_cleanup_one]

Results:
map[SourceCode:1645:	void ib_cache_cleanup_one(struct ib_device *device)
1646:	{
1647:		/*
1648:		 * Clear the GID updates mark first to prevent event handlers from
1649:		 * accessing the device while it's being torn down.
1650:		 */
1651:		ib_device_disable_gid_updates(device);
1652:	
1653:		/* The cleanup function waits for all in-progress workqueue
1654:		 * elements and cleans up the GID cache. This function should be
1655:		 * called after the device was removed from the devices list and
1656:		 * all clients were removed, so the cache exists but is
1657:		 * non-functional and shouldn't be updated anymore.
1658:		 */
1659:		flush_workqueue(ib_wq);
1660:		gid_table_cleanup_one(device);
1661:	
1662:		/*
1663:		 * Flush the wq second time for any pending GID delete work.
1664:		 */
1665:		flush_workqueue(ib_wq);
1666:	}
 SourceFile:drivers/infiniband/core/cache.c]

60/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 35188
							output: 48
							thoughts: 16
						

Thoughts:
Okay, here's my attempt at summarizing the thought process, as if it were my own, assuming the user is an expert.

**My GID Table Cleanup Routine**

Alright, so I'm thinking about `gid_table_cleanup_one`. This function, as the name pretty explicitly states, is all about cleaning up the Group ID table. My mind immediately jumps to the specifics here: what kind of GID table? Is this a system-wide table? A per-process table? Are we talking about removing stale entries? Releasing allocated memory? Are we dealing with locking mechanisms to ensure data integrity during cleanup? It’s crucial to understand the context of this table and what specific cleanup operations are needed. I'd need to consider edge cases, too - What if a GID is currently in use? What happens if there's a race condition during the cleanup process? I need to think about that. I need to make sure I'm not introducing any vulnerabilities or performance bottlenecks with this routine. I'll need to remember to check for potential deadlocks or resource leaks. Ultimately, my goal is to maintain the integrity and efficiency of the system's GID management.



61/2 2026/05/21 21:14 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:gid_table_cleanup_one]

Results:
map[SourceCode: 911:	static void gid_table_cleanup_one(struct ib_device *ib_dev)
 912:	{
 913:		u32 p;
 914:	
 915:		rdma_for_each_port (ib_dev, p)
 916:			cleanup_gid_table_port(ib_dev, p,
 917:					       ib_dev->port_data[p].cache.gid);
 918:	}
 SourceFile:drivers/infiniband/core/cache.c]

62/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 35660
							output: 48
							thoughts: 17
						

Thoughts:
Okay, here's my interpretation of that:

**My Perspective on `cleanup_gid_table_port`**

Alright, so `cleanup_gid_table_port`... that's straightforward enough. When I see that, my immediate understanding is that we're dealing with the process of tidying up the GID table's port. Essentially, it's a specific function or process within a system, probably related to group IDs, that's designed to ensure the stability and integrity of the communication channel or resource allocation associated with it. I'd imagine that this could involve releasing allocated resources, closing connections, resetting state variables, or perhaps removing stale entries. It is likely called as a part of a shutdown or cleanup process. I see no need to delve further into it.



63/2 2026/05/21 21:14 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:cleanup_gid_table_port]

Results:
map[SourceCode: 816:	static void cleanup_gid_table_port(struct ib_device *ib_dev, u32 port,
 817:					   struct ib_gid_table *table)
 818:	{
 819:		int i;
 820:	
 821:		if (!table)
 822:			return;
 823:	
 824:		mutex_lock(&table->lock);
 825:		for (i = 0; i < table->sz; ++i) {
 826:			if (is_gid_entry_valid(table->data_vec[i]))
 827:				del_gid(ib_dev, port, table, i);
 828:		}
 829:		mutex_unlock(&table->lock);
 830:	}
 SourceFile:drivers/infiniband/core/cache.c]

64/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 36141
							output: 44
							thoughts: 10
						

Thoughts:
Okay, here's my interpretation of that thought process, tailored for an expert audience, and written in the first person:

**My Internal Code Review: GID Deletion**

Alright, so the task at hand is `del_gid`. My brain immediately registers this as a function or routine specifically designed to delete a Group Identifier, or GID. This means I'm looking at a piece of code that’s involved in managing user group membership, system permissions, or some aspect of access control. I need to understand the implications of this action completely.

What's the scope? Is this a full deletion of the GID from the system, effectively removing the group entirely? Or is it a more nuanced operation like removing a GID assignment from a user, or resetting the group's privileges? I'll need to dig deeper into the surrounding code to determine which scenario it is.

The security implications are paramount. Deleting a GID could result in orphaned files and directories, leading to potential data integrity issues or vulnerabilities. Are there any cascading effects? Does this function update related databases, configuration files, or other relevant system components? I need to verify how error handling is implemented. Are there sufficient checks for dependencies and referential integrity to prevent unexpected behavior and exploits?

I want to know that any cleanup routines will be executed. How are existing group members handled? Will they be re-assigned, or will they be left as members of a non-existent group? It’s important to understand the overall architecture; how this function interacts with the operating system and any supporting services. I need to make sure the process is safe, efficient, and well-documented.



65/2 2026/05/21 21:14 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:del_gid]

Results:
map[SourceCode: 372:	/**
 373:	 * del_gid - Delete GID table entry
 374:	 *
 375:	 * @ib_dev:	IB device whose GID entry to be deleted
 376:	 * @port:	Port number of the IB device
 377:	 * @table:	GID table of the IB device for a port
 378:	 * @ix:		GID entry index to delete
 379:	 *
 380:	 */
 381:	static void del_gid(struct ib_device *ib_dev, u32 port,
 382:			    struct ib_gid_table *table, int ix)
 383:	{
 384:		struct roce_gid_ndev_storage *ndev_storage;
 385:		struct ib_gid_table_entry *entry;
 386:	
 387:		lockdep_assert_held(&table->lock);
 388:	
 389:		dev_dbg(&ib_dev->dev, "%s port=%u index=%d gid %pI6\n", __func__, port,
 390:			ix, table->data_vec[ix]->attr.gid.raw);
 391:	
 392:		write_lock_irq(&table->rwlock);
 393:		entry = table->data_vec[ix];
 394:		entry->state = GID_TABLE_ENTRY_PENDING_DEL;
 395:		/*
 396:		 * For non RoCE protocol, GID entry slot is ready to use.
 397:		 */
 398:		if (!rdma_protocol_roce(ib_dev, port))
 399:			table->data_vec[ix] = NULL;
 400:		write_unlock_irq(&table->rwlock);
 401:	
 402:		if (rdma_cap_roce_gid_table(ib_dev, port))
 403:			ib_dev->ops.del_gid(&entry->attr, &entry->context);
 404:	
 405:		ndev_storage = entry->ndev_storage;
 406:		if (ndev_storage) {
 407:			entry->ndev_storage = NULL;
 408:			rcu_assign_pointer(entry->attr.ndev, NULL);
 409:			call_rcu(&ndev_storage->rcu_head, put_gid_ndev);
 410:		}
 411:	
 412:		put_gid_entry_locked(entry);
 413:	}
 SourceFile:drivers/infiniband/core/cache.c]

66/2 2026/05/21 21:14 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 37264
							output: 48
							thoughts: 510
						

Thoughts:
**Analyzing a GID Entry Refcount Leak**

Okay, so I'm looking at this `del_gid` function, and it calls `put_gid_entry_locked(entry)`. The key thing here is that `put_gid_entry_locked` *decreases* the reference count on a GID entry. If the refcount isn't zero after that, it means there's another part of the system still holding a reference to it. That's a classic leak scenario, and I need to figure out *who* is keeping this thing alive.

The syzkaller log provides some breadcrumbs. It's got these "attempt to access beyond end of device" errors on `loop0`, and then there's a bunch of I/O errors and, importantly, this: `"smc: removing ib device syz1"`. That's a strong hint! Then, *boom*, right after the device removal, we get this: `"GID entry ref leak for dev syz1 index 2 ref=1"`. Bingo. It looks like the SMC (Shared Memory Communications) code is the culprit.

Since it's an SMC, let's trace this back to the `smc_ib_remove_dev` call. That's the function that's likely responsible for releasing the GID entry, so the problem must be within there. I'll need to go back and examine the code around that removal to understand why the refcount isn't zeroed out when the device is removed. Time to dive into the `smc_ib_remove_dev` function and the surrounding code, and see if there's a missing `put_gid_entry_locked()` call somewhere, or a race condition, or something. This should be an interesting one to debug!



67/2 2026/05/21 21:15 tool codesearch-definition-source
0m Args:
map[ContextFile:net/smc/smc_ib.c IncludeLines:true Name:smc_ib_remove_dev]

Results:
map[SourceCode: 993:	/* callback function for ib_unregister_client() */
 994:	static void smc_ib_remove_dev(struct ib_device *ibdev, void *client_data)
 995:	{
 996:		struct smc_ib_device *smcibdev = client_data;
 997:	
 998:		mutex_lock(&smc_ib_devices.mutex);
 999:		list_del_init(&smcibdev->list); /* remove from smc_ib_devices */
1000:		mutex_unlock(&smc_ib_devices.mutex);
1001:		pr_warn_ratelimited("smc: removing ib device %s\n",
1002:				    smcibdev->ibdev->name);
1003:		smc_smcr_terminate_all(smcibdev);
1004:		smc_ib_cleanup_per_ibdev(smcibdev);
1005:		ib_unregister_event_handler(&smcibdev->event_handler);
1006:		cancel_work_sync(&smcibdev->port_event_work);
1007:		kfree(smcibdev);
1008:	}
 SourceFile:net/smc/smc_ib.c]

68/2 2026/05/21 21:15 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 38559
							output: 47
							thoughts: 344
						

Thoughts:
**Analyzing Potential GID Entry Reference Leak in SMC-IB Code**

Okay, let's break this down. I'm looking at `smc_ib_remove_dev` which calls `cancel_work_sync(&smcibdev->port_event_work)`. My immediate concern is, what if `smc_ib_port_event_work` is still running when that cancellation happens? That function leads to a cascade: it calls `smc_ib_remember_port_attr`, which then calls `smc_ib_fill_mac`. And *that's* where it gets interesting, as `smc_ib_fill_mac` grabs a reference to a GID entry and then releases it.

So, the next thought is: does SMC-IB have any other place where it calls `rdma_get_gid_attr`? Let's see... Yes, `smc_ib_determine_gid` and `smc_ib_check_link_gid`. Hmm, now `smc_ib_determine_gid` is called during link creation, and I wonder, does a link's creation hold a reference? It does *not*, since `smc_ib_determine_gid` explicitly calls `rdma_put_gid_attr` before returning. Right, so that drops the reference immediately. So, the SMC code itself isn't holding the reference.

So, *who* is? The log message is the clue: "GID entry ref leak for dev syz1 index 2 ref=1". Index 2...what does that mean? I need to think about how the GID table works. When an IB device is added, default GIDs are added to the GID table. I think the issue is with the device index 2. Let's dig deeper into the add_roce_gid.



69/2 2026/05/21 21:15 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:add_roce_gid]

Results:
map[SourceCode: 350:	static int add_roce_gid(struct ib_gid_table_entry *entry)
 351:	{
 352:		const struct ib_gid_attr *attr = &entry->attr;
 353:		int ret;
 354:	
 355:		if (!attr->ndev) {
 356:			dev_err(&attr->device->dev, "%s NULL netdev port=%u index=%u\n",
 357:				__func__, attr->port_num, attr->index);
 358:			return -EINVAL;
 359:		}
 360:		if (rdma_cap_roce_gid_table(attr->device, attr->port_num)) {
 361:			ret = attr->device->ops.add_gid(attr, &entry->context);
 362:			if (ret) {
 363:				dev_err(&attr->device->dev,
 364:					"%s GID add failed port=%u index=%u\n",
 365:					__func__, attr->port_num, attr->index);
 366:				return ret;
 367:			}
 368:		}
 369:		return 0;
 370:	}
 SourceFile:drivers/infiniband/core/cache.c]

70/2 2026/05/21 21:15 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 39719
							output: 47
							thoughts: 250
						

Thoughts:
**Analyzing the `smbdirect` Log Entry**

Okay, so I'm seeing `smbdirect` show up in the logs. Intriguing. Let me take a closer look. Aha! It seems there's a reference to `smbdirect` specifically related to the `syz1` Infiniband device. This gives me some specific parameters about the device, like `max_fast_reg_page_list_len=512`, the device and kernel capabilities and the page size capability. It seems `smbdirect` is successfully adding an IB CA device. We have some important values for things like max QP read atomics, max SGLs, CQEs, QPs, and SGEs for send and receive. And port 1 appears to have RoCE enabled. Time to dig into the `smbdirect` code and see what this all means in the context of our overall configuration. I need to understand how these device capabilities are being leveraged.



71/2 2026/05/21 21:15 tool codesearch-definition-source
0m Error:
requested entity does not exist

Args:
map[ContextFile:fs/smb/client/smbdirect.c IncludeLines:true Name:smbd_add_device]

Results:
map[SourceCode: SourceFile:]

72/2 2026/05/21 21:15 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 40243
							output: 21
							thoughts: 38
						

Thoughts:
Okay, here's my interpretation of that thought process, assuming I'm deep in the weeds of kernel development and specifically working with SMB file systems:

**Locating the SMBDirect Implementation**

Right, so I need to find the implementation details for SMBDirect. My initial thought is to dive into the kernel source tree. Given that SMBDirect is a pretty core aspect of SMB/CIFS, the likely places to start my search are within the file system directories. Specifically, I should look in the `fs/smb/client/` directory, which is specific to SMB protocol clients, as it may be defined there. If I don't find what I'm looking for there, I should check the legacy `fs/cifs/` directory as well. It could be under either path or possibly, a shared component. I'm going to start with a search for `smbdirect` within `fs/smb/client/smbdirect.c` and also check in `fs/cifs/smbdirect.c`. That should give me the entry point or, at least, point me toward the relevant functions and data structures.



73/2 2026/05/21 21:15 tool grepper
0m Error:
no matches

Args:
map[Expression:smbdirect: ib_dev]

Results:
map[Output:]

74/2 2026/05/21 21:15 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 40557
							output: 23
							thoughts: 14
						

Thoughts:
Here's my thought process, as if I were considering this in a professional context:

**Investigating Potential SMB Direct Kernel Interactions**

Okay, so I'm thinking about digging into the kernel to see what's going on with `smbdirect`. It's a key term, so I'm likely interested in its role. I need to understand how the system is interacting with SMB Direct. I'm probably looking for a specific issue, or potentially exploring performance bottlenecks related to RDMA, or maybe I'm troubleshooting a potential security concern. Regardless, the kernel is the best place to start. I want to see exactly *how* and *where* this feature is being used internally. Let's see what the code reveals.



75/2 2026/05/21 21:15 tool grepper
0m Error:
no matches

Args:
map[Expression:"smbdirect: ib_dev"]

Results:
map[Output:]

76/2 2026/05/21 21:15 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 40763
							output: 25
							thoughts: 101
						

Thoughts:
**Analyzing the IB Device Log**

Okay, let's see... the log output just flagged something interesting: `smbdirect: ib_dev[syz1]: added: IB_CA max_fast_reg_page_list_len=512 device_cap_flags=0x1c001223c76 kernel_cap_flags=0x14 page_size_cap=0xfffff000`. My eye immediately goes to `max_fast_reg_page_list_len`. Right, I need to understand what that value means within the context of this Infiniband setup, and how it impacts potential performance bottlenecks or limitations. I'll start with a focused search for that specific parameter. Time to dig into the relevant documentation, kernel source, and any related performance tuning guides.



77/2 2026/05/21 21:15 tool grepper
0m Args:
map[Expression:max_fast_reg_page_list_len]

Results:
map[Output:drivers/infiniband/core/rw.c=61=static inline u32 rdma_rw_fr_page_list_len(struct ib_device *dev,
--
drivers/infiniband/core/rw.c-68-	else
drivers/infiniband/core/rw.c:69:		max_pages = dev->attrs.max_fast_reg_page_list_len;
drivers/infiniband/core/rw.c-70-
--
drivers/infiniband/hw/bnxt_re/ib_verbs.c=183=int bnxt_re_query_device(struct ib_device *ibdev,
--
drivers/infiniband/hw/bnxt_re/ib_verbs.c-251-
drivers/infiniband/hw/bnxt_re/ib_verbs.c:252:	ib_attr->max_fast_reg_page_list_len = MAX_PBL_LVL_1_PGS;
drivers/infiniband/hw/bnxt_re/ib_verbs.c-253-
--
drivers/infiniband/hw/cxgb4/provider.c=255=static int c4iw_query_device(struct ib_device *ibdev, struct ib_device_attr *props,
--
drivers/infiniband/hw/cxgb4/provider.c-295-	props->local_ca_ack_delay = 0;
drivers/infiniband/hw/cxgb4/provider.c:296:	props->max_fast_reg_page_list_len =
drivers/infiniband/hw/cxgb4/provider.c-297-		t4_max_fr_depth(dev->rdev.lldi.ulptx_memwrite_dsgl && use_dsgl);
--
drivers/infiniband/hw/erdma/erdma_verbs.c=317=int erdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr,
--
drivers/infiniband/hw/erdma/erdma_verbs.c-343-	attr->max_mw = dev->attrs.max_mw;
drivers/infiniband/hw/erdma/erdma_verbs.c:344:	attr->max_fast_reg_page_list_len = ERDMA_MAX_FRMR_PA;
drivers/infiniband/hw/erdma/erdma_verbs.c-345-	attr->page_size_cap = ERDMA_PAGE_SIZE_SUPPORT;
--
drivers/infiniband/hw/hfi1/verbs.c=1288=static void hfi1_fill_device_attr(struct hfi1_devdata *dd)
--
drivers/infiniband/hw/hfi1/verbs.c-1310-	rdi->dparms.props.max_mr_size = U64_MAX;
drivers/infiniband/hw/hfi1/verbs.c:1311:	rdi->dparms.props.max_fast_reg_page_list_len = UINT_MAX;
drivers/infiniband/hw/hfi1/verbs.c-1312-	rdi->dparms.props.max_qp = hfi1_max_qps;
--
drivers/infiniband/hw/hns/hns_roce_main.c=218=static int hns_roce_query_device(struct ib_device *ib_dev,
--
drivers/infiniband/hw/hns/hns_roce_main.c-269-		props->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
drivers/infiniband/hw/hns/hns_roce_main.c:270:		props->max_fast_reg_page_list_len = HNS_ROCE_FRMR_MAX_PA;
drivers/infiniband/hw/hns/hns_roce_main.c-271-	}
--
drivers/infiniband/hw/ionic/ionic_ibdev.c=22=static int ionic_query_device(struct ib_device *ibdev,
--
drivers/infiniband/hw/ionic/ionic_ibdev.c-68-	attr->max_ah = dev->lif_cfg.nahs_per_lif;
drivers/infiniband/hw/ionic/ionic_ibdev.c:69:	attr->max_fast_reg_page_list_len = dev->lif_cfg.npts_per_lif / 2;
drivers/infiniband/hw/ionic/ionic_ibdev.c-70-	attr->max_pkeys = IONIC_PKEY_TBL_LEN;
--
drivers/infiniband/hw/irdma/verbs.c=11=static int irdma_query_device(struct ib_device *ibdev,
--
drivers/infiniband/hw/irdma/verbs.c-59-	props->max_total_mcast_qp_attach = rf->max_qp * IRDMA_MAX_MGS_PER_CTX;
drivers/infiniband/hw/irdma/verbs.c:60:	props->max_fast_reg_page_list_len = IRDMA_MAX_PAGES_PER_FMR;
drivers/infiniband/hw/irdma/verbs.c-61-	props->max_srq = rf->max_srq - rf->used_srqs;
--
drivers/infiniband/hw/mlx4/main.c=434=static int mlx4_ib_query_device(struct ib_device *ibdev,
--
drivers/infiniband/hw/mlx4/main.c-547-	props->max_srq_sge	   = dev->dev->caps.max_srq_sge;
drivers/infiniband/hw/mlx4/main.c:548:	props->max_fast_reg_page_list_len = MLX4_MAX_FAST_REG_PAGES;
drivers/infiniband/hw/mlx4/main.c-549-	props->local_ca_ack_delay  = dev->dev->caps.local_ca_ack_delay;
--
drivers/infiniband/hw/mlx5/main.c=945=static int mlx5_ib_query_device(struct ib_device *ibdev,
--
drivers/infiniband/hw/mlx5/main.c-1123-	props->max_srq_sge	   = max_rq_sg - 1;
drivers/infiniband/hw/mlx5/main.c:1124:	props->max_fast_reg_page_list_len =
drivers/infiniband/hw/mlx5/main.c-1125-		1 << MLX5_CAP_GEN(mdev, log_max_klm_list_size);
drivers/infiniband/hw/mlx5/main.c-1126-	props->max_pi_fast_reg_page_list_len =
drivers/infiniband/hw/mlx5/main.c:1127:		props->max_fast_reg_page_list_len / 2;
drivers/infiniband/hw/mlx5/main.c-1128-	props->max_sgl_rd =
--
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c=67=int ocrdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr,
--
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c-110-	attr->local_ca_ack_delay = dev->attr.local_ca_ack_delay;
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c:111:	attr->max_fast_reg_page_list_len = dev->attr.max_pages_per_frmr;
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c-112-	attr->max_pkeys = 1;
--
drivers/infiniband/hw/qedr/verbs.c=111=int qedr_query_device(struct ib_device *ibdev,
--
drivers/infiniband/hw/qedr/verbs.c-161-	attr->local_ca_ack_delay = qattr->dev_ack_delay;
drivers/infiniband/hw/qedr/verbs.c:162:	attr->max_fast_reg_page_list_len = qattr->max_mr / 8;
drivers/infiniband/hw/qedr/verbs.c-163-	attr->max_pkeys = qattr->max_pkey;
--
drivers/infiniband/hw/usnic/usnic_ib_verbs.c=277=int usnic_ib_query_device(struct ib_device *ibdev,
--
drivers/infiniband/hw/usnic/usnic_ib_verbs.c-323-	props->max_srq_sge = 0;
drivers/infiniband/hw/usnic/usnic_ib_verbs.c:324:	props->max_fast_reg_page_list_len = 0;
drivers/infiniband/hw/usnic/usnic_ib_verbs.c-325-	props->max_mcast_grp = 0;
--
drivers/infiniband/hw/vmw_pvrdma/pvrdma_dev_api.h=212=struct pvrdma_device_caps {
--
drivers/infiniband/hw/vmw_pvrdma/pvrdma_dev_api.h-262-	u8  gid_types;				/* PVRDMA_GID_TYPE_FLAG_ */
drivers/infiniband/hw/vmw_pvrdma/pvrdma_dev_api.h:263:	u32 max_fast_reg_page_list_len;
drivers/infiniband/hw/vmw_pvrdma/pvrdma_dev_api.h-264-};
--
drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c=65=int pvrdma_query_device(struct ib_device *ibdev,
--
drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c-108-		props->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c:109:		props->max_fast_reg_page_list_len = PVRDMA_GET_CAP(dev,
drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c-110-				PVRDMA_MAX_FAST_REG_PAGES,
drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c:111:				dev->dsr->caps.max_fast_reg_page_list_len);
drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c-112-	}
--
drivers/infiniband/sw/rxe/rxe.c=42=static void rxe_init_device_param(struct rxe_dev *rxe, struct net_device *ndev)
--
drivers/infiniband/sw/rxe/rxe.c-71-	rxe->attr.max_srq_sge			= RXE_MAX_SRQ_SGE;
drivers/infiniband/sw/rxe/rxe.c:72:	rxe->attr.max_fast_reg_page_list_len	= RXE_MAX_FMR_PAGE_LIST_LEN;
drivers/infiniband/sw/rxe/rxe.c-73-	rxe->attr.max_pkeys			= RXE_MAX_PKEYS;
--
drivers/infiniband/sw/siw/siw_verbs.c=129=int siw_query_device(struct ib_device *base_dev, struct ib_device_attr *attr,
--
drivers/infiniband/sw/siw/siw_verbs.c-144-	attr->max_cqe = sdev->attrs.max_cqe;
drivers/infiniband/sw/siw/siw_verbs.c:145:	attr->max_fast_reg_page_list_len = SIW_MAX_SGE_PBL;
drivers/infiniband/sw/siw/siw_verbs.c-146-	attr->max_mr = sdev->attrs.max_mr;
--
drivers/infiniband/ulp/iser/iser_verbs.c=487=static void iser_calc_scsi_params(struct iser_conn *iser_conn,
--
drivers/infiniband/ulp/iser/iser_verbs.c-509-	else
drivers/infiniband/ulp/iser/iser_verbs.c:510:		max_num_sg = attr->max_fast_reg_page_list_len;
drivers/infiniband/ulp/iser/iser_verbs.c-511-
--
drivers/infiniband/ulp/rtrs/rtrs-clt.c=1455=static void query_fast_reg_mode(struct rtrs_clt_path *clt_path)
--
drivers/infiniband/ulp/rtrs/rtrs-clt.c-1473-		min3(clt_path->max_pages_per_mr, (u32)max_pages_per_mr,
drivers/infiniband/ulp/rtrs/rtrs-clt.c:1474:		     ib_dev->attrs.max_fast_reg_page_list_len);
drivers/infiniband/ulp/rtrs/rtrs-clt.c-1475-	clt_path->clt->max_segments =
--
drivers/infiniband/ulp/rtrs/rtrs-srv.c=561=static int map_cont_bufs(struct rtrs_srv_path *srv_path)
--
drivers/infiniband/ulp/rtrs/rtrs-srv.c-584-		chunks_per_mr =
drivers/infiniband/ulp/rtrs/rtrs-srv.c:585:			srv_path->s.dev->ib_dev->attrs.max_fast_reg_page_list_len;
drivers/infiniband/ulp/rtrs/rtrs-srv.c-586-		mrs_num = DIV_ROUND_UP(srv->queue_depth, chunks_per_mr);
--
drivers/infiniband/ulp/srp/ib_srp.c=4001=static int srp_add_one(struct ib_device *device)
--
drivers/infiniband/ulp/srp/ib_srp.c-4044-			min_t(u32, srp_dev->max_pages_per_mr,
drivers/infiniband/ulp/srp/ib_srp.c:4045:			      attr->max_fast_reg_page_list_len);
drivers/infiniband/ulp/srp/ib_srp.c-4046-	}
--
drivers/infiniband/ulp/srp/ib_srp.c-4048-				   srp_dev->max_pages_per_mr;
drivers/infiniband/ulp/srp/ib_srp.c:4049:	pr_debug("%s: mr_page_shift = %d, device->max_mr_size = %#llx, device->max_fast_reg_page_list_len = %u, max_pages_per_mr = %d, mr_max_size = %#x\n",
drivers/infiniband/ulp/srp/ib_srp.c-4050-		 dev_name(&device->dev), mr_page_shift, attr->max_mr_size,
drivers/infiniband/ulp/srp/ib_srp.c:4051:		 attr->max_fast_reg_page_list_len,
drivers/infiniband/ulp/srp/ib_srp.c-4052-		 srp_dev->max_pages_per_mr, srp_dev->mr_max_size);
--
drivers/nvme/host/rdma.c=450=static int nvme_rdma_get_max_fr_pages(struct ib_device *ibdev, bool pi_support)
--
drivers/nvme/host/rdma.c-456-	else
drivers/nvme/host/rdma.c:457:		max_page_list_len = ibdev->attrs.max_fast_reg_page_list_len;
drivers/nvme/host/rdma.c-458-
--
fs/smb/common/smbdirect/smbdirect_connect.c=128=static int smbdirect_connect_rdma_connect(struct smbdirect_socket *sc)
--
fs/smb/common/smbdirect/smbdirect_connect.c-142-		smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR,
fs/smb/common/smbdirect/smbdirect_connect.c:143:			"Device capability flags = %llx max_fast_reg_page_list_len = %u\n",
fs/smb/common/smbdirect/smbdirect_connect.c-144-			sc->ib.dev->attrs.device_cap_flags,
fs/smb/common/smbdirect/smbdirect_connect.c:145:			sc->ib.dev->attrs.max_fast_reg_page_list_len);
fs/smb/common/smbdirect/smbdirect_connect.c-146-		return -EPROTONOSUPPORT;
--
fs/smb/common/smbdirect/smbdirect_connect.c-179-	sp->max_frmr_depth = min_t(u32, sp->max_frmr_depth,
fs/smb/common/smbdirect/smbdirect_connect.c:180:				   sc->ib.dev->attrs.max_fast_reg_page_list_len);
fs/smb/common/smbdirect/smbdirect_connect.c-181-	sc->mr_io.type = IB_MR_TYPE_MEM_REG;
--
fs/smb/common/smbdirect/smbdirect_devices.c=24=static int smbdirect_ib_client_add(struct ib_device *ib_dev)
--
fs/smb/common/smbdirect/smbdirect_devices.c-56-		node_str,
fs/smb/common/smbdirect/smbdirect_devices.c:57:		"max_fast_reg_page_list_len",
fs/smb/common/smbdirect/smbdirect_devices.c:58:		ib_dev->attrs.max_fast_reg_page_list_len,
fs/smb/common/smbdirect/smbdirect_devices.c-59-		"device_cap_flags",
--
fs/smb/common/smbdirect/smbdirect_listen.c=207=static int smbdirect_listen_connect_request(struct smbdirect_socket *lsc,
--
fs/smb/common/smbdirect/smbdirect_listen.c-224-		smbdirect_log_rdma_event(lsc, SMBDIRECT_LOG_ERR,
fs/smb/common/smbdirect/smbdirect_listen.c:225:			"Device capability flags = %llx max_fast_reg_page_list_len = %u\n",
fs/smb/common/smbdirect/smbdirect_listen.c-226-			new_id->device->attrs.device_cap_flags,
fs/smb/common/smbdirect/smbdirect_listen.c:227:			new_id->device->attrs.max_fast_reg_page_list_len);
fs/smb/common/smbdirect/smbdirect_listen.c-228-		return -EPROTONOSUPPORT;
--
fs/smb/common/smbdirect/smbdirect_socket.c=9=bool smbdirect_frwr_is_supported(const struct ib_device_attr *attrs)
--
fs/smb/common/smbdirect/smbdirect_socket.c-18-		return false;
fs/smb/common/smbdirect/smbdirect_socket.c:19:	if (attrs->max_fast_reg_page_list_len == 0)
fs/smb/common/smbdirect/smbdirect_socket.c-20-		return false;
--
include/rdma/ib_verbs.h=400=struct ib_device_attr {
--
include/rdma/ib_verbs.h-437-	int			max_srq_sge;
include/rdma/ib_verbs.h:438:	unsigned int		max_fast_reg_page_list_len;
include/rdma/ib_verbs.h-439-	unsigned int		max_pi_fast_reg_page_list_len;
--
net/sunrpc/xprtrdma/frwr_ops.c=172=int frwr_query_device(struct rpcrdma_ep *ep, const struct ib_device *device)
--
net/sunrpc/xprtrdma/frwr_ops.c-178-	if (!(attrs->device_cap_flags & IB_DEVICE_MEM_MGT_EXTENSIONS) ||
net/sunrpc/xprtrdma/frwr_ops.c:179:	    attrs->max_fast_reg_page_list_len == 0) {
net/sunrpc/xprtrdma/frwr_ops.c-180-		pr_err("rpcrdma: 'frwr' mode is not supported by device %s\n",
--
net/sunrpc/xprtrdma/frwr_ops.c-197-
net/sunrpc/xprtrdma/frwr_ops.c:198:	/* Quirk: Some devices advertise a large max_fast_reg_page_list_len
net/sunrpc/xprtrdma/frwr_ops.c-199-	 * capability, but perform optimally when the MRs are not larger
--
net/sunrpc/xprtrdma/frwr_ops.c-204-	else
net/sunrpc/xprtrdma/frwr_ops.c:205:		ep->re_max_fr_depth = attrs->max_fast_reg_page_list_len;
net/sunrpc/xprtrdma/frwr_ops.c-206-	if (ep->re_max_fr_depth > RPCRDMA_MAX_DATA_SEGS)
]

78/2 2026/05/21 21:15 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 46888
							output: 56
							thoughts: 159
						

Thoughts:
**Diving into the smbdirect IB Interaction**

Okay, so I'm looking at this log entry from `fs/smb/common/smbdirect/smbdirect_devices.c`. It mentions `smbdirect` and an IB device, specifically `ib_dev[syz1]`, being added. The log reports `max_fast_reg_page_list_len=512` and a bunch of `device_cap_flags` and `kernel_cap_flags`, alongside `page_size_cap`. This confirms that `smbdirect` is indeed interacting with InfiniBand.

Now, remembering my understanding of the architecture, `smbdirect` is acting as an IB client. That's the key. I need to figure out if this client is managing a GID entry. My first thought is whether the addition process, specifically within the `smbdirect_ib_client_add` function, handles reference counting on the GID. It's time to dig deeper into that function. This is where the core logic of the registration probably resides. I need to confirm whether we have a potential reference tracking issue.



79/2 2026/05/21 21:15 tool codesearch-definition-source
0m Args:
map[ContextFile:fs/smb/common/smbdirect/smbdirect_devices.c IncludeLines:true Name:smbdirect_ib_client_add]

Results:
map[SourceCode:  24:	static int smbdirect_ib_client_add(struct ib_device *ib_dev)
  25:	{
  26:		u8 node_type = smbdirect_ib_device_rdma_capable_node_type(ib_dev);
  27:		struct smbdirect_device *sdev;
  28:		const char *node_str;
  29:		const char *action;
  30:		u32 pidx;
  31:	
  32:		switch (node_type) {
  33:		case RDMA_NODE_IB_CA:
  34:			node_str = "IB_CA";
  35:			action = "added";
  36:			break;
  37:		case RDMA_NODE_RNIC:
  38:			node_str = "RNIC";
  39:			action = "added";
  40:			break;
  41:		case RDMA_NODE_UNSPECIFIED:
  42:			node_str = "UNSPECIFIED";
  43:			action = "ignored";
  44:			break;
  45:		default:
  46:			node_str = "UNKNOWN";
  47:			action = "ignored";
  48:			node_type = RDMA_NODE_UNSPECIFIED;
  49:			break;
  50:		}
  51:	
  52:		pr_info("ib_dev[%.*s]: %s: %s %s=%u %s=0x%llx %s=0x%llx %s=0x%llx\n",
  53:			IB_DEVICE_NAME_MAX,
  54:			ib_dev->name,
  55:			action,
  56:			node_str,
  57:			"max_fast_reg_page_list_len",
  58:			ib_dev->attrs.max_fast_reg_page_list_len,
  59:			"device_cap_flags",
  60:			ib_dev->attrs.device_cap_flags,
  61:			"kernel_cap_flags",
  62:			ib_dev->attrs.kernel_cap_flags,
  63:			"page_size_cap",
  64:			ib_dev->attrs.page_size_cap);
  65:	
  66:		if (node_type == RDMA_NODE_UNSPECIFIED)
  67:			return 0;
  68:	
  69:		pr_info("ib_dev[%.*s]: %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u %s=%u\n",
  70:			IB_DEVICE_NAME_MAX,
  71:			ib_dev->name,
  72:			"num_ports",
  73:			rdma_end_port(ib_dev),
  74:			"max_qp_rd_atom",
  75:			ib_dev->attrs.max_qp_rd_atom,
  76:			"max_qp_init_rd_atom",
  77:			ib_dev->attrs.max_qp_init_rd_atom,
  78:			"max_sgl_rd",
  79:			ib_dev->attrs.max_sgl_rd,
  80:			"max_sge_rd",
  81:			ib_dev->attrs.max_sge_rd,
  82:			"max_cqe",
  83:			ib_dev->attrs.max_cqe,
  84:			"max_qp_wr",
  85:			ib_dev->attrs.max_qp_wr,
  86:			"max_send_sge",
  87:			ib_dev->attrs.max_send_sge,
  88:			"max_recv_sge",
  89:			ib_dev->attrs.max_recv_sge);
  90:	
  91:		rdma_for_each_port(ib_dev, pidx) {
  92:			const struct ib_port_immutable *ib_pi =
  93:				ib_port_immutable_read(ib_dev, pidx);
  94:			u32 core_cap_flags = ib_pi ? ib_pi->core_cap_flags : 0;
  95:	
  96:			pr_info("ib_dev[%.*s]PORT[%u]: %s=%u %s=%u %s=%u %s=%u %s=%u %s=0x%x\n",
  97:				IB_DEVICE_NAME_MAX,
  98:				ib_dev->name,
  99:				pidx,
 100:				"iwarp",
 101:				rdma_protocol_iwarp(ib_dev, pidx),
 102:				"ib",
 103:				rdma_protocol_ib(ib_dev, pidx),
 104:				"roce",
 105:				rdma_protocol_roce(ib_dev, pidx),
 106:				"v1",
 107:				rdma_protocol_roce_eth_encap(ib_dev, pidx),
 108:				"v2",
 109:				rdma_protocol_roce_udp_encap(ib_dev, pidx),
 110:				"core_cap_flags",
 111:				core_cap_flags);
 112:		}
 113:	
 114:		sdev = kzalloc_obj(*sdev);
 115:		if (!sdev)
 116:			return -ENOMEM;
 117:		sdev->ib_dev = ib_dev;
 118:		snprintf(sdev->ib_name, ARRAY_SIZE(sdev->ib_name), "%.*s",
 119:			 IB_DEVICE_NAME_MAX, ib_dev->name);
 120:	
 121:		write_lock(&smbdirect_globals.devices.lock);
 122:		list_add(&sdev->list, &smbdirect_globals.devices.list);
 123:		write_unlock(&smbdirect_globals.devices.lock);
 124:	
 125:		return 0;
 126:	}
 SourceFile:fs/smb/common/smbdirect/smbdirect_devices.c]

80/2 2026/05/21 21:15 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 49027
							output: 43
							thoughts: 58
						

Thoughts:
Here's my analysis of those thoughts, tailored for an expert like yourself:

**Debugging RDMA Device Addition**

Okay, so `smbdirect_ib_client_add` is pretty straightforward – it's just adding the device to a linked list, a simple bookkeeping operation. No fancy GID lookups or RDMA resource allocation happening there. That's as I expected.

Now, that `RDS/IB: syz1: added` message is throwing a wrench in the works. My gut tells me something *else* is handling the actual configuration. The message itself hints at something important! Let's follow that trail...

Alright, time to dive into `rds_ib_add_one`. This function is likely the central piece that glues it all together. This should be where the GID querying and device configuration actually take place. Time to dig in and see how the pieces fit.



81/2 2026/05/21 21:15 tool codesearch-definition-source
0m Args:
map[ContextFile:net/rds/ib.c IncludeLines:true Name:rds_ib_add_one]

Results:
map[SourceCode: 128:	static int rds_ib_add_one(struct ib_device *device)
 129:	{
 130:		struct rds_ib_device *rds_ibdev;
 131:		int ret;
 132:	
 133:		/* Only handle IB (no iWARP) devices */
 134:		if (device->node_type != RDMA_NODE_IB_CA)
 135:			return -EOPNOTSUPP;
 136:	
 137:		/* Device must support FRWR */
 138:		if (!(device->attrs.device_cap_flags & IB_DEVICE_MEM_MGT_EXTENSIONS))
 139:			return -EOPNOTSUPP;
 140:	
 141:		rds_ibdev = kzalloc_node(sizeof(struct rds_ib_device), GFP_KERNEL,
 142:					 ibdev_to_node(device));
 143:		if (!rds_ibdev)
 144:			return -ENOMEM;
 145:	
 146:		spin_lock_init(&rds_ibdev->spinlock);
 147:		refcount_set(&rds_ibdev->refcount, 1);
 148:		INIT_WORK(&rds_ibdev->free_work, rds_ib_dev_free);
 149:	
 150:		INIT_LIST_HEAD(&rds_ibdev->ipaddr_list);
 151:		INIT_LIST_HEAD(&rds_ibdev->conn_list);
 152:	
 153:		rds_ibdev->max_wrs = device->attrs.max_qp_wr;
 154:		rds_ibdev->max_sge = min(device->attrs.max_send_sge, RDS_IB_MAX_SGE);
 155:	
 156:		rds_ibdev->odp_capable =
 157:			!!(device->attrs.kernel_cap_flags &
 158:			   IBK_ON_DEMAND_PAGING) &&
 159:			!!(device->attrs.odp_caps.per_transport_caps.rc_odp_caps &
 160:			   IB_ODP_SUPPORT_WRITE) &&
 161:			!!(device->attrs.odp_caps.per_transport_caps.rc_odp_caps &
 162:			   IB_ODP_SUPPORT_READ);
 163:	
 164:		rds_ibdev->max_1m_mrs = device->attrs.max_mr ?
 165:			min_t(unsigned int, (device->attrs.max_mr / 2),
 166:			      rds_ib_mr_1m_pool_size) : rds_ib_mr_1m_pool_size;
 167:	
 168:		rds_ibdev->max_8k_mrs = device->attrs.max_mr ?
 169:			min_t(unsigned int, ((device->attrs.max_mr / 2) * RDS_MR_8K_SCALE),
 170:			      rds_ib_mr_8k_pool_size) : rds_ib_mr_8k_pool_size;
 171:	
 172:		rds_ibdev->max_initiator_depth = device->attrs.max_qp_init_rd_atom;
 173:		rds_ibdev->max_responder_resources = device->attrs.max_qp_rd_atom;
 174:	
 175:		rds_ibdev->vector_load = kzalloc_objs(int, device->num_comp_vectors);
 176:		if (!rds_ibdev->vector_load) {
 177:			pr_err("RDS/IB: %s failed to allocate vector memory\n",
 178:				__func__);
 179:			ret = -ENOMEM;
 180:			goto put_dev;
 181:		}
 182:	
 183:		rds_ibdev->dev = device;
 184:		rds_ibdev->pd = ib_alloc_pd(device, 0);
 185:		if (IS_ERR(rds_ibdev->pd)) {
 186:			ret = PTR_ERR(rds_ibdev->pd);
 187:			rds_ibdev->pd = NULL;
 188:			goto put_dev;
 189:		}
 190:	
 191:		rds_ibdev->mr_1m_pool =
 192:			rds_ib_create_mr_pool(rds_ibdev, RDS_IB_MR_1M_POOL);
 193:		if (IS_ERR(rds_ibdev->mr_1m_pool)) {
 194:			ret = PTR_ERR(rds_ibdev->mr_1m_pool);
 195:			rds_ibdev->mr_1m_pool = NULL;
 196:			goto put_dev;
 197:		}
 198:	
 199:		rds_ibdev->mr_8k_pool =
 200:			rds_ib_create_mr_pool(rds_ibdev, RDS_IB_MR_8K_POOL);
 201:		if (IS_ERR(rds_ibdev->mr_8k_pool)) {
 202:			ret = PTR_ERR(rds_ibdev->mr_8k_pool);
 203:			rds_ibdev->mr_8k_pool = NULL;
 204:			goto put_dev;
 205:		}
 206:	
 207:		rdsdebug("RDS/IB: max_mr = %d, max_wrs = %d, max_sge = %d, max_1m_mrs = %d, max_8k_mrs = %d\n",
 208:			 device->attrs.max_mr, rds_ibdev->max_wrs, rds_ibdev->max_sge,
 209:			 rds_ibdev->max_1m_mrs, rds_ibdev->max_8k_mrs);
 210:	
 211:		pr_info("RDS/IB: %s: added\n", device->name);
 212:	
 213:		down_write(&rds_ib_devices_lock);
 214:		list_add_tail_rcu(&rds_ibdev->list, &rds_ib_devices);
 215:		up_write(&rds_ib_devices_lock);
 216:		refcount_inc(&rds_ibdev->refcount);
 217:	
 218:		ib_set_client_data(device, &rds_ib_client, rds_ibdev);
 219:	
 220:		rds_ib_nodev_connect();
 221:		return 0;
 222:	
 223:	put_dev:
 224:		rds_ib_dev_put(rds_ibdev);
 225:		return ret;
 226:	}
 SourceFile:net/rds/ib.c]

82/2 2026/05/21 21:15 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 51208
							output: 26
							thoughts: 238
						

Thoughts:
**Investigating a Potential Refcount Leak**

Okay, so `rds_ib_add_one` doesn't seem to be responsible for any GID querying, which is a key piece of information. That makes the leak harder to diagnose. A thought then strikes me - could the leak actually be within `syz_tun`? It's a syzkaller pseudo-device, and those are often tricky to handle. Wait, though, `syz_tun` isn't a *real* driver. It's a special device utilized by syzkaller.

Let me re-examine the syzkaller log. Ah! It reports "infiniband syz1: added syz_tun". So, it seems `syz_tun` is an infiniband device, created *by* `syz_tun`! That's a little confusing. Wait, there *is* a `syz_tun` driver within the syzkaller setup, though. It makes me wonder if there's something amiss in `drivers/infiniband/hw/syz_tun` or a similar path. But, syzkaller doesn't add drivers to the kernel, it uses existing ones. Then let's try a different tack. I'll check `drivers/infiniband/hw/` and see if `syz_tun` is defined in there.



83/2 2026/05/21 21:15 tool codesearch-dir-index
0m Args:
map[Dir:drivers/infiniband/hw]

Results:
map[Files:<nil> Subdirs:[bng_re bnxt_re cxgb4 efa erdma hfi1 hns ionic irdma mana mlx4 mlx5 mthca ocrdma qedr usnic vmw_pvrdma]]

84/2 2026/05/21 21:15 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 51878
							output: 26
							thoughts: 102
						

Thoughts:
**Analyzing the Net Device Association**

Okay, so I'm looking at this output and immediately, I don't see any mention of `syz_tun`. That's the first thing I notice. Wait a minute... is `syz_tun` actually a network device? Then I see it: `"infiniband syz1: added syz_tun"`. Ah, right, the name! `syz_tun` is the *name* of a network device, it's not a function name.

So, when an Infiniband device gets added, it *might* be linked to a network device. I know that sometimes the IB device is closely related to a net device, like with `rxe`, Soft RoCE, where the IB device uses a net device, right? That's the key. Let's see what's going on with `rxe` to confirm my suspicion that the device might be added during the infiniband initialization.



85/2 2026/05/21 21:15 tool grepper
0m Error:
no matches

Args:
map[Expression:"infiniband %s: added %s"]

Results:
map[Output:]

86/2 2026/05/21 21:15 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 52229
							output: 19
							thoughts: 12
						

Thoughts:
Okay, let's dive into this. Here's my thought process on this:

**Initial Investigation: Starting with `rxe_net.c`**

Alright, the directive is to look into `rxe_net.c`. That's where the investigation begins. It suggests a focus on the network aspects of the RXE (RDMA over Converged Ethernet) implementation, which is logical, given the context. My immediate goal is to understand the core network-related functionalities implemented within this specific file. I'll be looking for crucial functions and data structures involved in handling network connections, packet transmission and reception, and any relevant state management. I'll need to examine the interactions with the underlying network stack, likely focusing on socket-level operations, and how they map to the RDMA mechanisms. I'll be looking specifically for any signs of performance bottlenecks or potential areas for optimization, or points of interaction.



87/2 2026/05/21 21:16 tool grepper
0m Error:
no matches

Args:
map[Expression:"added %s"]

Results:
map[Output:]

88/2 2026/05/21 21:16 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 52465
							output: 19
							thoughts: 23
						

Thoughts:
Here's my thought process, as requested:

**Debugging the Infiniband Kernel Patch**

Okay, so I see this commit message: `infiniband syz1: added syz_tun`. Immediately, I'm thinking, "Where the heck did *that* come from?" My first instinct is to trace this back. I need to understand the context, the reasoning behind it, and what it's supposed to *do*. Let's dig into the history and see what we can find. I want to see the original commit, any related discussions, and understand why this specific addition was made. Perhaps it relates to a fuzzing infrastructure, maybe system call handling, or potentially some kind of test setup. Gotta get to the bottom of this. Time to start digging!



89/2 2026/05/21 21:16 tool grepper
0m Error:
no matches

Args:
map[Expression:"added %s"]

Results:
map[Output:]

90/2 2026/05/21 21:16 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 52686
							output: 51
							thoughts: 31
						

Thoughts:
Okay, here's my interpretation of that thought process, assuming I'm deep in the weeds of network driver development, especially concerning InfiniBand.

**Diving into the rxe_net_add Function**

Right, so *rxe_net_add*. My mind's immediately jumped to that function – *rxe_net_add* – and specifically its location, *drivers/infiniband/sw/rxe/rxe_net.c*. Okay, that nails it down immediately to the software-based, or "RXE", RDMA over Converged Ethernet implementation within the InfiniBand stack. That function name, *add*, tells me this is likely the place where a new network interface, or maybe a new network namespace, is being integrated into the RXE subsystem. I need to understand what it's doing on a deep level. Is this related to an interface coming up? Are they creating some kind of data structure? I'll have to know that to proceed with my work.



91/2 2026/05/21 21:16 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/sw/rxe/rxe.c IncludeLines:true Name:rxe_net_add]

Results:
map[SourceCode: 607:	int rxe_net_add(const char *ibdev_name, struct net_device *ndev)
 608:	{
 609:		int err;
 610:		struct rxe_dev *rxe = NULL;
 611:	
 612:		rxe = ib_alloc_device(rxe_dev, ib_dev);
 613:		if (!rxe)
 614:			return -ENOMEM;
 615:	
 616:		ib_mark_name_assigned_by_user(&rxe->ib_dev);
 617:	
 618:		err = rxe_add(rxe, ndev->mtu, ibdev_name, ndev);
 619:		if (err) {
 620:			ib_dealloc_device(&rxe->ib_dev);
 621:			return err;
 622:		}
 623:	
 624:		return 0;
 625:	}
 SourceFile:drivers/infiniband/sw/rxe/rxe_net.c]

92/2 2026/05/21 21:16 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 53296
							output: 49
							thoughts: 10
						

Thoughts:
Okay, here's my attempt at summarizing that thought process, keeping in mind I'm speaking to an expert:

**Investigating `rxe_add`**

Alright, let's take a look at `rxe_add`. It seems like a pivotal function, so I need to understand its role within the system. My initial focus will be to determine exactly where this function is called, and what arguments are passed to it. I want to see how data structures are modified as a result of calling it. I am trying to determine if I am having a resource allocation issue, or a data structure corruption issue, or some other kind of issue. Given that it has `add` in the name, my gut tells me it likely involves inserting or registering something, perhaps a resource or a handle, into a data structure. Understanding the implications of this addition is key to figuring out how our system is failing. I'll need to trace its execution path. I'm going to start by getting a list of references to this function. This should help me build a mental model of its place in the system. After that, I will trace the control flow through some of the callers, if I can determine a small subset of relevant control flow. Once I have a good handle on how `rxe_add` functions, I should be able to get to the root of the problem.



93/2 2026/05/21 21:16 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/sw/rxe/rxe.c IncludeLines:true Name:rxe_add]

Results:
map[SourceCode: 203:	/* called by ifc layer to create new rxe device.
 204:	 * The caller should allocate memory for rxe by calling ib_alloc_device.
 205:	 */
 206:	int rxe_add(struct rxe_dev *rxe, unsigned int mtu, const char *ibdev_name,
 207:				struct net_device *ndev)
 208:	{
 209:		rxe_init(rxe, ndev);
 210:		rxe_set_mtu(rxe, mtu);
 211:	
 212:		return rxe_register_device(rxe, ibdev_name, ndev);
 213:	}
 SourceFile:drivers/infiniband/sw/rxe/rxe.c]

94/2 2026/05/21 21:16 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 53867
							output: 51
							thoughts: 12
						

Thoughts:
Okay, let's dive into it.

**My Approach to `rxe_register_device`**

Alright, time to dig into this `rxe_register_device` function. I'm going to start by analyzing its purpose within the broader InfiniBand context. What are the key elements it needs to manage? What kind of resources does it interact with? I'll probably be looking at how it integrates into the RXE (Reliable eXpress Engine) driver architecture. I'll need to understand the data structures it manipulates, especially those related to device registration and potentially resource allocation, and how those map to the kernel. I'll anticipate it handling some sort of initialization or configuration of the device, likely involving interrupts and memory mapping, or even DMA setups. I expect it to manage any locks it might acquire to ensure thread safety. Let me also consider the return values and error conditions, to understand the failure modes. I need to know how the rest of the kernel interacts with the registered device, in order to consider how this function may be the "entry point" to the entire stack.



95/2 2026/05/21 21:16 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/sw/rxe/rxe.c IncludeLines:true Name:rxe_register_device]

Results:
map[SourceCode:1533:	int rxe_register_device(struct rxe_dev *rxe, const char *ibdev_name,
1534:							struct net_device *ndev)
1535:	{
1536:		int err;
1537:		struct ib_device *dev = &rxe->ib_dev;
1538:	
1539:		strscpy(dev->node_desc, "rxe", sizeof(dev->node_desc));
1540:	
1541:		dev->node_type = RDMA_NODE_IB_CA;
1542:		dev->phys_port_cnt = 1;
1543:		dev->num_comp_vectors = num_possible_cpus();
1544:		dev->local_dma_lkey = 0;
1545:		addrconf_addr_eui48((unsigned char *)&dev->node_guid,
1546:				    rxe->raw_gid);
1547:	
1548:		dev->uverbs_cmd_mask |= BIT_ULL(IB_USER_VERBS_CMD_POST_SEND) |
1549:					BIT_ULL(IB_USER_VERBS_CMD_REQ_NOTIFY_CQ);
1550:	
1551:		ib_set_device_ops(dev, &rxe_dev_ops);
1552:		err = ib_device_set_netdev(&rxe->ib_dev, ndev, 1);
1553:		if (err)
1554:			return err;
1555:	
1556:		err = ib_register_device(dev, ibdev_name, NULL);
1557:		if (err)
1558:			rxe_dbg_dev(rxe, "failed with error %d\n", err);
1559:	
1560:		/*
1561:		 * Note that rxe may be invalid at this point if another thread
1562:		 * unregistered it.
1563:		 */
1564:		return err;
1565:	}
 SourceFile:drivers/infiniband/sw/rxe/rxe_verbs.c]

96/2 2026/05/21 21:16 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 54750
							output: 49
							thoughts: 55
						

Thoughts:
**Investigating the Origin of a Potential Infiniband Message**

Okay, so I saw this message, "infiniband syz1: added syz_tun", and my immediate thought is, where is this coming from? It's a key piece of debugging information, so pinpointing its source is critical. I'm reasonably sure it's related to Infiniband, given the prefix, but the function printing it isn't immediately obvious. Hmm, could it be originating from `ib_register_device`, or maybe `ib_device_set_netdev`? That seems like a logical place to start, given the "netdev" aspect of the message. Let's dig into `ib_device_set_netdev`. Time to trace that function and see what it reveals.



97/2 2026/05/21 21:16 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/device.c IncludeLines:true Name:ib_device_set_netdev]

Results:
map[SourceCode:2180:	/**
2181:	 * ib_device_set_netdev - Associate the ib_dev with an underlying net_device
2182:	 * @ib_dev: Device to modify
2183:	 * @ndev: net_device to affiliate, may be NULL
2184:	 * @port: IB port the net_device is connected to
2185:	 *
2186:	 * Drivers should use this to link the ib_device to a netdev so the netdev
2187:	 * shows up in interfaces like ib_enum_roce_netdev. Only one netdev may be
2188:	 * affiliated with any port.
2189:	 *
2190:	 * The caller must ensure that the given ndev is not unregistered or
2191:	 * unregistering, and that either the ib_device is unregistered or
2192:	 * ib_device_set_netdev() is called with NULL when the ndev sends a
2193:	 * NETDEV_UNREGISTER event.
2194:	 */
2195:	int ib_device_set_netdev(struct ib_device *ib_dev, struct net_device *ndev,
2196:				 u32 port)
2197:	{
2198:		enum rdma_nl_notify_event_type etype;
2199:		struct net_device *old_ndev;
2200:		struct ib_port_data *pdata;
2201:		unsigned long flags;
2202:		int ret;
2203:	
2204:		if (!rdma_is_port_valid(ib_dev, port))
2205:			return -EINVAL;
2206:	
2207:		/*
2208:		 * Drivers wish to call this before ib_register_driver, so we have to
2209:		 * setup the port data early.
2210:		 */
2211:		ret = alloc_port_data(ib_dev);
2212:		if (ret)
2213:			return ret;
2214:	
2215:		pdata = &ib_dev->port_data[port];
2216:		spin_lock_irqsave(&pdata->netdev_lock, flags);
2217:		old_ndev = rcu_dereference_protected(
2218:			pdata->netdev, lockdep_is_held(&pdata->netdev_lock));
2219:		if (old_ndev == ndev) {
2220:			spin_unlock_irqrestore(&pdata->netdev_lock, flags);
2221:			return 0;
2222:		}
2223:	
2224:		rcu_assign_pointer(pdata->netdev, ndev);
2225:		netdev_put(old_ndev, &pdata->netdev_tracker);
2226:		netdev_hold(ndev, &pdata->netdev_tracker, GFP_ATOMIC);
2227:		spin_unlock_irqrestore(&pdata->netdev_lock, flags);
2228:	
2229:		add_ndev_hash(pdata);
2230:	
2231:		/* Make sure that the device is registered before we send events */
2232:		if (xa_load(&devices, ib_dev->index) != ib_dev)
2233:			return 0;
2234:	
2235:		etype = ndev ? RDMA_NETDEV_ATTACH_EVENT : RDMA_NETDEV_DETACH_EVENT;
2236:		rdma_nl_notify_event(ib_dev, port, etype);
2237:	
2238:		return 0;
2239:	}
 SourceFile:drivers/infiniband/core/device.c]

98/2 2026/05/21 21:16 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 56055
							output: 19
							thoughts: 44
						

Thoughts:
Here's my summary, as though I'm thinking through this myself:

**Debugging an Infiniband Issue**

Okay, so I see this log message: "infiniband syz1: added syz_tun". My gut reaction is that this probably stems from something within the RDMA over Ethernet (rxe) subsystem, likely during network device addition. Specifically, I'm betting that `rxe_net_add` or a similar function is the culprit. To confirm my suspicion and pinpoint the exact location in the code that's generating this message, I'm going to search the codebase for the string `"added %s"`. That string is likely being used as a format string in a `printk` statement, and should lead me directly to the relevant code. This will help me trace the flow of execution and understand why this `syz_tun` device is being added in the first place, or rather why this is being logged.



99/2 2026/05/21 21:16 tool grepper
0m Error:
no matches

Args:
map[Expression:"added %s"]

Results:
map[Output:]

100/2 2026/05/21 21:16 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 56333
							output: 17
							thoughts: 27
						

Thoughts:
Okay, here's my attempt at summarizing the thought process, as if it were my own, assuming I'm an expert in this field:

**Digging into the RXE Code**

Alright, time to get to the bottom of this. I need to understand something related to the `rxe` driver, specifically within the Infiniband stack. My immediate instinct is to look at the source code, so I'm going to jump into `drivers/infiniband/sw/rxe/rxe.c`. I've got a hunch, or maybe just a general area in mind, and that hunch involves something being "added." That's the keyword I'll start with. I'll search the source for the string `"added"`, likely to find places where functionality or logic was introduced, potentially related to this issue I'm looking at. Hopefully, this search will guide me toward the relevant parts of the code. Let's see what we find.



101/2 2026/05/21 21:16 tool grepper
0m Args:
map[Expression:"added"]

Results:
map[Output:drivers/memstick/host/r592.c=623=static irqreturn_t r592_irq(int irq, void *data)
--
drivers/memstick/host/r592.c-651-
drivers/memstick/host/r592.c:652:		message("IRQ: card %s", card_was_added ? "added" : "removed");
drivers/memstick/host/r592.c-653-
--
drivers/mtd/nand/raw/r852.c=1038=static int r852_resume(struct device *device)
--
drivers/mtd/nand/raw/r852.c-1049-		dbg("card was %s during low power state",
drivers/mtd/nand/raw/r852.c:1050:			dev->card_detected ? "added" : "removed");
drivers/mtd/nand/raw/r852.c-1051-
--
drivers/mtd/ubi/kapi.c=794=BLOCKING_NOTIFIER_HEAD(ubi_notifiers);
--
drivers/mtd/ubi/kapi.c-798- * @nb: the notifier description object
drivers/mtd/ubi/kapi.c:799: * @ignore_existing: if non-zero, do not send "added" notification for all
drivers/mtd/ubi/kapi.c-800- *                   already existing volumes
--
drivers/net/hyperv/netvsc.c=1595=static void netvsc_send_vf(struct net_device *ndev,
--
drivers/net/hyperv/netvsc.c-1615-		    net_device_ctx->vf_serial,
drivers/net/hyperv/netvsc.c:1616:		    net_device_ctx->vf_alloc ? "added" : "removed");
drivers/net/hyperv/netvsc.c-1617-}
--
drivers/pci/hotplug/pnv_php.c=967=static irqreturn_t pnv_php_interrupt(int irq, void *data)
--
drivers/pci/hotplug/pnv_php.c-1034-	pci_info(pdev, "PCI slot [%s] %s (IRQ: %d)\n",
drivers/pci/hotplug/pnv_php.c:1035:		 php_slot->name, added ? "added" : "removed", irq);
drivers/pci/hotplug/pnv_php.c-1036-	INIT_WORK(&event->work, pnv_php_event_handler);
--
drivers/scsi/hpsa.c=1278=static int hpsa_scsi_add_entry(struct ctlr_info *h,
--
drivers/scsi/hpsa.c-1346-	hpsa_show_dev_msg(KERN_INFO, h, device,
drivers/scsi/hpsa.c:1347:		device->expose_device ? "added" : "masked");
drivers/scsi/hpsa.c-1348-	return 0;
--
drivers/scsi/smartpqi/smartpqi_init.c=2211=static void pqi_update_device_list(struct pqi_ctrl_info *ctrl_info,
--
drivers/scsi/smartpqi/smartpqi_init.c-2352-			if (rc == 0) {
drivers/scsi/smartpqi/smartpqi_init.c:2353:				pqi_dev_info(ctrl_info, "added", device);
drivers/scsi/smartpqi/smartpqi_init.c-2354-			} else {
--
fs/ext4/resize.c=1625=static int ext4_setup_next_flex_gd(struct super_block *sb,
--
fs/ext4/resize.c-1696- * in the new group's counts to the superblock.  Prior to that we have
fs/ext4/resize.c:1697: * not really "added" the group at all.  We re-check that we are still
fs/ext4/resize.c-1698- * adding in the last group in case things have changed since verifying.
--
fs/smb/common/smbdirect/smbdirect_devices.c=24=static int smbdirect_ib_client_add(struct ib_device *ib_dev)
--
fs/smb/common/smbdirect/smbdirect_devices.c-34-		node_str = "IB_CA";
fs/smb/common/smbdirect/smbdirect_devices.c:35:		action = "added";
fs/smb/common/smbdirect/smbdirect_devices.c-36-		break;
--
fs/smb/common/smbdirect/smbdirect_devices.c-38-		node_str = "RNIC";
fs/smb/common/smbdirect/smbdirect_devices.c:39:		action = "added";
fs/smb/common/smbdirect/smbdirect_devices.c-40-		break;
--
net/rxrpc/sendmsg.c=320=static int rxrpc_send_data(struct rxrpc_sock *rx,
--
net/rxrpc/sendmsg.c-424-				goto efault;
net/rxrpc/sendmsg.c:425:			_debug("added");
net/rxrpc/sendmsg.c-426-			txb->space -= copy;
]

102/2 2026/05/21 21:16 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 58004
							output: 46
							thoughts: 96
						

Thoughts:
**Debugging Infiniband Driver Registration**

Okay, so I'm seeing this "infiniband syz1: added syz_tun" message, and I need to figure out *where* it's coming from. My initial thought was that it was `rxe_add` that was generating this, but wait, I think I'm wrong. Let me see, wasn't that output a product of `rxe_register_device`? Yes, I think so. Right, because `rxe_register_device` ultimately calls `ib_register_device`. And that's the likely source. Now, does `ib_register_device` itself print that message? Time to go and verify the code in `ib_register_device` and confirm my assumptions.



103/2 2026/05/21 21:16 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/device.c IncludeLines:true Name:ib_register_device]

Results:
map[SourceCode:1388:	/**
1389:	 * ib_register_device - Register an IB device with IB core
1390:	 * @device: Device to register
1391:	 * @name: unique string device name. This may include a '%' which will
1392:	 * 	  cause a unique index to be added to the passed device name.
1393:	 * @dma_device: pointer to a DMA-capable device. If %NULL, then the IB
1394:	 *	        device will be used. In this case the caller should fully
1395:	 *		setup the ibdev for DMA. This usually means using dma_virt_ops.
1396:	 *
1397:	 * Low-level drivers use ib_register_device() to register their
1398:	 * devices with the IB core.  All registered clients will receive a
1399:	 * callback for each device that is added. @device must be allocated
1400:	 * with ib_alloc_device().
1401:	 *
1402:	 * If the driver uses ops.dealloc_driver and calls any ib_unregister_device()
1403:	 * asynchronously then the device pointer may become freed as soon as this
1404:	 * function returns.
1405:	 */
1406:	int ib_register_device(struct ib_device *device, const char *name,
1407:			       struct device *dma_device)
1408:	{
1409:		int ret;
1410:	
1411:		ret = assign_name(device, name);
1412:		if (ret)
1413:			return ret;
1414:	
1415:		/*
1416:		 * If the caller does not provide a DMA capable device then the IB core
1417:		 * will set up ib_sge and scatterlist structures that stash the kernel
1418:		 * virtual address into the address field.
1419:		 */
1420:		WARN_ON(dma_device && !dma_device->dma_parms);
1421:		device->dma_device = dma_device;
1422:	
1423:		ret = setup_device(device);
1424:		if (ret)
1425:			return ret;
1426:	
1427:		ret = ib_cache_setup_one(device);
1428:		if (ret) {
1429:			dev_warn(&device->dev,
1430:				 "Couldn't set up InfiniBand P_Key/GID cache\n");
1431:			return ret;
1432:		}
1433:	
1434:		device->groups[0] = &ib_dev_attr_group;
1435:		device->groups[1] = device->ops.device_group;
1436:		ret = ib_setup_device_attrs(device);
1437:		if (ret)
1438:			goto cache_cleanup;
1439:	
1440:		ib_device_register_rdmacg(device);
1441:	
1442:		rdma_counter_init(device);
1443:	
1444:		/*
1445:		 * Ensure that ADD uevent is not fired because it
1446:		 * is too early amd device is not initialized yet.
1447:		 */
1448:		dev_set_uevent_suppress(&device->dev, true);
1449:		ret = device_add(&device->dev);
1450:		if (ret)
1451:			goto cg_cleanup;
1452:	
1453:		ret = ib_setup_port_attrs(&device->coredev);
1454:		if (ret) {
1455:			dev_warn(&device->dev,
1456:				 "Couldn't register device with driver model\n");
1457:			goto dev_cleanup;
1458:		}
1459:	
1460:		ret = enable_device_and_get(device);
1461:		if (ret) {
1462:			void (*dealloc_fn)(struct ib_device *);
1463:	
1464:			/*
1465:			 * If we hit this error flow then we don't want to
1466:			 * automatically dealloc the device since the caller is
1467:			 * expected to call ib_dealloc_device() after
1468:			 * ib_register_device() fails. This is tricky due to the
1469:			 * possibility for a parallel unregistration along with this
1470:			 * error flow. Since we have a refcount here we know any
1471:			 * parallel flow is stopped in disable_device and will see the
1472:			 * special dealloc_driver pointer, causing the responsibility to
1473:			 * ib_dealloc_device() to revert back to this thread.
1474:			 */
1475:			dealloc_fn = device->ops.dealloc_driver;
1476:			device->ops.dealloc_driver = prevent_dealloc_device;
1477:			ib_device_put(device);
1478:			__ib_unregister_device(device);
1479:			device->ops.dealloc_driver = dealloc_fn;
1480:			dev_set_uevent_suppress(&device->dev, false);
1481:			return ret;
1482:		}
1483:		dev_set_uevent_suppress(&device->dev, false);
1484:	
1485:		ib_device_notify_register(device);
1486:	
1487:		ib_device_put(device);
1488:	
1489:		return 0;
1490:	
1491:	dev_cleanup:
1492:		device_del(&device->dev);
1493:	cg_cleanup:
1494:		dev_set_uevent_suppress(&device->dev, false);
1495:		ib_device_unregister_rdmacg(device);
1496:	cache_cleanup:
1497:		ib_cache_cleanup_one(device);
1498:		return ret;
1499:	}
 SourceFile:drivers/infiniband/core/device.c]

104/2 2026/05/21 21:16 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 60026
							output: 26
							thoughts: 46
						

Thoughts:
**Debugging Infiniband Driver Initialization**

Okay, hold on a second. I'm looking at this log message: "`infiniband syz1: added syz_tun`". That's interesting, but where is this actually being generated? I need to trace this back. Right, it looks like it's saying "added" somewhere. It's not immediately obvious that this message is in `ib_register_device`. I need to figure out where this log message is coming from. Let's do a quick search for the text `"infiniband %s: added %s"` in the codebase. That should quickly illuminate the source of this particular message. It is often the best approach to trace a log message back to its origin.



105/2 2026/05/21 21:16 tool grepper
0m Error:
no matches

Args:
map[Expression:"infiniband %s: added %s"]

Results:
map[Output:]

106/2 2026/05/21 21:16 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 60272
							output: 22
							thoughts: 14
						

Thoughts:
Here's my attempt at summarizing the thought process, tailored for an expert audience:

**Investigating Infiniband**

Okay, so I'm thinking, "Infiniband, huh?" The immediate path is a targeted search. I'll need to use `%s` to allow for variable substitution. I have some concepts floating in my head, but I'm not narrowing down the search terms yet. I need a broad view, and then I'll figure out what I need to target. I'll be looking for recent discussions, and relevant performance benchmarks. After all, I can't assume that anyone will take the same approach as I do. I should get a general overview, and then go deeper.



107/2 2026/05/21 21:16 tool grepper
0m Error:
no matches

Args:
map[Expression:"infiniband %s"]

Results:
map[Output:]

108/2 2026/05/21 21:16 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 60473
							output: 19
							thoughts: 84
						

Thoughts:
Here's my thought process, distilled:

**Digging into the Infiniband Log Output**

Okay, so I see this log message, "`infiniband syz1: added syz_tun`". My first thought is, where is that coming from? It's likely from either `dev_info` or `pr_info`, but knowing the source function would be helpful. The structure of that message, "infiniband syz1: " at the beginning suggests a `dev_info` call. If it's `dev_info(&device->dev, "added %s\n", ndev->name)`, then that prefix would be there. Time to search the codebase for that exact phrase, `"added %s"`. That's where I'll find the specific logging call.



109/2 2026/05/21 21:16 tool grepper
0m Error:
You are repeating the same tool call with the exact same arguments. Please synthesize the information you already have instead of repeating queries.

Args:
map[Expression:"added %s"]

110/2 2026/05/21 21:16 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 60787
							output: 15
							thoughts: 69
						

Thoughts:
**Refining My Search Strategy**

Okay, so I started with a pretty broad search: "added %s." I was hoping to quickly pinpoint where a specific string was introduced. But now, it seems like that might be a bit too general, and I've likely already covered that ground in my initial pass. Time to tighten things up.

My next instinct is to add a newline character, so I'll try `"added %s\n"` or just `added %s`. That might help narrow the results down by matching more specific patterns related to logging or code structure.

Wait a second, I just realized I did search for `"added"` at one point. It's likely I went through a bunch of matches in my initial scan and so I'll have to revisit that.

I'll check the `drivers/infiniband/sw/rxe/rxe.c` file for instances of "added". Let's see if that specific file contains the information I'm after. This targeted approach should hopefully be more efficient than casting a wider net.



111/2 2026/05/21 21:17 tool grepper
0m Args:
map[Expression:added]

Results:
map[Output:
Full output is too long, showing 500 out of 53311 lines.
Use more precise expression if possible.

[CREDITS=3656=E: hps@tanstaafl.de
 CREDITS:3657:D: added PCI support to the serial driver
 CREDITS-3658-S: Buckenhof, Germany
 --
 Documentation/ABI/obsolete/automount-tracefs-debugfs=5=Description:
 Documentation/ABI/obsolete/automount-tracefs-debugfs-6-
 Documentation/ABI/obsolete/automount-tracefs-debugfs:7:	The ftrace was first added to the kernel, its interface was placed
 Documentation/ABI/obsolete/automount-tracefs-debugfs-8-	into the debugfs file system under the "tracing" directory. Access
 --
 Documentation/ABI/obsolete/automount-tracefs-debugfs-15-	debugfs, the tracefs file system would automatically get mounted in
 Documentation/ABI/obsolete/automount-tracefs-debugfs:16:	the "tracing" directory of debugfs. The tracefs interface was added
 Documentation/ABI/obsolete/automount-tracefs-debugfs-17-	in January 2015 in the v4.1 kernel.
 --
 Documentation/ABI/obsolete/sysfs-kernel-kexec-kdump=42=Description:	read/write
 --
 Documentation/ABI/obsolete/sysfs-kernel-kexec-kdump-47-		reservation by writing a smaller value, and the reclaimed
 Documentation/ABI/obsolete/sysfs-kernel-kexec-kdump:48:		space is added back to the system RAM.
 Documentation/ABI/obsolete/sysfs-kernel-kexec-kdump-49-User:		Kdump service
 --
 Documentation/ABI/removed/video1394=4=Description:
 Documentation/ABI/removed/video1394-5-	/dev/video1394/* were character device files, one for each FireWire
 Documentation/ABI/removed/video1394:6:	controller, which were used for isochronous I/O.  It was added as an
 Documentation/ABI/removed/video1394-7-	alternative to raw1394's isochronous I/O functionality which had
 --
 Documentation/ABI/stable/syscalls=2=Description:
 Documentation/ABI/stable/syscalls-3-	This interface matches much of the POSIX interface and is based
 Documentation/ABI/stable/syscalls:4:	on it and other Unix based interfaces.  It will only be added to
 Documentation/ABI/stable/syscalls-5-	over time, and not have things removed from it.
 --
 Documentation/ABI/stable/sysfs-bus-usb=67=Description:
 --
 Documentation/ABI/stable/sysfs-bus-usb-73-		The file returns 0 if autosuspend support has not been
 Documentation/ABI/stable/sysfs-bus-usb:74:		added to the driver.
 Documentation/ABI/stable/sysfs-bus-usb-75-Users:
 --
 Documentation/ABI/stable/sysfs-class-infiniband=335=Description:
 Documentation/ABI/stable/sysfs-class-infiniband-336-		The sysfs iov directory is used to manage and examine the port
 Documentation/ABI/stable/sysfs-class-infiniband:337:		P_Key and guid paravirtualization. This directory is added only
 Documentation/ABI/stable/sysfs-class-infiniband-338-		for the master -- slaves do not have it.
 --
 Documentation/ABI/stable/sysfs-class-ubi=14=Description:
 --
 Documentation/ABI/stable/sysfs-class-ubi-18-		which cannot be done in a compatible manner, a new format
 Documentation/ABI/stable/sysfs-class-ubi:19:		version will be added. So this is a mechanism for possible
 Documentation/ABI/stable/sysfs-class-ubi-20-		future backward-compatible (but forward-incompatible)
 --
 Documentation/ABI/stable/sysfs-driver-speakup=130=Description:	A list of characters speakup repeats. Normally, when there are
 --
 Documentation/ABI/stable/sysfs-driver-speakup-133-		those characters. For example, "......" would be read as dot,
 Documentation/ABI/stable/sysfs-driver-speakup:134:		dot, dot. If a . is added to the list of characters in repeats,
 Documentation/ABI/stable/sysfs-driver-speakup-135-		"......" would be read as dot, dot, dot, times six.
 --
 Documentation/ABI/testing/evm=5=Description:
 --
 Documentation/ABI/testing/evm-59-
 Documentation/ABI/testing/evm:60:		Echoing a value is additive, the new value is added to the
 Documentation/ABI/testing/evm-61-		existing initialization flags.
 --
 Documentation/ABI/testing/evm=101=Description:
 --
 Documentation/ABI/testing/evm-103-		validate the EVM signature, and allows additional attributes
 Documentation/ABI/testing/evm:104:		to be added at runtime. Any signatures generated after
 Documentation/ABI/testing/evm:105:		additional attributes are added (and on files possessing those
 Documentation/ABI/testing/evm-106-		additional attributes) will only be valid if the same
 --
 Documentation/ABI/testing/ima_policy=4=Description:
 --
 Documentation/ABI/testing/ima_policy-152-		Example of measure rule using KEY_CHECK to only measure
 Documentation/ABI/testing/ima_policy:153:		keys added to .builtin_trusted_keys or .ima keyring:
 Documentation/ABI/testing/ima_policy-154-
 --
 Documentation/ABI/testing/sysfs-block-bcache=62=Description:
 --
 Documentation/ABI/testing/sysfs-block-bcache-64-		writes will be buffered in the cache. When off, caching is in
 Documentation/ABI/testing/sysfs-block-bcache:65:		writethrough mode; reads and writes will be added to the
 Documentation/ABI/testing/sysfs-block-bcache-66-		cache but no write buffering will take place.
 --
 Documentation/ABI/testing/sysfs-bus-auxiliary=4=Description:
 --
 Documentation/ABI/testing/sysfs-bus-auxiliary-7-		or VF's irq number located in msi_irqs directory.
 Documentation/ABI/testing/sysfs-bus-auxiliary:8:		These irq files are added and removed dynamically when an IRQ
 Documentation/ABI/testing/sysfs-bus-auxiliary-9-		is requested and freed respectively for the PCI SF.
 --
 Documentation/ABI/testing/sysfs-bus-cdx=4=Description:
 --
 Documentation/ABI/testing/sysfs-bus-cdx-6-		and devices on the CDX bus. Any new devices are scanned and
 Documentation/ABI/testing/sysfs-bus-cdx:7:		added to the list of Linux devices and any devices removed are
 Documentation/ABI/testing/sysfs-bus-cdx-8-		also deleted from Linux.
 --
 Documentation/ABI/testing/sysfs-bus-coresight-devices-tmc=5=Description:	(RW) Disables write access to the Trace RAM by stopping the
 --
 Documentation/ABI/testing/sysfs-bus-coresight-devices-tmc-7-		following the trigger event. Additional interface for this
 Documentation/ABI/testing/sysfs-bus-coresight-devices-tmc:8:		driver are expected to be added as it matures.
 Documentation/ABI/testing/sysfs-bus-coresight-devices-tmc-9-
 --
 Documentation/ABI/testing/sysfs-bus-iio=455=Description:
 Documentation/ABI/testing/sysfs-bus-iio:456:		If known for a device, offset to be added to <type>[Y]_raw prior
 Documentation/ABI/testing/sysfs-bus-iio-457-		to scaling by <type>[Y]_scale in order to obtain value in the
 --
 Documentation/ABI/testing/sysfs-bus-iio=1138=Description:
 --
 Documentation/ABI/testing/sysfs-bus-iio-1145-
 Documentation/ABI/testing/sysfs-bus-iio:1146:		For falling events the hysteresis is added to the _value attribute for
 Documentation/ABI/testing/sysfs-bus-iio-1147-		this event to get the upper threshold for when the event goes back to
 --
 Documentation/ABI/testing/sysfs-bus-pci=56=Description:
 Documentation/ABI/testing/sysfs-bus-pci-57-		Writing a device ID to this file will remove an ID
 Documentation/ABI/testing/sysfs-bus-pci:58:		that was dynamically added via the new_id sysfs entry.
 Documentation/ABI/testing/sysfs-bus-pci-59-		The format for the device ID is:
 --
 Documentation/ABI/testing/sysfs-bus-pci-drivers-ehci_hcd=6=Description:
 --
 Documentation/ABI/testing/sysfs-bus-pci-drivers-ehci_hcd-41-
 Documentation/ABI/testing/sysfs-bus-pci-drivers-ehci_hcd:42:		Note: When this file was first added, it appeared in a
 Documentation/ABI/testing/sysfs-bus-pci-drivers-ehci_hcd-43-		different sysfs directory.  The location given above is
 --
 Documentation/ABI/testing/sysfs-bus-siox=17=Description:
 --
 Documentation/ABI/testing/sysfs-bus-siox-28-
 Documentation/ABI/testing/sysfs-bus-siox:29:		The new device is added to the end of the existing chain.
 Documentation/ABI/testing/sysfs-bus-siox-30-
 --
 Documentation/ABI/testing/sysfs-bus-thunderbolt=68=Description:	This attribute is used to authorize Thunderbolt devices
 --
 Documentation/ABI/testing/sysfs-bus-thunderbolt-88-		    deauthorization attribute under domain contains 1)
 Documentation/ABI/testing/sysfs-bus-thunderbolt:89:		1   The 32 byte hex string is added to the device NVM and
 Documentation/ABI/testing/sysfs-bus-thunderbolt-90-		    the device is authorized.
 --
 Documentation/ABI/testing/sysfs-bus-usb=34=Description:
 --
 Documentation/ABI/testing/sysfs-bus-usb-54-
 Documentation/ABI/testing/sysfs-bus-usb:55:		Reading from this file will list all dynamically added
 Documentation/ABI/testing/sysfs-bus-usb-56-		device IDs in the same format, with one entry per
 --
 Documentation/ABI/testing/sysfs-bus-usb=79=Description:
 Documentation/ABI/testing/sysfs-bus-usb-80-		Writing a device ID to this file will remove an ID
 Documentation/ABI/testing/sysfs-bus-usb:81:		that was dynamically added via the new_id sysfs entry.
 Documentation/ABI/testing/sysfs-bus-usb-82-		The format for the device ID is:
 --
 Documentation/ABI/testing/sysfs-bus-usb-88-
 Documentation/ABI/testing/sysfs-bus-usb:89:		Reading from this file will list the dynamically added
 Documentation/ABI/testing/sysfs-bus-usb-90-		device IDs, exactly like reading from the entry
 --
 Documentation/ABI/testing/sysfs-class-hwmon=528=Description:
 Documentation/ABI/testing/sysfs-class-hwmon:529:		Temperature offset which is added to the temperature reading
 Documentation/ABI/testing/sysfs-class-hwmon-530-		by the chip.
 --
 Documentation/ABI/testing/sysfs-class-net-cdc_ncm=26=Description:
 --
 Documentation/ABI/testing/sysfs-class-net-cdc_ncm-37-
 Documentation/ABI/testing/sysfs-class-net-cdc_ncm:38:		A device entry should be added to the driver if this
 Documentation/ABI/testing/sysfs-class-net-cdc_ncm-39-		quirk is found to be required.
 --
 Documentation/ABI/testing/sysfs-class-rtc=72=Description:
 --
 Documentation/ABI/testing/sysfs-class-rtc-75-		adjustment. The unit is parts per billion, i.e. The number of
 Documentation/ABI/testing/sysfs-class-rtc:76:		clock ticks which are added to or removed from the rtc's base
 Documentation/ABI/testing/sysfs-class-rtc-77-		clock per billion ticks. A positive value makes a day pass more
 --
 Documentation/ABI/testing/sysfs-class-rtrs-client=44=Description:	Each path belonging to a given session is listed here by its source and
 Documentation/ABI/testing/sysfs-class-rtrs-client:45:		destination address. When a new path is added to a session by writing to
 Documentation/ABI/testing/sysfs-class-rtrs-client-46-		the "add_path" entry, a directory <src@dst> is created.
 --
 Documentation/ABI/testing/sysfs-devices=4=Description:
 --
 Documentation/ABI/testing/sysfs-devices-6-		internal state of the kernel device tree.  Devices will
 Documentation/ABI/testing/sysfs-devices:7:		be added and removed dynamically as the machine runs,
 Documentation/ABI/testing/sysfs-devices-8-		and between different kernel versions, the layout of the
 --
 Documentation/ABI/testing/sysfs-devices-16-		Or rely on the uevent messages to notify programs of
 Documentation/ABI/testing/sysfs-devices:17:		devices being added and removed from this tree to find
 Documentation/ABI/testing/sysfs-devices-18-		the location of those devices.
 --
 Documentation/ABI/testing/sysfs-devices-memory=4=Description:
 --
 Documentation/ABI/testing/sysfs-devices-memory-6-		internal state of the kernel memory blocks. Files could be
 Documentation/ABI/testing/sysfs-devices-memory:7:		added or removed dynamically to represent hot-add/remove
 Documentation/ABI/testing/sysfs-devices-memory-8-		operations.
 --
 Documentation/ABI/testing/sysfs-devices-waiting_for_supplier=4=Description:
 --
 Documentation/ABI/testing/sysfs-devices-waiting_for_supplier-10-		or 1) reflects whether the device is waiting for one or more
 Documentation/ABI/testing/sysfs-devices-waiting_for_supplier:11:		suppliers to be added and then linked to using device links
 Documentation/ABI/testing/sysfs-devices-waiting_for_supplier-12-		before the device can probe.
 --
 Documentation/ABI/testing/sysfs-devices-waiting_for_supplier-14-		A value of 0 means the device is not waiting for any suppliers
 Documentation/ABI/testing/sysfs-devices-waiting_for_supplier:15:		to be added before it can probe.  A value of 1 means the device
 Documentation/ABI/testing/sysfs-devices-waiting_for_supplier:16:		is waiting for one or more suppliers to be added before it can
 Documentation/ABI/testing/sysfs-devices-waiting_for_supplier-17-		probe.
 --
 Documentation/ABI/testing/sysfs-driver-hid-wiimote=33=Description:	While a device is initialized by the wiimote driver, we perform
 --
 Documentation/ABI/testing/sysfs-driver-hid-wiimote-40-		Other strings for each device-type are available and may be
 Documentation/ABI/testing/sysfs-driver-hid-wiimote:41:		added if new device-specific detections are added.
 Documentation/ABI/testing/sysfs-driver-hid-wiimote-42-		Currently supported are:
 --
 Documentation/ABI/testing/sysfs-driver-toshiba_acpi=24=Description:	This file controls the timeout of the keyboard backlight
 --
 Documentation/ABI/testing/sysfs-driver-toshiba_acpi-27-		Note that the kernel 3.15 only had support for the first
 Documentation/ABI/testing/sysfs-driver-toshiba_acpi:28:		keyboard type, the kernel 3.16 added support for the second
 Documentation/ABI/testing/sysfs-driver-toshiba_acpi-29-		type and the range accepted for type 2 is 1-60.
 --
 Documentation/ABI/testing/sysfs-kernel-kexec-kdump=32=Description:	read/write
 --
 Documentation/ABI/testing/sysfs-kernel-kexec-kdump-37-		reservation by writing a smaller value, and the reclaimed
 Documentation/ABI/testing/sysfs-kernel-kexec-kdump:38:		space is added back to the system RAM.
 Documentation/ABI/testing/sysfs-kernel-kexec-kdump-39-User:		Kdump service
 --
 Documentation/ABI/testing/sysfs-kernel-slab=178=Description:
 Documentation/ABI/testing/sysfs-kernel-slab-179-		The deactivate_to_head file shows how many times a partial cpu
 Documentation/ABI/testing/sysfs-kernel-slab:180:		slab was deactivated and added to the head of its node's partial
 Documentation/ABI/testing/sysfs-kernel-slab-181-		list.  It can be written to clear the current count.
 --
 Documentation/ABI/testing/sysfs-kernel-slab=189=Description:
 Documentation/ABI/testing/sysfs-kernel-slab-190-		The deactivate_to_tail file shows how many times a partial cpu
 Documentation/ABI/testing/sysfs-kernel-slab:191:		slab was deactivated and added to the tail of its node's partial
 Documentation/ABI/testing/sysfs-kernel-slab-192-		list.  It can be written to clear the current count.
 --
 Documentation/ABI/testing/sysfs-kernel-slab=209=Description:
 Documentation/ABI/testing/sysfs-kernel-slab-210-		The free_add_partial file shows how many times an object has
 Documentation/ABI/testing/sysfs-kernel-slab:211:		been freed in a full slab so that it had to added to its node's
 Documentation/ABI/testing/sysfs-kernel-slab-212-		partial list.  It can be written to clear the current count.
 --
 Documentation/ABI/testing/sysfs-timecard=288=Description:	(RW) The DCF and IRIG output signals are in UTC, while the
 Documentation/ABI/testing/sysfs-timecard-289-		TimeCard operates on TAI.  This attribute allows setting the
 Documentation/ABI/testing/sysfs-timecard:290:		offset in seconds, which is added to the TAI timebase for
 Documentation/ABI/testing/sysfs-timecard-291-		these formats.
 --
 Documentation/PCI/boot-interrupts.rst=88=In such a case a quirk to disable boot interrupt generation can be
 Documentation/PCI/boot-interrupts.rst:89:added. [1]_
 Documentation/PCI/boot-interrupts.rst-90-
 --
 Documentation/PCI/endpoint/pci-endpoint-cfs.rst=79=Non-transparent bridge), symlink of endpoint controller connected to primary
 Documentation/PCI/endpoint/pci-endpoint-cfs.rst:80:interface should be added in 'primary' directory and symlink of endpoint
 Documentation/PCI/endpoint/pci-endpoint-cfs.rst:81:controller connected to secondary interface should be added in 'secondary'
 Documentation/PCI/endpoint/pci-endpoint-cfs.rst-82-directory.
 --
 Documentation/PCI/endpoint/pci-ntb-function.rst=70=The format of Config Region is given below. All the fields here are 32 bits.
 --
 Documentation/PCI/endpoint/pci-ntb-function.rst-178-	in order to raise doorbell. EPF NTB can use either MSI or MSI-X to
 Documentation/PCI/endpoint/pci-ntb-function.rst:179:	ring doorbell (MSI-X support will be added later). MSI uses same
 Documentation/PCI/endpoint/pci-ntb-function.rst-180-	address for all the interrupts and MSI-X can provide different
 --
 Documentation/PCI/endpoint/pci-test-howto.rst=142=Using Endpoint Test function Device
 --
 Documentation/PCI/endpoint/pci-test-howto.rst-144-
 Documentation/PCI/endpoint/pci-test-howto.rst:145:Kselftest added in tools/testing/selftests/pci_endpoint can be used to run all
 Documentation/PCI/endpoint/pci-test-howto.rst-146-the default PCI endpoint tests. To build the Kselftest for PCI endpoint
 --
 Documentation/PCI/pci.rst=91=a pci_device_id table.
 Documentation/PCI/pci.rst-92-
 Documentation/PCI/pci.rst:93:New PCI IDs may be added to a device driver pci_ids table at runtime
 Documentation/PCI/pci.rst-94-as shown below::
 --
 Documentation/PCI/pci.rst=110=if all the pci_device_id entries have a non-zero driver_data value.
 Documentation/PCI/pci.rst-111-
 Documentation/PCI/pci.rst:112:Once added, the driver probe routine will be invoked for any unclaimed
 Documentation/PCI/pci.rst-113-PCI devices listed in its (newly updated) pci_ids list.
 --
 Documentation/RCU/Design/Data-Structures/Data-Structures.rst=741=its predecessor. Older callbacks are closer to the head of the list, and
 Documentation/RCU/Design/Data-Structures/Data-Structures.rst:742:new callbacks are added at the tail. This relationship between the
 Documentation/RCU/Design/Data-Structures/Data-Structures.rst-743-``->head`` pointer, the ``->tails[]`` array, and the callbacks is shown
 --
 Documentation/RCU/Design/Requirements/Requirements.rst=380=rcu_dereference(), and these two RCU API elements work together to
 Documentation/RCU/Design/Requirements/Requirements.rst:381:ensure that readers have a consistent view of newly added data elements.
 Documentation/RCU/Design/Requirements/Requirements.rst-382-
 --
 Documentation/RCU/Design/Requirements/Requirements.rst=457=combination of rcu_assign_pointer() and rcu_dereference(). This
 Documentation/RCU/Design/Requirements/Requirements.rst:458:guarantee allows data elements to be safely added to RCU-protected
 Documentation/RCU/Design/Requirements/Requirements.rst-459-linked data structures without disrupting RCU readers. This guarantee
 --
 Documentation/RCU/Design/Requirements/Requirements.rst=640=comes up with a good justification for a particular conditional RCU
 Documentation/RCU/Design/Requirements/Requirements.rst:641:primitive, it might well be implemented and added. After all, this
 Documentation/RCU/Design/Requirements/Requirements.rst-642-guarantee was reverse-engineered, not premeditated. The unconditional
 --
 Documentation/RCU/Design/Requirements/Requirements.rst=2693=initializing ``srcu_struct`` structures.
 Documentation/RCU/Design/Requirements/Requirements.rst-2694-
 Documentation/RCU/Design/Requirements/Requirements.rst:2695:More recently, the SRCU API has added polling interfaces:
 Documentation/RCU/Design/Requirements/Requirements.rst-2696-
 --
 Documentation/RCU/checklist.rst=12=over a rather long period of time, but improvements are always welcome!
 --
 Documentation/RCU/checklist.rst-49-	them -- even x86 allows later loads to be reordered to precede
 Documentation/RCU/checklist.rst:50:	earlier stores), and be prepared to explain why this added
 Documentation/RCU/checklist.rst-51-	complexity is worthwhile.  If you choose #c, be prepared to
 --
 Documentation/RCU/checklist.rst-99-		an RCU-protected list.	Alternatively, use the other
 Documentation/RCU/checklist.rst:100:		RCU-protected data structures that have been added to
 Documentation/RCU/checklist.rst-101-		the Linux kernel.
 --
 Documentation/RCU/checklist.rst-360-
 Documentation/RCU/checklist.rst:361:	One exception to this rule is when data is only ever added to
 Documentation/RCU/checklist.rst-362-	the linked data structure, and is never removed during any
 --
 Documentation/RCU/listRCU.rst=12=modify the list.  The reader is guaranteed to see all of the elements
 Documentation/RCU/listRCU.rst:13:which were added to the list before they acquired the rcu_read_lock()
 Documentation/RCU/listRCU.rst-14-and are still on the list when they drop the rcu_read_unlock().
 Documentation/RCU/listRCU.rst:15:Elements which are added to, or removed from the list may or may not
 Documentation/RCU/listRCU.rst-16-be seen.  If the writer calls list_replace_rcu(), the reader may see
 --
 Documentation/RCU/listRCU.rst=88=Internet from changing, and it is the state of the external Internet
 Documentation/RCU/listRCU.rst:89:that really matters.  In addition, routing entries are typically added
 Documentation/RCU/listRCU.rst-90-or deleted, rather than being modified in place.  This is a rare example
 --
 Documentation/RCU/listRCU.rst=226=readers to fail spectacularly.
 Documentation/RCU/listRCU.rst-227-
 Documentation/RCU/listRCU.rst:228:So, when readers can tolerate stale data and when entries are either added or
 Documentation/RCU/listRCU.rst-229-deleted, without in-place modification, it is very easy to use RCU!
 --
 Documentation/RCU/listRCU.rst=236=if it did, the reader-writer-locked code to do so might look as follows
 Documentation/RCU/listRCU.rst:237:(assuming only ``field_count`` is updated, otherwise, the added fields would
 Documentation/RCU/listRCU.rst-238-need to be filled in)::
 --
 Documentation/RCU/listRCU.rst=386=This too assumes that the caller holds ``audit_filter_mutex``.
 Documentation/RCU/listRCU.rst-387-
 Documentation/RCU/listRCU.rst:388:Note that this example assumes that entries are only added and deleted.
 Documentation/RCU/listRCU.rst-389-Additional mechanism is required to deal correctly with the update-in-place
 --
 Documentation/RCU/listRCU.rst=405=advance of their scheduled expiry. To facilitate this, all such timers
 Documentation/RCU/listRCU.rst:406:are added to an RCU-managed ``cancel_list`` when they are setup in
 Documentation/RCU/listRCU.rst-407-``timerfd_setup_cancel()``::
 --
 Documentation/RCU/listRCU.rst=490=the most amenable to use of RCU.  The simplest case is where entries are
 Documentation/RCU/listRCU.rst:491:either added or deleted from the data structure (or atomically modified
 Documentation/RCU/listRCU.rst-492-in place), but non-atomic in-place modifications can be handled by making
 --
 Documentation/RCU/lockdep-splat.rst=4=Lockdep-RCU Splat
 --
 Documentation/RCU/lockdep-splat.rst-6-
 Documentation/RCU/lockdep-splat.rst:7:Lockdep-RCU was added to the Linux kernel in early 2010
 Documentation/RCU/lockdep-splat.rst-8-(http://lwn.net/Articles/371986/).  This facility checks for some common
 --
 Documentation/RCU/rcu_dereference.rst=25=readers working properly:
 --
 Documentation/RCU/rcu_dereference.rst-44-
 Documentation/RCU/rcu_dereference.rst:45:-	In the special case where data is added but is never removed
 Documentation/RCU/rcu_dereference.rst-46-	while readers are accessing the structure, READ_ONCE() may be used
 --
 Documentation/RCU/rcubarrier.rst=319=Answer:
 --
 Documentation/RCU/rcubarrier.rst-328-	Note that this was not a problem when the rcu_barrier() code
 Documentation/RCU/rcubarrier.rst:329:	was first added back in 2005.  This is because on_each_cpu()
 Documentation/RCU/rcubarrier.rst-330-	disables preemption, which acted as an RCU read-side critical
 --
 Documentation/RCU/rcuref.rst=91=CODE LISTING C::
 --
 Documentation/RCU/rcuref.rst-118-
 Documentation/RCU/rcuref.rst:119:The key point is that the initial reference added by add() is not removed
 Documentation/RCU/rcuref.rst-120-until after a grace period has elapsed following removal.  This means that
 --
 Documentation/RCU/stallwarn.rst=18=warnings:
 --
 Documentation/RCU/stallwarn.rst-36-	with boot-time message rates, and will frequently result in
 Documentation/RCU/stallwarn.rst:37:	RCU CPU stall warning messages.  Especially if you have added
 Documentation/RCU/stallwarn.rst-38-	debug printk()s.
 --
 Documentation/RCU/whatisRCU.rst=28=What is RCU?
 Documentation/RCU/whatisRCU.rst-29-
 Documentation/RCU/whatisRCU.rst:30:RCU is a synchronization mechanism that was added to the Linux kernel
 Documentation/RCU/whatisRCU.rst-31-during the 2.5 development effort that is optimized for read-mostly
 --
 Documentation/RCU/whatisRCU.rst=278=rcu_dereference()
 --
 Documentation/RCU/whatisRCU.rst-359-	update-side code as well as by RCU readers, then an additional
 Documentation/RCU/whatisRCU.rst:360:	lockdep expression can be added to its list of arguments.
 Documentation/RCU/whatisRCU.rst-361-	For example, given an additional "lock_is_held(&mylock)" argument,
 --
 Documentation/RCU/whatisRCU.rst=543=so the function is not permitted to block.  The foo struct needs to
 Documentation/RCU/whatisRCU.rst:544:have an rcu_head structure added, perhaps as follows::
 Documentation/RCU/whatisRCU.rst-545-
 --
 Documentation/RCU/whatisRCU.rst=1003=lock analogy looks at larger multi-part objects such as a linked list
 Documentation/RCU/whatisRCU.rst:1004:and shows how RCU can facilitate concurrency while elements are added
 Documentation/RCU/whatisRCU.rst-1005-to, and removed from, the list.  The reference-count analogy looks at
 --
 Documentation/accel/introduction.rst=53=collaborate with DRM developers that have experience with this type of
 Documentation/accel/introduction.rst:54:devices. In addition, new features that will be added for the accelerator
 Documentation/accel/introduction.rst-55-drivers can be of use to GPU drivers as well.
 --
 Documentation/accounting/taskstats-struct.rst=41=should not change the relative position of each field within the struct.
 --
 Documentation/accounting/taskstats-struct.rst-153-	/* Accumulated RSS usage in duration of a task, in MBytes-usecs.
 Documentation/accounting/taskstats-struct.rst:154:	 * The current rss usage is added to this counter every time
 Documentation/accounting/taskstats-struct.rst-155-	 * a tick is charged to a task's system time. So, at the end we
 --
 Documentation/accounting/taskstats.rst=63=per-tgid data. It is versioned and can be extended by each accounting subsystem
 Documentation/accounting/taskstats.rst:64:that is added to the kernel. The fields and their semantics are defined in the
 Documentation/accounting/taskstats.rst-65-taskstats.h file.
 --
 Documentation/accounting/taskstats.rst=132=When a user queries to get per-tgid data, the sum of all other live threads in
 Documentation/accounting/taskstats.rst:133:the group is added up and added to the accumulated total for previously exited
 Documentation/accounting/taskstats.rst-134-threads of the same thread group.
 --
 Documentation/accounting/taskstats.rst=139=There are two ways to extend the taskstats interface to export more
 Documentation/accounting/taskstats.rst:140:per-task/process stats as patches to collect them get added to the kernel
 Documentation/accounting/taskstats.rst-141-in future:
 --
 Documentation/accounting/taskstats.rst=154=Choosing between 1. and 2. is a matter of trading off flexibility and
 Documentation/accounting/taskstats.rst:155:overhead. If only a few fields need to be added, then 1. is the preferable
 Documentation/accounting/taskstats.rst-156-path since the kernel and userspace don't need to incur the overhead of
 --
 Documentation/admin-guide/LSM/SafeSetID.rst=117=once we have the policy checking code in place, which will rely on GID policy
 Documentation/admin-guide/LSM/SafeSetID.rst:118:configuration code added in v5.9.
 --
 Documentation/admin-guide/LSM/Smack.rst=595=system startup. The contents are written to the special file
 Documentation/admin-guide/LSM/Smack.rst:596:/sys/fs/smackfs/load2. Rules can be added at any time and take effect
 Documentation/admin-guide/LSM/Smack.rst-597-immediately. For any pair of subject and object labels there can be only
 --
 Documentation/admin-guide/LSM/Smack.rst=862=access mode will logged. When a new label is introduced for processes
 Documentation/admin-guide/LSM/Smack.rst:863:rules can be added aggressively, marked with the "b". The logging allows
 Documentation/admin-guide/LSM/Smack.rst-864-tracking of which rules actual get used for that label.
 --
 Documentation/admin-guide/LSM/ipe.rst=110=to take the initiative, and existing interpreters won't be automatically
 Documentation/admin-guide/LSM/ipe.rst:111:supported unless the signal call is added.
 Documentation/admin-guide/LSM/ipe.rst-112-
 --
 Documentation/admin-guide/RAS/main.rst=243=Other hardware elements
 --
 Documentation/admin-guide/RAS/main.rst-245-
 Documentation/admin-guide/RAS/main.rst:246:A new feature for EDAC, the ``edac_device`` class of device, was added in
 Documentation/admin-guide/RAS/main.rst-247-the 2.6.23 version of the kernel.
 --
 Documentation/admin-guide/README.rst=148=Configuring the kernel
 --
 Documentation/admin-guide/README.rst-151-   Do not skip this step even if you are only upgrading one minor
 Documentation/admin-guide/README.rst:152:   version.  New configuration options are added in each release, and
 Documentation/admin-guide/README.rst-153-   odd problems will turn up if the configuration files are not set up
 --
 Documentation/admin-guide/bcache.rst=482=writeback_running
 Documentation/admin-guide/bcache.rst-483-  If off, writeback of dirty data will not take place at all. Dirty data will
 Documentation/admin-guide/bcache.rst:484:  still be added to the cache until it is mostly full; only meant for
 Documentation/admin-guide/bcache.rst-485-  benchmarking. Defaults to on.
 --
 Documentation/admin-guide/binfmt-misc.rst=107=right.
 Documentation/admin-guide/binfmt-misc.rst-108-
 Documentation/admin-guide/binfmt-misc.rst:109:Think about the order of adding entries! Later added entries are matched first!
 Documentation/admin-guide/binfmt-misc.rst-110-
 --
 Documentation/admin-guide/blockdev/paride.rst=16=external devices are actually identical to an internal model, but with
 Documentation/admin-guide/blockdev/paride.rst:17:a parallel-port adapter chip added in.  Some of the original parallel port
 Documentation/admin-guide/blockdev/paride.rst-18-adapters were little more than mechanisms for multiplexing a SCSI bus.
 --
 Documentation/admin-guide/blockdev/zoned_loop.rst=125=The remove command does not have any option.
 Documentation/admin-guide/blockdev/zoned_loop.rst-126-
 Documentation/admin-guide/blockdev/zoned_loop.rst:127:A zoned device that was removed can be re-added again without any change to the
 Documentation/admin-guide/blockdev/zoned_loop.rst-128-state of the device zones: the device zones are restored to their last state
 --
 Documentation/admin-guide/blockdev/zoned_loop.rst=130=must always be done using the same configuration as when the device was first
 Documentation/admin-guide/blockdev/zoned_loop.rst:131:added. If a zone configuration change is detected, an error will be returned and
 Documentation/admin-guide/blockdev/zoned_loop.rst-132-the zoned device will not be created.
 --
 Documentation/admin-guide/blockdev/zoned_loop.rst=182=Deleting this device is done using the command::
 --
 Documentation/admin-guide/blockdev/zoned_loop.rst-185-
 Documentation/admin-guide/blockdev/zoned_loop.rst:186:The removed device can be re-added again using the same "add" command as when
 Documentation/admin-guide/blockdev/zoned_loop.rst-187-the device was first created. To fully delete a zoned device, its backing files
 --
 Documentation/admin-guide/bootconfig.rst=175=Since the boot configuration file is loaded with initrd by default,
 Documentation/admin-guide/bootconfig.rst:176:it will be added to the end of the initrd (initramfs) image file with
 Documentation/admin-guide/bootconfig.rst-177-padding, size, checksum and 12-byte magic word as below.
 --
 Documentation/admin-guide/bootconfig.rst=181=The size and checksum fields are unsigned 32bit little endian value.
 Documentation/admin-guide/bootconfig.rst-182-
 Documentation/admin-guide/bootconfig.rst:183:When the boot configuration is added to the initrd image, the total
 Documentation/admin-guide/bootconfig.rst-184-file size is aligned to 4 bytes. To fill the gap, null characters
 Documentation/admin-guide/bootconfig.rst:185:(``\0``) will be added. Thus the ``size`` is the length of the bootconfig
 Documentation/admin-guide/bootconfig.rst-186-file + padding bytes.
 --
 Documentation/admin-guide/bug-bisect.rst=115=linux-next branches 'stable' and 'master'. The following commands will start
 Documentation/admin-guide/bug-bisect.rst:116:the process for a linux-next tree you added as a remote called 'next'::
 Documentation/admin-guide/bug-bisect.rst-117-
 --
 Documentation/admin-guide/bug-hunting.rst=252=its maintainers with::
 --
 Documentation/admin-guide/bug-hunting.rst-257-	Tejun Heo <tj@kernel.org> (commit_signer:1/1=100%)
 Documentation/admin-guide/bug-hunting.rst:258:	Bhaktipriya Shridhar <bhaktipriya96@gmail.com> (commit_signer:1/1=100%,authored:1/1=100%,added_lines:4/4=100%,removed_lines:9/9=100%)
 Documentation/admin-guide/bug-hunting.rst-259-	linux-media@vger.kernel.org (open list:GSPCA USB WEBCAM DRIVER)
 --
 Documentation/admin-guide/cgroup-v1/cgroups.rst=227=child cgroups then the hierarchy will be deactivated.
 Documentation/admin-guide/cgroup-v1/cgroups.rst-228-
 Documentation/admin-guide/cgroup-v1/cgroups.rst:229:No new system calls are added for cgroups - all support for
 Documentation/admin-guide/cgroup-v1/cgroups.rst-230-querying and modifying cgroups is via this cgroup file system.
 Documentation/admin-guide/cgroup-v1/cgroups.rst-231-
 Documentation/admin-guide/cgroup-v1/cgroups.rst:232:Each task under /proc has an added file named 'cgroup' displaying,
 Documentation/admin-guide/cgroup-v1/cgroups.rst-233-for each active hierarchy, the subsystem names and the cgroup name
 --
 Documentation/admin-guide/cgroup-v1/cgroups.rst=417=In this directory you can find several files::
 --
 Documentation/admin-guide/cgroup-v1/cgroups.rst-420-  cgroup.procs notify_on_release tasks
 Documentation/admin-guide/cgroup-v1/cgroups.rst:421:  (plus whatever files added by the attached subsystems)
 Documentation/admin-guide/cgroup-v1/cgroups.rst-422-
 --
 Documentation/admin-guide/cgroup-v1/cpusets.rst=156=browsing and modifying the cpusets presently known to the kernel.  No
 Documentation/admin-guide/cgroup-v1/cpusets.rst:157:new system calls are added for cpusets - all support for querying and
 Documentation/admin-guide/cgroup-v1/cpusets.rst-158-modifying cpusets is via this cpuset file system.
 Documentation/admin-guide/cgroup-v1/cpusets.rst-159-
 Documentation/admin-guide/cgroup-v1/cpusets.rst:160:The /proc/<pid>/status file for each task has four added lines,
 Documentation/admin-guide/cgroup-v1/cpusets.rst-161-displaying the task's cpus_allowed (on which CPUs it may be scheduled)
 --
 Documentation/admin-guide/cgroup-v1/cpusets.rst=827=To add a CPU to a cpuset, write the new list of CPUs including the
]
]

112/2 2026/05/21 21:17 llm expert
1m Model:
gemini-3.1-pro-preview

Tokens:
							input: 71814
							output: 51
							thoughts: 505
						

Thoughts:
**Debugging an Infiniband Refcount Leak**

Okay, so I'm chasing this "infiniband syz1: added syz_tun" log entry. My initial thought is that `syz_tun` could be a network device, and `infiniband syz1` the IB device name. It seems likely, given the context. Let's see... does `ib_register_device` use `dev_info` or `pr_info`? Need to double-check `rds_ib_add_one`. Ah, here it is: `pr_info("RDS/IB: %s: added\n", device->name);` confirming that expectation.

And then I see the log:  "smc: adding ib device syz1 with port count 1" followed by "smc: ib device syz1 port 1 has no pnetid".  That's coming from `smc_ib_add_dev`, using `pr_warn_ratelimited`. Then I get these I/O errors and, after that, the IB device `syz1` is being removed.

The removal is key – I see "smc: removing ib device syz1" and "smbdirect: ib_dev[syz1] removed." That's the trigger. When an IB device is removed, `smc_ib_remove_dev` gets called. This leads to `ib_device_release`, and importantly, `release_gid_table` gets called, which is where the refcount leak warning originates.

So, who's leaking the refcount? The leak is on `dev syz1 index 2`. Index 2 relates to a GID entry. Now I'm thinking, who adds GID entries? The GID table gets populated when an IB device is added. I should check `roce_gid_table_add_default` now. That's the logical next step.



113/2 2026/05/21 21:18 tool codesearch-definition-source
0m Error:
requested entity does not exist

Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:roce_gid_table_add_default]

Results:
map[SourceCode: SourceFile:]

114/2 2026/05/21 21:18 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 72814
							output: 47
							thoughts: 12
						

Thoughts:
Okay, here's my summary, taking the role of the thinker:

**Checking `add_default_gids`**

Right, let's dive in. First things first, I need to take a look at `add_default_gids`. I want to verify its implementation and how it's being used. I need to understand its function and ensure it aligns with the overall system design. Is it behaving as expected? Are there any potential edge cases that need attention? What are the implications of its execution path within the broader context? I need to quickly identify any potential issues or areas for improvement. Let's see what's what.



115/2 2026/05/21 21:18 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:add_default_gids]

Results:
map[SourceCode: 462:	static void add_default_gids(struct ib_device *ib_dev, u32 port,
 463:				     struct net_device *rdma_ndev, void *cookie)
 464:	{
 465:		struct net_device *event_ndev = cookie;
 466:		unsigned long gid_type_mask;
 467:	
 468:		gid_type_mask = roce_gid_type_mask_support(ib_dev, port);
 469:		ib_cache_gid_set_default_gid(ib_dev, port, event_ndev, gid_type_mask,
 470:					     IB_CACHE_GID_DEFAULT_MODE_SET);
 471:	}
 SourceFile:drivers/infiniband/core/roce_gid_mgmt.c]

116/2 2026/05/21 21:18 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 73245
							output: 57
							thoughts: 17
						

Thoughts:
Okay, here's my interpretation of that thought process, assuming I'm deeply familiar with InfiniBand and related caching mechanisms:

**Analyzing the `ib_cache_gid_set_default_gid` Function Call**

Alright, let's dive into this. The fact that I'm focusing on `ib_cache_gid_set_default_gid` immediately tells me we're looking at something fundamental to how InfiniBand Global Identifier (GID) caching is handled. This function likely plays a key role in either setting or modifying the default GID for a particular cache entry or for the caching system as a whole. Knowing how GID caching works is *essential* for optimized InfiniBand performance. Any misconfiguration or unexpected behavior here can lead to significant latency and throughput penalties.

I need to understand:

*   What triggers a call to `ib_cache_gid_set_default_gid`? Is it on device initialization, per-port setup, or perhaps triggered by specific events (like a LID mapping change)? The context will be important.
*   What does "default" mean in this context? Is it the GID that's used when a more specific GID isn't known or configured? Or is it a base GID for a particular subnet, port, or partition?
*   What are the arguments passed to this function? Knowing the parameters will tell me what specific GID and related information it's operating on (like the device, port, or cache entry handle). Are there any flags or options involved?
*   How does this function interact with the underlying cache structures? Is it a simple write, or does it potentially involve searching, locking, or cache invalidation? Are there any side effects?
*   What other related functions are called? `ib_cache_gid_lookup` or `ib_cache_gid_invalidate` might be good functions to look at next, to understand the whole picture.

Given my background, I immediately see the potential implications of this function, from addressing inefficiencies in network setup to improving data transmission speeds. My next step will be to explore its implementation in the IB stack to grasp its impact better.



117/2 2026/05/21 21:18 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/roce_gid_mgmt.c IncludeLines:true Name:ib_cache_gid_set_default_gid]

Results:
map[SourceCode: 832:	void ib_cache_gid_set_default_gid(struct ib_device *ib_dev, u32 port,
 833:					  struct net_device *ndev,
 834:					  unsigned long gid_type_mask,
 835:					  enum ib_cache_gid_default_mode mode)
 836:	{
 837:		union ib_gid gid = { };
 838:		struct ib_gid_attr gid_attr;
 839:		unsigned int gid_type;
 840:		unsigned long mask;
 841:	
 842:		mask = GID_ATTR_FIND_MASK_GID_TYPE |
 843:		       GID_ATTR_FIND_MASK_DEFAULT |
 844:		       GID_ATTR_FIND_MASK_NETDEV;
 845:		memset(&gid_attr, 0, sizeof(gid_attr));
 846:		gid_attr.ndev = ndev;
 847:	
 848:		for (gid_type = 0; gid_type < IB_GID_TYPE_SIZE; ++gid_type) {
 849:			if (1UL << gid_type & ~gid_type_mask)
 850:				continue;
 851:	
 852:			gid_attr.gid_type = gid_type;
 853:	
 854:			if (mode == IB_CACHE_GID_DEFAULT_MODE_SET) {
 855:				make_default_gid(ndev, &gid);
 856:				__ib_cache_gid_add(ib_dev, port, &gid,
 857:						   &gid_attr, mask, true);
 858:			} else if (mode == IB_CACHE_GID_DEFAULT_MODE_DELETE) {
 859:				_ib_cache_gid_del(ib_dev, port, &gid,
 860:						  &gid_attr, mask, true);
 861:			}
 862:		}
 863:	}
 SourceFile:drivers/infiniband/core/cache.c]

118/2 2026/05/21 21:18 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 74348
							output: 49
							thoughts: 207
						

Thoughts:
**Debugging a GID Cache Leak**

Okay, so I'm looking at this warning message, and it's got me thinking. It says the GID entry's reference count is 1, even after it should have been freed. That's a classic memory leak indicator. Let's break this down.

First, `__ib_cache_gid_add` seems to be responsible for *adding* the GID in the first place, so that's the setup. Then, on device removal, `ib_cache_cleanup_one` calls `gid_table_cleanup_one`, which leads to `cleanup_gid_table_port`, and finally `del_gid`. `del_gid` is the one calling `put_gid_entry_locked(entry)`. The important thing here is, if the refcount was initially 1, then the entry gets freed. But the warning says `ref=1`, meaning *someone* held a second reference. So, the refcount was 2, now it's 1. Someone grabbed a reference and forgot to let it go!

The key question now is, who takes these references? I know `rdma_get_gid_attr` is one function that does, and `rdma_hold_gid_attr` does too. I think we have found the culprit! Let's check `rdma_get_gid_attr`. That's where I'll start digging.



119/2 2026/05/21 21:18 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:rdma_get_gid_attr]

Results:
map[SourceCode:1169:	/**
1170:	 * rdma_get_gid_attr - Returns GID attributes for a port of a device
1171:	 * at a requested gid_index, if a valid GID entry exists.
1172:	 * @device:		The device to query.
1173:	 * @port_num:		The port number on the device where the GID value
1174:	 *			is to be queried.
1175:	 * @index:		Index of the GID table entry whose attributes are to
1176:	 *                      be queried.
1177:	 *
1178:	 * rdma_get_gid_attr() acquires reference count of gid attributes from the
1179:	 * cached GID table. Caller must invoke rdma_put_gid_attr() to release
1180:	 * reference to gid attribute regardless of link layer.
1181:	 *
1182:	 * Returns pointer to valid gid attribute or ERR_PTR for the appropriate error
1183:	 * code.
1184:	 */
1185:	const struct ib_gid_attr *
1186:	rdma_get_gid_attr(struct ib_device *device, u32 port_num, int index)
1187:	{
1188:		const struct ib_gid_attr *attr = ERR_PTR(-ENODATA);
1189:		struct ib_gid_table *table;
1190:		unsigned long flags;
1191:	
1192:		if (!rdma_is_port_valid(device, port_num))
1193:			return ERR_PTR(-EINVAL);
1194:	
1195:		table = rdma_gid_table(device, port_num);
1196:		if (index < 0 || index >= table->sz)
1197:			return ERR_PTR(-EINVAL);
1198:	
1199:		read_lock_irqsave(&table->rwlock, flags);
1200:		if (!is_gid_entry_valid(table->data_vec[index]))
1201:			goto done;
1202:	
1203:		get_gid_entry(table->data_vec[index]);
1204:		attr = &table->data_vec[index]->attr;
1205:	done:
1206:		read_unlock_irqrestore(&table->rwlock, flags);
1207:		return attr;
1208:	}
 SourceFile:drivers/infiniband/core/cache.c]

120/2 2026/05/21 21:18 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 75603
							output: 47
							thoughts: 718
						

Thoughts:
**Investigating Potential Reference Leaks with `rdma_get_gid_attr`**

Okay, let's retrace our steps. I need to figure out which code paths call `rdma_get_gid_attr`, because that's the one we are investigating. We looked at this before but let's refresh. Ah, right, `smc_ib_fill_mac` uses it, calling both `rdma_get_gid_attr` and `rdma_put_gid_attr`. My initial worry was that `smc_ib_fill_mac` might get interrupted or fail between those calls, leaking the reference, but the code always calls `rdma_put_gid_attr` so that's not the issue.

Now, hold on... what about `rdma_fill_sgid_attr`? This one is interesting. Let's see... the relevant code snippet shows it gets a `gid_attr`, but it *moves ownership* of the reference into `ah_attr`. Okay, so where is *that* called? Looking at the codebase it seems `rdma_fill_sgid_attr` is called by `rdma_create_ah`, `rdma_modify_ah`, and `_ib_modify_qp`.

So, `rdma_create_ah` creates an Address Handle (AH). When the AH is destroyed, we have `rdma_destroy_ah_user` which then calls `rdma_destroy_ah_attr`, which *finally* calls `rdma_put_gid_attr`.

However, the more I think about it, the issue is not in `smc_ib_fill_mac`. The problem that needs to be explored is what happens if `rdma_create_ah` *fails* after it has called `rdma_fill_sgid_attr` but before the AH destruction path can be reached? Does it properly release the reference it gained in `rdma_fill_sgid_attr`? That's the key question, and it's the next place I need to dig deeper. This seems like the most likely leak scenario.



121/2 2026/05/21 21:18 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:rdma_create_ah]

Results:
map[SourceCode: 603:	/**
 604:	 * rdma_create_ah - Creates an address handle for the
 605:	 * given address vector.
 606:	 * @pd: The protection domain associated with the address handle.
 607:	 * @ah_attr: The attributes of the address vector.
 608:	 * @flags: Create address handle flags (see enum rdma_create_ah_flags).
 609:	 *
 610:	 * It returns 0 on success and returns appropriate error code on error.
 611:	 * The address handle is used to reference a local or global destination
 612:	 * in all UD QP post sends.
 613:	 */
 614:	struct ib_ah *rdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr,
 615:				     u32 flags)
 616:	{
 617:		const struct ib_gid_attr *old_sgid_attr;
 618:		struct net_device *slave;
 619:		struct ib_ah *ah;
 620:		int ret;
 621:	
 622:		ret = rdma_fill_sgid_attr(pd->device, ah_attr, &old_sgid_attr);
 623:		if (ret)
 624:			return ERR_PTR(ret);
 625:		slave = rdma_lag_get_ah_roce_slave(pd->device, ah_attr,
 626:						   (flags & RDMA_CREATE_AH_SLEEPABLE) ?
 627:						   GFP_KERNEL : GFP_ATOMIC);
 628:		if (IS_ERR(slave)) {
 629:			rdma_unfill_sgid_attr(ah_attr, old_sgid_attr);
 630:			return ERR_CAST(slave);
 631:		}
 632:		ah = _rdma_create_ah(pd, ah_attr, flags, NULL, slave);
 633:		rdma_lag_put_ah_roce_slave(slave);
 634:		rdma_unfill_sgid_attr(ah_attr, old_sgid_attr);
 635:		return ah;
 636:	}
 SourceFile:drivers/infiniband/core/verbs.c]

122/2 2026/05/21 21:18 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 77468
							output: 51
							thoughts: 41
						

Thoughts:
Okay, here's my interpretation of that thought process, from an expert's perspective:

**Diving Deep into RDMA Address Handles**

Hmm, interesting. My mental radar just picked up on something. I was tracing the flow of `rdma_create_ah` and, hang on a second... it calls `rdma_unfill_sgid_attr`? That's not what I expected. Usually, I'd see an `rdma_fill_sgid_attr` function here, or something similar to prepare the attributes, but 'unfill'? That's a curious choice. 

Alright, time to shift gears. Instead of forging ahead, I need to understand what `rdma_unfill_sgid_attr` is actually doing. My immediate next step is to drill into *that* function and see what's happening. I need to understand what it means to "unfill" SGID attributes within the context of creating an address handle. What's it doing with those attributes, and why is it seemingly *undoing* something that I would expect to have been done? There's got to be a good reason for this. Let's see...



123/2 2026/05/21 21:18 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:rdma_unfill_sgid_attr]

Results:
map[SourceCode: 527:	static void rdma_unfill_sgid_attr(struct rdma_ah_attr *ah_attr,
 528:					  const struct ib_gid_attr *old_sgid_attr)
 529:	{
 530:		/*
 531:		 * Fill didn't change anything, the caller retains ownership of
 532:		 * whatever it passed
 533:		 */
 534:		if (ah_attr->grh.sgid_attr == old_sgid_attr)
 535:			return;
 536:	
 537:		/*
 538:		 * Otherwise, we need to undo what rdma_fill_sgid_attr so the caller
 539:		 * doesn't see any change in the rdma_ah_attr. If we get here
 540:		 * old_sgid_attr is NULL.
 541:		 */
 542:		rdma_destroy_ah_attr(ah_attr);
 543:	}
 SourceFile:drivers/infiniband/core/verbs.c]

124/2 2026/05/21 21:18 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 78117
							output: 48
							thoughts: 89
						

Thoughts:
Okay, let me break this down.

**RDMA Address Handle Lifecycle: A Quick Review**

So, I'm tracing the lifecycle of an RDMA address handle. `rdma_destroy_ah_attr`, that's the cleanup function, and I see it calls `rdma_put_gid_attr`. Makes sense, we're releasing resources associated with the Global ID attribute. But wait a minute... I need to consider how that GID attribute was acquired in the first place.

My initial thought was, if `rdma_create_ah` calls `rdma_unfill_sgid_attr`, it implies that `ah_attr` is returned to its initial state after the call. But now I am not so sure. `_rdma_create_ah` takes `ah_attr` as a parameter. It is really starting to feel like the function takes ownership of the GID attribute. I need to be sure before I finalize anything, as my assumption here could have some real implications downstream. This ownership question is crucial for understanding memory management and potential double-frees or leaks if I am wrong. I need to examine the function calls within `rdma_create_ah` to figure out if it's truly taking possession or just borrowing.



125/2 2026/05/21 21:18 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:_rdma_create_ah]

Results:
map[SourceCode: 558:	static struct ib_ah *_rdma_create_ah(struct ib_pd *pd,
 559:					     struct rdma_ah_attr *ah_attr,
 560:					     u32 flags,
 561:					     struct ib_udata *udata,
 562:					     struct net_device *xmit_slave)
 563:	{
 564:		struct rdma_ah_init_attr init_attr = {};
 565:		struct ib_device *device = pd->device;
 566:		struct ib_ah *ah;
 567:		int ret;
 568:	
 569:		might_sleep_if(flags & RDMA_CREATE_AH_SLEEPABLE);
 570:	
 571:		if (!udata && !device->ops.create_ah)
 572:			return ERR_PTR(-EOPNOTSUPP);
 573:	
 574:		ah = rdma_zalloc_drv_obj_gfp(
 575:			device, ib_ah,
 576:			(flags & RDMA_CREATE_AH_SLEEPABLE) ? GFP_KERNEL : GFP_ATOMIC);
 577:		if (!ah)
 578:			return ERR_PTR(-ENOMEM);
 579:	
 580:		ah->device = device;
 581:		ah->pd = pd;
 582:		ah->type = ah_attr->type;
 583:		ah->sgid_attr = rdma_update_sgid_attr(ah_attr, NULL);
 584:		init_attr.ah_attr = ah_attr;
 585:		init_attr.flags = flags;
 586:		init_attr.xmit_slave = xmit_slave;
 587:	
 588:		if (udata)
 589:			ret = device->ops.create_user_ah(ah, &init_attr, udata);
 590:		else
 591:			ret = device->ops.create_ah(ah, &init_attr, NULL);
 592:		if (ret) {
 593:			if (ah->sgid_attr)
 594:				rdma_put_gid_attr(ah->sgid_attr);
 595:			kfree(ah);
 596:			return ERR_PTR(ret);
 597:		}
 598:	
 599:		atomic_inc(&pd->usecnt);
 600:		return ah;
 601:	}
 SourceFile:drivers/infiniband/core/verbs.c]

126/2 2026/05/21 21:18 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 79244
							output: 46
							thoughts: 107
						

Thoughts:
**Analyzing the RDMA Address Handle (AH) Lifecycle**

Okay, here's what's running through my head. I'm looking at this line: `ah->sgid_attr = rdma_update_sgid_attr(ah_attr, NULL);` and immediately I'm thinking about the implications. `rdma_update_sgid_attr` is clearly managing a reference to the GID attribute, and it's assigning that reference directly to the `ah` struct. This is significant because it means the Address Handle (`ah`) is, in effect, now responsible for the lifecycle of that GID attribute.

Therefore, when the time comes to tear down this address handle, `ib_destroy_ah` should be called to properly release the resources. I'm double-checking, but *where* is `ib_destroy_ah` defined? Wait a minute, it's not in `verbs.c` as I initially assumed. Okay, no problem, my mistake, it's actually over in `core/verbs.c`. This is key because now I know where to look if something goes wrong with the AH destruction, or to debug if there's an issue with the GID attribute's lifetime.



127/2 2026/05/21 21:18 tool codesearch-definition-source
0m Error:
requested entity does not exist

Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:ib_destroy_ah]

Results:
map[SourceCode: SourceFile:]

128/2 2026/05/21 21:18 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 79681
							output: 47
							thoughts: 12
						

Thoughts:
Okay, here's my attempt at summarizing that thought process, keeping in mind I'm speaking to a fellow expert:

**Investigating `rdma_destroy_ah`**

Right, let's dive straight into `rdma_destroy_ah`. I need to refresh my understanding of how this function operates, and where it fits in the connection teardown sequence. It's a critical piece of the resource cleanup after an RDMA connection is established, especially concerning the Address Handle. I want to be certain I have a solid grip on its interactions with the underlying hardware, how it interacts with the rest of the RDMA stack, and any potential race conditions I need to keep in mind. Let me get a grasp on the exact semantics of `rdma_destroy_ah` and how to avoid any memory leaks or unexpected behavior.



129/2 2026/05/21 21:18 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:rdma_destroy_ah]

Results:
map[SourceCode:3779:	/**
3780:	 * rdma_destroy_ah - Destroys an kernel address handle.
3781:	 * @ah: The address handle to destroy.
3782:	 * @flags: Destroy address handle flags (see enum rdma_destroy_ah_flags).
3783:	 *
3784:	 * NOTE: for user ah use rdma_destroy_ah_user with valid udata!
3785:	 */
3786:	static inline void rdma_destroy_ah(struct ib_ah *ah, u32 flags)
3787:	{
3788:		int ret = rdma_destroy_ah_user(ah, flags, NULL);
3789:	
3790:		WARN_ONCE(ret, "Destroy of kernel AH shouldn't fail");
3791:	}
 SourceFile:include/rdma/ib_verbs.h]

130/2 2026/05/21 21:18 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 80166
							output: 49
							thoughts: 14
						

Thoughts:
Here's my thought process, summarized as you requested:

**Deconstructing `rdma_destroy_ah_user`**

Alright, let's dive into `rdma_destroy_ah_user`. Given my expertise in RDMA internals, I immediately know this function is responsible for the destruction of an Address Handle (AH) at the user level. That means this is where the resources associated with an AH created through the user-space RDMA API are released. I need to understand exactly what resources are being freed here to get a complete picture. Is it just the user-space data structures? Are there kernel-side resources, like memory regions or QP references, that need to be cleaned up as well? If so, are they handled correctly to prevent leaks or other issues? What about synchronization? Does this function need to handle concurrent accesses to the AH, perhaps from multiple threads or processes using the same handle? I'll need to look for any potential race conditions and ensure proper locking mechanisms are in place. Furthermore, what error conditions could arise during this destruction process? How are those handled, and what error codes are returned to the user? Finally, I need to check how this function interacts with the overall RDMA resource management framework. Is there a clear connection to the AH creation process (e.g., through an associated struct or reference count)? Any details related to memory management are important here. I'll need to see how the kernel allocates and deallocates the data structures themselves. I'm going to look at the implementation with a critical eye, focusing on resource cleanup, synchronization, and error handling.



131/2 2026/05/21 21:19 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:rdma_destroy_ah_user]

Results:
map[SourceCode:1025:	int rdma_destroy_ah_user(struct ib_ah *ah, u32 flags, struct ib_udata *udata)
1026:	{
1027:		const struct ib_gid_attr *sgid_attr = ah->sgid_attr;
1028:		struct ib_pd *pd;
1029:		int ret;
1030:	
1031:		might_sleep_if(flags & RDMA_DESTROY_AH_SLEEPABLE);
1032:	
1033:		pd = ah->pd;
1034:	
1035:		ret = ah->device->ops.destroy_ah(ah, flags);
1036:		if (ret)
1037:			return ret;
1038:	
1039:		atomic_dec(&pd->usecnt);
1040:		if (sgid_attr)
1041:			rdma_put_gid_attr(sgid_attr);
1042:	
1043:		kfree(ah);
1044:		return ret;
1045:	}
 SourceFile:drivers/infiniband/core/verbs.c]

132/2 2026/05/21 21:19 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 80893
							output: 48
							thoughts: 318
						

Thoughts:
**Analyzing Potential Memory Leaks in RDMA Address Handle Management**

Okay, so I'm digging into this `rdma_destroy_ah_user` function, and it's calling `rdma_put_gid_attr(sgid_attr)`. My immediate thought is, could there be a leak here? If the address handle (`ah`) itself is leaked, then the `sgid_attr` associated with it is also gone. But hold on, the `ah` is allocated via `rdma_create_ah`, right? The key question is, *who* is calling that function in the context of SMC?

Right, SMC doesn't directly call `rdma_create_ah`. Instead, it leverages either `ib_create_qp` or `ib_modify_qp`. Wait, a light bulb just turned on. Looking closer, `_ib_modify_qp` *also* uses `rdma_fill_sgid_attr` and `rdma_update_sgid_attr`. I'm seeing this code block:

```c
	if (attr_mask & IB_QP_AV)
		qp->av_sgid_attr =
			rdma_update_sgid_attr(&attr->ah_attr, qp->av_sgid_attr);
	if (attr_mask & IB_QP_ALT_PATH)
		qp->alt_path_sgid_attr = rdma_update_sgid_attr(
			&attr->alt_ah_attr, qp->alt_path_sgid_attr);
```

So it looks like we're linking the `sgid_attr` to the QP. Now, the big question is, when a QP is destroyed, does it properly release those `av_sgid_attr` and `alt_path_sgid_attr` attributes? Looks like it's time to go and check `ib_destroy_qp_user`...



133/2 2026/05/21 21:19 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:ib_destroy_qp_user]

Results:
map[SourceCode:2144:	int ib_destroy_qp_user(struct ib_qp *qp, struct ib_udata *udata)
2145:	{
2146:		const struct ib_gid_attr *alt_path_sgid_attr = qp->alt_path_sgid_attr;
2147:		const struct ib_gid_attr *av_sgid_attr = qp->av_sgid_attr;
2148:		struct ib_qp_security *sec;
2149:		int ret;
2150:	
2151:		WARN_ON_ONCE(qp->mrs_used > 0);
2152:	
2153:		if (atomic_read(&qp->usecnt))
2154:			return -EBUSY;
2155:	
2156:		if (qp->real_qp != qp)
2157:			return __ib_destroy_shared_qp(qp);
2158:	
2159:		sec  = qp->qp_sec;
2160:		if (sec)
2161:			ib_destroy_qp_security_begin(sec);
2162:	
2163:		if (!qp->uobject)
2164:			rdma_rw_cleanup_mrs(qp);
2165:	
2166:		rdma_counter_unbind_qp(qp, qp->port, true);
2167:		ret = qp->device->ops.destroy_qp(qp, udata);
2168:		if (ret) {
2169:			if (sec)
2170:				ib_destroy_qp_security_abort(sec);
2171:			return ret;
2172:		}
2173:	
2174:		if (alt_path_sgid_attr)
2175:			rdma_put_gid_attr(alt_path_sgid_attr);
2176:		if (av_sgid_attr)
2177:			rdma_put_gid_attr(av_sgid_attr);
2178:	
2179:		ib_qp_usecnt_dec(qp);
2180:		if (sec)
2181:			ib_destroy_qp_security_end(sec);
2182:	
2183:		rdma_restrack_del(&qp->res);
2184:		kfree(qp);
2185:		return ret;
2186:	}
 SourceFile:drivers/infiniband/core/verbs.c]

134/2 2026/05/21 21:19 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 82378
							output: 51
							thoughts: 256
						

Thoughts:
**My Line of Reasoning**

Okay, so I'm trying to understand this resource leak. Yes, the operation in question *does* release resources, that much is clear. But I'm starting to suspect a Quick Pair (QP) is being leaked somewhere. If a QP is indeed leaked, then, according to the code, `av_sgid_attr` would be leaked as a consequence.

But wait a minute, the system's supposed to handle device removal gracefully, right? When a device is removed, wouldn't that process necessarily destroy *all* QPs associated with it? The answer is no, because the device removal process assumes all clients have already released their resources. If a client leaked a QP, the device removal would either hang or at least generate a warning.

I'm reminded that `ib_unregister_device` calls `ib_device_unregister_rdmacg(ib_dev)` and `ib_cache_cleanup_one(ib_dev)`. This whole process relies on the reference count of `ib_dev` reaching zero eventually. But wait, if a QP *is* leaked, wouldn't that prevent the `ib_dev` refcount from reaching zero? Hmm, QPs don't hold a direct reference count on `ib_dev`, so that's not quite right. Though they might *indirectly* contribute to it...

Aha! The syzkaller log provides a vital clue! It says: "`GID entry ref leak for dev syz1 index 2 ref=1`". This is a *warning*, meaning something is definitely amiss. Now, the question is, where else in the code might a reference to GID attributes be held? We should investigate the function `rdma_read_gid_hw_context` closely.



135/2 2026/05/21 21:19 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:rdma_read_gid_hw_context]

Results:
map[SourceCode: 987:	/**
 988:	 * rdma_read_gid_hw_context - Read the HW GID context from GID attribute
 989:	 * @attr:		Potinter to the GID attribute
 990:	 *
 991:	 * rdma_read_gid_hw_context() reads the drivers GID HW context corresponding
 992:	 * to the SGID attr. Callers are required to already be holding the reference
 993:	 * to an existing GID entry.
 994:	 *
 995:	 * Returns the HW GID context
 996:	 *
 997:	 */
 998:	void *rdma_read_gid_hw_context(const struct ib_gid_attr *attr)
 999:	{
1000:		return container_of(attr, struct ib_gid_table_entry, attr)->context;
1001:	}
 SourceFile:drivers/infiniband/core/cache.c]

136/2 2026/05/21 21:19 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 83340
							output: 51
							thoughts: 27
						

Thoughts:
Okay, here's my take on those thoughts, tailored for an expert audience:

**Analyzing the Dependency**

Hmm, no, this really shouldn't necessitate a reference, at least not directly. I need to understand why this question has come up. My gut feeling is that there might be an assumption buried in there that needs clarification.

Let's dive into the code. The immediate thing to check is that function: `rdma_find_gid_by_filter`. Understanding how that particular function behaves is likely key to figuring out why a reference is, or isn't, necessary in this case. What's it doing internally? What input does it take, and what does it return? Are there any hidden assumptions within that function related to the use of a reference? I have a feeling that function will have the answer I need.



137/2 2026/05/21 21:19 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:rdma_find_gid_by_filter]

Results:
map[SourceCode: 717:	/**
 718:	 * rdma_find_gid_by_filter - Returns the GID table attribute where a
 719:	 * specified GID value occurs
 720:	 * @ib_dev: The device to query.
 721:	 * @gid: The GID value to search for.
 722:	 * @port: The port number of the device where the GID value could be
 723:	 *   searched.
 724:	 * @filter: The filter function is executed on any matching GID in the table.
 725:	 *   If the filter function returns true, the corresponding index is returned,
 726:	 *   otherwise, we continue searching the GID table. It's guaranteed that
 727:	 *   while filter is executed, ndev field is valid and the structure won't
 728:	 *   change. filter is executed in an atomic context. filter must not be NULL.
 729:	 * @context: Private data to pass into the call-back.
 730:	 *
 731:	 * rdma_find_gid_by_filter() searches for the specified GID value
 732:	 * of which the filter function returns true in the port's GID table.
 733:	 *
 734:	 */
 735:	const struct ib_gid_attr *rdma_find_gid_by_filter(
 736:		struct ib_device *ib_dev, const union ib_gid *gid, u32 port,
 737:		bool (*filter)(const union ib_gid *gid, const struct ib_gid_attr *,
 738:			       void *),
 739:		void *context)
 740:	{
 741:		const struct ib_gid_attr *res = ERR_PTR(-ENOENT);
 742:		struct ib_gid_table *table;
 743:		unsigned long flags;
 744:		unsigned int i;
 745:	
 746:		if (!rdma_is_port_valid(ib_dev, port))
 747:			return ERR_PTR(-EINVAL);
 748:	
 749:		table = rdma_gid_table(ib_dev, port);
 750:	
 751:		read_lock_irqsave(&table->rwlock, flags);
 752:		for (i = 0; i < table->sz; i++) {
 753:			struct ib_gid_table_entry *entry = table->data_vec[i];
 754:	
 755:			if (!is_gid_entry_valid(entry))
 756:				continue;
 757:	
 758:			if (memcmp(gid, &entry->attr.gid, sizeof(*gid)))
 759:				continue;
 760:	
 761:			if (filter(gid, &entry->attr, context)) {
 762:				get_gid_entry(entry);
 763:				res = &entry->attr;
 764:				break;
 765:			}
 766:		}
 767:		read_unlock_irqrestore(&table->rwlock, flags);
 768:		return res;
 769:	}
 SourceFile:drivers/infiniband/core/cache.c]

138/2 2026/05/21 21:19 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 84491
							output: 52
							thoughts: 32
						

Thoughts:
Here's my analysis of the provided snippet, framed as my own thought process:

**Diving into RDMA GID Lookup**

Okay, so `rdma_find_gid_by_filter` is the function we're looking at here. The very fact that the function signature includes a reference, implies it is manipulating some data *in situ*, rather than returning a copy. That's a key observation. We're not talking about a simple value lookup. It's likely updating something related to the GID search. But the real question becomes a critical one: who is calling this function? Understanding the call stack is *essential* to grasping its purpose and potential impact. Are we talking about a kernel module? User space application? A particular RDMA library component? Knowing the caller is the foundation for analyzing its behavior.



139/2 2026/05/21 21:19 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeSnippetLines:0 Name:rdma_find_gid_by_filter]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:get_sgid_attr_from_eth SourceFile:drivers/infiniband/core/verbs.c SourceLine:765]] TruncatedOutput:false]

140/2 2026/05/21 21:19 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 84828
							output: 51
							thoughts: 16
						

Thoughts:
Okay, let's see what I can do here.

**Analyzing `get_sgid_attr_from_eth`**

Right, let's dive into this `get_sgid_attr_from_eth` function. I need to understand what's going on within it. My immediate thought is, "What's the context? What is this function supposed to do?" Is it fetching security group ID information? Are we dealing with Ethernet interfaces, virtual networks, or something else entirely? I should check the surrounding code for clues. I need to determine what level of abstraction this sits at within the system. I also want to consider performance implications - are there any potential bottlenecks, or areas for optimization? Let's trace how the sgid is used downstream too. Does it perform any lookups? What data is this function consuming and producing? I hope the names are good and the code is clear!



141/2 2026/05/21 21:19 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:get_sgid_attr_from_eth]

Results:
map[SourceCode: 757:	static const struct ib_gid_attr *
 758:	get_sgid_attr_from_eth(struct ib_device *device, u32 port_num,
 759:			       u16 vlan_id, const union ib_gid *sgid,
 760:			       enum ib_gid_type gid_type)
 761:	{
 762:		struct find_gid_index_context context = {.vlan_id = vlan_id,
 763:							 .gid_type = gid_type};
 764:	
 765:		return rdma_find_gid_by_filter(device, sgid, port_num, find_gid_index,
 766:					       &context);
 767:	}
 SourceFile:drivers/infiniband/core/verbs.c]

142/2 2026/05/21 21:19 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 85324
							output: 52
							thoughts: 15
						

Thoughts:
Okay, here's my interpretation of that thought process, tailored for an expert audience, and written in the first person:

**Digging into the SGID Attribute Retrieval**

Alright, I'm trying to trace down how this `get_sgid_attr_from_eth` function is being used. Specifically, I need to understand the call graph. It's not immediately obvious from the code itself where the entry point is. I want to figure out where the *upstream* call is. Knowing the caller context is going to be crucial for understanding the overall data flow and identifying potential performance bottlenecks or subtle security implications. So, my primary question is: **who's actually calling `get_sgid_attr_from_eth`?** I need to start tracing back, likely using a cross-reference tool or a debugger. Hopefully the identifier name is distinctive, or I'm going to need to parse.



143/2 2026/05/21 21:19 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeSnippetLines:0 Name:get_sgid_attr_from_eth]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:ib_init_ah_attr_from_wc SourceFile:drivers/infiniband/core/verbs.c SourceLine:884]] TruncatedOutput:false]

144/2 2026/05/21 21:19 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 85663
							output: 53
							thoughts: 16
						

Thoughts:
Okay, here's my attempt at summarizing that thought process, tailored for an expert audience:

**Tracing the Ah_Attr Origin**

Alright, so `ib_init_ah_attr_from_wc`… that's a key function in RDMA address handle (AH) initialization, specifically based on work completion (WC) information. My immediate thought is, *who* is actually calling this? Knowing the call chain is crucial for debugging, understanding performance bottlenecks, or even just verifying the proper AH configuration. I need to figure out the initiating contexts. Is this a common path after sends, receives, or both? Is it part of the connection establishment phase, or something that happens more dynamically during operation? Understanding the caller tells me the *why* - why are we creating these AHs from the WC? Is it error recovery, retransmission handling, or a more regular part of the data path? I'll probably start by grepping the source code for direct calls, and then follow the stack traces from there. I'll need to consider all the potential scenarios within the driver, and probably include kernel modules if I don't see anything obvious in the immediate codebase. Let's dig in.



145/2 2026/05/21 21:19 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeSnippetLines:0 Name:ib_init_ah_attr_from_wc]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cm_init_av_for_response SourceFile:drivers/infiniband/core/cm.c SourceLine:480] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cm_lap_handler SourceFile:drivers/infiniband/core/cm.c SourceLine:3320] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:ib_create_ah_from_wc SourceFile:drivers/infiniband/core/verbs.c SourceLine:982] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:recv_handler SourceFile:drivers/infiniband/core/user_mad.c SourceLine:278]] TruncatedOutput:false]

146/2 2026/05/21 21:19 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 86227
							output: 50
							thoughts: 1137
						

Thoughts:
**Analyzing the SGID Attribute Handling in RDMA AH Creation**

Okay, let's break this down. I'm looking at the flow of how the SGID attribute is handled during the creation of an Address Handle (AH) in RDMA, specifically when using a Work Completion (WC). The critical function here seems to be `ib_init_ah_attr_from_wc`, which takes the device, port, WC, and GRH (Global Routing Header) as input, along with an `rdma_ah_attr` structure to be populated.

My first observation is that this function, `ib_init_ah_attr_from_wc`, appears to be responsible for acquiring and *moving* a reference to the GID attribute, specifically for RoCE scenarios where Ethernet is involved. It does this by calling `get_sgid_attr_from_eth`. The key thing here is the line where it assigns `sgid_attr` (returned from `get_sgid_attr_from_eth`) to `ah_attr->grh.sgid_attr`. The comment explicitly states this is a *move* of the reference, which means the responsibility for this `sgid_attr` now shifts to `ah_attr`. At this point, I need to check how `get_sgid_attr_from_eth` is implemented in order to know if the underlying reference count is incremented in it.

Now, `ib_create_ah_from_wc` is called which, in turn, calls `rdma_create_ah`. Within `rdma_create_ah`, the flow appears to go through several nested functions. Initially, `rdma_create_ah` calls `rdma_fill_sgid_attr`. However, `rdma_fill_sgid_attr` contains a check: if `grh->sgid_attr` is already set, it returns immediately. This is key. Since `ib_init_ah_attr_from_wc` just set it, this function will return.

Following the same flow, `rdma_create_ah` then calls `_rdma_create_ah`. Within `_rdma_create_ah`, `rdma_update_sgid_attr` is invoked. This is where things get interesting. `rdma_update_sgid_attr` checks if a previous attribute existed. If not, it calls `rdma_hold_gid_attr(ah_attr->grh.sgid_attr)`.

This is where the problem arises: **`rdma_hold_gid_attr` increments the reference count**. But `ib_init_ah_attr_from_wc` *already* incremented the refcount when it called `get_sgid_attr_from_eth`. Now, `rdma_update_sgid_attr` is incrementing it again! This is very important.

The problem continues: `rdma_create_ah` then calls `rdma_unfill_sgid_attr`. `rdma_unfill_sgid_attr` attempts to undo what `rdma_fill_sgid_attr` did. However, since `rdma_fill_sgid_attr` did *nothing* (because `ah_attr->grh.sgid_attr` was already set), `rdma_unfill_sgid_attr` essentially checks if the original attribute is still the same as what was passed in, and returns immediately because it is.

The implication is that `rdma_unfill_sgid_attr` *doesn't* release the reference. This means the caller of `ib_create_ah_from_wc` *still* owns the reference in `ah_attr`.

The next step is to examine the calling function to see if the caller correctly handles releasing that reference, and where.



147/2 2026/05/21 21:19 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:ib_create_ah_from_wc]

Results:
map[SourceCode: 975:	struct ib_ah *ib_create_ah_from_wc(struct ib_pd *pd, const struct ib_wc *wc,
 976:					   const struct ib_grh *grh, u32 port_num)
 977:	{
 978:		struct rdma_ah_attr ah_attr;
 979:		struct ib_ah *ah;
 980:		int ret;
 981:	
 982:		ret = ib_init_ah_attr_from_wc(pd->device, port_num, wc, grh, &ah_attr);
 983:		if (ret)
 984:			return ERR_PTR(ret);
 985:	
 986:		ah = rdma_create_ah(pd, &ah_attr, RDMA_CREATE_AH_SLEEPABLE);
 987:	
 988:		rdma_destroy_ah_attr(&ah_attr);
 989:		return ah;
 990:	}
 SourceFile:drivers/infiniband/core/verbs.c]

148/2 2026/05/21 21:19 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 88546
							output: 50
							thoughts: 99
						

Thoughts:
**Addressing the RDMA Address Handle (AH) Lifecycle**

Okay, so I was looking into this `ib_create_ah_from_wc` function and noticed something that initially concerned me. I saw that it calls `rdma_destroy_ah_attr(&ah_attr)`. My immediate thought was, "Oh no, is the `ah_attr` memory being prematurely released?" I understand the intricacies of reference counting in RDMA, and I wanted to be absolutely sure there wasn't a resource leak happening.

Then, I followed the trail down the call stack, and confirmed `rdma_destroy_ah_attr` actually calls `rdma_put_gid_attr`. Bingo! This confirms that the internal reference within `ah_attr` *is* properly being decremented and eventually released. Excellent! And since `ah` holds its *own* reference, it means the address handle itself remains valid even after `ah_attr` is cleaned up. That clears up my initial worry, so there's no leak.

But, hold on... just to be completely certain, I need to consider another point... What about the lifecycle and memory management within the `cm_init_av_for_response` call? I should investigate this and any potential interaction with the AH lifecycle to be entirely confident.



149/2 2026/05/21 21:20 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cm.c IncludeLines:true Name:cm_init_av_for_response]

Results:
map[SourceCode: 475:	static int cm_init_av_for_response(struct cm_port *port, struct ib_wc *wc,
 476:					   struct ib_grh *grh, struct cm_av *av)
 477:	{
 478:		cm_set_av_port(av, port);
 479:		av->pkey_index = wc->pkey_index;
 480:		return ib_init_ah_attr_from_wc(port->cm_dev->ib_device,
 481:					       port->port_num, wc,
 482:					       grh, &av->ah_attr);
 483:	}
 SourceFile:drivers/infiniband/core/cm.c]

150/2 2026/05/21 21:20 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 89181
							output: 51
							thoughts: 41
						

Thoughts:
Okay, here's my take on those thoughts, framed as my own mental process, given my expertise:

**My Mental Walkthrough of AV Initialization and Lifetime**

Alright, so `cm_init_av_for_response` is responsible for setting up `av->ah_attr`. Standard procedure. Now, the real question that pops into my head, and it's a critical one for memory management and potential leaks, is: *when* is that `av->ah_attr` structure cleaned up? Specifically, when is it destroyed to avoid resource exhaustion or other issues?

My immediate reflex is to jump into the `cm_av` code. That's the likely spot. I need to trace the lifecycle of the `av` structure itself. Is it a global, allocated on the stack, part of some larger managed structure? Is there a corresponding `cm_free_av` or something similar, and if so, when is it called? Is there any chance of double-freeing or premature destruction? I need to analyze the `cm_av` functions to understand how it's handled to ensure it is handled correctly to avoid issues.



151/2 2026/05/21 21:20 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/cm.c IncludeSnippetLines:0 Name:cm_init_av_for_response]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cm_req_handler SourceFile:drivers/infiniband/core/cm.c SourceLine:2130] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cm_sidr_req_handler SourceFile:drivers/infiniband/core/cm.c SourceLine:3570]] TruncatedOutput:false]

152/2 2026/05/21 21:20 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 89647
							output: 46
							thoughts: 11
						

Thoughts:
Okay, here's my summarized thought process, presented as if I'm directly experiencing the thought process:

**Diving into `cm_req_handler`**

Alright, time to dig into this. Let's start with `cm_req_handler`. That's where the rubber meets the road, so to speak. This is the central piece where I expect the request handling logic to be. I need to refresh my memory on what's supposed to be happening there, what dependencies it has, and what the overall flow looks like. This is my starting point, where I'll get an overview of what to look at, which will direct my next investigations.



153/2 2026/05/21 21:20 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cm.c IncludeLines:true Name:cm_req_handler]

Results:
map[SourceCode:2094:	static int cm_req_handler(struct cm_work *work)
2095:	{
2096:		struct cm_id_private *cm_id_priv, *listen_cm_id_priv;
2097:		struct cm_req_msg *req_msg;
2098:		const struct ib_global_route *grh;
2099:		const struct ib_gid_attr *gid_attr;
2100:		int ret;
2101:	
2102:		req_msg = (struct cm_req_msg *)work->mad_recv_wc->recv_buf.mad;
2103:	
2104:		cm_id_priv =
2105:			cm_alloc_id_priv(work->port->cm_dev->ib_device, NULL, NULL);
2106:		if (IS_ERR(cm_id_priv))
2107:			return PTR_ERR(cm_id_priv);
2108:	
2109:		cm_id_priv->id.remote_id =
2110:			cpu_to_be32(IBA_GET(CM_REQ_LOCAL_COMM_ID, req_msg));
2111:		cm_id_priv->id.service_id =
2112:			cpu_to_be64(IBA_GET(CM_REQ_SERVICE_ID, req_msg));
2113:		cm_id_priv->tid = req_msg->hdr.tid;
2114:		cm_id_priv->timeout_ms = cm_convert_to_ms(
2115:			IBA_GET(CM_REQ_LOCAL_CM_RESPONSE_TIMEOUT, req_msg));
2116:		cm_id_priv->max_cm_retries = IBA_GET(CM_REQ_MAX_CM_RETRIES, req_msg);
2117:		cm_id_priv->remote_qpn =
2118:			cpu_to_be32(IBA_GET(CM_REQ_LOCAL_QPN, req_msg));
2119:		cm_id_priv->initiator_depth =
2120:			IBA_GET(CM_REQ_RESPONDER_RESOURCES, req_msg);
2121:		cm_id_priv->responder_resources =
2122:			IBA_GET(CM_REQ_INITIATOR_DEPTH, req_msg);
2123:		cm_id_priv->path_mtu = IBA_GET(CM_REQ_PATH_PACKET_PAYLOAD_MTU, req_msg);
2124:		cm_id_priv->pkey = cpu_to_be16(IBA_GET(CM_REQ_PARTITION_KEY, req_msg));
2125:		cm_id_priv->sq_psn = cpu_to_be32(IBA_GET(CM_REQ_STARTING_PSN, req_msg));
2126:		cm_id_priv->retry_count = IBA_GET(CM_REQ_RETRY_COUNT, req_msg);
2127:		cm_id_priv->rnr_retry_count = IBA_GET(CM_REQ_RNR_RETRY_COUNT, req_msg);
2128:		cm_id_priv->qp_type = cm_req_get_qp_type(req_msg);
2129:	
2130:		ret = cm_init_av_for_response(work->port, work->mad_recv_wc->wc,
2131:					      work->mad_recv_wc->recv_buf.grh,
2132:					      &cm_id_priv->av);
2133:		if (ret)
2134:			goto destroy;
2135:		cm_id_priv->timewait_info = cm_create_timewait_info(cm_id_priv->
2136:								    id.local_id);
2137:		if (IS_ERR(cm_id_priv->timewait_info)) {
2138:			ret = PTR_ERR(cm_id_priv->timewait_info);
2139:			cm_id_priv->timewait_info = NULL;
2140:			goto destroy;
2141:		}
2142:		cm_id_priv->timewait_info->work.remote_id = cm_id_priv->id.remote_id;
2143:		cm_id_priv->timewait_info->remote_ca_guid =
2144:			cpu_to_be64(IBA_GET(CM_REQ_LOCAL_CA_GUID, req_msg));
2145:		cm_id_priv->timewait_info->remote_qpn = cm_id_priv->remote_qpn;
2146:	
2147:		/*
2148:		 * Note that the ID pointer is not in the xarray at this point,
2149:		 * so this set is only visible to the local thread.
2150:		 */
2151:		cm_id_priv->id.state = IB_CM_REQ_RCVD;
2152:	
2153:		listen_cm_id_priv = cm_match_req(work, cm_id_priv);
2154:		if (!listen_cm_id_priv) {
2155:			trace_icm_no_listener_err(&cm_id_priv->id);
2156:			cm_id_priv->id.state = IB_CM_IDLE;
2157:			ret = -EINVAL;
2158:			goto destroy;
2159:		}
2160:	
2161:		memset(&work->path[0], 0, sizeof(work->path[0]));
2162:		if (cm_req_has_alt_path(req_msg))
2163:			memset(&work->path[1], 0, sizeof(work->path[1]));
2164:		grh = rdma_ah_read_grh(&cm_id_priv->av.ah_attr);
2165:		gid_attr = grh->sgid_attr;
2166:	
2167:		if (cm_id_priv->av.ah_attr.type == RDMA_AH_ATTR_TYPE_ROCE) {
2168:			work->path[0].rec_type =
2169:				sa_conv_gid_to_pathrec_type(gid_attr->gid_type);
2170:		} else {
2171:			cm_process_routed_req(req_msg, work->mad_recv_wc->wc);
2172:			cm_path_set_rec_type(
2173:				work->port->cm_dev->ib_device, work->port->port_num,
2174:				&work->path[0],
2175:				IBA_GET_MEM_PTR(CM_REQ_PRIMARY_LOCAL_PORT_GID,
2176:						req_msg));
2177:		}
2178:		if (cm_req_has_alt_path(req_msg))
2179:			work->path[1].rec_type = work->path[0].rec_type;
2180:		cm_format_paths_from_req(req_msg, &work->path[0],
2181:					 &work->path[1], work->mad_recv_wc->wc);
2182:		if (cm_id_priv->av.ah_attr.type == RDMA_AH_ATTR_TYPE_ROCE)
2183:			sa_path_set_dmac(&work->path[0],
2184:					 cm_id_priv->av.ah_attr.roce.dmac);
2185:		work->path[0].hop_limit = grh->hop_limit;
2186:	
2187:		/* This destroy call is needed to pair with cm_init_av_for_response */
2188:		cm_destroy_av(&cm_id_priv->av);
2189:		ret = cm_init_av_by_path(&work->path[0], gid_attr, &cm_id_priv->av);
2190:		if (ret) {
2191:			int err;
2192:	
2193:			err = rdma_query_gid(work->port->cm_dev->ib_device,
2194:					     work->port->port_num, 0,
2195:					     &work->path[0].sgid);
2196:			if (err)
2197:				ib_send_cm_rej(&cm_id_priv->id, IB_CM_REJ_INVALID_GID,
2198:					       NULL, 0, NULL, 0);
2199:			else
2200:				ib_send_cm_rej(&cm_id_priv->id, IB_CM_REJ_INVALID_GID,
2201:					       &work->path[0].sgid,
2202:					       sizeof(work->path[0].sgid),
2203:					       NULL, 0);
2204:			goto rejected;
2205:		}
2206:		if (cm_id_priv->av.ah_attr.type == RDMA_AH_ATTR_TYPE_IB)
2207:			cm_id_priv->av.dlid_datapath =
2208:				IBA_GET(CM_REQ_PRIMARY_LOCAL_PORT_LID, req_msg);
2209:	
2210:		if (cm_req_has_alt_path(req_msg)) {
2211:			ret = cm_init_av_by_path(&work->path[1], NULL,
2212:						 &cm_id_priv->alt_av);
2213:			if (ret) {
2214:				ib_send_cm_rej(&cm_id_priv->id,
2215:					       IB_CM_REJ_INVALID_ALT_GID,
2216:					       &work->path[0].sgid,
2217:					       sizeof(work->path[0].sgid), NULL, 0);
2218:				goto rejected;
2219:			}
2220:		}
2221:	
2222:		cm_id_priv->id.cm_handler = listen_cm_id_priv->id.cm_handler;
2223:		cm_id_priv->id.context = listen_cm_id_priv->id.context;
2224:		cm_format_req_event(work, cm_id_priv, &listen_cm_id_priv->id);
2225:	
2226:		/* Now MAD handlers can see the new ID */
2227:		spin_lock_irq(&cm_id_priv->lock);
2228:		cm_finalize_id(cm_id_priv);
2229:	
2230:		/* Refcount belongs to the event, pairs with cm_process_work() */
2231:		refcount_inc(&cm_id_priv->refcount);
2232:		cm_queue_work_unlock(cm_id_priv, work);
2233:		/*
2234:		 * Since this ID was just created and was not made visible to other MAD
2235:		 * handlers until the cm_finalize_id() above we know that the
2236:		 * cm_process_work() will deliver the event and the listen_cm_id
2237:		 * embedded in the event can be derefed here.
2238:		 */
2239:		cm_deref_id(listen_cm_id_priv);
2240:		return 0;
2241:	
2242:	rejected:
2243:		cm_deref_id(listen_cm_id_priv);
2244:	destroy:
2245:		ib_destroy_cm_id(&cm_id_priv->id);
2246:		return ret;
2247:	}
 SourceFile:drivers/infiniband/core/cm.c]

154/2 2026/05/21 21:20 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 93008
							output: 48
							thoughts: 401
						

Thoughts:
**Analyzing the AV Destruction and Potential Resource Leak**

Okay, let me trace this flow. `cm_req_handler` calls `cm_init_av_for_response`.  And then it immediately follows that with:

```c
/* This destroy call is needed to pair with cm_init_av_for_response */
cm_destroy_av(&cm_id_priv->av);
```

Right, that makes sense. `cm_destroy_av` will ultimately call `rdma_destroy_ah_attr(&av->ah_attr)` and release that reference. Good, we're cleaning up after ourselves.  But wait... this is where it gets interesting, and I need to consider a potential edge case.

What happens if `cm_init_av_for_response` succeeds, but there's a problem later when `cm_create_timewait_info` is called, and that fails? Let me review the code block:

```c
	ret = cm_init_av_for_response(work->port, work->mad_recv_wc->wc,
				      work->mad_recv_wc->recv_buf.grh,
				      &cm_id_priv->av);
	if (ret)
		goto destroy;
	cm_id_priv->timewait_info = cm_create_timewait_info(cm_id_priv->
							    id.local_id);
	if (IS_ERR(cm_id_priv->timewait_info)) {
		ret = PTR_ERR(cm_id_priv->timewait_info);
		cm_id_priv->timewait_info = NULL;
		goto destroy;
	}
...
destroy:
	ib_destroy_cm_id(&cm_id_priv->id);
	return ret;
```

If `cm_create_timewait_info` fails, execution goes to the `destroy` label.  So `ib_destroy_cm_id` is called in this `destroy` path. My immediate concern is, does `ib_destroy_cm_id` itself call `cm_destroy_av(&cm_id_priv->av)`? If it *doesn't*, and we just directly jump to destroy without freeing this AV, we have a potential resource leak.

I need to check the implementation of `ib_destroy_cm_id` to make sure we're fully cleaning up resources in this failure scenario. Let's look at what's happening in there.



155/2 2026/05/21 21:20 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cm.c IncludeLines:true Name:ib_destroy_cm_id]

Results:
map[SourceCode:1186:	void ib_destroy_cm_id(struct ib_cm_id *cm_id)
1187:	{
1188:		cm_destroy_id(cm_id, 0);
1189:	}
 SourceFile:drivers/infiniband/core/cm.c]

156/2 2026/05/21 21:20 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 94115
							output: 46
							thoughts: 11
						

Thoughts:
Okay, here's my take on those thoughts, tailored for an expert audience:

**Analyzing the `cm_destroy_id` Function**

Alright, let's dive into this `cm_destroy_id` function. I'm immediately thinking about its place within the larger architecture. What's its purpose? Is it a critical cleanup step, or more of a convenience function? Knowing the context will heavily influence my line of thought. I'm wondering if "cm" hints at "core module" or something similar.

I'll be mentally tracing the execution flow that calls this function. What are the preconditions? What assumptions are being made about the state of the object it's operating on? Does it handle error conditions gracefully, or does it leave things in a fragile state if something goes wrong? I'll probably start by looking for its definition and cross-references. I'll need to understand how the ID is being used and managed before it’s destroyed. Memory leaks are always a concern, so I'll be particularly vigilant about ensuring this function properly frees any allocated resources.

I'm thinking about edge cases too. What happens if the ID is already invalid? Does this function have any locking or synchronization mechanisms to protect against race conditions? Any potential for double-freeing is an immediate red flag. I'll be looking for any hints about thread safety or atomic operations. 

In short, I'm assuming that it is a critical piece of the puzzle, and I will treat it as such. I want to know exactly what it does, and how it effects everything else.



157/2 2026/05/21 21:20 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cm.c IncludeLines:true Name:cm_destroy_id]

Results:
map[SourceCode:1055:	static void cm_destroy_id(struct ib_cm_id *cm_id, int err)
1056:	{
1057:		struct cm_id_private *cm_id_priv;
1058:		enum ib_cm_state old_state;
1059:		unsigned long timeout;
1060:		struct cm_work *work;
1061:		int ret;
1062:	
1063:		cm_id_priv = container_of(cm_id, struct cm_id_private, id);
1064:		spin_lock_irq(&cm_id_priv->lock);
1065:		old_state = cm_id->state;
1066:	retest:
1067:		switch (cm_id->state) {
1068:		case IB_CM_LISTEN:
1069:			spin_lock(&cm.lock);
1070:			if (--cm_id_priv->listen_sharecount > 0) {
1071:				/* The id is still shared. */
1072:				WARN_ON(refcount_read(&cm_id_priv->refcount) == 1);
1073:				spin_unlock(&cm.lock);
1074:				spin_unlock_irq(&cm_id_priv->lock);
1075:				cm_deref_id(cm_id_priv);
1076:				return;
1077:			}
1078:			cm_id->state = IB_CM_IDLE;
1079:			rb_erase(&cm_id_priv->service_node, &cm.listen_service_table);
1080:			RB_CLEAR_NODE(&cm_id_priv->service_node);
1081:			spin_unlock(&cm.lock);
1082:			break;
1083:		case IB_CM_SIDR_REQ_SENT:
1084:			cm_id->state = IB_CM_IDLE;
1085:			ib_cancel_mad(cm_id_priv->msg);
1086:			break;
1087:		case IB_CM_SIDR_REQ_RCVD:
1088:			cm_send_sidr_rep_locked(cm_id_priv,
1089:						&(struct ib_cm_sidr_rep_param){
1090:							.status = IB_SIDR_REJECT });
1091:			/* cm_send_sidr_rep_locked will not move to IDLE if it fails */
1092:			cm_id->state = IB_CM_IDLE;
1093:			break;
1094:		case IB_CM_REQ_SENT:
1095:		case IB_CM_MRA_REQ_RCVD:
1096:			ib_cancel_mad(cm_id_priv->msg);
1097:			cm_send_rej_locked(cm_id_priv, IB_CM_REJ_TIMEOUT,
1098:					   &cm_id_priv->id.device->node_guid,
1099:					   sizeof(cm_id_priv->id.device->node_guid),
1100:					   NULL, 0);
1101:			break;
1102:		case IB_CM_REQ_RCVD:
1103:			if (err == -ENOMEM) {
1104:				/* Do not reject to allow future retries. */
1105:				cm_reset_to_idle(cm_id_priv);
1106:			} else {
1107:				cm_send_rej_locked(cm_id_priv,
1108:						   IB_CM_REJ_CONSUMER_DEFINED, NULL, 0,
1109:						   NULL, 0);
1110:			}
1111:			break;
1112:		case IB_CM_REP_SENT:
1113:		case IB_CM_MRA_REP_RCVD:
1114:			ib_cancel_mad(cm_id_priv->msg);
1115:			cm_send_rej_locked(cm_id_priv, IB_CM_REJ_CONSUMER_DEFINED, NULL,
1116:					   0, NULL, 0);
1117:			goto retest;
1118:		case IB_CM_MRA_REQ_SENT:
1119:		case IB_CM_REP_RCVD:
1120:		case IB_CM_MRA_REP_SENT:
1121:			cm_send_rej_locked(cm_id_priv, IB_CM_REJ_CONSUMER_DEFINED, NULL,
1122:					   0, NULL, 0);
1123:			break;
1124:		case IB_CM_ESTABLISHED:
1125:			if (cm_id_priv->qp_type == IB_QPT_XRC_TGT) {
1126:				cm_id->state = IB_CM_IDLE;
1127:				break;
1128:			}
1129:			cm_issue_dreq(cm_id_priv);
1130:			cm_enter_timewait(cm_id_priv);
1131:			goto retest;
1132:		case IB_CM_DREQ_SENT:
1133:			ib_cancel_mad(cm_id_priv->msg);
1134:			cm_enter_timewait(cm_id_priv);
1135:			goto retest;
1136:		case IB_CM_DREQ_RCVD:
1137:			cm_send_drep_locked(cm_id_priv, NULL, 0);
1138:			WARN_ON(cm_id->state != IB_CM_TIMEWAIT);
1139:			goto retest;
1140:		case IB_CM_TIMEWAIT:
1141:			/*
1142:			 * The cm_acquire_id in cm_timewait_handler will stop working
1143:			 * once we do xa_erase below, so just move to idle here for
1144:			 * consistency.
1145:			 */
1146:			cm_id->state = IB_CM_IDLE;
1147:			break;
1148:		case IB_CM_IDLE:
1149:			break;
1150:		}
1151:		WARN_ON(cm_id->state != IB_CM_IDLE);
1152:	
1153:		spin_lock(&cm.lock);
1154:		/* Required for cleanup paths related cm_req_handler() */
1155:		if (cm_id_priv->timewait_info) {
1156:			cm_remove_remote(cm_id_priv);
1157:			kfree(cm_id_priv->timewait_info);
1158:			cm_id_priv->timewait_info = NULL;
1159:		}
1160:	
1161:		WARN_ON(cm_id_priv->listen_sharecount);
1162:		WARN_ON(!RB_EMPTY_NODE(&cm_id_priv->service_node));
1163:		if (!RB_EMPTY_NODE(&cm_id_priv->sidr_id_node))
1164:			rb_erase(&cm_id_priv->sidr_id_node, &cm.remote_sidr_table);
1165:		spin_unlock(&cm.lock);
1166:		spin_unlock_irq(&cm_id_priv->lock);
1167:	
1168:		xa_erase(&cm.local_id_table, cm_local_id(cm_id->local_id));
1169:		cm_deref_id(cm_id_priv);
1170:		timeout = msecs_to_jiffies((cm_id_priv->max_cm_retries * cm_id_priv->timeout_ms * 5) / 4);
1171:		do {
1172:			ret = wait_for_completion_timeout(&cm_id_priv->comp, timeout);
1173:			if (!ret) /* timeout happened */
1174:				cm_destroy_id_wait_timeout(cm_id, old_state);
1175:		} while (!ret);
1176:	
1177:		while ((work = cm_dequeue_work(cm_id_priv)) != NULL)
1178:			cm_free_work(work);
1179:	
1180:		cm_destroy_av(&cm_id_priv->av);
1181:		cm_destroy_av(&cm_id_priv->alt_av);
1182:		kfree(cm_id_priv->private_data);
1183:		kfree_rcu(cm_id_priv, rcu);
1184:	}
 SourceFile:drivers/infiniband/core/cm.c]

158/2 2026/05/21 21:20 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 96870
							output: 50
							thoughts: 307
						

Thoughts:
**Analyzing the cm_destroy_id Function**

Okay, so `cm_destroy_id` explicitly calls `cm_destroy_av` on both `cm_id_priv->av` and `cm_id_priv->alt_av`. That makes sense; it's cleaning up the associated AVs. So, `cm_id_priv->av` is definitely destroyed in that function call.

But hang on, there's a potential wrinkle here, especially when considering error handling in `cm_req_handler`. Specifically, I'm thinking about the case where `cm_init_av_by_path` might fail. Let's look at the relevant code snippet:

```c
	/* This destroy call is needed to pair with cm_init_av_for_response */
	cm_destroy_av(&cm_id_priv->av);
	ret = cm_init_av_by_path(&work->path[0], gid_attr, &cm_id_priv->av);
	if (ret) {
...
		goto rejected;
	}
```

If `cm_init_av_by_path` returns an error, it signals a failure and branches to the `rejected` label. From there, `ib_destroy_cm_id` gets called, which in turn calls `cm_destroy_id`. And as we've already established, `cm_destroy_id` *does* call `cm_destroy_av(&cm_id_priv->av)`.

The concern is this: if `cm_init_av_by_path` fails, might it have *partially* initialized `cm_id_priv->av`, or perhaps left it in an inconsistent, uninitialized state? If so, calling `cm_destroy_av` on a partially initialized or uninitialized AV could lead to undefined behavior or even a crash. I'll need to go deeper and check the implementation of `cm_init_av_by_path` to understand exactly how it handles potential failures and ensure the destruction code is robust.



159/2 2026/05/21 21:20 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cm.c IncludeLines:true Name:cm_init_av_by_path]

Results:
map[SourceCode: 526:	static int cm_init_av_by_path(struct sa_path_rec *path,
 527:				      const struct ib_gid_attr *sgid_attr,
 528:				      struct cm_av *av)
 529:	{
 530:		struct rdma_ah_attr new_ah_attr;
 531:		struct cm_device *cm_dev;
 532:		struct cm_port *port;
 533:		int ret;
 534:	
 535:		port = get_cm_port_from_path(path, sgid_attr);
 536:		if (!port)
 537:			return -EINVAL;
 538:		cm_dev = port->cm_dev;
 539:	
 540:		ret = ib_find_cached_pkey(cm_dev->ib_device, port->port_num,
 541:					  be16_to_cpu(path->pkey), &av->pkey_index);
 542:		if (ret)
 543:			return ret;
 544:	
 545:		cm_set_av_port(av, port);
 546:	
 547:		/*
 548:		 * av->ah_attr might be initialized based on wc or during
 549:		 * request processing time which might have reference to sgid_attr.
 550:		 * So initialize a new ah_attr on stack.
 551:		 * If initialization fails, old ah_attr is used for sending any
 552:		 * responses. If initialization is successful, than new ah_attr
 553:		 * is used by overwriting the old one. So that right ah_attr
 554:		 * can be used to return an error response.
 555:		 */
 556:		ret = ib_init_ah_attr_from_path(cm_dev->ib_device, port->port_num, path,
 557:						&new_ah_attr, sgid_attr);
 558:		if (ret)
 559:			return ret;
 560:	
 561:		av->timeout = path->packet_life_time + 1;
 562:		rdma_move_ah_attr(&av->ah_attr, &new_ah_attr);
 563:		return 0;
 564:	}
 SourceFile:drivers/infiniband/core/cm.c]

160/2 2026/05/21 21:20 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 98344
							output: 50
							thoughts: 731
						

Thoughts:
**Analyzing the AV Initialization and Destruction in the RDMA Connection Manager**

Okay, let's break this down. My initial concern was a potential memory leak arising from how the Address Vector (`av`) is handled within the connection manager. The comment in `cm_init_av_by_path` initially grabbed my attention: it notes that `av->ah_attr` *might* be initialized based on work context or request processing, and therefore it uses a local `new_ah_attr` to avoid overwriting a potentially in-use attribute. If the initialization of `new_ah_attr` is successful it will move to become the `av->ah_attr`.

My concern was immediately raised when I reviewed `cm_req_handler`. Specifically, `cm_destroy_av(&cm_id_priv->av)` is called *before* `cm_init_av_by_path`. If `cm_init_av_by_path` failed, and it returns, it seemed like the previous `ah_attr` was destroyed and then nothing was re-initialized in the case of failure.

Let's trace: `cm_destroy_av` calls `rdma_destroy_ah_attr`, which calls `rdma_put_gid_attr(ah_attr->grh.sgid_attr)` and sets `ah_attr->grh.sgid_attr = NULL`. This effectively destroys the GID attribute reference. So, if `cm_init_av_by_path` *fails*, the code hits the `rejected:` label. The function then proceeds to destroy the `cm_id` and calls `cm_destroy_av` again. However, this time, `sgid_attr` is NULL. This time, `rdma_destroy_ah_attr` won't leak because `rdma_put_gid_attr` only dereferences the sgid_attr if it is not NULL. So no leak there.

Now, what if `cm_init_av_by_path` *succeeds*? It calls `rdma_move_ah_attr`, which *copies* the struct from `new_ah_attr` to `av->ah_attr`, and sets `new_ah_attr.grh.sgid_attr = NULL`. So `av->ah_attr` *now* owns the GID attribute. When `cm_destroy_av` is later called, it correctly releases it. Again, no leak.

So, overall, after carefully analyzing the sequence, I believe that this code *doesn't* contain a memory leak, based on the current implementation. I need to make sure I'm not missing any edge cases though.



161/2 2026/05/21 21:20 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cm.c IncludeLines:true Name:get_cm_port_from_path]

Results:
map[SourceCode: 485:	static struct cm_port *
 486:	get_cm_port_from_path(struct sa_path_rec *path, const struct ib_gid_attr *attr)
 487:	{
 488:		struct cm_device *cm_dev;
 489:		struct cm_port *port = NULL;
 490:		unsigned long flags;
 491:	
 492:		if (attr) {
 493:			read_lock_irqsave(&cm.device_lock, flags);
 494:			list_for_each_entry(cm_dev, &cm.device_list, list) {
 495:				if (cm_dev->ib_device == attr->device) {
 496:					port = cm_dev->port[attr->port_num - 1];
 497:					break;
 498:				}
 499:			}
 500:			read_unlock_irqrestore(&cm.device_lock, flags);
 501:		} else {
 502:			/* SGID attribute can be NULL in following
 503:			 * conditions.
 504:			 * (a) Alternative path
 505:			 * (b) IB link layer without GRH
 506:			 * (c) LAP send messages
 507:			 */
 508:			read_lock_irqsave(&cm.device_lock, flags);
 509:			list_for_each_entry(cm_dev, &cm.device_list, list) {
 510:				attr = rdma_find_gid(cm_dev->ib_device,
 511:						     &path->sgid,
 512:						     sa_conv_pathrec_to_gid_type(path),
 513:						     NULL);
 514:				if (!IS_ERR(attr)) {
 515:					port = cm_dev->port[attr->port_num - 1];
 516:					break;
 517:				}
 518:			}
 519:			read_unlock_irqrestore(&cm.device_lock, flags);
 520:			if (port)
 521:				rdma_put_gid_attr(attr);
 522:		}
 523:		return port;
 524:	}
 SourceFile:drivers/infiniband/core/cm.c]

162/2 2026/05/21 21:20 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 100357
							output: 46
							thoughts: 319
						

Thoughts:
**Analyzing the CM Port Lookup**

Okay, so I'm looking closely at how `get_cm_port_from_path` works, specifically around that `rdma_find_gid` call. I see that `rdma_find_gid` takes a reference and then, if a `port` is successfully found, it calls `rdma_put_gid_attr(attr)`. That makes sense. But what happens if the `port` *isn't* found?

Digging into the code snippet, it looks like if the loop doesn't find a matching GID, `attr` becomes an error pointer, specifically `ERR_PTR(-ENOENT)`. That means in the case of a failed lookup, `rdma_put_gid_attr` is correctly *not* called. Good.

But wait, I need to consider a potential edge case. What if the GID is found (so the `!IS_ERR(attr)` condition passes), but then `cm_dev->port[attr->port_num - 1]` is actually `NULL`? Is that even possible? I need to understand how the `cm_dev->port` array is allocated and initialized. This could be a significant issue and might lead to a null pointer dereference. I need to trace back through the code to see under what conditions `cm_dev->port` can be assigned, and, critically, when a `NULL` entry is possible within that array. I'll check the allocation and initialization of `cm_dev->port` to be sure there isn't a race condition, or some other scenario where this can occur.



163/2 2026/05/21 21:20 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cm.c IncludeLines:true Name:cm_add_one]

Results:
map[SourceCode:4335:	static int cm_add_one(struct ib_device *ib_device)
4336:	{
4337:		struct cm_device *cm_dev;
4338:		struct cm_port *port;
4339:		struct ib_mad_reg_req reg_req = {
4340:			.mgmt_class = IB_MGMT_CLASS_CM,
4341:			.mgmt_class_version = IB_CM_CLASS_VERSION,
4342:		};
4343:		struct ib_port_modify port_modify = {
4344:			.set_port_cap_mask = IB_PORT_CM_SUP
4345:		};
4346:		unsigned long flags;
4347:		int ret;
4348:		int count = 0;
4349:		u32 i;
4350:	
4351:		cm_dev = kzalloc_flex(*cm_dev, port, ib_device->phys_port_cnt);
4352:		if (!cm_dev)
4353:			return -ENOMEM;
4354:	
4355:		kref_init(&cm_dev->kref);
4356:		rwlock_init(&cm_dev->mad_agent_lock);
4357:		cm_dev->ib_device = ib_device;
4358:		cm_dev->ack_delay = ib_device->attrs.local_ca_ack_delay;
4359:		cm_dev->going_down = 0;
4360:	
4361:		ib_set_client_data(ib_device, &cm_client, cm_dev);
4362:	
4363:		set_bit(IB_MGMT_METHOD_SEND, reg_req.method_mask);
4364:		rdma_for_each_port (ib_device, i) {
4365:			if (!rdma_cap_ib_cm(ib_device, i))
4366:				continue;
4367:	
4368:			port = kzalloc_obj(*port);
4369:			if (!port) {
4370:				ret = -ENOMEM;
4371:				goto error1;
4372:			}
4373:	
4374:			cm_dev->port[i-1] = port;
4375:			port->cm_dev = cm_dev;
4376:			port->port_num = i;
4377:	
4378:			ret = ib_port_register_client_groups(ib_device, i,
4379:							     cm_counter_groups);
4380:			if (ret)
4381:				goto error1;
4382:	
4383:			port->mad_agent = ib_register_mad_agent(ib_device, i,
4384:								IB_QPT_GSI,
4385:								&reg_req,
4386:								0,
4387:								cm_send_handler,
4388:								cm_recv_handler,
4389:								port,
4390:								0);
4391:			if (IS_ERR(port->mad_agent)) {
4392:				ret = PTR_ERR(port->mad_agent);
4393:				goto error2;
4394:			}
4395:	
4396:			port->rep_agent = ib_register_mad_agent(ib_device, i,
4397:								IB_QPT_GSI,
4398:								NULL,
4399:								0,
4400:								cm_send_handler,
4401:								NULL,
4402:								port,
4403:								0);
4404:			if (IS_ERR(port->rep_agent)) {
4405:				ret = PTR_ERR(port->rep_agent);
4406:				goto error3;
4407:			}
4408:	
4409:			ret = ib_modify_port(ib_device, i, 0, &port_modify);
4410:			if (ret)
4411:				goto error4;
4412:	
4413:			count++;
4414:		}
4415:	
4416:		if (!count) {
4417:			ret = -EOPNOTSUPP;
4418:			goto free;
4419:		}
4420:	
4421:		write_lock_irqsave(&cm.device_lock, flags);
4422:		list_add_tail(&cm_dev->list, &cm.device_list);
4423:		write_unlock_irqrestore(&cm.device_lock, flags);
4424:		return 0;
4425:	
4426:	error4:
4427:		ib_unregister_mad_agent(port->rep_agent);
4428:	error3:
4429:		ib_unregister_mad_agent(port->mad_agent);
4430:	error2:
4431:		ib_port_unregister_client_groups(ib_device, i, cm_counter_groups);
4432:	error1:
4433:		port_modify.set_port_cap_mask = 0;
4434:		port_modify.clr_port_cap_mask = IB_PORT_CM_SUP;
4435:		while (--i) {
4436:			if (!rdma_cap_ib_cm(ib_device, i))
4437:				continue;
4438:	
4439:			port = cm_dev->port[i-1];
4440:			ib_modify_port(ib_device, port->port_num, 0, &port_modify);
4441:			ib_unregister_mad_agent(port->rep_agent);
4442:			ib_unregister_mad_agent(port->mad_agent);
4443:			ib_port_unregister_client_groups(ib_device, i,
4444:							 cm_counter_groups);
4445:		}
4446:	free:
4447:		cm_device_put(cm_dev);
4448:		return ret;
4449:	}
 SourceFile:drivers/infiniband/core/cm.c]

164/2 2026/05/21 21:20 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 102793
							output: 47
							thoughts: 80
						

Thoughts:
**A Moment of Careful Consideration**

Hold on a second... It just hit me. That access, `cm_dev->port[i-1]`, that's only valid *if* `rdma_cap_ib_cm(ib_device, i)` evaluates to true. If that capability isn't there, if `rdma_cap_ib_cm` is false, then `cm_dev->port[i-1]` is going to be NULL! That's a potential null pointer dereference, and we absolutely can't have that. Before I do anything else, I need to verify that conditional. I'm going to jump in and check `rdma_cap_ib_cm` immediately; this needs to be validated and handled.



165/2 2026/05/21 21:20 tool codesearch-definition-source
0m Args:
map[ContextFile:include/rdma/ib_verbs.h IncludeLines:true Name:rdma_cap_ib_cm]

Results:
map[SourceCode:3349:	/**
3350:	 * rdma_cap_ib_cm - Check if the port of device has the capability Infiniband
3351:	 * Communication Manager.
3352:	 * @device: Device to check
3353:	 * @port_num: Port number to check
3354:	 *
3355:	 * The InfiniBand Communication Manager is one of many pre-defined General
3356:	 * Service Agents (GSA) that are accessed via the General Service
3357:	 * Interface (GSI).  It's role is to facilitate establishment of connections
3358:	 * between nodes as well as other management related tasks for established
3359:	 * connections.
3360:	 *
3361:	 * Return: true if the port supports an IB CM (this does not guarantee that
3362:	 * a CM is actually running however).
3363:	 */
3364:	static inline bool rdma_cap_ib_cm(const struct ib_device *device, u32 port_num)
3365:	{
3366:		return device->port_data[port_num].immutable.core_cap_flags &
3367:		       RDMA_CORE_CAP_IB_CM;
3368:	}
 SourceFile:include/rdma/ib_verbs.h]

166/2 2026/05/21 21:20 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 103449
							output: 50
							thoughts: 1534
						

Thoughts:
**Analysis of a Potential GID Attribute Leak in RDMA Connection Manager Code**

Okay, let me walk through this. It seems like I've stumbled upon a potential resource leak within the RDMA connection manager (CM) code. The core issue revolves around how GID (Global Identifier) attributes are handled, specifically within the `get_cm_port_from_path` function.

First, I've noticed a scenario where `rdma_cap_ib_cm` is false. This leads to `cm_dev->port[i-1]` potentially being NULL. Diving into `get_cm_port_from_path`, I see that it iterates through a list of CM devices, attempting to find a GID attribute using `rdma_find_gid`. Critically, if `rdma_find_gid` finds an `attr` (meaning `!IS_ERR(attr)`), it retrieves a `port` from `cm_dev->port[attr->port_num - 1]`.

Now, here's where it gets interesting: If `port` is NULL because the indexed port on the device doesn't support IB CM, the code breaks out of the loop. Crucially, the subsequent check `if (port)` evaluates to false. This means `rdma_put_gid_attr(attr)` is *not* called. And that, my friend, smells like a leak! We've found a GID attribute and have a valid `attr` but *because* the indexed port is NULL, we're not releasing the resource.

Thinking this through, the scenario is this: a device *can* have some ports that support IB CM and some that don't, which is exactly how the driver is structured, by using `rdma_cap_ib_cm` to specify on a per-port basis. If `rdma_find_gid` finds a GID on a port that doesn't support CM, the code will fail to release the `attr`.

My suspicion was verified by examining the `else` branch of the code. If the GID attribute is not found, the code iterates through devices, and attempts to find a match. In this case, if `!IS_ERR(attr)` is true, but `cm_dev->port[attr->port_num - 1]` is NULL, then the code breaks out of the loop and skips `rdma_put_gid_attr(attr)`. That confirms the leak.

Now, a critical question: Can this happen? Yes, because some ports may not support IB CM, yet still have GIDs (e.g., RoCE devices).

The key here is that `rdma_find_gid` acquires a reference to the `attr`, and `get_cm_port_from_path` *should* release it. It does so *if* a valid port is found. But, if a GID *is* found on a port that *doesn't* support IB CM, we have a leak because we end up with `port` being NULL.

Finally, looking at the code, if `attr` *is* passed to `get_cm_port_from_path`, if the port is NULL, then the caller doesn't own `attr`. It's the `else` branch, where `rdma_find_gid` is called, that is the location of the leak. It grabs the resource but does *not* release it in the NULL `port` condition.

So, the conclusion is clear: This is a clear resource leak, and it needs immediate attention.



167/2 2026/05/21 21:21 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cm.c IncludeLines:true Name:get_cm_port_from_path]

Results:
map[SourceCode: 485:	static struct cm_port *
 486:	get_cm_port_from_path(struct sa_path_rec *path, const struct ib_gid_attr *attr)
 487:	{
 488:		struct cm_device *cm_dev;
 489:		struct cm_port *port = NULL;
 490:		unsigned long flags;
 491:	
 492:		if (attr) {
 493:			read_lock_irqsave(&cm.device_lock, flags);
 494:			list_for_each_entry(cm_dev, &cm.device_list, list) {
 495:				if (cm_dev->ib_device == attr->device) {
 496:					port = cm_dev->port[attr->port_num - 1];
 497:					break;
 498:				}
 499:			}
 500:			read_unlock_irqrestore(&cm.device_lock, flags);
 501:		} else {
 502:			/* SGID attribute can be NULL in following
 503:			 * conditions.
 504:			 * (a) Alternative path
 505:			 * (b) IB link layer without GRH
 506:			 * (c) LAP send messages
 507:			 */
 508:			read_lock_irqsave(&cm.device_lock, flags);
 509:			list_for_each_entry(cm_dev, &cm.device_list, list) {
 510:				attr = rdma_find_gid(cm_dev->ib_device,
 511:						     &path->sgid,
 512:						     sa_conv_pathrec_to_gid_type(path),
 513:						     NULL);
 514:				if (!IS_ERR(attr)) {
 515:					port = cm_dev->port[attr->port_num - 1];
 516:					break;
 517:				}
 518:			}
 519:			read_unlock_irqrestore(&cm.device_lock, flags);
 520:			if (port)
 521:				rdma_put_gid_attr(attr);
 522:		}
 523:		return port;
 524:	}
 SourceFile:drivers/infiniband/core/cm.c]

168/2 2026/05/21 21:21 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 106453
							output: 48
							thoughts: 1282
						

Thoughts:
**Analyzing a Potential GID Attribute Reference Leak**

Okay, so I'm looking at this code and a potential issue is jumping out at me. If `!IS_ERR(attr)` is true, but the `port` pointer is NULL, we're going to have a problem. Specifically, the subsequent `if (port)` check will be false, and `rdma_put_gid_attr(attr)` won't be called. This means we've leaked a reference to the GID attribute.  That's bad.

Let me think this through. Can `!IS_ERR(attr)` ever be true when `port` is indeed NULL?  Yes, I think it can. If `cm_dev->port[attr->port_num - 1]` is NULL, then `port` would be null.  When does this happen? Well, if the `rdma_cap_ib_cm` function returns false for a specific port number on a device, then `cm_dev->port[attr->port_num - 1]` might be null.

Let me consider some cases here. RoCE devices are relevant here because they do have GID tables, but might not support IB CM for all ports. Let's say a device doesn't support IB CM at all. Then `cm_add_one` would fail with an `-EOPNOTSUPP` error, and the device wouldn't even be in the `cm.device_list`. Alright, but let's assume it has two ports, and the first supports IB CM, but the second does not. Then the `cm_dev` will be in the `cm.device_list`, but if `path->sgid` matches a GID on port 2, then `rdma_find_gid` will return an `attr` pointer which points to port 2. Now `port = cm_dev->port[1]`, which is NULL! That breaks, and we leak the `attr`.

But wait, is there another possibility for the `port` to be NULL? Okay, suppose `!IS_ERR(attr)` is true and `port` isn't NULL. Then it *doesn't* leak. If `!IS_ERR(attr)` is false, meaning `IS_ERR(attr)` is true. Well, we skip the `rdma_put_gid_attr` and continue in the loop. Then the loop finishes and if it finishes without finding an `attr`, `port` is null. But, in this case, `attr` *is* an error pointer, so we *shouldn't* be putting it anyway. Now, wait a minute, what if `rdma_find_gid` returns `ERR_PTR(...)`, and we don't break. Then at the end of the loop, `attr` is now `ERR_PTR(...)`. And if `if (port)` is false, we don't put it which is correct.

However, let's go back to our initial concern: if `!IS_ERR(attr)` is true, but `port` *is* NULL. This is the leak. Is this the *only* leak? This is the central question! Let's check for any case where `!IS_ERR(attr)` is true, but `port` can be NULL. That's the core issue. We leak `attr` if this condition is met.

To fix this then, we should change the condition from `if (port)` to `if (!IS_ERR(attr))`. Because if `!IS_ERR(attr)` is true, we acquired a reference, regardless of `port` being null or not. And we need to release it.

Hold on a second, can `port` be NULL when `!IS_ERR(attr)` is true? I think so. As I said before, if `cm_dev->port[attr->port_num - 1]` is NULL. Anything else? If `attr` is valid, and `port` is not NULL, we put it. But if `attr` is valid, and `port` is NULL. That is the leak. It this the *only* leak?

Now, let me go back to the syzkaller log, just to be sure. It states that the device `syz1` has a `port count 1`. If it has only one port and it is in `cm.device_list`, then `cm_dev->port[0]` *must* be non-NULL. If it was NULL, then `cm_add_one` would have found a `count == 0` and returned `-EOPNOTSUPP`, and the device would not be in the `cm.device_list`. So for this 1-


169/2 2026/05/21 21:21 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeSnippetLines:0 Name:rdma_find_gid]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:get_cm_port_from_path SourceFile:drivers/infiniband/core/cm.c SourceLine:510]] TruncatedOutput:false]

170/2 2026/05/21 21:21 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 108886
							output: 48
							thoughts: 201
						

Thoughts:
**Investigating GID Attribute Retrieval**

Okay, so I'm focusing on GID retrieval and I've noticed something. `rdma_find_gid` is *only* called by `get_cm_port_from_path`. That seems a bit...limiting. What about `rdma_get_gid_attr`? We're clearly dealing with GID information, so I need to understand all the different ways the system accesses it.

Let me refresh my memory of where else we're checking these GID attributes. Ah, yes:

*   `_show_port_gid_attr` – Makes sense, displaying the information.
*   `cma_validate_port` – Interesting, that's potentially critical for connection management.
*   `ib_init_ah_attr_from_wc` (through `get_sgid_attr_from_eth`) – Handling Address Handle attributes, and SGID retrieval from Ethernet.
*   `ib_uverbs_handler_UVERBS_METHOD_QUERY_GID_ENTRY` – A user-space interaction through uverbs, that's crucial for understanding how GID's are requested.
*   `rdma_fill_sgid_attr` – Filling in SGID attributes, of course.
*   `rxe_init_packet` – Related to packet initialization in the RXE (RDMA over Ethernet) context.
*   `show_port_gid` – Another display function.
*   `smc_ib_check_link_gid` – Part of the Shared Memory Communications over IB (SMC-IB) protocol.
*   `smc_ib_determine_gid` – Determining the GID within the SMC-IB context.
*   `smc_ib_fill_mac` – Filling in MAC addresses, related to SMC-IB as well.

Given that list, I'm going to dig a little deeper into how `cma_validate_port` works. It has to be an important entrypoint for GID attribute validation.



171/2 2026/05/21 21:21 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cma.c IncludeLines:true Name:cma_validate_port]

Results:
map[SourceCode: 670:	static const struct ib_gid_attr *
 671:	cma_validate_port(struct ib_device *device, u32 port,
 672:			  enum ib_gid_type gid_type,
 673:			  union ib_gid *gid,
 674:			  struct rdma_id_private *id_priv)
 675:	{
 676:		struct rdma_dev_addr *dev_addr = &id_priv->id.route.addr.dev_addr;
 677:		const struct ib_gid_attr *sgid_attr = ERR_PTR(-ENODEV);
 678:		int bound_if_index = dev_addr->bound_dev_if;
 679:		int dev_type = dev_addr->dev_type;
 680:		struct net_device *ndev = NULL;
 681:		struct net_device *pdev = NULL;
 682:	
 683:		if (!rdma_dev_access_netns(device, id_priv->id.route.addr.dev_addr.net))
 684:			goto out;
 685:	
 686:		if ((dev_type == ARPHRD_INFINIBAND) && !rdma_protocol_ib(device, port))
 687:			goto out;
 688:	
 689:		if ((dev_type != ARPHRD_INFINIBAND) && rdma_protocol_ib(device, port))
 690:			goto out;
 691:	
 692:		/*
 693:		 * For drivers that do not associate more than one net device with
 694:		 * their gid tables, such as iWARP drivers, it is sufficient to
 695:		 * return the first table entry.
 696:		 *
 697:		 * Other driver classes might be included in the future.
 698:		 */
 699:		if (rdma_protocol_iwarp(device, port)) {
 700:			sgid_attr = rdma_get_gid_attr(device, port, 0);
 701:			if (IS_ERR(sgid_attr))
 702:				goto out;
 703:	
 704:			rcu_read_lock();
 705:			ndev = rcu_dereference(sgid_attr->ndev);
 706:			if (ndev->ifindex != bound_if_index) {
 707:				pdev = dev_get_by_index_rcu(dev_addr->net, bound_if_index);
 708:				if (pdev) {
 709:					if (is_vlan_dev(pdev)) {
 710:						pdev = vlan_dev_real_dev(pdev);
 711:						if (ndev->ifindex == pdev->ifindex)
 712:							bound_if_index = pdev->ifindex;
 713:					}
 714:					if (is_vlan_dev(ndev)) {
 715:						pdev = vlan_dev_real_dev(ndev);
 716:						if (bound_if_index == pdev->ifindex)
 717:							bound_if_index = ndev->ifindex;
 718:					}
 719:				}
 720:			}
 721:			if (!net_eq(dev_net(ndev), dev_addr->net) ||
 722:			    ndev->ifindex != bound_if_index) {
 723:				rdma_put_gid_attr(sgid_attr);
 724:				sgid_attr = ERR_PTR(-ENODEV);
 725:			}
 726:			rcu_read_unlock();
 727:			goto out;
 728:		}
 729:	
 730:		/*
 731:		 * For a RXE device, it should work with TUN device and normal ethernet
 732:		 * devices. Use driver_id to check if a device is a RXE device or not.
 733:		 * ARPHDR_NONE means a TUN device.
 734:		 */
 735:		if (device->ops.driver_id == RDMA_DRIVER_RXE) {
 736:			if ((dev_type == ARPHRD_NONE || dev_type == ARPHRD_ETHER)
 737:				&& rdma_protocol_roce(device, port)) {
 738:				ndev = dev_get_by_index(dev_addr->net, bound_if_index);
 739:				if (!ndev)
 740:					goto out;
 741:			}
 742:		} else {
 743:			if (dev_type == ARPHRD_ETHER && rdma_protocol_roce(device, port)) {
 744:				ndev = dev_get_by_index(dev_addr->net, bound_if_index);
 745:				if (!ndev)
 746:					goto out;
 747:			} else {
 748:				gid_type = IB_GID_TYPE_IB;
 749:			}
 750:		}
 751:	
 752:		sgid_attr = rdma_find_gid_by_port(device, gid, gid_type, port, ndev);
 753:		dev_put(ndev);
 754:	out:
 755:		return sgid_attr;
 756:	}
 SourceFile:drivers/infiniband/core/cma.c]

172/2 2026/05/21 21:21 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 111088
							output: 49
							thoughts: 27
						

Thoughts:
Here's a summary of my thought process, as requested:

**Digging into the `cma_validate_port` Function**

Okay, so `cma_validate_port` is returning `sgid_attr`. That's a key piece of information.  I immediately need to understand the context.  What's the purpose of `sgid_attr`?  Is it a structure, an integer, a bitmask?  I need to refresh my memory on what that attribute represents in this particular system - it probably holds some crucial port configuration information.  More importantly, I need to know *who* is calling this function. Understanding the callers will give me the functional context, which is key. The call stack will shed light on what dependencies there may be, and where `cma_validate_port`'s output is being used. From here, I can trace dependencies and understand why this validation is performed.



173/2 2026/05/21 21:21 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/cma.c IncludeSnippetLines:0 Name:cma_validate_port]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cma_acquire_dev_by_src_ip SourceFile:drivers/infiniband/core/cma.c SourceLine:803] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cma_ib_acquire_dev SourceFile:drivers/infiniband/core/cma.c SourceLine:851] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cma_iw_acquire_dev SourceFile:drivers/infiniband/core/cma.c SourceLine:892] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cma_iw_acquire_dev SourceFile:drivers/infiniband/core/cma.c SourceLine:908]] TruncatedOutput:false]

174/2 2026/05/21 21:21 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 111616
							output: 54
							thoughts: 18
						

Thoughts:
Okay, let's dive into this. Here's my thought process on what we're looking at, summarized from that prompt:

**Analyzing `cma_acquire_dev_by_src_ip`**

Alright, the instruction is clear – let's shift our focus to `cma_acquire_dev_by_src_ip`. My mind immediately jumps to the function's name. It's designed to acquire a device based on its source IP address, likely within a context related to Connection Management Agent (CMA). It's a standard practice for network management, device discovery, or even security systems that need to track which devices are initiating connections. I'm already anticipating the typical challenges: race conditions, concurrency issues (especially if multiple processes or threads are accessing the function simultaneously), and error handling with respect to the returned device data or any associated errors. I will need to be prepared to see an ip address as an input and an associated device data as an output. I wonder how the function interacts with the device registry or inventory system if a match is found. I will be looking for how it handles scenarios where no device is associated with the given IP and what the handling of the returned data looks like. Let's see how it's implemented.



175/2 2026/05/21 21:21 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cma.c IncludeLines:true Name:cma_acquire_dev_by_src_ip]

Results:
map[SourceCode: 765:	/**
 766:	 * cma_acquire_dev_by_src_ip - Acquire cma device, port, gid attribute
 767:	 * based on source ip address.
 768:	 * @id_priv:	cm_id which should be bound to cma device
 769:	 *
 770:	 * cma_acquire_dev_by_src_ip() binds cm id to cma device, port and GID attribute
 771:	 * based on source IP address. It returns 0 on success or error code otherwise.
 772:	 * It is applicable to active and passive side cm_id.
 773:	 */
 774:	static int cma_acquire_dev_by_src_ip(struct rdma_id_private *id_priv)
 775:	{
 776:		struct rdma_dev_addr *dev_addr = &id_priv->id.route.addr.dev_addr;
 777:		const struct ib_gid_attr *sgid_attr;
 778:		union ib_gid gid, iboe_gid, *gidp;
 779:		struct cma_device *cma_dev;
 780:		enum ib_gid_type gid_type;
 781:		int ret = -ENODEV;
 782:		u32 port;
 783:	
 784:		if (dev_addr->dev_type != ARPHRD_INFINIBAND &&
 785:		    id_priv->id.ps == RDMA_PS_IPOIB)
 786:			return -EINVAL;
 787:	
 788:		rdma_ip2gid((struct sockaddr *)&id_priv->id.route.addr.src_addr,
 789:			    &iboe_gid);
 790:	
 791:		memcpy(&gid, dev_addr->src_dev_addr +
 792:		       rdma_addr_gid_offset(dev_addr), sizeof(gid));
 793:	
 794:		mutex_lock(&lock);
 795:		list_for_each_entry(cma_dev, &dev_list, list) {
 796:			if (id_priv->restricted_node_type != RDMA_NODE_UNSPECIFIED &&
 797:			    id_priv->restricted_node_type != cma_dev->device->node_type)
 798:				continue;
 799:			rdma_for_each_port (cma_dev->device, port) {
 800:				gidp = rdma_protocol_roce(cma_dev->device, port) ?
 801:				       &iboe_gid : &gid;
 802:				gid_type = cma_dev->default_gid_type[port - 1];
 803:				sgid_attr = cma_validate_port(cma_dev->device, port,
 804:							      gid_type, gidp, id_priv);
 805:				if (!IS_ERR(sgid_attr)) {
 806:					id_priv->id.port_num = port;
 807:					cma_bind_sgid_attr(id_priv, sgid_attr);
 808:					cma_attach_to_dev(id_priv, cma_dev);
 809:					ret = 0;
 810:					goto out;
 811:				}
 812:			}
 813:		}
 814:	out:
 815:		mutex_unlock(&lock);
 816:		return ret;
 817:	}
 SourceFile:drivers/infiniband/core/cma.c]

176/2 2026/05/21 21:21 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 112948
							output: 51
							thoughts: 41
						

Thoughts:
Okay, here's my take on those thoughts, framed from an expert's perspective:

**Diving into CMA SGID Attribute Binding**

Alright, let's see, we're talking about `cma_bind_sgid_attr`. That rings a bell, I know this is the function responsible for associating the `sgid_attr` – probably the shared group ID attributes – with the `id_priv` structure within the CMA framework. Got it. So, we're focusing on how those shared group ID attributes are specifically linked. I need to take a closer look at `cma_bind_sgid_attr` now and fully grasp how this binding is implemented. I'm keen to confirm my understanding and to perhaps identify any nuances in the mechanism.



177/2 2026/05/21 21:21 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cma.c IncludeLines:true Name:cma_bind_sgid_attr]

Results:
map[SourceCode: 758:	static void cma_bind_sgid_attr(struct rdma_id_private *id_priv,
 759:				       const struct ib_gid_attr *sgid_attr)
 760:	{
 761:		WARN_ON(id_priv->id.route.addr.dev_addr.sgid_attr);
 762:		id_priv->id.route.addr.dev_addr.sgid_attr = sgid_attr;
 763:	}
 SourceFile:drivers/infiniband/core/cma.c]

178/2 2026/05/21 21:21 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 113369
							output: 48
							thoughts: 35
						

Thoughts:
**Understanding Memory Management**

Okay, wait a minute. I need to clarify something about how this is working. It's not storing another full reference, right? It's just holding onto the pointer, the address in memory. Got it. So, the crucial question then becomes: when does this pointer get released? When does the memory get freed? I need to be sure about this.

Alright, let's dive into the implementation. I'm going to check `cma_release_dev`. That should tell me precisely when and how that pointer is getting deallocated, and therefore, when the memory it's pointing to is available for re-use. This is key to preventing memory leaks or access-after-free issues.



179/2 2026/05/21 21:21 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cma.c IncludeLines:true Name:cma_release_dev]

Results:
map[SourceCode: 596:	static void cma_release_dev(struct rdma_id_private *id_priv)
 597:	{
 598:		mutex_lock(&lock);
 599:		list_del_init(&id_priv->device_item);
 600:		cma_dev_put(id_priv->cma_dev);
 601:		id_priv->cma_dev = NULL;
 602:		id_priv->id.device = NULL;
 603:		if (id_priv->id.route.addr.dev_addr.sgid_attr) {
 604:			rdma_put_gid_attr(id_priv->id.route.addr.dev_addr.sgid_attr);
 605:			id_priv->id.route.addr.dev_addr.sgid_attr = NULL;
 606:		}
 607:		mutex_unlock(&lock);
 608:	}
 SourceFile:drivers/infiniband/core/cma.c]

180/2 2026/05/21 21:21 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 113892
							output: 50
							thoughts: 147
						

Thoughts:
**Analyzing the RDMA Connection Process**

Okay, so the code flow starts with a call to `rdma_put_gid_attr`, which is as expected. My primary concern right now is the potential for resource leaks, specifically within `cma_acquire_dev_by_src_ip`. I need to ensure that function doesn't inadvertently leave anything hanging.

The logic here is interesting. `cma_validate_port` seems to be the gatekeeper; if it successfully validates and returns a valid `sgid_attr`, the system binds it and returns 0 – clean and straightforward. But, what happens if `cma_validate_port` hits an error during validation? The loop continues, which is expected behavior for an exhaustive search, but it still triggers a thought: 

Wait a minute, what if `cma_validate_port` *does* succeed, gives us that valid `sgid_attr`, but then `cma_attach_to_dev` fails? My concern is around failure cases.

Ah, I see! Actually, `cma_attach_to_dev` *doesn't* return anything. It's `void`. So, based on the signature, it can't technically fail in the sense of returning an error code. It's designed to either succeed or handle the issue internally. I guess I need to shift my focus from looking for an explicit failure return to understanding how it handles internal problems.

Alright, the next step is to dig into the `cma_ib_acquire_dev` function and understand its role in this whole process. It's the next logical piece to dissect.



181/2 2026/05/21 21:21 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cma.c IncludeLines:true Name:cma_ib_acquire_dev]

Results:
map[SourceCode: 819:	/**
 820:	 * cma_ib_acquire_dev - Acquire cma device, port and SGID attribute
 821:	 * @id_priv:		cm id to bind to cma device
 822:	 * @listen_id_priv:	listener cm id to match against
 823:	 * @req:		Pointer to req structure containaining incoming
 824:	 *			request information
 825:	 * cma_ib_acquire_dev() acquires cma device, port and SGID attribute when
 826:	 * rdma device matches for listen_id and incoming request. It also verifies
 827:	 * that a GID table entry is present for the source address.
 828:	 * Returns 0 on success, or returns error code otherwise.
 829:	 */
 830:	static int cma_ib_acquire_dev(struct rdma_id_private *id_priv,
 831:				      const struct rdma_id_private *listen_id_priv,
 832:				      struct cma_req_info *req)
 833:	{
 834:		struct rdma_dev_addr *dev_addr = &id_priv->id.route.addr.dev_addr;
 835:		const struct ib_gid_attr *sgid_attr;
 836:		enum ib_gid_type gid_type;
 837:		union ib_gid gid;
 838:	
 839:		if (dev_addr->dev_type != ARPHRD_INFINIBAND &&
 840:		    id_priv->id.ps == RDMA_PS_IPOIB)
 841:			return -EINVAL;
 842:	
 843:		if (rdma_protocol_roce(req->device, req->port))
 844:			rdma_ip2gid((struct sockaddr *)&id_priv->id.route.addr.src_addr,
 845:				    &gid);
 846:		else
 847:			memcpy(&gid, dev_addr->src_dev_addr +
 848:			       rdma_addr_gid_offset(dev_addr), sizeof(gid));
 849:	
 850:		gid_type = listen_id_priv->cma_dev->default_gid_type[req->port - 1];
 851:		sgid_attr = cma_validate_port(req->device, req->port,
 852:					      gid_type, &gid, id_priv);
 853:		if (IS_ERR(sgid_attr))
 854:			return PTR_ERR(sgid_attr);
 855:	
 856:		id_priv->id.port_num = req->port;
 857:		cma_bind_sgid_attr(id_priv, sgid_attr);
 858:		/* Need to acquire lock to protect against reader
 859:		 * of cma_dev->id_list such as cma_netdev_callback() and
 860:		 * cma_process_remove().
 861:		 */
 862:		mutex_lock(&lock);
 863:		cma_attach_to_dev(id_priv, listen_id_priv->cma_dev);
 864:		mutex_unlock(&lock);
 865:		rdma_restrack_add(&id_priv->res);
 866:		return 0;
 867:	}
 SourceFile:drivers/infiniband/core/cma.c]

182/2 2026/05/21 21:21 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 115384
							output: 50
							thoughts: 20
						

Thoughts:
Okay, here's my take on those thoughts, tailored for an expert audience:

**No Leak Detected (So Far)**

Alright, so the memory situation seems clean at this point. That's a relief. We haven't stumbled across anything obvious yet. Given the nature of the previous issues, the next logical step to trace this down seems to be focusing on the driver acquisition code path. Specifically, I should probably take a closer look at `cma_iw_acquire_dev`. Time to dig in and see what that function is up to. Let's see if there's any allocation or deallocation anomalies.



183/2 2026/05/21 21:21 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cma.c IncludeLines:true Name:cma_iw_acquire_dev]

Results:
map[SourceCode: 869:	static int cma_iw_acquire_dev(struct rdma_id_private *id_priv,
 870:				      const struct rdma_id_private *listen_id_priv)
 871:	{
 872:		struct rdma_dev_addr *dev_addr = &id_priv->id.route.addr.dev_addr;
 873:		const struct ib_gid_attr *sgid_attr;
 874:		struct cma_device *cma_dev;
 875:		enum ib_gid_type gid_type;
 876:		int ret = -ENODEV;
 877:		union ib_gid gid;
 878:		u32 port;
 879:	
 880:		if (dev_addr->dev_type != ARPHRD_INFINIBAND &&
 881:		    id_priv->id.ps == RDMA_PS_IPOIB)
 882:			return -EINVAL;
 883:	
 884:		memcpy(&gid, dev_addr->src_dev_addr +
 885:		       rdma_addr_gid_offset(dev_addr), sizeof(gid));
 886:	
 887:		mutex_lock(&lock);
 888:	
 889:		cma_dev = listen_id_priv->cma_dev;
 890:		port = listen_id_priv->id.port_num;
 891:		gid_type = listen_id_priv->gid_type;
 892:		sgid_attr = cma_validate_port(cma_dev->device, port,
 893:					      gid_type, &gid, id_priv);
 894:		if (!IS_ERR(sgid_attr)) {
 895:			id_priv->id.port_num = port;
 896:			cma_bind_sgid_attr(id_priv, sgid_attr);
 897:			ret = 0;
 898:			goto out;
 899:		}
 900:	
 901:		list_for_each_entry(cma_dev, &dev_list, list) {
 902:			rdma_for_each_port (cma_dev->device, port) {
 903:				if (listen_id_priv->cma_dev == cma_dev &&
 904:				    listen_id_priv->id.port_num == port)
 905:					continue;
 906:	
 907:				gid_type = cma_dev->default_gid_type[port - 1];
 908:				sgid_attr = cma_validate_port(cma_dev->device, port,
 909:							      gid_type, &gid, id_priv);
 910:				if (!IS_ERR(sgid_attr)) {
 911:					id_priv->id.port_num = port;
 912:					cma_bind_sgid_attr(id_priv, sgid_attr);
 913:					ret = 0;
 914:					goto out;
 915:				}
 916:			}
 917:		}
 918:	
 919:	out:
 920:		if (!ret) {
 921:			cma_attach_to_dev(id_priv, cma_dev);
 922:			rdma_restrack_add(&id_priv->res);
 923:		}
 924:	
 925:		mutex_unlock(&lock);
 926:		return ret;
 927:	}
 SourceFile:drivers/infiniband/core/cma.c]

184/2 2026/05/21 21:21 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 116594
							output: 66
							thoughts: 30
						

Thoughts:
Okay, here's my take on those thoughts, tailored for an expert audience:

**Analyzing the Absence of Evidence**

Alright, still nothing. No obvious red flags indicating a leak in this segment of the code. That’s a good sign, but doesn’t guarantee anything. Let's move on to the next likely culprit – and the next logical suspect based on my prior analysis – and scrutinize `ib_uverbs_handler_UVERBS_METHOD_QUERY_GID_ENTRY`. This routine is known for its interaction with GID entries and the potential for memory management issues in similar contexts. Time to delve into its inner workings and see what it's *not* doing as carefully as what it *is* doing. I need to make sure this code isn't mishandling memory related to these queries. Let’s get to it.



185/2 2026/05/21 21:22 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/uverbs_std_types_device.c IncludeLines:true Name:ib_uverbs_handler_UVERBS_METHOD_QUERY_GID_ENTRY]

Results:
map[SourceCode: 401:	static int UVERBS_HANDLER(UVERBS_METHOD_QUERY_GID_ENTRY)(
 402:		struct uverbs_attr_bundle *attrs)
 403:	{
 404:		struct ib_uverbs_gid_entry entry = {};
 405:		const struct ib_gid_attr *gid_attr;
 406:		struct ib_ucontext *ucontext;
 407:		struct ib_device *ib_dev;
 408:		struct net_device *ndev;
 409:		u32 gid_index;
 410:		u32 port_num;
 411:		u32 flags;
 412:		int ret;
 413:	
 414:		ret = uverbs_get_flags32(&flags, attrs,
 415:					 UVERBS_ATTR_QUERY_GID_ENTRY_FLAGS, 0);
 416:		if (ret)
 417:			return ret;
 418:	
 419:		ret = uverbs_get_const(&port_num, attrs,
 420:				       UVERBS_ATTR_QUERY_GID_ENTRY_PORT);
 421:		if (ret)
 422:			return ret;
 423:	
 424:		ret = uverbs_get_const(&gid_index, attrs,
 425:				       UVERBS_ATTR_QUERY_GID_ENTRY_GID_INDEX);
 426:		if (ret)
 427:			return ret;
 428:	
 429:		ucontext = ib_uverbs_get_ucontext(attrs);
 430:		if (IS_ERR(ucontext))
 431:			return PTR_ERR(ucontext);
 432:		ib_dev = ucontext->device;
 433:	
 434:		if (!rdma_is_port_valid(ib_dev, port_num))
 435:			return -EINVAL;
 436:	
 437:		gid_attr = rdma_get_gid_attr(ib_dev, port_num, gid_index);
 438:		if (IS_ERR(gid_attr))
 439:			return PTR_ERR(gid_attr);
 440:	
 441:		memcpy(&entry.gid, &gid_attr->gid, sizeof(gid_attr->gid));
 442:		entry.gid_index = gid_attr->index;
 443:		entry.port_num = gid_attr->port_num;
 444:		entry.gid_type = gid_attr->gid_type;
 445:	
 446:		rcu_read_lock();
 447:		ndev = rdma_read_gid_attr_ndev_rcu(gid_attr);
 448:		if (IS_ERR(ndev)) {
 449:			if (PTR_ERR(ndev) != -ENODEV) {
 450:				ret = PTR_ERR(ndev);
 451:				rcu_read_unlock();
 452:				goto out;
 453:			}
 454:		} else {
 455:			entry.netdev_ifindex = ndev->ifindex;
 456:		}
 457:		rcu_read_unlock();
 458:	
 459:		ret = uverbs_copy_to_struct_or_zero(
 460:			attrs, UVERBS_ATTR_QUERY_GID_ENTRY_RESP_ENTRY, &entry,
 461:			sizeof(entry));
 462:	out:
 463:		rdma_put_gid_attr(gid_attr);
 464:		return ret;
 465:	}
 SourceFile:drivers/infiniband/core/uverbs_std_types_device.c]

186/2 2026/05/21 21:22 llm expert
1m Model:
gemini-3.1-pro-preview

Tokens:
							input: 117914
							output: 53
							thoughts: 17
						

Thoughts:
Okay, here's my take on those thoughts, tailored for an expert audience:

**Analyzing the Situation**

Alright, no obvious leakage detected. That's good news, but we need to be thorough. My immediate thought is to zero in on the `rxe_init_packet` function. It's a critical point for packet initialization and could very well be the source of any potential issues, so that's where I'll begin my inspection. Time to dive into the code.



187/2 2026/05/21 21:23 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/sw/rxe/rxe_net.c IncludeLines:true Name:rxe_init_packet]

Results:
map[SourceCode: 531:	struct sk_buff *rxe_init_packet(struct rxe_dev *rxe, struct rxe_av *av,
 532:					int paylen, struct rxe_pkt_info *pkt)
 533:	{
 534:		unsigned int hdr_len;
 535:		struct sk_buff *skb = NULL;
 536:		struct net_device *ndev;
 537:		const struct ib_gid_attr *attr;
 538:		const int port_num = 1;
 539:	
 540:		attr = rdma_get_gid_attr(&rxe->ib_dev, port_num, av->grh.sgid_index);
 541:		if (IS_ERR(attr))
 542:			return NULL;
 543:	
 544:		if (av->network_type == RXE_NETWORK_TYPE_IPV4)
 545:			hdr_len = ETH_HLEN + sizeof(struct udphdr) +
 546:				sizeof(struct iphdr);
 547:		else
 548:			hdr_len = ETH_HLEN + sizeof(struct udphdr) +
 549:				sizeof(struct ipv6hdr);
 550:	
 551:		rcu_read_lock();
 552:		ndev = rdma_read_gid_attr_ndev_rcu(attr);
 553:		if (IS_ERR(ndev)) {
 554:			rcu_read_unlock();
 555:			goto out;
 556:		}
 557:		skb = alloc_skb(paylen + hdr_len + LL_RESERVED_SPACE(ndev),
 558:				GFP_ATOMIC);
 559:	
 560:		if (unlikely(!skb)) {
 561:			rcu_read_unlock();
 562:			goto out;
 563:		}
 564:	
 565:		/* Add time stamp to skb. */
 566:		skb->tstamp = ktime_get();
 567:	
 568:		skb_reserve(skb, hdr_len + LL_RESERVED_SPACE(ndev));
 569:	
 570:		/* FIXME: hold reference to this netdev until life of this skb. */
 571:		skb->dev	= ndev;
 572:		rcu_read_unlock();
 573:	
 574:		if (av->network_type == RXE_NETWORK_TYPE_IPV4)
 575:			skb->protocol = htons(ETH_P_IP);
 576:		else
 577:			skb->protocol = htons(ETH_P_IPV6);
 578:	
 579:		pkt->rxe	= rxe;
 580:		pkt->port_num	= port_num;
 581:		pkt->hdr	= skb_put(skb, paylen);
 582:		pkt->mask	|= RXE_GRH_MASK;
 583:	
 584:	out:
 585:		rdma_put_gid_attr(attr);
 586:		return skb;
 587:	}
 SourceFile:drivers/infiniband/sw/rxe/rxe_net.c]

188/2 2026/05/21 21:23 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 119009
							output: 47
							thoughts: 16
						

Thoughts:
Here's your summary:

**No Leak, Let's Investigate**

Okay, so I'm not seeing any immediate red flags. No obvious memory leak indicators are popping up here, which is a good starting point. My initial assessment is that everything looks clean at a glance.

Now, let's dive a bit deeper. I need to get a more granular view to rule out any subtle issues that might not be immediately apparent. I'm going to check `show_port_gid`. That command should give me some critical insights into port group identifiers. It should help me scrutinize resource allocation and usage patterns. Hopefully, it will illuminate the current state and reveal if there are any lurking problems.



189/2 2026/05/21 21:23 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/sysfs.c IncludeLines:true Name:show_port_gid]

Results:
map[SourceCode: 429:	static ssize_t show_port_gid(struct ib_device *ibdev, u32 port_num,
 430:				     struct ib_port_attribute *attr, char *buf)
 431:	{
 432:		struct port_table_attribute *tab_attr =
 433:			container_of(attr, struct port_table_attribute, attr);
 434:		const struct ib_gid_attr *gid_attr;
 435:		int len;
 436:	
 437:		gid_attr = rdma_get_gid_attr(ibdev, port_num, tab_attr->index);
 438:		if (IS_ERR(gid_attr)) {
 439:			const union ib_gid zgid = {};
 440:	
 441:			/* If reading GID fails, it is likely due to GID entry being
 442:			 * empty (invalid) or reserved GID in the table.  User space
 443:			 * expects to read GID table entries as long as it given index
 444:			 * is within GID table size.  Administrative/debugging tool
 445:			 * fails to query rest of the GID entries if it hits error
 446:			 * while querying a GID of the given index.  To avoid user
 447:			 * space throwing such error on fail to read gid, return zero
 448:			 * GID as before. This maintains backward compatibility.
 449:			 */
 450:			return sysfs_emit(buf, "%pI6\n", zgid.raw);
 451:		}
 452:	
 453:		len = sysfs_emit(buf, "%pI6\n", gid_attr->gid.raw);
 454:		rdma_put_gid_attr(gid_attr);
 455:		return len;
 456:	}
 SourceFile:drivers/infiniband/core/sysfs.c]

190/2 2026/05/21 21:23 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 119754
							output: 50
							thoughts: 19
						

Thoughts:
Here's my take on those thoughts:

**No Leak, Let's Investigate Further**

Okay, so the initial assessment is that there's no immediate indication of a memory leak. That's good news, but it's not enough to be certain. Now, let's drill down. The next logical step is to examine the behavior of `_show_port_gid_attr`. This function is likely responsible for... well, it's responsible for something related to showing and getting port group ID attributes. Understanding its specific implementation will provide insight. We need to see how it allocates memory, if it deallocates it properly, and if it interacts with any shared resources. We'll be looking for any clues that it might be contributing to, or potentially even masking, a memory leak elsewhere. Time to dive into the code.



191/2 2026/05/21 21:23 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/sysfs.c IncludeLines:true Name:_show_port_gid_attr]

Results:
map[SourceCode: 409:	static ssize_t _show_port_gid_attr(
 410:		struct ib_device *ibdev, u32 port_num, struct ib_port_attribute *attr,
 411:		char *buf,
 412:		ssize_t (*print)(const struct ib_gid_attr *gid_attr, char *buf))
 413:	{
 414:		struct port_table_attribute *tab_attr =
 415:			container_of(attr, struct port_table_attribute, attr);
 416:		const struct ib_gid_attr *gid_attr;
 417:		ssize_t ret;
 418:	
 419:		gid_attr = rdma_get_gid_attr(ibdev, port_num, tab_attr->index);
 420:		if (IS_ERR(gid_attr))
 421:			/* -EINVAL is returned for user space compatibility reasons. */
 422:			return -EINVAL;
 423:	
 424:		ret = print(gid_attr, buf);
 425:		rdma_put_gid_attr(gid_attr);
 426:		return ret;
 427:	}
 SourceFile:drivers/infiniband/core/sysfs.c]

192/2 2026/05/21 21:23 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 120359
							output: 49
							thoughts: 467
						

Thoughts:
**Addressing the Potential GID Attribute Leak**

Okay, there's definitely no immediate leak that I can see. But wait, what if `rdma_get_gid_attr` is called, but the function calling it forgets to call `rdma_put_gid_attr` at some point? That would cause a serious problem. Let's dig deeper and examine `rdma_fill_sgid_attr` again:

```c
static int rdma_fill_sgid_attr(struct ib_device *device,
			       struct rdma_ah_attr *ah_attr,
			       const struct ib_gid_attr **old_sgid_attr)
{
	const struct ib_gid_attr *sgid_attr;
	struct ib_global_route *grh;
	int ret;

	*old_sgid_attr = ah_attr->grh.sgid_attr;

	ret = rdma_check_ah_attr(device, ah_attr);
	if (ret)
		return ret;

	if (!(ah_attr->ah_flags & IB_AH_GRH))
		return 0;

	grh = rdma_ah_retrieve_grh(ah_attr);
	if (grh->sgid_attr)
		return 0;

	sgid_attr =
		rdma_get_gid_attr(device, ah_attr->port_num, grh->sgid_index);
	if (IS_ERR(sgid_attr))
		return PTR_ERR(sgid_attr);

	/* Move ownerhip of the kref into the ah_attr */
	grh->sgid_attr = sgid_attr;
	return 0;
}
```

Okay, the crucial part here is that if `rdma_fill_sgid_attr` succeeds, it looks like `grh->sgid_attr` *now* holds the reference. This means the kref ownership is transferred. Now, who's calling *this* function? Let me think...

1.  `rdma_create_ah`
2.  `rdma_create_user_ah`
3.  `rdma_modify_ah`
4.  `_ib_modify_qp`

Alright, let's start with `rdma_create_user_ah` - that seems like a likely candidate to be a source of potential leaks. I need to make sure the callers are handling the attribute correctly.



193/2 2026/05/21 21:23 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:rdma_create_user_ah]

Results:
map[SourceCode: 639:	/**
 640:	 * rdma_create_user_ah - Creates an address handle for the
 641:	 * given address vector.
 642:	 * It resolves destination mac address for ah attribute of RoCE type.
 643:	 * @pd: The protection domain associated with the address handle.
 644:	 * @ah_attr: The attributes of the address vector.
 645:	 * @udata: pointer to user's input output buffer information need by
 646:	 *         provider driver.
 647:	 *
 648:	 * It returns 0 on success and returns appropriate error code on error.
 649:	 * The address handle is used to reference a local or global destination
 650:	 * in all UD QP post sends.
 651:	 */
 652:	struct ib_ah *rdma_create_user_ah(struct ib_pd *pd,
 653:					  struct rdma_ah_attr *ah_attr,
 654:					  struct ib_udata *udata)
 655:	{
 656:		const struct ib_gid_attr *old_sgid_attr;
 657:		struct ib_ah *ah;
 658:		int err;
 659:	
 660:		err = rdma_fill_sgid_attr(pd->device, ah_attr, &old_sgid_attr);
 661:		if (err)
 662:			return ERR_PTR(err);
 663:	
 664:		if (ah_attr->type == RDMA_AH_ATTR_TYPE_ROCE) {
 665:			err = ib_resolve_eth_dmac(pd->device, ah_attr);
 666:			if (err) {
 667:				ah = ERR_PTR(err);
 668:				goto out;
 669:			}
 670:		}
 671:	
 672:		ah = _rdma_create_ah(pd, ah_attr, RDMA_CREATE_AH_SLEEPABLE,
 673:				     udata, NULL);
 674:	
 675:	out:
 676:		rdma_unfill_sgid_attr(ah_attr, old_sgid_attr);
 677:		return ah;
 678:	}
 SourceFile:drivers/infiniband/core/verbs.c]

194/2 2026/05/21 21:23 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 122099
							output: 47
							thoughts: 17
						

Thoughts:
Okay, here's my take on those thoughts, tailored for an expert audience:

**Analyzing the RDMA Context**

Right, no obvious leakage is popping out at first glance. Good. Now, I need to zero in on the potential trouble spots. Let's immediately shift our attention and drill down to the `rdma_modify_ah` function. That's the likely location for memory corruption issues. It's the most likely spot, due to the complexity associated with that particular function. I'll need to carefully dissect the AH modification process and determine its integrity.



195/2 2026/05/21 21:23 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:rdma_modify_ah]

Results:
map[SourceCode: 993:	int rdma_modify_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr)
 994:	{
 995:		const struct ib_gid_attr *old_sgid_attr;
 996:		int ret;
 997:	
 998:		if (ah->type != ah_attr->type)
 999:			return -EINVAL;
1000:	
1001:		ret = rdma_fill_sgid_attr(ah->device, ah_attr, &old_sgid_attr);
1002:		if (ret)
1003:			return ret;
1004:	
1005:		ret = ah->device->ops.modify_ah ?
1006:			ah->device->ops.modify_ah(ah, ah_attr) :
1007:			-EOPNOTSUPP;
1008:	
1009:		ah->sgid_attr = rdma_update_sgid_attr(ah_attr, ah->sgid_attr);
1010:		rdma_unfill_sgid_attr(ah_attr, old_sgid_attr);
1011:		return ret;
1012:	}
 SourceFile:drivers/infiniband/core/verbs.c]

196/2 2026/05/21 21:23 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 122647
							output: 47
							thoughts: 220
						

Thoughts:
**Analyzing a Potential Memory Leak**

Okay, hold on a second. I'm looking at this `ah->device->ops.modify_ah` function call within the context of RDMA address handling. If that `modify_ah` call fails and returns an error code, it still updates `ah->sgid_attr`. The code snippet shows this quite clearly:

```c
	ret = ah->device->ops.modify_ah ?
		ah->device->ops.modify_ah(ah, ah_attr) :
		-EOPNOTSUPP;

	ah->sgid_attr = rdma_update_sgid_attr(ah_attr, ah->sgid_attr);
	rdma_unfill_sgid_attr(ah_attr, old_sgid_attr);
	return ret;
```

My initial instinct, as a seasoned professional, is to immediately question whether this could be a memory leak. If `modify_ah` fails, and some of the intended modifications fail, but the new `sgid_attr` is updated regardless, there's a risk of stale references and resource abandonment.

But wait. Let me think this through carefully. The crucial part here is the `rdma_update_sgid_attr` function. I *assume* that this function correctly manages the resources associated with the attributes. It almost certainly needs to release the old `ah->sgid_attr` and hold onto the new one. And ultimately, when `ah` is destroyed, the function would need to release whatever it holds. If that's the case, then this whole thing *should* be safe. The update function is designed to handle this. No leak, as long as `rdma_update_sgid_attr` is correctly implemented.

Now, just to be completely sure, let's take a quick look at `_ib_modify_qp` and see how it handles this type of situation. Making sure all the dependencies are correct here is key. This could be a good place for further debugging.



197/2 2026/05/21 21:23 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:_ib_modify_qp]

Results:
map[SourceCode:1822:	/*
1823:	 * IB core internal function to perform QP attributes modification.
1824:	 */
1825:	static int _ib_modify_qp(struct ib_qp *qp, struct ib_qp_attr *attr,
1826:				 int attr_mask, struct ib_udata *udata)
1827:	{
1828:		u32 port = attr_mask & IB_QP_PORT ? attr->port_num : qp->port;
1829:		const struct ib_gid_attr *old_sgid_attr_av;
1830:		const struct ib_gid_attr *old_sgid_attr_alt_av;
1831:		int ret;
1832:	
1833:		attr->xmit_slave = NULL;
1834:		if (attr_mask & IB_QP_AV) {
1835:			ret = rdma_fill_sgid_attr(qp->device, &attr->ah_attr,
1836:						  &old_sgid_attr_av);
1837:			if (ret)
1838:				return ret;
1839:	
1840:			if (attr->ah_attr.type == RDMA_AH_ATTR_TYPE_ROCE &&
1841:			    is_qp_type_connected(qp)) {
1842:				struct net_device *slave;
1843:	
1844:				/*
1845:				 * If the user provided the qp_attr then we have to
1846:				 * resolve it. Kerne users have to provide already
1847:				 * resolved rdma_ah_attr's.
1848:				 */
1849:				if (udata) {
1850:					ret = ib_resolve_eth_dmac(qp->device,
1851:								  &attr->ah_attr);
1852:					if (ret)
1853:						goto out_av;
1854:				}
1855:				slave = rdma_lag_get_ah_roce_slave(qp->device,
1856:								   &attr->ah_attr,
1857:								   GFP_KERNEL);
1858:				if (IS_ERR(slave)) {
1859:					ret = PTR_ERR(slave);
1860:					goto out_av;
1861:				}
1862:				attr->xmit_slave = slave;
1863:			}
1864:		}
1865:		if (attr_mask & IB_QP_ALT_PATH) {
1866:			/*
1867:			 * FIXME: This does not track the migration state, so if the
1868:			 * user loads a new alternate path after the HW has migrated
1869:			 * from primary->alternate we will keep the wrong
1870:			 * references. This is OK for IB because the reference
1871:			 * counting does not serve any functional purpose.
1872:			 */
1873:			ret = rdma_fill_sgid_attr(qp->device, &attr->alt_ah_attr,
1874:						  &old_sgid_attr_alt_av);
1875:			if (ret)
1876:				goto out_av;
1877:	
1878:			/*
1879:			 * Today the core code can only handle alternate paths and APM
1880:			 * for IB. Ban them in roce mode.
1881:			 */
1882:			if (!(rdma_protocol_ib(qp->device,
1883:					       attr->alt_ah_attr.port_num) &&
1884:			      rdma_protocol_ib(qp->device, port))) {
1885:				ret = -EINVAL;
1886:				goto out;
1887:			}
1888:		}
1889:	
1890:		if (rdma_ib_or_roce(qp->device, port)) {
1891:			if (attr_mask & IB_QP_RQ_PSN && attr->rq_psn & ~0xffffff) {
1892:				dev_warn(&qp->device->dev,
1893:					 "%s rq_psn overflow, masking to 24 bits\n",
1894:					 __func__);
1895:				attr->rq_psn &= 0xffffff;
1896:			}
1897:	
1898:			if (attr_mask & IB_QP_SQ_PSN && attr->sq_psn & ~0xffffff) {
1899:				dev_warn(&qp->device->dev,
1900:					 " %s sq_psn overflow, masking to 24 bits\n",
1901:					 __func__);
1902:				attr->sq_psn &= 0xffffff;
1903:			}
1904:		}
1905:	
1906:		/*
1907:		 * Bind this qp to a counter automatically based on the rdma counter
1908:		 * rules. This only set in RST2INIT with port specified
1909:		 */
1910:		if (!qp->counter && (attr_mask & IB_QP_PORT) &&
1911:		    ((attr_mask & IB_QP_STATE) && attr->qp_state == IB_QPS_INIT))
1912:			rdma_counter_bind_qp_auto(qp, attr->port_num);
1913:	
1914:		ret = ib_security_modify_qp(qp, attr, attr_mask, udata);
1915:		if (ret)
1916:			goto out;
1917:	
1918:		if (attr_mask & IB_QP_PORT)
1919:			qp->port = attr->port_num;
1920:		if (attr_mask & IB_QP_AV)
1921:			qp->av_sgid_attr =
1922:				rdma_update_sgid_attr(&attr->ah_attr, qp->av_sgid_attr);
1923:		if (attr_mask & IB_QP_ALT_PATH)
1924:			qp->alt_path_sgid_attr = rdma_update_sgid_attr(
1925:				&attr->alt_ah_attr, qp->alt_path_sgid_attr);
1926:	
1927:	out:
1928:		if (attr_mask & IB_QP_ALT_PATH)
1929:			rdma_unfill_sgid_attr(&attr->alt_ah_attr, old_sgid_attr_alt_av);
1930:	out_av:
1931:		if (attr_mask & IB_QP_AV) {
1932:			rdma_lag_put_ah_roce_slave(attr->xmit_slave);
1933:			rdma_unfill_sgid_attr(&attr->ah_attr, old_sgid_attr_av);
1934:		}
1935:		return ret;
1936:	}
 SourceFile:drivers/infiniband/core/verbs.c]

198/2 2026/05/21 21:23 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 125281
							output: 49
							thoughts: 1638
						

Thoughts:
**Analyzing the IB Security QP Modification Logic**

Okay, let's break this down. My initial concern was about potential resource leaks within the `_ib_modify_qp` function, particularly regarding the handling of `sgid_attr` references and RDMA address handles (`ah_attr`).

First, if `ib_security_modify_qp` succeeds, we update the queue pair (`qp`) with the new address vector (`av_sgid_attr`, `alt_path_sgid_attr`). The key is understanding how `rdma_update_sgid_attr` and `rdma_unfill_sgid_attr` interact.  `rdma_update_sgid_attr` seems to hold a reference to `attr->ah_attr.grh.sgid_attr` upon a successful modification. Then `rdma_unfill_sgid_attr` is called.

The critical observation is that `rdma_unfill_sgid_attr` will *destroy* `attr->ah_attr.grh.sgid_attr` if it was filled.  However, if `rdma_fill_sgid_attr` filled it, and `old_sgid_attr_av` is NULL (which should be the case if `rdma_fill_sgid_attr` filled it in the first place), `rdma_unfill_sgid_attr` will call `rdma_destroy_ah_attr`.  `rdma_destroy_ah_attr` subsequently releases the reference held by `rdma_fill_sgid_attr` via `rdma_put_gid_attr`. This implies that `qp->av_sgid_attr` *retains* the reference taken by `rdma_update_sgid_attr`, which is perfectly correct from a memory management standpoint.

Now, let's consider the error paths:

*   If `ib_security_modify_qp` fails, or if `qp->device->ops.modify_qp` fails *within* `ib_security_modify_qp`, we correctly jump to `out`. Crucially, `rdma_update_sgid_attr` is *not* called in these cases, so we avoid a premature release of a resource we never acquired. Then `rdma_unfill_sgid_attr` is called to release the resource that would have been acquired if it was filled.

*   If `rdma_fill_sgid_attr` fails for the `alt_ah_attr` and we goto `out_av`, we correctly release the reference taken for `ah_attr` in the error case.

*   Regarding the potential leak involving `attr->xmit_slave`, when `attr->ah_attr.type == RDMA_AH_ATTR_TYPE_ROCE` and we jump to `out_av`, if `ib_resolve_eth_dmac` fails, we correctly jump to `out_av` and everything is cleaned up. If `rdma_lag_get_ah_roce_slave` fails, we jump to `out_av`, the same cleanup applies.

Now let's revisit `rdma_update_sgid_attr` to make sure we don't return unexpected values or leak:

In `rdma_update_sgid_attr` if `ah_attr->ah_flags & IB_AH_GRH` is false, we return NULL, that's fine. If `ah_attr->ah_flags & IB_AH_GRH` is false, `rdma_fill_sgid_attr` should have returned 0, so no value was even set to `ah_attr->grh.sgid_attr`. The NULL return indicates no SGID attribute was updated, which is valid given the lack of GRH.

I think it's all good, the logic appears to be safe and leak-free. No modifications to `attr_mask` are present. I am satisfied.



199/2 2026/05/21 21:23 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:ib_resolve_eth_dmac]

Results:
map[SourceCode:1784:	/**
1785:	 * ib_resolve_eth_dmac - Resolve destination mac address
1786:	 * @device:		Device to consider
1787:	 * @ah_attr:		address handle attribute which describes the
1788:	 *			source and destination parameters
1789:	 * ib_resolve_eth_dmac() resolves destination mac address and L3 hop limit It
1790:	 * returns 0 on success or appropriate error code. It initializes the
1791:	 * necessary ah_attr fields when call is successful.
1792:	 */
1793:	static int ib_resolve_eth_dmac(struct ib_device *device,
1794:				       struct rdma_ah_attr *ah_attr)
1795:	{
1796:		int ret = 0;
1797:	
1798:		if (rdma_is_multicast_addr((struct in6_addr *)ah_attr->grh.dgid.raw)) {
1799:			if (ipv6_addr_v4mapped((struct in6_addr *)ah_attr->grh.dgid.raw)) {
1800:				__be32 addr = 0;
1801:	
1802:				memcpy(&addr, ah_attr->grh.dgid.raw + 12, 4);
1803:				ip_eth_mc_map(addr, (char *)ah_attr->roce.dmac);
1804:			} else {
1805:				ipv6_eth_mc_map((struct in6_addr *)ah_attr->grh.dgid.raw,
1806:						(char *)ah_attr->roce.dmac);
1807:			}
1808:		} else {
1809:			ret = ib_resolve_unicast_gid_dmac(device, ah_attr);
1810:		}
1811:		return ret;
1812:	}
 SourceFile:drivers/infiniband/core/verbs.c]

200/2 2026/05/21 21:23 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 128381
							output: 52
							thoughts: 22
						

Thoughts:
Okay, here's my interpretation of those thoughts, tailored for an expert audience, presented in the first person:

**No Leak, Let's Verify `ib_resolve_unicast_gid_dmac`**

Alright, initial checks are clear – no immediate red flags indicating a leak. But, as we all know, first impressions can be deceiving, especially with complex RDMA code. I need to be thorough. My gut tells me this particular area of the code is robust, but I need to confirm that.

Therefore, I'm going to focus my attention on `ib_resolve_unicast_gid_dmac`. This function is central to GID-to-DMAC resolution, which means it’s critical for initial connection establishment and path discovery. It's the point where we map the abstract GID representation into something concrete, the MAC address. A subtle flaw here can easily lead to memory corruption, unexpected behaviors, or, worst case, a vulnerability. I'll need to scrutinize its logic, especially around memory allocation, error handling, and potential race conditions. I'll need to confirm what the preconditions and post conditions are for the function and then I need to carefully ensure that they are respected to minimize the chance of memory leaks.



201/2 2026/05/21 21:23 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:ib_resolve_unicast_gid_dmac]

Results:
map[SourceCode: 803:	/* Resolve destination mac address and hop limit for unicast destination
 804:	 * GID entry, considering the source GID entry as well.
 805:	 * ah_attribute must have valid port_num, sgid_index.
 806:	 */
 807:	static int ib_resolve_unicast_gid_dmac(struct ib_device *device,
 808:					       struct rdma_ah_attr *ah_attr)
 809:	{
 810:		struct ib_global_route *grh = rdma_ah_retrieve_grh(ah_attr);
 811:		const struct ib_gid_attr *sgid_attr = grh->sgid_attr;
 812:		int hop_limit = 0xff;
 813:		int ret = 0;
 814:	
 815:		/* If destination is link local and source GID is RoCEv1,
 816:		 * IP stack is not used.
 817:		 */
 818:		if (rdma_link_local_addr((struct in6_addr *)grh->dgid.raw) &&
 819:		    sgid_attr->gid_type == IB_GID_TYPE_ROCE) {
 820:			rdma_get_ll_mac((struct in6_addr *)grh->dgid.raw,
 821:					ah_attr->roce.dmac);
 822:			return ret;
 823:		}
 824:	
 825:		ret = rdma_addr_find_l2_eth_by_grh(&sgid_attr->gid, &grh->dgid,
 826:						   ah_attr->roce.dmac,
 827:						   sgid_attr, &hop_limit);
 828:	
 829:		grh->hop_limit = hop_limit;
 830:		return ret;
 831:	}
 SourceFile:drivers/infiniband/core/verbs.c]

202/2 2026/05/21 21:24 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 129271
							output: 49
							thoughts: 254
						

Thoughts:
**Analyzing a Potential NULL Pointer Dereference**

Okay, so I'm pretty sure there isn't a leak, but hold on... I need to consider a specific scenario. What happens if the `rdma_update_sgid_attr` function gets called, and the `ah_attr->ah_flags & IB_AH_GRH` bit is set (meaning we're dealing with a Global Routing Header), but crucially, the `ah_attr->grh.sgid_attr` pointer is actually NULL?

Looking at the code snippet, it's clear that if the `IB_AH_GRH` flag is on, the function calls `rdma_hold_gid_attr` with `ah_attr->grh.sgid_attr`. The problem? `rdma_hold_gid_attr` dereferences that pointer immediately! Here's the code:

```c
	if (ah_attr->ah_flags & IB_AH_GRH) {
		rdma_hold_gid_attr(ah_attr->grh.sgid_attr);
		return ah_attr->grh.sgid_attr;
	}
```

```c
void rdma_hold_gid_attr(const struct ib_gid_attr *attr)
{
	struct ib_gid_table_entry *entry =
		container_of(attr, struct ib_gid_table_entry, attr);

	get_gid_entry(entry);
}
```

So, if `ah_attr->grh.sgid_attr` is NULL, the `rdma_hold_gid_attr` call will cause a crash, because you can't dereference a NULL pointer. That's a pretty clear signal that `ah_attr->grh.sgid_attr` *cannot* be NULL in this context.

Now, let's just make sure everything lines up. I should check `rdma_put_gid_attr` to make sure it handles things correctly. I want to make sure the counterpart to this function isn't going to introduce an issue.



203/2 2026/05/21 21:24 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:rdma_put_gid_attr]

Results:
map[SourceCode:1268:	/**
1269:	 * rdma_put_gid_attr - Release reference to the GID attribute
1270:	 * @attr:		Pointer to the GID attribute whose reference
1271:	 *			needs to be released.
1272:	 *
1273:	 * rdma_put_gid_attr() must be used to release reference whose
1274:	 * reference is acquired using rdma_get_gid_attr() or any APIs
1275:	 * which returns a pointer to the ib_gid_attr regardless of link layer
1276:	 * of IB or RoCE.
1277:	 *
1278:	 */
1279:	void rdma_put_gid_attr(const struct ib_gid_attr *attr)
1280:	{
1281:		struct ib_gid_table_entry *entry =
1282:			container_of(attr, struct ib_gid_table_entry, attr);
1283:	
1284:		put_gid_entry(entry);
1285:	}
 SourceFile:drivers/infiniband/core/cache.c]

204/2 2026/05/21 21:24 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 130350
							output: 48
							thoughts: 91
						

Thoughts:
Here's my thought process, as if I were considering this code:

**Analyzing Potential Reference Leakage in GID Entry Handling**

Okay, so I'm looking at this `put_gid_entry` function. My initial impression is, "Looks fine, standard `kref_put` to decrement the reference count and potentially free the `entry` if it hits zero." But wait... I have to be completely certain, right? The core issue is always the subtle details.

What if there's a scenario, however unlikely, where this `kref_put` *doesn't* actually result in the reference being released? The free function (`free_gid_entry`) wouldn't be called if the ref count isn't zero. That could cause a leak. This is the first question that popped into my head. It looks like it should work though.

Okay, I need to trace where this function is used and how the reference is initially taken. To get a holistic picture, let's step back and consider all of the use cases. I'll need to check the calling context of `put_gid_entry`. Where does it fit into the bigger picture? Alright, let's look at `smc_ib_determine_gid`. That should be a good place to start my investigation.



205/2 2026/05/21 21:24 tool codesearch-definition-source
0m Args:
map[ContextFile:net/smc/smc_ib.c IncludeLines:true Name:smc_ib_determine_gid]

Results:
map[SourceCode: 273:	/* determine the gid for an ib-device port and vlan id */
 274:	int smc_ib_determine_gid(struct smc_ib_device *smcibdev, u8 ibport,
 275:				 unsigned short vlan_id, u8 gid[], u8 *sgid_index,
 276:				 struct smc_init_info_smcrv2 *smcrv2)
 277:	{
 278:		const struct ib_gid_attr *attr;
 279:		const struct net_device *ndev;
 280:		int i;
 281:	
 282:		for (i = 0; i < smcibdev->pattr[ibport - 1].gid_tbl_len; i++) {
 283:			attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, i);
 284:			if (IS_ERR(attr))
 285:				continue;
 286:	
 287:			rcu_read_lock();
 288:			ndev = rdma_read_gid_attr_ndev_rcu(attr);
 289:			if (!IS_ERR(ndev) &&
 290:			    ((!vlan_id && !is_vlan_dev(ndev)) ||
 291:			     (vlan_id && is_vlan_dev(ndev) &&
 292:			      vlan_dev_vlan_id(ndev) == vlan_id))) {
 293:				if (!smc_ib_determine_gid_rcu(ndev, attr, gid,
 294:							      sgid_index, smcrv2)) {
 295:					rcu_read_unlock();
 296:					rdma_put_gid_attr(attr);
 297:					return 0;
 298:				}
 299:			}
 300:			rcu_read_unlock();
 301:			rdma_put_gid_attr(attr);
 302:		}
 303:		return -ENODEV;
 304:	}
 SourceFile:net/smc/smc_ib.c]

206/2 2026/05/21 21:24 llm expert
1m Model:
gemini-3.1-pro-preview

Tokens:
							input: 131372
							output: 50
							thoughts: 274
						

Thoughts:
**Analyzing the SMC GID Determination**

Okay, so `smc_ib_determine_gid` relies on `smc_ib_determine_gid_rcu`, and a return of zero from the RCU function signals the same result for the main function. Crucially, `rdma_put_gid_attr(attr)` is called after the GID is determined. But, *where* is the GID information stored? I need to trace this. Ah, `smc_ib_determine_gid` copies `gid` and `sgid_index` and assigns `sgid_index` from `attr->index` *within* the RCU function. So, `attr` is effectively *not* referenced directly beyond that point, it just gets copied. Good. I see that the function then releases the `attr` using `rdma_put_gid_attr()`.

Later, during QP creation, SMC uses the copied `sgid_index` when setting the address handle attributes.

```c
	attr.ah_attr.grh.sgid_index = sgid_index;
```

This is then passed to `ib_modify_qp`, which will call `rdma_fill_sgid_attr()`, and that in turn calls `rdma_get_gid_attr()` using the previously stored `sgid_index`. Okay, so `sgid_index` acts as a key to retrieve the GID attributes again. This seems like a valid approach to me, we are re-obtaining the reference. I believe this should be correct.

Now, let me make sure this is the only instance of `rdma_get_gid_attr` being used within SMC. Yes, I do not believe there are any other instances. Let me check the `smc_ib_check_link_gid` code path for good measure.



207/2 2026/05/21 21:25 tool codesearch-definition-source
0m Args:
map[ContextFile:net/smc/smc_ib.c IncludeLines:true Name:smc_ib_check_link_gid]

Results:
map[SourceCode: 306:	/* check if gid is still defined on smcibdev */
 307:	static bool smc_ib_check_link_gid(u8 gid[SMC_GID_SIZE], bool smcrv2,
 308:					  struct smc_ib_device *smcibdev, u8 ibport)
 309:	{
 310:		const struct ib_gid_attr *attr;
 311:		bool rc = false;
 312:		int i;
 313:	
 314:		for (i = 0; !rc && i < smcibdev->pattr[ibport - 1].gid_tbl_len; i++) {
 315:			attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, i);
 316:			if (IS_ERR(attr))
 317:				continue;
 318:	
 319:			rcu_read_lock();
 320:			if ((!smcrv2 && attr->gid_type == IB_GID_TYPE_ROCE) ||
 321:			    (smcrv2 && attr->gid_type == IB_GID_TYPE_ROCE_UDP_ENCAP &&
 322:			     !(ipv6_addr_type((const struct in6_addr *)&attr->gid)
 323:					     & IPV6_ADDR_LINKLOCAL)))
 324:				if (!memcmp(gid, &attr->gid, SMC_GID_SIZE))
 325:					rc = true;
 326:			rcu_read_unlock();
 327:			rdma_put_gid_attr(attr);
 328:		}
 329:		return rc;
 330:	}
 SourceFile:net/smc/smc_ib.c]

208/2 2026/05/21 21:25 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 132590
							output: 48
							thoughts: 440
						

Thoughts:
**Analyzing Potential Resource Leaks in the Infiniband GID Table Handling**

Okay, let's break this down. First, I need to confirm the core logic: the loop terminates when `rc` becomes true due to the `!rc` condition.  The code iterates through the GID table, and within each iteration, it calls `rdma_get_gid_attr`.  If the `memcmp` check within the conditional becomes true, `rc` flips to true.  Consequently, `rdma_put_gid_attr(attr)` *is* called *before* the loop's termination on that iteration.  Then, the loop condition evaluates `!rc`, which is now false, so the loop correctly exits. That ensures there's no leak of the acquired attribute.  Good.

Now, I'm getting a little paranoid about concurrency. What if there's a race condition between `smc_ib_check_link_gid` and `smc_ib_remove_dev`?  `smc_ib_remove_dev` triggers a cascading series of cleanup functions, including `smc_smcr_terminate_all`, `smc_ib_cleanup_per_ibdev`, and `cancel_work_sync(&smcibdev->port_event_work)`.  And of course, `smc_ib_port_event_work` calls `smc_ib_gid_check`, which in turn calls `smc_ib_check_link_gid`.

The critical question here is whether the cancellation of the work queue introduces a potential window where we might leak resources.  But then, I remember the use of `cancel_work_sync`. This function's got the 'sync' bit, meaning it *waits* for the work item to complete before proceeding. So, *even if* `smc_ib_check_link_gid` is currently executing when the cancellation is initiated, the `cancel_work_sync` function will ensure that it completes before the cleanup proceeds.  Therefore, no leak there either.

Let's move on to analyzing `smc_ib_fill_mac`.



209/2 2026/05/21 21:25 tool codesearch-definition-source
0m Args:
map[ContextFile:net/smc/smc_ib.c IncludeLines:true Name:smc_ib_fill_mac]

Results:
map[SourceCode: 155:	static int smc_ib_fill_mac(struct smc_ib_device *smcibdev, u8 ibport)
 156:	{
 157:		const struct ib_gid_attr *attr;
 158:		int rc;
 159:	
 160:		attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, 0);
 161:		if (IS_ERR(attr))
 162:			return -ENODEV;
 163:	
 164:		rc = rdma_read_gid_l2_fields(attr, NULL, smcibdev->mac[ibport - 1]);
 165:		rdma_put_gid_attr(attr);
 166:		return rc;
 167:	}
 SourceFile:net/smc/smc_ib.c]

210/2 2026/05/21 21:25 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 133793
							output: 46
							thoughts: 709
						

Thoughts:
**Analyzing Potential GID Leak in RDMA Code**

Okay, so I'm digging into this suspected GID leak. Initially, there's nothing obvious screaming "leak" here. But, I'm going through it methodically, looking for weak points.

First, I checked the `rdma_read_gid_l2_fields` function, wondering if it held a reference that wasn't being released. I quickly confirmed that it doesn't take references, so that's a dead end.

Next, I circled back to `ib_cache_gid_set_default_gid`. This function, specifically calls `__ib_cache_gid_add`. Okay, this is where the GID gets added to the cache. Looking deeper, I see that the `kref_init` function gets called and sets the reference count to 1, as expected. I check that the `del_gid` function calls the `put_gid_entry_locked` which is responsible for decrementing the reference count and ultimately freeing the entry if it reaches zero.

So, if the refcount is greater than 1 in `release_gid_table`, it means somebody's taking a reference but *not* releasing it. I know that if the count is 1, then the entry should be released. So, if the count is greater than one, there's another "user". Okay, who *could* be taking a reference? What about the `ib_query_gid` call? That seems like a good place to start.



211/2 2026/05/21 21:25 tool codesearch-definition-source
0m Error:
requested entity does not exist

Args:
map[ContextFile:drivers/infiniband/core/device.c IncludeLines:true Name:ib_query_gid]

Results:
map[SourceCode: SourceFile:]

212/2 2026/05/21 21:25 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 134896
							output: 46
							thoughts: 26
						

Thoughts:
Here's my thought process, summarized as if I were considering this issue myself:

**Investigating `ib_query_gid` in `drivers/infiniband/core/cache.c`**

Okay, so I need to dive into this. The function `ib_query_gid`... right, that's central to handling GID queries in the Infiniband stack. I'm going to want to understand its behavior, specifically within the context of the caching mechanisms. The file path, `drivers/infiniband/core/cache.c`, immediately tells me where the likely interaction with that caching happens. I'll need to scrutinize the code in that file, particularly around the `ib_query_gid` function itself, but also any functions it calls, or which call it, and which potentially interact with caching data or mechanisms. I'll be looking for potential race conditions, inefficient implementations, or areas where the caching might be stale or incorrect. I need to fully understand how GID requests are handled, cached, and retrieved to uncover the root cause of the behavior I'm seeing.



213/2 2026/05/21 21:25 tool codesearch-definition-source
0m Error:
requested entity does not exist

Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:ib_query_gid]

Results:
map[SourceCode: SourceFile:]

214/2 2026/05/21 21:25 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 135224
							output: 47
							thoughts: 12
						

Thoughts:
Here's my attempt at summarizing the thought process, tailored for an expert audience:

**Examining RDMA GID Query**

Okay, so we need to dive into this. The immediate thought is to check the functionality of `rdma_query_gid`. This function is fundamental to understanding the GID (Global Identifier) associated with an RDMA device and port. It's the gateway to determining the network fabric parameters, critical for proper RDMA communication. I need to make sure I understand how the system is currently configured, and this function gives me that fundamental network context. Let's see what it's returning and why. I need to ensure it's functioning as expected, providing the correct GID information for this specific hardware and software setup. Any irregularities here can lead to wider RDMA connection issues, so I'll examine the return values, error codes, and the GID itself to be sure there are no surprises.



215/2 2026/05/21 21:25 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:rdma_query_gid]

Results:
map[SourceCode: 941:	/**
 942:	 * rdma_query_gid - Read the GID content from the GID software cache
 943:	 * @device:		Device to query the GID
 944:	 * @port_num:		Port number of the device
 945:	 * @index:		Index of the GID table entry to read
 946:	 * @gid:		Pointer to GID where to store the entry's GID
 947:	 *
 948:	 * rdma_query_gid() only reads the GID entry content for requested device,
 949:	 * port and index. It reads for IB, RoCE and iWarp link layers.  It doesn't
 950:	 * hold any reference to the GID table entry in the HCA or software cache.
 951:	 *
 952:	 * Returns 0 on success or appropriate error code.
 953:	 *
 954:	 */
 955:	int rdma_query_gid(struct ib_device *device, u32 port_num,
 956:			   int index, union ib_gid *gid)
 957:	{
 958:		struct ib_gid_table *table;
 959:		unsigned long flags;
 960:		int res;
 961:	
 962:		if (!rdma_is_port_valid(device, port_num))
 963:			return -EINVAL;
 964:	
 965:		table = rdma_gid_table(device, port_num);
 966:		read_lock_irqsave(&table->rwlock, flags);
 967:	
 968:		if (index < 0 || index >= table->sz) {
 969:			res = -EINVAL;
 970:			goto done;
 971:		}
 972:	
 973:		if (!is_gid_entry_valid(table->data_vec[index])) {
 974:			res = -ENOENT;
 975:			goto done;
 976:		}
 977:	
 978:		memcpy(gid, &table->data_vec[index]->attr.gid, sizeof(*gid));
 979:		res = 0;
 980:	
 981:	done:
 982:		read_unlock_irqrestore(&table->rwlock, flags);
 983:		return res;
 984:	}
 SourceFile:drivers/infiniband/core/cache.c]

216/2 2026/05/21 21:25 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 136174
							output: 49
							thoughts: 371
						

Thoughts:
**Analyzing a Potential RDMA GID Entry Leak**

Okay, so I'm taking a look at this RDMA code, and initially, I don't see any obvious memory leaks. The `rdma_read_gid_attr_ndev_rcu` function seems to correctly handle the retrieval of the network device associated with a GID attribute, using RCU for safe concurrent access. No blatant problems here.

But hold on, there's a syzkaller log mentioning a "GID entry ref leak." Specifically, it says "GID entry ref leak for dev syz1 index 2 ref=1". Index 2 is the key. Typically, indexes 0 and 1 are the default GIDs like IPv6 link-local and IPv4. This means index 2 is likely added via something like `ib_cache_gid_add`.

The crucial question is, who is calling `ib_cache_gid_add`? If `ib_device_release` is called while another thread is still holding a reference to a GID entry added by `ib_cache_gid_add`, that would absolutely explain the syzkaller log. We need to trace the call paths to understand the reference counting. This is where I have to dig deeper, starting with the `ib_cache_gid_add` call itself.



217/2 2026/05/21 21:26 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeSnippetLines:0 Name:ib_cache_gid_add]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:update_gid SourceFile:drivers/infiniband/core/roce_gid_mgmt.c SourceLine:110]] TruncatedOutput:false]

218/2 2026/05/21 21:26 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 136952
							output: 49
							thoughts: 9
						

Thoughts:
Okay, here's my attempt at summarizing that thought process, keeping in mind I'm speaking to a fellow expert:

**Investigating `update_gid`**

Alright, let's dive into this. The initial thought here is pretty straightforward – I need to get a handle on `update_gid`. It's likely a critical piece of the system, and understanding its function, behavior, and potential issues is the starting point. I'm going to start by running this code and then going from there.



219/2 2026/05/21 21:26 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/roce_gid_mgmt.c IncludeLines:true Name:update_gid]

Results:
map[SourceCode:  98:	static void update_gid(enum gid_op_type gid_op, struct ib_device *ib_dev,
  99:			       u32 port, union ib_gid *gid,
 100:			       struct ib_gid_attr *gid_attr)
 101:	{
 102:		int i;
 103:		unsigned long gid_type_mask = roce_gid_type_mask_support(ib_dev, port);
 104:	
 105:		for (i = 0; i < IB_GID_TYPE_SIZE; i++) {
 106:			if ((1UL << i) & gid_type_mask) {
 107:				gid_attr->gid_type = i;
 108:				switch (gid_op) {
 109:				case GID_ADD:
 110:					ib_cache_gid_add(ib_dev, port,
 111:							 gid, gid_attr);
 112:					break;
 113:				case GID_DEL:
 114:					ib_cache_gid_del(ib_dev, port,
 115:							 gid, gid_attr);
 116:					break;
 117:				}
 118:			}
 119:		}
 120:	}
 SourceFile:drivers/infiniband/core/roce_gid_mgmt.c]

220/2 2026/05/21 21:26 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 137507
							output: 50
							thoughts: 8
						

Thoughts:
Here's a summary of my thought process, assuming I'm an expert:

**Tracing the `update_gid` Call**

Okay, so the question is, *who* is calling `update_gid`? This is a pretty fundamental debugging question, and immediately triggers a few mental pathways. First, I need to understand the codebase context. Am I working on a large, complex system, or a smaller, more contained one? That will heavily influence my approach.

If it's a smaller project, a simple text search for "update_gid" within the code is a great starting point. Quick and dirty. I'd pay close attention to the results, looking for likely call sites. I'd be looking for the import, and tracing where that's called.

However, if it's a more substantial codebase, a basic text search could be noisy. My next thought is to lean on my IDE (if I have one) or my debugging tools. Most modern IDEs and debuggers have built-in "find usages" or "call graph" features. These tools are invaluable for quickly identifying all points in the code where a function is referenced, and I would start there. That will give me the clearest answer, fastest.

Another approach, especially if these tools are unavailable, would be to use a debugger. I'd set a breakpoint at the entry of the `update_gid` function and then run the application. When the breakpoint is hit, I can examine the call stack to see the immediate caller, and then work my way up the stack if necessary to fully understand the execution path. This is powerful because it gives you the *exact* call chain.

Regardless of the tools I choose, the goal is to systematically trace the execution flow back to the source of the `update_gid` call. I'll need to pay attention to any conditional logic or loops that might affect which part of the code actually makes the call. After I find the first call, it might be that the call is recursive; in that case, I'd need to identify *where* the recursion starts and *why* that is happening. This is a pretty standard debugging exercise, but the specific path will depend on the system.



221/2 2026/05/21 21:26 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/roce_gid_mgmt.c IncludeSnippetLines:0 Name:update_gid]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:callback_for_addr_gid_device_scan SourceFile:drivers/infiniband/core/roce_gid_mgmt.c SourceLine:546] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:enum_netdev_ipv6_ips SourceFile:drivers/infiniband/core/roce_gid_mgmt.c SourceLine:415] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:update_gid_ip SourceFile:drivers/infiniband/core/roce_gid_mgmt.c SourceLine:294]] TruncatedOutput:false]

222/2 2026/05/21 21:26 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 138236
							output: 47
							thoughts: 1005
						

Thoughts:
**Analyzing GID Entry Refcount Leaks in the RDMA Subsystem**

Okay, let's break this down. My initial thought process was: GIDs are added when IP addresses are associated with a netdev. When the netdev or IP addresses are removed, `ib_cache_gid_del` should be called. If a device is removed entirely, `ib_unregister_device` takes over. `ib_unregister_device` eventually calls `ib_cache_cleanup_one`, which leads to `gid_table_cleanup_one`. This, in turn, calls `cleanup_gid_table_port`, and the magic happens: `del_gid` is called for *every* valid GID entry. `del_gid` then decrements the refcount via `put_gid_entry_locked`. 

My first thought was, if the refcount is 1, a warning. Someone, somewhere, took a ref and forgot to put it! But then, I had a thought. What if `ib_cache_gid_add` was called but `ib_cache_gid_del` *wasn't*? `ib_cache_gid_add` allocates the entry and sets the refcount to 1. If `ib_cache_gid_del` *is* called, it decrements the refcount to zero, and all is well. But if it *isn't* called, `gid_table_cleanup_one` should still clean up, calling `del_gid` and decrementing the refcount. If the refcount was initially 1, it should go to 0 and get freed.

The key is in the `release_gid_table` check, which tests if the entry is *free*. I realized that `cleanup_gid_table_port` calls `del_gid` which calls `put_gid_entry_locked`, and if the refcount hits 0, `free_gid_entry_locked` is called. Critically, this function *sets the entry to NULL in the table*: `table->data_vec[entry->attr.index] = NULL`. And `is_gid_entry_free` *checks* for NULL! So, if the initial refcount was 1, `del_gid` decrements to 0, `free_gid_entry_locked` sets the entry to NULL, `release_gid_table` *won't* warn.

Therefore, the warning means the refcount was *greater* than 1 *before* `del_gid`. And the fact that the warning shows `ref=1` after `del_gid` indicates the refcount was *2*. Someone grabbed a reference and didn't release it!

Now, the question is, *who* is taking this extra reference? I have reviewed `rdma_get_gid_attr`, `rdma_hold_gid_attr`, and `rdma_find_gid_by_filter`, but am I missing other places that call `get_gid_entry`? I need to broaden my search.



223/2 2026/05/21 21:26 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeSnippetLines:0 Name:get_gid_entry]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_find_gid SourceFile:drivers/infiniband/core/cache.c SourceLine:1041] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_find_gid_by_filter SourceFile:drivers/infiniband/core/cache.c SourceLine:762] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_find_gid_by_port SourceFile:drivers/infiniband/core/cache.c SourceLine:706] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_get_gid_attr SourceFile:drivers/infiniband/core/cache.c SourceLine:1203] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_hold_gid_attr SourceFile:drivers/infiniband/core/cache.c SourceLine:1303]] TruncatedOutput:false]

224/2 2026/05/21 21:26 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 140255
							output: 51
							thoughts: 16
						

Thoughts:
Okay, here's my attempt at summarizing that thought process, keeping in mind I'm speaking to a fellow expert:

**Investigating `rdma_find_gid_by_port`**

Alright, time to dive into this. The mental checklist starts with, "Let's check `rdma_find_gid_by_port`." I immediately think of the implications of that function's role – determining the Global Identifier (GID) based on the port. I'm already anticipating the typical debugging scenarios here: Is it returning the expected GID? Is it handling multiple ports correctly? What about fabric connectivity issues that might impact the lookup? I'm picturing the RDMA stack and how this function interfaces with the underlying hardware, the InfiniBand/RoCE configuration, and the potential for offload complexities. This also brings to mind the connection between this function and the overall device management, and the possibility of resource leaks if not handled properly. Time to start digging into the code and associated documentation to understand the specifics of its implementation in this context.



225/2 2026/05/21 21:26 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeLines:true Name:rdma_find_gid_by_port]

Results:
map[SourceCode: 667:	/**
 668:	 * rdma_find_gid_by_port - Returns the GID entry attributes when it finds
 669:	 * a valid GID entry for given search parameters. It searches for the specified
 670:	 * GID value in the local software cache.
 671:	 * @ib_dev: The device to query.
 672:	 * @gid: The GID value to search for.
 673:	 * @gid_type: The GID type to search for.
 674:	 * @port: The port number of the device where the GID value should be searched.
 675:	 * @ndev: In RoCE, the net device of the device. NULL means ignore.
 676:	 *
 677:	 * Returns sgid attributes if the GID is found with valid reference or
 678:	 * returns ERR_PTR for the error.
 679:	 * The caller must invoke rdma_put_gid_attr() to release the reference.
 680:	 */
 681:	const struct ib_gid_attr *
 682:	rdma_find_gid_by_port(struct ib_device *ib_dev,
 683:			      const union ib_gid *gid,
 684:			      enum ib_gid_type gid_type,
 685:			      u32 port, struct net_device *ndev)
 686:	{
 687:		int local_index;
 688:		struct ib_gid_table *table;
 689:		unsigned long mask = GID_ATTR_FIND_MASK_GID |
 690:				     GID_ATTR_FIND_MASK_GID_TYPE;
 691:		struct ib_gid_attr val = {.ndev = ndev, .gid_type = gid_type};
 692:		const struct ib_gid_attr *attr;
 693:		unsigned long flags;
 694:	
 695:		if (!rdma_is_port_valid(ib_dev, port))
 696:			return ERR_PTR(-ENOENT);
 697:	
 698:		table = rdma_gid_table(ib_dev, port);
 699:	
 700:		if (ndev)
 701:			mask |= GID_ATTR_FIND_MASK_NETDEV;
 702:	
 703:		read_lock_irqsave(&table->rwlock, flags);
 704:		local_index = find_gid(table, gid, &val, false, mask, NULL);
 705:		if (local_index >= 0) {
 706:			get_gid_entry(table->data_vec[local_index]);
 707:			attr = &table->data_vec[local_index]->attr;
 708:			read_unlock_irqrestore(&table->rwlock, flags);
 709:			return attr;
 710:		}
 711:	
 712:		read_unlock_irqrestore(&table->rwlock, flags);
 713:		return ERR_PTR(-ENOENT);
 714:	}
 SourceFile:drivers/infiniband/core/cache.c]

226/2 2026/05/21 21:26 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 141406
							output: 52
							thoughts: 15
						

Thoughts:
Okay, here's my summary, presented as a stream of thought:

**Probing the `rdma_find_gid_by_port` Function**

Hmm, so the task at hand is to understand the calling contexts of `rdma_find_gid_by_port`. That's a key function in RDMA network communication, specifically dealing with Global IDs. Knowing where it's called from is crucial to grasping its role in the larger picture of RDMA initialization, communication setup, or maybe even error handling. I need to figure out the use-cases and dependencies surrounding that specific call. Are we looking at connection establishment, path discovery, or something else entirely? A quick dive into the codebase is needed to reveal all the call sites. I wonder if there are any subtle platform specific variants that influence how GIDs are looked up, and if so, how is the architecture handled.



227/2 2026/05/21 21:26 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/cache.c IncludeSnippetLines:0 Name:rdma_find_gid_by_port]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cma_validate_port SourceFile:drivers/infiniband/core/cma.c SourceLine:752] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:ib_init_ah_attr_from_wc SourceFile:drivers/infiniband/core/verbs.c SourceLine:912] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:ib_init_ah_from_mcmember SourceFile:drivers/infiniband/core/multicast.c SourceLine:751] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:init_ah_attr_grh_fields SourceFile:drivers/infiniband/core/sa_query.c SourceLine:1263] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rxe_chk_dgid SourceFile:drivers/infiniband/sw/rxe/rxe_recv.c SourceLine:305]] TruncatedOutput:false]

228/2 2026/05/21 21:26 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 141980
							output: 53
							thoughts: 17
						

Thoughts:
Okay, here's my summary, presented as a stream of thought:

**Diving into `ib_init_ah_from_mcmember`**

Alright, time to dig into this function, `ib_init_ah_from_mcmember`. I'm guessing it's responsible for initializing Address Handles (AHs) from MultiCast Member (MCMember) information, which makes sense in the context of InfiniBand. I need to understand how this process works. What are the key data structures involved? What parameters are being passed, and what are their significance? I hope the naming convention is clear enough that I can infer some of this, but I'll need to check the function's internals for sure. Understanding the flow, the conditional logic, and the memory manipulations will be crucial to grasping its role in the larger picture. I want to see if it's handling any specific error conditions or edge cases. A good starting point would be to trace how it sets up the AH structure. I need to know the source of the MCMember data and how it is obtained. Knowing what the AH structure ultimately contains is also very important, since it will be a key component in any future RDMA interactions.



229/2 2026/05/21 21:26 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/multicast.c IncludeLines:true Name:ib_init_ah_from_mcmember]

Results:
map[SourceCode: 719:	/**
 720:	 * ib_init_ah_from_mcmember - Initialize AH attribute from multicast
 721:	 * member record and gid of the device.
 722:	 * @device:	RDMA device
 723:	 * @port_num:	Port of the rdma device to consider
 724:	 * @rec:	Multicast member record to use
 725:	 * @ndev:	Optional netdevice, applicable only for RoCE
 726:	 * @gid_type:	GID type to consider
 727:	 * @ah_attr:	AH attribute to fillup on successful completion
 728:	 *
 729:	 * ib_init_ah_from_mcmember() initializes AH attribute based on multicast
 730:	 * member record and other device properties. On success the caller is
 731:	 * responsible to call rdma_destroy_ah_attr on the ah_attr. Returns 0 on
 732:	 * success or appropriate error code.
 733:	 *
 734:	 */
 735:	int ib_init_ah_from_mcmember(struct ib_device *device, u32 port_num,
 736:				     struct ib_sa_mcmember_rec *rec,
 737:				     struct net_device *ndev,
 738:				     enum ib_gid_type gid_type,
 739:				     struct rdma_ah_attr *ah_attr)
 740:	{
 741:		const struct ib_gid_attr *sgid_attr;
 742:	
 743:		/* GID table is not based on the netdevice for IB link layer,
 744:		 * so ignore ndev during search.
 745:		 */
 746:		if (rdma_protocol_ib(device, port_num))
 747:			ndev = NULL;
 748:		else if (!rdma_protocol_roce(device, port_num))
 749:			return -EINVAL;
 750:	
 751:		sgid_attr = rdma_find_gid_by_port(device, &rec->port_gid,
 752:						  gid_type, port_num, ndev);
 753:		if (IS_ERR(sgid_attr))
 754:			return PTR_ERR(sgid_attr);
 755:	
 756:		memset(ah_attr, 0, sizeof(*ah_attr));
 757:		ah_attr->type = rdma_ah_find_type(device, port_num);
 758:	
 759:		rdma_ah_set_dlid(ah_attr, be16_to_cpu(rec->mlid));
 760:		rdma_ah_set_sl(ah_attr, rec->sl);
 761:		rdma_ah_set_port_num(ah_attr, port_num);
 762:		rdma_ah_set_static_rate(ah_attr, rec->rate);
 763:		rdma_move_grh_sgid_attr(ah_attr, &rec->mgid,
 764:					be32_to_cpu(rec->flow_label),
 765:					rec->hop_limit,	rec->traffic_class,
 766:					sgid_attr);
 767:		return 0;
 768:	}
 SourceFile:drivers/infiniband/core/multicast.c]

230/2 2026/05/21 21:26 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 143250
							output: 54
							thoughts: 40
						

Thoughts:
Okay, here's my interpretation of that thought process, assuming I'm already well-versed in RDMA and InfiniBand:

**Diving into Address Handle Management**

Right, let me see... `rdma_move_grh_sgid_attr` is clearly dealing with moving around a reference to `ah_attr`. So, it's shifting address handle attributes, probably within a structure or context. The key question now becomes, who is *initializing* that `ah_attr` in the first place? I need to understand the call flow to know where this attribute data is being populated. `ib_init_ah_from_mcmember` is mentioned... Okay, that looks like it might be the function involved in initialization based on multicast member settings. I should probably check the cross-references and understand how the multicast membership context is being constructed and managed in order to have a comprehensive understanding of the entire attribute lifetime.



231/2 2026/05/21 21:26 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/multicast.c IncludeSnippetLines:0 Name:ib_init_ah_from_mcmember]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cma_make_mc_event SourceFile:drivers/infiniband/core/cma.c SourceLine:4884]] TruncatedOutput:false]

232/2 2026/05/21 21:26 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 143620
							output: 50
							thoughts: 14
						

Thoughts:
Okay, let's dive into it. Here's my thought process summarized, assuming I'm already well-versed in the subject matter:

**Checking `cma_make_mc_event`**

Alright, time to get started. Let's start by taking a look at `cma_make_mc_event`. I'm familiar with this routine, but I want to ensure I understand its current implementation within the broader context of the system. I need to make sure I'm up to speed on any recent changes. I need to understand its role in creating or processing some kind of "MC Event", the nature of which depends heavily on the specific context of the codebase. My immediate goals are to determine: What's the function's responsibility? What does it expect as inputs? What does it produce, i.e. its output? Are there any potential bottlenecks or areas for improvement? I want to make sure the expected behavior is still accurate, especially if I am about to engage in development on this particular area.



233/2 2026/05/21 21:26 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cma.c IncludeLines:true Name:cma_make_mc_event]

Results:
map[SourceCode:4855:	static void cma_make_mc_event(int status, struct rdma_id_private *id_priv,
4856:				      struct ib_sa_multicast *multicast,
4857:				      struct rdma_cm_event *event,
4858:				      struct cma_multicast *mc)
4859:	{
4860:		struct rdma_dev_addr *dev_addr;
4861:		enum ib_gid_type gid_type;
4862:		struct net_device *ndev;
4863:	
4864:		if (status)
4865:			pr_debug_ratelimited("RDMA CM: MULTICAST_ERROR: failed to join multicast. status %d\n",
4866:					     status);
4867:	
4868:		event->status = status;
4869:		event->param.ud.private_data = mc->context;
4870:		if (status) {
4871:			event->event = RDMA_CM_EVENT_MULTICAST_ERROR;
4872:			return;
4873:		}
4874:	
4875:		dev_addr = &id_priv->id.route.addr.dev_addr;
4876:		ndev = dev_get_by_index(dev_addr->net, dev_addr->bound_dev_if);
4877:		gid_type =
4878:			id_priv->cma_dev
4879:				->default_gid_type[id_priv->id.port_num -
4880:						   rdma_start_port(
4881:							   id_priv->cma_dev->device)];
4882:	
4883:		event->event = RDMA_CM_EVENT_MULTICAST_JOIN;
4884:		if (ib_init_ah_from_mcmember(id_priv->id.device, id_priv->id.port_num,
4885:					     &multicast->rec, ndev, gid_type,
4886:					     &event->param.ud.ah_attr)) {
4887:			event->event = RDMA_CM_EVENT_MULTICAST_ERROR;
4888:			goto out;
4889:		}
4890:	
4891:		event->param.ud.qp_num = 0xFFFFFF;
4892:		event->param.ud.qkey = id_priv->qkey;
4893:	
4894:	out:
4895:		dev_put(ndev);
4896:	}
 SourceFile:drivers/infiniband/core/cma.c]

234/2 2026/05/21 21:26 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 144634
							output: 50
							thoughts: 63
						

Thoughts:
**Digging into the CMA Multicast Event Initialization**

Okay, so I'm looking at this `cma_make_mc_event` function, and it seems like this is where the `event->param.ud.ah_attr` is getting initialized. Interesting. But then my mind immediately jumps to the next question: who's actually *using* this `ah_attr`? I need to understand the data flow, the consumption side of things, to really grasp the role of this initialization.

Right, let me see... where does `cma_make_mc_event` get called from? Oh, yeah, it's `cma_ib_mc_handler`. That's a good starting point. I can start from there. Okay, so I should trace `cma_ib_mc_handler`.



235/2 2026/05/21 21:27 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cma.c IncludeLines:true Name:cma_ib_mc_handler]

Results:
map[SourceCode:4898:	static int cma_ib_mc_handler(int status, struct ib_sa_multicast *multicast)
4899:	{
4900:		struct cma_multicast *mc = multicast->context;
4901:		struct rdma_id_private *id_priv = mc->id_priv;
4902:		struct rdma_cm_event event = {};
4903:		int ret = 0;
4904:	
4905:		mutex_lock(&id_priv->handler_mutex);
4906:		if (READ_ONCE(id_priv->state) == RDMA_CM_DEVICE_REMOVAL ||
4907:		    READ_ONCE(id_priv->state) == RDMA_CM_DESTROYING)
4908:			goto out;
4909:	
4910:		ret = cma_set_qkey(id_priv, be32_to_cpu(multicast->rec.qkey));
4911:		if (!ret) {
4912:			cma_make_mc_event(status, id_priv, multicast, &event, mc);
4913:			ret = cma_cm_event_handler(id_priv, &event);
4914:		}
4915:		rdma_destroy_ah_attr(&event.param.ud.ah_attr);
4916:		WARN_ON(ret);
4917:	
4918:	out:
4919:		mutex_unlock(&id_priv->handler_mutex);
4920:		return 0;
4921:	}
 SourceFile:drivers/infiniband/core/cma.c]

236/2 2026/05/21 21:27 llm expert
1m Model:
gemini-3.1-pro-preview

Tokens:
							input: 145382
							output: 53
							thoughts: 191
						

Thoughts:
**Addressing the Potential AH Attribute Leak**

Okay, so I'm revisiting this `cma_ib_mc_handler` function. My initial thought was, "Great, it calls `rdma_destroy_ah_attr(&event.param.ud.ah_attr)`, releasing that reference, no leak." Seems straightforward enough.

But then I had a nagging question: what if `cma_set_qkey` fails? If that happens, `cma_make_mc_event` isn't even called. Crucially, the code *still* calls `rdma_destroy_ah_attr(&event.param.ud.ah_attr)`. Hmm. Let's see... because the `event` struct is zero-initialized, this `event.param.ud.ah_attr` will be all zeros, right? Exactly.

Now, I recall that `rdma_destroy_ah_attr` checks the `ah_flags` field within the `ah_attr` structure to see if the `IB_AH_GRH` flag is set. With the structure zeroed out, that flag will be zero, meaning the conditional check evaluates to false, and the function does nothing and doesn't leak. Okay, so in the case of failure, no leak there either.

Now, let's take a look at the `init_ah_attr_grh_fields` function.



237/2 2026/05/21 21:28 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/sa_query.c IncludeLines:true Name:init_ah_attr_grh_fields]

Results:
map[SourceCode:1255:	static int init_ah_attr_grh_fields(struct ib_device *device, u32 port_num,
1256:					   struct sa_path_rec *rec,
1257:					   struct rdma_ah_attr *ah_attr,
1258:					   const struct ib_gid_attr *gid_attr)
1259:	{
1260:		enum ib_gid_type type = sa_conv_pathrec_to_gid_type(rec);
1261:	
1262:		if (!gid_attr) {
1263:			gid_attr = rdma_find_gid_by_port(device, &rec->sgid, type,
1264:							 port_num, NULL);
1265:			if (IS_ERR(gid_attr))
1266:				return PTR_ERR(gid_attr);
1267:		} else
1268:			rdma_hold_gid_attr(gid_attr);
1269:	
1270:		rdma_move_grh_sgid_attr(ah_attr, &rec->dgid,
1271:					be32_to_cpu(rec->flow_label),
1272:					rec->hop_limit,	rec->traffic_class,
1273:					gid_attr);
1274:		return 0;
1275:	}
 SourceFile:drivers/infiniband/core/sa_query.c]

238/2 2026/05/21 21:28 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 146329
							output: 54
							thoughts: 37
						

Thoughts:
Here's my analysis of the provided snippet, as though these are my internal thoughts:

**Dissecting `init_ah_attr_grh_fields`**

Okay, I'm looking at `init_ah_attr_grh_fields`. The code clearly indicates this function's primary role is to manipulate or update a reference to `ah_attr`. So, it's effectively re-pointing `ah_attr` to a different memory location or perhaps modifying the data it points to. Now, the critical question arises: *who* is responsible for calling this function? Understanding the call stack is paramount here. I need to trace back from `init_ah_attr_grh_fields` to identify its callers. Knowing the calling context will reveal the larger architecture and how this `ah_attr` is being managed within the system. Is it part of some initialization sequence, a data structure update, or something else entirely? The caller(s) are the key to unlocking the function's true purpose and impact on the overall flow. Without that call graph, my understanding is incomplete.



239/2 2026/05/21 21:28 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/sa_query.c IncludeSnippetLines:0 Name:init_ah_attr_grh_fields]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:ib_init_ah_attr_from_path SourceFile:drivers/infiniband/core/sa_query.c SourceLine:1324]] TruncatedOutput:false]

240/2 2026/05/21 21:28 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 146734
							output: 55
							thoughts: 16
						

Thoughts:
Okay, here's my attempt at summarizing that thought process, keeping in mind I'm speaking to a fellow expert:

**Tracing the Active Handle Initialization**

Alright, so the question is, "Who's the caller of `ib_init_ah_attr_from_path`?" This means I need to quickly identify the upstream function or functions responsible for calling this critical AH (Address Handle) initialization routine. My mental roadmap for tackling this is straightforward:

First, I'll need to use my tools - likely `grep` or perhaps an IDE with code navigation capabilities - to perform a code search. I'll search the codebase to identify all direct and potentially indirect calls to `ib_init_ah_attr_from_path`. The search will target all instances of `ib_init_ah_attr_from_path` to find the exact call sites and its context.

Second, I'll immediately start to assess the context of these calls. Where do these call sites reside? Are they within the core verbs library, a specific driver, or some other module? It will likely reveal if the calls are located in similar locations. Knowing the calling function and module helps me understand *why* it's being called. I will expect to find information about the AH's purpose.

Then, I'll look for patterns. Are there multiple callers? Is it being called in a specific sequence of operations, maybe during device initialization, path discovery, or connection setup? Are the arguments to the function consistent? Understanding the call pattern and argument usage is crucial. I expect that I will be able to relate the arguments to the AH's attributes.

Finally, I'll synthesize this information to build a clear mental picture of the AH initialization process. I'll identify the "owner" of `ib_init_ah_attr_from_path` and hopefully understand the high-level logic flow leading up to its invocation. Based on the calling function and the context, I will attempt to determine the role the AH plays, and any potential areas of concern or optimization.

This is a good starting point, and I expect the answers I obtain will allow me to refine this process further to obtain more details about the AH.



241/2 2026/05/21 21:28 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/sa_query.c IncludeSnippetLines:0 Name:ib_init_ah_attr_from_path]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cm_init_av_by_path SourceFile:drivers/infiniband/core/cm.c SourceLine:556] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:cma_sidr_rep_handler SourceFile:drivers/infiniband/core/cma.c SourceLine:4285] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:path_rec_completion SourceFile:drivers/infiniband/ulp/ipoib/ipoib_main.c SourceLine:811]] TruncatedOutput:false]

242/2 2026/05/21 21:28 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 147465
							output: 51
							thoughts: 15
						

Thoughts:
Okay, here's my take on those thoughts, tailored for an expert audience, and written as if they were my own:

**Investigating `cma_sidr_rep_handler`**

Alright, time to dive into `cma_sidr_rep_handler`. I've got a hunch about something, but before I go down a rabbit hole, let's just make sure I'm on the right track. This handler is a critical piece, and it's easy to lose sight of the bigger picture. I need to quickly determine if it's behaving as expected before I move on to my hypothesis. Specifically, I need to check its interaction with the `sidr` module. Its responsibilities are likely to be related to the replication of configuration changes, so I'll be looking for any potential bottlenecks, race conditions, or unexpected behaviors. I need to make sure I am not missing any obvious checks. No need to waste time going over things that are obvious, but just because they are obvious, does not mean they are not worth a second glance. I know the standard protocols, so I will start by seeing how they were implemented.



243/2 2026/05/21 21:28 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cma.c IncludeLines:true Name:cma_sidr_rep_handler]

Results:
map[SourceCode:4250:	static int cma_sidr_rep_handler(struct ib_cm_id *cm_id,
4251:					const struct ib_cm_event *ib_event)
4252:	{
4253:		struct rdma_id_private *id_priv = cm_id->context;
4254:		struct rdma_cm_event event = {};
4255:		const struct ib_cm_sidr_rep_event_param *rep =
4256:					&ib_event->param.sidr_rep_rcvd;
4257:		int ret;
4258:	
4259:		mutex_lock(&id_priv->handler_mutex);
4260:		if (READ_ONCE(id_priv->state) != RDMA_CM_CONNECT)
4261:			goto out;
4262:	
4263:		switch (ib_event->event) {
4264:		case IB_CM_SIDR_REQ_ERROR:
4265:			event.event = RDMA_CM_EVENT_UNREACHABLE;
4266:			event.status = -ETIMEDOUT;
4267:			break;
4268:		case IB_CM_SIDR_REP_RECEIVED:
4269:			event.param.ud.private_data = ib_event->private_data;
4270:			event.param.ud.private_data_len = IB_CM_SIDR_REP_PRIVATE_DATA_SIZE;
4271:			if (rep->status != IB_SIDR_SUCCESS) {
4272:				event.event = RDMA_CM_EVENT_UNREACHABLE;
4273:				event.status = ib_event->param.sidr_rep_rcvd.status;
4274:				pr_debug_ratelimited("RDMA CM: UNREACHABLE: bad SIDR reply. status %d\n",
4275:						     event.status);
4276:				break;
4277:			}
4278:			ret = cma_set_qkey(id_priv, rep->qkey);
4279:			if (ret) {
4280:				pr_debug_ratelimited("RDMA CM: ADDR_ERROR: failed to set qkey. status %d\n", ret);
4281:				event.event = RDMA_CM_EVENT_ADDR_ERROR;
4282:				event.status = ret;
4283:				break;
4284:			}
4285:			ib_init_ah_attr_from_path(id_priv->id.device,
4286:						  id_priv->id.port_num,
4287:						  id_priv->id.route.path_rec,
4288:						  &event.param.ud.ah_attr,
4289:						  rep->sgid_attr);
4290:			event.param.ud.qp_num = rep->qpn;
4291:			event.param.ud.qkey = rep->qkey;
4292:			event.event = RDMA_CM_EVENT_ESTABLISHED;
4293:			event.status = 0;
4294:			break;
4295:		default:
4296:			pr_err("RDMA CMA: unexpected IB CM event: %d\n",
4297:			       ib_event->event);
4298:			goto out;
4299:		}
4300:	
4301:		ret = cma_cm_event_handler(id_priv, &event);
4302:	
4303:		rdma_destroy_ah_attr(&event.param.ud.ah_attr);
4304:		if (ret) {
4305:			/* Destroy the CM ID by returning a non-zero value. */
4306:			id_priv->cm_id.ib = NULL;
4307:			destroy_id_handler_unlock(id_priv);
4308:			return ret;
4309:		}
4310:	out:
4311:		mutex_unlock(&id_priv->handler_mutex);
4312:		return 0;
4313:	}
 SourceFile:drivers/infiniband/core/cma.c]

244/2 2026/05/21 21:28 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 148913
							output: 52
							thoughts: 50
						

Thoughts:
Okay, let's see what's going on here.

**RDMA Address Handle Destruction Review**

Alright, so the `cma_sidr_rep_handler` function is calling `rdma_destroy_ah_attr(&event.param.ud.ah_attr)`. That's good. My initial concern was a potential address handle leak, but seeing this explicitly calls for destruction, I'm confident there's no immediate memory leak issue related to the address handle within *this* function. This confirms proper resource management from a quick glance, which is what I expect in a robust RDMA implementation.

Now, let's just make doubly sure. I'll shift focus and immediately go check out what's happening within `path_rec_completion`. Gotta ensure the entire flow is leak-free, as one function's hygiene doesn't guarantee the whole system's. I'll need to see how the address handle data is created and consumed to get the full picture.



245/2 2026/05/21 21:28 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/ulp/ipoib/ipoib_main.c IncludeLines:true Name:path_rec_completion]

Results:
map[SourceCode: 784:	static void path_rec_completion(int status,
 785:					struct sa_path_rec *pathrec,
 786:					unsigned int num_prs, void *path_ptr)
 787:	{
 788:		struct ipoib_path *path = path_ptr;
 789:		struct net_device *dev = path->dev;
 790:		struct ipoib_dev_priv *priv = ipoib_priv(dev);
 791:		struct ipoib_ah *ah = NULL;
 792:		struct ipoib_ah *old_ah = NULL;
 793:		struct ipoib_neigh *neigh, *tn;
 794:		struct sk_buff_head skqueue;
 795:		struct sk_buff *skb;
 796:		unsigned long flags;
 797:	
 798:		if (!status)
 799:			ipoib_dbg(priv, "PathRec LID 0x%04x for GID %pI6\n",
 800:				  be32_to_cpu(sa_path_get_dlid(pathrec)),
 801:				  pathrec->dgid.raw);
 802:		else
 803:			ipoib_dbg(priv, "PathRec status %d for GID %pI6\n",
 804:				  status, path->pathrec.dgid.raw);
 805:	
 806:		skb_queue_head_init(&skqueue);
 807:	
 808:		if (!status) {
 809:			struct rdma_ah_attr av;
 810:	
 811:			if (!ib_init_ah_attr_from_path(priv->ca, priv->port,
 812:						       pathrec, &av, NULL)) {
 813:				ah = ipoib_create_ah(dev, priv->pd, &av);
 814:				rdma_destroy_ah_attr(&av);
 815:			}
 816:		}
 817:	
 818:		spin_lock_irqsave(&priv->lock, flags);
 819:	
 820:		if (!IS_ERR_OR_NULL(ah)) {
 821:			/*
 822:			 * pathrec.dgid is used as the database key from the LLADDR,
 823:			 * it must remain unchanged even if the SA returns a different
 824:			 * GID to use in the AH.
 825:			 */
 826:			if (memcmp(pathrec->dgid.raw, path->pathrec.dgid.raw,
 827:				   sizeof(union ib_gid))) {
 828:				ipoib_dbg(
 829:					priv,
 830:					"%s got PathRec for gid %pI6 while asked for %pI6\n",
 831:					dev->name, pathrec->dgid.raw,
 832:					path->pathrec.dgid.raw);
 833:				memcpy(pathrec->dgid.raw, path->pathrec.dgid.raw,
 834:				       sizeof(union ib_gid));
 835:			}
 836:	
 837:			path->pathrec = *pathrec;
 838:	
 839:			old_ah   = path->ah;
 840:			path->ah = ah;
 841:	
 842:			ipoib_dbg(priv, "created address handle %p for LID 0x%04x, SL %d\n",
 843:				  ah, be32_to_cpu(sa_path_get_dlid(pathrec)),
 844:				  pathrec->sl);
 845:	
 846:			while ((skb = __skb_dequeue(&path->queue)))
 847:				__skb_queue_tail(&skqueue, skb);
 848:	
 849:			list_for_each_entry_safe(neigh, tn, &path->neigh_list, list) {
 850:				if (neigh->ah) {
 851:					WARN_ON(neigh->ah != old_ah);
 852:					/*
 853:					 * Dropping the ah reference inside
 854:					 * priv->lock is safe here, because we
 855:					 * will hold one more reference from
 856:					 * the original value of path->ah (ie
 857:					 * old_ah).
 858:					 */
 859:					ipoib_put_ah(neigh->ah);
 860:				}
 861:				kref_get(&path->ah->ref);
 862:				neigh->ah = path->ah;
 863:	
 864:				if (ipoib_cm_enabled(dev, neigh->daddr)) {
 865:					if (!ipoib_cm_get(neigh))
 866:						ipoib_cm_set(neigh, ipoib_cm_create_tx(dev,
 867:										       path,
 868:										       neigh));
 869:					if (!ipoib_cm_get(neigh)) {
 870:						ipoib_neigh_free(neigh);
 871:						continue;
 872:					}
 873:				}
 874:	
 875:				while ((skb = __skb_dequeue(&neigh->queue)))
 876:					__skb_queue_tail(&skqueue, skb);
 877:			}
 878:			path->ah->valid = 1;
 879:		}
 880:	
 881:		path->query = NULL;
 882:		complete(&path->done);
 883:	
 884:		spin_unlock_irqrestore(&priv->lock, flags);
 885:	
 886:		if (IS_ERR_OR_NULL(ah))
 887:			ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw);
 888:	
 889:		if (old_ah)
 890:			ipoib_put_ah(old_ah);
 891:	
 892:		while ((skb = __skb_dequeue(&skqueue))) {
 893:			int ret;
 894:			skb->dev = dev;
 895:			ret = dev_queue_xmit(skb);
 896:			if (ret)
 897:				ipoib_warn(priv, "%s: dev_queue_xmit failed to re-queue packet, ret:%d\n",
 898:					   __func__, ret);
 899:		}
 900:	}
 SourceFile:drivers/infiniband/ulp/ipoib/ipoib_main.c]

246/2 2026/05/21 21:28 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 151090
							output: 54
							thoughts: 206
						

Thoughts:
**Addressing Potential Resource Leaks**

Okay, so I'm looking at this `path_rec_completion` function and its interaction with RDMA Address Handles. I see that it explicitly calls `rdma_destroy_ah_attr(&av)`, which should free the allocated attributes. That part looks clean; no obvious leak there.

But wait a minute... what if `ib_init_ah_attr_from_path` fails? The code snippet shows this check:

```c
		if (!status) {
			struct rdma_ah_attr av;

			if (!ib_init_ah_attr_from_path(priv->ca, priv->port,
						       pathrec, &av, NULL)) {
				ah = ipoib_create_ah(dev, priv->pd, &av);
				rdma_destroy_ah_attr(&av);
			}
		}
```

If `ib_init_ah_attr_from_path` returns an error (meaning it successfully *allocated* `av`), the subsequent call to `rdma_destroy_ah_attr(&av)` is skipped. If `ib_init_ah_attr_from_path` is allocating memory, which seems likely, then *that's* where a potential leak could be. That's the critical question here: does `ib_init_ah_attr_from_path` allocate any resources that are *not* cleaned up on failure? I need to dive into the implementation of `ib_init_ah_attr_from_path` to verify.



247/2 2026/05/21 21:28 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/sa_query.c IncludeLines:true Name:ib_init_ah_attr_from_path]

Results:
map[SourceCode:1277:	/**
1278:	 * ib_init_ah_attr_from_path - Initialize address handle attributes based on
1279:	 *   an SA path record.
1280:	 * @device: Device associated ah attributes initialization.
1281:	 * @port_num: Port on the specified device.
1282:	 * @rec: path record entry to use for ah attributes initialization.
1283:	 * @ah_attr: address handle attributes to initialization from path record.
1284:	 * @gid_attr: SGID attribute to consider during initialization.
1285:	 *
1286:	 * When ib_init_ah_attr_from_path() returns success,
1287:	 * (a) for IB link layer it optionally contains a reference to SGID attribute
1288:	 * when GRH is present for IB link layer.
1289:	 * (b) for RoCE link layer it contains a reference to SGID attribute.
1290:	 * User must invoke rdma_destroy_ah_attr() to release reference to SGID
1291:	 * attributes which are initialized using ib_init_ah_attr_from_path().
1292:	 */
1293:	int ib_init_ah_attr_from_path(struct ib_device *device, u32 port_num,
1294:				      struct sa_path_rec *rec,
1295:				      struct rdma_ah_attr *ah_attr,
1296:				      const struct ib_gid_attr *gid_attr)
1297:	{
1298:		int ret = 0;
1299:	
1300:		memset(ah_attr, 0, sizeof(*ah_attr));
1301:		ah_attr->type = rdma_ah_find_type(device, port_num);
1302:		rdma_ah_set_sl(ah_attr, rec->sl);
1303:		rdma_ah_set_port_num(ah_attr, port_num);
1304:		rdma_ah_set_static_rate(ah_attr, rec->rate);
1305:	
1306:		if (sa_path_is_roce(rec)) {
1307:			ret = roce_resolve_route_from_path(rec, gid_attr);
1308:			if (ret)
1309:				return ret;
1310:	
1311:			memcpy(ah_attr->roce.dmac, sa_path_get_dmac(rec), ETH_ALEN);
1312:		} else {
1313:			rdma_ah_set_dlid(ah_attr, be32_to_cpu(sa_path_get_dlid(rec)));
1314:			if (sa_path_is_opa(rec) &&
1315:			    rdma_ah_get_dlid(ah_attr) == be16_to_cpu(IB_LID_PERMISSIVE))
1316:				rdma_ah_set_make_grd(ah_attr, true);
1317:	
1318:			rdma_ah_set_path_bits(ah_attr,
1319:					      be32_to_cpu(sa_path_get_slid(rec)) &
1320:					      get_src_path_mask(device, port_num));
1321:		}
1322:	
1323:		if (rec->hop_limit > 0 || sa_path_is_roce(rec))
1324:			ret = init_ah_attr_grh_fields(device, port_num,
1325:						      rec, ah_attr, gid_attr);
1326:		return ret;
1327:	}
 SourceFile:drivers/infiniband/core/sa_query.c]

248/2 2026/05/21 21:28 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 152714
							output: 54
							thoughts: 682
						

Thoughts:
**Analyzing Potential Resource Leaks in AH Attribute Initialization**

Okay, so I'm digging into this `ib_init_ah_attr_from_path` function and the related AH attribute initialization. If `roce_resolve_route_from_path` fails, we just return. Fine, nothing to worry about there, since `init_ah_attr_grh_fields` hasn't even been touched. `ah_attr` is clean.

Now, if `init_ah_attr_grh_fields` *does* get called and fails, it's returning `ret`, and it *could* fail if `rdma_find_gid_by_port` fails. Crucially, if that call fails, it doesn't hold any references. So, no leak there, either, since we just bail out. And if it *succeeds*, it's supposed to return 0, which is good. That eliminates the obvious scenarios. So, based on the current implementation, `ib_init_ah_attr_from_path` doesn't leak.

But wait a minute... let's rewind and trace a success path. What if `rdma_find_gid_by_port` *succeeds* and returns a valid `gid_attr`? Then, we call `rdma_move_grh_sgid_attr`. Ah, right. This function *copies* the pointer into `attr->grh.sgid_attr`. That's important. Then `ib_init_ah_attr_from_path` returns 0, and *then* the caller, like `path_rec_completion`, calls `rdma_destroy_ah_attr(&av)`. That's where we release the reference. So, the `gid_attr` is *eventually* released. No leak here either. Good! Looks like the memory management is sound here. I should probably check that call to `rxe_chk_dgid` though, just to be sure.



249/2 2026/05/21 21:28 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/sw/rxe/rxe_recv.c IncludeLines:true Name:rxe_chk_dgid]

Results:
map[SourceCode: 274:	/**
 275:	 * rxe_chk_dgid - validate destination IP address
 276:	 * @rxe: rxe device that received packet
 277:	 * @skb: the received packet buffer
 278:	 *
 279:	 * Accept any loopback packets
 280:	 * Extract IP address from packet and
 281:	 * Accept if multicast packet
 282:	 * Accept if matches an SGID table entry
 283:	 */
 284:	static int rxe_chk_dgid(struct rxe_dev *rxe, struct sk_buff *skb)
 285:	{
 286:		struct rxe_pkt_info *pkt = SKB_TO_PKT(skb);
 287:		const struct ib_gid_attr *gid_attr;
 288:		union ib_gid dgid;
 289:		union ib_gid *pdgid;
 290:	
 291:		if (pkt->mask & RXE_LOOPBACK_MASK)
 292:			return 0;
 293:	
 294:		if (skb->protocol == htons(ETH_P_IP)) {
 295:			ipv6_addr_set_v4mapped(ip_hdr(skb)->daddr,
 296:					       (struct in6_addr *)&dgid);
 297:			pdgid = &dgid;
 298:		} else {
 299:			pdgid = (union ib_gid *)&ipv6_hdr(skb)->daddr;
 300:		}
 301:	
 302:		if (rdma_is_multicast_addr((struct in6_addr *)pdgid))
 303:			return 0;
 304:	
 305:		gid_attr = rdma_find_gid_by_port(&rxe->ib_dev, pdgid,
 306:						 IB_GID_TYPE_ROCE_UDP_ENCAP,
 307:						 1, skb->dev);
 308:		if (IS_ERR(gid_attr))
 309:			return PTR_ERR(gid_attr);
 310:	
 311:		rdma_put_gid_attr(gid_attr);
 312:		return 0;
 313:	}
 SourceFile:drivers/infiniband/sw/rxe/rxe_recv.c]

250/2 2026/05/21 21:28 llm expert
1m Model:
gemini-3.1-pro-preview

Tokens:
							input: 154550
							output: 49
							thoughts: 147
						

Thoughts:
**Analyzing Potential RDMA Resource Management Issues**

Okay, so I've been looking into potential leaks, and I'm pretty sure there's no obvious resource leak here initially. But, a thought just popped into my head... what if `rdma_find_gid_by_port` is called in a situation where `skb->dev` happens to be NULL? I need to quickly reassure myself. It should be fine, right? `ndev` can be NULL in this context. I think I'm safe there.

Alright, let's now look at `rdma_hold_gid_attr`. I need to figure out which code paths actually call this function. Let's see... looking at the call sites, I see:

1.  `init_ah_attr_grh_fields`
2.  `rdma_copy_ah_attr`
3.  `rdma_replace_ah_attr`
4.  `rdma_update_sgid_attr`

I'll start with taking a look at `rdma_copy_ah_attr` since the name suggests that something is being copied.



251/2 2026/05/21 21:30 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:rdma_copy_ah_attr]

Results:
map[SourceCode: 411:	/**
 412:	 * rdma_copy_ah_attr - Copy rdma ah attribute from source to destination.
 413:	 * @dest:       Pointer to destination ah_attr. Contents of the destination
 414:	 *              pointer is assumed to be invalid and attribute are overwritten.
 415:	 * @src:        Pointer to source ah_attr.
 416:	 */
 417:	void rdma_copy_ah_attr(struct rdma_ah_attr *dest,
 418:			       const struct rdma_ah_attr *src)
 419:	{
 420:		*dest = *src;
 421:		if (dest->grh.sgid_attr)
 422:			rdma_hold_gid_attr(dest->grh.sgid_attr);
 423:	}
 SourceFile:drivers/infiniband/core/verbs.c]

252/2 2026/05/21 21:30 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 155254
							output: 50
							thoughts: 13
						

Thoughts:
Okay, here's my interpretation of that thought process, tailored for an expert audience, and written in the first person:

**Decoding the `rdma_copy_ah_attr` Call**

Alright, so the question immediately pops into my head: *who* is invoking `rdma_copy_ah_attr`? This function, by its name, implies a pretty specific, low-level operation: copying address handle attributes. It's not something that gets called casually. My focus narrows immediately to identifying the potential callers and their associated use cases within the RDMA stack.

I'm thinking, is it triggered during device initialization, perhaps as part of setting up a QP or modifying an existing address handle? Could it be involved in handling connection establishment or tear-down? Or maybe it's related to some kind of error recovery or re-establishment of a connection in the case of a temporary network issue. The context is everything here.

I need to quickly recall the typical call paths. Is this a user-level library function called by an application, or is it a kernel function? If kernel, is it part of the core RDMA verbs layer, the transport provider, or somewhere else? I’m immediately scanning my mental map of the RDMA architecture to start tracing likely locations. I want to understand *why* this copying is necessary. What are the source and destination of these attributes? Are we talking about internal data structures, or are we moving data between kernel and user space, or, possibly, even across different processes or devices? The answers define the criticality of the context.



253/2 2026/05/21 21:30 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeSnippetLines:0 Name:rdma_copy_ah_attr]

Results:
map[References:<nil> TruncatedOutput:false]

254/2 2026/05/21 21:30 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 155664
							output: 22
							thoughts: 34
						

Thoughts:
Here's my thought process, summarized as you requested:

**Investigating a Potentially Unused Function**

Hmm, now that I'm looking at this code, it strikes me as odd that I can't immediately recall a call to `rdma_copy_ah_attr`. I'm starting to suspect that it might be an orphaned function, never actually being used within the current codebase.

Okay, best practice is to confirm that suspicion. Let's do a quick global search for the identifier `rdma_copy_ah_attr`. That should quickly tell me if there are any usages, and if so, where. Time to see what the search results turn up.



255/2 2026/05/21 21:30 tool grepper
0m Args:
map[Expression:rdma_copy_ah_attr]

Results:
map[Output:drivers/infiniband/core/verbs.c=407=EXPORT_SYMBOL(ib_dealloc_pd_user);
--
drivers/infiniband/core/verbs.c-411-/**
drivers/infiniband/core/verbs.c:412: * rdma_copy_ah_attr - Copy rdma ah attribute from source to destination.
drivers/infiniband/core/verbs.c-413- * @dest:       Pointer to destination ah_attr. Contents of the destination
--
drivers/infiniband/core/verbs.c-416- */
drivers/infiniband/core/verbs.c:417:void rdma_copy_ah_attr(struct rdma_ah_attr *dest,
drivers/infiniband/core/verbs.c-418-		       const struct rdma_ah_attr *src)
--
drivers/infiniband/core/verbs.c-423-}
drivers/infiniband/core/verbs.c:424:EXPORT_SYMBOL(rdma_copy_ah_attr);
drivers/infiniband/core/verbs.c-425-
--
drivers/infiniband/hw/qedr/verbs.c=2875=int qedr_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr,
--
drivers/infiniband/hw/qedr/verbs.c-2879-
drivers/infiniband/hw/qedr/verbs.c:2880:	rdma_copy_ah_attr(&ah->attr, init_attr->ah_attr);
drivers/infiniband/hw/qedr/verbs.c-2881-
--
drivers/infiniband/sw/rdmavt/ah.c=58=int rvt_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr,
--
drivers/infiniband/sw/rdmavt/ah.c-76-
drivers/infiniband/sw/rdmavt/ah.c:77:	rdma_copy_ah_attr(&ah->attr, init_attr->ah_attr);
drivers/infiniband/sw/rdmavt/ah.c-78-
--
drivers/infiniband/sw/rdmavt/qp.c=1956=static int rvt_post_one_wr(struct rvt_qp *qp,
--
drivers/infiniband/sw/rdmavt/qp.c-2072-		log_pmtu = ah->log_pmtu;
drivers/infiniband/sw/rdmavt/qp.c:2073:		rdma_copy_ah_attr(wqe->ud_wr.attr, &ah->attr);
drivers/infiniband/sw/rdmavt/qp.c-2074-	}
--
include/rdma/ib_verbs.h=4820=void rdma_move_grh_sgid_attr(struct rdma_ah_attr *attr, union ib_gid *dgid,
--
include/rdma/ib_verbs.h-4822-			     const struct ib_gid_attr *sgid_attr);
include/rdma/ib_verbs.h:4823:void rdma_copy_ah_attr(struct rdma_ah_attr *dest,
include/rdma/ib_verbs.h-4824-		       const struct rdma_ah_attr *src);
]

256/2 2026/05/21 21:30 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 156750
							output: 53
							thoughts: 100
						

Thoughts:
**RDMA Write Attributes Deep Dive**

Okay, hold on a second. I need to trace this `rvt_post_one_wr` function call. It looks like it's crucial here. Specifically, I'm concerned about this `rdma_copy_ah_attr(wqe->ud_wr.attr, &ah->attr)` call within it. I'm noting that `wqe->ud_wr.attr` is getting a *copy* of `ah->attr`. And remember, `ah->attr` is holding a reference to `sgid_attr`. The question I'm trying to answer is when does `wqe->ud_wr.attr` get destroyed? I have a feeling the answer lies within `rvt_post_one_wr` itself. I'm going to carefully review that function's code now, focusing on the lifecycle of `wqe->ud_wr.attr`. I need to be sure the `sgid_attr` reference is handled correctly to avoid any memory errors or dangling pointers. This is a critical point to pin down for reliable RDMA operations.



257/2 2026/05/21 21:30 tool codesearch-definition-source
0m Error:
requested entity does not exist

Args:
map[ContextFile:drivers/infiniband/sw/rdmavt/qp.c IncludeLines:true Name:rvt_post_one_wr]

Results:
map[SourceCode: SourceFile:]

258/2 2026/05/21 21:30 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 157162
							output: 22
							thoughts: 22
						

Thoughts:
Here's a first-person summary, tailored for an expert audience, of the thought process described:

**Diving into the RDMA Virtual Transport (RDMavt) Queue Pair (QP) Implementation**

Okay, so I need to understand the behavior of the RDMavt QP implementation. The best place to start is likely `drivers/infiniband/sw/rdmavt/qp.c`. That file is the central hub for the software-based RDMA virtual transport's queue pair functionality, so it's the right place to get a grasp of its core mechanisms. I'm going to look for the key data structures, state transitions, and interrupt handling associated with a QP. I'll probably be most interested in how it interacts with the underlying hardware, if there's any direct memory access or hardware interactions. Then, it will be the right time to analyze how the QP handles send and receive operations. Looking at the control path will provide insights into error handling.



259/2 2026/05/21 21:30 tool grepper
0m Args:
map[Expression:rvt_post_one_wr]

Results:
map[Output:drivers/infiniband/sw/rdmavt/qp.c=1905=static inline int rvt_qp_is_avail(
--
drivers/infiniband/sw/rdmavt/qp.c-1950-/**
drivers/infiniband/sw/rdmavt/qp.c:1951: * rvt_post_one_wr - post one RC, UC, or UD send work request
drivers/infiniband/sw/rdmavt/qp.c-1952- * @qp: the QP to post on
--
drivers/infiniband/sw/rdmavt/qp.c-1955- */
drivers/infiniband/sw/rdmavt/qp.c:1956:static int rvt_post_one_wr(struct rvt_qp *qp,
drivers/infiniband/sw/rdmavt/qp.c-1957-			   const struct ib_send_wr *wr,
--
drivers/infiniband/sw/rdmavt/qp.c-2109-	}
drivers/infiniband/sw/rdmavt/qp.c:2110:	trace_rvt_post_one_wr(qp, wqe, wr->num_sge);
drivers/infiniband/sw/rdmavt/qp.c-2111-	smp_wmb(); /* see request builders */
--
drivers/infiniband/sw/rdmavt/qp.c=2139=int rvt_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr,
--
drivers/infiniband/sw/rdmavt/qp.c-2167-	for (; wr; wr = wr->next) {
drivers/infiniband/sw/rdmavt/qp.c:2168:		err = rvt_post_one_wr(qp, wr, &call_send);
drivers/infiniband/sw/rdmavt/qp.c-2169-		if (unlikely(err)) {
--
drivers/infiniband/sw/rdmavt/trace_tx.h=47=TRACE_EVENT(
drivers/infiniband/sw/rdmavt/trace_tx.h:48:	rvt_post_one_wr,
drivers/infiniband/sw/rdmavt/trace_tx.h-49-	TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, int wr_num_sge),
--
include/rdma/rdmavt_qp.h-153- * NOTE: This data structure is stricly ordered wr then attr. I.e the attr
include/rdma/rdmavt_qp.h:154: * MUST come after wr.  The ib_ud_wr is sized and copied in rvt_post_one_wr.
include/rdma/rdmavt_qp.h-155- * The copy assumes that wr is first.
]

260/2 2026/05/21 21:30 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 158166
							output: 49
							thoughts: 148
						

Thoughts:
**Analyzing the RDMA Attribute Copy and Release**

Okay, so I'm digging into this and it looks like `rvt_post_one_wr` is copying the attributes from `ah->attr` into `wqe->ud_wr.attr`. My immediate concern is, does it properly release those attributes when the work request (WQE) completes? I need to track down the attribute's lifecycle. My initial thought was to look at something like `rvt_send_complete`, or a similar function dealing with completion handling.

But hold on a second. I need to be careful with my assumptions. The text I'm looking at describes `rdmavt`, which is specifically for OPA/IB devices, like `hfi1` or `qib`. The syzkaller log I'm looking at, however, is for `syz1`, which is an `rxe` device, or Soft RoCE. `rxe` doesn't even *use* `rdmavt`. So I can rule that out. That's a misdirection!

Okay, let's step back. If `rdmavt` isn't the key, what about `rdma_replace_ah_attr`? That seems like a more relevant function to examine. I should investigate that function and see if it may be more on target with the issue I'm seeing.



261/2 2026/05/21 21:30 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:rdma_replace_ah_attr]

Results:
map[SourceCode: 426:	/**
 427:	 * rdma_replace_ah_attr - Replace valid ah_attr with new one.
 428:	 * @old:        Pointer to existing ah_attr which needs to be replaced.
 429:	 *              old is assumed to be valid or zero'd
 430:	 * @new:        Pointer to the new ah_attr.
 431:	 *
 432:	 * rdma_replace_ah_attr() first releases any reference in the old ah_attr if
 433:	 * old the ah_attr is valid; after that it copies the new attribute and holds
 434:	 * the reference to the replaced ah_attr.
 435:	 */
 436:	void rdma_replace_ah_attr(struct rdma_ah_attr *old,
 437:				  const struct rdma_ah_attr *new)
 438:	{
 439:		rdma_destroy_ah_attr(old);
 440:		*old = *new;
 441:		if (old->grh.sgid_attr)
 442:			rdma_hold_gid_attr(old->grh.sgid_attr);
 443:	}
 SourceFile:drivers/infiniband/core/verbs.c]

262/2 2026/05/21 21:30 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 159013
							output: 50
							thoughts: 13
						

Thoughts:
Okay, here's my attempt at summarizing that thought process, tailored for an expert audience:

**Tracing the Use of `rdma_replace_ah_attr`**

Alright, so the question is: which parts of the RDMA stack are calling `rdma_replace_ah_attr`? It's a key function for updating the Address Handle (AH) attributes, which means it's pretty fundamental to how we maintain the network connection and route traffic correctly. I need to figure out the specific contexts where this AH attribute update is happening.

Thinking about it, I'd first look at places where there's a change in the underlying network topology or configuration. That could be anything from a network path change due to congestion, a failover event, maybe even a dynamic QoS adjustment. I'd expect to see this function called during things like:

*   **Path MTU discovery**: If the MTU is changing along a path, the AH attributes clearly need adjustment.
*   **Congestion control**: Adaptive congestion control mechanisms might tweak the AH attributes to influence traffic shaping.
*   **Network reconfigurations**: Any dynamic changes in the network, like adding or removing nodes or switches, will inevitably lead to AH changes.
*   **Failover/failback events**: When a path goes down and a new path is activated, this is obviously a critical place to examine.

I'd want to check the obvious places in the codebase: the networking layers, the RDMA core, and any user space drivers or tools that might be dynamically reconfiguring the network or individual connections. I need to think about how these calls are triggered and what the implications are for the connection state. Are these calls synchronous or asynchronous, and what kind of locking is involved? That could have big performance implications. And I need to be sure that the change is propagated correctly to all involved nodes and QPs!

Basically, it's a deep dive into the network management code. And ultimately, I need to understand *why* the AH attributes are being updated and what those updates mean for the reliability and performance of the RDMA connections.



263/2 2026/05/21 21:30 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeSnippetLines:0 Name:rdma_replace_ah_attr]

Results:
map[References:<nil> TruncatedOutput:false]

264/2 2026/05/21 21:30 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 159534
							output: 22
							thoughts: 12
						

Thoughts:
Okay, here's my interpretation of those thoughts, tailored for an expert audience, and delivered as a first-person summary:

**The Unspoken Assumption & Immediate Response**

Hmm, no one's explicitly mentioning *this*? That's a little unusual, given the context and my understanding of the current discussions. It's almost as if it's an assumed given, or a deeply embedded concept that's become invisible to the conversation. I need to be sure I'm not missing something myself, or making an incorrect assumption about my position relative to the global understanding. Okay, time to step back and widen the lens – let's shift from the local framing and initiate a global search. I'm going to leverage my existing knowledge base, of course, but I will need to delve into external repositories and explore the international landscape to determine if the specific absence is in fact true.



265/2 2026/05/21 21:30 tool grepper
0m Args:
map[Expression:rdma_replace_ah_attr]

Results:
map[Output:drivers/infiniband/core/verbs.c=424=EXPORT_SYMBOL(rdma_copy_ah_attr);
--
drivers/infiniband/core/verbs.c-426-/**
drivers/infiniband/core/verbs.c:427: * rdma_replace_ah_attr - Replace valid ah_attr with new one.
drivers/infiniband/core/verbs.c-428- * @old:        Pointer to existing ah_attr which needs to be replaced.
--
drivers/infiniband/core/verbs.c-431- *
drivers/infiniband/core/verbs.c:432: * rdma_replace_ah_attr() first releases any reference in the old ah_attr if
drivers/infiniband/core/verbs.c-433- * old the ah_attr is valid; after that it copies the new attribute and holds
--
drivers/infiniband/core/verbs.c-435- */
drivers/infiniband/core/verbs.c:436:void rdma_replace_ah_attr(struct rdma_ah_attr *old,
drivers/infiniband/core/verbs.c-437-			  const struct rdma_ah_attr *new)
--
drivers/infiniband/core/verbs.c-443-}
drivers/infiniband/core/verbs.c:444:EXPORT_SYMBOL(rdma_replace_ah_attr);
drivers/infiniband/core/verbs.c-445-
--
drivers/infiniband/sw/rdmavt/qp.c=1398=int rvt_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
--
drivers/infiniband/sw/rdmavt/qp.c-1580-	if (attr_mask & IB_QP_AV) {
drivers/infiniband/sw/rdmavt/qp.c:1581:		rdma_replace_ah_attr(&qp->remote_ah_attr, &attr->ah_attr);
drivers/infiniband/sw/rdmavt/qp.c-1582-		qp->s_srate = rdma_ah_get_static_rate(&attr->ah_attr);
--
drivers/infiniband/sw/rdmavt/qp.c-1586-	if (attr_mask & IB_QP_ALT_PATH) {
drivers/infiniband/sw/rdmavt/qp.c:1587:		rdma_replace_ah_attr(&qp->alt_ah_attr, &attr->alt_ah_attr);
drivers/infiniband/sw/rdmavt/qp.c-1588-		qp->s_alt_pkey_index = attr->alt_pkey_index;
--
include/rdma/ib_verbs.h=4823=void rdma_copy_ah_attr(struct rdma_ah_attr *dest,
include/rdma/ib_verbs.h-4824-		       const struct rdma_ah_attr *src);
include/rdma/ib_verbs.h:4825:void rdma_replace_ah_attr(struct rdma_ah_attr *old,
include/rdma/ib_verbs.h-4826-			  const struct rdma_ah_attr *new);
]

266/2 2026/05/21 21:30 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 160599
							output: 51
							thoughts: 77
						

Thoughts:
Okay, here's my thought process as I delve into this code:

**Digging into the `rdmavt` Calls**

Right, it seems like we're back at the `rdmavt` calls again. I need to understand why. My initial instinct is to go through it thoroughly. Let's start with `rdma_update_sgid_attr`. Who's using this function? We've already checked a few places, specifically `_rdma_create_ah`, `rdma_modify_ah`, and `_ib_modify_qp`, but I've got to ensure there isn't another location using this function. There's always a chance something escaped the initial review, so a systematic check is necessary for a robust understanding.



267/2 2026/05/21 21:30 tool codesearch-find-references
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeSnippetLines:0 Name:rdma_update_sgid_attr]

Results:
map[References:[map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:_ib_modify_qp SourceFile:drivers/infiniband/core/verbs.c SourceLine:1922] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:_ib_modify_qp SourceFile:drivers/infiniband/core/verbs.c SourceLine:1924] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:_rdma_create_ah SourceFile:drivers/infiniband/core/verbs.c SourceLine:583] map[ReferenceKind:calls ReferencingEntityKind:function ReferencingEntityName:rdma_modify_ah SourceFile:drivers/infiniband/core/verbs.c SourceLine:1009]] TruncatedOutput:false]

268/2 2026/05/21 21:30 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 161135
							output: 46
							thoughts: 511
						

Thoughts:
**My Line of Reasoning: Unraveling the Implications of Unreleased QPs**

Okay, so the initial thought is a flat "No," but let's delve deeper. What happens if `ib_device_release` is triggered, but some Queue Pairs (QPs) are still active? Is that even a possibility?

My understanding is that when a device is unregistered, the function `ib_unregister_device` is called. Importantly, this function *doesn't* handle the destruction of QPs. It seems the expectation is that the user or upper layers will take care of that. Now, here's where my concern intensifies: what if they *don't*? What's the fallout?

`ib_unregister_device` internally invokes `__ib_unregister_device`. Let's scrutinize that code block:

```c
	/*
	 * We have a registration lock so that all the calls to unregister are
	 * fully fenced, once any unregister returns the device is truly
	 * unregistered even if multiple callers are unregistering it at the
	 * same time. This also interacts with the registration flow and
	 * provides sane semantics if register and unregister are racing.
	 */
	mutex_lock(&ib_dev->unregistration_lock);
	if (!refcount_read(&ib_dev->refcount))
		goto out;

	disable_device(ib_dev);
	rdma_nl_notify_event(ib_dev, 0, RDMA_UNREGISTER_EVENT);

	/* Expedite removing unregistered pointers from the hash table */
	free_netdevs(ib_dev);

	ib_free_port_attrs(&ib_dev->coredev);
	device_del(&ib_dev->dev);
	ib_device_unregister_rdmacg(ib_dev);
	ib_cache_cleanup_one(ib_dev);
```

Okay, `ib_cache_cleanup_one` is where things get interesting. I remember that this is the function responsible for cleaning up the Global Identifier (GID) table. If a QP is still alive at this point, it inherently holds a reference to a GID entry. My concern is that `ib_cache_cleanup_one` will call `del_gid`, which will decrement the reference count of the GID entry. However, the QP *still* holds a reference, meaning the refcount will remain greater than zero.

Eventually, `release_gid_table` will be called when the device is fully released. So, when is the device actually released? It appears to be when the `ib_dev` kobject's reference count reaches zero.

The critical question now is, if a QP is active, does it hold a reference to `ib_dev` itself? If so, we have a circular dependency, where the device cannot be released until QPs are destroyed, but the cleanup might be happening before that!

It seems like `ib_create_qp` should shed some light on this. I'll need to check the code there to see how the device's reference is managed. This is where I'll find my answer.



269/2 2026/05/21 21:31 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:ib_create_qp]

Results:
map[SourceCode:3871:	/**
3872:	 * ib_create_qp - Creates a kernel QP associated with the specific protection
3873:	 * domain.
3874:	 * @pd: The protection domain associated with the QP.
3875:	 * @init_attr: A list of initial attributes required to create the
3876:	 *   QP.  If QP creation succeeds, then the attributes are updated to
3877:	 *   the actual capabilities of the created QP.
3878:	 */
3879:	static inline struct ib_qp *ib_create_qp(struct ib_pd *pd,
3880:						 struct ib_qp_init_attr *init_attr)
3881:	{
3882:		return ib_create_qp_kernel(pd, init_attr, KBUILD_MODNAME);
3883:	}
 SourceFile:include/rdma/ib_verbs.h]

270/2 2026/05/21 21:31 llm expert
1m Model:
gemini-3.1-pro-preview

Tokens:
							input: 162630
							output: 48
							thoughts: 13
						

Thoughts:
Okay, let's dive into this. Here's my thought process on checking `ib_create_qp_kernel`:

**Analyzing `ib_create_qp_kernel`**

Right, so I see we're looking at `ib_create_qp_kernel`. This implies we're dealing with the core kernel function responsible for creating queue pairs (QPs) within an InfiniBand environment. This is a critical building block for any high-performance networking implementation using that technology. My initial focus is on understanding its fundamental role and expected behavior. I need to be thinking about resource allocation, memory management, and how this function interacts with the hardware, probably an HCA driver.

I'm immediately considering potential areas to scrutinize. I'll need to look at any error handling, and understand how it deals with resource limitations like available memory or the number of permitted QPs. Is there any input validation? Are there checks to see if the requested QP characteristics are supported by the hardware and driver? I'll probably start by looking at return values and any related error codes, to see how the system signals success or failure. I should also investigate how it deals with memory allocation and deallocation to ensure no leaks or dangling pointers.

This function is a core piece. I'll be expecting to see a lot of interaction with the HCA driver, and the underlying hardware. I'll also be expecting some interaction with other kernel subsystems and potentially things like the user space as well.



271/2 2026/05/21 21:32 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:ib_create_qp_kernel]

Results:
map[SourceCode:1399:	struct ib_qp *ib_create_qp_kernel(struct ib_pd *pd,
1400:					  struct ib_qp_init_attr *qp_init_attr,
1401:					  const char *caller)
1402:	{
1403:		struct ib_device *device = pd->device;
1404:		struct ib_qp *qp;
1405:		int ret;
1406:	
1407:		/*
1408:		 * If the callers is using the RDMA API calculate the resources
1409:		 * needed for the RDMA READ/WRITE operations.
1410:		 *
1411:		 * Note that these callers need to pass in a port number.
1412:		 */
1413:		if (qp_init_attr->cap.max_rdma_ctxs)
1414:			rdma_rw_init_qp(device, qp_init_attr);
1415:	
1416:		qp = create_qp(device, pd, qp_init_attr, NULL, NULL, caller);
1417:		if (IS_ERR(qp))
1418:			return qp;
1419:	
1420:		ib_qp_usecnt_inc(qp);
1421:	
1422:		if (qp_init_attr->cap.max_rdma_ctxs) {
1423:			ret = rdma_rw_init_mrs(qp, qp_init_attr);
1424:			if (ret)
1425:				goto err;
1426:		}
1427:	
1428:		/*
1429:		 * Note: all hw drivers guarantee that max_send_sge is lower than
1430:		 * the device RDMA WRITE SGE limit but not all hw drivers ensure that
1431:		 * max_send_sge <= max_sge_rd.
1432:		 */
1433:		qp->max_write_sge = qp_init_attr->cap.max_send_sge;
1434:		qp->max_read_sge = min_t(u32, qp_init_attr->cap.max_send_sge,
1435:					 device->attrs.max_sge_rd);
1436:		if (qp_init_attr->create_flags & IB_QP_CREATE_INTEGRITY_EN)
1437:			qp->integrity_en = true;
1438:	
1439:		return qp;
1440:	
1441:	err:
1442:		ib_destroy_qp(qp);
1443:		return ERR_PTR(ret);
1444:	
1445:	}
 SourceFile:drivers/infiniband/core/verbs.c]

272/2 2026/05/21 21:32 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 163771
							output: 44
							thoughts: 26
						

Thoughts:
Okay, here's my thought process on that:

**Investigating Potential Reference Holding in `create_qp`**

Alright, I'm trying to understand the relationship between `create_qp` and `ib_dev`. Specifically, I need to know if `create_qp` keeps a reference to `ib_dev` after it's been called. That's a critical point for understanding how these objects interact and ensuring proper resource management, especially when dealing with InfiniBand. I need to dig into the `create_qp` function's implementation or at least its documentation. I need to understand what it does with the `ib_dev` object that is passed to it. Does it just use it briefly, or does it hang onto it for later use or cleanup? Let me check the code for `create_qp` to understand the details. It could be stored as an internal field, used in asynchronous operations, or released immediately. Understanding this will significantly inform my strategy.



273/2 2026/05/21 21:32 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:create_qp]

Results:
map[SourceCode:1265:	static struct ib_qp *create_qp(struct ib_device *dev, struct ib_pd *pd,
1266:				       struct ib_qp_init_attr *attr,
1267:				       struct ib_udata *udata,
1268:				       struct ib_uqp_object *uobj, const char *caller)
1269:	{
1270:		struct ib_udata dummy = {};
1271:		struct ib_qp *qp;
1272:		int ret;
1273:	
1274:		if (!dev->ops.create_qp)
1275:			return ERR_PTR(-EOPNOTSUPP);
1276:	
1277:		qp = rdma_zalloc_drv_obj_numa(dev, ib_qp);
1278:		if (!qp)
1279:			return ERR_PTR(-ENOMEM);
1280:	
1281:		qp->device = dev;
1282:		qp->pd = pd;
1283:		qp->uobject = uobj;
1284:		qp->real_qp = qp;
1285:	
1286:		qp->qp_type = attr->qp_type;
1287:		qp->rwq_ind_tbl = attr->rwq_ind_tbl;
1288:		qp->srq = attr->srq;
1289:		qp->event_handler = __ib_qp_event_handler;
1290:		qp->registered_event_handler = attr->event_handler;
1291:		qp->port = attr->port_num;
1292:		qp->qp_context = attr->qp_context;
1293:	
1294:		spin_lock_init(&qp->mr_lock);
1295:		INIT_LIST_HEAD(&qp->rdma_mrs);
1296:		INIT_LIST_HEAD(&qp->sig_mrs);
1297:		init_completion(&qp->srq_completion);
1298:	
1299:		qp->send_cq = attr->send_cq;
1300:		qp->recv_cq = attr->recv_cq;
1301:	
1302:		rdma_restrack_new(&qp->res, RDMA_RESTRACK_QP);
1303:		WARN_ONCE(!udata && !caller, "Missing kernel QP owner");
1304:		rdma_restrack_set_name(&qp->res, udata ? NULL : caller);
1305:		ret = dev->ops.create_qp(qp, attr, udata);
1306:		if (ret)
1307:			goto err_create;
1308:	
1309:		/*
1310:		 * TODO: The mlx4 internally overwrites send_cq and recv_cq.
1311:		 * Unfortunately, it is not an easy task to fix that driver.
1312:		 */
1313:		qp->send_cq = attr->send_cq;
1314:		qp->recv_cq = attr->recv_cq;
1315:	
1316:		ret = ib_create_qp_security(qp, dev);
1317:		if (ret)
1318:			goto err_security;
1319:	
1320:		rdma_restrack_add(&qp->res);
1321:		return qp;
1322:	
1323:	err_security:
1324:		qp->device->ops.destroy_qp(qp, udata ? &dummy : NULL);
1325:	err_create:
1326:		rdma_restrack_put(&qp->res);
1327:		kfree(qp);
1328:		return ERR_PTR(ret);
1329:	
1330:	}
 SourceFile:drivers/infiniband/core/verbs.c]

274/2 2026/05/21 21:32 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 165114
							output: 47
							thoughts: 61
						

Thoughts:
Here's my take on the thought process:

**Diving into the Infiniband Device Structure**

Okay, I'm trying to figure out how this code interacts with the `ib_dev` structure. The immediate context doesn't *explicitly* reference it, which is the first thing I checked. But, hold on a second... doesn't the `ib_alloc_pd` function, which deals with Protection Domains, ultimately link to the device? Ah, wait, no, a *PD* itself holds the reference to `ib_dev`, not the allocation function directly, right? I need to clarify that relationship. To be certain, I should probably double-check the definition and usage of `ib_alloc_pd` to verify the pointer passing and ownership. Need to be absolutely sure about how the `ib_dev` reference is managed through Protection Domain allocation. Let's see what `ib_alloc_pd` actually does.



275/2 2026/05/21 21:32 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:__ib_alloc_pd]

Results:
map[SourceCode: 305:	/**
 306:	 * __ib_alloc_pd - Allocates an unused protection domain.
 307:	 * @device: The device on which to allocate the protection domain.
 308:	 * @flags: protection domain flags
 309:	 * @caller: caller's build-time module name
 310:	 *
 311:	 * A protection domain object provides an association between QPs, shared
 312:	 * receive queues, address handles, memory regions, and memory windows.
 313:	 *
 314:	 * Every PD has a local_dma_lkey which can be used as the lkey value for local
 315:	 * memory operations.
 316:	 */
 317:	struct ib_pd *__ib_alloc_pd(struct ib_device *device, unsigned int flags,
 318:			const char *caller)
 319:	{
 320:		struct ib_pd *pd;
 321:		int mr_access_flags = 0;
 322:		int ret;
 323:	
 324:		pd = rdma_zalloc_drv_obj(device, ib_pd);
 325:		if (!pd)
 326:			return ERR_PTR(-ENOMEM);
 327:	
 328:		pd->device = device;
 329:		pd->flags = flags;
 330:	
 331:		rdma_restrack_new(&pd->res, RDMA_RESTRACK_PD);
 332:		rdma_restrack_set_name(&pd->res, caller);
 333:	
 334:		ret = device->ops.alloc_pd(pd, NULL);
 335:		if (ret) {
 336:			rdma_restrack_put(&pd->res);
 337:			kfree(pd);
 338:			return ERR_PTR(ret);
 339:		}
 340:		rdma_restrack_add(&pd->res);
 341:	
 342:		if (device->attrs.kernel_cap_flags & IBK_LOCAL_DMA_LKEY)
 343:			pd->local_dma_lkey = device->local_dma_lkey;
 344:		else
 345:			mr_access_flags |= IB_ACCESS_LOCAL_WRITE;
 346:	
 347:		if (flags & IB_PD_UNSAFE_GLOBAL_RKEY) {
 348:			pr_warn("%s: enabling unsafe global rkey\n", caller);
 349:			mr_access_flags |= IB_ACCESS_REMOTE_READ | IB_ACCESS_REMOTE_WRITE;
 350:		}
 351:	
 352:		if (mr_access_flags) {
 353:			struct ib_mr *mr;
 354:	
 355:			mr = pd->device->ops.get_dma_mr(pd, mr_access_flags);
 356:			if (IS_ERR(mr)) {
 357:				ib_dealloc_pd(pd);
 358:				return ERR_CAST(mr);
 359:			}
 360:	
 361:			mr->device	= pd->device;
 362:			mr->pd		= pd;
 363:			mr->type        = IB_MR_TYPE_DMA;
 364:			mr->uobject	= NULL;
 365:			mr->need_inval	= false;
 366:	
 367:			pd->__internal_mr = mr;
 368:	
 369:			if (!(device->attrs.kernel_cap_flags & IBK_LOCAL_DMA_LKEY))
 370:				pd->local_dma_lkey = pd->__internal_mr->lkey;
 371:	
 372:			if (flags & IB_PD_UNSAFE_GLOBAL_RKEY)
 373:				pd->unsafe_global_rkey = pd->__internal_mr->rkey;
 374:		}
 375:	
 376:		return pd;
 377:	}
 SourceFile:drivers/infiniband/core/verbs.c]

276/2 2026/05/21 21:32 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 166578
							output: 46
							thoughts: 4848
						

Thoughts:
**Analyzing Potential GID Attribute Leaks in RDMA CM Code**

Okay, let's break this down. My initial assessment of `ib_device_release`, `smc_ib_remove_dev`, and other cleanup routines seems correct: SMC, RDS, and SMBDirect all appear to properly clean up their resources. The problem *isn't* a simple case of a client holding a dangling reference.

I thoroughly checked the `smc_ib_check_link_gid` and `smc_ib_determine_gid` functions. The loop structures are sound; `rdma_put_gid_attr` is always called, preventing a direct leak there. The concern about `smc_ib_determine_gid_rcu` potentially taking a reference was also unfounded. The logic in `smc_ib_fill_mac` appears solid, too. The `smc_ib_add_dev` routine also seems okay.

The suspicion then fell on `get_cm_port_from_path`. The code *could* leak an `attr` (GID attribute) reference if the returned `port` pointer is NULL, i.e., when `cm_dev->port[attr->port_num - 1]` is NULL. This is possible if the `rdma_find_gid` function locates a GID on a port that has `rdma_cap_ib_cm` false, and a different port on the same device has it true (and is therefore in `cm.device_list`). Because `rdma_find_gid` searches all ports, it is possible the path selection results in this scenario.

However, the syzkaller log's "port count 1" would seem to rule this out, as `cm_dev->port[0]` must be non-NULL, and the GID could not be found on a port where `cm.device_list` does not include the port. So, for a 1-port device, this cannot happen. I need to keep looking.

I also considered another scenario where the `attr` pointer provided to `get_cm_port_from_path` is not NULL but the return port pointer is, which doesn't `rdma_put_gid_attr`. However, that is not the case from the call site.

Then, there's a potential Use-After-Free in the `cm_req_handler` function. The code looks like this:

1.  It gets the GID attribute pointer (`gid_attr`) from the existing AH attribute (`cm_id_priv->av.ah_attr`).
2.  It then *destroys* the AV (`cm_destroy_av(&cm_id_priv->av)`), which calls `rdma_destroy_ah_attr` which *puts* the GID attribute (`rdma_put_gid_attr(cm_id_priv->av.ah_attr.grh.sgid_attr)`).
3.  Next, it immediately *re-initializes* the AV using `cm_init_av_by_path`, passing the same `gid_attr` pointer.

So, here's what happens: `gid_attr` is freed. Then it's passed to a function that uses it.

This appears to be a clear Use-After-Free, *but* the code does a hold on the GID. In particular, the function `ib_init_ah_attr_from_path` calls `init_ah_attr_grh_fields` which calls `rdma_hold_gid_attr(gid_attr)`.

This `rdma_hold_gid_attr` call, however, could be where the refcount drop *temporarily* drops (from 2 -> 1) if the GID is in the table, but a concurrent remove might free the GID's memory concurrently, meaning that `rdma_hold_gid_attr` attempts to access freed memory, resulting in a UAF.

However, this doesn't explain the refcount leak. There has to be a double put, or a missing hold. Let me double-check that `gid_attr` really is the source of the reference count.



277/2 2026/05/21 21:32 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cm.c IncludeLines:true Name:cm_destroy_av]

Results:
map[SourceCode: 576:	static void cm_destroy_av(struct cm_av *av)
 577:	{
 578:		rdma_destroy_ah_attr(&av->ah_attr);
 579:		cm_set_av_port(av, NULL);
 580:	}
 SourceFile:drivers/infiniband/core/cm.c]

278/2 2026/05/21 21:32 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 172494
							output: 22
							thoughts: 4113
						

Thoughts:
**Analyzing Potential GID Attribute Leaks in RDMA/SMC Code**

Okay, so I've been tracing the lifecycle of GID attributes within this RDMA/SMC code. The initial concern was around how `rdma_destroy_ah_attr` and its downstream calls handle the `gid_attr`. My thought process went like this: `rdma_destroy_ah_attr` calls `rdma_put_gid_attr`, which is good and as expected. Then, `cm_init_av_by_path` might call `rdma_hold_gid_attr(gid_attr)`, meaning the attribute is correctly held if valid. However, what if `cm_init_av_by_path` fails, leading to a `rejected` state? I had to trace if there was a leak in that code path. I saw that `cm_deref_id` and the subsequent `ib_destroy_cm_id` and `cm_destroy_av` calls will take care of releasing the attribute when the `cm_id` is destroyed. No obvious leak here.

Next, I re-examined `cm_init_av_by_path`. The core logic involves `ib_init_ah_attr_from_path` and `rdma_move_ah_attr`. I had to confirm if any failure after `ib_init_ah_attr_from_path` would cause a leak; but there's no way for failure after that.

Then, I focused on `get_cm_port_from_path`. Specifically, what happens if this returns `NULL` and how it handles the `gid_attr`? Turns out, if the GID is not found, it returns `-EINVAL`. This code doesn't leak. Then, I dug deeper in the case where the sgid attribute is not present. Here, `rdma_find_gid` is called to locate the appropriate GID. If `rdma_find_gid` *does* find a GID, it PUTs the attribute if the corresponding port is not NULL. I checked other code paths, like alternate paths within `cm_req_handler`, and the logic looked sound, with proper `rdma_put_gid_attr` calls.

Here, I started to dig deeper, thinking about potential edge cases. For instance, what if `get_cm_port_from_path` finds an attribute, but the corresponding port is NULL (e.g. `cm_dev->port[attr->port_num - 1]` is NULL)? This *could* be a leak! In that case, `rdma_put_gid_attr(attr)` isn't called. This can occur if the device's GID is on a port that does *not* support IB CM, but still has a valid GID configured. This looked like a promising avenue.

However, after looking at the syzkaller log, I saw a 1-port device. If `cm_add_one` added the device, this means that device has a valid port configured, thus, `cm_dev->port[0]` can't be null, so this can't be the bug.

So, I had to dig more. I checked `rdma_find_gid_by_port`, and `rdma_find_gid_by_filter`. These are fine. Then I looked at the call sites for `rdma_get_gid_attr` to see if there are any obvious leaks. I checked `smc_ib_determine_gid`, `smc_ib_check_link_gid`, and `smc_ib_fill_mac`. In each case, it always calls `rdma_put_gid_attr`, so no leak.

And that's where I stopped.



279/2 2026/05/21 21:33 tool grepper
0m Args:
map[Expression:rdma_get_gid_attr]

Results:
map[Output:drivers/infiniband/core/cache.c=1167=EXPORT_SYMBOL(ib_get_cached_port_state);
--
drivers/infiniband/core/cache.c-1169-/**
drivers/infiniband/core/cache.c:1170: * rdma_get_gid_attr - Returns GID attributes for a port of a device
drivers/infiniband/core/cache.c-1171- * at a requested gid_index, if a valid GID entry exists.
--
drivers/infiniband/core/cache.c-1177- *
drivers/infiniband/core/cache.c:1178: * rdma_get_gid_attr() acquires reference count of gid attributes from the
drivers/infiniband/core/cache.c-1179- * cached GID table. Caller must invoke rdma_put_gid_attr() to release
--
drivers/infiniband/core/cache.c=1185=const struct ib_gid_attr *
drivers/infiniband/core/cache.c:1186:rdma_get_gid_attr(struct ib_device *device, u32 port_num, int index)
drivers/infiniband/core/cache.c-1187-{
--
drivers/infiniband/core/cache.c-1208-}
drivers/infiniband/core/cache.c:1209:EXPORT_SYMBOL(rdma_get_gid_attr);
drivers/infiniband/core/cache.c-1210-
--
drivers/infiniband/core/cache.c=1266=EXPORT_SYMBOL(rdma_query_gid_table);
--
drivers/infiniband/core/cache.c-1273- * rdma_put_gid_attr() must be used to release reference whose
drivers/infiniband/core/cache.c:1274: * reference is acquired using rdma_get_gid_attr() or any APIs
drivers/infiniband/core/cache.c-1275- * which returns a pointer to the ib_gid_attr regardless of link layer
--
drivers/infiniband/core/cma.c=671=cma_validate_port(struct ib_device *device, u32 port,
--
drivers/infiniband/core/cma.c-699-	if (rdma_protocol_iwarp(device, port)) {
drivers/infiniband/core/cma.c:700:		sgid_attr = rdma_get_gid_attr(device, port, 0);
drivers/infiniband/core/cma.c-701-		if (IS_ERR(sgid_attr))
--
drivers/infiniband/core/sysfs.c=409=static ssize_t _show_port_gid_attr(
--
drivers/infiniband/core/sysfs.c-418-
drivers/infiniband/core/sysfs.c:419:	gid_attr = rdma_get_gid_attr(ibdev, port_num, tab_attr->index);
drivers/infiniband/core/sysfs.c-420-	if (IS_ERR(gid_attr))
--
drivers/infiniband/core/sysfs.c=429=static ssize_t show_port_gid(struct ib_device *ibdev, u32 port_num,
--
drivers/infiniband/core/sysfs.c-436-
drivers/infiniband/core/sysfs.c:437:	gid_attr = rdma_get_gid_attr(ibdev, port_num, tab_attr->index);
drivers/infiniband/core/sysfs.c-438-	if (IS_ERR(gid_attr)) {
--
drivers/infiniband/core/uverbs_std_types_device.c=401=static int UVERBS_HANDLER(UVERBS_METHOD_QUERY_GID_ENTRY)(
--
drivers/infiniband/core/uverbs_std_types_device.c-436-
drivers/infiniband/core/uverbs_std_types_device.c:437:	gid_attr = rdma_get_gid_attr(ib_dev, port_num, gid_index);
drivers/infiniband/core/uverbs_std_types_device.c-438-	if (IS_ERR(gid_attr))
--
drivers/infiniband/core/verbs.c=496=static int rdma_fill_sgid_attr(struct ib_device *device,
--
drivers/infiniband/core/verbs.c-517-	sgid_attr =
drivers/infiniband/core/verbs.c:518:		rdma_get_gid_attr(device, ah_attr->port_num, grh->sgid_index);
drivers/infiniband/core/verbs.c-519-	if (IS_ERR(sgid_attr))
--
drivers/infiniband/core/verbs.c=845=int ib_init_ah_attr_from_wc(struct ib_device *device, u32 port_num,
--
drivers/infiniband/core/verbs.c-914-		} else
drivers/infiniband/core/verbs.c:915:			sgid_attr = rdma_get_gid_attr(device, port_num, 0);
drivers/infiniband/core/verbs.c-916-
--
drivers/infiniband/sw/rxe/rxe_net.c=531=struct sk_buff *rxe_init_packet(struct rxe_dev *rxe, struct rxe_av *av,
--
drivers/infiniband/sw/rxe/rxe_net.c-539-
drivers/infiniband/sw/rxe/rxe_net.c:540:	attr = rdma_get_gid_attr(&rxe->ib_dev, port_num, av->grh.sgid_index);
drivers/infiniband/sw/rxe/rxe_net.c-541-	if (IS_ERR(attr))
--
include/rdma/ib_cache.h=92=bool rdma_is_zero_gid(const union ib_gid *gid);
include/rdma/ib_cache.h:93:const struct ib_gid_attr *rdma_get_gid_attr(struct ib_device *device,
include/rdma/ib_cache.h-94-					    u32 port_num, int index);
--
net/smc/smc_ib.c=155=static int smc_ib_fill_mac(struct smc_ib_device *smcibdev, u8 ibport)
--
net/smc/smc_ib.c-159-
net/smc/smc_ib.c:160:	attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, 0);
net/smc/smc_ib.c-161-	if (IS_ERR(attr))
--
net/smc/smc_ib.c=274=int smc_ib_determine_gid(struct smc_ib_device *smcibdev, u8 ibport,
--
net/smc/smc_ib.c-282-	for (i = 0; i < smcibdev->pattr[ibport - 1].gid_tbl_len; i++) {
net/smc/smc_ib.c:283:		attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, i);
net/smc/smc_ib.c-284-		if (IS_ERR(attr))
--
net/smc/smc_ib.c=307=static bool smc_ib_check_link_gid(u8 gid[SMC_GID_SIZE], bool smcrv2,
--
net/smc/smc_ib.c-314-	for (i = 0; !rc && i < smcibdev->pattr[ibport - 1].gid_tbl_len; i++) {
net/smc/smc_ib.c:315:		attr = rdma_get_gid_attr(smcibdev->ibdev, ibport, i);
net/smc/smc_ib.c-316-		if (IS_ERR(attr))
]

280/2 2026/05/21 21:33 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 179595
							output: 52
							thoughts: 1451
						

Thoughts:
**A Confirmed Resource Leak in `ib_init_ah_attr_from_wc`**

Okay, let's break this down. I'm taking a look at the `ib_init_ah_attr_from_wc` function. The key is in how it handles the GID attribute (`sgid_attr`) based on the presence of a Global Routing Header (`GRH`) in the work completion (`wc`). I'm seeing a potential resource leak here, specifically a failure to release a reference to `sgid_attr` under certain conditions.

Here's my thought process:

First, I observe that the code determines the AH (Address Handle) type and proceeds conditionally. If `rdma_protocol_roce` returns false (not a RoCE setup), the `ah_attr->type` is determined, and then it examines the `wc->wc_flags`. If `IB_WC_GRH` is set, it sets `ah_attr->ah_flags` to `IB_AH_GRH`, gets the destination GID, and looks up the cached GID. Then, it calls `rdma_get_gid_attr` to get the GID attribute.

However, the critical bit is the `else` branch. If `IB_WC_GRH` is NOT set in `wc->wc_flags`, then `ah_attr->ah_flags` does *not* get the `IB_AH_GRH` flag.  Crucially, it still proceeds to call `rdma_get_gid_attr` with an index of 0 (presumably a default GID).

Then, whether or not `IB_WC_GRH` was set, it assigns the returned `sgid_attr` to `ah_attr->grh.sgid_attr`. This implies the reference is held.

Now, here's where the leak arises. Later, `rdma_destroy_ah_attr` is called to clean up the `ah_attr`. Inside that function, it checks if `ah_attr->ah_flags & IB_AH_GRH`. If the GRH flag is NOT set (as would be the case when `IB_WC_GRH` was initially *not* set), it *skips* the call to `rdma_put_gid_attr(ah_attr->grh.sgid_attr)`.

This is a problem!  The `sgid_attr` was acquired, assigned to the `ah_attr`, and now we're not releasing the resource if the GRH flag wasn't set.  The GID attribute is leaking!

I went back and double-checked the logic in `ib_init_ah_attr_from_wc` to make sure I wasn't missing something.  I verified that the `ah_flags` field is *only* set to include the `IB_AH_GRH` flag when the GRH flag is present in the work completion. There's no later point in `ib_init_ah_attr_from_wc` where `IB_AH_GRH` is set.

In short:  When `IB_WC_GRH` is NOT set in the work completion, a GID attribute is acquired, a reference to it is assigned, and that reference is never released during `rdma_destroy_ah_attr`.  This is a classic resource leak, and it's confirmed.



281/2 2026/05/21 21:33 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/verbs.c IncludeLines:true Name:ib_init_ah_attr_from_wc]

Results:
map[SourceCode: 833:	/*
 834:	 * This function initializes address handle attributes from the incoming packet.
 835:	 * Incoming packet has dgid of the receiver node on which this code is
 836:	 * getting executed and, sgid contains the GID of the sender.
 837:	 *
 838:	 * When resolving mac address of destination, the arrived dgid is used
 839:	 * as sgid and, sgid is used as dgid because sgid contains destinations
 840:	 * GID whom to respond to.
 841:	 *
 842:	 * On success the caller is responsible to call rdma_destroy_ah_attr on the
 843:	 * attr.
 844:	 */
 845:	int ib_init_ah_attr_from_wc(struct ib_device *device, u32 port_num,
 846:				    const struct ib_wc *wc, const struct ib_grh *grh,
 847:				    struct rdma_ah_attr *ah_attr)
 848:	{
 849:		u32 flow_class;
 850:		int ret;
 851:		enum rdma_network_type net_type = RDMA_NETWORK_IB;
 852:		enum ib_gid_type gid_type = IB_GID_TYPE_IB;
 853:		const struct ib_gid_attr *sgid_attr;
 854:		int hoplimit = 0xff;
 855:		union ib_gid dgid;
 856:		union ib_gid sgid;
 857:	
 858:		might_sleep();
 859:	
 860:		memset(ah_attr, 0, sizeof *ah_attr);
 861:		ah_attr->type = rdma_ah_find_type(device, port_num);
 862:		if (rdma_cap_eth_ah(device, port_num)) {
 863:			if (wc->wc_flags & IB_WC_WITH_NETWORK_HDR_TYPE)
 864:				net_type = wc->network_hdr_type;
 865:			else
 866:				net_type = ib_get_net_type_by_grh(device, port_num, grh);
 867:			gid_type = ib_network_to_gid_type(net_type);
 868:		}
 869:		ret = ib_get_gids_from_rdma_hdr((union rdma_network_hdr *)grh, net_type,
 870:						&sgid, &dgid);
 871:		if (ret)
 872:			return ret;
 873:	
 874:		rdma_ah_set_sl(ah_attr, wc->sl);
 875:		rdma_ah_set_port_num(ah_attr, port_num);
 876:	
 877:		if (rdma_protocol_roce(device, port_num)) {
 878:			u16 vlan_id = wc->wc_flags & IB_WC_WITH_VLAN ?
 879:					wc->vlan_id : 0xffff;
 880:	
 881:			if (!(wc->wc_flags & IB_WC_GRH))
 882:				return -EPROTOTYPE;
 883:	
 884:			sgid_attr = get_sgid_attr_from_eth(device, port_num,
 885:							   vlan_id, &dgid,
 886:							   gid_type);
 887:			if (IS_ERR(sgid_attr))
 888:				return PTR_ERR(sgid_attr);
 889:	
 890:			flow_class = be32_to_cpu(grh->version_tclass_flow);
 891:			rdma_move_grh_sgid_attr(ah_attr,
 892:						&sgid,
 893:						flow_class & 0xFFFFF,
 894:						hoplimit,
 895:						(flow_class >> 20) & 0xFF,
 896:						sgid_attr);
 897:	
 898:			ret = ib_resolve_unicast_gid_dmac(device, ah_attr);
 899:			if (ret)
 900:				rdma_destroy_ah_attr(ah_attr);
 901:	
 902:			return ret;
 903:		} else {
 904:			rdma_ah_set_dlid(ah_attr, wc->slid);
 905:			rdma_ah_set_path_bits(ah_attr, wc->dlid_path_bits);
 906:	
 907:			if ((wc->wc_flags & IB_WC_GRH) == 0)
 908:				return 0;
 909:	
 910:			if (dgid.global.interface_id !=
 911:						cpu_to_be64(IB_SA_WELL_KNOWN_GUID)) {
 912:				sgid_attr = rdma_find_gid_by_port(
 913:					device, &dgid, IB_GID_TYPE_IB, port_num, NULL);
 914:			} else
 915:				sgid_attr = rdma_get_gid_attr(device, port_num, 0);
 916:	
 917:			if (IS_ERR(sgid_attr))
 918:				return PTR_ERR(sgid_attr);
 919:			flow_class = be32_to_cpu(grh->version_tclass_flow);
 920:			rdma_move_grh_sgid_attr(ah_attr,
 921:						&sgid,
 922:						flow_class & 0xFFFFF,
 923:						hoplimit,
 924:						(flow_class >> 20) & 0xFF,
 925:						sgid_attr);
 926:	
 927:			return 0;
 928:		}
 929:	}
 SourceFile:drivers/infiniband/core/verbs.c]

282/2 2026/05/21 21:33 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 183524
							output: 46
							thoughts: 651
						

Thoughts:
**Analyzing RDMA Address Handle (AH) Creation and Destruction**

Okay, let's break this down. First, I see that the function `rdma_move_grh_sgid_attr` is being called. It appears to set up the Global Routing Header (GRH) attributes for an Address Handle (`rdma_ah_attr`).  Specifically, it calls `rdma_ah_set_grh`.

Right, and `rdma_ah_set_grh` *explicitly* sets the `IB_AH_GRH` flag within the address handle's flags (`attr->ah_flags`).  Therefore, if that function is called, I *know* that `ah_attr->ah_flags & IB_AH_GRH` will be true. That's key.

So, if that flag is set, `rdma_destroy_ah_attr` *will* call `rdma_put_gid_attr`. That's the expected behavior.  So, no GID attribute leak within this section of the code as far as I can see.

Now, let me think through some potential failure scenarios. What if `ib_resolve_unicast_gid_dmac` fails? The code *explicitly* calls `rdma_destroy_ah_attr` in the error path. So that's handled. Good. No leak there either.

But, hang on a second... what about a *successful* call to `ib_init_ah_attr_from_wc`?  The code returns 0 when the call is successful, but that doesn't mean the caller has to destroy the attribute, does it? Are there places where a caller might *forget* to call `rdma_destroy_ah_attr`? Let's check who calls `ib_init_ah_attr_from_wc`. Okay, the direct callers are `cm_init_av_for_response`, `cm_lap_handler`, `ib_create_ah_from_wc`, and `recv_handler` (specifically in `user_mad.c`).

I need to dig into `recv_handler` because that is the most likely spot for a potential issue.



283/2 2026/05/21 21:33 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/user_mad.c IncludeLines:true Name:recv_handler]

Results:
map[SourceCode: 240:	static void recv_handler(struct ib_mad_agent *agent,
 241:				 struct ib_mad_send_buf *send_buf,
 242:				 struct ib_mad_recv_wc *mad_recv_wc)
 243:	{
 244:		struct ib_umad_file *file = agent->context;
 245:		struct ib_umad_packet *packet;
 246:	
 247:		if (mad_recv_wc->wc->status != IB_WC_SUCCESS)
 248:			goto err1;
 249:	
 250:		packet = kzalloc_obj(*packet);
 251:		if (!packet)
 252:			goto err1;
 253:	
 254:		packet->length = mad_recv_wc->mad_len;
 255:		packet->recv_wc = mad_recv_wc;
 256:	
 257:		packet->mad.hdr.status	   = 0;
 258:		packet->mad.hdr.length	   = hdr_size(file) + mad_recv_wc->mad_len;
 259:		packet->mad.hdr.qpn	   = cpu_to_be32(mad_recv_wc->wc->src_qp);
 260:		/*
 261:		 * On OPA devices it is okay to lose the upper 16 bits of LID as this
 262:		 * information is obtained elsewhere. Mask off the upper 16 bits.
 263:		 */
 264:		if (rdma_cap_opa_mad(agent->device, agent->port_num))
 265:			packet->mad.hdr.lid = ib_lid_be16(0xFFFF &
 266:							  mad_recv_wc->wc->slid);
 267:		else
 268:			packet->mad.hdr.lid = ib_lid_be16(mad_recv_wc->wc->slid);
 269:		packet->mad.hdr.sl	   = mad_recv_wc->wc->sl;
 270:		packet->mad.hdr.path_bits  = mad_recv_wc->wc->dlid_path_bits;
 271:		packet->mad.hdr.pkey_index = mad_recv_wc->wc->pkey_index;
 272:		packet->mad.hdr.grh_present = !!(mad_recv_wc->wc->wc_flags & IB_WC_GRH);
 273:		if (packet->mad.hdr.grh_present) {
 274:			struct rdma_ah_attr ah_attr;
 275:			const struct ib_global_route *grh;
 276:			int ret;
 277:	
 278:			ret = ib_init_ah_attr_from_wc(agent->device, agent->port_num,
 279:						      mad_recv_wc->wc,
 280:						      mad_recv_wc->recv_buf.grh,
 281:						      &ah_attr);
 282:			if (ret)
 283:				goto err2;
 284:	
 285:			grh = rdma_ah_read_grh(&ah_attr);
 286:			packet->mad.hdr.gid_index = grh->sgid_index;
 287:			packet->mad.hdr.hop_limit = grh->hop_limit;
 288:			packet->mad.hdr.traffic_class = grh->traffic_class;
 289:			memcpy(packet->mad.hdr.gid, &grh->dgid, 16);
 290:			packet->mad.hdr.flow_label = cpu_to_be32(grh->flow_label);
 291:			rdma_destroy_ah_attr(&ah_attr);
 292:		}
 293:	
 294:		if (queue_packet(file, agent, packet, true))
 295:			goto err2;
 296:		return;
 297:	
 298:	err2:
 299:		kfree(packet);
 300:	err1:
 301:		ib_free_recv_mad(mad_recv_wc);
 302:	}
 SourceFile:drivers/infiniband/core/user_mad.c]

284/2 2026/05/21 21:33 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 185869
							output: 46
							thoughts: 34
						

Thoughts:
Okay, here's my interpretation of those thoughts, presented as if they're my own:

**Analyzing Potential Resource Leaks**

Right, let's see, the code's calling `rdma_destroy_ah_attr(&ah_attr)`. Good, that means the address handle attribute structure is being properly cleaned up after use. No obvious memory leaks there, which is a relief.

Now, just to be thorough and because it's always good practice, I'll shift my focus to `cm_lap_handler`. We need to scrutinize how that function handles resources. It's often in these connection management handlers where you find the more subtle issues. Let's see if there's any allocation or deallocation activity that needs double-checking.



285/2 2026/05/21 21:34 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cm.c IncludeLines:true Name:cm_lap_handler]

Results:
map[SourceCode:3284:	static int cm_lap_handler(struct cm_work *work)
3285:	{
3286:		struct cm_id_private *cm_id_priv;
3287:		struct cm_lap_msg *lap_msg;
3288:		struct ib_cm_lap_event_param *param;
3289:		struct ib_mad_send_buf *msg = NULL;
3290:		struct rdma_ah_attr ah_attr;
3291:		struct cm_av alt_av = {};
3292:		int ret;
3293:	
3294:		/* Currently Alternate path messages are not supported for
3295:		 * RoCE link layer.
3296:		 */
3297:		if (rdma_protocol_roce(work->port->cm_dev->ib_device,
3298:				       work->port->port_num))
3299:			return -EINVAL;
3300:	
3301:		/* todo: verify LAP request and send reject APR if invalid. */
3302:		lap_msg = (struct cm_lap_msg *)work->mad_recv_wc->recv_buf.mad;
3303:		cm_id_priv = cm_acquire_id(
3304:			cpu_to_be32(IBA_GET(CM_LAP_REMOTE_COMM_ID, lap_msg)),
3305:			cpu_to_be32(IBA_GET(CM_LAP_LOCAL_COMM_ID, lap_msg)));
3306:		if (!cm_id_priv)
3307:			return -EINVAL;
3308:	
3309:		param = &work->cm_event.param.lap_rcvd;
3310:		memset(&work->path[0], 0, sizeof(work->path[1]));
3311:		cm_path_set_rec_type(work->port->cm_dev->ib_device,
3312:				     work->port->port_num, &work->path[0],
3313:				     IBA_GET_MEM_PTR(CM_LAP_ALTERNATE_LOCAL_PORT_GID,
3314:						     lap_msg));
3315:		param->alternate_path = &work->path[0];
3316:		cm_format_path_from_lap(cm_id_priv, param->alternate_path, lap_msg);
3317:		work->cm_event.private_data =
3318:			IBA_GET_MEM_PTR(CM_LAP_PRIVATE_DATA, lap_msg);
3319:	
3320:		ret = ib_init_ah_attr_from_wc(work->port->cm_dev->ib_device,
3321:					      work->port->port_num,
3322:					      work->mad_recv_wc->wc,
3323:					      work->mad_recv_wc->recv_buf.grh,
3324:					      &ah_attr);
3325:		if (ret)
3326:			goto deref;
3327:	
3328:		ret = cm_init_av_by_path(param->alternate_path, NULL, &alt_av);
3329:		if (ret) {
3330:			rdma_destroy_ah_attr(&ah_attr);
3331:			goto deref;
3332:		}
3333:	
3334:		spin_lock_irq(&cm_id_priv->lock);
3335:		cm_init_av_for_lap(work->port, work->mad_recv_wc->wc,
3336:				   &ah_attr, &cm_id_priv->av);
3337:		cm_move_av_from_path(&cm_id_priv->alt_av, &alt_av);
3338:	
3339:		if (cm_id_priv->id.state != IB_CM_ESTABLISHED)
3340:			goto unlock;
3341:	
3342:		switch (cm_id_priv->id.lap_state) {
3343:		case IB_CM_LAP_UNINIT:
3344:		case IB_CM_LAP_IDLE:
3345:			break;
3346:		case IB_CM_MRA_LAP_SENT:
3347:			atomic_long_inc(&work->port->counters[CM_RECV_DUPLICATES]
3348:							     [CM_LAP_COUNTER]);
3349:			msg = cm_alloc_response_msg_no_ah(work->port, work->mad_recv_wc,
3350:							  true);
3351:			if (IS_ERR(msg))
3352:				goto unlock;
3353:	
3354:			cm_format_mra((struct cm_mra_msg *) msg->mad, cm_id_priv,
3355:				      CM_MSG_RESPONSE_OTHER,
3356:				      cm_id_priv->private_data,
3357:				      cm_id_priv->private_data_len);
3358:			spin_unlock_irq(&cm_id_priv->lock);
3359:	
3360:			if (cm_create_response_msg_ah(work->port, work->mad_recv_wc, msg) ||
3361:			    ib_post_send_mad(msg, NULL))
3362:				cm_free_msg(msg);
3363:			goto deref;
3364:		case IB_CM_LAP_RCVD:
3365:			atomic_long_inc(&work->port->counters[CM_RECV_DUPLICATES]
3366:							     [CM_LAP_COUNTER]);
3367:			goto unlock;
3368:		default:
3369:			goto unlock;
3370:		}
3371:	
3372:		cm_id_priv->id.lap_state = IB_CM_LAP_RCVD;
3373:		cm_id_priv->tid = lap_msg->hdr.tid;
3374:		cm_queue_work_unlock(cm_id_priv, work);
3375:		return 0;
3376:	
3377:	unlock:	spin_unlock_irq(&cm_id_priv->lock);
3378:	deref:	cm_deref_id(cm_id_priv);
3379:		return -EINVAL;
3380:	}
 SourceFile:drivers/infiniband/core/cm.c]

286/2 2026/05/21 21:34 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 187872
							output: 48
							thoughts: 7742
						

Thoughts:
**Analyzing a GID Reference Leak in RDMA Subsystem**

Alright, let's break this down. We've got a GID entry reference leak, specifically related to InfiniBand devices and a reported `index 2` with a `ref=1`. My initial thought was `cm_lap_handler` and `ib_init_ah_attr_from_wc` but after tracing the calls and various conditional paths, particularly where `rdma_destroy_ah_attr` is called or not, it seems there's no immediate leak there, even with potential `unlock` paths. The same analysis applied to failures within `cm_init_av_by_path` and `ib_init_ah_attr_from_wc`. And for RoCE, the absence of `IB_WC_GRH` is handled, and the reference is released. So, these are not the source. I went back and checked various places and couldn't find a place for the leak.

I began to wonder if the issue lay in how GID attributes are acquired and released, especially when a device is removed. Then I remembered that `rdma_find_gid_by_port`, which is called by `cma_validate_port` can leak.  `cma_validate_port` is used when binding an IP address to a CM ID. If a user creates an RDMA CM ID via `ucma_create_id`, and then binds it, it gets a GID entry with a ref. Then a `nldev_dellink` is performed to remove the device. The CM ID still has a GID ref.

This would explain the `ref=1` and the index 2 which is likely a secondary IP address assigned.  The device is unregistered. But the CM ID still holds the reference. Then `release_gid_table` will complain, because that ref count can never be zero. I believe this is the root cause.



287/2 2026/05/21 21:35 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cma.c IncludeLines:true Name:cma_remove_one]

Results:
map[SourceCode:5441:	static void cma_remove_one(struct ib_device *device, void *client_data)
5442:	{
5443:		struct cma_device *cma_dev = client_data;
5444:	
5445:		trace_cm_remove_one(device);
5446:	
5447:		mutex_lock(&lock);
5448:		list_del(&cma_dev->list);
5449:		mutex_unlock(&lock);
5450:	
5451:		cma_process_remove(cma_dev);
5452:		kfree(cma_dev->default_roce_tos);
5453:		kfree(cma_dev->default_gid_type);
5454:		kfree(cma_dev);
5455:	}
 SourceFile:drivers/infiniband/core/cma.c]

288/2 2026/05/21 21:35 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 196339
							output: 48
							thoughts: 12
						

Thoughts:
Okay, here's my take on those thoughts, tailored for an expert audience, and delivered as if they were my own:

**Reviewing the `cma_process_remove` Function**

Alright, let's zero in on `cma_process_remove`. I'm going to quickly refresh my understanding of how this function is supposed to work within the larger context. I need to ensure it's behaving as expected, particularly in relation to resource management and preventing any potential leaks or dangling pointers. My initial thought is to make sure the removal is clean and doesn't leave any orphaned data. I’m thinking about edge cases, like what happens if the process isn't found or if there's a problem during the unlinking of associated resources. This needs to be bulletproof. I'll mentally walk through the typical execution path, considering any potential race conditions or concurrency issues that might arise during the removal operation. I’ll make sure it plays nicely with other processes.



289/2 2026/05/21 21:35 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/core/cma.c IncludeLines:true Name:cma_process_remove]

Results:
map[SourceCode:5332:	static void cma_process_remove(struct cma_device *cma_dev)
5333:	{
5334:		mutex_lock(&lock);
5335:		while (!list_empty(&cma_dev->id_list)) {
5336:			struct rdma_id_private *id_priv = list_first_entry(
5337:				&cma_dev->id_list, struct rdma_id_private, device_item);
5338:	
5339:			list_del_init(&id_priv->listen_item);
5340:			list_del_init(&id_priv->device_item);
5341:			cma_id_get(id_priv);
5342:			mutex_unlock(&lock);
5343:	
5344:			cma_send_device_removal_put(id_priv);
5345:	
5346:			mutex_lock(&lock);
5347:		}
5348:		mutex_unlock(&lock);
5349:	
5350:		cma_dev_put(cma_dev);
5351:		wait_for_completion(&cma_dev->comp);
5352:	}
 SourceFile:drivers/infiniband/core/cma.c]

290/2 2026/05/21 21:35 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 196970
							output: 53
							thoughts: 2426
						

Thoughts:
**RDMA CM Device Removal and GID Reference Leaks: A Deep Dive**

Okay, so here's the deal. I've been dissecting the device removal process in the RDMA CM context, and some things are jumping out at me. Specifically, I see `cma_process_remove` removing IDs from `cma_dev->id_list` and then calling `cma_send_device_removal_put(id_priv)`. This function is where the potential issue lies.

First off, `cma_send_device_removal_put` sends a device removal event and sets the ID's state to `RDMA_CM_DEVICE_REMOVAL`. If `cma_cm_event_handler` returns 0, the ID is *not* destroyed. It just changes state. The problem? Even if it's not destroyed, it is removed from the `cma_dev->id_list`. The ID *still* holds a reference to the GID.

Now, because the ID isn't destroyed, the RDMA CM ID is not releasing the GID reference. When `ib_unregister_device` continues and then calls `ib_cache_cleanup_one`, `release_gid_table` will be called, and it's going to see that this GID reference is still held by the ID! It's going to warn me, and I can see the warning.

I have to consider what this really means. If `cma_cm_event_handler` returns 0, the expectation is that the user application will destroy the ID. But, what if the application is malicious, or just not written to handle this event immediately? The kernel can't *force* the user to destroy the ID. If the user doesn't destroy the ID, that GID reference is leaked until the user closes the file descriptor.

So, it's not a permanent memory leak. It's tied to the lifetime of the `rdma_cm` file descriptor. And it's a WARNING, not a crash. Still, it's a GID reference leak and a potential problem.

Let me think. What other mechanisms are at play here?

*   **SMC:** I had a look at SMC (Shared Memory Communications over RDMA). `smc_ib_remove_dev` calls `smc_smcr_terminate_all(smcibdev)`. I checked if this could cause the issue, by not terminating all the resources, but it doesn't look like it. Turns out, the QP is destroyed synchronously. So it doesn't leak GID.
*   **RDS:** Okay, what about RDS (Reliable Datagram Sockets)? `rds_ib_remove_one` calls `rds_ib_dev_free`, which destroys all connections. It looks clean, too.

Okay, so what is the real trigger? It looks like the main trigger is likely a situation where an RDMA CM ID is created, bound, and then the underlying device is deleted. The syzkaller log is showing `syz.0.0` doing loop device and gfs2 stuff, then the IB device is being removed. The log says "GID entry ref leak". So the culprit is `nldev_dellink` where the network device is deleted, and if there's an active RDMA CM ID, it leaks the GID reference.

Now, is this exploitable? Not directly. It's just a WARNING. It doesn't crash the kernel, and the memory *is* eventually freed when the user closes the FD. Is it a DoS? Technically, a warning can be considered a minor DoS if `panic_on_warn` is set, but by default it just goes to dmesg. Is it accessible to unprivileged users? No, `nldev_dellink` requires `CAP_NET_ADMIN` in `init_user_ns`. So, a low-privilege user can't trigger this. Even plugging/unplugging a USB device requires physical access, and any netdev related things need `CAP_NET_ADMIN`.

What if the user creates a dummy netdev or something? Nope, still requires `CAP_NET_ADMIN`.

I need to confirm the conditions for the `syzkaller` scenario. Deleting a netdev requires `CAP_NET_ADMIN` in the namespace where the netdev resides. If the netdev is in a user namespace, then the user *can* delete it! That looks like the key. Wait! Let me think... what if the `rxe` device is attached to a netdev in a user namespace, and that netdev gets deleted? Does it remove the `rxe` device? I need to check `rxe_net_notifier`


291/2 2026/05/21 21:35 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/sw/rxe/rxe_net.c IncludeLines:true Name:rxe_net_notifier]

Results:
map[SourceCode: 708:	static struct notifier_block rxe_net_notifier = {
 709:		.notifier_call = rxe_notify,
 710:	};
 SourceFile:drivers/infiniband/sw/rxe/rxe_net.c]

292/2 2026/05/21 21:35 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 200560
							output: 51
							thoughts: 10
						

Thoughts:
Okay, here's my summarized thought process, presented as if I were thinking it:

**Checking `rxe_notify`**

Alright, time to dive in. Let's start with `rxe_notify`. I need to assess its functionality and purpose within this context. I'm assuming, given the naming, it's likely related to receive queue notifications, but I need to confirm that. My mind immediately begins to check: What are the potential areas for review? Performance implications? Error handling? Interplay with other related functions or modules? Does this involve a critical section or require synchronization? It's all about ensuring the expected behavior is occurring as designed. I will begin by examining the code itself, checking for any subtle but vital indications.



293/2 2026/05/21 21:35 tool codesearch-definition-source
0m Args:
map[ContextFile:drivers/infiniband/sw/rxe/rxe_net.c IncludeLines:true Name:rxe_notify]

Results:
map[SourceCode: 670:	static int rxe_notify(struct notifier_block *not_blk,
 671:			      unsigned long event,
 672:			      void *arg)
 673:	{
 674:		struct net_device *ndev = netdev_notifier_info_to_dev(arg);
 675:		struct rxe_dev *rxe = rxe_get_dev_from_net(ndev);
 676:	
 677:		if (!rxe)
 678:			return NOTIFY_OK;
 679:	
 680:		switch (event) {
 681:		case NETDEV_UNREGISTER:
 682:			ib_unregister_device_queued(&rxe->ib_dev);
 683:			break;
 684:		case NETDEV_CHANGEMTU:
 685:			rxe_dbg_dev(rxe, "%s changed mtu to %d\n", ndev->name, ndev->mtu);
 686:			rxe_set_mtu(rxe, ndev->mtu);
 687:			break;
 688:		case NETDEV_DOWN:
 689:		case NETDEV_CHANGE:
 690:			if (ib_get_curr_port_state(ndev) == IB_PORT_DOWN)
 691:				rxe_counter_inc(rxe, RXE_CNT_LINK_DOWNED);
 692:			break;
 693:		case NETDEV_REBOOT:
 694:		case NETDEV_GOING_DOWN:
 695:		case NETDEV_CHANGEADDR:
 696:		case NETDEV_CHANGENAME:
 697:		case NETDEV_FEAT_CHANGE:
 698:		default:
 699:			rxe_dbg_dev(rxe, "ignoring netdev event = %ld for %s\n",
 700:				event, ndev->name);
 701:			break;
 702:		}
 703:	
 704:		ib_device_put(&rxe->ib_dev);
 705:		return NOTIFY_OK;
 706:	}
 SourceFile:drivers/infiniband/sw/rxe/rxe_net.c]

294/2 2026/05/21 21:35 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 201398
							output: 66
							thoughts: 1942
						

Thoughts:
**Assessment of the RDMA GID Entry Refcount Leak**

Okay, let's break this down. Initially, the focus was on `ib_unregister_device_queued` and the potential for unprivileged users in user namespaces to trigger a vulnerability. The thought process revolved around creating a `veth` or `dummy` device, then trying to layer an `rxe` device on top, ultimately leading to device deletion. The `rdma link add` command sends a netlink message to `RDMA_NL_NLDEV`, which calls `nldev_newlink`. However, `RDMA_NL_ADMIN_PERM` and by extension, `netlink_capable`, checks against `init_user_ns`. So, even with a user namespace, an unprivileged user cannot create an `rxe` device, because they lack `CAP_NET_ADMIN` in the initial user namespace. Consequently, they can't trigger the root cause, which requires creating then deleting an IB device, unless some very specific admin configurations are in place.

Next, I considered whether an existing `RDMA CM` ID could be the culprit. Access to `/dev/infiniband/rdma_cm` is usually available to unprivileged users, but they can't remove the device. This meant that the client could hold a reference, leading to a warning upon *admin* removal, but no security issue.

So, the issue boils down to a warning about a GID entry refcount leak when an IB device is removed, while a client (like RDMA CM) still holds a reference to a GID entry. This doesn't permanently leak memory, it's tied to the client's lifetime. Unprivileged users can't remove devices, unless the admin explicitly configures it. This is not a security issue, it is a warning. This is not an exploitable Denial of Service vulnerability.

Then I considered other possible leak sources in `smc_ib_determine_gid`, `smc_ib_check_link_gid`, and `ib_init_ah_attr_from_wc`. And found a real leak in `ib_init_ah_attr_from_wc`. If `wc->wc_flags & IB_WC_GRH` is false, the `sgid_attr` reference is *not* released by `rdma_destroy_ah_attr`. This is a real, remotely triggerable leak on InfiniBand networks by sending a CM REQ MAD *without* GRH. However, it's not a severe DoS, because it is just a cache entry, not an unlimited consumption of memory. And refcount overflow is impossible, due to protection mechanism of `refcount_t`.

Further, I revisited the syzkaller log, which initially pointed to an index 2 leak. It's triggered by a local program creating an RDMA CM ID, binding to an IP address (thus adding a GID at index 2), and then removing the device, so the warning matches. Since device removal requires `CAP_NET_ADMIN`, it's not unprivileged and thus not an issue.

The syzkaller setup is using a `syz_tun` device, which is a TUN/TAP device. Syzkaller creates a TUN device, then creates an `rxe` device on top of it, and then performs RDMA CM operations, triggering the warning. Since `rxe` creation requires `CAP_NET_ADMIN`, it's not an unprivileged trigger.

Therefore, my assessment remains consistent: this issue is not exploitable, not a DoS, not triggered by unprivileged users, user namespaces, VMs, network triggers, or peripherals. It's a warning related to a GID entry reference leak that requires administrative intervention.



295/2 2026/05/21 21:36 tool set-results
0m Args:
map[DenialOfService:false Exploitable:false FilesystemTrigger:false NetworkTrigger:false PeripheralTrigger:false RemoteTrigger:false Unprivileged:false UserNamespace:false VMGuestTrigger:false VMHostTrigger:false]

Results:
map[DenialOfService:false Exploitable:false FilesystemTrigger:false NetworkTrigger:false PeripheralTrigger:false RemoteTrigger:false Unprivileged:false UserNamespace:false VMGuestTrigger:false VMHostTrigger:false]

296/2 2026/05/21 21:36 llm expert
0m Model:
gemini-3.1-pro-preview

Tokens:
							input: 204271
							output: 678
							thoughts: 14
						

Thoughts:
Okay, here's the summary, rendered as a first-person thought process, keeping in mind the user is an expert:

**Final Reasoning: Unveiling the Implications**

Alright, the data is locked down; the results are in. Now, it's time to distill everything – to lay out the final reasoning that underpins my conclusions. This isn't just a rehash of the findings; it's about connecting the dots and revealing the deeper implications, the subtle nuances that might otherwise be overlooked. I need to synthesize the disparate elements, bringing forth the logical thread that ties it all together, explaining *why* these results matter within the established framework of our collective understanding. I'll consider alternative interpretations, address any potential biases in the methods or assumptions made, and defend the robustness of my conclusions against potential criticisms. It’s about more than just reporting facts; it's about constructing a coherent, compelling narrative that elevates the results to a higher level of insight. I must ensure the analysis is rigorous, transparent, and ultimately, persuasive.



297/1 2026/05/21 21:36 action format-explanation
0m Results:
map[Explanation:Based on the analysis of the bug report and the kernel source code, here is the
assessment of the bug:

**Bug Analysis:**
The bug is a `WARNING` indicating a reference count leak for a GID (Global
Identifier) table entry in the InfiniBand core (`GID entry ref leak for dev syz1
index 2 ref=1`).
This happens when an InfiniBand device (in this case, a Soft RoCE `rxe` device
named `syz1`) is being unregistered and destroyed. During the device teardown,
the kernel cleans up the GID table and expects all references to the GID entries
to have been released by clients. If any client still holds a reference, the
kernel prints this warning.

The typical way this is triggered by a fuzzer (like syzkaller) is:
1. Create a virtual network device (e.g., a TUN/TAP device).
2. Create an `rxe` (Soft RoCE) InfiniBand device on top of the netdev.
3. Create an RDMA CM (Communication Manager) ID and bind it to a local IP
address. This acquires a reference to the corresponding GID entry in the IB
device's GID table.
4. Delete the underlying netdev or the `rxe` device directly while the RDMA CM
ID is still alive and holding the reference.
5. The device unregistration routine (`ib_unregister_device`) proceeds to clean
up the GID table, sees the elevated reference count, and emits the `WARNING`.

**Security Impact:**
- **Exploitable:** No. This is a simple reference count leak tied to the
lifetime of a user-space file descriptor (the RDMA CM ID). When the process
exits or closes the file descriptor, the RDMA CM ID is destroyed, and the
reference is properly released. It does not lead to memory corruption,
use-after-free, or privilege escalation.
- **Denial of Service:** No. In production kernels, a `WARNING` does not halt
the system. The memory associated with the leaked reference is bounded and will
be reclaimed when the holding process terminates.
- **Unprivileged / User Namespace Access:** No. Creating an `rxe` device or
deleting it (either directly via netlink or by deleting the underlying netdev)
requires `CAP_NET_ADMIN` in the **initial** user namespace (`init_user_ns`). The
netlink command `RDMA_NLDEV_CMD_NEWLINK` and `RDMA_NLDEV_CMD_DELLINK` are
protected by `RDMA_NL_ADMIN_PERM`, which explicitly checks
`netlink_ns_capable(skb, &init_user_ns, CAP_NET_ADMIN)`. Therefore, an
unprivileged user, even within a new user namespace, cannot create the required
IB device to trigger this bug.
- **Remote / Network / Peripheral / Filesystem Trigger:** No. The bug is
triggered by local administrative configuration changes (adding/removing IB
devices) combined with local RDMA API usage.

In conclusion, this is a benign warning that occurs due to the asynchronous
nature of device removal versus client resource cleanup in the RDMA subsystem.
It poses no security risk.]

LLM Calls Summary:
Total Calls Total Tokens Avg Tokens Total Duration (Seconds) Avg Duration (Seconds)
Tool Calls Summary:
Total Calls Total Duration (Seconds) Avg Duration (Seconds)