예제 #1
0
static void __exit my_bus_exit(void) {
	kfree(zeke_ver);
	bus_remove_file(&my_bus_type, &my_bus_attribute);
	bus_unregister(&my_bus_type);
}
예제 #2
0
파일: core.c 프로젝트: 3sOx/asuswrt-merlin
static void __exit soundbus_exit(void)
{
	bus_unregister(&soundbus_bus_type);
}
예제 #3
0
void mmc_unregister_bus(void)
{
	bus_unregister(&mmc_bus_type);
}
예제 #4
0
static void __exit msm_pil_exit(void)
{
	bus_unregister(&pil_bus_type);
	unregister_pm_notifier(&pil_pm_notifier);
	msm_pil_debugfs_exit();
}
예제 #5
0
static void __exit rpmsg_fini(void)
{
	unregister_virtio_driver(&virtio_ipc_driver);
	bus_unregister(&rpmsg_bus);
}
예제 #6
0
void scif_peer_bus_exit(void)
{
	bus_unregister(&scif_peer_bus);
}
예제 #7
0
static void __exit media_devnode_exit(void)
{
	bus_unregister(&media_bus_type);
	unregister_chrdev_region(media_dev_t, MEDIA_NUM_DEVICES);
}
예제 #8
0
static void __exit lcdctrl_exit(void)
{
	pr_debug("%s()\n", __FUNCTION__);

	bus_unregister(&lcdctrl_bustype);
}
예제 #9
0
static void __exit scbus_exit(void)
{
	bus_remove_file(&scbus_type, &bus_attr_version);
	bus_unregister(&scbus_type);
	printk("Remove a scbus\n");
}
예제 #10
0
static void fmc_exit(void)
{
	bus_unregister(&fmc_bus_type);
}
예제 #11
0
static void __exit ac97_bus_exit(void)
{
	bus_unregister(&ac97_bus_type);
}
예제 #12
0
파일: edac_stub.c 프로젝트: 03199618/linux
void edac_put_sysfs_subsys(void)
{
	/* last user unregisters it */
	if (atomic_dec_and_test(&edac_subsys_valid))
		bus_unregister(&edac_subsys);
}
예제 #13
0
파일: mdio_bus.c 프로젝트: Tigrouzen/k1099
void mdio_bus_exit(void)
{
	bus_unregister(&mdio_bus_type);
}
예제 #14
0
void pcie_port_bus_unregister(void)
{
	bus_unregister(&pcie_port_bus_type);
}
예제 #15
0
static void ldd_bus_exit(void)
{
	device_unregister(&ldd_bus);
	bus_unregister(&ldd_bus_type);
}
void edac_put_sysfs_subsys(void)
{
	
	if (atomic_dec_and_test(&edac_subsys_valid))
		bus_unregister(&edac_subsys);
}
예제 #17
0
파일: mybus.c 프로젝트: renaldonoma/myldd
static void __exit mybus_exit(void)
{
	pr_info("\nBUS (1) Unregister bus: \"%s\"\n",mybus_bus.name);
	bus_unregister(&mybus_bus);
	pr_info("BUS (2) Successfully unregister bus: \"%s\"\n", mybus_bus.name);
}
예제 #18
0
static void omap_dss_bus_unregister(void)
{
	device_unregister(&dss_bus);

	bus_unregister(&dss_bus_type);
}
예제 #19
0
파일: cec-core.c 프로젝트: AK101111/linux
static void __exit cec_devnode_exit(void)
{
	debugfs_remove_recursive(top_cec_dir);
	bus_unregister(&cec_bus_type);
	unregister_chrdev_region(cec_dev_t, CEC_NUM_DEVICES);
}
예제 #20
0
static void __exit mcp_exit(void)
{
	bus_unregister(&mcp_bus_type);
}
예제 #21
0
파일: vlynq.c 프로젝트: AppEngine/linux-2.6
static void __devexit vlynq_exit(void)
{
	platform_driver_unregister(&vlynq_platform_driver);
	bus_unregister(&vlynq_bus_type);
}
예제 #22
0
static void rtl_teardown_sysfs(void) {
	int i;
	for (i = 0; rtl_attributes[i]; i ++)
		device_remove_file(rtl_subsys.dev_root, rtl_attributes[i]);
	bus_unregister(&rtl_subsys);
}
예제 #23
0
파일: wb.c 프로젝트: mvanga/wbonesim
static void wb_exit(void)
{
	device_unregister(&wb_dev);
	bus_unregister(&wb_bus_type);
}
예제 #24
0
static void __exit cleanup_ccwgroup(void)
{
	bus_unregister_notifier(&ccwgroup_bus_type, &ccwgroup_nb);
	bus_unregister(&ccwgroup_bus_type);
}
예제 #25
0
static void __exit simple_exit(void)
{
	device_unregister(&simple_bus.dev);
	bus_unregister(&simple_bus_type);
}
예제 #26
0
/*
*Unistall function
*/
static void __exit ex_bus_exit(void)
{
	bus_remove_file(&ex10_bus, &bus_attr_example);
	bus_unregister(&ex10_bus);
	printk("bus is exit\n");
}
예제 #27
0
static void __exit virtio_exit(void)
{
	bus_unregister(&virtio_bus);
}
static int __init xenbus_probe_init(void)
{
	int err = 0;

	DPRINTK("");

	err = -ENODEV;
	if (!xen_domain())
		goto out_error;

	/* Register ourselves with the kernel bus subsystem */
	err = bus_register(&xenbus_frontend.bus);
	if (err)
		goto out_error;

	err = xenbus_backend_bus_register();
	if (err)
		goto out_unreg_front;

	/*
	 * Domain0 doesn't have a store_evtchn or store_mfn yet.
	 */
	if (xen_initial_domain()) {
		/* dom0 not yet supported */
	} else {
		xenstored_ready = 1;
		xen_store_evtchn = xen_start_info->store_evtchn;
		xen_store_mfn = xen_start_info->store_mfn;
	}
	xen_store_interface = mfn_to_virt(xen_store_mfn);

	/* Initialize the interface to xenstore. */
	err = xs_init();
	if (err) {
		printk(KERN_WARNING
		       "XENBUS: Error initializing xenstore comms: %i\n", err);
		goto out_unreg_back;
	}

	if (!xen_initial_domain())
		xenbus_probe(NULL);

#ifdef CONFIG_XEN_COMPAT_XENFS
	/*
	 * Create xenfs mountpoint in /proc for compatibility with
	 * utilities that expect to find "xenbus" under "/proc/xen".
	 */
	proc_mkdir("xen", NULL);
#endif

	return 0;

  out_unreg_back:
	xenbus_backend_bus_unregister();

  out_unreg_front:
	bus_unregister(&xenbus_frontend.bus);

  out_error:
	return err;
}
예제 #29
0
/*
 * Create a new Memory Controller kobject instance,
 *	mc<id> under the 'mc' directory
 *
 * Return:
 *	0	Success
 *	!0	Failure
 */
