[PATCH] sb1250-mac: Ensure 16-byte alignment of the descriptor ring.
authorRalf Baechle <ralf@linux-mips.org>
Mon, 10 Oct 2005 13:50:36 +0000 (14:50 +0100)
committerJeff Garzik <jgarzik@pobox.com>
Tue, 18 Oct 2005 22:03:47 +0000 (18:03 -0400)
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
 drivers/net/sb1250-mac.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletion(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
drivers/net/sb1250-mac.c

index 0f828da..cb4ea41 100644 (file)
@@ -750,7 +750,14 @@ static void sbdma_initctx(sbmacdma_t *d,
        d->sbdma_maxdescr = maxdescr;
        
        d->sbdma_dscrtable = (sbdmadscr_t *) 
-               kmalloc(d->sbdma_maxdescr*sizeof(sbdmadscr_t), GFP_KERNEL);
+               kmalloc((d->sbdma_maxdescr+1)*sizeof(sbdmadscr_t), GFP_KERNEL);
+
+       /*
+        * The descriptor table must be aligned to at least 16 bytes or the
+        * MAC will corrupt it.
+        */
+       d->sbdma_dscrtable = (sbdmadscr_t *)
+               ALIGN((unsigned long)d->sbdma_dscrtable, sizeof(sbdmadscr_t));
        
        memset(d->sbdma_dscrtable,0,d->sbdma_maxdescr*sizeof(sbdmadscr_t));