diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00dev.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00dev.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c index c3e1aa7c1a80..bae5b01299ea 100644 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c | |||
@@ -1121,6 +1121,18 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev) | |||
1121 | { | 1121 | { |
1122 | int retval = -ENOMEM; | 1122 | int retval = -ENOMEM; |
1123 | 1123 | ||
1124 | /* | ||
1125 | * Allocate the driver data memory, if necessary. | ||
1126 | */ | ||
1127 | if (rt2x00dev->ops->drv_data_size > 0) { | ||
1128 | rt2x00dev->drv_data = kzalloc(rt2x00dev->ops->drv_data_size, | ||
1129 | GFP_KERNEL); | ||
1130 | if (!rt2x00dev->drv_data) { | ||
1131 | retval = -ENOMEM; | ||
1132 | goto exit; | ||
1133 | } | ||
1134 | } | ||
1135 | |||
1124 | spin_lock_init(&rt2x00dev->irqmask_lock); | 1136 | spin_lock_init(&rt2x00dev->irqmask_lock); |
1125 | mutex_init(&rt2x00dev->csr_mutex); | 1137 | mutex_init(&rt2x00dev->csr_mutex); |
1126 | 1138 | ||
@@ -1261,6 +1273,12 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev) | |||
1261 | * Free queue structures. | 1273 | * Free queue structures. |
1262 | */ | 1274 | */ |
1263 | rt2x00queue_free(rt2x00dev); | 1275 | rt2x00queue_free(rt2x00dev); |
1276 | |||
1277 | /* | ||
1278 | * Free the driver data. | ||
1279 | */ | ||
1280 | if (rt2x00dev->drv_data) | ||
1281 | kfree(rt2x00dev->drv_data); | ||
1264 | } | 1282 | } |
1265 | EXPORT_SYMBOL_GPL(rt2x00lib_remove_dev); | 1283 | EXPORT_SYMBOL_GPL(rt2x00lib_remove_dev); |
1266 | 1284 | ||