diff options
Diffstat (limited to 'drivers/scsi/pm8001/pm8001_init.c')
| -rw-r--r-- | drivers/scsi/pm8001/pm8001_init.c | 14 | 
1 files changed, 13 insertions, 1 deletions
| diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c index 47db7e0beae6..bed8cc125544 100644 --- a/drivers/scsi/pm8001/pm8001_init.c +++ b/drivers/scsi/pm8001/pm8001_init.c @@ -107,7 +107,7 @@ static struct scsi_host_template pm8001_sht = {  #ifdef CONFIG_COMPAT  	.compat_ioctl		= sas_ioctl,  #endif -	.shost_attrs		= pm8001_host_attrs, +	.shost_groups		= pm8001_host_groups,  	.track_queue_depth	= 1,  }; @@ -128,6 +128,7 @@ static struct sas_domain_function_template pm8001_transport_ops = {  	.lldd_I_T_nexus_reset   = pm8001_I_T_nexus_reset,  	.lldd_lu_reset		= pm8001_lu_reset,  	.lldd_query_task	= pm8001_query_task, +	.lldd_port_formed	= pm8001_port_formed,  };  /** @@ -1198,6 +1199,7 @@ pm8001_init_ccb_tag(struct pm8001_hba_info *pm8001_ha, struct Scsi_Host *shost,  		goto err_out;  	/* Memory region for ccb_info*/ +	pm8001_ha->ccb_count = ccb_count;  	pm8001_ha->ccb_info =  		kcalloc(ccb_count, sizeof(struct pm8001_ccb_info), GFP_KERNEL);  	if (!pm8001_ha->ccb_info) { @@ -1259,6 +1261,16 @@ static void pm8001_pci_remove(struct pci_dev *pdev)  			tasklet_kill(&pm8001_ha->tasklet[j]);  #endif  	scsi_host_put(pm8001_ha->shost); + +	for (i = 0; i < pm8001_ha->ccb_count; i++) { +		dma_free_coherent(&pm8001_ha->pdev->dev, +			sizeof(struct pm8001_prd) * PM8001_MAX_DMA_SG, +			pm8001_ha->ccb_info[i].buf_prd, +			pm8001_ha->ccb_info[i].ccb_dma_handle); +	} +	kfree(pm8001_ha->ccb_info); +	kfree(pm8001_ha->devices); +  	pm8001_free(pm8001_ha);  	kfree(sha->sas_phy);  	kfree(sha->sas_port); |