From 594b46ba0c8239f9531ac23a4c6eae5c0fad4cf3 Mon Sep 17 00:00:00 2001 From: Brian Welty Date: Tue, 21 Nov 2023 12:10:37 -0800 Subject: [PATCH] drm/xe/xe2: Respond to TRTT faults as unsuccessful page fault SW is not expected to handle TRTT faults and should report these as unsuccessful page fault in the reply, such that HW can respond by raising a CAT error. Signed-off-by: Brian Welty Reviewed-by: Matthew Brost Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/xe/xe_gt_pagefault.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/gpu/drm/xe/xe_gt_pagefault.c b/drivers/gpu/drm/xe/xe_gt_pagefault.c index ccf5a6671faf8..a5358064a4e0f 100644 --- a/drivers/gpu/drm/xe/xe_gt_pagefault.c +++ b/drivers/gpu/drm/xe/xe_gt_pagefault.c @@ -34,6 +34,7 @@ struct pagefault { u8 engine_class; u8 engine_instance; u8 fault_unsuccessful; + bool trva_fault; }; enum access_type { @@ -138,6 +139,10 @@ static int handle_pagefault(struct xe_gt *gt, struct pagefault *pf) int ret = 0; bool atomic; + /* SW isn't expected to handle TRTT faults */ + if (pf->trva_fault) + return -EFAULT; + /* ASID to VM */ mutex_lock(&xe->usm.lock); vm = xa_load(&xe->usm.asid_to_vm, pf->asid); @@ -282,6 +287,7 @@ static bool get_pagefault(struct pf_queue *pf_queue, struct pagefault *pf) (pf_queue->data + pf_queue->head); pf->fault_level = FIELD_GET(PFD_FAULT_LEVEL, desc->dw0); + pf->trva_fault = FIELD_GET(XE2_PFD_TRVA_FAULT, desc->dw0); pf->engine_class = FIELD_GET(PFD_ENG_CLASS, desc->dw0); pf->engine_instance = FIELD_GET(PFD_ENG_INSTANCE, desc->dw0); pf->pdata = FIELD_GET(PFD_PDATA_HI, desc->dw1) << -- 2.30.2