2010-03-15 13:40:19

by michael-dev

[permalink] [raw]
Subject: [BUG] SLOB breaks Crypto

Hi,

I've been trying to get Linux Kernel Crypto up&running
on an AMD Geode LX board (Alix 2d2) but instantly
experienced a huge amount of errors that look much like
general memory corruption. Among them where NULL-pointer errors in
net/core/dst.c, ath9k_skb_.*, net_skb.*, page table corruption,
NULL-pointer errors in add_swap.* (with no swap installed at all) and
many more. These errors could be trigger by loading tcrypt for any
installed algorithm severeal times or by loading tcrypt without
paramters or by compiling crypto statically into the kernel or by
installing and loading cryptodev or ocf-linux.

I've had the system configured with SLOB and all memory debugging
enabled. All of these errors instantly disappeared when switching back
to SLAB.

Please find config and backtraces attached.

Sincerely,
Michael Braun

-- config --

#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.34-rc1
# Mon Mar 15 14:34:47 2010
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
# CONFIG_X86_64 is not set
CONFIG_X86=y
CONFIG_OUTPUT_FORMAT="elf32-i386"
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
CONFIG_GENERIC_TIME=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_MMU=y
CONFIG_ZONE_DMA=y
# CONFIG_NEED_DMA_MAP_STATE is not set
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_GPIO=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
# CONFIG_GENERIC_TIME_VSYSCALL is not set
CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HAS_DEFAULT_IDLE=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
# CONFIG_ZONE_DMA32 is not set
CONFIG_ARCH_POPULATES_NODE_MAP=y
# CONFIG_AUDIT_ARCH is not set
CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_HAVE_EARLY_RES=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_X86_32_LAZY_GS=y
CONFIG_KTIME_SCALAR=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_CONSTRUCTORS=y

#
# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
# CONFIG_AUDIT is not set

#
# RCU Subsystem
#
CONFIG_TREE_RCU=y
# CONFIG_TREE_PREEMPT_RCU is not set
# CONFIG_TINY_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not set
# CONFIG_TREE_RCU_TRACE is not set
CONFIG_IKCONFIG=m
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
# CONFIG_CGROUPS is not set
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set
# CONFIG_NAMESPACES is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
# CONFIG_RD_BZIP2 is not set
CONFIG_RD_LZMA=y
# CONFIG_RD_LZO is not set
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_EMBEDDED=y
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_PCSPKR_PLATFORM=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_EVENTS_NMI=y

#
# Kernel Performance Events And Counters
#
CONFIG_PERF_EVENTS=y
# CONFIG_PERF_COUNTERS is not set
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PCI_QUIRKS=y
# CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not set
# CONFIG_SLUB is not set
CONFIG_SLOB=y
# CONFIG_PROFILING is not set
CONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not set
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_OPTPROBES=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_ATTRS=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_DMA_API_DEBUG=y
CONFIG_HAVE_HW_BREAKPOINT=y
CONFIG_HAVE_USER_RETURN_NOTIFIER=y

#
# GCOV-based kernel profiling
#
# CONFIG_GCOV_KERNEL is not set
CONFIG_SLOW_WORK=y
# CONFIG_SLOW_WORK_DEBUG is not set
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_BLOCK=y
# CONFIG_LBDAF is not set
# CONFIG_BLK_DEV_BSG is not set
# CONFIG_BLK_DEV_INTEGRITY is not set

#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_DEADLINE is not set
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
# CONFIG_INLINE_SPIN_TRYLOCK is not set
# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK is not set
# CONFIG_INLINE_SPIN_LOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
# CONFIG_INLINE_SPIN_UNLOCK is not set
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_READ_TRYLOCK is not set
# CONFIG_INLINE_READ_LOCK is not set
# CONFIG_INLINE_READ_LOCK_BH is not set
# CONFIG_INLINE_READ_LOCK_IRQ is not set
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
# CONFIG_INLINE_READ_UNLOCK is not set
# CONFIG_INLINE_READ_UNLOCK_BH is not set
# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_WRITE_TRYLOCK is not set
# CONFIG_INLINE_WRITE_LOCK is not set
# CONFIG_INLINE_WRITE_LOCK_BH is not set
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
# CONFIG_INLINE_WRITE_UNLOCK is not set
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
# CONFIG_FREEZER is not set

#
# Processor type and features
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
# CONFIG_SMP is not set
# CONFIG_SPARSE_IRQ is not set
CONFIG_X86_MPPARSE=y
CONFIG_X86_EXTENDED_PLATFORM=y
# CONFIG_X86_ELAN is not set
# CONFIG_X86_MRST is not set
# CONFIG_X86_RDC321X is not set
CONFIG_SCHED_OMIT_FRAME_POINTER=y
# CONFIG_PARAVIRT_GUEST is not set
CONFIG_NO_BOOTMEM=y
# CONFIG_MEMTEST is not set
# CONFIG_M386 is not set
# CONFIG_M486 is not set
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
# CONFIG_M586MMX is not set
# CONFIG_M686 is not set
# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not set
# CONFIG_MPENTIUMM is not set
# CONFIG_MPENTIUM4 is not set
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
# CONFIG_MCRUSOE is not set
# CONFIG_MEFFICEON is not set
# CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP3D is not set
# CONFIG_MGEODEGX1 is not set
CONFIG_MGEODE_LX=y
# CONFIG_MCYRIXIII is not set
# CONFIG_MVIAC3_2 is not set
# CONFIG_MVIAC7 is not set
# CONFIG_MPSC is not set
# CONFIG_MCORE2 is not set
# CONFIG_MATOM is not set
# CONFIG_GENERIC_CPU is not set
CONFIG_X86_GENERIC=y
CONFIG_X86_CPU=y
CONFIG_X86_INTERNODE_CACHE_SHIFT=6
CONFIG_X86_CMPXCHG=y
CONFIG_X86_L1_CACHE_SHIFT=6
CONFIG_X86_XADD=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_X86_INTEL_USERCOPY=y
CONFIG_X86_USE_PPRO_CHECKSUM=y
CONFIG_X86_USE_3DNOW=y
CONFIG_X86_TSC=y
CONFIG_X86_CMOV=y
CONFIG_X86_MINIMUM_CPU_FAMILY=4
CONFIG_X86_DEBUGCTLMSR=y
# CONFIG_PROCESSOR_SELECT is not set
CONFIG_CPU_SUP_INTEL=y
CONFIG_CPU_SUP_CYRIX_32=y
CONFIG_CPU_SUP_AMD=y
CONFIG_CPU_SUP_CENTAUR=y
CONFIG_CPU_SUP_TRANSMETA_32=y
CONFIG_CPU_SUP_UMC_32=y
# CONFIG_X86_DS is not set
CONFIG_HPET_TIMER=y
CONFIG_HPET_EMULATE_RTC=y
CONFIG_DMI=y
# CONFIG_IOMMU_HELPER is not set
# CONFIG_IOMMU_API is not set
CONFIG_NR_CPUS=1
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_X86_UP_APIC=y
CONFIG_X86_UP_IOAPIC=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
# CONFIG_X86_MCE is not set
# CONFIG_VM86 is not set
# CONFIG_TOSHIBA is not set
# CONFIG_I8K is not set
CONFIG_X86_REBOOTFIXUPS=y
CONFIG_MICROCODE=y
CONFIG_MICROCODE_INTEL=y
CONFIG_MICROCODE_AMD=y
CONFIG_MICROCODE_OLD_INTERFACE=y
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
CONFIG_NOHIGHMEM=y
# CONFIG_HIGHMEM4G is not set
# CONFIG_HIGHMEM64G is not set
CONFIG_VMSPLIT_3G=y
# CONFIG_VMSPLIT_3G_OPT is not set
# CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_2G_OPT is not set
# CONFIG_VMSPLIT_1G is not set
CONFIG_PAGE_OFFSET=0xC0000000
# CONFIG_X86_PAE is not set
# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
CONFIG_ARCH_FLATMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ILLEGAL_POINTER_VALUE=0
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_SPARSEMEM_STATIC=y
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_X86_CHECK_BIOS_CORRUPTION=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
CONFIG_X86_RESERVE_LOW_64K=y
CONFIG_MATH_EMULATION=y
# CONFIG_MTRR is not set
# CONFIG_EFI is not set
CONFIG_SECCOMP=y
# CONFIG_CC_STACKPROTECTOR is not set
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000
CONFIG_SCHED_HRTICK=y
CONFIG_KEXEC=y
CONFIG_PHYSICAL_START=0x100000
# CONFIG_RELOCATABLE is not set
CONFIG_PHYSICAL_ALIGN=0x100000
CONFIG_COMPAT_VDSO=y
# CONFIG_CMDLINE_BOOL is not set

#
# Power management and ACPI options
#
CONFIG_PM=y
# CONFIG_PM_DEBUG is not set
# CONFIG_SUSPEND is not set
# CONFIG_HIBERNATION is not set
# CONFIG_PM_RUNTIME is not set
CONFIG_ACPI=y
CONFIG_ACPI_PROCFS=y
CONFIG_ACPI_PROCFS_POWER=y
# CONFIG_ACPI_POWER_METER is not set
CONFIG_ACPI_SYSFS_POWER=y
CONFIG_ACPI_PROC_EVENT=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
# CONFIG_ACPI_VIDEO is not set
CONFIG_ACPI_FAN=y
CONFIG_ACPI_DOCK=y
CONFIG_ACPI_PROCESSOR=y
# CONFIG_ACPI_PROCESSOR_AGGREGATOR is not set
CONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_CUSTOM_DSDT is not set
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
# CONFIG_ACPI_PCI_SLOT is not set
CONFIG_X86_PM_TIMER=y
CONFIG_ACPI_CONTAINER=m
CONFIG_ACPI_SBS=m
# CONFIG_ACPI_APEI is not set
# CONFIG_SFI is not set

#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y

#
# Bus options (PCI etc.)
#
CONFIG_PCI=y
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GOMMCONFIG is not set
# CONFIG_PCI_GODIRECT is not set
# CONFIG_PCI_GOOLPC is not set
CONFIG_PCI_GOANY=y
CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y
CONFIG_PCI_DOMAINS=y
CONFIG_PCIEPORTBUS=y
CONFIG_HOTPLUG_PCI_PCIE=m
CONFIG_PCIEAER=y
# CONFIG_PCIE_ECRC is not set
# CONFIG_PCIEAER_INJECT is not set
# CONFIG_PCIEASPM is not set
CONFIG_ARCH_SUPPORTS_MSI=y
# CONFIG_PCI_MSI is not set
# CONFIG_PCI_DEBUG is not set
# CONFIG_PCI_STUB is not set
CONFIG_HT_IRQ=y
# CONFIG_PCI_IOV is not set
CONFIG_PCI_IOAPIC=y
CONFIG_ISA_DMA_API=y
CONFIG_ISA=y
CONFIG_EISA=y
# CONFIG_EISA_VLB_PRIMING is not set
CONFIG_EISA_PCI_EISA=y
CONFIG_EISA_VIRTUAL_ROOT=y
CONFIG_EISA_NAMES=y
# CONFIG_MCA is not set
CONFIG_SCx200=m
CONFIG_SCx200HR_TIMER=m
# CONFIG_OLPC is not set
CONFIG_K8_NB=y
CONFIG_PCCARD=m
CONFIG_PCMCIA=m
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_CARDBUS=y

#
# PC-card bridges
#
CONFIG_YENTA=m
CONFIG_YENTA_O2=y
CONFIG_YENTA_RICOH=y
CONFIG_YENTA_TI=y
CONFIG_YENTA_ENE_TUNE=y
CONFIG_YENTA_TOSHIBA=y
# CONFIG_PD6729 is not set
CONFIG_I82092=m
CONFIG_I82365=m
# CONFIG_TCIC is not set
CONFIG_PCMCIA_PROBE=y
CONFIG_PCCARD_NONSTATIC=m
CONFIG_HOTPLUG_PCI=m
# CONFIG_HOTPLUG_PCI_FAKE is not set
# CONFIG_HOTPLUG_PCI_COMPAQ is not set
# CONFIG_HOTPLUG_PCI_IBM is not set
# CONFIG_HOTPLUG_PCI_ACPI is not set
# CONFIG_HOTPLUG_PCI_CPCI is not set
# CONFIG_HOTPLUG_PCI_SHPC is not set
# CONFIG_VBUS_PROXY is not set

#
# Executable file formats / Emulations
#
CONFIG_BINFMT_ELF=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
CONFIG_HAVE_AOUT=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
CONFIG_HAVE_ATOMIC_IOMAP=y
CONFIG_NET=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_XFRM=y
CONFIG_XFRM_USER=m
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not set
# CONFIG_XFRM_STATISTICS is not set
CONFIG_NET_KEY=m
# CONFIG_NET_KEY_MIGRATE is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_ASK_IP_FIB_HASH=y
# CONFIG_IP_FIB_TRIE is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
CONFIG_NET_IPIP=m
# CONFIG_NET_IPGRE is not set
CONFIG_IP_MROUTE=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
# CONFIG_ARPD is not set
CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
CONFIG_INET_TUNNEL=m
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_BEET is not set
# CONFIG_INET_LRO is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
CONFIG_IPV6=m
# CONFIG_IPV6_PRIVACY is not set
# CONFIG_IPV6_ROUTER_PREF is not set
# CONFIG_IPV6_OPTIMISTIC_DAD is not set
# CONFIG_INET6_AH is not set
# CONFIG_INET6_ESP is not set
# CONFIG_INET6_IPCOMP is not set
# CONFIG_IPV6_MIP6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
CONFIG_INET6_TUNNEL=m
# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
# CONFIG_INET6_XFRM_MODE_BEET is not set
# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
# CONFIG_IPV6_SIT is not set
CONFIG_IPV6_TUNNEL=m
# CONFIG_IPV6_MULTIPLE_TABLES is not set
# CONFIG_IPV6_MROUTE is not set
# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=y

#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NF_CONNTRACK=m
CONFIG_NF_CT_ACCT=y
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_EVENTS=y
# CONFIG_NF_CT_PROTO_DCCP is not set
CONFIG_NF_CT_PROTO_GRE=m
CONFIG_NF_CT_PROTO_SCTP=m
CONFIG_NF_CT_PROTO_UDPLITE=m
CONFIG_NF_CONNTRACK_AMANDA=m
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CONNTRACK_H323=m
CONFIG_NF_CONNTRACK_IRC=m
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
CONFIG_NF_CONNTRACK_PPTP=m
CONFIG_NF_CONNTRACK_SANE=m
CONFIG_NF_CONNTRACK_SIP=m
CONFIG_NF_CONNTRACK_TFTP=m
CONFIG_NF_CT_NETLINK=m
# CONFIG_NETFILTER_TPROXY is not set
CONFIG_NETFILTER_XTABLES=m
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
# CONFIG_NETFILTER_XT_TARGET_CT is not set
CONFIG_NETFILTER_XT_TARGET_DSCP=m
CONFIG_NETFILTER_XT_TARGET_HL=m
# CONFIG_NETFILTER_XT_TARGET_LED is not set
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
CONFIG_NETFILTER_XT_TARGET_RATEEST=m
CONFIG_NETFILTER_XT_TARGET_TRACE=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
CONFIG_NETFILTER_XT_MATCH_DCCP=m
CONFIG_NETFILTER_XT_MATCH_DSCP=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_HL=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
CONFIG_NETFILTER_XT_MATCH_OWNER=m
CONFIG_NETFILTER_XT_MATCH_POLICY=m
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
CONFIG_NETFILTER_XT_MATCH_REALM=m
# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
CONFIG_NETFILTER_XT_MATCH_SCTP=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
CONFIG_NETFILTER_XT_MATCH_STRING=m
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
CONFIG_NETFILTER_XT_MATCH_TIME=m
CONFIG_NETFILTER_XT_MATCH_U32=m
# CONFIG_NETFILTER_XT_MATCH_OSF is not set
# CONFIG_IP_VS is not set

#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_CONNTRACK_IPV4=m
CONFIG_NF_CONNTRACK_PROC_COMPAT=y
# CONFIG_IP_NF_QUEUE is not set
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_ADDRTYPE=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_LOG=m
CONFIG_IP_NF_TARGET_ULOG=m
CONFIG_NF_NAT=m
CONFIG_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_NETMAP=m
CONFIG_IP_NF_TARGET_REDIRECT=m
# CONFIG_NF_NAT_SNMP_BASIC is not set
CONFIG_NF_NAT_PROTO_GRE=m
CONFIG_NF_NAT_PROTO_UDPLITE=m
CONFIG_NF_NAT_PROTO_SCTP=m
CONFIG_NF_NAT_FTP=m
CONFIG_NF_NAT_IRC=m
CONFIG_NF_NAT_TFTP=m
CONFIG_NF_NAT_AMANDA=m
CONFIG_NF_NAT_PPTP=m
CONFIG_NF_NAT_H323=m
CONFIG_NF_NAT_SIP=m
CONFIG_IP_NF_MANGLE=m
# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
CONFIG_IP_NF_TARGET_ECN=m
CONFIG_IP_NF_TARGET_TTL=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m

#
# IPv6: Netfilter Configuration
#
CONFIG_NF_CONNTRACK_IPV6=m
# CONFIG_IP6_NF_QUEUE is not set
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
CONFIG_IP6_NF_MATCH_FRAG=m
CONFIG_IP6_NF_MATCH_OPTS=m
CONFIG_IP6_NF_MATCH_HL=m
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
CONFIG_IP6_NF_MATCH_MH=m
CONFIG_IP6_NF_MATCH_RT=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_LOG=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
CONFIG_BRIDGE_EBT_T_NAT=m
CONFIG_BRIDGE_EBT_802_3=m
CONFIG_BRIDGE_EBT_AMONG=m
CONFIG_BRIDGE_EBT_ARP=m
CONFIG_BRIDGE_EBT_IP=m
# CONFIG_BRIDGE_EBT_IP6 is not set
CONFIG_BRIDGE_EBT_LIMIT=m
CONFIG_BRIDGE_EBT_MARK=m
CONFIG_BRIDGE_EBT_PKTTYPE=m
CONFIG_BRIDGE_EBT_STP=m
CONFIG_BRIDGE_EBT_VLAN=m
CONFIG_BRIDGE_EBT_ARPREPLY=m
CONFIG_BRIDGE_EBT_DNAT=m
CONFIG_BRIDGE_EBT_MARK_T=m
CONFIG_BRIDGE_EBT_REDIRECT=m
CONFIG_BRIDGE_EBT_SNAT=m
CONFIG_BRIDGE_EBT_LOG=m
CONFIG_BRIDGE_EBT_ULOG=m
# CONFIG_BRIDGE_EBT_NFLOG is not set
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
# CONFIG_RDS is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
CONFIG_STP=m
CONFIG_BRIDGE=m
CONFIG_BRIDGE_IGMP_SNOOPING=y
# CONFIG_NET_DSA is not set
CONFIG_VLAN_8021Q=m
# CONFIG_VLAN_8021Q_GVRP is not set
# CONFIG_DECNET is not set
CONFIG_LLC=m
CONFIG_LLC2=m
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_PHONET is not set
# CONFIG_IEEE802154 is not set
CONFIG_NET_SCHED=y

#
# Queueing/Scheduling
#
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_HFSC=m
CONFIG_NET_SCH_PRIO=m
# CONFIG_NET_SCH_MULTIQ is not set
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_NETEM=m
# CONFIG_NET_SCH_DRR is not set
CONFIG_NET_SCH_INGRESS=m

#
# Classification
#
CONFIG_NET_CLS=y
CONFIG_NET_CLS_BASIC=m
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_ROUTE=y
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_CLS_U32_PERF=y
CONFIG_CLS_U32_MARK=y
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_FLOW=m
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_NBYTE=m
CONFIG_NET_EMATCH_U32=m
CONFIG_NET_EMATCH_META=m
CONFIG_NET_EMATCH_TEXT=m
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=m
CONFIG_NET_ACT_GACT=m
# CONFIG_GACT_PROB is not set
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_NAT=m
CONFIG_NET_ACT_PEDIT=m
# CONFIG_NET_ACT_SIMP is not set
# CONFIG_NET_ACT_SKBEDIT is not set
CONFIG_NET_CLS_IND=y
CONFIG_NET_SCH_FIFO=y
# CONFIG_DCB is not set

#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_CAN is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_AF_RXRPC is not set
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_EXT=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_WEXT_SPY=y
CONFIG_WEXT_PRIV=y
CONFIG_CFG80211=m
CONFIG_NL80211_TESTMODE=y
# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
CONFIG_CFG80211_REG_DEBUG=y
CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_CFG80211_DEBUGFS=y
# CONFIG_CFG80211_INTERNAL_REGDB is not set
CONFIG_CFG80211_WEXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_LIB80211=m
CONFIG_LIB80211_CRYPT_WEP=m
CONFIG_LIB80211_CRYPT_CCMP=m
CONFIG_LIB80211_CRYPT_TKIP=m
# CONFIG_LIB80211_DEBUG is not set
CONFIG_MAC80211=m
CONFIG_MAC80211_HAS_RC=y
CONFIG_MAC80211_RC_PID=y
CONFIG_MAC80211_RC_MINSTREL=y
# CONFIG_MAC80211_RC_DEFAULT_PID is not set
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel"
CONFIG_MAC80211_MESH=y
CONFIG_MAC80211_LEDS=y
# CONFIG_MAC80211_DEBUGFS is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
# CONFIG_WIMAX is not set
CONFIG_RFKILL=m
CONFIG_RFKILL_LEDS=y
# CONFIG_RFKILL_INPUT is not set
# CONFIG_NET_9P is not set

#
# Device Drivers
#

#
# Generic Driver Options
#
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
# CONFIG_DEVTMPFS is not set
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
CONFIG_FIRMWARE_IN_KERNEL=y
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
# CONFIG_CONNECTOR is not set
# CONFIG_MTD is not set
# CONFIG_PARPORT is not set
CONFIG_PNP=y
CONFIG_PNP_DEBUG_MESSAGES=y

#
# Protocols
#
# CONFIG_ISAPNP is not set
# CONFIG_PNPBIOS is not set
CONFIG_PNPACPI=y
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_XD is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_CRYPTOLOOP=m

#
# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
#
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
# CONFIG_BLK_DEV_XIP is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
# CONFIG_BLK_DEV_HD is not set
CONFIG_MISC_DEVICES=y
# CONFIG_AD525X_DPOT is not set
# CONFIG_IBM_ASM is not set
# CONFIG_PHANTOM is not set
# CONFIG_SGI_IOC4 is not set
# CONFIG_TIFM_CORE is not set
# CONFIG_ICS932S401 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
CONFIG_CS5535_MFGPT=m
CONFIG_CS5535_MFGPT_DEFAULT_IRQ=7
CONFIG_CS5535_CLOCK_EVENT_SRC=m
# CONFIG_HP_ILO is not set
# CONFIG_ISL29003 is not set
# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_DS1682 is not set
# CONFIG_C2PORT is not set

#
# EEPROM support
#
# CONFIG_EEPROM_AT24 is not set
# CONFIG_EEPROM_LEGACY is not set
# CONFIG_EEPROM_MAX6875 is not set
CONFIG_EEPROM_93CX6=m
# CONFIG_CB710_CORE is not set
CONFIG_HAVE_IDE=y
CONFIG_IDE=y

#
# Please see Documentation/ide/ide.txt for help/info on IDE drives
#
CONFIG_IDE_XFER_MODE=y
CONFIG_IDE_TIMINGS=y
CONFIG_IDE_ATAPI=y
# CONFIG_BLK_DEV_IDE_SATA is not set
CONFIG_IDE_GD=y
CONFIG_IDE_GD_ATA=y
# CONFIG_IDE_GD_ATAPI is not set
# CONFIG_BLK_DEV_IDECS is not set
# CONFIG_BLK_DEV_DELKIN is not set
CONFIG_BLK_DEV_IDECD=m
CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
# CONFIG_BLK_DEV_IDETAPE is not set
CONFIG_BLK_DEV_IDEACPI=y
# CONFIG_IDE_TASK_IOCTL is not set
CONFIG_IDE_PROC_FS=y

