From: Denis V. <vd...@il...> - 2005-09-01 05:56:52
|
On Wednesday 31 August 2005 20:21, Carlos Martin wrote: > Attached the log of the .2i. Wow. It seems to work, eh? > Do yo have any idea why it doesn't deregister the device? I've looked > a bit at the code and I suspect a NULL pointer somwhere, so that it > doesn't even try to, but I'm not sure. I remember it working in > Andreas' tarball, although that doesn't automatically mean that it > did, just that I didn't notice a problem. Dunno. Add prints to this function: static void acx100usb_e_disconnect(struct usb_interface *intf) { wlandevice_t *priv = usb_get_intfdata(intf); int i, result; printk("acx100usb_e_disconnect: 1\n"); /* No WLAN device...no sense */ if (!priv) {printk("acx100usb_e_disconnect: !priv, bailing\n"); return; } acx_sem_lock(priv); /* stop the transmit queue */ if (priv->netdev) { rtnl_lock(); if (!acx_queue_stopped(priv->netdev)) { printk("acx100usb_e_disconnect: acx_stop_queue\n"); acx_stop_queue(priv->netdev, "on USB disconnect"); } rtnl_unlock(); #ifdef CONFIG_PROC_FS acx_proc_unregister_entries(priv->netdev); #endif } printk.... /* now abort pending URBs and free them */ for (i = 0; i < ACX100_USB_NUM_BULK_URBS; i++) { acx_unlink_and_free_urb(priv->bulkrx_urbs[i]); acx_unlink_and_free_urb(priv->usb_tx[i].urb); } /* Unregister the network devices */ if (priv->netdev) { rtnl_lock(); result = unregister_netdevice(priv->netdev); rtnl_unlock(); kfree(priv->netdev); } acx_sem_unlock(priv); /* finally free the WLAN device */ kfree(priv); } and you will find out. -- vda |