ia64/xen-unstable

changeset 8695:1db05e589fa0

Replace the MMUEXTOP 'pfn hole' commands with a new
arch-specific XENMEM_ operation.

Signed-off-by: Keir Fraser <keir@xensource.com>
author kaf24@firebug.cl.cam.ac.uk
date Sat Jan 28 15:31:43 2006 +0100 (2006-01-28)
parents ce057aa33cad
children f4fc27362892
files tools/libxc/xc_linux_build.c tools/libxc/xc_misc.c tools/libxc/xc_private.c tools/libxc/xenctrl.h xen/arch/x86/mm.c xen/arch/x86/x86_32/mm.c xen/arch/x86/x86_64/mm.c xen/include/asm-x86/config.h xen/include/asm-x86/domain.h xen/include/asm-x86/mm.h xen/include/public/memory.h xen/include/public/xen.h xen/include/xen/sched.h
line diff
     1.1 --- a/tools/libxc/xc_linux_build.c	Sat Jan 28 13:01:19 2006 +0100
     1.2 +++ b/tools/libxc/xc_linux_build.c	Sat Jan 28 15:31:43 2006 +0100
     1.3 @@ -114,9 +114,12 @@ static int setup_pg_tables(int xc_handle
     1.4              vl2e++;
     1.5          }
     1.6  
     1.7 -        if (shadow_mode_enabled) {
     1.8 +        if ( shadow_mode_enabled )
     1.9 +        {
    1.10              *vl1e = (count << PAGE_SHIFT) | L1_PROT;
    1.11 -        } else {
    1.12 +        }
    1.13 +        else
    1.14 +        {
    1.15              *vl1e = (page_array[count] << PAGE_SHIFT) | L1_PROT;
    1.16              if ( (count >= ((vpt_start-dsi_v_start)>>PAGE_SHIFT)) && 
    1.17                   (count <  ((vpt_end  -dsi_v_start)>>PAGE_SHIFT)) )
    1.18 @@ -196,9 +199,12 @@ static int setup_pg_tables_pae(int xc_ha
    1.19                  *vl2e++ = l1tab | L2_PROT;
    1.20          }
    1.21          
    1.22 -        if (shadow_mode_enabled) {
    1.23 +        if ( shadow_mode_enabled )
    1.24 +        {
    1.25              *vl1e = (count << PAGE_SHIFT) | L1_PROT;
    1.26 -        } else {
    1.27 +        }
    1.28 +        else
    1.29 +        {
    1.30              *vl1e = ((uint64_t)page_array[count] << PAGE_SHIFT) | L1_PROT;
    1.31              if ( (count >= ((vpt_start-dsi_v_start)>>PAGE_SHIFT)) &&
    1.32                   (count <  ((vpt_end  -dsi_v_start)>>PAGE_SHIFT)) ) 
    1.33 @@ -289,9 +295,12 @@ static int setup_pg_tables_64(int xc_han
    1.34              vl2e++;
    1.35          }
    1.36          
    1.37 -        if (shadow_mode_enabled) {
    1.38 +        if ( shadow_mode_enabled )
    1.39 +        {
    1.40              *vl1e = (count << PAGE_SHIFT) | L1_PROT;
    1.41 -        } else {
    1.42 +        }
    1.43 +        else
    1.44 +        {
    1.45              *vl1e = (page_array[count] << PAGE_SHIFT) | L1_PROT;
    1.46              if ( (count >= ((vpt_start-dsi_v_start)>>PAGE_SHIFT)) &&
    1.47                   (count <  ((vpt_end  -dsi_v_start)>>PAGE_SHIFT)) ) 
    1.48 @@ -442,7 +451,9 @@ static int setup_guest(int xc_handle,
    1.49      {
    1.50          ctxt->initrd.start    = vinitrd_start;
    1.51          ctxt->initrd.size     = initrd_len;
    1.52 -    } else {
    1.53 +    }
    1.54 +    else
    1.55 +    {
    1.56          ctxt->initrd.start    = 0;
    1.57          ctxt->initrd.size     = 0;
    1.58      }
    1.59 @@ -553,12 +564,15 @@ static int setup_guest(int xc_handle,
    1.60          if ( (v_end - vstack_end) < (512UL << 10) )
    1.61              v_end += 1UL << 22; /* Add extra 4MB to get >= 512kB padding. */
    1.62  #if defined(__i386__)
    1.63 -        if (dsi.pae_kernel) {
    1.64 +        if ( dsi.pae_kernel )
    1.65 +        {
    1.66              /* FIXME: assumes one L2 pgtable @ 0xc0000000 */
    1.67              if ( (((v_end - dsi.v_start + ((1<<L2_PAGETABLE_SHIFT_PAE)-1)) >> 
    1.68                     L2_PAGETABLE_SHIFT_PAE) + 2) <= nr_pt_pages )
    1.69                  break;
    1.70 -        } else {
    1.71 +        }
    1.72 +        else
    1.73 +        {
    1.74              if ( (((v_end - dsi.v_start + ((1<<L2_PAGETABLE_SHIFT)-1)) >> 
    1.75                     L2_PAGETABLE_SHIFT) + 1) <= nr_pt_pages )
    1.76                  break;
    1.77 @@ -676,23 +690,33 @@ static int setup_guest(int xc_handle,
    1.78      if ( xc_finish_mmu_updates(xc_handle, mmu) )
    1.79          goto error_out;
    1.80  
    1.81 -    if (shadow_mode_enabled) {
    1.82 +    if ( shadow_mode_enabled )
    1.83 +    {
    1.84 +        struct xen_reserved_phys_area xrpa;
    1.85 +
    1.86          /* Enable shadow translate mode */
    1.87 -        if (xc_shadow_control(xc_handle, dom,
    1.88 -                              DOM0_SHADOW_CONTROL_OP_ENABLE_TRANSLATE,
    1.89 -                              NULL, 0, NULL) < 0) {
    1.90 +        if ( xc_shadow_control(xc_handle, dom,
    1.91 +                               DOM0_SHADOW_CONTROL_OP_ENABLE_TRANSLATE,
    1.92 +                               NULL, 0, NULL) < 0 )
    1.93 +        {
    1.94              PERROR("Could not enable translation mode");
    1.95              goto error_out;
    1.96          }
    1.97  
    1.98          /* Find the shared info frame.  It's guaranteed to be at the
    1.99             start of the PFN hole. */
   1.100 -        guest_shared_info_mfn = xc_get_pfn_hole_start(xc_handle, dom);
   1.101 -        if (guest_shared_info_mfn <= 0) {
   1.102 +        xrpa.domid = dom;
   1.103 +        xrpa.idx   = 0;
   1.104 +        rc = xc_memory_op(xc_handle, XENMEM_reserved_phys_area, &xrpa);
   1.105 +        if ( rc != 0 )
   1.106 +        {
   1.107              PERROR("Cannot find shared info pfn");
   1.108              goto error_out;
   1.109          }
   1.110 -    } else {
   1.111 +        guest_shared_info_mfn = xrpa.first_pfn;
   1.112 +    }
   1.113 +    else
   1.114 +    {
   1.115          guest_shared_info_mfn = shared_info_frame;
   1.116      }
   1.117  
   1.118 @@ -723,12 +747,16 @@ static int setup_guest(int xc_handle,
   1.119       * Pin down l2tab addr as page dir page - causes hypervisor to provide
   1.120       * correct protection for the page
   1.121       */
   1.122 -    if (!shadow_mode_enabled) {
   1.123 -        if (dsi.pae_kernel) {
   1.124 +    if ( !shadow_mode_enabled )
   1.125 +    {
   1.126 +        if ( dsi.pae_kernel )
   1.127 +        {
   1.128              if ( pin_table(xc_handle, MMUEXT_PIN_L3_TABLE,
   1.129                             ctxt->ctrlreg[3] >> PAGE_SHIFT, dom) )
   1.130                  goto error_out;
   1.131 -        } else {
   1.132 +        }
   1.133 +        else
   1.134 +        {
   1.135              if ( pin_table(xc_handle, MMUEXT_PIN_L2_TABLE,
   1.136                             ctxt->ctrlreg[3] >> PAGE_SHIFT, dom) )
   1.137                  goto error_out;
   1.138 @@ -751,10 +779,13 @@ static int setup_guest(int xc_handle,
   1.139      if ( xc_clear_domain_page(xc_handle, dom, *store_mfn) ||
   1.140           xc_clear_domain_page(xc_handle, dom, *console_mfn) )
   1.141          goto error_out;
   1.142 -    if (shadow_mode_enabled) {
   1.143 +    if ( shadow_mode_enabled )
   1.144 +    {
   1.145          guest_store_mfn = (vstoreinfo_start-dsi.v_start) >> PAGE_SHIFT;
   1.146          guest_console_mfn = (vconsole_start-dsi.v_start) >> PAGE_SHIFT;
   1.147 -    } else {
   1.148 +    }
   1.149 +    else
   1.150 +    {
   1.151          guest_store_mfn = *store_mfn;
   1.152          guest_console_mfn = *console_mfn;
   1.153      }
     2.1 --- a/tools/libxc/xc_misc.c	Sat Jan 28 13:01:19 2006 +0100
     2.2 +++ b/tools/libxc/xc_misc.c	Sat Jan 28 15:31:43 2006 +0100
     2.3 @@ -131,13 +131,6 @@ int xc_msr_write(int xc_handle, int cpu_
     2.4      return rc;
     2.5  }
     2.6  
     2.7 -int xc_get_pfn_hole_start(int xc_handle, domid_t dom)
     2.8 -{
     2.9 -    struct mmuext_op op = {0};
    2.10 -    op.cmd = MMUEXT_PFN_HOLE_BASE;
    2.11 -    return xc_mmuext_op(xc_handle, &op, 1, dom);
    2.12 -}
    2.13 -
    2.14  
    2.15  /*
    2.16   * Local variables:
     3.1 --- a/tools/libxc/xc_private.c	Sat Jan 28 13:01:19 2006 +0100
     3.2 +++ b/tools/libxc/xc_private.c	Sat Jan 28 15:31:43 2006 +0100
     3.3 @@ -201,6 +201,7 @@ int xc_memory_op(int xc_handle,
     3.4      {
     3.5      case XENMEM_increase_reservation:
     3.6      case XENMEM_decrease_reservation:
     3.7 +    case XENMEM_populate_physmap:
     3.8          if ( mlock(reservation, sizeof(*reservation)) != 0 )
     3.9          {
    3.10              PERROR("Could not mlock");
    3.11 @@ -229,6 +230,13 @@ int xc_memory_op(int xc_handle,
    3.12              goto out1;
    3.13          }
    3.14          break;
    3.15 +    case XENMEM_reserved_phys_area:
    3.16 +        if ( mlock(arg, sizeof(struct xen_reserved_phys_area)) )
    3.17 +        {
    3.18 +            PERROR("Could not mlock");
    3.19 +            goto out1;
    3.20 +        }
    3.21 +        break;
    3.22      }
    3.23  
    3.24      ret = do_xen_hypercall(xc_handle, &hypercall);
    3.25 @@ -237,6 +245,7 @@ int xc_memory_op(int xc_handle,
    3.26      {
    3.27      case XENMEM_increase_reservation:
    3.28      case XENMEM_decrease_reservation:
    3.29 +    case XENMEM_populate_physmap:
    3.30          safe_munlock(reservation, sizeof(*reservation));
    3.31          if ( reservation->extent_start != NULL )
    3.32              safe_munlock(reservation->extent_start,
    3.33 @@ -247,6 +256,9 @@ int xc_memory_op(int xc_handle,
    3.34          safe_munlock(xmml->extent_start,
    3.35                       xmml->max_extents * sizeof(unsigned long));
    3.36          break;
    3.37 +    case XENMEM_reserved_phys_area:
    3.38 +        safe_munlock(arg, sizeof(struct xen_reserved_phys_area));
    3.39 +        break;
    3.40      }
    3.41  
    3.42   out1:
     4.1 --- a/tools/libxc/xenctrl.h	Sat Jan 28 13:01:19 2006 +0100
     4.2 +++ b/tools/libxc/xenctrl.h	Sat Jan 28 15:31:43 2006 +0100
     4.3 @@ -528,6 +528,4 @@ int xc_add_mmu_update(int xc_handle, xc_
     4.4                     unsigned long long ptr, unsigned long long val);
     4.5  int xc_finish_mmu_updates(int xc_handle, xc_mmu_t *mmu);
     4.6  
     4.7 -int xc_get_pfn_hole_start(int xc_handle, domid_t dom);
     4.8 -
     4.9  #endif
     5.1 --- a/xen/arch/x86/mm.c	Sat Jan 28 13:01:19 2006 +0100
     5.2 +++ b/xen/arch/x86/mm.c	Sat Jan 28 15:31:43 2006 +0100
     5.3 @@ -104,6 +104,7 @@
     5.4  #include <asm/uaccess.h>
     5.5  #include <asm/ldt.h>
     5.6  #include <asm/x86_emulate.h>
     5.7 +#include <public/memory.h>
     5.8  
     5.9  #ifdef VERBOSE
    5.10  #define MEM_LOG(_f, _a...)                           \
    5.11 @@ -1930,56 +1931,6 @@ int do_mmuext_op(
    5.12              break;
    5.13          }
    5.14  
    5.15 -        case MMUEXT_PFN_HOLE_BASE:
    5.16 -        {
    5.17 -            if (FOREIGNDOM->start_pfn_hole) {
    5.18 -                rc = FOREIGNDOM->start_pfn_hole;
    5.19 -                okay = 1;
    5.20 -            } else {
    5.21 -                rc = FOREIGNDOM->start_pfn_hole =
    5.22 -                    FOREIGNDOM->max_pages;
    5.23 -                okay = 1;
    5.24 -                if (shadow_mode_translate(FOREIGNDOM)) {
    5.25 -                    /* Fill in a few entries in the hole.  At the
    5.26 -                       moment, this means the shared info page and the
    5.27 -                       grant table pages. */
    5.28 -                    struct domain_mmap_cache c1, c2;
    5.29 -                    unsigned long pfn, mfn, x;
    5.30 -                    domain_mmap_cache_init(&c1);
    5.31 -                    domain_mmap_cache_init(&c2);
    5.32 -                    shadow_lock(FOREIGNDOM);
    5.33 -                    pfn = FOREIGNDOM->start_pfn_hole;
    5.34 -                    mfn = virt_to_phys(FOREIGNDOM->shared_info) >> PAGE_SHIFT;
    5.35 -                    set_p2m_entry(FOREIGNDOM, pfn, mfn, &c1, &c2);
    5.36 -                    set_pfn_from_mfn(mfn, pfn);
    5.37 -                    pfn++;
    5.38 -                    for (x = 0; x < NR_GRANT_FRAMES; x++) {
    5.39 -                        mfn = gnttab_shared_mfn(FOREIGNDOM,
    5.40 -                                                FOREIGNDOM->grant_table,
    5.41 -                                                x);
    5.42 -                        set_p2m_entry(FOREIGNDOM, pfn, mfn, &c1, &c2);
    5.43 -                        set_pfn_from_mfn(mfn, pfn);
    5.44 -                        pfn++;
    5.45 -                    }
    5.46 -                    shadow_unlock(FOREIGNDOM);
    5.47 -                    domain_mmap_cache_destroy(&c1);
    5.48 -                    domain_mmap_cache_destroy(&c2);
    5.49 -                }
    5.50 -            }
    5.51 -            break;
    5.52 -        }
    5.53 -
    5.54 -        case MMUEXT_PFN_HOLE_SIZE:
    5.55 -        {
    5.56 -            if (shadow_mode_translate(FOREIGNDOM)) {
    5.57 -                rc = PFN_HOLE_SIZE;
    5.58 -            } else {
    5.59 -                rc = 0;
    5.60 -            }
    5.61 -            okay = 1;
    5.62 -            break;
    5.63 -        }
    5.64 -
    5.65          default:
    5.66              MEM_LOG("Invalid extended pt command 0x%x", op.cmd);
    5.67              okay = 0;
    5.68 @@ -2815,6 +2766,62 @@ long do_update_descriptor(u64 pa, u64 de
    5.69  }
    5.70  
    5.71  
    5.72 +long arch_memory_op(int op, void *arg)
    5.73 +{
    5.74 +    struct xen_reserved_phys_area xrpa;
    5.75 +    unsigned long pfn;
    5.76 +    struct domain *d;
    5.77 +    unsigned int i;
    5.78 +
    5.79 +    switch ( op )
    5.80 +    {
    5.81 +    case XENMEM_reserved_phys_area:
    5.82 +        if ( copy_from_user(&xrpa, arg, sizeof(xrpa)) )
    5.83 +            return -EFAULT;
    5.84 +
    5.85 +        /* No guest has more than one reserved area. */
    5.86 +        if ( xrpa.idx != 0 )
    5.87 +            return -ESRCH;
    5.88 +
    5.89 +        if ( (d = find_domain_by_id(xrpa.domid)) == NULL )
    5.90 +            return -ESRCH;
    5.91 +
    5.92 +        /* Only initialised translated guests have a reserved area. */
    5.93 +        if ( !shadow_mode_translate(d) || (d->max_pages == 0) )
    5.94 +        {
    5.95 +            put_domain(d);
    5.96 +            return -ESRCH;
    5.97 +        }
    5.98 +
    5.99 +        LOCK_BIGLOCK(d);
   5.100 +        if ( d->arch.first_reserved_pfn == 0 )
   5.101 +        {
   5.102 +            d->arch.first_reserved_pfn = pfn = d->max_pages;
   5.103 +            guest_physmap_add_page(
   5.104 +                d, pfn + 0, virt_to_phys(d->shared_info) >> PAGE_SHIFT);
   5.105 +            for ( i = 0; i < NR_GRANT_FRAMES; i++ )
   5.106 +                guest_physmap_add_page(
   5.107 +                    d, pfn + 1 + i, gnttab_shared_mfn(d, d->grant_table, i));
   5.108 +        }
   5.109 +        UNLOCK_BIGLOCK(d);
   5.110 +
   5.111 +        xrpa.first_pfn = d->arch.first_reserved_pfn;
   5.112 +        xrpa.nr_pfns   = 32;
   5.113 +
   5.114 +        put_domain(d);
   5.115 +
   5.116 +        if ( copy_to_user(arg, &xrpa, sizeof(xrpa)) )
   5.117 +            return -EFAULT;
   5.118 +
   5.119 +        break;
   5.120 +
   5.121 +    default:
   5.122 +        return subarch_memory_op(op, arg);
   5.123 +    }
   5.124 +
   5.125 +    return 0;
   5.126 +}
   5.127 +
   5.128  
   5.129  /*************************
   5.130   * Writable Pagetables
     6.1 --- a/xen/arch/x86/x86_32/mm.c	Sat Jan 28 13:01:19 2006 +0100
     6.2 +++ b/xen/arch/x86/x86_32/mm.c	Sat Jan 28 15:31:43 2006 +0100
     6.3 @@ -182,7 +182,7 @@ void subarch_init_memory(struct domain *
     6.4      }
     6.5  }
     6.6  
     6.7 -long arch_memory_op(int op, void *arg)
     6.8 +long subarch_memory_op(int op, void *arg)
     6.9  {
    6.10      struct xen_machphys_mfn_list xmml;
    6.11      unsigned long mfn;
     7.1 --- a/xen/arch/x86/x86_64/mm.c	Sat Jan 28 13:01:19 2006 +0100
     7.2 +++ b/xen/arch/x86/x86_64/mm.c	Sat Jan 28 15:31:43 2006 +0100
     7.3 @@ -182,7 +182,7 @@ void subarch_init_memory(struct domain *
     7.4      }
     7.5  }
     7.6  
     7.7 -long arch_memory_op(int op, void *arg)
     7.8 +long subarch_memory_op(int op, void *arg)
     7.9  {
    7.10      struct xen_machphys_mfn_list xmml;
    7.11      l3_pgentry_t l3e;
     8.1 --- a/xen/include/asm-x86/config.h	Sat Jan 28 13:01:19 2006 +0100
     8.2 +++ b/xen/include/asm-x86/config.h	Sat Jan 28 15:31:43 2006 +0100
     8.3 @@ -60,9 +60,6 @@
     8.4  #endif
     8.5  #endif
     8.6  
     8.7 -/* How large is the PFN reserved area, when we have one? */
     8.8 -#define PFN_HOLE_SIZE 32
     8.9 -
    8.10  #ifndef STACK_ORDER
    8.11  #define STACK_ORDER 1
    8.12  #endif
     9.1 --- a/xen/include/asm-x86/domain.h	Sat Jan 28 13:01:19 2006 +0100
     9.2 +++ b/xen/include/asm-x86/domain.h	Sat Jan 28 15:31:43 2006 +0100
     9.3 @@ -109,6 +109,9 @@ struct arch_domain
     9.4  
     9.5      pagetable_t         phys_table;         /* guest 1:1 pagetable */
     9.6      struct vmx_platform vmx_platform;
     9.7 +
     9.8 +    /* Shadow-translated guest: Pseudophys base address of reserved area. */
     9.9 +    unsigned long first_reserved_pfn;
    9.10  } __cacheline_aligned;
    9.11  
    9.12  struct arch_vcpu
    10.1 --- a/xen/include/asm-x86/mm.h	Sat Jan 28 13:01:19 2006 +0100
    10.2 +++ b/xen/include/asm-x86/mm.h	Sat Jan 28 15:31:43 2006 +0100
    10.3 @@ -382,5 +382,6 @@ int __sync_lazy_execstate(void);
    10.4  
    10.5  /* Arch-specific portion of memory_op hypercall. */
    10.6  long arch_memory_op(int op, void *arg);
    10.7 +long subarch_memory_op(int op, void *arg);
    10.8  
    10.9  #endif /* __ASM_X86_MM_H__ */
    11.1 --- a/xen/include/public/memory.h	Sat Jan 28 13:01:19 2006 +0100
    11.2 +++ b/xen/include/public/memory.h	Sat Jan 28 15:31:43 2006 +0100
    11.3 @@ -94,6 +94,26 @@ typedef struct xen_machphys_mfn_list {
    11.4      unsigned int nr_extents;
    11.5  } xen_machphys_mfn_list_t;
    11.6  
    11.7 +/*
    11.8 + * Returns the base and size of the specified reserved 'RAM hole' in the
    11.9 + * specified guest's pseudophysical address space.
   11.10 + * arg == addr of xen_reserved_phys_area_t.
   11.11 + */
   11.12 +#define XENMEM_reserved_phys_area   7
   11.13 +typedef struct xen_reserved_phys_area {
   11.14 +    /* Which request to report about? */
   11.15 +    domid_t domid;
   11.16 +
   11.17 +    /*
   11.18 +     * Which reserved area to report? Out-of-range request reports
   11.19 +     * -ESRCH. Currently no architecture will have more than one reserved area.
   11.20 +     */
   11.21 +    unsigned int idx;
   11.22 +
   11.23 +    /* Base and size of the specified reserved area. */
   11.24 +    unsigned long first_pfn, nr_pfns;
   11.25 +} xen_reserved_phys_area_t;
   11.26 +
   11.27  #endif /* __XEN_PUBLIC_MEMORY_H__ */
   11.28  
   11.29  /*
    12.1 --- a/xen/include/public/xen.h	Sat Jan 28 13:01:19 2006 +0100
    12.2 +++ b/xen/include/public/xen.h	Sat Jan 28 15:31:43 2006 +0100
    12.3 @@ -144,15 +144,6 @@
    12.4   * cmd: MMUEXT_SET_LDT
    12.5   * linear_addr: Linear address of LDT base (NB. must be page-aligned).
    12.6   * nr_ents: Number of entries in LDT.
    12.7 - *
    12.8 - * cmd: MMUEXT_PFN_HOLE_BASE
    12.9 - * No additional arguments.  Returns the first pfn in the Xen-reserved
   12.10 - * pfn hole.  Note that we delay allocating the hole until the first
   12.11 - * time this is called.
   12.12 - *
   12.13 - * cmd: MMUEXT_PFN_HOLE_SIZE
   12.14 - * No additional arguments.  Returns the number of pfns in the
   12.15 - * Xen-reserved pfn hole.
   12.16   */
   12.17  #define MMUEXT_PIN_L1_TABLE      0
   12.18  #define MMUEXT_PIN_L2_TABLE      1
   12.19 @@ -169,8 +160,6 @@
   12.20  #define MMUEXT_FLUSH_CACHE      12
   12.21  #define MMUEXT_SET_LDT          13
   12.22  #define MMUEXT_NEW_USER_BASEPTR 15
   12.23 -#define MMUEXT_PFN_HOLE_BASE    16
   12.24 -#define MMUEXT_PFN_HOLE_SIZE    17
   12.25  
   12.26  #ifndef __ASSEMBLY__
   12.27  struct mmuext_op {
    13.1 --- a/xen/include/xen/sched.h	Sat Jan 28 13:01:19 2006 +0100
    13.2 +++ b/xen/include/xen/sched.h	Sat Jan 28 15:31:43 2006 +0100
    13.3 @@ -153,9 +153,6 @@ struct domain
    13.4  
    13.5      /* Control-plane tools handle for this domain. */
    13.6      xen_domain_handle_t handle;
    13.7 -
    13.8 -    /* Start of the PFN hole */
    13.9 -    unsigned long start_pfn_hole;
   13.10  };
   13.11  
   13.12  struct domain_setup_info