[rebase 1/3] drm: Add drm_vblank_work_flush_all().

Maarten Lankhorst dev at lankhorst.se
Sat Apr 6 17:45:16 UTC 2024


Hey,

On 2024-04-05 15:36, Lucas De Marchi wrote:
> what does "rebase" instead of "PATCH" is supposed to mean here?
> And then we have a "PATCH v2" as reply to this one.
> 
> Shouldn't this go to dri-devel (too)?
> 
> Lucas De Marchi
I was rebasing so no changes were originally made.

Afterwards I found out why the patch series failed,
and sent a v2 patch for that specifically.

I think this should go to dri-devel, forgot this patch required it. :)

Can send a full v2 patch series in the beginning of next week. It looks 
like I still missed a uaf even with this fix. :(

Cheers,
~Maarten

> 
> On Thu, Apr 04, 2024 at 12:48:11PM +0200, Maarten Lankhorst wrote:
>> From: Maarten Lankhorst <dev at lankhorst.se>
>>
>> In some cases we want to flush all vblank work, right before vblank_off
>> for example. Add a simple function to make this possible.
>>
>> Signed-off-by: Maarten Lankhorst <dev at lankhorst.se>
>> ---
>> drivers/gpu/drm/drm_vblank_work.c | 22 ++++++++++++++++++++++
>> include/drm/drm_vblank_work.h     |  2 ++
>> 2 files changed, 24 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/drm_vblank_work.c 
>> b/drivers/gpu/drm/drm_vblank_work.c
>> index 43cd5c0f4f6f..ff86f2b2e052 100644
>> --- a/drivers/gpu/drm/drm_vblank_work.c
>> +++ b/drivers/gpu/drm/drm_vblank_work.c
>> @@ -232,6 +232,28 @@ void drm_vblank_work_flush(struct drm_vblank_work 
>> *work)
>> }
>> EXPORT_SYMBOL(drm_vblank_work_flush);
>>
>> +/**
>> + * drm_vblank_work_flush_all - flush all currently pending vblank 
>> work on crtc.
>> + * @crtc: crtc for which vblank work to flush
>> + *
>> + * Wait until all currently queued vblank work on @crtc
>> + * has finished executing once.
>> + */
>> +void drm_vblank_work_flush_all(struct drm_crtc *crtc)
>> +{
>> +    struct drm_device *dev = crtc->dev;
>> +    struct drm_vblank_crtc *vblank = &dev->vblank[drm_crtc_index(crtc)];
>> +
>> +    spin_lock_irq(&dev->event_lock);
>> +    wait_event_lock_irq(vblank->work_wait_queue,
>> +                waitqueue_active(&vblank->work_wait_queue),
>> +                dev->event_lock);
>> +    spin_unlock_irq(&dev->event_lock);
>> +
>> +    kthread_flush_worker(vblank->worker);
>> +}
>> +EXPORT_SYMBOL(drm_vblank_work_flush_all);
>> +
>> /**
>>  * drm_vblank_work_init - initialize a vblank work item
>>  * @work: vblank work item
>> diff --git a/include/drm/drm_vblank_work.h 
>> b/include/drm/drm_vblank_work.h
>> index eb41d0810c4f..e04d436b7297 100644
>> --- a/include/drm/drm_vblank_work.h
>> +++ b/include/drm/drm_vblank_work.h
>> @@ -17,6 +17,7 @@ struct drm_crtc;
>>  * drm_vblank_work_init()
>>  * drm_vblank_work_cancel_sync()
>>  * drm_vblank_work_flush()
>> + * drm_vblank_work_flush_all()
>>  */
>> struct drm_vblank_work {
>>     /**
>> @@ -67,5 +68,6 @@ void drm_vblank_work_init(struct drm_vblank_work 
>> *work, struct drm_crtc *crtc,
>>               void (*func)(struct kthread_work *work));
>> bool drm_vblank_work_cancel_sync(struct drm_vblank_work *work);
>> void drm_vblank_work_flush(struct drm_vblank_work *work);
>> +void drm_vblank_work_flush_all(struct drm_crtc *crtc);
>>
>> #endif /* !_DRM_VBLANK_WORK_H_ */
>> -- 
>> 2.43.0
>>


More information about the Intel-gfx mailing list