Skip to contentSkip to conversation

2.6.1-rc1 compile error

DISCUSSION Srihari Vijayaraghavan 3 participants 3 messages Dec 31, 2003 – Jan 1, 2004

lore
Share & tools
lore
#0 lore raw

While "make bzImage", it showed these error messages:
CC arch/x86_64/kernel/io_apic.o
arch/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 here
arch/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 here
arch/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

#1 lore raw

Am Mittwoch, 31. Dezember 2003 15:09 schrieb Srihari Vijayaraghavan:

Quoted 11 lines

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

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;
#2 lore raw
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.c to pci/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