kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Scott Wood <scottwood@freescale.com>
To: Alexander Graf <agraf@suse.de>
Cc: <kvm-ppc@vger.kernel.org>, kvm list <kvm@vger.kernel.org>,
	Avi Kivity <avi@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>
Subject: Re: [PATCH 07/50] KVM: PPC: Add generic single register ioctls
Date: Wed, 4 Jan 2012 14:08:41 -0600	[thread overview]
Message-ID: <4F04B1C9.6000907@freescale.com> (raw)
In-Reply-To: <1325639448-9494-8-git-send-email-agraf@suse.de>

On 01/03/2012 07:10 PM, Alexander Graf wrote:
> Right now we transfer a static struct every time we want to get or set
> registers. Unfortunately, over time we realize that there are more of
> these than we thought of before and the extensibility and flexibility of
> transferring a full struct every time is limited.
> 
> So this is a new approach to the problem. With these new ioctls, we can
> get and set a single register that is identified by an ID. This allows for
> very precise and limited transmittal of data. When we later realize that
> it's a better idea to shove over multiple registers at once, we can reuse
> most of the infrastructure and simply implement a GET_MANY_REGS / SET_MANY_REGS
> interface.

If we end up replacing get/set sregs with this (either totally or just
for new registers), we should consider a runtime facility for userspace
to extract from the kernel a list of supported registers (with sizes)
that are supported, so that userspace doesn't have to know about every
register in order to migrate (this could also be useful if there is
non-architecturally-readable state that needs to be preserved, such as a
pending book3e doorbell exception, or the MCAR to be set when machine
checks are unmasked).  It could also avoid the need for explicit
capabilities in some situations when new registers are added (like
KVM_CAP_PPC_HIOR).

> The only downpoint I see to this one is that it needs to pad to 1024 bits
> (hardware is already on 512 bit registers, so I wanted to leave some room)
> which is slightly too much for transmitting only 64 bits. But if that's all
> the tradeoff we have to do for getting an extensible interface, I'd say go
> for it nevertheless.

