From: Cedric Le Goater <clg@fr.ibm.com>
To: Alexander Graf <agraf@suse.de>
Cc: Paul Mackerras <paulus@samba.org>,
"kvm-ppc@vger.kernel.org" <kvm-ppc@vger.kernel.org>,
"kvm@vger.kernel.org mailing list" <kvm@vger.kernel.org>
Subject: Re: [PATCH v2 3/3] KVM: PPC: Book3S: MMIO emulation support for little endian guests
Date: Wed, 09 Oct 2013 08:42:48 +0000 [thread overview]
Message-ID: <52551708.5050900@fr.ibm.com> (raw)
In-Reply-To: <B26163CF-F7B5-4396-A544-DC9FEF983D34@suse.de>
On 10/09/2013 10:29 AM, Alexander Graf wrote:
>
>
> Am 09.10.2013 um 07:59 schrieb Paul Mackerras <paulus@samba.org>:
>
>> On Wed, Oct 09, 2013 at 01:46:29AM +0200, Alexander Graf wrote:
>>>
>>>
>>> Am 09.10.2013 um 01:31 schrieb Paul Mackerras <paulus@samba.org>:
>>>
>>>> True, until we get to POWER8 with its split little-endian support,
>>>> where instructions and data can have different endianness...
>>>
>>> How exactly does that work?
>>
>> They added an extra MSR bit called SLE which enables the split-endian
>> mode. It's bit 5 (IBM numbering). For backwards compatibility, the
>> LE bit controls instruction endianness, and data endianness depends on
>> LE ^ SLE, that is, with SLE = 0 things work as before. With SLE=1 and
>> LE=0 you get little-endian data and big-endian instructions, and vice
>> versa with SLE=1 and LE=1.
>
> So ld32 should only honor LE and get_last_inst only looks at SLE and
> swaps even the vcpu cached version if it's set, no?
Here is the table (PowerISA) illustrating the endian modes for all
combinations :
SLE LE Data Instruction
0 0 Big Big
0 1 Little Little
1 0 Little Big
1 1 Big Little
My understanding is that when reading instructions, we should test MSR[LE]
and for data, test MSR[SLE] ^ MSR[LE].
This has to be done in conjunction with the host endian order to determine
if we should byte-swap or not, but we can assume the host is big endian
for the moment and fix the byte-swapping later.
C.
>>
>> There is also a user accessible "mtsle" instruction that sets the
>> value of the SLE bit. This enables programs to flip their data
>> endianness back and forth quickly, so it's usable for short
>> instruction sequences, without the need to generate instructions of
>> the opposite endianness.
>>
>> Paul.
>
WARNING: multiple messages have this Message-ID (diff)
From: Cedric Le Goater <clg@fr.ibm.com>
To: Alexander Graf <agraf@suse.de>
Cc: Paul Mackerras <paulus@samba.org>,
"kvm-ppc@vger.kernel.org" <kvm-ppc@vger.kernel.org>,
"kvm@vger.kernel.org mailing list" <kvm@vger.kernel.org>
Subject: Re: [PATCH v2 3/3] KVM: PPC: Book3S: MMIO emulation support for little endian guests
Date: Wed, 09 Oct 2013 10:42:48 +0200 [thread overview]
Message-ID: <52551708.5050900@fr.ibm.com> (raw)
In-Reply-To: <B26163CF-F7B5-4396-A544-DC9FEF983D34@suse.de>
On 10/09/2013 10:29 AM, Alexander Graf wrote:
>
>
> Am 09.10.2013 um 07:59 schrieb Paul Mackerras <paulus@samba.org>:
>
>> On Wed, Oct 09, 2013 at 01:46:29AM +0200, Alexander Graf wrote:
>>>
>>>
>>> Am 09.10.2013 um 01:31 schrieb Paul Mackerras <paulus@samba.org>:
>>>
>>>> True, until we get to POWER8 with its split little-endian support,
>>>> where instructions and data can have different endianness...
>>>
>>> How exactly does that work?
>>
>> They added an extra MSR bit called SLE which enables the split-endian
>> mode. It's bit 5 (IBM numbering). For backwards compatibility, the
>> LE bit controls instruction endianness, and data endianness depends on
>> LE ^ SLE, that is, with SLE = 0 things work as before. With SLE=1 and
>> LE=0 you get little-endian data and big-endian instructions, and vice
>> versa with SLE=1 and LE=1.
>
> So ld32 should only honor LE and get_last_inst only looks at SLE and
> swaps even the vcpu cached version if it's set, no?
Here is the table (PowerISA) illustrating the endian modes for all
combinations :
SLE LE Data Instruction
0 0 Big Big
0 1 Little Little
1 0 Little Big
1 1 Big Little
My understanding is that when reading instructions, we should test MSR[LE]
and for data, test MSR[SLE] ^ MSR[LE].
This has to be done in conjunction with the host endian order to determine
if we should byte-swap or not, but we can assume the host is big endian
for the moment and fix the byte-swapping later.
C.
>>
>> There is also a user accessible "mtsle" instruction that sets the
>> value of the SLE bit. This enables programs to flip their data
>> endianness back and forth quickly, so it's usable for short
>> instruction sequences, without the need to generate instructions of
>> the opposite endianness.
>>
>> Paul.
>
next prev parent reply other threads:[~2013-10-09 8:42 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-08 14:12 [PATCH v2 0/3] KVM: PPC: Book3S: MMIO support for Little Endian guests Cédric Le Goater
2013-10-08 14:12 ` Cédric Le Goater
2013-10-08 14:12 ` [PATCH v2 1/3] KVM: PPC: Book3S: add helper routine to load guest instructions Cédric Le Goater
2013-10-08 14:12 ` Cédric Le Goater
2013-10-08 14:12 ` [PATCH v2 2/3] KVM: PPC: Book3S: add helper routines to detect endian Cédric Le Goater
2013-10-08 14:12 ` Cédric Le Goater
2013-10-08 14:12 ` [PATCH v2 3/3] KVM: PPC: Book3S: MMIO emulation support for little endian guests Cédric Le Goater
2013-10-08 14:12 ` Cédric Le Goater
2013-10-08 14:25 ` Alexander Graf
2013-10-08 14:25 ` Alexander Graf
2013-10-08 15:07 ` Cedric Le Goater
2013-10-08 15:07 ` Cedric Le Goater
2013-10-08 15:31 ` [PATCH v3 " Cédric Le Goater
2013-10-08 15:31 ` Cédric Le Goater
2013-10-08 15:36 ` Alexander Graf
2013-10-08 15:36 ` Alexander Graf
2013-10-08 16:10 ` Cedric Le Goater
2013-10-08 16:10 ` Cedric Le Goater
2013-10-08 16:43 ` [PATCH v4 0/3] KVM: PPC: Book3S: MMIO support for Little Endian guests Cédric Le Goater
2013-10-08 16:43 ` Cédric Le Goater
2013-10-08 16:43 ` [PATCH v4 1/3] KVM: PPC: Book3S: add helper routine to load guest instructions Cédric Le Goater
2013-10-08 16:43 ` Cédric Le Goater
2013-10-08 16:43 ` [PATCH v4 2/3] KVM: PPC: Book3S: add helper routines to detect endian order Cédric Le Goater
2013-10-08 16:43 ` Cédric Le Goater
2013-10-08 16:43 ` [PATCH v4 3/3] KVM: PPC: Book3S: MMIO emulation support for little endian guests Cédric Le Goater
2013-10-08 16:43 ` Cédric Le Goater
2013-10-08 23:31 ` [PATCH v2 " Paul Mackerras
2013-10-08 23:31 ` Paul Mackerras
2013-10-08 23:46 ` Alexander Graf
2013-10-08 23:46 ` Alexander Graf
2013-10-09 5:59 ` Paul Mackerras
2013-10-09 5:59 ` Paul Mackerras
2013-10-09 8:29 ` Alexander Graf
2013-10-09 8:29 ` Alexander Graf
2013-10-09 8:42 ` Cedric Le Goater [this message]
2013-10-09 8:42 ` Cedric Le Goater
2013-10-10 10:16 ` Paul Mackerras
2013-10-10 10:16 ` Paul Mackerras
2013-11-04 11:44 ` Alexander Graf
2013-11-04 11:44 ` Alexander Graf
2013-11-05 12:28 ` Cedric Le Goater
2013-11-05 12:28 ` Cedric Le Goater
2013-11-05 13:01 ` Alexander Graf
2013-11-05 13:01 ` Alexander Graf
2013-11-05 17:22 ` [PATCH v5 0/6] KVM: PPC: Book3S: MMIO support for Little Endian guests Cédric Le Goater
2013-11-05 17:22 ` Cédric Le Goater
2013-11-05 17:22 ` [PATCH v5 1/6] KVM: PPC: Book3S: add helper routine to load guest instructions Cédric Le Goater
2013-11-05 17:22 ` Cédric Le Goater
2013-11-05 17:22 ` [PATCH v5 2/6] KVM: PPC: Book3S: add helper routines to detect endian Cédric Le Goater
2013-11-05 17:22 ` Cédric Le Goater
2014-01-02 20:05 ` Alexander Graf
2014-01-02 20:05 ` Alexander Graf
2014-01-08 17:22 ` Cedric Le Goater
2014-01-08 17:22 ` Cedric Le Goater
2013-11-05 17:22 ` [PATCH v5 3/6] KVM: PPC: Book3S: MMIO emulation support for little endian guests Cédric Le Goater
2013-11-05 17:22 ` Cédric Le Goater
2014-01-02 20:22 ` Alexander Graf
2014-01-02 20:22 ` Alexander Graf
2014-01-08 17:23 ` Cedric Le Goater
2014-01-08 17:23 ` Cedric Le Goater
2014-01-08 17:34 ` Alexander Graf
2014-01-08 17:34 ` Alexander Graf
2014-01-08 17:40 ` Cedric Le Goater
2014-01-08 17:40 ` Cedric Le Goater
2014-01-08 17:35 ` [PATCH v6] " Cédric Le Goater
2014-01-08 17:35 ` Cédric Le Goater
2014-01-09 10:02 ` [PATCH v7] " Cédric Le Goater
2014-01-09 10:02 ` Cédric Le Goater
2014-01-09 10:17 ` Alexander Graf
2014-01-09 10:17 ` Alexander Graf
2014-01-09 10:33 ` Cedric Le Goater
2014-01-09 10:33 ` Cedric Le Goater
2014-01-09 10:51 ` [PATCH v8] " Cédric Le Goater
2014-01-09 10:51 ` Cédric Le Goater
2014-01-09 10:55 ` Alexander Graf
2014-01-09 10:55 ` Alexander Graf
2013-11-05 17:22 ` [PATCH v5 4/6] KVM: PPC: Book3S: modify kvmppc_need_byteswap() for little endian host Cédric Le Goater
2013-11-05 17:22 ` Cédric Le Goater
2013-11-08 14:36 ` [PATCH v5.1 " Cedric Le Goater
2013-11-08 14:36 ` Cedric Le Goater
2014-01-02 20:28 ` Alexander Graf
2014-01-02 20:28 ` Alexander Graf
2014-01-02 20:25 ` [PATCH v5 " Alexander Graf
2014-01-02 20:25 ` Alexander Graf
2013-11-05 17:22 ` [PATCH v5 5/6] powerpc: add Split Little Endian bit to MSR Cédric Le Goater
2013-11-05 17:22 ` Cédric Le Goater
2013-11-05 17:22 ` [PATCH v5 6/6] KVM: PPC: Book3S: modify byte loading when guest uses Split Little Endian Cédric Le Goater
2013-11-05 17:22 ` Cédric Le Goater
2014-01-02 20:26 ` Alexander Graf
2014-01-02 20:26 ` Alexander Graf
2013-11-06 5:55 ` [PATCH v2 3/3] KVM: PPC: Book3S: MMIO emulation support for little endian guests Paul Mackerras
2013-11-06 5:55 ` Paul Mackerras
2013-11-08 14:29 ` Cedric Le Goater
2013-11-08 14:29 ` Cedric Le Goater
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=52551708.5050900@fr.ibm.com \
--to=clg@fr.ibm.com \
--cc=agraf@suse.de \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=paulus@samba.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.