Skip to content

Commit ae9e865

Browse files
committed
Merge tag 'drm-xe-next-fixes-2026-02-19' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-next
UAPI Changes: - drm/xe: Prevent VFs from exposing the CCS mode sysfs file (Nareshkumar) Cross-subsystem Changes: - drm/pagemap: pass pagemap_addr by reference (Arnd) Driver Changes: - SRIOV related fixes (Michal, Piotr) - PAT cache fix (Jia) - MMIO read fix (Shuicheng) - W/a fixes (Roper) - Adjust type of xe_modparam.force_vram_bar_size (Shuicheng) - Wedge mode fix (Raag) - HWMon fix (Karthik) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patch.msgid.link/aZeR6CXDRbeudIVR@intel.com
2 parents 7a4a583 + 2d01d88 commit ae9e865

14 files changed

Lines changed: 72 additions & 61 deletions

File tree

drivers/gpu/drm/drm_gpusvm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1150,7 +1150,7 @@ static void __drm_gpusvm_unmap_pages(struct drm_gpusvm *gpusvm,
11501150
addr->dir);
11511151
else if (dpagemap && dpagemap->ops->device_unmap)
11521152
dpagemap->ops->device_unmap(dpagemap,
1153-
dev, *addr);
1153+
dev, addr);
11541154
i += 1 << addr->order;
11551155
}
11561156

drivers/gpu/drm/drm_pagemap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ static void drm_pagemap_migrate_unmap_pages(struct device *dev,
318318
struct drm_pagemap_zdd *zdd = page->zone_device_data;
319319
struct drm_pagemap *dpagemap = zdd->dpagemap;
320320

321-
dpagemap->ops->device_unmap(dpagemap, dev, pagemap_addr[i]);
321+
dpagemap->ops->device_unmap(dpagemap, dev, &pagemap_addr[i]);
322322
} else {
323323
dma_unmap_page(dev, pagemap_addr[i].addr,
324324
PAGE_SIZE << pagemap_addr[i].order, dir);

drivers/gpu/drm/xe/xe_bo.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1941,7 +1941,7 @@ static vm_fault_t xe_bo_cpu_fault(struct vm_fault *vmf)
19411941
int err = 0;
19421942
int idx;
19431943

1944-
if (!drm_dev_enter(&xe->drm, &idx))
1944+
if (xe_device_wedged(xe) || !drm_dev_enter(&xe->drm, &idx))
19451945
return ttm_bo_vm_dummy_page(vmf, vmf->vma->vm_page_prot);
19461946

19471947
ret = xe_bo_cpu_fault_fastpath(vmf, xe, bo, needs_rpm);

drivers/gpu/drm/xe/xe_configfs.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev);
2121
bool xe_configfs_media_gt_allowed(struct pci_dev *pdev);
2222
u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev);
2323
bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev);
24-
u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev, enum xe_engine_class,
24+
u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
25+
enum xe_engine_class class,
2526
const u32 **cs);
26-
u32 xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev, enum xe_engine_class,
27+
u32 xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
28+
enum xe_engine_class class,
2729
const u32 **cs);
2830
#ifdef CONFIG_PCI_IOV
2931
unsigned int xe_configfs_get_max_vfs(struct pci_dev *pdev);
@@ -37,9 +39,11 @@ static inline bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev) { return
3739
static inline bool xe_configfs_media_gt_allowed(struct pci_dev *pdev) { return true; }
3840
static inline u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev) { return U64_MAX; }
3941
static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return false; }
40-
static inline u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev, enum xe_engine_class,
42+
static inline u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
43+
enum xe_engine_class class,
4144
const u32 **cs) { return 0; }
42-
static inline u32 xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev, enum xe_engine_class,
45+
static inline u32 xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
46+
enum xe_engine_class class,
4347
const u32 **cs) { return 0; }
4448
static inline unsigned int xe_configfs_get_max_vfs(struct pci_dev *pdev) { return UINT_MAX; }
4549
#endif

drivers/gpu/drm/xe/xe_gt_ccs_mode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ int xe_gt_ccs_mode_sysfs_init(struct xe_gt *gt)
191191
struct xe_device *xe = gt_to_xe(gt);
192192
int err;
193193

