* [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync()
@ 2023-07-24 8:44 Dmitry Antipov
2023-07-24 8:44 ` [PATCH 2/4] wifi: libertas: use convenient lists to manage SDIO packets Dmitry Antipov
` (3 more replies)
0 siblings, 4 replies; 20+ messages in thread
From: Dmitry Antipov @ 2023-07-24 8:44 UTC (permalink / raw)
To: Kalle Valo; +Cc: Doug Brown, linux-wireless, lvc-project, Dmitry Antipov
Add missing 'cancel_work_sync()' in 'if_sdio_remove()'
and on error handling path in 'if_sdio_probe()'.
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
---
drivers/net/wireless/marvell/libertas/if_sdio.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/wireless/marvell/libertas/if_sdio.c b/drivers/net/wireless/marvell/libertas/if_sdio.c
index a63c5e622ee3..a35b33e84670 100644
--- a/drivers/net/wireless/marvell/libertas/if_sdio.c
+++ b/drivers/net/wireless/marvell/libertas/if_sdio.c
@@ -1233,6 +1233,7 @@ static int if_sdio_probe(struct sdio_func *func,
flush_workqueue(card->workqueue);
lbs_remove_card(priv);
free:
+ cancel_work_sync(&card->packet_worker);
destroy_workqueue(card->workqueue);
err_queue:
while (card->packets) {
@@ -1277,6 +1278,7 @@ static void if_sdio_remove(struct sdio_func *func)
lbs_stop_card(card->priv);
lbs_remove_card(card->priv);
+ cancel_work_sync(&card->packet_worker);
destroy_workqueue(card->workqueue);
while (card->packets) {
--
2.41.0
^ permalink raw reply related [flat|nested] 20+ messages in thread* [PATCH 2/4] wifi: libertas: use convenient lists to manage SDIO packets 2023-07-24 8:44 [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() Dmitry Antipov @ 2023-07-24 8:44 ` Dmitry Antipov 2023-07-24 8:44 ` [PATCH 3/4] wifi: libertas: simplify list operations in free_if_spi_card() Dmitry Antipov ` (2 subsequent siblings) 3 siblings, 0 replies; 20+ messages in thread From: Dmitry Antipov @ 2023-07-24 8:44 UTC (permalink / raw) To: Kalle Valo; +Cc: Doug Brown, linux-wireless, lvc-project, Dmitry Antipov Use convenient lists to manage SDIO packets, adjust 'struct if_sdio_packet', 'struct if_sdio_card' and related code accordingly. Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> --- .../net/wireless/marvell/libertas/if_sdio.c | 37 +++++++------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/drivers/net/wireless/marvell/libertas/if_sdio.c b/drivers/net/wireless/marvell/libertas/if_sdio.c index a35b33e84670..c72081cf8a85 100644 --- a/drivers/net/wireless/marvell/libertas/if_sdio.c +++ b/drivers/net/wireless/marvell/libertas/if_sdio.c @@ -101,7 +101,7 @@ MODULE_FIRMWARE("sd8688_helper.bin"); MODULE_FIRMWARE("sd8688.bin"); struct if_sdio_packet { - struct if_sdio_packet *next; + struct list_head list; u16 nb; u8 buffer[] __aligned(4); }; @@ -119,7 +119,7 @@ struct if_sdio_card { u8 buffer[65536] __attribute__((aligned(4))); spinlock_t lock; - struct if_sdio_packet *packets; + struct list_head packets; struct workqueue_struct *workqueue; struct work_struct packet_worker; @@ -404,9 +404,10 @@ static void if_sdio_host_to_card_worker(struct work_struct *work) while (1) { spin_lock_irqsave(&card->lock, flags); - packet = card->packets; + packet = list_first_entry_or_null(&card->packets, + struct if_sdio_packet, list); if (packet) - card->packets = packet->next; + list_del(&packet->list); spin_unlock_irqrestore(&card->lock, flags); if (!packet) @@ -909,7 +910,7 @@ static int if_sdio_host_to_card(struct lbs_private *priv, { int ret; struct if_sdio_card *card; - struct if_sdio_packet *packet, *cur; + struct if_sdio_packet *packet; u16 size; unsigned long flags; @@ -934,7 +935,6 @@ static int if_sdio_host_to_card(struct lbs_private *priv, goto out; } - packet->next = NULL; packet->nb = size; /* @@ -949,14 +949,7 @@ static int if_sdio_host_to_card(struct lbs_private *priv, spin_lock_irqsave(&card->lock, flags); - if (!card->packets) - card->packets = packet; - else { - cur = card->packets; - while (cur->next) - cur = cur->next; - cur->next = packet; - } + list_add_tail(&packet->list, &card->packets); switch (type) { case MVMS_CMD: @@ -1137,7 +1130,7 @@ static int if_sdio_probe(struct sdio_func *func, struct lbs_private *priv; int ret, i; unsigned int model; - struct if_sdio_packet *packet; + struct if_sdio_packet *packet, *tmp; for (i = 0;i < func->card->num_info;i++) { if (sscanf(func->card->info[i], @@ -1178,6 +1171,8 @@ static int if_sdio_probe(struct sdio_func *func, } spin_lock_init(&card->lock); + INIT_LIST_HEAD(&card->packets); + card->workqueue = alloc_workqueue("libertas_sdio", WQ_MEM_RECLAIM, 0); if (unlikely(!card->workqueue)) { ret = -ENOMEM; @@ -1236,11 +1231,8 @@ static int if_sdio_probe(struct sdio_func *func, cancel_work_sync(&card->packet_worker); destroy_workqueue(card->workqueue); err_queue: - while (card->packets) { - packet = card->packets; - card->packets = card->packets->next; + list_for_each_entry_safe(packet, tmp, &card->packets, list) kfree(packet); - } kfree(card); @@ -1250,7 +1242,7 @@ static int if_sdio_probe(struct sdio_func *func, static void if_sdio_remove(struct sdio_func *func) { struct if_sdio_card *card; - struct if_sdio_packet *packet; + struct if_sdio_packet *packet, *tmp; card = sdio_get_drvdata(func); @@ -1281,11 +1273,8 @@ static void if_sdio_remove(struct sdio_func *func) cancel_work_sync(&card->packet_worker); destroy_workqueue(card->workqueue); - while (card->packets) { - packet = card->packets; - card->packets = card->packets->next; + list_for_each_entry_safe(packet, tmp, &card->packets, list) kfree(packet); - } kfree(card); } -- 2.41.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 3/4] wifi: libertas: simplify list operations in free_if_spi_card() 2023-07-24 8:44 [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() Dmitry Antipov 2023-07-24 8:44 ` [PATCH 2/4] wifi: libertas: use convenient lists to manage SDIO packets Dmitry Antipov @ 2023-07-24 8:44 ` Dmitry Antipov 2023-07-24 8:44 ` [PATCH 4/4] wifi: libertas: cleanup SDIO reset Dmitry Antipov 2023-07-24 8:54 ` [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() Kalle Valo 3 siblings, 0 replies; 20+ messages in thread From: Dmitry Antipov @ 2023-07-24 8:44 UTC (permalink / raw) To: Kalle Valo; +Cc: Doug Brown, linux-wireless, lvc-project, Dmitry Antipov Use 'list_for_each_entry_safe()' to simplify list operations in 'free_if_spi_card()'. Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> --- drivers/net/wireless/marvell/libertas/if_spi.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/marvell/libertas/if_spi.c b/drivers/net/wireless/marvell/libertas/if_spi.c index 1225fc0e3352..3d53e444ba19 100644 --- a/drivers/net/wireless/marvell/libertas/if_spi.c +++ b/drivers/net/wireless/marvell/libertas/if_spi.c @@ -76,16 +76,13 @@ struct if_spi_card { static void free_if_spi_card(struct if_spi_card *card) { - struct list_head *cursor, *next; - struct if_spi_packet *packet; + struct if_spi_packet *packet, *tmp; - list_for_each_safe(cursor, next, &card->cmd_packet_list) { - packet = container_of(cursor, struct if_spi_packet, list); + list_for_each_entry_safe(packet, tmp, &card->cmd_packet_list, list) { list_del(&packet->list); kfree(packet); } - list_for_each_safe(cursor, next, &card->data_packet_list) { - packet = container_of(cursor, struct if_spi_packet, list); + list_for_each_entry_safe(packet, tmp, &card->data_packet_list, list) { list_del(&packet->list); kfree(packet); } -- 2.41.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 4/4] wifi: libertas: cleanup SDIO reset 2023-07-24 8:44 [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() Dmitry Antipov 2023-07-24 8:44 ` [PATCH 2/4] wifi: libertas: use convenient lists to manage SDIO packets Dmitry Antipov 2023-07-24 8:44 ` [PATCH 3/4] wifi: libertas: simplify list operations in free_if_spi_card() Dmitry Antipov @ 2023-07-24 8:44 ` Dmitry Antipov 2023-07-24 8:54 ` [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() Kalle Valo 3 siblings, 0 replies; 20+ messages in thread From: Dmitry Antipov @ 2023-07-24 8:44 UTC (permalink / raw) To: Kalle Valo; +Cc: Doug Brown, linux-wireless, lvc-project, Dmitry Antipov Embed SDIO reset worker in 'struct if_sdio_card' and so drop 'reset_host' and 'card_reset_work' static variables, adjust related code. Not sure whether it's possible to do something useful on 'mmc_add_host()' error, so just add 'dev_err()' to emit an error message. Found by Linux Verification Center (linuxtesting.org) with SVACE. Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> --- .../net/wireless/marvell/libertas/if_sdio.c | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/drivers/net/wireless/marvell/libertas/if_sdio.c b/drivers/net/wireless/marvell/libertas/if_sdio.c index c72081cf8a85..524034699972 100644 --- a/drivers/net/wireless/marvell/libertas/if_sdio.c +++ b/drivers/net/wireless/marvell/libertas/if_sdio.c @@ -123,6 +123,7 @@ struct if_sdio_card { struct workqueue_struct *workqueue; struct work_struct packet_worker; + struct work_struct reset_worker; u8 rx_unit; }; @@ -1022,10 +1023,19 @@ static int if_sdio_reset_deep_sleep_wakeup(struct lbs_private *priv) } -static struct mmc_host *reset_host; - static void if_sdio_reset_card_worker(struct work_struct *work) { + int ret; + const char *name; + struct device *dev; + struct if_sdio_card *card; + struct mmc_host *reset_host; + + card = container_of(work, struct if_sdio_card, reset_worker); + reset_host = card->func->card->host; + name = card->priv->dev->name; + dev = &card->func->dev; + /* * The actual reset operation must be run outside of lbs_thread. This * is because mmc_remove_host() will cause the device to be instantly @@ -1036,21 +1046,19 @@ static void if_sdio_reset_card_worker(struct work_struct *work) * instance for that reason. */ - pr_info("Resetting card..."); + dev_info(dev, "resetting card %s...", name); mmc_remove_host(reset_host); - mmc_add_host(reset_host); + ret = mmc_add_host(reset_host); + if (ret) + dev_err(dev, "%s: can't add mmc host, error %d\n", name, ret); } -static DECLARE_WORK(card_reset_work, if_sdio_reset_card_worker); static void if_sdio_reset_card(struct lbs_private *priv) { struct if_sdio_card *card = priv->card; - if (work_pending(&card_reset_work)) - return; - - reset_host = card->func->card->host; - schedule_work(&card_reset_work); + if (!work_pending(&card->reset_worker)) + schedule_work(&card->reset_worker); } static int if_sdio_power_save(struct lbs_private *priv) @@ -1178,6 +1186,8 @@ static int if_sdio_probe(struct sdio_func *func, ret = -ENOMEM; goto err_queue; } + + INIT_WORK(&card->reset_worker, if_sdio_reset_card_worker); INIT_WORK(&card->packet_worker, if_sdio_host_to_card_worker); init_waitqueue_head(&card->pwron_waitq); @@ -1229,6 +1239,7 @@ static int if_sdio_probe(struct sdio_func *func, lbs_remove_card(priv); free: cancel_work_sync(&card->packet_worker); + cancel_work_sync(&card->reset_worker); destroy_workqueue(card->workqueue); err_queue: list_for_each_entry_safe(packet, tmp, &card->packets, list) @@ -1271,6 +1282,7 @@ static void if_sdio_remove(struct sdio_func *func) lbs_remove_card(card->priv); cancel_work_sync(&card->packet_worker); + cancel_work_sync(&card->reset_worker); destroy_workqueue(card->workqueue); list_for_each_entry_safe(packet, tmp, &card->packets, list) @@ -1394,8 +1406,6 @@ static void __exit if_sdio_exit_module(void) /* Set the flag as user is removing this module. */ user_rmmod = 1; - cancel_work_sync(&card_reset_work); - sdio_unregister_driver(&if_sdio_driver); } -- 2.41.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() 2023-07-24 8:44 [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() Dmitry Antipov ` (2 preceding siblings ...) 2023-07-24 8:44 ` [PATCH 4/4] wifi: libertas: cleanup SDIO reset Dmitry Antipov @ 2023-07-24 8:54 ` Kalle Valo 2023-07-24 8:57 ` Dmitry Antipov 2023-07-24 21:27 ` Dan Williams 3 siblings, 2 replies; 20+ messages in thread From: Kalle Valo @ 2023-07-24 8:54 UTC (permalink / raw) To: Dmitry Antipov; +Cc: Doug Brown, linux-wireless, lvc-project Dmitry Antipov <dmantipov@yandex.ru> writes: > Add missing 'cancel_work_sync()' in 'if_sdio_remove()' > and on error handling path in 'if_sdio_probe()'. > > Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> How have you tested these patches? -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() 2023-07-24 8:54 ` [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() Kalle Valo @ 2023-07-24 8:57 ` Dmitry Antipov 2023-08-01 10:23 ` Kalle Valo 2023-07-24 21:27 ` Dan Williams 1 sibling, 1 reply; 20+ messages in thread From: Dmitry Antipov @ 2023-07-24 8:57 UTC (permalink / raw) To: Kalle Valo; +Cc: Doug Brown, linux-wireless, lvc-project On 7/24/23 11:54, Kalle Valo wrote: > > How have you tested these patches? > No physical hardware so compile tested only. Dmitry ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() 2023-07-24 8:57 ` Dmitry Antipov @ 2023-08-01 10:23 ` Kalle Valo 2023-08-01 11:47 ` Dmitry Antipov 0 siblings, 1 reply; 20+ messages in thread From: Kalle Valo @ 2023-08-01 10:23 UTC (permalink / raw) To: Dmitry Antipov; +Cc: Doug Brown, linux-wireless, lvc-project Dmitry Antipov <dmantipov@yandex.ru> writes: > On 7/24/23 11:54, Kalle Valo wrote: > >> How have you tested these patches? >> > > No physical hardware so compile tested only. In that case please always add "Compile tested only" to the commit log. It's important for us to know if a (non-trivial) patch is tested on a real hardware or just with a compiler. Another problem I see that you don't always reply to review comments and that gives an impression that the comments are ignored. Please always try to reply something to the review comments, even if just a simple "ok" or "I don't agree because...". -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() 2023-08-01 10:23 ` Kalle Valo @ 2023-08-01 11:47 ` Dmitry Antipov 2023-08-01 13:39 ` Kalle Valo 0 siblings, 1 reply; 20+ messages in thread From: Dmitry Antipov @ 2023-08-01 11:47 UTC (permalink / raw) To: Kalle Valo; +Cc: Doug Brown, linux-wireless, lvc-project On 8/1/23 13:23, Kalle Valo wrote: > In that case please always add "Compile tested only" to the commit log. > It's important for us to know if a (non-trivial) patch is tested on a > real hardware or just with a compiler. OK. > Another problem I see that you don't always reply to review comments and > that gives an impression that the comments are ignored. Please always > try to reply something to the review comments, even if just a simple > "ok" or "I don't agree because...". Looking through my e-mails for the previous month, I was unable to find an unanswered review. Could you please provide an example? I'll fix it ASAP. I don't want to speculate around the workflow of others and realize that someone (especially the maintainer) may be overloaded and too busy. OTOH it's not quite clear why the trivial things like https://marc.info/?l=linux-wireless&m=169030215701718&w=2 stalls for almost a week. Should I consider this as "ignored" too? Dmitry ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() 2023-08-01 11:47 ` Dmitry Antipov @ 2023-08-01 13:39 ` Kalle Valo 2023-08-01 14:02 ` Kalle Valo 0 siblings, 1 reply; 20+ messages in thread From: Kalle Valo @ 2023-08-01 13:39 UTC (permalink / raw) To: Dmitry Antipov; +Cc: Doug Brown, linux-wireless, lvc-project Dmitry Antipov <dmantipov@yandex.ru> writes: > On 8/1/23 13:23, Kalle Valo wrote: > >> Another problem I see that you don't always reply to review comments and >> that gives an impression that the comments are ignored. Please always >> try to reply something to the review comments, even if just a simple >> "ok" or "I don't agree because...". > > Looking through my e-mails for the previous month, I was unable to find an > unanswered review. Could you please provide an example? I'll fix it > ASAP. You have sent so many patches and I don't have time to start go through them. Maybe I noticed that with some of mwifiex patches, not sure. But that doesn't matter, I just hope that in the future you reply to comments. > I don't want to speculate around the workflow of others and realize > that someone (especially the maintainer) may be overloaded and too > busy. OTOH it's not quite clear why the trivial things like > https://marc.info/?l=linux-wireless&m=169030215701718&w=2 stalls for > almost a week. Should I consider this as "ignored" too? A delay of week is business as usual, I have patches in queue which are from last October: https://patchwork.kernel.org/project/linux-wireless/list/?series=684424&state=* Remember that this is not a 24/7 service and we just had a summer break. I have 160 patches in patchwork right so expect long delays but you can check the status from patchwork yourself: https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches#checking_state_of_patches_from_patchwork -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() 2023-08-01 13:39 ` Kalle Valo @ 2023-08-01 14:02 ` Kalle Valo 0 siblings, 0 replies; 20+ messages in thread From: Kalle Valo @ 2023-08-01 14:02 UTC (permalink / raw) To: Dmitry Antipov; +Cc: Doug Brown, linux-wireless, lvc-project Kalle Valo <kvalo@kernel.org> writes: > Dmitry Antipov <dmantipov@yandex.ru> writes: > >> On 8/1/23 13:23, Kalle Valo wrote: >> >>> Another problem I see that you don't always reply to review comments and >>> that gives an impression that the comments are ignored. Please always >>> try to reply something to the review comments, even if just a simple >>> "ok" or "I don't agree because...". >> >> Looking through my e-mails for the previous month, I was unable to find an >> unanswered review. Could you please provide an example? I'll fix it >> ASAP. > > You have sent so many patches and I don't have time to start go through > them. Maybe I noticed that with some of mwifiex patches, not sure. But > that doesn't matter, I just hope that in the future you reply to > comments. While going through patches in patchwork I noticed this dicussion: https://patchwork.kernel.org/project/linux-wireless/patch/20230726072114.51964-2-dmantipov@yandex.ru/ As there's no reply to Brian it gives a feeling that you are ignoring our comments. -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() 2023-07-24 8:54 ` [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() Kalle Valo 2023-07-24 8:57 ` Dmitry Antipov @ 2023-07-24 21:27 ` Dan Williams 2023-07-25 4:43 ` Dmitry Antipov 2023-07-25 6:04 ` [PATCH 1/6] [v2] " Dmitry Antipov 1 sibling, 2 replies; 20+ messages in thread From: Dan Williams @ 2023-07-24 21:27 UTC (permalink / raw) To: Kalle Valo, Dmitry Antipov; +Cc: Doug Brown, linux-wireless, lvc-project On Mon, 2023-07-24 at 11:54 +0300, Kalle Valo wrote: > Dmitry Antipov <dmantipov@yandex.ru> writes: > > > Add missing 'cancel_work_sync()' in 'if_sdio_remove()' > > and on error handling path in 'if_sdio_probe()'. > > > > Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> > > How have you tested these patches? > I can try to give the SDIO bits a run this week on an 8686. I don't have a SPI setup to test though. Dan ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() 2023-07-24 21:27 ` Dan Williams @ 2023-07-25 4:43 ` Dmitry Antipov 2023-07-25 6:04 ` [PATCH 1/6] [v2] " Dmitry Antipov 1 sibling, 0 replies; 20+ messages in thread From: Dmitry Antipov @ 2023-07-25 4:43 UTC (permalink / raw) To: Dan Williams; +Cc: Doug Brown, linux-wireless, lvc-project, Kalle Valo On 7/25/23 00:27, Dan Williams wrote: > I can try to give the SDIO bits a run this week on an 8686. I don't > have a SPI setup to test though. It would be very helpful, thanks in advance. Dmitry ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 1/6] [v2] wifi: libertas: add missing calls to cancel_work_sync() 2023-07-24 21:27 ` Dan Williams 2023-07-25 4:43 ` Dmitry Antipov @ 2023-07-25 6:04 ` Dmitry Antipov 2023-07-25 6:04 ` [PATCH 2/6] [v2] wifi: libertas: use convenient lists to manage SDIO packets Dmitry Antipov ` (6 more replies) 1 sibling, 7 replies; 20+ messages in thread From: Dmitry Antipov @ 2023-07-25 6:04 UTC (permalink / raw) To: Dan Williams; +Cc: Kalle Valo, linux-wireless, lvc-project, Dmitry Antipov Add missing 'cancel_work_sync()' in 'if_sdio_remove()' and on error handling path in 'if_sdio_probe()'. Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> --- drivers/net/wireless/marvell/libertas/if_sdio.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/wireless/marvell/libertas/if_sdio.c b/drivers/net/wireless/marvell/libertas/if_sdio.c index a63c5e622ee3..a35b33e84670 100644 --- a/drivers/net/wireless/marvell/libertas/if_sdio.c +++ b/drivers/net/wireless/marvell/libertas/if_sdio.c @@ -1233,6 +1233,7 @@ static int if_sdio_probe(struct sdio_func *func, flush_workqueue(card->workqueue); lbs_remove_card(priv); free: + cancel_work_sync(&card->packet_worker); destroy_workqueue(card->workqueue); err_queue: while (card->packets) { @@ -1277,6 +1278,7 @@ static void if_sdio_remove(struct sdio_func *func) lbs_stop_card(card->priv); lbs_remove_card(card->priv); + cancel_work_sync(&card->packet_worker); destroy_workqueue(card->workqueue); while (card->packets) { -- 2.41.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 2/6] [v2] wifi: libertas: use convenient lists to manage SDIO packets 2023-07-25 6:04 ` [PATCH 1/6] [v2] " Dmitry Antipov @ 2023-07-25 6:04 ` Dmitry Antipov 2023-07-25 6:04 ` [PATCH 3/6] [v2] wifi: libertas: simplify list operations in free_if_spi_card() Dmitry Antipov ` (5 subsequent siblings) 6 siblings, 0 replies; 20+ messages in thread From: Dmitry Antipov @ 2023-07-25 6:04 UTC (permalink / raw) To: Dan Williams; +Cc: Kalle Valo, linux-wireless, lvc-project, Dmitry Antipov Use convenient lists to manage SDIO packets, adjust 'struct if_sdio_packet', 'struct if_sdio_card' and related code accordingly. Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> --- .../net/wireless/marvell/libertas/if_sdio.c | 37 +++++++------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/drivers/net/wireless/marvell/libertas/if_sdio.c b/drivers/net/wireless/marvell/libertas/if_sdio.c index a35b33e84670..c72081cf8a85 100644 --- a/drivers/net/wireless/marvell/libertas/if_sdio.c +++ b/drivers/net/wireless/marvell/libertas/if_sdio.c @@ -101,7 +101,7 @@ MODULE_FIRMWARE("sd8688_helper.bin"); MODULE_FIRMWARE("sd8688.bin"); struct if_sdio_packet { - struct if_sdio_packet *next; + struct list_head list; u16 nb; u8 buffer[] __aligned(4); }; @@ -119,7 +119,7 @@ struct if_sdio_card { u8 buffer[65536] __attribute__((aligned(4))); spinlock_t lock; - struct if_sdio_packet *packets; + struct list_head packets; struct workqueue_struct *workqueue; struct work_struct packet_worker; @@ -404,9 +404,10 @@ static void if_sdio_host_to_card_worker(struct work_struct *work) while (1) { spin_lock_irqsave(&card->lock, flags); - packet = card->packets; + packet = list_first_entry_or_null(&card->packets, + struct if_sdio_packet, list); if (packet) - card->packets = packet->next; + list_del(&packet->list); spin_unlock_irqrestore(&card->lock, flags); if (!packet) @@ -909,7 +910,7 @@ static int if_sdio_host_to_card(struct lbs_private *priv, { int ret; struct if_sdio_card *card; - struct if_sdio_packet *packet, *cur; + struct if_sdio_packet *packet; u16 size; unsigned long flags; @@ -934,7 +935,6 @@ static int if_sdio_host_to_card(struct lbs_private *priv, goto out; } - packet->next = NULL; packet->nb = size; /* @@ -949,14 +949,7 @@ static int if_sdio_host_to_card(struct lbs_private *priv, spin_lock_irqsave(&card->lock, flags); - if (!card->packets) - card->packets = packet; - else { - cur = card->packets; - while (cur->next) - cur = cur->next; - cur->next = packet; - } + list_add_tail(&packet->list, &card->packets); switch (type) { case MVMS_CMD: @@ -1137,7 +1130,7 @@ static int if_sdio_probe(struct sdio_func *func, struct lbs_private *priv; int ret, i; unsigned int model; - struct if_sdio_packet *packet; + struct if_sdio_packet *packet, *tmp; for (i = 0;i < func->card->num_info;i++) { if (sscanf(func->card->info[i], @@ -1178,6 +1171,8 @@ static int if_sdio_probe(struct sdio_func *func, } spin_lock_init(&card->lock); + INIT_LIST_HEAD(&card->packets); + card->workqueue = alloc_workqueue("libertas_sdio", WQ_MEM_RECLAIM, 0); if (unlikely(!card->workqueue)) { ret = -ENOMEM; @@ -1236,11 +1231,8 @@ static int if_sdio_probe(struct sdio_func *func, cancel_work_sync(&card->packet_worker); destroy_workqueue(card->workqueue); err_queue: - while (card->packets) { - packet = card->packets; - card->packets = card->packets->next; + list_for_each_entry_safe(packet, tmp, &card->packets, list) kfree(packet); - } kfree(card); @@ -1250,7 +1242,7 @@ static int if_sdio_probe(struct sdio_func *func, static void if_sdio_remove(struct sdio_func *func) { struct if_sdio_card *card; - struct if_sdio_packet *packet; + struct if_sdio_packet *packet, *tmp; card = sdio_get_drvdata(func); @@ -1281,11 +1273,8 @@ static void if_sdio_remove(struct sdio_func *func) cancel_work_sync(&card->packet_worker); destroy_workqueue(card->workqueue); - while (card->packets) { - packet = card->packets; - card->packets = card->packets->next; + list_for_each_entry_safe(packet, tmp, &card->packets, list) kfree(packet); - } kfree(card); } -- 2.41.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 3/6] [v2] wifi: libertas: simplify list operations in free_if_spi_card() 2023-07-25 6:04 ` [PATCH 1/6] [v2] " Dmitry Antipov 2023-07-25 6:04 ` [PATCH 2/6] [v2] wifi: libertas: use convenient lists to manage SDIO packets Dmitry Antipov @ 2023-07-25 6:04 ` Dmitry Antipov 2023-07-25 6:04 ` [PATCH 4/6] [v2] wifi: libertas: cleanup SDIO reset Dmitry Antipov ` (4 subsequent siblings) 6 siblings, 0 replies; 20+ messages in thread From: Dmitry Antipov @ 2023-07-25 6:04 UTC (permalink / raw) To: Dan Williams; +Cc: Kalle Valo, linux-wireless, lvc-project, Dmitry Antipov Use 'list_for_each_entry_safe()' to simplify list operations in 'free_if_spi_card()'. Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> --- drivers/net/wireless/marvell/libertas/if_spi.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/marvell/libertas/if_spi.c b/drivers/net/wireless/marvell/libertas/if_spi.c index 1225fc0e3352..3d53e444ba19 100644 --- a/drivers/net/wireless/marvell/libertas/if_spi.c +++ b/drivers/net/wireless/marvell/libertas/if_spi.c @@ -76,16 +76,13 @@ struct if_spi_card { static void free_if_spi_card(struct if_spi_card *card) { - struct list_head *cursor, *next; - struct if_spi_packet *packet; + struct if_spi_packet *packet, *tmp; - list_for_each_safe(cursor, next, &card->cmd_packet_list) { - packet = container_of(cursor, struct if_spi_packet, list); + list_for_each_entry_safe(packet, tmp, &card->cmd_packet_list, list) { list_del(&packet->list); kfree(packet); } - list_for_each_safe(cursor, next, &card->data_packet_list) { - packet = container_of(cursor, struct if_spi_packet, list); + list_for_each_entry_safe(packet, tmp, &card->data_packet_list, list) { list_del(&packet->list); kfree(packet); } -- 2.41.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 4/6] [v2] wifi: libertas: cleanup SDIO reset 2023-07-25 6:04 ` [PATCH 1/6] [v2] " Dmitry Antipov 2023-07-25 6:04 ` [PATCH 2/6] [v2] wifi: libertas: use convenient lists to manage SDIO packets Dmitry Antipov 2023-07-25 6:04 ` [PATCH 3/6] [v2] wifi: libertas: simplify list operations in free_if_spi_card() Dmitry Antipov @ 2023-07-25 6:04 ` Dmitry Antipov 2023-07-25 6:04 ` [PATCH 5/6] [v2] wifi: libertas: handle possible spu_write_u16() errors Dmitry Antipov ` (3 subsequent siblings) 6 siblings, 0 replies; 20+ messages in thread From: Dmitry Antipov @ 2023-07-25 6:04 UTC (permalink / raw) To: Dan Williams; +Cc: Kalle Valo, linux-wireless, lvc-project, Dmitry Antipov Embed SDIO reset worker in 'struct if_sdio_card' and so drop 'reset_host' and 'card_reset_work' static variables, adjust related code. Not sure whether it's possible to do something useful on 'mmc_add_host()' error, so just add 'dev_err()' to emit an error message. Found by Linux Verification Center (linuxtesting.org) with SVACE. Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> --- .../net/wireless/marvell/libertas/if_sdio.c | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/drivers/net/wireless/marvell/libertas/if_sdio.c b/drivers/net/wireless/marvell/libertas/if_sdio.c index c72081cf8a85..524034699972 100644 --- a/drivers/net/wireless/marvell/libertas/if_sdio.c +++ b/drivers/net/wireless/marvell/libertas/if_sdio.c @@ -123,6 +123,7 @@ struct if_sdio_card { struct workqueue_struct *workqueue; struct work_struct packet_worker; + struct work_struct reset_worker; u8 rx_unit; }; @@ -1022,10 +1023,19 @@ static int if_sdio_reset_deep_sleep_wakeup(struct lbs_private *priv) } -static struct mmc_host *reset_host; - static void if_sdio_reset_card_worker(struct work_struct *work) { + int ret; + const char *name; + struct device *dev; + struct if_sdio_card *card; + struct mmc_host *reset_host; + + card = container_of(work, struct if_sdio_card, reset_worker); + reset_host = card->func->card->host; + name = card->priv->dev->name; + dev = &card->func->dev; + /* * The actual reset operation must be run outside of lbs_thread. This * is because mmc_remove_host() will cause the device to be instantly @@ -1036,21 +1046,19 @@ static void if_sdio_reset_card_worker(struct work_struct *work) * instance for that reason. */ - pr_info("Resetting card..."); + dev_info(dev, "resetting card %s...", name); mmc_remove_host(reset_host); - mmc_add_host(reset_host); + ret = mmc_add_host(reset_host); + if (ret) + dev_err(dev, "%s: can't add mmc host, error %d\n", name, ret); } -static DECLARE_WORK(card_reset_work, if_sdio_reset_card_worker); static void if_sdio_reset_card(struct lbs_private *priv) { struct if_sdio_card *card = priv->card; - if (work_pending(&card_reset_work)) - return; - - reset_host = card->func->card->host; - schedule_work(&card_reset_work); + if (!work_pending(&card->reset_worker)) + schedule_work(&card->reset_worker); } static int if_sdio_power_save(struct lbs_private *priv) @@ -1178,6 +1186,8 @@ static int if_sdio_probe(struct sdio_func *func, ret = -ENOMEM; goto err_queue; } + + INIT_WORK(&card->reset_worker, if_sdio_reset_card_worker); INIT_WORK(&card->packet_worker, if_sdio_host_to_card_worker); init_waitqueue_head(&card->pwron_waitq); @@ -1229,6 +1239,7 @@ static int if_sdio_probe(struct sdio_func *func, lbs_remove_card(priv); free: cancel_work_sync(&card->packet_worker); + cancel_work_sync(&card->reset_worker); destroy_workqueue(card->workqueue); err_queue: list_for_each_entry_safe(packet, tmp, &card->packets, list) @@ -1271,6 +1282,7 @@ static void if_sdio_remove(struct sdio_func *func) lbs_remove_card(card->priv); cancel_work_sync(&card->packet_worker); + cancel_work_sync(&card->reset_worker); destroy_workqueue(card->workqueue); list_for_each_entry_safe(packet, tmp, &card->packets, list) @@ -1394,8 +1406,6 @@ static void __exit if_sdio_exit_module(void) /* Set the flag as user is removing this module. */ user_rmmod = 1; - cancel_work_sync(&card_reset_work); - sdio_unregister_driver(&if_sdio_driver); } -- 2.41.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 5/6] [v2] wifi: libertas: handle possible spu_write_u16() errors 2023-07-25 6:04 ` [PATCH 1/6] [v2] " Dmitry Antipov ` (2 preceding siblings ...) 2023-07-25 6:04 ` [PATCH 4/6] [v2] wifi: libertas: cleanup SDIO reset Dmitry Antipov @ 2023-07-25 6:04 ` Dmitry Antipov 2023-07-25 6:04 ` [PATCH 6/6] [v2] wifi: libertas: prefer kstrtoX() for simple integer conversions Dmitry Antipov ` (2 subsequent siblings) 6 siblings, 0 replies; 20+ messages in thread From: Dmitry Antipov @ 2023-07-25 6:04 UTC (permalink / raw) To: Dan Williams; +Cc: Kalle Valo, linux-wireless, lvc-project, Dmitry Antipov Check and handle (well, report at least, as it's done through the rest of the module) possible 'spu_write_u16()' errors in 'if_spi_e2h()'. Found by Linux Verification Center (linuxtesting.org) with SVACE. Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> --- drivers/net/wireless/marvell/libertas/if_spi.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/marvell/libertas/if_spi.c b/drivers/net/wireless/marvell/libertas/if_spi.c index 3d53e444ba19..8690b0114e23 100644 --- a/drivers/net/wireless/marvell/libertas/if_spi.c +++ b/drivers/net/wireless/marvell/libertas/if_spi.c @@ -826,11 +826,16 @@ static void if_spi_e2h(struct if_spi_card *card) goto out; /* re-enable the card event interrupt */ - spu_write_u16(card, IF_SPI_HOST_INT_STATUS_REG, - ~IF_SPI_HICU_CARD_EVENT); + err = spu_write_u16(card, IF_SPI_HOST_INT_STATUS_REG, + ~IF_SPI_HICU_CARD_EVENT); + if (err) + goto out; /* generate a card interrupt */ - spu_write_u16(card, IF_SPI_CARD_INT_CAUSE_REG, IF_SPI_CIC_HOST_EVENT); + err = spu_write_u16(card, IF_SPI_CARD_INT_CAUSE_REG, + IF_SPI_CIC_HOST_EVENT); + if (err) + goto out; lbs_queue_event(priv, cause & 0xff); out: -- 2.41.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 6/6] [v2] wifi: libertas: prefer kstrtoX() for simple integer conversions 2023-07-25 6:04 ` [PATCH 1/6] [v2] " Dmitry Antipov ` (3 preceding siblings ...) 2023-07-25 6:04 ` [PATCH 5/6] [v2] wifi: libertas: handle possible spu_write_u16() errors Dmitry Antipov @ 2023-07-25 6:04 ` Dmitry Antipov 2023-07-31 13:25 ` [PATCH 1/6] [v2] wifi: libertas: add missing calls to cancel_work_sync() Dan Williams 2023-08-01 14:49 ` Kalle Valo 6 siblings, 0 replies; 20+ messages in thread From: Dmitry Antipov @ 2023-07-25 6:04 UTC (permalink / raw) To: Dan Williams; +Cc: Kalle Valo, linux-wireless, lvc-project, Dmitry Antipov Prefer 'kstrtoX()' family of functions over 'sscanf()' to convert strings to integers and always check results of the conversions. Found by Linux Verification Center (linuxtesting.org) with SVACE. Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> --- drivers/net/wireless/marvell/libertas/mesh.c | 51 +++++++++++++------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/drivers/net/wireless/marvell/libertas/mesh.c b/drivers/net/wireless/marvell/libertas/mesh.c index 90ffe8d1e0e8..2dd635935448 100644 --- a/drivers/net/wireless/marvell/libertas/mesh.c +++ b/drivers/net/wireless/marvell/libertas/mesh.c @@ -188,8 +188,11 @@ static ssize_t anycast_mask_store(struct device *dev, uint32_t datum; int ret; + ret = kstrtouint(buf, 16, &datum); + if (ret) + return ret; + memset(&mesh_access, 0, sizeof(mesh_access)); - sscanf(buf, "%x", &datum); mesh_access.data[0] = cpu_to_le32(datum); ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_ANYCAST, &mesh_access); @@ -241,15 +244,14 @@ static ssize_t prb_rsp_limit_store(struct device *dev, int ret; unsigned long retry_limit; - memset(&mesh_access, 0, sizeof(mesh_access)); - mesh_access.data[0] = cpu_to_le32(CMD_ACT_SET); - ret = kstrtoul(buf, 10, &retry_limit); if (ret) return ret; if (retry_limit > 15) return -ENOTSUPP; + memset(&mesh_access, 0, sizeof(mesh_access)); + mesh_access.data[0] = cpu_to_le32(CMD_ACT_SET); mesh_access.data[1] = cpu_to_le32(retry_limit); ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_GET_PRB_RSP_LIMIT, @@ -285,9 +287,12 @@ static ssize_t lbs_mesh_store(struct device *dev, const char *buf, size_t count) { struct lbs_private *priv = to_net_dev(dev)->ml_priv; - int enable; + int ret, enable; + + ret = kstrtoint(buf, 16, &enable); + if (ret) + return ret; - sscanf(buf, "%x", &enable); enable = !!enable; if (enable == !!priv->mesh_dev) return count; @@ -387,11 +392,13 @@ static ssize_t bootflag_store(struct device *dev, struct device_attribute *attr, uint32_t datum; int ret; - memset(&cmd, 0, sizeof(cmd)); - ret = sscanf(buf, "%d", &datum); - if ((ret != 1) || (datum > 1)) + ret = kstrtouint(buf, 10, &datum); + if (ret) + return ret; + if (datum > 1) return -EINVAL; + memset(&cmd, 0, sizeof(cmd)); *((__le32 *)&cmd.data[0]) = cpu_to_le32(!!datum); cmd.length = cpu_to_le16(sizeof(uint32_t)); ret = lbs_mesh_config_send(priv, &cmd, CMD_ACT_MESH_CONFIG_SET, @@ -438,11 +445,14 @@ static ssize_t boottime_store(struct device *dev, uint32_t datum; int ret; - memset(&cmd, 0, sizeof(cmd)); - ret = sscanf(buf, "%d", &datum); - if ((ret != 1) || (datum > 255)) + ret = kstrtouint(buf, 10, &datum); + if (ret) + return ret; + if (datum > 255) return -EINVAL; + memset(&cmd, 0, sizeof(cmd)); + /* A too small boot time will result in the device booting into * standalone (no-host) mode before the host can take control of it, * so the change will be hard to revert. This may be a desired @@ -497,11 +507,13 @@ static ssize_t channel_store(struct device *dev, struct device_attribute *attr, uint32_t datum; int ret; - memset(&cmd, 0, sizeof(cmd)); - ret = sscanf(buf, "%d", &datum); - if (ret != 1 || datum < 1 || datum > 11) + ret = kstrtouint(buf, 10, &datum); + if (ret) + return ret; + if (datum < 1 || datum > 11) return -EINVAL; + memset(&cmd, 0, sizeof(cmd)); *((__le16 *)&cmd.data[0]) = cpu_to_le16(datum); cmd.length = cpu_to_le16(sizeof(uint16_t)); ret = lbs_mesh_config_send(priv, &cmd, CMD_ACT_MESH_CONFIG_SET, @@ -626,11 +638,14 @@ static ssize_t protocol_id_store(struct device *dev, uint32_t datum; int ret; - memset(&cmd, 0, sizeof(cmd)); - ret = sscanf(buf, "%d", &datum); - if ((ret != 1) || (datum > 255)) + ret = kstrtouint(buf, 10, &datum); + if (ret) + return ret; + if (datum > 255) return -EINVAL; + memset(&cmd, 0, sizeof(cmd)); + /* fetch all other Information Element parameters */ ret = mesh_get_default_parameters(dev, &defs); -- 2.41.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 1/6] [v2] wifi: libertas: add missing calls to cancel_work_sync() 2023-07-25 6:04 ` [PATCH 1/6] [v2] " Dmitry Antipov ` (4 preceding siblings ...) 2023-07-25 6:04 ` [PATCH 6/6] [v2] wifi: libertas: prefer kstrtoX() for simple integer conversions Dmitry Antipov @ 2023-07-31 13:25 ` Dan Williams 2023-08-01 14:49 ` Kalle Valo 6 siblings, 0 replies; 20+ messages in thread From: Dan Williams @ 2023-07-31 13:25 UTC (permalink / raw) To: Dmitry Antipov; +Cc: Kalle Valo, linux-wireless, lvc-project On Tue, 2023-07-25 at 09:04 +0300, Dmitry Antipov wrote: > Add missing 'cancel_work_sync()' in 'if_sdio_remove()' > and on error handling path in 'if_sdio_probe()'. > > Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> For the v2 series: Tested-by: Dan Williams <dcbw@redhat.com> > --- > drivers/net/wireless/marvell/libertas/if_sdio.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/net/wireless/marvell/libertas/if_sdio.c > b/drivers/net/wireless/marvell/libertas/if_sdio.c > index a63c5e622ee3..a35b33e84670 100644 > --- a/drivers/net/wireless/marvell/libertas/if_sdio.c > +++ b/drivers/net/wireless/marvell/libertas/if_sdio.c > @@ -1233,6 +1233,7 @@ static int if_sdio_probe(struct sdio_func > *func, > flush_workqueue(card->workqueue); > lbs_remove_card(priv); > free: > + cancel_work_sync(&card->packet_worker); > destroy_workqueue(card->workqueue); > err_queue: > while (card->packets) { > @@ -1277,6 +1278,7 @@ static void if_sdio_remove(struct sdio_func > *func) > lbs_stop_card(card->priv); > lbs_remove_card(card->priv); > > + cancel_work_sync(&card->packet_worker); > destroy_workqueue(card->workqueue); > > while (card->packets) { ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/6] [v2] wifi: libertas: add missing calls to cancel_work_sync() 2023-07-25 6:04 ` [PATCH 1/6] [v2] " Dmitry Antipov ` (5 preceding siblings ...) 2023-07-31 13:25 ` [PATCH 1/6] [v2] wifi: libertas: add missing calls to cancel_work_sync() Dan Williams @ 2023-08-01 14:49 ` Kalle Valo 6 siblings, 0 replies; 20+ messages in thread From: Kalle Valo @ 2023-08-01 14:49 UTC (permalink / raw) To: Dmitry Antipov; +Cc: Dan Williams, linux-wireless, lvc-project, Dmitry Antipov Dmitry Antipov <dmantipov@yandex.ru> wrote: > Add missing 'cancel_work_sync()' in 'if_sdio_remove()' > and on error handling path in 'if_sdio_probe()'. > > Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru> > Tested-by: Dan Williams <dcbw@redhat.com> 6 patches applied to wireless-next.git, thanks. c1861ff1d63d wifi: libertas: add missing calls to cancel_work_sync() ce44fdf9c9d2 wifi: libertas: use convenient lists to manage SDIO packets 2c531d28f8e9 wifi: libertas: simplify list operations in free_if_spi_card() 6c968e90198f wifi: libertas: cleanup SDIO reset 3e14212f79fd wifi: libertas: handle possible spu_write_u16() errors f5343efdf5b5 wifi: libertas: prefer kstrtoX() for simple integer conversions -- https://patchwork.kernel.org/project/linux-wireless/patch/20230725060531.72968-1-dmantipov@yandex.ru/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2023-08-01 14:49 UTC | newest] Thread overview: 20+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-07-24 8:44 [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() Dmitry Antipov 2023-07-24 8:44 ` [PATCH 2/4] wifi: libertas: use convenient lists to manage SDIO packets Dmitry Antipov 2023-07-24 8:44 ` [PATCH 3/4] wifi: libertas: simplify list operations in free_if_spi_card() Dmitry Antipov 2023-07-24 8:44 ` [PATCH 4/4] wifi: libertas: cleanup SDIO reset Dmitry Antipov 2023-07-24 8:54 ` [PATCH 1/4] wifi: libertas: add missing calls to cancel_work_sync() Kalle Valo 2023-07-24 8:57 ` Dmitry Antipov 2023-08-01 10:23 ` Kalle Valo 2023-08-01 11:47 ` Dmitry Antipov 2023-08-01 13:39 ` Kalle Valo 2023-08-01 14:02 ` Kalle Valo 2023-07-24 21:27 ` Dan Williams 2023-07-25 4:43 ` Dmitry Antipov 2023-07-25 6:04 ` [PATCH 1/6] [v2] " Dmitry Antipov 2023-07-25 6:04 ` [PATCH 2/6] [v2] wifi: libertas: use convenient lists to manage SDIO packets Dmitry Antipov 2023-07-25 6:04 ` [PATCH 3/6] [v2] wifi: libertas: simplify list operations in free_if_spi_card() Dmitry Antipov 2023-07-25 6:04 ` [PATCH 4/6] [v2] wifi: libertas: cleanup SDIO reset Dmitry Antipov 2023-07-25 6:04 ` [PATCH 5/6] [v2] wifi: libertas: handle possible spu_write_u16() errors Dmitry Antipov 2023-07-25 6:04 ` [PATCH 6/6] [v2] wifi: libertas: prefer kstrtoX() for simple integer conversions Dmitry Antipov 2023-07-31 13:25 ` [PATCH 1/6] [v2] wifi: libertas: add missing calls to cancel_work_sync() Dan Williams 2023-08-01 14:49 ` Kalle Valo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).