/*
- 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
/*
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
{
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))
{
// 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