static void __exit mcdx_exit(void) { int i; xinfo("cleanup_module called\n"); for (i = 0; i < MCDX_NDRIVES; i++) { struct s_drive_stuff *stuffp = mcdx_stuffp[i]; if (!stuffp) continue; del_gendisk(stuffp->disk); if (unregister_cdrom(&stuffp->info)) { printk(KERN_WARNING "Can't unregister cdrom mcdx\n"); continue; } put_disk(stuffp->disk); release_region(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 (unregister_blkdev(MAJOR_NR, "mcdx") != 0) { xwarn("cleanup() unregister_blkdev() failed\n"); } blk_cleanup_queue(mcdx_queue); #if !MCDX_QUIET else
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");
void __exit mcd_exit(void) { del_gendisk(mcd_gendisk); put_disk(mcd_gendisk); if (unregister_cdrom(&mcd_info)) { printk(KERN_WARNING "Can't unregister cdrom mcd\n"); return; } free_irq(mcd_irq, NULL); release_region(mcd_port, 4); if (unregister_blkdev(MAJOR_NR, "mcd")) { printk(KERN_WARNING "Can't unregister major mcd\n"); return; } blk_cleanup_queue(mcd_queue); del_timer_sync(&mcd_timer); }
/* This routine gets called during initialization if things go wrong, * and is used in cleanup_module 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 (unregister_blkdev(MAJOR_NR, "mcd")) { printk(KERN_WARNING "Can't unregister major mcd\n"); return; } default: } }
/* 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:; } }
static void ps2cdvd_cleanup() { DPRINT(DBG_VERBOSE, "cleanup\n"); ps2sif_lock(ps2cdvd_lock, "cdvd_cleanup"); RESET_TIMER(); if (initialized & INIT_LABELBUF) { DPRINT(DBG_VERBOSE, "free labelbuf %p\n", labelbuf); kfree(labelbuf); } if (initialized & INIT_DATABUF) { DPRINT(DBG_VERBOSE, "free databuf %p\n", ps2cdvd_databufx); kfree(ps2cdvd_databufx); } #if 0 if (initialized & INIT_IOPSIDE) ps2cdvd_cleanupiop(); #endif if (initialized & INIT_BLKDEV) { DPRINT(DBG_VERBOSE, "unregister block device\n"); unregister_blkdev(MAJOR_NR, "ps2cdvd"); } if (initialized & INIT_CDROM) { DPRINT(DBG_VERBOSE, "unregister cdrom\n"); unregister_cdrom(&ps2cdvd_info); } blksize_size[MAJOR_NR] = NULL; initialized = 0; ps2sif_unlock(ps2cdvd_lock); }