From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH 4/5] x86: adjust x2apic section placement Date: Wed, 15 Dec 2010 11:20:05 +0000 Message-ID: <4D08B2750200007800028191@vpn.id2.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__PartFCD0B475.1__=" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" Cc: Yinghai Lu List-Id: xen-devel@lists.xenproject.org This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__PartFCD0B475.1__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Signed-off-by: Jan Beulich --- a/xen/arch/x86/apic.c +++ b/xen/arch/x86/apic.c @@ -953,18 +953,17 @@ no_apic: return -1; } =20 -void x2apic_setup(void) +void x2apic_ap_setup(void) +{ + if ( x2apic_enabled ) + __enable_x2apic(); +} + +void __init x2apic_bsp_setup(void) { struct IO_APIC_route_entry **ioapic_entries =3D NULL; uint64_t msr_content; =20 - if ( smp_processor_id() !=3D 0 ) - { - if ( x2apic_enabled ) - __enable_x2apic(); - return; - } - if ( !cpu_has_x2apic ) return; =20 --- a/xen/arch/x86/genapic/x2apic.c +++ b/xen/arch/x86/genapic/x2apic.c @@ -27,7 +27,7 @@ #include #include =20 -static int x2apic_phys; /* By default we use logical cluster mode. */ +static int __initdata x2apic_phys; /* By default we use logical cluster = mode. */ boolean_param("x2apic_phys", x2apic_phys); =20 static void init_apic_ldr_x2apic_phys(void) @@ -134,7 +134,7 @@ static const struct genapic apic_x2apic_ .send_IPI_self =3D send_IPI_self_x2apic }; =20 -const struct genapic *apic_x2apic_probe(void) +const struct genapic *__init apic_x2apic_probe(void) { return x2apic_phys ? &apic_x2apic_phys : &apic_x2apic_cluster; } --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -1190,7 +1190,7 @@ void __init __start_xen(unsigned long mb =20 init_cpu_to_node(); =20 - x2apic_setup(); + x2apic_bsp_setup(); =20 init_IRQ(); =20 --- a/xen/arch/x86/smpboot.c +++ b/xen/arch/x86/smpboot.c @@ -195,7 +195,7 @@ void smp_callin(void) * update until we finish. We are free to set up this CPU: first the = APIC. */ Dprintk("CALLIN, before setup_local_APIC().\n"); - x2apic_setup(); + x2apic_ap_setup(); setup_local_APIC(); map_cpu_to_logical_apicid(); =20 --- a/xen/include/asm-x86/apic.h +++ b/xen/include/asm-x86/apic.h @@ -25,7 +25,8 @@ extern int apic_verbosity; extern int x2apic_enabled; extern int directed_eoi_enabled; =20 -void x2apic_setup(void); +void x2apic_bsp_setup(void); +void x2apic_ap_setup(void); const struct genapic *apic_x2apic_probe(void); =20 /* --=__PartFCD0B475.1__= Content-Type: text/plain; name="x86-x2apic-sections.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="x86-x2apic-sections.patch" Signed-off-by: Jan Beulich =0A=0A--- a/xen/arch/x86/ap= ic.c=0A+++ b/xen/arch/x86/apic.c=0A@@ -953,18 +953,17 @@ no_apic:=0A = return -1;=0A }=0A =0A-void x2apic_setup(void)=0A+void x2apic_ap_setup(void= )=0A+{=0A+ if ( x2apic_enabled )=0A+ __enable_x2apic();=0A+}=0A+= =0A+void __init x2apic_bsp_setup(void)=0A {=0A struct IO_APIC_route_ent= ry **ioapic_entries =3D NULL;=0A uint64_t msr_content;=0A =0A- if ( = smp_processor_id() !=3D 0 )=0A- {=0A- if ( x2apic_enabled )=0A- = __enable_x2apic();=0A- return;=0A- }=0A-=0A if ( = !cpu_has_x2apic )=0A return;=0A =0A--- a/xen/arch/x86/genapic/x2api= c.c=0A+++ b/xen/arch/x86/genapic/x2apic.c=0A@@ -27,7 +27,7 @@=0A #include = =0A #include =0A =0A-static = int x2apic_phys; /* By default we use logical cluster mode. */=0A+static = int __initdata x2apic_phys; /* By default we use logical cluster mode. = */=0A boolean_param("x2apic_phys", x2apic_phys);=0A =0A static void = init_apic_ldr_x2apic_phys(void)=0A@@ -134,7 +134,7 @@ static const struct = genapic apic_x2apic_=0A .send_IPI_self =3D send_IPI_self_x2apic=0A = };=0A =0A-const struct genapic *apic_x2apic_probe(void)=0A+const struct = genapic *__init apic_x2apic_probe(void)=0A {=0A return x2apic_phys ? = &apic_x2apic_phys : &apic_x2apic_cluster;=0A }=0A--- a/xen/arch/x86/setup.c= =0A+++ b/xen/arch/x86/setup.c=0A@@ -1190,7 +1190,7 @@ void __init = __start_xen(unsigned long mb=0A =0A init_cpu_to_node();=0A =0A- = x2apic_setup();=0A+ x2apic_bsp_setup();=0A =0A init_IRQ();=0A = =0A--- a/xen/arch/x86/smpboot.c=0A+++ b/xen/arch/x86/smpboot.c=0A@@ -195,7 = +195,7 @@ void smp_callin(void)=0A * update until we finish. We are = free to set up this CPU: first the APIC.=0A */=0A Dprintk("CALLIN,= before setup_local_APIC().\n");=0A- x2apic_setup();=0A+ x2apic_ap_se= tup();=0A setup_local_APIC();=0A map_cpu_to_logical_apicid();=0A = =0A--- a/xen/include/asm-x86/apic.h=0A+++ b/xen/include/asm-x86/apic.h=0A@@= -25,7 +25,8 @@ extern int apic_verbosity;=0A extern int x2apic_enabled;=0A= extern int directed_eoi_enabled;=0A =0A-void x2apic_setup(void);=0A+void = x2apic_bsp_setup(void);=0A+void x2apic_ap_setup(void);=0A const struct = genapic *apic_x2apic_probe(void);=0A =0A /*=0A --=__PartFCD0B475.1__= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --=__PartFCD0B475.1__=--