wlan: Fix wlan mgmt pkt drop issue.

pMac->sys.gSysBbtPendingMgmtCount is incremented when a
new packet is queued in MC thread and decremented when its
processing starts in lim.This way packet can get queued in
linDeferMsg queue and come back again to limProcessMessages,
thus decrementing the count again. To resolve it, now we will
decrement its value when the processing is completed and we
are about to drop the packet.

Change-Id: Ie4b88a4c017589649393ae36dbc2ee66b769ced0
CRs-Fixed: 788782
diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c
index 36e02fe..0e242e3 100644
--- a/CORE/MAC/src/pe/lim/limApi.c
+++ b/CORE/MAC/src/pe/lim/limApi.c
@@ -1421,6 +1421,8 @@
     {
         vos_spin_lock_release( &pMac->sys.lock );
         // drop all management packets
+        limLog( pMac, LOGW,
+                FL ( "Management queue 1/4th full, dropping management packets" ));
         vos_pkt_return_packet(pVosPkt);
         return  VOS_STATUS_SUCCESS;
     }
@@ -1433,6 +1435,8 @@
             SIR_MAC_MGMT_PROBE_REQ ||  mHdr->fc.subType == SIR_MAC_MGMT_PROBE_RSP )
         {
             vos_spin_lock_release( &pMac->sys.lock );
+            limLog( pMac, LOGW,
+                    FL ( "Dropping probe req, probe resp or beacon" ));
             vos_pkt_return_packet(pVosPkt);
             return  VOS_STATUS_SUCCESS;
         }
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index 09ea7e9..7dc8cf2 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -1260,7 +1260,17 @@
     return match;
 }
 
-
+void limDecrementPendingMgmtCount (tpAniSirGlobal pMac)
+{
+    if( pMac->sys.gSysBbtPendingMgmtCount )
+    {
+         vos_spin_lock_acquire( &pMac->sys.lock );
+         pMac->sys.gSysBbtPendingMgmtCount--;
+         vos_spin_lock_release( &pMac->sys.lock );
+    }
+    else
+         limLog(pMac, LOGW, FL("Pending Management count going negative"));
+}
 /**
  * limProcessMessages
  *
@@ -1385,9 +1395,6 @@
 #ifdef WLAN_DEBUG                
             pMac->lim.numBbt++;
 #endif
-            vos_spin_lock_acquire( &pMac->sys.lock );
-            pMac->sys.gSysBbtPendingMgmtCount--;
-            vos_spin_lock_release( &pMac->sys.lock );
             {
                 v_U16_t     pktLen = 0;
                 vos_pkt_t  *pVosPkt;
@@ -1412,6 +1419,7 @@
 
                 if( !VOS_IS_STATUS_SUCCESS(vosStatus) )
                 {
+                    limDecrementPendingMgmtCount(pMac);
                     vos_pkt_return_packet(pVosPkt);
                     break;
 
@@ -1425,6 +1433,7 @@
 
                 if( limAgeOutProbeReq ( pMac, &limMsgNew, pVosPkt ))
                 {
+                   limDecrementPendingMgmtCount(pMac);
                    break;
                 }
 
@@ -1460,6 +1469,7 @@
                                 pMac->lim.gLimSystemRole,  pMac->lim.gLimMlmState,  pMac->lim.gLimPrevMlmState);)
                             limLogSessionStates(pMac);
                             limPrintMsgName(pMac, LOGE, limMsg->type);
+                            limDecrementPendingMgmtCount(pMac);
                             vos_pkt_return_packet(pVosPkt);
                         }
                 }
@@ -1469,6 +1479,7 @@
                      * Asumption here is when Rx mgmt frame processing is done,
                      * voss packet could be freed here.
                      */
+                    limDecrementPendingMgmtCount(pMac);
                     vos_pkt_return_packet(pVosPkt);
                 }
             }