All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: x86 team <x86@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Arjan van de Veen <arjan@infradead.org>,
	Avi Kivity <avi@redhat.com>,
	Jeremy Fitzhardinge <jeremy@goop.org>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Alok N Kataria <akataria@vmware.com>,
	Pan Jacob jun <jacob.jun.pan@intel.com>
Subject: [RFC patch 12/32] x86: Move get/find_smp_config to platform_setup
Date: Fri, 21 Aug 2009 21:30:28 -0000	[thread overview]
Message-ID: <20090821205602.416680466@linutronix.de> (raw)
In-Reply-To: 20090821205008.518392436@linutronix.de

[-- Attachment #1: x86-move-get-find-smp-config-to-platform.patch --]
[-- Type: text/plain, Size: 9224 bytes --]

Replace the quirk machinery by a platform setup function which
defaults to the standard implementation.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/include/asm/mpspec.h    |   30 ++++++++++++++++++++++++------
 arch/x86/include/asm/platform.h  |    4 ++++
 arch/x86/include/asm/setup.h     |    2 --
 arch/x86/kernel/apic/numaq_32.c  |    2 --
 arch/x86/kernel/mpparse.c        |   33 ++-------------------------------
 arch/x86/kernel/platform_setup.c |    2 ++
 arch/x86/kernel/setup.c          |    2 --
 arch/x86/kernel/visws_quirks.c   |   14 ++++----------
 8 files changed, 36 insertions(+), 53 deletions(-)

Index: linux-2.6/arch/x86/include/asm/mpspec.h
===================================================================
--- linux-2.6.orig/arch/x86/include/asm/mpspec.h
+++ linux-2.6/arch/x86/include/asm/mpspec.h
@@ -4,6 +4,7 @@
 #include <linux/init.h>
 
 #include <asm/mpspec_def.h>
+#include <asm/platform.h>
 
 extern int apic_version[MAX_APICS];
 extern int pic_mode;
@@ -41,9 +42,6 @@ extern int quad_local_to_mp_bus_id [NR_C
 
 #endif /* CONFIG_X86_64 */
 
-extern void early_find_smp_config(void);
-extern void early_get_smp_config(void);
-
 #if defined(CONFIG_MCA) || defined(CONFIG_EISA)
 extern int mp_bus_id_to_type[MAX_MP_BUSSES];
 #endif
@@ -56,10 +54,27 @@ extern int smp_found_config;
 extern int mpc_default_type;
 extern unsigned long mp_lapic_addr;
 
-extern void get_smp_config(void);
+static inline void get_smp_config(void)
+{
+	platform_setup.mpparse.get_smp_config(0);
+}
+
+static inline void early_get_smp_config(void)
+{
+	platform_setup.mpparse.get_smp_config(1);
+}
+
+static inline void find_smp_config(void)
+{
+	platform_setup.mpparse.find_smp_config(1);
+}
+
+static inline void early_find_smp_config(void)
+{
+	platform_setup.mpparse.find_smp_config(0);
+}
 
 #ifdef CONFIG_X86_MPPARSE
-extern void find_smp_config(void);
 extern void early_reserve_e820_mpc_new(void);
 extern int enable_update_mptable;
 extern int default_mpc_apic_id(struct mpc_cpu *m);
@@ -69,13 +84,16 @@ extern void default_mpc_oem_bus_info(str
 # else
 #  define default_mpc_oem_bus_info NULL
 # endif
+extern void default_find_smp_config(unsigned int reserve);
+extern void default_get_smp_config(unsigned int early);
 #else
-static inline void find_smp_config(void) { }
 static inline void early_reserve_e820_mpc_new(void) { }
 #define enable_update_mptable 0
 #define default_mpc_apic_id NULL
 #define default_smp_read_mpc_oem NULL
 #define default_mpc_oem_bus_info NULL
+#define default_find_smp_config platform_setup_uint_noop
+#define default_get_smp_config platform_setup_uint_noop
 #endif
 
 void __cpuinit generic_processor_info(int apicid, int version);
Index: linux-2.6/arch/x86/include/asm/platform.h
===================================================================
--- linux-2.6.orig/arch/x86/include/asm/platform.h
+++ linux-2.6/arch/x86/include/asm/platform.h
@@ -20,6 +20,8 @@ struct platform_setup_quirks {
  * @smp_read_mpc_oem:		platform specific oem mpc table setup
  * @mpc_oem_pci_bus:		platform specific pci bus setup (default NULL)
  * @mpc_oem_bus_info:		platform specific mpc bus info
+ * @find_smp_config:		find the smp configuration
+ * @get_smp_config:		get the smp configuration
  */
 struct platform_setup_mpparse {
 	void (*setup_ioapic_ids)(void);
@@ -27,6 +29,8 @@ struct platform_setup_mpparse {
 	void (*smp_read_mpc_oem)(struct mpc_table *mpc);
 	void (*mpc_oem_pci_bus)(struct mpc_bus *m);
 	void (*mpc_oem_bus_info)(struct mpc_bus *m, char *name);
+	void (*find_smp_config)(unsigned int reserve);
+	void (*get_smp_config)(unsigned int early);
 };
 
 /**
Index: linux-2.6/arch/x86/include/asm/setup.h
===================================================================
--- linux-2.6.orig/arch/x86/include/asm/setup.h
+++ linux-2.6/arch/x86/include/asm/setup.h
@@ -19,8 +19,6 @@ struct x86_quirks {
 	int (*arch_pre_intr_init)(void);
 	int (*arch_intr_init)(void);
 	int (*arch_trap_init)(void);
-	int (*mach_get_smp_config)(unsigned int early);
-	int (*mach_find_smp_config)(unsigned int reserve);
 };
 
 extern void x86_quirk_intr_init(void);
Index: linux-2.6/arch/x86/kernel/apic/numaq_32.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/apic/numaq_32.c
+++ linux-2.6/arch/x86/kernel/apic/numaq_32.c
@@ -268,8 +268,6 @@ static struct x86_quirks numaq_x86_quirk
 	.arch_pre_intr_init		= NULL,
 	.arch_intr_init			= NULL,
 	.arch_trap_init			= NULL,
-	.mach_get_smp_config		= NULL,
-	.mach_find_smp_config		= NULL,
 };
 
 static __init void early_check_numaq(void)
Index: linux-2.6/arch/x86/kernel/mpparse.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/mpparse.c
+++ linux-2.6/arch/x86/kernel/mpparse.c
@@ -610,7 +610,7 @@ static int __init check_physptr(struct m
 /*
  * Scan the memory blocks for an SMP configuration block.
  */
-static void __init __get_smp_config(unsigned int early)
+void __init default_get_smp_config(unsigned int early)
 {
 	struct mpf_intel *mpf = mpf_found;
 
@@ -627,11 +627,6 @@ static void __init __get_smp_config(unsi
 	if (acpi_lapic && acpi_ioapic)
 		return;
 
-	if (x86_quirks->mach_get_smp_config) {
-		if (x86_quirks->mach_get_smp_config(early))
-			return;
-	}
-
 	printk(KERN_INFO "Intel MultiProcessor Specification v1.%d\n",
 	       mpf->specification);
 #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86_32)
@@ -672,16 +667,6 @@ static void __init __get_smp_config(unsi
 	 */
 }
 
-void __init early_get_smp_config(void)
-{
-	__get_smp_config(1);
-}
-
-void __init get_smp_config(void)
-{
-	__get_smp_config(0);
-}
-
 static void __init smp_reserve_bootmem(struct mpf_intel *mpf)
 {
 	unsigned long size = get_mpc_size(mpf->physptr);
@@ -747,14 +732,10 @@ static int __init smp_scan_config(unsign
 	return 0;
 }
 
-static void __init __find_smp_config(unsigned int reserve)
+void __init default_find_smp_config(unsigned int reserve)
 {
 	unsigned int address;
 
-	if (x86_quirks->mach_find_smp_config) {
-		if (x86_quirks->mach_find_smp_config(reserve))
-			return;
-	}
 	/*
 	 * FIXME: Linux assumes you have 640K of base ram..
 	 * this continues the error...
@@ -789,16 +770,6 @@ static void __init __find_smp_config(uns
 		smp_scan_config(address, 0x400, reserve);
 }
 
-void __init early_find_smp_config(void)
-{
-	__find_smp_config(0);
-}
-
-void __init find_smp_config(void)
-{
-	__find_smp_config(1);
-}
-
 #ifdef CONFIG_X86_IO_APIC
 static u8 __initdata irq_used[MAX_IRQ_SOURCES];
 
Index: linux-2.6/arch/x86/kernel/platform_setup.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/platform_setup.c
+++ linux-2.6/arch/x86/kernel/platform_setup.c
@@ -31,6 +31,8 @@ struct __initdata platform_setup_ops pla
 		.mpc_apic_id = default_mpc_apic_id,
 		.smp_read_mpc_oem = default_smp_read_mpc_oem,
 		.mpc_oem_bus_info = default_mpc_oem_bus_info,
+		.find_smp_config = default_find_smp_config,
+		.get_smp_config = default_get_smp_config,
 	},
 
 	.quirks = {
Index: linux-2.6/arch/x86/kernel/setup.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/setup.c
+++ linux-2.6/arch/x86/kernel/setup.c
@@ -981,13 +981,11 @@ void __init setup_arch(char **cmdline_p)
 	 */
 	acpi_boot_init();
 
-#if defined(CONFIG_X86_MPPARSE) || defined(CONFIG_X86_VISWS)
 	/*
 	 * get boot-time SMP configuration:
 	 */
 	if (smp_found_config)
 		get_smp_config();
-#endif
 
 	prefill_possible_map();
 
Index: linux-2.6/arch/x86/kernel/visws_quirks.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/visws_quirks.c
+++ linux-2.6/arch/x86/kernel/visws_quirks.c
@@ -156,12 +156,8 @@ static void visws_machine_power_off(void
 	outl(PIIX_SPECIAL_STOP, 0xCFC);
 }
 
-static int __init visws_get_smp_config(unsigned int early)
+static void __init visws_get_smp_config(unsigned int early)
 {
-	/*
-	 * Prevent MP-table parsing by the generic code:
-	 */
-	return 1;
 }
 
 /*
@@ -208,7 +204,7 @@ static void __init MP_processor_info(str
 	apic_version[m->apicid] = ver;
 }
 
-static int __init visws_find_smp_config(unsigned int reserve)
+static void __init visws_find_smp_config(unsigned int reserve)
 {
 	struct mpc_cpu *mp = phys_to_virt(CO_CPU_TAB_PHYS);
 	unsigned short ncpus = readw(phys_to_virt(CO_CPU_NUM_PHYS));
@@ -230,8 +226,6 @@ static int __init visws_find_smp_config(
 		MP_processor_info(mp++);
 
 	mp_lapic_addr = APIC_DEFAULT_PHYS_BASE;
-
-	return 1;
 }
 
 static int visws_trap_init(void);
@@ -241,8 +235,6 @@ static struct x86_quirks visws_x86_quirk
 	.arch_pre_intr_init	= visws_pre_intr_init,
 	.arch_intr_init		= NULL,
 	.arch_trap_init		= visws_trap_init,
-	.mach_get_smp_config	= visws_get_smp_config,
-	.mach_find_smp_config	= visws_find_smp_config,
 };
 
 void __init visws_early_detect(void)
@@ -263,6 +255,8 @@ void __init visws_early_detect(void)
 	x86_quirks = &visws_x86_quirks;
 
 	platform_setup.resources.memory_setup = visws_memory_setup;
+	platform_setup.mpparse.get_smp_config = visws_get_smp_config;
+	platform_setup.mpparse.find_smp_config = visws_find_smp_config;
 
 	/*
 	 * Install reboot quirks:



  parent reply	other threads:[~2009-08-21 21:36 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-21 21:29 [RFC patch 00/32] x86: Refactor the setup code to provide a base for embedded platforms Thomas Gleixner
2009-08-21 21:29 ` [RFC patch 01/32] x86: Add platform_setup infrastructure Thomas Gleixner
2009-08-21 21:29 ` [RFC patch 02/32] x86: Add probe_roms to platform_setup Thomas Gleixner
2009-08-21 22:23   ` Jeremy Fitzhardinge
2009-08-21 22:36     ` Thomas Gleixner
2009-08-28 21:52       ` [RFC PATCH 0/7] x86/boot: Moorestown patch set based on platform_set abstraction Pan, Jacob jun
2009-08-29 16:59         ` Thomas Gleixner
2009-08-28 21:52       ` [RFC PATCH 2/7] x86: introduce a set of platform feature flags Pan, Jacob jun
2009-08-28 21:52       ` [RFC PATCH 3/7] x86: add moorestown specific platform setup code Pan, Jacob jun
2009-08-29 17:20         ` Thomas Gleixner
2009-08-28 21:53       ` [RFC PATCH 4/7] x86/apbt: Moorestown APB system timer driver Pan, Jacob jun
2009-08-28 21:53       ` [RFC PATCH 5/7] x86/apic: decouple legacy irq handling in ioapic Pan, Jacob jun
2009-08-28 21:53       ` [RFC PATCH 6/7] x86/apic: Early setup IOAPIC for APB timer Pan, Jacob jun
2009-08-28 21:53       ` [RFC PATCH 7/7] x86: add more platform_setup functions Pan, Jacob jun
2009-08-29 17:31         ` Thomas Gleixner
2009-08-21 21:29 ` [RFC patch 03/32] x86: Add request_standard_resources to platform_setup Thomas Gleixner
2009-08-21 21:29 ` [RFC patch 04/32] x86: Add reserve_ebda_region " Thomas Gleixner
2009-08-21 21:29 ` [RFC patch 05/32] x86: Move memory_setup to platform Thomas Gleixner
2009-08-21 21:29 ` [RFC patch 06/32] x86: Sanitize smp_record and move it to platform_setup Thomas Gleixner
2009-08-21 21:30 ` [RFC patch 07/32] x86: Move ioapic_ids_setup " Thomas Gleixner
2009-08-21 21:30 ` [RFC patch 08/32] x86: Move mpc_apic_id " Thomas Gleixner
2009-08-21 21:30 ` [RFC patch 09/32] x86: Move smp_read_mpc_oem " Thomas Gleixner
2009-08-21 21:30 ` [RFC patch 10/32] x86: Move mpc_oem_pci_bus " Thomas Gleixner
2009-08-21 21:30 ` [RFC patch 11/32] x86: Move oem_bus_info " Thomas Gleixner
2009-08-21 21:30 ` Thomas Gleixner [this message]
2009-08-21 21:30 ` [RFC patch 13/32] x86: Move pre_intr_init " Thomas Gleixner
2009-08-21 21:30 ` [RFC patch 14/32] x86: Move irq_init " Thomas Gleixner
2009-08-21 21:30 ` [RFC patch 15/32] x86: Move traps_init " Thomas Gleixner
2009-08-21 21:30 ` [RFC patch 16/32] x86: Replace ARCH_SETUP by a proper platform function Thomas Gleixner
2009-08-21 22:30   ` Jeremy Fitzhardinge
2009-08-21 23:42     ` Thomas Gleixner
2009-08-28 21:52       ` [PATCH 1/7] x86/boot: adding hw subarch ID for Moorestown Pan, Jacob jun
2009-08-29 16:58         ` Thomas Gleixner
2009-08-21 21:30 ` [RFC patch 17/32] x86: Move paravirt banner printout to platform Thomas Gleixner
2009-08-21 21:30 ` [RFC patch 18/32] x86: Move paravirt pagetable_setup " Thomas Gleixner
2009-08-21 21:31 ` [RFC patch 19/32] x86: Move xen_post_allocator_init into xen_pagetable_setup_done Thomas Gleixner
2009-08-21 21:31 ` [RFC patch 20/32] x86: Move percpu clockevents setup to platform Thomas Gleixner
2009-08-21 21:31 ` [RFC patch 21/32] x86: Add timer_init " Thomas Gleixner
2009-08-24  6:48   ` Andrey Panin
2009-08-21 21:31 ` [RFC patch 22/32] x86: Remove do_timer hook Thomas Gleixner
2009-08-21 21:31 ` [RFC patch 23/32] x86: Prepare unification of time_32/64.c Thomas Gleixner
2009-08-21 21:31 ` [RFC patch 24/32] x86: Simplify timer_ack magic in time_32.c Thomas Gleixner
2009-08-21 21:31 ` [RFC patch 25/32] x86: Remove mca bus ifdef from timer interrupt Thomas Gleixner
2009-08-21 21:31 ` [RFC patch 26/32] x86: Make timer setup and global variables the same in time_32/64.c Thomas Gleixner
2009-08-21 21:31 ` [RFC patch 27/32] x86: Move calibrate_cpu to tsc.c Thomas Gleixner
2009-08-21 21:32 ` [RFC patch 28/32] x86: time_32/64.c unify profile_pc Thomas Gleixner
2009-08-21 21:32 ` [RFC patch 29/32] x86: Replace the now identical time_32/64.c by time.c Thomas Gleixner
2009-08-21 21:32 ` [RFC patch 30/32] x86: Move tsc_calibration to platform Thomas Gleixner
2009-08-21 21:32 ` [RFC patch 31/32] init: Move sched_clock_init after late_time_init Thomas Gleixner
2009-08-21 21:32 ` [RFC patch 32/32] x86: Move tsc_init to late_time_init Thomas Gleixner
2009-08-21 22:19 ` [RFC patch 00/32] x86: Refactor the setup code to provide a base for embedded platforms Jeremy Fitzhardinge
2009-08-22 10:57 ` Ingo Molnar
2009-08-23  9:15   ` Thomas Gleixner

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=20090821205602.416680466@linutronix.de \
    --to=tglx@linutronix.de \
    --cc=akataria@vmware.com \
    --cc=akpm@linux-foundation.org \
    --cc=arjan@infradead.org \
    --cc=avi@redhat.com \
    --cc=jacob.jun.pan@intel.com \
    --cc=jeremy@goop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=rusty@rustcorp.com.au \
    --cc=x86@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 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.