struct ibmvnic_query_ip_offload_buffer *ip_offload_buf =
                    &adapter->ip_offload_buf;
 
+               adapter->wait_capability = false;
                adapter->ip_offload_tok = dma_map_single(dev, ip_offload_buf,
                                                         buf_sz,
                                                         DMA_FROM_DEVICE);
        }
 
 out:
-       if (atomic_read(&adapter->running_cap_crqs) == 0)
+       if (atomic_read(&adapter->running_cap_crqs) == 0) {
+               adapter->wait_capability = false;
                init_sub_crqs(adapter, 0);
                /* We're done querying the capabilities, initialize sub-crqs */
+       }
 }
 
 static void handle_control_ras_rsp(union ibmvnic_crq *crq,
                        ibmvnic_handle_crq(crq, adapter);
                        crq->generic.first = 0;
                } else {
-                       done = true;
+                       /* remain in tasklet until all
+                        * capabilities responses are received
+                        */
+                       if (!adapter->wait_capability)
+                               done = true;
                }
        }
+       /* if capabilities CRQ's were sent in this tasklet, the following
+        * tasklet must wait until all responses are received
+        */
+       if (atomic_read(&adapter->running_cap_crqs) != 0)
+               adapter->wait_capability = true;
        spin_unlock_irqrestore(&queue->lock, flags);
 }