[PATCH] lpfc: Fix dma virtual address ptr assignment in bsg

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



lpfc_bsg_ct_unsol_event routine acts assigns a ct_request to the
wrong structure address, resulting in a bad address that results
in bsg related timeouts.

Correct the ct_request assignment to use the kernel virtual buffer
address (not the control structure address).

Co-developed-by: Justin Tee <justin.tee@xxxxxxxxxxxx>
Signed-off-by: Justin Tee <justin.tee@xxxxxxxxxxxx>
Signed-off-by: James Smart <jsmart2021@xxxxxxxxx>

Notes:
   ECD submit header:

                ****************************************

    COMMIT-TITLE: Fix loopback test failure on saturn
    COMMIT: r64560
    COMMIT-BZ: 225555
    COMMIT-QC:

r64560 | vg888570 | 2019-04-26 09:12:33 -0700 (Fri, 26 Apr 2019) | 51 lines

Fix loopback test failure on saturn
Bugs: 225555

Reviewers: jinfante pely rkennedy hpaidakul

Symptoms:
The loopback tests started failing on saturn cards

Cause:
The lpfc_bsg_ct_unsol_event() is broken during
E2E code changes. This routine acted on a wrong ct_request
pointer causing the ct_evt_waiters to timeout.

Fix:
Assign a correct virtual addr for ct_request, so that
the driver wakes up the matching waiter of the event.

Notes:

Unit Testing:
Tested on Saturn and G5 presented on the system

Saturn:
hbacmd loopback 10:00:00:00:c9:cd:ce:50 1 20 1

Test to be run: Internal Loopback
Test runs with default test pattern

Loopback test status:
Test pending. Polling for results....
Test running....
Loopback Test Succeeded; cycles complete = 20; time to execute = 858 ms

G5:
 hbacmd loopback 10:00:00:90:fa:73:93:9c 1 10 1

Test to be run: Internal Loopback
Test runs with default test pattern

Loopback test status:
Test pending. Polling for results....
Test running.............
Loopback Test Succeeded; cycles complete = 10; time to execute = 5230 ms

System Testing:

Review_ID: http://cmengapps1.lvn.broadcom.net/r/29471/
---
 drivers/scsi/lpfc/lpfc_bsg.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_bsg.c b/drivers/scsi/lpfc/lpfc_bsg.c
index c2776b88d493..38cfe1bc6a4d 100644
--- a/drivers/scsi/lpfc/lpfc_bsg.c
+++ b/drivers/scsi/lpfc/lpfc_bsg.c
@@ -934,7 +934,7 @@ lpfc_bsg_ct_unsol_event(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
 	INIT_LIST_HEAD(&head);
 	list_add_tail(&head, &piocbq->list);
 
-	ct_req = (struct lpfc_sli_ct_request *)bdeBuf1;
+	ct_req = (struct lpfc_sli_ct_request *)bdeBuf1->virt;
 	evt_req_id = ct_req->FsType;
 	cmd = ct_req->CommandResponse.bits.CmdRsp;
 
-- 
2.26.2




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux