Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/vmwgfx: Disable coherent dumb buffers without 3d

Coherent surfaces make only sense if the host renders to them using
accelerated apis. Without 3d the entire content of dumb buffers stays
in the guest making all of the extra work they're doing to synchronize
between guest and host useless.

Configurations without 3d also tend to run with very low graphics
memory limits. The pinned console fb, mob cursors and graphical login
manager tend to run out of 16MB graphics memory that those guests use.

Fix it by making sure the coherent dumb buffers are only used on
configs with 3d enabled.

Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
Fixes: d6667f0ddf46 ("drm/vmwgfx: Fix handling of dumb buffers")
Reported-by: Christian Heusel <christian@heusel.eu>
Closes: https://lore.kernel.org/all/0d0330f3-2ac0-4cd5-8075-7f1cbaf72a8e@heusel.eu
Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
Cc: dri-devel@lists.freedesktop.org
Cc: <stable@vger.kernel.org> # v6.9+
Link: https://patchwork.freedesktop.org/patch/msgid/20240816183332.31961-4-zack.rusin@broadcom.com
Reviewed-by: Martin Krastev <martin.krastev@broadcom.com>
Reviewed-by: Maaz Mombasawala <maaz.mombasawala@broadcom.com>
Tested-by: Benjamin Coddington <bcodding@redhat.com>

+4 -2
+4 -2
drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
··· 2283 2283 /* 2284 2284 * Without mob support we're just going to use raw memory buffer 2285 2285 * because we wouldn't be able to support full surface coherency 2286 - * without mobs 2286 + * without mobs. There also no reason to support surface coherency 2287 + * without 3d (i.e. gpu usage on the host) because then all the 2288 + * contents is going to be rendered guest side. 2287 2289 */ 2288 - if (!dev_priv->has_mob) { 2290 + if (!dev_priv->has_mob || !vmw_supports_3d(dev_priv)) { 2289 2291 int cpp = DIV_ROUND_UP(args->bpp, 8); 2290 2292 2291 2293 switch (cpp) {