qcacld-3.0: Vdev trans return directly if psoc/driver is in transition

Issue happen when:
thread1:
       rmmod driver, wlan_hdd_pld_remove which will get psoc trans.
       then try to get rntl_lock in hdd_unregister_wext;

thread2:
       trigger iw del interface, cfgops in kernel will get get rtnl_lock,
       in wlan_hdd_del_virtual_intf, vdev trans will be blocked by psoc
       trans in thread1. as thread1 it is also waiting for rtnl_lock, so
       both thread will be stuck.

Fix is:
       In psoc trans, vdev trans and vdev ops is not allowed, which should
       return directly.

Change-Id: I9cbd04bac438bb9483b4e89e73801fe71859e139
CRs-Fixed: 2583675
This commit is contained in:
Jingxiang Ge
2019-10-12 12:40:37 +08:00
committed by nshrivas
parent e9946e57e6
commit 8fdd274a24
2 changed files with 9 additions and 9 deletions

View File

@@ -264,8 +264,8 @@ static uint32_t dsc_test_psoc_trans_blocks(void)
/* ... children vdev trans/ops to fail */
dsc_for_each_psoc_vdev(psoc, vdev) {
action_expect(vdev, trans, QDF_STATUS_E_AGAIN, errors);
action_expect(vdev, op, QDF_STATUS_E_AGAIN, errors);
action_expect(vdev, trans, QDF_STATUS_E_INVAL, errors);
action_expect(vdev, op, QDF_STATUS_E_INVAL, errors);
}
/* a sibling psoc in transition should succeed and cause ... */
@@ -282,8 +282,8 @@ static uint32_t dsc_test_psoc_trans_blocks(void)
/* ... children vdev trans/ops to fail */
dsc_for_each_psoc_vdev(psoc, vdev) {
action_expect(vdev, trans, QDF_STATUS_E_AGAIN, errors);
action_expect(vdev, op, QDF_STATUS_E_AGAIN, errors);
action_expect(vdev, trans, QDF_STATUS_E_INVAL, errors);
action_expect(vdev, op, QDF_STATUS_E_INVAL, errors);
}
/* teardown */