All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86: insn decoder: create artificial 3rd byte for 2-byte VEX
@ 2015-02-12 19:04 Denys Vlasenko
  2015-02-13 12:32 ` Masami Hiramatsu
  2015-02-19  0:25 ` [tip:x86/asm] x86/asm/decoder: Create " tip-bot for Denys Vlasenko
  0 siblings, 2 replies; 4+ messages in thread
From: Denys Vlasenko @ 2015-02-12 19:04 UTC (permalink / raw)
  To: Masami Hiramatsu
  Cc: Denys Vlasenko, Frank Ch. Eigler, Srikar Dronamraju,
	Ananth N Mavinakayanahalli, Jim Keniston, Oleg Nesterov,
	Andi Kleen, Ingo Molnar, linux-kernel

Before this patch, users need to do this to fetch vex.vvvv:

        if (insn->vex_prefix.nbytes == 2) {
                vex_vvvv = ((insn->vex_prefix.bytes[1] >> 3) & 0xf) ^ 0xf;
        }
        if (insn->vex_prefix.nbytes == 3) {
                vex_vvvv = ((insn->vex_prefix.bytes[2] >> 3) & 0xf) ^ 0xf;
        }

Make it so that insn->vex_prefix.bytes[2] always contains vex.wvvvvLpp bits.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Frank Ch. Eigler <fche@redhat.com>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Jim Keniston <jkenisto@linux.vnet.ibm.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org
---

Masami, you were ok with this patch last time it was posted.
Can you "officially" add your Acked-By?

 arch/x86/lib/insn.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/x86/lib/insn.c b/arch/x86/lib/insn.c
index 54fcffe..829ca4c 100644
--- a/arch/x86/lib/insn.c
+++ b/arch/x86/lib/insn.c
@@ -163,6 +163,12 @@ found:
 				/* VEX.W overrides opnd_size */
 				insn->opnd_bytes = 8;
 		} else {
+			/*
+			 * For VEX2, fake VEX3-like byte#2.
+			 * Makes it easier to decode vex.W, vex.vvvv,
+			 * vex.L and vex.pp. Masking with 0x7f sets vex.W == 0.
+			 */
+			insn->vex_prefix.bytes[2] = b2 & 0x7f;
 			insn->vex_prefix.nbytes = 2;
 			insn->next_byte += 2;
 		}
-- 
1.8.1.4


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] x86: insn decoder: create artificial 3rd byte for 2-byte VEX
  2015-02-12 19:04 [PATCH] x86: insn decoder: create artificial 3rd byte for 2-byte VEX Denys Vlasenko
@ 2015-02-13 12:32 ` Masami Hiramatsu
  2015-02-13 14:12   ` Denys Vlasenko
  2015-02-19  0:25 ` [tip:x86/asm] x86/asm/decoder: Create " tip-bot for Denys Vlasenko
  1 sibling, 1 reply; 4+ messages in thread
From: Masami Hiramatsu @ 2015-02-13 12:32 UTC (permalink / raw)
  To: Denys Vlasenko
  Cc: Frank Ch. Eigler, Srikar Dronamraju, Ananth N Mavinakayanahalli,
	Jim Keniston, Oleg Nesterov, Andi Kleen, Ingo Molnar,
	linux-kernel

(2015/02/13 4:04), Denys Vlasenko wrote:
> Before this patch, users need to do this to fetch vex.vvvv:
> 
>         if (insn->vex_prefix.nbytes == 2) {
>                 vex_vvvv = ((insn->vex_prefix.bytes[1] >> 3) & 0xf) ^ 0xf;
>         }
>         if (insn->vex_prefix.nbytes == 3) {
>                 vex_vvvv = ((insn->vex_prefix.bytes[2] >> 3) & 0xf) ^ 0xf;
>         }
> 
> Make it so that insn->vex_prefix.bytes[2] always contains vex.wvvvvLpp bits.
> 
> Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>

Looks OK for me :)

Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>

BTW, where would you use this ??

> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> Cc: Frank Ch. Eigler <fche@redhat.com>
> Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
> Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
> Cc: Jim Keniston <jkenisto@linux.vnet.ibm.com>
> Cc: Oleg Nesterov <oleg@redhat.com>
> Cc: Andi Kleen <andi@firstfloor.org>
> Cc: Ingo Molnar <mingo@kernel.org>
> Cc: linux-kernel@vger.kernel.org
> ---
> 
> Masami, you were ok with this patch last time it was posted.
> Can you "officially" add your Acked-By?
> 
>  arch/x86/lib/insn.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/arch/x86/lib/insn.c b/arch/x86/lib/insn.c
> index 54fcffe..829ca4c 100644
> --- a/arch/x86/lib/insn.c
> +++ b/arch/x86/lib/insn.c
> @@ -163,6 +163,12 @@ found:
>  				/* VEX.W overrides opnd_size */
>  				insn->opnd_bytes = 8;
>  		} else {
> +			/*
> +			 * For VEX2, fake VEX3-like byte#2.
> +			 * Makes it easier to decode vex.W, vex.vvvv,
> +			 * vex.L and vex.pp. Masking with 0x7f sets vex.W == 0.
> +			 */
> +			insn->vex_prefix.bytes[2] = b2 & 0x7f;
>  			insn->vex_prefix.nbytes = 2;
>  			insn->next_byte += 2;
>  		}
> 


-- 
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu.pt@hitachi.com



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] x86: insn decoder: create artificial 3rd byte for 2-byte VEX
  2015-02-13 12:32 ` Masami Hiramatsu
