qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v8 17/20] virtio-scsi: use virtio wrappers to ac


From: Greg Kurz
Subject: Re: [Qemu-devel] [PATCH v8 17/20] virtio-scsi: use virtio wrappers to access headers
Date: Thu, 19 Jun 2014 17:05:30 +0200

On Fri, 13 Jun 2014 13:24:59 +0200
Greg Kurz <address@hidden> wrote:

> From: Rusty Russell <address@hidden>
> 
> Note that st*_raw and ld*_raw are effectively replaced by st*_p and ld*_p.
> 
> Signed-off-by: Rusty Russell <address@hidden>
> Reviewed-by: Anthony Liguori <address@hidden>
> [ pass VirtIODevice * to memory accessors,
>   fix missing tswap32 in virtio_scsi_push_event() by Cédric Le Goater,
>   Greg Kurz <address@hidden> ]
> Cc: Cédric Le Goater <address@hidden>
> Signed-off-by: Greg Kurz <address@hidden>
> ---
>  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 d5c37a9..e9afe00 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,6 +316,7 @@ static void virtio_scsi_command_complete(SCSIRequest *r, 
> uint32_t status,
>      VirtIOSCSIReq *req = r->hba_private;
>      VirtIOSCSI *s = req->dev;
>      VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(s);
> +    VirtIODevice *vdev = VIRTIO_DEVICE(s);
>      uint32_t sense_len;
> 
>      if (r->io_canceled) {
> @@ -324,12 +326,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(vdev, resid);
>      } 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(vdev, sense_len);
>      }
>      virtio_scsi_complete_req(req);
>  }
> @@ -425,16 +427,16 @@ static void virtio_scsi_get_config(VirtIODevice *vdev,
>      VirtIOSCSIConfig *scsiconf = (VirtIOSCSIConfig *)config;
>      VirtIOSCSICommon *s = VIRTIO_SCSI_COMMON(vdev);
> 
> -    stl_p(&scsiconf->num_queues, s->conf.num_queues);
> -    stl_p(&scsiconf->seg_max, 128 - 2);
> -    stl_p(&scsiconf->max_sectors, s->conf.max_sectors);
> -    stl_p(&scsiconf->cmd_per_lun, s->conf.cmd_per_lun);
> -    stl_p(&scsiconf->event_info_size, sizeof(VirtIOSCSIEvent));
> -    stl_p(&scsiconf->sense_size, s->sense_size);
> -    stl_p(&scsiconf->cdb_size, s->cdb_size);
> -    stw_p(&scsiconf->max_channel, VIRTIO_SCSI_MAX_CHANNEL);
> -    stw_p(&scsiconf->max_target, VIRTIO_SCSI_MAX_TARGET);
> -    stl_p(&scsiconf->max_lun, VIRTIO_SCSI_MAX_LUN);
> +    virtio_stl_p(vdev, &scsiconf->num_queues, s->conf.num_queues);
> +    virtio_stl_p(vdev, &scsiconf->seg_max, 128 - 2);
> +    virtio_stl_p(vdev, &scsiconf->max_sectors, s->conf.max_sectors);
> +    virtio_stl_p(vdev, &scsiconf->cmd_per_lun, s->conf.cmd_per_lun);
> +    virtio_stl_p(vdev, &scsiconf->event_info_size, sizeof(VirtIOSCSIEvent));
> +    virtio_stl_p(vdev, &scsiconf->sense_size, s->sense_size);
> +    virtio_stl_p(vdev, &scsiconf->cdb_size, s->cdb_size);
> +    virtio_stw_p(vdev, &scsiconf->max_channel, VIRTIO_SCSI_MAX_CHANNEL);
> +    virtio_stw_p(vdev, &scsiconf->max_target, VIRTIO_SCSI_MAX_TARGET);
> +    virtio_stl_p(vdev, &scsiconf->max_lun, VIRTIO_SCSI_MAX_LUN);
>  }
> 
>  static void virtio_scsi_set_config(VirtIODevice *vdev,
> @@ -443,14 +445,14 @@ static void virtio_scsi_set_config(VirtIODevice *vdev,
>      VirtIOSCSIConfig *scsiconf = (VirtIOSCSIConfig *)config;
>      VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(vdev);
> 
> -    if ((uint32_t) ldl_p(&scsiconf->sense_size) >= 65536 ||
> -        (uint32_t) ldl_p(&scsiconf->cdb_size) >= 256) {
> +    if ((uint32_t) virtio_ldl_p(vdev, &scsiconf->sense_size) >= 65536 ||
> +        (uint32_t) virtio_ldl_p(vdev, &scsiconf->cdb_size) >= 256) {
>          error_report("bad data written to virtio-scsi configuration space");
>          exit(1);
>      }
> 
> -    vs->sense_size = ldl_p(&scsiconf->sense_size);
> -    vs->cdb_size = ldl_p(&scsiconf->cdb_size);
> +    vs->sense_size = virtio_ldl_p(vdev, &scsiconf->sense_size);
> +    vs->cdb_size = virtio_ldl_p(vdev, &scsiconf->cdb_size);
>  }
> 
>  static uint32_t virtio_scsi_get_features(VirtIODevice *vdev,
> @@ -529,8 +531,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(vdev, event);
> +    evt->reason = virtio_tswap32(vdev, reason);

This chunk is a fix for a different issue actually... I'll send it in a 
separate patch.

>      if (!dev) {
>          assert(event == VIRTIO_SCSI_T_EVENTS_MISSED);
>      } else {
> 
> 




-- 
Gregory Kurz                                     address@hidden
                                                 address@hidden
Software Engineer @ IBM/Meiosys                  http://www.ibm.com
Tel +33 (0)562 165 496

"Anarchy is about taking complete responsibility for yourself."
        Alan Moore.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]