qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] virtio-scsi: Fix subtle (guest) endian bug


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH] virtio-scsi: Fix subtle (guest) endian bug
Date: Mon, 26 Nov 2012 08:23:48 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121016 Thunderbird/16.0.1

Il 26/11/2012 02:33, David Gibson ha scritto:
> The virtio-scsi config space is, by specification, in guest endian (which
> is ill-defined, but there you go).  In virtio_scsi_get_config() we set up
> all the fields in there, using stl_raw().  Which is a problem for the
> max_channel and max_target fields, which are 16-bit, not 32-bit.  For
> little-endian targets we get away with it by accident, since the first
> two bytes will still be correct, and the extra two bytes written (with
> zeroes) will be overwritten correctly by the next store.
> 
> But for big-endian guests, this means the max_target field ends up as zero,
> which means the guest will only recognize a single disk on the virtio-scsi
> bus.  This patch fixes the problem.
> 
> Cc: Paolo Bonzini <address@hidden>
> Cc: Paul 'Rusty' Russell <address@hidden>
> Signed-off-by: David Gibson <address@hidden>
> ---
>  hw/virtio-scsi.c |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/virtio-scsi.c b/hw/virtio-scsi.c
> index 9d27d1d..6eb2e03 100644
> --- a/hw/virtio-scsi.c
> +++ b/hw/virtio-scsi.c
> @@ -533,8 +533,8 @@ static void virtio_scsi_get_config(VirtIODevice *vdev,
>      stl_raw(&scsiconf->event_info_size, sizeof(VirtIOSCSIEvent));
>      stl_raw(&scsiconf->sense_size, s->sense_size);
>      stl_raw(&scsiconf->cdb_size, s->cdb_size);
> -    stl_raw(&scsiconf->max_channel, VIRTIO_SCSI_MAX_CHANNEL);
> -    stl_raw(&scsiconf->max_target, VIRTIO_SCSI_MAX_TARGET);
> +    stw_raw(&scsiconf->max_channel, VIRTIO_SCSI_MAX_CHANNEL);
> +    stw_raw(&scsiconf->max_target, VIRTIO_SCSI_MAX_TARGET);
>      stl_raw(&scsiconf->max_lun, VIRTIO_SCSI_MAX_LUN);
>  }
>  
> 

Thanks, applied to scsi-next branch.

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]