[PATCH 11/15] ia64/pv_ops: paravirtualize NR_IRQS

Isaku Yamahata yamahata at valinux.co.jp
Tue Apr 22 03:11:13 PDT 2008


On Tue, Apr 22, 2008 at 05:08:22AM -0400, Jes Sorensen wrote:
> 
> > Make NR_IRQ overridable by each pv instances.
> > Pv instance may need each own number of irqs so that
> > NR_IRQS should be the maximum number of nr_irqs each
> > pv instances need.
> 
> This really looks dodgy.
> 
> +#ifdef CONFIG_PARAVIRT
> +
> +/* Determine the maximal NR_IRQ which each pv instances require.
> + * i.e. NR_IRQS = max(IA64_NATIVE_NR_IRQS, XEN_NR_IRQS, ...)
> + */
> +
> +#define NR_IRQS 1
> +
> +#if IA64_NATIVE_NR_IRQS > NR_IRQS
> +#undef NR_IRQS
> +#define NR_IRQS IA64_NATIVE_NR_IRQS
> +#endif
> +
> +#ifdef CONFIG_XEN
> +#include <asm/xen/irq.h>
> +#if XEN_NR_IRQS > NR_IRQS
> +#undef NR_IRQS
> +#define NR_IRQS XEN_NR_IRQS
> +#endif
> +#endif /* CONFIG_XEN */
> 
> I don't see why Xen needs special casing here, it really makes the
> code gross. Please use one typedef for this, like PARAVIRT_NR_IRQS or
> something like that, so we don't end up with a KVM special case, an
> LGUEST special case and a Xen special case.

I'm willing to introduce something like PARAVIRT_NR_IRQS,
but I don't see how PARAVIRT_NR_IRQS solves the issues.
What I want here is to define by cpp
#define PARAVIRT_NR_IRQS                                                \
        max(                                                            \
                IA64_NATIVE_NR_IRQS,                                    \
                XEN_NR_IRQS,            /* only if CONFIG_XEN */        \
                LGUSET_NR_IRQS,         /* only if CONFIG_LGUSET */     \
                KVM_GUEST_NR_IRQS,      /* only if CONFIG_KVM_GUEST */  \
                MORE_FUTURE_VM_NR_IRQS, /* only if ...*/                \
                ....    \
        )

Probably I'm missing something.
Could you suggest more concretly? Hopefully (pseudo) code snippet.

-- 
yamahata


More information about the Virtualization mailing list