#
# IDE chipset support/bugfixes
#
CONFIG_IDE_GENERIC=m
CONFIG_BLK_DEV_PLATFORM=m
CONFIG_BLK_DEV_CMD640=m
CONFIG_BLK_DEV_CMD640_ENHANCED=y
# CONFIG_BLK_DEV_IDEPNP is not set
CONFIG_BLK_DEV_IDEDMA_SFF=y

#
# PCI IDE chipsets support
#
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_IDEPCI_PCIBUS_ORDER=y
# CONFIG_BLK_DEV_OFFBOARD is not set
CONFIG_BLK_DEV_GENERIC=m
# CONFIG_BLK_DEV_OPTI621 is not set
CONFIG_BLK_DEV_RZ1000=m
CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_AEC62XX is not set
CONFIG_BLK_DEV_ALI15X3=m
CONFIG_BLK_DEV_AMD74XX=m
CONFIG_BLK_DEV_ATIIXP=m
# CONFIG_BLK_DEV_CMD64X is not set
# CONFIG_BLK_DEV_TRIFLEX is not set
# CONFIG_BLK_DEV_CS5520 is not set
# CONFIG_BLK_DEV_CS5530 is not set
CONFIG_BLK_DEV_CS5535=m
CONFIG_BLK_DEV_CS5536=m
CONFIG_BLK_DEV_HPT366=m
# CONFIG_BLK_DEV_JMICRON is not set
CONFIG_BLK_DEV_SC1200=m
CONFIG_BLK_DEV_PIIX=m
# CONFIG_BLK_DEV_IT8172 is not set
# CONFIG_BLK_DEV_IT8213 is not set
# CONFIG_BLK_DEV_IT821X is not set
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
# CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIIMAGE is not set
# CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set
CONFIG_BLK_DEV_VIA82CXXX=m
# CONFIG_BLK_DEV_TC86C001 is not set

#
# Other IDE chipsets support
#

#
# Note: most of these also require special kernel boot parameters
#
# CONFIG_BLK_DEV_4DRIVES is not set
# CONFIG_BLK_DEV_ALI14XX is not set
# CONFIG_BLK_DEV_DTC2278 is not set
# CONFIG_BLK_DEV_HT6560B is not set
# CONFIG_BLK_DEV_QD65XX is not set
# CONFIG_BLK_DEV_UMC8672 is not set
CONFIG_BLK_DEV_IDEDMA=y

#
# SCSI device support
#
CONFIG_SCSI_MOD=y
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
# CONFIG_SCSI_TGT is not set
# CONFIG_SCSI_NETLINK is not set
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not set
CONFIG_BLK_DEV_SR=m
CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=m
# CONFIG_CHR_DEV_SCH is not set
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
# CONFIG_SCSI_SCAN_ASYNC is not set
CONFIG_SCSI_WAIT_SCAN=m

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=m
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
# CONFIG_SCSI_SAS_ATA is not set
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
# CONFIG_SCSI_SRP_ATTRS is not set
CONFIG_SCSI_LOWLEVEL=y
# CONFIG_ISCSI_TCP is not set
# CONFIG_SCSI_BNX2_ISCSI is not set
# CONFIG_BE2ISCSI is not set
CONFIG_BLK_DEV_3W_XXXX_RAID=m
# CONFIG_SCSI_HPSA is not set
CONFIG_SCSI_3W_9XXX=m
# CONFIG_SCSI_3W_SAS is not set
# CONFIG_SCSI_7000FASST is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AHA152X is not set
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set
CONFIG_SCSI_AACRAID=m
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
CONFIG_SCSI_AIC94XX=m
CONFIG_AIC94XX_DEBUG=y
# CONFIG_SCSI_MVSAS is not set
# CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_ARCMSR is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_SAS is not set
# CONFIG_SCSI_MPT2SAS is not set
# CONFIG_SCSI_HPTIOP is not set
CONFIG_SCSI_BUSLOGIC=m
# CONFIG_SCSI_FLASHPOINT is not set
# CONFIG_VMWARE_PVSCSI is not set
# CONFIG_LIBFC is not set
# CONFIG_LIBFCOE is not set
# CONFIG_FCOE is not set
# CONFIG_FCOE_FNIC is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_STEX is not set
CONFIG_SCSI_SYM53C8XX_2=m
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
CONFIG_SCSI_SYM53C8XX_MMIO=y
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_QLOGIC_FAS 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_SIM710 is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_ULTRASTOR is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_DEBUG is not set
# CONFIG_SCSI_PMCRAID is not set
# CONFIG_SCSI_PM8001 is not set
# CONFIG_SCSI_SRP is not set
# CONFIG_SCSI_BFA_FC is not set
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
# CONFIG_SCSI_DH is not set
# CONFIG_SCSI_OSD_INITIATOR is not set
CONFIG_ATA=m
# CONFIG_ATA_NONSTANDARD is not set
CONFIG_ATA_VERBOSE_ERROR=y
CONFIG_ATA_ACPI=y
CONFIG_SATA_PMP=y
CONFIG_SATA_AHCI=m
CONFIG_SATA_SIL24=m
CONFIG_ATA_SFF=y
CONFIG_SATA_SVW=m
CONFIG_ATA_PIIX=m
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
# CONFIG_PDC_ADMA is not set
# CONFIG_SATA_QSTOR is not set
CONFIG_SATA_PROMISE=m
CONFIG_SATA_SX4=m
CONFIG_SATA_SIL=m
CONFIG_SATA_SIS=m
CONFIG_SATA_ULI=m
CONFIG_SATA_VIA=m
# CONFIG_SATA_VITESSE is not set
# CONFIG_SATA_INIC162X is not set
# CONFIG_PATA_ACPI is not set
# CONFIG_PATA_ALI is not set
# CONFIG_PATA_AMD is not set
# CONFIG_PATA_ARTOP is not set
# CONFIG_PATA_ATP867X is not set
# CONFIG_PATA_ATIIXP is not set
# CONFIG_PATA_CMD640_PCI is not set
# CONFIG_PATA_CMD64X is not set
# CONFIG_PATA_CS5520 is not set
# CONFIG_PATA_CS5530 is not set
CONFIG_PATA_CS5535=m
# CONFIG_PATA_CS5536 is not set
# CONFIG_PATA_CYPRESS is not set
# CONFIG_PATA_EFAR is not set
CONFIG_ATA_GENERIC=m
# 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_IT821X is not set
# CONFIG_PATA_IT8213 is not set
# CONFIG_PATA_JMICRON is not set
# CONFIG_PATA_LEGACY is not set
# CONFIG_PATA_TRIFLEX is not set
# CONFIG_PATA_MARVELL is not set
# CONFIG_PATA_MPIIX is not set
# CONFIG_PATA_OLDPIIX is not set
# CONFIG_PATA_NETCELL is not set
# CONFIG_PATA_NINJA32 is not set
# CONFIG_PATA_NS87410 is not set
# CONFIG_PATA_NS87415 is not set
# CONFIG_PATA_OPTI is not set
# CONFIG_PATA_OPTIDMA is not set
# CONFIG_PATA_PCMCIA is not set
# CONFIG_PATA_PDC2027X is not set
# CONFIG_PATA_PDC_OLD is not set
# CONFIG_PATA_QDI is not set
# CONFIG_PATA_RADISYS is not set
# CONFIG_PATA_RDC is not set
# CONFIG_PATA_RZ1000 is not set
# CONFIG_PATA_SC1200 is not set
# CONFIG_PATA_SERVERWORKS is not set
# CONFIG_PATA_SIL680 is not set
CONFIG_PATA_SIS=m
# CONFIG_PATA_TOSHIBA is not set
# CONFIG_PATA_VIA is not set
# CONFIG_PATA_WINBOND is not set
# CONFIG_PATA_WINBOND_VLB is not set
CONFIG_PATA_PLATFORM=m
# CONFIG_PATA_SCH is not set
CONFIG_MD=y
# CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_DM=m
# CONFIG_DM_DEBUG is not set
CONFIG_DM_CRYPT=m
# CONFIG_DM_SNAPSHOT is not set
# CONFIG_DM_MIRROR is not set
# CONFIG_DM_ZERO is not set
# CONFIG_DM_MULTIPATH is not set
# CONFIG_DM_DELAY is not set
# CONFIG_DM_UEVENT is not set
# CONFIG_DM_FLAKEY is not set
CONFIG_FUSION=y
CONFIG_FUSION_SPI=m
# CONFIG_FUSION_FC is not set
# CONFIG_FUSION_SAS is not set
CONFIG_FUSION_MAX_SGE=128
# CONFIG_FUSION_CTL is not set
# CONFIG_FUSION_LOGGING is not set

#
# IEEE 1394 (FireWire) support
#

#
# You can enable one or both FireWire driver stacks.
#

#
# The newer stack is recommended.
#
CONFIG_FIREWIRE=m
CONFIG_FIREWIRE_OHCI=m
CONFIG_FIREWIRE_OHCI_DEBUG=y
CONFIG_FIREWIRE_SBP2=m
# CONFIG_FIREWIRE_NET is not set
# CONFIG_IEEE1394 is not set
# CONFIG_I2O is not set
# CONFIG_MACINTOSH_DRIVERS is not set
CONFIG_NETDEVICES=y
CONFIG_IFB=m
CONFIG_DUMMY=m
CONFIG_BONDING=m
CONFIG_MACVLAN=m
CONFIG_MACVTAP=m
# CONFIG_EQUALIZER is not set
CONFIG_TUN=m
# CONFIG_VETH is not set
# CONFIG_NET_SB1000 is not set
# CONFIG_ARCNET is not set
CONFIG_PHYLIB=m

#
# MII PHY device drivers
#
# CONFIG_MARVELL_PHY is not set
# CONFIG_DAVICOM_PHY is not set
# CONFIG_QSEMI_PHY is not set
# CONFIG_LXT_PHY is not set
# CONFIG_CICADA_PHY is not set
# CONFIG_VITESSE_PHY is not set
# CONFIG_SMSC_PHY is not set
# CONFIG_BROADCOM_PHY is not set
# CONFIG_ICPLUS_PHY is not set
# CONFIG_REALTEK_PHY is not set
# CONFIG_NATIONAL_PHY is not set
# CONFIG_STE10XP is not set
# CONFIG_LSI_ET1011C_PHY is not set
# CONFIG_MDIO_BITBANG is not set
CONFIG_NET_ETHERNET=y
CONFIG_MII=m
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set
CONFIG_NET_VENDOR_3COM=y
# CONFIG_EL1 is not set
# CONFIG_EL2 is not set
# CONFIG_ELPLUS is not set
# CONFIG_EL16 is not set
CONFIG_EL3=m
# CONFIG_3C515 is not set
CONFIG_VORTEX=m
CONFIG_TYPHOON=m
CONFIG_LANCE=m
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_ETHOC is not set
# CONFIG_NET_VENDOR_RACAL is not set
# CONFIG_DNET is not set
CONFIG_NET_TULIP=y
CONFIG_DE2104X=m
CONFIG_DE2104X_DSL=0
CONFIG_TULIP=m
# CONFIG_TULIP_MWI is not set
# CONFIG_TULIP_MMIO is not set
CONFIG_TULIP_NAPI=y
CONFIG_TULIP_NAPI_HW_MITIGATION=y
# CONFIG_DE4X5 is not set
# CONFIG_WINBOND_840 is not set
# CONFIG_DM9102 is not set
# CONFIG_ULI526X is not set
# CONFIG_PCMCIA_XIRCOM is not set
# CONFIG_AT1700 is not set
# CONFIG_DEPCA is not set
# CONFIG_HP100 is not set
# CONFIG_NET_ISA is not set
# CONFIG_IBM_NEW_EMAC_ZMII is not set
# CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
CONFIG_NET_PCI=y
CONFIG_PCNET32=m
CONFIG_AMD8111_ETH=m
# CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_AC3200 is not set
# CONFIG_KSZ884X_PCI is not set
# CONFIG_APRICOT is not set
CONFIG_B44=m
CONFIG_B44_PCI_AUTOSELECT=y
CONFIG_B44_PCICORE_AUTOSELECT=y
CONFIG_B44_PCI=y
CONFIG_FORCEDETH=m
CONFIG_FORCEDETH_NAPI=y
CONFIG_CS89x0=m
CONFIG_E100=m
# CONFIG_LNE390 is not set
# CONFIG_FEALNX is not set
CONFIG_NATSEMI=m
CONFIG_NE2K_PCI=m
# CONFIG_NE3210 is not set
# CONFIG_ES3210 is not set
CONFIG_8139CP=m
CONFIG_8139TOO=m
# CONFIG_8139TOO_PIO is not set
CONFIG_8139TOO_TUNE_TWISTER=y
CONFIG_8139TOO_8129=y
# CONFIG_8139_OLD_RX_RESET is not set
CONFIG_R6040=m
CONFIG_SIS900=m
# CONFIG_EPIC100 is not set
# CONFIG_SMSC9420 is not set
# CONFIG_SUNDANCE is not set
# CONFIG_TLAN is not set
# CONFIG_KS8842 is not set
# CONFIG_KS8851_MLL is not set
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
# CONFIG_SC92031 is not set
CONFIG_ATL2=m
CONFIG_NETDEV_1000=y
# CONFIG_ACENIC is not set
CONFIG_DL2K=m
CONFIG_E1000=m
CONFIG_E1000E=m
# CONFIG_IP1000 is not set
CONFIG_IGB=m
# CONFIG_IGBVF is not set
CONFIG_NS83820=m
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
CONFIG_R8169=m
CONFIG_R8169_VLAN=y
CONFIG_SIS190=m
CONFIG_SKGE=m
# CONFIG_SKGE_DEBUG is not set
CONFIG_SKY2=m
# CONFIG_SKY2_DEBUG is not set
CONFIG_VIA_VELOCITY=m
CONFIG_TIGON3=m
CONFIG_BNX2=m
# CONFIG_CNIC is not set
# CONFIG_QLA3XXX is not set
CONFIG_ATL1=m
CONFIG_ATL1E=m
CONFIG_ATL1C=m
# CONFIG_JME is not set
# CONFIG_NETDEV_10000 is not set
# CONFIG_TR is not set
CONFIG_WLAN=y
# CONFIG_PCMCIA_RAYCS is not set
# CONFIG_LIBERTAS_THINFIRM is not set
# CONFIG_AIRO is not set
# CONFIG_ATMEL is not set
# CONFIG_AT76C50X_USB is not set
# CONFIG_AIRO_CS is not set
# CONFIG_PCMCIA_WL3501 is not set
# CONFIG_PRISM54 is not set
# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_NET_RNDIS_WLAN is not set
# CONFIG_RTL8180 is not set
# CONFIG_RTL8187 is not set
# CONFIG_ADM8211 is not set
# CONFIG_MAC80211_HWSIM is not set
# CONFIG_MWL8K is not set
CONFIG_ATH_COMMON=m
CONFIG_ATH_DEBUG=y
CONFIG_ATH5K=m
CONFIG_ATH5K_DEBUG=y
CONFIG_ATH9K_HW=m
CONFIG_ATH9K_COMMON=m
CONFIG_ATH9K=m
CONFIG_ATH9K_DEBUGFS=y
CONFIG_AR9170_USB=m
CONFIG_AR9170_LEDS=y
# CONFIG_B43 is not set
# CONFIG_B43LEGACY is not set
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
CONFIG_HOSTAP_FIRMWARE_NVRAM=y
# CONFIG_HOSTAP_PLX is not set
# CONFIG_HOSTAP_PCI is not set
# CONFIG_HOSTAP_CS is not set
# CONFIG_IPW2100 is not set
# CONFIG_IPW2200 is not set
# CONFIG_IWLWIFI is not set
# CONFIG_LIBERTAS is not set
# CONFIG_HERMES is not set
# CONFIG_P54_COMMON is not set
# CONFIG_RT2X00 is not set
# CONFIG_WL12XX is not set
# CONFIG_ZD1211RW is not set

#
# Enable WiMAX (Networking options) to see the WiMAX drivers
#

#
# USB Network Adapters
#
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
CONFIG_USB_RTL8150=m
CONFIG_USB_USBNET=m
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_CDCETHER=m
# CONFIG_USB_NET_CDC_EEM is not set
# CONFIG_USB_NET_DM9601 is not set
# CONFIG_USB_NET_SMSC95XX is not set
# CONFIG_USB_NET_GL620A is not set
CONFIG_USB_NET_NET1080=m
# CONFIG_USB_NET_PLUSB is not set
# CONFIG_USB_NET_MCS7830 is not set
# CONFIG_USB_NET_RNDIS_HOST is not set
# CONFIG_USB_NET_CDC_SUBSET is not set
CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_HSO=m
# CONFIG_USB_NET_INT51X1 is not set
CONFIG_NET_PCMCIA=y
# CONFIG_PCMCIA_3C589 is not set
# CONFIG_PCMCIA_3C574 is not set
# CONFIG_PCMCIA_FMVJ18X is not set
CONFIG_PCMCIA_PCNET=m
# CONFIG_PCMCIA_NMCLAN is not set
# CONFIG_PCMCIA_SMC91C92 is not set
# CONFIG_PCMCIA_XIRC2PS is not set
# CONFIG_PCMCIA_AXNET is not set
# CONFIG_WAN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
CONFIG_PPP=m
# CONFIG_PPP_MULTILINK is not set
CONFIG_PPP_FILTER=y
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
CONFIG_PPP_MPPE=m
CONFIG_PPPOE=m
CONFIG_PPPOL2TP=m
# CONFIG_SLIP is not set
CONFIG_SLHC=m
# CONFIG_NET_FC is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_VMXNET3 is not set
# CONFIG_ISDN is not set
# CONFIG_PHONE is not set

#
# Input device support
#
CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not set
CONFIG_INPUT_POLLDEV=m
# CONFIG_INPUT_SPARSEKMAP is not set

#
# 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 is not set
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ADP5588 is not set
CONFIG_KEYBOARD_ATKBD=y
# CONFIG_QT2160 is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_KEYBOARD_MATRIX is not set
# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_OPENCORES is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
CONFIG_MOUSE_PS2_ALPS=y
CONFIG_MOUSE_PS2_LOGIPS2PP=y
CONFIG_MOUSE_PS2_SYNAPTICS=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_SERIAL is not set
# CONFIG_MOUSE_APPLETOUCH is not set
# CONFIG_MOUSE_BCM5974 is not set
# CONFIG_MOUSE_INPORT is not set
# CONFIG_MOUSE_LOGIBM is not set
# CONFIG_MOUSE_PC110PAD is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_MOUSE_GPIO is not set
# CONFIG_MOUSE_SYNAPTICS_I2C is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
CONFIG_INPUT_MISC=y
CONFIG_INPUT_PCSPKR=m
# CONFIG_INPUT_APANEL is not set
# CONFIG_INPUT_WISTRON_BTNS is not set
# CONFIG_INPUT_ATLAS_BTNS is not set
# CONFIG_INPUT_ATI_REMOTE is not set
# CONFIG_INPUT_ATI_REMOTE2 is not set
# CONFIG_INPUT_KEYSPAN_REMOTE is not set
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not set
# CONFIG_INPUT_CM109 is not set
# CONFIG_INPUT_UINPUT is not set
# CONFIG_INPUT_WINBOND_CIR is not set
# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set

#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 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_GAMEPORT is not set

#
# Character devices
#
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
CONFIG_DEVKMEM=y
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_NOZOMI is not set

#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_PNP=y
# CONFIG_SERIAL_8250_CS is not set
CONFIG_SERIAL_8250_NR_UARTS=20
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_FOURPORT=m
CONFIG_SERIAL_8250_ACCENT=m
CONFIG_SERIAL_8250_BOCA=m
# CONFIG_SERIAL_8250_EXAR_ST16C554 is not set
CONFIG_SERIAL_8250_HUB6=m
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_RSA=y

#
# Non-8250 serial port support
#
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_CONSOLE_POLL=y
# CONFIG_SERIAL_JSM is not set
# CONFIG_SERIAL_TIMBERDALE is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
# CONFIG_IPMI_HANDLER is not set
CONFIG_HW_RANDOM=m
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
CONFIG_HW_RANDOM_INTEL=m
CONFIG_HW_RANDOM_AMD=m
CONFIG_HW_RANDOM_GEODE=m
CONFIG_HW_RANDOM_VIA=m
# CONFIG_NVRAM is not set
CONFIG_RTC=m
# CONFIG_GEN_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
# CONFIG_SONYPI is not set

#
# PCMCIA character devices
#
# CONFIG_SYNCLINK_CS is not set
# CONFIG_CARDMAN_4000 is not set
# CONFIG_CARDMAN_4040 is not set
# CONFIG_IPWIRELESS is not set
# CONFIG_MWAVE is not set
CONFIG_SCx200_GPIO=m
CONFIG_PC8736x_GPIO=m
CONFIG_NSC_GPIO=m
CONFIG_CS5535_GPIO=m
# CONFIG_RAW_DRIVER is not set
# CONFIG_HPET is not set
# CONFIG_HANGCHECK_TIMER is not set
# CONFIG_TCG_TPM is not set
# CONFIG_TELCLOCK is not set
CONFIG_DEVPORT=y
CONFIG_I2C=m
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=m
CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_ALGOBIT=m

#
# 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=m
CONFIG_I2C_AMD756_S4882=m
# CONFIG_I2C_AMD8111 is not set
CONFIG_I2C_I801=m
# CONFIG_I2C_ISCH is not set
CONFIG_I2C_PIIX4=m
CONFIG_I2C_NFORCE2=m
# CONFIG_I2C_NFORCE2_S4985 is not set
# CONFIG_I2C_SIS5595 is not set
# CONFIG_I2C_SIS630 is not set
# CONFIG_I2C_SIS96X is not set
CONFIG_I2C_VIA=m
CONFIG_I2C_VIAPRO=m

#
# ACPI drivers
#
# CONFIG_I2C_SCMI is not set

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
# CONFIG_I2C_GPIO is not set
# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_XILINX is not set

#
# External I2C/SMBus adapter drivers
#
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_TAOS_EVM is not set
# CONFIG_I2C_TINY_USB is not set

#
# Other I2C/SMBus bus drivers
#
# CONFIG_I2C_ELEKTOR is not set
# CONFIG_I2C_PCA_ISA is not set
# CONFIG_I2C_PCA_PLATFORM is not set
# CONFIG_I2C_STUB is not set
CONFIG_SCx200_I2C=m
CONFIG_SCx200_I2C_SCL=12
CONFIG_SCx200_I2C_SDA=13
CONFIG_SCx200_ACB=m
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_SPI is not set

#
# PPS support
#
CONFIG_PPS=m
# CONFIG_PPS_DEBUG is not set

#
# PPS clients support
#
# CONFIG_PPS_CLIENT_KTIMER is not set
# CONFIG_PPS_CLIENT_LDISC is not set
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
CONFIG_GPIOLIB=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_MAX730X=m

#
# Memory mapped GPIO expanders:
#
CONFIG_GPIO_IT8761E=m
CONFIG_GPIO_SCH=m

#
# I2C GPIO expanders:
#
CONFIG_GPIO_MAX7300=m
# CONFIG_GPIO_MAX732X is not set
# CONFIG_GPIO_PCA953X is not set
# CONFIG_GPIO_PCF857X is not set
# CONFIG_GPIO_ADP5588 is not set

#
# PCI GPIO expanders:
#
CONFIG_GPIO_CS5535=m
# CONFIG_GPIO_BT8XX is not set
# CONFIG_GPIO_LANGWELL is not set

#
# SPI GPIO expanders:
#

#
# AC97 GPIO expanders:
#
# CONFIG_W1 is not set
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
# CONFIG_BATTERY_DS2760 is not set
# CONFIG_BATTERY_DS2782 is not set
# CONFIG_BATTERY_BQ27x00 is not set
# CONFIG_BATTERY_MAX17040 is not set
CONFIG_HWMON=y
CONFIG_HWMON_VID=m
# CONFIG_HWMON_DEBUG_CHIP is not set

