Message ID | 20191113154016.42836-1-jeffrey.l.hugo@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | f8a595a87e93a33a10879f4b856be818d2f53c84 |
Headers | show |
Series | [v2] ath10k: Fix qmi init error handling | expand |
Jeffrey Hugo <jeffrey.l.hugo@gmail.com> wrote: > When ath10k_qmi_init() fails, the error handling does not free the irq > resources, which causes an issue if we EPROBE_DEFER as we'll attempt to > (re-)register irqs which are already registered. > > Fix this by doing a power off since we just powered on the hardware, and > freeing the irqs as error handling. > > Fixes: ba94c753ccb4 ("ath10k: add QMI message handshake for wcn3990 client") > Signed-off-by: Jeffrey Hugo <jeffrey.l.hugo@gmail.com> > Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Patch applied to ath-next branch of ath.git, thanks. f8a595a87e93 ath10k: Fix qmi init error handling
diff --git a/drivers/net/wireless/ath/ath10k/snoc.c b/drivers/net/wireless/ath/ath10k/snoc.c index cd22c8654aa9..50b3d443ad37 100644 --- a/drivers/net/wireless/ath/ath10k/snoc.c +++ b/drivers/net/wireless/ath/ath10k/snoc.c @@ -1563,13 +1563,16 @@ static int ath10k_snoc_probe(struct platform_device *pdev) ret = ath10k_qmi_init(ar, msa_size); if (ret) { ath10k_warn(ar, "failed to register wlfw qmi client: %d\n", ret); - goto err_core_destroy; + goto err_power_off; } ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc probe\n"); return 0; +err_power_off: + ath10k_hw_power_off(ar); + err_free_irq: ath10k_snoc_free_irq(ar);
When ath10k_qmi_init() fails, the error handling does not free the irq resources, which causes an issue if we EPROBE_DEFER as we'll attempt to (re-)register irqs which are already registered. Fix this by doing a power off since we just powered on the hardware, and freeing the irqs as error handling. Fixes: ba94c753ccb4 ("ath10k: add QMI message handshake for wcn3990 client") Signed-off-by: Jeffrey Hugo <jeffrey.l.hugo@gmail.com> --- v2: -Call power_off() as well drivers/net/wireless/ath/ath10k/snoc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)