mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 20:53:53 +08:00
staging/rdma/hfi1: Fix xmit discard error weight
Count only the errors that apply to xmit discards. Update the comment to better explain the limitations of the count. Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Dean Luick <dean.luick@intel.com> Signed-off-by: Jubin John <jubin.john@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
6b5c5213e5
commit
4c9e7aacb6
@ -5566,12 +5566,28 @@ static void handle_send_egress_err_info(struct hfi1_devdata *dd,
|
||||
int weight, i;
|
||||
|
||||
/*
|
||||
* Count all, in case multiple bits are set. Reminder:
|
||||
* since there is only one info register for many sources,
|
||||
* these may be attributed to the wrong VL if they occur
|
||||
* too close together.
|
||||
* Count all applicable bits as individual errors and
|
||||
* attribute them to the packet that triggered this handler.
|
||||
* This may not be completely accurate due to limitations
|
||||
* on the available hardware error information. There is
|
||||
* a single information register and any number of error
|
||||
* packets may have occurred and contributed to it before
|
||||
* this routine is called. This means that:
|
||||
* a) If multiple packets with the same error occur before
|
||||
* this routine is called, earlier packets are missed.
|
||||
* There is only a single bit for each error type.
|
||||
* b) Errors may not be attributed to the correct VL.
|
||||
* The driver is attributing all bits in the info register
|
||||
* to the packet that triggered this call, but bits
|
||||
* could be an accumulation of different packets with
|
||||
* different VLs.
|
||||
* c) A single error packet may have multiple counts attached
|
||||
* to it. There is no way for the driver to know if
|
||||
* multiple bits set in the info register are due to a
|
||||
* single packet or multiple packets. The driver assumes
|
||||
* multiple packets.
|
||||
*/
|
||||
weight = hweight64(info);
|
||||
weight = hweight64(info & PORT_DISCARD_EGRESS_ERRS);
|
||||
for (i = 0; i < weight; i++) {
|
||||
__count_port_discards(ppd);
|
||||
if (vl >= 0 && vl < TXE_NUM_DATA_VL)
|
||||
|
Loading…
Reference in New Issue
Block a user