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