# HG changeset patch # User dietmar.hahn@xxxxxxxxxxxxxxxxxxx # Node ID 075ab344399a66a172dd06a94428181866dbdbce # Parent 116b0b1025957bcb9e073f6e5c861f48ff2bcfb7 Added XEN_IA64_NPKRS - number of pkr's for PV, 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. Signed-off-by: Dietmar Hahn diff -r 116b0b102595 -r 075ab344399a xen/arch/ia64/xen/faults.c --- a/xen/arch/ia64/xen/faults.c Mon Jul 16 07:48:00 2007 +0200 +++ b/xen/arch/ia64/xen/faults.c Tue Jul 17 14:31:08 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 116b0b102595 -r 075ab344399a xen/arch/ia64/xen/fw_emul.c --- a/xen/arch/ia64/xen/fw_emul.c Mon Jul 16 07:48:00 2007 +0200 +++ b/xen/arch/ia64/xen/fw_emul.c Tue Jul 17 14:31:08 2007 +0200 @@ -669,7 +669,7 @@ xen_pal_emulator(unsigned long index, u6 { .vw = 1, .phys_add_size = 44, .key_size = 16, - .max_pkr = 15, + .max_pkr = XEN_IA64_NPKRS, .hash_tag_id = 0x30, .max_dtr_entry = NDTRS - 1, .max_itr_entry = NITRS - 1, diff -r 116b0b102595 -r 075ab344399a xen/arch/ia64/xen/vcpu.c --- a/xen/arch/ia64/xen/vcpu.c Mon Jul 16 07:48:00 2007 +0200 +++ b/xen/arch/ia64/xen/vcpu.c Tue Jul 17 14:31:08 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; diff -r 116b0b102595 -r 075ab344399a xen/include/asm-ia64/xenkregs.h --- a/xen/include/asm-ia64/xenkregs.h Mon Jul 16 07:48:00 2007 +0200 +++ b/xen/include/asm-ia64/xenkregs.h Tue Jul 17 14:31:08 2007 +0200 @@ -48,6 +48,9 @@ (((_key) << IA64_ITIR_KEY))) /* Define Protection Key Register (PKR) */ + +#define XEN_IA64_NPKRS 15 /* Number of pkr's in PV */ + #define IA64_PKR_V 0 #define IA64_PKR_WD 1 #define IA64_PKR_RD 2