diff options
author | Alexey Skidanov <alexey.skidanov@gmail.com> | 2015-04-14 18:05:49 +0300 |
---|---|---|
committer | Oded Gabbay <oded.gabbay@gmail.com> | 2015-05-19 13:02:27 +0300 |
commit | 59d3e8be87a14c6a0d91c683e63d9b31734525ae (patch) | |
tree | 1f23bcca62cdfcec10055b83463d51129ec0d590 /drivers/gpu/drm/amd/amdkfd/kfd_events.h | |
parent | f3a398183f7b9ef78f6b71ee9f7641e046403bcb (diff) | |
download | linux-59d3e8be87a14c6a0d91c683e63d9b31734525ae.tar.bz2 |
drm/amdkfd: Add memory exception handling
This patch adds Peripheral Page Request (PPR) failure processing
and reporting.
Bad address or pointer to a system memory block with inappropriate
read/write permission cause such PPR failure during a user queue
processing. PPR request handling is done by IOMMU driver notifying
AMDKFD module on PPR failure.
The process triggering a PPR failure will be notified by
appropriate event or SIGTERM signal will be sent to it.
v3:
- Change all bool fields in struct kfd_memory_exception_failure to
uint32_t
Signed-off-by: Alexey Skidanov <alexey.skidanov@gmail.com>
Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdkfd/kfd_events.h')
-rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_events.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.h b/drivers/gpu/drm/amd/amdkfd/kfd_events.h index d9b5b381af0b..691cf8573dc1 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_events.h +++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.h @@ -28,6 +28,7 @@ #include <linux/types.h> #include <linux/list.h> #include "kfd_priv.h" +#include <uapi/linux/kfd_ioctl.h> #define KFD_EVENT_ID_NONSIGNAL_MASK 0x80000000U #define KFD_FIRST_NONSIGNAL_EVENT_ID KFD_EVENT_ID_NONSIGNAL_MASK @@ -61,6 +62,11 @@ struct kfd_event { struct signal_page *signal_page; unsigned int signal_slot_index; uint64_t __user *user_signal_address; + + /* type specific data */ + union { + struct kfd_hsa_memory_exception_data memory_exception_data; + }; }; #define KFD_EVENT_TIMEOUT_IMMEDIATE 0 @@ -69,6 +75,7 @@ struct kfd_event { /* Matching HSA_EVENTTYPE */ #define KFD_EVENT_TYPE_SIGNAL 0 #define KFD_EVENT_TYPE_DEBUG 5 +#define KFD_EVENT_TYPE_MEMORY 8 extern void kfd_signal_event_interrupt(unsigned int pasid, uint32_t partial_id, uint32_t valid_id_bits); |