2012-03-20 14:03:51

by Luis R. Rodriguez

[permalink] [raw]
Subject: [PATCH v2] cfg80211: warn if db.txt is empty with CONFIG_CFG80211_INTERNAL_REGDB

From: "Luis R. Rodriguez" <[email protected]>

It has happened twice now where elaborate troubleshooting has
undergone on systems where CONFIG_CFG80211_INTERNAL_REGDB [0]
has been set but yet net/wireless/db.txt was not updated.

Despite the documentation on this it seems system integrators could
use some more help with this, so throw out a kernel warning at boot time
when their database is empty.

This does mean that the error-prone system integrator won't likely
realize the issue until they boot the machine but -- it does not seem
to make sense to enable a build bug breaking random build testing.

[0] http://wireless.kernel.org/en/developers/Regulatory/CRDA#CONFIG_CFG80211_INTERNAL_REGDB

Cc: Stephen Rothwell <[email protected]>
Cc: Youngsin Lee <[email protected]>
Cc: Raja Mani <[email protected]>
Cc: Senthil Kumar Balasubramanian <[email protected]>
Cc: Vipin Mehta <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Luis R. Rodriguez <[email protected]>
---
net/wireless/reg.c | 9 +++++++++
1 file changed, 9 insertions(+)

diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index e9a0ac8..7b613c4 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -388,7 +388,15 @@ static void reg_regdb_query(const char *alpha2)

schedule_work(&reg_regdb_work);
}
+
+/* Feel free to add any other sanity checks here */
+static void reg_regdb_size_check(void)
+{
+ /* We should ideally BUILD_BUG_ON() but then random builds would fail */
+ WARN_ONCE(!reg_regdb_size, "db.txt is empty, you should update it...");
+}
#else
+static inline void reg_regdb_size_check(void) {}
static inline void reg_regdb_query(const char *alpha2) {}
#endif /* CONFIG_CFG80211_INTERNAL_REGDB */

@@ -2367,6 +2375,7 @@ void /* __init_or_exit */ regulatory_exit(void)
mutex_lock(&cfg80211_mutex);
mutex_lock(&reg_mutex);

+ reg_regdb_size_check();
reset_regdomains(true);

dev_set_uevent_suppress(&reg_pdev->dev, true);
--
1.7.10.rc1.22.gf5241



2012-03-21 05:21:02

by Raja Mani

[permalink] [raw]
Subject: Re: [PATCH v2] cfg80211: warn if db.txt is empty with CONFIG_CFG80211_INTERNAL_REGDB

On Tuesday 20 March 2012 07:33 PM, Luis R. Rodriguez wrote:
> From: "Luis R. Rodriguez"<[email protected]>
>
> It has happened twice now where elaborate troubleshooting has
> undergone on systems where CONFIG_CFG80211_INTERNAL_REGDB [0]
> has been set but yet net/wireless/db.txt was not updated.
>
> Despite the documentation on this it seems system integrators could
> use some more help with this, so throw out a kernel warning at boot time
> when their database is empty.
>
> This does mean that the error-prone system integrator won't likely
> realize the issue until they boot the machine but -- it does not seem
> to make sense to enable a build bug breaking random build testing.
>
> [0] http://wireless.kernel.org/en/developers/Regulatory/CRDA#CONFIG_CFG80211_INTERNAL_REGDB
>
> Cc: Stephen Rothwell<[email protected]>
> Cc: Youngsin Lee<[email protected]>
> Cc: Raja Mani<[email protected]>
> Cc: Senthil Kumar Balasubramanian<[email protected]>
> Cc: Vipin Mehta<[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Signed-off-by: Luis R. Rodriguez<[email protected]>
> ---
> net/wireless/reg.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/net/wireless/reg.c b/net/wireless/reg.c
> index e9a0ac8..7b613c4 100644
> --- a/net/wireless/reg.c
> +++ b/net/wireless/reg.c
> @@ -388,7 +388,15 @@ static void reg_regdb_query(const char *alpha2)
>
> schedule_work(&reg_regdb_work);
> }
> +
> +/* Feel free to add any other sanity checks here */
> +static void reg_regdb_size_check(void)
> +{
> + /* We should ideally BUILD_BUG_ON() but then random builds would fail */
> + WARN_ONCE(!reg_regdb_size, "db.txt is empty, you should update it...");
> +}
> #else
> +static inline void reg_regdb_size_check(void) {}
> static inline void reg_regdb_query(const char *alpha2) {}
> #endif /* CONFIG_CFG80211_INTERNAL_REGDB */
>
> @@ -2367,6 +2375,7 @@ void /* __init_or_exit */ regulatory_exit(void)
> mutex_lock(&cfg80211_mutex);
> mutex_lock(&reg_mutex);
>
> + reg_regdb_size_check();

Just curious question, Don't we have to check internal regdb size in
init time (i.e, regulatory_init()) instead of in regulatory_exit() ?

Because, we would get warning ONLY at exit time in this case.

> reset_regdomains(true);
>
> dev_set_uevent_suppress(&reg_pdev->dev, true);