Sometimes on my hardware GL_ARB_timer_query isn't always detected Intel HD 4600 kernel-4.1.1 libdrm-2.4.62 mesa-master-8108de4 this causes a fallback to OpenGL 3.2: $ while true; do glxinfo | grep -e "OpenGL core profile version string" -e GL_ARB_timer_query; done OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4) OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4) OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.7.0-devel (git-8108de4) GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_uniform_buffer_object, GL_ARB_texture_swizzle, GL_ARB_texture_view, GL_ARB_timer_query, OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4) OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.7.0-devel (git-8108de4) GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_uniform_buffer_object, GL_ARB_texture_swizzle, GL_ARB_texture_view, GL_ARB_timer_query, OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.7.0-devel (git-8108de4) GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_uniform_buffer_object, GL_ARB_texture_swizzle, GL_ARB_texture_view, GL_ARB_timer_query, OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.7.0-devel (git-8108de4) GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_uniform_buffer_object, GL_ARB_texture_swizzle, GL_ARB_texture_view, GL_ARB_timer_query, OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.7.0-devel (git-8108de4) GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_uniform_buffer_object, GL_ARB_texture_swizzle, GL_ARB_texture_view, GL_ARB_timer_query, OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4) OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4) OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4) OpenGL core profile version string: 3.2 (Core Profile) Mesa 10.7.0-devel (git-8108de4)
Created attachment 117076 [details] [review] hack to fix the problem setting the loop variable to 1000 didn't seem to fix the problem, 10.000 is hight enough for more than 1000 runs.
Look at the individual values. There is no way we can do 10 round trips through the kernel in less than 80ns, let alone 1000, so it is much more likely that the reads are suspect.
(In reply to Chris Wilson from comment #2) > Look at the individual values. There is no way we can do 10 round trips > through the kernel in less than 80ns, let alone 1000, so it is much more > likely that the reads are suspect. i saw that I commented without checking what I wrote: I need 10.000 loops before the value gets stable, 1000 was not. I will try to debug this further.
just added a printf with the value: 0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l0l65537ldisplay: :3 screen: 0 that's like the longest I got
yeah, seems like there are a lot of 0, and then at the end one 65537
I think it is safe to say: it's broke! :) Do you have 32bit or 64bit?
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c index 2c47766..d4c57a9 100644 --- a/drivers/gpu/drm/i915/intel_uncore.c +++ b/drivers/gpu/drm/i915/intel_uncore.c @@ -1325,7 +1325,8 @@ int i915_reg_read_ioctl(struct drm_device *dev, switch (entry->size) { case 8: - reg->val = I915_READ64(reg->offset); + /* w/a for broken hw */ + reg->val = I915_READ64_2x32(reg->offset, reg->offset + 4); break; case 4: reg->val = I915_READ(reg->offset);
64 bit. I guess this is for the kernel? Will try it out
yeah, with the kernel patch I got now: $ while true; do glxinfo | grep 0l ; done 1181029360ldisplay: :0 screen: 0 1186384440ldisplay: :0 screen: 0 1192627290ldisplay: :0 screen: 0 1195108540ldisplay: :0 screen: 0 1197301060ldisplay: :0 screen: 0 1200431000ldisplay: :0 screen: 0 1201377440ldisplay: :0 screen: 0 1204815930ldisplay: :0 screen: 0 1210804110ldisplay: :0 screen: 0 1213607430ldisplay: :0 screen: 0 1214233940ldisplay: :0 screen: 0 1215281580ldisplay: :0 screen: 0 1225884330ldisplay: :0 screen: 0 1229673860ldisplay: :0 screen: 0 1229981530ldisplay: :0 screen: 0 1230304190ldisplay: :0 screen: 0 1233167030ldisplay: :0 screen: 0 1238769590ldisplay: :0 screen: 0 1240953560ldisplay: :0 screen: 0
strange is, that I don't think I ever saw it before and just notice this today, after I used this laptop for more than a year.
kernel commit 648a9bc5308d952f2c80772301b339f73026f013 Author: Chris Wilson <chris@chris-wilson.co.uk> Date: Thu Jul 16 12:37:56 2015 +0100 drm/i915: Use two 32bit reads for select 64bit REG_READ ioctls mesa commit 013d731a67538a2eb8f508fa54bb86191f0e5491 Author: Chris Wilson <chris@chris-wilson.co.uk> Date: Tue Jul 21 11:12:57 2015 +0100 i965: Use updated kernel interface for accurate TIMESTAMP reads
seems to work with both patches applied, thanks
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.