static void flat_send_IPI_all(int vector) { if (vector == NMI_VECTOR) { flat_send_IPI_mask(cpu_online_mask, vector); } else { __default_send_IPI_shortcut(APIC_DEST_ALLINC, vector, apic->dest_logical); } }
static void send_ipi_interrupt(cpumask_t *mask, int vector) { # if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18) /***********************************************/ /* Theres 'flat' and theres 'cluster'. The */ /* cluster functions handle more than 8 */ /* cpus. The flat does not - since the APIC */ /* only has room for an 8-bit cpu mask. */ /***********************************************/ static void (*send_IPI_mask)(cpumask_t, int); if (send_IPI_mask == NULL) send_IPI_mask = get_proc_addr("cluster_send_IPI_mask"); if (send_IPI_mask == NULL) dtrace_printf("HELP ON send_ipi_interrupt!\n"); else send_IPI_mask(*mask, vector); # elif LINUX_VERSION_CODE == KERNEL_VERSION(2, 6, 28) /***********************************************/ /* Issue with GPL/inlined function. */ /***********************************************/ { void send_IPI_mask_sequence(cpumask_t mask, int vector); static void (*send_IPI_mask_sequence_ptr)(cpumask_t, int); if (send_IPI_mask_sequence_ptr == NULL) send_IPI_mask_sequence_ptr = get_proc_addr("send_IPI_mask_sequence"); send_IPI_mask_sequence_ptr(*mask, vector); } # elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 28) send_IPI_mask(*mask, vector); # else if (x_apic == NULL) { static void (*flat_send_IPI_mask)(cpumask_t *, int); if (flat_send_IPI_mask == NULL) flat_send_IPI_mask = get_proc_addr("flat_send_IPI_mask"); if (flat_send_IPI_mask) { flat_send_IPI_mask(mask, vector); return; } dtrace_linux_panic("x_apic is null - giving up\n"); return; } x_apic->send_IPI_mask(mask, vector); # endif }