On Mon, Dec 02, 2019 at 08:40:17AM -0800, Bart Van Assche wrote: > On 11/11/19 3:28 AM, Roman Bolshakov wrote: > > On Fri, Nov 08, 2019 at 08:21:35PM -0800, Bart Van Assche wrote: > > > The commit mentioned in the subject breaks point-to-point mode for at least > > > the QLE2562 HBA. Restore point-to-point support by reverting that commit. > > > > > > Cc: Roman Bolshakov <r.bolshakov@xxxxxxxxx> > > > Cc: Quinn Tran <qutran@xxxxxxxxxxx> > > > Cc: Himanshu Madhani <hmadhani@xxxxxxxxxxx> > > > Fixes: 0aabb6b699f7 ("scsi: qla2xxx: Fix Nport ID display value") > Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> > > > --- > > > drivers/scsi/qla2xxx/qla_iocb.c | 7 +++---- > > > 1 file changed, 3 insertions(+), 4 deletions(-) > > > > > > diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c > > > index b25f87ff8cde..cfd686fab1b1 100644 > > > --- a/drivers/scsi/qla2xxx/qla_iocb.c > > > +++ b/drivers/scsi/qla2xxx/qla_iocb.c > > > @@ -2656,10 +2656,9 @@ qla24xx_els_logo_iocb(srb_t *sp, struct els_entry_24xx *els_iocb) > > > els_iocb->port_id[0] = sp->fcport->d_id.b.al_pa; > > > els_iocb->port_id[1] = sp->fcport->d_id.b.area; > > > els_iocb->port_id[2] = sp->fcport->d_id.b.domain; > > > - /* For SID the byte order is different than DID */ > > > - els_iocb->s_id[1] = vha->d_id.b.al_pa; > > > - els_iocb->s_id[2] = vha->d_id.b.area; > > > - els_iocb->s_id[0] = vha->d_id.b.domain; > > > + els_iocb->s_id[0] = vha->d_id.b.al_pa; > > > + els_iocb->s_id[1] = vha->d_id.b.area; > > > + els_iocb->s_id[2] = vha->d_id.b.domain; > > > if (elsio->u.els_logo.els_cmd == ELS_DCMD_PLOGI) { > > > els_iocb->control_flags = 0; > > > > The original commit definitely fixes P2P mode for QLE2700, the lowest > > byte is domain, followed by AL_PA, followed by area. However the > > fields are reserved in ELS IOCB for QLE2500, according to FW spec. > > > > Perhaps we should have a switch here for 2500 and the other one for > > 2600/2700? Or, we should only set the fields only for QLE2700, to comply > > with both specs. > > Hi Roman, > > How about the patch below? Leaving out the els_iocb->s_id[] initialization > is not sufficient on 2500 series adapters to restore point-to-point mode. > The patch below works fine on my setup. > > Thanks, > > Bart. > > diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c > index b25f87ff8cde..e2e91b3f2e65 100644 > --- a/drivers/scsi/qla2xxx/qla_iocb.c > +++ b/drivers/scsi/qla2xxx/qla_iocb.c > @@ -2656,10 +2656,16 @@ qla24xx_els_logo_iocb(srb_t *sp, struct els_entry_24xx *els_iocb) > els_iocb->port_id[0] = sp->fcport->d_id.b.al_pa; > els_iocb->port_id[1] = sp->fcport->d_id.b.area; > els_iocb->port_id[2] = sp->fcport->d_id.b.domain; > - /* For SID the byte order is different than DID */ > - els_iocb->s_id[1] = vha->d_id.b.al_pa; > - els_iocb->s_id[2] = vha->d_id.b.area; > - els_iocb->s_id[0] = vha->d_id.b.domain; > + if (IS_QLA23XX(vha->hw) || IS_QLA24XX(vha->hw) || IS_QLA25XX(vha->hw)) { > + els_iocb->s_id[0] = vha->d_id.b.al_pa; > + els_iocb->s_id[1] = vha->d_id.b.area; > + els_iocb->s_id[2] = vha->d_id.b.domain; > + } else { > + /* For SID the byte order is different than DID */ > + els_iocb->s_id[1] = vha->d_id.b.al_pa; > + els_iocb->s_id[2] = vha->d_id.b.area; > + els_iocb->s_id[0] = vha->d_id.b.domain; > + } > > if (elsio->u.els_logo.els_cmd == ELS_DCMD_PLOGI) { > els_iocb->control_flags = 0; Hi Bart, I'm fine as long as it works for old and new HBAs. I don't have docs to 2300/2400 series and the HBAs. Are you sure it follows the same S_ID order as 2500? Regardless of that, it should work for the last 4 series of the HBAs, Reviewed-by: Roman Bolshakov <r.bolshakov@xxxxxxxxx> Thanks, Roman