On Wed, 2019-08-14 at 08:24 +0200, Hannes Reinecke wrote:
> On 8/13/19 10:31 PM, Martin Wilck wrote:
> > From: Martin Wilck <mwi...@suse.com>
> > 
> > Reset ha->rce, ha->eft and the respective dma fields if
> > the buffers aren't mapped for some reason. Also, treat
> > both failure cases (allocation and initialization failure)
> > equally. The next patch modifies the failure behavior
> > slightly again.
> > 
> > Fixes: ad0a0b01f088 "scsi: qla2xxx: Fix Firmware dump size for
> > Extended
> >  login and Exchange Offload"
> > Fixes: a28d9e4ef997 "scsi: qla2xxx: Add support for multiple fwdump
> >  templates/segments"
> > Cc: Joe Carnuccio <joe.carnuc...@cavium.com>
> > Cc: Quinn Tran <qut...@marvell.com>
> > Cc: Himanshu Madhani <hmadh...@marvell.com>
> > Cc: Bart Van Assche <bvanass...@acm.org>
> > Signed-off-by: Martin Wilck <mwi...@suse.com>
> > ---
> >  drivers/scsi/qla2xxx/qla_init.c | 10 ++++++++++
> >  1 file changed, 10 insertions(+)
> > 
> > diff --git a/drivers/scsi/qla2xxx/qla_init.c
> > b/drivers/scsi/qla2xxx/qla_init.c
> > index 6dd68be..ca9c3f3 100644
> > --- a/drivers/scsi/qla2xxx/qla_init.c
> > +++ b/drivers/scsi/qla2xxx/qla_init.c
> > @@ -3063,6 +3063,8 @@ qla2x00_alloc_offload_mem(scsi_qla_host_t
> > *vha)
> >                     ql_log(ql_log_warn, vha, 0x00be,
> >                         "Unable to allocate (%d KB) for FCE.\n",
> >                         FCE_SIZE / 1024);
> > +                   ha->fce_dma = 0;
> > +                   ha->fce = NULL;
> >                     goto try_eft;
> >             }
> >  
> Actually, I would set this earlier here:
> 
>               if (ha->fce)
>                       dma_free_coherent(&ha->pdev->dev,
>                           FCE_SIZE, ha->fce, ha->fce_dma);
> 
> which is the logical place to clear 'ha->fce' and 'ha->fce_dma' IMO.

Fine with me.

> Alsoe there is this call later on:
> 
>               rval = qla2x00_enable_fce_trace(vha, tc_dma,
> FCE_NUM_BUFFERS,
>                   ha->fce_mb, &ha->fce_bufs);
>               if (rval) {
>                       ql_log(ql_log_warn, vha, 0x00bf,
>                           "Unable to initialize FCE (%d).\n", rval);
>                       dma_free_coherent(&ha->pdev->dev, FCE_SIZE, tc,
>                           tc_dma);
>                       ha->flags.fce_enabled = 0;
>                       goto try_eft;
>               }
> 
> which also needs to be protected.

Right.

> > @@ -3111,9 +3113,12 @@ qla2x00_alloc_offload_mem(scsi_qla_host_t
> > *vha)
> >  
> >             ha->eft_dma = tc_dma;
> >             ha->eft = tc;
> > +           return;
> >     }
> >  
> >  eft_err:
> > +   ha->eft = NULL;
> > +   ha->eft_dma = 0;
> >     return;
> >  }
> >  
> I wonder why this is even there.
> 
> Right at the start we have:
>       if (ha->eft) {
>               ql_dbg(ql_dbg_init, vha, 0x00bd,
>                   "%s: Offload Mem is already allocated.\n",
>                   __func__);
>               return;
>       }
> 
> IE the second half of this function really should be unreachable
> code.

This check is only in qla2x00_alloc_offload_mem(), not in
qla2x00_alloc_fw_dump(), where EFT allocation is attempted again (and 
qla2x00_alloc_offload_mem() is called first). It looks like an
oversight, indeed. IMO this part of the code needs cleanup; for now
I tried to keep the patches small.

> Himanshu?
> 

Thanks,
Martin

Reply via email to