To get a GNU/Linux to reboot properly and not hang in the final step, you need to pass another parameter to the kernel. You need to pass reboot=pci to Linux.
Currently, Debian and Debian-derivatives such as Ubuntu tend to use Grub2 as the bootloader, by default. You need to:
- edit the /etc/default/grub configuration file, as root, and using your favorite editor
- find line that looks similar to GRUB_CMDLINE_LINUX=""
- if it contained anything inside quotes, don't delete those commands!
- into the quotes, add reboot=pci but do not delete existing text
- back in command line, run update-grub as root user
It should now work flawlessly!