]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
staging: vchiq_arm: Reduce indentation of service_callback
authorStefan Wahren <wahrenst@gmx.net>
Fri, 21 Jun 2024 13:19:55 +0000 (15:19 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Jun 2024 13:26:56 +0000 (15:26 +0200)
The service_callback has 5 levels of indentation, which makes it
hard to read. Reduce this by splitting the code in a new function
service_single_message() as suggested by Laurent Pinchart.

Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Link: https://lore.kernel.org/r/20240621131958.98208-8-wahrenst@gmx.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c

index 0ba52c9d8bc3f9e73243e627a0378825b809b7da..a8cf9233a6241af87d1f8ca7f5cd4bda8540dc49 100644 (file)
@@ -1055,6 +1055,43 @@ add_completion(struct vchiq_instance *instance, enum vchiq_reason reason,
        return 0;
 }
 
+static int
+service_single_message(struct vchiq_instance *instance,
+                      enum vchiq_reason reason,
+                      struct vchiq_service *service, void *bulk_userdata)
+{
+       struct user_service *user_service;
+
+       user_service = (struct user_service *)service->base.userdata;
+
+       dev_dbg(service->state->dev, "arm: msg queue full\n");
+       /*
+        * If there is no MESSAGE_AVAILABLE in the completion
+        * queue, add one
+        */
+       if ((user_service->message_available_pos -
+            instance->completion_remove) < 0) {
+               int ret;
+
+               dev_dbg(instance->state->dev,
+                       "arm: Inserting extra MESSAGE_AVAILABLE\n");
+               ret = add_completion(instance, reason, NULL, user_service,
+                                    bulk_userdata);
+               if (ret)
+                       return ret;
+       }
+
+       if (wait_for_completion_interruptible(&user_service->remove_event)) {
+               dev_dbg(instance->state->dev, "arm: interrupted\n");
+               return -EAGAIN;
+       } else if (instance->closing) {
+               dev_dbg(instance->state->dev, "arm: closing\n");
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
 int
 service_callback(struct vchiq_instance *instance, enum vchiq_reason reason,
                 struct vchiq_header *header, unsigned int handle, void *bulk_userdata)
@@ -1104,41 +1141,18 @@ service_callback(struct vchiq_instance *instance, enum vchiq_reason reason,
                spin_lock(&service->state->msg_queue_spinlock);
                while (user_service->msg_insert ==
                        (user_service->msg_remove + MSG_QUEUE_SIZE)) {
+                       int ret;
+
                        spin_unlock(&service->state->msg_queue_spinlock);
                        DEBUG_TRACE(SERVICE_CALLBACK_LINE);
                        DEBUG_COUNT(MSG_QUEUE_FULL_COUNT);
-                       dev_dbg(service->state->dev, "arm: msg queue full\n");
-                       /*
-                        * If there is no MESSAGE_AVAILABLE in the completion
-                        * queue, add one
-                        */
-                       if ((user_service->message_available_pos -
-                               instance->completion_remove) < 0) {
-                               int ret;
-
-                               dev_dbg(instance->state->dev,
-                                       "arm: Inserting extra MESSAGE_AVAILABLE\n");
-                               DEBUG_TRACE(SERVICE_CALLBACK_LINE);
-                               ret = add_completion(instance, reason, NULL, user_service,
-                                                    bulk_userdata);
-                               if (ret) {
-                                       DEBUG_TRACE(SERVICE_CALLBACK_LINE);
-                                       vchiq_service_put(service);
-                                       return ret;
-                               }
-                       }
 
-                       DEBUG_TRACE(SERVICE_CALLBACK_LINE);
-                       if (wait_for_completion_interruptible(&user_service->remove_event)) {
-                               dev_dbg(instance->state->dev, "arm: interrupted\n");
-                               DEBUG_TRACE(SERVICE_CALLBACK_LINE);
-                               vchiq_service_put(service);
-                               return -EAGAIN;
-                       } else if (instance->closing) {
-                               dev_dbg(instance->state->dev, "arm: closing\n");
+                       ret = service_single_message(instance, reason,
+                                                    service, bulk_userdata);
+                       if (ret) {
                                DEBUG_TRACE(SERVICE_CALLBACK_LINE);
                                vchiq_service_put(service);
-                               return -EINVAL;
+                               return ret;
                        }
                        DEBUG_TRACE(SERVICE_CALLBACK_LINE);
                        spin_lock(&service->state->msg_queue_spinlock);