From: Sean Christopherson <seanjc@google.com>
To: Jacob Xu <jacobhxu@google.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Jim Mattson <jmattson@google.com>,
kvm@vger.kernel.org
Subject: Re: [PATCH] x86: Do not assign values to unaligned pointer to 128 bits
Date: Thu, 6 May 2021 16:01:11 +0000 [thread overview]
Message-ID: <YJQSx9vb1lT3P79j@google.com> (raw)
In-Reply-To: <20210506004847.210466-1-jacobhxu@google.com>
Please use [kvm-unit-tests PATCH ...] for the subject, it took me a depressingly
long time to figure out which code base this applied to (though admittedly there
was a non-zero amount of PEBKAC going on).
On Wed, May 05, 2021, Jacob Xu wrote:
> When compiled with clang, the following statement gets converted into a
> movaps instructions.
> mem->u[0] = 5; mem->u[1] = 6; mem->u[2] = 7; mem->u[3] = 8;
>
> Since mem is an unaligned pointer to a union of an sse, we get a GP when
> running.
>
> All we want is to make the values between mem and v different for this
> testcase, so let's just memset the pointer at mem, and convert to
> uint8_t pointer. Then the compiler will not assume the pointer is
> aligned to 128 bits.
>
> Fixes: e5e76263b5 ("x86: add additional test cases for sse exceptions to
> emulator.c")
>
> Signed-off-by: Jacob Xu <jacobhxu@google.com>
> ---
> x86/emulator.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/x86/emulator.c b/x86/emulator.c
> index 9705073..672bfda 100644
> --- a/x86/emulator.c
> +++ b/x86/emulator.c
> @@ -716,12 +716,12 @@ static __attribute__((target("sse2"))) void test_sse_exceptions(void *cross_mem)
>
> // test unaligned access for movups, movupd and movaps
> v.u[0] = 1; v.u[1] = 2; v.u[2] = 3; v.u[3] = 4;
> - mem->u[0] = 5; mem->u[1] = 6; mem->u[2] = 7; mem->u[3] = 8;
> + memset((uint8_t *)mem, 0, 128);
Shouldn't this be '16', as in 16 bytes / 128 bits? And would it makes sense to
use a pattern other than '0', if only for giggles?
> asm("movups %1, %0" : "=m"(*mem) : "x"(v.sse));
> report(sseeq(&v, mem), "movups unaligned");
>
> v.u[0] = 1; v.u[1] = 2; v.u[2] = 3; v.u[3] = 4;
> - mem->u[0] = 5; mem->u[1] = 6; mem->u[2] = 7; mem->u[3] = 8;
> + memset((uint8_t *)mem, 0, 128);
> asm("movupd %1, %0" : "=m"(*mem) : "x"(v.sse));
> report(sseeq(&v, mem), "movupd unaligned");
> exceptions = 0;
> @@ -734,7 +734,7 @@ static __attribute__((target("sse2"))) void test_sse_exceptions(void *cross_mem)
> // setup memory for cross page access
> mem = (sse_union *)(&bytes[4096-8]);
> v.u[0] = 1; v.u[1] = 2; v.u[2] = 3; v.u[3] = 4;
> - mem->u[0] = 5; mem->u[1] = 6; mem->u[2] = 7; mem->u[3] = 8;
> + memset((uint8_t *)mem, 0, 128);
>
> asm("movups %1, %0" : "=m"(*mem) : "x"(v.sse));
> report(sseeq(&v, mem), "movups unaligned crosspage");
> --
> 2.31.1.527.g47e6f16901-goog
>
next prev parent reply other threads:[~2021-05-06 16:06 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-06 0:48 [PATCH] x86: Do not assign values to unaligned pointer to 128 bits Jacob Xu
2021-05-06 16:01 ` Sean Christopherson [this message]
2021-05-06 16:40 ` Jim Mattson
2021-05-06 18:50 ` Jacob Xu
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=YJQSx9vb1lT3P79j@google.com \
--to=seanjc@google.com \
--cc=jacobhxu@google.com \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=pbonzini@redhat.com \
/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.