Skip to content

Commit ec5d292

Browse files
Umang Jaingregkh
authored andcommitted
staging: vchiq_arm: Do not retry bulk transfers on -EINTR
-EINTR is returned by various vchiq bulk transfer code paths on receiving a fatal signal to the process. Since the process is deemed to be terminated anyway, do not retry the bulk transfer on -EINTR. Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> Link: https://lore.kernel.org/r/20240918163100.870596-6-umang.jain@ideasonboard.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 80f8ea9 commit ec5d292

File tree

1 file changed

+25
-49
lines changed
  • drivers/staging/vc04_services/interface/vchiq_arm

1 file changed

+25
-49
lines changed

drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c

Lines changed: 25 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -853,31 +853,19 @@ vchiq_bulk_transmit(struct vchiq_instance *instance, unsigned int handle, const
853853
{
854854
int ret;
855855

856-
while (1) {
857-
switch (mode) {
858-
case VCHIQ_BULK_MODE_NOCALLBACK:
859-
case VCHIQ_BULK_MODE_CALLBACK:
860-
ret = vchiq_bulk_xfer_callback(instance, handle, (void *)data,
861-
NULL, size, mode, userdata,
862-
VCHIQ_BULK_TRANSMIT);
863-
break;
864-
case VCHIQ_BULK_MODE_BLOCKING:
865-
ret = vchiq_blocking_bulk_transfer(instance, handle, (void *)data, size,
866-
VCHIQ_BULK_TRANSMIT);
867-
break;
868-
default:
869-
return -EINVAL;
870-
}
871-
872-
/*
873-
* vchiq_*_bulk_transfer() may return -EINTR, so we need
874-
* to implement a retry mechanism since this function is
875-
* supposed to block until queued
876-
*/
877-
if (ret != -EINTR)
878-
break;
879-
880-
msleep(1);
856+
switch (mode) {
857+
case VCHIQ_BULK_MODE_NOCALLBACK:
858+
case VCHIQ_BULK_MODE_CALLBACK:
859+
ret = vchiq_bulk_xfer_callback(instance, handle, (void *)data,
860+
NULL, size, mode, userdata,
861+
VCHIQ_BULK_TRANSMIT);
862+
break;
863+
case VCHIQ_BULK_MODE_BLOCKING:
864+
ret = vchiq_blocking_bulk_transfer(instance, handle, (void *)data, size,
865+
VCHIQ_BULK_TRANSMIT);
866+
break;
867+
default:
868+
return -EINVAL;
881869
}
882870

883871
return ret;
@@ -890,30 +878,18 @@ int vchiq_bulk_receive(struct vchiq_instance *instance, unsigned int handle,
890878
{
891879
int ret;
892880

893-
while (1) {
894-
switch (mode) {
895-
case VCHIQ_BULK_MODE_NOCALLBACK:
896-
case VCHIQ_BULK_MODE_CALLBACK:
897-
ret = vchiq_bulk_xfer_callback(instance, handle, (void *)data, NULL,
898-
size, mode, userdata, VCHIQ_BULK_RECEIVE);
899-
break;
900-
case VCHIQ_BULK_MODE_BLOCKING:
901-
ret = vchiq_blocking_bulk_transfer(instance, handle, (void *)data, size,
902-
VCHIQ_BULK_RECEIVE);
903-
break;
904-
default:
905-
return -EINVAL;
906-
}
907-
908-
/*
909-
* vchiq_*_bulk_transfer() may return -EINTR, so we need
910-
* to implement a retry mechanism since this function is
911-
* supposed to block until queued
912-
*/
913-
if (ret != -EINTR)
914-
break;
915-
916-
msleep(1);
881+
switch (mode) {
882+
case VCHIQ_BULK_MODE_NOCALLBACK:
883+
case VCHIQ_BULK_MODE_CALLBACK:
884+
ret = vchiq_bulk_xfer_callback(instance, handle, (void *)data, NULL,
885+
size, mode, userdata, VCHIQ_BULK_RECEIVE);
886+
break;
887+
case VCHIQ_BULK_MODE_BLOCKING:
888+
ret = vchiq_blocking_bulk_transfer(instance, handle, (void *)data, size,
889+
VCHIQ_BULK_RECEIVE);
890+
break;
891+
default:
892+
return -EINVAL;
917893
}
918894

919895
return ret;

0 commit comments

Comments
 (0)