On Fri, Mar 13, 2015 at 10:41:53AM +0000, Dr. David Alan Gilbert wrote: > * David Gibson (david@gibson.dropbear.id.au) wrote: > > On Wed, Feb 25, 2015 at 04:51:45PM +0000, Dr. David Alan Gilbert (git) wrote: > > > From: "Dr. David Alan Gilbert" > > > > > > Provide a check to see if the OS we're running on has all the bits > > > needed for postcopy. > > > > > > Creates postcopy-ram.c which will get most of the other helpers we need. > > > > > > Signed-off-by: Dr. David Alan Gilbert > > > --- > > > include/migration/postcopy-ram.h | 19 +++++ > > > migration/Makefile.objs | 2 +- > > > migration/postcopy-ram.c | 161 +++++++++++++++++++++++++++++++++++++++ > > > savevm.c | 5 ++ > > > 4 files changed, 186 insertions(+), 1 deletion(-) > > > create mode 100644 include/migration/postcopy-ram.h > > > create mode 100644 migration/postcopy-ram.c > > > > > > diff --git a/include/migration/postcopy-ram.h b/include/migration/postcopy-ram.h > > > new file mode 100644 > > > index 0000000..d81934f > > > --- /dev/null > > > +++ b/include/migration/postcopy-ram.h > > > @@ -0,0 +1,19 @@ > > > +/* > > > + * Postcopy migration for RAM > > > + * > > > + * Copyright 2013 Red Hat, Inc. and/or its affiliates > > > + * > > > + * Authors: > > > + * Dave Gilbert > > > + * > > > + * This work is licensed under the terms of the GNU GPL, version 2 or later. > > > + * See the COPYING file in the top-level directory. > > > + * > > > + */ > > > +#ifndef QEMU_POSTCOPY_RAM_H > > > +#define QEMU_POSTCOPY_RAM_H > > > + > > > +/* Return true if the host supports everything we need to do postcopy-ram */ > > > +bool postcopy_ram_supported_by_host(void); > > > + > > > +#endif > > > diff --git a/migration/Makefile.objs b/migration/Makefile.objs > > > index d929e96..0cac6d7 100644 > > > --- a/migration/Makefile.objs > > > +++ b/migration/Makefile.objs > > > @@ -1,7 +1,7 @@ > > > common-obj-y += migration.o tcp.o > > > common-obj-y += vmstate.o > > > common-obj-y += qemu-file.o qemu-file-buf.o qemu-file-unix.o qemu-file-stdio.o > > > -common-obj-y += xbzrle.o > > > +common-obj-y += xbzrle.o postcopy-ram.o > > > > > > common-obj-$(CONFIG_RDMA) += rdma.o > > > common-obj-$(CONFIG_POSIX) += exec.o unix.o fd.o > > > diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c > > > new file mode 100644 > > > index 0000000..a0e20b2 > > > --- /dev/null > > > +++ b/migration/postcopy-ram.c > > > @@ -0,0 +1,161 @@ > > > +/* > > > + * Postcopy migration for RAM > > > + * > > > + * Copyright 2013-2014 Red Hat, Inc. and/or its affiliates > > > + * > > > + * Authors: > > > + * Dave Gilbert > > > + * > > > + * This work is licensed under the terms of the GNU GPL, version 2 or later. > > > + * See the COPYING file in the top-level directory. > > > + * > > > + */ > > > + > > > +/* > > > + * Postcopy is a migration technique where the execution flips from the > > > + * source to the destination before all the data has been copied. > > > + */ > > > + > > > +#include > > > +#include > > > +#include > > > + > > > +#include "qemu-common.h" > > > +#include "migration/migration.h" > > > +#include "migration/postcopy-ram.h" > > > +#include "sysemu/sysemu.h" > > > +#include "qemu/error-report.h" > > > +#include "trace.h" > > > + > > > +/* Postcopy needs to detect accesses to pages that haven't yet been copied > > > + * across, and efficiently map new pages in, the techniques for doing this > > > + * are target OS specific. > > > + */ > > > +#if defined(__linux__) > > > + > > > +#include > > > +#include > > > +#include > > > +#include /* for __u64 */ > > > +#include > > > + > > > +#ifdef HOST_X86_64 > > > +#ifndef __NR_userfaultfd > > > +#define __NR_userfaultfd 323 > > > > Sholdn't this come from the kernel headers imported in the previous > > patch? Rather than having an arch-specific hack. > > The header, like the rest of the kernel headers, just provides > the constant and structure definitions for the call; the syscall numbers > come from arch specific headers. I guess in the final world I wouldn't > need this at all since it'll come from the system headers; but what's > the right way to put this in for new syscalls? Uh.. yeah.. I'm not sure actually. I was assuming the imported kernel headers, because part of the reason they're there is for getting defines that aren't in the system headers (e.g. ioctl numbers and structures). But without asm/unistd.h it's not clear to be how a new system call should be handled. -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson