From: Avi Kivity <avi@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Rusty Russell <rusty.russell@linaro.org>,
Christoffer Dall <c.dall@virtualopensystems.com>,
Alexander Graf <agraf@suse.de>,
kvmarm@lists.cs.columbia.edu, kvm-devel <kvm@vger.kernel.org>,
Marcelo Tosatti <mtosatti@redhat.com>
Subject: Re: [RFC 1/5] KVM: Move KVM_SET_ONE_REG/KVM_GET_ONE_REG to generic code.
Date: Sat, 01 Sep 2012 03:44:13 -0700 [thread overview]
Message-ID: <5041E6FD.3030404@redhat.com> (raw)
In-Reply-To: <CAFEAcA-h8XmTbGc7vrwqMJv-Khoae8mkFpLtAtay_bOUuxn9Mw@mail.gmail.com>
On 09/01/2012 03:18 AM, Peter Maydell wrote:
> On 1 September 2012 10:11, Avi Kivity <avi@redhat.com> wrote:
> > Other x86 state:
> > Control registers: ok. Should userspace be careful to set registers
> > in legal ways only? i.e. cannot set cr3[0:11] if cr4.pae=0, or vice
> > versa, so need three writes?
>
> The principle I'm hoping we can hold to for ARM is that the
> kernel only exposes state in such a way that it's always
> possible for userspace to migrate it with a simple "read
> everything, send to destination, write everything", ie
> without needing to know anything of the semantics of any
> of these registers.
>
> This means that registers which have access controls (eg
> "can't write this unless you wrote to that other one first")
> should not enforce those checks for userspace get/set.
> More significantly, it means that registers with odd
> behaviour, like "write 1 to clear" or "register A selects
> which of an array of underlying registers is exposed
> in register B" are not directly exposed at all. Instead
> the kernel provides some other (ersatz) register indexes
> which let userspace do plain get/set on the underlying
> state.
I came to the same conclusion. It could be implemented via a
KVM_REQ_REEVALUATE, which causes all registers to be validated and
applied before guest entry.
> The idea is that then migration depends only on whether
> the destination kernel supports all the registers the
> source kernel does, and we avoid extra dependencies
> on the source and destination qemu. (Most of the state
> being transferred is of no interest to userspace at all.)
> [It also makes write-multiple easier to use.]
We also need to support migration to an earlier kernel. That means new
state is not transferred (of course this state must not be exposed to
the guest). There is also the hack with subsections: if we discover new
hidden state, then qemu can avoid transferring it to an older kernel,
provided the value matches the default (which should be often, otherwise
the bug would have been discovered much earlier).
--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.
next prev parent reply other threads:[~2012-09-01 10:45 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-28 23:37 [RFC 0/5] Making KVM_GET_ONE_REG/KVM_SET_ONE_REG generic Rusty Russell
2012-08-28 23:45 ` [RFC 1/5] KVM: Move KVM_SET_ONE_REG/KVM_GET_ONE_REG to generic code Rusty Russell
2012-09-01 9:11 ` Avi Kivity
2012-09-01 10:18 ` Peter Maydell
2012-09-01 10:44 ` Avi Kivity [this message]
2012-08-28 23:46 ` [RFC 2/5] KVM: ARM: use KVM_SET_ONE_REG/KVM_GET_ONE_REG Rusty Russell
2012-08-29 15:10 ` Christoffer Dall
2012-08-28 23:47 ` [RFC 3/5] KVM: Add KVM_VCPU_GET_REG_LIST Rusty Russell
2012-08-29 15:13 ` Christoffer Dall
2012-08-28 23:47 ` [RFC 4/5] KVM: ARM: Use KVM_VCPU_GET_REG_LIST Rusty Russell
2012-08-29 15:14 ` Christoffer Dall
2012-08-28 23:48 ` [RFC 5/5] KVM: ARM: Access all registers via KVM_GET_ONE_REG/KVM_SET_ONE_REG Rusty Russell
2012-08-29 15:29 ` Christoffer Dall
2012-09-01 9:14 ` Avi Kivity
2012-08-29 15:36 ` Peter Maydell
2012-08-29 18:21 ` Rusty Russell
2012-09-01 9:16 ` Avi Kivity
2012-09-01 10:25 ` Peter Maydell
2012-09-01 19:40 ` Christoffer Dall
2012-09-04 13:09 ` Peter Maydell
2012-09-04 14:29 ` Christoffer Dall
2012-09-05 6:37 ` Rusty Russell
2012-08-29 18:16 ` Rusty Russell
2012-08-29 16:30 ` [RFC 0/5] Making KVM_GET_ONE_REG/KVM_SET_ONE_REG generic Peter Maydell
2012-08-29 18:39 ` Rusty Russell
2012-09-01 9:21 ` Avi Kivity
2012-09-01 12:35 ` Rusty Russell
2012-09-03 9:20 ` Avi Kivity
2012-09-03 12:33 ` Rusty Russell
2012-09-03 12:49 ` Peter Maydell
2012-09-04 11:48 ` Avi Kivity
2012-09-04 13:59 ` Alexander Graf
2012-09-06 14:44 ` Avi Kivity
2012-09-05 6:43 ` Rusty Russell
2012-09-01 12:28 ` Rusty Russell
2012-09-01 12:37 ` Rusty Russell
2012-09-04 13:31 ` Peter Maydell
2012-09-05 3:15 ` Alexander Graf
2012-09-05 6:48 ` Rusty Russell
2012-09-05 8:52 ` Peter Maydell
2012-09-06 1:44 ` Rusty Russell
2012-09-06 7:37 ` Peter Maydell
2012-09-06 14:48 ` Avi Kivity
2012-09-06 15:08 ` Alexander Graf
2012-09-06 15:16 ` Avi Kivity
2012-09-06 15:23 ` Peter Maydell
2012-09-06 15:35 ` Avi Kivity
2012-09-06 23:00 ` Rusty Russell
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=5041E6FD.3030404@redhat.com \
--to=avi@redhat.com \
--cc=agraf@suse.de \
--cc=c.dall@virtualopensystems.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=mtosatti@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=rusty.russell@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).