All of lore.kernel.org
 help / color / mirror / Atom feed
From: lauraa@codeaurora.org (Laura Abbott)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv4 2/5] lib/genalloc.c: Add genpool range check function
Date: Wed,  2 Jul 2014 11:03:35 -0700	[thread overview]
Message-ID: <1404324218-4743-3-git-send-email-lauraa@codeaurora.org> (raw)
In-Reply-To: <1404324218-4743-1-git-send-email-lauraa@codeaurora.org>


After allocating an address from a particular genpool,
there is no good way to verify if that address actually
belongs to a genpool. Introduce addr_in_gen_pool which
will return if an address plus size falls completely
within the genpool range.

Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
---
 include/linux/genalloc.h |  3 +++
 lib/genalloc.c           | 29 +++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h
index 3cd0934..1ccaab4 100644
--- a/include/linux/genalloc.h
+++ b/include/linux/genalloc.h
@@ -121,6 +121,9 @@ extern struct gen_pool *devm_gen_pool_create(struct device *dev,
 		int min_alloc_order, int nid);
 extern struct gen_pool *dev_get_gen_pool(struct device *dev);
 
+bool addr_in_gen_pool(struct gen_pool *pool, unsigned long start,
+			size_t size);
+
 #ifdef CONFIG_OF
 extern struct gen_pool *of_get_named_gen_pool(struct device_node *np,
 	const char *propname, int index);
diff --git a/lib/genalloc.c b/lib/genalloc.c
index c2b3ad7..6f03722 100644
--- a/lib/genalloc.c
+++ b/lib/genalloc.c
@@ -403,6 +403,35 @@ void gen_pool_for_each_chunk(struct gen_pool *pool,
 EXPORT_SYMBOL(gen_pool_for_each_chunk);
 
 /**
+ * addr_in_gen_pool - checks if an address falls within the range of a pool
+ * @pool:	the generic memory pool
+ * @start:	start address
+ * @size:	size of the region
+ *
+ * Check if the range of addresses falls within the specified pool. Takes
+ * the rcu_read_lock for the duration of the check.
+ */
+bool addr_in_gen_pool(struct gen_pool *pool, unsigned long start,
+			size_t size)
+{
+	bool found = false;
+	unsigned long end = start + size;
+	struct gen_pool_chunk *chunk;
+
+	rcu_read_lock();
+	list_for_each_entry_rcu(chunk, &(pool)->chunks, next_chunk) {
+		if (start >= chunk->start_addr && start <= chunk->end_addr) {
+			if (end <= chunk->end_addr) {
+				found = true;
+				break;
+			}
+		}
+	}
+	rcu_read_unlock();
+	return found;
+}
+
+/**
  * gen_pool_avail - get available free space of the pool
  * @pool: pool to get available free space
  *
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation

WARNING: multiple messages have this Message-ID (diff)
From: Laura Abbott <lauraa@codeaurora.org>
To: Will Deacon <will.deacon@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>
Cc: Laura Abbott <lauraa@codeaurora.org>,
	David Riley <davidriley@chromium.org>,
	linux-arm-kernel@lists.infradead.org,
	Ritesh Harjain <ritesh.harjani@gmail.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: [PATCHv4 2/5] lib/genalloc.c: Add genpool range check function
Date: Wed,  2 Jul 2014 11:03:35 -0700	[thread overview]
Message-ID: <1404324218-4743-3-git-send-email-lauraa@codeaurora.org> (raw)
In-Reply-To: <1404324218-4743-1-git-send-email-lauraa@codeaurora.org>


After allocating an address from a particular genpool,
there is no good way to verify if that address actually
belongs to a genpool. Introduce addr_in_gen_pool which
will return if an address plus size falls completely
within the genpool range.

Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
---
 include/linux/genalloc.h |  3 +++
 lib/genalloc.c           | 29 +++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h
index 3cd0934..1ccaab4 100644
--- a/include/linux/genalloc.h
+++ b/include/linux/genalloc.h
@@ -121,6 +121,9 @@ extern struct gen_pool *devm_gen_pool_create(struct device *dev,
 		int min_alloc_order, int nid);
 extern struct gen_pool *dev_get_gen_pool(struct device *dev);
 
+bool addr_in_gen_pool(struct gen_pool *pool, unsigned long start,
+			size_t size);
+
 #ifdef CONFIG_OF
 extern struct gen_pool *of_get_named_gen_pool(struct device_node *np,
 	const char *propname, int index);
diff --git a/lib/genalloc.c b/lib/genalloc.c
index c2b3ad7..6f03722 100644
--- a/lib/genalloc.c
+++ b/lib/genalloc.c
@@ -403,6 +403,35 @@ void gen_pool_for_each_chunk(struct gen_pool *pool,
 EXPORT_SYMBOL(gen_pool_for_each_chunk);
 
 /**
+ * addr_in_gen_pool - checks if an address falls within the range of a pool
+ * @pool:	the generic memory pool
+ * @start:	start address
+ * @size:	size of the region
+ *
+ * Check if the range of addresses falls within the specified pool. Takes
+ * the rcu_read_lock for the duration of the check.
+ */
+bool addr_in_gen_pool(struct gen_pool *pool, unsigned long start,
+			size_t size)
+{
+	bool found = false;
+	unsigned long end = start + size;
+	struct gen_pool_chunk *chunk;
+
+	rcu_read_lock();
+	list_for_each_entry_rcu(chunk, &(pool)->chunks, next_chunk) {
+		if (start >= chunk->start_addr && start <= chunk->end_addr) {
+			if (end <= chunk->end_addr) {
+				found = true;
+				break;
+			}
+		}
+	}
+	rcu_read_unlock();
+	return found;
+}
+
+/**
  * gen_pool_avail - get available free space of the pool
  * @pool: pool to get available free space
  *
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Laura Abbott <lauraa@codeaurora.org>
To: Will Deacon <will.deacon@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>
Cc: Laura Abbott <lauraa@codeaurora.org>,
	David Riley <davidriley@chromium.org>,
	linux-arm-kernel@lists.infradead.org,
	Ritesh Harjain <ritesh.harjani@gmail.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: [PATCHv4 2/5] lib/genalloc.c: Add genpool range check function
Date: Wed,  2 Jul 2014 11:03:35 -0700	[thread overview]
Message-ID: <1404324218-4743-3-git-send-email-lauraa@codeaurora.org> (raw)
In-Reply-To: <1404324218-4743-1-git-send-email-lauraa@codeaurora.org>


After allocating an address from a particular genpool,
there is no good way to verify if that address actually
belongs to a genpool. Introduce addr_in_gen_pool which
will return if an address plus size falls completely
within the genpool range.

Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
---
 include/linux/genalloc.h |  3 +++
 lib/genalloc.c           | 29 +++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h
index 3cd0934..1ccaab4 100644
--- a/include/linux/genalloc.h
+++ b/include/linux/genalloc.h
@@ -121,6 +121,9 @@ extern struct gen_pool *devm_gen_pool_create(struct device *dev,
 		int min_alloc_order, int nid);
 extern struct gen_pool *dev_get_gen_pool(struct device *dev);
 
+bool addr_in_gen_pool(struct gen_pool *pool, unsigned long start,
+			size_t size);
+
 #ifdef CONFIG_OF
 extern struct gen_pool *of_get_named_gen_pool(struct device_node *np,
 	const char *propname, int index);
diff --git a/lib/genalloc.c b/lib/genalloc.c
index c2b3ad7..6f03722 100644
--- a/lib/genalloc.c
+++ b/lib/genalloc.c
@@ -403,6 +403,35 @@ void gen_pool_for_each_chunk(struct gen_pool *pool,
 EXPORT_SYMBOL(gen_pool_for_each_chunk);
 
 /**
+ * addr_in_gen_pool - checks if an address falls within the range of a pool
+ * @pool:	the generic memory pool
+ * @start:	start address
+ * @size:	size of the region
+ *
+ * Check if the range of addresses falls within the specified pool. Takes
+ * the rcu_read_lock for the duration of the check.
+ */
+bool addr_in_gen_pool(struct gen_pool *pool, unsigned long start,
+			size_t size)
+{
+	bool found = false;
+	unsigned long end = start + size;
+	struct gen_pool_chunk *chunk;
+
+	rcu_read_lock();
+	list_for_each_entry_rcu(chunk, &(pool)->chunks, next_chunk) {
+		if (start >= chunk->start_addr && start <= chunk->end_addr) {
+			if (end <= chunk->end_addr) {
+				found = true;
+				break;
+			}
+		}
+	}
+	rcu_read_unlock();
+	return found;
+}
+
+/**
  * gen_pool_avail - get available free space of the pool
  * @pool: pool to get available free space
  *
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation


  parent reply	other threads:[~2014-07-02 18:03 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-02 18:03 [PATCHv4 0/5] DMA Atomic pool for arm64 Laura Abbott
2014-07-02 18:03 ` Laura Abbott
2014-07-02 18:03 ` Laura Abbott
2014-07-02 18:03 ` [PATCHv4 1/5] lib/genalloc.c: Add power aligned algorithm Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-03 18:10   ` Will Deacon
2014-07-03 18:10     ` Will Deacon
2014-07-03 18:10     ` Will Deacon
2014-07-09 22:35     ` Olof Johansson
2014-07-09 22:35       ` Olof Johansson
2014-07-09 22:35       ` Olof Johansson
2014-07-02 18:03 ` Laura Abbott [this message]
2014-07-02 18:03   ` [PATCHv4 2/5] lib/genalloc.c: Add genpool range check function Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-03 18:14   ` Will Deacon
2014-07-03 18:14     ` Will Deacon
2014-07-03 18:14     ` Will Deacon
2014-07-09 22:33   ` Olof Johansson
2014-07-09 22:33     ` Olof Johansson
2014-07-09 22:33     ` Olof Johansson
2014-07-21 19:51     ` Laura Abbott
2014-07-21 19:51       ` Laura Abbott
2014-07-21 19:51       ` Laura Abbott
2014-07-22 15:50       ` Catalin Marinas
2014-07-22 15:50         ` Catalin Marinas
2014-07-22 15:50         ` Catalin Marinas
2014-07-02 18:03 ` [PATCHv4 3/5] common: dma-mapping: Introduce common remapping functions Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-09 22:46   ` Olof Johansson
2014-07-09 22:46     ` Olof Johansson
2014-07-09 22:46     ` Olof Johansson
2014-07-18 14:13     ` Catalin Marinas
2014-07-18 14:13       ` Catalin Marinas
2014-07-18 14:13       ` Catalin Marinas
2014-07-18 13:53   ` Catalin Marinas
2014-07-18 13:53     ` Catalin Marinas
2014-07-18 13:53     ` Catalin Marinas
2014-07-21 19:33     ` Laura Abbott
2014-07-21 19:33       ` Laura Abbott
2014-07-21 19:33       ` Laura Abbott
2014-07-22 16:04       ` Catalin Marinas
2014-07-22 16:04         ` Catalin Marinas
2014-07-22 16:04         ` Catalin Marinas
2014-07-02 18:03 ` [PATCHv4 4/5] arm: use genalloc for the atomic pool Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-04 13:42   ` Thierry Reding
2014-07-04 13:42     ` Thierry Reding
2014-07-21 21:22     ` Laura Abbott
2014-07-21 21:22       ` Laura Abbott
2014-07-21 21:22       ` Laura Abbott
2014-07-02 18:03 ` [PATCHv4 5/5] arm64: Add atomic pool for non-coherent and CMA allocations Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-02 18:03   ` Laura Abbott
2014-07-04 13:35   ` Thierry Reding
2014-07-04 13:35     ` Thierry Reding
2014-07-21 22:00     ` Laura Abbott
2014-07-21 22:00       ` Laura Abbott
2014-07-21 22:00       ` Laura Abbott
2014-07-18 13:43   ` Catalin Marinas
2014-07-18 13:43     ` Catalin Marinas
2014-07-18 13:43     ` Catalin Marinas
2014-07-21 22:36     ` Laura Abbott
2014-07-21 22:36       ` Laura Abbott
2014-07-21 22:36       ` Laura Abbott
2014-07-22 15:56       ` Catalin Marinas
2014-07-22 15:56         ` Catalin Marinas
2014-07-22 15:56         ` Catalin Marinas
2014-07-22 18:06   ` Arnd Bergmann
2014-07-22 18:06     ` Arnd Bergmann
2014-07-22 18:06     ` Arnd Bergmann
2014-07-22 21:03     ` Catalin Marinas
2014-07-22 21:03       ` Catalin Marinas
2014-07-22 21:03       ` Catalin Marinas
2014-07-22 23:51       ` Laura Abbott
2014-07-22 23:51         ` Laura Abbott
2014-07-22 23:51         ` Laura Abbott
2014-07-23 11:12       ` Arnd Bergmann
2014-07-23 11:12         ` Arnd Bergmann
2014-07-23 11:12         ` Arnd Bergmann
  -- strict thread matches above, loose matches on Subject: below --
2014-07-23  1:35 [PATCHv4 0/5] Atomic pool for arm64 Laura Abbott
2014-07-23  1:35 ` [PATCHv4 2/5] lib/genalloc.c: Add genpool range check function Laura Abbott
2014-07-23  1:35   ` Laura Abbott
2014-07-23  1:35   ` 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=1404324218-4743-3-git-send-email-lauraa@codeaurora.org \
    --to=lauraa@codeaurora.org \
    --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 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.