mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 23:14:31 +08:00
IB/hfi1: Fix AHG KDETH Intr shift
In the set_txreq_header_ahg(), The KDETH Intr bit is obtained from the header in the user sdma request using a KDETH_GET shift and mask macro. This value is then futher right shifted by 16 causing us to lose the value i.e it is shifted to zero, leading to the following smatch warning: drivers/infiniband/hw/hfi1/user_sdma.c:1482 set_txreq_header_ahg() warn: mask and shift to zero The Intr bit should be left shifted into its correct position in the KDETH header before the AHG update. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Reviewed-by: Mitko Haralanov <mitko.haralanov@intel.com> Reviewed-by: Harish Chegondi <harish.chegondi@intel.com> Signed-off-by: Jubin John <jubin.john@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
3e6c3b0fd5
commit
af53493916
@ -114,6 +114,8 @@ MODULE_PARM_DESC(sdma_comp_size, "Size of User SDMA completion ring. Default: 12
|
||||
#define KDETH_HCRC_LOWER_SHIFT 24
|
||||
#define KDETH_HCRC_LOWER_MASK 0xff
|
||||
|
||||
#define AHG_KDETH_INTR_SHIFT 12
|
||||
|
||||
#define PBC2LRH(x) ((((x) & 0xfff) << 2) - 4)
|
||||
#define LRH2PBC(x) ((((x) >> 2) + 1) & 0xfff)
|
||||
|
||||
@ -1480,7 +1482,8 @@ static int set_txreq_header_ahg(struct user_sdma_request *req,
|
||||
/* Clear KDETH.SH on last packet */
|
||||
if (unlikely(tx->flags & TXREQ_FLAGS_REQ_LAST_PKT)) {
|
||||
val |= cpu_to_le16(KDETH_GET(hdr->kdeth.ver_tid_offset,
|
||||
INTR) >> 16);
|
||||
INTR) <<
|
||||
AHG_KDETH_INTR_SHIFT);
|
||||
val &= cpu_to_le16(~(1U << 13));
|
||||
AHG_HEADER_SET(req->ahg, diff, 7, 16, 14, val);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user