Hi Laurent,
On Mon, Feb 13, 2017 at 11:05 AM, Geert Uytterhoeven
<[email protected]> wrote:
> On Sun, Feb 12, 2017 at 2:13 PM, Laurent Pinchart
> <[email protected]> wrote:
>> The following changes since commit 5685cab84a6dc376a8d0e4534ae4b973546158b4:
>>
>> Merge remote-tracking branch 'drm-misc/drm-misc-next' into drm/next/base
>> (2017-02-12 13:18:50 +0200)
>>
>> are available in the git repository at:
>>
>> git://linuxtv.org/pinchartl/media.git drm/next/du
>>
>> for you to fetch changes up to a194138cd82dff52d4c39895fd89dc6f26eafc97:
>>
>> drm: rcar-du: Use DRM core's atomic commit helper (2017-02-12 14:15:36
>> +0200)
>
> Thank you, scheduled for inclusion in next renesas-drivers release
> (probably renesas-drivers-2017-02-21-v4.10).
Hit send too soon...
Note that it already fails to merge cleanly into today's linux-next (holding
wood, rabbit ears and tails, ... for next week). My untested resolution:
diff --cc drivers/gpu/drm/drm_atomic.c
index a5673107db26c403,428743efc031e717..0000000000000000
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@@ -1938,8 -1949,8 +1949,8 @@@ static int prepare_crtc_signaling(struc
if (arg->flags & DRM_MODE_ATOMIC_TEST_ONLY)
return 0;
- for_each_crtc_in_state(state, crtc, crtc_state, i) {
+ for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
- u64 __user *fence_ptr;
+ s32 __user *fence_ptr;
fence_ptr = get_out_fence_for_crtc(crtc_state->state, crtc);
@@@ -2018,17 -2029,14 +2029,17 @@@ static void complete_crtc_signaling(str
return;
}
- for_each_crtc_in_state(state, crtc, crtc_state, i) {
+ for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
+ struct drm_pending_vblank_event *event = crtc_state->event;
/*
- * TEST_ONLY and PAGE_FLIP_EVENT are mutually
- * exclusive, if they weren't, this code should be
- * called on success for TEST_ONLY too.
+ * Free the allocated event. drm_atomic_helper_setup_commit
+ * can allocate an event too, so only free it if it's ours
+ * to prevent a double free in drm_atomic_state_clear.
*/
- if (crtc_state->event)
- drm_event_cancel_free(dev, &crtc_state->event->base);
+ if (event && (event->base.fence || event->base.file_priv)) {
+ drm_event_cancel_free(dev, &event->base);
+ crtc_state->event = NULL;
+ }
}
if (!fence_state)
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds