|
@@ -29,6 +29,8 @@
|
|
|
#include <asm/kexec.h>
|
|
|
#include <asm/ppc-opcode.h>
|
|
|
|
|
|
+#include <misc/cxl.h>
|
|
|
+
|
|
|
#ifdef DEBUG_LOW
|
|
|
#define DBG_LOW(fmt...) udbg_printf(fmt)
|
|
|
#else
|
|
@@ -149,9 +151,11 @@ static inline void __tlbiel(unsigned long vpn, int psize, int apsize, int ssize)
|
|
|
static inline void tlbie(unsigned long vpn, int psize, int apsize,
|
|
|
int ssize, int local)
|
|
|
{
|
|
|
- unsigned int use_local = local && mmu_has_feature(MMU_FTR_TLBIEL);
|
|
|
+ unsigned int use_local;
|
|
|
int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE);
|
|
|
|
|
|
+ use_local = local && mmu_has_feature(MMU_FTR_TLBIEL) && !cxl_ctx_in_use();
|
|
|
+
|
|
|
if (use_local)
|
|
|
use_local = mmu_psize_defs[psize].tlbiel;
|
|
|
if (lock_tlbie && !use_local)
|