All of lore.kernel.org
 help / color / mirror / Atom feed
From: 김승우 <sw0312.kim@samsung.com>
To: Rob Clark <rob.clark@linaro.org>
Cc: daniel.vetter@ffwll.ch, dri-devel@lists.freedesktop.org,
	kyungmin.park@samsung.com, alexander.deucher@amd.com
Subject: Re: [PATCH] drm/prime: drop reference on imported dma-buf come from gem
Date: Thu, 27 Sep 2012 16:14:11 +0900	[thread overview]
Message-ID: <5063FCC3.8070106@samsung.com> (raw)
In-Reply-To: <CAF6AEGs43pTWDgcqtLoh=jSWboYzQMzBkBDUh-07yZM6Lh2euw@mail.gmail.com>

Hi Rob,

On 2012년 09월 27일 15:52, Rob Clark wrote:
> fwiw, I had a similar patch:
> 
> https://patchwork.kernel.org/patch/1229161/

Yes, I already check your patch and even my patch's title is a bit from
your patch.

I thought locking issue blocks your patch, so I sent simple fixes on
current state. How do you think merging bug-fixes at first?

Best Regards,
- Seung-Woo Kim

> 
> although it was on top of some locking fixes from Daniel (which I
> think are also needed):
> 
> https://patchwork.kernel.org/patch/1227251/
> 
> although that seemed to cause/trigger some explosions which I think
> still need to be debugged..
> 
> BR,
> -R
> 
> On Thu, Sep 27, 2012 at 8:30 AM, Seung-Woo Kim <sw0312.kim@samsung.com> wrote:
>> 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>
>> ---
>>  drivers/gpu/drm/exynos/exynos_drm_dmabuf.c |    5 +++++
>>  drivers/gpu/drm/i915/i915_gem_dmabuf.c     |    5 +++++
>>  drivers/gpu/drm/nouveau/nouveau_prime.c    |    1 +
>>  drivers/gpu/drm/radeon/radeon_prime.c      |    1 +
>>  drivers/staging/omapdrm/omap_gem_dmabuf.c  |    5 +++++
>>  5 files changed, 17 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
>> index ae13feb..b0897c9 100644
>> --- a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
>> +++ b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
>> @@ -211,7 +211,12 @@ struct drm_gem_object *exynos_dmabuf_prime_import(struct drm_device *drm_dev,
>>
>>                 /* is it from our device? */
>>                 if (obj->dev == drm_dev) {
>> +                       /*
>> +                        * Importing dmabuf exported from out own gem increases
>> +                        * refcount on gem itself instead of f_count of dmabuf.
>> +                        */
>>                         drm_gem_object_reference(obj);
>> +                       dma_buf_put(dma_buf);
>>                         return obj;
>>                 }
>>         }
>> diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>> index aa308e1..32e6287 100644
>> --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>> +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
>> @@ -188,7 +188,12 @@ struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev,
>>                 obj = dma_buf->priv;
>>                 /* is it from our device? */
>>                 if (obj->base.dev == dev) {
>> +                       /*
>> +                        * Importing dmabuf exported from out own gem increases
>> +                        * refcount on gem itself instead of f_count of dmabuf.
>> +                        */
>>                         drm_gem_object_reference(&obj->base);
>> +                       dma_buf_put(dma_buf);
>>                         return &obj->base;
>>                 }
>>         }
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_prime.c b/drivers/gpu/drm/nouveau/nouveau_prime.c
>> index a25cf2c..bb653c6 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_prime.c
>> +++ b/drivers/gpu/drm/nouveau/nouveau_prime.c
>> @@ -199,6 +199,7 @@ struct drm_gem_object *nouveau_gem_prime_import(struct drm_device *dev,
>>                 if (nvbo->gem) {
>>                         if (nvbo->gem->dev == dev) {
>>                                 drm_gem_object_reference(nvbo->gem);
>> +                               dma_buf_put(dma_buf);
>>                                 return nvbo->gem;
>>                         }
>>                 }
>> diff --git a/drivers/gpu/drm/radeon/radeon_prime.c b/drivers/gpu/drm/radeon/radeon_prime.c
>> index 6bef46a..d344a3be 100644
>> --- a/drivers/gpu/drm/radeon/radeon_prime.c
>> +++ b/drivers/gpu/drm/radeon/radeon_prime.c
>> @@ -195,6 +195,7 @@ struct drm_gem_object *radeon_gem_prime_import(struct drm_device *dev,
>>                 bo = dma_buf->priv;
>>                 if (bo->gem_base.dev == dev) {
>>                         drm_gem_object_reference(&bo->gem_base);
>> +                       dma_buf_put(dma_buf);
>>                         return &bo->gem_base;
>>                 }
>>         }
>> diff --git a/drivers/staging/omapdrm/omap_gem_dmabuf.c b/drivers/staging/omapdrm/omap_gem_dmabuf.c
>> index 42728e0..5b50eb6 100644
>> --- a/drivers/staging/omapdrm/omap_gem_dmabuf.c
>> +++ b/drivers/staging/omapdrm/omap_gem_dmabuf.c
>> @@ -207,7 +207,12 @@ struct drm_gem_object * omap_gem_prime_import(struct drm_device *dev,
>>                 obj = buffer->priv;
>>                 /* is it from our device? */
>>                 if (obj->dev == dev) {
>> +                       /*
>> +                        * Importing dmabuf exported from out own gem increases
>> +                        * refcount on gem itself instead of f_count of dmabuf.
>> +                        */
>>                         drm_gem_object_reference(obj);
>> +                       dma_buf_put(buffer);
>>                         return obj;
>>                 }
>>         }
>> --
>> 1.7.4.1
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
> 

-- 
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

  reply	other threads:[~2012-09-27  7:14 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   ` 김승우 [this message]
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     ` 김승우
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=5063FCC3.8070106@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=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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.