mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2026-01-06 19:02:48 +00:00
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>
This commit is contained in:
commit
9abb593e59
@ -45,11 +45,12 @@
|
||||
#include <linux/interrupt.h>
|
||||
struct device_attribute;
|
||||
/*The limit of outstanding scsi command that firmware can handle*/
|
||||
#define ARCMSR_NAME "arcmsr"
|
||||
#define ARCMSR_MAX_FREECCB_NUM 1024
|
||||
#define ARCMSR_MAX_OUTSTANDING_CMD 1024
|
||||
#define ARCMSR_DEFAULT_OUTSTANDING_CMD 128
|
||||
#define ARCMSR_MIN_OUTSTANDING_CMD 32
|
||||
#define ARCMSR_DRIVER_VERSION "v1.50.00.05-20210429"
|
||||
#define ARCMSR_DRIVER_VERSION "v1.50.00.13-20230206"
|
||||
#define ARCMSR_SCSI_INITIATOR_ID 255
|
||||
#define ARCMSR_MAX_XFER_SECTORS 512
|
||||
#define ARCMSR_MAX_XFER_SECTORS_B 4096
|
||||
|
||||
@ -153,6 +153,7 @@ static int arcmsr_adjust_disk_queue_depth(struct scsi_device *sdev, int queue_de
|
||||
|
||||
static struct scsi_host_template arcmsr_scsi_host_template = {
|
||||
.module = THIS_MODULE,
|
||||
.proc_name = ARCMSR_NAME,
|
||||
.name = "Areca SAS/SATA RAID driver",
|
||||
.info = arcmsr_info,
|
||||
.queuecommand = arcmsr_queue_command,
|
||||
@ -996,6 +997,8 @@ static int arcmsr_set_dma_mask(struct AdapterControlBlock *acb)
|
||||
if (((acb->adapter_type == ACB_ADAPTER_TYPE_A) && !dma_mask_64) ||
|
||||
dma_set_mask(&pcidev->dev, DMA_BIT_MASK(64)))
|
||||
goto dma32;
|
||||
if (acb->adapter_type <= ACB_ADAPTER_TYPE_B)
|
||||
return 0;
|
||||
if (dma_set_coherent_mask(&pcidev->dev, DMA_BIT_MASK(64)) ||
|
||||
dma_set_mask_and_coherent(&pcidev->dev, DMA_BIT_MASK(64))) {
|
||||
printk("arcmsr: set DMA 64 mask failed\n");
|
||||
@ -1299,20 +1302,13 @@ static uint8_t arcmsr_abort_allcmd(struct AdapterControlBlock *acb)
|
||||
return rtnval;
|
||||
}
|
||||
|
||||
static void arcmsr_pci_unmap_dma(struct CommandControlBlock *ccb)
|
||||
{
|
||||
struct scsi_cmnd *pcmd = ccb->pcmd;
|
||||
|
||||
scsi_dma_unmap(pcmd);
|
||||
}
|
||||
|
||||
static void arcmsr_ccb_complete(struct CommandControlBlock *ccb)
|
||||
{
|
||||
struct AdapterControlBlock *acb = ccb->acb;
|
||||
struct scsi_cmnd *pcmd = ccb->pcmd;
|
||||
unsigned long flags;
|
||||
atomic_dec(&acb->ccboutstandingcount);
|
||||
arcmsr_pci_unmap_dma(ccb);
|
||||
scsi_dma_unmap(ccb->pcmd);
|
||||
ccb->startdone = ARCMSR_CCB_DONE;
|
||||
spin_lock_irqsave(&acb->ccblist_lock, flags);
|
||||
list_add_tail(&ccb->list, &acb->ccb_free_list);
|
||||
@ -1596,7 +1592,7 @@ static void arcmsr_remove_scsi_devices(struct AdapterControlBlock *acb)
|
||||
ccb = acb->pccb_pool[i];
|
||||
if (ccb->startdone == ARCMSR_CCB_START) {
|
||||
ccb->pcmd->result = DID_NO_CONNECT << 16;
|
||||
arcmsr_pci_unmap_dma(ccb);
|
||||
scsi_dma_unmap(ccb->pcmd);
|
||||
scsi_done(ccb->pcmd);
|
||||
}
|
||||
}
|
||||
@ -2259,8 +2255,11 @@ static void arcmsr_iop2drv_data_wrote_handle(struct AdapterControlBlock *acb)
|
||||
|
||||
spin_lock_irqsave(&acb->rqbuffer_lock, flags);
|
||||
prbuffer = arcmsr_get_iop_rqbuffer(acb);
|
||||
buf_empty_len = (acb->rqbuf_putIndex - acb->rqbuf_getIndex - 1) &
|
||||
(ARCMSR_MAX_QBUFFER - 1);
|
||||
if (acb->rqbuf_putIndex >= acb->rqbuf_getIndex) {
|
||||
buf_empty_len = (ARCMSR_MAX_QBUFFER - 1) -
|
||||
(acb->rqbuf_putIndex - acb->rqbuf_getIndex);
|
||||
} else
|
||||
buf_empty_len = acb->rqbuf_getIndex - acb->rqbuf_putIndex - 1;
|
||||
if (buf_empty_len >= readl(&prbuffer->data_len)) {
|
||||
if (arcmsr_Read_iop_rqbuffer_data(acb, prbuffer) == 0)
|
||||
acb->acb_flags |= ACB_F_IOPDATA_OVERFLOW;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user