struct nouveau_framebuffer {
        struct drm_framebuffer base;
        struct nouveau_bo *nvbo;
-       struct nouveau_vma *vma;
 };
 
 static inline struct nouveau_framebuffer *
 
 
        chan = nouveau_nofbaccel ? NULL : drm->channel;
        if (chan && device->info.family >= NV_DEVICE_INFO_V0_TESLA) {
-               ret = nouveau_vma_new(nvbo, chan->vmm, &fb->vma);
+               ret = nouveau_vma_new(nvbo, chan->vmm, &fbcon->vma);
                if (ret) {
                        NV_ERROR(drm, "failed to map fb into chan: %d\n", ret);
                        chan = NULL;
 
 out_unlock:
        if (chan)
-               nouveau_vma_del(&fb->vma);
+               nouveau_vma_del(&fbcon->vma);
        nouveau_bo_unmap(fb->nvbo);
 out_unpin:
        nouveau_bo_unpin(fb->nvbo);
        drm_fb_helper_fini(&fbcon->helper);
 
        if (nouveau_fb && nouveau_fb->nvbo) {
-               nouveau_vma_del(&nouveau_fb->vma);
+               nouveau_vma_del(&fbcon->vma);
                nouveau_bo_unmap(nouveau_fb->nvbo);
                nouveau_bo_unpin(nouveau_fb->nvbo);
                drm_framebuffer_put(&nouveau_fb->base);
 
 
 #include "nouveau_display.h"
 
+struct nouveau_vma;
+
 struct nouveau_fbdev {
        struct drm_fb_helper helper; /* must be first */
        unsigned int saved_flags;
        struct nvif_object gdi;
        struct nvif_object blit;
        struct nvif_object twod;
+       struct nouveau_vma *vma;
 
        struct mutex hotplug_lock;
        bool hotplug_waiting;
 
 nv50_fbcon_accel_init(struct fb_info *info)
 {
        struct nouveau_fbdev *nfbdev = info->par;
-       struct nouveau_framebuffer *fb = nouveau_framebuffer(nfbdev->helper.fb);
        struct drm_device *dev = nfbdev->helper.dev;
        struct nouveau_drm *drm = nouveau_drm(dev);
        struct nouveau_channel *chan = drm->channel;
        OUT_RING(chan, info->fix.line_length);
        OUT_RING(chan, info->var.xres_virtual);
        OUT_RING(chan, info->var.yres_virtual);
-       OUT_RING(chan, upper_32_bits(fb->vma->addr));
-       OUT_RING(chan, lower_32_bits(fb->vma->addr));
+       OUT_RING(chan, upper_32_bits(nfbdev->vma->addr));
+       OUT_RING(chan, lower_32_bits(nfbdev->vma->addr));
        BEGIN_NV04(chan, NvSub2D, 0x0230, 2);
        OUT_RING(chan, format);
        OUT_RING(chan, 1);
        OUT_RING(chan, info->fix.line_length);
        OUT_RING(chan, info->var.xres_virtual);
        OUT_RING(chan, info->var.yres_virtual);
-       OUT_RING(chan, upper_32_bits(fb->vma->addr));
-       OUT_RING(chan, lower_32_bits(fb->vma->addr));
+       OUT_RING(chan, upper_32_bits(nfbdev->vma->addr));
+       OUT_RING(chan, lower_32_bits(nfbdev->vma->addr));
        FIRE_RING(chan);
 
        return 0;
 
 {
        struct nouveau_fbdev *nfbdev = info->par;
        struct drm_device *dev = nfbdev->helper.dev;
-       struct nouveau_framebuffer *fb = nouveau_framebuffer(nfbdev->helper.fb);
        struct nouveau_drm *drm = nouveau_drm(dev);
        struct nouveau_channel *chan = drm->channel;
        int ret, format;
        OUT_RING  (chan, info->fix.line_length);
        OUT_RING  (chan, info->var.xres_virtual);
        OUT_RING  (chan, info->var.yres_virtual);
-       OUT_RING  (chan, upper_32_bits(fb->vma->addr));
-       OUT_RING  (chan, lower_32_bits(fb->vma->addr));
+       OUT_RING  (chan, upper_32_bits(nfbdev->vma->addr));
+       OUT_RING  (chan, lower_32_bits(nfbdev->vma->addr));
        BEGIN_NVC0(chan, NvSub2D, 0x0230, 10);
        OUT_RING  (chan, format);
        OUT_RING  (chan, 1);
        OUT_RING  (chan, info->fix.line_length);
        OUT_RING  (chan, info->var.xres_virtual);
        OUT_RING  (chan, info->var.yres_virtual);
-       OUT_RING  (chan, upper_32_bits(fb->vma->addr));
-       OUT_RING  (chan, lower_32_bits(fb->vma->addr));
+       OUT_RING  (chan, upper_32_bits(nfbdev->vma->addr));
+       OUT_RING  (chan, lower_32_bits(nfbdev->vma->addr));
        FIRE_RING (chan);
 
        return 0;