From 85f0cea18c8aa790cfad836affb30ec0c20169c4 Mon Sep 17 00:00:00 2001 From: Xianzhong Date: Sat, 10 Nov 2018 02:37:56 +0800 Subject: [PATCH] MGS-4376 [#imx-1238] fix low performance with CMA allocator there are lots of PFNs busy message when run GPU tests: [ 622.370671] alloc_contig_range: [4ea70, 4ea7c) PFNs busy [ 626.518072] alloc_contig_range: [4ea90, 4ea9c) PFNs busy this problem is related with CMA migration for fragments, move CMA allocator after GFP to avoid memory migration, also fix CMA preempt for contiguous memory request. can improve CTS and gpubench benchmarks on M850D. Signed-off-by: Xianzhong (cherry picked from commit ad77ed61b72c8362b04361acd2deb685fee15436) --- .../allocator/freescale/gc_hal_kernel_allocator_array.h | 6 +++--- .../allocator/freescale/gc_hal_kernel_allocator_cma.c | 7 ++++--- .../mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 9 +++------ 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_array.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_array.h index 0f734d869d57..ab28fa804bcd 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_array.h +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_array.h @@ -106,13 +106,13 @@ _DmaAlloctorInit( gcsALLOCATOR_DESC allocatorArray[] = { + /* GFP allocator. */ + gcmkDEFINE_ALLOCATOR_DESC("gfp", _GFPAlloctorInit), + #if LINUX_CMA_FSL gcmkDEFINE_ALLOCATOR_DESC("cmafsl", _CMAFSLAlloctorInit), #endif - /* GFP allocator. */ - gcmkDEFINE_ALLOCATOR_DESC("gfp", _GFPAlloctorInit), - /* User memory importer. */ gcmkDEFINE_ALLOCATOR_DESC("user", _UserMemoryAlloctorInit), diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c index 5b157d557d29..b03c0444fbe8 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/allocator/freescale/gc_hal_kernel_allocator_cma.c @@ -147,9 +147,9 @@ _CMAFSLAlloc( gcmkHEADER_ARG("Mdl=%p NumPages=0x%zx", Mdl, NumPages); - if (os->allocatorLimitMarker) + if (os->allocatorLimitMarker && !(Flags & gcvALLOC_FLAG_CMA_PREEMPT)) { - if ((Flags & gcvALLOC_FLAG_CMA_LIMIT) && !(Flags & gcvALLOC_FLAG_CMA_PREEMPT)) + if (Flags & gcvALLOC_FLAG_CMA_LIMIT) { priv->cmaLimitRequest = gcvTRUE; } @@ -593,9 +593,10 @@ _CMAFSLAlloctorInit( if (Os->allocatorLimitMarker) { allocator->capability |= gcvALLOC_FLAG_CMA_LIMIT; - allocator->capability |= gcvALLOC_FLAG_CMA_PREEMPT; } + allocator->capability |= gcvALLOC_FLAG_CMA_PREEMPT; + *Allocator = allocator; return gcvSTATUS_OK; diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c index 17211a0cee0f..4b7f4e429e0f 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c @@ -1374,14 +1374,11 @@ gckOS_AllocateNonPagedMemory( gcmkASSERT(Flag & gcvALLOC_FLAG_CONTIGUOUS); - if (Os->allocatorLimitMarker) - { - Flag |= gcvALLOC_FLAG_CMA_LIMIT; - Flag |= gcvALLOC_FLAG_CMA_PREEMPT; #if gcdENABLE_CACHEABLE_COMMAND_BUFFER - Flag &= ~gcvALLOC_FLAG_CACHEABLE; + Flag &= ~gcvALLOC_FLAG_CACHEABLE; #endif - } + + Flag |= gcvALLOC_FLAG_CMA_PREEMPT; /* Walk all allocators. */ list_for_each_entry(allocator, &Os->allocatorList, link) -- 2.17.1