/** * ipa_rm_release_resource() - release resource * @resource_name: [in] name of the requested resource * * Returns: 0 on success, negative on failure * * All registered callbacks are called with IPA_RM_RESOURCE_RELEASED * on successful completion of this operation. */ int ipa_rm_release_resource(enum ipa_rm_resource_name resource_name) { struct ipa_rm_resource *resource; int result; if (!IPA_RM_RESORCE_IS_PROD(resource_name)) { IPA_RM_ERR("can be called on PROD only\n"); return -EINVAL; } read_lock(&ipa_rm_ctx->lock); if (ipa_rm_dep_graph_get_resource(ipa_rm_ctx->dep_graph, resource_name, &resource) != 0) { IPA_RM_ERR("resource does not exists\n"); result = -EPERM; goto bail; } result = ipa_rm_resource_producer_release( (struct ipa_rm_resource_prod *)resource); bail: read_unlock(&ipa_rm_ctx->lock); return result; }
int ipa_rm_release_resource(enum ipa_rm_resource_name resource_name) { struct ipa_rm_resource *resource; int result; IPADBG("IPA RM ::ipa_rm_release_resource ENTER\n"); if (!IPA_RM_RESORCE_IS_PROD(resource_name)) return -EINVAL; read_lock(&ipa_rm_ctx->lock); if (ipa_rm_dep_graph_get_resource(ipa_rm_ctx->dep_graph, resource_name, &resource) != 0) { result = -EPERM; goto bail; } result = ipa_rm_resource_producer_release( (struct ipa_rm_resource_prod *)resource); bail: IPADBG("IPA RM ::ipa_rm_release_resource EXIT [%d]\n", result); read_unlock(&ipa_rm_ctx->lock); return result; }