Merge tag 'xfs-for-linus-4.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[cascardo/linux.git] / drivers / misc / mei / bus.c
index 1f33fea..8cac7ef 100644 (file)
@@ -126,7 +126,8 @@ ssize_t __mei_cl_recv(struct mei_cl *cl, u8 *buf, size_t length)
                goto out;
 
        /* wait on event only if there is no other waiter */
-       if (list_empty(&cl->rd_completed) && !waitqueue_active(&cl->rx_wait)) {
+       /* synchronized under device mutex */
+       if (!waitqueue_active(&cl->rx_wait)) {
 
                mutex_unlock(&bus->device_lock);
 
@@ -142,7 +143,7 @@ ssize_t __mei_cl_recv(struct mei_cl *cl, u8 *buf, size_t length)
                mutex_lock(&bus->device_lock);
 
                if (!mei_cl_is_connected(cl)) {
-                       rets = -EBUSY;
+                       rets = -ENODEV;
                        goto out;
                }
        }
@@ -234,7 +235,7 @@ static void mei_cl_bus_event_work(struct work_struct *work)
        /* Prepare for the next read */
        if (cldev->events_mask & BIT(MEI_CL_EVENT_RX)) {
                mutex_lock(&bus->device_lock);
-               mei_cl_read_start(cldev->cl, 0, NULL);
+               mei_cl_read_start(cldev->cl, mei_cl_mtu(cldev->cl), NULL);
                mutex_unlock(&bus->device_lock);
        }
 }
@@ -324,7 +325,7 @@ int mei_cldev_register_event_cb(struct mei_cl_device *cldev,
 
        if (cldev->events_mask & BIT(MEI_CL_EVENT_RX)) {
                mutex_lock(&bus->device_lock);
-               ret = mei_cl_read_start(cldev->cl, 0, NULL);
+               ret = mei_cl_read_start(cldev->cl, mei_cl_mtu(cldev->cl), NULL);
                mutex_unlock(&bus->device_lock);
                if (ret && ret != -EBUSY)
                        return ret;
@@ -983,12 +984,10 @@ void mei_cl_bus_rescan_work(struct work_struct *work)
                container_of(work, struct mei_device, bus_rescan_work);
        struct mei_me_client *me_cl;
 
-       mutex_lock(&bus->device_lock);
        me_cl = mei_me_cl_by_uuid(bus, &mei_amthif_guid);
        if (me_cl)
                mei_amthif_host_init(bus, me_cl);
        mei_me_cl_put(me_cl);
-       mutex_unlock(&bus->device_lock);
 
        mei_cl_bus_rescan(bus);
 }