[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