diff options
Diffstat (limited to 'drivers/misc/cxl/fault.c')
-rw-r--r-- | drivers/misc/cxl/fault.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/misc/cxl/fault.c b/drivers/misc/cxl/fault.c index c99e896604ee..f8684bca2d79 100644 --- a/drivers/misc/cxl/fault.c +++ b/drivers/misc/cxl/fault.c | |||
@@ -133,7 +133,7 @@ static void cxl_handle_page_fault(struct cxl_context *ctx, | |||
133 | { | 133 | { |
134 | unsigned flt = 0; | 134 | unsigned flt = 0; |
135 | int result; | 135 | int result; |
136 | unsigned long access, flags; | 136 | unsigned long access, flags, inv_flags = 0; |
137 | 137 | ||
138 | if ((result = copro_handle_mm_fault(mm, dar, dsisr, &flt))) { | 138 | if ((result = copro_handle_mm_fault(mm, dar, dsisr, &flt))) { |
139 | pr_devel("copro_handle_mm_fault failed: %#x\n", result); | 139 | pr_devel("copro_handle_mm_fault failed: %#x\n", result); |
@@ -149,8 +149,12 @@ static void cxl_handle_page_fault(struct cxl_context *ctx, | |||
149 | access |= _PAGE_RW; | 149 | access |= _PAGE_RW; |
150 | if ((!ctx->kernel) || ~(dar & (1ULL << 63))) | 150 | if ((!ctx->kernel) || ~(dar & (1ULL << 63))) |
151 | access |= _PAGE_USER; | 151 | access |= _PAGE_USER; |
152 | |||
153 | if (dsisr & DSISR_NOHPTE) | ||
154 | inv_flags |= HPTE_NOHPTE_UPDATE; | ||
155 | |||
152 | local_irq_save(flags); | 156 | local_irq_save(flags); |
153 | hash_page_mm(mm, dar, access, 0x300); | 157 | hash_page_mm(mm, dar, access, 0x300, inv_flags); |
154 | local_irq_restore(flags); | 158 | local_irq_restore(flags); |
155 | 159 | ||
156 | pr_devel("Page fault successfully handled for pe: %i!\n", ctx->pe); | 160 | pr_devel("Page fault successfully handled for pe: %i!\n", ctx->pe); |