PERFORCE change 38540 for review

Peter Wemm peter at FreeBSD.org
Wed Sep 24 14:47:22 PDT 2003


http://perforce.freebsd.org/chv.cgi?CH=38540

Change 38540 by peter at peter_daintree on 2003/09/24 14:46:33

	integrate -I from jhb_acpipci

Affected files ...

.. //depot/projects/hammer/sys/amd64/amd64/io_apic.c#5 integrate
.. //depot/projects/hammer/sys/jhb_notes#3 integrate

Differences ...

==== //depot/projects/hammer/sys/amd64/amd64/io_apic.c#5 (text+ko) ====

@@ -634,13 +634,14 @@
 		ioapic_write(apic, IOAPIC_REDTBL_LO(i), flags);
 
 		/*
-		 * Route interrupts to all CPU's by default using physical
+		 * Route interrupts to the BSP by default using physical
 		 * addressing.  Vectored interrupts get readdressed using
-		 * logical IDs when they are enabled.
+		 * logical IDs to CPU clusters when they are enabled.
 		 */
 		flags = ioapic_read(apic, IOAPIC_REDTBL_HI(i));
 		flags &= ~IOART_DEST;
-		flags |= IOART_DEST;
+		KASSERT(PCPU_GET(apic_id) == lapic_id(), ("APIC ID mismatch"));	/* XXXTEST */
+		flags |= PCPU_GET(apic_id) << APIC_ID_SHIFT;
 		ioapic_write(apic, IOAPIC_REDTBL_HI(i), flags);
 		mtx_unlock_spin(&icu_lock);
 		if (pin->io_vector >= 0) {
@@ -718,13 +719,18 @@
 mixedpic_disable_source(struct intsrc *isrc)
 {
 	struct mixedpic_intsrc *mpsrc;
+#if 0
 	struct intsrc *intpin;
+#endif
 
 	mpsrc = (struct mixedpic_intsrc *)isrc;
+#if 0
 	intpin = mpsrc->mp_apicpin;
+#endif
 	isrc = mpsrc->mp_atpicsrc;
 	isrc->is_pic->pic_disable_source(isrc);
 
+#if 0
 	/*
 	 * If the interrupt is pending in the local APIC, assume that
 	 * we have been called just before the local APIC gets its
@@ -732,19 +738,26 @@
 	 */
 	if (intpin->is_pic->pic_source_pending(intpin))
 		isrc->is_pic->pic_eoi_source(isrc);
+#endif
 }
 
 static void
 mixedpic_eoi_source(struct intsrc *isrc)
 {
 	struct mixedpic_intsrc *mpsrc;
+#if 0
 	struct intsrc *intpin;
+#endif
 
 	mpsrc = (struct mixedpic_intsrc *)isrc;
+#if 0
 	intpin = mpsrc->mp_apicpin;
+#endif
 	isrc = mpsrc->mp_atpicsrc;
 	isrc->is_pic->pic_eoi_source(isrc);
+#if 0
 	intpin->is_pic->pic_eoi_source(intpin);
+#endif
 }
 
 static void
@@ -753,7 +766,7 @@
 	struct mixedpic_intsrc *mpsrc;
 
 	mpsrc = (struct mixedpic_intsrc *)isrc;
-	isrc = mpsrc->mp_apicpin;
+	isrc = mpsrc->mp_atpicsrc;
 	isrc->is_pic->pic_enable_intr(isrc);
 }
 

==== //depot/projects/hammer/sys/jhb_notes#3 (text+ko) ====

@@ -27,8 +27,14 @@
 - isa/vector.s
 
 Todo:
+- Set PCPU(apic_id) for UP case in lapic_init().
+- Use apic id of BSP (current CPU) when programming temporary physical
+  destinations into I/O APIC RDT entries.
 - Fix IDT_SYSCALL mapping in APIC case
 - Test mixed mode
+  - Dang, mixed mode interrupts don't actually set the bit in the ISR. *grump*
+  - Need to write mixed mode interrupt entry points and use those in
+    mixed mode enable_intr()
 - Kill isa_irq_pending()  (maybe, is this an MI function?)
 - Add ACPI MADT APIC enumerator.
   - solve ACPI module problem where madt wants APIC symbols :(
@@ -53,4 +59,4 @@
 
 Unrelated to this branch:
 - Work on cleaning up nested includes in sys/* headers.  According to Bruce,
-  the only nested sys/* headers should be _*.h and queue.h.+  the only nested sys/* headers should be _*.h and queue.h.


More information about the p4-projects mailing list