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 | struct kfd_topology_device *topo_dev = | 519 | struct kfd_topology_device *topo_dev = |
| 520 | kfd_topology_device_by_id(target->pdds[i]->dev->id); | 520 | kfd_topology_device_by_id(target->pdds[i]->dev->id); |
| 521 | uint32_t caps = topo_dev->node_props.capability; | 521 | uint32_t caps = topo_dev->node_props.capability; |
| 522 | uint32_t caps2 = topo_dev->node_props.capability2; | ||
| 522 | 523 | ||
| 523 | if (!(caps & HSA_CAP_TRAP_DEBUG_PRECISE_MEMORY_OPERATIONS_SUPPORTED) && | 524 | if (!(caps & HSA_CAP_TRAP_DEBUG_PRECISE_MEMORY_OPERATIONS_SUPPORTED) && |
| 524 | (*flags & KFD_DBG_TRAP_FLAG_SINGLE_MEM_OP)) { | 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 | *flags = prev_flags; | 532 | *flags = prev_flags; |
| 532 | return -EACCES; | 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 | target->dbg_flags = *flags; | 543 | target->dbg_flags = *flags; |
| @@ -2028,6 +2028,10 @@ static void kfd_topology_set_capabilities(struct kfd_topology_device *dev) · 2027 unmodified lines | |||
| 2028 | if (KFD_GC_VERSION(dev->gpu) >= IP_VERSION(12, 0, 0)) | 2028 | if (KFD_GC_VERSION(dev->gpu) >= IP_VERSION(12, 0, 0)) |
| 2029 | dev->node_props.capability |= | 2029 | dev->node_props.capability |= |
| 2030 | HSA_CAP_TRAP_DEBUG_PRECISE_ALU_OPERATIONS_SUPPORTED; | 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 | kfd_topology_set_dbg_firmware_support(dev); | 2037 | kfd_topology_set_dbg_firmware_support(dev); |
| @@ -46,9 +46,10 @@ · 45 unmodified lines | |||
| 46 | * - 1.18 - Rename pad in set_memory_policy_args to misc_process_flag | 46 | * - 1.18 - Rename pad in set_memory_policy_args to misc_process_flag |
| 47 | * - 1.19 - Add a new ioctl to craete secondary kfd processes | 47 | * - 1.19 - Add a new ioctl to craete secondary kfd processes |
| 48 | * - 1.20 - Trap handler support for expert scheduling mode available | 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 | #define KFD_IOCTL_MAJOR_VERSION 1 | 51 | #define KFD_IOCTL_MAJOR_VERSION 1 |
| 51 | #define KFD_IOCTL_MINOR_VERSION 20 | 52 | #define KFD_IOCTL_MINOR_VERSION 21 |
| 52 | 53 | ||
| 53 | struct kfd_ioctl_get_version_args { | 54 | struct kfd_ioctl_get_version_args { |
| 54 | __u32 major_version; /* from KFD */ | 55 | __u32 major_version; /* from KFD */ |
| @@ -947,6 +948,7 @@ enum kfd_dbg_trap_address_watch_mode { · 892 unmodified lines | |||
| 947 | enum kfd_dbg_trap_flags { | 948 | enum kfd_dbg_trap_flags { |
| 948 | KFD_DBG_TRAP_FLAG_SINGLE_MEM_OP = 1, | 949 | KFD_DBG_TRAP_FLAG_SINGLE_MEM_OP = 1, |
| 949 | KFD_DBG_TRAP_FLAG_SINGLE_ALU_OP = 2, | 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 | /* Trap exceptions */ | 954 | /* Trap exceptions */ |
| @@ -64,7 +64,8 @@ · 63 unmodified lines | |||
| 64 | #define HSA_CAP_RESERVED 0x000f8000 | 64 | #define HSA_CAP_RESERVED 0x000f8000 |
| 65 | 65 | ||
| 66 | #define HSA_CAP2_PER_SDMA_QUEUE_RESET_SUPPORTED 0x00000001 | 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 | /* debug_prop bits in node properties */ | 70 | /* debug_prop bits in node properties */ |
| 70 | #define HSA_DBG_WATCH_ADDR_MASK_LO_BIT_MASK 0x0000000f | 71 | #define HSA_DBG_WATCH_ADDR_MASK_LO_BIT_MASK 0x0000000f |