GFX 1250 allows the debugger to subcribe to LDS out-of-range read/write memory violations. Bump IOCTL minor version and flag KFD capabilities for enablement hint.
Unified · Split
| @@ -519,6 +519,7 @@ int kfd_dbg_trap_set_flags(struct kfd_process *target, uint32_t *flags) · 518 unmodified lines | ||
| 519 | 519 | struct kfd_topology_device *topo_dev = |
| 520 | 520 | kfd_topology_device_by_id(target->pdds[i]->dev->id); |
| 521 | 521 | uint32_t caps = topo_dev->node_props.capability; |
| 522 | + uint32_t caps2 = topo_dev->node_props.capability2; | |
| 522 | 523 | |
| 523 | 524 | if (!(caps & HSA_CAP_TRAP_DEBUG_PRECISE_MEMORY_OPERATIONS_SUPPORTED) && |
| 524 | 525 | (*flags & KFD_DBG_TRAP_FLAG_SINGLE_MEM_OP)) { |
| @@ -531,6 +532,12 @@ int kfd_dbg_trap_set_flags(struct kfd_process *target, uint32_t *flags) · 6 unmodified lines | ||
| 531 | 532 | *flags = prev_flags; |
| 532 | 533 | return -EACCES; |
| 533 | 534 | } |
| 535 | + | |
| 536 | + if (!(caps2 & HSA_CAP2_TRAP_DEBUG_LDS_OUT_OF_ADDR_RANGE_SUPPORTED) && | |
| 537 | + (*flags & KFD_DBG_TRAP_FLAG_LDS_OUT_OF_ADDR_RANGE)) { | |
| 538 | + *flags = prev_flags; | |
| 539 | + return -EACCES; | |
| 540 | + } | |
| 534 | 541 | } |
| 535 | 542 | |
| 536 | 543 | target->dbg_flags = *flags; |
| @@ -2028,6 +2028,10 @@ static void kfd_topology_set_capabilities(struct kfd_topology_device *dev) · 2027 unmodified lines | ||
| 2028 | 2028 | if (KFD_GC_VERSION(dev->gpu) >= IP_VERSION(12, 0, 0)) |
| 2029 | 2029 | dev->node_props.capability |= |
| 2030 | 2030 | HSA_CAP_TRAP_DEBUG_PRECISE_ALU_OPERATIONS_SUPPORTED; |
| 2031 | + | |
| 2032 | + if (KFD_GC_VERSION(dev->gpu) >= IP_VERSION(12, 1, 0)) | |
| 2033 | + dev->node_props.capability2 |= | |
| 2034 | + HSA_CAP2_TRAP_DEBUG_LDS_OUT_OF_ADDR_RANGE_SUPPORTED; | |
| 2031 | 2035 | } |
| 2032 | 2036 | |
| 2033 | 2037 | kfd_topology_set_dbg_firmware_support(dev); |
| @@ -46,9 +46,10 @@ · 45 unmodified lines | ||
| 46 | 46 | * - 1.18 - Rename pad in set_memory_policy_args to misc_process_flag |
| 47 | 47 | * - 1.19 - Add a new ioctl to craete secondary kfd processes |
| 48 | 48 | * - 1.20 - Trap handler support for expert scheduling mode available |
| 49 | + * - 1.21 - Debugger support to subscribe to LDS out-of-address exceptions | |
| 49 | 50 | */ |
| 50 | 51 | #define KFD_IOCTL_MAJOR_VERSION 1 |
| 51 | −#define KFD_IOCTL_MINOR_VERSION 20 | |
| 52 | +#define KFD_IOCTL_MINOR_VERSION 21 | |
| 52 | 53 | |
| 53 | 54 | struct kfd_ioctl_get_version_args { |
| 54 | 55 | __u32 major_version; /* from KFD */ |
| @@ -947,6 +948,7 @@ enum kfd_dbg_trap_address_watch_mode { · 892 unmodified lines | ||
| 947 | 948 | enum kfd_dbg_trap_flags { |
| 948 | 949 | KFD_DBG_TRAP_FLAG_SINGLE_MEM_OP = 1, |
| 949 | 950 | KFD_DBG_TRAP_FLAG_SINGLE_ALU_OP = 2, |
| 951 | + KFD_DBG_TRAP_FLAG_LDS_OUT_OF_ADDR_RANGE = 4 | |
| 950 | 952 | }; |
| 951 | 953 | |
| 952 | 954 | /* Trap exceptions */ |
| @@ -64,7 +64,8 @@ · 63 unmodified lines | ||
| 64 | 64 | #define HSA_CAP_RESERVED 0x000f8000 |
| 65 | 65 | |
| 66 | 66 | #define HSA_CAP2_PER_SDMA_QUEUE_RESET_SUPPORTED 0x00000001 |
| 67 | −#define HSA_CAP2_RESERVED 0xfffffffe | |
| 67 | +#define HSA_CAP2_TRAP_DEBUG_LDS_OUT_OF_ADDR_RANGE_SUPPORTED 0x00000002 | |
| 68 | +#define HSA_CAP2_RESERVED 0xfffffffc | |
| 68 | 69 | |
| 69 | 70 | /* debug_prop bits in node properties */ |
| 70 | 71 | #define HSA_DBG_WATCH_ADDR_MASK_LO_BIT_MASK 0x0000000f |