spin_unlock_irq(&drv->klist_devices.k_lock);
spin_unlock(&drv->klist_devices.k_lock);
void driver_detach(struct device_driver * drv){	struct device * dev;	for (;;) {		spin_lock_irq(&drv->klist_devices.k_lock);		if (list_empty(&drv->klist_devices.k_list)) {			spin_unlock_irq(&drv->klist_devices.k_lock);			break;		}		dev = list_entry(drv->klist_devices.k_list.prev,				struct device, knode_driver.n_node);		get_device(dev);		spin_unlock_irq(&drv->klist_devices.k_lock);		down(&dev->sem);		if (dev->driver == drv)			__device_release_driver(dev);		up(&dev->sem);		put_device(dev);	}}