From: Rusty Russell <ru...@rustcorp.com.au> Note that st*_raw and ld*_raw are effectively replaced by st*_p and ld*_p.
Signed-off-by: Rusty Russell <ru...@rustcorp.com.au> Reviewed-by: Anthony Liguori <aligu...@us.ibm.com> [ use per-device needs_byteswap flag, fix missing tswap32 in virtio_scsi_push_event(), Greg Kurz <gk...@linux.vnet.ibm.com> ] Signed-off-by: Greg Kurz <gk...@linux.vnet.ibm.com> --- 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 <hw/scsi/scsi.h> #include <block/scsi.h> #include <hw/virtio/virtio-bus.h> +#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 {