tasklet_kill(&ahc->platform_data->runq_tasklet); 
ahc_platform_free(struct ahc_softc *ahc){	struct ahc_linux_target *targ;	struct ahc_linux_device *dev;	int i, j;	if (ahc->platform_data != NULL) {		del_timer_sync(&ahc->platform_data->completeq_timer);		tasklet_kill(&ahc->platform_data->runq_tasklet);		if (ahc->platform_data->host != NULL) {#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)			scsi_remove_host(ahc->platform_data->host);#endif			scsi_host_put(ahc->platform_data->host);		}		/* destroy all of the device and target objects */		for (i = 0; i < AHC_NUM_TARGETS; i++) {			targ = ahc->platform_data->targets[i];			if (targ != NULL) {				/* Keep target around through the loop. */				targ->refcount++;				for (j = 0; j < AHC_NUM_LUNS; j++) {					if (targ->devices[j] == NULL)						continue;					dev = targ->devices[j];					ahc_linux_free_device(ahc, dev);				}				/*				 * Forcibly free the target now that				 * all devices are gone.				 */				ahc_linux_free_target(ahc, targ); 			} 		}		if (ahc->platform_data->irq != AHC_LINUX_NOIRQ)			free_irq(ahc->platform_data->irq, ahc);		if (ahc->tag == BUS_SPACE_PIO		 && ahc->bsh.ioport != 0)			release_region(ahc->bsh.ioport, 256);		if (ahc->tag == BUS_SPACE_MEMIO		 && ahc->bsh.maddr != NULL) {			iounmap(ahc->bsh.maddr);			release_mem_region(ahc->platform_data->mem_busaddr,					   0x1000);		}#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)		/*		 * In 2.4 we detach from the scsi midlayer before the PCI		 * layer invokes our remove callback.  No per-instance		 * detach is provided, so we must reach inside the PCI		 * subsystem's internals and detach our driver manually.		 */		if (ahc->dev_softc != NULL)			ahc->dev_softc->driver = NULL;#endif		free(ahc->platform_data, M_DEVBUF);	}}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/e4e360c325c90f7830baaa2a27cd7a1f2bdeb6b0/aic7xxx_osm.c/clean/drivers/scsi/aic7xxx/aic7xxx_osm.c