linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Anshuman Khandual <anshuman.khandual@arm.com>
To: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>,
	linux-mm@kvack.org, akpm@linux-foundation.org
Cc: linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH 16/16] debug_vm_pgtable/ppc64: Add a variant of pfn_pte/pmd
Date: Fri, 14 Aug 2020 13:59:55 +0530	[thread overview]
Message-ID: <44586359-f3bd-096c-ef5d-38d520eae072@arm.com> (raw)
In-Reply-To: <b42822c9-f8b6-55cf-7bc6-6def2faeb378@linux.ibm.com>



On 08/13/2020 12:07 PM, Aneesh Kumar K.V wrote:
> On 8/13/20 11:00 AM, Anshuman Khandual wrote:
>>
>> On 08/12/2020 12:03 PM, Aneesh Kumar K.V wrote:
>>> The tests do expect _PAGE_PTE bit set by different page table accessors.
>>> This is not true for the kernel. Within the kernel, _PAGE_PTE bits are
>>> usually set by set_pte_at(). To make the below tests work correctly add test
>>> specific pfn_pte/pmd helpers that set _PAGE_PTE bit.
>>>
>>> pte_t pte = pfn_pte(pfn, prot);
>>> WARN_ON(!pte_devmap(pte_mkdevmap(pte)));
>>> WARN_ON(!pte_savedwrite(pte_mk_savedwrite(pte_clear_savedwrite(pte))));
>>>
>>> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
>>> ---
>>>   mm/debug_vm_pgtable.c | 65 +++++++++++++++++++++++++++----------------
>>>   1 file changed, 41 insertions(+), 24 deletions(-)
>>>
>>> diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c
>>> index eea62d5e503b..153c925b5273 100644
>>> --- a/mm/debug_vm_pgtable.c
>>> +++ b/mm/debug_vm_pgtable.c
>>> @@ -31,6 +31,23 @@
>>>   #include <asm/pgalloc.h>
>>>   #include <asm/tlbflush.h>
>>>   +#ifdef CONFIG_PPC_BOOK3S_64
>>> +static inline pte_t debug_vm_pfn_pte(unsigned long pfn, pgprot_t pgprot)
>>> +{
>>> +    pte_t pte = pfn_pte(pfn, pgprot);
>>> +    return __pte(pte_val(pte) | _PAGE_PTE);
>>> +
>>> +}
>>> +static inline pmd_t debug_vm_pfn_pmd(unsigned long pfn, pgprot_t pgprot)
>>> +{
>>> +    pmd_t pmd = pfn_pmd(pfn, pgprot);
>>> +    return __pmd(pmd_val(pmd) | _PAGE_PTE);
>>> +}
>>> +#else
>>> +#define debug_vm_pfn_pte(pfn, pgprot) pfn_pte(pfn, pgprot)
>>> +#define debug_vm_pfn_pmd(pfn, pgprot) pfn_pmd(pfn, pgprot)
>>> +#endif
>>
>> Again, no platform specific constructs please. This defeats the whole purpose of
>> this test. If __PAGE_PTE is required for the helpers, then pfn_pmd/pte() could
>> be modified to accommodate that. We dont see similar issues on other platforms,
>> hence could you please explain why ppc64 is different here.
>>
> 
> It is not platform specific. set_pte_at is the one that set the _PAGE_PTE bit. We don't call that in the test.  The test seems to make the assumption that pfn_pte returns a proper pte which is not true.

'#ifdef CONFIG_PPC_BOOK3S_64' definitely makes it platform specific. Here is how
set_pte_at() updates an entry on other platforms without changing the pte value.
_PAGE_PTE bit update during set_pte_at() on ppc64 seems to be a deviation.

1. set_pte_at() on arm64 directly update the entry after TLB, cache maintenance
2. set_pte_at() on s390 directly updates the entry for !CONFIG_PGSTE
3. set_pte_at() on arc directly updates the entry via set_pte()
4. set_pte_at() on x86 directly update the entry via native_set_pte()

set_pte_at() does take a pte created with pfn_pte().

As an example do_anonymous_page() does the same.

......
entry = mk_pte(page, vma->vm_page_prot);	/* Call pfn_pte() */
entry = pte_sw_mkyoung(entry);
if (vma->vm_flags & VM_WRITE)
	entry = pte_mkwrite(pte_mkdirty(entry));
