Hello community,
here is the log from the commit of package xen
checked in at Wed Jun 7 02:25:29 CEST 2006.
--------
--- arch/i386/xen/xen.changes 2006-06-02 19:45:21.000000000 +0200
+++ xen/xen.changes 2006-06-06 23:12:54.000000000 +0200
@@ -1,0 +2,37 @@
+Tue Jun 6 10:08:19 MDT 2006 - ccoffing@novell.com
+
+- Drop xen-8-way-bios patch, because it breaks Windows HVM
+ installation. The patch was only necessary when running SMP HVM
+ with "acpi=0" on the kernel command line. (#181974)
+- Include two patches from xen-3.0-testing that change the
+ interface between Xen and guests. Including these now to help
+ forward-compatibility:
+ + 9709: Changes interface for accessing %cr3 so that extra bits
+ (>4GB) for PAE pgdirs are placed in low-order bits of %cr3.
+ Kernels without support for this will still run fine.
+ + 9721: Use explicitly-sized types in the dom0_ops and privcmd
+ structures.
+- Fix ability to change ISOs images for HVM guest. (#181895)
+- Removed pointless whitespace changes from xen-removable.diff, for
+ better maintainability. Cut the patch size in half; no code
+ changes.
+
+-------------------------------------------------------------------
+Mon Jun 5 10:19:27 MDT 2006 - ccoffing@novell.com
+
+- Include select patches from xen-3.0-testing:
+ + 9698: Official fix for bug #159001. Dropped our patch.
+ + 9702: Fix MMU_NORMAL_PT_UPDATE when passed a page that is no
+ longer of type page-table.
+ + 9703: Modification to fix for bug #159001; ignore empty PTEs.
+ + 9704: Fix for obvious typo in map_pages_to_xen: When replacing
+ a pte, free the page table pointed to by the old entry, not the
+ new entry.
+ + 9705: Jan's previous signed-ness patch (c/s 9695) was changed
+ when accepted upstream, which broke it; this changeset
+ attempts to fix the breakage.
+ + 9708: HVM: Fix a hang when doing an "xm destroy" of Windows VM.
+ + 9717: HVM: Interrupts must be kept disabled when entering Xen
+ for external interrupt processing.
+
+-------------------------------------------------------------------
Old:
----
xen-159001.diff
xen-8-way-bios.patch
New:
----
xen-9698-no-corrupt-frame-0.diff
xen-9702-MMU_NORMAL_PT_UPDATE.diff
xen-9703-ignore-empty-ptes.diff
xen-9704-dealloc-l1.diff
xen-9705-signed.diff
xen-9706-init-list-head.diff
xen-9708-shadow-l4.diff
xen-9709-extended-cr3.diff
xen-9717-disable-interrupts.diff
xen-9721-explicitly-sized-types.diff
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xen.spec ++++++
--- /var/tmp/diff_new_pack.yMShVE/_old 2006-06-07 02:24:51.000000000 +0200
+++ /var/tmp/diff_new_pack.yMShVE/_new 2006-06-07 02:24:51.000000000 +0200
@@ -1,5 +1,5 @@
#
-# spec file for package xen (Version 3.0.2_09697)
+# spec file for package xen (Version 3.0.2_09721)
#
# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@@ -14,12 +14,12 @@
BuildRequires: LibVNCServer SDL-devel autoconf automake bin86 dev86 glibc-devel-32bit latex2html libjpeg-devel libreiserfs-devel python-devel te_ams te_latex tetex transfig
%define xvers 3.0
%define xvermaj 3
-%define changeset 09697
+%define changeset 09721
%define build_xmtest 0
%define with_pygrub 1
%define xen_build_dir xen-3.0-testing
-Version: 3.0.2_09697
-Release: 3
+Version: 3.0.2_09721
+Release: 1
License: GPL
Group: System/Kernel
Autoreqprov: on
@@ -80,11 +80,9 @@
Patch42: xen-fatal-trap-halt.diff
Patch43: xen-amd-smp.diff
Patch44: xen-hvm-xchg.diff
-Patch45: xen-8-way-bios.patch
-Patch46: xen-cpuid.diff
-Patch47: xen-cpuid-amd.diff
-Patch48: xen-159001.diff
-Patch49: xen-get-page-type.diff
+Patch45: xen-cpuid.diff
+Patch46: xen-cpuid-amd.diff
+Patch47: xen-get-page-type.diff
Patch50: xen-genapic.diff
Patch100: xen-9657-get-mfn-from-gpfn.diff
Patch101: xen-9658-pirq-mask-into-bitmap.diff
@@ -106,7 +104,17 @@
Patch117: xen-9693-wait-for-large-ballooning.diff
Patch118: xen-9695-signed.diff
Patch119: xen-9696-rm-broken-string-func.diff
-Patch120: xen-unstable-9967-summa.diff
+Patch120: xen-9698-no-corrupt-frame-0.diff
+Patch121: xen-unstable-9967-summa.diff
+Patch122: xen-9702-MMU_NORMAL_PT_UPDATE.diff
+Patch123: xen-9703-ignore-empty-ptes.diff
+Patch124: xen-9704-dealloc-l1.diff
+Patch125: xen-9705-signed.diff
+Patch126: xen-9706-init-list-head.diff
+Patch127: xen-9708-shadow-l4.diff
+Patch128: xen-9709-extended-cr3.diff
+Patch129: xen-9717-disable-interrupts.diff
+Patch130: xen-9721-explicitly-sized-types.diff
Patch200: xen-enable-hvm-debug.diff
Patch201: xen-enable-debug
Patch202: xen-poweroff.diff
@@ -474,6 +482,16 @@
%patch118 -p1
%patch119 -p1
%patch120 -p1
+%patch121 -p1
+%patch122 -p1
+%patch123 -p1
+%patch124 -p1
+%patch125 -p1
+%patch126 -p1
+%patch127 -p1
+%patch128 -p1
+%patch129 -p1
+%patch130 -p1
# Now our patches...
%patch1 -p1
%patch2 -p1
@@ -522,8 +540,6 @@
%patch45 -p1
%patch46 -p1
%patch47 -p1
-%patch48 -p1
-%patch49 -p1
%patch50 -p1
#%patch200 -p1
XEN_EXTRAVERSION=%version-%release
@@ -831,6 +847,37 @@
%{insserv_cleanup}
%changelog -n xen
+* Tue Jun 06 2006 - ccoffing@novell.com
+- Drop xen-8-way-bios patch, because it breaks Windows HVM
+ installation. The patch was only necessary when running SMP HVM
+ with "acpi=0" on the kernel command line. (#181974)
+- Include two patches from xen-3.0-testing that change the
+ interface between Xen and guests. Including these now to help
+ forward-compatibility:
+ + 9709: Changes interface for accessing %%cr3 so that extra bits
+ (>4GB) for PAE pgdirs are placed in low-order bits of %%cr3.
+ Kernels without support for this will still run fine.
+ + 9721: Use explicitly-sized types in the dom0_ops and privcmd
+ structures.
+- Fix ability to change ISOs images for HVM guest. (#181895)
+- Removed pointless whitespace changes from xen-removable.diff, for
+ better maintainability. Cut the patch size in half; no code
+ changes.
+* Mon Jun 05 2006 - ccoffing@novell.com
+- Include select patches from xen-3.0-testing:
+ + 9698: Official fix for bug #159001. Dropped our patch.
+ + 9702: Fix MMU_NORMAL_PT_UPDATE when passed a page that is no
+ longer of type page-table.
+ + 9703: Modification to fix for bug #159001; ignore empty PTEs.
+ + 9704: Fix for obvious typo in map_pages_to_xen: When replacing
+ a pte, free the page table pointed to by the old entry, not the
+ new entry.
+ + 9705: Jan's previous signed-ness patch (c/s 9695) was changed
+ when accepted upstream, which broke it; this changeset
+ attempts to fix the breakage.
+ + 9708: HVM: Fix a hang when doing an "xm destroy" of Windows VM.
+ + 9717: HVM: Interrupts must be kept disabled when entering Xen
+ for external interrupt processing.
* Fri Jun 02 2006 - ccoffing@novell.com
- Include xen-3.0-testing changeset 9693. This scales the
ballooning timeout with the amount of memory being requested
++++++ xen-9698-no-corrupt-frame-0.diff ++++++
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Date Wed May 31 07:32:04 2006 +0100
# Node ID b6a04d27b6e16cf16a3bdbad61a00719df62b8d3
# parent: 18e8e613deb9050de02eb8ba9138185e33240e7f
[HVM] Fix shadow mode to not corrupt frame 0's page_info struct.
Signed-off-by: Jun Nakajima
xen-unstable changeset: 10189:ec1e371ec3208f771595da6c82baae4cd9a441f5
xen-unstable date: Wed May 31 07:25:59 2006 +0100
--- a/xen/arch/x86/shadow.c Tue May 30 18:14:05 2006 +0100
+++ b/xen/arch/x86/shadow.c Wed May 31 07:32:04 2006 +0100
@@ -1688,7 +1688,8 @@ static int resync_all(struct domain *d,
unshadow_l1 = 1;
else {
need_flush |= error;
- set_guest_back_ptr(d, *sl1e_p, smfn, i);
+ if ( l1e_get_flags(*sl1e_p) & _PAGE_PRESENT )
+ set_guest_back_ptr(d, *sl1e_p, smfn, i);
}
// can't update snapshots of linear page tables -- they
// are used multiple times...
--- a/xen/arch/x86/shadow32.c Tue May 30 18:14:05 2006 +0100
+++ b/xen/arch/x86/shadow32.c Wed May 31 07:32:04 2006 +0100
@@ -2678,7 +2678,8 @@ static int resync_all(struct domain *d,
unshadow_l1 = 1;
else {
need_flush |= error;
- set_guest_back_ptr(d, shadow1[i], smfn, i);
+ if ( l1e_get_flags(shadow1[i]) & _PAGE_PRESENT )
+ set_guest_back_ptr(d, shadow1[i], smfn, i);
}
// can't update snapshots of linear page tables -- they
--- a/xen/include/asm-x86/shadow.h Tue May 30 18:14:05 2006 +0100
+++ b/xen/include/asm-x86/shadow.h Wed May 31 07:32:04 2006 +0100
@@ -762,10 +762,16 @@ static inline void set_guest_back_ptr(
unsigned long gmfn;
ASSERT(shadow_lock_is_acquired(d));
+ ASSERT( smfn );
gmfn = l1e_get_pfn(spte);
- mfn_to_page(gmfn)->tlbflush_timestamp = smfn;
- mfn_to_page(gmfn)->u.inuse.type_info &= ~PGT_va_mask;
- mfn_to_page(gmfn)->u.inuse.type_info |= (unsigned long) index << PGT_va_shift;
+ ASSERT( gmfn );
+ if ( l1e_get_flags(spte) & _PAGE_RW )
+ {
+ mfn_to_page(gmfn)->tlbflush_timestamp = smfn;
+ mfn_to_page(gmfn)->u.inuse.type_info &= ~PGT_va_mask;
+ mfn_to_page(gmfn)->u.inuse.type_info |=
+ (unsigned long) index << PGT_va_shift;
+ }
}
}
++++++ xen-9702-MMU_NORMAL_PT_UPDATE.diff ++++++
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Date Thu Jun 01 10:59:50 2006 +0100
# Node ID 648bb8901eda44dc04b744c0eca72685cac73065
# parent: f379f9dc1ecf79e80c4b6e71370705b3e9b91940
Fix MMU_NORMAL_PT_UPDATE when passed a page that is no longer of type page-table.
Signed-off-by: Keir Fraser
xen-unstable changeset: 10236:09d9d6e7b9851cfb2206395ced55b4769e164b4a
xen-unstable date: Thu Jun 01 10:34:21 2006 +0100
--- a/xen/arch/x86/mm.c Wed May 31 07:34:05 2006 +0100
+++ b/xen/arch/x86/mm.c Thu Jun 01 10:59:50 2006 +0100
@@ -2105,99 +2105,88 @@ int do_mmu_update(
switch ( (type_info = page->u.inuse.type_info) & PGT_type_mask )
{
- case PGT_l1_page_table:
- ASSERT( !shadow_mode_refcounts(d) );
- if ( likely(get_page_type(
+ case PGT_l1_page_table:
+ case PGT_l2_page_table:
+ case PGT_l3_page_table:
+ case PGT_l4_page_table:
+ {
+ ASSERT(!shadow_mode_refcounts(d));
+ if ( unlikely(!get_page_type(
page, type_info & (PGT_type_mask|PGT_va_mask))) )
+ goto not_a_pt;
+
+ switch ( type_info & PGT_type_mask )
{
- l1_pgentry_t l1e;
-
- /* FIXME: doesn't work with PAE */
- l1e = l1e_from_intpte(req.val);
+ case PGT_l1_page_table:
+ {
+ l1_pgentry_t l1e = l1e_from_intpte(req.val);
okay = mod_l1_entry(va, l1e);
if ( okay && unlikely(shadow_mode_enabled(d)) )
shadow_l1_normal_pt_update(
d, req.ptr, l1e, &sh_mapcache);
- put_page_type(page);
}
break;
- case PGT_l2_page_table:
- ASSERT( !shadow_mode_refcounts(d) );
- if ( likely(get_page_type(
- page, type_info & (PGT_type_mask|PGT_va_mask))) )
+ case PGT_l2_page_table:
{
- l2_pgentry_t l2e;
-
- /* FIXME: doesn't work with PAE */
- l2e = l2e_from_intpte(req.val);
+ l2_pgentry_t l2e = l2e_from_intpte(req.val);
okay = mod_l2_entry(
(l2_pgentry_t *)va, l2e, mfn, type_info);
if ( okay && unlikely(shadow_mode_enabled(d)) )
shadow_l2_normal_pt_update(
d, req.ptr, l2e, &sh_mapcache);
- put_page_type(page);
}
break;
#if CONFIG_PAGING_LEVELS >= 3
- case PGT_l3_page_table:
- ASSERT( !shadow_mode_refcounts(d) );
- if ( likely(get_page_type(
- page, type_info & (PGT_type_mask|PGT_va_mask))) )
+ case PGT_l3_page_table:
{
- l3_pgentry_t l3e;
-
- /* FIXME: doesn't work with PAE */
- l3e = l3e_from_intpte(req.val);
+ l3_pgentry_t l3e = l3e_from_intpte(req.val);
okay = mod_l3_entry(va, l3e, mfn, type_info);
if ( okay && unlikely(shadow_mode_enabled(d)) )
shadow_l3_normal_pt_update(
d, req.ptr, l3e, &sh_mapcache);
- put_page_type(page);
}
break;
#endif
#if CONFIG_PAGING_LEVELS >= 4
- case PGT_l4_page_table:
- ASSERT( !shadow_mode_refcounts(d) );
- if ( likely(get_page_type(
- page, type_info & (PGT_type_mask|PGT_va_mask))) )
+ case PGT_l4_page_table:
{
- l4_pgentry_t l4e;
-
- l4e = l4e_from_intpte(req.val);
+ l4_pgentry_t l4e = l4e_from_intpte(req.val);
okay = mod_l4_entry(va, l4e, mfn, type_info);
if ( okay && unlikely(shadow_mode_enabled(d)) )
shadow_l4_normal_pt_update(
d, req.ptr, l4e, &sh_mapcache);
- put_page_type(page);
}
break;
#endif
+ }
+
+ put_page_type(page);
+ }
+ break;
+
default:
- if ( likely(get_page_type(page, PGT_writable_page)) )
+ not_a_pt:
+ {
+ if ( unlikely(!get_page_type(page, PGT_writable_page)) )
+ break;
+
+ if ( shadow_mode_enabled(d) )
{
- if ( shadow_mode_enabled(d) )
- {
- shadow_lock(d);
-
- __mark_dirty(d, mfn);
-
- if ( page_is_page_table(page) &&
- !page_out_of_sync(page) )
- {
- shadow_mark_mfn_out_of_sync(v, gmfn, mfn);
- }
- }
-
- *(intpte_t *)va = req.val;
- okay = 1;
-
- if ( shadow_mode_enabled(d) )
- shadow_unlock(d);
-
- put_page_type(page);
+ shadow_lock(d);
+ __mark_dirty(d, mfn);
+ if ( page_is_page_table(page) && !page_out_of_sync(page) )
+ shadow_mark_mfn_out_of_sync(v, gmfn, mfn);
}
- break;
+
+ *(intpte_t *)va = req.val;
+ okay = 1;
+
+ if ( shadow_mode_enabled(d) )
+ shadow_unlock(d);
+
+ put_page_type(page);
+ }
+ break;
}
unmap_domain_page_with_cache(va, &mapcache);
++++++ xen-9703-ignore-empty-ptes.diff ++++++
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Date Thu Jun 01 11:00:13 2006 +0100
# Node ID 29ed4e0fdeae52cb19c4425cff182046a050249e
# parent: 648bb8901eda44dc04b744c0eca72685cac73065
[HVM] Fix set_guest_back_ptr to ignore empty PTEs.
Signed-off-by: Keir Fraser
xen-unstable changeset: 10237:121ec8b952d33a358e6c6ab65493e0b47e56781d
xen-unstable date: Thu Jun 01 10:50:33 2006 +0100
--- a/xen/include/asm-x86/shadow.h Thu Jun 01 10:59:50 2006 +0100
+++ b/xen/include/asm-x86/shadow.h Thu Jun 01 11:00:13 2006 +0100
@@ -756,23 +756,26 @@ shadow_unpin(unsigned long smfn)
* when working on finer-gained locks for shadow.
*/
static inline void set_guest_back_ptr(
- struct domain *d, l1_pgentry_t spte, unsigned long smfn, unsigned int index)
-{
- if ( shadow_mode_external(d) ) {
- unsigned long gmfn;
-
- ASSERT(shadow_lock_is_acquired(d));
- ASSERT( smfn );
- gmfn = l1e_get_pfn(spte);
- ASSERT( gmfn );
- if ( l1e_get_flags(spte) & _PAGE_RW )
- {
- mfn_to_page(gmfn)->tlbflush_timestamp = smfn;
- mfn_to_page(gmfn)->u.inuse.type_info &= ~PGT_va_mask;
- mfn_to_page(gmfn)->u.inuse.type_info |=
- (unsigned long) index << PGT_va_shift;
- }
- }
+ struct domain *d, l1_pgentry_t spte,
+ unsigned long smfn, unsigned int index)
+{
+ struct page_info *gpage;
+
+ ASSERT(shadow_lock_is_acquired(d));
+
+ if ( !shadow_mode_external(d) ||
+ ((l1e_get_flags(spte) & (_PAGE_PRESENT|_PAGE_RW)) !=
+ (_PAGE_PRESENT|_PAGE_RW)) )
+ return;
+
+ gpage = l1e_get_page(spte);
+
+ ASSERT(smfn != 0);
+ ASSERT(page_to_mfn(gpage) != 0);
+
+ gpage->tlbflush_timestamp = smfn;
+ gpage->u.inuse.type_info &= ~PGT_va_mask;
+ gpage->u.inuse.type_info |= (unsigned long)index << PGT_va_shift;
}
/************************************************************************/
++++++ xen-9704-dealloc-l1.diff ++++++
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Date Thu Jun 01 11:05:13 2006 +0100
# Node ID 78a72d42cfc19c06097a92b8d0f824d823813c79
# parent: 29ed4e0fdeae52cb19c4425cff182046a050249e
Fix map_pages_to_xen() when deallocating l1 page tables.
Signed-off-by: Muli Ben-Yehuda
xen-unstable changeset: 10238:2a0208b33c3075d770ffaa647137432efd3b8eb9
xen-unstable date: Thu Jun 01 11:04:06 2006 +0100
--- a/xen/arch/x86/mm.c Thu Jun 01 11:00:13 2006 +0100
+++ b/xen/arch/x86/mm.c Thu Jun 01 11:05:13 2006 +0100
@@ -3548,7 +3548,7 @@ int map_pages_to_xen(
{
local_flush_tlb_pge();
if ( !(l2e_get_flags(ol2e) & _PAGE_PSE) )
- free_xen_pagetable(l2e_get_page(*pl2e));
+ free_xen_pagetable(l2e_get_page(ol2e));
}
virt += 1UL << L2_PAGETABLE_SHIFT;
++++++ xen-9705-signed.diff ++++++
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Date Thu Jun 01 16:33:38 2006 +0100
# Node ID 53bb8c0d9639251b61b203b55f9e6b046f8d99d6
# parent: 78a72d42cfc19c06097a92b8d0f824d823813c79
Fix negation of unsigned quantities in the Xen x86 emulator.
This fixes the problems left behind by c/s 10171. Again pointed
out by Jan Beulich; and again different from his suggested patch.
Hopefully this one will be less embarrassing.
Signed-off-by: Keir Fraser
xen-unstable changeset: 10241:2dd8e7c4472897a86cac635b6982fa55f1ab6e07
xen-unstable date: Thu Jun 01 16:31:37 2006 +0100
--- a/xen/arch/x86/traps.c Thu Jun 01 11:05:13 2006 +0100
+++ b/xen/arch/x86/traps.c Thu Jun 01 16:33:38 2006 +0100
@@ -873,7 +873,7 @@ static int emulate_privileged_op(struct
PAGE_FAULT(regs->edi, USER_WRITE_FAULT);
break;
}
- regs->edi += (regs->eflags & EF_DF) ? -(int)op_bytes : op_bytes;
+ regs->edi += (int)((regs->eflags & EF_DF) ? -op_bytes : op_bytes);
break;
case 0x6e: /* OUTSB */
@@ -899,7 +899,7 @@ static int emulate_privileged_op(struct
outl_user((u32)data, (u16)regs->edx, v, regs);
break;
}
- regs->esi += (regs->eflags & EF_DF) ? -(int)op_bytes : op_bytes;
+ regs->esi += (int)((regs->eflags & EF_DF) ? -op_bytes : op_bytes);
break;
}
--- a/xen/arch/x86/x86_emulate.c Thu Jun 01 11:05:13 2006 +0100
+++ b/xen/arch/x86/x86_emulate.c Thu Jun 01 16:33:38 2006 +0100
@@ -379,11 +379,12 @@ do{ __asm__ __volatile__ (
((reg) & ((1UL << (ad_bytes << 3)) - 1))))
#define register_address_increment(reg, inc) \
do { \
+ int _inc = (inc); /* signed type ensures sign extension to long */ \
if ( ad_bytes == sizeof(unsigned long) ) \
- (reg) += (inc); \
+ (reg) += _inc; \
else \
(reg) = ((reg) & ~((1UL << (ad_bytes << 3)) - 1)) | \
- (((reg) + (inc)) & ((1UL << (ad_bytes << 3)) - 1)); \
+ (((reg) + _inc) & ((1UL << (ad_bytes << 3)) - 1)); \
} while (0)
void *
@@ -857,7 +858,7 @@ x86_emulate_memop(
&dst.val, 8)) != 0 )
goto done;
}
- register_address_increment(_regs.esp, -(int)dst.bytes);
+ register_address_increment(_regs.esp, -dst.bytes);
if ( (rc = ops->write_std(register_address(_regs.ss, _regs.esp),
dst.val, dst.bytes)) != 0 )
goto done;
@@ -939,9 +940,9 @@ x86_emulate_memop(
goto done;
}
register_address_increment(
- _regs.esi, (_regs.eflags & EFLG_DF) ? -(int)dst.bytes : dst.bytes);
+ _regs.esi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
register_address_increment(
- _regs.edi, (_regs.eflags & EFLG_DF) ? -(int)dst.bytes : dst.bytes);
+ _regs.edi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
break;
case 0xa6 ... 0xa7: /* cmps */
DPRINTF("Urk! I don't handle CMPS.\n");
@@ -952,7 +953,7 @@ x86_emulate_memop(
dst.ptr = (unsigned long *)cr2;
dst.val = _regs.eax;
register_address_increment(
- _regs.edi, (_regs.eflags & EFLG_DF) ? -(int)dst.bytes : dst.bytes);
+ _regs.edi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
break;
case 0xac ... 0xad: /* lods */
dst.type = OP_REG;
@@ -961,7 +962,7 @@ x86_emulate_memop(
if ( (rc = ops->read_emulated(cr2, &dst.val, dst.bytes)) != 0 )
goto done;
register_address_increment(
- _regs.esi, (_regs.eflags & EFLG_DF) ? -(int)dst.bytes : dst.bytes);
+ _regs.esi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
break;
case 0xae ... 0xaf: /* scas */
DPRINTF("Urk! I don't handle SCAS.\n");
++++++ xen-9706-init-list-head.diff ++++++
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Date Thu Jun 01 16:42:40 2006 +0100
# Node ID 9dda8050d46df88d86f09772b9abf619a6adb475
# parent: 53bb8c0d9639251b61b203b55f9e6b046f8d99d6
Fix dummy domains (DOM_IO and DOM_XEN) creation so that
list heads are initialised.
Signed-off-by: Keir Fraser
xen-unstable changeset: 10242:ab627e9da8fb7be385f4e713ac184c275aba7c7c
xen-unstable date: Thu Jun 01 16:39:42 2006 +0100
--- a/xen/arch/x86/mm.c Thu Jun 01 16:33:38 2006 +0100
+++ b/xen/arch/x86/mm.c Thu Jun 01 16:42:40 2006 +0100
@@ -187,20 +187,16 @@ void arch_init_memory(void)
* Any Xen-heap pages that we will allow to be mapped will have
* their domain field set to dom_xen.
*/
- dom_xen = alloc_domain();
- spin_lock_init(&dom_xen->page_alloc_lock);
- atomic_set(&dom_xen->refcnt, 1);
- dom_xen->domain_id = DOMID_XEN;
+ dom_xen = alloc_domain(DOMID_XEN);
+ BUG_ON(dom_xen == NULL);
/*
* Initialise our DOMID_IO domain.
* This domain owns I/O pages that are within the range of the page_info
* array. Mappings occur at the priv of the caller.
*/
- dom_io = alloc_domain();
- spin_lock_init(&dom_io->page_alloc_lock);
- atomic_set(&dom_io->refcnt, 1);
- dom_io->domain_id = DOMID_IO;
+ dom_io = alloc_domain(DOMID_IO);
+ BUG_ON(dom_io == NULL);
/* First 1MB of RAM is historically marked as I/O. */
for ( i = 0; i < 0x100; i++ )
--- a/xen/common/domain.c Thu Jun 01 16:33:38 2006 +0100
+++ b/xen/common/domain.c Thu Jun 01 16:42:40 2006 +0100
@@ -32,22 +32,13 @@ struct domain *domain_list;
struct domain *dom0;
-struct domain *domain_create(domid_t dom_id, unsigned int cpu)
+struct domain *domain_create(domid_t domid, unsigned int cpu)
{
struct domain *d, **pd;
struct vcpu *v;
- if ( (d = alloc_domain()) == NULL )
+ if ( (d = alloc_domain(domid)) == NULL )
return NULL;
-
- d->domain_id = dom_id;
-
- atomic_set(&d->refcnt, 1);
-
- spin_lock_init(&d->big_lock);
- spin_lock_init(&d->page_alloc_lock);
- INIT_LIST_HEAD(&d->page_list);
- INIT_LIST_HEAD(&d->xenpage_list);
rangeset_domain_initialise(d);
@@ -74,14 +65,14 @@ struct domain *domain_create(domid_t dom
if ( !is_idle_domain(d) )
{
write_lock(&domlist_lock);
- pd = &domain_list; /* NB. domain_list maintained in order of dom_id. */
+ pd = &domain_list; /* NB. domain_list maintained in order of domid. */
for ( pd = &domain_list; *pd != NULL; pd = &(*pd)->next_in_list )
if ( (*pd)->domain_id > d->domain_id )
break;
d->next_in_list = *pd;
*pd = d;
- d->next_in_hashbucket = domain_hash[DOMAIN_HASH(dom_id)];
- domain_hash[DOMAIN_HASH(dom_id)] = d;
+ d->next_in_hashbucket = domain_hash[DOMAIN_HASH(domid)];
+ domain_hash[DOMAIN_HASH(domid)] = d;
write_unlock(&domlist_lock);
}
--- a/xen/common/schedule.c Thu Jun 01 16:33:38 2006 +0100
+++ b/xen/common/schedule.c Thu Jun 01 16:42:40 2006 +0100
@@ -97,12 +97,20 @@ void vcpu_runstate_get(struct vcpu *v, s
}
}
-struct domain *alloc_domain(void)
+struct domain *alloc_domain(domid_t domid)
{
struct domain *d;
- if ( (d = xmalloc(struct domain)) != NULL )
- memset(d, 0, sizeof(*d));
+ if ( (d = xmalloc(struct domain)) == NULL )
+ return NULL;
+
+ memset(d, 0, sizeof(*d));
+ d->domain_id = domid;
+ atomic_set(&d->refcnt, 1);
+ spin_lock_init(&d->big_lock);
+ spin_lock_init(&d->page_alloc_lock);
+ INIT_LIST_HEAD(&d->page_list);
+ INIT_LIST_HEAD(&d->xenpage_list);
return d;
}
--- a/xen/include/xen/sched.h Thu Jun 01 16:33:38 2006 +0100
+++ b/xen/include/xen/sched.h Thu Jun 01 16:42:40 2006 +0100
@@ -184,7 +184,7 @@ struct vcpu *alloc_vcpu(
struct vcpu *alloc_vcpu(
struct domain *d, unsigned int vcpu_id, unsigned int cpu_id);
-struct domain *alloc_domain(void);
+struct domain *alloc_domain(domid_t domid);
void free_domain(struct domain *d);
#define DOMAIN_DESTROYED (1<<31) /* assumes atomic_t is >= 32 bits */
@@ -221,7 +221,7 @@ static inline void get_knownalive_domain
}
extern struct domain *domain_create(
- domid_t dom_id, unsigned int cpu);
+ domid_t domid, unsigned int cpu);
extern int construct_dom0(
struct domain *d,
unsigned long image_start, unsigned long image_len,
++++++ xen-9708-shadow-l4.diff ++++++
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Date Fri Jun 02 09:38:34 2006 +0100
# Node ID 6255f38623b3270ab5a8e57003e485737328e1a4
# parent: c5fe7d5c4c818ae065d5804c6aa347aa4ec6816f
[HVM] Fix a problem when destroying a Windows guest.
From: Jun Nakajima
Signed-off-by: Tom Woller
xen-unstable changeset: 10256:1f619b6adbc6ab6ce566b8661b6c2bbf355f502a
xen-unstable date: Fri Jun 2 09:36:28 2006 +0100
--- a/xen/arch/x86/shadow.c Thu Jun 01 19:17:22 2006 +0100
+++ b/xen/arch/x86/shadow.c Fri Jun 02 09:38:34 2006 +0100
@@ -3406,15 +3406,16 @@ static void shadow_set_l2e_64(unsigned l
__shadow_get_l3e(v, va, &sl3e);
if (!(l3e_get_flags(sl3e) & _PAGE_PRESENT)) {
- if (create_l2_shadow) {
+ if (create_l2_shadow) {
perfc_incrc(shadow_set_l2e_force_map);
shadow_map_into_current(v, va, PAGING_L2, PAGING_L3);
__shadow_get_l3e(v, va, &sl3e);
} else {
printk("For non HVM shadow, create_l1_shadow:%d\n", create_l2_shadow);
}
- shadow_update_min_max(l4e_get_pfn(sl4e), l3_table_offset(va));
-
+
+ if ( v->domain->arch.ops->guest_paging_levels == PAGING_L4 )
+ shadow_update_min_max(l4e_get_pfn(sl4e), l3_table_offset(va));
}
if ( put_ref_check ) {
++++++ xen-9709-extended-cr3.diff ++++++
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Date Fri Jun 02 12:00:25 2006 +0100
# Node ID 33263455b079d7a1a5c68a9b519029925d427c2a
# parent: 6255f38623b3270ab5a8e57003e485737328e1a4
[PAE] Chaneg interface for accessing %cr3 so that extra bits (>4GB) for PAE pgdirs
are placed in low-order bits of %cr3. Guests who understand this interface change
publish the fact by setting the option 'PAE=yes[extended-cr3]' in their __xen_guest
section.
Signed-off-by: Keir Fraser
xen-unstable changeset: 10257:b198bbfeec10579b539455eeb41b4daaed53c546
xen-unstable date: Fri Jun 2 11:46:24 2006 +0100
--- a/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S Fri Jun 02 09:38:34 2006 +0100
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S Fri Jun 02 12:00:25 2006 +0100
@@ -163,7 +163,7 @@ ENTRY(cpu_gdt_table)
.ascii "|pae_pgdir_above_4gb"
.ascii "|supervisor_mode_kernel"
#ifdef CONFIG_X86_PAE
- .ascii ",PAE=yes"
+ .ascii ",PAE=yes[extended-cr3]"
#else
.ascii ",PAE=no"
#endif
--- a/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c Fri Jun 02 09:38:34 2006 +0100
+++ b/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c Fri Jun 02 12:00:25 2006 +0100
@@ -211,7 +211,7 @@ static void vcpu_prepare(int vcpu)
ctxt.failsafe_callback_cs = __KERNEL_CS;
ctxt.failsafe_callback_eip = (unsigned long)failsafe_callback;
- ctxt.ctrlreg[3] = virt_to_mfn(swapper_pg_dir) << PAGE_SHIFT;
+ ctxt.ctrlreg[3] = xen_pfn_to_cr3(virt_to_mfn(swapper_pg_dir));
#else /* __x86_64__ */
ctxt.user_regs.cs = __KERNEL_CS;
ctxt.user_regs.esp = idle->thread.rsp0 - sizeof(struct pt_regs);
@@ -223,7 +223,7 @@ static void vcpu_prepare(int vcpu)
ctxt.failsafe_callback_eip = (unsigned long)failsafe_callback;
ctxt.syscall_callback_eip = (unsigned long)system_call;
- ctxt.ctrlreg[3] = virt_to_mfn(init_level4_pgt) << PAGE_SHIFT;
+ ctxt.ctrlreg[3] = xen_pfn_to_cr3(virt_to_mfn(init_level4_pgt));
ctxt.gs_base_kernel = (unsigned long)(cpu_pda(vcpu));
#endif
--- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/system.h Fri Jun 02 09:38:34 2006 +0100
+++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/system.h Fri Jun 02 12:00:25 2006 +0100
@@ -116,10 +116,12 @@ __asm__ __volatile__ ("movw %%dx,%1\n\t"
__asm__ ( \
"movl %%cr3,%0\n\t" \
:"=r" (__dummy)); \
- machine_to_phys(__dummy); \
+ __dummy = xen_cr3_to_pfn(__dummy); \
+ mfn_to_pfn(__dummy) << PAGE_SHIFT; \
})
#define write_cr3(x) ({ \
- maddr_t __dummy = phys_to_machine(x); \
+ unsigned int __dummy = pfn_to_mfn((x) >> PAGE_SHIFT); \
+ __dummy = xen_pfn_to_cr3(__dummy); \
__asm__ __volatile__("movl %0,%%cr3": :"r" (__dummy)); \
})
--- a/xen/common/kernel.c Fri Jun 02 09:38:34 2006 +0100
+++ b/xen/common/kernel.c Fri Jun 02 12:00:25 2006 +0100
@@ -195,8 +195,7 @@ long do_xen_version(int cmd, GUEST_HANDL
if ( shadow_mode_translate(current->domain) )
fi.submap |=
(1U << XENFEAT_writable_page_tables) |
- (1U << XENFEAT_auto_translated_physmap) |
- (1U << XENFEAT_pae_pgdir_above_4gb);
+ (1U << XENFEAT_auto_translated_physmap);
if ( supervisor_mode_kernel )
fi.submap |= 1U << XENFEAT_supervisor_mode_kernel;
break;
--- a/xen/include/public/arch-x86_32.h Fri Jun 02 09:38:34 2006 +0100
+++ b/xen/include/public/arch-x86_32.h Fri Jun 02 12:00:25 2006 +0100
@@ -156,6 +156,14 @@ typedef struct vcpu_guest_context {
} vcpu_guest_context_t;
DEFINE_GUEST_HANDLE(vcpu_guest_context_t);
+/*
+ * Page-directory addresses above 4GB do not fit into architectural %cr3.
+ * When accessing %cr3, or equivalent field in vcpu_guest_context, guests
+ * must use the following accessor macros to pack/unpack valid MFNs.
+ */
+#define xen_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >> 20))
+#define xen_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) << 20))
+
typedef struct arch_shared_info {
unsigned long max_pfn; /* max pfn that appears in table */
/* Frame containing list of mfns containing list of mfns containing p2m. */
--- a/xen/include/public/arch-x86_64.h Fri Jun 02 09:38:34 2006 +0100
+++ b/xen/include/public/arch-x86_64.h Fri Jun 02 12:00:25 2006 +0100
@@ -232,6 +232,9 @@ typedef struct vcpu_guest_context {
} vcpu_guest_context_t;
DEFINE_GUEST_HANDLE(vcpu_guest_context_t);
+#define xen_pfn_to_cr3(pfn) ((unsigned long)(pfn) << 12)
+#define xen_cr3_to_pfn(cr3) ((unsigned long)(cr3) >> 12)
+
typedef struct arch_shared_info {
unsigned long max_pfn; /* max pfn that appears in table */
/* Frame containing list of mfns containing list of mfns containing p2m. */
++++++ xen-9717-disable-interrupts.diff ++++++
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Date Mon Jun 05 17:20:48 2006 +0100
# Node ID 24ab638506197661d47f42116280d17ca006debb
# parent: e1a85211281f7f2097a3d400b0b3db90e5da2ff6
[HVM][VMX] Interrupts must be kept disabled when entering Xen for
external interrupt processing. Remove code that immediately
reenabled interrupt delivery on VMEXIT.
Signed-off-by: Seteven Smith
Signed-off-by: Keir Fraser
xen-unstable changeset: 10273:5e3827f7a93a96a1d043cb0e523a0f821830af94
xen-unstable date: Mon Jun 5 17:17:27 2006 +0100
--- a/xen/arch/x86/hvm/vmx/vmx.c Mon Jun 05 15:15:45 2006 +0100
+++ b/xen/arch/x86/hvm/vmx/vmx.c Mon Jun 05 17:20:48 2006 +0100
@@ -1966,7 +1966,6 @@ static inline void vmx_vmexit_do_extint(
__hvm_bug(regs);
vector &= INTR_INFO_VECTOR_MASK;
- local_irq_disable();
TRACE_VMEXIT(1,vector);
switch(vector) {
@@ -2061,18 +2060,21 @@ asmlinkage void vmx_vmexit_handler(struc
struct vcpu *v = current;
int error;
- if ((error = __vmread(VM_EXIT_REASON, &exit_reason)))
- __hvm_bug(®s);
+ error = __vmread(VM_EXIT_REASON, &exit_reason);
+ BUG_ON(error);
perfc_incra(vmexits, exit_reason);
- /* don't bother H/W interrutps */
- if (exit_reason != EXIT_REASON_EXTERNAL_INTERRUPT &&
- exit_reason != EXIT_REASON_VMCALL &&
- exit_reason != EXIT_REASON_IO_INSTRUCTION)
+ if ( (exit_reason != EXIT_REASON_EXTERNAL_INTERRUPT) &&
+ (exit_reason != EXIT_REASON_VMCALL) &&
+ (exit_reason != EXIT_REASON_IO_INSTRUCTION) )
HVM_DBG_LOG(DBG_LEVEL_0, "exit reason = %x", exit_reason);
- if (exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY) {
+ if ( exit_reason != EXIT_REASON_EXTERNAL_INTERRUPT )
+ local_irq_enable();
+
+ if ( unlikely(exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY) )
+ {
printk("Failed vm entry\n");
domain_crash_synchronous();
return;
@@ -2081,7 +2083,8 @@ asmlinkage void vmx_vmexit_handler(struc
__vmread(GUEST_RIP, &eip);
TRACE_VMEXIT(0,exit_reason);
- switch (exit_reason) {
+ switch ( exit_reason )
+ {
case EXIT_REASON_EXCEPTION_NMI:
{
/*
--- a/xen/arch/x86/hvm/vmx/x86_32/exits.S Mon Jun 05 15:15:45 2006 +0100
+++ b/xen/arch/x86/hvm/vmx/x86_32/exits.S Mon Jun 05 17:20:48 2006 +0100
@@ -55,29 +55,26 @@
* domain pointer, DS, ES, FS, GS. Therefore, we effectively skip 6 registers.
*/
-#define HVM_MONITOR_EFLAGS 0x202 /* IF on */
#define NR_SKIPPED_REGS 6 /* See the above explanation */
-#define HVM_SAVE_ALL_NOSEGREGS \
- pushl $HVM_MONITOR_EFLAGS; \
- popf; \
- subl $(NR_SKIPPED_REGS*4), %esp; \
+#define HVM_SAVE_ALL_NOSEGREGS \
+ subl $(NR_SKIPPED_REGS*4), %esp; \
movl $0, 0xc(%esp); /* XXX why do we need to force eflags==0 ?? */ \
- pushl %eax; \
- pushl %ebp; \
- pushl %edi; \
- pushl %esi; \
- pushl %edx; \
- pushl %ecx; \
+ pushl %eax; \
+ pushl %ebp; \
+ pushl %edi; \
+ pushl %esi; \
+ pushl %edx; \
+ pushl %ecx; \
pushl %ebx;
-#define HVM_RESTORE_ALL_NOSEGREGS \
- popl %ebx; \
- popl %ecx; \
- popl %edx; \
- popl %esi; \
- popl %edi; \
- popl %ebp; \
- popl %eax; \
+#define HVM_RESTORE_ALL_NOSEGREGS \
+ popl %ebx; \
+ popl %ecx; \
+ popl %edx; \
+ popl %esi; \
+ popl %edi; \
+ popl %ebp; \
+ popl %eax; \
addl $(NR_SKIPPED_REGS*4), %esp
ALIGN
--- a/xen/arch/x86/hvm/vmx/x86_64/exits.S Mon Jun 05 15:15:45 2006 +0100
+++ b/xen/arch/x86/hvm/vmx/x86_64/exits.S Mon Jun 05 17:20:48 2006 +0100
@@ -51,45 +51,42 @@
* (2/1) u32 entry_vector;
* (1/1) u32 error_code;
*/
-#define HVM_MONITOR_RFLAGS 0x202 /* IF on */
#define NR_SKIPPED_REGS 6 /* See the above explanation */
-#define HVM_SAVE_ALL_NOSEGREGS \
- pushq $HVM_MONITOR_RFLAGS; \
- popfq; \
- subq $(NR_SKIPPED_REGS*8), %rsp; \
- pushq %rdi; \
- pushq %rsi; \
- pushq %rdx; \
- pushq %rcx; \
- pushq %rax; \
- pushq %r8; \
- pushq %r9; \
- pushq %r10; \
- pushq %r11; \
- pushq %rbx; \
- pushq %rbp; \
- pushq %r12; \
- pushq %r13; \
- pushq %r14; \
- pushq %r15; \
+#define HVM_SAVE_ALL_NOSEGREGS \
+ subq $(NR_SKIPPED_REGS*8), %rsp; \
+ pushq %rdi; \
+ pushq %rsi; \
+ pushq %rdx; \
+ pushq %rcx; \
+ pushq %rax; \
+ pushq %r8; \
+ pushq %r9; \
+ pushq %r10; \
+ pushq %r11; \
+ pushq %rbx; \
+ pushq %rbp; \
+ pushq %r12; \
+ pushq %r13; \
+ pushq %r14; \
+ pushq %r15;
-#define HVM_RESTORE_ALL_NOSEGREGS \
- popq %r15; \
- popq %r14; \
- popq %r13; \
- popq %r12; \
- popq %rbp; \
- popq %rbx; \
- popq %r11; \
- popq %r10; \
- popq %r9; \
- popq %r8; \
- popq %rax; \
- popq %rcx; \
- popq %rdx; \
- popq %rsi; \
- popq %rdi; \
- addq $(NR_SKIPPED_REGS*8), %rsp; \
+#define HVM_RESTORE_ALL_NOSEGREGS \
+ popq %r15; \
+ popq %r14; \
+ popq %r13; \
+ popq %r12; \
+ popq %rbp; \
+ popq %rbx; \
+ popq %r11; \
+ popq %r10; \
+ popq %r9; \
+ popq %r8; \
+ popq %rax; \
+ popq %rcx; \
+ popq %rdx; \
+ popq %rsi; \
+ popq %rdi; \
+ addq $(NR_SKIPPED_REGS*8), %rsp;
ENTRY(vmx_asm_vmexit_handler)
/* selectors are restored/saved by VMX */
++++++ xen-9721-explicitly-sized-types.diff ++++++
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Date Tue Jun 06 10:45:21 2006 +0100
# Node ID 89ba6c7b4804bb30ecd95a478a4be6e6decec2e7
# parent: ecae09fda29a9fc08059984b12259e1811a1444b
Use explicitly-sized types in the dom0_ops and privcmd structures.
As discussed previously, the these operations are not performance-sensitive, so
the additional cache footprint shouldn't be an issue.
Signed-off-by: Hollis Blanchard
Backported to 3.0-testing as this is a dom0 interface breaker (also breaks
old libxenctrl and any other app/lib that executes hypercalls -- will need
recompiling).
xen-unstable changeset: 10277:c191c649cdb387e7ec573d218c9581c639c87700
xen-unstable date: Tue Jun 6 10:25:59 2006 +0100
--- a/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c Tue Jun 06 08:23:49 2006 +0100
+++ b/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c Tue Jun 06 10:45:21 2006 +0100
@@ -61,11 +61,11 @@ static int privcmd_ioctl(struct inode *i
__asm__ __volatile__ (
"pushl %%ebx; pushl %%ecx; pushl %%edx; "
"pushl %%esi; pushl %%edi; "
- "movl 4(%%eax),%%ebx ;"
- "movl 8(%%eax),%%ecx ;"
- "movl 12(%%eax),%%edx ;"
- "movl 16(%%eax),%%esi ;"
- "movl 20(%%eax),%%edi ;"
+ "movl 8(%%eax),%%ebx ;"
+ "movl 16(%%eax),%%ecx ;"
+ "movl 24(%%eax),%%edx ;"
+ "movl 32(%%eax),%%esi ;"
+ "movl 40(%%eax),%%edi ;"
"movl (%%eax),%%eax ;"
"shll $5,%%eax ;"
"addl $hypercall_page,%%eax ;"
@@ -219,7 +219,7 @@ static int privcmd_ioctl(struct inode *i
batch_err:
printk("batch_err ret=%d vma=%p addr=%lx "
"num=%d arr=%p %lx-%lx\n",
- ret, vma, m.addr, m.num, m.arr,
+ ret, vma, (unsigned long)m.addr, m.num, m.arr,
vma ? vma->vm_start : 0, vma ? vma->vm_end : 0);
break;
}
--- a/linux-2.6-xen-sparse/include/xen/public/privcmd.h Tue Jun 06 08:23:49 2006 +0100
+++ b/linux-2.6-xen-sparse/include/xen/public/privcmd.h Tue Jun 06 10:45:21 2006 +0100
@@ -33,20 +33,22 @@
#ifndef __LINUX_PUBLIC_PRIVCMD_H__
#define __LINUX_PUBLIC_PRIVCMD_H__
+#include
+
#ifndef __user
#define __user
#endif
typedef struct privcmd_hypercall
{
- unsigned long op;
- unsigned long arg[5];
+ __u64 op;
+ __u64 arg[5];
} privcmd_hypercall_t;
typedef struct privcmd_mmap_entry {
- unsigned long va;
- unsigned long mfn;
- unsigned long npages;
+ __u64 va;
+ __u64 mfn;
+ __u64 npages;
} privcmd_mmap_entry_t;
typedef struct privcmd_mmap {
@@ -58,7 +60,7 @@ typedef struct privcmd_mmapbatch {
typedef struct privcmd_mmapbatch {
int num; /* number of pages to populate */
domid_t dom; /* target domain */
- unsigned long addr; /* virtual address */
+ __u64 addr; /* virtual address */
unsigned long __user *arr; /* array of mfns - top nibble set on err */
} privcmd_mmapbatch_t;
--- a/xen/include/public/dom0_ops.h Tue Jun 06 08:23:49 2006 +0100
+++ b/xen/include/public/dom0_ops.h Tue Jun 06 10:45:21 2006 +0100
@@ -19,7 +19,7 @@
* This makes sure that old versions of dom0 tools will stop working in a
* well-defined way (rather than crashing the machine, for instance).
*/
-#define DOM0_INTERFACE_VERSION 0x03000000
+#define DOM0_INTERFACE_VERSION 0x03000001
/************************************************************************/
@@ -27,10 +27,10 @@ typedef struct dom0_getmemlist {
typedef struct dom0_getmemlist {
/* IN variables. */
domid_t domain;
- unsigned long max_pfns;
+ uint64_t max_pfns;
GUEST_HANDLE(ulong) buffer;
/* OUT variables. */
- unsigned long num_pfns;
+ uint64_t num_pfns;
} dom0_getmemlist_t;
DEFINE_GUEST_HANDLE(dom0_getmemlist_t);
@@ -91,8 +91,8 @@ typedef struct dom0_getdomaininfo {
#define DOMFLAGS_SHUTDOWNMASK 255 /* DOMFLAGS_SHUTDOWN guest-supplied code. */
#define DOMFLAGS_SHUTDOWNSHIFT 16
uint32_t flags;
- unsigned long tot_pages;
- unsigned long max_pages;
+ uint64_t tot_pages;
+ uint64_t max_pages;
unsigned long shared_info_frame; /* MFN of shared_info struct */
uint64_t cpu_time;
uint32_t nr_online_vcpus; /* Number of VCPUs currently online. */
@@ -216,8 +216,8 @@ typedef struct dom0_physinfo {
uint32_t sockets_per_node;
uint32_t nr_nodes;
uint32_t cpu_khz;
- unsigned long total_pages;
- unsigned long free_pages;
+ uint64_t total_pages;
+ uint64_t free_pages;
uint32_t hw_cap[8];
} dom0_physinfo_t;
DEFINE_GUEST_HANDLE(dom0_physinfo_t);
@@ -260,7 +260,7 @@ typedef struct dom0_shadow_control {
uint32_t op;
GUEST_HANDLE(ulong) dirty_bitmap;
/* IN/OUT variables. */
- unsigned long pages; /* size of buffer, updated with actual size */
+ uint64_t pages; /* size of buffer, updated with actual size */
/* OUT variables. */
dom0_shadow_control_stats_t stats;
} dom0_shadow_control_t;
@@ -269,16 +269,16 @@ DEFINE_GUEST_HANDLE(dom0_shadow_control_
#define DOM0_SETDOMAINMAXMEM 28
typedef struct dom0_setdomainmaxmem {
/* IN variables. */
- domid_t domain;
- unsigned long max_memkb;
+ domid_t domain;
+ uint64_t max_memkb;
} dom0_setdomainmaxmem_t;
DEFINE_GUEST_HANDLE(dom0_setdomainmaxmem_t);
#define DOM0_GETPAGEFRAMEINFO2 29 /* batched interface */
typedef struct dom0_getpageframeinfo2 {
/* IN variables. */
- domid_t domain;
- unsigned long num;
+ domid_t domain;
+ uint64_t num;
/* IN/OUT variables. */
GUEST_HANDLE(ulong) array;
} dom0_getpageframeinfo2_t;
@@ -295,11 +295,11 @@ typedef struct dom0_add_memtype {
typedef struct dom0_add_memtype {
/* IN variables. */
unsigned long mfn;
- unsigned long nr_mfns;
- uint32_t type;
- /* OUT variables. */
- uint32_t handle;
- uint32_t reg;
+ uint64_t nr_mfns;
+ uint32_t type;
+ /* OUT variables. */
+ uint32_t handle;
+ uint32_t reg;
} dom0_add_memtype_t;
DEFINE_GUEST_HANDLE(dom0_add_memtype_t);
@@ -325,7 +325,7 @@ typedef struct dom0_read_memtype {
uint32_t reg;
/* OUT variables. */
unsigned long mfn;
- unsigned long nr_mfns;
+ uint64_t nr_mfns;
uint32_t type;
} dom0_read_memtype_t;
DEFINE_GUEST_HANDLE(dom0_read_memtype_t);
@@ -462,7 +462,7 @@ typedef struct dom0_iomem_permission {
typedef struct dom0_iomem_permission {
domid_t domain; /* domain to be affected */
unsigned long first_mfn; /* first page (physical page number) in range */
- unsigned long nr_mfns; /* number of pages in range (>0) */
+ uint64_t nr_mfns; /* number of pages in range (>0) */
uint8_t allow_access; /* allow (!0) or deny (0) access to range? */
} dom0_iomem_permission_t;
DEFINE_GUEST_HANDLE(dom0_iomem_permission_t);
++++++ xen-lost-mouse.diff ++++++
--- /var/tmp/diff_new_pack.yMShVE/_old 2006-06-07 02:24:57.000000000 +0200
+++ /var/tmp/diff_new_pack.yMShVE/_new 2006-06-07 02:24:57.000000000 +0200
@@ -4,20 +4,6 @@
call xm directly.
-Index: xen-3.0-testing/tools/ioemu/sdl.c
-===================================================================
---- xen-3.0-testing.orig/tools/ioemu/sdl.c
-+++ xen-3.0-testing/tools/ioemu/sdl.c
-@@ -565,6 +565,9 @@ static void sdl_refresh(DisplayState *ds
-
- static void sdl_cleanup(void)
- {
-+ if (gui_grab)
-+ sdl_grab_end();
-+
- SDL_Quit();
- }
-
Index: xen-3.0-testing/tools/python/xen/xend/image.py
===================================================================
--- xen-3.0-testing.orig/tools/python/xen/xend/image.py
++++++ xen-removable.diff ++++++
++++ 991 lines (skipped)
++++ between arch/i386/xen/xen-removable.diff
++++ and xen/xen-removable.diff
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit-unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit-help@opensuse.org