diff options
author | Jesse Hall <jessehall@google.com> | 2021-07-01 10:16:01 -0700 |
---|---|---|
committer | Jesse Hall <jessehall@google.com> | 2021-07-01 10:16:01 -0700 |
commit | 097443a8ebc3743be0e08c04ea1000b7db32ad55 (patch) | |
tree | cb259e127063cabca4982512cbbacb3beb572208 /mali_pixel/memory_group_manager.c | |
parent | 0a8647292f17bdeb957e5bb51454afa8deee622f (diff) | |
parent | ea892218d4fffa1493d95d8c8850bee9309a7474 (diff) | |
download | gpu-097443a8ebc3743be0e08c04ea1000b7db32ad55.tar.gz |
Merge branch 'android-gs-pixel-5.10' into android-gs-cloudripper-5.10
Conflicts:
mali_kbase/platform/pixel/pixel_gpu_power.c
mali_pixel/memory_group_manager.c
Bug: 183466800
Signed-off-by: Jesse Hall <jessehall@google.com>
Change-Id: Id80bfeddca75d4ded89d2462c871e8c73330ef57
Diffstat (limited to 'mali_pixel/memory_group_manager.c')
-rw-r--r-- | mali_pixel/memory_group_manager.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/mali_pixel/memory_group_manager.c b/mali_pixel/memory_group_manager.c index a4efc1a..eb0f856 100644 --- a/mali_pixel/memory_group_manager.c +++ b/mali_pixel/memory_group_manager.c @@ -28,6 +28,9 @@ #include <soc/google/pt.h> +#define ORDER_SMALL_PAGE 0 +#define ORDER_LARGE_PAGE 9 + #define PBHA_BIT_POS (36) #define PBHA_BIT_MASK (0xf) @@ -269,8 +272,10 @@ static ssize_t total_page_count_show(struct kobject *kobj, struct mgm_groups *data = container_of(kobj, struct mgm_groups, kobj); int i, pages = 0; + /* count pages as 4K unit */ for (i = 0; i < MEMORY_GROUP_MANAGER_NR_GROUPS; i++) - pages += atomic_read(&data->groups[i].size) + atomic_read(&data->groups[i].lp_size); + pages += (atomic_read(&data->groups[i].size) << ORDER_SMALL_PAGE) + + (atomic_read(&data->groups[i].lp_size) << ORDER_LARGE_PAGE); return sysfs_emit(buf, "%d\n", pages); } @@ -342,7 +347,8 @@ static void mgm_sysfs_term(struct mgm_groups *data) kobject_put(&data->kobj); } -#else +#else /* CONFIG_MALI_PIXEL_STATS */ + static int mgm_sysfs_init(struct mgm_groups *data) { return 0; @@ -354,30 +360,35 @@ static void mgm_sysfs_term(struct mgm_groups *data) #endif /* CONFIG_MALI_PIXEL_STATS */ -#define ORDER_SMALL_PAGE 0 -#define ORDER_LARGE_PAGE 9 +static atomic64_t total_gpu_pages = ATOMIC64_INIT(0); + static void update_size(struct memory_group_manager_device *mgm_dev, int group_id, int order, bool alloc) { + static DEFINE_RATELIMIT_STATE(gpu_alloc_rs, 10*HZ, 1); struct mgm_groups *data = mgm_dev->data; switch (order) { case ORDER_SMALL_PAGE: - if (alloc) + if (alloc) { atomic_inc(&data->groups[group_id].size); - else { + atomic64_inc(&total_gpu_pages); + } else { WARN_ON(atomic_read(&data->groups[group_id].size) == 0); atomic_dec(&data->groups[group_id].size); + atomic64_dec(&total_gpu_pages); } break; case ORDER_LARGE_PAGE: - if (alloc) + if (alloc) { atomic_inc(&data->groups[group_id].lp_size); - else { + atomic64_add(1 << ORDER_LARGE_PAGE, &total_gpu_pages); + } else { WARN_ON(atomic_read( &data->groups[group_id].lp_size) == 0); atomic_dec(&data->groups[group_id].lp_size); + atomic64_sub(1 << ORDER_LARGE_PAGE, &total_gpu_pages); } break; @@ -385,6 +396,10 @@ static void update_size(struct memory_group_manager_device *mgm_dev, int dev_err(data->dev, "Unknown order(%d)\n", order); break; } + + if (atomic64_read(&total_gpu_pages) >= (4 << (30 - PAGE_SHIFT)) && + __ratelimit(&gpu_alloc_rs)) + pr_warn("total_gpu_pages %lld\n", atomic64_read(&total_gpu_pages)); } static struct page *mgm_alloc_page( |