Revert "nouveau/bios: Fix tracking of BIOS image data"
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 4 Apr 2012 15:16:25 +0000 (08:16 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 4 Apr 2012 15:16:25 +0000 (08:16 -0700)
This reverts commit d06221c0617ab6d0bc41c4980cefdd9c8cc9a1c1.

It turns out to trigger the "BUG_ON(!PageCompound(page))" in kfree(),
apparently because the code ends up trying to free somethng that was
never kmalloced in the first place.

BenH points out that the patch was untested and wasn't meant to go into
the upstream kernel that quickly in the first place.

Backtrace:
  bios_shadow
  bios_shadow_prom
  nv_mask
  init_io
  bios_shadow
  nouveau_bios_init
  NVReadVgaCrtc
  NVSetOwner
  nouveau_card_init
  nouveau_load

Reported-by: Meelis Roos <mroos@linux.ee>
Requested-by: Dave Airlie <airlied@gmail.com>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/gpu/drm/nouveau/nouveau_bios.c

index 1947d6139a38e4cb7234fe090ec2456c7a3ac8d3..80963d05b54aad27ebe0e1f3325fc9c923221daf 100644 (file)
@@ -273,7 +273,6 @@ bios_shadow(struct drm_device *dev)
                mthd->score = score_vbios(bios, mthd->rw);
                mthd->size = bios->length;
                mthd->data = bios->data;
-               bios->data = NULL;
        } while (mthd->score != 3 && (++mthd)->shadow);
 
        mthd = shadow_methods;
@@ -282,8 +281,7 @@ bios_shadow(struct drm_device *dev)
                if (mthd->score > best->score) {
                        kfree(best->data);
                        best = mthd;
-               } else
-                       kfree(mthd->data);
+               }
        } while ((++mthd)->shadow);
 
        if (best->score) {