>> I think you should avoid any changes to pci.c. Perhaps create a new
>> ioapic_and_pic_map / ioapic_and_pic_set pair of functions and change
>> pc.c to use that instead of piix_set_irq.
> I'll consider how to do this
>
But pci.c includes below code section, which implements irq_num mapping
through interrupt link, While ioapic_set_irq doesn't
need this modification.
Seems, it's unavoidable to modify pci.c
Thanks,
Anthony
pci_dev->irq_state[irq_num] = level;
for (;;) {
bus = pci_dev->bus;
irq_num = bus->map_irq(pci_dev, irq_num);
if (bus->set_irq)
break;
pci_dev = bus->parent_dev;
Xu, Anthony wrote:
> Marcelo Tosatti wrote:
>> Hi Anthony,
>>
>> On Fri, Jun 13, 2008 at 02:38:08PM +0800, Xu, Anthony wrote:
>>> Hi Avi and all
>>>
>>> This is the revised one,
>>>
>>> All PCI devices send interrupt to both PIC and IOAPIC,
>>> a). When PIC is enabled and IOAPIC is disabled, all redirect
>>> entries in IOAPIC are masked. B) When PIC is disabled and IPAPIC is
>>> enabled, link entry bit7 is set, means this link entry is disable.
>>> Guest OS need to guarantee PIC and IOAPIC are not enabled in the
>>> same time. Otherwise cause many suspicious interrupt to guest.
>>>
>>> Test by running guest linux in kvm/ia32 and kvm/ia64.
>>
>> Interrupt sharing is stable under Linux, PCI hotplug is happy, and
>> Windows is happy. Ship it!
> Thanks, I will
>
>>
>> I had to apply your patch by hand, your mailer eats newlines and
>> other nasty things, please fix that (or send attached patches).
>> Sorry, I'll attach patch.
>
>>
>>>
>>> + Name (PICD, 0)
>>>
>>> - /* PCI Bus definition */
>>> + Method(_PIC, 1)
>>> + {
>>> + Store(Arg0, PICD)
>>> + }
>>> +
>>> + /*PCI Bus definition */
>>
>> Why did you take off the space before the "P" of PCI? Before you ask
>> me, no, I don't have anything better to do :) typo
>
>>
>>> Scope(\_SB) {
>>> Device(PCI0) {
>>> Name (_HID, EisaId ("PNP0A03"))
>>> Name (_ADR, 0x00)
>>> Name (_UID, 1)
>>> - Name(_PRT, Package() {
>>> +
>>> + Method(_PRT,0){
>>> + If(PICD){
>>
>> Put some spaces there too.
> Okay
>
>>
>>> diff --git a/qemu/hw/pci.c b/qemu/hw/pci.c
>>> index a23a466..f96fbb5 100644
>>> --- a/qemu/hw/pci.c
>>> +++ b/qemu/hw/pci.c
>>> @@ -27,6 +27,8 @@
>>> #include "net.h"
>>> #include "pc.h"
>>>
>>> +#include "qemu-kvm.h"
>>> +
>>> //#define DEBUG_PCI
>>>
>>> struct PCIBus {
>>> @@ -534,12 +536,18 @@ static void pci_set_irq(void *opaque, int
>>> irq_num, int level) PCIDevice *pci_dev = (PCIDevice *)opaque;
>>> PCIBus *bus; int change;
>>> -
>>> +#ifdef KVM_CAP_IRQCHIP
>>> + int irq;
>>> +#endif
>>> change = level - pci_dev->irq_state[irq_num];
>>> if (!change)
>>> return;
>>>
>>> pci_dev->irq_state[irq_num] = level;
>>> +#ifdef KVM_CAP_IRQCHIP
>>> + irq = ioapic_map_irq(pci_dev->devfn, irq_num);
>>> + ioapic_set_irq(opaque, irq, change);
>>> +#endif
>>
>> I think you should avoid any changes to pci.c. Perhaps create a new
>> ioapic_and_pic_map / ioapic_and_pic_set pair of functions and change
>> pc.c to use that instead of piix_set_irq.
> I'll consider how to do this
>
>>
>> Other than that (and KVM_CAP_IRQCHIP mentioned by Avi, along with
>> making sure this works with "-no-kvm") looks great. Agree
>
>>
>> Regarding the non-PIIX link devices I mentioned, that can be done
>> later if necessary.
> Agree, if we need to support dynamic irq, or support multiple IOAPIC.
>
>
>
>
> Anthony
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html