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

Reply via email to