drivers/gpu/drm/xe/xe_gt_sysfs.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/xe/xe_gt_sysfs.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/xe/xe_gt_sysfs.c
Extension
.c
Size
997 bytes
Lines
56
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

// SPDX-License-Identifier: MIT
/*
 * Copyright © 2022 Intel Corporation
 */

#include "xe_gt_sysfs.h"

#include <linux/kobject.h>
#include <linux/sysfs.h>

#include <drm/drm_managed.h>

#include "xe_gt_types.h"

static void xe_gt_sysfs_kobj_release(struct kobject *kobj)
{
	kfree(kobj);
}

static const struct kobj_type xe_gt_sysfs_kobj_type = {
	.release = xe_gt_sysfs_kobj_release,
	.sysfs_ops = &kobj_sysfs_ops,
};

static void gt_sysfs_fini(void *arg)
{
	struct xe_gt *gt = arg;

	kobject_put(gt->sysfs);
}

int xe_gt_sysfs_init(struct xe_gt *gt)
{
	struct xe_tile *tile = gt_to_tile(gt);
	struct xe_device *xe = gt_to_xe(gt);
	struct kobj_gt *kg;
	int err;

	kg = kzalloc_obj(*kg);
	if (!kg)
		return -ENOMEM;

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

	err = kobject_add(&kg->base, tile->sysfs, "gt%d", gt->info.id);
	if (err) {
		kobject_put(&kg->base);
		return err;
	}

	gt->sysfs = &kg->base;

	return devm_add_action_or_reset(xe->drm.dev, gt_sysfs_fini, gt);
}

Annotation

Implementation Notes