[Top][All Lists]
[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