Commit fe0ce0d6 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-xe-fixes-2024-08-08' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes



- Fix off-by-one when processing RTP rules (Lucas)
- Use dma_fence_chain_free in chain fence unused as a sync (Brost)
- Fix PL1 disable flow in xe_hwmon_power_max_write (Karthik)
- Take ref to VM in delayed dump snapshot (Brost)

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/ZrUGgVrgTJ_vF2PS@intel.com
parents a507e750 642dfc9d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -203,9 +203,10 @@ static int xe_hwmon_power_max_write(struct xe_hwmon *hwmon, int channel, long va
		reg_val = xe_mmio_rmw32(hwmon->gt, rapl_limit, PKG_PWR_LIM_1_EN, 0);
		reg_val = xe_mmio_read32(hwmon->gt, rapl_limit);
		if (reg_val & PKG_PWR_LIM_1_EN) {
			drm_warn(&gt_to_xe(hwmon->gt)->drm, "PL1 disable is not supported!\n");
			ret = -EOPNOTSUPP;
			goto unlock;
		}
		goto unlock;
	}

	/* Computation in 64-bits to avoid overflow. Round to nearest. */
+14 −1
Original line number Diff line number Diff line
@@ -1634,6 +1634,9 @@ struct xe_lrc_snapshot *xe_lrc_snapshot_capture(struct xe_lrc *lrc)
	if (!snapshot)
		return NULL;

	if (lrc->bo && lrc->bo->vm)
		xe_vm_get(lrc->bo->vm);

	snapshot->context_desc = xe_lrc_ggtt_addr(lrc);
	snapshot->indirect_context_desc = xe_lrc_indirect_ring_ggtt_addr(lrc);
	snapshot->head = xe_lrc_ring_head(lrc);
@@ -1653,12 +1656,14 @@ struct xe_lrc_snapshot *xe_lrc_snapshot_capture(struct xe_lrc *lrc)
void xe_lrc_snapshot_capture_delayed(struct xe_lrc_snapshot *snapshot)
{
	struct xe_bo *bo;
	struct xe_vm *vm;
	struct iosys_map src;

	if (!snapshot)
		return;

	bo = snapshot->lrc_bo;
	vm = bo->vm;
	snapshot->lrc_bo = NULL;

	snapshot->lrc_snapshot = kvmalloc(snapshot->lrc_size, GFP_KERNEL);
@@ -1678,6 +1683,8 @@ void xe_lrc_snapshot_capture_delayed(struct xe_lrc_snapshot *snapshot)
	xe_bo_unlock(bo);
put_bo:
	xe_bo_put(bo);
	if (vm)
		xe_vm_put(vm);
}

void xe_lrc_snapshot_print(struct xe_lrc_snapshot *snapshot, struct drm_printer *p)
@@ -1727,8 +1734,14 @@ void xe_lrc_snapshot_free(struct xe_lrc_snapshot *snapshot)
		return;

	kvfree(snapshot->lrc_snapshot);
	if (snapshot->lrc_bo)
	if (snapshot->lrc_bo) {
		struct xe_vm *vm;

		vm = snapshot->lrc_bo->vm;
		xe_bo_put(snapshot->lrc_bo);
		if (vm)
			xe_vm_put(vm);
	}
	kfree(snapshot);
}

+1 −1
Original line number Diff line number Diff line
@@ -231,7 +231,7 @@ static void rtp_mark_active(struct xe_device *xe,
	if (first == last)
		bitmap_set(ctx->active_entries, first, 1);
	else
		bitmap_set(ctx->active_entries, first, last - first + 2);
		bitmap_set(ctx->active_entries, first, last - first + 1);
}

/**
+1 −1
Original line number Diff line number Diff line
@@ -263,7 +263,7 @@ void xe_sync_entry_cleanup(struct xe_sync_entry *sync)
	if (sync->fence)
		dma_fence_put(sync->fence);
	if (sync->chain_fence)
		dma_fence_put(&sync->chain_fence->base);
		dma_fence_chain_free(sync->chain_fence);
	if (sync->ufence)
		user_fence_put(sync->ufence);
}