Merge remote-tracking branch 'origin/clustered' into aks_dev_clus
authorAkshay Giridhar <akshay87@vt.edu>
Tue, 24 Jun 2014 21:39:59 +0000 (17:39 -0400)
committerAkshay Giridhar <akshay87@vt.edu>
Tue, 24 Jun 2014 21:39:59 +0000 (17:39 -0400)
Conflicts:
fs/exec.c
include/linux/popcorn.h
include/linux/process_server.h
kernel/futex.c
kernel/kinit.c
kernel/process_server.c
kernel/sched.c
pcnmsg/pcn_kmsg.c

84 files changed:
aks_config [new file with mode: 0755]
arch/microblaze/boot/dts/system.dts [changed from symlink to file mode: 0644]
arch/x86/boot/main.c
arch/x86/include/asm/futex.h
arch/x86/include/asm/mmu_context.h
arch/x86/kernel/alternative.c
arch/x86/kernel/cpu/Makefile
arch/x86/kernel/cpu/proc.c
arch/x86/kernel/cpu/proc_remote.c [new file with mode: 0644]
arch/x86/kernel/dumpstack.c
arch/x86/kernel/e820.c
arch/x86/kernel/process.c
arch/x86/kernel/signal.c
arch/x86/mm/gup.c
arch/x86/um/sysrq_64.c
fs/binfmt_elf.c
fs/exec.c
fs/file.c
fs/open.c
fs/proc/Makefile
fs/proc/array.c
fs/proc/base.c
fs/proc/krninfo.c [new file with mode: 0644]
fs/proc/meminfo.c
fs/proc/meminfo_remote.c [new file with mode: 0644]
fs/proc/remote_proc_pid.c [new file with mode: 0644]
fs/proc/remote_proc_pid.h [new file with mode: 0644]
fs/proc/remote_proc_pid_files.c [new file with mode: 0644]
fs/proc/remote_proc_pid_files.h [new file with mode: 0644]
include/asm-generic/siginfo.h
include/linux/cpumask.h
include/linux/file.h
include/linux/fs.h
include/linux/futex.h
include/linux/ipc.h
include/linux/ipc_namespace.h
include/linux/kmod.h
include/linux/mm.h
include/linux/mm_types.h
include/linux/pcn_kmsg.h
include/linux/pid_namespace.h
include/linux/popcorn.h [deleted file]
include/linux/proc_fs.h
include/linux/process_server.h
include/linux/sched.h
include/linux/sem.h
include/linux/threads.h
include/linux/workqueue.h
include/popcorn/global_spinlock.h [new file with mode: 0644]
include/popcorn/init.h [new file with mode: 0644]
include/popcorn/ipc.h [new file with mode: 0644]
include/popcorn/pid.h [new file with mode: 0644]
include/popcorn/remote_pfn.h [new file with mode: 0644]
include/popcorn/remote_proc_pid.h [new file with mode: 0644]
include/popcorn/request_data.h [new file with mode: 0644]
init/main.c
ipc/Makefile
ipc/remote_ipc_function.h [new file with mode: 0644]
ipc/sem.c
ipc/sem_remote.c [new file with mode: 0644]
ipc/sem_remote.h [new file with mode: 0644]
ipc/shm.c
ipc/shm_remote.c [new file with mode: 0644]
ipc/shm_remote.h [new file with mode: 0644]
ipc/util.c
ipc/util.h
kernel/Makefile
kernel/cpu.c
kernel/exit.c
kernel/fork.c
kernel/futex.c
kernel/futex_remote.c [new file with mode: 0644]
kernel/futex_remote.h [new file with mode: 0644]
kernel/global_spinlock.c [new file with mode: 0644]
kernel/kinit.c
kernel/kmod.c
kernel/pid.c
kernel/process_server.c
kernel/sched.c
kernel/signal.c
kernel/timer.c
mm/memory.c
pcnmsg/pcn_kmsg.c
script64.gdb [deleted file]

diff --git a/aks_config b/aks_config
new file mode 100755 (executable)
index 0000000..31ead95
--- /dev/null
@@ -0,0 +1,4073 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# Linux/x86_64 3.2.14popcorn_ben Kernel Configuration
+#
+CONFIG_64BIT=y
+# CONFIG_X86_32 is not set
+CONFIG_X86_64=y
+CONFIG_X86=y
+CONFIG_INSTRUCTION_DECODER=y
+CONFIG_OUTPUT_FORMAT="elf64-x86-64"
+CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_ARCH_CLOCKSOURCE_DATA=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=y
+CONFIG_NEED_SG_DMA_LENGTH=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_BUG_RELATIVE_POINTERS=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=y
+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_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_ZONE_DMA32=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_AUDIT_ARCH=y
+CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
+CONFIG_X86_64_SMP=y
+CONFIG_X86_HT=y
+CONFIG_HAVE_POPCORN_ARCH_SUPPORT=y
+CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11"
+# CONFIG_KTIME_SCALAR is not set
+CONFIG_ARCH_CPU_PROBE_RELEASE=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_HAVE_IRQ_WORK=y
+CONFIG_IRQ_WORK=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_CROSS_COMPILE=""
+CONFIG_LOCALVERSION="davek+saif+aks"
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_BZIP2=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_XZ=y
+CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_KERNEL_GZIP=y
+# CONFIG_KERNEL_BZIP2 is not set
+# CONFIG_KERNEL_LZMA is not set
+# CONFIG_KERNEL_XZ is not set
+# CONFIG_KERNEL_LZO is not set
+CONFIG_DEFAULT_HOSTNAME="(none)"
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_POSIX_MQUEUE_SYSCTL=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_FHANDLE is not set
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+CONFIG_AUDIT_WATCH=y
+CONFIG_AUDIT_TREE=y
+CONFIG_HAVE_GENERIC_HARDIRQS=y
+
+#
+# IRQ subsystem
+#
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HAVE_SPARSE_IRQ=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_IRQ_SHOW=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_IRQ_FORCED_THREADING=y
+CONFIG_SPARSE_IRQ=y
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_PREEMPT_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=64
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_RCU_FAST_NO_HZ is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=18
+CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
+CONFIG_CGROUPS=y
+# CONFIG_CGROUP_DEBUG is not set
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CPUSETS=y
+CONFIG_PROC_PID_CPUSET=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_RESOURCE_COUNTERS=y
+CONFIG_CGROUP_MEM_RES_CTLR=y
+CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y
+CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED=y
+# CONFIG_CGROUP_PERF is not set
+CONFIG_CGROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_CFS_BANDWIDTH is not set
+CONFIG_RT_GROUP_SCHED=y
+# CONFIG_BLK_CGROUP is not set
+CONFIG_NAMESPACES=y
+CONFIG_UTS_NS=y
+CONFIG_IPC_NS=y
+CONFIG_USER_NS=y
+CONFIG_PID_NS=y
+CONFIG_NET_NS=y
+# CONFIG_SCHED_AUTOGROUP is not set
+CONFIG_MM_OWNER=y
+# CONFIG_SYSFS_DEPRECATED is not set
+CONFIG_RELAY=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+CONFIG_RD_BZIP2=y
+CONFIG_RD_LZMA=y
+CONFIG_RD_XZ=y
+CONFIG_RD_LZO=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+# CONFIG_EXPERT is not set
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_PCSPKR_PLATFORM=y
+CONFIG_HAVE_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_EMBEDDED is not set
+CONFIG_HAVE_PERF_EVENTS=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_PERF_EVENTS=y
+CONFIG_PERF_COUNTERS=y
+# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_SLUB_DEBUG=y
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+CONFIG_PROFILING=y
+CONFIG_TRACEPOINTS=y
+CONFIG_OPROFILE=m
+# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+# CONFIG_JUMP_LABEL 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_USE_GENERIC_SMP_HELPERS=y
+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
+CONFIG_HAVE_DMA_API_DEBUG=y
+CONFIG_HAVE_HW_BREAKPOINT=y
+CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
+CONFIG_HAVE_USER_RETURN_NOTIFIER=y
+CONFIG_HAVE_PERF_EVENTS_NMI=y
+CONFIG_HAVE_ARCH_JUMP_LABEL=y
+CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+CONFIG_SLABINFO=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 is not set
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
+CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_BSGLIB=y
+CONFIG_BLK_DEV_INTEGRITY=y
+CONFIG_BLOCK_COMPAT=y
+
+#
+# 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=y
+
+#
+# Processor type and features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
+CONFIG_SMP=y
+CONFIG_X86_MPPARSE=y
+CONFIG_X86_EXTENDED_PLATFORM=y
+# CONFIG_X86_VSMP is not set
+CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
+CONFIG_SCHED_OMIT_FRAME_POINTER=y
+# CONFIG_PARAVIRT_GUEST is not set
+CONFIG_NO_BOOTMEM=y
+# CONFIG_MEMTEST is not set
+# CONFIG_MK8 is not set
+# CONFIG_MPSC is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_MATOM is not set
+CONFIG_GENERIC_CPU=y
+CONFIG_X86_INTERNODE_CACHE_SHIFT=7
+CONFIG_X86_CMPXCHG=y
+CONFIG_CMPXCHG_LOCAL=y
+CONFIG_CMPXCHG_DOUBLE=y
+CONFIG_X86_L1_CACHE_SHIFT=6
+CONFIG_X86_XADD=y
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_TSC=y
+CONFIG_X86_CMPXCHG64=y
+CONFIG_X86_CMOV=y
+CONFIG_X86_MINIMUM_CPU_FAMILY=64
+CONFIG_X86_DEBUGCTLMSR=y
+CONFIG_CPU_SUP_INTEL=y
+CONFIG_CPU_SUP_AMD=y
+CONFIG_CPU_SUP_CENTAUR=y
+CONFIG_HPET_TIMER=y
+CONFIG_HPET_EMULATE_RTC=y
+CONFIG_DMI=y
+CONFIG_GART_IOMMU=y
+CONFIG_CALGARY_IOMMU=y
+CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y
+CONFIG_SWIOTLB=y
+CONFIG_IOMMU_HELPER=y
+# CONFIG_MAXSMP is not set
+CONFIG_NR_CPUS=64
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+# CONFIG_IRQ_TIME_ACCOUNTING is not set
+# CONFIG_PREEMPT_NONE is not set
+CONFIG_PREEMPT_VOLUNTARY=y
+# CONFIG_PREEMPT is not set
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
+CONFIG_X86_MCE=y
+CONFIG_X86_MCE_INTEL=y
+CONFIG_X86_MCE_AMD=y
+CONFIG_X86_MCE_THRESHOLD=y
+CONFIG_X86_MCE_INJECT=m
+CONFIG_X86_THERMAL_VECTOR=y
+CONFIG_I8K=m
+CONFIG_MICROCODE=m
+CONFIG_MICROCODE_INTEL=y
+CONFIG_MICROCODE_AMD=y
+CONFIG_MICROCODE_OLD_INTERFACE=y
+CONFIG_X86_MSR=m
+CONFIG_X86_CPUID=m
+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
+CONFIG_ARCH_DMA_ADDR_T_64BIT=y
+CONFIG_DIRECT_GBPAGES=y
+CONFIG_NUMA=y
+CONFIG_AMD_NUMA=y
+CONFIG_X86_64_ACPI_NUMA=y
+CONFIG_NODES_SPAN_OTHER_NODES=y
+# CONFIG_NUMA_EMU is not set
+CONFIG_NODES_SHIFT=6
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_PROC_KCORE_TEXT=y
+CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_SPARSEMEM_MANUAL=y
+CONFIG_SPARSEMEM=y
+CONFIG_NEED_MULTIPLE_NODES=y
+CONFIG_HAVE_MEMORY_PRESENT=y
+CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER=y
+CONFIG_SPARSEMEM_VMEMMAP=y
+CONFIG_HAVE_MEMBLOCK=y
+# CONFIG_MEMORY_HOTPLUG is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=999999
+# CONFIG_COMPACTION is not set
+CONFIG_MIGRATION=y
+CONFIG_PHYS_ADDR_T_64BIT=y
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_KSM=y
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
+CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
+CONFIG_MEMORY_FAILURE=y
+# CONFIG_HWPOISON_INJECT is not set
+# CONFIG_TRANSPARENT_HUGEPAGE is not set
+# CONFIG_CLEANCACHE is not set
+CONFIG_X86_CHECK_BIOS_CORRUPTION=y
+CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
+CONFIG_X86_RESERVE_LOW=64
+CONFIG_MTRR=y
+CONFIG_MTRR_SANITIZER=y
+CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
+CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
+CONFIG_X86_PAT=y
+CONFIG_ARCH_USES_PG_UNCACHED=y
+CONFIG_ARCH_RANDOM=y
+CONFIG_EFI=y
+CONFIG_SECCOMP=y
+CONFIG_CC_STACKPROTECTOR=y
+CONFIG_HZ_100=y
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=100
+CONFIG_SCHED_HRTICK=y
+CONFIG_KEXEC=y
+CONFIG_CRASH_DUMP=y
+CONFIG_KEXEC_JUMP=y
+CONFIG_PHYSICAL_START=0x200000
+CONFIG_RELOCATABLE=y
+CONFIG_PHYSICAL_ALIGN=0x1000000
+CONFIG_HOTPLUG_CPU=y
+# CONFIG_COMPAT_VDSO is not set
+# CONFIG_CMDLINE_BOOL is not set
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+CONFIG_USE_PERCPU_NUMA_NODE_ID=y
+
+#
+# Power management and ACPI options
+#
+CONFIG_ARCH_HIBERNATION_HEADER=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_HIBERNATE_CALLBACKS=y
+CONFIG_HIBERNATION=y
+CONFIG_PM_STD_PARTITION=""
+CONFIG_PM_SLEEP=y
+CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_RUNTIME=y
+CONFIG_PM=y
+CONFIG_PM_DEBUG=y
+# CONFIG_PM_ADVANCED_DEBUG is not set
+CONFIG_PM_TEST_SUSPEND=y
+CONFIG_CAN_PM_TRACE=y
+CONFIG_PM_TRACE=y
+CONFIG_PM_TRACE_RTC=y
+CONFIG_ACPI=y
+CONFIG_ACPI_SLEEP=y
+CONFIG_ACPI_PROCFS=y
+CONFIG_ACPI_PROCFS_POWER=y
+# CONFIG_ACPI_EC_DEBUGFS is not set
+CONFIG_ACPI_PROC_EVENT=y
+CONFIG_ACPI_AC=y
+CONFIG_ACPI_BATTERY=y
+CONFIG_ACPI_BUTTON=y
+CONFIG_ACPI_VIDEO=m
+CONFIG_ACPI_FAN=y
+CONFIG_ACPI_DOCK=y
+CONFIG_ACPI_PROCESSOR=y
+# CONFIG_ACPI_IPMI is not set
+CONFIG_ACPI_HOTPLUG_CPU=y
+CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
+CONFIG_ACPI_THERMAL=y
+CONFIG_ACPI_NUMA=y
+CONFIG_ACPI_CUSTOM_DSDT_FILE=""
+# CONFIG_ACPI_CUSTOM_DSDT is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_PCI_SLOT=y
+CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_CONTAINER=y
+CONFIG_ACPI_SBS=y
+# CONFIG_ACPI_HED is not set
+# CONFIG_ACPI_CUSTOM_METHOD is not set
+# CONFIG_ACPI_APEI is not set
+CONFIG_SFI=y
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+
+#
+# x86 CPU frequency scaling drivers
+#
+# CONFIG_X86_PCC_CPUFREQ is not set
+CONFIG_X86_ACPI_CPUFREQ=y
+CONFIG_X86_POWERNOW_K8=y
+CONFIG_X86_SPEEDSTEP_CENTRINO=y
+CONFIG_X86_P4_CLOCKMOD=m
+
+#
+# shared options
+#
+CONFIG_X86_SPEEDSTEP_LIB=m
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+# CONFIG_INTEL_IDLE is not set
+
+#
+# Memory power savings
+#
+CONFIG_I7300_IDLE_IOAT_CHANNEL=y
+CONFIG_I7300_IDLE=m
+
+#
+# Bus options (PCI etc.)
+#
+CONFIG_PCI=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_PCI_DOMAINS=y
+# CONFIG_PCI_CNB20LE_QUIRK is not set
+CONFIG_PCIEPORTBUS=y
+CONFIG_HOTPLUG_PCI_PCIE=y
+CONFIG_PCIEAER=y
+# CONFIG_PCIE_ECRC is not set
+# CONFIG_PCIEAER_INJECT is not set
+CONFIG_PCIEASPM=y
+# CONFIG_PCIEASPM_DEBUG is not set
+CONFIG_PCIE_PME=y
+CONFIG_ARCH_SUPPORTS_MSI=y
+CONFIG_PCI_MSI=y
+# CONFIG_PCI_DEBUG is not set
+CONFIG_PCI_STUB=m
+CONFIG_HT_IRQ=y
+CONFIG_PCI_ATS=y
+CONFIG_PCI_IOV=y
+# CONFIG_PCI_PRI is not set
+# CONFIG_PCI_PASID is not set
+CONFIG_PCI_IOAPIC=y
+CONFIG_PCI_LABEL=y
+CONFIG_ISA_DMA_API=y
+CONFIG_AMD_NB=y
+# CONFIG_PCCARD is not set
+CONFIG_HOTPLUG_PCI=y
+CONFIG_HOTPLUG_PCI_FAKE=m
+CONFIG_HOTPLUG_PCI_ACPI=m
+CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+CONFIG_HOTPLUG_PCI_CPCI=y
+CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
+CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
+CONFIG_HOTPLUG_PCI_SHPC=m
+# CONFIG_RAPIDIO is not set
+
+#
+# Executable file formats / Emulations
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_COMPAT_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_HAVE_AOUT is not set
+CONFIG_BINFMT_MISC=m
+CONFIG_IA32_EMULATION=y
+# CONFIG_IA32_AOUT is not set
+CONFIG_COMPAT=y
+CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
+CONFIG_SYSVIPC_COMPAT=y
+CONFIG_KEYS_COMPAT=y
+CONFIG_HAVE_TEXT_POKE_SMP=y
+CONFIG_NET=y
+CONFIG_COMPAT_NETLINK_MESSAGES=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_XFRM_IPCOMP=m
+CONFIG_NET_KEY=m
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+# CONFIG_IP_FIB_TRIE_STATS is not set
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_ROUTE_CLASSID=y
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+# CONFIG_NET_IPGRE_DEMUX is not set
+CONFIG_IP_MROUTE=y
+# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_LRO=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+CONFIG_TCP_CONG_ADVANCED=y
+CONFIG_TCP_CONG_BIC=m
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_TCP_CONG_WESTWOOD=m
+CONFIG_TCP_CONG_HTCP=m
+CONFIG_TCP_CONG_HSTCP=m
+CONFIG_TCP_CONG_HYBLA=m
+CONFIG_TCP_CONG_VEGAS=m
+CONFIG_TCP_CONG_SCALABLE=m
+CONFIG_TCP_CONG_LP=m
+CONFIG_TCP_CONG_VENO=m
+CONFIG_TCP_CONG_YEAH=m
+CONFIG_TCP_CONG_ILLINOIS=m
+CONFIG_DEFAULT_CUBIC=y
+# CONFIG_DEFAULT_RENO is not set
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_TCP_MD5SIG=y
+CONFIG_IPV6=y
+CONFIG_IPV6_PRIVACY=y
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_SIT_6RD is not set
+CONFIG_IPV6_NDISC_NODETYPE=y
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+# CONFIG_IPV6_SUBTREES is not set
+# CONFIG_IPV6_MROUTE is not set
+CONFIG_NETLABEL=y
+CONFIG_NETWORK_SECMARK=y
+# CONFIG_NETWORK_PHY_TIMESTAMPING 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_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+# CONFIG_NF_CONNTRACK_TIMESTAMP is not set
+CONFIG_NF_CT_PROTO_DCCP=m
+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_BROADCAST=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+# CONFIG_NF_CONNTRACK_SNMP is not set
+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=m
+CONFIG_NETFILTER_XTABLES=m
+
+#
+# Xtables combined modules
+#
+CONFIG_NETFILTER_XT_MARK=m
+CONFIG_NETFILTER_XT_CONNMARK=m
+
+#
+# Xtables targets
+#
+# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set
+# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=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_IDLETIMER is not set
+CONFIG_NETFILTER_XT_TARGET_LED=m
+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_TEE is not set
+CONFIG_NETFILTER_XT_TARGET_TPROXY=m
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+
+#
+# Xtables matches
+#
+# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set
+CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
+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_CPU is not set
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set
+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_IPVS is not set
+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_OSF=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_RECENT=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_SOCKET=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+# CONFIG_IP_SET is not set
+CONFIG_IP_VS=m
+CONFIG_IP_VS_IPV6=y
+# CONFIG_IP_VS_DEBUG is not set
+CONFIG_IP_VS_TAB_BITS=12
+
+#
+# IPVS transport protocol load balancing support
+#
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_PROTO_AH_ESP=y
+CONFIG_IP_VS_PROTO_ESP=y
+CONFIG_IP_VS_PROTO_AH=y
+# CONFIG_IP_VS_PROTO_SCTP is not set
+
+#
+# IPVS scheduler
+#
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_WRR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_NQ=m
+
+#
+# IPVS application helper
+#
+CONFIG_IP_VS_FTP=m
+CONFIG_IP_VS_NFCT=y
+# CONFIG_IP_VS_PE_SIP 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=m
+CONFIG_IP_NF_IPTABLES=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_PROTO_DCCP=m
+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=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_SECURITY=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV6=m
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_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_IP6_NF_SECURITY=m
+
+#
+# DECnet: Netfilter Configuration
+#
+CONFIG_DECNET_NF_GRABULATOR=m
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_IP6=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+CONFIG_BRIDGE_EBT_NFLOG=m
+CONFIG_IP_DCCP=m
+CONFIG_INET_DCCP_DIAG=m
+
+#
+# DCCP CCIDs Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP_CCID2_DEBUG is not set
+CONFIG_IP_DCCP_CCID3=y
+# CONFIG_IP_DCCP_CCID3_DEBUG is not set
+CONFIG_IP_DCCP_TFRC_LIB=y
+
+#
+# DCCP Kernel Hacking
+#
+# CONFIG_IP_DCCP_DEBUG is not set
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+# CONFIG_SCTP_HMAC_SHA1 is not set
+CONFIG_SCTP_HMAC_MD5=y
+CONFIG_RDS=m
+CONFIG_RDS_TCP=m
+# CONFIG_RDS_DEBUG is not set
+CONFIG_TIPC=m
+# CONFIG_TIPC_ADVANCED is not set
+# CONFIG_TIPC_DEBUG is not set
+CONFIG_ATM=m
+CONFIG_ATM_CLIP=m
+# CONFIG_ATM_CLIP_NO_ICMP is not set
+CONFIG_ATM_LANE=m
+CONFIG_ATM_MPOA=m
+CONFIG_ATM_BR2684=m
+# CONFIG_ATM_BR2684_IPFILTER is not set
+# CONFIG_L2TP is not set
+CONFIG_STP=m
+CONFIG_GARP=m
+CONFIG_BRIDGE=m
+CONFIG_BRIDGE_IGMP_SNOOPING=y
+CONFIG_NET_DSA=y
+CONFIG_NET_DSA_TAG_DSA=y
+CONFIG_NET_DSA_TAG_EDSA=y
+CONFIG_NET_DSA_TAG_TRAILER=y
+CONFIG_NET_DSA_MV88E6XXX=y
+CONFIG_NET_DSA_MV88E6060=y
+CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y
+CONFIG_NET_DSA_MV88E6131=y
+CONFIG_NET_DSA_MV88E6123_61_65=y
+CONFIG_VLAN_8021Q=m
+CONFIG_VLAN_8021Q_GVRP=y
+CONFIG_DECNET=m
+# CONFIG_DECNET_ROUTER is not set
+CONFIG_LLC=y
+CONFIG_LLC2=m
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=m
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
+CONFIG_IPDDP_DECAP=y
+CONFIG_X25=m
+CONFIG_LAPB=m
+CONFIG_ECONET=m
+CONFIG_ECONET_AUNUDP=y
+CONFIG_ECONET_NATIVE=y
+CONFIG_WAN_ROUTER=m
+CONFIG_PHONET=m
+CONFIG_IEEE802154=m
+# CONFIG_IEEE802154_6LOWPAN 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_ATM=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_MULTIQ=m
+CONFIG_NET_SCH_RED=m
+# CONFIG_NET_SCH_SFB is not set
+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=m
+# CONFIG_NET_SCH_MQPRIO is not set
+# CONFIG_NET_SCH_CHOKE is not set
+# CONFIG_NET_SCH_QFQ 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_FW=m
+CONFIG_NET_CLS_U32=m
+# CONFIG_CLS_U32_PERF is not set
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_FLOW=m
+CONFIG_NET_CLS_CGROUP=y
+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=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_NAT=m
+CONFIG_NET_ACT_PEDIT=m
+CONFIG_NET_ACT_SIMP=m
+CONFIG_NET_ACT_SKBEDIT=m
+# CONFIG_NET_ACT_CSUM is not set
+# CONFIG_NET_CLS_IND is not set
+CONFIG_NET_SCH_FIFO=y
+CONFIG_DCB=y
+CONFIG_DNS_RESOLVER=y
+# CONFIG_BATMAN_ADV is not set
+CONFIG_RPS=y
+CONFIG_RFS_ACCEL=y
+CONFIG_XPS=y
+CONFIG_HAVE_BPF_JIT=y
+# CONFIG_BPF_JIT is not set
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_NET_DROP_MONITOR 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=m
+# CONFIG_AF_RXRPC_DEBUG is not set
+CONFIG_RXKAD=m
+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 is not set
+# CONFIG_WIRELESS_EXT_SYSFS is not set
+CONFIG_LIB80211=m
+CONFIG_LIB80211_CRYPT_WEP=m
+CONFIG_LIB80211_CRYPT_CCMP=m
+CONFIG_LIB80211_CRYPT_TKIP=m
+# CONFIG_LIB80211_DEBUG is not set
+
+#
+# CFG80211 needs to be enabled for MAC80211
+#
+# CONFIG_WIMAX is not set
+CONFIG_RFKILL=y
+CONFIG_RFKILL_LEDS=y
+CONFIG_RFKILL_INPUT=y
+# CONFIG_RFKILL_REGULATOR is not set
+CONFIG_NET_9P=m
+CONFIG_NET_9P_VIRTIO=m
+# CONFIG_NET_9P_DEBUG is not set
+# CONFIG_CAIF is not set
+# CONFIG_CEPH_LIB is not set
+# CONFIG_NFC is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_STANDALONE is not set
+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_REGMAP=y
+CONFIG_REGMAP_I2C=m
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+CONFIG_MTD=m
+CONFIG_MTD_TESTS=m
+CONFIG_MTD_REDBOOT_PARTS=m
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+CONFIG_MTD_AR7_PARTS=m
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_HAVE_MTD_OTP=y
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+CONFIG_MTD_BLOCK_RO=m
+CONFIG_FTL=m
+CONFIG_NFTL=m
+CONFIG_NFTL_RW=y
+CONFIG_INFTL=m
+CONFIG_RFD_FTL=m
+CONFIG_SSFDC=m
+# CONFIG_SM_FTL is not set
+CONFIG_MTD_OOPS=m
+# CONFIG_MTD_SWAP is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+CONFIG_MTD_JEDECPROBE=m
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=m
+CONFIG_MTD_CFI_AMDSTD=m
+CONFIG_MTD_CFI_STAA=m
+CONFIG_MTD_CFI_UTIL=m
+CONFIG_MTD_RAM=m
+CONFIG_MTD_ROM=m
+CONFIG_MTD_ABSENT=m
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=m
+# CONFIG_MTD_PHYSMAP_COMPAT is not set
+CONFIG_MTD_SC520CDP=m
+CONFIG_MTD_NETSC520=m
+CONFIG_MTD_TS5500=m
+CONFIG_MTD_SBC_GXX=m
+CONFIG_MTD_AMD76XROM=m
+CONFIG_MTD_ICHXROM=m
+CONFIG_MTD_ESB2ROM=m
+CONFIG_MTD_CK804XROM=m
+CONFIG_MTD_SCB2_FLASH=m
+CONFIG_MTD_NETtel=m
+CONFIG_MTD_L440GX=m
+CONFIG_MTD_PCI=m
+CONFIG_MTD_GPIO_ADDR=m
+CONFIG_MTD_INTEL_VR_NOR=m
+CONFIG_MTD_PLATRAM=m
+# CONFIG_MTD_LATCH_ADDR is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_PMC551=m
+# CONFIG_MTD_PMC551_BUGFIX is not set
+# CONFIG_MTD_PMC551_DEBUG is not set
+CONFIG_MTD_DATAFLASH=m
+# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
+CONFIG_MTD_DATAFLASH_OTP=y
+CONFIG_MTD_M25P80=m
+CONFIG_M25PXX_USE_FAST_READ=y
+CONFIG_MTD_SST25L=m
+CONFIG_MTD_SLRAM=m
+CONFIG_MTD_PHRAM=m
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=4096
+CONFIG_MTDRAM_ERASE_SIZE=128
+CONFIG_MTD_BLOCK2MTD=m
+
+#
+# Disk-On-Chip Device Drivers
+#
+CONFIG_MTD_DOC2000=m
+CONFIG_MTD_DOC2001=m
+CONFIG_MTD_DOC2001PLUS=m
+# CONFIG_MTD_DOCG3 is not set
+CONFIG_MTD_DOCPROBE=m
+CONFIG_MTD_DOCECC=m
+# CONFIG_MTD_DOCPROBE_ADVANCED is not set
+CONFIG_MTD_DOCPROBE_ADDRESS=0x0
+CONFIG_MTD_NAND_ECC=m
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND=m
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_BCH is not set
+# CONFIG_MTD_SM_COMMON is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_DENALI is not set
+CONFIG_MTD_NAND_IDS=m
+# CONFIG_MTD_NAND_RICOH is not set
+CONFIG_MTD_NAND_DISKONCHIP=m
+# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
+CONFIG_MTD_NAND_CAFE=m
+CONFIG_MTD_NAND_NANDSIM=m
+CONFIG_MTD_NAND_PLATFORM=m
+CONFIG_MTD_ALAUDA=m
+CONFIG_MTD_ONENAND=m
+CONFIG_MTD_ONENAND_VERIFY_WRITE=y
+CONFIG_MTD_ONENAND_GENERIC=m
+# CONFIG_MTD_ONENAND_OTP is not set
+CONFIG_MTD_ONENAND_2X_PROGRAM=y
+CONFIG_MTD_ONENAND_SIM=m
+
+#
+# LPDDR flash memory drivers
+#
+CONFIG_MTD_LPDDR=m
+CONFIG_MTD_QINFO_PROBE=m
+CONFIG_MTD_UBI=m
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+CONFIG_MTD_UBI_GLUEBI=m
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_PNP=y
+CONFIG_PNP_DEBUG_MESSAGES=y
+
+#
+# Protocols
+#
+CONFIG_PNPACPI=y
+CONFIG_BLK_DEV=y
+CONFIG_BLK_DEV_FD=m
+CONFIG_BLK_CPQ_DA=m
+CONFIG_BLK_CPQ_CISS_DA=m
+CONFIG_CISS_SCSI_TAPE=y
+CONFIG_BLK_DEV_DAC960=m
+CONFIG_BLK_DEV_UMEM=m
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_DRBD is not set
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_OSD=m
+CONFIG_BLK_DEV_SX8=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=65536
+# CONFIG_BLK_DEV_XIP is not set
+CONFIG_CDROM_PKTCDVD=y
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+CONFIG_VIRTIO_BLK=m
+# CONFIG_BLK_DEV_HD is not set
+# CONFIG_BLK_DEV_RBD is not set
+# CONFIG_SENSORS_LIS3LV02D is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+CONFIG_IBM_ASM=m
+CONFIG_PHANTOM=m
+# CONFIG_INTEL_MID_PTI is not set
+CONFIG_SGI_IOC4=m
+CONFIG_TIFM_CORE=m
+CONFIG_TIFM_7XX1=m
+CONFIG_ICS932S401=m
+CONFIG_ENCLOSURE_SERVICES=m
+CONFIG_HP_ILO=m
+# CONFIG_APDS9802ALS is not set
+CONFIG_ISL29003=m
+# CONFIG_ISL29020 is not set
+CONFIG_SENSORS_TSL2550=m
+# CONFIG_SENSORS_BH1780 is not set
+# CONFIG_SENSORS_BH1770 is not set
+# CONFIG_SENSORS_APDS990X is not set
+# CONFIG_HMC6352 is not set
+CONFIG_DS1682=m
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_VMWARE_BALLOON is not set
+# CONFIG_BMP085 is not set
+# CONFIG_PCH_PHUB is not set
+# CONFIG_USB_SWITCH_FSA9480 is not set
+CONFIG_C2PORT=m
+CONFIG_C2PORT_DURAMAR_2150=m
+
+#
+# EEPROM support
+#
+CONFIG_EEPROM_AT24=m
+CONFIG_EEPROM_AT25=m
+CONFIG_EEPROM_LEGACY=m
+CONFIG_EEPROM_MAX6875=m
+CONFIG_EEPROM_93CX6=m
+# CONFIG_EEPROM_93XX46 is not set
+CONFIG_CB710_CORE=m
+# CONFIG_CB710_DEBUG is not set
+CONFIG_CB710_DEBUG_ASSUMPTIONS=y
+CONFIG_IWMC3200TOP=m
+# CONFIG_IWMC3200TOP_DEBUG is not set
+# CONFIG_IWMC3200TOP_DEBUGFS is not set
+
+#
+# Texas Instruments shared transport line discipline
+#
+# CONFIG_TI_ST is not set
+# CONFIG_SENSORS_LIS3_I2C is not set
+
+#
+# Altera FPGA firmware download module
+#
+# CONFIG_ALTERA_STAPL is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI_MOD=y
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+CONFIG_SCSI_TGT=m
+CONFIG_SCSI_NETLINK=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+CONFIG_CHR_DEV_SCH=m
+CONFIG_SCSI_ENCLOSURE=m
+CONFIG_SCSI_MULTI_LUN=y
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_FC_ATTRS=m
+CONFIG_SCSI_FC_TGT_ATTRS=y
+CONFIG_SCSI_ISCSI_ATTRS=m
+CONFIG_SCSI_SAS_ATTRS=m
+CONFIG_SCSI_SAS_LIBSAS=m
+CONFIG_SCSI_SAS_ATA=y
+CONFIG_SCSI_SAS_HOST_SMP=y
+CONFIG_SCSI_SRP_ATTRS=m
+CONFIG_SCSI_SRP_TGT_ATTRS=y
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=m
+CONFIG_ISCSI_BOOT_SYSFS=m
+CONFIG_SCSI_CXGB3_ISCSI=m
+# CONFIG_SCSI_CXGB4_ISCSI is not set
+CONFIG_SCSI_BNX2_ISCSI=m
+# CONFIG_SCSI_BNX2X_FCOE is not set
+CONFIG_BE2ISCSI=m
+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_ACARD=m
+CONFIG_SCSI_AACRAID=m
+CONFIG_SCSI_AIC7XXX=m
+CONFIG_AIC7XXX_CMDS_PER_DEVICE=8
+CONFIG_AIC7XXX_RESET_DELAY_MS=15000
+CONFIG_AIC7XXX_DEBUG_ENABLE=y
+CONFIG_AIC7XXX_DEBUG_MASK=0
+CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+CONFIG_SCSI_AIC79XX=m
+CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+CONFIG_AIC79XX_RESET_DELAY_MS=5000
+CONFIG_AIC79XX_DEBUG_ENABLE=y
+CONFIG_AIC79XX_DEBUG_MASK=0
+CONFIG_AIC79XX_REG_PRETTY_PRINT=y
+CONFIG_SCSI_AIC94XX=m
+# CONFIG_AIC94XX_DEBUG is not set
+CONFIG_SCSI_MVSAS=m
+CONFIG_SCSI_MVSAS_DEBUG=y
+# CONFIG_SCSI_MVSAS_TASKLET is not set
+# CONFIG_SCSI_MVUMI is not set
+CONFIG_SCSI_DPT_I2O=m
+CONFIG_SCSI_ADVANSYS=m
+CONFIG_SCSI_ARCMSR=m
+CONFIG_MEGARAID_NEWGEN=y
+CONFIG_MEGARAID_MM=m
+CONFIG_MEGARAID_MAILBOX=m
+CONFIG_MEGARAID_LEGACY=m
+CONFIG_MEGARAID_SAS=m
+CONFIG_SCSI_MPT2SAS=m
+CONFIG_SCSI_MPT2SAS_MAX_SGE=128
+# CONFIG_SCSI_MPT2SAS_LOGGING is not set
+CONFIG_SCSI_HPTIOP=m
+CONFIG_SCSI_BUSLOGIC=m
+CONFIG_VMWARE_PVSCSI=m
+CONFIG_LIBFC=m
+CONFIG_LIBFCOE=m
+CONFIG_FCOE=m
+CONFIG_FCOE_FNIC=m
+CONFIG_SCSI_DMX3191D=m
+CONFIG_SCSI_EATA=m
+CONFIG_SCSI_EATA_TAGGED_QUEUE=y
+CONFIG_SCSI_EATA_LINKED_COMMANDS=y
+CONFIG_SCSI_EATA_MAX_TAGS=16
+CONFIG_SCSI_FUTURE_DOMAIN=m
+CONFIG_SCSI_GDTH=m
+# CONFIG_SCSI_ISCI is not set
+CONFIG_SCSI_IPS=m
+CONFIG_SCSI_INITIO=m
+CONFIG_SCSI_INIA100=m
+CONFIG_SCSI_STEX=m
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+CONFIG_SCSI_SYM53C8XX_MMIO=y
+CONFIG_SCSI_IPR=m
+# CONFIG_SCSI_IPR_TRACE is not set
+# CONFIG_SCSI_IPR_DUMP is not set
+CONFIG_SCSI_QLOGIC_1280=m
+CONFIG_SCSI_QLA_FC=m
+CONFIG_SCSI_QLA_ISCSI=m
+CONFIG_SCSI_LPFC=m
+CONFIG_SCSI_LPFC_DEBUG_FS=y
+CONFIG_SCSI_DC395x=m
+CONFIG_SCSI_DC390T=m
+CONFIG_SCSI_DEBUG=m
+CONFIG_SCSI_PMCRAID=m
+# CONFIG_SCSI_PM8001 is not set
+CONFIG_SCSI_SRP=m
+CONFIG_SCSI_BFA_FC=m
+CONFIG_SCSI_DH=y
+CONFIG_SCSI_DH_RDAC=m
+CONFIG_SCSI_DH_HP_SW=m
+CONFIG_SCSI_DH_EMC=m
+CONFIG_SCSI_DH_ALUA=m
+CONFIG_SCSI_OSD_INITIATOR=m
+CONFIG_SCSI_OSD_ULD=m
+CONFIG_SCSI_OSD_DPRINT_SENSE=1
+# CONFIG_SCSI_OSD_DEBUG is not set
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_ATA_VERBOSE_ERROR=y
+CONFIG_ATA_ACPI=y
+CONFIG_SATA_PMP=y
+
+#
+# Controllers with non-SFF native interface
+#
+CONFIG_SATA_AHCI=y
+# CONFIG_SATA_AHCI_PLATFORM is not set
+CONFIG_SATA_INIC162X=y
+# CONFIG_SATA_ACARD_AHCI is not set
+CONFIG_SATA_SIL24=y
+CONFIG_ATA_SFF=y
+
+#
+# SFF controllers with custom DMA interface
+#
+CONFIG_PDC_ADMA=y
+CONFIG_SATA_QSTOR=m
+CONFIG_SATA_SX4=m
+CONFIG_ATA_BMDMA=y
+
+#
+# SATA SFF controllers with BMDMA
+#
+CONFIG_ATA_PIIX=y
+CONFIG_SATA_MV=m
+CONFIG_SATA_NV=m
+CONFIG_SATA_PROMISE=m
+CONFIG_SATA_SIL=m
+CONFIG_SATA_SIS=m
+CONFIG_SATA_SVW=m
+CONFIG_SATA_ULI=m
+CONFIG_SATA_VIA=m
+CONFIG_SATA_VITESSE=m
+
+#
+# PATA SFF controllers with BMDMA
+#
+CONFIG_PATA_ALI=m
+CONFIG_PATA_AMD=m
+# CONFIG_PATA_ARASAN_CF is not set
+CONFIG_PATA_ARTOP=m
+CONFIG_PATA_ATIIXP=m
+CONFIG_PATA_ATP867X=m
+CONFIG_PATA_CMD64X=m
+CONFIG_PATA_CS5520=m
+CONFIG_PATA_CS5530=m
+# CONFIG_PATA_CS5536 is not set
+CONFIG_PATA_CYPRESS=m
+CONFIG_PATA_EFAR=m
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
+CONFIG_PATA_HPT3X2N=m
+CONFIG_PATA_HPT3X3=m
+# CONFIG_PATA_HPT3X3_DMA is not set
+CONFIG_PATA_IT8213=m
+CONFIG_PATA_IT821X=m
+CONFIG_PATA_JMICRON=m
+CONFIG_PATA_MARVELL=m
+CONFIG_PATA_NETCELL=m
+CONFIG_PATA_NINJA32=m
+CONFIG_PATA_NS87415=m
+CONFIG_PATA_OLDPIIX=m
+CONFIG_PATA_OPTIDMA=m
+CONFIG_PATA_PDC2027X=m
+CONFIG_PATA_PDC_OLD=m
+CONFIG_PATA_RADISYS=m
+CONFIG_PATA_RDC=m
+CONFIG_PATA_SC1200=m
+CONFIG_PATA_SCH=m
+CONFIG_PATA_SERVERWORKS=m
+CONFIG_PATA_SIL680=m
+CONFIG_PATA_SIS=y
+# CONFIG_PATA_TOSHIBA is not set
+CONFIG_PATA_TRIFLEX=m
+CONFIG_PATA_VIA=m
+CONFIG_PATA_WINBOND=m
+
+#
+# PIO-only SFF controllers
+#
+CONFIG_PATA_CMD640_PCI=m
+CONFIG_PATA_MPIIX=m
+CONFIG_PATA_NS87410=m
+CONFIG_PATA_OPTI=m
+CONFIG_PATA_RZ1000=m
+
+#
+# Generic fallback / legacy drivers
+#
+CONFIG_PATA_ACPI=y
+CONFIG_ATA_GENERIC=y
+# CONFIG_PATA_LEGACY is not set
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=y
+CONFIG_MD_AUTODETECT=y
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+# CONFIG_MULTICORE_RAID456 is not set
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=y
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=y
+# CONFIG_DM_THIN_PROVISIONING is not set
+CONFIG_DM_MIRROR=y
+# CONFIG_DM_RAID is not set
+# CONFIG_DM_LOG_USERSPACE is not set
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=y
+CONFIG_DM_MULTIPATH_QL=m
+CONFIG_DM_MULTIPATH_ST=m
+# CONFIG_DM_DELAY is not set
+CONFIG_DM_UEVENT=y
+# CONFIG_DM_FLAKEY is not set
+# CONFIG_TARGET_CORE is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+CONFIG_FIREWIRE=m
+CONFIG_FIREWIRE_OHCI=m
+CONFIG_FIREWIRE_OHCI_DEBUG=y
+CONFIG_FIREWIRE_SBP2=m
+CONFIG_FIREWIRE_NET=m
+# CONFIG_FIREWIRE_NOSY is not set
+# CONFIG_I2O is not set
+CONFIG_MACINTOSH_DRIVERS=y
+CONFIG_MAC_EMUMOUSEBTN=y
+CONFIG_NETDEVICES=y
+CONFIG_NET_CORE=y
+CONFIG_BONDING=m
+CONFIG_DUMMY=m
+CONFIG_EQUALIZER=m
+CONFIG_NET_FC=y
+CONFIG_MII=m
+CONFIG_IEEE802154_DRIVERS=m
+# CONFIG_IEEE802154_FAKEHARD is not set
+CONFIG_IFB=m
+CONFIG_MACVLAN=m
+# CONFIG_MACVTAP is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETCONSOLE_DYNAMIC=y
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+CONFIG_TUN=y
+CONFIG_POPCORN_SHMTUN=y
+CONFIG_VETH=m
+CONFIG_VIRTIO_NET=m
+CONFIG_SUNGEM_PHY=m
+CONFIG_ARCNET=m
+CONFIG_ARCNET_1201=m
+CONFIG_ARCNET_1051=m
+CONFIG_ARCNET_RAW=m
+CONFIG_ARCNET_CAP=m
+CONFIG_ARCNET_COM90xx=m
+CONFIG_ARCNET_COM90xxIO=m
+CONFIG_ARCNET_RIM_I=m
+CONFIG_ARCNET_COM20020=m
+CONFIG_ARCNET_COM20020_PCI=m
+CONFIG_ATM_DRIVERS=y
+# CONFIG_ATM_DUMMY is not set
+CONFIG_ATM_TCP=m
+CONFIG_ATM_LANAI=m
+CONFIG_ATM_ENI=m
+# CONFIG_ATM_ENI_DEBUG is not set
+# CONFIG_ATM_ENI_TUNE_BURST is not set
+CONFIG_ATM_FIRESTREAM=m
+CONFIG_ATM_ZATM=m
+# CONFIG_ATM_ZATM_DEBUG is not set
+# CONFIG_ATM_NICSTAR is not set
+CONFIG_ATM_IDT77252=m
+# CONFIG_ATM_IDT77252_DEBUG is not set
+# CONFIG_ATM_IDT77252_RCV_ALL is not set
+CONFIG_ATM_IDT77252_USE_SUNI=y
+CONFIG_ATM_AMBASSADOR=m
+# CONFIG_ATM_AMBASSADOR_DEBUG is not set
+CONFIG_ATM_HORIZON=m
+# CONFIG_ATM_HORIZON_DEBUG is not set
+CONFIG_ATM_IA=m
+# CONFIG_ATM_IA_DEBUG is not set
+CONFIG_ATM_FORE200E=m
+# CONFIG_ATM_FORE200E_USE_TASKLET is not set
+CONFIG_ATM_FORE200E_TX_RETRY=16
+CONFIG_ATM_FORE200E_DEBUG=0
+CONFIG_ATM_HE=m
+CONFIG_ATM_HE_USE_SUNI=y
+CONFIG_ATM_SOLOS=m
+
+#
+# CAIF transport drivers
+#
+CONFIG_ETHERNET=y
+CONFIG_MDIO=m
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+CONFIG_NET_VENDOR_ADAPTEC=y
+CONFIG_ADAPTEC_STARFIRE=m
+CONFIG_NET_VENDOR_ALTEON=y
+CONFIG_ACENIC=m
+# CONFIG_ACENIC_OMIT_TIGON_I is not set
+CONFIG_NET_VENDOR_AMD=y
+CONFIG_AMD8111_ETH=m
+CONFIG_PCNET32=m
+CONFIG_NET_VENDOR_ATHEROS=y
+CONFIG_ATL2=m
+CONFIG_ATL1=m
+CONFIG_ATL1E=m
+CONFIG_ATL1C=m
+CONFIG_NET_VENDOR_BROADCOM=y
+CONFIG_B44=m
+CONFIG_B44_PCI_AUTOSELECT=y
+CONFIG_B44_PCICORE_AUTOSELECT=y
+CONFIG_B44_PCI=y
+CONFIG_BNX2=m
+CONFIG_CNIC=m
+CONFIG_TIGON3=m
+CONFIG_BNX2X=m
+CONFIG_NET_VENDOR_BROCADE=y
+# CONFIG_BNA is not set
+CONFIG_NET_VENDOR_CHELSIO=y
+CONFIG_CHELSIO_T1=m
+CONFIG_CHELSIO_T1_1G=y
+CONFIG_CHELSIO_T3=m
+# CONFIG_CHELSIO_T4 is not set
+# CONFIG_CHELSIO_T4VF is not set
+CONFIG_NET_VENDOR_CISCO=y
+CONFIG_ENIC=m
+CONFIG_DNET=m
+CONFIG_NET_VENDOR_DEC=y
+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 is not set
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_ULI526X=m
+CONFIG_NET_VENDOR_DLINK=y
+# CONFIG_DL2K is not set
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_NET_VENDOR_EMULEX=y
+CONFIG_BE2NET=m
+CONFIG_NET_VENDOR_EXAR=y
+CONFIG_S2IO=m
+CONFIG_VXGE=m
+# CONFIG_VXGE_DEBUG_TRACE_ALL is not set
+CONFIG_NET_VENDOR_HP=y
+CONFIG_HP100=m
+CONFIG_NET_VENDOR_INTEL=y
+CONFIG_E100=m
+CONFIG_E1000=m
+CONFIG_E1000E=m
+CONFIG_IGB=m
+CONFIG_IGB_DCA=y
+CONFIG_IGBVF=m
+CONFIG_IXGB=m
+CONFIG_IXGBE=m
+CONFIG_IXGBE_DCA=y
+CONFIG_IXGBE_DCB=y
+# CONFIG_IXGBEVF is not set
+CONFIG_NET_VENDOR_I825XX=y
+# CONFIG_ZNET is not set
+CONFIG_IP1000=m
+CONFIG_JME=m
+CONFIG_NET_VENDOR_MARVELL=y
+CONFIG_SKGE=m
+# CONFIG_SKGE_DEBUG is not set
+# CONFIG_SKGE_GENESIS is not set
+CONFIG_SKY2=m
+# CONFIG_SKY2_DEBUG is not set
+CONFIG_NET_VENDOR_MELLANOX=y
+CONFIG_MLX4_EN=m
+CONFIG_MLX4_CORE=m
+CONFIG_MLX4_DEBUG=y
+CONFIG_NET_VENDOR_MICREL=y
+CONFIG_KS8842=m
+CONFIG_KS8851=m
+CONFIG_KS8851_MLL=m
+# CONFIG_KSZ884X_PCI is not set
+CONFIG_NET_VENDOR_MICROCHIP=y
+# CONFIG_ENC28J60 is not set
+CONFIG_NET_VENDOR_MYRI=y
+CONFIG_MYRI10GE=m
+CONFIG_MYRI10GE_DCA=y
+CONFIG_FEALNX=m
+CONFIG_NET_VENDOR_NATSEMI=y
+CONFIG_NATSEMI=m
+CONFIG_NS83820=m
+CONFIG_NET_VENDOR_8390=y
+CONFIG_NE2K_PCI=m
+CONFIG_NET_VENDOR_NVIDIA=y
+CONFIG_FORCEDETH=m
+CONFIG_NET_VENDOR_OKI=y
+# CONFIG_PCH_GBE is not set
+CONFIG_ETHOC=m
+CONFIG_NET_PACKET_ENGINE=y
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_NET_VENDOR_QLOGIC=y
+CONFIG_QLA3XXX=m
+# CONFIG_QLCNIC is not set
+CONFIG_QLGE=m
+CONFIG_NETXEN_NIC=m
+CONFIG_NET_VENDOR_REALTEK=y
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+CONFIG_8139TOO_PIO=y
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+CONFIG_8139TOO_8129=y
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_R8169=m
+CONFIG_NET_VENDOR_RDC=y
+# CONFIG_R6040 is not set
+CONFIG_NET_VENDOR_SEEQ=y
+# CONFIG_SEEQ8005 is not set
+CONFIG_NET_VENDOR_SILAN=y
+CONFIG_SC92031=m
+CONFIG_NET_VENDOR_SIS=y
+CONFIG_SIS900=m
+CONFIG_SIS190=m
+CONFIG_SFC=m
+CONFIG_SFC_MTD=y
+CONFIG_NET_VENDOR_SMSC=y
+CONFIG_EPIC100=m
+CONFIG_SMSC9420=m
+CONFIG_NET_VENDOR_STMICRO=y
+# CONFIG_STMMAC_ETH is not set
+CONFIG_NET_VENDOR_SUN=y
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+CONFIG_CASSINI=m
+CONFIG_NIU=m
+CONFIG_NET_VENDOR_TEHUTI=y
+CONFIG_TEHUTI=m
+CONFIG_NET_VENDOR_TI=y
+CONFIG_TLAN=m
+CONFIG_NET_VENDOR_VIA=y
+CONFIG_VIA_RHINE=m
+CONFIG_VIA_RHINE_MMIO=y
+CONFIG_VIA_VELOCITY=m
+CONFIG_FDDI=y
+CONFIG_DEFXX=m
+# CONFIG_DEFXX_MMIO is not set
+CONFIG_SKFP=m
+CONFIG_HIPPI=y
+CONFIG_ROADRUNNER=m
+# CONFIG_ROADRUNNER_LARGE_RINGS is not set
+CONFIG_NET_SB1000=m
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+CONFIG_MARVELL_PHY=y
+CONFIG_DAVICOM_PHY=y
+CONFIG_QSEMI_PHY=y
+CONFIG_LXT_PHY=y
+CONFIG_CICADA_PHY=y
+CONFIG_VITESSE_PHY=y
+CONFIG_SMSC_PHY=y
+CONFIG_BROADCOM_PHY=y
+CONFIG_ICPLUS_PHY=y
+CONFIG_REALTEK_PHY=y
+CONFIG_NATIONAL_PHY=y
+CONFIG_STE10XP=y
+CONFIG_LSI_ET1011C_PHY=y
+# CONFIG_MICREL_PHY is not set
+CONFIG_FIXED_PHY=y
+CONFIG_MDIO_BITBANG=y
+CONFIG_MDIO_GPIO=y
+CONFIG_PPP=y
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_MPPE=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPPOATM=m
+CONFIG_PPPOE=m
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_SLIP=m
+CONFIG_SLHC=y
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLIP_SMART=y
+CONFIG_SLIP_MODE_SLIP6=y
+CONFIG_TR=y
+CONFIG_IBMOL=m
+CONFIG_3C359=m
+CONFIG_TMS380TR=m
+CONFIG_TMSPCI=m
+CONFIG_ABYSS=m
+
+#
+# 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=m
+CONFIG_USB_NET_CDC_NCM=m
+CONFIG_USB_NET_DM9601=m
+# CONFIG_USB_NET_SMSC75XX is not set
+CONFIG_USB_NET_SMSC95XX=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_USB_NET_CX82310_ETH is not set
+# CONFIG_USB_NET_KALMIA is not set
+CONFIG_USB_HSO=m
+CONFIG_USB_NET_INT51X1=m
+CONFIG_USB_CDC_PHONET=m
+# CONFIG_USB_IPHETH is not set
+# CONFIG_USB_SIERRA_NET is not set
+# CONFIG_USB_VL600 is not set
+CONFIG_WLAN=y
+CONFIG_AIRO=m
+CONFIG_ATMEL=m
+CONFIG_PCI_ATMEL=m
+CONFIG_PRISM54=m
+CONFIG_USB_ZD1201=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+CONFIG_HOSTAP_PLX=m
+CONFIG_HOSTAP_PCI=m
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+CONFIG_WAN=y
+CONFIG_LANMEDIA=m
+CONFIG_HDLC=m
+CONFIG_HDLC_RAW=m
+CONFIG_HDLC_RAW_ETH=m
+CONFIG_HDLC_CISCO=m
+CONFIG_HDLC_FR=m
+CONFIG_HDLC_PPP=m
+CONFIG_HDLC_X25=m
+CONFIG_PCI200SYN=m
+CONFIG_WANXL=m
+# CONFIG_PC300TOO is not set
+CONFIG_FARSYNC=m
+CONFIG_DSCC4=m
+CONFIG_DSCC4_PCISYNC=y
+CONFIG_DSCC4_PCI_RST=y
+CONFIG_DLCI=m
+CONFIG_DLCI_MAX=8
+CONFIG_WAN_ROUTER_DRIVERS=m
+CONFIG_CYCLADES_SYNC=m
+CONFIG_CYCLOMX_X25=y
+CONFIG_LAPBETHER=m
+CONFIG_X25_ASY=m
+CONFIG_SBNI=m
+# CONFIG_SBNI_MULTILINE is not set
+CONFIG_VMXNET3=m
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=m
+CONFIG_INPUT_POLLDEV=m
+CONFIG_INPUT_SPARSEKMAP=m
+
+#
+# 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=m
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_EVBUG=m
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ADP5588=m
+# CONFIG_KEYBOARD_ADP5589 is not set
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_QT1070 is not set
+# CONFIG_KEYBOARD_QT2160 is not set
+CONFIG_KEYBOARD_LKKBD=m
+CONFIG_KEYBOARD_GPIO=m
+# CONFIG_KEYBOARD_GPIO_POLLED is not set
+# CONFIG_KEYBOARD_TCA6416 is not set
+CONFIG_KEYBOARD_MATRIX=m
+CONFIG_KEYBOARD_LM8323=m
+CONFIG_KEYBOARD_MAX7359=m
+# CONFIG_KEYBOARD_MCS is not set
+# CONFIG_KEYBOARD_MPR121 is not set
+CONFIG_KEYBOARD_NEWTON=m
+CONFIG_KEYBOARD_OPENCORES=m
+CONFIG_KEYBOARD_STOWAWAY=m
+CONFIG_KEYBOARD_SUNKBD=m
+CONFIG_KEYBOARD_TWL4030=m
+CONFIG_KEYBOARD_XTKBD=m
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+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=y
+CONFIG_MOUSE_PS2_SENTELIC=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+CONFIG_MOUSE_SERIAL=m
+CONFIG_MOUSE_APPLETOUCH=m
+CONFIG_MOUSE_BCM5974=m
+CONFIG_MOUSE_VSXXXAA=m
+CONFIG_MOUSE_GPIO=m
+CONFIG_MOUSE_SYNAPTICS_I2C=m
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_ANALOG=m
+CONFIG_JOYSTICK_A3D=m
+CONFIG_JOYSTICK_ADI=m
+CONFIG_JOYSTICK_COBRA=m
+CONFIG_JOYSTICK_GF2K=m
+CONFIG_JOYSTICK_GRIP=m
+CONFIG_JOYSTICK_GRIP_MP=m
+CONFIG_JOYSTICK_GUILLEMOT=m
+CONFIG_JOYSTICK_INTERACT=m
+CONFIG_JOYSTICK_SIDEWINDER=m
+CONFIG_JOYSTICK_TMDC=m
+CONFIG_JOYSTICK_IFORCE=m
+CONFIG_JOYSTICK_IFORCE_USB=y
+CONFIG_JOYSTICK_IFORCE_232=y
+CONFIG_JOYSTICK_WARRIOR=m
+CONFIG_JOYSTICK_MAGELLAN=m
+CONFIG_JOYSTICK_SPACEORB=m
+CONFIG_JOYSTICK_SPACEBALL=m
+CONFIG_JOYSTICK_STINGER=m
+CONFIG_JOYSTICK_TWIDJOY=m
+CONFIG_JOYSTICK_ZHENHUA=m
+# CONFIG_JOYSTICK_AS5011 is not set
+CONFIG_JOYSTICK_JOYDUMP=m
+CONFIG_JOYSTICK_XPAD=m
+CONFIG_JOYSTICK_XPAD_FF=y
+CONFIG_JOYSTICK_XPAD_LEDS=y
+CONFIG_INPUT_TABLET=y
+CONFIG_TABLET_USB_ACECAD=m
+CONFIG_TABLET_USB_AIPTEK=m
+CONFIG_TABLET_USB_GTCO=m
+# CONFIG_TABLET_USB_HANWANG is not set
+CONFIG_TABLET_USB_KBTAB=m
+CONFIG_TABLET_USB_WACOM=m
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=m
+CONFIG_TOUCHSCREEN_AD7877=m
+CONFIG_TOUCHSCREEN_AD7879=m
+CONFIG_TOUCHSCREEN_AD7879_I2C=m
+# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set
+# CONFIG_TOUCHSCREEN_BU21013 is not set
+# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
+CONFIG_TOUCHSCREEN_DA9034=m
+# CONFIG_TOUCHSCREEN_DYNAPRO is not set
+# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+CONFIG_TOUCHSCREEN_EETI=m
+CONFIG_TOUCHSCREEN_FUJITSU=m
+CONFIG_TOUCHSCREEN_GUNZE=m
+CONFIG_TOUCHSCREEN_ELO=m
+CONFIG_TOUCHSCREEN_WACOM_W8001=m
+# CONFIG_TOUCHSCREEN_MAX11801 is not set
+CONFIG_TOUCHSCREEN_MCS5000=m
+CONFIG_TOUCHSCREEN_MTOUCH=m
+CONFIG_TOUCHSCREEN_INEXIO=m
+CONFIG_TOUCHSCREEN_MK712=m
+CONFIG_TOUCHSCREEN_PENMOUNT=m
+CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+CONFIG_TOUCHSCREEN_TOUCHWIN=m
+CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+CONFIG_TOUCHSCREEN_USB_EGALAX=y
+CONFIG_TOUCHSCREEN_USB_PANJIT=y
+CONFIG_TOUCHSCREEN_USB_3M=y
+CONFIG_TOUCHSCREEN_USB_ITM=y
+CONFIG_TOUCHSCREEN_USB_ETURBO=y
+CONFIG_TOUCHSCREEN_USB_GUNZE=y
+CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
+CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
+CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
+CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
+CONFIG_TOUCHSCREEN_USB_GOTOP=y
+CONFIG_TOUCHSCREEN_USB_JASTEC=y
+CONFIG_TOUCHSCREEN_USB_E2I=y
+CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
+CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
+CONFIG_TOUCHSCREEN_USB_NEXIO=y
+CONFIG_TOUCHSCREEN_TOUCHIT213=m
+# CONFIG_TOUCHSCREEN_TSC_SERIO is not set
+# CONFIG_TOUCHSCREEN_TSC2005 is not set
+CONFIG_TOUCHSCREEN_TSC2007=m
+# CONFIG_TOUCHSCREEN_ST1232 is not set
+# CONFIG_TOUCHSCREEN_TPS6507X is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_AD714X is not set
+# CONFIG_INPUT_BMA150 is not set
+CONFIG_INPUT_PCSPKR=m
+# CONFIG_INPUT_MMA8450 is not set
+# CONFIG_INPUT_MPU3050 is not set
+# CONFIG_INPUT_APANEL is not set
+CONFIG_INPUT_ATLAS_BTNS=m
+CONFIG_INPUT_ATI_REMOTE2=m
+CONFIG_INPUT_KEYSPAN_REMOTE=m
+# CONFIG_INPUT_KXTJ9 is not set
+CONFIG_INPUT_POWERMATE=m
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_CM109=m
+CONFIG_INPUT_TWL4030_PWRBUTTON=m
+# CONFIG_INPUT_TWL4030_VIBRA is not set
+# CONFIG_INPUT_TWL6040_VIBRA is not set
+CONFIG_INPUT_UINPUT=m
+CONFIG_INPUT_PCF50633_PMU=m
+# CONFIG_INPUT_PCF8574 is not set
+CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
+# CONFIG_INPUT_ADXL34X is not set
+# CONFIG_INPUT_CMA3000 is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=m
+CONFIG_SERIO_CT82C710=m
+CONFIG_SERIO_PCIPS2=m
+CONFIG_SERIO_LIBPS2=y
+CONFIG_SERIO_RAW=m
+# CONFIG_SERIO_ALTERA_PS2 is not set
+# CONFIG_SERIO_PS2MULT is not set
+CONFIG_GAMEPORT=m
+CONFIG_GAMEPORT_NS558=m
+CONFIG_GAMEPORT_L4=m
+CONFIG_GAMEPORT_EMU10K1=m
+CONFIG_GAMEPORT_FM801=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_VT_CONSOLE_SLEEP=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_VTY=y
+CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=0
+CONFIG_SERIAL_NONSTANDARD=y
+CONFIG_ROCKETPORT=m
+CONFIG_CYCLADES=m
+# CONFIG_CYZ_INTR is not set
+CONFIG_MOXA_INTELLIO=m
+CONFIG_MOXA_SMARTIO=m
+CONFIG_SYNCLINK=m
+CONFIG_SYNCLINKMP=m
+CONFIG_SYNCLINK_GT=m
+CONFIG_NOZOMI=m
+# CONFIG_ISI is not set
+CONFIG_N_HDLC=m
+# CONFIG_N_GSM is not set
+# CONFIG_TRACE_SINK is not set
+# CONFIG_DEVKMEM is not set
+CONFIG_STALDRV=y
+
+#
+# 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_NR_UARTS=48
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+CONFIG_SERIAL_8250_RSA=y
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_MAX3100=m
+# CONFIG_SERIAL_MAX3107 is not set
+# CONFIG_SERIAL_MFD_HSU is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_CONSOLE_POLL=y
+CONFIG_SERIAL_JSM=m
+# CONFIG_SERIAL_TIMBERDALE is not set
+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
+# CONFIG_SERIAL_ALTERA_UART is not set
+# CONFIG_SERIAL_IFX6X60 is not set
+# CONFIG_SERIAL_PCH_UART is not set
+# CONFIG_SERIAL_XILINX_PS_UART is not set
+CONFIG_HVC_DRIVER=y
+CONFIG_VIRTIO_CONSOLE=m
+CONFIG_IPMI_HANDLER=m
+# CONFIG_IPMI_PANIC_EVENT is not set
+CONFIG_IPMI_DEVICE_INTERFACE=m
+CONFIG_IPMI_SI=m
+CONFIG_IPMI_WATCHDOG=m
+CONFIG_IPMI_POWEROFF=m
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_TIMERIOMEM=m
+CONFIG_HW_RANDOM_INTEL=m
+CONFIG_HW_RANDOM_AMD=m
+CONFIG_HW_RANDOM_VIA=m
+CONFIG_HW_RANDOM_VIRTIO=m
+CONFIG_NVRAM=m
+CONFIG_R3964=m
+CONFIG_APPLICOM=m
+CONFIG_MWAVE=m
+CONFIG_RAW_DRIVER=m
+CONFIG_MAX_RAW_DEVS=256
+CONFIG_HPET=y
+CONFIG_HPET_MMAP=y
+CONFIG_HANGCHECK_TIMER=m
+CONFIG_TCG_TPM=m
+CONFIG_TCG_TIS=m
+CONFIG_TCG_NSC=m
+CONFIG_TCG_ATMEL=m
+CONFIG_TCG_INFINEON=m
+CONFIG_TELCLOCK=m
+CONFIG_DEVPORT=y
+# CONFIG_RAMOOPS is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=m
+# CONFIG_I2C_MUX is not set
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_I2C_SMBUS=m
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# PC SMBus host controller drivers
+#
+CONFIG_I2C_ALI1535=m
+CONFIG_I2C_ALI1563=m
+CONFIG_I2C_ALI15X3=m
+CONFIG_I2C_AMD756=m
+CONFIG_I2C_AMD756_S4882=m
+CONFIG_I2C_AMD8111=m
+CONFIG_I2C_I801=m
+CONFIG_I2C_ISCH=m
+CONFIG_I2C_PIIX4=m
+CONFIG_I2C_NFORCE2=m
+CONFIG_I2C_NFORCE2_S4985=m
+CONFIG_I2C_SIS5595=m
+CONFIG_I2C_SIS630=m
+CONFIG_I2C_SIS96X=m
+CONFIG_I2C_VIA=m
+CONFIG_I2C_VIAPRO=m
+
+#
+# ACPI drivers
+#
+CONFIG_I2C_SCMI=m
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE_PCI is not set
+CONFIG_I2C_GPIO=m
+# CONFIG_I2C_INTEL_MID is not set
+CONFIG_I2C_OCORES=m
+CONFIG_I2C_PCA_PLATFORM=m
+# CONFIG_I2C_PXA_PCI is not set
+CONFIG_I2C_SIMTEC=m
+# CONFIG_I2C_XILINX is not set
+# CONFIG_I2C_EG20T is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_DIOLAN_U2C is not set
+CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_TAOS_EVM=m
+CONFIG_I2C_TINY_USB=m
+
+#
+# Other I2C/SMBus bus drivers
+#
+CONFIG_I2C_STUB=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_ALTERA is not set
+CONFIG_SPI_BITBANG=m
+CONFIG_SPI_GPIO=m
+# CONFIG_SPI_OC_TINY is not set
+# CONFIG_SPI_PXA2XX_PCI is not set
+# CONFIG_SPI_TOPCLIFF_PCH is not set
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_DESIGNWARE is not set
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_SPIDEV=m
+CONFIG_SPI_TLE62X0=m
+
+#
+# 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_PPS_CLIENT_GPIO is not set
+
+#
+# PPS generators support
+#
+
+#
+# PTP clock support
+#
+# CONFIG_PTP_1588_CLOCK 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 drivers:
+#
+# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_IT8761E is not set
+# CONFIG_GPIO_SCH is not set
+# CONFIG_GPIO_VX855 is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX7300 is not set
+CONFIG_GPIO_MAX732X=m
+CONFIG_GPIO_PCA953X=m
+CONFIG_GPIO_PCF857X=m
+# CONFIG_GPIO_SX150X is not set
+CONFIG_GPIO_TWL4030=m
+# CONFIG_GPIO_ADP5588 is not set
+
+#
+# PCI GPIO expanders:
+#
+# CONFIG_GPIO_BT8XX is not set
+CONFIG_GPIO_LANGWELL=y
+# CONFIG_GPIO_PCH is not set
+# CONFIG_GPIO_ML_IOH is not set
+# CONFIG_GPIO_RDC321X is not set
+
+#
+# SPI GPIO expanders:
+#
+CONFIG_GPIO_MAX7301=m
+CONFIG_GPIO_MCP23S08=m
+CONFIG_GPIO_MC33880=m
+# CONFIG_GPIO_74X164 is not set
+
+#
+# AC97 GPIO expanders:
+#
+
+#
+# MODULbus GPIO expanders:
+#
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=m
+# CONFIG_TEST_POWER is not set
+# CONFIG_BATTERY_DS2780 is not set
+CONFIG_BATTERY_DS2782=m
+# CONFIG_BATTERY_BQ20Z75 is not set
+CONFIG_BATTERY_BQ27x00=m
+CONFIG_BATTERY_BQ27X00_I2C=y
+CONFIG_BATTERY_BQ27X00_PLATFORM=y
+CONFIG_BATTERY_DA9030=m
+CONFIG_BATTERY_MAX17040=m
+# CONFIG_BATTERY_MAX17042 is not set
+CONFIG_CHARGER_PCF50633=m
+# CONFIG_CHARGER_ISP1704 is not set
+# CONFIG_CHARGER_MAX8903 is not set
+# CONFIG_CHARGER_TWL4030 is not set
+# CONFIG_CHARGER_GPIO is not set
+CONFIG_HWMON=y
+CONFIG_HWMON_VID=m
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Native drivers
+#
+CONFIG_SENSORS_ABITUGURU=m
+CONFIG_SENSORS_ABITUGURU3=m
+# CONFIG_SENSORS_AD7314 is not set
+CONFIG_SENSORS_AD7414=m
+CONFIG_SENSORS_AD7418=m
+CONFIG_SENSORS_ADCXX=m
+CONFIG_SENSORS_ADM1021=m
+CONFIG_SENSORS_ADM1025=m
+CONFIG_SENSORS_ADM1026=m
+CONFIG_SENSORS_ADM1029=m
+CONFIG_SENSORS_ADM1031=m
+CONFIG_SENSORS_ADM9240=m
+# CONFIG_SENSORS_ADT7411 is not set
+CONFIG_SENSORS_ADT7462=m
+CONFIG_SENSORS_ADT7470=m
+CONFIG_SENSORS_ADT7475=m
+# CONFIG_SENSORS_ASC7621 is not set
+CONFIG_SENSORS_K8TEMP=m
+# CONFIG_SENSORS_K10TEMP is not set
+# CONFIG_SENSORS_FAM15H_POWER is not set
+CONFIG_SENSORS_ASB100=m
+CONFIG_SENSORS_ATXP1=m
+# CONFIG_SENSORS_DS620 is not set
+CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_I5K_AMB=m
+CONFIG_SENSORS_F71805F=m
+CONFIG_SENSORS_F71882FG=m
+CONFIG_SENSORS_F75375S=m
+CONFIG_SENSORS_FSCHMD=m
+CONFIG_SENSORS_G760A=m
+CONFIG_SENSORS_GL518SM=m
+CONFIG_SENSORS_GL520SM=m
+# CONFIG_SENSORS_GPIO_FAN is not set
+CONFIG_SENSORS_CORETEMP=m
+CONFIG_SENSORS_IBMAEM=m
+CONFIG_SENSORS_IBMPEX=m
+CONFIG_SENSORS_IT87=m
+# CONFIG_SENSORS_JC42 is not set
+# CONFIG_SENSORS_LINEAGE is not set
+CONFIG_SENSORS_LM63=m
+CONFIG_SENSORS_LM70=m
+# CONFIG_SENSORS_LM73 is not set
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM77=m
+CONFIG_SENSORS_LM78=m
+CONFIG_SENSORS_LM80=m
+CONFIG_SENSORS_LM83=m
+CONFIG_SENSORS_LM85=m
+CONFIG_SENSORS_LM87=m
+CONFIG_SENSORS_LM90=m
+CONFIG_SENSORS_LM92=m
+CONFIG_SENSORS_LM93=m
+# CONFIG_SENSORS_LTC4151 is not set
+CONFIG_SENSORS_LTC4215=m
+CONFIG_SENSORS_LTC4245=m
+# CONFIG_SENSORS_LTC4261 is not set
+CONFIG_SENSORS_LM95241=m
+# CONFIG_SENSORS_LM95245 is not set
+CONFIG_SENSORS_MAX1111=m
+# CONFIG_SENSORS_MAX16065 is not set
+CONFIG_SENSORS_MAX1619=m
+# CONFIG_SENSORS_MAX1668 is not set
+# CONFIG_SENSORS_MAX6639 is not set
+# CONFIG_SENSORS_MAX6642 is not set
+CONFIG_SENSORS_MAX6650=m
+# CONFIG_SENSORS_NTC_THERMISTOR is not set
+CONFIG_SENSORS_PC87360=m
+CONFIG_SENSORS_PC87427=m
+CONFIG_SENSORS_PCF8591=m
+# CONFIG_PMBUS is not set
+CONFIG_SENSORS_SHT15=m
+# CONFIG_SENSORS_SHT21 is not set
+CONFIG_SENSORS_SIS5595=m
+# CONFIG_SENSORS_SMM665 is not set
+CONFIG_SENSORS_DME1737=m
+# CONFIG_SENSORS_EMC1403 is not set
+# CONFIG_SENSORS_EMC2103 is not set
+# CONFIG_SENSORS_EMC6W201 is not set
+CONFIG_SENSORS_SMSC47M1=m
+CONFIG_SENSORS_SMSC47M192=m
+CONFIG_SENSORS_SMSC47B397=m
+# CONFIG_SENSORS_SCH56XX_COMMON is not set
+# CONFIG_SENSORS_SCH5627 is not set
+# CONFIG_SENSORS_SCH5636 is not set
+# CONFIG_SENSORS_ADS1015 is not set
+CONFIG_SENSORS_ADS7828=m
+# CONFIG_SENSORS_ADS7871 is not set
+# CONFIG_SENSORS_AMC6821 is not set
+CONFIG_SENSORS_THMC50=m
+# CONFIG_SENSORS_TMP102 is not set
+CONFIG_SENSORS_TMP401=m
+CONFIG_SENSORS_TMP421=m
+# CONFIG_SENSORS_VIA_CPUTEMP is not set
+CONFIG_SENSORS_VIA686A=m
+CONFIG_SENSORS_VT1211=m
+CONFIG_SENSORS_VT8231=m
+CONFIG_SENSORS_W83781D=m
+CONFIG_SENSORS_W83791D=m
+CONFIG_SENSORS_W83792D=m
+CONFIG_SENSORS_W83793=m
+# CONFIG_SENSORS_W83795 is not set
+CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_W83627HF=m
+CONFIG_SENSORS_W83627EHF=m
+CONFIG_SENSORS_APPLESMC=m
+
+#
+# ACPI drivers
+#
+# CONFIG_SENSORS_ACPI_POWER is not set
+CONFIG_SENSORS_ATK0110=m
+CONFIG_THERMAL=y
+CONFIG_THERMAL_HWMON=y
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_CORE is not set
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+CONFIG_SOFT_WATCHDOG=m
+CONFIG_TWL4030_WATCHDOG=m
+CONFIG_ACQUIRE_WDT=m
+CONFIG_ADVANTECH_WDT=m
+CONFIG_ALIM1535_WDT=m
+CONFIG_ALIM7101_WDT=m
+# CONFIG_F71808E_WDT is not set
+# CONFIG_SP5100_TCO is not set
+CONFIG_SC520_WDT=m
+CONFIG_SBC_FITPC2_WATCHDOG=m
+CONFIG_EUROTECH_WDT=m
+CONFIG_IB700_WDT=m
+CONFIG_IBMASR=m
+CONFIG_WAFER_WDT=m
+CONFIG_I6300ESB_WDT=m
+CONFIG_ITCO_WDT=m
+CONFIG_ITCO_VENDOR_SUPPORT=y
+CONFIG_IT8712F_WDT=m
+CONFIG_IT87_WDT=m
+# CONFIG_HP_WATCHDOG is not set
+CONFIG_SC1200_WDT=m
+CONFIG_PC87413_WDT=m
+# CONFIG_NV_TCO is not set
+CONFIG_60XX_WDT=m
+CONFIG_SBC8360_WDT=m
+CONFIG_CPU5_WDT=m
+CONFIG_SMSC_SCH311X_WDT=m
+CONFIG_SMSC37B787_WDT=m
+CONFIG_W83627HF_WDT=m
+CONFIG_W83697HF_WDT=m
+CONFIG_W83697UG_WDT=m
+CONFIG_W83877F_WDT=m
+CONFIG_W83977F_WDT=m
+CONFIG_MACHZ_WDT=m
+CONFIG_SBC_EPX_C3_WATCHDOG=m
+
+#
+# PCI-based Watchdog Cards
+#
+CONFIG_PCIPCWATCHDOG=m
+CONFIG_WDTPCI=m
+
+#
+# USB-based Watchdog Cards
+#
+CONFIG_USBPCWATCHDOG=m
+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_SDIOHOST_POSSIBLE=y
+CONFIG_SSB_SDIOHOST=y
+# CONFIG_SSB_DEBUG is not set
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
+CONFIG_BCMA_POSSIBLE=y
+
+#
+# Broadcom specific AMBA
+#
+# CONFIG_BCMA is not set
+
+#
+# Multifunction device drivers
+#
+CONFIG_MFD_CORE=m
+# CONFIG_MFD_88PM860X is not set
+CONFIG_MFD_SM501=m
+# CONFIG_MFD_SM501_GPIO is not set
+CONFIG_HTC_PASIC3=m
+# CONFIG_HTC_I2CPLD is not set
+# CONFIG_TPS6105X is not set
+CONFIG_TPS65010=m
+# CONFIG_TPS6507X is not set
+# CONFIG_MFD_TPS6586X is not set
+# CONFIG_MFD_TPS65910 is not set
+# CONFIG_MFD_TPS65912_I2C is not set
+# CONFIG_MFD_TPS65912_SPI is not set
+CONFIG_TWL4030_CORE=y
+# CONFIG_TWL4030_MADC is not set
+# CONFIG_MFD_TWL4030_AUDIO is not set
+# CONFIG_TWL6030_PWM is not set
+# CONFIG_TWL6040_CORE is not set
+# CONFIG_MFD_STMPE is not set
+# CONFIG_MFD_TC3589X is not set
+# CONFIG_MFD_TMIO is not set
+CONFIG_PMIC_DA903X=y
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_MAX8925 is not set
+# CONFIG_MFD_MAX8997 is not set
+# CONFIG_MFD_MAX8998 is not set
+CONFIG_MFD_WM8400=m
+# CONFIG_MFD_WM831X_I2C is not set
+# CONFIG_MFD_WM831X_SPI is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_WM8994 is not set
+CONFIG_MFD_PCF50633=m
+CONFIG_PCF50633_ADC=m
+CONFIG_PCF50633_GPIO=m
+# CONFIG_MFD_MC13XXX is not set
+# CONFIG_ABX500_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_MFD_CS5535 is not set
+# CONFIG_MFD_TIMBERDALE is not set
+CONFIG_LPC_SCH=m
+# CONFIG_MFD_RDC321X is not set
+# CONFIG_MFD_JANZ_CMODIO is not set
+# CONFIG_MFD_VX855 is not set
+# CONFIG_MFD_WL1273_CORE is not set
+# CONFIG_MFD_AAT2870_CORE is not set
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+# CONFIG_REGULATOR_DUMMY is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
+CONFIG_REGULATOR_USERSPACE_CONSUMER=m
+# CONFIG_REGULATOR_GPIO is not set
+CONFIG_REGULATOR_BQ24022=m
+CONFIG_REGULATOR_MAX1586=m
+# CONFIG_REGULATOR_MAX8649 is not set
+# CONFIG_REGULATOR_MAX8660 is not set
+# CONFIG_REGULATOR_MAX8952 is not set
+CONFIG_REGULATOR_TWL4030=y
+CONFIG_REGULATOR_WM8400=m
+CONFIG_REGULATOR_DA903X=m
+CONFIG_REGULATOR_PCF50633=m
+CONFIG_REGULATOR_LP3971=m
+# CONFIG_REGULATOR_LP3972 is not set
+CONFIG_REGULATOR_TPS65023=m
+CONFIG_REGULATOR_TPS6507X=m
+# CONFIG_REGULATOR_ISL6271A is not set
+# CONFIG_REGULATOR_AD5398 is not set
+# CONFIG_REGULATOR_TPS6524X is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+CONFIG_AGP=y
+CONFIG_AGP_AMD64=y
+CONFIG_AGP_INTEL=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_VIA=m
+CONFIG_VGA_ARB=y
+CONFIG_VGA_ARB_MAX_GPUS=16
+# CONFIG_VGA_SWITCHEROO is not set
+CONFIG_DRM=m
+CONFIG_DRM_KMS_HELPER=m
+CONFIG_DRM_TTM=m
+CONFIG_DRM_TDFX=m
+CONFIG_DRM_R128=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_RADEON_KMS=y
+CONFIG_DRM_I810=m
+CONFIG_DRM_I915=m
+CONFIG_DRM_I915_KMS=y
+CONFIG_DRM_MGA=m
+CONFIG_DRM_SIS=m
+CONFIG_DRM_VIA=m
+CONFIG_DRM_SAVAGE=m
+# CONFIG_DRM_VMWGFX is not set
+# CONFIG_STUB_POULSBO is not set
+CONFIG_VGASTATE=m
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB_DDC=m
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+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=m
+CONFIG_FB_SYS_COPYAREA=m
+CONFIG_FB_SYS_IMAGEBLIT=m
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+CONFIG_FB_SYS_FOPS=m
+# CONFIG_FB_WMT_GE_ROPS is not set
+CONFIG_FB_DEFERRED_IO=y
+CONFIG_FB_HECUBA=m
+CONFIG_FB_SVGALIB=m
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_BACKLIGHT=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_CIRRUS=m
+CONFIG_FB_PM2=m
+CONFIG_FB_PM2_FIFO_DISCONNECT=y
+CONFIG_FB_CYBER2000=m
+CONFIG_FB_CYBER2000_DDC=y
+CONFIG_FB_ARC=m
+CONFIG_FB_ASILIANT=y
+CONFIG_FB_IMSTT=y
+CONFIG_FB_VGA16=m
+CONFIG_FB_UVESA=m
+# CONFIG_FB_VESA is not set
+CONFIG_FB_EFI=y
+CONFIG_FB_N411=m
+CONFIG_FB_HGA=m
+CONFIG_FB_S1D13XXX=m
+CONFIG_FB_NVIDIA=m
+CONFIG_FB_NVIDIA_I2C=y
+# CONFIG_FB_NVIDIA_DEBUG is not set
+CONFIG_FB_NVIDIA_BACKLIGHT=y
+CONFIG_FB_RIVA=m
+CONFIG_FB_RIVA_I2C=y
+# CONFIG_FB_RIVA_DEBUG is not set
+CONFIG_FB_RIVA_BACKLIGHT=y
+CONFIG_FB_LE80578=m
+CONFIG_FB_CARILLO_RANCH=m
+CONFIG_FB_MATROX=m
+CONFIG_FB_MATROX_MILLENIUM=y
+CONFIG_FB_MATROX_MYSTIQUE=y
+CONFIG_FB_MATROX_G=y
+CONFIG_FB_MATROX_I2C=m
+CONFIG_FB_MATROX_MAVEN=m
+CONFIG_FB_RADEON=m
+CONFIG_FB_RADEON_I2C=y
+CONFIG_FB_RADEON_BACKLIGHT=y
+# CONFIG_FB_RADEON_DEBUG is not set
+CONFIG_FB_ATY128=m
+CONFIG_FB_ATY128_BACKLIGHT=y
+CONFIG_FB_ATY=m
+CONFIG_FB_ATY_CT=y
+CONFIG_FB_ATY_GENERIC_LCD=y
+CONFIG_FB_ATY_GX=y
+CONFIG_FB_ATY_BACKLIGHT=y
+CONFIG_FB_S3=m
+CONFIG_FB_S3_DDC=y
+CONFIG_FB_SAVAGE=m
+CONFIG_FB_SAVAGE_I2C=y
+CONFIG_FB_SAVAGE_ACCEL=y
+CONFIG_FB_SIS=m
+CONFIG_FB_SIS_300=y
+CONFIG_FB_SIS_315=y
+CONFIG_FB_VIA=m
+# CONFIG_FB_VIA_DIRECT_PROCFS is not set
+# CONFIG_FB_VIA_X_COMPATIBILITY is not set
+CONFIG_FB_NEOMAGIC=m
+CONFIG_FB_KYRO=m
+CONFIG_FB_3DFX=m
+# CONFIG_FB_3DFX_ACCEL is not set
+CONFIG_FB_3DFX_I2C=y
+CONFIG_FB_VOODOO1=m
+CONFIG_FB_VT8623=m
+CONFIG_FB_TRIDENT=m
+CONFIG_FB_ARK=m
+CONFIG_FB_PM3=m
+CONFIG_FB_CARMINE=m
+CONFIG_FB_CARMINE_DRAM_EVAL=y
+# CONFIG_CARMINE_DRAM_CUSTOM is not set
+CONFIG_FB_GEODE=y
+CONFIG_FB_GEODE_LX=m
+CONFIG_FB_GEODE_GX=m
+CONFIG_FB_GEODE_GX1=m
+CONFIG_FB_TMIO=m
+CONFIG_FB_TMIO_ACCELL=y
+CONFIG_FB_SM501=m
+# CONFIG_FB_SMSCUFX is not set
+CONFIG_FB_UDL=m
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FB_METRONOME=m
+CONFIG_FB_MB862XX=m
+CONFIG_FB_MB862XX_PCI_GDC=y
+CONFIG_FB_MB862XX_I2C=y
+CONFIG_FB_BROADSHEET=m
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+# CONFIG_LCD_L4F00242T03 is not set
+CONFIG_LCD_LMS283GF05=m
+CONFIG_LCD_LTV350QV=m
+CONFIG_LCD_ILI9320=m
+CONFIG_LCD_TDO24M=m
+CONFIG_LCD_VGG2432A4=m
+CONFIG_LCD_PLATFORM=m
+# CONFIG_LCD_S6E63M0 is not set
+# CONFIG_LCD_LD9040 is not set
+# CONFIG_LCD_AMS369FG06 is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_GENERIC=m
+CONFIG_BACKLIGHT_PROGEAR=m
+CONFIG_BACKLIGHT_CARILLO_RANCH=m
+CONFIG_BACKLIGHT_DA903X=m
+# CONFIG_BACKLIGHT_APPLE is not set
+CONFIG_BACKLIGHT_SAHARA=m
+# CONFIG_BACKLIGHT_ADP8860 is not set
+# CONFIG_BACKLIGHT_ADP8870 is not set
+# CONFIG_BACKLIGHT_PCF50633 is not set
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=m
+
+#
+# Display hardware drivers
+#
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=m
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_LOGO is not set
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+CONFIG_HIDRAW=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_HID_PID=y
+CONFIG_USB_HIDDEV=y
+
+#
+# Special HID drivers
+#
+CONFIG_HID_A4TECH=m
+# CONFIG_HID_ACRUX is not set
+CONFIG_HID_APPLE=m
+CONFIG_HID_BELKIN=m
+CONFIG_HID_CHERRY=m
+CONFIG_HID_CHICONY=m
+CONFIG_HID_CYPRESS=m
+CONFIG_HID_DRAGONRISE=m
+CONFIG_DRAGONRISE_FF=y
+# CONFIG_HID_EMS_FF is not set
+CONFIG_HID_EZKEY=m
+# CONFIG_HID_HOLTEK is not set
+# CONFIG_HID_KEYTOUCH is not set
+CONFIG_HID_KYE=m
+# CONFIG_HID_UCLOGIC is not set
+# CONFIG_HID_WALTOP is not set
+CONFIG_HID_GYRATION=m
+CONFIG_HID_TWINHAN=m
+CONFIG_HID_KENSINGTON=m
+# CONFIG_HID_LCPOWER is not set
+CONFIG_HID_LOGITECH=m
+CONFIG_HID_LOGITECH_DJ=m
+CONFIG_LOGITECH_FF=y
+CONFIG_LOGIRUMBLEPAD2_FF=y
+# CONFIG_LOGIG940_FF is not set
+CONFIG_LOGIWHEELS_FF=y
+CONFIG_HID_MICROSOFT=m
+CONFIG_HID_MONTEREY=m
+# CONFIG_HID_MULTITOUCH is not set
+CONFIG_HID_NTRIG=m
+CONFIG_HID_ORTEK=m
+CONFIG_HID_PANTHERLORD=m
+CONFIG_PANTHERLORD_FF=y
+CONFIG_HID_PETALYNX=m
+# CONFIG_HID_PICOLCD is not set
+# CONFIG_HID_PRIMAX is not set
+CONFIG_HID_QUANTA=m
+# CONFIG_HID_ROCCAT is not set
+CONFIG_HID_SAMSUNG=m
+CONFIG_HID_SONY=m
+# CONFIG_HID_SPEEDLINK is not set
+CONFIG_HID_SUNPLUS=m
+CONFIG_HID_GREENASIA=m
+CONFIG_GREENASIA_FF=y
+CONFIG_HID_SMARTJOYPLUS=m
+CONFIG_SMARTJOYPLUS_FF=y
+CONFIG_HID_TOPSEED=m
+CONFIG_HID_THRUSTMASTER=m
+CONFIG_THRUSTMASTER_FF=y
+CONFIG_HID_ZEROPLUS=m
+CONFIG_ZEROPLUS_FF=y
+# CONFIG_HID_ZYDACRON is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_COMMON=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB_ARCH_HAS_XHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_DWC3 is not set
+CONFIG_USB_MON=y
+CONFIG_USB_WUSB=m
+CONFIG_USB_WUSB_CBAF=m
+# CONFIG_USB_WUSB_CBAF_DEBUG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_C67X00_HCD=m
+CONFIG_USB_XHCI_HCD=m
+# CONFIG_USB_XHCI_HCD_DEBUGGING is not set
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+CONFIG_USB_OXU210HP_HCD=m
+CONFIG_USB_ISP116X_HCD=m
+CONFIG_USB_ISP1760_HCD=m
+CONFIG_USB_ISP1362_HCD=m
+CONFIG_USB_OHCI_HCD=y
+# 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=y
+CONFIG_USB_U132_HCD=m
+CONFIG_USB_SL811_HCD=m
+# CONFIG_USB_SL811_HCD_ISO is not set
+CONFIG_USB_R8A66597_HCD=m
+CONFIG_USB_WHCI_HCD=m
+CONFIG_USB_HWA_HCD=m
+# CONFIG_USB_RENESAS_USBHS is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
+CONFIG_USB_TMC=m
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_REALTEK is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_KARMA=y
+CONFIG_USB_STORAGE_CYPRESS_ATACB=y
+# CONFIG_USB_STORAGE_ENE_UB6250 is not set
+# CONFIG_USB_UAS is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP210X=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_IUU=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+# CONFIG_USB_SERIAL_QCAUX is not set
+CONFIG_USB_SERIAL_QUALCOMM=m
+CONFIG_USB_SERIAL_SPCP8X5=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIEMENS_MPI=m
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_SYMBOL=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_WWAN=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_OPTICON=m
+# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
+# CONFIG_USB_SERIAL_ZIO is not set
+# CONFIG_USB_SERIAL_SSU100 is not set
+CONFIG_USB_SERIAL_DEBUG=m
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_SEVSEG=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_SISUSBVGA_CON is not set
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_IOWARRIOR=m
+CONFIG_USB_TEST=m
+CONFIG_USB_ISIGHTFW=m
+# CONFIG_USB_YUREX is not set
+CONFIG_USB_ATM=m
+CONFIG_USB_SPEEDTOUCH=m
+CONFIG_USB_CXACRU=m
+CONFIG_USB_UEAGLEATM=m
+CONFIG_USB_XUSBATM=m
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
+# CONFIG_USB_R8A66597 is not set
+# CONFIG_USB_M66592 is not set
+# CONFIG_USB_AMD5536UDC is not set
+# CONFIG_USB_CI13XXX_PCI is not set
+# CONFIG_USB_NET2272 is not set
+# CONFIG_USB_NET2280 is not set
+# CONFIG_USB_GOKU is not set
+# CONFIG_USB_EG20T is not set
+CONFIG_USB_DUMMY_HCD=m
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_GADGET_SUPERSPEED=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_ETH_EEM is not set
+# CONFIG_USB_G_NCM is not set
+CONFIG_USB_GADGETFS=m
+# CONFIG_USB_FUNCTIONFS is not set
+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_G_PRINTER=m
+CONFIG_USB_CDC_COMPOSITE=m
+# CONFIG_USB_G_NOKIA is not set
+# CONFIG_USB_G_ACM_MS is not set
+# CONFIG_USB_G_MULTI is not set
+# CONFIG_USB_G_HID is not set
+# CONFIG_USB_G_DBGP is not set
+
+#
+# OTG and related infrastructure
+#
+CONFIG_USB_OTG_UTILS=y
+CONFIG_USB_GPIO_VBUS=m
+CONFIG_TWL4030_USB=m
+# CONFIG_TWL6030_USB is not set
+CONFIG_NOP_USB_XCEIV=m
+CONFIG_UWB=m
+CONFIG_UWB_HWA=m
+CONFIG_UWB_WHCI=m
+CONFIG_UWB_I1480U=m
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+# CONFIG_MMC_CLKGATE is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_MINORS=8
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=m
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_SDHCI=m
+CONFIG_MMC_SDHCI_PCI=m
+# CONFIG_MMC_RICOH_MMC is not set
+CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_WBSD=m
+CONFIG_MMC_TIFM_SD=m
+CONFIG_MMC_SPI=m
+CONFIG_MMC_CB710=m
+CONFIG_MMC_VIA_SDMMC=m
+# CONFIG_MMC_VUB300 is not set
+# CONFIG_MMC_USHC is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_LM3530 is not set
+CONFIG_LEDS_PCA9532=m
+# CONFIG_LEDS_PCA9532_GPIO is not set
+CONFIG_LEDS_GPIO=m
+CONFIG_LEDS_LP3944=m
+# CONFIG_LEDS_LP5521 is not set
+# CONFIG_LEDS_LP5523 is not set
+# CONFIG_LEDS_CLEVO_MAIL is not set
+CONFIG_LEDS_PCA955X=m
+CONFIG_LEDS_DA903X=m
+CONFIG_LEDS_DAC124S085=m
+# CONFIG_LEDS_REGULATOR is not set
+CONFIG_LEDS_BD2802=m
+# CONFIG_LEDS_INTEL_SS4200 is not set
+# CONFIG_LEDS_LT3593 is not set
+CONFIG_LEDS_DELL_NETBOOKS=m
+CONFIG_LEDS_TRIGGERS=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_LEDS_TRIGGER_BACKLIGHT=m
+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=y
+
+#
+# Reporting subsystems
+#
+# CONFIG_EDAC_DEBUG is not set
+CONFIG_EDAC_DECODE_MCE=m
+# CONFIG_EDAC_MCE_INJ is not set
+CONFIG_EDAC_MM_EDAC=m
+CONFIG_EDAC_AMD64=m
+# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set
+CONFIG_EDAC_E752X=m
+CONFIG_EDAC_I82975X=m
+CONFIG_EDAC_I3000=m
+CONFIG_EDAC_I3200=m
+CONFIG_EDAC_X38=m
+CONFIG_EDAC_I5400=m
+# CONFIG_EDAC_I7CORE is not set
+CONFIG_EDAC_I5000=m
+CONFIG_EDAC_I5100=m
+# CONFIG_EDAC_I7300 is not set
+# CONFIG_EDAC_SBRIDGE is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+CONFIG_RTC_DRV_TEST=m
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=m
+CONFIG_RTC_DRV_DS1374=m
+CONFIG_RTC_DRV_DS1672=m
+# CONFIG_RTC_DRV_DS3232 is not set
+CONFIG_RTC_DRV_MAX6900=m
+CONFIG_RTC_DRV_RS5C372=m
+CONFIG_RTC_DRV_ISL1208=m
+# CONFIG_RTC_DRV_ISL12022 is not set
+CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF8583=m
+CONFIG_RTC_DRV_M41T80=m
+CONFIG_RTC_DRV_M41T80_WDT=y
+# CONFIG_RTC_DRV_BQ32K is not set
+CONFIG_RTC_DRV_TWL4030=m
+CONFIG_RTC_DRV_S35390A=m
+CONFIG_RTC_DRV_FM3130=m
+CONFIG_RTC_DRV_RX8581=m
+CONFIG_RTC_DRV_RX8025=m
+# CONFIG_RTC_DRV_EM3027 is not set
+# CONFIG_RTC_DRV_RV3029C2 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T93 is not set
+CONFIG_RTC_DRV_M41T94=m
+CONFIG_RTC_DRV_DS1305=m
+CONFIG_RTC_DRV_DS1390=m
+CONFIG_RTC_DRV_MAX6902=m
+CONFIG_RTC_DRV_R9701=m
+CONFIG_RTC_DRV_RS5C348=m
+CONFIG_RTC_DRV_DS3234=m
+CONFIG_RTC_DRV_PCF2123=m
+
+#
+# Platform RTC drivers
+#
+CONFIG_RTC_DRV_CMOS=y
+CONFIG_RTC_DRV_DS1286=m
+CONFIG_RTC_DRV_DS1511=m
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_STK17TA8=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_M48T35=m
+CONFIG_RTC_DRV_M48T59=m
+# CONFIG_RTC_DRV_MSM6242 is not set
+CONFIG_RTC_DRV_BQ4802=m
+# CONFIG_RTC_DRV_RP5C01 is not set
+CONFIG_RTC_DRV_V3020=m
+CONFIG_RTC_DRV_PCF50633=m
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_DMADEVICES=y
+# CONFIG_DMADEVICES_DEBUG is not set
+
+#
+# DMA Devices
+#
+# CONFIG_INTEL_MID_DMAC is not set
+CONFIG_INTEL_IOATDMA=m
+# CONFIG_TIMB_DMA is not set
+# CONFIG_PCH_DMA is not set
+CONFIG_DMA_ENGINE=y
+
+#
+# DMA Clients
+#
+CONFIG_NET_DMA=y
+# CONFIG_ASYNC_TX_DMA is not set
+# CONFIG_DMATEST is not set
+CONFIG_DCA=m
+CONFIG_AUXDISPLAY=y
+CONFIG_UIO=m
+CONFIG_UIO_CIF=m
+CONFIG_UIO_PDRV=m
+CONFIG_UIO_PDRV_GENIRQ=m
+CONFIG_UIO_AEC=m
+CONFIG_UIO_SERCOS3=m
+CONFIG_UIO_PCI_GENERIC=m
+# CONFIG_UIO_NETX is not set
+CONFIG_VIRTIO=m
+CONFIG_VIRTIO_RING=m
+
+#
+# Virtio drivers
+#
+CONFIG_VIRTIO_PCI=m
+CONFIG_VIRTIO_BALLOON=m
+# CONFIG_VIRTIO_MMIO is not set
+# CONFIG_STAGING is not set
+CONFIG_X86_PLATFORM_DEVICES=y
+CONFIG_ACER_WMI=m
+CONFIG_ACERHDF=m
+CONFIG_ASUS_LAPTOP=m
+CONFIG_DELL_WMI=m
+# CONFIG_DELL_WMI_AIO is not set
+CONFIG_FUJITSU_LAPTOP=m
+# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
+# CONFIG_HP_ACCEL is not set
+CONFIG_HP_WMI=m
+CONFIG_MSI_LAPTOP=m
+CONFIG_PANASONIC_LAPTOP=m
+CONFIG_COMPAL_LAPTOP=m
+CONFIG_SONY_LAPTOP=m
+CONFIG_SONYPI_COMPAT=y
+# CONFIG_IDEAPAD_LAPTOP is not set
+CONFIG_THINKPAD_ACPI=m
+CONFIG_THINKPAD_ACPI_DEBUGFACILITIES=y
+# CONFIG_THINKPAD_ACPI_DEBUG is not set
+# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
+CONFIG_THINKPAD_ACPI_VIDEO=y
+CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+CONFIG_SENSORS_HDAPS=m
+CONFIG_INTEL_MENLOW=m
+CONFIG_EEEPC_LAPTOP=m
+# CONFIG_ASUS_WMI is not set
+CONFIG_ACPI_WMI=y
+# CONFIG_MSI_WMI is not set
+# CONFIG_ACPI_ASUS is not set
+CONFIG_TOPSTAR_LAPTOP=m
+CONFIG_ACPI_TOSHIBA=m
+# CONFIG_TOSHIBA_BT_RFKILL is not set
+# CONFIG_ACPI_CMPC is not set
+# CONFIG_INTEL_IPS is not set
+# CONFIG_IBM_RTL is not set
+# CONFIG_XO15_EBOOK is not set
+# CONFIG_SAMSUNG_LAPTOP is not set
+CONFIG_MXM_WMI=m
+# CONFIG_INTEL_OAKTRAIL is not set
+# CONFIG_SAMSUNG_Q10 is not set
+
+#
+# Hardware Spinlock drivers
+#
+CONFIG_CLKEVT_I8253=y
+CONFIG_I8253_LOCK=y
+CONFIG_CLKBLD_I8253=y
+# CONFIG_IOMMU_SUPPORT is not set
+# CONFIG_VIRT_DRIVERS is not set
+# CONFIG_HYPERV is not set
+# CONFIG_PM_DEVFREQ is not set
+
+#
+# Firmware Drivers
+#
+CONFIG_EDD=y
+CONFIG_EDD_OFF=y
+CONFIG_FIRMWARE_MEMMAP=y
+CONFIG_EFI_VARS=y
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+CONFIG_DMIID=y
+# CONFIG_DMI_SYSFS is not set
+# CONFIG_ISCSI_IBFT_FIND is not set
+# CONFIG_SIGMA is not set
+# CONFIG_GOOGLE_FIRMWARE is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_DEFAULTS_TO_ORDERED=y
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_XATTR=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+# 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_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_EXPORTFS=m
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_FANOTIFY is not set
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+# CONFIG_QUOTA_DEBUG is not set
+CONFIG_QUOTA_TREE=m
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+CONFIG_QUOTACTL_COMPAT=y
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=y
+CONFIG_CUSE=m
+CONFIG_GENERIC_ACL=y
+
+#
+# Caches
+#
+CONFIG_FSCACHE=m
+# CONFIG_FSCACHE_STATS is not set
+# CONFIG_FSCACHE_HISTOGRAM is not set
+# CONFIG_FSCACHE_DEBUG is not set
+# CONFIG_FSCACHE_OBJECT_LIST is not set
+CONFIG_CACHEFILES=m
+# CONFIG_CACHEFILES_DEBUG is not set
+# CONFIG_CACHEFILES_HISTOGRAM is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+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 is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_VMCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_TMPFS_XATTR=y
+CONFIG_HUGETLBFS=y
+CONFIG_HUGETLB_PAGE=y
+CONFIG_CONFIGFS_FS=m
+CONFIG_MISC_FILESYSTEMS=y
+CONFIG_ADFS_FS=m
+# CONFIG_ADFS_FS_RW is not set
+CONFIG_AFFS_FS=m
+CONFIG_ECRYPT_FS=y
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+CONFIG_BFS_FS=m
+CONFIG_EFS_FS=m
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+# CONFIG_JFFS2_CMODE_PRIORITY is not set
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_JFFS2_CMODE_FAVOURLZO=y
+CONFIG_UBIFS_FS=m
+CONFIG_UBIFS_FS_XATTR=y
+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+# CONFIG_LOGFS is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_XATTR is not set
+CONFIG_SQUASHFS_ZLIB=y
+# CONFIG_SQUASHFS_LZO is not set
+# CONFIG_SQUASHFS_XZ is not set
+# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+CONFIG_VXFS_FS=m
+CONFIG_MINIX_FS=m
+CONFIG_OMFS_FS=m
+CONFIG_HPFS_FS=m
+CONFIG_QNX4FS_FS=m
+CONFIG_ROMFS_FS=m
+CONFIG_ROMFS_BACKED_BY_BLOCK=y
+# CONFIG_ROMFS_BACKED_BY_MTD is not set
+# CONFIG_ROMFS_BACKED_BY_BOTH is not set
+CONFIG_ROMFS_ON_BLOCK=y
+# CONFIG_PSTORE is not set
+CONFIG_SYSV_FS=m
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+CONFIG_EXOFS_FS=m
+# CONFIG_EXOFS_DEBUG is not set
+CONFIG_ORE=m
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_V4_1=y
+CONFIG_PNFS_FILE_LAYOUT=y
+CONFIG_PNFS_BLOCK=m
+CONFIG_PNFS_OBJLAYOUT=m
+# CONFIG_NFS_USE_LEGACY_DNS is not set
+CONFIG_NFS_USE_KERNEL_DNS=y
+# CONFIG_NFS_USE_NEW_IDMAPPER is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_ACL_SUPPORT=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_SUNRPC_BACKCHANNEL=y
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_CEPH_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_UPCALL=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+CONFIG_CIFS_DFS_UPCALL=y
+# CONFIG_CIFS_FSCACHE is not set
+# CONFIG_CIFS_ACL is not set
+CONFIG_NCP_FS=m
+CONFIG_NCPFS_PACKET_SIGNING=y
+CONFIG_NCPFS_IOCTL_LOCKING=y
+CONFIG_NCPFS_STRONG=y
+CONFIG_NCPFS_NFS_NS=y
+CONFIG_NCPFS_OS2_NS=y
+# CONFIG_NCPFS_SMALLDOS is not set
+CONFIG_NCPFS_NLS=y
+CONFIG_NCPFS_EXTRAS=y
+CONFIG_CODA_FS=m
+CONFIG_AFS_FS=m
+# CONFIG_AFS_DEBUG is not set
+# CONFIG_AFS_FSCACHE is not set
+CONFIG_9P_FS=m
+# CONFIG_9P_FSCACHE is not set
+# CONFIG_9P_FS_POSIX_ACL is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+CONFIG_ACORN_PARTITION=y
+# CONFIG_ACORN_PARTITION_CUMANA is not set
+# CONFIG_ACORN_PARTITION_EESOX is not set
+CONFIG_ACORN_PARTITION_ICS=y
+# CONFIG_ACORN_PARTITION_ADFS is not set
+# CONFIG_ACORN_PARTITION_POWERTEC is not set
+CONFIG_ACORN_PARTITION_RISCIX=y
+CONFIG_OSF_PARTITION=y
+CONFIG_AMIGA_PARTITION=y
+CONFIG_ATARI_PARTITION=y
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+CONFIG_MINIX_SUBPARTITION=y
+CONFIG_SOLARIS_X86_PARTITION=y
+CONFIG_UNIXWARE_DISKLABEL=y
+CONFIG_LDM_PARTITION=y
+# CONFIG_LDM_DEBUG is not set
+CONFIG_SGI_PARTITION=y
+CONFIG_ULTRIX_PARTITION=y
+CONFIG_SUN_PARTITION=y
+CONFIG_KARMA_PARTITION=y
+CONFIG_EFI_PARTITION=y
+CONFIG_SYSV68_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+CONFIG_DLM=m
+# CONFIG_DLM_DEBUG is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+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_SECTION_MISMATCH is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_LOCKUP_DETECTOR is not set
+# CONFIG_HARDLOCKUP_DETECTOR is not set
+CONFIG_DETECT_HUNG_TASK=y
+CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHEDSTATS=y
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+CONFIG_DEBUG_RT_MUTEXES=y
+CONFIG_DEBUG_PI_LIST=y
+CONFIG_RT_MUTEX_TESTER=y
+CONFIG_DEBUG_SPINLOCK=y
+CONFIG_DEBUG_MUTEXES=y
+CONFIG_DEBUG_LOCK_ALLOC=y
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_SPARSE_RCU_POINTER is not set
+CONFIG_LOCKDEP=y
+CONFIG_LOCK_STAT=y
+# CONFIG_DEBUG_LOCKDEP is not set
+# CONFIG_DEBUG_ATOMIC_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+CONFIG_STACKTRACE=y
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_INFO_REDUCED is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_VIRTUAL is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_TEST_LIST_SORT is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+CONFIG_ARCH_WANT_FRAME_POINTERS=y
+CONFIG_FRAME_POINTER=y
+CONFIG_BOOT_PRINTK_DELAY=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_RCU_CPU_STALL_TIMEOUT=60
+# 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_DEBUG_PER_CPU_MAPS is not set
+# CONFIG_LKDTM is not set
+# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_LATENCYTOP=y
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+# CONFIG_DEBUG_PAGEALLOC is not set
+CONFIG_USER_STACKTRACE_SUPPORT=y
+CONFIG_NOP_TRACER=y
+CONFIG_HAVE_FTRACE_NMI_ENTER=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_HAVE_C_RECORDMCOUNT=y
+CONFIG_RING_BUFFER=y
+CONFIG_FTRACE_NMI_ENTER=y
+CONFIG_EVENT_TRACING=y
+CONFIG_EVENT_POWER_TRACING_DEPRECATED=y
+CONFIG_CONTEXT_SWITCH_TRACER=y
+CONFIG_RING_BUFFER_ALLOW_SWAP=y
+CONFIG_TRACING=y
+CONFIG_GENERIC_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+CONFIG_FUNCTION_TRACER=y
+CONFIG_FUNCTION_GRAPH_TRACER=y
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_FTRACE_SYSCALLS is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_STACK_TRACER is not set
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_DYNAMIC_FTRACE=y
+CONFIG_FUNCTION_PROFILER=y
+CONFIG_FTRACE_MCOUNT_RECORD=y
+# CONFIG_FTRACE_STARTUP_TEST is not set
+CONFIG_MMIOTRACE=y
+# CONFIG_MMIOTRACE_TEST is not set
+# CONFIG_RING_BUFFER_BENCHMARK is not set
+# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
+# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_ATOMIC64_SELFTEST is not set
+CONFIG_ASYNC_RAID6_TEST=m
+# 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_TEST_KSTRTOX is not set
+# CONFIG_STRICT_DEVMEM is not set
+# CONFIG_X86_VERBOSE_BOOTUP is not set
+CONFIG_EARLY_PRINTK=y
+# CONFIG_EARLY_PRINTK_DBGP is not set
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_X86_PTDUMP is not set
+# CONFIG_DEBUG_RODATA is not set
+# CONFIG_DEBUG_SET_MODULE_RONX is not set
+# CONFIG_DEBUG_NX_TEST is not set
+# CONFIG_IOMMU_DEBUG is not set
+# 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 is not set
+CONFIG_IO_DELAY_0XED=y
+# CONFIG_IO_DELAY_UDELAY is not set
+# CONFIG_IO_DELAY_NONE is not set
+CONFIG_DEFAULT_IO_DELAY_TYPE=1
+CONFIG_DEBUG_BOOT_PARAMS=y
+# CONFIG_CPA_DEBUG is not set
+CONFIG_OPTIMIZE_INLINING=y
+# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_TRUSTED_KEYS is not set
+# CONFIG_ENCRYPTED_KEYS is not set
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_SECURITY=y
+CONFIG_SECURITYFS=y
+CONFIG_SECURITY_NETWORK=y
+# CONFIG_SECURITY_NETWORK_XFRM is not set
+CONFIG_SECURITY_PATH=y
+CONFIG_LSM_MMAP_MIN_ADDR=0
+CONFIG_SECURITY_SELINUX=y
+CONFIG_SECURITY_SELINUX_BOOTPARAM=y
+CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
+CONFIG_SECURITY_SELINUX_DISABLE=y
+CONFIG_SECURITY_SELINUX_DEVELOP=y
+CONFIG_SECURITY_SELINUX_AVC_STATS=y
+CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
+# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
+CONFIG_SECURITY_SMACK=y
+CONFIG_SECURITY_TOMOYO=y
+CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048
+CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024
+# CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER is not set
+CONFIG_SECURITY_TOMOYO_POLICY_LOADER="/sbin/tomoyo-init"
+CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER="/sbin/init"
+CONFIG_SECURITY_APPARMOR=y
+CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
+# CONFIG_IMA is not set
+# CONFIG_EVM is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_APPARMOR=y
+# CONFIG_DEFAULT_SECURITY_DAC is not set
+CONFIG_DEFAULT_SECURITY="apparmor"
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_ASYNC_PQ=m
+CONFIG_ASYNC_RAID6_RECOV=m
+CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA=y
+CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA=y
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+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=m
+CONFIG_CRYPTO_PCOMP2=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_USER is not set
+CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_NULL=m
+# CONFIG_CRYPTO_PCRYPT is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+CONFIG_CRYPTO_CRYPTD=m
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+CONFIG_CRYPTO_CCM=m
+CONFIG_CRYPTO_GCM=m
+CONFIG_CRYPTO_SEQIV=m
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTR=m
+CONFIG_CRYPTO_CTS=m
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_XTS=m
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_VMAC=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CRC32C_INTEL=m
+CONFIG_CRYPTO_GHASH=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_RMD128=m
+CONFIG_CRYPTO_RMD160=m
+CONFIG_CRYPTO_RMD256=m
+CONFIG_CRYPTO_RMD320=m
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA1_SSSE3 is not set
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_AES_X86_64=m
+CONFIG_CRYPTO_AES_NI_INTEL=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_BLOWFISH_COMMON=m
+# CONFIG_CRYPTO_BLOWFISH_X86_64 is not set
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_SALSA20=m
+CONFIG_CRYPTO_SALSA20_X86_64=m
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_TWOFISH_X86_64=m
+# CONFIG_CRYPTO_TWOFISH_X86_64_3WAY is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_ZLIB=m
+CONFIG_CRYPTO_LZO=m
+
+#
+# Random Number Generation
+#
+CONFIG_CRYPTO_ANSI_CPRNG=m
+# CONFIG_CRYPTO_USER_API_HASH is not set
+# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
+# CONFIG_CRYPTO_HW is not set
+CONFIG_HAVE_KVM=y
+# CONFIG_VIRTUALIZATION is not set
+CONFIG_BINARY_PRINTF=y
+
+#
+# Library routines
+#
+CONFIG_RAID6_PQ=m
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_FIRST_BIT=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=y
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+# CONFIG_CRC8 is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_XZ_DEC=y
+CONFIG_XZ_DEC_X86=y
+CONFIG_XZ_DEC_POWERPC=y
+CONFIG_XZ_DEC_IA64=y
+CONFIG_XZ_DEC_ARM=y
+CONFIG_XZ_DEC_ARMTHUMB=y
+CONFIG_XZ_DEC_SPARC=y
+CONFIG_XZ_DEC_BCJ=y
+# CONFIG_XZ_DEC_TEST is not set
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_BZIP2=y
+CONFIG_DECOMPRESS_LZMA=y
+CONFIG_DECOMPRESS_XZ=y
+CONFIG_DECOMPRESS_LZO=y
+CONFIG_REED_SOLOMON=m
+CONFIG_REED_SOLOMON_DEC16=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_CHECK_SIGNATURE=y
+CONFIG_CPU_RMAP=y
+CONFIG_NLATTR=y
+CONFIG_AVERAGE=y
+# CONFIG_CORDIC is not set
+
+#
+# Popcorn Multi-Kernel Support
+#
+CONFIG_POPCORN=y
+CONFIG_DEBUG_POPCORN=y
+CONFIG_POPCORN_KMSG=y
+# CONFIG_POPCORN_UMSG is not set
+CONFIG_POPCORN_PERF=y
deleted file mode 120000 (symlink)
index 7cb657892f21229d0068d2e7416e91e551264f77..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1 +0,0 @@
-../../platform/generic/system.dts
\ No newline at end of file
new file mode 100644 (file)
index 0000000000000000000000000000000000000000..3f85df2b73b3ecd21fb4a0d4d118544e4fc290f0
--- /dev/null
@@ -0,0 +1,367 @@
+/*
+ * Device Tree Generator version: 1.1
+ *
+ * (C) Copyright 2007-2008 Xilinx, Inc.
+ * (C) Copyright 2007-2009 Michal Simek
+ *
+ * Michal SIMEK <monstr@monstr.eu>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * CAUTION: This file is automatically generated by libgen.
+ * Version: Xilinx EDK 10.1.03 EDK_K_SP3.6
+ *
+ * XPS project directory: Xilinx-ML505-ll_temac-sgdma-MMU-FDT-edk101
+ */
+
+/dts-v1/;
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+       compatible = "xlnx,microblaze";
+       hard-reset-gpios = <&LEDs_8Bit 2 1>;
+       model = "testing";
+       DDR2_SDRAM: memory@90000000 {
+               device_type = "memory";
+               reg = < 0x90000000 0x10000000 >;
+       } ;
+       aliases {
+               ethernet0 = &Hard_Ethernet_MAC;
+               serial0 = &RS232_Uart_1;
+       } ;
+       chosen {
+               bootargs = "console=ttyUL0,115200 highres=on";
+               linux,stdout-path = "/plb@0/serial@84000000";
+       } ;
+       cpus {
+               #address-cells = <1>;
+               #cpus = <0x1>;
+               #size-cells = <0>;
+               microblaze_0: cpu@0 {
+                       clock-frequency = <125000000>;
+                       compatible = "xlnx,microblaze-7.10.d";
+                       d-cache-baseaddr = <0x90000000>;
+                       d-cache-highaddr = <0x9fffffff>;
+                       d-cache-line-size = <0x10>;
+                       d-cache-size = <0x2000>;
+                       device_type = "cpu";
+                       i-cache-baseaddr = <0x90000000>;
+                       i-cache-highaddr = <0x9fffffff>;
+                       i-cache-line-size = <0x10>;
+                       i-cache-size = <0x2000>;
+                       model = "microblaze,7.10.d";
+                       reg = <0>;
+                       timebase-frequency = <125000000>;
+                       xlnx,addr-tag-bits = <0xf>;
+                       xlnx,allow-dcache-wr = <0x1>;
+                       xlnx,allow-icache-wr = <0x1>;
+                       xlnx,area-optimized = <0x0>;
+                       xlnx,cache-byte-size = <0x2000>;
+                       xlnx,d-lmb = <0x1>;
+                       xlnx,d-opb = <0x0>;
+                       xlnx,d-plb = <0x1>;
+                       xlnx,data-size = <0x20>;
+                       xlnx,dcache-addr-tag = <0xf>;
+                       xlnx,dcache-always-used = <0x1>;
+                       xlnx,dcache-byte-size = <0x2000>;
+                       xlnx,dcache-line-len = <0x4>;
+                       xlnx,dcache-use-fsl = <0x1>;
+                       xlnx,debug-enabled = <0x1>;
+                       xlnx,div-zero-exception = <0x1>;
+                       xlnx,dopb-bus-exception = <0x0>;
+                       xlnx,dynamic-bus-sizing = <0x1>;
+                       xlnx,edge-is-positive = <0x1>;
+                       xlnx,family = "virtex5";
+                       xlnx,endianness = <0x1>;
+                       xlnx,fpu-exception = <0x1>;
+                       xlnx,fsl-data-size = <0x20>;
+                       xlnx,fsl-exception = <0x0>;
+                       xlnx,fsl-links = <0x0>;
+                       xlnx,i-lmb = <0x1>;
+                       xlnx,i-opb = <0x0>;
+                       xlnx,i-plb = <0x1>;
+                       xlnx,icache-always-used = <0x1>;
+                       xlnx,icache-line-len = <0x4>;
+                       xlnx,icache-use-fsl = <0x1>;
+                       xlnx,ill-opcode-exception = <0x1>;
+                       xlnx,instance = "microblaze_0";
+                       xlnx,interconnect = <0x1>;
+                       xlnx,interrupt-is-edge = <0x0>;
+                       xlnx,iopb-bus-exception = <0x0>;
+                       xlnx,mmu-dtlb-size = <0x4>;
+                       xlnx,mmu-itlb-size = <0x2>;
+                       xlnx,mmu-tlb-access = <0x3>;
+                       xlnx,mmu-zones = <0x10>;
+                       xlnx,number-of-pc-brk = <0x1>;
+                       xlnx,number-of-rd-addr-brk = <0x0>;
+                       xlnx,number-of-wr-addr-brk = <0x0>;
+                       xlnx,opcode-0x0-illegal = <0x1>;
+                       xlnx,pvr = <0x2>;
+                       xlnx,pvr-user1 = <0x0>;
+                       xlnx,pvr-user2 = <0x0>;
+                       xlnx,reset-msr = <0x0>;
+                       xlnx,sco = <0x0>;
+                       xlnx,unaligned-exceptions = <0x1>;
+                       xlnx,use-barrel = <0x1>;
+                       xlnx,use-dcache = <0x1>;
+                       xlnx,use-div = <0x1>;
+                       xlnx,use-ext-brk = <0x1>;
+                       xlnx,use-ext-nm-brk = <0x1>;
+                       xlnx,use-extended-fsl-instr = <0x0>;
+                       xlnx,use-fpu = <0x2>;
+                       xlnx,use-hw-mul = <0x2>;
+                       xlnx,use-icache = <0x1>;
+                       xlnx,use-interrupt = <0x1>;
+                       xlnx,use-mmu = <0x3>;
+                       xlnx,use-msr-instr = <0x1>;
+                       xlnx,use-pcmp-instr = <0x1>;
+               } ;
+       } ;
+       mb_plb: plb@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "xlnx,plb-v46-1.03.a", "xlnx,plb-v46-1.00.a", "simple-bus";
+               ranges ;
+               FLASH: flash@a0000000 {
+                       bank-width = <2>;
+                       compatible = "xlnx,xps-mch-emc-2.00.a", "cfi-flash";
+                       reg = < 0xa0000000 0x2000000 >;
+                       xlnx,family = "virtex5";
+                       xlnx,include-datawidth-matching-0 = <0x1>;
+                       xlnx,include-datawidth-matching-1 = <0x0>;
+                       xlnx,include-datawidth-matching-2 = <0x0>;
+                       xlnx,include-datawidth-matching-3 = <0x0>;
+                       xlnx,include-negedge-ioregs = <0x0>;
+                       xlnx,include-plb-ipif = <0x1>;
+                       xlnx,include-wrbuf = <0x1>;
+                       xlnx,max-mem-width = <0x10>;
+                       xlnx,mch-native-dwidth = <0x20>;
+                       xlnx,mch-plb-clk-period-ps = <0x1f40>;
+                       xlnx,mch-splb-awidth = <0x20>;
+                       xlnx,mch0-accessbuf-depth = <0x10>;
+                       xlnx,mch0-protocol = <0x0>;
+                       xlnx,mch0-rddatabuf-depth = <0x10>;
+                       xlnx,mch1-accessbuf-depth = <0x10>;
+                       xlnx,mch1-protocol = <0x0>;
+                       xlnx,mch1-rddatabuf-depth = <0x10>;
+                       xlnx,mch2-accessbuf-depth = <0x10>;
+                       xlnx,mch2-protocol = <0x0>;
+                       xlnx,mch2-rddatabuf-depth = <0x10>;
+                       xlnx,mch3-accessbuf-depth = <0x10>;
+                       xlnx,mch3-protocol = <0x0>;
+                       xlnx,mch3-rddatabuf-depth = <0x10>;
+                       xlnx,mem0-width = <0x10>;
+                       xlnx,mem1-width = <0x20>;
+                       xlnx,mem2-width = <0x20>;
+                       xlnx,mem3-width = <0x20>;
+                       xlnx,num-banks-mem = <0x1>;
+                       xlnx,num-channels = <0x0>;
+                       xlnx,priority-mode = <0x0>;
+                       xlnx,synch-mem-0 = <0x0>;
+                       xlnx,synch-mem-1 = <0x0>;
+                       xlnx,synch-mem-2 = <0x0>;
+                       xlnx,synch-mem-3 = <0x0>;
+                       xlnx,synch-pipedelay-0 = <0x2>;
+                       xlnx,synch-pipedelay-1 = <0x2>;
+                       xlnx,synch-pipedelay-2 = <0x2>;
+                       xlnx,synch-pipedelay-3 = <0x2>;
+                       xlnx,tavdv-ps-mem-0 = <0x1adb0>;
+                       xlnx,tavdv-ps-mem-1 = <0x3a98>;
+                       xlnx,tavdv-ps-mem-2 = <0x3a98>;
+                       xlnx,tavdv-ps-mem-3 = <0x3a98>;
+                       xlnx,tcedv-ps-mem-0 = <0x1adb0>;
+                       xlnx,tcedv-ps-mem-1 = <0x3a98>;
+                       xlnx,tcedv-ps-mem-2 = <0x3a98>;
+                       xlnx,tcedv-ps-mem-3 = <0x3a98>;
+                       xlnx,thzce-ps-mem-0 = <0x88b8>;
+                       xlnx,thzce-ps-mem-1 = <0x1b58>;
+                       xlnx,thzce-ps-mem-2 = <0x1b58>;
+                       xlnx,thzce-ps-mem-3 = <0x1b58>;
+                       xlnx,thzoe-ps-mem-0 = <0x1b58>;
+                       xlnx,thzoe-ps-mem-1 = <0x1b58>;
+                       xlnx,thzoe-ps-mem-2 = <0x1b58>;
+                       xlnx,thzoe-ps-mem-3 = <0x1b58>;
+                       xlnx,tlzwe-ps-mem-0 = <0x88b8>;
+                       xlnx,tlzwe-ps-mem-1 = <0x0>;
+                       xlnx,tlzwe-ps-mem-2 = <0x0>;
+                       xlnx,tlzwe-ps-mem-3 = <0x0>;
+                       xlnx,twc-ps-mem-0 = <0x2af8>;
+                       xlnx,twc-ps-mem-1 = <0x3a98>;
+                       xlnx,twc-ps-mem-2 = <0x3a98>;
+                       xlnx,twc-ps-mem-3 = <0x3a98>;
+                       xlnx,twp-ps-mem-0 = <0x11170>;
+                       xlnx,twp-ps-mem-1 = <0x2ee0>;
+                       xlnx,twp-ps-mem-2 = <0x2ee0>;
+                       xlnx,twp-ps-mem-3 = <0x2ee0>;
+                       xlnx,xcl0-linesize = <0x4>;
+                       xlnx,xcl0-writexfer = <0x1>;
+                       xlnx,xcl1-linesize = <0x4>;
+                       xlnx,xcl1-writexfer = <0x1>;
+                       xlnx,xcl2-linesize = <0x4>;
+                       xlnx,xcl2-writexfer = <0x1>;
+                       xlnx,xcl3-linesize = <0x4>;
+                       xlnx,xcl3-writexfer = <0x1>;
+               } ;
+               Hard_Ethernet_MAC: xps-ll-temac@81c00000 {
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       compatible = "xlnx,compound";
+                       ranges ;
+                       ethernet@81c00000 {
+                               compatible = "xlnx,xps-ll-temac-1.01.b", "xlnx,xps-ll-temac-1.00.a";
+                               device_type = "network";
+                               interrupt-parent = <&xps_intc_0>;
+                               interrupts = < 5 2 >;
+                               llink-connected = <&PIM3>;
+                               local-mac-address = [ 00 0a 35 00 00 00 ];
+                               reg = < 0x81c00000 0x40 >;
+                               xlnx,bus2core-clk-ratio = <0x1>;
+                               xlnx,phy-type = <0x1>;
+                               xlnx,phyaddr = <0x1>;
+                               xlnx,rxcsum = <0x0>;
+                               xlnx,rxfifo = <0x1000>;
+                               xlnx,temac-type = <0x0>;
+                               xlnx,txcsum = <0x0>;
+                               xlnx,txfifo = <0x1000>;
+                       } ;
+               } ;
+               IIC_EEPROM: i2c@81600000 {
+                       compatible = "xlnx,xps-iic-2.00.a";
+                       interrupt-parent = <&xps_intc_0>;
+                       interrupts = < 6 2 >;
+                       reg = < 0x81600000 0x10000 >;
+                       xlnx,clk-freq = <0x7735940>;
+                       xlnx,family = "virtex5";
+                       xlnx,gpo-width = <0x1>;
+                       xlnx,iic-freq = <0x186a0>;
+                       xlnx,scl-inertial-delay = <0x0>;
+                       xlnx,sda-inertial-delay = <0x0>;
+                       xlnx,ten-bit-adr = <0x0>;
+               } ;
+               LEDs_8Bit: gpio@81400000 {
+                       compatible = "xlnx,xps-gpio-1.00.a";
+                       interrupt-parent = <&xps_intc_0>;
+                       interrupts = < 7 2 >;
+                       reg = < 0x81400000 0x10000 >;
+                       xlnx,all-inputs = <0x0>;
+                       xlnx,all-inputs-2 = <0x0>;
+                       xlnx,dout-default = <0x0>;
+                       xlnx,dout-default-2 = <0x0>;
+                       xlnx,family = "virtex5";
+                       xlnx,gpio-width = <0x8>;
+                       xlnx,interrupt-present = <0x1>;
+                       xlnx,is-bidir = <0x1>;
+                       xlnx,is-bidir-2 = <0x1>;
+                       xlnx,is-dual = <0x0>;
+                       xlnx,tri-default = <0xffffffff>;
+                       xlnx,tri-default-2 = <0xffffffff>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+               } ;
+
+               gpio-leds {
+                       compatible = "gpio-leds";
+
+                       heartbeat {
+                               label = "Heartbeat";
+                               gpios = <&LEDs_8Bit 4 1>;
+                               linux,default-trigger = "heartbeat";
+                       };
+
+                       yellow {
+                               label = "Yellow";
+                               gpios = <&LEDs_8Bit 5 1>;
+                       };
+
+                       red {
+                               label = "Red";
+                               gpios = <&LEDs_8Bit 6 1>;
+                       };
+
+                       green {
+                               label = "Green";
+                               gpios = <&LEDs_8Bit 7 1>;
+                       };
+               } ;
+               RS232_Uart_1: serial@84000000 {
+                       clock-frequency = <125000000>;
+                       compatible = "xlnx,xps-uartlite-1.00.a";
+                       current-speed = <115200>;
+                       device_type = "serial";
+                       interrupt-parent = <&xps_intc_0>;
+                       interrupts = < 8 0 >;
+                       port-number = <0>;
+                       reg = < 0x84000000 0x10000 >;
+                       xlnx,baudrate = <0x1c200>;
+                       xlnx,data-bits = <0x8>;
+                       xlnx,family = "virtex5";
+                       xlnx,odd-parity = <0x0>;
+                       xlnx,use-parity = <0x0>;
+               } ;
+               SysACE_CompactFlash: sysace@83600000 {
+                       compatible = "xlnx,xps-sysace-1.00.a";
+                       interrupt-parent = <&xps_intc_0>;
+                       interrupts = < 4 2 >;
+                       reg = < 0x83600000 0x10000 >;
+                       xlnx,family = "virtex5";
+                       xlnx,mem-width = <0x10>;
+               } ;
+               debug_module: debug@84400000 {
+                       compatible = "xlnx,mdm-1.00.d";
+                       reg = < 0x84400000 0x10000 >;
+                       xlnx,family = "virtex5";
+                       xlnx,interconnect = <0x1>;
+                       xlnx,jtag-chain = <0x2>;
+                       xlnx,mb-dbg-ports = <0x1>;
+                       xlnx,uart-width = <0x8>;
+                       xlnx,use-uart = <0x1>;
+                       xlnx,write-fsl-ports = <0x0>;
+               } ;
+               mpmc@90000000 {
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       compatible = "xlnx,mpmc-4.02.a";
+                       ranges ;
+                       PIM3: sdma@84600180 {
+                               compatible = "xlnx,ll-dma-1.00.a";
+                               interrupt-parent = <&xps_intc_0>;
+                               interrupts = < 2 2 1 2 >;
+                               reg = < 0x84600180 0x80 >;
+                       } ;
+               } ;
+               xps_intc_0: interrupt-controller@81800000 {
+                       #interrupt-cells = <0x2>;
+                       compatible = "xlnx,xps-intc-1.00.a";
+                       interrupt-controller ;
+                       reg = < 0x81800000 0x10000 >;
+                       xlnx,kind-of-intr = <0x100>;
+                       xlnx,num-intr-inputs = <0x9>;
+               } ;
+               xps_timer_1: timer@83c00000 {
+                       compatible = "xlnx,xps-timer-1.00.a";
+                       interrupt-parent = <&xps_intc_0>;
+                       interrupts = < 3 2 >;
+                       reg = < 0x83c00000 0x10000 >;
+                       xlnx,count-width = <0x20>;
+                       xlnx,family = "virtex5";
+                       xlnx,gen0-assert = <0x1>;
+                       xlnx,gen1-assert = <0x1>;
+                       xlnx,one-timer-only = <0x0>;
+                       xlnx,trig0-assert = <0x1>;
+                       xlnx,trig1-assert = <0x1>;
+               } ;
+       } ;
+}  ;
index 40358c8..610aaac 100644 (file)
@@ -34,7 +34,6 @@ static void copy_boot_params(void)
        };
        const struct old_cmdline * const oldcmd =
                (const struct old_cmdline *)OLD_CL_ADDRESS;
