Page MenuHomeFreeBSD

D31775.id94505.diff
No OneTemporary

D31775.id94505.diff

Index: sys/powerpc/aim/mmu_radix.c
===================================================================
--- sys/powerpc/aim/mmu_radix.c
+++ sys/powerpc/aim/mmu_radix.c
@@ -747,7 +747,7 @@
}
static void
-tlbiel_flush_isa3(uint32_t num_sets, uint32_t is)
+tlbiel_flush_isa3(int scope, uint32_t num_sets, uint32_t is)
{
uint32_t set;
@@ -758,9 +758,11 @@
* and partition table entries. Then flush the remaining sets of the
* TLB.
*/
- tlbiel_radix_set_isa300(0, is, 0, RIC_FLUSH_ALL, 0);
- for (set = 1; set < num_sets; set++)
- tlbiel_radix_set_isa300(set, is, 0, RIC_FLUSH_TLB, 0);
+ if (scope == TLB_INVAL_SCOPE_GLOBAL) {
+ tlbiel_radix_set_isa300(0, is, 0, RIC_FLUSH_ALL, 0);
+ for (set = 1; set < num_sets; set++)
+ tlbiel_radix_set_isa300(set, is, 0, RIC_FLUSH_TLB, 0);
+ }
/* Do the same for process scoped entries. */
tlbiel_radix_set_isa300(0, is, 0, RIC_FLUSH_ALL, 1);
@@ -779,7 +781,7 @@
scope == TLB_INVAL_SCOPE_GLOBAL);
is = scope + 2;
- tlbiel_flush_isa3(POWER9_TLB_SETS_RADIX, is);
+ tlbiel_flush_isa3(scope, POWER9_TLB_SETS_RADIX, is);
__asm __volatile(PPC_INVALIDATE_ERAT "; isync" : : :"memory");
}
@@ -2200,9 +2202,15 @@
__asm __volatile("eieio; tlbsync; ptesync" : : : "memory");
#ifdef PSERIES
} else {
- phyp_hcall(H_REGISTER_PROC_TBL,
+ int64_t rc;
+
+ rc = phyp_hcall(H_REGISTER_PROC_TBL,
PROC_TABLE_NEW | PROC_TABLE_RADIX | PROC_TABLE_GTSE,
proctab0pa, 0, PROCTAB_SIZE_SHIFT - 12);
+ if (rc != H_SUCCESS)
+ panic("mmu_radix_proctab_init: "
+ "failed to register process table: rc=%jd",
+ (intmax_t)rc);
#endif
}

File Metadata

Mime Type
text/plain
Expires
Wed, Sep 9, 5:16 AM (5 h, 18 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38564269
Default Alt Text
D31775.id94505.diff (1 KB)

Event Timeline