From: "Michael S. Tsirkin" <mst@redhat.com> To: Alex Williamson <alex.williamson@redhat.com> Cc: Alexander Graf <agraf@suse.de>, "Gabriel L. Somlo" <gsomlo@gmail.com>, "kvm@vger.kernel.org" <kvm@vger.kernel.org>, "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>, "eddie.dong@intel.com" <eddie.dong@intel.com>, pbonzini@redhat.com Subject: Re: RFC: ioapic polarity vs. qemu os-x guest Date: Sun, 16 Feb 2014 18:23:11 +0200 [thread overview] Message-ID: <20140216162300.GI30056@redhat.com> (raw) In-Reply-To: <1392562020.15608.437.camel@ul30vt.home> On Sun, Feb 16, 2014 at 07:47:00AM -0700, Alex Williamson wrote: > On Sun, 2014-02-16 at 13:41 +0200, Michael S. Tsirkin wrote: > > On Fri, Feb 14, 2014 at 11:13:04PM +0100, Alexander Graf wrote: > > > > > > On 14.02.2014, at 23:06, Gabriel L. Somlo <gsomlo@gmail.com> wrote: > > > > > > > On Fri, Feb 14, 2014 at 10:21:09PM +0100, Alexander Graf wrote: > > > >> > > > >> Can't you just turn the polarity around in the pci host adapter? > > > > > > > > I tried this: > > > > > > > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > > > > index 1221f32..0e86d21 100644 > > > > --- a/hw/pci/pci.c > > > > +++ b/hw/pci/pci.c > > > > @@ -118,13 +118,13 @@ static int pci_bar(PCIDevice *d, int reg) > > > > > > > > static inline int pci_irq_state(PCIDevice *d, int irq_num) > > > > { > > > > - return (d->irq_state >> irq_num) & 0x1; > > > > + return !(d->irq_state >> irq_num) & 0x1; > > > > } > > > > > > > > static inline void pci_set_irq_state(PCIDevice *d, int irq_num, int level) > > > > { > > > > d->irq_state &= ~(0x1 << irq_num); > > > > - d->irq_state |= level << irq_num; > > > > + d->irq_state &= ~(level << irq_num); > > > > } > > > > > > > > static void pci_change_irq_level(PCIDevice *pci_dev, int irq_num, int change) > > > > @@ -229,7 +229,7 @@ static void pcibus_reset(BusState *qbus) > > > > } > > > > > > > > for (i = 0; i < bus->nirq; i++) { > > > > - assert(bus->irq_count[i] == 0); > > > > + assert(bus->irq_count[i] != 0); > > > > } > > > > } > > > > > > > > --- > > > > > > > > but now OS X freezes during boot right after > > > > > > > > [ PCI configuration begin ] > > > > [ PCI configuration end, bridges 1, devices 10 ] > > > > RTC: Only single RAM bank (128 bytes) > > > > > > > > which all looks normal, except the process is supposed to continue on > > > > from there and doesn't :) > > > > > > > > On Linux, I get Fedora 20 live all the way up with no obvious/loud > > > > complaints, but mouse and keyboard don't work at all... > > > > > > > > I have to admit I'm a bit out of my depth here, though :) > > > > > > Yeah, another thing we have to take into account is vhost-net which generates IRQs directly through irqfd. I guess for those we'll have to configure the polarity in the irq routing table? > > > > > > > > > Alex > > > > What will be affected is VFIO which uses IRQFD > > for level interrupts with KVM_IRQFD_FLAG_RESAMPLE. > > I suspect this will need a kernel change, maybe > > a new flag for IRQFD: KVM_IRQFD_FLAG_ACTIVE_LOW, > > since at the moment that does: > > > > static void > > irqfd_inject(struct work_struct *work) > > { > > struct _irqfd *irqfd = container_of(work, struct _irqfd, inject); > > struct kvm *kvm = irqfd->kvm; > > > > if (!irqfd->resampler) { > > kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID, irqfd->gsi, 1, > > false); > > kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID, irqfd->gsi, 0, > > false); > > } else > > kvm_set_irq(kvm, KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID, > > irqfd->gsi, 1, false); > > } > > > > As you said in a previous message, devices just want assert & de-assert, > 1 & 0, which is what we have here. I would think that what asserted > means only needs to be interpreted at the IOAPIC, so I'd hope we could > get it right w/o an API change. Well there is a bigger issue: any interrupt with multiple sources is broken. __kvm_irq_line_state does a logical OR of all sources, before XOR with polarity. This makes no sense if polarity is active low. One is beginning to think the simplest fix would be Gabriel's patch after all: - irq_level ^= entry.fields.polarity; although it's ugly in that it perpetuates the bug in more places instead of fixing it. > Thanks, > > Alex
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com> To: Alex Williamson <alex.williamson@redhat.com> Cc: "kvm@vger.kernel.org" <kvm@vger.kernel.org>, "eddie.dong@intel.com" <eddie.dong@intel.com>, Alexander Graf <agraf@suse.de>, "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>, "Gabriel L. Somlo" <gsomlo@gmail.com>, pbonzini@redhat.com Subject: Re: [Qemu-devel] RFC: ioapic polarity vs. qemu os-x guest Date: Sun, 16 Feb 2014 18:23:11 +0200 [thread overview] Message-ID: <20140216162300.GI30056@redhat.com> (raw) In-Reply-To: <1392562020.15608.437.camel@ul30vt.home> On Sun, Feb 16, 2014 at 07:47:00AM -0700, Alex Williamson wrote: > On Sun, 2014-02-16 at 13:41 +0200, Michael S. Tsirkin wrote: > > On Fri, Feb 14, 2014 at 11:13:04PM +0100, Alexander Graf wrote: > > > > > > On 14.02.2014, at 23:06, Gabriel L. Somlo <gsomlo@gmail.com> wrote: > > > > > > > On Fri, Feb 14, 2014 at 10:21:09PM +0100, Alexander Graf wrote: > > > >> > > > >> Can't you just turn the polarity around in the pci host adapter? > > > > > > > > I tried this: > > > > > > > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > > > > index 1221f32..0e86d21 100644 > > > > --- a/hw/pci/pci.c > > > > +++ b/hw/pci/pci.c > > > > @@ -118,13 +118,13 @@ static int pci_bar(PCIDevice *d, int reg) > > > > > > > > static inline int pci_irq_state(PCIDevice *d, int irq_num) > > > > { > > > > - return (d->irq_state >> irq_num) & 0x1; > > > > + return !(d->irq_state >> irq_num) & 0x1; > > > > } > > > > > > > > static inline void pci_set_irq_state(PCIDevice *d, int irq_num, int level) > > > > { > > > > d->irq_state &= ~(0x1 << irq_num); > > > > - d->irq_state |= level << irq_num; > > > > + d->irq_state &= ~(level << irq_num); > > > > } > > > > > > > > static void pci_change_irq_level(PCIDevice *pci_dev, int irq_num, int change) > > > > @@ -229,7 +229,7 @@ static void pcibus_reset(BusState *qbus) > > > > } > > > > > > > > for (i = 0; i < bus->nirq; i++) { > > > > - assert(bus->irq_count[i] == 0); > > > > + assert(bus->irq_count[i] != 0); > > > > } > > > > } > > > > > > > > --- > > > > > > > > but now OS X freezes during boot right after > > > > > > > > [ PCI configuration begin ] > > > > [ PCI configuration end, bridges 1, devices 10 ] > > > > RTC: Only single RAM bank (128 bytes) > > > > > > > > which all looks normal, except the process is supposed to continue on > > > > from there and doesn't :) > > > > > > > > On Linux, I get Fedora 20 live all the way up with no obvious/loud > > > > complaints, but mouse and keyboard don't work at all... > > > > > > > > I have to admit I'm a bit out of my depth here, though :) > > > > > > Yeah, another thing we have to take into account is vhost-net which generates IRQs directly through irqfd. I guess for those we'll have to configure the polarity in the irq routing table? > > > > > > > > > Alex > > > > What will be affected is VFIO which uses IRQFD > > for level interrupts with KVM_IRQFD_FLAG_RESAMPLE. > > I suspect this will need a kernel change, maybe > > a new flag for IRQFD: KVM_IRQFD_FLAG_ACTIVE_LOW, > > since at the moment that does: > > > > static void > > irqfd_inject(struct work_struct *work) > > { > > struct _irqfd *irqfd = container_of(work, struct _irqfd, inject); > > struct kvm *kvm = irqfd->kvm; > > > > if (!irqfd->resampler) { > > kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID, irqfd->gsi, 1, > > false); > > kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID, irqfd->gsi, 0, > > false); > > } else > > kvm_set_irq(kvm, KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID, > > irqfd->gsi, 1, false); > > } > > > > As you said in a previous message, devices just want assert & de-assert, > 1 & 0, which is what we have here. I would think that what asserted > means only needs to be interpreted at the IOAPIC, so I'd hope we could > get it right w/o an API change. Well there is a bigger issue: any interrupt with multiple sources is broken. __kvm_irq_line_state does a logical OR of all sources, before XOR with polarity. This makes no sense if polarity is active low. One is beginning to think the simplest fix would be Gabriel's patch after all: - irq_level ^= entry.fields.polarity; although it's ugly in that it perpetuates the bug in more places instead of fixing it. > Thanks, > > Alex
next prev parent reply other threads:[~2014-02-16 16:18 UTC|newest] Thread overview: 155+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-01-08 20:02 [Qemu-devel] [PATCH] Add option to disable FDC from ISA bus and ACPI on i386 Gabriel L. Somlo 2014-01-08 20:38 ` Michael S. Tsirkin 2014-01-08 21:09 ` Gabriel L. Somlo 2014-01-15 11:13 ` Paolo Bonzini 2014-01-08 22:13 ` Paolo Bonzini 2014-01-08 23:39 ` Gabriel L. Somlo 2014-01-09 0:12 ` Alexander Graf 2014-01-09 1:51 ` Michael S. Tsirkin 2014-01-09 18:51 ` Gabriel L. Somlo 2014-01-09 20:12 ` Paolo Bonzini 2014-01-09 21:33 ` Michael S. Tsirkin 2014-01-09 21:58 ` Gabriel L. Somlo 2014-01-09 21:44 ` Gabriel L. Somlo 2014-01-10 12:37 ` Paolo Bonzini 2014-01-10 15:35 ` Gabriel L. Somlo 2014-01-10 16:13 ` Igor Mammedov 2014-01-17 21:10 ` [Qemu-devel] RFC: ACPI, HPET._CRS, MacOSX vs. WinXP Gabriel L. Somlo 2014-01-20 11:58 ` Michael S. Tsirkin 2014-01-20 11:57 ` Paolo Bonzini 2014-01-20 12:08 ` Michael S. Tsirkin 2014-01-20 12:16 ` Paolo Bonzini 2014-01-20 18:54 ` Gabriel L. Somlo 2014-01-20 20:31 ` Michael S. Tsirkin 2014-01-20 21:25 ` Gabriel L. Somlo 2014-01-21 10:33 ` Paolo Bonzini 2014-01-21 11:02 ` Michael S. Tsirkin 2014-01-21 11:05 ` Paolo Bonzini 2014-01-21 11:44 ` Michael S. Tsirkin 2014-01-21 18:11 ` [Qemu-devel] [PATCH] ACPI: Add IRQ resource to HPET._CRS on Mac OS X Gabriel L. Somlo 2014-01-21 18:38 ` Michael S. Tsirkin 2014-01-24 16:46 ` Gabriel L. Somlo 2014-01-24 21:18 ` Alexander Graf 2014-01-25 0:09 ` Gabriel L. Somlo 2014-01-25 9:08 ` Alexander Graf 2014-01-27 22:51 ` Gabriel L. Somlo 2014-01-27 23:51 ` Alexander Graf 2014-01-28 16:45 ` [Qemu-devel] OSX guest support review Gabriel L. Somlo 2014-01-28 16:57 ` Michael S. Tsirkin 2014-01-29 14:17 ` Alexander Graf 2014-01-29 21:36 ` [Qemu-devel] OSX guest vs. kvm ioapic polarity Gabriel L. Somlo 2014-01-29 22:18 ` Michael S. Tsirkin 2014-01-30 14:18 ` Gabriel L. Somlo 2014-01-30 19:48 ` Michael S. Tsirkin 2014-01-30 20:21 ` Gabriel L. Somlo 2014-01-30 20:28 ` Michael S. Tsirkin 2014-01-30 20:33 ` Michael S. Tsirkin 2014-01-30 20:44 ` Gabriel L. Somlo 2014-02-11 18:23 ` RFC: ioapic polarity vs. qemu os-x guest Gabriel L. Somlo 2014-02-11 18:23 ` [Qemu-devel] " Gabriel L. Somlo 2014-02-11 19:54 ` Michael S. Tsirkin 2014-02-11 19:54 ` [Qemu-devel] " Michael S. Tsirkin 2014-02-11 21:35 ` Gabriel L. Somlo 2014-02-11 21:35 ` [Qemu-devel] " Gabriel L. Somlo 2014-02-14 21:13 ` Gabriel L. Somlo 2014-02-14 21:13 ` [Qemu-devel] " Gabriel L. Somlo 2014-02-14 21:21 ` Alexander Graf 2014-02-14 21:21 ` [Qemu-devel] " Alexander Graf 2014-02-14 22:06 ` Gabriel L. Somlo 2014-02-14 22:06 ` [Qemu-devel] " Gabriel L. Somlo 2014-02-14 22:13 ` Alexander Graf 2014-02-14 22:13 ` [Qemu-devel] " Alexander Graf 2014-02-16 11:18 ` Michael S. Tsirkin 2014-02-16 11:18 ` [Qemu-devel] " Michael S. Tsirkin 2014-02-16 11:41 ` Michael S. Tsirkin 2014-02-16 11:41 ` [Qemu-devel] " Michael S. Tsirkin 2014-02-16 14:47 ` Alex Williamson 2014-02-16 14:47 ` [Qemu-devel] " Alex Williamson 2014-02-16 16:23 ` Michael S. Tsirkin [this message] 2014-02-16 16:23 ` Michael S. Tsirkin 2014-02-17 17:57 ` Gabriel L. Somlo 2014-02-17 17:57 ` [Qemu-devel] " Gabriel L. Somlo 2014-02-17 18:01 ` Gabriel L. Somlo 2014-02-17 18:01 ` [Qemu-devel] " Gabriel L. Somlo 2014-02-17 18:06 ` Paolo Bonzini 2014-02-17 18:06 ` [Qemu-devel] " Paolo Bonzini 2014-02-17 19:38 ` Gabriel L. Somlo 2014-02-17 19:38 ` [Qemu-devel] " Gabriel L. Somlo 2014-02-18 0:58 ` Gabriel L. Somlo 2014-02-18 0:58 ` [Qemu-devel] " Gabriel L. Somlo 2014-02-27 17:05 ` [PATCH RFC] kvm: ignore apic polarity Michael S. Tsirkin 2014-02-27 17:05 ` [Qemu-devel] " Michael S. Tsirkin 2014-02-27 21:41 ` Gabriel L. Somlo 2014-02-27 21:41 ` [Qemu-devel] " Gabriel L. Somlo 2014-02-27 22:30 ` Paolo Bonzini 2014-02-27 22:30 ` [Qemu-devel] " Paolo Bonzini 2014-02-27 23:13 ` Gabriel L. Somlo 2014-02-27 23:13 ` [Qemu-devel] " Gabriel L. Somlo 2014-02-27 23:31 ` Paolo Bonzini 2014-02-27 23:31 ` [Qemu-devel] " Paolo Bonzini 2014-02-28 4:06 ` [RFC PATCH v2] kvm: x86: ignore ioapic polarity Gabriel L. Somlo 2014-02-28 4:06 ` [Qemu-devel] " Gabriel L. Somlo 2014-02-28 17:23 ` [Qemu-devel] [RFC PATCH] qemu: " Gabriel L. Somlo 2014-02-28 18:57 ` [Qemu-devel] [RFC PATCH v2] " Gabriel L. Somlo 2014-02-28 19:14 ` [Qemu-devel] [PATCH] qemu: x86: report lapic version as 0x14 instead of 0x11 Gabriel L. Somlo 2014-03-01 3:44 ` Alexander Graf 2014-03-01 4:25 ` Gabriel L. Somlo 2014-03-01 5:45 ` Alexander Graf 2014-03-01 14:46 ` Paolo Bonzini 2014-03-02 0:17 ` Gabriel L. Somlo 2014-03-02 8:56 ` Paolo Bonzini 2014-03-02 14:31 ` Michael S. Tsirkin 2014-03-02 16:02 ` Michael S. Tsirkin 2014-03-06 7:50 ` Michael S. Tsirkin 2014-03-02 14:52 ` [Qemu-devel] [RFC PATCH v2] qemu: x86: ignore ioapic polarity Michael S. Tsirkin 2014-03-02 16:15 ` Gabriel L. Somlo 2014-03-02 17:09 ` Michael S. Tsirkin 2014-03-06 7:45 ` Michael S. Tsirkin 2014-03-02 14:55 ` [RFC PATCH v2] kvm: " Michael S. Tsirkin 2014-03-02 14:55 ` [Qemu-devel] " Michael S. Tsirkin 2014-03-13 10:53 ` Paolo Bonzini 2014-03-13 10:53 ` [Qemu-devel] " Paolo Bonzini 2014-03-13 13:43 ` Gabriel L. Somlo 2014-03-13 13:43 ` [Qemu-devel] " Gabriel L. Somlo 2014-02-28 4:55 ` [PATCH RFC] kvm: ignore apic polarity Michael S. Tsirkin 2014-02-28 4:55 ` [Qemu-devel] " Michael S. Tsirkin 2014-02-28 8:10 ` Paolo Bonzini 2014-02-28 8:10 ` [Qemu-devel] " Paolo Bonzini 2014-02-28 8:11 ` Paolo Bonzini 2014-02-28 8:11 ` [Qemu-devel] " Paolo Bonzini 2014-03-01 5:03 ` Alex Williamson 2014-03-01 5:03 ` [Qemu-devel] " Alex Williamson 2014-02-16 11:34 ` RFC: ioapic polarity vs. qemu os-x guest Michael S. Tsirkin 2014-02-16 11:34 ` [Qemu-devel] " Michael S. Tsirkin 2014-02-16 15:12 ` Peter Maydell 2014-02-16 11:37 ` Michael S. Tsirkin 2014-02-16 11:37 ` [Qemu-devel] " Michael S. Tsirkin 2014-01-29 23:13 ` [Qemu-devel] OSX guest vs. kvm ioapic polarity Alexander Graf 2014-01-30 15:56 ` Gabriel L. Somlo 2014-01-28 20:40 ` [Qemu-devel] osx bootloader Gabriel L. Somlo 2014-01-28 22:51 ` BALATON Zoltan 2014-01-29 3:07 ` Gabriel L. Somlo 2014-01-29 11:29 ` BALATON Zoltan 2014-01-29 14:53 ` Gabriel L. Somlo 2014-01-29 15:00 ` Alexander Graf 2014-01-30 0:15 ` BALATON Zoltan 2014-02-01 17:43 ` BALATON Zoltan 2014-02-01 0:38 ` BALATON Zoltan 2014-02-01 10:07 ` Alexander Graf 2014-02-01 14:35 ` [Qemu-devel] OVMF with q35 (was: osx bootloader) BALATON Zoltan 2014-02-01 15:13 ` Alexander Graf 2014-02-01 17:38 ` BALATON Zoltan 2014-02-03 7:47 ` Gerd Hoffmann 2014-02-01 21:19 ` [Qemu-devel] osx bootloader Paolo Bonzini 2014-02-02 2:18 ` BALATON Zoltan 2014-01-29 12:10 ` BALATON Zoltan 2014-01-29 14:20 ` Alexander Graf 2014-01-21 11:38 ` [Qemu-devel] RFC: ACPI, HPET._CRS, MacOSX vs. WinXP Michael S. Tsirkin 2014-01-20 20:23 ` Michael S. Tsirkin 2014-01-20 12:03 ` Igor Mammedov 2014-01-09 8:46 ` [Qemu-devel] [PATCH] Add option to disable FDC from ISA bus and ACPI on i386 Markus Armbruster 2014-01-09 10:24 ` Paolo Bonzini 2014-01-31 19:03 ` [Qemu-devel] [RFC PATCH v2] Add option to switch off FDC Gabriel L. Somlo 2014-01-31 19:39 ` Eric Blake 2014-02-02 13:47 ` Michael S. Tsirkin 2014-02-10 14:10 ` Marcel Apfelbaum
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20140216162300.GI30056@redhat.com \ --to=mst@redhat.com \ --cc=agraf@suse.de \ --cc=alex.williamson@redhat.com \ --cc=eddie.dong@intel.com \ --cc=gsomlo@gmail.com \ --cc=kvm@vger.kernel.org \ --cc=pbonzini@redhat.com \ --cc=qemu-devel@nongnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.