diff options
author | Brian Welty <[email protected]> | 2023-11-21 12:10:37 -0800 |
---|---|---|
committer | Rodrigo Vivi <[email protected]> | 2023-12-21 11:45:10 -0500 |
commit | 594b46ba0c8239f9531ac23a4c6eae5c0fad4cf3 (patch) | |
tree | 67aae2217f60c9cb5dad4076ccd14e25c337011b | |
parent | a682b6a42d4de68419f23d73afa57fc931fed3c6 (diff) |
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 <[email protected]>
Reviewed-by: Matthew Brost <[email protected]>
Signed-off-by: Rodrigo Vivi <[email protected]>
-rw-r--r-- | drivers/gpu/drm/xe/xe_gt_pagefault.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/drm/xe/xe_gt_pagefault.c b/drivers/gpu/drm/xe/xe_gt_pagefault.c index ccf5a6671faf..a5358064a4e0 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) << |