]> xenbits.xensource.com Git - xen.git/commit
x86: eliminate hard-coded NR_IRQS
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 27 May 2009 09:38:51 +0000 (10:38 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 27 May 2009 09:38:51 +0000 (10:38 +0100)
commitcf5e6f2d34413cac233939ab701191655a587ca7
tree5fde2db2a07a672e7b4ca8d5d3c2d38d0d93fe3e
parente3e8ff02c5f467b72078bf9246b2484844c4cadc
x86: eliminate hard-coded NR_IRQS

... splitting it into global nr_irqs (determined at boot time) and
per- domain nr_pirqs (derived from nr_irqs and a possibly command line
specified value, which probably should later become a per-domain
config setting).

This has the (desirable imo) side effect of reducing the size of
struct hvm_irq_dpci from requiring an order-3 page to order-2 (on
x86-64), which nevertheless still is too large.

However, there is now a variable size bit array on the stack in
pt_irq_time_out() - while for the moment this probably is okay, it
certainly doesn't look nice. However, replacing this with a static
(pre-)allocation also seems less than ideal, because that would
require at least min(d->nr_pirqs, NR_VECTORS) bit arrays of
d->nr_pirqs bits, since this bit array is used outside of the
serialized code region in that function, and keeping the domain's
event lock acquired across pirq_guest_eoi() doesn't look like a good
idea either.

The IRQ- and vector-indexed arrays hanging off struct hvm_irq_dpci
could in fact be changed further to dynamically use the smaller of the
two ranges for indexing, since there are other assumptions about a
one-to-one relationship between IRQs and vectors here and elsewhere.

Additionally, it seems to me that struct hvm_mirq_dpci_mapping's
digl_list and gmsi fields could really be overlayed, which would yield
significant savings since this structure gets always instanciated in
form of d->nr_pirqs (as per the above could also be the smaller of
this and NR_VECTORS) dimensioned arrays.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
21 files changed:
xen/arch/x86/apic.c
xen/arch/x86/domain.c
xen/arch/x86/domain_build.c
xen/arch/x86/i8259.c
xen/arch/x86/io_apic.c
xen/arch/x86/irq.c
xen/arch/x86/physdev.c
xen/common/domain.c
xen/common/domctl.c
xen/common/event_channel.c
xen/drivers/passthrough/io.c
xen/drivers/passthrough/pci.c
xen/drivers/passthrough/vtd/x86/vtd.c
xen/include/asm-x86/config.h
xen/include/asm-x86/domain.h
xen/include/asm-x86/io_apic.h
xen/include/asm-x86/irq.h
xen/include/xen/hvm/irq.h
xen/include/xen/iommu.h
xen/include/xen/irq.h
xen/include/xen/sched.h