dev_priv->texture_max_height = 8192;
                dev_priv->max_primary_mem = dev_priv->vram_size;
        }
+       drm_info(&dev_priv->drm,
+                "Legacy memory limits: VRAM = %llu kB, FIFO = %llu kB, surface = %u kB\n",
+                (u64)dev_priv->vram_size / 1024,
+                (u64)dev_priv->fifo_mem_size / 1024,
+                dev_priv->memory_size / 1024);
+
+       drm_info(&dev_priv->drm,
+                "MOB limits: max mob size = %u kB, max mob pages = %u\n",
+                dev_priv->max_mob_size / 1024, dev_priv->max_mob_pages);
 
        vmw_print_bitmap(&dev_priv->drm, "Capabilities",
                         dev_priv->capabilities,
 
 
        if (gman->max_gmr_pages > 0) {
                gman->used_gmr_pages += (*res)->num_pages;
-               if (unlikely(gman->used_gmr_pages > gman->max_gmr_pages))
-                       goto nospace;
+               /*
+                * Because the graphics memory is a soft limit we can try to
+                * expand it instead of letting the userspace apps crash.
+                * We're just going to have a sane limit (half of RAM)
+                * on the number of MOB's that we create and will try to keep
+                * the system running until we reach that.
+                */
+               if (unlikely(gman->used_gmr_pages > gman->max_gmr_pages)) {
+                       const unsigned long max_graphics_pages = totalram_pages() / 2;
+                       uint32_t new_max_pages = 0;
+
+                       DRM_WARN("vmwgfx: mob memory overflow. Consider increasing guest RAM and graphicsMemory.\n");
+                       vmw_host_printf("vmwgfx, warning: mob memory overflow. Consider increasing guest RAM and graphicsMemory.\n");
+
+                       if (gman->max_gmr_pages > (max_graphics_pages / 2)) {
+                               DRM_WARN("vmwgfx: guest requires more than half of RAM for graphics.\n");
+                               new_max_pages = max_graphics_pages;
+                       } else
+                               new_max_pages = gman->max_gmr_pages * 2;
+                       if (new_max_pages > gman->max_gmr_pages && new_max_pages >= gman->used_gmr_pages) {
+                               DRM_WARN("vmwgfx: increasing guest mob limits to %u kB.\n",
+                                        ((new_max_pages) << (PAGE_SHIFT - 10)));
+
+                               gman->max_gmr_pages = new_max_pages;
+                       } else {
+                               char buf[256];
+                               snprintf(buf, sizeof(buf),
+                                        "vmwgfx, error: guest graphics is out of memory (mob limit at: %ukB).\n",
+                                        ((gman->max_gmr_pages) << (PAGE_SHIFT - 10)));
+                               vmw_host_printf(buf);
+                               DRM_WARN("%s", buf);
+                               goto nospace;
+                       }
+               }
        }
 
        (*res)->start = id;