On Fri, Oct 11, 2024 at 05:39:08PM +0530, Umang Jain wrote: > diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c > index e9cd012e2b5f..5509f8b1061a 100644 > --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c > +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c > @@ -1309,6 +1309,48 @@ get_bulk_reason(struct vchiq_bulk *bulk) > return VCHIQ_BULK_RECEIVE_DONE; > } > > +static int service_notify_bulk(struct vchiq_service *service, > + struct vchiq_bulk *bulk) > +{ > + int status = -EINVAL; > + > + if (!service || !bulk) > + return status; Just return a literal here. s/return status/return -EINVAL/. This condition is impossible and the caller doesn't handle the error correctly. > + > + if (bulk->actual != VCHIQ_BULK_ACTUAL_ABORTED) { > + if (bulk->dir == VCHIQ_BULK_TRANSMIT) { > + VCHIQ_SERVICE_STATS_INC(service, bulk_tx_count); > + VCHIQ_SERVICE_STATS_ADD(service, bulk_tx_bytes, > + bulk->actual); > + } else { > + VCHIQ_SERVICE_STATS_INC(service, bulk_rx_count); > + VCHIQ_SERVICE_STATS_ADD(service, bulk_rx_bytes, > + bulk->actual); > + } > + } else { > + VCHIQ_SERVICE_STATS_INC(service, bulk_aborted_count); > + } > + > + if (bulk->mode == VCHIQ_BULK_MODE_BLOCKING) { > + struct bulk_waiter *waiter; > + > + spin_lock(&service->state->bulk_waiter_spinlock); > + waiter = bulk->userdata; > + if (waiter) { > + waiter->actual = bulk->actual; > + complete(&waiter->event); > + } > + > + spin_unlock(&service->state->bulk_waiter_spinlock); We always return -EINVAL for VCHIQ_BULK_MODE_BLOCKING. regards, dan carpenter > + } else if (bulk->mode == VCHIQ_BULK_MODE_CALLBACK) { > + enum vchiq_reason reason = get_bulk_reason(bulk); > + status = make_service_callback(service, reason, NULL, > + bulk->userdata); > + } > + > + return status; > +}