Re: [PATCH 4/8] x86: add support for remotely triggering the block softirq

Ingo Molnar
2008-02-07T10:08:23Z

* Jens Axboe <jens.axboe@oracle.com> wrote:

> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
> ---
> arch/x86/kernel/smp_32.c | 15 +++++++++++++++
> arch/x86/kernel/smpboot_32.c | 3 +++
> include/asm-x86/hw_irq_32.h | 1 +
> include/asm-x86/mach-default/entry_arch.h | 1 +
> include/asm-x86/mach-default/irq_vectors.h | 1 +
> 5 files changed, 21 insertions(+), 0 deletions(-)
>
> diff --git a/arch/x86/kernel/smp_32.c b/arch/x86/kernel/smp_32.c
> index dc0cde9..668b8a4 100644
> --- a/arch/x86/kernel/smp_32.c
> +++ b/arch/x86/kernel/smp_32.c
> @@ -672,6 +672,21 @@ void smp_call_function_interrupt(struct pt_regs *regs)
> }
> }
>
> +fastcall void smp_raise_block_softirq(struct pt_regs *regs)

small detail: there's no fastcall used in arch/x86 anymore.

> +{
> + unsigned long flags;
> +
> + ack_APIC_irq();
> + local_irq_save(flags);
> + raise_softirq_irqoff(BLOCK_SOFTIRQ);
> + local_irq_restore(flags);
> +}

if then this should be a general facility to trigger any softirq - not
just the block one.

> #define CALL_FUNCTION_VECTOR 0xfb
> +#define BLOCK_SOFTIRQ_VECTOR 0xfa

this wastes another irq vector and is very special-purpose. Why not make
the smp_call_function() one more scalable instead?

on the more conceptual level, shouldnt we just move to threads instead
of softirqs? That way you can become affine to any CPU and can do
cross-CPU wakeups anytime - which will be nice and fast via the
smp_reschedule_interrupt() facility.

Ingo