gpu : force gcvSURF_TILE_STATUS use contiguous memory
author杜坤明 <dkm@rockchip.com>
Thu, 22 Sep 2011 08:00:38 +0000 (16:00 +0800)
committer杜坤明 <dkm@rockchip.com>
Thu, 22 Sep 2011 08:00:38 +0000 (16:00 +0800)
drivers/staging/rk29/vivante/hal/inc/gc_hal_options.h [changed mode: 0644->0755]
drivers/staging/rk29/vivante/hal/kernel/gc_hal_kernel.c
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c

old mode 100644 (file)
new mode 100755 (executable)
index d6baf68..72d8086
 
 
 /*
-    dkm : gcdPAGE_ALLOC_LIMIT & gcdPAGE_ALLOC_LIMIT_SIZE
+    dkm : gcdPAGE_ALLOC_LIMIT
 
-    ÏÞÖÆgckOS_AllocatePagedMemoryExÏòϵͳÉêÇëpageµÄ´óС£¬±ÜÃâϵͳpage²»×ãʱ»áµ¼ÖÂϵͳ¿¨¶Ù
-    gcdPAGE_ALLOC_LIMIT         ÏÞÖÆPageÉêÇë
-    gcdPAGE_ALLOC_LIMIT_SIZE    ÏÞÖÆPageÉêÇëµÄ´óС,µ¥Î»ÎªM
+    ÏÞÖÆgckOS_AllocatePagedMemoryExÏòϵͳÉêÇëpage£¬±ÜÃâÌ«´óϵͳ·ÖÅä²»³öÀ´Ê±»áµ¼ÖÂϵͳ¿¨¶Ù(»á²»Í£flush cache)
+    ÐµÄÄÚºËÒѾ­ÐÞÕýÁËÕâÒ»ÎÊÌâ
 */
 #define gcdPAGE_ALLOC_LIMIT                 0
-#define gcdPAGE_ALLOC_LIMIT_SIZE            0
 
 
 /*
index f76834c6d5ed7fd81514c2d754854921336bd63a..ffb10bca4d1f64fb084d01a468f2aafaccaf11c2 100755 (executable)
@@ -290,6 +290,11 @@ _AllocateMemory(
     default:
         break;
     }
+    
+#if (0==gcdPAGE_ALLOC_LIMIT)
+    // dkm : force gcvSURF_TILE_STATUS use contiguous memory
+    if(gcvSURF_TILE_STATUS == Type)     pool = gcvPOOL_CONTIGUOUS;
+#endif
 
     do
     {
@@ -388,7 +393,10 @@ _AllocateMemory(
     while ((*Pool == gcvPOOL_DEFAULT)
     ||     (*Pool == gcvPOOL_LOCAL)
     ||     (*Pool == gcvPOOL_UNIFIED)
-    ||     ((*Pool == gcvPOOL_SYSTEM) && (pool==gcvPOOL_CONTIGUOUS))
+#if (0==gcdPAGE_ALLOC_LIMIT)
+    // dkm : let gcvPOOL_SYSTEM can use contiguous memory
+    ||     ((*Pool == gcvPOOL_SYSTEM) && (pool==gcvPOOL_CONTIGUOUS))    
+#endif
     );
 
     if (gcmIS_SUCCESS(status))
index d5bf1f83cea90476ba4e73ecd4c8ce6994e97931..ee93a1c4c40ff38b765559984ad426a0df001011 100755 (executable)
@@ -3019,16 +3019,17 @@ gceSTATUS gckOS_AllocatePagedMemoryEx(
     {
 // dkm: gcdPAGE_ALLOC_LIMIT
 #if gcdPAGE_ALLOC_LIMIT
-        if( (g_pages_alloced + numPages) > (256*gcdPAGE_ALLOC_LIMIT_SIZE) ) {
+#define PAGE_ALLOC_LIMIT_SIZE    0
+        if( (g_pages_alloced + numPages) > (256*PAGE_ALLOC_LIMIT_SIZE) ) {
             //printk("full %d! \n", g_pages_alloced);
             addr = NULL;
         } else {
-            addr = (char *)__get_free_pages(GFP_ATOMIC | GFP_DMA | __GFP_NOWARN, GetOrder(numPages));
+            addr = (char *)__get_free_pages(GFP_ATOMIC | GFP_DMA | __GFP_NOWARN | __GFP_NO_KSWAPD, GetOrder(numPages));
             if(addr) {
                 g_pages_alloced += numPages;
                 //printk("alloc %d / %d \n", numPages, g_pages_alloced);
             } else {
-                printk("gpu : alloc %d fail! (%d/%d)\n", numPages,  g_pages_alloced, (256*gcdPAGE_ALLOC_LIMIT_SIZE) );
+                printk("gpu : alloc %d fail! (%d/%d)\n", numPages,  g_pages_alloced, (256*PAGE_ALLOC_LIMIT_SIZE) );
             }
         }
 #else