lkml.org 
[lkml]   [2014]   [Sep]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v3 16/17] arcmsr: support new adapter ARC12x4 series
    From
    Date
    On Thu, 2014-09-11 at 16:21 +0200, Tomas Henzl wrote:
    > On 09/11/2014 05:59 AM, Ching Huang wrote:
    > > On Wed, 2014-09-10 at 11:58 +0200, Tomas Henzl wrote:
    > >> On 09/09/2014 06:30 PM, Christoph Hellwig wrote:
    > >>> Ching,
    > >>>
    > >>> do you have a chance to address Thomas second concern below? As
    > >>> far as I can tell (Thomas, please correct me) that's the last
    > >>> outstanding concern, and I'd really like to merge the arcmsr updates
    > >>> for the Linux 3.18 merge window.
    > >> Correct, still awaiting a response.
    > > Christoph, Tomas,
    > >
    > > Sorry for the late reply.
    > >
    > > I think I misunderstand Tomas' meaning.
    > > The spin lock in arcmsr_hbaD_polling_ccbdone() is necessary to protect doneq_index and have to be modified as following.
    >
    > OK, so you are going to repost 16/17 ? If so, please describe all changes you'll do, in that new post.
    >
    By previous review, I will post two patches.
    One for 13/17 and another for 16/17.
    These patches are relative to http://git.infradead.org/users/hch/scsi-queue.git/tree/arcmsr-for-3.18:/drivers/scsi/arcmsr
    > >
    > > static int arcmsr_hbaD_polling_ccbdone(struct AdapterControlBlock *acb,
    > > struct CommandControlBlock *poll_ccb)
    > > {
    > > bool error;
    > > uint32_t poll_ccb_done = 0, poll_count = 0, flag_ccb, ccb_cdb_phy;
    > > int rtn, doneq_index, index_stripped, outbound_write_pointer, toggle;
    > > unsigned long flags;
    > > struct ARCMSR_CDB *arcmsr_cdb;
    > > struct CommandControlBlock *pCCB;
    > > struct MessageUnit_D *pmu = acb->pmuD;
    > >
    > > polling_hbaD_ccb_retry:
    > > poll_count++;
    > > while (1) {
    > > spin_lock_irqsave(&acb->doneq_lock, flags);
    > > outbound_write_pointer = pmu->done_qbuffer[0].addressLow + 1;
    > > doneq_index = pmu->doneq_index;
    > > if ((outbound_write_pointer & 0xFFF) == (doneq_index & 0xFFF)) {
    > > spin_unlock_irqrestore(&acb->doneq_lock, flags);
    > > if (poll_ccb_done) {
    > > rtn = SUCCESS;
    > > break;
    > > } else {
    > > msleep(25);
    > > if (poll_count > 40) {
    > > rtn = FAILED;
    > > break;
    > > }
    > > goto polling_hbaD_ccb_retry;
    > > }
    > > }
    > > toggle = doneq_index & 0x4000;
    > > index_stripped = (doneq_index & 0xFFF) + 1;
    > > index_stripped %= ARCMSR_MAX_ARC1214_DONEQUEUE;
    > > pmu->doneq_index = index_stripped ? (index_stripped | toggle) :
    > > ((index_stripped + 1) | (toggle ^ 0x4000));
    > > spin_unlock_irqrestore(&acb->doneq_lock, flags);
    > > doneq_index = pmu->doneq_index;
    > > flag_ccb = pmu->done_qbuffer[doneq_index & 0xFFF].addressLow;
    > > ccb_cdb_phy = (flag_ccb & 0xFFFFFFF0);
    > > arcmsr_cdb = (struct ARCMSR_CDB *)(acb->vir2phy_offset +
    > > ccb_cdb_phy);
    > > pCCB = container_of(arcmsr_cdb, struct CommandControlBlock,
    > > arcmsr_cdb);
    > > poll_ccb_done |= (pCCB == poll_ccb) ? 1 : 0;
    > > if ((pCCB->acb != acb) ||
    > > (pCCB->startdone != ARCMSR_CCB_START)) {
    > > if (pCCB->startdone == ARCMSR_CCB_ABORTED) {
    > > pr_notice("arcmsr%d: scsi id = %d "
    > > "lun = %d ccb = '0x%p' poll command "
    > > "abort successfully\n"
    > > , acb->host->host_no
    > > , pCCB->pcmd->device->id
    > > , (u32)pCCB->pcmd->device->lun
    > > , pCCB);
    > > pCCB->pcmd->result = DID_ABORT << 16;
    > > arcmsr_ccb_complete(pCCB);
    > > continue;
    > > }
    > > pr_notice("arcmsr%d: polling an illegal "
    > > "ccb command done ccb = '0x%p' "
    > > "ccboutstandingcount = %d\n"
    > > , acb->host->host_no
    > > , pCCB
    > > , atomic_read(&acb->ccboutstandingcount));
    > > continue;
    > > }
    > > error = (flag_ccb & ARCMSR_CCBREPLY_FLAG_ERROR_MODE1)
    > > ? true : false;
    > > arcmsr_report_ccb_state(acb, pCCB, error);
    > > }
    > > return rtn;
    > > }
    > >
    > >
    > >>> --
    > >>> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
    > >>> the body of a message to majordomo@vger.kernel.org
    > >>> More majordomo info at http://vger.kernel.org/majordomo-info.html
    > >
    > > --
    > > To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
    > > the body of a message to majordomo@vger.kernel.org
    > > More majordomo info at http://vger.kernel.org/majordomo-info.html
    >




    \
     
     \ /
      Last update: 2014-09-12 06:01    [W:4.459 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site