@ 2015-02-13 14:12   ` Denys Vlasenko
  0 siblings, 0 replies; 4+ messages in thread
From: Denys Vlasenko @ 2015-02-13 14:12 UTC (permalink / raw)
  To: Masami Hiramatsu
  Cc: Denys Vlasenko, Frank Ch. Eigler, Srikar Dronamraju,
	Ananth N Mavinakayanahalli, Jim Keniston, Oleg Nesterov,
	Andi Kleen, Ingo Molnar, Linux Kernel Mailing List

On Fri, Feb 13, 2015 at 1:32 PM, Masami Hiramatsu
<masami.hiramatsu.pt@hitachi.com> wrote:
> (2015/02/13 4:04), Denys Vlasenko wrote:
>> Before this patch, users need to do this to fetch vex.vvvv:
>>
>>         if (insn->vex_prefix.nbytes == 2) {
>>                 vex_vvvv = ((insn->vex_prefix.bytes[1] >> 3) & 0xf) ^ 0xf;
>>         }
>>         if (insn->vex_prefix.nbytes == 3) {
>>                 vex_vvvv = ((insn->vex_prefix.bytes[2] >> 3) & 0xf) ^ 0xf;
>>         }
>>
>> Make it so that insn->vex_prefix.bytes[2] always contains vex.wvvvvLpp bits.
>>
>> Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
>
> Looks OK for me :)
>
> Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
>
> BTW, where would you use this ??

arch/x86/kernel/uprobes.c

    reg2 = 0xff;        /* Fetch vex.vvvv */
    if (insn->vex_prefix.nbytes == 2)
        reg2 = insn->vex_prefix.bytes[1];
    else if (insn->vex_prefix.nbytes == 3)
        reg2 = insn->vex_prefix.bytes[2];


https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/x86/kernel/uprobes.c#n354

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [tip:x86/asm] x86/asm/decoder: Create artificial 3rd byte for 2-byte VEX
  2015-02-12 19:04 [PATCH] x86: insn decoder: create artificial 3rd byte for 2-byte VEX Denys Vlasenko
  2015-02-13 12:32 ` Masami Hiramatsu
@ 2015-02-19  0:25 ` tip-bot for Denys Vlasenko
  1 sibling, 0 replies; 4+ messages in thread
From: tip-bot for Denys Vlasenko @ 2015-02-19  0:25 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, ananth, srikar, tglx, fche, oleg,
	masami.hiramatsu.pt, hpa, jkenisto, mingo, dvlasenk

Commit-ID:  8a764a875fe3cf3a83296bacd00bfc41917e95e2
Gitweb:     http://git.kernel.org/tip/8a764a875fe3cf3a83296bacd00bfc41917e95e2
Author:     Denys Vlasenko <dvlasenk@redhat.com>
AuthorDate: Thu, 12 Feb 2015 20:04:39 +0100
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Wed, 18 Feb 2015 21:01:50 +0100

x86/asm/decoder: Create artificial 3rd byte for 2-byte VEX

Before this patch, users need to do this to fetch vex.vvvv:

        if (insn->vex_prefix.nbytes == 2) {
                vex_vvvv = ((insn->vex_prefix.bytes[1] >> 3) & 0xf) ^ 0xf;
        }
        if (insn->vex_prefix.nbytes == 3) {
                vex_vvvv = ((insn->vex_prefix.bytes[2] >> 3) & 0xf) ^ 0xf;
        }

Make it so that insn->vex_prefix.bytes[2] always contains
vex.wvvvvLpp bits.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Frank Ch. Eigler <fche@redhat.com>
Cc: Jim Keniston <jkenisto@linux.vnet.ibm.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Link: http://lkml.kernel.org/r/1423767879-31691-1-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/lib/insn.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/x86/lib/insn.c b/arch/x86/lib/insn.c
index 1313ae6..5ea00dd 100644
--- a/arch/x86/lib/insn.c
+++ b/arch/x86/lib/insn.c
@@ -164,6 +164,12 @@ found:
 				/* VEX.W overrides opnd_size */
 				insn->opnd_bytes = 8;
 		} else {
+			/*
+			 * For VEX2, fake VEX3-like byte#2.
+			 * Makes it easier to decode vex.W, vex.vvvv,
+			 * vex.L and vex.pp. Masking with 0x7f sets vex.W == 0.
+			 */
+			insn->vex_prefix.bytes[2] = b2 & 0x7f;
 			insn->vex_prefix.nbytes = 2;
 			insn->next_byte += 2;
 		}

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-02-19  0:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-12 19:04 [PATCH] x86: insn decoder: create artificial 3rd byte for 2-byte VEX Denys Vlasenko
2015-02-13 12:32 ` Masami Hiramatsu
2015-02-13 14:12   ` Denys Vlasenko
2015-02-19  0:25 ` [tip:x86/asm] x86/asm/decoder: Create " tip-bot for Denys Vlasenko

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.