From: Yinghai Lu <Yinghai.Lu@Sun.COM>
To: Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
Andi Kleen <ak@suse.de>,
Andrew Morton <akpm@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>
Subject: [PATCH] x86_64: fix section warning about enable_IO_APIC and setup_local_APIC
Date: Sun, 30 Dec 2007 13:30:19 -0800 [thread overview]
Message-ID: <200712301330.19396.yinghai.lu@sun.com> (raw)
In-Reply-To: <20071230145115.GR16946@elte.hu>
[PATCH] x86_64: fix section warning about enable_IO_APIC and setup_local_APIC
clear IO_APIC before enabing apic error vector cause link warning
use function call in setup_local_APIC to avoid that.
Signed-off-by: Yinghai Lu <yinghai.lu@sun.com>
Index: linux-2.6/arch/x86/kernel/smpboot_64.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/smpboot_64.c
+++ linux-2.6/arch/x86/kernel/smpboot_64.c
@@ -211,7 +211,7 @@ void __cpuinit smp_callin(void)
*/
Dprintk("CALLIN, before setup_local_APIC().\n");
- setup_local_APIC();
+ setup_local_APIC(NULL);
/*
* Get our bogomips.
@@ -867,6 +867,8 @@ void __init smp_set_apicids(void)
*/
void __init smp_prepare_cpus(unsigned int max_cpus)
{
+ void (*extra_call)(void) = NULL;
+
nmi_watchdog_default();
current_cpu_data = boot_cpu_data;
current_thread_info()->cpu = 0; /* needed? */
@@ -883,7 +885,10 @@ void __init smp_prepare_cpus(unsigned in
/*
* Switch from PIC to APIC mode.
*/
- setup_local_APIC();
+ if (!skip_ioapic_setup && nr_ioapics)
+ extra_call = enable_IO_APIC;
+
+ setup_local_APIC(extra_call);
if (GET_APIC_ID(apic_read(APIC_ID)) != boot_cpu_id) {
panic("Boot APIC ID in local APIC unexpected (%d vs %d)",
Index: linux-2.6/include/asm-x86/apic_64.h
===================================================================
--- linux-2.6.orig/include/asm-x86/apic_64.h
+++ linux-2.6/include/asm-x86/apic_64.h
@@ -74,7 +74,7 @@ extern int verify_local_APIC (void);
extern void cache_APIC_registers (void);
extern void sync_Arb_IDs (void);
extern void init_bsp_APIC (void);
-extern void setup_local_APIC (void);
+extern void setup_local_APIC (void (*extra_call)(void));
extern void init_apic_mappings (void);
extern void smp_local_timer_interrupt (void);
extern void setup_boot_APIC_clock (void);
Index: linux-2.6/arch/x86/kernel/apic_64.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/apic_64.c
+++ linux-2.6/arch/x86/kernel/apic_64.c
@@ -418,7 +418,7 @@ void __init init_bsp_APIC(void)
apic_write(APIC_LVT1, value);
}
-void __cpuinit setup_local_APIC (void)
+void __cpuinit setup_local_APIC (void (*extra_call)(void))
{
unsigned int value, maxlvt;
int i, j;
@@ -521,9 +521,8 @@ void __cpuinit setup_local_APIC (void)
* Now enable IO-APICs, actually call clear_IO_APIC
* We need clear_IO_APIC before enabling vector on BP
*/
- if (!smp_processor_id())
- if (!skip_ioapic_setup && nr_ioapics)
- enable_IO_APIC();
+ if (extra_call)
+ (*extra_call)();
{
unsigned oldvalue;
@@ -1206,6 +1205,8 @@ int disable_apic;
*/
int __init APIC_init_uniprocessor (void)
{
+ void (*extra_call)(void) = NULL;
+
if (disable_apic) {
printk(KERN_INFO "Apic disabled\n");
return -1;
@@ -1221,7 +1222,10 @@ int __init APIC_init_uniprocessor (void)
phys_cpu_present_map = physid_mask_of_physid(boot_cpu_id);
apic_write(APIC_ID, SET_APIC_ID(boot_cpu_id));
- setup_local_APIC();
+ if (!skip_ioapic_setup && nr_ioapics)
+ extra_call = enable_IO_APIC;
+
+ setup_local_APIC(extra_call);
if (smp_found_config && !skip_ioapic_setup && nr_ioapics)
setup_IO_APIC();
next prev parent reply other threads:[~2007-12-30 21:25 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-30 3:52 [PATCH] x86_64: clear IO_APIC before enabing apic error vector. v2 Yinghai Lu
2007-12-30 14:51 ` Ingo Molnar
2007-12-30 20:48 ` Yinghai Lu
2007-12-30 22:06 ` Adrian Bunk
2007-12-30 22:42 ` Yinghai Lu
2007-12-30 23:23 ` Adrian Bunk
2007-12-31 0:01 ` Yinghai Lu
2007-12-31 0:28 ` Adrian Bunk
2007-12-31 0:56 ` Yinghai Lu
2008-01-01 23:17 ` Adrian Bunk
2007-12-31 1:03 ` Yinghai Lu
2008-01-01 23:18 ` Adrian Bunk
2007-12-30 21:30 ` Yinghai Lu [this message]
2007-12-30 21:29 ` [PATCH] x86_64: fix section warning about enable_IO_APIC and setup_local_APIC Ingo Molnar
2007-12-30 21:53 ` Yinghai Lu
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=200712301330.19396.yinghai.lu@sun.com \
--to=yinghai.lu@sun.com \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
/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