From patchwork Tue Sep 4 07:36:27 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Kardashevskiy X-Patchwork-Id: 181508 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 6B7DF2C03F2 for ; Tue, 4 Sep 2012 17:36:36 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754023Ab2IDHge (ORCPT ); Tue, 4 Sep 2012 03:36:34 -0400 Received: from mail-iy0-f174.google.com ([209.85.210.174]:58569 "EHLO mail-iy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754018Ab2IDHgd (ORCPT ); Tue, 4 Sep 2012 03:36:33 -0400 Received: by iahk25 with SMTP id k25so4963606iah.19 for ; Tue, 04 Sep 2012 00:36:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :x-gm-message-state; bh=3qJpCWqqTjVbeElZwCwApUpf2YYWuXeblYSxLwBYhzE=; b=m8kpmfLorVt48FalL9+RG+9qEBrYKTjT1KuOsviKTTZZUuIBMNpVeAUISAX9IEmTC6 1+YWUKzHsh0/8maEwTtVE21lOM6is2xUoq/tWsrH/fJYRmrMJfdLjAoZs00ZUiSOhb+z 1PQIIcGZNCznnmMkQQ7u0dIBbLhveJ+nP/UnpBBn0nSIScgWvndnqS3bA42BiiB4SIw8 Or4n6zyjBythgUHnBIJnl0h8u8WB4cZjGsLQIRVvpvPsbqi0VJE0TQKLQp6/u4wsNnNj oNAGRHepXbansyKZ/1wgnx8vMnIVZpyLa75EtgknSLC3N4D4DYFGIzTzUKSC67INTnJ4 EhoQ== Received: by 10.50.209.99 with SMTP id ml3mr13178066igc.31.1346744193349; Tue, 04 Sep 2012 00:36:33 -0700 (PDT) Received: from ka1.ozlabs.ibm.com (ibmaus65.lnk.telstra.net. [165.228.126.9]) by mx.google.com with ESMTPS id p5sm11564505igm.13.2012.09.04.00.36.30 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 04 Sep 2012 00:36:33 -0700 (PDT) From: Alexey Kardashevskiy To: Benjamin Herrenschmidt Cc: Alexey Kardashevskiy , Paul Mackerras , kvm-ppc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, David Gibson Subject: [PATCH] powerpc-kvm: fixing page alignment for TCE Date: Tue, 4 Sep 2012 17:36:27 +1000 Message-Id: <1346744187-31226-1-git-send-email-aik@ozlabs.ru> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1346744035-31154-1-git-send-email-aik@ozlabs.ru> References: <1346744035-31154-1-git-send-email-aik@ozlabs.ru> X-Gm-Message-State: ALoCoQkuQhnKfFW2D+t6sfLL28nk0K0J+lxo7ttWctgkttTVE/qpq388ETRp3Q73pv28wMhkT0Ha Sender: kvm-ppc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm-ppc@vger.kernel.org From: Paul Mackerras TODO: ask Paul to make a proper message. This is the fix for a host kernel compiled with a page size other than 4K (TCE page size). In the case of a 64K page size, the host used to lose address bits in hpte_rpn(). The patch fixes it. Signed-off-by: Alexey Kardashevskiy --- arch/powerpc/kvm/book3s_64_mmu_hv.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/arch/powerpc/kvm/book3s_64_mmu_hv.c b/arch/powerpc/kvm/book3s_64_mmu_hv.c index 80a5775..a41f11b 100644 --- a/arch/powerpc/kvm/book3s_64_mmu_hv.c +++ b/arch/powerpc/kvm/book3s_64_mmu_hv.c @@ -503,7 +503,7 @@ int kvmppc_book3s_hv_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu, struct kvm *kvm = vcpu->kvm; unsigned long *hptep, hpte[3], r; unsigned long mmu_seq, psize, pte_size; - unsigned long gfn, hva, pfn; + unsigned long gpa, gfn, hva, pfn; struct kvm_memory_slot *memslot; unsigned long *rmap; struct revmap_entry *rev; @@ -541,15 +541,14 @@ int kvmppc_book3s_hv_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu, /* Translate the logical address and get the page */ psize = hpte_page_size(hpte[0], r); - gfn = hpte_rpn(r, psize); + gpa = (r & HPTE_R_RPN & ~(psize - 1)) | (ea & (psize - 1)); + gfn = gpa >> PAGE_SHIFT; memslot = gfn_to_memslot(kvm, gfn); /* No memslot means it's an emulated MMIO region */ - if (!memslot || (memslot->flags & KVM_MEMSLOT_INVALID)) { - unsigned long gpa = (gfn << PAGE_SHIFT) | (ea & (psize - 1)); + if (!memslot || (memslot->flags & KVM_MEMSLOT_INVALID)) return kvmppc_hv_emulate_mmio(run, vcpu, gpa, ea, dsisr & DSISR_ISSTORE); - } if (!kvm->arch.using_mmu_notifiers) return -EFAULT; /* should never get here */