mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-01 16:14:13 +08:00
powerpc/pseries: move process table registration away from hash-specific code
This reduces ifdefs in a later change which makes hash support configurable. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20211201144153.2456614-6-npiggin@gmail.com
This commit is contained in:
parent
935b534c24
commit
0c7cc15e92
@ -712,6 +712,34 @@ void vpa_init(int cpu)
|
||||
|
||||
#ifdef CONFIG_PPC_BOOK3S_64
|
||||
|
||||
static int pseries_lpar_register_process_table(unsigned long base,
|
||||
unsigned long page_size, unsigned long table_size)
|
||||
{
|
||||
long rc;
|
||||
unsigned long flags = 0;
|
||||
|
||||
if (table_size)
|
||||
flags |= PROC_TABLE_NEW;
|
||||
if (radix_enabled()) {
|
||||
flags |= PROC_TABLE_RADIX;
|
||||
if (mmu_has_feature(MMU_FTR_GTSE))
|
||||
flags |= PROC_TABLE_GTSE;
|
||||
} else
|
||||
flags |= PROC_TABLE_HPT_SLB;
|
||||
for (;;) {
|
||||
rc = plpar_hcall_norets(H_REGISTER_PROC_TBL, flags, base,
|
||||
page_size, table_size);
|
||||
if (!H_IS_LONG_BUSY(rc))
|
||||
break;
|
||||
mdelay(get_longbusy_msecs(rc));
|
||||
}
|
||||
if (rc != H_SUCCESS) {
|
||||
pr_err("Failed to register process table (rc=%ld)\n", rc);
|
||||
BUG();
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
static long pSeries_lpar_hpte_insert(unsigned long hpte_group,
|
||||
unsigned long vpn, unsigned long pa,
|
||||
unsigned long rflags, unsigned long vflags,
|
||||
@ -1680,34 +1708,6 @@ static int pseries_lpar_resize_hpt(unsigned long shift)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pseries_lpar_register_process_table(unsigned long base,
|
||||
unsigned long page_size, unsigned long table_size)
|
||||
{
|
||||
long rc;
|
||||
unsigned long flags = 0;
|
||||
|
||||
if (table_size)
|
||||
flags |= PROC_TABLE_NEW;
|
||||
if (radix_enabled()) {
|
||||
flags |= PROC_TABLE_RADIX;
|
||||
if (mmu_has_feature(MMU_FTR_GTSE))
|
||||
flags |= PROC_TABLE_GTSE;
|
||||
} else
|
||||
flags |= PROC_TABLE_HPT_SLB;
|
||||
for (;;) {
|
||||
rc = plpar_hcall_norets(H_REGISTER_PROC_TBL, flags, base,
|
||||
page_size, table_size);
|
||||
if (!H_IS_LONG_BUSY(rc))
|
||||
break;
|
||||
mdelay(get_longbusy_msecs(rc));
|
||||
}
|
||||
if (rc != H_SUCCESS) {
|
||||
pr_err("Failed to register process table (rc=%ld)\n", rc);
|
||||
BUG();
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
void __init hpte_init_pseries(void)
|
||||
{
|
||||
mmu_hash_ops.hpte_invalidate = pSeries_lpar_hpte_invalidate;
|
||||
|
Loading…
Reference in New Issue
Block a user