On 03/21/2012 10:07 PM, Dong Aisheng wrote: > On Thu, Mar 22, 2012 at 12:07:27AM +0800, Stephen Warren wrote: >> On 03/21/2012 03:35 AM, Dong Aisheng wrote: >>> On Wed, Mar 21, 2012 at 01:44:39AM +0800, Stephen Warren wrote: >>>> Implement pinctrl_ops dt_node_to_map() and dt_free_map(). These allow >>>> complete specification of the desired pinmux configuration using device >>>> tree. ... >>>> + for_each_child_of_node(np_config, np) { >>>> + ret = of_property_read_string(np, "nvidia,function", &function); >>>> + if (ret < 0) >>>> + function = NULL; >>>> + >>>> + for (i = 0; i < ARRAY_SIZE(cfg_params); i++) { >>>> + ret = of_property_read_u32(np, cfg_params[i].property, >>>> + &val); >>>> + if (!ret) { >>>> + config = TEGRA_PINCONF_PACK( >>>> + cfg_params[i].param, val); >>>> + ret = add_config(&configs, &num_configs, >>>> + config); >>>> + if (ret < 0) >>>> + goto error; >>>> + } >>>> + } >>>> + >>>> + of_property_for_each_string(np, "nvidia,pins", prop, group) { >>> >>> If we calculate out the strings count and allocate corresponding size array, we may not >>> need to keep krealloc the maps and configs array size for each entry. >>> And this may be a little higher efficient. >> >> That's true. However, it'd require the code to loop once to determine >> how many properties are present and how many entries there are in the >> pin list. Then, loop again to actually construct the mapping table >> array. This is all added complexity that doesn't affect correctness. I'd >> rather get the simple code going first, and then refine it later if >> there turns out to be a performance issue. >> > Can we use of_property_count_strings? It'd be possible to avoid some of the reallocs this way. We could realloc once per node rather than once per (node, pin). It does make the code a bit more complex though, since you have to reserve space up-front during the one realloc and so have to store separate num_maps and num_maps_allocated. I'll see how bad it gets, and maybe include it in v3 if it isn't horrible. -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html