--- 2014-05-12.orig/xen/arch/x86/hvm/mtrr.c 2014-05-12 14:13:16.000000000 +0200 +++ 2014-05-12/xen/arch/x86/hvm/mtrr.c 2014-06-16 14:55:25.000000000 +0200 @@ -654,7 +654,14 @@ int32_t hvm_set_mem_pinned_cacheattr( call_rcu(&range->rcu, free_pinned_cacheattr_entry); p2m_memory_type_changed(d); if ( type != PAT_TYPE_UNCACHABLE ) +{//temp + static unsigned long cnt, thr; + if(++cnt > thr) { + thr |= cnt; + printk("unpin[%06lx] d%d t=%u\n", cnt, d->domain_id, type); + } flush_all(FLUSH_CACHE); +} return 0; } rcu_read_unlock(&pinned_cacheattr_rcu_lock); @@ -702,7 +709,14 @@ int32_t hvm_set_mem_pinned_cacheattr( list_add_rcu(&range->list, &d->arch.hvm_domain.pinned_cacheattr_ranges); p2m_memory_type_changed(d); if ( type != PAT_TYPE_WRBACK ) +{//temp + static unsigned long cnt, thr; + if(++cnt > thr) { + thr |= cnt; + printk("pin[%06lx] d%d t=%u\n", cnt, d->domain_id, type); + } flush_all(FLUSH_CACHE); +} return 0; } @@ -793,7 +807,12 @@ void memory_type_changed(struct domain * { if ( iommu_enabled && d->vcpu && d->vcpu[0] ) { +static unsigned long cnt, thr;//temp p2m_memory_type_changed(d); +if(++cnt > thr) {//temp + thr |= cnt; + printk("chg[%06lx] d%d [%pS]\n", cnt, d->domain_id, __builtin_return_address(0)); +} flush_all(FLUSH_CACHE); } }