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 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.