[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] manual merge with michaels latest
ChangeSet 1.1249, 2005/03/16 17:56:21+00:00, rneugeba@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx manual merge with michaels latest Signed-off-by: michael.fetterman@xxxxxxxxxxxx b/xen/arch/x86/mm.c | 27 + b/xen/arch/x86/shadow.c | 135 ++++-- b/xen/drivers/char/console.c | 2 b/xen/include/asm-x86/shadow.h | 191 +++++++-- b/xen/include/xen/perfc_defn.h | 11 b/~/audit.c | 817 +++++++++++++++++++++++++++++++++++++++++ xen/arch/x86/audit.c | 817 ----------------------------------------- 7 files changed, 1088 insertions(+), 912 deletions(-) diff -Nru a/xen/arch/x86/audit.c b/xen/arch/x86/audit.c --- a/xen/arch/x86/audit.c 2005-04-05 12:12:01 -04:00 +++ /dev/null Wed Dec 31 16:00:00 196900 @@ -1,817 +0,0 @@ -/****************************************************************************** - * arch/x86/audit.c - * - * Copyright (c) 2002-2005 K A Fraser - * Copyright (c) 2004 Christian Limpach - * Copyright (c) 2005 Michael A Fetterman - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include <xen/config.h> -#include <xen/init.h> -#include <xen/kernel.h> -#include <xen/lib.h> -#include <xen/mm.h> -//#include <xen/sched.h> -//#include <xen/errno.h> -#include <xen/perfc.h> -//#include <xen/irq.h> -//#include <xen/softirq.h> -#include <asm/shadow.h> -#include <asm/page.h> -#include <asm/flushtlb.h> -//#include <asm/io.h> -//#include <asm/uaccess.h> -//#include <asm/domain_page.h> -//#include <asm/ldt.h> - -// XXX SMP bug -- these should not be statics... -// -static int ttot=0, ctot=0, io_mappings=0, lowmem_mappings=0; -static int l1, l2, oos_count, page_count; - -#define FILE_AND_LINE 1 - -#if FILE_AND_LINE -#define adjust(_p, _a) _adjust((_p), (_a), __FILE__, __LINE__) -#define ADJUST_EXTRA_ARGS ,const char *file, int line -#define APRINTK(_f, _a...) printk(_f " %s:%d\n", ## _a, file, line) -#else -#define adjust _adjust -#define ADJUST_EXTRA_ARGS -#define APRINTK(_f, _a...) printk(_f "\n", ##_a) -#endif - -int audit_adjust_pgtables(struct domain *d, int dir, int noisy) -{ - int errors = 0; - int shadow_enabled = shadow_mode_enabled(d) ? 1 : 0; - - void _adjust(struct pfn_info *page, int adjtype ADJUST_EXTRA_ARGS) - { - if ( adjtype ) - { - // adjust the type count - // - int tcount = page->u.inuse.type_info & PGT_count_mask; - tcount += dir; - ttot++; - - if ( page_get_owner(page) == NULL ) - { - APRINTK("adjust(mfn=%p, dir=%d, adjtype=%d) owner=NULL", - page_to_pfn(page), dir, adjtype, file, line); - errors++; - } - - if ( tcount < 0 ) - { - APRINTK("Audit %d: type count went below zero mfn=%x t=%x ot=%x", - d->id, page-frame_table, - page->u.inuse.type_info, - page->tlbflush_timestamp); - errors++; - } - else if ( (tcount & ~PGT_count_mask) != 0 ) - { - APRINTK("Audit %d: type count overflowed mfn=%x t=%x ot=%x", - d->id, page-frame_table, - page->u.inuse.type_info, - page->tlbflush_timestamp); - errors++; - } - else - page->u.inuse.type_info += dir; - } - - // adjust the general count - // - int count = page->count_info & PGC_count_mask; - count += dir; - ctot++; - - if ( count < 0 ) - { - APRINTK("Audit %d: general count went below zero pfn=%x t=%x ot=%x", - d->id, page-frame_table, - page->u.inuse.type_info, - page->tlbflush_timestamp); - errors++; - } - else if ( (count & ~PGT_count_mask) != 0 ) - { - APRINTK("Audit %d: general count overflowed pfn=%x t=%x ot=%x", - d->id, page-frame_table, - page->u.inuse.type_info, - page->tlbflush_timestamp); - errors++; - } - else - page->count_info += dir; - } - - void adjust_l2_page(unsigned long mfn, int adjtype) - { - unsigned long *pt = map_domain_mem(mfn << PAGE_SHIFT); - int i, limit; - - if ( shadow_mode_external(d) ) - limit = L2_PAGETABLE_ENTRIES; - else - limit = DOMAIN_ENTRIES_PER_L2_PAGETABLE; - - for ( i = 0; i < limit; i++ ) - { - if ( pt[i] & _PAGE_PRESENT ) - { - unsigned long l1mfn = pt[i] >> PAGE_SHIFT; - struct pfn_info *l1page = pfn_to_page(l1mfn); - - if ( noisy ) - { - if ( shadow_enabled ) - { - if ( page_get_owner(l1page) != NULL ) - { - printk("L2: Bizarre shadow L1 page mfn=%p " - "belonging to a domain %p (id=%d)\n", - l1mfn, - page_get_owner(l1page), - page_get_owner(l1page)->id); - errors++; - continue; - } - } - else - { - if ( page_get_owner(l1page) != d ) - { - printk("L2: Skip bizarre L1 page mfn=%p " - "belonging to other dom %p (id=%d)\n", - l1mfn, - page_get_owner(l1page), - page_get_owner(l1page)->id); - errors++; - continue; - } - - u32 page_type = l1page->u.inuse.type_info & PGT_type_mask; - - if ( page_type == PGT_l2_page_table ) - { - printk("Audit %d: [%x] Found %s Linear PT " - "t=%x mfn=%p\n", - d->id, i, (l1mfn==mfn) ? "Self" : "Other", - l1page->u.inuse.type_info, l1mfn); - } - else if ( page_type != PGT_l1_page_table ) - { - printk("Audit %d: [L2 mfn=%p i=%x] " - "Expected L1 t=%x mfn=%p\n", - d->id, mfn, i, - l1page->u.inuse.type_info, l1mfn); - errors++; - } - } - } - - adjust(l1page, adjtype); - } - } - - unmap_domain_mem(pt); - } - - void adjust_l1_page(unsigned long l1mfn) - { - unsigned long *pt = map_domain_mem(l1mfn << PAGE_SHIFT); - int i; - - for ( i = 0; i < L1_PAGETABLE_ENTRIES; i++ ) - { - if ( pt[i] & _PAGE_PRESENT ) - { - unsigned long gmfn = pt[i] >> PAGE_SHIFT; - struct pfn_info *gpage = pfn_to_page(gmfn); - - if ( gmfn < 0x100 ) - { - lowmem_mappings++; - continue; - } - - if ( gmfn > max_page ) - { - io_mappings++; - continue; - } - - if ( noisy ) - { - if ( pt[i] & _PAGE_RW ) - { - // If it's not a writable page, complain. - // - if ( !((gpage->u.inuse.type_info & PGT_type_mask) == - PGT_writable_page) ) - { - printk("Audit %d: [l1mfn=%p, i=%x] Illegal RW " - "t=%x mfn=%p\n", - d->id, l1mfn, i, - gpage->u.inuse.type_info, gmfn); - errors++; - } - - if ( shadow_enabled && - page_is_page_table(gpage) && - ! page_out_of_sync(gpage) ) - { - printk("Audit %d: [l1mfn=%p, i=%x] Illegal RW of " - "page table gmfn=%p\n", - d->id, l1mfn, i, gmfn); - errors++; - } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |