Allow GFP_KERNEL to be used for allocations of sta entries triggered from the user space.
Signed-off-by: Jiri Benc <[EMAIL PROTECTED]> --- net/d80211/ieee80211_ioctl.c | 2 +- net/d80211/ieee80211_rate.h | 7 ++++--- net/d80211/ieee80211_sta.c | 4 ++-- net/d80211/rc80211_simple.c | 4 ++-- net/d80211/sta_info.c | 8 +++----- net/d80211/sta_info.h | 2 +- 6 files changed, 13 insertions(+), 14 deletions(-) 034b87e99c85b243b94c6955bbdce94825dd6b1f diff --git a/net/d80211/ieee80211_ioctl.c b/net/d80211/ieee80211_ioctl.c index ff6718b..cded685 100644 --- a/net/d80211/ieee80211_ioctl.c +++ b/net/d80211/ieee80211_ioctl.c @@ -277,7 +277,7 @@ static int ieee80211_ioctl_add_sta(struc sta = sta_info_get(local, param->sta_addr); if (!sta) { - sta = sta_info_add(local, dev, param->sta_addr); + sta = sta_info_add(local, dev, param->sta_addr, GFP_KERNEL); if (!sta) return -ENOMEM; } diff --git a/net/d80211/ieee80211_rate.h b/net/d80211/ieee80211_rate.h index 60e4879..04c7465 100644 --- a/net/d80211/ieee80211_rate.h +++ b/net/d80211/ieee80211_rate.h @@ -52,7 +52,7 @@ struct rate_control_ops { void *(*alloc)(struct ieee80211_local *local); void (*free)(void *priv); - void *(*alloc_sta)(void *priv); + void *(*alloc_sta)(void *priv, gfp_t gfp); void (*free_sta)(void *priv, void *priv_sta); int (*add_attrs)(void *priv, struct kobject *kobj); @@ -112,9 +112,10 @@ static inline void rate_control_clear(st ref->ops->clear(ref->priv); } -static inline void *rate_control_alloc_sta(struct rate_control_ref *ref) +static inline void *rate_control_alloc_sta(struct rate_control_ref *ref, + gfp_t gfp) { - return ref->ops->alloc_sta(ref->priv); + return ref->ops->alloc_sta(ref->priv, gfp); } static inline void rate_control_free_sta(struct rate_control_ref *ref, diff --git a/net/d80211/ieee80211_sta.c b/net/d80211/ieee80211_sta.c index ed6747a..480e9c9 100644 --- a/net/d80211/ieee80211_sta.c +++ b/net/d80211/ieee80211_sta.c @@ -1158,7 +1158,7 @@ static void ieee80211_rx_mgmt_assoc_resp /* Add STA entry for the AP */ sta = sta_info_get(local, ifsta->bssid); if (!sta) { - sta = sta_info_add(local, dev, ifsta->bssid); + sta = sta_info_add(local, dev, ifsta->bssid, GFP_ATOMIC); if (!sta) { printk(KERN_DEBUG "%s: failed to add STA entry for the" " AP\n", dev->name); @@ -2832,7 +2832,7 @@ struct sta_info * ieee80211_ibss_add_sta printk(KERN_DEBUG "%s: Adding new IBSS station " MAC_FMT " (dev=%s)\n", dev->name, MAC_ARG(addr), sta_dev->name); - sta = sta_info_add(local, dev, addr); + sta = sta_info_add(local, dev, addr, GFP_ATOMIC); if (!sta) return NULL; diff --git a/net/d80211/rc80211_simple.c b/net/d80211/rc80211_simple.c index 055a167..3634d00 100644 --- a/net/d80211/rc80211_simple.c +++ b/net/d80211/rc80211_simple.c @@ -305,11 +305,11 @@ static void rate_control_simple_clear(vo } -static void * rate_control_simple_alloc_sta(void *priv) +static void * rate_control_simple_alloc_sta(void *priv, gfp_t gfp) { struct sta_rate_control *rctrl; - rctrl = kzalloc(sizeof(*rctrl), GFP_ATOMIC); + rctrl = kzalloc(sizeof(*rctrl), gfp); return rctrl; } diff --git a/net/d80211/sta_info.c b/net/d80211/sta_info.c index a177d2f..c18365b 100644 --- a/net/d80211/sta_info.c +++ b/net/d80211/sta_info.c @@ -130,16 +130,14 @@ void sta_info_release(struct kobject *ko struct sta_info * sta_info_add(struct ieee80211_local *local, - struct net_device *dev, u8 *addr) + struct net_device *dev, u8 *addr, gfp_t gfp) { struct sta_info *sta; - sta = kmalloc(sizeof(*sta), GFP_ATOMIC); + sta = kzalloc(sizeof(*sta), gfp); if (!sta) return NULL; - memset(sta, 0, sizeof(*sta)); - if (kobject_set_name(&sta->kobj, MAC_FMT, MAC_ARG(addr))) { kfree(sta); return NULL; @@ -148,7 +146,7 @@ struct sta_info * sta_info_add(struct ie kobject_init(&sta->kobj); sta->rate_ctrl = rate_control_get(local->rate_ctrl); - sta->rate_ctrl_priv = rate_control_alloc_sta(sta->rate_ctrl); + sta->rate_ctrl_priv = rate_control_alloc_sta(sta->rate_ctrl, gfp); if (!sta->rate_ctrl_priv) { rate_control_put(sta->rate_ctrl); kobject_put(&sta->kobj); diff --git a/net/d80211/sta_info.h b/net/d80211/sta_info.h index 9bd7e0d..ed1a104 100644 --- a/net/d80211/sta_info.h +++ b/net/d80211/sta_info.h @@ -133,7 +133,7 @@ struct sta_info * sta_info_get(struct ie int sta_info_min_txrate_get(struct ieee80211_local *local); void sta_info_put(struct sta_info *sta); struct sta_info * sta_info_add(struct ieee80211_local *local, - struct net_device *dev, u8 *addr); + struct net_device *dev, u8 *addr, gfp_t gfp); void sta_info_free(struct sta_info *sta, int locked); void sta_info_release(struct kobject *kobj); void sta_info_init(struct ieee80211_local *local); -- 1.3.0 - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html