stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Paul Mackerras <paulus@ozlabs.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Sasha Levin <alexander.levin@verizon.com>
Subject: [PATCH 4.9 65/67] powerpc/64: Dont try to use radix MMU under a hypervisor
Date: Mon,  6 Nov 2017 10:44:28 +0100	[thread overview]
Message-ID: <20171106091307.979089368@linuxfoundation.org> (raw)
In-Reply-To: <20171106091305.401025609@linuxfoundation.org>

4.9-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Paul Mackerras <paulus@ozlabs.org>


[ Upstream commit 18569c1f134e1c5c88228f043c09678ae6052b7c ]

Currently, if the kernel is running on a POWER9 processor under a
hypervisor, it will try to use the radix MMU even though it doesn't have
the necessary code to use radix under a hypervisor (it doesn't negotiate
use of radix, and it doesn't do the H_REGISTER_PROC_TBL hcall). The
result is that the guest kernel will crash when it tries to turn on the
MMU.

This fixes it by looking for the /chosen/ibm,architecture-vec-5
property, and if it exists, clears the radix MMU feature bit, before we
decide whether to initialize for radix or HPT. This property is created
by the hypervisor as a result of the guest calling the
ibm,client-architecture-support method to indicate its capabilities, so
it will indicate whether the hypervisor agreed to us using radix.

Systems without a hypervisor may have this property also (for example,
skiboot creates it), so we check the HV bit in the MSR to see whether we
are running as a guest or not. If we are in hypervisor mode, then we can
do whatever we like including using the radix MMU.

The reason for using this property is that in future, when we have
support for using radix under a hypervisor, we will need to check this
property to see whether the hypervisor agreed to us using radix.

Fixes: 2bfd65e45e87 ("powerpc/mm/radix: Add radix callbacks for early init routines")
Cc: stable@vger.kernel.org # v4.7+
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/powerpc/mm/init_64.c |   33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

--- a/arch/powerpc/mm/init_64.c
+++ b/arch/powerpc/mm/init_64.c
@@ -42,6 +42,8 @@
 #include <linux/memblock.h>
 #include <linux/hugetlb.h>
 #include <linux/slab.h>
+#include <linux/of_fdt.h>
+#include <linux/libfdt.h>
 
 #include <asm/pgalloc.h>
 #include <asm/page.h>
@@ -421,6 +423,28 @@ static int __init parse_disable_radix(ch
 }
 early_param("disable_radix", parse_disable_radix);
 
+/*
+ * If we're running under a hypervisor, we currently can't do radix
+ * since we don't have the code to do the H_REGISTER_PROC_TBL hcall.
+ * We tell that we're running under a hypervisor by looking for the
+ * /chosen/ibm,architecture-vec-5 property.
+ */
+static void early_check_vec5(void)
+{
+	unsigned long root, chosen;
+	int size;
+	const u8 *vec5;
+
+	root = of_get_flat_dt_root();
+	chosen = of_get_flat_dt_subnode_by_name(root, "chosen");
+	if (chosen == -FDT_ERR_NOTFOUND)
+		return;
+	vec5 = of_get_flat_dt_prop(chosen, "ibm,architecture-vec-5", &size);
+	if (!vec5)
+		return;
+	cur_cpu_spec->mmu_features &= ~MMU_FTR_TYPE_RADIX;
+}
+
 void __init mmu_early_init_devtree(void)
 {
 	/* Disable radix mode based on kernel command line. */
@@ -428,6 +452,15 @@ void __init mmu_early_init_devtree(void)
 	if (disable_radix || !(mfmsr() & MSR_HV))
 		cur_cpu_spec->mmu_features &= ~MMU_FTR_TYPE_RADIX;
 
+	/*
+	 * Check /chosen/ibm,architecture-vec-5 if running as a guest.
+	 * When running bare-metal, we can use radix if we like
+	 * even though the ibm,architecture-vec-5 property created by
+	 * skiboot doesn't have the necessary bits set.
+	 */
+	if (early_radix_enabled() && !(mfmsr() & MSR_HV))
+		early_check_vec5();
+
 	if (early_radix_enabled())
 		radix__early_init_devtree();
 	else

  parent reply	other threads:[~2017-11-06  9:46 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-06  9:43 [PATCH 4.9 00/67] 4.9.61-stable review Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 01/67] ALSA: timer: Add missing mutex lock for compat ioctls Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 02/67] ALSA: seq: Fix nested rwsem annotation for lockdep splat Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 03/67] cifs: check MaxPathNameComponentLength != 0 before using it Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 04/67] KEYS: return full count in keyring_read() if buffer is too small Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 05/67] KEYS: fix out-of-bounds read during ASN.1 parsing Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 06/67] ASoC: adau17x1: Workaround for noise bug in ADC Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 07/67] arm64: ensure __dump_instr() checks addr_limit Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 08/67] arm/arm64: KVM: set right LR register value for 32 bit guest when inject abort Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 09/67] arm/arm64: kvm: Disable branch profiling in HYP code Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 10/67] ARM: 8715/1: add a private asm/unaligned.h Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 11/67] drm/amdgpu: return -ENOENT from uvd 6.0 early init for harvesting Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 12/67] ocfs2: fstrim: Fix start offset of first cluster group during fstrim Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 14/67] drm/msm: Fix potential buffer overflow issue Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 15/67] drm/msm: fix an integer overflow test Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 16/67] tracing/samples: Fix creation and deletion of simple_thread_fn creation Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 17/67] Fix tracing sample code warning Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 18/67] cpufreq: Do not clear real_cpus mask on policy init Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 19/67] crypto: ccp - Set the AES size field for all modes Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 20/67] staging: fsl-mc: Add missing header Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 21/67] IB/mlx5: Assign DSCP for R-RoCE QPs Address Path Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 22/67] PM / wakeirq: report a wakeup_event on dedicated wekup irq Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 23/67] scsi: megaraid_sas: Do not set fp_possible if TM capable for non-RW syspdIO, change fp_possible to bool Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 24/67] mmc: s3cmci: include linux/interrupt.h for tasklet_struct Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 25/67] mfd: ab8500-sysctrl: Handle probe deferral Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 26/67] mfd: axp20x: Fix axp288 PEK_DBR and PEK_DBF irqs being swapped Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 27/67] bnxt_en: Added PCI IDs for BCM57452 and BCM57454 ASICs Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 28/67] staging: rtl8712u: Fix endian settings for structs describing network packets Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 29/67] PCI/MSI: Return failure when msix_setup_entries() fails Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 30/67] net: mvneta: fix build errors when linux/phy*.h is removed from net/dsa.h Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 31/67] ext4: fix stripe-unaligned allocations Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 32/67] ext4: do not use stripe_width if it is not set Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 33/67] net/ena: change drivers default timeouts Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 34/67] i2c: riic: correctly finish transfers Greg Kroah-Hartman
