staging: vchiq_core: fix logic in poll_services_of_group
authorStefan Wahren <stefan.wahren@i2se.com>
Thu, 3 Jun 2021 15:49:50 +0000 (17:49 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 4 Jun 2021 13:10:02 +0000 (15:10 +0200)
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@i2se.com>
Link: https://lore.kernel.org/r/1622735405-9980-2-git-send-email-stefan.wahren@i2se.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c

index 47bb0afd6b84273515ab4caece313170060a4dc6..bc6e12374f9188c1ac7d3a216eef42d4f50ef9b1 100644 (file)
@@ -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",