mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-24 06:36:09 +07:00
drm/i915: Use a high priority wq for nonblocking plane updates
system_unbound_wq can't keep up sometimes and we get dropped frames. Switch to a high priority variant. Reported-by: Heinrich Fink <heinrich.fink@daqri.com> Tested-by: Heinrich Fink <heinrich.fink@daqri.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190910121347.22958-1-ville.syrjala@linux.intel.com Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
43ed22753c
commit
c26a058680
@ -14272,7 +14272,7 @@ static int intel_atomic_commit(struct drm_device *dev,
|
||||
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);
|
||||
@ -16181,6 +16181,8 @@ int intel_modeset_init(struct drm_device *dev)
|
||||
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);
|
||||
|
||||
@ -17139,6 +17141,7 @@ void intel_modeset_driver_remove(struct drm_device *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);
|
||||
@ -17175,6 +17178,7 @@ void intel_modeset_driver_remove(struct drm_device *dev)
|
||||
|
||||
intel_gmbus_teardown(dev_priv);
|
||||
|
||||
destroy_workqueue(dev_priv->flip_wq);
|
||||
destroy_workqueue(dev_priv->modeset_wq);
|
||||
|
||||
intel_fbc_cleanup_cfb(dev_priv);
|
||||
|
@ -1438,6 +1438,8 @@ struct drm_i915_private {
|
||||
|
||||
/* 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;
|
||||
|
Loading…
Reference in New Issue
Block a user