staging: vchiq_core: fix logic in poll_services_of_group

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: 2f440843a7 ("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>
This commit is contained in:
Stefan Wahren 2021-06-03 17:49:50 +02:00 committed by Greg Kroah-Hartman
parent bdf696a019
commit 447fbc14f4

View 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;
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);
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",