mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-06 08:46:46 +00:00
staging: vc04_services: Drop VCHIQ_ERROR usage
Drop the usage of VCHIQ_ERROR vchiq_status enum type. Replace it with -EINVAL to report the error in most cases, -ENOMEM for out-of-memory errors and -EHOSTDOWN for service shutdown. This patch acts as intermediatory to address the TODO item: * Get rid of custom function return values for vc04_services/interface. Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> Tested-by: Stefan Wahren <stefan.wahren@i2se.com> Link: https://lore.kernel.org/r/20221223122404.170585-4-umang.jain@ideasonboard.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
3414994ba8
commit
ab73dc8532
4 changed files with 37 additions and 38 deletions
|
@ -18,7 +18,6 @@ enum vchiq_reason {
|
|||
};
|
||||
|
||||
enum vchiq_status {
|
||||
VCHIQ_ERROR = -1,
|
||||
VCHIQ_RETRY = 1
|
||||
};
|
||||
|
||||
|
|
|
@ -501,7 +501,7 @@ int vchiq_platform_init(struct platform_device *pdev, struct vchiq_state *state)
|
|||
|
||||
vchiq_slot_zero = vchiq_init_slots(slot_mem, slot_mem_size);
|
||||
if (!vchiq_slot_zero)
|
||||
return -EINVAL;
|
||||
return -ENOMEM;
|
||||
|
||||
vchiq_slot_zero->platform_data[VCHIQ_PLATFORM_FRAGMENTS_OFFSET_IDX] =
|
||||
(int)slot_phys + slot_mem_size;
|
||||
|
@ -795,7 +795,7 @@ vchiq_add_service(struct vchiq_instance *instance,
|
|||
*phandle = service->handle;
|
||||
status = 0;
|
||||
} else {
|
||||
status = VCHIQ_ERROR;
|
||||
status = -EINVAL;
|
||||
}
|
||||
|
||||
vchiq_log_trace(vchiq_core_log_level, "%s(%p): returning %d", __func__, instance, status);
|
||||
|
@ -808,7 +808,7 @@ vchiq_open_service(struct vchiq_instance *instance,
|
|||
const struct vchiq_service_params_kernel *params,
|
||||
unsigned int *phandle)
|
||||
{
|
||||
enum vchiq_status status = VCHIQ_ERROR;
|
||||
int status = -EINVAL;
|
||||
struct vchiq_state *state = instance->state;
|
||||
struct vchiq_service *service = NULL;
|
||||
|
||||
|
@ -855,7 +855,7 @@ vchiq_bulk_transmit(struct vchiq_instance *instance, unsigned int handle, const
|
|||
VCHIQ_BULK_TRANSMIT);
|
||||
break;
|
||||
default:
|
||||
return VCHIQ_ERROR;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -892,7 +892,7 @@ int vchiq_bulk_receive(struct vchiq_instance *instance, unsigned int handle,
|
|||
VCHIQ_BULK_RECEIVE);
|
||||
break;
|
||||
default:
|
||||
return VCHIQ_ERROR;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -920,7 +920,7 @@ vchiq_blocking_bulk_transfer(struct vchiq_instance *instance, unsigned int handl
|
|||
|
||||
service = find_service_by_handle(instance, handle);
|
||||
if (!service)
|
||||
return VCHIQ_ERROR;
|
||||
return -EINVAL;
|
||||
|
||||
vchiq_service_put(service);
|
||||
|
||||
|
@ -954,7 +954,7 @@ vchiq_blocking_bulk_transfer(struct vchiq_instance *instance, unsigned int handl
|
|||
waiter = kzalloc(sizeof(*waiter), GFP_KERNEL);
|
||||
if (!waiter) {
|
||||
vchiq_log_error(vchiq_core_log_level, "%s - out of memory", __func__);
|
||||
return VCHIQ_ERROR;
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1127,7 +1127,7 @@ service_callback(struct vchiq_instance *instance, enum vchiq_reason reason,
|
|||
vchiq_log_info(vchiq_arm_log_level, "%s closing", __func__);
|
||||
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
||||
vchiq_service_put(service);
|
||||
return VCHIQ_ERROR;
|
||||
return -EINVAL;
|
||||
}
|
||||
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
||||
spin_lock(&msg_queue_spinlock);
|
||||
|
@ -1590,7 +1590,7 @@ vchiq_instance_set_trace(struct vchiq_instance *instance, int trace)
|
|||
int
|
||||
vchiq_use_service(struct vchiq_instance *instance, unsigned int handle)
|
||||
{
|
||||
enum vchiq_status ret = VCHIQ_ERROR;
|
||||
int ret = -EINVAL;
|
||||
struct vchiq_service *service = find_service_by_handle(instance, handle);
|
||||
|
||||
if (service) {
|
||||
|
@ -1604,7 +1604,7 @@ EXPORT_SYMBOL(vchiq_use_service);
|
|||
int
|
||||
vchiq_release_service(struct vchiq_instance *instance, unsigned int handle)
|
||||
{
|
||||
enum vchiq_status ret = VCHIQ_ERROR;
|
||||
int ret = -EINVAL;
|
||||
struct vchiq_service *service = find_service_by_handle(instance, handle);
|
||||
|
||||
if (service) {
|
||||
|
@ -1699,7 +1699,7 @@ int
|
|||
vchiq_check_service(struct vchiq_service *service)
|
||||
{
|
||||
struct vchiq_arm_state *arm_state;
|
||||
enum vchiq_status ret = VCHIQ_ERROR;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!service || !service->state)
|
||||
goto out;
|
||||
|
@ -1711,7 +1711,7 @@ vchiq_check_service(struct vchiq_service *service)
|
|||
ret = 0;
|
||||
read_unlock_bh(&arm_state->susp_res_lock);
|
||||
|
||||
if (ret == VCHIQ_ERROR) {
|
||||
if (ret) {
|
||||
vchiq_log_error(vchiq_susp_log_level,
|
||||
"%s ERROR - %c%c%c%c:%d service count %d, state count %d", __func__,
|
||||
VCHIQ_FOURCC_AS_4CHARS(service->base.fourcc), service->client_id,
|
||||
|
|
|
@ -467,14 +467,14 @@ static inline int
|
|||
make_service_callback(struct vchiq_service *service, enum vchiq_reason reason,
|
||||
struct vchiq_header *header, void *bulk_userdata)
|
||||
{
|
||||
enum vchiq_status status;
|
||||
int status;
|
||||
|
||||
vchiq_log_trace(vchiq_core_log_level, "%d: callback:%d (%s, %pK, %pK)",
|
||||
service->state->id, service->localport, reason_names[reason],
|
||||
header, bulk_userdata);
|
||||
status = service->base.callback(service->instance, reason, header, service->handle,
|
||||
bulk_userdata);
|
||||
if (status == VCHIQ_ERROR) {
|
||||
if (status && (status != VCHIQ_RETRY)) {
|
||||
vchiq_log_warning(vchiq_core_log_level,
|
||||
"%d: ignoring ERROR from callback to service %x",
|
||||
service->state->id, service->handle);
|
||||
|
@ -940,7 +940,7 @@ queue_message(struct vchiq_state *state, struct vchiq_service *service,
|
|||
if (!service) {
|
||||
WARN(1, "%s: service is NULL\n", __func__);
|
||||
mutex_unlock(&state->slot_mutex);
|
||||
return VCHIQ_ERROR;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
WARN_ON(flags & (QMFLAGS_NO_MUTEX_LOCK |
|
||||
|
@ -949,7 +949,7 @@ queue_message(struct vchiq_state *state, struct vchiq_service *service,
|
|||
if (service->closing) {
|
||||
/* The service has been closed */
|
||||
mutex_unlock(&state->slot_mutex);
|
||||
return VCHIQ_ERROR;
|
||||
return -EHOSTDOWN;
|
||||
}
|
||||
|
||||
quota = &state->service_quotas[service->localport];
|
||||
|
@ -999,13 +999,13 @@ queue_message(struct vchiq_state *state, struct vchiq_service *service,
|
|||
if (wait_for_completion_interruptible("a->quota_event))
|
||||
return VCHIQ_RETRY;
|
||||
if (service->closing)
|
||||
return VCHIQ_ERROR;
|
||||
return -EHOSTDOWN;
|
||||
if (mutex_lock_killable(&state->slot_mutex))
|
||||
return VCHIQ_RETRY;
|
||||
if (service->srvstate != VCHIQ_SRVSTATE_OPEN) {
|
||||
/* The service has been closed */
|
||||
mutex_unlock(&state->slot_mutex);
|
||||
return VCHIQ_ERROR;
|
||||
return -EHOSTDOWN;
|
||||
}
|
||||
spin_lock("a_spinlock);
|
||||
tx_end_index = SLOT_QUEUE_INDEX_FROM_POS(state->local_tx_pos + stride - 1);
|
||||
|
@ -1047,7 +1047,7 @@ queue_message(struct vchiq_state *state, struct vchiq_service *service,
|
|||
if (callback_result < 0) {
|
||||
mutex_unlock(&state->slot_mutex);
|
||||
VCHIQ_SERVICE_STATS_INC(service, error_count);
|
||||
return VCHIQ_ERROR;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (SRVTRACE_ENABLED(service,
|
||||
|
@ -1195,7 +1195,7 @@ queue_message_sync(struct vchiq_state *state, struct vchiq_service *service,
|
|||
if (callback_result < 0) {
|
||||
mutex_unlock(&state->slot_mutex);
|
||||
VCHIQ_SERVICE_STATS_INC(service, error_count);
|
||||
return VCHIQ_ERROR;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (service) {
|
||||
|
@ -2530,7 +2530,7 @@ vchiq_open_service_internal(struct vchiq_service *service, int client_id)
|
|||
service->state->id,
|
||||
srvstate_names[service->srvstate],
|
||||
kref_read(&service->ref_count));
|
||||
status = VCHIQ_ERROR;
|
||||
status = -EINVAL;
|
||||
VCHIQ_SERVICE_STATS_INC(service, error_count);
|
||||
vchiq_release_service_internal(service);
|
||||
}
|
||||
|
@ -2648,7 +2648,7 @@ close_service_complete(struct vchiq_service *service, int failstate)
|
|||
vchiq_log_error(vchiq_core_log_level, "%s(%x) called in state %s", __func__,
|
||||
service->handle, srvstate_names[service->srvstate]);
|
||||
WARN(1, "%s in unexpected state\n", __func__);
|
||||
return VCHIQ_ERROR;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
status = make_service_callback(service, VCHIQ_SERVICE_CLOSED, NULL, NULL);
|
||||
|
@ -2705,7 +2705,7 @@ vchiq_close_service_internal(struct vchiq_service *service, int close_recvd)
|
|||
__func__, srvstate_names[service->srvstate]);
|
||||
} else if (is_server) {
|
||||
if (service->srvstate == VCHIQ_SRVSTATE_LISTENING) {
|
||||
status = VCHIQ_ERROR;
|
||||
status = -EINVAL;
|
||||
} else {
|
||||
service->client_id = 0;
|
||||
service->remoteport = VCHIQ_PORT_FREE;
|
||||
|
@ -2896,7 +2896,7 @@ vchiq_close_service(struct vchiq_instance *instance, unsigned int handle)
|
|||
int status = 0;
|
||||
|
||||
if (!service)
|
||||
return VCHIQ_ERROR;
|
||||
return -EINVAL;
|
||||
|
||||
vchiq_log_info(vchiq_core_log_level, "%d: close_service:%d",
|
||||
service->state->id, service->localport);
|
||||
|
@ -2905,7 +2905,7 @@ vchiq_close_service(struct vchiq_instance *instance, unsigned int handle)
|
|||
(service->srvstate == VCHIQ_SRVSTATE_LISTENING) ||
|
||||
(service->srvstate == VCHIQ_SRVSTATE_HIDDEN)) {
|
||||
vchiq_service_put(service);
|
||||
return VCHIQ_ERROR;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mark_service_closing(service);
|
||||
|
@ -2938,7 +2938,7 @@ vchiq_close_service(struct vchiq_instance *instance, unsigned int handle)
|
|||
if (!status &&
|
||||
(service->srvstate != VCHIQ_SRVSTATE_FREE) &&
|
||||
(service->srvstate != VCHIQ_SRVSTATE_LISTENING))
|
||||
status = VCHIQ_ERROR;
|
||||
status = -EINVAL;
|
||||
|
||||
vchiq_service_put(service);
|
||||
|
||||
|
@ -2954,14 +2954,14 @@ vchiq_remove_service(struct vchiq_instance *instance, unsigned int handle)
|
|||
int status = 0;
|
||||
|
||||
if (!service)
|
||||
return VCHIQ_ERROR;
|
||||
return -EINVAL;
|
||||
|
||||
vchiq_log_info(vchiq_core_log_level, "%d: remove_service:%d",
|
||||
service->state->id, service->localport);
|
||||
|
||||
if (service->srvstate == VCHIQ_SRVSTATE_FREE) {
|
||||
vchiq_service_put(service);
|
||||
return VCHIQ_ERROR;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mark_service_closing(service);
|
||||
|
@ -2997,7 +2997,7 @@ vchiq_remove_service(struct vchiq_instance *instance, unsigned int handle)
|
|||
}
|
||||
|
||||
if (!status && (service->srvstate != VCHIQ_SRVSTATE_FREE))
|
||||
status = VCHIQ_ERROR;
|
||||
status = -EINVAL;
|
||||
|
||||
vchiq_service_put(service);
|
||||
|
||||
|
@ -3024,7 +3024,7 @@ int vchiq_bulk_transfer(struct vchiq_instance *instance, unsigned int handle,
|
|||
const char dir_char = (dir == VCHIQ_BULK_TRANSMIT) ? 't' : 'r';
|
||||
const int dir_msgtype = (dir == VCHIQ_BULK_TRANSMIT) ?
|
||||
VCHIQ_MSG_BULK_TX : VCHIQ_MSG_BULK_RX;
|
||||
enum vchiq_status status = VCHIQ_ERROR;
|
||||
int status = -EINVAL;
|
||||
int payload[2];
|
||||
|
||||
if (!service)
|
||||
|
@ -3151,7 +3151,7 @@ int vchiq_bulk_transfer(struct vchiq_instance *instance, unsigned int handle,
|
|||
if (wait_for_completion_interruptible(&bulk_waiter->event))
|
||||
status = VCHIQ_RETRY;
|
||||
else if (bulk_waiter->actual == VCHIQ_BULK_ACTUAL_ABORTED)
|
||||
status = VCHIQ_ERROR;
|
||||
status = -EINVAL;
|
||||
}
|
||||
|
||||
return status;
|
||||
|
@ -3177,7 +3177,7 @@ vchiq_queue_message(struct vchiq_instance *instance, unsigned int handle,
|
|||
size_t size)
|
||||
{
|
||||
struct vchiq_service *service = find_service_by_handle(instance, handle);
|
||||
enum vchiq_status status = VCHIQ_ERROR;
|
||||
int status = -EINVAL;
|
||||
int data_id;
|
||||
|
||||
if (!service)
|
||||
|
@ -3208,7 +3208,7 @@ vchiq_queue_message(struct vchiq_instance *instance, unsigned int handle,
|
|||
copy_callback, context, size, 1);
|
||||
break;
|
||||
default:
|
||||
status = VCHIQ_ERROR;
|
||||
status = -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -3288,7 +3288,7 @@ release_message_sync(struct vchiq_state *state, struct vchiq_header *header)
|
|||
int
|
||||
vchiq_get_peer_version(struct vchiq_instance *instance, unsigned int handle, short *peer_version)
|
||||
{
|
||||
enum vchiq_status status = VCHIQ_ERROR;
|
||||
int status = -EINVAL;
|
||||
struct vchiq_service *service = find_service_by_handle(instance, handle);
|
||||
|
||||
if (!service)
|
||||
|
|
|
@ -130,7 +130,7 @@ vchiq_ioc_queue_message(struct vchiq_instance *instance, unsigned int handle,
|
|||
status = vchiq_queue_message(instance, handle, vchiq_ioc_copy_element_data,
|
||||
&context, total_size);
|
||||
|
||||
if (status == VCHIQ_ERROR)
|
||||
if (status == -EINVAL)
|
||||
return -EIO;
|
||||
else if (status == VCHIQ_RETRY)
|
||||
return -EINTR;
|
||||
|
@ -364,7 +364,7 @@ static int vchiq_irq_queue_bulk_tx_rx(struct vchiq_instance *instance,
|
|||
vchiq_service_put(service);
|
||||
if (ret)
|
||||
return ret;
|
||||
else if (status == VCHIQ_ERROR)
|
||||
else if (status == -EINVAL)
|
||||
return -EIO;
|
||||
else if (status == VCHIQ_RETRY)
|
||||
return -EINTR;
|
||||
|
@ -862,7 +862,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|||
vchiq_service_put(service);
|
||||
|
||||
if (ret == 0) {
|
||||
if (status == VCHIQ_ERROR)
|
||||
if (status == -EINVAL)
|
||||
ret = -EIO;
|
||||
else if (status == VCHIQ_RETRY)
|
||||
ret = -EINTR;
|
||||
|
|
Loading…
Reference in a new issue