From: Paul Durrant <Paul.Durrant@citrix.com>
To: 'Petre Pircalabu' <ppircalabu@bitdefender.com>,
"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Cc: Kevin Tian <kevin.tian@intel.com>,
"sstabellini@kernel.org" <sstabellini@kernel.org>,
Wei Liu <wei.liu2@citrix.com>,
"jun.nakajima@intel.com" <jun.nakajima@intel.com>,
"rcojocaru@bitdefender.com" <rcojocaru@bitdefender.com>,
Andrew Cooper <Andrew.Cooper3@citrix.com>,
"Tim (Xen.org)" <tim@xen.org>,
George Dunlap <George.Dunlap@citrix.com>,
"tamas@tklengyel.com" <tamas@tklengyel.com>,
"jbeulich@suse.com" <jbeulich@suse.com>,
Ian Jackson <Ian.Jackson@citrix.com>
Subject: Re: [PATCH v8 1/2] x86emul: New return code for unimplemented instruction
Date: Wed, 9 Aug 2017 08:11:36 +0000 [thread overview]
Message-ID: <85042ca68d3f4a3c9a06e29eac4173fe@AMSPEX02CL01.citrite.net> (raw)
In-Reply-To: <1502215598-4689-2-git-send-email-ppircalabu@bitdefender.com>
> -----Original Message-----
> From: Petre Pircalabu [mailto:ppircalabu@bitdefender.com]
> Sent: 08 August 2017 19:07
> To: xen-devel@lists.xen.org
> Cc: Ian Jackson <Ian.Jackson@citrix.com>; Wei Liu <wei.liu2@citrix.com>;
> Andrew Cooper <Andrew.Cooper3@citrix.com>; George Dunlap
> <George.Dunlap@citrix.com>; jbeulich@suse.com; konrad.wilk@oracle.com;
> sstabellini@kernel.org; Tim (Xen.org) <tim@xen.org>; Paul Durrant
> <Paul.Durrant@citrix.com>; rcojocaru@bitdefender.com;
> tamas@tklengyel.com; jun.nakajima@intel.com; Kevin Tian
> <kevin.tian@intel.com>; Petre Pircalabu <ppircalabu@bitdefender.com>
> Subject: [PATCH v8 1/2] x86emul: New return code for unimplemented
> instruction
>
> Enforce the distinction between an instruction not implemented by the
> emulator and the failure to emulate that instruction by defining a new
> return code, X86EMUL_UNIMPLEMENTED.
>
> This value should only be used by the core emulator if it fails to decode
> the current instruction, and not by any of the x86_emulate_ops
> callbacks.
>
> Signed-off-by: Petre Pircalabu <ppircalabu@bitdefender.com>
Reviewed-by: Paul Durrant <paul.durrant@citrix.com>
> ---
> xen/arch/x86/hvm/emulate.c | 4 ++++
> xen/arch/x86/hvm/io.c | 2 ++
> xen/arch/x86/hvm/vmx/realmode.c | 2 +-
> xen/arch/x86/mm/shadow/multi.c | 2 +-
> xen/arch/x86/x86_emulate/x86_emulate.c | 8 ++++----
> xen/arch/x86/x86_emulate/x86_emulate.h | 6 ++++++
> 6 files changed, 18 insertions(+), 6 deletions(-)
>
> diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c
> index 3a8db21..28133c0 100644
> --- a/xen/arch/x86/hvm/emulate.c
> +++ b/xen/arch/x86/hvm/emulate.c
> @@ -2044,6 +2044,8 @@ int hvm_emulate_one_mmio(unsigned long mfn,
> unsigned long gla)
> switch ( rc )
> {
> case X86EMUL_UNHANDLEABLE:
> + /* fall-through */
> + case X86EMUL_UNIMPLEMENTED:
> hvm_dump_emulation_state(XENLOG_G_WARNING, "MMCFG",
> &ctxt);
> break;
> case X86EMUL_EXCEPTION:
> @@ -2113,6 +2115,8 @@ void hvm_emulate_one_vm_event(enum
> emul_kind kind, unsigned int trapnr,
> * consistent with X86EMUL_RETRY.
> */
> return;
> + case X86EMUL_UNIMPLEMENTED:
> + /* fall-through */
> case X86EMUL_UNHANDLEABLE:
> hvm_dump_emulation_state(XENLOG_G_DEBUG, "Mem event", &ctx);
> hvm_inject_hw_exception(trapnr, errcode);
> diff --git a/xen/arch/x86/hvm/io.c b/xen/arch/x86/hvm/io.c
> index 214ab30..af4e1dc 100644
> --- a/xen/arch/x86/hvm/io.c
> +++ b/xen/arch/x86/hvm/io.c
> @@ -96,6 +96,8 @@ bool hvm_emulate_one_insn(hvm_emulate_validate_t
> *validate, const char *descr)
> switch ( rc )
> {
> case X86EMUL_UNHANDLEABLE:
> + /* fall-through */
> + case X86EMUL_UNIMPLEMENTED:
> hvm_dump_emulation_state(XENLOG_G_WARNING, descr, &ctxt);
> return false;
>
> diff --git a/xen/arch/x86/hvm/vmx/realmode.c
> b/xen/arch/x86/hvm/vmx/realmode.c
> index 11bde58..fdbbee2 100644
> --- a/xen/arch/x86/hvm/vmx/realmode.c
> +++ b/xen/arch/x86/hvm/vmx/realmode.c
> @@ -106,7 +106,7 @@ void vmx_realmode_emulate_one(struct
> hvm_emulate_ctxt *hvmemul_ctxt)
> if ( hvm_vcpu_io_need_completion(vio) || vio->mmio_retry )
> vio->io_completion = HVMIO_realmode_completion;
>
> - if ( rc == X86EMUL_UNHANDLEABLE )
> + if ( rc == X86EMUL_UNHANDLEABLE || rc == X86EMUL_UNIMPLEMENTED
> )
> {
> gdprintk(XENLOG_ERR, "Failed to emulate insn.\n");
> goto fail;
> diff --git a/xen/arch/x86/mm/shadow/multi.c
> b/xen/arch/x86/mm/shadow/multi.c
> index c9c2252..85fb165 100644
> --- a/xen/arch/x86/mm/shadow/multi.c
> +++ b/xen/arch/x86/mm/shadow/multi.c
> @@ -3486,7 +3486,7 @@ static int sh_page_fault(struct vcpu *v,
> * would be a good unshadow hint. If we *do* decide to unshadow-on-
> fault
> * then it must be 'failable': we cannot require the unshadow to succeed.
> */
> - if ( r == X86EMUL_UNHANDLEABLE )
> + if ( r == X86EMUL_UNHANDLEABLE || r == X86EMUL_UNIMPLEMENTED )
> {
> perfc_incr(shadow_fault_emulate_failed);
> #if SHADOW_OPTIMIZATIONS & SHOPT_FAST_EMULATION
> diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c
> b/xen/arch/x86/x86_emulate/x86_emulate.c
> index 2201852..480bad9 100644
> --- a/xen/arch/x86/x86_emulate/x86_emulate.c
> +++ b/xen/arch/x86/x86_emulate/x86_emulate.c
> @@ -2577,7 +2577,7 @@ x86_decode(
> d = twobyte_table[0x3a].desc;
> break;
> default:
> - rc = X86EMUL_UNHANDLEABLE;
> + rc = X86EMUL_UNIMPLEMENTED;
> goto done;
> }
> }
> @@ -2591,7 +2591,7 @@ x86_decode(
> }
> else
> {
> - rc = X86EMUL_UNHANDLEABLE;
> + rc = X86EMUL_UNIMPLEMENTED;
> goto done;
> }
>
> @@ -2871,7 +2871,7 @@ x86_decode(
>
> default:
> ASSERT_UNREACHABLE();
> - return X86EMUL_UNHANDLEABLE;
> + return X86EMUL_UNIMPLEMENTED;
> }
>
> if ( ea.type == OP_MEM )
> @@ -7717,7 +7717,7 @@ x86_emulate(
>
> default:
> cannot_emulate:
> - rc = X86EMUL_UNHANDLEABLE;
> + rc = X86EMUL_UNIMPLEMENTED;
> goto done;
> }
>
> diff --git a/xen/arch/x86/x86_emulate/x86_emulate.h
> b/xen/arch/x86/x86_emulate/x86_emulate.h
> index 4ddf111..82812ca 100644
> --- a/xen/arch/x86/x86_emulate/x86_emulate.h
> +++ b/xen/arch/x86/x86_emulate/x86_emulate.h
> @@ -133,6 +133,12 @@ struct x86_emul_fpu_aux {
> * Undefined behavior when used anywhere else.
> */
> #define X86EMUL_DONE 4
> + /*
> + * Current instruction is not implemented by the emulator.
> + * This value should only be returned by the core emulator if decode fails
> + * and not by any of the x86_emulate_ops callbacks.
> + */
> +#define X86EMUL_UNIMPLEMENTED 5
>
> /* FPU sub-types which may be requested via ->get_fpu(). */
> enum x86_emulate_fpu_type {
> --
> 2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-08-09 8:11 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-08 18:06 [PATCH v8 0/2] Singlestep unimplemented x86emul instructions Petre Pircalabu
2017-08-08 18:06 ` [PATCH v8 1/2] x86emul: New return code for unimplemented instruction Petre Pircalabu
2017-08-09 8:11 ` Paul Durrant [this message]
2017-08-22 8:09 ` Jan Beulich
2017-08-30 17:06 ` Petre Ovidiu PIRCALABU
2017-08-31 7:36 ` Jan Beulich
2017-08-08 18:06 ` [PATCH v8 2/2] x86/monitor: Notify monitor if an emulation fails Petre Pircalabu
2017-08-08 18:25 ` Tamas K Lengyel
2017-08-09 7:03 ` Wei Liu
2017-08-22 8:10 ` Jan Beulich
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=85042ca68d3f4a3c9a06e29eac4173fe@AMSPEX02CL01.citrite.net \
--to=paul.durrant@citrix.com \
--cc=Andrew.Cooper3@citrix.com \
--cc=George.Dunlap@citrix.com \
--cc=Ian.Jackson@citrix.com \
--cc=jbeulich@suse.com \
--cc=jun.nakajima@intel.com \
--cc=kevin.tian@intel.com \
--cc=ppircalabu@bitdefender.com \
--cc=rcojocaru@bitdefender.com \
--cc=sstabellini@kernel.org \
--cc=tamas@tklengyel.com \
--cc=tim@xen.org \
--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 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).