static void __exit fake_exit()

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);
}