Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Sep 2002 08:10:12 +0100
From:      David Malone <dwmalone@maths.tcd.ie>
To:        Santos <casd@myrealbox.com>
Cc:        stable <stable@freebsd.org>
Subject:   Re: Problem Report kern/28418, problems with X in AMD mobos 
Message-ID:   <200209100810.aa15711@salmon.maths.tcd.ie>
In-Reply-To: Your message of "Tue, 10 Sep 2002 06:46:35 BST." <3D7D873B.7050301@myrealbox.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
> Yes. I removed that "return;" trick, compiled the kernel, it 
> crashed/freezed when starting X. Commented out the APM_ENABLE="YES" in 
> /etc/rc.conf (apm was compiled in the kernel, tough), X started fine. 
> It's related to APM. I only used it so "shutdown -p now" really could 
> power off the pc :).

OK - I think X is changing MTRR values which are being used to
control the mapping of APM into memory.

[printf patch]

> Tried that but didnt't work. But here is the XFree log:

It must crash too quickly to see what the values are.

Santos has tested the patch below for me, and it seems to fix the
problem. (It just refuses to change unknown MTRR values unless you
give it a "force" flag).

	David.

Index: sys/sys/memrange.h
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/sys/sys/memrange.h,v
retrieving revision 1.5
diff -u -r1.5 memrange.h
--- sys/sys/memrange.h	14 Apr 2002 20:19:05 -0000	1.5
+++ sys/sys/memrange.h	9 Sep 2002 20:21:19 -0000
@@ -20,6 +20,7 @@
 #define MDF_BOGUS		(1<<28)	/* we don't like it */
 #define MDF_FIXACTIVE		(1<<29)	/* can't be turned off */
 #define MDF_BUSY		(1<<30)	/* range is in use */
+#define MDF_FORCE		(1<<31)	/* force risky changes */
 
 struct mem_range_desc
 {
Index: sys/i386/i386/k6_mem.c
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/sys/i386/i386/k6_mem.c,v
retrieving revision 1.8
diff -u -r1.8 k6_mem.c
--- sys/i386/i386/k6_mem.c	8 Dec 2000 21:50:08 -0000	1.8
+++ sys/i386/i386/k6_mem.c	2 Sep 2002 10:35:20 -0000
@@ -79,7 +79,7 @@
 		return EINVAL;
 	if (desc->mr_len < 131072 || !powerof2(desc->mr_len))
 		return EINVAL;
-	if (desc->mr_flags &~ (MDF_WRITECOMBINE|MDF_UNCACHEABLE))
+	if (desc->mr_flags &~ (MDF_WRITECOMBINE|MDF_UNCACHEABLE|MDF_FORCE))
 		return EOPNOTSUPP;
 
 	for (bit = ffs(desc->mr_len >> 17) - 1; bit < 15; bit++)
Index: sys/i386/i386/i686_mem.c
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/sys/i386/i386/i686_mem.c,v
retrieving revision 1.14
diff -u -r1.14 i686_mem.c
--- sys/i386/i386/i686_mem.c	14 Apr 2002 20:13:08 -0000	1.14
+++ sys/i386/i386/i686_mem.c	9 Sep 2002 20:22:33 -0000
@@ -392,6 +398,13 @@
 	((last_md = i686_mtrrfixsearch(sc, mrd->mr_base + mrd->mr_len - 1)) == NULL))
 	return(EINVAL);
 
+    /* check we aren't doing something risky */
+    if (!(mrd->mr_flags & MDF_FORCE))
+	for (curr_md = first_md; curr_md <= last_md; curr_md++) {
+	    if ((curr_md->mr_flags & MDF_ATTRMASK) == MDF_UNKNOWN)
+		return (EACCES);
+	}
+
     /* set flags, clear set-by-firmware flag */
     for (curr_md = first_md; curr_md <= last_md; curr_md++) {
 	curr_md->mr_flags = mrcopyflags(curr_md->mr_flags & ~MDF_FIRMWARE, mrd->mr_flags);
@@ -431,6 +444,10 @@
 		/* whoops, owned by someone */
 		if (curr_md->mr_flags & MDF_BUSY)
 		    return(EBUSY);
+		/* check we aren't doing something risky */
+		if (!(mrd->mr_flags & MDF_FORCE) &&
+		  ((curr_md->mr_flags & MDF_ATTRMASK) == MDF_UNKNOWN))
+		    return (EACCES);
 		/* Ok, just hijack this entry */
 		free_md = curr_md;
 		break;
Index: usr.sbin/memcontrol/memcontrol.8
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/usr.sbin/memcontrol/memcontrol.8,v
retrieving revision 1.8
diff -u -r1.8 memcontrol.8
--- usr.sbin/memcontrol/memcontrol.8	14 Jul 2002 14:44:12 -0000	1.8
+++ usr.sbin/memcontrol/memcontrol.8	9 Sep 2002 20:31:01 -0000
@@ -83,7 +83,8 @@
 .It Fl o Ar owner
 Text identifier for this setting (7 char max)
 .It Ar attribute
-Attributes applied to this range; one of
+Attributes applied to this range; combinations of
+.Ar force ,
 .Ar uncacheable ,
 .Ar write-combine ,
 .Ar write-through ,
Index: usr.sbin/memcontrol/memcontrol.c
===================================================================
RCS file: /cvs/FreeBSD-CVS/src/usr.sbin/memcontrol/memcontrol.c,v
retrieving revision 1.7
diff -u -r1.7 memcontrol.c
--- usr.sbin/memcontrol/memcontrol.c	14 Apr 2002 20:19:13 -0000	1.7
+++ usr.sbin/memcontrol/memcontrol.c	9 Sep 2002 20:32:40 -0000
@@ -50,6 +50,7 @@
     {"write-through",	MDF_WRITETHROUGH,	MDF_SETTABLE},
     {"write-back",	MDF_WRITEBACK,		MDF_SETTABLE},
     {"write-protect",	MDF_WRITEPROTECT,	MDF_SETTABLE},
+    {"force",		MDF_FORCE,		MDF_SETTABLE},
     {"unknown",		MDF_UNKNOWN,		0},
     {"fixed-base",	MDF_FIXBASE,		0},
     {"fixed-length",	MDF_FIXLEN,		0},

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi? <200209100810.aa15711>