|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH 09/13] arch/arm: create device tree nodes for Dom0 cpufreq cpu driver
Hi Oleksandr,
On 10/07/2014 03:19 PM, Oleksandr Dmytryshyn wrote:
> This patch copies all cpu@xxxxxx@N nodes (from input
> device tree) with properties to /cpus/cpu@0/private_data
> node (device tree for Dom0). Thus we can have any number
> of VCPUs in Dom0 and we give all information about all
> physical CPUs in the private_data node. Driver in Dom0
> should parse /cpus/cpu@0/private_data path instead of the
> /cpus path in the device tree.
>
> Signed-off-by: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@xxxxxxxxxxxxxxx>
> ---
> xen/arch/arm/domain_build.c | 58
> +++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 58 insertions(+)
>
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 2db0236..a142cc4 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -436,6 +436,10 @@ static int make_cpus_node(const struct domain *d, void
> *fdt,
> char buf[15];
> u32 clock_frequency;
> bool_t clock_valid;
> +#ifdef HAS_CPUFREQ
> + const struct dt_property *pp;
> + char *node_name;
> +#endif
>
> DPRINT("Create cpus node\n");
>
> @@ -517,6 +521,60 @@ static int make_cpus_node(const struct domain *d, void
> *fdt,
> return res;
> }
>
The function make_cpus_node is quite big. I would introduce a new
function to copy the "private_data".
I was also thinking if it wouldn't have been better to move those nodes
under the hypervisor one because it's Xen stuff.
> +#ifdef HAS_CPUFREQ
> + /*
> + * Add "private_data" node to cpu@0 and copy to it
> + * original cpu@xxxxxx@N nodes with its properties.
> + * This is needed for the cpufreq cpu driver in Dom0
> + */
This copy is mostly related to Xen
Wouldn't it be better to copy those nodes in the hypervisor node?
> + if ( cpu == 0 )
> + {
> + DPRINT("Create private_data node\n");
> +
> + res = fdt_begin_node(fdt, "private_data");
> + if ( res )
> + return res;
> +
> + dt_for_each_child_node( cpus, npcpu )
> + {
> + if ( dt_device_type_is_equal(npcpu, "cpu") )
> + {
> + node_name = strrchr(dt_node_full_name(npcpu), '/');
> + if ( node_name )
> + node_name++;
IIRC, it's not possible to have an empty node_name here. The node name
will always be /cpus/name.
I would turn this if to an ASSERT, and drop the if just below.
> +
> + if ( node_name && *node_name )
> + {
Regards,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |