void SafePointNode::pop_monitor() { // Delete last monitor from debug info debug_only(int num_before_pop = jvms()->nof_monitors()); const int MonitorEdges = (1<<JVMState::logMonitorEdges); int endoff = jvms()->endoff(); int new_endoff = endoff - MonitorEdges; jvms()->set_endoff(new_endoff); while (endoff > new_endoff) del_req(--endoff); assert(jvms()->nof_monitors() == num_before_pop-1, ""); }
static void sendQueuedReqToMacSw(tpAniSirGlobal pMac, tHddHandle hHdd) { tCfgReq *req ; /* Send the head req */ req = pMac->ccm.reqQ.head ; if (req) { if (req->state == eCCM_REQ_QUEUED) { /* Send WNI_CFG_SET_REQ */ req->state = eCCM_REQ_SENT; if (sendCfg(pMac, hHdd, req, eANI_BOOLEAN_TRUE) != eHAL_STATUS_SUCCESS) { smsLog( pMac, LOGW, FL("sendCfg() failed")); palSpinLockTake(hHdd, pMac->ccm.lock); del_req(req, &pMac->ccm.reqQ) ; palSpinLockGive(hHdd, pMac->ccm.lock); if (req->callback) { req->callback((tHalHandle)pMac, WNI_CFG_OTHER_ERROR) ; } #ifdef CCM_DEBUG smsLog(pMac, LOGW, FL("ccmComplete(%p)"), req->done); #endif ccmComplete(hHdd, req->done); freeCfgReq(hHdd, req); } } else { smsLog( pMac, LOGW, FL("reqState is not eCCM_REQ_QUEUED, is %d"), req->state ); } } return ; }
//------------------------------Ideal------------------------------------------ // Remove dead inputs Node *RootNode::Ideal(PhaseGVN *phase, bool can_reshape) { for( uint i = 1; i < req(); i++ ) { // For all inputs // Check for and remove dead inputs if( phase->type(in(i)) == Type::TOP ) { del_req(i--); // Delete TOP inputs } } // I used to do tail-splitting in the Ideal graph here, but it does not // work. The tail-splitting forces values live into the Return to be // ready at a point which dominates the split returns. This forces Stores // to be hoisted high. The "proper" fix would be to split Stores down // each path, but this makes the split unprofitable. If we want to do this // optimization, it needs to be done after allocation so we can count all // the instructions needing to be cloned in the cost metric. // There used to be a spoof here for caffeine marks which completely // eliminated very simple self-recursion recursions, but it's not worth it. // Deep inlining of self-calls gets nearly all of the same benefits. // If we want to get the rest of the win later, we should pattern match // simple recursive call trees to closed-form solutions. return NULL; // No further opportunities exposed }
static void purgeReqQ(tHalHandle hHal) { tHddHandle hHdd = halHandle2HddHandle(hHal); tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tCfgReq *req, *tmp ; for (req = pMac->ccm.reqQ.head; req; req = tmp) { /* loop thru reqQ and invoke callback to return failure */ smsLog(pMac, LOGW, FL("deleting cfgReq, cfgid=%d"), (int)req->cfgId); tmp = req->next ; if (req->callback) { req->callback(hHal, eHAL_STATUS_FAILURE); } palSpinLockTake(hHdd, pMac->ccm.lock); del_req(req, &pMac->ccm.reqQ); palSpinLockGive(hHdd, pMac->ccm.lock); freeCfgReq(hHdd, req); } return ; }
/* This function executes in (Linux) softirq context */ void ccmCfgCnfMsgHandler(tHalHandle hHal, void *m) { tHddHandle hHdd = halHandle2HddHandle(hHal); tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tSirMbMsg *msg = (tSirMbMsg *)m ; tANI_U32 result, cfgId ; tCfgReq *req, *old ; #if 0 if (pMac->ccm.state != eCCM_STARTED) { return ; } #endif result = pal_be32_to_cpu(msg->data[0]); cfgId = pal_be32_to_cpu(msg->data[1]); if (pMac->ccm.replay.started && cfgId == CFG_UPDATE_MAGIC_DWORD) { pMac->ccm.replay.in_progress = 1 ; return ; } if (pMac->ccm.replay.in_progress) { /* save error code */ if (!CCM_IS_RESULT_SUCCESS(result)) { pMac->ccm.replay.result = result ; } if (--pMac->ccm.replay.nr_param == 0) { pMac->ccm.replay.in_progress = 0 ; if (pMac->ccm.replay.callback) { pMac->ccm.replay.callback(hHal, pMac->ccm.replay.result); } pMac->ccm.replay.started = 0 ; /* Wake up the sleeping process */ #ifdef CCM_DEBUG smsLog(pMac, LOGW, FL("ccmComplete(%p)"), pMac->ccm.replay.done); #endif ccmComplete(hHdd, pMac->ccm.replay.done); //Let go with the rest of the set CFGs waiting. sendQueuedReqToMacSw(pMac, hHdd); } } else { /* * Try to match this response with the request. * What if i could not find the req entry ??? */ req = pMac->ccm.reqQ.head ; if (req) { if (req->cfgId == cfgId && req->state == eCCM_REQ_SENT) { palSpinLockTake(hHdd, pMac->ccm.lock); del_req(req, &pMac->ccm.reqQ); palSpinLockGive(hHdd, pMac->ccm.lock); req->state = eCCM_REQ_DONE ; if (result == WNI_CFG_NEED_RESTART || result == WNI_CFG_NEED_RELOAD) { #ifdef CCM_DEBUG smsLog(pMac, LOGW, FL("need restart/reload, cfgId=%d"), req->cfgId) ; #endif //purgeReqQ(hHal); } /* invoke callback */ if (req->callback) { #ifdef CCM_DEBUG req->callback(hHal, cfgId) ; #else req->callback(hHal, result) ; #endif } /* Wake up the sleeping process */ #ifdef CCM_DEBUG smsLog(pMac, LOGW, FL("cfgId=%ld, calling ccmComplete(%p)"), cfgId, req->done); #endif ccmComplete(hHdd, req->done); /* move the completed req from reqQ to comp[] */ if (req->toBeSaved && (CCM_IS_RESULT_SUCCESS(result))) { if (cfgId < CFG_PARAM_MAX_NUM) { if ((old = pMac->ccm.comp[cfgId]) != NULL) { freeCfgReq(hHdd, old) ; } pMac->ccm.comp[cfgId] = req ; } } else { freeCfgReq(hHdd, req) ; } sendQueuedReqToMacSw(pMac, hHdd); } else { smsLog( pMac, LOGW, FL("can not match RSP with REQ, rspcfgid=%d result=%d reqcfgid=%d reqstate=%d"), (int)cfgId, (int)result, req->cfgId, req->state); #ifdef CCM_DEBUG smsLog(pMac, LOGW, FL("ccmComplete(%p)"), req->done); #endif } } } return ; }
static eHalStatus cfgSetSub(tpAniSirGlobal pMac, tHddHandle hHdd, tANI_U32 cfgId, tANI_U32 type, tANI_S32 length, void *ccmPtr, tANI_U32 ccmValue, tCcmCfgSetCallback callback, eAniBoolean toBeSaved, void *sem, tCfgReq **r) { eHalStatus status = eHAL_STATUS_SUCCESS; tCfgReq *req ; do { *r = NULL ; if (pMac->ccm.state == eCCM_STOPPED) { status = eHAL_STATUS_FAILURE ; break ; } req = allocateCfgReq(hHdd, type, length); if (req == NULL) { status = eHAL_STATUS_FAILED_ALLOC ; break ; } req->next = NULL ; req->cfgId = (tANI_U16)cfgId ; req->type = (tANI_U8)type ; req->state = eCCM_REQ_QUEUED ; req->toBeSaved = !!toBeSaved ; req->length = length ; req->done = sem ; req->callback = callback ; if (type == CCM_INTEGER_TYPE) { req->ccmValue = ccmValue ; } else { vos_mem_copy((void *)req->ccmPtr, (void *)ccmPtr, length); } palSpinLockTake(hHdd, pMac->ccm.lock); add_req_tail(req, &pMac->ccm.reqQ); /* If this is the first req on the queue, send it to MAC SW */ if ((pMac->ccm.replay.started == 0) && (pMac->ccm.reqQ.head == req)) { /* Send WNI_CFG_SET_REQ */ req->state = eCCM_REQ_SENT; palSpinLockGive(hHdd, pMac->ccm.lock); status = sendCfg(pMac, hHdd, req, eANI_BOOLEAN_TRUE) ; if (status != eHAL_STATUS_SUCCESS) { smsLog( pMac, LOGW, FL("sendCfg() failed")); palSpinLockTake(hHdd, pMac->ccm.lock); del_req(req, &pMac->ccm.reqQ); palSpinLockGive(hHdd, pMac->ccm.lock); freeCfgReq(hHdd, req); break ; } else { palSpinLockTake(hHdd, pMac->ccm.lock); if(req != pMac->ccm.reqQ.head) { //We send the request and it must be done already req = NULL; } palSpinLockGive(hHdd, pMac->ccm.lock); } } else { palSpinLockGive(hHdd, pMac->ccm.lock); } *r = req ; } while(0) ; return status; }
void ccmCfgCnfMsgHandler(tHalHandle hHal, void *m) { tHddHandle hHdd = halHandle2HddHandle(hHal); tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tSirMbMsg *msg = (tSirMbMsg *)m ; tANI_U32 result, cfgId ; tCfgReq *req, *old ; #if 0 if (pMac->ccm.state != eCCM_STARTED) { return ; } #endif result = pal_be32_to_cpu(msg->data[0]); cfgId = pal_be32_to_cpu(msg->data[1]); if (pMac->ccm.replay.started && cfgId == CFG_UPDATE_MAGIC_DWORD) { pMac->ccm.replay.in_progress = 1 ; return ; } if (pMac->ccm.replay.in_progress) { if (!CCM_IS_RESULT_SUCCESS(result)) { pMac->ccm.replay.result = result ; } if (--pMac->ccm.replay.nr_param == 0) { pMac->ccm.replay.in_progress = 0 ; if (pMac->ccm.replay.callback) { pMac->ccm.replay.callback(hHal, pMac->ccm.replay.result); } pMac->ccm.replay.started = 0 ; #ifdef CCM_DEBUG smsLog(pMac, LOGW, FL("ccmComplete(%p)"), pMac->ccm.replay.done); #endif ccmComplete(hHdd, pMac->ccm.replay.done); sendQueuedReqToMacSw(pMac, hHdd); } } else { req = pMac->ccm.reqQ.head ; if (req) { if (req->cfgId == cfgId && req->state == eCCM_REQ_SENT) { palSpinLockTake(hHdd, pMac->ccm.lock); del_req(req, &pMac->ccm.reqQ); palSpinLockGive(hHdd, pMac->ccm.lock); req->state = eCCM_REQ_DONE ; if (result == WNI_CFG_NEED_RESTART || result == WNI_CFG_NEED_RELOAD) { #ifdef CCM_DEBUG smsLog(pMac, LOGW, FL("need restart/reload, cfgId=%d"), req->cfgId) ; #endif } if (req->callback) { #ifdef CCM_DEBUG req->callback(hHal, cfgId) ; #else req->callback(hHal, result) ; #endif } #ifdef CCM_DEBUG smsLog(pMac, LOGW, FL("cfgId=%ld, calling ccmComplete(%p)"), cfgId, req->done); #endif ccmComplete(hHdd, req->done); if (req->toBeSaved && (CCM_IS_RESULT_SUCCESS(result))) { if (cfgId < CFG_PARAM_MAX_NUM) { if ((old = pMac->ccm.comp[cfgId]) != NULL) { freeCfgReq(hHdd, old) ; } pMac->ccm.comp[cfgId] = req ; } } else { freeCfgReq(hHdd, req) ; } sendQueuedReqToMacSw(pMac, hHdd); } else { smsLog( pMac, LOGW, FL("can not match RSP with REQ, rspcfgid=%d result=%d reqcfgid=%d reqstate=%d"), (int)cfgId, (int)result, req->cfgId, req->state); #ifdef CCM_DEBUG smsLog(pMac, LOGW, FL("ccmComplete(%p)"), req->done); #endif } } } return ; }