On 22 Sep 2002, Fredrik Noring wrote:
> The attached patch is a work-around for the busy-wait in the
> XDGASetViewport function in the "nv" driver.
>
> Eliminating the busy-wait can make a significant difference when
> for example playing video using DGA. (In my test setup, the
> previous loop often required 20-40 % of wasted cpu cycles.)
>
> The patch is ugly and made as a proof-of-concept. It uses the
> /dev/rtc registers and is Linux specific.
>
> I have some ideas on long-term solutions, but they all require
> external (kernel) support of some kind.
>
> Any thoughts?
It's not portable. Who cares anyway. DGA is slated for removal
in XFree86 5.
Mark.
>
> Fredrik
>
>
>
> --- xc.old/programs/Xserver/hw/xfree86/drivers/nv/nv_dga.c 2001-01-22
>22:32:36.000000000 +0100
> +++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dga.c 2002-09-22
>14:23:43.000000000 +0200
> @@ -224,6 +224,9 @@
> return pNv->DGAViewportStatus;
> }
>
> +#include <linux/rtc.h>
> +#include <asm/ioctl.h>
> +
> static void
> NV_SetViewport(
> ScrnInfoPtr pScrn,
> @@ -232,11 +235,23 @@
> ){
> NVPtr pNv = NVPTR(pScrn);
>
> - NVAdjustFrame(pScrn->pScreen->myNum, x, y, flags);
> + unsigned long rtc;
> + int fd;
>
> - while(pNv->riva.PCIO[0x3da] & 0x08);
> - while(!(pNv->riva.PCIO[0x3da] & 0x08));
> + fd = open("/dev/rtc", O_RDONLY);
> + ioctl(fd, RTC_IRQP_SET, 8192);
> + ioctl(fd, RTC_PIE_ON, 0);
> +
> + NVAdjustFrame(pScrn->pScreen->myNum, x, y, flags);
>
> + while(pNv->riva.PCIO[0x3da] & 0x08)
> + read(fd, &rtc, sizeof(unsigned long));
> + while(!(pNv->riva.PCIO[0x3da] & 0x08))
> + read(fd, &rtc, sizeof(unsigned long));
> +
> + ioctl(fd, RTC_PIE_OFF, 0);
> + close(fd);
> +
> pNv->DGAViewportStatus = 0;
> }
>
>
> _______________________________________________
> Xpert mailing list
> [EMAIL PROTECTED]
> http://XFree86.Org/mailman/listinfo/xpert
>
_______________________________________________
Xpert mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xpert