CC: [email protected] CC: [email protected] TO: Oded Gabbay <[email protected]> CC: Omer Shpigelman <[email protected]>
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 <[email protected]> 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 <[email protected]> :::::: CC: Greg Kroah-Hartman <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
