All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: drivers/misc/habanalabs/common/memory.c:1031:16: warning: Either the condition '!hnode' is redundant or there is possible null pointer dereference: hnode.
Date: Sun, 13 Sep 2020 23:01:37 +0800	[thread overview]
Message-ID: <202009132334.7tnnYWPy%lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 17061 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Oded Gabbay <oded.gabbay@gmail.com>
CC: Omer Shpigelman <oshpigelman@habana.ai>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   ef2e9a563b0cd7965e2a1263125dcbb1c86aa6cc
commit: 70b2f993ea4a79c298aac4ec1c58089020536ba5 habanalabs: create common folder
date:   7 weeks ago
:::::: branch date: 19 hours ago
:::::: commit date: 7 weeks ago
compiler: hppa-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


cppcheck warnings: (new ones prefixed by >>)

>> drivers/misc/habanalabs/common/memory.c:1031:16: warning: Either the condition '!hnode' is redundant or there is possible null pointer dereference: hnode. [nullPointerRedundantCheck]
     if (vaddr == hnode->vaddr)
                  ^
   drivers/misc/habanalabs/common/memory.c:1034:6: note: Assuming that condition '!hnode' is not redundant
    if (!hnode) {
        ^
   drivers/misc/habanalabs/common/memory.c:1031:16: note: Null pointer dereference
     if (vaddr == hnode->vaddr)
                  ^

# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=70b2f993ea4a79c298aac4ec1c58089020536ba5
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 70b2f993ea4a79c298aac4ec1c58089020536ba5
vim +1031 drivers/misc/habanalabs/common/memory.c

0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1005  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1006  /*
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1007   * unmap_device_va      - unmap the given device virtual address
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1008   *
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1009   * @ctx                 : current context
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1010   * @vaddr               : device virtual address to unmap
71c5e55e7c077f drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1011   * @ctx_free            : true if in context free flow, false otherwise.
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1012   *
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1013   * This function does the following:
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1014   * - Unmap the physical pages related to the given virtual address
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1015   * - return the device virtual block to the virtual block list
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1016   */
71c5e55e7c077f drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1017  static int unmap_device_va(struct hl_ctx *ctx, u64 vaddr, bool ctx_free)
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1018  {
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1019  	struct hl_device *hdev = ctx->hdev;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1020  	struct hl_vm_phys_pg_pack *phys_pg_pack = NULL;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1021  	struct hl_vm_hash_node *hnode = NULL;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1022  	struct hl_userptr *userptr = NULL;
71c5e55e7c077f drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1023  	struct hl_va_range *va_range;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1024  	enum vm_type_t *vm_type;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1025  	bool is_userptr;
c68f1baeaff4b2 drivers/misc/habanalabs/memory.c Tomer Tayar     2020-06-01  1026  	int rc = 0;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1027  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1028  	/* protect from double entrance */
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1029  	mutex_lock(&ctx->mem_hash_lock);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1030  	hash_for_each_possible(ctx->mem_hash, hnode, node, (unsigned long)vaddr)
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16 @1031  		if (vaddr == hnode->vaddr)
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1032  			break;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1033  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1034  	if (!hnode) {
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1035  		mutex_unlock(&ctx->mem_hash_lock);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1036  		dev_err(hdev->dev,
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1037  			"unmap failed, no mem hnode for vaddr 0x%llx\n",
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1038  			vaddr);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1039  		return -EINVAL;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1040  	}
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1041  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1042  	hash_del(&hnode->node);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1043  	mutex_unlock(&ctx->mem_hash_lock);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1044  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1045  	vm_type = hnode->ptr;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1046  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1047  	if (*vm_type == VM_TYPE_USERPTR) {
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1048  		is_userptr = true;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1049  		userptr = hnode->ptr;
54bb67444ea3f3 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1050  		rc = init_phys_pg_pack_from_userptr(ctx, userptr,
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1051  							&phys_pg_pack);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1052  		if (rc) {
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1053  			dev_err(hdev->dev,
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1054  				"unable to init page pack for vaddr 0x%llx\n",
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1055  				vaddr);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1056  			goto vm_type_err;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1057  		}
64a7e2955d9a8a drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-01-05  1058  
64a7e2955d9a8a drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-01-05  1059  		if (phys_pg_pack->page_size ==
64a7e2955d9a8a drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-01-05  1060  					hdev->asic_prop.pmmu.page_size)
64a7e2955d9a8a drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-01-05  1061  			va_range = ctx->host_va_range;
64a7e2955d9a8a drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-01-05  1062  		else
64a7e2955d9a8a drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-01-05  1063  			va_range = ctx->host_huge_va_range;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1064  	} else if (*vm_type == VM_TYPE_PHYS_PACK) {
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1065  		is_userptr = false;
64a7e2955d9a8a drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-01-05  1066  		va_range = ctx->dram_va_range;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1067  		phys_pg_pack = hnode->ptr;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1068  	} else {
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1069  		dev_warn(hdev->dev,
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1070  			"unmap failed, unknown vm desc for vaddr 0x%llx\n",
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1071  				vaddr);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1072  		rc = -EFAULT;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1073  		goto vm_type_err;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1074  	}
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1075  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1076  	if (atomic_read(&phys_pg_pack->mapping_cnt) == 0) {
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1077  		dev_err(hdev->dev, "vaddr 0x%llx is not mapped\n", vaddr);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1078  		rc = -EINVAL;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1079  		goto mapping_cnt_err;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1080  	}
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1081  
7f74d4d335f1bd drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-08-12  1082  	vaddr &= ~(((u64) phys_pg_pack->page_size) - 1);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1083  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1084  	mutex_lock(&ctx->mmu_lock);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1085  
7f74d4d335f1bd drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-08-12  1086  	unmap_phys_pg_pack(ctx, vaddr, phys_pg_pack);
e850b89f50d2c1 drivers/misc/habanalabs/memory.c Oded Gabbay     2019-03-31  1087  
bea84c4d67e5ef drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1088  	/*
bea84c4d67e5ef drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1089  	 * During context free this function is called in a loop to clean all
bea84c4d67e5ef drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1090  	 * the context mappings. Hence the cache invalidation can be called once
bea84c4d67e5ef drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1091  	 * at the loop end rather than for each iteration
bea84c4d67e5ef drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1092  	 */
bea84c4d67e5ef drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1093  	if (!ctx_free)
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1094  		rc = hdev->asic_funcs->mmu_invalidate_cache(hdev, true,
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1095  								*vm_type);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1096  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1097  	mutex_unlock(&ctx->mmu_lock);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1098  
71c5e55e7c077f drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1099  	/*
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1100  	 * If the context is closing we don't need to check for the MMU cache
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1101  	 * invalidation return code and update the VA free list as in this flow
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1102  	 * we invalidate the MMU cache outside of this unmap function and the VA
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1103  	 * free list will be freed anyway.
71c5e55e7c077f drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1104  	 */
71c5e55e7c077f drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1105  	if (!ctx_free) {
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1106  		int tmp_rc;
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1107  
71c5e55e7c077f drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1108  		if (rc)
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1109  			dev_err(hdev->dev,
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1110  				"unmapping vaddr 0x%llx failed due to MMU cache invalidation\n",
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1111  				vaddr);
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1112  
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1113  		tmp_rc = add_va_block(hdev, va_range, vaddr,
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1114  					vaddr + phys_pg_pack->total_size - 1);
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1115  		if (tmp_rc) {
71c5e55e7c077f drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1116  			dev_warn(hdev->dev,
71c5e55e7c077f drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1117  					"add va block failed for vaddr: 0x%llx\n",
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1118  					vaddr);
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1119  			if (!rc)
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1120  				rc = tmp_rc;
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1121  		}
71c5e55e7c077f drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-11-14  1122  	}
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1123  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1124  	atomic_dec(&phys_pg_pack->mapping_cnt);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1125  	kfree(hnode);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1126  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1127  	if (is_userptr) {
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1128  		free_phys_pg_pack(hdev, phys_pg_pack);
7f74d4d335f1bd drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-08-12  1129  		dma_unmap_host_va(hdev, userptr);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1130  	}
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1131  
8ff5f4fd40df95 drivers/misc/habanalabs/memory.c Omer Shpigelman 2020-05-24  1132  	return rc;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1133  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1134  mapping_cnt_err:
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1135  	if (is_userptr)
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1136  		free_phys_pg_pack(hdev, phys_pg_pack);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1137  vm_type_err:
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1138  	mutex_lock(&ctx->mem_hash_lock);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1139  	hash_add(ctx->mem_hash, &hnode->node, vaddr);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1140  	mutex_unlock(&ctx->mem_hash_lock);
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1141  
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1142  	return rc;
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1143  }
0feaf86d4e6950 drivers/misc/habanalabs/memory.c Omer Shpigelman 2019-02-16  1144  

:::::: The code at line 1031 was first introduced by commit
:::::: 0feaf86d4e69507ab9b2af7dcc63a6886352d5db habanalabs: add virtual memory and MMU modules

:::::: TO: Omer Shpigelman <oshpigelman@habana.ai>
:::::: CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

                 reply	other threads:[~2020-09-13 15:01 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202009132334.7tnnYWPy%lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.