# HG changeset patch
# User cl349@xxxxxxxxxxxxxxxxxxxx
# Node ID 2f20c2fce2c50dc4a01bff6855b90eb66a5b5a78
# Parent 630feabe7ed6df7bbddbdd87b2ec0194d55dd97f
# Parent fdfd511768a3ab1b5fbbe3f7b75239edc502e84b
merge?
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/blktap/blktaplib.h
--- a/tools/blktap/blktaplib.h Wed Aug 24 22:24:10 2005
+++ b/tools/blktap/blktaplib.h Thu Aug 25 00:55:20 2005
@@ -7,7 +7,7 @@
#ifndef __BLKTAPLIB_H__
#define __BLKTAPLIB_H__
-#include <xc.h>
+#include <xenctrl.h>
#include <sys/user.h>
#include <xen/xen.h>
#include <xen/io/blkif.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/blktap/parallax/block-async.h
--- a/tools/blktap/parallax/block-async.h Wed Aug 24 22:24:10 2005
+++ b/tools/blktap/parallax/block-async.h Thu Aug 25 00:55:20 2005
@@ -7,7 +7,7 @@
#define _BLOCKASYNC_H_
#include <assert.h>
-#include <xc.h>
+#include <xenctrl.h>
#include "vdi.h"
struct io_ret
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/blktap/parallax/blockstore.h
--- a/tools/blktap/parallax/blockstore.h Wed Aug 24 22:24:10 2005
+++ b/tools/blktap/parallax/blockstore.h Thu Aug 25 00:55:20 2005
@@ -10,7 +10,7 @@
#define __BLOCKSTORE_H__
#include <netinet/in.h>
-#include <xc.h>
+#include <xenctrl.h>
#define BLOCK_SIZE 4096
#define BLOCK_SHIFT 12
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/console/Makefile
--- a/tools/console/Makefile Wed Aug 24 22:24:10 2005
+++ b/tools/console/Makefile Thu Aug 25 00:55:20 2005
@@ -26,11 +26,11 @@
xenconsoled: $(patsubst %.c,%.o,$(wildcard daemon/*.c))
$(CC) $(CFLAGS) $^ -o $@ -L$(XEN_LIBXC) -L$(XEN_XENSTORE) \
- -lxc -lxenstore
+ -lxenctrl -lxenstore
xenconsole: $(patsubst %.c,%.o,$(wildcard client/*.c))
$(CC) $(CFLAGS) $^ -o $@ -L$(XEN_LIBXC) -L$(XEN_XENSTORE) \
- -lxc -lxenstore
+ -lxenctrl -lxenstore
install: $(BIN)
$(INSTALL_DIR) -p $(DESTDIR)/$(DAEMON_INSTALL_DIR)
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/console/client/main.c
--- a/tools/console/client/main.c Wed Aug 24 22:24:10 2005
+++ b/tools/console/client/main.c Thu Aug 25 00:55:20 2005
@@ -36,7 +36,7 @@
#include <errno.h>
#include <pty.h>
-#include "xc.h"
+#include "xenctrl.h"
#include "xs.h"
#define ESCAPE_CHARACTER 0x1d
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/console/daemon/io.c
--- a/tools/console/daemon/io.c Wed Aug 24 22:24:10 2005
+++ b/tools/console/daemon/io.c Thu Aug 25 00:55:20 2005
@@ -23,7 +23,7 @@
#include "utils.h"
#include "io.h"
-#include "xc.h"
+#include "xenctrl.h"
#include "xs.h"
#include "xen/io/domain_controller.h"
#include "xcs_proto.h"
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/console/daemon/main.c
--- a/tools/console/daemon/main.c Wed Aug 24 22:24:10 2005
+++ b/tools/console/daemon/main.c Thu Aug 25 00:55:20 2005
@@ -25,7 +25,7 @@
#include <unistd.h>
#include <sys/types.h>
-#include "xc.h"
+#include "xenctrl.h"
#include "xen/io/domain_controller.h"
#include "xcs_proto.h"
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/console/daemon/utils.c
--- a/tools/console/daemon/utils.c Wed Aug 24 22:24:10 2005
+++ b/tools/console/daemon/utils.c Thu Aug 25 00:55:20 2005
@@ -33,7 +33,7 @@
#include <sys/un.h>
#include <string.h>
-#include "xc.h"
+#include "xenctrl.h"
#include "xen/io/domain_controller.h"
#include "xcs_proto.h"
diff -r 630feabe7ed6 -r 2f20c2fce2c5
tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/linux-xen-low.c
--- a/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/linux-xen-low.c
Wed Aug 24 22:24:10 2005
+++ b/tools/debugger/gdb/gdb-6.2.1-xen-sparse/gdb/gdbserver/linux-xen-low.c
Thu Aug 25 00:55:20 2005
@@ -35,7 +35,7 @@
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
-#include <xc.h>
+#include <xenctrl.h>
#define TRACE_ENTER /* printf("enter %s\n", __FUNCTION__) */
long (*myptrace)(enum __ptrace_request, pid_t, long, long);
int (*myxcwait)(int domain, int *status, int options) ;
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/debugger/libxendebug/Makefile
--- a/tools/debugger/libxendebug/Makefile Wed Aug 24 22:24:10 2005
+++ b/tools/debugger/libxendebug/Makefile Thu Aug 25 00:55:20 2005
@@ -20,7 +20,7 @@
CFLAGS += -Wp,-MD,.$(@F).d
DEPS = .*.d
-LDFLAGS += -L$(XEN_ROOT)/tools/libxc -lxc
+LDFLAGS += -L$(XEN_ROOT)/tools/libxc -lxenctrl
LIB_OBJS := $(patsubst %.c,%.o,$(SRCS))
PIC_OBJS := $(patsubst %.c,%.opic,$(SRCS))
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/debugger/libxendebug/xendebug.c
--- a/tools/debugger/libxendebug/xendebug.c Wed Aug 24 22:24:10 2005
+++ b/tools/debugger/libxendebug/xendebug.c Thu Aug 25 00:55:20 2005
@@ -12,7 +12,7 @@
#include <string.h>
#include <errno.h>
#include <sys/mman.h>
-#include <xc.h>
+#include <xenctrl.h>
#include "list.h"
#if defined(__i386__)
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/debugger/libxendebug/xendebug.h
--- a/tools/debugger/libxendebug/xendebug.h Wed Aug 24 22:24:10 2005
+++ b/tools/debugger/libxendebug/xendebug.h Thu Aug 25 00:55:20 2005
@@ -9,7 +9,7 @@
#ifndef _XENDEBUG_H_DEFINED
#define _XENDEBUG_H_DEFINED
-#include <xc.h>
+#include <xenctrl.h>
int xendebug_attach(int xc_handle,
u32 domid,
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/debugger/pdb/pdb_caml_domain.c
--- a/tools/debugger/pdb/pdb_caml_domain.c Wed Aug 24 22:24:10 2005
+++ b/tools/debugger/pdb/pdb_caml_domain.c Thu Aug 25 00:55:20 2005
@@ -6,7 +6,7 @@
* PDB's OCaml interface library for debugging domains
*/
-#include <xc.h>
+#include <xenctrl.h>
#include <xendebug.h>
#include <errno.h>
#include <stdio.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/debugger/pdb/pdb_caml_evtchn.c
--- a/tools/debugger/pdb/pdb_caml_evtchn.c Wed Aug 24 22:24:10 2005
+++ b/tools/debugger/pdb/pdb_caml_evtchn.c Thu Aug 25 00:55:20 2005
@@ -6,7 +6,7 @@
* PDB's OCaml interface library for event channels
*/
-#include <xc.h>
+#include <xenctrl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/debugger/pdb/pdb_caml_process.c
--- a/tools/debugger/pdb/pdb_caml_process.c Wed Aug 24 22:24:10 2005
+++ b/tools/debugger/pdb/pdb_caml_process.c Thu Aug 25 00:55:20 2005
@@ -15,7 +15,7 @@
#include <caml/memory.h>
#include <caml/mlvalues.h>
-#include <xc.h>
+#include <xenctrl.h>
#include <xen/xen.h>
#include <xen/io/domain_controller.h>
#include <xen/linux/privcmd.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/debugger/pdb/pdb_caml_xc.c
--- a/tools/debugger/pdb/pdb_caml_xc.c Wed Aug 24 22:24:10 2005
+++ b/tools/debugger/pdb/pdb_caml_xc.c Thu Aug 25 00:55:20 2005
@@ -6,7 +6,7 @@
* PDB's OCaml interface library for debugging domains
*/
-#include <xc.h>
+#include <xenctrl.h>
#include <xendebug.h>
#include <errno.h>
#include <stdio.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/debugger/pdb/pdb_caml_xcs.c
--- a/tools/debugger/pdb/pdb_caml_xcs.c Wed Aug 24 22:24:10 2005
+++ b/tools/debugger/pdb/pdb_caml_xcs.c Thu Aug 25 00:55:20 2005
@@ -17,7 +17,7 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
-#include <xc.h>
+#include <xenctrl.h>
#include <xen/xen.h>
#include <xen/io/domain_controller.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/debugger/pdb/pdb_xen.c
--- a/tools/debugger/pdb/pdb_xen.c Wed Aug 24 22:24:10 2005
+++ b/tools/debugger/pdb/pdb_xen.c Thu Aug 25 00:55:20 2005
@@ -7,7 +7,7 @@
* PDB interface library for accessing Xen
*/
-#include <xc.h>
+#include <xenctrl.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/firmware/acpi/acpi2_0.h
--- a/tools/firmware/acpi/acpi2_0.h Wed Aug 24 22:24:10 2005
+++ b/tools/firmware/acpi/acpi2_0.h Thu Aug 25 00:55:20 2005
@@ -18,7 +18,7 @@
#ifndef _ACPI_2_0_H_
#define _ACPI_2_0_H_
-#include "xc.h" // for u8, u16, u32, u64 definition
+#include "xenctrl.h" // for u8, u16, u32, u64 definition
#pragma pack (1)
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/ioemu/hw/i8254.c
--- a/tools/ioemu/hw/i8254.c Wed Aug 24 22:24:10 2005
+++ b/tools/ioemu/hw/i8254.c Thu Aug 25 00:55:20 2005
@@ -22,7 +22,7 @@
* THE SOFTWARE.
*/
#include "vl.h"
-#include "xc.h"
+#include "xenctrl.h"
#include <io/ioreq.h>
//#define DEBUG_PIT
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/ioemu/hw/i8259.c
--- a/tools/ioemu/hw/i8259.c Wed Aug 24 22:24:10 2005
+++ b/tools/ioemu/hw/i8259.c Thu Aug 25 00:55:20 2005
@@ -22,7 +22,7 @@
* THE SOFTWARE.
*/
#include "vl.h"
-#include "xc.h"
+#include "xenctrl.h"
#include <io/ioreq.h>
/* debug PIC */
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/ioemu/hw/ioapic.h
--- a/tools/ioemu/hw/ioapic.h Wed Aug 24 22:24:10 2005
+++ b/tools/ioemu/hw/ioapic.h Thu Aug 25 00:55:20 2005
@@ -26,7 +26,7 @@
#ifndef __IOAPIC_H
#define __IOAPIC_H
-#include "xc.h"
+#include "xenctrl.h"
#include <io/ioreq.h>
#include <io/vmx_vlapic.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/ioemu/target-i386-dm/Makefile
--- a/tools/ioemu/target-i386-dm/Makefile Wed Aug 24 22:24:10 2005
+++ b/tools/ioemu/target-i386-dm/Makefile Thu Aug 25 00:55:20 2005
@@ -188,7 +188,7 @@
#########################################################
DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-DAPIC_SUPPORT
-LIBS+=-lm -L../../libxc -lxc
+LIBS+=-lm -L../../libxc -lxenctrl
ifndef CONFIG_USER_ONLY
LIBS+=-lz
endif
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/ioemu/target-i386-dm/helper2.c
--- a/tools/ioemu/target-i386-dm/helper2.c Wed Aug 24 22:24:10 2005
+++ b/tools/ioemu/target-i386-dm/helper2.c Thu Aug 25 00:55:20 2005
@@ -47,7 +47,7 @@
#include <fcntl.h>
#include <sys/ioctl.h>
-#include "xc.h"
+#include "xenctrl.h"
#include <io/ioreq.h>
#include "cpu.h"
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/ioemu/vl.c
--- a/tools/ioemu/vl.c Wed Aug 24 22:24:10 2005
+++ b/tools/ioemu/vl.c Thu Aug 25 00:55:20 2005
@@ -72,7 +72,7 @@
#endif
#endif /* CONFIG_SDL */
-#include "xc.h"
+#include "xenctrl.h"
#include "exec-all.h"
//#define DO_TB_FLUSH
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/Makefile
--- a/tools/libxc/Makefile Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/Makefile Thu Aug 25 00:55:20 2005
@@ -12,28 +12,32 @@
XEN_ROOT = ../..
include $(XEN_ROOT)/tools/Rules.mk
-SRCS :=
-SRCS += xc_sedf.c
-SRCS += xc_bvtsched.c
-SRCS += xc_core.c
-SRCS += xc_domain.c
-SRCS += xc_evtchn.c
-SRCS += xc_gnttab.c
-SRCS += xc_load_bin.c
-SRCS += xc_load_elf.c
-SRCS += xc_linux_build.c
-SRCS += xc_misc.c
-SRCS += xc_physdev.c
-SRCS += xc_private.c
+SRCS :=
+BUILD_SRCS :=
+SRCS += xc_bvtsched.c
+SRCS += xc_core.c
+SRCS += xc_domain.c
+SRCS += xc_evtchn.c
+SRCS += xc_gnttab.c
+SRCS += xc_misc.c
+SRCS += xc_physdev.c
+SRCS += xc_private.c
+SRCS += xc_sedf.c
+
ifeq ($(XEN_TARGET_ARCH),ia64)
-SRCS += xc_ia64_stubs.c
+BUILD_SRCS += xc_ia64_stubs.c
else
-SRCS += xc_load_aout9.c
-SRCS += xc_linux_restore.c
-SRCS += xc_linux_save.c
-SRCS += xc_vmx_build.c
-SRCS += xc_ptrace.c
-SRCS += xc_ptrace_core.c
+SRCS += xc_ptrace.c
+SRCS += xc_ptrace_core.c
+
+BUILD_SRCS := xc_load_aout9.c
+BUILD_SRCS += xc_load_bin.c
+BUILD_SRCS += xc_load_elf.c
+BUILD_SRCS += xc_linux_build.c
+BUILD_SRCS += xc_linux_restore.c
+BUILD_SRCS += xc_linux_save.c
+BUILD_SRCS += xc_vmx_build.c
+BUILD_SRCS += xg_private.c
endif
CFLAGS += -Wall
@@ -43,13 +47,20 @@
CFLAGS += $(INCLUDES) -I.
# Get gcc to generate the dependencies for us.
CFLAGS += -Wp,-MD,.$(@F).d
+LDFLAGS += -L.
DEPS = .*.d
LIB_OBJS := $(patsubst %.c,%.o,$(SRCS))
PIC_OBJS := $(patsubst %.c,%.opic,$(SRCS))
-LIB := libxc.a libxc-pic.a
-LIB += libxc.so libxc.so.$(MAJOR) libxc.so.$(MAJOR).$(MINOR)
+LIB_BUILD_OBJS := $(patsubst %.c,%.o,$(BUILD_SRCS))
+PIC_BUILD_OBJS := $(patsubst %.c,%.opic,$(BUILD_SRCS))
+
+LIB := libxenctrl.a
+LIB += libxenctrl.so libxenctrl.so.$(MAJOR) libxenctrl.so.$(MAJOR).$(MINOR)
+
+LIB += libxenguest.a
+LIB += libxenguest.so libxenguest.so.$(MAJOR) libxenguest.so.$(MAJOR).$(MINOR)
all: build
build: check-for-zlib mk-symlinks
@@ -77,11 +88,16 @@
install: build
[ -d $(DESTDIR)/usr/$(LIBDIR) ] || $(INSTALL_DIR)
$(DESTDIR)/usr/$(LIBDIR)
[ -d $(DESTDIR)/usr/include ] || $(INSTALL_DIR) $(DESTDIR)/usr/include
- $(INSTALL_PROG) libxc.so.$(MAJOR).$(MINOR) $(DESTDIR)/usr/$(LIBDIR)
- $(INSTALL_DATA) libxc.a $(DESTDIR)/usr/$(LIBDIR)
- ln -sf libxc.so.$(MAJOR).$(MINOR)
$(DESTDIR)/usr/$(LIBDIR)/libxc.so.$(MAJOR)
- ln -sf libxc.so.$(MAJOR) $(DESTDIR)/usr/$(LIBDIR)/libxc.so
- $(INSTALL_DATA) xc.h $(DESTDIR)/usr/include
+ $(INSTALL_PROG) libxenctrl.so.$(MAJOR).$(MINOR) $(DESTDIR)/usr/$(LIBDIR)
+ $(INSTALL_DATA) libxenctrl.a $(DESTDIR)/usr/$(LIBDIR)
+ ln -sf libxenctrl.so.$(MAJOR).$(MINOR)
$(DESTDIR)/usr/$(LIBDIR)/libxenctrl.so.$(MAJOR)
+ ln -sf libxenctrl.so.$(MAJOR) $(DESTDIR)/usr/$(LIBDIR)/libxenctrl.so
+ $(INSTALL_DATA) xenctrl.h $(DESTDIR)/usr/include/xen
+
+ $(INSTALL_PROG) libxenguest.so.$(MAJOR).$(MINOR)
$(DESTDIR)/usr/$(LIBDIR)
+ $(INSTALL_DATA) libxenguest.a $(DESTDIR)/usr/$(LIBDIR)
+ ln -sf libxenguest.so.$(MAJOR).$(MINOR)
$(DESTDIR)/usr/$(LIBDIR)/libxenguest.so.$(MAJOR)
+ ln -sf libxenguest.so.$(MAJOR) $(DESTDIR)/usr/$(LIBDIR)/libxenguest.so
.PHONY: TAGS clean rpm install all
@@ -100,18 +116,30 @@
mv staging/i386/*.rpm .
rm -rf staging
-libxc.a: $(LIB_OBJS)
+# libxenctrl
+
+libxenctrl.a: $(LIB_OBJS)
$(AR) rc $@ $^
-libxc-pic.a: $(PIC_OBJS)
+libxenctrl.so: libxenctrl.so.$(MAJOR)
+ ln -sf $< $@
+libxenctrl.so.$(MAJOR): libxenctrl.so.$(MAJOR).$(MINOR)
+ ln -sf $< $@
+
+libxenctrl.so.$(MAJOR).$(MINOR): $(PIC_OBJS)
+ $(CC) $(CFLAGS) $(LDFLAGS) -Wl,-soname -Wl,libxenctrl.so.$(MAJOR)
-shared -o $@ $^
+
+# libxenguest
+
+libxenguest.a: $(LIB_BUILD_OBJS)
$(AR) rc $@ $^
-libxc.so: libxc.so.$(MAJOR)
+libxenguest.so: libxenguest.so.$(MAJOR)
ln -sf $< $@
-libxc.so.$(MAJOR): libxc.so.$(MAJOR).$(MINOR)
+libxenguest.so.$(MAJOR): libxenguest.so.$(MAJOR).$(MINOR)
ln -sf $< $@
-libxc.so.$(MAJOR).$(MINOR): $(PIC_OBJS)
- $(CC) $(CFLAGS) $(LDFLAGS) -Wl,-soname -Wl,libxc.so.$(MAJOR) -shared -o
$@ $^ -lz
+libxenguest.so.$(MAJOR).$(MINOR): $(PIC_BUILD_OBJS)
+ $(CC) $(CFLAGS) $(LDFLAGS) -Wl,-soname -Wl,libxenguest.so.$(MAJOR)
-shared -o $@ $^ -lz -lxenctrl
-include $(DEPS)
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xc_core.c
--- a/tools/libxc/xc_core.c Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xc_core.c Thu Aug 25 00:55:20 2005
@@ -1,4 +1,4 @@
-#include "xc_private.h"
+#include "xg_private.h"
#define ELFSIZE 32
#include "xc_elf.h"
#include <stdlib.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xc_domain.c
--- a/tools/libxc/xc_domain.c Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xc_domain.c Thu Aug 25 00:55:20 2005
@@ -266,7 +266,7 @@
int err;
unsigned int npages = mem_kb / (PAGE_SIZE/1024);
- err = do_dom_mem_op(xc_handle, MEMOP_increase_reservation, NULL,
+ err = xc_dom_mem_op(xc_handle, MEMOP_increase_reservation, NULL,
npages, 0, domid);
if (err == npages)
return 0;
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xc_linux_build.c
--- a/tools/libxc/xc_linux_build.c Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xc_linux_build.c Thu Aug 25 00:55:20 2005
@@ -2,7 +2,8 @@
* xc_linux_build.c
*/
-#include "xc_private.h"
+#include "xg_private.h"
+#include <xenctrl.h>
#if defined(__i386__)
#define ELFSIZE 32
@@ -340,7 +341,7 @@
unsigned long count, i;
start_info_t *start_info;
shared_info_t *shared_info;
- mmu_t *mmu = NULL;
+ xc_mmu_t *mmu = NULL;
int rc;
unsigned long nr_pt_pages;
@@ -490,7 +491,7 @@
}
}
- if ( (mmu = init_mmu_updates(xc_handle, dom)) == NULL )
+ if ( (mmu = xc_init_mmu_updates(xc_handle, dom)) == NULL )
goto error_out;
/* setup page tables */
@@ -520,9 +521,9 @@
page_array[physmap_pfn++]);
for ( count = 0; count < nr_pages; count++ )
{
- if ( add_mmu_update(xc_handle, mmu,
- (page_array[count] << PAGE_SHIFT) |
- MMU_MACHPHYS_UPDATE, count) )
+ if ( xc_add_mmu_update(xc_handle, mmu,
+ (page_array[count] << PAGE_SHIFT) |
+ MMU_MACHPHYS_UPDATE, count) )
{
munmap(physmap, PAGE_SIZE);
goto error_out;
@@ -602,7 +603,7 @@
munmap(shared_info, PAGE_SIZE);
/* Send the page update requests down to the hypervisor. */
- if ( finish_mmu_updates(xc_handle, mmu) )
+ if ( xc_finish_mmu_updates(xc_handle, mmu) )
goto error_out;
free(mmu);
@@ -676,7 +677,7 @@
op.cmd = DOM0_GETDOMAININFO;
op.u.getdomaininfo.domain = (domid_t)domid;
- if ( (do_dom0_op(xc_handle, &op) < 0) ||
+ if ( (xc_dom0_op(xc_handle, &op) < 0) ||
((u16)op.u.getdomaininfo.domain != domid) )
{
PERROR("Could not get info on domain");
@@ -793,7 +794,7 @@
launch_op.u.setdomaininfo.ctxt = ctxt;
launch_op.cmd = DOM0_SETDOMAININFO;
- rc = do_dom0_op(xc_handle, &launch_op);
+ rc = xc_dom0_op(xc_handle, &launch_op);
return rc;
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xc_linux_restore.c
--- a/tools/libxc/xc_linux_restore.c Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xc_linux_restore.c Thu Aug 25 00:55:20 2005
@@ -6,7 +6,12 @@
* Copyright (c) 2003, K A Fraser.
*/
-#include "xc_private.h"
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "xg_private.h"
+#include <xenctrl.h>
+
#include <xen/linux/suspend.h>
#define MAX_BATCH_SIZE 1024
@@ -89,7 +94,7 @@
char *region_base;
- mmu_t *mmu = NULL;
+ xc_mmu_t *mmu = NULL;
/* used by debug verify code */
unsigned long buf[PAGE_SIZE/sizeof(unsigned long)];
@@ -132,7 +137,7 @@
/* Get the domain's shared-info frame. */
op.cmd = DOM0_GETDOMAININFO;
op.u.getdomaininfo.domain = (domid_t)dom;
- if (do_dom0_op(xc_handle, &op) < 0) {
+ if (xc_dom0_op(xc_handle, &op) < 0) {
ERR("Could not get information on new domain");
goto out;
}
@@ -158,7 +163,7 @@
goto out;
}
- mmu = init_mmu_updates(xc_handle, dom);
+ mmu = xc_init_mmu_updates(xc_handle, dom);
if (mmu == NULL) {
ERR("Could not initialise for MMU updates");
goto out;
@@ -355,8 +360,9 @@
}
}
- if ( add_mmu_update(xc_handle, mmu,
- (mfn<<PAGE_SHIFT) | MMU_MACHPHYS_UPDATE, pfn) )
+ if ( xc_add_mmu_update(xc_handle, mmu,
+ (mfn<<PAGE_SHIFT) | MMU_MACHPHYS_UPDATE,
+ pfn) )
{
printf("machpys mfn=%ld pfn=%ld\n",mfn,pfn);
goto out;
@@ -370,7 +376,7 @@
DPRINTF("Received all pages\n");
- if ( finish_mmu_updates(xc_handle, mmu) )
+ if ( xc_finish_mmu_updates(xc_handle, mmu) )
goto out;
/*
@@ -388,14 +394,14 @@
pin[nr_pins].mfn = pfn_to_mfn_table[i];
if ( ++nr_pins == MAX_PIN_BATCH )
{
- if ( do_mmuext_op(xc_handle, pin, nr_pins, dom) < 0 )
+ if ( xc_mmuext_op(xc_handle, pin, nr_pins, dom) < 0 )
goto out;
nr_pins = 0;
}
}
if ( (nr_pins != 0) &&
- (do_mmuext_op(xc_handle, pin, nr_pins, dom) < 0) )
+ (xc_mmuext_op(xc_handle, pin, nr_pins, dom) < 0) )
goto out;
DPRINTF("\b\b\b\b100%%\n");
@@ -435,7 +441,7 @@
if ( count > 0 )
{
- if ( (rc = do_dom_mem_op( xc_handle,
+ if ( (rc = xc_dom_mem_op( xc_handle,
MEMOP_decrease_reservation,
pfntab, count, 0, dom )) <0 )
{
@@ -586,7 +592,7 @@
op.u.setdomaininfo.domain = (domid_t)dom;
op.u.setdomaininfo.vcpu = 0;
op.u.setdomaininfo.ctxt = &ctxt;
- rc = do_dom0_op(xc_handle, &op);
+ rc = xc_dom0_op(xc_handle, &op);
if ( rc != 0 )
{
@@ -597,7 +603,7 @@
DPRINTF("Domain ready to be unpaused\n");
op.cmd = DOM0_UNPAUSEDOMAIN;
op.u.unpausedomain.domain = (domid_t)dom;
- rc = do_dom0_op(xc_handle, &op);
+ rc = xc_dom0_op(xc_handle, &op);
if (rc == 0) {
/* Success: print the domain id. */
DPRINTF("DOM=%u\n", dom);
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xc_linux_save.c
--- a/tools/libxc/xc_linux_save.c Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xc_linux_save.c Thu Aug 25 00:55:20 2005
@@ -7,11 +7,15 @@
*/
#include <inttypes.h>
+#include <time.h>
+#include <stdlib.h>
+#include <unistd.h>
#include <sys/time.h>
-#include "xc_private.h"
+
+#include "xg_private.h"
+
#include <xen/linux/suspend.h>
#include <xen/io/domain_controller.h>
-#include <time.h>
#define BATCH_SIZE 1024 /* 1024 pages (4MB) at a time */
@@ -772,7 +776,7 @@
goto out;
}
- if ( get_pfn_type_batch(xc_handle, dom, batch, pfn_type) ){
+ if ( xc_get_pfn_type_batch(xc_handle, dom, batch, pfn_type) ){
ERR("get_pfn_type_batch failed");
goto out;
}
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xc_load_aout9.c
--- a/tools/libxc/xc_load_aout9.c Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xc_load_aout9.c Thu Aug 25 00:55:20 2005
@@ -1,5 +1,5 @@
-#include "xc_private.h"
+#include "xg_private.h"
#include "xc_aout9.h"
#if defined(__i386__)
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xc_load_bin.c
--- a/tools/libxc/xc_load_bin.c Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xc_load_bin.c Thu Aug 25 00:55:20 2005
@@ -66,7 +66,7 @@
* Free Software Foundation, Inc.
*/
-#include "xc_private.h"
+#include "xg_private.h"
#include <stdlib.h>
#define L1_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED)
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xc_load_elf.c
--- a/tools/libxc/xc_load_elf.c Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xc_load_elf.c Thu Aug 25 00:55:20 2005
@@ -2,7 +2,7 @@
* xc_elf_load.c
*/
-#include "xc_private.h"
+#include "xg_private.h"
#if defined(__i386__)
#define ELFSIZE 32
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xc_private.c
--- a/tools/libxc/xc_private.c Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xc_private.c Thu Aug 25 00:55:20 2005
@@ -64,8 +64,8 @@
/*******************/
/* NB: arr must be mlock'ed */
-int get_pfn_type_batch(int xc_handle,
- u32 dom, int num, unsigned long *arr)
+int xc_get_pfn_type_batch(int xc_handle,
+ u32 dom, int num, unsigned long *arr)
{
dom0_op_t op;
op.cmd = DOM0_GETPAGEFRAMEINFO2;
@@ -92,25 +92,40 @@
return op.u.getpageframeinfo.type;
}
-
-
-/*******************/
-
-int pin_table(
- int xc_handle, unsigned int type, unsigned long mfn, domid_t dom)
-{
- struct mmuext_op op;
-
- op.cmd = type;
- op.mfn = mfn;
-
- if ( do_mmuext_op(xc_handle, &op, 1, dom) < 0 )
- return 1;
-
- return 0;
-}
-
-static int flush_mmu_updates(int xc_handle, mmu_t *mmu)
+int xc_mmuext_op(
+ int xc_handle,
+ struct mmuext_op *op,
+ unsigned int nr_ops,
+ domid_t dom)
+{
+ privcmd_hypercall_t hypercall;
+ long ret = -EINVAL;
+
+ hypercall.op = __HYPERVISOR_mmuext_op;
+ hypercall.arg[0] = (unsigned long)op;
+ hypercall.arg[1] = (unsigned long)nr_ops;
+ hypercall.arg[2] = (unsigned long)0;
+ hypercall.arg[3] = (unsigned long)dom;
+
+ if ( mlock(op, nr_ops*sizeof(*op)) != 0 )
+ {
+ PERROR("Could not lock memory for Xen hypercall");
+ goto out1;
+ }
+
+ if ( (ret = do_xen_hypercall(xc_handle, &hypercall)) < 0 )
+ {
+ fprintf(stderr, "Dom_mem operation failed (rc=%ld errno=%d)-- need to"
+ " rebuild the user-space tool set?\n",ret,errno);
+ }
+
+ safe_munlock(op, nr_ops*sizeof(*op));
+
+ out1:
+ return ret;
+}
+
+static int flush_mmu_updates(int xc_handle, xc_mmu_t *mmu)
{
int err = 0;
privcmd_hypercall_t hypercall;
@@ -145,9 +160,9 @@
return err;
}
-mmu_t *init_mmu_updates(int xc_handle, domid_t dom)
-{
- mmu_t *mmu = malloc(sizeof(mmu_t));
+xc_mmu_t *xc_init_mmu_updates(int xc_handle, domid_t dom)
+{
+ xc_mmu_t *mmu = malloc(sizeof(xc_mmu_t));
if ( mmu == NULL )
return mmu;
mmu->idx = 0;
@@ -155,8 +170,8 @@
return mmu;
}
-int add_mmu_update(int xc_handle, mmu_t *mmu,
- unsigned long ptr, unsigned long val)
+int xc_add_mmu_update(int xc_handle, xc_mmu_t *mmu,
+ unsigned long ptr, unsigned long val)
{
mmu->updates[mmu->idx].ptr = ptr;
mmu->updates[mmu->idx].val = val;
@@ -167,10 +182,47 @@
return 0;
}
-int finish_mmu_updates(int xc_handle, mmu_t *mmu)
+int xc_finish_mmu_updates(int xc_handle, xc_mmu_t *mmu)
{
return flush_mmu_updates(xc_handle, mmu);
}
+
+int xc_dom_mem_op(int xc_handle,
+ unsigned int memop,
+ unsigned int *extent_list,
+ unsigned int nr_extents,
+ unsigned int extent_order,
+ domid_t domid)
+{
+ privcmd_hypercall_t hypercall;
+ long ret = -EINVAL;
+
+ hypercall.op = __HYPERVISOR_dom_mem_op;
+ hypercall.arg[0] = (unsigned long)memop;
+ hypercall.arg[1] = (unsigned long)extent_list;
+ hypercall.arg[2] = (unsigned long)nr_extents;
+ hypercall.arg[3] = (unsigned long)extent_order;
+ hypercall.arg[4] = (unsigned long)domid;
+
+ if ( (extent_list != NULL) &&
+ (mlock(extent_list, nr_extents*sizeof(unsigned long)) != 0) )
+ {
+ PERROR("Could not lock memory for Xen hypercall");
+ goto out1;
+ }
+
+ if ( (ret = do_xen_hypercall(xc_handle, &hypercall)) < 0 )
+ {
+ fprintf(stderr, "Dom_mem operation failed (rc=%ld errno=%d)-- need to"
+ " rebuild the user-space tool set?\n",ret,errno);
+ }
+
+ if ( extent_list != NULL )
+ safe_munlock(extent_list, nr_extents*sizeof(unsigned long));
+
+ out1:
+ return ret;
+}
long long xc_domain_get_cpu_usage( int xc_handle, domid_t domid, int vcpu )
@@ -189,19 +241,6 @@
return op.u.getvcpucontext.cpu_time;
}
-
-/* This is shared between save and restore, and may generally be useful. */
-unsigned long csum_page (void * page)
-{
- int i;
- unsigned long *p = page;
- unsigned long long sum=0;
-
- for ( i = 0; i < (PAGE_SIZE/sizeof(unsigned long)); i++ )
- sum += p[i];
-
- return sum ^ (sum>>32);
-}
unsigned long xc_get_m2p_start_mfn ( int xc_handle )
{
@@ -332,53 +371,6 @@
return sz;
}
-char *xc_read_kernel_image(const char *filename, unsigned long *size)
-{
- int kernel_fd = -1;
- gzFile kernel_gfd = NULL;
- char *image = NULL;
- unsigned int bytes;
-
- if ( (kernel_fd = open(filename, O_RDONLY)) < 0 )
- {
- PERROR("Could not open kernel image");
- goto out;
- }
-
- if ( (*size = xc_get_filesz(kernel_fd)) == 0 )
- {
- PERROR("Could not read kernel image");
- goto out;
- }
-
- if ( (kernel_gfd = gzdopen(kernel_fd, "rb")) == NULL )
- {
- PERROR("Could not allocate decompression state for state file");
- goto out;
- }
-
- if ( (image = malloc(*size)) == NULL )
- {
- PERROR("Could not allocate memory for kernel image");
- goto out;
- }
-
- if ( (bytes = gzread(kernel_gfd, image, *size)) != *size )
- {
- PERROR("Error reading kernel image, could not"
- " read the whole image (%d != %ld).", bytes, *size);
- free(image);
- image = NULL;
- }
-
- out:
- if ( kernel_gfd != NULL )
- gzclose(kernel_gfd);
- else if ( kernel_fd >= 0 )
- close(kernel_fd);
- return image;
-}
-
void xc_map_memcpy(unsigned long dst, char *src, unsigned long size,
int xch, u32 dom, unsigned long *parray,
unsigned long vstart)
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xc_private.h
--- a/tools/libxc/xc_private.h Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xc_private.h Thu Aug 25 00:55:20 2005
@@ -1,123 +1,25 @@
-#ifndef __XC_PRIVATE_H__
-#define __XC_PRIVATE_H__
+#ifndef XC_PRIVATE_H
+#define XC_PRIVATE_H
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
+#include <string.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <sys/ioctl.h>
-#include <errno.h>
-#include <string.h>
-#include "xc.h"
+#include "xenctrl.h"
#include <xen/linux/privcmd.h>
-#define _PAGE_PRESENT 0x001
-#define _PAGE_RW 0x002
-#define _PAGE_USER 0x004
-#define _PAGE_PWT 0x008
-#define _PAGE_PCD 0x010
-#define _PAGE_ACCESSED 0x020
-#define _PAGE_DIRTY 0x040
-#define _PAGE_PAT 0x080
-#define _PAGE_PSE 0x080
-#define _PAGE_GLOBAL 0x100
-
-#if defined(__i386__)
-#define L1_PAGETABLE_SHIFT 12
-#define L2_PAGETABLE_SHIFT 22
-#define L1_PAGETABLE_SHIFT_PAE 12
-#define L2_PAGETABLE_SHIFT_PAE 21
-#define L3_PAGETABLE_SHIFT_PAE 30
-#elif defined(__x86_64__)
-#define L1_PAGETABLE_SHIFT 12
-#define L2_PAGETABLE_SHIFT 21
-#define L3_PAGETABLE_SHIFT 30
-#define L4_PAGETABLE_SHIFT 39
-#endif
-
-#if defined(__i386__)
-#define ENTRIES_PER_L1_PAGETABLE 1024
-#define ENTRIES_PER_L2_PAGETABLE 1024
-#define L1_PAGETABLE_ENTRIES_PAE 512
-#define L2_PAGETABLE_ENTRIES_PAE 512
-#define L3_PAGETABLE_ENTRIES_PAE 4
-#elif defined(__x86_64__)
-#define L1_PAGETABLE_ENTRIES 512
-#define L2_PAGETABLE_ENTRIES 512
-#define L3_PAGETABLE_ENTRIES 512
-#define L4_PAGETABLE_ENTRIES 512
-#endif
-
#define PAGE_SHIFT XC_PAGE_SHIFT
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))
-
-typedef u32 l1_pgentry_32_t;
-typedef u32 l2_pgentry_32_t;
-typedef u64 l1_pgentry_64_t;
-typedef u64 l2_pgentry_64_t;
-typedef u64 l3_pgentry_64_t;
-typedef unsigned long l1_pgentry_t;
-typedef unsigned long l2_pgentry_t;
-#if defined(__x86_64__)
-typedef unsigned long l3_pgentry_t;
-typedef unsigned long l4_pgentry_t;
-#endif
-
-#if defined(__i386__)
-#define l1_table_offset(_a) \
- (((_a) >> L1_PAGETABLE_SHIFT) & (ENTRIES_PER_L1_PAGETABLE - 1))
-#define l2_table_offset(_a) \
- ((_a) >> L2_PAGETABLE_SHIFT)
-#define l1_table_offset_pae(_a) \
- (((_a) >> L1_PAGETABLE_SHIFT_PAE) & (L1_PAGETABLE_ENTRIES_PAE - 1))
-#define l2_table_offset_pae(_a) \
- (((_a) >> L2_PAGETABLE_SHIFT_PAE) & (L2_PAGETABLE_ENTRIES_PAE - 1))
-#define l3_table_offset_pae(_a) \
- (((_a) >> L3_PAGETABLE_SHIFT_PAE) & (L3_PAGETABLE_ENTRIES_PAE - 1))
-#elif defined(__x86_64__)
-#define l1_table_offset(_a) \
- (((_a) >> L1_PAGETABLE_SHIFT) & (L1_PAGETABLE_ENTRIES - 1))
-#define l2_table_offset(_a) \
- (((_a) >> L2_PAGETABLE_SHIFT) & (L2_PAGETABLE_ENTRIES - 1))
-#define l3_table_offset(_a) \
- (((_a) >> L3_PAGETABLE_SHIFT) & (L3_PAGETABLE_ENTRIES - 1))
-#define l4_table_offset(_a) \
- (((_a) >> L4_PAGETABLE_SHIFT) & (L4_PAGETABLE_ENTRIES - 1))
-#endif
-
-struct domain_setup_info
-{
- unsigned long v_start;
- unsigned long v_end;
- unsigned long v_kernstart;
- unsigned long v_kernend;
- unsigned long v_kernentry;
-
- unsigned int load_symtab;
- unsigned int pae_kernel;
- unsigned long symtab_addr;
- unsigned long symtab_len;
-};
-
-typedef int (*parseimagefunc)(char *image, unsigned long image_size,
- struct domain_setup_info *dsi);
-typedef int (*loadimagefunc)(char *image, unsigned long image_size, int xch,
- u32 dom, unsigned long *parray,
- struct domain_setup_info *dsi);
-
-struct load_funcs
-{
- parseimagefunc parseimage;
- loadimagefunc loadimage;
-};
#define ERROR(_m, _a...) \
do { \
@@ -186,97 +88,6 @@
return ret;
}
-static inline int do_dom_mem_op(int xc_handle,
- unsigned int memop,
- unsigned int *extent_list,
- unsigned int nr_extents,
- unsigned int extent_order,
- domid_t domid)
-{
- privcmd_hypercall_t hypercall;
- long ret = -EINVAL;
-
- hypercall.op = __HYPERVISOR_dom_mem_op;
- hypercall.arg[0] = (unsigned long)memop;
- hypercall.arg[1] = (unsigned long)extent_list;
- hypercall.arg[2] = (unsigned long)nr_extents;
- hypercall.arg[3] = (unsigned long)extent_order;
- hypercall.arg[4] = (unsigned long)domid;
-
- if ( (extent_list != NULL) &&
- (mlock(extent_list, nr_extents*sizeof(unsigned long)) != 0) )
- {
- PERROR("Could not lock memory for Xen hypercall");
- goto out1;
- }
-
- if ( (ret = do_xen_hypercall(xc_handle, &hypercall)) < 0 )
- {
- fprintf(stderr, "Dom_mem operation failed (rc=%ld errno=%d)-- need to"
- " rebuild the user-space tool set?\n",ret,errno);
- }
-
- if ( extent_list != NULL )
- safe_munlock(extent_list, nr_extents*sizeof(unsigned long));
-
- out1:
- return ret;
-}
-
-static inline int do_mmuext_op(
- int xc_handle,
- struct mmuext_op *op,
- unsigned int nr_ops,
- domid_t dom)
-{
- privcmd_hypercall_t hypercall;
- long ret = -EINVAL;
-
- hypercall.op = __HYPERVISOR_mmuext_op;
- hypercall.arg[0] = (unsigned long)op;
- hypercall.arg[1] = (unsigned long)nr_ops;
- hypercall.arg[2] = (unsigned long)0;
- hypercall.arg[3] = (unsigned long)dom;
-
- if ( mlock(op, nr_ops*sizeof(*op)) != 0 )
- {
- PERROR("Could not lock memory for Xen hypercall");
- goto out1;
- }
-
- if ( (ret = do_xen_hypercall(xc_handle, &hypercall)) < 0 )
- {
- fprintf(stderr, "Dom_mem operation failed (rc=%ld errno=%d)-- need to"
- " rebuild the user-space tool set?\n",ret,errno);
- }
-
- safe_munlock(op, nr_ops*sizeof(*op));
-
- out1:
- return ret;
-}
-
-
-/*
- * PFN mapping.
- */
-int get_pfn_type_batch(int xc_handle, u32 dom, int num, unsigned long *arr);
-unsigned long csum_page (void * page);
-
-/*
- * MMU updates.
- */
-#define MAX_MMU_UPDATES 1024
-typedef struct {
- mmu_update_t updates[MAX_MMU_UPDATES];
- int idx;
- domid_t subject;
-} mmu_t;
-mmu_t *init_mmu_updates(int xc_handle, domid_t dom);
-int add_mmu_update(int xc_handle, mmu_t *mmu,
- unsigned long ptr, unsigned long val);
-int finish_mmu_updates(int xc_handle, mmu_t *mmu);
-
/*
* ioctl-based mfn mapping interface
@@ -296,38 +107,4 @@
} privcmd_mmap_t;
*/
-#define mfn_mapper_queue_size 128
-
-typedef struct mfn_mapper {
- int xc_handle;
- int size;
- int prot;
- int error;
- int max_queue_size;
- void * addr;
- privcmd_mmap_t ioctl;
-
-} mfn_mapper_t;
-
-unsigned long xc_get_m2p_start_mfn (int xc_handle);
-
-int xc_copy_to_domain_page(int xc_handle, u32 domid,
- unsigned long dst_pfn, void *src_page);
-
-unsigned long xc_get_filesz(int fd);
-
-char *xc_read_kernel_image(const char *filename, unsigned long *size);
-
-void xc_map_memcpy(unsigned long dst, char *src, unsigned long size,
- int xch, u32 dom, unsigned long *parray,
- unsigned long vstart);
-
-int pin_table(int xc_handle, unsigned int type, unsigned long mfn,
- domid_t dom);
-
-/* image loading */
-int probe_elf(char *image, unsigned long image_size, struct load_funcs *funcs);
-int probe_bin(char *image, unsigned long image_size, struct load_funcs *funcs);
-int probe_aout9(char *image, unsigned long image_size, struct load_funcs
*funcs);
-
#endif /* __XC_PRIVATE_H__ */
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xc_vmx_build.c
--- a/tools/libxc/xc_vmx_build.c Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xc_vmx_build.c Thu Aug 25 00:55:20 2005
@@ -3,7 +3,7 @@
*/
#include <stddef.h>
-#include "xc_private.h"
+#include "xg_private.h"
#define ELFSIZE 32
#include "xc_elf.h"
#include <stdlib.h>
@@ -243,7 +243,7 @@
shared_info_t *shared_info;
struct linux_boot_params * boot_paramsp;
__u16 * boot_gdtp;
- mmu_t *mmu = NULL;
+ xc_mmu_t *mmu = NULL;
int rc;
unsigned long nr_pt_pages;
@@ -358,7 +358,7 @@
}
}
- if ( (mmu = init_mmu_updates(xc_handle, dom)) == NULL )
+ if ( (mmu = xc_init_mmu_updates(xc_handle, dom)) == NULL )
goto error_out;
#ifdef __i386__
@@ -459,9 +459,9 @@
/* Write the machine->phys table entries. */
for ( count = 0; count < nr_pages; count++ )
{
- if ( add_mmu_update(xc_handle, mmu,
- (page_array[count] << PAGE_SHIFT) |
- MMU_MACHPHYS_UPDATE, count) )
+ if ( xc_add_mmu_update(xc_handle, mmu,
+ (page_array[count] << PAGE_SHIFT) |
+ MMU_MACHPHYS_UPDATE, count) )
goto error_out;
}
@@ -587,7 +587,7 @@
#endif
/* Send the page update requests down to the hypervisor. */
- if ( finish_mmu_updates(xc_handle, mmu) )
+ if ( xc_finish_mmu_updates(xc_handle, mmu) )
goto error_out;
free(mmu);
@@ -708,7 +708,7 @@
op.cmd = DOM0_GETDOMAININFO;
op.u.getdomaininfo.domain = (domid_t)domid;
- if ( (do_dom0_op(xc_handle, &op) < 0) ||
+ if ( (xc_dom0_op(xc_handle, &op) < 0) ||
((u16)op.u.getdomaininfo.domain != domid) )
{
PERROR("Could not get info on domain");
@@ -789,7 +789,7 @@
launch_op.u.setdomaininfo.ctxt = ctxt;
launch_op.cmd = DOM0_SETDOMAININFO;
- rc = do_dom0_op(xc_handle, &launch_op);
+ rc = xc_dom0_op(xc_handle, &launch_op);
return rc;
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/misc/Makefile
--- a/tools/misc/Makefile Wed Aug 24 22:24:10 2005
+++ b/tools/misc/Makefile Thu Aug 25 00:55:20 2005
@@ -50,4 +50,4 @@
$(CC) -c $(CFLAGS) -o $@ $<
$(TARGETS): %: %.o Makefile
- $(CC) $(CFLAGS) -o $@ $< -L$(XEN_LIBXC) -lxc
+ $(CC) $(CFLAGS) -o $@ $< -L$(XEN_LIBXC) -lxenctrl
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/misc/cpuperf/Makefile
--- a/tools/misc/cpuperf/Makefile Wed Aug 24 22:24:10 2005
+++ b/tools/misc/cpuperf/Makefile Thu Aug 25 00:55:20 2005
@@ -37,7 +37,7 @@
$(CC) $(CFLAGS) -o $@ $<
cpuperf-xen: cpuperf.c $(HDRS) Makefile
- $(CC) $(CFLAGS) -I $(XEN_LIBXC) -L$(XEN_LIBXC) -lxc -DXENO -o $@ $<
+ $(CC) $(CFLAGS) -I $(XEN_LIBXC) -L$(XEN_LIBXC) -lxenctrl -DXENO -o $@ $<
cpuperf-perfcntr: cpuperf.c $(HDRS) Makefile
$(CC) $(CFLAGS) -DPERFCNTR -o $@ $<
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/misc/cpuperf/cpuperf_xeno.h
--- a/tools/misc/cpuperf/cpuperf_xeno.h Wed Aug 24 22:24:10 2005
+++ b/tools/misc/cpuperf/cpuperf_xeno.h Thu Aug 25 00:55:20 2005
@@ -9,7 +9,7 @@
*
*/
-#include <xc.h>
+#include <xenctrl.h>
static int xc_handle;
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/misc/xc_shadow.c
--- a/tools/misc/xc_shadow.c Wed Aug 24 22:24:10 2005
+++ b/tools/misc/xc_shadow.c Thu Aug 25 00:55:20 2005
@@ -11,7 +11,7 @@
*/
-#include <xc.h>
+#include <xenctrl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/misc/xenperf.c
--- a/tools/misc/xenperf.c Wed Aug 24 22:24:10 2005
+++ b/tools/misc/xenperf.c Thu Aug 25 00:55:20 2005
@@ -11,7 +11,7 @@
*/
-#include <xc.h>
+#include <xenctrl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/python/setup.py
--- a/tools/python/setup.py Wed Aug 24 22:24:10 2005
+++ b/tools/python/setup.py Thu Aug 25 00:55:20 2005
@@ -17,7 +17,7 @@
XEN_ROOT + "/tools/xenstore",
]
-libraries = [ "xc", "xenstore" ]
+libraries = [ "xenctrl", "xenguest", "xenstore" ]
xc = Extension("xc",
extra_compile_args = extra_compile_args,
@@ -41,7 +41,7 @@
sources = [ "xen/lowlevel/xs/xs.c" ])
setup(name = 'xen',
- version = '2.0',
+ version = '3.0',
description = 'Xen',
packages = ['xen',
'xen.lowlevel',
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c Wed Aug 24 22:24:10 2005
+++ b/tools/python/xen/lowlevel/xc/xc.c Thu Aug 25 00:55:20 2005
@@ -5,7 +5,8 @@
*/
#include <Python.h>
-#include <xc.h>
+#include <xenctrl.h>
+#include <xenguest.h>
#include <zlib.h>
#include <fcntl.h>
#include <netinet/in.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/python/xen/lowlevel/xu/xu.c
--- a/tools/python/xen/lowlevel/xu/xu.c Wed Aug 24 22:24:10 2005
+++ b/tools/python/xen/lowlevel/xu/xu.c Thu Aug 25 00:55:20 2005
@@ -21,7 +21,7 @@
#include <unistd.h>
#include <errno.h>
#include <signal.h>
-#include <xc.h>
+#include <xenctrl.h>
#include <xen/xen.h>
#include <xen/io/domain_controller.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/xcs/Makefile
--- a/tools/xcs/Makefile Wed Aug 24 22:24:10 2005
+++ b/tools/xcs/Makefile Thu Aug 25 00:55:20 2005
@@ -34,10 +34,10 @@
xcsdump: xcsdump.c dump.c
$(CC) $(CFLAGS) -o xcsdump xcsdump.c -L$(XEN_LIBXC) \
- ctrl_interface.c evtchn.c dump.c -lxc
+ ctrl_interface.c evtchn.c dump.c -lxenctrl
$(BIN): $(OBJS)
- $(CC) $(CFLAGS) $^ -o $@ -L$(XEN_LIBXC) -lxc
+ $(CC) $(CFLAGS) $^ -o $@ -L$(XEN_LIBXC) -lxenctrl
$(OBJS): $(HDRS)
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/xcs/dump.h
--- a/tools/xcs/dump.h Wed Aug 24 22:24:10 2005
+++ b/tools/xcs/dump.h Thu Aug 25 00:55:20 2005
@@ -20,7 +20,7 @@
#define XENCTLD_ERROR_H
#include <stdint.h>
-#include <xc.h>
+#include <xenctrl.h>
#include <xen/io/domain_controller.h>
void dump_msg(const control_msg_t *msg, uint64_t flags);
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/xcs/xcs.h
--- a/tools/xcs/xcs.h Wed Aug 24 22:24:10 2005
+++ b/tools/xcs/xcs.h Thu Aug 25 00:55:20 2005
@@ -11,7 +11,7 @@
#define __XCS_H__
#include <pthread.h>
-#include <xc.h>
+#include <xenctrl.h>
#include <xen/xen.h>
#include <xen/io/domain_controller.h>
#include <xen/linux/privcmd.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/xcs/xcsdump.c
--- a/tools/xcs/xcsdump.c Wed Aug 24 22:24:10 2005
+++ b/tools/xcs/xcsdump.c Thu Aug 25 00:55:20 2005
@@ -16,7 +16,7 @@
#include <sys/socket.h>
#include <sys/un.h>
#include <ctype.h>
-#include <xc.h>
+#include <xenctrl.h>
#include <xen/xen.h>
#include <xen/io/domain_controller.h>
#include <getopt.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/xcutils/Makefile
--- a/tools/xcutils/Makefile Wed Aug 24 22:24:10 2005
+++ b/tools/xcutils/Makefile Thu Aug 25 00:55:20 2005
@@ -30,7 +30,7 @@
PROGRAMS = xc_restore xc_save
-LDLIBS = -L$(XEN_LIBXC) -lxc
+LDLIBS = -L$(XEN_LIBXC) -lxenguest -lxenctrl
.PHONY: all
all: build
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/xcutils/xc_restore.c
--- a/tools/xcutils/xc_restore.c Wed Aug 24 22:24:10 2005
+++ b/tools/xcutils/xc_restore.c Thu Aug 25 00:55:20 2005
@@ -7,11 +7,12 @@
*
*/
+#include <err.h>
#include <stdlib.h>
+#include <stdint.h>
#include <stdio.h>
-#include <err.h>
-#include <xc.h>
+#include <xenguest.h>
int
main(int argc, char **argv)
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/xcutils/xc_save.c
--- a/tools/xcutils/xc_save.c Wed Aug 24 22:24:10 2005
+++ b/tools/xcutils/xc_save.c Thu Aug 25 00:55:20 2005
@@ -7,11 +7,12 @@
*
*/
+#include <err.h>
#include <stdlib.h>
+#include <stdint.h>
#include <stdio.h>
-#include <err.h>
-#include <xc.h>
+#include <xenguest.h>
int
main(int argc, char **argv)
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/xenstore/Makefile
--- a/tools/xenstore/Makefile Wed Aug 24 22:24:10 2005
+++ b/tools/xenstore/Makefile Thu Aug 25 00:55:20 2005
@@ -32,7 +32,7 @@
ln -sf $(XEN_ROOT)/xen/include/public $@
xenstored: xenstored_core.o xenstored_watch.o xenstored_domain.o
xenstored_transaction.o xs_lib.o talloc.o utils.o
- $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -lxc -o $@
+ $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -lxenctrl -o $@
xenstored_test: xenstored_core_test.o xenstored_watch_test.o
xenstored_domain_test.o xenstored_transaction_test.o xs_lib.o talloc_test.o
fake_libxc.o utils.o
$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@
@@ -103,7 +103,7 @@
export $(TESTENV); PID=`./xenstored_test --output-pid
--trace-file=/tmp/trace`; ./xs_stress 5000; ret=$$?; kill $$PID; exit $$ret
xs_dom0_test: xs_dom0_test.o utils.o
- $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -lxc -o $@
+ $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -lxenctrl -o $@
TAGS:
etags `find . -name '*.[ch]'`
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/xenstore/xs_dom0_test.c
--- a/tools/xenstore/xs_dom0_test.c Wed Aug 24 22:24:10 2005
+++ b/tools/xenstore/xs_dom0_test.c Thu Aug 25 00:55:20 2005
@@ -3,7 +3,7 @@
#include <sys/ioctl.h>
#include "xs.h"
#include "utils.h"
-#include <xc.h>
+#include <xenctrl.h>
#include <xen/linux/privcmd.h>
#include <stdio.h>
#include <unistd.h>
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/xenstore/xs_lib.h
--- a/tools/xenstore/xs_lib.h Wed Aug 24 22:24:10 2005
+++ b/tools/xenstore/xs_lib.h Thu Aug 25 00:55:20 2005
@@ -22,7 +22,7 @@
#include <stdbool.h>
#include <limits.h>
-#include <xc.h>
+#include <xenctrl.h>
/* Bitmask of permissions. */
enum xs_perm_type {
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/xentrace/Makefile
--- a/tools/xentrace/Makefile Wed Aug 24 22:24:10 2005
+++ b/tools/xentrace/Makefile Thu Aug 25 00:55:20 2005
@@ -36,4 +36,4 @@
$(RM) *.a *.so *.o *.rpm $(BIN)
%: %.c $(HDRS) Makefile
- $(CC) $(CFLAGS) -o $@ $< -L$(XEN_LIBXC) -lxc
+ $(CC) $(CFLAGS) -o $@ $< -L$(XEN_LIBXC) -lxenctrl
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/xentrace/xenctx.c
--- a/tools/xentrace/xenctx.c Wed Aug 24 22:24:10 2005
+++ b/tools/xentrace/xenctx.c Thu Aug 25 00:55:20 2005
@@ -21,7 +21,7 @@
#include <argp.h>
#include <signal.h>
-#include "xc.h"
+#include "xenctrl.h"
#ifdef __i386__
void print_ctx(vcpu_guest_context_t *ctx1)
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xenctrl.h
--- /dev/null Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xenctrl.h Thu Aug 25 00:55:20 2005
@@ -0,0 +1,526 @@
+/******************************************************************************
+ * xenctrl.h
+ *
+ * A library for low-level access to the Xen control interfaces.
+ *
+ * Copyright (c) 2003-2004, K A Fraser.
+ */
+
+#ifndef XENCTRL_H
+#define XENCTRL_H
+
+#include <stdint.h>
+
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+typedef uint64_t u64;
+typedef int8_t s8;
+typedef int16_t s16;
+typedef int32_t s32;
+typedef int64_t s64;
+
+#include <sys/ptrace.h>
+#include <xen/xen.h>
+#include <xen/dom0_ops.h>
+#include <xen/event_channel.h>
+#include <xen/sched_ctl.h>
+#include <xen/acm.h>
+
+#ifdef __ia64__
+#define XC_PAGE_SHIFT 14
+#else
+#define XC_PAGE_SHIFT 12
+#endif
+#define XC_PAGE_SIZE (1UL << XC_PAGE_SHIFT)
+#define XC_PAGE_MASK (~(XC_PAGE_SIZE-1))
+
+/*
+ * DEFINITIONS FOR CPU BARRIERS
+ */
+
+#if defined(__i386__)
+#define mb() __asm__ __volatile__ ( "lock; addl $0,0(%%esp)" : : : "memory" )
+#define rmb() __asm__ __volatile__ ( "lock; addl $0,0(%%esp)" : : : "memory" )
+#define wmb() __asm__ __volatile__ ( "" : : : "memory")
+#elif defined(__x86_64__)
+#define mb() __asm__ __volatile__ ( "mfence" : : : "memory")
+#define rmb() __asm__ __volatile__ ( "lfence" : : : "memory")
+#define wmb() __asm__ __volatile__ ( "" : : : "memory")
+#elif defined(__ia64__)
+/* FIXME */
+#define mb()
+#define rmb()
+#define wmb()
+#else
+#error "Define barriers"
+#endif
+
+/*
+ * INITIALIZATION FUNCTIONS
+ */
+
+/**
+ * This function opens a handle to the hypervisor interface. This function can
+ * be called multiple times within a single process. Multiple processes can
+ * have an open hypervisor interface at the same time.
+ *
+ * Each call to this function should have a corresponding call to
+ * xc_interface_close().
+ *
+ * This function can fail if the caller does not have superuser permission or
+ * if a Xen-enabled kernel is not currently running.
+ *
+ * @return a handle to the hypervisor interface or -1 on failure
+ */
+int xc_interface_open(void);
+
+/**
+ * This function closes an open hypervisor interface.
+ *
+ * This function can fail if the handle does not represent an open interface or
+ * if there were problems closing the interface.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @return 0 on success, -1 otherwise.
+ */
+int xc_interface_close(int xc_handle);
+
+/*
+ * DOMAIN DEBUGGING FUNCTIONS
+ */
+
+typedef struct xc_core_header {
+ unsigned int xch_magic;
+ unsigned int xch_nr_vcpus;
+ unsigned int xch_nr_pages;
+ unsigned int xch_ctxt_offset;
+ unsigned int xch_index_offset;
+ unsigned int xch_pages_offset;
+} xc_core_header_t;
+
+
+long xc_ptrace(enum __ptrace_request request,
+ u32 domid,
+ long addr,
+ long data);
+
+long xc_ptrace_core(enum __ptrace_request request,
+ u32 domid,
+ long addr,
+ long data);
+
+int xc_waitdomain(int domain,
+ int *status,
+ int options);
+
+int xc_waitdomain_core(int domain,
+ int *status,
+ int options);
+
+/*
+ * DOMAIN MANAGEMENT FUNCTIONS
+ */
+
+typedef struct {
+ u32 domid;
+ u32 ssidref;
+ unsigned int dying:1, crashed:1, shutdown:1,
+ paused:1, blocked:1, running:1;
+ unsigned int shutdown_reason; /* only meaningful if shutdown==1 */
+ unsigned long nr_pages;
+ unsigned long shared_info_frame;
+ u64 cpu_time;
+ unsigned long max_memkb;
+ unsigned int vcpus;
+ s32 vcpu_to_cpu[MAX_VIRT_CPUS];
+ cpumap_t cpumap[MAX_VIRT_CPUS];
+} xc_dominfo_t;
+
+typedef dom0_getdomaininfo_t xc_domaininfo_t;
+int xc_domain_create(int xc_handle,
+ u32 ssidref,
+ u32 *pdomid);
+
+
+int xc_domain_dumpcore(int xc_handle,
+ u32 domid,
+ const char *corename);
+
+
+/**
+ * This function pauses a domain. A paused domain still exists in memory
+ * however it does not receive any timeslices from the hypervisor.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm domid the domain id to pause
+ * @return 0 on success, -1 on failure.
+ */
+int xc_domain_pause(int xc_handle,
+ u32 domid);
+/**
+ * This function unpauses a domain. The domain should have been previously
+ * paused.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm domid the domain id to unpause
+ * return 0 on success, -1 on failure
+ */
+int xc_domain_unpause(int xc_handle,
+ u32 domid);
+
+/**
+ * This function will destroy a domain. Destroying a domain removes the domain
+ * completely from memory. This function should be called after sending the
+ * domain a SHUTDOWN control message to free up the domain resources.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm domid the domain id to destroy
+ * @return 0 on success, -1 on failure
+ */
+int xc_domain_destroy(int xc_handle,
+ u32 domid);
+int xc_domain_pincpu(int xc_handle,
+ u32 domid,
+ int vcpu,
+ cpumap_t *cpumap);
+/**
+ * This function will return information about one or more domains. It is
+ * designed to iterate over the list of domains. If a single domain is
+ * requested, this function will return the next domain in the list - if
+ * one exists. It is, therefore, important in this case to make sure the
+ * domain requested was the one returned.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm first_domid the first domain to enumerate information from. Domains
+ * are currently enumerate in order of creation.
+ * @parm max_doms the number of elements in info
+ * @parm info an array of max_doms size that will contain the information for
+ * the enumerated domains.
+ * @return the number of domains enumerated or -1 on error
+ */
+int xc_domain_getinfo(int xc_handle,
+ u32 first_domid,
+ unsigned int max_doms,
+ xc_dominfo_t *info);
+
+/**
+ * This function will return information about one or more domains, using a
+ * single hypercall. The domain information will be stored into the supplied
+ * array of xc_domaininfo_t structures.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm first_domain the first domain to enumerate information from.
+ * Domains are currently enumerate in order of creation.
+ * @parm max_domains the number of elements in info
+ * @parm info an array of max_doms size that will contain the information for
+ * the enumerated domains.
+ * @return the number of domains enumerated or -1 on error
+ */
+int xc_domain_getinfolist(int xc_handle,
+ u32 first_domain,
+ unsigned int max_domains,
+ xc_domaininfo_t *info);
+
+/**
+ * This function returns information about one domain. This information is
+ * more detailed than the information from xc_domain_getinfo().
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm domid the domain to get information from
+ * @parm info a pointer to an xc_domaininfo_t to store the domain information
+ * @parm ctxt a pointer to a structure to store the execution context of the
+ * domain
+ * @return 0 on success, -1 on failure
+ */
+int xc_domain_get_vcpu_context(int xc_handle,
+ u32 domid,
+ u32 vcpu,
+ vcpu_guest_context_t *ctxt);
+
+int xc_domain_setcpuweight(int xc_handle,
+ u32 domid,
+ float weight);
+long long xc_domain_get_cpu_usage(int xc_handle,
+ domid_t domid,
+ int vcpu);
+
+
+typedef dom0_shadow_control_stats_t xc_shadow_control_stats_t;
+int xc_shadow_control(int xc_handle,
+ u32 domid,
+ unsigned int sop,
+ unsigned long *dirty_bitmap,
+ unsigned long pages,
+ xc_shadow_control_stats_t *stats);
+
+int xc_bvtsched_global_set(int xc_handle,
+ unsigned long ctx_allow);
+
+int xc_bvtsched_domain_set(int xc_handle,
+ u32 domid,
+ u32 mcuadv,
+ int warpback,
+ s32 warpvalue,
+ long long warpl,
+ long long warpu);
+
+int xc_bvtsched_global_get(int xc_handle,
+ unsigned long *ctx_allow);
+
+int xc_bvtsched_domain_get(int xc_handle,
+ u32 domid,
+ u32 *mcuadv,
+ int *warpback,
+ s32 *warpvalue,
+ long long *warpl,
+ long long *warpu);
+
+int xc_sedf_domain_set(int xc_handle,
+ u32 domid,
+ u64 period, u64 slice, u64 latency, u16 extratime,
u16 weight);
+
+int xc_sedf_domain_get(int xc_handle,
+ u32 domid,
+ u64* period, u64 *slice, u64 *latency, u16
*extratime, u16* weight);
+
+typedef evtchn_status_t xc_evtchn_status_t;
+
+/*
+ * EVENT CHANNEL FUNCTIONS
+ */
+
+/**
+ * This function allocates an unbound port. Ports are named endpoints used for
+ * interdomain communication. This function is most useful in opening a
+ * well-known port within a domain to receive events on.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm dom the ID of the domain. This maybe DOMID_SELF
+ * @parm port a pointer to a port. This is an in/out parameter. If *port is
+ * 0, then a new port will be assigned, if port is > 0 then that
+ * port is allocated if the port is unallocated.
+ * @return 0 on success, -1 on failure
+ */
+int xc_evtchn_alloc_unbound(int xc_handle,
+ u32 dom,
+ int *port);
+
+/**
+ * This function creates a pair of ports between two domains. A port can only
+ * be bound once within a domain.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm dom1 one of the two domains to connect. Can be DOMID_SELF.
+ * @parm dom2 the other domain to connect. Can be DOMID_SELF.
+ * @parm port1 an in/out parameter. If > 0, then try to connect *port. If
+ * 0, then allocate a new port and store the port in *port.
+ * @parm port2 the port connected on port2. This parameter behaves the same
+ * way as port1.
+ * @return 0 on success, -1 on error.
+ */
+int xc_evtchn_bind_interdomain(int xc_handle,
+ u32 dom1,
+ u32 dom2,
+ int *port1,
+ int *port2);
+int xc_evtchn_bind_virq(int xc_handle,
+ int virq,
+ int *port);
+
+/**
+ * This function will close a single port on an event channel.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm dom the domain that the port exists on. May be DOMID_SELF.
+ * @parm port the port to close
+ * @return 0 on success, -1 on error
+ */
+int xc_evtchn_close(int xc_handle,
+ u32 dom, /* may be DOMID_SELF */
+ int port);
+
+/**
+ * This function generates a notify event on a bound port.
+ *
+ * Notifies can be read within Linux by opening /dev/xen/evtchn and reading
+ * a 16 bit value. The result will be the port the event occurred on. When
+ * events occur, the port is masked until the 16 bit port value is written back
+ * to the file. When /dev/xen/evtchn is opened, it has to be bound via an
+ * ioctl to each port to listen on. The ioctl for binding is _IO('E', 2). The
+ * parameter is the port to listen on.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm local_port the port to generate the notify on
+ * @return 0 on success, -1 on error
+ */
+int xc_evtchn_send(int xc_handle,
+ int local_port);
+int xc_evtchn_status(int xc_handle,
+ u32 dom, /* may be DOMID_SELF */
+ int port,
+ xc_evtchn_status_t *status);
+
+int xc_physdev_pci_access_modify(int xc_handle,
+ u32 domid,
+ int bus,
+ int dev,
+ int func,
+ int enable);
+
+int xc_readconsolering(int xc_handle,
+ char **pbuffer,
+ unsigned int *pnr_chars,
+ int clear);
+
+typedef dom0_physinfo_t xc_physinfo_t;
+int xc_physinfo(int xc_handle,
+ xc_physinfo_t *info);
+
+int xc_sched_id(int xc_handle,
+ int *sched_id);
+
+int xc_domain_setmaxmem(int xc_handle,
+ u32 domid,
+ unsigned int max_memkb);
+
+int xc_domain_memory_increase_reservation(int xc_handle,
+ u32 domid,
+ unsigned int mem_kb);
+
+typedef dom0_perfc_desc_t xc_perfc_desc_t;
+/* IMPORTANT: The caller is responsible for mlock()'ing the @desc array. */
+int xc_perfc_control(int xc_handle,
+ u32 op,
+ xc_perfc_desc_t *desc);
+
+/* read/write msr */
+long long xc_msr_read(int xc_handle, int cpu_mask, int msr);
+int xc_msr_write(int xc_handle, int cpu_mask, int msr, unsigned int low,
+ unsigned int high);
+
+/**
+ * Memory maps a range within one domain to a local address range. Mappings
+ * should be unmapped with munmap and should follow the same rules as mmap
+ * regarding page alignment. Returns NULL on failure.
+ *
+ * In Linux, the ring queue for the control channel is accessible by mapping
+ * the shared_info_frame (from xc_domain_getinfo()) + 2048. The structure
+ * stored there is of type control_if_t.
+ *
+ * @parm xc_handle a handle on an open hypervisor interface
+ * @parm dom the domain to map memory from
+ * @parm size the amount of memory to map (in multiples of page size)
+ * @parm prot same flag as in mmap().
+ * @parm mfn the frame address to map.
+ */
+void *xc_map_foreign_range(int xc_handle, u32 dom,
+ int size, int prot,
+ unsigned long mfn );
+
+void *xc_map_foreign_batch(int xc_handle, u32 dom, int prot,
+ unsigned long *arr, int num );
+
+int xc_get_pfn_list(int xc_handle, u32 domid, unsigned long *pfn_buf,
+ unsigned long max_pfns);
+
+int xc_ia64_get_pfn_list(int xc_handle, u32 domid, unsigned long *pfn_buf,
+ unsigned int start_page, unsigned int nr_pages);
+
+int xc_mmuext_op(int xc_handle, struct mmuext_op *op, unsigned int nr_ops,
+ domid_t dom);
+
+int xc_dom_mem_op(int xc_handle, unsigned int memop, unsigned int *extent_list,
+ unsigned int nr_extents, unsigned int extent_order,
+ domid_t domid);
+
+int xc_get_pfn_type_batch(int xc_handle, u32 dom, int num, unsigned long *arr);
+
+
+/*\
+ * GRANT TABLE FUNCTIONS
+\*/
+
+/**
+ * This function opens a handle to the more restricted grant table hypervisor
+ * interface. This may be used where the standard interface is not
+ * available because the domain is not privileged.
+ * This function can be called multiple times within a single process.
+ * Multiple processes can have an open hypervisor interface at the same time.
+ *
+ * Each call to this function should have a corresponding call to
+ * xc_grant_interface_close().
+ *
+ * This function can fail if a Xen-enabled kernel is not currently running.
+ *
+ * @return a handle to the hypervisor grant table interface or -1 on failure
+ */
+int xc_grant_interface_open(void);
+
+/**
+ * This function closes an open grant table hypervisor interface.
+ *
+ * This function can fail if the handle does not represent an open interface or
+ * if there were problems closing the interface.
+ *
+ * @parm xc_handle a handle to an open grant table hypervisor interface
+ * @return 0 on success, -1 otherwise.
+ */
+int xc_grant_interface_close(int xc_handle);
+
+int xc_gnttab_map_grant_ref(int xc_handle,
+ u64 host_virt_addr,
+ u32 dom,
+ u16 ref,
+ u16 flags,
+ s16 *handle,
+ u64 *dev_bus_addr);
+
+int xc_gnttab_unmap_grant_ref(int xc_handle,
+ u64 host_virt_addr,
+ u64 dev_bus_addr,
+ u16 handle,
+ s16 *status);
+
+int xc_gnttab_setup_table(int xc_handle,
+ u32 dom,
+ u16 nr_frames,
+ s16 *status,
+ unsigned long **frame_list);
+
+/* Grant debug builds only: */
+int xc_gnttab_dump_table(int xc_handle,
+ u32 dom,
+ s16 *status);
+
+/* Get current total pages allocated to a domain. */
+long xc_get_tot_pages(int xc_handle, u32 domid);
+
+/* Execute a privileged dom0 operation. */
+int xc_dom0_op(int xc_handle, dom0_op_t *op);
+
+/* Initializes the store (for dom0)
+ remote_port should be the remote end of a bound interdomain channel between
+ the store and dom0.
+
+ This function returns a shared frame that should be passed to
+ xs_introduce_domain
+ */
+long xc_init_store(int xc_handle, int remote_port);
+
+/*
+ * MMU updates.
+ */
+#define MAX_MMU_UPDATES 1024
+struct xc_mmu {
+ mmu_update_t updates[MAX_MMU_UPDATES];
+ int idx;
+ domid_t subject;
+};
+typedef struct xc_mmu xc_mmu_t;
+xc_mmu_t *xc_init_mmu_updates(int xc_handle, domid_t dom);
+int xc_add_mmu_update(int xc_handle, xc_mmu_t *mmu,
+ unsigned long ptr, unsigned long val);
+int xc_finish_mmu_updates(int xc_handle, xc_mmu_t *mmu);
+
+#endif
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xenguest.h
--- /dev/null Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xenguest.h Thu Aug 25 00:55:20 2005
@@ -0,0 +1,66 @@
+/******************************************************************************
+ * xenguest.h
+ *
+ * A library for guest domain management in Xen.
+ *
+ * Copyright (c) 2003-2004, K A Fraser.
+ */
+
+#ifndef XENBUILD_H
+#define XENBUILD_H
+
+#define XCFLAGS_VERBOSE 1
+#define XCFLAGS_LIVE 2
+#define XCFLAGS_DEBUG 4
+#define XCFLAGS_CONFIGURE 8
+
+/**
+ * This function will save a domain running Linux.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm fd the file descriptor to save a domain to
+ * @parm dom the id of the domain
+ * @return 0 on success, -1 on failure
+ */
+int xc_linux_save(int xc_handle, int fd, uint32_t dom);
+
+/**
+ * This function will restore a saved domain running Linux.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm fd the file descriptor to restore a domain from
+ * @parm dom the id of the domain
+ * @parm nr_pfns the number of pages
+ * @parm store_evtchn the store event channel for this domain to use
+ * @parm store_mfn returned with the mfn of the store page
+ * @return 0 on success, -1 on failure
+ */
+int xc_linux_restore(int xc_handle, int io_fd, uint32_t dom, unsigned long
nr_pfns,
+ unsigned int store_evtchn, unsigned long *store_mfn);
+
+int xc_linux_build(int xc_handle,
+ uint32_t domid,
+ const char *image_name,
+ const char *ramdisk_name,
+ const char *cmdline,
+ unsigned int control_evtchn,
+ unsigned long flags,
+ unsigned int vcpus,
+ unsigned int store_evtchn,
+ unsigned long *store_mfn);
+
+struct mem_map;
+int xc_vmx_build(int xc_handle,
+ uint32_t domid,
+ int memsize,
+ const char *image_name,
+ struct mem_map *memmap,
+ const char *ramdisk_name,
+ const char *cmdline,
+ unsigned int control_evtchn,
+ unsigned long flags,
+ unsigned int vcpus,
+ unsigned int store_evtchn,
+ unsigned long *store_mfn);
+
+#endif
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xg_private.c
--- /dev/null Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xg_private.c Thu Aug 25 00:55:20 2005
@@ -0,0 +1,86 @@
+/******************************************************************************
+ * xg_private.c
+ *
+ * Helper functions for the rest of the library.
+ */
+
+#include <stdlib.h>
+#include <zlib.h>
+
+#include "xg_private.h"
+
+char *xc_read_kernel_image(const char *filename, unsigned long *size)
+{
+ int kernel_fd = -1;
+ gzFile kernel_gfd = NULL;
+ char *image = NULL;
+ unsigned int bytes;
+
+ if ( (kernel_fd = open(filename, O_RDONLY)) < 0 )
+ {
+ PERROR("Could not open kernel image");
+ goto out;
+ }
+
+ if ( (*size = xc_get_filesz(kernel_fd)) == 0 )
+ {
+ PERROR("Could not read kernel image");
+ goto out;
+ }
+
+ if ( (kernel_gfd = gzdopen(kernel_fd, "rb")) == NULL )
+ {
+ PERROR("Could not allocate decompression state for state file");
+ goto out;
+ }
+
+ if ( (image = malloc(*size)) == NULL )
+ {
+ PERROR("Could not allocate memory for kernel image");
+ goto out;
+ }
+
+ if ( (bytes = gzread(kernel_gfd, image, *size)) != *size )
+ {
+ PERROR("Error reading kernel image, could not"
+ " read the whole image (%d != %ld).", bytes, *size);
+ free(image);
+ image = NULL;
+ }
+
+ out:
+ if ( kernel_gfd != NULL )
+ gzclose(kernel_gfd);
+ else if ( kernel_fd >= 0 )
+ close(kernel_fd);
+ return image;
+}
+
+/*******************/
+
+int pin_table(
+ int xc_handle, unsigned int type, unsigned long mfn, domid_t dom)
+{
+ struct mmuext_op op;
+
+ op.cmd = type;
+ op.mfn = mfn;
+
+ if ( xc_mmuext_op(xc_handle, &op, 1, dom) < 0 )
+ return 1;
+
+ return 0;
+}
+
+/* This is shared between save and restore, and may generally be useful. */
+unsigned long csum_page (void * page)
+{
+ int i;
+ unsigned long *p = page;
+ unsigned long long sum=0;
+
+ for ( i = 0; i < (PAGE_SIZE/sizeof(unsigned long)); i++ )
+ sum += p[i];
+
+ return sum ^ (sum>>32);
+}
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xg_private.h
--- /dev/null Wed Aug 24 22:24:10 2005
+++ b/tools/libxc/xg_private.h Thu Aug 25 00:55:20 2005
@@ -0,0 +1,170 @@
+#ifndef XG_PRIVATE_H
+#define XG_PRIVATE_H
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "xenctrl.h"
+
+#include <xen/linux/privcmd.h>
+
+char *xc_read_kernel_image(const char *filename, unsigned long *size);
+unsigned long csum_page (void * page);
+
+#define _PAGE_PRESENT 0x001
+#define _PAGE_RW 0x002
+#define _PAGE_USER 0x004
+#define _PAGE_PWT 0x008
+#define _PAGE_PCD 0x010
+#define _PAGE_ACCESSED 0x020
+#define _PAGE_DIRTY 0x040
+#define _PAGE_PAT 0x080
+#define _PAGE_PSE 0x080
+#define _PAGE_GLOBAL 0x100
+
+#if defined(__i386__)
+#define L1_PAGETABLE_SHIFT 12
+#define L2_PAGETABLE_SHIFT 22
+#define L1_PAGETABLE_SHIFT_PAE 12
+#define L2_PAGETABLE_SHIFT_PAE 21
+#define L3_PAGETABLE_SHIFT_PAE 30
+#elif defined(__x86_64__)
+#define L1_PAGETABLE_SHIFT 12
+#define L2_PAGETABLE_SHIFT 21
+#define L3_PAGETABLE_SHIFT 30
+#define L4_PAGETABLE_SHIFT 39
+#endif
+
+#if defined(__i386__)
+#define ENTRIES_PER_L1_PAGETABLE 1024
+#define ENTRIES_PER_L2_PAGETABLE 1024
+#define L1_PAGETABLE_ENTRIES_PAE 512
+#define L2_PAGETABLE_ENTRIES_PAE 512
+#define L3_PAGETABLE_ENTRIES_PAE 4
+#elif defined(__x86_64__)
+#define L1_PAGETABLE_ENTRIES 512
+#define L2_PAGETABLE_ENTRIES 512
+#define L3_PAGETABLE_ENTRIES 512
+#define L4_PAGETABLE_ENTRIES 512
+#endif
+
+#define PAGE_SHIFT XC_PAGE_SHIFT
+#define PAGE_SIZE (1UL << PAGE_SHIFT)
+#define PAGE_MASK (~(PAGE_SIZE-1))
+
+typedef u32 l1_pgentry_32_t;
+typedef u32 l2_pgentry_32_t;
+typedef u64 l1_pgentry_64_t;
+typedef u64 l2_pgentry_64_t;
+typedef u64 l3_pgentry_64_t;
+typedef unsigned long l1_pgentry_t;
+typedef unsigned long l2_pgentry_t;
+#if defined(__x86_64__)
+typedef unsigned long l3_pgentry_t;
+typedef unsigned long l4_pgentry_t;
+#endif
+
+#if defined(__i386__)
+#define l1_table_offset(_a) \
+ (((_a) >> L1_PAGETABLE_SHIFT) & (ENTRIES_PER_L1_PAGETABLE - 1))
+#define l2_table_offset(_a) \
+ ((_a) >> L2_PAGETABLE_SHIFT)
+#define l1_table_offset_pae(_a) \
+ (((_a) >> L1_PAGETABLE_SHIFT_PAE) & (L1_PAGETABLE_ENTRIES_PAE - 1))
+#define l2_table_offset_pae(_a) \
+ (((_a) >> L2_PAGETABLE_SHIFT_PAE) & (L2_PAGETABLE_ENTRIES_PAE - 1))
+#define l3_table_offset_pae(_a) \
+ (((_a) >> L3_PAGETABLE_SHIFT_PAE) & (L3_PAGETABLE_ENTRIES_PAE - 1))
+#elif defined(__x86_64__)
+#define l1_table_offset(_a) \
+ (((_a) >> L1_PAGETABLE_SHIFT) & (L1_PAGETABLE_ENTRIES - 1))
+#define l2_table_offset(_a) \
+ (((_a) >> L2_PAGETABLE_SHIFT) & (L2_PAGETABLE_ENTRIES - 1))
+#define l3_table_offset(_a) \
+ (((_a) >> L3_PAGETABLE_SHIFT) & (L3_PAGETABLE_ENTRIES - 1))
+#define l4_table_offset(_a) \
+ (((_a) >> L4_PAGETABLE_SHIFT) & (L4_PAGETABLE_ENTRIES - 1))
+#endif
+
+#define ERROR(_m, _a...) \
+do { \
+ int __saved_errno = errno; \
+ fprintf(stderr, "ERROR: " _m "\n" , ## _a ); \
+ errno = __saved_errno; \
+} while (0)
+
+
+#define PERROR(_m, _a...) \
+do { \
+ int __saved_errno = errno; \
+ fprintf(stderr, "ERROR: " _m " (%d = %s)\n" , ## _a , \
+ __saved_errno, strerror(__saved_errno)); \
+ errno = __saved_errno; \
+} while (0)
+
+
+struct domain_setup_info
+{
+ unsigned long v_start;
+ unsigned long v_end;
+ unsigned long v_kernstart;
+ unsigned long v_kernend;
+ unsigned long v_kernentry;
+
+ unsigned int load_symtab;
+ unsigned int pae_kernel;
+ unsigned long symtab_addr;
+ unsigned long symtab_len;
+};
+
+typedef int (*parseimagefunc)(char *image, unsigned long image_size,
+ struct domain_setup_info *dsi);
+typedef int (*loadimagefunc)(char *image, unsigned long image_size, int xch,
+ u32 dom, unsigned long *parray,
+ struct domain_setup_info *dsi);
+
+struct load_funcs
+{
+ parseimagefunc parseimage;
+ loadimagefunc loadimage;
+};
+
+#define mfn_mapper_queue_size 128
+
+typedef struct mfn_mapper {
+ int xc_handle;
+ int size;
+ int prot;
+ int error;
+ int max_queue_size;
+ void * addr;
+ privcmd_mmap_t ioctl;
+
+} mfn_mapper_t;
+
+unsigned long xc_get_m2p_start_mfn (int xc_handle);
+
+int xc_copy_to_domain_page(int xc_handle, u32 domid,
+ unsigned long dst_pfn, void *src_page);
+
+unsigned long xc_get_filesz(int fd);
+
+void xc_map_memcpy(unsigned long dst, char *src, unsigned long size,
+ int xch, u32 dom, unsigned long *parray,
+ unsigned long vstart);
+
+int pin_table(int xc_handle, unsigned int type, unsigned long mfn,
+ domid_t dom);
+
+/* image loading */
+int probe_elf(char *image, unsigned long image_size, struct load_funcs *funcs);
+int probe_bin(char *image, unsigned long image_size, struct load_funcs *funcs);
+int probe_aout9(char *image, unsigned long image_size, struct load_funcs
*funcs);
+
+#endif
+
diff -r 630feabe7ed6 -r 2f20c2fce2c5 tools/libxc/xc.h
--- a/tools/libxc/xc.h Wed Aug 24 22:24:10 2005
+++ /dev/null Thu Aug 25 00:55:20 2005
@@ -1,558 +0,0 @@
-/******************************************************************************
- * xc.h
- *
- * A library for low-level access to the Xen control interfaces.
- *
- * Copyright (c) 2003-2004, K A Fraser.
- */
-
-#ifndef __XC_H__
-#define __XC_H__
-
-#include <stdint.h>
-
-typedef uint8_t u8;
-typedef uint16_t u16;
-typedef uint32_t u32;
-typedef uint64_t u64;
-typedef int8_t s8;
-typedef int16_t s16;
-typedef int32_t s32;
-typedef int64_t s64;
-
-#include <sys/ptrace.h>
-#include <xen/xen.h>
-#include <xen/dom0_ops.h>
-#include <xen/event_channel.h>
-#include <xen/sched_ctl.h>
-#include <xen/acm.h>
-
-#ifdef __ia64__
-#define XC_PAGE_SHIFT 14
-#else
-#define XC_PAGE_SHIFT 12
-#endif
-#define XC_PAGE_SIZE (1UL << XC_PAGE_SHIFT)
-#define XC_PAGE_MASK (~(XC_PAGE_SIZE-1))
-
-/*
- * DEFINITIONS FOR CPU BARRIERS
- */
-
-#if defined(__i386__)
-#define mb() __asm__ __volatile__ ( "lock; addl $0,0(%%esp)" : : : "memory" )
-#define rmb() __asm__ __volatile__ ( "lock; addl $0,0(%%esp)" : : : "memory" )
-#define wmb() __asm__ __volatile__ ( "" : : : "memory")
-#elif defined(__x86_64__)
-#define mb() __asm__ __volatile__ ( "mfence" : : : "memory")
-#define rmb() __asm__ __volatile__ ( "lfence" : : : "memory")
-#define wmb() __asm__ __volatile__ ( "" : : : "memory")
-#elif defined(__ia64__)
-/* FIXME */
-#define mb()
-#define rmb()
-#define wmb()
-#else
-#error "Define barriers"
-#endif
-
-/*
- * INITIALIZATION FUNCTIONS
- */
-
-/**
- * This function opens a handle to the hypervisor interface. This function can
- * be called multiple times within a single process. Multiple processes can
- * have an open hypervisor interface at the same time.
- *
- * Each call to this function should have a corresponding call to
- * xc_interface_close().
- *
- * This function can fail if the caller does not have superuser permission or
- * if a Xen-enabled kernel is not currently running.
- *
- * @return a handle to the hypervisor interface or -1 on failure
- */
-int xc_interface_open(void);
-
-/**
- * This function closes an open hypervisor interface.
- *
- * This function can fail if the handle does not represent an open interface or
- * if there were problems closing the interface.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @return 0 on success, -1 otherwise.
- */
-int xc_interface_close(int xc_handle);
-
-/*
- * DOMAIN DEBUGGING FUNCTIONS
- */
-
-typedef struct xc_core_header {
- unsigned int xch_magic;
- unsigned int xch_nr_vcpus;
- unsigned int xch_nr_pages;
- unsigned int xch_ctxt_offset;
- unsigned int xch_index_offset;
- unsigned int xch_pages_offset;
-} xc_core_header_t;
-
-
-long xc_ptrace(enum __ptrace_request request,
- u32 domid,
- long addr,
- long data);
-
-long xc_ptrace_core(enum __ptrace_request request,
- u32 domid,
- long addr,
- long data);
-
-int xc_waitdomain(int domain,
- int *status,
- int options);
-
-int xc_waitdomain_core(int domain,
- int *status,
- int options);
-
-/*
- * DOMAIN MANAGEMENT FUNCTIONS
- */
-
-typedef struct {
- u32 domid;
- u32 ssidref;
- unsigned int dying:1, crashed:1, shutdown:1,
- paused:1, blocked:1, running:1;
- unsigned int shutdown_reason; /* only meaningful if shutdown==1 */
- unsigned long nr_pages;
- unsigned long shared_info_frame;
- u64 cpu_time;
- unsigned long max_memkb;
- unsigned int vcpus;
- s32 vcpu_to_cpu[MAX_VIRT_CPUS];
- cpumap_t cpumap[MAX_VIRT_CPUS];
-} xc_dominfo_t;
-
-typedef dom0_getdomaininfo_t xc_domaininfo_t;
-int xc_domain_create(int xc_handle,
- u32 ssidref,
- u32 *pdomid);
-
-
-int xc_domain_dumpcore(int xc_handle,
- u32 domid,
- const char *corename);
-
-
-/**
- * This function pauses a domain. A paused domain still exists in memory
- * however it does not receive any timeslices from the hypervisor.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm domid the domain id to pause
- * @return 0 on success, -1 on failure.
- */
-int xc_domain_pause(int xc_handle,
- u32 domid);
-/**
- * This function unpauses a domain. The domain should have been previously
- * paused.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm domid the domain id to unpause
- * return 0 on success, -1 on failure
- */
-int xc_domain_unpause(int xc_handle,
- u32 domid);
-
-/**
- * This function will destroy a domain. Destroying a domain removes the domain
- * completely from memory. This function should be called after sending the
- * domain a SHUTDOWN control message to free up the domain resources.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm domid the domain id to destroy
- * @return 0 on success, -1 on failure
- */
-int xc_domain_destroy(int xc_handle,
- u32 domid);
-int xc_domain_pincpu(int xc_handle,
- u32 domid,
- int vcpu,
- cpumap_t *cpumap);
-/**
- * This function will return information about one or more domains. It is
- * designed to iterate over the list of domains. If a single domain is
- * requested, this function will return the next domain in the list - if
- * one exists. It is, therefore, important in this case to make sure the
- * domain requested was the one returned.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm first_domid the first domain to enumerate information from. Domains
- * are currently enumerate in order of creation.
- * @parm max_doms the number of elements in info
- * @parm info an array of max_doms size that will contain the information for
- * the enumerated domains.
- * @return the number of domains enumerated or -1 on error
- */
-int xc_domain_getinfo(int xc_handle,
- u32 first_domid,
- unsigned int max_doms,
- xc_dominfo_t *info);
-
-/**
- * This function will return information about one or more domains, using a
- * single hypercall. The domain information will be stored into the supplied
- * array of xc_domaininfo_t structures.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm first_domain the first domain to enumerate information from.
- * Domains are currently enumerate in order of creation.
- * @parm max_domains the number of elements in info
- * @parm info an array of max_doms size that will contain the information for
- * the enumerated domains.
- * @return the number of domains enumerated or -1 on error
- */
-int xc_domain_getinfolist(int xc_handle,
- u32 first_domain,
- unsigned int max_domains,
- xc_domaininfo_t *info);
-
-/**
- * This function returns information about one domain. This information is
- * more detailed than the information from xc_domain_getinfo().
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm domid the domain to get information from
- * @parm info a pointer to an xc_domaininfo_t to store the domain information
- * @parm ctxt a pointer to a structure to store the execution context of the
- * domain
- * @return 0 on success, -1 on failure
- */
-int xc_domain_get_vcpu_context(int xc_handle,
- u32 domid,
- u32 vcpu,
- vcpu_guest_context_t *ctxt);
-
-int xc_domain_setcpuweight(int xc_handle,
- u32 domid,
- float weight);
-long long xc_domain_get_cpu_usage(int xc_handle,
- domid_t domid,
- int vcpu);
-
-
-typedef dom0_shadow_control_stats_t xc_shadow_control_stats_t;
-int xc_shadow_control(int xc_handle,
- u32 domid,
- unsigned int sop,
- unsigned long *dirty_bitmap,
- unsigned long pages,
- xc_shadow_control_stats_t *stats);
-
-
-#define XCFLAGS_VERBOSE 1
-#define XCFLAGS_LIVE 2
-#define XCFLAGS_DEBUG 4
-#define XCFLAGS_CONFIGURE 8
-
-struct XcIOContext;
-
-/**
- * This function will save a domain running Linux.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm fd the file descriptor to save a domain to
- * @parm dom the id of the domain
- * @return 0 on success, -1 on failure
- */
-int xc_linux_save(int xc_handle, int fd, u32 dom);
-
-/**
- * This function will restore a saved domain running Linux.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm fd the file descriptor to restore a domain from
- * @parm dom the id of the domain
- * @parm nr_pfns the number of pages
- * @parm store_evtchn the store event channel for this domain to use
- * @parm store_mfn returned with the mfn of the store page
- * @return 0 on success, -1 on failure
- */
-int xc_linux_restore(int xc_handle, int io_fd, u32 dom, unsigned long nr_pfns,
- unsigned int store_evtchn, unsigned long *store_mfn);
-
-int xc_linux_build(int xc_handle,
- u32 domid,
- const char *image_name,
- const char *ramdisk_name,
- const char *cmdline,
- unsigned int control_evtchn,
- unsigned long flags,
- unsigned int vcpus,
- unsigned int store_evtchn,
- unsigned long *store_mfn);
-
-struct mem_map;
-int xc_vmx_build(int xc_handle,
- u32 domid,
- int memsize,
- const char *image_name,
- struct mem_map *memmap,
- const char *ramdisk_name,
- const char *cmdline,
- unsigned int control_evtchn,
- unsigned long flags,
- unsigned int vcpus,
- unsigned int store_evtchn,
- unsigned long *store_mfn);
-
-int xc_bvtsched_global_set(int xc_handle,
- unsigned long ctx_allow);
-
-int xc_bvtsched_domain_set(int xc_handle,
- u32 domid,
- u32 mcuadv,
- int warpback,
- s32 warpvalue,
- long long warpl,
- long long warpu);
-
-int xc_bvtsched_global_get(int xc_handle,
- unsigned long *ctx_allow);
-
-int xc_bvtsched_domain_get(int xc_handle,
- u32 domid,
- u32 *mcuadv,
- int *warpback,
- s32 *warpvalue,
- long long *warpl,
- long long *warpu);
-
-int xc_sedf_domain_set(int xc_handle,
- u32 domid,
- u64 period, u64 slice, u64 latency, u16 extratime,
u16 weight);
-
-int xc_sedf_domain_get(int xc_handle,
- u32 domid,
- u64* period, u64 *slice, u64 *latency, u16
*extratime, u16* weight);
-
-typedef evtchn_status_t xc_evtchn_status_t;
-
-/*
- * EVENT CHANNEL FUNCTIONS
- */
-
-/**
- * This function allocates an unbound port. Ports are named endpoints used for
- * interdomain communication. This function is most useful in opening a
- * well-known port within a domain to receive events on.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm dom the ID of the domain. This maybe DOMID_SELF
- * @parm port a pointer to a port. This is an in/out parameter. If *port is
- * 0, then a new port will be assigned, if port is > 0 then that
- * port is allocated if the port is unallocated.
- * @return 0 on success, -1 on failure
- */
-int xc_evtchn_alloc_unbound(int xc_handle,
- u32 dom,
- int *port);
-
-/**
- * This function creates a pair of ports between two domains. A port can only
- * be bound once within a domain.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm dom1 one of the two domains to connect. Can be DOMID_SELF.
- * @parm dom2 the other domain to connect. Can be DOMID_SELF.
- * @parm port1 an in/out parameter. If > 0, then try to connect *port. If
- * 0, then allocate a new port and store the port in *port.
- * @parm port2 the port connected on port2. This parameter behaves the same
- * way as port1.
- * @return 0 on success, -1 on error.
- */
-int xc_evtchn_bind_interdomain(int xc_handle,
- u32 dom1,
- u32 dom2,
- int *port1,
- int *port2);
-int xc_evtchn_bind_virq(int xc_handle,
- int virq,
- int *port);
-
-/**
- * This function will close a single port on an event channel.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm dom the domain that the port exists on. May be DOMID_SELF.
- * @parm port the port to close
- * @return 0 on success, -1 on error
- */
-int xc_evtchn_close(int xc_handle,
- u32 dom, /* may be DOMID_SELF */
- int port);
-
-/**
- * This function generates a notify event on a bound port.
- *
- * Notifies can be read within Linux by opening /dev/xen/evtchn and reading
- * a 16 bit value. The result will be the port the event occurred on. When
- * events occur, the port is masked until the 16 bit port value is written back
- * to the file. When /dev/xen/evtchn is opened, it has to be bound via an
- * ioctl to each port to listen on. The ioctl for binding is _IO('E', 2). The
- * parameter is the port to listen on.
- *
- * @parm xc_handle a handle to an open hypervisor interface
- * @parm local_port the port to generate the notify on
- * @return 0 on success, -1 on error
- */
-int xc_evtchn_send(int xc_handle,
- int local_port);
-int xc_evtchn_status(int xc_handle,
- u32 dom, /* may be DOMID_SELF */
- int port,
- xc_evtchn_status_t *status);
-
-int xc_physdev_pci_access_modify(int xc_handle,
- u32 domid,
- int bus,
- int dev,
- int func,
- int enable);
-
-int xc_readconsolering(int xc_handle,
- char **pbuffer,
- unsigned int *pnr_chars,
- int clear);
-
-typedef dom0_physinfo_t xc_physinfo_t;
-int xc_physinfo(int xc_handle,
- xc_physinfo_t *info);
-
-int xc_sched_id(int xc_handle,
- int *sched_id);
-
-int xc_domain_setmaxmem(int xc_handle,
- u32 domid,
- unsigned int max_memkb);
-
-int xc_domain_memory_increase_reservation(int xc_handle,
- u32 domid,
- unsigned int mem_kb);
-
-typedef dom0_perfc_desc_t xc_perfc_desc_t;
-/* IMPORTANT: The caller is responsible for mlock()'ing the @desc array. */
-int xc_perfc_control(int xc_handle,
- u32 op,
- xc_perfc_desc_t *desc);
-
-/* read/write msr */
-long long xc_msr_read(int xc_handle, int cpu_mask, int msr);
-int xc_msr_write(int xc_handle, int cpu_mask, int msr, unsigned int low,
- unsigned int high);
-
-/**
- * Memory maps a range within one domain to a local address range. Mappings
- * should be unmapped with munmap and should follow the same rules as mmap
- * regarding page alignment. Returns NULL on failure.
- *
- * In Linux, the ring queue for the control channel is accessible by mapping
- * the shared_info_frame (from xc_domain_getinfo()) + 2048. The structure
- * stored there is of type control_if_t.
- *
- * @parm xc_handle a handle on an open hypervisor interface
- * @parm dom the domain to map memory from
- * @parm size the amount of memory to map (in multiples of page size)
- * @parm prot same flag as in mmap().
- * @parm mfn the frame address to map.
- */
-void *xc_map_foreign_range(int xc_handle, u32 dom,
- int size, int prot,
- unsigned long mfn );
-
-void *xc_map_foreign_batch(int xc_handle, u32 dom, int prot,
- unsigned long *arr, int num );
-
-int xc_get_pfn_list(int xc_handle, u32 domid, unsigned long *pfn_buf,
- unsigned long max_pfns);
-
-int xc_ia64_get_pfn_list(int xc_handle, u32 domid, unsigned long *pfn_buf,
- unsigned int start_page, unsigned int nr_pages);
-
-/*\
- * GRANT TABLE FUNCTIONS
-\*/
-
-/**
- * This function opens a handle to the more restricted grant table hypervisor
- * interface. This may be used where the standard interface is not
- * available because the domain is not privileged.
- * This function can be called multiple times within a single process.
- * Multiple processes can have an open hypervisor interface at the same time.
- *
- * Each call to this function should have a corresponding call to
- * xc_grant_interface_close().
- *
- * This function can fail if a Xen-enabled kernel is not currently running.
- *
- * @return a handle to the hypervisor grant table interface or -1 on failure
- */
-int xc_grant_interface_open(void);
-
-/**
- * This function closes an open grant table hypervisor interface.
- *
- * This function can fail if the handle does not represent an open interface or
- * if there were problems closing the interface.
- *
- * @parm xc_handle a handle to an open grant table hypervisor interface
- * @return 0 on success, -1 otherwise.
- */
-int xc_grant_interface_close(int xc_handle);
-
-int xc_gnttab_map_grant_ref(int xc_handle,
- u64 host_virt_addr,
- u32 dom,
- u16 ref,
- u16 flags,
- s16 *handle,
- u64 *dev_bus_addr);
-
-int xc_gnttab_unmap_grant_ref(int xc_handle,
- u64 host_virt_addr,
- u64 dev_bus_addr,
- u16 handle,
- s16 *status);
-
-int xc_gnttab_setup_table(int xc_handle,
- u32 dom,
- u16 nr_frames,
- s16 *status,
- unsigned long **frame_list);
-
-/* Grant debug builds only: */
-int xc_gnttab_dump_table(int xc_handle,
- u32 dom,
- s16 *status);
-
-/* Get current total pages allocated to a domain. */
-long xc_get_tot_pages(int xc_handle, u32 domid);
-
-/* Execute a privileged dom0 operation. */
-int xc_dom0_op(int xc_handle, dom0_op_t *op);
-
-/* Initializes the store (for dom0)
- remote_port should be the remote end of a bound interdomain channel between
- the store and dom0.
-
- This function returns a shared frame that should be passed to
- xs_introduce_domain
- */
-long xc_init_store(int xc_handle, int remote_port);
-
-#endif /* __XC_H__ */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|