The Unichrome (via) DRM module implements an AGP ring buffer and the Unichrome Mesa driver is currently not using it, but instead relies on its own programming of the DMA engine. This is not good from a security point of view, since the register space of the Unichrome chip must be exported read-write. This patch makes the Unichrome driver use the AGP ring buffer in the DRM or fall back to a PCI MMIO mechanism also in DRM if AGP is not enabled. Before this patch is commited, DRM must implement a more versatile command buffer verifier. The current one does not let any 3D commands through, so it must be disabled for this code to work. This code will help people debug such a command verifier. The patch also removes the VQ disabling from the driver. It uses direct video register writes and it apparently is there for Tuxracer when the pci path is used, but this seems to work fine on my test setup. /Thomas
Created attachment 1410 [details] [review] Patch to submit 3D commands through DRM mechanisms. The patch. It requires via drm driver version 2.1.0 or above and that the command verifyier in drm is manually removed. (File shared/via_dma.c or shared-core/via_dma.c ).
Created attachment 1538 [details] [review] New version of the patch with additional functionality. New version of the patch. This one is using the functionality just recenctly commited to DRM and since the command verifier now is implemented. This patch should be fully OK to apply. In addition to the DRM command buffer functionality, it fixes 1. A locking bug that caused the driver not to keep up with drawable changes. 2. Blitter problems caused by the blitter losing context when the command buffer is executed through AGP. 3. AGP textures are reenabled. 4. Check for texture memory allocation failure. The driver avoids filling the ring-buffer by checking the command regulator lag. Presently this is allowed to be only 50kB. This is tuneable, but larger values seem to make applications unresponsive while at the same time providing little performance gain. With Miniglx, the driver will use the PCI path until someone finds time to patch the Miniglx server to initialize the AGP ring-buffer.
This has been comitted now in a slightly modified variant.
Mass version move, cvs -> git
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.