WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] XEN/VTI utilizes a PMT table to describe physical->machi

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] XEN/VTI utilizes a PMT table to describe physical->machine
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Tue, 14 Jun 2005 17:57:25 +0000
Delivery-date: Sun, 19 Jun 2005 18:03:04 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: Xen Development List <xen-devel@xxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
ChangeSet 1.1709.1.7, 2005/06/14 11:57:25-06:00, djm@xxxxxxxxxxxxxxx

        XEN/VTI utilizes a PMT table to describe physical->machine
        mapping info, instead of 3 level page tables from Linux.
        Attached patch adds some necessary macro/interface/definitions
        about that structure.  Some stuff is added to public directory,
        because control panel needs to use those info to construct domain.
        
        Signed-off-by Kevin Tian <Kevin.tian@xxxxxxxxx>



 arch/ia64/xenmem.c         |    2 +-
 include/asm-ia64/domain.h  |   11 ++++++++++-
 include/asm-ia64/mm.h      |   27 +++++++++++++++++++++++++--
 include/asm-ia64/vmx_vpd.h |    1 +
 include/public/arch-ia64.h |   26 ++++++++++++++++++++++++++
 5 files changed, 63 insertions(+), 4 deletions(-)


diff -Nru a/xen/arch/ia64/xenmem.c b/xen/arch/ia64/xenmem.c
--- a/xen/arch/ia64/xenmem.c    2005-06-19 14:04:11 -04:00
+++ b/xen/arch/ia64/xenmem.c    2005-06-19 14:04:11 -04:00
@@ -52,7 +52,7 @@
                panic("Not enough memory to bootstrap Xen.\n");
 
        printk("machine to physical table: 0x%lx\n", (u64)mpt_table);
-       memset(mpt_table, 0x55, mpt_table_size);
+       memset(mpt_table, INVALID_M2P_ENTRY, mpt_table_size);
 
        /* Any more setup here? On VMX enabled platform,
         * there's no need to keep guest linear pg table,
diff -Nru a/xen/include/asm-ia64/domain.h b/xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h     2005-06-19 14:04:12 -04:00
+++ b/xen/include/asm-ia64/domain.h     2005-06-19 14:04:12 -04:00
@@ -6,6 +6,7 @@
 #include <asm/vmx_vpd.h>
 #include <asm/vmmu.h>
 #include <asm/regionreg.h>
+#include <public/arch-ia64.h>
 #endif // CONFIG_VTI
 #include <xen/list.h>
 
@@ -33,7 +34,15 @@
     int imp_va_msb;
     ia64_rr emul_phy_rr0;
     ia64_rr emul_phy_rr4;
-    u64 *pmt;  /* physical to machine table */
+    unsigned long *pmt;        /* physical to machine table */
+    /*
+     * max_pfn is the maximum page frame in guest physical space, including
+     * inter-middle I/O ranges and memory holes. This is different with
+     * max_pages in domain struct, which indicates maximum memory size
+     */
+    unsigned long max_pfn;
+    unsigned int section_nr;
+    mm_section_t *sections;    /* Describe memory hole except for Dom0 */
 #endif  //CONFIG_VTI
     u64 xen_vastart;
     u64 xen_vaend;
diff -Nru a/xen/include/asm-ia64/mm.h b/xen/include/asm-ia64/mm.h
--- a/xen/include/asm-ia64/mm.h 2005-06-19 14:04:11 -04:00
+++ b/xen/include/asm-ia64/mm.h 2005-06-19 14:04:12 -04:00
@@ -375,17 +375,40 @@
 #undef machine_to_phys_mapping
 #define machine_to_phys_mapping        mpt_table
 
+#define INVALID_M2P_ENTRY        (~0U)
+#define VALID_M2P(_e)            (!((_e) & (1U<<63)))
+#define IS_INVALID_M2P_ENTRY(_e) (!VALID_M2P(_e))
 /* If pmt table is provided by control pannel later, we need __get_user
 * here. However if it's allocated by HV, we should access it directly
 */
-#define phys_to_machine_mapping(d, gpfn)       \
-    ((d) == dom0 ? gpfn : (d)->arch.pmt[(gpfn)])
+#define phys_to_machine_mapping(d, gpfn)                       \
+    ((d) == dom0 ? gpfn :                                      \
+       (gpfn <= d->arch.max_pfn ? (d)->arch.pmt[(gpfn)] :      \
+               INVALID_MFN))
 
 #define __mfn_to_gpfn(_d, mfn)                 \
     machine_to_phys_mapping[(mfn)]
 
 #define __gpfn_to_mfn(_d, gpfn)                        \
     phys_to_machine_mapping((_d), (gpfn))
+
+#define __gpfn_invalid(_d, gpfn)                       \
+       (__gpfn_to_mfn((_d), (gpfn)) & GPFN_INV_MASK)
+
+#define __gpfn_valid(_d, gpfn) !__gpfn_invalid(_d, gpfn)
+
+/* Return I/O type if trye */
+#define __gpfn_is_io(_d, gpfn)                         \
+       (__gpfn_valid(_d, gpfn) ?                       \
+       (__gpfn_to_mfn((_d), (gpfn)) & GPFN_IO_MASK) : 0)
+
+#define __gpfn_is_mem(_d, gpfn)                                \
+       (__gpfn_valid(_d, gpfn) ?                       \
+       ((__gpfn_to_mfn((_d), (gpfn)) & GPFN_IO_MASK) == GPFN_MEM) : 0)
+
+
+#define __gpa_to_mpa(_d, gpa)   \
+    ((__gpfn_to_mfn((_d),(gpa)>>PAGE_SHIFT)<<PAGE_SHIFT)|((gpa)&~PAGE_MASK))
 #endif // CONFIG_VTI
 
 #endif /* __ASM_IA64_MM_H__ */
diff -Nru a/xen/include/asm-ia64/vmx_vpd.h b/xen/include/asm-ia64/vmx_vpd.h
--- a/xen/include/asm-ia64/vmx_vpd.h    2005-06-19 14:04:12 -04:00
+++ b/xen/include/asm-ia64/vmx_vpd.h    2005-06-19 14:04:12 -04:00
@@ -26,6 +26,7 @@
 
 #include <asm/vtm.h>
 #include <asm/vmx_platform.h>
+#include <public/arch-ia64.h>
 
 #define VPD_SHIFT      17      /* 128K requirement */
 #define VPD_SIZE       (1 << VPD_SHIFT)
diff -Nru a/xen/include/public/arch-ia64.h b/xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h    2005-06-19 14:04:11 -04:00
+++ b/xen/include/public/arch-ia64.h    2005-06-19 14:04:11 -04:00
@@ -19,6 +19,32 @@
 /* NB. Both the following are 64 bits each. */
 typedef unsigned long memory_t;   /* Full-sized pointer/address/memory-size. */
 
+#define MAX_NR_SECTION  32  // at most 32 memory holes
+typedef struct {
+    unsigned long      start;  /* start of memory hole */
+    unsigned long      end;    /* end of memory hole */
+} mm_section_t;
+
+typedef struct {
+    unsigned long      mfn : 56;
+    unsigned long      type: 8;
+} pmt_entry_t;
+
+#define GPFN_MEM               (0UL << 56)     /* Guest pfn is normal mem */
+#define GPFN_FRAME_BUFFER      (1UL << 56)     /* VGA framebuffer */
+#define GPFN_LOW_MMIO          (2UL << 56)     /* Low MMIO range */
+#define GPFN_PIB               (3UL << 56)     /* PIB base */
+#define GPFN_IOSAPIC           (4UL << 56)     /* IOSAPIC base */
+#define GPFN_LEGACY_IO         (5UL << 56)     /* Legacy I/O base */
+#define GPFN_GFW               (6UL << 56)     /* Guest Firmware */
+#define GPFN_HIGH_MMIO         (7UL << 56)     /* High MMIO range */
+
+#define GPFN_IO_MASK           (7UL << 56)     /* Guest pfn is I/O type */
+#define GPFN_INV_MASK          (31UL << 59)    /* Guest pfn is invalid */
+
+#define INVALID_MFN              (~0UL)
+
+
 typedef struct
 {
 } PACKED cpu_user_regs;

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] XEN/VTI utilizes a PMT table to describe physical->machine, BitKeeper Bot <=