Revert "vchiq_arm: Access the dequeue_pending flag locked"
authorLee Hackseung <lhs@dignsys.com>
Thu, 10 Aug 2017 04:45:07 +0000 (13:45 +0900)
committerJaechul Lee <jcsing.lee@samsung.com>
Fri, 18 Aug 2017 01:04:44 +0000 (10:04 +0900)
This reverts commit f4c962d8d94cacec0049f8167ca7b59b0909f7ad.

drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c

index db44c4763790be9230e668ce0e45024fb3ac7563..f17b9be105e436518ad328d5944bd5ca2432dfa5 100644 (file)
@@ -290,7 +290,6 @@ service_callback(VCHIQ_REASON_T reason, VCHIQ_HEADER_T *header,
        USER_SERVICE_T *user_service;
        VCHIQ_SERVICE_T *service;
        VCHIQ_INSTANCE_T instance;
-       int skip_completion = 0;
        DEBUG_INITIALISE(g_state.local)
 
        DEBUG_TRACE(SERVICE_CALLBACK_LINE);
@@ -357,6 +356,9 @@ service_callback(VCHIQ_REASON_T reason, VCHIQ_HEADER_T *header,
                user_service->msg_queue[user_service->msg_insert &
                        (MSG_QUEUE_SIZE - 1)] = header;
                user_service->msg_insert++;
+               spin_unlock(&msg_queue_spinlock);
+
+               up(&user_service->insert_event);
 
                /* If there is a thread waiting in DEQUEUE_MESSAGE, or if
                ** there is a MESSAGE_AVAILABLE in the completion queue then
@@ -365,22 +367,13 @@ service_callback(VCHIQ_REASON_T reason, VCHIQ_HEADER_T *header,
                if (((user_service->message_available_pos -
                        instance->completion_remove) >= 0) ||
                        user_service->dequeue_pending) {
+                       DEBUG_TRACE(SERVICE_CALLBACK_LINE);
                        user_service->dequeue_pending = 0;
-                       skip_completion = 1;
+                       return VCHIQ_SUCCESS;
                }
 
-               spin_unlock(&msg_queue_spinlock);
-
-               up(&user_service->insert_event);
-
                header = NULL;
        }
-
-       if (skip_completion) {
-               DEBUG_TRACE(SERVICE_CALLBACK_LINE);
-               return VCHIQ_SUCCESS;
-       }
-
        DEBUG_TRACE(SERVICE_CALLBACK_LINE);
 
        return add_completion(instance, reason, header, user_service,