From: Christoffer Dall <christoffer.dall@linaro.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Marc Zyngier <marc.zyngier@arm.com>,
Andre Przywara <andre.przywara@arm.com>,
Vijaya Kumar K <Vijaya.Kumar@cavium.com>,
"kvmarm@lists.cs.columbia.edu" <kvmarm@lists.cs.columbia.edu>,
arm-mail-list <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v10 7/8] arm/arm64: vgic: Implement KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO ioctl
Date: Mon, 23 Jan 2017 14:42:05 +0100 [thread overview]
Message-ID: <20170123134205.GE15850@cbox> (raw)
In-Reply-To: <CAFEAcA9Odatt_JUshMXnBiq0DyO7LEN=yCWnjwHPyO8uj2tJNw@mail.gmail.com>
On Mon, Jan 23, 2017 at 11:41:41AM +0000, Peter Maydell wrote:
> On 23 January 2017 at 11:06, Christoffer Dall
> <christoffer.dall@linaro.org> wrote:
> > ok, I think you're right that it can be done this way, but it has the
> > unfortunate consequence of having to change a lot of the implementation.
> >
> > The reason is that we store the latch state in two different variables,
> > depening on whether it's an edge- or level-triggered interrupts.
> >
> > We use the irq->pending field for the computed result (using above
> > calculaiton) for level interrupts based on irq->line_level and
> > irq->soft_pending. soft_pending is the latch state for level interrupts
> > only.
> >
> > For edge triggered interrupts the computed result and the latch state
> > are alway the same (right?) so we we only use the irq->pending field for
> > that.
> >
> > But unless I didn't have enough coffee this morning, this only works if
> > you have a-priori knowledge of which interrupts are level and which are
> > edge. When this is not the case, as in the case of order-free
> > save/restore, then I think the only solution is to rework the logic so
> > that the soft_pending field is used for the latch state for both edge
> > and level interrupts, and the pending field is just the internal
> > computed value.
>
> I *think* you could fudge it by saying "when the config changes
> from edge to level, copy the current irq->pending into irq->soft_pending".
> Then you can always read the latch state (it's soft_pending
> if level, otherwise pending), and writing it is "set both if
> level, just irq->pending if edge". That in turn gives you enough
> information I think to cope with restores of all of (config,
> level, pending-latch) in any order. It feels a bit fragile, though.
Right, thanks for working this out. I agree it's fragile and I cannot
seem to easily convince myself it would be correct, so I sent out a
patch to get rid of the pending cached state which should simplify the
save/restore patches as well.
Assuming the other VGIC suspects don't object to that, I suggest we base
these patches on top of that one and see if we can convince ourselves
that it's correct then.
Thanks,
-Christoffer
WARNING: multiple messages have this Message-ID (diff)
From: christoffer.dall@linaro.org (Christoffer Dall)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v10 7/8] arm/arm64: vgic: Implement KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO ioctl
Date: Mon, 23 Jan 2017 14:42:05 +0100 [thread overview]
Message-ID: <20170123134205.GE15850@cbox> (raw)
In-Reply-To: <CAFEAcA9Odatt_JUshMXnBiq0DyO7LEN=yCWnjwHPyO8uj2tJNw@mail.gmail.com>
On Mon, Jan 23, 2017 at 11:41:41AM +0000, Peter Maydell wrote:
> On 23 January 2017 at 11:06, Christoffer Dall
> <christoffer.dall@linaro.org> wrote:
> > ok, I think you're right that it can be done this way, but it has the
> > unfortunate consequence of having to change a lot of the implementation.
> >
> > The reason is that we store the latch state in two different variables,
> > depening on whether it's an edge- or level-triggered interrupts.
> >
> > We use the irq->pending field for the computed result (using above
> > calculaiton) for level interrupts based on irq->line_level and
> > irq->soft_pending. soft_pending is the latch state for level interrupts
> > only.
> >
> > For edge triggered interrupts the computed result and the latch state
> > are alway the same (right?) so we we only use the irq->pending field for
> > that.
> >
> > But unless I didn't have enough coffee this morning, this only works if
> > you have a-priori knowledge of which interrupts are level and which are
> > edge. When this is not the case, as in the case of order-free
> > save/restore, then I think the only solution is to rework the logic so
> > that the soft_pending field is used for the latch state for both edge
> > and level interrupts, and the pending field is just the internal
> > computed value.
>
> I *think* you could fudge it by saying "when the config changes
> from edge to level, copy the current irq->pending into irq->soft_pending".
> Then you can always read the latch state (it's soft_pending
> if level, otherwise pending), and writing it is "set both if
> level, just irq->pending if edge". That in turn gives you enough
> information I think to cope with restores of all of (config,
> level, pending-latch) in any order. It feels a bit fragile, though.
Right, thanks for working this out. I agree it's fragile and I cannot
seem to easily convince myself it would be correct, so I sent out a
patch to get rid of the pending cached state which should simplify the
save/restore patches as well.
Assuming the other VGIC suspects don't object to that, I suggest we base
these patches on top of that one and see if we can convince ourselves
that it's correct then.
Thanks,
-Christoffer
next prev parent reply other threads:[~2017-01-23 13:42 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-01 7:09 [PATCH v10 0/8] arm/arm64: vgic: Implement API for vGICv3 live migration vijay.kilari
2016-12-01 7:09 ` vijay.kilari at gmail.com
2016-12-01 7:09 ` [PATCH v10 1/8] arm/arm64: vgic: Implement support for userspace access vijay.kilari
2016-12-01 7:09 ` vijay.kilari at gmail.com
2016-12-01 7:09 ` [PATCH v10 2/8] arm/arm64: vgic: Add distributor and redistributor access vijay.kilari
2016-12-01 7:09 ` vijay.kilari at gmail.com
2016-12-01 7:09 ` [PATCH v10 3/8] arm/arm64: vgic: Introduce find_reg_by_id() vijay.kilari
2016-12-01 7:09 ` vijay.kilari at gmail.com
2016-12-01 7:09 ` [PATCH v10 4/8] irqchip/gic-v3: Add missing system register definitions vijay.kilari
2016-12-01 7:09 ` vijay.kilari at gmail.com
2016-12-01 7:09 ` [PATCH v10 5/8] arm/arm64: vgic: Introduce VENG0 and VENG1 fields to vmcr struct vijay.kilari
2016-12-01 7:09 ` vijay.kilari at gmail.com
2016-12-01 7:09 ` [PATCH v10 6/8] arm/arm64: vgic: Implement VGICv3 CPU interface access vijay.kilari
2016-12-01 7:09 ` vijay.kilari at gmail.com
2016-12-16 12:25 ` Auger Eric
2016-12-16 12:25 ` Auger Eric
2016-12-19 9:47 ` Vijay Kilari
2016-12-19 9:47 ` Vijay Kilari
2016-12-19 10:20 ` Auger Eric
2016-12-19 10:20 ` Auger Eric
2017-01-20 19:26 ` Christoffer Dall
2017-01-20 19:26 ` Christoffer Dall
2016-12-19 17:05 ` Auger Eric
2016-12-19 17:05 ` Auger Eric
2017-01-20 19:27 ` Christoffer Dall
2017-01-20 19:27 ` Christoffer Dall
2017-01-20 19:27 ` Christoffer Dall
2017-01-20 19:27 ` Christoffer Dall
2016-12-01 7:09 ` [PATCH v10 7/8] arm/arm64: vgic: Implement KVM_DEV_ARM_VGIC_GRP_LEVEL_INFO ioctl vijay.kilari
2016-12-01 7:09 ` vijay.kilari at gmail.com
2016-12-16 12:07 ` Auger Eric
2016-12-16 12:07 ` Auger Eric
2016-12-16 12:44 ` Peter Maydell
2016-12-16 12:44 ` Peter Maydell
2017-01-20 19:54 ` Christoffer Dall
2017-01-20 19:54 ` Christoffer Dall
2017-01-20 19:53 ` Christoffer Dall
2017-01-20 19:53 ` Christoffer Dall
2017-01-23 10:16 ` Peter Maydell
2017-01-23 10:16 ` Peter Maydell
2017-01-23 11:06 ` Christoffer Dall
2017-01-23 11:06 ` Christoffer Dall
2017-01-23 11:41 ` Peter Maydell
2017-01-23 11:41 ` Peter Maydell
2017-01-23 13:42 ` Christoffer Dall [this message]
2017-01-23 13:42 ` Christoffer Dall
2016-12-01 7:09 ` [PATCH v10 8/8] arm/arm64: Documentation: Update arm-vgic-v3.txt vijay.kilari
2016-12-01 7:09 ` vijay.kilari at gmail.com
2016-12-16 12:18 ` Auger Eric
2016-12-16 12:18 ` Auger Eric
2017-01-20 19:57 ` Christoffer Dall
2017-01-20 19:57 ` Christoffer Dall
2017-01-23 10:52 ` Vijay Kilari
2017-01-23 10:52 ` Vijay Kilari
2017-01-23 11:20 ` Christoffer Dall
2017-01-23 11:20 ` Christoffer Dall
2017-01-23 11:33 ` Vijay Kilari
2017-01-23 11:33 ` Vijay Kilari
2017-01-23 11:43 ` Christoffer Dall
2017-01-23 11:43 ` Christoffer Dall
2017-01-19 2:13 ` [PATCH v10 0/8] arm/arm64: vgic: Implement API for vGICv3 live migration Shannon Zhao
2017-01-19 2:13 ` Shannon Zhao
2017-01-20 13:51 ` Christoffer Dall
2017-01-20 13:51 ` Christoffer Dall
2017-01-20 19:59 ` Christoffer Dall
2017-01-20 19:59 ` Christoffer Dall
2017-01-23 10:24 ` Vijay Kilari
2017-01-23 10:24 ` Vijay Kilari
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=20170123134205.GE15850@cbox \
--to=christoffer.dall@linaro.org \
--cc=Vijaya.Kumar@cavium.com \
--cc=andre.przywara@arm.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=marc.zyngier@arm.com \
--cc=peter.maydell@linaro.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: link
Be 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.