Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-19 Thread Stefan Hajnoczi
On Wed, Jun 18, 2014 at 02:35:21PM +0200, Greg Kurz wrote:
 On Wed, 18 Jun 2014 18:38:14 +0800
 Stefan Hajnoczi stefa...@gmail.com wrote:
 
  On Tue, Jun 17, 2014 at 09:40:19AM +0200, Alexander Graf wrote:
   
   On 17.06.14 09:36, Stefan Hajnoczi wrote:
   On Fri, Jun 13, 2014 at 01:18:00PM +0200, Greg Kurz wrote:
   This version merges the changes requested during the v7 review, remarks 
   from
   ppc64 dump support review (yes, we talked about virtio there) and the 
   work on
   virtio subsections migration. Also two new patches have been added:
   - patch #1 is a preliminary fix for virtio-serial posted by Alexander 
   Graf
   - patch #9 prepares the work on the virtio_is_big_endian() helper
   
   The most significant changes are:
   - introduction of a new CPU method for virtio
   - endianness is taken from CPU that resets the device
   - fastpath virtio memory accessors for fixed endian targets
   - VMState based virtio subsections (compatibility friendly)
   I'm surprised it's not enough for the virtio device to have an
   endianness field (big/little).  It seems these patches make endianness
   depend on the CPUState through which the device is being accessed.
   
   Can you explain why it's necessary to check the CPUState?
   
   They only check CPUState at the point in time of reset, as that's the only
   case where we can derive the implicit endian configuration from :).
  
  What bothers me is that real hardware can't do this.  Given that VIRTIO
  1.0 is always little-endian I guess this is just a temporary hack for
  ppc little-endian.  Would be nice to add a comment so it's clear why
  this approach is being taken instead of a cleaner solution.
  
  Stefan
 
 Hi Stefan,
 
 Previous versions of this patch set had such comments:
 
 virtio data structures are defined as target endian, which assumes
 that's a fixed value.  In fact, that actually means it's platform-specific.
 The OASIS virtio 1.0 spec will fix this, by making all little endian.
 
 We need to support both implementations and we want to share as much code
 as possible.
 
 but these lines got lost between v6 and v7... my bad... :-\

Thanks!  I just wasn't mentally prepared when looking through the patch
series, the comment puts it into context.

Stefan


pgp1uVsXg1ZwZ.pgp
Description: PGP signature


Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Stefan Hajnoczi
On Tue, Jun 17, 2014 at 09:40:19AM +0200, Alexander Graf wrote:
 
 On 17.06.14 09:36, Stefan Hajnoczi wrote:
 On Fri, Jun 13, 2014 at 01:18:00PM +0200, Greg Kurz wrote:
 This version merges the changes requested during the v7 review, remarks from
 ppc64 dump support review (yes, we talked about virtio there) and the work 
 on
 virtio subsections migration. Also two new patches have been added:
 - patch #1 is a preliminary fix for virtio-serial posted by Alexander Graf
 - patch #9 prepares the work on the virtio_is_big_endian() helper
 
 The most significant changes are:
 - introduction of a new CPU method for virtio
 - endianness is taken from CPU that resets the device
 - fastpath virtio memory accessors for fixed endian targets
 - VMState based virtio subsections (compatibility friendly)
 I'm surprised it's not enough for the virtio device to have an
 endianness field (big/little).  It seems these patches make endianness
 depend on the CPUState through which the device is being accessed.
 
 Can you explain why it's necessary to check the CPUState?
 
 They only check CPUState at the point in time of reset, as that's the only
 case where we can derive the implicit endian configuration from :).

What bothers me is that real hardware can't do this.  Given that VIRTIO
1.0 is always little-endian I guess this is just a temporary hack for
ppc little-endian.  Would be nice to add a comment so it's clear why
this approach is being taken instead of a cleaner solution.

Stefan


