On Wed, Jan 31, 2018 at 07:51:08PM +0100, Jeremie Courreges-Anglas wrote: > On Wed, Jan 31 2018, Patrick Wildt <patr...@blueri.se> wrote: > > On Wed, Jan 31, 2018 at 09:46:52AM -0800, Mike Larkin wrote: > >> On Wed, Jan 31, 2018 at 05:12:03PM +0100, Patrick Wildt wrote: > >> > Hi, > >> > > >> > this diff allows us to load the Intel microcode much earlier. So far > >> > we load it after the CPUs have identified and then have to update the > >> > CPU flags afterwards. This is not good since we have to assume that > >> > those updates can remove and add instructions and other features. We > >> > need to load it earlier. The only other option is to have the boot- > >> > blocks load the ucode for us. > >> > > >> > One issue though is actually loading and passing the binaries that can > >> > range from 2k to 90k of binary size. As far as I know we don't use the > >> > lower 16M of memory on amd64, which the bootblocks use as heap. Thus > >> > allocating a buffer for using alloc() should be "fine" if we make sure > >> > that we read the ucode after we early enough. kettenis@ tells me that > >> > cpu_startup() is the earliest MD code which can use malloc(9), so that > >> > is where we can copy the ucode from the bootloader to kernel land. > >> > > >> > I have tested this with efiboot(8), more tests would be appreciated. > >> > > >> > Thanks, > >> > Patrick > >> > > >> > >> I like the idea. We should probably make sure it works with sr crypto also, > >> I can check that later today unless someone beats me to it. > > > > That would be nice! > > > >> After that, I'll review the diff more carefully. Are you looking for oks > >> yet, > >> or is this just being passed around for comments at this time? > > > > I can start collecting OKs I guess. :) I have no other changes pending > > for this, so as long as there is no negative feedback I intend to commit > > this at some point. Before doing that, I want to collect a bit of feed- > > back and test results. > > Looks like ramdisks need more love:
That is indeed correct. I'm very sorry. I falsely removed the ifdef for RAMDISK. I will fix this and make sure the bootblocks also prop- erly survive make build and release. Patrick > [...] > cp /usr/src/sys/conf/param.c . > cc -g -Werror -Wall -Wimplicit-function-declaration -Wno-uninitialized > -Wno-pointer-sign -Wno-address-of-packed-member -Wno-constant-conversion > -Wframe-larger-than=2047 -mcmodel=kernel -mno-red-zone -mno-sse2 -mno-sse > -mno-3dnow -mno-mmx -msoft-float -fno-omit-frame-pointer -ffreestanding > -fno-pie -fno-stack-protector -Oz -pipe -nostdinc -I/usr/src/sys > -I/usr/src/sys/arch/amd64/compile/RAMDISK_CD/obj -I/usr/src/sys/arch > -DTIMEZONE="0" -DDST="0" -DSMALL_KERNEL -DNO_PROPOLICE -DBOOT_CONFIG > -DPCIVERBOSE -DSCSITERSE -DFFS -DFFS2 -DEXT2FS -DNFSCLIENT -DCD9660 -DUDF > -DMSDOSFS -DINET6 -DCRYPTO -DRAMDISK_HOOKS -DMINIROOTSIZE="0x1cc0" > -DMAXUSERS=4 -D_KERNEL -MD -MP -c param.c > cc -g -Werror -Wall -Wimplicit-function-declaration -Wno-uninitialized > -Wno-pointer-sign -Wno-address-of-packed-member -Wno-constant-conversion > -Wframe-larger-than=2047 -mcmodel=kernel -mno-red-zone -mno-sse2 -mno-sse > -mno-3dnow -mno-mmx -msoft-float -fno-omit-frame-pointer -ffreestanding > -fno-pie -fno-stack-protector -Oz -pipe -nostdinc -I/usr/src/sys > -I/usr/src/sys/arch/amd64/compile/RAMDISK_CD/obj -I/usr/src/sys/arch > -DTIMEZONE="0" -DDST="0" -DSMALL_KERNEL -DNO_PROPOLICE -DBOOT_CONFIG > -DPCIVERBOSE -DSCSITERSE -DFFS -DFFS2 -DEXT2FS -DNFSCLIENT -DCD9660 -DUDF > -DMSDOSFS -DINET6 -DCRYPTO -DRAMDISK_HOOKS -DMINIROOTSIZE="0x1cc0" > -DMAXUSERS=4 -D_KERNEL -MD -MP -c ioconf.c > cp /usr/src/sys/arch/amd64/conf/ld.script ld.script > sh /usr/src/sys/conf/newvers.sh > cc -g -Werror -Wall -Wimplicit-function-declaration -Wno-uninitialized > -Wno-pointer-sign -Wno-address-of-packed-member -Wno-constant-conversion > -Wframe-larger-than=2047 -mcmodel=kernel -mno-red-zone -mno-sse2 -mno-sse > -mno-3dnow -mno-mmx -msoft-float -fno-omit-frame-pointer -ffreestanding > -fno-pie -fno-stack-protector -Oz -pipe -nostdinc -I/usr/src/sys > -I/usr/src/sys/arch/amd64/compile/RAMDISK_CD/obj -I/usr/src/sys/arch > -DTIMEZONE="0" -DDST="0" -DSMALL_KERNEL -DNO_PROPOLICE -DBOOT_CONFIG > -DPCIVERBOSE -DSCSITERSE -DFFS -DFFS2 -DEXT2FS -DNFSCLIENT -DCD9660 -DUDF > -DMSDOSFS -DINET6 -DCRYPTO -DRAMDISK_HOOKS -DMINIROOTSIZE="0x1cc0" > -DMAXUSERS=4 -D_KERNEL -MD -MP -c vers.c > LD="ld" sh makegap.sh 0xcccccccc > cc -g -Werror -Wall -Wimplicit-function-declaration -Wno-uninitialized > -Wno-pointer-sign -Wno-address-of-packed-member -Wno-constant-conversion > -Wframe-larger-than=2047 -mcmodel=kernel -mno-red-zone -mno-sse2 -mno-sse > -mno-3dnow -mno-mmx -msoft-float -fno-omit-frame-pointer -ffreestanding > -fno-pie -fno-stack-protector -Oz -pipe -nostdinc -I/usr/src/sys > -I/usr/src/sys/arch/amd64/compile/RAMDISK_CD/obj -I/usr/src/sys/arch > -DTIMEZONE="0" -DDST="0" -DSMALL_KERNEL -DNO_PROPOLICE -DBOOT_CONFIG > -DPCIVERBOSE -DSCSITERSE -DFFS -DFFS2 -DEXT2FS -DNFSCLIENT -DCD9660 -DUDF > -DMSDOSFS -DINET6 -DCRYPTO -DRAMDISK_HOOKS -DMINIROOTSIZE="0x1cc0" > -DMAXUSERS=4 -D_KERNEL -MD -MP -c swapbsd.c > ld -T ld.script -X --warn-common -nopie -o bsd ${SYSTEM_HEAD} vers.o ${OBJS} > machdep.o: In function `cpu_startup': > /usr/src/sys/arch/amd64/amd64/machdep.c:312: undefined reference to > `cpu_ucode_setup' > cpu.o: In function `cpu_attach': > /usr/src/sys/arch/amd64/amd64/cpu.c:409: undefined reference to > `cpu_ucode_apply' > /usr/src/sys/arch/amd64/amd64/cpu.c:422: undefined reference to > `cpu_ucode_apply' > *** Error 1 in /usr/src/sys/arch/amd64/compile/RAMDISK_CD (Makefile:543 > 'bsd': @echo ld -T ld.script -X --warn-common -nopie -o bsd '${SYSTE...) > *** Error 1 in /usr/src/distrib/amd64/ramdisk_cd (Makefile.inc:81 'bsd') > *** Error 1 in /usr/src/distrib/amd64 (<bsd.subdir.mk>:48 'all') > *** Error 1 in /usr/src/distrib (<bsd.subdir.mk>:48 'all') > *** Error 1 in . (Makefile:292 'distrib') > *** Error 1 in . (Makefile:268 'do-release') > *** Error 1 in /usr/src/etc (Makefile:251 'release') > russell /usr/src$ > > > -- > jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE