Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit 2f73503

Browse files
committed
Merge tag 'drm-misc-fixes-2024-03-28' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-fixes
Short summary of fixes pull: bridge: - select DRM_KMS_HELPER dma-buf: - fix NULL-pointer deref dp: - fix div-by-zero in DP MST unplug code fbdev: - select FB_IOMEM_FOPS for SBus nouveau: - dmem: handle kcalloc() allocation failures qxl: - remove unused variables rockchip: - vop2: remove support for AR30 and AB30 formats sched: - fix NULL-pointer deref vmwgfx: - debugfs: create ttm_resource_manager entry only if needed Signed-off-by: Dave Airlie <airlied@redhat.com> From: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patchwork.freedesktop.org/patch/msgid/20240328134417.GA8673@localhost.localdomain
2 parents 197aa82 + aba2a14 commit 2f73503

File tree

9 files changed

+38
-25
lines changed

9 files changed

+38
-25
lines changed

drivers/dma-buf/st-dma-fence-chain.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,11 @@ static int sanitycheck(void *arg)
8484
return -ENOMEM;
8585

8686
chain = mock_chain(NULL, f, 1);
87-
if (!chain)
87+
if (chain)
88+
dma_fence_enable_sw_signaling(chain);
89+
else
8890
err = -ENOMEM;
8991

90-
dma_fence_enable_sw_signaling(chain);
91-
9292
dma_fence_signal(f);
9393
dma_fence_put(f);
9494

