On Tue, 01 Jul 2003 09:41:57 +0530,
Sachin Sant <[EMAIL PROTECTED]> wrote:
> smp_kdb_stop( ) ----> send_IPI_allbutself( ) ----> send_IPI_mask( )
>----> send_IPI_mask_sequence( ). This function sends IPI to other
>cpus but not in the form of NMI . Hence we see the error message "
>Unexpected IRQ vector da "
Looks good. lkcd will have the same problem, it has a similar patch to
smp.c. A kernel with both kdb and lkcd has the version below of
__send_IPI_shortcut() so lkcd will need a similar patch to
send_IPI_mask_sequence().
BTW, I prefer diffs with the -p option and the full path name, e.g.
linux/arch/i386/kernel/smp.c.
static inline void __send_IPI_shortcut(unsigned int shortcut, int vector)
{
/*
* Subtle. In the case of the 'never do double writes' workaround
* we have to lock out interrupts to be safe. As we don't care
* of the value read we use an atomic rmw access to avoid costly
* cli/sti. Otherwise we use an even cheaper single atomic write
* to the APIC.
*/
unsigned int cfg;
/*
* Wait for idle.
*/
apic_wait_icr_idle();
/*
* No need to touch the target chip field
*/
cfg = __prepare_ICR(shortcut, vector);
#ifdef CONFIG_KDB
if (vector == KDB_VECTOR) {
/*
* Setup KDB IPI to be delivered as an NMI
*/
cfg = (cfg&~APIC_VECTOR_MASK)|APIC_DM_NMI;
}
#endif /* CONFIG_KDB */
#if defined(CONFIG_DUMP) || defined(CONFIG_DUMP_MODULE)
if (vector == DUMP_VECTOR) {
/*
* Setup DUMP IPI to be delivered as an NMI
*/
cfg = (cfg&~APIC_VECTOR_MASK)|APIC_DM_NMI;
}
#endif /* CONFIG_DUMP */
/*
* Send the IPI. The write to APIC_ICR fires this off.
*/
apic_write_around(APIC_ICR, cfg);
}