All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: Alexander Graf <agraf@suse.de>, Nic Bellinger <nab@datera.com>,
	Andreas Faerber <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH 05/17] scsi: Remove 'lun' argument
Date: Wed, 29 Oct 2014 10:05:45 +0100	[thread overview]
Message-ID: <5450ADE9.5040801@redhat.com> (raw)
In-Reply-To: <1414569232-21357-6-git-send-email-hare@suse.de>

On 10/29/2014 08:53 AM, Hannes Reinecke wrote:
> All scsi functions take a scsi device as argument, which has
> a LUN assigned to it. So we can get rid of specifying the 'lun'
> as separate argument.

... except if you are sending a command to a non-existent LUN, in which
case scsi_req_new detects this and redirects to a special SCSIReqOps
instance:

    ... else if (lun != d->lun ||
               buf[0] == REPORT_LUNS ||
               (buf[0] == REQUEST_SENSE && d->sense_len)) {
        ops = &reqops_target_command;
    } else {
        ops = NULL;
    }

Paolo

> Signed-off-by: Hannes Reinecke <hare@suse.de>
> ---
>  hw/scsi/esp.c          |  2 +-
>  hw/scsi/lsi53c895a.c   |  3 +--
>  hw/scsi/megasas.c      | 44 +++++++++++++++++------------------
>  hw/scsi/scsi-bus.c     | 62 +++++++++++++++++++++++---------------------------
>  hw/scsi/scsi-disk.c    | 13 +++++------
>  hw/scsi/scsi-generic.c |  4 ++--
>  hw/scsi/virtio-scsi.c  |  1 -
>  hw/scsi/vmw_pvscsi.c   |  2 +-
>  hw/usb/dev-storage.c   |  2 +-
>  hw/usb/dev-uas.c       |  1 -
>  include/hw/scsi/scsi.h |  7 +++---
>  11 files changed, 65 insertions(+), 76 deletions(-)
> 
> diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c
> index 5ab44d8..1123156 100644
> --- a/hw/scsi/esp.c
> +++ b/hw/scsi/esp.c
> @@ -129,7 +129,7 @@ static void do_busid_cmd(ESPState *s, uint8_t *buf, uint8_t busid)
>      trace_esp_do_busid_cmd(busid);
>      lun = busid & 7;
>      current_lun = scsi_device_find(&s->bus, 0, s->current_dev->id, lun);
> -    s->current_req = scsi_req_new(current_lun, 0, lun, buf, s);
> +    s->current_req = scsi_req_new(current_lun, 0, buf, s);
>      datalen = scsi_req_enqueue(s->current_req);
>      s->ti_size = datalen;
>      if (datalen != 0) {
> diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c
> index d9b4c7e..a185e0c 100644
> --- a/hw/scsi/lsi53c895a.c
> +++ b/hw/scsi/lsi53c895a.c
> @@ -783,8 +783,7 @@ static void lsi_do_command(LSIState *s)
>      assert(s->current == NULL);
>      s->current = g_malloc0(sizeof(lsi_request));
>      s->current->tag = s->select_tag;
> -    s->current->req = scsi_req_new(dev, s->current->tag, s->current_lun, buf,
> -                                   s->current);
> +    s->current->req = scsi_req_new(dev, s->current->tag, buf, s->current);
>  
>      n = scsi_req_enqueue(s->current->req);
>      if (n) {
> diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c
> index eedc992..5b9e508 100644
> --- a/hw/scsi/megasas.c
> +++ b/hw/scsi/megasas.c
> @@ -971,14 +971,13 @@ static int megasas_dcmd_pd_list_query(MegasasState *s, MegasasCmd *cmd)
>      return MFI_STAT_OK;
>  }
>  
> -static int megasas_pd_get_info_submit(SCSIDevice *sdev, int lun,
> -                                      MegasasCmd *cmd)
> +static int megasas_pd_get_info_submit(SCSIDevice *sdev, MegasasCmd *cmd)
>  {
>      struct mfi_pd_info *info = cmd->iov_buf;
>      size_t dcmd_size = sizeof(struct mfi_pd_info);
>      BlockConf *conf = &sdev->conf;
>      uint64_t pd_size;
> -    uint16_t sdev_id = ((sdev->id & 0xFF) >> 8) | (lun & 0xFF);
> +    uint16_t sdev_id = ((sdev->id & 0xFF) >> 8) | (sdev->lun & 0xFF);
>      uint8_t cmdbuf[6];
>      SCSIRequest *req;
>      size_t len, resid;
> @@ -990,7 +989,7 @@ static int megasas_pd_get_info_submit(SCSIDevice *sdev, int lun,
>          info->inquiry_data[0] = 0x7f; /* Force PQual 0x3, PType 0x1f */
>          info->vpd_page83[0] = 0x7f;
>          megasas_setup_inquiry(cmdbuf, 0, sizeof(info->inquiry_data));
> -        req = scsi_req_new(sdev, cmd->index, lun, cmdbuf, cmd);
> +        req = scsi_req_new(sdev, cmd->index, cmdbuf, cmd);
>          if (!req) {
>              trace_megasas_dcmd_req_alloc_failed(cmd->index,
>                                                  "PD get info std inquiry");
> @@ -999,7 +998,8 @@ static int megasas_pd_get_info_submit(SCSIDevice *sdev, int lun,
>              return MFI_STAT_FLASH_ALLOC_FAIL;
>          }
>          trace_megasas_dcmd_internal_submit(cmd->index,
> -                                           "PD get info std inquiry", lun);
> +                                           "PD get info std inquiry",
> +                                           sdev->lun);
>          len = scsi_req_enqueue(req);
>          if (len > 0) {
>              cmd->iov_size = len;
> @@ -1008,14 +1008,15 @@ static int megasas_pd_get_info_submit(SCSIDevice *sdev, int lun,
>          return MFI_STAT_INVALID_STATUS;
>      } else if (info->inquiry_data[0] != 0x7f && info->vpd_page83[0] == 0x7f) {
>          megasas_setup_inquiry(cmdbuf, 0x83, sizeof(info->vpd_page83));
> -        req = scsi_req_new(sdev, cmd->index, lun, cmdbuf, cmd);
> +        req = scsi_req_new(sdev, cmd->index, cmdbuf, cmd);
>          if (!req) {
>              trace_megasas_dcmd_req_alloc_failed(cmd->index,
>                                                  "PD get info vpd inquiry");
>              return MFI_STAT_FLASH_ALLOC_FAIL;
>          }
>          trace_megasas_dcmd_internal_submit(cmd->index,
> -                                           "PD get info vpd inquiry", lun);
> +                                           "PD get info vpd inquiry",
> +                                           sdev->lun);
>          len = scsi_req_enqueue(req);
>          if (len > 0) {
>              cmd->iov_size = len;
> @@ -1074,7 +1075,7 @@ static int megasas_dcmd_pd_get_info(MegasasState *s, MegasasCmd *cmd)
>  
>      if (sdev) {
>          /* Submit inquiry */
> -        retval = megasas_pd_get_info_submit(sdev, pd_id, cmd);
> +        retval = megasas_pd_get_info_submit(sdev, cmd);
>      }
>  
>      return retval;
> @@ -1136,8 +1137,7 @@ static int megasas_dcmd_ld_list_query(MegasasState *s, MegasasCmd *cmd)
>      return MFI_STAT_OK;
>  }
>  
> -static int megasas_ld_get_info_submit(SCSIDevice *sdev, int lun,
> -                                      MegasasCmd *cmd)
> +static int megasas_ld_get_info_submit(SCSIDevice *sdev, MegasasCmd *cmd)
>  {
>      struct mfi_ld_info *info = cmd->iov_buf;
>      size_t dcmd_size = sizeof(struct mfi_ld_info);
> @@ -1145,7 +1145,7 @@ static int megasas_ld_get_info_submit(SCSIDevice *sdev, int lun,
>      SCSIRequest *req;
>      ssize_t len, resid;
>      BlockConf *conf = &sdev->conf;
> -    uint16_t sdev_id = ((sdev->id & 0xFF) >> 8) | (lun & 0xFF);
> +    uint16_t sdev_id = ((sdev->id & 0xFF) >> 8) | (sdev->lun & 0xFF);
>      uint64_t ld_size;
>  
>      if (!cmd->iov_buf) {
> @@ -1153,7 +1153,7 @@ static int megasas_ld_get_info_submit(SCSIDevice *sdev, int lun,
>          memset(cmd->iov_buf, 0x0, dcmd_size);
>          info = cmd->iov_buf;
>          megasas_setup_inquiry(cdb, 0x83, sizeof(info->vpd_page83));
> -        req = scsi_req_new(sdev, cmd->index, lun, cdb, cmd);
> +        req = scsi_req_new(sdev, cmd->index, cdb, cmd);
>          if (!req) {
>              trace_megasas_dcmd_req_alloc_failed(cmd->index,
>                                                  "LD get info vpd inquiry");
> @@ -1162,7 +1162,8 @@ static int megasas_ld_get_info_submit(SCSIDevice *sdev, int lun,
>              return MFI_STAT_FLASH_ALLOC_FAIL;
>          }
>          trace_megasas_dcmd_internal_submit(cmd->index,
> -                                           "LD get info vpd inquiry", lun);
> +                                           "LD get info vpd inquiry",
> +                                           sdev->lun);
>          len = scsi_req_enqueue(req);
>          if (len > 0) {
>              cmd->iov_size = len;
> @@ -1172,7 +1173,7 @@ static int megasas_ld_get_info_submit(SCSIDevice *sdev, int lun,
>      }
>  
>      info->ld_config.params.state = MFI_LD_STATE_OPTIMAL;
> -    info->ld_config.properties.ld.v.target_id = lun;
> +    info->ld_config.properties.ld.v.target_id = sdev->lun;
>      info->ld_config.params.stripe_size = 3;
>      info->ld_config.params.num_drives = 1;
>      info->ld_config.params.is_consistent = 1;
> @@ -1217,7 +1218,7 @@ static int megasas_dcmd_ld_get_info(MegasasState *s, MegasasCmd *cmd)
>      }
>  
>      if (sdev) {
> -        retval = megasas_ld_get_info_submit(sdev, ld_id, cmd);
> +        retval = megasas_ld_get_info_submit(sdev, cmd);
>      }
>  
>      return retval;
> @@ -1509,17 +1510,16 @@ static int megasas_finish_internal_dcmd(MegasasCmd *cmd,
>  {
>      int opcode;
>      int retval = MFI_STAT_OK;
> -    int lun = req->lun;
>  
>      opcode = le32_to_cpu(cmd->frame->dcmd.opcode);
>      scsi_req_unref(req);
> -    trace_megasas_dcmd_internal_finish(cmd->index, opcode, lun);
> +    trace_megasas_dcmd_internal_finish(cmd->index, opcode, req->dev->lun);
>      switch (opcode) {
>      case MFI_DCMD_PD_GET_INFO:
> -        retval = megasas_pd_get_info_submit(req->dev, lun, cmd);
> +        retval = megasas_pd_get_info_submit(req->dev, cmd);
>          break;
>      case MFI_DCMD_LD_GET_INFO:
> -        retval = megasas_ld_get_info_submit(req->dev, lun, cmd);
> +        retval = megasas_ld_get_info_submit(req->dev, cmd);
>          break;
>      default:
>          trace_megasas_dcmd_internal_invalid(cmd->index, opcode);
> @@ -1609,8 +1609,7 @@ static int megasas_handle_scsi(MegasasState *s, MegasasCmd *cmd,
>          return MFI_STAT_SCSI_DONE_WITH_ERROR;
>      }
>  
> -    cmd->req = scsi_req_new(sdev, cmd->index,
> -                            cmd->frame->header.lun_id, cdb, cmd);
> +    cmd->req = scsi_req_new(sdev, cmd->index, cdb, cmd);
>      if (!cmd->req) {
>          trace_megasas_scsi_req_alloc_failed(
>                  mfi_frame_desc[cmd->frame->header.frame_cmd],
> @@ -1686,8 +1685,7 @@ static int megasas_handle_io(MegasasState *s, MegasasCmd *cmd)
>      }
>  
>      megasas_encode_lba(cdb, lba_start, lba_count, is_write);
> -    cmd->req = scsi_req_new(sdev, cmd->index,
> -                            cmd->frame->header.lun_id, cdb, cmd);
> +    cmd->req = scsi_req_new(sdev, cmd->index, cdb, cmd);
>      if (!cmd->req) {
>          trace_megasas_scsi_req_alloc_failed(
>              mfi_frame_desc[cmd->frame->header.frame_cmd],
> diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
> index 64d0880..0f13b77 100644
> --- a/hw/scsi/scsi-bus.c
> +++ b/hw/scsi/scsi-bus.c
> @@ -72,12 +72,12 @@ int scsi_bus_parse_cdb(SCSIDevice *dev, SCSICommand *cmd, uint8_t *buf,
>      return rc;
>  }
>  
> -static SCSIRequest *scsi_device_alloc_req(SCSIDevice *s, uint32_t tag, uint32_t lun,
> +static SCSIRequest *scsi_device_alloc_req(SCSIDevice *s, uint32_t tag,
>                                            uint8_t *buf, void *hba_private)
>  {
>      SCSIDeviceClass *sc = SCSI_DEVICE_GET_CLASS(s);
>      if (sc->alloc_req) {
> -        return sc->alloc_req(s, tag, lun, buf, hba_private);
> +        return sc->alloc_req(s, tag, buf, hba_private);
>      }
>  
>      return NULL;
> @@ -401,8 +401,6 @@ static bool scsi_target_emulate_report_luns(SCSITargetReq *r)
>  
>  static bool scsi_target_emulate_inquiry(SCSITargetReq *r)
>  {
> -    assert(r->req.dev->lun != r->req.lun);
> -
>      scsi_target_alloc_buf(&r->req, SCSI_INQUIRY_LEN);
>  
>      if (r->req.cmd.buf[1] & 0x2) {
> @@ -442,7 +440,7 @@ static bool scsi_target_emulate_inquiry(SCSITargetReq *r)
>      /* PAGE CODE == 0 */
>      r->len = MIN(r->req.cmd.xfer, SCSI_INQUIRY_LEN);
>      memset(r->buf, 0, r->len);
> -    if (r->req.lun != 0) {
> +    if (r->req.dev->lun != 0) {
>          r->buf[0] = TYPE_NO_LUN;
>      } else {
>          r->buf[0] = TYPE_NOT_PRESENT | TYPE_INACTIVE;
> @@ -549,7 +547,7 @@ static const struct SCSIReqOps reqops_target_command = {
>  
>  
>  SCSIRequest *scsi_req_alloc(const SCSIReqOps *reqops, SCSIDevice *d,
> -                            uint32_t tag, uint32_t lun, void *hba_private)
> +                            uint32_t tag, void *hba_private)
>  {
>      SCSIRequest *req;
>      SCSIBus *bus = scsi_bus_from_device(d);
> @@ -563,18 +561,17 @@ SCSIRequest *scsi_req_alloc(const SCSIReqOps *reqops, SCSIDevice *d,
>      req->bus = bus;
>      req->dev = d;
>      req->tag = tag;
> -    req->lun = lun;
>      req->hba_private = hba_private;
>      req->status = -1;
>      req->ops = reqops;
>      object_ref(OBJECT(d));
>      object_ref(OBJECT(qbus->parent));
>      notifier_list_init(&req->cancel_notifiers);
> -    trace_scsi_req_alloc(req->dev->id, req->lun, req->tag);
> +    trace_scsi_req_alloc(req->dev->id, req->dev->lun, req->tag);
>      return req;
>  }
>  
> -SCSIRequest *scsi_req_new(SCSIDevice *d, uint32_t tag, uint32_t lun,
> +SCSIRequest *scsi_req_new(SCSIDevice *d, uint32_t tag,
>                            uint8_t *buf, void *hba_private)
>  {
>      SCSIBus *bus = DO_UPCAST(SCSIBus, qbus, d->qdev.parent_bus);
> @@ -597,8 +594,7 @@ SCSIRequest *scsi_req_new(SCSIDevice *d, uint32_t tag, uint32_t lun,
>            */
>           !(buf[0] == REQUEST_SENSE && d->sense_is_ua))) {
>          ops = &reqops_unit_attention;
> -    } else if (lun != d->lun ||
> -               buf[0] == REPORT_LUNS ||
> +    } else if (buf[0] == REPORT_LUNS ||
>                 (buf[0] == REQUEST_SENSE && d->sense_len)) {
>          ops = &reqops_target_command;
>      } else {
> @@ -612,23 +608,22 @@ SCSIRequest *scsi_req_new(SCSIDevice *d, uint32_t tag, uint32_t lun,
>      }
>  
>      if (ret != 0) {
> -        trace_scsi_req_parse_bad(d->id, lun, tag, buf[0]);
> -        req = scsi_req_alloc(&reqops_invalid_opcode, d, tag, lun, hba_private);
> +        trace_scsi_req_parse_bad(d->id, d->lun, tag, buf[0]);
> +        req = scsi_req_alloc(&reqops_invalid_opcode, d, tag, hba_private);
>      } else {
>          assert(cmd.len != 0);
> -        trace_scsi_req_parsed(d->id, lun, tag, buf[0],
> +        trace_scsi_req_parsed(d->id, d->lun, tag, buf[0],
>                                cmd.mode, cmd.xfer);
>          if (cmd.lba != -1) {
> -            trace_scsi_req_parsed_lba(d->id, lun, tag, buf[0],
> -                                      cmd.lba);
> +            trace_scsi_req_parsed_lba(d->id, d->lun, tag, buf[0], cmd.lba);
>          }
>  
>          if (cmd.xfer > INT32_MAX) {
> -            req = scsi_req_alloc(&reqops_invalid_field, d, tag, lun, hba_private);
> +            req = scsi_req_alloc(&reqops_invalid_field, d, tag, hba_private);
>          } else if (ops) {
> -            req = scsi_req_alloc(ops, d, tag, lun, hba_private);
> +            req = scsi_req_alloc(ops, d, tag, hba_private);
>          } else {
> -            req = scsi_device_alloc_req(d, tag, lun, buf, hba_private);
> +            req = scsi_device_alloc_req(d, tag, buf, hba_private);
>          }
>      }
>  
> @@ -637,16 +632,16 @@ SCSIRequest *scsi_req_new(SCSIDevice *d, uint32_t tag, uint32_t lun,
>  
>      switch (buf[0]) {
>      case INQUIRY:
> -        trace_scsi_inquiry(d->id, lun, tag, cmd.buf[1], cmd.buf[2]);
> +        trace_scsi_inquiry(d->id, d->lun, tag, cmd.buf[1], cmd.buf[2]);
>          break;
>      case TEST_UNIT_READY:
> -        trace_scsi_test_unit_ready(d->id, lun, tag);
> +        trace_scsi_test_unit_ready(d->id, d->lun, tag);
>          break;
>      case REPORT_LUNS:
> -        trace_scsi_report_luns(d->id, lun, tag);
> +        trace_scsi_report_luns(d->id, d->lun, tag);
>          break;
>      case REQUEST_SENSE:
> -        trace_scsi_request_sense(d->id, lun, tag);
> +        trace_scsi_request_sense(d->id, d->lun, tag);
>          break;
>      default:
>          break;
> @@ -734,7 +729,7 @@ int scsi_device_get_sense(SCSIDevice *dev, uint8_t *buf, int len, bool fixed)
>  
>  void scsi_req_build_sense(SCSIRequest *req, SCSISense sense)
>  {
> -    trace_scsi_req_build_sense(req->dev->id, req->lun, req->tag,
> +    trace_scsi_req_build_sense(req->dev->id, req->dev->lun, req->tag,
>                                 sense.key, sense.asc, sense.ascq);
>      memset(req->sense, 0, 18);
>      req->sense[0] = 0x70;
> @@ -772,7 +767,7 @@ int32_t scsi_req_enqueue(SCSIRequest *req)
>  
>  static void scsi_req_dequeue(SCSIRequest *req)
>  {
> -    trace_scsi_req_dequeue(req->dev->id, req->lun, req->tag);
> +    trace_scsi_req_dequeue(req->dev->id, req->dev->lun, req->tag);
>      req->retry = false;
>      if (req->enqueued) {
>          QTAILQ_REMOVE(&req->dev->requests, req, next);
> @@ -1622,10 +1617,10 @@ void scsi_req_unref(SCSIRequest *req)
>  void scsi_req_continue(SCSIRequest *req)
>  {
>      if (req->io_canceled) {
> -        trace_scsi_req_continue_canceled(req->dev->id, req->lun, req->tag);
> +        trace_scsi_req_continue_canceled(req->dev->id, req->dev->lun, req->tag);
>          return;
>      }
> -    trace_scsi_req_continue(req->dev->id, req->lun, req->tag);
> +    trace_scsi_req_continue(req->dev->id, req->dev->lun, req->tag);
>      if (req->cmd.mode == SCSI_XFER_TO_DEV) {
>          req->ops->write_data(req);
>      } else {
> @@ -1640,10 +1635,11 @@ void scsi_req_data(SCSIRequest *req, int len)
>  {
>      uint8_t *buf;
>      if (req->io_canceled) {
> -        trace_scsi_req_data_canceled(req->dev->id, req->lun, req->tag, len);
> +        trace_scsi_req_data_canceled(req->dev->id, req->dev->lun,
> +                                     req->tag, len);
>          return;
>      }
> -    trace_scsi_req_data(req->dev->id, req->lun, req->tag, len);
> +    trace_scsi_req_data(req->dev->id, req->dev->lun, req->tag, len);
>      assert(req->cmd.mode != SCSI_XFER_NONE);
>      if (!req->sg) {
>          req->resid -= len;
> @@ -1746,7 +1742,7 @@ void scsi_req_cancel_complete(SCSIRequest *req)
>   * */
>  void scsi_req_cancel_async(SCSIRequest *req, Notifier *notifier)
>  {
> -    trace_scsi_req_cancel(req->dev->id, req->lun, req->tag);
> +    trace_scsi_req_cancel(req->dev->id, req->dev->lun, req->tag);
>      if (notifier) {
>          notifier_list_add(&req->cancel_notifiers, notifier);
>      }
> @@ -1763,7 +1759,7 @@ void scsi_req_cancel_async(SCSIRequest *req, Notifier *notifier)
>  
>  void scsi_req_cancel(SCSIRequest *req)
>  {
> -    trace_scsi_req_cancel(req->dev->id, req->lun, req->tag);
> +    trace_scsi_req_cancel(req->dev->id, req->dev->lun, req->tag);
>      if (!req->enqueued) {
>          return;
>      }
> @@ -1895,7 +1891,7 @@ static void put_scsi_requests(QEMUFile *f, void *pv, size_t size)
>          qemu_put_sbyte(f, req->retry ? 1 : 2);
>          qemu_put_buffer(f, req->cmd.buf, sizeof(req->cmd.buf));
>          qemu_put_be32s(f, &req->tag);
> -        qemu_put_be32s(f, &req->lun);
> +        qemu_put_be32s(f, &req->dev->lun);
>          if (bus->info->save_request) {
>              bus->info->save_request(f, req);
>          }
> @@ -1921,7 +1917,7 @@ static int get_scsi_requests(QEMUFile *f, void *pv, size_t size)
>          qemu_get_buffer(f, buf, sizeof(buf));
>          qemu_get_be32s(f, &tag);
>          qemu_get_be32s(f, &lun);
> -        req = scsi_req_new(s, tag, lun, buf, NULL);
> +        req = scsi_req_new(s, tag, buf, NULL);
>          req->retry = (sbyte == 1);
>          if (bus->info->load_request) {
>              req->hba_private = bus->info->load_request(f, req);
> diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
> index 30e3789..dec669e 100644
> --- a/hw/scsi/scsi-disk.c
> +++ b/hw/scsi/scsi-disk.c
> @@ -2374,7 +2374,7 @@ static const SCSIReqOps *const scsi_disk_reqops_dispatch[256] = {
>      [WRITE_VERIFY_16]                 = &scsi_disk_dma_reqops,
>  };
>  
> -static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun,
> +static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag,
>                                       uint8_t *buf, void *hba_private)
>  {
>      SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, d);
> @@ -2387,10 +2387,10 @@ static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun,
>      if (!ops) {
>          ops = &scsi_disk_emulate_reqops;
>      }
> -    req = scsi_req_alloc(ops, &s->qdev, tag, lun, hba_private);
> +    req = scsi_req_alloc(ops, &s->qdev, tag, hba_private);
>  
>  #ifdef DEBUG_SCSI
> -    DPRINTF("Command: lun=%d tag=0x%x data=0x%02x", lun, tag, buf[0]);
> +    DPRINTF("Command: lun=%d tag=0x%x data=0x%02x", d->lun, tag, buf[0]);
>      {
>          int i;
>          for (i = 1; i < scsi_cdb_length(buf); i++) {
> @@ -2539,16 +2539,15 @@ static bool scsi_block_is_passthrough(SCSIDiskState *s, uint8_t *buf)
>  
>  
>  static SCSIRequest *scsi_block_new_request(SCSIDevice *d, uint32_t tag,
> -                                           uint32_t lun, uint8_t *buf,
> -                                           void *hba_private)
> +                                           uint8_t *buf, void *hba_private)
>  {
>      SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, d);
>  
>      if (scsi_block_is_passthrough(s, buf)) {
> -        return scsi_req_alloc(&scsi_generic_req_ops, &s->qdev, tag, lun,
> +        return scsi_req_alloc(&scsi_generic_req_ops, &s->qdev, tag,
>                                hba_private);
>      } else {
> -        return scsi_req_alloc(&scsi_disk_dma_reqops, &s->qdev, tag, lun,
> +        return scsi_req_alloc(&scsi_disk_dma_reqops, &s->qdev, tag,
>                                hba_private);
>      }
>  }
> diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c
> index 84a1d5b..837f670 100644
> --- a/hw/scsi/scsi-generic.c
> +++ b/hw/scsi/scsi-generic.c
> @@ -449,12 +449,12 @@ const SCSIReqOps scsi_generic_req_ops = {
>      .save_request = scsi_generic_save_request,
>  };
>  
> -static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun,
> +static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag,
>                                       uint8_t *buf, void *hba_private)
>  {
>      SCSIRequest *req;
>  
> -    req = scsi_req_alloc(&scsi_generic_req_ops, d, tag, lun, hba_private);
> +    req = scsi_req_alloc(&scsi_generic_req_ops, d, tag, hba_private);
>      return req;
>  }
>  
> diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
> index 8547ea0..dd71edc 100644
> --- a/hw/scsi/virtio-scsi.c
> +++ b/hw/scsi/virtio-scsi.c
> @@ -528,7 +528,6 @@ bool virtio_scsi_handle_cmd_req_prepare(VirtIOSCSI *s, VirtIOSCSIReq *req)
>          aio_context_release(s->ctx);
>      }
>      req->sreq = scsi_req_new(d, req->req.cmd.tag,
> -                             virtio_scsi_get_lun(req->req.cmd.lun),
>                               req->req.cdb, req);
>  
>      if (req->sreq->cmd.mode != SCSI_XFER_NONE
> diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c
> index d3a92fb..873c830 100644
> --- a/hw/scsi/vmw_pvscsi.c
> +++ b/hw/scsi/vmw_pvscsi.c
> @@ -652,7 +652,7 @@ pvscsi_process_request_descriptor(PVSCSIState *s,
>          r->sg.elemAddr = descr->dataAddr;
>      }
>  
> -    r->sreq = scsi_req_new(d, descr->context, r->lun, descr->cdb, r);
> +    r->sreq = scsi_req_new(d, descr->context, descr->cdb, r);
>      if (r->sreq->cmd.mode == SCSI_XFER_FROM_DEV &&
>          (descr->flags & PVSCSI_FLAG_CMD_DIR_TODEVICE)) {
>          r->cmp.hostStatus = BTSTAT_BADMSG;
> diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
> index 5bfc72c..c2e9d50 100644
> --- a/hw/usb/dev-storage.c
> +++ b/hw/usb/dev-storage.c
> @@ -439,7 +439,7 @@ static void usb_msd_handle_data(USBDevice *dev, USBPacket *p)
>                      tag, cbw.flags, cbw.cmd_len, s->data_len);
>              assert(le32_to_cpu(s->csw.residue) == 0);
>              s->scsi_len = 0;
> -            s->req = scsi_req_new(scsi_dev, tag, cbw.lun, cbw.cmd, NULL);
> +            s->req = scsi_req_new(scsi_dev, tag, cbw.cmd, NULL);
>  #ifdef DEBUG_MSD
>              scsi_req_print(s->req);
>  #endif
> diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c
> index 04fc515..dcb3773 100644
> --- a/hw/usb/dev-uas.c
> +++ b/hw/usb/dev-uas.c
> @@ -714,7 +714,6 @@ static void usb_uas_command(UASDevice *uas, uas_iu *iu)
>      }
>  
>      req->req = scsi_req_new(req->dev, req->tag,
> -                            usb_uas_get_lun(req->lun),
>                              iu->command.cdb, req);
>      if (uas->requestlog) {
>          scsi_req_print(req->req);
> diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h
> index 4e9bbd1..afb3f5d 100644
> --- a/include/hw/scsi/scsi.h
> +++ b/include/hw/scsi/scsi.h
> @@ -49,7 +49,6 @@ struct SCSIRequest {
>      const SCSIReqOps  *ops;
>      uint32_t          refcount;
>      uint32_t          tag;
> -    uint32_t          lun;
>      uint32_t          status;
>      void              *hba_private;
>      size_t            resid;
> @@ -87,7 +86,7 @@ typedef struct SCSIDeviceClass {
>      void (*unrealize)(SCSIDevice *dev, Error **errp);
>      int (*parse_cdb)(SCSIDevice *dev, SCSICommand *cmd, uint8_t *buf,
>                       void *hba_private);
> -    SCSIRequest *(*alloc_req)(SCSIDevice *s, uint32_t tag, uint32_t lun,
> +    SCSIRequest *(*alloc_req)(SCSIDevice *s, uint32_t tag,
>                                uint8_t *buf, void *hba_private);
>      void (*unit_attention_reported)(SCSIDevice *s);
>  } SCSIDeviceClass;
> @@ -247,8 +246,8 @@ int scsi_build_sense(uint8_t *in_buf, int in_len,
>                       uint8_t *buf, int len, bool fixed);
>  
>  SCSIRequest *scsi_req_alloc(const SCSIReqOps *reqops, SCSIDevice *d,
> -                            uint32_t tag, uint32_t lun, void *hba_private);
> -SCSIRequest *scsi_req_new(SCSIDevice *d, uint32_t tag, uint32_t lun,
> +                            uint32_t tag, void *hba_private);
> +SCSIRequest *scsi_req_new(SCSIDevice *d, uint32_t tag,
>                            uint8_t *buf, void *hba_private);
>  int32_t scsi_req_enqueue(SCSIRequest *req);
>  void scsi_req_free(SCSIRequest *req);
> 

  reply	other threads:[~2014-10-29  9:06 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-29  7:53 [Qemu-devel] [PATCH 00/17] megasas: gen2 emulation and MSI-X fixes Hannes Reinecke
2014-10-29  7:53 ` [Qemu-devel] [PATCH 01/17] ahci: Fix CD-ROM signature Hannes Reinecke
2014-10-29  8:07   ` Markus Armbruster
2014-10-29  8:11     ` Hannes Reinecke
2014-10-29 15:47       ` John Snow
2014-10-29 14:30   ` Stefan Hajnoczi
2014-10-29  7:53 ` [Qemu-devel] [PATCH 02/17] atapi: clear sense code Hannes Reinecke
2014-10-29 14:50   ` Stefan Hajnoczi
2014-10-29  7:53 ` [Qemu-devel] [PATCH 03/17] scsi: Rename scsi_cdb_length() to scsi_xfer_length() Hannes Reinecke
2014-10-30 10:38   ` Paolo Bonzini
2014-10-30 11:26     ` Hannes Reinecke
2014-10-30 12:00       ` Paolo Bonzini
2014-10-29  7:53 ` [Qemu-devel] [PATCH 04/17] scsi: fixup lba calculation for 6 byte CDBs Hannes Reinecke
2014-10-29  9:16   ` Paolo Bonzini
2014-10-29  9:52     ` Hannes Reinecke
2014-10-29 10:10       ` Paolo Bonzini
2014-10-29  7:53 ` [Qemu-devel] [PATCH 05/17] scsi: Remove 'lun' argument Hannes Reinecke
2014-10-29  9:05   ` Paolo Bonzini [this message]
2014-10-29  9:07   ` Paolo Bonzini
2014-10-29 11:13     ` Hannes Reinecke
2014-10-29 11:35       ` Paolo Bonzini
2014-10-29  7:53 ` [Qemu-devel] [PATCH 06/17] megasas: fixup MFI_DCMD_LD_LIST_QUERY Hannes Reinecke
2014-10-29  7:53 ` [Qemu-devel] [PATCH 07/17] megasas: simplify trace event messages Hannes Reinecke
2014-10-29  7:53 ` [Qemu-devel] [PATCH 08/17] megasas: fixup device mapping Hannes Reinecke
2014-10-29  7:53 ` [Qemu-devel] [PATCH 09/17] megasas: add MegaRAID SAS 2108 emulation Hannes Reinecke
2014-10-29 12:01   ` Andreas Färber
2014-10-29  7:53 ` [Qemu-devel] [PATCH 10/17] megasas: Fix typo in megasas_dcmd_ld_get_list() Hannes Reinecke
2014-10-29  7:53 ` [Qemu-devel] [PATCH 11/17] megasas: Decode register names Hannes Reinecke
2014-10-29  7:53 ` [Qemu-devel] [PATCH 12/17] megasas: Clear unit attention on initial reset Hannes Reinecke
2014-10-29  9:14   ` Paolo Bonzini
2014-10-29  9:53     ` Hannes Reinecke
2014-10-29  7:53 ` [Qemu-devel] [PATCH 13/17] megasas: Ignore duplicate init_firmware commands Hannes Reinecke
2014-10-29  7:53 ` [Qemu-devel] [PATCH 14/17] megasas: Implement DCMD_CLUSTER_RESET_LD Hannes Reinecke
2014-10-29  7:53 ` [Qemu-devel] [PATCH 15/17] megasas: Update queue logging Hannes Reinecke
2014-10-29  7:53 ` [Qemu-devel] [PATCH 16/17] megasas: Rework frame queueing algorithm Hannes Reinecke
2014-10-29  7:53 ` [Qemu-devel] [PATCH 17/17] megasas: Fixup MSI-X handling Hannes Reinecke
2014-10-29  9:18 ` [Qemu-devel] [PATCH 00/17] megasas: gen2 emulation and MSI-X fixes Paolo Bonzini
2014-10-29 11:10   ` Hannes Reinecke

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=5450ADE9.5040801@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=afaerber@suse.de \
    --cc=agraf@suse.de \
    --cc=nab@datera.com \
    --cc=qemu-devel@nongnu.org \
    /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.