#
# Native drivers
#
# CONFIG_SENSORS_ABITUGURU is not set
# CONFIG_SENSORS_ABITUGURU3 is not set
# CONFIG_SENSORS_AD7414 is not set
# CONFIG_SENSORS_AD7418 is not set
# CONFIG_SENSORS_ADM1021 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_ADM9240 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_ASC7621 is not set
CONFIG_SENSORS_K8TEMP=m
# CONFIG_SENSORS_K10TEMP is not set
# CONFIG_SENSORS_ASB100 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS1621 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_G760A is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_CORETEMP is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_LM63 is not set
# CONFIG_SENSORS_LM73 is not set
# CONFIG_SENSORS_LM75 is not set
CONFIG_SENSORS_LM77=m
CONFIG_SENSORS_LM78=m
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
CONFIG_SENSORS_LM85=m
CONFIG_SENSORS_LM87=m
CONFIG_SENSORS_LM90=m
CONFIG_SENSORS_LM92=m
# CONFIG_SENSORS_LM93 is not set
# CONFIG_SENSORS_LTC4215 is not set
# CONFIG_SENSORS_LTC4245 is not set
# CONFIG_SENSORS_LM95241 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_MAX6650 is not set
CONFIG_SENSORS_PC87360=m
# CONFIG_SENSORS_PC87427 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_SHT15 is not set
# CONFIG_SENSORS_SIS5595 is not set
# CONFIG_SENSORS_DME1737 is not set
CONFIG_SENSORS_SMSC47M1=m
# CONFIG_SENSORS_SMSC47M192 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_ADS7828 is not set
# CONFIG_SENSORS_AMC6821 is not set
# CONFIG_SENSORS_THMC50 is not set
# CONFIG_SENSORS_TMP401 is not set
# CONFIG_SENSORS_TMP421 is not set
# CONFIG_SENSORS_VIA_CPUTEMP is not set
CONFIG_SENSORS_VIA686A=m
# CONFIG_SENSORS_VT1211 is not set
CONFIG_SENSORS_VT8231=m
CONFIG_SENSORS_W83781D=m
# CONFIG_SENSORS_W83791D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83793 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
CONFIG_SENSORS_W83627HF=m
CONFIG_SENSORS_W83627EHF=m
# CONFIG_SENSORS_HDAPS is not set
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_SENSORS_APPLESMC is not set

#
# ACPI drivers
#
# CONFIG_SENSORS_ATK0110 is not set
# CONFIG_SENSORS_LIS3LV02D is not set
CONFIG_THERMAL=y
# CONFIG_THERMAL_HWMON is not set
CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set

#
# Watchdog Device Drivers
#
CONFIG_SOFT_WATCHDOG=m
CONFIG_MAX63XX_WATCHDOG=m
# CONFIG_ACQUIRE_WDT is not set
# CONFIG_ADVANTECH_WDT is not set
# CONFIG_ALIM1535_WDT is not set
# CONFIG_ALIM7101_WDT is not set
CONFIG_GEODE_WDT=m
CONFIG_SC520_WDT=m
# 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_ITCO_WDT=m
CONFIG_ITCO_VENDOR_SUPPORT=y
# CONFIG_IT8712F_WDT is not set
# CONFIG_IT87_WDT is not set
# CONFIG_HP_WATCHDOG is not set
CONFIG_SC1200_WDT=m
CONFIG_SCx200_WDT=m
# CONFIG_PC87413_WDT is not set
# CONFIG_60XX_WDT is not set
# CONFIG_SBC8360_WDT is not set
# CONFIG_SBC7240_WDT is not set
# CONFIG_CPU5_WDT is not set
# CONFIG_SMSC_SCH311X_WDT is not set
# CONFIG_SMSC37B787_WDT is not set
CONFIG_W83627HF_WDT=m
CONFIG_W83697HF_WDT=m
# CONFIG_W83697UG_WDT is not set
# CONFIG_W83877F_WDT is not set
CONFIG_W83977F_WDT=m
# CONFIG_MACHZ_WDT is not set
# CONFIG_SBC_EPX_C3_WATCHDOG is not set

#
# ISA-based Watchdog Cards
#
# CONFIG_PCWATCHDOG is not set
# CONFIG_MIXCOMWD is not set
# CONFIG_WDT is not set

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

#
# USB-based Watchdog Cards
#
# CONFIG_USBPCWATCHDOG is not set
CONFIG_SSB_POSSIBLE=y

#
# Sonics Silicon Backplane
#
CONFIG_SSB=m
CONFIG_SSB_SPROM=y
CONFIG_SSB_PCIHOST_POSSIBLE=y
CONFIG_SSB_PCIHOST=y
# CONFIG_SSB_B43_PCI_BRIDGE is not set
CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
CONFIG_SSB_PCMCIAHOST=y
# CONFIG_SSB_SILENT is not set
# CONFIG_SSB_DEBUG is not set
CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
CONFIG_SSB_DRIVER_PCICORE=y

#
# Multifunction device drivers
#
CONFIG_MFD_CORE=m
# CONFIG_MFD_SM501 is not set
# CONFIG_HTC_PASIC3 is not set
# CONFIG_TPS65010 is not set
# CONFIG_MFD_TMIO is not set
# CONFIG_MFD_WM8400 is not set
# CONFIG_MFD_WM8994 is not set
# CONFIG_MFD_PCF50633 is not set
# CONFIG_MFD_TIMBERDALE is not set
CONFIG_LPC_SCH=m
# CONFIG_REGULATOR is not set
# CONFIG_MEDIA_SUPPORT is not set

#
# Graphics support
#
# CONFIG_AGP is not set
# CONFIG_VGA_ARB is not set
# CONFIG_VGA_SWITCHEROO is not set
# CONFIG_DRM is not set
CONFIG_VGASTATE=m
CONFIG_VIDEO_OUTPUT_CONTROL=m
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
CONFIG_FB_BOOT_VESA_SUPPORT=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
# CONFIG_FB_SYS_FILLRECT is not set
# CONFIG_FB_SYS_COPYAREA is not set
# CONFIG_FB_SYS_IMAGEBLIT is not set
# CONFIG_FB_FOREIGN_ENDIAN is not set
# CONFIG_FB_SYS_FOPS is not set
# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y

#
# Frame buffer hardware drivers
#
# 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=m
CONFIG_FB_VESA=y
# CONFIG_FB_N411 is not set
# CONFIG_FB_HGA is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not set
# CONFIG_FB_LE80578 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_GEODE is not set
# CONFIG_FB_TMIO is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FB_METRONOME is not set
# CONFIG_FB_MB862XX is not set
# CONFIG_FB_BROADSHEET is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=m
CONFIG_BACKLIGHT_GENERIC=m
# CONFIG_BACKLIGHT_PROGEAR is not set
# CONFIG_BACKLIGHT_MBP_NVIDIA is not set
# CONFIG_BACKLIGHT_SAHARA is not set

#
# Display device support
#
# CONFIG_DISPLAY_SUPPORT is not set

#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
# CONFIG_VGACON_SOFT_SCROLLBACK is not set
# CONFIG_MDA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
# CONFIG_FONT_6x11 is not set
# CONFIG_FONT_7x14 is not set
# CONFIG_FONT_PEARL_8x8 is not set
# CONFIG_FONT_ACORN_8x8 is not set
# CONFIG_FONT_MINI_4x6 is not set
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
# CONFIG_SOUND is not set
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
# CONFIG_HIDRAW is not set

#
# USB Input Devices
#
CONFIG_USB_HID=m
# CONFIG_HID_PID is not set
CONFIG_USB_HIDDEV=y

#
# USB HID Boot Protocol drivers
#
CONFIG_USB_KBD=m
CONFIG_USB_MOUSE=m

#
# Special HID drivers
#
# CONFIG_HID_3M_PCT is not set
# CONFIG_HID_A4TECH is not set
# CONFIG_HID_APPLE is not set
# CONFIG_HID_BELKIN is not set
# CONFIG_HID_CHERRY is not set
# CONFIG_HID_CHICONY is not set
# CONFIG_HID_CYPRESS is not set
# CONFIG_HID_DRAGONRISE is not set
# CONFIG_HID_EZKEY is not set
# CONFIG_HID_KYE is not set
# CONFIG_HID_GYRATION is not set
# CONFIG_HID_TWINHAN is not set
# CONFIG_HID_KENSINGTON is not set
# CONFIG_HID_LOGITECH is not set
# CONFIG_HID_MICROSOFT is not set
# CONFIG_HID_MOSART is not set
# CONFIG_HID_MONTEREY is not set
# CONFIG_HID_NTRIG is not set
# CONFIG_HID_ORTEK is not set
# CONFIG_HID_PANTHERLORD is not set
# CONFIG_HID_PETALYNX is not set
# CONFIG_HID_QUANTA is not set
# CONFIG_HID_SAMSUNG is not set
# CONFIG_HID_SONY is not set
# CONFIG_HID_STANTUM is not set
# CONFIG_HID_SUNPLUS is not set
# CONFIG_HID_GREENASIA is not set
# CONFIG_HID_SMARTJOYPLUS is not set
# CONFIG_HID_TOPSEED is not set
# CONFIG_HID_THRUSTMASTER is not set
# CONFIG_HID_ZEROPLUS is not set
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
CONFIG_USB=m
# CONFIG_USB_DEBUG is not set
# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set

#
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
CONFIG_USB_DEVICE_CLASS=y
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_OTG is not set
# CONFIG_USB_OTG_WHITELIST is not set
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
CONFIG_USB_MON=m
# CONFIG_USB_WUSB is not set
# CONFIG_USB_WUSB_CBAF is not set

#
# USB Host Controller Drivers
#
# CONFIG_USB_C67X00_HCD is not set
# CONFIG_USB_XHCI_HCD is not set
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_EHCI_ROOT_HUB_TT=y
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
# CONFIG_USB_OXU210HP_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1760_HCD is not set
# CONFIG_USB_ISP1362_HCD is not set
CONFIG_USB_OHCI_HCD=m
# CONFIG_USB_OHCI_HCD_SSB is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_UHCI_HCD=m
# CONFIG_USB_SL811_HCD is not set
# CONFIG_USB_R8A66597_HCD is not set
# CONFIG_USB_WHCI_HCD is not set
# CONFIG_USB_HWA_HCD is not set
# CONFIG_USB_GADGET_MUSB_HDRC is not set

#
# USB Device Class drivers
#
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
CONFIG_USB_WDM=m
# CONFIG_USB_TMC is not set

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#

#
# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
# CONFIG_USB_STORAGE_USBAT is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_ALAUDA is not set
# CONFIG_USB_STORAGE_ONETOUCH is not set
# CONFIG_USB_STORAGE_KARMA is not set
# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
# CONFIG_USB_LIBUSUAL is not set

#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set

#
# USB port drivers
#
CONFIG_USB_SERIAL=m
# CONFIG_USB_EZUSB is not set
CONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_AIRCABLE is not set
# CONFIG_USB_SERIAL_ARK3116 is not set
# CONFIG_USB_SERIAL_BELKIN is not set
# CONFIG_USB_SERIAL_CH341 is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_CP210X is not set
# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
# CONFIG_USB_SERIAL_EMPEG is not set
CONFIG_USB_SERIAL_FTDI_SIO=m
# CONFIG_USB_SERIAL_FUNSOFT is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_IPAQ is not set
CONFIG_USB_SERIAL_IR=m
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
CONFIG_USB_SERIAL_GARMIN=m
# CONFIG_USB_SERIAL_IPW is not set
CONFIG_USB_SERIAL_IUU=m
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not set
# CONFIG_USB_SERIAL_KLSI is not set
# CONFIG_USB_SERIAL_KOBIL_SCT is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_MOS7720 is not set
# CONFIG_USB_SERIAL_MOS7840 is not set
# CONFIG_USB_SERIAL_MOTOROLA is not set
# CONFIG_USB_SERIAL_NAVMAN is not set
CONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_OTI6858 is not set
# CONFIG_USB_SERIAL_QCAUX is not set
# CONFIG_USB_SERIAL_QUALCOMM is not set
# CONFIG_USB_SERIAL_SPCP8X5 is not set
# CONFIG_USB_SERIAL_HP4X is not set
# CONFIG_USB_SERIAL_SAFE is not set
# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
CONFIG_USB_SERIAL_SIERRAWIRELESS=m
# CONFIG_USB_SERIAL_SYMBOL is not set
CONFIG_USB_SERIAL_TI=m
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_XIRCOM is not set
CONFIG_USB_SERIAL_OPTION=m
# CONFIG_USB_SERIAL_OMNINET is not set
# CONFIG_USB_SERIAL_OPTICON is not set
# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
# CONFIG_USB_SERIAL_DEBUG is not set

#
# USB Miscellaneous drivers
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_ADUTUX is not set
# CONFIG_USB_SEVSEG is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_FTDI_ELAN is not set
# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_SISUSBVGA is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
# CONFIG_USB_ISIGHTFW is not set
CONFIG_USB_GADGET=m
# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGET_DEBUG_FILES is not set
# CONFIG_USB_GADGET_DEBUG_FS is not set
CONFIG_USB_GADGET_VBUS_DRAW=2
CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_AT91 is not set
# CONFIG_USB_GADGET_ATMEL_USBA is not set
# CONFIG_USB_GADGET_FSL_USB2 is not set
# CONFIG_USB_GADGET_LH7A40X is not set
# CONFIG_USB_GADGET_OMAP is not set
# CONFIG_USB_GADGET_PXA25X is not set
# CONFIG_USB_GADGET_R8A66597 is not set
# CONFIG_USB_GADGET_PXA27X is not set
# CONFIG_USB_GADGET_S3C_HSOTG is not set
# CONFIG_USB_GADGET_IMX is not set
# CONFIG_USB_GADGET_S3C2410 is not set
# CONFIG_USB_GADGET_M66592 is not set
CONFIG_USB_GADGET_AMD5536UDC=y
CONFIG_USB_AMD5536UDC=m
# CONFIG_USB_GADGET_FSL_QE is not set
# CONFIG_USB_GADGET_CI13XXX is not set
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_LANGWELL is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set
CONFIG_USB_GADGET_DUALSPEED=y
CONFIG_USB_ZERO=m
# CONFIG_USB_AUDIO is not set
CONFIG_USB_ETH=m
CONFIG_USB_ETH_RNDIS=y
# CONFIG_USB_ETH_EEM is not set
CONFIG_USB_GADGETFS=m
CONFIG_USB_FILE_STORAGE=m
# CONFIG_USB_FILE_STORAGE_TEST is not set
# CONFIG_USB_MASS_STORAGE is not set
CONFIG_USB_G_SERIAL=m
# 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_MULTI is not set

#
# OTG and related infrastructure
#
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_NOP_USB_XCEIV is not set
# CONFIG_UWB is not set
# CONFIG_MMC is not set
# CONFIG_MEMSTICK is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=m

#
# LED drivers
#
CONFIG_LEDS_NET48XX=m
CONFIG_LEDS_WRAP=m
CONFIG_LEDS_ALIX2=m
# CONFIG_LEDS_PCA9532 is not set
CONFIG_LEDS_GPIO=m
CONFIG_LEDS_GPIO_PLATFORM=y
# CONFIG_LEDS_LP3944 is not set
# CONFIG_LEDS_CLEVO_MAIL is not set
# CONFIG_LEDS_PCA955X is not set
# CONFIG_LEDS_BD2802 is not set
# CONFIG_LEDS_INTEL_SS4200 is not set
# CONFIG_LEDS_LT3593 is not set
# CONFIG_LEDS_DELL_NETBOOKS is not set
CONFIG_LEDS_TRIGGERS=y

#
# LED Triggers
#
CONFIG_LEDS_TRIGGER_TIMER=m
CONFIG_LEDS_TRIGGER_IDE_DISK=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=m
# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
CONFIG_LEDS_TRIGGER_GPIO=m
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m

#
# iptables trigger is under Netfilter config (LED target)
#
# CONFIG_ACCESSIBILITY is not set
# CONFIG_INFINIBAND is not set
# CONFIG_EDAC is not set
# CONFIG_RTC_CLASS is not set
# CONFIG_DMADEVICES is not set
# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set

#
# TI VLYNQ
#
# CONFIG_STAGING is not set
CONFIG_X86_PLATFORM_DEVICES=y
# CONFIG_ACER_WMI is not set
# CONFIG_ASUS_LAPTOP is not set
# CONFIG_DELL_WMI is not set
# CONFIG_FUJITSU_LAPTOP is not set
# CONFIG_TC1100_WMI is not set
# CONFIG_HP_WMI is not set
# CONFIG_MSI_LAPTOP is not set
# CONFIG_PANASONIC_LAPTOP is not set
# CONFIG_COMPAL_LAPTOP is not set
# CONFIG_SONY_LAPTOP is not set
# CONFIG_THINKPAD_ACPI is not set
# CONFIG_INTEL_MENLOW is not set
# CONFIG_EEEPC_LAPTOP is not set
CONFIG_ACPI_WMI=m
# CONFIG_MSI_WMI is not set
CONFIG_ACPI_ASUS=m
# CONFIG_TOPSTAR_LAPTOP is not set
CONFIG_ACPI_TOSHIBA=m
# CONFIG_TOSHIBA_BT_RFKILL is not set
# CONFIG_ACPI_CMPC is not set

#
# Firmware Drivers
#
# CONFIG_EDD is not set
CONFIG_FIRMWARE_MEMMAP=y
# CONFIG_DELL_RBU is not set
# CONFIG_DCDBAS is not set
# CONFIG_DMIID is not set
# CONFIG_ISCSI_IBFT_FIND is not set

#
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
# CONFIG_EXT3_FS_XATTR is not set
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_XATTR=y
# CONFIG_EXT4_FS_POSIX_ACL is not set
# CONFIG_EXT4_FS_SECURITY is not set
# CONFIG_EXT4_DEBUG is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_JBD2=y
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_FS=m
CONFIG_XFS_QUOTA=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_RT=y
# CONFIG_XFS_DEBUG is not set
CONFIG_OCFS2_FS=m
CONFIG_OCFS2_FS_O2CB=m
CONFIG_OCFS2_FS_STATS=y
CONFIG_OCFS2_DEBUG_MASKLOG=y
# CONFIG_OCFS2_DEBUG_FS is not set
# CONFIG_BTRFS_FS is not set
# CONFIG_NILFS2_FS is not set
CONFIG_FILE_LOCKING=y
CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_FANOTIFY=y
CONFIG_QUOTA=y
# CONFIG_QUOTA_NETLINK_INTERFACE is not set
CONFIG_PRINT_QUOTA_WARNING=y
CONFIG_QUOTA_TREE=m
# CONFIG_QFMT_V1 is not set
# CONFIG_QFMT_V2 is not set
CONFIG_QUOTACTL=y
CONFIG_AUTOFS_FS=m
CONFIG_AUTOFS4_FS=m
CONFIG_FUSE_FS=m
# CONFIG_CUSE is not set

#
# Caches
#
# CONFIG_FSCACHE is not set

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=m
CONFIG_UDF_NLS=y

#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
CONFIG_NTFS_RW=y

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLBFS is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_CONFIGFS_FS=m
CONFIG_MISC_FILESYSTEMS=y
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_LOGFS is not set
CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_OMFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=y
# CONFIG_NFS_V4_1 is not set
CONFIG_ROOT_NFS=y
CONFIG_NFSD=m
CONFIG_NFSD_V3=y
# CONFIG_NFSD_V3_ACL is not set
CONFIG_NFSD_V4=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=m
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
CONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_RPCSEC_GSS_SPKM3 is not set
CONFIG_SMB_FS=m
# CONFIG_SMB_NLS_DEFAULT is not set
# CONFIG_CEPH_FS is not set
CONFIG_CIFS=m
CONFIG_CIFS_STATS=y
CONFIG_CIFS_STATS2=y
# CONFIG_CIFS_WEAK_PW_HASH is not set
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
# CONFIG_CIFS_DEBUG2 is not set
# CONFIG_CIFS_EXPERIMENTAL is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not set
CONFIG_MAC_PARTITION=y
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
# CONFIG_MINIX_SUBPARTITION is not set
CONFIG_SOLARIS_X86_PARTITION=y
# CONFIG_UNIXWARE_DISKLABEL is not set
CONFIG_LDM_PARTITION=y
# CONFIG_LDM_DEBUG is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not set
CONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not set
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=m
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ASCII is not set
CONFIG_NLS_ISO8859_1=m
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=m
# CONFIG_DLM is not set

#
# Kernel hacking
#
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y
# CONFIG_STRIP_ASM_SYMS is not set
CONFIG_UNUSED_SYMBOLS=y
CONFIG_DEBUG_FS=y
# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not set
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_NMI_WATCHDOG is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1
CONFIG_DETECT_HUNG_TASK=y
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=1
CONFIG_SCHED_DEBUG=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_DEBUG_KMEMLEAK is not set
CONFIG_DEBUG_PREEMPT=y
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_PI_LIST=y
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_MUTEXES is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_PROVE_LOCKING is not set
# CONFIG_LOCK_STAT is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
CONFIG_DEBUG_KOBJECT=y
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_VM=y
CONFIG_DEBUG_VIRTUAL=y
# CONFIG_DEBUG_WRITECOUNT is not set
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_DEBUG_LIST=y
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_NOTIFIERS=y
CONFIG_DEBUG_CREDENTIALS=y
CONFIG_ARCH_WANT_FRAME_POINTERS=y
CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
# CONFIG_LKDTM is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y
CONFIG_DEBUG_PAGEALLOC=y
CONFIG_USER_STACKTRACE_SUPPORT=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_TRACING_SUPPORT=y
# CONFIG_FTRACE is not set
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
CONFIG_DYNAMIC_DEBUG=y
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS is not set
# CONFIG_KGDB_LOW_LEVEL_TRAP is not set
# CONFIG_KGDB_KDB is not set
CONFIG_HAVE_ARCH_KMEMCHECK=y
# CONFIG_STRICT_DEVMEM is not set
CONFIG_X86_VERBOSE_BOOTUP=y
# CONFIG_EARLY_PRINTK is not set
CONFIG_DEBUG_STACKOVERFLOW=y
# CONFIG_DEBUG_STACK_USAGE is not set
# CONFIG_X86_PTDUMP is not set
CONFIG_DEBUG_RODATA=y
CONFIG_DEBUG_RODATA_TEST=y
# CONFIG_DEBUG_NX_TEST is not set
# CONFIG_4KSTACKS is not set
CONFIG_DOUBLEFAULT=y
# CONFIG_IOMMU_STRESS is not set
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
CONFIG_IO_DELAY_TYPE_0X80=0
CONFIG_IO_DELAY_TYPE_0XED=1
CONFIG_IO_DELAY_TYPE_UDELAY=2
CONFIG_IO_DELAY_TYPE_NONE=3
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_DEFAULT_IO_DELAY_TYPE=0
CONFIG_DEBUG_BOOT_PARAMS=y
# CONFIG_CPA_DEBUG is not set
# CONFIG_OPTIMIZE_INLINING is not set
# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set

#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
# CONFIG_DEFAULT_SECURITY_SELINUX is not set
# CONFIG_DEFAULT_SECURITY_SMACK is not set
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
CONFIG_DEFAULT_SECURITY_DAC=y
CONFIG_DEFAULT_SECURITY=""
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
# CONFIG_CRYPTO_FIPS is not set
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=m
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=m
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_PCOMP=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
# CONFIG_CRYPTO_GF128MUL is not set
# CONFIG_CRYPTO_NULL is not set
CONFIG_CRYPTO_WORKQUEUE=y
# CONFIG_CRYPTO_CRYPTD is not set
# CONFIG_CRYPTO_AUTHENC is not set
CONFIG_CRYPTO_TEST=m

#
# Authenticated Encryption with Associated Data
#
# CONFIG_CRYPTO_CCM is not set
# CONFIG_CRYPTO_GCM is not set
CONFIG_CRYPTO_SEQIV=m

