From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: wei.liu2@citrix.com, andrew.cooper3@citrix.com,
ian.jackson@eu.citrix.com, xen-devel@lists.xen.org,
Paul Durrant <paul.durrant@citrix.com>,
jbeulich@suse.com, roger.pau@citrix.com
Subject: Re: [PATCH 08/10] pvh/acpi: Handle ACPI accesses for PVH guests
Date: Mon, 7 Nov 2016 10:55:52 -0500 [thread overview]
Message-ID: <20161107155552.GO21570@char.us.oracle.com> (raw)
In-Reply-To: <1478468563-5396-9-git-send-email-boris.ostrovsky@oracle.com>
On Sun, Nov 06, 2016 at 04:42:41PM -0500, Boris Ostrovsky wrote:
> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
> ---
> CC: Paul Durrant <paul.durrant@citrix.com>
> ---
> xen/arch/x86/hvm/ioreq.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 66 insertions(+)
>
> diff --git a/xen/arch/x86/hvm/ioreq.c b/xen/arch/x86/hvm/ioreq.c
> index 171ea82..ced7c92 100644
> --- a/xen/arch/x86/hvm/ioreq.c
> +++ b/xen/arch/x86/hvm/ioreq.c
> @@ -1392,6 +1392,72 @@ void hvm_ioreq_init(struct domain *d)
> static int acpi_ioaccess(
> int dir, unsigned int port, unsigned int bytes, uint32_t *val)
> {
> + unsigned int i;
> + unsigned int bits = bytes * 8;
> + uint8_t *reg = NULL;
> + unsigned idx = port & 3;
> + bool is_cpu_map = 0;
> + struct domain *currd = current->domain;
> +
> + BUILD_BUG_ON((ACPI_PM1A_EVT_BLK_LEN != 4) ||
> + (ACPI_GPE0_BLK_LEN_V1 != 4));
> +
> + switch (port)
> + {
> + case ACPI_PM1A_EVT_BLK_ADDRESS_V1 ...
> + (ACPI_PM1A_EVT_BLK_ADDRESS_V1 + ACPI_PM1A_EVT_BLK_LEN - 1):
> + reg = currd->arch.hvm_domain.acpi_io.pm1a;
> + break;
> + case ACPI_GPE0_BLK_ADDRESS_V1 ...
> + (ACPI_GPE0_BLK_ADDRESS_V1 + ACPI_GPE0_BLK_LEN_V1 - 1):
> + reg = currd->arch.hvm_domain.acpi_io.gpe;
> + break;
> + case 0xaf00 ... (0xaf00 + HVM_MAX_VCPUS/8 - 1):
That may need some documentation or a #define perhaps?
Also just in case somebody decided it was funny and compile Xen with
HVM_MAX_VCPUS set to say 4, won't this go in 0xfffffff region?
You may want to add a BUILD_BUG_ON for the HVM_MAX_VCPUS, like:
BUILD_BUGON(HVM_MAX_VCPUS > 8)?
> + is_cpu_map = 1;
> + break;
> + default:
> + return X86EMUL_UNHANDLEABLE;
> + }
> +
> + if ( bytes == 0 )
> + return X86EMUL_OKAY;
Should you also check for other odd sizes? Say 3?
> +
> + if ( dir == IOREQ_READ )
> + {
> + *val &= ~((1U << bits) - 1);
> +
> + if ( is_cpu_map )
> + {
> + unsigned first_bit, last_bit;
> +
> + first_bit = (port - 0xaf00) * 8;
Oh, that needs a define.
> + last_bit = min(currd->arch.avail_vcpus, first_bit + bits);
> + for (i = first_bit; i < last_bit; i++)
I think you need spaces here.
> + *val |= (1U << (i - first_bit));
> + }
> + else
> + memcpy(val, ®[idx], bytes);
> + }
> + else
> + {
> + if ( is_cpu_map )
> + /* CPU map should not be written. */
It shouldn't? Then who updates this? Oh we do it via the the hypercall.
You may want to mention in this function how this all is suppose to work?
> + return X86EMUL_UNHANDLEABLE;
> +
> + /* Write either status or enable reegister. */
> + if ( (bytes > 2) || ((bytes == 2) && (port & 1)) )
> + return X86EMUL_UNHANDLEABLE;
> +
> + if ( idx < 2 ) /* status, write 1 to clear. */
> + {
> + reg[idx] &= ~(*val & 0xff);
> + if ( bytes == 2 )
> + reg[idx + 1] &= ~((*val >> 8) & 0xff);
> + }
> + else /* enable */
> + memcpy(®[idx], val, bytes);
> + }
> +
> return X86EMUL_OKAY;
> }
>
> --
> 2.7.4
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> https://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2016-11-07 15:55 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-06 21:42 [PATCH 00/10] PVH VCPU hotplug support Boris Ostrovsky
2016-11-06 21:42 ` [PATCH 01/10] x86/domctl: Add XEN_DOMCTL_set_avail_vcpus Boris Ostrovsky
2016-11-07 15:30 ` Konrad Rzeszutek Wilk
2016-11-07 18:24 ` Boris Ostrovsky
2016-11-08 19:07 ` Daniel De Graaf
2016-11-06 21:42 ` [PATCH 02/10] acpi: Define ACPI IO registers for PVH guests Boris Ostrovsky
2016-11-06 21:42 ` [PATCH 03/10] pvh: Set online VCPU map to avail_vcpus Boris Ostrovsky
2016-11-07 15:36 ` Konrad Rzeszutek Wilk
2016-11-07 15:52 ` Boris Ostrovsky
2016-11-06 21:42 ` [PATCH 04/10] acpi: Power and Sleep ACPI buttons are not emulated Boris Ostrovsky
2016-11-07 15:38 ` Konrad Rzeszutek Wilk
2016-11-07 15:54 ` Boris Ostrovsky
2016-11-07 17:24 ` annie li
2016-11-06 21:42 ` [PATCH 05/10] acpi: Make pmtimer optional in FADT Boris Ostrovsky
2016-11-07 15:39 ` Konrad Rzeszutek Wilk
2016-11-06 21:42 ` [PATCH 06/10] acpi: PVH guests need _E02 method Boris Ostrovsky
2016-11-07 15:45 ` Konrad Rzeszutek Wilk
2016-11-07 16:08 ` Boris Ostrovsky
2016-11-07 16:08 ` Konrad Rzeszutek Wilk
2016-11-06 21:42 ` [PATCH 07/10] pvh/ioreq: Install handlers for ACPI-related PVH IO accesses Boris Ostrovsky
2016-11-07 9:39 ` Paul Durrant
2016-11-07 14:01 ` Boris Ostrovsky
2016-11-07 14:00 ` Paul Durrant
2016-11-06 21:42 ` [PATCH 08/10] pvh/acpi: Handle ACPI accesses for PVH guests Boris Ostrovsky
2016-11-07 9:51 ` Paul Durrant
2016-11-08 16:14 ` Boris Ostrovsky
2016-11-07 15:55 ` Konrad Rzeszutek Wilk [this message]
2016-11-07 16:20 ` Boris Ostrovsky
2016-11-07 16:47 ` Jan Beulich
2016-11-06 21:42 ` [PATCH 09/10] events/x86: Define SCI virtual interrupt Boris Ostrovsky
2016-11-07 16:05 ` Konrad Rzeszutek Wilk
2016-11-07 16:29 ` Boris Ostrovsky
2016-11-06 21:42 ` [PATCH 10/10] pvh: Send an SCI on VCPU hotplug event Boris Ostrovsky
2016-11-07 11:41 ` [PATCH 00/10] PVH VCPU hotplug support Andrew Cooper
2016-11-07 14:19 ` Boris Ostrovsky
2016-11-07 14:46 ` Andrew Cooper
2016-11-07 15:30 ` Boris Ostrovsky
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=20161107155552.GO21570@char.us.oracle.com \
--to=konrad.wilk@oracle.com \
--cc=andrew.cooper3@citrix.com \
--cc=boris.ostrovsky@oracle.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=paul.durrant@citrix.com \
--cc=roger.pau@citrix.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xen.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.