All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: aliguori@us.ibm.com, Paul 'Rusty' Russell <rusty@rustcorp.com.au>,
	qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] virtio-scsi Fix some endian bugs with virtio-scsi
Date: Fri, 23 Nov 2012 08:29:32 +0100	[thread overview]
Message-ID: <50AF25DC.4070604@redhat.com> (raw)
In-Reply-To: <1353647324-19840-1-git-send-email-david@gibson.dropbear.id.au>

Il 23/11/2012 06:08, David Gibson ha scritto:
> The virtio-scsi specification does not specify the correct endianness for
> fields in the request structure.  It's therefore best to assume that it is
> "guest native" endian since that's the (stupid and poorly defined) norm in
> virtio.

Indeed.

> However, the qemu device for virtio-scsi has no byteswaps at all, and so
> will break if the guest has different endianness from the host.  This patch
> fixes it by adding tswap() calls for the sense_len and resid fields in
> the request structure.  In theory status_qualifier needs swaps as well,
> but that field is never actually touched.  The tag field is a uint64_t, but
> since its value is completely arbitrary, it might as well be uint8_t[8]
> and so it does not need swapping.

Thanks, I adjusted the patch to use a separate variable for the argument
of tswap32 and pushed to the scsi branch.

Paolo

> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: Paul 'Rusty' Russell <rusty@rustcorp.com.au>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> ---
>  hw/virtio-scsi.c |    5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/virtio-scsi.c b/hw/virtio-scsi.c
> index 7d546f6..9d27d1d 100644
> --- a/hw/virtio-scsi.c
> +++ b/hw/virtio-scsi.c
> @@ -428,11 +428,12 @@ static void virtio_scsi_command_complete(SCSIRequest *r, uint32_t status,
>      req->resp.cmd->response = VIRTIO_SCSI_S_OK;
>      req->resp.cmd->status = status;
>      if (req->resp.cmd->status == GOOD) {
> -        req->resp.cmd->resid = resid;
> +        req->resp.cmd->resid = tswap32(resid);
>      } else {
>          req->resp.cmd->resid = 0;
>          req->resp.cmd->sense_len =
> -            scsi_req_get_sense(r, req->resp.cmd->sense, VIRTIO_SCSI_SENSE_SIZE);
> +            tswap32(scsi_req_get_sense(r, req->resp.cmd->sense,
> +                                       VIRTIO_SCSI_SENSE_SIZE));
>      }
>      virtio_scsi_complete_req(req);
>  }
> 

  parent reply	other threads:[~2012-11-23  7:29 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-23  5:08 [Qemu-devel] [PATCH] virtio-scsi Fix some endian bugs with virtio-scsi David Gibson
2012-11-23  7:11 ` Stefan Hajnoczi
2012-11-23  7:29 ` Paolo Bonzini [this message]
2012-12-02 22:08 ` Rusty Russell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50AF25DC.4070604@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=qemu-devel@nongnu.org \
    --cc=rusty@rustcorp.com.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.