Message ID | e4098f0c8a9ac51997de07f38c2bcdf7042d6db1.1592755166.git.lorenzo@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | b1e79d105516fb96c39eb8a780936b87bae8e3e1 |
Delegated to: | Kalle Valo |
Headers | show |
Series | [v2,wireless-drivers] mt76: mt7663u: fix memory leaks in mt7663u_probe | expand |
Lorenzo Bianconi <lorenzo@kernel.org> writes: > Fix the two following memory leaks in mt7663u_probe: > 1- if device power-own times out, remove ieee80211 hw device. > 2- if mt76u queues allocation fails, remove pending urbs. One logical change per patch, please. If you have to create a list of changes in the commit log that's a good sign that you need to split the patch :)
> Lorenzo Bianconi <lorenzo@kernel.org> writes: > > > Fix the two following memory leaks in mt7663u_probe: > > 1- if device power-own times out, remove ieee80211 hw device. > > 2- if mt76u queues allocation fails, remove pending urbs. > > One logical change per patch, please. If you have to create a list of > changes in the commit log that's a good sign that you need to split the > patch :) Hi Kalle, both of them are memory leaks in the error path of the same routine (mt7663u_probe()). Do I need to split them even in this case? If so I am fine with it. Do I need to send a v3? Regards, Lorenzo > > -- > https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches >
Lorenzo Bianconi <lorenzo.bianconi@redhat.com> writes: >> Lorenzo Bianconi <lorenzo@kernel.org> writes: >> >> > Fix the two following memory leaks in mt7663u_probe: >> > 1- if device power-own times out, remove ieee80211 hw device. >> > 2- if mt76u queues allocation fails, remove pending urbs. >> >> One logical change per patch, please. If you have to create a list of >> changes in the commit log that's a good sign that you need to split the >> patch :) > > both of them are memory leaks in the error path of the same routine (mt7663u_probe()). > Do I need to split them even in this case? If so I am fine with it. > Do I need to send a v3? Oh, I didn't notice that they were in the same function. So I guess this sort of gray area and no need to send v3 because of this.
> Lorenzo Bianconi <lorenzo.bianconi@redhat.com> writes: > > >> Lorenzo Bianconi <lorenzo@kernel.org> writes: > >> > >> > Fix the two following memory leaks in mt7663u_probe: > >> > 1- if device power-own times out, remove ieee80211 hw device. > >> > 2- if mt76u queues allocation fails, remove pending urbs. > >> > >> One logical change per patch, please. If you have to create a list of > >> changes in the commit log that's a good sign that you need to split the > >> patch :) > > > > both of them are memory leaks in the error path of the same routine (mt7663u_probe()). > > Do I need to split them even in this case? If so I am fine with it. > > Do I need to send a v3? > > Oh, I didn't notice that they were in the same function. So I guess this > sort of gray area and no need to send v3 because of this. ack, I will take into account for the next time, thanks :) Regards, Lorenzo > > -- > https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches >
Lorenzo Bianconi <lorenzo@kernel.org> wrote: > Fix the two following memory leaks in mt7663u_probe: > 1- if device power-own times out, remove ieee80211 hw device. > 2- if mt76u queues allocation fails, remove pending urbs. > > Fixes: eb99cc95c3b65 ("mt76: mt7615: introduce mt7663u support") > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Patch applied to wireless-drivers.git, thanks. b1e79d105516 mt76: mt7663u: fix memory leaks in mt7663u_probe
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/usb.c b/drivers/net/wireless/mediatek/mt76/mt7615/usb.c index a50077eb24d7..c7763e209e00 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7615/usb.c +++ b/drivers/net/wireless/mediatek/mt76/mt7615/usb.c @@ -329,25 +329,26 @@ static int mt7663u_probe(struct usb_interface *usb_intf, if (!mt76_poll_msec(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_PWR_ON, FW_STATE_PWR_ON << 1, 500)) { dev_err(dev->mt76.dev, "Timeout for power on\n"); - return -EIO; + ret = -EIO; + goto error; } alloc_queues: ret = mt76u_alloc_mcu_queue(&dev->mt76); if (ret) - goto error; + goto error_free_q; ret = mt76u_alloc_queues(&dev->mt76); if (ret) - goto error; + goto error_free_q; ret = mt7663u_register_device(dev); if (ret) - goto error_freeq; + goto error_free_q; return 0; -error_freeq: +error_free_q: mt76u_queues_deinit(&dev->mt76); error: mt76u_deinit(&dev->mt76); diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c index fb97ea25b4d4..2e89b0514ff6 100644 --- a/drivers/net/wireless/mediatek/mt76/usb.c +++ b/drivers/net/wireless/mediatek/mt76/usb.c @@ -1066,11 +1066,16 @@ static int mt76u_alloc_tx(struct mt76_dev *dev) static void mt76u_free_tx(struct mt76_dev *dev) { - struct mt76_queue *q; - int i, j; + int i; for (i = 0; i < IEEE80211_NUM_ACS; i++) { + struct mt76_queue *q; + int j; + q = dev->q_tx[i].q; + if (!q) + continue; + for (j = 0; j < q->ndesc; j++) usb_free_urb(q->entry[j].urb); } @@ -1078,17 +1083,22 @@ static void mt76u_free_tx(struct mt76_dev *dev) void mt76u_stop_tx(struct mt76_dev *dev) { - struct mt76_queue_entry entry; - struct mt76_queue *q; - int i, j, ret; + int ret; ret = wait_event_timeout(dev->tx_wait, !mt76_has_tx_pending(&dev->phy), HZ / 5); if (!ret) { + struct mt76_queue_entry entry; + struct mt76_queue *q; + int i, j; + dev_err(dev->dev, "timed out waiting for pending tx\n"); for (i = 0; i < IEEE80211_NUM_ACS; i++) { q = dev->q_tx[i].q; + if (!q) + continue; + for (j = 0; j < q->ndesc; j++) usb_kill_urb(q->entry[j].urb); } @@ -1100,6 +1110,8 @@ void mt76u_stop_tx(struct mt76_dev *dev) */ for (i = 0; i < IEEE80211_NUM_ACS; i++) { q = dev->q_tx[i].q; + if (!q) + continue; /* Assure we are in sync with killed tasklet. */ spin_lock_bh(&q->lock);
Fix the two following memory leaks in mt7663u_probe: 1- if device power-own times out, remove ieee80211 hw device. 2- if mt76u queues allocation fails, remove pending urbs. Fixes: eb99cc95c3b65 ("mt76: mt7615: introduce mt7663u support") Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> --- Changes since v1: - properly set return value if device power-own fails --- .../net/wireless/mediatek/mt76/mt7615/usb.c | 11 +++++----- drivers/net/wireless/mediatek/mt76/usb.c | 22 ++++++++++++++----- 2 files changed, 23 insertions(+), 10 deletions(-)