Hi, (First sorry for the thread break, I have some problems in receiving mails actually.)
I dig a bit inside the code of bootloader, and I think it is possible that the bootloader is unable to see hibernate signature when FDE is in use. Taking boot(bootdev) as entrypoint (stand/boot/boot.c +60): it calls machdep() (arch/amd64/stand/libsa/machdep.c +48) and call each probe routines. In the list of probe routines, there is diskprobe() (arch/amd64/stand/libsa/diskprobe.c +246), which call: - hardprobe() (line 122), - and only after sr_probe() (line 270) It is hardprobe() that will call check_hibernate(): - allocating dip struct - running check_hibernate() to set BDI_HIBVALID if HIBERNATE_MAGIC is found. To read the value, it uses dip->strategy() function. arch/amd64/stand/libsa/diskprobe.c 491 error = dip->strategy(dip, F_READ, (daddr32_t)sec, sizeof hib, &hib, NULL); 492 if (error == 0 && hib.magic == HIBERNATE_MAGIC) { 493 /* Hibernate present */ 494 dip->bios_info.flags |= BDI_HIBVALID; 495 printf("&"); 496 } the actual code is biosstrategy() (arch/amd64/stand/libsa/biosdev.c +722) which will call sr_strategy() if dip->sr_vol is not NULL. arch/amd64/stand/libsa/biosdev.c 721 /* Intercept strategy for softraid volumes. */ 722 if (dip->sr_vol) 723 return sr_strategy(dip->sr_vol, rw, blk, size, buf, rsize); If I correctly understood the code, dip->sr_vol is initialized on first biosopen() call. But at this point, we didn't call it. Additionally, sr_probe() isn't called either. So dip->strategy() will read the encrypted data and not decrypted one, so it is unable to found HIBERNATE_MAGIC (as it is encrypted). Thanks. -- Sebastien Marie