OSDN Git Service

Drivers: hv: vmbus: unify calls to percpu_channel_enq()
authorVitaly Kuznetsov <vkuznets@redhat.com>
Thu, 7 May 2015 00:47:42 +0000 (17:47 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 24 May 2015 19:19:00 +0000 (12:19 -0700)
Remove some code duplication, no functional change intended.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hv/channel_mgmt.c

index 4b9d89a..b28cbdf 100644 (file)
@@ -233,7 +233,6 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
 {
        struct vmbus_channel *channel;
        bool fnew = true;
-       bool enq = false;
        unsigned long flags;
 
        /* Make sure this is a new offer */
@@ -249,25 +248,12 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
                }
        }
 
-       if (fnew) {
+       if (fnew)
                list_add_tail(&newchannel->listentry,
                              &vmbus_connection.chn_list);
-               enq = true;
-       }
 
        spin_unlock_irqrestore(&vmbus_connection.channel_lock, flags);
 
-       if (enq) {
-               if (newchannel->target_cpu != get_cpu()) {
-                       put_cpu();
-                       smp_call_function_single(newchannel->target_cpu,
-                                                percpu_channel_enq,
-                                                newchannel, true);
-               } else {
-                       percpu_channel_enq(newchannel);
-                       put_cpu();
-               }
-       }
        if (!fnew) {
                /*
                 * Check to see if this is a sub-channel.
@@ -280,26 +266,19 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
                        spin_lock_irqsave(&channel->lock, flags);
                        list_add_tail(&newchannel->sc_list, &channel->sc_list);
                        spin_unlock_irqrestore(&channel->lock, flags);
-
-                       if (newchannel->target_cpu != get_cpu()) {
-                               put_cpu();
-                               smp_call_function_single(newchannel->target_cpu,
-                                                        percpu_channel_enq,
-                                                        newchannel, true);
-                       } else {
-                               percpu_channel_enq(newchannel);
-                               put_cpu();
-                       }
-
-                       newchannel->state = CHANNEL_OPEN_STATE;
                        channel->num_sc++;
-                       if (channel->sc_creation_callback != NULL)
-                               channel->sc_creation_callback(newchannel);
-
-                       return;
-               }
+               } else
+                       goto err_free_chan;
+       }
 
-               goto err_free_chan;
+       if (newchannel->target_cpu != get_cpu()) {
+               put_cpu();
+               smp_call_function_single(newchannel->target_cpu,
+                                        percpu_channel_enq,
+                                        newchannel, true);
+       } else {
+               percpu_channel_enq(newchannel);
+               put_cpu();
        }
 
        /*
@@ -309,6 +288,12 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
         */
        newchannel->state = CHANNEL_OPEN_STATE;
 
+       if (!fnew) {
+               if (channel->sc_creation_callback != NULL)
+                       channel->sc_creation_callback(newchannel);
+               return;
+       }
+
        /*
         * Start the process of binding this offer to the driver
         * We need to set the DeviceObject field before calling