[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] merge?
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |