OSDN Git Service

staging: vchiq_core: introduce handle_poll
authorStefan Wahren <stefan.wahren@i2se.com>
Thu, 3 Jun 2021 15:50:05 +0000 (17:50 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 4 Jun 2021 13:10:03 +0000 (15:10 +0200)
The function slot_handler_func() has very deep indentations. Moving the
poll handling into separate function could improve the readability.
Use the return value to keep the poll_needed handling at the same place.

Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Link: https://lore.kernel.org/r/1622735405-9980-17-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 a2a2472..4f43e42 100644 (file)
@@ -1992,6 +1992,56 @@ parse_rx_slots(struct vchiq_state *state)
        }
 }
 
+/**
+ * handle_poll() - handle service polling and other rare conditions
+ * @state:  vchiq state struct
+ *
+ * Context: Process context
+ *
+ * Return:
+ * * 0        - poll handled successful
+ * * -EAGAIN  - retry later
+ */
+static int
+handle_poll(struct vchiq_state *state)
+{
+       switch (state->conn_state) {
+       case VCHIQ_CONNSTATE_CONNECTED:
+               /* Poll the services as requested */
+               poll_services(state);
+               break;
+
+       case VCHIQ_CONNSTATE_PAUSING:
+               if (queue_message(state, NULL, MAKE_PAUSE, NULL, NULL, 0,
+                                 QMFLAGS_NO_MUTEX_UNLOCK) != VCHIQ_RETRY) {
+                       vchiq_set_conn_state(state, VCHIQ_CONNSTATE_PAUSE_SENT);
+               } else {
+                       /* Retry later */
+                       return -EAGAIN;
+               }
+               break;
+
+       case VCHIQ_CONNSTATE_RESUMING:
+               if (queue_message(state, NULL, MAKE_RESUME, NULL, NULL, 0,
+                                 QMFLAGS_NO_MUTEX_LOCK) != VCHIQ_RETRY) {
+                       vchiq_set_conn_state(state, VCHIQ_CONNSTATE_CONNECTED);
+               } else {
+                       /*
+                        * This should really be impossible,
+                        * since the PAUSE should have flushed
+                        * through outstanding messages.
+                        */
+                       vchiq_log_error(vchiq_core_log_level,
+                               "Failed to send RESUME message");
+               }
+               break;
+       default:
+               break;
+       }
+
+       return 0;
+}
+
 /* Called by the slot handler thread */
 static int
 slot_handler_func(void *v)
@@ -2010,52 +2060,14 @@ slot_handler_func(void *v)
 
                DEBUG_TRACE(SLOT_HANDLER_LINE);
                if (state->poll_needed) {
-
                        state->poll_needed = 0;
 
                        /*
                         * Handle service polling and other rare conditions here
                         * out of the mainline code
                         */
-                       switch (state->conn_state) {
-                       case VCHIQ_CONNSTATE_CONNECTED:
-                               /* Poll the services as requested */
-                               poll_services(state);
-                               break;
-
-                       case VCHIQ_CONNSTATE_PAUSING:
-                               if (queue_message(state, NULL, MAKE_PAUSE,
-                                       NULL, NULL, 0,
-                                       QMFLAGS_NO_MUTEX_UNLOCK)
-                                   != VCHIQ_RETRY) {
-                                       vchiq_set_conn_state(state,
-                                               VCHIQ_CONNSTATE_PAUSE_SENT);
-                               } else {
-                                       /* Retry later */
-                                       state->poll_needed = 1;
-                               }
-                               break;
-
-                       case VCHIQ_CONNSTATE_RESUMING:
-                               if (queue_message(state, NULL, MAKE_RESUME,
-                                       NULL, NULL, 0, QMFLAGS_NO_MUTEX_LOCK)
-                                       != VCHIQ_RETRY) {
-                                       vchiq_set_conn_state(state,
-                                               VCHIQ_CONNSTATE_CONNECTED);
-                               } else {
-                                       /*
-                                        * This should really be impossible,
-                                        * since the PAUSE should have flushed
-                                        * through outstanding messages.
-                                        */
-                                       vchiq_log_error(vchiq_core_log_level,
-                                               "Failed to send RESUME message");
-                               }
-                               break;
-                       default:
-                               break;
-                       }
-
+                       if (handle_poll(state) == -EAGAIN)
+                               state->poll_needed = 1;
                }
 
                DEBUG_TRACE(SLOT_HANDLER_LINE);