From: Alex Buell <alex.buell@xxxxxxxxxxxxx> Date: Sat, 15 Jan 2011 12:57:09 +0000 > On Sat, 2011-01-15 at 13:07 +0100, Raúl Porcel wrote: >> Thanks, it builds, but silo fails to work: >> >> Boot device: disk1 File and args: >> SILO Version 1.4.14_git2010228_p1 >> >> Unknown ext2 error: 4294967295 >> >> Fatal error: Unable to open filesystem >> >> Couldn't load /etc/silo.conf >> No config file loaded, you can boot just from this command line >> Type [prompath;]part/path_to_image [parameters] on the prompt >> E.g. /iommu/sbus/espdma/esp/sd@3,0;4/vmlinux root=/dev/sda4 >> or 2/vmlinux.live (to load vmlinux.live from 2nd partition of boot disk) >> boot: > > This problem exists with all versions of silo linked against > e2fsprogs-1.41.14. Can you guys please test this patch out? It's against the current tree. Thanks! -------------------- malloc: Provide posix_memalign() implementation. ext2progs library really wants a working version of this, and thankfully it's not that hard to do. Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx> diff --git a/common/malloc.c b/common/malloc.c index cc3946d..d05061b 100644 --- a/common/malloc.c +++ b/common/malloc.c @@ -27,6 +27,12 @@ static char *malloc_ptr = (char *) MALLOC_BASE; static char *last_alloc = 0; +static char *align_ptr_to(char *ptr, unsigned long align) +{ + return (char *) ((((unsigned long) ptr) + (align - 1UL)) & + ~(align - 1UL)); +} + void *malloc (int size) { char *caddr; @@ -34,10 +40,34 @@ void *malloc (int size) caddr = malloc_ptr; malloc_ptr += size; last_alloc = caddr; - malloc_ptr = (char *) ((((unsigned long) malloc_ptr) + 7) & (~7)); + malloc_ptr = align_ptr_to(malloc_ptr, 7UL); return caddr; } +int posix_memalign(void **memptr, unsigned long alignment, unsigned long size) +{ + char *caddr; + + if (alignment & (alignment - 1UL)) + return -1; + if (alignment & (sizeof(void *) - 1UL)) + return -1; + + if (size == 0) { + *memptr = (void *) 0; + return 0; + } + + caddr = align_ptr_to(malloc_ptr, alignment); + malloc_ptr = (caddr + size); + last_alloc = caddr; + malloc_ptr = align_ptr_to(malloc_ptr, 7UL); + + *memptr = caddr; + + return 0; +} + void free (void *m) { if (m == last_alloc) diff --git a/second/fs/ext2.c b/second/fs/ext2.c index 12d00dc..57f5e9a 100644 --- a/second/fs/ext2.c +++ b/second/fs/ext2.c @@ -163,9 +163,3 @@ void *realloc(void *p, int size) { return NULL; } - -int posix_memalign(void **memptr, size_t alignment, size_t size) -{ - *memptr = NULL; - return -1; -} -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html