tree:
https://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git rdma-next
head: 05f9b877d9328976740745c6f5451a83685920d6
commit: 715d68e63629aeb000669233275289f98f1e3cc6 [10/42] RDMA/mlx5: Consolidate MR
destruction to mlx5_ib_dereg_mr()
config: arc-randconfig-m031-20210311 (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
New smatch warnings:
drivers/infiniband/hw/mlx5/mr.c:1950 mlx5_ib_dereg_mr() error: uninitialized symbol
'rc'.
Old smatch warnings:
arch/arc/include/asm/thread_info.h:65 current_thread_info() error: uninitialized symbol
'sp'.
vim +/rc +1950 drivers/infiniband/hw/mlx5/mr.c
1921
1922 int mlx5_ib_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata)
1923 {
1924 struct mlx5_ib_mr *mr = to_mmr(ibmr);
1925 struct mlx5_ib_dev *dev = to_mdev(ibmr->device);
1926 int rc;
1927
1928 /*
1929 * Any async use of the mr must hold the refcount, once the refcount
1930 * goes to zero no other thread, such as ODP page faults, prefetch, any
1931 * UMR activity, etc can touch the mkey. Thus it is safe to destroy it.
1932 */
1933 if (IS_ENABLED(CONFIG_INFINIBAND_ON_DEMAND_PAGING) &&
1934 refcount_read(&mr->mmkey.usecount) != 0 &&
1935 xa_erase(&mr_to_mdev(mr)->odp_mkeys,
mlx5_base_mkey(mr->mmkey.key)))
1936 mlx5r_deref_wait_odp_mkey(&mr->mmkey);
1937
1938 if (ibmr->type == IB_MR_TYPE_INTEGRITY) {
1939 xa_cmpxchg(&dev->sig_mrs, mlx5_base_mkey(mr->mmkey.key), ibmr,
1940 NULL, GFP_KERNEL);
1941
1942 if (mr->mtt_mr) {
1943 rc = mlx5_ib_dereg_mr(&mr->mtt_mr->ibmr, NULL);
1944 if (rc)
1945 return rc;
1946 mr->mtt_mr = NULL;
1947 }
1948 if (mr->klm_mr) {
1949 mlx5_ib_dereg_mr(&mr->klm_mr->ibmr, NULL);
1950 if (rc)
1951 return rc;
1952 mr->klm_mr = NULL;
1953 }
1954
1955 if (mlx5_core_destroy_psv(dev->mdev,
1956 mr->sig->psv_memory.psv_idx))
1957 mlx5_ib_warn(dev, "failed to destroy mem psv %d\n",
1958 mr->sig->psv_memory.psv_idx);
1959 if (mlx5_core_destroy_psv(dev->mdev, mr->sig->psv_wire.psv_idx))
1960 mlx5_ib_warn(dev, "failed to destroy wire psv %d\n",
1961 mr->sig->psv_wire.psv_idx);
1962 kfree(mr->sig);
1963 mr->sig = NULL;
1964 }
1965
1966 /* Stop DMA */
1967 if (mr->cache_ent) {
1968 if (mlx5_mr_cache_invalidate(mr)) {
1969 spin_lock_irq(&mr->cache_ent->lock);
1970 mr->cache_ent->total_mrs--;
1971 spin_unlock_irq(&mr->cache_ent->lock);
1972 mr->cache_ent = NULL;
1973 }
1974 }
1975 if (!mr->cache_ent) {
1976 rc = destroy_mkey(to_mdev(mr->ibmr.device), mr);
1977 if (rc)
1978 return rc;
1979 }
1980
1981 if (mr->umem) {
1982 bool is_odp = is_odp_mr(mr);
1983
1984 if (!is_odp)
1985 atomic_sub(ib_umem_num_pages(mr->umem),
1986 &dev->mdev->priv.reg_pages);
1987 ib_umem_release(mr->umem);
1988 if (is_odp)
1989 mlx5_ib_free_odp_mr(mr);
1990 }
1991
1992 if (mr->cache_ent) {
1993 mlx5_mr_cache_free(dev, mr);
1994 } else {
1995 mlx5_free_priv_descs(mr);
1996 kfree(mr);
1997 }
1998 return 0;
1999 }
2000
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org