ソースを参照

qcacld-3.0: cleanup scan queue in case of SSR

When the SSR and interface down happen in parallel,
the driver rejects the interface down since the
recovery is in progress. Kernel ignores the -EAGAIN
request from the driver and as part of NET_DOWN notification
in cfg80211_netdown_notifer the kernel invokes the
___cfg80211_scan_done to free the request but doesn't not send
scan_result indication, since it expects the scan_done work to
get scheduled and then broadcast the request to upperlayer.

Change-Id: I48700a1a7b4c4cc76d3c6736825d29d0f708886f
CRs-Fixed: 3203454
Arun Kumar Khandavalli 2 年 前
コミット
af27c8d02e
1 ファイル変更19 行追加0 行削除
  1. 19 0
      core/hdd/src/wlan_hdd_object_manager.c

+ 19 - 0
core/hdd/src/wlan_hdd_object_manager.c

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -125,6 +126,23 @@ void hdd_objmgr_update_tgt_max_vdev_psoc(struct hdd_context *hdd_ctx,
 	wlan_psoc_set_max_vdev_count(psoc, max_vdev);
 }
 
+static int hdd_check_internal_netdev_state(struct net_device *netdev)
+{
+	struct hdd_adapter *adapter;
+
+	if (!netdev)
+		return false;
+
+	adapter = netdev_priv(netdev);
+	if (!adapter)
+		return false;
+
+	if (test_bit(DEVICE_IFACE_OPENED, &adapter->event_flags))
+		return true;
+	else
+		return false;
+}
+
 int hdd_objmgr_create_and_store_pdev(struct hdd_context *hdd_ctx)
 {
 	QDF_STATUS status;
@@ -159,6 +177,7 @@ int hdd_objmgr_create_and_store_pdev(struct hdd_context *hdd_ctx)
 		reg_cap_ptr->high_5ghz_chan = HIGH_5GHZ_FREQ_NO_6GHZ;
 	}
 
+	priv->osif_check_netdev_state = hdd_check_internal_netdev_state;
 	pdev = wlan_objmgr_pdev_obj_create(psoc, priv);
 	if (!pdev) {
 		hdd_err("pdev obj create failed");