linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: labbott@redhat.com (Laura Abbott)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv3 01/22] cma: Store a name in the cma structure
Date: Mon,  3 Apr 2017 11:57:43 -0700	[thread overview]
Message-ID: <1491245884-15852-2-git-send-email-labbott@redhat.com> (raw)
In-Reply-To: <1491245884-15852-1-git-send-email-labbott@redhat.com>

Frameworks that may want to enumerate CMA heaps (e.g. Ion) will find it
useful to have an explicit name attached to each region. Store the name
in each CMA structure.

Signed-off-by: Laura Abbott <labbott@redhat.com>
---
v3: Added default name suggestion per Sumit. Fixup powerpc call site.
---
 arch/powerpc/kvm/book3s_hv_builtin.c |  3 ++-
 drivers/base/dma-contiguous.c        |  5 +++--
 include/linux/cma.h                  |  4 +++-
 mm/cma.c                             | 17 +++++++++++++++--
 mm/cma.h                             |  1 +
 mm/cma_debug.c                       |  2 +-
 6 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/kvm/book3s_hv_builtin.c b/arch/powerpc/kvm/book3s_hv_builtin.c
index 4d6c64b..b739ff8 100644
--- a/arch/powerpc/kvm/book3s_hv_builtin.c
+++ b/arch/powerpc/kvm/book3s_hv_builtin.c
@@ -100,7 +100,8 @@ void __init kvm_cma_reserve(void)
 			 (unsigned long)selected_size / SZ_1M);
 		align_size = HPT_ALIGN_PAGES << PAGE_SHIFT;
 		cma_declare_contiguous(0, selected_size, 0, align_size,
-			KVM_CMA_CHUNK_ORDER - PAGE_SHIFT, false, &kvm_cma);
+			KVM_CMA_CHUNK_ORDER - PAGE_SHIFT, false, "kvm_cma",
+			&kvm_cma);
 	}
 }
 
diff --git a/drivers/base/dma-contiguous.c b/drivers/base/dma-contiguous.c
index b55804c..ea9726e 100644
--- a/drivers/base/dma-contiguous.c
+++ b/drivers/base/dma-contiguous.c
@@ -165,7 +165,8 @@ int __init dma_contiguous_reserve_area(phys_addr_t size, phys_addr_t base,
 {
 	int ret;
 
-	ret = cma_declare_contiguous(base, size, limit, 0, 0, fixed, res_cma);
+	ret = cma_declare_contiguous(base, size, limit, 0, 0, fixed,
+					"reserved", res_cma);
 	if (ret)
 		return ret;
 
@@ -258,7 +259,7 @@ static int __init rmem_cma_setup(struct reserved_mem *rmem)
 		return -EINVAL;
 	}
 
-	err = cma_init_reserved_mem(rmem->base, rmem->size, 0, &cma);
+	err = cma_init_reserved_mem(rmem->base, rmem->size, 0, rmem->name, &cma);
 	if (err) {
 		pr_err("Reserved memory: unable to setup CMA region\n");
 		return err;
diff --git a/include/linux/cma.h b/include/linux/cma.h
index 03f32d0..d41d1f8 100644
--- a/include/linux/cma.h
+++ b/include/linux/cma.h
@@ -21,13 +21,15 @@ struct cma;
 extern unsigned long totalcma_pages;
 extern phys_addr_t cma_get_base(const struct cma *cma);
 extern unsigned long cma_get_size(const struct cma *cma);
+extern const char *cma_get_name(const struct cma *cma);
 
 extern int __init cma_declare_contiguous(phys_addr_t base,
 			phys_addr_t size, phys_addr_t limit,
 			phys_addr_t alignment, unsigned int order_per_bit,
-			bool fixed, struct cma **res_cma);
+			bool fixed, const char *name, struct cma **res_cma);
 extern int cma_init_reserved_mem(phys_addr_t base, phys_addr_t size,
 					unsigned int order_per_bit,
+					const char *name,
 					struct cma **res_cma);
 extern struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align,
 			      gfp_t gfp_mask);
diff --git a/mm/cma.c b/mm/cma.c
index a6033e3..43c1b2c 100644
--- a/mm/cma.c
+++ b/mm/cma.c
@@ -53,6 +53,11 @@ unsigned long cma_get_size(const struct cma *cma)
 	return cma->count << PAGE_SHIFT;
 }
 
+const char *cma_get_name(const struct cma *cma)
+{
+	return cma->name ? cma->name : "(undefined)";
+}
+
 static unsigned long cma_bitmap_aligned_mask(const struct cma *cma,
 					     int align_order)
 {
@@ -168,6 +173,7 @@ core_initcall(cma_init_reserved_areas);
  */
 int __init cma_init_reserved_mem(phys_addr_t base, phys_addr_t size,
 				 unsigned int order_per_bit,
+				 const char *name,
 				 struct cma **res_cma)
 {
 	struct cma *cma;
@@ -198,6 +204,13 @@ int __init cma_init_reserved_mem(phys_addr_t base, phys_addr_t size,
 	 * subsystems (like slab allocator) are available.
 	 */
 	cma = &cma_areas[cma_area_count];
+	if (name) {
+		cma->name = name;
+	} else {
+		cma->name = kasprintf(GFP_KERNEL, "cma%d\n", cma_area_count);
+		if (!cma->name)
+			return -ENOMEM;
+	}
 	cma->base_pfn = PFN_DOWN(base);
 	cma->count = size >> PAGE_SHIFT;
 	cma->order_per_bit = order_per_bit;
@@ -229,7 +242,7 @@ int __init cma_init_reserved_mem(phys_addr_t base, phys_addr_t size,
 int __init cma_declare_contiguous(phys_addr_t base,
 			phys_addr_t size, phys_addr_t limit,
 			phys_addr_t alignment, unsigned int order_per_bit,
-			bool fixed, struct cma **res_cma)
+			bool fixed, const char *name, struct cma **res_cma)
 {
 	phys_addr_t memblock_end = memblock_end_of_DRAM();
 	phys_addr_t highmem_start;
@@ -335,7 +348,7 @@ int __init cma_declare_contiguous(phys_addr_t base,
 		base = addr;
 	}
 
-	ret = cma_init_reserved_mem(base, size, order_per_bit, res_cma);
+	ret = cma_init_reserved_mem(base, size, order_per_bit, name, res_cma);
 	if (ret)
 		goto err;
 
diff --git a/mm/cma.h b/mm/cma.h
index 17c75a4..4986128 100644
--- a/mm/cma.h
+++ b/mm/cma.h
@@ -11,6 +11,7 @@ struct cma {
 	struct hlist_head mem_head;
 	spinlock_t mem_head_lock;
 #endif
+	const char *name;
 };
 
 extern struct cma cma_areas[MAX_CMA_AREAS];
diff --git a/mm/cma_debug.c b/mm/cma_debug.c
index ffc0c3d..595b757 100644
--- a/mm/cma_debug.c
+++ b/mm/cma_debug.c
@@ -167,7 +167,7 @@ static void cma_debugfs_add_one(struct cma *cma, int idx)
 	char name[16];
 	int u32s;
 
-	sprintf(name, "cma-%d", idx);
+	sprintf(name, "cma-%s", cma->name);
 
 	tmp = debugfs_create_dir(name, cma_debugfs_root);
 
-- 
2.7.4

  reply	other threads:[~2017-04-03 18:57 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-03 18:57 [PATCHv3 00/22] Ion clean up in preparation in moving out of staging Laura Abbott
2017-04-03 18:57 ` Laura Abbott [this message]
2017-04-03 18:57 ` [PATCHv3 02/22] cma: Introduce cma_for_each_area Laura Abbott
2017-04-03 18:57 ` [PATCHv3 03/22] staging: android: ion: Remove dmap_cnt Laura Abbott
2017-04-03 18:57 ` [PATCHv3 04/22] staging: android: ion: Remove alignment from allocation field Laura Abbott
2017-04-03 18:57 ` [PATCHv3 05/22] staging: android: ion: Duplicate sg_table Laura Abbott
2017-04-03 18:57 ` [PATCHv3 06/22] staging: android: ion: Call dma_map_sg for syncing and mapping Laura Abbott
2017-04-03 18:57 ` [PATCHv3 07/22] staging: android: ion: Remove page faulting support Laura Abbott
2017-04-11  6:00   ` Archit Taneja
2017-04-03 18:57 ` [PATCHv3 08/22] staging: android: ion: Remove crufty cache support Laura Abbott
2017-04-11  5:08   ` Archit Taneja
2017-04-03 18:57 ` [PATCHv3 09/22] staging: android: ion: Remove custom ioctl interface Laura Abbott
2017-04-03 18:57 ` [PATCHv3 10/22] staging: android: ion: Remove import interface Laura Abbott
2017-04-03 18:57 ` [PATCHv3 11/22] staging: android: ion: Remove duplicate ION_IOC_MAP Laura Abbott
2017-04-03 18:57 ` [PATCHv3 12/22] staging: android: ion: Remove old platform support Laura Abbott
2017-04-03 18:57 ` [PATCHv3 13/22] staging: android: ion: Use CMA APIs directly Laura Abbott
2017-04-11  6:47   ` Laurent Pinchart
2017-04-11 16:48     ` Laura Abbott
2017-04-18 14:07   ` Greg Kroah-Hartman
2017-04-03 18:57 ` [PATCHv3 14/22] staging: android: ion: Stop butchering the DMA address Laura Abbott
2017-04-03 18:57 ` [PATCHv3 15/22] staging: android: ion: Break the ABI in the name of forward progress Laura Abbott
2017-04-03 18:57 ` [PATCHv3 16/22] staging: android: ion: Get rid of ion_phys_addr_t Laura Abbott
2017-04-03 18:57 ` [PATCHv3 17/22] staging: android: ion: Collapse internal header files Laura Abbott
2017-04-08 18:12   ` Emil Velikov
2017-04-10 15:10     ` Laura Abbott
2017-04-03 18:58 ` [PATCHv3 18/22] staging: android: ion: Rework heap registration/enumeration Laura Abbott
2017-04-03 18:58 ` [PATCHv3 19/22] staging: android: ion: Drop ion_map_kernel interface Laura Abbott
2017-04-03 18:58 ` [PATCHv3 20/22] staging: android: ion: Remove ion_handle and ion_client Laura Abbott
2017-04-03 18:58 ` [PATCHv3 21/22] staging: android: ion: Set query return value Laura Abbott
2017-04-03 18:58 ` [PATCHv3 22/22] staging/android: Update Ion TODO list Laura Abbott
2017-04-08 10:38 ` [PATCHv3 00/22] Ion clean up in preparation in moving out of staging Greg Kroah-Hartman
2017-04-10 16:20   ` Laura Abbott
2017-04-10 16:25     ` Greg Kroah-Hartman
2017-04-10 17:20       ` 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=1491245884-15852-2-git-send-email-labbott@redhat.com \
    --to=labbott@redhat.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).