New PowerEdge T640 server needs BIOS update, however, it borks out with:
terminate called after throwing an instance of 'smbios::InternalErrorImpl'
what(): Could not instantiate SMBIOS table.
/opt/dell/updatepackage/BIOS_4F4K0_LN_1.4.8.BIN-64420.wnGVr8/spsetup.sh: line 1331:
65177 Aborted $cmd "$@"
.
The update failed to complete
ERROR: BIOS_4F4K0_LN_1.4.8.BIN execution MAY have failed, or you answered
NO to reboot, sorry (return_code=1)
(NOTE: the last message is from my 'dup_run_debian' wrapper script that works
around various DUP kit issues related to non-POSIX /bin/sh invocations,
RHEL-presumptions, xterm forced uses, blah, blah, blah of various DUP kits that
i've had to struggle with in the past. THANKFULLY, Dell's getting serious
about fixing some of these things in the past couple years)
i found the error is in spsetup.sh calling _execCmd() on 'biosie -u', and
strace sez:
3359 open("/dev/mem", O_RDONLY) = 3
3359 mmap(NULL, 65536, PROT_READ, MAP_PRIVATE, 3, 0xe0000) = 0x7fb6f4c63000
3359 munmap(0x7fb6f4c63000, 65536) = 0
3359 mmap(NULL, 65536, PROT_READ, MAP_PRIVATE, 3, 0xf0000) = 0x7fb6f4c63000
3359 munmap(0x7fb6f4c63000, 65536) = 0
3359 mmap(NULL, 65536, PROT_READ, MAP_PRIVATE, 3, 0x6ca00000) = -1 EPERM
(Operation not permitted)
3359 futex(0x7fb6f3bf01a0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
3359 write(2, "terminate called after throwing "..., 48) = 48
3359 write(2, "smbios::InternalErrorImpl", 25) = 25
3359 write(2, "'\n", 2) = 2
3359 write(2, " what(): ", 11) = 11
3359 write(2, "Could not instantiate SMBIOS tab"..., 35) = 35
3359 write(2, "\n", 1) = 1
ran across this:
https://www.phoronix.com/scan.php?page=news_item&px=Linux-4.16-Def-Strict-Dev-Mem
"...Enabling CONFIG_STRICT_DEVMEM implements strict access to /dev/mem so that
it only allows user-space access to memory mapped peripherals...."
~/BIOS# grep STRICT_DEVMEM /boot/config-$(uname -r)
CONFIG_STRICT_DEVMEM=y
CONFIG_IO_STRICT_DEVMEM=y
Sigh.
~/BIOS# cat /dev/mem | wc -c
cat: /dev/mem: Operation not permitted
1048576
So, we have a 1MB access limit, as expected with CONFIG_STRICT_DEVMEM
and sure enough, 'biosie -u' is trying to read offset 0x6ca00000, which is
definitely > 1MB (the first two are below 1MB and succeed)
AFAICT, This requires rebuilding a kernel from scratch with
'CONFIG_STRICT_DEVMEM=n'
Can anyone from Dell identify if there's something that can be done either in
'biosie' or by arm-twisting Linux kernel devs to allow other regions to be
mapped? (if that's necessary). (is there ANY way, i as a normal customer, can
use a formal channel to report bugs/misfeatures like this?)
thanks,
--stephen
--
Stephen Dowdy - Systems Administrator - NCAR/RAL
303.497.2869 - [email protected] - http://www.ral.ucar.edu/~sdowdy/
_______________________________________________
Linux-PowerEdge mailing list
[email protected]
https://lists.us.dell.com/mailman/listinfo/linux-poweredge