From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=46826 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PFXEi-0003Z3-CX for qemu-devel@nongnu.org; Mon, 08 Nov 2010 14:18:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PFXEh-0004Sj-4o for qemu-devel@nongnu.org; Mon, 08 Nov 2010 14:18:36 -0500 Received: from mail-vw0-f45.google.com ([209.85.212.45]:53995) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PFXEh-0004SX-0H for qemu-devel@nongnu.org; Mon, 08 Nov 2010 14:18:35 -0500 Received: by vws4 with SMTP id 4so2186376vws.4 for ; Mon, 08 Nov 2010 11:18:34 -0800 (PST) MIME-Version: 1.0 In-Reply-To: <1289209443-2528-1-git-send-email-stefanha@linux.vnet.ibm.com> References: <1289209443-2528-1-git-send-email-stefanha@linux.vnet.ibm.com> From: Blue Swirl Date: Mon, 8 Nov 2010 19:18:14 +0000 Message-ID: Subject: Re: [Qemu-devel] [PATCH] trace: Trace SCSI request lifecycle Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: qemu-devel@nongnu.org On Mon, Nov 8, 2010 at 9:44 AM, Stefan Hajnoczi wrote: > This patch adds trace events for SCSI request allocation, freeing, CDB > parsing, read, and write. =C2=A0These trace events can be used to instrum= ent > the SCSI request lifecycle. How about converting also the DPRINTFs in hw/scsi-disk.c to tracepoints? > > Signed-off-by: Stefan Hajnoczi > --- > =C2=A0hw/scsi-bus.c =C2=A0| =C2=A0 =C2=A05 +++++ > =C2=A0hw/scsi-disk.c | =C2=A0 =C2=A09 +++++++++ > =C2=A0trace-events =C2=A0 | =C2=A0 11 +++++++++++ > =C2=A03 files changed, 25 insertions(+), 0 deletions(-) > > diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c > index 5a3fd4b..0228d4f 100644 > --- a/hw/scsi-bus.c > +++ b/hw/scsi-bus.c > @@ -4,6 +4,7 @@ > =C2=A0#include "scsi-defs.h" > =C2=A0#include "qdev.h" > =C2=A0#include "blockdev.h" > +#include "trace.h" > > =C2=A0static struct BusInfo scsi_bus_info =3D { > =C2=A0 =C2=A0 .name =C2=A0=3D "SCSI", > @@ -145,6 +146,8 @@ SCSIRequest *scsi_req_alloc(size_t size, SCSIDevice *= d, uint32_t tag, uint32_t l > =C2=A0 =C2=A0 req->status =3D -1; > =C2=A0 =C2=A0 req->enqueued =3D true; > =C2=A0 =C2=A0 QTAILQ_INSERT_TAIL(&d->requests, req, next); > + > + =C2=A0 =C2=A0trace_scsi_req_alloc(d, tag, lun, req); > =C2=A0 =C2=A0 return req; > =C2=A0} > > @@ -172,6 +175,7 @@ void scsi_req_free(SCSIRequest *req) > =C2=A0{ > =C2=A0 =C2=A0 scsi_req_dequeue(req); > =C2=A0 =C2=A0 qemu_free(req); > + =C2=A0 =C2=A0trace_scsi_req_free(req); > =C2=A0} > > =C2=A0static int scsi_req_length(SCSIRequest *req, uint8_t *cmd) > @@ -395,6 +399,7 @@ int scsi_req_parse(SCSIRequest *req, uint8_t *buf) > =C2=A0 =C2=A0 memcpy(req->cmd.buf, buf, req->cmd.len); > =C2=A0 =C2=A0 scsi_req_xfer_mode(req); > =C2=A0 =C2=A0 req->cmd.lba =3D scsi_req_lba(req); > + =C2=A0 =C2=A0trace_scsi_req_parse(req, req->cmd.len, req->cmd.lba, req-= >cmd.buf[0]); > =C2=A0 =C2=A0 return 0; > =C2=A0} > > diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c > index dc71957..c7a3f2a 100644 > --- a/hw/scsi-disk.c > +++ b/hw/scsi-disk.c > @@ -37,6 +37,7 @@ do { fprintf(stderr, "scsi-disk: " fmt , ## __VA_ARGS__= ); } while (0) > =C2=A0#include "scsi-defs.h" > =C2=A0#include "sysemu.h" > =C2=A0#include "blockdev.h" > +#include "trace.h" > > =C2=A0#define SCSI_DMA_BUF_SIZE =C2=A0 =C2=A0131072 > =C2=A0#define SCSI_MAX_INQUIRY_LEN 256 > @@ -136,6 +137,8 @@ static void scsi_read_complete(void * opaque, int ret= ) > =C2=A0 =C2=A0 SCSIDiskReq *r =3D (SCSIDiskReq *)opaque; > =C2=A0 =C2=A0 int n; > > + =C2=A0 =C2=A0trace_scsi_read_complete(r, ret); > + > =C2=A0 =C2=A0 r->req.aiocb =3D NULL; > > =C2=A0 =C2=A0 if (ret) { > @@ -158,6 +161,8 @@ static void scsi_read_request(SCSIDiskReq *r) > =C2=A0 =C2=A0 SCSIDiskState *s =3D DO_UPCAST(SCSIDiskState, qdev, r->req.= dev); > =C2=A0 =C2=A0 uint32_t n; > > + =C2=A0 =C2=A0trace_scsi_read_request(r, r->sector, r->sector_count); > + > =C2=A0 =C2=A0 if (r->sector_count =3D=3D (uint32_t)-1) { > =C2=A0 =C2=A0 =C2=A0 =C2=A0 DPRINTF("Read buf_len=3D%zd\n", r->iov.iov_le= n); > =C2=A0 =C2=A0 =C2=A0 =C2=A0 r->sector_count =3D 0; > @@ -240,6 +245,8 @@ static void scsi_write_complete(void * opaque, int re= t) > =C2=A0 =C2=A0 uint32_t len; > =C2=A0 =C2=A0 uint32_t n; > > + =C2=A0 =C2=A0trace_scsi_write_complete(r, ret); > + > =C2=A0 =C2=A0 r->req.aiocb =3D NULL; > > =C2=A0 =C2=A0 if (ret) { > @@ -269,6 +276,8 @@ static void scsi_write_request(SCSIDiskReq *r) > =C2=A0 =C2=A0 SCSIDiskState *s =3D DO_UPCAST(SCSIDiskState, qdev, r->req.= dev); > =C2=A0 =C2=A0 uint32_t n; > > + =C2=A0 =C2=A0trace_scsi_write_request(r, r->sector, r->iov.iov_len); > + > =C2=A0 =C2=A0 n =3D r->iov.iov_len / 512; > =C2=A0 =C2=A0 if (n) { > =C2=A0 =C2=A0 =C2=A0 =C2=A0 qemu_iovec_init_external(&r->qiov, &r->iov, 1= ); > diff --git a/trace-events b/trace-events > index 947f8b0..7069628 100644 > --- a/trace-events > +++ b/trace-events > @@ -189,3 +189,14 @@ disable sun4m_iommu_mem_writel_pgflush(uint32_t val)= "page flush %x" > =C2=A0disable sun4m_iommu_page_get_flags(uint64_t pa, uint64_t iopte, uin= t32_t ret) "get flags addr %"PRIx64" =3D> pte %"PRIx64", *pte =3D %x" > =C2=A0disable sun4m_iommu_translate_pa(uint64_t addr, uint64_t pa, uint32= _t iopte) "xlate dva %"PRIx64" =3D> pa %"PRIx64" iopte =3D %x" > =C2=A0disable sun4m_iommu_bad_addr(uint64_t addr) "bad addr %"PRIx64"" > + > +# hw/scsi-bus.c > +disable scsi_req_alloc(void *dev, uint32_t tag, uint32_t lun, void *req)= "dev %p tag %#x lun %#x req %p" > +disable scsi_req_free(void *req) "req %p" > +disable scsi_req_parse(void *req, int len, uint64_t lba, uint8_t cmd) "r= eq %p len %d lba %"PRIu64" cmd %#x" > + > +# hw/scsi-disk.c > +disable scsi_read_request(void *req, uint64_t sector, uint32_t sector_co= unt) "req %p sector %"PRIu64" sector_count %u" > +disable scsi_read_complete(void *req, int ret) "req %p ret %d" > +disable scsi_write_request(void *req, uint64_t sector, size_t len) "req = %p sector %"PRIu64" len %zu" > +disable scsi_write_complete(void *req, int ret) "req %p ret %d" > -- > 1.7.2.3 > > >