From: Alexander Graf <agraf@suse.de>
To: Stewart Smith <stewart@linux.vnet.ibm.com>,
linuxppc-dev@lists.ozlabs.org, paulus@samba.org,
kvm-ppc@vger.kernel.org
Subject: Re: [PATCH v3] Use the POWER8 Micro Partition Prefetch Engine in KVM HV on POWER8
Date: Mon, 28 Jul 2014 12:30:43 +0000 [thread overview]
Message-ID: <53D64273.3060701@suse.de> (raw)
In-Reply-To: <m3k37bmhnb.fsf@oc8180480414.ibm.com>
On 18.07.14 06:10, Stewart Smith wrote:
> Alexander Graf <agraf@suse.de> writes:
>>> diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h
>>> index 1eaea2d..5769497 100644
>>> --- a/arch/powerpc/include/asm/kvm_host.h
>>> +++ b/arch/powerpc/include/asm/kvm_host.h
>>> @@ -305,6 +305,8 @@ struct kvmppc_vcore {
>>> u32 arch_compat;
>>> ulong pcr;
>>> ulong dpdes; /* doorbell state (POWER8) */
>>> + unsigned long mpp_buffer; /* Micro Partition Prefetch buffer */
>> Just make this a void*?
> get_free_pages returns an unsigned long and free_pages accepts an
> unsigned long, so I was just avoiding the cast. Is the style in this
> case to do void* rather than unsigned long and cast it everywhere?
>
> In v4 of patch I've gone to void* anyway.
It's probably just a matter of personal taste, but I personally prefer
to keep pointers to memory locations in pointers.
>
>>> @@ -1516,6 +1540,37 @@ static int on_primary_thread(void)
>>> return 1;
>>> }
>>>
>>> +static void ppc_start_saving_l2_cache(struct kvmppc_vcore *vc)
>> Please use the "kvmppc" name space.
> ack, done.
>
>>> + phys_addr_t phy_addr, tmp;
>>> +
>>> + phy_addr = (phys_addr_t)virt_to_phys((void *)vc->mpp_buffer);
>>> +
>>> + tmp = phy_addr & PPC_MPPE_ADDRESS_MASK;
>> I would prefer if you give the variable a more telling name.
> ack.
>
>>> +
>>> + mtspr(SPRN_MPPR, tmp | PPC_MPPR_FETCH_ABORT);
>>> +
>>> + asm volatile(PPC_LOGMPP(R1) : : "r" (tmp | PPC_LOGMPP_LOG_L2));
>> Can you move this asm() into a static inline function in generic code
>> somewhere?
> okay. It seems the best place may be powerpc/include/asm/cache.h -
> simply because it deals with cache things. I'm open to better
> suggestions :)
>
>>> +
>>> + vc->mpp_buffer_is_valid = true;
>> Where does this ever get unset? And what point does this variable make?
>> Can't you just check on if (vc->mpp_buffer)?
> The problem with having moved the memory allocation for mpp_buffer to
> vcore setup is that we'll have vc->mpp_buffer != NULL but have some
> random contents in it, so when we first start executing the vcore, we
> shouldn't initiate prefetching (hence mpp_buffer_is_valid).
>
> If we point the prefetch engine to random memory contents, we get the
> most amazing array of incomprehensible illegal accesses :)
I see :). That makes a lot of sense indeed. Maybe rename the variable to
mpp_content_is_valid to indicate that we are not looking at a valid
buffer, but valid content?
Alex
WARNING: multiple messages have this Message-ID (diff)
From: Alexander Graf <agraf@suse.de>
To: Stewart Smith <stewart@linux.vnet.ibm.com>,
linuxppc-dev@lists.ozlabs.org, paulus@samba.org,
kvm-ppc@vger.kernel.org
Subject: Re: [PATCH v3] Use the POWER8 Micro Partition Prefetch Engine in KVM HV on POWER8
Date: Mon, 28 Jul 2014 14:30:43 +0200 [thread overview]
Message-ID: <53D64273.3060701@suse.de> (raw)
In-Reply-To: <m3k37bmhnb.fsf@oc8180480414.ibm.com>
On 18.07.14 06:10, Stewart Smith wrote:
> Alexander Graf <agraf@suse.de> writes:
>>> diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h
>>> index 1eaea2d..5769497 100644
>>> --- a/arch/powerpc/include/asm/kvm_host.h
>>> +++ b/arch/powerpc/include/asm/kvm_host.h
>>> @@ -305,6 +305,8 @@ struct kvmppc_vcore {
>>> u32 arch_compat;
>>> ulong pcr;
>>> ulong dpdes; /* doorbell state (POWER8) */
>>> + unsigned long mpp_buffer; /* Micro Partition Prefetch buffer */
>> Just make this a void*?
> get_free_pages returns an unsigned long and free_pages accepts an
> unsigned long, so I was just avoiding the cast. Is the style in this
> case to do void* rather than unsigned long and cast it everywhere?
>
> In v4 of patch I've gone to void* anyway.
It's probably just a matter of personal taste, but I personally prefer
to keep pointers to memory locations in pointers.
>
>>> @@ -1516,6 +1540,37 @@ static int on_primary_thread(void)
>>> return 1;
>>> }
>>>
>>> +static void ppc_start_saving_l2_cache(struct kvmppc_vcore *vc)
>> Please use the "kvmppc" name space.
> ack, done.
>
>>> + phys_addr_t phy_addr, tmp;
>>> +
>>> + phy_addr = (phys_addr_t)virt_to_phys((void *)vc->mpp_buffer);
>>> +
>>> + tmp = phy_addr & PPC_MPPE_ADDRESS_MASK;
>> I would prefer if you give the variable a more telling name.
> ack.
>
>>> +
>>> + mtspr(SPRN_MPPR, tmp | PPC_MPPR_FETCH_ABORT);
>>> +
>>> + asm volatile(PPC_LOGMPP(R1) : : "r" (tmp | PPC_LOGMPP_LOG_L2));
>> Can you move this asm() into a static inline function in generic code
>> somewhere?
> okay. It seems the best place may be powerpc/include/asm/cache.h -
> simply because it deals with cache things. I'm open to better
> suggestions :)
>
>>> +
>>> + vc->mpp_buffer_is_valid = true;
>> Where does this ever get unset? And what point does this variable make?
>> Can't you just check on if (vc->mpp_buffer)?
> The problem with having moved the memory allocation for mpp_buffer to
> vcore setup is that we'll have vc->mpp_buffer != NULL but have some
> random contents in it, so when we first start executing the vcore, we
> shouldn't initiate prefetching (hence mpp_buffer_is_valid).
>
> If we point the prefetch engine to random memory contents, we get the
> most amazing array of incomprehensible illegal accesses :)
I see :). That makes a lot of sense indeed. Maybe rename the variable to
mpp_content_is_valid to indicate that we are not looking at a valid
buffer, but valid content?
Alex
next prev parent reply other threads:[~2014-07-28 12:30 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-04 1:23 [PATCH] Use the POWER8 Micro Partition Prefetch Engine in KVM HV on POWER8 Stewart Smith
2014-07-08 5:06 ` [PATCH v2] " Stewart Smith
2014-07-08 5:06 ` Stewart Smith
2014-07-08 10:41 ` Alexander Graf
2014-07-08 10:41 ` Alexander Graf
2014-07-08 22:59 ` Stewart Smith
2014-07-08 22:59 ` Stewart Smith
2014-07-10 11:05 ` Alexander Graf
2014-07-10 11:05 ` Alexander Graf
2014-07-10 13:07 ` Mel Gorman
2014-07-10 13:07 ` Mel Gorman
2014-07-10 13:17 ` Alexander Graf
2014-07-10 13:17 ` Alexander Graf
2014-07-10 13:30 ` Mel Gorman
2014-07-10 13:30 ` Mel Gorman
2014-07-10 13:30 ` Alexander Graf
2014-07-10 13:30 ` Alexander Graf
2014-07-17 3:19 ` [PATCH v3] " Stewart Smith
2014-07-17 3:19 ` Stewart Smith
2014-07-17 7:55 ` Alexander Graf
2014-07-17 7:55 ` Alexander Graf
2014-07-18 4:10 ` Stewart Smith
2014-07-18 4:10 ` Stewart Smith
2014-07-28 12:30 ` Alexander Graf [this message]
2014-07-28 12:30 ` Alexander Graf
2014-07-17 23:52 ` Paul Mackerras
2014-07-17 23:52 ` Paul Mackerras
2014-07-18 4:10 ` Stewart Smith
2014-07-18 4:10 ` Stewart Smith
2014-07-18 4:18 ` [PATCH v4 0/2] Use the POWER8 Micro Partition Prefetch Engine in KVM HV Stewart Smith
2014-07-18 4:18 ` Stewart Smith
2014-07-18 4:18 ` [PATCH v4 1/2] Split out struct kvmppc_vcore creation to separate function Stewart Smith
2014-07-18 4:18 ` Stewart Smith
2014-07-18 7:47 ` Paul Mackerras
2014-07-18 7:47 ` Paul Mackerras
2014-07-18 4:18 ` [PATCH v4 2/2] Use the POWER8 Micro Partition Prefetch Engine in KVM HV on POWER8 Stewart Smith
2014-07-18 4:18 ` Stewart Smith
2014-07-18 7:48 ` Paul Mackerras
2014-07-18 7:48 ` Paul Mackerras
2014-07-28 12:34 ` [PATCH v4 0/2] Use the POWER8 Micro Partition Prefetch Engine in KVM HV Alexander Graf
2014-07-28 12:34 ` 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=53D64273.3060701@suse.de \
--to=agraf@suse.de \
--cc=kvm-ppc@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=paulus@samba.org \
--cc=stewart@linux.vnet.ibm.com \
/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.