Skip to content

Commit 4e1a414

Browse files
Vincent Sanderspopcornmix
Vincent Sanders
authored andcommitted
vchiq: fix the shim message release
Signed-off-by: Daniel Stone <[email protected]>
1 parent 5865cf9 commit 4e1a414

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -545,47 +545,58 @@ static VCHIQ_STATUS_T shim_callback(VCHIQ_REASON_T reason,
545545
SHIM_SERVICE_T *service =
546546
(SHIM_SERVICE_T *)VCHIQ_GET_SERVICE_USERDATA(handle);
547547

548+
if (!service->callback)
549+
goto release;
550+
548551
switch (reason) {
549552
case VCHIQ_MESSAGE_AVAILABLE:
550553
vchiu_queue_push(&service->queue, header);
551554

552-
if (service->callback)
553-
service->callback(service->callback_param,
554-
VCHI_CALLBACK_MSG_AVAILABLE, NULL);
555+
service->callback(service->callback_param,
556+
VCHI_CALLBACK_MSG_AVAILABLE, NULL);
557+
558+
goto done;
555559
break;
560+
556561
case VCHIQ_BULK_TRANSMIT_DONE:
557-
if (service->callback)
558-
service->callback(service->callback_param,
559-
VCHI_CALLBACK_BULK_SENT, bulk_user);
562+
service->callback(service->callback_param,
563+
VCHI_CALLBACK_BULK_SENT, bulk_user);
560564
break;
565+
561566
case VCHIQ_BULK_RECEIVE_DONE:
562-
if (service->callback)
563-
service->callback(service->callback_param,
564-
VCHI_CALLBACK_BULK_RECEIVED, bulk_user);
567+
service->callback(service->callback_param,
568+
VCHI_CALLBACK_BULK_RECEIVED, bulk_user);
565569
break;
570+
566571
case VCHIQ_SERVICE_CLOSED:
567-
if (service->callback)
568-
service->callback(service->callback_param,
569-
VCHI_CALLBACK_SERVICE_CLOSED, NULL);
572+
service->callback(service->callback_param,
573+
VCHI_CALLBACK_SERVICE_CLOSED, NULL);
570574
break;
575+
571576
case VCHIQ_SERVICE_OPENED:
572577
/* No equivalent VCHI reason */
573578
break;
579+
574580
case VCHIQ_BULK_TRANSMIT_ABORTED:
575-
if (service->callback)
576-
service->callback(service->callback_param,
577-
VCHI_CALLBACK_BULK_TRANSMIT_ABORTED, bulk_user);
581+
service->callback(service->callback_param,
582+
VCHI_CALLBACK_BULK_TRANSMIT_ABORTED,
583+
bulk_user);
578584
break;
585+
579586
case VCHIQ_BULK_RECEIVE_ABORTED:
580-
if (service->callback)
581-
service->callback(service->callback_param,
582-
VCHI_CALLBACK_BULK_RECEIVE_ABORTED, bulk_user);
587+
service->callback(service->callback_param,
588+
VCHI_CALLBACK_BULK_RECEIVE_ABORTED,
589+
bulk_user);
583590
break;
591+
584592
default:
585593
WARN(1, "not supported\n");
586594
break;
587595
}
588596

597+
release:
598+
vchiq_release_message(service->handle, header);
599+
done:
589600
return VCHIQ_SUCCESS;
590601
}
591602

0 commit comments

Comments
 (0)