Staging: rtl8187se/rtl8192e/rtl8192su: allow module unload
On rtl81* additions, they had its wireless stack made builtin instead of separated modules. But try_module_get/module_put in stack were kept, they are uneeded with the stack builtin and makes rtl81* modules impossible to remove on a system with an rtl81* card. request_module calls are also uneeded with stack builtin, so remove them too. Signed-off-by: Herton Ronaldo Krzesinski <herton@mandriva.com.br> Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
557c0288b5
commit
a010a33752
|
@ -53,10 +53,8 @@ void ieee80211_crypt_deinit_entries(struct ieee80211_device *ieee,
|
|||
|
||||
list_del(ptr);
|
||||
|
||||
if (entry->ops) {
|
||||
if (entry->ops)
|
||||
entry->ops->deinit(entry->priv);
|
||||
module_put(entry->ops->owner);
|
||||
}
|
||||
kfree(entry);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -189,10 +189,8 @@ void free_ieee80211(struct net_device *dev)
|
|||
for (i = 0; i < WEP_KEYS; i++) {
|
||||
struct ieee80211_crypt_data *crypt = ieee->crypt[i];
|
||||
if (crypt) {
|
||||
if (crypt->ops) {
|
||||
if (crypt->ops)
|
||||
crypt->ops->deinit(crypt->priv);
|
||||
module_put(crypt->ops->owner);
|
||||
}
|
||||
kfree(crypt);
|
||||
ieee->crypt[i] = NULL;
|
||||
}
|
||||
|
|
|
@ -2839,16 +2839,12 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee,
|
|||
goto skip_host_crypt;
|
||||
|
||||
ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
||||
if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) {
|
||||
request_module("ieee80211_crypt_wep");
|
||||
if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0)
|
||||
ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
||||
} else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) {
|
||||
request_module("ieee80211_crypt_tkip");
|
||||
else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0)
|
||||
ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
||||
} else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) {
|
||||
request_module("ieee80211_crypt_ccmp");
|
||||
else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0)
|
||||
ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
||||
}
|
||||
if (ops == NULL) {
|
||||
printk("unknown crypto alg '%s'\n", param->u.crypt.alg);
|
||||
param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG;
|
||||
|
@ -2869,7 +2865,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee,
|
|||
}
|
||||
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
|
||||
new_crypt->ops = ops;
|
||||
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
|
||||
if (new_crypt->ops)
|
||||
new_crypt->priv =
|
||||
new_crypt->ops->init(param->u.crypt.idx);
|
||||
|
||||
|
|
|
@ -331,12 +331,10 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
|
|||
return -ENOMEM;
|
||||
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
|
||||
new_crypt->ops = ieee80211_get_crypto_ops("WEP");
|
||||
if (!new_crypt->ops) {
|
||||
request_module("ieee80211_crypt_wep");
|
||||
if (!new_crypt->ops)
|
||||
new_crypt->ops = ieee80211_get_crypto_ops("WEP");
|
||||
}
|
||||
|
||||
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
|
||||
if (new_crypt->ops)
|
||||
new_crypt->priv = new_crypt->ops->init(key);
|
||||
|
||||
if (!new_crypt->ops || !new_crypt->priv) {
|
||||
|
@ -483,7 +481,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
|
|||
struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
|
||||
int i, idx, ret = 0;
|
||||
int group_key = 0;
|
||||
const char *alg, *module;
|
||||
const char *alg;
|
||||
struct ieee80211_crypto_ops *ops;
|
||||
struct ieee80211_crypt_data **crypt;
|
||||
|
||||
|
@ -539,15 +537,12 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
|
|||
switch (ext->alg) {
|
||||
case IW_ENCODE_ALG_WEP:
|
||||
alg = "WEP";
|
||||
module = "ieee80211_crypt_wep";
|
||||
break;
|
||||
case IW_ENCODE_ALG_TKIP:
|
||||
alg = "TKIP";
|
||||
module = "ieee80211_crypt_tkip";
|
||||
break;
|
||||
case IW_ENCODE_ALG_CCMP:
|
||||
alg = "CCMP";
|
||||
module = "ieee80211_crypt_ccmp";
|
||||
break;
|
||||
default:
|
||||
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
|
||||
|
@ -558,10 +553,8 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
|
|||
// printk("8-09-08-9=====>%s, alg name:%s\n",__func__, alg);
|
||||
|
||||
ops = ieee80211_get_crypto_ops(alg);
|
||||
if (ops == NULL) {
|
||||
request_module(module);
|
||||
if (ops == NULL)
|
||||
ops = ieee80211_get_crypto_ops(alg);
|
||||
}
|
||||
if (ops == NULL) {
|
||||
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
|
||||
dev->name, ext->alg);
|
||||
|
@ -581,7 +574,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
|
|||
goto done;
|
||||
}
|
||||
new_crypt->ops = ops;
|
||||
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
|
||||
if (new_crypt->ops)
|
||||
new_crypt->priv = new_crypt->ops->init(idx);
|
||||
if (new_crypt->priv == NULL) {
|
||||
kfree(new_crypt);
|
||||
|
|
|
@ -53,14 +53,8 @@ void ieee80211_crypt_deinit_entries(struct ieee80211_device *ieee,
|
|||
|
||||
list_del(ptr);
|
||||
|
||||
if (entry->ops) {
|
||||
if (entry->ops)
|
||||
entry->ops->deinit(entry->priv);
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
|
||||
module_put(entry->ops->owner);
|
||||
#else
|
||||
__MOD_DEC_USE_COUNT(entry->ops->owner);
|
||||
#endif
|
||||
}
|
||||
kfree(entry);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -242,14 +242,8 @@ void free_ieee80211(struct net_device *dev)
|
|||
for (i = 0; i < WEP_KEYS; i++) {
|
||||
struct ieee80211_crypt_data *crypt = ieee->crypt[i];
|
||||
if (crypt) {
|
||||
if (crypt->ops) {
|
||||
if (crypt->ops)
|
||||
crypt->ops->deinit(crypt->priv);
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
|
||||
module_put(crypt->ops->owner);
|
||||
#else
|
||||
__MOD_DEC_USE_COUNT(crypt->ops->owner);
|
||||
#endif
|
||||
}
|
||||
kfree(crypt);
|
||||
ieee->crypt[i] = NULL;
|
||||
}
|
||||
|
|
|
@ -3284,17 +3284,14 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee,
|
|||
goto skip_host_crypt;
|
||||
|
||||
ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
||||
if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) {
|
||||
request_module("ieee80211_crypt_wep");
|
||||
if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0)
|
||||
ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
||||
//set WEP40 first, it will be modified according to WEP104 or WEP40 at other place
|
||||
} else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) {
|
||||
request_module("ieee80211_crypt_tkip");
|
||||
/* set WEP40 first, it will be modified according to WEP104 or
|
||||
* WEP40 at other place */
|
||||
else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0)
|
||||
ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
||||
} else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) {
|
||||
request_module("ieee80211_crypt_ccmp");
|
||||
else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0)
|
||||
ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
||||
}
|
||||
if (ops == NULL) {
|
||||
printk("unknown crypto alg '%s'\n", param->u.crypt.alg);
|
||||
param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG;
|
||||
|
@ -3315,11 +3312,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee,
|
|||
}
|
||||
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
|
||||
new_crypt->ops = ops;
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
|
||||
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
|
||||
#else
|
||||
if (new_crypt->ops && try_inc_mod_count(new_crypt->ops->owner))
|
||||
#endif
|
||||
if (new_crypt->ops)
|
||||
new_crypt->priv =
|
||||
new_crypt->ops->init(param->u.crypt.idx);
|
||||
|
||||
|
|
|
@ -482,15 +482,9 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
|
|||
return -ENOMEM;
|
||||
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
|
||||
new_crypt->ops = ieee80211_get_crypto_ops("WEP");
|
||||
if (!new_crypt->ops) {
|
||||
request_module("ieee80211_crypt_wep");
|
||||
if (!new_crypt->ops)
|
||||
new_crypt->ops = ieee80211_get_crypto_ops("WEP");
|
||||
}
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
|
||||
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
|
||||
#else
|
||||
if (new_crypt->ops && try_inc_mod_count(new_crypt->ops->owner))
|
||||
#endif
|
||||
if (new_crypt->ops)
|
||||
new_crypt->priv = new_crypt->ops->init(key);
|
||||
|
||||
if (!new_crypt->ops || !new_crypt->priv) {
|
||||
|
@ -644,7 +638,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
|
|||
struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
|
||||
int i, idx;
|
||||
int group_key = 0;
|
||||
const char *alg, *module;
|
||||
const char *alg;
|
||||
struct ieee80211_crypto_ops *ops;
|
||||
struct ieee80211_crypt_data **crypt;
|
||||
|
||||
|
@ -711,15 +705,12 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
|
|||
switch (ext->alg) {
|
||||
case IW_ENCODE_ALG_WEP:
|
||||
alg = "WEP";
|
||||
module = "ieee80211_crypt_wep";
|
||||
break;
|
||||
case IW_ENCODE_ALG_TKIP:
|
||||
alg = "TKIP";
|
||||
module = "ieee80211_crypt_tkip";
|
||||
break;
|
||||
case IW_ENCODE_ALG_CCMP:
|
||||
alg = "CCMP";
|
||||
module = "ieee80211_crypt_ccmp";
|
||||
break;
|
||||
default:
|
||||
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
|
||||
|
@ -730,10 +721,8 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
|
|||
printk("alg name:%s\n",alg);
|
||||
|
||||
ops = ieee80211_get_crypto_ops(alg);
|
||||
if (ops == NULL) {
|
||||
request_module(module);
|
||||
if (ops == NULL)
|
||||
ops = ieee80211_get_crypto_ops(alg);
|
||||
}
|
||||
if (ops == NULL) {
|
||||
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
|
||||
dev->name, ext->alg);
|
||||
|
@ -758,7 +747,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
|
|||
goto done;
|
||||
}
|
||||
new_crypt->ops = ops;
|
||||
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
|
||||
if (new_crypt->ops)
|
||||
new_crypt->priv = new_crypt->ops->init(idx);
|
||||
if (new_crypt->priv == NULL) {
|
||||
kfree(new_crypt);
|
||||
|
|
|
@ -53,10 +53,8 @@ void ieee80211_crypt_deinit_entries(struct ieee80211_device *ieee,
|
|||
|
||||
list_del(ptr);
|
||||
|
||||
if (entry->ops) {
|
||||
if (entry->ops)
|
||||
entry->ops->deinit(entry->priv);
|
||||
module_put(entry->ops->owner);
|
||||
}
|
||||
kfree(entry);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -216,10 +216,8 @@ void free_ieee80211(struct net_device *dev)
|
|||
for (i = 0; i < WEP_KEYS; i++) {
|
||||
struct ieee80211_crypt_data *crypt = ieee->crypt[i];
|
||||
if (crypt) {
|
||||
if (crypt->ops) {
|
||||
if (crypt->ops)
|
||||
crypt->ops->deinit(crypt->priv);
|
||||
module_put(crypt->ops->owner);
|
||||
}
|
||||
kfree(crypt);
|
||||
ieee->crypt[i] = NULL;
|
||||
}
|
||||
|
|
|
@ -3026,17 +3026,14 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee,
|
|||
goto skip_host_crypt;
|
||||
|
||||
ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
||||
if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) {
|
||||
request_module("ieee80211_crypt_wep");
|
||||
if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0)
|
||||
ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
||||
//set WEP40 first, it will be modified according to WEP104 or WEP40 at other place
|
||||
} else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) {
|
||||
request_module("ieee80211_crypt_tkip");
|
||||
/* set WEP40 first, it will be modified according to WEP104 or
|
||||
* WEP40 at other place */
|
||||
else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0)
|
||||
ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
||||
} else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) {
|
||||
request_module("ieee80211_crypt_ccmp");
|
||||
else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0)
|
||||
ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
|
||||
}
|
||||
if (ops == NULL) {
|
||||
printk("unknown crypto alg '%s'\n", param->u.crypt.alg);
|
||||
param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG;
|
||||
|
@ -3058,7 +3055,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee,
|
|||
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
|
||||
new_crypt->ops = ops;
|
||||
|
||||
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
|
||||
if (new_crypt->ops)
|
||||
new_crypt->priv =
|
||||
new_crypt->ops->init(param->u.crypt.idx);
|
||||
|
||||
|
|
|
@ -358,11 +358,9 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
|
|||
return -ENOMEM;
|
||||
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
|
||||
new_crypt->ops = ieee80211_get_crypto_ops("WEP");
|
||||
if (!new_crypt->ops) {
|
||||
request_module("ieee80211_crypt_wep");
|
||||
if (!new_crypt->ops)
|
||||
new_crypt->ops = ieee80211_get_crypto_ops("WEP");
|
||||
}
|
||||
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
|
||||
if (new_crypt->ops)
|
||||
new_crypt->priv = new_crypt->ops->init(key);
|
||||
|
||||
if (!new_crypt->ops || !new_crypt->priv) {
|
||||
|
@ -507,7 +505,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
|
|||
struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
|
||||
int i, idx;
|
||||
int group_key = 0;
|
||||
const char *alg, *module;
|
||||
const char *alg;
|
||||
struct ieee80211_crypto_ops *ops;
|
||||
struct ieee80211_crypt_data **crypt;
|
||||
|
||||
|
@ -570,15 +568,12 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
|
|||
switch (ext->alg) {
|
||||
case IW_ENCODE_ALG_WEP:
|
||||
alg = "WEP";
|
||||
module = "ieee80211_crypt_wep";
|
||||
break;
|
||||
case IW_ENCODE_ALG_TKIP:
|
||||
alg = "TKIP";
|
||||
module = "ieee80211_crypt_tkip";
|
||||
break;
|
||||
case IW_ENCODE_ALG_CCMP:
|
||||
alg = "CCMP";
|
||||
module = "ieee80211_crypt_ccmp";
|
||||
break;
|
||||
default:
|
||||
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
|
||||
|
@ -589,10 +584,8 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
|
|||
printk("alg name:%s\n",alg);
|
||||
|
||||
ops = ieee80211_get_crypto_ops(alg);
|
||||
if (ops == NULL) {
|
||||
request_module("%s", module);
|
||||
if (ops == NULL)
|
||||
ops = ieee80211_get_crypto_ops(alg);
|
||||
}
|
||||
if (ops == NULL) {
|
||||
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
|
||||
dev->name, ext->alg);
|
||||
|
@ -612,7 +605,7 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee,
|
|||
goto done;
|
||||
}
|
||||
new_crypt->ops = ops;
|
||||
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
|
||||
if (new_crypt->ops)
|
||||
new_crypt->priv = new_crypt->ops->init(idx);
|
||||
if (new_crypt->priv == NULL) {
|
||||
kfree(new_crypt);
|
||||
|
|
Loading…
Reference in New Issue