|
@@ -102,6 +102,39 @@ out_muram:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * cpm_muram_alloc_common - cpm_muram_alloc common code
|
|
|
+ * @size: number of bytes to allocate
|
|
|
+ * @algo: algorithm for alloc.
|
|
|
+ * @data: data for genalloc's algorithm.
|
|
|
+ *
|
|
|
+ * This function returns an offset into the muram area.
|
|
|
+ */
|
|
|
+static unsigned long cpm_muram_alloc_common(unsigned long size,
|
|
|
+ genpool_algo_t algo, void *data)
|
|
|
+{
|
|
|
+ struct muram_block *entry;
|
|
|
+ unsigned long start;
|
|
|
+
|
|
|
+ start = gen_pool_alloc_algo(muram_pool, size, algo, data);
|
|
|
+ if (!start)
|
|
|
+ goto out2;
|
|
|
+ start = start - GENPOOL_OFFSET;
|
|
|
+ memset_io(cpm_muram_addr(start), 0, size);
|
|
|
+ entry = kmalloc(sizeof(*entry), GFP_KERNEL);
|
|
|
+ if (!entry)
|
|
|
+ goto out1;
|
|
|
+ entry->start = start;
|
|
|
+ entry->size = size;
|
|
|
+ list_add(&entry->head, &muram_block_list);
|
|
|
+
|
|
|
+ return start;
|
|
|
+out1:
|
|
|
+ gen_pool_free(muram_pool, start, size);
|
|
|
+out2:
|
|
|
+ return (unsigned long)-ENOMEM;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* cpm_muram_alloc - allocate the requested size worth of multi-user ram
|
|
|
* @size: number of bytes to allocate
|
|
@@ -175,39 +208,6 @@ unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long size)
|
|
|
}
|
|
|
EXPORT_SYMBOL(cpm_muram_alloc_fixed);
|
|
|
|
|
|
-/*
|
|
|
- * cpm_muram_alloc_common - cpm_muram_alloc common code
|
|
|
- * @size: number of bytes to allocate
|
|
|
- * @algo: algorithm for alloc.
|
|
|
- * @data: data for genalloc's algorithm.
|
|
|
- *
|
|
|
- * This function returns an offset into the muram area.
|
|
|
- */
|
|
|
-unsigned long cpm_muram_alloc_common(unsigned long size, genpool_algo_t algo,
|
|
|
- void *data)
|
|
|
-{
|
|
|
- struct muram_block *entry;
|
|
|
- unsigned long start;
|
|
|
-
|
|
|
- start = gen_pool_alloc_algo(muram_pool, size, algo, data);
|
|
|
- if (!start)
|
|
|
- goto out2;
|
|
|
- start = start - GENPOOL_OFFSET;
|
|
|
- memset_io(cpm_muram_addr(start), 0, size);
|
|
|
- entry = kmalloc(sizeof(*entry), GFP_KERNEL);
|
|
|
- if (!entry)
|
|
|
- goto out1;
|
|
|
- entry->start = start;
|
|
|
- entry->size = size;
|
|
|
- list_add(&entry->head, &muram_block_list);
|
|
|
-
|
|
|
- return start;
|
|
|
-out1:
|
|
|
- gen_pool_free(muram_pool, start, size);
|
|
|
-out2:
|
|
|
- return (unsigned long)-ENOMEM;
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* cpm_muram_addr - turn a muram offset into a virtual address
|
|
|
* @offset: muram offset to convert
|