The pointer obtained by kmalloc() is treated with ALIGN() before passing 
it to kfree().  This may or may not cause problems depending on the 
minimum alignment enforced by kmalloc() and is ugly anyway.  This change 
records the original pointer returned by kmalloc() so that kfree() may 
safely use it.

Signed-off-by: Maciej W. Rozycki <[EMAIL PROTECTED]>
---

 This applies on top of the "typedef" change (7/6).  Please consider.

  Maciej

patch-mips-2.6.18-20060920-sb1250-mac-kfree-0
diff -up --recursive --new-file 
linux-mips-2.6.18-20060920.macro/drivers/net/sb1250-mac.c 
linux-mips-2.6.18-20060920/drivers/net/sb1250-mac.c
--- linux-mips-2.6.18-20060920.macro/drivers/net/sb1250-mac.c   2006-10-05 
16:18:41.000000000 +0000
+++ linux-mips-2.6.18-20060920/drivers/net/sb1250-mac.c 2006-10-04 
23:07:27.000000000 +0000
@@ -220,6 +220,7 @@ struct sbmacdma {
        /*
         * This stuff is for maintenance of the ring
         */
+       void                    *sbdma_dscrtable_un;
        struct sbdmadscr        *sbdma_dscrtable;
                                                /* base of descriptor table */
        struct sbdmadscr        *sbdma_dscrtable_end;
@@ -640,15 +641,16 @@ static void sbdma_initctx(struct sbmacdm
 
        d->sbdma_maxdescr = maxdescr;
 
-       d->sbdma_dscrtable = kmalloc((d->sbdma_maxdescr + 1) *
-                                    sizeof(*d->sbdma_dscrtable), GFP_KERNEL);
+       d->sbdma_dscrtable_un = kmalloc((d->sbdma_maxdescr + 1) *
+                                       sizeof(*d->sbdma_dscrtable),
+                                       GFP_KERNEL);
 
        /*
         * The descriptor table must be aligned to at least 16 bytes or the
         * MAC will corrupt it.
         */
        d->sbdma_dscrtable = (struct sbdmadscr *)
-                            ALIGN((unsigned long)d->sbdma_dscrtable,
+                            ALIGN((unsigned long)d->sbdma_dscrtable_un,
                                   sizeof(*d->sbdma_dscrtable));
 
        memset(d->sbdma_dscrtable, 0,
@@ -1309,9 +1311,9 @@ static int sbmac_initctx(struct sbmac_so
 
 static void sbdma_uninitctx(struct sbmacdma *d)
 {
-       if (d->sbdma_dscrtable) {
-               kfree(d->sbdma_dscrtable);
-               d->sbdma_dscrtable = NULL;
+       if (d->sbdma_dscrtable_un) {
+               kfree(d->sbdma_dscrtable_un);
+               d->sbdma_dscrtable = d->sbdma_dscrtable_un = NULL;
        }
 
        if (d->sbdma_ctxtable) {
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to