示例#1
0
void __exit mcdx_exit(void)
{
    int i;

	xinfo("cleanup_module called\n");

    for (i = 0; i < MCDX_NDRIVES; i++) {
		struct s_drive_stuff *stuffp;
        	if (unregister_cdrom(&mcdx_info)) {
			printk(KERN_WARNING "Can't unregister cdrom mcdx\n");
			return;
		}
		stuffp = mcdx_stuffp[i];
		if (!stuffp) continue;
		release_region((unsigned long) stuffp->wreg_data, MCDX_IO_SIZE);
		free_irq(stuffp->irq, NULL);
		if (stuffp->toc) {
			xtrace(MALLOC, "cleanup_module() free toc @ %p\n", stuffp->toc);
			kfree(stuffp->toc);
		}
		xtrace(MALLOC, "cleanup_module() free stuffp @ %p\n", stuffp);
		mcdx_stuffp[i] = NULL;
		kfree(stuffp);
    }

    if (devfs_unregister_blkdev(MAJOR_NR, "mcdx") != 0) {
        xwarn("cleanup() unregister_blkdev() failed\n");
    }
	blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
#if !MCDX_QUIET
	else xinfo("cleanup() succeeded\n");
示例#2
0
文件: pd.c 项目: fgeraci/cs518-sched
void    cleanup_module(void)
{
	int unit;

	devfs_unregister_blkdev(MAJOR_NR, name);
	del_gendisk(&pd_gendisk);

	for (unit=0; unit<PD_UNITS; unit++) 
		if (PD.present)
			pi_release(PI);
}
示例#3
0
void __exit exit_gscd(void)
{
   CLEAR_TIMER;

   devfs_unregister(devfs_find_handle(NULL, "gscd", 0, 0, DEVFS_SPECIAL_BLK,
				      0));
   if ((devfs_unregister_blkdev(MAJOR_NR, "gscd" ) == -EINVAL))
   {
      printk("What's that: can't unregister GoldStar-module\n" );
      return;
   }
   blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
   release_region (gscd_port,4);
   printk(KERN_INFO "GoldStar-module released.\n" );
}
示例#4
0
文件: mcd.c 项目: fgeraci/cs518-sched
/* This routine gets called during initialization if things go wrong,
 * and is used in mcd_exit as well. */
static void cleanup(int level)
{
	switch (level) {
	case 3:
		if (unregister_cdrom(&mcd_info)) {
			printk(KERN_WARNING "Can't unregister cdrom mcd\n");
			return;
		}
		free_irq(mcd_irq, NULL);
	case 2:
		release_region(mcd_port, 4);
	case 1:
		if (devfs_unregister_blkdev(MAJOR_NR, "mcd")) {
			printk(KERN_WARNING "Can't unregister major mcd\n");
			return;
		}
		blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
	default:;
	}
}