Browse Source

qcacmn: Remove CONFIG_CNSS ifdef for memory proallocatation

Memory preallocation is hidden behind two flags, CONFIG_CNSS and
CONFIG_WCNSS_MEM_PRE_ALLOC. Remove the check for CONFIG_CNSS, as the
presence of CONFIG_WCNSS_MEM_PRE_ALLOC is enough.

Change-Id: I233f6f31065c2d1da1ffb25a5013a17ac0b99246
CRs-Fixed: 2016844
Dustin Brown 8 years ago
parent
commit
747001c110
1 changed files with 54 additions and 16 deletions
  1. 54 16
      qdf/linux/src/qdf_mem.c

+ 54 - 16
qdf/linux/src/qdf_mem.c

@@ -826,6 +826,47 @@ void qdf_mem_exit(void)
 }
 EXPORT_SYMBOL(qdf_mem_exit);
 
+#ifdef CONFIG_WCNSS_MEM_PRE_ALLOC
+/**
+ * qdf_mem_prealloc_get() - conditionally pre-allocate memory
+ * @size: the number of bytes to allocate
+ *
+ * If size if greater than WCNSS_PRE_ALLOC_GET_THRESHOLD, this function returns
+ * a chunk of pre-allocated memory. If size if less than or equal to
+ * WCNSS_PRE_ALLOC_GET_THRESHOLD, or an error occurs, NULL is returned instead.
+ *
+ * Return: NULL on failure, non-NULL on success
+ */
+static void *qdf_mem_prealloc_get(size_t size)
+{
+	void *mem;
+
+	if (size <= WCNSS_PRE_ALLOC_GET_THRESHOLD)
+		return NULL;
+
+	mem = wcnss_prealloc_get(size);
+	if (mem)
+		memset(mem, 0, size);
+
+	return mem;
+}
+
+static inline bool qdf_mem_prealloc_put(void *ptr)
+{
+	return wcnss_prealloc_put(ptr);
+}
+#else
+static inline void *qdf_mem_prealloc_get(size_t size)
+{
+	return NULL;
+}
+
+static inline bool qdf_mem_prealloc_put(void *ptr)
+{
+	return false;
+}
+#endif /* CONFIG_WCNSS_MEM_PRE_ALLOC */
+
 /**
  * qdf_mem_malloc_debug() - debug version of QDF memory allocation API
  * @size: Number of bytes of memory to allocate.
@@ -858,16 +899,9 @@ void *qdf_mem_malloc_debug(size_t size,
 		return NULL;
 	}
 
-#if defined(CONFIG_CNSS) && defined(CONFIG_WCNSS_MEM_PRE_ALLOC)
-	if (size > WCNSS_PRE_ALLOC_GET_THRESHOLD) {
-		void *pmem;
-		pmem = wcnss_prealloc_get(size);
-		if (NULL != pmem) {
-			memset(pmem, 0, size);
-			return pmem;
-		}
-	}
-#endif
+	mem_ptr = qdf_mem_prealloc_get(size);
+	if (mem_ptr)
+		return mem_ptr;
 
 	if (in_interrupt() || irqs_disabled() || in_atomic())
 		flags = GFP_ATOMIC;
@@ -983,10 +1017,9 @@ void qdf_mem_free(void *ptr)
 		QDF_BUG(0);
 	}
 
-#if defined(CONFIG_CNSS) && defined(CONFIG_WCNSS_MEM_PRE_ALLOC)
-	if (wcnss_prealloc_put(ptr))
+	if (qdf_mem_prealloc_put(ptr))
 		return;
-#endif
+
 	if (!qdf_atomic_dec_and_test(&mem_struct->in_use))
 		return;
 
@@ -1085,6 +1118,11 @@ EXPORT_SYMBOL(qdf_mem_free);
 void *qdf_mem_malloc(size_t size)
 {
 	int flags = GFP_KERNEL;
+	void *mem;
+
+	mem = qdf_mem_prealloc_get(size);
+	if (mem)
+		return mem;
 
 	if (in_interrupt() || irqs_disabled() || in_atomic())
 		flags = GFP_ATOMIC;
@@ -1105,10 +1143,10 @@ void qdf_mem_free(void *ptr)
 {
 	if (ptr == NULL)
 		return;
-#if defined(CONFIG_CNSS) && defined(CONFIG_WCNSS_MEM_PRE_ALLOC)
-	if (wcnss_prealloc_put(ptr))
+
+	if (qdf_mem_prealloc_put(ptr))
 		return;
-#endif
+
 	kfree(ptr);
 }
 EXPORT_SYMBOL(qdf_mem_free);