From: "Michel Dänzer" <michel@daenzer.net>
To: Alex Deucher <alexdeucher@gmail.com>
Cc: "mesa-dev@lists.freedesktop.org" <mesa-dev@lists.freedesktop.org>,
Maling list - DRI developers <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH] drm/radeon: Add RADEON_GEM_CPU_ACCESS BO creation flag
Date: Wed, 10 Sep 2014 13:03:54 +0900 [thread overview]
Message-ID: <540FCDAA.7040302@daenzer.net> (raw)
In-Reply-To: <CADnq5_OX9Dd_8CCitW4sSg5ihJqTRqwnw2soL+2YXXM2TAA3-A@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 1713 bytes --]
On 10.09.2014 01:28, Alex Deucher wrote:
> On Mon, Sep 8, 2014 at 9:15 PM, Michel Dänzer <michel@daenzer.net> wrote:
>> On 09.09.2014 09:47, Michel Dänzer wrote:
>>> On 09.09.2014 02:36, Alex Deucher wrote:
>>>>
>>>> Updated version with comments integrated.
>>>
>>> [...]
>>>
>>>> @@ -314,10 +314,12 @@ int radeon_bo_pin_restricted(struct radeon_bo
>>>> *bo, u32 domain, u64 max_offset,
>>>> unsigned lpfn = 0;
>>>>
>>>> /* force to pin into visible video ram */
>>>> - if (bo->placements[i].flags & TTM_PL_FLAG_VRAM)
>>>> - lpfn = bo->rdev->mc.visible_vram_size >> PAGE_SHIFT;
>>>> - else
>>>> + if (bo->placements[i].flags & TTM_PL_FLAG_VRAM) {
>>>> + if (!(bo->flags & RADEON_GEM_NO_CPU_ACCESS))
>>>> + lpfn = bo->rdev->mc.visible_vram_size >> PAGE_SHIFT;
>>>> + } else {
>>>> lpfn = bo->rdev->mc.gtt_size >> PAGE_SHIFT; /* ??? */
>>>> + }
>>>
>>> The else block can be removed as well, but that can be done in another
>>> patch.
>>
>> Actually, I just noticed a problem, the following if statement:
>>
>>> if (max_offset)
>>> lpfn = min (lpfn, (unsigned)(max_offset >> PAGE_SHIFT));
>>
>> This will ignore max_offset if lpfn is 0. So either go with v1 of this hunk,
>> or rebase on top of the patch below.
>>
>
> Rebased on your patch and attached.
My patch didn't handle max_offset == 0 correctly. Attaching a fixed v2
patch and your patch rebased on top of that.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-drm-radeon-Clean-up-assignment-of-TTM-placement-lpfn.patch --]
[-- Type: text/x-patch; name="0001-drm-radeon-Clean-up-assignment-of-TTM-placement-lpfn.patch", Size: 1842 bytes --]
>From 0428f396173e458288a5f0e1807033ebe9931ce0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com>
Date: Tue, 9 Sep 2014 10:09:23 +0900
Subject: [PATCH v2 1/2] drm/radeon: Clean up assignment of TTM placement lpfn
member for pinning
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This sets the lpfn member to 0 instead of the full domain size. TTM uses
the full domain size when lpfn is 0.
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
---
v2: Handle max_offset == 0 correctly
drivers/gpu/drm/radeon/radeon_object.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index 908ea541..24c8772 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -307,18 +307,14 @@ int radeon_bo_pin_restricted(struct radeon_bo *bo, u32 domain, u64 max_offset,
}
radeon_ttm_placement_from_domain(bo, domain);
for (i = 0; i < bo->placement.num_placement; i++) {
- unsigned lpfn = 0;
-
/* force to pin into visible video ram */
- if (bo->placements[i].flags & TTM_PL_FLAG_VRAM)
- lpfn = bo->rdev->mc.visible_vram_size >> PAGE_SHIFT;
+ if ((bo->placements[i].flags & TTM_PL_FLAG_VRAM) &&
+ (!max_offset || max_offset > bo->rdev->mc.visible_vram_size))
+ bo->placements[i].lpfn =
+ bo->rdev->mc.visible_vram_size >> PAGE_SHIFT;
else
- lpfn = bo->rdev->mc.gtt_size >> PAGE_SHIFT; /* ??? */
-
- if (max_offset)
- lpfn = min (lpfn, (unsigned)(max_offset >> PAGE_SHIFT));
+ bo->placements[i].lpfn = max_offset >> PAGE_SHIFT;
- bo->placements[i].lpfn = lpfn;
bo->placements[i].flags |= TTM_PL_FLAG_NO_EVICT;
}
--
2.1.0
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-drm-radeon-add-RADEON_GEM_NO_CPU_ACCESS-BO-creation-.patch --]
[-- Type: text/x-patch; name="0002-drm-radeon-add-RADEON_GEM_NO_CPU_ACCESS-BO-creation-.patch", Size: 1965 bytes --]
>From 8e896486464526add633b6809b6d020ad810315c Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexander.deucher@amd.com>
Date: Thu, 28 Aug 2014 10:59:05 -0400
Subject: [PATCH 2/2] drm/radeon: add RADEON_GEM_NO_CPU_ACCESS BO creation flag
(v4)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Allows pinning of buffers in the non-CPU visible portion of
vram.
v2: incorporate Michel's comments.
v3: rebase on Michel's patch
v4: rebase on Michel's v2 patch
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
---
drivers/gpu/drm/radeon/radeon_object.c | 1 +
include/uapi/drm/radeon_drm.h | 2 ++
2 files changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index 24c8772..d3f0a19 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -309,6 +309,7 @@ int radeon_bo_pin_restricted(struct radeon_bo *bo, u32 domain, u64 max_offset,
for (i = 0; i < bo->placement.num_placement; i++) {
/* force to pin into visible video ram */
if ((bo->placements[i].flags & TTM_PL_FLAG_VRAM) &&
+ !(bo->flags & RADEON_GEM_NO_CPU_ACCESS) &&
(!max_offset || max_offset > bo->rdev->mc.visible_vram_size))
bo->placements[i].lpfn =
bo->rdev->mc.visible_vram_size >> PAGE_SHIFT;
diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h
index bf0067b..017f869 100644
--- a/include/uapi/drm/radeon_drm.h
+++ b/include/uapi/drm/radeon_drm.h
@@ -801,6 +801,8 @@ struct drm_radeon_gem_info {
#define RADEON_GEM_GTT_WC (1 << 2)
/* BO is expected to be accessed by the CPU */
#define RADEON_GEM_CPU_ACCESS (1 << 3)
+/* CPU access is not expected to work for this BO */
+#define RADEON_GEM_NO_CPU_ACCESS (1 << 4)
struct drm_radeon_gem_create {
uint64_t size;
--
2.1.0
[-- Attachment #4: Type: text/plain, Size: 156 bytes --]
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev
next prev parent reply other threads:[~2014-09-10 4:03 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-28 6:56 [PATCH] drm/radeon: Add RADEON_GEM_CPU_ACCESS BO creation flag Michel Dänzer
2014-08-28 6:56 ` [PATCH] r600g, radeonsi: Inform the kernel if a BO will likely be accessed by the CPU Michel Dänzer
2014-09-01 10:21 ` [Mesa-dev] " Marek Olšák
2014-08-28 8:57 ` [PATCH] drm/radeon: Add RADEON_GEM_CPU_ACCESS BO creation flag Christian König
2014-08-28 15:01 ` Alex Deucher
2014-08-29 1:46 ` [Mesa-dev] " Michel Dänzer
2014-09-08 17:36 ` Alex Deucher
2014-09-09 0:47 ` [Mesa-dev] " Michel Dänzer
2014-09-09 1:15 ` Michel Dänzer
2014-09-09 16:28 ` Alex Deucher
2014-09-10 4:03 ` Michel Dänzer [this message]
2014-09-10 13:40 ` Alex Deucher
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=540FCDAA.7040302@daenzer.net \
--to=michel@daenzer.net \
--cc=alexdeucher@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=mesa-dev@lists.freedesktop.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