drm_vblank_offdelay is currently a system global, despite the optimal value being hardware-specific. Move it to the drm_device structure. Signed-off-by: Matthew Garrett <mjg at redhat.com> --- drivers/gpu/drm/drm_irq.c | 6 +++--- drivers/gpu/drm/drm_stub.c | 8 +++++--- include/drm/drmP.h | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index cb3794a..8bcb6a4 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c @@ -928,7 +928,7 @@ EXPORT_SYMBOL(drm_vblank_get); * @crtc: which counter to give up * * Release ownership of a given vblank counter, turning off interrupts - * if possible. Disable interrupts after drm_vblank_offdelay milliseconds. + * if possible. Disable interrupts after vblank_offdelay milliseconds. */ void drm_vblank_put(struct drm_device *dev, int crtc) { @@ -936,9 +936,9 @@ void drm_vblank_put(struct drm_device *dev, int crtc) /* Last user schedules interrupt disable */ if (atomic_dec_and_test(&dev->vblank_refcount[crtc]) && - (drm_vblank_offdelay > 0)) + (dev->vblank_offdelay > 0)) mod_timer(&dev->vblank_disable_timer, - jiffies + ((drm_vblank_offdelay * DRM_HZ)/1000)); + jiffies + ((dev->vblank_offdelay * DRM_HZ)/1000)); } EXPORT_SYMBOL(drm_vblank_put); diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index 6d7b083..189a077 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c @@ -40,8 +40,8 @@ unsigned int drm_debug = 0; /* 1 to enable debug output */ EXPORT_SYMBOL(drm_debug); -unsigned int drm_vblank_offdelay = 5000; /* Default to 5000 msecs. */ -EXPORT_SYMBOL(drm_vblank_offdelay); +unsigned int drm_default_vblank_offdelay = 5000; /* Default to 5000 msecs. */ +EXPORT_SYMBOL(drm_default_vblank_offdelay); unsigned int drm_timestamp_precision = 20; /* Default to 20 usecs. */ EXPORT_SYMBOL(drm_timestamp_precision); @@ -54,7 +54,7 @@ MODULE_PARM_DESC(vblankoffdelay, "Delay until vblank irq auto-disable [msecs]"); MODULE_PARM_DESC(timestamp_precision_usec, "Max. error on timestamps [usecs]"); module_param_named(debug, drm_debug, int, 0600); -module_param_named(vblankoffdelay, drm_vblank_offdelay, int, 0600); +module_param_named(vblankoffdelay, drm_default_vblank_offdelay, int, 0600); module_param_named(timestamp_precision_usec, drm_timestamp_precision, int, 0600); struct idr drm_minors_idr; @@ -290,6 +290,8 @@ int drm_fill_in_dev(struct drm_device *dev, dev->driver = driver; + dev->vblank_offdelay = drm_default_vblank_offdelay; + if (dev->driver->bus->agp_init) { retcode = dev->driver->bus->agp_init(dev); if (retcode) diff --git a/include/drm/drmP.h b/include/drm/drmP.h index cf39949..81e6bbb 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -1168,6 +1168,7 @@ struct drm_device { struct idr object_name_idr; /*@} */ int switch_power_state; + int vblank_offdelay; }; #define DRM_SWITCH_POWER_ON 0 @@ -1463,7 +1464,6 @@ extern void drm_put_dev(struct drm_device *dev); extern int drm_put_minor(struct drm_minor **minor); extern unsigned int drm_debug; -extern unsigned int drm_vblank_offdelay; extern unsigned int drm_timestamp_precision; extern struct class *drm_class; -- 1.7.7.1