* [Qemu-devel] Re: [PATCH] irq assignment
[not found] <51CFAB8CB6883745AE7B93B3E084EBE201D2C53B@pdsmsx412.ccr.corp.intel.com>
@ 2008-06-25 11:53 ` Avi Kivity
0 siblings, 0 replies; only message in thread
From: Avi Kivity @ 2008-06-25 11:53 UTC (permalink / raw)
To: Xu, Anthony; +Cc: kvm-ia64, qemu-devel, kvm
(copying qemu-devel)
Xu, Anthony wrote:
> Subject: [PATCH] Irq assignment
>
> 1. use bimodal _PRT
> 2. pci device can use irq > 15, reduce interrupt sharing
> 3. test by running linux guest in kvm-ia64, kvm-i32(w/ wo/ -no-kvm)
>
>
> +
> +static int ioapic_irq_count[IOAPIC_NUM_PINS];
> +
> void ioapic_set_irq(void *opaque, int vector, int level)
> {
> IOAPICState *s = opaque;
> -
> + if( vector >= 16 ){
> + if( level )
> + ioapic_irq_count[vector] += 1;
> + else
> + ioapic_irq_count[vector] -= 1;
> + level = (ioapic_irq_count[vector] != 0);
> + }
> +#ifdef KVM_CAP_IRQCHIP
> + if (kvm_enabled())
> + if (kvm_set_irq(vector, ioapic_irq_count[vector] == 0))
> + return;
> +#endif
>
It's legal to call ioapic_set_irq(vector, 1) twice, which will screw up
the level calculation.
We need qemu_irq_or(), similar to qemu_irq_invert():
qemu_irq qemu_irq_or(qemu_irq irqs[], int nr);
Also, this is not the place for doing the or. The ioapic does not know
which interrupts are level connected and which are not. This belongs on
the pci level (or the mainboard level).
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-06-25 11:53 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <51CFAB8CB6883745AE7B93B3E084EBE201D2C53B@pdsmsx412.ccr.corp.intel.com>
2008-06-25 11:53 ` [Qemu-devel] Re: [PATCH] irq assignment Avi Kivity
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).