Hi Dave and Sima, Here goes our third, perhaps, final drm-xe-next PR towards 7.1. In the big things we have: - THP support in drm_pagemap - xe_vm_get_property_ioctl Thanks, Matt UAPI Changes: - Implement xe_vm_get_property_ioctl (Jonathan) Cross-subsystem Changes: - Enable THP support in drm_pagemap (Francois, Brost) Core Changes: - Improve VF FLR synchronization for Xe VFIO (Piotr) Driver Changes: - Fix confusion with locals on context creation (Tomasz, Fixes) - Add new SVM copy GT stats per size (Francois) - always keep track of remap prev/next (Auld, Fixes) - AuxCCS handling and render compression modifiers (Tvrtko) - Implement recent spec updates to Wa_16025250150 (Roper) - xe3p_lpg: L2 flush optimization (Tejas) - vf: Improve getting clean NULL context (Wajdeczko) - pf: Fix use-after-free in migration restore (Winiarski. Fixes) - Fix format specifier for printing pointer differences (Nathan Chancellor, Fixes) - Extend Wa_14026781792 for xe3lpg (Niton) - xe3p_lpg: Add Wa_16029437861 (Varun) - Fix spelling mistakes and comment style in ttm_resource.c (Varun) - Merge drm/drm-next into drm-xe-next (Thomas) - Fix missing runtime PM reference in ccs_mode_store (Sanjay, Fixes) - Fix uninitialized new_ts when capturing context timestamp (Umesh) - Allow reading after disabling OA stream (Ashutosh) - Page Reclamation Fixes (Brian Nguyen, Fixes) - Include running dword offset in default_lrc dumps (Roper) - Assert/Deassert I2C IRQ (Raag) - Fixup reset, wedge, unload corner cases (Zhanjun, Brost) - Fail immediately on GuC load error (Daniele) - Fix kernel-doc for DRM_XE_VM_BIND_FLAG_DECOMPRESS (Niton, Fixes) - Drop redundant entries for Wa_16021867713 & Wa_14019449301 (Roper, Fixes)
Showing the changes to include/uapi (1 of 56 files). Show all
Unified · Split
| @@ -83,6 +83,7 @@ extern "C" { · 82 unmodified lines | |||
| 83 | * - &DRM_IOCTL_XE_OBSERVATION | 83 | * - &DRM_IOCTL_XE_OBSERVATION |
| 84 | * - &DRM_IOCTL_XE_MADVISE | 84 | * - &DRM_IOCTL_XE_MADVISE |
| 85 | * - &DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS | 85 | * - &DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS |
| 86 | * - &DRM_IOCTL_XE_VM_GET_PROPERTY | ||
| 86 | */ | 87 | */ |
| 87 | 88 | ||
| 88 | /* | 89 | /* |
| @@ -107,6 +108,7 @@ extern "C" { · 18 unmodified lines | |||
| 107 | #define DRM_XE_MADVISE 0x0c | 108 | #define DRM_XE_MADVISE 0x0c |
| 108 | #define DRM_XE_VM_QUERY_MEM_RANGE_ATTRS 0x0d | 109 | #define DRM_XE_VM_QUERY_MEM_RANGE_ATTRS 0x0d |
| 109 | #define DRM_XE_EXEC_QUEUE_SET_PROPERTY 0x0e | 110 | #define DRM_XE_EXEC_QUEUE_SET_PROPERTY 0x0e |
| 111 | #define DRM_XE_VM_GET_PROPERTY 0x0f | ||
| 110 | 112 | ||
| 111 | /* Must be kept compact -- no holes */ | 113 | /* Must be kept compact -- no holes */ |
| 112 | 114 | ||
| @@ -125,6 +127,7 @@ extern "C" { · 12 unmodified lines | |||
| 125 | #define DRM_IOCTL_XE_MADVISE DRM_IOW(DRM_COMMAND_BASE + DRM_XE_MADVISE, struct drm_xe_madvise) | 127 | #define DRM_IOCTL_XE_MADVISE DRM_IOW(DRM_COMMAND_BASE + DRM_XE_MADVISE, struct drm_xe_madvise) |
| 126 | #define DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_VM_QUERY_MEM_RANGE_ATTRS, struct drm_xe_vm_query_mem_range_attr) | 128 | #define DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_VM_QUERY_MEM_RANGE_ATTRS, struct drm_xe_vm_query_mem_range_attr) |
| 127 | #define DRM_IOCTL_XE_EXEC_QUEUE_SET_PROPERTY DRM_IOW(DRM_COMMAND_BASE + DRM_XE_EXEC_QUEUE_SET_PROPERTY, struct drm_xe_exec_queue_set_property) | 129 | #define DRM_IOCTL_XE_EXEC_QUEUE_SET_PROPERTY DRM_IOW(DRM_COMMAND_BASE + DRM_XE_EXEC_QUEUE_SET_PROPERTY, struct drm_xe_exec_queue_set_property) |
| 130 | #define DRM_IOCTL_XE_VM_GET_PROPERTY DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_VM_GET_PROPERTY, struct drm_xe_vm_get_property) | ||
| 128 | 131 | ||
| 129 | /** | 132 | /** |
| 130 | * DOC: Xe IOCTL Extensions | 133 | * DOC: Xe IOCTL Extensions |
| @@ -1057,7 +1060,7 @@ struct drm_xe_vm_destroy { · 926 unmodified lines | |||
| 1057 | * not invoke autoreset. Neither will stack variables going out of scope. | 1060 | * not invoke autoreset. Neither will stack variables going out of scope. |
| 1058 | * Therefore it's recommended to always explicitly reset the madvises when | 1061 | * Therefore it's recommended to always explicitly reset the madvises when |
| 1059 | * freeing the memory backing a region used in a &DRM_IOCTL_XE_MADVISE call. | 1062 | * freeing the memory backing a region used in a &DRM_IOCTL_XE_MADVISE call. |
| 1060 | * - DRM_XE_VM_BIND_FLAG_DECOMPRESS - Request on-device decompression for a MAP. | 1063 | * - %DRM_XE_VM_BIND_FLAG_DECOMPRESS - Request on-device decompression for a MAP. |
| 1061 | * When set on a MAP bind operation, request the driver schedule an on-device | 1064 | * When set on a MAP bind operation, request the driver schedule an on-device |
| 1062 | * in-place decompression (via the migrate/resolve path) for the GPU mapping | 1065 | * in-place decompression (via the migrate/resolve path) for the GPU mapping |
| 1063 | * created by this bind. Only valid for DRM_XE_VM_BIND_OP_MAP; usage on | 1066 | * created by this bind. Only valid for DRM_XE_VM_BIND_OP_MAP; usage on |
| @@ -1114,7 +1117,9 @@ struct drm_xe_vm_bind_op { · 50 unmodified lines | |||
| 1114 | * incoherent GT access is possible. | 1117 | * incoherent GT access is possible. |
| 1115 | * | 1118 | * |
| 1116 | * Note: For userptr and externally imported dma-buf the kernel expects | 1119 | * Note: For userptr and externally imported dma-buf the kernel expects |
| 1117 | * either 1WAY or 2WAY for the @pat_index. | 1120 | * either 1WAY or 2WAY for the @pat_index. Starting from NVL-P, for |
| 1121 | * userptr, svm, madvise and externally imported dma-buf the kernel expects | ||
| 1122 | * either 2WAY or 1WAY and XA @pat_index. | ||
| 1118 | * | 1123 | * |
| 1119 | * For DRM_XE_VM_BIND_FLAG_NULL bindings there are no KMD restrictions | 1124 | * For DRM_XE_VM_BIND_FLAG_NULL bindings there are no KMD restrictions |
| 1120 | * on the @pat_index. For such mappings there is no actual memory being | 1125 | * on the @pat_index. For such mappings there is no actual memory being |
| @@ -1261,6 +1266,89 @@ struct drm_xe_vm_bind { · 140 unmodified lines | |||
| 1261 | __u64 reserved[2]; | 1266 | __u64 reserved[2]; |
| 1262 | }; | 1267 | }; |
| 1263 | 1268 | ||
| 1269 | /** struct xe_vm_fault - Describes faults for %DRM_XE_VM_GET_PROPERTY_FAULTS */ | ||
| 1270 | struct xe_vm_fault { | ||
| 1271 | /** @address: Canonical address of the fault */ | ||
| 1272 | __u64 address; | ||
| 1273 | /** @address_precision: Precision of faulted address */ | ||
| 1274 | __u32 address_precision; | ||
| 1275 | /** @access_type: Type of address access that resulted in fault */ | ||
| 1276 | #define FAULT_ACCESS_TYPE_READ 0 | ||
| 1277 | #define FAULT_ACCESS_TYPE_WRITE 1 | ||
| 1278 | #define FAULT_ACCESS_TYPE_ATOMIC 2 | ||
| 1279 | __u8 access_type; | ||
| 1280 | /** @fault_type: Type of fault reported */ | ||
| 1281 | #define FAULT_TYPE_NOT_PRESENT 0 | ||
| 1282 | #define FAULT_TYPE_WRITE_ACCESS 1 | ||
| 1283 | #define FAULT_TYPE_ATOMIC_ACCESS 2 | ||
| 1284 | __u8 fault_type; | ||
| 1285 | /** @fault_level: fault level of the fault */ | ||
| 1286 | #define FAULT_LEVEL_PTE 0 | ||
| 1287 | #define FAULT_LEVEL_PDE 1 | ||
| 1288 | #define FAULT_LEVEL_PDP 2 | ||
| 1289 | #define FAULT_LEVEL_PML4 3 | ||
| 1290 | #define FAULT_LEVEL_PML5 4 | ||
| 1291 | __u8 fault_level; | ||
| 1292 | /** @pad: MBZ */ | ||
| 1293 | __u8 pad; | ||
| 1294 | /** @reserved: MBZ */ | ||
| 1295 | __u64 reserved[4]; | ||
| 1296 | }; | ||
| 1297 | |||
| 1298 | /** | ||
| 1299 | * struct drm_xe_vm_get_property - Input of &DRM_IOCTL_XE_VM_GET_PROPERTY | ||
| 1300 | * | ||
| 1301 | * The user provides a VM and a property to query among DRM_XE_VM_GET_PROPERTY_*, | ||
| 1302 | * and sets the values in the vm_id and property members, respectively. This | ||
| 1303 | * determines both the VM to get the property of, as well as the property to | ||
| 1304 | * report. | ||
| 1305 | * | ||
| 1306 | * If size is set to 0, the driver fills it with the required size for the | ||
| 1307 | * requested property. The user is expected here to allocate memory for the | ||
| 1308 | * property structure and to provide a pointer to the allocated memory using the | ||
| 1309 | * data member. For some properties, this may be zero, in which case, the | ||
| 1310 | * value of the property will be saved to the value member and size will remain | ||
| 1311 | * zero on return. | ||
| 1312 | * | ||
| 1313 | * If size is not zero, then the IOCTL will attempt to copy the requested | ||
| 1314 | * property into the data member. | ||
| 1315 | * | ||
| 1316 | * The IOCTL will return -ENOENT if the VM could not be identified from the | ||
| 1317 | * provided VM ID, or -EINVAL if the IOCTL fails for any other reason, such as | ||
| 1318 | * providing an invalid size for the given property or if the property data | ||
| 1319 | * could not be copied to the memory allocated to the data member. | ||
| 1320 | * | ||
| 1321 | * The property member can be: | ||
| 1322 | * - %DRM_XE_VM_GET_PROPERTY_FAULTS | ||
| 1323 | */ | ||
| 1324 | struct drm_xe_vm_get_property { | ||
| 1325 | /** @extensions: Pointer to the first extension struct, if any */ | ||
| 1326 | __u64 extensions; | ||
| 1327 | |||
| 1328 | /** @vm_id: The ID of the VM to query the properties of */ | ||
| 1329 | __u32 vm_id; | ||
| 1330 | |||
| 1331 | #define DRM_XE_VM_GET_PROPERTY_FAULTS 0 | ||
| 1332 | /** @property: property to get */ | ||
| 1333 | __u32 property; | ||
| 1334 | |||
| 1335 | /** @size: Size to allocate for @data */ | ||
| 1336 | __u32 size; | ||
| 1337 | |||
| 1338 | /** @pad: MBZ */ | ||
| 1339 | __u32 pad; | ||
| 1340 | |||
| 1341 | union { | ||
| 1342 | /** @data: Pointer to user-defined array of flexible size and type */ | ||
| 1343 | __u64 data; | ||
| 1344 | /** @value: Return value for scalar queries */ | ||
| 1345 | __u64 value; | ||
| 1346 | }; | ||
| 1347 | |||
| 1348 | /** @reserved: MBZ */ | ||
| 1349 | __u64 reserved[3]; | ||
| 1350 | }; | ||
| 1351 | |||
| 1264 | /** | 1352 | /** |
| 1265 | * struct drm_xe_exec_queue_create - Input of &DRM_IOCTL_XE_EXEC_QUEUE_CREATE | 1353 | * struct drm_xe_exec_queue_create - Input of &DRM_IOCTL_XE_EXEC_QUEUE_CREATE |
| 1266 | * | 1354 | * |