Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b82e69cb authored by Sarada Prasanna Garnayak's avatar Sarada Prasanna Garnayak Committed by Gerrit - the friendly Code Review server
Browse files

cnss_sdio: pre-alloc memory leak check on probe failure and remove



WLAN module interface with high latency bus need pre-alloc
memory for the socket buffer descriptor. Wlan host diver request
for pre-alloc memory from the skb pre-alloc memory pool for socket
buffer initialization and release the memory back to socket buffer
memory pool on descriptor deinit.

After wlan host driver probe failure and driver unload check the
memory leak in socket buffer memory pool and reset the memory pool.

CRs-Fixed: 1080107
Change-Id: Ib52521628505b1f6bade3a7a6107504e3867c279
Signed-off-by: default avatarSarada Prasanna Garnayak <sgarna@codeaurora.org>
parent ef3068bf
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -35,6 +35,9 @@
#include <linux/pm_qos.h>
#include <linux/msm-bus.h>
#include <linux/msm-bus-board.h>
#ifdef CONFIG_WCNSS_MEM_PRE_ALLOC
#include <net/cnss_prealloc.h>
#endif

#define WLAN_VREG_NAME		"vdd-wlan"
#define WLAN_VREG_DSRC_NAME	"vdd-wlan-dsrc"
@@ -879,6 +882,12 @@ int cnss_sdio_wlan_register_driver(struct cnss_sdio_wlan_driver *driver)
					      cnss_info->id) : error;
	if (error) {
		pr_err("wlan probe failed error=%d\n", error);
		/**
		 * Check memory leak in skb pre-alloc memory pool
		 * Reset the skb memory pool
		 */
		wcnss_skb_prealloc_check_memory_leak();
		wcnss_skb_pre_alloc_reset();
		goto pinctrl_sleep;
	}

@@ -926,6 +935,13 @@ cnss_sdio_wlan_unregister_driver(struct cnss_sdio_wlan_driver *driver)
		return;

	driver->remove(cnss_info->func);
	/**
	 * Check memory leak in skb pre-alloc memory pool
	 * Reset the skb memory pool
	 */
	wcnss_skb_prealloc_check_memory_leak();
	wcnss_skb_pre_alloc_reset();

	cnss_info->wdrv = NULL;
	cnss_set_pinctrl_state(cnss_pdata, PINCTRL_SLEEP);
	cnss_put_hw_resources(cnss_info->dev);