diff --git a/linux-2.6.11-xen-sparse/arch/xen/kernel/gnttab.c b/linux-2.6.11-xen-sparse/arch/xen/kernel/gnttab.c index 715f5dc951..36b4951b15 100644 --- a/linux-2.6.11-xen-sparse/arch/xen/kernel/gnttab.c +++ b/linux-2.6.11-xen-sparse/arch/xen/kernel/gnttab.c @@ -319,7 +319,8 @@ static int grant_write(struct file *file, const char __user *buffer, return -ENOSYS; } -static int __init gnttab_init(void) + +int gnttab_resume(void) { gnttab_setup_table_t setup; unsigned long frames[NR_GRANT_FRAMES]; @@ -341,6 +342,21 @@ static int __init gnttab_init(void) for ( i = 0; i < NR_GRANT_ENTRIES; i++ ) gnttab_free_list[i] = i + 1; + + return 0; +} + +int gnttab_suspend(void) +{ + int i; + for ( i = 0; i < NR_GRANT_FRAMES; i++ ) + clear_fixmap(FIX_GNTTAB_END - i); + return 0; +} + +static int __init gnttab_init(void) +{ + BUG_ON(gnttab_resume()); /* * /proc/xen/grant : used by libxc to access grant tables diff --git a/linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c b/linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c index f544ce4e96..31b33671d5 100644 --- a/linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c +++ b/linux-2.6.11-xen-sparse/arch/xen/kernel/reboot.c @@ -84,6 +84,9 @@ static void __do_suspend(void) #define usbif_resume() do{}while(0) #endif + extern int gnttab_suspend(void); + extern int gnttab_resume(void); + extern void time_suspend(void); extern void time_resume(void); extern unsigned long max_pfn; @@ -107,6 +110,8 @@ static void __do_suspend(void) irq_suspend(); + gnttab_suspend(); + HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page; clear_fixmap(FIX_SHARED_INFO); @@ -138,6 +143,7 @@ static void __do_suspend(void) HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list = virt_to_machine(pfn_to_mfn_frame_list) >> PAGE_SHIFT; + gnttab_resume(); irq_resume(); diff --git a/xen/arch/x86/audit.c b/xen/arch/x86/audit.c index 9c9f198cd4..72c0d0b622 100644 --- a/xen/arch/x86/audit.c +++ b/xen/arch/x86/audit.c @@ -285,7 +285,7 @@ int audit_adjust_pgtables(struct domain *d, int dir, int noisy) d->id, l1mfn, i, gmfn); errors++; } - } + } if ( page_get_owner(gpage) != d ) { @@ -587,7 +587,7 @@ void _audit_domain(struct domain *d, int flags) unsigned long mfn) { struct pfn_info *page = &frame_table[mfn]; - unsigned long *pt = map_domain_mem(mfn); + unsigned long *pt = map_domain_mem(mfn<u.inuse.type_info); } } + + list_for_each_entry ( page, &d->xenpage_list, list ) + { + printk("XenPage %08x: caf=%08x, taf=%08x\n", + page_to_phys(page), page->count_info, + page->u.inuse.type_info); + } + page = virt_to_page(d->shared_info); printk("Shared_info@%08x: caf=%08x, taf=%08x\n", diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h index 62260c19df..e4014d5df8 100644 --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -332,7 +332,7 @@ int audit_adjust_pgtables(struct domain *d, int dir, int noisy); #define AUDIT_QUIET ( 1u << 2 ) void _audit_domain(struct domain *d, int flags); -#define audit_domain(_d) _audit_domain((_d), 0) +#define audit_domain(_d) _audit_domain((_d), AUDIT_ERRORS_OK) void audit_domains(void); #else