From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:46391) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qt2rF-0007ol-Ml for qemu-devel@nongnu.org; Mon, 15 Aug 2011 15:29:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qt2rE-0008UR-HD for qemu-devel@nongnu.org; Mon, 15 Aug 2011 15:29:57 -0400 Received: from mx1.redhat.com ([209.132.183.28]:46140) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qt2rE-0008UL-7u for qemu-devel@nongnu.org; Mon, 15 Aug 2011 15:29:56 -0400 Message-ID: <4E4973A1.2040008@redhat.com> Date: Mon, 15 Aug 2011 12:29:37 -0700 From: Avi Kivity MIME-Version: 1.0 References: <20110808032438.GC24764@valinux.co.jp> <20110812110737.GA13791@valinux.co.jp> In-Reply-To: <20110812110737.GA13791@valinux.co.jp> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH][RFC] post copy chardevice (was Re: [RFC] postcopy livemigration proposal) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Isaku Yamahata Cc: Andrea Arcangeli , Nadav Har'El , kvm@vger.kernel.org, satoshi.itoh@aist.go.jp, Stefan Hajnoczi , t.hirofuchi@aist.go.jp, Dor Laor , qemu-devel@nongnu.org, Yaniv Kaul On 08/12/2011 04:07 AM, Isaku Yamahata wrote: > This is a character device to hook page access. > The page fault in the area is reported to another user process by > this chardriver. Then, the process fills the page contents and > resolves the page fault. Have you considered CUSE (character device in userspace, fs/fuse/cuse.c)? > index 55f5afb..623109e 100644 > --- a/include/linux/kvm.h > +++ b/include/linux/kvm.h > @@ -554,6 +554,7 @@ struct kvm_ppc_pvinfo { > #define KVM_CAP_PPC_SMT 64 > #define KVM_CAP_PPC_RMA 65 > #define KVM_CAP_MAX_VCPUS 66 /* returns max vcpus per vm */ > +#define KVM_CAP_POST_COPY_MEMORY 67 > > #ifdef KVM_CAP_IRQ_ROUTING > > @@ -760,6 +761,50 @@ struct kvm_clock_data { > /* Available with KVM_CAP_RMA */ > #define KVM_ALLOCATE_RMA _IOR(KVMIO, 0xa9, struct kvm_allocate_rma) > > +struct kvm_vmem_create { > + __u64 size; /* in bytes */ > + __s32 vmem_fd; > + __s32 shmem_fd; > +}; Should really be outside kvm.h (and virt/kvm), since it's not kvm specific. > + > +struct kvm_vmem_page_request { > + __u32 nr; > + __u64 __user *pgoffs; > +}; > + > +struct kvm_vmem_page_cached { > + __u32 nr; > + __u64 __user *pgoffs; > +}; > + > +struct kvm_vmem_page_range { > + __u64 pgoff; > + __u64 nr_pages; > +}; > + > +struct kvm_vmem_make_pages_present { > + __u32 nr; > + struct kvm_vmem_page_range __user *ranges; > +}; This is madvise(MADV_WILLNEED), is it not? > + > +/* Available with KVM_CAP_POST_COPY_MEMORY */ > +#define KVM_CREATE_VMEM_DEV _IO(KVMIO, 0xb0) > + > +/* ioctl for vmem_dev fd */ > +#define KVM_CREATE_VMEM _IOR(KVMIO, 0xb1, __u32) > + > +/* ioctl for vmem fd */ > +#define KVM_VMEM_WAIT_READY _IO(KVMIO, 0xb2) > +#define KVM_VMEM_READY _IO(KVMIO, 0xb3) > +#define KVM_VMEM_GET_PAGE_REQUEST \ > + _IOWR(KVMIO, 0xb4, struct kvm_vmem_page_request) > +#define KVM_VMEM_MARK_PAGE_CACHED \ > + _IOW(KVMIO, 0xb5, struct kvm_vmem_page_cached) > +#define KVM_VMEM_MAKE_PAGES_PRESENT \ > + _IOW(KVMIO, 0xb6, struct kvm_vmem_make_pages_present) > +#define KVM_VMEM_MAKE_VMA_ANONYMOUS _IO(KVMIO, 0xb7) Can you explain these in some more detail? -- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain.