All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/radeon: Add RADEON_GEM_CPU_ACCESS BO creation flag
@ 2014-08-28  6:56 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-08-28  8:57 ` [PATCH] drm/radeon: Add RADEON_GEM_CPU_ACCESS BO creation flag Christian König
  0 siblings, 2 replies; 12+ messages in thread
From: Michel Dänzer @ 2014-08-28  6:56 UTC (permalink / raw)
  To: dri-devel, mesa-dev

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

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2014-09-10 13:40 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
2014-09-10 13:40                 ` Alex Deucher

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.