On Fri, 23 Oct 2015 13:35:21 +0200
Daniel Vetter <dan...@ffwll.ch> wrote:

> On Fri, Oct 23, 2015 at 09:51:06AM +0100, Tvrtko Ursulin wrote:
> > 
> > Hi,
> > 
> > On 23/10/15 02:34, Vivek Kasireddy wrote:
> > >The main goal of this subtest is to trigger the following warning
> > >in the function i915_gem_object_get_fence():
> > >   if (WARN_ON(!obj->map_and_fenceable))
> > >
> > >To trigger this warning, the subtest first creates a Y-tiled
> > >object and an associated framebuffer with the Y-fb modifier.
> > >Furthermore, to prevent the map_and_fenceable from being set, we
> > >make sure that the object does not have a normal VMA by refraining
> > >from rendering to the object and by setting the rotation property
> > >upfront before calling commit.
> > >
> > >v2: Do not call paint_squares and just use one output.
> > >
> > >v3: Convert an if condition to igt_require and move the plane
> > >rotation requirement further up before the fb allocation.
> > >
> > >Cc: Tvrtko Ursulin <tvrtko.ursu...@intel.com>
> > >Signed-off-by: Vivek Kasireddy <vivek.kasire...@intel.com>
> > >---
> > >  tests/kms_rotation_crc.c | 68
> > > ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed,
> > > 68 insertions(+)
> > >
> > >diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
> > >index cc9847e..b25a949 100644
> > >--- a/tests/kms_rotation_crc.c
> > >+++ b/tests/kms_rotation_crc.c
> > >@@ -264,6 +264,68 @@ static void test_plane_rotation(data_t *data,
> > >enum igt_plane plane_type)
> > >   igt_require_f(valid_tests, "no valid crtc/connector
> > > combinations found\n"); }
> > >
> > >+static void test_plane_rotation_ytiled_obj(data_t *data, enum
> > >igt_plane plane_type) +{
> > >+  igt_display_t *display = &data->display;
> > >+  uint64_t tiling = LOCAL_I915_FORMAT_MOD_Y_TILED;
> > >+  uint32_t format = DRM_FORMAT_XRGB8888;
> > >+  int bpp = igt_drm_format_to_bpp(format);
> > >+  enum igt_commit_style commit = COMMIT_LEGACY;
> > >+  int fd = data->gfx_fd;
> > >+  igt_output_t *output = &display->outputs[0];
> > >+  igt_plane_t *plane;
> > >+  drmModeModeInfo *mode;
> > >+  unsigned int stride, size, w, h;
> > >+  uint32_t gem_handle;
> > >+  int ret;
> > >+
> > >+  igt_require(output != NULL && output->valid == true);
> > >+
> > >+  plane = igt_output_get_plane(output, plane_type);
> > >+  igt_require(igt_plane_supports_rotation(plane));
> > >+
> > >+  if (plane_type == IGT_PLANE_PRIMARY || plane_type ==
> > >IGT_PLANE_CURSOR) {
> > >+          igt_require(data->display.has_universal_planes);
> > >+          commit = COMMIT_UNIVERSAL;
> > >+  }
> > >+
> > >+  mode = igt_output_get_mode(output);
> > >+  w = mode->hdisplay;
> > >+  h = mode->vdisplay;
> > >+
> > >+  for (stride = 512; stride < (w * bpp / 8); stride *= 2)
> > >+          ;
> > >+  for (size = 1024*1024; size < stride * h; size *= 2)
> > >+          ;
> > >+
> > >+  gem_handle = gem_create(fd, size);
> > >+  ret = __gem_set_tiling(fd, gem_handle, I915_TILING_Y,
> > >stride);
> > >+  igt_assert(ret == 0);
> > >+
> > >+  do_or_die(__kms_addfb(fd, gem_handle, w, h, stride,
> > >+            format, tiling, LOCAL_DRM_MODE_FB_MODIFIERS,
> > >+            &data->fb.fb_id));
> > >+  data->fb.width = w;
> > >+  data->fb.height = h;
> > >+  data->fb.gem_handle = gem_handle;
> > >+
> > >+  igt_plane_set_fb(plane, NULL);
> > >+  igt_display_commit(display);
> > >+
> > >+  igt_plane_set_rotation(plane, data->rotation);
> > >+  igt_plane_set_fb(plane, &data->fb);
> > >+
> > >+  drmModeObjectSetProperty(fd, plane->drm_plane->plane_id,
> > >+                           DRM_MODE_OBJECT_PLANE,
> > >+                           plane->rotation_property,
> > >+                           plane->rotation);
> > >+  ret = igt_display_try_commit2(display, commit);
> > >+
> > >+  kmstest_restore_vt_mode();
> > >+  igt_remove_fb(fd, &data->fb);
> > >+  igt_assert(ret == 0);
> > >+}
> > >+
> > >  igt_main
> > >  {
> > >   data_t data = {};
> > >@@ -345,6 +407,12 @@ igt_main
> > >           test_plane_rotation(&data, IGT_PLANE_PRIMARY);
> > >   }
> > >
> > >+  igt_subtest_f("primary-rotation-90-Y-tiled") {
> > >+          igt_require(gen >= 9);
> > >+          data.rotation = IGT_ROTATION_90;
> > >+          test_plane_rotation_ytiled_obj(&data,
> > >IGT_PLANE_PRIMARY);
> > >+  }
> > >+
> > >   igt_fixture {
> > >           igt_display_fini(&data.display);
> > >   }
> > >
> > 
> > Reviewed-by: Tvrtko Ursulin <tvrtko.ursu...@intel.com>
> 
> Applied, thanks.
> -Daniel
Hi Daniel,
Not sure whether Tvrtko or Chris have any futher comments on the fix
for this bug but do you have any comments?

This was the fix:
http://lists.freedesktop.org/archives/intel-gfx/2015-September/076183.html

Thanks and Regards,
Vivek

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to