#
# Block modes
#
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CTR=m
# CONFIG_CRYPTO_CTS is not set
CONFIG_CRYPTO_ECB=m
# CONFIG_CRYPTO_LRW is not set
# CONFIG_CRYPTO_PCBC is not set
# CONFIG_CRYPTO_XTS is not set

#
# Hash modes
#
CONFIG_CRYPTO_HMAC=m
# CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_VMAC is not set

#
# Digest
#
CONFIG_CRYPTO_CRC32C=m
# CONFIG_CRYPTO_CRC32C_INTEL is not set
# CONFIG_CRYPTO_GHASH is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
# CONFIG_CRYPTO_RMD128 is not set
# CONFIG_CRYPTO_RMD160 is not set
# CONFIG_CRYPTO_RMD256 is not set
# CONFIG_CRYPTO_RMD320 is not set
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=m
CONFIG_CRYPTO_SHA512=m
# CONFIG_CRYPTO_TGR192 is not set
# CONFIG_CRYPTO_WP512 is not set

#
# Ciphers
#
CONFIG_CRYPTO_AES=m
CONFIG_CRYPTO_AES_586=m
# CONFIG_CRYPTO_ANUBIS is not set
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_BLOWFISH=m
# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_SALSA20 is not set
# CONFIG_CRYPTO_SALSA20_586 is not set
# CONFIG_CRYPTO_SEED is not set
# CONFIG_CRYPTO_SERPENT is not set
# CONFIG_CRYPTO_TEA is not set
CONFIG_CRYPTO_TWOFISH=m
CONFIG_CRYPTO_TWOFISH_COMMON=m
CONFIG_CRYPTO_TWOFISH_586=m

#
# Compression
#
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_ZLIB=m
CONFIG_CRYPTO_LZO=m

#
# Random Number Generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
CONFIG_CRYPTO_HW=y
# CONFIG_CRYPTO_DEV_PADLOCK is not set
CONFIG_CRYPTO_DEV_GEODE=m
# CONFIG_CRYPTO_DEV_HIFN_795X is not set
CONFIG_HAVE_KVM=y
CONFIG_VIRTUALIZATION=y
# CONFIG_KVM is not set
# CONFIG_VHOST_NET is not set
# CONFIG_LGUEST is not set
# CONFIG_VIRTIO_PCI is not set
# CONFIG_VIRTIO_BALLOON is not set
# CONFIG_BINARY_PRINTF is not set

#
# Library routines
#
CONFIG_BITREVERSE=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
CONFIG_GENERIC_FIND_LAST_BIT=y
CONFIG_CRC_CCITT=m
CONFIG_CRC16=y
# CONFIG_CRC_T10DIF is not set
CONFIG_CRC_ITU_T=m
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=m
CONFIG_LZO_COMPRESS=m
CONFIG_LZO_DECOMPRESS=m
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=m
CONFIG_TEXTSEARCH_BM=m
CONFIG_TEXTSEARCH_FSM=m
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
CONFIG_NLATTR=y
# CONFIG_SHM_SIGNAL is not set
# CONFIG_IOQ is not set

-- backtrace (kgdb) --
[ 3.075785] BUG: unable to handle kernel NULL pointer dereference at
00000108
[ 3.076021] IP: [<c027b525>] hmac_setkey+0x3d/0x1ac
[ 3.076021] *pde = 00000000
[ 3.076021] Oops: 0000 [#1] PREEMPT
[ 3.076021] last sysfs file:
[ 3.076021] KGDB: Waiting for remote debugger

(gdb) info locals
ipad = 0xcf1aa274 ""
opad = <value optimised out>
hash = 0x108
desc = {shash = {tfm = 0x0, flags = 0, __ctx = 0xc11e4548}, ctx =
0xc11e454b "\377"}
i = <value optimised out>
(gdb) print *ipad
$5 = 0 '\000'
(gdb) print parent->base
$7 = {crt_flags = 0, crt_u = {ablkcipher = {setkey = 0, encrypt = 0,
decrypt = 0, givencrypt = 0, givdecrypt = 0, base = 0x0, ivsize = 0,
reqsize = 0}, aead = {setkey = 0, encrypt = 0, decrypt = 0, givencrypt =
0, givdecrypt = 0, base = 0x0, ivsize = 0, authsize = 0,
reqsize = 0}, blkcipher = {iv = 0x0, setkey = 0, encrypt = 0,
decrypt = 0}, cipher = {cit_setkey = 0, cit_encrypt_one = 0,
cit_decrypt_one = 0}, hash = {init = 0, update = 0, final = 0, digest =
0, setkey = 0, digestsize = 0}, compress = {cot_compress = 0,
cot_decompress = 0}, rng = {rng_gen_random = 0, rng_reset = 0}},
exit = 0, __crt_alg = 0xcf12471c, __crt_ctx = 0xcf1aa274}
(gdb) print parent->descsize
$8 = 216
(gdb) print hash
$10 = (struct crypto_shash *) 0x108
(gdb) bt
#0 hmac_setkey (parent=0xcf1aa23c, inkey=0xc04c54a4 '\v' <repeats 20
times>, keylen=48) at crypto/hmac.c:59
#1 0xc027789d in crypto_shash_setkey (tfm=0xcf1aa23c, key=<value
optimised out>, keylen=<value optimised out>) at crypto/shash.c:61
#2 0xc02778c8 in shash_async_setkey (tfm=<value optimised out>,
key=0x108 <Address 0x108 out of bounds>, keylen=3474629444) at
crypto/shash.c:203
#3 0xc0277155 in crypto_ahash_setkey (tfm=0xcf1b5770, key=0x108
<Address 0x108 out of bounds>, keylen=<value optimised out>) at
crypto/ahash.c:172
#4 0xc0279226 in test_hash (tfm=<value optimised out>, template=<value
optimised out>, tcount=<value optimised out>) at crypto/testmgr.c:198
#5 0xc02796ca in alg_test_hash (desc=0xc042bcf0, driver=0xcf1b55a8
"hmac(sha384-generic)", type=<value optimised out>, mask=1024) at
crypto/testmgr.c:1405
#6 0xc027b276 in alg_test (driver=<value optimised out>, alg=<value
optimised out>, type=<value optimised out>, mask=1024) at
crypto/testmgr.c:2481
#7 0xc027833a in cryptomgr_test (data=0xcf1aa23c) at crypto/algboss.c:217
#8 0xc0135847 in kthread (_create=0xcf1b9e8c) at kernel/kthread.c:78
#9 0xc0102db6 in ?? () at arch/x86/kernel/entry_32.S:1051

(gdb) up


#1 0xc027789d in crypto_shash_setkey (tfm=0xcf1aa23c, key=<value
optimised out>, keylen=<value optimised out>) at crypto/shash.c:61

61 return shash->setkey(tfm, key, keylen);


(gdb) up


#2 0xc02778c8 in shash_async_setkey (tfm=<value optimised out>,
key=0x108 <Address 0x108 out of bounds>, keylen=3474629444) at
crypto/shash.c:203
203 return crypto_shash_setkey(*ctx, key, keylen);


(gdb) up


#3 0xc0277155 in crypto_ahash_setkey (tfm=0xcf1b5770, key=0x108
<Address 0x108 out of bounds>, keylen=<value optimised out>) at
crypto/ahash.c:172
172 return tfm->setkey(tfm, key, keylen);


(gdb) up


#4 0xc0279226 in test_hash (tfm=<value optimised out>, template=<value
optimised out>, tcount=<value optimised out>) at crypto/testmgr.c:198

198 ret = crypto_ahash_setkey(tfm,
template[i].key,

(gdb) info locals


algo = 0xcf124784 "hmac(sha384-generic)"


i = 0


j = 3474701796


k = <value optimised out>


temp = 3474701876


sg = {{page_link = 3239987170, offset = 0, length = 8, dma_address = 0,
dma_length = 0}, {page_link = 3223828454, offset = 3474629180, length =
3225597856, dma_address = 0, dma_length = 3474702004}, {page_link =
3223788984, offset = 3474081564, length = 3474629188,
dma_address = 3474675608, dma_length = 3225597792}, {page_link =
3474081564, offset = 3474702024, length = 3223811619, dma_address =
3474081564, dma_length = 3225597792}, {page_link = 4294967284, offset =
3474702036, length = 3223809151, dma_address = 3474675568,
dma_length = 3474702064}, {page_link = 3223788951, offset =
3474081564, length = 3474675608, dma_address = 1232, dma_length =
3474081564}, {page_link = 3225597792, offset = 3474702100, length =
3223789782, dma_address = 1024, dma_length = 3474519936}, {
page_link = 9, offset = 3474675112, length = 1232, dma_address =
3225599216, dma_length = 3474675112}}


result = '\000' <repeats 63 times>

req = 0xcf1aa41c
tresult = {completion = {done = 0, wait = {lock = {{rlock = {raw_lock =
{<No data fields>}}}}, task_list = {next = 0xcf1bbe28, prev =
0xcf1bbe28}}}, err = -1068320332}

hash_buff = <value optimised out>

xbuf = {0xcf1bf000 "Hi There", 0xcf1bc000 "", 0xcf1c2000 "", 0xcf1c3000
"\264\003", 0xcf1c1000 "", 0xcf1c0000 "", 0xcf1b3000 "modprobe: FATAL:
Could not load
/lib/modules/2.6.34-rc1.femwlan-next-20100312-dirty/modules.dep: No such
file or directory\r\n\r\r\n",
0xcf1be000 "/dev/console"}

ret = <value optimised out>

(gdb) print template

$1 = <value optimised out>



#5 0xc02796ca in alg_test_hash (desc=0xc042bcf0, driver=0xcf1b55a8
"hmac(sha384-generic)", type=<value optimised out>, mask=1024) at
crypto/testmgr.c:1405

1405 err = test_hash(tfm, desc->suite.hash.vecs,
desc->suite.hash.count);


$3 = (const struct alg_test_desc *) 0xc042bcf0



(gdb) print desc->
alg fips_allowed suite test
(gdb) print desc->alg
$4 = 0xc04c479b "hmac(sha384)"
(gdb) print desc->suite
$5 = {aead = {enc = {vecs = 0xc0533bc0, count = 4}, dec = {vecs = 0x0,
count = 0}}, cipher = {enc = {vecs = 0xc0533bc0, count = 4}, dec = {vecs
= 0x0, count = 0}}, comp = {comp = {vecs = 0xc0533bc0, count = 4},
decomp = {vecs = 0x0, count = 0}}, pcomp = {comp = {
vecs = 0xc0533bc0, count = 4}, decomp = {vecs = 0x0, count = 0}},
hash = {vecs = 0xc0533bc0, count = 4}, cprng = {vecs = 0xc0533bc0, count
= 4}}

(gdb) print desc->suite.hash
$6 = {vecs = 0xc0533bc0, count = 4}
(gdb) print desc->suite.hash.vecs
$7 = (struct hash_testvec *) 0xc0533bc0
(gdb) print desc->suite.hash.vecs->
digest key ksize np plaintext psize tap

(gdb) print desc->suite.hash.vecs->key

$8 = 0xc04c54a4 '\v' <repeats 20 times>

(gdb) print desc->suite.hash.vecs[0]->key
$9 = 0xc04c54a4 '\v' <repeats 20 times>
(gdb) print desc->suite.hash.vecs[0]
$10 = {key = 0xc04c54a4 '\v' <repeats 20 times>, plaintext = 0xc04c536d
"Hi There",
digest = 0xc04c84d0
"\257\320\071D\330H\225bk\b%\364\253F\220\177\025\371\332\333\344\020\036Ƃ\252\003L|\353Ŝ\372\352\236\251\an\336\177J\361R\350\262",
<incomplete sequence \372\234\266>, tap =
"\000\000\000\000\000\000\000", psize = 8 '\b', np = 0 '\000',
ksize = 20 '\024'}



(gdb) print desc->suit^Chash.vecs[0]



$11 = {key = 0xc04c54a4 '\v' <repeats 20 times>, plaintext = 0xc04c536d
"Hi There",


digest = 0xc04c84d0
"\257\320\071D\330H\225bk\b%\364\253F\220\177\025\371\332\333\344\020\036Ƃ\252\003L|\353Ŝ\372\352\236\251\an\336\177J\361R\350\262",
<incomplete sequence \372\234\266>, tap =
"\000\000\000\000\000\000\000", psize = 8 '\b', np = 0 '\000',
ksize = 20 '\024'}



(gdb) print "%x", desc->suite.hash.vecs[0]



$12 = {key = 0xc04c54a4 '\v' <repeats 20 times>, plaintext = 0xc04c536d
"Hi There",


digest = 0xc04c84d0
"\257\320\071D\330H\225bk\b%\364\253F\220\177\025\371\332\333\344\020\036Ƃ\252\003L|\353Ŝ\372\352\236\251\an\336\177J\361R\350\262",
<incomplete sequence \372\234\266>, tap =
"\000\000\000\000\000\000\000", psize = 8 '\b', np = 0 '\000',
ksize = 20 '\024'}



(gdb) printf "%x\n", desc->suite.hash.vecs[0]



Value can't be converted to integer.



(gdb) printf "%X\n", desc->suite.hash.vecs[0]



Value can't be converted to integer.



(gdb) printf "%x\n", (int) desc->suite.hash.vecs[0]



c04c54a4



(gdb) info locals
tfm = 0xcf1aa23c
err = <value optimised out>
(gdb) down
#4 0xc0279226 in test_hash (tfm=<value optimised out>, template=<value
optimised out>, tcount=<value optimised out>) at crypto/testmgr.c:198
198 ret = crypto_ahash_setkey(tfm,
template[i].key,
(gdb) info locals
algo = 0xcf124784 "hmac(sha384-generic)"
i = 0
j = 3474701796
k = <value optimised out>
temp = 3474701876
sg = {{page_link = 3239987170, offset = 0, length = 8, dma_address = 0,
dma_length = 0}, {page_link = 3223828454, offset = 3474629180, length =
3225597856, dma_address = 0, dma_length = 3474702004}, {page_link =
3223788984, offset = 3474081564, length = 3474629188,
dma_address = 3474675608, dma_length = 3225597792}, {page_link =
3474081564, offset = 3474702024, length = 3223811619, dma_address =
3474081564, dma_length = 3225597792}, {page_link = 4294967284, offset =
3474702036, length = 3223809151, dma_address = 3474675568,
dma_length = 3474702064}, {page_link = 3223788951, offset =
3474081564, length = 3474675608, dma_address = 1232, dma_length =
3474081564}, {page_link = 3225597792, offset = 3474702100, length =
3223789782, dma_address = 1024, dma_length = 3474519936}, {
page_link = 9, offset = 3474675112, length = 1232, dma_address =
3225599216, dma_length = 3474675112}}
result = '\000' <repeats 63 times>
req = 0xcf1aa41c
tresult = {completion = {done = 0, wait = {lock = {{rlock = {raw_lock =
{<No data fields>}}}}, task_list = {next = 0xcf1bbe28, prev =
0xcf1bbe28}}}, err = -1068320332}
hash_buff = <value optimised out>
xbuf = {0xcf1bf000 "Hi There", 0xcf1bc000 "", 0xcf1c2000 "", 0xcf1c3000
"\264\003", 0xcf1c1000 "", 0xcf1c0000 "", 0xcf1b3000 "modprobe: FATAL:
Could not load
/lib/modules/2.6.34-rc1.femwlan-next-20100312-dirty/modules.dep: No such
file or directory\r\n\r\r\n",
0xcf1be000 "/dev/console"}
ret = <value optimised out>
(gdb) print *j
$13 = -820265444
(gdb) print j
$14 = 3474701796

--- backtrace #2 ---

(gdb) bt
#0 ?? () at arch/x86/kernel/entry_32.S:861
#1 0xc0122456 in printk (fmt=0xc047cb18 "<1>BUG: Bad page map in
process %s pte:%08llx pmd:%08llx\n") at kernel/printk.c:615
#2 0xc016a51a in print_bad_pte (vma=0x1, addr=3474840817, pte=...,
page=0xc1003080) at mm/memory.c:511
#3 0xc016b0a3 in zap_pte_range (tlbp=<value optimised out>, vma=<value
optimised out>, start_addr=<value optimised out>, end_addr=4294967295,
nr_accounted=0xcf1dddf4, details=0x0) at mm/memory.c:966
#4 zap_pmd_range (tlbp=<value optimised out>, vma=<value optimised
out>, start_addr=<value optimised out>, end_addr=4294967295,
nr_accounted=0xcf1dddf4, details=0x0) at mm/memory.c:1012
#5 zap_pud_range (tlbp=<value optimised out>, vma=<value optimised
out>, start_addr=<value optimised out>, end_addr=4294967295,
nr_accounted=0xcf1dddf4, details=0x0) at mm/memory.c:1034
#6 unmap_page_range (tlbp=<value optimised out>, vma=<value optimised
out>, start_addr=<value optimised out>, end_addr=4294967295,
nr_accounted=0xcf1dddf4, details=0x0) at mm/memory.c:1062
#7 unmap_vmas (tlbp=<value optimised out>, vma=<value optimised out>,
start_addr=<value optimised out>, end_addr=4294967295,
nr_accounted=0xcf1dddf4, details=0x0) at mm/memory.c:1160
#8 0xc016e9de in exit_mmap (mm=<value optimised out>) at mm/mmap.c:2197
#9 0xc011f53b in mmput (mm=0xcf1c7c00) at kernel/fork.c:519
#10 0xc01230b2 in exit_mm (tsk=0xcf1c76c0) at kernel/exit.c:702
#11 0xc0124758 in do_exit (code=7) at kernel/exit.c:973
#12 0xc0124c73 in do_group_exit (exit_code=7) at kernel/exit.c:1086
#13 0xc012e64c in get_signal_to_deliver (info=0xcf1ddf00,
return_ka=<value optimised out>, regs=<value optimised out>, cookie=0x0)
at kernel/signal.c:1988
#14 0xc0101c74 in do_signal (regs=0xcf1ddfb4) at
arch/x86/kernel/signal.c:791
#15 0xc01023cd in do_notify_resume (regs=0x1, unused=0xcf1dc000,
thread_info_flags=3226430328) at arch/x86/kernel/signal.c:849
#16 0xc03f784c in ?? () at arch/x86/kernel/entry_32.S:678
Backtrace stopped: previous frame inner to this frame (corrupt stack?)


Attachments:
signature.asc (260.00 B)
OpenPGP digital signature

2010-03-18 17:01:44

by Pekka Enberg

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Mon, Mar 15, 2010 at 3:39 PM, <[email protected]> wrote:
> Hi,
>
> I've been trying to get Linux Kernel Crypto up&running
> on an AMD Geode LX board (Alix 2d2) but instantly
> experienced a huge amount of errors that look much like
> general memory corruption. Among them where NULL-pointer errors in
> net/core/dst.c, ath9k_skb_.*, net_skb.*, page table corruption,
> NULL-pointer errors in add_swap.* (with no swap installed at all) and
> many more. These errors could be trigger by loading tcrypt for any
> installed algorithm severeal times or by loading tcrypt without
> paramters or by compiling crypto statically into the kernel or by
> installing and loading cryptodev or ocf-linux.
>
> I've had the system configured with SLOB and all memory debugging
> enabled. All of these errors instantly disappeared when switching back
> to SLAB.

Even with CONFIG_DEBUG_SLAB enabled or with CONFIG_SLUB and
CONFIG_SLUB_DEBUG_ON?

2010-03-18 21:24:56

by michael-dev

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Pekka Enberg schrieb:
> Even with CONFIG_DEBUG_SLAB enabled or with CONFIG_SLUB and
> CONFIG_SLUB_DEBUG_ON?

no, these options have not been / are not enabled.


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkuimhkACgkQ+6sI4XSM4u1jtACfS9YfQfKZ/Pu/n62lT50xSise
RdAAmgMfVmKXPFRT2hz7bSWAMIor9zTo
=gMEL
-----END PGP SIGNATURE-----

2010-03-19 00:34:01

by Herbert Xu

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Thu, Mar 18, 2010 at 10:24:41PM +0100, [email protected] wrote:
>
> Pekka Enberg schrieb:
> > Even with CONFIG_DEBUG_SLAB enabled or with CONFIG_SLUB and
> > CONFIG_SLUB_DEBUG_ON?
>
> no, these options have not been / are not enabled.

Can you please try it with those options enabled? That will tell
us if there is some latent bug in the crypto layer that only shows
up right away under SLOB.

Thanks,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2010-05-14 14:56:23

by Adrian-Ken Rueegsegger

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

Hi,

Herbert Xu wrote:
> On Thu, Mar 18, 2010 at 10:24:41PM +0100, [email protected] wrote:
>> Pekka Enberg schrieb:
>>> Even with CONFIG_DEBUG_SLAB enabled or with CONFIG_SLUB and
>>> CONFIG_SLUB_DEBUG_ON?
>> no, these options have not been / are not enabled.
>
> Can you please try it with those options enabled? That will tell
> us if there is some latent bug in the crypto layer that only shows
> up right away under SLOB.

I was able reproduced the issue with the current crypto-2.6 tree 180ce7e...

The issue does not show up with CONFIG_DEBUG_SLAB nor CONFIG_SLUB and
CONFIG_SLUB_DEBUG_ON. It seems the issues is really related to hmac.
Loading tcrypt with modes not using hmac seem to run fine. During my
tests the system freezes eventually when doing multiple modprobes of
tcrypt like this:

modprobe tcrypt mode=100

I get multiple OOPses with a subsequent panic looking like this:

