pci_release_regions(pHba->pDev); 
static void adpt_i2o_delete_hba(adpt_hba* pHba){	adpt_hba* p1;	adpt_hba* p2;	struct i2o_device* d;	struct i2o_device* next;	int i;	int j;	struct adpt_device* pDev;	struct adpt_device* pNext;	down(&adpt_configuration_lock);	// scsi_unregister calls our adpt_release which	// does a quiese	if(pHba->host){		free_irq(pHba->host->irq, pHba);	}	p2 = NULL;	for( p1 = hba_chain; p1; p2 = p1,p1=p1->next){		if(p1 == pHba) {			if(p2) {				p2->next = p1->next;			} else {				hba_chain = p1->next;			}			break;		}	}	hba_count--;	up(&adpt_configuration_lock);	iounmap(pHba->base_addr_virt);	if(pHba->msg_addr_virt != pHba->base_addr_virt){		iounmap(pHba->msg_addr_virt);	}	if(pHba->hrt) {		kfree(pHba->hrt);	}	if(pHba->lct){		kfree(pHba->lct);	}	if(pHba->status_block) {		kfree(pHba->status_block);	}	if(pHba->reply_pool){		kfree(pHba->reply_pool);	}	for(d = pHba->devices; d ; d = next){		next = d->next;		kfree(d);	}	for(i = 0 ; i < pHba->top_scsi_channel ; i++){		for(j = 0; j < MAX_ID; j++){			if(pHba->channel[i].device[j] != NULL){				for(pDev = pHba->channel[i].device[j]; pDev; pDev = pNext){					pNext = pDev->next_lun;					kfree(pDev);				}			}		}	}	kfree(pHba);	if(hba_count <= 0){		unregister_chrdev(DPTI_I2O_MAJOR, DPT_DRIVER);   	}}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/9c472dd9197429a37691e91c938660a062bf20b0/dpt_i2o.c/clean/drivers/scsi/dpt_i2o.c