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)

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Matthew Brost <matthew.brost@intel.com>
Link: https://patch.msgid.link/acS5xmWC3ivPTmyV@gsse-cloud1.jf.intel.com
This commit is contained in:
Dave Airlie
2026-03-27 11:01:44 +10:00
56 changed files with 1340 additions and 293 deletions

View File

@@ -83,6 +83,7 @@ extern "C" {
* - &DRM_IOCTL_XE_OBSERVATION
* - &DRM_IOCTL_XE_MADVISE
* - &DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS
* - &DRM_IOCTL_XE_VM_GET_PROPERTY
*/
/*
@@ -107,6 +108,7 @@ extern "C" {
#define DRM_XE_MADVISE 0x0c
#define DRM_XE_VM_QUERY_MEM_RANGE_ATTRS 0x0d
#define DRM_XE_EXEC_QUEUE_SET_PROPERTY 0x0e
#define DRM_XE_VM_GET_PROPERTY 0x0f
/* Must be kept compact -- no holes */
@@ -125,6 +127,7 @@ extern "C" {
#define DRM_IOCTL_XE_MADVISE DRM_IOW(DRM_COMMAND_BASE + DRM_XE_MADVISE, struct drm_xe_madvise)
#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)
#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)
#define DRM_IOCTL_XE_VM_GET_PROPERTY DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_VM_GET_PROPERTY, struct drm_xe_vm_get_property)
/**
* DOC: Xe IOCTL Extensions
@@ -1057,7 +1060,7 @@ struct drm_xe_vm_destroy {
* not invoke autoreset. Neither will stack variables going out of scope.
* Therefore it's recommended to always explicitly reset the madvises when
* freeing the memory backing a region used in a &DRM_IOCTL_XE_MADVISE call.
* - DRM_XE_VM_BIND_FLAG_DECOMPRESS - Request on-device decompression for a MAP.
* - %DRM_XE_VM_BIND_FLAG_DECOMPRESS - Request on-device decompression for a MAP.
* When set on a MAP bind operation, request the driver schedule an on-device
* in-place decompression (via the migrate/resolve path) for the GPU mapping
* 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 {
* incoherent GT access is possible.
*
* Note: For userptr and externally imported dma-buf the kernel expects
* either 1WAY or 2WAY for the @pat_index.
* either 1WAY or 2WAY for the @pat_index. Starting from NVL-P, for
* userptr, svm, madvise and externally imported dma-buf the kernel expects
* either 2WAY or 1WAY and XA @pat_index.
*
* For DRM_XE_VM_BIND_FLAG_NULL bindings there are no KMD restrictions
* on the @pat_index. For such mappings there is no actual memory being
@@ -1261,6 +1266,89 @@ struct drm_xe_vm_bind {
__u64 reserved[2];
};
/** struct xe_vm_fault - Describes faults for %DRM_XE_VM_GET_PROPERTY_FAULTS */
struct xe_vm_fault {
/** @address: Canonical address of the fault */
__u64 address;
/** @address_precision: Precision of faulted address */
__u32 address_precision;
/** @access_type: Type of address access that resulted in fault */
#define FAULT_ACCESS_TYPE_READ 0
#define FAULT_ACCESS_TYPE_WRITE 1
#define FAULT_ACCESS_TYPE_ATOMIC 2
__u8 access_type;
/** @fault_type: Type of fault reported */
#define FAULT_TYPE_NOT_PRESENT 0
#define FAULT_TYPE_WRITE_ACCESS 1
#define FAULT_TYPE_ATOMIC_ACCESS 2
__u8 fault_type;
/** @fault_level: fault level of the fault */
#define FAULT_LEVEL_PTE 0
#define FAULT_LEVEL_PDE 1
#define FAULT_LEVEL_PDP 2
#define FAULT_LEVEL_PML4 3
#define FAULT_LEVEL_PML5 4
__u8 fault_level;
/** @pad: MBZ */
__u8 pad;
/** @reserved: MBZ */
__u64 reserved[4];
};
/**
* struct drm_xe_vm_get_property - Input of &DRM_IOCTL_XE_VM_GET_PROPERTY
*
* The user provides a VM and a property to query among DRM_XE_VM_GET_PROPERTY_*,
* and sets the values in the vm_id and property members, respectively. This
* determines both the VM to get the property of, as well as the property to
* report.
*
* If size is set to 0, the driver fills it with the required size for the
* requested property. The user is expected here to allocate memory for the
* property structure and to provide a pointer to the allocated memory using the
* data member. For some properties, this may be zero, in which case, the
* value of the property will be saved to the value member and size will remain
* zero on return.
*
* If size is not zero, then the IOCTL will attempt to copy the requested
* property into the data member.
*
* The IOCTL will return -ENOENT if the VM could not be identified from the
* provided VM ID, or -EINVAL if the IOCTL fails for any other reason, such as
* providing an invalid size for the given property or if the property data
* could not be copied to the memory allocated to the data member.
*
* The property member can be:
* - %DRM_XE_VM_GET_PROPERTY_FAULTS
*/
struct drm_xe_vm_get_property {
/** @extensions: Pointer to the first extension struct, if any */
__u64 extensions;
/** @vm_id: The ID of the VM to query the properties of */
__u32 vm_id;
#define DRM_XE_VM_GET_PROPERTY_FAULTS 0
/** @property: property to get */
__u32 property;
/** @size: Size to allocate for @data */
__u32 size;
/** @pad: MBZ */
__u32 pad;
union {
/** @data: Pointer to user-defined array of flexible size and type */
__u64 data;
/** @value: Return value for scalar queries */
__u64 value;
};
/** @reserved: MBZ */
__u64 reserved[3];
};
/**
* struct drm_xe_exec_queue_create - Input of &DRM_IOCTL_XE_EXEC_QUEUE_CREATE
*