On Fri, Feb 13, 2015 at 01:15:42AM +0300, Stefan Strogin wrote:
> From: Dmitry Safonov <[email protected]>
> 
> Here are two functions that provide interface to compute/get used size
> and size of biggest free chunk in cma region.
> Add that information to debugfs.
> 
> Signed-off-by: Dmitry Safonov <[email protected]>
> Signed-off-by: Stefan Strogin <[email protected]>
> ---
>  include/linux/cma.h |  2 ++
>  mm/cma.c            | 30 ++++++++++++++++++++++++++++++
>  mm/cma_debug.c      | 24 ++++++++++++++++++++++++
>  3 files changed, 56 insertions(+)
> 
> diff --git a/include/linux/cma.h b/include/linux/cma.h
> index 4c2c83c..54a2c4d 100644
> --- a/include/linux/cma.h
> +++ b/include/linux/cma.h
> @@ -18,6 +18,8 @@ struct cma;
>  extern unsigned long totalcma_pages;
>  extern phys_addr_t cma_get_base(struct cma *cma);
>  extern unsigned long cma_get_size(struct cma *cma);
> +extern unsigned long cma_get_used(struct cma *cma);
> +extern unsigned long cma_get_maxchunk(struct cma *cma);
>  
>  extern int __init cma_declare_contiguous(phys_addr_t base,
>                       phys_addr_t size, phys_addr_t limit,
> diff --git a/mm/cma.c b/mm/cma.c
> index ed269b0..95e8121 100644
> --- a/mm/cma.c
> +++ b/mm/cma.c
> @@ -54,6 +54,36 @@ unsigned long cma_get_size(struct cma *cma)
>       return cma->count << PAGE_SHIFT;
>  }
>  
> +unsigned long cma_get_used(struct cma *cma)
> +{
> +     unsigned long ret = 0;
> +
> +     mutex_lock(&cma->lock);
> +     /* pages counter is smaller than sizeof(int) */
> +     ret = bitmap_weight(cma->bitmap, (int)cma->count);
> +     mutex_unlock(&cma->lock);
> +
> +     return ret;
> +}

Need to consider order_per_bit for returing number of page rather
than number of bits.

> +
> +unsigned long cma_get_maxchunk(struct cma *cma)
> +{
> +     unsigned long maxchunk = 0;
> +     unsigned long start, end = 0;
> +
> +     mutex_lock(&cma->lock);
> +     for (;;) {
> +             start = find_next_zero_bit(cma->bitmap, cma->count, end);
> +             if (start >= cma->count)
> +                     break;
> +             end = find_next_bit(cma->bitmap, cma->count, start);
> +             maxchunk = max(end - start, maxchunk);
> +     }
> +     mutex_unlock(&cma->lock);
> +
> +     return maxchunk;
> +}
> +

Same here.

Thanks.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to