On 3/20/19 3:49 AM, Mukesh Ojha wrote:
Existing check of `fn` against NULL inside OF match tableThe check is not redundant and does serve a purpose.
is redundant. Remove the check.
Signed-off-by: Mukesh Ojha <mojha@xxxxxxxxxxxxxx>
Cc: Rob Herring <robh@xxxxxxxxxx>
Cc: Frank Rowand <frowand.list@xxxxxxxxx>
Cc: Pantelis Antoniou <pantelis.antoniou@xxxxxxxxxxxx>
Cc: devicetree@xxxxxxxxxxxxxxx
---
include/linux/of.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/of.h b/include/linux/of.h
index e240992..b86c00a 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -1283,13 +1283,13 @@ static inline int of_get_available_child_count(const struct device_node *np)
static const struct of_device_id __of_table_##name \
__used __section(__##table##_of_table) \
= { .compatible = compat, \
- .data = (fn == (fn_type)NULL) ? fn : fn }
+ .data = fn }
#else
#define _OF_DECLARE(table, name, compat, fn, fn_type) \
static const struct of_device_id __of_table_##name \
__attribute__((unused)) \
= { .compatible = compat, \
- .data = (fn == (fn_type)NULL) ? fn : fn }
+ .data = fn }
#endif
typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
The purpose is not very obvious on the surface, but it is checking that
the function fn() is of the proper type.
An example of a compiler warning with a bad function type is created
by applying the following patch:
drivers/of/unittest.c:62:1: warning: comparison of distinct pointer types lacks a cast [enabled by default]
Note that you need to have CONFIG_UNITTEST enabled to compile unittest.c.
Line 62 is
OF_DECLARE_1(__unittest_of_table, unittest_setup_2_bad, "unittest_compat",
---
drivers/of/unittest.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
Index: b/drivers/of/unittest.c
===================================================================
--- a/drivers/of/unittest.c
+++ b/drivers/of/unittest.c
@@ -45,6 +45,23 @@ static struct unittest_results {
failed; \
})
+struct of_device_id __unittest_of_table;
+
+static void __init unittest_setup_1_good(struct device_node *np)
+{
+}
+
+static void __init unittest_setup_2_bad(struct device_node *np_1,
+ struct device_node *np_2)
+{
+}
+
+OF_DECLARE_1(__unittest_of_table, unittest_setup_1_good, "unittest_compat",
+ unittest_setup_1_good);
+
+OF_DECLARE_1(__unittest_of_table, unittest_setup_2_bad, "unittest_compat",
+ unittest_setup_2_bad);
+
static void __init of_unittest_find_node_by_name(void)
{
struct device_node *np;