Linux std kernel upgrade to align with CentOS 8
(cherry picked from commit 9111cf409030d92d1ed0d48b00d6ad64f4399bc4) (re-submit of patch: https://review.opendev.org/#/c/710919/ starlingx/integ into starlingx/kernel) The std kernel is upgraded from centos7.6 to centos8 and is divided into two parts: 1.kernel patches After analysis of the code and patch, there are nine patches on centos7.6 to update to centos8. Detailed patch analysis can be found at https://github.com/StarlingX-Neusoft/Centos8/blob/master/ Kernel_Upgrade_to_4.18-CentOS8_Analysis.xlsx documentation [STX Kernel-std Patches Details] sheet. The remaining patches are as follows: Patch40002: Notification-of-death-of-arbitrary-processes.patch Patch40004: PCI-Add-ACS-quirk-for-Intel-Fortville-NICs.patch Patch40005: affine-compute-kernel-threads.patch Patch40006: Affine-irqs-and-workqueues-with-kthread_cpus.patch Patch40007: Make-kernel-start-eth-devices-at-offset.patch Patch40008: intel-iommu-allow-ignoring-Ethernet-device-RMRR-with.patch Patch40022: US101216-IMA-support-in-Titanium-kernel.patch Patch40023: US103091-IMA-System-Configuration.patch Patch40026: turn-off-write-same-in-smartqpi-driver.patch 2.kernel config Currently, We use the STX version of the kernel config unmodified from what we used for CentOS 7.6. 3. The -j "% (nproc)" parameter was not added to lines 1496 and 1499 of the original spec file, because this parameter causes compilation errors. pushd tools/iio/ %{make} popd pushd tools/gpio/ %{make} popd The above patches and config can be successfully built in the build container centos8. Change-Id: Ic75feda21eee0530a430658b3368fbdf47767e36 Story: 2006728 Task: 37150 Depends-On: https://review.opendev.org/710907 Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com> Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com> Signed-off-by: Dongqi Chen <chen.dq@neusoft.com>
This commit is contained in:
		 Dongqi Chen
					Dongqi Chen
				
			
				
					committed by
					
						 Lin Shuicheng
						Lin Shuicheng
					
				
			
			
				
	
			
			
			 Lin Shuicheng
						Lin Shuicheng
					
				
			
						parent
						
							f6ed6f5843
						
					
				
				
					commit
					d27f1ee36e
				
			| @@ -1,4 +1,4 @@ | ||||
| COPY_LIST="files/*" | ||||
| TIS_PATCH_VER=4 | ||||
| TIS_PATCH_VER=1 | ||||
| BUILD_IS_BIG=11 | ||||
| BUILD_IS_SLOW=12 | ||||
|   | ||||
| @@ -5,84 +5,82 @@ Subject: [PATCH] Build logic and sources for TiC | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| Signed-off-by: zhao.shuai <zhaos@neusoft.com> | ||||
| Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com> | ||||
| Signed-off-by: Robin Lu <bin1.lu@intel.com> | ||||
|  | ||||
| --- | ||||
|  SPECS/kernel.spec | 73 ++++++++++++++++++++++++++++++++++++++--------- | ||||
|  1 file changed, 60 insertions(+), 13 deletions(-) | ||||
|  SPECS/kernel.spec | 78 ++++++++++++++++++++++++++++++++++++++--------- | ||||
|  1 file changed, 64 insertions(+), 14 deletions(-) | ||||
|  | ||||
| diff --git a/SPECS/kernel.spec b/SPECS/kernel.spec | ||||
| index 852fd10..e42177e 100644 | ||||
| index b11034f..1927d5a 100644 | ||||
| --- a/SPECS/kernel.spec | ||||
| +++ b/SPECS/kernel.spec | ||||
| @@ -5,7 +5,8 @@ Summary: The Linux kernel | ||||
| @@ -3,6 +3,8 @@ | ||||
|   | ||||
|  %define dist .el7 | ||||
|  Summary: The Linux kernel | ||||
|   | ||||
| -# % define buildid .local | ||||
| +%define dist .el8_0 | ||||
| + | ||||
|  # For a kernel released for public testing, released_kernel should be 1. | ||||
|  # For internal testing builds during development, it should be 0. | ||||
|  %global released_kernel 1 | ||||
| @@ -31,14 +33,17 @@ Summary: The Linux kernel | ||||
|  %endif | ||||
|   | ||||
|  # define buildid .local | ||||
| +# This is the STX patch release | ||||
| +%define buildid .%{tis_patch_ver}.tis | ||||
|   | ||||
|  # For a kernel released for public testing, released_kernel should be 1. | ||||
|  # For internal testing builds during development, it should be 0. | ||||
| @@ -14,12 +15,14 @@ Summary: The Linux kernel | ||||
|  %global distro_build 1062 | ||||
|   | ||||
|  %define rpmversion 3.10.0 | ||||
| -%define pkgrelease 1062.1.2.el7 | ||||
| +%define _pkgrelease 1062.1.2 | ||||
| +%define pkgrelease %{_pkgrelease}.el7 | ||||
| + | ||||
|  %define rpmversion 4.18.0 | ||||
| -%define pkgrelease 80.11.2.el8_0 | ||||
| +%define _pkgrelease 80.11.2 | ||||
| +%define pkgrelease %{_pkgrelease}.el8_0 | ||||
|   | ||||
|  # allow pkg_release to have configurable %%{?dist} tag | ||||
|  %define specrelease 1062.1.2%{?dist} | ||||
|  %define specrelease 80.11.2%{?dist} | ||||
|   | ||||
| -%define pkg_release %{specrelease}%{?buildid} | ||||
| +%define pkg_release %{specrelease}%{buildid} | ||||
|   | ||||
|  # The kernel tarball/base version | ||||
|  %define rheltarball %{rpmversion}-%{pkgrelease} | ||||
| @@ -69,7 +72,7 @@ Summary: The Linux kernel | ||||
|  # What parts do we want to build?  We must build at least one kernel. | ||||
|  # These are the kernels that are built IF the architecture allows it. | ||||
| @@ -85,9 +90,9 @@ Summary: The Linux kernel | ||||
|  # Only build the debug kernel (--with dbgonly): | ||||
|  %define with_dbgonly   %{?_with_dbgonly:      1} %{?!_with_dbgonly:      0} | ||||
|   | ||||
|  # Control whether we perform a compat. check against published ABI. | ||||
| -%define with_kabichk   %{?_without_kabichk:   0} %{?!_without_kabichk:   1} | ||||
| +%define with_kabichk  0 | ||||
|   | ||||
|  # Control whether we perform a compat. check against DUP ABI. | ||||
|  %define with_kabidupchk %{?_with_kabidupchk: 1} %{?!_with_kabidupchk: 0} | ||||
| @@ -92,7 +95,7 @@ Summary: The Linux kernel | ||||
|  # Set debugbuildsenabled to 1 for production (build separate debug kernels) | ||||
|  #  and 0 for rawhide (all kernels are debug kernels). | ||||
|  # See also 'make debug' and 'make release'. RHEL only ever does 1. | ||||
| -%define debugbuildsenabled 1 | ||||
| +%define debugbuildsenabled 0 | ||||
|   | ||||
|  %define with_gcov %{?_with_gcov: 1} %{?!_with_gcov: 0} | ||||
|   | ||||
| @@ -386,6 +389,7 @@ BuildRequires: bison flex | ||||
|  # required for zfcpdump | ||||
|  BuildRequires: glibc-static | ||||
| -%define with_kabidupchk %{?_with_kabidupchk:  1} %{?!_with_kabidupchk:   0} | ||||
| +%define with_kabidupchk 1 | ||||
|  # | ||||
|  # Control whether to run an extensive DWARF based kABI check. | ||||
|  # Note that this option needs to have baseline setup in SOURCE300. | ||||
| @@ -352,6 +357,7 @@ BuildRequires: xmlto | ||||
|  %if %{with_perf} || %{with_tools} | ||||
|  BuildRequires: asciidoc | ||||
|  %endif | ||||
| +BuildRequires: util-linux | ||||
|   | ||||
|  Source0: linux-%{rpmversion}-%{pkgrelease}.tar.xz | ||||
|   | ||||
| @@ -453,6 +457,12 @@ Patch1000: debrand-single-cpu.patch | ||||
|  Patch1001: debrand-rh_taint.patch | ||||
|  Patch1002: debrand-rh-i686-cpu.patch | ||||
| @@ -412,6 +418,12 @@ Source2001: cpupower.config | ||||
|  # Sources for CentOS debranding | ||||
|  Source9000: centos.pem | ||||
|   | ||||
| +# StarlingX Cloud sources here. | ||||
| +# Not sure if we need to worry about numerical collisions between | ||||
| +# SourceX and PatchX, so let's not risk it | ||||
| +Source30000: kernel-3.10.0-x86_64.config.tis_extra | ||||
| +Source30000: kernel-x86_64.config.tis_extra | ||||
| +Source30001: ima_signing_key.pub | ||||
| + | ||||
|  BuildRoot: %{_tmppath}/kernel-%{KVRA}-root | ||||
|  ## Patches needed for building this package | ||||
|   | ||||
|  %description | ||||
| @@ -626,6 +636,13 @@ This package provides debug information for the bpftool package. | ||||
|  Patch1000: debrand-single-cpu.patch | ||||
| @@ -638,6 +650,13 @@ eBPF sample programs and selftests. | ||||
|   | ||||
|  %endif # with_bpftool | ||||
|  %endif # with_bpf_samples | ||||
|   | ||||
| +%ifarch x86_64 | ||||
| +%package unsigned | ||||
| @@ -94,140 +92,150 @@ index 852fd10..e42177e 100644 | ||||
|  %if %{with_gcov} | ||||
|  %package gcov | ||||
|  Summary: gcov graph and source files for coverage data collection. | ||||
| @@ -791,6 +808,9 @@ cd linux-%{KVRA} | ||||
|  # Drop some necessary files from the source dir into the buildroot | ||||
|  cp $RPM_SOURCE_DIR/kernel-%{version}-*.config . | ||||
| @@ -918,6 +937,8 @@ cd configs | ||||
|   | ||||
|  # Drop some necessary files from the source dir into the buildroot | ||||
|  cp $RPM_SOURCE_DIR/kernel-*.config . | ||||
| +# Copy any TiS-specific config changes | ||||
| +cp $RPM_SOURCE_DIR/kernel-%{version}-*.config.tis_extra . | ||||
| + | ||||
|  ApplyOptionalPatch linux-kernel-test.patch | ||||
|  ApplyOptionalPatch debrand-single-cpu.patch | ||||
|  ApplyOptionalPatch debrand-rh_taint.patch | ||||
| @@ -835,6 +855,15 @@ for i in *.config | ||||
|  do | ||||
|    mv $i .config | ||||
|    Arch=`head -1 .config | cut -b 3-` | ||||
| + | ||||
| +  # Handle StarlingX Cloud customizations.  Use -n to match oldnoconfig below.  We want this before | ||||
| +  # the make line below so that the one below removes any dependencies of ones that we | ||||
| +  # turn off here.  We also want it before "make listnewconfig" so that we can set the | ||||
| +  # config option for new configs introduced in the StarlingX Cloud patches. | ||||
| +cp $RPM_SOURCE_DIR/kernel-*.config.tis_extra . | ||||
|  cp %{SOURCE41} . | ||||
|  VERSION=%{version} ./generate_all_configs.sh | ||||
|   | ||||
| @@ -939,6 +960,17 @@ do | ||||
|  done | ||||
|  %endif | ||||
|   | ||||
| +# Handle StarlingX Cloud customizations.  Use -n to match oldnoconfig below.  We want this before | ||||
| +# the make line below so that the one below removes any dependencies of ones that we | ||||
| +# turn off here.  We also want it before "make listnewconfig" so that we can set the | ||||
| +# config option for new configs introduced in the StarlingX Cloud patches. | ||||
| +for i in *.config | ||||
| +do | ||||
| +  if [ -f ${i}.tis_extra ]; then | ||||
| +    scripts/kconfig/merge_config.sh -m -n .config ${i}.tis_extra | ||||
| +    ../scripts/kconfig/merge_config.sh -m -n .config ${i}.tis_extra | ||||
| +  fi | ||||
| +done | ||||
| + | ||||
|    make %{?cross_opts} ARCH=$Arch listnewconfig | grep -E '^CONFIG_' >.newoptions || true | ||||
|  %if %{listnewconfig_fail} | ||||
|    if [ -s .newoptions ]; then | ||||
| @@ -908,12 +937,13 @@ BuildKernel() { | ||||
|  cp %{SOURCE42} . | ||||
|  ./process_configs.sh -w -c kernel %{rpmversion} | ||||
|   | ||||
| @@ -1003,7 +1035,8 @@ BuildKernel() { | ||||
|   | ||||
|      # and now to start the build process | ||||
|   | ||||
| -    make %{?cross_opts} -s mrproper | ||||
| +    make -j"%(nproc)" %{?cross_opts} -s mrproper | ||||
|   | ||||
|      cp %{SOURCE11} .	# x509.genkey | ||||
|      cp %{SOURCE12} .	# extra_certificates | ||||
|      cp %{SOURCE15} .	# rheldup3.x509 | ||||
|      cp %{SOURCE16} .	# rhelkpatch1.x509 | ||||
| +    cp %{SOURCE30001} . # ima_signing_key.pub | ||||
|   | ||||
| -    %{make} -s mrproper | ||||
| +    %{make} -j"%(nproc)" -s mrproper | ||||
| +    cp %{SOURCE30001} certs/. # ima_signing_key.pub | ||||
|      cp configs/$Config .config | ||||
|   | ||||
| @@ -928,8 +958,8 @@ BuildKernel() { | ||||
|      fi | ||||
|  %endif | ||||
|      %if %{signkernel}%{signmodules} | ||||
| @@ -1013,8 +1046,8 @@ BuildKernel() { | ||||
|      Arch=`head -1 .config | cut -b 3-` | ||||
|      echo USING ARCH=$Arch | ||||
|   | ||||
| -    make -s %{?cross_opts} ARCH=$Arch oldnoconfig >/dev/null | ||||
| -    make -s %{?cross_opts} ARCH=$Arch V=1 %{?_smp_mflags} KCFLAGS="%{?kcflags}" WITH_GCOV="%{?with_gcov}" $MakeTarget %{?sparse_mflags} | ||||
| +    make -s -j"%(nproc)"  %{?cross_opts} ARCH=$Arch oldnoconfig >/dev/null | ||||
| +    make -s -j"%(nproc)" %{?cross_opts} ARCH=$Arch V=1 %{?_smp_mflags} KCFLAGS="%{?kcflags}" WITH_GCOV="%{?with_gcov}" $MakeTarget %{?sparse_mflags} | ||||
|   | ||||
|      if [ "$Flavour" != "kdump" ]; then | ||||
|          make -s %{?cross_opts} ARCH=$Arch V=1 %{?_smp_mflags} KCFLAGS="%{?kcflags}" WITH_GCOV="%{?with_gcov}" modules %{?sparse_mflags} || exit 1 | ||||
| @@ -953,6 +983,8 @@ BuildKernel() { | ||||
| -    %{make} -s ARCH=$Arch oldnoconfig >/dev/null | ||||
| -    %{make} -s ARCH=$Arch V=1 %{?_smp_mflags} KCFLAGS="%{?kcflags}" WITH_GCOV="%{?with_gcov}" $MakeTarget %{?sparse_mflags} %{?kernel_mflags} | ||||
| +    %{make} -s -j"%(nproc)" ARCH=$Arch oldnoconfig >/dev/null | ||||
| +    %{make} -s -j"%(nproc)" ARCH=$Arch V=1 %{?_smp_mflags} KCFLAGS="%{?kcflags}" WITH_GCOV="%{?with_gcov}" $MakeTarget %{?sparse_mflags} %{?kernel_mflags} | ||||
|      if [ $DoModules -eq 1 ]; then | ||||
|  	%{make} -s ARCH=$Arch V=1 %{?_smp_mflags} KCFLAGS="%{?kcflags}" WITH_GCOV="%{?with_gcov}" modules %{?sparse_mflags} || exit 1 | ||||
|      fi | ||||
| @@ -1059,6 +1092,8 @@ BuildKernel() { | ||||
|          echo "pesigning failed" | ||||
|          exit 1 | ||||
|      fi | ||||
|  # EFI SecureBoot signing, x86_64-only | ||||
|  %ifarch x86_64 | ||||
| +    cp $KernelImage vmlinuz.unsigned | ||||
| +    $CopyKernel vmlinuz.unsigned $RPM_BUILD_ROOT/%{image_install_path}/vmlinuz.unsigned | ||||
|      %pesign -s -i $KernelImage -o $KernelImage.signed -a %{SOURCE13} -c %{SOURCE14} -n %{pesign_name} | ||||
|      mv $KernelImage.signed $KernelImage | ||||
|  %endif | ||||
| @@ -969,7 +1001,7 @@ BuildKernel() { | ||||
|      if [ "$Flavour" != "kdump" ]; then | ||||
|          # Override $(mod-fw) because we don't want it to install any firmware | ||||
|          # we'll get it from the linux-firmware package and we don't want conflicts | ||||
| -        make -s %{?cross_opts} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer mod-fw= | ||||
| +        make -s -j"%(nproc)" %{?cross_opts} %{?_smp_mflags} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer mod-fw= | ||||
|  %if %{with_gcov} | ||||
|  	# install gcov-needed files to $BUILDROOT/$BUILD/...: | ||||
|  	#   gcov_info->filename is absolute path | ||||
| @@ -979,7 +1011,7 @@ BuildKernel() { | ||||
|  %endif | ||||
|      mv vmlinuz.signed $SignImage | ||||
|      if [ "$KernelExtension" == "gz" ]; then | ||||
|          gzip -f9 $SignImage | ||||
| @@ -1078,7 +1113,7 @@ BuildKernel() { | ||||
|      if [ $DoModules -eq 1 ]; then | ||||
|  	# Override $(mod-fw) because we don't want it to install any firmware | ||||
|  	# we'll get it from the linux-firmware package and we don't want conflicts | ||||
| -	%{make} -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer mod-fw= | ||||
| +	%{make} -s -j"%(nproc)" ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer mod-fw= | ||||
|      fi | ||||
|  %ifarch %{vdso_arches} | ||||
| -    make -s %{?cross_opts} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer | ||||
| +    make -s -j"%(nproc)"  %{?cross_opts} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer | ||||
|      if [ ! -s ldconfig-kernel.conf ]; then | ||||
|        echo > ldconfig-kernel.conf "\ | ||||
|  # Placeholder file, no vDSO hwcap entries used in this kernel." | ||||
| @@ -1188,6 +1220,12 @@ BuildKernel() { | ||||
|      cp signing_key.priv signing_key.priv.sign${Flavour:+.${Flavour}} | ||||
|      cp signing_key.x509 signing_key.x509.sign${Flavour:+.${Flavour}} | ||||
|   | ||||
| +    # STX: Copy these keys as part of the devel package | ||||
| +    # The Module signing keys are to ensure that only Out-of-tree | ||||
| +    # built against the StarlingX Kernel get signed and loaded sans warnings | ||||
| +    cp signing_key.priv ${RPM_BUILD_ROOT}/lib/modules/${KernelVer}/build/ | ||||
| +    cp signing_key.x509 ${RPM_BUILD_ROOT}/lib/modules/${KernelVer}/build/ | ||||
| + | ||||
|      # remove files that will be auto generated by depmod at rpm -i time | ||||
|      for i in alias alias.bin builtin.bin ccwmap dep dep.bin ieee1394map inputmap isapnpmap ofmap pcimap seriomap symbols symbols.bin usbmap softdep devname | ||||
|      do | ||||
| @@ -1248,15 +1286,15 @@ make %{?cross_opts} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false | ||||
|  %if %{with_gcov} | ||||
| @@ -1090,7 +1125,7 @@ BuildKernel() { | ||||
|  %endif | ||||
|   | ||||
|      if [ $DoVDSO -ne 0 ]; then | ||||
| -        %{make} -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer | ||||
| +        %{make} -s -j"%(nproc)" ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer | ||||
|          if [ ! -s ldconfig-kernel.conf ]; then | ||||
|            echo > ldconfig-kernel.conf "\ | ||||
|      # Placeholder file, no vDSO hwcap entries used in this kernel." | ||||
| @@ -1408,6 +1443,12 @@ BuildKernel() { | ||||
|  	# Save the signing keys so we can sign the modules in __modsign_install_post | ||||
|  	cp certs/signing_key.pem certs/signing_key.pem.sign${Flav} | ||||
|  	cp certs/signing_key.x509 certs/signing_key.x509.sign${Flav} | ||||
| +	# STX: Copy these keys as part of the devel package | ||||
| +	# The Module signing keys are to ensure that only Out-of-tree | ||||
| +	# built against the StarlingX Kernel get signed and loaded sans warnings | ||||
| +	cp certs/signing_key.pem ${RPM_BUILD_ROOT}/lib/modules/${KernelVer}/build/ | ||||
| +	chmod 755 ${RPM_BUILD_ROOT}/lib/modules/${KernelVer}/build/signing_key.pem | ||||
| +	cp certs/signing_key.x509 ${RPM_BUILD_ROOT}/lib/modules/${KernelVer}/build/ | ||||
|      fi | ||||
|  %endif | ||||
|   | ||||
| @@ -1482,15 +1523,15 @@ chmod +x tools/power/cpupower/utils/version-gen.sh | ||||
|  %endif | ||||
|  %ifarch x86_64 | ||||
|     pushd tools/power/x86/x86_energy_perf_policy/ | ||||
| -   make | ||||
| +   make -j"%(nproc)" | ||||
| -   %{make} | ||||
| +   %{make} -j"%(nproc)" | ||||
|     popd | ||||
|     pushd tools/power/x86/turbostat | ||||
| -   make | ||||
| +   make -j"%(nproc)" | ||||
| -   %{make} | ||||
| +   %{make} -j"%(nproc)" | ||||
|     popd | ||||
|  %endif #turbostat/x86_energy_perf_policy | ||||
|  %endif | ||||
|  pushd tools | ||||
| -make tmon | ||||
| +make -j"%(nproc)" tmon | ||||
|  pushd tools/thermal/tmon/ | ||||
| -%{make} | ||||
| +%{make} -j"%(nproc)" | ||||
|  popd | ||||
|  pushd tools/iio/ | ||||
|  %{make} | ||||
| @@ -1513,11 +1554,11 @@ popd | ||||
|  # in the source tree. We installed them previously to $RPM_BUILD_ROOT/usr | ||||
|  # but there's no way to tell the Makefile to take them from there. | ||||
|  make headers_install | ||||
| -%{make} -s ARCH=$Arch V=1 samples/bpf/ | ||||
| +%{make} -s -j"%(nproc)" ARCH=$Arch V=1 samples/bpf/ | ||||
|  pushd tools/testing/selftests | ||||
|  # We need to install here because we need to call make with ARCH set which | ||||
|  # doesn't seem possible to do in the install section. | ||||
| -%{make} -s ARCH=$Arch V=1 TARGETS=bpf INSTALL_PATH=%{buildroot}%{_libexecdir}/bpf-samples/selftests install | ||||
| +%{make} -s -j"%(nproc)" ARCH=$Arch V=1 TARGETS=bpf INSTALL_PATH=%{buildroot}%{_libexecdir}/bpf-samples/selftests install | ||||
|  popd | ||||
|  %endif | ||||
|   | ||||
| @@ -1550,6 +1588,10 @@ fi}\ | ||||
|  %{expand:\ | ||||
|  %{_sbindir}/new-kernel-pkg --package kernel%{?-v:-%{-v*}} --install %{KVRA}%{?-v:.%{-v*}} || exit $?\ | ||||
|  }\ | ||||
| @@ -1819,6 +1860,10 @@ fi\ | ||||
|  # | ||||
|  %define kernel_variant_posttrans() \ | ||||
|  %{expand:%%posttrans %{?1:%{1}-}core}\ | ||||
| +# If this is a pkg upgrade (ie installed as a patch), set the reboot flag\ | ||||
| +if [ $1 -gt 1 ] ; then\ | ||||
| +    touch /var/run/node_is_patched_rr\ | ||||
| +fi\ | ||||
|  %{nil} | ||||
|   | ||||
|  # | ||||
| @@ -1775,6 +1817,11 @@ fi | ||||
|  %kernel_variant_files %{with_debug} debug | ||||
|  %kernel_variant_files %{with_kdump} kdump | ||||
|  if [ -x %{_sbindir}/weak-modules ]\ | ||||
|  then\ | ||||
|      %{_sbindir}/weak-modules --add-kernel %{KVERREL}%{?1:+%{1}} || exit $?\ | ||||
| @@ -2090,6 +2135,11 @@ fi | ||||
|  %kernel_variant_files  %{with_vdso_install} %{with_debug} debug | ||||
|  %kernel_variant_files  %{with_vdso_install} %{with_zfcpdump} zfcpdump | ||||
|   | ||||
| +%ifarch x86_64 | ||||
| +%files unsigned | ||||
| +/boot/vmlinuz.unsigned | ||||
| +%endif | ||||
| + | ||||
|  %changelog | ||||
|  * Fri Sep 20 2019 CentOS Sources <bugs@centos.org> - 3.10.0-1062.1.2.el7 | ||||
|  - Apply debranding changes | ||||
|  # plz don't put in a version string unless you're going to tag | ||||
|  # and build. | ||||
|  # | ||||
| --  | ||||
| 1.8.3.1 | ||||
| 2.18.1 | ||||
|  | ||||
|   | ||||
| @@ -1,44 +0,0 @@ | ||||
| From 3073ab68b8a27cdaf31213778d029669f50e2632 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <3073ab68b8a27cdaf31213778d029669f50e2632.1584644494.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <55a6b125fab32183cbabee1e436197242f926c0c.1584644493.git.Jim.Somerville@windriver.com> | ||||
| References: <55a6b125fab32183cbabee1e436197242f926c0c.1584644493.git.Jim.Somerville@windriver.com> | ||||
| From: "zhao.shuai" <zhaos@neusoft.com> | ||||
| Date: Tue, 6 Aug 2019 16:18:04 +0800 | ||||
| Subject: [PATCH 2/2] Compile issues | ||||
|  | ||||
| Signed-off-by: zhao.shuai <zhaos@neusoft.com> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  SPECS/kernel.spec | 9 +++++++++ | ||||
|  1 file changed, 9 insertions(+) | ||||
|  | ||||
| diff --git a/SPECS/kernel.spec b/SPECS/kernel.spec | ||||
| index 5f23982..640f872 100644 | ||||
| --- a/SPECS/kernel.spec | ||||
| +++ b/SPECS/kernel.spec | ||||
| @@ -498,6 +498,12 @@ Patch40029: rh-ext4-release-leaked-posix-acl-in-ext4_acl_chmod.patch | ||||
|  Patch40030: rh-ext4-release-leaked-posix-acl-in-ext4_xattr_set_a.patch | ||||
|  # Workaround for broken bios causing IOMMU issues | ||||
|  Patch40031: Allow-dmar-quirks-for-broken-bioses.patch | ||||
| +# Fix assorted compilation issues | ||||
| +Patch40100: fix-compilation-issues.patch | ||||
| +# Fix CentOS 7.6 upgrade compile error | ||||
| +Patch40101: fix-CentOS-7.6-upgrade-compile-error.patch | ||||
| +# Compile fix for disabling CONFIG_MEMCG_KMEM | ||||
| +Patch40102: compile-fix-for-disabling-CONFIG_MEMCG_KMEM.patch | ||||
|   | ||||
|  BuildRoot: %{_tmppath}/kernel-%{KVRA}-root | ||||
|   | ||||
| @@ -882,6 +888,9 @@ ApplyOptionalPatch ipvs-fix-memory-leak-in-ip_vs_ctl.c.patch | ||||
|  ApplyOptionalPatch rh-ext4-release-leaked-posix-acl-in-ext4_acl_chmod.patch | ||||
|  ApplyOptionalPatch rh-ext4-release-leaked-posix-acl-in-ext4_xattr_set_a.patch | ||||
|  ApplyOptionalPatch Allow-dmar-quirks-for-broken-bioses.patch | ||||
| +ApplyOptionalPatch fix-compilation-issues.patch | ||||
| +ApplyOptionalPatch fix-CentOS-7.6-upgrade-compile-error.patch | ||||
| +ApplyOptionalPatch compile-fix-for-disabling-CONFIG_MEMCG_KMEM.patch | ||||
|   | ||||
|  # Any further pre-build tree manipulations happen here. | ||||
|   | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,101 +1,58 @@ | ||||
| From 55a6b125fab32183cbabee1e436197242f926c0c Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <55a6b125fab32183cbabee1e436197242f926c0c.1584644493.git.Jim.Somerville@windriver.com> | ||||
| From ac67546ccbecd3ee18145be31d87d7253048adda Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <ac67546ccbecd3ee18145be31d87d7253048adda.1566587341.git.Jim.Somerville@windriver.com> | ||||
| From: "zhao.shuai" <zhaos@neusoft.com> | ||||
| Date: Mon, 5 Aug 2019 17:55:01 +0800 | ||||
| Subject: [PATCH 1/2] Kernel source patches for TiC | ||||
| Subject: [PATCH 1/2] Kernel-source-patches-for-TiC | ||||
|  | ||||
| Signed-off-by: zhao.shuai <zhaos@neusoft.com> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| Signed-off-by: Robin Lu <bin1.lu@intel.com> | ||||
| Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com> | ||||
|  | ||||
| --- | ||||
|  SPECS/kernel.spec | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||||
|  1 file changed, 67 insertions(+) | ||||
|  SPECS/kernel.spec | 22 ++++++++++++++++++++++ | ||||
|  1 file changed, 22 insertions(+) | ||||
|  | ||||
| diff --git a/SPECS/kernel.spec b/SPECS/kernel.spec | ||||
| index 0b2ff2e..5f23982 100644 | ||||
| index 1927d5a..a851036 100644 | ||||
| --- a/SPECS/kernel.spec | ||||
| +++ b/SPECS/kernel.spec | ||||
| @@ -463,6 +463,42 @@ Patch1002: debrand-rh-i686-cpu.patch | ||||
|  Source30000: kernel-3.10.0-x86_64.config.tis_extra | ||||
|  Source30001: ima_signing_key.pub | ||||
| @@ -433,6 +433,17 @@ Patch1002: debrand-rh-i686-cpu.patch | ||||
|  # empty final patch to facilitate testing of kernel patches | ||||
|  Patch999999: linux-kernel-test.patch | ||||
|   | ||||
| +# StarlingX Cloud patches here. | ||||
| +Patch40001: Fix-compile-issue-when-transparent-hugepages-are-off.patch | ||||
| +Patch40002: Notification-of-death-of-arbitrary-processes.patch | ||||
| +Patch40003: CGTS-3744-route-do-not-cache-fib-route-info-on-local.patch | ||||
| +Patch40004: PCI-Add-ACS-quirk-for-Intel-Fortville-NICs.patch | ||||
| +Patch40005: affine-compute-kernel-threads.patch | ||||
| +Patch40006: Affine-irqs-and-workqueues-with-kthread_cpus.patch | ||||
| +Patch40007: Make-kernel-start-eth-devices-at-offset.patch | ||||
| +Patch40008: intel-iommu-allow-ignoring-Ethernet-device-RMRR-with.patch | ||||
| +Patch40009: memblock-introduce-memblock_alloc_range.patch | ||||
| +Patch40010: cma-add-placement-specifier-for-cma-kernel-parameter.patch | ||||
| +Patch40011: x86-enable-DMA-CMA-with-swiotlb.patch | ||||
| +Patch40013: Enable-building-kernel-with-CONFIG_BLK_DEV_NBD.patch | ||||
| +Patch40014: x86-make-dma_alloc_coherent-return-zeroed-memory-if-.patch | ||||
| +Patch40016: Porting-Cacheinfo-from-Kernel-4.10.17.patch | ||||
| +Patch40017: Fix-cacheinfo-compilation-issues-for-3.10.patch | ||||
| +Patch40018: cpuidle-menu-stop-seeking-deeper-idle-if-current-sta.patch | ||||
| +Patch40019: cpuidle-menu-add-per-CPU-PM-QoS-resume-latency-consi.patch | ||||
| +Patch40020: CPU-PM-expose-pm_qos_resume_latency-for-CPUs.patch | ||||
| +Patch40021: cpuidle-menu-Avoid-taking-spinlock-for-accessing-QoS.patch | ||||
| +Patch40022: US101216-IMA-support-in-Titanium-kernel.patch | ||||
| +Patch40023: US103091-IMA-System-Configuration.patch | ||||
| +# Fix compile warnings that break the build | ||||
| +Patch40024: aic94xx-Skip-reading-user-settings-if-flash-is-not-f.patch | ||||
| +Patch40025: dpt_i2o-fix-build-warning.patch | ||||
| +# DRBD was choking on write same | ||||
| +Patch40026: turn-off-write-same-in-smartqpi-driver.patch | ||||
| +# Fix use-after-free in eventpoll_release_file | ||||
| +Patch40027: epoll-fix-use-after-free-in-eventpoll_release_file.patch | ||||
| +# Fix three potential kernel memory leaks | ||||
| +Patch40028: ipvs-fix-memory-leak-in-ip_vs_ctl.c.patch | ||||
| +Patch40029: rh-ext4-release-leaked-posix-acl-in-ext4_acl_chmod.patch | ||||
| +Patch40030: rh-ext4-release-leaked-posix-acl-in-ext4_xattr_set_a.patch | ||||
| +# Workaround for broken bios causing IOMMU issues | ||||
| +Patch40031: Allow-dmar-quirks-for-broken-bioses.patch | ||||
| + | ||||
|  BuildRoot: %{_tmppath}/kernel-%{KVRA}-root | ||||
|  # END OF PATCH DEFINITIONS | ||||
|   | ||||
|  %description | ||||
| @@ -816,6 +852,37 @@ ApplyOptionalPatch debrand-single-cpu.patch | ||||
|  BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root | ||||
| @@ -900,6 +911,17 @@ ApplyOptionalPatch debrand-single-cpu.patch | ||||
|  ApplyOptionalPatch debrand-rh_taint.patch | ||||
|  ApplyOptionalPatch debrand-rh-i686-cpu.patch | ||||
|   | ||||
| +# StarlingX Cloud patches here. | ||||
| +ApplyOptionalPatch Fix-compile-issue-when-transparent-hugepages-are-off.patch | ||||
| +ApplyOptionalPatch Notification-of-death-of-arbitrary-processes.patch | ||||
| +ApplyOptionalPatch CGTS-3744-route-do-not-cache-fib-route-info-on-local.patch | ||||
| +ApplyOptionalPatch PCI-Add-ACS-quirk-for-Intel-Fortville-NICs.patch | ||||
| +ApplyOptionalPatch affine-compute-kernel-threads.patch | ||||
| +ApplyOptionalPatch Affine-irqs-and-workqueues-with-kthread_cpus.patch | ||||
| +ApplyOptionalPatch Make-kernel-start-eth-devices-at-offset.patch | ||||
| +ApplyOptionalPatch intel-iommu-allow-ignoring-Ethernet-device-RMRR-with.patch | ||||
| +ApplyOptionalPatch memblock-introduce-memblock_alloc_range.patch | ||||
| +ApplyOptionalPatch cma-add-placement-specifier-for-cma-kernel-parameter.patch | ||||
| +ApplyOptionalPatch x86-enable-DMA-CMA-with-swiotlb.patch | ||||
| +ApplyOptionalPatch Enable-building-kernel-with-CONFIG_BLK_DEV_NBD.patch | ||||
| +ApplyOptionalPatch x86-make-dma_alloc_coherent-return-zeroed-memory-if-.patch | ||||
| +ApplyOptionalPatch Porting-Cacheinfo-from-Kernel-4.10.17.patch | ||||
| +ApplyOptionalPatch Fix-cacheinfo-compilation-issues-for-3.10.patch | ||||
| +ApplyOptionalPatch cpuidle-menu-stop-seeking-deeper-idle-if-current-sta.patch | ||||
| +ApplyOptionalPatch cpuidle-menu-add-per-CPU-PM-QoS-resume-latency-consi.patch | ||||
| +ApplyOptionalPatch CPU-PM-expose-pm_qos_resume_latency-for-CPUs.patch | ||||
| +ApplyOptionalPatch cpuidle-menu-Avoid-taking-spinlock-for-accessing-QoS.patch | ||||
| +ApplyOptionalPatch US101216-IMA-support-in-Titanium-kernel.patch | ||||
| +ApplyOptionalPatch US103091-IMA-System-Configuration.patch | ||||
| +ApplyOptionalPatch aic94xx-Skip-reading-user-settings-if-flash-is-not-f.patch | ||||
| +ApplyOptionalPatch dpt_i2o-fix-build-warning.patch | ||||
| +ApplyOptionalPatch turn-off-write-same-in-smartqpi-driver.patch | ||||
| +ApplyOptionalPatch epoll-fix-use-after-free-in-eventpoll_release_file.patch | ||||
| +ApplyOptionalPatch ipvs-fix-memory-leak-in-ip_vs_ctl.c.patch | ||||
| +ApplyOptionalPatch rh-ext4-release-leaked-posix-acl-in-ext4_acl_chmod.patch | ||||
| +ApplyOptionalPatch rh-ext4-release-leaked-posix-acl-in-ext4_xattr_set_a.patch | ||||
| +ApplyOptionalPatch Allow-dmar-quirks-for-broken-bioses.patch | ||||
| + | ||||
|  # Any further pre-build tree manipulations happen here. | ||||
|  # END OF PATCH APPLICATIONS | ||||
|   | ||||
|  chmod +x scripts/checkpatch.pl | ||||
|  # Any further pre-build tree manipulations happen here. | ||||
| --  | ||||
| 1.8.3.1 | ||||
| 2.18.1 | ||||
|  | ||||
|   | ||||
| @@ -1,3 +1,2 @@ | ||||
| Build-logic-and-sources-for-TiC.patch | ||||
| Kernel-source-patches-for-TiC.patch | ||||
| Compile-issues.patch | ||||
|   | ||||
| @@ -23,34 +23,36 @@ Signed-off-by: Chris Friesen <chris.friesen@windriver.com> | ||||
| Signed-off-by: Vu Tran <vu.tran@windriver.com> | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com> | ||||
|  | ||||
| --- | ||||
|  kernel/irq/manage.c | 7 +++++++ | ||||
|  kernel/workqueue.c  | 4 ++++ | ||||
|  2 files changed, 11 insertions(+) | ||||
|  | ||||
| diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c | ||||
| index e639145..be46349 100644 | ||||
| index 9a8b7ba..eaefb91 100644 | ||||
| --- a/kernel/irq/manage.c | ||||
| +++ b/kernel/irq/manage.c | ||||
| @@ -372,6 +372,13 @@ setup_affinity(unsigned int irq, struct irq_desc *desc, struct cpumask *mask) | ||||
|  		if (cpumask_intersects(mask, nodemask)) | ||||
|  			cpumask_and(mask, mask, nodemask); | ||||
| @@ -400,6 +400,13 @@ int irq_setup_affinity(struct irq_desc *desc) | ||||
|  		if (cpumask_intersects(&mask, nodemask)) | ||||
|  			cpumask_and(&mask, &mask, nodemask); | ||||
|  	} | ||||
| + | ||||
| +	/* This will narrow down the affinity further if we've specified | ||||
| +	 * a reduced cpu_kthread_mask in the boot args. | ||||
| +	 */ | ||||
| +	if (cpumask_intersects(mask, cpu_kthread_mask)) | ||||
| +		cpumask_and(mask, mask, cpu_kthread_mask); | ||||
| +	if (cpumask_intersects(&mask, cpu_kthread_mask)) | ||||
| +		cpumask_and(&mask, &mask, cpu_kthread_mask); | ||||
| + | ||||
|  	irq_do_set_affinity(&desc->irq_data, mask, false); | ||||
|  	return 0; | ||||
|  } | ||||
|  	ret = irq_do_set_affinity(&desc->irq_data, &mask, false); | ||||
|  	raw_spin_unlock(&mask_lock); | ||||
|  	return ret; | ||||
| diff --git a/kernel/workqueue.c b/kernel/workqueue.c | ||||
| index 179cbb2..9524a6f 100644 | ||||
| index 78b1920..886fe16 100644 | ||||
| --- a/kernel/workqueue.c | ||||
| +++ b/kernel/workqueue.c | ||||
| @@ -5441,6 +5441,8 @@ static int __init init_workqueues(void) | ||||
| @@ -5707,6 +5707,8 @@ int __init workqueue_init_early(void) | ||||
|   | ||||
|  		BUG_ON(!(attrs = alloc_workqueue_attrs(GFP_KERNEL))); | ||||
|  		attrs->nice = std_nice[i]; | ||||
| @@ -59,7 +61,7 @@ index 179cbb2..9524a6f 100644 | ||||
|  		unbound_std_wq_attrs[i] = attrs; | ||||
|   | ||||
|  		/* | ||||
| @@ -5451,6 +5453,8 @@ static int __init init_workqueues(void) | ||||
| @@ -5717,6 +5719,8 @@ int __init workqueue_init_early(void) | ||||
|  		BUG_ON(!(attrs = alloc_workqueue_attrs(GFP_KERNEL))); | ||||
|  		attrs->nice = std_nice[i]; | ||||
|  		attrs->no_numa = true; | ||||
| @@ -69,5 +71,5 @@ index 179cbb2..9524a6f 100644 | ||||
|  	} | ||||
|   | ||||
| --  | ||||
| 1.8.3.1 | ||||
| 2.18.1 | ||||
|  | ||||
|   | ||||
| @@ -1,58 +0,0 @@ | ||||
| From 049ff2fee2c00370ddc9c9bb598fe1e89aaced2d Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <049ff2fee2c00370ddc9c9bb598fe1e89aaced2d.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: Allain Legacy <allain.legacy@windriver.com> | ||||
| Date: Fri, 29 Jan 2016 12:13:40 -0500 | ||||
| Subject: [PATCH 03/26] CGTS-3744: route: do not cache fib route info on local | ||||
|  routes with oif | ||||
|  | ||||
| For local routes that require a particular output interface we do not want to | ||||
| cache the result.  Caching the result causes incorrect behaviour when there are | ||||
| multiple source addresses on the interface.  The end result being that if the | ||||
| intended recipient is waiting on that interface for the packet he won't receive | ||||
| it because it will be delivered on the loopback interface and the IP_PKTINFO | ||||
| ipi_ifindex will be set to the loopback interface as well. | ||||
|  | ||||
| This can be tested by running a program such as "dhcp_release" which attempts | ||||
| to inject a packet on a particular interface so that it is received by another | ||||
| program on the same board.  The receiving process should see an IP_PKTINFO | ||||
| ipi_ifndex value of the source interface (e.g., eth1) instead of the loopback | ||||
| interface (e.g., lo).  The packet will still appear on the loopback interface | ||||
| in tcpdump but the important aspect is that the CMSG info is correct. | ||||
|  | ||||
| Sample dhcp_release command line: | ||||
|  | ||||
|    dhcp_release eth1 192.168.204.222 02:11:33:22:44:66 | ||||
|  | ||||
| Signed-off-by: Allain Legacy <allain.legacy@windriver.com> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  net/ipv4/route.c | 11 +++++++++++ | ||||
|  1 file changed, 11 insertions(+) | ||||
|  | ||||
| diff --git a/net/ipv4/route.c b/net/ipv4/route.c | ||||
| index f19aca2..5246096 100644 | ||||
| --- a/net/ipv4/route.c | ||||
| +++ b/net/ipv4/route.c | ||||
| @@ -2121,6 +2121,17 @@ static struct rtable *__mkroute_output(const struct fib_result *res, | ||||
|  		 */ | ||||
|  		if (fi && res->prefixlen < 4) | ||||
|  			fi = NULL; | ||||
| +	} else if ((type == RTN_LOCAL) && (orig_oif != 0)) { | ||||
| +		/* | ||||
| +		 * For local routes that require a particular output interface we do | ||||
| +		 * not want to cache the result.  Caching the result causes incorrect | ||||
| +		 * behaviour when there are multiple source addresses on the interface. | ||||
| +		 * The end result being that if the intended recipient is waiting on | ||||
| +		 * that interface for the packet he won't receive it because it will be | ||||
| +		 * delivered on the loopback interface and the IP_PKTINFO ipi_ifindex | ||||
| +		 * will be set to the loopback interface as well. | ||||
| +		 */ | ||||
| +		fi = NULL; | ||||
|  	} | ||||
|   | ||||
|  	fnhe = NULL; | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,60 +0,0 @@ | ||||
| From 648072810b35e6251c6503a8e6693deeb6d0a89d Mon Sep 17 00:00:00 2001 | ||||
| From: Alex Shi <alex.shi@linaro.org> | ||||
| Date: Thu, 12 Jan 2017 21:27:03 +0800 | ||||
| Subject: [PATCH] CPU / PM: expose pm_qos_resume_latency for CPUs | ||||
|  | ||||
| [ commit 37efa4b41ffb31dcdfc3beb97d47992bb2a083e5 from linux-stable ] | ||||
|  | ||||
| The cpu-dma PM QoS constraint impacts all the cpus in the system. There is no way | ||||
| to let the user to choose a PM QoS constraint per cpu. | ||||
|  | ||||
| The following patch exposes to the userspace a per cpu based sysfs file | ||||
| in order to let the userspace to change the value of the PM QoS latency | ||||
| constraint. | ||||
|  | ||||
| This change is inoperative in its form and the cpuidle governors have to | ||||
| take into account the per cpu latency constraint in addition to the | ||||
| global cpu-dma latency constraint in order to operate properly. | ||||
|  | ||||
| BTW | ||||
| The pm_qos_resume_latency usage defined in | ||||
| Documentation/ABI/testing/sysfs-devices-power | ||||
| The /sys/devices/.../power/pm_qos_resume_latency_us attribute | ||||
| contains the PM QoS resume latency limit for the given device, | ||||
| which is the maximum allowed time it can take to resume the | ||||
| device, after it has been suspended at run time, from a resume | ||||
| request to the moment the device will be ready to process I/O, | ||||
| in microseconds.  If it is equal to 0, however, this means that | ||||
| the PM QoS resume latency may be arbitrary. | ||||
|  | ||||
| Signed-off-by: Alex Shi <alex.shi@linaro.org> | ||||
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> | ||||
| Signed-off-by: Alex Kozyrev <alex.kozyrev@windriver.com> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  drivers/base/cpu.c | 2 ++ | ||||
|  1 file changed, 2 insertions(+) | ||||
|  | ||||
| diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c | ||||
| index 65e786d..91d620f 100644 | ||||
| --- a/drivers/base/cpu.c | ||||
| +++ b/drivers/base/cpu.c | ||||
| @@ -15,6 +15,7 @@ | ||||
|  #include <linux/percpu.h> | ||||
|  #include <linux/acpi.h> | ||||
|  #include <linux/tick.h> | ||||
| +#include <linux/pm_qos.h> | ||||
|   | ||||
|  #include "base.h" | ||||
|   | ||||
| @@ -318,6 +319,7 @@ int register_cpu(struct cpu *cpu, int num) | ||||
|  		per_cpu(cpu_sys_devices, num) = &cpu->dev; | ||||
|  	if (!error) | ||||
|  		register_cpu_under_node(num, cpu_to_node(num)); | ||||
| +	dev_pm_qos_expose_latency_limit(&cpu->dev, 0); | ||||
|   | ||||
|  #ifdef CONFIG_KEXEC | ||||
|  	if (!error) | ||||
| --  | ||||
| 2.7.4 | ||||
|  | ||||
| @@ -1,36 +0,0 @@ | ||||
| From aeefa74788f568a9c3b49e18a17fc3d59657bbe0 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <aeefa74788f568a9c3b49e18a17fc3d59657bbe0.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: Chris Friesen <chris.friesen@windriver.com> | ||||
| Date: Wed, 11 Jan 2017 13:38:37 -0500 | ||||
| Subject: [PATCH 13/26] Enable building kernel with CONFIG_BLK_DEV_NBD | ||||
|  | ||||
| By default, the CentOS 7.3 kernel will fail to build if | ||||
| CONFIG_BLK_DEV_NBD is enabled, either as module or builtin. | ||||
|  | ||||
| The issue seems to be due to the use of REQ_TYPE_SPECIAL in the | ||||
| NBD code.  Switching it to use REQ_TYPE_DRV_PRIV instead makes the | ||||
| problem go away. | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  drivers/block/nbd.c | 2 +- | ||||
|  1 file changed, 1 insertion(+), 1 deletion(-) | ||||
|  | ||||
| diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c | ||||
| index a40a4f0..e0c6b62 100644 | ||||
| --- a/drivers/block/nbd.c | ||||
| +++ b/drivers/block/nbd.c | ||||
| @@ -616,7 +616,7 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, | ||||
|  		fsync_bdev(bdev); | ||||
|  		mutex_lock(&nbd->tx_lock); | ||||
|  		blk_rq_init(NULL, &sreq); | ||||
| -		sreq.cmd_type = REQ_TYPE_SPECIAL; | ||||
| +		sreq.cmd_type = REQ_TYPE_DRV_PRIV; | ||||
|  		nbd_cmd(&sreq) = NBD_CMD_DISC; | ||||
|   | ||||
|  		/* Check again after getting mutex back.  */ | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,114 +0,0 @@ | ||||
| From f49689ec7d42e30014e2aebd57bff050b187ef22 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <f49689ec7d42e30014e2aebd57bff050b187ef22.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: Alex Kozyrev <alex.kozyrev@windriver.com> | ||||
| Date: Wed, 19 Jul 2017 02:25:15 -0500 | ||||
| Subject: [PATCH 17/26] Fix cacheinfo compilation issues for 3.10 | ||||
|  | ||||
| Had to revert commit 7cc277b489b4fe91f42eb596b282879c2d13152e: | ||||
| "Install the callbacks via the state machine and let the core invoke | ||||
| the callbacks on the already online CPUs. No functional change." | ||||
| There is no hotplug state machine in 3.10 kernel. | ||||
| Also implemented cpumap_print_to_pagebuf() function in place. | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  drivers/base/cacheinfo.c | 65 ++++++++++++++++++++++++++++++++++++------------ | ||||
|  1 file changed, 49 insertions(+), 16 deletions(-) | ||||
|  | ||||
| diff --git a/drivers/base/cacheinfo.c b/drivers/base/cacheinfo.c | ||||
| index eb3af27..c924f7e 100644 | ||||
| --- a/drivers/base/cacheinfo.c | ||||
| +++ b/drivers/base/cacheinfo.c | ||||
| @@ -383,7 +383,12 @@ static ssize_t shared_cpumap_show_func(struct device *dev, bool list, char *buf) | ||||
|  	struct cacheinfo *this_leaf = dev_get_drvdata(dev); | ||||
|  	const struct cpumask *mask = &this_leaf->shared_cpu_map; | ||||
|   | ||||
| -	return cpumap_print_to_pagebuf(list, buf, mask); | ||||
| +	int len = list? | ||||
| +		cpulist_scnprintf(buf, PAGE_SIZE-2, mask) : | ||||
| +		cpumask_scnprintf(buf, PAGE_SIZE-2, mask); | ||||
| +	buf[len++] = '\n'; | ||||
| +	buf[len] = '\0'; | ||||
| +	return len; | ||||
|  } | ||||
|   | ||||
|  static ssize_t shared_cpu_map_show(struct device *dev, | ||||
| @@ -633,30 +638,58 @@ err: | ||||
|  	return rc; | ||||
|  } | ||||
|   | ||||
| -static int cacheinfo_cpu_online(unsigned int cpu) | ||||
| +static void cache_remove_dev(unsigned int cpu) | ||||
|  { | ||||
| -	int rc = detect_cache_attributes(cpu); | ||||
| +	if (!cpumask_test_cpu(cpu, &cache_dev_map)) | ||||
| +		return; | ||||
| +	cpumask_clear_cpu(cpu, &cache_dev_map); | ||||
|   | ||||
| -	if (rc) | ||||
| -		return rc; | ||||
| -	rc = cache_add_dev(cpu); | ||||
| -	if (rc) | ||||
| -		free_cache_attributes(cpu); | ||||
| -	return rc; | ||||
| +	cpu_cache_sysfs_exit(cpu); | ||||
|  } | ||||
|   | ||||
| -static int cacheinfo_cpu_pre_down(unsigned int cpu) | ||||
| +static int cacheinfo_cpu_callback(struct notifier_block *nfb, | ||||
| +				  unsigned long action, void *hcpu) | ||||
|  { | ||||
| -	if (cpumask_test_and_clear_cpu(cpu, &cache_dev_map)) | ||||
| -		cpu_cache_sysfs_exit(cpu); | ||||
| +	unsigned int cpu = (unsigned long)hcpu; | ||||
| +	int rc = 0; | ||||
|   | ||||
| -	free_cache_attributes(cpu); | ||||
| -	return 0; | ||||
| +	switch (action & ~CPU_TASKS_FROZEN) { | ||||
| +	case CPU_ONLINE: | ||||
| +		rc = detect_cache_attributes(cpu); | ||||
| +		if (!rc) | ||||
| +			rc = cache_add_dev(cpu); | ||||
| +		break; | ||||
| +	case CPU_DEAD: | ||||
| +		cache_remove_dev(cpu); | ||||
| +		if (per_cpu_cacheinfo(cpu)) | ||||
| +			free_cache_attributes(cpu); | ||||
| +		break; | ||||
| +	} | ||||
| +	return notifier_from_errno(rc); | ||||
|  } | ||||
|   | ||||
|  static int __init cacheinfo_sysfs_init(void) | ||||
|  { | ||||
| -	return cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "base/cacheinfo:online", | ||||
| -				 cacheinfo_cpu_online, cacheinfo_cpu_pre_down); | ||||
| +	int cpu, rc = 0; | ||||
| + | ||||
| +	cpu_notifier_register_begin(); | ||||
| + | ||||
| +	for_each_online_cpu(cpu) { | ||||
| +		rc = detect_cache_attributes(cpu); | ||||
| +		if (rc) | ||||
| +			goto out; | ||||
| +		rc = cache_add_dev(cpu); | ||||
| +		if (rc) { | ||||
| +			free_cache_attributes(cpu); | ||||
| +			pr_err("error populating cacheinfo..cpu%d\n", cpu); | ||||
| +			goto out; | ||||
| +		} | ||||
| +	} | ||||
| +	__hotcpu_notifier(cacheinfo_cpu_callback, 0); | ||||
| + | ||||
| +out: | ||||
| +	cpu_notifier_register_done(); | ||||
| +	return rc; | ||||
|  } | ||||
| + | ||||
|  device_initcall(cacheinfo_sysfs_init); | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,68 +0,0 @@ | ||||
| From b6ceef1c915827b50ce3f76da4dc47f3eb768b44 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| Date: Thu, 15 Dec 2016 14:27:48 -0500 | ||||
| Subject: [PATCH 01/26] Fix compile issue when transparent hugepages are off | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| Signed-off-by: Robin Lu <bin1.lu@intel.com> | ||||
| --- | ||||
|  drivers/gpu/drm/i915/i915_gemfs.c | 4 ++-- | ||||
|  fs/proc/task_mmu.c                | 2 ++ | ||||
|  mm/swap.c                         | 2 ++ | ||||
|  3 files changed, 6 insertions(+), 2 deletions(-) | ||||
|  | ||||
| diff --git a/drivers/gpu/drm/i915/i915_gemfs.c b/drivers/gpu/drm/i915/i915_gemfs.c | ||||
| index 888b7d3f..efe915c7 100644 | ||||
| --- a/drivers/gpu/drm/i915/i915_gemfs.c | ||||
| +++ b/drivers/gpu/drm/i915/i915_gemfs.c | ||||
| @@ -49,7 +49,7 @@ int i915_gemfs_init(struct drm_i915_private *i915) | ||||
|  	 * memory pressure shmem should split any huge-pages which can be | ||||
|  	 * shrunk. | ||||
|  	 */ | ||||
| - | ||||
| +#ifdef CONFIG_TRANSPARENT_HUGEPAGE | ||||
|  	if (has_transparent_hugepage()) { | ||||
|  		struct super_block *sb = gemfs->mnt_sb; | ||||
|  		/* FIXME: Disabled until we get W/A for read BW issue. */ | ||||
| @@ -63,7 +63,7 @@ int i915_gemfs_init(struct drm_i915_private *i915) | ||||
|  			return err; | ||||
|  		} | ||||
|  	} | ||||
| - | ||||
| +#endif | ||||
|  	i915->mm.gemfs = gemfs; | ||||
|   | ||||
|  	return 0; | ||||
| diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c | ||||
| index e27a1d42..e8a8ba9d 100644 | ||||
| --- a/fs/proc/task_mmu.c | ||||
| +++ b/fs/proc/task_mmu.c | ||||
| @@ -1116,7 +1116,9 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end, | ||||
|  { | ||||
|  	struct vm_area_struct *vma; | ||||
|  	struct pagemapread *pm = walk->private; | ||||
| +#ifdef CONFIG_TRANSPARENT_HUGEPAGE | ||||
|  	spinlock_t *ptl; | ||||
| +#endif | ||||
|  	pte_t *pte; | ||||
|  	int err = 0; | ||||
|   | ||||
| diff --git a/mm/swap.c b/mm/swap.c | ||||
| index 0982a35..6dcf38c 100644 | ||||
| --- a/mm/swap.c | ||||
| +++ b/mm/swap.c | ||||
| @@ -1043,8 +1043,10 @@ void release_pages(struct page **pages, int nr, bool cold) | ||||
|  		if (!put_page_testzero(page)) | ||||
|  			continue; | ||||
|   | ||||
| +#ifdef CONFIG_TRANSPARENT_HUGEPAGE | ||||
|  		VM_BUG_ON_PAGE(check_mmu_gather && | ||||
|  			       trans_huge_mmu_gather_count(page), page); | ||||
| +#endif | ||||
|   | ||||
|  		if (PageLRU(page)) { | ||||
|  			if (!was_thp) | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -11,15 +11,17 @@ start naming its "ethX" devices at eth1000 instead of eth0.  This | ||||
| will let us rename to a range starting at eth0. | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com> | ||||
|  | ||||
| --- | ||||
|  net/core/dev.c | 6 ++++++ | ||||
|  1 file changed, 6 insertions(+) | ||||
|  | ||||
| diff --git a/net/core/dev.c b/net/core/dev.c | ||||
| index 92d6c59..238c90d 100644 | ||||
| index b6f9647..b424353 100644 | ||||
| --- a/net/core/dev.c | ||||
| +++ b/net/core/dev.c | ||||
| @@ -1090,6 +1090,12 @@ static int __dev_alloc_name(struct net *net, const char *name, char *buf) | ||||
| @@ -1096,6 +1096,12 @@ static int __dev_alloc_name(struct net *net, const char *name, char *buf) | ||||
|  				set_bit(i, inuse); | ||||
|  		} | ||||
|   | ||||
| @@ -33,5 +35,5 @@ index 92d6c59..238c90d 100644 | ||||
|  		free_page((unsigned long) inuse); | ||||
|  	} | ||||
| --  | ||||
| 1.8.3.1 | ||||
| 2.18.1 | ||||
|  | ||||
|   | ||||
| @@ -18,30 +18,34 @@ This is exposed to userspace via the prctl() call with the | ||||
| PR_DO_NOTIFY_TASK_STATE option. | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com> | ||||
|  | ||||
| --- | ||||
|  include/linux/init_task.h  |   9 ++ | ||||
|  include/linux/sched.h      |   6 ++ | ||||
|  include/uapi/linux/prctl.h |  18 ++++ | ||||
|  include/linux/sched.h      |   6 + | ||||
|  include/uapi/linux/prctl.h |  18 +++ | ||||
|  init/Kconfig               |  15 +++ | ||||
|  init/init_task.c           |   1 + | ||||
|  kernel/Makefile            |   1 + | ||||
|  kernel/death_notify.c      | 227 +++++++++++++++++++++++++++++++++++++++++++++ | ||||
|  kernel/death_notify.h      |  45 +++++++++ | ||||
|  kernel/exit.c              |   6 ++ | ||||
|  kernel/death_notify.c      | 226 +++++++++++++++++++++++++++++++++++++ | ||||
|  kernel/death_notify.h      |  46 ++++++++ | ||||
|  kernel/exit.c              |   6 + | ||||
|  kernel/fork.c              |   4 + | ||||
|  kernel/signal.c            |  11 +++ | ||||
|  kernel/sys.c               |   9 ++ | ||||
|  11 files changed, 351 insertions(+) | ||||
|  kernel/signal.c            |  11 ++ | ||||
|  kernel/sys.c               |   8 ++ | ||||
|  12 files changed, 351 insertions(+) | ||||
|  create mode 100644 kernel/death_notify.c | ||||
|  create mode 100644 kernel/death_notify.h | ||||
|  | ||||
| diff --git a/include/linux/init_task.h b/include/linux/init_task.h | ||||
| index a05294b..cfb7197 100644 | ||||
| index a454b8a..08ae031 100644 | ||||
| --- a/include/linux/init_task.h | ||||
| +++ b/include/linux/init_task.h | ||||
| @@ -77,6 +77,14 @@ extern struct nsproxy init_nsproxy; | ||||
|  	.signalfd_wqh	= __WAIT_QUEUE_HEAD_INITIALIZER(sighand.signalfd_wqh),	\ | ||||
|  } | ||||
|   | ||||
| @@ -24,6 +24,15 @@ | ||||
|  extern struct files_struct init_files; | ||||
|  extern struct fs_struct init_fs; | ||||
|  extern struct nsproxy init_nsproxy; | ||||
| + | ||||
| +#ifdef CONFIG_SIGEXIT | ||||
| +#define INIT_SIGEXIT(tsk) \ | ||||
| +	.notify		= LIST_HEAD_INIT(tsk.notify),			\ | ||||
| @@ -51,40 +55,32 @@ index a05294b..cfb7197 100644 | ||||
| +#endif | ||||
| + | ||||
|  extern struct group_info init_groups; | ||||
|  extern struct cred init_cred; | ||||
|   | ||||
|  #define INIT_STRUCT_PID {						\ | ||||
| @@ -224,6 +232,7 @@ extern struct task_group root_task_group; | ||||
|  	.alloc_lock	= __SPIN_LOCK_UNLOCKED(tsk.alloc_lock),		\ | ||||
|  	.journal_info	= NULL,						\ | ||||
|  	.cpu_timers	= INIT_CPU_TIMERS(tsk.cpu_timers),		\ | ||||
| +	INIT_SIGEXIT(tsk)						\ | ||||
|  	.pi_lock	= __RAW_SPIN_LOCK_UNLOCKED(tsk.pi_lock),	\ | ||||
|  	.timer_slack_ns = 50000, /* 50 usec default slack */		\ | ||||
|  	.pids = {							\ | ||||
| diff --git a/include/linux/sched.h b/include/linux/sched.h | ||||
| index d184652..ba6ae5c 100644 | ||||
| index bb3e390..6b954a5 100644 | ||||
| --- a/include/linux/sched.h | ||||
| +++ b/include/linux/sched.h | ||||
| @@ -1653,6 +1653,12 @@ struct task_struct { | ||||
|  	short il_next; | ||||
|  	short pref_node_fork; | ||||
| @@ -1011,6 +1011,12 @@ struct task_struct { | ||||
|  	short				il_prev; | ||||
|  	short				pref_node_fork; | ||||
|  #endif | ||||
| +#ifdef CONFIG_SIGEXIT | ||||
| +	/* list of processes to notify on death */ | ||||
| +	struct list_head notify; | ||||
| +	struct                          list_head notify; | ||||
| +	/* list of outstanding monitor requests */ | ||||
| +	struct list_head monitor; | ||||
| +	struct                          list_head monitor; | ||||
| +#endif | ||||
|  #ifdef CONFIG_NUMA_BALANCING | ||||
|  	int numa_scan_seq; | ||||
|  	unsigned int numa_scan_period; | ||||
|  	int				numa_scan_seq; | ||||
|  	unsigned int			numa_scan_period; | ||||
| diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h | ||||
| index a817b5c..2cf7776 100644 | ||||
| index b17201e..05a4756 100644 | ||||
| --- a/include/uapi/linux/prctl.h | ||||
| +++ b/include/uapi/linux/prctl.h | ||||
| @@ -55,6 +55,24 @@ | ||||
|  #define PR_SET_NAME    15		/* Set process name */ | ||||
|  #define PR_GET_NAME    16		/* Get process name */ | ||||
| @@ -63,6 +63,24 @@ | ||||
|  # define PR_ENDIAN_LITTLE	1	/* True little endian mode */ | ||||
|  # define PR_ENDIAN_PPC_LITTLE	2	/* "PowerPC" pseudo little endian */ | ||||
|   | ||||
| +#ifdef CONFIG_SIGEXIT | ||||
| +#define PR_DO_NOTIFY_TASK_STATE 17	/* Set/get notification for task | ||||
| @@ -104,14 +100,14 @@ index a817b5c..2cf7776 100644 | ||||
| +}; | ||||
| +#endif | ||||
| + | ||||
|  /* Get/set process endian */ | ||||
|  #define PR_GET_ENDIAN	19 | ||||
|  #define PR_SET_ENDIAN	20 | ||||
|  /* Get/set process seccomp mode */ | ||||
|  #define PR_GET_SECCOMP	21 | ||||
|  #define PR_SET_SECCOMP	22 | ||||
| diff --git a/init/Kconfig b/init/Kconfig | ||||
| index 6ec689c..550cea4 100644 | ||||
| index 9c529c7..6f53e81 100644 | ||||
| --- a/init/Kconfig | ||||
| +++ b/init/Kconfig | ||||
| @@ -1580,6 +1580,21 @@ config VM_EVENT_COUNTERS | ||||
| @@ -1547,6 +1547,21 @@ config VM_EVENT_COUNTERS | ||||
|  	  on EXPERT systems.  /proc/vmstat will only show page counts | ||||
|  	  if VM event counters are disabled. | ||||
|   | ||||
| @@ -133,11 +129,23 @@ index 6ec689c..550cea4 100644 | ||||
|  config SLUB_DEBUG | ||||
|  	default y | ||||
|  	bool "Enable SLUB debugging support" if EXPERT | ||||
| diff --git a/init/init_task.c b/init/init_task.c | ||||
| index 74f60ba..c468eeb 100644 | ||||
| --- a/init/init_task.c | ||||
| +++ b/init/init_task.c | ||||
| @@ -109,6 +109,7 @@ struct task_struct init_task | ||||
|  	.alloc_lock	= __SPIN_LOCK_UNLOCKED(init_task.alloc_lock), | ||||
|  	.journal_info	= NULL, | ||||
|  	INIT_CPU_TIMERS(init_task) | ||||
| +        INIT_SIGEXIT(tsk) | ||||
|  	.pi_lock	= __RAW_SPIN_LOCK_UNLOCKED(init_task.pi_lock), | ||||
|  	.timer_slack_ns = 50000, /* 50 usec default slack */ | ||||
|  	.pids = { | ||||
| diff --git a/kernel/Makefile b/kernel/Makefile | ||||
| index 2fb90fa..44a82c1 100644 | ||||
| index aebf6a8..2669df3 100644 | ||||
| --- a/kernel/Makefile | ||||
| +++ b/kernel/Makefile | ||||
| @@ -113,6 +113,7 @@ obj-$(CONFIG_TRACEPOINTS) += trace/ | ||||
| @@ -104,6 +104,7 @@ obj-$(CONFIG_TRACEPOINTS) += trace/ | ||||
|  obj-$(CONFIG_IRQ_WORK) += irq_work.o | ||||
|  obj-$(CONFIG_CPU_PM) += cpu_pm.o | ||||
|  obj-$(CONFIG_BPF) += bpf/ | ||||
| @@ -147,10 +155,10 @@ index 2fb90fa..44a82c1 100644 | ||||
|   | ||||
| diff --git a/kernel/death_notify.c b/kernel/death_notify.c | ||||
| new file mode 100644 | ||||
| index 0000000..889b929 | ||||
| index 0000000..dc4fc95 | ||||
| --- /dev/null | ||||
| +++ b/kernel/death_notify.c | ||||
| @@ -0,0 +1,227 @@ | ||||
| @@ -0,0 +1,226 @@ | ||||
| +/* | ||||
| + * kernel/death_notify.c, Process death notification support | ||||
| + * | ||||
| @@ -176,7 +184,6 @@ index 0000000..889b929 | ||||
| +#include <linux/slab.h> | ||||
| +#include <linux/prctl.h> | ||||
| +#include <linux/uaccess.h> | ||||
| + | ||||
| +#include "death_notify.h" | ||||
| + | ||||
| +static void unlink_status_notifier(struct signotifier *n) | ||||
| @@ -224,7 +231,6 @@ index 0000000..889b929 | ||||
| +	list_add_tail(&node->monitor_list, ¤t->monitor); | ||||
| +} | ||||
| + | ||||
| + | ||||
| +/* Returns 0 if arguments are valid, 1 if they are not. */ | ||||
| +static int invalid_args(struct task_state_notify_info *args) | ||||
| +{ | ||||
| @@ -378,12 +384,13 @@ index 0000000..889b929 | ||||
| +out: | ||||
| +	return err; | ||||
| +} | ||||
| + | ||||
| diff --git a/kernel/death_notify.h b/kernel/death_notify.h | ||||
| new file mode 100644 | ||||
| index 0000000..b2b8e8c | ||||
| index 0000000..1609cb4 | ||||
| --- /dev/null | ||||
| +++ b/kernel/death_notify.h | ||||
| @@ -0,0 +1,45 @@ | ||||
| @@ -0,0 +1,46 @@ | ||||
| +/* | ||||
| + * kernel/death_notify.h, Process death notification support | ||||
| + * | ||||
| @@ -429,11 +436,12 @@ index 0000000..b2b8e8c | ||||
| + | ||||
| +#endif /* CONFIG_SIGEXIT */ | ||||
| +#endif | ||||
| + | ||||
| diff --git a/kernel/exit.c b/kernel/exit.c | ||||
| index 1afa799..a2ea26b 100644 | ||||
| index deaa53a..fd0729f 100644 | ||||
| --- a/kernel/exit.c | ||||
| +++ b/kernel/exit.c | ||||
| @@ -59,6 +59,9 @@ | ||||
| @@ -67,6 +67,9 @@ | ||||
|  #include <asm/unistd.h> | ||||
|  #include <asm/pgtable.h> | ||||
|  #include <asm/mmu_context.h> | ||||
| @@ -441,12 +449,12 @@ index 1afa799..a2ea26b 100644 | ||||
| +#include "death_notify.h" | ||||
| +#endif | ||||
|   | ||||
|  static void exit_mm(struct task_struct * tsk); | ||||
|   | ||||
| @@ -184,6 +187,9 @@ repeat: | ||||
|  static void __unhash_process(struct task_struct *p, bool group_dead) | ||||
|  { | ||||
| @@ -195,6 +198,9 @@ repeat: | ||||
|  	proc_flush_task(p); | ||||
|   | ||||
|  	tasklist_write_lock_irq(); | ||||
|  	write_lock_irq(&tasklist_lock); | ||||
| +#ifdef CONFIG_SIGEXIT | ||||
| +	release_notify_others(p); | ||||
| +#endif | ||||
| @@ -454,10 +462,10 @@ index 1afa799..a2ea26b 100644 | ||||
|  	__exit_signal(p); | ||||
|   | ||||
| diff --git a/kernel/fork.c b/kernel/fork.c | ||||
| index c75422b..30dee92 100644 | ||||
| index 3311231..04dca7c 100644 | ||||
| --- a/kernel/fork.c | ||||
| +++ b/kernel/fork.c | ||||
| @@ -1477,6 +1477,10 @@ static struct task_struct *copy_process(unsigned long clone_flags, | ||||
| @@ -1796,6 +1796,10 @@ static __latent_entropy struct task_struct *copy_process( | ||||
|  	p->sequential_io	= 0; | ||||
|  	p->sequential_io_avg	= 0; | ||||
|  #endif | ||||
| @@ -469,10 +477,10 @@ index c75422b..30dee92 100644 | ||||
|  	/* Perform scheduler related setup. Assign this task to a CPU. */ | ||||
|  	retval = sched_fork(clone_flags, p); | ||||
| diff --git a/kernel/signal.c b/kernel/signal.c | ||||
| index 35133a7..3f72ac0 100644 | ||||
| index 8d8a940..ad65719 100644 | ||||
| --- a/kernel/signal.c | ||||
| +++ b/kernel/signal.c | ||||
| @@ -46,6 +46,9 @@ | ||||
| @@ -51,6 +51,9 @@ | ||||
|  #include <asm/siginfo.h> | ||||
|  #include <asm/cacheflush.h> | ||||
|  #include "audit.h"	/* audit_signal_info() */ | ||||
| @@ -482,7 +490,7 @@ index 35133a7..3f72ac0 100644 | ||||
|   | ||||
|  /* | ||||
|   * SLAB caches for signal bits. | ||||
| @@ -1740,6 +1743,10 @@ bool do_notify_parent(struct task_struct *tsk, int sig) | ||||
| @@ -1803,6 +1806,10 @@ bool do_notify_parent(struct task_struct *tsk, int sig) | ||||
|  	__wake_up_parent(tsk, tsk->parent); | ||||
|  	spin_unlock_irqrestore(&psig->siglock, flags); | ||||
|   | ||||
| @@ -493,7 +501,7 @@ index 35133a7..3f72ac0 100644 | ||||
|  	return autoreap; | ||||
|  } | ||||
|   | ||||
| @@ -1811,6 +1818,10 @@ static void do_notify_parent_cldstop(struct task_struct *tsk, | ||||
| @@ -1875,6 +1882,10 @@ static void do_notify_parent_cldstop(struct task_struct *tsk, | ||||
|  	 */ | ||||
|  	__wake_up_parent(tsk, parent); | ||||
|  	spin_unlock_irqrestore(&sighand->siglock, flags); | ||||
| @@ -505,21 +513,20 @@ index 35133a7..3f72ac0 100644 | ||||
|   | ||||
|  static inline int may_ptrace_stop(void) | ||||
| diff --git a/kernel/sys.c b/kernel/sys.c | ||||
| index 1fbf388..0bc6b02 100644 | ||||
| index 38509dc..11e5355 100644 | ||||
| --- a/kernel/sys.c | ||||
| +++ b/kernel/sys.c | ||||
| @@ -67,6 +67,10 @@ | ||||
|  /* Hardening for Spectre-v1 */ | ||||
| @@ -75,6 +75,9 @@ | ||||
|  #include <linux/nospec.h> | ||||
|   | ||||
|  #include "uid16.h" | ||||
| +#ifdef CONFIG_SIGEXIT | ||||
| +#include "death_notify.h" | ||||
| +#endif | ||||
| + | ||||
|   | ||||
|  #ifndef SET_UNALIGN_CTL | ||||
|  # define SET_UNALIGN_CTL(a,b)	(-EINVAL) | ||||
|  #endif | ||||
| @@ -2478,6 +2482,11 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, | ||||
|  # define SET_UNALIGN_CTL(a, b)	(-EINVAL) | ||||
| @@ -2409,6 +2412,11 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, | ||||
|  		else | ||||
|  			error = PR_MCE_KILL_DEFAULT; | ||||
|  		break; | ||||
| @@ -532,5 +539,5 @@ index 1fbf388..0bc6b02 100644 | ||||
|  		error = prctl_set_mm(arg2, arg3, arg4, arg5); | ||||
|  		break; | ||||
| --  | ||||
| 2.7.4 | ||||
| 2.18.1 | ||||
|  | ||||
|   | ||||
| @@ -10,12 +10,14 @@ Use quirks to determine isolation for now until a later kernel can | ||||
| properly read the Fortville ACS capabilities. | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com> | ||||
|  | ||||
| --- | ||||
|  drivers/pci/quirks.c | 4 ++++ | ||||
|  1 file changed, 4 insertions(+) | ||||
|  | ||||
| diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c | ||||
| index 5614e3f..4a0bfed 100644 | ||||
| index 3db73ce..45c4e4d 100644 | ||||
| --- a/drivers/pci/quirks.c | ||||
| +++ b/drivers/pci/quirks.c | ||||
| @@ -4401,6 +4401,10 @@ static const struct pci_dev_acs_enabled { | ||||
| @@ -26,9 +28,9 @@ index 5614e3f..4a0bfed 100644 | ||||
| +	{ PCI_VENDOR_ID_INTEL, 0x1572, pci_quirk_mf_endpoint_acs }, | ||||
| +	{ PCI_VENDOR_ID_INTEL, 0x1586, pci_quirk_mf_endpoint_acs }, | ||||
| +	{ PCI_VENDOR_ID_INTEL, 0x1583, pci_quirk_mf_endpoint_acs }, | ||||
|  	/* Intel PCH root ports */ | ||||
|  	{ PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_intel_pch_acs }, | ||||
|  	{ PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_intel_spt_pch_acs }, | ||||
|  	/* QCOM QDF2xxx root ports */ | ||||
|  	{ PCI_VENDOR_ID_QCOM, 0x0400, pci_quirk_qcom_rp_acs }, | ||||
|  	{ PCI_VENDOR_ID_QCOM, 0x0401, pci_quirk_qcom_rp_acs }, | ||||
| --  | ||||
| 1.8.3.1 | ||||
| 2.18.1 | ||||
|  | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -18,70 +18,42 @@ definitions on module deinit | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| Signed-off-by: Robin Lu <bin1.lu@intel.com> | ||||
| --- | ||||
|  fs/namei.c                |   2 +- | ||||
|  fs/nfsd/vfs.c             |   2 +- | ||||
|  fs/xattr.c                |   1 + | ||||
|  include/linux/fs.h        |  15 +----- | ||||
|  include/linux/ima.h       |  77 ++++++-------------------- | ||||
|  include/linux/integrity.h |  22 +++----- | ||||
|  security/security.c       | 111 +++++++++++++++++++++++++++++++++++++- | ||||
|  7 files changed, 140 insertions(+), 90 deletions(-) | ||||
| Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com> | ||||
|  | ||||
| --- | ||||
|  fs/xattr.c          |   1 + | ||||
|  include/linux/fs.h  |  15 +---- | ||||
|  security/security.c | 137 ++++++++++++++++++++++++++++++++++++++++++++ | ||||
|  3 files changed, 140 insertions(+), 13 deletions(-) | ||||
|  | ||||
| diff --git a/fs/namei.c b/fs/namei.c | ||||
| index 9f90b63..bf91ea0 100644 | ||||
| --- a/fs/namei.c | ||||
| +++ b/fs/namei.c | ||||
| @@ -3243,7 +3243,7 @@ opened: | ||||
|  	error = open_check_o_direct(file); | ||||
|  	if (error) | ||||
|  		goto exit_fput; | ||||
| -	error = ima_file_check(file, op->acc_mode); | ||||
| +	error = ima_file_check(file, op->acc_mode, *opened); | ||||
|  	if (error) | ||||
|  		goto exit_fput; | ||||
|   | ||||
| diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c | ||||
| index 00e98c3..cb9250e 100644 | ||||
| --- a/fs/nfsd/vfs.c | ||||
| +++ b/fs/nfsd/vfs.c | ||||
| @@ -898,7 +898,7 @@ nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type, | ||||
|  		goto out_nfserr; | ||||
|  	} | ||||
|   | ||||
| -	host_err = ima_file_check(file, may_flags); | ||||
| +	host_err = ima_file_check(file, may_flags, 0); | ||||
|  	if (host_err) { | ||||
|  		fput(file); | ||||
|  		goto out_nfserr; | ||||
| diff --git a/fs/xattr.c b/fs/xattr.c | ||||
| index e540aca..cc307ec 100644 | ||||
| index 0d6a6a4..7ce4701 100644 | ||||
| --- a/fs/xattr.c | ||||
| +++ b/fs/xattr.c | ||||
| @@ -208,6 +208,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value, | ||||
| @@ -295,6 +295,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value, | ||||
|  	*xattr_value = value; | ||||
|  	return error; | ||||
|  } | ||||
| +EXPORT_SYMBOL_GPL(vfs_getxattr_alloc); | ||||
|   | ||||
|  /* Compare an extended attribute value with the given value */ | ||||
|  int vfs_xattr_cmp(struct dentry *dentry, const char *xattr_name, | ||||
|  ssize_t | ||||
|  __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name, | ||||
| diff --git a/include/linux/fs.h b/include/linux/fs.h | ||||
| index eb6f994..2dbaf80 100644 | ||||
| index c603897..118e7cd 100644 | ||||
| --- a/include/linux/fs.h | ||||
| +++ b/include/linux/fs.h | ||||
| @@ -681,9 +681,8 @@ struct inode { | ||||
|  			struct fsnotify_mark_connector __rcu *i_fsnotify_marks) | ||||
|  #endif | ||||
|   | ||||
| -#if defined(CONFIG_IMA) && defined(CONFIG_X86_64) | ||||
| @@ -669,9 +669,8 @@ struct inode { | ||||
|  	atomic_t		i_count; | ||||
|  	atomic_t		i_dio_count; | ||||
|  	atomic_t		i_writecount; | ||||
| -#ifdef CONFIG_IMA | ||||
|  	atomic_t		i_readcount; /* struct files open RO */ | ||||
| -#endif | ||||
| + | ||||
|  	void			*i_private; /* fs or device private pointer */ | ||||
|  }; | ||||
|   | ||||
| @@ -2852,7 +2851,6 @@ static inline bool inode_is_open_for_write(const struct inode *inode) | ||||
|  	const struct file_operations	*i_fop;	/* former ->i_op->default_file_ops */ | ||||
|  	struct file_lock_context	*i_flctx; | ||||
|  	struct address_space	i_data; | ||||
| @@ -2867,7 +2866,6 @@ static inline bool inode_is_open_for_write(const struct inode *inode) | ||||
|  	return atomic_read(&inode->i_writecount) > 0; | ||||
|  } | ||||
|   | ||||
| @@ -89,7 +61,7 @@ index eb6f994..2dbaf80 100644 | ||||
|  static inline void i_readcount_dec(struct inode *inode) | ||||
|  { | ||||
|  	BUG_ON(!atomic_read(&inode->i_readcount)); | ||||
| @@ -2862,16 +2860,7 @@ static inline void i_readcount_inc(struct inode *inode) | ||||
| @@ -2877,16 +2875,7 @@ static inline void i_readcount_inc(struct inode *inode) | ||||
|  { | ||||
|  	atomic_inc(&inode->i_readcount); | ||||
|  } | ||||
| @@ -106,131 +78,12 @@ index eb6f994..2dbaf80 100644 | ||||
| + | ||||
|  extern int do_pipe_flags(int *, int); | ||||
|   | ||||
|  extern int kernel_read(struct file *, loff_t, char *, unsigned long); | ||||
| diff --git a/include/linux/ima.h b/include/linux/ima.h | ||||
| index 1b7f268..9fee45c 100644 | ||||
| --- a/include/linux/ima.h | ||||
| +++ b/include/linux/ima.h | ||||
| @@ -13,64 +13,21 @@ | ||||
|  #include <linux/fs.h> | ||||
|  struct linux_binprm; | ||||
|   | ||||
| -#ifdef CONFIG_IMA | ||||
| -extern int ima_bprm_check(struct linux_binprm *bprm); | ||||
| -extern int ima_file_check(struct file *file, int mask); | ||||
| -extern void ima_file_free(struct file *file); | ||||
| -extern int ima_file_mmap(struct file *file, unsigned long prot); | ||||
| -extern int ima_module_check(struct file *file); | ||||
| - | ||||
| -#else | ||||
| -static inline int ima_bprm_check(struct linux_binprm *bprm) | ||||
| -{ | ||||
| -	return 0; | ||||
| -} | ||||
| - | ||||
| -static inline int ima_file_check(struct file *file, int mask) | ||||
| -{ | ||||
| -	return 0; | ||||
| -} | ||||
| - | ||||
| -static inline void ima_file_free(struct file *file) | ||||
| -{ | ||||
| -	return; | ||||
| -} | ||||
| - | ||||
| -static inline int ima_file_mmap(struct file *file, unsigned long prot) | ||||
| -{ | ||||
| -	return 0; | ||||
| -} | ||||
| - | ||||
| -static inline int ima_module_check(struct file *file) | ||||
| -{ | ||||
| -	return 0; | ||||
| -} | ||||
| - | ||||
| -#endif /* CONFIG_IMA */ | ||||
| - | ||||
| -#ifdef CONFIG_IMA_APPRAISE | ||||
| -extern void ima_inode_post_setattr(struct dentry *dentry); | ||||
| -extern int ima_inode_setxattr(struct dentry *dentry, const char *xattr_name, | ||||
| +/* | ||||
| + * The IMA Kernel module has to redefine these symbols so that | ||||
| + * the kernel module can link a dynamic function, as a hook into | ||||
| + * the Kernel FS calls (which use these) | ||||
| + */ | ||||
| +/* ifdef CONFIG_IMA */ | ||||
| +extern int (*ima_bprm_check)(struct linux_binprm *bprm); | ||||
| +extern int (*ima_file_check)(struct file *file, int mask, int opened); | ||||
| +extern void (*ima_file_free)(struct file *file); | ||||
| +extern int (*ima_file_mmap)(struct file *file, unsigned long prot); | ||||
| +extern int (*ima_module_check)(struct file *file); | ||||
| + | ||||
| +/* ifdef CONFIG_IMA_APPRAISE */ | ||||
| +extern void (*ima_inode_post_setattr)(struct dentry *dentry); | ||||
| +extern int (*ima_inode_setxattr)(struct dentry *dentry, const char *xattr_name, | ||||
|  		       const void *xattr_value, size_t xattr_value_len); | ||||
| -extern int ima_inode_removexattr(struct dentry *dentry, const char *xattr_name); | ||||
| -#else | ||||
| -static inline void ima_inode_post_setattr(struct dentry *dentry) | ||||
| -{ | ||||
| -	return; | ||||
| -} | ||||
| - | ||||
| -static inline int ima_inode_setxattr(struct dentry *dentry, | ||||
| -				     const char *xattr_name, | ||||
| -				     const void *xattr_value, | ||||
| -				     size_t xattr_value_len) | ||||
| -{ | ||||
| -	return 0; | ||||
| -} | ||||
| - | ||||
| -static inline int ima_inode_removexattr(struct dentry *dentry, | ||||
| -					const char *xattr_name) | ||||
| -{ | ||||
| -	return 0; | ||||
| -} | ||||
| -#endif /* CONFIG_IMA_APPRAISE */ | ||||
| -#endif /* _LINUX_IMA_H */ | ||||
| +extern int (*ima_inode_removexattr)(struct dentry *dentry, const char *xattr_name); | ||||
| +#endif | ||||
| diff --git a/include/linux/integrity.h b/include/linux/integrity.h | ||||
| index 83222ce..a5040b6 100644 | ||||
| --- a/include/linux/integrity.h | ||||
| +++ b/include/linux/integrity.h | ||||
| @@ -21,20 +21,14 @@ enum integrity_status { | ||||
|  }; | ||||
|   | ||||
|  /* List of EVM protected security xattrs */ | ||||
| -#ifdef CONFIG_INTEGRITY | ||||
| -extern struct integrity_iint_cache *integrity_inode_get(struct inode *inode); | ||||
| -extern void integrity_inode_free(struct inode *inode); | ||||
| +/* | ||||
| + * The Integrity Kernel module has to redefine these symbols so that | ||||
| + * the kernel module can link a dynamic function, as a hook into | ||||
| + * the Kernel Security subsystem (which use these) | ||||
| + */ | ||||
|   | ||||
| -#else | ||||
| -static inline struct integrity_iint_cache * | ||||
| -				integrity_inode_get(struct inode *inode) | ||||
| -{ | ||||
| -	return NULL; | ||||
| -} | ||||
| +/* #ifdef CONFIG_INTEGRITY */ | ||||
| +extern struct integrity_iint_cache *(*integrity_inode_get)(struct inode *inode); | ||||
| +extern void (*integrity_inode_free)(struct inode *inode); | ||||
|   | ||||
| -static inline void integrity_inode_free(struct inode *inode) | ||||
| -{ | ||||
| -	return; | ||||
| -} | ||||
| -#endif /* CONFIG_INTEGRITY */ | ||||
|  #endif /* _LINUX_INTEGRITY_H */ | ||||
|  #define __kernel_read_file_id(id) \ | ||||
| diff --git a/security/security.c b/security/security.c | ||||
| index f069482..646a0e3 100644 | ||||
| index 5dce670..838a9ef 100644 | ||||
| --- a/security/security.c | ||||
| +++ b/security/security.c | ||||
| @@ -161,6 +161,110 @@ EXPORT_SYMBOL(unregister_lsm_notifier); | ||||
| @@ -227,6 +227,143 @@ EXPORT_SYMBOL(unregister_lsm_notifier); | ||||
|   | ||||
|  /* Security operations */ | ||||
|   | ||||
| @@ -251,13 +104,20 @@ index f069482..646a0e3 100644 | ||||
| +    return; | ||||
| +} | ||||
| + | ||||
| +static inline void integrity_load_keys_kmod(void) | ||||
| +{ | ||||
| +} | ||||
| + | ||||
| +struct integrity_iint_cache * | ||||
| +    (*integrity_inode_get)(struct inode *) = &integrity_inode_get_kmod; | ||||
| +void | ||||
| +    (*integrity_inode_free)(struct inode*) = &integrity_inode_free_kmod; | ||||
| +void | ||||
| +    (*integrity_load_keys)(void) = &integrity_load_keys_kmod; | ||||
| + | ||||
| +EXPORT_SYMBOL_GPL(integrity_inode_get); | ||||
| +EXPORT_SYMBOL_GPL(integrity_inode_free); | ||||
| +EXPORT_SYMBOL_GPL(integrity_load_keys); | ||||
| +#endif | ||||
| + | ||||
| +#ifndef CONFIG_IMA | ||||
| @@ -281,11 +141,22 @@ index f069482..646a0e3 100644 | ||||
| +    return 0; | ||||
| +} | ||||
| + | ||||
| +static int ima_module_check_kmod(struct file *file) | ||||
| +static int ima_read_file_kmod(struct file *file, enum kernel_read_file_id id) | ||||
| +{ | ||||
| +    return 0; | ||||
| +} | ||||
| + | ||||
| +static int ima_post_read_file_kmod(struct file *file, void *buf, loff_t size, | ||||
| +				     enum kernel_read_file_id id) | ||||
| +{ | ||||
| +    return 0; | ||||
| +} | ||||
| + | ||||
| +static void ima_post_path_mknod_kmod(struct dentry *dentry) | ||||
| +{ | ||||
| +    return; | ||||
| +} | ||||
| + | ||||
| +int | ||||
| +    (*ima_bprm_check)(struct linux_binprm *) = &ima_bprm_check_kmod; | ||||
| +int | ||||
| @@ -295,16 +166,28 @@ index f069482..646a0e3 100644 | ||||
| +int | ||||
| +    (*ima_file_mmap)(struct file*, unsigned long) = &ima_file_mmap_kmod; | ||||
| +int | ||||
| +    (*ima_module_check)(struct file *) = &ima_module_check_kmod; | ||||
| +    (*ima_read_file)(struct file *file, enum kernel_read_file_id id) = &ima_read_file_kmod; | ||||
| +int | ||||
| +    (*ima_post_read_file)(struct file *file, void *buf, loff_t size, | ||||
| +			      enum kernel_read_file_id id) = &ima_post_read_file_kmod; | ||||
| +void | ||||
| +    (*ima_post_path_mknod)(struct dentry *dentry) = &ima_post_path_mknod_kmod; | ||||
| + | ||||
| +EXPORT_SYMBOL_GPL(ima_bprm_check); | ||||
| +EXPORT_SYMBOL_GPL(ima_file_check); | ||||
| +EXPORT_SYMBOL_GPL(ima_file_free); | ||||
| +EXPORT_SYMBOL_GPL(ima_file_mmap); | ||||
| +EXPORT_SYMBOL_GPL(ima_module_check); | ||||
| +EXPORT_SYMBOL_GPL(ima_read_file); | ||||
| +EXPORT_SYMBOL_GPL(ima_post_read_file); | ||||
| +EXPORT_SYMBOL_GPL(ima_post_path_mknod); | ||||
| +#endif | ||||
| + | ||||
| +#ifndef CONFIG_IMA_APPRAISE | ||||
| +static bool is_ima_appraise_enabled_kmod(void) | ||||
| +{ | ||||
| +	return 0; | ||||
| +} | ||||
| + | ||||
| +static void ima_inode_post_setattr_kmod(struct dentry *dentry) | ||||
| +{ | ||||
| +    return; | ||||
| @@ -324,6 +207,8 @@ index f069482..646a0e3 100644 | ||||
| +    return 0; | ||||
| +} | ||||
| + | ||||
| +bool | ||||
| +    (*is_ima_appraise_enabled)(void) = &is_ima_appraise_enabled_kmod; | ||||
| +void | ||||
| +    (*ima_inode_post_setattr)(struct dentry *) = &ima_inode_post_setattr_kmod; | ||||
| +int | ||||
| @@ -333,43 +218,15 @@ index f069482..646a0e3 100644 | ||||
| +    (*ima_inode_removexattr)(struct dentry *, | ||||
| +        const char *) = &ima_inode_removexattr_kmod; | ||||
| + | ||||
| +EXPORT_SYMBOL_GPL(is_ima_appraise_enabled); | ||||
| +EXPORT_SYMBOL_GPL(ima_inode_post_setattr); | ||||
| +EXPORT_SYMBOL_GPL(ima_inode_setxattr); | ||||
| +EXPORT_SYMBOL_GPL(ima_inode_removexattr); | ||||
| +#endif | ||||
| + | ||||
|  int security_ptrace_access_check(struct task_struct *child, unsigned int mode) | ||||
|  int security_binder_set_context_mgr(struct task_struct *mgr) | ||||
|  { | ||||
|  #ifdef CONFIG_SECURITY_YAMA_STACKED | ||||
| @@ -718,8 +822,11 @@ EXPORT_SYMBOL(security_inode_listsecurity); | ||||
|   | ||||
|  void security_inode_getsecid(struct inode *inode, u32 *secid) | ||||
|  { | ||||
| -	security_ops->inode_getsecid(inode, secid); | ||||
| +    if (unlikely(IS_PRIVATE(inode))) | ||||
| +        return; | ||||
| +    security_ops->inode_getsecid(inode, secid); | ||||
|  } | ||||
| +EXPORT_SYMBOL_GPL(security_inode_getsecid); | ||||
|   | ||||
|  int security_inode_copy_up(struct dentry *src, struct cred **new) | ||||
|  { | ||||
| @@ -1528,6 +1635,7 @@ int security_audit_rule_init(u32 field, u32 op, char *rulestr, void **lsmrule) | ||||
|  { | ||||
|  	return security_ops->audit_rule_init(field, op, rulestr, lsmrule); | ||||
|  } | ||||
| +EXPORT_SYMBOL_GPL(security_audit_rule_init); | ||||
|   | ||||
|  int security_audit_rule_known(struct audit_krule *krule) | ||||
|  { | ||||
| @@ -1544,6 +1652,7 @@ int security_audit_rule_match(u32 secid, u32 field, u32 op, void *lsmrule, | ||||
|  { | ||||
|  	return security_ops->audit_rule_match(secid, field, op, lsmrule, actx); | ||||
|  } | ||||
| +EXPORT_SYMBOL_GPL(security_audit_rule_match); | ||||
|   | ||||
|  #endif /* CONFIG_AUDIT */ | ||||
|   | ||||
|  	return call_int_hook(binder_set_context_mgr, 0, mgr); | ||||
| --  | ||||
| 1.8.3.1 | ||||
| 2.18.1 | ||||
|  | ||||
|   | ||||
| @@ -18,54 +18,44 @@ IMA public key as a compiled data blob, similar to how the Kernel loads | ||||
| trusted X509 keys into the system truststore (.system_keyring) | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  .gitignore                    |  1 + | ||||
|  include/keys/system_keyring.h |  2 ++ | ||||
|  kernel/Makefile               | 42 ++++++++++++++++++++-- | ||||
|  kernel/ima_certificate.S      | 20 +++++++++++ | ||||
|  kernel/system_keyring.c       | 82 +++++++++++++++++++++++++++++++++++++++++++ | ||||
|  5 files changed, 145 insertions(+), 2 deletions(-) | ||||
|  create mode 100644 kernel/ima_certificate.S | ||||
| Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com> | ||||
|  | ||||
| diff --git a/.gitignore b/.gitignore | ||||
| index f73f35f..7148219 100644 | ||||
| --- a/.gitignore | ||||
| +++ b/.gitignore | ||||
| @@ -106,3 +106,4 @@ localversion | ||||
| --- | ||||
|  certs/.gitignore              |  1 + | ||||
|  certs/Makefile                | 45 +++++++++++++++++++- | ||||
|  certs/ima_certificate.S       | 20 +++++++++ | ||||
|  certs/system_keyring.c        | 80 +++++++++++++++++++++++++++++++++++ | ||||
|  include/keys/system_keyring.h |  2 + | ||||
|  5 files changed, 146 insertions(+), 2 deletions(-) | ||||
|  create mode 100644 certs/ima_certificate.S | ||||
|  | ||||
| diff --git a/certs/.gitignore b/certs/.gitignore | ||||
| index f51aea4..3396b4a 100644 | ||||
| --- a/certs/.gitignore | ||||
| +++ b/certs/.gitignore | ||||
| @@ -2,3 +2,4 @@ | ||||
|  # Generated files | ||||
|  # | ||||
|  x509_certificate_list | ||||
| +ima_x509_certificate | ||||
| diff --git a/certs/Makefile b/certs/Makefile | ||||
| index 5d0999b..3e868ea 100644 | ||||
| --- a/certs/Makefile | ||||
| +++ b/certs/Makefile | ||||
| @@ -3,7 +3,7 @@ | ||||
|  # Makefile for the linux kernel signature checking certificates. | ||||
|  # | ||||
|   | ||||
|  # Red Hat key security | ||||
|  kernel/x509_certificate_list | ||||
| +kernel/ima_x509_certificate | ||||
| diff --git a/include/keys/system_keyring.h b/include/keys/system_keyring.h | ||||
| index 0e49b3c..6b2da90 100644 | ||||
| --- a/include/keys/system_keyring.h | ||||
| +++ b/include/keys/system_keyring.h | ||||
| @@ -34,4 +34,6 @@ static inline struct key *get_system_trusted_keyring(void) | ||||
|   | ||||
|  #endif /* CONFIG_SYSTEM_TRUSTED_KEYRING */ | ||||
|   | ||||
| +extern struct key *ima_keyring; | ||||
| + | ||||
|  #endif /* _KEYS_SYSTEM_KEYRING_H */ | ||||
| diff --git a/kernel/Makefile b/kernel/Makefile | ||||
| index 44a82c1..000b9a8 100644 | ||||
| --- a/kernel/Makefile | ||||
| +++ b/kernel/Makefile | ||||
| @@ -57,7 +57,7 @@ obj-$(CONFIG_QUEUED_SPINLOCKS) += qspinlock.o | ||||
|  obj-$(CONFIG_QUEUED_RWLOCKS) += qrwlock.o qrwlock_gen.o | ||||
|  obj-$(CONFIG_LOCK_SPIN_ON_OWNER) += osq_lock.o | ||||
|  obj-$(CONFIG_UID16) += uid16.o | ||||
| -obj-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += system_keyring.o system_certificates.o | ||||
| +obj-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += system_keyring.o system_certificates.o ima_certificate.o | ||||
|  obj-$(CONFIG_MODULES) += module.o | ||||
|  obj-$(CONFIG_MODULE_SIG) += module_signing.o | ||||
|  obj-$(CONFIG_MODULE_SIG_UEFI) += modsign_uefi.o | ||||
| @@ -199,7 +199,45 @@ targets += $(obj)/.x509.list | ||||
|  $(obj)/.x509.list: | ||||
|  	@echo $(X509_CERTIFICATES) >$@ | ||||
|  obj-$(CONFIG_SYSTEM_BLACKLIST_KEYRING) += blacklist.o | ||||
|  ifneq ($(CONFIG_SYSTEM_BLACKLIST_HASH_LIST),"") | ||||
|  obj-$(CONFIG_SYSTEM_BLACKLIST_KEYRING) += blacklist_hashes.o | ||||
| @@ -29,7 +29,48 @@ $(obj)/x509_certificate_list: scripts/extract-cert $(SYSTEM_TRUSTED_KEYS_SRCPREF | ||||
|  	$(call if_changed,extract_certs,$(SYSTEM_TRUSTED_KEYS_SRCPREFIX)$(CONFIG_SYSTEM_TRUSTED_KEYS)) | ||||
|  endif # CONFIG_SYSTEM_TRUSTED_KEYRING | ||||
|   | ||||
| -clean-files := x509_certificate_list .x509.list | ||||
| + | ||||
| +############################################################################### | ||||
| +# | ||||
| +# We will roll in the IMA X.509 certificate and pull it in the kernel | ||||
| @@ -89,14 +79,18 @@ index 44a82c1..000b9a8 100644 | ||||
| +endif | ||||
| +endif | ||||
| + | ||||
| +kernel/ima_certificate.o: $(obj)/ima_x509_certificate | ||||
| +# GCC doesn't include .incbin files in -MD generated dependencies (PR#66871) | ||||
| +$(obj)/ima_certificate.o: $(obj)/ima_x509_certificate | ||||
| + | ||||
| +quiet_cmd_imacert  = CERTS   $@ | ||||
| +      cmd_imacert  = cat $(IMA_X509_CERTIFICATE) >$@ $(foreach IMA_X509,$(IMA_X509_CERTIFICATE),; echo "  - Including cert $(IMA_X509)") | ||||
| +# Cope with signing_key.x509 existing in $(srctree) not $(objtree) | ||||
| +AFLAGS_ima_certificate.o := -I$(IMA_X509_CERTIFICATE) | ||||
| + | ||||
| +targets += $(obj)/ima_x509_certificate | ||||
| +$(obj)/ima_x509_certificate: $(IMA_X509_CERTIFICATE) $(obj)/.x509.ima | ||||
| +	$(call if_changed,imacert) | ||||
| +quiet_cmd_extract_certs  = EXTRACT_CERTS   $(patsubst "%",%,$(2)) | ||||
| +      cmd_extract_certs  = scripts/extract-cert $(2) $@ || ( rm $@; exit 1) | ||||
| + | ||||
| +targets += ima_x509_certificate | ||||
| +$(obj)/ima_x509_certificate: scripts/extract-cert $(SYSTEM_TRUSTED_KEYS_SRCPREFIX)$(SYSTEM_TRUSTED_KEYS_FILENAME) FORCE | ||||
| +	$(call if_changed,extract_certs,$(SYSTEM_TRUSTED_KEYS_SRCPREFIX)$(CONFIG_SYSTEM_TRUSTED_KEYS)) | ||||
| + | ||||
| +targets += $(obj)/.x509.ima | ||||
| +$(obj)/.x509.ima: | ||||
| @@ -104,14 +98,14 @@ index 44a82c1..000b9a8 100644 | ||||
| + | ||||
| + | ||||
| +clean-files := x509_certificate_list .x509.list ima_x509_certificate .x509.ima | ||||
|  endif | ||||
|   | ||||
|  ifeq ($(CONFIG_MODULE_SIG),y) | ||||
| diff --git a/kernel/ima_certificate.S b/kernel/ima_certificate.S | ||||
|  ############################################################################### | ||||
| diff --git a/certs/ima_certificate.S b/certs/ima_certificate.S | ||||
| new file mode 100644 | ||||
| index 0000000..0c665dd | ||||
| index 0000000..f163630 | ||||
| --- /dev/null | ||||
| +++ b/kernel/ima_certificate.S | ||||
| +++ b/certs/ima_certificate.S | ||||
| @@ -0,0 +1,20 @@ | ||||
| +#include <linux/export.h> | ||||
| +#include <linux/init.h> | ||||
| @@ -122,7 +116,7 @@ index 0000000..0c665dd | ||||
| +    .globl VMLINUX_SYMBOL(ima_system_certificate) | ||||
| +VMLINUX_SYMBOL(ima_system_certificate): | ||||
| +__cert_list_start: | ||||
| +    .incbin "kernel/ima_x509_certificate" | ||||
| +    .incbin "certs/ima_x509_certificate" | ||||
| +__cert_list_end: | ||||
| + | ||||
| +    .align 8 | ||||
| @@ -133,13 +127,13 @@ index 0000000..0c665dd | ||||
| +#else | ||||
| +    .long __cert_list_end - __cert_list_start | ||||
| +#endif | ||||
| diff --git a/kernel/system_keyring.c b/kernel/system_keyring.c | ||||
| index c15e93f..92beb15 100644 | ||||
| --- a/kernel/system_keyring.c | ||||
| +++ b/kernel/system_keyring.c | ||||
| @@ -23,10 +23,15 @@ EXPORT_SYMBOL_GPL(system_trusted_keyring); | ||||
|  #ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING | ||||
|  struct key *system_blacklist_keyring; | ||||
| diff --git a/certs/system_keyring.c b/certs/system_keyring.c | ||||
| index 19bd050..02d7a8b 100644 | ||||
| --- a/certs/system_keyring.c | ||||
| +++ b/certs/system_keyring.c | ||||
| @@ -27,10 +27,15 @@ static struct key *secondary_trusted_keys; | ||||
|  #ifdef CONFIG_INTEGRITY_PLATFORM_KEYRING | ||||
|  static struct key *platform_trusted_keys; | ||||
|  #endif | ||||
| +struct key *ima_keyring; | ||||
| +EXPORT_SYMBOL_GPL(ima_keyring); | ||||
| @@ -150,12 +144,12 @@ index c15e93f..92beb15 100644 | ||||
| +extern __initconst const u8 ima_system_certificate[]; | ||||
| +extern __initconst const unsigned long ima_system_certificate_size; | ||||
| + | ||||
|  /* | ||||
|   * Load the compiled-in keys | ||||
|   */ | ||||
| @@ -57,6 +62,27 @@ static __init int system_trusted_keyring_init(void) | ||||
|   | ||||
|  	set_bit(KEY_FLAG_TRUSTED_ONLY, &system_blacklist_keyring->flags); | ||||
|  /** | ||||
|   * restrict_link_to_builtin_trusted - Restrict keyring addition by built in CA | ||||
|   * | ||||
| @@ -126,6 +131,25 @@ static __init int system_trusted_keyring_init(void) | ||||
|  	if (key_link(secondary_trusted_keys, builtin_trusted_keys) < 0) | ||||
|  		panic("Can't link trusted keyrings\n"); | ||||
|  #endif | ||||
| +	/* Normally (if trusted integrity keyring is disabled), the _ima | ||||
| +	 * keyring needs to be created by user space but that has the | ||||
| @@ -173,19 +167,16 @@ index c15e93f..92beb15 100644 | ||||
| +				current_cred(), | ||||
| +				((KEY_POS_ALL & ~KEY_POS_SETATTR) | | ||||
| +				KEY_USR_VIEW | KEY_USR_READ | KEY_USR_SEARCH), | ||||
| +				KEY_ALLOC_NOT_IN_QUOTA, NULL); | ||||
| +				KEY_ALLOC_NOT_IN_QUOTA, NULL, NULL); | ||||
| +	if (IS_ERR(ima_keyring)) | ||||
| +		panic("Can't allocate system IMA keyring\n"); | ||||
| + | ||||
| +    set_bit(KEY_FLAG_TRUSTED_ONLY, &ima_keyring->flags); | ||||
|   | ||||
|  	return 0; | ||||
|  } | ||||
| @@ -121,3 +147,59 @@ dodgy_cert: | ||||
|  	return 0; | ||||
| @@ -191,6 +215,62 @@ dodgy_cert: | ||||
|  } | ||||
|  late_initcall(load_system_certificate_list); | ||||
| + | ||||
|   | ||||
| +/* | ||||
| + * Load the compiled-in IMA certificate. | ||||
| + */ | ||||
| @@ -221,7 +212,7 @@ index c15e93f..92beb15 100644 | ||||
| +					   ((KEY_POS_ALL & ~KEY_POS_SETATTR) | | ||||
| +					   KEY_USR_VIEW | KEY_USR_READ), | ||||
| +					   KEY_ALLOC_NOT_IN_QUOTA | | ||||
| +					   KEY_ALLOC_TRUSTED); | ||||
| +					   KEY_ALLOC_BUILT_IN); | ||||
| +		if (IS_ERR(key)) { | ||||
| +			pr_err("Problem loading in-kernel X.509 certificate (%ld)\n", | ||||
| +			       PTR_ERR(key)); | ||||
| @@ -241,6 +232,21 @@ index c15e93f..92beb15 100644 | ||||
| +	return 0; | ||||
| +} | ||||
| +late_initcall(load_ima_system_certificate); | ||||
| + | ||||
|  #ifdef CONFIG_SYSTEM_DATA_VERIFICATION | ||||
|   | ||||
|  /** | ||||
| diff --git a/include/keys/system_keyring.h b/include/keys/system_keyring.h | ||||
| index c7f899e..4f757a7 100644 | ||||
| --- a/include/keys/system_keyring.h | ||||
| +++ b/include/keys/system_keyring.h | ||||
| @@ -73,4 +73,6 @@ static inline void set_platform_trusted_keys(struct key *keyring) | ||||
|   | ||||
|  #endif /* CONFIG_INTEGRITY_PLATFORM_KEYRING */ | ||||
|   | ||||
| +extern struct key *ima_keyring; | ||||
| + | ||||
|  #endif /* _KEYS_SYSTEM_KEYRING_H */ | ||||
| --  | ||||
| 1.8.3.1 | ||||
| 2.18.1 | ||||
|  | ||||
|   | ||||
| @@ -29,23 +29,25 @@ Signed-off-by: Chris Friesen <chris.friesen@windriver.com> | ||||
| Signed-off-by: Vu Tran <vu.tran@windriver.com> | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  Documentation/kernel-parameters.txt | 10 ++++++++++ | ||||
|  include/linux/cpumask.h             |  2 ++ | ||||
|  init/main.c                         |  6 ++---- | ||||
|  kernel/cpu.c                        | 13 +++++++++++++ | ||||
|  kernel/kmod.c                       |  3 +++ | ||||
|  kernel/kthread.c                    |  4 ++-- | ||||
|  6 files changed, 32 insertions(+), 6 deletions(-) | ||||
| Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com> | ||||
|  | ||||
| diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt | ||||
| index 1806170..2f7feb0 100644 | ||||
| --- a/Documentation/kernel-parameters.txt | ||||
| +++ b/Documentation/kernel-parameters.txt | ||||
| @@ -1551,6 +1551,16 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | ||||
|   | ||||
|  	kpti		[X86-64] Enable kernel page table isolation. | ||||
|   | ||||
| --- | ||||
|  Documentation/admin-guide/kernel-parameters.txt |  9 +++++++++ | ||||
|  include/linux/cpumask.h                         |  3 +++ | ||||
|  init/main.c                                     |  2 ++ | ||||
|  kernel/cpu.c                                    | 14 ++++++++++++++ | ||||
|  kernel/kthread.c                                |  4 ++-- | ||||
|  kernel/umh.c                                    |  3 +++ | ||||
|  6 files changed, 33 insertions(+), 2 deletions(-) | ||||
|  | ||||
| diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt | ||||
| index 3ff6f8d..2f4a7ad 100644 | ||||
| --- a/Documentation/admin-guide/kernel-parameters.txt | ||||
| +++ b/Documentation/admin-guide/kernel-parameters.txt | ||||
| @@ -1944,6 +1944,15 @@ | ||||
|  			Default: on | ||||
|  			Built with CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y, | ||||
|  			the default is off. | ||||
| +	kthread_cpus=	[KNL, SMP] Only run kernel threads on the specified | ||||
| +			list of processors. The kernel will start threads | ||||
| +			on the indicated processors only (unless there | ||||
| @@ -55,15 +57,14 @@ index 1806170..2f7feb0 100644 | ||||
| +			control where kmod and other user space threads | ||||
| +			are being spawned. Allows to keep kernel threads | ||||
| +			away from certain cores unless absoluteluy necessary. | ||||
| + | ||||
|  	kvm.ignore_msrs=[KVM] Ignore guest accesses to unhandled MSRs. | ||||
|  			Default is 0 (don't ignore, but inject #GP) | ||||
|   | ||||
| 	kpti=		[ARM64] Control page table isolation of user | ||||
| 			and kernel address spaces. | ||||
| diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h | ||||
| index 14b4972..37a6adf 100644 | ||||
| index 57f20a0..4526034 100644 | ||||
| --- a/include/linux/cpumask.h | ||||
| +++ b/include/linux/cpumask.h | ||||
| @@ -52,6 +52,7 @@ extern int nr_cpu_ids; | ||||
| @@ -54,6 +54,7 @@ extern unsigned int nr_cpu_ids; | ||||
|   *     cpu_present_mask - has bit 'cpu' set iff cpu is populated | ||||
|   *     cpu_online_mask  - has bit 'cpu' set iff cpu available to scheduler | ||||
|   *     cpu_active_mask  - has bit 'cpu' set iff cpu available to migration | ||||
| @@ -71,50 +72,52 @@ index 14b4972..37a6adf 100644 | ||||
|   * | ||||
|   *  If !CONFIG_HOTPLUG_CPU, present == possible, and active == online. | ||||
|   * | ||||
| @@ -88,6 +89,7 @@ extern const struct cpumask *const cpu_possible_mask; | ||||
|  extern const struct cpumask *const cpu_online_mask; | ||||
|  extern const struct cpumask *const cpu_present_mask; | ||||
|  extern const struct cpumask *const cpu_active_mask; | ||||
| +extern const struct cpumask *const cpu_kthread_mask; | ||||
| @@ -90,10 +91,12 @@ extern struct cpumask __cpu_possible_mask; | ||||
|  extern struct cpumask __cpu_online_mask; | ||||
|  extern struct cpumask __cpu_present_mask; | ||||
|  extern struct cpumask __cpu_active_mask; | ||||
| +extern struct cpumask __cpu_kthread_mask; | ||||
|  #define cpu_possible_mask ((const struct cpumask *)&__cpu_possible_mask) | ||||
|  #define cpu_online_mask   ((const struct cpumask *)&__cpu_online_mask) | ||||
|  #define cpu_present_mask  ((const struct cpumask *)&__cpu_present_mask) | ||||
|  #define cpu_active_mask   ((const struct cpumask *)&__cpu_active_mask) | ||||
| +#define cpu_kthread_mask  ((const struct cpumask *)&__cpu_kthread_mask) | ||||
|   | ||||
|  #if NR_CPUS > 1 | ||||
|  #define num_online_cpus()	cpumask_weight(cpu_online_mask) | ||||
| diff --git a/init/main.c b/init/main.c | ||||
| index 085c9c5..089f83d 100644 | ||||
| index 8cce5b1..0c5457a 100644 | ||||
| --- a/init/main.c | ||||
| +++ b/init/main.c | ||||
| @@ -959,10 +959,6 @@ static noinline void __init kernel_init_freeable(void) | ||||
|  	 * init can allocate pages on any node | ||||
|  	 */ | ||||
|  	set_mems_allowed(node_states[N_MEMORY]); | ||||
| -	/* | ||||
| -	 * init can run on any cpu. | ||||
| -	 */ | ||||
| -	set_cpus_allowed_ptr(current, cpu_all_mask); | ||||
|   | ||||
|  	cad_pid = task_pid(current); | ||||
|   | ||||
| @@ -978,6 +974,8 @@ static noinline void __init kernel_init_freeable(void) | ||||
| @@ -1135,6 +1135,8 @@ static noinline void __init kernel_init_freeable(void) | ||||
|   | ||||
|  	do_basic_setup(); | ||||
|   | ||||
| +	set_cpus_allowed_ptr(current, cpu_kthread_mask); | ||||
| + | ||||
|  	/* Open the /dev/console on the rootfs, this should never fail */ | ||||
|  	if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0) | ||||
|  	if (ksys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0) | ||||
|  		pr_err("Warning: unable to open an initial console.\n"); | ||||
| diff --git a/kernel/cpu.c b/kernel/cpu.c | ||||
| index 0d9e250..6c156bd 100644 | ||||
| index fb61ee6..4c7b343 100644 | ||||
| --- a/kernel/cpu.c | ||||
| +++ b/kernel/cpu.c | ||||
| @@ -1012,6 +1012,19 @@ static DECLARE_BITMAP(cpu_active_bits, CONFIG_NR_CPUS) __read_mostly; | ||||
|  const struct cpumask *const cpu_active_mask = to_cpumask(cpu_active_bits); | ||||
|  EXPORT_SYMBOL(cpu_active_mask); | ||||
| @@ -2218,6 +2218,9 @@ EXPORT_SYMBOL_GPL(cpu_bit_bitmap); | ||||
|  const DECLARE_BITMAP(cpu_all_bits, NR_CPUS) = CPU_BITS_ALL; | ||||
|  EXPORT_SYMBOL(cpu_all_bits); | ||||
|   | ||||
| +static DECLARE_BITMAP(cpu_kthread_bits, CONFIG_NR_CPUS) __read_mostly | ||||
| +	= CPU_BITS_ALL; | ||||
| +const struct cpumask *const cpu_kthread_mask = to_cpumask(cpu_kthread_bits); | ||||
| +EXPORT_SYMBOL(cpu_kthread_mask); | ||||
| +const DECLARE_BITMAP(cpu_kthread_bits, NR_CPUS) = CPU_BITS_ALL; | ||||
| +EXPORT_SYMBOL(cpu_kthread_bits); | ||||
| + | ||||
|  #ifdef CONFIG_INIT_ALL_POSSIBLE | ||||
|  struct cpumask __cpu_possible_mask __read_mostly | ||||
|  	= {CPU_BITS_ALL}; | ||||
| @@ -2235,6 +2238,17 @@ EXPORT_SYMBOL(__cpu_present_mask); | ||||
|  struct cpumask __cpu_active_mask __read_mostly; | ||||
|  EXPORT_SYMBOL(__cpu_active_mask); | ||||
|   | ||||
| +struct cpumask __cpu_kthread_mask __read_mostly; | ||||
| +EXPORT_SYMBOL(__cpu_kthread_mask); | ||||
| + | ||||
| +static int __init kthread_setup(char *str) | ||||
| +{ | ||||
| @@ -124,37 +127,23 @@ index 0d9e250..6c156bd 100644 | ||||
| +__setup("kthread_cpus=", kthread_setup); | ||||
| + | ||||
| + | ||||
|  void set_cpu_possible(unsigned int cpu, bool possible) | ||||
|  void init_cpu_present(const struct cpumask *src) | ||||
|  { | ||||
|  	if (possible) | ||||
| diff --git a/kernel/kmod.c b/kernel/kmod.c | ||||
| index 86ab754..4bf584b 100644 | ||||
| --- a/kernel/kmod.c | ||||
| +++ b/kernel/kmod.c | ||||
| @@ -204,6 +204,9 @@ static int ____call_usermodehelper(void *data) | ||||
|  	flush_signal_handlers(current, 1); | ||||
|  	spin_unlock_irq(¤t->sighand->siglock); | ||||
|   | ||||
| +	/* We can run only where init is allowed to run. */ | ||||
| +	set_cpus_allowed_ptr(current, cpu_kthread_mask); | ||||
| + | ||||
|  	/* | ||||
|  	 * Our parent is keventd, which runs with elevated scheduling priority. | ||||
|  	 * Avoid propagating that into the userspace child. | ||||
|  	cpumask_copy(&__cpu_present_mask, src); | ||||
| diff --git a/kernel/kthread.c b/kernel/kthread.c | ||||
| index 703d910..7ea32eb 100644 | ||||
| index 486dedb..697ec70 100644 | ||||
| --- a/kernel/kthread.c | ||||
| +++ b/kernel/kthread.c | ||||
| @@ -284,7 +284,7 @@ struct task_struct *kthread_create_on_node(int (*threadfn)(void *data), | ||||
| @@ -338,7 +338,7 @@ struct task_struct *__kthread_create_on_node(int (*threadfn)(void *data), | ||||
|  		 * The kernel thread should not inherit these properties. | ||||
|  		 */ | ||||
|  		sched_setscheduler_nocheck(create.result, SCHED_NORMAL, ¶m); | ||||
| -		set_cpus_allowed_ptr(create.result, cpu_all_mask); | ||||
| +		set_cpus_allowed_ptr(create.result, cpu_kthread_mask); | ||||
|  		sched_setscheduler_nocheck(task, SCHED_NORMAL, ¶m); | ||||
| -		set_cpus_allowed_ptr(task, cpu_all_mask); | ||||
| +		set_cpus_allowed_ptr(task, cpu_kthread_mask); | ||||
|  	} | ||||
|  	return create.result; | ||||
|  } | ||||
| @@ -454,7 +454,7 @@ int kthreadd(void *unused) | ||||
|  	kfree(create); | ||||
|  	return task; | ||||
| @@ -561,7 +561,7 @@ int kthreadd(void *unused) | ||||
|  	/* Setup a clean context for our children to inherit. */ | ||||
|  	set_task_comm(tsk, "kthreadd"); | ||||
|  	ignore_signals(tsk); | ||||
| @@ -163,6 +152,20 @@ index 703d910..7ea32eb 100644 | ||||
|  	set_mems_allowed(node_states[N_MEMORY]); | ||||
|   | ||||
|  	current->flags |= PF_NOFREEZE; | ||||
| diff --git a/kernel/umh.c b/kernel/umh.c | ||||
| index c449858..90c3a60 100644 | ||||
| --- a/kernel/umh.c | ||||
| +++ b/kernel/umh.c | ||||
| @@ -72,6 +72,9 @@ static int call_usermodehelper_exec_async(void *data) | ||||
|  	flush_signal_handlers(current, 1); | ||||
|  	spin_unlock_irq(¤t->sighand->siglock); | ||||
|   | ||||
| +	/* We can run only where init is allowed to run. */ | ||||
| +	set_cpus_allowed_ptr(current, cpu_kthread_mask); | ||||
| + | ||||
|  	/* | ||||
|  	 * Our parent (unbound workqueue) runs with elevated scheduling | ||||
|  	 * priority. Avoid propagating that into the userspace child. | ||||
| --  | ||||
| 1.8.3.1 | ||||
| 2.18.1 | ||||
|  | ||||
|   | ||||
| @@ -1,55 +0,0 @@ | ||||
| From 6771ec5b24042ea92c2a872d28b41e39c4445c68 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <6771ec5b24042ea92c2a872d28b41e39c4445c68.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: Hannes Reinecke <hare@suse.de> | ||||
| Date: Mon, 6 Jul 2015 13:07:58 +0200 | ||||
| Subject: [PATCH 24/26] aic94xx: Skip reading user settings if flash is not | ||||
|  found | ||||
|  | ||||
| If no user settings are found it's pointless trying to | ||||
| read them from flash. So skip that step. | ||||
| This also fixes a compilation warning about uninitialized variables in | ||||
| aic94xx. | ||||
|  | ||||
| Signed-off-by: Hannes Reinecke <hare@suse.de> | ||||
| Reviewed-by: Christoph Hellwig <hch@lst.de> | ||||
| Signed-off-by: James Bottomley <JBottomley@Odin.com> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  drivers/scsi/aic94xx/aic94xx_sds.c | 5 +++-- | ||||
|  1 file changed, 3 insertions(+), 2 deletions(-) | ||||
|  | ||||
| diff --git a/drivers/scsi/aic94xx/aic94xx_sds.c b/drivers/scsi/aic94xx/aic94xx_sds.c | ||||
| index edb43fd..c831e30 100644 | ||||
| --- a/drivers/scsi/aic94xx/aic94xx_sds.c | ||||
| +++ b/drivers/scsi/aic94xx/aic94xx_sds.c | ||||
| @@ -983,7 +983,7 @@ static int asd_process_ctrl_a_user(struct asd_ha_struct *asd_ha, | ||||
|  { | ||||
|  	int err, i; | ||||
|  	u32 offs, size; | ||||
| -	struct asd_ll_el *el; | ||||
| +	struct asd_ll_el *el = NULL; | ||||
|  	struct asd_ctrla_phy_settings *ps; | ||||
|  	struct asd_ctrla_phy_settings dflt_ps; | ||||
|   | ||||
| @@ -1004,6 +1004,7 @@ static int asd_process_ctrl_a_user(struct asd_ha_struct *asd_ha, | ||||
|   | ||||
|  		size = sizeof(struct asd_ctrla_phy_settings); | ||||
|  		ps = &dflt_ps; | ||||
| +		goto out_process; | ||||
|  	} | ||||
|   | ||||
|  	if (size == 0) | ||||
| @@ -1028,7 +1029,7 @@ static int asd_process_ctrl_a_user(struct asd_ha_struct *asd_ha, | ||||
|  		ASD_DPRINTK("couldn't find ctrla phy settings struct\n"); | ||||
|  		goto out2; | ||||
|  	} | ||||
| - | ||||
| +out_process: | ||||
|  	err = asd_process_ctrla_phy_settings(asd_ha, ps); | ||||
|  	if (err) { | ||||
|  		ASD_DPRINTK("couldn't process ctrla phy settings\n"); | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,224 +0,0 @@ | ||||
| From b6eb39977df83c5ceca5b35c041bb2923e5a47d8 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <b6eb39977df83c5ceca5b35c041bb2923e5a47d8.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: Akinobu Mita <akinobu.mita@gmail.com> | ||||
| Date: Tue, 31 May 2016 16:09:04 -0400 | ||||
| Subject: [PATCH 10/26] cma: add placement specifier for "cma=" kernel | ||||
|  parameter | ||||
|  | ||||
| Commit 5ea3b1b2f8ad9162684431ce6188102ca4c64b7a upstream | ||||
| Backported-by: Nam Ninh <nam.ninh@windriver.com> | ||||
|  | ||||
| Currently, "cma=" kernel parameter is used to specify the size of CMA, | ||||
| but we can't specify where it is located.  We want to locate CMA below | ||||
| 4GB for devices only supporting 32-bit addressing on 64-bit systems | ||||
| without iommu. | ||||
|  | ||||
| This enables to specify the placement of CMA by extending "cma=" kernel | ||||
| parameter. | ||||
|  | ||||
| Examples: | ||||
|  1. locate 64MB CMA below 4GB by "cma=64M@0-4G" | ||||
|  2. locate 64MB CMA exact at 512MB by "cma=64M@512M" | ||||
|  | ||||
| Note that the DMA contiguous memory allocator on x86 assumes that | ||||
| page_address() works for the pages to allocate.  So this change requires | ||||
| to limit end address of contiguous memory area upto max_pfn_mapped to | ||||
| prevent from locating it on highmem area by the argument of | ||||
| dma_contiguous_reserve(). | ||||
|  | ||||
| Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> | ||||
| Cc: Marek Szyprowski <m.szyprowski@samsung.com> | ||||
| Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | ||||
| Cc: David Woodhouse <dwmw2@infradead.org> | ||||
| Cc: Don Dutile <ddutile@redhat.com> | ||||
| Cc: Thomas Gleixner <tglx@linutronix.de> | ||||
| Cc: Ingo Molnar <mingo@redhat.com> | ||||
| Cc: "H. Peter Anvin" <hpa@zytor.com> | ||||
| Cc: Andi Kleen <andi@firstfloor.org> | ||||
| Cc: Yinghai Lu <yinghai@kernel.org> | ||||
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||||
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  Documentation/kernel-parameters.txt |  7 +++++-- | ||||
|  arch/x86/kernel/setup.c             |  2 +- | ||||
|  drivers/base/dma-contiguous.c       | 42 ++++++++++++++++++++++++++++--------- | ||||
|  include/linux/dma-contiguous.h      |  9 +++++--- | ||||
|  4 files changed, 44 insertions(+), 16 deletions(-) | ||||
|  | ||||
| diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt | ||||
| index 590c8c2..c8f8f82 100644 | ||||
| --- a/Documentation/kernel-parameters.txt | ||||
| +++ b/Documentation/kernel-parameters.txt | ||||
| @@ -580,8 +580,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | ||||
|  			Also note the kernel might malfunction if you disable | ||||
|  			some critical bits. | ||||
|   | ||||
| -	cma=nn[MG]	[ARM,KNL] | ||||
| -			Sets the size of kernel global memory area for contiguous | ||||
| +	cma=nn[MG]@[start[MG][-end[MG]]] | ||||
| +			[ARM,X86,KNL] | ||||
| +			Sets the size of kernel global memory area for | ||||
| +			contiguous memory allocations and optionally the | ||||
| +			placement constraint by the physical address range of | ||||
|  			memory allocations. For more information, see | ||||
|  			include/linux/dma-contiguous.h | ||||
|   | ||||
| diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c | ||||
| index 9eca4ac..4e39287 100644 | ||||
| --- a/arch/x86/kernel/setup.c | ||||
| +++ b/arch/x86/kernel/setup.c | ||||
| @@ -1298,7 +1298,7 @@ void __init setup_arch(char **cmdline_p) | ||||
|  	setup_real_mode(); | ||||
|   | ||||
|  	memblock_set_current_limit(get_max_mapped()); | ||||
| -	dma_contiguous_reserve(0); | ||||
| +	dma_contiguous_reserve(max_pfn_mapped << PAGE_SHIFT); | ||||
|   | ||||
|  	/* | ||||
|  	 * NOTE: On x86-32, only from this point on, fixmaps are ready for use. | ||||
| diff --git a/drivers/base/dma-contiguous.c b/drivers/base/dma-contiguous.c | ||||
| index a0f89fc..a7d5bda 100644 | ||||
| --- a/drivers/base/dma-contiguous.c | ||||
| +++ b/drivers/base/dma-contiguous.c | ||||
| @@ -59,11 +59,22 @@ struct cma *dma_contiguous_default_area; | ||||
|   */ | ||||
|  static const phys_addr_t size_bytes = CMA_SIZE_MBYTES * SZ_1M; | ||||
|  static phys_addr_t size_cmdline = -1; | ||||
| +static phys_addr_t base_cmdline; | ||||
| +static phys_addr_t limit_cmdline; | ||||
|   | ||||
|  static int __init early_cma(char *p) | ||||
|  { | ||||
|  	pr_debug("%s(%s)\n", __func__, p); | ||||
|  	size_cmdline = memparse(p, &p); | ||||
| +	if (*p != '@') | ||||
| +		return 0; | ||||
| +	base_cmdline = memparse(p + 1, &p); | ||||
| +	if (*p != '-') { | ||||
| +		limit_cmdline = base_cmdline + size_cmdline; | ||||
| +		return 0; | ||||
| +	} | ||||
| +	limit_cmdline = memparse(p + 1, &p); | ||||
| + | ||||
|  	return 0; | ||||
|  } | ||||
|  early_param("cma", early_cma); | ||||
| @@ -107,11 +118,18 @@ static inline __maybe_unused phys_addr_t cma_early_percent_memory(void) | ||||
|  void __init dma_contiguous_reserve(phys_addr_t limit) | ||||
|  { | ||||
|  	phys_addr_t selected_size = 0; | ||||
| +	phys_addr_t selected_base = 0; | ||||
| +	phys_addr_t selected_limit = limit; | ||||
| +	bool fixed = false; | ||||
|   | ||||
|  	pr_debug("%s(limit %08lx)\n", __func__, (unsigned long)limit); | ||||
|   | ||||
|  	if (size_cmdline != -1) { | ||||
|  		selected_size = size_cmdline; | ||||
| +		selected_base = base_cmdline; | ||||
| +		selected_limit = min_not_zero(limit_cmdline, limit); | ||||
| +		if (base_cmdline + size_cmdline == limit_cmdline) | ||||
| +			fixed = true; | ||||
|  	} else { | ||||
|  #ifdef CONFIG_CMA_SIZE_SEL_MBYTES | ||||
|  		selected_size = size_bytes; | ||||
| @@ -128,10 +146,12 @@ void __init dma_contiguous_reserve(phys_addr_t limit) | ||||
|  		pr_debug("%s: reserving %ld MiB for global area\n", __func__, | ||||
|  			 (unsigned long)selected_size / SZ_1M); | ||||
|   | ||||
| -		dma_contiguous_reserve_area(selected_size, 0, limit, | ||||
| -					    &dma_contiguous_default_area); | ||||
| +		dma_contiguous_reserve_area(selected_size, selected_base, | ||||
| +					    selected_limit, | ||||
| +					    &dma_contiguous_default_area, | ||||
| +					    fixed); | ||||
|  	} | ||||
| -}; | ||||
| +} | ||||
|   | ||||
|  static DEFINE_MUTEX(cma_mutex); | ||||
|   | ||||
| @@ -187,15 +207,20 @@ core_initcall(cma_init_reserved_areas); | ||||
|   * @base: Base address of the reserved area optional, use 0 for any | ||||
|   * @limit: End address of the reserved memory (optional, 0 for any). | ||||
|   * @res_cma: Pointer to store the created cma region. | ||||
| + * @fixed: hint about where to place the reserved area | ||||
|   * | ||||
|   * This function reserves memory from early allocator. It should be | ||||
|   * called by arch specific code once the early allocator (memblock or bootmem) | ||||
|   * has been activated and all other subsystems have already allocated/reserved | ||||
|   * memory. This function allows to create custom reserved areas for specific | ||||
|   * devices. | ||||
| + * | ||||
| + * If @fixed is true, reserve contiguous area at exactly @base.  If false, | ||||
| + * reserve in range from @base to @limit. | ||||
|   */ | ||||
|  int __init dma_contiguous_reserve_area(phys_addr_t size, phys_addr_t base, | ||||
| -				       phys_addr_t limit, struct cma **res_cma) | ||||
| +				       phys_addr_t limit, struct cma **res_cma, | ||||
| +				       bool fixed) | ||||
|  { | ||||
|  	struct cma *cma = &cma_areas[cma_area_count]; | ||||
|  	phys_addr_t alignment; | ||||
| @@ -221,18 +246,15 @@ int __init dma_contiguous_reserve_area(phys_addr_t size, phys_addr_t base, | ||||
|  	limit &= ~(alignment - 1); | ||||
|   | ||||
|  	/* Reserve memory */ | ||||
| -	if (base) { | ||||
| +	if (base && fixed) { | ||||
|  		if (memblock_is_region_reserved(base, size) || | ||||
|  		    memblock_reserve(base, size) < 0) { | ||||
|  			ret = -EBUSY; | ||||
|  			goto err; | ||||
|  		} | ||||
|  	} else { | ||||
| -		/* | ||||
| -		 * Use __memblock_alloc_base() since | ||||
| -		 * memblock_alloc_base() panic()s. | ||||
| -		 */ | ||||
| -		phys_addr_t addr = __memblock_alloc_base(size, alignment, limit); | ||||
| +		phys_addr_t addr = memblock_alloc_range(size, alignment, base, | ||||
| +							limit); | ||||
|  		if (!addr) { | ||||
|  			ret = -ENOMEM; | ||||
|  			goto err; | ||||
| diff --git a/include/linux/dma-contiguous.h b/include/linux/dma-contiguous.h | ||||
| index 1421a95..5e3f586 100644 | ||||
| --- a/include/linux/dma-contiguous.h | ||||
| +++ b/include/linux/dma-contiguous.h | ||||
| @@ -88,7 +88,8 @@ static inline void dma_contiguous_set_default(struct cma *cma) | ||||
|  void dma_contiguous_reserve(phys_addr_t addr_limit); | ||||
|   | ||||
|  int __init dma_contiguous_reserve_area(phys_addr_t size, phys_addr_t base, | ||||
| -				       phys_addr_t limit, struct cma **res_cma); | ||||
| +				       phys_addr_t limit, struct cma **res_cma, | ||||
| +				       bool fixed); | ||||
|   | ||||
|  /** | ||||
|   * dma_declare_contiguous() - reserve area for contiguous memory handling | ||||
| @@ -108,7 +109,7 @@ static inline int dma_declare_contiguous(struct device *dev, phys_addr_t size, | ||||
|  { | ||||
|  	struct cma *cma; | ||||
|  	int ret; | ||||
| -	ret = dma_contiguous_reserve_area(size, base, limit, &cma); | ||||
| +	ret = dma_contiguous_reserve_area(size, base, limit, &cma, true); | ||||
|  	if (ret == 0) | ||||
|  		dev_set_cma_area(dev, cma); | ||||
|   | ||||
| @@ -136,7 +137,9 @@ static inline void dma_contiguous_set_default(struct cma *cma) { } | ||||
|  static inline void dma_contiguous_reserve(phys_addr_t limit) { } | ||||
|   | ||||
|  static inline int dma_contiguous_reserve_area(phys_addr_t size, phys_addr_t base, | ||||
| -				       phys_addr_t limit, struct cma **res_cma) { | ||||
| +				       phys_addr_t limit, struct cma **res_cma, | ||||
| +				       bool fixed) | ||||
| +{ | ||||
|  	return -ENOSYS; | ||||
|  } | ||||
|   | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,35 +0,0 @@ | ||||
| From 66936b9bfda2fa11019bf45298047c7365fdacb4 Mon Sep 17 00:00:00 2001 | ||||
| From: Bart Wensley <barton.wensley@windriver.com> | ||||
| Date: Mon, 8 Jul 2019 13:32:44 -0500 | ||||
| Subject: [PATCH 1/1] compile fix for disabling CONFIG_MEMCG_KMEM | ||||
|  | ||||
| Signed-off-by: Bart Wensley <barton.wensley@windriver.com> | ||||
| --- | ||||
|  mm/memcontrol.c | 4 ++-- | ||||
|  1 file changed, 2 insertions(+), 2 deletions(-) | ||||
|  | ||||
| diff --git a/mm/memcontrol.c b/mm/memcontrol.c | ||||
| index 175fef9..e475427 100644 | ||||
| --- a/mm/memcontrol.c | ||||
| +++ b/mm/memcontrol.c | ||||
| @@ -2995,6 +2995,8 @@ static void __mem_cgroup_commit_charge(struct mem_cgroup *memcg, | ||||
|  	memcg_check_events(memcg, page); | ||||
|  } | ||||
|   | ||||
| +static DEFINE_MUTEX(memcg_limit_mutex); | ||||
| + | ||||
|  #ifdef CONFIG_MEMCG_KMEM | ||||
|  /* | ||||
|   * The memcg_slab_mutex is held whenever a per memcg kmem cache is created or | ||||
| @@ -3375,8 +3377,6 @@ static inline void memcg_resume_kmem_account(void) | ||||
|  	current->memcg_kmem_skip_account--; | ||||
|  } | ||||
|   | ||||
| -static DEFINE_MUTEX(memcg_limit_mutex); | ||||
| - | ||||
|  int __kmem_cache_destroy_memcg_children(struct kmem_cache *s) | ||||
|  { | ||||
|  	struct kmem_cache *c; | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,92 +0,0 @@ | ||||
| From c900922b59bc9f2b680f9d1846bf7599d8410de8 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <c900922b59bc9f2b680f9d1846bf7599d8410de8.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com> | ||||
| Date: Fri, 24 Feb 2017 13:25:14 +0100 | ||||
| Subject: [PATCH 21/26] cpuidle: menu: Avoid taking spinlock for accessing QoS | ||||
|  values | ||||
|  | ||||
| [commit	6dbf5cea05a7098a69f294c96b6d76f08562cae5 from linux-stable ] | ||||
|  | ||||
| After commit 9908859acaa9 (cpuidle/menu: add per CPU PM QoS resume | ||||
| latency consideration) the cpuidle menu governor calls | ||||
| dev_pm_qos_read_value() on CPU devices to read the current resume latency QoS | ||||
| constraint values for them.  That function takes a spinlock to prevent the | ||||
| device's power.qos pointer from becoming NULL during the access which is a | ||||
| problem for the RT patchset where spinlocks are converted into mutexes and | ||||
| the idle loop stops working. | ||||
|  | ||||
| However, it is not even necessary for the menu governor to take | ||||
| that spinlock, because the power.qos pointer accessed under it | ||||
| cannot be modified during the access anyway. | ||||
|  | ||||
| For this reason, introduce a "raw" routine for accessing device | ||||
| QoS resume latency constraints without locking and use it in the | ||||
| menu governor. | ||||
|  | ||||
| Fixes: 9908859acaa9 (cpuidle/menu: add per CPU PM QoS resume latency consideration) | ||||
| Acked-by: Alex Shi <alex.shi@linaro.org> | ||||
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> | ||||
| Signed-off-by: Alex Kozyrev <alex.kozyrev@windriver.com> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  drivers/base/power/qos.c         | 3 +-- | ||||
|  drivers/cpuidle/governors/menu.c | 2 +- | ||||
|  include/linux/pm_qos.h           | 6 ++++++ | ||||
|  3 files changed, 8 insertions(+), 3 deletions(-) | ||||
|  | ||||
| diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c | ||||
| index b2ca302..0cc2a13 100644 | ||||
| --- a/drivers/base/power/qos.c | ||||
| +++ b/drivers/base/power/qos.c | ||||
| @@ -104,8 +104,7 @@ EXPORT_SYMBOL_GPL(dev_pm_qos_flags); | ||||
|   */ | ||||
|  s32 __dev_pm_qos_read_value(struct device *dev) | ||||
|  { | ||||
| -	return IS_ERR_OR_NULL(dev->power.qos) ? | ||||
| -		0 : pm_qos_read_value(&dev->power.qos->latency); | ||||
| +	return dev_pm_qos_raw_read_value(dev); | ||||
|  } | ||||
|   | ||||
|  /** | ||||
| diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c | ||||
| index fe2dcb8..f9861fd 100644 | ||||
| --- a/drivers/cpuidle/governors/menu.c | ||||
| +++ b/drivers/cpuidle/governors/menu.c | ||||
| @@ -265,7 +265,7 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev) | ||||
|  	int i; | ||||
|  	int multiplier; | ||||
|  	struct timespec t; | ||||
| -	int resume_latency = dev_pm_qos_read_value(device); | ||||
| +	int resume_latency = dev_pm_qos_raw_read_value(device); | ||||
|   | ||||
|  	if (data->needs_update) { | ||||
|  		menu_update(drv, dev); | ||||
| diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h | ||||
| index 5281e7f..1d8b629 100644 | ||||
| --- a/include/linux/pm_qos.h | ||||
| +++ b/include/linux/pm_qos.h | ||||
| @@ -217,6 +217,11 @@ static inline s32 dev_pm_qos_requested_flags(struct device *dev) | ||||
|  { | ||||
|  	return dev->power.qos->flags_req->data.flr.flags; | ||||
|  } | ||||
| +static inline s32 dev_pm_qos_raw_read_value(struct device *dev) | ||||
| +{ | ||||
| +	return IS_ERR_OR_NULL(dev->power.qos) ? | ||||
| +		0 : pm_qos_read_value(&dev->power.qos->latency); | ||||
| +} | ||||
|  #else | ||||
|  static inline int dev_pm_qos_expose_latency_limit(struct device *dev, s32 value) | ||||
|  			{ return 0; } | ||||
| @@ -236,6 +241,7 @@ static inline void dev_pm_qos_hide_latency_tolerance(struct device *dev) {} | ||||
|   | ||||
|  static inline s32 dev_pm_qos_requested_latency(struct device *dev) { return 0; } | ||||
|  static inline s32 dev_pm_qos_requested_flags(struct device *dev) { return 0; } | ||||
| +static inline s32 dev_pm_qos_raw_read_value(struct device *dev) { return 0; } | ||||
|  #endif | ||||
|   | ||||
|  #endif | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,71 +0,0 @@ | ||||
| From e3d73746230638fd50670d67843346ccaebb885b Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <e3d73746230638fd50670d67843346ccaebb885b.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: Alex Shi <alex.shi@linaro.org> | ||||
| Date: Thu, 12 Jan 2017 21:27:04 +0800 | ||||
| Subject: [PATCH 19/26] cpuidle/menu: add per CPU PM QoS resume latency | ||||
|  consideration | ||||
|  | ||||
| [ commit 9908859acaa95640d4a07991a93f7cd5bfc18e02 from linux-stable ] | ||||
|  | ||||
| There may be special requirements on CPU response time, like if | ||||
| a interrupt is pinned to a CPU, that CPU should not go into excessively deep | ||||
| idle states.  For this reason, add a mechanism for adding PM QoS resume | ||||
| latency constraints for individual CPUs and modify the menu governor to take | ||||
| them into account. | ||||
|  | ||||
| To that end, extend the device PM QoS pm_qos_resume_latency attribute | ||||
| to CPUs, which is possible, because the exit latency for CPUs is | ||||
| effectively equivalent to the resume latency for devices. | ||||
|  | ||||
| Signed-off-by: Alex Shi <alex.shi@linaro.org> | ||||
| Acked-by: Rik van Riel <riel@redhat.com> | ||||
| [ rjw : Subject & changelog ] | ||||
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> | ||||
| Signed-off-by: Alex Kozyrev <alex.kozyrev@windriver.com> | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  drivers/cpuidle/governors/menu.c | 7 +++++++ | ||||
|  1 file changed, 7 insertions(+) | ||||
|  | ||||
| diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c | ||||
| index eb9fb0e..fe2dcb8 100644 | ||||
| --- a/drivers/cpuidle/governors/menu.c | ||||
| +++ b/drivers/cpuidle/governors/menu.c | ||||
| @@ -19,6 +19,7 @@ | ||||
|  #include <linux/tick.h> | ||||
|  #include <linux/sched.h> | ||||
|  #include <linux/math64.h> | ||||
| +#include <linux/cpu.h> | ||||
|  #include <linux/module.h> | ||||
|   | ||||
|  #define BUCKETS 12 | ||||
| @@ -259,10 +260,12 @@ again: | ||||
|  static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev) | ||||
|  { | ||||
|  	struct menu_device *data = &__get_cpu_var(menu_devices); | ||||
| +	struct device *device = get_cpu_device(dev->cpu); | ||||
|  	int latency_req = pm_qos_request(PM_QOS_CPU_DMA_LATENCY); | ||||
|  	int i; | ||||
|  	int multiplier; | ||||
|  	struct timespec t; | ||||
| +	int resume_latency = dev_pm_qos_read_value(device); | ||||
|   | ||||
|  	if (data->needs_update) { | ||||
|  		menu_update(drv, dev); | ||||
| @@ -271,6 +274,10 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev) | ||||
|   | ||||
|  	data->exit_us = 0; | ||||
|   | ||||
| +	/* resume_latency is 0 means no restriction */ | ||||
| +	if (resume_latency && resume_latency < latency_req) | ||||
| +		latency_req = resume_latency; | ||||
| + | ||||
|  	/* Special case when user has set very strict latency requirement */ | ||||
|  	if (unlikely(latency_req == 0)) | ||||
|  		return 0; | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,52 +0,0 @@ | ||||
| From 3735f7414216e00f72e08c5d85a98e3b649fc085 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <3735f7414216e00f72e08c5d85a98e3b649fc085.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: Alex Shi <alex.shi@linaro.org> | ||||
| Date: Thu, 12 Jan 2017 21:27:02 +0800 | ||||
| Subject: [PATCH 18/26] cpuidle/menu: stop seeking deeper idle if current state | ||||
|  is deep enough | ||||
|  | ||||
| [ commit 8e37e1a2a3295f5d99e6dbe99eca24eca7a034ef from linux-stable ] | ||||
|  | ||||
| Obsolete commit 71abbbf856a0 (cpuidle: extend cpuidle and menu | ||||
| governor to handle dynamic states) wanted to introduce dynamic C-states, but | ||||
| that idea was dropped long ago.  The nonsense deeper C-state checking | ||||
| remained, though. | ||||
|  | ||||
| Since both target_residency and exit_latency are longer for deeper | ||||
| idle state, there's no need to waste CPU time on useless checks. | ||||
|  | ||||
| Signed-off-by: Alex Shi <alex.shi@linaro.org> | ||||
| Acked-by: Rik van Riel <riel@redhat.com> | ||||
| [ rjw: Subject & changelog ] | ||||
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> | ||||
| Signed-off-by: Alex Kozyrev <alex.kozyrev@windriver.com> | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  drivers/cpuidle/governors/menu.c | 6 +++--- | ||||
|  1 file changed, 3 insertions(+), 3 deletions(-) | ||||
|  | ||||
| diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c | ||||
| index c99fee9..eb9fb0e 100644 | ||||
| --- a/drivers/cpuidle/governors/menu.c | ||||
| +++ b/drivers/cpuidle/governors/menu.c | ||||
| @@ -323,11 +323,11 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev) | ||||
|  		if (s->disabled || su->disable) | ||||
|  			continue; | ||||
|  		if (s->target_residency > data->predicted_us) | ||||
| -			continue; | ||||
| +			break; | ||||
|  		if (s->exit_latency > latency_req) | ||||
| -			continue; | ||||
| +			break; | ||||
|  		if (s->exit_latency * multiplier > data->predicted_us) | ||||
| -			continue; | ||||
| +			break; | ||||
|   | ||||
|  		data->last_state_idx = i; | ||||
|  		data->exit_us = s->exit_latency; | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,44 +0,0 @@ | ||||
| From 47b0bf6b68f473392fe04755721f57990a4b111d Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <47b0bf6b68f473392fe04755721f57990a4b111d.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: Sudip Mukherjee <sudipm.mukherjee@gmail.com> | ||||
| Date: Thu, 18 Feb 2016 13:59:13 +0530 | ||||
| Subject: [PATCH 25/26] dpt_i2o: fix build warning | ||||
|  | ||||
| We were getting build warning about: | ||||
| drivers/scsi/dpt_i2o.c:183:29: warning: 'dptids' defined but not used | ||||
|  | ||||
| dptids[] is only used in the MODULE_DEVICE_TABLE so when MODULE is not | ||||
| defined then dptids[] becomes unused. | ||||
|  | ||||
| Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org> | ||||
| Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> | ||||
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  drivers/scsi/dpt_i2o.c | 3 +++ | ||||
|  1 file changed, 3 insertions(+) | ||||
|  | ||||
| diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c | ||||
| index 2bce881..cb62223 100644 | ||||
| --- a/drivers/scsi/dpt_i2o.c | ||||
| +++ b/drivers/scsi/dpt_i2o.c | ||||
| @@ -180,11 +180,14 @@ static u8 adpt_read_blink_led(adpt_hba* host) | ||||
|   *============================================================================ | ||||
|   */ | ||||
|   | ||||
| +#ifdef MODULE | ||||
|  static struct pci_device_id dptids[] = { | ||||
|  	{ PCI_DPT_VENDOR_ID, PCI_DPT_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,}, | ||||
|  	{ PCI_DPT_VENDOR_ID, PCI_DPT_RAPTOR_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,}, | ||||
|  	{ 0, } | ||||
|  }; | ||||
| +#endif | ||||
| + | ||||
|  MODULE_DEVICE_TABLE(pci,dptids); | ||||
|   | ||||
|  static int adpt_detect(struct scsi_host_template* sht) | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,52 +0,0 @@ | ||||
| From ebe06187bf2aec10d537ce4595e416035367d703 Mon Sep 17 00:00:00 2001 | ||||
| From: Konstantin Khlebnikov <koct9i@gmail.com> | ||||
| Date: Tue, 17 Jun 2014 06:58:05 +0400 | ||||
| Subject: [PATCH] epoll: fix use-after-free in eventpoll_release_file | ||||
|  | ||||
| This fixes use-after-free of epi->fllink.next inside list loop macro. | ||||
| This loop actually releases elements in the body.  The list is | ||||
| rcu-protected but here we cannot hold rcu_read_lock because we need to | ||||
| lock mutex inside. | ||||
|  | ||||
| The obvious solution is to use list_for_each_entry_safe().  RCU-ness | ||||
| isn't essential because nobody can change this list under us, it's final | ||||
| fput for this file. | ||||
|  | ||||
| The bug was introduced by ae10b2b4eb01 ("epoll: optimize EPOLL_CTL_DEL | ||||
| using rcu") | ||||
|  | ||||
| Signed-off-by: Konstantin Khlebnikov <koct9i@gmail.com> | ||||
| Reported-by: Cyrill Gorcunov <gorcunov@openvz.org> | ||||
| Cc: Stable <stable@vger.kernel.org> # 3.13+ | ||||
| Cc: Sasha Levin <sasha.levin@oracle.com> | ||||
| Cc: Jason Baron <jbaron@akamai.com> | ||||
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||||
| --- | ||||
|  fs/eventpoll.c | 4 ++-- | ||||
|  1 file changed, 2 insertions(+), 2 deletions(-) | ||||
|  | ||||
| diff --git a/fs/eventpoll.c b/fs/eventpoll.c | ||||
| index b73e062..b10b48c 100644 | ||||
| --- a/fs/eventpoll.c | ||||
| +++ b/fs/eventpoll.c | ||||
| @@ -910,7 +910,7 @@ static const struct file_operations eventpoll_fops = { | ||||
|  void eventpoll_release_file(struct file *file) | ||||
|  { | ||||
|  	struct eventpoll *ep; | ||||
| -	struct epitem *epi; | ||||
| +	struct epitem *epi, *next; | ||||
|   | ||||
|  	/* | ||||
|  	 * We don't want to get "file->f_lock" because it is not | ||||
| @@ -926,7 +926,7 @@ void eventpoll_release_file(struct file *file) | ||||
|  	 * Besides, ep_remove() acquires the lock, so we can't hold it here. | ||||
|  	 */ | ||||
|  	mutex_lock(&epmutex); | ||||
| -	list_for_each_entry_rcu(epi, &file->f_ep_links, fllink) { | ||||
| +	list_for_each_entry_safe(epi, next, &file->f_ep_links, fllink) { | ||||
|  		ep = epi->ep; | ||||
|  		mutex_lock_nested(&ep->mtx, 0); | ||||
|  		ep_remove(ep, epi); | ||||
| --  | ||||
| 2.7.4 | ||||
|  | ||||
| @@ -1,66 +0,0 @@ | ||||
| From 84a6fef49cb58415d9790947e65c34b09d99d356 Mon Sep 17 00:00:00 2001 | ||||
| From: "Martin, Chen" <haochuan.z.chen@intel.com> | ||||
| Date: Mon, 14 Jan 2019 19:58:07 +0000 | ||||
| Subject: [PATCH] fix CentOS 7.6 upgrade compile error | ||||
|  | ||||
| 1, fix improper call of part_round_stats and part_inc_in_flight | ||||
| in drbd_req.c, as CONFIG_BLK_DEV_DRBD=m defined in | ||||
| kernel-3.10.0-x86_64.config.tis_extra | ||||
|  | ||||
| 2, add explicit declaration for trace_bpf_int_jit_compile, | ||||
| trace_bpf_jit_compile, trace_bpf_jit_free, if pmd_read_atomic not | ||||
| defined | ||||
|  | ||||
| Signed-off-by: Martin, Chen <haochuan.z.chen@intel.com> | ||||
| --- | ||||
|  drivers/block/drbd/drbd_req.c | 8 ++++---- | ||||
|  include/linux/filter.h        | 3 +++ | ||||
|  2 files changed, 7 insertions(+), 4 deletions(-) | ||||
|  | ||||
| diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c | ||||
| index a6f13f7..cbd0a49 100644 | ||||
| --- a/drivers/block/drbd/drbd_req.c | ||||
| +++ b/drivers/block/drbd/drbd_req.c | ||||
| @@ -39,12 +39,12 @@ static void _drbd_start_io_acct(struct drbd_conf *mdev, struct drbd_request *req | ||||
|  	const int rw = bio_data_dir(req->master_bio); | ||||
|  	int cpu; | ||||
|  	cpu = part_stat_lock(); | ||||
| -	part_round_stats(cpu, &mdev->vdisk->part0); | ||||
| +	part_round_stats(mdev->rq_queue, cpu, &mdev->vdisk->part0); | ||||
|  	part_stat_inc(cpu, &mdev->vdisk->part0, ios[rw]); | ||||
|  	part_stat_add(cpu, &mdev->vdisk->part0, sectors[rw], req->i.size >> 9); | ||||
|  	(void) cpu; /* The macro invocations above want the cpu argument, I do not like | ||||
|  		       the compiler warning about cpu only assigned but never used... */ | ||||
| -	part_inc_in_flight(&mdev->vdisk->part0, rw); | ||||
| +	part_inc_in_flight(mdev->rq_queue, &mdev->vdisk->part0, rw); | ||||
|  	part_stat_unlock(); | ||||
|  } | ||||
|   | ||||
| @@ -56,8 +56,8 @@ static void _drbd_end_io_acct(struct drbd_conf *mdev, struct drbd_request *req) | ||||
|  	int cpu; | ||||
|  	cpu = part_stat_lock(); | ||||
|  	part_stat_add(cpu, &mdev->vdisk->part0, ticks[rw], duration); | ||||
| -	part_round_stats(cpu, &mdev->vdisk->part0); | ||||
| -	part_dec_in_flight(&mdev->vdisk->part0, rw); | ||||
| +	part_round_stats(mdev->rq_queue, cpu, &mdev->vdisk->part0); | ||||
| +	part_dec_in_flight(mdev->rq_queue, &mdev->vdisk->part0, rw); | ||||
|  	part_stat_unlock(); | ||||
|  } | ||||
|   | ||||
| diff --git a/include/linux/filter.h b/include/linux/filter.h | ||||
| index cddbb31..15ce55f 100644 | ||||
| --- a/include/linux/filter.h | ||||
| +++ b/include/linux/filter.h | ||||
| @@ -763,6 +763,9 @@ void bpf_prog_kallsyms_add(struct bpf_prog *fp); | ||||
|  void bpf_prog_kallsyms_del(struct bpf_prog *fp); | ||||
|   | ||||
|  #else /* CONFIG_BPF_JIT */ | ||||
| +struct bpf_prog * __weak trace_bpf_int_jit_compile(struct bpf_prog *prog); | ||||
| +void __weak trace_bpf_jit_compile(struct bpf_prog *prog); | ||||
| +void __weak trace_bpf_jit_free(struct bpf_prog *fp); | ||||
|   | ||||
|  static inline bool bpf_prog_ebpf_jited(const struct bpf_prog *fp) | ||||
|  { | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,96 +0,0 @@ | ||||
| From d4187124ed859c36b9055cc240cc0c8181e54725 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <d4187124ed859c36b9055cc240cc0c8181e54725.1528311567.git.Jim.Somerville@windriver.com> | ||||
| From: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| Date: Thu, 31 May 2018 17:47:26 -0400 | ||||
| Subject: [PATCH 1/1] fix compilation issues | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  arch/x86/mm/kaiser.c          |  2 +- | ||||
|  drivers/base/dma-contiguous.c |  2 +- | ||||
|  include/asm-generic/pgtable.h | 20 -------------------- | ||||
|  include/linux/huge_mm.h       |  2 +- | ||||
|  4 files changed, 3 insertions(+), 23 deletions(-) | ||||
|  | ||||
| diff --git a/arch/x86/mm/kaiser.c b/arch/x86/mm/kaiser.c | ||||
| index e233c88..5564c8d 100644 | ||||
| --- a/arch/x86/mm/kaiser.c | ||||
| +++ b/arch/x86/mm/kaiser.c | ||||
| @@ -621,7 +621,7 @@ static const struct file_operations fops_kaiser_enabled = { | ||||
|   | ||||
|  static int __init create_kpti_enabled(void) | ||||
|  { | ||||
| -	if (!xen_pv_domain() && !sme_active()) | ||||
| +	if (!is_xen_pv_domain() && !sme_active()) | ||||
|  		debugfs_create_file("pti_enabled", S_IRUSR | S_IWUSR, | ||||
|  				    arch_debugfs_dir, NULL, &fops_kaiser_enabled); | ||||
|  	return 0; | ||||
| diff --git a/drivers/base/dma-contiguous.c b/drivers/base/dma-contiguous.c | ||||
| index a7d5bda..403101d 100644 | ||||
| --- a/drivers/base/dma-contiguous.c | ||||
| +++ b/drivers/base/dma-contiguous.c | ||||
| @@ -287,7 +287,7 @@ struct page *dma_alloc_from_contiguous(struct device *dev, size_t count, | ||||
|  	if (align > CONFIG_CMA_ALIGNMENT) | ||||
|  		align = CONFIG_CMA_ALIGNMENT; | ||||
|   | ||||
| -	pr_debug("%s(cma %p, count %d, align %d)\n", __func__, (void *)cma, | ||||
| +	pr_debug("%s(cma %p, count %zu, align %d)\n", __func__, (void *)cma, | ||||
|  		 count, align); | ||||
|   | ||||
|  	if (!count) | ||||
| diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h | ||||
| index 8aa445d..57e6b74 100644 | ||||
| --- a/include/asm-generic/pgtable.h | ||||
| +++ b/include/asm-generic/pgtable.h | ||||
| @@ -629,10 +629,6 @@ static inline int pmd_trans_splitting(pmd_t pmd) | ||||
|  { | ||||
|  	return 0; | ||||
|  } | ||||
| -static inline int pud_trans_huge(pud_t pud) | ||||
| -{ | ||||
| -	return 0; | ||||
| -} | ||||
|  static inline int pud_trans_splitting(pud_t pud) | ||||
|  { | ||||
|  	return 0; | ||||
| @@ -644,24 +640,8 @@ static inline int pmd_write(pmd_t pmd) | ||||
|  	return 0; | ||||
|  } | ||||
|  #endif /* __HAVE_ARCH_PMD_WRITE */ | ||||
| -#ifndef __HAVE_ARCH_PUD_WRITE | ||||
| -static inline int pud_write(pud_t pud) | ||||
| -{ | ||||
| -	BUG(); | ||||
| -	return 0; | ||||
| -} | ||||
| -#endif /* __HAVE_ARCH_PUD_WRITE */ | ||||
|  #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ | ||||
|   | ||||
| -#if !defined(CONFIG_TRANSPARENT_HUGEPAGE) || \ | ||||
| -	(defined(CONFIG_TRANSPARENT_HUGEPAGE) && \ | ||||
| -	 !defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD)) | ||||
| -static inline int pud_trans_huge(pud_t pud) | ||||
| -{ | ||||
| -	return 0; | ||||
| -} | ||||
| -#endif | ||||
| - | ||||
|  #ifndef pmd_read_atomic | ||||
|  static inline pmd_t pmd_read_atomic(pmd_t *pmdp) | ||||
|  { | ||||
| diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h | ||||
| index 26ec982..45af11b 100644 | ||||
| --- a/include/linux/huge_mm.h | ||||
| +++ b/include/linux/huge_mm.h | ||||
| @@ -362,7 +362,7 @@ static inline int pud_trans_huge_lock(pud_t *pud, struct vm_area_struct *vma, | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| -static inline int do_huge_pmd_numa_page(struct vm_fault *vmf, pmd_t orig_pmd); | ||||
| +static inline int do_huge_pmd_numa_page(struct vm_fault *vmf, pmd_t orig_pmd) | ||||
|  { | ||||
|  	return 0; | ||||
|  } | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -20,17 +20,19 @@ Signed-off-by: Nam Ninh <nam.ninh@windriver.com> | ||||
|  | ||||
| Signed-off-by: Nam Ninh <nam.ninh@windriver.com> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com> | ||||
|  | ||||
| --- | ||||
|  Documentation/Intel-IOMMU.txt       | 18 ++++++++++++++++++ | ||||
|  Documentation/kernel-parameters.txt |  5 +++++ | ||||
|  drivers/iommu/intel-iommu.c         | 19 +++++++++++++++++++ | ||||
|  Documentation/Intel-IOMMU.txt                 | 18 ++++++++++++++++++ | ||||
|  .../admin-guide/kernel-parameters.txt         |  5 +++++ | ||||
|  drivers/iommu/intel-iommu.c                   | 19 +++++++++++++++++++ | ||||
|  3 files changed, 42 insertions(+) | ||||
|  | ||||
| diff --git a/Documentation/Intel-IOMMU.txt b/Documentation/Intel-IOMMU.txt | ||||
| index cf9431d..1dcc349 100644 | ||||
| index 9dae6b4..1080fcb 100644 | ||||
| --- a/Documentation/Intel-IOMMU.txt | ||||
| +++ b/Documentation/Intel-IOMMU.txt | ||||
| @@ -32,6 +32,24 @@ regions will fail. Hence BIOS uses RMRR to specify these regions along with | ||||
| @@ -33,6 +33,24 @@ regions will fail. Hence BIOS uses RMRR to specify these regions along with | ||||
|  devices that need to access these regions. OS is expected to setup | ||||
|  unity mappings for these regions for these devices to access these regions. | ||||
|   | ||||
| @@ -39,7 +41,7 @@ index cf9431d..1dcc349 100644 | ||||
| + | ||||
| +There are reports of BIOS out there that indicate RMRR regions for things | ||||
| +like ethernet devices.  As per mainline commit c875d2c1b8083 ("iommu/vt-d: | ||||
| + Exclude devices using RMRRs from IOMMU API domains") such a device is | ||||
| +Exclude devices using RMRRs from IOMMU API domains") such a device is | ||||
| +"fundamentally incompatible" with the IOMMU API and "we must prevent such | ||||
| +devices from being used by the IOMMU API."  However, in the event that | ||||
| +the RMRR indicated by the BIOS is assumed to be just a reporting error, | ||||
| @@ -53,13 +55,13 @@ index cf9431d..1dcc349 100644 | ||||
| +may result. | ||||
| + | ||||
|  How is IOVA generated? | ||||
|  --------------------- | ||||
|  ---------------------- | ||||
|   | ||||
| diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt | ||||
| index 2f7feb0..590c8c2 100644 | ||||
| --- a/Documentation/kernel-parameters.txt | ||||
| +++ b/Documentation/kernel-parameters.txt | ||||
| @@ -1315,6 +1315,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | ||||
| diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt | ||||
| index 2f4a7ad..c11ebc3 100644 | ||||
| --- a/Documentation/admin-guide/kernel-parameters.txt | ||||
| +++ b/Documentation/admin-guide/kernel-parameters.txt | ||||
| @@ -1651,6 +1651,11 @@ | ||||
|  			than 32-bit addressing. The default is to look | ||||
|  			for translation below 32-bit and if not available | ||||
|  			then look in the higher range. | ||||
| @@ -72,18 +74,18 @@ index 2f7feb0..590c8c2 100644 | ||||
|  			With this option on every unmap_single operation will | ||||
|  			result in a hardware IOTLB flush operation as opposed | ||||
| diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c | ||||
| index 260597e..6c16b68 100644 | ||||
| index 7e9f1db..a28bafe 100644 | ||||
| --- a/drivers/iommu/intel-iommu.c | ||||
| +++ b/drivers/iommu/intel-iommu.c | ||||
| @@ -480,6 +480,7 @@ static int dmar_forcedac; | ||||
| @@ -485,6 +485,7 @@ static int dmar_forcedac; | ||||
|  static int intel_iommu_strict; | ||||
|  static int intel_iommu_superpage = 1; | ||||
|  static int intel_iommu_ecs = 1; | ||||
| +static int intel_iommu_ethrmrr = 1; | ||||
|  static int intel_iommu_pasid28; | ||||
|  static int iommu_identity_mapping; | ||||
|   | ||||
|  /* We only actually use ECS when PASID support (on the new bit 40) | ||||
|   * is also advertised. Some early implementations — the ones with | ||||
| @@ -539,6 +540,15 @@ static int __init intel_iommu_setup(char *str) | ||||
| @@ -569,6 +570,15 @@ static int __init intel_iommu_setup(char *str) | ||||
|  		} else if (!strncmp(str, "forcedac", 8)) { | ||||
|  			pr_info("Forcing DAC for PCI devices\n"); | ||||
|  			dmar_forcedac = 1; | ||||
| @@ -99,7 +101,7 @@ index 260597e..6c16b68 100644 | ||||
|  		} else if (!strncmp(str, "strict", 6)) { | ||||
|  			pr_info("Disable batched IOTLB flush\n"); | ||||
|  			intel_iommu_strict = 1; | ||||
| @@ -2820,6 +2830,15 @@ static bool device_is_rmrr_locked(struct device *dev) | ||||
| @@ -2917,6 +2927,15 @@ static bool device_is_rmrr_locked(struct device *dev) | ||||
|   | ||||
|  		if (IS_USB_DEVICE(pdev) || IS_GFX_DEVICE(pdev)) | ||||
|  			return false; | ||||
| @@ -116,5 +118,5 @@ index 260597e..6c16b68 100644 | ||||
|   | ||||
|  	return true; | ||||
| --  | ||||
| 1.8.3.1 | ||||
| 2.18.1 | ||||
|  | ||||
|   | ||||
| @@ -1,57 +0,0 @@ | ||||
| From e3887b1e84e274be02f992e034e0dba1f53925b6 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <e3887b1e84e274be02f992e034e0dba1f53925b6.1566585829.git.Jim.Somerville@windriver.com> | ||||
| From: Tommi Rantala <tt.rantala@gmail.com> | ||||
| Date: Thu, 7 May 2015 15:12:21 +0300 | ||||
| Subject: [PATCH 1/3] ipvs: fix memory leak in ip_vs_ctl.c | ||||
|  | ||||
| [ commit f30bf2a5cac6c60ab366c4bc6db913597bf4d6ab in Linus' repo ] | ||||
|  | ||||
| Fix memory leak introduced in commit a0840e2e165a ("IPVS: netns, | ||||
| ip_vs_ctl local vars moved to ipvs struct."): | ||||
|  | ||||
| unreferenced object 0xffff88005785b800 (size 2048): | ||||
|   comm "(-localed)", pid 1434, jiffies 4294755650 (age 1421.089s) | ||||
|   hex dump (first 32 bytes): | ||||
|     bb 89 0b 83 ff ff ff ff b0 78 f0 4e 00 88 ff ff  .........x.N.... | ||||
|     04 00 00 00 a4 01 00 00 00 00 00 00 00 00 00 00  ................ | ||||
|   backtrace: | ||||
|     [<ffffffff8262ea8e>] kmemleak_alloc+0x4e/0xb0 | ||||
|     [<ffffffff811fba74>] __kmalloc_track_caller+0x244/0x430 | ||||
|     [<ffffffff811b88a0>] kmemdup+0x20/0x50 | ||||
|     [<ffffffff823276b7>] ip_vs_control_net_init+0x1f7/0x510 | ||||
|     [<ffffffff8231d630>] __ip_vs_init+0x100/0x250 | ||||
|     [<ffffffff822363a1>] ops_init+0x41/0x190 | ||||
|     [<ffffffff82236583>] setup_net+0x93/0x150 | ||||
|     [<ffffffff82236cc2>] copy_net_ns+0x82/0x140 | ||||
|     [<ffffffff810ab13d>] create_new_namespaces+0xfd/0x190 | ||||
|     [<ffffffff810ab49a>] unshare_nsproxy_namespaces+0x5a/0xc0 | ||||
|     [<ffffffff810833e3>] SyS_unshare+0x173/0x310 | ||||
|     [<ffffffff8265cbd7>] system_call_fastpath+0x12/0x6f | ||||
|     [<ffffffffffffffff>] 0xffffffffffffffff | ||||
|  | ||||
| Fixes: a0840e2e165a ("IPVS: netns, ip_vs_ctl local vars moved to ipvs struct.") | ||||
| Signed-off-by: Tommi Rantala <tt.rantala@gmail.com> | ||||
| Acked-by: Julian Anastasov <ja@ssi.bg> | ||||
| Signed-off-by: Simon Horman <horms@verge.net.au> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  net/netfilter/ipvs/ip_vs_ctl.c | 3 +++ | ||||
|  1 file changed, 3 insertions(+) | ||||
|  | ||||
| diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c | ||||
| index 02409f3..3738b84 100644 | ||||
| --- a/net/netfilter/ipvs/ip_vs_ctl.c | ||||
| +++ b/net/netfilter/ipvs/ip_vs_ctl.c | ||||
| @@ -3843,6 +3843,9 @@ static void __net_exit ip_vs_control_net_cleanup_sysctl(struct net *net) | ||||
|  	cancel_delayed_work_sync(&ipvs->defense_work); | ||||
|  	cancel_work_sync(&ipvs->defense_work.work); | ||||
|  	unregister_net_sysctl_table(ipvs->sysctl_hdr); | ||||
| + | ||||
| +	if (!net_eq(net, &init_net)) | ||||
| +		kfree(ipvs->sysctl_tbl); | ||||
|  } | ||||
|   | ||||
|  #else | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,96 +0,0 @@ | ||||
| From b4007dff3d6d7fc27d8b3431213202fb9c34793d Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <b4007dff3d6d7fc27d8b3431213202fb9c34793d.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: Akinobu Mita <akinobu.mita@gmail.com> | ||||
| Date: Tue, 31 May 2016 16:07:55 -0400 | ||||
| Subject: [PATCH 09/26] memblock: introduce memblock_alloc_range() | ||||
|  | ||||
| Commit 2bfc2862c4fe38379a2fb2cfba33fad32ccb4ff4 upstream | ||||
| Backported-by: Nam Ninh <nam.ninh@windriver.com> | ||||
|  | ||||
| This introduces memblock_alloc_range() which allocates memblock from the | ||||
| specified range of physical address.  I would like to use this function | ||||
| to specify the location of CMA. | ||||
|  | ||||
| Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> | ||||
| Cc: Marek Szyprowski <m.szyprowski@samsung.com> | ||||
| Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | ||||
| Cc: David Woodhouse <dwmw2@infradead.org> | ||||
| Cc: Don Dutile <ddutile@redhat.com> | ||||
| Cc: Thomas Gleixner <tglx@linutronix.de> | ||||
| Cc: Ingo Molnar <mingo@redhat.com> | ||||
| Cc: "H. Peter Anvin" <hpa@zytor.com> | ||||
| Cc: Andi Kleen <andi@firstfloor.org> | ||||
| Cc: Yinghai Lu <yinghai@kernel.org> | ||||
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||||
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  include/linux/memblock.h |  2 ++ | ||||
|  mm/memblock.c            | 22 ++++++++++++++++++---- | ||||
|  2 files changed, 20 insertions(+), 4 deletions(-) | ||||
|  | ||||
| diff --git a/include/linux/memblock.h b/include/linux/memblock.h | ||||
| index 5a439c9..d6bcbef 100644 | ||||
| --- a/include/linux/memblock.h | ||||
| +++ b/include/linux/memblock.h | ||||
| @@ -306,6 +306,8 @@ static inline bool memblock_bottom_up(void) { return false; } | ||||
|  #define MEMBLOCK_ALLOC_ANYWHERE	(~(phys_addr_t)0) | ||||
|  #define MEMBLOCK_ALLOC_ACCESSIBLE	0 | ||||
|   | ||||
| +phys_addr_t __init memblock_alloc_range(phys_addr_t size, phys_addr_t align, | ||||
| +					phys_addr_t start, phys_addr_t end); | ||||
|  phys_addr_t memblock_alloc_base(phys_addr_t size, phys_addr_t align, | ||||
|  				phys_addr_t max_addr); | ||||
|  phys_addr_t __memblock_alloc_base(phys_addr_t size, phys_addr_t align, | ||||
| diff --git a/mm/memblock.c b/mm/memblock.c | ||||
| index fbc8071..ff910a4 100644 | ||||
| --- a/mm/memblock.c | ||||
| +++ b/mm/memblock.c | ||||
| @@ -1120,9 +1120,9 @@ int __init_memblock memblock_set_node(phys_addr_t base, phys_addr_t size, | ||||
|  } | ||||
|  #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */ | ||||
|   | ||||
| -static phys_addr_t __init memblock_alloc_base_nid(phys_addr_t size, | ||||
| -					phys_addr_t align, phys_addr_t max_addr, | ||||
| -					int nid, ulong flags) | ||||
| +static phys_addr_t __init memblock_alloc_range_nid(phys_addr_t size, | ||||
| +					phys_addr_t align, phys_addr_t start, | ||||
| +					phys_addr_t end, int nid, ulong flags) | ||||
|  { | ||||
|  	phys_addr_t found; | ||||
|   | ||||
| @@ -1132,7 +1132,7 @@ static phys_addr_t __init memblock_alloc_base_nid(phys_addr_t size, | ||||
|  	/* align @size to avoid excessive fragmentation on reserved array */ | ||||
|  	size = round_up(size, align); | ||||
|   | ||||
| -	found = memblock_find_in_range_node(size, align, 0, max_addr, nid, | ||||
| +	found = memblock_find_in_range_node(size, align, start, end, nid, | ||||
|  					    flags); | ||||
|  	if (found && !memblock_reserve(found, size)) | ||||
|  		return found; | ||||
| @@ -1140,6 +1140,20 @@ static phys_addr_t __init memblock_alloc_base_nid(phys_addr_t size, | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| +phys_addr_t __init memblock_alloc_range(phys_addr_t size, phys_addr_t align, | ||||
| +					phys_addr_t start, phys_addr_t end) | ||||
| +{ | ||||
| +	ulong flags = choose_memblock_flags(); | ||||
| +	return memblock_alloc_range_nid(size, align, start, end, NUMA_NO_NODE, flags); | ||||
| +} | ||||
| + | ||||
| +static phys_addr_t __init memblock_alloc_base_nid(phys_addr_t size, | ||||
| +					phys_addr_t align, phys_addr_t max_addr, | ||||
| +					int nid, ulong flags) | ||||
| +{ | ||||
| +	return memblock_alloc_range_nid(size, align, 0, max_addr, nid, flags); | ||||
| +} | ||||
| + | ||||
|  phys_addr_t __init memblock_alloc_nid(phys_addr_t size, phys_addr_t align, int nid) | ||||
|  { | ||||
|  	ulong flags = choose_memblock_flags(); | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,47 +0,0 @@ | ||||
| From fe5869e78860a9150e24ea32c1a131da6af057c8 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <fe5869e78860a9150e24ea32c1a131da6af057c8.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> | ||||
| Date: Thu, 15 Dec 2016 15:37:47 -0800 | ||||
| Subject: [PATCH 15/26] rcu: Don't wake rcuc/X kthreads on NOCB CPUs | ||||
|  | ||||
| [ upstream 630c7ed9ca0608912fa7c8591d05dfc8742dc9e6 in tip repo ] | ||||
|  | ||||
| Chris Friesen notice that rcuc/X kthreads were consuming CPU even on | ||||
| NOCB CPUs.  This makes no sense because the only purpose or these | ||||
| kthreads is to invoke normal (non-offloaded) callbacks, of which there | ||||
| will never be any on NOCB CPUs.  This problem was due to a bug in | ||||
| cpu_has_callbacks_ready_to_invoke(), which should have been checking | ||||
| ->nxttail[RCU_NEXT_TAIL] for NULL, but which was instead (incorrectly) | ||||
| checking ->nxttail[RCU_DONE_TAIL].  Because ->nxttail[RCU_DONE_TAIL] is | ||||
| never NULL, the only effect is to cause the rcuc/X kthread to execute | ||||
| when it should not do so. | ||||
|  | ||||
| This commit therefore checks ->nxttail[RCU_NEXT_TAIL], which is NULL | ||||
| for NOCB CPUs. | ||||
|  | ||||
| Reported-by: Chris Friesen <chris.friesen@windriver.com> | ||||
| Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> | ||||
| Reviewed-by: Josh Triplett <josh@joshtriplett.org> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  kernel/rcutree.c | 2 +- | ||||
|  1 file changed, 1 insertion(+), 1 deletion(-) | ||||
|  | ||||
| diff --git a/kernel/rcutree.c b/kernel/rcutree.c | ||||
| index cd68fe3..3276ac1 100644 | ||||
| --- a/kernel/rcutree.c | ||||
| +++ b/kernel/rcutree.c | ||||
| @@ -300,7 +300,7 @@ static int | ||||
|  cpu_has_callbacks_ready_to_invoke(struct rcu_data *rdp) | ||||
|  { | ||||
|  	return &rdp->nxtlist != rdp->nxttail[RCU_DONE_TAIL] && | ||||
| -	       rdp->nxttail[RCU_DONE_TAIL] != NULL; | ||||
| +	       rdp->nxttail[RCU_NEXT_TAIL] != NULL; | ||||
|  } | ||||
|   | ||||
|  /* | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,67 +0,0 @@ | ||||
| From 598c88638d4f46a38bf3d0669bc042c1ea1e4605 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <598c88638d4f46a38bf3d0669bc042c1ea1e4605.1566585829.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <e3887b1e84e274be02f992e034e0dba1f53925b6.1566585829.git.Jim.Somerville@windriver.com> | ||||
| References: <e3887b1e84e274be02f992e034e0dba1f53925b6.1566585829.git.Jim.Somerville@windriver.com> | ||||
| From: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com> | ||||
| Date: Fri, 9 Feb 2018 11:52:14 +0300 | ||||
| Subject: [PATCH 2/3] rh/ext4: release leaked posix acl in ext4_acl_chmod | ||||
|  | ||||
| [ commit b85d6be0b743a1768b8456d36b52960858fbaa67 in OpenVZ's vzkernel repo ] | ||||
|  | ||||
| Note: only rh7-3.10.0-693.17.1.el7-based kernels are affected. | ||||
| I.e. starting from rh7-3.10.0-693.17.1.vz7.43.1. | ||||
|  | ||||
| Posix acl is used to convert of an extended attribute, provided by user to ext4 | ||||
| attributes. In particular to i_mode in case of ACL_TYPE_ACCESS request. | ||||
| IOW, this object is allocated, used for convertion, not stored anywhere and | ||||
| must be freed. | ||||
|  | ||||
| However posix_acl_update_mode() can zerofy the pointer to support | ||||
| ext4_set_acl() logic, but then the object is leaked.  So, fix it by releasing | ||||
| new temporary pointer with the same value instead of acl pointer. | ||||
|  | ||||
| In scope of https://jira.sw.ru/browse/PSBM-81384 | ||||
|  | ||||
| RHEL bug URL: https://bugzilla.redhat.com/show_bug.cgi?id=1543020 | ||||
|  | ||||
| Signed-off-by: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com> | ||||
| Acked-by: Dmitry Monakhov <dmonakhov@openvz.org> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  fs/ext4/acl.c | 6 ++++-- | ||||
|  1 file changed, 4 insertions(+), 2 deletions(-) | ||||
|  | ||||
| diff --git a/fs/ext4/acl.c b/fs/ext4/acl.c | ||||
| index 917e819..fce029f 100644 | ||||
| --- a/fs/ext4/acl.c | ||||
| +++ b/fs/ext4/acl.c | ||||
| @@ -297,7 +297,7 @@ cleanup: | ||||
|  int | ||||
|  ext4_acl_chmod(struct inode *inode) | ||||
|  { | ||||
| -	struct posix_acl *acl; | ||||
| +	struct posix_acl *acl, *real_acl; | ||||
|  	handle_t *handle; | ||||
|  	int retries = 0; | ||||
|  	int error; | ||||
| @@ -315,6 +315,8 @@ ext4_acl_chmod(struct inode *inode) | ||||
|  	error = posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode); | ||||
|  	if (error) | ||||
|  		return error; | ||||
| + | ||||
| +	real_acl = acl; | ||||
|  retry: | ||||
|  	handle = ext4_journal_start(inode, EXT4_HT_XATTR, | ||||
|  				    ext4_jbd2_credits_xattr(inode)); | ||||
| @@ -341,7 +343,7 @@ out_stop: | ||||
|  	    ext4_should_retry_alloc(inode->i_sb, &retries)) | ||||
|  		goto retry; | ||||
|  out: | ||||
| -	posix_acl_release(acl); | ||||
| +	posix_acl_release(real_acl); | ||||
|  	return error; | ||||
|  } | ||||
|   | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,79 +0,0 @@ | ||||
| From 190fe153e1def764a02d7cb3438f5bc7c0402e48 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <190fe153e1def764a02d7cb3438f5bc7c0402e48.1566585829.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <e3887b1e84e274be02f992e034e0dba1f53925b6.1566585829.git.Jim.Somerville@windriver.com> | ||||
| References: <e3887b1e84e274be02f992e034e0dba1f53925b6.1566585829.git.Jim.Somerville@windriver.com> | ||||
| From: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com> | ||||
| Date: Fri, 9 Feb 2018 11:52:15 +0300 | ||||
| Subject: [PATCH 3/3] rh/ext4: release leaked posix acl in ext4_xattr_set_acl | ||||
|  | ||||
| [ commit b762d904ada70f239f1c2d2d70c4a64cd04c8ade in OpenVZ's vzkernel repo ] | ||||
|  | ||||
| Note: only rh7-3.10.0-693.17.1.el7-based kernels are affcted. | ||||
| I.e. starting from rh7-3.10.0-693.17.1.vz7.43.1. | ||||
|  | ||||
| Posix acl is used to convert of an extended attribute, provided by user to ext4 | ||||
| attributes. In particular to i_mode in case of ACL_TYPE_ACCESS request. | ||||
|  | ||||
| IOW, this object is allocated, used for convertion, not stored anywhere and | ||||
| must be freed. | ||||
|  | ||||
| However posix_acl_update_mode() can zerofy the pointer to support | ||||
| ext4_set_acl() logic, but then the object is leaked. So, fix it by releasing | ||||
| new temporary pointer with the same value instead of acl pointer. | ||||
|  | ||||
| https://jira.sw.ru/browse/PSBM-81384 | ||||
|  | ||||
| RHEL bug URL: https://bugzilla.redhat.com/show_bug.cgi?id=1543020 | ||||
|  | ||||
| v2: Added affected kernel version + RHEL bug URL | ||||
|  | ||||
| Signed-off-by: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com> | ||||
| Acked-by: Dmitry Monakhov <dmonakhov@openvz.org> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  fs/ext4/acl.c | 8 ++++---- | ||||
|  1 file changed, 4 insertions(+), 4 deletions(-) | ||||
|  | ||||
| diff --git a/fs/ext4/acl.c b/fs/ext4/acl.c | ||||
| index fce029f..046b338 100644 | ||||
| --- a/fs/ext4/acl.c | ||||
| +++ b/fs/ext4/acl.c | ||||
| @@ -405,7 +405,7 @@ ext4_xattr_set_acl(struct dentry *dentry, const char *name, const void *value, | ||||
|  { | ||||
|  	struct inode *inode = dentry->d_inode; | ||||
|  	handle_t *handle; | ||||
| -	struct posix_acl *acl; | ||||
| +	struct posix_acl *acl, *real_acl; | ||||
|  	int error, retries = 0; | ||||
|  	int update_mode = 0; | ||||
|  	umode_t mode = inode->i_mode; | ||||
| @@ -418,7 +418,7 @@ ext4_xattr_set_acl(struct dentry *dentry, const char *name, const void *value, | ||||
|  		return -EPERM; | ||||
|   | ||||
|  	if (value) { | ||||
| -		acl = posix_acl_from_xattr(&init_user_ns, value, size); | ||||
| +		acl = real_acl = posix_acl_from_xattr(&init_user_ns, value, size); | ||||
|  		if (IS_ERR(acl)) | ||||
|  			return PTR_ERR(acl); | ||||
|  		else if (acl) { | ||||
| @@ -427,7 +427,7 @@ ext4_xattr_set_acl(struct dentry *dentry, const char *name, const void *value, | ||||
|  				goto release_and_out; | ||||
|  		} | ||||
|  	} else | ||||
| -		acl = NULL; | ||||
| +		acl = real_acl = NULL; | ||||
|   | ||||
|  retry: | ||||
|  	handle = ext4_journal_start(inode, EXT4_HT_XATTR, | ||||
| @@ -454,7 +454,7 @@ out_stop: | ||||
|  		goto retry; | ||||
|   | ||||
|  release_and_out: | ||||
| -	posix_acl_release(acl); | ||||
| +	posix_acl_release(real_acl); | ||||
|  	return error; | ||||
|  } | ||||
|   | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -7,16 +7,18 @@ Date: Tue, 6 Mar 2018 12:54:40 -0500 | ||||
| Subject: [PATCH 26/26] turn off write same in smartqpi driver | ||||
|  | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com> | ||||
|  | ||||
| --- | ||||
|  drivers/scsi/smartpqi/smartpqi_init.c | 1 + | ||||
|  1 file changed, 1 insertion(+) | ||||
|  | ||||
| diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c | ||||
| index 2c6b546..6968c48 100644 | ||||
| index f40e177..852a9fb 100644 | ||||
| --- a/drivers/scsi/smartpqi/smartpqi_init.c | ||||
| +++ b/drivers/scsi/smartpqi/smartpqi_init.c | ||||
| @@ -5814,6 +5814,7 @@ static struct scsi_host_template pqi_driver_template = { | ||||
|  	.slave_alloc = pqi_slave_alloc, | ||||
| @@ -5803,6 +5803,7 @@ static struct scsi_host_template pqi_driver_template = { | ||||
|  	.map_queues = pqi_map_queues, | ||||
|  	.sdev_attrs = pqi_sdev_attrs, | ||||
|  	.shost_attrs = pqi_shost_attrs, | ||||
| +	.no_write_same = 1, | ||||
| @@ -24,5 +26,5 @@ index 2c6b546..6968c48 100644 | ||||
|   | ||||
|  static int pqi_register_scsi(struct pqi_ctrl_info *ctrl_info) | ||||
| --  | ||||
| 1.8.3.1 | ||||
| 2.18.1 | ||||
|  | ||||
|   | ||||
| @@ -1,156 +0,0 @@ | ||||
| From e27598227a12485c787a57581b1797531941bf51 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <e27598227a12485c787a57581b1797531941bf51.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: Akinobu Mita <akinobu.mita@gmail.com> | ||||
| Date: Wed, 4 Jun 2014 16:06:50 -0700 | ||||
| Subject: [PATCH 11/26] x86: enable DMA CMA with swiotlb | ||||
|  | ||||
| commit 9c5a3621427da68afe6a078cadf807d2c8cc1d12 upstream. | ||||
| Ported-by: Nam Ninh <nam.ninh@windriver.com> | ||||
|  | ||||
| The DMA Contiguous Memory Allocator support on x86 is disabled when | ||||
| swiotlb config option is enabled.  So DMA CMA is always disabled on | ||||
| x86_64 because swiotlb is always enabled.  This attempts to support for | ||||
| DMA CMA with enabling swiotlb config option. | ||||
|  | ||||
| The contiguous memory allocator on x86 is integrated in the function | ||||
| dma_generic_alloc_coherent() which is .alloc callback in nommu_dma_ops | ||||
| for dma_alloc_coherent(). | ||||
|  | ||||
| x86_swiotlb_alloc_coherent() which is .alloc callback in swiotlb_dma_ops | ||||
| tries to allocate with dma_generic_alloc_coherent() firstly and then | ||||
| swiotlb_alloc_coherent() is called as a fallback. | ||||
|  | ||||
| The main part of supporting DMA CMA with swiotlb is that changing | ||||
| x86_swiotlb_free_coherent() which is .free callback in swiotlb_dma_ops | ||||
| for dma_free_coherent() so that it can distinguish memory allocated by | ||||
| dma_generic_alloc_coherent() from one allocated by | ||||
| swiotlb_alloc_coherent() and release it with dma_generic_free_coherent() | ||||
| which can handle contiguous memory.  This change requires making | ||||
| is_swiotlb_buffer() global function. | ||||
|  | ||||
| This also needs to change .free callback in the dma_map_ops for amd_gart | ||||
| and sta2x11, because these dma_ops are also using | ||||
| dma_generic_alloc_coherent(). | ||||
|  | ||||
| Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> | ||||
| Acked-by: Marek Szyprowski <m.szyprowski@samsung.com> | ||||
| Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | ||||
| Cc: David Woodhouse <dwmw2@infradead.org> | ||||
| Cc: Don Dutile <ddutile@redhat.com> | ||||
| Cc: Thomas Gleixner <tglx@linutronix.de> | ||||
| Cc: Ingo Molnar <mingo@redhat.com> | ||||
| Cc: "H. Peter Anvin" <hpa@zytor.com> | ||||
| Cc: Andi Kleen <andi@firstfloor.org> | ||||
| Cc: Yinghai Lu <yinghai@kernel.org> | ||||
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||||
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  arch/x86/Kconfig               | 2 +- | ||||
|  arch/x86/include/asm/swiotlb.h | 7 +++++++ | ||||
|  arch/x86/kernel/amd_gart_64.c  | 2 +- | ||||
|  arch/x86/kernel/pci-swiotlb.c  | 9 ++++++--- | ||||
|  arch/x86/pci/sta2x11-fixup.c   | 6 ++---- | ||||
|  5 files changed, 17 insertions(+), 9 deletions(-) | ||||
|  | ||||
| diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig | ||||
| index 48ae099..9e841a5 100644 | ||||
| --- a/arch/x86/Kconfig | ||||
| +++ b/arch/x86/Kconfig | ||||
| @@ -47,7 +47,7 @@ config X86 | ||||
|  	select ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH if SMP | ||||
|  	select ARCH_WANT_OPTIONAL_GPIOLIB | ||||
|  	select ARCH_WANT_FRAME_POINTERS | ||||
| -	select HAVE_DMA_CONTIGUOUS if !SWIOTLB | ||||
| +	select HAVE_DMA_CONTIGUOUS | ||||
|  	select HAVE_KRETPROBES | ||||
|  	select HAVE_OPTPROBES | ||||
|  	select HAVE_KPROBES_ON_FTRACE | ||||
| diff --git a/arch/x86/include/asm/swiotlb.h b/arch/x86/include/asm/swiotlb.h | ||||
| index 977f176..ab05d73 100644 | ||||
| --- a/arch/x86/include/asm/swiotlb.h | ||||
| +++ b/arch/x86/include/asm/swiotlb.h | ||||
| @@ -29,4 +29,11 @@ static inline void pci_swiotlb_late_init(void) | ||||
|   | ||||
|  static inline void dma_mark_clean(void *addr, size_t size) {} | ||||
|   | ||||
| +extern void *x86_swiotlb_alloc_coherent(struct device *hwdev, size_t size, | ||||
| +					dma_addr_t *dma_handle, gfp_t flags, | ||||
| +					struct dma_attrs *attrs); | ||||
| +extern void x86_swiotlb_free_coherent(struct device *dev, size_t size, | ||||
| +					void *vaddr, dma_addr_t dma_addr, | ||||
| +					struct dma_attrs *attrs); | ||||
| + | ||||
|  #endif /* _ASM_X86_SWIOTLB_H */ | ||||
| diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c | ||||
| index b574b29..8e3842f 100644 | ||||
| --- a/arch/x86/kernel/amd_gart_64.c | ||||
| +++ b/arch/x86/kernel/amd_gart_64.c | ||||
| @@ -512,7 +512,7 @@ gart_free_coherent(struct device *dev, size_t size, void *vaddr, | ||||
|  		   dma_addr_t dma_addr, struct dma_attrs *attrs) | ||||
|  { | ||||
|  	gart_unmap_page(dev, dma_addr, size, DMA_BIDIRECTIONAL, NULL); | ||||
| -	free_pages((unsigned long)vaddr, get_order(size)); | ||||
| +	dma_generic_free_coherent(dev, size, vaddr, dma_addr, attrs); | ||||
|  } | ||||
|   | ||||
|  static int gart_mapping_error(struct device *dev, dma_addr_t dma_addr) | ||||
| diff --git a/arch/x86/kernel/pci-swiotlb.c b/arch/x86/kernel/pci-swiotlb.c | ||||
| index 4853440..284d506 100644 | ||||
| --- a/arch/x86/kernel/pci-swiotlb.c | ||||
| +++ b/arch/x86/kernel/pci-swiotlb.c | ||||
| @@ -16,7 +16,7 @@ | ||||
|   | ||||
|  int swiotlb __read_mostly; | ||||
|   | ||||
| -static void *x86_swiotlb_alloc_coherent(struct device *hwdev, size_t size, | ||||
| +void *x86_swiotlb_alloc_coherent(struct device *hwdev, size_t size, | ||||
|  					dma_addr_t *dma_handle, gfp_t flags, | ||||
|  					struct dma_attrs *attrs) | ||||
|  { | ||||
| @@ -30,11 +30,14 @@ static void *x86_swiotlb_alloc_coherent(struct device *hwdev, size_t size, | ||||
|  	return swiotlb_alloc_coherent(hwdev, size, dma_handle, flags); | ||||
|  } | ||||
|   | ||||
| -static void x86_swiotlb_free_coherent(struct device *dev, size_t size, | ||||
| +void x86_swiotlb_free_coherent(struct device *dev, size_t size, | ||||
|  				      void *vaddr, dma_addr_t dma_addr, | ||||
|  				      struct dma_attrs *attrs) | ||||
|  { | ||||
| -	swiotlb_free_coherent(dev, size, vaddr, dma_addr); | ||||
| +	if (is_swiotlb_buffer(dma_to_phys(dev, dma_addr))) | ||||
| +		swiotlb_free_coherent(dev, size, vaddr, dma_addr); | ||||
| +	else | ||||
| +		dma_generic_free_coherent(dev, size, vaddr, dma_addr, attrs); | ||||
|  } | ||||
|   | ||||
|  static struct dma_map_ops swiotlb_dma_ops = { | ||||
| diff --git a/arch/x86/pci/sta2x11-fixup.c b/arch/x86/pci/sta2x11-fixup.c | ||||
| index 9d8a509..5ceda85 100644 | ||||
| --- a/arch/x86/pci/sta2x11-fixup.c | ||||
| +++ b/arch/x86/pci/sta2x11-fixup.c | ||||
| @@ -173,9 +173,7 @@ static void *sta2x11_swiotlb_alloc_coherent(struct device *dev, | ||||
|  { | ||||
|  	void *vaddr; | ||||
|   | ||||
| -	vaddr = dma_generic_alloc_coherent(dev, size, dma_handle, flags, attrs); | ||||
| -	if (!vaddr) | ||||
| -		vaddr = swiotlb_alloc_coherent(dev, size, dma_handle, flags); | ||||
| +	vaddr = x86_swiotlb_alloc_coherent(dev, size, dma_handle, flags, attrs); | ||||
|  	*dma_handle = p2a(*dma_handle, to_pci_dev(dev)); | ||||
|  	return vaddr; | ||||
|  } | ||||
| @@ -183,7 +181,7 @@ static void *sta2x11_swiotlb_alloc_coherent(struct device *dev, | ||||
|  /* We have our own dma_ops: the same as swiotlb but from alloc (above) */ | ||||
|  static struct dma_map_ops sta2x11_dma_ops = { | ||||
|  	.alloc = sta2x11_swiotlb_alloc_coherent, | ||||
| -	.free = swiotlb_free_coherent, | ||||
| +	.free = x86_swiotlb_free_coherent, | ||||
|  	.map_page = swiotlb_map_page, | ||||
|  	.unmap_page = swiotlb_unmap_page, | ||||
|  	.map_sg = swiotlb_map_sg_attrs, | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,87 +0,0 @@ | ||||
| From 2d627fa0c465b3146191ffa7e336bb1eca5d1879 Mon Sep 17 00:00:00 2001 | ||||
| Message-Id: <2d627fa0c465b3146191ffa7e336bb1eca5d1879.1527544850.git.Jim.Somerville@windriver.com> | ||||
| In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com> | ||||
| From: Akinobu Mita <akinobu.mita@gmail.com> | ||||
| Date: Wed, 4 Jun 2014 16:06:48 -0700 | ||||
| Subject: [PATCH 14/26] x86: make dma_alloc_coherent() return zeroed memory if | ||||
|  CMA is enabled | ||||
|  | ||||
| This patchset enhances the DMA Contiguous Memory Allocator on x86. | ||||
|  | ||||
| Currently the DMA CMA is only supported with pci-nommu dma_map_ops and | ||||
| furthermore it can't be enabled on x86_64.  But I would like to allocate | ||||
| big contiguous memory with dma_alloc_coherent() and tell it to the device | ||||
| that requires it, regardless of which dma mapping implementation is | ||||
| actually used in the system. | ||||
|  | ||||
| So this makes it work with swiotlb and intel-iommu dma_map_ops, too.  And | ||||
| this also extends "cma=" kernel parameter to specify placement constraint | ||||
| by the physical address range of memory allocations.  For example, CMA | ||||
| allocates memory below 4GB by "cma=64M@0-4G", it is required for the | ||||
| devices only supporting 32-bit addressing on 64-bit systems without iommu. | ||||
|  | ||||
| This patch (of 5): | ||||
|  | ||||
| Calling dma_alloc_coherent() with __GFP_ZERO must return zeroed memory. | ||||
|  | ||||
| But when the contiguous memory allocator (CMA) is enabled on x86 and the | ||||
| memory region is allocated by dma_alloc_from_contiguous(), it doesn't | ||||
| return zeroed memory.  Because dma_generic_alloc_coherent() forgot to fill | ||||
| the memory region with zero if it was allocated by | ||||
| dma_alloc_from_contiguous() | ||||
|  | ||||
| Most implementations of dma_alloc_coherent() return zeroed memory | ||||
| regardless of whether __GFP_ZERO is specified.  So this fixes it by | ||||
| unconditionally zeroing the allocated memory region. | ||||
|  | ||||
| Alternatively, we could fix dma_alloc_from_contiguous() to return zeroed | ||||
| out memory and remove memset() from all caller of it.  But we can't simply | ||||
| remove the memset on arm because __dma_clear_buffer() is used there for | ||||
| ensuring cache flushing and it is used in many places.  Of course we can | ||||
| do redundant memset in dma_alloc_from_contiguous(), but I think this patch | ||||
| is less impact for fixing this problem. | ||||
|  | ||||
| Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> | ||||
| Cc: Marek Szyprowski <m.szyprowski@samsung.com> | ||||
| Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | ||||
| Cc: David Woodhouse <dwmw2@infradead.org> | ||||
| Cc: Don Dutile <ddutile@redhat.com> | ||||
| Cc: Thomas Gleixner <tglx@linutronix.de> | ||||
| Cc: Ingo Molnar <mingo@redhat.com> | ||||
| Cc: "H. Peter Anvin" <hpa@zytor.com> | ||||
| Cc: Andi Kleen <andi@firstfloor.org> | ||||
| Cc: Yinghai Lu <yinghai@kernel.org> | ||||
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||||
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||||
| (cherry picked from commit d92ef66c4f8fdf7a24736b1ab6c48d32de9bfc07) | ||||
| Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> | ||||
| --- | ||||
|  arch/x86/kernel/pci-dma.c | 4 ++-- | ||||
|  1 file changed, 2 insertions(+), 2 deletions(-) | ||||
|  | ||||
| diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c | ||||
| index 77a4e62..c84ffe7 100644 | ||||
| --- a/arch/x86/kernel/pci-dma.c | ||||
| +++ b/arch/x86/kernel/pci-dma.c | ||||
| @@ -99,7 +99,7 @@ void *dma_generic_alloc_coherent(struct device *dev, size_t size, | ||||
|   | ||||
|  	dma_mask = dma_alloc_coherent_mask(dev, flag); | ||||
|   | ||||
| -	flag |= __GFP_ZERO; | ||||
| +	flag &= ~__GFP_ZERO; | ||||
|  again: | ||||
|  	page = NULL; | ||||
|  	/* CMA can be used only in the context which permits sleeping */ | ||||
| @@ -130,7 +130,7 @@ again: | ||||
|   | ||||
|  		return NULL; | ||||
|  	} | ||||
| - | ||||
| +	memset(page_address(page), 0, size); | ||||
|  	*dma_addr = addr; | ||||
|  	return page_address(page); | ||||
|  } | ||||
| --  | ||||
| 1.8.3.1 | ||||
|  | ||||
| @@ -1,2 +1,2 @@ | ||||
| mirror:Source/kernel-3.10.0-1062.1.2.el7.src.rpm | ||||
| mirror:Source/kernel-4.18.0-80.11.2.el8_0.src.rpm | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user