فهرست منبع

qcacld-3.0: Convert probe return error from -ENOMEM to -EPROBE_DEFER

If probe failed because of no memory, we want to try to recovery by
issuing a re-probe for built-in driver. Hence, convert probe return
error from -ENOMEM to -EPROBE_DEFER for built-in driver so that
platform driver can issue re-probe based on the return value.

CRs-Fixed: 2124159
Change-Id: I6cca0ed186554c8065b77af8c178ca9e143abf98
Yuanyuan Liu 7 سال پیش
والد
کامیت
5583b2cd0f
1فایلهای تغییر یافته به همراه22 افزوده شده و 1 حذف شده
  1. 22 1
      core/hdd/src/wlan_hdd_driver_ops.c

+ 22 - 1
core/hdd/src/wlan_hdd_driver_ops.c

@@ -311,6 +311,27 @@ static void hdd_init_qdf_ctx(struct device *dev, void *bdev,
 	qdf_dev->bid = bid;
 }
 
+/**
+ * check_for_probe_defer() - API to check return value
+ * @ret: Return Value
+ *
+ * Return: return -EPROBE_DEFER to platform driver if return value
+ * is -ENOMEM. Platform driver will try to re-probe.
+ */
+#ifdef MODULE
+static int check_for_probe_defer(int ret)
+{
+	return ret;
+}
+#else
+static int check_for_probe_defer(int ret)
+{
+	if (ret == -ENOMEM)
+		return -EPROBE_DEFER;
+	return ret;
+}
+#endif
+
 /**
  * wlan_hdd_probe() - handles probe request
  *
@@ -407,7 +428,7 @@ err_hdd_deinit:
 	cds_set_fw_down(false);
 	hdd_stop_driver_ops_timer();
 	mutex_unlock(&hdd_init_deinit_lock);
-	return ret;
+	return check_for_probe_defer(ret);
 }
 
 static inline void hdd_pld_driver_unloading(struct device *dev)