Lines Matching full:handle

31 typedef int bank_handler_t(struct aca_handle *handle, struct aca_bank *bank, enum aca_smu_type type, void *data);
202 static bool aca_bank_is_valid(struct aca_handle *handle, struct aca_bank *bank, enum aca_smu_type type)
204 const struct aca_bank_ops *bank_ops = handle->bank_ops;
206 /* Parse all deferred errors with UMC aca handle */
208 return handle->hwip == ACA_HWIP_TYPE_UMC;
210 if (!aca_bank_hwip_is_matched(bank, handle->hwip))
216 return bank_ops->aca_bank_is_valid(handle, bank, type, handle->data);
284 int aca_error_cache_log_bank_error(struct aca_handle *handle, struct aca_bank_info *info,
287 struct aca_error_cache *error_cache = &handle->error_cache;
291 if (!handle || !info || type >= ACA_ERROR_TYPE_COUNT)
307 static int aca_bank_parser(struct aca_handle *handle, struct aca_bank *bank, enum aca_smu_type type)
309 const struct aca_bank_ops *bank_ops = handle->bank_ops;
317 return bank_ops->aca_bank_parser(handle, bank, type,
318 handle->data);
321 static int handler_aca_log_bank_error(struct aca_handle *handle, struct aca_bank *bank,
326 ret = aca_bank_parser(handle, bank, type);
336 struct aca_handle *handle;
342 list_for_each_entry(handle, &mgr->list, node) {
343 if (!aca_bank_is_valid(handle, bank, type))
346 ret = handler(handle, bank, type, data);
528 static int aca_log_aca_error(struct aca_handle *handle, enum aca_error_type type, struct ras_err_data *err_data)
530 struct aca_error_cache *error_cache = &handle->error_cache;
550 static int __aca_get_error_data(struct amdgpu_device *adev, struct aca_handle *handle, enum aca_error_type type,
575 aca_log_aca_error(handle, ACA_ERROR_TYPE_DEFERRED, err_data);
577 return aca_log_aca_error(handle, type, err_data);
580 static bool aca_handle_is_valid(struct aca_handle *handle)
582 if (!handle->mask || !list_empty(&handle->node))
588 int amdgpu_aca_get_error_data(struct amdgpu_device *adev, struct aca_handle *handle,
592 if (!handle || !err_data)
595 if (aca_handle_is_valid(handle))
598 if ((type < 0) || (!(BIT(type) & handle->mask)))
601 return __aca_get_error_data(adev, handle, type, err_data, qctx);
612 static void aca_init_error_cache(struct aca_handle *handle)
614 struct aca_error_cache *error_cache = &handle->error_cache;
636 static void aca_fini_error_cache(struct aca_handle *handle)
638 struct aca_error_cache *error_cache = &handle->error_cache;
645 static int add_aca_handle(struct amdgpu_device *adev, struct aca_handle_manager *mgr, struct aca_handle *handle,
648 memset(handle, 0, sizeof(*handle));
650 handle->adev = adev;
651 handle->mgr = mgr;
652 handle->name = name;
653 handle->hwip = ras_info->hwip;
654 handle->mask = ras_info->mask;
655 handle->bank_ops = ras_info->bank_ops;
656 handle->data = data;
657 aca_init_error_cache(handle);
659 INIT_LIST_HEAD(&handle->node);
660 list_add_tail(&handle->node, &mgr->list);
669 struct aca_handle *handle = container_of(attr, struct aca_handle, aca_attr);
673 return amdgpu_ras_aca_sysfs_read(dev, attr, handle, buf, handle->data);
676 static int add_aca_sysfs(struct amdgpu_device *adev, struct aca_handle *handle)
678 struct device_attribute *aca_attr = &handle->aca_attr;
680 snprintf(handle->attr_name, sizeof(handle->attr_name) - 1, "aca_%s", handle->name);
682 aca_attr->attr.name = handle->attr_name;
691 int amdgpu_aca_add_handle(struct amdgpu_device *adev, struct aca_handle *handle,
700 ret = add_aca_handle(adev, &aca->mgr, handle, name, ras_info, data);
704 return add_aca_sysfs(adev, handle);
707 static void remove_aca_handle(struct aca_handle *handle)
709 struct aca_handle_manager *mgr = handle->mgr;
711 aca_fini_error_cache(handle);
712 list_del(&handle->node);
716 static void remove_aca_sysfs(struct aca_handle *handle)
718 struct amdgpu_device *adev = handle->adev;
719 struct device_attribute *aca_attr = &handle->aca_attr;
727 void amdgpu_aca_remove_handle(struct aca_handle *handle)
729 if (!handle || list_empty(&handle->node))
732 remove_aca_sysfs(handle);
733 remove_aca_handle(handle);
746 struct aca_handle *handle, *tmp;
751 list_for_each_entry_safe(handle, tmp, &mgr->list, node)
752 amdgpu_aca_remove_handle(handle);
903 static int handler_aca_bank_dump(struct aca_handle *handle, struct aca_bank *bank,
910 return handler_aca_log_bank_error(handle, bank, type, NULL);