在 2018/7/5 18:34, kbuild test robot 写道: > Hi Lijun, > > I love your patch! Perhaps something to improve: > > [auto build test WARNING on rdma/for-next] > [also build test WARNING on v4.18-rc3 next-20180704] > [cannot apply to linus/master linux-sof-driver/master] > [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] > > url: https://github.com/0day-ci/linux/commits/Lijun-Ou/Four-cmd-queues-support-and-sparse-checking/20180705-145936 > base: https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git for-next > reproduce: > # apt-get install sparse > make ARCH=x86_64 allmodconfig > make C=1 CF=-D__CHECK_ENDIAN__ > > > sparse warnings: (new ones prefixed by >>) > Hi,Jason I have used the sparse tool for checking and remove all warnings in my server. However, I don't know why? Thanks Lijun Ou > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1608:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1608:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1608:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1608:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1705:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1705:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1705:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1705:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1705:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1705:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1707:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1707:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1707:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1707:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1707:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1707:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1709:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1709:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1709:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1709:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1709:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1709:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1710:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1710:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1710:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1710:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1710:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1710:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1711:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1711:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1711:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1711:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1711:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1711:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1743:18: sparse: cast to restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1743:18: sparse: cast from restricted __be32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1812:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1812:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1812:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1812:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1812:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1812:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1827:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1827:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1827:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1827:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1827:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1827:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1874:32: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] virt_addr_l @@ got unsignrestricted __le32 [usertype] virt_addr_l @@ > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1874:32: expected restricted __le32 [usertype] virt_addr_l > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1874:32: got unsigned int [unsigned] [usertype] <noident> > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1875:32: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] virt_addr_h @@ got unsignrestricted __le32 [usertype] virt_addr_h @@ > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1875:32: expected restricted __le32 [usertype] virt_addr_h > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1875:32: got unsigned int [unsigned] [usertype] <noident> > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1876:27: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] length @@ got unsignrestricted __le32 [usertype] length @@ > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1876:27: expected restricted __le32 [usertype] length > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1876:27: got unsigned int [unsigned] [usertype] <noident> > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1908:25: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1914:25: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1918:25: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1924:25: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1928:25: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1934:25: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1938:25: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1945:25: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1951:25: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1955:25: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1961:25: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1965:25: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1977:31: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] pbl_addr_l @@ got unsignrestricted __le32 [usertype] pbl_addr_l @@ > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1977:31: expected restricted __le32 [usertype] pbl_addr_l > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:1977:31: got unsigned int [unsigned] [usertype] <noident> > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2012:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2012:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2012:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2012:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2012:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2012:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2013:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2013:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2013:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2013:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2013:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2013:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2015:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2015:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2015:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2015:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2015:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2015:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2017:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2017:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2017:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2017:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2017:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2017:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2020:28: sparse: incorrect type in argument 1 (different base types) @@ expected restricted __le32 [usertype] *val @@ got 2 [usertype] *val @@ > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2020:28: expected restricted __le32 [usertype] *val > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2020:28: got unsigned int *<noident> > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2107:34: sparse: cast from restricted __le32 >>> drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2109:29: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cq_bt_l @@ got unsignrestricted __le32 [usertype] cq_bt_l @@ > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2109:29: expected restricted __le32 [usertype] cq_bt_l > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2109:29: got unsigned int [unsigned] [usertype] <noident> > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2110:31: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2122:35: sparse: cast from restricted __le32 >>> drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2124:35: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cur_cqe_ba0_l @@ got unsignrestricted __le32 [usertype] cur_cqe_ba0_l @@ > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2124:35: expected restricted __le32 [usertype] cur_cqe_ba0_l > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2124:35: got unsigned int [unsigned] [usertype] <noident> > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2125:37: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2127:9: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2144:35: sparse: cast from restricted __le32 >>> drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2146:37: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] cqe_tptr_addr_l @@ got unsignrestricted __le32 [usertype] cqe_tptr_addr_l @@ > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2146:37: expected restricted __le32 [usertype] cqe_tptr_addr_l > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2146:37: got unsigned int [unsigned] [usertype] <noident> > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2164:35: sparse: cast from restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2186:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2186:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2186:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2186:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2186:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2186:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2187:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2187:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2187:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2187:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2187:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2187:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2189:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2189:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2189:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2189:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2189:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2189:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2191:9: sparse: invalid assignment: &= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2191:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2191:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2191:9: sparse: invalid assignment: |= > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2191:9: left side has type unsigned int > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2191:9: right side has type restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2195:28: sparse: incorrect type in argument 1 (different base types) @@ expected restricted __le32 [usertype] *val @@ got 2 [usertype] *val @@ > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2195:28: expected restricted __le32 [usertype] *val > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2195:28: got unsigned int *<noident> > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2363:33: sparse: cast to restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2363:33: sparse: cast from restricted __be32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2363:33: sparse: cast to restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2363:33: sparse: cast from restricted __be32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2363:33: sparse: cast to restricted __le32 > drivers/infiniband/hw/hns/hns_roce_hw_v1.c:2363:33: sparse: too many warnings > include/linux/slab.h:631:13: sparse: undefined identifier '__builtin_mul_overflow' > include/linux/slab.h:631:13: sparse: not a function <noident> > include/linux/slab.h:631:13: sparse: not a function <noident> > > vim +2109 drivers/infiniband/hw/hns/hns_roce_hw_v1.c > > 9a443537 oulijun 2016-07-21 2005 > d61d6de0 Bart Van Assche 2017-10-11 2006 static void hns_roce_v1_cq_set_ci(struct hns_roce_cq *hr_cq, u32 cons_index) > 9a443537 oulijun 2016-07-21 2007 { > 9a443537 oulijun 2016-07-21 2008 u32 doorbell[2]; > 9a443537 oulijun 2016-07-21 2009 > 9a443537 oulijun 2016-07-21 2010 doorbell[0] = cons_index & ((hr_cq->cq_depth << 1) - 1); > 5b0ff9a0 Arnd Bergmann 2017-03-24 2011 doorbell[1] = 0; > 9a443537 oulijun 2016-07-21 2012 roce_set_bit(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_HW_SYNS_S, 1); > 9a443537 oulijun 2016-07-21 2013 roce_set_field(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_M, > 9a443537 oulijun 2016-07-21 2014 ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_S, 3); > 9a443537 oulijun 2016-07-21 2015 roce_set_field(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_MDF_M, > 9a443537 oulijun 2016-07-21 2016 ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_MDF_S, 0); > 9a443537 oulijun 2016-07-21 @2017 roce_set_field(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_INP_H_M, > 9a443537 oulijun 2016-07-21 2018 ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_INP_H_S, hr_cq->cqn); > 9a443537 oulijun 2016-07-21 2019 > 9a443537 oulijun 2016-07-21 @2020 hns_roce_write64_k(doorbell, hr_cq->cq_db_l); > 9a443537 oulijun 2016-07-21 2021 } > 9a443537 oulijun 2016-07-21 2022 > 9a443537 oulijun 2016-07-21 2023 static void __hns_roce_v1_cq_clean(struct hns_roce_cq *hr_cq, u32 qpn, > 9a443537 oulijun 2016-07-21 2024 struct hns_roce_srq *srq) > 9a443537 oulijun 2016-07-21 2025 { > 9a443537 oulijun 2016-07-21 2026 struct hns_roce_cqe *cqe, *dest; > 9a443537 oulijun 2016-07-21 2027 u32 prod_index; > 9a443537 oulijun 2016-07-21 2028 int nfreed = 0; > 9a443537 oulijun 2016-07-21 2029 u8 owner_bit; > 9a443537 oulijun 2016-07-21 2030 > 9a443537 oulijun 2016-07-21 2031 for (prod_index = hr_cq->cons_index; get_sw_cqe(hr_cq, prod_index); > 9a443537 oulijun 2016-07-21 2032 ++prod_index) { > 9a443537 oulijun 2016-07-21 2033 if (prod_index == hr_cq->cons_index + hr_cq->ib_cq.cqe) > 9a443537 oulijun 2016-07-21 2034 break; > 9a443537 oulijun 2016-07-21 2035 } > 9a443537 oulijun 2016-07-21 2036 > 9a443537 oulijun 2016-07-21 2037 /* > 9a443537 oulijun 2016-07-21 2038 * Now backwards through the CQ, removing CQ entries > 9a443537 oulijun 2016-07-21 2039 * that match our QP by overwriting them with next entries. > 9a443537 oulijun 2016-07-21 2040 */ > 9a443537 oulijun 2016-07-21 2041 while ((int) --prod_index - (int) hr_cq->cons_index >= 0) { > 9a443537 oulijun 2016-07-21 2042 cqe = get_cqe(hr_cq, prod_index & hr_cq->ib_cq.cqe); > 9a443537 oulijun 2016-07-21 2043 if ((roce_get_field(cqe->cqe_byte_16, CQE_BYTE_16_LOCAL_QPN_M, > 9a443537 oulijun 2016-07-21 2044 CQE_BYTE_16_LOCAL_QPN_S) & > 9a443537 oulijun 2016-07-21 2045 HNS_ROCE_CQE_QPN_MASK) == qpn) { > 9a443537 oulijun 2016-07-21 2046 /* In v1 engine, not support SRQ */ > 9a443537 oulijun 2016-07-21 2047 ++nfreed; > 9a443537 oulijun 2016-07-21 2048 } else if (nfreed) { > 9a443537 oulijun 2016-07-21 2049 dest = get_cqe(hr_cq, (prod_index + nfreed) & > 9a443537 oulijun 2016-07-21 2050 hr_cq->ib_cq.cqe); > 9a443537 oulijun 2016-07-21 2051 owner_bit = roce_get_bit(dest->cqe_byte_4, > 9a443537 oulijun 2016-07-21 2052 CQE_BYTE_4_OWNER_S); > 9a443537 oulijun 2016-07-21 2053 memcpy(dest, cqe, sizeof(*cqe)); > 9a443537 oulijun 2016-07-21 2054 roce_set_bit(dest->cqe_byte_4, CQE_BYTE_4_OWNER_S, > 9a443537 oulijun 2016-07-21 2055 owner_bit); > 9a443537 oulijun 2016-07-21 2056 } > 9a443537 oulijun 2016-07-21 2057 } > 9a443537 oulijun 2016-07-21 2058 > 9a443537 oulijun 2016-07-21 2059 if (nfreed) { > 9a443537 oulijun 2016-07-21 2060 hr_cq->cons_index += nfreed; > 9a443537 oulijun 2016-07-21 2061 /* > 9a443537 oulijun 2016-07-21 2062 * Make sure update of buffer contents is done before > 9a443537 oulijun 2016-07-21 2063 * updating consumer index. > 9a443537 oulijun 2016-07-21 2064 */ > 9a443537 oulijun 2016-07-21 2065 wmb(); > 9a443537 oulijun 2016-07-21 2066 > a4be892e Lijun Ou 2016-09-20 2067 hns_roce_v1_cq_set_ci(hr_cq, hr_cq->cons_index); > 9a443537 oulijun 2016-07-21 2068 } > 9a443537 oulijun 2016-07-21 2069 } > 9a443537 oulijun 2016-07-21 2070 > 9a443537 oulijun 2016-07-21 2071 static void hns_roce_v1_cq_clean(struct hns_roce_cq *hr_cq, u32 qpn, > 9a443537 oulijun 2016-07-21 2072 struct hns_roce_srq *srq) > 9a443537 oulijun 2016-07-21 2073 { > 9a443537 oulijun 2016-07-21 2074 spin_lock_irq(&hr_cq->lock); > 9a443537 oulijun 2016-07-21 2075 __hns_roce_v1_cq_clean(hr_cq, qpn, srq); > 9a443537 oulijun 2016-07-21 2076 spin_unlock_irq(&hr_cq->lock); > 9a443537 oulijun 2016-07-21 2077 } > 9a443537 oulijun 2016-07-21 2078 > d61d6de0 Bart Van Assche 2017-10-11 2079 static void hns_roce_v1_write_cqc(struct hns_roce_dev *hr_dev, > d61d6de0 Bart Van Assche 2017-10-11 2080 struct hns_roce_cq *hr_cq, void *mb_buf, > d61d6de0 Bart Van Assche 2017-10-11 2081 u64 *mtts, dma_addr_t dma_handle, int nent, > d61d6de0 Bart Van Assche 2017-10-11 2082 u32 vector) > 9a443537 oulijun 2016-07-21 2083 { > 9a443537 oulijun 2016-07-21 2084 struct hns_roce_cq_context *cq_context = NULL; > 8f3e9f3e Wei Hu (Xavier 2016-11-23 2085) struct hns_roce_buf_list *tptr_buf; > 8f3e9f3e Wei Hu (Xavier 2016-11-23 2086) struct hns_roce_v1_priv *priv; > 8f3e9f3e Wei Hu (Xavier 2016-11-23 2087) dma_addr_t tptr_dma_addr; > 8f3e9f3e Wei Hu (Xavier 2016-11-23 2088) int offset; > 8f3e9f3e Wei Hu (Xavier 2016-11-23 2089) > 016a0059 Wei Hu(Xavier 2017-08-30 2090) priv = (struct hns_roce_v1_priv *)hr_dev->priv; > 8f3e9f3e Wei Hu (Xavier 2016-11-23 2091) tptr_buf = &priv->tptr_table.tptr_buf; > 9a443537 oulijun 2016-07-21 2092 > 9a443537 oulijun 2016-07-21 2093 cq_context = mb_buf; > 9a443537 oulijun 2016-07-21 2094 memset(cq_context, 0, sizeof(*cq_context)); > 9a443537 oulijun 2016-07-21 2095 > 8f3e9f3e Wei Hu (Xavier 2016-11-23 2096) /* Get the tptr for this CQ. */ > 8f3e9f3e Wei Hu (Xavier 2016-11-23 2097) offset = hr_cq->cqn * HNS_ROCE_V1_TPTR_ENTRY_SIZE; > 8f3e9f3e Wei Hu (Xavier 2016-11-23 2098) tptr_dma_addr = tptr_buf->map + offset; > 8f3e9f3e Wei Hu (Xavier 2016-11-23 2099) hr_cq->tptr_addr = (u16 *)(tptr_buf->buf + offset); > 9a443537 oulijun 2016-07-21 2100 > 9a443537 oulijun 2016-07-21 2101 /* Register cq_context members */ > 9a443537 oulijun 2016-07-21 2102 roce_set_field(cq_context->cqc_byte_4, > 9a443537 oulijun 2016-07-21 2103 CQ_CONTEXT_CQC_BYTE_4_CQC_STATE_M, > 9a443537 oulijun 2016-07-21 2104 CQ_CONTEXT_CQC_BYTE_4_CQC_STATE_S, CQ_STATE_VALID); > 9a443537 oulijun 2016-07-21 2105 roce_set_field(cq_context->cqc_byte_4, CQ_CONTEXT_CQC_BYTE_4_CQN_M, > 9a443537 oulijun 2016-07-21 2106 CQ_CONTEXT_CQC_BYTE_4_CQN_S, hr_cq->cqn); > 9a443537 oulijun 2016-07-21 2107 cq_context->cqc_byte_4 = cpu_to_le32(cq_context->cqc_byte_4); > 9a443537 oulijun 2016-07-21 2108 > 9a443537 oulijun 2016-07-21 @2109 cq_context->cq_bt_l = (u32)dma_handle; > 9a443537 oulijun 2016-07-21 2110 cq_context->cq_bt_l = cpu_to_le32(cq_context->cq_bt_l); > 9a443537 oulijun 2016-07-21 2111 > 9a443537 oulijun 2016-07-21 2112 roce_set_field(cq_context->cqc_byte_12, > 9a443537 oulijun 2016-07-21 2113 CQ_CONTEXT_CQC_BYTE_12_CQ_BT_H_M, > 9a443537 oulijun 2016-07-21 2114 CQ_CONTEXT_CQC_BYTE_12_CQ_BT_H_S, > 9a443537 oulijun 2016-07-21 2115 ((u64)dma_handle >> 32)); > 9a443537 oulijun 2016-07-21 2116 roce_set_field(cq_context->cqc_byte_12, > 9a443537 oulijun 2016-07-21 2117 CQ_CONTEXT_CQC_BYTE_12_CQ_CQE_SHIFT_M, > 9a443537 oulijun 2016-07-21 2118 CQ_CONTEXT_CQC_BYTE_12_CQ_CQE_SHIFT_S, > 9a443537 oulijun 2016-07-21 2119 ilog2((unsigned int)nent)); > 9a443537 oulijun 2016-07-21 2120 roce_set_field(cq_context->cqc_byte_12, CQ_CONTEXT_CQC_BYTE_12_CEQN_M, > 9a443537 oulijun 2016-07-21 2121 CQ_CONTEXT_CQC_BYTE_12_CEQN_S, vector); > 9a443537 oulijun 2016-07-21 2122 cq_context->cqc_byte_12 = cpu_to_le32(cq_context->cqc_byte_12); > 9a443537 oulijun 2016-07-21 2123 > 9a443537 oulijun 2016-07-21 @2124 cq_context->cur_cqe_ba0_l = (u32)(mtts[0]); > 9a443537 oulijun 2016-07-21 2125 cq_context->cur_cqe_ba0_l = cpu_to_le32(cq_context->cur_cqe_ba0_l); > 9a443537 oulijun 2016-07-21 2126 > 9a443537 oulijun 2016-07-21 2127 roce_set_field(cq_context->cqc_byte_20, > 9a443537 oulijun 2016-07-21 2128 CQ_CONTEXT_CQC_BYTE_20_CUR_CQE_BA0_H_M, > 9a443537 oulijun 2016-07-21 2129 CQ_CONTEXT_CQC_BYTE_20_CUR_CQE_BA0_H_S, > 9a443537 oulijun 2016-07-21 2130 cpu_to_le32((mtts[0]) >> 32)); > 9a443537 oulijun 2016-07-21 2131 /* Dedicated hardware, directly set 0 */ > 9a443537 oulijun 2016-07-21 2132 roce_set_field(cq_context->cqc_byte_20, > 9a443537 oulijun 2016-07-21 2133 CQ_CONTEXT_CQC_BYTE_20_CQ_CUR_INDEX_M, > 9a443537 oulijun 2016-07-21 2134 CQ_CONTEXT_CQC_BYTE_20_CQ_CUR_INDEX_S, 0); > 9a443537 oulijun 2016-07-21 2135 /** > 9a443537 oulijun 2016-07-21 2136 * 44 = 32 + 12, When evaluating addr to hardware, shift 12 because of > 9a443537 oulijun 2016-07-21 2137 * using 4K page, and shift more 32 because of > 9a443537 oulijun 2016-07-21 2138 * caculating the high 32 bit value evaluated to hardware. > 9a443537 oulijun 2016-07-21 2139 */ > 9a443537 oulijun 2016-07-21 2140 roce_set_field(cq_context->cqc_byte_20, > 9a443537 oulijun 2016-07-21 2141 CQ_CONTEXT_CQC_BYTE_20_CQE_TPTR_ADDR_H_M, > 9a443537 oulijun 2016-07-21 2142 CQ_CONTEXT_CQC_BYTE_20_CQE_TPTR_ADDR_H_S, > 8f3e9f3e Wei Hu (Xavier 2016-11-23 2143) tptr_dma_addr >> 44); > 9a443537 oulijun 2016-07-21 2144 cq_context->cqc_byte_20 = cpu_to_le32(cq_context->cqc_byte_20); > 9a443537 oulijun 2016-07-21 2145 > 8f3e9f3e Wei Hu (Xavier 2016-11-23 @2146) cq_context->cqe_tptr_addr_l = (u32)(tptr_dma_addr >> 12); > 9a443537 oulijun 2016-07-21 2147 > 9a443537 oulijun 2016-07-21 2148 roce_set_field(cq_context->cqc_byte_32, > 9a443537 oulijun 2016-07-21 2149 CQ_CONTEXT_CQC_BYTE_32_CUR_CQE_BA1_H_M, > 9a443537 oulijun 2016-07-21 2150 CQ_CONTEXT_CQC_BYTE_32_CUR_CQE_BA1_H_S, 0); > 9a443537 oulijun 2016-07-21 2151 roce_set_bit(cq_context->cqc_byte_32, > 9a443537 oulijun 2016-07-21 2152 CQ_CONTEXT_CQC_BYTE_32_SE_FLAG_S, 0); > 9a443537 oulijun 2016-07-21 2153 roce_set_bit(cq_context->cqc_byte_32, > 9a443537 oulijun 2016-07-21 2154 CQ_CONTEXT_CQC_BYTE_32_CE_FLAG_S, 0); > 9a443537 oulijun 2016-07-21 2155 roce_set_bit(cq_context->cqc_byte_32, > 9a443537 oulijun 2016-07-21 2156 CQ_CONTEXT_CQC_BYTE_32_NOTIFICATION_FLAG_S, 0); > 9a443537 oulijun 2016-07-21 2157 roce_set_bit(cq_context->cqc_byte_32, > 9a443537 oulijun 2016-07-21 2158 CQ_CQNTEXT_CQC_BYTE_32_TYPE_OF_COMPLETION_NOTIFICATION_S, > 9a443537 oulijun 2016-07-21 2159 0); > 9a443537 oulijun 2016-07-21 2160 /* The initial value of cq's ci is 0 */ > 9a443537 oulijun 2016-07-21 2161 roce_set_field(cq_context->cqc_byte_32, > 9a443537 oulijun 2016-07-21 2162 CQ_CONTEXT_CQC_BYTE_32_CQ_CONS_IDX_M, > 9a443537 oulijun 2016-07-21 2163 CQ_CONTEXT_CQC_BYTE_32_CQ_CONS_IDX_S, 0); > 9a443537 oulijun 2016-07-21 2164 cq_context->cqc_byte_32 = cpu_to_le32(cq_context->cqc_byte_32); > 9a443537 oulijun 2016-07-21 2165 } > 9a443537 oulijun 2016-07-21 2166 > > :::::: The code at line 2109 was first introduced by commit > :::::: 9a4435375cd151e07c0c38fa601b00115986091b IB/hns: Add driver files for hns RoCE driver > > :::::: TO: oulijun <oulijun@xxxxxxxxxx> > :::::: CC: Doug Ledford <dledford@xxxxxxxxxx> > > --- > 0-DAY kernel test infrastructure Open Source Technology Center > https://lists.01.org/pipermail/kbuild-all Intel Corporation > > . > -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html