qcacld-3.0: Add pmo_psoc_with_ctx() macro
It is really common to want to update or read from the PMO private context, but doing so requires several lines boilerplate code. Because this boilerplate is in so many places, mistakes like using the wrong lock operation, or forgetting to use locks at all, are a always a danger. Add pmo_psoc_with_ctx() to address this deficiency, which retrieves the private context pointer, locks on entry, and unlocks on exit. Usage is like so: struct pmo_psoc_prov_obj *psoc_ctx; pmo_psoc_with_ctx(psoc, psoc_ctx) { /* use psoc_ctx */ } Which is equivalent to: struct pmo_psoc_prov_obj *psoc_ctx; psoc_ctx = pmo_psoc_get_priv(psoc); qdf_spin_lock_bh(&psoc_ctx->lock); /* use psoc_ctx */ qdf_spin_unlock_bh(&psoc_ctx->lock); Change-Id: I6a3ccbfbfb57c589d44c7eae57e2ed8272dae3ee CRs-Fixed: 2197722
此提交包含在:
@@ -596,10 +596,11 @@ QDF_STATUS pmo_register_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc,
|
||||
pmo_err("pmo cannot get the reference out of psoc");
|
||||
return status;
|
||||
}
|
||||
psoc_ctx = pmo_psoc_get_priv(psoc);
|
||||
qdf_spin_lock_bh(&psoc_ctx->lock);
|
||||
psoc_ctx->pause_bitmap_notifier = handler;
|
||||
qdf_spin_unlock_bh(&psoc_ctx->lock);
|
||||
|
||||
pmo_psoc_with_ctx(psoc, psoc_ctx) {
|
||||
psoc_ctx->pause_bitmap_notifier = handler;
|
||||
}
|
||||
|
||||
pmo_psoc_put_ref(psoc);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
@@ -626,11 +627,12 @@ QDF_STATUS pmo_unregister_pause_bitmap_notifier(struct wlan_objmgr_psoc *psoc,
|
||||
pmo_err("pmo cannot get the reference out of psoc");
|
||||
return status;
|
||||
}
|
||||
psoc_ctx = pmo_psoc_get_priv(psoc);
|
||||
qdf_spin_lock_bh(&psoc_ctx->lock);
|
||||
if (psoc_ctx->pause_bitmap_notifier == handler)
|
||||
psoc_ctx->pause_bitmap_notifier = NULL;
|
||||
qdf_spin_unlock_bh(&psoc_ctx->lock);
|
||||
|
||||
pmo_psoc_with_ctx(psoc, psoc_ctx) {
|
||||
if (psoc_ctx->pause_bitmap_notifier == handler)
|
||||
psoc_ctx->pause_bitmap_notifier = NULL;
|
||||
}
|
||||
|
||||
pmo_psoc_put_ref(psoc);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
@@ -657,10 +659,11 @@ QDF_STATUS pmo_register_get_pause_bitmap(struct wlan_objmgr_psoc *psoc,
|
||||
pmo_err("pmo cannot get the reference out of psoc");
|
||||
return status;
|
||||
}
|
||||
psoc_ctx = pmo_psoc_get_priv(psoc);
|
||||
qdf_spin_lock_bh(&psoc_ctx->lock);
|
||||
psoc_ctx->get_pause_bitmap = handler;
|
||||
qdf_spin_unlock_bh(&psoc_ctx->lock);
|
||||
|
||||
pmo_psoc_with_ctx(psoc, psoc_ctx) {
|
||||
psoc_ctx->get_pause_bitmap = handler;
|
||||
}
|
||||
|
||||
pmo_psoc_put_ref(psoc);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
@@ -687,11 +690,12 @@ QDF_STATUS pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc,
|
||||
pmo_err("pmo cannot get the reference out of psoc");
|
||||
return status;
|
||||
}
|
||||
psoc_ctx = pmo_psoc_get_priv(psoc);
|
||||
qdf_spin_lock_bh(&psoc_ctx->lock);
|
||||
if (psoc_ctx->get_pause_bitmap == handler)
|
||||
psoc_ctx->get_pause_bitmap = NULL;
|
||||
qdf_spin_unlock_bh(&psoc_ctx->lock);
|
||||
|
||||
pmo_psoc_with_ctx(psoc, psoc_ctx) {
|
||||
if (psoc_ctx->get_pause_bitmap == handler)
|
||||
psoc_ctx->get_pause_bitmap = NULL;
|
||||
}
|
||||
|
||||
pmo_psoc_put_ref(psoc);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
@@ -718,10 +722,11 @@ QDF_STATUS pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc,
|
||||
pmo_err("pmo cannot get the reference out of psoc");
|
||||
return status;
|
||||
}
|
||||
psoc_ctx = pmo_psoc_get_priv(psoc);
|
||||
qdf_spin_lock_bh(&psoc_ctx->lock);
|
||||
psoc_ctx->is_device_in_low_pwr_mode = handler;
|
||||
qdf_spin_unlock_bh(&psoc_ctx->lock);
|
||||
|
||||
pmo_psoc_with_ctx(psoc, psoc_ctx) {
|
||||
psoc_ctx->is_device_in_low_pwr_mode = handler;
|
||||
}
|
||||
|
||||
pmo_psoc_put_ref(psoc);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
@@ -749,10 +754,11 @@ QDF_STATUS pmo_unregister_is_device_in_low_pwr_mode(
|
||||
pmo_err("pmo cannot get the reference out of psoc");
|
||||
return status;
|
||||
}
|
||||
psoc_ctx = pmo_psoc_get_priv(psoc);
|
||||
qdf_spin_lock_bh(&psoc_ctx->lock);
|
||||
psoc_ctx->is_device_in_low_pwr_mode = NULL;
|
||||
qdf_spin_unlock_bh(&psoc_ctx->lock);
|
||||
|
||||
pmo_psoc_with_ctx(psoc, psoc_ctx) {
|
||||
psoc_ctx->is_device_in_low_pwr_mode = NULL;
|
||||
}
|
||||
|
||||
pmo_psoc_put_ref(psoc);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
新增問題並參考
封鎖使用者