[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86: improve "PCI reset register" rebooting
commit 2bd6add4f5fa4ea2ba9297d6139e9dea42ea70a9 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Fri Mar 13 16:33:57 2015 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Fri Mar 13 16:33:57 2015 +0100 x86: improve "PCI reset register" rebooting The way this method works allows for honoring "warm" reboot requested by the user and additionally has a way to power-cycle the machine. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- docs/misc/xen-command-line.markdown | 4 +++- xen/arch/x86/shutdown.c | 18 ++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/misc/xen-command-line.markdown b/docs/misc/xen-command-line.markdown index f0a3112..1dda1f0 100644 --- a/docs/misc/xen-command-line.markdown +++ b/docs/misc/xen-command-line.markdown @@ -1145,7 +1145,7 @@ The following resources are available: Technology. ### reboot -> `= t[riple] | k[bd] | a[cpi] | p[ci] | e[fi] | n[o] [, [w]arm | [c]old]` +> `= t[riple] | k[bd] | a[cpi] | p[ci] | P[ower] | e[fi] | n[o] [, [w]arm | [c]old]` > Default: `0` @@ -1165,6 +1165,8 @@ Specify the host reboot method. `pci` instructs Xen to reboot the host using PCI reset register (port CF9). +`Power` instructs Xen to power-cycle the host using PCI reset register (port CF9). + 'efi' instructs Xen to reboot using the EFI reboot call (in EFI mode by default it will use that method first). diff --git a/xen/arch/x86/shutdown.c b/xen/arch/x86/shutdown.c index 9ec8f97..0e1499d 100644 --- a/xen/arch/x86/shutdown.c +++ b/xen/arch/x86/shutdown.c @@ -33,6 +33,7 @@ enum reboot_type { BOOT_KBD = 'k', BOOT_ACPI = 'a', BOOT_CF9 = 'p', + BOOT_CF9_PWR = 'P', BOOT_EFI = 'e', }; @@ -47,6 +48,7 @@ static int reboot_mode; * kbd Use the keyboard controller. cold reset (default) * acpi Use the RESET_REG in the FADT * pci Use the so-called "PCI reset register", CF9 + * Power Like 'pci' but for a full power-cyle reset * efi Use the EFI reboot (if running under EFI) */ static enum reboot_type reboot_type = BOOT_INVALID; @@ -68,8 +70,9 @@ static void __init set_reboot_type(char *str) case 'a': case 'e': case 'k': - case 't': + case 'P': case 'p': + case 't': reboot_type = *str; break; } @@ -571,11 +574,18 @@ void machine_restart(unsigned int delay_millisecs) reboot_type = BOOT_KBD; break; case BOOT_CF9: + case BOOT_CF9_PWR: { - u8 cf9 = inb(0xcf9) & ~6; - outb(cf9|2, 0xcf9); /* Request hard reset */ + u8 cf9 = inb(0xcf9) & ~0x0e; + + /* Request warm, hard, or power-cycle reset. */ + if ( reboot_type == BOOT_CF9_PWR ) + cf9 |= 0x0a; + else if ( reboot_mode == 0 ) + cf9 |= 0x02; + outb(cf9, 0xcf9); udelay(50); - outb(cf9|6, 0xcf9); /* Actually do the reset */ + outb(cf9 | 0x04, 0xcf9); /* Actually do the reset. */ udelay(50); } reboot_type = BOOT_ACPI; -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |