From: Aaron Lindsay <alindsay@codeaurora.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Wei Huang <wei@redhat.com>,
Michael Spradling <mspradli@codeaurora.org>,
Digant Desai <digantd@codeaurora.org>,
Peter Crosthwaite <crosthwaite.peter@gmail.com>,
QEMU Developers <qemu-devel@nongnu.org>,
Alistair Francis <alistair.francis@xilinx.com>,
qemu-arm <qemu-arm@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH v4 03/21] target/arm: Reorganize PMCCNTR accesses
Date: Fri, 22 Jun 2018 16:36:04 -0400 [thread overview]
Message-ID: <20180622203604.GE12424@codeaurora.org> (raw)
In-Reply-To: <CAFEAcA_EEXRQQjXDsei0Y6mQB6EVTtJB5=EFHFsT7kbZk5iv6Q@mail.gmail.com>
On Jun 22 15:08, Peter Maydell wrote:
> On 22 June 2018 at 14:50, Aaron Lindsay <alindsay@codeaurora.org> wrote:
> > On Apr 20 11:17, Peter Maydell wrote:
> >> On 17 April 2018 at 21:37, Aaron Lindsay <alindsay@codeaurora.org> wrote:
> >> > pmccntr_read and pmccntr_write contained duplicate code that was already
> >> > being handled by pmccntr_sync. Consolidate the duplicated code into two
> >> > functions: pmccntr_op_start and pmccntr_op_finish. Add a companion to
> >> > c15_ccnt in CPUARMState so that we can simultaneously save both the
> >> > architectural register value and the last underlying cycle count - this
> >> > ensure time isn't lost and will also allow us to access the 'old'
> >> > architectural register value in order to detect overflows in later
> >> > patches.
> >> >
> >> > Signed-off-by: Aaron Lindsay <alindsay@codeaurora.org>
>
> >> > - /* If the counter is enabled, this stores the last time the counter
> >> > - * was reset. Otherwise it stores the counter value
> >> > + /* Stores the architectural value of the counter *the last time it was
> >> > + * updated* by pmccntr_op_start. Accesses should always be surrounded
> >> > + * by pmccntr_op_start/pmccntr_op_finish to guarantee the latest
> >> > + * architecturally-corect value is being read/set.
> >> > */
> >> > uint64_t c15_ccnt;
> >> > + /* Stores the delta between the architectural value and the underlying
> >> > + * cycle count during normal operation. It is used to update c15_ccnt
> >> > + * to be the correct architectural value before accesses. During
> >> > + * accesses, c15_ccnt_delta contains the underlying count being used
> >> > + * for the access, after which it reverts to the delta value in
> >> > + * pmccntr_op_finish.
> >> > + */
> >> > + uint64_t c15_ccnt_delta;
> >>
> >> So the key question here is: how does this work for VM migration?
> >
> > To be honest, I'm not sure I fully understand the things I need to be
> > looking out for with VM migration.
> >
> > My guess, though, is that this current implementation is not sufficient.
> > Perhaps there needs to be logic to ensure that c15_ccnt is the current
> > architectural value before migration and also to setup c15_ccnt_delta to
> > be the delta between that architectural value and the underlying cycle
> > count upon inbound migration. Does that sound like an approach which
> > would fit well within the rest of the migration framework?
>
> You need to deal with two different situations:
> (1) migration from an older QEMU which doesn't have this patchset
> (2) migration from a QEMU with this patchset to one with this patchset
>
> Either:
> (a) all the architectural state can be expressed in our existing
> state fields in whatever the previous format was -- in this case
> you just need to ensure that cpu_pre_save() and cpu_post_load()
> put the state there and unpack it again
> (b) we were missing some architectural state and really do need
> to transfer more over the wire than we were before -- in this case
> you need to add a new subsection to the vmstate which has the fields
> that contain that new state, and give the subsection a suitable 'needed'
> function to indicate when the subsection should be transferred plus
> pre_load and post_load functions that allow us to cope correctly with
> the case of the older QEMU that doesn't send the subsection.
Okay, thanks! I didn't manage to get to this before v5, but look into it
more for v6.
-Aaron
--
Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.
next prev parent reply other threads:[~2018-06-22 20:43 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-17 20:37 [Qemu-arm] [PATCH v4 00/21] More fully implement ARM PMUv3 Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 01/21] target/arm: Check PMCNTEN for whether PMCCNTR is enabled Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 02/21] target/arm: Treat PMCCNTR as alias of PMCCNTR_EL0 Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 03/21] target/arm: Reorganize PMCCNTR accesses Aaron Lindsay
2018-04-20 10:17 ` [Qemu-devel] " Peter Maydell
2018-06-22 13:50 ` [Qemu-arm] " Aaron Lindsay
2018-06-22 14:08 ` Peter Maydell
2018-06-22 20:36 ` Aaron Lindsay [this message]
2018-04-20 10:41 ` Peter Maydell
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 04/21] target/arm: Mask PMU register writes based on PMCR_EL0.N Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 05/21] target/arm: Fetch GICv3 state directly from CPUARMState Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 06/21] target/arm: Support multiple EL change hooks Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 07/21] target/arm: Add pre-EL " Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 08/21] target/arm: Allow EL change hooks to do IO Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 09/21] target/arm: Fix bitmask for PMCCFILTR writes Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 10/21] target/arm: Filter cycle counter based on PMCCFILTR_EL0 Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 11/21] target/arm: Allow AArch32 access for PMCCFILTR Aaron Lindsay
2018-04-17 20:37 ` [Qemu-devel] [PATCH v4 12/21] target/arm: Make PMOVSCLR and PMUSERENR 64 bits wide Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 13/21] target/arm: Add ARM_FEATURE_V7VE for v7 Virtualization Extensions Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 14/21] target/arm: Implement PMOVSSET Aaron Lindsay
2018-04-17 20:37 ` [Qemu-arm] [PATCH v4 15/21] target/arm: Add array for supported PMU events, generate PMCEID[01] Aaron Lindsay
2018-04-17 20:38 ` [Qemu-arm] [PATCH v4 16/21] target/arm: Finish implementation of PM[X]EVCNTR and PM[X]EVTYPER Aaron Lindsay
2018-04-17 20:38 ` [Qemu-arm] [PATCH v4 17/21] target/arm: PMU: Add instruction and cycle events Aaron Lindsay
2018-04-17 20:38 ` [Qemu-arm] [PATCH v4 18/21] target/arm: PMU: Set PMCR.N to 4 Aaron Lindsay
2018-04-17 20:38 ` [Qemu-arm] [PATCH v4 19/21] target/arm: Implement PMSWINC Aaron Lindsay
2018-04-17 20:38 ` [Qemu-arm] [PATCH v4 20/21] target/arm: Mark PMINTENSET accesses as possibly doing IO Aaron Lindsay
2018-04-17 20:38 ` [Qemu-arm] [PATCH v4 21/21] target/arm: Send interrupts on PMU counter overflow Aaron Lindsay
2018-04-18 14:31 ` Aaron Lindsay
2018-04-20 10:55 ` [Qemu-devel] [PATCH v4 00/21] More fully implement ARM PMUv3 Peter Maydell
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=20180622203604.GE12424@codeaurora.org \
--to=alindsay@codeaurora.org \
--cc=alistair.francis@xilinx.com \
--cc=crosthwaite.peter@gmail.com \
--cc=digantd@codeaurora.org \
--cc=mspradli@codeaurora.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=wei@redhat.com \
/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.