Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
misc:acpi_patch [2025/04/26 01:13] rqmmisc:acpi_patch [2025/06/29 00:26] (current) 92.40.32.213
Line 6: Line 6:
 Booting the stock installer or kernel will cause the boot procedure to hang quite early on, usually after identifying the hard disks: Booting the stock installer or kernel will cause the boot procedure to hang quite early on, usually after identifying the hard disks:
  
-INSERT PHOTO+{{ :misc:acpi-bug-macbook-12-1.jpg?direct&640 |}}
  
 As @brynet@bsd.network pointed out, it is caused by "some kind of regression that triggers a weird ACPI firmware bug on this machine."  As @brynet@bsd.network pointed out, it is caused by "some kind of regression that triggers a weird ACPI firmware bug on this machine." 
Line 48: Line 48:
   * If going the "Custom installer" route, [[https://www.openbsd.org/faq/faq4.html#MkInsMedia|OpenBSD FAQ - Creating Install Media ]]   * If going the "Custom installer" route, [[https://www.openbsd.org/faq/faq4.html#MkInsMedia|OpenBSD FAQ - Creating Install Media ]]
  
-=== The Slow Boot Way ===+=== I. The Slow Boot Way ===
 Waiting out the slow boot times is probably a little bit easier, and it doesn't require you to have another working OpenBSD install that you can use to compile a custom kernel and create a custom installer image. Waiting out the slow boot times is probably a little bit easier, and it doesn't require you to have another working OpenBSD install that you can use to compile a custom kernel and create a custom installer image.
  
Line 89: Line 89:
  
 == 4. Compiling == == 4. Compiling ==
 +Follow the ''release(8)'' man page closely here. 
 +As root, first, change directories to the appropriate directory in ''/sys''. Make sure you are in the right folder because ''/usr/src/sys'' follows the same directory structure, but if you compile from there, you won't get the right results. This was a lesson learned //The Hard Way//™. So to be on the safe side do exactly as the manpage says, and run:
 +<code>
 +$ doas -s
 +# cd /sys/arch/amd64/compile/GENERIC.MP
 +</code>
 +
 +Then proceed as the manual suggests, with root privileges - otherwise "make install" will fail. This is another lesson learned //The Hard Way//™. 
 +<code>
 +# make obj
 +# make config
 +# make && make install
 +</code>
 +
 +After you reboot, the new kernel should be the one in use. It will be easy to tell whether the patch worked, because if your system boots "normally", it worked, if you are back at waiting for 2+ hours at "sd0", it failed and you need to check over whether you did everything correctly.
 +
 +
 +----
 +
 +
 +===== Updating the patched system =====
 +If you want to avoid having to wait 2+ hours again TWICE everytime you have to update your system, there is, fortunately, a much quicker way to do it. Basically the less painfully slow update method is a hybrid of manual and automatic installation with custom-compiling the kernel. Credits go to [[https://marc.info/?l=openbsd-tech&m=175031825008339&w=2|Stuart Henderson]] for pointing out this possibility.
 +
 +The below will be a walkthrough that follows ''-current'', a few commands will be different for ''-stable'', these will be indicated.
 +
 +==== 0. Preparation ====
 +=== 0.a. READ UP. Seriously. ===
 +Read through the [[https://www.openbsd.org/faq/upgrade77.html#NoInstKern|OpenBSD Manual Installation howto in the FAQ]] first as well as the man pages linked above, if you have not done so. They will make your life much much easier.
 +
 +=== 0.b. Preparation ===
 +Follow the "Preparation" steps on the Manual Upgrade page: especially on becoming root "properly" and installing the boot blocks. Make sure you install the boot blocks to the appropriate drive, do not just go with "sd0" as it was in the tutorial, if, say your root is on e.g. sd3.
 +
 +==== 1. Get the upgrade files ====
 +Fetch the updates and move them to a new location. When you run ''sysupgrade'' the installer files are stored in ''/home/_sysupgrade'', and two extra files are created, ''/bsd.update'' and ''/auto_upgrade.conf''. You want to copy the installer files from ''/home/_sysupgrade'' somewhere else, and delete the auto-update files.
 +<code>
 +# sysupgrade -ns
 +# mkdir /usr/update
 +# mv /home/_sysupgrade/* /usr/update/
 +# rm /{bsd.update,auto_upgrade.conf}
 +</code>
 +**NB**: On ''-stable'' you want to run ''sysupgrade -n''.
 +
 +==== 2. Update the source tree ====
 +Follow the **Anonymous CVS** guides for updating the source tree to the latest version. 
 +☛ **ASIDE** - What to do if acpi.c changes drastically and the patch doesn't work anymore? ((The file we have been patching, ''/usr/src/sys/dev/acpi/acpi.c'', might change in the future. It is good to check the CVS logs, or keep an eye on the [[https://github.com/openbsd/src/commits/master/sys/dev/acpi/acpi.c|acpi.c on GitHub's CVS mirror]].  If you would see that the lines we have been working with have changed in the source or new features have been introduced, then you need to revert your local modifications to the CVS version. To do this, you need to run,
 +<code>
 +$ cd /usr/src/sys/dev/acpi/
 +$ cvs update -C acpi.c
 +</code>
 +CVS will tell you where it stashed the previous file, it usually starts with ".#" or similar. You can then run ''diff'' and see what the changes were, decide whether you need to find the lines that were previously around :823 and automatically or manually patch again, or not.))
 +
 +To update the source tree on ''-current'', run:
 +<code>
 +$ cd /usr/src
 +$ cvs -q up -Pd -A
 +</code>
 +**NB**: On ''-stable'' you want to use '' -rOPENBSD_7_7'' as the last parameter instead of "-A"
 +
 +==== 3. Re-compile the GENERIC.MP Kernel ====
 +See above, but run ''# make clean'' before compiling and **do not** run ''# make install'' at the end:
 +<code>
 +# cd /sys/arch/amd64/compile/GENERIC.MP/
 +# make clean
 +# make obj
 +# make config
 +# make
 +</code>
 +Your newly compiled kernel file, ''bsd.gdb'' will be in the symlinked ''obj'' directory. The symlink points to ''/usr/obj/sys/arch/amd64/compile/GENERIC.MP/bsd.gdb''.
 +
 +Now we have:
 +  * The latest update files stored away safely 
 +  * The latest kernel, compiled with our own patch
 +
 +So it is time to move on to the installation.
 +
 +==== 4. Manual installation ====
 +This follows closely the official [[https://www.openbsd.org/faq/upgrade77.html#NoInstKern|manual installation guide]], but diverges for the installation of the kernel.
 +
 +=== 4.a. Make sure you have done all the preparation in the official guide ===
 +Did you?
 +
 +=== 4.b Install the newly compiled kernel ===
 +We did not run ''make install'' after compiling because we are going to do this little dance as suggested:
 +<code>
 +# cd /usr/update
 +# ln -f /bsd /obsd 
 +# cp /usr/obj/sys/arch/amd64/compile/GENERIC.MP/bsd.gdb /nbsd && mv /nbsd /bsd
 +# cp bsd.rd /
 +# cp bsd /bsd.sp # You might not even have this file, relatively safe to skip this last one if you do not intend to run in single-processor mode
 +</code>
 +
 +=== 4.c follow the rest of the Manual Install Process ===
 +Follow closely the linked manual installation guide, and continue the process: Enable KARL; Install new userland. Reboot. Run MAKEDEV,  update the boot loader, run ''sysmerge'' and ''fw_update''.
 +
 +DONE!
 +