All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laura Abbott <labbott@redhat.com>
To: Gioh Kim <gioh.kim@lge.com>,
	gregkh@linuxfoundation.org, arve@android.com,
	riandrews@android.com, devel@driverdev.osuosl.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCHv3 1/2] staging: ion: shrink page-pool by page unit
Date: Thu, 2 Jul 2015 11:21:33 -0700	[thread overview]
Message-ID: <5595812D.7050601@redhat.com> (raw)
In-Reply-To: <1435748578-6400-2-git-send-email-gioh.kim@lge.com>

On 07/01/2015 04:02 AM, Gioh Kim wrote:
> This patch shrink page-pool by page unit.
>
> The system shrinker calls ion_heap_shrink_count() to get nr_to_scan,
> and pass it to ion_heap_shrink_scan().
> The problem is the return value of ion_heap_shrink_count() is the number
> of pages but ion_system_heap_shrink(), which is called by
> ion_heap_shrink_scan(), gets the number of chunk.
>
> The main root of this is that ion_page_pool_shrink() returns page count
> via ion_page_pool_total() if it have to check pool size. But it frees
> chunks of pages if it have to free pools.
>
> This patch first fix ion_page_pool_shrink() to count only pages,
> not chunks. And then ion_system_heap_shrink() to work on pages.
>
> Signed-off-by: Gioh Kim <gioh.kim@lge.com>

Reviewed-by: Laura Abbott <labbott@redhat.com>

> ---
>   drivers/staging/android/ion/ion_page_pool.c   |    5 +++--
>   drivers/staging/android/ion/ion_system_heap.c |   16 ++++++++++++++--
>   2 files changed, 17 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/staging/android/ion/ion_page_pool.c b/drivers/staging/android/ion/ion_page_pool.c
> index 4b88f11..19ad3ab 100644
> --- a/drivers/staging/android/ion/ion_page_pool.c
> +++ b/drivers/staging/android/ion/ion_page_pool.c
> @@ -116,7 +116,7 @@ static int ion_page_pool_total(struct ion_page_pool *pool, bool high)
>   int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
>   				int nr_to_scan)
>   {
> -	int freed;
> +	int freed = 0;
>   	bool high;
>
>   	if (current_is_kswapd())
> @@ -127,7 +127,7 @@ int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
>   	if (nr_to_scan == 0)
>   		return ion_page_pool_total(pool, high);
>
> -	for (freed = 0; freed < nr_to_scan; freed++) {
> +	while (freed < nr_to_scan) {
>   		struct page *page;
>
>   		mutex_lock(&pool->mutex);
> @@ -141,6 +141,7 @@ int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
>   		}
>   		mutex_unlock(&pool->mutex);
>   		ion_page_pool_free_pages(pool, page);
> +		freed += (1 << pool->order);
>   	}
>
>   	return freed;
> diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c
> index da2a63c..7a7a9a0 100644
> --- a/drivers/staging/android/ion/ion_system_heap.c
> +++ b/drivers/staging/android/ion/ion_system_heap.c
> @@ -212,14 +212,26 @@ static int ion_system_heap_shrink(struct ion_heap *heap, gfp_t gfp_mask,
>   {
>   	struct ion_system_heap *sys_heap;
>   	int nr_total = 0;
> -	int i;
> +	int i, nr_freed;
> +	int only_scan = 0;
>
>   	sys_heap = container_of(heap, struct ion_system_heap, heap);
>
> +	if (!nr_to_scan)
> +		only_scan = 1;
> +
>   	for (i = 0; i < num_orders; i++) {
>   		struct ion_page_pool *pool = sys_heap->pools[i];
>
> -		nr_total += ion_page_pool_shrink(pool, gfp_mask, nr_to_scan);
> +		nr_freed = ion_page_pool_shrink(pool, gfp_mask, nr_to_scan);
> +		nr_total += nr_freed;
> +
> +		if (!only_scan) {
> +			nr_to_scan -= nr_freed;
> +			/* shrink completed */
> +			if (nr_to_scan <= 0)
> +				break;
> +		}
>   	}
>
>   	return nr_total;
>



  reply	other threads:[~2015-07-02 18:21 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-01 11:02 [PATCHv3 0/2] staging: ion: enable shrinking of pool Gioh Kim
2015-07-01 11:02 ` [PATCHv3 1/2] staging: ion: shrink page-pool by page unit Gioh Kim
2015-07-02 18:21   ` Laura Abbott [this message]
2015-07-01 11:02 ` [PATCHv3 2/2] staging: ion: debugfs to shrink pool Gioh Kim
2015-07-02 18:24   ` Laura Abbott

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5595812D.7050601@redhat.com \
    --to=labbott@redhat.com \
    --cc=arve@android.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=gioh.kim@lge.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=riandrews@android.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.