|
@@ -402,6 +402,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. Returns
|
|
|
+ * true if the entire range is contained in the pool and false otherwise.
|
|
|
+ */
|
|
|
+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
|