From: Mark yao <mark.yao@rock-chips.com>
To: Tomasz Figa <tfiga@chromium.org>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
dri-devel <dri-devel@lists.freedesktop.org>,
"open list:ARM/Rockchip SoC..."
<linux-rockchip@lists.infradead.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 2/8] drm/rockchip: Get rid of some unnecessary code
Date: Tue, 20 Sep 2016 09:36:12 +0800 [thread overview]
Message-ID: <57E0928C.8080103@rock-chips.com> (raw)
In-Reply-To: <CAAFQd5A0M6vAbXHhUDMMXsaWND0hzWcT71HzOsSSCHa--qh0dA@mail.gmail.com>
On 2016年09月18日 12:01, Tomasz Figa wrote:
> Hi Mark,
>
> On Sun, Sep 18, 2016 at 10:50 AM, Mark yao <mark.yao@rock-chips.com> wrote:
>> On 2016年09月14日 20:54, Tomasz Figa wrote:
>>> Current code implements prepare_fb and cleanup_fb callbacks only to
>>> grab/release fb references, which is already done by atomic framework
>>> when creating/destryoing plane state. Let's remove these
>>> unused bits.
>>>
>>> Signed-off-by: Tomasz Figa <tfiga@chromium.org>
>>> ---
>>> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 18 ------------------
>>> 1 file changed, 18 deletions(-)
>>
>> Hi Tomasz
>>
>> I think we can't get rid of the prepare_fb and cleanup_fb
> I think I have to disagree. Please see below for detailed explanation.
>
>> see the reason:
>> commit 44d0237a26395ac94160cf23f32769013b365590
>> Author: Mark Yao <mark.yao@rock-chips.com>
>> Date: Fri Apr 29 11:37:20 2016 +0800
>>
>> drm/rockchip: vop: fix iommu crash with async atomic
>>
>> After async atomic_commit callback, drm_atomic_clean_old_fb will
>> clean all old fb, but because async, the old fb may be also on
>> the vop hardware, dma will access the old fb buffer, clean old
>> fb will cause iommu page fault.
> I think the above is not quite right. Atomic plane state holds a
> reference to its fb and old state is not supposed to be destroyed
> until the flip completes.
>
> Indeed current rockchip_atomic_commit implementation has following
> order of calls: rockchip_atomic_wait_for_complete(),
> drm_atomic_helper_cleanup_planes(), drm_atomic_state_free(). This
> means that .cleanup_fb() is called from
> drm_atomic_helper_cleanup_planes() just before drm_atomic_state_free()
> will release references by destroying old plane states. Note that both
> are called already after rockchip_atomic_wait_for_complete(), so it
> should be already safe to free the old fbs.
>
> So the above fix doesn't really do anything, possibly just covers the
> race condition of the original wait for vblank function by delaying
> drm_atomic_state_free() a bit.
>
> Moreover, the whole series has been thoroughly tested in Chrome OS 4.4
> kernel, including async commits. (There is still a possibility some
> newer upstream changes slightly modified the semantics, but I couldn't
> find such difference. Actually one of the advantages of atomic helpers
> was to avoid manually refcounting the fbs from the driver.)
>
> Best regards,
> Tomasz
>
Hi Tomasz
You are right, plane_duplicate_state/plane_destroy_state already protect
the old fbs.
we can get rid of prepare_fb and cleanup_fb.
--
Mark Yao
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: mark.yao@rock-chips.com (Mark yao)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/8] drm/rockchip: Get rid of some unnecessary code
Date: Tue, 20 Sep 2016 09:36:12 +0800 [thread overview]
Message-ID: <57E0928C.8080103@rock-chips.com> (raw)
In-Reply-To: <CAAFQd5A0M6vAbXHhUDMMXsaWND0hzWcT71HzOsSSCHa--qh0dA@mail.gmail.com>
On 2016?09?18? 12:01, Tomasz Figa wrote:
> Hi Mark,
>
> On Sun, Sep 18, 2016 at 10:50 AM, Mark yao <mark.yao@rock-chips.com> wrote:
>> On 2016?09?14? 20:54, Tomasz Figa wrote:
>>> Current code implements prepare_fb and cleanup_fb callbacks only to
>>> grab/release fb references, which is already done by atomic framework
>>> when creating/destryoing plane state. Let's remove these
>>> unused bits.
>>>
>>> Signed-off-by: Tomasz Figa <tfiga@chromium.org>
>>> ---
>>> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 18 ------------------
>>> 1 file changed, 18 deletions(-)
>>
>> Hi Tomasz
>>
>> I think we can't get rid of the prepare_fb and cleanup_fb
> I think I have to disagree. Please see below for detailed explanation.
>
>> see the reason:
>> commit 44d0237a26395ac94160cf23f32769013b365590
>> Author: Mark Yao <mark.yao@rock-chips.com>
>> Date: Fri Apr 29 11:37:20 2016 +0800
>>
>> drm/rockchip: vop: fix iommu crash with async atomic
>>
>> After async atomic_commit callback, drm_atomic_clean_old_fb will
>> clean all old fb, but because async, the old fb may be also on
>> the vop hardware, dma will access the old fb buffer, clean old
>> fb will cause iommu page fault.
> I think the above is not quite right. Atomic plane state holds a
> reference to its fb and old state is not supposed to be destroyed
> until the flip completes.
>
> Indeed current rockchip_atomic_commit implementation has following
> order of calls: rockchip_atomic_wait_for_complete(),
> drm_atomic_helper_cleanup_planes(), drm_atomic_state_free(). This
> means that .cleanup_fb() is called from
> drm_atomic_helper_cleanup_planes() just before drm_atomic_state_free()
> will release references by destroying old plane states. Note that both
> are called already after rockchip_atomic_wait_for_complete(), so it
> should be already safe to free the old fbs.
>
> So the above fix doesn't really do anything, possibly just covers the
> race condition of the original wait for vblank function by delaying
> drm_atomic_state_free() a bit.
>
> Moreover, the whole series has been thoroughly tested in Chrome OS 4.4
> kernel, including async commits. (There is still a possibility some
> newer upstream changes slightly modified the semantics, but I couldn't
> find such difference. Actually one of the advantages of atomic helpers
> was to avoid manually refcounting the fbs from the driver.)
>
> Best regards,
> Tomasz
>
Hi Tomasz
You are right, plane_duplicate_state/plane_destroy_state already protect
the old fbs.
we can get rid of prepare_fb and cleanup_fb.
--
?ark Yao
WARNING: multiple messages have this Message-ID (diff)
From: Mark yao <mark.yao@rock-chips.com>
To: Tomasz Figa <tfiga@chromium.org>
Cc: dri-devel <dri-devel@lists.freedesktop.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"open list:ARM/Rockchip SoC..."
<linux-rockchip@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Heiko Stuebner <heiko@sntech.de>, David Airlie <airlied@linux.ie>,
Sean Paul <seanpaul@chromium.org>,
Daniel Kurtz <djkurtz@chromium.org>
Subject: Re: [PATCH 2/8] drm/rockchip: Get rid of some unnecessary code
Date: Tue, 20 Sep 2016 09:36:12 +0800 [thread overview]
Message-ID: <57E0928C.8080103@rock-chips.com> (raw)
In-Reply-To: <CAAFQd5A0M6vAbXHhUDMMXsaWND0hzWcT71HzOsSSCHa--qh0dA@mail.gmail.com>
On 2016年09月18日 12:01, Tomasz Figa wrote:
> Hi Mark,
>
> On Sun, Sep 18, 2016 at 10:50 AM, Mark yao <mark.yao@rock-chips.com> wrote:
>> On 2016年09月14日 20:54, Tomasz Figa wrote:
>>> Current code implements prepare_fb and cleanup_fb callbacks only to
>>> grab/release fb references, which is already done by atomic framework
>>> when creating/destryoing plane state. Let's remove these
>>> unused bits.
>>>
>>> Signed-off-by: Tomasz Figa <tfiga@chromium.org>
>>> ---
>>> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 18 ------------------
>>> 1 file changed, 18 deletions(-)
>>
>> Hi Tomasz
>>
>> I think we can't get rid of the prepare_fb and cleanup_fb
> I think I have to disagree. Please see below for detailed explanation.
>
>> see the reason:
>> commit 44d0237a26395ac94160cf23f32769013b365590
>> Author: Mark Yao <mark.yao@rock-chips.com>
>> Date: Fri Apr 29 11:37:20 2016 +0800
>>
>> drm/rockchip: vop: fix iommu crash with async atomic
>>
>> After async atomic_commit callback, drm_atomic_clean_old_fb will
>> clean all old fb, but because async, the old fb may be also on
>> the vop hardware, dma will access the old fb buffer, clean old
>> fb will cause iommu page fault.
> I think the above is not quite right. Atomic plane state holds a
> reference to its fb and old state is not supposed to be destroyed
> until the flip completes.
>
> Indeed current rockchip_atomic_commit implementation has following
> order of calls: rockchip_atomic_wait_for_complete(),
> drm_atomic_helper_cleanup_planes(), drm_atomic_state_free(). This
> means that .cleanup_fb() is called from
> drm_atomic_helper_cleanup_planes() just before drm_atomic_state_free()
> will release references by destroying old plane states. Note that both
> are called already after rockchip_atomic_wait_for_complete(), so it
> should be already safe to free the old fbs.
>
> So the above fix doesn't really do anything, possibly just covers the
> race condition of the original wait for vblank function by delaying
> drm_atomic_state_free() a bit.
>
> Moreover, the whole series has been thoroughly tested in Chrome OS 4.4
> kernel, including async commits. (There is still a possibility some
> newer upstream changes slightly modified the semantics, but I couldn't
> find such difference. Actually one of the advantages of atomic helpers
> was to avoid manually refcounting the fbs from the driver.)
>
> Best regards,
> Tomasz
>
Hi Tomasz
You are right, plane_duplicate_state/plane_destroy_state already protect
the old fbs.
we can get rid of prepare_fb and cleanup_fb.
--
Mark Yao
next prev parent reply other threads:[~2016-09-20 1:36 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-14 12:54 [PATCH 0/8] drm/rockchip: Flip wait clean-up Tomasz Figa
2016-09-14 12:54 ` Tomasz Figa
2016-09-14 12:54 ` [PATCH 1/8] drm/rockchip: Clear interrupt status bits before enabling Tomasz Figa
2016-09-14 12:54 ` Tomasz Figa
2016-09-14 12:54 ` [PATCH 2/8] drm/rockchip: Get rid of some unnecessary code Tomasz Figa
2016-09-14 12:54 ` Tomasz Figa
2016-09-18 1:50 ` Mark yao
2016-09-18 1:50 ` Mark yao
2016-09-18 1:50 ` Mark yao
2016-09-18 4:01 ` Tomasz Figa
2016-09-18 4:01 ` Tomasz Figa
2016-09-18 4:01 ` Tomasz Figa
2016-09-20 1:36 ` Mark yao [this message]
2016-09-20 1:36 ` Mark yao
2016-09-20 1:36 ` Mark yao
2016-09-14 12:54 ` [PATCH 3/8] drm/rockchip: Avoid race with vblank count increment Tomasz Figa
2016-09-14 12:54 ` Tomasz Figa
2016-09-14 12:54 ` [PATCH 4/8] drm/rockchip: Unreference framebuffers from flip work Tomasz Figa
2016-09-14 12:54 ` Tomasz Figa
2016-09-14 12:54 ` [PATCH 5/8] drm/rockchip: Replace custom wait_for_vblanks with helper Tomasz Figa
2016-09-14 12:54 ` Tomasz Figa
2016-09-14 12:54 ` [PATCH 6/8] drm/rockchip: Do not enable vblank without event Tomasz Figa
2016-09-14 12:54 ` Tomasz Figa
2016-09-14 12:54 ` Tomasz Figa
2016-09-14 12:55 ` [PATCH 7/8] drm/rockchip: Always signal event in next vblank after cfg_done Tomasz Figa
2016-09-14 12:55 ` Tomasz Figa
2016-09-14 12:55 ` Tomasz Figa
2016-09-14 12:55 ` [PATCH 8/8] drm/rockchip: Kill vop_plane_state Tomasz Figa
2016-09-14 12:55 ` Tomasz Figa
2016-09-14 12:55 ` Tomasz Figa
2016-09-15 14:02 ` [PATCH 0/8] drm/rockchip: Flip wait clean-up Sean Paul
2016-09-15 14:02 ` Sean Paul
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=57E0928C.8080103@rock-chips.com \
--to=mark.yao@rock-chips.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=tfiga@chromium.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.