All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Deucher <alexdeucher@gmail.com>
To: "Christian König" <deathsimple@vodafone.de>
Cc: "mesa-dev@lists.freedesktop.org" <mesa-dev@lists.freedesktop.org>,
	"Michel Dänzer" <michel@daenzer.net>,
	"Maling list - DRI developers" <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH] drm/radeon: Add RADEON_GEM_CPU_ACCESS BO creation flag
Date: Thu, 28 Aug 2014 11:01:59 -0400	[thread overview]
Message-ID: <CADnq5_N5gf_+4eVHfu4-sQ8DufsVfg7Y28qxBY3wvARpQcDkEA@mail.gmail.com> (raw)
In-Reply-To: <53FEEEF4.7030401@vodafone.de>

[-- Attachment #1: Type: text/plain, Size: 3222 bytes --]

On Thu, Aug 28, 2014 at 4:57 AM, Christian König
<deathsimple@vodafone.de> wrote:
> Am 28.08.2014 um 08:56 schrieb Michel Dänzer:
>
>> From: Michel Dänzer <michel.daenzer@amd.com>
>>
>> This flag is a hint that userspace expects the BO to be accessed by the
>> CPU. We can use that hint to prevent such BOs from ever being stored in
>> the CPU inaccessible part of VRAM.
>>
>> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
>
>
> This patch is Reviewed-by: Christian König <christian.koenig@amd.com>

Applied to my -next tree.

>
> I think we need a similar negative flags as well, e.g.
> RADEON_GEM_NO_CPU_ACCESS.
>
> This way we can stop forcing buffers into the visible VRAM while pinning
> them for scanout.


How about the attached patch?

Alex

>
> Regards,
> Christian.
>
>
>> ---
>>   drivers/gpu/drm/radeon/radeon_object.c | 11 +++++++++--
>>   include/uapi/drm/radeon_drm.h          |  2 ++
>>   2 files changed, 11 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/radeon/radeon_object.c
>> b/drivers/gpu/drm/radeon/radeon_object.c
>> index dc74cc5..908ea541 100644
>> --- a/drivers/gpu/drm/radeon/radeon_object.c
>> +++ b/drivers/gpu/drm/radeon/radeon_object.c
>> @@ -143,7 +143,12 @@ void radeon_ttm_placement_from_domain(struct
>> radeon_bo *rbo, u32 domain)
>>         for (i = 0; i < c; ++i) {
>>                 rbo->placements[i].fpfn = 0;
>> -               rbo->placements[i].lpfn = 0;
>> +               if ((rbo->flags & RADEON_GEM_CPU_ACCESS) &&
>> +                   (rbo->placements[i].flags & TTM_PL_FLAG_VRAM))
>> +                       rbo->placements[i].lpfn =
>> +                               rbo->rdev->mc.visible_vram_size >>
>> PAGE_SHIFT;
>> +               else
>> +                       rbo->placements[i].lpfn = 0;
>>         }
>>         /*
>> @@ -151,7 +156,9 @@ void radeon_ttm_placement_from_domain(struct radeon_bo
>> *rbo, u32 domain)
>>          * improve fragmentation quality.
>>          * 512kb was measured as the most optimal number.
>>          */
>> -       if (rbo->tbo.mem.size > 512 * 1024) {
>> +       if (!((rbo->flags & RADEON_GEM_CPU_ACCESS) &&
>> +             (rbo->placements[i].flags & TTM_PL_FLAG_VRAM)) &&
>> +           rbo->tbo.mem.size > 512 * 1024) {
>>                 for (i = 0; i < c; i++) {
>>                         rbo->placements[i].flags |= TTM_PL_FLAG_TOPDOWN;
>>                 }
>> diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h
>> index 509b2d7..bf0067b 100644
>> --- a/include/uapi/drm/radeon_drm.h
>> +++ b/include/uapi/drm/radeon_drm.h
>> @@ -799,6 +799,8 @@ struct drm_radeon_gem_info {
>>   #define RADEON_GEM_NO_BACKING_STORE   (1 << 0)
>>   #define RADEON_GEM_GTT_UC             (1 << 1)
>>   #define RADEON_GEM_GTT_WC             (1 << 2)
>> +/* BO is expected to be accessed by the CPU */
>> +#define RADEON_GEM_CPU_ACCESS          (1 << 3)
>>     struct drm_radeon_gem_create {
>>         uint64_t        size;
>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev

[-- Attachment #2: 0001-drm-radeon-add-RADEON_GEM_NO_CPU_ACCESS-BO-creation-.patch --]
[-- Type: text/x-diff, Size: 1902 bytes --]

From d6a65c62241fe2b3c1a0dd799f2af0802297446c 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] drm/radeon: add RADEON_GEM_NO_CPU_ACCESS BO creation flag

Allows pinning of buffers in the non-CPU visible portion of
vram.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/radeon/radeon_object.c | 10 +++++++---
 include/uapi/drm/radeon_drm.h          |  2 ++
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index 09b039a..b71e8e0 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -314,10 +314,14 @@ 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.real_vram_size >> PAGE_SHIFT;
+			else
+				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));
diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h
index f755f20..d2346fd 100644
--- a/include/uapi/drm/radeon_drm.h
+++ b/include/uapi/drm/radeon_drm.h
@@ -803,6 +803,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)
+/* BO is expected to not be accessed by the CPU */
+#define RADEON_GEM_NO_CPU_ACCESS	(1 << 4)
 
 struct drm_radeon_gem_create {
 	uint64_t	size;
-- 
1.8.3.1


[-- Attachment #3: Type: text/plain, Size: 156 bytes --]

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

  reply	other threads:[~2014-08-28 15:01 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 [this message]
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
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=CADnq5_N5gf_+4eVHfu4-sQ8DufsVfg7Y28qxBY3wvARpQcDkEA@mail.gmail.com \
    --to=alexdeucher@gmail.com \
    --cc=deathsimple@vodafone.de \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=mesa-dev@lists.freedesktop.org \
    --cc=michel@daenzer.net \
    /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.