Some minor ARM fixes and cleanups
This commit is contained in:
parent
76c2ad6c53
commit
a89c694dae
|
@ -0,0 +1,79 @@
|
|||
From c0d8832e78cbfd4a64b7112e34920af4b0b0e60e Mon Sep 17 00:00:00 2001
|
||||
From: Suzuki K Poulose <suzuki.poulose@arm.com>
|
||||
Date: Fri, 6 Oct 2017 14:16:52 +0100
|
||||
Subject: arm64: Ensure the instruction emulation is ready for userspace
|
||||
|
||||
We trap and emulate some instructions (e.g, mrs, deprecated instructions)
|
||||
for the userspace. However the handlers for these are registered as
|
||||
late_initcalls and the userspace could be up and running from the initramfs
|
||||
by that time (with populate_rootfs, which is a rootfs_initcall()). This
|
||||
could cause problems for the early applications ending up in failure
|
||||
like :
|
||||
|
||||
[ 11.152061] modprobe[93]: undefined instruction: pc=0000ffff8ca48ff4
|
||||
|
||||
This patch promotes the specific calls to core_initcalls, which are
|
||||
guaranteed to be completed before we hit userspace.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Cc: Dave Martin <dave.martin@arm.com>
|
||||
Cc: Matthias Brugger <mbrugger@suse.com>
|
||||
Cc: James Morse <james.morse@arm.com>
|
||||
Reported-by: Matwey V. Kornilov <matwey.kornilov@gmail.com>
|
||||
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
|
||||
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
|
||||
---
|
||||
arch/arm64/kernel/armv8_deprecated.c | 2 +-
|
||||
arch/arm64/kernel/cpufeature.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/arm64/kernel/armv8_deprecated.c b/arch/arm64/kernel/armv8_deprecated.c
|
||||
index f0e6d71..d06fbe4 100644
|
||||
--- a/arch/arm64/kernel/armv8_deprecated.c
|
||||
+++ b/arch/arm64/kernel/armv8_deprecated.c
|
||||
@@ -649,4 +649,4 @@ static int __init armv8_deprecated_init(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-late_initcall(armv8_deprecated_init);
|
||||
+core_initcall(armv8_deprecated_init);
|
||||
diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
|
||||
index cd52d36..21e2c95 100644
|
||||
--- a/arch/arm64/kernel/cpufeature.c
|
||||
+++ b/arch/arm64/kernel/cpufeature.c
|
||||
@@ -1307,4 +1307,4 @@ static int __init enable_mrs_emulation(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-late_initcall(enable_mrs_emulation);
|
||||
+core_initcall(enable_mrs_emulation);
|
||||
From ae2e972dae3cea795e9f8f94eb1601213c2d49f0 Mon Sep 17 00:00:00 2001
|
||||
From: Suzuki K Poulose <suzuki.poulose@arm.com>
|
||||
Date: Fri, 6 Oct 2017 14:16:53 +0100
|
||||
Subject: arm64: Ensure fpsimd support is ready before userspace is active
|
||||
|
||||
We register the pm/hotplug callbacks for FPSIMD as late_initcall,
|
||||
which happens after the userspace is active (from initramfs via
|
||||
populate_rootfs, a rootfs_initcall). Make sure we are ready even
|
||||
before the userspace could potentially use it, by promoting to
|
||||
a core_initcall.
|
||||
|
||||
Cc: Will Deacon <will.deacon@arm.com>
|
||||
Cc: Mark Rutland <mark.rutland@arm.com>
|
||||
Cc: Dave Martin <dave.martin@arm.com>
|
||||
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
|
||||
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
|
||||
---
|
||||
arch/arm64/kernel/fpsimd.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c
|
||||
index f444f37..5d547de 100644
|
||||
--- a/arch/arm64/kernel/fpsimd.c
|
||||
+++ b/arch/arm64/kernel/fpsimd.c
|
||||
@@ -444,4 +444,4 @@ static int __init fpsimd_init(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
-late_initcall(fpsimd_init);
|
||||
+core_initcall(fpsimd_init);
|
|
@ -0,0 +1,96 @@
|
|||
From patchwork Thu Oct 5 11:29:17 2017
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 7bit
|
||||
Subject: [v2] drm/gem-cma-helper: Change the level of the allocation failure
|
||||
message
|
||||
From: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
X-Patchwork-Id: 180737
|
||||
Message-Id: <20171005112917.15949-1-boris.brezillon@free-electrons.com>
|
||||
To: David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>,
|
||||
dri-devel@lists.freedesktop.org
|
||||
Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
Date: Thu, 5 Oct 2017 13:29:17 +0200
|
||||
|
||||
drm_gem_cma_create() prints an error message when dma_alloc_wc() fails to
|
||||
allocate the amount of memory we requested. This can lead to annoying
|
||||
error messages when CMA is only one possible source of memory for the BO
|
||||
allocation. Turn this error message into a debug one.
|
||||
|
||||
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
|
||||
Reviewed-by: Eric Anholt <eric@anholt.net>
|
||||
---
|
||||
Changes in v2:
|
||||
- Remove __must_check attribute
|
||||
---
|
||||
drivers/gpu/drm/drm_gem_cma_helper.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c
|
||||
index 373e33f22be4..020e7668dfab 100644
|
||||
--- a/drivers/gpu/drm/drm_gem_cma_helper.c
|
||||
+++ b/drivers/gpu/drm/drm_gem_cma_helper.c
|
||||
@@ -112,7 +112,7 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
|
||||
cma_obj->vaddr = dma_alloc_wc(drm->dev, size, &cma_obj->paddr,
|
||||
GFP_KERNEL | __GFP_NOWARN);
|
||||
if (!cma_obj->vaddr) {
|
||||
- dev_err(drm->dev, "failed to allocate buffer with size %zu\n",
|
||||
+ dev_dbg(drm->dev, "failed to allocate buffer with size %zu\n",
|
||||
size);
|
||||
ret = -ENOMEM;
|
||||
goto error;
|
||||
From patchwork Wed Oct 4 12:54:47 2017
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 7bit
|
||||
Subject: cma: Take __GFP_NOWARN into account in cma_alloc()
|
||||
From: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
X-Patchwork-Id: 180554
|
||||
Message-Id: <20171004125447.15195-1-boris.brezillon@free-electrons.com>
|
||||
To: linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>,
|
||||
Laura Abbott <labbott@redhat.com>
|
||||
Cc: Boris Brezillon <boris.brezillon@free-electrons.com>,
|
||||
Jaewon Kim <jaewon31.kim@samsung.com>, dri-devel@lists.freedesktop.org
|
||||
Date: Wed, 4 Oct 2017 14:54:47 +0200
|
||||
|
||||
cma_alloc() unconditionally prints an INFO message when the CMA
|
||||
allocation fails. Make this message conditional on the non-presence of
|
||||
__GFP_NOWARN in gfp_mask.
|
||||
|
||||
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
Acked-by: Laura Abbott <labbott@redhat.com>
|
||||
---
|
||||
Hello,
|
||||
|
||||
This patch aims at removing INFO messages that are displayed when the
|
||||
VC4 driver tries to allocate buffer objects. From the driver perspective
|
||||
an allocation failure is acceptable, and the driver can possibly do
|
||||
something to make following allocation succeed (like flushing the VC4
|
||||
internal cache).
|
||||
|
||||
Also, I don't understand why this message is only an INFO message, and
|
||||
not a WARN (pr_warn()). Please let me know if you have good reasons to
|
||||
keep it as an unconditional pr_info().
|
||||
|
||||
Thanks,
|
||||
|
||||
Boris
|
||||
---
|
||||
mm/cma.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mm/cma.c b/mm/cma.c
|
||||
index c0da318c020e..022e52bd8370 100644
|
||||
--- a/mm/cma.c
|
||||
+++ b/mm/cma.c
|
||||
@@ -460,7 +460,7 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align,
|
||||
|
||||
trace_cma_alloc(pfn, page, count, align);
|
||||
|
||||
- if (ret) {
|
||||
+ if (ret && !(gfp_mask & __GFP_NOWARN)) {
|
||||
pr_info("%s: alloc failed, req-size: %zu pages, ret: %d\n",
|
||||
__func__, count, ret);
|
||||
cma_debug_show_areas(cma);
|
|
@ -1714,7 +1714,6 @@ CONFIG_HWLAT_TRACER=y
|
|||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
CONFIG_HWMON=y
|
||||
CONFIG_HWPOISON_INJECT=m
|
||||
CONFIG_HW_RANDOM_OMAP=m
|
||||
CONFIG_HW_RANDOM_POWERNV=m
|
||||
CONFIG_HW_RANDOM_PSERIES=m
|
||||
CONFIG_HW_RANDOM_TIMERIOMEM=m
|
||||
|
|
|
@ -1696,7 +1696,6 @@ CONFIG_HWLAT_TRACER=y
|
|||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
CONFIG_HWMON=y
|
||||
CONFIG_HWPOISON_INJECT=m
|
||||
CONFIG_HW_RANDOM_OMAP=m
|
||||
CONFIG_HW_RANDOM_POWERNV=m
|
||||
CONFIG_HW_RANDOM_PSERIES=m
|
||||
CONFIG_HW_RANDOM_TIMERIOMEM=m
|
||||
|
|
13
kernel.spec
13
kernel.spec
|
@ -569,8 +569,14 @@ Patch211: drm-i915-hush-check-crtc-state.patch
|
|||
|
||||
# 300 - ARM patches
|
||||
|
||||
# a tempory patch for QCOM hardware enablement. Will be gone by F-26 GA
|
||||
Patch301: qcom-QDF2432-tmp-errata.patch
|
||||
# Reduces a number of primarily info logs to dmesg
|
||||
# https://patchwork.freedesktop.org/patch/180737/
|
||||
# https://patchwork.freedesktop.org/patch/180554/
|
||||
Patch300: drm-cma-reduce-dmesg-logs.patch
|
||||
|
||||
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c0d8832e78cbfd4a64b7112e34920af4b0b0e60e
|
||||
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ae2e972dae3cea795e9f8f94eb1601213c2d49f0
|
||||
Patch301: arm64-ensure-ready-for-userspace.patch
|
||||
|
||||
# http://www.spinics.net/lists/linux-tegra/msg26029.html
|
||||
Patch302: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch
|
||||
|
@ -2259,6 +2265,9 @@ fi
|
|||
#
|
||||
#
|
||||
%changelog
|
||||
* Thu Oct 12 2017 Peter Robinson <pbrobinson@fedoraproject.org>
|
||||
- Some minor ARM fixes and cleanups
|
||||
|
||||
* Wed Oct 11 2017 Jeremy Cline <jeremy@jcline.org>
|
||||
- Fix incorrect updates of uninstantiated keys crash the kernel (rhbz 1498016 1498017)
|
||||
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
From edc7986d4d405daebaf2f66269b353da579fce5f Mon Sep 17 00:00:00 2001
|
||||
From: Christopher Covington <cov@codeaurora.org>
|
||||
Date: Tue, 31 May 2016 16:19:02 -0400
|
||||
Subject: arm64: Workaround for QDF2432 ID_AA64 SR accesses
|
||||
|
||||
The ARMv8.0 architecture reserves several system register encodings for
|
||||
future use. These encodings should behave as read-only and always return
|
||||
zero on a read. As described in Errata 94, the CPU cores in the QDF2432
|
||||
errantly cause an instruction abort if an AArch64 MRS instruction attempts
|
||||
to read any of the following system register encodings:
|
||||
|
||||
Op0, Op1, CRn, CRm, Op2
|
||||
3, 0, C0, [C4-C7], [2-3, 6-7]
|
||||
3, 0, C0, C3, [3-7]
|
||||
3, 0, C0, [C4,C6,C7], [4-5]
|
||||
3, 0, C0, C2, [6-7]
|
||||
|
||||
Naively projecting ARMv8.0 names, this space includes:
|
||||
|
||||
ID_AA64PFR[2-7]_EL1
|
||||
ID_AA64DFR[2-3]_EL1
|
||||
ID_AA64AFR[2-3]_EL1
|
||||
ID_AA64ISAR[2-7]_EL1
|
||||
ID_AA64MMFR[2-7]_EL1
|
||||
|
||||
As of v4.8-rc2, Linux only attempts to query one register in this space,
|
||||
ID_AA64MMFR2_EL1. As simple workaround, skip that access when the affected
|
||||
MIDR is detected.
|
||||
|
||||
Signed-off-by: Christopher Covington <cov@codeaurora.org>
|
||||
---
|
||||
arch/arm64/kernel/cpuinfo.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c
|
||||
index ed1b84f..790de6b 100644
|
||||
--- a/arch/arm64/kernel/cpuinfo.c
|
||||
+++ b/arch/arm64/kernel/cpuinfo.c
|
||||
@@ -325,6 +325,8 @@ static void cpuinfo_detect_icache_policy(struct cpuinfo_arm64 *info)
|
||||
|
||||
static void __cpuinfo_store_cpu(struct cpuinfo_arm64 *info)
|
||||
{
|
||||
+ bool qdf2432_cpu = read_cpuid_id() == 0x510f2811;
|
||||
+
|
||||
info->reg_cntfrq = arch_timer_get_cntfrq();
|
||||
info->reg_ctr = read_cpuid_cachetype();
|
||||
info->reg_dczid = read_cpuid(DCZID_EL0);
|
||||
@@ -337,7 +339,7 @@ static void __cpuinfo_store_cpu(struct cpuinfo_arm64 *info)
|
||||
info->reg_id_aa64isar1 = read_cpuid(ID_AA64ISAR1_EL1);
|
||||
info->reg_id_aa64mmfr0 = read_cpuid(ID_AA64MMFR0_EL1);
|
||||
info->reg_id_aa64mmfr1 = read_cpuid(ID_AA64MMFR1_EL1);
|
||||
- info->reg_id_aa64mmfr2 = read_cpuid(ID_AA64MMFR2_EL1);
|
||||
+ info->reg_id_aa64mmfr2 = qdf2432_cpu ? 0 : read_cpuid(ID_AA64MMFR2_EL1);
|
||||
info->reg_id_aa64pfr0 = read_cpuid(ID_AA64PFR0_EL1);
|
||||
info->reg_id_aa64pfr1 = read_cpuid(ID_AA64PFR1_EL1);
|
||||
|
||||
--
|
||||
cgit v0.12
|
||||
|
Loading…
Reference in New Issue