Merge remote-tracking branch 'master' into queue
Merge reason: development work has dependency on kvm patches merged upstream. Conflicts: arch/powerpc/include/asm/Kbuild arch/powerpc/include/asm/kvm_para.h Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
@@ -141,7 +141,7 @@ extern char etext[];
|
||||
int kvmppc_mmu_map_page(struct kvm_vcpu *vcpu, struct kvmppc_pte *orig_pte)
|
||||
{
|
||||
pfn_t hpaddr;
|
||||
u64 va;
|
||||
u64 vpn;
|
||||
u64 vsid;
|
||||
struct kvmppc_sid_map *map;
|
||||
volatile u32 *pteg;
|
||||
@@ -173,8 +173,8 @@ int kvmppc_mmu_map_page(struct kvm_vcpu *vcpu, struct kvmppc_pte *orig_pte)
|
||||
BUG_ON(!map);
|
||||
|
||||
vsid = map->host_vsid;
|
||||
va = (vsid << SID_SHIFT) | (eaddr & ~ESID_MASK);
|
||||
|
||||
vpn = (vsid << (SID_SHIFT - VPN_SHIFT)) |
|
||||
((eaddr & ~ESID_MASK) >> VPN_SHIFT);
|
||||
next_pteg:
|
||||
if (rr == 16) {
|
||||
primary = !primary;
|
||||
@@ -244,11 +244,11 @@ next_pteg:
|
||||
dprintk_mmu("KVM: %c%c Map 0x%llx: [%lx] 0x%llx (0x%llx) -> %lx\n",
|
||||
orig_pte->may_write ? 'w' : '-',
|
||||
orig_pte->may_execute ? 'x' : '-',
|
||||
orig_pte->eaddr, (ulong)pteg, va,
|
||||
orig_pte->eaddr, (ulong)pteg, vpn,
|
||||
orig_pte->vpage, hpaddr);
|
||||
|
||||
pte->slot = (ulong)&pteg[rr];
|
||||
pte->host_va = va;
|
||||
pte->host_vpn = vpn;
|
||||
pte->pte = *orig_pte;
|
||||
pte->pfn = hpaddr >> PAGE_SHIFT;
|
||||
|
||||
|
@@ -33,7 +33,7 @@
|
||||
|
||||
void kvmppc_mmu_invalidate_pte(struct kvm_vcpu *vcpu, struct hpte_cache *pte)
|
||||
{
|
||||
ppc_md.hpte_invalidate(pte->slot, pte->host_va,
|
||||
ppc_md.hpte_invalidate(pte->slot, pte->host_vpn,
|
||||
MMU_PAGE_4K, MMU_SEGSIZE_256M,
|
||||
false);
|
||||
}
|
||||
@@ -80,8 +80,9 @@ static struct kvmppc_sid_map *find_sid_vsid(struct kvm_vcpu *vcpu, u64 gvsid)
|
||||
|
||||
int kvmppc_mmu_map_page(struct kvm_vcpu *vcpu, struct kvmppc_pte *orig_pte)
|
||||
{
|
||||
unsigned long vpn;
|
||||
pfn_t hpaddr;
|
||||
ulong hash, hpteg, va;
|
||||
ulong hash, hpteg;
|
||||
u64 vsid;
|
||||
int ret;
|
||||
int rflags = 0x192;
|
||||
@@ -117,7 +118,7 @@ int kvmppc_mmu_map_page(struct kvm_vcpu *vcpu, struct kvmppc_pte *orig_pte)
|
||||
}
|
||||
|
||||
vsid = map->host_vsid;
|
||||
va = hpt_va(orig_pte->eaddr, vsid, MMU_SEGSIZE_256M);
|
||||
vpn = hpt_vpn(orig_pte->eaddr, vsid, MMU_SEGSIZE_256M);
|
||||
|
||||
if (!orig_pte->may_write)
|
||||
rflags |= HPTE_R_PP;
|
||||
@@ -129,7 +130,7 @@ int kvmppc_mmu_map_page(struct kvm_vcpu *vcpu, struct kvmppc_pte *orig_pte)
|
||||
else
|
||||
kvmppc_mmu_flush_icache(hpaddr >> PAGE_SHIFT);
|
||||
|
||||
hash = hpt_hash(va, PTE_SIZE, MMU_SEGSIZE_256M);
|
||||
hash = hpt_hash(vpn, PTE_SIZE, MMU_SEGSIZE_256M);
|
||||
|
||||
map_again:
|
||||
hpteg = ((hash & htab_hash_mask) * HPTES_PER_GROUP);
|
||||
@@ -141,7 +142,8 @@ map_again:
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = ppc_md.hpte_insert(hpteg, va, hpaddr, rflags, vflags, MMU_PAGE_4K, MMU_SEGSIZE_256M);
|
||||
ret = ppc_md.hpte_insert(hpteg, vpn, hpaddr, rflags, vflags,
|
||||
MMU_PAGE_4K, MMU_SEGSIZE_256M);
|
||||
|
||||
if (ret < 0) {
|
||||
/* If we couldn't map a primary PTE, try a secondary */
|
||||
@@ -152,7 +154,8 @@ map_again:
|
||||
} else {
|
||||
struct hpte_cache *pte = kvmppc_mmu_hpte_cache_next(vcpu);
|
||||
|
||||
trace_kvm_book3s_64_mmu_map(rflags, hpteg, va, hpaddr, orig_pte);
|
||||
trace_kvm_book3s_64_mmu_map(rflags, hpteg,
|
||||
vpn, hpaddr, orig_pte);
|
||||
|
||||
/* The ppc_md code may give us a secondary entry even though we
|
||||
asked for a primary. Fix up. */
|
||||
@@ -162,7 +165,7 @@ map_again:
|
||||
}
|
||||
|
||||
pte->slot = hpteg + (ret & 7);
|
||||
pte->host_va = va;
|
||||
pte->host_vpn = vpn;
|
||||
pte->pte = *orig_pte;
|
||||
pte->pfn = hpaddr >> PAGE_SHIFT;
|
||||
|
||||
|
@@ -1348,7 +1348,7 @@ static const struct vm_operations_struct kvm_rma_vm_ops = {
|
||||
|
||||
static int kvm_rma_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
{
|
||||
vma->vm_flags |= VM_RESERVED;
|
||||
vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP;
|
||||
vma->vm_ops = &kvm_rma_vm_ops;
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1065,7 +1065,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)
|
||||
mtspr SPRN_DABRX,r6
|
||||
|
||||
/* Restore SPRG3 */
|
||||
ld r3,HSTATE_SPRG3(r13)
|
||||
ld r3,PACA_SPRG3(r13)
|
||||
mtspr SPRN_SPRG3,r3
|
||||
|
||||
/*
|
||||
|
@@ -299,7 +299,7 @@ TRACE_EVENT(kvm_book3s_mmu_map,
|
||||
TP_ARGS(pte),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( u64, host_va )
|
||||
__field( u64, host_vpn )
|
||||
__field( u64, pfn )
|
||||
__field( ulong, eaddr )
|
||||
__field( u64, vpage )
|
||||
@@ -308,7 +308,7 @@ TRACE_EVENT(kvm_book3s_mmu_map,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->host_va = pte->host_va;
|
||||
__entry->host_vpn = pte->host_vpn;
|
||||
__entry->pfn = pte->pfn;
|
||||
__entry->eaddr = pte->pte.eaddr;
|
||||
__entry->vpage = pte->pte.vpage;
|
||||
@@ -318,8 +318,8 @@ TRACE_EVENT(kvm_book3s_mmu_map,
|
||||
(pte->pte.may_execute ? 0x1 : 0);
|
||||
),
|
||||
|
||||
TP_printk("Map: hva=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]",
|
||||
__entry->host_va, __entry->pfn, __entry->eaddr,
|
||||
TP_printk("Map: hvpn=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]",
|
||||
__entry->host_vpn, __entry->pfn, __entry->eaddr,
|
||||
__entry->vpage, __entry->raddr, __entry->flags)
|
||||
);
|
||||
|
||||
@@ -328,7 +328,7 @@ TRACE_EVENT(kvm_book3s_mmu_invalidate,
|
||||
TP_ARGS(pte),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( u64, host_va )
|
||||
__field( u64, host_vpn )
|
||||
__field( u64, pfn )
|
||||
__field( ulong, eaddr )
|
||||
__field( u64, vpage )
|
||||
@@ -337,7 +337,7 @@ TRACE_EVENT(kvm_book3s_mmu_invalidate,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->host_va = pte->host_va;
|
||||
__entry->host_vpn = pte->host_vpn;
|
||||
__entry->pfn = pte->pfn;
|
||||
__entry->eaddr = pte->pte.eaddr;
|
||||
__entry->vpage = pte->pte.vpage;
|
||||
@@ -348,7 +348,7 @@ TRACE_EVENT(kvm_book3s_mmu_invalidate,
|
||||
),
|
||||
|
||||
TP_printk("Flush: hva=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]",
|
||||
__entry->host_va, __entry->pfn, __entry->eaddr,
|
||||
__entry->host_vpn, __entry->pfn, __entry->eaddr,
|
||||
__entry->vpage, __entry->raddr, __entry->flags)
|
||||
);
|
||||
|
||||
|
Reference in New Issue
Block a user