in bridges/vme_fake.c [1242:1295]
static void __exit fake_exit(void)
{
struct list_head *pos = NULL;
struct list_head *tmplist;
struct vme_master_resource *master_image;
struct vme_slave_resource *slave_image;
int i;
struct vme_bridge *fake_bridge;
struct fake_driver *bridge;
fake_bridge = exit_pointer;
bridge = fake_bridge->driver_priv;
pr_debug("Driver is being unloaded.\n");
/*
* Shutdown all inbound and outbound windows.
*/
for (i = 0; i < FAKE_MAX_MASTER; i++)
bridge->masters[i].enabled = 0;
for (i = 0; i < FAKE_MAX_SLAVE; i++)
bridge->slaves[i].enabled = 0;
/*
* Shutdown Location monitor.
*/
bridge->lm_enabled = 0;
vme_unregister_bridge(fake_bridge);
fake_crcsr_exit(fake_bridge);
/* resources are stored in link list */
list_for_each_safe(pos, tmplist, &fake_bridge->slave_resources) {
slave_image = list_entry(pos, struct vme_slave_resource, list);
list_del(pos);
kfree(slave_image);
}
/* resources are stored in link list */
list_for_each_safe(pos, tmplist, &fake_bridge->master_resources) {
master_image = list_entry(pos, struct vme_master_resource,
list);
list_del(pos);
kfree(master_image);
}
kfree(fake_bridge->driver_priv);
kfree(fake_bridge);
root_device_unregister(vme_root);
}