[ 409.631551] BUG: unable to handle kernel NULL pointer dereference at
00000090
[ 409.631645] IP: [<f883a278>] hmac_setkey+0x38/0x140 [hmac]
[ 409.631705] *pde = 00000000
[ 409.631757] Oops: 0000 [#1] PREEMPT DEBUG_PAGEALLOC
[ 409.631857] last sysfs file: /sys/class/power_supply/AC/online
[ 409.631891] Modules linked in: tcrypt(+) hmac netconsole loop
ide_cd_mod cdrom ide_pci_generic ehci_hcd uhci_hcd piix usbcore [last
unloaded: scsi_wait_scan]
[ 409.632019]
[ 409.632019] Pid: 5184, comm: modprobe Not tainted 2.6.33-g180ce7e #5
/Latitude D600
[ 409.632019] EIP: 0060:[<f883a278>] EFLAGS: 00010282 CPU: 0
[ 409.632019] EIP is at hmac_setkey+0x38/0x140 [hmac]
[ 409.632019] EAX: e0254734 EBX: e025476c ECX: 00000090 EDX: e0254820
[ 409.632019] ESI: 00000040 EDI: e02547c4 EBP: e1dc3cb4 ESP: e1dc3c94
[ 409.632019] DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
[ 409.632019] Process modprobe (pid: 5184, ti=e1dc2000 task=e538b000
task.ti=e1dc2000)
[ 409.632019] Stack:
[ 409.632019] e0254668 e0254820 00000010 c043a348 00000010 e538b87c
c043a348
[ 409.632019] <0> e1dc3cd8 c020f3d6 00000010 e0254734 e538b87c c04945b4
e1e47000 00000000
[ 409.632019] <0> c043a348 e1dc3ce0 c020f3fb e1dc3d00 c020eb4b 00000010
ebe26380 00000008
[ 409.632019] Call Trace:
[ 409.632019] [<c020f3d6>] ? crypto_shash_setkey+0x96/0xa0
[ 409.632019] [<c020f3fb>] ? shash_async_setkey+0xb/0x10
[ 409.632019] [<c020eb4b>] ? crypto_ahash_setkey+0x8b/0x90
[ 409.632019] [<c0211056>] ? test_hash+0x176/0x620
[ 409.632019] [<c012a754>] ? _local_bh_enable+0x24/0x80
[ 409.632019] [<c0108441>] ? native_sched_clock+0x21/0x80
[ 409.632019] [<c0186fce>] ? slob_page_alloc+0x20e/0x240
[ 409.632019] [<c018758d>] ? slob_alloc+0x10d/0x1f0
[ 409.632019] [<c0187791>] ? __kmalloc_node+0xa1/0xc0
[ 409.632019] [<c02095e1>] ? crypto_create_tfm+0x41/0xc0
[ 409.632019] [<c020a77a>] ? crypto_spawn_tfm2+0x3a/0x60
[ 409.632019] [<f883a4f6>] ? hmac_init_tfm+0x26/0x5c [hmac]
[ 409.632019] [<c0209620>] ? crypto_create_tfm+0x80/0xc0
[ 409.632019] [<c0211535>] ? alg_test_hash+0x35/0x70
[ 409.632019] [<c021320f>] ? alg_find_test+0x3f/0x70
[ 409.632019] [<c0213299>] ? alg_test+0x59/0x180
[ 409.632019] [<f8865a55>] ? do_test+0xec5/0x14ec [tcrypt]
[ 409.632019] [<f886a0c1>] ? tcrypt_mod_init+0xc1/0xce [tcrypt]
[ 409.632019] [<f886a000>] ? tcrypt_mod_init+0x0/0xce [tcrypt]
[ 409.632019] [<c0101023>] ? do_one_initcall+0x23/0x170
[ 409.632019] [<c013f7fa>] ? blocking_notifier_call_chain+0x1a/0x20
[ 409.632019] [<c0151a02>] ? sys_init_module+0xb2/0x220
[ 409.632019] [<c017c974>] ? sys_mmap_pgoff+0xe4/0xf0
[ 409.632019] [<c0102ad0>] ? sysenter_do_call+0x12/0x26
[ 409.632019] Code: 55 ec 8b 50 34 8d 4a d4 8b 72 14 8b 59 24 89 5d f0
8b 52 1c 8b 49 28 8d 10 38 f7 d2 21 d3 8d 3c 0b 8d 54 0f 07 83 e2 f8 8b
0a <8b> 11 83 c2 0f 83 e2 f8 83 c2 10 29 d4 8d 54 24 13 83 e2 f0 89
[ 409.632019] EIP: [<f883a278>] hmac_setkey+0x38/0x140 [hmac] SS:ESP
0068:e1dc3c94
[ 409.632019] CR2: 0000000000000090
[ 474.594010] BUG: soft lockup - CPU#0 stuck for 61s! [modprobe:5184]
[ 474.594010] Modules linked in: tcrypt(+) hmac netconsole loop
ide_cd_mod cdrom ide_pci_generic ehci_hcd uhci_hcd piix usbcore [last
unloaded: scsi_wait_scan]
[ 474.594010] Modules linked in: tcrypt(+) hmac netconsole loop
ide_cd_mod cdrom ide_pci_generic ehci_hcd uhci_hcd piix usbcore [last
unloaded: scsi_wait_scan]
[ 474.594010]
[ 474.594010] Pid: 5184, comm: modprobe Tainted: G D
2.6.33-g180ce7e #5 /Latitude D600
[ 474.594010] EIP: 0060:[<c01180f0>] EFLAGS: 00000246 CPU: 0
[ 474.594010] EIP is at __bad_area_nosemaphore+0x20/0x180
[ 474.594010] EAX: e538b000 EBX: 00000000 ECX: 00000000 EDX: 00000000
[ 474.594010] ESI: e1dc39f0 EDI: 00000000 EBP: e1dc39a8 ESP: e1dc38f8
[ 474.594010] DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
[ 474.594010] Process modprobe (pid: 5184, ti=e1dc2000 task=e538b000
task.ti=e1dc2000)
[ 474.594010] Stack:
[ 474.594010] c0104c8e e1dc3920 e1dc3920 00000000 e1dc3920 c0105e5f
[ 474.594010] <0> e538b000 c048dde0 e1dc3934 c0157bbd 0000193c c048dde0
00000000 e1dc394c
[ 474.594010] <0> c0104784 e1dc3980 e1dc3980 e1dc394c c012aaaa e1dc3978
c01042a2 0000006e
[ 474.594010] Call Trace:
[ 474.594010] [<c0104c8e>] ? timer_interrupt+0x1e/0x60
[ 474.594010] [<c0155be6>] ? handle_IRQ_event+0x36/0xd0
[ 474.594010] [<c0105c6d>] ? mask_and_ack_8259A+0x7d/0x110
[ 474.594010] [<c0105e5f>] ? enable_8259A_irq+0x4f/0x70
[ 474.594010] [<c0157bbd>] ? handle_level_irq+0x10d/0x130
[ 474.594010] [<c0104784>] ? handle_irq+0x34/0x60
[ 474.594010] [<c012aaaa>] ? irq_exit+0x5a/0x90
[ 474.594010] [<c01042a2>] ? do_IRQ+0x42/0xb0
[ 474.594010] [<c0102fe9>] ? common_interrupt+0x29/0x30
[ 474.594010] [<c0118262>] ? bad_area_nosemaphore+0x12/0x20
[ 474.594010] [<c011862c>] ? do_page_fault+0x23c/0x2e0
[ 474.594010] [<c01042a2>] ? do_IRQ+0x42/0xb0
[ 474.594010] [<c01183f0>] ? do_page_fault+0x0/0x2e0
[ 474.594010] [<c03838fe>] ? error_code+0x5e/0x64
[ 474.594010] [<c0150000>] ? load_module+0x280/0x1890
[ 474.594010] [<c01183f0>] ? do_page_fault+0x0/0x2e0
[ 474.594010] [<c015928c>] ? __rcu_process_callbacks+0xdc/0x410
[ 474.594010] [<c01595d2>] ? rcu_process_callbacks+0x12/0x30
[ 474.594010] [<c012a827>] ? __do_softirq+0x77/0x100
[ 474.594010] [<c0105c5b>] ? mask_and_ack_8259A+0x6b/0x110
[ 474.594010] [<c0105e5f>] ? enable_8259A_irq+0x4f/0x70
[ 474.594010] [<c012a8dd>] ? do_softirq+0x2d/0x40
[ 474.594010] [<c012aabd>] ? irq_exit+0x6d/0x90
[ 474.594010] [<c01042a2>] ? do_IRQ+0x42/0xb0
[ 474.594010] [<c0102fe9>] ? common_interrupt+0x29/0x30
[ 474.594010] [<c0120000>] ? proc_sched_show_task+0x1f0/0x600
[ 474.594010] [<c010571b>] ? oops_end+0x4b/0xb0
[ 474.594010] [<c011802e>] ? no_context+0xbe/0x160
[ 474.594010] [<c011811f>] ? __bad_area_nosemaphore+0x4f/0x180
[ 474.594010] [<c0287a53>] ? extract_buf+0x73/0xc0
[ 474.594010] [<c0108441>] ? native_sched_clock+0x21/0x80
[ 474.594010] [<c0108441>] ? native_sched_clock+0x21/0x80
[ 474.594010] [<c01182aa>] ? bad_area+0x3a/0x50
[ 474.594010] [<c0118685>] ? do_page_fault+0x295/0x2e0
[ 474.594010] [<c01183f0>] ? do_page_fault+0x0/0x2e0
[ 474.594010] [<c03838fe>] ? error_code+0x5e/0x64
[ 474.594010] [<c018007b>] ? pcpu_get_vm_areas+0x4cb/0x500
[ 474.594010] [<c01183f0>] ? do_page_fault+0x0/0x2e0
[ 474.594010] [<f883a278>] ? hmac_setkey+0x38/0x140 [hmac]
[ 474.594010] [<c020f3d6>] ? crypto_shash_setkey+0x96/0xa0
[ 474.594010] [<c020f3fb>] ? shash_async_setkey+0xb/0x10
[ 474.594010] [<c020eb4b>] ? crypto_ahash_setkey+0x8b/0x90
[ 474.594010] [<c0211056>] ? test_hash+0x176/0x620
[ 474.594010] [<c012a754>] ? _local_bh_enable+0x24/0x80
[ 474.594010] [<c0108441>] ? native_sched_clock+0x21/0x80
[ 474.594010] [<c018758d>] ? slob_alloc+0x10d/0x1f0
[ 474.594010] [<c0187791>] ? __kmalloc_node+0xa1/0xc0
[ 474.594010] [<c02095e1>] ? crypto_create_tfm+0x41/0xc0
[ 474.594010] [<c020a77a>] ? crypto_spawn_tfm2+0x3a/0x60
[ 474.594010] [<f883a4f6>] ? hmac_init_tfm+0x26/0x5c [hmac]
[ 474.594010] [<c0209620>] ? crypto_create_tfm+0x80/0xc0
[ 474.594010] [<c0211535>] ? alg_test_hash+0x35/0x70
[ 474.594010] [<c021320f>] ? alg_find_test+0x3f/0x70
[ 474.594010] [<c0213299>] ? alg_test+0x59/0x180
[ 474.594010] [<f8865a55>] ? do_test+0xec5/0x14ec [tcrypt]
[ 474.594010] [<f886a0c1>] ? tcrypt_mod_init+0xc1/0xce [tcrypt]
[ 474.594010] [<f886a000>] ? tcrypt_mod_init+0x0/0xce [tcrypt]
[ 474.594010] [<c0101023>] ? do_one_initcall+0x23/0x170
[ 474.594010] [<c013f7fa>] ? blocking_notifier_call_chain+0x1a/0x20
[ 474.594010] [<c0151a02>] ? sys_init_module+0xb2/0x220
[ 474.594010] [<c017c974>] ? sys_mmap_pgoff+0xe4/0xf0
[ 474.594010] [<c0102ad0>] ? sysenter_do_call+0x12/0x26
[ 474.594010] Code: 00 00 00 00 8d bc 27 00 00 00 00 55 89 e5 81 ec b0
00 00 00 89 75 f8 89 c6 a1 98 80 48 c0 f6 c2 04 89 5d f4 89 cb 89 7d fc
89 d7 <89> 85 70 ff ff ff 74 20 fb 89 f0 e8 80 fc ff ff 74 24 8b
[ 474.594010] Call Trace:
[ 474.594010] [<c0104c8e>] ? timer_interrupt+0x1e/0x60
[ 474.594010] [<c0155be6>] ? handle_IRQ_event+0x36/0xd0
[ 474.594010] [<c0105c6d>] ? mask_and_ack_8259A+0x7d/0x110
[ 474.594010] [<c0105e5f>] ? enable_8259A_irq+0x4f/0x70
[ 474.594010] [<c0157bbd>] ? handle_level_irq+0x10d/0x130
[ 474.594010] [<c0104784>] ? handle_irq+0x34/0x60
[ 474.594010] [<c012aaaa>] ? irq_exit+0x5a/0x90
[ 474.594010] [<c01042a2>] ? do_IRQ+0x42/0xb0
[ 474.594010] [<c0102fe9>] ? common_interrupt+0x29/0x30
[ 474.594010] [<c0118262>] bad_area_nosemaphore+0x12/0x20
[ 474.594010] [<c011862c>] do_page_fault+0x23c/0x2e0
[ 474.594010] [<c01042a2>] ? do_IRQ+0x42/0xb0
[ 474.594010] [<c01183f0>] ? do_page_fault+0x0/0x2e0
[ 474.594010] [<c03838fe>] error_code+0x5e/0x64
[ 474.594010] [<c0150000>] ? load_module+0x280/0x1890
[ 474.594010] [<c01183f0>] ? do_page_fault+0x0/0x2e0
[ 474.594010] [<c015928c>] ? __rcu_process_callbacks+0xdc/0x410
[ 474.594010] [<c01595d2>] rcu_process_callbacks+0x12/0x30
[ 474.594010] [<c012a827>] __do_softirq+0x77/0x100
[ 474.594010] [<c0105c5b>] ? mask_and_ack_8259A+0x6b/0x110
[ 474.594010] [<c0105e5f>] ? enable_8259A_irq+0x4f/0x70
[ 474.594010] [<c012a8dd>] do_softirq+0x2d/0x40
[ 474.594010] [<c012aabd>] irq_exit+0x6d/0x90
[ 474.594010] [<c01042a2>] do_IRQ+0x42/0xb0
[ 474.594010] [<c0102fe9>] common_interrupt+0x29/0x30
[ 474.594010] [<c0120000>] ? proc_sched_show_task+0x1f0/0x600
[ 474.594010] [<c010571b>] ? oops_end+0x4b/0xb0
[ 474.594010] [<c011802e>] no_context+0xbe/0x160
[ 474.594010] [<c011811f>] __bad_area_nosemaphore+0x4f/0x180
[ 474.594010] [<c0287a53>] ? extract_buf+0x73/0xc0
[ 474.594010] [<c0108441>] ? native_sched_clock+0x21/0x80
[ 474.594010] [<c0108441>] ? native_sched_clock+0x21/0x80
[ 474.594010] [<c01182aa>] bad_area+0x3a/0x50
[ 474.594010] [<c0118685>] do_page_fault+0x295/0x2e0
[ 474.594010] [<c01183f0>] ? do_page_fault+0x0/0x2e0
[ 474.594010] [<c03838fe>] error_code+0x5e/0x64
[ 474.594010] [<c018007b>] ? pcpu_get_vm_areas+0x4cb/0x500
[ 474.594010] [<c01183f0>] ? do_page_fault+0x0/0x2e0
[ 474.594010] [<f883a278>] ? hmac_setkey+0x38/0x140 [hmac]
[ 474.594010] [<c020f3d6>] crypto_shash_setkey+0x96/0xa0
[ 474.594010] [<c020f3fb>] shash_async_setkey+0xb/0x10
[ 474.594010] [<c020eb4b>] crypto_ahash_setkey+0x8b/0x90
[ 474.594010] [<c0211056>] test_hash+0x176/0x620
[ 474.594010] [<c012a754>] ? _local_bh_enable+0x24/0x80
[ 474.594010] [<c0108441>] ? native_sched_clock+0x21/0x80
[ 474.594010] [<c0186fce>] ? slob_page_alloc+0x20e/0x240
[ 474.594010] [<c018758d>] ? slob_alloc+0x10d/0x1f0
[ 474.594010] [<c0187791>] ? __kmalloc_node+0xa1/0xc0
[ 474.594010] [<c02095e1>] ? crypto_create_tfm+0x41/0xc0
[ 474.594010] [<c020a77a>] ? crypto_spawn_tfm2+0x3a/0x60
[ 474.594010] [<f883a4f6>] ? hmac_init_tfm+0x26/0x5c [hmac]
[ 474.594010] [<c0209620>] ? crypto_create_tfm+0x80/0xc0
[ 474.594010] [<c0211535>] alg_test_hash+0x35/0x70
[ 474.594010] [<c021320f>] ? alg_find_test+0x3f/0x70
[ 474.594010] [<c0213299>] alg_test+0x59/0x180
[ 474.594010] [<f8865a55>] do_test+0xec5/0x14ec [tcrypt]
[ 474.594010] [<f886a0c1>] tcrypt_mod_init+0xc1/0xce [tcrypt]
[ 474.594010] [<f886a000>] ? tcrypt_mod_init+0x0/0xce [tcrypt]
[ 474.594010] [<c0101023>] do_one_initcall+0x23/0x170
[ 474.594010] [<c013f7fa>] ? blocking_notifier_call_chain+0x1a/0x20
[ 474.594010] [<c0151a02>] sys_init_module+0xb2/0x220
[ 474.594010] [<c0102ad0>] sysenter_do_call+0x12/0x26
[ 474.594010] Kernel panic - not syncing: softlockup: hung tasks
[ 474.594010] Pid: 5184, comm: modprobe Tainted: G D
2.6.33-g180ce7e #5
[ 474.594010] Call Trace:
[ 474.594010] [<c0381525>] ? printk+0x18/0x1b
[ 474.594010] [<c0381452>] panic+0x4d/0x108
[ 474.594010] [<c015552e>] softlockup_tick+0x14e/0x1a0
[ 474.594010] [<c0130247>] run_local_timers+0x17/0x20
[ 474.594010] [<c013027e>] update_process_times+0x2e/0x70
[ 474.594010] [<c0148c4b>] tick_sched_timer+0x5b/0xb0
[ 474.594010] [<c013df0a>] ? __remove_hrtimer+0x2a/0x90
[ 474.594010] [<c0148bf0>] ? tick_sched_timer+0x0/0xb0
[ 474.594010] [<c013e070>] __run_hrtimer+0x50/0x120
[ 474.594010] [<c013e3d1>] hrtimer_interrupt+0x111/0x2f0
[ 474.594010] [<c0104c8e>] timer_interrupt+0x1e/0x60
[ 474.594010] [<c0155be6>] handle_IRQ_event+0x36/0xd0
[ 474.594010] [<c0105c6d>] ? mask_and_ack_8259A+0x7d/0x110
[ 474.594010] [<c0157b2d>] handle_level_irq+0x7d/0x130
[ 474.594010] [<c0104784>] handle_irq+0x34/0x60
[ 474.594010] [<c0104299>] do_IRQ+0x39/0xb0
[ 474.594010] [<c01487b7>] ? tick_program_event+0x17/0x20
[ 474.594010] [<c013e464>] ? hrtimer_interrupt+0x1a4/0x2f0
[ 474.594010] [<c0225720>] ? search_extable+0x30/0x40
[ 474.594010] [<c0102fe9>] common_interrupt+0x29/0x30
[ 474.594010] [<c01180f0>] ? __bad_area_nosemaphore+0x20/0x180
[ 474.594010] [<c0104c8e>] ? timer_interrupt+0x1e/0x60
[ 474.594010] [<c0155be6>] ? handle_IRQ_event+0x36/0xd0
[ 474.594010] [<c0105c6d>] ? mask_and_ack_8259A+0x7d/0x110
[ 474.594010] [<c0105e5f>] ? enable_8259A_irq+0x4f/0x70
[ 474.594010] [<c0157bbd>] ? handle_level_irq+0x10d/0x130
[ 474.594010] [<c0104784>] ? handle_irq+0x34/0x60
[ 474.594010] [<c012aaaa>] ? irq_exit+0x5a/0x90
[ 474.594010] [<c01042a2>] ? do_IRQ+0x42/0xb0
[ 474.594010] [<c0102fe9>] ? common_interrupt+0x29/0x30
[ 474.594010] [<c0118262>] bad_area_nosemaphore+0x12/0x20
[ 474.594010] [<c011862c>] do_page_fault+0x23c/0x2e0
[ 474.594010] [<c01042a2>] ? do_IRQ+0x42/0xb0
[ 474.594010] [<c01183f0>] ? do_page_fault+0x0/0x2e0
[ 474.594010] [<c03838fe>] error_code+0x5e/0x64
[ 474.594010] [<c0150000>] ? load_module+0x280/0x1890
[ 474.594010] [<c01183f0>] ? do_page_fault+0x0/0x2e0
[ 474.594010] [<c015928c>] ? __rcu_process_callbacks+0xdc/0x410
[ 474.594010] [<c01595d2>] rcu_process_callbacks+0x12/0x30
[ 474.594010] [<c012a827>] __do_softirq+0x77/0x100
[ 474.594010] [<c0105c5b>] ? mask_and_ack_8259A+0x6b/0x110
[ 474.594010] [<c0105e5f>] ? enable_8259A_irq+0x4f/0x70
[ 474.594010] [<c012a8dd>] do_softirq+0x2d/0x40
[ 474.594010] [<c012aabd>] irq_exit+0x6d/0x90
[ 474.594010] [<c01042a2>] do_IRQ+0x42/0xb0
[ 474.594010] [<c0102fe9>] common_interrupt+0x29/0x30
[ 474.594010] [<c0120000>] ? proc_sched_show_task+0x1f0/0x600
[ 474.594010] [<c010571b>] ? oops_end+0x4b/0xb0
[ 474.594010] [<c011802e>] no_context+0xbe/0x160
[ 474.594010] [<c011811f>] __bad_area_nosemaphore+0x4f/0x180
[ 474.594010] [<c0287a53>] ? extract_buf+0x73/0xc0
[ 474.594010] [<c0108441>] ? native_sched_clock+0x21/0x80
[ 474.594010] [<c0108441>] ? native_sched_clock+0x21/0x80
[ 474.594010] [<c01182aa>] bad_area+0x3a/0x50
[ 474.594010] [<c0118685>] do_page_fault+0x295/0x2e0
[ 474.594010] [<c01183f0>] ? do_page_fault+0x0/0x2e0
[ 474.594010] [<c03838fe>] error_code+0x5e/0x64
[ 474.594010] [<c018007b>] ? pcpu_get_vm_areas+0x4cb/0x500
[ 474.594010] [<c01183f0>] ? do_page_fault+0x0/0x2e0
[ 474.594010] [<f883a278>] ? hmac_setkey+0x38/0x140 [hmac]
[ 474.594010] [<c020f3d6>] crypto_shash_setkey+0x96/0xa0
[ 474.594010] [<c020eb4b>] crypto_ahash_setkey+0x8b/0x90
[ 474.594010] [<c0211056>] test_hash+0x176/0x620
[ 474.594010] [<c012a754>] ? _local_bh_enable+0x24/0x80
[ 474.594010] [<c0108441>] ? native_sched_clock+0x21/0x80
[ 474.594010] [<c0186fce>] ? slob_page_alloc+0x20e/0x240
[ 474.594010] [<c018758d>] ? slob_alloc+0x10d/0x1f0

The offending line (hmac_setkey+0x38/0x140) in crypto/hmac.c is:

(gdb) list *(hmac_setkey+0x38)
0x278 is in hmac_setkey
(/home/ken/projects/kernel/crypto-2.6/crypto/hmac.c:59).
54
crypto_tfm_ctx_alignment());
55 struct crypto_shash *hash = ctx->hash;
56 struct {
57 struct shash_desc shash;
58 char ctx[crypto_shash_descsize(hash)];
59 } desc;
60 unsigned int i;
61
62 desc.shash.tfm = hash;
63 desc.shash.flags = crypto_shash_get_flags(parent) &
(gdb)

Regards,
Adrian

2010-05-17 16:17:14

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Fri, Mar 19, 2010 at 02:33, Herbert Xu <[email protected]> wrote:
> On Thu, Mar 18, 2010 at 10:24:41PM +0100, [email protected] wrote:
>>
>> Pekka Enberg schrieb:
>> > Even with CONFIG_DEBUG_SLAB enabled or with CONFIG_SLUB and
>> > CONFIG_SLUB_DEBUG_ON?
>>
>> no, these options have not been / are not enabled.
>
> Can you please try it with those options enabled? That will tell
> us if there is some latent bug in the crypto layer that only shows
> up right away under SLOB.

