On Monday 19 November 2007 05:40:01 Zavi wrote:
> I'm trying to compile Yaffs direct on a 64-bit linux machine in the
> emulation mode, using the Makefile in the direct sub-directory.
>
> 1. When I tried to run the default test in direct/dtest.c-
> resize_stress_test_no_grow("/flash/flash",20);
>
> I got an error message: "yaffs_Tnode should be 32 but is 64."
> When I change the following line
> #define YAFFS_NTNODES_INTERNAL (YAFFS_NTNODES_LEVEL0 / 2)
> to
> #define YAFFS_NTNODES_INTERNAL (YAFFS_NTNODES_LEVEL0 / 4)
> the test executes fine. Could the problem have something to do with
> the fact my machine is 64-bit?
I expect so. I don't think you should try to fix it like this though.
The problem is most likely due to the tnode allocations not being wide enough
to hold 64-bit pointers. Try this patch instead.
--- yaffs_guts.c.old 2007-11-19 08:48:44.000000000 +1300
+++ yaffs_guts.c 2007-11-19 08:48:44.000000000 +1300
@@ -1146,6 +1146,10 @@
* Must be a multiple of 32-bits */
tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
+ if(tnodeSize < sizeof(yaffs_Tnode))
+ tnodeSize = sizeof(yaffs_Tnode);
+
+
/* make these things */
newTnodes = YMALLOC(nTnodes * tnodeSize);
>
> 2. Even after this I'm still having problems with all the following
> tests (last tests in dtest.c) -
> long_test_on_path("/ram2k");
> long_test_on_path("/flash");
> simple_rw_test("/flash/flash");
> fill_disk_test("/flash/flash");
> rename_over_test("/flash");
> ...
>
> I keep getting a segmentation fault, and trying to trace it led me to
> the return statement of yaffs_write for no apparent reason.
> What could be the reason? can it be it's again related to the 64-bit issue?
I think it was most likely caused by the way you tried to fix it.
Try the above patch instead. Please get back to me as to how this works.
-- CHarles