mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-30 12:06:41 +07:00
[SCSI] lpfc: Fix error loading on sparc
Bug reported via SourceForge - lpfc does not load on sparc. The lpfc driver must byteswap all FCP IOCBs to recover the data into cpu native format. Also correct issue of "iotag not found" messages Signed-off-by: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
db468d108a
commit
87f6eaffd7
@ -904,6 +904,7 @@ lpfc_sli_handle_fast_ring_event(struct lpfc_hba * phba,
|
|||||||
{
|
{
|
||||||
struct lpfc_pgp *pgp = &phba->slim2p->mbx.us.s2.port[pring->ringno];
|
struct lpfc_pgp *pgp = &phba->slim2p->mbx.us.s2.port[pring->ringno];
|
||||||
IOCB_t *irsp = NULL;
|
IOCB_t *irsp = NULL;
|
||||||
|
IOCB_t *entry = NULL;
|
||||||
struct lpfc_iocbq *cmdiocbq = NULL;
|
struct lpfc_iocbq *cmdiocbq = NULL;
|
||||||
struct lpfc_iocbq rspiocbq;
|
struct lpfc_iocbq rspiocbq;
|
||||||
uint32_t status;
|
uint32_t status;
|
||||||
@ -948,7 +949,17 @@ lpfc_sli_handle_fast_ring_event(struct lpfc_hba * phba,
|
|||||||
|
|
||||||
rmb();
|
rmb();
|
||||||
while (pring->rspidx != portRspPut) {
|
while (pring->rspidx != portRspPut) {
|
||||||
irsp = (IOCB_t *) IOCB_ENTRY(pring->rspringaddr, pring->rspidx);
|
/*
|
||||||
|
* Fetch an entry off the ring and copy it into a local data
|
||||||
|
* structure. The copy involves a byte-swap since the
|
||||||
|
* network byte order and pci byte orders are different.
|
||||||
|
*/
|
||||||
|
entry = (IOCB_t *) IOCB_ENTRY(pring->rspringaddr, pring->rspidx);
|
||||||
|
lpfc_sli_pcimem_bcopy((uint32_t *) entry,
|
||||||
|
(uint32_t *) &rspiocbq.iocb,
|
||||||
|
sizeof (IOCB_t));
|
||||||
|
irsp = &rspiocbq.iocb;
|
||||||
|
|
||||||
type = lpfc_sli_iocb_cmd_type(irsp->ulpCommand & CMD_IOCB_MASK);
|
type = lpfc_sli_iocb_cmd_type(irsp->ulpCommand & CMD_IOCB_MASK);
|
||||||
pring->stats.iocb_rsp++;
|
pring->stats.iocb_rsp++;
|
||||||
rsp_cmpl++;
|
rsp_cmpl++;
|
||||||
@ -980,10 +991,6 @@ lpfc_sli_handle_fast_ring_event(struct lpfc_hba * phba,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
rspiocbq.iocb.un.ulpWord[4] = irsp->un.ulpWord[4];
|
|
||||||
rspiocbq.iocb.ulpStatus = irsp->ulpStatus;
|
|
||||||
rspiocbq.iocb.ulpContext = irsp->ulpContext;
|
|
||||||
rspiocbq.iocb.ulpIoTag = irsp->ulpIoTag;
|
|
||||||
cmdiocbq = lpfc_sli_txcmpl_ring_iotag_lookup(phba,
|
cmdiocbq = lpfc_sli_txcmpl_ring_iotag_lookup(phba,
|
||||||
pring,
|
pring,
|
||||||
&rspiocbq);
|
&rspiocbq);
|
||||||
|
Loading…
Reference in New Issue
Block a user