Patchwork [LUCID,BUG#,507148,1/2] drm/radeon/bo: add some fallback placements for VRAM only objects.

login
register
mail settings
Submitter Manoj Iyer
Date March 30, 2010, 3:12 p.m.
Message ID <alpine.DEB.2.00.1003300956190.15378@hungry>
Download mbox | patch
Permalink /patch/48977/
State Accepted
Delegated to: Andy Whitcroft
Headers show

Comments

Manoj Iyer - March 30, 2010, 3:12 p.m.
updated the patchs with information requested.

The following changes since commit c2b3a0b3ccb3b114c7e22117cb1fd23f63068bea:
   JosephChan@via.com.tw (1):
         (pre-stable) pata_via: Add VIA VX900 support

are available in the git repository at:

   git://kernel.ubuntu.com/manjo/ubuntu-lucid.git lp507148upstream

Dave Airlie (2):
       drm/radeon/bo: add some fallback placements for VRAM only objects.
       drm/radeon/kms: don't print error on -ERESTARTSYS.

  drivers/gpu/drm/radeon/radeon.h        |    2 ++
  drivers/gpu/drm/radeon/radeon_cs.c     |    3 ++-
  drivers/gpu/drm/radeon/radeon_object.c |   10 +++++++---
  3 files changed, 11 insertions(+), 4 deletions(-)

From 19ac48b6ac04fef2756aae26e60923dd4e5c4538 Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Fri, 19 Mar 2010 10:32:10 +1000
Subject: [PATCH 1/2] drm/radeon/bo: add some fallback placements for VRAM only objects.

On constrained r100 systems compiz would fail to start due to a lack
of memory, we can just fallback place the objects rather than completely
failing it works a lot better.

Cc: stable@kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
(cherry picked from commit 924788672f9c802a4c8e6bc8d88fbc2c9b2e3089)

Signed-off-by: Manoj Iyer <manoj.iyer@canonical.com>

BugLink: http://launchpad.net/bugs/507148

Cherry-picked from git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
---
  drivers/gpu/drm/radeon/radeon.h        |    2 ++
  drivers/gpu/drm/radeon/radeon_object.c |   10 +++++++---
  2 files changed, 9 insertions(+), 3 deletions(-)
Stefan Bader - March 30, 2010, 5:29 p.m.
Thats how I would do it.

manoj.iyer@canonical.com wrote:
> 
> updated the patchs with information requested.
> 
> The following changes since commit
> c2b3a0b3ccb3b114c7e22117cb1fd23f63068bea:
>   JosephChan@via.com.tw (1):
>         (pre-stable) pata_via: Add VIA VX900 support
> 
> are available in the git repository at:
> 
>   git://kernel.ubuntu.com/manjo/ubuntu-lucid.git lp507148upstream
> 
> Dave Airlie (2):
>       drm/radeon/bo: add some fallback placements for VRAM only objects.
>       drm/radeon/kms: don't print error on -ERESTARTSYS.
> 
>  drivers/gpu/drm/radeon/radeon.h        |    2 ++
>  drivers/gpu/drm/radeon/radeon_cs.c     |    3 ++-
>  drivers/gpu/drm/radeon/radeon_object.c |   10 +++++++---
>  3 files changed, 11 insertions(+), 4 deletions(-)
> 
> From 19ac48b6ac04fef2756aae26e60923dd4e5c4538 Mon Sep 17 00:00:00 2001
> From: Dave Airlie <airlied@redhat.com>
> Date: Fri, 19 Mar 2010 10:32:10 +1000
> Subject: [PATCH 1/2] drm/radeon/bo: add some fallback placements for
> VRAM only objects.
> 
> On constrained r100 systems compiz would fail to start due to a lack
> of memory, we can just fallback place the objects rather than completely
> failing it works a lot better.
> 

BugLink: http://launchpad.net/bugs/507148

> Cc: stable@kernel.org
> Signed-off-by: Dave Airlie <airlied@redhat.com>
> (cherry picked from commit 924788672f9c802a4c8e6bc8d88fbc2c9b2e3089)
(cherry picked from commit 924788672f9c802a4c8e6bc8d88fbc2c9b2e3089 drm-2.6)
> Signed-off-by: Manoj Iyer <manoj.iyer@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>

> ---
>  drivers/gpu/drm/radeon/radeon.h        |    2 ++
>  drivers/gpu/drm/radeon/radeon_object.c |   10 +++++++---
>  2 files changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/radeon/radeon.h
> b/drivers/gpu/drm/radeon/radeon.h
> index c0356bb..e1553f0 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -214,7 +214,9 @@ struct radeon_bo {
>      struct list_head        list;
>      /* Protected by tbo.reserved */
>      u32                placements[3];
> +    u32                busy_placements[3];
>      struct ttm_placement        placement;
> +    struct ttm_placement        busy_placement;
>      struct ttm_buffer_object    tbo;
>      struct ttm_bo_kmap_obj        kmap;
>      unsigned            pin_count;
> diff --git a/drivers/gpu/drm/radeon/radeon_object.c
> b/drivers/gpu/drm/radeon/radeon_object.c
> index f1da370..e781fa9 100644
> --- a/drivers/gpu/drm/radeon/radeon_object.c
> +++ b/drivers/gpu/drm/radeon/radeon_object.c
> @@ -65,15 +65,19 @@ bool radeon_ttm_bo_is_radeon_bo(struct
> ttm_buffer_object *bo)
> 
>  void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain)
>  {
> -    u32 c = 0;
> +    u32 c = 0, b = 0;
> 
>      rbo->placement.fpfn = 0;
>      rbo->placement.lpfn = 0;
>      rbo->placement.placement = rbo->placements;
> -    rbo->placement.busy_placement = rbo->placements;
> +    rbo->placement.busy_placement = rbo->busy_placements;
>      if (domain & RADEON_GEM_DOMAIN_VRAM)
>          rbo->placements[c++] = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED |
>                      TTM_PL_FLAG_VRAM;
> +    /* add busy placement to TTM if VRAM is only option */
> +    if (domain == RADEON_GEM_DOMAIN_VRAM) {
> +        rbo->busy_placements[b++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT;
> +    }
>      if (domain & RADEON_GEM_DOMAIN_GTT)
>          rbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT;
>      if (domain & RADEON_GEM_DOMAIN_CPU)
> @@ -81,7 +85,7 @@ void radeon_ttm_placement_from_domain(struct radeon_bo
> *rbo, u32 domain)
>      if (!c)
>          rbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM;
>      rbo->placement.num_placement = c;
> -    rbo->placement.num_busy_placement = c;
> +    rbo->placement.num_busy_placement = b;
>  }
> 
>  int radeon_bo_create(struct radeon_device *rdev, struct drm_gem_object
> *gobj,
Andy Whitcroft - March 30, 2010, 6:05 p.m.
On Tue, Mar 30, 2010 at 10:12:53AM -0500, manoj.iyer@canonical.com wrote:
> 
> updated the patchs with information requested.
> 
> The following changes since commit c2b3a0b3ccb3b114c7e22117cb1fd23f63068bea:
>    JosephChan@via.com.tw (1):
>          (pre-stable) pata_via: Add VIA VX900 support
> 
> are available in the git repository at:
> 
>    git://kernel.ubuntu.com/manjo/ubuntu-lucid.git lp507148upstream
> 
> Dave Airlie (2):
>        drm/radeon/bo: add some fallback placements for VRAM only objects.
>        drm/radeon/kms: don't print error on -ERESTARTSYS.
> 
>   drivers/gpu/drm/radeon/radeon.h        |    2 ++
>   drivers/gpu/drm/radeon/radeon_cs.c     |    3 ++-
>   drivers/gpu/drm/radeon/radeon_object.c |   10 +++++++---
>   3 files changed, 11 insertions(+), 4 deletions(-)
> 
> From 19ac48b6ac04fef2756aae26e60923dd4e5c4538 Mon Sep 17 00:00:00 2001
> From: Dave Airlie <airlied@redhat.com>
> Date: Fri, 19 Mar 2010 10:32:10 +1000
> Subject: [PATCH 1/2] drm/radeon/bo: add some fallback placements for VRAM only objects.
> 
> On constrained r100 systems compiz would fail to start due to a lack
> of memory, we can just fallback place the objects rather than completely
> failing it works a lot better.
> 
> Cc: stable@kernel.org
> Signed-off-by: Dave Airlie <airlied@redhat.com>
> (cherry picked from commit 924788672f9c802a4c8e6bc8d88fbc2c9b2e3089)
> 
> Signed-off-by: Manoj Iyer <manoj.iyer@canonical.com>
> 
> BugLink: http://launchpad.net/bugs/507148
> 
> Cherry-picked from git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
> ---
>   drivers/gpu/drm/radeon/radeon.h        |    2 ++
>   drivers/gpu/drm/radeon/radeon_object.c |   10 +++++++---
>   2 files changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index c0356bb..e1553f0 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -214,7 +214,9 @@ struct radeon_bo {
>   	struct list_head		list;
>   	/* Protected by tbo.reserved */
>   	u32				placements[3];
> +	u32				busy_placements[3];
>   	struct ttm_placement		placement;
> +	struct ttm_placement		busy_placement;
>   	struct ttm_buffer_object	tbo;
>   	struct ttm_bo_kmap_obj		kmap;
>   	unsigned			pin_count;
> diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
> index f1da370..e781fa9 100644
> --- a/drivers/gpu/drm/radeon/radeon_object.c
> +++ b/drivers/gpu/drm/radeon/radeon_object.c
> @@ -65,15 +65,19 @@ bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo)
> 
>   void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain)
>   {
> -	u32 c = 0;
> +	u32 c = 0, b = 0;
> 
>   	rbo->placement.fpfn = 0;
>   	rbo->placement.lpfn = 0;
>   	rbo->placement.placement = rbo->placements;
> -	rbo->placement.busy_placement = rbo->placements;
> +	rbo->placement.busy_placement = rbo->busy_placements;
>   	if (domain & RADEON_GEM_DOMAIN_VRAM)
>   		rbo->placements[c++] = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED |
>   					TTM_PL_FLAG_VRAM;
> +	/* add busy placement to TTM if VRAM is only option */
> +	if (domain == RADEON_GEM_DOMAIN_VRAM) {
> +		rbo->busy_placements[b++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT;
> +	}
>   	if (domain & RADEON_GEM_DOMAIN_GTT)
>   		rbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT;
>   	if (domain & RADEON_GEM_DOMAIN_CPU)
> @@ -81,7 +85,7 @@ void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain)
>   	if (!c)
>   		rbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM;
>   	rbo->placement.num_placement = c;
> -	rbo->placement.num_busy_placement = c;
> +	rbo->placement.num_busy_placement = b;
>   }
> 
>   int radeon_bo_create(struct radeon_device *rdev, struct drm_gem_object *gobj,
> -- 

Looks sensible:

Acked-by: Andy Whitcroft <apw@canonical.com>

-apw

Patch

diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index c0356bb..e1553f0 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -214,7 +214,9 @@  struct radeon_bo {
  	struct list_head		list;
  	/* Protected by tbo.reserved */
  	u32				placements[3];
+	u32				busy_placements[3];
  	struct ttm_placement		placement;
+	struct ttm_placement		busy_placement;
  	struct ttm_buffer_object	tbo;
  	struct ttm_bo_kmap_obj		kmap;
  	unsigned			pin_count;
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index f1da370..e781fa9 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -65,15 +65,19 @@  bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo)

  void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain)
  {
-	u32 c = 0;
+	u32 c = 0, b = 0;

  	rbo->placement.fpfn = 0;
  	rbo->placement.lpfn = 0;
  	rbo->placement.placement = rbo->placements;
-	rbo->placement.busy_placement = rbo->placements;
+	rbo->placement.busy_placement = rbo->busy_placements;
  	if (domain & RADEON_GEM_DOMAIN_VRAM)
  		rbo->placements[c++] = TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED |
  					TTM_PL_FLAG_VRAM;
+	/* add busy placement to TTM if VRAM is only option */
+	if (domain == RADEON_GEM_DOMAIN_VRAM) {
+		rbo->busy_placements[b++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT;
+	}
  	if (domain & RADEON_GEM_DOMAIN_GTT)
  		rbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT;
  	if (domain & RADEON_GEM_DOMAIN_CPU)
@@ -81,7 +85,7 @@  void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain)
  	if (!c)
  		rbo->placements[c++] = TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM;
  	rbo->placement.num_placement = c;
-	rbo->placement.num_busy_placement = c;
+	rbo->placement.num_busy_placement = b;
  }

  int radeon_bo_create(struct radeon_device *rdev, struct drm_gem_object *gobj,