tty_unregister_device(acm_tty_driver, acm->minor); acm_table[acm->minor] = NULL; usb_free_urb(acm->ctrlurb); usb_free_urb(acm->readurb); usb_free_urb(acm->writeurb); kfree(acm); 
acm_tty_unregister(acm); 
static void acm_disconnect(struct usb_interface *intf){	struct acm *acm = usb_get_intfdata (intf);	struct usb_device *usb_dev = interface_to_usbdev(intf);	if (!acm || !acm->dev) {		dbg("disconnect on nonexisting interface");		return;	}	down(&open_sem);	acm->dev = NULL;	usb_set_intfdata (intf, NULL);	usb_kill_urb(acm->ctrlurb);	usb_kill_urb(acm->readurb);	usb_kill_urb(acm->writeurb);	flush_scheduled_work(); /* wait for acm_softint */	acm_write_buffers_free(acm);	usb_buffer_free(usb_dev, acm->readsize, acm->read_buffer, acm->read_dma);	usb_buffer_free(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);	usb_driver_release_interface(&acm_driver, acm->data);	if (!acm->used) {		tty_unregister_device(acm_tty_driver, acm->minor);		acm_table[acm->minor] = NULL;		usb_free_urb(acm->ctrlurb);		usb_free_urb(acm->readurb);		usb_free_urb(acm->writeurb);		kfree(acm);		up(&open_sem);		return;	}	up(&open_sem);	if (acm->tty)		tty_hangup(acm->tty);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/83ef344a7539aa55a787790bc036f0bf3466e191/cdc-acm.c/clean/drivers/usb/class/cdc-acm.c