diff options
author | Jack Diver <diverj@google.com> | 2023-07-10 14:31:43 +0000 |
---|---|---|
committer | Jack Diver <diverj@google.com> | 2023-08-21 16:37:21 +0000 |
commit | 94bda3af7f04101f7dfba2c5fffeb3e05be49472 (patch) | |
tree | 301042b96f957f2ba4518fb69b0951722a72d0be | |
parent | 850de7f645f5a468eca833041837c9f278ac76fa (diff) | |
download | gpu-94bda3af7f04101f7dfba2c5fffeb3e05be49472.tar.gz |
mali_pixel: mgm: Refactor update_size
Bug: 289501175
Signed-off-by: Jack Diver <diverj@google.com>
(cherry picked from https://partner-android-review.googlesource.com/q/commit:252edb03c91ebb738377caf5fe0c4cef52c36fb1)
Merged-In: Ib66717ef8acc13ede87b4e324fdc3489c119865f
Change-Id: Ib66717ef8acc13ede87b4e324fdc3489c119865f
-rw-r--r-- | mali_pixel/memory_group_manager.c | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/mali_pixel/memory_group_manager.c b/mali_pixel/memory_group_manager.c index 06e09e9..aa90279 100644 --- a/mali_pixel/memory_group_manager.c +++ b/mali_pixel/memory_group_manager.c @@ -408,39 +408,35 @@ static int group_active_pt_id(struct mgm_groups *data, enum pixel_mgm_group_id g 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 atomic_t* get_size_counter(struct memory_group_manager_device* mgm_dev, int group_id, int order) { - static DEFINE_RATELIMIT_STATE(gpu_alloc_rs, 10*HZ, 1); + static atomic_t err_atomic; struct mgm_groups *data = mgm_dev->data; switch (order) { case ORDER_SMALL_PAGE: - if (alloc) { - atomic_inc(&data->groups[group_id].size); - 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; - + return &data->groups[group_id].size; case ORDER_LARGE_PAGE: - if (alloc) { - atomic_inc(&data->groups[group_id].lp_size); - 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; - + return &data->groups[group_id].lp_size; default: dev_err(data->dev, "Unknown order(%d)\n", order); - break; + return &err_atomic; + } +} + +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); + atomic_t* size = get_size_counter(mgm_dev, group_id, order); + + if (alloc) { + atomic_inc(size); + atomic64_add(1 << order, &total_gpu_pages); + } else { + WARN_ON(atomic_read(size) == 0); + atomic_dec(size); + atomic64_sub(1 << order, &total_gpu_pages); } if (atomic64_read(&total_gpu_pages) >= (4 << (30 - PAGE_SHIFT)) && |