My Lenovo Ideapad 120S laptop has an Intel Graphics 505 adapter (CPU: Pentium N4200 Apolo Lake).
With 12.0-RELEASE, I can kldload /boot/modules/i915kms.ko, /dev/dri and /dev/drm are populated and Xorg's Intel driver works.
With 12.1-BETA3, the same causes my machine to reboot.
When I use /boot/kernel/i915kms.ko from both FreeBSD versions, I have no error message, but /dev/dri and /dev/drm are not created.
The same issue on my VAIO Fit15s notebook (i915 Kabylake).
Under 12.0 stable works OK but in 12.1-RC1, 12.1-RC2 and 12.1-RC3 FreeBSD restart at the moment of the load the module.
(In reply to Vincent DEFERT from comment #0)
You will need to rebuild graphics/drm-fbsd12.0-kmod locally, I have run into this issue as well. I believe there is a incompatibility between 12.1-*'s linuxkpi and 12.0 which requires a rebuild of the kmod.
(In reply to pete from comment #2)
Do you happen to have the backtrace available from a crash caused by this incompatibility? I think we will want to fix this for 12.1.
(In reply to Mark Johnston from comment #3)
Are the instructions from the Handbook (https://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/kerneldebug-gdb.html) appropriate to provide you with a useful backtrace?
(In reply to Vincent DEFERT from comment #4)
Yes, in particular the "backtrace" command at the kgdb prompt.
GNU gdb (GDB) 8.3.1 [GDB v8.3.1 for FreeBSD]
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-portbld-freebsd12.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
Find the GDB manual and other documentation resources online at:
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /boot/kernel/kernel...
Reading symbols from /usr/lib/debug//boot/kernel/kernel.debug...
Unread portion of the kernel message buffer:
<6>[drm] Connector eDP-1: get mode from tunables:
<6>[drm] - kern.vt.fb.modes.eDP-1
<6>[drm] - kern.vt.fb.default_mode
<6>[drm] Connector HDMI-A-1: get mode from tunables:
<6>[drm] - kern.vt.fb.modes.HDMI-A-1
<6>[drm] - kern.vt.fb.default_mode
Fatal trap 12: page fault while in kernel mode
cpuid = 2; apic id = 04
fault virtual address = 0x1
fault code = supervisor read data, page not present
instruction pointer = 0x20:0xffffffff837a690f
stack pointer = 0x28:0xfffffe000047f810
frame pointer = 0x28:0xfffffe000047f880
code segment = base rx0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags = interrupt enabled, resume, IOPL = 0
current process = 0 (softirq_2)
trap number = 12
panic: page fault
cpuid = 2
time = 1570553153
KDB: stack backtrace:
#0 0xffffffff80c1d207 at kdb_backtrace+0x67
#1 0xffffffff80bd053d at vpanic+0x19d
#2 0xffffffff80bd0393 at panic+0x43
#3 0xffffffff810a7d2c at trap_fatal+0x39c
#4 0xffffffff810a7d79 at trap_pfault+0x49
#5 0xffffffff810a736f at trap+0x29f
#6 0xffffffff8108129c at calltrap+0x8
#7 0xffffffff838a2480 at tasklet_handler+0x100
#8 0xffffffff80c1bac4 at gtaskqueue_run_locked+0x144
#9 0xffffffff80c1b728 at gtaskqueue_thread_loop+0x98
#10 0xffffffff80b90b93 at fork_exit+0x83
#11 0xffffffff810822de at fork_trampoline+0xe
Dumping 619 out of 3880 MB:..3%..11%..21%..31%..42%..52%..62%..73%..81%..91%
__curthread () at /usr/src/sys/amd64/include/pcpu.h:234
234 __asm("movq %%gs:%P1,%0" : "=r" (td) : "n" (OFFSETOF_CURTHREAD));
(kgdb) #0 __curthread () at /usr/src/sys/amd64/include/pcpu.h:234
#1 doadump (textdump=<optimized out>) at /usr/src/sys/kern/kern_shutdown.c:371
#2 0xffffffff80bd0138 in kern_reboot (howto=260)
#3 0xffffffff80bd0599 in vpanic (fmt=<optimized out>, ap=<optimized out>)
#4 0xffffffff80bd0393 in panic (fmt=<unavailable>)
#5 0xffffffff810a7d2c in trap_fatal (frame=0xfffffe000047f750, eva=1)
#6 0xffffffff810a7d79 in trap_pfault (frame=0xfffffe000047f750, usermode=0)
#7 0xffffffff810a736f in trap (frame=0xfffffe000047f750)
#8 <signal handler called>
#9 0xffffffff837a690f in ?? ()
#10 0xffffffff81a01004 in hc_source_mask ()
#11 0x0000000100000001 in ?? ()
#12 0x0000000000000000 in ?? ()
The issue is that packages for FreeBSD are built on the lowest common supported version. This means that packages for FreeBSD 12 (both 12.0 and 12.1, as well as 12-STABLE) are built on FreeBSD 12.0.
There has been a change somewhere in the time between 12.0 and 12.1 that makes certain kernel modules, i915kms.ko is one of them (both drm-fbsd12.0-kmod and drm-legacy-kmod) fail when loaded on a FreeBSD 12.1 kernel.
The best work around for this is to simply build the kernel module from ports on FreeBSD 12.1. This is safe to do even on systems that otherwise use binary packages.
This is a known issue, with no really good solution currently.
It has been discussed within the graphics team quite a lot, however, I was unaware that this PR existed.
https://github.com/FreeBSDDesktop/kms-drm/issues/183 is the issue we have open on github.
FreeBSD Graphics Team
Reopen, this is going to be a significant issue on 12.1 until 12.0 goes EOL and this PR is useful for tracking the issue.
*** Bug 241787 has been marked as a duplicate of this bug. ***
The issue is NOT FIXED!!!
After I had to manually build the port, PKG did a replace with a newer version that was built on 12.0 and again CAUSED REBOOT LOOP ON A MOUNTED WORKING FILESYSTEMS.
Another workaround, except building the port by hand, is to PKG LOCK it, so updates won't break your system.
I would say:
1. THIS MODULE IS HIGHLY EXPERIMENTAL AND BREAKS THE PRODUCTION SYSTEMS IN MANY WAYS.
2. THIS MODULE SHOULD NOT BE AVAILABLE IN A RELEASE.
3. THIS MODULE SHOULD NOT BE AVAILABLE VIA PKG.
4. THIS MODULE SHOULD NOT MAKE FreeBSD LOOK LIKE LINUX.
Here is a GitHub issue to follow: https://github.com/FreeBSDDesktop/kms-drm/issues/183
(In reply to Tomasz "CeDeROM" CEDRO from comment #10)
No one has claimed this has been fixed. Byt keeping track of which ports need to be installed from ports, and which from packages, must be done by the person administrating the system.
I would also like to ask a question, how would you go about this? We can't put the code in the base system for a number of reasons, licensing being one, and different pace of updating being another, so it has to live in ports.
This is really two bugs:
(1) Package repository contains an incompatible kmod which panics the system instead of checking compatibility.
(2) Package repository doesn't contain a working i915kms for 12.1
(In reply to Niclas Zeising from comment #12)
To fix (1) I propose a much simpler fix: Patch the kmod itself to take responsibility for checking whether the kernel is compatible, since the kernel otherwise assumes modules to be forward compatible.
While indeed, working around the issue is easy enough for the system administrator, I agree with Tomasz that the binary pkg situation is unacceptable.
Hey Niclas :-)
My "not fixed" was response to Vincent DEFERT 2019-11-04 19:32:26 UTC / Status: New → Closed / Resolution: --- → FIXED.
> No one has claimed this has been fixed. Byt keeping track of which ports
> need to be installed from ports, and which from packages, must be done by
> the person administrating the system.
Negative. Providing malicious PKG that WILL CRASH the system and lead to DESTROY ITS DATA is the responsibility of the package creator, committer and maintainer. Also the FreeBSD Core Team NOT to allow such situation to happen. If there is such _risk_ it should not land in production/release! Now we have such _existing_situation_ in the production systems! Really not cool :-(
User / Admin hits the `pkg update upgrade` on a _PRODUCTION_ system with an official production packages so it gets a production system updated and working.
We cannot get with FreeBSD to a Linux mindset where user needs to perform additional 472847824 tasks to make things work. It never happened before and I really hope it never will.
> I would also like to ask a question, how would you go about this?
The answer is above. The situation should never happen. Do not push the bleeding edge into the production. Block all known issues in a way they would not happen on a production system.
1. Remove DRM-KMOD out of PKG at all until there is a working solution. Leaving it in PKG causes production systems to crash. What more evidence do you need?
2. Do not allow Linux like programming where API changes from release to release into FreeBSD Kernel. I am sure most users are good to wait for quality code rather than bleeding edge Kernel. We avoid Linux for that reason.
Tomasz "CeDeROM" CEDRO that was uncalled for. being a dick about it isn't going to help. We're quite aware of the situation and are working on a solution. You can speed that along, of course, by providing patches. Until then, if you can't conduct yourself in a civil manner, please don't say anything.
Tomasz "CeDeROM" CEDRO your tone is insulting and not helpful. There's no need to be a dick about this. Please refrain from commenting further if you can't conduct yourself in a civil manner.
(In reply to Theron Tarigo from comment #13)
Thank you Tarigo :-) I did a fix by rebuilding the module on a 12.1, but then it was replaced by pkg upgrade, causing the problem again. I would prefer to have such package globally blacklisted rather than blocking it myself after it crashed my production machine.
I would really prefer to see a message from PKG "Please build this package from Ports otherwise it will not work reliably on this system" rather than getting back into system crash loop after I considered problem to be solved.
The root cause of this problem, and I hope no more problems like this in future, is allowing Linux like bleeding edge approach in Kernel, including Kernel API changes with each release. I am sure there can be a good solution for that, so we do don't need to "fix problems that never existed before"^TM. Otherwise what would be the difference between FreeBSD and Linux? :-)
I think the initial question we have to answer here is: are we intending to produce a drm-fbsd12.1-kmod port, or are we going to wait until the new year for 12.0 to EOL so the problem will resolve itself?
If the latter, that's fine, but we should at least add a pkg-message saying not to use i915kms on 12.1. And we should have a separate discussion about how to address this scenario in the future.
(In reply to Warner Losh from comment #16)
Just remove that package from PKG repository. I already proposed that over mailing lists. That would push user to use Ports which is a working quick fix for the time.
Regarding the dicks, I would really prefer not to see them in my Kernel. I stopped using Linux at 2.4.10 exactly when the same issue arised with graphics card kernel api change. Then it became standard. Please do not do that in FreeBSD.
(In reply to Tomasz "CeDeROM" CEDRO from comment #19)
You don't have to install the package, at all. It is not possible to have it in ports, but not available as a package, and that would also break for people using FreeBSD 12.0, where the package works.
Guys I really appreciate your work on FeeBSD my beloved OS. I know the difference between user and creator. You have far more works and responsibilities. I know. Please just do not go the Linux way. That's all :-)
(In reply to Adam Weinberger from comment #18)
We (the graphcis team) have some patches and ideas about providing a drm kmod package that builds on FreeBSD 12.0 using 12.1 headers, and then would work on FreeBSD 12.1 (but not 12.0). This task is not as easy as it seams, though.
We are also working on a more long term solution to the problem, probably using a DKMS like approach, where the module is built when it is installed, rather than on the ports cluster. The package would probably contain two parts, a pre-built module that would be installed if the local system version matches the system version where the package was built, and the means to build it locally if this is not the case. This solution requires more thought though.
Having a way to not load the module (or issue an error when it is loaded, and then stop loading) if the versions doesn't match is also something we have discussed. A similar approach has been suggested for virtualbox kmod, which exhibits the same issues, but not been accepted there: https://reviews.freebsd.org/D16119 .
(In reply to Niclas Zeising from comment #20)
Well, the difference is:
1. Linux: It works on 12.0 but crashes 12.1 but we will ship it anyway.
2. BSD: It works on 12.0 but crashes 12.1 so we block it so no one gets hurt.
What is the resistance to adding NO_PACKAGE=yes to the port *right now* and the issue resolves itself next time the repository is rebuilt? 12.0 users will revolt? At this point: Existing installations of 12.0 will keep working, just not receive any drm-kmod pkg upgrades. New installations of 12.0 (why?) would be in exactly same camp as 12.1: need to build the port locally.
(In reply to Niclas Zeising from comment #22)
I think that seems like a great long-term approach, Niclas!
For now though, can we please add something to pkg-message? We need to warn people that this problem exists. Let's take some sort of step to prevent others from hitting this showstopping bug.
A long-term solution is great, but people are going to keep running into this bug, and we can at least do something about that.