qi-fix-block-init-cache-logic.patch
authorAndy Green <andy@openmoko.com>
Sun, 1 Feb 2009 19:28:18 +0000 (19:28 +0000)
committerAndy Green <agreen@octopus.localdomain>
Sun, 1 Feb 2009 19:28:18 +0000 (19:28 +0000)
Changes in the last couple of weeks aimed at cleaning this
code broke the block device init cache logic.  This patch
restores the logic and reduces the card init failures when
there is no SD Card present to 1 regardless of the number
of partitions probed on the card.

Together with the reduction in Glamo card wait on init this
reduces the delay before trying NAND to 1/9th of before the
patches.

Signed-off-by: Andy Green <andy@openmoko.com>

src/phase2.c

index dd15055..de20cd3 100644 (file)
@@ -103,28 +103,32 @@ static int do_block_init(void)
 {
        static void * last_block_init = NULL;
        static int last_block_init_result = 0;
+       int fresh = 0;
 
        /* if this device needs initializing, try to init it */
        if (!this_kernel->block_init)
-               return 1;
+               return 1; /* happy */
 
        /*
         * cache result to limit attempts for same
         * block device to one time
         */
-       if (this_kernel->block_init != last_block_init)
+       if (this_kernel->block_init != last_block_init) {
+               last_block_init = this_kernel->block_init;
                last_block_init_result = (this_kernel->block_init)();
+               fresh = 1;
+       }
 
        if (last_block_init_result) {
                puts("block device init failed\n");
-               if (this_kernel->block_init != last_block_init)
+               if (fresh)
                        indicate(UI_IND_MOUNT_FAIL);
-               last_block_init = NULL;
-               return 0;
+
+               return 0; /* failed */
        }
        last_block_init = this_kernel->block_init;
 
-       return 1;
+       return 1; /* happy */
 }
 
 static int do_partitions(void *kernel_dram)