On Tue 2019-03-26 15:24:50, Andy Shevchenko wrote: > On Tue, Mar 26, 2019 at 02:11:35PM +0100, Rasmus Villemoes wrote: > > On 26/03/2019 13.41, Sakari Ailus wrote: > > > Add support for %pfw conversion specifier (with "f" and "P" modifiers) to > > > support printing full path of the node, including its name ("f") and only > > > the node's name ("P") in the printk family of functions. The two flags > > > have equivalent functionality to existing %pOF with the same two modifiers > > > ("f" and "P") on OF based systems. The ability to do the same on ACPI > > > based systems is added by this patch. > > > > + for (pass = false; strspn(fmt, modifiers); fmt++, pass = true) { > > > + if (pass) { > > > + if (buf < end) > > > + *buf = ':'; > > > + buf++; > > > + } > > > + > > > + switch (*fmt) { > > > + case 'f': /* full_name */ > > > + buf = fwnode_gen_full_name(fwnode, buf, end); > > > + break; > > > + case 'P': /* name */ > > > + buf = string(buf, end, fwnode_get_name(fwnode), > > > + str_spec); > > > + break; > > > + default: > > > + break; > > > + } > > > + } > > > > This seems awfully complicated. Why would anyone ever pass more than one > > of 'f' and 'P'? Why not just > > > > switch(*fmt) { > > case 'P': > > ... > > case 'f': > > default: > > ... > > } > > > > which avoids the loop and the strcspn. Or, drop the default: case and > > don't have logic at all for falling back to 'f' if neither is present. > > > > > + return widen_string(buf, buf - buf_start, end, spec); > > > +} > > My point as well (as per sent comments against previous version). > Sakari, can you add test cases at the same time? > > > > return device_node_string(buf, end, ptr, spec, fmt + 1); > > > > + return fwnode_string(buf, end, ptr, spec, fmt + 1); > > > > Why not pass fmt+2; we know that fmt+1 points at a 'w'. Just to avoid > > doing the fmt++ inside fwnode_string(). > > I guess in order to be consistent with existing %pOF case. But wouldn't be > better to fix %pOF for that sooner or later? Good question. Are there any %pOF users that would want to use the for cycle and printk more values by single %pOF? Would the output be human readable without any delimiters or words around? Best Regards, Petr