Recently few issues were noticed in the code where CONFIG_OF wasn't
consistently used for many routines. The core file is big enough now and
ifdef hackery makes it less readable.
Move OF specific code to another file and compile that only if CONFIG_OF
is enabled.
Compile-tested:
- For ARM (exynos) with CONFIG_OF enabled
- For X86 with CONFIG_OF disabled (have to enable CONFIG_PM_OPP separately)
No functional changes.
Signed-off-by: Viresh Kumar <viresh.kumar(a)linaro.org>
---
drivers/base/power/opp/Makefile | 1 +
drivers/base/power/opp/core.c | 448 +-----------------------------
drivers/base/power/opp/cpu.c | 143 +---------
drivers/base/power/opp/of.c | 591 ++++++++++++++++++++++++++++++++++++++++
drivers/base/power/opp/opp.h | 14 +
5 files changed, 618 insertions(+), 579 deletions(-)
create mode 100644 drivers/base/power/opp/of.c
diff --git a/drivers/base/power/opp/Makefile b/drivers/base/power/opp/Makefile
index 19837ef04d8e..e70ceb406fe9 100644
--- a/drivers/base/power/opp/Makefile
+++ b/drivers/base/power/opp/Makefile
@@ -1,3 +1,4 @@
ccflags-$(CONFIG_DEBUG_DRIVER) := -DDEBUG
obj-y += core.o cpu.o
+obj-$(CONFIG_OF) += of.o
obj-$(CONFIG_DEBUG_FS) += debugfs.o
diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c
index d41dd38aadb6..7c04c87738a6 100644
--- a/drivers/base/power/opp/core.c
+++ b/drivers/base/power/opp/core.c
@@ -18,7 +18,6 @@
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/device.h>
-#include <linux/of.h>
#include <linux/export.h>
#include <linux/regulator/consumer.h>
@@ -29,7 +28,7 @@
* from here, with each opp_table containing the list of opps it supports in
* various states of availability.
*/
-static LIST_HEAD(opp_tables);
+LIST_HEAD(opp_tables);
/* Lock to allow exclusive modification to the device and opp lists */
DEFINE_MUTEX(opp_table_lock);
@@ -53,26 +52,6 @@ static struct opp_device *_find_opp_dev(const struct device *dev,
return NULL;
}
-static struct opp_table *_managed_opp(const struct device_node *np)
-{
- struct opp_table *opp_table;
-
- list_for_each_entry_rcu(opp_table, &opp_tables, node) {
- if (opp_table->np == np) {
- /*
- * Multiple devices can point to the same OPP table and
- * so will have same node-pointer, np.
- *
- * But the OPPs will be considered as shared only if the
- * OPP table contains a "opp-shared" property.
- */
- return opp_table->shared_opp ? opp_table : NULL;
- }
- }
-
- return NULL;
-}
-
/**
* _find_opp_table() - find opp_table struct using device pointer
* @dev: device pointer used to lookup OPP table
@@ -757,7 +736,6 @@ static struct opp_table *_add_opp_table(struct device *dev)
{
struct opp_table *opp_table;
struct opp_device *opp_dev;
- struct device_node *np;
int ret;
/* Check for existing table for 'dev' first */
@@ -781,20 +759,7 @@ static struct opp_table *_add_opp_table(struct device *dev)
return NULL;
}
- /*
- * Only required for backward compatibility with v1 bindings, but isn't
- * harmful for other cases. And so we do it unconditionally.
- */
- np = of_node_get(dev->of_node);
- if (np) {
- u32 val;
-
- if (!of_property_read_u32(np, "clock-latency", &val))
- opp_table->clock_latency_ns_max = val;
- of_property_read_u32(np, "voltage-tolerance",
- &opp_table->voltage_tolerance_v1);
- of_node_put(np);
- }
+ _of_init_opp_table(opp_table, dev);
/* Set regulator to a non-NULL error value */
opp_table->regulator = ERR_PTR(-ENXIO);
@@ -890,8 +855,8 @@ static void _kfree_opp_rcu(struct rcu_head *head)
* It is assumed that the caller holds required mutex for an RCU updater
* strategy.
*/
-static void _opp_remove(struct opp_table *opp_table,
- struct dev_pm_opp *opp, bool notify)
+void _opp_remove(struct opp_table *opp_table, struct dev_pm_opp *opp,
+ bool notify)
{
/*
* Notify the changes in the availability of the operable
@@ -952,8 +917,8 @@ void dev_pm_opp_remove(struct device *dev, unsigned long freq)
}
EXPORT_SYMBOL_GPL(dev_pm_opp_remove);
-static struct dev_pm_opp *_allocate_opp(struct device *dev,
- struct opp_table **opp_table)
+struct dev_pm_opp *_allocate_opp(struct device *dev,
+ struct opp_table **opp_table)
{
struct dev_pm_opp *opp;
@@ -989,8 +954,8 @@ static bool _opp_supported_by_regulators(struct dev_pm_opp *opp,
return true;
}
-static int _opp_add(struct device *dev, struct dev_pm_opp *new_opp,
- struct opp_table *opp_table)
+int _opp_add(struct device *dev, struct dev_pm_opp *new_opp,
+ struct opp_table *opp_table)
{
struct dev_pm_opp *opp;
struct list_head *head = &opp_table->opp_list;
@@ -1066,8 +1031,8 @@ static int _opp_add(struct device *dev, struct dev_pm_opp *new_opp,
* Duplicate OPPs (both freq and volt are same) and !opp->available
* -ENOMEM Memory allocation failure
*/
-static int _opp_add_v1(struct device *dev, unsigned long freq, long u_volt,
- bool dynamic)
+int _opp_add_v1(struct device *dev, unsigned long freq, long u_volt,
+ bool dynamic)
{
struct opp_table *opp_table;
struct dev_pm_opp *new_opp;
@@ -1112,83 +1077,6 @@ static int _opp_add_v1(struct device *dev, unsigned long freq, long u_volt,
return ret;
}
-/* TODO: Support multiple regulators */
-static int opp_parse_supplies(struct dev_pm_opp *opp, struct device *dev,
- struct opp_table *opp_table)
-{
- u32 microvolt[3] = {0};
- u32 val;
- int count, ret;
- struct property *prop = NULL;
- char name[NAME_MAX];
-
- /* Search for "opp-microvolt-<name>" */
- if (opp_table->prop_name) {
- snprintf(name, sizeof(name), "opp-microvolt-%s",
- opp_table->prop_name);
- prop = of_find_property(opp->np, name, NULL);
- }
-
- if (!prop) {
- /* Search for "opp-microvolt" */
- sprintf(name, "opp-microvolt");
- prop = of_find_property(opp->np, name, NULL);
-
- /* Missing property isn't a problem, but an invalid entry is */
- if (!prop)
- return 0;
- }
-
- count = of_property_count_u32_elems(opp->np, name);
- if (count < 0) {
- dev_err(dev, "%s: Invalid %s property (%d)\n",
- __func__, name, count);
- return count;
- }
-
- /* There can be one or three elements here */
- if (count != 1 && count != 3) {
- dev_err(dev, "%s: Invalid number of elements in %s property (%d)\n",
- __func__, name, count);
- return -EINVAL;
- }
-
- ret = of_property_read_u32_array(opp->np, name, microvolt, count);
- if (ret) {
- dev_err(dev, "%s: error parsing %s: %d\n", __func__, name, ret);
- return -EINVAL;
- }
-
- opp->u_volt = microvolt[0];
-
- if (count == 1) {
- opp->u_volt_min = opp->u_volt;
- opp->u_volt_max = opp->u_volt;
- } else {
- opp->u_volt_min = microvolt[1];
- opp->u_volt_max = microvolt[2];
- }
-
- /* Search for "opp-microamp-<name>" */
- prop = NULL;
- if (opp_table->prop_name) {
- snprintf(name, sizeof(name), "opp-microamp-%s",
- opp_table->prop_name);
- prop = of_find_property(opp->np, name, NULL);
- }
-
- if (!prop) {
- /* Search for "opp-microamp" */
- sprintf(name, "opp-microamp");
- prop = of_find_property(opp->np, name, NULL);
- }
-
- if (prop && !of_property_read_u32(opp->np, name, &val))
- opp->u_amp = val;
-
- return 0;
-}
-
/**
* dev_pm_opp_set_supported_hw() - Set supported platforms
* @dev: Device for which supported-hw has to be set.
@@ -1517,144 +1405,6 @@ void dev_pm_opp_put_regulator(struct device *dev)
}
EXPORT_SYMBOL_GPL(dev_pm_opp_put_regulator);
-static bool _opp_is_supported(struct device *dev, struct opp_table *opp_table,
- struct device_node *np)
-{
- unsigned int count = opp_table->supported_hw_count;
- u32 version;
- int ret;
-
- if (!opp_table->supported_hw)
- return true;
-
- while (count--) {
- ret = of_property_read_u32_index(np, "opp-supported-hw", count,
- &version);
- if (ret) {
- dev_warn(dev, "%s: failed to read opp-supported-hw property at index %d: %d\n",
- __func__, count, ret);
- return false;
- }
-
- /* Both of these are bitwise masks of the versions */
- if (!(version & opp_table->supported_hw[count]))
- return false;
- }
-
- return true;
-}
-
-/**
- * _opp_add_static_v2() - Allocate static OPPs (As per 'v2' DT bindings)
- * @dev: device for which we do this operation
- * @np: device node
- *
- * This function adds an opp definition to the opp table and returns status. The
- * opp can be controlled using dev_pm_opp_enable/disable functions and may be
- * removed by dev_pm_opp_remove.
- *
- * Locking: The internal opp_table and opp structures are RCU protected.
- * Hence this function internally uses RCU updater strategy with mutex locks
- * to keep the integrity of the internal data structures. Callers should ensure
- * that this function is *NOT* called under RCU protection or in contexts where
- * mutex cannot be locked.
- *
- * Return:
- * 0 On success OR
- * Duplicate OPPs (both freq and volt are same) and opp->available
- * -EEXIST Freq are same and volt are different OR
- * Duplicate OPPs (both freq and volt are same) and !opp->available
- * -ENOMEM Memory allocation failure
- * -EINVAL Failed parsing the OPP node
- */
-static int _opp_add_static_v2(struct device *dev, struct device_node *np)
-{
- struct opp_table *opp_table;
- struct dev_pm_opp *new_opp;
- u64 rate;
- u32 val;
- int ret;
-
- /* Hold our table modification lock here */
- mutex_lock(&opp_table_lock);
-
- new_opp = _allocate_opp(dev, &opp_table);
- if (!new_opp) {
- ret = -ENOMEM;
- goto unlock;
- }
-
- ret = of_property_read_u64(np, "opp-hz", &rate);
- if (ret < 0) {
- dev_err(dev, "%s: opp-hz not found\n", __func__);
- goto free_opp;
- }
-
- /* Check if the OPP supports hardware's hierarchy of versions or not */
- if (!_opp_is_supported(dev, opp_table, np)) {
- dev_dbg(dev, "OPP not supported by hardware: %llu\n", rate);
- goto free_opp;
- }
-
- /*
- * Rate is defined as an unsigned long in clk API, and so casting
- * explicitly to its type. Must be fixed once rate is 64 bit
- * guaranteed in clk API.
- */
- new_opp->rate = (unsigned long)rate;
- new_opp->turbo = of_property_read_bool(np, "turbo-mode");
-
- new_opp->np = np;
- new_opp->dynamic = false;
- new_opp->available = true;
-
- if (!of_property_read_u32(np, "clock-latency-ns", &val))
- new_opp->clock_latency_ns = val;
-
- ret = opp_parse_supplies(new_opp, dev, opp_table);
- if (ret)
- goto free_opp;
-
- ret = _opp_add(dev, new_opp, opp_table);
- if (ret)
- goto free_opp;
-
- /* OPP to select on device suspend */
- if (of_property_read_bool(np, "opp-suspend")) {
- if (opp_table->suspend_opp) {
- dev_warn(dev, "%s: Multiple suspend OPPs found (%lu %lu)\n",
- __func__, opp_table->suspend_opp->rate,
- new_opp->rate);
- } else {
- new_opp->suspend = true;
- opp_table->suspend_opp = new_opp;
- }
- }
-
- if (new_opp->clock_latency_ns > opp_table->clock_latency_ns_max)
- opp_table->clock_latency_ns_max = new_opp->clock_latency_ns;
-
- mutex_unlock(&opp_table_lock);
-
- pr_debug("%s: turbo:%d rate:%lu uv:%lu uvmin:%lu uvmax:%lu latency:%lu\n",
- __func__, new_opp->turbo, new_opp->rate, new_opp->u_volt,
- new_opp->u_volt_min, new_opp->u_volt_max,
- new_opp->clock_latency_ns);
-
- /*
- * Notify the changes in the availability of the operable
- * frequency/voltage list.
- */
- srcu_notifier_call_chain(&opp_table->srcu_head, OPP_EVENT_ADD, new_opp);
- return 0;
-
-free_opp:
- _opp_remove(opp_table, new_opp, false);
-unlock:
- mutex_unlock(&opp_table_lock);
- return ret;
-}
-
/**
* dev_pm_opp_add() - Add an OPP table from a table definitions
* @dev: device for which we do this operation
@@ -1846,7 +1596,7 @@ EXPORT_SYMBOL_GPL(dev_pm_opp_get_notifier);
* Free OPPs either created using static entries present in DT or even the
* dynamically added entries based on remove_all param.
*/
-static void _dev_pm_opp_remove_table(struct device *dev, bool remove_all)
+void _dev_pm_opp_remove_table(struct device *dev, bool remove_all)
{
struct opp_table *opp_table;
struct dev_pm_opp *opp, *tmp;
@@ -1900,179 +1650,3 @@ void dev_pm_opp_remove_table(struct device *dev)
_dev_pm_opp_remove_table(dev, true);
}
EXPORT_SYMBOL_GPL(dev_pm_opp_remove_table);
-
-#ifdef CONFIG_OF
-/**
- * dev_pm_opp_of_remove_table() - Free OPP table entries created from static DT
- * entries
- * @dev: device pointer used to lookup OPP table.
- *
- * Free OPPs created using static entries present in DT.
- *
- * Locking: The internal opp_table and opp structures are RCU protected.
- * Hence this function indirectly uses RCU updater strategy with mutex locks
- * to keep the integrity of the internal data structures. Callers should ensure
- * that this function is *NOT* called under RCU protection or in contexts where
- * mutex cannot be locked.
- */
-void dev_pm_opp_of_remove_table(struct device *dev)
-{
- _dev_pm_opp_remove_table(dev, false);
-}
-EXPORT_SYMBOL_GPL(dev_pm_opp_of_remove_table);
-
-/* Returns opp descriptor node for a device, caller must do of_node_put() */
-struct device_node *_of_get_opp_desc_node(struct device *dev)
-{
- /*
- * TODO: Support for multiple OPP tables.
- *
- * There should be only ONE phandle present in "operating-points-v2"
- * property.
- */
-
- return of_parse_phandle(dev->of_node, "operating-points-v2", 0);
-}
-
-/* Initializes OPP tables based on new bindings */
-static int _of_add_opp_table_v2(struct device *dev, struct device_node *opp_np)
-{
- struct device_node *np;
- struct opp_table *opp_table;
- int ret = 0, count = 0;
-
- mutex_lock(&opp_table_lock);
-
- opp_table = _managed_opp(opp_np);
- if (opp_table) {
- /* OPPs are already managed */
- if (!_add_opp_dev(dev, opp_table))
- ret = -ENOMEM;
- mutex_unlock(&opp_table_lock);
- return ret;
- }
- mutex_unlock(&opp_table_lock);
-
- /* We have opp-table node now, iterate over it and add OPPs */
- for_each_available_child_of_node(opp_np, np) {
- count++;
-
- ret = _opp_add_static_v2(dev, np);
- if (ret) {
- dev_err(dev, "%s: Failed to add OPP, %d\n", __func__,
- ret);
- goto free_table;
- }
- }
-
- /* There should be one of more OPP defined */
- if (WARN_ON(!count))
- return -ENOENT;
-
- mutex_lock(&opp_table_lock);
-
- opp_table = _find_opp_table(dev);
- if (WARN_ON(IS_ERR(opp_table))) {
- ret = PTR_ERR(opp_table);
- mutex_unlock(&opp_table_lock);
- goto free_table;
- }
-
- opp_table->np = opp_np;
- opp_table->shared_opp = of_property_read_bool(opp_np, "opp-shared");
-
- mutex_unlock(&opp_table_lock);
-
- return 0;
-
-free_table:
- dev_pm_opp_of_remove_table(dev);
-
- return ret;
-}
-
-/* Initializes OPP tables based on old-deprecated bindings */
-static int _of_add_opp_table_v1(struct device *dev)
-{
- const struct property *prop;
- const __be32 *val;
- int nr;
-
- prop = of_find_property(dev->of_node, "operating-points", NULL);
- if (!prop)
- return -ENODEV;
- if (!prop->value)
- return -ENODATA;
-
- /*
- * Each OPP is a set of tuples consisting of frequency and
- * voltage like <freq-kHz vol-uV>.
- */
- nr = prop->length / sizeof(u32);
- if (nr % 2) {
- dev_err(dev, "%s: Invalid OPP table\n", __func__);
- return -EINVAL;
- }
-
- val = prop->value;
- while (nr) {
- unsigned long freq = be32_to_cpup(val++) * 1000;
- unsigned long volt = be32_to_cpup(val++);
-
- if (_opp_add_v1(dev, freq, volt, false))
- dev_warn(dev, "%s: Failed to add OPP %ld\n",
- __func__, freq);
- nr -= 2;
- }
-
- return 0;
-}
-
-/**
- * dev_pm_opp_of_add_table() - Initialize opp table from device tree
- * @dev: device pointer used to lookup OPP table.
- *
- * Register the initial OPP table with the OPP library for given device.
- *
- * Locking: The internal opp_table and opp structures are RCU protected.
- * Hence this function indirectly uses RCU updater strategy with mutex locks
- * to keep the integrity of the internal data structures. Callers should ensure
- * that this function is *NOT* called under RCU protection or in contexts where
- * mutex cannot be locked.
- *
- * Return:
- * 0 On success OR
- * Duplicate OPPs (both freq and volt are same) and opp->available
- * -EEXIST Freq are same and volt are different OR
- * Duplicate OPPs (both freq and volt are same) and !opp->available
- * -ENOMEM Memory allocation failure
- * -ENODEV when 'operating-points' property is not found or is invalid data
- * in device node.
- * -ENODATA when empty 'operating-points' property is found
- * -EINVAL when invalid entries are found in opp-v2 table
- */
-int dev_pm_opp_of_add_table(struct device *dev)
-{
- struct device_node *opp_np;
- int ret;
-
- /*
- * OPPs have two version of bindings now. The older one is deprecated,
- * try for the new binding first.
- */
- opp_np = _of_get_opp_desc_node(dev);
- if (!opp_np) {
- /*
- * Try old-deprecated bindings for backward compatibility with
- * older dtbs.
- */
- return _of_add_opp_table_v1(dev);
- }
-
- ret = _of_add_opp_table_v2(dev, opp_np);
- of_node_put(opp_np);
-
- return ret;
-}
-EXPORT_SYMBOL_GPL(dev_pm_opp_of_add_table);
-#endif
diff --git a/drivers/base/power/opp/cpu.c b/drivers/base/power/opp/cpu.c
index 357781e0b791..83d6e7ba1a34 100644
--- a/drivers/base/power/opp/cpu.c
+++ b/drivers/base/power/opp/cpu.c
@@ -18,7 +18,6 @@
#include <linux/err.h>
#include <linux/errno.h>
#include <linux/export.h>
-#include <linux/of.h>
#include <linux/slab.h>
#include "opp.h"
@@ -119,8 +118,7 @@ void dev_pm_opp_free_cpufreq_table(struct device *dev,
EXPORT_SYMBOL_GPL(dev_pm_opp_free_cpufreq_table);
#endif /* CONFIG_CPU_FREQ */
-static void
-_dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask, bool of)
+void _dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask, bool of)
{
struct device *cpu_dev;
int cpu;
@@ -162,145 +160,6 @@ void dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask)
}
EXPORT_SYMBOL_GPL(dev_pm_opp_cpumask_remove_table);
-#ifdef CONFIG_OF
-/**
- * dev_pm_opp_of_cpumask_remove_table() - Removes OPP table for @cpumask
- * @cpumask: cpumask for which OPP table needs to be removed
- *
- * This removes the OPP tables for CPUs present in the @cpumask.
- * This should be used only to remove static entries created from DT.
- *
- * Locking: The internal opp_table and opp structures are RCU protected.
- * Hence this function internally uses RCU updater strategy with mutex locks
- * to keep the integrity of the internal data structures. Callers should ensure
- * that this function is *NOT* called under RCU protection or in contexts where
- * mutex cannot be locked.
- */
-void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask)
-{
- _dev_pm_opp_cpumask_remove_table(cpumask, true);
-}
-EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_remove_table);
-
-/**
- * dev_pm_opp_of_cpumask_add_table() - Adds OPP table for @cpumask
- * @cpumask: cpumask for which OPP table needs to be added.
- *
- * This adds the OPP tables for CPUs present in the @cpumask.
- *
- * Locking: The internal opp_table and opp structures are RCU protected.
- * Hence this function internally uses RCU updater strategy with mutex locks
- * to keep the integrity of the internal data structures. Callers should ensure
- * that this function is *NOT* called under RCU protection or in contexts where
- * mutex cannot be locked.
- */
-int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask)
-{
- struct device *cpu_dev;
- int cpu, ret = 0;
-
- WARN_ON(cpumask_empty(cpumask));
-
- for_each_cpu(cpu, cpumask) {
- cpu_dev = get_cpu_device(cpu);
- if (!cpu_dev) {
- pr_err("%s: failed to get cpu%d device\n", __func__,
- cpu);
- continue;
- }
-
- ret = dev_pm_opp_of_add_table(cpu_dev);
- if (ret) {
- pr_err("%s: couldn't find opp table for cpu:%d, %d\n",
- __func__, cpu, ret);
-
- /* Free all other OPPs */
- dev_pm_opp_of_cpumask_remove_table(cpumask);
- break;
- }
- }
-
- return ret;
-}
-EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_add_table);
-
-/*
- * Works only for OPP v2 bindings.
- *
- * Returns -ENOENT if operating-points-v2 bindings aren't supported.
- */
-/**
- * dev_pm_opp_of_get_sharing_cpus() - Get cpumask of CPUs sharing OPPs with
- * @cpu_dev using operating-points-v2
- * bindings.
- *
- * @cpu_dev: CPU device for which we do this operation
- * @cpumask: cpumask to update with information of sharing CPUs
- *
- * This updates the @cpumask with CPUs that are sharing OPPs with @cpu_dev.
- *
- * Returns -ENOENT if operating-points-v2 isn't present for @cpu_dev.
- *
- * Locking: The internal opp_table and opp structures are RCU protected.
- * Hence this function internally uses RCU updater strategy with mutex locks
- * to keep the integrity of the internal data structures. Callers should ensure
- * that this function is *NOT* called under RCU protection or in contexts where
- * mutex cannot be locked.
- */
-int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask)
-{
- struct device_node *np, *tmp_np;
- struct device *tcpu_dev;
- int cpu, ret = 0;
-
- /* Get OPP descriptor node */
- np = _of_get_opp_desc_node(cpu_dev);
- if (!np) {
- dev_dbg(cpu_dev, "%s: Couldn't find cpu_dev node.\n", __func__);
- return -ENOENT;
- }
-
- cpumask_set_cpu(cpu_dev->id, cpumask);
-
- /* OPPs are shared ? */
- if (!of_property_read_bool(np, "opp-shared"))
- goto put_cpu_node;
-
- for_each_possible_cpu(cpu) {
- if (cpu == cpu_dev->id)
- continue;
-
- tcpu_dev = get_cpu_device(cpu);
- if (!tcpu_dev) {
- dev_err(cpu_dev, "%s: failed to get cpu%d device\n",
- __func__, cpu);
- ret = -ENODEV;
- goto put_cpu_node;
- }
-
- /* Get OPP descriptor node */
- tmp_np = _of_get_opp_desc_node(tcpu_dev);
- if (!tmp_np) {
- dev_err(tcpu_dev, "%s: Couldn't find tcpu_dev node.\n",
- __func__);
- ret = -ENOENT;
- goto put_cpu_node;
- }
-
- /* CPUs are sharing opp node */
- if (np == tmp_np)
- cpumask_set_cpu(cpu, cpumask);
-
- of_node_put(tmp_np);
- }
-
-put_cpu_node:
- of_node_put(np);
- return ret;
-}
-EXPORT_SYMBOL_GPL(dev_pm_opp_of_get_sharing_cpus);
-#endif
-
/**
* dev_pm_opp_set_sharing_cpus() - Mark OPP table as shared by few CPUs
* @cpu_dev: CPU device for which we do this operation
diff --git a/drivers/base/power/opp/of.c b/drivers/base/power/opp/of.c
new file mode 100644
index 000000000000..94d2010558e3
--- /dev/null
+++ b/drivers/base/power/opp/of.c
@@ -0,0 +1,591 @@
+/*
+ * Generic OPP OF helpers
+ *
+ * Copyright (C) 2009-2010 Texas Instruments Incorporated.
+ * Nishanth Menon
+ * Romit Dasgupta
+ * Kevin Hilman
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/cpu.h>
+#include <linux/errno.h>
+#include <linux/device.h>
+#include <linux/of.h>
+#include <linux/export.h>
+
+#include "opp.h"
+
+static struct opp_table *_managed_opp(const struct device_node *np)
+{
+ struct opp_table *opp_table;
+
+ list_for_each_entry_rcu(opp_table, &opp_tables, node) {
+ if (opp_table->np == np) {
+ /*
+ * Multiple devices can point to the same OPP table and
+ * so will have same node-pointer, np.
+ *
+ * But the OPPs will be considered as shared only if the
+ * OPP table contains a "opp-shared" property.
+ */
+ return opp_table->shared_opp ? opp_table : NULL;
+ }
+ }
+
+ return NULL;
+}
+
+void _of_init_opp_table(struct opp_table *opp_table, struct device *dev)
+{
+ struct device_node *np;
+
+ /*
+ * Only required for backward compatibility with v1 bindings, but isn't
+ * harmful for other cases. And so we do it unconditionally.
+ */
+ np = of_node_get(dev->of_node);
+ if (np) {
+ u32 val;
+
+ if (!of_property_read_u32(np, "clock-latency", &val))
+ opp_table->clock_latency_ns_max = val;
+ of_property_read_u32(np, "voltage-tolerance",
+ &opp_table->voltage_tolerance_v1);
+ of_node_put(np);
+ }
+}
+
+static bool _opp_is_supported(struct device *dev, struct opp_table *opp_table,
+ struct device_node *np)
+{
+ unsigned int count = opp_table->supported_hw_count;
+ u32 version;
+ int ret;
+
+ if (!opp_table->supported_hw)
+ return true;
+
+ while (count--) {
+ ret = of_property_read_u32_index(np, "opp-supported-hw", count,
+ &version);
+ if (ret) {
+ dev_warn(dev, "%s: failed to read opp-supported-hw property at index %d: %d\n",
+ __func__, count, ret);
+ return false;
+ }
+
+ /* Both of these are bitwise masks of the versions */
+ if (!(version & opp_table->supported_hw[count]))
+ return false;
+ }
+
+ return true;
+}
+
+/* TODO: Support multiple regulators */
+static int opp_parse_supplies(struct dev_pm_opp *opp, struct device *dev,
+ struct opp_table *opp_table)
+{
+ u32 microvolt[3] = {0};
+ u32 val;
+ int count, ret;
+ struct property *prop = NULL;
+ char name[NAME_MAX];
+
+ /* Search for "opp-microvolt-<name>" */
+ if (opp_table->prop_name) {
+ snprintf(name, sizeof(name), "opp-microvolt-%s",
+ opp_table->prop_name);
+ prop = of_find_property(opp->np, name, NULL);
+ }
+
+ if (!prop) {
+ /* Search for "opp-microvolt" */
+ sprintf(name, "opp-microvolt");
+ prop = of_find_property(opp->np, name, NULL);
+
+ /* Missing property isn't a problem, but an invalid entry is */
+ if (!prop)
+ return 0;
+ }
+
+ count = of_property_count_u32_elems(opp->np, name);
+ if (count < 0) {
+ dev_err(dev, "%s: Invalid %s property (%d)\n",
+ __func__, name, count);
+ return count;
+ }
+
+ /* There can be one or three elements here */
+ if (count != 1 && count != 3) {
+ dev_err(dev, "%s: Invalid number of elements in %s property (%d)\n",
+ __func__, name, count);
+ return -EINVAL;
+ }
+
+ ret = of_property_read_u32_array(opp->np, name, microvolt, count);
+ if (ret) {
+ dev_err(dev, "%s: error parsing %s: %d\n", __func__, name, ret);
+ return -EINVAL;
+ }
+
+ opp->u_volt = microvolt[0];
+
+ if (count == 1) {
+ opp->u_volt_min = opp->u_volt;
+ opp->u_volt_max = opp->u_volt;
+ } else {
+ opp->u_volt_min = microvolt[1];
+ opp->u_volt_max = microvolt[2];
+ }
+
+ /* Search for "opp-microamp-<name>" */
+ prop = NULL;
+ if (opp_table->prop_name) {
+ snprintf(name, sizeof(name), "opp-microamp-%s",
+ opp_table->prop_name);
+ prop = of_find_property(opp->np, name, NULL);
+ }
+
+ if (!prop) {
+ /* Search for "opp-microamp" */
+ sprintf(name, "opp-microamp");
+ prop = of_find_property(opp->np, name, NULL);
+ }
+
+ if (prop && !of_property_read_u32(opp->np, name, &val))
+ opp->u_amp = val;
+
+ return 0;
+}
+
+/**
+ * dev_pm_opp_of_remove_table() - Free OPP table entries created from static DT
+ * entries
+ * @dev: device pointer used to lookup OPP table.
+ *
+ * Free OPPs created using static entries present in DT.
+ *
+ * Locking: The internal opp_table and opp structures are RCU protected.
+ * Hence this function indirectly uses RCU updater strategy with mutex locks
+ * to keep the integrity of the internal data structures. Callers should ensure
+ * that this function is *NOT* called under RCU protection or in contexts where
+ * mutex cannot be locked.
+ */
+void dev_pm_opp_of_remove_table(struct device *dev)
+{
+ _dev_pm_opp_remove_table(dev, false);
+}
+EXPORT_SYMBOL_GPL(dev_pm_opp_of_remove_table);
+
+/* Returns opp descriptor node for a device, caller must do of_node_put() */
+struct device_node *_of_get_opp_desc_node(struct device *dev)
+{
+ /*
+ * TODO: Support for multiple OPP tables.
+ *
+ * There should be only ONE phandle present in "operating-points-v2"
+ * property.
+ */
+
+ return of_parse_phandle(dev->of_node, "operating-points-v2", 0);
+}
+
+/**
+ * _opp_add_static_v2() - Allocate static OPPs (As per 'v2' DT bindings)
+ * @dev: device for which we do this operation
+ * @np: device node
+ *
+ * This function adds an opp definition to the opp table and returns status. The
+ * opp can be controlled using dev_pm_opp_enable/disable functions and may be
+ * removed by dev_pm_opp_remove.
+ *
+ * Locking: The internal opp_table and opp structures are RCU protected.
+ * Hence this function internally uses RCU updater strategy with mutex locks
+ * to keep the integrity of the internal data structures. Callers should ensure
+ * that this function is *NOT* called under RCU protection or in contexts where
+ * mutex cannot be locked.
+ *
+ * Return:
+ * 0 On success OR
+ * Duplicate OPPs (both freq and volt are same) and opp->available
+ * -EEXIST Freq are same and volt are different OR
+ * Duplicate OPPs (both freq and volt are same) and !opp->available
+ * -ENOMEM Memory allocation failure
+ * -EINVAL Failed parsing the OPP node
+ */
+static int _opp_add_static_v2(struct device *dev, struct device_node *np)
+{
+ struct opp_table *opp_table;
+ struct dev_pm_opp *new_opp;
+ u64 rate;
+ u32 val;
+ int ret;
+
+ /* Hold our table modification lock here */
+ mutex_lock(&opp_table_lock);
+
+ new_opp = _allocate_opp(dev, &opp_table);
+ if (!new_opp) {
+ ret = -ENOMEM;
+ goto unlock;
+ }
+
+ ret = of_property_read_u64(np, "opp-hz", &rate);
+ if (ret < 0) {
+ dev_err(dev, "%s: opp-hz not found\n", __func__);
+ goto free_opp;
+ }
+
+ /* Check if the OPP supports hardware's hierarchy of versions or not */
+ if (!_opp_is_supported(dev, opp_table, np)) {
+ dev_dbg(dev, "OPP not supported by hardware: %llu\n", rate);
+ goto free_opp;
+ }
+
+ /*
+ * Rate is defined as an unsigned long in clk API, and so casting
+ * explicitly to its type. Must be fixed once rate is 64 bit
+ * guaranteed in clk API.
+ */
+ new_opp->rate = (unsigned long)rate;
+ new_opp->turbo = of_property_read_bool(np, "turbo-mode");
+
+ new_opp->np = np;
+ new_opp->dynamic = false;
+ new_opp->available = true;
+
+ if (!of_property_read_u32(np, "clock-latency-ns", &val))
+ new_opp->clock_latency_ns = val;
+
+ ret = opp_parse_supplies(new_opp, dev, opp_table);
+ if (ret)
+ goto free_opp;
+
+ ret = _opp_add(dev, new_opp, opp_table);
+ if (ret)
+ goto free_opp;
+
+ /* OPP to select on device suspend */
+ if (of_property_read_bool(np, "opp-suspend")) {
+ if (opp_table->suspend_opp) {
+ dev_warn(dev, "%s: Multiple suspend OPPs found (%lu %lu)\n",
+ __func__, opp_table->suspend_opp->rate,
+ new_opp->rate);
+ } else {
+ new_opp->suspend = true;
+ opp_table->suspend_opp = new_opp;
+ }
+ }
+
+ if (new_opp->clock_latency_ns > opp_table->clock_latency_ns_max)
+ opp_table->clock_latency_ns_max = new_opp->clock_latency_ns;
+
+ mutex_unlock(&opp_table_lock);
+
+ pr_debug("%s: turbo:%d rate:%lu uv:%lu uvmin:%lu uvmax:%lu latency:%lu\n",
+ __func__, new_opp->turbo, new_opp->rate, new_opp->u_volt,
+ new_opp->u_volt_min, new_opp->u_volt_max,
+ new_opp->clock_latency_ns);
+
+ /*
+ * Notify the changes in the availability of the operable
+ * frequency/voltage list.
+ */
+ srcu_notifier_call_chain(&opp_table->srcu_head, OPP_EVENT_ADD, new_opp);
+ return 0;
+
+free_opp:
+ _opp_remove(opp_table, new_opp, false);
+unlock:
+ mutex_unlock(&opp_table_lock);
+ return ret;
+}
+
+/* Initializes OPP tables based on new bindings */
+static int _of_add_opp_table_v2(struct device *dev, struct device_node *opp_np)
+{
+ struct device_node *np;
+ struct opp_table *opp_table;
+ int ret = 0, count = 0;
+
+ mutex_lock(&opp_table_lock);
+
+ opp_table = _managed_opp(opp_np);
+ if (opp_table) {
+ /* OPPs are already managed */
+ if (!_add_opp_dev(dev, opp_table))
+ ret = -ENOMEM;
+ mutex_unlock(&opp_table_lock);
+ return ret;
+ }
+ mutex_unlock(&opp_table_lock);
+
+ /* We have opp-table node now, iterate over it and add OPPs */
+ for_each_available_child_of_node(opp_np, np) {
+ count++;
+
+ ret = _opp_add_static_v2(dev, np);
+ if (ret) {
+ dev_err(dev, "%s: Failed to add OPP, %d\n", __func__,
+ ret);
+ goto free_table;
+ }
+ }
+
+ /* There should be one of more OPP defined */
+ if (WARN_ON(!count))
+ return -ENOENT;
+
+ mutex_lock(&opp_table_lock);
+
+ opp_table = _find_opp_table(dev);
+ if (WARN_ON(IS_ERR(opp_table))) {
+ ret = PTR_ERR(opp_table);
+ mutex_unlock(&opp_table_lock);
+ goto free_table;
+ }
+
+ opp_table->np = opp_np;
+ opp_table->shared_opp = of_property_read_bool(opp_np, "opp-shared");
+
+ mutex_unlock(&opp_table_lock);
+
+ return 0;
+
+free_table:
+ dev_pm_opp_of_remove_table(dev);
+
+ return ret;
+}
+
+/* Initializes OPP tables based on old-deprecated bindings */
+static int _of_add_opp_table_v1(struct device *dev)
+{
+ const struct property *prop;
+ const __be32 *val;
+ int nr;
+
+ prop = of_find_property(dev->of_node, "operating-points", NULL);
+ if (!prop)
+ return -ENODEV;
+ if (!prop->value)
+ return -ENODATA;
+
+ /*
+ * Each OPP is a set of tuples consisting of frequency and
+ * voltage like <freq-kHz vol-uV>.
+ */
+ nr = prop->length / sizeof(u32);
+ if (nr % 2) {
+ dev_err(dev, "%s: Invalid OPP table\n", __func__);
+ return -EINVAL;
+ }
+
+ val = prop->value;
+ while (nr) {
+ unsigned long freq = be32_to_cpup(val++) * 1000;
+ unsigned long volt = be32_to_cpup(val++);
+
+ if (_opp_add_v1(dev, freq, volt, false))
+ dev_warn(dev, "%s: Failed to add OPP %ld\n",
+ __func__, freq);
+ nr -= 2;
+ }
+
+ return 0;
+}
+
+/**
+ * dev_pm_opp_of_add_table() - Initialize opp table from device tree
+ * @dev: device pointer used to lookup OPP table.
+ *
+ * Register the initial OPP table with the OPP library for given device.
+ *
+ * Locking: The internal opp_table and opp structures are RCU protected.
+ * Hence this function indirectly uses RCU updater strategy with mutex locks
+ * to keep the integrity of the internal data structures. Callers should ensure
+ * that this function is *NOT* called under RCU protection or in contexts where
+ * mutex cannot be locked.
+ *
+ * Return:
+ * 0 On success OR
+ * Duplicate OPPs (both freq and volt are same) and opp->available
+ * -EEXIST Freq are same and volt are different OR
+ * Duplicate OPPs (both freq and volt are same) and !opp->available
+ * -ENOMEM Memory allocation failure
+ * -ENODEV when 'operating-points' property is not found or is invalid data
+ * in device node.
+ * -ENODATA when empty 'operating-points' property is found
+ * -EINVAL when invalid entries are found in opp-v2 table
+ */
+int dev_pm_opp_of_add_table(struct device *dev)
+{
+ struct device_node *opp_np;
+ int ret;
+
+ /*
+ * OPPs have two version of bindings now. The older one is deprecated,
+ * try for the new binding first.
+ */
+ opp_np = _of_get_opp_desc_node(dev);
+ if (!opp_np) {
+ /*
+ * Try old-deprecated bindings for backward compatibility with
+ * older dtbs.
+ */
+ return _of_add_opp_table_v1(dev);
+ }
+
+ ret = _of_add_opp_table_v2(dev, opp_np);
+ of_node_put(opp_np);
+
+ return ret;
+}
+EXPORT_SYMBOL_GPL(dev_pm_opp_of_add_table);
+
+/* CPU device specific helpers */
+
+/**
+ * dev_pm_opp_of_cpumask_remove_table() - Removes OPP table for @cpumask
+ * @cpumask: cpumask for which OPP table needs to be removed
+ *
+ * This removes the OPP tables for CPUs present in the @cpumask.
+ * This should be used only to remove static entries created from DT.
+ *
+ * Locking: The internal opp_table and opp structures are RCU protected.
+ * Hence this function internally uses RCU updater strategy with mutex locks
+ * to keep the integrity of the internal data structures. Callers should ensure
+ * that this function is *NOT* called under RCU protection or in contexts where
+ * mutex cannot be locked.
+ */
+void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask)
+{
+ _dev_pm_opp_cpumask_remove_table(cpumask, true);
+}
+EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_remove_table);
+
+/**
+ * dev_pm_opp_of_cpumask_add_table() - Adds OPP table for @cpumask
+ * @cpumask: cpumask for which OPP table needs to be added.
+ *
+ * This adds the OPP tables for CPUs present in the @cpumask.
+ *
+ * Locking: The internal opp_table and opp structures are RCU protected.
+ * Hence this function internally uses RCU updater strategy with mutex locks
+ * to keep the integrity of the internal data structures. Callers should ensure
+ * that this function is *NOT* called under RCU protection or in contexts where
+ * mutex cannot be locked.
+ */
+int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask)
+{
+ struct device *cpu_dev;
+ int cpu, ret = 0;
+
+ WARN_ON(cpumask_empty(cpumask));
+
+ for_each_cpu(cpu, cpumask) {
+ cpu_dev = get_cpu_device(cpu);
+ if (!cpu_dev) {
+ pr_err("%s: failed to get cpu%d device\n", __func__,
+ cpu);
+ continue;
+ }
+
+ ret = dev_pm_opp_of_add_table(cpu_dev);
+ if (ret) {
+ pr_err("%s: couldn't find opp table for cpu:%d, %d\n",
+ __func__, cpu, ret);
+
+ /* Free all other OPPs */
+ dev_pm_opp_of_cpumask_remove_table(cpumask);
+ break;
+ }
+ }
+
+ return ret;
+}
+EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_add_table);
+
+/*
+ * Works only for OPP v2 bindings.
+ *
+ * Returns -ENOENT if operating-points-v2 bindings aren't supported.
+ */
+/**
+ * dev_pm_opp_of_get_sharing_cpus() - Get cpumask of CPUs sharing OPPs with
+ * @cpu_dev using operating-points-v2
+ * bindings.
+ *
+ * @cpu_dev: CPU device for which we do this operation
+ * @cpumask: cpumask to update with information of sharing CPUs
+ *
+ * This updates the @cpumask with CPUs that are sharing OPPs with @cpu_dev.
+ *
+ * Returns -ENOENT if operating-points-v2 isn't present for @cpu_dev.
+ *
+ * Locking: The internal opp_table and opp structures are RCU protected.
+ * Hence this function internally uses RCU updater strategy with mutex locks
+ * to keep the integrity of the internal data structures. Callers should ensure
+ * that this function is *NOT* called under RCU protection or in contexts where
+ * mutex cannot be locked.
+ */
+int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev,
+ struct cpumask *cpumask)
+{
+ struct device_node *np, *tmp_np;
+ struct device *tcpu_dev;
+ int cpu, ret = 0;
+
+ /* Get OPP descriptor node */
+ np = _of_get_opp_desc_node(cpu_dev);
+ if (!np) {
+ dev_dbg(cpu_dev, "%s: Couldn't find cpu_dev node.\n", __func__);
+ return -ENOENT;
+ }
+
+ cpumask_set_cpu(cpu_dev->id, cpumask);
+
+ /* OPPs are shared ? */
+ if (!of_property_read_bool(np, "opp-shared"))
+ goto put_cpu_node;
+
+ for_each_possible_cpu(cpu) {
+ if (cpu == cpu_dev->id)
+ continue;
+
+ tcpu_dev = get_cpu_device(cpu);
+ if (!tcpu_dev) {
+ dev_err(cpu_dev, "%s: failed to get cpu%d device\n",
+ __func__, cpu);
+ ret = -ENODEV;
+ goto put_cpu_node;
+ }
+
+ /* Get OPP descriptor node */
+ tmp_np = _of_get_opp_desc_node(tcpu_dev);
+ if (!tmp_np) {
+ dev_err(tcpu_dev, "%s: Couldn't find tcpu_dev node.\n",
+ __func__);
+ ret = -ENOENT;
+ goto put_cpu_node;
+ }
+
+ /* CPUs are sharing opp node */
+ if (np == tmp_np)
+ cpumask_set_cpu(cpu, cpumask);
+
+ of_node_put(tmp_np);
+ }
+
+put_cpu_node:
+ of_node_put(np);
+ return ret;
+}
+EXPORT_SYMBOL_GPL(dev_pm_opp_of_get_sharing_cpus);
diff --git a/drivers/base/power/opp/opp.h b/drivers/base/power/opp/opp.h
index f67f806fcf3a..20f3be22e060 100644
--- a/drivers/base/power/opp/opp.h
+++ b/drivers/base/power/opp/opp.h
@@ -28,6 +28,8 @@ struct regulator;
/* Lock to allow exclusive modification to the device and opp lists */
extern struct mutex opp_table_lock;
+extern struct list_head opp_tables;
+
/*
* Internal data structure organization with the OPP layer library is as
* follows:
@@ -183,6 +185,18 @@ struct opp_table {
struct opp_table *_find_opp_table(struct device *dev);
struct opp_device *_add_opp_dev(const struct device *dev, struct opp_table *opp_table);
struct device_node *_of_get_opp_desc_node(struct device *dev);
+void _dev_pm_opp_remove_table(struct device *dev, bool remove_all);
+struct dev_pm_opp *_allocate_opp(struct device *dev, struct opp_table **opp_table);
+int _opp_add(struct device *dev, struct dev_pm_opp *new_opp, struct opp_table *opp_table);
+void _opp_remove(struct opp_table *opp_table, struct dev_pm_opp *opp, bool notify);
+int _opp_add_v1(struct device *dev, unsigned long freq, long u_volt, bool dynamic);
+void _dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask, bool of);
+
+#ifdef CONFIG_OF
+void _of_init_opp_table(struct opp_table *opp_table, struct device *dev);
+#else
+static inline void _of_init_opp_table(struct opp_table *opp_table, struct device *dev) {}
+#endif
#ifdef CONFIG_DEBUG_FS
void opp_debug_remove_one(struct dev_pm_opp *opp);
--
2.7.1.410.g6faf27b
Tree/Branch: v4.5.3
Git describe: v4.5.3
Commit: fbc310e9c5 Linux 4.5.3
Build Time: 124 min 18 sec
Passed: 9 / 9 (100.00 %)
Failed: 0 / 9 ( 0.00 %)
Errors: 0
Warnings: 4
Section Mismatches: 0
-------------------------------------------------------------------------------
defconfigs with issues (other than build errors):
2 warnings 0 mismatches : arm64-allmodconfig
2 warnings 0 mismatches : arm-multi_v7_defconfig
4 warnings 0 mismatches : arm-allmodconfig
1 warnings 0 mismatches : arm64-defconfig
-------------------------------------------------------------------------------
Warnings Summary: 4
4 ../drivers/tty/serial/amba-pl011.c:190:27: warning: 'vendor_zte' defined but not used [-Wunused-variable]
3 ../sound/pci/hda/patch_hdmi.c:1697:2: warning: label 'unlock' defined but not used [-Wunused-label]
1 ../lib/lz4/lz4hc_compress.c:514:1: warning: the frame size of 1472 bytes is larger than 1024 bytes [-Wframe-larger-than=]
1 ../drivers/mtd/chips/cfi_cmdset_0020.c:651:1: warning: the frame size of 1032 bytes is larger than 1024 bytes [-Wframe-larger-than=]
===============================================================================
Detailed per-defconfig build reports below:
-------------------------------------------------------------------------------
arm64-allmodconfig : PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
../sound/pci/hda/patch_hdmi.c:1697:2: warning: label 'unlock' defined but not used [-Wunused-label]
../drivers/tty/serial/amba-pl011.c:190:27: warning: 'vendor_zte' defined but not used [-Wunused-variable]
-------------------------------------------------------------------------------
arm-multi_v7_defconfig : PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
../sound/pci/hda/patch_hdmi.c:1697:2: warning: label 'unlock' defined but not used [-Wunused-label]
../drivers/tty/serial/amba-pl011.c:190:27: warning: 'vendor_zte' defined but not used [-Wunused-variable]
-------------------------------------------------------------------------------
arm-allmodconfig : PASS, 0 errors, 4 warnings, 0 section mismatches
Warnings:
../lib/lz4/lz4hc_compress.c:514:1: warning: the frame size of 1472 bytes is larger than 1024 bytes [-Wframe-larger-than=]
../sound/pci/hda/patch_hdmi.c:1697:2: warning: label 'unlock' defined but not used [-Wunused-label]
../drivers/mtd/chips/cfi_cmdset_0020.c:651:1: warning: the frame size of 1032 bytes is larger than 1024 bytes [-Wframe-larger-than=]
../drivers/tty/serial/amba-pl011.c:190:27: warning: 'vendor_zte' defined but not used [-Wunused-variable]
-------------------------------------------------------------------------------
arm64-defconfig : PASS, 0 errors, 1 warnings, 0 section mismatches
Warnings:
../drivers/tty/serial/amba-pl011.c:190:27: warning: 'vendor_zte' defined but not used [-Wunused-variable]
-------------------------------------------------------------------------------
Passed with no errors, warnings or mismatches:
x86_64-allnoconfig
arm64-allnoconfig
arm-allnoconfig
arm-multi_v5_defconfig
x86_64-defconfig
Tree/Branch: v3.14.68
Git describe: v3.14.68
Commit: 48763742b1 Linux 3.14.68
Build Time: 60 min 36 sec
Passed: 8 / 8 (100.00 %)
Failed: 0 / 8 ( 0.00 %)
Errors: 0
Warnings: 107
Section Mismatches: 0
-------------------------------------------------------------------------------
defconfigs with issues (other than build errors):
2 warnings 0 mismatches : arm64-allnoconfig
71 warnings 0 mismatches : arm64-allmodconfig
13 warnings 0 mismatches : arm-multi_v7_defconfig
4 warnings 0 mismatches : x86_64-defconfig
84 warnings 0 mismatches : arm-allmodconfig
2 warnings 0 mismatches : arm-allnoconfig
2 warnings 0 mismatches : x86_64-allnoconfig
7 warnings 0 mismatches : arm64-defconfig
-------------------------------------------------------------------------------
Warnings Summary: 107
8 /home/broonie/build/linux-stable/drivers/tty/sysrq.c:954:33: warning: array subscript is above array bounds [-Warray-bounds]
6 /home/broonie/build/linux-stable/scripts/sortextable.h:176:3: warning: 'relocs_size' may be used uninitialized in this function [-Wmaybe-uninitialized]
5 /home/broonie/build/linux-stable/net/core/sysctl_net_core.c:26:12: warning: 'one' defined but not used [-Wunused-variable]
4 warning: (ARM_HIGHBANK_CPUFREQ) selects GENERIC_CPUFREQ_CPU0 which has unmet direct dependencies (ARCH_HAS_CPUFREQ && CPU_FREQ && HAVE_CLK && REGULATOR && OF && THERMAL && CPU_THERMAL)
3 /home/broonie/build/linux-stable/net/netfilter/nfnetlink.c:364:14: warning: unused variable 'net' [-Wunused-variable]
3 /home/broonie/build/linux-stable/include/linux/blkdev.h:602:26: warning: switch condition has boolean value [-Wswitch-bool]
3 /home/broonie/build/linux-stable/fs/nfs/nfs4proc.c:2969:10: warning: switch condition has boolean value [-Wswitch-bool]
3 /home/broonie/build/linux-stable/fs/namespace.c:2721:8: warning: 'kernel_type' may be used uninitialized in this function [-Wmaybe-uninitialized]
3 /home/broonie/build/linux-stable/fs/namespace.c:2721:8: warning: 'kernel_dev' may be used uninitialized in this function [-Wmaybe-uninitialized]
2 /home/broonie/build/linux-stable/sound/soc/sh/rcar/adg.c:30:18: warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations]
2 /home/broonie/build/linux-stable/sound/soc/codecs/wm8993.c:1562:22: warning: unused variable 'wm8993' [-Wunused-variable]
2 /home/broonie/build/linux-stable/net/netfilter/nft_reject.c:59:2: warning: enumeration value 'NFT_REJECT_TCP_RST' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_STATE' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_SRC' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_PROTO_SRC' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_PROTO_DST' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_PROTOCOL' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_L3PROTOCOL' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_DST' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_STATUS' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_SRC' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_SECMARK' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_PROTO_SRC' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_PROTO_DST' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_PROTOCOL' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_MARK' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_L3PROTOCOL' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_HELPER' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_EXPIRATION' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_DST' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_DIRECTION' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_STATUS' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_STATE' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_SRC' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_SECMARK' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_PROTO_SRC' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_PROTO_DST' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_PROTOCOL' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_L3PROTOCOL' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_HELPER' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_EXPIRATION' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_DST' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_DIRECTION' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_STATUS' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_STATE' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_SECMARK' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_MARK' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_HELPER' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_EXPIRATION' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_DIRECTION' not handled in switch [-Wswitch]
2 /home/broonie/build/linux-stable/net/netfilter/nft_compat.c:289:9: warning: switch condition has boolean value [-Wswitch-bool]
2 /home/broonie/build/linux-stable/include/linux/dynamic_debug.h:78:3: warning: unsupported argument to '__builtin_return_address'
2 /home/broonie/build/linux-stable/include/linux/compiler-gcc5.h:7:35: warning: large integer implicitly truncated to unsigned type [-Woverflow]
2 /home/broonie/build/linux-stable/fs/namespace.c:2721:6: warning: 'kernel_type' may be used uninitialized in this function [-Wmaybe-uninitialized]
2 /home/broonie/build/linux-stable/fs/namespace.c:2721:6: warning: 'kernel_dev' may be used uninitialized in this function [-Wmaybe-uninitialized]
2 /home/broonie/build/linux-stable/drivers/media/dvb-frontends/stb6100.c:196:22: warning: 'sizeof' on array function parameter 'buf' will return size of 'u8 * {aka unsigned char *}' [-Wsizeof-array-argument]
2 /home/broonie/build/linux-stable/drivers/gpio/gpio-sch311x.c:286:3: warning: ignoring return value of 'gpiochip_remove', declared with attribute warn_unused_result [-Wunused-result]
2 /home/broonie/build/linux-stable/arch/arm64/include/asm/cmpxchg.h:75:3: warning: value computed is not used [-Wunused-value]
1 /home/broonie/build/linux-stable/sound/soc/fsl/imx-audmux.c:70:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
1 /home/broonie/build/linux-stable/sound/soc/fsl/imx-audmux.c:162:7: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
1 /home/broonie/build/linux-stable/sound/pci/oxygen/oxygen_mixer.c:91:43: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses]
1 /home/broonie/build/linux-stable/net/sunrpc/xprtrdma/verbs.c:1774:1: warning: the frame size of 1032 bytes is larger than 1024 bytes [-Wframe-larger-than=]
1 /home/broonie/build/linux-stable/include/uapi/linux/swab.h:13:15: warning: integer overflow in expression [-Woverflow]
1 /home/broonie/build/linux-stable/include/linux/kernel.h:712:17: warning: comparison of distinct pointer types lacks a cast
1 /home/broonie/build/linux-stable/include/linux/kern_levels.h:4:18: warning: format '%li' expects argument of type 'long int', but argument 3 has type 'int' [-Wformat=]
1 /home/broonie/build/linux-stable/drivers/tty/serial/efm32-uart.c:834:20: warning: 'efm32_uart_exit' defined but not used [-Wunused-function]
1 /home/broonie/build/linux-stable/drivers/staging/wlan-ng/prism2fw.c:795:1: warning: the frame size of 1072 bytes is larger than 1024 bytes [-Wframe-larger-than=]
1 /home/broonie/build/linux-stable/drivers/staging/vt6655/iwctl.c:759:1: warning: the frame size of 1280 bytes is larger than 1024 bytes [-Wframe-larger-than=]
1 /home/broonie/build/linux-stable/drivers/staging/vt6655/device_main.c:3253:1: warning: the frame size of 1296 bytes is larger than 1024 bytes [-Wframe-larger-than=]
1 /home/broonie/build/linux-stable/drivers/staging/sm7xxfb/sm7xxfb.c:117:19: warning: 'sm7xx_vga_setup' defined but not used [-Wunused-function]
1 /home/broonie/build/linux-stable/drivers/staging/imx-drm/imx-drm-core.c:87:25: warning: unused variable 'imxdrm' [-Wunused-variable]
1 /home/broonie/build/linux-stable/drivers/staging/dgnc/dgnc_tty.c:583:1: warning: the frame size of 1048 bytes is larger than 1024 bytes [-Wframe-larger-than=]
1 /home/broonie/build/linux-stable/drivers/staging/dgap/dgap_tty.c:658:1: warning: the frame size of 1048 bytes is larger than 1024 bytes [-Wframe-larger-than=]
1 /home/broonie/build/linux-stable/drivers/staging/dgap/dgap_fep5.c:103:1: warning: the frame size of 1032 bytes is larger than 1024 bytes [-Wframe-larger-than=]
1 /home/broonie/build/linux-stable/drivers/staging/dgap/dgap_driver.c:961:1: warning: the frame size of 1032 bytes is larger than 1024 bytes [-Wframe-larger-than=]
1 /home/broonie/build/linux-stable/drivers/staging/bcm/CmHost.c:1440:35: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
1 /home/broonie/build/linux-stable/drivers/staging/bcm/CmHost.c:1426:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
1 /home/broonie/build/linux-stable/drivers/staging/bcm/CmHost.c:1387:39: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
1 /home/broonie/build/linux-stable/drivers/spi/spi-pl022.c:281:31: warning: large integer implicitly truncated to unsigned type [-Woverflow]
1 /home/broonie/build/linux-stable/drivers/spi/spi-atmel.c:1269:19: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
1 /home/broonie/build/linux-stable/drivers/spi/spi-atmel.c:1248:4: warning: format '%x' expects argument of type 'unsigned int', but argument 9 has type 'dma_addr_t {aka long long unsigned int}' [-Wformat=]
1 /home/broonie/build/linux-stable/drivers/spi/spi-atmel.c:1248:4: warning: format '%x' expects argument of type 'unsigned int', but argument 7 has type 'dma_addr_t {aka long long unsigned int}' [-Wformat=]
1 /home/broonie/build/linux-stable/drivers/spi/spi-atmel.c:1028:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
1 /home/broonie/build/linux-stable/drivers/scsi/ips.c:210:2: warning: #warning "This driver has only been tested on the x86/ia64/x86_64 platforms" [-Wcpp]
1 /home/broonie/build/linux-stable/drivers/scsi/be2iscsi/be_main.c:3175:18: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses]
1 /home/broonie/build/linux-stable/drivers/power/reset/xgene-reboot.c:80:17: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
1 /home/broonie/build/linux-stable/drivers/pinctrl/pinctrl-bcm2835.c:1060:2: warning: ignoring return value of 'gpiochip_remove', declared with attribute warn_unused_result [-Wunused-result]
1 /home/broonie/build/linux-stable/drivers/pinctrl/pinctrl-bcm2835.c:1043:3: warning: ignoring return value of 'gpiochip_remove', declared with attribute warn_unused_result [-Wunused-result]
1 /home/broonie/build/linux-stable/drivers/net/wireless/ti/wlcore/spi.c:321:1: warning: the frame size of 8688 bytes is larger than 2048 bytes [-Wframe-larger-than=]
1 /home/broonie/build/linux-stable/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c:1457:8: warning: 'skb' may be used uninitialized in this function [-Wmaybe-uninitialized]
1 /home/broonie/build/linux-stable/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c:467:46: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
1 /home/broonie/build/linux-stable/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c:307:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
1 /home/broonie/build/linux-stable/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c:303:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
1 /home/broonie/build/linux-stable/drivers/net/ethernet/dec/tulip/winbond-840.c:910:2: warning: #warning Processor architecture undefined [-Wcpp]
1 /home/broonie/build/linux-stable/drivers/net/ethernet/amd/nmclan_cs.c:624:3: warning: 'pcmcia_request_exclusive_irq' is deprecated [-Wdeprecated-declarations]
1 /home/broonie/build/linux-stable/drivers/mtd/chips/cfi_cmdset_0020.c:654:1: warning: the frame size of 1192 bytes is larger than 1024 bytes [-Wframe-larger-than=]
1 /home/broonie/build/linux-stable/drivers/mfd/arizona-core.c:509:10: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
1 /home/broonie/build/linux-stable/drivers/input/joystick/analog.c:171:2: warning: #warning Precise timer not defined for this architecture. [-Wcpp]
1 /home/broonie/build/linux-stable/drivers/iio/adc/exynos_adc.c:112:9: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
1 /home/broonie/build/linux-stable/drivers/gpu/drm/nouveau/core/subdev/fb/ramnve0.c:1379:1: warning: the frame size of 1504 bytes is larger than 1024 bytes [-Wframe-larger-than=]
1 /home/broonie/build/linux-stable/drivers/dma/amba-pl08x.c:1665:3: warning: format '%d' expects argument of type 'int', but argument 6 has type 'size_t {aka long unsigned int}' [-Wformat=]
1 /home/broonie/build/linux-stable/drivers/dma/amba-pl08x.c:1665:3: warning: format '%d' expects argument of type 'int', but argument 5 has type 'size_t {aka long unsigned int}' [-Wformat=]
1 /home/broonie/build/linux-stable/drivers/dma/amba-pl08x.c:1043:5: warning: format '%x' expects argument of type 'unsigned int', but argument 5 has type 'size_t {aka long unsigned int}' [-Wformat=]
1 /home/broonie/build/linux-stable/drivers/ata/pata_hpt366.c:383:9: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-array-qualifiers]
1 /home/broonie/build/linux-stable/drivers/ata/pata_hpt366.c:380:9: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-array-qualifiers]
1 /home/broonie/build/linux-stable/drivers/ata/pata_hpt366.c:377:9: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-array-qualifiers]
1 /home/broonie/build/linux-stable/arch/arm/mach-cns3xxx/pcie.c:350:1: warning: the frame size of 1056 bytes is larger than 1024 bytes [-Wframe-larger-than=]
===============================================================================
Detailed per-defconfig build reports below:
-------------------------------------------------------------------------------
arm64-allnoconfig : PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
/home/broonie/build/linux-stable/fs/namespace.c:2721:8: warning: 'kernel_dev' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/fs/namespace.c:2721:8: warning: 'kernel_type' may be used uninitialized in this function [-Wmaybe-uninitialized]
-------------------------------------------------------------------------------
arm64-allmodconfig : PASS, 0 errors, 71 warnings, 0 section mismatches
Warnings:
/home/broonie/build/linux-stable/drivers/dma/amba-pl08x.c:1043:5: warning: format '%x' expects argument of type 'unsigned int', but argument 5 has type 'size_t {aka long unsigned int}' [-Wformat=]
/home/broonie/build/linux-stable/drivers/dma/amba-pl08x.c:1665:3: warning: format '%d' expects argument of type 'int', but argument 5 has type 'size_t {aka long unsigned int}' [-Wformat=]
/home/broonie/build/linux-stable/drivers/dma/amba-pl08x.c:1665:3: warning: format '%d' expects argument of type 'int', but argument 6 has type 'size_t {aka long unsigned int}' [-Wformat=]
/home/broonie/build/linux-stable/sound/soc/codecs/wm8993.c:1562:22: warning: unused variable 'wm8993' [-Wunused-variable]
/home/broonie/build/linux-stable/sound/soc/fsl/imx-audmux.c:70:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
/home/broonie/build/linux-stable/sound/soc/fsl/imx-audmux.c:162:7: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
/home/broonie/build/linux-stable/drivers/gpio/gpio-sch311x.c:286:3: warning: ignoring return value of 'gpiochip_remove', declared with attribute warn_unused_result [-Wunused-result]
/home/broonie/build/linux-stable/net/core/sysctl_net_core.c:26:12: warning: 'one' defined but not used [-Wunused-variable]
/home/broonie/build/linux-stable/drivers/iio/adc/exynos_adc.c:112:9: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
/home/broonie/build/linux-stable/drivers/input/joystick/analog.c:171:2: warning: #warning Precise timer not defined for this architecture. [-Wcpp]
/home/broonie/build/linux-stable/drivers/media/dvb-frontends/stb6100.c:196:22: warning: 'sizeof' on array function parameter 'buf' will return size of 'u8 * {aka unsigned char *}' [-Wsizeof-array-argument]
/home/broonie/build/linux-stable/drivers/mfd/arizona-core.c:509:10: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
/home/broonie/build/linux-stable/include/linux/blkdev.h:602:26: warning: switch condition has boolean value [-Wswitch-bool]
/home/broonie/build/linux-stable/drivers/power/reset/xgene-reboot.c:80:17: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
/home/broonie/build/linux-stable/fs/nfs/nfs4proc.c:2969:10: warning: switch condition has boolean value [-Wswitch-bool]
/home/broonie/build/linux-stable/net/netfilter/nfnetlink.c:364:14: warning: unused variable 'net' [-Wunused-variable]
/home/broonie/build/linux-stable/net/netfilter/nft_compat.c:289:9: warning: switch condition has boolean value [-Wswitch-bool]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_DIRECTION' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_STATUS' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_MARK' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_SECMARK' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_EXPIRATION' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_HELPER' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_L3PROTOCOL' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_SRC' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_DST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_PROTOCOL' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_PROTO_SRC' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_PROTO_DST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_STATE' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_L3PROTOCOL' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_SRC' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_DST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_PROTOCOL' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_PROTO_SRC' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_PROTO_DST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_STATE' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_DIRECTION' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_STATUS' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_MARK' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_SECMARK' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_EXPIRATION' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_HELPER' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_STATE' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_DIRECTION' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_STATUS' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_SECMARK' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_EXPIRATION' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_HELPER' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_L3PROTOCOL' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_SRC' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_DST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_PROTOCOL' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_PROTO_SRC' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_PROTO_DST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_reject.c:59:2: warning: enumeration value 'NFT_REJECT_TCP_RST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/drivers/spi/spi-atmel.c:1028:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
/home/broonie/build/linux-stable/drivers/spi/spi-atmel.c:1248:4: warning: format '%x' expects argument of type 'unsigned int', but argument 7 has type 'dma_addr_t {aka long long unsigned int}' [-Wformat=]
/home/broonie/build/linux-stable/drivers/spi/spi-atmel.c:1248:4: warning: format '%x' expects argument of type 'unsigned int', but argument 9 has type 'dma_addr_t {aka long long unsigned int}' [-Wformat=]
/home/broonie/build/linux-stable/drivers/spi/spi-atmel.c:1269:19: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
/home/broonie/build/linux-stable/drivers/spi/spi-pl022.c:281:31: warning: large integer implicitly truncated to unsigned type [-Woverflow]
/home/broonie/build/linux-stable/drivers/staging/bcm/CmHost.c:1387:39: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
/home/broonie/build/linux-stable/drivers/staging/bcm/CmHost.c:1426:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
/home/broonie/build/linux-stable/drivers/staging/bcm/CmHost.c:1440:35: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
/home/broonie/build/linux-stable/arch/arm64/include/asm/cmpxchg.h:75:3: warning: value computed is not used [-Wunused-value]
/home/broonie/build/linux-stable/arch/arm64/include/asm/cmpxchg.h:75:3: warning: value computed is not used [-Wunused-value]
/home/broonie/build/linux-stable/drivers/tty/sysrq.c:954:33: warning: array subscript is above array bounds [-Warray-bounds]
/home/broonie/build/linux-stable/drivers/tty/sysrq.c:954:33: warning: array subscript is above array bounds [-Warray-bounds]
/home/broonie/build/linux-stable/drivers/net/wireless/ti/wlcore/spi.c:321:1: warning: the frame size of 8688 bytes is larger than 2048 bytes [-Wframe-larger-than=]
/home/broonie/build/linux-stable/include/linux/compiler-gcc5.h:7:35: warning: large integer implicitly truncated to unsigned type [-Woverflow]
/home/broonie/build/linux-stable/include/linux/compiler-gcc5.h:7:35: warning: large integer implicitly truncated to unsigned type [-Woverflow]
-------------------------------------------------------------------------------
arm-multi_v7_defconfig : PASS, 0 errors, 13 warnings, 0 section mismatches
Warnings:
warning: (ARM_HIGHBANK_CPUFREQ) selects GENERIC_CPUFREQ_CPU0 which has unmet direct dependencies (ARCH_HAS_CPUFREQ && CPU_FREQ && HAVE_CLK && REGULATOR && OF && THERMAL && CPU_THERMAL)
warning: (ARM_HIGHBANK_CPUFREQ) selects GENERIC_CPUFREQ_CPU0 which has unmet direct dependencies (ARCH_HAS_CPUFREQ && CPU_FREQ && HAVE_CLK && REGULATOR && OF && THERMAL && CPU_THERMAL)
warning: (ARM_HIGHBANK_CPUFREQ) selects GENERIC_CPUFREQ_CPU0 which has unmet direct dependencies (ARCH_HAS_CPUFREQ && CPU_FREQ && HAVE_CLK && REGULATOR && OF && THERMAL && CPU_THERMAL)
warning: (ARM_HIGHBANK_CPUFREQ) selects GENERIC_CPUFREQ_CPU0 which has unmet direct dependencies (ARCH_HAS_CPUFREQ && CPU_FREQ && HAVE_CLK && REGULATOR && OF && THERMAL && CPU_THERMAL)
/home/broonie/build/linux-stable/scripts/sortextable.h:176:3: warning: 'relocs_size' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/scripts/sortextable.h:176:3: warning: 'relocs_size' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/fs/namespace.c:2721:6: warning: 'kernel_dev' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/fs/namespace.c:2721:6: warning: 'kernel_type' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/net/core/sysctl_net_core.c:26:12: warning: 'one' defined but not used [-Wunused-variable]
/home/broonie/build/linux-stable/fs/nfs/nfs4proc.c:2969:10: warning: switch condition has boolean value [-Wswitch-bool]
/home/broonie/build/linux-stable/drivers/tty/sysrq.c:954:33: warning: array subscript is above array bounds [-Warray-bounds]
/home/broonie/build/linux-stable/drivers/tty/sysrq.c:954:33: warning: array subscript is above array bounds [-Warray-bounds]
/home/broonie/build/linux-stable/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c:1457:8: warning: 'skb' may be used uninitialized in this function [-Wmaybe-uninitialized]
-------------------------------------------------------------------------------
x86_64-defconfig : PASS, 0 errors, 4 warnings, 0 section mismatches
Warnings:
/home/broonie/build/linux-stable/fs/namespace.c:2721:8: warning: 'kernel_dev' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/fs/namespace.c:2721:8: warning: 'kernel_type' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/net/core/sysctl_net_core.c:26:12: warning: 'one' defined but not used [-Wunused-variable]
/home/broonie/build/linux-stable/net/netfilter/nfnetlink.c:364:14: warning: unused variable 'net' [-Wunused-variable]
-------------------------------------------------------------------------------
arm-allmodconfig : PASS, 0 errors, 84 warnings, 0 section mismatches
Warnings:
/home/broonie/build/linux-stable/arch/arm/mach-cns3xxx/pcie.c:350:1: warning: the frame size of 1056 bytes is larger than 1024 bytes [-Wframe-larger-than=]
/home/broonie/build/linux-stable/drivers/ata/pata_hpt366.c:377:9: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-array-qualifiers]
/home/broonie/build/linux-stable/drivers/ata/pata_hpt366.c:380:9: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-array-qualifiers]
/home/broonie/build/linux-stable/drivers/ata/pata_hpt366.c:383:9: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-array-qualifiers]
/home/broonie/build/linux-stable/include/linux/blkdev.h:602:26: warning: switch condition has boolean value [-Wswitch-bool]
/home/broonie/build/linux-stable/net/core/sysctl_net_core.c:26:12: warning: 'one' defined but not used [-Wunused-variable]
/home/broonie/build/linux-stable/sound/pci/oxygen/oxygen_mixer.c:91:43: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses]
/home/broonie/build/linux-stable/drivers/gpio/gpio-sch311x.c:286:3: warning: ignoring return value of 'gpiochip_remove', declared with attribute warn_unused_result [-Wunused-result]
/home/broonie/build/linux-stable/fs/nfs/nfs4proc.c:2969:10: warning: switch condition has boolean value [-Wswitch-bool]
/home/broonie/build/linux-stable/sound/soc/codecs/wm8993.c:1562:22: warning: unused variable 'wm8993' [-Wunused-variable]
/home/broonie/build/linux-stable/drivers/gpu/drm/nouveau/core/subdev/fb/ramnve0.c:1379:1: warning: the frame size of 1504 bytes is larger than 1024 bytes [-Wframe-larger-than=]
/home/broonie/build/linux-stable/sound/soc/sh/rcar/adg.c:30:18: warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations]
/home/broonie/build/linux-stable/sound/soc/sh/rcar/adg.c:30:18: warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations]
/home/broonie/build/linux-stable/include/linux/kernel.h:712:17: warning: comparison of distinct pointer types lacks a cast
/home/broonie/build/linux-stable/net/netfilter/nfnetlink.c:364:14: warning: unused variable 'net' [-Wunused-variable]
/home/broonie/build/linux-stable/net/netfilter/nft_compat.c:289:9: warning: switch condition has boolean value [-Wswitch-bool]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_DIRECTION' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_STATUS' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_MARK' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_SECMARK' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_EXPIRATION' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_HELPER' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_L3PROTOCOL' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_SRC' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_DST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_PROTOCOL' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_PROTO_SRC' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:49:2: warning: enumeration value 'NFT_CT_PROTO_DST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_STATE' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_L3PROTOCOL' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_SRC' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_DST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_PROTOCOL' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_PROTO_SRC' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:64:2: warning: enumeration value 'NFT_CT_PROTO_DST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_STATE' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_DIRECTION' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_STATUS' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_MARK' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_SECMARK' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_EXPIRATION' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:103:2: warning: enumeration value 'NFT_CT_HELPER' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_STATE' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_DIRECTION' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_STATUS' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_SECMARK' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_EXPIRATION' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_HELPER' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_L3PROTOCOL' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_SRC' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_DST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_PROTOCOL' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_PROTO_SRC' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_ct.c:146:2: warning: enumeration value 'NFT_CT_PROTO_DST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/net/netfilter/nft_reject.c:59:2: warning: enumeration value 'NFT_REJECT_TCP_RST' not handled in switch [-Wswitch]
/home/broonie/build/linux-stable/include/linux/dynamic_debug.h:78:3: warning: unsupported argument to '__builtin_return_address'
/home/broonie/build/linux-stable/include/linux/dynamic_debug.h:78:3: warning: unsupported argument to '__builtin_return_address'
/home/broonie/build/linux-stable/net/sunrpc/xprtrdma/verbs.c:1774:1: warning: the frame size of 1032 bytes is larger than 1024 bytes [-Wframe-larger-than=]
/home/broonie/build/linux-stable/drivers/media/dvb-frontends/stb6100.c:196:22: warning: 'sizeof' on array function parameter 'buf' will return size of 'u8 * {aka unsigned char *}' [-Wsizeof-array-argument]
/home/broonie/build/linux-stable/include/linux/kern_levels.h:4:18: warning: format '%li' expects argument of type 'long int', but argument 3 has type 'int' [-Wformat=]
/home/broonie/build/linux-stable/drivers/mtd/chips/cfi_cmdset_0020.c:654:1: warning: the frame size of 1192 bytes is larger than 1024 bytes [-Wframe-larger-than=]
/home/broonie/build/linux-stable/include/linux/blkdev.h:602:26: warning: switch condition has boolean value [-Wswitch-bool]
/home/broonie/build/linux-stable/drivers/pinctrl/pinctrl-bcm2835.c:1060:2: warning: ignoring return value of 'gpiochip_remove', declared with attribute warn_unused_result [-Wunused-result]
/home/broonie/build/linux-stable/drivers/pinctrl/pinctrl-bcm2835.c:1043:3: warning: ignoring return value of 'gpiochip_remove', declared with attribute warn_unused_result [-Wunused-result]
/home/broonie/build/linux-stable/drivers/net/ethernet/amd/nmclan_cs.c:624:3: warning: 'pcmcia_request_exclusive_irq' is deprecated [-Wdeprecated-declarations]
/home/broonie/build/linux-stable/drivers/net/ethernet/dec/tulip/winbond-840.c:910:2: warning: #warning Processor architecture undefined [-Wcpp]
/home/broonie/build/linux-stable/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c:303:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
/home/broonie/build/linux-stable/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c:307:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
/home/broonie/build/linux-stable/drivers/net/ethernet/mellanox/mlx5/core/debugfs.c:467:46: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
/home/broonie/build/linux-stable/drivers/scsi/be2iscsi/be_main.c:3175:18: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses]
/home/broonie/build/linux-stable/drivers/scsi/ips.c:210:2: warning: #warning "This driver has only been tested on the x86/ia64/x86_64 platforms" [-Wcpp]
/home/broonie/build/linux-stable/drivers/staging/dgap/dgap_driver.c:961:1: warning: the frame size of 1032 bytes is larger than 1024 bytes [-Wframe-larger-than=]
/home/broonie/build/linux-stable/drivers/staging/dgap/dgap_fep5.c:103:1: warning: the frame size of 1032 bytes is larger than 1024 bytes [-Wframe-larger-than=]
/home/broonie/build/linux-stable/drivers/staging/dgap/dgap_tty.c:658:1: warning: the frame size of 1048 bytes is larger than 1024 bytes [-Wframe-larger-than=]
/home/broonie/build/linux-stable/drivers/staging/dgnc/dgnc_tty.c:583:1: warning: the frame size of 1048 bytes is larger than 1024 bytes [-Wframe-larger-than=]
/home/broonie/build/linux-stable/drivers/tty/sysrq.c:954:33: warning: array subscript is above array bounds [-Warray-bounds]
/home/broonie/build/linux-stable/drivers/tty/sysrq.c:954:33: warning: array subscript is above array bounds [-Warray-bounds]
/home/broonie/build/linux-stable/drivers/tty/serial/efm32-uart.c:834:20: warning: 'efm32_uart_exit' defined but not used [-Wunused-function]
/home/broonie/build/linux-stable/include/uapi/linux/swab.h:13:15: warning: integer overflow in expression [-Woverflow]
/home/broonie/build/linux-stable/drivers/staging/imx-drm/imx-drm-core.c:87:25: warning: unused variable 'imxdrm' [-Wunused-variable]
/home/broonie/build/linux-stable/drivers/staging/sm7xxfb/sm7xxfb.c:117:19: warning: 'sm7xx_vga_setup' defined but not used [-Wunused-function]
/home/broonie/build/linux-stable/drivers/staging/vt6655/device_main.c:3253:1: warning: the frame size of 1296 bytes is larger than 1024 bytes [-Wframe-larger-than=]
/home/broonie/build/linux-stable/drivers/staging/vt6655/iwctl.c:759:1: warning: the frame size of 1280 bytes is larger than 1024 bytes [-Wframe-larger-than=]
/home/broonie/build/linux-stable/drivers/staging/wlan-ng/prism2fw.c:795:1: warning: the frame size of 1072 bytes is larger than 1024 bytes [-Wframe-larger-than=]
-------------------------------------------------------------------------------
arm-allnoconfig : PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
/home/broonie/build/linux-stable/fs/namespace.c:2721:6: warning: 'kernel_dev' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/fs/namespace.c:2721:6: warning: 'kernel_type' may be used uninitialized in this function [-Wmaybe-uninitialized]
-------------------------------------------------------------------------------
x86_64-allnoconfig : PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
/home/broonie/build/linux-stable/scripts/sortextable.h:176:3: warning: 'relocs_size' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/scripts/sortextable.h:176:3: warning: 'relocs_size' may be used uninitialized in this function [-Wmaybe-uninitialized]
-------------------------------------------------------------------------------
arm64-defconfig : PASS, 0 errors, 7 warnings, 0 section mismatches
Warnings:
/home/broonie/build/linux-stable/scripts/sortextable.h:176:3: warning: 'relocs_size' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/scripts/sortextable.h:176:3: warning: 'relocs_size' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/fs/namespace.c:2721:8: warning: 'kernel_dev' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/fs/namespace.c:2721:8: warning: 'kernel_type' may be used uninitialized in this function [-Wmaybe-uninitialized]
/home/broonie/build/linux-stable/net/core/sysctl_net_core.c:26:12: warning: 'one' defined but not used [-Wunused-variable]
/home/broonie/build/linux-stable/drivers/tty/sysrq.c:954:33: warning: array subscript is above array bounds [-Warray-bounds]
/home/broonie/build/linux-stable/drivers/tty/sysrq.c:954:33: warning: array subscript is above array bounds [-Warray-bounds]
-------------------------------------------------------------------------------
Passed with no errors, warnings or mismatches:
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
arch_pick_mmap_layout is only called by fs/exec.c which is always built into
kernel, it looks the EXPORT_SYMBOL_GPL is pointless and no architectures export
it other than ARM64.
Signed-off-by: Yang Shi <yang.shi(a)linaro.org>
---
arch/arm64/mm/mmap.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/arch/arm64/mm/mmap.c b/arch/arm64/mm/mmap.c
index 232f787..01c1717 100644
--- a/arch/arm64/mm/mmap.c
+++ b/arch/arm64/mm/mmap.c
@@ -95,8 +95,6 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
mm->get_unmapped_area = arch_get_unmapped_area_topdown;
}
}
-EXPORT_SYMBOL_GPL(arch_pick_mmap_layout);
-
/*
* You really shouldn't be using read() or write() on /dev/mem. This might go
--
2.0.2
Hi Folks,
Some LLVM debugger developers would like to add unaligned as well as
scoped watchpoints and it seems they need some additional support in
the kernel to do so.
I'm not claiming to understand what they need, since GDB already
supports it, it may be possible to do it with the current kernel.
However, if there's a better way to do it, than I think it may be
worth checking with them. If not, I'd appreciate if someone could help
them understanding how they could do it with the current structure.
https://bugzilla.kernel.org/show_bug.cgi?id=117621
Both unaligned and scoped watchpoints require the same level of
functionality: watch over a larger area and defer to a software
implementation (table look-up) to see if it's a true or false
positive.
For unaligned watchpoints, we'd need to watch over the area
+-alignment then factor out the padding. For scoped watchpoints, we
need to watch over the stack and always check if the variable is in
scope or not by comparing it to the stack pointer / frame pointer /
base pointer.
I don't think either of them would have to be implemented in the
kernel itself, I'm expecting this to be in the debuggers code, but
they may need additional logic in the kernel, which Pavel and Omair
should know better.
This email is so that I don't prematurely add irrelevant people to the bug. :)
Thanks!
--renato