2.6.1-rc1 compile error
While "make bzImage", it showed these error messages:
CC arch/x86_64/kernel/io_apic.oarch/x86_64/kernel/io_apic.c:1215: error: redefinition of `disable_edge_ioapic_irq'include/asm/io_apic.h:178: error: `disable_edge_ioapic_irq' previously defined herearch/x86_64/kernel/io_apic.c:1259: error: redefinition of `end_edge_ioapic_irq'include/asm/io_apic.h:180: error: `end_edge_ioapic_irq' previously defined herearch/x86_64/kernel/io_apic.c:1346: error: redefinition of `mask_and_ack_level_ioapic_irq'include/asm/io_apic.h:179: error: `mask_and_ack_level_ioapic_irq' previously defined here
make[1]: *** [arch/x86_64/kernel/io_apic.o] Error 1
make: *** [arch/x86_64/kernel] Error 2
I applied this patch (I do not know, it could be wrong):
--- 2.6.1-rc1/arch/x86_64/kernel/io_apic.c.orig 2004-01-01 00:56:40.534040872 +1100
+++ 2.6.1-rc1/arch/x86_64/kernel/io_apic.c 2004-01-01 00:57:46.491013888
+1100
@@ -1212,7 +1212,6 @@
*/
#define enable_edge_ioapic_irq unmask_IO_APIC_irq
-static void disable_edge_ioapic_irq (unsigned int irq) { /* nothing */ }
/*
* Starting up a edge-triggered IO-APIC interrupt is
@@ -1256,7 +1255,6 @@
ack_APIC_irq();
}
-static void end_edge_ioapic_irq (unsigned int i) { /* nothing */ }
/*
@@ -1343,7 +1341,6 @@
}
}
-static void mask_and_ack_level_ioapic_irq (unsigned int irq) { /* nothing */ }
static void set_ioapic_affinity (unsigned int irq, cpumask_t mask) {
Then it compiled the io_apic.c and progressed (maybe a lot). But it failed and showed this error message:
LD .tmp_vmlinux1
arch/i386/pci/built-in.o(.text+0xc6e): In function `pcibios_lookup_irq':
: undefined reference to `can_request_irq'
make: *** [.tmp_vmlinux1] Error 1
Please feel free to send me patches, I am happy to test and report. BTW I see the same behaviour with 2.6.1-rc1-mm1 too.
Thanks
Hari
[email protected]
PS: I am hoping for a good 2.6.1 (out of the box) for x86-64
Am Mittwoch, 31. Dezember 2003 15:09 schrieb Srihari Vijayaraghavan:
Quoted 11 lines
Then it compiled the
io_apic.cand progressed (maybe a lot). But it failed and showed this error message:
LD .tmp_vmlinux1arch/i386/pci/built-in.o(.text+0xc6e): In function `pcibios_lookup_irq':
: undefined reference to `can_request_irq'make: *** [.tmp_vmlinux1] Error 1
This is obviously due to can_request_irq is found in arch/i386/kernel/irq.c and the x86_64 build just includes some stuff from arch/i386/pci/irq.c where can_request_irq is used too.
Linus introduced this function a few weeks ago. I used the patch below to move the function from kernel/irq.c to pci/irq.c, but he will probably fix it himself soon.
Btw. there are a lot of other fixes for the x86_64 build from Andi Kleen which you should apply too. However, they don't apply cleanly anymore.
...Juergen
i386/kernel/irq.c renamed from i386/kernel/irq.c.orig +0 -13
@@ -511,19 +511,6 @@return 1 ; } -int can_request_irq (unsigned int irq,unsigned long irqflags) -{ -struct irqaction *action; - -if (irq >=NR_IRQS ) -return 0 ; - action = irq_desc[irq].action; -if (action) { -if (irqflags & action->flags &SA_SHIRQ ) - action =NULL ; - } -return !action; -}/** * request_irq - allocate an interrupt line
i386/pci/irq.c renamed from i386/pci/irq.c.orig +14 -0
@@ -939,6 +939,20 @@ pirq_penalty[irq] +=100 ; } +int can_request_irq (unsigned int irq,unsigned long irqflags) +{ +struct irqaction *action; + +if (irq >=NR_IRQS ) +return 0 ; + action = irq_desc[irq].action; +if (action) { +if (irqflags & action->flags &SA_SHIRQ ) + action =NULL ; + } +return !action; +} +int pirq_enable_irq (struct pci_dev *dev) {u8 pin;
Quoted 4 lines · Juergen Hasch
Linus introduced this function a few weeks ago. I used the patch below to move the function from
kernel/irq.ctopci/irq.c, but he will probably fix it himself soon.
I'd much rather have x86-64 have their own version. I would prefer to keep the irq knowledge in the irq layer. Eventually that irq layer will get unified, but for now I do _not_ want some random PCI file to know about irq handler internal data structures.
Linus