.....
set_pte_at(vma->vm_mm, vmf->address, vmf->pte, entry);
.....

  reply	other threads:[~2020-08-14  8:32 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-12  6:33 [PATCH 01/16] powerpc/mm: Add DEBUG_VM WARN for pmd_clear Aneesh Kumar K.V
2020-08-12  6:33 ` [PATCH 02/16] debug_vm_pgtable/ppc64: Avoid setting top bits in radom value Aneesh Kumar K.V
2020-08-12  6:40   ` Christophe Leroy
2020-08-12  6:43     ` Aneesh Kumar K.V
2020-08-12  8:12   ` Anshuman Khandual
2020-08-12  8:25     ` Aneesh Kumar K.V
2020-08-12  6:33 ` [PATCH 03/16] debug_vm_pgtable/set_pte: Don't use set_pte_at to update an existing pte entry Aneesh Kumar K.V
2020-08-12  9:12   ` Anshuman Khandual
2020-08-12  9:22     ` Aneesh Kumar K.V
2020-08-12  6:33 ` [PATCH 04/16] debug_vm_pgtables/hugevmap: Use the arch helper to identify huge vmap support Aneesh Kumar K.V
2020-08-12 10:30   ` Anshuman Khandual
2020-08-12  6:33 ` [PATCH 05/16] debug_vm_pgtable/savedwrite: Enable savedwrite test with CONFIG_NUMA_BALANCING Aneesh Kumar K.V
2020-08-12 11:24   ` Anshuman Khandual
2020-08-12  6:33 ` [PATCH 06/16] debug_vm_pgtable/THP: Mark the pte entry huge before using set_pmd_at Aneesh Kumar K.V
2020-08-12  6:33 ` [PATCH 07/16] debug_vm_pgtable/THP: Mark the pte entry huge before using set_pud_at Aneesh Kumar K.V
2020-08-12 11:49   ` Anshuman Khandual
2020-08-12  6:33 ` [PATCH 08/16] debug_vm_pgtable/set_pmd: Don't use set_pmd_at to update an existing pmd entry Aneesh Kumar K.V
2020-08-12 12:46   ` Anshuman Khandual
2020-08-12  6:33 ` [PATCH 09/16] debug_vm_pgtable/set_pud: Don't use set_pud_at to update an existing pud entry Aneesh Kumar K.V
2020-08-12 12:46   ` Anshuman Khandual
2020-08-12  6:33 ` [PATCH 10/16] debug_vm_pgtable/thp: Use page table depost/withdraw with THP Aneesh Kumar K.V
2020-08-13  5:25   ` Anshuman Khandual
2020-08-13  6:38     ` Aneesh Kumar K.V
2020-08-12  6:33 ` [PATCH 11/16] debug_vm_pgtable/locks: Move non page table modifying test together Aneesh Kumar K.V
2020-08-12  6:33 ` [PATCH 12/16] debug_vm_pgtable/locks: Take correct page table lock Aneesh Kumar K.V
2020-08-12  6:33 ` [PATCH 13/16] debug_vm_pgtable/pmd_clear: Don't use pmd/pud_clear on pte entries Aneesh Kumar K.V
2020-08-13  5:27   ` Anshuman Khandual
2020-08-13  8:45     ` Aneesh Kumar K.V
2020-08-12  6:33 ` [PATCH 14/16] debug_vm_pgtable/hugetlb: Disable hugetlb test on ppc64 Aneesh Kumar K.V
2020-08-12 13:03   ` Anshuman Khandual
2020-08-12 13:16     ` Aneesh Kumar K.V
2020-08-12 13:34       ` Anshuman Khandual
2020-08-12 13:52         ` Aneesh Kumar K.V
2020-08-14  8:43           ` Anshuman Khandual
2020-08-19  6:54             ` Aneesh Kumar K.V
2020-08-12  6:33 ` [PATCH 15/16] debug_vm_pgtable/savedwrite: Use savedwrite test with protnone ptes Aneesh Kumar K.V
2020-08-12 13:06   ` Anshuman Khandual
2020-08-12  6:33 ` [PATCH 16/16] debug_vm_pgtable/ppc64: Add a variant of pfn_pte/pmd Aneesh Kumar K.V
2020-08-13  5:30   ` Anshuman Khandual
2020-08-13  6:37     ` Aneesh Kumar K.V
2020-08-14  8:29       ` Anshuman Khandual [this message]
2020-08-12  7:46 ` [PATCH 01/16] powerpc/mm: Add DEBUG_VM WARN for pmd_clear Anshuman Khandual
2020-08-12  8:27   ` Aneesh Kumar K.V

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=44586359-f3bd-096c-ef5d-38d520eae072@arm.com \
    --to=anshuman.khandual@arm.com \
    --cc=akpm@linux-foundation.org \
    --cc=aneesh.kumar@linux.ibm.com \
    --cc=linux-mm@kvack.org \
    --cc=linuxppc-dev@lists.ozlabs.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).