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);
}


Reply via email to