On Wed, Jul 01, 2015 at 12:02:50PM -0700, Linus Torvalds wrote:> On Wed, Jul 1, 2015 at 2:31 AM, Michael S. Tsirkin <mst at redhat.com> wrote: > > virtio/vhost: cross endian support > > Ugh. Does this really have to be dynamic? > > Can't virtio do the sane thing, and just use a _fixed_ endianness? > > Doing a unconditional byte swap is faster and simpler than the crazy > conditionals. That's true regardless of endianness, but gets to be > even more so if the fixed endianness is little-endian, since BE is > not-so-slowly fading from the world. > > LinusYea, well - support for legacy BE guests on the new LE hosts is exactly the motivation for this. I dislike it too, but there are two redeeming properties that made me merge this: 1. It's a trivial amount of code: since we wrap host/guest accesses anyway, almost all of it is well hidden from drivers. 2. Sane platforms would never set flags like VHOST_CROSS_ENDIAN_LEGACY - and when it's clear, there's zero overhead (as some point it was tested by compiling with and without the patches, got the same stripped binary). Maybe we could create a Kconfig symbol to enforce point (2): prevent people from enabling it e.g. on x86. I will look into this - but it can be done by a patch on top, so I think this can be merged as is. Or do you know of someone using kernel with all config options enabled undiscriminately? Thanks, -- MST
On Thu, 2 Jul 2015 08:01:28 +0200 "Michael S. Tsirkin" <mst at redhat.com> wrote:> On Wed, Jul 01, 2015 at 12:02:50PM -0700, Linus Torvalds wrote: > > On Wed, Jul 1, 2015 at 2:31 AM, Michael S. Tsirkin <mst at redhat.com> wrote: > > > virtio/vhost: cross endian support > > > > Ugh. Does this really have to be dynamic? > > > > Can't virtio do the sane thing, and just use a _fixed_ endianness? > > > > Doing a unconditional byte swap is faster and simpler than the crazy > > conditionals. That's true regardless of endianness, but gets to be > > even more so if the fixed endianness is little-endian, since BE is > > not-so-slowly fading from the world. > > > > Linus > > Yea, well - support for legacy BE guests on the new LE hosts is > exactly the motivation for this. > > I dislike it too, but there are two redeeming properties that > made me merge this: > > 1. It's a trivial amount of code: since we wrap host/guest accesses > anyway, almost all of it is well hidden from drivers. > > 2. Sane platforms would never set flags like VHOST_CROSS_ENDIAN_LEGACY - > and when it's clear, there's zero overhead (as some point it was > tested by compiling with and without the patches, got the same > stripped binary). > > Maybe we could create a Kconfig symbol to enforce point (2): prevent > people from enabling it e.g. on x86. I will look into this - but it can > be done by a patch on top, so I think this can be merged as is. >This cross-endian *oddity* is targeting PowerPC book3s_64 processors... I am not aware of any other users. Maybe create a symbol that would be only selected by PPC_BOOK3S_64 ?> Or do you know of someone using kernel with all config options enabled > undiscriminately? > > Thanks, >
On Thu, Jul 02, 2015 at 11:12:56AM +0200, Greg Kurz wrote:> On Thu, 2 Jul 2015 08:01:28 +0200 > "Michael S. Tsirkin" <mst at redhat.com> wrote: > > > On Wed, Jul 01, 2015 at 12:02:50PM -0700, Linus Torvalds wrote: > > > On Wed, Jul 1, 2015 at 2:31 AM, Michael S. Tsirkin <mst at redhat.com> wrote: > > > > virtio/vhost: cross endian support > > > > > > Ugh. Does this really have to be dynamic? > > > > > > Can't virtio do the sane thing, and just use a _fixed_ endianness? > > > > > > Doing a unconditional byte swap is faster and simpler than the crazy > > > conditionals. That's true regardless of endianness, but gets to be > > > even more so if the fixed endianness is little-endian, since BE is > > > not-so-slowly fading from the world. > > > > > > Linus > > > > Yea, well - support for legacy BE guests on the new LE hosts is > > exactly the motivation for this. > > > > I dislike it too, but there are two redeeming properties that > > made me merge this: > > > > 1. It's a trivial amount of code: since we wrap host/guest accesses > > anyway, almost all of it is well hidden from drivers. > > > > 2. Sane platforms would never set flags like VHOST_CROSS_ENDIAN_LEGACY - > > and when it's clear, there's zero overhead (as some point it was > > tested by compiling with and without the patches, got the same > > stripped binary). > > > > Maybe we could create a Kconfig symbol to enforce point (2): prevent > > people from enabling it e.g. on x86. I will look into this - but it can > > be done by a patch on top, so I think this can be merged as is. > > > > This cross-endian *oddity* is targeting PowerPC book3s_64 processors... I > am not aware of any other users. Maybe create a symbol that would > be only selected by PPC_BOOK3S_64 ?I think some ARM systems are trying to support cross-endian configurations as well. Besides that, yes, this is more or less what I had in mind.> > > Or do you know of someone using kernel with all config options enabled > > undiscriminately? > > > > Thanks, > >
On Thu, Jul 02, 2015 at 08:01:28AM +0200, Michael S. Tsirkin wrote:> On Wed, Jul 01, 2015 at 12:02:50PM -0700, Linus Torvalds wrote: > > On Wed, Jul 1, 2015 at 2:31 AM, Michael S. Tsirkin <mst at redhat.com> wrote: > > > virtio/vhost: cross endian support > > > > Ugh. Does this really have to be dynamic? > > > > Can't virtio do the sane thing, and just use a _fixed_ endianness? > > > > Doing a unconditional byte swap is faster and simpler than the crazy > > conditionals. That's true regardless of endianness, but gets to be > > even more so if the fixed endianness is little-endian, since BE is > > not-so-slowly fading from the world. > > > > Linus > > Yea, well - support for legacy BE guests on the new LE hosts is > exactly the motivation for this. > > I dislike it too, but there are two redeeming properties that > made me merge this: > > 1. It's a trivial amount of code: since we wrap host/guest accesses > anyway, almost all of it is well hidden from drivers. > > 2. Sane platforms would never set flags like VHOST_CROSS_ENDIAN_LEGACY - > and when it's clear, there's zero overhead (as some point it was > tested by compiling with and without the patches, got the same > stripped binary). > > Maybe we could create a Kconfig symbol to enforce point (2): prevent > people from enabling it e.g. on x86. I will look into this - but it can > be done by a patch on top, so I think this can be merged as is.Linus, could you please clarify whether making the feature depend on the cross-endian guest support would address your comment, and whether you think this can be merged as is, and the dependency added after -rc1?> Or do you know of someone using kernel with all config options enabled > undiscriminately? > > Thanks, > > -- > MST
On Fri, Jul 3, 2015 at 12:59 AM, Michael S. Tsirkin <mst at redhat.com> wrote:> > Linus, could you please clarify whether making the > feature depend on the cross-endian guest support > would address your comment, and whether you think > this can be merged as is, and the dependency added > after -rc1?I'll take it. I still think dynamic byte order is a fundamental (and much too common) mistake, but whatever. Linus