diff options
| -rw-r--r-- | drivers/usb/wusbcore/devconnect.c | 1 | ||||
| -rw-r--r-- | drivers/usb/wusbcore/rh.c | 3 | ||||
| -rw-r--r-- | drivers/uwb/allocator.c | 1 | ||||
| -rw-r--r-- | drivers/uwb/rsv.c | 17 |
4 files changed, 17 insertions, 5 deletions
diff --git a/drivers/usb/wusbcore/devconnect.c b/drivers/usb/wusbcore/devconnect.c index e2e7e4bc8463..8e18141bb2e0 100644 --- a/drivers/usb/wusbcore/devconnect.c +++ b/drivers/usb/wusbcore/devconnect.c | |||
| @@ -386,6 +386,7 @@ static void __wusbhc_dev_disconnect(struct wusbhc *wusbhc, | |||
| 386 | | USB_PORT_STAT_LOW_SPEED | USB_PORT_STAT_HIGH_SPEED); | 386 | | USB_PORT_STAT_LOW_SPEED | USB_PORT_STAT_HIGH_SPEED); |
| 387 | port->change |= USB_PORT_STAT_C_CONNECTION | USB_PORT_STAT_C_ENABLE; | 387 | port->change |= USB_PORT_STAT_C_CONNECTION | USB_PORT_STAT_C_ENABLE; |
| 388 | if (wusb_dev) { | 388 | if (wusb_dev) { |
| 389 | dev_dbg(wusbhc->dev, "disconnecting device from port %d\n", wusb_dev->port_idx); | ||
| 389 | if (!list_empty(&wusb_dev->cack_node)) | 390 | if (!list_empty(&wusb_dev->cack_node)) |
| 390 | list_del_init(&wusb_dev->cack_node); | 391 | list_del_init(&wusb_dev->cack_node); |
| 391 | /* For the one in cack_add() */ | 392 | /* For the one in cack_add() */ |
diff --git a/drivers/usb/wusbcore/rh.c b/drivers/usb/wusbcore/rh.c index 95c6fa3bf6b2..407a9fcc89cc 100644 --- a/drivers/usb/wusbcore/rh.c +++ b/drivers/usb/wusbcore/rh.c | |||
| @@ -100,6 +100,9 @@ static int wusbhc_rh_port_reset(struct wusbhc *wusbhc, u8 port_idx) | |||
| 100 | struct wusb_port *port = wusb_port_by_idx(wusbhc, port_idx); | 100 | struct wusb_port *port = wusb_port_by_idx(wusbhc, port_idx); |
| 101 | struct wusb_dev *wusb_dev = port->wusb_dev; | 101 | struct wusb_dev *wusb_dev = port->wusb_dev; |
| 102 | 102 | ||
| 103 | if (wusb_dev == NULL) | ||
| 104 | return -ENOTCONN; | ||
| 105 | |||
| 103 | port->status |= USB_PORT_STAT_RESET; | 106 | port->status |= USB_PORT_STAT_RESET; |
| 104 | port->change |= USB_PORT_STAT_C_RESET; | 107 | port->change |= USB_PORT_STAT_C_RESET; |
| 105 | 108 | ||
diff --git a/drivers/uwb/allocator.c b/drivers/uwb/allocator.c index c8185e6b0cd5..c13cec7dcbc5 100644 --- a/drivers/uwb/allocator.c +++ b/drivers/uwb/allocator.c | |||
| @@ -15,7 +15,6 @@ | |||
| 15 | * You should have received a copy of the GNU General Public License | 15 | * You should have received a copy of the GNU General Public License |
| 16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 17 | */ | 17 | */ |
| 18 | #include <linux/version.h> | ||
| 19 | #include <linux/kernel.h> | 18 | #include <linux/kernel.h> |
| 20 | #include <linux/uwb.h> | 19 | #include <linux/uwb.h> |
| 21 | 20 | ||
diff --git a/drivers/uwb/rsv.c b/drivers/uwb/rsv.c index ec6eecb32f30..886f977cd2ea 100644 --- a/drivers/uwb/rsv.c +++ b/drivers/uwb/rsv.c | |||
| @@ -114,7 +114,8 @@ void uwb_rsv_dump(char *text, struct uwb_rsv *rsv) | |||
| 114 | devaddr = rsv->target.devaddr; | 114 | devaddr = rsv->target.devaddr; |
| 115 | uwb_dev_addr_print(target, sizeof(target), &devaddr); | 115 | uwb_dev_addr_print(target, sizeof(target), &devaddr); |
| 116 | 116 | ||
| 117 | dev_dbg(dev, "rsv %s -> %s: %s\n", owner, target, uwb_rsv_state_str(rsv->state)); | 117 | dev_dbg(dev, "rsv %s %s -> %s: %s\n", |
| 118 | text, owner, target, uwb_rsv_state_str(rsv->state)); | ||
| 118 | } | 119 | } |
| 119 | 120 | ||
| 120 | static void uwb_rsv_release(struct kref *kref) | 121 | static void uwb_rsv_release(struct kref *kref) |
| @@ -511,8 +512,7 @@ void uwb_rsv_remove(struct uwb_rsv *rsv) | |||
| 511 | 512 | ||
| 512 | if (uwb_rsv_is_owner(rsv)) | 513 | if (uwb_rsv_is_owner(rsv)) |
| 513 | uwb_rsv_put_stream(rsv); | 514 | uwb_rsv_put_stream(rsv); |
| 514 | 515 | ||
| 515 | del_timer_sync(&rsv->timer); | ||
| 516 | uwb_dev_put(rsv->owner); | 516 | uwb_dev_put(rsv->owner); |
| 517 | if (rsv->target.type == UWB_RSV_TARGET_DEV) | 517 | if (rsv->target.type == UWB_RSV_TARGET_DEV) |
| 518 | uwb_dev_put(rsv->target.dev); | 518 | uwb_dev_put(rsv->target.dev); |
| @@ -943,13 +943,22 @@ void uwb_rsv_remove_all(struct uwb_rc *rc) | |||
| 943 | 943 | ||
| 944 | mutex_lock(&rc->rsvs_mutex); | 944 | mutex_lock(&rc->rsvs_mutex); |
| 945 | list_for_each_entry_safe(rsv, t, &rc->reservations, rc_node) { | 945 | list_for_each_entry_safe(rsv, t, &rc->reservations, rc_node) { |
| 946 | uwb_rsv_remove(rsv); | 946 | if (rsv->state != UWB_RSV_STATE_NONE) |
| 947 | uwb_rsv_set_state(rsv, UWB_RSV_STATE_NONE); | ||
| 948 | del_timer_sync(&rsv->timer); | ||
| 947 | } | 949 | } |
| 948 | /* Cancel any postponed update. */ | 950 | /* Cancel any postponed update. */ |
| 949 | rc->set_drp_ie_pending = 0; | 951 | rc->set_drp_ie_pending = 0; |
| 950 | mutex_unlock(&rc->rsvs_mutex); | 952 | mutex_unlock(&rc->rsvs_mutex); |
| 951 | 953 | ||
| 952 | cancel_delayed_work_sync(&rc->rsv_update_work); | 954 | cancel_delayed_work_sync(&rc->rsv_update_work); |
| 955 | flush_workqueue(rc->rsv_workq); | ||
| 956 | |||
| 957 | mutex_lock(&rc->rsvs_mutex); | ||
| 958 | list_for_each_entry_safe(rsv, t, &rc->reservations, rc_node) { | ||
| 959 | uwb_rsv_remove(rsv); | ||
| 960 | } | ||
| 961 | mutex_unlock(&rc->rsvs_mutex); | ||
| 953 | } | 962 | } |
| 954 | 963 | ||
| 955 | void uwb_rsv_init(struct uwb_rc *rc) | 964 | void uwb_rsv_init(struct uwb_rc *rc) |
