From: Scott Wood <scottwood@freescale.com>
To: Bharat Bhushan <r65777@freescale.com>
Cc: <kvm-ppc@vger.kernel.org>, <kvm@vger.kernel.org>, <agraf@suse.de>,
Bharat Bhushan <Bharat.Bhushan@freescale.com>
Subject: Re: [PATCH 2/2 v2] kvm: powerpc: set cache coherency only for kernel managed pages
Date: Thu, 18 Jul 2013 12:17:42 -0500 [thread overview]
Message-ID: <1374167862.5357.6@snotra> (raw)
In-Reply-To: <1374153543-10734-2-git-send-email-Bharat.Bhushan@freescale.com> (from r65777@freescale.com on Thu Jul 18 08:19:03 2013)
On 07/18/2013 08:19:03 AM, Bharat Bhushan wrote:
> If there is a struct page for the requested mapping then it's
> normal RAM and the mapping is set to "M" bit (coherent, cacheable)
> otherwise this is treated as I/O and we set "I + G" (cache
> inhibited, guarded)
>
> This helps setting proper TLB mapping for direct assigned device
>
> Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
> ---
> v2: some cleanup and added comment
> -
> arch/powerpc/kvm/e500_mmu_host.c | 23 ++++++++++++++++++-----
> 1 files changed, 18 insertions(+), 5 deletions(-)
>
> diff --git a/arch/powerpc/kvm/e500_mmu_host.c
> b/arch/powerpc/kvm/e500_mmu_host.c
> index 1c6a9d7..02eb973 100644
> --- a/arch/powerpc/kvm/e500_mmu_host.c
> +++ b/arch/powerpc/kvm/e500_mmu_host.c
> @@ -64,13 +64,26 @@ static inline u32 e500_shadow_mas3_attrib(u32
> mas3, int usermode)
> return mas3;
> }
>
> -static inline u32 e500_shadow_mas2_attrib(u32 mas2, int usermode)
> +static inline u32 e500_shadow_mas2_attrib(u32 mas2, pfn_t pfn)
> {
> + u32 mas2_attr;
> +
> + mas2_attr = mas2 & MAS2_ATTRIB_MASK;
> +
> + /*
> + * RAM is always mappable on e500 systems, so this is identical
> + * to kvm_is_mmio_pfn(), just without its overhead.
> + */
> + if (!pfn_valid(pfn)) {
Please use page_is_ram(), which is what gets used when setting the WIMG
for the host userspace mapping. We want to make sure the two are
consistent.
> + /* Pages not managed by Kernel are treated as I/O, set
> I + G */
> + mas2_attr |= MAS2_I | MAS2_G;
> #ifdef CONFIG_SMP
> - return (mas2 & MAS2_ATTRIB_MASK) | MAS2_M;
> -#else
> - return mas2 & MAS2_ATTRIB_MASK;
> + } else {
> + /* Kernel managed pages are actually RAM so set "M" */
> + mas2_attr |= MAS2_M;
> #endif
Likewise, we want to make sure this matches the host entry.
Unfortunately, this is a bit of a mess already. 64-bit booke appears
to always set MAS2_M for TLB0 mappings. The initial KERNELBASE mapping
on boot uses M_IF_SMP, and the settlbcam() that (IIRC) replaces it uses
_PAGE_COHERENT. 32-bit always uses _PAGE_COHERENT, except that initial
KERNELBASE mapping. _PAGE_COHERENT appears to be set based on
CONFIG_SMP || CONFIG_PPC_STD_MMU (the latter config clears
_PAGE_COHERENT in the non-CPU_FTR_NEED_COHERENT case).
As for what we actually want to happen, there are cases when we want M
to be set for non-SMP. One such case is AMP, where CPUs may be sharing
memory even if the Linux instance only runs on one CPU (this is not
hypothetical, BTW). It's also possible that we encounter a hardware
bug that requires MAS2_M, similar to what some of our non-booke chips
require.
-Scott
next prev parent reply other threads:[~2013-07-18 17:17 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-18 13:19 [PATCH 1/2 v2] kvm: powerpc: Do not ignore "E" attribute in mas2 Bharat Bhushan
2013-07-18 13:19 ` [PATCH 2/2 v2] kvm: powerpc: set cache coherency only for kernel managed pages Bharat Bhushan
2013-07-18 14:53 ` Alexander Graf
2013-07-18 15:15 ` Bhushan Bharat-R65777
2013-07-18 15:19 ` Alexander Graf
2013-07-18 17:17 ` Scott Wood [this message]
2013-07-18 17:32 ` Alexander Graf
2013-07-18 17:39 ` Scott Wood
2013-07-22 4:39 ` Bhushan Bharat-R65777
2013-07-22 18:47 ` Scott Wood
2013-07-23 3:39 ` Bhushan Bharat-R65777
2013-07-23 16:44 ` Scott Wood
2013-07-23 16:50 ` Bhushan Bharat-R65777
2013-07-23 18:20 ` Scott Wood
2013-07-24 1:06 ` Bhushan Bharat-R65777
2013-07-23 11:13 ` Bhushan Bharat-R65777
2013-07-23 18:26 ` Scott Wood
2013-07-18 14:48 ` [PATCH 1/2 v2] kvm: powerpc: Do not ignore "E" attribute in mas2 Alexander Graf
2013-07-18 15:12 ` Bhushan Bharat-R65777
2013-07-18 15:19 ` Alexander Graf
2013-07-18 15:20 ` Bhushan Bharat-R65777
2013-07-18 16:15 ` Scott Wood
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=1374167862.5357.6@snotra \
--to=scottwood@freescale.com \
--cc=Bharat.Bhushan@freescale.com \
--cc=agraf@suse.de \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=r65777@freescale.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox