[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <fbb00ac0-9104-8d25-f225-7b3d1b17a01f@huawei.com>
Date: Sat, 28 Mar 2020 12:30:50 +0800
From: Zhenyu Ye <yezhenyu2@...wei.com>
To: Peter Zijlstra <peterz@...radead.org>, <npiggin@...il.com>,
<will.deacon@....com>, <mingo@...nel.org>,
<torvalds@...ux-foundation.org>, <schwidefsky@...ibm.com>,
<akpm@...ux-foundation.org>, <luto@...nel.org>, <bp@...en8.de>,
Marc Zyngier <maz@...nel.org>
CC: <linux-arm-kernel@...ts.infradead.org>,
<linux-kernel@...r.kernel.org>, <linux-arch@...r.kernel.org>,
<arm@...nel.org>, <xiexiangyou@...wei.com>, <yezhenyu2@...wei.com>
Subject: [RFC][Qusetion] the value of cleared_(ptes|pmds|puds|p4ds) in struct
mmu_gather
Hi all,
commit a6d60245 "Track which levels of the page tables have been cleared"
added cleared_(ptes|pmds|puds|p4ds) in struct mmu_gather, and the values
of them are set in some places. For example:
In include/asm-generic/tlb.h, pte_free_tlb() set the tlb->cleared_pmds:
---8<---
#ifndef pte_free_tlb
#define pte_free_tlb(tlb, ptep, address) \
do { \
__tlb_adjust_range(tlb, address, PAGE_SIZE); \
tlb->freed_tables = 1; \
tlb->cleared_pmds = 1; \
__pte_free_tlb(tlb, ptep, address); \
} while (0)
#endif
---8<---
However, in arch/s390/include/asm/tlb.h, pte_free_tlb() set the tlb->cleared_ptes:
---8<---
static inline void pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,
unsigned long address)
{
__tlb_adjust_range(tlb, address, PAGE_SIZE);
tlb->mm->context.flush_mm = 1;
tlb->freed_tables = 1;
tlb->cleared_ptes = 1;
/*
* page_table_free_rcu takes care of the allocation bit masks
* of the 2K table fragments in the 4K page table page,
* then calls tlb_remove_table.
*/
page_table_free_rcu(tlb, (unsigned long *) pte, address);
}
---8<---
In my view, the cleared_(ptes|pmds|puds) and (pte|pmd|pud)_free_tlb
correspond one-to-one. So we should set cleared_ptes in pte_free_tlb(),
then use it when needed.
I'm very confused about this. Which is wrong? Or is there something
I understand wrong?
Thanks,
Zhenyu
Powered by blists - more mailing lists