mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 00:43:08 -04:00
drm/amdgpu: Optimize operating sysfs and interrupt function interface in amdgpu_ras.c
In order to reduce redundant struct conversion, modify operating sysfs and interrupt function interface parameters. Signed-off-by: yipechai <YiPeng.Chai@amd.com> Reviewed-by: Tao Zhou <tao.zhou1@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -1276,18 +1276,17 @@ static int amdgpu_ras_sysfs_remove_feature_node(struct amdgpu_device *adev)
|
||||
}
|
||||
|
||||
int amdgpu_ras_sysfs_create(struct amdgpu_device *adev,
|
||||
struct ras_fs_if *head)
|
||||
struct ras_common_if *head)
|
||||
{
|
||||
struct ras_manager *obj = amdgpu_ras_find_obj(adev, &head->head);
|
||||
struct ras_manager *obj = amdgpu_ras_find_obj(adev, head);
|
||||
|
||||
if (!obj || obj->attr_inuse)
|
||||
return -EINVAL;
|
||||
|
||||
get_obj(obj);
|
||||
|
||||
memcpy(obj->fs_data.sysfs_name,
|
||||
head->sysfs_name,
|
||||
sizeof(obj->fs_data.sysfs_name));
|
||||
snprintf(obj->fs_data.sysfs_name, sizeof(obj->fs_data.sysfs_name),
|
||||
"%s_err_count", head->name);
|
||||
|
||||
obj->sysfs_attr = (struct device_attribute){
|
||||
.attr = {
|
||||
@@ -1594,9 +1593,9 @@ int amdgpu_ras_interrupt_dispatch(struct amdgpu_device *adev,
|
||||
}
|
||||
|
||||
int amdgpu_ras_interrupt_remove_handler(struct amdgpu_device *adev,
|
||||
struct ras_ih_if *info)
|
||||
struct ras_common_if *head)
|
||||
{
|
||||
struct ras_manager *obj = amdgpu_ras_find_obj(adev, &info->head);
|
||||
struct ras_manager *obj = amdgpu_ras_find_obj(adev, head);
|
||||
struct ras_ih_data *data;
|
||||
|
||||
if (!obj)
|
||||
@@ -1616,24 +1615,27 @@ int amdgpu_ras_interrupt_remove_handler(struct amdgpu_device *adev,
|
||||
}
|
||||
|
||||
int amdgpu_ras_interrupt_add_handler(struct amdgpu_device *adev,
|
||||
struct ras_ih_if *info)
|
||||
struct ras_common_if *head)
|
||||
{
|
||||
struct ras_manager *obj = amdgpu_ras_find_obj(adev, &info->head);
|
||||
struct ras_manager *obj = amdgpu_ras_find_obj(adev, head);
|
||||
struct ras_ih_data *data;
|
||||
struct amdgpu_ras_block_object *ras_obj;
|
||||
|
||||
if (!obj) {
|
||||
/* in case we registe the IH before enable ras feature */
|
||||
obj = amdgpu_ras_create_obj(adev, &info->head);
|
||||
obj = amdgpu_ras_create_obj(adev, head);
|
||||
if (!obj)
|
||||
return -EINVAL;
|
||||
} else
|
||||
get_obj(obj);
|
||||
|
||||
ras_obj = container_of(head, struct amdgpu_ras_block_object, ras_comm);
|
||||
|
||||
data = &obj->ih_data;
|
||||
/* add the callback.etc */
|
||||
*data = (struct ras_ih_data) {
|
||||
.inuse = 0,
|
||||
.cb = info->cb,
|
||||
.cb = ras_obj->ras_cb,
|
||||
.element_size = sizeof(struct amdgpu_iv_entry),
|
||||
.rptr = 0,
|
||||
.wptr = 0,
|
||||
@@ -1662,10 +1664,7 @@ static int amdgpu_ras_interrupt_remove_all(struct amdgpu_device *adev)
|
||||
struct ras_manager *obj, *tmp;
|
||||
|
||||
list_for_each_entry_safe(obj, tmp, &con->head, node) {
|
||||
struct ras_ih_if info = {
|
||||
.head = obj->head,
|
||||
};
|
||||
amdgpu_ras_interrupt_remove_handler(adev, &info);
|
||||
amdgpu_ras_interrupt_remove_handler(adev, &obj->head);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -2431,12 +2430,12 @@ int amdgpu_ras_late_init(struct amdgpu_device *adev,
|
||||
return 0;
|
||||
|
||||
if (ih_info->cb) {
|
||||
r = amdgpu_ras_interrupt_add_handler(adev, ih_info);
|
||||
r = amdgpu_ras_interrupt_add_handler(adev, ras_block);
|
||||
if (r)
|
||||
goto interrupt;
|
||||
}
|
||||
|
||||
r = amdgpu_ras_sysfs_create(adev, fs_info);
|
||||
r = amdgpu_ras_sysfs_create(adev, ras_block);
|
||||
if (r)
|
||||
goto sysfs;
|
||||
|
||||
@@ -2452,7 +2451,7 @@ int amdgpu_ras_late_init(struct amdgpu_device *adev,
|
||||
amdgpu_ras_sysfs_remove(adev, ras_block);
|
||||
sysfs:
|
||||
if (ih_info->cb)
|
||||
amdgpu_ras_interrupt_remove_handler(adev, ih_info);
|
||||
amdgpu_ras_interrupt_remove_handler(adev, ras_block);
|
||||
interrupt:
|
||||
amdgpu_ras_feature_enable(adev, ras_block, 0);
|
||||
return r;
|
||||
@@ -2485,7 +2484,7 @@ void amdgpu_ras_late_fini(struct amdgpu_device *adev,
|
||||
|
||||
amdgpu_ras_sysfs_remove(adev, ras_block);
|
||||
if (ih_info->cb)
|
||||
amdgpu_ras_interrupt_remove_handler(adev, ih_info);
|
||||
amdgpu_ras_interrupt_remove_handler(adev, &ih_info->head);
|
||||
}
|
||||
|
||||
void amdgpu_ras_block_late_fini(struct amdgpu_device *adev,
|
||||
|
||||
@@ -619,7 +619,7 @@ int amdgpu_ras_feature_enable_on_boot(struct amdgpu_device *adev,
|
||||
struct ras_common_if *head, bool enable);
|
||||
|
||||
int amdgpu_ras_sysfs_create(struct amdgpu_device *adev,
|
||||
struct ras_fs_if *head);
|
||||
struct ras_common_if *head);
|
||||
|
||||
int amdgpu_ras_sysfs_remove(struct amdgpu_device *adev,
|
||||
struct ras_common_if *head);
|
||||
@@ -636,10 +636,10 @@ int amdgpu_ras_error_inject(struct amdgpu_device *adev,
|
||||
struct ras_inject_if *info);
|
||||
|
||||
int amdgpu_ras_interrupt_add_handler(struct amdgpu_device *adev,
|
||||
struct ras_ih_if *info);
|
||||
struct ras_common_if *head);
|
||||
|
||||
int amdgpu_ras_interrupt_remove_handler(struct amdgpu_device *adev,
|
||||
struct ras_ih_if *info);
|
||||
struct ras_common_if *head);
|
||||
|
||||
int amdgpu_ras_interrupt_dispatch(struct amdgpu_device *adev,
|
||||
struct ras_dispatch_if *info);
|
||||
|
||||
Reference in New Issue
Block a user