All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] libxc: Refactor x86 specific code into x86 specific files
@ 2011-11-09 13:12 Christoph Egger
  2011-11-24 16:30 ` Ian Jackson
  0 siblings, 1 reply; 4+ messages in thread
From: Christoph Egger @ 2011-11-09 13:12 UTC (permalink / raw)
  To: Ian Jackson, xen-devel@lists.xensource.com

[-- Attachment #1: Type: text/plain, Size: 446 bytes --]


Move x86 specific code into x86 specific files.
Eliminate arch specific PAGE constants by using common
XC_PAGE_* contants.

Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>

-- 
---to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Einsteinring 24, 85689 Dornach b. Muenchen
Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632

[-- Attachment #2: xen_tools_libxc_x86.diff --]
[-- Type: text/plain, Size: 33583 bytes --]

diff -r c2a8bde9ad6e tools/libxc/Makefile
--- a/tools/libxc/Makefile	Wed Nov 02 14:54:36 2011 +0100
+++ b/tools/libxc/Makefile	Wed Nov 09 14:01:30 2011 +0100
@@ -13,6 +13,7 @@ CTRL_SRCS-y       += xc_domain.c
 CTRL_SRCS-y       += xc_evtchn.c
 CTRL_SRCS-y       += xc_gnttab.c
 CTRL_SRCS-y       += xc_misc.c
+CTRL_SRCS-$(CONFIG_X86) += xc_misc_x86.c
 CTRL_SRCS-y       += xc_flask.c
 CTRL_SRCS-y       += xc_physdev.c
 CTRL_SRCS-y       += xc_private.c
diff -r c2a8bde9ad6e tools/libxc/xc_dom_ia64.c
--- a/tools/libxc/xc_dom_ia64.c	Wed Nov 02 14:54:36 2011 +0100
+++ b/tools/libxc/xc_dom_ia64.c	Wed Nov 09 14:01:30 2011 +0100
@@ -83,7 +83,7 @@ int start_info_ia64(struct xc_dom_image 
         bp->initrd_start = start_info->mod_start;
         bp->initrd_size = start_info->mod_len;
     }
-    bp->command_line = (dom->start_info_pfn << PAGE_SHIFT_IA64)
+    bp->command_line = (dom->start_info_pfn << XC_PAGE_SHIFT)
         + offsetof(start_info_t, cmd_line);
     if ( dom->cmdline )
     {
@@ -128,7 +128,7 @@ static int vcpu_ia64(struct xc_dom_image
 #ifdef __ia64__			/* FIXME */
     ctxt->regs.ar.fpsr = xc_ia64_fpsr_default();
 #endif
-    ctxt->regs.r[28] = (dom->start_info_pfn << PAGE_SHIFT_IA64)
+    ctxt->regs.r[28] = (dom->start_info_pfn << XC_PAGE_SHIFT)
         + sizeof(start_info_ia64_t);
     return 0;
 }
@@ -138,7 +138,7 @@ static int vcpu_ia64(struct xc_dom_image
 static struct xc_dom_arch xc_dom_arch = {
     .guest_type = "xen-3.0-ia64",
     .native_protocol = XEN_IO_PROTO_ABI_IA64,
-    .page_shift = PAGE_SHIFT_IA64,
+    .page_shift = XC_PAGE_SHIFT,
     .alloc_magic_pages = alloc_magic_pages,
     .start_info = start_info_ia64,
     .shared_info = shared_info_ia64,
@@ -148,7 +148,7 @@ static struct xc_dom_arch xc_dom_arch = 
 static struct xc_dom_arch xc_dom_arch_ia64be = {
     .guest_type = "xen-3.0-ia64be",
     .native_protocol = XEN_IO_PROTO_ABI_IA64,
-    .page_shift = PAGE_SHIFT_IA64,
+    .page_shift = XC_PAGE_SHIFT,
     .alloc_magic_pages = alloc_magic_pages,
     .start_info = start_info_ia64,
     .shared_info = shared_info_ia64,
@@ -173,8 +173,8 @@ int arch_setup_meminit(struct xc_dom_ima
     /* setup initial p2m */
     if (dom->guest_type && strcmp(dom->guest_type,
                                   "hvm-3.0-ia64-sioemu") == 0) {
-        start = FW_MEM_BASE >> PAGE_SHIFT_IA64;
-        nbr = FW_MEM_SIZE >> PAGE_SHIFT_IA64;
+        start = FW_MEM_BASE >> XC_PAGE_SHIFT;
+        nbr = FW_MEM_SIZE >> XC_PAGE_SHIFT;
     } else {
         start = 0;
         nbr = dom->total_pages;
diff -r c2a8bde9ad6e tools/libxc/xc_dom_x86.c
--- a/tools/libxc/xc_dom_x86.c	Wed Nov 02 14:54:36 2011 +0100
+++ b/tools/libxc/xc_dom_x86.c	Wed Nov 09 14:01:30 2011 +0100
@@ -89,7 +89,7 @@ static int count_pgtables(struct xc_dom_
     pages = extra_pages;
     for ( ; ; )
     {
-        try_virt_end = round_up(dom->virt_alloc_end + pages * PAGE_SIZE_X86,
+        try_virt_end = round_up(dom->virt_alloc_end + pages * XC_PAGE_SIZE,
                                 bits_to_mask(22)); /* 4MB alignment */
         dom->pg_l4 =
             nr_page_tables(dom, dom->parms.virt_base, try_virt_end, l4_bits);
@@ -107,7 +107,7 @@ static int count_pgtables(struct xc_dom_
         }
         dom->pgtables = dom->pg_l4 + dom->pg_l3 + dom->pg_l2 + dom->pg_l1;
         pages = dom->pgtables + extra_pages;
-        if ( dom->virt_alloc_end + pages * PAGE_SIZE_X86 <= try_virt_end + 1 )
+        if ( dom->virt_alloc_end + pages * XC_PAGE_SIZE <= try_virt_end + 1 )
             break;
     }
     dom->virt_pgtab_end = try_virt_end + 1;
@@ -132,7 +132,7 @@ static int count_pgtables_x86_32_pae(str
                           L3_PAGETABLE_SHIFT_PAE, L2_PAGETABLE_SHIFT_PAE);
 }
 
-#define pfn_to_paddr(pfn) ((xen_paddr_t)(pfn) << PAGE_SHIFT_X86)
+#define pfn_to_paddr(pfn) ((xen_paddr_t)(pfn) << XC_PAGE_SHIFT)
 
 static int setup_pgtables_x86_32(struct xc_dom_image *dom)
 {
@@ -145,7 +145,7 @@ static int setup_pgtables_x86_32(struct 
     xen_pfn_t pgpfn;
 
     for ( addr = dom->parms.virt_base; addr < dom->virt_pgtab_end;
-          addr += PAGE_SIZE_X86 )
+          addr += XC_PAGE_SIZE )
     {
         if ( l1tab == NULL )
         {
@@ -159,7 +159,7 @@ static int setup_pgtables_x86_32(struct 
 
         /* make L1 entry */
         l1off = l1_table_offset_i386(addr);
-        pgpfn = (addr - dom->parms.virt_base) >> PAGE_SHIFT_X86;
+        pgpfn = (addr - dom->parms.virt_base) >> XC_PAGE_SHIFT;
         l1tab[l1off] =
             pfn_to_paddr(xc_dom_p2m_guest(dom, pgpfn)) | L1_PROT;
         if ( (addr >= dom->pgtables_seg.vstart) && 
@@ -264,7 +264,7 @@ static int setup_pgtables_x86_32_pae(str
     l3tab = xc_dom_pfn_to_ptr(dom, l3pfn, 1);
 
     for ( addr = dom->parms.virt_base; addr < dom->virt_pgtab_end;
-          addr += PAGE_SIZE_X86 )
+          addr += XC_PAGE_SIZE )
     {
         if ( l2tab == NULL )
         {
@@ -290,7 +290,7 @@ static int setup_pgtables_x86_32_pae(str
 
         /* make L1 entry */
         l1off = l1_table_offset_pae(addr);
-        pgpfn = (addr - dom->parms.virt_base) >> PAGE_SHIFT_X86;
+        pgpfn = (addr - dom->parms.virt_base) >> XC_PAGE_SHIFT;
         l1tab[l1off] =
             pfn_to_paddr(xc_dom_p2m_guest(dom, pgpfn)) | L1_PROT;
         if ( (addr >= dom->pgtables_seg.vstart) &&
@@ -345,7 +345,7 @@ static int setup_pgtables_x86_64(struct 
     xen_pfn_t pgpfn;
 
     for ( addr = dom->parms.virt_base; addr < dom->virt_pgtab_end;
-          addr += PAGE_SIZE_X86 )
+          addr += XC_PAGE_SIZE )
     {
         if ( l3tab == NULL )
         {
@@ -383,7 +383,7 @@ static int setup_pgtables_x86_64(struct 
 
         /* make L1 entry */
         l1off = l1_table_offset_x86_64(addr);
-        pgpfn = (addr - dom->parms.virt_base) >> PAGE_SHIFT_X86;
+        pgpfn = (addr - dom->parms.virt_base) >> XC_PAGE_SHIFT;
         l1tab[l1off] =
             pfn_to_paddr(xc_dom_p2m_guest(dom, pgpfn)) | L1_PROT;
         if ( (addr >= dom->pgtables_seg.vstart) && 
@@ -438,7 +438,7 @@ static int start_info_x86_32(struct xc_d
     strncpy(start_info->magic, dom->guest_type, sizeof(start_info->magic));
     start_info->magic[sizeof(start_info->magic) - 1] = '\0';
     start_info->nr_pages = dom->total_pages;
-    start_info->shared_info = shinfo << PAGE_SHIFT_X86;
+    start_info->shared_info = shinfo << XC_PAGE_SHIFT;
     start_info->pt_base = dom->pgtables_seg.vstart;
     start_info->nr_pt_frames = dom->pgtables;
     start_info->mfn_list = dom->p2m_seg.vstart;
@@ -478,7 +478,7 @@ static int start_info_x86_64(struct xc_d
     strncpy(start_info->magic, dom->guest_type, sizeof(start_info->magic));
     start_info->magic[sizeof(start_info->magic) - 1] = '\0';
     start_info->nr_pages = dom->total_pages;
-    start_info->shared_info = shinfo << PAGE_SHIFT_X86;
+    start_info->shared_info = shinfo << XC_PAGE_SHIFT;
     start_info->pt_base = dom->pgtables_seg.vstart;
     start_info->nr_pt_frames = dom->pgtables;
     start_info->mfn_list = dom->p2m_seg.vstart;
@@ -550,9 +550,9 @@ static int vcpu_x86_32(struct xc_dom_ima
     ctxt->user_regs.cs = FLAT_KERNEL_CS_X86_32;
     ctxt->user_regs.eip = dom->parms.virt_entry;
     ctxt->user_regs.esp =
-        dom->parms.virt_base + (dom->bootstack_pfn + 1) * PAGE_SIZE_X86;
+        dom->parms.virt_base + (dom->bootstack_pfn + 1) * XC_PAGE_SIZE;
     ctxt->user_regs.esi =
-        dom->parms.virt_base + (dom->start_info_pfn) * PAGE_SIZE_X86;
+        dom->parms.virt_base + (dom->start_info_pfn) * XC_PAGE_SIZE;
     ctxt->user_regs.eflags = 1 << 9; /* Interrupt Enable */
 
     ctxt->kernel_ss = ctxt->user_regs.ss;
@@ -589,9 +589,9 @@ static int vcpu_x86_64(struct xc_dom_ima
     ctxt->user_regs.cs = FLAT_KERNEL_CS_X86_64;
     ctxt->user_regs.rip = dom->parms.virt_entry;
     ctxt->user_regs.rsp =
-        dom->parms.virt_base + (dom->bootstack_pfn + 1) * PAGE_SIZE_X86;
+        dom->parms.virt_base + (dom->bootstack_pfn + 1) * XC_PAGE_SIZE;
     ctxt->user_regs.rsi =
-        dom->parms.virt_base + (dom->start_info_pfn) * PAGE_SIZE_X86;
+        dom->parms.virt_base + (dom->start_info_pfn) * XC_PAGE_SIZE;
     ctxt->user_regs.rflags = 1 << 9; /* Interrupt Enable */
 
     ctxt->kernel_ss = ctxt->user_regs.ss;
@@ -611,7 +611,7 @@ static int vcpu_x86_64(struct xc_dom_ima
 static struct xc_dom_arch xc_dom_32 = {
     .guest_type = "xen-3.0-x86_32",
     .native_protocol = XEN_IO_PROTO_ABI_X86_32,
-    .page_shift = PAGE_SHIFT_X86,
+    .page_shift = XC_PAGE_SHIFT,
     .sizeof_pfn = 4,
     .alloc_magic_pages = alloc_magic_pages,
     .count_pgtables = count_pgtables_x86_32,
@@ -623,7 +623,7 @@ static struct xc_dom_arch xc_dom_32 = {
 static struct xc_dom_arch xc_dom_32_pae = {
     .guest_type = "xen-3.0-x86_32p",
     .native_protocol = XEN_IO_PROTO_ABI_X86_32,
-    .page_shift = PAGE_SHIFT_X86,
+    .page_shift = XC_PAGE_SHIFT,
     .sizeof_pfn = 4,
     .alloc_magic_pages = alloc_magic_pages,
     .count_pgtables = count_pgtables_x86_32_pae,
@@ -636,7 +636,7 @@ static struct xc_dom_arch xc_dom_32_pae 
 static struct xc_dom_arch xc_dom_64 = {
     .guest_type = "xen-3.0-x86_64",
     .native_protocol = XEN_IO_PROTO_ABI_X86_64,
-    .page_shift = PAGE_SHIFT_X86,
+    .page_shift = XC_PAGE_SHIFT,
     .sizeof_pfn = 8,
     .alloc_magic_pages = alloc_magic_pages,
     .count_pgtables = count_pgtables_x86_64,
@@ -855,13 +855,13 @@ int arch_setup_bootlate(struct xc_dom_im
     DOMPRINTF("%s: shared_info: pfn 0x%" PRIpfn ", mfn 0x%" PRIpfn "",
               __FUNCTION__, dom->shared_info_pfn, dom->shared_info_mfn);
     shared_info = xc_map_foreign_range(dom->xch, dom->guest_domid,
-                                       PAGE_SIZE_X86,
+                                       XC_PAGE_SIZE,
                                        PROT_READ | PROT_WRITE,
                                        shinfo);
     if ( shared_info == NULL )
         return -1;
     dom->arch_hooks->shared_info(dom, shared_info);
-    munmap(shared_info, PAGE_SIZE_X86);
+    munmap(shared_info, XC_PAGE_SIZE);
 
     return 0;
 }
diff -r c2a8bde9ad6e tools/libxc/xc_misc.c
--- a/tools/libxc/xc_misc.c	Wed Nov 02 14:54:36 2011 +0100
+++ b/tools/libxc/xc_misc.c	Wed Nov 09 14:01:30 2011 +0100
@@ -177,28 +177,6 @@ int xc_sched_id(xc_interface *xch,
     return 0;
 }
 
-#if defined(__i386__) || defined(__x86_64__)
-int xc_mca_op(xc_interface *xch, struct xen_mc *mc)
-{
-    int ret = 0;
-    DECLARE_HYPERCALL;
-    DECLARE_HYPERCALL_BOUNCE(mc, sizeof(*mc), XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
-
-    if ( xc_hypercall_bounce_pre(xch, mc) )
-    {
-        PERROR("Could not bounce xen_mc memory buffer");
-        return -1;
-    }
-    mc->interface_version = XEN_MCA_INTERFACE_VERSION;
-
-    hypercall.op = __HYPERVISOR_mca;
-    hypercall.arg[0] = HYPERCALL_BUFFER_AS_ARG(mc);
-    ret = do_xen_hypercall(xch, &hypercall);
-    xc_hypercall_bounce_post(xch, mc);
-    return ret;
-}
-#endif
-
 int xc_perfc_reset(xc_interface *xch)
 {
     DECLARE_SYSCTL;
diff -r c2a8bde9ad6e tools/libxc/xc_misc_x86.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxc/xc_misc_x86.c	Wed Nov 09 14:01:30 2011 +0100
@@ -0,0 +1,51 @@
+/******************************************************************************
+ * xc_misc_x86.c
+ *
+ * Miscellaneous x86 specific control interface functions.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "xc_private.h"
+
+int xc_mca_op(xc_interface *xch, struct xen_mc *mc)
+{
+    int ret = 0;
+    DECLARE_HYPERCALL;
+    DECLARE_HYPERCALL_BOUNCE(mc, sizeof(*mc), XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
+
+    if ( xc_hypercall_bounce_pre(xch, mc) )
+    {
+        PERROR("Could not bounce xen_mc memory buffer");
+        return -1;
+    }
+    mc->interface_version = XEN_MCA_INTERFACE_VERSION;
+
+    hypercall.op = __HYPERVISOR_mca;
+    hypercall.arg[0] = HYPERCALL_BUFFER_AS_ARG(mc);
+    ret = do_xen_hypercall(xch, &hypercall);
+    xc_hypercall_bounce_post(xch, mc);
+    return ret;
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff -r c2a8bde9ad6e tools/libxc/xc_offline_page.c
--- a/tools/libxc/xc_offline_page.c	Wed Nov 02 14:54:36 2011 +0100
+++ b/tools/libxc/xc_offline_page.c	Wed Nov 09 14:01:30 2011 +0100
@@ -369,7 +369,7 @@ static int __clear_pte(xc_interface *xch
 
     /* XXX Check for PSE bit here */
     /* Hit one entry */
-    if ( ((pte >> PAGE_SHIFT_X86) & MFN_MASK_X86) == mfn)
+    if ( ((pte >> XC_PAGE_SHIFT) & MFN_MASK_X86) == mfn)
     {
         *new_pte = pte & ~_PAGE_PRESENT;
         if (!backup_ptes(table_mfn, table_offset, backup))
@@ -400,7 +400,7 @@ static int __update_pte(xc_interface *xc
         if (pte & _PAGE_PRESENT)
             ERROR("Page present while in backup ptes\n");
         pte &= ~MFN_MASK_X86;
-        pte |= (new_mfn << PAGE_SHIFT_X86) | _PAGE_PRESENT;
+        pte |= (new_mfn << XC_PAGE_SHIFT) | _PAGE_PRESENT;
         *new_pte = pte;
         return 1;
     }
diff -r c2a8bde9ad6e tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h	Wed Nov 02 14:54:36 2011 +0100
+++ b/tools/libxc/xenctrl.h	Wed Nov 09 14:01:30 2011 +0100
@@ -49,52 +49,6 @@
 
 #include "xentoollog.h"
 
-#if defined(__i386__) || defined(__x86_64__)
-#include <xen/foreign/x86_32.h>
-#include <xen/foreign/x86_64.h>
-#include <xen/arch-x86/xen-mca.h>
-#endif
-
-#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))
-
-#define INVALID_MFN  (~0UL)
-
-/*
- *  DEFINITIONS FOR CPU BARRIERS
- */
-
-#if defined(__i386__)
-#define xen_mb()  asm volatile ( "lock; addl $0,0(%%esp)" : : : "memory" )
-#define xen_rmb() asm volatile ( "lock; addl $0,0(%%esp)" : : : "memory" )
-#define xen_wmb() asm volatile ( "" : : : "memory")
-#elif defined(__x86_64__)
-#define xen_mb()  asm volatile ( "mfence" : : : "memory")
-#define xen_rmb() asm volatile ( "lfence" : : : "memory")
-#define xen_wmb() asm volatile ( "" : : : "memory")
-#elif defined(__ia64__)
-#define xen_mb()   asm volatile ("mf" ::: "memory")
-#define xen_rmb()  asm volatile ("mf" ::: "memory")
-#define xen_wmb()  asm volatile ("mf" ::: "memory")
-#else
-#error "Define barriers"
-#endif
-
-
-#define XENCTRL_HAS_XC_INTERFACE 1
-/* In Xen 4.0 and earlier, xc_interface_open and xc_evtchn_open would
- * both return ints being the file descriptor.  In 4.1 and later, they
- * return an xc_interface* and xc_evtchn*, respectively - ie, a
- * pointer to an opaque struct.  This #define is provided in 4.1 and
- * later, allowing out-of-tree callers to more easily distinguish
- * between, and be compatible with, both versions.
- */
-
 
 /*
  *  GENERAL
@@ -119,6 +73,43 @@ typedef struct xc_interface_core xc_gnts
 typedef enum xc_error_code xc_error_code;
 
 
+#if defined(__i386__) || defined(__x86_64__)
+#include "xenctrl_x86.h"
+#endif
+
+#ifdef __ia64__
+#define XC_PAGE_SHIFT           14
+#endif
+#define XC_PAGE_SIZE            (1UL << XC_PAGE_SHIFT)
+#define XC_PAGE_MASK            (~(XC_PAGE_SIZE-1))
+
+#define INVALID_MFN  (~0UL)
+
+#define XENCTRL_HAS_XC_INTERFACE 1
+/* In Xen 4.0 and earlier, xc_interface_open and xc_evtchn_open would
+ * both return ints being the file descriptor.  In 4.1 and later, they
+ * return an xc_interface* and xc_evtchn*, respectively - ie, a
+ * pointer to an opaque struct.  This #define is provided in 4.1 and
+ * later, allowing out-of-tree callers to more easily distinguish
+ * between, and be compatible with, both versions.
+ */
+
+
+/*
+ *  DEFINITIONS FOR CPU BARRIERS
+ */
+
+#ifdef __ia64__
+#define xen_mb()   asm volatile ("mf" ::: "memory")
+#define xen_rmb()  asm volatile ("mf" ::: "memory")
+#define xen_wmb()  asm volatile ("mf" ::: "memory")
+#else
+#ifndef xen_mb
+#error "Define barriers"
+#endif
+#endif
+
+
 /*
  *  INITIALIZATION FUNCTIONS
  */
@@ -364,33 +355,22 @@ typedef struct xc_dominfo {
 
 typedef xen_domctl_getdomaininfo_t xc_domaininfo_t;
 
+#ifdef __ia64__
 typedef union 
 {
-#if defined(__i386__) || defined(__x86_64__)
-    vcpu_guest_context_x86_64_t x64;
-    vcpu_guest_context_x86_32_t x32;   
-#endif
     vcpu_guest_context_t c;
 } vcpu_guest_context_any_t;
 
 typedef union
 {
-#if defined(__i386__) || defined(__x86_64__)
-    shared_info_x86_64_t x64;
-    shared_info_x86_32_t x32;
-#endif
     shared_info_t s;
 } shared_info_any_t;
 
 typedef union
 {
-#if defined(__i386__) || defined(__x86_64__)
-    start_info_x86_64_t x64;
-    start_info_x86_32_t x32;
-#endif
     start_info_t s;
 } start_info_any_t;
-
+#endif
 
 int xc_domain_create(xc_interface *xch,
                      uint32_t ssidref,
@@ -968,32 +948,6 @@ int xc_domain_set_memmap_limit(xc_interf
                                uint32_t domid,
                                unsigned long map_limitkb);
 
-#if defined(__i386__) || defined(__x86_64__)
-/*
- * PC BIOS standard E820 types and structure.
- */
-#define E820_RAM          1
-#define E820_RESERVED     2
-#define E820_ACPI         3
-#define E820_NVS          4
-#define E820_UNUSABLE     5
-
-#define E820MAX           (128)
-
-struct e820entry {
-    uint64_t addr;
-    uint64_t size;
-    uint32_t type;
-} __attribute__((packed));
-int xc_domain_set_memory_map(xc_interface *xch,
-                               uint32_t domid,
-                               struct e820entry entries[],
-                               uint32_t nr_entries);
-
-int xc_get_machine_memory_map(xc_interface *xch,
-                              struct e820entry entries[],
-                              uint32_t max_entries);
-#endif
 int xc_domain_set_time_offset(xc_interface *xch,
                               uint32_t domid,
                               int32_t time_offset_seconds);
@@ -1691,23 +1645,6 @@ int xc_domain_debug_control(xc_interface
                             uint32_t sop,
                             uint32_t vcpu);
 
-#if defined(__i386__) || defined(__x86_64__)
-int xc_cpuid_check(xc_interface *xch,
-                   const unsigned int *input,
-                   const char **config,
-                   char **config_transformed);
-int xc_cpuid_set(xc_interface *xch,
-                 domid_t domid,
-                 const unsigned int *input,
-                 const char **config,
-                 char **config_transformed);
-int xc_cpuid_apply_policy(xc_interface *xch,
-                          domid_t domid);
-void xc_cpuid_to_str(const unsigned int *regs,
-                     char **strs);
-int xc_mca_op(xc_interface *xch, struct xen_mc *mc);
-#endif
-
 struct xc_px_val {
     uint64_t freq;        /* Px core frequency */
     uint64_t residency;   /* Px residency time */
diff -r c2a8bde9ad6e tools/libxc/xenctrl_x86.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxc/xenctrl_x86.h	Wed Nov 09 14:01:30 2011 +0100
@@ -0,0 +1,111 @@
+/******************************************************************************
+ * xenctrl.h
+ *
+ * A library for low-level access to the Xen x86 control interfaces.
+ *
+ * Copyright (c) 2003-2004, K A Fraser.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef XENCTRL_X86_H
+#define XENCTRL_X86_H
+
+#include <xen/foreign/x86_32.h>
+#include <xen/foreign/x86_64.h>
+#include <xen/arch-x86/xen-mca.h>
+
+#define XC_PAGE_SHIFT           12
+
+/*
+ *  DEFINITIONS FOR CPU BARRIERS
+ */
+
+#if defined(__i386__)
+#define xen_mb()  asm volatile ( "lock; addl $0,0(%%esp)" : : : "memory" )
+#define xen_rmb() asm volatile ( "lock; addl $0,0(%%esp)" : : : "memory" )
+#define xen_wmb() asm volatile ( "" : : : "memory")
+#elif defined(__x86_64__)
+#define xen_mb()  asm volatile ( "mfence" : : : "memory")
+#define xen_rmb() asm volatile ( "lfence" : : : "memory")
+#define xen_wmb() asm volatile ( "" : : : "memory")
+#endif
+
+
+typedef union 
+{
+    vcpu_guest_context_x86_64_t x64;
+    vcpu_guest_context_x86_32_t x32;   
+    vcpu_guest_context_t c;
+} vcpu_guest_context_any_t;
+
+typedef union
+{
+    shared_info_x86_64_t x64;
+    shared_info_x86_32_t x32;
+    shared_info_t s;
+} shared_info_any_t;
+
+typedef union
+{
+    start_info_x86_64_t x64;
+    start_info_x86_32_t x32;
+    start_info_t s;
+} start_info_any_t;
+
+
+/*
+ * PC BIOS standard E820 types and structure.
+ */
+#define E820_RAM          1
+#define E820_RESERVED     2
+#define E820_ACPI         3
+#define E820_NVS          4
+#define E820_UNUSABLE     5
+
+#define E820MAX           (128)
+
+struct e820entry {
+    uint64_t addr;
+    uint64_t size;
+    uint32_t type;
+} __attribute__((packed));
+
+int xc_domain_set_memory_map(xc_interface *xch,
+                               uint32_t domid,
+                               struct e820entry entries[],
+                               uint32_t nr_entries);
+
+int xc_get_machine_memory_map(xc_interface *xch,
+                              struct e820entry entries[],
+                              uint32_t max_entries);
+
+
+int xc_cpuid_check(xc_interface *xch,
+                   const unsigned int *input,
+                   const char **config,
+                   char **config_transformed);
+int xc_cpuid_set(xc_interface *xch,
+                 domid_t domid,
+                 const unsigned int *input,
+                 const char **config,
+                 char **config_transformed);
+int xc_cpuid_apply_policy(xc_interface *xch,
+                          domid_t domid);
+void xc_cpuid_to_str(const unsigned int *regs,
+                     char **strs);
+int xc_mca_op(xc_interface *xch, struct xen_mc *mc);
+
+#endif /* XENCTRL_X86_H */
diff -r c2a8bde9ad6e tools/libxc/xg_private.h
--- a/tools/libxc/xg_private.h	Wed Nov 02 14:54:36 2011 +0100
+++ b/tools/libxc/xg_private.h	Wed Nov 09 14:01:30 2011 +0100
@@ -34,6 +34,10 @@
 #include <xen/memory.h>
 #include <xen/elfnote.h>
 
+#if defined(__i386__) || defined(__x86_64__)
+#include "xg_x86_private.h"
+#endif
+
 #ifndef ELFSIZE
 #include <limits.h>
 #if UINT_MAX == ULONG_MAX
@@ -52,112 +56,8 @@ char *xc_inflate_buffer(xc_interface *xc
 
 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
-
-#define L1_PAGETABLE_SHIFT_I386       12
-#define L2_PAGETABLE_SHIFT_I386       22
-#define L1_PAGETABLE_ENTRIES_I386   1024
-#define L2_PAGETABLE_ENTRIES_I386   1024
-
-#define L1_PAGETABLE_SHIFT_PAE        12
-#define L2_PAGETABLE_SHIFT_PAE        21
-#define L3_PAGETABLE_SHIFT_PAE        30
-#define L1_PAGETABLE_ENTRIES_PAE     512
-#define L2_PAGETABLE_ENTRIES_PAE     512
-#define L3_PAGETABLE_ENTRIES_PAE       4
-
-#define L1_PAGETABLE_SHIFT_X86_64     12
-#define L2_PAGETABLE_SHIFT_X86_64     21
-#define L3_PAGETABLE_SHIFT_X86_64     30
-#define L4_PAGETABLE_SHIFT_X86_64     39
-#define L1_PAGETABLE_ENTRIES_X86_64  512
-#define L2_PAGETABLE_ENTRIES_X86_64  512
-#define L3_PAGETABLE_ENTRIES_X86_64  512
-#define L4_PAGETABLE_ENTRIES_X86_64  512
-
-#if defined(__i386__)
-#define L1_PAGETABLE_SHIFT     L1_PAGETABLE_SHIFT_I386
-#define L2_PAGETABLE_SHIFT     L2_PAGETABLE_SHIFT_I386
-#define L1_PAGETABLE_ENTRIES   L1_PAGETABLE_ENTRIES_I386
-#define L2_PAGETABLE_ENTRIES   L2_PAGETABLE_ENTRIES_I386
-#elif defined(__x86_64__)
-#define L1_PAGETABLE_SHIFT     L1_PAGETABLE_SHIFT_X86_64
-#define L2_PAGETABLE_SHIFT     L2_PAGETABLE_SHIFT_X86_64
-#define L3_PAGETABLE_SHIFT     L3_PAGETABLE_SHIFT_X86_64
-#define L4_PAGETABLE_SHIFT     L4_PAGETABLE_SHIFT_X86_64
-#define L1_PAGETABLE_ENTRIES   L1_PAGETABLE_ENTRIES_X86_64
-#define L2_PAGETABLE_ENTRIES   L2_PAGETABLE_ENTRIES_X86_64
-#define L3_PAGETABLE_ENTRIES   L3_PAGETABLE_ENTRIES_X86_64
-#define L4_PAGETABLE_ENTRIES   L4_PAGETABLE_ENTRIES_X86_64
-#endif
-
-typedef uint32_t l1_pgentry_32_t;
-typedef uint32_t l2_pgentry_32_t;
-typedef uint64_t l1_pgentry_64_t;
-typedef uint64_t l2_pgentry_64_t;
-typedef uint64_t l3_pgentry_64_t;
-typedef uint64_t l4_pgentry_64_t;
-
-#if defined(__i386__)
-typedef l1_pgentry_32_t l1_pgentry_t;
-typedef l2_pgentry_32_t l2_pgentry_t;
-#elif defined(__x86_64__)
-typedef l1_pgentry_64_t l1_pgentry_t;
-typedef l2_pgentry_64_t l2_pgentry_t;
-typedef l3_pgentry_64_t l3_pgentry_t;
-typedef l4_pgentry_64_t l4_pgentry_t;
-#endif
-
-#define l1_table_offset_i386(_a) \
-  (((_a) >> L1_PAGETABLE_SHIFT_I386) & (L1_PAGETABLE_ENTRIES_I386 - 1))
-#define l2_table_offset_i386(_a) \
-  (((_a) >> L2_PAGETABLE_SHIFT_I386) & (L2_PAGETABLE_ENTRIES_I386 - 1))
-
-#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))
-
-#define l1_table_offset_x86_64(_a) \
-  (((_a) >> L1_PAGETABLE_SHIFT_X86_64) & (L1_PAGETABLE_ENTRIES_X86_64 - 1))
-#define l2_table_offset_x86_64(_a) \
-  (((_a) >> L2_PAGETABLE_SHIFT_X86_64) & (L2_PAGETABLE_ENTRIES_X86_64 - 1))
-#define l3_table_offset_x86_64(_a) \
-  (((_a) >> L3_PAGETABLE_SHIFT_X86_64) & (L3_PAGETABLE_ENTRIES_X86_64 - 1))
-#define l4_table_offset_x86_64(_a) \
-  (((_a) >> L4_PAGETABLE_SHIFT_X86_64) & (L4_PAGETABLE_ENTRIES_X86_64 - 1))
-
-#if defined(__i386__)
-#define l1_table_offset(_a) l1_table_offset_i386(_a)
-#define l2_table_offset(_a) l2_table_offset_i386(_a)
-#elif defined(__x86_64__)
-#define l1_table_offset(_a) l1_table_offset_x86_64(_a)
-#define l2_table_offset(_a) l2_table_offset_x86_64(_a)
-#define l3_table_offset(_a) l3_table_offset_x86_64(_a)
-#define l4_table_offset(_a) l4_table_offset_x86_64(_a)
-#endif
-
-#define PAGE_SHIFT_X86          12
-#define PAGE_SIZE_X86           (1UL << PAGE_SHIFT_X86)
-#define PAGE_MASK_X86           (~(PAGE_SIZE_X86-1))
-
-#define PAGE_SHIFT_IA64         14
-#define PAGE_SIZE_IA64          (1UL << PAGE_SHIFT_IA64)
-#define PAGE_MASK_IA64          (~(PAGE_SIZE_IA64-1))
-
 #define ROUNDUP(_x,_w) (((unsigned long)(_x)+(1UL<<(_w))-1) & ~((1UL<<(_w))-1))
-#define NRPAGES(x) (ROUNDUP(x, PAGE_SHIFT) >> PAGE_SHIFT)
+#define NRPAGES(x) (ROUNDUP(x, XC_PAGE_SHIFT) >> XC_PAGE_SHIFT)
 
 
 /* XXX SMH: following skanky macros rely on variable p2m_size being set */
@@ -169,7 +69,7 @@ struct domain_info_context {
 };
 
 /* Number of xen_pfn_t in a page */
-#define FPP             (PAGE_SIZE/(dinfo->guest_width))
+#define FPP             (XC_PAGE_SIZE/(dinfo->guest_width))
 
 /* Number of entries in the pfn_to_mfn_frame_list_list */
 #define P2M_FLL_ENTRIES (((dinfo->p2m_size)+(FPP*FPP)-1)/(FPP*FPP))
@@ -182,11 +82,6 @@ struct domain_info_context {
 #define P2M_TOOLS_FL_SIZE ((P2M_FL_ENTRIES) *                           \
                            MAX((sizeof (xen_pfn_t)), dinfo->guest_width))
 
-/* Masks for PTE<->PFN conversions */
-#define MADDR_BITS_X86  ((dinfo->guest_width == 8) ? 52 : 44)
-#define MFN_MASK_X86    ((1ULL << (MADDR_BITS_X86 - PAGE_SHIFT_X86)) - 1)
-#define MADDR_MASK_X86  (MFN_MASK_X86 << PAGE_SHIFT_X86)
-
 
 #define PAEKERN_no           0
 #define PAEKERN_yes          1
diff -r c2a8bde9ad6e tools/libxc/xg_x86_private.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxc/xg_x86_private.h	Wed Nov 09 14:01:30 2011 +0100
@@ -0,0 +1,121 @@
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef XG_X86_PRIVATE_H
+#define XG_X86_PRIVATE_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
+
+#define L1_PAGETABLE_SHIFT_I386       12
+#define L2_PAGETABLE_SHIFT_I386       22
+#define L1_PAGETABLE_ENTRIES_I386   1024
+#define L2_PAGETABLE_ENTRIES_I386   1024
+
+#define L1_PAGETABLE_SHIFT_PAE        12
+#define L2_PAGETABLE_SHIFT_PAE        21
+#define L3_PAGETABLE_SHIFT_PAE        30
+#define L1_PAGETABLE_ENTRIES_PAE     512
+#define L2_PAGETABLE_ENTRIES_PAE     512
+#define L3_PAGETABLE_ENTRIES_PAE       4
+
+#define L1_PAGETABLE_SHIFT_X86_64     12
+#define L2_PAGETABLE_SHIFT_X86_64     21
+#define L3_PAGETABLE_SHIFT_X86_64     30
+#define L4_PAGETABLE_SHIFT_X86_64     39
+#define L1_PAGETABLE_ENTRIES_X86_64  512
+#define L2_PAGETABLE_ENTRIES_X86_64  512
+#define L3_PAGETABLE_ENTRIES_X86_64  512
+#define L4_PAGETABLE_ENTRIES_X86_64  512
+
+#if defined(__i386__)
+#define L1_PAGETABLE_SHIFT     L1_PAGETABLE_SHIFT_I386
+#define L2_PAGETABLE_SHIFT     L2_PAGETABLE_SHIFT_I386
+#define L1_PAGETABLE_ENTRIES   L1_PAGETABLE_ENTRIES_I386
+#define L2_PAGETABLE_ENTRIES   L2_PAGETABLE_ENTRIES_I386
+#elif defined(__x86_64__)
+#define L1_PAGETABLE_SHIFT     L1_PAGETABLE_SHIFT_X86_64
+#define L2_PAGETABLE_SHIFT     L2_PAGETABLE_SHIFT_X86_64
+#define L3_PAGETABLE_SHIFT     L3_PAGETABLE_SHIFT_X86_64
+#define L4_PAGETABLE_SHIFT     L4_PAGETABLE_SHIFT_X86_64
+#define L1_PAGETABLE_ENTRIES   L1_PAGETABLE_ENTRIES_X86_64
+#define L2_PAGETABLE_ENTRIES   L2_PAGETABLE_ENTRIES_X86_64
+#define L3_PAGETABLE_ENTRIES   L3_PAGETABLE_ENTRIES_X86_64
+#define L4_PAGETABLE_ENTRIES   L4_PAGETABLE_ENTRIES_X86_64
+#endif
+
+typedef uint32_t l1_pgentry_32_t;
+typedef uint32_t l2_pgentry_32_t;
+typedef uint64_t l1_pgentry_64_t;
+typedef uint64_t l2_pgentry_64_t;
+typedef uint64_t l3_pgentry_64_t;
+typedef uint64_t l4_pgentry_64_t;
+
+#if defined(__i386__)
+typedef l1_pgentry_32_t l1_pgentry_t;
+typedef l2_pgentry_32_t l2_pgentry_t;
+#elif defined(__x86_64__)
+typedef l1_pgentry_64_t l1_pgentry_t;
+typedef l2_pgentry_64_t l2_pgentry_t;
+typedef l3_pgentry_64_t l3_pgentry_t;
+typedef l4_pgentry_64_t l4_pgentry_t;
+#endif
+
+#define l1_table_offset_i386(_a) \
+  (((_a) >> L1_PAGETABLE_SHIFT_I386) & (L1_PAGETABLE_ENTRIES_I386 - 1))
+#define l2_table_offset_i386(_a) \
+  (((_a) >> L2_PAGETABLE_SHIFT_I386) & (L2_PAGETABLE_ENTRIES_I386 - 1))
+
+#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))
+
+#define l1_table_offset_x86_64(_a) \
+  (((_a) >> L1_PAGETABLE_SHIFT_X86_64) & (L1_PAGETABLE_ENTRIES_X86_64 - 1))
+#define l2_table_offset_x86_64(_a) \
+  (((_a) >> L2_PAGETABLE_SHIFT_X86_64) & (L2_PAGETABLE_ENTRIES_X86_64 - 1))
+#define l3_table_offset_x86_64(_a) \
+  (((_a) >> L3_PAGETABLE_SHIFT_X86_64) & (L3_PAGETABLE_ENTRIES_X86_64 - 1))
+#define l4_table_offset_x86_64(_a) \
+  (((_a) >> L4_PAGETABLE_SHIFT_X86_64) & (L4_PAGETABLE_ENTRIES_X86_64 - 1))
+
+#if defined(__i386__)
+#define l1_table_offset(_a) l1_table_offset_i386(_a)
+#define l2_table_offset(_a) l2_table_offset_i386(_a)
+#elif defined(__x86_64__)
+#define l1_table_offset(_a) l1_table_offset_x86_64(_a)
+#define l2_table_offset(_a) l2_table_offset_x86_64(_a)
+#define l3_table_offset(_a) l3_table_offset_x86_64(_a)
+#define l4_table_offset(_a) l4_table_offset_x86_64(_a)
+#endif
+
+/* Masks for PTE<->PFN conversions */
+#define MADDR_BITS_X86  ((dinfo->guest_width == 8) ? 52 : 44)
+#define MFN_MASK_X86    ((1ULL << (MADDR_BITS_X86 - XC_PAGE_SHIFT)) - 1)
+#define MADDR_MASK_X86  (MFN_MASK_X86 << XC_PAGE_SHIFT)
+
+#endif /* XG_X86_PRIVATE_H */

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-12-02  8:34 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-09 13:12 [PATCH] libxc: Refactor x86 specific code into x86 specific files Christoph Egger
2011-11-24 16:30 ` Ian Jackson
2011-11-24 16:56   ` Christoph Egger
2011-12-02  8:34     ` Ian Campbell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.