From: 김승우 <sw0312.kim@samsung.com>
To: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Cc: daniel.vetter@ffwll.ch, sw0312.kim@samsung.com,
dri-devel@lists.freedesktop.org, rob.clark@linaro.org,
kyungmin.park@samsung.com, alexander.deucher@amd.com
Subject: Re: [RESEND][PATCH] drm/prime: drop reference on imported dma-buf come from gem
Date: Tue, 20 Nov 2012 10:03:18 +0900 [thread overview]
Message-ID: <50AAD6D6.9080600@samsung.com> (raw)
In-Reply-To: <50AA09A0.7060904@canonical.com>
Hi Maarten,
On 2012년 11월 19일 19:27, Maarten Lankhorst wrote:
> Op 15-11-12 04:52, Seung-Woo Kim schreef:
>> Increasing ref counts of both dma-buf and gem for imported dma-buf
>> come from gem makes memory leak. release function of dma-buf cannot
>> be called because f_count of dma-buf increased by importing gem and
>> gem ref count cannot be decrease because of exported dma-buf.
>>
>> So I add dma_buf_put() for imported gem come from its own gem into
>> each drivers having prime_import and prime_export capabilities. With
>> this, only gem ref count is increased if importing gem exported from
>> gem of same driver.
>>
>> Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
>> Signed-off-by: Kyungmin.park <kyungmin.park@samsung.com>
>> Cc: Inki Dae <inki.dae@samsung.com>
>> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
>> Cc: Rob Clark <rob.clark@linaro.org>
>> Cc: Alex Deucher <alexander.deucher@amd.com>
>> ---
>> Mmap failiure in i915 was reported by Jani, and I think it was fixed
>> with Dave's commit "drm/prime: add exported buffers to current fprivs
>> imported buffer list (v2)", so I resend this patch.
>>
>> I can send exynos only, but this issue is common in all drm driver
>> having both prime inport and export, IMHO, it's better to send for
>> all drivers.
> I fear that this won't solve the issue completely and keeps open a small race.
I don't believe my patch can fix all issue related with gem prime
completely. But it seems that it can solve unrecoverable memory leak
caused by re-importing GEM. Anyway, can you give me an example of other
race issue?
>
> I don't like the current destruction path either. It really looks like export_dma_buf
> should be unset when the exported buffer is closed in the original file. Anything else is racy.
> Especially setting export_dma_buf to NULL won't work with the current delayed fput semantics.
I cannot figure out all aspect of delayed fput, but until delayed work
is called, dma_buf is not released so export_dma_buf is valid.
Considering this, I can't find possible issue of delayed fput.
>
> So to me it seems instead we should do something like this:
>
> - dmabuf_release callback is a noop, no ref is held by the dma-buf.
> - attach and detach ops increase reference by 1*.
>
> - when the buffer is exported, export_dma_buf is set by core code and kept around
> alive until the gem object is closed.
>
> - dma_buf_put is not called by import function. This reference removed as part
> of gem object close instead.
Considering re-import, where drm file priv is different from exporter's
file priv, attach and detach are not called because gem object is reused.
How do you think remove checking whether dma_buf is came from driver own
exporter? Because without this checking, gem object is newly created,
and then re-import issue will disappear.
Thanks and Regards,
- Seung-Woo Kim
>
> ~Maarten
>
> *) Lockdep will rightfully hate this as it reopens a locking inversion, some solution for that is needed.
>
> Maybe a post detach callback for dma-buf with all locks dropped would be best here?
> Other way would be to schedule delayed work with the sole purpose of unreffing in the detach op,
> similar to how atomic_dec_and_mutex_lock works.
>
>
--
Seung-Woo Kim
Samsung Software R&D Center
--
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2012-11-20 1:03 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-27 6:30 [PATCH] drm/prime: drop reference on imported dma-buf come from gem Seung-Woo Kim
2012-09-27 6:52 ` Rob Clark
2012-09-27 7:14 ` 김승우
2012-09-27 7:38 ` Rob Clark
2012-09-27 13:43 ` Jani Nikula
2012-11-03 7:59 ` 김승우
2012-11-15 3:52 ` [RESEND][PATCH] " Seung-Woo Kim
2012-11-19 8:40 ` Inki Dae
2012-11-19 10:27 ` Maarten Lankhorst
2012-11-20 1:03 ` 김승우 [this message]
2012-11-20 10:26 ` Maarten Lankhorst
2012-11-21 5:28 ` 김승우
2012-12-18 6:30 ` [PATCH] " Dave Airlie
2012-12-18 6:59 ` 김승우
2012-12-20 0:48 ` Dave Airlie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50AAD6D6.9080600@samsung.com \
--to=sw0312.kim@samsung.com \
--cc=alexander.deucher@amd.com \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=kyungmin.park@samsung.com \
--cc=maarten.lankhorst@canonical.com \
--cc=rob.clark@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox