xfree86: Remove the memory of MTRR awareness
pciaccess does this for us, and none of our internal hooks really remain. This does remove a cleanup pass from the BSD code, but the case it's covering (a previous server leaving MTRRs around) can't happen anymore. Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
c42712ab4d
commit
2e21c081d3
23
configure.ac
23
configure.ac
|
@ -235,29 +235,6 @@ dnl fbdev header
|
||||||
AC_CHECK_HEADERS([linux/fb.h], FBDEV=yes)
|
AC_CHECK_HEADERS([linux/fb.h], FBDEV=yes)
|
||||||
AM_CONDITIONAL(FBDEVHW, [test "x$FBDEV" = xyes])
|
AM_CONDITIONAL(FBDEVHW, [test "x$FBDEV" = xyes])
|
||||||
|
|
||||||
dnl MTRR header
|
|
||||||
AC_CHECK_HEADERS([asm/mtrr.h], ac_cv_asm_mtrr_h=yes)
|
|
||||||
if test "x$ac_cv_asm_mtrr_h" = xyes; then
|
|
||||||
HAVE_MTRR=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl BSD MTRR header
|
|
||||||
AC_CHECK_HEADERS([sys/memrange.h], ac_cv_memrange_h=yes)
|
|
||||||
if test "x$ac_cv_memrange_h" = xyes; then
|
|
||||||
HAVE_MTRR=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$HAVE_MTRR" = xyes; then
|
|
||||||
AC_DEFINE(HAS_MTRR_SUPPORT, 1, [MTRR support available])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl A NetBSD MTRR header
|
|
||||||
AC_CHECK_HEADERS([machine/mtrr.h], ac_cv_machine_mtrr_h=yes)
|
|
||||||
if test "x$ac_cv_machine_mtrr_h" = xyes; then
|
|
||||||
AC_DEFINE(HAS_MTRR_BUILTIN, 1, [Define to 1 if NetBSD built-in MTRR
|
|
||||||
support is available])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl FreeBSD kldload support (sys/linker.h)
|
dnl FreeBSD kldload support (sys/linker.h)
|
||||||
AC_CHECK_HEADERS([sys/linker.h],
|
AC_CHECK_HEADERS([sys/linker.h],
|
||||||
[ac_cv_sys_linker_h=yes],
|
[ac_cv_sys_linker_h=yes],
|
||||||
|
|
|
@ -142,9 +142,6 @@ Here are the basic steps for kernel setup.
|
||||||
|
|
||||||
o Enable all chipsets' support for AGP
|
o Enable all chipsets' support for AGP
|
||||||
|
|
||||||
o It's recommended that you turn on MTRRs under Processor type and
|
|
||||||
Features, but not required.
|
|
||||||
|
|
||||||
o Configure the rest of the kernel as required for your system (i.e. Eth-
|
o Configure the rest of the kernel as required for your system (i.e. Eth-
|
||||||
ernet, SCSI, etc)
|
ernet, SCSI, etc)
|
||||||
|
|
||||||
|
|
|
@ -231,7 +231,6 @@ DDC B C Enable/disable DDC
|
||||||
DDC1 B C Enable/disable DDC1
|
DDC1 B C Enable/disable DDC1
|
||||||
DDC2 B C Enable/disable DDC2
|
DDC2 B C Enable/disable DDC2
|
||||||
DPMS O C Enable DPMS
|
DPMS O C Enable DPMS
|
||||||
MTRR B C Enable/disable setting MTRRs
|
|
||||||
|
|
||||||
BaudRate I I Serial port baud rate
|
BaudRate I I Serial port baud rate
|
||||||
ButtonNumber I I Button number (for touch screen?)
|
ButtonNumber I I Button number (for touch screen?)
|
||||||
|
|
|
@ -2023,12 +2023,6 @@ Default: false.
|
||||||
Disables the Int10 module, a module that uses the int10 call to the BIOS
|
Disables the Int10 module, a module that uses the int10 call to the BIOS
|
||||||
of the graphics card to initialize it.
|
of the graphics card to initialize it.
|
||||||
Default: false.
|
Default: false.
|
||||||
.TP 7
|
|
||||||
.BI "Option \*qNoMTRR\*q"
|
|
||||||
Disables MTRR (Memory Type Range Register) support, a feature of modern
|
|
||||||
processors which can improve video performance by a factor of up to 2.5.
|
|
||||||
Some hardware has buggy MTRR support, and some video drivers have been
|
|
||||||
known to exhibit problems when MTRR's are used.
|
|
||||||
.PP
|
.PP
|
||||||
Each
|
Each
|
||||||
.B Screen
|
.B Screen
|
||||||
|
|
|
@ -34,27 +34,6 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
|
||||||
#ifdef HAS_MTRR_SUPPORT
|
|
||||||
#ifndef __NetBSD__
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/memrange.h>
|
|
||||||
#else
|
|
||||||
#include "memrange.h"
|
|
||||||
#endif
|
|
||||||
#define X_MTRR_ID "XFree86"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(HAS_MTRR_BUILTIN) && defined(__NetBSD__)
|
|
||||||
#include <machine/mtrr.h>
|
|
||||||
#include <machine/sysarch.h>
|
|
||||||
#include <sys/queue.h>
|
|
||||||
#ifdef __x86_64__
|
|
||||||
#define i386_set_mtrr x86_64_set_mtrr
|
|
||||||
#define i386_get_mtrr x86_64_get_mtrr
|
|
||||||
#define i386_iopl x86_64_iopl
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "xf86_OSlib.h"
|
#include "xf86_OSlib.h"
|
||||||
#include "xf86OSpriv.h"
|
#include "xf86OSpriv.h"
|
||||||
|
|
||||||
|
@ -85,10 +64,6 @@ static int devMemFd = -1;
|
||||||
#define DEV_APERTURE "/dev/xf86"
|
#define DEV_APERTURE "/dev/xf86"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAS_MTRR_SUPPORT
|
|
||||||
static Bool cleanMTRR(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if /dev/mem can be mmap'd. If it can't print a warning when
|
* Check if /dev/mem can be mmap'd. If it can't print a warning when
|
||||||
* "warn" is TRUE.
|
* "warn" is TRUE.
|
||||||
|
@ -181,9 +156,6 @@ xf86OSInitVidMem(VidMemInfoPtr pVidMem)
|
||||||
|
|
||||||
pci_system_init_dev_mem(devMemFd);
|
pci_system_init_dev_mem(devMemFd);
|
||||||
|
|
||||||
#ifdef HAS_MTRR_SUPPORT
|
|
||||||
cleanMTRR();
|
|
||||||
#endif
|
|
||||||
pVidMem->initialised = TRUE;
|
pVidMem->initialised = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -354,87 +326,3 @@ xf86SetRGBOut()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAS_MTRR_SUPPORT
|
|
||||||
/* memory range (MTRR) support for FreeBSD */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This code is experimental. Some parts may be overkill, and other parts
|
|
||||||
* may be incomplete.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* getAllRanges returns the full list of memory ranges with attributes set.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static struct mem_range_desc *
|
|
||||||
getAllRanges(int *nmr)
|
|
||||||
{
|
|
||||||
struct mem_range_desc *mrd;
|
|
||||||
struct mem_range_op mro;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Find how many ranges there are. If this fails, then the kernel
|
|
||||||
* probably doesn't have MTRR support.
|
|
||||||
*/
|
|
||||||
mro.mo_arg[0] = 0;
|
|
||||||
if (ioctl(devMemFd, MEMRANGE_GET, &mro))
|
|
||||||
return NULL;
|
|
||||||
*nmr = mro.mo_arg[0];
|
|
||||||
mrd = xnfalloc(*nmr * sizeof(struct mem_range_desc));
|
|
||||||
mro.mo_arg[0] = *nmr;
|
|
||||||
mro.mo_desc = mrd;
|
|
||||||
if (ioctl(devMemFd, MEMRANGE_GET, &mro)) {
|
|
||||||
free(mrd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return mrd;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* cleanMTRR removes any memory attribute that may be left by a previous
|
|
||||||
* X server. Normally there won't be any, but this takes care of the
|
|
||||||
* case where a server crashed without being able finish cleaning up.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static Bool
|
|
||||||
cleanMTRR()
|
|
||||||
{
|
|
||||||
struct mem_range_desc *mrd;
|
|
||||||
struct mem_range_op mro;
|
|
||||||
int nmr, i;
|
|
||||||
|
|
||||||
/* This shouldn't happen */
|
|
||||||
if (devMemFd < 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (!(mrd = getAllRanges(&nmr)))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
for (i = 0; i < nmr; i++) {
|
|
||||||
if (strcmp(mrd[i].mr_owner, X_MTRR_ID) == 0 &&
|
|
||||||
(mrd[i].mr_flags & MDF_ACTIVE)) {
|
|
||||||
#ifdef DEBUG
|
|
||||||
ErrorF("Clean for (0x%lx,0x%lx)\n",
|
|
||||||
(unsigned long) mrd[i].mr_base,
|
|
||||||
(unsigned long) mrd[i].mr_len);
|
|
||||||
#endif
|
|
||||||
if (mrd[i].mr_flags & MDF_FIXACTIVE) {
|
|
||||||
mro.mo_arg[0] = MEMRANGE_SET_UPDATE;
|
|
||||||
mrd[i].mr_flags = MDF_UNCACHEABLE;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mro.mo_arg[0] = MEMRANGE_SET_REMOVE;
|
|
||||||
}
|
|
||||||
mro.mo_desc = mrd + i;
|
|
||||||
ioctl(devMemFd, MEMRANGE_SET, &mro);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef DEBUG
|
|
||||||
sleep(10);
|
|
||||||
#endif
|
|
||||||
free(mrd);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* HAS_MTRR_SUPPORT */
|
|
||||||
|
|
|
@ -57,9 +57,6 @@
|
||||||
/* Support SHM */
|
/* Support SHM */
|
||||||
#undef HAS_SHM
|
#undef HAS_SHM
|
||||||
|
|
||||||
/* Define to 1 if you have the <asm/mtrr.h> header file. */
|
|
||||||
#undef HAVE_ASM_MTRR_H
|
|
||||||
|
|
||||||
/* Has backtrace support */
|
/* Has backtrace support */
|
||||||
#undef HAVE_BACKTRACE
|
#undef HAVE_BACKTRACE
|
||||||
|
|
||||||
|
|
|
@ -82,12 +82,6 @@
|
||||||
/* Building vgahw module */
|
/* Building vgahw module */
|
||||||
#undef WITH_VGAHW
|
#undef WITH_VGAHW
|
||||||
|
|
||||||
/* Define to 1 if NetBSD built-in MTRR support is available */
|
|
||||||
#undef HAS_MTRR_BUILTIN
|
|
||||||
|
|
||||||
/* Define to 1 if BSD MTRR support is available */
|
|
||||||
#undef HAS_MTRR_SUPPORT
|
|
||||||
|
|
||||||
/* NetBSD PIO alpha IO */
|
/* NetBSD PIO alpha IO */
|
||||||
#undef USE_ALPHA_PIO
|
#undef USE_ALPHA_PIO
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue