ia64/xen-unstable
changeset 2424:a0d6f6965951
bitkeeper revision 1.1159.69.6 (4138ef8dDCN5JpkZV5nXmG3maQGSKw)
Merge ssh://scramble.cl.cam.ac.uk//usr/groups/xeno/BK/xeno.bk
into camelot.eng.3leafnetworks.com:/home/kaf24/xeno
Merge ssh://scramble.cl.cam.ac.uk//usr/groups/xeno/BK/xeno.bk
into camelot.eng.3leafnetworks.com:/home/kaf24/xeno
author | kaf24@camelot.eng.3leafnetworks.com |
---|---|
date | Fri Sep 03 22:26:21 2004 +0000 (2004-09-03) |
parents | 2274a0386cc9 ac282d5dd9d1 |
children | 417427e14fbb |
files | BitKeeper/etc/logging_ok linux-2.4.27-xen-sparse/include/asm-xen/pgalloc.h linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/hypervisor.c linux-2.6.8.1-xen-sparse/include/asm-xen/hypervisor.h tools/libxc/xc_linux_build.c tools/libxc/xc_linux_restore.c tools/libxc/xc_netbsd_build.c xen/arch/x86/memory.c xen/common/schedule.c xen/include/asm-x86/mm.h xen/include/hypervisor-ifs/hypervisor-if.h |
line diff
1.1 --- a/BitKeeper/etc/logging_ok Fri Sep 03 21:56:18 2004 +0000 1.2 +++ b/BitKeeper/etc/logging_ok Fri Sep 03 22:26:21 2004 +0000 1.3 @@ -19,6 +19,7 @@ iap10@striker.cl.cam.ac.uk 1.4 iap10@tetris.cl.cam.ac.uk 1.5 jws22@gauntlet.cl.cam.ac.uk 1.6 jws@cairnwell.research 1.7 +kaf24@camelot.eng.3leafnetworks.com 1.8 kaf24@freefall.cl.cam.ac.uk 1.9 kaf24@labyrinth.cl.cam.ac.uk 1.10 kaf24@penguin.local
2.1 --- a/linux-2.4.27-xen-sparse/include/asm-xen/pgalloc.h Fri Sep 03 21:56:18 2004 +0000 2.2 +++ b/linux-2.4.27-xen-sparse/include/asm-xen/pgalloc.h Fri Sep 03 22:26:21 2004 +0000 2.3 @@ -134,7 +134,6 @@ static inline pte_t *pte_alloc_one(struc 2.4 { 2.5 clear_page(pte); 2.6 __make_page_readonly(pte); 2.7 - queue_pte_pin(__pa(pte)); 2.8 } 2.9 return pte; 2.10 2.11 @@ -153,7 +152,6 @@ static inline pte_t *pte_alloc_one_fast( 2.12 2.13 static __inline__ void pte_free_slow(pte_t *pte) 2.14 { 2.15 - queue_pte_unpin(__pa(pte)); 2.16 __make_page_writable(pte); 2.17 free_page((unsigned long)pte); 2.18 }
3.1 --- a/linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/hypervisor.c Fri Sep 03 21:56:18 2004 +0000 3.2 +++ b/linux-2.6.8.1-xen-sparse/arch/xen/i386/mm/hypervisor.c Fri Sep 03 22:26:21 2004 +0000 3.3 @@ -85,8 +85,6 @@ static void DEBUG_disallow_pt_read(unsig 3.4 #undef queue_invlpg 3.5 #undef queue_pgd_pin 3.6 #undef queue_pgd_unpin 3.7 -#undef queue_pte_pin 3.8 -#undef queue_pte_unpin 3.9 #undef queue_set_ldt 3.10 #endif 3.11 3.12 @@ -219,7 +217,7 @@ void queue_pgd_pin(unsigned long ptr) 3.13 spin_lock_irqsave(&update_lock, flags); 3.14 update_queue[idx].ptr = phys_to_machine(ptr); 3.15 update_queue[idx].ptr |= MMU_EXTENDED_COMMAND; 3.16 - update_queue[idx].val = MMUEXT_PIN_L2_TABLE; 3.17 + update_queue[idx].val = MMUEXT_PIN_TABLE; 3.18 increment_index(); 3.19 spin_unlock_irqrestore(&update_lock, flags); 3.20 } 3.21 @@ -235,28 +233,6 @@ void queue_pgd_unpin(unsigned long ptr) 3.22 spin_unlock_irqrestore(&update_lock, flags); 3.23 } 3.24 3.25 -void queue_pte_pin(unsigned long ptr) 3.26 -{ 3.27 - unsigned long flags; 3.28 - spin_lock_irqsave(&update_lock, flags); 3.29 - update_queue[idx].ptr = phys_to_machine(ptr); 3.30 - update_queue[idx].ptr |= MMU_EXTENDED_COMMAND; 3.31 - update_queue[idx].val = MMUEXT_PIN_L1_TABLE; 3.32 - increment_index(); 3.33 - spin_unlock_irqrestore(&update_lock, flags); 3.34 -} 3.35 - 3.36 -void queue_pte_unpin(unsigned long ptr) 3.37 -{ 3.38 - unsigned long flags; 3.39 - spin_lock_irqsave(&update_lock, flags); 3.40 - update_queue[idx].ptr = phys_to_machine(ptr); 3.41 - update_queue[idx].ptr |= MMU_EXTENDED_COMMAND; 3.42 - update_queue[idx].val = MMUEXT_UNPIN_TABLE; 3.43 - increment_index(); 3.44 - spin_unlock_irqrestore(&update_lock, flags); 3.45 -} 3.46 - 3.47 void queue_set_ldt(unsigned long ptr, unsigned long len) 3.48 { 3.49 unsigned long flags; 3.50 @@ -339,7 +315,7 @@ void xen_pgd_pin(unsigned long ptr) 3.51 spin_lock_irqsave(&update_lock, flags); 3.52 update_queue[idx].ptr = phys_to_machine(ptr); 3.53 update_queue[idx].ptr |= MMU_EXTENDED_COMMAND; 3.54 - update_queue[idx].val = MMUEXT_PIN_L2_TABLE; 3.55 + update_queue[idx].val = MMUEXT_PIN_TABLE; 3.56 increment_index_and_flush(); 3.57 spin_unlock_irqrestore(&update_lock, flags); 3.58 } 3.59 @@ -355,28 +331,6 @@ void xen_pgd_unpin(unsigned long ptr) 3.60 spin_unlock_irqrestore(&update_lock, flags); 3.61 } 3.62 3.63 -void xen_pte_pin(unsigned long ptr) 3.64 -{ 3.65 - unsigned long flags; 3.66 - spin_lock_irqsave(&update_lock, flags); 3.67 - update_queue[idx].ptr = phys_to_machine(ptr); 3.68 - update_queue[idx].ptr |= MMU_EXTENDED_COMMAND; 3.69 - update_queue[idx].val = MMUEXT_PIN_L1_TABLE; 3.70 - increment_index_and_flush(); 3.71 - spin_unlock_irqrestore(&update_lock, flags); 3.72 -} 3.73 - 3.74 -void xen_pte_unpin(unsigned long ptr) 3.75 -{ 3.76 - unsigned long flags; 3.77 - spin_lock_irqsave(&update_lock, flags); 3.78 - update_queue[idx].ptr = phys_to_machine(ptr); 3.79 - update_queue[idx].ptr |= MMU_EXTENDED_COMMAND; 3.80 - update_queue[idx].val = MMUEXT_UNPIN_TABLE; 3.81 - increment_index_and_flush(); 3.82 - spin_unlock_irqrestore(&update_lock, flags); 3.83 -} 3.84 - 3.85 void xen_set_ldt(unsigned long ptr, unsigned long len) 3.86 { 3.87 unsigned long flags;
4.1 --- a/linux-2.6.8.1-xen-sparse/include/asm-xen/hypervisor.h Fri Sep 03 21:56:18 2004 +0000 4.2 +++ b/linux-2.6.8.1-xen-sparse/include/asm-xen/hypervisor.h Fri Sep 03 22:26:21 2004 +0000 4.3 @@ -54,8 +54,6 @@ void queue_tlb_flush(void); 4.4 void queue_invlpg(unsigned long ptr); 4.5 void queue_pgd_pin(unsigned long ptr); 4.6 void queue_pgd_unpin(unsigned long ptr); 4.7 -void queue_pte_pin(unsigned long ptr); 4.8 -void queue_pte_unpin(unsigned long ptr); 4.9 void queue_set_ldt(unsigned long ptr, unsigned long bytes); 4.10 void queue_machphys_update(unsigned long mfn, unsigned long pfn); 4.11 void xen_l1_entry_update(pte_t *ptr, unsigned long val); 4.12 @@ -65,8 +63,6 @@ void xen_tlb_flush(void); 4.13 void xen_invlpg(unsigned long ptr); 4.14 void xen_pgd_pin(unsigned long ptr); 4.15 void xen_pgd_unpin(unsigned long ptr); 4.16 -void xen_pte_pin(unsigned long ptr); 4.17 -void xen_pte_unpin(unsigned long ptr); 4.18 void xen_set_ldt(unsigned long ptr, unsigned long bytes); 4.19 void xen_machphys_update(unsigned long mfn, unsigned long pfn); 4.20 #define MMU_UPDATE_DEBUG 0 4.21 @@ -141,14 +137,6 @@ extern page_update_debug_t update_debug_ 4.22 printk("PGD UNPIN %s %d: %08lx\n", __FILE__, __LINE__, (_p)); \ 4.23 queue_pgd_unpin(_p); \ 4.24 }) 4.25 -#define queue_pte_pin(_p) ({ \ 4.26 - printk("PTE PIN %s %d: %08lx\n", __FILE__, __LINE__, (_p)); \ 4.27 - queue_pte_pin(_p); \ 4.28 -}) 4.29 -#define queue_pte_unpin(_p) ({ \ 4.30 - printk("PTE UNPIN %s %d: %08lx\n", __FILE__, __LINE__, (_p)); \ 4.31 - queue_pte_unpin(_p); \ 4.32 -}) 4.33 #define queue_set_ldt(_p,_l) ({ \ 4.34 printk("SETL LDT %s %d: %08lx %d\n", __FILE__, __LINE__, (_p), (_l)); \ 4.35 queue_set_ldt((_p), (_l)); \
5.1 --- a/tools/libxc/xc_linux_build.c Fri Sep 03 21:56:18 2004 +0000 5.2 +++ b/tools/libxc/xc_linux_build.c Fri Sep 03 22:26:21 2004 +0000 5.3 @@ -270,7 +270,7 @@ static int setup_guestos(int xc_handle, 5.4 * correct protection for the page 5.5 */ 5.6 if ( add_mmu_update(xc_handle, mmu, 5.7 - l2tab | MMU_EXTENDED_COMMAND, MMUEXT_PIN_L2_TABLE) ) 5.8 + l2tab | MMU_EXTENDED_COMMAND, MMUEXT_PIN_TABLE) ) 5.9 goto error_out; 5.10 5.11 start_info = map_pfn_writeable(
6.1 --- a/tools/libxc/xc_linux_restore.c Fri Sep 03 21:56:18 2004 +0000 6.2 +++ b/tools/libxc/xc_linux_restore.c Fri Sep 03 22:26:21 2004 +0000 6.3 @@ -473,28 +473,16 @@ int xc_linux_restore(int xc_handle, XcIO 6.4 */ 6.5 for ( i = 0; i < nr_pfns; i++ ) 6.6 { 6.7 - if ( pfn_type[i] == (L1TAB|LPINTAB) ) 6.8 + if ( pfn_type[i] != (L2TAB|LPINTAB) ) 6.9 + continue; 6.10 + if ( add_mmu_update(xc_handle, mmu, 6.11 + (pfn_to_mfn_table[i]<<PAGE_SHIFT) | 6.12 + MMU_EXTENDED_COMMAND, 6.13 + MMUEXT_PIN_TABLE) ) 6.14 { 6.15 - if ( add_mmu_update(xc_handle, mmu, 6.16 - (pfn_to_mfn_table[i]<<PAGE_SHIFT) | 6.17 - MMU_EXTENDED_COMMAND, 6.18 - MMUEXT_PIN_L1_TABLE) ) { 6.19 - printf("ERR pin L1 pfn=%lx mfn=%lx\n", 6.20 - (unsigned long)i, pfn_to_mfn_table[i]); 6.21 - goto out; 6.22 - } 6.23 - } 6.24 - else if ( pfn_type[i] == (L2TAB|LPINTAB) ) 6.25 - { 6.26 - if ( add_mmu_update(xc_handle, mmu, 6.27 - (pfn_to_mfn_table[i]<<PAGE_SHIFT) | 6.28 - MMU_EXTENDED_COMMAND, 6.29 - MMUEXT_PIN_L2_TABLE) ) 6.30 - { 6.31 - printf("ERR pin L2 pfn=%lx mfn=%lx\n", 6.32 - (unsigned long)i, pfn_to_mfn_table[i]); 6.33 - goto out; 6.34 - } 6.35 + printf("ERR pin L2 pfn=%lx mfn=%lx\n", 6.36 + (unsigned long)i, pfn_to_mfn_table[i]); 6.37 + goto out; 6.38 } 6.39 } 6.40
7.1 --- a/tools/libxc/xc_netbsd_build.c Fri Sep 03 21:56:18 2004 +0000 7.2 +++ b/tools/libxc/xc_netbsd_build.c Fri Sep 03 22:26:21 2004 +0000 7.3 @@ -163,7 +163,7 @@ static int setup_guestos(int xc_handle, 7.4 * correct protection for the page 7.5 */ 7.6 if ( add_mmu_update(xc_handle, mmu, 7.7 - l2tab | MMU_EXTENDED_COMMAND, MMUEXT_PIN_L2_TABLE) ) 7.8 + l2tab | MMU_EXTENDED_COMMAND, MMUEXT_PIN_TABLE) ) 7.9 goto error_out; 7.10 7.11 *virt_startinfo_addr =
8.1 --- a/xen/arch/x86/memory.c Fri Sep 03 21:56:18 2004 +0000 8.2 +++ b/xen/arch/x86/memory.c Fri Sep 03 22:26:21 2004 +0000 8.3 @@ -455,7 +455,8 @@ get_page_from_l1e( 8.4 /* NB. Virtual address 'l2e' maps to a machine address within frame 'pfn'. */ 8.5 static int 8.6 get_page_from_l2e( 8.7 - l2_pgentry_t l2e, unsigned long pfn, struct domain *d, unsigned long va_idx) 8.8 + l2_pgentry_t l2e, unsigned long pfn, 8.9 + struct domain *d, unsigned long va_idx) 8.10 { 8.11 int rc; 8.12 8.13 @@ -471,7 +472,7 @@ get_page_from_l2e( 8.14 8.15 rc = get_page_and_type_from_pagenr( 8.16 l2_pgentry_to_pagenr(l2e), 8.17 - PGT_l1_page_table | (va_idx<<PGT_va_shift), d); 8.18 + PGT_l1_page_table | (va_idx<<PGT_va_shift), d); 8.19 8.20 if ( unlikely(!rc) ) 8.21 return get_linear_pagetable(l2e, pfn, d); 8.22 @@ -671,8 +672,8 @@ static int mod_l2_entry(l2_pgentry_t *pl 8.23 return update_l2e(pl2e, ol2e, nl2e); 8.24 8.25 if ( unlikely(!get_page_from_l2e(nl2e, pfn, current, 8.26 - ((unsigned long) 8.27 - pl2e & ~PAGE_MASK) >> 2 )) ) 8.28 + ((unsigned long)pl2e & 8.29 + ~PAGE_MASK) >> 2)) ) 8.30 return 0; 8.31 8.32 if ( unlikely(!update_l2e(pl2e, ol2e, nl2e)) ) 8.33 @@ -826,21 +827,9 @@ static int do_extended_command(unsigned 8.34 8.35 switch ( cmd ) 8.36 { 8.37 - case MMUEXT_PIN_L1_TABLE: 8.38 - case MMUEXT_PIN_L2_TABLE: 8.39 - 8.40 - /* When we pin an L1 page we now insist that the va 8.41 - backpointer (used for writable page tables) must still be 8.42 - mutable. This is an additional restriction even for guests 8.43 - that don't use writable page tables, but I don't think it 8.44 - will break anything as guests typically pin pages before 8.45 - they are used, hence they'll still be mutable. */ 8.46 - 8.47 + case MMUEXT_PIN_TABLE: 8.48 okay = get_page_and_type_from_pagenr( 8.49 - pfn, 8.50 - ((cmd==MMUEXT_PIN_L2_TABLE) ? 8.51 - PGT_l2_page_table : (PGT_l1_page_table | PGT_va_mutable) ) , 8.52 - FOREIGNDOM); 8.53 + pfn, PGT_l2_page_table, FOREIGNDOM); 8.54 8.55 if ( unlikely(!okay) ) 8.56 { 8.57 @@ -1183,6 +1172,7 @@ int do_mmu_update(mmu_update_t *ureqs, i 8.58 unsigned long prev_spfn = 0; 8.59 l1_pgentry_t *prev_spl1e = 0; 8.60 struct domain *d = current; 8.61 + u32 type_info; 8.62 8.63 perfc_incrc(calls_to_mmu_update); 8.64 perfc_addc(num_page_updates, count); 8.65 @@ -1231,10 +1221,11 @@ int do_mmu_update(mmu_update_t *ureqs, i 8.66 } 8.67 8.68 page = &frame_table[pfn]; 8.69 - switch ( (page->u.inuse.type_info & PGT_type_mask) ) 8.70 + switch ( (type_info = page->u.inuse.type_info) & PGT_type_mask ) 8.71 { 8.72 case PGT_l1_page_table: 8.73 - if ( likely(passive_get_page_type(page, PGT_l1_page_table)) ) 8.74 + if ( likely(get_page_type( 8.75 + page, type_info & (PGT_type_mask|PGT_va_mask))) ) 8.76 { 8.77 okay = mod_l1_entry((l1_pgentry_t *)va, 8.78 mk_l1_pgentry(req.val)); 8.79 @@ -1484,11 +1475,11 @@ void ptwr_reconnect_disconnected(unsigne 8.80 [ptwr_info[cpu].writable_l1>>PAGE_SHIFT]; 8.81 8.82 #ifdef PTWR_TRACK_DOMAIN 8.83 - if (ptwr_domain[cpu] != get_current()->domain) 8.84 + if (ptwr_domain[cpu] != current->domain) 8.85 printk("ptwr_reconnect_disconnected domain mismatch %d != %d\n", 8.86 - ptwr_domain[cpu], get_current()->domain); 8.87 + ptwr_domain[cpu], current->domain); 8.88 #endif 8.89 - PTWR_PRINTK(("[A] page fault in disconnected space: addr %08lx space %08lx\n", 8.90 + PTWR_PRINTK(("[A] page fault in disconn space: addr %08lx space %08lx\n", 8.91 addr, ptwr_info[cpu].disconnected << L2_PAGETABLE_SHIFT)); 8.92 pl2e = &linear_l2_table[ptwr_info[cpu].disconnected]; 8.93 8.94 @@ -1560,9 +1551,9 @@ void ptwr_flush_inactive(void) 8.95 int i, idx; 8.96 8.97 #ifdef PTWR_TRACK_DOMAIN 8.98 - if (ptwr_info[cpu].domain != get_current()->domain) 8.99 + if (ptwr_info[cpu].domain != current->domain) 8.100 printk("ptwr_flush_inactive domain mismatch %d != %d\n", 8.101 - ptwr_info[cpu].domain, get_current()->domain); 8.102 + ptwr_info[cpu].domain, current->domain); 8.103 #endif 8.104 #if 0 8.105 { 8.106 @@ -1643,9 +1634,9 @@ int ptwr_do_page_fault(unsigned long add 8.107 if ( (page->u.inuse.type_info & PGT_type_mask) == PGT_l1_page_table ) 8.108 { 8.109 #ifdef PTWR_TRACK_DOMAIN 8.110 - if ( ptwr_info[cpu].domain != get_current()->domain ) 8.111 + if ( ptwr_info[cpu].domain != current->domain ) 8.112 printk("ptwr_do_page_fault domain mismatch %d != %d\n", 8.113 - ptwr_info[cpu].domain, get_current()->domain); 8.114 + ptwr_info[cpu].domain, current->domain); 8.115 #endif 8.116 pl2e = &linear_l2_table[(page->u.inuse.type_info & 8.117 PGT_va_mask) >> PGT_va_shift];
9.1 --- a/xen/common/schedule.c Fri Sep 03 21:56:18 2004 +0000 9.2 +++ b/xen/common/schedule.c Fri Sep 03 22:26:21 2004 +0000 9.3 @@ -374,20 +374,6 @@ void __enter_scheduler(void) 9.4 cleanup_writable_pagetable( 9.5 prev, PTWR_CLEANUP_ACTIVE | PTWR_CLEANUP_INACTIVE); 9.6 9.7 -#ifdef PTWR_TRACK_DOMAIN 9.8 - { 9.9 - extern domid_t ptwr_domain[]; 9.10 - int cpu = smp_processor_id(); 9.11 - if (ptwr_domain[cpu] != prev->domain) 9.12 - printk("switch_to domain mismatch %d != %d\n", 9.13 - ptwr_domain[cpu], prev->domain); 9.14 - ptwr_domain[cpu] = next->domain; 9.15 - if (ptwr_disconnected[cpu] != ENTRIES_PER_L2_PAGETABLE || 9.16 - ptwr_writable_idx[cpu]) 9.17 - printk("switch_to ptwr dirty!!!\n"); 9.18 - } 9.19 -#endif 9.20 - 9.21 perfc_incrc(sched_ctx); 9.22 9.23 #if defined(WAKE_HISTO)
10.1 --- a/xen/include/asm-x86/mm.h Fri Sep 03 21:56:18 2004 +0000 10.2 +++ b/xen/include/asm-x86/mm.h Fri Sep 03 22:26:21 2004 +0000 10.3 @@ -71,10 +71,9 @@ struct pfn_info 10.4 /* Has this page been validated for use as its current type? */ 10.5 #define _PGT_validated 28 10.6 #define PGT_validated (1<<_PGT_validated) 10.7 - /* 10-bit most significant bits of va address if used as l1 page table */ 10.8 + /* The 10 most significant bits of virt address if this is a L1 page table. */ 10.9 #define PGT_va_shift 18 10.10 #define PGT_va_mask (((1<<10)-1)<<PGT_va_shift) 10.11 -#define PGT_va_mutable PGT_va_mask /* va backpointer is still mutable */ 10.12 /* 18-bit count of uses of this frame as its current type. */ 10.13 #define PGT_count_mask ((1<<18)-1) 10.14 10.15 @@ -199,13 +198,6 @@ static inline void put_page_type(struct 10.16 nx &= ~PGT_validated; 10.17 } 10.18 } 10.19 - else if ( unlikely( ((nx & PGT_count_mask) == 1) && 10.20 - test_bit(_PGC_guest_pinned, &page->count_info)) ) 10.21 - { 10.22 - /* if the page is pinned, but we're dropping the last reference 10.23 - then make the va backpointer mutable again */ 10.24 - nx |= PGT_va_mutable; 10.25 - } 10.26 } 10.27 while ( unlikely((y = cmpxchg(&page->u.inuse.type_info, x, nx)) != x) ); 10.28 } 10.29 @@ -230,27 +222,15 @@ static inline int get_page_type(struct p 10.30 nx &= ~(PGT_type_mask | PGT_va_mask | PGT_validated); 10.31 nx |= type; 10.32 /* No extra validation needed for writable pages. */ 10.33 - if ( (type & PGT_type_mask) == PGT_writable_page ) 10.34 + if ( type == PGT_writable_page ) 10.35 nx |= PGT_validated; 10.36 } 10.37 } 10.38 - else if ( unlikely((x & PGT_type_mask) != (type & PGT_type_mask) ) ) 10.39 + else if ( unlikely((x & (PGT_type_mask|PGT_va_mask)) != type) ) 10.40 { 10.41 - DPRINTK("Unexpected type (saw %08x != exp %08x) for pfn %08lx\n", 10.42 - x & PGT_type_mask, type, page_to_pfn(page)); 10.43 - return 0; 10.44 - } 10.45 - else if ( (x & PGT_va_mask) == PGT_va_mutable ) 10.46 - { 10.47 - /* The va_backpointer is currently mutable, hence we update it. */ 10.48 - nx &= ~PGT_va_mask; 10.49 - nx |= type; /* we know the actual type is correct */ 10.50 - } 10.51 - else if ( unlikely((x & PGT_va_mask) != (type & PGT_va_mask) ) ) 10.52 - { 10.53 - /* The va backpointer wasn't mutable, and is different :-( */ 10.54 - DPRINTK("Unexpected va backpointer (saw %08x != exp %08x) for pfn %08lx\n", 10.55 - x, type, page_to_pfn(page)); 10.56 + DPRINTK("Unexpected type or va backptr (saw %08x != exp %08x) " 10.57 + "for pfn %08lx\n", 10.58 + x & (PGT_type_mask|PGT_va_mask), type, page_to_pfn(page)); 10.59 return 0; 10.60 } 10.61 else if ( unlikely(!(x & PGT_validated)) ) 10.62 @@ -286,55 +266,6 @@ static inline int get_page_type(struct p 10.63 return 1; 10.64 } 10.65 10.66 -/* This 'passive' version of get_page_type doesn't attempt to validate 10.67 -the page, but just checks the type and increments the type count. The 10.68 -function is called while doing a NORMAL_PT_UPDATE of an entry in an L1 10.69 -page table: We want to 'lock' the page for the brief beriod while 10.70 -we're doing the update, but we're not actually linking it in to a 10.71 -pagetable. */ 10.72 - 10.73 -static inline int passive_get_page_type(struct pfn_info *page, u32 type) 10.74 -{ 10.75 - u32 nx, x, y = page->u.inuse.type_info; 10.76 - again: 10.77 - do { 10.78 - x = y; 10.79 - nx = x + 1; 10.80 - if ( unlikely((nx & PGT_count_mask) == 0) ) 10.81 - { 10.82 - DPRINTK("Type count overflow on pfn %08lx\n", page_to_pfn(page)); 10.83 - return 0; 10.84 - } 10.85 - else if ( unlikely((x & PGT_count_mask) == 0) ) 10.86 - { 10.87 - if ( (x & (PGT_type_mask|PGT_va_mask)) != type ) 10.88 - { 10.89 - nx &= ~(PGT_type_mask | PGT_va_mask | PGT_validated); 10.90 - nx |= type; 10.91 - } 10.92 - } 10.93 - else if ( unlikely((x & PGT_type_mask) != (type & PGT_type_mask) ) ) 10.94 - { 10.95 - DPRINTK("Unexpected type (saw %08x != exp %08x) for pfn %08lx\n", 10.96 - x & PGT_type_mask, type, page_to_pfn(page)); 10.97 - return 0; 10.98 - } 10.99 - else if ( unlikely(!(x & PGT_validated)) ) 10.100 - { 10.101 - /* Someone else is updating validation of this page. Wait... */ 10.102 - while ( (y = page->u.inuse.type_info) != x ) 10.103 - { 10.104 - rep_nop(); 10.105 - barrier(); 10.106 - } 10.107 - goto again; 10.108 - } 10.109 - } 10.110 - while ( unlikely((y = cmpxchg(&page->u.inuse.type_info, x, nx)) != x) ); 10.111 - 10.112 - return 1; 10.113 -} 10.114 - 10.115 10.116 static inline void put_page_and_type(struct pfn_info *page) 10.117 {
11.1 --- a/xen/include/hypervisor-ifs/hypervisor-if.h Fri Sep 03 21:56:18 2004 +0000 11.2 +++ b/xen/include/hypervisor-ifs/hypervisor-if.h Fri Sep 03 22:26:21 2004 +0000 11.3 @@ -104,9 +104,9 @@ 11.4 * ptr[1:0] == MMU_EXTENDED_COMMAND: 11.5 * val[7:0] -- MMUEXT_* command. 11.6 * 11.7 - * val[7:0] == MMUEXT_(UN)PIN_*_TABLE: 11.8 - * ptr[:2] -- Machine address of frame to be (un)pinned as a p.t. page. 11.9 - * The frame must belong to the FD, if one is specified. 11.10 + * val[7:0] == MMUEXT_[UN]PIN_TABLE: 11.11 + * ptr[:2] -- Machine address of frame to be (un)pinned as a top-level p.t. 11.12 + * page. The frame must belong to the FD, if one is specified. 11.13 * 11.14 * val[7:0] == MMUEXT_NEW_BASEPTR: 11.15 * ptr[:2] -- Machine address of new page-table base to install in MMU. 11.16 @@ -142,10 +142,7 @@ 11.17 #define MMU_NORMAL_PT_UPDATE 0 /* checked '*ptr = val'. ptr is MA. */ 11.18 #define MMU_MACHPHYS_UPDATE 2 /* ptr = MA of frame to modify entry for */ 11.19 #define MMU_EXTENDED_COMMAND 3 /* least 8 bits of val demux further */ 11.20 -#define MMUEXT_PIN_L1_TABLE 0 /* ptr = MA of frame to pin */ 11.21 -#define MMUEXT_PIN_L2_TABLE 1 /* ptr = MA of frame to pin */ 11.22 -#define MMUEXT_PIN_L3_TABLE 2 /* ptr = MA of frame to pin */ 11.23 -#define MMUEXT_PIN_L4_TABLE 3 /* ptr = MA of frame to pin */ 11.24 +#define MMUEXT_PIN_TABLE 0 /* ptr = MA of frame to pin */ 11.25 #define MMUEXT_UNPIN_TABLE 4 /* ptr = MA of frame to unpin */ 11.26 #define MMUEXT_NEW_BASEPTR 5 /* ptr = MA of new pagetable base */ 11.27 #define MMUEXT_TLB_FLUSH 6 /* ptr = NULL */