[radeon-alex:amd-staging-drm-next-pco 272/339] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:5137 dm_determine_update_type_for_commit() error: potential null dereference 'surface'. (kzalloc returns null)

kbuild test robot lkp at intel.com
Fri Sep 14 06:36:15 UTC 2018


tree:   git://people.freedesktop.org/~agd5f/linux.git amd-staging-drm-next-pco
head:   bbab57a341c90ed6e32de8edf4e89dc5c55cddac
commit: 42b0cb5d6f8d3c641098454aabfa4eeeb935ccd2 [272/339] drm/amd/display: Build stream update and plane updates in dm

smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:5137 dm_determine_update_type_for_commit() error: potential null dereference 'surface'.  (kzalloc returns null)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:5137 dm_determine_update_type_for_commit() error: potential null dereference 'updates'.  (kzalloc returns null)

vim +/surface +5137 drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c

  5098	
  5099	
  5100		int i, j, num_plane;
  5101		struct drm_plane_state *old_plane_state, *new_plane_state;
  5102		struct dm_plane_state *new_dm_plane_state, *old_dm_plane_state;
  5103		struct drm_crtc *new_plane_crtc, *old_plane_crtc;
  5104		struct drm_plane *plane;
  5105	
  5106		struct drm_crtc *crtc;
  5107		struct drm_crtc_state *new_crtc_state, *old_crtc_state;
  5108		struct dm_crtc_state *new_dm_crtc_state, *old_dm_crtc_state;
  5109		struct dc_stream_status *status = NULL;
  5110	
  5111		struct dc_surface_update *updates = kzalloc(MAX_SURFACES * sizeof(struct dc_surface_update), GFP_KERNEL);
  5112		struct dc_plane_state *surface = kzalloc(MAX_SURFACES * sizeof(struct dc_plane_state), GFP_KERNEL);
  5113		struct dc_stream_update stream_update;
  5114		enum surface_update_type update_type = UPDATE_TYPE_FAST;
  5115	
  5116	
  5117		for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
  5118			new_dm_crtc_state = to_dm_crtc_state(new_crtc_state);
  5119			old_dm_crtc_state = to_dm_crtc_state(old_crtc_state);
  5120			num_plane = 0;
  5121	
  5122			if (new_dm_crtc_state->stream) {
  5123	
  5124				for_each_oldnew_plane_in_state(state, plane, old_plane_state, new_plane_state, j) {
  5125					new_plane_crtc = new_plane_state->crtc;
  5126					old_plane_crtc = old_plane_state->crtc;
  5127					new_dm_plane_state = to_dm_plane_state(new_plane_state);
  5128					old_dm_plane_state = to_dm_plane_state(old_plane_state);
  5129	
  5130					if (plane->type == DRM_PLANE_TYPE_CURSOR)
  5131						continue;
  5132	
  5133					if (!state->allow_modeset)
  5134						continue;
  5135	
  5136					if (crtc == new_plane_crtc) {
> 5137						updates[num_plane].surface = &surface[num_plane];
  5138	
  5139						if (new_crtc_state->mode_changed) {
  5140							updates[num_plane].surface->src_rect =
  5141										new_dm_plane_state->dc_state->src_rect;
  5142							updates[num_plane].surface->dst_rect =
  5143										new_dm_plane_state->dc_state->dst_rect;
  5144							updates[num_plane].surface->rotation =
  5145										new_dm_plane_state->dc_state->rotation;
  5146							updates[num_plane].surface->in_transfer_func =
  5147										new_dm_plane_state->dc_state->in_transfer_func;
  5148							stream_update.dst = new_dm_crtc_state->stream->dst;
  5149							stream_update.src = new_dm_crtc_state->stream->src;
  5150						}
  5151	
  5152						if (new_crtc_state->color_mgmt_changed) {
  5153							updates[num_plane].gamma =
  5154									new_dm_plane_state->dc_state->gamma_correction;
  5155							updates[num_plane].in_transfer_func =
  5156									new_dm_plane_state->dc_state->in_transfer_func;
  5157							stream_update.gamut_remap =
  5158									&new_dm_crtc_state->stream->gamut_remap_matrix;
  5159							stream_update.out_transfer_func =
  5160									new_dm_crtc_state->stream->out_transfer_func;
  5161						}
  5162	
  5163						num_plane++;
  5164					}
  5165				}
  5166	
  5167				if (num_plane > 0) {
  5168					status = dc_stream_get_status(new_dm_crtc_state->stream);
  5169					update_type = dc_check_update_surfaces_for_stream(dc, updates, num_plane,
  5170											  &stream_update, status);
  5171	
  5172					if (update_type > UPDATE_TYPE_MED) {
  5173						update_type = UPDATE_TYPE_FULL;
  5174						goto ret;
  5175					}
  5176				}
  5177	
  5178			} else if (!new_dm_crtc_state->stream && old_dm_crtc_state->stream) {
  5179				update_type = UPDATE_TYPE_FULL;
  5180				goto ret;
  5181			}
  5182		}
  5183	
  5184	ret:
  5185		kfree(updates);
  5186		kfree(surface);
  5187	
  5188		return update_type;
  5189	}
  5190	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation


More information about the dri-devel mailing list