qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v5 22/45] postcopy: OS support test


From: David Gibson
Subject: Re: [Qemu-devel] [PATCH v5 22/45] postcopy: OS support test
Date: Mon, 16 Mar 2015 17:22:20 +1100
User-agent: Mutt/1.5.23 (2014-03-12)

On Fri, Mar 13, 2015 at 10:41:53AM +0000, Dr. David Alan Gilbert wrote:
> * David Gibson (address@hidden) wrote:
> > On Wed, Feb 25, 2015 at 04:51:45PM +0000, Dr. David Alan Gilbert (git) 
> > wrote:
> > > From: "Dr. David Alan Gilbert" <address@hidden>
> > > 
> > > 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 <address@hidden>
> > > ---
> > >  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  <address@hidden>
> > > + *
> > > + * 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  <address@hidden>
> > > + *
> > > + * 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 <glib.h>
> > > +#include <stdio.h>
> > > +#include <unistd.h>
> > > +
> > > +#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 <sys/mman.h>
> > > +#include <sys/ioctl.h>
> > > +#include <sys/types.h>
> > > +#include <asm/types.h> /* for __u64 */
> > > +#include <linux/userfaultfd.h>
> > > +
> > > +#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

Attachment: pgpGDaMEfbg1f.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]