[Xen-devel] Re: [PATCH 3/4] [Net] Support Xen accelerated network plugin modules

Stephen Hemminger
2007-05-21T17:54:45Z

O
> +
> +/*
> + * Macro to call one of the accelerator''s function hooks.  The
use
> + * count for the accelerator''s hooks is incremented for the
duration
> + * of the call to prevent the accelerator being able to modify the
> + * hooks in the middle (by, for example, unloading)
> + */
> +#define netfront_call_accelerator_hook(_np, _hook, _args...)
> \
> +        do {
> \
> +                if ( (_np)->accel_vif_state.hooks ) {
> \
> +                        unsigned flags;
> \
> +                        spin_lock_irqsave(&accelerators_lock, flags);
> \
> +                        ++(_np)->accelerator->hooks_usecount;
> \
> +                        spin_unlock_irqrestore(&accelerators_lock,
> flags); \
> +                        if ( (_np)->accel_vif_state.hooks )
> \
> +                                (_np)->accel_vif_state.hooks->_hook
> (_args); \
> +                        spin_lock_irqsave(&accelerators_lock, flags);
> \
> +                        if ( (--(_np)->accelerator->hooks_usecount)
=> 0 ) \
> +                                accelerator_remove_hooks((_np)-
> >accelerator); \
> +                        spin_unlock_irqrestore(&accelerators_lock,
> flags); \
> +                }
> \
> +        } while(0)


Gag, why a macro... See earlier comments about suing RCU and eliminating
the refcount and locking overhead.

--
Stephen Hemminger <shemminger@linux-foundation.org>