All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: "Tyrel Datwyler" <tyreld@linux.vnet.ibm.com>,
	"Michal Suchánek" <msuchanek@suse.de>,
	"Ashley Lai" <ashleydlai@gmail.com>,
	"Paul Mackerras" <paulus@samba.org>,
	"Michael Ellerman" <mpe@ellerman.id.au>,
	"Peter Huewe" <peterhuewe@gmx.de>,
	"Marcel Selhorst" <tpmdd@selhorst.net>,
	"Jarkko Sakkinen" <jarkko.sakkinen@linux.intel.com>,
	"Jason Gunthorpe" <jgunthorpe@obsidianresearch.com>,
	tpmdd-devel@lists.sourceforge.net, linuxppc-dev@lists.ozlabs.org,
	linux-kernel@vger.kernel.org
Subject: Re: ibmvtpm byteswapping inconsistency
Date: Sat, 28 Jan 2017 15:28:23 +1100	[thread overview]
Message-ID: <1485577703.2980.104.camel@kernel.crashing.org> (raw)
In-Reply-To: <48dc15a0-eaba-29e4-f39e-500177f98638@linux.vnet.ibm.com>

On Fri, 2017-01-27 at 12:32 -0800, Tyrel Datwyler wrote:
> Its possible being the end of the week I'm just a little dense, but
> wouldn't be64_to_cpu() imply that we are byte-swapping something that is
> already, or supposedly already, in BE format to cpu endianness? Which on
> a BE cpu I would expect a no-op, and on a LE cpu the 64bit word to have
> been swapped from BE --> LE?

It's in BE format in memory. In LE mode, loading it into a register will
get it the wrong way around, thus we have to swap it again. Once in a
register it has no "endianness" per-se, what matters is that the act
of loading from memory to a register would have loaded it the wrong
way around in LE.

> In my eyes the code does seem to support what I've argued. The same
> thing is done in the scsi VIO drivers. The CRQ structure is laid out and
> annotated BE. We use cpu_to_be() calls to load any non 8bit field.
> Finally, each word is swapped to cpu endian when we hand it off for the
> hcall.
> 
> from ibmvfc_send_event():
> 
>         __be64 *crq_as_u64 = (__be64 *) &evt->crq;
> 
>         <..snip..>
> 
>         if ((rc = ibmvfc_send_crq(vhost, be64_to_cpu(crq_as_u64[0]),
>                                   be64_to_cpu(crq_as_u64[1])))) {
> 
> Again, maybe I'm missing something.

WARNING: multiple messages have this Message-ID (diff)
From: Benjamin Herrenschmidt <benh-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r@public.gmane.org>
To: "Tyrel Datwyler"
	<tyreld-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>,
	"Michal Suchánek" <msuchanek-l3A5Bk7waGM@public.gmane.org>,
	"Ashley Lai" <ashleydlai-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	"Paul Mackerras" <paulus-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>,
	"Michael Ellerman" <mpe-Gsx/Oe8HsFggBc27wqDAHg@public.gmane.org>,
	"Peter Huewe" <peterhuewe-Mmb7MZpHnFY@public.gmane.org>,
	"Marcel Selhorst" <tpmdd-yWjUBOtONefk1uMJSBkQmQ@public.gmane.org>,
	"Jarkko Sakkinen"
	<jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
	"Jason Gunthorpe"
	<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
	linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: ibmvtpm byteswapping inconsistency
Date: Sat, 28 Jan 2017 15:28:23 +1100	[thread overview]
Message-ID: <1485577703.2980.104.camel@kernel.crashing.org> (raw)
In-Reply-To: <48dc15a0-eaba-29e4-f39e-500177f98638-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>

On Fri, 2017-01-27 at 12:32 -0800, Tyrel Datwyler wrote:
> Its possible being the end of the week I'm just a little dense, but
> wouldn't be64_to_cpu() imply that we are byte-swapping something that is
> already, or supposedly already, in BE format to cpu endianness? Which on
> a BE cpu I would expect a no-op, and on a LE cpu the 64bit word to have
> been swapped from BE --> LE?

It's in BE format in memory. In LE mode, loading it into a register will
get it the wrong way around, thus we have to swap it again. Once in a
register it has no "endianness" per-se, what matters is that the act
of loading from memory to a register would have loaded it the wrong
way around in LE.

> In my eyes the code does seem to support what I've argued. The same
> thing is done in the scsi VIO drivers. The CRQ structure is laid out and
> annotated BE. We use cpu_to_be() calls to load any non 8bit field.
> Finally, each word is swapped to cpu endian when we hand it off for the
> hcall.
> 
> from ibmvfc_send_event():
> 
>         __be64 *crq_as_u64 = (__be64 *) &evt->crq;
> 
>         <..snip..>
> 
>         if ((rc = ibmvfc_send_crq(vhost, be64_to_cpu(crq_as_u64[0]),
>                                   be64_to_cpu(crq_as_u64[1])))) {
> 
> Again, maybe I'm missing something.

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
tpmdd-devel mailing list
tpmdd-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tpmdd-devel

  parent reply	other threads:[~2017-01-28  4:28 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-26 20:22 ibmvtpm byteswapping inconsistency Michal Suchánek
2017-01-26 22:05 ` Jason Gunthorpe
2017-01-26 22:05   ` Jason Gunthorpe
2017-01-26 22:43   ` Michal Suchanek
2017-01-26 22:58   ` Ashley Lai
2017-02-02  4:24     ` Vicky
2017-02-02  4:24       ` Vicky
2017-02-02  4:40     ` Vicky
2017-02-02  4:40       ` Vicky
2017-02-02  4:40       ` Vicky
2017-02-02 10:55       ` Michael Ellerman
2017-02-02 10:55         ` Michael Ellerman
2017-02-02 10:55         ` Michael Ellerman
2017-02-02 11:29       ` Michal Suchánek
2017-02-02 11:29         ` Michal Suchánek
2017-02-02 15:17         ` David Laight
2017-02-02 15:17           ` David Laight
2017-01-27  1:42 ` Tyrel Datwyler
2017-01-27  1:50   ` Benjamin Herrenschmidt
2017-01-27  9:03     ` Michal Suchanek
2017-01-27  9:03       ` Michal Suchanek
2017-01-27  9:03       ` Michal Suchanek
2017-01-27 21:19       ` Tyrel Datwyler
2017-01-30  4:32         ` Michael Ellerman
2017-01-30  4:32           ` Michael Ellerman
2017-01-30 20:34           ` Tyrel Datwyler
2017-01-31  8:38             ` Michael Ellerman
2017-01-31  8:38               ` Michael Ellerman
2017-01-27 18:02     ` Tyrel Datwyler
2017-01-27 19:58       ` Benjamin Herrenschmidt
2017-01-27 19:58         ` Benjamin Herrenschmidt
2017-01-27 20:32         ` Tyrel Datwyler
2017-01-28  0:35           ` msuchanek
2017-01-28  4:28           ` Benjamin Herrenschmidt [this message]
2017-01-28  4:28             ` Benjamin Herrenschmidt
2017-01-30 14:42       ` David Laight
2017-01-30 14:42         ` David Laight
2017-01-27 11:18 ` David Laight
2017-01-27 11:18   ` David Laight

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=1485577703.2980.104.camel@kernel.crashing.org \
    --to=benh@kernel.crashing.org \
    --cc=ashleydlai@gmail.com \
    --cc=jarkko.sakkinen@linux.intel.com \
    --cc=jgunthorpe@obsidianresearch.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=msuchanek@suse.de \
    --cc=paulus@samba.org \
    --cc=peterhuewe@gmx.de \
    --cc=tpmdd-devel@lists.sourceforge.net \
    --cc=tpmdd@selhorst.net \
    --cc=tyreld@linux.vnet.ibm.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.