After seeing a posting from Nemoto-san on the linux-mips list (should
show up soon on
http://www.linux-mips.org/archives/linux-mips/2010-05/threads.html),
I'm wondering if these defaults are the culprit;

mm/slab.c:#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
mm/slob.c:#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long)
mm/slub.c:#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)

Note that some platforms override this.

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2010-05-17 21:50:06

by Adrian-Ken Rueegsegger

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

Geert Uytterhoeven wrote:
> On Fri, Mar 19, 2010 at 02:33, Herbert Xu <[email protected]> wrote:
>> On Thu, Mar 18, 2010 at 10:24:41PM +0100, [email protected] wrote:
>>> Pekka Enberg schrieb:
>>>> Even with CONFIG_DEBUG_SLAB enabled or with CONFIG_SLUB and
>>>> CONFIG_SLUB_DEBUG_ON?
>>> no, these options have not been / are not enabled.
>> Can you please try it with those options enabled? That will tell
>> us if there is some latent bug in the crypto layer that only shows
>> up right away under SLOB.
>
> After seeing a posting from Nemoto-san on the linux-mips list (should
> show up soon on
> http://www.linux-mips.org/archives/linux-mips/2010-05/threads.html),
> I'm wondering if these defaults are the culprit;
>
> mm/slab.c:#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
> mm/slob.c:#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long)
> mm/slub.c:#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)

Just a quick note: I changed this line in mm/slob.c to (unsigned long
long) and was able to load tcrypt without the kernel oopsing or
panic'ing. When running all test via

modprobe tcrypt

the tests seem to pass fine judging by /proc/crypto. Nevertheless module
insertion fails (as expected) but does not return EAGAIN but EMULTIHOP
instead...

Regards,
Adrian

2010-05-17 22:37:49

by Matt Mackall

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Mon, 2010-05-17 at 23:50 +0200, Adrian-Ken Rueegsegger wrote:
> Geert Uytterhoeven wrote:
> > On Fri, Mar 19, 2010 at 02:33, Herbert Xu <[email protected]> wrote:
> >> On Thu, Mar 18, 2010 at 10:24:41PM +0100, [email protected] wrote:
> >>> Pekka Enberg schrieb:
> >>>> Even with CONFIG_DEBUG_SLAB enabled or with CONFIG_SLUB and
> >>>> CONFIG_SLUB_DEBUG_ON?
> >>> no, these options have not been / are not enabled.
> >> Can you please try it with those options enabled? That will tell
> >> us if there is some latent bug in the crypto layer that only shows
> >> up right away under SLOB.
> >
> > After seeing a posting from Nemoto-san on the linux-mips list (should
> > show up soon on
> > http://www.linux-mips.org/archives/linux-mips/2010-05/threads.html),
> > I'm wondering if these defaults are the culprit;
> >
> > mm/slab.c:#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
> > mm/slob.c:#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long)
> > mm/slub.c:#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)

Seems the target here is x86, which has no DMA or other alignment
constraints.

> Just a quick note: I changed this line in mm/slob.c to (unsigned long
> long) and was able to load tcrypt without the kernel oopsing or
> panic'ing. When running all test via
>
> modprobe tcrypt

Hmmm, sounds like something in crypto has a bogus alignment/padding
expectation. Surprised it wasn't caught by SLAB redzoning though.
Perhaps we can 'bisect' the test suite to narrow it down to a particular
test. Alternately, we can tweak SLAB to offset buffers by two bytes and
see what breaks.

Ages ago, I had a simple redzoning patch for SLOB, but I never submitted
it: I wrote it to catch bugs in SLOB, not bugs in SLOB users.

--
Mathematics is the supreme nostalgia of our time.

2010-05-18 08:27:49

by Adrian-Ken Rueegsegger

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

Matt Mackall schrieb:
> On Mon, 2010-05-17 at 23:50 +0200, Adrian-Ken Rueegsegger wrote:
>> Geert Uytterhoeven wrote:
>>> On Fri, Mar 19, 2010 at 02:33, Herbert Xu <[email protected]> wrote:
>>>> On Thu, Mar 18, 2010 at 10:24:41PM +0100, [email protected] wrote:
>>>>> Pekka Enberg schrieb:
>>>>>> Even with CONFIG_DEBUG_SLAB enabled or with CONFIG_SLUB and
>>>>>> CONFIG_SLUB_DEBUG_ON?
>>>>> no, these options have not been / are not enabled.
>>>> Can you please try it with those options enabled? That will tell
>>>> us if there is some latent bug in the crypto layer that only shows
>>>> up right away under SLOB.
>>> After seeing a posting from Nemoto-san on the linux-mips list (should
>>> show up soon on
>>> http://www.linux-mips.org/archives/linux-mips/2010-05/threads.html),
>>> I'm wondering if these defaults are the culprit;
>>>
>>> mm/slab.c:#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
>>> mm/slob.c:#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long)
>>> mm/slub.c:#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
>
> Seems the target here is x86, which has no DMA or other alignment
> constraints.
>
>> Just a quick note: I changed this line in mm/slob.c to (unsigned long
>> long) and was able to load tcrypt without the kernel oopsing or
>> panic'ing. When running all test via
>>
>> modprobe tcrypt
>
> Hmmm, sounds like something in crypto has a bogus alignment/padding
> expectation. Surprised it wasn't caught by SLAB redzoning though.
> Perhaps we can 'bisect' the test suite to narrow it down to a particular
> test. Alternately, we can tweak SLAB to offset buffers by two bytes and
> see what breaks.

As noted in my other mail [1] it seems like the HMAC tests trigger these
errors.

Regards,
Adrian

[1] - http://lkml.org/lkml/2010/5/14/199

2010-05-18 10:27:38

by Herbert Xu

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Tue, May 18, 2010 at 10:17:35AM +0200, Adrian-Ken Rueegsegger wrote:
>
> As noted in my other mail [1] it seems like the HMAC tests trigger these
> errors.

Thanks for all the detective work!

I think the problem is this changeset:

commit 6eb7228421c01ba48a6a88a7a5b3e71cfb70d4a9
Author: Herbert Xu <[email protected]>
Date: Tue Jan 8 17:16:44 2008 +1100

[CRYPTO] api: Set default CRYPTO_MINALIGN to unsigned long long

Thanks to David Miller for pointing out that the SLAB (or SLOB/SLUB)
cache uses the alignment of unsigned long long if the architecture
kmalloc/slab alignment macros are not defined.

This patch changes the CRYPTO_MINALIGN so that it uses the same default
value.

Signed-off-by: Herbert Xu <[email protected]>

diff --git a/include/linux/crypto.h b/include/linux/crypto.h
index 0aba104..5e02d1b 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
@@ -90,13 +90,11 @@
#define CRYPTO_MINALIGN ARCH_KMALLOC_MINALIGN
#elif defined(ARCH_SLAB_MINALIGN)
#define CRYPTO_MINALIGN ARCH_SLAB_MINALIGN
+#else
+#define CRYPTO_MINALIGN __alignof__(unsigned long long)
#endif

-#ifdef CRYPTO_MINALIGN
#define CRYPTO_MINALIGN_ATTR __attribute__ ((__aligned__(CRYPTO_MINALIGN)))
-#else
-#define CRYPTO_MINALIGN_ATTR
-#endif

struct scatterlist;
struct crypto_ablkcipher;

So evidently the assumption made in this change does not work on
SLOB since it only guarantees __alignof__(unsigned long).

I think the simplest fix is to revert this changeset.

Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2010-05-18 14:02:43

by Pekka Enberg

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

Herbert Xu wrote:
> On Tue, May 18, 2010 at 10:17:35AM +0200, Adrian-Ken Rueegsegger wrote:
>> As noted in my other mail [1] it seems like the HMAC tests trigger these
>> errors.
>
> Thanks for all the detective work!
>
> I think the problem is this changeset:
>
> commit 6eb7228421c01ba48a6a88a7a5b3e71cfb70d4a9
> Author: Herbert Xu <[email protected]>
> Date: Tue Jan 8 17:16:44 2008 +1100
>
> [CRYPTO] api: Set default CRYPTO_MINALIGN to unsigned long long
>
> Thanks to David Miller for pointing out that the SLAB (or SLOB/SLUB)
> cache uses the alignment of unsigned long long if the architecture
> kmalloc/slab alignment macros are not defined.
>
> This patch changes the CRYPTO_MINALIGN so that it uses the same default
> value.
>
> Signed-off-by: Herbert Xu <[email protected]>
>
> diff --git a/include/linux/crypto.h b/include/linux/crypto.h
> index 0aba104..5e02d1b 100644
> --- a/include/linux/crypto.h
> +++ b/include/linux/crypto.h
> @@ -90,13 +90,11 @@
> #define CRYPTO_MINALIGN ARCH_KMALLOC_MINALIGN
> #elif defined(ARCH_SLAB_MINALIGN)
> #define CRYPTO_MINALIGN ARCH_SLAB_MINALIGN
> +#else
> +#define CRYPTO_MINALIGN __alignof__(unsigned long long)
> #endif
>
> -#ifdef CRYPTO_MINALIGN
> #define CRYPTO_MINALIGN_ATTR __attribute__ ((__aligned__(CRYPTO_MINALIGN)))
> -#else
> -#define CRYPTO_MINALIGN_ATTR
> -#endif
>
> struct scatterlist;
> struct crypto_ablkcipher;
>
> So evidently the assumption made in this change does not work on
> SLOB since it only guarantees __alignof__(unsigned long).
>
> I think the simplest fix is to revert this changeset.

Sounds good to me.

Acked-by: Pekka Enberg <[email protected]>

Pekka

2010-05-18 19:06:29

by Matt Mackall

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Tue, 2010-05-18 at 20:27 +1000, Herbert Xu wrote:
> On Tue, May 18, 2010 at 10:17:35AM +0200, Adrian-Ken Rueegsegger wrote:
> >
> > As noted in my other mail [1] it seems like the HMAC tests trigger these
> > errors.
>
> Thanks for all the detective work!
>
> I think the problem is this changeset:
>
> commit 6eb7228421c01ba48a6a88a7a5b3e71cfb70d4a9
> Author: Herbert Xu <[email protected]>
> Date: Tue Jan 8 17:16:44 2008 +1100
>
> [CRYPTO] api: Set default CRYPTO_MINALIGN to unsigned long long
>
> Thanks to David Miller for pointing out that the SLAB (or SLOB/SLUB)
> cache uses the alignment of unsigned long long if the architecture
> kmalloc/slab alignment macros are not defined.
>
> This patch changes the CRYPTO_MINALIGN so that it uses the same default
> value.
>
> Signed-off-by: Herbert Xu <[email protected]>
>
> diff --git a/include/linux/crypto.h b/include/linux/crypto.h
> index 0aba104..5e02d1b 100644
> --- a/include/linux/crypto.h
> +++ b/include/linux/crypto.h
> @@ -90,13 +90,11 @@
> #define CRYPTO_MINALIGN ARCH_KMALLOC_MINALIGN
> #elif defined(ARCH_SLAB_MINALIGN)
> #define CRYPTO_MINALIGN ARCH_SLAB_MINALIGN
> +#else
> +#define CRYPTO_MINALIGN __alignof__(unsigned long long)
> #endif
>
> -#ifdef CRYPTO_MINALIGN
> #define CRYPTO_MINALIGN_ATTR __attribute__ ((__aligned__(CRYPTO_MINALIGN)))
> -#else
> -#define CRYPTO_MINALIGN_ATTR
> -#endif
>
> struct scatterlist;
> struct crypto_ablkcipher;
>
> So evidently the assumption made in this change does not work on
> SLOB since it only guarantees __alignof__(unsigned long).

Bingo. Feel free to stick this on your revert:

Acked-by: Matt Mackall <[email protected]>

Looks like we should ensure that ARCH_KMALLOC_MINALIGN is always
defined.

--
Mathematics is the supreme nostalgia of our time.

2010-05-18 19:25:06

by David Miller

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

From: Herbert Xu <[email protected]>
Date: Tue, 18 May 2010 20:27:01 +1000

> I think the simplest fix is to revert this changeset.

If you revert then you'll break sparc.

Sparc needs long long alignment, so it's SLOB that needs to
change if it isn't providing at least that much alignment
by default.

2010-05-18 19:32:58

by Adrian-Ken Rueegsegger

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

Herbert Xu wrote:
> On Tue, May 18, 2010 at 10:17:35AM +0200, Adrian-Ken Rueegsegger wrote:
>> As noted in my other mail [1] it seems like the HMAC tests trigger these
>> errors.
>
> Thanks for all the detective work!
>
> I think the problem is this changeset:
>
> commit 6eb7228421c01ba48a6a88a7a5b3e71cfb70d4a9
> Author: Herbert Xu <[email protected]>
> Date: Tue Jan 8 17:16:44 2008 +1100
>
> [CRYPTO] api: Set default CRYPTO_MINALIGN to unsigned long long
>
> Thanks to David Miller for pointing out that the SLAB (or SLOB/SLUB)
> cache uses the alignment of unsigned long long if the architecture
> kmalloc/slab alignment macros are not defined.
>
> This patch changes the CRYPTO_MINALIGN so that it uses the same default
> value.
>
> Signed-off-by: Herbert Xu <[email protected]>
>
> diff --git a/include/linux/crypto.h b/include/linux/crypto.h
> index 0aba104..5e02d1b 100644
> --- a/include/linux/crypto.h
> +++ b/include/linux/crypto.h
> @@ -90,13 +90,11 @@
> #define CRYPTO_MINALIGN ARCH_KMALLOC_MINALIGN
> #elif defined(ARCH_SLAB_MINALIGN)
> #define CRYPTO_MINALIGN ARCH_SLAB_MINALIGN
> +#else
> +#define CRYPTO_MINALIGN __alignof__(unsigned long long)
> #endif
>
> -#ifdef CRYPTO_MINALIGN
> #define CRYPTO_MINALIGN_ATTR __attribute__ ((__aligned__(CRYPTO_MINALIGN)))
> -#else
> -#define CRYPTO_MINALIGN_ATTR
> -#endif
>
> struct scatterlist;
> struct crypto_ablkcipher;
>
> So evidently the assumption made in this change does not work on
> SLOB since it only guarantees __alignof__(unsigned long).
>
> I think the simplest fix is to revert this changeset.

When doing the revert it is necessary to either have
ARCH_KMALLOC_MINALIGN defined or explicitly define CRYPTO_MINALIGN in
the case where it is not. Otherwise shash compilation fails because it
needs CRYPTO_MINALIGN.

Regards,
Adrian

2010-05-18 19:33:59

by Matt Mackall

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Tue, 2010-05-18 at 12:25 -0700, David Miller wrote:
> From: Herbert Xu <[email protected]>
> Date: Tue, 18 May 2010 20:27:01 +1000
>
> > I think the simplest fix is to revert this changeset.
>
> If you revert then you'll break sparc.
>
> Sparc needs long long alignment, so it's SLOB that needs to
> change if it isn't providing at least that much alignment
> by default.

SLOB honors ARCH_KMALLOC_MINALIGN. If your arch has alignment
requirements, I recommend you set it.

--
Mathematics is the supreme nostalgia of our time.

2010-05-18 20:59:37

by David Miller

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

From: Matt Mackall <[email protected]>
Date: Tue, 18 May 2010 14:33:55 -0500

> SLOB honors ARCH_KMALLOC_MINALIGN. If your arch has alignment
> requirements, I recommend you set it.

I recommend that the alignment provided by the allocator is not
determined by which allocator I happen to have enabled.

The values and ifdef'ery should be identical in all of our
allocators.

2010-05-18 21:15:50

by Pekka Enberg

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

Hi David,

On Tue, May 18, 2010 at 11:59 PM, David Miller <[email protected]> wrote:
> From: Matt Mackall <[email protected]>
> Date: Tue, 18 May 2010 14:33:55 -0500
>
>> SLOB honors ARCH_KMALLOC_MINALIGN. If your arch has alignment
>> requirements, I recommend you set it.
>
> I recommend that the alignment provided by the allocator is not
> determined by which allocator I happen to have enabled.
>
> The values and ifdef'ery should be identical in all of our
> allocators.

Why? It doesn't make much sense for SLOB, which tries to be as space
efficient as possible, as a default. If things break on sparc, it
really needs to set ARCH_KMALLOC_MINALIGN as slab default alignment is
not something you really want to depend on.

Pekka

2010-05-18 21:20:13

by David Miller

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

From: Pekka Enberg <[email protected]>
Date: Wed, 19 May 2010 00:15:46 +0300

> On Tue, May 18, 2010 at 11:59 PM, David Miller <[email protected]> wrote:
>> From: Matt Mackall <[email protected]>
>> Date: Tue, 18 May 2010 14:33:55 -0500
>>
>>> SLOB honors ARCH_KMALLOC_MINALIGN. If your arch has alignment
>>> requirements, I recommend you set it.
>>
>> I recommend that the alignment provided by the allocator is not
>> determined by which allocator I happen to have enabled.
>>
>> The values and ifdef'ery should be identical in all of our
>> allocators.
>
> Why? It doesn't make much sense for SLOB, which tries to be as space
> efficient as possible, as a default. If things break on sparc, it
> really needs to set ARCH_KMALLOC_MINALIGN as slab default alignment is
> not something you really want to depend on.

I think it does make sense to expect that, whatever my architecture
defines or does not define, I can expect the allocators to provide the
same minimum alignment guarentee. Otherwise it is no guarantee at all.

It's already obvious from these reports that such dependencies do
exist.

I'll add the define for sparc, but saying "sparc's fault" is bogus
because I defined what was necessary to get SLAB/SLUB to provide the
necessary alignment. SLOB pays for choosing not to use the same
calculations for minimum alignment as the other allocators, and
therefore pays for being different in this regard.

And in fact I do know that the ifdef'ery in SLAB/SLUB is derived from
a change long ago that was specifically added to handle platforms like
sparc.

So one of two things should happen:

1) SLOB conforms to SLAB/SLUB in it's test

2) SLAB/SLUB conforms to SLOB in it's test

And yes this is an either-or, you can't say they are both valid.

2010-05-18 22:36:08

by Paul Mundt

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Tue, May 18, 2010 at 02:20:21PM -0700, David Miller wrote:
> From: Pekka Enberg <[email protected]>
> Date: Wed, 19 May 2010 00:15:46 +0300
>
> > On Tue, May 18, 2010 at 11:59 PM, David Miller <[email protected]> wrote:
> >> From: Matt Mackall <[email protected]>
> >> Date: Tue, 18 May 2010 14:33:55 -0500
> >>
> >>> SLOB honors ARCH_KMALLOC_MINALIGN. If your arch has alignment
> >>> requirements, I recommend you set it.
> >>
> >> I recommend that the alignment provided by the allocator is not
> >> determined by which allocator I happen to have enabled.
> >>
> >> The values and ifdef'ery should be identical in all of our
> >> allocators.
> >
> > Why? It doesn't make much sense for SLOB, which tries to be as space
> > efficient as possible, as a default. If things break on sparc, it
> > really needs to set ARCH_KMALLOC_MINALIGN as slab default alignment is
> > not something you really want to depend on.
>
> I think it does make sense to expect that, whatever my architecture
> defines or does not define, I can expect the allocators to provide the
> same minimum alignment guarentee. Otherwise it is no guarantee at all.
>
SLAB/SLUB/SLOB all used to have the same BYTES_PER_WORD alignment
guarantee, with SLAB and SLUB having moved away from this to unsigned
long long in b46b8f19 and 47bfdc0d respectively. This was due to mixing
64-bit integers in data structures, which in the SLAB case resulted in
misaligned structures and also broke redzoning (architecture overrides
also disabled it completely). The SLUB change was made a couple of days
earlier for the same structure misalignment reasons (64-bit integers on
32-bit platforms).

The default changes in SLAB/SLUB at least assume that 32-bit
architectures can only address 64-bit values on a 64-bit boundary. While
this is true for most cases, these have always been handled through the
bumping of the architecture minalign values in the past. Indeed, this was
the rationale I had for adding the architecture-specific slab minalign
override in the first place. The kmalloc one on the other hand is largely
just overriden for platforms with DMA requirements -- usually a
cacheline boundary.

> It's already obvious from these reports that such dependencies do
> exist.
>
These dependencies were then introduced after SLAB/SLUB changed the
rules, suggesting that not enough testing was done.

> So one of two things should happen:
>
> 1) SLOB conforms to SLAB/SLUB in it's test
>
> 2) SLAB/SLUB conforms to SLOB in it's test
>
> And yes this is an either-or, you can't say they are both valid.

I don't see any reason to punish SLOB for the assumptions that SLAB/SLUB
arbitrarily took up, presumably on an architecture that should have
specified its own alignment requirements and simply couldn't be bothered.
Making SLAB redzoning work with arbitrary alignment is another matter
entirely, and something that should probably be revisited.

Anything that assumes more than BYTES_PER_WORD is simply broken and
should be reverted.

2010-05-18 22:38:37

by Paul Mundt

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

(adding Christoph and dwmw2 to the Cc..)

On Wed, May 19, 2010 at 07:35:07AM +0900, Paul Mundt wrote:
> On Tue, May 18, 2010 at 02:20:21PM -0700, David Miller wrote:
> > From: Pekka Enberg <[email protected]>
> > Date: Wed, 19 May 2010 00:15:46 +0300
> >
> > > On Tue, May 18, 2010 at 11:59 PM, David Miller <[email protected]> wrote:
> > >> From: Matt Mackall <[email protected]>
> > >> Date: Tue, 18 May 2010 14:33:55 -0500
> > >>
> > >>> SLOB honors ARCH_KMALLOC_MINALIGN. If your arch has alignment
> > >>> requirements, I recommend you set it.
> > >>
> > >> I recommend that the alignment provided by the allocator is not
> > >> determined by which allocator I happen to have enabled.
> > >>
> > >> The values and ifdef'ery should be identical in all of our
> > >> allocators.
> > >
> > > Why? It doesn't make much sense for SLOB, which tries to be as space
> > > efficient as possible, as a default. If things break on sparc, it
> > > really needs to set ARCH_KMALLOC_MINALIGN as slab default alignment is
> > > not something you really want to depend on.
> >
> > I think it does make sense to expect that, whatever my architecture
> > defines or does not define, I can expect the allocators to provide the
> > same minimum alignment guarentee. Otherwise it is no guarantee at all.
> >
> SLAB/SLUB/SLOB all used to have the same BYTES_PER_WORD alignment
> guarantee, with SLAB and SLUB having moved away from this to unsigned
> long long in b46b8f19 and 47bfdc0d respectively. This was due to mixing
> 64-bit integers in data structures, which in the SLAB case resulted in
> misaligned structures and also broke redzoning (architecture overrides
> also disabled it completely). The SLUB change was made a couple of days
> earlier for the same structure misalignment reasons (64-bit integers on
> 32-bit platforms).
>
> The default changes in SLAB/SLUB at least assume that 32-bit
> architectures can only address 64-bit values on a 64-bit boundary. While
> this is true for most cases, these have always been handled through the
> bumping of the architecture minalign values in the past. Indeed, this was
> the rationale I had for adding the architecture-specific slab minalign
> override in the first place. The kmalloc one on the other hand is largely
> just overriden for platforms with DMA requirements -- usually a
> cacheline boundary.
>
> > It's already obvious from these reports that such dependencies do
> > exist.
> >
> These dependencies were then introduced after SLAB/SLUB changed the
> rules, suggesting that not enough testing was done.
>
> > So one of two things should happen:
> >
> > 1) SLOB conforms to SLAB/SLUB in it's test
> >
> > 2) SLAB/SLUB conforms to SLOB in it's test
> >
> > And yes this is an either-or, you can't say they are both valid.
>
> I don't see any reason to punish SLOB for the assumptions that SLAB/SLUB
> arbitrarily took up, presumably on an architecture that should have
> specified its own alignment requirements and simply couldn't be bothered.
> Making SLAB redzoning work with arbitrary alignment is another matter
> entirely, and something that should probably be revisited.
>
> Anything that assumes more than BYTES_PER_WORD is simply broken and
> should be reverted.

2010-05-18 22:39:57

by Herbert Xu

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Tue, May 18, 2010 at 09:32:54PM +0200, Adrian-Ken Rueegsegger wrote:
>
> When doing the revert it is necessary to either have
> ARCH_KMALLOC_MINALIGN defined or explicitly define CRYPTO_MINALIGN in
> the case where it is not. Otherwise shash compilation fails because it
> needs CRYPTO_MINALIGN.

Thanks, I'll make sure that it gets replaced with
crypto_tfm_ctx_alignment(). CRYPTO_MINALIGN shouldn't
be used in running code.

Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2010-05-18 22:40:51

by David Miller

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

From: Paul Mundt <[email protected]>
Date: Wed, 19 May 2010 07:35:10 +0900

> On Tue, May 18, 2010 at 02:20:21PM -0700, David Miller wrote:
>> So one of two things should happen:
>>
>> 1) SLOB conforms to SLAB/SLUB in it's test
>>
>> 2) SLAB/SLUB conforms to SLOB in it's test
>>
>> And yes this is an either-or, you can't say they are both valid.
>
> I don't see any reason to punish SLOB for the assumptions that SLAB/SLUB
> arbitrarily took up, presumably on an architecture that should have
> specified its own alignment requirements and simply couldn't be bothered.
> Making SLAB redzoning work with arbitrary alignment is another matter
> entirely, and something that should probably be revisited.
>
> Anything that assumes more than BYTES_PER_WORD is simply broken and
> should be reverted.

You can't make the default different in each allocator, PERIOD.

If you can't know what the default is, how in the world can you know
if you need to override it? You can't. It's a guess, and you can't
say otherwise.

All of the CPP tests like the one used by linux/crypto.h are
ludicrious. It should absolutely be not necessary for any code to
duplicate this kind of calculation.

