On 7/5/2017 8:07 PM, Stephen Hemminger wrote:
> On Tue,  4 Jul 2017 17:13:28 +0100
> Ferruh Yigit <ferruh.yi...@intel.com> wrote:
> 
>> +int unci_nl_exec(u32 cmd, struct net_device *dev, void *in_data,
>> +            size_t in_data_len, void *out_data, size_t out_data_len)
>> +{
>> +    struct unci_dev *unci = netdev_priv(dev);
>> +    int err = -EINVAL;
>> +    int ret;
>> +
>> +    if (out_data_len > UNCI_NL_MSG_LEN) {
>> +            pr_err("Message is too big to receive:%zu\n", out_data_len);
>> +            return err;
>> +    }
>> +
>> +    mutex_lock(&sync_lock);
>> +    ret = unci_response_buffer_register(cmd, out_data, out_data_len,
>> +                    &unci->msg_received, &err);
>> +    if (ret) {
>> +            mutex_unlock(&sync_lock);
>> +            return -EINVAL;
>> +    }
>> +
>> +    ret = unci_nl_send(cmd, unci->port_id, unci->pid, in_data, in_data_len);
>> +    if (ret) {
>> +            unci_response_buffer_unregister(response_buffer.magic);
>> +            mutex_unlock(&sync_lock);
>> +            return ret;
>> +    }
>> +
>> +    ret = wait_for_completion_interruptible_timeout(&unci->msg_received,
>> +                     msecs_to_jiffies(UNCI_CMD_TIMEOUT));
> 
> Blocking for completion with mutex held? 
> Sleeping with mutex held is not allowed in Linux.
> 
> You will see this if you run with lockdep and all the other kernel debug
> config options.

Thank you for the review,

I will send a new version addressing all comments.

Thanks,
ferruh

Reply via email to