Date: Wed, 22 Feb 2017 08:08:02 +0200 From: Konstantin Belousov <kostikbel@gmail.com> To: Steve Kargl <sgk@troutmask.apl.washington.edu> Cc: freebsd-current@freebsd.org, freebsd-hackers@freebsd.org Subject: Re: drm2, i915kms cause instant lock-up Message-ID: <20170222060802.GM2092@kib.kiev.ua> In-Reply-To: <20170222053242.GA4204@troutmask.apl.washington.edu> References: <20170220235224.GA91194@troutmask.apl.washington.edu> <20170222053242.GA4204@troutmask.apl.washington.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Feb 21, 2017 at 09:32:42PM -0800, Steve Kargl wrote: > Well, I found the guilty commit. r313934 breaks loading > either i915kms.ko or drm2.ko on a Dell Latitude D530 laptop. > details below. > > I'll also note that starting at r313902 or so, after > loading i915kms.ko console output on vt is slooooooow. > A simply 'time ls /usr/bin' reports 6.27 real, 4.00 user, > and 1.08 sys, but the drawing on screen takes more than > 30 seconds. One can painfully watch each line of output > be rastered across the screen. > > Kib you can read the details below. If you need more info, > ping me. I did notice that i686_mem.c used constants of the > form 0xffffULL prior to the merge into x86_mem.c. You now > use 0xfffUL. I have no idea whether this is related to > cause. Well, yes, I found two instances more of such bugs, one seems to be innocent, and another might be the issue. Please try this on top of r313934 or the latest HEAD. diff --git a/sys/x86/x86/x86_mem.c b/sys/x86/x86/x86_mem.c index 8e93883863a..d639224f840 100644 --- a/sys/x86/x86/x86_mem.c +++ b/sys/x86/x86/x86_mem.c @@ -260,7 +260,7 @@ x86_mrfetch(struct mem_range_softc *sc) /* Compute the range from the mask. Ick. */ mrd->mr_len = (~(msrv & mtrr_physmask) & - (mtrr_physmask | 0xfffL)) + 1; + (mtrr_physmask | 0xfffLL)) + 1; if (!mrvalid(mrd->mr_base, mrd->mr_len)) mrd->mr_flags |= MDF_BOGUS; @@ -638,7 +638,7 @@ x86_mrinit(struct mem_range_softc *sc) * Determine the size of the PhysMask and PhysBase fields in * the variable range MTRRs. */ - mtrr_physmask = (((uint64_t)1 << cpu_maxphyaddr) - 1) & ~0xfffUL; + mtrr_physmask = (((uint64_t)1 << cpu_maxphyaddr) - 1) & ~0xfffULL; /* If fixed MTRRs supported and enabled. */ if ((mtrrcap & MTRR_CAP_FIXED) && (mtrrdef & MTRR_DEF_FIXED_ENABLE)) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20170222060802.GM2092>