Linux std kernel upgrade to align with CentOS 8
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: I2a9af6d3661a2c4effad87f777e55e1c1047bc23 Story: 2006728 Task: 37150 Depends-On: https://review.opendev.org/#/c/696481/ Depends-On: https://review.opendev.org/#/c/696050/ Signed-off-by: Zhang Zhiguo <zhangzhg@neusoft.com>
This commit is contained in:
parent
61ce84360b
commit
9111cf4090
|
@ -1,4 +1,4 @@
|
|||
COPY_LIST="files/*"
|
||||
TIS_PATCH_VER=2
|
||||
TIS_PATCH_VER=1
|
||||
BUILD_IS_BIG=11
|
||||
BUILD_IS_SLOW=12
|
||||
|
|
|
@ -5,83 +5,81 @@ 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>
|
||||
|
||||
---
|
||||
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 957
|
||||
|
||||
%define rpmversion 3.10.0
|
||||
-%define pkgrelease 957.21.3.el7
|
||||
+%define _pkgrelease 957.21.3
|
||||
+%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 957.21.3%{?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}
|
||||
@@ -68,7 +71,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 1
|
||||
@@ -91,7 +94,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}
|
||||
|
||||
@@ -385,6 +388,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
|
||||
|
||||
@@ -450,6 +454,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
|
||||
@@ -612,6 +622,13 @@ manipulation of eBPF programs and maps.
|
||||
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
|
||||
|
@ -93,140 +91,150 @@ index 852fd10..e42177e 100644
|
|||
%if %{with_gcov}
|
||||
%package gcov
|
||||
Summary: gcov graph and source files for coverage data collection.
|
||||
@@ -777,6 +794,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
|
||||
@@ -821,6 +841,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
|
||||
@@ -894,12 +923,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
|
||||
|
||||
@@ -914,8 +944,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
|
||||
@@ -939,6 +969,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
|
||||
@@ -955,7 +987,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
|
||||
@@ -965,7 +997,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."
|
||||
@@ -1174,6 +1206,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
|
||||
@@ -1234,15 +1272,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
|
||||
|
||||
@@ -1536,6 +1574,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}
|
||||
|
||||
#
|
||||
@@ -1756,6 +1798,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
|
||||
* Mon Jun 17 2019 CentOS Sources <bugs@centos.org> - 3.10.0-957.21.3.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 f9a5a49c9daac827d94cd562c0c6f100388fd798 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f9a5a49c9daac827d94cd562c0c6f100388fd798.1566587341.git.Jim.Somerville@windriver.com>
|
||||
In-Reply-To: <ac67546ccbecd3ee18145be31d87d7253048adda.1566587341.git.Jim.Somerville@windriver.com>
|
||||
References: <ac67546ccbecd3ee18145be31d87d7253048adda.1566587341.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 d5df4a4..1d765ed 100644
|
||||
--- a/SPECS/kernel.spec
|
||||
+++ b/SPECS/kernel.spec
|
||||
@@ -495,6 +495,12 @@ Patch40027: epoll-fix-use-after-free-in-eventpoll_release_file.patch
|
||||
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
|
||||
+# Fix assorted compilation issues
|
||||
+Patch40031: fix-compilation-issues.patch
|
||||
+# Fix CentOS 7.6 upgrade compile error
|
||||
+Patch40032: fix-CentOS-7.6-upgrade-compile-error.patch
|
||||
+# Compile fix for disabling CONFIG_MEMCG_KMEM
|
||||
+Patch40033: compile-fix-for-disabling-CONFIG_MEMCG_KMEM.patch
|
||||
|
||||
BuildRoot: %{_tmppath}/kernel-%{KVRA}-root
|
||||
|
||||
@@ -869,6 +875,9 @@ 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 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
|
||||
|
|
@ -6,96 +6,52 @@ 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: Zhang Zhiguo <zhangzhg@neusoft.com>
|
||||
|
||||
---
|
||||
SPECS/kernel.spec | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 68 insertions(+)
|
||||
SPECS/kernel.spec | 22 ++++++++++++++++++++++
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
diff --git a/SPECS/kernel.spec b/SPECS/kernel.spec
|
||||
index e42177e..d5df4a4 100644
|
||||
index 1927d5a..a851036 100644
|
||||
--- a/SPECS/kernel.spec
|
||||
+++ b/SPECS/kernel.spec
|
||||
@@ -460,6 +460,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
|
||||
+Patch40012: Enable-building-mpt2sas-and-mpt3sas-as-builtin-for-C.patch
|
||||
+Patch40013: Enable-building-kernel-with-CONFIG_BLK_DEV_NBD.patch
|
||||
+Patch40014: x86-make-dma_alloc_coherent-return-zeroed-memory-if-.patch
|
||||
+Patch40015: rcu-Don-t-wake-rcuc-X-kthreads-on-NOCB-CPUs.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
|
||||
+
|
||||
BuildRoot: %{_tmppath}/kernel-%{KVRA}-root
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
%description
|
||||
@@ -802,6 +838,38 @@ 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-mpt2sas-and-mpt3sas-as-builtin-for-C.patch
|
||||
+ApplyOptionalPatch Enable-building-kernel-with-CONFIG_BLK_DEV_NBD.patch
|
||||
+ApplyOptionalPatch x86-make-dma_alloc_coherent-return-zeroed-memory-if-.patch
|
||||
+ApplyOptionalPatch rcu-Don-t-wake-rcuc-X-kthreads-on-NOCB-CPUs.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
|
||||
+
|
||||
# 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
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -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,29 +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>
|
||||
---
|
||||
mm/swap.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/mm/swap.c b/mm/swap.c
|
||||
index 0982a35..6dcf38c 100644
|
||||
--- a/mm/swap.c
|
||||
+++ b/mm/swap.c
|
||||
@@ -1040,8 +1040,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
|
@ -17,70 +17,42 @@ definitions on module deinit
|
|||
- modification to ima_file_check to pass in file OPEN status
|
||||
|
||||
Signed-off-by: Jim Somerville <Jim.Somerville@windriver.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
|
||||
@@ -3225,7 +3225,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
|
||||
@@ -207,6 +207,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
|
||||
@@ -677,9 +677,8 @@ struct inode {
|
||||
struct fsnotify_mark_connector __rcu *i_fsnotify_marks)
|
||||
#endif
|
||||
|
||||
@@ -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 */
|
||||
};
|
||||
|
||||
@@ -2830,7 +2829,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;
|
||||
}
|
||||
|
||||
|
@ -88,7 +60,7 @@ index eb6f994..2dbaf80 100644
|
|||
static inline void i_readcount_dec(struct inode *inode)
|
||||
{
|
||||
BUG_ON(!atomic_read(&inode->i_readcount));
|
||||
@@ -2840,16 +2838,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);
|
||||
}
|
||||
|
@ -105,131 +77,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 */
|
||||
|
||||
|
@ -250,13 +103,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
|
||||
|
@ -280,11 +140,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
|
||||
|
@ -294,16 +165,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;
|
||||
|
@ -323,6 +206,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
|
||||
|
@ -332,43 +217,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
|
||||
@@ -720,8 +824,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)
|
||||
{
|
||||
@@ -1530,6 +1637,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)
|
||||
{
|
||||
@@ -1546,6 +1654,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
|
||||
@@ -3007,6 +3007,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
|
||||
static inline bool memcg_can_account_kmem(struct mem_cgroup *memcg)
|
||||
{
|
||||
@@ -3507,8 +3509,6 @@ out:
|
||||
return new_cachep;
|
||||
}
|
||||
|
||||
-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,67 +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 | 4 ++++
|
||||
2 files changed, 8 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
|
||||
@@ -665,6 +665,10 @@ static inline bool bpf_jit_blinding_enabled(struct bpf_prog *prog)
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
+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 ebpf_jit_enabled(void)
|
||||
{
|
||||
return false;
|
||||
--
|
||||
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
|
||||
@@ -620,7 +620,7 @@ static const struct file_operations fops_kaiser_enabled = {
|
||||
|
||||
static int __init create_kpti_enabled(void)
|
||||
{
|
||||
- if (!xen_pv_domain())
|
||||
+ if (!is_xen_pv_domain())
|
||||
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
|
||||
@@ -309,7 +309,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
|
||||
@@ -365,7 +365,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-957.21.3.el7.src.rpm
|
||||
mirror:Source/kernel-4.18.0-80.11.2.el8_0.src.rpm
|
||||
|
||||
|
|
Loading…
Reference in New Issue