NXP P50XX/e5500: SMP doesn't work anymore with the latest Git kernel
Benjamin Herrenschmidt
benh at kernel.crashing.org
Tue Oct 30 12:59:14 AEDT 2018
On Tue, 2018-10-30 at 02:42 +0100, Christian Zigotzky wrote:
> OF patch for the latest Git kernel: http://www.xenosoft.de/of_v2.patch
This just seems to revert a whole bunch of stuff, not really the right
way to go. Why is of_get_next_cpu_node() not finding your CPUs ? There
must be something wrong with the device-tree...
> ----------------------------- of_v2.patch -----------------------------
>
> diff -rupN a/drivers/of/base.c b/drivers/of/base.c
> --- a/drivers/of/base.c 2018-10-30 02:19:30.827089495 +0100
> +++ b/drivers/of/base.c 2018-10-30 02:18:51.666856715 +0100
> @@ -395,7 +395,7 @@ struct device_node *of_get_cpu_node(int
> {
> struct device_node *cpun;
>
> - for_each_of_cpu_node(cpun) {
> + for_each_node_by_type(cpun, "cpu") {
> if (arch_find_n_match_cpu_physical_id(cpun, cpu, thread))
> return cpun;
> }
> @@ -750,45 +750,6 @@ struct device_node *of_get_next_availabl
> EXPORT_SYMBOL(of_get_next_available_child);
>
> /**
> - * of_get_next_cpu_node - Iterate on cpu nodes
> - * @prev: previous child of the /cpus node, or NULL to get first
> - *
> - * Returns a cpu node pointer with refcount incremented, use
> of_node_put()
> - * on it when done. Returns NULL when prev is the last child. Decrements
> - * the refcount of prev.
> - */
> -struct device_node *of_get_next_cpu_node(struct device_node *prev)
> -{
> - struct device_node *next = NULL;
> - unsigned long flags;
> - struct device_node *node;
> -
> - if (!prev)
> - node = of_find_node_by_path("/cpus");
> -
> - raw_spin_lock_irqsave(&devtree_lock, flags);
> - if (prev)
> - next = prev->sibling;
> - else if (node) {
> - next = node->child;
> - of_node_put(node);
> - }
> - for (; next; next = next->sibling) {
> - if (!(of_node_name_eq(next, "cpu") ||
> - (next->type && !of_node_cmp(next->type, "cpu"))))
> - continue;
> - if (!__of_device_is_available(next))
> - continue;
> - if (of_node_get(next))
> - break;
> - }
> - of_node_put(prev);
> - raw_spin_unlock_irqrestore(&devtree_lock, flags);
> - return next;
> -}
> -EXPORT_SYMBOL(of_get_next_cpu_node);
> -
> -/**
> * of_get_compatible_child - Find compatible child node
> * @parent: parent node
> * @compatible: compatible string
> diff -rupN a/include/linux/of.h b/include/linux/of.h
> --- a/include/linux/of.h 2018-10-30 02:19:32.047096634 +0100
> +++ b/include/linux/of.h 2018-10-30 02:18:51.666856715 +0100
> @@ -347,7 +347,6 @@ extern const void *of_get_property(const
> const char *name,
> int *lenp);
> extern struct device_node *of_get_cpu_node(int cpu, unsigned int *thread);
> -extern struct device_node *of_get_next_cpu_node(struct device_node *prev);
>
> #define for_each_property_of_node(dn, pp) \
> for (pp = dn->properties; pp != NULL; pp = pp->next)
> @@ -757,11 +756,6 @@ static inline struct device_node *of_get
> return NULL;
> }
>
> -static inline struct device_node *of_get_next_cpu_node(struct
> device_node *prev)
> -{
> - return NULL;
> -}
> -
> static inline int of_n_addr_cells(struct device_node *np)
> {
> return 0;
> @@ -1239,10 +1233,6 @@ static inline int of_property_read_s32(c
> for (child = of_get_next_available_child(parent, NULL); child !=
> NULL; \
> child = of_get_next_available_child(parent, child))
>
> -#define for_each_of_cpu_node(cpu) \
> - for (cpu = of_get_next_cpu_node(NULL); cpu != NULL; \
> - cpu = of_get_next_cpu_node(cpu))
> -
> #define for_each_node_with_property(dn, prop_name) \
> for (dn = of_find_node_with_property(NULL, prop_name); dn; \
> dn = of_find_node_with_property(dn, prop_name))
More information about the Linuxppc-dev
mailing list