p54: move p54_vdcf_init to the right place.
authorChristian Lamparter <chunkeey@web.de>
Wed, 13 Aug 2008 21:41:45 +0000 (23:41 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 18 Aug 2008 15:05:14 +0000 (11:05 -0400)
priv->tx_hdr_len is set by the driver _after_ it called p54_init_common.
While this isn't much a problem for any PCI or ISL3887 cards/sticks,
because they don't need any extra header and therefore tx_hdr_len is
zero for them...

Signed-off-by: Christian Lamparter <chunkeey@web.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/p54/p54common.c

index 49afd20..29be3dc 100644 (file)
@@ -837,10 +837,21 @@ static int p54_start(struct ieee80211_hw *dev)
        struct p54_common *priv = dev->priv;
        int err;
 
+       if (!priv->cached_vdcf) {
+               priv->cached_vdcf = kzalloc(sizeof(struct p54_tx_control_vdcf)+
+                       priv->tx_hdr_len + sizeof(struct p54_control_hdr),
+                       GFP_KERNEL);
+
+               if (!priv->cached_vdcf)
+                       return -ENOMEM;
+       }
+
        err = priv->open(dev);
        if (!err)
                priv->mode = IEEE80211_IF_TYPE_MNTR;
 
+       p54_init_vdcf(dev);
+
        return err;
 }
 
@@ -1020,15 +1031,6 @@ struct ieee80211_hw *p54_init_common(size_t priv_data_len)
        dev->extra_tx_headroom = sizeof(struct p54_control_hdr) + 4 +
                                 sizeof(struct p54_tx_control_allocdata);
 
-        priv->cached_vdcf = kzalloc(sizeof(struct p54_tx_control_vdcf) +
-              priv->tx_hdr_len + sizeof(struct p54_control_hdr), GFP_KERNEL);
-
-       if (!priv->cached_vdcf) {
-               ieee80211_free_hw(dev);
-               return NULL;
-       }
-
-       p54_init_vdcf(dev);
        mutex_init(&priv->conf_mutex);
 
        return dev;