summaryrefslogtreecommitdiffstats
path: root/drivers/net/wimax/i2400m/fw.c
diff options
context:
space:
mode:
authorInaky Perez-Gonzalez2009-06-03 03:45:55 +0200
committerInaky Perez-Gonzalez2009-06-11 12:30:23 +0200
commitb4013f91cdda10f3f15530914f3c7f39738b0b50 (patch)
tree8dc5ab721c3f2028de4e2372436f76bb059a9fff /drivers/net/wimax/i2400m/fw.c
parentwimax/i2400m: fix oops when the TX FIFO fills up due to a missing check (diff)
downloadkernel-qcow2-linux-b4013f91cdda10f3f15530914f3c7f39738b0b50.tar.gz
kernel-qcow2-linux-b4013f91cdda10f3f15530914f3c7f39738b0b50.tar.xz
kernel-qcow2-linux-b4013f91cdda10f3f15530914f3c7f39738b0b50.zip
wimax/i2400m: if a device reboot happens during probe, handle it
When a device reboot happens when we are under probe, with init_mutex taken, make sure we can recover. Have dev_reset_handle set boot mode and i2400m_msg_to_dev() will see it and fail gracefully instead of timing out. Found and diagnosed by Cindy H. Kao. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
Diffstat (limited to 'drivers/net/wimax/i2400m/fw.c')
-rw-r--r--drivers/net/wimax/i2400m/fw.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/wimax/i2400m/fw.c b/drivers/net/wimax/i2400m/fw.c
index 26924f17f19d..01c926ed309e 100644
--- a/drivers/net/wimax/i2400m/fw.c
+++ b/drivers/net/wimax/i2400m/fw.c
@@ -985,6 +985,7 @@ int i2400m_fw_dnload(struct i2400m *i2400m, const struct i2400m_bcf_hdr *bcf,
d_fnstart(5, dev, "(i2400m %p bcf %p size %zu)\n",
i2400m, bcf, bcf_size);
i2400m->boot_mode = 1;
+ wmb(); /* Make sure other readers see it */
hw_reboot:
if (count-- == 0) {
ret = -ERESTARTSYS;
@@ -1033,6 +1034,7 @@ hw_reboot:
d_printf(2, dev, "fw %s successfully uploaded\n",
i2400m->fw_name);
i2400m->boot_mode = 0;
+ wmb(); /* Make sure i2400m_msg_to_dev() sees boot_mode */
error_dnload_finalize:
error_dnload_bcf:
error_dnload_init: