From 5583b2cd0fe17d44ec7073d48dcf0ea03501e884 Mon Sep 17 00:00:00 2001 From: Yuanyuan Liu Date: Mon, 9 Oct 2017 17:30:13 -0700 Subject: [PATCH] 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 --- core/hdd/src/wlan_hdd_driver_ops.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/core/hdd/src/wlan_hdd_driver_ops.c b/core/hdd/src/wlan_hdd_driver_ops.c index 416d30e7807a..d55c1f39cb28 100644 --- a/core/hdd/src/wlan_hdd_driver_ops.c +++ b/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)