Does it really make sense to consider these large things as single
registers (even if that's how hw documents it)?  Do they need to be set
atomically?  How do you get/set them in hardware if GPRs aren't that large?

> +4.65 KVM_SET_ONE_REG
> +
> +Capability: KVM_CAP_ONE_REG
> +Architectures: all
> +Type: vcpu ioctl
> +Parameters: struct kvm_one_reg (in)
> +Returns: 0 on success, negative value on failure
> +
> +struct kvm_one_reg {
> +       __u64 id;
> +       union {
> +               __u8 reg8;
> +               __u16 reg16;
> +               __u32 reg32;
> +               __u64 reg64;
> +               __u8 reg128[16];
> +               __u8 reg256[32];
> +               __u8 reg512[64];
> +               __u8 reg1024[128];
> +       } u;
> +};

Do we need reg8/16/32, or can we simplify (and reduce potential size
mismatch errors) by using __u64 for everything that doesn't need to be
an array?

> +/* Available with KVM_CAP_ONE_REG */
> +
> +#define KVM_ONE_REG_GENERIC		0x0000000000000000ULL

Generic registers?  Is the idea to use this in place of dedicated ioctls
for certain KVM knobs?

> +/*
> + * Architecture specific registers are to be defined in arch headers and
> + * ORed with the arch identifier.
> + */
> +#define KVM_ONE_REG_PPC			0x1000000000000000ULL
> +#define KVM_ONE_REG_X86			0x2000000000000000ULL
> +#define KVM_ONE_REG_IA64		0x3000000000000000ULL
> +#define KVM_ONE_REG_ARM			0x4000000000000000ULL
> +#define KVM_ONE_REG_S390		0x5000000000000000ULL

Might want to allow space for more than 16 architectures -- there's room
to spare.

-Scott

  reply	other threads:[~2012-01-04 20:08 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-04  1:09 [PULL 00/50] ppc patch queue 2012-01-04 Alexander Graf
2012-01-04  1:09 ` [PATCH 01/50] KVM: PPC: e500: don't translate gfn to pfn with preemption disabled Alexander Graf
2012-01-04  1:10 ` [PATCH 02/50] KVM: PPC: e500: Eliminate preempt_disable in local_sid_destroy_all Alexander Graf
2012-01-04  1:10 ` [PATCH 03/50] KVM: PPC: e500: clear up confusion between host and guest entries Alexander Graf
2012-01-04  1:10 ` [PATCH 04/50] KVM: PPC: e500: MMU API Alexander Graf
2012-01-08 13:13   ` Avi Kivity
2012-01-08 14:52     ` Alexander Graf
2012-01-08 14:55       ` Avi Kivity
2012-01-08 15:16         ` Alexander Graf
2012-01-08 15:27           ` Avi Kivity
2012-01-04  1:10 ` [PATCH 05/50] KVM: PPC: e500: tlbsx: fix tlb0 esel Alexander Graf
2012-01-04  1:10 ` [PATCH 06/50] KVM: PPC: e500: Don't hardcode PIR=0 Alexander Graf
2012-01-08 13:14   ` Avi Kivity
2012-01-08 14:53     ` Alexander Graf
2012-01-08 14:56       ` Avi Kivity
2012-01-04  1:10 ` [PATCH 07/50] KVM: PPC: Add generic single register ioctls Alexander Graf
2012-01-04 20:08   ` Scott Wood [this message]
2012-01-05  2:32     ` Alexander Graf
2012-01-05  4:07       ` Alexander Graf
2012-01-05 20:53         ` Scott Wood
2012-01-08 12:38         ` Avi Kivity
2012-01-04  1:10 ` [PATCH 08/50] KVM: PPC: Add support for explicit HIOR setting Alexander Graf
2012-01-04 20:12   ` Scott Wood
2012-01-05  2:36     ` Alexander Graf
2012-01-05 17:16       ` Scott Wood
2012-01-06  2:35         ` Alexander Graf
2012-01-06 21:12           ` Scott Wood
2012-01-07  1:14             ` Alexander Graf
2012-01-09 19:52               ` Scott Wood
2012-01-04  1:10 ` [PATCH 09/50] KVM: PPC: E500: Support hugetlbfs Alexander Graf
2012-01-08 13:16   ` Avi Kivity
2012-01-04  1:10 ` [PATCH 10/50] PPC: Fix race in mtmsr paravirt implementation Alexander Graf
2012-01-04  1:10 ` [PATCH 11/50] Fix DEC truncation for greater than 0xffff_ffff/1000 Alexander Graf
2012-01-04  1:10 ` [PATCH 12/50] KVM: booke: Do Not start decrementer when SPRN_DEC set 0 Alexander Graf
2012-01-04  1:10 ` [PATCH 13/50] KVM: PPC: booke: check for signals in kvmppc_vcpu_run Alexander Graf
2012-01-08 13:18   ` Avi Kivity
2012-01-08 15:11     ` Alexander Graf
2012-01-08 15:22       ` Avi Kivity
2012-01-08 15:37         ` Alexander Graf
2012-01-08 16:13           ` Avi Kivity
2012-01-08 16:21             ` Alexander Graf
2012-01-08 16:26               ` Avi Kivity
2012-01-08 16:41                 ` Alexander Graf
2012-01-08 16:45                   ` Avi Kivity
2012-01-08 16:54                     ` Alexander Graf
2012-01-04  1:10 ` [PATCH 14/50] KVM: PPC: Rename deliver_interrupts to prepare_to_enter Alexander Graf
2012-01-04  1:10 ` [PATCH 15/50] KVM: PPC: Move prepare_to_enter call site into subarch code Alexander Graf
2012-01-04  1:10 ` [PATCH 16/50] KVM: PPC: booke: Check for MSR[WE] in prepare_to_enter Alexander Graf
2012-01-04  1:10 ` [PATCH 17/50] KVM: PPC: booke: Fix int_pending calculation for MSR[EE] paravirt Alexander Graf
2012-01-04  1:10 ` [PATCH 18/50] KVM: PPC: booke: Paravirtualize wrtee Alexander Graf
2012-01-04  1:10 ` [PATCH 19/50] KVM: PPC: Paravirtualize SPRG4-7, ESR, PIR, MASn Alexander Graf
2012-01-08 13:20   ` Avi Kivity
2012-01-04  1:10 ` [PATCH 20/50] KVM: PPC: booke: Improve timer register emulation Alexander Graf
2012-01-04  1:10 ` [PATCH 21/50] KVM: PPC: Book3s: PR: Disable preemption in vcpu_run Alexander Graf
2012-01-04  1:10 ` [PATCH 22/50] KVM: PPC: Book3s: PR: No irq_disable " Alexander Graf
2012-01-04  1:10 ` [PATCH 23/50] KVM: PPC: Use get/set for to_svcpu to help preemption Alexander Graf
2012-01-04  1:10 ` [PATCH 24/50] KVM: PPC: align vcpu_kick with x86 Alexander Graf
2012-01-08 13:24   ` Avi Kivity
2012-01-08 15:14     ` Alexander Graf
2012-01-08 15:32       ` Christoffer Dall
2012-01-04  1:10 ` [PATCH 25/50] KVM: PPC: Book3S: PR: Fix signal check race Alexander Graf
2012-01-04  1:10 ` [PATCH 26/50] KVM: PPC: e500: Fix TLBnCFG in KVM_CONFIG_TLB Alexander Graf
2012-01-04  1:10 ` [PATCH 27/50] KVM: PPC: e500: use hardware hint when loading TLB0 entries Alexander Graf
2012-01-04  1:10 ` [PATCH 28/50] KVM: PPC: Avoid patching paravirt template code Alexander Graf
2012-01-04  1:10 ` [PATCH 29/50] KVM: PPC: Make wakeups work again for Book3S HV guests Alexander Graf
2012-01-04  1:10 ` [PATCH 30/50] KVM: PPC: Move kvm_vcpu_ioctl_[gs]et_one_reg down to platform-specific code Alexander Graf
2012-01-04  1:10 ` [PATCH 31/50] KVM: PPC: Keep a record of HV guest view of hashed page table entries Alexander Graf
2012-01-04  1:10 ` [PATCH 32/50] KVM: PPC: Keep page physical addresses in per-slot arrays Alexander Graf
2012-01-04  1:10 ` [PATCH 33/50] KVM: PPC: Add an interface for pinning guest pages in Book3s HV guests Alexander Graf
2012-01-04  1:10 ` [PATCH 34/50] KVM: PPC: Make the H_ENTER hcall more reliable Alexander Graf
2012-01-04  1:10 ` [PATCH 35/50] KVM: PPC: Only get pages when actually needed, not in prepare_memory_region() Alexander Graf
2012-01-04  1:10 ` [PATCH 36/50] KVM: PPC: Allow use of small pages to back Book3S HV guests Alexander Graf
2012-01-04  1:10 ` [PATCH 37/50] KVM: PPC: Allow I/O mappings in memory slots Alexander Graf
2012-01-04  1:10 ` [PATCH 38/50] KVM: PPC: Maintain a doubly-linked list of guest HPTEs for each gfn Alexander Graf
2012-01-04  1:10 ` [PATCH 39/50] KVM: PPC: Implement MMIO emulation support for Book3S HV guests Alexander Graf
2012-01-04  1:10 ` [PATCH 40/50] KVM: PPC: Implement MMU notifiers " Alexander Graf
2012-01-08 13:29   ` Avi Kivity
2012-01-08 15:15     ` Alexander Graf
2012-01-08 15:24       ` Avi Kivity
2012-01-08 15:41         ` Alexander Graf
2012-01-04  1:10 ` [PATCH 41/50] KVM: Add barriers to allow mmu_notifier_retry to be used locklessly Alexander Graf
2012-01-04  1:10 ` [PATCH 42/50] KVM: PPC: Allow for read-only pages backing a Book3S HV guest Alexander Graf
2012-01-04  1:10 ` [PATCH 43/50] KVM: PPC: Fix vcpu_create dereference before validity check Alexander Graf
2012-01-04  1:10 ` [PATCH 44/50] KVM: PPC: Add KVM_CAP_NR_VCPUS and KVM_CAP_MAX_VCPUS Alexander Graf
2012-01-04  1:10 ` [PATCH 45/50] KVM: PPC: Book3S HV: Keep HPTE locked when invalidating Alexander Graf
2012-01-04  1:10 ` [PATCH 46/50] KVM: PPC: Book3s HV: Maintain separate guest and host views of R and C bits Alexander Graf
2012-01-04  1:10 ` [PATCH 47/50] KVM: PPC: Book3S HV: Use the hardware referenced bit for kvm_age_hva Alexander Graf
2012-01-04  1:10 ` [PATCH 48/50] KVM: PPC: Book3s HV: Implement get_dirty_log using hardware changed bit Alexander Graf
2012-01-04  1:10 ` [PATCH 49/50] KVM: PPC: booke: Add booke206 TLB trace Alexander Graf
2012-01-04  1:10 ` [PATCH 50/50] KVM: PPC: Use the vcpu kmem_cache when allocating new VCPUs Alexander Graf

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=4F04B1C9.6000907@freescale.com \
    --to=scottwood@freescale.com \
    --cc=agraf@suse.de \
    --cc=avi@redhat.com \
    --cc=kvm-ppc@vger.kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@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 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).