Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6:
Staging: w35und: fix usb_control_msg() error handling in wb35_probe()
Staging: w35und: fix registration with wlan stack
Staging: panel: fix oops on panel_cleanup_module
Staging: rtl8187se: Fix oops and memory poison caused by builtin ieee80211.
Staging: rtl8187se: fix Kconfig dependencies

+37 -28
+12 -11
drivers/staging/panel/panel.c
··· 2164 2164 if (scan_timer.function != NULL) 2165 2165 del_timer(&scan_timer); 2166 2166 2167 - if (keypad_enabled) 2168 - misc_deregister(&keypad_dev); 2167 + if (pprt != NULL) { 2168 + if (keypad_enabled) 2169 + misc_deregister(&keypad_dev); 2169 2170 2170 - if (lcd_enabled) { 2171 - panel_lcd_print("\x0cLCD driver " PANEL_VERSION 2172 - "\nunloaded.\x1b[Lc\x1b[Lb\x1b[L-"); 2173 - misc_deregister(&lcd_dev); 2171 + if (lcd_enabled) { 2172 + panel_lcd_print("\x0cLCD driver " PANEL_VERSION 2173 + "\nunloaded.\x1b[Lc\x1b[Lb\x1b[L-"); 2174 + misc_deregister(&lcd_dev); 2175 + } 2176 + 2177 + /* TODO: free all input signals */ 2178 + parport_release(pprt); 2179 + parport_unregister_device(pprt); 2174 2180 } 2175 - 2176 - /* TODO: free all input signals */ 2177 - 2178 - parport_release(pprt); 2179 - parport_unregister_device(pprt); 2180 2181 parport_unregister_driver(&panel_driver); 2181 2182 } 2182 2183
+1
drivers/staging/rtl8187se/Kconfig
··· 1 1 config RTL8187SE 2 2 tristate "RealTek RTL8187SE Wireless LAN NIC driver" 3 3 depends on PCI 4 + depends on WIRELESS_EXT && COMPAT_NET_DEV_OPS 4 5 default N 5 6 ---help---
+10 -9
drivers/staging/rtl8187se/ieee80211/ieee80211_crypt.c
··· 234 234 void ieee80211_crypto_deinit(void) 235 235 { 236 236 struct list_head *ptr, *n; 237 + struct ieee80211_crypto_alg *alg = NULL; 237 238 238 239 if (hcrypt == NULL) 239 240 return; 240 241 241 - for (ptr = hcrypt->algs.next, n = ptr->next; ptr != &hcrypt->algs; 242 - ptr = n, n = ptr->next) { 243 - struct ieee80211_crypto_alg *alg = 244 - (struct ieee80211_crypto_alg *) ptr; 245 - list_del(ptr); 246 - printk(KERN_DEBUG "ieee80211_crypt: unregistered algorithm " 247 - "'%s' (deinit)\n", alg->ops->name); 248 - kfree(alg); 242 + list_for_each_safe(ptr, n, &hcrypt->algs) { 243 + alg = list_entry(ptr, struct ieee80211_crypto_alg, list); 244 + if (alg) { 245 + list_del(ptr); 246 + printk(KERN_DEBUG 247 + "ieee80211_crypt: unregistered algorithm '%s' (deinit)\n", 248 + alg->ops->name); 249 + kfree(alg); 250 + } 249 251 } 250 - 251 252 kfree(hcrypt); 252 253 } 253 254
+1 -1
drivers/staging/rtl8187se/r8180_core.c
··· 6161 6161 { 6162 6162 pci_unregister_driver (&rtl8180_pci_driver); 6163 6163 rtl8180_proc_module_remove(); 6164 - ieee80211_crypto_deinit(); 6165 6164 ieee80211_crypto_tkip_exit(); 6166 6165 ieee80211_crypto_ccmp_exit(); 6167 6166 ieee80211_crypto_wep_exit(); 6167 + ieee80211_crypto_deinit(); 6168 6168 DMESG("Exiting"); 6169 6169 } 6170 6170
+13 -7
drivers/staging/winbond/wbusb.c
··· 319 319 struct usb_device *udev = interface_to_usbdev(intf); 320 320 struct wbsoft_priv *priv; 321 321 struct ieee80211_hw *dev; 322 - int err; 322 + int nr, err; 323 323 324 324 usb_get_dev(udev); 325 325 326 326 // 20060630.2 Check the device if it already be opened 327 - err = usb_control_msg(udev, usb_rcvctrlpipe( udev, 0 ), 328 - 0x01, USB_TYPE_VENDOR|USB_RECIP_DEVICE|USB_DIR_IN, 329 - 0x0, 0x400, &ltmp, 4, HZ*100 ); 330 - if (err) 327 + nr = usb_control_msg(udev, usb_rcvctrlpipe( udev, 0 ), 328 + 0x01, USB_TYPE_VENDOR|USB_RECIP_DEVICE|USB_DIR_IN, 329 + 0x0, 0x400, &ltmp, 4, HZ*100 ); 330 + if (nr < 0) { 331 + err = nr; 331 332 goto error; 333 + } 332 334 333 335 ltmp = cpu_to_le32(ltmp); 334 336 if (ltmp) { // Is already initialized? ··· 339 337 } 340 338 341 339 dev = ieee80211_alloc_hw(sizeof(*priv), &wbsoft_ops); 342 - if (!dev) 340 + if (!dev) { 341 + err = -ENOMEM; 343 342 goto error; 343 + } 344 344 345 345 priv = dev->priv; 346 346 ··· 373 369 } 374 370 375 371 dev->extra_tx_headroom = 12; /* FIXME */ 376 - dev->flags = 0; 372 + dev->flags = IEEE80211_HW_SIGNAL_UNSPEC; 373 + dev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION); 377 374 378 375 dev->channel_change_time = 1000; 376 + dev->max_signal = 100; 379 377 dev->queues = 1; 380 378 381 379 dev->wiphy->bands[IEEE80211_BAND_2GHZ] = &wbsoft_band_2GHz;