Instead, this sequence should be in linux/slab.h, and be used
universally by slab, slub, slob and anything that wants to know the
allocators alignment guarentees.

I don't even know of a 32-bit chip outside of x86 that doesn't
potentially emit alignment requiring 64-bit memory operations for
64-bit objects. So what SLOB is doing with a different default is
even more strange. And I bet you that even without the requirement,
x86 runs faster with 64-bit alignment of 64-bit objects.

2010-05-18 23:11:51

by Paul Mundt

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Tue, May 18, 2010 at 03:40:59PM -0700, David Miller wrote:
> From: Paul Mundt <[email protected]>
> Date: Wed, 19 May 2010 07:35:10 +0900
>
> > On Tue, May 18, 2010 at 02:20:21PM -0700, David Miller wrote:
> >> So one of two things should happen:
> >>
> >> 1) SLOB conforms to SLAB/SLUB in it's test
> >>
> >> 2) SLAB/SLUB conforms to SLOB in it's test
> >>
> >> And yes this is an either-or, you can't say they are both valid.
> >
> > I don't see any reason to punish SLOB for the assumptions that SLAB/SLUB
> > arbitrarily took up, presumably on an architecture that should have
> > specified its own alignment requirements and simply couldn't be bothered.
> > Making SLAB redzoning work with arbitrary alignment is another matter
> > entirely, and something that should probably be revisited.
> >
> > Anything that assumes more than BYTES_PER_WORD is simply broken and
> > should be reverted.
>
> You can't make the default different in each allocator, PERIOD.
>
I don't disagree that having different defaults is a bit unorthodox, but
that has not been a problem for any code that didn't attempt to make
its own assumptions about the alignment.

> If you can't know what the default is, how in the world can you know
> if you need to override it? You can't. It's a guess, and you can't
> say otherwise.
>
If an architecture requires 64-bit alignment for addressing 64-bit values
on 32-bit, then that's a hard architecture requirement irrespective of
whatever the slab allocator defaults to. The whole idea behind
architecture minimum alignment requirements is that they are
minimum requirements.

> All of the CPP tests like the one used by linux/crypto.h are
> ludicrious. It should absolutely be not necessary for any code to
> duplicate this kind of calculation.
>
Agreed.

> Instead, this sequence should be in linux/slab.h, and be used
> universally by slab, slub, slob and anything that wants to know the
> allocators alignment guarentees.
>
Having a slab_alignment() routine or something sounds fine, but we
already have headers split out for all of the different allocators, so
there's no specific reason why slob_def.h can't deviate here, too.

Again, it's the crypto code that is broken for making bogus alignment
assumptions in the first place.

> I don't even know of a 32-bit chip outside of x86 that doesn't
> potentially emit alignment requiring 64-bit memory operations for
> 64-bit objects. So what SLOB is doing with a different default is
> even more strange. And I bet you that even without the requirement,
> x86 runs faster with 64-bit alignment of 64-bit objects.

I assumed ppc32 too, but if they're really in a minority then we
could also consider just inverting the logic (both x86 and ppc set
HAVE_EFFICIENT_UNALIGNED_ACCESS for example).

2010-05-18 23:16:21

by Matt Mackall

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Tue, 2010-05-18 at 15:40 -0700, David Miller wrote:
> All of the CPP tests like the one used by linux/crypto.h are
> ludicrious. It should absolutely be not necessary for any code to
> duplicate this kind of calculation.
>
> Instead, this sequence should be in linux/slab.h, and be used
> universally by slab, slub, slob and anything that wants to know the
> allocators alignment guarentees.

Agreed. However, every arch should -also- set ARCH_KMALLOC_MINALIGN
appropriately so that we have documentation of the hardware requirements
on each platform.

> I don't even know of a 32-bit chip outside of x86 that doesn't
> potentially emit alignment requiring 64-bit memory operations for
> 64-bit objects. So what SLOB is doing with a different default is
> even more strange. And I bet you that even without the requirement,
> x86 runs faster with 64-bit alignment of 64-bit objects.

No doubt but SLOB explicitly trades faster for smaller.

--
Mathematics is the supreme nostalgia of our time.

2010-05-18 23:21:16

by David Woodhouse

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Tue, 2010-05-18 at 14:20 -0700, David Miller wrote:
> I think it does make sense to expect that, whatever my architecture
> defines or does not define, I can expect the allocators to provide the
> same minimum alignment guarentee.

In a sense, they do. The minimum alignment guarantee is sizeof(long).
You are guaranteed that no allocator will return memory blocks which are
aligned to anything less than that.

Some allocators may sometimes return memory blocks which are
better-aligned than that -- but that's not guaranteed behaviour. If you
_depend_ on that behaviour and it happens to vary with the phase of the
moon, that's your problem.

It would be better if the minimum alignment was exposed to generic code
though -- you're right that the CPP tests in linux/crypto.h really
shouldn't have to exist. If it wasn't for that, then the crypto problem
wouldn't have occurred.

--
David Woodhouse Open Source Technology Centre
[email protected] Intel Corporation

2010-05-19 01:05:24

by Herbert Xu

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, May 19, 2010 at 12:20:34AM +0100, David Woodhouse wrote:
>
> It would be better if the minimum alignment was exposed to generic code
> though -- you're right that the CPP tests in linux/crypto.h really
> shouldn't have to exist. If it wasn't for that, then the crypto problem
> wouldn't have occurred.

While this problem wouldn't have occurred, we would instead have
data corruption/alignment faults on architectures such as sparc32
or ARM that require 64-bit alignment for 64-bit objects.

So no getting rid of them isn't going to fix things either. Of
course I have no objections to moving this into slab.h or a similar
location should anyone be willing to do the hard work.

Thanks,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2010-05-19 01:52:14

by Herbert Xu

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Tue, May 18, 2010 at 09:32:54PM +0200, Adrian-Ken Rueegsegger wrote:
>
> When doing the revert it is necessary to either have
> ARCH_KMALLOC_MINALIGN defined or explicitly define CRYPTO_MINALIGN in
> the case where it is not. Otherwise shash compilation fails because it
> needs CRYPTO_MINALIGN.

I've added the following patch. Thanks!

commit 18eb8ea6ee4cc9ed39b45f95b734f523bcfb586b
Author: Herbert Xu <[email protected]>
Date: Wed May 19 11:50:58 2010 +1000

crypto: shash - Remove usage of CRYPTO_MINALIGN

The macro CRYPTO_MINALIGN is not meant to be used directly. This
patch replaces it with crypto_tfm_ctx_alignment.

Signed-off-by: Herbert Xu <[email protected]>

diff --git a/crypto/shash.c b/crypto/shash.c
index 91f7b9d..22fd943 100644
--- a/crypto/shash.c
+++ b/crypto/shash.c
@@ -37,7 +37,7 @@ static int shash_setkey_unaligned(struct crypto_shash *tfm, const u8 *key,
u8 *buffer, *alignbuffer;
int err;

- absize = keylen + (alignmask & ~(CRYPTO_MINALIGN - 1));
+ absize = keylen + (alignmask & ~(crypto_tfm_ctx_alignment() - 1));
buffer = kmalloc(absize, GFP_KERNEL);
if (!buffer)
return -ENOMEM;

--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2010-05-19 04:10:19

by Herbert Xu

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Tue, May 18, 2010 at 02:20:21PM -0700, David Miller wrote:
>
> I'll add the define for sparc, but saying "sparc's fault" is bogus
> because I defined what was necessary to get SLAB/SLUB to provide the
> necessary alignment. SLOB pays for choosing not to use the same
> calculations for minimum alignment as the other allocators, and
> therefore pays for being different in this regard.

Once that macro hits the main tree I'll push the crypto fix out.

Thanks!
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2010-05-19 05:44:47

by Pekka Enberg

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

Hi David,

On Wed, May 19, 2010 at 12:20 AM, David Miller <[email protected]> wrote:
>> Why? It doesn't make much sense for SLOB, which tries to be as space
>> efficient as possible, as a default. If things break on sparc, it
>> really needs to set ARCH_KMALLOC_MINALIGN as slab default alignment is
>> not something you really want to depend on.
>
> I think it does make sense to expect that, whatever my architecture
> defines or does not define, I can expect the allocators to provide the
> same minimum alignment guarentee. ?Otherwise it is no guarantee at all.

They're not a guarantee, the default values are just "oh, you don't
care about alignment, let me provide one for you".

> I'll add the define for sparc, but saying "sparc's fault" is bogus
> because I defined what was necessary to get SLAB/SLUB to provide the
> necessary alignment. ?SLOB pays for choosing not to use the same
> calculations for minimum alignment as the other allocators, and
> therefore pays for being different in this regard.
>
> And in fact I do know that the ifdef'ery in SLAB/SLUB is derived from
> a change long ago that was specifically added to handle platforms like
> sparc.
>
> So one of two things should happen:
>
> 1) SLOB conforms to SLAB/SLUB in it's test
>
> 2) SLAB/SLUB conforms to SLOB in it's test
>
> And yes this is an either-or, you can't say they are both valid.

I don't agree with that. The default values are subject to change and
as pointed out by Paul, they have done so in the past. If you
architecture has alignment requirements for _correctness_ you
absolutely need to define ARCH_KMALLOC_MINALIGN.

Pekka

2010-05-19 05:53:43

by Pekka Enberg

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

Hi David,

On Wed, May 19, 2010 at 1:40 AM, David Miller <[email protected]> wrote:
> I don't even know of a 32-bit chip outside of x86 that doesn't
> potentially emit alignment requiring 64-bit memory operations for
> 64-bit objects. ?So what SLOB is doing with a different default is
> even more strange. ?And I bet you that even without the requirement,
> x86 runs faster with 64-bit alignment of 64-bit objects.

Faster, sure, but SLOB is not about being fast, it's about being space
efficient.

Pekka

2010-05-19 07:15:07

by David Woodhouse

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, 2010-05-19 at 11:05 +1000, Herbert Xu wrote:
> While this problem wouldn't have occurred, we would instead have
> data corruption/alignment faults on architectures such as sparc32
> or ARM that require 64-bit alignment for 64-bit objects.

Yeah, but that's what ARCH_SLAB_MINALIGN is for.

ARM gets this right, and Dave has already said he's going to fix sparc.

--
David Woodhouse Open Source Technology Centre
[email protected] Intel Corporation

2010-05-19 07:46:27

by Herbert Xu

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, May 19, 2010 at 08:14:28AM +0100, David Woodhouse wrote:
>
> Yeah, but that's what ARCH_SLAB_MINALIGN is for.
>
> ARM gets this right, and Dave has already said he's going to fix sparc.

Right, once that gets in I will fix crypto.h so that it'll work
correctly with SLOB.

Thanks,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2010-05-19 10:59:09

by David Woodhouse

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, 2010-05-19 at 11:05 +1000, Herbert Xu wrote:
> So no getting rid of them isn't going to fix things either. Of
> course I have no objections to moving this into slab.h or a similar
> location should anyone be willing to do the hard work.

http://git.infradead.org/users/dwmw2/minalign-2.6.git
git://git.infradead.org/users/dwmw2/minalign-2.6.git

Should I include the SPARC patch in that too?

--
David Woodhouse Open Source Technology Centre
[email protected] Intel Corporation

2010-05-19 11:02:24

by David Woodhouse

[permalink] [raw]
Subject: [PATCH 1/4] mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slab_def.h>

Signed-off-by: David Woodhouse <[email protected]>
---
include/linux/slab_def.h | 24 ++++++++++++++++++++++++
mm/slab.c | 24 ------------------------
2 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
index ca6b2b3..1812dac 100644
--- a/include/linux/slab_def.h
+++ b/include/linux/slab_def.h
@@ -16,6 +16,30 @@
#include <linux/compiler.h>
#include <linux/kmemtrace.h>

+#ifndef ARCH_KMALLOC_MINALIGN
+/*
+ * Enforce a minimum alignment for the kmalloc caches.
+ * Usually, the kmalloc caches are cache_line_size() aligned, except when
+ * DEBUG and FORCED_DEBUG are enabled, then they are BYTES_PER_WORD aligned.
+ * Some archs want to perform DMA into kmalloc caches and need a guaranteed
+ * alignment larger than the alignment of a 64-bit integer.
+ * ARCH_KMALLOC_MINALIGN allows that.
+ * Note that increasing this value may disable some debug features.
+ */
+#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
+#endif
+
+#ifndef ARCH_SLAB_MINALIGN
+/*
+ * Enforce a minimum alignment for all caches.
+ * Intended for archs that get misalignment faults even for BYTES_PER_WORD
+ * aligned buffers. Includes ARCH_KMALLOC_MINALIGN.
+ * If possible: Do not enable this flag for CONFIG_DEBUG_SLAB, it disables
+ * some debug features.
+ */
+#define ARCH_SLAB_MINALIGN 0
+#endif
+
/*
* struct kmem_cache
*
diff --git a/mm/slab.c b/mm/slab.c
index bac0f4f..7401ddc 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -144,30 +144,6 @@
#define BYTES_PER_WORD sizeof(void *)
#define REDZONE_ALIGN max(BYTES_PER_WORD, __alignof__(unsigned long long))

-#ifndef ARCH_KMALLOC_MINALIGN
-/*
- * Enforce a minimum alignment for the kmalloc caches.
- * Usually, the kmalloc caches are cache_line_size() aligned, except when
- * DEBUG and FORCED_DEBUG are enabled, then they are BYTES_PER_WORD aligned.
- * Some archs want to perform DMA into kmalloc caches and need a guaranteed
- * alignment larger than the alignment of a 64-bit integer.
- * ARCH_KMALLOC_MINALIGN allows that.
- * Note that increasing this value may disable some debug features.
- */
-#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
-#endif
-
-#ifndef ARCH_SLAB_MINALIGN
-/*
- * Enforce a minimum alignment for all caches.
- * Intended for archs that get misalignment faults even for BYTES_PER_WORD
- * aligned buffers. Includes ARCH_KMALLOC_MINALIGN.
- * If possible: Do not enable this flag for CONFIG_DEBUG_SLAB, it disables
- * some debug features.
- */
-#define ARCH_SLAB_MINALIGN 0
-#endif
-
#ifndef ARCH_KMALLOC_FLAGS
#define ARCH_KMALLOC_FLAGS SLAB_HWCACHE_ALIGN
#endif
--
1.6.6.1

2010-05-19 11:02:26

by David Woodhouse

[permalink] [raw]
Subject: [PATCH 2/4] mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slob_def.h>

Signed-off-by: David Woodhouse <[email protected]>
---
include/linux/slob_def.h | 8 ++++++++
mm/slob.c | 8 --------
2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/include/linux/slob_def.h b/include/linux/slob_def.h
index 0ec00b3..62667f7 100644
--- a/include/linux/slob_def.h
+++ b/include/linux/slob_def.h
@@ -1,6 +1,14 @@
#ifndef __LINUX_SLOB_DEF_H
#define __LINUX_SLOB_DEF_H

+#ifndef ARCH_KMALLOC_MINALIGN
+#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long)
+#endif
+
+#ifndef ARCH_SLAB_MINALIGN
+#define ARCH_SLAB_MINALIGN __alignof__(unsigned long)
+#endif
+
void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node);

