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 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.