Commit 9252d33d authored by yipechai's avatar yipechai Committed by Alex Deucher

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: default avataryipechai <YiPeng.Chai@amd.com>
Reviewed-by: default avatarTao Zhou <tao.zhou1@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 892a57a9
...@@ -1276,18 +1276,17 @@ static int amdgpu_ras_sysfs_remove_feature_node(struct amdgpu_device *adev) ...@@ -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, 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) if (!obj || obj->attr_inuse)
return -EINVAL; return -EINVAL;
get_obj(obj); get_obj(obj);
memcpy(obj->fs_data.sysfs_name, snprintf(obj->fs_data.sysfs_name, sizeof(obj->fs_data.sysfs_name),
head->sysfs_name, "%s_err_count", head->name);
sizeof(obj->fs_data.sysfs_name));
obj->sysfs_attr = (struct device_attribute){ obj->sysfs_attr = (struct device_attribute){
.attr = { .attr = {
...@@ -1594,9 +1593,9 @@ int amdgpu_ras_interrupt_dispatch(struct amdgpu_device *adev, ...@@ -1594,9 +1593,9 @@ int amdgpu_ras_interrupt_dispatch(struct amdgpu_device *adev,
} }
int amdgpu_ras_interrupt_remove_handler(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; struct ras_ih_data *data;
if (!obj) if (!obj)
...@@ -1616,24 +1615,27 @@ int amdgpu_ras_interrupt_remove_handler(struct amdgpu_device *adev, ...@@ -1616,24 +1615,27 @@ int amdgpu_ras_interrupt_remove_handler(struct amdgpu_device *adev,
} }
int amdgpu_ras_interrupt_add_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 ras_ih_data *data;
struct amdgpu_ras_block_object *ras_obj;
if (!obj) { if (!obj) {
/* in case we registe the IH before enable ras feature */ /* 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) if (!obj)
return -EINVAL; return -EINVAL;
} else } else
get_obj(obj); get_obj(obj);
ras_obj = container_of(head, struct amdgpu_ras_block_object, ras_comm);
data = &obj->ih_data; data = &obj->ih_data;
/* add the callback.etc */ /* add the callback.etc */
*data = (struct ras_ih_data) { *data = (struct ras_ih_data) {
.inuse = 0, .inuse = 0,
.cb = info->cb, .cb = ras_obj->ras_cb,
.element_size = sizeof(struct amdgpu_iv_entry), .element_size = sizeof(struct amdgpu_iv_entry),
.rptr = 0, .rptr = 0,
.wptr = 0, .wptr = 0,
...@@ -1662,10 +1664,7 @@ static int amdgpu_ras_interrupt_remove_all(struct amdgpu_device *adev) ...@@ -1662,10 +1664,7 @@ static int amdgpu_ras_interrupt_remove_all(struct amdgpu_device *adev)
struct ras_manager *obj, *tmp; struct ras_manager *obj, *tmp;
list_for_each_entry_safe(obj, tmp, &con->head, node) { list_for_each_entry_safe(obj, tmp, &con->head, node) {
struct ras_ih_if info = { amdgpu_ras_interrupt_remove_handler(adev, &obj->head);
.head = obj->head,
};
amdgpu_ras_interrupt_remove_handler(adev, &info);
} }
return 0; return 0;
...@@ -2431,12 +2430,12 @@ int amdgpu_ras_late_init(struct amdgpu_device *adev, ...@@ -2431,12 +2430,12 @@ int amdgpu_ras_late_init(struct amdgpu_device *adev,
return 0; return 0;
if (ih_info->cb) { if (ih_info->cb) {
r = amdgpu_ras_interrupt_add_handler(adev, ih_info); r = amdgpu_ras_interrupt_add_handler(adev, ras_block);
if (r) if (r)
goto interrupt; goto interrupt;
} }
r = amdgpu_ras_sysfs_create(adev, fs_info); r = amdgpu_ras_sysfs_create(adev, ras_block);
if (r) if (r)
goto sysfs; goto sysfs;
...@@ -2452,7 +2451,7 @@ int amdgpu_ras_late_init(struct amdgpu_device *adev, ...@@ -2452,7 +2451,7 @@ int amdgpu_ras_late_init(struct amdgpu_device *adev,
amdgpu_ras_sysfs_remove(adev, ras_block); amdgpu_ras_sysfs_remove(adev, ras_block);
sysfs: sysfs:
if (ih_info->cb) if (ih_info->cb)
amdgpu_ras_interrupt_remove_handler(adev, ih_info); amdgpu_ras_interrupt_remove_handler(adev, ras_block);
interrupt: interrupt:
amdgpu_ras_feature_enable(adev, ras_block, 0); amdgpu_ras_feature_enable(adev, ras_block, 0);
return r; return r;
...@@ -2485,7 +2484,7 @@ void amdgpu_ras_late_fini(struct amdgpu_device *adev, ...@@ -2485,7 +2484,7 @@ void amdgpu_ras_late_fini(struct amdgpu_device *adev,
amdgpu_ras_sysfs_remove(adev, ras_block); amdgpu_ras_sysfs_remove(adev, ras_block);
if (ih_info->cb) 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, 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, ...@@ -619,7 +619,7 @@ int amdgpu_ras_feature_enable_on_boot(struct amdgpu_device *adev,
struct ras_common_if *head, bool enable); struct ras_common_if *head, bool enable);
int amdgpu_ras_sysfs_create(struct amdgpu_device *adev, 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, int amdgpu_ras_sysfs_remove(struct amdgpu_device *adev,
struct ras_common_if *head); struct ras_common_if *head);
...@@ -636,10 +636,10 @@ int amdgpu_ras_error_inject(struct amdgpu_device *adev, ...@@ -636,10 +636,10 @@ int amdgpu_ras_error_inject(struct amdgpu_device *adev,
struct ras_inject_if *info); struct ras_inject_if *info);
int amdgpu_ras_interrupt_add_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);
int amdgpu_ras_interrupt_remove_handler(struct amdgpu_device *adev, 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, int amdgpu_ras_interrupt_dispatch(struct amdgpu_device *adev,
struct ras_dispatch_if *info); struct ras_dispatch_if *info);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment