tests: Add a failed test case for 'fdtoverlay' with long target path
This adds a test case to demonstrate some issue seen when applying overlays using 'fdtoverlay'. It fails with FDT_ERR_NOSPACE: - with long target path - symbols in order to use these nodes in possible subsequent overlay. This is seen with this patch, by running: $ make check # Reports a failed test $ ./fdtoverlay -i tests/overlay_base.test.dtb -o out.dtb \ tests/overlay_overlay_long_path.fdoverlay.test.dtb Failed to apply tests/overlay_overlay_long_path.fdoverlay.test.dtb (-3) This overlay fails to apply, because dtb size is close to modulo 1024 bytes chunk: utilfdt_read() -> utilfdt_read_err() -> bufsize = 1024. As there is not much extra space in the blob to resolve symbols (long target path), it fails with FDT_ERR_NOSPACE. In fdtoverlay, size is : /* grow the blob to worst case */ blob_len = fdt_totalsize(blob) + total_len; I can see assumption is made that result should be lower than: - base fdt size + overlay size. Is there a simple way to find to know what the final size is? I'm not sure what the correct fix might be, for such (worst) case? Similar issue is also seen in u-boot/common/image-fit.c that implements similar approach (e.g. base fdt size + overlay size). Signed-off-by: Fabrice Gasnier <fabrice.gasnier@st.com> Message-Id: <1538553302-1353-1-git-send-email-fabrice.gasnier@st.com> [dwg: To avoid breaking bisection, I committed this after a fix, so the "failed" description is no longer accurate] Signed-off-by: David Gibson <david@gibson.dropbear.id.au>main
parent
bbe3b36f54
commit
ad57e4574a
|
@ -14,6 +14,10 @@
|
|||
|
||||
subtest: sub-test-node {
|
||||
sub-test-property;
|
||||
|
||||
subtest_with_long_path: sub-test-node-with-very-long-target-path {
|
||||
long-test-path-property;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
/dts-v1/;
|
||||
/plugin/;
|
||||
|
||||
&subtest_with_long_path {
|
||||
lpath_0: test-0 {
|
||||
prop = "lpath";
|
||||
};
|
||||
|
||||
lpath_1: test-1 {
|
||||
prop = "lpath";
|
||||
};
|
||||
|
||||
lpath_2: test-2 {
|
||||
prop = "lpath";
|
||||
};
|
||||
|
||||
lpath_3: test-3 {
|
||||
prop = "lpath";
|
||||
};
|
||||
|
||||
lpath_4: test-4 {
|
||||
prop = "lpath";
|
||||
};
|
||||
|
||||
lpath_5: test-5 {
|
||||
prop = "lpath";
|
||||
};
|
||||
|
||||
lpath_6: test-6 {
|
||||
prop = "lpath";
|
||||
};
|
||||
};
|
|
@ -941,6 +941,14 @@ fdtoverlay_tests() {
|
|||
|
||||
# test that baz correctly inserted the property
|
||||
run_fdtoverlay_test baz "/foonode/barnode/baznode" "baz-property" "-ts" ${stacked_basedtb} ${stacked_targetdtb} ${stacked_bardtb} ${stacked_bazdtb}
|
||||
|
||||
overlay_long_path=overlay_overlay_long_path.dts
|
||||
overlay_long_pathdtb=overlay_overlay_long_path.fdoverlay.test.dtb
|
||||
target_long_pathdtb=overlay_overlay_long_path_target.fdoverlay.test.dtb
|
||||
run_dtc_test -@ -I dts -O dtb -o $overlay_long_pathdtb $overlay_long_path
|
||||
|
||||
# test that fdtoverlay manages to apply overlays with long target path
|
||||
run_fdtoverlay_test lpath "/test-node/sub-test-node/sub-test-node-with-very-long-target-path/test-0" "prop" "-ts" ${basedtb} ${target_long_pathdtb} ${overlay_long_pathdtb}
|
||||
}
|
||||
|
||||
pylibfdt_tests () {
|
||||
|
|
Loading…
Reference in New Issue