drivers/gpu/drm/display/drm_dp_helper.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4111,6 +4111,13 @@ int drm_dp_bw_overhead(int lane_count, int hactive,
41114111
u32 overhead = 1000000;
41124112
int symbol_cycles;
41134113

4114+
if (lane_count == 0 || hactive == 0 || bpp_x16 == 0) {
4115+
DRM_DEBUG_KMS("Invalid BW overhead params: lane_count %d, hactive %d, bpp_x16 %d.%04d\n",
4116+
lane_count, hactive,
4117+
bpp_x16 >> 4, (bpp_x16 & 0xf) * 625);
4118+
return 0;
4119+
}
4120+
41144121
/*
41154122
* DP Standard v2.1 2.6.4.1
41164123
* SSC downspread and ref clock variation margin:

drivers/gpu/drm/nouveau/nouveau_dmem.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -378,9 +378,9 @@ nouveau_dmem_evict_chunk(struct nouveau_dmem_chunk *chunk)
378378
dma_addr_t *dma_addrs;
379379
struct nouveau_fence *fence;
380380

381-
src_pfns = kcalloc(npages, sizeof(*src_pfns), GFP_KERNEL);
382-
dst_pfns = kcalloc(npages, sizeof(*dst_pfns), GFP_KERNEL);
383-
dma_addrs = kcalloc(npages, sizeof(*dma_addrs), GFP_KERNEL);
381+
src_pfns = kvcalloc(npages, sizeof(*src_pfns), GFP_KERNEL | __GFP_NOFAIL);
382+
dst_pfns = kvcalloc(npages, sizeof(*dst_pfns), GFP_KERNEL | __GFP_NOFAIL);
383+
dma_addrs = kvcalloc(npages, sizeof(*dma_addrs), GFP_KERNEL | __GFP_NOFAIL);
384384

385385
migrate_device_range(src_pfns, chunk->pagemap.range.start >> PAGE_SHIFT,
386386
npages);
@@ -406,11 +406,11 @@ nouveau_dmem_evict_chunk(struct nouveau_dmem_chunk *chunk)
406406
migrate_device_pages(src_pfns, dst_pfns, npages);
407407
nouveau_dmem_fence_done(&fence);
408408
migrate_device_finalize(src_pfns, dst_pfns, npages);
409-
kfree(src_pfns);
410-
kfree(dst_pfns);
409+
kvfree(src_pfns);
410+
kvfree(dst_pfns);
411411
for (i = 0; i < npages; i++)
412412
dma_unmap_page(chunk->drm->dev->dev, dma_addrs[i], PAGE_SIZE, DMA_BIDIRECTIONAL);
413-
kfree(dma_addrs);
413+
kvfree(dma_addrs);
414414
}
415415

416416
void

drivers/gpu/drm/qxl/qxl_cmd.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,6 @@ int qxl_surface_id_alloc(struct qxl_device *qdev,
421421
{
422422
uint32_t handle;
423423
int idr_ret;
424-
int count = 0;
425424
again:
426425
idr_preload(GFP_ATOMIC);
427426
spin_lock(&qdev->surf_id_idr_lock);
@@ -433,7 +432,6 @@ int qxl_surface_id_alloc(struct qxl_device *qdev,
433432
handle = idr_ret;
434433

435434
if (handle >= qdev->rom->n_surfaces) {
436-
count++;
437435
spin_lock(&qdev->surf_id_idr_lock);
438436
idr_remove(&qdev->surf_id_idr, handle);
439437
spin_unlock(&qdev->surf_id_idr_lock);

drivers/gpu/drm/qxl/qxl_ioctl.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ static int qxl_process_single_command(struct qxl_device *qdev,
145145
struct qxl_release *release;
146146
struct qxl_bo *cmd_bo;
147147
void *fb_cmd;
148-
int i, ret, num_relocs;
148+
int i, ret;
149149
int unwritten;
150150

151151
switch (cmd->type) {
@@ -200,7 +200,6 @@ static int qxl_process_single_command(struct qxl_device *qdev,
200200
}
201201

202202
/* fill out reloc info structs */
203-
num_relocs = 0;
204203
for (i = 0; i < cmd->relocs_num; ++i) {
205204
struct drm_qxl_reloc reloc;
206205
struct drm_qxl_reloc __user *u = u64_to_user_ptr(cmd->relocs);
@@ -230,7 +229,6 @@ static int qxl_process_single_command(struct qxl_device *qdev,
230229
reloc_info[i].dst_bo = cmd_bo;
231230
reloc_info[i].dst_offset = reloc.dst_offset + release->release_offset;
232231
}
233-
num_relocs++;
234232

235233
/* reserve and validate the reloc dst bo */
236234
if (reloc.reloc_type == QXL_RELOC_TYPE_BO || reloc.src_handle) {

drivers/gpu/drm/rockchip/rockchip_vop2_reg.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@
1717

1818
static const uint32_t formats_cluster[] = {
1919
DRM_FORMAT_XRGB2101010,
20-
DRM_FORMAT_ARGB2101010,
2120
DRM_FORMAT_XBGR2101010,
22-
DRM_FORMAT_ABGR2101010,
2321
DRM_FORMAT_XRGB8888,
2422
DRM_FORMAT_ARGB8888,
2523
DRM_FORMAT_XBGR8888,

drivers/gpu/drm/scheduler/sched_entity.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,19 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
7171
entity->guilty = guilty;
7272
entity->num_sched_list = num_sched_list;
7373
entity->priority = priority;
74+
/*
75+
* It's perfectly valid to initialize an entity without having a valid
76+
* scheduler attached. It's just not valid to use the scheduler before it
77+
* is initialized itself.
78+
*/
7479
entity->sched_list = num_sched_list > 1 ? sched_list : NULL;
7580
RCU_INIT_POINTER(entity->last_scheduled, NULL);
7681
RB_CLEAR_NODE(&entity->rb_tree_node);
7782

78-
if (!sched_list[0]->sched_rq) {
79-
/* Warn drivers not to do this and to fix their DRM
80-
* calling order.
83+
if (num_sched_list && !sched_list[0]->sched_rq) {
84+
/* Since every entry covered by num_sched_list
85+
* should be non-NULL and therefore we warn drivers
86+
* not to do this and to fix their DRM calling order.
8187
*/
8288
pr_warn("%s: called with uninitialized scheduler\n", __func__);
8389
} else if (num_sched_list) {

drivers/gpu/drm/vmwgfx/vmwgfx_drv.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1444,12 +1444,15 @@ static void vmw_debugfs_resource_managers_init(struct vmw_private *vmw)
14441444
root, "system_ttm");
14451445
ttm_resource_manager_create_debugfs(ttm_manager_type(&vmw->bdev, TTM_PL_VRAM),
14461446
root, "vram_ttm");
1447-
ttm_resource_manager_create_debugfs(ttm_manager_type(&vmw->bdev, VMW_PL_GMR),
1448-
root, "gmr_ttm");
1449-
ttm_resource_manager_create_debugfs(ttm_manager_type(&vmw->bdev, VMW_PL_MOB),
1450-
root, "mob_ttm");
1451-
ttm_resource_manager_create_debugfs(ttm_manager_type(&vmw->bdev, VMW_PL_SYSTEM),
1452-
root, "system_mob_ttm");
1447+
if (vmw->has_gmr)
1448+
ttm_resource_manager_create_debugfs(ttm_manager_type(&vmw->bdev, VMW_PL_GMR),
1449+
root, "gmr_ttm");
1450+
if (vmw->has_mob) {
1451+
ttm_resource_manager_create_debugfs(ttm_manager_type(&vmw->bdev, VMW_PL_MOB),
1452+
root, "mob_ttm");
1453+
ttm_resource_manager_create_debugfs(ttm_manager_type(&vmw->bdev, VMW_PL_SYSTEM),
1454+
root, "system_mob_ttm");
1455+
}
14531456
}
14541457

14551458
static int vmwgfx_pm_notifier(struct notifier_block *nb, unsigned long val,

drivers/video/fbdev/Kconfig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,7 @@ config FB_SBUS_HELPERS
494494
select FB_CFB_COPYAREA
495495
select FB_CFB_FILLRECT
496496
select FB_CFB_IMAGEBLIT
497+
select FB_IOMEM_FOPS
497498

498499
config FB_BW2
499500
bool "BWtwo support"
@@ -514,6 +515,7 @@ config FB_CG6
514515
depends on (FB = y) && (SPARC && FB_SBUS)
515516
select FB_CFB_COPYAREA
516517
select FB_CFB_IMAGEBLIT
518+
select FB_IOMEM_FOPS
517519
help
518520
This is the frame buffer device driver for the CGsix (GX, TurboGX)
519521
frame buffer.
@@ -523,6 +525,7 @@ config FB_FFB
523525
depends on FB_SBUS && SPARC64
524526
select FB_CFB_COPYAREA
525527
select FB_CFB_IMAGEBLIT
528+
select FB_IOMEM_FOPS
526529
help
527530
This is the frame buffer device driver for the Creator, Creator3D,
528531
and Elite3D graphics boards.

0 commit comments

Comments
 (0)