On Fri, 28 Mar 2014 11:57:56 +0100 Greg Kurz <gk...@linux.vnet.ibm.com> wrote:
> 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); My bad again, it should be: + evt->event = virtio_tswap32(event, vdev); + evt->reason = virtio_tswap32(reason, vdev); > if (!dev) { > assert(event == VIRTIO_SCSI_T_EVENTS_MISSED); > } else { > > -- Gregory Kurz kurzg...@fr.ibm.com gk...@linux.vnet.ibm.com Software Engineer @ IBM/Meiosys http://www.ibm.com Tel +33 (0)562 165 496 "Anarchy is about taking complete responsibility for yourself." Alan Moore.