Hello Jack Xiao, The patch af019bef6d6f: "drm/amdgpu/gfx11: add aggregated doorbell support" from Jul 11, 2022, leads to the following Smatch static checker warning: drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c:5193 gfx_v11_0_ring_set_wptr_gfx() warn: duplicate check '*is_queue_unmap' drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c 5166 static void gfx_v11_0_ring_set_wptr_gfx(struct amdgpu_ring *ring) 5167 { 5168 struct amdgpu_device *adev = ring->adev; 5169 uint32_t *wptr_saved; 5170 uint32_t *is_queue_unmap; 5171 uint64_t aggregated_db_index; 5172 uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_GFX].mqd_size; 5173 uint64_t wptr_tmp; 5174 5175 if (ring->is_mes_queue) { 5176 wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size); 5177 is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size + 5178 sizeof(uint32_t)); 5179 aggregated_db_index = 5180 amdgpu_mes_get_aggregated_doorbell_index(adev, 5181 ring->hw_prio); 5182 5183 wptr_tmp = ring->wptr & ring->buf_mask; 5184 atomic64_set((atomic64_t *)ring->wptr_cpu_addr, wptr_tmp); 5185 *wptr_saved = wptr_tmp; 5186 /* assume doorbell always being used by mes mapped queue */ 5187 if (*is_queue_unmap) { ^^^^^^^^^^^^^^^ Non-zero here. 5188 WDOORBELL64(aggregated_db_index, wptr_tmp); 5189 WDOORBELL64(ring->doorbell_index, wptr_tmp); 5190 } else { 5191 WDOORBELL64(ring->doorbell_index, wptr_tmp); 5192 --> 5193 if (*is_queue_unmap) ^^^^^^^^^^^^^^^ You would think it's zero here. Although, possibly this value is getting set in another thread? 5194 WDOORBELL64(aggregated_db_index, wptr_tmp); 5195 } 5196 } else { 5197 if (ring->use_doorbell) { 5198 /* XXX check if swapping is necessary on BE */ 5199 atomic64_set((atomic64_t *)ring->wptr_cpu_addr, 5200 ring->wptr); 5201 WDOORBELL64(ring->doorbell_index, ring->wptr); 5202 } else { 5203 WREG32_SOC15(GC, 0, regCP_RB0_WPTR, 5204 lower_32_bits(ring->wptr)); 5205 WREG32_SOC15(GC, 0, regCP_RB0_WPTR_HI, 5206 upper_32_bits(ring->wptr)); 5207 } 5208 } 5209 } regards, dan carpenter