Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 3230
b: refs/heads/master
c: 67664c8
h: refs/heads/master
v: v3
  • Loading branch information
Ashok Raj authored and Linus Torvalds committed Jun 25, 2005
1 parent ec18be7 commit 7cb0fa9
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f370513640492641b4046bfd9a6e4714f6ae530d
refs/heads/master: 67664c8f7e74def5adf66298a1245d82af72db2c
27 changes: 27 additions & 0 deletions trunk/arch/i386/mach-default/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@
#include <asm/acpi.h>
#include <asm/arch_hooks.h>

#ifdef CONFIG_HOTPLUG_CPU
#define DEFAULT_SEND_IPI (1)
#else
#define DEFAULT_SEND_IPI (0)
#endif

int no_broadcast=DEFAULT_SEND_IPI;

/**
* pre_intr_init_hook - initialisation prior to setting up interrupt vectors
*
Expand Down Expand Up @@ -104,3 +112,22 @@ void __init mca_nmi_hook(void)
printk("NMI generated from unknown source!\n");
}
#endif

static __init int no_ipi_broadcast(char *str)
{
get_option(&str, &no_broadcast);
printk ("Using %s mode\n", no_broadcast ? "No IPI Broadcast" :
"IPI Broadcast");
return 1;
}

__setup("no_ipi_broadcast", no_ipi_broadcast);

static int __init print_ipi_mode(void)
{
printk ("Using IPI %s mode\n", no_broadcast ? "No-Shortcut" :
"Shortcut");
return 0;
}

late_initcall(print_ipi_mode);
27 changes: 25 additions & 2 deletions trunk/include/asm-i386/mach-default/mach_ipi.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,34 @@
void send_IPI_mask_bitmask(cpumask_t mask, int vector);
void __send_IPI_shortcut(unsigned int shortcut, int vector);

extern int no_broadcast;

static inline void send_IPI_mask(cpumask_t mask, int vector)
{
send_IPI_mask_bitmask(mask, vector);
}

static inline void __local_send_IPI_allbutself(int vector)
{
if (no_broadcast) {
cpumask_t mask = cpu_online_map;
int this_cpu = get_cpu();

cpu_clear(this_cpu, mask);
send_IPI_mask(mask, vector);
put_cpu();
} else
__send_IPI_shortcut(APIC_DEST_ALLBUT, vector);
}

static inline void __local_send_IPI_all(int vector)
{
if (no_broadcast)
send_IPI_mask(cpu_online_map, vector);
else
__send_IPI_shortcut(APIC_DEST_ALLINC, vector);
}

static inline void send_IPI_allbutself(int vector)
{
/*
Expand All @@ -18,13 +41,13 @@ static inline void send_IPI_allbutself(int vector)
if (!(num_online_cpus() > 1))
return;

__send_IPI_shortcut(APIC_DEST_ALLBUT, vector);
__local_send_IPI_allbutself(vector);
return;
}

static inline void send_IPI_all(int vector)
{
__send_IPI_shortcut(APIC_DEST_ALLINC, vector);
__local_send_IPI_all(vector);
}

#endif /* __ASM_MACH_IPI_H */

0 comments on commit 7cb0fa9

Please sign in to comment.