staging: vchiq_core: introduce service skip

In case there is no service pointer provided, we can skip these polling.
Use a goto to reduce the indentation, which is necessary for the following
patches. Btw fix the brace alignment of the loops.

Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Link: https://lore.kernel.org/r/1618164700-21150-6-git-send-email-stefan.wahren@i2se.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Stefan Wahren 2021-04-11 20:11:35 +02:00 committed by Greg Kroah-Hartman
parent b3582ed426
commit 63276d45ba

View file

@ -538,21 +538,22 @@ request_poll(struct vchiq_state *state, struct vchiq_service *service,
{
u32 value;
if (service) {
do {
value = atomic_read(&service->poll_flags);
} while (atomic_cmpxchg(&service->poll_flags, value,
value | BIT(poll_type)) != value);
if (!service)
goto skip_service;
do {
value = atomic_read(&state->poll_services[
service->localport>>5]);
} while (atomic_cmpxchg(
&state->poll_services[service->localport>>5],
value, value | BIT(service->localport & 0x1f))
!= value);
}
do {
value = atomic_read(&service->poll_flags);
} while (atomic_cmpxchg(&service->poll_flags, value,
value | BIT(poll_type)) != value);
do {
value = atomic_read(&state->poll_services[
service->localport>>5]);
} while (atomic_cmpxchg(
&state->poll_services[service->localport>>5], value,
value | BIT(service->localport & 0x1f)) != value);
skip_service:
state->poll_needed = 1;
wmb();