Subject: Update Emulex lpfc driver to 8.2.8.9 From: Jamie Wellnitz Date: Wed Dec 3 09:06:44 2008 +0100: References: bnc#420767 Changes from 8.2.8.7 to 8.2.8.9: * Changed version number to 8.2.8.9 * Remove unused defines from lpfc_auth_access.h * Fix firmware dump on CNAs (CR 86157) * Changed version number to 8.2.8.8 * Fixed wrong number of bytes copied reported to applications (CR 85743) * Fixed potential spin_lock problem when HBA is in MSI-X mode Signed-off-by: Jamie Wellnitz Signed-off-by: Hannes Reinecke diff --git a/drivers/scsi/lpfc/lpfc_auth_access.h b/drivers/scsi/lpfc/lpfc_auth_access.h index be7525f..0aadcd3 100644 --- a/drivers/scsi/lpfc/lpfc_auth_access.h +++ b/drivers/scsi/lpfc/lpfc_auth_access.h @@ -1,7 +1,7 @@ /******************************************************************* * This file is part of the Emulex Linux Device Driver for * * Fibre Channel Host Bus Adapters. * - * Copyright (C) 2006-2007 Emulex. All rights reserved. * + * Copyright (C) 2006-2008 Emulex. All rights reserved. * * EMULEX and SLI are trademarks of Emulex. * * www.emulex.com * * * @@ -18,26 +18,6 @@ * included with this package. * *******************************************************************/ -#define to_fc_internal(tmpl) container_of(tmpl, struct fc_internal, t) - -/* scsi_nl_hdr->version value */ -#define SCSI_NL_VERSION 1 - -/* scsi_nl_hdr->magic value */ -#define SCSI_NL_MAGIC 0xA1B2 - -/* scsi_nl_hdr->transport value */ -#define SCSI_NL_TRANSPORT 0 -#define SCSI_NL_TRANSPORT_FC 1 -#define SCSI_NL_MAX_TRANSPORTS 2 - -#define FC_NL_GROUP_CNT 0 - - /* Note: when specifying vendor_id to fc_host_post_vendor_event() - * be sure to read the Vendor Type and ID formatting requirements - * specified in scsi_netlink.h - */ - #define FC_SC_REQ_TIMEOUT (60*HZ) enum fc_sc_service_state { diff --git a/drivers/scsi/lpfc/lpfc_mbox.c b/drivers/scsi/lpfc/lpfc_mbox.c index 84619ed..b5c7876 100644 --- a/drivers/scsi/lpfc/lpfc_mbox.c +++ b/drivers/scsi/lpfc/lpfc_mbox.c @@ -1349,10 +1349,12 @@ lpfc_mbox_get(struct lpfc_hba * phba) void lpfc_mbox_cmpl_put(struct lpfc_hba * phba, LPFC_MBOXQ_t * mbq) { + unsigned long iflag; + /* This function expects to be called from interrupt context */ - spin_lock(&phba->hbalock); + spin_lock_irqsave(&phba->hbalock, iflag); list_add_tail(&mbq->list, &phba->sli.mboxq_cmpl); - spin_unlock(&phba->hbalock); + spin_unlock_irqrestore(&phba->hbalock, iflag); return; } diff --git a/drivers/scsi/lpfc/lpfc_menlo.c b/drivers/scsi/lpfc/lpfc_menlo.c index 4f3b332..12fd7fe 100644 --- a/drivers/scsi/lpfc/lpfc_menlo.c +++ b/drivers/scsi/lpfc/lpfc_menlo.c @@ -1064,13 +1064,22 @@ lpfc_menlo_read(struct lpfc_hba *phba, char *buf, loff_t off, size_t count, } genreq->offset += count; - - if (genreq->offset >= sysfs_menlo->cmdhdr.rspsize) { + if (genreq->offset >= (genreq->rspiocbq->iocb.un.ulpWord[0] & + 0x00ffffff)) { lpfc_printf_log(phba, KERN_INFO, LOG_LIBDFC, - "1222 menlo_read: done off %d rc=%d" - " cnt %d rsp_code %x\n", - (int)off, rc, (int)count,*((uint32_t *)buf)); - rc = count; + "1222 menlo_read: done off %d genoff:%d rspsz:%d " + "rc=%d cnt %d rsp_code %x Word0:%x\n", + (int)off, (int)genreq->offset, + sysfs_menlo->cmdhdr.rspsize, rc, (int)count, + *((uint32_t *)buf), + genreq->rspiocbq->iocb.un.ulpWord[0]); + + if ((genreq->rspiocbq->iocb.un.ulpWord[0] & 0x00ffffff) + < sysfs_menlo->cmdhdr.rspsize) + rc = (genreq->rspiocbq->iocb.un.ulpWord[0] & 0x00ffffff) + + count - genreq->offset; + else + rc = count; goto lpfc_menlo_read_err_exit; } diff --git a/drivers/scsi/lpfc/lpfc_version.h b/drivers/scsi/lpfc/lpfc_version.h index 16626a5..26f6760 100644 --- a/drivers/scsi/lpfc/lpfc_version.h +++ b/drivers/scsi/lpfc/lpfc_version.h @@ -18,7 +18,7 @@ * included with this package. * *******************************************************************/ -#define LPFC_DRIVER_VERSION "8.2.8.7" +#define LPFC_DRIVER_VERSION "8.2.8.9" #define LPFC_DRIVER_NAME "lpfc" #define LPFC_SP_DRIVER_HANDLER_NAME "lpfc:sp"