All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: Alexey Kardashevskiy <aik@ozlabs.ru>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Alex Williamson <alex.williamson@redhat.com>
Cc: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>,
	linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org
Subject: Re: [PATCH] vfio: Fix endianness handling for emulated BARs
Date: Tue, 24 Jun 2014 14:52:22 +0200	[thread overview]
Message-ID: <53A97486.4070604@suse.de> (raw)
In-Reply-To: <53A9741B.1040500@ozlabs.ru>


On 24.06.14 14:50, Alexey Kardashevskiy wrote:
> On 06/24/2014 08:41 PM, Alexander Graf wrote:
>> On 24.06.14 12:11, Alexey Kardashevskiy wrote:
>>> On 06/21/2014 09:12 AM, Benjamin Herrenschmidt wrote:
>>>> On Thu, 2014-06-19 at 21:21 -0600, Alex Williamson wrote:
>>>>
>>>>> Working on big endian being an accident may be a matter of perspective
>>>>    :-)
>>>>
>>>>> The comment remains that this patch doesn't actually fix anything except
>>>>> the overhead on big endian systems doing redundant byte swapping and
>>>>> maybe the philosophy that vfio regions are little endian.
>>>> Yes, that works by accident because technically VFIO is a transport and
>>>> thus shouldn't perform any endian swapping of any sort, which remains
>>>> the responsibility of the end driver which is the only one to know
>>>> whether a given BAR location is a a register or some streaming data
>>>> and in the former case whether it's LE or BE (some PCI devices are BE
>>>> even ! :-)
>>>>
>>>> But yes, in the end, it works with the dual "cancelling" swaps and the
>>>> overhead of those swaps is probably drowned in the noise of the syscall
>>>> overhead.
>>>>
>>>>> I'm still not a fan of iowrite vs iowritebe, there must be something we
>>>>> can use that doesn't have an implicit swap.
>>>> Sadly there isn't ... In the old day we didn't even have the "be"
>>>> variant and readl/writel style accessors still don't have them either
>>>> for all archs.
>>>>
>>>> There is __raw_readl/writel but here the semantics are much more than
>>>> just "don't swap", they also don't have memory barriers (which means
>>>> they are essentially useless to most drivers unless those are platform
>>>> specific drivers which know exactly what they are doing, or in the rare
>>>> cases such as accessing a framebuffer which we know never have side
>>>> effects).
>>>>
>>>>>    Calling it iowrite*_native is also an abuse of the namespace.
>>>>>    Next thing we know some common code
>>>>> will legitimately use that name.
>>>> I might make sense to those definitions into a common header. There have
>>>> been a handful of cases in the past that wanted that sort of "native
>>>> byte order" MMIOs iirc (though don't ask me for examples, I can't really
>>>> remember).
>>>>
>>>>>    If we do need to define an alias
>>>>> (which I'd like to avoid) it should be something like vfio_iowrite32.
>>> Ping?
>>>
>>> We need to make a decision whether to move those xxx_native() helpers
>>> somewhere (where?) or leave the patch as is (as we figured out that
>>> iowriteXX functions implement barriers and we cannot just use raw
>>> accessors) and fix commit log to explain everything.
>> Is there actually any difference in generated code with this patch applied
>> and without? I would hope that iowrite..() is inlined and cancels out the
>> cpu_to_le..() calls that are also inlined?
> iowrite32 is a non-inline function so conversions take place so are the
> others. And sorry but I fail to see why this matters. We are not trying to
> accelerate things, we are removing redundant operations which confuse
> people who read the code.

The confusion depends on where you're coming from. If you happen to know 
that "iowrite32" writes in LE, then the LE conversion makes a lot of sense.

I don't have a strong feeling either way though and will let Alex decide 
on the path forward :).


Alex

WARNING: multiple messages have this Message-ID (diff)
From: Alexander Graf <agraf@suse.de>
To: Alexey Kardashevskiy <aik@ozlabs.ru>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Alex Williamson <alex.williamson@redhat.com>
Cc: linuxppc-dev@lists.ozlabs.org, kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Subject: Re: [PATCH] vfio: Fix endianness handling for emulated BARs
Date: Tue, 24 Jun 2014 14:52:22 +0200	[thread overview]
Message-ID: <53A97486.4070604@suse.de> (raw)
In-Reply-To: <53A9741B.1040500@ozlabs.ru>


On 24.06.14 14:50, Alexey Kardashevskiy wrote:
> On 06/24/2014 08:41 PM, Alexander Graf wrote:
>> On 24.06.14 12:11, Alexey Kardashevskiy wrote:
>>> On 06/21/2014 09:12 AM, Benjamin Herrenschmidt wrote:
>>>> On Thu, 2014-06-19 at 21:21 -0600, Alex Williamson wrote:
>>>>
>>>>> Working on big endian being an accident may be a matter of perspective
>>>>    :-)
>>>>
>>>>> The comment remains that this patch doesn't actually fix anything except
>>>>> the overhead on big endian systems doing redundant byte swapping and
>>>>> maybe the philosophy that vfio regions are little endian.
>>>> Yes, that works by accident because technically VFIO is a transport and
>>>> thus shouldn't perform any endian swapping of any sort, which remains
>>>> the responsibility of the end driver which is the only one to know
>>>> whether a given BAR location is a a register or some streaming data
>>>> and in the former case whether it's LE or BE (some PCI devices are BE
>>>> even ! :-)
>>>>
>>>> But yes, in the end, it works with the dual "cancelling" swaps and the
>>>> overhead of those swaps is probably drowned in the noise of the syscall
>>>> overhead.
>>>>
>>>>> I'm still not a fan of iowrite vs iowritebe, there must be something we
>>>>> can use that doesn't have an implicit swap.
>>>> Sadly there isn't ... In the old day we didn't even have the "be"
>>>> variant and readl/writel style accessors still don't have them either
>>>> for all archs.
>>>>
>>>> There is __raw_readl/writel but here the semantics are much more than
>>>> just "don't swap", they also don't have memory barriers (which means
>>>> they are essentially useless to most drivers unless those are platform
>>>> specific drivers which know exactly what they are doing, or in the rare
>>>> cases such as accessing a framebuffer which we know never have side
>>>> effects).
>>>>
>>>>>    Calling it iowrite*_native is also an abuse of the namespace.
>>>>>    Next thing we know some common code
>>>>> will legitimately use that name.
>>>> I might make sense to those definitions into a common header. There have
>>>> been a handful of cases in the past that wanted that sort of "native
>>>> byte order" MMIOs iirc (though don't ask me for examples, I can't really
>>>> remember).
>>>>
>>>>>    If we do need to define an alias
>>>>> (which I'd like to avoid) it should be something like vfio_iowrite32.
>>> Ping?
>>>
>>> We need to make a decision whether to move those xxx_native() helpers
>>> somewhere (where?) or leave the patch as is (as we figured out that
>>> iowriteXX functions implement barriers and we cannot just use raw
>>> accessors) and fix commit log to explain everything.
>> Is there actually any difference in generated code with this patch applied
>> and without? I would hope that iowrite..() is inlined and cancels out the
>> cpu_to_le..() calls that are also inlined?
> iowrite32 is a non-inline function so conversions take place so are the
> others. And sorry but I fail to see why this matters. We are not trying to
> accelerate things, we are removing redundant operations which confuse
> people who read the code.

The confusion depends on where you're coming from. If you happen to know 
that "iowrite32" writes in LE, then the LE conversion makes a lot of sense.

I don't have a strong feeling either way though and will let Alex decide 
on the path forward :).


Alex

  reply	other threads:[~2014-06-24 12:52 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-18 11:36 [PATCH] vfio: Fix endianness handling for emulated BARs Alexey Kardashevskiy
2014-06-18 11:36 ` Alexey Kardashevskiy
2014-06-18 18:35 ` Alex Williamson
2014-06-18 18:35   ` Alex Williamson
2014-06-19  0:50   ` Alexey Kardashevskiy
2014-06-19  0:50     ` Alexey Kardashevskiy
2014-06-19  1:50     ` Alexey Kardashevskiy
2014-06-19  1:50       ` Alexey Kardashevskiy
2014-06-19  1:50     ` Alexey Kardashevskiy
2014-06-19  1:50       ` Alexey Kardashevskiy
2014-06-19  3:48       ` Alexey Kardashevskiy
2014-06-19  3:48         ` Alexey Kardashevskiy
2014-06-19  5:30         ` Bharat.Bhushan
2014-06-19  5:30           ` Bharat.Bhushan
2014-06-19  5:30           ` Bharat.Bhushan
2014-06-19  6:17           ` Alexey Kardashevskiy
2014-06-19  6:17             ` Alexey Kardashevskiy
2014-06-20  3:21         ` Alex Williamson
2014-06-20  3:21           ` Alex Williamson
2014-06-20  3:21           ` Alex Williamson
2014-06-20 14:14           ` Alexey Kardashevskiy
2014-06-20 14:14             ` Alexey Kardashevskiy
2014-06-20 23:16             ` Benjamin Herrenschmidt
2014-06-20 23:16               ` Benjamin Herrenschmidt
2014-06-20 23:16               ` Benjamin Herrenschmidt
2014-06-20 23:12           ` Benjamin Herrenschmidt
2014-06-20 23:12             ` Benjamin Herrenschmidt
2014-06-20 23:12             ` Benjamin Herrenschmidt
2014-06-24 10:11             ` Alexey Kardashevskiy
2014-06-24 10:11               ` Alexey Kardashevskiy
2014-06-24 10:41               ` Alexander Graf
2014-06-24 10:41                 ` Alexander Graf
2014-06-24 12:50                 ` Alexey Kardashevskiy
2014-06-24 12:50                   ` Alexey Kardashevskiy
2014-06-24 12:52                   ` Alexander Graf [this message]
2014-06-24 12:52                     ` Alexander Graf
2014-06-24 13:01                     ` Alexey Kardashevskiy
2014-06-24 13:01                       ` Alexey Kardashevskiy
2014-06-24 13:22                       ` Alexander Graf
2014-06-24 13:22                         ` Alexander Graf
2014-06-24 14:21                         ` Alex Williamson
2014-06-24 14:21                           ` Alex Williamson
2014-06-24 14:33                           ` Alexey Kardashevskiy
2014-06-24 14:33                             ` Alexey Kardashevskiy
2014-06-24 14:40                             ` David Laight
2014-06-24 14:40                               ` David Laight
2014-06-24 14:40                               ` David Laight
2014-06-24 14:43                             ` Alex Williamson
2014-06-24 14:43                               ` Alex Williamson
2014-06-24 16:26                               ` Alexey Kardashevskiy
2014-06-24 16:26                                 ` Alexey Kardashevskiy
2014-06-24 21:54                             ` Benjamin Herrenschmidt
2014-06-24 21:54                               ` Benjamin Herrenschmidt
2014-06-25  2:43                               ` Alexey Kardashevskiy
2014-06-25  2:43                                 ` Alexey Kardashevskiy
2014-06-24 21:46                 ` Benjamin Herrenschmidt
2014-06-24 21:46                   ` Benjamin Herrenschmidt

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=53A97486.4070604@suse.de \
    --to=agraf@suse.de \
    --cc=aik@ozlabs.ru \
    --cc=alex.williamson@redhat.com \
    --cc=benh@kernel.crashing.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=nikunj@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.