Skip to content

Commit 9abb593

Browse files
Merge patch series "arcmsr fixes"
Ching Huang <ching2048@areca.com.tw> says: The following patches were made over mkp's 6.4/scsi-staging This series comtain some fixes: - Deprecate arcmsr_pci_unmap_dma() - Fix ADAPTER_TYPE_B 64-bit DMA compatibility issue - Fix reading buffer empty length error - Add driver proc_name - Update driver's version to v1.50.00.13-20230206 Link: https://lore.kernel.org/r/6f3eb04dbe89d2b9f239600dd2c575227f3c0afc.camel@areca.com.tw Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2 parents c45b380 + 8d4cce5 commit 9abb593

2 files changed

Lines changed: 12 additions & 12 deletions

File tree

drivers/scsi/arcmsr/arcmsr.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,12 @@
4545
#include <linux/interrupt.h>
4646
struct device_attribute;
4747
/*The limit of outstanding scsi command that firmware can handle*/
48+
#define ARCMSR_NAME "arcmsr"
4849
#define ARCMSR_MAX_FREECCB_NUM 1024
4950
#define ARCMSR_MAX_OUTSTANDING_CMD 1024
5051
#define ARCMSR_DEFAULT_OUTSTANDING_CMD 128
5152
#define ARCMSR_MIN_OUTSTANDING_CMD 32
52-
#define ARCMSR_DRIVER_VERSION "v1.50.00.05-20210429"
53+
#define ARCMSR_DRIVER_VERSION "v1.50.00.13-20230206"
5354
#define ARCMSR_SCSI_INITIATOR_ID 255
5455
#define ARCMSR_MAX_XFER_SECTORS 512
5556
#define ARCMSR_MAX_XFER_SECTORS_B 4096

drivers/scsi/arcmsr/arcmsr_hba.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ static int arcmsr_adjust_disk_queue_depth(struct scsi_device *sdev, int queue_de
153153

154154
static struct scsi_host_template arcmsr_scsi_host_template = {
155155
.module = THIS_MODULE,
156+
.proc_name = ARCMSR_NAME,
156157
.name = "Areca SAS/SATA RAID driver",
157158
.info = arcmsr_info,
158159
.queuecommand = arcmsr_queue_command,
@@ -996,6 +997,8 @@ static int arcmsr_set_dma_mask(struct AdapterControlBlock *acb)
996997
if (((acb->adapter_type == ACB_ADAPTER_TYPE_A) && !dma_mask_64) ||
997998
dma_set_mask(&pcidev->dev, DMA_BIT_MASK(64)))
998999
goto dma32;
1000+
if (acb->adapter_type <= ACB_ADAPTER_TYPE_B)
1001+
return 0;
9991002
if (dma_set_coherent_mask(&pcidev->dev, DMA_BIT_MASK(64)) ||
10001003
dma_set_mask_and_coherent(&pcidev->dev, DMA_BIT_MASK(64))) {
10011004
printk("arcmsr: set DMA 64 mask failed\n");
@@ -1299,20 +1302,13 @@ static uint8_t arcmsr_abort_allcmd(struct AdapterControlBlock *acb)
12991302
return rtnval;
13001303
}
13011304

1302-
static void arcmsr_pci_unmap_dma(struct CommandControlBlock *ccb)
1303-
{
1304-
struct scsi_cmnd *pcmd = ccb->pcmd;
1305-
1306-
scsi_dma_unmap(pcmd);
1307-
}
1308-
13091305
static void arcmsr_ccb_complete(struct CommandControlBlock *ccb)
13101306
{
13111307
struct AdapterControlBlock *acb = ccb->acb;
13121308
struct scsi_cmnd *pcmd = ccb->pcmd;
13131309
unsigned long flags;
13141310
atomic_dec(&acb->ccboutstandingcount);
1315-
arcmsr_pci_unmap_dma(ccb);
1311+
scsi_dma_unmap(ccb->pcmd);
13161312
ccb->startdone = ARCMSR_CCB_DONE;
13171313
spin_lock_irqsave(&acb->ccblist_lock, flags);
13181314
list_add_tail(&ccb->list, &acb->ccb_free_list);
@@ -1596,7 +1592,7 @@ static void arcmsr_remove_scsi_devices(struct AdapterControlBlock *acb)
15961592
ccb = acb->pccb_pool[i];
15971593
if (ccb->startdone == ARCMSR_CCB_START) {
15981594
ccb->pcmd->result = DID_NO_CONNECT << 16;
1599-
arcmsr_pci_unmap_dma(ccb);
1595+
scsi_dma_unmap(ccb->pcmd);
16001596
scsi_done(ccb->pcmd);
16011597
}
16021598
}
@@ -2259,8 +2255,11 @@ static void arcmsr_iop2drv_data_wrote_handle(struct AdapterControlBlock *acb)
22592255

22602256
spin_lock_irqsave(&acb->rqbuffer_lock, flags);
22612257
prbuffer = arcmsr_get_iop_rqbuffer(acb);
2262-
buf_empty_len = (acb->rqbuf_putIndex - acb->rqbuf_getIndex - 1) &
2263-
(ARCMSR_MAX_QBUFFER - 1);
2258+
if (acb->rqbuf_putIndex >= acb->rqbuf_getIndex) {
2259+
buf_empty_len = (ARCMSR_MAX_QBUFFER - 1) -
2260+
(acb->rqbuf_putIndex - acb->rqbuf_getIndex);
2261+
} else
2262+
buf_empty_len = acb->rqbuf_getIndex - acb->rqbuf_putIndex - 1;
22642263
if (buf_empty_len >= readl(&prbuffer->data_len)) {
22652264
if (arcmsr_Read_iop_rqbuffer_data(acb, prbuffer) == 0)
22662265
acb->acb_flags |= ACB_F_IOPDATA_OVERFLOW;

0 commit comments

Comments
 (0)