mei: wake also writers on reset
authorTomas Winkler <tomas.winkler@intel.com>
Wed, 24 Jul 2013 13:22:57 +0000 (16:22 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jul 2013 05:49:57 +0000 (22:49 -0700)
wake writers otherwise might have processes waiting
endlessly on wait_tx during reset

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/mei/client.c
drivers/misc/mei/client.h
drivers/misc/mei/init.c

index 21d3f5aa8353eebc9de02ebf312b5d10ee01ea24..af1e60205140ae14a976037212d2f481fe304abf 100644 (file)
@@ -892,18 +892,22 @@ void mei_cl_all_disconnect(struct mei_device *dev)
 
 
 /**
- * mei_cl_all_read_wakeup  - wake up all readings so they can be interrupted
+ * mei_cl_all_wakeup  - wake up all readers and writers they can be interrupted
  *
  * @dev  - mei device
  */
-void mei_cl_all_read_wakeup(struct mei_device *dev)
+void mei_cl_all_wakeup(struct mei_device *dev)
 {
        struct mei_cl *cl, *next;
        list_for_each_entry_safe(cl, next, &dev->file_list, link) {
                if (waitqueue_active(&cl->rx_wait)) {
-                       dev_dbg(&dev->pdev->dev, "Waking up client!\n");
+                       dev_dbg(&dev->pdev->dev, "Waking up reading client!\n");
                        wake_up_interruptible(&cl->rx_wait);
                }
+               if (waitqueue_active(&cl->tx_wait)) {
+                       dev_dbg(&dev->pdev->dev, "Waking up writing client!\n");
+                       wake_up_interruptible(&cl->tx_wait);
+               }
        }
 }
 
index 26b157d8bad5ab421ea4f2476e399e25f2be1bfa..9bae4c724603b3d3ac70346e4deefcf6bceedb19 100644 (file)
@@ -99,7 +99,7 @@ void mei_host_client_init(struct work_struct *work);
 
 
 void mei_cl_all_disconnect(struct mei_device *dev);
-void mei_cl_all_read_wakeup(struct mei_device *dev);
+void mei_cl_all_wakeup(struct mei_device *dev);
 void mei_cl_all_write_clear(struct mei_device *dev);
 
 #endif /* _MEI_CLIENT_H_ */
index ed1d75203af6e702de1e7a5c3fbdb6b6e8a765d6..7929e14627bafa6defd1c535415b36e9cd6d71d2 100644 (file)
@@ -196,7 +196,7 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled)
        mei_hbm_start_req(dev);
 
        /* wake up all readings so they can be interrupted */
-       mei_cl_all_read_wakeup(dev);
+       mei_cl_all_wakeup(dev);
 
        /* remove all waiting requests */
        mei_cl_all_write_clear(dev);