static __always_inline void *kmem_cache_alloc(struct kmem_cache *cachep,
diff --git a/mm/slob.c b/mm/slob.c
index 837ebd6..23631e2 100644
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -467,14 +467,6 @@ out:
* End of slob allocator proper. Begin kmem_cache_alloc and kmalloc frontend.
*/

-#ifndef ARCH_KMALLOC_MINALIGN
-#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long)
-#endif
-
-#ifndef ARCH_SLAB_MINALIGN
-#define ARCH_SLAB_MINALIGN __alignof__(unsigned long)
-#endif
-
void *__kmalloc_node(size_t size, gfp_t gfp, int node)
{
unsigned int *m;
--
1.6.6.1

2010-05-19 11:02:17

by David Woodhouse

[permalink] [raw]
Subject: [PATCH 4/4] crypto: Use ARCH_KMALLOC_MINALIGN for CRYPTO_MINALIGN now that it's exposed

Signed-off-by: David Woodhouse <[email protected]>
---
include/linux/crypto.h | 6 ------
1 files changed, 0 insertions(+), 6 deletions(-)

diff --git a/include/linux/crypto.h b/include/linux/crypto.h
index 24d2e30..a6a7a1c 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
@@ -99,13 +99,7 @@
* as arm where pointers are 32-bit aligned but there are data types such as
* u64 which require 64-bit alignment.
*/
-#if defined(ARCH_KMALLOC_MINALIGN)
#define CRYPTO_MINALIGN ARCH_KMALLOC_MINALIGN
-#elif defined(ARCH_SLAB_MINALIGN)
-#define CRYPTO_MINALIGN ARCH_SLAB_MINALIGN
-#else
-#define CRYPTO_MINALIGN __alignof__(unsigned long long)
-#endif

#define CRYPTO_MINALIGN_ATTR __attribute__ ((__aligned__(CRYPTO_MINALIGN)))

--
1.6.6.1

2010-05-19 11:02:29

by David Woodhouse

[permalink] [raw]
Subject: [PATCH 3/4] mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slub_def.h>

Signed-off-by: David Woodhouse <[email protected]>
---
include/linux/slub_def.h | 8 ++++++++
mm/slub.c | 8 --------
2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h
index 0249d41..55695c8 100644
--- a/include/linux/slub_def.h
+++ b/include/linux/slub_def.h
@@ -116,6 +116,14 @@ struct kmem_cache {

#define KMALLOC_SHIFT_LOW ilog2(KMALLOC_MIN_SIZE)

+#ifndef ARCH_KMALLOC_MINALIGN
+#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
+#endif
+
+#ifndef ARCH_SLAB_MINALIGN
+#define ARCH_SLAB_MINALIGN __alignof__(unsigned long long)
+#endif
+
/*
* Maximum kmalloc object size handled by SLUB. Larger object allocations
* are passed through to the page allocator. The page allocator "fastpath"
diff --git a/mm/slub.c b/mm/slub.c
index d2a54fe..c874c3e 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -157,14 +157,6 @@
#define SLUB_MERGE_SAME (SLAB_DEBUG_FREE | SLAB_RECLAIM_ACCOUNT | \
SLAB_CACHE_DMA | SLAB_NOTRACK)

-#ifndef ARCH_KMALLOC_MINALIGN
-#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
-#endif
-
-#ifndef ARCH_SLAB_MINALIGN
-#define ARCH_SLAB_MINALIGN __alignof__(unsigned long long)
-#endif
-
#define OO_SHIFT 16
#define OO_MASK ((1 << OO_SHIFT) - 1)
#define MAX_OBJS_PER_PAGE 65535 /* since page.objects is u16 */
--
1.6.6.1

2010-05-19 11:08:44

by Pekka Enberg

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, May 19, 2010 at 1:58 PM, David Woodhouse <[email protected]> wrote:
> On Wed, 2010-05-19 at 11:05 +1000, Herbert Xu wrote:
>> So no getting rid of them isn't going to fix things either. ?Of
>> course I have no objections to moving this into slab.h or a similar
>> location should anyone be willing to do the hard work.
>
> http://git.infradead.org/users/dwmw2/minalign-2.6.git
> git://git.infradead.org/users/dwmw2/minalign-2.6.git

Acked-by: Pekka Enberg <[email protected]>

Are you sending the patches to Linus or do you want me to pull them in slab.git?

2010-05-19 11:16:55

by David Woodhouse

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, 2010-05-19 at 14:08 +0300, Pekka Enberg wrote:
>
> Acked-by: Pekka Enberg <[email protected]>
>
> Are you sending the patches to Linus or do you want me to pull them in
> slab.git?

I don't mind. Feel free to apply them to slab.git, but be aware that
Herbert wanted to see a patch fixing sparc32 ARCH_SLAB_MINALIGN before
the crypto one is applied.

Although arguably SLOB was broken on sparc32 even before the crypto
patch -- so perhaps that fix shouldn't _have_ to go in first?

--
David Woodhouse Open Source Technology Centre
[email protected] Intel Corporation

2010-05-19 11:40:52

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, May 19, 2010 at 09:14, David Woodhouse <[email protected]> wrote:
> On Wed, 2010-05-19 at 11:05 +1000, Herbert Xu wrote:
>> While this problem wouldn't have occurred, we would instead have
>> data corruption/alignment faults on architectures such as sparc32
>> or ARM that require 64-bit alignment for 64-bit objects.
>
> Yeah, but that's what ARCH_SLAB_MINALIGN is for.
>
> ARM gets this right, and Dave has already said he's going to fix sparc.

Instead of having (different) defaults in sl[aou]b, perhaps we should just
remove the defaults completely, to ensure all architectures set
ARCH_SLAB_MINALIGN to the correct value?

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2010-05-19 11:40:36

by David Woodhouse

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, 2010-05-19 at 13:32 +0200, Geert Uytterhoeven wrote:
> Instead of having (different) defaults in sl[aou]b, perhaps we should
> just remove the defaults completely, to ensure all architectures set
> ARCH_SLAB_MINALIGN to the correct value?

What is 'correct'? The architecture sets it to the minimum value that it
can cope with, according to its own alignment constraints (and DMA/cache
constraints, in the case of ARCH_KMALLOC_MINALIGN).

Some architectures don't _have_ any minimum required alignment, so they
have no need to set it. If the architecture _does_ specify a minimum,
the allocators must honour it. Otherwise, they're free to do their own
thing. And slob chooses to use a smaller alignment than slab and slub
do, in accordance with its design and its raison d'être.

--
dwmw2

2010-05-19 11:46:42

by Herbert Xu

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, May 19, 2010 at 12:16:45PM +0100, David Woodhouse wrote:
>
> I don't mind. Feel free to apply them to slab.git, but be aware that
> Herbert wanted to see a patch fixing sparc32 ARCH_SLAB_MINALIGN before
> the crypto one is applied.
>
> Although arguably SLOB was broken on sparc32 even before the crypto
> patch -- so perhaps that fix shouldn't _have_ to go in first?

Well prior to this crypto on sparc32 did work with SLAB/SLUB. If
you change it without including the sparc pach, then sparc32 would
be broken regardless of which allocator you used.

Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2010-05-19 11:50:55

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, May 19, 2010 at 13:40, David Woodhouse <[email protected]> wrote:
> On Wed, 2010-05-19 at 13:32 +0200, Geert Uytterhoeven wrote:
>> Instead of having (different) defaults in sl[aou]b, perhaps we should
>> just remove the defaults completely, to ensure all architectures set
>> ARCH_SLAB_MINALIGN to the correct value?
>
> What is 'correct'? The architecture sets it to the minimum value that it
> can cope with, according to its own alignment constraints (and DMA/cache
> constraints, in the case of ARCH_KMALLOC_MINALIGN).
>
> Some architectures don't _have_ any minimum required alignment, so they
> have no need to set it. If the architecture _does_ specify a minimum,
> the allocators must honour it. Otherwise, they're free to do their own
> thing. And slob chooses to use a smaller alignment than slab and slub
> do, in accordance with its design and its raison d'être.

Currently 7 out of 20+ architectures set it.
Any bets on how many are missing, but should set it?

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2010-05-19 12:07:47

by FUJITA Tomonori

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, 19 May 2010 12:40:36 +0100
David Woodhouse <[email protected]> wrote:

> On Wed, 2010-05-19 at 13:32 +0200, Geert Uytterhoeven wrote:
> > Instead of having (different) defaults in sl[aou]b, perhaps we should
> > just remove the defaults completely, to ensure all architectures set
> > ARCH_SLAB_MINALIGN to the correct value?
>
> What is 'correct'? The architecture sets it to the minimum value that it
> can cope with, according to its own alignment constraints (and DMA/cache
> constraints, in the case of ARCH_KMALLOC_MINALIGN).

IIRC, not all the architectures do that; ARCH_KMALLOC_MINALIGN doesn't
mean "DMA-safe" alignment currently.

2010-05-19 12:20:10

by David Woodhouse

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, 2010-05-19 at 21:02 +0900, FUJITA Tomonori wrote:
> On Wed, 19 May 2010 12:40:36 +0100
> David Woodhouse <[email protected]> wrote:
>
> > On Wed, 2010-05-19 at 13:32 +0200, Geert Uytterhoeven wrote:
> > > Instead of having (different) defaults in sl[aou]b, perhaps we should
> > > just remove the defaults completely, to ensure all architectures set
> > > ARCH_SLAB_MINALIGN to the correct value?
> >
> > What is 'correct'? The architecture sets it to the minimum value that it
> > can cope with, according to its own alignment constraints (and DMA/cache
> > constraints, in the case of ARCH_KMALLOC_MINALIGN).
>
> IIRC, not all the architectures do that; ARCH_KMALLOC_MINALIGN doesn't
> mean "DMA-safe" alignment currently.

Surely those architectures that have alignment constraints for DMA but
which don't set ARCH_KMALLOC_MINALIGN are just buggy -- it _does_ mean
that.

--
David Woodhouse Open Source Technology Centre
[email protected] Intel Corporation

2010-05-19 12:32:27

by FUJITA Tomonori

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, 19 May 2010 13:19:45 +0100
David Woodhouse <[email protected]> wrote:

> On Wed, 2010-05-19 at 21:02 +0900, FUJITA Tomonori wrote:
> > On Wed, 19 May 2010 12:40:36 +0100
> > David Woodhouse <[email protected]> wrote:
> >
> > > On Wed, 2010-05-19 at 13:32 +0200, Geert Uytterhoeven wrote:
> > > > Instead of having (different) defaults in sl[aou]b, perhaps we should
> > > > just remove the defaults completely, to ensure all architectures set
> > > > ARCH_SLAB_MINALIGN to the correct value?
> > >
> > > What is 'correct'? The architecture sets it to the minimum value that it
> > > can cope with, according to its own alignment constraints (and DMA/cache
> > > constraints, in the case of ARCH_KMALLOC_MINALIGN).
> >
> > IIRC, not all the architectures do that; ARCH_KMALLOC_MINALIGN doesn't
> > mean "DMA-safe" alignment currently.
>
> Surely those architectures that have alignment constraints for DMA but
> which don't set ARCH_KMALLOC_MINALIGN are just buggy -- it _does_ mean
> that.

Well, I thought so but seems that there isn't such agreement:

http://kerneltrap.org/mailarchive/linux-kernel/2010/5/12/4568960

2010-05-19 12:49:09

by David Woodhouse

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, 2010-05-19 at 21:26 +0900, FUJITA Tomonori wrote:
>
> > Surely those architectures that have alignment constraints for DMA
> but
> > which don't set ARCH_KMALLOC_MINALIGN are just buggy -- it _does_
> mean
> > that.
>
> Well, I thought so but seems that there isn't such agreement:
>
> http://kerneltrap.org/mailarchive/linux-kernel/2010/5/12/4568960

How strange. That thread has a fair amount of misinformation from people
who should know better.

--
dwmw2

2010-05-19 12:54:45

by Pekka Enberg

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, May 19, 2010 at 2:46 PM, Herbert Xu <[email protected]> wrote:
> On Wed, May 19, 2010 at 12:16:45PM +0100, David Woodhouse wrote:
>>
>> I don't mind. Feel free to apply them to slab.git, but be aware that
>> Herbert wanted to see a patch fixing sparc32 ARCH_SLAB_MINALIGN before
>> the crypto one is applied.
>>
>> Although arguably SLOB was broken on sparc32 even before the crypto
>> patch -- so perhaps that fix shouldn't _have_ to go in first?
>
> Well prior to this crypto on sparc32 did work with SLAB/SLUB. ?If
> you change it without including the sparc pach, then sparc32 would
> be broken regardless of which allocator you used.

OK, I'll pick up David's patches and just wait for sparc changes to
hit Linus' tree first. Herbert, do I have your ACK for the crypto
patches?

2010-05-19 12:59:49

by Herbert Xu

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, May 19, 2010 at 03:54:43PM +0300, Pekka Enberg wrote:
>
> OK, I'll pick up David's patches and just wait for sparc changes to
> hit Linus' tree first. Herbert, do I have your ACK for the crypto
> patches?

Of course:

Acked-by: Herbert Xu <[email protected]>

Thanks!
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2010-05-19 13:31:20

by Johannes Stezenbach

[permalink] [raw]
Subject: Re: [PATCH 1/4] mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slab_def.h>

Hi,

I have some comments/questions, I hope it's not too silly:

On Wed, May 19, 2010 at 12:01:42PM +0100, David Woodhouse wrote:
> +#ifndef ARCH_KMALLOC_MINALIGN
> +/*
> + * Enforce a minimum alignment for the kmalloc caches.
> + * Usually, the kmalloc caches are cache_line_size() aligned, except when
> + * DEBUG and FORCED_DEBUG are enabled, then they are BYTES_PER_WORD aligned.
> + * Some archs want to perform DMA into kmalloc caches and need a guaranteed
> + * alignment larger than the alignment of a 64-bit integer.
> + * ARCH_KMALLOC_MINALIGN allows that.
> + * Note that increasing this value may disable some debug features.
> + */
> +#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
> +#endif

I think the comment is confusing. IIRC kmalloc() API guarantees that
the allocated buffer is suitable for DMA, so if cache coherence is not
handled by hardware the arch might need to set this to the cache line size,
and that's what ARCH_KMALLOC_MINALIGN is about. Nothing else.

I'm not sure if kmalloc() API makes any guarantee regarding alignment,
like 32bit or 64bit or sizeof(void *) ...? At least I cannot find
any documentation about this.


> +#ifndef ARCH_SLAB_MINALIGN
> +/*
> + * Enforce a minimum alignment for all caches.
> + * Intended for archs that get misalignment faults even for BYTES_PER_WORD
> + * aligned buffers. Includes ARCH_KMALLOC_MINALIGN.
> + * If possible: Do not enable this flag for CONFIG_DEBUG_SLAB, it disables
> + * some debug features.
> + */
> +#define ARCH_SLAB_MINALIGN 0
> +#endif

Why is this needed at all? If code calls kmem_cache_create()
with wrong align parameter, or has wrong expectations wrt kmalloc()
alignment guarantees, this code needs to be fixed?
I mean, portable code cannot assume that unaligned accesses work?


Thanks
Johannes

2010-05-19 13:49:43

by David Woodhouse

[permalink] [raw]
Subject: [PATCH 5/4] Provide __dma_aligned macro

Commit 3843384a055496dfed3c93ae883d964d8290fdab ("Input: ad7877 - keep
dma rx buffers in seperate cache lines")[sic] introduced the use of
____cacheline_aligned to ensure that buffers used for DMA as part of a
structure were suitably separated from the rest of the structure.

However, aligning to the cache line size isn't necessary on
cache-coherent architectures. To avoid wasting space, the correct value
to use for the alignment is ARCH_KMALLOC_MINALIGN.

This patch provides a __dma_aligned macro which does the right thing.

Signed-off-by: David Woodhouse <[email protected]>

diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index ca32ed7..4487cf3 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -5,6 +5,9 @@
#include <linux/err.h>
#include <linux/dma-attrs.h>
#include <linux/scatterlist.h>
+#include <linux/slab.h>
+
+#define __dma_aligned __attribute__((__aligned__(ARCH_KMALLOC_MINALIGN)))

/* These definitions mirror those in pci.h, so they can be used
* interchangeably with their PCI_ counterparts */

--
David Woodhouse Open Source Technology Centre
[email protected] Intel Corporation

2010-05-19 14:11:51

by Matt Mackall

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, 2010-05-19 at 13:50 +0200, Geert Uytterhoeven wrote:
> On Wed, May 19, 2010 at 13:40, David Woodhouse <[email protected]> wrote:
> > On Wed, 2010-05-19 at 13:32 +0200, Geert Uytterhoeven wrote:
> >> Instead of having (different) defaults in sl[aou]b, perhaps we should
> >> just remove the defaults completely, to ensure all architectures set
> >> ARCH_SLAB_MINALIGN to the correct value?
> >
> > What is 'correct'? The architecture sets it to the minimum value that it
> > can cope with, according to its own alignment constraints (and DMA/cache
> > constraints, in the case of ARCH_KMALLOC_MINALIGN).
> >
> > Some architectures don't _have_ any minimum required alignment, so they
> > have no need to set it. If the architecture _does_ specify a minimum,
> > the allocators must honour it. Otherwise, they're free to do their own
> > thing. And slob chooses to use a smaller alignment than slab and slub
> > do, in accordance with its design and its raison d'être.
>
> Currently 7 out of 20+ architectures set it.
> Any bets on how many are missing, but should set it?

I still think we should add it to all of them as positive documentation
that this issue has been considered. And then make the kernel not
compile without it so new arch implementors can't miss it.

--
Mathematics is the supreme nostalgia of our time.

Subject: Re: [BUG] SLOB breaks Crypto

On Wed, 19 May 2010, Paul Mundt wrote:

> > > So one of two things should happen:
> > >
> > > 1) SLOB conforms to SLAB/SLUB in it's test
> > >
> > > 2) SLAB/SLUB conforms to SLOB in it's test
> > >
> > > And yes this is an either-or, you can't say they are both valid.
> >
> > I don't see any reason to punish SLOB for the assumptions that SLAB/SLUB
> > arbitrarily took up, presumably on an architecture that should have
> > specified its own alignment requirements and simply couldn't be bothered.
> > Making SLAB redzoning work with arbitrary alignment is another matter
> > entirely, and something that should probably be revisited.
> >
> > Anything that assumes more than BYTES_PER_WORD is simply broken and
> > should be reverted.

The assumptions are not arbitrary. It is reasonable to assume that
structures managed by the slab allocators may contain long long variables
and that therefore a unsigned long long alignment is required by the
allocator. It is the *compiler* who tells us that long long needs to be
aligned at double word boundaries. If an arch does not require long long
alignment on double word boundaries then the *compiler* should tell us
that and then the allocators will align on word boundaries.

2010-05-19 14:50:08

by FUJITA Tomonori

[permalink] [raw]
Subject: Re: [PATCH 5/4] Provide __dma_aligned macro

On Wed, 19 May 2010 14:49:08 +0100
David Woodhouse <[email protected]> wrote:

> Commit 3843384a055496dfed3c93ae883d964d8290fdab ("Input: ad7877 - keep
> dma rx buffers in seperate cache lines")[sic] introduced the use of
> ____cacheline_aligned to ensure that buffers used for DMA as part of a
> structure were suitably separated from the rest of the structure.
>
> However, aligning to the cache line size isn't necessary on
> cache-coherent architectures. To avoid wasting space, the correct value
> to use for the alignment is ARCH_KMALLOC_MINALIGN.
>
> This patch provides a __dma_aligned macro which does the right thing.
>
> Signed-off-by: David Woodhouse <[email protected]>
>
> diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
> index ca32ed7..4487cf3 100644
> --- a/include/linux/dma-mapping.h
> +++ b/include/linux/dma-mapping.h
> @@ -5,6 +5,9 @@
> #include <linux/err.h>
> #include <linux/dma-attrs.h>
> #include <linux/scatterlist.h>
> +#include <linux/slab.h>
> +
> +#define __dma_aligned __attribute__((__aligned__(ARCH_KMALLOC_MINALIGN)))

As wrote in other mail, such was proposed several times:

http://www.mail-archive.com/[email protected]/msg12633.html
http://lwn.net/Articles/2269/

And rejected.

http://lwn.net/Articles/2270/

2010-05-19 18:01:26

by Manfred Spraul

[permalink] [raw]
Subject: Re: [PATCH 1/4] mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slab_def.h>

On 05/19/2010 03:30 PM, Johannes Stezenbach wrote:
> Hi,
>
> I have some comments/questions, I hope it's not too silly:
>
> On Wed, May 19, 2010 at 12:01:42PM +0100, David Woodhouse wrote:
>
>> +#ifndef ARCH_KMALLOC_MINALIGN
>> +/*
>> + * Enforce a minimum alignment for the kmalloc caches.
>> + * Usually, the kmalloc caches are cache_line_size() aligned, except when
>> + * DEBUG and FORCED_DEBUG are enabled, then they are BYTES_PER_WORD aligned.
>> + * Some archs want to perform DMA into kmalloc caches and need a guaranteed
>> + * alignment larger than the alignment of a 64-bit integer.
>> + * ARCH_KMALLOC_MINALIGN allows that.
>> + * Note that increasing this value may disable some debug features.
>> + */
>> +#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
>> +#endif
>>
> I think the comment is confusing. IIRC kmalloc() API guarantees that
> the allocated buffer is suitable for DMA, so if cache coherence is not
> handled by hardware the arch might need to set this to the cache line size,
> and that's what ARCH_KMALLOC_MINALIGN is about. Nothing else.
>
Is this text better?

/*
* Enforce a minimum alignment for the kmalloc caches.
* kmalloc allocations are guaranteed to be BYTES_PER_WORD aligned -
sizeof(void*)
* If an arch needs a larger guarantee (e.g. cache_line_size due to DMA),
then it
* must use ARCH_KMALLOC_MINALIGN to enforce that.
* Note: Do not set ARCH_KMALLOC_MINALIGN for performance reasons.
* Unless debug options are enabled, the kernel uses cache_line_size()
automatically.
*/

>> +#ifndef ARCH_SLAB_MINALIGN
>> +/*
>> + * Enforce a minimum alignment for all caches.
>> + * Intended for archs that get misalignment faults even for BYTES_PER_WORD
>> + * aligned buffers. Includes ARCH_KMALLOC_MINALIGN.
>> + * If possible: Do not enable this flag for CONFIG_DEBUG_SLAB, it disables
>> + * some debug features.
>> + */
>> +#define ARCH_SLAB_MINALIGN 0
>> +#endif
>>
> Why is this needed at all? If code calls kmem_cache_create()
> with wrong align parameter, or has wrong expectations wrt kmalloc()
> alignment guarantees, this code needs to be fixed?
> I mean, portable code cannot assume that unaligned accesses work?
>
ARM uses 8 bytes. I don't know why.
A 32-bit arch and unaligned 64-bit loads are not supported?

--
Manfred

2010-05-19 18:11:08

by David Woodhouse

[permalink] [raw]
Subject: Re: [PATCH 1/4] mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slab_def.h>

On Wed, 2010-05-19 at 20:03 +0200, Manfred Spraul wrote:
> Is this text better?

Not really...

> * Unless debug options are enabled, the kernel uses cache_line_size()
> automatically.

... that's a lie.

--
David Woodhouse Open Source Technology Centre
[email protected] Intel Corporation

2010-05-19 19:12:06

by Pekka Enberg

[permalink] [raw]
Subject: Re: [PATCH 1/4] mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slab_def.h>

David Woodhouse wrote:
> Signed-off-by: David Woodhouse <[email protected]>

I applied patches 1-4. Thanks David!

> ---
> include/linux/slab_def.h | 24 ++++++++++++++++++++++++
> mm/slab.c | 24 ------------------------
> 2 files changed, 24 insertions(+), 24 deletions(-)
>
> diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
> index ca6b2b3..1812dac 100644
> --- a/include/linux/slab_def.h
> +++ b/include/linux/slab_def.h
> @@ -16,6 +16,30 @@
> #include <linux/compiler.h>
> #include <linux/kmemtrace.h>
>
> +#ifndef ARCH_KMALLOC_MINALIGN
> +/*
> + * Enforce a minimum alignment for the kmalloc caches.
> + * Usually, the kmalloc caches are cache_line_size() aligned, except when
> + * DEBUG and FORCED_DEBUG are enabled, then they are BYTES_PER_WORD aligned.
> + * Some archs want to perform DMA into kmalloc caches and need a guaranteed
> + * alignment larger than the alignment of a 64-bit integer.
> + * ARCH_KMALLOC_MINALIGN allows that.
> + * Note that increasing this value may disable some debug features.
> + */
> +#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
> +#endif
> +
> +#ifndef ARCH_SLAB_MINALIGN
> +/*
> + * Enforce a minimum alignment for all caches.
> + * Intended for archs that get misalignment faults even for BYTES_PER_WORD
> + * aligned buffers. Includes ARCH_KMALLOC_MINALIGN.
> + * If possible: Do not enable this flag for CONFIG_DEBUG_SLAB, it disables
> + * some debug features.
> + */
> +#define ARCH_SLAB_MINALIGN 0
> +#endif
> +
> /*
> * struct kmem_cache
> *
> diff --git a/mm/slab.c b/mm/slab.c
> index bac0f4f..7401ddc 100644
> --- a/mm/slab.c
> +++ b/mm/slab.c
> @@ -144,30 +144,6 @@
> #define BYTES_PER_WORD sizeof(void *)
> #define REDZONE_ALIGN max(BYTES_PER_WORD, __alignof__(unsigned long long))
>
> -#ifndef ARCH_KMALLOC_MINALIGN
> -/*
> - * Enforce a minimum alignment for the kmalloc caches.
> - * Usually, the kmalloc caches are cache_line_size() aligned, except when
> - * DEBUG and FORCED_DEBUG are enabled, then they are BYTES_PER_WORD aligned.
> - * Some archs want to perform DMA into kmalloc caches and need a guaranteed
> - * alignment larger than the alignment of a 64-bit integer.
> - * ARCH_KMALLOC_MINALIGN allows that.
> - * Note that increasing this value may disable some debug features.
> - */
> -#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
> -#endif
> -
> -#ifndef ARCH_SLAB_MINALIGN
> -/*
> - * Enforce a minimum alignment for all caches.
> - * Intended for archs that get misalignment faults even for BYTES_PER_WORD
> - * aligned buffers. Includes ARCH_KMALLOC_MINALIGN.
> - * If possible: Do not enable this flag for CONFIG_DEBUG_SLAB, it disables
> - * some debug features.
> - */
> -#define ARCH_SLAB_MINALIGN 0
> -#endif
> -
> #ifndef ARCH_KMALLOC_FLAGS
> #define ARCH_KMALLOC_FLAGS SLAB_HWCACHE_ALIGN
> #endif

2010-05-19 19:23:54

by Pekka Enberg

[permalink] [raw]
Subject: Re: [PATCH 1/4] mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slab_def.h>

Christoph Lameter wrote:
> Maybe we can consolidate that into slab.h so that the alignment is the
> same for all allocators?

But we don't want that for SLOB as discussed in the other thread. It
really wants to be sizeof(unsigned long), not sizeof(unsigned long long).

Pekka

Subject: Re: [PATCH 1/4] mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slab_def.h>


Maybe we can consolidate that into slab.h so that the alignment is the
same for all allocators?

2010-05-19 19:28:28

by David Woodhouse

[permalink] [raw]
Subject: Re: [PATCH 1/4] mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slab_def.h>

On Wed, 2010-05-19 at 14:19 -0500, Christoph Lameter wrote:
>
> Maybe we can consolidate that into slab.h so that the alignment is the
> same for all allocators?

Doing so at least for slub and slab would make sense. I wanted to move
them first though, as a separate step.

--
David Woodhouse Open Source Technology Centre
[email protected] Intel Corporation

2010-05-19 19:33:16

by David Miller

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

From: Matt Mackall <[email protected]>
Date: Wed, 19 May 2010 09:11:47 -0500

> I still think we should add it to all of them as positive documentation
> that this issue has been considered. And then make the kernel not
> compile without it so new arch implementors can't miss it.

I agree and would even go so far as to suggest that we break all
architectures not setting it now.

2010-05-19 19:42:29

by David Miller

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

From: David Woodhouse <[email protected]>
Date: Wed, 19 May 2010 12:16:45 +0100

> On Wed, 2010-05-19 at 14:08 +0300, Pekka Enberg wrote:
>>
>> Acked-by: Pekka Enberg <[email protected]>
>>
>> Are you sending the patches to Linus or do you want me to pull them in
>> slab.git?
>
> I don't mind. Feel free to apply them to slab.git, but be aware that
> Herbert wanted to see a patch fixing sparc32 ARCH_SLAB_MINALIGN before
> the crypto one is applied.
>
> Although arguably SLOB was broken on sparc32 even before the crypto
> patch -- so perhaps that fix shouldn't _have_ to go in first?

Don't worry about sparc, I'll take care of it side-band.

Subject: Re: [PATCH 1/4] mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slab_def.h>

On Wed, 19 May 2010, Pekka Enberg wrote:

> Christoph Lameter wrote:
> > Maybe we can consolidate that into slab.h so that the alignment is the
> > same for all allocators?
>
> But we don't want that for SLOB as discussed in the other thread. It really
> wants to be sizeof(unsigned long), not sizeof(unsigned long long).

__alignof__(unsigned long long)

SLOB needs to respect that as well otherwise objects are not aligned as
required by the compiler.

2010-05-19 19:51:07

by David Miller

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

From: Herbert Xu <[email protected]>
Date: Wed, 19 May 2010 22:59:03 +1000

> On Wed, May 19, 2010 at 03:54:43PM +0300, Pekka Enberg wrote:
>>
>> OK, I'll pick up David's patches and just wait for sparc changes to
>> hit Linus' tree first. Herbert, do I have your ACK for the crypto
>> patches?
>
> Of course:
>
> Acked-by: Herbert Xu <[email protected]>

I just sent Linus a pull request and:

Acked-by: David S. Miller <[email protected]>

2010-05-19 19:56:21

by David Miller

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

From: Christoph Lameter <[email protected]>
Date: Wed, 19 May 2010 10:19:33 -0500 (CDT)

> The assumptions are not arbitrary. It is reasonable to assume that
> structures managed by the slab allocators may contain long long variables
> and that therefore a unsigned long long alignment is required by the
> allocator. It is the *compiler* who tells us that long long needs to be
> aligned at double word boundaries. If an arch does not require long long
> alignment on double word boundaries then the *compiler* should tell us
> that and then the allocators will align on word boundaries.

That is a good point.

So really, __alignof__(unsigned long long) is technically always right.
Because it should evaluate to "4" on x86-32, for example.

2010-05-20 03:43:04

by FUJITA Tomonori

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

On Wed, 19 May 2010 12:33:25 -0700 (PDT)
David Miller <[email protected]> wrote:

> From: Matt Mackall <[email protected]>
> Date: Wed, 19 May 2010 09:11:47 -0500
>
> > I still think we should add it to all of them as positive documentation
> > that this issue has been considered. And then make the kernel not
> > compile without it so new arch implementors can't miss it.
>
> I agree and would even go so far as to suggest that we break all
> architectures not setting it now.

About documentation, I think that ARCH_KMALLOC_MINALIGN description
would fit in "Platform Issues" section in DMA-API-HOWTO. I'll add it
later.

2010-05-20 03:46:05

by David Miller

[permalink] [raw]
Subject: Re: [BUG] SLOB breaks Crypto

From: FUJITA Tomonori <[email protected]>
Date: Thu, 20 May 2010 12:38:01 +0900

> On Wed, 19 May 2010 12:33:25 -0700 (PDT)
> David Miller <[email protected]> wrote:
>
>> From: Matt Mackall <[email protected]>
>> Date: Wed, 19 May 2010 09:11:47 -0500
>>
>> > I still think we should add it to all of them as positive documentation
>> > that this issue has been considered. And then make the kernel not
>> > compile without it so new arch implementors can't miss it.
>>
>> I agree and would even go so far as to suggest that we break all
>> architectures not setting it now.
>
> About documentation, I think that ARCH_KMALLOC_MINALIGN description
> would fit in "Platform Issues" section in DMA-API-HOWTO. I'll add it
> later.

Ok, good idea.

2010-05-20 16:48:07

by Manfred Spraul

[permalink] [raw]
Subject: Re: [PATCH 1/4] mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slab_def.h>

On 05/19/2010 08:10 PM, David Woodhouse wrote:
>> * Unless debug options are enabled, the kernel uses cache_line_size()
>> automatically.
>>
> ... that's a lie.
>
>
You are right, I didn't notice that there are now 8 and 16-byte kmalloc
caches.

Apart from that:

KMALLOC_FLAGS is SLAB_HWCACHE_ALIGN.
SLAB_HWCACHE_ALIGN defaults the alignment to cache_line_size().


Did I overlook anything else?

--
Manfred