/* wait until every tx has seen that roc_activity has been reset */
synchronize_net(); /* from here, no new tx will be added * we can flush the Tx on the queues
*/
ret = iwl_mld_send_cmd_pdu(mld, WIDE_ID(MAC_CONF_GROUP, ROC_CMD),
&cmd, cmd_len); if (ret)
IWL_ERR(mld, "Couldn't send the command to cancel the ROC\n");
/* We may have raced with the firmware expiring the ROC instance at * this very moment. In that case, we can have a notification in the * async processing queue. However, none can arrive _after_ this as * ROC_CMD was sent synchronously, i.e. we waited for a response and * the firmware cannot refer to this ROC after the response. Thus, * if we just cancel the notification (if there's one) we'll be at a * clean state for any possible next ROC.
*/
iwl_mld_cancel_notifications_of_object(mld, IWL_MLD_OBJECT_TYPE_ROC,
mld_vif->roc_activity);
vif = iwl_mld_find_roc_vif(mld, activity); if (WARN_ON(!vif)) return;
mld_vif = iwl_mld_vif_from_mac80211(vif); /* It is possible that the ROC was canceled * but the notification was already fired.
*/ if (mld_vif->roc_activity != activity) return;
if (le32_to_cpu(notif->success) &&
le32_to_cpu(notif->started)) { /* We had a successful start */
ieee80211_ready_on_channel(mld->hw);
} else { /* ROC was not successful, tell the firmware to remove it */ if (le32_to_cpu(notif->started))
iwl_mld_cancel_roc(mld->hw, vif); else
iwl_mld_destroy_roc(mld, vif, mld_vif); /* we need to let know mac80211 about end OR * an unsuccessful start
*/
ieee80211_remain_on_channel_expired(mld->hw);
}
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.