direct-io.hg

changeset 7754:5b2d9807725d

Back out partial fix in ia64-unstable 7665/7/8, breaks Debian boot
author djm@kirby.fc.hp.com
date Thu Nov 10 08:10:18 2005 -0600 (2005-11-10)
parents be53bbe62f2e
children 214bd6a0ed27
files xen/arch/ia64/xen/vcpu.c
line diff
     1.1 --- a/xen/arch/ia64/xen/vcpu.c	Wed Nov 09 15:31:01 2005 -0600
     1.2 +++ b/xen/arch/ia64/xen/vcpu.c	Thu Nov 10 08:10:18 2005 -0600
     1.3 @@ -1287,37 +1287,27 @@ unsigned long fast_vhpt_translate_count 
     1.4  unsigned long recover_to_page_fault_count = 0;
     1.5  unsigned long recover_to_break_fault_count = 0;
     1.6  
     1.7 -int warn_region0_address = 0; // FIXME later: tie to a boot parameter?
     1.8 -
     1.9  IA64FAULT vcpu_translate(VCPU *vcpu, UINT64 address, BOOLEAN is_data, UINT64 *pteval, UINT64 *itir, UINT64 *iha)
    1.10  {
    1.11  	unsigned long pta, pte, rid, rr;
    1.12  	int i;
    1.13  	TR_ENTRY *trp;
    1.14  
    1.15 -	if (PSCB(vcpu,metaphysical_mode)) {
    1.16 -		unsigned long region = address >> 61;
    1.17 -		// dom0 may generate an uncacheable physical address (msb=1)
    1.18 -		if (region && ((region != 4) || (vcpu->domain != dom0))) {
    1.19 -// FIXME: This seems to happen even though it shouldn't.  Need to track
    1.20 -// this down, but since it has been apparently harmless, just flag it for now
    1.21 -//			panic_domain(vcpu_regs(vcpu),
    1.22 -			printk(
    1.23 -			 "vcpu_translate: bad physical address: %p\n",address);
    1.24 +	if (!(address >> 61)) {
    1.25 +		if (!PSCB(vcpu,metaphysical_mode)) {
    1.26 +			REGS *regs = vcpu_regs(vcpu);
    1.27 +			unsigned long viip = PSCB(vcpu,iip);
    1.28 +			unsigned long vipsr = PSCB(vcpu,ipsr);
    1.29 +			unsigned long iip = regs->cr_iip;
    1.30 +			unsigned long ipsr = regs->cr_ipsr;
    1.31 +			printk("vcpu_translate: bad address %p, viip=%p, vipsr=%p, iip=%p, ipsr=%p continuing\n", address, viip, vipsr, iip, ipsr);
    1.32  		}
    1.33 +
    1.34  		*pteval = (address & _PAGE_PPN_MASK) | __DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RWX;
    1.35  		*itir = PAGE_SHIFT << 2;
    1.36  		phys_translate_count++;
    1.37  		return IA64_NO_FAULT;
    1.38  	}
    1.39 -	else if (!(address >> 61) && warn_region0_address) {
    1.40 -		REGS *regs = vcpu_regs(vcpu);
    1.41 -		unsigned long viip = PSCB(vcpu,iip);
    1.42 -		unsigned long vipsr = PSCB(vcpu,ipsr);
    1.43 -		unsigned long iip = regs->cr_iip;
    1.44 -		unsigned long ipsr = regs->cr_ipsr;
    1.45 -		printk("vcpu_translate: bad address %p, viip=%p, vipsr=%p, iip=%p, ipsr=%p continuing\n", address, viip, vipsr, iip, ipsr);
    1.46 -	}
    1.47  
    1.48  	rr = PSCB(vcpu,rrs)[address>>61];
    1.49  	rid = rr & RR_RID_MASK;