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 | 83 | * - &DRM_IOCTL_XE_OBSERVATION |
| 84 | 84 | * - &DRM_IOCTL_XE_MADVISE |
| 85 | 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 | 108 | #define DRM_XE_MADVISE 0x0c |
| 108 | 109 | #define DRM_XE_VM_QUERY_MEM_RANGE_ATTRS 0x0d |
| 109 | 110 | #define DRM_XE_EXEC_QUEUE_SET_PROPERTY 0x0e |
| 111 | +#define DRM_XE_VM_GET_PROPERTY 0x0f | |
| 110 | 112 | |
| 111 | 113 | /* Must be kept compact -- no holes */ |
| 112 | 114 | |
| @@ -125,6 +127,7 @@ extern "C" { · 12 unmodified lines | ||
| 125 | 127 | #define DRM_IOCTL_XE_MADVISE DRM_IOW(DRM_COMMAND_BASE + DRM_XE_MADVISE, struct drm_xe_madvise) |
| 126 | 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 | 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 | 133 | * DOC: Xe IOCTL Extensions |
| @@ -1057,7 +1060,7 @@ struct drm_xe_vm_destroy { · 926 unmodified lines | ||
| 1057 | 1060 | * not invoke autoreset. Neither will stack variables going out of scope. |
| 1058 | 1061 | * Therefore it's recommended to always explicitly reset the madvises when |
| 1059 | 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 | 1064 | * When set on a MAP bind operation, request the driver schedule an on-device |
| 1062 | 1065 | * in-place decompression (via the migrate/resolve path) for the GPU mapping |
| 1063 | 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 | 1117 | * incoherent GT access is possible. |
| 1115 | 1118 | * |
| 1116 | 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 | 1124 | * For DRM_XE_VM_BIND_FLAG_NULL bindings there are no KMD restrictions |
| 1120 | 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 | 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 | 1353 | * struct drm_xe_exec_queue_create - Input of &DRM_IOCTL_XE_EXEC_QUEUE_CREATE |
| 1266 | 1354 | * |