int edac_create_sysfs_mci_device(struct mem_ctl_info *mci)
{
	int i, err;

	/*
	 * The memory controller needs its own bus, in order to avoid
	 * namespace conflicts at /sys/bus/edac.
	 */
	mci->bus->name = kasprintf(GFP_KERNEL, "mc%d", mci->mc_idx);
	if (!mci->bus->name)
		return -ENOMEM;

	edac_dbg(0, "creating bus %s\n", mci->bus->name);

	err = bus_register(mci->bus);
	if (err < 0)
		return err;

	/* get the /sys/devices/system/edac subsys reference */
	mci->dev.type = &mci_attr_type;
	device_initialize(&mci->dev);

	mci->dev.parent = mci_pdev;
	mci->dev.bus = mci->bus;
	dev_set_name(&mci->dev, "mc%d", mci->mc_idx);
	dev_set_drvdata(&mci->dev, mci);
	pm_runtime_forbid(&mci->dev);

	edac_dbg(0, "creating device %s\n", dev_name(&mci->dev));
	err = device_add(&mci->dev);
	if (err < 0) {
		edac_dbg(1, "failure: create device %s\n", dev_name(&mci->dev));
		bus_unregister(mci->bus);
		kfree(mci->bus->name);
		return err;
	}

	if (mci->set_sdram_scrub_rate || mci->get_sdram_scrub_rate) {
		if (mci->get_sdram_scrub_rate) {
			dev_attr_sdram_scrub_rate.attr.mode |= S_IRUGO;
			dev_attr_sdram_scrub_rate.show = &mci_sdram_scrub_rate_show;
		}
		if (mci->set_sdram_scrub_rate) {
			dev_attr_sdram_scrub_rate.attr.mode |= S_IWUSR;
			dev_attr_sdram_scrub_rate.store = &mci_sdram_scrub_rate_store;
		}
		err = device_create_file(&mci->dev,
					 &dev_attr_sdram_scrub_rate);
		if (err) {
			edac_dbg(1, "failure: create sdram_scrub_rate\n");
			goto fail2;
		}
	}
	/*
	 * Create the dimm/rank devices
	 */
	for (i = 0; i < mci->tot_dimms; i++) {
		struct dimm_info *dimm = mci->dimms[i];
		/* Only expose populated DIMMs */
		if (dimm->nr_pages == 0)
			continue;
#ifdef CONFIG_EDAC_DEBUG
		edac_dbg(1, "creating dimm%d, located at ", i);
		if (edac_debug_level >= 1) {
			int lay;
			for (lay = 0; lay < mci->n_layers; lay++)
				printk(KERN_CONT "%s %d ",
					edac_layer_name[mci->layers[lay].type],
					dimm->location[lay]);
			printk(KERN_CONT "\n");
		}
#endif
		err = edac_create_dimm_object(mci, dimm, i);
		if (err) {
			edac_dbg(1, "failure: create dimm %d obj\n", i);
			goto fail;
		}
	}

#ifdef CONFIG_EDAC_LEGACY_SYSFS
	err = edac_create_csrow_objects(mci);
	if (err < 0)
		goto fail;
#endif

#ifdef CONFIG_EDAC_DEBUG
	edac_create_debug_nodes(mci);
#endif
	return 0;

fail:
	for (i--; i >= 0; i--) {
		struct dimm_info *dimm = mci->dimms[i];
		if (dimm->nr_pages == 0)
			continue;
		device_unregister(&dimm->dev);
	}
fail2:
	device_unregister(&mci->dev);
	bus_unregister(mci->bus);
	kfree(mci->bus->name);
	return err;
}
예제 #30
0
static void __exit mmc_exit(void)
{
	bus_unregister(&mmc_bus_type);
}