Commit 3f0acf25 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-intel-fixes-2022-06-16' of...

Merge tag 'drm-intel-fixes-2022-06-16' of git://anongit.freedesktop.org/drm/drm-intel

 into drm-fixes

drm/i915 fixes for v5.19-rc3:
- Fix page fault on error state read
- Fix memory leaks in per-gt sysfs
- Fix multiple fence handling
- Remove accidental static from a local variable

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
From: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/8735g5xd25.fsf@intel.com
parents 2f90ec12 2636e008
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -999,7 +999,8 @@ static int eb_validate_vmas(struct i915_execbuffer *eb)
			}
		}

		err = dma_resv_reserve_fences(vma->obj->base.resv, 1);
		/* Reserve enough slots to accommodate composite fences */
		err = dma_resv_reserve_fences(vma->obj->base.resv, eb->num_batches);
		if (err)
			return err;

+1 −0
Original line number Diff line number Diff line
@@ -785,6 +785,7 @@ void intel_gt_driver_unregister(struct intel_gt *gt)
{
	intel_wakeref_t wakeref;

	intel_gt_sysfs_unregister(gt);
	intel_rps_driver_unregister(&gt->rps);
	intel_gsc_fini(&gt->gsc);

+12 −17
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ bool is_object_gt(struct kobject *kobj)

static struct intel_gt *kobj_to_gt(struct kobject *kobj)
{
	return container_of(kobj, struct kobj_gt, base)->gt;
	return container_of(kobj, struct intel_gt, sysfs_gt);
}

struct intel_gt *intel_gt_sysfs_get_drvdata(struct device *dev,
@@ -72,9 +72,9 @@ static struct attribute *id_attrs[] = {
};
ATTRIBUTE_GROUPS(id);

/* A kobject needs a release() method even if it does nothing */
static void kobj_gt_release(struct kobject *kobj)
{
	kfree(kobj);
}

static struct kobj_type kobj_gt_type = {
@@ -85,8 +85,6 @@ static struct kobj_type kobj_gt_type = {

void intel_gt_sysfs_register(struct intel_gt *gt)
{
	struct kobj_gt *kg;

	/*
	 * We need to make things right with the
	 * ABI compatibility. The files were originally
@@ -98,25 +96,22 @@ void intel_gt_sysfs_register(struct intel_gt *gt)
	if (gt_is_root(gt))
		intel_gt_sysfs_pm_init(gt, gt_get_parent_obj(gt));

	kg = kzalloc(sizeof(*kg), GFP_KERNEL);
	if (!kg)
	/* init and xfer ownership to sysfs tree */
	if (kobject_init_and_add(&gt->sysfs_gt, &kobj_gt_type,
				 gt->i915->sysfs_gt, "gt%d", gt->info.id))
		goto exit_fail;

	kobject_init(&kg->base, &kobj_gt_type);
	kg->gt = gt;

	/* xfer ownership to sysfs tree */
	if (kobject_add(&kg->base, gt->i915->sysfs_gt, "gt%d", gt->info.id))
		goto exit_kobj_put;

	intel_gt_sysfs_pm_init(gt, &kg->base);
	intel_gt_sysfs_pm_init(gt, &gt->sysfs_gt);

	return;

exit_kobj_put:
	kobject_put(&kg->base);

exit_fail:
	kobject_put(&gt->sysfs_gt);
	drm_warn(&gt->i915->drm,
		 "failed to initialize gt%d sysfs root\n", gt->info.id);
}

void intel_gt_sysfs_unregister(struct intel_gt *gt)
{
	kobject_put(&gt->sysfs_gt);
}
+1 −5
Original line number Diff line number Diff line
@@ -13,11 +13,6 @@

struct intel_gt;

struct kobj_gt {
	struct kobject base;
	struct intel_gt *gt;
};

bool is_object_gt(struct kobject *kobj);

struct drm_i915_private *kobj_to_i915(struct kobject *kobj);
@@ -28,6 +23,7 @@ intel_gt_create_kobj(struct intel_gt *gt,
		     const char *name);

void intel_gt_sysfs_register(struct intel_gt *gt);
void intel_gt_sysfs_unregister(struct intel_gt *gt);
struct intel_gt *intel_gt_sysfs_get_drvdata(struct device *dev,
					    const char *name);

+3 −0
Original line number Diff line number Diff line
@@ -224,6 +224,9 @@ struct intel_gt {
	} mocs;

	struct intel_pxp pxp;

	/* gt/gtN sysfs */
	struct kobject sysfs_gt;
};

enum intel_gt_scratch_field {
Loading