if (nonblock && state->modeset) {
queue_work(dev_priv->modeset_wq, &state->base.commit_work);
} else if (nonblock) {
- queue_work(system_unbound_wq, &state->base.commit_work);
+ queue_work(dev_priv->flip_wq, &state->base.commit_work);
} else {
if (state->modeset)
flush_workqueue(dev_priv->modeset_wq);
int ret;
dev_priv->modeset_wq = alloc_ordered_workqueue("i915_modeset", 0);
+ dev_priv->flip_wq = alloc_workqueue("i915_flip", WQ_HIGHPRI |
+ WQ_UNBOUND, WQ_UNBOUND_MAX_ACTIVE);
drm_mode_config_init(dev);
{
struct drm_i915_private *dev_priv = to_i915(dev);
+ flush_workqueue(dev_priv->flip_wq);
flush_workqueue(dev_priv->modeset_wq);
flush_work(&dev_priv->atomic_helper.free_work);
intel_gmbus_teardown(dev_priv);
+ destroy_workqueue(dev_priv->flip_wq);
destroy_workqueue(dev_priv->modeset_wq);
intel_fbc_cleanup_cfb(dev_priv);
/* ordered wq for modesets */
struct workqueue_struct *modeset_wq;
+ /* unbound hipri wq for page flips/plane updates */
+ struct workqueue_struct *flip_wq;
/* Display functions */
struct drm_i915_display_funcs display;