All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
	Zwane Mwaikambo <zwane@arm.linux.org.uk>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Randy Dunlap <rdunlap@xenotime.net>,
	Dave Jones <davej@redhat.com>,
	Chuck Wolber <chuckw@quantumlinux.com>,
	Chris Wedgwood <reviews@ml.cw.f00f.org>,
	Michael Krufky <mkrufky@linuxtv.org>,
	Chuck Ebbert <cebbert@redhat.com>,
	Domenico Andreoli <cavokz@gmail.com>, Willy Tarreau <w@1wt.eu>,
	Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
	Jake Edge <jake@lwn.net>, Eugene Teo <eteo@redhat.com>,
	torvalds@linux-foundation.org, akpm@linux-foundation.org,
	alan@lxorguk.ukuu.org.uk, Zachary Amsden <zach@vmware.com>
Subject: [patch 04/22] x86 Fix VMI crash on boot in 2.6.28-rc8
Date: Tue, 16 Dec 2008 16:04:05 -0800	[thread overview]
Message-ID: <20081217000405.GE4504@kroah.com> (raw)
In-Reply-To: <20081217000306.GA4504@kroah.com>

[-- Attachment #1: x86-fix-vmi-crash-on-boot-in-2.6.28-rc8.patch --]
[-- Type: text/plain, Size: 3271 bytes --]

2.6.27-stable review patch.  If anyone has any objections, please let us know.

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

From: Zachary Amsden <zach@vmware.com>

commit ae8d04e2ecbb233926860e9ce145eac19c7835dc upstream.

VMI initialiation can relocate the fixmap, causing early_ioremap to
malfunction if it is initialized before the relocation.  To fix this,
VMI activation is split into two phases; the detection, which must
happen before setting up ioremap, and the activation, which must happen
after parsing early boot parameters.

This fixes a crash on boot when VMI is enabled under VMware.

Signed-off-by: Zachary Amsden <zach@vmware.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 arch/x86/kernel/setup.c   |   12 +++++-------
 arch/x86/kernel/smpboot.c |    2 --
 arch/x86/kernel/vmi_32.c  |   16 +++++++++++-----
 include/asm-x86/vmi.h     |    8 +++++++-
 4 files changed, 23 insertions(+), 15 deletions(-)

--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -634,6 +634,9 @@ void __init setup_arch(char **cmdline_p)
 	printk(KERN_INFO "Command line: %s\n", boot_command_line);
 #endif
 
+	/* VMI may relocate the fixmap; do this before touching ioremap area */
+	vmi_init();
+
 	early_cpu_init();
 	early_ioremap_init();
 
@@ -707,13 +710,8 @@ void __init setup_arch(char **cmdline_p)
 	check_efer();
 #endif
 
-#if defined(CONFIG_VMI) && defined(CONFIG_X86_32)
-	/*
-	 * Must be before kernel pagetables are setup
-	 * or fixmap area is touched.
-	 */
-	vmi_init();
-#endif
+	/* Must be before kernel pagetables are setup */
+	vmi_activate();
 
 	/* after early param, so could get panic from serial */
 	reserve_early_setup_data();
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -289,9 +289,7 @@ static void __cpuinit start_secondary(vo
 	 * fragile that we want to limit the things done here to the
 	 * most necessary things.
 	 */
-#ifdef CONFIG_VMI
 	vmi_bringup();
-#endif
 	cpu_init();
 	preempt_disable();
 	smp_callin();
--- a/arch/x86/kernel/vmi_32.c
+++ b/arch/x86/kernel/vmi_32.c
@@ -960,8 +960,6 @@ static inline int __init activate_vmi(vo
 
 void __init vmi_init(void)
 {
-	unsigned long flags;
-
 	if (!vmi_rom)
 		probe_vmi_rom();
 	else
@@ -973,13 +971,21 @@ void __init vmi_init(void)
 
 	reserve_top_address(-vmi_rom->virtual_top);
 
-	local_irq_save(flags);
-	activate_vmi();
-
 #ifdef CONFIG_X86_IO_APIC
 	/* This is virtual hardware; timer routing is wired correctly */
 	no_timer_check = 1;
 #endif
+}
+
+void vmi_activate(void)
+{
+	unsigned long flags;
+
+	if (!vmi_rom)
+		return;
+
+	local_irq_save(flags);
+	activate_vmi();
 	local_irq_restore(flags & X86_EFLAGS_IF);
 }
 
--- a/include/asm-x86/vmi.h
+++ b/include/asm-x86/vmi.h
@@ -223,9 +223,15 @@ struct pci_header {
 } __attribute__((packed));
 
 /* Function prototypes for bootstrapping */
+#ifdef CONFIG_VMI
 extern void vmi_init(void);
+extern void vmi_activate(void);
 extern void vmi_bringup(void);
-extern void vmi_apply_boot_page_allocations(void);
+#else
+static inline void vmi_init(void) {}
+static inline void vmi_activate(void) {}
+static inline void vmi_bringup(void) {}
+#endif
 
 /* State needed to start an application processor in an SMP system. */
 struct vmi_ap_state {


  parent reply	other threads:[~2008-12-17  0:14 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20081216235704.347182084@mini.kroah.org>
2008-12-17  0:03 ` [patch 00/22] 2.6.27.10 stable review Greg KH
2008-12-17  0:03   ` [patch 01/22] AMD IOMMU: enable device isolation per default Greg KH
2008-12-18 13:00     ` Pavel Machek
2008-12-19 11:21       ` Joerg Roedel
2008-12-20 11:26         ` Pavel Machek
2008-12-20 21:48           ` Joerg Roedel
2008-12-19 16:14       ` Greg KH
2008-12-17  0:04   ` [patch 02/22] bonding: fix miimon failure counter Greg KH
2008-12-17  0:04   ` [patch 03/22] Revert "sched_clock: prevent scd->clock from moving backwards" Greg KH
2008-12-17  0:04   ` Greg KH [this message]
2008-12-17  0:04   ` [patch 05/22] lib/idr.c: Fix bug introduced by RCU fix Greg KH
2008-12-17  0:04   ` [patch 06/22] libata: fix Seagate NCQ+FLUSH blacklist Greg KH
2008-12-17  0:04   ` [patch 07/22] e1000e: fix double release of mutex Greg KH
2008-12-17  0:04   ` [patch 08/22] can: Fix CAN_(EFF|RTR)_FLAG handling in can_filter Greg KH
2008-12-17  0:04   ` [patch 09/22] can: omit received RTR frames for single ID filter lists Greg KH
2008-12-17  0:04   ` [patch 10/22] iwlwifi: clean key table in iwl_clear_stations_table function Greg KH
2008-12-17  0:04   ` [patch 11/22] net: eliminate warning from NETIF_F_UFO on bridge Greg KH
2008-12-17  0:04   ` [patch 12/22] unicode table for cp437 Greg KH
2008-12-17  0:04   ` [patch 13/22] console ASCII glyph 1:1 mapping Greg KH
2008-12-17  0:04   ` [patch 14/22] iwlagn: fix RX skb alignment Greg KH
2008-12-17  0:04   ` [patch 15/22] key: fix setkey(8) policy set breakage Greg KH
2008-12-17  0:04   ` [patch 16/22] firewire: fw-ohci: fix IOMMU resource exhaustion Greg KH
2008-12-17  0:04   ` [patch 17/22] ieee1394: add quirk fix for Freecom HDD Greg KH
2008-12-17  0:04   ` [patch 18/22] SUNRPC: Fix a performance regression in the RPC authentication code Greg KH
2008-12-17  0:04   ` [patch 19/22] b1isa: fix b1isa_exit() to really remove registered capi controllers Greg KH
2008-12-17  0:04   ` [patch 20/22] macfb: Do not overflow fb_fix_screeninfo.id Greg KH
2008-12-17  0:04   ` [patch 21/22] V4L/DVB (9621): Avoid writing outside shadow.bytes[] array Greg KH
2008-12-17  0:04   ` [patch 22/22] setup_per_zone_pages_min(): take zone->lock instead of zone->lru_lock Greg KH

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=20081217000405.GE4504@kroah.com \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=cavokz@gmail.com \
    --cc=cebbert@redhat.com \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=eteo@redhat.com \
    --cc=jake@lwn.net \
    --cc=jmforbes@linuxtx.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mkrufky@linuxtv.org \
    --cc=rbranco@la.checkpoint.com \
    --cc=rdunlap@xenotime.net \
    --cc=reviews@ml.cw.f00f.org \
    --cc=stable@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=tytso@mit.edu \
    --cc=w@1wt.eu \
    --cc=zach@vmware.com \
    --cc=zwane@arm.linux.org.uk \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.