Displaying 20 results from an estimated 28 matches for "vblank_time_lock".
2013 Aug 27
0
[PATCH 6/9] drm/nouveau: Convert event handler list to RCU
Lockdep report [1] correctly identifies a potential deadlock between
nouveau_drm_vblank_enable() and nouveau_drm_vblank_handler() due
to inverted lock order of event->lock with drm core's
dev->vblank_time_lock.
Fix vblank event deadlock by converting event handler list to RCU.
List updates remain serialized by event->lock.
List traversal & handler execution is lockless which prevents
inverted lock order problems with the drm core.
Safe deletion of the event handler is accomplished with
synchroniz...
2013 Aug 12
2
[PATCH] drm/nouveau: fix vblank deadlock
This fixes a deadlock inversion when vblank is enabled/disabled by drm.
&dev->vblank_time_lock is always taken when the vblank state is toggled,
which caused a deadlock when &event->lock was also taken during
event_get/put.
Solve the race by requiring that lock to change enable/disable state,
and always keeping vblank on the event list. Core drm ignores unwanted
vblanks, so extra cal...
2013 Aug 19
0
[PATCH] drm/nouveau: fix vblank deadlock
On 08/12/2013 07:50 AM, Maarten Lankhorst wrote:
> This fixes a deadlock inversion when vblank is enabled/disabled by drm.
> &dev->vblank_time_lock is always taken when the vblank state is toggled,
> which caused a deadlock when &event->lock was also taken during
> event_get/put.
>
> Solve the race by requiring that lock to change enable/disable state,
> and always keeping vblank on the event list. Core drm ignores unwant...
2017 Jul 16
3
[drm/nouveau] GeForce 8600 GT boot/suspend grumbling
...oth 8600 GT and GTX 980.
---
drivers/gpu/drm/drm_vblank.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -323,6 +323,14 @@ void drm_vblank_disable_and_save(struct
spin_lock_irqsave(&dev->vblank_time_lock, irqflags);
/*
+ * Always update the count and timestamp to maintain the
+ * appearance that the counter has been ticking all along until
+ * this time. This makes the count account for the entire time
+ * between drm_crtc_vblank_on() and drm_crtc_vblank_off().
+ */
+ drm_update_vblank_cou...
2020 Jan 12
2
[PATCH 23/23] drm: Cleanup VBLANK callbacks in struct drm_driver
...;
> - !crtc->funcs->get_vblank_timestamp &&
> - !dev->driver->get_vblank_timestamp,
> + !crtc->funcs->get_vblank_timestamp,
> "This function requires support for accurate vblank timestamps.");
>
> spin_lock_irqsave(&dev->vblank_time_lock, flags);
> @@ -357,13 +355,11 @@ static void __disable_vblank(struct drm_device *dev, unsigned int pipe)
> if (WARN_ON(!crtc))
> return;
>
> - if (crtc->funcs->disable_vblank) {
> + if (crtc->funcs->disable_vblank)
> crtc->funcs->disable_vblank(...
2020 Jan 10
0
[PATCH 23/23] drm: Cleanup VBLANK callbacks in struct drm_driver
..._enabled(DRM_UT_VBL) &&
- !crtc->funcs->get_vblank_timestamp &&
- !dev->driver->get_vblank_timestamp,
+ !crtc->funcs->get_vblank_timestamp,
"This function requires support for accurate vblank timestamps.");
spin_lock_irqsave(&dev->vblank_time_lock, flags);
@@ -357,13 +355,11 @@ static void __disable_vblank(struct drm_device *dev, unsigned int pipe)
if (WARN_ON(!crtc))
return;
- if (crtc->funcs->disable_vblank) {
+ if (crtc->funcs->disable_vblank)
crtc->funcs->disable_vblank(crtc);
- return;
- }
+ } else {...
2013 Aug 27
11
[PATCH 0/9] drm/nouveau: Cleanup event/handler design
This series was originally motivated by a deadlock, introduced in
commit 1d7c71a3e2f77336df536855b0efd2dc5bdeb41b
'drm/nouveau/disp: port vblank handling to event interface',
due to inverted lock order between nouveau_drm_vblank_enable()
and nouveau_drm_vblank_handler() (the complete
lockdep report is included in the patch 4/5 changelog).
Because this series fixes the vblank event
2020 Mar 18
4
[PATCH 1/9] drm/vblank: Add vblank works
..._list);
> + work->state = DRM_VBL_WORK_SCHEDULED;
> + }
> +}
> +
> /**
> * drm_handle_vblank - handle a vblank event
> * @dev: DRM device
> @@ -1866,6 +1992,7 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)
>
> spin_unlock(&dev->vblank_time_lock);
>
> + drm_handle_vblank_works(vblank);
> wake_up(&vblank->queue);
>
> /* With instant-off, we defer disabling the interrupt until after
> @@ -2076,3 +2203,198 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data,
> kfree(e);
> return r...
2020 Jan 20
0
[PATCH v3 03/22] drm: Add get_vblank_timestamp() to struct drm_crtc_funcs
...>get_vblank_timestamp,
+ WARN_ONCE(drm_debug_enabled(DRM_UT_VBL) &&
+ !crtc->funcs->get_vblank_timestamp &&
+ !dev->driver->get_vblank_timestamp,
"This function requires support for accurate vblank timestamps.");
spin_lock_irqsave(&dev->vblank_time_lock, flags);
@@ -511,9 +513,9 @@ EXPORT_SYMBOL(drm_crtc_vblank_waitqueue);
*
* Calculate and store various constants which are later needed by vblank and
* swap-completion timestamping, e.g, by
- * drm_calc_vbltimestamp_from_scanoutpos(). They are derived from CRTC's true
- * scanout timing,...
2020 Jan 20
0
[Intel-gfx] [PATCH v3 03/22] drm: Add get_vblank_timestamp() to struct drm_crtc_funcs
...+ WARN_ONCE(drm_debug_enabled(DRM_UT_VBL) &&
> + !crtc->funcs->get_vblank_timestamp &&
> + !dev->driver->get_vblank_timestamp,
> "This function requires support for accurate vblank timestamps.");
>
> spin_lock_irqsave(&dev->vblank_time_lock, flags);
> @@ -511,9 +513,9 @@ EXPORT_SYMBOL(drm_crtc_vblank_waitqueue);
> *
> * Calculate and store various constants which are later needed by vblank and
> * swap-completion timestamping, e.g, by
> - * drm_calc_vbltimestamp_from_scanoutpos(). They are derived from CRTC's...
2020 May 08
0
[RFC v4 04/12] drm/vblank: Add vblank works
...(vblank->dev, vblank->pipe);
+ queue_vbl_work(work);
+ }
+ spin_unlock(&vblank->work_lock);
+}
+
/**
* drm_handle_vblank - handle a vblank event
* @dev: DRM device
@@ -1919,6 +2002,7 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)
spin_unlock(&dev->vblank_time_lock);
+ drm_handle_vblank_works(vblank);
wake_up(&vblank->queue);
/* With instant-off, we defer disabling the interrupt until after
@@ -2129,3 +2213,178 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data,
kfree(e);
return ret;
}
+
+/**
+ * drm_vblank_work_schedu...
2020 Mar 18
0
[PATCH 1/9] drm/vblank: Add vblank works
...mp;work->list, &vblank->vblank_work.work_list);
+ work->state = DRM_VBL_WORK_SCHEDULED;
+ }
+}
+
/**
* drm_handle_vblank - handle a vblank event
* @dev: DRM device
@@ -1866,6 +1992,7 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)
spin_unlock(&dev->vblank_time_lock);
+ drm_handle_vblank_works(vblank);
wake_up(&vblank->queue);
/* With instant-off, we defer disabling the interrupt until after
@@ -2076,3 +2203,198 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data,
kfree(e);
return ret;
}
+
+/**
+ * drm_vblank_work_schedu...
2020 Jun 22
0
[RFC v5 02/10] drm/vblank: Add vblank works
...nk->worker, &work->base))
+ work->pending--;
+ }
+ spin_unlock(&vblank->work_lock);
+}
+
/**
* drm_handle_vblank - handle a vblank event
* @dev: DRM device
@@ -1932,6 +2044,7 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)
spin_unlock(&dev->vblank_time_lock);
+ drm_handle_vblank_works(vblank);
wake_up(&vblank->queue);
/* With instant-off, we defer disabling the interrupt until after
@@ -2146,3 +2259,156 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data,
kfree(e);
return ret;
}
+
+/**
+ * drm_vblank_work_schedu...
2017 Jul 15
4
[drm/nouveau] GeForce 8600 GT boot/suspend grumbling
Greetings,
box: bog standard [tc]rusty old Nvidia equipped Q6600 Medion (Aldi) deskside
kernel: master.today (v4.12-11690-gccd5d1b91f22)
lspci -nn -d 10de:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G84 [GeForce 8600 GT] [10de:0402] (rev a1)
abreviated dmesg:
...
[ 3.720990] fb: switching to nouveaufb from VESA VGA
[ 3.744489] Console: switching to colour dummy device
2020 Mar 27
2
[PATCH 1/9] drm/vblank: Add vblank works
...gt; +
> > > /**
> > > * drm_handle_vblank - handle a vblank event
> > > * @dev: DRM device
> > > @@ -1866,6 +1992,7 @@ bool drm_handle_vblank(struct drm_device *dev,
> > > unsigned int pipe)
> > >
> > > spin_unlock(&dev->vblank_time_lock);
> > >
> > > + drm_handle_vblank_works(vblank);
> > > wake_up(&vblank->queue);
> > >
> > > /* With instant-off, we defer disabling the interrupt until after
> > > @@ -2076,3 +2203,198 @@ int drm_crtc_queue_sequence_ioctl(struct
&...
2020 Jan 15
0
[PATCH v2 03/21] drm: Add get_vblank_timestamp() to struct drm_crtc_funcs
...>get_vblank_timestamp,
+ WARN_ONCE(drm_debug_enabled(DRM_UT_VBL) &&
+ !crtc->funcs->get_vblank_timestamp &&
+ !dev->driver->get_vblank_timestamp,
"This function requires support for accurate vblank timestamps.");
spin_lock_irqsave(&dev->vblank_time_lock, flags);
@@ -511,9 +513,9 @@ EXPORT_SYMBOL(drm_crtc_vblank_waitqueue);
*
* Calculate and store various constants which are later needed by vblank and
* swap-completion timestamping, e.g, by
- * drm_calc_vbltimestamp_from_scanoutpos(). They are derived from CRTC's true
- * scanout timing,...
2020 Mar 27
0
[PATCH 1/9] drm/vblank: Add vblank works
...;
> > + }
> > +}
> > +
> > /**
> > * drm_handle_vblank - handle a vblank event
> > * @dev: DRM device
> > @@ -1866,6 +1992,7 @@ bool drm_handle_vblank(struct drm_device *dev,
> > unsigned int pipe)
> >
> > spin_unlock(&dev->vblank_time_lock);
> >
> > + drm_handle_vblank_works(vblank);
> > wake_up(&vblank->queue);
> >
> > /* With instant-off, we defer disabling the interrupt until after
> > @@ -2076,3 +2203,198 @@ int drm_crtc_queue_sequence_ioctl(struct
> > drm_device *dev, void...
2020 Apr 13
0
[PATCH 1/9] drm/vblank: Add vblank works
...> > > * drm_handle_vblank - handle a vblank event
> > > > * @dev: DRM device
> > > > @@ -1866,6 +1992,7 @@ bool drm_handle_vblank(struct drm_device *dev,
> > > > unsigned int pipe)
> > > >
> > > > spin_unlock(&dev->vblank_time_lock);
> > > >
> > > > + drm_handle_vblank_works(vblank);
> > > > wake_up(&vblank->queue);
> > > >
> > > > /* With instant-off, we defer disabling the interrupt until
> > > > after
> > > > @@ -2076,3 +2203...
2020 Jan 15
2
[Intel-gfx] [PATCH v2 03/21] drm: Add get_vblank_timestamp() to struct drm_crtc_funcs
...+ WARN_ONCE(drm_debug_enabled(DRM_UT_VBL) &&
> + !crtc->funcs->get_vblank_timestamp &&
> + !dev->driver->get_vblank_timestamp,
> "This function requires support for accurate vblank timestamps.");
>
> spin_lock_irqsave(&dev->vblank_time_lock, flags);
> @@ -511,9 +513,9 @@ EXPORT_SYMBOL(drm_crtc_vblank_waitqueue);
> *
> * Calculate and store various constants which are later needed by vblank and
> * swap-completion timestamping, e.g, by
> - * drm_calc_vbltimestamp_from_scanoutpos(). They are derived from CRTC's...
2020 Jan 16
0
[Intel-gfx] [PATCH v2 03/21] drm: Add get_vblank_timestamp() to struct drm_crtc_funcs
...ug_enabled(DRM_UT_VBL) &&
>> + !crtc->funcs->get_vblank_timestamp &&
>> + !dev->driver->get_vblank_timestamp,
>> "This function requires support for accurate vblank timestamps.");
>>
>> spin_lock_irqsave(&dev->vblank_time_lock, flags);
>> @@ -511,9 +513,9 @@ EXPORT_SYMBOL(drm_crtc_vblank_waitqueue);
>> *
>> * Calculate and store various constants which are later needed by vblank and
>> * swap-completion timestamping, e.g, by
>> - * drm_calc_vbltimestamp_from_scanoutpos(). They are deri...