pgpkT4yxbIJ3Z.pgp
Description: PGP signature


Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Greg Kurz
On Wed, 18 Jun 2014 18:38:14 +0800
Stefan Hajnoczi stefa...@gmail.com wrote:

 On Tue, Jun 17, 2014 at 09:40:19AM +0200, Alexander Graf wrote:
  
  On 17.06.14 09:36, Stefan Hajnoczi wrote:
  On Fri, Jun 13, 2014 at 01:18:00PM +0200, Greg Kurz wrote:
  This version merges the changes requested during the v7 review, remarks 
  from
  ppc64 dump support review (yes, we talked about virtio there) and the 
  work on
  virtio subsections migration. Also two new patches have been added:
  - patch #1 is a preliminary fix for virtio-serial posted by Alexander Graf
  - patch #9 prepares the work on the virtio_is_big_endian() helper
  
  The most significant changes are:
  - introduction of a new CPU method for virtio
  - endianness is taken from CPU that resets the device
  - fastpath virtio memory accessors for fixed endian targets
  - VMState based virtio subsections (compatibility friendly)
  I'm surprised it's not enough for the virtio device to have an
  endianness field (big/little).  It seems these patches make endianness
  depend on the CPUState through which the device is being accessed.
  
  Can you explain why it's necessary to check the CPUState?
  
  They only check CPUState at the point in time of reset, as that's the only
  case where we can derive the implicit endian configuration from :).
 
 What bothers me is that real hardware can't do this.  Given that VIRTIO
 1.0 is always little-endian I guess this is just a temporary hack for
 ppc little-endian.  Would be nice to add a comment so it's clear why
 this approach is being taken instead of a cleaner solution.
 
 Stefan

Hi Stefan,

Previous versions of this patch set had such comments:

virtio data structures are defined as target endian, which assumes
that's a fixed value.  In fact, that actually means it's platform-specific.
The OASIS virtio 1.0 spec will fix this, by making all little endian.

We need to support both implementations and we want to share as much code
as possible.

but these lines got lost between v6 and v7... my bad... :-\

I agree all of this is a hack but:
- it has been on the table for nearly a year
- ppc LE distros are already available
- the memory accessors part makes sense for 1.0

and, speaking of 1.0, I couldn't find any clue about when QEMU would support
this (Cc'ing Rusty for his input), but we (IBM and distro partners) need
ppc LE support now.

Cheers.

-- 
Gregory Kurz kurzg...@fr.ibm.com
 gk...@linux.vnet.ibm.com
Software Engineer @ IBM/Meiosys  http://www.ibm.com
Tel +33 (0)562 165 496

Anarchy is about taking complete responsibility for yourself.
Alan Moore.


signature.asc
Description: PGP signature


Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Peter Maydell
On 18 June 2014 11:38, Stefan Hajnoczi stefa...@gmail.com wrote:
 What bothers me is that real hardware can't do this.

Real hardware doesn't have endianness matches guest CPU endianness
semantics, which is what the virtio spec mandates...

 Given that VIRTIO
 1.0 is always little-endian I guess this is just a temporary hack for
 ppc little-endian.  Would be nice to add a comment so it's clear why
 this approach is being taken instead of a cleaner solution.

Also for ARM big-endian, and indeed for any CPU with runtime
configurable endianness that wants to use the kernel virtio
drivers that exist in the real world rather than the theoretical
future ones that might some day be written for the 1.0 virtio
spec...

thanks
-- PMM



Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Michael S. Tsirkin
On Wed, Jun 18, 2014 at 01:53:15PM +0100, Peter Maydell wrote:
 On 18 June 2014 11:38, Stefan Hajnoczi stefa...@gmail.com wrote:
  What bothers me is that real hardware can't do this.
 
 Real hardware doesn't have endianness matches guest CPU endianness
 semantics, which is what the virtio spec mandates...

So it was buggy. We never thought anyone would do a cross endian CPU :(.
We are fixing it in 1.0.

  Given that VIRTIO
  1.0 is always little-endian I guess this is just a temporary hack for
  ppc little-endian.  Would be nice to add a comment so it's clear why
  this approach is being taken instead of a cleaner solution.
 
 Also for ARM big-endian, and indeed for any CPU with runtime
 configurable endianness that wants to use the kernel virtio
 drivers that exist in the real world rather than the theoretical
 future ones that might some day be written for the 1.0 virtio
 spec...
 
 thanks
 -- PMM

That's not a theoretical future.
Spec will almost certainly be frozen two weeks from now.
So it is almost certain that drivers will be there in 3.17. 

Existing distros can then simply backport the
drivers - same as they would with any other new hardware.

-- 
MST



Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Greg Kurz
On Wed, 18 Jun 2014 16:42:04 +0300
Michael S. Tsirkin m...@redhat.com wrote:
 On Wed, Jun 18, 2014 at 01:53:15PM +0100, Peter Maydell wrote:
  On 18 June 2014 11:38, Stefan Hajnoczi stefa...@gmail.com wrote:
   What bothers me is that real hardware can't do this.
  
  Real hardware doesn't have endianness matches guest CPU endianness
  semantics, which is what the virtio spec mandates...
 
 So it was buggy. We never thought anyone would do a cross endian CPU :(.
 We are fixing it in 1.0.
 

virtio isn't the only victim... we also have vga. The problem can pop up
anywhere you rely on TARGET_WORDS_BIGENDIAN.

   Given that VIRTIO
   1.0 is always little-endian I guess this is just a temporary hack for
   ppc little-endian.  Would be nice to add a comment so it's clear why
   this approach is being taken instead of a cleaner solution.
  
  Also for ARM big-endian, and indeed for any CPU with runtime
  configurable endianness that wants to use the kernel virtio
  drivers that exist in the real world rather than the theoretical
  future ones that might some day be written for the 1.0 virtio
  spec...
  
  thanks
  -- PMM
 
 That's not a theoretical future.
 Spec will almost certainly be frozen two weeks from now.
 So it is almost certain that drivers will be there in 3.17. 
 

I don't want argue on the dates but I doubt that all legacy users
will switch to 1.0 as soon as it shows up... a transition period
may be needed.

 Existing distros can then simply backport the
 drivers - same as they would with any other new hardware.
 

Are you saying that upstream QEMU should not to support the
transition between legacy and 1.0 at all ?

Cheers.

-- 
Gregory Kurz kurzg...@fr.ibm.com
 gk...@linux.vnet.ibm.com
Software Engineer @ IBM/Meiosys  http://www.ibm.com
Tel +33 (0)562 165 496

Anarchy is about taking complete responsibility for yourself.
Alan Moore.




Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Michael S. Tsirkin
On Wed, Jun 18, 2014 at 04:28:04PM +0200, Greg Kurz wrote:
 On Wed, 18 Jun 2014 16:42:04 +0300
 Michael S. Tsirkin m...@redhat.com wrote:
  On Wed, Jun 18, 2014 at 01:53:15PM +0100, Peter Maydell wrote:
   On 18 June 2014 11:38, Stefan Hajnoczi stefa...@gmail.com wrote:
What bothers me is that real hardware can't do this.
   
   Real hardware doesn't have endianness matches guest CPU endianness
   semantics, which is what the virtio spec mandates...
  
  So it was buggy. We never thought anyone would do a cross endian CPU :(.
  We are fixing it in 1.0.
  
 
 virtio isn't the only victim... we also have vga. The problem can pop up
 anywhere you rely on TARGET_WORDS_BIGENDIAN.
 
Given that VIRTIO
1.0 is always little-endian I guess this is just a temporary hack for
ppc little-endian.  Would be nice to add a comment so it's clear why
this approach is being taken instead of a cleaner solution.
   
   Also for ARM big-endian, and indeed for any CPU with runtime
   configurable endianness that wants to use the kernel virtio
   drivers that exist in the real world rather than the theoretical
   future ones that might some day be written for the 1.0 virtio
   spec...
   
   thanks
   -- PMM
  
  That's not a theoretical future.
  Spec will almost certainly be frozen two weeks from now.
  So it is almost certain that drivers will be there in 3.17. 
  
 
 I don't want argue on the dates but I doubt that all legacy users
 will switch to 1.0 as soon as it shows up... a transition period
 may be needed.
 
  Existing distros can then simply backport the
  drivers - same as they would with any other new hardware.
  
 
 Are you saying that upstream QEMU should not to support the
 transition between legacy and 1.0 at all ?
 
 Cheers.

Not at all.
I wouldn't invest the time in implementing this feature myself:
I would just wait a bit and then work on backporting drivers
instead. But you did and the patches are surprisingly clean.
So I don't see a reason to keep them out of tree.


 -- 
 Gregory Kurz kurzg...@fr.ibm.com
  gk...@linux.vnet.ibm.com
 Software Engineer @ IBM/Meiosys  http://www.ibm.com
 Tel +33 (0)562 165 496
 
 Anarchy is about taking complete responsibility for yourself.
 Alan Moore.



Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Michael S. Tsirkin
On Wed, Jun 18, 2014 at 02:35:21PM +0200, Greg Kurz wrote:
 On Wed, 18 Jun 2014 18:38:14 +0800
 Stefan Hajnoczi stefa...@gmail.com wrote:
 
  On Tue, Jun 17, 2014 at 09:40:19AM +0200, Alexander Graf wrote:
   
   On 17.06.14 09:36, Stefan Hajnoczi wrote:
   On Fri, Jun 13, 2014 at 01:18:00PM +0200, Greg Kurz wrote:
   This version merges the changes requested during the v7 review, remarks 
   from
   ppc64 dump support review (yes, we talked about virtio there) and the 
   work on
   virtio subsections migration. Also two new patches have been added:
   - patch #1 is a preliminary fix for virtio-serial posted by Alexander 
   Graf
   - patch #9 prepares the work on the virtio_is_big_endian() helper
   
   The most significant changes are:
   - introduction of a new CPU method for virtio
   - endianness is taken from CPU that resets the device
   - fastpath virtio memory accessors for fixed endian targets
   - VMState based virtio subsections (compatibility friendly)
   I'm surprised it's not enough for the virtio device to have an
   endianness field (big/little).  It seems these patches make endianness
   depend on the CPUState through which the device is being accessed.
   
   Can you explain why it's necessary to check the CPUState?
   
   They only check CPUState at the point in time of reset, as that's the only
   case where we can derive the implicit endian configuration from :).
  
  What bothers me is that real hardware can't do this.  Given that VIRTIO
  1.0 is always little-endian I guess this is just a temporary hack for
  ppc little-endian.  Would be nice to add a comment so it's clear why
  this approach is being taken instead of a cleaner solution.
  
  Stefan
 
 Hi Stefan,
 
 Previous versions of this patch set had such comments:
 
 virtio data structures are defined as target endian, which assumes
 that's a fixed value.  In fact, that actually means it's platform-specific.
 The OASIS virtio 1.0 spec will fix this, by making all little endian.
 
 We need to support both implementations and we want to share as much code
 as possible.
 
 but these lines got lost between v6 and v7... my bad... :-\
 
 I agree all of this is a hack but:
 - it has been on the table for nearly a year
 - ppc LE distros are already available
 - the memory accessors part makes sense for 1.0
 
 and, speaking of 1.0, I couldn't find any clue about when QEMU would support
 this (Cc'ing Rusty for his input), but we (IBM and distro partners) need
 ppc LE support now.
 
 Cheers.

QEMU 2.2 I think.

One disadvantage of this work is that it removes some of the stimulus
for people to work on 1.0, replacing it with hacks. Hmm.

 -- 
 Gregory Kurz kurzg...@fr.ibm.com
  gk...@linux.vnet.ibm.com
 Software Engineer @ IBM/Meiosys  http://www.ibm.com
 Tel +33 (0)562 165 496
 
 Anarchy is about taking complete responsibility for yourself.
 Alan Moore.





Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Alexander Graf


On 18.06.14 17:12, Michael S. Tsirkin wrote:

On Wed, Jun 18, 2014 at 02:35:21PM +0200, Greg Kurz wrote:

On Wed, 18 Jun 2014 18:38:14 +0800
Stefan Hajnoczi stefa...@gmail.com wrote:


On Tue, Jun 17, 2014 at 09:40:19AM +0200, Alexander Graf wrote:

On 17.06.14 09:36, Stefan Hajnoczi wrote:

On Fri, Jun 13, 2014 at 01:18:00PM +0200, Greg Kurz wrote:

This version merges the changes requested during the v7 review, remarks from
ppc64 dump support review (yes, we talked about virtio there) and the work on
virtio subsections migration. Also two new patches have been added:
- patch #1 is a preliminary fix for virtio-serial posted by Alexander Graf
- patch #9 prepares the work on the virtio_is_big_endian() helper

The most significant changes are:
- introduction of a new CPU method for virtio
- endianness is taken from CPU that resets the device
- fastpath virtio memory accessors for fixed endian targets
- VMState based virtio subsections (compatibility friendly)

I'm surprised it's not enough for the virtio device to have an
endianness field (big/little).  It seems these patches make endianness
depend on the CPUState through which the device is being accessed.

Can you explain why it's necessary to check the CPUState?

They only check CPUState at the point in time of reset, as that's the only
case where we can derive the implicit endian configuration from :).

What bothers me is that real hardware can't do this.  Given that VIRTIO
1.0 is always little-endian I guess this is just a temporary hack for
ppc little-endian.  Would be nice to add a comment so it's clear why
this approach is being taken instead of a cleaner solution.

Stefan

Hi Stefan,

Previous versions of this patch set had such comments:

virtio data structures are defined as target endian, which assumes
that's a fixed value.  In fact, that actually means it's platform-specific.
The OASIS virtio 1.0 spec will fix this, by making all little endian.

We need to support both implementations and we want to share as much code
as possible.

but these lines got lost between v6 and v7... my bad... :-\

I agree all of this is a hack but:
- it has been on the table for nearly a year
- ppc LE distros are already available
- the memory accessors part makes sense for 1.0

and, speaking of 1.0, I couldn't find any clue about when QEMU would support
this (Cc'ing Rusty for his input), but we (IBM and distro partners) need
ppc LE support now.

Cheers.

QEMU 2.2 I think.

One disadvantage of this work is that it removes some of the stimulus
for people to work on 1.0, replacing it with hacks. Hmm.


If you prefer I can also apply these patches and send a pull request for 
them.



Alex




Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Michael S. Tsirkin
On Wed, Jun 18, 2014 at 05:14:17PM +0200, Alexander Graf wrote:
 
 On 18.06.14 17:12, Michael S. Tsirkin wrote:
 On Wed, Jun 18, 2014 at 02:35:21PM +0200, Greg Kurz wrote:
 On Wed, 18 Jun 2014 18:38:14 +0800
 Stefan Hajnoczi stefa...@gmail.com wrote:
 
 On Tue, Jun 17, 2014 at 09:40:19AM +0200, Alexander Graf wrote:
 On 17.06.14 09:36, Stefan Hajnoczi wrote:
 On Fri, Jun 13, 2014 at 01:18:00PM +0200, Greg Kurz wrote:
 This version merges the changes requested during the v7 review, remarks 
 from
 ppc64 dump support review (yes, we talked about virtio there) and the 
 work on
 virtio subsections migration. Also two new patches have been added:
 - patch #1 is a preliminary fix for virtio-serial posted by Alexander 
 Graf
 - patch #9 prepares the work on the virtio_is_big_endian() helper
 
 The most significant changes are:
 - introduction of a new CPU method for virtio
 - endianness is taken from CPU that resets the device
 - fastpath virtio memory accessors for fixed endian targets
 - VMState based virtio subsections (compatibility friendly)
 I'm surprised it's not enough for the virtio device to have an
 endianness field (big/little).  It seems these patches make endianness
 depend on the CPUState through which the device is being accessed.
 
 Can you explain why it's necessary to check the CPUState?
 They only check CPUState at the point in time of reset, as that's the only
 case where we can derive the implicit endian configuration from :).
 What bothers me is that real hardware can't do this.  Given that VIRTIO
 1.0 is always little-endian I guess this is just a temporary hack for
 ppc little-endian.  Would be nice to add a comment so it's clear why
 this approach is being taken instead of a cleaner solution.
 
 Stefan
 Hi Stefan,
 
 Previous versions of this patch set had such comments:
 
 virtio data structures are defined as target endian, which assumes
 that's a fixed value.  In fact, that actually means it's platform-specific.
 The OASIS virtio 1.0 spec will fix this, by making all little endian.
 
 We need to support both implementations and we want to share as much code
 as possible.
 
 but these lines got lost between v6 and v7... my bad... :-\
 
 I agree all of this is a hack but:
 - it has been on the table for nearly a year
 - ppc LE distros are already available
 - the memory accessors part makes sense for 1.0
 
 and, speaking of 1.0, I couldn't find any clue about when QEMU would support
 this (Cc'ing Rusty for his input), but we (IBM and distro partners) need
 ppc LE support now.
 
 Cheers.
 QEMU 2.2 I think.
 
 One disadvantage of this work is that it removes some of the stimulus
 for people to work on 1.0, replacing it with hacks. Hmm.
 
 If you prefer I can also apply these patches and send a pull request for
 them.
 
 
 Alex

Not yet, please.  v8 still got some comments, so we need to get v9.
Then give people a bit of time to review.  If everyone's happy it should
be mergeable in about a week from now.  Also there are Paolo's patches
already in queue which will conflict, not sure it's a good time for you
to step up and start merging virtio patches.

I'm not nacking, chill :)

I know you want these patches very much, but they aren't yet 100% ready anyway
and I don't see why, meanwhile, I shouldn't mention the downsides for
others to consider.

-- 
MST



Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Peter Maydell
On 18 June 2014 15:28, Greg Kurz gk...@linux.vnet.ibm.com wrote:
 On Wed, 18 Jun 2014 16:42:04 +0300
 Michael S. Tsirkin m...@redhat.com wrote:
 On Wed, Jun 18, 2014 at 01:53:15PM +0100, Peter Maydell wrote:
  On 18 June 2014 11:38, Stefan Hajnoczi stefa...@gmail.com wrote:
   What bothers me is that real hardware can't do this.
 
  Real hardware doesn't have endianness matches guest CPU endianness
  semantics, which is what the virtio spec mandates...

 So it was buggy. We never thought anyone would do a cross endian CPU :(.
 We are fixing it in 1.0.


 virtio isn't the only victim... we also have vga. The problem can pop up
 anywhere you rely on TARGET_WORDS_BIGENDIAN.

No, relying on TARGET_WORDS_BIGENDIAN is fine. It's only
a problem if your guest somehow assumes that messing with
the CPU state changes the behaviour of devices as a random
side effect. That's true for virtio. I'm pushing that it should not
be true for VGA (ie that the guest should have to explicitly tell
the VGA device be the other endian now). It's also not true for
most average devices whose endianness is
TARGET_WORDS_BIGENDIAN -- it just means they don't
change behaviour, and if the guest wants to be BE on a
fundamentally LE hardware device it gets to do the byte
swapping...

thanks
-- PMM



Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Alexander Graf


On 18.06.14 17:35, Peter Maydell wrote:

On 18 June 2014 15:28, Greg Kurz gk...@linux.vnet.ibm.com wrote:

On Wed, 18 Jun 2014 16:42:04 +0300
Michael S. Tsirkin m...@redhat.com wrote:

On Wed, Jun 18, 2014 at 01:53:15PM +0100, Peter Maydell wrote:

On 18 June 2014 11:38, Stefan Hajnoczi stefa...@gmail.com wrote:

What bothers me is that real hardware can't do this.

Real hardware doesn't have endianness matches guest CPU endianness
semantics, which is what the virtio spec mandates...

So it was buggy. We never thought anyone would do a cross endian CPU :(.
We are fixing it in 1.0.


virtio isn't the only victim... we also have vga. The problem can pop up
anywhere you rely on TARGET_WORDS_BIGENDIAN.

No, relying on TARGET_WORDS_BIGENDIAN is fine. It's only
a problem if your guest somehow assumes that messing with
the CPU state changes the behaviour of devices as a random
side effect. That's true for virtio. I'm pushing that it should not
be true for VGA (ie that the guest should have to explicitly tell
the VGA device be the other endian now). It's also not true for
most average devices whose endianness is
TARGET_WORDS_BIGENDIAN -- it just means they don't
change behaviour, and if the guest wants to be BE on a
fundamentally LE hardware device it gets to do the byte
swapping...


I actually agree with Greg here. We implicitly create different VGA 
adapters today depending on TARGET_WORDS_BIGENDIAN. The FB endianness 
should have been separate devices (BE / LE) or runtime configuration 
from the beginning.


Anything that checks TARGET_WORDS_BIGENDIAN in hw/ is very likely to do 
something pretty wrong ;).



Alex




Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Peter Maydell
On 18 June 2014 16:37, Alexander Graf ag...@suse.de wrote:
 I actually agree with Greg here. We implicitly create different VGA adapters
 today depending on TARGET_WORDS_BIGENDIAN. The FB endianness should have
 been separate devices (BE / LE) or runtime configuration from the beginning.

 Anything that checks TARGET_WORDS_BIGENDIAN in hw/ is very likely to do
 something pretty wrong ;).

Directly, yes, it's a bit of a red flag. But a huge % of devices do
indirectly, by marking their memory regions as DEVICE_NATIVE_ENDIAN.

thanks
-- PMM



Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-18 Thread Alexander Graf


On 18.06.14 17:40, Peter Maydell wrote:

On 18 June 2014 16:37, Alexander Graf ag...@suse.de wrote:

I actually agree with Greg here. We implicitly create different VGA adapters
today depending on TARGET_WORDS_BIGENDIAN. The FB endianness should have
been separate devices (BE / LE) or runtime configuration from the beginning.

Anything that checks TARGET_WORDS_BIGENDIAN in hw/ is very likely to do
something pretty wrong ;).

Directly, yes, it's a bit of a red flag. But a huge % of devices do
indirectly, by marking their memory regions as DEVICE_NATIVE_ENDIAN.


That's ok and the expected ABI to devices. It's TARGET_WORDS_BIGENDIAN 
that's a good marker that something's wrong.



Alex




Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-17 Thread Stefan Hajnoczi
On Fri, Jun 13, 2014 at 01:18:00PM +0200, Greg Kurz wrote:
 This version merges the changes requested during the v7 review, remarks from
 ppc64 dump support review (yes, we talked about virtio there) and the work on
 virtio subsections migration. Also two new patches have been added:
 - patch #1 is a preliminary fix for virtio-serial posted by Alexander Graf
 - patch #9 prepares the work on the virtio_is_big_endian() helper
 
 The most significant changes are:
 - introduction of a new CPU method for virtio
 - endianness is taken from CPU that resets the device
 - fastpath virtio memory accessors for fixed endian targets
 - VMState based virtio subsections (compatibility friendly)

I'm surprised it's not enough for the virtio device to have an
endianness field (big/little).  It seems these patches make endianness
depend on the CPUState through which the device is being accessed.

Can you explain why it's necessary to check the CPUState?

Stefan


pgpsqmJ55CG8r.pgp
Description: PGP signature


Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-17 Thread Alexander Graf


On 17.06.14 09:36, Stefan Hajnoczi wrote:

On Fri, Jun 13, 2014 at 01:18:00PM +0200, Greg Kurz wrote:

This version merges the changes requested during the v7 review, remarks from
ppc64 dump support review (yes, we talked about virtio there) and the work on
virtio subsections migration. Also two new patches have been added:
- patch #1 is a preliminary fix for virtio-serial posted by Alexander Graf
- patch #9 prepares the work on the virtio_is_big_endian() helper

The most significant changes are:
- introduction of a new CPU method for virtio
- endianness is taken from CPU that resets the device
- fastpath virtio memory accessors for fixed endian targets
- VMState based virtio subsections (compatibility friendly)

I'm surprised it's not enough for the virtio device to have an
endianness field (big/little).  It seems these patches make endianness
depend on the CPUState through which the device is being accessed.

Can you explain why it's necessary to check the CPUState?


They only check CPUState at the point in time of reset, as that's the 
only case where we can derive the implicit endian configuration from :).


After reset, endianness is a simple field in the state struct.


Alex




Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-16 Thread Greg Kurz
On Fri, 13 Jun 2014 13:56:13 +0200
Alexander Graf ag...@suse.de wrote:
 
 On 13.06.14 13:18, Greg Kurz wrote:
  Hi,
 
  This version merges the changes requested during the v7 review, remarks from
  ppc64 dump support review (yes, we talked about virtio there) and the work 
  on
  virtio subsections migration. Also two new patches have been added:
  - patch #1 is a preliminary fix for virtio-serial posted by Alexander Graf
  - patch #9 prepares the work on the virtio_is_big_endian() helper
 
  The most significant changes are:
  - introduction of a new CPU method for virtio
  - endianness is taken from CPU that resets the device
  - fastpath virtio memory accessors for fixed endian targets
  - VMState based virtio subsections (compatibility friendly)
 
  You'll find more detailed changelog in each patch.
 
  Please comment and hopefully apply.
 
  Thanks !
 
 Reviewed-by: Alexander Graf ag...@suse.de
 
 
 Alex
 

Hi,

I've reworked the patch set according to Alex's last remarks. Do any of the
other maintainers have pending remarks ? Should I wait or send a v9 now ?

Thanks.

-- 
Gregory Kurz kurzg...@fr.ibm.com
 gk...@linux.vnet.ibm.com
Software Engineer @ IBM/Meiosys  http://www.ibm.com
Tel +33 (0)562 165 496

Anarchy is about taking complete responsibility for yourself.
Alan Moore.




Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-16 Thread Amit Shah
On (Mon) 16 Jun 2014 [17:07:01], Greg Kurz wrote:
 Hi,
 
 I've reworked the patch set according to Alex's last remarks. Do any of the
 other maintainers have pending remarks ? Should I wait or send a v9 now ?

I'm yet to go through the series; I'll get to it in a day or two.

Amit



Re: [Qemu-devel] [PATCH v8 00/20] virtio endian-ambivalent target

2014-06-13 Thread Alexander Graf


On 13.06.14 13:18, Greg Kurz wrote:

Hi,

This version merges the changes requested during the v7 review, remarks from
ppc64 dump support review (yes, we talked about virtio there) and the work on
virtio subsections migration. Also two new patches have been added:
- patch #1 is a preliminary fix for virtio-serial posted by Alexander Graf
- patch #9 prepares the work on the virtio_is_big_endian() helper

The most significant changes are:
- introduction of a new CPU method for virtio
- endianness is taken from CPU that resets the device
- fastpath virtio memory accessors for fixed endian targets
- VMState based virtio subsections (compatibility friendly)

You'll find more detailed changelog in each patch.

Please comment and hopefully apply.

Thanks !


Reviewed-by: Alexander Graf ag...@suse.de


Alex