s390/mm: enable split page table lock for PMD level
Add the pgtable_pmd_page_ctor/pgtable_pmd_page_dtor calls to the pmd allocation and free functions and enable ARCH_ENABLE_SPLIT_PMD_PTLOCK for 64 bit. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
634391ace1
commit
ec66ad66a0
3 changed files with 20 additions and 5 deletions
|
@ -415,6 +415,10 @@ config ARCH_ENABLE_MEMORY_HOTPLUG
|
||||||
config ARCH_ENABLE_MEMORY_HOTREMOVE
|
config ARCH_ENABLE_MEMORY_HOTREMOVE
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
||||||
|
config ARCH_ENABLE_SPLIT_PMD_PTLOCK
|
||||||
|
def_bool y
|
||||||
|
depends on 64BIT
|
||||||
|
|
||||||
config FORCE_MAX_ZONEORDER
|
config FORCE_MAX_ZONEORDER
|
||||||
int
|
int
|
||||||
default "9"
|
default "9"
|
||||||
|
|
|
@ -92,11 +92,22 @@ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address)
|
||||||
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr)
|
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr)
|
||||||
{
|
{
|
||||||
unsigned long *table = crst_table_alloc(mm);
|
unsigned long *table = crst_table_alloc(mm);
|
||||||
if (table)
|
|
||||||
crst_table_init(table, _SEGMENT_ENTRY_EMPTY);
|
if (!table)
|
||||||
|
return NULL;
|
||||||
|
crst_table_init(table, _SEGMENT_ENTRY_EMPTY);
|
||||||
|
if (!pgtable_pmd_page_ctor(virt_to_page(table))) {
|
||||||
|
crst_table_free(mm, table);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
return (pmd_t *) table;
|
return (pmd_t *) table;
|
||||||
}
|
}
|
||||||
#define pmd_free(mm, pmd) crst_table_free(mm, (unsigned long *) pmd)
|
|
||||||
|
static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
|
||||||
|
{
|
||||||
|
pgtable_pmd_page_dtor(virt_to_page(pmd));
|
||||||
|
crst_table_free(mm, (unsigned long *) pmd);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
|
static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1397,7 +1397,7 @@ void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp,
|
||||||
{
|
{
|
||||||
struct list_head *lh = (struct list_head *) pgtable;
|
struct list_head *lh = (struct list_head *) pgtable;
|
||||||
|
|
||||||
assert_spin_locked(&mm->page_table_lock);
|
assert_spin_locked(pmd_lockptr(mm, pmdp));
|
||||||
|
|
||||||
/* FIFO */
|
/* FIFO */
|
||||||
if (!pmd_huge_pte(mm, pmdp))
|
if (!pmd_huge_pte(mm, pmdp))
|
||||||
|
@ -1413,7 +1413,7 @@ pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp)
|
||||||
pgtable_t pgtable;
|
pgtable_t pgtable;
|
||||||
pte_t *ptep;
|
pte_t *ptep;
|
||||||
|
|
||||||
assert_spin_locked(&mm->page_table_lock);
|
assert_spin_locked(pmd_lockptr(mm, pmdp));
|
||||||
|
|
||||||
/* FIFO */
|
/* FIFO */
|
||||||
pgtable = pmd_huge_pte(mm, pmdp);
|
pgtable = pmd_huge_pte(mm, pmdp);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue