From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: Alexander Graf <agraf@suse.de>
Cc: "qemu-ppc@nongnu.org list:PowerPC" <qemu-ppc@nongnu.org>,
Paul Mackerras <paulus@samba.org>,
QEMU Developers <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH -V7 3/3] target-ppc: Fix page table lookup with kvm enabled
Date: Thu, 19 Dec 2013 12:25:57 +0530 [thread overview]
Message-ID: <87eh599vnm.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <472FFF53-4DE5-4138-A5D0-6466B884F358@suse.de>
Alexander Graf <agraf@suse.de> writes:
> On 07.11.2013, at 15:31, Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> wrote:
>
>> From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
>>
>> With kvm enabled, we store the hash page table information in the hypervisor.
>> Use ioctl to read the htab contents. Without this we get the below error when
>> trying to read the guest address
>>
>> (gdb) x/10 do_fork
>> 0xc000000000098660 <do_fork>: Cannot access memory at address 0xc000000000098660
>> (gdb)
>>
>> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
>> ---
>> Changes from V6:
>> * drop htab_fd argument and use global variable kvmppc_kern_htab instead
>>
>> hw/ppc/spapr.c | 1 +
>> hw/ppc/spapr_hcall.c | 50 +++++++++++++++++++------------
>> target-ppc/kvm.c | 53 +++++++++++++++++++++++++++++++++
>> target-ppc/kvm_ppc.h | 19 ++++++++++++
>> target-ppc/mmu-hash64.c | 78 ++++++++++++++++++++++++++++++++++++++++---------
>> target-ppc/mmu-hash64.h | 23 ++++++++++-----
>> 6 files changed, 183 insertions(+), 41 deletions(-)
>>
>> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
>> index d4f3502..8bf886e 100644
>> --- a/hw/ppc/spapr.c
>> +++ b/hw/ppc/spapr.c
............
>> + hpte += index * HASH_PTE_SIZE_64;
>> +
>> ppc_hash64_store_hpte1(env, hpte, ptel);
>
> I'm not a big fan of fixing the read part, but leaving the write part
> broken. However I can see value in read only already, so I'm fine if
> the write part follows later.
When do we want store support per hpte entry w.r.t to hash page table maintained by the
hypervisor. I didn't find a use case while doing this, hence i left that
part out.
>
>> /* eieio(); FIXME: need some sort of barrier for smp? */
>> ppc_hash64_store_hpte0(env, hpte, pteh | HPTE64_V_HPTE_DIRTY);
>>
>> - args[0] = pte_index + i;
>> + args[0] = pte_index + index;
>> return H_SUCCESS;
>> }
>>
.....
>> #ifndef CONFIG_KVM
>> diff --git a/target-ppc/mmu-hash64.c b/target-ppc/mmu-hash64.c
>> index 67fc1b5..f59d199 100644
>> --- a/target-ppc/mmu-hash64.c
>> +++ b/target-ppc/mmu-hash64.c
>> @@ -41,6 +41,11 @@
>> #endif
>>
>> /*
>> + * Used to indicate whether we have allocated htab in the
>> + * host kernel
>> + */
>> +bool kvmppc_kern_htab;
>> +/*
>> * SLB handling
>> */
>>
>> @@ -302,29 +307,76 @@ static int ppc_hash64_amr_prot(CPUPPCState *env, ppc_hash_pte64_t pte)
>> return prot;
>> }
>>
>> -static hwaddr ppc_hash64_pteg_search(CPUPPCState *env, hwaddr pteg_off,
>> +void *ppc_hash64_start_access(PowerPCCPU *cpu, unsigned long pte_index)
>> +{
>> + void *token = NULL;
>> + hwaddr pte_offset;
>> +
>> + pte_offset = pte_index * HASH_PTE_SIZE_64;
>> + if (kvmppc_kern_htab) {
>> + /*
>> + * HTAB is controlled by KVM. Fetch the PTEG into a new buffer.
>> + */
>> + token = kvmppc_hash64_read_pteg(cpu, pte_index);
>> + if (token) {
>> + return token;
>> + }
>> + /*
>> + * pteg read failed, even though we have allocated htab via
>> + * kvmppc_reset_htab.
>> + */
>> + return NULL;
>> + }
>> + /*
>> + * HTAB is controlled by QEMU. Just point to the internally
>> + * accessible PTEG.
>> + */
>> + if (cpu->env.external_htab) {
>> + token = cpu->env.external_htab + pte_offset;
>> + } else if (cpu->env.htab_base) {
>> + token = (uint8_t *) cpu->env.htab_base + pte_offset;
>
> This breaks if you run a 64-bit guest on a 32-bit host trying to
> access memory beyond 4GB. In that case htab_base is hwaddr (64bit)
> while uint8_t is only 32bit wide.
Wow!! didn't know that is possible.
>
> Just pass a 64bit token around. That makes it safe and easy.
>
I converted that to uint64_t. How about Patch 1 and 2. Are they ok to go
upstream ?
-aneesh
next prev parent reply other threads:[~2013-12-19 6:56 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-07 14:31 [Qemu-devel] [PATCH -V7 1/3] target-ppc: Update external_htab even when HTAB is managed by kernel Aneesh Kumar K.V
2013-11-07 14:31 ` [Qemu-devel] [PATCH -V7 2/3] target-ppc: Fix htab_mask calculation Aneesh Kumar K.V
2013-11-07 14:31 ` [Qemu-devel] [PATCH -V7 3/3] target-ppc: Fix page table lookup with kvm enabled Aneesh Kumar K.V
2013-12-18 9:49 ` Alexander Graf
2013-12-19 6:55 ` Aneesh Kumar K.V [this message]
2013-12-19 8:41 ` Paul Mackerras
2013-12-19 15:27 ` Alexander Graf
2013-12-20 5:24 ` Aneesh Kumar K.V
2013-12-20 10:53 ` Alexander Graf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87eh599vnm.fsf@linux.vnet.ibm.com \
--to=aneesh.kumar@linux.vnet.ibm.com \
--cc=agraf@suse.de \
--cc=paulus@samba.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.