History

Merge tag 'drm-xe-next-2026-03-25' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-next

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)

Dave Airlie committed 7 months ago

Commit 72b585d2 parents 3f42072 3d4939c56 files · +1337 −290Browse files

Showing the changes to include/uapi (1 of 56 files). Show all

Unified · Split

include/uapi/drm/xe_drm.h+90−2
@@ -83,6 +83,7 @@ extern "C" { · 82 unmodified lines
83 * - &DRM_IOCTL_XE_OBSERVATION83 * - &DRM_IOCTL_XE_OBSERVATION
84 * - &DRM_IOCTL_XE_MADVISE84 * - &DRM_IOCTL_XE_MADVISE
85 * - &DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS85 * - &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 0x0c108#define DRM_XE_MADVISE 0x0c
108#define DRM_XE_VM_QUERY_MEM_RANGE_ATTRS 0x0d109#define DRM_XE_VM_QUERY_MEM_RANGE_ATTRS 0x0d
109#define DRM_XE_EXEC_QUEUE_SET_PROPERTY 0x0e110#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 Extensions133 * 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 when1061 * 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-device1064 * 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 mapping1065 * 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 on1066 * 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 expects1119 * 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 restrictions1124 * 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 being1125 * 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 */
1270struct 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 */
1324struct 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_CREATE1353 * struct drm_xe_exec_queue_create - Input of &DRM_IOCTL_XE_EXEC_QUEUE_CREATE
1266 *1354 *