From: Greg Kroah-Hartman Date: Thu, 21 Nov 2019 13:51:22 +0000 (+0100) Subject: 4.19-stable patches X-Git-Tag: v5.3.13~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=41c00ecd603400473fbb69d220fe915b94acce78;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: revert-opp-protect-dev_list-with-opp_table-lock.patch --- diff --git a/queue-4.19/revert-opp-protect-dev_list-with-opp_table-lock.patch b/queue-4.19/revert-opp-protect-dev_list-with-opp_table-lock.patch new file mode 100644 index 00000000000..190cc33c24a --- /dev/null +++ b/queue-4.19/revert-opp-protect-dev_list-with-opp_table-lock.patch @@ -0,0 +1,129 @@ +From 4b5484dd0fb48f345968178d9a1e14107607fab9 Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Thu, 21 Nov 2019 14:49:19 +0100 +Subject: Revert "OPP: Protect dev_list with opp_table lock" + +From: Greg Kroah-Hartman + +This reverts commit 4c64ce947cfa447993efe005cbaad7ba31a91612 which is +commit 3d2556992a878a2210d3be498416aee39e0c32aa upstream. + +Turns out to break the build on the odroid machines, so it needs to be +reverted. + +Reported-by: Viresh Kumar +Reported-by: "kernelci.org bot" +Cc: Niklas Cassel +Cc: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/opp/core.c | 21 ++------------------- + drivers/opp/cpu.c | 2 -- + drivers/opp/opp.h | 2 +- + 3 files changed, 3 insertions(+), 22 deletions(-) + +--- a/drivers/opp/core.c ++++ b/drivers/opp/core.c +@@ -48,14 +48,9 @@ static struct opp_device *_find_opp_dev( + static struct opp_table *_find_opp_table_unlocked(struct device *dev) + { + struct opp_table *opp_table; +- bool found; + + list_for_each_entry(opp_table, &opp_tables, node) { +- mutex_lock(&opp_table->lock); +- found = !!_find_opp_dev(dev, opp_table); +- mutex_unlock(&opp_table->lock); +- +- if (found) { ++ if (_find_opp_dev(dev, opp_table)) { + _get_opp_table_kref(opp_table); + + return opp_table; +@@ -771,8 +766,6 @@ struct opp_device *_add_opp_dev(const st + + /* Initialize opp-dev */ + opp_dev->dev = dev; +- +- mutex_lock(&opp_table->lock); + list_add(&opp_dev->node, &opp_table->dev_list); + + /* Create debugfs entries for the opp_table */ +@@ -780,7 +773,6 @@ struct opp_device *_add_opp_dev(const st + if (ret) + dev_err(dev, "%s: Failed to register opp debugfs (%d)\n", + __func__, ret); +- mutex_unlock(&opp_table->lock); + + return opp_dev; + } +@@ -799,7 +791,6 @@ static struct opp_table *_allocate_opp_t + if (!opp_table) + return NULL; + +- mutex_init(&opp_table->lock); + INIT_LIST_HEAD(&opp_table->dev_list); + + opp_dev = _add_opp_dev(dev, opp_table); +@@ -821,6 +812,7 @@ static struct opp_table *_allocate_opp_t + + BLOCKING_INIT_NOTIFIER_HEAD(&opp_table->head); + INIT_LIST_HEAD(&opp_table->opp_list); ++ mutex_init(&opp_table->lock); + kref_init(&opp_table->kref); + + /* Secure the device table modification */ +@@ -862,10 +854,6 @@ static void _opp_table_kref_release(stru + if (!IS_ERR(opp_table->clk)) + clk_put(opp_table->clk); + +- /* +- * No need to take opp_table->lock here as we are guaranteed that no +- * references to the OPP table are taken at this point. +- */ + opp_dev = list_first_entry(&opp_table->dev_list, struct opp_device, + node); + +@@ -1731,9 +1719,6 @@ void _dev_pm_opp_remove_table(struct opp + { + struct dev_pm_opp *opp, *tmp; + +- /* Protect dev_list */ +- mutex_lock(&opp_table->lock); +- + /* Find if opp_table manages a single device */ + if (list_is_singular(&opp_table->dev_list)) { + /* Free static OPPs */ +@@ -1751,8 +1736,6 @@ void _dev_pm_opp_remove_table(struct opp + } else { + _remove_opp_dev(_find_opp_dev(dev, opp_table), opp_table); + } +- +- mutex_unlock(&opp_table->lock); + } + + void _dev_pm_opp_find_and_remove_table(struct device *dev, bool remove_all) +--- a/drivers/opp/cpu.c ++++ b/drivers/opp/cpu.c +@@ -222,10 +222,8 @@ int dev_pm_opp_get_sharing_cpus(struct d + cpumask_clear(cpumask); + + if (opp_table->shared_opp == OPP_TABLE_ACCESS_SHARED) { +- mutex_lock(&opp_table->lock); + list_for_each_entry(opp_dev, &opp_table->dev_list, node) + cpumask_set_cpu(opp_dev->dev->id, cpumask); +- mutex_unlock(&opp_table->lock); + } else { + cpumask_set_cpu(cpu_dev->id, cpumask); + } +--- a/drivers/opp/opp.h ++++ b/drivers/opp/opp.h +@@ -126,7 +126,7 @@ enum opp_table_access { + * @dev_list: list of devices that share these OPPs + * @opp_list: table of opps + * @kref: for reference count of the table. +- * @lock: mutex protecting the opp_list and dev_list. ++ * @lock: mutex protecting the opp_list. + * @np: struct device_node pointer for opp's DT node. + * @clock_latency_ns_max: Max clock latency in nanoseconds. + * @shared_opp: OPP is shared between multiple devices. diff --git a/queue-4.19/series b/queue-4.19/series index 7e625f3d0b9..9f65f63bc37 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -1,3 +1,4 @@ spi-mediatek-use-correct-mata-xfer_len-when-in-fifo-transfer.patch i2c-mediatek-modify-threshold-passed-to-i2c_get_dma_safe_msg_buf.patch tee-optee-add-missing-of_node_put-after-of_device_is_available.patch +revert-opp-protect-dev_list-with-opp_table-lock.patch