On 07/06/2016 03:35 PM, Thomas Falcon wrote:
> @@ -3560,6 +3608,7 @@ static const struct file_operations ibmvnic_dump_ops = {
> 
>  static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id)
>  {
> +     unsigned long timeout = msecs_to_jiffies(30000);
>       struct ibmvnic_adapter *adapter;
>       struct net_device *netdev;
>       unsigned char *mac_addr_p;
> @@ -3638,30 +3687,26 @@ static int ibmvnic_probe(struct vio_dev *dev, const 
> struct vio_device_id *id)
>       ibmvnic_send_crq_init(adapter);
> 
>       init_completion(&adapter->init_done);
> -     wait_for_completion(&adapter->init_done);
> +     if (!wait_for_completion_timeout(&adapter->init_done, timeout))
> +             return 0;
> 
>       do {
> -             adapter->renegotiate = false;
> -
> -             init_sub_crqs(adapter, 0);
> -             reinit_completion(&adapter->init_done);
> -             wait_for_completion(&adapter->init_done);
> -
>               if (adapter->renegotiate) {
> -                     release_sub_crqs(adapter);
> +                     adapter->renegotiate = false;
> +                     release_sub_crqs_no_irqs(adapter);
>                       send_cap_queries(adapter);
> 
>                       reinit_completion(&adapter->init_done);
> -                     wait_for_completion(&adapter->init_done);
> +                     if (!wait_for_completion_timeout(&adapter->init_done,
> +                                                      timeout))
> +                             return 0;
>               }
>       } while (adapter->renegotiate);

Instead of a do-while here, this should just be simplified to a while loop.

while (adapter->renegotiate) {
        ...
}

will serve the same purpose as

do {
        if (adapter->renegotiate) {
                ...
        }
} while (adapter->renegotiate);

Same goes for the similar loop in patch 4/4.

Reply via email to