From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 2/4] KVM: Add unified KVM_GET/SET_VCPU_STATE IOCTL Date: Thu, 15 Oct 2009 17:00:30 +0900 Message-ID: <4AD6D69E.3030408@redhat.com> References: <20091013160647.27006.58598.stgit@mchn012c.ww002.siemens.net> <20091013160648.27006.25850.stgit@mchn012c.ww002.siemens.net> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: Marcelo Tosatti , kvm@vger.kernel.org To: Jan Kiszka Return-path: Received: from mx1.redhat.com ([209.132.183.28]:16699 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755391AbZJOIBB (ORCPT ); Thu, 15 Oct 2009 04:01:01 -0400 In-Reply-To: <20091013160648.27006.25850.stgit@mchn012c.ww002.siemens.net> Sender: kvm-owner@vger.kernel.org List-ID: On 10/14/2009 01:06 AM, Jan Kiszka wrote: > Add a new IOCTL pair to retrieve or set the VCPU state in one chunk. > More precisely, the IOCTL is able to process a list of substates to be > read or written. This list is easily extensible without breaking the > existing ABI, thus we will no longer have to add new IOCTLs when we > discover a missing VCPU state field or want to support new hardware > features. > > This patch establishes the generic infrastructure for KVM_GET/ > SET_VCPU_STATE and adds support for the generic substates REGS, SREGS, > FPU, and MP. To avoid code duplication, the entry point for the > corresponding original IOCTLs are converted to make use of the new > infrastructure internally, too. > > > > +/* for KVM_GET_VCPU_STATE and KVM_SET_VCPU_STATE */ > +#define KVM_VCPU_REGS 0 > +#define KVM_VCPU_SREGS 1 > +#define KVM_VCPU_FPU 2 > +#define KVM_VCPU_MP 3 > KVM_VCPU_STATE_*, to avoid collisions. Better to split sse from fpu since we already know it is about to be replaced. > + > +struct kvm_vcpu_substate { > + __u32 type; > + __u32 pad; > + __s64 offset; > +}; > + > +#define KVM_MAX_VCPU_SUBSTATES 64 > + > +struct kvm_vcpu_state { > + __u32 nsubstates; /* number of elements in substates */ > + __u32 nprocessed; /* return value: successfully processed substates */ > + struct kvm_vcpu_substate substates[0]; > +}; > + > Wouldn't having an ordinary struct with lots of reserved space be simpler? If we add a bitmask, we can even selectively get/set the fields we want (important if new state extends old state: avx vs sse). -- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain.