diff options
author | jc_gargma <jc_gargma@iserlohn-fortress.net> | 2019-01-25 01:29:59 -0800 |
---|---|---|
committer | jc_gargma <jc_gargma@iserlohn-fortress.net> | 2019-01-25 01:29:59 -0800 |
commit | d86f8a7be5e7a3b59bd5338158cbcf3a1736cbae (patch) | |
tree | 87f66f53add17109f1f99c87e2ad41217504d1fe | |
parent | Updated to 4.19.8.a (diff) | |
download | linux-libre-hardened-ck-d86f8a7be5e7a3b59bd5338158cbcf3a1736cbae.tar.xz |
Updated to 4.20.4.a
-rw-r--r-- | PKGBUILD | 49 | ||||
-rw-r--r-- | config.x86_64 | 132 | ||||
-rw-r--r-- | patch-4.20-ck1-jcmod1.patch (renamed from patch-4.19-ck1-jcmod2.patch) | 712 |
3 files changed, 542 insertions, 351 deletions
@@ -17,16 +17,16 @@ # Parabola version disables modules for components that lack free firmware pkgbase=linux-libre-hardened-ck -_majver=4.19 -_minver=8 +_majver=4.20 +_minver=4 _pkgver=${_majver}.${_minver} _gnumajver=${_majver}-gnu _gnupkgver=${_pkgver}-gnu _hardenedver=a _NUMAdisable=y _ckpatchversion=1 -_ckpatchname="patch-${_majver}-ck${_ckpatchversion}" -_jcpatchversion=2 +_ckpatch="patch-${_majver}-ck${_ckpatchversion}" +_jcpatchversion=1 _gcc_more_v='20180509' _srcname=linux-${_majver} pkgver=${_pkgver}.${_hardenedver} @@ -40,9 +40,9 @@ conflicts=('linux-hardened-ck') options=('!strip') source=(https://linux-libre.fsfla.org/pub/linux-libre/releases/${_gnumajver}/linux-libre-${_gnumajver}.tar.xz{,.sign} https://linux-libre.fsfla.org/pub/linux-libre/releases/${_gnupkgver}/patch-${_gnumajver}-${_gnupkgver}.xz{,.sign} - https://github.com/anthraxx/linux-hardened/releases/download/${_pkgver}.${_hardenedver}/linux-hardened-${_pkgver}.${_hardenedver}.patch{,.sig} + https://github.com/anthraxx/linux-hardened/releases/download/${pkgver}/linux-hardened-${pkgver}.patch{,.sig} patch-${_majver}-ck${_ckpatchversion}-jcmod${_jcpatchversion}.patch - #http://ck.kolivas.org/patches/4.0/${_majver}/${_majver}-ck${_ckpatchversion}/${_ckpatchname}.xz + #http://ck.kolivas.org/patches/4.0/${_majver}/${_majver}-ck${_ckpatchversion}/${_ckpatch}.xz enable_additional_cpu_optimizations-$_gcc_more_v.tar.gz::https://github.com/graysky2/kernel_gcc_patch/archive/$_gcc_more_v.tar.gz ath9k-regdom-hack.patch config.x86_64 # the main kernel config files @@ -50,16 +50,16 @@ source=(https://linux-libre.fsfla.org/pub/linux-libre/releases/${_gnumajver}/lin 90-linux.hook # pacman hook for initramfs regeneration linux.preset # standard config files for mkinitcpio ramdisk ) -sha256sums=('d06d7a0d59a96ab04e7af63244627d1d5aa2d99db84f81f559f0f8e7e58f94c8' +sha256sums=('b80d5c0076dfa11ee8af63ad0b4795569d098b77020d2fffc797b892ba455a1f' 'SKIP' - 'ac7fd6ede3613a024cbecb9aa421dd22d0ea7a6c201280c6eb22c812fbae1067' + '1779591b0385789d7f63f1ad4a21c82871d138e5412fca79465280c1366d7650' 'SKIP' - '6e36f941f608d6cca54f81efc661ea91eb6fc69c58d0dbbbe57d455bb5803f2b' + 'b795a107eceb2fd4ab51f7a7f06f700b6f6827cca277a2d8f94be28eeeb924b4' 'SKIP' - 'c7e090301b6fb3d6f320aeaee6747077ed616ccaf3d22d0d5937d5ea5116ffd8' + '90ab0d864452726a7b43f49debeb32ab4dc5d0ec65cb8b3f64c940a2469ab650' '226e30068ea0fecdb22f337391385701996bfbdba37cdcf0f1dbf55f1080542d' 'e7ebf050c22bcec0028c0b3c79fd6d3913b0370ecc6a23dfe78ce475630cf503' - 'd3aba22671ca554c92406e30620a2ce3fb6e25297208e7a358d4cb7564f528d8' + '506d2baba3e1d8b00056153225b9ca31f3f06f0bcbf2f538160a450fc4760750' 'ae2e95db94ef7176207c690224169594d49445e04249d2499e9d2fbc117a0b21' '75f99f5239e03238f88d1a834c50043ec32b1dc568f2cc291b07d04718483919' 'ad6344badc91ad0630caacde83f7f9b97276f80d26a20619a87952be65492c65') @@ -80,7 +80,7 @@ prepare() { patch -Np1 < ../patch-${_gnumajver}-${_gnupkgver} # Hotfixes - # msg2 "Applying hotfixes" +# msg2 "Applying hotfixes" # linux hardened patch msg2 "Applying hardened patch" @@ -114,26 +114,13 @@ prepare() { cp ../config.x86_64 .config #fi - ### Optionally disable NUMA for 64-bit kernels only - # (x86 kernels do not support NUMA) - if [ -n "$_NUMAdisable" ]; then - msg "Disabling NUMA from kernel config..." - sed -i -e 's/CONFIG_NUMA=y/# CONFIG_NUMA is not set/' \ - -i -e '/CONFIG_AMD_NUMA=y/d' \ - -i -e '/CONFIG_X86_64_ACPI_NUMA=y/d' \ - -i -e '/CONFIG_NODES_SPAN_OTHER_NODES=y/d' \ - -i -e '/# CONFIG_NUMA_EMU is not set/d' \ - -i -e '/CONFIG_NODES_SHIFT=5/d' \ - -i -e '/CONFIG_NEED_MULTIPLE_NODES=y/d' \ - -i -e '/# CONFIG_MOVABLE_NODE is not set/d' \ - -i -e '/CONFIG_USE_PERCPU_NUMA_NODE_ID=y/d' \ - -i -e '/CONFIG_ACPI_NUMA=y/d' ./.config - fi - make olddefconfig make menuconfig + # Remove sublevel when no sublevel exists +# sed -i '/SUBLEVEL = 0/d' Makefile + make -s kernelrelease > ../version # workaround for make -s kernelrelease not applying @@ -173,7 +160,7 @@ _package() { cd $_srcname msg2 "Installing boot image..." - install -Dm644 "$(make -s image_name)" "$pkgdir/boot/vmlinuz-$pkgbase" + install -Dm600 "$(make -s image_name)" "$pkgdir/boot/vmlinuz-$pkgbase" msg2 "Installing modules..." mkdir -p "$modulesdir" @@ -227,7 +214,9 @@ _package-headers() { cp -t "$builddir" -a scripts # add objtool for external module building and enabled VALIDATION_STACK option - install -Dt "$builddir/tools/objtool" tools/objtool/objtool + if [[ -e tools/objtool/objtool ]]; then + install -Dt "$builddir/tools/objtool" tools/objtool/objtool + fi # add xfs and shmem for aufs building mkdir -p "$builddir"/{fs/xfs,mm} diff --git a/config.x86_64 b/config.x86_64 index 9db1e52..ef7a71c 100644 --- a/config.x86_64 +++ b/config.x86_64 @@ -1,10 +1,10 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 4.19.6 Kernel Configuration +# Linux/x86 4.20.4 Kernel Configuration # # -# Compiler: gcc (GCC) 8.2.1 20180831 +# Compiler: gcc (GCC) 8.2.1 20181127 # CONFIG_CC_IS_GCC=y CONFIG_GCC_VERSION=80201 @@ -70,6 +70,7 @@ CONFIG_SPARSE_IRQ=y # CONFIG_GENERIC_IRQ_DEBUGFS is not set CONFIG_CLOCKSOURCE_WATCHDOG=y CONFIG_ARCH_CLOCKSOURCE_DATA=y +CONFIG_ARCH_CLOCKSOURCE_INIT=y CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GENERIC_CLOCKEVENTS=y @@ -98,12 +99,15 @@ CONFIG_PREEMPT_COUNT=y CONFIG_VIRT_CPU_ACCOUNTING=y CONFIG_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_SCHED_AVG_IRQ=y CONFIG_BSD_PROCESS_ACCT=y CONFIG_BSD_PROCESS_ACCT_V3=y CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y CONFIG_TASK_XACCT=y CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_PSI=y +CONFIG_PSI_DEFAULT_DISABLED=y CONFIG_CPU_ISOLATION=y # @@ -304,6 +308,7 @@ CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y CONFIG_SCHED_OMIT_FRAME_POINTER=y CONFIG_HYPERVISOR_GUEST=y CONFIG_PARAVIRT=y +CONFIG_PARAVIRT_XXL=y # CONFIG_PARAVIRT_DEBUG is not set CONFIG_PARAVIRT_SPINLOCKS=y # CONFIG_QUEUED_LOCK_STAT is not set @@ -322,7 +327,6 @@ CONFIG_KVM_GUEST=y CONFIG_PARAVIRT_TIME_ACCOUNTING=y CONFIG_PARAVIRT_CLOCK=y CONFIG_JAILHOUSE_GUEST=y -CONFIG_NO_BOOTMEM=y # CONFIG_MK8 is not set # CONFIG_MK8SSE3 is not set # CONFIG_MK10 is not set @@ -360,6 +364,7 @@ CONFIG_X86_DEBUGCTLMSR=y CONFIG_PROCESSOR_SELECT=y CONFIG_CPU_SUP_INTEL=y CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_HYGON=y CONFIG_CPU_SUP_CENTAUR=y CONFIG_HPET_TIMER=y CONFIG_HPET_EMULATE_RTC=y @@ -409,6 +414,7 @@ CONFIG_X86_MSR=m CONFIG_X86_CPUID=m # CONFIG_X86_5LEVEL is not set CONFIG_X86_DIRECT_GBPAGES=y +# CONFIG_X86_CPA_STATISTICS is not set CONFIG_ARCH_HAS_MEM_ENCRYPT=y CONFIG_AMD_MEM_ENCRYPT=y CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT=y @@ -561,6 +567,7 @@ CONFIG_ACPI_APEI_ERST_DEBUG=m CONFIG_DPTF_POWER=m CONFIG_ACPI_WATCHDOG=y CONFIG_ACPI_EXTLOG=m +CONFIG_ACPI_ADXL=y CONFIG_PMIC_OPREGION=y CONFIG_CRC_PMIC_OPREGION=y CONFIG_XPOWER_PMIC_OPREGION=y @@ -657,6 +664,7 @@ CONFIG_PCI_LOCKLESS_CONFIG=y CONFIG_PCI_IOV=y CONFIG_PCI_PRI=y CONFIG_PCI_PASID=y +CONFIG_PCI_P2PDMA=y CONFIG_PCI_LABEL=y CONFIG_PCI_HYPERV=m CONFIG_HOTPLUG_PCI=y @@ -763,8 +771,6 @@ CONFIG_HAVE_GENERIC_GUP=y CONFIG_EDD=m # CONFIG_EDD_OFF is not set CONFIG_FIRMWARE_MEMMAP=y -CONFIG_DELL_RBU=m -CONFIG_DCDBAS=m CONFIG_DMIID=y CONFIG_DMI_SYSFS=m CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y @@ -851,6 +857,7 @@ CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_RSEQ=y +CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y CONFIG_HAVE_CLK=y CONFIG_HAVE_HW_BREAKPOINT=y CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y @@ -860,6 +867,7 @@ CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y CONFIG_HAVE_PERF_REGS=y CONFIG_HAVE_PERF_USER_STACK_DUMP=y CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y CONFIG_HAVE_RCU_TABLE_FREE=y CONFIG_HAVE_RCU_TABLE_INVALIDATE=y CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y @@ -870,6 +878,7 @@ 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_ARCH_STACKLEAK=y CONFIG_HAVE_STACKPROTECTOR=y CONFIG_CC_HAS_STACKPROTECTOR_NONE=y CONFIG_STACKPROTECTOR=y @@ -923,7 +932,7 @@ CONFIG_MODULES=y CONFIG_MODULE_FORCE_LOAD=y CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_FORCE_UNLOAD=y -CONFIG_MODVERSIONS=y +# CONFIG_MODVERSIONS is not set CONFIG_MODULE_SRCVERSION_ALL=y CONFIG_MODULE_SIG=y # CONFIG_MODULE_SIG_FORCE is not set @@ -983,6 +992,7 @@ CONFIG_BLOCK_COMPAT=y CONFIG_BLK_MQ_PCI=y CONFIG_BLK_MQ_VIRTIO=y CONFIG_BLK_MQ_RDMA=y +CONFIG_BLK_PM=y # # IO Schedulers @@ -1023,7 +1033,7 @@ CONFIG_COMPAT_BINFMT_ELF=y CONFIG_ELFCORE=y CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y CONFIG_BINFMT_SCRIPT=y -CONFIG_BINFMT_MISC=m +CONFIG_BINFMT_MISC=y CONFIG_COREDUMP=y # @@ -1037,7 +1047,6 @@ CONFIG_HAVE_MEMORY_PRESENT=y CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_SPARSEMEM_VMEMMAP=y -CONFIG_HAVE_MEMBLOCK=y CONFIG_HAVE_MEMBLOCK_NODE_MAP=y CONFIG_ARCH_DISCARD_MEMBLOCK=y CONFIG_MEMORY_ISOLATION=y @@ -1299,6 +1308,7 @@ CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m CONFIG_NFT_FIB=m CONFIG_NFT_FIB_INET=m +CONFIG_NFT_XFRM=m CONFIG_NFT_SOCKET=m CONFIG_NFT_OSF=m CONFIG_NFT_TPROXY=m @@ -1467,7 +1477,6 @@ CONFIG_IP_VS_PE_SIP=m # IP: Netfilter Configuration # CONFIG_NF_DEFRAG_IPV4=m -CONFIG_NF_CONNTRACK_IPV4=m CONFIG_NF_SOCKET_IPV4=m CONFIG_NF_TPROXY_IPV4=m CONFIG_NF_TABLES_IPV4=y @@ -1515,7 +1524,6 @@ CONFIG_IP_NF_ARP_MANGLE=m # # IPv6: Netfilter Configuration # -CONFIG_NF_CONNTRACK_IPV6=m CONFIG_NF_SOCKET_IPV6=m CONFIG_NF_TPROXY_IPV6=m CONFIG_NF_TABLES_IPV6=y @@ -1635,6 +1643,7 @@ CONFIG_NET_DSA_TAG_BRCM=y CONFIG_NET_DSA_TAG_BRCM_PREPEND=y CONFIG_NET_DSA_TAG_DSA=y CONFIG_NET_DSA_TAG_EDSA=y +CONFIG_NET_DSA_TAG_GSWIP=y CONFIG_NET_DSA_TAG_KSZ=y CONFIG_NET_DSA_TAG_LAN9303=y CONFIG_NET_DSA_TAG_MTK=y @@ -1688,6 +1697,7 @@ CONFIG_NET_SCH_TEQL=m CONFIG_NET_SCH_TBF=m CONFIG_NET_SCH_CBS=m CONFIG_NET_SCH_ETF=m +CONFIG_NET_SCH_TAPRIO=m CONFIG_NET_SCH_GRED=m CONFIG_NET_SCH_DSMARK=m CONFIG_NET_SCH_NETEM=m @@ -1772,6 +1782,7 @@ CONFIG_BATMAN_ADV_DAT=y CONFIG_BATMAN_ADV_NC=y CONFIG_BATMAN_ADV_MCAST=y # CONFIG_BATMAN_ADV_DEBUGFS is not set +# CONFIG_BATMAN_ADV_TRACING is not set CONFIG_OPENVSWITCH=m CONFIG_OPENVSWITCH_GRE=m CONFIG_OPENVSWITCH_VXLAN=m @@ -1792,6 +1803,7 @@ CONFIG_HSR=m CONFIG_NET_SWITCHDEV=y CONFIG_NET_L3_MASTER_DEV=y CONFIG_NET_NCSI=y +CONFIG_NCSI_OEM_CMD_GET_MAC=y CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_XPS=y @@ -1971,8 +1983,6 @@ CONFIG_LIB80211_CRYPT_TKIP=m CONFIG_MAC80211=m CONFIG_MAC80211_HAS_RC=y CONFIG_MAC80211_RC_MINSTREL=y -CONFIG_MAC80211_RC_MINSTREL_HT=y -CONFIG_MAC80211_RC_MINSTREL_VHT=y CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" CONFIG_MAC80211_MESH=y @@ -2044,6 +2054,7 @@ CONFIG_LWTUNNEL_BPF=y CONFIG_DST_CACHE=y CONFIG_GRO_CELLS=y CONFIG_SOCK_VALIDATE_XMIT=y +CONFIG_NET_SOCK_MSG=y CONFIG_NET_DEVLINK=m CONFIG_MAY_USE_DEVLINK=m CONFIG_PAGE_POOL=y @@ -2223,7 +2234,6 @@ 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=y -CONFIG_MTD_NAND_DOCG4=m CONFIG_MTD_NAND_CAFE=m CONFIG_MTD_NAND_NANDSIM=m CONFIG_MTD_NAND_PLATFORM=m @@ -2284,7 +2294,6 @@ CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m CONFIG_ZRAM=m CONFIG_ZRAM_WRITEBACK=y # CONFIG_ZRAM_MEMORY_TRACKING is not set -CONFIG_BLK_DEV_DAC960=m CONFIG_BLK_DEV_UMEM=m CONFIG_BLK_DEV_LOOP=m CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 @@ -2366,6 +2375,7 @@ CONFIG_EEPROM_MAX6875=m CONFIG_EEPROM_93CX6=m # CONFIG_EEPROM_93XX46 is not set CONFIG_EEPROM_IDT_89HPESX=m +CONFIG_EEPROM_EE1004=m CONFIG_CB710_CORE=m # CONFIG_CB710_DEBUG is not set CONFIG_CB710_DEBUG_ASSUMPTIONS=y @@ -2521,9 +2531,12 @@ CONFIG_SCSI_UFSHCD_PCI=m # CONFIG_SCSI_UFS_DWC_TC_PCI is not set CONFIG_SCSI_UFSHCD_PLATFORM=m # CONFIG_SCSI_UFS_DWC_TC_PLATFORM is not set +CONFIG_SCSI_UFS_BSG=y CONFIG_SCSI_HPTIOP=m CONFIG_SCSI_BUSLOGIC=m CONFIG_SCSI_FLASHPOINT=y +CONFIG_SCSI_MYRB=m +CONFIG_SCSI_MYRS=m CONFIG_VMWARE_PVSCSI=m CONFIG_XEN_SCSI_FRONTEND=m CONFIG_HYPERV_STORAGE=m @@ -2697,7 +2710,6 @@ CONFIG_BCACHE=m # CONFIG_BCACHE_CLOSURES_DEBUG is not set CONFIG_BLK_DEV_DM_BUILTIN=y CONFIG_BLK_DEV_DM=m -CONFIG_DM_MQ_DEFAULT=y # CONFIG_DM_DEBUG is not set CONFIG_DM_BUFIO=m # CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set @@ -2844,8 +2856,10 @@ CONFIG_B53=m CONFIG_B53_MDIO_DRIVER=m CONFIG_B53_MMAP_DRIVER=m CONFIG_B53_SRAB_DRIVER=m +CONFIG_B53_SERDES=m CONFIG_NET_DSA_BCM_SF2=m CONFIG_NET_DSA_LOOP=m +CONFIG_NET_DSA_LANTIQ_GSWIP=m CONFIG_NET_DSA_MT7530=m CONFIG_MICROCHIP_KSZ=m CONFIG_MICROCHIP_KSZ_SPI_DRIVER=m @@ -2990,12 +3004,16 @@ CONFIG_IXGBE=m CONFIG_IXGBE_HWMON=y CONFIG_IXGBE_DCA=y CONFIG_IXGBE_DCB=y +CONFIG_IXGBE_IPSEC=y CONFIG_IXGBEVF=m +CONFIG_IXGBEVF_IPSEC=y CONFIG_I40E=m CONFIG_I40E_DCB=y +CONFIG_IAVF=m CONFIG_I40EVF=m CONFIG_ICE=m CONFIG_FM10K=m +CONFIG_IGC=m CONFIG_JME=m CONFIG_NET_VENDOR_MARVELL=y CONFIG_MVMDIO=m @@ -3063,6 +3081,7 @@ CONFIG_NFP_APP_FLOWER=y CONFIG_NFP_APP_ABM_NIC=y # CONFIG_NFP_DEBUG is not set CONFIG_NET_VENDOR_NI=y +CONFIG_NI_XGE_MANAGEMENT_ENET=m CONFIG_NET_VENDOR_8390=y CONFIG_PCMCIA_AXNET=m CONFIG_NE2K_PCI=m @@ -3468,9 +3487,14 @@ CONFIG_MWL8K=m CONFIG_WLAN_VENDOR_MEDIATEK=y CONFIG_MT7601U=m CONFIG_MT76_CORE=m +CONFIG_MT76_LEDS=y CONFIG_MT76_USB=m -CONFIG_MT76x2_COMMON=m +CONFIG_MT76x02_LIB=m +CONFIG_MT76x02_USB=m +CONFIG_MT76x0_COMMON=m CONFIG_MT76x0U=m +CONFIG_MT76x0E=m +CONFIG_MT76x2_COMMON=m CONFIG_MT76x2E=m CONFIG_MT76x2U=m CONFIG_WLAN_VENDOR_RALINK=y @@ -3575,7 +3599,7 @@ CONFIG_IEEE802154_ADF7242=m CONFIG_IEEE802154_CA8210=m # CONFIG_IEEE802154_CA8210_DEBUGFS is not set CONFIG_IEEE802154_MCR20A=m -# CONFIG_IEEE802154_HWSIM is not set +CONFIG_IEEE802154_HWSIM=m CONFIG_XEN_NETDEV_FRONTEND=m CONFIG_XEN_NETDEV_BACKEND=m CONFIG_VMXNET3=m @@ -4251,6 +4275,7 @@ CONFIG_I2C_PIIX4=m CONFIG_I2C_CHT_WC=m CONFIG_I2C_NFORCE2=m CONFIG_I2C_NFORCE2_S4985=m +CONFIG_I2C_NVIDIA_GPU=m CONFIG_I2C_SIS5595=m CONFIG_I2C_SIS630=m CONFIG_I2C_SIS96X=m @@ -4436,6 +4461,7 @@ CONFIG_GPIO_LYNXPOINT=m CONFIG_GPIO_MB86S7X=m CONFIG_GPIO_MENZ127=m CONFIG_GPIO_MOCKUP=m +CONFIG_GPIO_SIOX=m CONFIG_GPIO_SYSCON=m CONFIG_GPIO_VX855=m CONFIG_GPIO_XILINX=m @@ -4975,6 +5001,7 @@ CONFIG_MFD_AS3711=y CONFIG_MFD_AS3722=m CONFIG_PMIC_ADP5520=y CONFIG_MFD_AAT2870_CORE=y +CONFIG_MFD_AT91_USART=m CONFIG_MFD_ATMEL_FLEXCOM=m CONFIG_MFD_ATMEL_HLCDC=m CONFIG_MFD_BCM590XX=m @@ -5265,6 +5292,7 @@ CONFIG_MEDIA_CEC_SUPPORT=y # CONFIG_CEC_PIN_ERROR_INJ is not set CONFIG_MEDIA_CONTROLLER=y # CONFIG_MEDIA_CONTROLLER_DVB is not set +# CONFIG_MEDIA_CONTROLLER_REQUEST_API is not set CONFIG_VIDEO_DEV=m CONFIG_VIDEO_V4L2_SUBDEV_API=y CONFIG_VIDEO_V4L2=m @@ -5955,6 +5983,7 @@ CONFIG_DRM_KMS_HELPER=m CONFIG_DRM_KMS_FB_HELPER=y CONFIG_DRM_FBDEV_EMULATION=y CONFIG_DRM_FBDEV_OVERALLOC=100 +# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set CONFIG_DRM_LOAD_EDID_FIRMWARE=y CONFIG_DRM_DP_CEC=y CONFIG_DRM_TTM=m @@ -5988,7 +6017,9 @@ CONFIG_DRM_AMD_ACP=y # CONFIG_DRM_AMD_DC=y CONFIG_DRM_AMD_DC_DCN1_0=y +CONFIG_DRM_AMD_DC_DCN1_01=y # CONFIG_DEBUG_KERNEL_DC is not set +CONFIG_HSA_AMD=y # # AMD Library routines @@ -6020,6 +6051,7 @@ CONFIG_DRM_I915_GVT_KVMGT=m # CONFIG_DRM_I915_SELFTEST is not set # CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set # CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set +# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set CONFIG_DRM_VGEM=m CONFIG_DRM_VKMS=m CONFIG_DRM_VMWGFX=m @@ -6078,8 +6110,10 @@ CONFIG_DRM_SIL_SII8620=m CONFIG_DRM_SII902X=m CONFIG_DRM_SII9234=m CONFIG_DRM_THINE_THC63LVD1024=m +CONFIG_DRM_TOSHIBA_TC358764=m CONFIG_DRM_TOSHIBA_TC358767=m CONFIG_DRM_TI_TFP410=m +CONFIG_DRM_TI_SN65DSI86=m CONFIG_DRM_I2C_ADV7511=m CONFIG_DRM_I2C_ADV7511_AUDIO=y CONFIG_DRM_I2C_ADV7533=y @@ -6088,7 +6122,6 @@ CONFIG_DRM_DW_HDMI=m CONFIG_DRM_DW_HDMI_AHB_AUDIO=m CONFIG_DRM_DW_HDMI_I2S_AUDIO=m CONFIG_DRM_DW_HDMI_CEC=m -CONFIG_HSA_AMD=m CONFIG_DRM_ARCPGU=m CONFIG_DRM_HISI_HIBMC=m CONFIG_DRM_MXS=y @@ -6109,10 +6142,10 @@ CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y # # Frame buffer Devices # -CONFIG_FB=y -CONFIG_FIRMWARE_EDID=y CONFIG_FB_CMDLINE=y CONFIG_FB_NOTIFY=y +CONFIG_FB=y +CONFIG_FIRMWARE_EDID=y CONFIG_FB_BOOT_VESA_SUPPORT=y CONFIG_FB_CFB_FILLRECT=y CONFIG_FB_CFB_COPYAREA=y @@ -6174,7 +6207,6 @@ CONFIG_FB_EFI=y CONFIG_XEN_FBDEV_FRONTEND=m # CONFIG_FB_METRONOME is not set # CONFIG_FB_MB862XX is not set -# CONFIG_FB_BROADSHEET is not set CONFIG_FB_HYPERV=m CONFIG_FB_SIMPLE=y # CONFIG_FB_SSD1307 is not set @@ -6189,8 +6221,6 @@ CONFIG_LCD_ILI9320=m CONFIG_LCD_TDO24M=m CONFIG_LCD_VGG2432A4=m CONFIG_LCD_PLATFORM=m -CONFIG_LCD_S6E63M0=m -CONFIG_LCD_LD9040=m CONFIG_LCD_AMS369FG06=m CONFIG_LCD_LMS501KF03=m CONFIG_LCD_HX8357=m @@ -6445,6 +6475,7 @@ CONFIG_SND_SOC_AMD_ACP=m CONFIG_SND_SOC_AMD_CZ_DA7219MX98357_MACH=m CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m CONFIG_SND_ATMEL_SOC=m +CONFIG_SND_SOC_MIKROE_PROTO=m CONFIG_SND_DESIGNWARE_I2S=m CONFIG_SND_DESIGNWARE_PCM=y @@ -6480,8 +6511,10 @@ CONFIG_SND_SOC_INTEL_HASWELL=m CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_PCI=m CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_ACPI=m -CONFIG_SND_SOC_INTEL_SKYLAKE_SSP_CLK=m CONFIG_SND_SOC_INTEL_SKYLAKE=m +CONFIG_SND_SOC_INTEL_SKYLAKE_SSP_CLK=m +CONFIG_SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC=y +CONFIG_SND_SOC_INTEL_SKYLAKE_COMMON=m CONFIG_SND_SOC_ACPI_INTEL_MATCH=m CONFIG_SND_SOC_INTEL_MACH=y CONFIG_SND_SOC_INTEL_HASWELL_MACH=m @@ -6504,7 +6537,9 @@ CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=m CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m CONFIG_SND_SOC_INTEL_KBL_DA7219_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_KBL_DA7219_MAX98927_MACH=m CONFIG_SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m # # STMicroelectronics STM32 SOC audio support @@ -6567,7 +6602,9 @@ CONFIG_SND_SOC_ES8328_I2C=m CONFIG_SND_SOC_ES8328_SPI=m CONFIG_SND_SOC_GTM601=m CONFIG_SND_SOC_HDAC_HDMI=m +CONFIG_SND_SOC_HDAC_HDA=m CONFIG_SND_SOC_INNO_RK3036=m +CONFIG_SND_SOC_MAX98088=m CONFIG_SND_SOC_MAX98090=m CONFIG_SND_SOC_MAX98357A=m CONFIG_SND_SOC_MAX98504=m @@ -6586,6 +6623,9 @@ CONFIG_SND_SOC_PCM179X_SPI=m CONFIG_SND_SOC_PCM186X=m CONFIG_SND_SOC_PCM186X_I2C=m CONFIG_SND_SOC_PCM186X_SPI=m +CONFIG_SND_SOC_PCM3060=m +CONFIG_SND_SOC_PCM3060_I2C=m +CONFIG_SND_SOC_PCM3060_SPI=m CONFIG_SND_SOC_PCM3168A=m CONFIG_SND_SOC_PCM3168A_I2C=m CONFIG_SND_SOC_PCM3168A_SPI=m @@ -6670,6 +6710,7 @@ CONFIG_SND_SOC_MAX9759=m CONFIG_SND_SOC_MT6351=m CONFIG_SND_SOC_NAU8540=m CONFIG_SND_SOC_NAU8810=m +CONFIG_SND_SOC_NAU8822=m CONFIG_SND_SOC_NAU8824=m CONFIG_SND_SOC_NAU8825=m CONFIG_SND_SOC_TPA6130A2=m @@ -6706,6 +6747,7 @@ CONFIG_HID_ASUS=m CONFIG_HID_AUREAL=m CONFIG_HID_BELKIN=m CONFIG_HID_BETOP_FF=m +CONFIG_HID_BIGBEN_FF=m CONFIG_HID_CHERRY=m CONFIG_HID_CHICONY=m CONFIG_HID_CORSAIR=m @@ -7191,6 +7233,7 @@ CONFIG_TYPEC_RT1711H=m CONFIG_TYPEC_FUSB302=m CONFIG_TYPEC_WCOVE=m CONFIG_TYPEC_UCSI=m +CONFIG_UCSI_CCG=m CONFIG_UCSI_ACPI=m CONFIG_TYPEC_TPS6598X=m @@ -7203,10 +7246,10 @@ CONFIG_TYPEC_MUX_PI3USB30532=m # USB Type-C Alternate Mode drivers # CONFIG_TYPEC_DP_ALTMODE=m +CONFIG_USB_ROLE_SWITCH=m CONFIG_USB_ROLES_INTEL_XHCI=m CONFIG_USB_LED_TRIG=y CONFIG_USB_ULPI_BUS=m -CONFIG_USB_ROLE_SWITCH=m CONFIG_UWB=m CONFIG_UWB_HWA=m CONFIG_UWB_WHCI=m @@ -7278,6 +7321,7 @@ CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y # CONFIG_LEDS_88PM860X=m CONFIG_LEDS_AAT1290=m +CONFIG_LEDS_AN30259A=m CONFIG_LEDS_APU=m CONFIG_LEDS_AS3645A=m CONFIG_LEDS_BCM6328=m @@ -7360,6 +7404,7 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m CONFIG_LEDS_TRIGGER_CAMERA=m CONFIG_LEDS_TRIGGER_PANIC=y CONFIG_LEDS_TRIGGER_NETDEV=m +CONFIG_LEDS_TRIGGER_PATTERN=m CONFIG_ACCESSIBILITY=y CONFIG_A11Y_BRAILLE_CONSOLE=y CONFIG_INFINIBAND=m @@ -7534,7 +7579,6 @@ CONFIG_RTC_DRV_DS1685=y # CONFIG_RTC_DRV_DS17285 is not set # CONFIG_RTC_DRV_DS17485 is not set # CONFIG_RTC_DRV_DS17885 is not set -# CONFIG_RTC_DS1685_PROC_REGS is not set CONFIG_RTC_DRV_DS1742=m CONFIG_RTC_DRV_DS2404=m CONFIG_RTC_DRV_DA9052=m @@ -7605,6 +7649,7 @@ CONFIG_DMA_ENGINE_RAID=y # CONFIG_SYNC_FILE=y # CONFIG_SW_SYNC is not set +CONFIG_UDMABUF=y CONFIG_DCA=m CONFIG_AUXDISPLAY=y CONFIG_HD44780=m @@ -7787,6 +7832,7 @@ CONFIG_COMEDI_AMPLC_PC236=m CONFIG_COMEDI_DAS08=m CONFIG_COMEDI_NI_LABPC=m CONFIG_COMEDI_NI_TIO=m +CONFIG_COMEDI_NI_ROUTING=m CONFIG_RTL8192U=m CONFIG_RTLLIB=m CONFIG_RTLLIB_CRYPTO_CCMP=m @@ -7902,7 +7948,6 @@ CONFIG_FWTTY_MAX_TOTAL_PORTS=64 CONFIG_FWTTY_MAX_CARD_PORTS=32 CONFIG_MTD_SPINAND_MT29F=m CONFIG_MTD_SPINAND_ONDIEECC=y -CONFIG_DGNC=m CONFIG_GS_FPGABOOT=m CONFIG_UNISYSSPAR=y CONFIG_COMMON_CLK_XLNX_CLKWZRD=m @@ -7940,6 +7985,7 @@ CONFIG_EROFS_FS_POSIX_ACL=y CONFIG_EROFS_FS_SECURITY=y # CONFIG_EROFS_FS_USE_VM_MAP_RAM is not set # CONFIG_EROFS_FAULT_INJECTION is not set +CONFIG_EROFS_FS_IO_MAX_RETRIES=5 CONFIG_EROFS_FS_ZIP=y CONFIG_EROFS_FS_CLUSTER_PAGE_LIMIT=2 # CONFIG_EROFS_FS_ZIP_NO_CACHE is not set @@ -7951,6 +7997,7 @@ CONFIG_ACER_WIRELESS=m CONFIG_ACERHDF=m CONFIG_ALIENWARE_WMI=m CONFIG_ASUS_LAPTOP=m +CONFIG_DCDBAS=m CONFIG_DELL_SMBIOS=m CONFIG_DELL_SMBIOS_WMI=y CONFIG_DELL_SMBIOS_SMM=y @@ -7961,6 +8008,7 @@ CONFIG_DELL_WMI_AIO=m CONFIG_DELL_WMI_LED=m CONFIG_DELL_SMO8800=m CONFIG_DELL_RBTN=m +CONFIG_DELL_RBU=m CONFIG_FUJITSU_LAPTOP=m CONFIG_FUJITSU_TABLET=m CONFIG_AMILO_RFKILL=m @@ -7968,6 +8016,7 @@ CONFIG_GPD_POCKET_FAN=m CONFIG_HP_ACCEL=m CONFIG_HP_WIRELESS=m CONFIG_HP_WMI=m +CONFIG_LG_LAPTOP=m CONFIG_MSI_LAPTOP=m CONFIG_PANASONIC_LAPTOP=m CONFIG_COMPAL_LAPTOP=m @@ -8026,6 +8075,7 @@ CONFIG_INTEL_TURBO_MAX_3=y CONFIG_TOUCHSCREEN_DMI=y CONFIG_INTEL_CHTDC_TI_PWRBTN=m CONFIG_I2C_MULTI_INSTANTIATE=m +CONFIG_INTEL_ATOMISP2_PM=m CONFIG_PMC_ATOM=y CONFIG_CHROME_PLATFORMS=y CONFIG_CHROMEOS_LAPTOP=m @@ -8203,6 +8253,9 @@ CONFIG_IIO_TRIGGERED_EVENT=m # CONFIG_ADIS16201=m CONFIG_ADIS16209=m +CONFIG_ADXL372=m +CONFIG_ADXL372_SPI=m +CONFIG_ADXL372_I2C=m CONFIG_BMA180=m CONFIG_BMA220=m CONFIG_BMC150_ACCEL=m @@ -8272,12 +8325,14 @@ CONFIG_MAX1363=m CONFIG_MAX9611=m CONFIG_MCP320X=m CONFIG_MCP3422=m +CONFIG_MCP3911=m CONFIG_MEN_Z188_ADC=m CONFIG_NAU7802=m CONFIG_PALMAS_GPADC=m CONFIG_QCOM_VADC_COMMON=m CONFIG_QCOM_SPMI_IADC=m CONFIG_QCOM_SPMI_VADC=m +CONFIG_QCOM_SPMI_ADC5=m CONFIG_SD_ADC_MODULATOR=m CONFIG_TI_ADC081C=m CONFIG_TI_ADC0832=m @@ -8353,6 +8408,7 @@ CONFIG_AD5592R=m CONFIG_AD5593R=m CONFIG_AD5504=m CONFIG_AD5624R_SPI=m +CONFIG_LTC1660=m CONFIG_LTC2632=m CONFIG_AD5686=m CONFIG_AD5686_SPI=m @@ -8601,6 +8657,7 @@ CONFIG_RFD77402=m CONFIG_SRF04=m CONFIG_SX9500=m CONFIG_SRF08=m +CONFIG_VL53L0X_I2C=m # # Resolver to digital converters @@ -8681,10 +8738,12 @@ CONFIG_FMC_CHARDEV=m # CONFIG_GENERIC_PHY=y CONFIG_BCM_KONA_USB2_PHY=m +CONFIG_PHY_CADENCE_DP=m CONFIG_PHY_PXA_28NM_HSIC=m CONFIG_PHY_PXA_28NM_USB2=m CONFIG_PHY_CPCAP_USB=m CONFIG_PHY_MAPPHONE_MDM6600=m +CONFIG_PHY_OCELOT_SERDES=m CONFIG_PHY_QCOM_USB_HS=m CONFIG_PHY_QCOM_USB_HSIC=m CONFIG_PHY_SAMSUNG_USB2=m @@ -8728,6 +8787,8 @@ CONFIG_RAVE_SP_EEPROM=m # HW tracing support # CONFIG_STM=m +CONFIG_STM_PROTO_BASIC=m +CONFIG_STM_PROTO_SYS_T=m # CONFIG_STM_DUMMY is not set CONFIG_STM_SOURCE_CONSOLE=m CONFIG_STM_SOURCE_HEARTBEAT=m @@ -8959,6 +9020,7 @@ CONFIG_UBIFS_ATIME_SUPPORT=y CONFIG_UBIFS_FS_XATTR=y CONFIG_UBIFS_FS_ENCRYPTION=y CONFIG_UBIFS_FS_SECURITY=y +CONFIG_UBIFS_FS_AUTHENTICATION=y CONFIG_CRAMFS=m CONFIG_CRAMFS_BLOCKDEV=y CONFIG_CRAMFS_MTD=y @@ -9062,7 +9124,6 @@ CONFIG_CIFS=m # CONFIG_CIFS_ALLOW_INSECURE_LEGACY is not set CONFIG_CIFS_UPCALL=y CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y CONFIG_CIFS_ACL=y CONFIG_CIFS_DEBUG=y # CONFIG_CIFS_DEBUG2 is not set @@ -9074,6 +9135,7 @@ CONFIG_CODA_FS=m CONFIG_AFS_FS=m # CONFIG_AFS_DEBUG is not set CONFIG_AFS_FSCACHE=y +# CONFIG_AFS_DEBUG_CURSOR is not set CONFIG_9P_FS=m CONFIG_9P_FSCACHE=y CONFIG_9P_FS_POSIX_ACL=y @@ -9227,7 +9289,6 @@ CONFIG_CRYPTO_NULL2=y CONFIG_CRYPTO_PCRYPT=m CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_CRYPTD=m -CONFIG_CRYPTO_MCRYPTD=m CONFIG_CRYPTO_AUTHENC=m CONFIG_CRYPTO_TEST=m CONFIG_CRYPTO_SIMD=m @@ -9263,8 +9324,9 @@ CONFIG_CRYPTO_CBC=m CONFIG_CRYPTO_CFB=m CONFIG_CRYPTO_CTR=y CONFIG_CRYPTO_CTS=m -CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_ECB=m CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_OFB=m CONFIG_CRYPTO_PCBC=m CONFIG_CRYPTO_XTS=m CONFIG_CRYPTO_KEYWRAP=m @@ -9300,9 +9362,6 @@ CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_SHA1_SSSE3=m CONFIG_CRYPTO_SHA256_SSSE3=m CONFIG_CRYPTO_SHA512_SSSE3=m -CONFIG_CRYPTO_SHA1_MB=m -CONFIG_CRYPTO_SHA256_MB=m -CONFIG_CRYPTO_SHA512_MB=m CONFIG_CRYPTO_SHA256=y CONFIG_CRYPTO_SHA512=y CONFIG_CRYPTO_SHA3=m @@ -9403,7 +9462,10 @@ CONFIG_CRYPTO_DEV_VIRTIO=m CONFIG_CRYPTO_DEV_CCREE=m CONFIG_ASYMMETRIC_KEY_TYPE=y CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_ASYMMETRIC_TPM_KEY_SUBTYPE=m CONFIG_X509_CERTIFICATE_PARSER=y +CONFIG_PKCS8_PRIVATE_KEY_PARSER=m +CONFIG_TPM_KEY_PARSER=m CONFIG_PKCS7_MESSAGE_PARSER=y # CONFIG_PKCS7_TEST_KEY is not set CONFIG_SIGNED_PE_FILE_VERIFICATION=y @@ -9490,7 +9552,7 @@ CONFIG_TEXTSEARCH_BM=m CONFIG_TEXTSEARCH_FSM=m CONFIG_BTREE=y CONFIG_INTERVAL_TREE=y -CONFIG_RADIX_TREE_MULTIORDER=y +CONFIG_XARRAY_MULTI=y CONFIG_ASSOCIATIVE_ARRAY=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT_MAP=y @@ -9748,6 +9810,7 @@ CONFIG_LKDTM=m # CONFIG_TEST_BITMAP is not set # CONFIG_TEST_BITFIELD is not set # CONFIG_TEST_UUID is not set +# CONFIG_TEST_XARRAY is not set # CONFIG_TEST_OVERFLOW is not set # CONFIG_TEST_RHASHTABLE is not set # CONFIG_TEST_HASH is not set @@ -9762,6 +9825,7 @@ CONFIG_LKDTM=m # CONFIG_TEST_UDELAY is not set # CONFIG_TEST_STATIC_KEYS is not set # CONFIG_TEST_KMOD is not set +# CONFIG_TEST_MEMCAT_P is not set # CONFIG_MEMTEST is not set CONFIG_BUG_ON_DATA_CORRUPTION=y # CONFIG_SAMPLES is not set diff --git a/patch-4.19-ck1-jcmod2.patch b/patch-4.20-ck1-jcmod1.patch index 235d6f6..dd1f394 100644 --- a/patch-4.19-ck1-jcmod2.patch +++ b/patch-4.20-ck1-jcmod1.patch @@ -1,8 +1,8 @@ diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt -index 92eb1f42240d..627365ae5499 100644 +index aefd358a5ca3..d83cc67a2e80 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt -@@ -4001,6 +4001,14 @@ +@@ -4035,6 +4035,14 @@ Memory area to be used by remote processor image, managed by CMA. @@ -754,7 +754,7 @@ index 000000000000..ae28b85c9995 + +Con Kolivas <kernel@kolivas.org> Sat, 29th October 2016 diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt -index 37a679501ddc..e78109cf3458 100644 +index 1b8775298cf7..4f0a97784d35 100644 --- a/Documentation/sysctl/kernel.txt +++ b/Documentation/sysctl/kernel.txt @@ -41,6 +41,7 @@ show up in /proc/sys/kernel: @@ -773,7 +773,7 @@ index 37a679501ddc..e78109cf3458 100644 - rtsig-max - rtsig-nr - seccomp/ ==> Documentation/userspace-api/seccomp_filter.rst -@@ -97,6 +99,7 @@ show up in /proc/sys/kernel: +@@ -98,6 +100,7 @@ show up in /proc/sys/kernel: - unknown_nmi_panic - watchdog - watchdog_thresh @@ -781,7 +781,7 @@ index 37a679501ddc..e78109cf3458 100644 - version ============================================================== -@@ -435,6 +438,16 @@ When kptr_restrict is set to (2), kernel pointers printed using +@@ -436,6 +439,16 @@ When kptr_restrict is set to (2), kernel pointers printed using ============================================================== @@ -798,7 +798,7 @@ index 37a679501ddc..e78109cf3458 100644 l2cr: (PPC only) This flag controls the L2 cache of G3 processor boards. If -@@ -862,6 +875,20 @@ rebooting. ??? +@@ -863,6 +876,20 @@ rebooting. ??? ============================================================== @@ -819,7 +819,7 @@ index 37a679501ddc..e78109cf3458 100644 rtsig-max & rtsig-nr: The file rtsig-max can be used to tune the maximum number -@@ -1102,3 +1129,13 @@ The softlockup threshold is (2 * watchdog_thresh). Setting this +@@ -1120,3 +1147,13 @@ The softlockup threshold is (2 * watchdog_thresh). Setting this tunable to zero will disable lockup detection altogether. ============================================================== @@ -834,10 +834,10 @@ index 37a679501ddc..e78109cf3458 100644 + +============================================================== diff --git a/arch/arc/configs/tb10x_defconfig b/arch/arc/configs/tb10x_defconfig -index a7f65313f84a..5233307bf903 100644 +index e71ade3cf9c8..771f0bad7a3c 100644 --- a/arch/arc/configs/tb10x_defconfig +++ b/arch/arc/configs/tb10x_defconfig -@@ -28,7 +28,7 @@ CONFIG_ARC_PLAT_TB10X=y +@@ -29,7 +29,7 @@ CONFIG_ARC_PLAT_TB10X=y CONFIG_ARC_CACHE_LINE_SHIFT=5 CONFIG_HZ=250 CONFIG_ARC_BUILTIN_DTB_NAME="abilis_tb100_dvk" @@ -847,7 +847,7 @@ index a7f65313f84a..5233307bf903 100644 CONFIG_NET=y CONFIG_PACKET=y diff --git a/arch/arm/configs/bcm2835_defconfig b/arch/arm/configs/bcm2835_defconfig -index e9bc88937b1e..73cde48ad00f 100644 +index bb6a35fb1dd7..ff58a38d0d5b 100644 --- a/arch/arm/configs/bcm2835_defconfig +++ b/arch/arm/configs/bcm2835_defconfig @@ -29,7 +29,7 @@ CONFIG_MODULE_UNLOAD=y @@ -860,14 +860,13 @@ index e9bc88937b1e..73cde48ad00f 100644 CONFIG_KSM=y CONFIG_CLEANCACHE=y diff --git a/arch/arm/configs/imx_v6_v7_defconfig b/arch/arm/configs/imx_v6_v7_defconfig -index 7eca43ff69bb..689095192133 100644 +index 1ad5736c8fa6..cf116a40dc1c 100644 --- a/arch/arm/configs/imx_v6_v7_defconfig +++ b/arch/arm/configs/imx_v6_v7_defconfig -@@ -48,7 +48,7 @@ CONFIG_PCI_MSI=y +@@ -44,6 +44,7 @@ CONFIG_PCI_MSI=y CONFIG_PCI_IMX6=y CONFIG_SMP=y CONFIG_ARM_PSCI=y --CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_PREEMPT=y CONFIG_HIGHMEM=y CONFIG_FORCE_MAX_ZONEORDER=14 @@ -886,18 +885,30 @@ index 0bcdec7cc169..10ceaefa51e0 100644 CONFIG_ZBOOT_ROM_TEXT=0x0 CONFIG_ZBOOT_ROM_BSS=0x0 diff --git a/arch/arm/configs/mxs_defconfig b/arch/arm/configs/mxs_defconfig -index 7b8212857535..6c1b8a1d9d59 100644 +index 38480596c449..d509ff66f73a 100644 --- a/arch/arm/configs/mxs_defconfig +++ b/arch/arm/configs/mxs_defconfig -@@ -26,7 +26,7 @@ CONFIG_BLK_DEV_INTEGRITY=y - # CONFIG_ARCH_MULTI_V7 is not set - CONFIG_ARCH_MXS=y - # CONFIG_ARM_THUMB is not set +@@ -1,7 +1,7 @@ + CONFIG_SYSVIPC=y + CONFIG_NO_HZ=y + CONFIG_HIGH_RES_TIMERS=y -CONFIG_PREEMPT_VOLUNTARY=y ++CONFIG_PREEMPT_VOLUNTARY=n + CONFIG_TASKSTATS=y + CONFIG_TASK_DELAY_ACCT=y + CONFIG_TASK_XACCT=y +@@ -27,6 +27,11 @@ CONFIG_MODVERSIONS=y + CONFIG_BLK_DEV_INTEGRITY=y + # CONFIG_IOSCHED_DEADLINE is not set + # CONFIG_IOSCHED_CFQ is not set ++# CONFIG_ARCH_MULTI_V7 is not set ++CONFIG_ARCH_MXS=y ++# CONFIG_ARM_THUMB is not set +CONFIG_PREEMPT=y - CONFIG_AEABI=y ++CONFIG_AEABI=y CONFIG_NET=y CONFIG_PACKET=y + CONFIG_UNIX=y diff --git a/arch/blackfin/configs/BF518F-EZBRD_defconfig b/arch/blackfin/configs/BF518F-EZBRD_defconfig new file mode 100644 index 000000000000..39b91dfa55b5 @@ -4243,7 +4254,7 @@ index 7ee736f20774..8663c0043a56 100644 CONFIG_HIBERNATION=y CONFIG_PM_DEBUG=y diff --git a/arch/powerpc/platforms/cell/spufs/sched.c b/arch/powerpc/platforms/cell/spufs/sched.c -index c9ef3c532169..1298454c0499 100644 +index 9fcccb4490b9..7f2b6c226eed 100644 --- a/arch/powerpc/platforms/cell/spufs/sched.c +++ b/arch/powerpc/platforms/cell/spufs/sched.c @@ -64,11 +64,6 @@ static struct task_struct *spusched_task; @@ -5348,10 +5359,10 @@ index 000000000000..e8c4003cbd81 +CONFIG_CRC_CCITT=m +CONFIG_CRC7=m diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 1a0be022f91d..cfa268364ec7 100644 +index 8689e794a43c..6f3519674169 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -1009,6 +1009,21 @@ config NR_CPUS +@@ -1002,6 +1002,22 @@ config NR_CPUS config SCHED_SMT def_bool y if SMP @@ -5370,10 +5381,11 @@ index 1a0be022f91d..cfa268364ec7 100644 + + If unsure say Y here. + ++ config SCHED_MC def_bool y prompt "Multi-core scheduler support" -@@ -1043,6 +1059,80 @@ config SCHED_MC_PRIO +@@ -1032,6 +1048,97 @@ config SCHED_MC_PRIO If unsure say Y here. @@ -5441,6 +5453,22 @@ index 1a0be022f91d..cfa268364ec7 100644 + rqshare=smp + + If unsure, say N. ++ ++config RQ_ALL ++ bool "NUMA" ++ depends on SMP && SCHED_MUQSS ++ help ++ With this option enabled, the CPU scheduler will have one runqueue ++ regardless of the architecture configuration, including across NUMA ++ nodes. This can substantially decrease throughput in NUMA ++ configurations, but light NUMA designs will not be dramatically ++ affected. This option should only be chosen if latency is the prime ++ concern. ++ ++ This can still be enabled runtime with the boot parameter ++ rqshare=all ++ ++ If unsure, say N. +endchoice + +config SHARERQ @@ -5449,12 +5477,13 @@ index 1a0be022f91d..cfa268364ec7 100644 + default 1 if RQ_SMT + default 2 if RQ_MC + default 3 if RQ_SMP ++ default 4 if RQ_ALL + + config UP_LATE_INIT def_bool y depends on !SMP && X86_LOCAL_APIC -@@ -1405,7 +1495,7 @@ config HIGHMEM64G +@@ -1393,7 +1500,7 @@ config HIGHMEM64G endchoice choice @@ -5463,7 +5492,7 @@ index 1a0be022f91d..cfa268364ec7 100644 default VMSPLIT_3G depends on X86_32 ---help--- -@@ -1425,17 +1515,17 @@ choice +@@ -1413,17 +1520,17 @@ choice option alone! config VMSPLIT_3G @@ -5487,7 +5516,7 @@ index 1a0be022f91d..cfa268364ec7 100644 config PAGE_OFFSET diff --git a/arch/x86/configs/i386_defconfig b/arch/x86/configs/i386_defconfig -index 0eb9f92f3717..e5890ae917e5 100644 +index 6c3ab05c231d..264b756b11e6 100644 --- a/arch/x86/configs/i386_defconfig +++ b/arch/x86/configs/i386_defconfig @@ -41,7 +41,7 @@ CONFIG_SMP=y @@ -5500,7 +5529,7 @@ index 0eb9f92f3717..e5890ae917e5 100644 CONFIG_X86_MCE=y CONFIG_X86_REBOOTFIXUPS=y diff --git a/arch/x86/configs/x86_64_defconfig b/arch/x86/configs/x86_64_defconfig -index e32fc1f274d8..4368ba4f7967 100644 +index ac9ae487cfeb..a229a3588dac 100644 --- a/arch/x86/configs/x86_64_defconfig +++ b/arch/x86/configs/x86_64_defconfig @@ -40,7 +40,7 @@ CONFIG_SMP=y @@ -5513,7 +5542,7 @@ index e32fc1f274d8..4368ba4f7967 100644 CONFIG_X86_MCE=y CONFIG_MICROCODE=y diff --git a/drivers/block/swim.c b/drivers/block/swim.c -index 0e31884a9519..16fcfbde31d5 100644 +index 3fa6fcc34790..278486c8266d 100644 --- a/drivers/block/swim.c +++ b/drivers/block/swim.c @@ -332,7 +332,7 @@ static inline void swim_motor(struct swim __iomem *base, @@ -5544,10 +5573,10 @@ index 0e31884a9519..16fcfbde31d5 100644 swim_select(base, RELAX); if (!swim_readbit(base, STEP)) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c -index 2fee65886d50..4ca0bae3df58 100644 +index f036c8f98ea3..6492d10f78d4 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c -@@ -980,7 +980,7 @@ static int qca_set_baudrate(struct hci_dev *hdev, uint8_t baudrate) +@@ -996,7 +996,7 @@ static int qca_set_baudrate(struct hci_dev *hdev, uint8_t baudrate) * then host can communicate with new baudrate to controller */ set_current_state(TASK_UNINTERRUPTIBLE); @@ -5557,10 +5586,10 @@ index 2fee65886d50..4ca0bae3df58 100644 if (qcadev->btsoc_type == QCA_WCN3990) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c -index 7fc9612070a1..5a7f8a879001 100644 +index a74ce885b541..c86b80418bc6 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c -@@ -3453,7 +3453,7 @@ static void cleanup_smi_msgs(struct ipmi_smi *intf) +@@ -3450,7 +3450,7 @@ static void cleanup_smi_msgs(struct ipmi_smi *intf) /* Current message first, to preserve order */ while (intf->curr_msg && !list_empty(&intf->waiting_rcv_msgs)) { /* Wait for the message to clear out. */ @@ -5570,10 +5599,10 @@ index 7fc9612070a1..5a7f8a879001 100644 /* No need for locks, the interface is down. */ diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c -index 29e67a80fb20..73bd0eca5fe5 100644 +index ca9528c4f183..765b2506f919 100644 --- a/drivers/char/ipmi/ipmi_ssif.c +++ b/drivers/char/ipmi/ipmi_ssif.c -@@ -1208,7 +1208,7 @@ static void shutdown_ssif(void *send_info) +@@ -1211,7 +1211,7 @@ static void shutdown_ssif(void *send_info) /* make sure the driver is not looking for flags any more. */ while (ssif_info->ssif_state != SSIF_NORMAL) @@ -5661,7 +5690,7 @@ index 6bbb0b1e6032..f4b83648c405 100644 static int tsl2563_adjust_gainlevel(struct tsl2563_chip *chip, u16 adc) diff --git a/drivers/media/i2c/msp3400-driver.c b/drivers/media/i2c/msp3400-driver.c -index 3db966db83eb..f0fab7676f72 100644 +index c63be01059b2..4872ae954389 100644 --- a/drivers/media/i2c/msp3400-driver.c +++ b/drivers/media/i2c/msp3400-driver.c @@ -179,7 +179,7 @@ static int msp_read(struct i2c_client *client, int dev, int addr) @@ -5728,10 +5757,10 @@ index f752f3993687..23372af61ebf 100644 } diff --git a/drivers/media/pci/ivtv/ivtv-ioctl.c b/drivers/media/pci/ivtv/ivtv-ioctl.c -index 4cdc6d2be85d..22c0803cbff3 100644 +index a66f8b872520..f6404a3af0a5 100644 --- a/drivers/media/pci/ivtv/ivtv-ioctl.c +++ b/drivers/media/pci/ivtv/ivtv-ioctl.c -@@ -1154,7 +1154,7 @@ void ivtv_s_std_dec(struct ivtv *itv, v4l2_std_id std) +@@ -1155,7 +1155,7 @@ void ivtv_s_std_dec(struct ivtv *itv, v4l2_std_id std) TASK_UNINTERRUPTIBLE); if ((read_reg(IVTV_REG_DEC_LINE_FIELD) >> 16) < 100) break; @@ -5741,10 +5770,10 @@ index 4cdc6d2be85d..22c0803cbff3 100644 finish_wait(&itv->vsync_waitq, &wait); mutex_lock(&itv->serialize_lock); diff --git a/drivers/media/pci/ivtv/ivtv-streams.c b/drivers/media/pci/ivtv/ivtv-streams.c -index d27c6df97566..e9ffc4eeb478 100644 +index a641f20e3f86..e1b40d2b4bed 100644 --- a/drivers/media/pci/ivtv/ivtv-streams.c +++ b/drivers/media/pci/ivtv/ivtv-streams.c -@@ -834,7 +834,7 @@ int ivtv_stop_v4l2_encode_stream(struct ivtv_stream *s, int gop_end) +@@ -843,7 +843,7 @@ int ivtv_stop_v4l2_encode_stream(struct ivtv_stream *s, int gop_end) while (!test_bit(IVTV_F_I_EOS, &itv->i_flags) && time_before(jiffies, then + msecs_to_jiffies(2000))) { @@ -5754,7 +5783,7 @@ index d27c6df97566..e9ffc4eeb478 100644 /* To convert jiffies to ms, we must multiply by 1000 diff --git a/drivers/media/radio/radio-mr800.c b/drivers/media/radio/radio-mr800.c -index 0f292c6ba338..9d7f22fe1ca8 100644 +index ab1324f68199..3fdb422a5caa 100644 --- a/drivers/media/radio/radio-mr800.c +++ b/drivers/media/radio/radio-mr800.c @@ -378,7 +378,7 @@ static int vidioc_s_hw_freq_seek(struct file *file, void *priv, @@ -5767,7 +5796,7 @@ index 0f292c6ba338..9d7f22fe1ca8 100644 break; } diff --git a/drivers/media/radio/radio-tea5777.c b/drivers/media/radio/radio-tea5777.c -index 04ed1a5d1177..d593d28dc286 100644 +index 61f751cf1aa4..7eb30468091e 100644 --- a/drivers/media/radio/radio-tea5777.c +++ b/drivers/media/radio/radio-tea5777.c @@ -245,7 +245,7 @@ static int radio_tea5777_update_read_reg(struct radio_tea5777 *tea, int wait) @@ -5780,7 +5809,7 @@ index 04ed1a5d1177..d593d28dc286 100644 } diff --git a/drivers/media/radio/tea575x.c b/drivers/media/radio/tea575x.c -index 7412fe1b10c6..92dce75e6ce9 100644 +index f89f83e04741..325987cd5997 100644 --- a/drivers/media/radio/tea575x.c +++ b/drivers/media/radio/tea575x.c @@ -416,7 +416,7 @@ int snd_tea575x_s_hw_freq_seek(struct file *file, struct snd_tea575x *tea, @@ -5806,7 +5835,7 @@ index d6fb2e1a759a..7ac951b84beb 100644 return UCB_ADC_DAT(val); diff --git a/drivers/misc/sgi-xp/xpc_channel.c b/drivers/misc/sgi-xp/xpc_channel.c -index 05a890ce2ab8..f6eb97bc3a2c 100644 +index 8e6607fc8a67..b9ab770bbdb5 100644 --- a/drivers/misc/sgi-xp/xpc_channel.c +++ b/drivers/misc/sgi-xp/xpc_channel.c @@ -834,7 +834,7 @@ xpc_allocate_msg_wait(struct xpc_channel *ch) @@ -5845,10 +5874,10 @@ index 13238a72a338..fc51ae55c63f 100644 return err; diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c -index c3c9ba44e2a1..1bc66289699f 100644 +index 77d3c85febf1..1c8f9592a88b 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c -@@ -2681,7 +2681,7 @@ static void lan78xx_terminate_urbs(struct lan78xx_net *dev) +@@ -2670,7 +2670,7 @@ static void lan78xx_terminate_urbs(struct lan78xx_net *dev) while (!skb_queue_empty(&dev->rxq) && !skb_queue_empty(&dev->txq) && !skb_queue_empty(&dev->done)) { @@ -5858,7 +5887,7 @@ index c3c9ba44e2a1..1bc66289699f 100644 netif_dbg(dev, ifdown, dev->net, "waited for %d urb completions\n", temp); diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c -index 770aa624147f..9384de186bf9 100644 +index 504282af27e5..da60ab9b56c7 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -770,7 +770,7 @@ static void wait_skb_queue_empty(struct sk_buff_head *q) @@ -5919,10 +5948,10 @@ index 5d41dda6da4e..34705f6b423f 100644 } else diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c -index c5ece7ef08c6..9256fb502545 100644 +index 225638a1b09e..fd6e157161ea 100644 --- a/drivers/platform/x86/intel_ips.c +++ b/drivers/platform/x86/intel_ips.c -@@ -809,7 +809,7 @@ static int ips_adjust(void *data) +@@ -798,7 +798,7 @@ static int ips_adjust(void *data) ips_gpu_lower(ips); sleep: @@ -5931,7 +5960,7 @@ index c5ece7ef08c6..9256fb502545 100644 } while (!kthread_should_stop()); dev_dbg(ips->dev, "ips-adjust thread stopped\n"); -@@ -985,7 +985,7 @@ static int ips_monitor(void *data) +@@ -974,7 +974,7 @@ static int ips_monitor(void *data) seqno_timestamp = get_jiffies_64(); old_cpu_power = thm_readl(THM_CEC); @@ -5940,7 +5969,7 @@ index c5ece7ef08c6..9256fb502545 100644 /* Collect an initial average */ for (i = 0; i < IPS_SAMPLE_COUNT; i++) { -@@ -1012,7 +1012,7 @@ static int ips_monitor(void *data) +@@ -1001,7 +1001,7 @@ static int ips_monitor(void *data) mchp_samples[i] = mchp; } @@ -5949,7 +5978,7 @@ index c5ece7ef08c6..9256fb502545 100644 if (kthread_should_stop()) break; } -@@ -1039,7 +1039,7 @@ static int ips_monitor(void *data) +@@ -1028,7 +1028,7 @@ static int ips_monitor(void *data) * us to reduce the sample frequency if the CPU and GPU are idle. */ old_cpu_power = thm_readl(THM_CEC); @@ -5990,7 +6019,7 @@ index 483c7993516b..fddbaa475066 100644 if (rtc_ctrl & WM8350_RTC_ALMSTS) diff --git a/drivers/scsi/fnic/fnic_scsi.c b/drivers/scsi/fnic/fnic_scsi.c -index 8cbd3c9f0b4c..7e3f9baa4ac6 100644 +index 96acfcecd540..8c9ae51d98c2 100644 --- a/drivers/scsi/fnic/fnic_scsi.c +++ b/drivers/scsi/fnic/fnic_scsi.c @@ -217,7 +217,7 @@ int fnic_fw_reset_handler(struct fnic *fnic) @@ -6002,7 +6031,7 @@ index 8cbd3c9f0b4c..7e3f9baa4ac6 100644 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags); -@@ -2255,7 +2255,7 @@ static int fnic_clean_pending_aborts(struct fnic *fnic, +@@ -2249,7 +2249,7 @@ static int fnic_clean_pending_aborts(struct fnic *fnic, } } @@ -6012,10 +6041,10 @@ index 8cbd3c9f0b4c..7e3f9baa4ac6 100644 /* walk again to check, if IOs are still pending in fw */ if (fnic_is_abts_pending(fnic, lr_sc)) diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c -index 5c7858e735c9..b56a01420918 100644 +index 4fa6703a9ec9..24740cdfc096 100644 --- a/drivers/scsi/lpfc/lpfc_scsi.c +++ b/drivers/scsi/lpfc/lpfc_scsi.c -@@ -5201,7 +5201,7 @@ lpfc_reset_flush_io_context(struct lpfc_vport *vport, uint16_t tgt_id, +@@ -5211,7 +5211,7 @@ lpfc_reset_flush_io_context(struct lpfc_vport *vport, uint16_t tgt_id, tgt_id, lun_id, context); later = msecs_to_jiffies(2 * vport->cfg_devloss_tmo * 1000) + jiffies; while (time_after(later, jiffies) && cnt) { @@ -6025,10 +6054,10 @@ index 5c7858e735c9..b56a01420918 100644 } if (cnt) { diff --git a/drivers/scsi/snic/snic_scsi.c b/drivers/scsi/snic/snic_scsi.c -index d9b2e46424aa..4a313a0f2039 100644 +index b3650c989ed4..7ed1fb285754 100644 --- a/drivers/scsi/snic/snic_scsi.c +++ b/drivers/scsi/snic/snic_scsi.c -@@ -2354,7 +2354,7 @@ snic_reset(struct Scsi_Host *shost, struct scsi_cmnd *sc) +@@ -2353,7 +2353,7 @@ snic_reset(struct Scsi_Host *shost, struct scsi_cmnd *sc) /* Wait for all the IOs that are entered in Qcmd */ while (atomic_read(&snic->ios_inflight)) @@ -6038,10 +6067,10 @@ index d9b2e46424aa..4a313a0f2039 100644 ret = snic_issue_hba_reset(snic, sc); if (ret) { diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c -index 4dee2fc37aed..2bb1c1157636 100644 +index 5edf59ac6706..3784dc56d39c 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c -@@ -4650,7 +4650,7 @@ static int cs5529_wait_for_idle(struct comedi_device *dev) +@@ -4723,7 +4723,7 @@ static int cs5529_wait_for_idle(struct comedi_device *dev) if ((status & NI67XX_CAL_STATUS_BUSY) == 0) break; set_current_state(TASK_INTERRUPTIBLE); @@ -6704,10 +6733,10 @@ index bbed039617a4..681ae041ea77 100644 pr_debug("%s(): task ending\n", __func__); diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c -index 2d9074295d7f..7df3e60e4e89 100644 +index a1febf155747..9321458b6e89 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c -@@ -5905,7 +5905,7 @@ int btrfs_delalloc_reserve_metadata(struct btrfs_inode *inode, u64 num_bytes) +@@ -5937,7 +5937,7 @@ int btrfs_delalloc_reserve_metadata(struct btrfs_inode *inode, u64 num_bytes) flush = BTRFS_RESERVE_FLUSH_LIMIT; if (btrfs_transaction_in_commit(fs_info)) @@ -6730,7 +6759,7 @@ index ffca2abf13d0..89b2a7f7397e 100644 } else continue; diff --git a/fs/proc/base.c b/fs/proc/base.c -index 7e9f07bf260d..87b8b504d4ac 100644 +index ce3465479447..95567e7a25dc 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -459,7 +459,7 @@ static int proc_pid_schedstat(struct seq_file *m, struct pid_namespace *ns, @@ -6784,10 +6813,10 @@ index 9e30ed6443db..7d6e7e7cdf9f 100644 } diff --git a/include/linux/sched.h b/include/linux/sched.h -index 977cb57d7bc9..1cd022304c64 100644 +index 291a9bd5b97f..5b28a41d399e 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h -@@ -28,6 +28,9 @@ +@@ -29,6 +29,9 @@ #include <linux/mm_types_task.h> #include <linux/task_io_accounting.h> #include <linux/rseq.h> @@ -6797,7 +6826,7 @@ index 977cb57d7bc9..1cd022304c64 100644 /* task_struct member predeclarations (sorted alphabetically): */ struct audit_context; -@@ -208,13 +211,40 @@ struct task_group; +@@ -209,13 +212,40 @@ struct task_group; extern void scheduler_tick(void); @@ -6840,7 +6869,7 @@ index 977cb57d7bc9..1cd022304c64 100644 asmlinkage void schedule(void); extern void schedule_preempt_disabled(void); -@@ -613,9 +643,11 @@ struct task_struct { +@@ -610,9 +640,11 @@ struct task_struct { unsigned int flags; unsigned int ptrace; @@ -6853,7 +6882,7 @@ index 977cb57d7bc9..1cd022304c64 100644 #ifdef CONFIG_THREAD_INFO_IN_TASK /* Current CPU: */ unsigned int cpu; -@@ -640,10 +672,25 @@ struct task_struct { +@@ -637,10 +669,25 @@ struct task_struct { int static_prio; int normal_prio; unsigned int rt_priority; @@ -6879,7 +6908,7 @@ index 977cb57d7bc9..1cd022304c64 100644 #ifdef CONFIG_CGROUP_SCHED struct task_group *sched_task_group; #endif -@@ -797,6 +844,10 @@ struct task_struct { +@@ -801,6 +848,10 @@ struct task_struct { #ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME u64 utimescaled; u64 stimescaled; @@ -6890,7 +6919,7 @@ index 977cb57d7bc9..1cd022304c64 100644 #endif u64 gtime; struct prev_cputime prev_cputime; -@@ -1209,6 +1260,40 @@ struct task_struct { +@@ -1223,6 +1274,40 @@ struct task_struct { */ }; @@ -7068,7 +7097,7 @@ index 22627f80063e..17077cd6fc40 100644 /* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */ #define SCHED_RESET_ON_FORK 0x40000000 diff --git a/init/Kconfig b/init/Kconfig -index 1e234e2f1cba..adb61defd6c3 100644 +index ed9352513c32..f6b7f26ec002 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -45,6 +45,18 @@ config THREAD_INFO_IN_TASK @@ -7090,7 +7119,7 @@ index 1e234e2f1cba..adb61defd6c3 100644 config BROKEN bool -@@ -647,6 +659,7 @@ config NUMA_BALANCING +@@ -680,6 +692,7 @@ config NUMA_BALANCING depends on ARCH_SUPPORTS_NUMA_BALANCING depends on !ARCH_WANT_NUMA_VARIABLE_LOCALITY depends on SMP && NUMA && MIGRATION @@ -7098,7 +7127,7 @@ index 1e234e2f1cba..adb61defd6c3 100644 help This option adds support for automatic NUMA aware memory/task placement. The mechanism is quite primitive and is based on migrating memory when -@@ -754,9 +767,13 @@ menuconfig CGROUP_SCHED +@@ -787,9 +800,13 @@ menuconfig CGROUP_SCHED help This feature lets CPU scheduler recognize task groups and control CPU bandwidth allocation to such task groups. It uses cgroups to group @@ -7114,7 +7143,7 @@ index 1e234e2f1cba..adb61defd6c3 100644 config FAIR_GROUP_SCHED bool "Group scheduling for SCHED_OTHER" depends on CGROUP_SCHED -@@ -863,6 +880,7 @@ config CGROUP_DEVICE +@@ -896,6 +913,7 @@ config CGROUP_DEVICE config CGROUP_CPUACCT bool "Simple CPU accounting controller" @@ -7122,7 +7151,7 @@ index 1e234e2f1cba..adb61defd6c3 100644 help Provides a simple controller for monitoring the total CPU consumed by the tasks in a cgroup. -@@ -981,6 +999,7 @@ config CHECKPOINT_RESTORE +@@ -1014,6 +1032,7 @@ config CHECKPOINT_RESTORE config SCHED_AUTOGROUP bool "Automatic process group scheduling" @@ -7169,10 +7198,10 @@ index 5aebe3be4d7c..2b576d3b2333 100644 #ifdef CONFIG_SMP .pushable_tasks = PLIST_NODE_INIT(init_task.pushable_tasks, MAX_PRIO), diff --git a/init/main.c b/init/main.c -index 18f8f0140fa0..fe2d2d87e887 100644 +index ee147103ba1b..82ae377e8fab 100644 --- a/init/main.c +++ b/init/main.c -@@ -1079,6 +1079,8 @@ static int __ref kernel_init(void *unused) +@@ -1086,6 +1086,8 @@ static int __ref kernel_init(void *unused) rcu_end_inkernel_boot(); @@ -7289,7 +7318,7 @@ index cd1655122ec0..9cf10230d5fb 100644 \ No newline at end of file + bool diff --git a/kernel/Makefile b/kernel/Makefile -index 7a63d567fdb5..e9c738432f19 100644 +index 7343b3a9bff0..43ef9cdfad51 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -10,7 +10,7 @@ obj-y = fork.o exec_domain.o panic.o \ @@ -7302,7 +7331,7 @@ index 7a63d567fdb5..e9c738432f19 100644 obj-$(CONFIG_MODULES) += kmod.o obj-$(CONFIG_MULTIUSER) += groups.o diff --git a/kernel/delayacct.c b/kernel/delayacct.c -index ca8ac2824f0b..ae824da28e4b 100644 +index 2a12b988c717..dba268ca115f 100644 --- a/kernel/delayacct.c +++ b/kernel/delayacct.c @@ -115,7 +115,7 @@ int __delayacct_add_tsk(struct taskstats *d, struct task_struct *tsk) @@ -7365,7 +7394,7 @@ index 5f3e2baefca9..de3e5740679b 100644 bool "Support sparse irq numbering" if MAY_HAVE_SPARSE_IRQ ---help--- diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c -index fb86146037a7..b322b1a0caa0 100644 +index 9dbdccab3b6a..fa7821e0221e 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -23,9 +23,20 @@ @@ -7438,33 +7467,38 @@ index 087d18d771b5..fdddd187774a 100644 set_bit(KTHREAD_IS_PER_CPU, &to_kthread(p)->flags); to_kthread(p)->cpu = cpu; diff --git a/kernel/livepatch/transition.c b/kernel/livepatch/transition.c -index 5bc349805e03..aa59b12d4c05 100644 +index 5bc349805e03..5572917ed7ce 100644 --- a/kernel/livepatch/transition.c +++ b/kernel/livepatch/transition.c -@@ -290,6 +290,12 @@ static int klp_check_stack(struct task_struct *task, char *err_buf) - return 0; - } - -+#ifdef CONFIG_SCHED_MUQSS -+typedef unsigned long rq_flags_t; -+#else -+typedef struct rq_flags rq_flag_t; -+#endif -+ - /* - * Try to safely switch a task to the target patch state. If it's currently - * running, or it's sleeping on a to-be-patched or to-be-unpatched function, or -@@ -298,7 +304,7 @@ static int klp_check_stack(struct task_struct *task, char *err_buf) +@@ -298,7 +298,7 @@ static int klp_check_stack(struct task_struct *task, char *err_buf) static bool klp_try_switch_task(struct task_struct *task) { struct rq *rq; - struct rq_flags flags; -+ rq_flags_t flags; ++ struct rq_flags rf; int ret; bool success = false; char err_buf[STACK_ERR_BUF_SIZE]; +@@ -314,7 +314,7 @@ static bool klp_try_switch_task(struct task_struct *task) + * functions. If all goes well, switch the task to the target patch + * state. + */ +- rq = task_rq_lock(task, &flags); ++ rq = task_rq_lock(task, &rf); + + if (task_running(rq, task) && task != current) { + snprintf(err_buf, STACK_ERR_BUF_SIZE, +@@ -333,7 +333,7 @@ static bool klp_try_switch_task(struct task_struct *task) + task->patch_state = klp_target_state; + + done: +- task_rq_unlock(rq, task, &flags); ++ task_rq_unlock(rq, task, &rf); + + /* + * Due to console deadlock issues, pr_debug() can't be used while diff --git a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig -index 9210379c0353..2dd2f03843cc 100644 +index 939a2056c87a..242f7e491e8d 100644 --- a/kernel/rcu/Kconfig +++ b/kernel/rcu/Kconfig @@ -93,7 +93,7 @@ config CONTEXT_TRACKING @@ -7477,10 +7511,10 @@ index 9210379c0353..2dd2f03843cc 100644 The major pre-requirement for full dynticks to work is to support the context tracking subsystem. But there are also diff --git a/kernel/sched/Makefile b/kernel/sched/Makefile -index 7fe183404c38..05c8211d7a76 100644 +index 21fb5a5662b5..ced9f319a02f 100644 --- a/kernel/sched/Makefile +++ b/kernel/sched/Makefile -@@ -16,6 +16,17 @@ ifneq ($(CONFIG_SCHED_OMIT_FRAME_POINTER),y) +@@ -16,6 +16,18 @@ ifneq ($(CONFIG_SCHED_OMIT_FRAME_POINTER),y) CFLAGS_core.o := $(PROFILING) -fno-omit-frame-pointer endif @@ -7494,21 +7528,22 @@ index 7fe183404c38..05c8211d7a76 100644 +obj-$(CONFIG_CPU_FREQ) += cpufreq.o +obj-$(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) += cpufreq_schedutil.o +obj-$(CONFIG_CPU_ISOLATION) += isolation.o ++obj-$(CONFIG_PSI) += psi.o +else obj-y += core.o loadavg.o clock.o cputime.o obj-y += idle.o fair.o rt.o deadline.o obj-y += wait.o wait_bit.o swait.o completion.o -@@ -29,3 +40,4 @@ obj-$(CONFIG_CPU_FREQ) += cpufreq.o - obj-$(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) += cpufreq_schedutil.o +@@ -30,3 +42,4 @@ obj-$(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) += cpufreq_schedutil.o obj-$(CONFIG_MEMBARRIER) += membarrier.o obj-$(CONFIG_CPU_ISOLATION) += isolation.o + obj-$(CONFIG_PSI) += psi.o +endif diff --git a/kernel/sched/MuQSS.c b/kernel/sched/MuQSS.c new file mode 100644 -index 000000000000..02e9eebab3d9 +index 000000000000..e8610b659791 --- /dev/null +++ b/kernel/sched/MuQSS.c -@@ -0,0 +1,7370 @@ +@@ -0,0 +1,7437 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * kernel/sched/MuQSS.c, was kernel/sched.c @@ -7622,13 +7657,14 @@ index 000000000000..02e9eebab3d9 + +void print_scheduler_version(void) +{ -+ printk(KERN_INFO "MuQSS CPU scheduler v0.180 by Con Kolivas.\n"); ++ printk(KERN_INFO "MuQSS CPU scheduler v0.185 by Con Kolivas.\n"); +} + +#define RQSHARE_NONE 0 +#define RQSHARE_SMT 1 +#define RQSHARE_MC 2 +#define RQSHARE_SMP 3 ++#define RQSHARE_ALL 4 + +/* + * This determines what level of runqueue sharing will be done and is @@ -7650,10 +7686,14 @@ index 000000000000..02e9eebab3d9 + rqshare = RQSHARE_MC; + return 0; + } -+ if (!strncmp(str, "smp", 2)) { ++ if (!strncmp(str, "smp", 3)) { + rqshare = RQSHARE_SMP; + return 0; + } ++ if (!strncmp(str, "all", 3)) { ++ rqshare = RQSHARE_ALL; ++ return 0; ++ } + return 1; +} +__setup("rqshare=", set_rqshare); @@ -7730,6 +7770,11 @@ index 000000000000..02e9eebab3d9 +{ + return 0*SD_ASYM_PACKING; +} ++ ++#ifdef CONFIG_SCHED_SMT ++DEFINE_STATIC_KEY_FALSE(sched_smt_present); ++#endif ++ +#else +struct rq *uprq; +#endif /* CONFIG_SMP */ @@ -7759,9 +7804,7 @@ index 000000000000..02e9eebab3d9 + * In theory, the compile should just see 0 here, and optimize out the call + * to sched_rt_avg_update. But I don't trust it... + */ -+#if defined(CONFIG_IRQ_TIME_ACCOUNTING) || defined(CONFIG_PARAVIRT_TIME_ACCOUNTING) -+ s64 steal = 0, irq_delta = 0; -+#endif ++ s64 __maybe_unused steal = 0, irq_delta = 0; +#ifdef CONFIG_IRQ_TIME_ACCOUNTING + irq_delta = irq_time_read(cpu_of(rq)) - rq->prev_irq_time; + @@ -7800,7 +7843,7 @@ index 000000000000..02e9eebab3d9 +#endif + rq->clock_task += delta; + -+#ifdef HAVE_SCHED_AVG_IRQ ++#ifdef CONFIG_HAVE_SCHED_AVG_IRQ + if (irq_delta + steal) + update_irq_load_avg(rq, irq_delta + steal); +#endif @@ -7846,16 +7889,6 @@ index 000000000000..02e9eebab3d9 + } +} + -+static inline int task_on_rq_queued(struct task_struct *p) -+{ -+ return p->on_rq == TASK_ON_RQ_QUEUED; -+} -+ -+static inline int task_on_rq_migrating(struct task_struct *p) -+{ -+ return p->on_rq == TASK_ON_RQ_MIGRATING; -+} -+ +/* + * Any time we have two runqueues locked we use that as an opportunity to + * synchronise niffies to the highest value as idle ticks may have artificially @@ -8253,8 +8286,10 @@ index 000000000000..02e9eebab3d9 + rq->best_key = rq->node->next[0]->key; + update_clocks(rq); + -+ if (!(flags & DEQUEUE_SAVE)) -+ sched_info_dequeued(task_rq(p), p); ++ if (!(flags & DEQUEUE_SAVE)) { ++ sched_info_dequeued(rq, p); ++ psi_dequeue(p, flags & DEQUEUE_SLEEP); ++ } + rq->nr_running--; + if (rt_task(p)) + rq->rt_nr_running--; @@ -8334,8 +8369,11 @@ index 000000000000..02e9eebab3d9 + * so mask out ~microseconds as the random seed for skiplist insertion. + */ + update_clocks(rq); -+ if (!(flags & ENQUEUE_RESTORE)) ++ if (!(flags & ENQUEUE_RESTORE)) { + sched_info_queued(rq, p); ++ psi_enqueue(p, flags & ENQUEUE_WAKEUP); ++ } ++ + randseed = (rq->niffies >> 10) & 0xFFFFFFFF; + skiplist_insert(rq->sl, &p->node, sl_id, p, randseed); + rq->best_key = rq->node->next[0]->key; @@ -8522,10 +8560,6 @@ index 000000000000..02e9eebab3d9 +#define CPUIDLE_THREAD_BUSY (16) +#define CPUIDLE_DIFF_NODE (32) + -+#ifdef CONFIG_SCHED_SMT -+DEFINE_STATIC_KEY_FALSE(sched_smt_present); -+#endif -+ +/* + * The best idle CPU is chosen according to the CPUIDLE ranking above where the + * lowest value would give the most suitable CPU to schedule p onto next. The @@ -8714,7 +8748,7 @@ index 000000000000..02e9eebab3d9 +/* + * activate_task - move a task to the runqueue. Enter with rq locked. + */ -+static void activate_task(struct task_struct *p, struct rq *rq) ++static void activate_task(struct task_struct *p, struct rq *rq, int flags) +{ + resched_if_idle(rq); + @@ -8733,7 +8767,7 @@ index 000000000000..02e9eebab3d9 + if (task_contributes_to_load(p)) + rq->nr_uninterruptible--; + -+ enqueue_task(rq, p, 0); ++ enqueue_task(rq, p, flags); + p->on_rq = TASK_ON_RQ_QUEUED; +} + @@ -8741,13 +8775,16 @@ index 000000000000..02e9eebab3d9 + * deactivate_task - If it's running, it's not on the runqueue and we can just + * decrement the nr_running. Enter with rq locked. + */ -+static inline void deactivate_task(struct task_struct *p, struct rq *rq) ++static inline void deactivate_task(struct task_struct *p, struct rq *rq, int flags) +{ + if (task_contributes_to_load(p)) + rq->nr_uninterruptible++; + + p->on_rq = 0; -+ sched_info_dequeued(rq, p); ++ if (!(flags & DEQUEUE_SAVE)) { ++ sched_info_dequeued(rq, p); ++ psi_dequeue(p, flags & DEQUEUE_SLEEP); ++ } +} + +#ifdef CONFIG_SMP @@ -8838,7 +8875,7 @@ index 000000000000..02e9eebab3d9 + int cpu, bool deactivate) +{ + if (deactivate) -+ deactivate_task(p, rq); ++ deactivate_task(p, rq, DEQUEUE_SLEEP); + else { +#ifdef CONFIG_SMP + /* @@ -8893,7 +8930,7 @@ index 000000000000..02e9eebab3d9 +unsigned long wait_task_inactive(struct task_struct *p, long match_state) +{ + int running, queued; -+ unsigned long flags; ++ struct rq_flags rf; + unsigned long ncsw; + struct rq *rq; + @@ -8922,14 +8959,14 @@ index 000000000000..02e9eebab3d9 + * lock now, to be *sure*. If we're wrong, we'll + * just go back and repeat. + */ -+ rq = task_rq_lock(p, &flags); ++ rq = task_rq_lock(p, &rf); + trace_sched_wait_task(p); + running = task_running(rq, p); + queued = task_on_rq_queued(p); + ncsw = 0; + if (!match_state || p->state == match_state) + ncsw = p->nvcsw | LONG_MIN; /* sets MSB */ -+ task_rq_unlock(rq, p, &flags); ++ task_rq_unlock(rq, p, &rf); + + /* + * If it changed from the expected state, bail out now. @@ -9172,9 +9209,9 @@ index 000000000000..02e9eebab3d9 + __schedstat_inc(rq->ttwu_count); +} + -+static inline void ttwu_activate(struct rq *rq, struct task_struct *p) ++static inline void ttwu_activate(struct rq *rq, struct task_struct *p, int en_flags) +{ -+ activate_task(p, rq); ++ activate_task(p, rq, en_flags); + + /* if a worker is waking up, notify the workqueue */ + if (p->flags & PF_WQ_WORKER) @@ -9203,14 +9240,19 @@ index 000000000000..02e9eebab3d9 +static void +ttwu_do_activate(struct rq *rq, struct task_struct *p, int wake_flags) +{ ++ int en_flags = ENQUEUE_WAKEUP; ++ + lockdep_assert_held(rq->lock); + +#ifdef CONFIG_SMP + if (p->sched_contributes_to_load) + rq->nr_uninterruptible--; ++ ++ if (wake_flags & WF_MIGRATED) ++ en_flags |= ENQUEUE_MIGRATED; +#endif + -+ ttwu_activate(rq, p); ++ ttwu_activate(rq, p, en_flags); + ttwu_do_wakeup(rq, p, wake_flags); +} + @@ -9225,12 +9267,12 @@ index 000000000000..02e9eebab3d9 + struct rq *rq; + int ret = 0; + -+ rq = __task_rq_lock(p); ++ rq = __task_rq_lock(p, NULL); + if (likely(task_on_rq_queued(p))) { + ttwu_do_wakeup(rq, p, wake_flags); + ret = 1; + } -+ __task_rq_unlock(rq); ++ __task_rq_unlock(rq, NULL); + + return ret; +} @@ -9241,17 +9283,17 @@ index 000000000000..02e9eebab3d9 + struct rq *rq = this_rq(); + struct llist_node *llist = llist_del_all(&rq->wake_list); + struct task_struct *p, *t; -+ unsigned long flags; ++ struct rq_flags rf; + + if (!llist) + return; + -+ rq_lock_irqsave(rq, &flags); ++ rq_lock_irqsave(rq, &rf); + + llist_for_each_entry_safe(p, t, llist, wake_entry) + ttwu_do_activate(rq, p, 0); + -+ rq_unlock_irqrestore(rq, &flags); ++ rq_unlock_irqrestore(rq, &rf); +} + +void scheduler_ipi(void) @@ -9299,7 +9341,7 @@ index 000000000000..02e9eebab3d9 +void wake_up_if_idle(int cpu) +{ + struct rq *rq = cpu_rq(cpu); -+ unsigned long flags; ++ struct rq_flags rf; + + rcu_read_lock(); + @@ -9309,11 +9351,11 @@ index 000000000000..02e9eebab3d9 + if (set_nr_if_polling(rq->idle)) { + trace_sched_wake_idle_without_ipi(cpu); + } else { -+ rq_lock_irqsave(rq, &flags); ++ rq_lock_irqsave(rq, &rf); + if (likely(is_idle_task(rq->curr))) + smp_sched_reschedule(cpu); + /* Else cpu is not in idle, do nothing here */ -+ rq_unlock_irqrestore(rq, &flags); ++ rq_unlock_irqrestore(rq, &rf); + } + +out: @@ -9515,8 +9557,11 @@ index 000000000000..02e9eebab3d9 + } + + cpu = select_best_cpu(p); -+ if (task_cpu(p) != cpu) ++ if (task_cpu(p) != cpu) { ++ wake_flags |= WF_MIGRATED; ++ psi_ttwu_dequeue(p); + set_task_cpu(p, cpu); ++ } + +#else /* CONFIG_SMP */ + @@ -9576,7 +9621,7 @@ index 000000000000..02e9eebab3d9 + delayacct_blkio_end(p); + atomic_dec(&rq->nr_iowait); + } -+ ttwu_activate(rq, p); ++ ttwu_activate(rq, p, ENQUEUE_WAKEUP); + } + + ttwu_do_wakeup(rq, p, 0); @@ -9921,7 +9966,7 @@ index 000000000000..02e9eebab3d9 + time_slice_expired(p, new_rq); + try_preempt(p, new_rq); + } -+ activate_task(p, new_rq); ++ activate_task(p, new_rq, 0); + double_rq_unlock(rq, new_rq); + raw_spin_unlock_irqrestore(&p->pi_lock, flags); +} @@ -10085,7 +10130,7 @@ index 000000000000..02e9eebab3d9 + raw_spin_unlock(rq->lock); + + raw_spin_lock(&prev->pi_lock); -+ rq = __task_rq_lock(prev); ++ rq = __task_rq_lock(prev, NULL); + /* Check that someone else hasn't already queued prev */ + if (likely(!task_queued(prev))) { + enqueue_task(rq, prev, 0); @@ -10366,6 +10411,18 @@ index 000000000000..02e9eebab3d9 +} + +/* ++ * Consumers of these two interfaces, like for example the cpufreq menu ++ * governor are using nonsensical data. Boosting frequency for a CPU that has ++ * IO-wait which might not even end up running the task when it does become ++ * runnable. ++ */ ++ ++unsigned long nr_iowait_cpu(int cpu) ++{ ++ return atomic_read(&cpu_rq(cpu)->nr_iowait); ++} ++ ++/* + * IO-wait accounting, and how its mostly bollocks (on SMP). + * + * The idea behind IO-wait account is to account the idle time that we could @@ -10400,41 +10457,16 @@ index 000000000000..02e9eebab3d9 + unsigned long i, sum = 0; + + for_each_possible_cpu(i) -+ sum += atomic_read(&cpu_rq(i)->nr_iowait); ++ sum += nr_iowait_cpu(i); + + return sum; +} + -+/* -+ * Consumers of these two interfaces, like for example the cpufreq menu -+ * governor are using nonsensical data. Boosting frequency for a CPU that has -+ * IO-wait which might not even end up running the task when it does become -+ * runnable. -+ */ -+ -+unsigned long nr_iowait_cpu(int cpu) -+{ -+ struct rq *this = cpu_rq(cpu); -+ return atomic_read(&this->nr_iowait); -+} -+ +unsigned long nr_active(void) +{ + return nr_running() + nr_uninterruptible(); +} + -+/* -+ * I/O wait is the number of running or queued tasks with their ->rq pointer -+ * set to this cpu as being the CPU they're more likely to run on. -+ */ -+void get_iowait_load(unsigned long *nr_waiters, unsigned long *load) -+{ -+ struct rq *rq = this_rq(); -+ -+ *nr_waiters = atomic_read(&rq->nr_iowait); -+ *load = rq_load(rq); -+} -+ +/* Variables and functions for calc_load */ +static unsigned long calc_load_update; +unsigned long avenrun[3]; @@ -10455,18 +10487,6 @@ index 000000000000..02e9eebab3d9 + loads[2] = (avenrun[2] + offset) << shift; +} + -+static unsigned long -+calc_load(unsigned long load, unsigned long exp, unsigned long active) -+{ -+ unsigned long newload; -+ -+ newload = load * exp + active * (FIXED_1 - exp); -+ if (active >= load) -+ newload += FIXED_1-1; -+ -+ return newload / FIXED_1; -+} -+ +/* + * calc_load - update the avenrun load estimates every LOAD_FREQ seconds. + */ @@ -10485,6 +10505,75 @@ index 000000000000..02e9eebab3d9 + calc_load_update = jiffies + LOAD_FREQ; +} + ++/** ++ * fixed_power_int - compute: x^n, in O(log n) time ++ * ++ * @x: base of the power ++ * @frac_bits: fractional bits of @x ++ * @n: power to raise @x to. ++ * ++ * By exploiting the relation between the definition of the natural power ++ * function: x^n := x*x*...*x (x multiplied by itself for n times), and ++ * the binary encoding of numbers used by computers: n := \Sum n_i * 2^i, ++ * (where: n_i \elem {0, 1}, the binary vector representing n), ++ * we find: x^n := x^(\Sum n_i * 2^i) := \Prod x^(n_i * 2^i), which is ++ * of course trivially computable in O(log_2 n), the length of our binary ++ * vector. ++ */ ++static unsigned long ++fixed_power_int(unsigned long x, unsigned int frac_bits, unsigned int n) ++{ ++ unsigned long result = 1UL << frac_bits; ++ ++ if (n) { ++ for (;;) { ++ if (n & 1) { ++ result *= x; ++ result += 1UL << (frac_bits - 1); ++ result >>= frac_bits; ++ } ++ n >>= 1; ++ if (!n) ++ break; ++ x *= x; ++ x += 1UL << (frac_bits - 1); ++ x >>= frac_bits; ++ } ++ } ++ ++ return result; ++} ++ ++/* ++ * a1 = a0 * e + a * (1 - e) ++ * ++ * a2 = a1 * e + a * (1 - e) ++ * = (a0 * e + a * (1 - e)) * e + a * (1 - e) ++ * = a0 * e^2 + a * (1 - e) * (1 + e) ++ * ++ * a3 = a2 * e + a * (1 - e) ++ * = (a0 * e^2 + a * (1 - e) * (1 + e)) * e + a * (1 - e) ++ * = a0 * e^3 + a * (1 - e) * (1 + e + e^2) ++ * ++ * ... ++ * ++ * an = a0 * e^n + a * (1 - e) * (1 + e + ... + e^n-1) [1] ++ * = a0 * e^n + a * (1 - e) * (1 - e^n)/(1 - e) ++ * = a0 * e^n + a * (1 - e^n) ++ * ++ * [1] application of the geometric series: ++ * ++ * n 1 - x^(n+1) ++ * S_n := \Sum x^i = ------------- ++ * i=0 1 - x ++ */ ++unsigned long ++calc_load_n(unsigned long load, unsigned long exp, ++ unsigned long active, unsigned int n) ++{ ++ return calc_load(load, fixed_power_int(exp, FSHIFT, n), active); ++} ++ +DEFINE_PER_CPU(struct kernel_stat, kstat); +DEFINE_PER_CPU(struct kernel_cpustat, kernel_cpustat); + @@ -10698,7 +10787,7 @@ index 000000000000..02e9eebab3d9 + */ +unsigned long long task_sched_runtime(struct task_struct *p) +{ -+ unsigned long flags; ++ struct rq_flags rf; + struct rq *rq; + u64 ns; + @@ -10718,9 +10807,9 @@ index 000000000000..02e9eebab3d9 + return tsk_seruntime(p); +#endif + -+ rq = task_rq_lock(p, &flags); ++ rq = task_rq_lock(p, &rf); + ns = p->sched_time + do_task_delta_exec(p, rq); -+ task_rq_unlock(rq, p, &flags); ++ task_rq_unlock(rq, p, &rf); + + return ns; +} @@ -10884,7 +10973,7 @@ index 000000000000..02e9eebab3d9 + task_tick(rq); + +out_unlock: -+ rq_unlock_irq(rq); ++ rq_unlock_irq(rq, NULL); + +out_requeue: + /* @@ -10956,6 +11045,7 @@ index 000000000000..02e9eebab3d9 + task_tick(rq); + rq->last_scheduler_tick = rq->last_jiffy; + rq->last_tick = rq->clock; ++ psi_task_tick(rq); + perf_event_task_tick(); + sched_stop_tick(rq, cpu); +} @@ -11413,7 +11503,7 @@ index 000000000000..02e9eebab3d9 + if (unlikely(preempt && prev != idle && !test_tsk_need_resched(prev))) { + rq->preempt = NULL; + clear_preempt_need_resched(); -+ rq_unlock_irq(rq); ++ rq_unlock_irq(rq, NULL); + return; + } + rq->preempt = NULL; @@ -11801,7 +11891,7 @@ index 000000000000..02e9eebab3d9 + if (p->pi_top_task == pi_task && prio == p->prio) + return; + -+ rq = __task_rq_lock(p); ++ rq = __task_rq_lock(p, NULL); + update_rq_clock(rq); + /* + * Set under pi_lock && rq->lock, such that the value can be used under @@ -11852,7 +11942,7 @@ index 000000000000..02e9eebab3d9 + try_preempt(p, rq); + } +out_unlock: -+ __task_rq_unlock(rq); ++ __task_rq_unlock(rq, NULL); +} +#else +static inline int rt_effective_prio(struct task_struct *p, int prio) @@ -11873,7 +11963,7 @@ index 000000000000..02e9eebab3d9 +void set_user_nice(struct task_struct *p, long nice) +{ + int new_static, old_static; -+ unsigned long flags; ++ struct rq_flags rf; + struct rq *rq; + + if (task_nice(p) == nice || nice < MIN_NICE || nice > MAX_NICE) @@ -11883,7 +11973,7 @@ index 000000000000..02e9eebab3d9 + * We have to be careful, if called from sys_setpriority(), + * the task might be in the middle of scheduling on another CPU. + */ -+ rq = task_rq_lock(p, &flags); ++ rq = task_rq_lock(p, &rf); + update_rq_clock(rq); + + /* @@ -11913,7 +12003,7 @@ index 000000000000..02e9eebab3d9 + resched_task(p); + } +out_unlock: -+ task_rq_unlock(rq, p, &flags); ++ task_rq_unlock(rq, p, &rf); +} +EXPORT_SYMBOL(set_user_nice); + @@ -12097,7 +12187,8 @@ index 000000000000..02e9eebab3d9 + bool user, bool pi) +{ + int retval, policy = attr->sched_policy, oldpolicy = -1, priority = attr->sched_priority; -+ unsigned long flags, rlim_rtprio = 0; ++ unsigned long rlim_rtprio = 0; ++ struct rq_flags rf; + int reset_on_fork; + struct rq *rq; + @@ -12214,14 +12305,14 @@ index 000000000000..02e9eebab3d9 + * To be able to change p->policy safely, the runqueue lock must be + * held. + */ -+ rq = task_rq_lock(p, &flags); ++ rq = task_rq_lock(p, &rf); + update_rq_clock(rq); + + /* + * Changing the policy of the stop threads its a very bad idea: + */ + if (p == rq->stop) { -+ task_rq_unlock(rq, p, &flags); ++ task_rq_unlock(rq, p, &rf); + return -EINVAL; + } + @@ -12230,20 +12321,20 @@ index 000000000000..02e9eebab3d9 + */ + if (unlikely(policy == p->policy && (!is_rt_policy(policy) || + priority == p->rt_priority))) { -+ task_rq_unlock(rq, p, &flags); ++ task_rq_unlock(rq, p, &rf); + return 0; + } + + /* Re-check policy now with rq lock held */ + if (unlikely(oldpolicy != -1 && oldpolicy != p->policy)) { + policy = oldpolicy = -1; -+ task_rq_unlock(rq, p, &flags); ++ task_rq_unlock(rq, p, &rf); + goto recheck; + } + p->sched_reset_on_fork = reset_on_fork; + + __setscheduler(p, rq, policy, priority, pi); -+ task_rq_unlock(rq, p, &flags); ++ task_rq_unlock(rq, p, &rf); + + if (pi) + rt_mutex_adjust_pi(p); @@ -13076,7 +13167,7 @@ index 000000000000..02e9eebab3d9 +{ + struct task_struct *p; + unsigned int time_slice; -+ unsigned long flags; ++ struct rq_flags rf; + struct rq *rq; + int retval; + @@ -13093,9 +13184,9 @@ index 000000000000..02e9eebab3d9 + if (retval) + goto out_unlock; + -+ rq = task_rq_lock(p, &flags); ++ rq = task_rq_lock(p, &rf); + time_slice = p->policy == SCHED_FIFO ? 0 : MS_TO_NS(task_timeslice(p)); -+ task_rq_unlock(rq, p, &flags); ++ task_rq_unlock(rq, p, &rf); + + rcu_read_unlock(); + *t = ns_to_timespec64(time_slice); @@ -13118,7 +13209,7 @@ index 000000000000..02e9eebab3d9 + * an error code. + */ +SYSCALL_DEFINE2(sched_rr_get_interval, pid_t, pid, -+ struct timespec __user *, interval) ++ struct __kernel_timespec __user *, interval) +{ + struct timespec64 t; + int retval = sched_rr_get_interval(pid, &t); @@ -13129,16 +13220,16 @@ index 000000000000..02e9eebab3d9 + return retval; +} + -+#ifdef CONFIG_COMPAT ++#ifdef CONFIG_COMPAT_32BIT_TIME +COMPAT_SYSCALL_DEFINE2(sched_rr_get_interval, + compat_pid_t, pid, -+ struct compat_timespec __user *, interval) ++ struct old_timespec32 __user *, interval) +{ + struct timespec64 t; + int retval = sched_rr_get_interval(pid, &t); + + if (retval == 0) -+ retval = compat_put_timespec64(&t, interval); ++ retval = put_old_timespec32(&t, interval); + return retval; +} +#endif @@ -13268,10 +13359,10 @@ index 000000000000..02e9eebab3d9 + if (needs_other_cpu(p, task_cpu(p))) { + struct rq *rq; + -+ rq = __task_rq_lock(p); ++ rq = __task_rq_lock(p, NULL); + set_task_cpu(p, valid_task_cpu(p)); + resched_task(p); -+ __task_rq_unlock(rq); ++ __task_rq_unlock(rq, NULL); + } +} +#endif @@ -13362,12 +13453,12 @@ index 000000000000..02e9eebab3d9 +void resched_cpu(int cpu) +{ + struct rq *rq = cpu_rq(cpu); -+ unsigned long flags; ++ struct rq_flags rf; + -+ rq_lock_irqsave(rq, &flags); ++ rq_lock_irqsave(rq, &rf); + if (cpu_online(cpu) || cpu == smp_processor_id()) + resched_curr(rq); -+ rq_unlock_irqrestore(rq, &flags); ++ rq_unlock_irqrestore(rq, &rf); +} + +#ifdef CONFIG_SMP @@ -13487,11 +13578,11 @@ index 000000000000..02e9eebab3d9 + const struct cpumask *cpu_valid_mask = cpu_active_mask; + bool queued = false, running_wrong = false, kthread; + struct cpumask old_mask; -+ unsigned long flags; ++ struct rq_flags rf; + int cpu, ret = 0; + struct rq *rq; + -+ rq = task_rq_lock(p, &flags); ++ rq = task_rq_lock(p, &rf); + update_rq_clock(rq); + + kthread = !!(p->flags & PF_KTHREAD); @@ -13569,7 +13660,7 @@ index 000000000000..02e9eebab3d9 + if (running_wrong) + preempt_disable(); +out: -+ task_rq_unlock(rq, p, &flags); ++ task_rq_unlock(rq, p, &rf); + + if (running_wrong) { + __schedule(true); @@ -13997,7 +14088,7 @@ index 000000000000..02e9eebab3d9 +int sched_cpu_activate(unsigned int cpu) +{ + struct rq *rq = cpu_rq(cpu); -+ unsigned long flags; ++ struct rq_flags rf; + + set_cpu_active(cpu, true); + @@ -14015,13 +14106,13 @@ index 000000000000..02e9eebab3d9 + * 2) At runtime, if cpuset_cpu_active() fails to rebuild the + * domains. + */ -+ rq_lock_irqsave(rq, &flags); ++ rq_lock_irqsave(rq, &rf); + if (rq->rd) { + BUG_ON(!cpumask_test_cpu(cpu, rq->rd->span)); + set_rq_online(rq); + } + unbind_zero(cpu); -+ rq_unlock_irqrestore(rq, &flags); ++ rq_unlock_irqrestore(rq, &rf); + + return 0; +} @@ -14130,7 +14221,7 @@ index 000000000000..02e9eebab3d9 + +void __init sched_init_smp(void) +{ -+ struct rq *rq, *other_rq, *leader; ++ struct rq *rq, *other_rq, *leader = cpu_rq(0); + struct sched_domain *sd; + int cpu, other_cpu, i; +#ifdef CONFIG_SCHED_SMT @@ -14141,11 +14232,14 @@ index 000000000000..02e9eebab3d9 + /* + * There's no userspace yet to cause hotplug operations; hence all the + * cpu masks are stable and all blatant races in the below code cannot -+ * happen. ++ * happen. The hotplug lock is nevertheless taken to satisfy lockdep, ++ * but there won't be any contention on it. + */ ++ cpus_read_lock(); + mutex_lock(&sched_domains_mutex); + sched_init_domains(cpu_active_mask); + mutex_unlock(&sched_domains_mutex); ++ cpus_read_unlock(); + + /* Move init over to a non-isolated CPU */ + if (set_cpus_allowed_ptr(current, housekeeping_cpumask(HK_FLAG_DOMAIN)) < 0) @@ -14170,10 +14264,11 @@ index 000000000000..02e9eebab3d9 + for_each_domain(cpu, sd) { + if (sd->level > SD_LV_MC) + continue; -+ leader = NULL; ++ if (rqshare != RQSHARE_ALL) ++ leader = NULL; + /* Set locality to local node if not already found lower */ + for_each_cpu(other_cpu, sched_domain_span(sd)) { -+ if (rqshare == RQSHARE_SMP) { ++ if (rqshare >= RQSHARE_SMP) { + other_rq = cpu_rq(other_cpu); + + /* Set the smp_leader to the first CPU */ @@ -14380,21 +14475,26 @@ index 000000000000..02e9eebab3d9 + } + } + switch (rqshare) { ++ case RQSHARE_ALL: ++ /* This should only ever read 1 */ ++ printk(KERN_INFO "MuQSS runqueue share type ALL total runqueues: %d\n", ++ total_runqueues); ++ break; + case RQSHARE_SMP: + printk(KERN_INFO "MuQSS runqueue share type SMP total runqueues: %d\n", -+ total_runqueues); ++ total_runqueues); + break; + case RQSHARE_MC: + printk(KERN_INFO "MuQSS runqueue share type MC total runqueues: %d\n", -+ total_runqueues); ++ total_runqueues); + break; + case RQSHARE_SMT: + printk(KERN_INFO "MuQSS runqueue share type SMT total runqueues: %d\n", -+ total_runqueues); ++ total_runqueues); + break; + case RQSHARE_NONE: -+ printk(KERN_INFO "MuQSS runqueue share type none total runqueues: %d\n", -+ total_runqueues); ++ printk(KERN_INFO "MuQSS runqueue share type NONE total runqueues: %d\n", ++ total_runqueues); + break; + } + @@ -14554,6 +14654,8 @@ index 000000000000..02e9eebab3d9 +#endif /* SMP */ + + init_schedstats(); ++ ++ psi_init(); +} + +#ifdef CONFIG_DEBUG_ATOMIC_SLEEP @@ -14635,7 +14737,7 @@ index 000000000000..02e9eebab3d9 +static inline void normalise_rt_tasks(void) +{ + struct task_struct *g, *p; -+ unsigned long flags; ++ struct rq_flags rf; + struct rq *rq; + + read_lock(&tasklist_lock); @@ -14649,9 +14751,9 @@ index 000000000000..02e9eebab3d9 + if (!rt_task(p) && !iso_task(p)) + continue; + -+ rq = task_rq_lock(p, &flags); ++ rq = task_rq_lock(p, &rf); + __setscheduler(p, rq, SCHED_NORMAL, 0, false); -+ task_rq_unlock(rq, p, &flags); ++ task_rq_unlock(rq, p, &rf); + } + read_unlock(&tasklist_lock); +} @@ -14881,29 +14983,30 @@ index 000000000000..02e9eebab3d9 +#undef CREATE_TRACE_POINTS diff --git a/kernel/sched/MuQSS.h b/kernel/sched/MuQSS.h new file mode 100644 -index 000000000000..e3687ebaeb71 +index 000000000000..78642f59b3f2 --- /dev/null +++ b/kernel/sched/MuQSS.h -@@ -0,0 +1,881 @@ +@@ -0,0 +1,917 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef MUQSS_SCHED_H +#define MUQSS_SCHED_H + +#include <linux/sched/clock.h> -+#include <linux/sched/wake_q.h> -+#include <linux/sched/signal.h> -+#include <linux/sched/mm.h> +#include <linux/sched/cpufreq.h> -+#include <linux/sched/stat.h> -+#include <linux/sched/nohz.h> ++#include <linux/sched/cputime.h> +#include <linux/sched/debug.h> +#include <linux/sched/hotplug.h> ++#include <linux/sched/init.h> ++#include <linux/sched/isolation.h> ++#include <linux/sched/mm.h> ++#include <linux/sched/nohz.h> ++#include <linux/sched/signal.h> ++#include <linux/sched/smt.h> ++#include <linux/sched/stat.h> +#include <linux/sched/task.h> +#include <linux/sched/task_stack.h> +#include <linux/sched/topology.h> -+#include <linux/sched/cputime.h> -+#include <linux/sched/init.h> -+#include <linux/sched/isolation.h> ++#include <linux/sched/wake_q.h> + +#include <uapi/linux/sched/types.h> + @@ -14917,10 +15020,10 @@ index 000000000000..e3687ebaeb71 +#include <linux/kthread.h> +#include <linux/livepatch.h> +#include <linux/proc_fs.h> ++#include <linux/psi.h> +#include <linux/sched.h> +#include <linux/slab.h> +#include <linux/skip_list.h> -+#include <linux/stackprotector.h> +#include <linux/stop_machine.h> +#include <linux/suspend.h> +#include <linux/swait.h> @@ -14946,10 +15049,6 @@ index 000000000000..e3687ebaeb71 + +struct rq; + -+#if defined(CONFIG_IRQ_TIME_ACCOUNTING) || defined(CONFIG_PARAVIRT_TIME_ACCOUNTING) -+#define HAVE_SCHED_AVG_IRQ -+#endif -+ +#ifdef CONFIG_SMP + +static inline bool sched_asym_prefer(int a, int b) @@ -14972,8 +15071,12 @@ index 000000000000..e3687ebaeb71 + cpumask_var_t span; + cpumask_var_t online; + -+ /* Indicate more than one runnable task for any CPU */ -+ bool overload; ++ /* ++ * Indicate pullable load on at least one CPU, e.g: ++ * - More than one runnable task ++ * - Running task is misfit ++ */ ++ int overload; + + /* + * The bit corresponding to a CPU gets set here if such CPU has more @@ -15064,7 +15167,7 @@ index 000000000000..e3687ebaeb71 + + u64 load_update; /* When we last updated load */ + unsigned long load_avg; /* Rolling load average */ -+#ifdef HAVE_SCHED_AVG_IRQ ++#ifdef CONFIG_HAVE_SCHED_AVG_IRQ + u64 irq_load_update; /* When we last updated IRQ load */ + unsigned long irq_load_avg; /* Rolling IRQ load average */ +#endif @@ -15161,6 +15264,10 @@ index 000000000000..e3687ebaeb71 +#endif +}; + ++struct rq_flags { ++ unsigned long flags; ++}; ++ +#ifdef CONFIG_SMP +struct rq *cpu_rq(int cpu); +#endif @@ -15193,6 +15300,16 @@ index 000000000000..e3687ebaeb71 +#endif +} + ++static inline int task_on_rq_queued(struct task_struct *p) ++{ ++ return p->on_rq == TASK_ON_RQ_QUEUED; ++} ++ ++static inline int task_on_rq_migrating(struct task_struct *p) ++{ ++ return p->on_rq == TASK_ON_RQ_MIGRATING; ++} ++ +static inline void rq_lock(struct rq *rq) + __acquires(rq->lock) +{ @@ -15211,51 +15328,51 @@ index 000000000000..e3687ebaeb71 + raw_spin_lock_irq(rq->lock); +} + -+static inline void rq_unlock_irq(struct rq *rq) ++static inline void rq_unlock_irq(struct rq *rq, struct rq_flags __always_unused *rf) + __releases(rq->lock) +{ + raw_spin_unlock_irq(rq->lock); +} + -+static inline void rq_lock_irqsave(struct rq *rq, unsigned long *flags) ++static inline void rq_lock_irqsave(struct rq *rq, struct rq_flags *rf) + __acquires(rq->lock) +{ -+ raw_spin_lock_irqsave(rq->lock, *flags); ++ raw_spin_lock_irqsave(rq->lock, rf->flags); +} + -+static inline void rq_unlock_irqrestore(struct rq *rq, unsigned long *flags) ++static inline void rq_unlock_irqrestore(struct rq *rq, struct rq_flags *rf) + __releases(rq->lock) +{ -+ raw_spin_unlock_irqrestore(rq->lock, *flags); ++ raw_spin_unlock_irqrestore(rq->lock, rf->flags); +} + -+static inline struct rq *task_rq_lock(struct task_struct *p, unsigned long *flags) ++static inline struct rq *task_rq_lock(struct task_struct *p, struct rq_flags *rf) + __acquires(p->pi_lock) + __acquires(rq->lock) +{ + struct rq *rq; + + while (42) { -+ raw_spin_lock_irqsave(&p->pi_lock, *flags); ++ raw_spin_lock_irqsave(&p->pi_lock, rf->flags); + rq = task_rq(p); + raw_spin_lock(rq->lock); + if (likely(rq == task_rq(p))) + break; + raw_spin_unlock(rq->lock); -+ raw_spin_unlock_irqrestore(&p->pi_lock, *flags); ++ raw_spin_unlock_irqrestore(&p->pi_lock, rf->flags); + } + return rq; +} + -+static inline void task_rq_unlock(struct rq *rq, struct task_struct *p, unsigned long *flags) ++static inline void task_rq_unlock(struct rq *rq, struct task_struct *p, struct rq_flags *rf) + __releases(rq->lock) + __releases(p->pi_lock) +{ + rq_unlock(rq); -+ raw_spin_unlock_irqrestore(&p->pi_lock, *flags); ++ raw_spin_unlock_irqrestore(&p->pi_lock, rf->flags); +} + -+static inline struct rq *__task_rq_lock(struct task_struct *p) ++static inline struct rq *__task_rq_lock(struct task_struct *p, struct rq_flags __always_unused *rf) + __acquires(rq->lock) +{ + struct rq *rq; @@ -15272,11 +15389,23 @@ index 000000000000..e3687ebaeb71 + return rq; +} + -+static inline void __task_rq_unlock(struct rq *rq) ++static inline void __task_rq_unlock(struct rq *rq, struct rq_flags __always_unused *rf) +{ + rq_unlock(rq); +} + ++static inline struct rq * ++this_rq_lock_irq(struct rq_flags *rf) ++ __acquires(rq->lock) ++{ ++ struct rq *rq; ++ ++ local_irq_disable(); ++ rq = this_rq(); ++ rq_lock(rq); ++ return rq; ++} ++ +/* + * {de,en}queue flags: Most not used on MuQSS. + * @@ -15296,10 +15425,18 @@ index 000000000000..e3687ebaeb71 + * + */ + ++#define DEQUEUE_SLEEP 0x01 +#define DEQUEUE_SAVE 0x02 /* matches ENQUEUE_RESTORE */ + ++#define ENQUEUE_WAKEUP 0x01 +#define ENQUEUE_RESTORE 0x02 + ++#ifdef CONFIG_SMP ++#define ENQUEUE_MIGRATED 0x40 ++#else ++#define ENQUEUE_MIGRATED 0x00 ++#endif ++ +static inline u64 __rq_clock_broken(struct rq *rq) +{ + return READ_ONCE(rq->clock); @@ -15407,10 +15544,11 @@ index 000000000000..e3687ebaeb71 + * CPU capacity of this group, SCHED_CAPACITY_SCALE being max capacity + * for a single CPU. + */ -+ unsigned long capacity; -+ unsigned long min_capacity; /* Min per-CPU capacity in group */ -+ unsigned long next_update; -+ int imbalance; /* XXX unrelated to capacity but shared group state */ ++ unsigned long capacity; ++ unsigned long min_capacity; /* Min per-CPU capacity in group */ ++ unsigned long max_capacity; /* Max per-CPU capacity in group */ ++ unsigned long next_update; ++ int imbalance; /* XXX unrelated to capacity but shared group state */ + +#ifdef CONFIG_SCHED_DEBUG + int id; @@ -15732,7 +15870,7 @@ index 000000000000..e3687ebaeb71 + return ret; +} + -+#ifdef HAVE_SCHED_AVG_IRQ ++#ifdef CONFIG_HAVE_SCHED_AVG_IRQ +static inline unsigned long cpu_util_irq(struct rq *rq) +{ + unsigned long ret = READ_ONCE(rq->irq_load_avg); @@ -15861,7 +15999,7 @@ index 0796f938c4f0..adae86c2c889 100644 task_cputime(p, &cputime.utime, &cputime.stime); diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c -index 16f84142f2f4..cf9343a7620d 100644 +index f5516bae0c1b..c14cd1bcdbd0 100644 --- a/kernel/sched/idle.c +++ b/kernel/sched/idle.c @@ -224,6 +224,8 @@ static void cpuidle_idle_call(void) @@ -15895,7 +16033,7 @@ index 16f84142f2f4..cf9343a7620d 100644 __current_clr_polling(); /* -@@ -368,6 +374,7 @@ void cpu_startup_entry(enum cpuhp_state state) +@@ -353,6 +359,7 @@ void cpu_startup_entry(enum cpuhp_state state) do_idle(); } @@ -15903,13 +16041,13 @@ index 16f84142f2f4..cf9343a7620d 100644 /* * idle-task scheduling class. */ -@@ -480,3 +487,4 @@ const struct sched_class idle_sched_class = { +@@ -465,3 +472,4 @@ const struct sched_class idle_sched_class = { .switched_to = switched_to_idle, .update_curr = update_curr_idle, }; +#endif /* CONFIG_SCHED_MUQSS */ diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index 9683f458aec7..6a65812cb262 100644 +index 4e524ab589c9..7d1309c5b238 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -2,6 +2,19 @@ @@ -15932,7 +16070,7 @@ index 9683f458aec7..6a65812cb262 100644 #include <linux/sched.h> #include <linux/sched/autogroup.h> -@@ -2244,3 +2257,30 @@ unsigned long scale_irq_capacity(unsigned long util, unsigned long irq, unsigned +@@ -2262,3 +2275,30 @@ unsigned long scale_irq_capacity(unsigned long util, unsigned long irq, unsigned return util; } #endif @@ -15964,7 +16102,7 @@ index 9683f458aec7..6a65812cb262 100644 +#endif +#endif /* CONFIG_SCHED_MUQSS */ diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c -index 505a41c42b96..47a053a38e26 100644 +index 8d7f15ba5916..c76ebb593eea 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -219,7 +219,11 @@ void rq_attach_root(struct rq *rq, struct root_domain *rd) @@ -16146,10 +16284,10 @@ index 000000000000..bf5c6e97e139 + l->entries--; +} diff --git a/kernel/sysctl.c b/kernel/sysctl.c -index cc02050fd0c4..7dac6885128e 100644 +index 5fc724e4e454..a16902f32e6a 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c -@@ -126,9 +126,17 @@ static int __maybe_unused one __read_only = 1; +@@ -127,9 +127,17 @@ static int __maybe_unused one __read_only = 1; static int __maybe_unused two __read_only = 2; static int __maybe_unused four __read_only = 4; static unsigned long one_ul __read_only = 1; @@ -16170,7 +16308,7 @@ index cc02050fd0c4..7dac6885128e 100644 static int ten_thousand __read_only = 10000; #endif #ifdef CONFIG_PERF_EVENTS -@@ -295,7 +303,7 @@ static struct ctl_table sysctl_base_table[] = { +@@ -296,7 +304,7 @@ static struct ctl_table sysctl_base_table[] = { { } }; @@ -16179,7 +16317,7 @@ index cc02050fd0c4..7dac6885128e 100644 static int min_sched_granularity_ns __read_only = 100000; /* 100 usecs */ static int max_sched_granularity_ns __read_only = NSEC_PER_SEC; /* 1 second */ static int min_wakeup_granularity_ns __read_only; /* 0 usecs */ -@@ -312,6 +320,7 @@ static int max_extfrag_threshold = 1000; +@@ -313,6 +321,7 @@ static int max_extfrag_threshold = 1000; #endif static struct ctl_table kern_table[] = { @@ -16187,7 +16325,7 @@ index cc02050fd0c4..7dac6885128e 100644 { .procname = "sched_child_runs_first", .data = &sysctl_sched_child_runs_first, -@@ -466,6 +475,7 @@ static struct ctl_table kern_table[] = { +@@ -467,6 +476,7 @@ static struct ctl_table kern_table[] = { .extra1 = &one, }, #endif @@ -16195,7 +16333,7 @@ index cc02050fd0c4..7dac6885128e 100644 #ifdef CONFIG_PROVE_LOCKING { .procname = "prove_locking", -@@ -1031,6 +1041,62 @@ static struct ctl_table kern_table[] = { +@@ -1032,6 +1042,62 @@ static struct ctl_table kern_table[] = { .proc_handler = proc_dointvec, }, #endif @@ -16275,7 +16413,7 @@ index 8c0e4092f661..faf30b861235 100644 /** * clockevents_increase_min_delta - raise minimum delta of a clock event device diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c -index e1a549c9e399..f767487c8b44 100644 +index 9cdd74bd2d27..0f7f27adf16b 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -2026,3 +2026,117 @@ int __sched schedule_hrtimeout(ktime_t *expires, @@ -16397,7 +16535,7 @@ index e1a549c9e399..f767487c8b44 100644 +} +EXPORT_SYMBOL(schedule_msec_hrtimeout_uninterruptible); diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c -index ce32cf741b25..2c6a78e6930f 100644 +index 8f0644af40be..e3481bf47b94 100644 --- a/kernel/time/posix-cpu-timers.c +++ b/kernel/time/posix-cpu-timers.c @@ -829,7 +829,7 @@ static void check_thread_timers(struct task_struct *tsk, @@ -16427,7 +16565,7 @@ index ce32cf741b25..2c6a78e6930f 100644 /* * At the soft limit, send a SIGXCPU every second. */ -@@ -1094,7 +1094,7 @@ static inline int fastpath_timer_check(struct task_struct *tsk) +@@ -1091,7 +1091,7 @@ static inline int fastpath_timer_check(struct task_struct *tsk) struct task_cputime task_sample; task_cputime(tsk, &task_sample.utime, &task_sample.stime); @@ -16567,10 +16705,10 @@ index 11e9daa4a568..4c4e1d5bdf42 100644 struct wakeup_test_data *x = data; diff --git a/mm/vmscan.c b/mm/vmscan.c -index c5ef7240cbcb..3f04308b6445 100644 +index 62ac0c488624..f11656681f7b 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c -@@ -159,7 +159,7 @@ struct scan_control { +@@ -160,7 +160,7 @@ struct scan_control { /* * From 0 .. 100. Higher means more swappy. */ @@ -16580,7 +16718,7 @@ index c5ef7240cbcb..3f04308b6445 100644 * The total number of pages which are beyond the high watermark within all * zones. diff --git a/net/core/pktgen.c b/net/core/pktgen.c -index 7f6938405fa1..369ad3eca2a3 100644 +index 6ac919847ce6..37bcc0bafe51 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -1900,7 +1900,7 @@ static void pktgen_mark_device(const struct pktgen_net *pn, const char *ifname) @@ -16725,10 +16863,10 @@ index 643863bb32e0..fc318d71a8a3 100644 } diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c -index 461d951917c0..b5eb57ba4af4 100644 +index a5178845065b..e5ac94b38742 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c -@@ -131,7 +131,7 @@ static void dapm_assert_locked(struct snd_soc_dapm_context *dapm) +@@ -130,7 +130,7 @@ static void dapm_assert_locked(struct snd_soc_dapm_context *dapm) static void pop_wait(u32 pop_time) { if (pop_time) |