194-
if (!xe_gt_ccs_mode_enabled(gt))
194+
if (!xe_gt_ccs_mode_enabled(gt) || IS_SRIOV_VF(xe))
195195
return 0;
196196

197197
err = sysfs_create_files(gt->sysfs, gt_ccs_mode_attrs);

drivers/gpu/drm/xe/xe_hwmon.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ enum xe_hwmon_channel {
4848
CHANNEL_MCTRL,
4949
CHANNEL_PCIE,
5050
CHANNEL_VRAM_N,
51-
CHANNEL_VRAM_N_MAX = CHANNEL_VRAM_N + MAX_VRAM_CHANNELS,
51+
CHANNEL_VRAM_N_MAX = CHANNEL_VRAM_N + MAX_VRAM_CHANNELS - 1,
5252
CHANNEL_MAX,
5353
};
5454

@@ -264,7 +264,7 @@ static struct xe_reg xe_hwmon_get_reg(struct xe_hwmon *hwmon, enum xe_hwmon_reg
264264
return BMG_PACKAGE_TEMPERATURE;
265265
else if (channel == CHANNEL_VRAM)
266266
return BMG_VRAM_TEMPERATURE;
267-
else if (in_range(channel, CHANNEL_VRAM_N, CHANNEL_VRAM_N_MAX))
267+
else if (in_range(channel, CHANNEL_VRAM_N, MAX_VRAM_CHANNELS))
268268
return BMG_VRAM_TEMPERATURE_N(channel - CHANNEL_VRAM_N);
269269
} else if (xe->info.platform == XE_DG2) {
270270
if (channel == CHANNEL_PKG)
@@ -1427,7 +1427,7 @@ static int xe_hwmon_read_label(struct device *dev,
14271427
*str = "mctrl";
14281428
else if (channel == CHANNEL_PCIE)
14291429
*str = "pcie";
1430-
else if (in_range(channel, CHANNEL_VRAM_N, CHANNEL_VRAM_N_MAX))
1430+
else if (in_range(channel, CHANNEL_VRAM_N, MAX_VRAM_CHANNELS))
14311431
*str = hwmon->temp.vram_label[channel - CHANNEL_VRAM_N];
14321432
return 0;
14331433
case hwmon_power:

drivers/gpu/drm/xe/xe_mmio.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -256,11 +256,11 @@ u64 xe_mmio_read64_2x32(struct xe_mmio *mmio, struct xe_reg reg)
256256
struct xe_reg reg_udw = { .addr = reg.addr + 0x4 };
257257
u32 ldw, udw, oldudw, retries;
258258

259-
reg.addr = xe_mmio_adjusted_addr(mmio, reg.addr);
260-
reg_udw.addr = xe_mmio_adjusted_addr(mmio, reg_udw.addr);
261-
262-
/* we shouldn't adjust just one register address */
263-
xe_tile_assert(mmio->tile, reg_udw.addr == reg.addr + 0x4);
259+
/*
260+
* The two dwords of a 64-bit register can never straddle the offset
261+
* adjustment cutoff.
262+
*/
263+
xe_tile_assert(mmio->tile, !in_range(mmio->adj_limit, reg.addr + 1, 7));
264264

265265
oldudw = xe_mmio_read32(mmio, reg_udw);
266266
for (retries = 5; retries; --retries) {

drivers/gpu/drm/xe/xe_module.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
struct xe_modparam {
1313
bool force_execlist;
1414
bool probe_display;
15-
u32 force_vram_bar_size;
15+
int force_vram_bar_size;
1616
int guc_log_level;
1717
char *guc_firmware_path;
1818
char *huc_firmware_path;

drivers/gpu/drm/xe/xe_pci.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,12 @@ static int read_gmdid(struct xe_device *xe, enum xe_gmdid_type type, u32 *ver, u
557557
struct xe_gt *gt __free(kfree) = NULL;
558558
int err;
559559

560+
/* Don't try to read media ver if media GT is not allowed */
561+
if (type == GMDID_MEDIA && !xe_configfs_media_gt_allowed(to_pci_dev(xe->drm.dev))) {
562+
*ver = *revid = 0;
563+
return 0;
564+
}
565+
560566
gt = kzalloc(sizeof(*gt), GFP_KERNEL);
561567
if (!gt)
562568
return -ENOMEM;

drivers/gpu/drm/xe/xe_sriov_pf_sysfs.c

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -349,18 +349,33 @@ static const struct attribute_group *xe_sriov_vf_attr_groups[] = {
349349

350350
/* no user serviceable parts below */
351351

352-
static struct kobject *create_xe_sriov_kobj(struct xe_device *xe, unsigned int vfid)
352+
static void action_put_kobject(void *arg)
353+
{
354+
struct kobject *kobj = arg;
355+
356+
kobject_put(kobj);
357+
}
358+
359+
static struct kobject *create_xe_sriov_kobj(struct xe_device *xe, unsigned int vfid,
360+
const struct kobj_type *ktype)
353361
{
354362
struct xe_sriov_kobj *vkobj;
363+
int err;
355364

356365
xe_sriov_pf_assert_vfid(xe, vfid);
357366

358367
vkobj = kzalloc(sizeof(*vkobj), GFP_KERNEL);
359368
if (!vkobj)
360-
return NULL;
369+
return ERR_PTR(-ENOMEM);
361370

362371
vkobj->xe = xe;
363372
vkobj->vfid = vfid;
373+
kobject_init(&vkobj->base, ktype);
374+
375+
err = devm_add_action_or_reset(xe->drm.dev, action_put_kobject, &vkobj->base);
376+
if (err)
377+
return ERR_PTR(err);
378+
364379
return &vkobj->base;
365380
}
366381

@@ -463,28 +478,17 @@ static void pf_sysfs_note(struct xe_device *xe, int err, const char *what)
463478
xe_sriov_dbg(xe, "Failed to setup sysfs %s (%pe)\n", what, ERR_PTR(err));
464479
}
465480

466-
static void action_put_kobject(void *arg)
467-
{
468-
struct kobject *kobj = arg;
469-
470-
kobject_put(kobj);
471-
}
472-
473481
static int pf_setup_root(struct xe_device *xe)
474482
{
475483
struct kobject *parent = &xe->drm.dev->kobj;
476484
struct kobject *root;
477485
int err;
478486

479-
root = create_xe_sriov_kobj(xe, PFID);
480-
if (!root)
481-
return pf_sysfs_error(xe, -ENOMEM, "root obj");
482-
483-
err = devm_add_action_or_reset(xe->drm.dev, action_put_kobject, root);
484-
if (err)
485-
return pf_sysfs_error(xe, err, "root action");
487+
root = create_xe_sriov_kobj(xe, PFID, &xe_sriov_dev_ktype);
488+
if (IS_ERR(root))
489+
return pf_sysfs_error(xe, PTR_ERR(root), "root obj");
486490

487-
err = kobject_init_and_add(root, &xe_sriov_dev_ktype, parent, "sriov_admin");
491+
err = kobject_add(root, parent, "sriov_admin");
488492
if (err)
489493
return pf_sysfs_error(xe, err, "root init");
490494

@@ -505,20 +509,14 @@ static int pf_setup_tree(struct xe_device *xe)
505509
root = xe->sriov.pf.sysfs.root;
506510

507511
for (n = 0; n <= totalvfs; n++) {
508-
kobj = create_xe_sriov_kobj(xe, VFID(n));
509-
if (!kobj)
510-
return pf_sysfs_error(xe, -ENOMEM, "tree obj");
511-
512-
err = devm_add_action_or_reset(xe->drm.dev, action_put_kobject, root);
513-
if (err)
514-
return pf_sysfs_error(xe, err, "tree action");
512+
kobj = create_xe_sriov_kobj(xe, VFID(n), &xe_sriov_vf_ktype);
513+
if (IS_ERR(kobj))
514+
return pf_sysfs_error(xe, PTR_ERR(kobj), "tree obj");
515515

516516
if (n)
517-
err = kobject_init_and_add(kobj, &xe_sriov_vf_ktype,
518-
root, "vf%u", n);
517+
err = kobject_add(kobj, root, "vf%u", n);
519518
else
520-
err = kobject_init_and_add(kobj, &xe_sriov_vf_ktype,
521-
root, "pf");
519+
err = kobject_add(kobj, root, "pf");
522520
if (err)
523521
return pf_sysfs_error(xe, err, "tree init");
524522

0 commit comments

Comments
 (0)