> +#undef set_base > + > struct drm_prop_enum_list { > int type; > char *name; > @@ -342,6 +344,34 @@ void drm_framebuffer_cleanup(struct drm_framebuffer *fb) > EXPORT_SYMBOL(drm_framebuffer_cleanup); > > /** > + * drm_crtc_async_flip - do a set_base call from a work queue > + * @work: work struct > + * > + * Called when a set_base call is queued by the page flip code. This > + * allows the flip ioctl itself to return immediately and allow userspace > + * to continue working. > + */ > +static void drm_crtc_async_flip(struct work_struct *work) > +{ > + struct drm_crtc *crtc = container_of(work, struct drm_crtc, > async_flip); > + struct drm_device *dev = crtc->dev; > + struct drm_pending_flip *pending; > + > + BUG_ON(crtc->pending_flip == NULL); > + > + mutex_lock(&dev->struct_mutex);
I'm not sure locking mode objects here will help though. I assume drm_crtc can't go away while this is scheduled. > + crtc->funcs->set_base(crtc, crtc->x, crtc->y, NULL); > + > + pending = crtc->pending_flip; > + crtc->pending_flip = NULL; > + > + pending->frame = drm_vblank_count(dev, crtc->pipe); > + list_add_tail(&pending->link, &dev->flip_list); > + > + mutex_unlock(&dev->struct_mutex); > +} <snipped> > + */ > +int drm_mode_page_flip_ioctl(struct drm_device *dev, void *data, > + struct drm_file *file_priv) > +{ > + struct drm_pending_flip *pending; > + struct drm_mode_page_flip *flip_data = data; > + struct drm_mode_object *drm_obj, *fb_obj; > + struct drm_crtc *crtc; > + int ret = 0; > + > + if (!(drm_core_check_feature(dev, DRIVER_MODESET))) > + return -ENODEV; > + > + /* > + * Reject unknown flags so future userspace knows what we (don't) > + * support > + */ > + if (flip_data->flags & (~DRM_MODE_PAGE_FLIP_FLAGS_MASK)) { > + DRM_DEBUG("bad page flip flags\n"); > + return -EINVAL; > + } > + > + pending = kzalloc(sizeof *pending, GFP_KERNEL); > + if (pending == NULL) > + return -ENOMEM; > + > + mutex_lock(&dev->struct_mutex); I suspect this should be locking dev->mode_config.mutex which is what is need to protect mode objects, not struct_mutex. Dave. ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july -- _______________________________________________ Dri-devel mailing list Dri-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dri-devel