[PATCH 01/16] staging: vchiq_core: fix logic in poll_services_of_group

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Commit "staging: vchiq_core: avoid indention in poll_services_of_group"
tries to reduce the indention, but the parts regarding the third if statement
breaks the logic. So restore them and prevent vchiq_test from hanging during
the ping test.

Fixes: 2f440843a7d4 ("staging: vchiq_core: avoid indention in poll_services_of_group")
Signed-off-by: Stefan Wahren <stefan.wahren@xxxxxxxx>
---
 .../vc04_services/interface/vchiq_arm/vchiq_core.c | 28 ++++++++++------------
 1 file changed, 13 insertions(+), 15 deletions(-)

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 47bb0af..bc6e123 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
@@ -1340,23 +1340,21 @@ poll_services_of_group(struct vchiq_state *state, int group)
 			continue;
 
 		service_flags = atomic_xchg(&service->poll_flags, 0);
-		if ((service_flags & BIT(VCHIQ_POLL_REMOVE)) == 0)
-			continue;
-
-		vchiq_log_info(vchiq_core_log_level, "%d: ps - remove %d<->%d",
-			       state->id, service->localport,
-			       service->remoteport);
+		if (service_flags & BIT(VCHIQ_POLL_REMOVE)) {
+			vchiq_log_info(vchiq_core_log_level, "%d: ps - remove %d<->%d",
+				       state->id, service->localport,
+				       service->remoteport);
 
-		/*
-		 * Make it look like a client, because
-		 * it must be removed and not left in
-		 * the LISTENING state.
-		 */
-		service->public_fourcc = VCHIQ_FOURCC_INVALID;
+			/*
+			 * Make it look like a client, because
+			 * it must be removed and not left in
+			 * the LISTENING state.
+			 */
+			service->public_fourcc = VCHIQ_FOURCC_INVALID;
 
-		if (vchiq_close_service_internal(service, NO_CLOSE_RECVD) !=
-						 VCHIQ_SUCCESS) {
-			request_poll(state, service, VCHIQ_POLL_REMOVE);
+			if (vchiq_close_service_internal(service, NO_CLOSE_RECVD) !=
+							 VCHIQ_SUCCESS)
+				request_poll(state, service, VCHIQ_POLL_REMOVE);
 		} else if (service_flags & BIT(VCHIQ_POLL_TERMINATE)) {
 			vchiq_log_info(vchiq_core_log_level,
 				"%d: ps - terminate %d<->%d",
-- 
2.7.4





[Index of Archives]     [Linux Driver Development]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux