From: Don Slutz <dslutz@verizon.com>
To: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Don Slutz <dslutz@verizon.com>,
xen-devel@lists.xen.org
Cc: Kevin Tian <kevin.tian@intel.com>, Keir Fraser <keir@xen.org>,
Ian Campbell <ian.campbell@citrix.com>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
Jun Nakajima <jun.nakajima@intel.com>,
Eddie Dong <eddie.dong@intel.com>,
Ian Jackson <ian.jackson@eu.citrix.com>, Tim Deegan <tim@xen.org>,
Aravind Gopalakrishnan <Aravind.Gopalakrishnan@amd.com>,
Jan Beulich <jbeulich@suse.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Subject: Re: [PATCH v3 04/16] hypervisor part of add vmware_port to xl.cfg
Date: Mon, 08 Sep 2014 13:20:16 -0400 [thread overview]
Message-ID: <540DE550.1020700@terremark.com> (raw)
In-Reply-To: <540DC4B6.1000707@oracle.com>
On 09/08/14 11:01, Boris Ostrovsky wrote:
> On 09/08/2014 09:15 AM, Don Slutz wrote:
>> diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c
>> index b5188e6..12079be 100644
>> --- a/xen/arch/x86/hvm/svm/svm.c
>> +++ b/xen/arch/x86/hvm/svm/svm.c
>> @@ -59,6 +59,7 @@
>> #include <public/sched.h>
>> #include <asm/hvm/vpt.h>
>> #include <asm/hvm/trace.h>
>> +#include <asm/hvm/vmport.h>
>> #include <asm/hap.h>
>> #include <asm/apic.h>
>> #include <asm/debugger.h>
>> @@ -2065,6 +2066,38 @@ svm_vmexit_do_vmsave(struct vmcb_struct *vmcb,
>> return;
>> }
>> +static void svm_vmexit_gp_intercept(struct cpu_user_regs *regs,
>> + struct vcpu *v)
>> +{
>> + struct vmcb_struct *vmcb = v->arch.hvm_svm.vmcb;
>> + unsigned long inst_len;
>> + unsigned long inst_addr = svm_rip2pointer(v);
>> + int rc;
>> + static const enum instruction_index list[] = {
>> + INSTR_INL_DX, INSTR_INB_DX, INSTR_OUTL_DX, INSTR_OUTB_DX
>> + };
>> +
>> + regs->error_code = vmcb->exitinfo1;
>
> I am not sure this is a good idea. I have a feeling this may mess up
> fault reporting in case of double faults (e.g. see AMD volume 2
> section 15.2, Example paragraph).
>
> Do you really need to save it into regs or can out pass exitinfo1 as
> error_code argument directly to vmport_gp_check()?
>
Nope. I can pass this on.
>> + inst_len = __get_instruction_length_from_list(
>> + v, list, ARRAY_SIZE(list), 0);
>> +
>> + rc = vmport_gp_check(regs, v, inst_len, inst_addr,
>> vmcb->exitinfo2);
>
> You probably want to call this only when
> __get_instruction_length_from_list() succeeded (i.e. instr_len >0)
>
This check is inside the vmport_gp_check(). I can extract it to both
callers
if that makes sense.
> What happens when you have a non-VMware-aware guest that performs this
> access? Prior to this patch it would get a #GP but now it will
> continue happily running, right? This changes user-visible behavior.
>
It depends on the setting of vmware_port. It will still get a #GP if
vmware_port is zero. And yes when the config of a guest is changed
to include vmware_port, this changes user-visible behavior.
> I wonder whether we should enable #GP intercepts only when we know
> that the guest is VMware-aware (which we do as far as I can tell since
> we have a config option).
>
This may make sense. The way the code is now, the only change is how
long it takes to get a #GP when vmware_port is zero.
I did some looking into enabling and disabling #GP intercepts but did not
come up with a simple way at the time. I also thought about it and came
to the conclusion and the number of #GPs that a guest takes which is not
VMware-aware is very few. So add a lot of complex code seemed to me
to be worse. I can look at it again.
-Don Slutz
> -boris
>
>
>> + if ( !rc )
>> + __update_guest_eip(regs, inst_len);
>> + else
>> + {
>> + VMPORT_DBG_LOG(VMPORT_LOG_GP_UNKNOWN,
>> + "gp: rc=%d e2=%lx ec=%lx ip=%"PRIx64" (%ld)
>> ax=%"PRIx64
>> + " bx=%"PRIx64" cx=%"PRIx64" dx=%"PRIx64"
>> si=%"PRIx64
>> + " di=%"PRIx64, rc,
>> + (unsigned long)vmcb->exitinfo2,
>> + (unsigned long)regs->error_code,
>> + regs->rip, inst_len, regs->rax, regs->rbx,
>> regs->rcx,
>> + regs->rdx, regs->rsi, regs->rdi);
>> + hvm_inject_hw_exception(TRAP_gp_fault, regs->error_code);
>> + }
>> +}
>> +
>>
>
next prev parent reply other threads:[~2014-09-08 17:20 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-08 13:15 [PATCH v3 00/16] Xen VMware tools support Don Slutz
2014-09-08 13:15 ` [PATCH v3 01/16] hypervisor part of add vmware_hw to xl.cfg Don Slutz
2014-09-11 10:52 ` George Dunlap
2014-09-11 17:21 ` Don Slutz
2014-09-08 13:15 ` [PATCH v3 02/16] tools " Don Slutz
2014-09-11 11:23 ` George Dunlap
2014-09-11 17:48 ` Don Slutz
2014-09-08 13:15 ` [PATCH v3 03/16] vmware: Add VMware provided include files Don Slutz
2014-09-08 13:15 ` [PATCH v3 04/16] hypervisor part of add vmware_port to xl.cfg Don Slutz
2014-09-08 15:01 ` Boris Ostrovsky
2014-09-08 15:22 ` Jan Beulich
2014-09-08 15:32 ` Andrew Cooper
2014-09-08 15:43 ` Boris Ostrovsky
2014-09-08 17:56 ` Don Slutz
2014-09-08 17:20 ` Don Slutz [this message]
2014-09-11 15:34 ` George Dunlap
2014-09-08 13:15 ` [PATCH v3 05/16] tools " Don Slutz
2014-09-15 10:03 ` George Dunlap
2014-09-20 15:52 ` Slutz, Donald Christopher
2014-09-08 13:15 ` [PATCH v3 06/16] hypervisor part of convert vmware_port to xentrace usage Don Slutz
2014-09-08 13:15 ` [PATCH v3 07/16] tools " Don Slutz
2014-09-08 13:15 ` [PATCH v3 08/16] hypervisor part of add limited support of VMware's hyper-call rpc Don Slutz
2014-09-08 13:15 ` [PATCH v3 09/16] tools " Don Slutz
2014-09-08 13:15 ` [PATCH v3 10/16] Add VMware tool's triggers Don Slutz
2014-09-08 13:15 ` [PATCH v3 11/16] Add live migration of VMware's hyper-call RPC Don Slutz
2014-09-08 13:15 ` [PATCH v3 12/16] Add dump of HVM_SAVE_CODE(VMPORT) to xen-hvmctx Don Slutz
2014-09-08 13:15 ` [optional][PATCH v3 13/16] Add xen-hvm-param Don Slutz
2014-09-08 13:15 ` [optional][PATCH v3 14/16] Add xen-vmware-guestinfo Don Slutz
2014-09-08 13:15 ` [optional][PATCH v3 15/16] Add xen-list-vmware-guestinfo Don Slutz
2014-09-08 13:15 ` [optional][PATCH v3 16/16] Add xen-hvm-send-trigger Don Slutz
2014-09-08 13:38 ` [PATCH v3 00/16] Xen VMware tools support Ian Campbell
2014-09-08 16:58 ` Don Slutz
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=540DE550.1020700@terremark.com \
--to=dslutz@verizon.com \
--cc=Aravind.Gopalakrishnan@amd.com \
--cc=andrew.cooper3@citrix.com \
--cc=boris.ostrovsky@oracle.com \
--cc=eddie.dong@intel.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=jun.nakajima@intel.com \
--cc=keir@xen.org \
--cc=kevin.tian@intel.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=tim@xen.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).