armbian_build/patch/misc/wireless-xradio-insmod-rmmod-fx.patch
Gunjan Gupta 46e756540e xradio: fix compilation for 6.1+
Also added some cleanup fixes to silence some of the compiler warnings,
fixes for issues during inserting and removing xradio module and fixes
for possible data corruption on vmmaped stack.

All of these fixes were taken from https://github.com/fifteenhex/xradio
2023-09-04 14:37:10 +02:00

66 lines
2.0 KiB
Diff

From 18b7a87239ac483e52d86295d88aa88db3dada19 Mon Sep 17 00:00:00 2001
From: Gunjan Gupta <viraniac@gmail.com>
Date: Sun, 3 Sep 2023 11:10:50 +0000
Subject: [PATCH 2/2] Fix issues when doing insmod/rmmod and reboot
Based on
https://github.com/fifteenhex/xradio/commit/428a46e4eab939a63c9173324304a540c4ca8ca3
https://github.com/fifteenhex/xradio/commit/bb2c7169a26835abe1e90edb92951a348c8a45
---
drivers/net/wireless/xradio/main.c | 2 ++
drivers/net/wireless/xradio/sdio.c | 9 +++++++--
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/xradio/main.c b/drivers/net/wireless/xradio/main.c
index f072629828a9..374b161bb498 100644
--- a/drivers/net/wireless/xradio/main.c
+++ b/drivers/net/wireless/xradio/main.c
@@ -616,6 +616,7 @@ int xradio_core_init(struct sdio_func* func)
err2:
/* err1: MRK: unused label*/
xradio_free_common(dev);
+ sdio_set_drvdata(func, NULL);
return err;
}
@@ -628,6 +629,7 @@ void xradio_core_deinit(struct sdio_func* func)
xradio_unregister_bh(hw_priv);
xradio_pm_deinit(&hw_priv->pm_state);
xradio_free_common(hw_priv->hw);
+ sdio_set_drvdata(func, NULL);
}
return;
}
diff --git a/drivers/net/wireless/xradio/sdio.c b/drivers/net/wireless/xradio/sdio.c
index 6ef47a8c3202..e13f80828b41 100644
--- a/drivers/net/wireless/xradio/sdio.c
+++ b/drivers/net/wireless/xradio/sdio.c
@@ -203,17 +203,22 @@ static int sdio_probe(struct sdio_func *func,
xradio_core_init(func);
- try_module_get(func->dev.driver->owner);
return 0;
}
/* Disconnect Function to be called by SDIO stack when
* device is disconnected */
static void sdio_remove(struct sdio_func *func)
{
+ struct mmc_card *card = func->card;
+ xradio_core_deinit(func);
sdio_claim_host(func);
sdio_disable_func(func);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0))
+ mmc_hw_reset(card);
+#else
+ mmc_hw_reset(card->host);
+#endif
sdio_release_host(func);
- module_put(func->dev.driver->owner);
}
static int sdio_suspend(struct device *dev)
--
2.34.1