From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:40563) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tct2m-0002BQ-Fc for qemu-devel@nongnu.org; Mon, 26 Nov 2012 02:23:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Tct2k-0004pI-8U for qemu-devel@nongnu.org; Mon, 26 Nov 2012 02:23:52 -0500 Received: from mail-ee0-f45.google.com ([74.125.83.45]:48247) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tct2k-0004pD-1d for qemu-devel@nongnu.org; Mon, 26 Nov 2012 02:23:50 -0500 Received: by mail-ee0-f45.google.com with SMTP id d49so6365256eek.4 for ; Sun, 25 Nov 2012 23:23:49 -0800 (PST) Sender: Paolo Bonzini Message-ID: <50B31904.5040902@redhat.com> Date: Mon, 26 Nov 2012 08:23:48 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1353893632-22442-1-git-send-email-david@gibson.dropbear.id.au> In-Reply-To: <1353893632-22442-1-git-send-email-david@gibson.dropbear.id.au> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] virtio-scsi: Fix subtle (guest) endian bug List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: aliguori@us.ibm.com, Paul 'Rusty' Russell , qemu-devel@nongnu.org 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 > Cc: Paul 'Rusty' Russell > Signed-off-by: David Gibson > --- > 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