From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Jan Beulich <JBeulich@suse.com>,
xen-devel <xen-devel@lists.xenproject.org>
Cc: Keir Fraser <keir@xen.org>
Subject: Re: [PATCH] x86: improve "PCI reset register" rebooting
Date: Fri, 13 Mar 2015 11:40:52 +0000 [thread overview]
Message-ID: <5502CCC4.5030600@citrix.com> (raw)
In-Reply-To: <5502CCD10200007800069AF6@mail.emea.novell.com>
On 13/03/15 10:41, Jan Beulich wrote:
> 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@suse.com>
>
> --- a/docs/misc/xen-command-line.markdown
> +++ b/docs/misc/xen-command-line.markdown
> @@ -1117,7 +1117,7 @@ The following resources are available:
> * `rmid_max` indicates the max value for rmid.
>
> ### 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`
>
> @@ -1137,6 +1137,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).
>
> --- 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
> 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_
> 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. */
I would be nice to have some named constants (FULL_RST, RST_CPU and
SYS_RST is what the ICH10 manual uses), but the logic here does appear
correct.
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
> udelay(50);
> }
> reboot_type = BOOT_ACPI;
>
>
>
prev parent reply other threads:[~2015-03-13 11:40 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-13 10:41 [PATCH] x86: improve "PCI reset register" rebooting Jan Beulich
2015-03-13 11:40 ` Andrew Cooper [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5502CCC4.5030600@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=JBeulich@suse.com \
--cc=keir@xen.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.