I have tried to set it once at probe and then leave it in place, however
the NVMe driver does not seem to like it, and the VM does not boot
correctly. I have spent a couple days debugging but I am a bit lost
now.
I am getting timeout issues on boot, which to my knowledge shows NVMe
driver failure:
[ 5.500662] random: crng init done
[ 5.502933] random: 7 urandom warning(s) missed due to ratelimiting
[ 132.077795] dracut-initqueue[472]: Warning: dracut-initqueue timeout - starting timeout scripts
[ 132.614755] dracut-initqueue[472]: Warning: dracut-initqueue timeout - starting timeout scripts
I have checked that all the mappings happened correctly:
[ 4.773570] nvme 0000:00:04.0: nvme setup prp simple is mapping 200 data, with offset 200, from fffffc9acd6c6040, mapped at 7affb200
[ 4.784540] nvme 0000:00:04.0: nvme setup prp simple is mapping 200 data, with offset 400, from fffffc9acd6c6040, mapped at 7affc400
[ 4.794096] nvme 0000:00:04.0: nvme setup prp simple is mapping 200 data, with offset 600, from fffffc9acd6c6040, mapped at 7affd600
[ 4.801983] nvme 0000:00:04.0: nvme setup prp simple is mapping 200 data, with offset 800, from fffffc9acd6c6040, mapped at 7affe800
[ 4.806873] nvme 0000:00:04.0: nvme setup prp simple is mapping 200 data, with offset a00, from fffffc9acd6c6040, mapped at 7afffa00
[ 4.812382] nvme 0000:00:04.0: nvme setup prp simple is mapping 200 data, with offset c00, from fffffc9acd6c6040, mapped at 7b000c00
[ 4.817423] nvme 0000:00:04.0: nvme setup prp simple is mapping 200 data, with offset e00, from fffffc9acd6c6040, mapped at 7b001e00
[ 4.823652] nvme 0000:00:04.0: nvme setup prp simple is mapping 200 data, with offset 200, from fffffc9acd6c60c0, mapped at 7b003200
[ 4.828679] nvme 0000:00:04.0: nvme setup prp simple is mapping 200 data, with offset 400, from fffffc9acd6c60c0, mapped at 7b004400
[ 4.833875] nvme 0000:00:04.0: nvme setup prp simple is mapping 200 data, with offset 600, from fffffc9acd6c60c0, mapped at 7b005600
[ 4.838926] nvme 0000:00:04.0: nvme setup prp simple is mapping 200 data, with offset 800, from fffffc9acd6c60c0, mapped at 7b006800
...
I have compared it to not setting the mask. The only difference in result is
that instead of being mapped to *200|* 400|*600 etc, they are all mapped
to *000. So I believe the mapping is done correctly, and according to
NVMespec figure 108/109, the mapping should have the offset kept. I am not
sure what caused the error that eventually led to the failure. Is there another
bug in the NVMe driver?