# HG changeset patch # User dietmar.hahn@xxxxxxxxxxxxxxxxxxx # Node ID a82ee4db96cfd89453a525bb762929dcc7809c7b # Parent 31b326c5b624d4c07dfa7f27298ee1f6a95c22df Added IA64_INST_KEY_MISS_VECTOR and IA64_DATA_KEY_MISS_VECTOR to ia64_handle_reflection. The key is now used during handling XEN_IA64_OPTF_IDENT_MAP_REG7 in PV Signed-off-by: Dietmar Hahn diff -r 31b326c5b624 -r a82ee4db96cf xen/arch/ia64/xen/faults.c --- a/xen/arch/ia64/xen/faults.c Tue Jul 24 10:13:49 2007 +0200 +++ b/xen/arch/ia64/xen/faults.c Tue Jul 24 10:29:43 2007 +0200 @@ -572,6 +572,12 @@ ia64_handle_reflection(unsigned long ifa BUG_ON(!(psr & IA64_PSR_CPL)); switch (vector) { + case 6: + vector = IA64_INST_KEY_MISS_VECTOR; + break; + case 7: + vector = IA64_DATA_KEY_MISS_VECTOR; + break; case 8: vector = IA64_DIRTY_BIT_VECTOR; break; diff -r 31b326c5b624 -r a82ee4db96cf xen/arch/ia64/xen/vcpu.c --- a/xen/arch/ia64/xen/vcpu.c Tue Jul 24 10:13:49 2007 +0200 +++ b/xen/arch/ia64/xen/vcpu.c Tue Jul 24 10:29:43 2007 +0200 @@ -1623,7 +1623,7 @@ IA64FAULT vcpu_translate(VCPU * vcpu, u6 u64 * pteval, u64 * itir, u64 * iha) { unsigned long region = address >> 61; - unsigned long pta, rid, rr; + unsigned long pta, rid, rr, key = 0; union pte_flags pte; TR_ENTRY *trp; @@ -1716,6 +1716,7 @@ IA64FAULT vcpu_translate(VCPU * vcpu, u6 region == 7 && ia64_psr(regs)->cpl == CONFIG_CPL0_EMUL) { pte.val = address & _PAGE_PPN_MASK; pte.val = pte.val | optf->im_reg7.pgprot; + key = optf->im_reg7.key; goto out; } return is_data ? IA64_ALT_DATA_TLB_VECTOR : @@ -1741,7 +1742,7 @@ IA64FAULT vcpu_translate(VCPU * vcpu, u6 /* found mapping in guest VHPT! */ out: - *itir = rr & RR_PS_MASK; + *itir = (rr & RR_PS_MASK) | (key << IA64_ITIR_KEY); *pteval = pte.val; perfc_incr(vhpt_translate); return IA64_NO_FAULT;