[Cbe-oss-dev] [RFC] spufs: make isolated loader properly aligned (take 3)

Sebastian Siewior cbe-oss-dev at ml.breakpoint.cc
Mon Aug 13 17:12:23 EST 2007


According to the comment in spufs_init_isolated_loader(), the isolated loader
should be aligned on a 16 byte boundary. ARCH_{KMALLOC|SLAB}_MINALIGN is not
defined so 8 byte alignment is guaranteed.
This patch enforces alignment via __get_free_pages (compile time tested).

Signed-off-by: Sebastian Siewior <sebastian at breakpoint.cc>

--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c
@@ -43,6 +43,7 @@
 
 static struct kmem_cache *spufs_inode_cache;
 char *isolated_loader;
+static int isolated_loader_size;
 
 static struct inode *
 spufs_alloc_inode(struct super_block *sb)
@@ -667,7 +668,8 @@ spufs_parse_options(char *options, struc
 
 static void spufs_exit_isolated_loader(void)
 {
-	kfree(isolated_loader);
+	free_pages((unsigned long) isolated_loader,
+			get_order(isolated_loader_size));
 }
 
 static void
@@ -685,11 +687,12 @@ spufs_init_isolated_loader(void)
 	if (!loader)
 		return;
 
-	/* kmalloc should align on a 16 byte boundary..* */
-	isolated_loader = kmalloc(size, GFP_KERNEL);
+	/* the loader must be align on a 16 byte boundary */
+	isolated_loader = (char *)__get_free_pages(GFP_KERNEL, get_order(size));
 	if (!isolated_loader)
 		return;
 
+	isolated_loader_size = size;
 	memcpy(isolated_loader, loader, size);
 	printk(KERN_INFO "spufs: SPU isolation mode enabled\n");
 }



More information about the cbe-oss-dev mailing list