From: eric.auger@linaro.org (Eric Auger) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 00/10] arm/arm64: KVM: Active interrupt state switching for shared devices Date: Wed, 10 Jun 2015 13:13:37 +0200 [thread overview] Message-ID: <55781BE1.9010006@linaro.org> (raw) In-Reply-To: <5577FD76.7080100@arm.com> Hi Marc, On 06/10/2015 11:03 AM, Marc Zyngier wrote: > Hi Eric, > > On 10/06/15 09:33, Eric Auger wrote: >> Hi Marc, >> On 06/08/2015 07:03 PM, Marc Zyngier wrote: >>> From day 1, our timer code has been using a terrible hack: whenever >>> the guest is scheduled with a timer interrupt pending (i.e. the HW >>> timer has expired), we restore the timer state with the MASK bit set, >>> in order to avoid the physical interrupt to fire again. And again. And >>> again... >>> >>> This is absolutely silly, for at least two reasons: >>> >>> - This relies on the device (the timer) having a mask bit that we can >>> play with. Not all devices are built like this. >>> >>> - This expects some behaviour of the guest that only works because the >>> both the kernel timer code and the KVM counterpart have been written >>> by the same idiot (the idiot being me). >>> >>> The One True Way is to set the GIC active bit when injecting the >>> interrupt, and to context-switch across the world switch. This is what >>> this series implements. >>> >>> We introduce a relatively simple infrastructure enabling the mapping >>> of a virtual interrupt with its physical counterpart: >>> >>> - Whenever an virtual interrupt is injected, we look it up in an >>> rbtree. If we have a match, the interrupt is injected with the HW >>> bit set in the LR, together with the physical interrupt. >>> >>> - Across the world switch, we save/restore the active state for these >>> interrupts using the irqchip_state API. >>> >>> - On guest EOI, the HW interrupt is automagically deactivated by the >>> GIC, allowing the interrupt to be resampled. >> >> I am lost about the status of the irqchip part, allowing EOImode=1 and >> only dropping the prio for physical forwarded IRQs: >> http://lkml.iu.edu/hypermail/linux/kernel/1410.3/00913.html >> Doesn't this series also depend on those patches or did I miss something >> on the ML? > > No, these patches are self-contained. As long as we only deal with > shared devices, we don't need EOImode=1, as as we save/restore the > active state, and the only irqchip change required (the state accessors) > went in with the 4.1 merge window. > > The EOImode=1 stuff is still on the cards, and this series contains the > basic infrastructure for that (the last patch in the series is there > only for that purpose). > > Hope this helps, OK thanks. I am currently rebasing my kvm-vfio series on yours. I will let you know the outcome. Best Regards Eric > > M. >
WARNING: multiple messages have this Message-ID (diff)
From: Eric Auger <eric.auger@linaro.org> To: Marc Zyngier <marc.zyngier@arm.com>, "kvm@vger.kernel.org" <kvm@vger.kernel.org>, "kvmarm@lists.cs.columbia.edu" <kvmarm@lists.cs.columbia.edu>, "linux-arm-kernel@lists.infradead.org" <linux-arm-kernel@lists.infradead.org> Cc: "Christoffer Dall" <christoffer.dall@linaro.org>, "Alex Bennée" <alex.bennee@linaro.org>, "Andre Przywara" <Andre.Przywara@arm.com> Subject: Re: [PATCH 00/10] arm/arm64: KVM: Active interrupt state switching for shared devices Date: Wed, 10 Jun 2015 13:13:37 +0200 [thread overview] Message-ID: <55781BE1.9010006@linaro.org> (raw) In-Reply-To: <5577FD76.7080100@arm.com> Hi Marc, On 06/10/2015 11:03 AM, Marc Zyngier wrote: > Hi Eric, > > On 10/06/15 09:33, Eric Auger wrote: >> Hi Marc, >> On 06/08/2015 07:03 PM, Marc Zyngier wrote: >>> From day 1, our timer code has been using a terrible hack: whenever >>> the guest is scheduled with a timer interrupt pending (i.e. the HW >>> timer has expired), we restore the timer state with the MASK bit set, >>> in order to avoid the physical interrupt to fire again. And again. And >>> again... >>> >>> This is absolutely silly, for at least two reasons: >>> >>> - This relies on the device (the timer) having a mask bit that we can >>> play with. Not all devices are built like this. >>> >>> - This expects some behaviour of the guest that only works because the >>> both the kernel timer code and the KVM counterpart have been written >>> by the same idiot (the idiot being me). >>> >>> The One True Way is to set the GIC active bit when injecting the >>> interrupt, and to context-switch across the world switch. This is what >>> this series implements. >>> >>> We introduce a relatively simple infrastructure enabling the mapping >>> of a virtual interrupt with its physical counterpart: >>> >>> - Whenever an virtual interrupt is injected, we look it up in an >>> rbtree. If we have a match, the interrupt is injected with the HW >>> bit set in the LR, together with the physical interrupt. >>> >>> - Across the world switch, we save/restore the active state for these >>> interrupts using the irqchip_state API. >>> >>> - On guest EOI, the HW interrupt is automagically deactivated by the >>> GIC, allowing the interrupt to be resampled. >> >> I am lost about the status of the irqchip part, allowing EOImode=1 and >> only dropping the prio for physical forwarded IRQs: >> http://lkml.iu.edu/hypermail/linux/kernel/1410.3/00913.html >> Doesn't this series also depend on those patches or did I miss something >> on the ML? > > No, these patches are self-contained. As long as we only deal with > shared devices, we don't need EOImode=1, as as we save/restore the > active state, and the only irqchip change required (the state accessors) > went in with the 4.1 merge window. > > The EOImode=1 stuff is still on the cards, and this series contains the > basic infrastructure for that (the last patch in the series is there > only for that purpose). > > Hope this helps, OK thanks. I am currently rebasing my kvm-vfio series on yours. I will let you know the outcome. Best Regards Eric > > M. >
next prev parent reply other threads:[~2015-06-10 11:13 UTC|newest] Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-06-08 17:03 [PATCH 00/10] arm/arm64: KVM: Active interrupt state switching for shared devices Marc Zyngier 2015-06-08 17:03 ` Marc Zyngier 2015-06-08 17:03 ` [PATCH 01/10] arm/arm64: KVM: Fix ordering of timer/GIC on guest entry Marc Zyngier 2015-06-08 17:03 ` Marc Zyngier 2015-06-09 11:29 ` Alex Bennée 2015-06-09 11:29 ` Alex Bennée 2015-06-30 20:19 ` Christoffer Dall 2015-06-30 20:19 ` Christoffer Dall 2015-06-08 17:03 ` [PATCH 02/10] arm/arm64: KVM: Move vgic handling to a non-preemptible section Marc Zyngier 2015-06-08 17:03 ` Marc Zyngier 2015-06-09 11:38 ` Alex Bennée 2015-06-09 11:38 ` Alex Bennée 2015-06-30 20:19 ` Christoffer Dall 2015-06-30 20:19 ` Christoffer Dall 2015-06-08 17:03 ` [PATCH 03/10] KVM: arm/arm64: vgic: Convert struct vgic_lr to use bitfields Marc Zyngier 2015-06-08 17:03 ` Marc Zyngier 2015-06-09 13:12 ` Alex Bennée 2015-06-09 13:12 ` Alex Bennée 2015-06-10 17:23 ` Andre Przywara 2015-06-10 17:23 ` Andre Przywara 2015-06-10 18:04 ` Marc Zyngier 2015-06-10 18:04 ` Marc Zyngier 2015-06-08 17:03 ` [PATCH 04/10] KVM: arm/arm64: vgic: Allow HW irq to be encoded in LR Marc Zyngier 2015-06-08 17:03 ` Marc Zyngier 2015-06-09 13:21 ` Alex Bennée 2015-06-09 13:21 ` Alex Bennée 2015-06-09 14:03 ` Marc Zyngier 2015-06-09 14:03 ` Marc Zyngier 2015-06-17 11:53 ` Eric Auger 2015-06-17 11:53 ` Eric Auger 2015-06-17 12:39 ` Marc Zyngier 2015-06-17 12:39 ` Marc Zyngier 2015-06-17 13:21 ` Peter Maydell 2015-06-17 13:21 ` Peter Maydell 2015-06-17 13:34 ` Marc Zyngier 2015-06-17 13:34 ` Marc Zyngier 2015-06-08 17:04 ` [PATCH 05/10] KVM: arm/arm64: vgic: Relax vgic_can_sample_irq for edge IRQs Marc Zyngier 2015-06-08 17:04 ` Marc Zyngier 2015-06-30 20:19 ` Christoffer Dall 2015-06-30 20:19 ` Christoffer Dall 2015-07-01 9:17 ` Marc Zyngier 2015-07-01 9:17 ` Marc Zyngier 2015-07-01 11:58 ` Christoffer Dall 2015-07-01 11:58 ` Christoffer Dall 2015-07-01 18:18 ` Marc Zyngier 2015-07-01 18:18 ` Marc Zyngier 2015-07-02 16:23 ` Christoffer Dall 2015-07-02 16:23 ` Christoffer Dall 2015-07-03 9:50 ` Marc Zyngier 2015-07-03 9:50 ` Marc Zyngier 2015-07-03 9:57 ` Peter Maydell 2015-07-03 9:57 ` Peter Maydell 2015-06-08 17:04 ` [PATCH 06/10] KVM: arm/arm64: vgic: Allow dynamic mapping of physical/virtual interrupts Marc Zyngier 2015-06-08 17:04 ` Marc Zyngier 2015-06-11 8:43 ` Andre Przywara 2015-06-11 8:43 ` Andre Przywara 2015-06-11 8:56 ` Marc Zyngier 2015-06-11 8:56 ` Marc Zyngier 2015-06-15 15:44 ` Eric Auger 2015-06-15 15:44 ` Eric Auger 2015-06-16 8:28 ` Marc Zyngier 2015-06-16 8:28 ` Marc Zyngier 2015-06-16 9:10 ` Eric Auger 2015-06-16 9:10 ` Eric Auger 2015-06-30 20:19 ` Christoffer Dall 2015-06-30 20:19 ` Christoffer Dall 2015-07-01 10:20 ` Marc Zyngier 2015-07-01 10:20 ` Marc Zyngier 2015-07-01 11:45 ` Christoffer Dall 2015-07-01 11:45 ` Christoffer Dall 2015-06-08 17:04 ` [PATCH 07/10] KVM: arm/arm64: vgic: Allow HW interrupts to be queued to a guest Marc Zyngier 2015-06-08 17:04 ` Marc Zyngier 2015-06-11 8:44 ` Andre Przywara 2015-06-11 8:44 ` Andre Przywara 2015-06-11 9:15 ` Marc Zyngier 2015-06-11 9:15 ` Marc Zyngier 2015-06-11 9:44 ` Andre Przywara 2015-06-11 9:44 ` Andre Przywara 2015-06-11 10:02 ` Marc Zyngier 2015-06-11 10:02 ` Marc Zyngier 2015-06-15 16:11 ` Eric Auger 2015-06-15 16:11 ` Eric Auger 2015-06-17 11:51 ` Eric Auger 2015-06-17 11:51 ` Eric Auger 2015-06-17 12:23 ` Marc Zyngier 2015-06-17 12:23 ` Marc Zyngier 2015-06-08 17:04 ` [PATCH 08/10] KVM: arm/arm64: vgic: Add vgic_{get, set}_phys_irq_active Marc Zyngier 2015-06-08 17:04 ` [PATCH 08/10] KVM: arm/arm64: vgic: Add vgic_{get,set}_phys_irq_active Marc Zyngier 2015-06-17 15:11 ` [PATCH 08/10] KVM: arm/arm64: vgic: Add vgic_{get, set}_phys_irq_active Eric Auger 2015-06-17 15:11 ` [PATCH 08/10] KVM: arm/arm64: vgic: Add vgic_{get,set}_phys_irq_active Eric Auger 2015-06-08 17:04 ` [PATCH 09/10] KVM: arm/arm64: timer: Allow the timer to control the active state Marc Zyngier 2015-06-08 17:04 ` Marc Zyngier 2015-06-08 17:04 ` [PATCH 10/10] KVM: arm/arm64: vgic: Allow non-shared device HW interrupts Marc Zyngier 2015-06-08 17:04 ` Marc Zyngier 2015-06-17 15:11 ` Eric Auger 2015-06-17 15:11 ` Eric Auger 2015-06-17 15:37 ` Marc Zyngier 2015-06-17 15:37 ` Marc Zyngier 2015-06-17 15:50 ` Eric Auger 2015-06-17 15:50 ` Eric Auger 2015-06-18 8:37 ` Marc Zyngier 2015-06-18 8:37 ` Marc Zyngier 2015-06-18 17:51 ` Eric Auger 2015-06-18 17:51 ` Eric Auger 2015-06-30 20:19 ` Christoffer Dall 2015-06-30 20:19 ` Christoffer Dall 2015-07-01 8:26 ` Marc Zyngier 2015-07-01 8:26 ` Marc Zyngier 2015-07-01 8:57 ` Christoffer Dall 2015-07-01 8:57 ` Christoffer Dall 2015-06-10 8:33 ` [PATCH 00/10] arm/arm64: KVM: Active interrupt state switching for shared devices Eric Auger 2015-06-10 8:33 ` Eric Auger 2015-06-10 9:03 ` Marc Zyngier 2015-06-10 9:03 ` Marc Zyngier 2015-06-10 11:13 ` Eric Auger [this message] 2015-06-10 11:13 ` Eric Auger 2015-06-18 6:51 ` Eric Auger 2015-06-18 6:51 ` Eric Auger
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=55781BE1.9010006@linaro.org \ --to=eric.auger@linaro.org \ --cc=linux-arm-kernel@lists.infradead.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.