<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial">Can anyone give a suggestion, is wait-vblank fully implemented in page_flip() for nouveau drm driver?<br><br><div></div><div id="divNeteaseMailCard"></div><br>At 2011-10-24 14:30:55,chris&nbsp;&lt;wwzbwwzb@163.com&gt; wrote:<br> <blockquote id="isReplyContent" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial">Dear,<br><br>I use NVidia Geforce 7300GT graphics card in my PC, and Linux 3.1rc4 kernel code, git drm 2.4.36.&nbsp; <br>&nbsp; When I run the vbltest program, it prints&nbsp; "60HZ"&nbsp; which indicated the implementation of drmWaitVBlank() and drm_vblank_wait()&nbsp; is correct.<br>&nbsp; But when I run modetest with option " -v -s 12:1280x1024" , it prints high fresh rate up to "150 HZ" .&nbsp; I examing the code , and found that no waiting vblank operation is processed in nouveau_crtc_page_flip() function. The screen&nbsp; produced lots of garbage and blink very much.<br>&nbsp;int<br>nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct drm_pending_vblank_event *event)<br>{<br>......<br>}<br>I study the i915 intel_crtc_page_flip implementation.<br>static int intel_crtc_page_flip(stru
 ct drm_crtc *crtc,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct drm_framebuffer *fb,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct drm_pending_vblank_event *event)<br>{<br>......<br><br>&nbsp;&nbsp;&nbsp; ret = drm_vblank_get(dev, intel_crtc-&gt;pipe);<br>&nbsp;&nbsp;&nbsp; if (ret)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto cleanup_objs;<br><br>&nbsp;&nbsp;&nbsp; work-&gt;pending_flip_obj = obj;<br><br>&nbsp;&nbsp;&nbsp; work-&gt;enable_stall_check = true;<br><br>&nbsp;&nbsp;&nbsp; /* Block clients from rendering to the new back buffer until<br>&nbsp;&nbsp;&nbsp;&nbsp; * the flip occurs and the object is no longer visible.<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; atomic_add(1 &lt;&lt; intel_crtc-&gt;plane, &amp;work-&gt;old_fb_obj-&gt;pending_flip);<br><br>&nbsp;&nbsp;&nbsp; ret = dev_priv-&gt;display.queue_flip(dev, crtc, fb, obj);<br>&nbsp;&amp;nb
 sp;&nbsp; if (ret)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto cleanup_pending;<br>......<br>}<br><br>after vblank irq acquired, the interrupt isr will wakup the runqueue.<br>6159 static void do_intel_finish_page_flip(struct drm_device *dev,<br>6160&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct drm_crtc *crtc)<br>6161 {<br>......<br>6211&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list_add_tail(&amp;e-&gt;base.link,<br>6212&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;e-&gt;base.file_priv-&gt;event_list);<br>6213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wake_up_interruptible(&amp;e-&gt;base.file_priv-&gt;event_wait);<br>6214&nbsp;&nbsp;&nbsp;&nbsp; }<br>6215<br>6216&nbsp;&nbsp;&nbsp;&nbsp; drm_vblank_put(dev, intel_crtc-&gt;pipe);<br>6217<br><br><br>Is there anyone use the same&nbsp; driver and foun
 d this issues can tell me "is it a bug"?<br><br>Thanks!<br><br><br></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span></blockquote></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>