diff options
author | Hannes Reinecke <hare@suse.de> | 2014-10-29 13:00:14 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2014-10-31 11:29:01 +0100 |
commit | aaf2a859b6758ad9b3a6fa242b0453bd7d8b7615 (patch) | |
tree | 6f38669ddf02a8474ec92116c3ddfc36f8295484 /hw | |
parent | 200b6966cdd393045ef042f0777faf660115ab22 (diff) | |
download | qemu-aaf2a859b6758ad9b3a6fa242b0453bd7d8b7615.zip qemu-aaf2a859b6758ad9b3a6fa242b0453bd7d8b7615.tar.gz qemu-aaf2a859b6758ad9b3a6fa242b0453bd7d8b7615.tar.bz2 |
megasas: Update queue logging
Improve queue logging by displaying head and tail pointer
of the completion queue.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/scsi/megasas.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c index dcfef63..3107445 100644 --- a/hw/scsi/megasas.c +++ b/hw/scsi/megasas.c @@ -527,8 +527,12 @@ static MegasasCmd *megasas_enqueue_frame(MegasasState *s, cmd->count = count; s->busy++; + if (s->consumer_pa) { + s->reply_queue_tail = ldl_le_phys(&address_space_memory, + s->consumer_pa); + } trace_megasas_qf_enqueue(cmd->index, cmd->count, cmd->context, - s->reply_queue_head, s->busy); + s->reply_queue_head, s->reply_queue_tail, s->busy); return cmd; } @@ -558,8 +562,10 @@ static void megasas_complete_frame(MegasasState *s, uint64_t context) s->reply_queue_pa + queue_offset, context); } s->reply_queue_head = megasas_next_index(s, tail, s->fw_cmds); - trace_megasas_qf_complete(context, tail, queue_offset, - s->busy, s->doorbell); + s->reply_queue_tail = ldl_le_phys(&address_space_memory, + s->consumer_pa); + trace_megasas_qf_complete(context, s->reply_queue_head, + s->reply_queue_tail, s->busy, s->doorbell); } if (megasas_intr_enabled(s)) { @@ -1649,7 +1655,6 @@ static int megasas_handle_scsi(MegasasState *s, MegasasCmd *cmd, bool is_logical) { uint8_t *cdb; - int len; bool is_write; struct SCSIDevice *sdev = NULL; @@ -1710,16 +1715,16 @@ static int megasas_handle_scsi(MegasasState *s, MegasasCmd *cmd, } is_write = (cmd->req->cmd.mode == SCSI_XFER_TO_DEV); - len = megasas_enqueue_req(cmd, is_write); - if (len > 0) { + if (cmd->iov_size) { if (is_write) { - trace_megasas_scsi_write_start(cmd->index, len); + trace_megasas_scsi_write_start(cmd->index, cmd->iov_size); } else { - trace_megasas_scsi_read_start(cmd->index, len); + trace_megasas_scsi_read_start(cmd->index, cmd->iov_size); } } else { trace_megasas_scsi_nodata(cmd->index); } + megasas_enqueue_req(cmd, is_write); return MFI_STAT_INVALID_STATUS; } @@ -2106,7 +2111,10 @@ static void megasas_mmio_write(void *opaque, hwaddr addr, s->doorbell = 0; if (s->producer_pa && megasas_intr_enabled(s)) { /* Update reply queue pointer */ - trace_megasas_qf_update(s->reply_queue_head, s->busy); + s->reply_queue_tail = ldl_le_phys(&address_space_memory, + s->consumer_pa); + trace_megasas_qf_update(s->reply_queue_head, s->reply_queue_tail, + s->busy); stl_le_phys(&address_space_memory, s->producer_pa, s->reply_queue_head); if (!msix_enabled(pci_dev)) { |