From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52794) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WTUUG-0006zs-4p for qemu-devel@nongnu.org; Fri, 28 Mar 2014 06:58:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WTUU7-0003le-Q6 for qemu-devel@nongnu.org; Fri, 28 Mar 2014 06:58:12 -0400 Received: from e06smtp10.uk.ibm.com ([195.75.94.106]:56649) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WTUU7-0003lX-G0 for qemu-devel@nongnu.org; Fri, 28 Mar 2014 06:58:03 -0400 Received: from /spool/local by e06smtp10.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 28 Mar 2014 10:58:02 -0000 Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by d06dlp02.portsmouth.uk.ibm.com (Postfix) with ESMTP id 5C5CE2190063 for ; Fri, 28 Mar 2014 10:57:54 +0000 (GMT) Received: from d06av07.portsmouth.uk.ibm.com (d06av07.portsmouth.uk.ibm.com [9.149.37.248]) by b06cxnps3075.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id s2SAvmAa1573268 for ; Fri, 28 Mar 2014 10:57:48 GMT Received: from d06av07.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av07.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id s2SAvwXw014186 for ; Fri, 28 Mar 2014 06:57:59 -0400 From: Greg Kurz Date: Fri, 28 Mar 2014 11:57:56 +0100 Message-ID: <20140328105756.21018.57522.stgit@bahia.local> In-Reply-To: <20140328105709.21018.88000.stgit@bahia.local> References: <20140328105709.21018.88000.stgit@bahia.local> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH v6 6/8] virtio-scsi: use virtio wrappers to access headers List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: afaerber@suse.de Cc: kwolf@redhat.com, peter.maydell@linaro.org, thuth@linux.vnet.ibm.com, mst@redhat.com, marc.zyngier@arm.com, rusty@rustcorp.com.au, agraf@suse.de, qemu-devel@nongnu.org, stefanha@redhat.com, cornelia.huck@de.ibm.com, pbonzini@redhat.com, anthony@codemonkey.ws From: Rusty Russell Note that st*_raw and ld*_raw are effectively replaced by st*_p and ld*_p. Signed-off-by: Rusty Russell Reviewed-by: Anthony Liguori [ use per-device needs_byteswap flag, fix missing tswap32 in virtio_scsi_push_event(), Greg Kurz ] Signed-off-by: Greg Kurz --- hw/scsi/virtio-scsi.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c index b0d7517..20d326e 100644 --- a/hw/scsi/virtio-scsi.c +++ b/hw/scsi/virtio-scsi.c @@ -18,6 +18,7 @@ #include #include #include +#include "hw/virtio/virtio-access.h" typedef struct VirtIOSCSIReq { VirtIOSCSI *dev; @@ -315,12 +316,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 = tswap32(resid); + req->resp.cmd->resid = virtio_tswap32(resid, VIRTIO_DEVICE(s)); } else { req->resp.cmd->resid = 0; sense_len = scsi_req_get_sense(r, req->resp.cmd->sense, vs->sense_size); - req->resp.cmd->sense_len = tswap32(sense_len); + req->resp.cmd->sense_len = virtio_tswap32(sense_len, VIRTIO_DEVICE(s)); } virtio_scsi_complete_req(req); } @@ -416,16 +417,16 @@ static void virtio_scsi_get_config(VirtIODevice *vdev, VirtIOSCSIConfig *scsiconf = (VirtIOSCSIConfig *)config; VirtIOSCSICommon *s = VIRTIO_SCSI_COMMON(vdev); - stl_raw(&scsiconf->num_queues, s->conf.num_queues); - stl_raw(&scsiconf->seg_max, 128 - 2); - stl_raw(&scsiconf->max_sectors, s->conf.max_sectors); - stl_raw(&scsiconf->cmd_per_lun, s->conf.cmd_per_lun); - stl_raw(&scsiconf->event_info_size, sizeof(VirtIOSCSIEvent)); - stl_raw(&scsiconf->sense_size, s->sense_size); - stl_raw(&scsiconf->cdb_size, s->cdb_size); - 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); + virtio_stl_p(&scsiconf->num_queues, s->conf.num_queues, vdev); + virtio_stl_p(&scsiconf->seg_max, 128 - 2, vdev); + virtio_stl_p(&scsiconf->max_sectors, s->conf.max_sectors, vdev); + virtio_stl_p(&scsiconf->cmd_per_lun, s->conf.cmd_per_lun, vdev); + virtio_stl_p(&scsiconf->event_info_size, sizeof(VirtIOSCSIEvent), vdev); + virtio_stl_p(&scsiconf->sense_size, s->sense_size, vdev); + virtio_stl_p(&scsiconf->cdb_size, s->cdb_size, vdev); + virtio_stw_p(&scsiconf->max_channel, VIRTIO_SCSI_MAX_CHANNEL, vdev); + virtio_stw_p(&scsiconf->max_target, VIRTIO_SCSI_MAX_TARGET, vdev); + virtio_stl_p(&scsiconf->max_lun, VIRTIO_SCSI_MAX_LUN, vdev); } static void virtio_scsi_set_config(VirtIODevice *vdev, @@ -434,14 +435,15 @@ static void virtio_scsi_set_config(VirtIODevice *vdev, VirtIOSCSIConfig *scsiconf = (VirtIOSCSIConfig *)config; VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(vdev); - if ((uint32_t) ldl_raw(&scsiconf->sense_size) >= 65536 || - (uint32_t) ldl_raw(&scsiconf->cdb_size) >= 256) { + if ((uint32_t) virtio_ldl_p(&scsiconf->sense_size, + vdev) >= 65536 || + (uint32_t) virtio_ldl_p(&scsiconf->cdb_size, vdev) >= 256) { error_report("bad data written to virtio-scsi configuration space"); exit(1); } - vs->sense_size = ldl_raw(&scsiconf->sense_size); - vs->cdb_size = ldl_raw(&scsiconf->cdb_size); + vs->sense_size = virtio_ldl_p(&scsiconf->sense_size, vdev); + vs->cdb_size = virtio_ldl_p(&scsiconf->cdb_size, vdev); } static uint32_t virtio_scsi_get_features(VirtIODevice *vdev, @@ -519,8 +521,8 @@ static void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev, evt = req->resp.event; memset(evt, 0, sizeof(VirtIOSCSIEvent)); - evt->event = event; - evt->reason = reason; + evt->event = virtio_tswap32(event); + evt->reason = virtio_tswap32(reason); if (!dev) { assert(event == VIRTIO_SCSI_T_EVENTS_MISSED); } else {