]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: cfg80211: move away from using a fake platform device
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 1 Jul 2025 10:56:17 +0000 (12:56 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 8 Jul 2025 08:22:51 +0000 (10:22 +0200)
Downloading regulatory "firmware" needs a device to hang off of, and so
a platform device seemed like the simplest way to do this.  Now that we
have a faux device interface, use that instead as this "regulatory
device" is not anything resembling a platform device at all.

Cc: Johannes Berg <johannes@sipsolutions.net>
Cc: <linux-wireless@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://patch.msgid.link/2025070116-growing-skeptic-494c@gregkh
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/reg.c

index c1752b31734faa2a71af0892d1449084b571e0ff..2524bc187a1952604dd524db47f9ae9a2295c16f 100644 (file)
@@ -53,7 +53,7 @@
 #include <linux/list.h>
 #include <linux/ctype.h>
 #include <linux/nl80211.h>
-#include <linux/platform_device.h>
+#include <linux/device/faux.h>
 #include <linux/verification.h>
 #include <linux/moduleparam.h>
 #include <linux/firmware.h>
@@ -105,7 +105,7 @@ static struct regulatory_request __rcu *last_request =
        (void __force __rcu *)&core_request_world;
 
 /* To trigger userspace events and load firmware */
-static struct platform_device *reg_pdev;
+static struct faux_device *reg_fdev;
 
 /*
  * Central wireless core regulatory domains, we only need two,
@@ -583,7 +583,7 @@ static int call_crda(const char *alpha2)
        else
                pr_debug("Calling CRDA to update world regulatory domain\n");
 
-       ret = kobject_uevent_env(&reg_pdev->dev.kobj, KOBJ_CHANGE, env);
+       ret = kobject_uevent_env(&reg_fdev->dev.kobj, KOBJ_CHANGE, env);
        if (ret)
                return ret;
 
@@ -779,7 +779,7 @@ static bool regdb_has_valid_signature(const u8 *data, unsigned int size)
        const struct firmware *sig;
        bool result;
 
-       if (request_firmware(&sig, "regulatory.db.p7s", &reg_pdev->dev))
+       if (request_firmware(&sig, "regulatory.db.p7s", &reg_fdev->dev))
                return false;
 
        result = verify_pkcs7_signature(data, size, sig->data, sig->size,
@@ -1061,7 +1061,7 @@ static int query_regdb_file(const char *alpha2)
                return -ENOMEM;
 
        err = request_firmware_nowait(THIS_MODULE, true, "regulatory.db",
-                                     &reg_pdev->dev, GFP_KERNEL,
+                                     &reg_fdev->dev, GFP_KERNEL,
                                      (void *)alpha2, regdb_fw_cb);
        if (err)
                kfree(alpha2);
@@ -1077,7 +1077,7 @@ int reg_reload_regdb(void)
        const struct ieee80211_regdomain *current_regdomain;
        struct regulatory_request *request;
 
-       err = request_firmware(&fw, "regulatory.db", &reg_pdev->dev);
+       err = request_firmware(&fw, "regulatory.db", &reg_fdev->dev);
        if (err)
                return err;
 
@@ -4300,12 +4300,12 @@ static int __init regulatory_init_db(void)
         * in that case, don't try to do any further work here as
         * it's doomed to lead to crashes.
         */
-       if (IS_ERR_OR_NULL(reg_pdev))
+       if (!reg_fdev)
                return -EINVAL;
 
        err = load_builtin_regdb_keys();
        if (err) {
-               platform_device_unregister(reg_pdev);
+               faux_device_destroy(reg_fdev);
                return err;
        }
 
@@ -4313,7 +4313,7 @@ static int __init regulatory_init_db(void)
        err = regulatory_hint_core(cfg80211_world_regdom->alpha2);
        if (err) {
                if (err == -ENOMEM) {
-                       platform_device_unregister(reg_pdev);
+                       faux_device_destroy(reg_fdev);
                        return err;
                }
                /*
@@ -4342,9 +4342,9 @@ late_initcall(regulatory_init_db);
 
 int __init regulatory_init(void)
 {
-       reg_pdev = platform_device_register_simple("regulatory", 0, NULL, 0);
-       if (IS_ERR(reg_pdev))
-               return PTR_ERR(reg_pdev);
+       reg_fdev = faux_device_create("regulatory", NULL, NULL);
+       if (!reg_fdev)
+               return -ENODEV;
 
        rcu_assign_pointer(cfg80211_regdomain, cfg80211_world_regdom);
 
@@ -4372,9 +4372,9 @@ void regulatory_exit(void)
        reset_regdomains(true, NULL);
        rtnl_unlock();
 
-       dev_set_uevent_suppress(&reg_pdev->dev, true);
+       dev_set_uevent_suppress(&reg_fdev->dev, true);
 
-       platform_device_unregister(reg_pdev);
+       faux_device_destroy(reg_fdev);
 
        list_for_each_entry_safe(reg_beacon, btmp, &reg_pending_beacons, list) {
                list_del(&reg_beacon->list);