diff options
| author | David S. Miller <davem@davemloft.net> | 2015-03-20 18:51:09 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-03-20 18:51:09 -0400 |
| commit | 0fa74a4be48e0f810d3dc6ddbc9d6ac7e86cbee8 (patch) | |
| tree | ccfee93ede4e36d6d355e00e485d3d1c0fec0bdd /drivers/of | |
| parent | 6626af692692b52c8f9e20ad8201a3255e5ab25b (diff) | |
| parent | 4de930efc23b92ddf88ce91c405ee645fe6e27ea (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/emulex/benet/be_main.c
net/core/sysctl_net_core.c
net/ipv4/inet_diag.c
The be_main.c conflict resolution was really tricky. The conflict
hunks generated by GIT were very unhelpful, to say the least. It
split functions in half and moved them around, when the real actual
conflict only existed solely inside of one function, that being
be_map_pci_bars().
So instead, to resolve this, I checked out be_main.c from the top
of net-next, then I applied the be_main.c changes from 'net' since
the last time I merged. And this worked beautifully.
The inet_diag.c and sysctl_net_core.c conflicts were simple
overlapping changes, and were easily to resolve.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/of')
| -rw-r--r-- | drivers/of/Kconfig | 3 | ||||
| -rw-r--r-- | drivers/of/base.c | 27 | ||||
| -rw-r--r-- | drivers/of/overlay.c | 3 | ||||
| -rw-r--r-- | drivers/of/unittest.c | 28 |
4 files changed, 40 insertions, 21 deletions
diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index 38d1c51f58b1..7bcaeec876c0 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig | |||
| @@ -84,8 +84,7 @@ config OF_RESOLVE | |||
| 84 | bool | 84 | bool |
| 85 | 85 | ||
| 86 | config OF_OVERLAY | 86 | config OF_OVERLAY |
| 87 | bool | 87 | bool "Device Tree overlays" |
| 88 | depends on OF | ||
| 89 | select OF_DYNAMIC | 88 | select OF_DYNAMIC |
| 90 | select OF_RESOLVE | 89 | select OF_RESOLVE |
| 91 | 90 | ||
diff --git a/drivers/of/base.c b/drivers/of/base.c index 0a8aeb8523fe..adb8764861c0 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c | |||
| @@ -714,16 +714,17 @@ static struct device_node *__of_find_node_by_path(struct device_node *parent, | |||
| 714 | const char *path) | 714 | const char *path) |
| 715 | { | 715 | { |
| 716 | struct device_node *child; | 716 | struct device_node *child; |
| 717 | int len = strchrnul(path, '/') - path; | 717 | int len; |
| 718 | int term; | 718 | const char *end; |
| 719 | 719 | ||
| 720 | end = strchr(path, ':'); | ||
| 721 | if (!end) | ||
| 722 | end = strchrnul(path, '/'); | ||
| 723 | |||
| 724 | len = end - path; | ||
| 720 | if (!len) | 725 | if (!len) |
| 721 | return NULL; | 726 | return NULL; |
| 722 | 727 | ||
| 723 | term = strchrnul(path, ':') - path; | ||
| 724 | if (term < len) | ||
| 725 | len = term; | ||
| 726 | |||
| 727 | __for_each_child_of_node(parent, child) { | 728 | __for_each_child_of_node(parent, child) { |
| 728 | const char *name = strrchr(child->full_name, '/'); | 729 | const char *name = strrchr(child->full_name, '/'); |
| 729 | if (WARN(!name, "malformed device_node %s\n", child->full_name)) | 730 | if (WARN(!name, "malformed device_node %s\n", child->full_name)) |
| @@ -768,8 +769,12 @@ struct device_node *of_find_node_opts_by_path(const char *path, const char **opt | |||
| 768 | 769 | ||
| 769 | /* The path could begin with an alias */ | 770 | /* The path could begin with an alias */ |
| 770 | if (*path != '/') { | 771 | if (*path != '/') { |
| 771 | char *p = strchrnul(path, '/'); | 772 | int len; |
| 772 | int len = separator ? separator - path : p - path; | 773 | const char *p = separator; |
| 774 | |||
| 775 | if (!p) | ||
| 776 | p = strchrnul(path, '/'); | ||
| 777 | len = p - path; | ||
| 773 | 778 | ||
| 774 | /* of_aliases must not be NULL */ | 779 | /* of_aliases must not be NULL */ |
| 775 | if (!of_aliases) | 780 | if (!of_aliases) |
| @@ -794,6 +799,8 @@ struct device_node *of_find_node_opts_by_path(const char *path, const char **opt | |||
| 794 | path++; /* Increment past '/' delimiter */ | 799 | path++; /* Increment past '/' delimiter */ |
| 795 | np = __of_find_node_by_path(np, path); | 800 | np = __of_find_node_by_path(np, path); |
| 796 | path = strchrnul(path, '/'); | 801 | path = strchrnul(path, '/'); |
| 802 | if (separator && separator < path) | ||
| 803 | break; | ||
| 797 | } | 804 | } |
| 798 | raw_spin_unlock_irqrestore(&devtree_lock, flags); | 805 | raw_spin_unlock_irqrestore(&devtree_lock, flags); |
| 799 | return np; | 806 | return np; |
| @@ -1886,8 +1893,10 @@ void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)) | |||
| 1886 | name = of_get_property(of_chosen, "linux,stdout-path", NULL); | 1893 | name = of_get_property(of_chosen, "linux,stdout-path", NULL); |
| 1887 | if (IS_ENABLED(CONFIG_PPC) && !name) | 1894 | if (IS_ENABLED(CONFIG_PPC) && !name) |
| 1888 | name = of_get_property(of_aliases, "stdout", NULL); | 1895 | name = of_get_property(of_aliases, "stdout", NULL); |
| 1889 | if (name) | 1896 | if (name) { |
| 1890 | of_stdout = of_find_node_opts_by_path(name, &of_stdout_options); | 1897 | of_stdout = of_find_node_opts_by_path(name, &of_stdout_options); |
| 1898 | add_preferred_console("stdout-path", 0, NULL); | ||
| 1899 | } | ||
| 1891 | } | 1900 | } |
| 1892 | 1901 | ||
| 1893 | if (!of_aliases) | 1902 | if (!of_aliases) |
diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c index 352b4f28f82c..dee9270ba547 100644 --- a/drivers/of/overlay.c +++ b/drivers/of/overlay.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/string.h> | 19 | #include <linux/string.h> |
| 20 | #include <linux/slab.h> | 20 | #include <linux/slab.h> |
| 21 | #include <linux/err.h> | 21 | #include <linux/err.h> |
| 22 | #include <linux/idr.h> | ||
| 22 | 23 | ||
| 23 | #include "of_private.h" | 24 | #include "of_private.h" |
| 24 | 25 | ||
| @@ -85,7 +86,7 @@ static int of_overlay_apply_single_device_node(struct of_overlay *ov, | |||
| 85 | struct device_node *target, struct device_node *child) | 86 | struct device_node *target, struct device_node *child) |
| 86 | { | 87 | { |
| 87 | const char *cname; | 88 | const char *cname; |
| 88 | struct device_node *tchild, *grandchild; | 89 | struct device_node *tchild; |
| 89 | int ret = 0; | 90 | int ret = 0; |
| 90 | 91 | ||
| 91 | cname = kbasename(child->full_name); | 92 | cname = kbasename(child->full_name); |
diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c index 0cf9a236d438..aba8946cac46 100644 --- a/drivers/of/unittest.c +++ b/drivers/of/unittest.c | |||
| @@ -92,6 +92,11 @@ static void __init of_selftest_find_node_by_name(void) | |||
| 92 | "option path test failed\n"); | 92 | "option path test failed\n"); |
| 93 | of_node_put(np); | 93 | of_node_put(np); |
| 94 | 94 | ||
| 95 | np = of_find_node_opts_by_path("/testcase-data:test/option", &options); | ||
| 96 | selftest(np && !strcmp("test/option", options), | ||
| 97 | "option path test, subcase #1 failed\n"); | ||
| 98 | of_node_put(np); | ||
| 99 | |||
| 95 | np = of_find_node_opts_by_path("/testcase-data:testoption", NULL); | 100 | np = of_find_node_opts_by_path("/testcase-data:testoption", NULL); |
| 96 | selftest(np, "NULL option path test failed\n"); | 101 | selftest(np, "NULL option path test failed\n"); |
| 97 | of_node_put(np); | 102 | of_node_put(np); |
| @@ -102,6 +107,12 @@ static void __init of_selftest_find_node_by_name(void) | |||
| 102 | "option alias path test failed\n"); | 107 | "option alias path test failed\n"); |
| 103 | of_node_put(np); | 108 | of_node_put(np); |
| 104 | 109 | ||
| 110 | np = of_find_node_opts_by_path("testcase-alias:test/alias/option", | ||
| 111 | &options); | ||
| 112 | selftest(np && !strcmp("test/alias/option", options), | ||
| 113 | "option alias path test, subcase #1 failed\n"); | ||
| 114 | of_node_put(np); | ||
| 115 | |||
| 105 | np = of_find_node_opts_by_path("testcase-alias:testaliasoption", NULL); | 116 | np = of_find_node_opts_by_path("testcase-alias:testaliasoption", NULL); |
| 106 | selftest(np, "NULL option alias path test failed\n"); | 117 | selftest(np, "NULL option alias path test failed\n"); |
| 107 | of_node_put(np); | 118 | of_node_put(np); |
| @@ -378,9 +389,9 @@ static void __init of_selftest_property_string(void) | |||
| 378 | rc = of_property_match_string(np, "phandle-list-names", "first"); | 389 | rc = of_property_match_string(np, "phandle-list-names", "first"); |
| 379 | selftest(rc == 0, "first expected:0 got:%i\n", rc); | 390 | selftest(rc == 0, "first expected:0 got:%i\n", rc); |
| 380 | rc = of_property_match_string(np, "phandle-list-names", "second"); | 391 | rc = of_property_match_string(np, "phandle-list-names", "second"); |
| 381 | selftest(rc == 1, "second expected:0 got:%i\n", rc); | 392 | selftest(rc == 1, "second expected:1 got:%i\n", rc); |
| 382 | rc = of_property_match_string(np, "phandle-list-names", "third"); | 393 | rc = of_property_match_string(np, "phandle-list-names", "third"); |
| 383 | selftest(rc == 2, "third expected:0 got:%i\n", rc); | 394 | selftest(rc == 2, "third expected:2 got:%i\n", rc); |
| 384 | rc = of_property_match_string(np, "phandle-list-names", "fourth"); | 395 | rc = of_property_match_string(np, "phandle-list-names", "fourth"); |
| 385 | selftest(rc == -ENODATA, "unmatched string; rc=%i\n", rc); | 396 | selftest(rc == -ENODATA, "unmatched string; rc=%i\n", rc); |
| 386 | rc = of_property_match_string(np, "missing-property", "blah"); | 397 | rc = of_property_match_string(np, "missing-property", "blah"); |
| @@ -478,7 +489,6 @@ static void __init of_selftest_changeset(void) | |||
| 478 | struct device_node *n1, *n2, *n21, *nremove, *parent, *np; | 489 | struct device_node *n1, *n2, *n21, *nremove, *parent, *np; |
| 479 | struct of_changeset chgset; | 490 | struct of_changeset chgset; |
| 480 | 491 | ||
| 481 | of_changeset_init(&chgset); | ||
| 482 | n1 = __of_node_dup(NULL, "/testcase-data/changeset/n1"); | 492 | n1 = __of_node_dup(NULL, "/testcase-data/changeset/n1"); |
| 483 | selftest(n1, "testcase setup failure\n"); | 493 | selftest(n1, "testcase setup failure\n"); |
| 484 | n2 = __of_node_dup(NULL, "/testcase-data/changeset/n2"); | 494 | n2 = __of_node_dup(NULL, "/testcase-data/changeset/n2"); |
| @@ -979,7 +989,7 @@ static int of_path_platform_device_exists(const char *path) | |||
| 979 | return pdev != NULL; | 989 | return pdev != NULL; |
| 980 | } | 990 | } |
| 981 | 991 | ||
| 982 | #if IS_ENABLED(CONFIG_I2C) | 992 | #if IS_BUILTIN(CONFIG_I2C) |
| 983 | 993 | ||
| 984 | /* get the i2c client device instantiated at the path */ | 994 | /* get the i2c client device instantiated at the path */ |
| 985 | static struct i2c_client *of_path_to_i2c_client(const char *path) | 995 | static struct i2c_client *of_path_to_i2c_client(const char *path) |
| @@ -1445,7 +1455,7 @@ static void of_selftest_overlay_11(void) | |||
| 1445 | return; | 1455 | return; |
| 1446 | } | 1456 | } |
| 1447 | 1457 | ||
| 1448 | #if IS_ | ||
