--- /dev/null
+From 9b9d01a9814289568cc447498150478df493960e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 10 Nov 2020 17:29:32 +0800
+Subject: PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter
+
+From: Zhang Qilong <zhangqilong3@huawei.com>
+
+[ Upstream commit dd8088d5a8969dc2b42f71d7bc01c25c61a78066 ]
+
+In many case, we need to check return value of pm_runtime_get_sync, but
+it brings a trouble to the usage counter processing. Many callers forget
+to decrease the usage counter when it failed, which could resulted in
+reference leak. It has been discussed a lot[0][1]. So we add a function
+to deal with the usage counter for better coding.
+
+[0]https://lkml.org/lkml/2020/6/14/88
+[1]https://patchwork.ozlabs.org/project/linux-tegra/list/?series=178139
+Signed-off-by: Zhang Qilong <zhangqilong3@huawei.com>
+Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/pm_runtime.h | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
+index fe61e3b9a9ca2..7145795b4b9da 100644
+--- a/include/linux/pm_runtime.h
++++ b/include/linux/pm_runtime.h
+@@ -224,6 +224,27 @@ static inline int pm_runtime_get_sync(struct device *dev)
+ return __pm_runtime_resume(dev, RPM_GET_PUT);
+ }
+
++/**
++ * pm_runtime_resume_and_get - Bump up usage counter of a device and resume it.
++ * @dev: Target device.
++ *
++ * Resume @dev synchronously and if that is successful, increment its runtime
++ * PM usage counter. Return 0 if the runtime PM usage counter of @dev has been
++ * incremented or a negative error code otherwise.
++ */
++static inline int pm_runtime_resume_and_get(struct device *dev)
++{
++ int ret;
++
++ ret = __pm_runtime_resume(dev, RPM_GET_PUT);
++ if (ret < 0) {
++ pm_runtime_put_noidle(dev);
++ return ret;
++ }
++
++ return 0;
++}
++
+ static inline int pm_runtime_put(struct device *dev)
+ {
+ return __pm_runtime_idle(dev, RPM_GET_PUT | RPM_ASYNC);
+--
+2.27.0
+
arm-dts-sun7i-pcduino3-nano-enable-rgmii-rx-tx-delay.patch
arm-dts-imx6qdl-wandboard-revd1-remove-pad_gpio_6-fr.patch
arm-dts-imx6qdl-kontron-samx6i-fix-i2c_pm-scl-pin.patch
+pm-runtime-add-pm_runtime_resume_and_get-to-deal-wit.patch
gpio-zynq-fix-reference-leak-in-zynq_gpio-functions.patch
gpio-mvebu-fix-potential-user-after-free-on-probe.patch
scsi-bnx2i-requires-mmu.patch