i386/5788: bogus softints on i386/mp

Previous thread: Votre Standard Interactif Vocal à partir de 39€. Réservez votre numéro tout de suite ! by St on Tuesday, April 8, 2008 - 5:20 am. (1 message)

Next thread: Re: kernel/5777: kernel hang by RD Thrush on Wednesday, April 9, 2008 - 2:55 am. (5 messages)
To: <gnats@...>
Date: Tuesday, April 8, 2008 - 10:08 am

softints are generated in hardware on mp machines
and thus also recording those in ipending for an
emulated processing produces both emulated treatment
on another cpu doing an interrupt and current cpu

Index: machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/machdep.c,v
retrieving revision 1.419
diff -u -r1.419 machdep.c
--- machdep.c 17 Mar 2008 23:17:22 -0000 1.419
+++ machdep.c 8 Apr 2008 13:59:41 -0000
@@ -4231,10 +4231,11 @@
void
softintr(int sir, int vec)
{
- __asm __volatile("orl %1, %0" : "=m" (ipending) : "ir" (sir));
#ifdef MULTIPROCESSOR
i82489_writereg(LAPIC_ICRLO,
vec | LAPIC_DLMODE_FIXED | LAPIC_LVL_ASSERT | LAPIC_DEST_SELF);
+#else
+ __asm __volatile("orl %1, %0" : "=m" (ipending) : "ir" (sir));
#endif
}

Index: apicvec.s
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/apicvec.s,v
retrieving revision 1.10
diff -u -r1.10 apicvec.s
--- apicvec.s 25 May 2007 15:55:26 -0000 1.10
+++ apicvec.s 8 Apr 2008 14:00:10 -0000
@@ -77,8 +77,6 @@
ioapic_asm_ack()

movl $IPL_SOFTAST, %eax
- orl $(1 << SIR_AST), _C_LABEL(ipending)
-
orl $(LAPIC_DLMODE_FIXED|LAPIC_LVL_ASSERT|LAPIC_DEST_SELF), %eax
movl %eax, _C_LABEL(local_apic) + LAPIC_ICRLO

@@ -189,7 +187,6 @@
MAKE_FRAME
pushl CPL
movl $IPL_SOFTCLOCK,CPL
- andl $~(1<<SIR_CLOCK),_C_LABEL(ipending)
ioapic_asm_ack()
sti
#ifdef MULTIPROCESSOR
@@ -215,7 +212,6 @@
MAKE_FRAME
pushl CPL
movl $IPL_SOFTNET,CPL
- andl $~(1<<SIR_NET),_C_LABEL(ipending)
ioapic_asm_ack()
sti
#ifdef MULTIPROCESSOR
@@ -237,7 +233,6 @@
MAKE_FRAME
pushl CPL
movl $IPL_SOFTTTY,CPL
- andl $~(1<<SIR_TTY),_C_LABEL(ipending)
ioapic_asm_ack()
sti
#ifdef MULTIPROCESSOR
@@ -256,7 +251,6 @@
MAKE_FRAME
pushl CPL
movl $IPL_SOFTAST,CPL
- andl $~(1<<SIR_AST),_C_LABEL(ipending)
ioapic_asm_ack()
sti

Previous thread: Votre Standard Interactif Vocal à partir de 39€. Réservez votre numéro tout de suite ! by St on Tuesday, April 8, 2008 - 5:20 am. (1 message)

Next thread: Re: kernel/5777: kernel hang by RD Thrush on Wednesday, April 9, 2008 - 2:55 am. (5 messages)