2017-11-06  9:43 ` [PATCH 4.9 36/67] perf tools: Only increase index if perf_evsel__new_idx() succeeds Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 37/67] iwlwifi: mvm: use the PROBE_RESP_QUEUE to send deauth to unknown station Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 38/67] drm/fsl-dcu: check for clk_prepare_enable() error Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 39/67] clocksource/drivers/arm_arch_timer: Add dt binding for hisilicon-161010101 erratum Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 40/67] net: phy: dp83867: Recover from "port mirroring" N/A MODE4 Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 41/67] cx231xx: Fix I2C on Internal Master 3 Bus Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 42/67] ath10k: fix reading sram contents for QCA4019 Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 43/67] clk: sunxi-ng: Check kzalloc() for errors and cleanup error path Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 44/67] drm/msm/dsi: Set msm_dsi->encoders before initializing bridge Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 45/67] mtd: nand: sunxi: Fix the non-polling case in sunxi_nfc_wait_events() Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 46/67] gpio: mcp23s08: Select REGMAP/REGMAP_I2C to fix build error Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 47/67] xen/manage: correct return value check on xenbus_scanf() Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 48/67] scsi: aacraid: Process Error for response I/O Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 49/67] platform/x86: intel_mid_thermal: Fix module autoload Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 50/67] staging: lustre: llite: dont invoke direct_IO for the EOF case Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 51/67] staging: lustre: hsm: stack overrun in hai_dump_data_field Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 52/67] staging: lustre: ptlrpc: skip lock if export failed Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 53/67] staging: lustre: lmv: Error not handled for lmv_find_target Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 55/67] vfs: open() with O_CREAT should not create inodes with unknown ids Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 56/67] ASoC: Intel: boards: remove .pm_ops in all Atom/DPCM machine drivers Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 57/67] exynos4-is: fimc-is: Unmap region obtained by of_iomap() Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 58/67] mei: return error on notification request to a disconnected client Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 59/67] s390/dasd: check for device error pointer within state change interrupts Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 60/67] s390/prng: Adjust generation of entropy to produce real 256 bits Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 61/67] s390/crypto: Extend key length check for AES-XTS in fips mode Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 62/67] bt8xx: fix memory leak Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 63/67] drm/exynos: g2d: prevent integer overflow in Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 64/67] PCI: Avoid possible deadlock on pci_lock and p->pi_lock Greg Kroah-Hartman
2017-11-06  9:44 ` Greg Kroah-Hartman [this message]
2017-11-06  9:44 ` [PATCH 4.9 66/67] xen: dont print error message in case of missing Xenstore entry Greg Kroah-Hartman
2017-11-06  9:44 ` [PATCH 4.9 67/67] staging: r8712u: Fix Sparse warning in rtl871x_xmit.c Greg Kroah-Hartman
2017-11-06 21:17 ` [PATCH 4.9 00/67] 4.9.61-stable review Guenter Roeck
2017-11-06 22:22 ` Shuah Khan
2017-11-06 23:13 ` Shuah Khan
2017-11-07 22:49 ` Tom Gall
2017-11-08  9:21   ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171106091307.979089368@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=alexander.levin@verizon.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=paulus@ozlabs.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).