|
@@ -69,34 +69,30 @@ static QDF_STATUS wlan_objmgr_peer_obj_free(struct wlan_objmgr_peer *peer)
|
|
|
{
|
|
|
struct wlan_objmgr_psoc *psoc;
|
|
|
struct wlan_objmgr_vdev *vdev;
|
|
|
+ struct wlan_objmgr_pdev *pdev;
|
|
|
uint8_t *macaddr;
|
|
|
- uint8_t vdev_id;
|
|
|
|
|
|
if (peer == NULL) {
|
|
|
- obj_mgr_err("PEER is NULL");
|
|
|
+ obj_mgr_err("peer is NULL");
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
|
|
|
+ wlan_peer_obj_lock(peer);
|
|
|
macaddr = wlan_peer_get_macaddr(peer);
|
|
|
+ wlan_peer_obj_unlock(peer);
|
|
|
|
|
|
vdev = wlan_peer_get_vdev(peer);
|
|
|
if (vdev == NULL) {
|
|
|
- obj_mgr_err(
|
|
|
- "VDEV is NULL for peer(%02x:%02x:%02x:%02x:%02x:%02x)",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
+ obj_mgr_err("vdev is NULL for peer(%pM)", macaddr);
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
|
|
|
- vdev_id = wlan_vdev_get_id(vdev);
|
|
|
-
|
|
|
/* get PSOC from VDEV, if it is NULL, return */
|
|
|
psoc = wlan_vdev_get_psoc(vdev);
|
|
|
if (psoc == NULL) {
|
|
|
obj_mgr_err(
|
|
|
- "PSOC is NULL for peer(%02x:%02x:%02x:%02x:%02x:%02x)",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
+ "psoc is NULL for peer(%pM) for vdev[%d]",
|
|
|
+ macaddr, wlan_vdev_get_id(vdev));
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
|
|
@@ -108,18 +104,28 @@ static QDF_STATUS wlan_objmgr_peer_obj_free(struct wlan_objmgr_peer *peer)
|
|
|
|
|
|
/* Detach peer from VDEV's peer list */
|
|
|
if (wlan_objmgr_vdev_peer_detach(vdev, peer) == QDF_STATUS_E_FAILURE) {
|
|
|
+ pdev = wlan_vdev_get_pdev(vdev);
|
|
|
+ if (!pdev) {
|
|
|
+ obj_mgr_err("peer(%pM) pdev is NULL", macaddr);
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
obj_mgr_err(
|
|
|
- "Peer(%02x:%02x:%02x:%02x:%02x:%02x) VDEV detach fail, vdev id: %d",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5], vdev_id);
|
|
|
+ "peer(%pM) vdev detach failure for vdev[%d] pdev[%d]",
|
|
|
+ macaddr, wlan_vdev_get_id(vdev),
|
|
|
+ wlan_objmgr_pdev_get_pdev_id(pdev));
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
/* Detach peer from PSOC's peer list */
|
|
|
if (wlan_objmgr_psoc_peer_detach(psoc, peer) == QDF_STATUS_E_FAILURE) {
|
|
|
+ pdev = wlan_vdev_get_pdev(vdev);
|
|
|
+ if (!pdev) {
|
|
|
+ obj_mgr_err("peer(%pM) pdev is NULL", macaddr);
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
obj_mgr_err(
|
|
|
- "Peer(%02x:%02x:%02x:%02x:%02x:%02x) PSOC detach failure",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
+ "peer(%pM) psoc detach failure for vdev[%d] pdev[%d]",
|
|
|
+ macaddr, wlan_vdev_get_id(vdev),
|
|
|
+ wlan_objmgr_pdev_get_pdev_id(pdev));
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
qdf_spinlock_destroy(&peer->peer_lock);
|
|
@@ -144,27 +150,20 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create(
|
|
|
|
|
|
if (vdev == NULL) {
|
|
|
obj_mgr_err(
|
|
|
- "VDEV is NULL for peer (%02x:%02x:%02x:%02x:%02x:%02x)",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
+ "vdev is NULL for peer (%pM)", macaddr);
|
|
|
return NULL;
|
|
|
}
|
|
|
/* Get psoc, if psoc is NULL, return */
|
|
|
psoc = wlan_vdev_get_psoc(vdev);
|
|
|
if (psoc == NULL) {
|
|
|
obj_mgr_err(
|
|
|
- "PSOC is NULL for peer (%02x:%02x:%02x:%02x:%02x:%02x)",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
+ "psoc is NULL for peer (%pM)", macaddr);
|
|
|
return NULL;
|
|
|
}
|
|
|
/* Allocate memory for peer object */
|
|
|
peer = qdf_mem_malloc(sizeof(*peer));
|
|
|
if (peer == NULL) {
|
|
|
- obj_mgr_err(
|
|
|
- "Peer(%02x:%02x:%02x:%02x:%02x:%02x) allocation failure",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
+ obj_mgr_err("peer(%pM) allocation failure", macaddr);
|
|
|
return NULL;
|
|
|
}
|
|
|
/* set vdev to peer */
|
|
@@ -181,20 +180,14 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create(
|
|
|
/* Attach peer to psoc, psoc maintains the node table for the device */
|
|
|
if (wlan_objmgr_psoc_peer_attach(psoc, peer) !=
|
|
|
QDF_STATUS_SUCCESS) {
|
|
|
- obj_mgr_err(
|
|
|
- "Peer(%02x:%02x:%02x:%02x:%02x:%02x) PSOC attach failure",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
+ obj_mgr_err("peer(%pM) psoc attach failure", macaddr);
|
|
|
qdf_mem_free(peer);
|
|
|
return NULL;
|
|
|
}
|
|
|
/* Attach peer to vdev peer table */
|
|
|
if (wlan_objmgr_vdev_peer_attach(vdev, peer) !=
|
|
|
QDF_STATUS_SUCCESS) {
|
|
|
- obj_mgr_err(
|
|
|
- "Peer(%02x:%02x:%02x:%02x:%02x:%02x) VDEV attach failure",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
+ obj_mgr_err("peer(%pM) vdev attach failure", macaddr);
|
|
|
/* if attach fails, detach from psoc table before free */
|
|
|
wlan_objmgr_psoc_peer_detach(psoc, peer);
|
|
|
qdf_mem_free(peer);
|
|
@@ -236,9 +229,7 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create(
|
|
|
} else if (obj_status == QDF_STATUS_E_FAILURE) {
|
|
|
/* Clean up the peer */
|
|
|
obj_mgr_err(
|
|
|
- "Peer(%02x:%02x:%02x:%02x:%02x:%02x) comp object alloc fail",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
+ "peer(%pM) component object alloc failure", macaddr);
|
|
|
wlan_objmgr_peer_obj_delete(peer);
|
|
|
return NULL;
|
|
|
}
|
|
@@ -254,17 +245,33 @@ static QDF_STATUS wlan_objmgr_peer_obj_destroy(struct wlan_objmgr_peer *peer)
|
|
|
uint8_t *macaddr;
|
|
|
|
|
|
if (peer == NULL) {
|
|
|
- obj_mgr_err("PEER is NULL");
|
|
|
+ obj_mgr_err("peer is NULL");
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
|
|
|
+ wlan_peer_obj_lock(peer);
|
|
|
macaddr = wlan_peer_get_macaddr(peer);
|
|
|
+ wlan_peer_obj_unlock(peer);
|
|
|
|
|
|
if (peer->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) {
|
|
|
- obj_mgr_err(
|
|
|
- "peer(%02x:%02x:%02x:%02x:%02x:%02x) object del is not invoked",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
+ struct wlan_objmgr_vdev *vdev;
|
|
|
+ struct wlan_objmgr_pdev *pdev;
|
|
|
+
|
|
|
+ vdev = wlan_peer_get_vdev(peer);
|
|
|
+ if (vdev == NULL) {
|
|
|
+ obj_mgr_err("vdev is NULL for peer(%pM)", macaddr);
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
+
|
|
|
+ pdev = wlan_vdev_get_pdev(vdev);
|
|
|
+ if (!pdev) {
|
|
|
+ obj_mgr_err("peer(%pM) pdev is NULL", macaddr);
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
+
|
|
|
+ obj_mgr_err("peer(%pM) vdev[%d] pdev[%d] delete is not invoked",
|
|
|
+ macaddr, wlan_vdev_get_id(vdev),
|
|
|
+ wlan_objmgr_pdev_get_pdev_id(pdev));
|
|
|
WLAN_OBJMGR_BUG(0);
|
|
|
}
|
|
|
|
|
@@ -281,8 +288,7 @@ static QDF_STATUS wlan_objmgr_peer_obj_destroy(struct wlan_objmgr_peer *peer)
|
|
|
obj_status = wlan_objmgr_peer_object_status(peer);
|
|
|
if (obj_status == QDF_STATUS_E_FAILURE) {
|
|
|
/* If it status is failure, memory will not be freed */
|
|
|
- QDF_BUG(0);
|
|
|
- return QDF_STATUS_E_FAILURE;
|
|
|
+ WLAN_OBJMGR_BUG(0);
|
|
|
}
|
|
|
/* few components deletion is in progress */
|
|
|
if (obj_status == QDF_STATUS_COMP_ASYNC) {
|
|
@@ -300,7 +306,7 @@ QDF_STATUS wlan_objmgr_peer_obj_delete(struct wlan_objmgr_peer *peer)
|
|
|
uint8_t *macaddr;
|
|
|
|
|
|
if (peer == NULL) {
|
|
|
- obj_mgr_err("PEER is NULL");
|
|
|
+ obj_mgr_err("peer is NULL");
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
|
|
@@ -308,14 +314,27 @@ QDF_STATUS wlan_objmgr_peer_obj_delete(struct wlan_objmgr_peer *peer)
|
|
|
macaddr = wlan_peer_get_macaddr(peer);
|
|
|
wlan_peer_obj_unlock(peer);
|
|
|
|
|
|
-
|
|
|
print_idx = qdf_get_pidx();
|
|
|
if (qdf_print_is_verbose_enabled(print_idx, QDF_MODULE_ID_OBJ_MGR,
|
|
|
QDF_TRACE_LEVEL_DEBUG)) {
|
|
|
- obj_mgr_debug(
|
|
|
- "Logically deleting the peer (%02x:%02x:%02x:%02x:%02x:%02x)",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
+ struct wlan_objmgr_vdev *vdev;
|
|
|
+ struct wlan_objmgr_pdev *pdev;
|
|
|
+
|
|
|
+ vdev = wlan_peer_get_vdev(peer);
|
|
|
+ if (!vdev) {
|
|
|
+ obj_mgr_err("vdev is NULL for peer(%pM)", macaddr);
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
+
|
|
|
+ pdev = wlan_vdev_get_pdev(vdev);
|
|
|
+ if (!pdev) {
|
|
|
+ obj_mgr_err("peer(%pM) pdev is NULL", macaddr);
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
+
|
|
|
+ obj_mgr_debug("L-Del peer (%pM) for vdev[%d] pdev[%d]",
|
|
|
+ macaddr, wlan_vdev_get_id(vdev),
|
|
|
+ wlan_objmgr_pdev_get_pdev_id(pdev));
|
|
|
wlan_objmgr_print_ref_ids(peer->peer_objmgr.ref_id_dbg);
|
|
|
}
|
|
|
|
|
@@ -560,19 +579,24 @@ void *wlan_objmgr_peer_get_comp_private_obj(
|
|
|
}
|
|
|
EXPORT_SYMBOL(wlan_objmgr_peer_get_comp_private_obj);
|
|
|
|
|
|
-void wlan_objmgr_peer_get_ref(struct wlan_objmgr_peer *peer,
|
|
|
+QDF_STATUS wlan_objmgr_peer_get_ref(struct wlan_objmgr_peer *peer,
|
|
|
wlan_objmgr_ref_dbgid id)
|
|
|
{
|
|
|
+ if (id >= WLAN_REF_ID_MAX) {
|
|
|
+ obj_mgr_err("Component-id %d is not supported", id);
|
|
|
+ return QDF_STATUS_MAXCOMP_FAIL;
|
|
|
+ }
|
|
|
+
|
|
|
if (peer == NULL) {
|
|
|
- obj_mgr_err("peer obj is NULL for %d", id);
|
|
|
+ obj_mgr_err("peer is NULL for %s", string_from_dbgid(id));
|
|
|
QDF_ASSERT(0);
|
|
|
- return;
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
/* Increment ref count */
|
|
|
qdf_atomic_inc(&peer->peer_objmgr.ref_cnt);
|
|
|
qdf_atomic_inc(&peer->peer_objmgr.ref_id_dbg[id]);
|
|
|
|
|
|
- return;
|
|
|
+ return QDF_STATUS_SUCCESS;
|
|
|
}
|
|
|
EXPORT_SYMBOL(wlan_objmgr_peer_get_ref);
|
|
|
|
|
@@ -582,8 +606,13 @@ QDF_STATUS wlan_objmgr_peer_try_get_ref(struct wlan_objmgr_peer *peer,
|
|
|
|
|
|
uint8_t *macaddr;
|
|
|
|
|
|
+ if (id >= WLAN_REF_ID_MAX) {
|
|
|
+ obj_mgr_err("Component-id %d is not supported", id);
|
|
|
+ return QDF_STATUS_MAXCOMP_FAIL;
|
|
|
+ }
|
|
|
+
|
|
|
if (peer == NULL) {
|
|
|
- obj_mgr_err("peer obj is NULL for %d", id);
|
|
|
+ obj_mgr_err("peer is NULL for %s", string_from_dbgid(id));
|
|
|
QDF_ASSERT(0);
|
|
|
return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
@@ -593,12 +622,9 @@ QDF_STATUS wlan_objmgr_peer_try_get_ref(struct wlan_objmgr_peer *peer,
|
|
|
if (peer->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) {
|
|
|
wlan_peer_obj_unlock(peer);
|
|
|
if (peer->peer_objmgr.print_cnt++ <=
|
|
|
- WLAN_OBJMGR_RATELIMIT_THRESH)
|
|
|
- obj_mgr_err("peer(%02x:%02x:%02x:%02x:%02x:%02x) L-Del",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
-
|
|
|
- return QDF_STATUS_E_RESOURCES;
|
|
|
+ WLAN_OBJMGR_RATELIMIT_THRESH)
|
|
|
+ obj_mgr_err("peer(%pM) is in L-Del state", macaddr);
|
|
|
+ return QDF_STATUS_E_RESOURCES;
|
|
|
}
|
|
|
|
|
|
wlan_objmgr_peer_get_ref(peer, id);
|
|
@@ -608,35 +634,37 @@ QDF_STATUS wlan_objmgr_peer_try_get_ref(struct wlan_objmgr_peer *peer,
|
|
|
}
|
|
|
EXPORT_SYMBOL(wlan_objmgr_peer_try_get_ref);
|
|
|
|
|
|
-void wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer,
|
|
|
+QDF_STATUS wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer,
|
|
|
wlan_objmgr_ref_dbgid id)
|
|
|
{
|
|
|
|
|
|
uint8_t *macaddr;
|
|
|
|
|
|
+ if (id >= WLAN_REF_ID_MAX) {
|
|
|
+ obj_mgr_err("Component-id %d is not supported", id);
|
|
|
+ return QDF_STATUS_MAXCOMP_FAIL;
|
|
|
+ }
|
|
|
+
|
|
|
if (peer == NULL) {
|
|
|
- obj_mgr_err("peer obj is NULL for %d", id);
|
|
|
+ obj_mgr_err("peer is NULL for %s", string_from_dbgid(id));
|
|
|
QDF_ASSERT(0);
|
|
|
- return;
|
|
|
+ return QDF_STATUS_E_FAILURE;
|
|
|
}
|
|
|
|
|
|
+ wlan_peer_obj_lock(peer);
|
|
|
macaddr = wlan_peer_get_macaddr(peer);
|
|
|
+ wlan_peer_obj_unlock(peer);
|
|
|
|
|
|
if (!qdf_atomic_read(&peer->peer_objmgr.ref_id_dbg[id])) {
|
|
|
- obj_mgr_err(
|
|
|
- "peer(%02x:%02x:%02x:%02x:%02x:%02x) ref was not taken by %d",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5], id);
|
|
|
+ obj_mgr_err("peer(%pM) ref cnt was not taken by %s",
|
|
|
+ macaddr, string_from_dbgid(id));
|
|
|
wlan_objmgr_print_ref_ids(peer->peer_objmgr.ref_id_dbg);
|
|
|
WLAN_OBJMGR_BUG(0);
|
|
|
}
|
|
|
|
|
|
if (!qdf_atomic_read(&peer->peer_objmgr.ref_cnt)) {
|
|
|
- obj_mgr_err("peer(%02x:%02x:%02x:%02x:%02x:%02x) ref cnt is 0",
|
|
|
- macaddr[0], macaddr[1], macaddr[2],
|
|
|
- macaddr[3], macaddr[4], macaddr[5]);
|
|
|
+ obj_mgr_err("peer(%pM) ref cnt is 0", macaddr);
|
|
|
WLAN_OBJMGR_BUG(0);
|
|
|
- return;
|
|
|
}
|
|
|
qdf_atomic_dec(&peer->peer_objmgr.ref_id_dbg[id]);
|
|
|
|
|
@@ -652,6 +680,6 @@ void wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer,
|
|
|
wlan_peer_obj_unlock(peer);
|
|
|
}
|
|
|
|
|
|
- return;
|
|
|
+ return QDF_STATUS_SUCCESS;
|
|
|
}
|
|
|
EXPORT_SYMBOL(wlan_objmgr_peer_release_ref);
|