diff --git a/CORE/HDD/src/wlan_hdd_request_manager.c b/CORE/HDD/src/wlan_hdd_request_manager.c
index 2f96e98..9305c1c 100644
--- a/CORE/HDD/src/wlan_hdd_request_manager.c
+++ b/CORE/HDD/src/wlan_hdd_request_manager.c
@@ -84,16 +84,14 @@
 
 	if (!is_initialized) {
 		hddLog(VOS_TRACE_LEVEL_ERROR,
-		       FL("invoked when not initialized from %pS"),
-		       (void *)_RET_IP_);
+		       FL("invoked when not initialized"));
 		return NULL;
 	}
 
 	length = sizeof(*request) + params->priv_size;
 	request = vos_mem_malloc(length);
 	if (!request) {
-		hddLog(VOS_TRACE_LEVEL_ERROR, FL("allocation failed for %pS"),
-		       (void *)_RET_IP_);
+		hddLog(VOS_TRACE_LEVEL_ERROR, FL("allocation failed"));
 		return NULL;
 	}
 	request->reference_count = 1;
@@ -103,8 +101,8 @@
 	request->cookie = cookie++;
 	hdd_list_insert_back(&requests, &request->node);
 	spin_unlock_bh(&spinlock);
-	hddLog(VOS_TRACE_LEVEL_INFO, FL("request %pK, cookie %pK, caller %pS"),
-	       request, request->cookie, (void *)_RET_IP_);
+	hddLog(VOS_TRACE_LEVEL_INFO, FL("request %pK, cookie %pK"),
+	       request, request->cookie);
 
 	return request;
 }
@@ -126,8 +124,7 @@
 
 	if (!is_initialized) {
 		hddLog(VOS_TRACE_LEVEL_ERROR,
-		       FL("invoked when not initialized from %pS"),
-		       (void *)_RET_IP_);
+		       FL("invoked when not initialized"));
 		return NULL;
 	}
 	spin_lock_bh(&spinlock);
@@ -135,8 +132,8 @@
 	if (request)
 		request->reference_count++;
 	spin_unlock_bh(&spinlock);
-	hddLog(VOS_TRACE_LEVEL_INFO, FL("cookie %pK, request %pK, caller %pS"),
-	       cookie, request, (void *)_RET_IP_);
+	hddLog(VOS_TRACE_LEVEL_INFO, FL("cookie %pK, request %pK"),
+	       cookie, request);
 
 	return request;
 }
@@ -145,8 +142,8 @@
 {
 	bool unlinked = false;
 
-	hddLog(VOS_TRACE_LEVEL_INFO, FL("request %pK, cookie %pK, caller %pS"),
-	       request, request->cookie, (void *)_RET_IP_);
+	hddLog(VOS_TRACE_LEVEL_INFO, FL("request %pK, cookie %pK"),
+	       request, request->cookie);
 	spin_lock_bh(&spinlock);
 	request->reference_count--;
 	if (0 == request->reference_count) {
@@ -171,7 +168,6 @@
 
 void hdd_request_manager_init(void)
 {
-	hddLog(VOS_TRACE_LEVEL_INFO, FL("%pS"), (void *)_RET_IP_);
 	if (is_initialized)
 		return;
 
@@ -189,6 +185,5 @@
  */
 void hdd_request_manager_deinit(void)
 {
-	hddLog(VOS_TRACE_LEVEL_INFO, FL("%pS"), (void *)_RET_IP_);
 	is_initialized = false;
 }
diff --git a/CORE/VOSS/src/vos_memory.c b/CORE/VOSS/src/vos_memory.c
index 44e0e4c..3ed9dca 100644
--- a/CORE/VOSS/src/vos_memory.c
+++ b/CORE/VOSS/src/vos_memory.c
@@ -225,10 +225,10 @@
       if (vos_timer_get_system_time() - time_before_kmalloc >=
                                     VOS_GET_MEMORY_TIME_THRESHOLD)
          VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
-               "%s: kmalloc took %lu msec for size %d called from %pS at line %d",
+               "%s: kmalloc took %lu msec for size %d called at line %d",
                __func__,
                vos_timer_get_system_time() - time_before_kmalloc,
-               size, (void *)_RET_IP_, lineNum);
+               size, lineNum);
       if ((flags != GFP_ATOMIC) && (NULL == memPtr))
       {
          WARN_ON(1);
@@ -249,10 +249,10 @@
    if (vos_timer_get_system_time() - time_before_kmalloc >=
                               VOS_GET_MEMORY_TIME_THRESHOLD)
       VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
-           "%s: kmalloc took %lu msec for size %d called from %pS at line %d",
+           "%s: kmalloc took %lu msec for size %d called at line %d",
             __func__,
             vos_timer_get_system_time() - time_before_kmalloc,
-            size, (void *)_RET_IP_, lineNum);
+            size, lineNum);
 
    if(memStruct != NULL)
    {
@@ -370,10 +370,10 @@
    if (vos_timer_get_system_time() - time_before_kmalloc >=
                               VOS_GET_MEMORY_TIME_THRESHOLD)
       VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
-          "%s: kmalloc took %lu msec for size %d from %pS",
+          "%s: kmalloc took %lu msec for size %d",
           __func__,
           vos_timer_get_system_time() - time_before_kmalloc,
-          size, (void *)_RET_IP_);
+          size);
 
    if ((flags != GFP_ATOMIC) && (NULL == memPtr))
    {
@@ -420,10 +420,10 @@
     if (vos_timer_get_system_time() - time_before_vmalloc >=
                               VOS_GET_MEMORY_TIME_THRESHOLD)
         VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
-           "%s: vmalloc took %lu msec for size %d from %pS",
+           "%s: vmalloc took %lu msec for size %d",
            __func__,
            vos_timer_get_system_time() - time_before_vmalloc,
-           size, (void *)_RET_IP_);
+           size);
     return memPtr;
 }
 
