driver_for_each_device(drv, NULL, NULL, __remove_driver); 
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); } 
void driver_detach(struct device_driver * drv){	driver_for_each_device(drv, NULL, NULL, __remove_driver);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/c95a6b057b108c2b7add35cba1354f9af921349e/dd.c/clean/drivers/base/dd.c