-
        BUILD_BUG_ON(sizeof boot_params != 4096);
        memcpy(&boot_params.hdr, &hdr, sizeof hdr);
 
index d09bb03..c9b290b 100644 (file)
@@ -43,7 +43,8 @@ static inline int futex_atomic_op_inuser(int encoded_op, u32 __user *uaddr)
        int cmp = (encoded_op >> 24) & 15;
        int oparg = (encoded_op << 8) >> 20;
        int cmparg = (encoded_op << 20) >> 20;
-       int oldval = 0, ret, tem;
+       int oldval = 0, ret = 0, tem;
+
 
        if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
                oparg = 1 << oparg;
index 6902152..09ab93e 100644 (file)
@@ -57,6 +57,11 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 #ifdef CONFIG_SMP
        else {
                percpu_write(cpu_tlbstate.state, TLBSTATE_OK);
+               if(percpu_read(cpu_tlbstate.active_mm) != next)
+               {
+                       printk(KERN_ALERT "cpu{%d} tskcomm{%s} tskpid{%d} curr{%s} currpid{%d} cmm{%p} next{%p} \n",
+                                       cpu,tsk->comm,tsk->pid,current->comm,current->pid,current->mm,next);
+               }
                BUG_ON(percpu_read(cpu_tlbstate.active_mm) != next);
 
                if (!cpumask_test_and_set_cpu(cpu, mm_cpumask(next))) {
index 1f84794..0b4cff8 100644 (file)
@@ -43,7 +43,7 @@ static int __init debug_alt(char *str)
 }
 __setup("debug-alternative", debug_alt);
 
-static int noreplace_smp;
+static int noreplace_smp=1;
 
 static int __init setup_noreplace_smp(char *str)
 {
@@ -432,7 +432,10 @@ void alternatives_smp_switch(int smp)
 #endif
 
        if (noreplace_smp || smp_alt_once || skip_smp_alternatives)
-               return;
+       {
+               printk(KERN_ALERT "SMP alternative: disabled for Popcorn\n");
+                       return;
+       }
        BUG_ON(!smp && (num_online_cpus() > 1));
 
        mutex_lock(&smp_alt);
index 25f24dc..bdc7df4 100644 (file)
@@ -16,6 +16,7 @@ obj-y                 := intel_cacheinfo.o scattered.o topology.o
 obj-y                  += proc.o capflags.o powerflags.o common.o
 obj-y                  += vmware.o hypervisor.o sched.o mshyperv.o
 obj-y                  += rdrand.o
+obj-y                  += proc_remote.o
 
 obj-$(CONFIG_X86_32)   += bugs.o
 obj-$(CONFIG_X86_64)   += bugs_64.o
index 14b2314..125a894 100644 (file)
@@ -4,6 +4,9 @@
 #include <linux/seq_file.h>
 #include <linux/cpufreq.h>
 
+/*mklinux_akshay*/
+extern int remote_proc_cpu_info(struct seq_file *m);
+
 /*
  *     Get CPU information for use by the procfs.
  */
@@ -70,6 +73,9 @@ static int show_cpuinfo(struct seq_file *m, void *v)
 #ifdef CONFIG_SMP
        cpu = c->cpu_index;
 #endif
+       /*mklinux_akshay*/
+       seq_printf(m, " Current CPU \n");
+       /*mklinux_akshay*/
        seq_printf(m, "processor\t: %u\n"
                   "vendor_id\t: %s\n"
                   "cpu family\t: %d\n"
@@ -137,6 +143,10 @@ static int show_cpuinfo(struct seq_file *m, void *v)
 
        seq_printf(m, "\n\n");
 
+       //append remote cpu info
+       /*mklinux_akshay*/
+       remote_proc_cpu_info(m);
+       /*mklinux_akshay*/
        return 0;
 }
 
diff --git a/arch/x86/kernel/cpu/proc_remote.c b/arch/x86/kernel/cpu/proc_remote.c
new file mode 100644 (file)
index 0000000..bfe0b23
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * This file for Obtaining Remote CPU info
+ *
+ * Akshay
+ */
+
+#include <linux/kernel.h>
+#include <linux/kthread.h>
+#include <linux/smp.h>
+#include <linux/slab.h>
+#include <linux/timer.h>
+#include <linux/pcn_kmsg.h>
+#include <linux/delay.h>
+#include <linux/string.h>
+#include <linux/seq_file.h>
+
+
+#include <linux/popcorn_cpuinfo.h>
+
+
+#include <linux/list.h>
+
+#define PRINT_MESSAGES 0
+#if PRINT_MESSAGES
+#define PRINTK(...) printk(__VA_ARGS__)
+#else
+#define PRINTK(...) ;
+#endif
+
+/*
+ *  Variables
+ */
+extern struct list_head rlist_head;
+static int _cpu=-1;
+/*
+ * ******************************* Common Functions **********************************************************
+ */
+
+/*
+ * ************************************* Function (hook) to be called from other file ********************
+ */
+int remote_proc_cpu_info(struct seq_file *m) {
+
+       int res = 0;
+
+       int result = 0;
+       int i;
+       int retval;
+
+       struct list_head *iter;
+       _remote_cpu_info_list_t *objPtr;
+
+           list_for_each(iter, &rlist_head) {
+                 objPtr = list_entry(iter, _remote_cpu_info_list_t, cpu_list_member);
+
+                                 seq_printf(m, "*********Remote CPU*****\n");
+
+                                       seq_printf(m, "processor\t: %u\n"
+                                                       "vendor_id\t: %s\n"
+                                                       "cpu family\t: %d\n"
+                                                       "model\t\t: %u\n"
+                                                       "model name\t: %s\n", objPtr->_data._processor,
+                                                       objPtr->_data._vendor_id, objPtr->_data._cpu_family,
+                                                       objPtr->_data._model, objPtr->_data._model_name);
+
+                                       if (objPtr->_data._stepping != -1)
+                                               seq_printf(m, "stepping\t: %d\n", objPtr->_data._stepping);
+                                       else
+                                               seq_printf(m, "stepping\t: unknown\n");
+
+                                       seq_printf(m, "microcode\t: 0x%x\n", objPtr->_data._microcode);
+
+                                       seq_printf(m, "cpu MHz\t\t: %u.%03u\n", objPtr->_data._cpu_freq);
+
+                                       seq_printf(m, "cache size\t: %d KB\n", objPtr->_data._cache_size);
+
+                                       seq_printf(m, "flags\t\t:");
+
+                                       seq_printf(m, " %s", objPtr->_data._flags);
+
+                                       seq_printf(m, "\nbogomips\t: %lu\n", objPtr->_data._nbogomips);
+                                       // (c->loops_per_jiffy/(5000/HZ)) % 100);
+
+                                       seq_printf(m, "TLB size\t: %d 4K pages\n", objPtr->_data._TLB_size);
+
+                                       seq_printf(m, "clflush size\t: %u\n", objPtr->_data._clflush_size);
+                                       seq_printf(m, "cache_alignment\t: %d\n",
+                                                       objPtr->_data._cache_alignment);
+                                       seq_printf(m,
+                                                       "address sizes\t: %u bits physical, %u bits virtual\n",
+                                                       objPtr->_data._bits_physical, objPtr->_data._bits_virtual);
+
+                                       seq_printf(m, "power management:");
+                                       /*for (i = 0; i < 32; i++) {
+                                        if (c->x86_power & (1 << i)) {
+                                        if (i < ARRAY_SIZE(x86_power_flags) &&
+                                        x86_power_flags[i])
+                                        seq_printf(m, "%s%s",
+                                        x86_power_flags[i][0] ? " " : "",
+                                        x86_power_flags[i]);
+                                        else
+                                        seq_printf(m, " [%d]", i);
+                                        }
+                                        }*/
+                                       seq_printf(m, "global cpumask available: \n");
+                                       for_each_cpu(i,cpu_global_online_mask) {
+                                               seq_printf(m,"%d,\t",i);
+                                                                }
+                                       seq_printf(m, "\n\n");
+           }
+
+
+
+}
+
+static int __init proc_cpu_handler_init(void)
+{
+
+
+    _cpu = smp_processor_id();
+
+       return 0;
+}
+/**
+ * Register remote proc cpu info init function as
+ * module initialization function.
+ */
+late_initcall(proc_cpu_handler_init);
index 1aae78f..f8f1bf2 100644 (file)
@@ -185,8 +185,8 @@ void dump_stack(void)
        unsigned long stack;
 
        bp = stack_frame(current, NULL);
-       printk("Pid: %d, comm: %.20s %s %s %.*s\n",
-               current->pid, current->comm, print_tainted(),
+       printk("Pid: %d, comm: %.20s mm: {%p} %s %s %.*s\n",
+               current->pid, current->comm,current->mm, print_tainted(),
                init_utsname()->release,
                (int)strcspn(init_utsname()->version, " "),
                init_utsname()->version);
index 9487819..f7c442f 100644 (file)
@@ -42,6 +42,9 @@
 struct e820map e820;
 struct e820map e820_saved;
 
+unsigned long kernel_start_addr=0;
+EXPORT_SYMBOL(kernel_start_addr);
+
 /* For PCI or other memory-mapped resources */
 unsigned long pci_mem_start = 0xaeedbabe;
 #ifdef CONFIG_PCI
@@ -903,6 +906,7 @@ static int __init parse_memmap_opt(char *p)
        userdef = 1;
        if (*p == '@') {
                start_at = memparse(p+1, &p);
+               kernel_start_addr = start_at;
                e820_add_region(start_at, mem_size, E820_RAM);
        } else if (*p == '#') {
                start_at = memparse(p+1, &p);
index ee5d4fb..5417dca 100644 (file)
@@ -105,8 +105,8 @@ void show_regs_common(void)
        board = dmi_get_system_info(DMI_BOARD_NAME);
 
        printk(KERN_CONT "\n");
-       printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s",
-               current->pid, current->comm, print_tainted(),
+       printk(KERN_DEFAULT "Pid: %d, comm: %.20s mm: {%p} %s %s %.*s",
+               current->pid, current->comm,current->mm,print_tainted(),
                init_utsname()->release,
                (int)strcspn(init_utsname()->version, " "),
                init_utsname()->version);
@@ -316,6 +316,8 @@ long sys_execve(const char __user *name,
                return error;
        error = do_execve(filename, argv, envp, regs);
 
+       if(error ==-2)
+        printk(KERN_ALERT "filename {%s} name {%s} error{%d}\n",filename,name,error);
 #ifdef CONFIG_X86_32
        if (error == 0) {
                /* Make sure we don't return using sysenter.. */
index 54ddaeb..1bc4fd1 100644 (file)
@@ -716,7 +716,6 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
                regs->flags &= ~X86_EFLAGS_TF;
 
        ret = setup_rt_frame(sig, ka, info, regs);
-
        if (ret)
                return ret;
 
@@ -761,7 +760,6 @@ static void do_signal(struct pt_regs *regs)
        struct k_sigaction ka;
        siginfo_t info;
        int signr;
-
        /*
         * We want the common case to go fast, which is why we may in certain
         * cases get here from kernel mode. Just return without doing anything
@@ -769,16 +767,19 @@ static void do_signal(struct pt_regs *regs)
         * X86_32: vm86 regs switched out by assembly code before reaching
         * here, so testing against kernel CS suffices.
         */
-       if (!user_mode(regs))
-               return;
-
+       if (!user_mode(regs)){
+               if(current->tgroup_distributed)
+                       goto proceed;
+               else
+                       return;
+       }
+proceed:
        signr = get_signal_to_deliver(&info, &ka, regs, NULL);
        if (signr > 0) {
                /* Whee! Actually deliver the signal.  */
                handle_signal(signr, &info, &ka, regs);
                return;
        }
-
        /* Did we come from a system call? */
        if (syscall_get_nr(current, regs) >= 0) {
                /* Restart the system call - no handlers present */
index dd74e46..28cbee7 100644 (file)
@@ -391,3 +391,85 @@ slow_irqon:
                return ret;
        }
 }
+
+int get_user_pages_fast_mm(struct mm_struct *mm,unsigned long start, int nr_pages, int write,
+                       struct page **pages)
+{
+       unsigned long addr, len, end;
+       unsigned long next;
+       pgd_t *pgdp;
+       int nr = 0;
+
+       start &= PAGE_MASK;
+       addr = start;
+       len = (unsigned long) nr_pages << PAGE_SHIFT;
+
+       end = start + len;
+       if (end < start)
+               goto slow_irqon;
+
+#ifdef CONFIG_X86_64
+       if (end >> __VIRTUAL_MASK_SHIFT)
+               goto slow_irqon;
+#endif
+
+       /*
+        * XXX: batch / limit 'nr', to avoid large irq off latency
+        * needs some instrumenting to determine the common sizes used by
+        * important workloads (eg. DB2), and whether limiting the batch size
+        * will decrease performance.
+        *
+        * It seems like we're in the clear for the moment. Direct-IO is
+        * the main guy that batches up lots of get_user_pages, and even
+        * they are limited to 64-at-a-time which is not so many.
+        */
+       /*
+        * This doesn't prevent pagetable teardown, but does prevent
+        * the pagetables and pages from being freed on x86.
+        *
+        * So long as we atomically load page table pointers versus teardown
+        * (which we do on x86, with the above PAE exception), we can follow the
+        * address down to the the page and take a ref on it.
+        */
+       local_irq_disable();
+       pgdp = pgd_offset(mm, addr);
+       do {
+               pgd_t pgd = *pgdp;
+
+               next = pgd_addr_end(addr, end);
+               if (pgd_none(pgd))
+                       goto slow;
+               if (!gup_pud_range(pgd, addr, next, write, pages, &nr))
+                       goto slow;
+       } while (pgdp++, addr = next, addr != end);
+       local_irq_enable();
+
+       VM_BUG_ON(nr != (end - start) >> PAGE_SHIFT);
+       return nr;
+
+       {
+               int ret;
+
+slow:
+               local_irq_enable();
+slow_irqon:
+               /* Try to get the remaining pages with get_user_pages */
+               start += nr << PAGE_SHIFT;
+               pages += nr;
+
+               down_read(&mm->mmap_sem);
+               ret = get_user_pages(current, mm, start,
+                       (end - start) >> PAGE_SHIFT, write, 0, pages, NULL);
+               up_read(&mm->mmap_sem);
+
+               /* Have to be a bit careful with return values */
+               if (nr > 0) {
+                       if (ret < 0)
+                               ret = nr;
+                       else
+                               ret += nr;
+               }
+
+               return ret;
+       }
+}
index e891343..ca5fe7a 100644 (file)
@@ -16,8 +16,8 @@ void __show_regs(struct pt_regs *regs)
 {
        printk("\n");
        print_modules();
-       printk(KERN_INFO "Pid: %d, comm: %.20s %s %s\n", task_pid_nr(current),
-               current->comm, print_tainted(), init_utsname()->release);
+       printk(KERN_INFO "Pid: %d, comm: %.20s mm: {%p} %s %s\n", task_pid_nr(current),
+               current->comm, current->mm ,print_tainted(), init_utsname()->release);
        printk(KERN_INFO "RIP: %04lx:[<%016lx>]\n", PT_REGS_CS(regs) & 0xffff,
               PT_REGS_RIP(regs));
        printk(KERN_INFO "RSP: %016lx  EFLAGS: %08lx\n", PT_REGS_SP(regs),
index 58324b4..232d562 100644 (file)
@@ -991,16 +991,16 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
     /*
      * Multikernel
      */
+#ifdef PROCESS_SERVER_USE_KMOD
     if(current->executing_for_remote) {
         process_server_import_address_space(&mk_ip, &mk_sp, regs);
-        /*printk("stack pointer = %lx\n",mk_sp);
-        for(i = 0; i <= 16; i++) {
-            printk("stack peak %lx at %lx\n",*(unsigned long*)(mk_sp + i*8), mk_sp + i*8);
-        }*/
            start_thread(regs, mk_ip, mk_sp);
     } else {
         start_thread(regs, elf_entry, bprm->p);
     }
+#else
+    start_thread(regs, elf_entry, bprm->p);
+#endif
        retval = 0;
 out:
        kfree(loc);
@@ -1969,7 +1969,7 @@ static int elf_core_dump(struct coredump_params *cprm)
                size_t sz = get_note_info_size(&info);
 
                sz += elf_coredump_extra_notes_size();
-
+               printk(KERN_ALERT " phdr4note \n");
                phdr4note = kmalloc(sizeof(*phdr4note), GFP_KERNEL);
                if (!phdr4note)
                        goto end_coredump;
@@ -1986,6 +1986,7 @@ static int elf_core_dump(struct coredump_params *cprm)
 
        if (e_phnum == PN_XNUM) {
                shdr4extnum = kmalloc(sizeof(*shdr4extnum), GFP_KERNEL);
+               printk(KERN_ALERT " shdr4extnum \n");
                if (!shdr4extnum)
                        goto end_coredump;
                fill_extnum_info(elf, shdr4extnum, e_shoff, segs);
@@ -1994,10 +1995,12 @@ static int elf_core_dump(struct coredump_params *cprm)
        offset = dataoff;
 
        size += sizeof(*elf);
+       printk(KERN_ALERT " binfmt elf size{%d} \n",size);
        if (size > cprm->limit || !dump_write(cprm->file, elf, sizeof(*elf)))
                goto end_coredump;
 
        size += sizeof(*phdr4note);
+       printk(KERN_ALERT " phdr4note elf size{%d} \n",size);
        if (size > cprm->limit
            || !dump_write(cprm->file, phdr4note, sizeof(*phdr4note)))
                goto end_coredump;
@@ -2026,17 +2029,17 @@ static int elf_core_dump(struct coredump_params *cprm)
                    || !dump_write(cprm->file, &phdr, sizeof(phdr)))
                        goto end_coredump;
        }
-
+       printk(KERN_ALERT " after vma size{%d} \n",size);
        if (!elf_core_write_extra_phdrs(cprm->file, offset, &size, cprm->limit))
                goto end_coredump;
-
+       printk(KERN_ALERT " write_note_info\n");
        /* write out the notes section */
        if (!write_note_info(&info, cprm->file, &foffset))
                goto end_coredump;
-
+       printk(KERN_ALERT " elf_coredump_extra_notes_write\n");
        if (elf_coredump_extra_notes_write(cprm->file, &foffset))
                goto end_coredump;
-
+       printk(KERN_ALERT " dump_seek\n");
        /* Align to page */
        if (!dump_seek(cprm->file, dataoff - foffset))
                goto end_coredump;
@@ -2066,10 +2069,10 @@ static int elf_core_dump(struct coredump_params *cprm)
                                goto end_coredump;
                }
        }
-
+       printk(KERN_ALERT " elf_core_write_extra_data\n");
        if (!elf_core_write_extra_data(cprm->file, &size, cprm->limit))
                goto end_coredump;
-
+       printk(KERN_ALERT " PN_XNUM\n");
        if (e_phnum == PN_XNUM) {
                size += sizeof(*shdr4extnum);
                if (size > cprm->limit
index 34a3da6..3c76f9f 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1011,7 +1011,7 @@ no_thread_group:
  * These functions flushes out all traces of the currently running executable
  * so that a new one can be started
  */
-static void flush_old_files(struct files_struct * files)
+/*static*/ void flush_old_files(struct files_struct * files)
 {
        long j = -1;
        struct fdtable *fdt;
index 4c6992d..7cbe29e 100644 (file)
--- a/fs/file.c
+++ b/fs/file.c
@@ -479,6 +479,61 @@ out:
        return error;
 }
 
+
+ int saif_alloc_fd(unsigned start, unsigned flags,unsigned int fd)
+ {
+         struct files_struct *files = current->files;
+ //      unsigned int fd;
+         int error;
+         struct fdtable *fdt;
+
+         spin_lock(&files->file_lock);
+ repeat:
+         fdt = files_fdtable(files);
+ //      fd = start;
+ /*
+494         if (fd < files->next_fd)
+495                 fd = files->next_fd;
+496
+497         if (fd < fdt->max_fds)
+498                 fd = find_next_zero_bit(fdt->open_fds->fds_bits,
+499                                            fdt->max_fds, fd);
+500 */
+
+         error = expand_files(files, fd);
+         if (error < 0)
+                 goto out;
+
+         /*
+507          * If we needed to expand the fs array we
+508          * might have blocked - try again.
+509          */
+         if (error)
+                 goto repeat;
+
+         if (start <= files->next_fd)
+                 files->next_fd = fd + 1;
+
+         FD_SET(fd, fdt->open_fds);
+         if (flags & O_CLOEXEC)
+                 FD_SET(fd, fdt->close_on_exec);
+         else
+                 FD_CLR(fd, fdt->close_on_exec);
+         error = fd;
+ #if 1
+         /* Sanity check */
+         if (rcu_dereference_raw(fdt->fd[fd]) != NULL) {
+                 printk(KERN_WARNING "alloc_fd: slot %d not NULL!\n", fd);
+                 rcu_assign_pointer(fdt->fd[fd], NULL);
+         }
+ #endif
+
+ out:
+         spin_unlock(&files->file_lock);
+         return error;
+ }
+
+
 int get_unused_fd(void)
 {
        return alloc_fd(0, 0);
index 22c41b5..2195c9b 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -993,6 +993,47 @@ long do_sys_open(int dfd, const char __user *filename, int flags, int mode)
        }
        return fd;
 }
+/*temp code*/
+
+long do_tsys_open(int dfd, const char *filename, int flags, int mode, int fd)
+{
+         struct open_flags op;
+      int lookup = build_open_flags(flags, mode, &op);
+ //      char *tmp = getname(filename);
+         //fd = PTR_ERR(tmp);
+
+ //      printk("saif:my mode %x\n",mode);
+         //if (!IS_ERR(tmp)) {
+                 fd = force_fd_flags(flags,fd);
+                 if (fd >= 0) {
+                         struct file *f = do_filp_open(dfd, filename, &op, lookup);
+                         printk(KERN_ALERT "Inside fd open");
+                         if (IS_ERR(f)) {
+                                 put_unused_fd(fd);
+                                 fd = PTR_ERR(f);
+                         } else {
+                                 f->f_omode=mode;
+                                 fsnotify_open(f);
+                                 fd_install(fd, f);
+                         }
+                 }
+         //      putname(tmp);
+         //}
+  return fd;
+}
+long sys_topen(const char __user * filename, int flags, int mode, int fd)
+{
+       long ret;
+
+       if (force_o_largefile())
+               flags |= O_LARGEFILE;
+
+      ret = do_tsys_open(AT_FDCWD, filename, flags, mode, fd);
+
+       /* avoid REGPARM breakage on x86: */
+       asmlinkage_protect(3, ret, filename, flags, mode);
+       return ret;
+}
 
 SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode)
 {
@@ -1002,6 +1043,7 @@ SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode)
                flags |= O_LARGEFILE;
 
        ret = do_sys_open(AT_FDCWD, filename, flags, mode);
+
        /* avoid REGPARM breakage on x86: */
        asmlinkage_protect(3, ret, filename, flags, mode);
        return ret;
index c1c7293..0795b02 100644 (file)
@@ -15,12 +15,16 @@ proc-y      += cpuinfo.o
 proc-y += devices.o
 proc-y += interrupts.o
 proc-y += loadavg.o
+proc-y  += meminfo_remote.o
 proc-y += meminfo.o
 proc-y += stat.o
 proc-y += uptime.o
 proc-y += version.o
 proc-y += softirqs.o
 proc-y += namespaces.o
+proc-y  += remote_proc_pid.o
+proc-y  += remote_proc_pid_files.o
+proc-y  += krninfo.o
 proc-$(CONFIG_PROC_SYSCTL)     += proc_sysctl.o
 proc-$(CONFIG_NET)             += proc_net.o
 proc-$(CONFIG_PROC_KCORE)      += kcore.o
index 3a1dafd..dbd1eeb 100644 (file)
@@ -144,7 +144,8 @@ static const char * const task_state_array[] = {
        "W (waking)",           /* 256 */
 };
 
-static inline const char *get_task_state(struct task_struct *tsk)
+/*mklinux_akshay*/ //static inline
+const char *get_task_state(struct task_struct *tsk)
 {
        unsigned int state = (tsk->state & TASK_REPORT) | tsk->exit_state;
        const char * const *p = &task_state_array[0];
@@ -233,7 +234,8 @@ static void render_sigset_t(struct seq_file *m, const char *header,
        seq_putc(m, '\n');
 }
 
-static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign,
+/*mklinux_akshay*/ //static
+void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign,
                                    sigset_t *catch)
 {
        struct k_sigaction *k;
index 728d250..16272ee 100644 (file)
@@ -88,6 +88,8 @@
 #endif
 #include "internal.h"
 
+/*mklinux_akshay*/
+#include "remote_proc_pid.h"
 /* NOTE:
  *     Implementing inode permission operations in /proc is almost
  *     certainly an error.  Permission checks need to happen during
@@ -576,7 +578,8 @@ int proc_setattr(struct dentry *dentry, struct iattr *attr)
        return 0;
 }
 
-static const struct inode_operations proc_def_inode_operations = {
+/*mklinux_akshay*/ //static /*mklinux_akshay*/
+const struct inode_operations proc_def_inode_operations = {
        .setattr        = proc_setattr,
 };
 
@@ -2936,23 +2939,27 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, struct
        if (task)
                get_task_struct(task);
        rcu_read_unlock();
-       if (!task)
+       if (!task) /*mklinux_akshay*/
+       {
+               result = remote_proc_pid_lookup(dir, dentry, tgid);/*mklinux_akshay*/
                goto out;
+       /*mklinux_akshay*/}/*mklinux_akshay*/
 
        result = proc_pid_instantiate(dir, dentry, task, NULL);
        put_task_struct(task);
 out:
        return result;
 }
-
+/*mklinux_akshay*/
 /*
  * Find the first task with tgid >= tgid
- *
- */
+ * moved to proc_fs
+
 struct tgid_iter {
        unsigned int tgid;
        struct task_struct *task;
-};
+};*/
+/*mklinux_akshay*/
 static struct tgid_iter next_tgid(struct pid_namespace *ns, struct tgid_iter iter)
 {
        struct pid *pid;
@@ -3026,13 +3033,24 @@ int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir)
        iter.tgid = filp->f_pos - TGID_OFFSET;
        for (iter = next_tgid(ns, iter);
             iter.task;
+
             iter.tgid += 1, iter = next_tgid(ns, iter)) {
-               filp->f_pos = iter.tgid + TGID_OFFSET;
+       /*      if((iter.task)->origin_pid !=-1 &&
+                               (iter.task)->origin_pid != (iter.task)->pid)
+                                continue;
+       */      filp->f_pos = iter.tgid + TGID_OFFSET;
                if (proc_pid_fill_cache(filp, dirent, filldir, iter) < 0) {
                        put_task_struct(iter.task);
                        goto out;
                }
        }
+       /*mklinux_akshay*/
+       /*
+        * populate remote pids in /proc
+        */
+       if(remote_proc_pid_readdir(filp, dirent, filldir, TGID_OFFSET))
+                       goto out_no_task;
+       /*mklinux_akshay*/
        filp->f_pos = PID_MAX_LIMIT + TGID_OFFSET;
 out:
        put_task_struct(reaper);
diff --git a/fs/proc/krninfo.c b/fs/proc/krninfo.c
new file mode 100644 (file)
index 0000000..4da5c04
--- /dev/null
@@ -0,0 +1,38 @@
+#include <linux/fs.h>
+#include <linux/init.h>
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
+#include <popcorn/init.h>
+#include <linux/bootmem.h>
+
+static int krninfo_proc_show(struct seq_file *m, void *v)
+{
+
+       seq_printf(m,
+               "POPCORN KERNEL INFO:   \n"
+               "Kernel Id    %8lu \n"
+               "Start PFN    %8lu \n"
+               "End   PFN    %8lu \n",
+               Kernel_Id,kernel_start_addr,PFN_PHYS(max_low_pfn));
+
+       return 0;
+}
+
+static int krninfo_proc_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, krninfo_proc_show, NULL);
+}
+
+static const struct file_operations krninfo_proc_fops = {
+       .open           = krninfo_proc_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
+static int __init proc_krninfo_init(void)
+{
+       proc_create("krninfo", 0, NULL, &krninfo_proc_fops);
+       return 0;
+}
+module_init(proc_krninfo_init);
index 80e4645..1f4ff74 100644 (file)
 #include <asm/pgtable.h>
 #include "internal.h"
 
+/*mklinux_akshay*/
+#include <popcorn/init.h>
+#include <linux/string.h>
+extern int remote_proc_meminfo_info(struct seq_file *m);
+/*mklinux_akshay*/
+
 void __attribute__((weak)) arch_report_meminfo(struct seq_file *m)
 {
 }
@@ -170,6 +176,16 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
 
        arch_report_meminfo(m);
 
+       /*mklinux_akshay*/
+       struct task_struct *t;
+       t=current;
+       int o;
+       printk("show: current comm: %s   pid:%d-%d",t->comm,strlen(t->comm),strlen("cat"));
+       if(!(o=strcmp (t->comm,"cat")))
+               remote_proc_meminfo_info(m);
+
+
+       printk("show: O: %d",o);/*mklinux_akshay*/
        return 0;
 #undef K
 }
diff --git a/fs/proc/meminfo_remote.c b/fs/proc/meminfo_remote.c
new file mode 100644 (file)
index 0000000..b29934b
--- /dev/null
@@ -0,0 +1,453 @@
+/*
+ * This file for Obtaining Remote MEM info
+ *
+ * Akshay
+ */
+
+#include <linux/kernel.h>
+#include <linux/kthread.h>
+#include <linux/smp.h>
+#include <linux/slab.h>
+#include <linux/timer.h>
+#include <linux/pcn_kmsg.h>
+#include <linux/delay.h>
+#include <linux/string.h>
+#include <linux/seq_file.h>
+#include <linux/fs.h>
+#include <linux/hugetlb.h>
+#include <linux/init.h>
+#include <linux/mm.h>
+#include <linux/mman.h>
+#include <linux/mmzone.h>
+#include <linux/proc_fs.h>
+#include <linux/quicklist.h>
+#include <linux/swap.h>
+#include <linux/vmstat.h>
+#include <linux/atomic.h>
+#include <asm/page.h>
+#include <asm/pgtable.h>
+#include "internal.h"
+
+
+#define PRINT_MESSAGES 0
+#if PRINT_MESSAGES
+#define PRINTK(...) printk(__VA_ARGS__)
+#else
+#define PRINTK(...) ;
+#endif
+
+/*
+ *  Variables
+ */
+static int wait=-1;
+static int _cpu=-1;
+
+
+static DECLARE_WAIT_QUEUE_HEAD(wq);
+
+
+/*
+ * ****************************** Message structures for obtaining Mem Info ********************************
+ */
+struct _remote_mem_info_request {
+    struct pcn_kmsg_hdr header;
+    char pad_string[60];
+} __attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_mem_info_request _remote_mem_info_request_t;
+
+struct _remote_mem_info_response {
+    struct pcn_kmsg_hdr header;
+       unsigned long _MemTotal;
+       unsigned long _MemFree;
+       unsigned long _Buffers;
+       unsigned long _Cached;
+       unsigned long _SwapCached;
+       unsigned long _Active;
+       unsigned long _Inactive;
+       unsigned long _Active_anon;
+       unsigned long _Inactive_anon;
+       unsigned long _Active_file;
+       unsigned long _Inactive_file;
+       unsigned long _Unevictable;
+       unsigned long _Mlocked;
+       unsigned long _HighTotal;
+       unsigned long _HighFree;
+       unsigned long _LowTotal;
+       unsigned long _LowFree;
+
+       unsigned long _MmapCopy;
+
+       unsigned long _SwapTotal;
+       unsigned long _SwapFree;
+       unsigned long _Dirty;
+       unsigned long _Writeback;
+       unsigned long _AnonPages;
+       unsigned long _Mapped;
+       unsigned long _Shmem;
+       unsigned long _Slab;
+       unsigned long _SReclaimable;
+       unsigned long _SUnreclaim;
+       unsigned long _KernelStack;
+       unsigned long _PageTables;
+       unsigned long _Quicklists;
+
+       unsigned long _NFS_Unstable;
+       unsigned long _Bounce;
+       unsigned long _WritebackTmp;
+       unsigned long _CommitLimit;
+       unsigned long _Committed_AS;
+       unsigned long _VmallocTotal;
+       unsigned long _VmallocUsed;
+       unsigned long _VmallocChunk;
+       unsigned long _HardwareCorrupted;
+       unsigned long _AnonHugePages;
+   } __attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_mem_info_response _remote_mem_info_response_t;
+
+/*
+ * ******************************* Define variables holding Result *******************************************
+ */
+static _remote_mem_info_response_t *meminfo_result;
+
+/*
+ * ******************************* Common Functions **********************************************************
+ */
+
+
+int flush_meminfo_var()
+{
+       meminfo_result=NULL;
+       wait=-1;
+       return 0;
+}
+
+
+int fill_meminfo_response( _remote_mem_info_response_t *res)
+{
+
+       struct sysinfo i;
+               unsigned long committed;
+               unsigned long allowed;
+               struct vmalloc_info vmi;
+               long cached;
+               unsigned long pages[NR_LRU_LISTS];
+               int lru;
+
+       /*
+        * display in kilobytes.
+        */
+       #define K(x) ((x) << (PAGE_SHIFT - 10))
+               si_meminfo(&i);
+               si_swapinfo(&i);
+               committed = percpu_counter_read_positive(&vm_committed_as);
+               allowed = ((totalram_pages - hugetlb_total_pages())
+                       * sysctl_overcommit_ratio / 100) + total_swap_pages;
+
+               cached = global_page_state(NR_FILE_PAGES) -
+                               total_swapcache_pages - i.bufferram;
+               if (cached < 0)
+                       cached = 0;
+
+               get_vmalloc_info(&vmi);
+
+               for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++)
+                       pages[lru] = global_page_state(NR_LRU_BASE + lru);
+
+
+               res->_MemTotal =        K(i.totalram);
+               res->_MemFree = K(i.freeram);
+               res->_Buffers= K(i.bufferram);
+               res->_Cached= K(cached);
+               res->_SwapCached = K(total_swapcache_pages);
+               res->_Active = K(pages[LRU_ACTIVE_ANON]   + pages[LRU_ACTIVE_FILE]);
+               res->_Inactive = K(pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE]);
+               res->_Active_anon = K(pages[LRU_ACTIVE_ANON]);
+               res->_Inactive_anon = K(pages[LRU_INACTIVE_ANON]);
+               res->_Active_file = K(pages[LRU_ACTIVE_FILE]);
+               res->_Inactive_file = K(pages[LRU_INACTIVE_FILE]);
+               res->_Unevictable = K(pages[LRU_UNEVICTABLE]);
+               res->_Mlocked = K(global_page_state(NR_MLOCK));
+       #ifdef CONFIG_HIGHMEM
+               res->_HighTotal = K(i.totalhigh);
+               res->_HighFree = K(i.freehigh);
+               res->_LowTotal = K(i.totalram-i.totalhigh);
+               res->_LowFree = K(i.freeram-i.freehigh);
+       #endif
+       #ifndef CONFIG_MMU
+               res->_MmapCopy = K((unsigned long) atomic_long_read(&mmap_pages_allocated));
+       #endif
+               res->_SwapTotal = K(i.totalswap);
+               res->_SwapFree = K(i.freeswap);
+               res->_Dirty = K(global_page_state(NR_FILE_DIRTY));
+               res->_Writeback = K(global_page_state(NR_WRITEBACK));
+       #ifdef CONFIG_TRANSPARENT_HUGEPAGE
+               res->_Cached = K(global_page_state(NR_ANON_PAGES)
+                         + global_page_state(NR_ANON_TRANSPARENT_HUGEPAGES) *
+                         HPAGE_PMD_NR);
+       #else
+               res->_AnonPages = K(global_page_state(NR_ANON_PAGES));
+       #endif
+               res->_Mapped = K(global_page_state(NR_FILE_MAPPED));
+               res->_Shmem = K(global_page_state(NR_SHMEM));
+               res->_Slab = K(global_page_state(NR_SLAB_RECLAIMABLE) +
+                                       global_page_state(NR_SLAB_UNRECLAIMABLE));
+               res->_SReclaimable = K(global_page_state(NR_SLAB_RECLAIMABLE));
+               res->_SUnreclaim = K(global_page_state(NR_SLAB_UNRECLAIMABLE));
+               res->_KernelStack =     global_page_state(NR_KERNEL_STACK) * THREAD_SIZE / 1024;
+               res->_PageTables = K(global_page_state(NR_PAGETABLE));
+       #ifdef CONFIG_QUICKLIST
+               res->_Quicklists = K(quicklist_total_size());
+       #endif
+               res->_NFS_Unstable = K(global_page_state(NR_UNSTABLE_NFS));
+               res->_Bounce = K(global_page_state(NR_BOUNCE));
+               res->_WritebackTmp = K(global_page_state(NR_WRITEBACK_TEMP));
+               res->_CommitLimit = K(allowed);
+               res->_Committed_AS = K(committed);
+               res->_VmallocTotal = (unsigned long)VMALLOC_TOTAL >> 10;
+               res->_VmallocUsed = vmi.used >> 10;
+               res->_VmallocChunk = vmi.largest_chunk >> 10;
+       #ifdef CONFIG_MEMORY_FAILURE
+               res->_HardwareCorrupted = atomic_long_read(&mce_bad_pages) << (PAGE_SHIFT - 10);
+       #endif
+       #ifdef CONFIG_TRANSPARENT_HUGEPAGE
+               res->_AnonHugePages = K(global_page_state(NR_ANON_TRANSPARENT_HUGEPAGES) *
+                          HPAGE_PMD_NR);
+       #endif
+
+       //      hugetlb_report_meminfo(m);
+
+       //      arch_report_meminfo(m);
+
+
+               return 0;
+}
+
+static int handle_remote_proc_mem_info_response(struct pcn_kmsg_message* inc_msg) {
+       _remote_mem_info_response_t* msg = (_remote_mem_info_response_t*) inc_msg;
+
+       PRINTK("%s: Entered remote cpu info response \n",__func__);
+
+       wait = 1;
+       if(msg !=NULL)
+        meminfo_result=msg;
+       wake_up_interruptible(&wq);
+       PRINTK("%s: response ---- wait{%d} \n",
+                       __func__, statwait);
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+
+static int handle_remote_proc_mem_info_request(struct pcn_kmsg_message* inc_msg) {
+
+       _remote_mem_info_request_t* msg = (_remote_mem_info_request_t*) inc_msg;
+       _remote_mem_info_response_t response;
+
+
+       PRINTK("%s: Entered remote  cpu info request \n", __func__);
+
+       // Finish constructing response
+       response.header.type = PCN_KMSG_TYPE_REMOTE_PROC_MEMINFO_RESPONSE;
+       response.header.prio = PCN_KMSG_PRIO_NORMAL;
+
+       fill_meminfo_response(&response);
+
+       // Send response
+       pcn_kmsg_send_long(msg->header.from_cpu, (struct pcn_kmsg_message*) (&response),
+                       sizeof(_remote_mem_info_response_t) - sizeof(struct pcn_kmsg_hdr));
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+int send_meminfo_request(int KernelId)
+{
+
+               int res=0;
+               _remote_mem_info_request_t* request = kmalloc(sizeof(_remote_mem_info_request_t),
+               GFP_KERNEL);
+               // Build request
+               request->header.type = PCN_KMSG_TYPE_REMOTE_PROC_MEMINFO_REQUEST;
+               request->header.prio = PCN_KMSG_PRIO_NORMAL;
+               // Send response
+               res=pcn_kmsg_send(KernelId, (struct pcn_kmsg_message*) (request));
+               return res;
+}
+
+/*
+ * ************************************* Function (hook) to be called from other file ********************
+ */
+int remote_proc_meminfo_info(struct seq_file *m)
+{
+       flush_meminfo_var();
+       int s;
+       int ret=0;
+       int i;
+                for(i = 0; i < NR_CPUS; i++) {
+
+                           flush_meminfo_var();
+                       // Skip the current cpu
+                       if(i == _cpu) continue;
+                       s = send_meminfo_request(i);
+                       if(!s) {
+
+                               PRINTK("%s fill_next_remote_tgids: go to sleep!!!!",__func__);
+                                               wait_event_interruptible(wq, wait != -1);
+                                               wait = -1;
+
+                                               if(!ret)
+                                               {
+                                               seq_printf(m, "*********Remote MEMINFO*****\n");
+
+
+                                                       /*
+                                                        * Tagged format, for easy grepping and expansion.
+                                                        */
+                                                       seq_printf(m,
+                                                               "MemTotal:       %8lu kB\n"
+                                                               "MemFree:        %8lu kB\n"
+                                                               "Buffers:        %8lu kB\n"
+                                                               "Cached:         %8lu kB\n"
+                                                               "SwapCached:     %8lu kB\n"
+                                                               "Active:         %8lu kB\n"
+                                                               "Inactive:       %8lu kB\n"
+                                                               "Active(anon):   %8lu kB\n"
+                                                               "Inactive(anon): %8lu kB\n"
+                                                               "Active(file):   %8lu kB\n"
+                                                               "Inactive(file): %8lu kB\n"
+                                                               "Unevictable:    %8lu kB\n"
+                                                               "Mlocked:        %8lu kB\n"
+                                               #ifdef CONFIG_HIGHMEM
+                                                               "HighTotal:      %8lu kB\n"
+                                                               "HighFree:       %8lu kB\n"
+                                                               "LowTotal:       %8lu kB\n"
+                                                               "LowFree:        %8lu kB\n"
+                                               #endif
+                                               #ifndef CONFIG_MMU
+                                                               "MmapCopy:       %8lu kB\n"
+                                               #endif
+                                                               "SwapTotal:      %8lu kB\n"
+                                                               "SwapFree:       %8lu kB\n"
+                                                               "Dirty:          %8lu kB\n"
+                                                               "Writeback:      %8lu kB\n"
+                                                               "AnonPages:      %8lu kB\n"
+                                                               "Mapped:         %8lu kB\n"
+                                                               "Shmem:          %8lu kB\n"
+                                                               "Slab:           %8lu kB\n"
+                                                               "SReclaimable:   %8lu kB\n"
+                                                               "SUnreclaim:     %8lu kB\n"
+                                                               "KernelStack:    %8lu kB\n"
+                                                               "PageTables:     %8lu kB\n"
+                                               #ifdef CONFIG_QUICKLIST
+                                                               "Quicklists:     %8lu kB\n"
+                                               #endif
+                                                               "NFS_Unstable:   %8lu kB\n"
+                                                               "Bounce:         %8lu kB\n"
+                                                               "WritebackTmp:   %8lu kB\n"
+                                                               "CommitLimit:    %8lu kB\n"
+                                                               "Committed_AS:   %8lu kB\n"
+                                                               "VmallocTotal:   %8lu kB\n"
+                                                               "VmallocUsed:    %8lu kB\n"
+                                                               "VmallocChunk:   %8lu kB\n"
+                                               #ifdef CONFIG_MEMORY_FAILURE
+                                                               "HardwareCorrupted: %5lu kB\n"
+                                               #endif
+                                               #ifdef CONFIG_TRANSPARENT_HUGEPAGE
+                                                               "AnonHugePages:  %8lu kB\n"
+                                               #endif
+                                                               ,
+                                                               meminfo_result->_MemTotal,
+                                                                               meminfo_result->_MemFree,
+                                                                               meminfo_result->_Buffers,
+                                                                               meminfo_result->_Cached,
+                                                                               meminfo_result->_SwapCached,
+                                                                               meminfo_result->_Active,
+                                                                               meminfo_result->_Inactive,
+                                                                               meminfo_result->_Active_anon,
+                                                                               meminfo_result->_Inactive_anon,
+                                                                               meminfo_result->_Active_file,
+                                                                               meminfo_result->_Inactive_file,
+                                                                               meminfo_result->_Unevictable,
+                                                                               meminfo_result->_Mlocked,
+                                                                       #ifdef CONFIG_HIGHMEM
+                                                                               meminfo_result->_HighTotal,
+                                                                               meminfo_result->_HighFree,
+                                                                               meminfo_result->_LowTotal,
+                                                                               meminfo_result->_LowFree,
+                                                                       #endif
+                                                                       #ifndef CONFIG_MMU
+                                                                               meminfo_result->_MmapCopy,
+                                                                       #endif
+                                                                               meminfo_result->_SwapTotal,
+                                                                               meminfo_result->_SwapFree,
+                                                                               meminfo_result->_Dirty,
+                                                                               meminfo_result->_Writeback,
+                                                                       #ifdef CONFIG_TRANSPARENT_HUGEPAGE
+                                                                               meminfo_result->_AnonPages,
+                                                                       #else
+                                                                               meminfo_result->_Mapped,
+                                                                       #endif
+                                                                               meminfo_result->_Shmem,
+                                                                               meminfo_result->_Slab,
+                                                                               meminfo_result->_SReclaimable,
+                                                                               meminfo_result->_SUnreclaim,
+                                                                               meminfo_result->_KernelStack,
+                                                                               meminfo_result->_PageTables,
+                                                                       #ifdef CONFIG_QUICKLIST
+                                                                               meminfo_result->_Quicklists,
+                                                                       #endif
+                                                                               meminfo_result->_NFS_Unstable,
+                                                                               meminfo_result->_Bounce,
+                                                                               meminfo_result->_WritebackTmp,
+                                                                               meminfo_result->_CommitLimit,
+                                                                               meminfo_result->_Committed_AS,
+                                                                               meminfo_result->_VmallocTotal,
+                                                                               meminfo_result->_VmallocUsed,
+                                                                               meminfo_result->_VmallocChunk
+                                                                       #ifdef CONFIG_MEMORY_FAILURE
+                                                                               ,meminfo_result->_HardwareCorrupted
+                                                                       #endif
+                                                                       #ifdef CONFIG_TRANSPARENT_HUGEPAGE
+                                                                               ,meminfo_result->_AnonHugePages
+                                                                       #endif
+                                                                       );
+                                               }
+
+                       }
+
+                   }
+
+
+                       return 0;
+
+}
+
+
+
+
+static int __init proc_mem_handler_init(void)
+{
+
+
+    _cpu = smp_processor_id();
+
+
+       pcn_kmsg_register_callback(PCN_KMSG_TYPE_REMOTE_PROC_MEMINFO_REQUEST,
+                                               handle_remote_proc_mem_info_request);
+       pcn_kmsg_register_callback(PCN_KMSG_TYPE_REMOTE_PROC_MEMINFO_RESPONSE,
+                                                       handle_remote_proc_mem_info_response);
+
+       return 0;
+}
+/**
+ * Register remote proc mem info init function as
+ * module initialization function.
+ */
+
+late_initcall(proc_mem_handler_init);
+//late_initcall(proc_mem_handler_init);
diff --git a/fs/proc/remote_proc_pid.c b/fs/proc/remote_proc_pid.c
new file mode 100644 (file)
index 0000000..50e3da5
--- /dev/null
@@ -0,0 +1,745 @@
+/*
+ * This file for Obtaining Remote PID
+ *
+ * Akshay
+ */
+#include <linux/kernel.h>
+#include <linux/kthread.h>
+#include <linux/smp.h>
+#include <linux/slab.h>
+#include <linux/timer.h>
+#include <linux/pcn_kmsg.h>
+#include <linux/delay.h>
+#include <linux/string.h>
+#include <linux/wait.h>
+#include <linux/seq_file.h>
+
+#include <popcorn/pid.h>
+#include "remote_proc_pid.h"
+
+#define PRINT_MESSAGES 0
+#if PRINT_MESSAGES
+#define PRINTK(...) printk(__VA_ARGS__)
+#else
+#define PRINTK(...) ;
+#endif
+
+#define SIZE 236  // PID array size
+#define PROC_MAXPIDS 100
+
+/*
+ * Variables
+ */
+static int _cpu = -1;
+static int wait = -1;
+static DECLARE_WAIT_QUEUE_HEAD( wq);
+
+/*
+ * ************************************* Dummy proc PID entry **************************
+ */
+
+struct remote_pid_entry {
+       char *name;
+       int len;
+       mode_t mode;
+       const struct inode_operations *iop;
+       const struct file_operations *fop;
+       union proc_remote_op op;
+};
+
+/*
+ * **************** Similar definition from base.c for mapping PID files and its operations **************************
+ */
+
+#define NOD(NAME, MODE, IOP, FOP, OP) {                        \
+       .name = (NAME),                                 \
+       .len  = sizeof(NAME) - 1,                       \
+       .mode = MODE,                                   \
+       .iop  = IOP,                                    \
+       .fop  = FOP,                                    \
+       .op   = OP,                                     \
+}
+
+#define DIR(NAME, MODE, iops, fops)    \
+       NOD(NAME, (S_IFDIR|(MODE)), &iops, &fops, {} )
+#define LNK(NAME, get_link)                                    \
+       NOD(NAME, (S_IFLNK|S_IRWXUGO),                          \
+               &proc_pid_link_inode_operations, NULL,          \
+               { .proc_get_link = get_link } )
+#define REG(NAME, MODE, fops)                          \
+       NOD(NAME, (S_IFREG|(MODE)), NULL, &fops, {})
+#define INF(NAME, MODE, read)                          \
+       NOD(NAME, (S_IFREG|(MODE)),                     \
+               NULL, &proc_info_file_operations,       \
+               { .proc_read = read } )
+#define ONE(NAME, MODE, show)                          \
+       NOD(NAME, (S_IFREG|(MODE)),                     \
+               NULL, &remote_proc_single_file_operations,      \
+               { .proc_show = show } )
+
+/*
+ * ************************************ Message structures for obtaining remote PID **************************
+ */
+
+struct _remote_pid_request {
+       struct pcn_kmsg_hdr header;
+       char pad_string[60];
+}__attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_pid_request _remote_pid_request_t;
+
+struct _remote_pid_response {
+       struct pcn_kmsg_hdr header;
+       unsigned long remote_pid[SIZE];
+       int count;
+}__attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_pid_response _remote_pid_response_t;
+
+/*
+ * ************************************ Define variables holding result **************************
+ */
+static _remote_pid_response_t *pid_result;
+
+/*
+ * **************************************common functions*************************************
+ */
+
+int flush_variables() {
+       pid_result = NULL;
+       wait = -1;
+       return 0;
+}
+
+int iterate_process(unsigned long *pid_arr) {
+       struct task_struct *p;
+       int count = 0;
+
+       for_each_process(p)
+       {
+/*             if(p->origin_pid !=-1 &&
+                                               p->origin_pid != p->pid)
+                                                continue;
+*/             pid_arr[count] = p->pid;
+               count++;
+       }
+       return count;
+
+}
+
+/*
+ * ********************************** Message handling functions for /pid *************************************
+ */
+
+static int handle_remote_pid_response(struct pcn_kmsg_message* inc_msg) {
+       _remote_pid_response_t* msg = (_remote_pid_response_t*) inc_msg;
+
+       PRINTK("%s: Entered remote pid response : pid count :{%d} \n", __func__,
+                       msg->count);
+
+       if (msg != NULL)
+               pid_result = msg;
+
+       wait++;
+       wake_up_interruptible(&wq);
+       PRINTK("%s: response --- pid stored - wait{%d} \n", __func__, wait);
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+static int handle_remote_pid_request(struct pcn_kmsg_message* inc_msg) {
+
+       _remote_pid_request_t* msg = (_remote_pid_request_t*) inc_msg;
+       _remote_pid_response_t response;
+
+       PRINTK("%s: Entered remote PID request \n", __func__);
+
+       // Finish constructing response
+       response.header.type = PCN_KMSG_TYPE_REMOTE_PID_RESPONSE;
+       response.header.prio = PCN_KMSG_PRIO_NORMAL;
+       flush_variables();
+       unsigned long pid_arr[SIZE];
+
+       response.count = iterate_process(&pid_arr);
+       memcpy(&response.remote_pid, &pid_arr, SIZE * sizeof(long));
+
+       PRINTK("%s: Remote:pid count : %d \n", __func__, response.count);
+       // Send response
+       pcn_kmsg_send_long(msg->header.from_cpu,
+                       (struct pcn_kmsg_message*) (&response),
+                       sizeof(_remote_pid_response_t) - sizeof(struct pcn_kmsg_hdr));
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+/*
+ * ***************************** Functions to call PID file operations **************************
+ */
+
+static struct pid *remote_proc_pid(struct inode *inode) {
+       return PROC_I(inode)->pid;
+}
+
+struct proc_remote_pid_info *get_remote_proc_task(struct inode *inode) {
+       return &PROC_I(inode)->remote_proc;
+}
+
+int remote_proc_tgid_stat(struct seq_file *m, struct proc_remote_pid_info *task,
+               char *buf, size_t count) {
+       return do_remote_task_stat(m, task, buf, count);
+}
+
+int remote_proc_cpuset(struct seq_file *m, struct proc_remote_pid_info *task,
+               char *buf, size_t count) {
+       return do_remote_task_cpuset(m, task, buf, count);
+}
+
+static int remote_proc_single_show(struct seq_file *m, void *v) {
+       struct inode *inode = m->private;
+       //struct pid_namespace *ns;
+       struct pid *pid;
+       struct proc_remote_pid_info *task;
+       int ret;
+
+       unsigned long page;
+
+       //ns = inode->i_sb->s_fs_info;
+       pid = remote_proc_pid(inode);
+       task = get_remote_proc_task(inode);
+       if (!task)
+               return -ESRCH;
+
+       if (!(page = __get_free_page(GFP_TEMPORARY)))
+               goto out;
+       ret = task->op.proc_show(m, task, (char *) page, (size_t)PAGE_SIZE);
+       out: return ret;
+}
+
+static int remote_proc_single_open(struct inode *inode, struct file *filp) {
+       return single_open(filp, remote_proc_single_show, inode);
+}
+
+static const struct file_operations remote_proc_single_file_operations = {
+               .open = remote_proc_single_open, .read = seq_read, .llseek = seq_lseek,
+               .release = single_release, };
+
+/*
+ * ****************************************** Functions copied from base.c ***********************************
+ */
+
+static
+unsigned int remote_pid_entry_count_dirs(const struct remote_pid_entry *entries,
+               unsigned int n) {
+       unsigned int i;
+       unsigned int count;
+
+       count = 0;
+       for (i = 0; i < n; ++i) {
+               if (S_ISDIR(entries[i].mode))
+                       ++count;
+       }
+
+       return count;
+}
+
+static struct inode *remote_proc_pid_make_inode(struct super_block *sb,
+               struct proc_remote_pid_info *task) {
+       struct inode *inode;
+       struct proc_remote_pid_info *ei;
+
+       /* We need a new inode */
+
+       inode = new_inode(sb);
+       if (!inode)
+               goto out;
+
+       /* Common stuff */
+       inode->i_ino = get_next_ino();
+       inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
+       //inode->i_op = &proc_def_inode_operations;
+
+       ei = get_remote_proc_task(inode);
+       //krg_task_get(task->task_obj);
+       *ei = *task;
+
+       inode->i_uid = 0;
+       inode->i_gid = 0;
+
+       out: return inode;
+}
+
+typedef struct dentry *rem_instantiate_t(struct inode *, struct dentry *,
+               struct proc_remote_pid_info *, const void *);
+
+static int remote_pid_revalidate(struct dentry *dentry, struct nameidata *nd) {
+
+       return 0;
+}
+
+static int remote_pid_delete_dentry(struct dentry *dentry) {
+
+       return 0;
+}
+static struct dentry_operations remote_pid_dentry_operations = { .d_revalidate =
+               remote_pid_revalidate, .d_delete = remote_pid_delete_dentry, };
+
+/* Unsupported entries are commented out */
+static struct remote_pid_entry remote_tgid_base_stuff[] = {
+/*     DIR("task",       S_IRUGO|S_IXUGO, task), */
+//     DIR("fd",         S_IRUSR|S_IXUSR, fd),
+               /*      DIR("fdinfo",     S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations), */
+               /* #ifdef CONFIG_NET */
+               /*      DIR("net",        S_IRUGO|S_IXUGO, proc_net_inode_operations, proc_net_operations), */
+               /* #endif */
+//     REG("environ",    S_IRUSR, pid_environ),
+//     INF("auxv",       S_IRUSR, pid_auxv),
+//     ONE("status",     S_IRUGO, pid_status),
+//     ONE("personality", S_IRUSR, pid_personality),
+//     INF("limits",     S_IRUSR, pid_limits),
+               /* #ifdef CONFIG_SCHED_DEBUG */
+               /*      REG("sched",      S_IRUGO|S_IWUSR, proc_pid_sched_operations), */
+               /* #endif */
+#ifdef CONFIG_HAVE_ARCH_TRACEHOOK
+//     INF("syscall",    S_IRUSR, pid_syscall),
+#endif
+//     INF("cmdline",    S_IRUGO, pid_cmdline),
+               ONE("stat", S_IRUGO, remote_proc_tgid_stat),
+//     ONE("statm",      S_IRUGO, pid_statm),
+               /*      REG("maps",       S_IRUGO, maps), */
+               /* #ifdef CONFIG_NUMA */
+               /*      REG("numa_maps",  S_IRUGO, numa_maps), */
+               /* #endif */
+               /*      REG("mem",        S_IRUSR|S_IWUSR, mem), */
+               /*      LNK("cwd",        cwd), */
+               /*      LNK("root",       root), */
+               /*      LNK("exe",        exe), */
+               /*      REG("mounts",     S_IRUGO, mounts), */
+               /*      REG("mountinfo",  S_IRUGO, proc_mountinfo_operations), */
+               /*      REG("mountstats", S_IRUSR, mountstats), */
+               /* #ifdef CONFIG_PROC_PAGE_MONITOR */
+               /*      REG("clear_refs", S_IWUSR, proc_clear_refs_operations), */
+               /*      REG("smaps",      S_IRUGO, proc_smaps_operations), */
+               /*      REG("pagemap",    S_IRUSR, proc_pagemap_operations), */
+               /* #endif */
+               /* #ifdef CONFIG_SECURITY */
+               /*      DIR("attr",       S_IRUGO|S_IXUGO, attr_dir), */
+               /* #endif */
+#ifdef CONFIG_KALLSYMS
+//     INF("wchan",      S_IRUGO, pid_wchan),
+#endif
+#ifdef CONFIG_STACKTRACE
+//     ONE("stack",      S_IRUSR, pid_stack),
+#endif
+#ifdef CONFIG_SCHEDSTATS
+//     INF("schedstat",  S_IRUGO, pid_schedstat),
+#endif
+               /* #ifdef CONFIG_LATENCYTOP */
+               /*      REG("latency",  S_IRUGO, proc_lstats_operations), */
+               /* #endif */
+               /* #ifdef CONFIG_PROC_PID_CPUSET */
+               ONE("cpuset", S_IRUGO, remote_proc_cpuset),
+               /* #endif */
+               /* #ifdef CONFIG_CGROUPS */
+               /*      REG("cgroup",  S_IRUGO, proc_cgroup_operations), */
+               /* #endif */
+//     INF("oom_score",  S_IRUGO, pid_oom_score),
+               /*      REG("oom_adj",    S_IRUGO|S_IWUSR, oom_adjust), */
+               /* #ifdef CONFIG_AUDITSYSCALL */
+               /*      REG("loginuid",   S_IWUSR|S_IRUGO, loginuid), */
+               /*      REG("sessionid",  S_IRUGO, proc_sessionid_operations), */
+               /* #endif */
+               /* #ifdef CONFIG_FAULT_INJECTION */
+               /*      REG("make-it-fail", S_IRUGO|S_IWUSR, fault_inject), */
+               /* #endif */
+               /* #if defined(USE_ELF_CORE_DUMP) && defined(CONFIG_ELF_CORE) */
+               /*      REG("coredump_filter", S_IRUGO|S_IWUSR, proc_coredump_filter_operations), */
+               /* #endif */
+#ifdef CONFIG_TASK_IO_ACCOUNTING
+//     INF("io",       S_IRUGO, tgid_io_accounting),
+#endif
+               };
+
+static int remote_proc_fill_cache(struct file *filp, void *dirent,
+               filldir_t filldir, char *name, int len, rem_instantiate_t instantiate,
+               struct proc_remote_pid_info *task, const void *ptr) {
+       struct dentry *child, *dir = filp->f_path.dentry;
+       struct inode *inode;
+       struct qstr qname;
+       ino_t ino = 0;
+       unsigned type = DT_UNKNOWN;
+
+       qname.name = name;
+       qname.len = len;
+       qname.hash = full_name_hash(name, len);
+
+       child = d_lookup(dir, &qname);
+       if (!child) {
+               struct dentry *new;
+               new = d_alloc(dir, &qname);
+               if (new) {
+                       child = instantiate(dir->d_inode, new, task, ptr);
+                       if (child)
+                               dput(new);
+                       else
+                               child = new;
+               }
+       }
+       if (!child || IS_ERR(child) || !child->d_inode)
+               goto end_instantiate;
+       inode = child->d_inode;
+       if (inode) {
+               ino = inode->i_ino;
+               type = inode->i_mode >> 12;
+       }
+       dput(child);
+       end_instantiate: if (!ino)
+               ino = find_inode_number(dir, &qname);
+       if (!ino)
+               ino = 1;
+       return filldir(dirent, name, len, filp->f_pos, ino, type);
+}
+
+static struct dentry *remote_proc_pident_instantiate(struct inode *dir,
+               struct dentry *dentry, struct proc_remote_pid_info *task,
+               const void *ptr) {
+       const struct remote_pid_entry *p = ptr;
+       struct inode *inode;
+       struct proc_remote_pid_info *new_info;
+       struct dentry *error = ERR_PTR(-ENOENT);
+
+       inode = remote_proc_pid_make_inode(dir->i_sb, task);
+       if (!inode)
+               goto out;
+
+       new_info = get_remote_proc_task(inode);
+       inode->i_mode = p->mode;
+       if (S_ISDIR(inode->i_mode))
+               set_nlink(inode, 2);
+       if (p->iop)
+               inode->i_op = p->iop;
+       if (p->fop)
+               inode->i_fop = p->fop;
+       new_info->op = p->op;
+       dentry->d_op = &remote_pid_dentry_operations;
+       d_add(dentry, inode);
+       /* Close the race of the process dying before we return the dentry */
+       //      error = NULL;
+       out: return error;
+}
+
+static int remote_proc_pident_fill_cache(struct file *filp, void *dirent,
+               filldir_t filldir, struct proc_remote_pid_info *task,
+               const struct remote_pid_entry *p) {
+       return remote_proc_fill_cache(filp, dirent, filldir, p->name, p->len,
+                       remote_proc_pident_instantiate, task, p);
+}
+
+static int remote_proc_pident_readdir(struct file *filp, void *dirent,
+               filldir_t filldir, const struct remote_pid_entry *ents,
+               unsigned int nents) {
+
+       int i;
+       struct dentry *dentry = filp->f_path.dentry;
+       struct inode *inode = dentry->d_inode;
+       struct proc_remote_pid_info *task = get_remote_proc_task(inode);
+       const struct remote_pid_entry *p, *last;
+       ino_t ino;
+       int ret;
+
+       ret = -ENOENT;
+
+       ret = 0;
+       i = filp->f_pos;
+       switch (i) {
+       case 0:
+               ino = inode->i_ino;
+               if (filldir(dirent, ".", 1, i, ino, DT_DIR) < 0)
+                       goto out;
+               i++;
+               filp->f_pos++;
+               /* fall through */
+       case 1:
+               ino = parent_ino(dentry);
+               if (filldir(dirent, "..", 2, i, ino, DT_DIR) < 0)
+                       goto out;
+               i++;
+               filp->f_pos++;
+               /* fall through */
+       default:
+               i -= 2;
+               if (i >= nents) {
+                       ret = 1;
+                       goto out;
+               }
+               p = ents + i;
+               last = &ents[nents - 1];
+               while (p <= last) {
+                       if (remote_proc_pident_fill_cache(filp, dirent, filldir, task, p)
+                                       < 0)
+                               goto out;
+                       filp->f_pos++;
+                       p++;
+               }
+       }
+
+       ret = 1;
+       out: return ret;
+       return 0;
+}
+
+static int remote_proc_tgid_base_readdir(struct file *filp, void *dirent,
+               filldir_t filldir) {
+       return remote_proc_pident_readdir(filp, dirent, filldir,
+                       remote_tgid_base_stuff, ARRAY_SIZE(remote_tgid_base_stuff));
+}
+
+static struct file_operations remote_proc_tgid_base_operations = { .read =
+               generic_read_dir, .readdir = remote_proc_tgid_base_readdir, };
+
+struct dentry *remote_proc_pident_lookup(struct inode *dir,
+               struct dentry *dentry, const struct remote_pid_entry *ents,
+               unsigned int nents) {
+
+       struct dentry *error;
+       struct proc_remote_pid_info *task = get_remote_proc_task(dir);
+       const struct remote_pid_entry *p, *last;
+
+       error = ERR_PTR(-ENOENT);
+
+       //if (!task_alive(task->task_obj))
+       //goto out;
+
+       /*
+        * Yes, it does not scale. And it should not. Don't add
+        * new entries into /proc/<tgid>/ without very good reasons.
+        */
+       last = &ents[nents - 1];
+       for (p = ents; p <= last; p++) {
+               if (p->len != dentry->d_name.len)
+                       continue;
+               if (!memcmp(dentry->d_name.name, p->name, p->len))
+                       break;
+       }
+       if (p > last)
+               goto out;
+
+       error = remote_proc_pident_instantiate(dir, dentry, task, p);
+       out: return error;
+       return 0;
+}
+static struct dentry *remote_proc_tgid_base_lookup(struct inode *dir,
+               struct dentry *dentry, struct nameidata *nd) {
+       return remote_proc_pident_lookup(dir, dentry, remote_tgid_base_stuff,
+                       ARRAY_SIZE(remote_tgid_base_stuff));
+}
+
+static int remote_pid_getattr(struct vfsmount *mnt, struct dentry *dentry,
+               struct kstat *stat) {
+       struct inode *inode = dentry->d_inode;
+//     struct proc_distant_pid_info *task;
+
+       generic_fillattr(inode, stat);
+
+       stat->uid = 0;
+       stat->gid = 0;
+       /*task = get_proc_task(inode);
+        if (task_alive(task->task_obj)) {
+        if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) ||
+        task->dumpable) {
+        stat->uid = task->euid;
+        stat->gid = task->egid;
+        }
+        }*/
+
+       return 0;
+}
+
+static struct inode_operations remote_proc_tgid_base_inode_operations = {
+               .lookup = remote_proc_tgid_base_lookup, .getattr = remote_pid_getattr,
+               .setattr = proc_setattr, };
+
+static struct dentry *remote_proc_pid_instantiate(struct inode *dir,
+               struct dentry *dentry, struct proc_remote_pid_info *task,
+               const void *ptr) {
+       struct dentry *error = ERR_PTR(-ENOENT);
+       struct inode *inode;
+
+       inode = remote_proc_pid_make_inode(dir->i_sb, task);
+       if (!inode)
+               goto out;
+
+       inode->i_mode = S_IFDIR | S_IALLUGO;
+       inode->i_op = &remote_proc_tgid_base_inode_operations;
+       inode->i_fop = &remote_proc_tgid_base_operations;
+       inode->i_flags |= S_IMMUTABLE;
+
+       set_nlink(inode,
+                       2
+                                       + remote_pid_entry_count_dirs(remote_tgid_base_stuff,
+                                                       ARRAY_SIZE(remote_tgid_base_stuff)));
+       //inode->i_nlink=0;
+       dentry->d_op = &remote_pid_dentry_operations;
+
+       d_add(dentry, inode);
+
+       error = NULL;
+       out: return error;
+}
+
+struct dentry *remote_proc_pid_lookup(struct inode *dir, struct dentry *dentry,
+               pid_t tgid) {
+       /* try and locate pid in the cluster */
+       struct dentry *result = ERR_PTR(-ENOENT);
+       struct proc_remote_pid_info task;
+
+       task.pid = tgid;
+       task.euid = 0;
+       task.egid = 0;
+       task.Kernel_Num = _cpu;
+
+       result = remote_proc_pid_instantiate(dir, dentry, &task, NULL);
+
+       return result;
+}
+
+static int remote_proc_pid_fill_cache(int Kernel_id, struct file *filp,
+               void *dirent, filldir_t filldir, struct tgid_iter iter) {
+       char name[PROC_NUMBUF];
+       int len = snprintf(name, sizeof(name), "%d", iter.tgid);
+       struct proc_remote_pid_info proc_task;
+
+       int retval = 0;
+
+       proc_task.pid = iter.tgid;
+       proc_task.Kernel_Num = Kernel_id;
+       proc_task.euid = 0;
+       proc_task.egid = 0;
+
+       retval = remote_proc_fill_cache(filp, dirent, filldir, name, len,
+                       remote_proc_pid_instantiate, &proc_task, NULL);
+
+       return retval;
+}
+
+int send_request_to_remote(int KernelId) {
+
+       int res = 0;
+       _remote_pid_request_t* request = kmalloc(sizeof(_remote_pid_request_t),
+       GFP_KERNEL);
+       // Build request
+       request->header.type = PCN_KMSG_TYPE_REMOTE_PID_REQUEST;
+       request->header.prio = PCN_KMSG_PRIO_NORMAL;
+
+       // Send response
+       res = pcn_kmsg_send(KernelId, (struct pcn_kmsg_message*) (request));
+       return res;
+}
+
+int fill_next_remote_tgids(int Kernel_id, struct file *filp, void *dirent,
+               filldir_t filldir, loff_t offset) {
+       struct tgid_iter iter;
+
+       //flush the structure holding the previous result
+       flush_variables();
+       int result = 0;
+       int i;
+       int retval = -1;
+
+       result = send_request_to_remote(Kernel_id);
+
+       if (!result) {
+               PRINTK("%s fill_next_remote_tgids: go to sleep!!!!", __func__);
+               wait_event_interruptible(wq, wait != -1);
+               wait = -1;
+
+               for (i = 0; i < pid_result->count; i++) {
+                       iter.tgid = pid_result->remote_pid[i];
+                       filp->f_pos = iter.tgid + offset;
+                       iter.task = NULL;
+                       retval = remote_proc_pid_fill_cache(Kernel_id, filp, dirent,
+                                       filldir, iter);
+
+                       if (retval < 0) {
+                               retval = -EAGAIN;
+                               return retval;
+                       }
+               }
+               retval = pid_result->count + 1; //< ARRAY_SIZE(pid_arr) ? 0 : pid_count;
+       }
+
+       return retval;
+
+}
+
+int fill_next_tgids(int Kernel_id, struct file *filp, void *dirent,
+               filldir_t filldir, loff_t offset) {
+       pid_t tgid;
+       int retval;
+
+       retval = fill_next_remote_tgids(Kernel_id, filp, dirent, filldir, offset);
+       if (retval > 0) {
+               tgid = filp->f_pos - offset;
+               if ((tgid & INTERNAL_PID_MASK) >= PID_MAX_LIMIT - 1) {
+                       retval = 0;
+               }
+               filp->f_pos++;
+       }
+
+       return retval;
+}
+
+int remote_proc_pid_readdir(struct file *filp, void *dirent, filldir_t filldir,
+               loff_t offset) {
+
+       flush_variables();
+       pid_t tgid;
+       int node;
+       int retval = 0, i;
+
+       tgid = filp->f_pos - offset;
+       int global = (tgid & GLOBAL_PID_MASK);
+
+       if (!global) {
+               tgid = GLOBAL_PID_NODE(0, 0);
+               filp->f_pos = tgid + offset;
+       }
+       node = ORIG_NODE(tgid);
+       PRINTK("%s Kernel ID: %d\n", __func__, node);
+       filp->f_pos = GLOBAL_PID_NODE(0, node) + offset;
+       for (i = 0; i < NR_CPUS; i++) {
+
+               // Skip the current cpu
+               if (i == _cpu)
+                       continue;
+               retval = fill_next_tgids(i, filp, dirent, filldir, offset);
+               if (!retval) {
+               }
+       }
+
+       return retval;
+
+}
+
+static int __init pid_handler_init(void)
+{
+
+
+    _cpu = smp_processor_id();
+
+       pcn_kmsg_register_callback(PCN_KMSG_TYPE_REMOTE_PID_REQUEST,
+                                               handle_remote_pid_request);
+       pcn_kmsg_register_callback(PCN_KMSG_TYPE_REMOTE_PID_RESPONSE,
+                                               handle_remote_pid_response);
+
+
+       return 0;
+}
+/**
+ * Register remote pid init function as
+ * module initialization function.
+ */
+late_initcall(pid_handler_init);
diff --git a/fs/proc/remote_proc_pid.h b/fs/proc/remote_proc_pid.h
new file mode 100644 (file)
index 0000000..43bfe8e
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Header for Obtaining Remote PID
+ *
+ * Akshay
+ */
+
+#ifndef __REMOTE_PROC_PID_H__
+#define __REMOTE_PROC_PID_H__
+
+#include <linux/proc_fs.h>
+#include <linux/fs.h>
+#include <linux/types.h>
+
+#include <asm/ptrace.h>
+
+
+//function borrowed from remote_proc_pid_file.c
+extern int do_remote_task_stat(struct seq_file *m,
+               struct proc_remote_pid_info *task, char *buf,size_t count);
+extern int do_remote_task_cpuset(struct seq_file *m,
+               struct proc_remote_pid_info *task, char *buf,size_t count);
+
+
+//functions borrowed from base.c
+extern const struct inode_operations proc_def_inode_operations;
+extern int proc_setattr(struct dentry *dentry, struct iattr *attr);
+
+
+// functions to manage remote pid objects (Hooks)
+int remote_proc_pid_readdir(struct file *filp, void *dirent, filldir_t filldir,loff_t offset);
+struct dentry *remote_proc_pid_lookup(struct inode *dir,
+                                  struct dentry *dentry, pid_t tgid);
+
+
+#endif /* __REMOTE_PROC_PID_H__ */
diff --git a/fs/proc/remote_proc_pid_files.c b/fs/proc/remote_proc_pid_files.c
new file mode 100644 (file)
index 0000000..c0b7de0
--- /dev/null
@@ -0,0 +1,576 @@
+/*
+ * This file for Obtaining Remote PID file's info
+ *
+ * Akshay
+ */
+
+#include <linux/kernel.h>
+#include <linux/kthread.h>
+#include <linux/smp.h>
+#include <linux/slab.h>
+#include <linux/timer.h>
+#include <linux/pcn_kmsg.h>
+#include <linux/delay.h>
+#include <linux/string.h>
+#include <linux/ptrace.h>
+#include <asm/processor.h>
+#include <linux/tty.h>
+#include <linux/delayacct.h>
+#include <linux/seq_file.h>
+#include <linux/mm.h>
+#include <linux/pid_namespace.h>
+
+#include "internal.h"
+#include "remote_proc_pid_files.h"
+#include <popcorn/pid.h>
+
+#include <linux/cgroup.h>
+#include <linux/cpumask.h>
+
+#define PRINT_MESSAGES 0
+#if PRINT_MESSAGES
+#define PRINTK(...) printk(__VA_ARGS__)
+#else
+#define PRINTK(...) ;
+#endif
+
+/*
+ *  Variables
+ */
+static int statwait=-1;
+static int _cpu=-1;
+static int cpusetwait=-1;
+
+
+static DECLARE_WAIT_QUEUE_HEAD(wq);
+
+
+/*
+ * ****************************** Message structures for obtaining PID status ********************************
+ */
+struct _remote_pid_stat_request {
+    struct pcn_kmsg_hdr header;
+    pid_t _pid;
+    char pad_string[56];
+} __attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_pid_stat_request _remote_pid_stat_request_t;
+
+struct _remote_pid_stat_response {
+    struct pcn_kmsg_hdr header;
+       int _pid_ns;
+       char _tcomm[128];
+       char _state;
+       pid_t   _ppid;
+       pid_t   _pgid;
+       pid_t   _sid;
+       int     _tty_nr;
+       int     _tty_pgrp;
+       unsigned int _task_flags;
+       unsigned long   _min_flt;
+       unsigned long   _cmin_flt;
+       unsigned long   _maj_flt;
+       unsigned long   _cmaj_flt;
+       cputime_t _utime;
+       cputime_t _stime;
+       cputime_t _cutime;
+       cputime_t _cstime;
+       long    _priority;
+       long    _nice;
+       int     _num_threads;
+       unsigned long long _start_time;
+       unsigned long _vsize;
+       long _mm_rss;
+       unsigned long   _rsslim;
+       unsigned long _mm_start_code;
+       unsigned long _mm_end_code;
+       unsigned long _mm_start_stack;
+       unsigned long _esp;
+       unsigned long _eip;
+       unsigned long _pending_signal;
+       unsigned long _blocked_sig;
+       unsigned long _sigign;
+       unsigned long _sigcatch;
+       unsigned long _wchan;
+       /* insert two 0UL*/
+       int _exit_signal;
+       int     _task_cpu;
+       unsigned int _rt_priority;
+       unsigned int _policy;
+       unsigned long long _delayacct_blkio_ticks;
+       cputime_t _gtime;
+       cputime_t _cgtime;
+   } __attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_pid_stat_response _remote_pid_stat_response_t;
+
+/*
+ * ******************************* Define variables holding Result *******************************************
+ */
+static _remote_pid_stat_response_t *stat_result;
+
+/*
+ * ******************************* Common Functions **********************************************************
+ */
+
+struct task_struct * get_process(pid_t pid) {
+       struct task_struct *p;
+       struct task_struct *result;
+
+               for_each_process(p)
+               {
+                       if(p->pid==pid)
+                       {
+                               result=p;
+                               return result;
+                       }
+               }
+       return NULL;
+
+}
+
+int flush_stat_var()
+{
+       stat_result=NULL;
+       statwait=-1;
+       return 0;
+}
+
+
+/*
+ * ********************************** Message handling functions for /pid/stat*************************************
+ */
+
+int fill_response(struct task_struct *task, _remote_pid_stat_response_t *res)
+{
+       int whole=1;
+       struct pid_namespace *ns;
+       struct mm_struct *mm;
+       sigset_t sigign, sigcatch;
+       unsigned long flags;
+       int _permitted;
+
+       ns = current->nsproxy->pid_ns;
+
+       res->_pid_ns=pid_nr_ns(task_pid(task), ns);
+
+       res->_state = *get_task_state(task);
+       res->_vsize = 0;
+       res->_eip = 0;
+       res->_esp = 0;
+       _permitted = ptrace_may_access(task, PTRACE_MODE_READ);
+       mm = get_task_mm(task);
+               if (mm) {
+                       res->_vsize = task_vsize(mm);
+                       if (_permitted) {
+                               res->_eip = KSTK_EIP(task);
+                               res->_esp = KSTK_ESP(task);
+                       }
+               }
+
+       get_task_comm(res->_tcomm, task);
+
+
+       sigemptyset(&sigign);
+       sigemptyset(&sigcatch);
+       res->_cutime = res->_cstime = res->_utime = res->_stime = cputime_zero;
+       res->_cgtime = res->_gtime = cputime_zero;
+
+       if (lock_task_sighand(task, &flags)) {
+               struct signal_struct *sig = task->signal;
+
+               if (sig->tty) {
+                       struct pid *pgrp = tty_get_pgrp(sig->tty);
+                       res->_tty_pgrp = pid_nr_ns(pgrp, ns);
+                       put_pid(pgrp);
+                       res->_tty_nr = new_encode_dev(tty_devnum(sig->tty));
+               }
+
+                       res->_num_threads = get_nr_threads(task);
+                       collect_sigign_sigcatch(task, &sigign, &sigcatch);
+
+                       res->_cmin_flt = sig->cmin_flt;
+                       res->_cmaj_flt = sig->cmaj_flt;
+                       res->_cutime = sig->cutime;
+                       res->_cstime = sig->cstime;
+                       res->_cgtime = sig->cgtime;
+                       res->_rsslim = ACCESS_ONCE(sig->rlim[RLIMIT_RSS].rlim_cur);
+
+                       /* add up live thread stats at the group level */
+                       if (whole) {
+                               struct task_struct *t = task;
+                               do {
+                                       res->_min_flt += t->min_flt;
+                                       res->_maj_flt += t->maj_flt;
+                                       res->_gtime = cputime_add(res->_gtime, t->gtime);
+                                       t = next_thread(t);
+                               } while (t != task);
+
+                               res->_min_flt += sig->min_flt;
+                               res->_maj_flt += sig->maj_flt;
+                               thread_group_times(task, &res->_utime, &res->_stime);
+                               res->_gtime = cputime_add(res->_gtime, sig->gtime);
+                       }
+
+                       res->_sid = task_session_nr_ns(task, ns);
+                       res->_ppid = task_tgid_nr_ns(task->real_parent, ns);
+                       res->_pgid = task_pgrp_nr_ns(task, ns);
+
+                       unlock_task_sighand(task, &flags);
+               }
+
+               if (_permitted && (!whole || res->_num_threads < 2))
+                       res->_wchan = get_wchan(task);
+               if (!whole) {
+                       res->_min_flt = task->min_flt;
+                       res->_maj_flt = task->maj_flt;
+                       task_times(task, &res->_utime, &res->_stime);
+                       res->_gtime = task->gtime;
+               }
+               res->_priority = task_prio(task);
+               res->_nice = task_nice(task);
+
+               res->_start_time =
+                       (unsigned long long)task->real_start_time.tv_sec * NSEC_PER_SEC
+                                       + task->real_start_time.tv_nsec;
+               /* convert nsec -> ticks */
+               res->_start_time = nsec_to_clock_t(res->_start_time);
+
+               res->_task_flags=task->flags;
+               res->_utime=cputime_to_clock_t(res->_utime);
+               res->_stime=cputime_to_clock_t(res->_stime);
+               res->_cutime=cputime_to_clock_t(res->_cutime);
+               res->_cstime=cputime_to_clock_t(res->_cstime);
+               res->_mm_rss= mm ? get_mm_rss(mm) : 0;
+               res->_mm_start_code = mm ? (_permitted ? mm->start_code : 1) : 0;
+               res->_mm_end_code = mm ? (_permitted ? mm->end_code : 1) : 0;
+               res->_mm_start_stack = (_permitted && mm) ? mm->start_stack : 0;
+               res->_pending_signal = task->pending.signal.sig[0] & 0x7fffffffUL;
+               res->_blocked_sig = task->blocked.sig[0] & 0x7fffffffUL;
+               res->_sigign = sigign.sig[0] & 0x7fffffffUL;
+               res->_sigcatch = sigcatch.sig[0] & 0x7fffffffUL;
+               res->_exit_signal = task->exit_signal;
+               res->_task_cpu = task_cpu(task);
+               res->_rt_priority = task->rt_priority;
+               res->_policy =  task->policy;
+               res->_delayacct_blkio_ticks = (unsigned long long)delayacct_blkio_ticks(task);
+               res->_gtime = cputime_to_clock_t(res->_gtime );
+               res->_cgtime =  cputime_to_clock_t(res->_cgtime);
+
+
+               return 0;
+
+}
+
+static int handle_remote_pid_stat_response(struct pcn_kmsg_message* inc_msg) {
+       _remote_pid_stat_response_t* msg = (_remote_pid_stat_response_t*) inc_msg;
+
+       PRINTK("%s: Entered remote pid stat response \n",__func__);
+
+       statwait = 1;
+       if(msg !=NULL)
+        stat_result=msg;
+       wake_up_interruptible(&wq);
+       PRINTK("%s: response ---- wait{%d} \n",
+                       __func__, statwait);
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+
+static int handle_remote_pid_stat_request(struct pcn_kmsg_message* inc_msg) {
+
+       _remote_pid_stat_request_t* msg = (_remote_pid_stat_request_t*) inc_msg;
+       _remote_pid_stat_response_t response;
+
+
+       PRINTK("%s: Entered remote pid stat request \n", __func__);
+
+       // Finish constructing response
+       response.header.type = PCN_KMSG_TYPE_REMOTE_PID_STAT_RESPONSE;
+       response.header.prio = PCN_KMSG_PRIO_NORMAL;
+
+       struct task_struct *task;
+       task=get_process(msg->_pid);
+
+       if(task!=NULL)
+       fill_response(task,&response);
+
+       // Send response
+       pcn_kmsg_send_long(msg->header.from_cpu, (struct pcn_kmsg_message*) (&response),
+                       sizeof(_remote_pid_stat_response_t) - sizeof(struct pcn_kmsg_hdr));
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+int send_stat_request(struct proc_remote_pid_info *task)
+{
+
+               int res=0;
+               _remote_pid_stat_request_t* request = kmalloc(sizeof(_remote_pid_stat_request_t),
+               GFP_KERNEL);
+               // Build request
+               request->header.type = PCN_KMSG_TYPE_REMOTE_PID_STAT_REQUEST;
+               request->header.prio = PCN_KMSG_PRIO_NORMAL;
+               request->_pid = task->pid;
+
+               res=pcn_kmsg_send(ORIG_NODE(task->pid), (struct pcn_kmsg_message*) (request));
+               return res;
+}
+
+/*
+ * ************************************* Function (hook) to be called from other file ********************
+ */
+int do_remote_task_stat(struct seq_file *m,
+               struct proc_remote_pid_info *task, char *buf,size_t count)
+{
+       flush_stat_var();
+       int res=0;
+
+       res = send_stat_request(task);
+       wait_event_interruptible(wq, statwait != -1);
+
+       if(stat_result!=NULL)
+       {
+       seq_printf(m, "%d (%s) %c %d %d %d %d %d %u %lu \
+%lu %lu %lu %lu %lu %ld %ld %ld %ld %d 0 %llu %lu %ld %lu %lu %lu %lu %lu \
+%lu %lu %lu %lu %lu %lu %lu %lu %d %d %u %u %llu %lu %ld\n",
+               stat_result->_pid_ns,
+               stat_result->_tcomm,
+               stat_result->_state,
+               stat_result->_ppid,
+               stat_result->_pgid,
+               stat_result->_sid,
+               stat_result->_tty_nr,
+               stat_result->_tty_pgrp,
+               2,
+               stat_result->_min_flt,
+               stat_result->_cmin_flt,
+               stat_result->_maj_flt,
+               stat_result->_cmaj_flt,
+               stat_result->_utime,
+               stat_result->_stime,
+               stat_result->_cutime,
+               stat_result->_cstime,
+               stat_result->_priority,
+               stat_result->_nice,
+               stat_result->_num_threads,
+               stat_result->_start_time,
+               stat_result->_vsize,
+               stat_result->_mm_rss,
+               stat_result->_rsslim,
+               stat_result->_mm_start_code,
+               stat_result->_mm_end_code,
+               stat_result->_mm_start_stack,
+               stat_result->_esp,
+               stat_result->_eip,
+               stat_result->_pending_signal,
+               stat_result->_blocked_sig,
+               stat_result->_sigcatch,
+               stat_result->_sigign,
+               stat_result->_wchan,
+               0UL,
+               0UL,
+               stat_result->_exit_signal,
+               stat_result->_task_cpu,
+               stat_result->_rt_priority,
+               stat_result->_policy,
+               stat_result->_delayacct_blkio_ticks,
+               stat_result->_gtime,
+               stat_result->_cgtime);
+       }
+       else
+       {
+               seq_printf(m, "(%s) \n",
+                               "This PID is out of sync with remote kernel");
+       }
+
+       return 0;
+}
+
+
+
+/*
+ * ****************************** Message structures for obtaining cpuset ********************************
+ */
+struct _remote_pid_cpuset_request {
+    struct pcn_kmsg_hdr header;
+    pid_t _pid;
+    char pad_string[56];
+} __attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_pid_cpuset_request _remote_pid_cpuset_request_t;
+
+struct _remote_pid_cpuset_response {
+    struct pcn_kmsg_hdr header;
+    char buf[PAGE_SIZE];
+   } __attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_pid_cpuset_response _remote_pid_cpuset_response_t;
+
+/*
+ * ******************************* Define variables holding Result *******************************************
+ */
+static _remote_pid_cpuset_response_t *cpuset_result;
+
+
+int flush_cpuset_var()
+{
+       cpuset_result=NULL;
+       cpusetwait=-1;
+       return 0;
+}
+
+
+
+/*
+ * ********************************** Message handling functions for /pid/cpuset*************************************
+ */
+
+int fill_cpuset_response(struct pid *pidp, _remote_pid_cpuset_response_t *res)
+{
+
+           struct pid *pid;
+               struct task_struct *tsk;
+               char buf[PAGE_SIZE];
+               struct cgroup_subsys_state *css;
+               int retval;
+               retval = -ENOMEM;
+               retval = -ESRCH;
+
+               pid = pidp;
+               tsk = get_pid_task(pid, PIDTYPE_PID);
+               if (!tsk)
+                       goto out_free;
+
+               retval = -EINVAL;
+               cgroup_lock();
+               css = task_subsys_state(tsk, cpuset_subsys_id);
+               retval = cgroup_path(css->cgroup, buf, PAGE_SIZE);
+               if (retval < 0)
+                       goto out_unlock;
+               memcpy(&res->buf, &buf, sizeof buf);
+       out_unlock:
+               cgroup_unlock();
+               put_task_struct(tsk);
+       out_free:
+       out:
+               return retval;
+
+}
+
+static int handle_remote_pid_cpuset_response(struct pcn_kmsg_message* inc_msg) {
+       _remote_pid_cpuset_response_t* msg = (_remote_pid_cpuset_response_t*) inc_msg;
+
+       PRINTK("%s: Entered remote pid stat response \n",__func__);
+
+       cpusetwait = 1;
+       if(msg !=NULL)
+               cpuset_result=msg;
+       wake_up_interruptible(&wq);
+       PRINTK("%s: response ---- wait{%d} \n",
+                       __func__, cpusetwait);
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+
+static int handle_remote_pid_cpuset_request(struct pcn_kmsg_message* inc_msg) {
+
+       _remote_pid_cpuset_request_t* msg = (_remote_pid_cpuset_request_t*) inc_msg;
+       _remote_pid_cpuset_response_t response;
+
+
+       PRINTK("%s: Entered remote pid cpuset request \n", __func__);
+
+       // Finish constructing response
+       response.header.type = PCN_KMSG_TYPE_REMOTE_PID_CPUSET_RESPONSE;
+       response.header.prio = PCN_KMSG_PRIO_NORMAL;
+
+       struct pid * pidp = find_vpid(msg->_pid);
+
+       if(pidp!=NULL)
+               fill_cpuset_response(pidp,&response);
+
+       // Send response
+       pcn_kmsg_send_long(msg->header.from_cpu, (struct pcn_kmsg_message*) (&response),
+                       sizeof(_remote_pid_cpuset_response_t) - sizeof(struct pcn_kmsg_hdr));
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+cpuset_request(struct proc_remote_pid_info *task)
+{
+
+               int res=0;
+               _remote_pid_cpuset_request_t* request = kmalloc(sizeof(_remote_pid_cpuset_request_t),
+               GFP_KERNEL);
+               // Build request
+               request->header.type = PCN_KMSG_TYPE_REMOTE_PID_CPUSET_REQUEST;
+               request->header.prio = PCN_KMSG_PRIO_NORMAL;
+               request->_pid = task->pid;
+
+               res=pcn_kmsg_send(ORIG_NODE(task->pid), (struct pcn_kmsg_message*) (request));
+               return res;
+}
+
+/*
+ * ************************************* Function (hook) to be called from other file ********************
+ */
+int do_remote_task_cpuset(struct seq_file *m,
+               struct proc_remote_pid_info *task, char *buf,size_t count)
+{
+       flush_cpuset_var();
+       int res=0;
+
+       res = cpuset_request(task);
+       wait_event_interruptible(wq, cpusetwait != -1);
+
+       if(cpuset_result!=NULL)
+       {
+               seq_puts(m, cpuset_result->buf);
+               seq_putc(m, '\n');
+       }
+       else
+       {
+               seq_printf(m, "(%s) \n",
+                               "This PID is out of sync with remote kernel");
+       }
+
+       return 0;
+}
+
+
+
+
+static int __init pid_files_handler_init(void)
+{
+
+
+    _cpu = smp_processor_id();
+
+
+       pcn_kmsg_register_callback(PCN_KMSG_TYPE_REMOTE_PID_STAT_REQUEST,
+                                               handle_remote_pid_stat_request);
+       pcn_kmsg_register_callback(PCN_KMSG_TYPE_REMOTE_PID_STAT_RESPONSE,
+                                               handle_remote_pid_stat_response);
+
+       pcn_kmsg_register_callback(PCN_KMSG_TYPE_REMOTE_PID_CPUSET_REQUEST,
+                                                       handle_remote_pid_cpuset_request);
+               pcn_kmsg_register_callback(PCN_KMSG_TYPE_REMOTE_PID_CPUSET_RESPONSE,
+                                                       handle_remote_pid_cpuset_response);
+
+       return 0;
+}
+/**
+ * Register remote proc files init function as
+ * module initialization function.
+ */
+late_initcall(pid_files_handler_init);
diff --git a/fs/proc/remote_proc_pid_files.h b/fs/proc/remote_proc_pid_files.h
new file mode 100644 (file)
index 0000000..350145d
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Header for Obtaining Remote PID's file info
+ *
+ * Akshay
+ */
+
+#ifndef __REMOTE_PROC_PID_FILES_H__
+#define __REMOTE_PROC_PID_FILES_H__
+
+struct task_struct;
+
+//functions borrowed from array.c
+extern void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign,
+           sigset_t *catch);
+
+extern const char *get_task_state(struct task_struct *tsk);
+
+
+#endif /* __REMOTE_PROC_PID_FILES_H__ */
index 0dd4e87..bb29a51 100644 (file)
@@ -42,6 +42,10 @@ typedef struct siginfo {
        int si_errno;
        int si_code;
 
+       /*mklinux_akshay*/
+       bool si_remote;
+       /*mklinux_akshay*/
+
        union {
                int _pad[SI_PAD_SIZE];
 
index 4f7a632..1c8f88e 100644 (file)
@@ -80,21 +80,29 @@ extern const struct cpumask *const cpu_online_mask;
 extern const struct cpumask *const cpu_present_mask;
 extern const struct cpumask *const cpu_active_mask;
 
+/*mklinux_akshay*/
+extern const struct cpumask *const cpu_global_online_mask;
+/*mklinux_akshay*/
+
 #if NR_CPUS > 1
 #define num_online_cpus()      cpumask_weight(cpu_online_mask)
+#define num_global_online_cpus()       cpumask_weight(cpu_global_online_mask)/*mklinux_akshay*/
 #define num_possible_cpus()    cpumask_weight(cpu_possible_mask)
 #define num_present_cpus()     cpumask_weight(cpu_present_mask)
 #define num_active_cpus()      cpumask_weight(cpu_active_mask)
 #define cpu_online(cpu)                cpumask_test_cpu((cpu), cpu_online_mask)
+#define cpu_global_online(cpu)         cpumask_test_cpu((cpu), cpu_global_online_mask)/*mklinux_akshay*/
 #define cpu_possible(cpu)      cpumask_test_cpu((cpu), cpu_possible_mask)
 #define cpu_present(cpu)       cpumask_test_cpu((cpu), cpu_present_mask)
 #define cpu_active(cpu)                cpumask_test_cpu((cpu), cpu_active_mask)
 #else
 #define num_online_cpus()      1U
+#define num_global_online_cpus()       1U /*mklinux_akshay*/
 #define num_possible_cpus()    1U
 #define num_present_cpus()     1U
 #define num_active_cpus()      1U
 #define cpu_online(cpu)                ((cpu) == 0)
+#define cpu_global_online(cpu)         ((cpu) == 0) /*mklinux_akshay*/
 #define cpu_possible(cpu)      ((cpu) == 0)
 #define cpu_present(cpu)       ((cpu) == 0)
 #define cpu_active(cpu)                ((cpu) == 0)
@@ -695,14 +703,19 @@ extern const DECLARE_BITMAP(cpu_all_bits, NR_CPUS);
 #define for_each_online_cpu(cpu)   for_each_cpu((cpu), cpu_online_mask)
 #define for_each_present_cpu(cpu)  for_each_cpu((cpu), cpu_present_mask)
 
+/*mklinux_akshay*/
+#define for_each_global_online_cpu(cpu)   for_each_cpu((cpu), cpu_global_online_mask)
+/*mklinux_akshay*/
 /* Wrappers for arch boot code to manipulate normally-constant masks */
 void set_cpu_possible(unsigned int cpu, bool possible);
 void set_cpu_present(unsigned int cpu, bool present);
 void set_cpu_online(unsigned int cpu, bool online);
+void set_cpu_global_online(unsigned int cpu, bool online);/*mklinux_akshay*/
 void set_cpu_active(unsigned int cpu, bool active);
 void init_cpu_present(const struct cpumask *src);
 void init_cpu_possible(const struct cpumask *src);
 void init_cpu_online(const struct cpumask *src);
+void init_global_cpu_online(const struct cpumask *src);/*mklinux_akshay*/
 
 /**
  * to_cpumask - convert an NR_CPUS bitmap to a struct cpumask *
@@ -766,6 +779,7 @@ static inline const struct cpumask *get_cpu_mask(unsigned int cpu)
 /* These strip const, as traditionally they weren't const. */
 #define cpu_possible_map       (*(cpumask_t *)cpu_possible_mask)
 #define cpu_online_map         (*(cpumask_t *)cpu_online_mask)
+#define cpu_global_online_map          (*(cpumask_t *)cpu_global_online_mask)
 #define cpu_present_map                (*(cpumask_t *)cpu_present_mask)
 #define cpu_active_map         (*(cpumask_t *)cpu_active_mask)
 
index 21a7995..5810118 100644 (file)
@@ -34,8 +34,10 @@ extern struct file *fget_raw_light(unsigned int fd, int *fput_needed);
 extern void set_close_on_exec(unsigned int fd, int flag);
 extern void put_filp(struct file *);
 extern int alloc_fd(unsigned start, unsigned flags);
+extern int saif_alloc_fd(unsigned start, unsigned flags,unsigned int fd); //saif
 extern int get_unused_fd(void);
 #define get_unused_fd_flags(flags) alloc_fd(0, (flags))
+#define force_fd_flags(flags,fd) saif_alloc_fd(0, (flags),fd)
 extern void put_unused_fd(unsigned int fd);
 
 extern void fd_install(unsigned int fd, struct file *file);
index 10b2288..4308515 100644 (file)
@@ -992,6 +992,7 @@ struct file {
        struct file_ra_state    f_ra;
 
        u64                     f_version;
+       int         f_omode;
 #ifdef CONFIG_SECURITY
        void                    *f_security;
 #endif
index 1e5a26d..d9c0cb7 100644 (file)
@@ -213,3 +213,4 @@ static inline void exit_pi_state_list(struct task_struct *curr)
    | ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
 
 #endif
+
index 3b1594d..aef8805 100644 (file)
@@ -80,6 +80,10 @@ struct ipc_kludge {
 #ifdef __KERNEL__
 #include <linux/spinlock.h>
 
+/*mklinux_akshay*/
+#include <popcorn/ipc.h>
+/*mklinux_akshay*/
+
 #define IPCMNI 32768  /* <= MAX_INT limit for ipc arrays (including sysctl changes) */
 
 /* used by in-kernel data structures */
@@ -87,7 +91,7 @@ struct kern_ipc_perm
 {
        spinlock_t      lock;
        int             deleted;
-       int             id;
+       unsigned long           id;/*mklinux_akshay*/
        key_t           key;
        uid_t           uid;
        gid_t           gid;
@@ -96,6 +100,11 @@ struct kern_ipc_perm
        mode_t          mode; 
        unsigned long   seq;
        void            *security;
+       /*mklinux_akshay*/
+       global_key_t    global_key;
+       global_ipc_id_t global_id;
+       struct remoteipc_ops *remoteipc_ops_t;
+       /*mklinux_akshay*/
 };
 
 #endif /* __KERNEL__ */
index 8a297a5..70fc0ee 100644 (file)
 
 struct user_namespace;
 
+/*mklinux_akshay*/
+struct remoteipc_ops;
+/*mklinux_akshay*/
+
 struct ipc_ids {
        int in_use;
        unsigned short seq;
        unsigned short seq_max;
        struct rw_semaphore rw_mutex;
+       /*mklinux_akshay*/
        struct idr ipcs_idr;
+       struct remoteipc_ops *remoteipc_ops_t;
+       /*mklinux_akshay*/
 };
 
 struct ipc_namespace {
index 8bcb4ec..bdace9b 100644 (file)
@@ -26,6 +26,9 @@
 #include <linux/workqueue.h>
 #include <linux/sysctl.h>
 
+/*mklinux_akshay*/
+#include <linux/signal.h>
+
 #define KMOD_PATH_LEN 256
 
 #ifdef CONFIG_MODULES
@@ -75,6 +78,11 @@ struct subprocess_info {
     int   remote_cpu;
     int   clone_request_id;
     struct pt_regs remote_regs;
+
+    /*mklinux_akshay*/
+    pid_t origin_pid;
+    /*mklinux_akshay*/
+
 };
 
 /* Allocate a subprocess_info structure */
index 4baadd1..07c117a 100644 (file)
@@ -997,6 +997,8 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
                        struct page **pages, struct vm_area_struct **vmas);
 int get_user_pages_fast(unsigned long start, int nr_pages, int write,
                        struct page **pages);
+int get_user_pages_fast_mm(struct mm_struct *mm,unsigned long start, int nr_pages, int write,
+                       struct page **pages);
 struct page *get_dump_page(unsigned long addr);
 
 extern int try_to_release_page(struct page * page, gfp_t gfp_mask);
index 6689272..265fe9a 100644 (file)
@@ -9,12 +9,13 @@
 #include <linux/prio_tree.h>
 #include <linux/rbtree.h>
 #include <linux/rwsem.h>
-#include <linux/semaphore.h>
 #include <linux/completion.h>
 #include <linux/cpumask.h>
 #include <linux/page-debug-flags.h>
 #include <asm/page.h>
 #include <asm/mmu.h>
+#include <linux/semaphore.h>
+
 
 #ifndef AT_VECTOR_SIZE_ARCH
 #define AT_VECTOR_SIZE_ARCH 0
index e080076..4f9f195 100644 (file)
@@ -59,6 +59,39 @@ enum pcn_kmsg_type {
        PCN_KMSG_TYPE_TEST_LONG,
        PCN_KMSG_TYPE_CHECKIN,
        PCN_KMSG_TYPE_MCAST,
+       PCN_KMSG_TYPE_REMOTE_PROC_CPUINFO_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_PROC_CPUINFO_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_PROC_MEMINFO_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_PROC_MEMINFO_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_PROC_STAT_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_PROC_STAT_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_PID_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_PID_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_PID_STAT_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_PID_STAT_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_PID_CPUSET_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_PID_CPUSET_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_SENDSIG_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_SENDSIG_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_SENDSIGPROCMASK_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_SENDSIGPROCMASK_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_SENDSIGACTION_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_SENDSIGACTION_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_IPC_SEMGET_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_IPC_SEMGET_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_IPC_SEMCTL_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_IPC_SEMCTL_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_IPC_SHMGET_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_IPC_SHMGET_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_IPC_SHMAT_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_IPC_SHMAT_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_IPC_FUTEX_WAKE_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_IPC_FUTEX_WAKE_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_PFN_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_PFN_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_IPC_FUTEX_KEY_REQUEST,
+       PCN_KMSG_TYPE_REMOTE_IPC_FUTEX_KEY_RESPONSE,
+       PCN_KMSG_TYPE_REMOTE_IPC_FUTEX_TOKEN_REQUEST,
     PCN_KMSG_TYPE_PROC_SRV_CLONE_REQUEST,
     PCN_KMSG_TYPE_PROC_SRV_CREATE_PROCESS_PAIRING,
     PCN_KMSG_TYPE_PROC_SRV_EXIT_PROCESS,
@@ -89,8 +122,6 @@ enum pcn_kmsg_type {
     PCN_KMSG_TYPE_ANSWER_TEST,
        PCN_KMSG_TYPE_MCAST_CLOSE,
        PCN_KMSG_TYPE_SHMTUN,
-PCN_KMSG_TYPE_REMOTE_PROC_CPUINFO_RESPONSE,
-PCN_KMSG_TYPE_REMOTE_PROC_CPUINFO_REQUEST,
        PCN_KMSG_TYPE_MAX
 };
 
@@ -199,7 +230,7 @@ typedef int (*pcn_kmsg_cbftn)(struct pcn_kmsg_message *);
 
 /* Register a callback function to handle a new message type.  Intended to
    be called when a kernel module is loaded. */
-int pcn_kmsg_register_callback(enum pcn_kmsg_type type, 
+int pcn_kmsg_register_callback(enum pcn_kmsg_type type,
                               pcn_kmsg_cbftn callback);
 
 /* Unregister a callback function for a message type.  Intended to
@@ -212,8 +243,8 @@ int pcn_kmsg_unregister_callback(enum pcn_kmsg_type type);
 int pcn_kmsg_send(unsigned int dest_cpu, struct pcn_kmsg_message *msg);
 
 /* Send a long message to the specified destination CPU. */
-int pcn_kmsg_send_long(unsigned int dest_cpu, 
-                      struct pcn_kmsg_long_message *lmsg, 
+int pcn_kmsg_send_long(unsigned int dest_cpu,
+                      struct pcn_kmsg_long_message *lmsg,
                       unsigned int payload_size);
 
 /* Free a received message (called at the end of the callback function) */
@@ -233,8 +264,8 @@ enum pcn_kmsg_mcast_type {
 /* Message struct for guest kernels to check in with each other. */
 struct pcn_kmsg_mcast_message {
        struct pcn_kmsg_hdr hdr;
-       enum pcn_kmsg_mcast_type type :32; 
-       pcn_kmsg_mcast_id id;   
+       enum pcn_kmsg_mcast_type type :32;
+       pcn_kmsg_mcast_id id;
        unsigned long mask;
        unsigned int num_members;
        unsigned long window_phys_addr;
@@ -269,7 +300,7 @@ int pcn_kmsg_mcast_close(pcn_kmsg_mcast_id id);
 int pcn_kmsg_mcast_send(pcn_kmsg_mcast_id id, struct pcn_kmsg_message *msg);
 
 /* Send a long message to the specified multicast group. */
-int pcn_kmsg_mcast_send_long(pcn_kmsg_mcast_id id, 
+int pcn_kmsg_mcast_send_long(pcn_kmsg_mcast_id id,
                             struct pcn_kmsg_long_message *msg,
                             unsigned int payload_size);
 
index 38d1032..a3f199c 100644 (file)
@@ -30,6 +30,7 @@ struct pid_namespace {
 #ifdef CONFIG_BSD_PROCESS_ACCT
        struct bsd_acct_struct *bacct;
 #endif
+       unsigned global:1;
 };
 
 extern struct pid_namespace init_pid_ns;
diff --git a/include/linux/popcorn.h b/include/linux/popcorn.h
deleted file mode 100644 (file)
index 4c8954e..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-
-extern struct list_head rlist_head;
-
-struct _remote_cpu_info_data
-{
-                 unsigned int _processor;
-                 char _vendor_id[16];
-                 int _cpu_family;
-                unsigned int _model;
-                 char _model_name[64];
-                 int _stepping;
-                 unsigned long _microcode;
-                 unsigned _cpu_freq;
-                 int _cache_size;
-                 char _fpu[3];
-                 char _fpu_exception[3];
-                 int _cpuid_level;
-                 char _wp[3];
-                 char _flags[512];
-                 unsigned long _nbogomips;
-                int _TLB_size;
-                unsigned int _clflush_size;
-                int _cache_alignment;
-                unsigned int _bits_physical;
-                 unsigned int _bits_virtual;
-                char _power_management[64];
-                 struct cpumask _cpumask;
-};
-
-
-typedef struct _remote_cpu_info_data _remote_cpu_info_data_t;
-struct _remote_cpu_info_list
- {
-         _remote_cpu_info_data_t _data;
-         struct list_head cpu_list_member;
-
-  };
-typedef struct _remote_cpu_info_list _remote_cpu_info_list_t;
-
index 643b96c..01e1f28 100644 (file)
@@ -260,6 +260,34 @@ union proc_op {
                struct task_struct *task);
 };
 
+/*mklinux_akshay*/
+
+struct proc_remote_pid_info;
+
+union proc_remote_op {
+       int (*proc_get_link)(struct inode *, struct path *);
+       int (*proc_read)(struct proc_remote_pid_info *task, char *page);
+       int (*proc_show)(struct file *file, struct proc_remote_pid_info *task,
+                        char *buf, size_t count);
+};
+
+
+struct proc_remote_pid_info {
+       pid_t pid;
+       int Kernel_Num;
+       uid_t euid;
+       gid_t egid;
+       union proc_remote_op op;
+};
+
+struct tgid_iter {
+       unsigned int tgid;
+       struct task_struct *task;
+};
+
+
+/*mklinux_akshay*/
+
 struct ctl_table_header;
 struct ctl_table;
 
@@ -273,8 +301,12 @@ struct proc_inode {
        void *ns;
        const struct proc_ns_operations *ns_ops;
        struct inode vfs_inode;
+
+       struct proc_remote_pid_info remote_proc;
 };
 
+
+
 static inline struct proc_inode *PROC_I(const struct inode *inode)
 {
        return container_of(inode, struct proc_inode, vfs_inode);
index c753c98..4e4b736 100644 (file)
@@ -19,8 +19,8 @@
 #define PROCESS_SERVER_CLONE_FAIL 1
 
 //configuration
-#define SUPPORT_FOR_CLUSTERING
-//#undef SUPPORT_FOR_CLUSTERING
+//#define SUPPORT_FOR_CLUSTERING
+#undef SUPPORT_FOR_CLUSTERING
 
 /*
  * Migration hook.
index ae2b10a..bb63197 100644 (file)
@@ -1601,6 +1601,10 @@ struct task_struct {
                                       then enable when address space is fully formed. */
     unsigned long known_cpu_with_tgroup_mm; /* List of remote cpus that already have a mm for this tgroup  */
 
+    int origin_pid;/*first thread id created in the originating kernel*/
+    //struct kernel_robust_list_head  *kernel_robust_list;
+   // int in_distributed_lock_state;
+
 };
 
 /* Future-safe accessor for struct task_struct's cpus_allowed. */
index 10d6b22..e1ff6d8 100644 (file)
@@ -3,6 +3,10 @@
 
 #include <linux/ipc.h>
 
+/*mklinux_akshay*/
+//#include <linux/ipc_uniqueid.h>
+/*mklinux_akshay*/
+
 /* semop flags */
 #define SEM_UNDO        0x1000  /* undo the operation on exit */
 
@@ -94,11 +98,69 @@ struct sem_array {
        struct list_head        list_id;        /* undo requests on this array */
        int                     sem_nsems;      /* no. of semaphores in array */
        int                     complex_count;  /* pending complex operations */
+    /*mklinux_akshay*/
+       struct list_head        remote_sem_pending;
+       /*mklinux_akshay*/
+};
+
+/*mklinux_akshay*/
+typedef unsigned long ipc_id_t;
+/* One semaphore structure for each semaphore in the system. */
+struct sem {
+       int     semval;         /* current value */
+       int     sempid;         /* pid of last operation */
+       struct list_head sem_pending; /* pending single-sop operations */
+};
+
+/* One queue for each sleeping process in the system. */
+struct sem_queue {
+       struct list_head        simple_list; /* queue of pending operations */
+       struct list_head        list;    /* queue of pending operations */
+       struct task_struct      *sleeper; /* this process */
+       struct sem_undo         *undo;   /* undo structure */
+       int                     pid;     /* process id of requesting process */
+       int                     status;  /* completion status of operation */
+       struct sembuf           *sops;   /* array of pending operations */
+       int                     nsops;   /* number of operations */
+       int                     alter;   /* does *sops alter the array? */
+       /*mklinux_akshay*/
+       int  semid;
+       unsigned long kernel_id;
+       /*mklinux_akshay*/
 };
 
+/* Each task has a list of undo requests. They are executed automatically
+ * when the process exits.
+ */
+struct sem_undo {
+       ipc_id_t list_proc_id;
+       struct list_head        list_proc;      /* per-process list: *
+                                                * all undos from one process
+                                                * rcu protected */
+       struct rcu_head         rcu;            /* rcu struct for sem_undo */
+       struct sem_undo_list    *ulp;           /* back ptr to sem_undo_list */
+       struct list_head        list_id;        /* per semaphore array list:
+                                                * all undos for one array */
+       int                     semid;          /* semaphore set identifier */
+       short                   *semadj;        /* array of adjustments */
+                                               /* one per semaphore */
+};
+
+/* sem_undo_list controls shared access to the list of sem_undo structures
+ * that may be shared among all a CLONE_SYSVSEM task group.
+ */
+struct sem_undo_list {
+       atomic_t                refcnt;
+       spinlock_t              lock;
+       struct list_head        list_proc;
+};
+
+/*mklinux_akshay*/
+
 #ifdef CONFIG_SYSVIPC
 
 struct sysv_sem {
+       ipc_id_t undo_list_id;
        struct sem_undo_list *undo_list;
 };
 
index 383ab95..bf604fa 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef _LINUX_THREADS_H
 #define _LINUX_THREADS_H
 
-
+//#include <popcorn/pid.h>
 /*
  * The default limit for the nr of threads is now in
  * /proc/sys/kernel/threads-max.
 
 #define MIN_THREADS_LEFT_FOR_ROOT 4
 
+/*mklinux_akshay
+ * Added for popcorn linux to provide unique pid by pid masking
+ */
+#define NR_BITS_PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 12 : 15)
+
+#define PID_MAX_DEFAULT (1 << NR_BITS_PID_MAX_DEFAULT)
+
+
+#define NR_BITS_PID_MAX_LIMIT (CONFIG_BASE_SMALL ? PAGE_SHIFT + 3 : \
+       (sizeof(long) > 4 ? (29 - 8) : \
+       NR_BITS_PID_MAX_DEFAULT))
+
+#define PID_MAX_LIMIT (1 << NR_BITS_PID_MAX_LIMIT)
+/*mklinux_akshay*/
+
+/*mklinux_akshay
+ *
+ *Original implementation of linux
+ */
 /*
  * This controls the default maximum pid allocated to a process
- */
-#define PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 0x1000 : 0x8000)
 
+#define PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 0x1000 : 0x8000)
+ */
 /*
  * A maximum of 4 million PIDs should be enough for a while.
  * [NOTE: PID/TIDs are limited to 2^29 ~= 500+ million, see futex.h.]
- */
+
 #define PID_MAX_LIMIT (CONFIG_BASE_SMALL ? PAGE_SIZE * 8 : \
        (sizeof(long) > 4 ? 4 * 1024 * 1024 : PID_MAX_DEFAULT))
-
+*/
 /*
  * Define a minimum number of pids per cpu.  Heuristically based
  * on original pid max of 32k for 32 cpus.  Also, increase the
  * minimum settable value for pid_max on the running system based
  * on similar defaults.  See kernel/pid.c:pidmap_init() for details.
  */
+
+/*mklinux_akshay*/
 #define PIDS_PER_CPU_DEFAULT   1024
 #define PIDS_PER_CPU_MIN       8
 
index e228ca9..af812ad 100644 (file)
 struct workqueue_struct;
 
 struct work_struct;
+
+struct worker;
+struct global_cwq;
+
 typedef void (*work_func_t)(struct work_struct *work);
 
 /*
diff --git a/include/popcorn/global_spinlock.h b/include/popcorn/global_spinlock.h
new file mode 100644 (file)
index 0000000..5c5af3d
--- /dev/null
@@ -0,0 +1,132 @@
+#ifndef __GLOBAL_SPINLOCK_H
+#define __GLOBAL_SPINLOCK_H
+
+#include <linux/workqueue.h>
+#include       <linux/hash.h>
+#include <linux/spinlock.h>
+#include "request_data.h"
+
+#define _SPIN_HASHBITS 8
+#define _BITS_FOR_STATUS 3
+
+#define INITIAL_STATE 0
+#define HAS_TICKET 3
+
+#define NORMAL_Q_PRIORITY 100
+
+#define LOCK_STAT 
+//#undef LOCK_STAT
+#define sp_hashfn(uaddr, pid)      \
+         hash_long((unsigned long)uaddr + (unsigned long)pid, _SPIN_HASHBITS)
+
+
+struct futex_common_data{
+       int nr_wake;
+       int nr_requeue;
+       u32 bitset;
+       int cmpval;
+       int val;
+       int rflag;
+       int fn_flag;
+       int rw;
+       unsigned int flags;
+       unsigned long uaddr;
+       unsigned long uaddr2;
+       unsigned int ops :1;
+} __attribute__((packed));
+
+typedef struct futex_common_data  futex_common_data_t;
+
+
+
+
+typedef struct spin_key {
+       pid_t _tgid;
+       unsigned long _uaddr;
+       int offset;
+} _spin_key;
+
+struct local_request_queue {
+       pid_t _pid;
+       unsigned long _request_id;//ticket number _pid has acquired
+       unsigned int wake_st; //token status
+       wait_queue_head_t _wq; //to wait until the server responds
+       enum {
+                       DONE, IDLE, INPROG
+       } status;
+       int errno;
+       struct list_head lrq_member;
+} __attribute__((packed));
+typedef struct local_request_queue _local_rq_t;
+
+struct global_request_queue {
+//     volatile struct plist_node list;
+       _remote_wakeup_request_t wakeup;
+       _remote_key_request_t wait;
+       int cnt;
+       unsigned int ops:1; //0-wait 1-wake
+}__attribute__((packed));
+typedef struct global_request_queue _global_rq;
+
+
+
+
+
+struct global_request_work  {
+       struct work_struct work;
+       spinlock_t * lock;
+       _global_rq * gq;
+//     struct plist_head * _grq_head;
+//     volatile unsigned int _is_alive;
+//     pid_t _worker_pid;
+//     wait_queue_head_t *flush;
+//     unsigned int * free_work;
+//     int ops ; //0-wait 1-wake
+};
+
+typedef struct global_request_work global_request_work_t;
+
+struct spin_value {
+       spinlock_t _sp;
+       volatile unsigned int _st; //token status//TBR
+       volatile unsigned int lock_st; // lock is global or local //TBR
+       volatile unsigned long _ticket;
+       struct list_head _lrq_head; //stores the status of ticket and wait queues
+};
+typedef struct spin_value  _spin_value;
+
+struct global_value {
+       spinlock_t lock;
+//     volatile struct plist_head _grq_head; // TODO for storing mutiple wq
+       struct workqueue_struct *global_wq;
+       struct task_struct *thread_group_leader;
+       global_request_work_t *worker_task;
+       unsigned int free :1;
+       char name[32];
+};
+typedef struct global_value _global_value;
+
+
+
+_spin_value *hashspinkey(_spin_key *sk);
+_global_value *hashgroup(struct task_struct *group_pid);
+
+
+//Populate spin key from uaddr
+int getKey(unsigned long uaddr, _spin_key *sk, pid_t tgid);
+
+int global_spinlock(unsigned long uaddr,futex_common_data_t *_data,_spin_value * value,_local_rq_t *rq_ptr,int localticket_value);
+int global_spinunlock(unsigned long uaddr, unsigned int fn_flag);
+
+
+_local_rq_t * add_request_node(int request_id,pid_t pid, struct list_head *head);
+int find_and_delete_request(int request_id, struct list_head *head);
+_local_rq_t * find_request(int request_id, struct list_head *head) ;
+_local_rq_t * find_request_by_pid(pid_t pid, struct list_head *head) ;
+_local_rq_t * set_err_request(int request_id,int err, struct list_head *head) ;
+
+
+extern _spin_value spin_bucket[1 << _SPIN_HASHBITS];
+extern _global_value global_bucket[1 << _SPIN_HASHBITS];
+
+#endif
diff --git a/include/popcorn/init.h b/include/popcorn/init.h
new file mode 100644 (file)
index 0000000..07b2602
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef __POPCORN_INIT_H
+#define __POPCORN_INIT_H
+/*
+ * Boot parameters for allocating Kernel ID
+ *
+ * (C) Akshay Ravichandran <akshay87@vt.edu> 2012
+ */
+
+
+extern unsigned int Kernel_Id;
+extern unsigned long *token_bucket;
+extern unsigned long long bucket_phys_addr;
+extern unsigned long kernel_start_addr;
+
+extern void popcorn_init(void);
+
+extern int _init_RemoteCPUMask(void);
+
+
+extern struct list_head rlist_head;
+
+extern struct list_head pfn_list_head;
+
+extern int _init_RemotePFN(void);
+
+
+#endif /* __POPCORN_INIT_H */
+
diff --git a/include/popcorn/ipc.h b/include/popcorn/ipc.h
new file mode 100644 (file)
index 0000000..69caada
--- /dev/null
@@ -0,0 +1,50 @@
+
+#include <linux/types.h>
+#include <linux/bitops.h>
+#include <linux/init.h>
+#include <linux/rcupdate.h>
+
+#include "init.h"
+
+#define KERNELBITS 6 // Bits to represent Kernel ids
+
+//Maximum semid is (1<<29)-1=536870911
+
+#define IPC_MAX_ID (1UL << 35)  //35 bits  (29 bits for integer representation + 6 bits for kernel representation)
+#define IPC_MAX_ID_MASK (IPC_MAX_ID - 1)
+#define IPC_SHIFT_BITS (35-KERNELBITS)
+
+#define GLOBAL_IPC_NODE(id, node) \
+        (((node) << IPC_SHIFT_BITS)|IPC_MAX_ID|((id) & IPC_MAX_ID_MASK))
+
+#define GLOBAL_IPCID(id) GLOBAL_IPC_NODE(id,Kernel_Id)
+
+#define SHORT_IPCID(id) ((id) & IPC_MAX_ID_MASK)
+#define ORIG_IPCID(id) (SHORT_IPCID(id) & ((1UL<<IPC_SHIFT_BITS)-1))
+#define ORIG_IPC_NODE(id) (SHORT_IPCID(id) >> IPC_SHIFT_BITS)
+
+static inline int isLocalKernel(int id)
+{
+       if(ORIG_IPC_NODE(id)==Kernel_Id)
+               return 1;
+
+       return 0;
+}
+
+
+
+typedef long global_ipc_id_t;
+
+
+#define GLOBAL_KEY_NODE(key, node) \
+       (((node) << IPC_SHIFT_BITS)|IPC_MAX_ID|((key) & IPC_MAX_ID_MASK))
+
+#define GLOBAL_KEY(key) GLOBAL_KEY_NODE(key,Kernel_Id)
+
+#define SHORT_KEY(key) ((key) & IPC_MAX_ID_MASK)
+#define ORIG_KEY(key) (SHORT_KEY(key) & ((1<<IPC_SHIFT_BITS)-1))
+#define ORIG_KEY_NODE(key) (SHORT_KEY(key) >> IPC_SHIFT_BITS)
+
+
+typedef long global_key_t;
+
diff --git a/include/popcorn/pid.h b/include/popcorn/pid.h
new file mode 100644 (file)
index 0000000..574b61c
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef __POPCORN_PID_H__
+#define __POPCORN_PID_H__
+
+#include <asm/page.h>
+#include <linux/pid_namespace.h>
+#include <linux/threads.h>
+#include <linux/types.h>
+#include "init.h"
+
+
+#define POPCORN_MAX_KERNEL_ID  15
+#define GLOBAL_PID_MASK PID_MAX_LIMIT
+#define PID_NODE_SHIFT POPCORN_MAX_KERNEL_ID
+#define INTERNAL_PID_MASK (PID_MAX_LIMIT - 1)
+
+#define GLOBAL_PID_NODE(pid, node) \
+       (((node) << PID_NODE_SHIFT)|GLOBAL_PID_MASK|((pid) & INTERNAL_PID_MASK))
+
+#define GLOBAL_PID(pid) GLOBAL_PID_NODE(pid,Kernel_Id)
+#define GLOBAL_NPID(pid,node) GLOBAL_PID_NODE(pid,node)
+
+#define SHORT_PID(pid) ((pid) & INTERNAL_PID_MASK)
+#define ORIG_PID(pid) (SHORT_PID(pid) & ((1<<POPCORN_MAX_KERNEL_ID)-1))
+#define ORIG_NODE(pid) (SHORT_PID(pid) >> PID_NODE_SHIFT)
+
+
+
+static inline int isPidLocalKernel(int id)
+{
+       if(ORIG_NODE(id)==Kernel_Id)
+               return 1;
+
+       return 0;
+}
+
+
+
+#endif
diff --git a/include/popcorn/remote_pfn.h b/include/popcorn/remote_pfn.h
new file mode 100644 (file)
index 0000000..a932d61
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * remote_pfn.h
+ *
+ *  Created on: Sep 28, 2013
+ *      Author: akshay
+ */
+
+#ifndef REMOTE_PFN_H_
+#define REMOTE_PFN_H_
+
+//list for pfn range of each kernels
+struct _pfn_range_list
+{
+       unsigned long start_pfn_addr;
+       unsigned long end_pfn_addr;
+       int kernel_number;
+       struct list_head pfn_list_member;
+};
+typedef struct _pfn_range_list _pfn_range_list_t;
+
+
+#endif /* REMOTE_PFN_H_ */
diff --git a/include/popcorn/remote_proc_pid.h b/include/popcorn/remote_proc_pid.h
new file mode 100644 (file)
index 0000000..2a24bbd
--- /dev/null
@@ -0,0 +1,17 @@
+
+#include <linux/proc_fs.h>
+#include <linux/fs.h>
+#include <linux/types.h>
+
+#include <asm/ptrace.h>
+
+int iterate_process();
+int send_request_to_remote(int KernelId);
+int remote_proc_pid_readdir(struct file *filp, void *dirent, filldir_t filldir,loff_t offset);
+
+struct dentry *remote_proc_pid_lookup(struct inode *dir,
+                                  struct dentry *dentry, pid_t tgid);
+
+
+extern const struct inode_operations proc_def_inode_operations;
+int proc_setattr(struct dentry *dentry, struct iattr *attr);
diff --git a/include/popcorn/request_data.h b/include/popcorn/request_data.h
new file mode 100644 (file)
index 0000000..95c1bec
--- /dev/null
@@ -0,0 +1,69 @@
+
+
+#include <linux/pcn_kmsg.h>
+
+
+struct _remote_wakeup_request {
+       struct pcn_kmsg_hdr header;
+       int nr_wake;                    // 4
+       int nr_wake2;                   // 4
+       u32 bitset;                             // 4
+       int cmpval;                             // 4
+       int tghid;                              // 4
+       int rflag;                              // 4
+       int pid;                                // 4
+       unsigned int flags;             // 4
+       int fn_flag;                    // 4
+       unsigned int ticket;    // 4
+       unsigned long uaddr;    // 8
+       unsigned long uaddr2;   // 8
+       unsigned int ops :1;    // 1
+       char pad[3];
+}__attribute__((packed)) __attribute__((aligned(64)));
+
+
+typedef struct _remote_wakeup_request _remote_wakeup_request_t;
+
+
+struct _remote_wakeup_response {
+       struct pcn_kmsg_hdr header;
+       int errno;                              // 4
+       int request_id;                 // 4
+       pid_t rem_pid;                  // 4
+       unsigned long uaddr;    // 8
+       char pad_string[40];
+}__attribute__((packed)) __attribute__((aligned(64)));
+
+
+typedef struct _remote_wakeup_response _remote_wakeup_response_t;
+
+
+
+struct _remote_key_request {
+       struct pcn_kmsg_hdr header;
+       unsigned long uaddr;    // 8
+       unsigned int flags;             // 4
+       unsigned int fn_flags;  // 4
+       u32 bitset;
+       int rw;                                 // 4
+       int pid;                                // 4
+       int val;                                // 4
+       int tghid;                              // 4
+       unsigned int ticket;    // 4
+       unsigned int ops :1;    // 1
+       char pad_string[19];
+}__attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_key_request _remote_key_request_t;
+
+struct _remote_key_response {
+       struct pcn_kmsg_hdr header;
+       int errno;                              // 4
+       int request_id;                 // 4
+       pid_t rem_pid;                  // 4
+       unsigned long uaddr;    // 8
+       char pad_string[40];
+}__attribute__((packed)) __attribute__((aligned(64)));
+
+
+typedef struct _remote_key_response _remote_key_response_t;
index 1dd8cd1..635a676 100644 (file)
@@ -59,7 +59,8 @@
 #include <linux/kthread.h>
 #include <linux/sched.h>
 #include <linux/signal.h>
-#include <linux/idr.h>
+#include <linux/idr.h>/*mklinux_akshay*/
+//#include <linux/ipc_idr.h>/*mklinux_akshay*/
 #include <linux/kgdb.h>
 #include <linux/ftrace.h>
 #include <linux/async.h>
 #include <linux/slab.h>
 #include <linux/perf_event.h>
 
+
 #include <asm/io.h>
 #include <asm/bugs.h>
 #include <asm/setup.h>
 #include <asm/sections.h>
 #include <asm/cacheflush.h>
 
+
 #ifdef CONFIG_X86_LOCAL_APIC
 #include <asm/smp.h>
 #endif
@@ -100,6 +103,9 @@ extern void tc_init(void);
 extern void pcn_kmsg_init(void);
 #endif
 
+extern void popcorn_init(void);
+extern int _init_RemoteCPUMask(void);
+extern int  _init_RemotePFN(void);
 /*
  * Debug helper: via this flag we know that we are in 'early bootup code'
  * where only the boot processor is running with IRQ disabled.  This means
@@ -441,6 +447,8 @@ static void __init boot_cpu_init(void)
        set_cpu_active(cpu, true);
        set_cpu_present(cpu, true);
        set_cpu_possible(cpu, true);
+       /*mklinux_akshay*/
+       set_cpu_global_online(cpu, true);
 }
 
 void __init __weak smp_setup_processor_id(void)
@@ -547,6 +555,9 @@ asmlinkage void __init start_kernel(void)
                local_irq_disable();
        }
        idr_init_cache();
+       /*mklinux_akshay*/
+       //ipc_idr_init_cache();
+       /*mklinux_akshay*/
        perf_event_init();
        rcu_init();
        radix_tree_init();
@@ -647,6 +658,7 @@ asmlinkage void __init start_kernel(void)
        //pcn_kmsg_init();
 #endif
 
+       popcorn_init();
        /* Do the rest non-__init'ed, we're now alive */
        rest_init();
 }
@@ -799,7 +811,7 @@ static noinline int init_post(void)
        panic("No init found.  Try passing init= option to kernel. "
              "See Linux Documentation/init.txt for guidance.");
 }
-extern int _init_RemoteCPUMask(void);
+
 static int __init kernel_init(void * unused)
 {
        /*
@@ -827,6 +839,7 @@ static int __init kernel_init(void * unused)
 
        do_basic_setup();
 
+
        /* Open the /dev/console on the rootfs, this should never fail */
        if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
                printk(KERN_WARNING "Warning: unable to open an initial console.\n");
@@ -851,7 +864,11 @@ static int __init kernel_init(void * unused)
         * we're essentially up and running. Get rid of the
         * initmem segments and start the user-mode stuff..
         */
-_init_RemoteCPUMask();
+       /*mklinux_akshay*/
+
+               _init_RemoteCPUMask();
+               _init_RemotePFN();
+
        init_post();
        return 0;
 }
index d0b592d..7ac8bf4 100644 (file)
@@ -3,7 +3,7 @@
 #
 
 obj-$(CONFIG_SYSVIPC_COMPAT) += compat.o
-obj-$(CONFIG_SYSVIPC) += util.o msgutil.o msg.o sem.o shm.o ipcns_notifier.o syscall.o
+obj-$(CONFIG_SYSVIPC) += util.o msgutil.o msg.o sem.o shm.o ipcns_notifier.o syscall.o sem_remote.o shm_remote.o
 obj-$(CONFIG_SYSVIPC_SYSCTL) += ipc_sysctl.o
 obj_mq-$(CONFIG_COMPAT) += compat_mq.o
 #obj-$(CONFIG_POSIX_MQUEUE) += mqueue.o msgutil.o $(obj_mq-y) bbuffer.o mbuffer.o mcomm.o
diff --git a/ipc/remote_ipc_function.h b/ipc/remote_ipc_function.h
new file mode 100644 (file)
index 0000000..8bbc541
--- /dev/null
@@ -0,0 +1,27 @@
+
+
+#include <linux/ipc_namespace.h>
+#include <linux/ipc.h>
+#include <linux/idr.h>
+
+static inline struct kern_ipc_perm *remote_ipc_findkey(struct ipc_ids *ids, key_t key)
+{
+       struct kern_ipc_perm *ipc;
+       int next_id;
+       int total;
+
+       for (total = 0, next_id = 0; total < ids->in_use; next_id++) {
+               ipc = idr_find(&ids->ipcs_idr, next_id);
+
+               if (ipc == NULL)
+                       continue;
+
+               if (ipc->key != key) {
+                       total++;
+                       continue;
+               }
+               return ipc;
+       }
+
+       return NULL;
+}
index 5215a81..8728455 100644 (file)
--- a/ipc/sem.c
+++ b/ipc/sem.c
 #include <asm/uaccess.h>
 #include "util.h"
 
-/* One semaphore structure for each semaphore in the system. */
-struct sem {
-       int     semval;         /* current value */
-       int     sempid;         /* pid of last operation */
-       struct list_head sem_pending; /* pending single-sop operations */
-};
-
-/* One queue for each sleeping process in the system. */
-struct sem_queue {
-       struct list_head        simple_list; /* queue of pending operations */
-       struct list_head        list;    /* queue of pending operations */
-       struct task_struct      *sleeper; /* this process */
-       struct sem_undo         *undo;   /* undo structure */
-       int                     pid;     /* process id of requesting process */
-       int                     status;  /* completion status of operation */
-       struct sembuf           *sops;   /* array of pending operations */
-       int                     nsops;   /* number of operations */
-       int                     alter;   /* does *sops alter the array? */
-};
-
-/* Each task has a list of undo requests. They are executed automatically
- * when the process exits.
- */
-struct sem_undo {
-       struct list_head        list_proc;      /* per-process list: *
-                                                * all undos from one process
-                                                * rcu protected */
-       struct rcu_head         rcu;            /* rcu struct for sem_undo */
-       struct sem_undo_list    *ulp;           /* back ptr to sem_undo_list */
-       struct list_head        list_id;        /* per semaphore array list:
-                                                * all undos for one array */
-       int                     semid;          /* semaphore set identifier */
-       short                   *semadj;        /* array of adjustments */
-                                               /* one per semaphore */
-};
-
-/* sem_undo_list controls shared access to the list of sem_undo structures
- * that may be shared among all a CLONE_SYSVSEM task group.
+/*mklinux_akshay*/
+/*
+ * struct sem, sem_queues, sem_undo_list moved to sem.h
  */
-struct sem_undo_list {
-       atomic_t                refcnt;
-       spinlock_t              lock;
-       struct list_head        list_proc;
-};
-
-
-#define sem_ids(ns)    ((ns)->ids[IPC_SEM_IDS])
+#include "sem_remote.h"
+/*mklinux_akshay*/
+/*mklinux_akshay*/// moved to util.h
+//#define sem_ids(ns)  ((ns)->ids[IPC_SEM_IDS])
+/*mklinux_akshay*/
 
 #define sem_unlock(sma)                ipc_unlock(&(sma)->sem_perm)
 #define sem_checkid(sma, semid)        ipc_checkid(&sma->sem_perm, semid)
 
-static int newary(struct ipc_namespace *, struct ipc_params *);
-static void freeary(struct ipc_namespace *, struct kern_ipc_perm *);
+int newary(struct ipc_namespace *, struct ipc_params *);
+void freeary(struct ipc_namespace *, struct kern_ipc_perm *);
 #ifdef CONFIG_PROC_FS
 static int sysvipc_sem_proc_show(struct seq_file *s, void *it);
 #endif
@@ -172,6 +134,10 @@ void sem_init_ns(struct ipc_namespace *ns)
        ns->sc_semmni = SEMMNI;
        ns->used_sems = 0;
        ipc_init_ids(&ns->ids[IPC_SEM_IDS]);
+
+       /*mklinux_akshay*/
+       ns->ids[IPC_SEM_IDS].remoteipc_ops_t=NULL;
+       /*mklinux_akshay*/
 }
 
 #ifdef CONFIG_IPC_NS
@@ -186,7 +152,7 @@ void __init sem_init (void)
 {
        sem_init_ns(&init_ipc_ns);
        ipc_init_proc_interface("sysvipc/sem",
-                               "       key      semid perms      nsems   uid   gid  cuid  cgid      otime      ctime\n",
+                               "       key      semid perms      nsems   uid   gid  cuid  cgid      otime      ctime        global_key                 global_id\n",
                                IPC_SEM_IDS, sysvipc_sem_proc_show);
 }
 
@@ -281,7 +247,7 @@ static inline void sem_rmid(struct ipc_namespace *ns, struct sem_array *s)
  * Called with sem_ids.rw_mutex held (as a writer)
  */
 
-static int newary(struct ipc_namespace *ns, struct ipc_params *params)
+int newary(struct ipc_namespace *ns, struct ipc_params *params)
 {
        int id;
        int retval;
@@ -306,7 +272,9 @@ static int newary(struct ipc_namespace *ns, struct ipc_params *params)
 
        sma->sem_perm.mode = (semflg & S_IRWXUGO);
        sma->sem_perm.key = key;
-
+       /*mklinux_akshay*/
+       sma->sem_perm.global_key = GLOBAL_KEY(sma->sem_perm.key);
+       /*mklinux_akshay*/
        sma->sem_perm.security = NULL;
        retval = security_sem_alloc(sma);
        if (retval) {
@@ -341,7 +309,7 @@ static int newary(struct ipc_namespace *ns, struct ipc_params *params)
 /*
  * Called with sem_ids.rw_mutex and ipcp locked.
  */
-static inline int sem_security(struct kern_ipc_perm *ipcp, int semflg)
+ int sem_security(struct kern_ipc_perm *ipcp, int semflg)
 {
        struct sem_array *sma;
 
@@ -352,7 +320,7 @@ static inline int sem_security(struct kern_ipc_perm *ipcp, int semflg)
 /*
  * Called with sem_ids.rw_mutex and ipcp locked.
  */
-static inline int sem_more_checks(struct kern_ipc_perm *ipcp,
+int sem_more_checks(struct kern_ipc_perm *ipcp,
                                struct ipc_params *params)
 {
        struct sem_array *sma;
@@ -369,6 +337,9 @@ SYSCALL_DEFINE3(semget, key_t, key, int, nsems, int, semflg)
        struct ipc_namespace *ns;
        struct ipc_ops sem_ops;
        struct ipc_params sem_params;
+       /*mklinux_akshay*/
+       struct remoteipc_ops remotesem_ops;
+       /*mklinux_akshay*/
 
        ns = current->nsproxy->ipc_ns;
 
@@ -383,7 +354,11 @@ SYSCALL_DEFINE3(semget, key_t, key, int, nsems, int, semflg)
        sem_params.flg = semflg;
        sem_params.u.nsems = nsems;
 
-       return ipcget(ns, &sem_ids(ns), &sem_ops, &sem_params);
+       /*mklinux_akshay*/
+       remotesem_ops.ipc_getipcid=remote_ipc_sem_getid;
+
+
+       return _ipcget(ns, &sem_ids(ns), &sem_ops, &remotesem_ops, &sem_params);/*mklinux_akshay*/
 }
 
 /*
@@ -739,7 +714,7 @@ static int count_semzcnt (struct sem_array * sma, ushort semnum)
  * as a writer and the spinlock for this semaphore set hold. sem_ids.rw_mutex
  * remains locked on exit.
  */
-static void freeary(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp)
+void freeary(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp)
 {
        struct sem_undo *un, *tu;
        struct sem_queue *q, *tq;
@@ -798,7 +773,8 @@ static unsigned long copy_semid_to_user(void __user *buf, struct semid64_ds *in,
        }
 }
 
-static int semctl_nolock(struct ipc_namespace *ns, int semid,
+/*mklinux_akshay*/ //static /*mklinux_akshay*/
+int semctl_nolock(struct ipc_namespace *ns, int semid,
                         int cmd, int version, union semun arg)
 {
        int err;
@@ -883,7 +859,8 @@ out_unlock:
        return err;
 }
 
-static int semctl_main(struct ipc_namespace *ns, int semid, int semnum,
+/*mklinux_akshay*/ //static /*mklinux_akshay*/
+int semctl_main(struct ipc_namespace *ns, int semid, int semnum,
                int cmd, int version, union semun arg)
 {
        struct sem_array *sma;
@@ -1075,7 +1052,8 @@ copy_semid_from_user(struct semid64_ds *out, void __user *buf, int version)
  * to be held in write mode.
  * NOTE: no locks must be held, the rw_mutex is taken inside this function.
  */
-static int semctl_down(struct ipc_namespace *ns, int semid,
+/*mklinux_akshay*/ //static /*mklinux_akshay*/
+int semctl_down(struct ipc_namespace *ns, int semid,
                       int cmd, int version, union semun arg)
 {
        struct sem_array *sma;
@@ -1129,14 +1107,26 @@ SYSCALL_DEFINE(semctl)(int semid, int semnum, int cmd, union semun arg)
 
        version = ipc_parse_version(&cmd);
        ns = current->nsproxy->ipc_ns;
+       /*mklinux_akshay*/
+       struct remoteipc_ops remotesem_ops;
+       /*mklinux_akshay*/
 
        switch(cmd) {
        case IPC_INFO:
        case SEM_INFO:
        case IPC_STAT:
        case SEM_STAT:
-               err = semctl_nolock(ns, semid, cmd, version, arg);
+       {
+               if(isLocalKernel(semid))
+               {
+                       err = semctl_nolock(ns, semid, cmd, version, arg);
+               }
+               else
+               {
+                       err = remote_ipc_sem_semctl(semnum,semid, cmd, version, arg);
+               }
                return err;
+       }
        case GETALL:
        case GETVAL:
        case GETPID:
@@ -1144,12 +1134,30 @@ SYSCALL_DEFINE(semctl)(int semid, int semnum, int cmd, union semun arg)
        case GETZCNT:
        case SETVAL:
        case SETALL:
-               err = semctl_main(ns,semid,semnum,cmd,version,arg);
+       {
+               if(isLocalKernel(semid))
+               {
+                       err = semctl_main(ns,semid,semnum,cmd,version,arg);
+               }
+               else
+               {
+                       err = remote_ipc_sem_semctl(semnum,semid, cmd, version, arg);
+               }
                return err;
+       }
        case IPC_RMID:
        case IPC_SET:
-               err = semctl_down(ns, semid, cmd, version, arg);
+       {
+               if(isLocalKernel(semid))
+               {
+                       err = semctl_down(ns, semid, cmd, version, arg);
+               }
+               else
+               {
+                       err = remote_ipc_sem_semctl(semnum,semid, cmd, version, arg);
+               }
                return err;
+       }
        default:
                return -EINVAL;
        }
@@ -1680,7 +1688,7 @@ static int sysvipc_sem_proc_show(struct seq_file *s, void *it)
        struct sem_array *sma = it;
 
        return seq_printf(s,
-                         "%10d %10d  %4o %10u %5u %5u %5u %5u %10lu %10lu\n",
+                         "%10d %10d  %4o %10u %5u %5u %5u %5u %10lu %10lu %10u %10u\n",
                          sma->sem_perm.key,
                          sma->sem_perm.id,
                          sma->sem_perm.mode,
@@ -1690,6 +1698,8 @@ static int sysvipc_sem_proc_show(struct seq_file *s, void *it)
                          sma->sem_perm.cuid,
                          sma->sem_perm.cgid,
                          sma->sem_otime,
-                         sma->sem_ctime);
+                         sma->sem_ctime,
+                         sma->sem_perm.global_key,
+                         sma->sem_perm.global_id);
 }
 #endif
diff --git a/ipc/sem_remote.c b/ipc/sem_remote.c
new file mode 100644 (file)
index 0000000..e5ba86f
--- /dev/null
@@ -0,0 +1,359 @@
+#include <linux/kernel.h>
+#include <linux/kthread.h>
+#include <linux/smp.h>
+#include <linux/slab.h>
+#include <linux/pcn_kmsg.h>
+#include <linux/string.h>
+#include <linux/wait.h>
+
+
+#include "remote_ipc_function.h"
+//#include <linux/ipc.h>
+#include "sem_remote.h"
+#include "util.h"
+
+
+
+
+static int _cpu=-1;
+static int wait=-1;
+static int errnum=0;
+
+static DECLARE_WAIT_QUEUE_HEAD(wq);
+
+/*
+ ******************************************************** common functions*******************************************************************
+ */
+
+
+int reset_wait()
+{
+       wait=-1;
+       return 0;
+}
+
+/*
+ ******************************************************** semget message functions*******************************************************************
+ */
+
+
+struct _remote_ipc_semget_request {
+    struct pcn_kmsg_hdr header;
+    struct ipc_params _param;
+    char pad_string[44];
+} __attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_ipc_semget_request _remote_ipc_semget_request_t;
+
+struct _remote_ipc_semget_response {
+    struct pcn_kmsg_hdr header;
+    int errno;
+    char pad_string[56];
+   } __attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_ipc_semget_response _remote_ipc_semget_response_t;
+
+/*
+struct kern_ipc_perm *remote_ipc_findkey(struct ipc_ids *ids, key_t key)
+{
+       struct kern_ipc_perm *ipc;
+       int next_id;
+       int total;
+
+       for (total = 0, next_id = 0; total < ids->in_use; next_id++) {
+               ipc = idr_find(&ids->ipcs_idr, next_id);
+
+               if (ipc == NULL)
+                       continue;
+
+               if (ipc->key != key) {
+                       total++;
+                       continue;
+               }
+               return ipc;
+       }
+
+       return NULL;
+}
+*/
+int remote_semget( struct ipc_params *params)
+{
+               struct ipc_namespace *ns;
+               struct ipc_ops sem_ops;
+
+               struct kern_ipc_perm *perm;
+               int err = 0;
+
+               ns = current->nsproxy->ipc_ns;
+
+               sem_ops.getnew = newary;
+               sem_ops.associate = sem_security;
+               sem_ops.more_checks = sem_more_checks;
+
+               perm=remote_ipc_findkey(&sem_ids(ns),params->key);
+               if(perm!=NULL)
+               {
+                       err=sem_more_checks(perm,params);
+                       if (!err)
+                               err = ipc_check_perms(ns, perm, &sem_ops, params);
+
+               return GLOBAL_IPCID(err);
+               }
+               return 0;
+}
+
+
+static int handle_remote_ipc_semget_response(struct pcn_kmsg_message* inc_msg) {
+       _remote_ipc_semget_response_t* msg = (_remote_ipc_semget_response_t*) inc_msg;
+
+       printk("%s: response --- errno{%d} \n","handle_remote_ipc_semget_response", msg->errno);
+
+       wait = 1;
+       errnum= msg->errno;
+       wake_up_interruptible(&wq);
+       printk("%s: response --- pid stored - wait{%d} \n",
+                       "handle_remote_pid_response", wait);
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+static int handle_remote_ipc_semget_request(struct pcn_kmsg_message* inc_msg) {
+
+       _remote_ipc_semget_request_t* msg = (_remote_ipc_semget_request_t*) inc_msg;
+       _remote_ipc_semget_response_t response;
+
+       int errno=0;
+       printk("%s: request -- entered \n", "handle_remote_ipc_semget_request");
+
+       // Finish constructing response
+       response.header.type = PCN_KMSG_TYPE_REMOTE_IPC_SEMGET_RESPONSE;
+       response.header.prio = PCN_KMSG_PRIO_NORMAL;
+
+       errno = remote_semget(&(msg->_param));
+
+       response.errno=errno;
+
+       printk("%s: request -- errno %d \n", "handle_remote_ipc_semget_request",response.errno);
+       // Send response
+       pcn_kmsg_send(msg->header.from_cpu, (struct pcn_kmsg_message*) (&response));
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+
+int send_semget_req_to_remote(int KernelId,  struct ipc_params *params) {
+
+       int res=0;
+       _remote_ipc_semget_request_t* request = kmalloc(sizeof(_remote_ipc_semget_request_t),
+       GFP_KERNEL);
+       // Build request
+       request->header.type = PCN_KMSG_TYPE_REMOTE_IPC_SEMGET_REQUEST;
+       request->header.prio = PCN_KMSG_PRIO_NORMAL;
+       request->_param = *params;
+       //request->nsems=params->u.nsems;
+       // Send response
+       res=pcn_kmsg_send(KernelId, (struct pcn_kmsg_message*) (request));
+       return res;
+}
+
+
+int remote_ipc_sem_getid(struct ipc_ids *ids, struct ipc_params *params)
+{
+
+       reset_wait();
+       int ret=0;
+       /*
+        * have to send message to remote kernels and fetch if the key is present
+        */
+       long *key_index;
+       int id = -1;
+
+       key_index = 1;
+
+       if(_cpu==0)
+       id = send_semget_req_to_remote(3,params);
+       else
+       id = send_semget_req_to_remote(0,params);
+
+       printk("remote_ipc_sem_findkey: go to sleep!!!!");
+       wait_event_interruptible(wq, wait != -1);
+
+       ret=errnum;
+
+       return ret;
+}
+
+
+/*
+ ******************************************************** semgctl message functions*******************************************************************
+ */
+
+struct _remote_ipc_semctl_request {
+    struct pcn_kmsg_hdr header;
+    int _semnum;
+    int _semid;
+    int _cmd;
+    int _version;
+    union semun _arg;
+} __attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_ipc_semctl_request _remote_ipc_semctl_request_t;
+
+struct _remote_ipc_semctl_response {
+    struct pcn_kmsg_hdr header;
+    int errno;
+    char pad_string[56];
+   } __attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_ipc_semctl_response _remote_ipc_semctl_response_t;
+
+
+
+
+int remote_semctl(int semnum, int semid, int cmd, int version, union semun arg)
+{
+               struct ipc_namespace *ns;
+               int err = -EINVAL;
+
+               ns = current->nsproxy->ipc_ns;
+
+               switch(cmd) {
+                       case IPC_INFO:
+                       case SEM_INFO:
+                       case IPC_STAT:
+                       case SEM_STAT:
+                               err = semctl_nolock(ns, semid, cmd, version, arg);
+                               return err;
+                       case GETALL:
+                       case GETVAL:
+                       case GETPID:
+                       case GETNCNT:
+                       case GETZCNT:
+                       case SETVAL:
+                       case SETALL:
+                               err = semctl_main(ns,semid,semnum,cmd,version,arg);
+                               return err;
+                       case IPC_RMID:
+                       case IPC_SET:
+                               err = semctl_down(ns, semid, cmd, version, arg);
+                               return err;
+                       default:
+                               return -EINVAL;
+                       }
+
+}
+
+
+static int handle_remote_ipc_semctl_response(struct pcn_kmsg_message* inc_msg) {
+       _remote_ipc_semctl_response_t* msg = (_remote_ipc_semctl_response_t*) inc_msg;
+
+       printk("%s: response --- errno{%d} \n","handle_remote_ipc_semget_response", msg->errno);
+
+       wait = 1;
+       errnum= msg->errno;
+       wake_up_interruptible(&wq);
+       printk("%s: response --- pid stored - wait{%d} \n",
+                       "handle_remote_pid_response", wait);
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+static int handle_remote_ipc_semctl_request(struct pcn_kmsg_message* inc_msg) {
+
+       _remote_ipc_semctl_request_t* msg = (_remote_ipc_semctl_request_t*) inc_msg;
+       _remote_ipc_semctl_response_t response;
+
+       int errno=0;
+       printk("%s: request -- entered \n", "handle_remote_ipc_semget_request");
+
+       // Finish constructing response
+       response.header.type = PCN_KMSG_TYPE_REMOTE_IPC_SEMCTL_RESPONSE;
+       response.header.prio = PCN_KMSG_PRIO_NORMAL;
+
+       errno = remote_semctl(msg->_semnum,msg->_semid,msg->_cmd,msg->_version,msg->_arg);
+
+       response.errno=errno;
+
+       printk("%s: request -- errno %d \n", "handle_remote_ipc_semget_request",response.errno);
+       // Send response
+       pcn_kmsg_send(msg->header.from_cpu, (struct pcn_kmsg_message*) (&response));
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+
+int send_semctl_req_to_remote(int KernelId, int semnum, int semid, int cmd, int version, union semun arg) {
+
+       int res=0;
+       _remote_ipc_semctl_request_t* request = kmalloc(sizeof(_remote_ipc_semctl_request_t),
+       GFP_KERNEL);
+       // Build request
+       request->header.type = PCN_KMSG_TYPE_REMOTE_IPC_SEMCTL_REQUEST;
+       request->header.prio = PCN_KMSG_PRIO_NORMAL;
+       request->_semnum = semnum;
+       request->_arg = arg;
+       request->_cmd = cmd;
+       request->_semid = semid;
+       request->_version = version;
+       // Send response
+       res=pcn_kmsg_send_long(KernelId, (struct pcn_kmsg_message*) (request),
+                       sizeof(_remote_ipc_semctl_request_t) - sizeof(struct pcn_kmsg_hdr));
+       return res;
+}
+
+
+int remote_ipc_sem_semctl(int semnum, int semid, int cmd, int version, union semun arg)
+{
+
+       reset_wait();
+       int ret=0;
+
+       long *key_index;
+       int id = -1;
+
+       key_index = 1;
+
+       if(_cpu==0)
+       id = send_semctl_req_to_remote(3,semnum,semid,cmd,version,arg);
+       else
+       id = send_semctl_req_to_remote(0,semnum,semid,cmd,version,arg);
+
+       printk("remote_ipc_sem_findkey: go to sleep!!!!");
+       wait_event_interruptible(wq, wait != -1);
+
+       ret=errnum;
+
+       return ret;
+}
+
+static int __init ipc_handler_init(void)
+{
+
+
+    _cpu = smp_processor_id();
+
+
+       pcn_kmsg_register_callback(PCN_KMSG_TYPE_REMOTE_IPC_SEMGET_REQUEST,
+                                               handle_remote_ipc_semget_request);
+       pcn_kmsg_register_callback(PCN_KMSG_TYPE_REMOTE_IPC_SEMGET_RESPONSE,
+                                               handle_remote_ipc_semget_response);
+
+       pcn_kmsg_register_callback(PCN_KMSG_TYPE_REMOTE_IPC_SEMCTL_REQUEST,
+                                                               handle_remote_ipc_semctl_request);
+       pcn_kmsg_register_callback(PCN_KMSG_TYPE_REMOTE_IPC_SEMCTL_RESPONSE,
+                                                               handle_remote_ipc_semctl_response);
+       return 0;
+}
+/**
+ * Register process server init function as
+ * module initialization function.
+ */
+late_initcall(ipc_handler_init);
diff --git a/ipc/sem_remote.h b/ipc/sem_remote.h
new file mode 100644 (file)
index 0000000..12f9268
--- /dev/null
@@ -0,0 +1,39 @@
+
+#include <linux/sem.h>
+#include <linux/ipc_namespace.h>
+
+struct ipc_params;
+union semun;
+struct ipc_ids;
+struct kern_ipc_perm;
+struct ipc_ops;
+
+//external definition for functions in sem.c
+extern int newary(struct ipc_namespace *, struct ipc_params *);
+extern void freeary(struct ipc_namespace *, struct kern_ipc_perm *);
+extern int sem_security(struct kern_ipc_perm *ipcp, int semflg);
+extern int sem_more_checks(struct kern_ipc_perm *ipcp,
+                               struct ipc_params *params);
+extern int semctl_down(struct ipc_namespace *ns, int semid,
+                      int cmd, int version, union semun arg);
+extern int semctl_nolock(struct ipc_namespace *ns, int semid,
+                        int cmd, int version, union semun arg);
+extern int semctl_main(struct ipc_namespace *ns, int semid, int semnum,
+               int cmd, int version, union semun arg);
+
+//external definition for functions in util.c
+extern struct kern_ipc_perm *ipc_findkey(struct ipc_ids *ids, key_t key);
+extern int ipc_check_perms(struct ipc_namespace *ns,
+                          struct kern_ipc_perm *ipcp,
+                          struct ipc_ops *ops,
+                          struct ipc_params *params);
+
+
+//remote semaphore operation functions
+int remote_ipc_sem_getid(struct ipc_ids *, struct ipc_params *params);
+int remote_ipc_sem_semctl(int semnum, int semid, int cmd, int version, union semun arg);
+
+struct rem_sem_op_result
+{
+       int errnum;
+};
index b76be5b..c21a9d1 100644 (file)
--- a/ipc/shm.c
+++ b/ipc/shm.c
 
 #include "util.h"
 
+/*mklinux_akshay*/
+#include "shm_remote.h"
+/*
 struct shm_file_data {
        int id;
        struct ipc_namespace *ns;
        struct file *file;
        const struct vm_operations_struct *vm_ops;
-};
+};*/
 
 #define shm_file_data(file) (*((struct shm_file_data **)&(file)->private_data))
 
-static const struct file_operations shm_file_operations;
+//static
+const struct file_operations shm_file_operations;
 static const struct vm_operations_struct shm_vm_ops;
 
-#define shm_ids(ns)    ((ns)->ids[IPC_SHM_IDS])
+/*mklinux_akshay*/ //moved to util.h
+/*#define shm_ids(ns)  ((ns)->ids[IPC_SHM_IDS])
 
 #define shm_unlock(shp)                        \
        ipc_unlock(&(shp)->shm_perm)
-
-static int newseg(struct ipc_namespace *, struct ipc_params *);
+*/
+/*mklinux_akshay*///static
+int newseg(struct ipc_namespace *, struct ipc_params *);
 static void shm_open(struct vm_area_struct *vma);
 static void shm_close(struct vm_area_struct *vma);
-static void shm_destroy (struct ipc_namespace *ns, struct shmid_kernel *shp);
+void shm_destroy (struct ipc_namespace *ns, struct shmid_kernel *shp);
 #ifdef CONFIG_PROC_FS
 static int sysvipc_shm_proc_show(struct seq_file *s, void *it);
 #endif
@@ -128,7 +134,8 @@ void __init shm_init (void)
  * shm_lock_(check_) routines are called in the paths where the rw_mutex
  * is not necessarily held.
  */
-static inline struct shmid_kernel *shm_lock(struct ipc_namespace *ns, int id)
+//static inline
+struct shmid_kernel *shm_lock(struct ipc_namespace *ns, int id)
 {
        struct kern_ipc_perm *ipcp = ipc_lock(&shm_ids(ns), id);
 
@@ -144,7 +151,8 @@ static inline void shm_lock_by_ptr(struct shmid_kernel *ipcp)
        spin_lock(&ipcp->shm_perm.lock);
 }
 
-static inline struct shmid_kernel *shm_lock_check(struct ipc_namespace *ns,
+//static inline
+struct shmid_kernel *shm_lock_check(struct ipc_namespace *ns,
                                                int id)
 {
        struct kern_ipc_perm *ipcp = ipc_lock_check(&shm_ids(ns), id);
@@ -185,7 +193,8 @@ static void shm_open(struct vm_area_struct *vma)
  * It has to be called with shp and shm_ids.rw_mutex (writer) locked,
  * but returns with shp unlocked and freed.
  */
-static void shm_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp)
+//static
+void shm_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp)
 {
        ns->shm_tot -= (shp->shm_segsz + PAGE_SIZE - 1) >> PAGE_SHIFT;
        shm_rmid(ns, shp);
@@ -210,7 +219,8 @@ static void shm_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp)
  *
  * 2) sysctl kernel.shm_rmid_forced is set to 1.
  */
-static bool shm_may_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp)
+//static
+bool shm_may_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp)
 {
        return (shp->shm_nattch == 0) &&
               (ns->shm_rmid_forced ||
@@ -402,7 +412,8 @@ static unsigned long shm_get_unmapped_area(struct file *file,
                                                pgoff, flags);
 }
 
-static const struct file_operations shm_file_operations = {
+//static
+const struct file_operations shm_file_operations = {
        .mmap           = shm_mmap,
        .fsync          = shm_fsync,
        .release        = shm_release,
@@ -412,7 +423,8 @@ static const struct file_operations shm_file_operations = {
        .llseek         = noop_llseek,
 };
 
-static const struct file_operations shm_file_operations_huge = {
+//static
+const struct file_operations shm_file_operations_huge = {
        .mmap           = shm_mmap,
        .fsync          = shm_fsync,
        .release        = shm_release,
@@ -443,7 +455,8 @@ static const struct vm_operations_struct shm_vm_ops = {
  * Called with shm_ids.rw_mutex held as a writer.
  */
 
-static int newseg(struct ipc_namespace *ns, struct ipc_params *params)
+/*mklinux_akshay*/ //static
+int newseg(struct ipc_namespace *ns, struct ipc_params *params)
 {
        key_t key = params->key;
        int shmflg = params->flg;
@@ -469,7 +482,9 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params)
        shp->shm_perm.key = key;
        shp->shm_perm.mode = (shmflg & S_IRWXUGO);
        shp->mlock_user = NULL;
-
+       /*mklinux_akshay*/
+       shp->shm_perm.global_key = GLOBAL_KEY(shp->shm_perm.key);
+       /*mklinux_akshay*/
        shp->shm_perm.security = NULL;
        error = security_shm_alloc(shp);
        if (error) {
@@ -536,7 +551,8 @@ no_file:
 /*
  * Called with shm_ids.rw_mutex and ipcp locked.
  */
-static inline int shm_security(struct kern_ipc_perm *ipcp, int shmflg)
+/*mklinux_akshay*/ //static inline
+int shm_security(struct kern_ipc_perm *ipcp, int shmflg)
 {
        struct shmid_kernel *shp;
 
@@ -547,7 +563,8 @@ static inline int shm_security(struct kern_ipc_perm *ipcp, int shmflg)
 /*
  * Called with shm_ids.rw_mutex and ipcp locked.
  */
-static inline int shm_more_checks(struct kern_ipc_perm *ipcp,
+/*mklinux_akshay*/ //static inline
+int shm_more_checks(struct kern_ipc_perm *ipcp,
                                struct ipc_params *params)
 {
        struct shmid_kernel *shp;
@@ -565,6 +582,9 @@ SYSCALL_DEFINE3(shmget, key_t, key, size_t, size, int, shmflg)
        struct ipc_ops shm_ops;
        struct ipc_params shm_params;
 
+       /*mklinux_akshay*/
+       struct remoteipc_ops remoteshm_ops;
+       /*mklinux_akshay*/
        ns = current->nsproxy->ipc_ns;
 
        shm_ops.getnew = newseg;
@@ -575,7 +595,11 @@ SYSCALL_DEFINE3(shmget, key_t, key, size_t, size, int, shmflg)
        shm_params.flg = shmflg;
        shm_params.u.size = size;
 
-       return ipcget(ns, &shm_ids(ns), &shm_ops, &shm_params);
+       /*mklinux_akshay*/
+       remoteshm_ops.ipc_getipcid=remote_ipc_shm_getid;
+
+
+       return _ipcget(ns, &shm_ids(ns), &shm_ops, &remoteshm_ops, &shm_params);
 }
 
 static inline unsigned long copy_shmid_to_user(void __user *buf, struct shmid64_ds *in, int version)
@@ -1090,7 +1114,14 @@ SYSCALL_DEFINE3(shmat, int, shmid, char __user *, shmaddr, int, shmflg)
        unsigned long ret;
        long err;
 
+       if(isLocalKernel(shmid))
+       {
        err = do_shmat(shmid, shmaddr, shmflg, &ret);
+       }
+       else
+       {
+       err = remote_ipc_shm_shmat(shmid, shmaddr, shmflg, &ret);
+       }
        if (err)
                return err;
        force_successful_syscall_return();
diff --git a/ipc/shm_remote.c b/ipc/shm_remote.c
new file mode 100644 (file)
index 0000000..cbd1d05
--- /dev/null
@@ -0,0 +1,472 @@
+#include <linux/kernel.h>
+#include <linux/kthread.h>
+#include <linux/smp.h>
+#include <linux/slab.h>
+#include <linux/pcn_kmsg.h>
+#include <linux/string.h>
+#include <linux/wait.h>
+
+#include <linux/shm.h>
+#include "shm_remote.h"
+#include "util.h"
+#include <popcorn/pid.h>
+#include "remote_ipc_function.h"
+
+//to be removed
+#include <linux/file.h>
+#include <linux/mman.h>
+#include <linux/shmem_fs.h>
+#include <linux/security.h>
+#include <linux/hugetlb.h>
+
+static int _cpu = -1;
+static int wait = -1;
+static int errnum = 0;
+static unsigned long resptr;
+
+static DECLARE_WAIT_QUEUE_HEAD( wq);
+
+/*
+ ******************************************************** common functions*******************************************************************
+ */
+
+int reset_wait_shm() {
+       wait = -1;
+       resptr = 0;
+       return 0;
+}
+
+/*
+ ******************************************************** semget message functions*******************************************************************
+ */
+
+struct _remote_ipc_shmget_request {
+       struct pcn_kmsg_hdr header;
+       struct ipc_params _param;
+       char pad_string[44];
+}__attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_ipc_shmget_request _remote_ipc_shmget_request_t;
+
+struct _remote_ipc_shmget_response {
+       struct pcn_kmsg_hdr header;
+       int errno;
+       char pad_string[56];
+}__attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_ipc_shmget_response _remote_ipc_shmget_response_t;
+/*
+struct kern_ipc_perm *remote_ipc_findkey(struct ipc_ids *ids, key_t key) {
+       struct kern_ipc_perm *ipc;
+       int next_id;
+       int total;
+
+       for (total = 0, next_id = 0; total < ids->in_use; next_id++) {
+               ipc = idr_find(&ids->ipcs_idr, next_id);
+
+               if (ipc == NULL)
+                       continue;
+
+               if (ipc->key != key) {
+                       total++;
+                       continue;
+               }
+               return ipc;
+       }
+
+       return NULL;
+}
+*/
+int remote_shmget(struct ipc_params *params) {
+       struct ipc_namespace *ns;
+       struct ipc_ops shm_ops;
+
+       struct kern_ipc_perm *perm;
+       int err = 0;
+
+       ns = current->nsproxy->ipc_ns;
+
+       shm_ops.getnew = newseg;
+       shm_ops.associate = shm_security;
+       shm_ops.more_checks = shm_more_checks;
+
+       perm = remote_ipc_findkey(&shm_ids(ns), params->key);
+       if (perm != NULL) {
+               err = shm_more_checks(perm, params);
+               if (!err)
+                       err = ipc_check_perms(ns, perm, &shm_ops, params);
+
+               return GLOBAL_IPCID(err);
+       }
+       return 0;
+}
+
+static int handle_remote_ipc_shmget_response(struct pcn_kmsg_message* inc_msg) {
+       _remote_ipc_shmget_response_t* msg =
+                       (_remote_ipc_shmget_response_t*) inc_msg;
+
+       printk("%s: response --- errno{%d} \n", "handle_remote_ipc_shmget_response",
+                       msg->errno);
+
+       wait = 1;
+       errnum = msg->errno;
+       wake_up_interruptible(&wq);
+       printk("%s: response --- pid stored - wait{%d} \n",
+                       "handle_remote_pid_response", wait);
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+static int handle_remote_ipc_shmget_request(struct pcn_kmsg_message* inc_msg) {
+
+       _remote_ipc_shmget_request_t* msg = (_remote_ipc_shmget_request_t*) inc_msg;
+       _remote_ipc_shmget_response_t response;
+
+       int errno = 0;
+       printk("%s: request -- entered \n", "handle_remote_ipc_shmget_request");
+
+       // Finish constructing response
+       response.header.type = PCN_KMSG_TYPE_REMOTE_IPC_SHMGET_RESPONSE;
+       response.header.prio = PCN_KMSG_PRIO_NORMAL;
+
+       errno = remote_shmget(&(msg->_param));
+
+       response.errno = errno;
+
+       printk("%s: request -- errno %d \n", "handle_remote_ipc_shmget_request",
+                       response.errno);
+       // Send response
+       pcn_kmsg_send(msg->header.from_cpu, (struct pcn_kmsg_message*) (&response));
+
+       pcn_kmsg_free_msg(inc_msg);
+
+       return 0;
+}
+
+int send_shmget_req_to_remote(int KernelId, struct ipc_params *params) {
+
+       int res = 0;
+       _remote_ipc_shmget_request_t* request = kmalloc(
+                       sizeof(_remote_ipc_shmget_request_t),
+                       GFP_KERNEL);
+       // Build request
+       request->header.type = PCN_KMSG_TYPE_REMOTE_IPC_SHMGET_REQUEST;
+       request->header.prio = PCN_KMSG_PRIO_NORMAL;
+       request->_param = *params;
+       // Send response
+       res = pcn_kmsg_send(KernelId, (struct pcn_kmsg_message*) (request));
+       return res;
+}
+
+int remote_ipc_shm_getid(struct ipc_ids *ids, struct ipc_params *params) {
+
+       reset_wait_shm();
+       int ret = 0, i;
+       /*
+        * have to send message to remote kernels and fetch if the key is present
+        */
+       long *key_index;
+       int id = -1;
+
+       key_index = 1;
+
+       for (i = 0; i < NR_CPUS; i++) {
+
+               reset_wait_shm();
+               // Skip the current cpu
+               if (i == _cpu)
+                       continue;
+               id = send_shmget_req_to_remote(i, params);
+
+               if (!id) {
+                       printk("remote_ipc_shm_getid: go to sleep for kernel {%d}!!!!",i);
+                       wait_event_interruptible(wq, wait != -1);
+                       ret = errnum;
+                       if (ret != 0)
+                               break;
+               }
+       }
+
+       return ret;
+}
+
+/*
+ ******************************************************** shmat message functions*******************************************************************
+ */
+
+struct _remote_ipc_shmat_request {
+       struct pcn_kmsg_hdr header;
+       int _shmid;
+       char *_shmaddr;
+       int _shmflg;
+}__attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_ipc_shmat_request _remote_ipc_shmat_request_t;
+
+struct _remote_ipc_shmat_response {
+       struct pcn_kmsg_hdr header;
+       int errno;
+       ulong _raddr;
+       char pad_string[48];
+}__attribute__((packed)) __attribute__((aligned(64)));
+
+typedef struct _remote_ipc_shmat_response _remote_ipc_shmat_response_t;
+
+int remote_shmat(int shmid, char *shmaddr, int shmflg, ulong *raddr) {
+
+       //return do_shmat(shmid,shmaddr,shmflg,raddr);
+
+       struct shmid_kernel *shp;
+       unsigned long addr;
+       unsigned long size;
+       struct file * file;
+       int    err;
+       unsigned long flags;
+       unsigned long prot;
+       int acc_mode;
+       unsigned long user_addr;
+       struct ipc_namespace *ns;
+       struct shm_file_data *sfd;
+       struct path path;
+       fmode_t f_mode;
+
+       err = -EINVAL;
+       if (shmid < 0)
+               goto out;
+       else if ((addr = (ulong)shmaddr)) {
+               if (addr & (SHMLBA-1)) {
+                       if (shmflg & SHM_RND)
+                               addr &= ~(SHMLBA-1);       /* round down */
+                       else
+#ifndef __ARCH_FORCE_SHMLBA
+                      &n