Hi,

Today I ran into an issue where setting the default slice with boot0cfg
-s is broken.

This is related to a section of this revision:

+ commit Warner's patch "orb $NOUPDATE,_FLAGS(%bp)"
  to avoid writing to disk in case of a timeout/default choice;

This issue is quite well documented in bin/134907 which has been open
since May 2009.

Reproduced with a fresh nanobsd build:

Boot 1 - Slice 1 active as set by nanobsd image builder:

===
# boot0cfg -v ad0
#   flag     start chs   type       end chs       offset         size
1   0x80      0:  1: 1   0xa5    494: 15:63           63       498897
2   0x00    495:  1: 1   0xa5    989: 15:63       499023       498897
3   0x00    990:  0: 1   0xa5    992: 15:63       997920         3024

version=2.0  drive=0x80  mask=0x3  ticks=182  bell=# (0x23)
options=packet,update,nosetdrv
volume serial ID 9090-9090
default_selection=F1 (Slice 1)
===

Update the active slice to 2:
===
# boot0cfg -s 2 -v ad0
#   flag     start chs   type       end chs       offset         size
1   0x80      0:  1: 1   0xa5    494: 15:63           63       498897
2   0x00    495:  1: 1   0xa5    989: 15:63       499023       498897
3   0x00    990:  0: 1   0xa5    992: 15:63       997920         3024

version=2.0  drive=0x80  mask=0x3  ticks=182  bell=# (0x23)
options=packet,update,nosetdrv
volume serial ID 9090-9090
default_selection=F2 (Slice 2)
===

Reboot and let boot0 time out and boot default slice 2:
===
# boot0cfg -v ad0
#   flag     start chs   type       end chs       offset         size
1   0x80      0:  1: 1   0xa5    494: 15:63           63       498897
2   0x00    495:  1: 1   0xa5    989: 15:63       499023       498897
3   0x00    990:  0: 1   0xa5    992: 15:63       997920         3024

version=2.0  drive=0x80  mask=0x3  ticks=182  bell=# (0x23)
options=packet,update,nosetdrv
volume serial ID 9090-9090
default_selection=F2 (Slice 2)
===
The system actually booted into slice 1 here.
This was verified by dropping to the loader prompt and using show to grab:
loaddev=disk0s1a:

Reboot and hit 2 at the boot0 prompt:
===
# boot0cfg -v ad0
#   flag     start chs   type       end chs       offset         size
1   0x00      0:  1: 1   0xa5    494: 15:63           63       498897
2   0x80    495:  1: 1   0xa5    989: 15:63       499023       498897
3   0x00    990:  0: 1   0xa5    992: 15:63       997920         3024

version=2.0  drive=0x80  mask=0x3  ticks=182  bell=# (0x23)
options=packet,update,nosetdrv
volume serial ID 9090-9090
default_selection=F2 (Slice 2)
===

This time we really boot into slice 2.

The attached patch backs out the relevant part of r186598.

There was a post on the embedded list that suggested this work around:
    echo 'a 2' | fdisk -f /dev/stdin ad0
    boot0cfg -s 2 ad0

There are 2 issues with this:
1) It can't be done without setting kern.geom.debugflags to 0x10.
2) It resulted in most/all commands resulting in the error message
"Device not configured" including the second command and 'shutdown -r now'.

Both of which leave this really work around fairly broken.


Tom

Index: boot0.S
===================================================================
--- boot0.S     (revision 213760)
+++ boot0.S     (working copy)
@@ -373,7 +373,6 @@
         * Timed out or default selection
         */
 use_default:   movb _OPT(%bp),%al              # Load default
-               orb $NOUPDATE,_FLAGS(%bp)       # Disable updates
                jmp check_selection             # Join common code
 
        /*

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to