diff --git a/.travis.yml b/.travis.yml index b1e586ee..933d31cb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,9 @@ matrix: before_install: - sudo apt-get update -qq - - sudo apt-get install -y autoconf automake pkg-config libdevmapper-dev libsqlite3-dev libvirt-dev qemu libvirt-bin -qq + - sudo apt-get install -y -qq autoconf automake pkg-config libdevmapper-dev libsqlite3-dev libvirt-dev qemu libvirt-bin linux-headers-$(uname -r) + - sudo mkdir -p /usr/include/linux + - sudo cp /usr/src/linux-headers-$(uname -r)/include/uapi/linux/vm_sockets.h /usr/include/linux - cd `mktemp -d` - wget https://git.fedorahosted.org/cgit/lvm2.git/snapshot/lvm2-2_02_131.tar.xz - tar xf lvm2-2_02_131.tar.xz diff --git a/build/Dockerfile b/build/Dockerfile index 223bd0ff..2b94aa44 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -3,7 +3,7 @@ MAINTAINER Hyper Developers RUN yum install -y patch gcc ncurses-devel make openssl-devel bc perl -ENV KERNEL_VERSION 4.4.28 +ENV KERNEL_VERSION 4.9.11 ENV LOCALVERSION -hyper ENV KERNEL_RELEASE ${KERNEL_VERSION}${LOCALVERSION} diff --git a/build/kernel b/build/kernel index ec9e4dc1..993688e7 100644 Binary files a/build/kernel and b/build/kernel differ diff --git a/build/kernel_config b/build/kernel_config index 4e37afc6..0a14b5f6 100644 --- a/build/kernel_config +++ b/build/kernel_config @@ -1,18 +1,20 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 4.4.28 Kernel Configuration +# Linux/x86 4.9.11 Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y CONFIG_X86=y CONFIG_INSTRUCTION_DECODER=y -CONFIG_PERF_EVENTS_INTEL_UNCORE=y CONFIG_OUTPUT_FORMAT="elf64-x86-64" CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" CONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y -CONFIG_HAVE_LATENCYTOP_SUPPORT=y CONFIG_MMU=y +CONFIG_ARCH_MMAP_RND_BITS_MIN=28 +CONFIG_ARCH_MMAP_RND_BITS_MAX=32 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 CONFIG_NEED_DMA_MAP_STATE=y CONFIG_NEED_SG_DMA_LENGTH=y CONFIG_GENERIC_ISA_DMA=y @@ -36,13 +38,14 @@ CONFIG_AUDIT_ARCH=y CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y CONFIG_X86_64_SMP=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_ARCH_SUPPORTS_UPROBES=y CONFIG_FIX_EARLYCON_MEM=y +CONFIG_DEBUG_RODATA=y CONFIG_PGTABLE_LEVELS=4 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_EXTABLE_SORT=y +CONFIG_THREAD_INFO_IN_TASK=y # # General setup @@ -139,32 +142,32 @@ CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_LOG_BUF_SHIFT=18 CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 +CONFIG_NMI_LOG_BUF_SHIFT=13 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y CONFIG_ARCH_SUPPORTS_INT128=y # CONFIG_NUMA_BALANCING is not set CONFIG_CGROUPS=y -CONFIG_CGROUP_DEBUG=y -CONFIG_CGROUP_FREEZER=y -CONFIG_CGROUP_PIDS=y -CONFIG_CGROUP_DEVICE=y -CONFIG_CPUSETS=y -CONFIG_PROC_PID_CPUSET=y -CONFIG_CGROUP_CPUACCT=y CONFIG_PAGE_COUNTER=y CONFIG_MEMCG=y CONFIG_MEMCG_SWAP=y CONFIG_MEMCG_SWAP_ENABLED=y -CONFIG_MEMCG_KMEM=y -CONFIG_CGROUP_PERF=y +CONFIG_BLK_CGROUP=y +CONFIG_DEBUG_BLK_CGROUP=y +CONFIG_CGROUP_WRITEBACK=y CONFIG_CGROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y CONFIG_CFS_BANDWIDTH=y CONFIG_RT_GROUP_SCHED=y -CONFIG_BLK_CGROUP=y -CONFIG_DEBUG_BLK_CGROUP=y -CONFIG_CGROUP_WRITEBACK=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CPUSETS=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_DEBUG=y # CONFIG_CHECKPOINT_RESTORE is not set CONFIG_NAMESPACES=y CONFIG_UTS_NS=y @@ -183,6 +186,7 @@ CONFIG_RD_GZIP=y # CONFIG_RD_XZ is not set # CONFIG_RD_LZO is not set # CONFIG_RD_LZ4 is not set +CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_SYSCTL=y CONFIG_ANON_INODES=y @@ -197,7 +201,10 @@ CONFIG_SGETMASK_SYSCALL=y CONFIG_SYSFS_SYSCALL=y # CONFIG_SYSCTL_SYSCALL is not set CONFIG_KALLSYMS=y +CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y +CONFIG_KALLSYMS_BASE_RELATIVE=y CONFIG_PRINTK=y +CONFIG_PRINTK_NMI=y CONFIG_BUG=y CONFIG_ELF_CORE=y CONFIG_PCSPKR_PLATFORM=y @@ -225,6 +232,7 @@ CONFIG_VM_EVENT_COUNTERS=y # CONFIG_COMPAT_BRK is not set CONFIG_SLAB=y # CONFIG_SLUB is not set +# CONFIG_SLAB_FREELIST_RANDOM is not set # CONFIG_SYSTEM_DATA_VERIFICATION is not set # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y @@ -241,8 +249,8 @@ CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y CONFIG_HAVE_OPTPROBES=y CONFIG_HAVE_KPROBES_ON_FTRACE=y +CONFIG_HAVE_NMI=y CONFIG_HAVE_ARCH_TRACEHOOK=y -CONFIG_HAVE_DMA_ATTRS=y CONFIG_HAVE_DMA_CONTIGUOUS=y CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y @@ -262,11 +270,14 @@ CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP_FILTER=y +CONFIG_HAVE_GCC_PLUGINS=y +# CONFIG_GCC_PLUGINS is not set CONFIG_HAVE_CC_STACKPROTECTOR=y # CONFIG_CC_STACKPROTECTOR is not set CONFIG_CC_STACKPROTECTOR_NONE=y # CONFIG_CC_STACKPROTECTOR_REGULAR is not set # CONFIG_CC_STACKPROTECTOR_STRONG is not set +CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y CONFIG_HAVE_CONTEXT_TRACKING=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y @@ -276,9 +287,20 @@ CONFIG_HAVE_ARCH_SOFT_DIRTY=y CONFIG_MODULES_USE_ELF_RELA=y CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +CONFIG_HAVE_ARCH_MMAP_RND_BITS=y +CONFIG_HAVE_EXIT_THREAD=y +CONFIG_ARCH_MMAP_RND_BITS=28 +CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y +CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8 CONFIG_HAVE_COPY_THREAD_TLS=y +CONFIG_HAVE_STACK_VALIDATION=y +# CONFIG_HAVE_ARCH_HASH is not set +# CONFIG_ISA_BUS_API is not set CONFIG_OLD_SIGSUSPEND3=y CONFIG_COMPAT_OLD_SIGACTION=y +# CONFIG_CPU_NO_EFFICIENT_FFS is not set +CONFIG_HAVE_ARCH_VMAP_STACK=y +CONFIG_VMAP_STACK=y # # GCOV-based kernel profiling @@ -296,6 +318,7 @@ CONFIG_MODVERSIONS=y # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set # CONFIG_MODULE_COMPRESS is not set +# CONFIG_TRIM_UNUSED_KSYMS is not set CONFIG_MODULES_TREE_LOOKUP=y CONFIG_BLOCK=y CONFIG_BLK_DEV_BSG=y @@ -311,6 +334,7 @@ CONFIG_BLK_DEV_INTEGRITY=y CONFIG_MSDOS_PARTITION=y CONFIG_EFI_PARTITION=y CONFIG_BLOCK_COMPAT=y +CONFIG_BLK_MQ_PCI=y # # IO Schedulers @@ -344,8 +368,10 @@ CONFIG_FREEZER=y CONFIG_ZONE_DMA=y CONFIG_SMP=y CONFIG_X86_FEATURE_NAMES=y +CONFIG_X86_FAST_FEATURE_TESTS=y # CONFIG_X86_X2APIC is not set CONFIG_X86_MPPARSE=y +# CONFIG_GOLDFISH is not set # CONFIG_X86_EXTENDED_PLATFORM is not set # CONFIG_X86_INTEL_LPSS is not set # CONFIG_X86_AMD_PLATFORM_DEVICE is not set @@ -396,6 +422,14 @@ CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y # CONFIG_X86_MCE is not set + +# +# Performance monitoring +# +CONFIG_PERF_EVENTS_INTEL_UNCORE=y +CONFIG_PERF_EVENTS_INTEL_RAPL=y +CONFIG_PERF_EVENTS_INTEL_CSTATE=y +# CONFIG_PERF_EVENTS_AMD_POWER is not set # CONFIG_VM86 is not set CONFIG_X86_16BIT=y CONFIG_X86_ESPFIX64=y @@ -434,6 +468,7 @@ CONFIG_ARCH_DISCARD_MEMBLOCK=y # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set CONFIG_MEMORY_HOTPLUG=y CONFIG_MEMORY_HOTPLUG_SPARSE=y +# CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE is not set # CONFIG_MEMORY_HOTREMOVE is not set CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y @@ -441,7 +476,6 @@ CONFIG_MEMORY_BALLOON=y # 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_MMU_NOTIFIER=y @@ -458,6 +492,8 @@ CONFIG_GENERIC_EARLY_IOREMAP=y CONFIG_ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT=y # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set # CONFIG_IDLE_PAGE_TRACKING is not set +CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y +CONFIG_ARCH_HAS_PKEYS=y # CONFIG_X86_PMEM_LEGACY is not set # CONFIG_X86_CHECK_BIOS_CORRUPTION is not set CONFIG_X86_RESERVE_LOW=64 @@ -468,6 +504,7 @@ CONFIG_ARCH_USES_PG_UNCACHED=y CONFIG_ARCH_RANDOM=y CONFIG_X86_SMAP=y # CONFIG_X86_INTEL_MPX is not set +CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y # CONFIG_EFI is not set CONFIG_SECCOMP=y # CONFIG_HZ_100 is not set @@ -524,6 +561,7 @@ CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y CONFIG_ACPI_FAN=y # CONFIG_ACPI_DOCK is not set CONFIG_ACPI_CPU_FREQ_PSS=y +CONFIG_ACPI_PROCESSOR_CSTATE=y CONFIG_ACPI_PROCESSOR_IDLE=y CONFIG_ACPI_PROCESSOR=y CONFIG_ACPI_HOTPLUG_CPU=y @@ -532,7 +570,8 @@ CONFIG_ACPI_THERMAL=y CONFIG_ACPI_NUMA=y CONFIG_ACPI_CUSTOM_DSDT_FILE="" # CONFIG_ACPI_CUSTOM_DSDT is not set -# CONFIG_ACPI_INITRD_TABLE_OVERRIDE is not set +CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y +CONFIG_ACPI_TABLE_UPGRADE=y # CONFIG_ACPI_DEBUG is not set # CONFIG_ACPI_PCI_SLOT is not set CONFIG_X86_PM_TIMER=y @@ -546,7 +585,9 @@ CONFIG_ACPI_HOTPLUG_IOAPIC=y CONFIG_HAVE_ACPI_APEI=y CONFIG_HAVE_ACPI_APEI_NMI=y # CONFIG_ACPI_APEI is not set +# CONFIG_DPTF_POWER is not set # CONFIG_PMIC_OPREGION is not set +# CONFIG_ACPI_CONFIGFS is not set # CONFIG_SFI is not set # @@ -585,6 +626,8 @@ CONFIG_PCIEASPM_DEFAULT=y # CONFIG_PCIEASPM_POWERSAVE is not set # CONFIG_PCIEASPM_PERFORMANCE is not set CONFIG_PCIE_PME=y +# CONFIG_PCIE_DPC is not set +# CONFIG_PCIE_PTM is not set CONFIG_PCI_BUS_ADDR_T_64BIT=y CONFIG_PCI_MSI=y CONFIG_PCI_MSI_IRQ_DOMAIN=y @@ -597,13 +640,6 @@ CONFIG_PCI_IOV=y # CONFIG_PCI_PRI is not set # CONFIG_PCI_PASID is not set CONFIG_PCI_LABEL=y - -# -# PCI host controller drivers -# -CONFIG_ISA_DMA_API=y -CONFIG_AMD_NB=y -# CONFIG_PCCARD is not set CONFIG_HOTPLUG_PCI=y CONFIG_HOTPLUG_PCI_ACPI=y # CONFIG_HOTPLUG_PCI_ACPI_IBM is not set @@ -611,6 +647,15 @@ CONFIG_HOTPLUG_PCI_CPCI=y # CONFIG_HOTPLUG_PCI_CPCI_ZT5550 is not set # CONFIG_HOTPLUG_PCI_CPCI_GENERIC is not set # CONFIG_HOTPLUG_PCI_SHPC is not set + +# +# PCI host controller drivers +# +# CONFIG_PCIE_DW_PLAT is not set +# CONFIG_VMD is not set +CONFIG_ISA_DMA_API=y +CONFIG_AMD_NB=y +# CONFIG_PCCARD is not set # CONFIG_RAPIDIO is not set # CONFIG_X86_SYSFB is not set @@ -619,6 +664,7 @@ CONFIG_HOTPLUG_PCI_CPCI=y # CONFIG_BINFMT_ELF=y CONFIG_COMPAT_BINFMT_ELF=y +CONFIG_ELFCORE=y # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set CONFIG_BINFMT_SCRIPT=y # CONFIG_HAVE_AOUT is not set @@ -635,6 +681,7 @@ CONFIG_X86_DEV_DMA_OPS=y CONFIG_PMC_ATOM=y CONFIG_NET=y CONFIG_NET_INGRESS=y +CONFIG_NET_EGRESS=y # # Networking options @@ -683,10 +730,10 @@ 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=m CONFIG_INET_TCP_DIAG=m CONFIG_INET_UDP_DIAG=m +# CONFIG_INET_DIAG_DESTROY is not set CONFIG_TCP_CONG_ADVANCED=y CONFIG_TCP_CONG_BIC=m CONFIG_TCP_CONG_CUBIC=y @@ -695,6 +742,7 @@ CONFIG_TCP_CONG_HTCP=m CONFIG_TCP_CONG_HSTCP=m CONFIG_TCP_CONG_HYBLA=m CONFIG_TCP_CONG_VEGAS=m +# CONFIG_TCP_CONG_NV is not set CONFIG_TCP_CONG_SCALABLE=m CONFIG_TCP_CONG_LP=m CONFIG_TCP_CONG_VENO=m @@ -702,6 +750,7 @@ CONFIG_TCP_CONG_YEAH=m CONFIG_TCP_CONG_ILLINOIS=m CONFIG_TCP_CONG_DCTCP=m CONFIG_TCP_CONG_CDG=m +# CONFIG_TCP_CONG_BBR is not set CONFIG_DEFAULT_CUBIC=y # CONFIG_DEFAULT_RENO is not set CONFIG_DEFAULT_TCP_CONG="cubic" @@ -727,6 +776,8 @@ CONFIG_IPV6_SIT_6RD=y CONFIG_IPV6_NDISC_NODETYPE=y CONFIG_IPV6_TUNNEL=m CONFIG_IPV6_GRE=m +CONFIG_IPV6_FOU=m +# CONFIG_IPV6_FOU_TUNNEL is not set CONFIG_IPV6_MULTIPLE_TABLES=y CONFIG_IPV6_SUBTREES=y CONFIG_IPV6_MROUTE=y @@ -794,9 +845,10 @@ CONFIG_NF_TABLES_INET=m CONFIG_NF_TABLES_NETDEV=m CONFIG_NFT_EXTHDR=m CONFIG_NFT_META=m +# CONFIG_NFT_NUMGEN is not set CONFIG_NFT_CT=m -CONFIG_NFT_RBTREE=m -CONFIG_NFT_HASH=m +# CONFIG_NFT_SET_RBTREE is not set +# CONFIG_NFT_SET_HASH is not set CONFIG_NFT_COUNTER=m CONFIG_NFT_LOG=m CONFIG_NFT_LIMIT=m @@ -804,9 +856,14 @@ CONFIG_NFT_MASQ=m CONFIG_NFT_REDIR=m CONFIG_NFT_NAT=m CONFIG_NFT_QUEUE=m +# CONFIG_NFT_QUOTA is not set CONFIG_NFT_REJECT=m CONFIG_NFT_REJECT_INET=m CONFIG_NFT_COMPAT=m +CONFIG_NFT_HASH=m +# CONFIG_NF_DUP_NETDEV is not set +# CONFIG_NFT_DUP_NETDEV is not set +# CONFIG_NFT_FWD_NETDEV is not set CONFIG_NETFILTER_XTABLES=m # @@ -958,7 +1015,6 @@ CONFIG_IP_VS_PE_SIP=m # CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_CONNTRACK_IPV4=m -# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set CONFIG_NF_TABLES_IPV4=m CONFIG_NFT_CHAIN_ROUTE_IPV4=m CONFIG_NFT_REJECT_IPV4=m @@ -1076,6 +1132,7 @@ CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set CONFIG_SCTP_COOKIE_HMAC_MD5=y CONFIG_SCTP_COOKIE_HMAC_SHA1=y +CONFIG_INET_SCTP_DIAG=m # CONFIG_RDS is not set # CONFIG_TIPC is not set CONFIG_ATM=m @@ -1160,6 +1217,7 @@ CONFIG_NET_CLS_FLOW=m CONFIG_NET_CLS_CGROUP=y CONFIG_NET_CLS_BPF=m CONFIG_NET_CLS_FLOWER=m +# CONFIG_NET_CLS_MATCHALL is not set CONFIG_NET_EMATCH=y CONFIG_NET_EMATCH_STACK=32 CONFIG_NET_EMATCH_CMP=m @@ -1182,6 +1240,9 @@ CONFIG_NET_ACT_CSUM=m CONFIG_NET_ACT_VLAN=m CONFIG_NET_ACT_BPF=m CONFIG_NET_ACT_CONNMARK=m +# CONFIG_NET_ACT_SKBMOD is not set +# CONFIG_NET_ACT_IFE is not set +# CONFIG_NET_ACT_TUNNEL_KEY is not set CONFIG_NET_CLS_IND=y CONFIG_NET_SCH_FIFO=y CONFIG_DCB=y @@ -1190,7 +1251,8 @@ CONFIG_DNS_RESOLVER=m CONFIG_OPENVSWITCH=m CONFIG_OPENVSWITCH_GRE=m CONFIG_VSOCKETS=m -CONFIG_NETLINK_MMAP=y +CONFIG_VIRTIO_VSOCKETS=m +CONFIG_VIRTIO_VSOCKETS_COMMON=m CONFIG_NETLINK_DIAG=m CONFIG_MPLS=y CONFIG_NET_MPLS_GSO=m @@ -1199,9 +1261,11 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_HSR=m # CONFIG_NET_SWITCHDEV is not set # CONFIG_NET_L3_MASTER_DEV is not set +# CONFIG_NET_NCSI is not set CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_XPS=y +CONFIG_SOCK_CGROUP_DATA=y CONFIG_CGROUP_NET_PRIO=y CONFIG_CGROUP_NET_CLASSID=y CONFIG_NET_RX_BUSY_POLL=y @@ -1218,6 +1282,8 @@ CONFIG_NET_FLOW_LIMIT=y # CONFIG_IRDA is not set # CONFIG_BT is not set # CONFIG_AF_RXRPC is not set +# CONFIG_AF_KCM is not set +# CONFIG_STREAM_PARSER is not set CONFIG_FIB_RULES=y # CONFIG_WIRELESS is not set # CONFIG_WIMAX is not set @@ -1229,7 +1295,10 @@ CONFIG_NET_9P_VIRTIO=y # CONFIG_CEPH_LIB is not set # CONFIG_NFC is not set CONFIG_LWTUNNEL=y -CONFIG_HAVE_BPF_JIT=y +CONFIG_DST_CACHE=y +# CONFIG_NET_DEVLINK is not set +CONFIG_MAY_USE_DEVLINK=y +CONFIG_HAVE_EBPF_JIT=y # # Device Drivers @@ -1322,6 +1391,9 @@ CONFIG_EEPROM_93CX6=y # # Altera FPGA firmware download module # +# CONFIG_INTEL_MEI is not set +# CONFIG_INTEL_MEI_ME is not set +# CONFIG_INTEL_MEI_TXE is not set # CONFIG_VMWARE_VMCI is not set # @@ -1334,6 +1406,11 @@ CONFIG_EEPROM_93CX6=y # # CONFIG_SCIF_BUS is not set +# +# VOP Bus Driver +# +# CONFIG_VOP_BUS is not set + # # Intel MIC Host Driver # @@ -1349,11 +1426,14 @@ CONFIG_EEPROM_93CX6=y # # Intel MIC Coprocessor State Management (COSM) Drivers # + +# +# VOP Driver +# # CONFIG_GENWQE is not set # CONFIG_ECHO is not set # CONFIG_CXL_BASE is not set -# CONFIG_CXL_KERNEL_API is not set -# CONFIG_CXL_EEH is not set +# CONFIG_CXL_AFU_DRIVER_OPS is not set CONFIG_HAVE_IDE=y # CONFIG_IDE is not set @@ -1417,6 +1497,7 @@ CONFIG_SCSI_LOWLEVEL=y # CONFIG_MEGARAID_SAS is not set # CONFIG_SCSI_MPT3SAS is not set # CONFIG_SCSI_MPT2SAS is not set +# CONFIG_SCSI_SMARTPQI is not set # CONFIG_SCSI_UFSHCD is not set # CONFIG_SCSI_HPTIOP is not set # CONFIG_SCSI_BUSLOGIC is not set @@ -1463,14 +1544,13 @@ CONFIG_BLK_DEV_DM=m # CONFIG_DM_MQ_DEFAULT is not set CONFIG_DM_DEBUG=y CONFIG_DM_BUFIO=m +# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set CONFIG_DM_BIO_PRISON=m CONFIG_DM_PERSISTENT_DATA=m -# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set CONFIG_DM_CRYPT=m CONFIG_DM_SNAPSHOT=m CONFIG_DM_THIN_PROVISIONING=m CONFIG_DM_CACHE=m -CONFIG_DM_CACHE_MQ=m CONFIG_DM_CACHE_SMQ=m CONFIG_DM_CACHE_CLEANER=m CONFIG_DM_ERA=m @@ -1485,6 +1565,7 @@ CONFIG_DM_DELAY=m CONFIG_DM_UEVENT=y # CONFIG_DM_FLAKEY is not set CONFIG_DM_VERITY=m +# CONFIG_DM_VERITY_FEC is not set CONFIG_DM_SWITCH=m # CONFIG_DM_LOG_WRITES is not set # CONFIG_TARGET_CORE is not set @@ -1505,9 +1586,10 @@ CONFIG_NET_CORE=y # CONFIG_IFB is not set # CONFIG_NET_TEAM is not set # CONFIG_MACVLAN is not set -# CONFIG_IPVLAN is not set # CONFIG_VXLAN is not set # CONFIG_GENEVE is not set +# CONFIG_GTP is not set +# CONFIG_MACSEC is not set # CONFIG_NETCONSOLE is not set # CONFIG_NETPOLL is not set # CONFIG_NET_POLL_CONTROLLER is not set @@ -1536,16 +1618,10 @@ CONFIG_ATM_DRIVERS=y # # CAIF transport drivers # -CONFIG_VHOST_NET=m -CONFIG_VHOST_RING=m -CONFIG_VHOST=m -# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set # # Distributed Switch Architecture drivers # -# CONFIG_NET_DSA_MV88E6XXX is not set -# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set # CONFIG_ETHERNET is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set @@ -1596,6 +1672,7 @@ CONFIG_INPUT=y # CONFIG_INPUT_TABLET is not set # CONFIG_INPUT_TOUCHSCREEN is not set # CONFIG_INPUT_MISC is not set +# CONFIG_RMI4_CORE is not set # # Hardware I/O ports @@ -1615,7 +1692,6 @@ CONFIG_VT_CONSOLE_SLEEP=y CONFIG_HW_CONSOLE=y CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_UNIX98_PTYS=y -CONFIG_DEVPTS_MULTIPLE_INSTANCES=y # CONFIG_LEGACY_PTYS is not set # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_NOZOMI is not set @@ -1631,6 +1707,7 @@ CONFIG_SERIAL_EARLYCON=y CONFIG_SERIAL_8250=y # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set CONFIG_SERIAL_8250_PNP=y +# CONFIG_SERIAL_8250_FINTEK is not set CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_PCI=y CONFIG_SERIAL_8250_NR_UARTS=32 @@ -1643,8 +1720,9 @@ CONFIG_SERIAL_8250_RSA=y # CONFIG_SERIAL_8250_FSL is not set # CONFIG_SERIAL_8250_DW is not set # CONFIG_SERIAL_8250_RT288X is not set -# CONFIG_SERIAL_8250_FINTEK is not set -# CONFIG_SERIAL_8250_MID is not set +CONFIG_SERIAL_8250_LPSS=y +CONFIG_SERIAL_8250_MID=y +# CONFIG_SERIAL_8250_MOXA is not set # # Non-8250 serial port support @@ -1703,11 +1781,11 @@ CONFIG_DEVPORT=y # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. # -CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y # CONFIG_GPIOLIB is not set # CONFIG_W1 is not set -# CONFIG_POWER_SUPPLY is not set # CONFIG_POWER_AVS is not set +# CONFIG_POWER_RESET is not set +# CONFIG_POWER_SUPPLY is not set # CONFIG_HWMON is not set CONFIG_THERMAL=y # CONFIG_THERMAL_WRITABLE_TRIPS is not set @@ -1723,6 +1801,10 @@ CONFIG_THERMAL_GOV_STEP_WISE=y # CONFIG_THERMAL_EMULATION is not set # CONFIG_INTEL_POWERCLAMP is not set # CONFIG_INTEL_SOC_DTS_THERMAL is not set + +# +# ACPI INT340X thermal drivers +# # CONFIG_INT340X_THERMAL is not set # CONFIG_INTEL_PCH_THERMAL is not set # CONFIG_WATCHDOG is not set @@ -1744,6 +1826,7 @@ CONFIG_BCMA_POSSIBLE=y # # CONFIG_MFD_CORE is not set # CONFIG_MFD_CROS_EC is not set +# CONFIG_MFD_EXYNOS_LPASS is not set # CONFIG_HTC_PASIC3 is not set # CONFIG_LPC_ICH is not set # CONFIG_LPC_SCH is not set @@ -1772,6 +1855,10 @@ CONFIG_VGA_ARB_MAX_GPUS=16 # CONFIG_VGA_SWITCHEROO is not set # CONFIG_DRM is not set +# +# ACP (Audio CoProcessor) Configuration +# + # # Frame buffer Devices # @@ -1793,6 +1880,11 @@ CONFIG_DUMMY_CONSOLE_ROWS=25 # HID support # # CONFIG_HID is not set + +# +# Intel ISH HID support +# +# CONFIG_INTEL_ISH_HID is not set CONFIG_USB_OHCI_LITTLE_ENDIAN=y # CONFIG_USB_SUPPORT is not set # CONFIG_UWB is not set @@ -1805,6 +1897,7 @@ CONFIG_EDAC_ATOMIC_SCRUB=y CONFIG_EDAC_SUPPORT=y # CONFIG_EDAC is not set CONFIG_RTC_LIB=y +CONFIG_RTC_MC146818_LIB=y CONFIG_RTC_CLASS=y CONFIG_RTC_HCTOSYS=y CONFIG_RTC_HCTOSYS_DEVICE="rtc0" @@ -1821,10 +1914,18 @@ CONFIG_RTC_INTF_DEV=y # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set # CONFIG_RTC_DRV_TEST is not set +# +# I2C RTC drivers +# + # # SPI RTC drivers # +# +# SPI and I2C RTC drivers +# + # # Platform RTC drivers # @@ -1852,6 +1953,11 @@ CONFIG_RTC_DRV_CMOS=y # HID Sensor RTC drivers # # CONFIG_DMADEVICES is not set + +# +# DMABUF options +# +# CONFIG_SYNC_FILE is not set # CONFIG_AUXDISPLAY is not set # CONFIG_UIO is not set CONFIG_IRQ_BYPASS_MANAGER=m @@ -1924,6 +2030,10 @@ CONFIG_CLKBLD_I8253=y # # SOC (System On Chip) specific Drivers # + +# +# Broadcom SoC drivers +# # CONFIG_SUNXI_SRAM is not set # CONFIG_SOC_TI is not set # CONFIG_PM_DEVFREQ is not set @@ -1933,6 +2043,7 @@ CONFIG_CLKBLD_I8253=y # CONFIG_NTB is not set # CONFIG_VME_BUS is not set # CONFIG_PWM is not set +CONFIG_ARM_GIC_MAX_NR=1 # CONFIG_IPACK_BUS is not set # CONFIG_RESET_CONTROLLER is not set # CONFIG_FMC is not set @@ -1960,8 +2071,6 @@ CONFIG_CLKBLD_I8253=y # CONFIG_LIBNVDIMM is not set # CONFIG_NVMEM is not set # CONFIG_STM is not set -# CONFIG_STM_DUMMY is not set -# CONFIG_STM_SOURCE_CONSOLE is not set # CONFIG_INTEL_TH is not set # @@ -1980,12 +2089,14 @@ CONFIG_FIRMWARE_MEMMAP=y # CONFIG_DMI_SYSFS is not set CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y # CONFIG_ISCSI_IBFT_FIND is not set +# CONFIG_FW_CFG_SYSFS is not set # CONFIG_GOOGLE_FIRMWARE is not set # # File systems # CONFIG_DCACHE_WORD_ACCESS=y +CONFIG_FS_IOMAP=y # CONFIG_EXT2_FS is not set # CONFIG_EXT3_FS is not set CONFIG_EXT4_FS=y @@ -2012,7 +2123,10 @@ CONFIG_XFS_POSIX_ACL=y # CONFIG_FS_DAX is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y +# CONFIG_EXPORTFS_BLOCK_OPS is not set CONFIG_FILE_LOCKING=y +CONFIG_MANDATORY_FILE_LOCKING=y +# CONFIG_FS_ENCRYPTION is not set CONFIG_FSNOTIFY=y CONFIG_DNOTIFY=y CONFIG_INOTIFY_USER=y @@ -2056,6 +2170,7 @@ CONFIG_TMPFS=y CONFIG_TMPFS_XATTR=y # CONFIG_HUGETLBFS is not set # CONFIG_HUGETLB_PAGE is not set +CONFIG_ARCH_HAS_GIGANTIC_PAGE=y # CONFIG_CONFIGFS_FS is not set # CONFIG_MISC_FILESYSTEMS is not set CONFIG_NETWORK_FILESYSTEMS=y @@ -2161,6 +2276,7 @@ CONFIG_FRAME_WARN=2048 CONFIG_SECTION_MISMATCH_WARN_ONLY=y CONFIG_ARCH_WANT_FRAME_POINTERS=y # CONFIG_FRAME_POINTER is not set +# CONFIG_STACK_VALIDATION is not set # CONFIG_MAGIC_SYSRQ is not set # CONFIG_DEBUG_KERNEL is not set @@ -2168,10 +2284,13 @@ CONFIG_ARCH_WANT_FRAME_POINTERS=y # Memory Debugging # # CONFIG_PAGE_EXTENSION is not set +# CONFIG_PAGE_POISONING is not set CONFIG_HAVE_DEBUG_KMEMLEAK=y CONFIG_DEBUG_MEMORY_INIT=y CONFIG_HAVE_DEBUG_STACKOVERFLOW=y CONFIG_HAVE_ARCH_KMEMCHECK=y +CONFIG_ARCH_HAS_KCOV=y +# CONFIG_KCOV is not set # # Debug Lockups and Hangs @@ -2195,11 +2314,9 @@ CONFIG_DEBUG_BUGVERBOSE=y # CONFIG_SPARSE_RCU_POINTER is not set # CONFIG_TORTURE_TEST is not set CONFIG_RCU_CPU_STALL_TIMEOUT=60 -CONFIG_ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS=y CONFIG_USER_STACKTRACE_SUPPORT=y CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y -CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y CONFIG_HAVE_DYNAMIC_FTRACE=y CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y @@ -2218,7 +2335,10 @@ CONFIG_TRACING_SUPPORT=y # CONFIG_TEST_STRING_HELPERS is not set # CONFIG_TEST_KSTRTOX is not set # CONFIG_TEST_PRINTF is not set +# CONFIG_TEST_BITMAP is not set +# CONFIG_TEST_UUID is not set # CONFIG_TEST_RHASHTABLE is not set +# CONFIG_TEST_HASH is not set # CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set # CONFIG_DMA_API_DEBUG is not set # CONFIG_TEST_LKM is not set @@ -2230,11 +2350,17 @@ CONFIG_TRACING_SUPPORT=y # CONFIG_TEST_STATIC_KEYS is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y +CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y +# CONFIG_ARCH_WANTS_UBSAN_NO_NULL is not set +# CONFIG_UBSAN is not set +CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y # 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_X86_PTDUMP_CORE is not set +CONFIG_DEBUG_RODATA_TEST=y +# CONFIG_DEBUG_WX is not set # CONFIG_DEBUG_SET_MODULE_RONX is not set CONFIG_DOUBLEFAULT=y # CONFIG_IOMMU_STRESS is not set @@ -2258,9 +2384,13 @@ CONFIG_KEYS=y # CONFIG_PERSISTENT_KEYRINGS is not set # CONFIG_BIG_KEYS is not set # CONFIG_ENCRYPTED_KEYS is not set +# CONFIG_KEY_DH_OPERATIONS is not set # CONFIG_SECURITY_DMESG_RESTRICT is not set # CONFIG_SECURITY is not set # CONFIG_SECURITYFS is not set +CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y +CONFIG_HAVE_ARCH_HARDENED_USERCOPY=y +# CONFIG_HARDENED_USERCOPY is not set CONFIG_DEFAULT_SECURITY_DAC=y CONFIG_DEFAULT_SECURITY="" CONFIG_XOR_BLOCKS=m @@ -2285,9 +2415,11 @@ CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_RNG=y CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_RNG_DEFAULT=m -CONFIG_CRYPTO_PCOMP2=y CONFIG_CRYPTO_AKCIPHER2=y +CONFIG_CRYPTO_KPP2=y # CONFIG_CRYPTO_RSA is not set +# CONFIG_CRYPTO_DH is not set +# CONFIG_CRYPTO_ECDH is not set CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y # CONFIG_CRYPTO_USER is not set @@ -2309,7 +2441,7 @@ CONFIG_CRYPTO_CCM=m # CONFIG_CRYPTO_GCM is not set # CONFIG_CRYPTO_CHACHA20POLY1305 is not set CONFIG_CRYPTO_SEQIV=m -# CONFIG_CRYPTO_ECHAINIV is not set +CONFIG_CRYPTO_ECHAINIV=m # # Block modes @@ -2355,8 +2487,11 @@ CONFIG_CRYPTO_SHA1=m # CONFIG_CRYPTO_SHA256_SSSE3 is not set # CONFIG_CRYPTO_SHA512_SSSE3 is not set # CONFIG_CRYPTO_SHA1_MB is not set +# CONFIG_CRYPTO_SHA256_MB is not set +# CONFIG_CRYPTO_SHA512_MB is not set CONFIG_CRYPTO_SHA256=y # CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_SHA3 is not set # CONFIG_CRYPTO_TGR192 is not set # CONFIG_CRYPTO_WP512 is not set # CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL is not set @@ -2402,7 +2537,6 @@ CONFIG_CRYPTO_DES=m # Compression # CONFIG_CRYPTO_DEFLATE=m -# CONFIG_CRYPTO_ZLIB is not set # CONFIG_CRYPTO_LZO is not set # CONFIG_CRYPTO_842 is not set # CONFIG_CRYPTO_LZ4 is not set @@ -2428,13 +2562,11 @@ CONFIG_CRYPTO_JITTERENTROPY=y # # Certificates for signature checking # -# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_HAVE_KVM=y CONFIG_HAVE_KVM_IRQCHIP=y CONFIG_HAVE_KVM_IRQFD=y CONFIG_HAVE_KVM_IRQ_ROUTING=y CONFIG_HAVE_KVM_EVENTFD=y -CONFIG_KVM_APIC_ARCHITECTURE=y CONFIG_KVM_MMIO=y CONFIG_KVM_ASYNC_PF=y CONFIG_HAVE_KVM_MSI=y @@ -2447,6 +2579,10 @@ CONFIG_VIRTUALIZATION=y CONFIG_KVM=m CONFIG_KVM_INTEL=m CONFIG_KVM_AMD=m +CONFIG_VHOST_NET=m +# CONFIG_VHOST_VSOCK is not set +CONFIG_VHOST=m +# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set # CONFIG_BINARY_PRINTF is not set # @@ -2496,11 +2632,13 @@ CONFIG_HAS_DMA=y CONFIG_CPU_RMAP=y CONFIG_DQL=y CONFIG_NLATTR=y -CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y # CONFIG_CORDIC is not set # CONFIG_DDR is not set +# CONFIG_IRQ_POLL is not set CONFIG_OID_REGISTRY=m # CONFIG_SG_SPLIT is not set +CONFIG_SG_POOL=y CONFIG_ARCH_HAS_SG_CHAIN=y CONFIG_ARCH_HAS_PMEM_API=y CONFIG_ARCH_HAS_MMIO_FLUSH=y +CONFIG_SBITMAP=y diff --git a/build/modules.tar b/build/modules.tar index f42a5308..4337a6ec 100644 Binary files a/build/modules.tar and b/build/modules.tar differ diff --git a/configure.ac b/configure.ac index 5b0ff532..8fa1c4ef 100644 --- a/configure.ac +++ b/configure.ac @@ -73,6 +73,13 @@ AS_IF([test "x$enable_daemon" = "xno"],[SYSTEMD_SYSTEMUNIT=no]) AC_SUBST(SYSTEMD_SYSTEMUNIT) AM_CONDITIONAL(SYSTEMD, test "x${SYSTEMD_SYSTEMUNIT}" != "xno" ) +AC_CHECK_FILE([/usr/include/linux/vm_sockets.h], + [have_vsock=yes], [have_vsock=no]) +if test "x$have_vsock" == "xyes"; then + AC_DEFINE_UNQUOTED([HAVE_VSOCK], 1, [enable vm socket support]) +fi +AM_CONDITIONAL([HAVE_VSOCK], [test "x$have_vsock" == "xyes"]) + AC_CONFIG_FILES([ Makefile src/Makefile @@ -88,6 +95,8 @@ AC_MSG_RESULT([ with-vbox: ${with_vbox} with-aarch64: ${with_aarch64} + vsock-support: ${have_vsock} + compiler: ${CC} cflags: ${CFLAGS} suid cflags: ${SUID_CFLAGS} diff --git a/src/Makefile.am b/src/Makefile.am index e7f52081..b5689081 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,3 +1,6 @@ AM_CFLAGS = -Wall -Werror bin_PROGRAMS=hyperstart hyperstart_SOURCES=init.c jsmn.c net.c util.c parse.c parson.c container.c exec.c event.c portmapping.c +if HAVE_VSOCK +hyperstart_SOURCES+=vsock.c +endif diff --git a/src/api.h b/src/api.h index 041047a6..15cdd22c 100644 --- a/src/api.h +++ b/src/api.h @@ -58,4 +58,10 @@ enum { #define STREAM_HEADER_SIZE 12 #define STREAM_HEADER_LENGTH_OFFSET 8 +/* + * vsock listening ports + */ +#define HYPER_VSOCK_CTL_PORT 2718 +#define HYPER_VSOCK_MSG_PORT 2719 + #endif /* _HYPERSTART_API_H_ */ diff --git a/src/event.c b/src/event.c index 20f02b24..8de52036 100644 --- a/src/event.c +++ b/src/event.c @@ -54,11 +54,11 @@ int hyper_init_event(struct hyper_event *he, struct hyper_event_ops *ops, void * int hyper_add_event(int efd, struct hyper_event *he, int flag) { struct epoll_event event = { - .events = flag, + .events = flag | EPOLLRDHUP, .data.ptr = he, }; - he->flag = flag; + he->flag = flag | EPOLLRDHUP; if (hyper_setfd_nonblock(he->fd) < 0) { perror("set fd nonblock failed"); return -1; @@ -77,14 +77,14 @@ int hyper_add_event(int efd, struct hyper_event *he, int flag) int hyper_modify_event(int efd, struct hyper_event *he, int flag) { struct epoll_event event = { - .events = flag, + .events = flag | EPOLLRDHUP, .data.ptr = he, }; if (he->flag == flag) return 0; - he->flag = flag; + he->flag = flag | EPOLLRDHUP; fprintf(stdout, "%s modify event fd %d, %p, event %d\n", __func__, he->fd, he, flag); @@ -191,7 +191,7 @@ int hyper_handle_event(int efd, struct epoll_event *event) return he->ops->write(he, efd, event->events); } - if ((event->events & EPOLLHUP) || (event->events & EPOLLERR)) { + if ((event->events & EPOLLHUP) || (event->events & EPOLLERR) || (event->events & EPOLLRDHUP)) { fprintf(stdout, "%s event EPOLLHUP or EPOLLERR, he %p, fd %d, %x\n", __func__, he, he->fd, event->events); if (he->ops->hup) diff --git a/src/hyper.h b/src/hyper.h index be2b6875..167eafd6 100644 --- a/src/hyper.h +++ b/src/hyper.h @@ -59,6 +59,8 @@ struct hyper_epoll { int efd; struct hyper_event ctl; struct hyper_event tty; + struct hyper_event vsock_ctl_listener; + struct hyper_event vsock_msg_listener; }; static inline int hyper_symlink(char *oldpath, char *newpath) diff --git a/src/init.c b/src/init.c index f12c6ab8..1d5f562a 100644 --- a/src/init.c +++ b/src/init.c @@ -30,6 +30,7 @@ #include "parse.h" #include "container.h" #include "syscall.h" +#include "vsock.h" static struct hyper_pod global_pod = { .containers = LIST_HEAD_INIT(global_pod.containers), @@ -888,25 +889,33 @@ static void hyper_cmd_online_cpu_mem() } } -static int hyper_setup_ctl_channel(char *name) +static int hyper_ctl_send_ready(int fd) { uint8_t buf[8]; - int ret = hyper_open_channel(name, 0); - if (ret < 0) - return ret; fprintf(stdout, "send ready message\n"); hyper_set_be32(buf, READY); hyper_set_be32(buf + 4, 8); - if (hyper_send_data_block(ret, buf, 8) < 0) { + if (hyper_send_data_block(fd, buf, 8) < 0) { perror("send READY MESSAGE failed\n"); - goto out; + return -1; } + return 0; +} - return ret; -out: - close(ret); - return -1; +static int hyper_setup_ctl_channel(char *name) +{ + int fd; + + fd = hyper_open_channel(name, 0); + if (fd < 0) + return fd; + if (hyper_ctl_send_ready(fd) < 0) { + close(fd); + return -1; + } + + return fd; } static int hyper_setup_tty_channel(char *name) @@ -918,6 +927,19 @@ static int hyper_setup_tty_channel(char *name) return ret; } +static int hyper_setup_vsock_channel(void) +{ + hyper_epoll.vsock_ctl_listener.fd = hyper_create_vsock_listener(HYPER_VSOCK_CTL_PORT); + if (hyper_epoll.vsock_ctl_listener.fd < 0) + return -1; + + hyper_epoll.vsock_msg_listener.fd = hyper_create_vsock_listener(HYPER_VSOCK_MSG_PORT); + if (hyper_epoll.vsock_msg_listener.fd < 0) + return -1; + + return 0; +} + static int hyper_ttyfd_handle(struct hyper_event *de, uint32_t len) { struct hyper_buf *rbuf = &de->rbuf; @@ -997,8 +1019,10 @@ static ssize_t hyper_channel_read(struct hyper_event *he, int efd, int len, int ssize_t size; size = nonblock_read(he->fd, buf->data + buf->get, len); - if (size < 0) + if (size < 0) { + fprintf(stderr, "%s failed with %d\n", __func__, (int)size); goto out; + } // check if peer is dissapeared if ((size == 0) && (events & EPOLLHUP)) { @@ -1022,7 +1046,18 @@ static int hyper_ttyfd_read(struct hyper_event *he, int efd, int events) if (buf->get < STREAM_HEADER_SIZE) { size = hyper_channel_read(he, efd, STREAM_HEADER_SIZE - buf->get, events); if (size < 0) { + /* vsock returns -ENOTCONN upon reading closed socket... */ + if (size == -ENOTCONN) { + fprintf(stderr, "ttyfd read failed on %p fd %d with err %d\n", he, he->fd, size); + hyper_modify_event(efd, he, he->flag & ~EPOLLIN); + size = 0; + } return size; + } else if (size == 0) { + /* remote closes connection */ + fprintf(stderr, "remote closes connection on %p fd %d\n", he, he->fd); + hyper_modify_event(efd, he, he->flag & ~EPOLLIN); + return 0; } buf->get += size; @@ -1170,7 +1205,18 @@ static int hyper_ctlfd_read(struct hyper_event *he, int efd, int events) if (buf->get < CONTROL_HEADER_SIZE) { size = hyper_channel_read(he, efd, CONTROL_HEADER_SIZE - buf->get, events); if (size < 0) { + /* vsock returns -ENOTCONN upon reading closed socket... */ + if (size == -ENOTCONN) { + fprintf(stderr, "ttyfd read failed on %p fd %d with err %d\n", he, he->fd, size); + hyper_modify_event(efd, he, he->flag & ~EPOLLIN); + size = 0; + } return size; + } else if (size == 0) { + /* remote closes connection */ + fprintf(stderr, "remote closes connection on %p fd %d\n", he, he->fd); + hyper_modify_event(efd, he, he->flag & ~EPOLLIN); + return 0; } if (size > 0) { uint8_t *data = malloc(4); @@ -1248,6 +1294,48 @@ static struct hyper_event_ops hyper_ttyfd_ops = { .wbuf_size = 10240, }; +static struct hyper_event_ops hyper_vsock_ctlfd_ops = { + .read = hyper_ctlfd_read, + .write = hyper_event_write, + .hup = hyper_event_hup, + .rbuf_size = 65536, + .wbuf_size = 65536, +}; + +static struct hyper_event_ops hyper_vsock_ttyfd_ops = { + .read = hyper_ttyfd_read, + .write = hyper_event_write, + .hup = hyper_event_hup, + .rbuf_size = 65536, + .wbuf_size = 65536, +}; + +static int hyper_vsock_ctl_accept(struct hyper_event *he, int efd, int events) +{ + if (hyper_vsock_accept(he, efd, &hyper_epoll.ctl, &hyper_vsock_ctlfd_ops) < 0) + return -1; + + if (hyper_ctl_send_ready(hyper_epoll.ctl.fd)) { + hyper_event_hup(&hyper_epoll.ctl, efd); + return -1; + } + + return 0; +} + +static int hyper_vsock_msg_accept(struct hyper_event *he, int efd, int events) +{ + return hyper_vsock_accept(he, efd, &hyper_epoll.tty, &hyper_vsock_ttyfd_ops); +} + +static struct hyper_event_ops hyper_vsock_ctl_listen_ops = { + .read = hyper_vsock_ctl_accept, +}; + +static struct hyper_event_ops hyper_vsock_msg_listen_ops = { + .read = hyper_vsock_msg_accept, +}; + static int hyper_loop(void) { int i, n; @@ -1306,18 +1394,33 @@ static int hyper_loop(void) return -1; } - fprintf(stdout, "hyper_init_event hyper ctlfd event %p, ops %p, fd %d\n", - &hyper_epoll.ctl, &hyper_ctlfd_ops, hyper_epoll.ctl.fd); - if (hyper_init_event(&hyper_epoll.ctl, &hyper_ctlfd_ops, pod) < 0 || - hyper_add_event(hyper_epoll.efd, &hyper_epoll.ctl, EPOLLIN) < 0) { - return -1; - } + if (hyper_epoll.vsock_ctl_listener.fd > 0) { + fprintf(stdout, "hyper_init_event hyper vsock control channel listener event %p, ops %p, fd %d\n", + &hyper_epoll.vsock_ctl_listener, &hyper_vsock_ctl_listen_ops, hyper_epoll.vsock_ctl_listener.fd); + if (hyper_init_event(&hyper_epoll.vsock_ctl_listener, &hyper_vsock_ctl_listen_ops, pod) < 0 || + hyper_add_event(hyper_epoll.efd, &hyper_epoll.vsock_ctl_listener, EPOLLIN) < 0) { + return -1; + } + fprintf(stdout, "hyper_init_event hyper vsock message channel listener event %p, ops %p, fd %d\n", + &hyper_epoll.vsock_msg_listener, &hyper_vsock_msg_listen_ops, hyper_epoll.vsock_msg_listener.fd); + if (hyper_init_event(&hyper_epoll.vsock_msg_listener, &hyper_vsock_msg_listen_ops, pod) < 0 || + hyper_add_event(hyper_epoll.efd, &hyper_epoll.vsock_msg_listener, EPOLLIN) < 0) { + return -1; + } + } else { + fprintf(stdout, "hyper_init_event hyper ctlfd event %p, ops %p, fd %d\n", + &hyper_epoll.ctl, &hyper_ctlfd_ops, hyper_epoll.ctl.fd); + if (hyper_init_event(&hyper_epoll.ctl, &hyper_ctlfd_ops, pod) < 0 || + hyper_add_event(hyper_epoll.efd, &hyper_epoll.ctl, EPOLLIN) < 0) { + return -1; + } - fprintf(stdout, "hyper_init_event hyper ttyfd event %p, ops %p, fd %d\n", - &hyper_epoll.tty, &hyper_ttyfd_ops, hyper_epoll.tty.fd); - if (hyper_init_event(&hyper_epoll.tty, &hyper_ttyfd_ops, pod) < 0 || - hyper_add_event(hyper_epoll.efd, &hyper_epoll.tty, EPOLLIN) < 0) { - return -1; + fprintf(stdout, "hyper_init_event hyper ttyfd event %p, ops %p, fd %d\n", + &hyper_epoll.tty, &hyper_ttyfd_ops, hyper_epoll.tty.fd); + if (hyper_init_event(&hyper_epoll.tty, &hyper_ttyfd_ops, pod) < 0 || + hyper_add_event(hyper_epoll.efd, &hyper_epoll.tty, EPOLLIN) < 0) { + return -1; + } } events = calloc(MAXEVENTS, sizeof(*events)); @@ -1395,7 +1498,7 @@ static int hyper_setup_init_process(void) int main(int argc, char *argv[]) { char *binary_name, *cmdline, *ctl_serial, *tty_serial; - bool is_init; + bool is_init, has_vsock = false; binary_name = basename(argv[0]); is_init = strncmp(binary_name, "init", 5) == 0; @@ -1418,26 +1521,45 @@ int main(int argc, char *argv[]) #else ctl_serial = "sh.hyper.channel.0"; tty_serial = "sh.hyper.channel.1"; + if (probe_vsock_device() <= 0) { + fprintf(stderr, "cannot find vsock device\n"); + } else if (hyper_cmd("modprobe vmw_vsock_virtio_transport") < 0) { + fprintf(stderr, "fail to load vmw_vsock_virtio_transport.ko\n"); + } else { + has_vsock = true; + } #endif - hyper_epoll.ctl.fd = hyper_setup_ctl_channel(ctl_serial); - if (hyper_epoll.ctl.fd < 0) { - fprintf(stderr, "fail to setup hyper control serial port\n"); - goto out1; - } + if (has_vsock) { + if (hyper_setup_vsock_channel() < 0) { + fprintf(stderr, "fail to setup hyper vsock listener\n"); + goto out; + } + } else { + hyper_epoll.ctl.fd = hyper_setup_ctl_channel(ctl_serial); + if (hyper_epoll.ctl.fd < 0) { + fprintf(stderr, "fail to setup hyper control serial port\n"); + goto out; + } - hyper_epoll.tty.fd = hyper_setup_tty_channel(tty_serial); - if (hyper_epoll.tty.fd < 0) { - fprintf(stderr, "fail to setup hyper tty serial port\n"); - goto out2; + hyper_epoll.tty.fd = hyper_setup_tty_channel(tty_serial); + if (hyper_epoll.tty.fd < 0) { + fprintf(stderr, "fail to setup hyper tty serial port\n"); + goto out; + } } hyper_loop(); - close(hyper_epoll.tty.fd); -out2: - close(hyper_epoll.ctl.fd); -out1: +out: + if (hyper_epoll.vsock_ctl_listener.fd > 0) + close(hyper_epoll.vsock_ctl_listener.fd); + if (hyper_epoll.vsock_msg_listener.fd > 0) + close(hyper_epoll.vsock_msg_listener.fd); + if (hyper_epoll.tty.fd > 0) + close(hyper_epoll.tty.fd); + if (hyper_epoll.ctl.fd > 0) + close(hyper_epoll.ctl.fd); free(cmdline); return 0; diff --git a/src/util.c b/src/util.c index 7e9cc2f9..1042b4a2 100644 --- a/src/util.c +++ b/src/util.c @@ -699,10 +699,12 @@ ssize_t nonblock_read(int fd, void *buf, size_t count) { ssize_t len = 0, ret = 0; + errno = 0; while (len < count) { ret = read(fd, buf + len, count - len); if (ret <= 0) { if (errno == EINTR) { + errno = 0; continue; } if (errno == EAGAIN) { @@ -714,7 +716,7 @@ ssize_t nonblock_read(int fd, void *buf, size_t count) len += ret; } - return len > 0 ? len : ret; + return len > 0 ? len : -errno; } int hyper_mount_nfs(char *server, char *mountpoint) diff --git a/src/vsock.c b/src/vsock.c new file mode 100644 index 00000000..852413df --- /dev/null +++ b/src/vsock.c @@ -0,0 +1,163 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "vsock.h" + +/* for pre-vsock kernels. */ +#ifndef VIRTIO_ID_VSOCK + #define VIRTIO_ID_VSOCK 0x13 +#endif +#ifndef AF_VSOCK + #define AF_VSOCK 40 +#endif + +/* include/linux/pci_ids.h. It can be read from file pci.ids but why the dependency? */ +#ifndef PCI_SUBVENDOR_ID_REDHAT_QUMRANET + #define PCI_SUBVENDOR_ID_REDHAT_QUMRANET 0x1af4 +#endif +static int check_vsock_config(const char *conf) +{ + unsigned char config[64]; + unsigned int vendor, id; + int fd, size; + + fd = open(conf, O_RDONLY); + if (fd < 0) { + perror("failed to open pci dev config"); + return -1; + } + size = read(fd, config, 64); + close(fd); + if (size != 64) { + fprintf(stderr, "short read of %s\n", conf); + return -1; + } + + /* vendor and ID are both 2 bytes */ + vendor = config[PCI_SUBSYSTEM_VENDOR_ID] | (config[PCI_SUBSYSTEM_VENDOR_ID+1] << 8); + id = config[PCI_SUBSYSTEM_ID] | (config[PCI_SUBSYSTEM_ID+1] << 8); + fprintf(stdout, "found vendor: %x ID: %x\n", vendor, id); + + if (vendor == PCI_SUBVENDOR_ID_REDHAT_QUMRANET && id == VIRTIO_ID_VSOCK) { + return 1; + } + + return 0; +} + +const char *pci_device_dir = "/sys/bus/pci/devices/"; +int probe_vsock_device(void) +{ + struct dirent **list; + char config_file[512]; + int i, num, found = 0; + + num = scandir(pci_device_dir, &list, NULL, NULL); + if (num < 0) { + perror("scan pci device dir failed"); + return -1; + } + + for (i = 0; i < num; i++) { + if (found == 0 && + strcmp(list[i]->d_name, ".") != 0 && strcmp(list[i]->d_name, "..") != 0) { + fprintf(stdout, "probe %s/%s\n", pci_device_dir, list[i]->d_name); + sprintf(config_file, "%s/%s/config", pci_device_dir, list[i]->d_name); + if (check_vsock_config(config_file) > 0) { + found = 1; + } + } + free(list[i]); + } + + free(list); + return found; +} + +int hyper_create_vsock_listener(unsigned short port) +{ + int fd; + struct sockaddr_vm sa_listen = { + .svm_family = AF_VSOCK, + .svm_cid = VMADDR_CID_ANY, + .svm_port = port, + }; + + fd = socket(AF_VSOCK, SOCK_STREAM, 0); + if (fd < 0) { + perror("fail to create vsock socket"); + return -1; + } + + if (bind(fd, (struct sockaddr*)&sa_listen, sizeof(sa_listen)) < 0) { + perror("fail to bind vsock"); + close(fd); + return -1; + } + + if (listen(fd, SOMAXCONN) < 0) { + perror("fail to listen vsock"); + close(fd); + return -1; + } + + return fd; +} + +int hyper_vsock_accept(struct hyper_event *he, int efd, + struct hyper_event *ne, struct hyper_event_ops *ops) +{ + int ret = 0; + + while(1) { + struct sockaddr_vm sa_client; + socklen_t sa_len = sizeof(sa_client); + int fd; + + fd = accept(he->fd, (struct sockaddr*)&sa_client, &sa_len); + if (fd < 0) { + if (errno == EAGAIN || errno == EWOULDBLOCK) { + /* We have processed all incoming connections. */ + break; + } else { + perror ("fail to accept vsock connection"); + ret = -1; + break; + } + } + fprintf(stdout, "vsock connection from cid %u port %u\n", + sa_client.svm_cid, sa_client.svm_port); + + /* only accept host vsock connections */ + if (sa_client.svm_cid != VMADDR_CID_HOST) { + close(fd); + continue; + } + + /* oh, we already have it! */ + if (ne->fd > 0) { + close(fd); + continue; + } + + ne->fd = fd; + if (hyper_init_event(ne, ops, he->ptr) < 0 || + hyper_add_event(efd, ne, EPOLLIN) < 0) { + hyper_reset_event(ne); + return -1; + } + } + + return ret; +} diff --git a/src/vsock.h b/src/vsock.h new file mode 100644 index 00000000..77036b79 --- /dev/null +++ b/src/vsock.h @@ -0,0 +1,29 @@ +#ifndef _VSOCK_H_ +#define _VSOCK_H_ + +#include "event.h" +#include "../config.h" + +#ifdef HAVE_VSOCK +int probe_vsock_device(void); +int hyper_create_vsock_listener(unsigned short port); +int hyper_vsock_accept(struct hyper_event *he, int efd, + struct hyper_event *ne, struct hyper_event_ops *ops); +#else /*HAVE_VSOCK*/ +static int probe_vsock_device(void) +{ + return -1; +} +static int hyper_create_vsock_listener(unsigned short port) +{ + return -1; +} +static int hyper_vsock_accept(struct hyper_event *he, int efd, + struct hyper_event *ne, struct hyper_event_ops *ops) +{ + return -1; +} + +#endif /*HAVE_VSOCK*/ + +#endif