@@ -521,12 +521,8 @@ void intel_pipe_update_start(struct intel_atomic_state *state,
521
521
intel_psr_lock (new_crtc_state );
522
522
523
523
if (new_crtc_state -> do_async_flip ) {
524
- spin_lock_irq (& crtc -> base .dev -> event_lock );
525
- /* arm the event for the flip done irq handler */
526
- crtc -> flip_done_event = new_crtc_state -> uapi .event ;
527
- spin_unlock_irq (& crtc -> base .dev -> event_lock );
528
-
529
- new_crtc_state -> uapi .event = NULL ;
524
+ intel_crtc_prepare_vblank_event (new_crtc_state ,
525
+ & crtc -> flip_done_event );
530
526
return ;
531
527
}
532
528
@@ -626,6 +622,19 @@ void intel_crtc_arm_vblank_event(struct intel_crtc_state *crtc_state)
626
622
crtc_state -> uapi .event = NULL ;
627
623
}
628
624
625
+ void intel_crtc_prepare_vblank_event (struct intel_crtc_state * crtc_state ,
626
+ struct drm_pending_vblank_event * * event )
627
+ {
628
+ struct intel_crtc * crtc = to_intel_crtc (crtc_state -> uapi .crtc );
629
+ unsigned long irqflags ;
630
+
631
+ spin_lock_irqsave (& crtc -> base .dev -> event_lock , irqflags );
632
+ * event = crtc_state -> uapi .event ;
633
+ spin_unlock_irqrestore (& crtc -> base .dev -> event_lock , irqflags );
634
+
635
+ crtc_state -> uapi .event = NULL ;
636
+ }
637
+
629
638
/**
630
639
* intel_pipe_update_end() - end update of a set of display registers
631
640
* @state: the atomic state
0 commit comments