If memory is not enough in the default BAR for a type try other BAR
this allow better memory usage and avoid memory allocation failure
if a BAR is quite small and other is quite unused.

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 drivers/gpu/drm/qxl/qxl_object.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
index b28370e..b99395e 100644
--- a/drivers/gpu/drm/qxl/qxl_object.c
+++ b/drivers/gpu/drm/qxl/qxl_object.c
@@ -58,14 +58,17 @@ void qxl_ttm_placement_from_domain(struct qxl_bo *qbo, u32 
domain, bool pinned)

        qbo->placement.placement = qbo->placements;
        qbo->placement.busy_placement = qbo->placements;
-       if (domain == QXL_GEM_DOMAIN_VRAM)
+       if (domain == QXL_GEM_DOMAIN_VRAM) {
                qbo->placements[c++].flags = TTM_PL_FLAG_CACHED | 
TTM_PL_FLAG_VRAM | pflag;
-       if (domain == QXL_GEM_DOMAIN_SURFACE)
                qbo->placements[c++].flags = TTM_PL_FLAG_CACHED | 
TTM_PL_FLAG_PRIV0 | pflag;
-       if (domain == QXL_GEM_DOMAIN_CPU)
+       } else if (domain == QXL_GEM_DOMAIN_SURFACE) {
+               qbo->placements[c++].flags = TTM_PL_FLAG_CACHED | 
TTM_PL_FLAG_PRIV0 | pflag;
+               qbo->placements[c++].flags = TTM_PL_FLAG_CACHED | 
TTM_PL_FLAG_VRAM | pflag;
+       } else if (domain == QXL_GEM_DOMAIN_CPU) {
                qbo->placements[c++].flags = TTM_PL_MASK_CACHING | 
TTM_PL_FLAG_SYSTEM | pflag;
-       if (!c)
+       } else {
                qbo->placements[c++].flags = TTM_PL_MASK_CACHING | 
TTM_PL_FLAG_SYSTEM;
+       }
        qbo->placement.num_placement = c;
        qbo->placement.num_busy_placement = c;
        for (i = 0; i < c; ++i) {
-- 
2.4.3

Reply via email to