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
8383 * - &DRM_IOCTL_XE_OBSERVATION
8484 * - &DRM_IOCTL_XE_MADVISE
8585 * - &DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS
86+ * - &DRM_IOCTL_XE_VM_GET_PROPERTY
8687 */
8788
8889 /*
@@ -107,6 +108,7 @@ extern "C" { · 18 unmodified lines
107108 #define DRM_XE_MADVISE 0x0c
108109 #define DRM_XE_VM_QUERY_MEM_RANGE_ATTRS 0x0d
109110 #define DRM_XE_EXEC_QUEUE_SET_PROPERTY 0x0e
111+#define DRM_XE_VM_GET_PROPERTY 0x0f
110112
111113 /* Must be kept compact -- no holes */
112114
@@ -125,6 +127,7 @@ extern "C" { · 12 unmodified lines
125127 #define DRM_IOCTL_XE_MADVISE DRM_IOW(DRM_COMMAND_BASE + DRM_XE_MADVISE, struct drm_xe_madvise)
126128 #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)
127129 #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)
128131
129132 /**
130133 * DOC: Xe IOCTL Extensions
@@ -1057,7 +1060,7 @@ struct drm_xe_vm_destroy { · 926 unmodified lines
10571060 * not invoke autoreset. Neither will stack variables going out of scope.
10581061 * Therefore it's recommended to always explicitly reset the madvises when
10591062 * 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.
10611064 * When set on a MAP bind operation, request the driver schedule an on-device
10621065 * in-place decompression (via the migrate/resolve path) for the GPU mapping
10631066 * 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
11141117 * incoherent GT access is possible.
11151118 *
11161119 * 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.
11181123 *
11191124 * For DRM_XE_VM_BIND_FLAG_NULL bindings there are no KMD restrictions
11201125 * 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
12611266 __u64 reserved[2];
12621267 };
12631268
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+
12641352 /**
12651353 * struct drm_xe_exec_queue_create - Input of &DRM_IOCTL_XE_EXEC_QUEUE_CREATE
12661354 *