[Patch] - cpu command does not work with systems configured with clustered APIC mode

Keith Owens kaos at sgi.com
Mon Jun 30 21:30:51 PDT 2003


On Tue, 01 Jul 2003 09:41:57 +0530, 
Sachin Sant <sachinp at in.ibm.com> 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);
}




More information about the kdb mailing list