Re: [PATCH 3/3] checks: Check node and property names are less than 32 characters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



On Fri, Jun 15, 2018 at 03:37:16PM -0600, Rob Herring wrote:
> According to the DT Spec (and ePAPR), node and property names should be
> 1-31 characters.
> 
> Signed-off-by: Rob Herring <robh@xxxxxxxxxx>

I don't think this is a good idea.

> ---
> Surprisingly, there aren't just a ton of warnings introduced with this. 
> I'm not really sure where the 31 character limit came from. Maybe it 
> should be increased rather than trying to fix any long names. Either 
> way, we should have a check if there's a spec'ed limit.

The 31 character limit comes from IEEE 1275.  But.. even long before
flattened trees, device trees from both IBM and Apple frequently
violated it.  I think we should probably just ditch this limitation
from the spec.

> 
> Rob
> 
>  checks.c                       | 23 ++++++++++++++++++++++-
>  tests/bad_node_name_length.dts |  6 ++++++
>  tests/bad_prop_name_length.dts |  5 +++++
>  tests/run_tests.sh             |  2 ++
>  4 files changed, 35 insertions(+), 1 deletion(-)
>  create mode 100644 tests/bad_node_name_length.dts
>  create mode 100644 tests/bad_prop_name_length.dts
> 
> diff --git a/checks.c b/checks.c
> index a2cc1036c915..7f049369e4b0 100644
> --- a/checks.c
> +++ b/checks.c
> @@ -303,6 +303,14 @@ static void check_node_name_chars_strict(struct check *c, struct dt_info *dti,
>  }
>  CHECK(node_name_chars_strict, check_node_name_chars_strict, PROPNODECHARSSTRICT);
>  
> +static void check_node_name_length(struct check *c, struct dt_info *dti,
> +					 struct node *node)
> +{
> +	if (node->basenamelen > 31)
> +		FAIL(c, dti, node, "node name exceeds maximum length of 31 chars");
> +}
> +WARNING(node_name_length, check_node_name_length, NULL);
> +
>  static void check_node_name_format(struct check *c, struct dt_info *dti,
>  				   struct node *node)
>  {
> @@ -385,6 +393,18 @@ static void check_property_name_chars_strict(struct check *c,
>  }
>  CHECK(property_name_chars_strict, check_property_name_chars_strict, PROPNODECHARSSTRICT);
>  
> +static void check_property_name_length(struct check *c, struct dt_info *dti,
> +					 struct node *node)
> +{
> +	struct property *prop;
> +
> +	for_each_property(node, prop) {
> +		if (strlen(prop->name) > 31)
> +			FAIL_PROP(c, dti, node, prop, "property name exceeds maximum length of 31 chars");
> +	}
> +}
> +WARNING(property_name_length, check_property_name_length, NULL);
> +
>  #define DESCLABEL_FMT	"%s%s%s%s%s"
>  #define DESCLABEL_ARGS(node,prop,mark)		\
>  	((mark) ? "value of " : ""),		\
> @@ -1552,7 +1572,8 @@ WARNING(graph_endpoint, check_graph_endpoint, NULL, &graph_nodes);
>  
>  static struct check *check_table[] = {
>  	&duplicate_node_names, &duplicate_property_names,
> -	&node_name_chars, &node_name_format, &property_name_chars,
> +	&node_name_chars, &node_name_format, &node_name_length,
> +	&property_name_chars, &property_name_length,
>  	&name_is_string, &name_properties,
>  
>  	&duplicate_label,
> diff --git a/tests/bad_node_name_length.dts b/tests/bad_node_name_length.dts
> new file mode 100644
> index 000000000000..a40da4cf686c
> --- /dev/null
> +++ b/tests/bad_node_name_length.dts
> @@ -0,0 +1,6 @@
> +/dts-v1/;
> +
> +/ {
> +	a-node-with-more-than-31-charsXX@1 {
> +	};
> +};
> diff --git a/tests/bad_prop_name_length.dts b/tests/bad_prop_name_length.dts
> new file mode 100644
> index 000000000000..1709448c4e2d
> --- /dev/null
> +++ b/tests/bad_prop_name_length.dts
> @@ -0,0 +1,5 @@
> +/dts-v1/;
> +
> +/ {
> +	a-prop-with-more-than-31-charsXX;
> +};
> diff --git a/tests/run_tests.sh b/tests/run_tests.sh
> index 76eafb431197..33882d1fd0d5 100755
> --- a/tests/run_tests.sh
> +++ b/tests/run_tests.sh
> @@ -628,6 +628,8 @@ dtc_tests () {
>      run_sh_test dtc-checkfails.sh node_name_chars -- -I dtb -O dtb bad_node_char.dtb
>      run_sh_test dtc-checkfails.sh node_name_format -- -I dtb -O dtb bad_node_format.dtb
>      run_sh_test dtc-checkfails.sh property_name_chars -- -I dtb -O dtb bad_prop_char.dtb
> +    check_tests bad_node_name_length.dts node_name_length
> +    check_tests bad_prop_name_length.dts property_name_length
>  
>      run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label1.dts
>      run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label2.dts

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Device Tree]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux