From nobody Mon Feb 9 17:59:39 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1549394163475278.4772629640769; Tue, 5 Feb 2019 11:16:03 -0800 (PST) Received: from localhost ([127.0.0.1]:38338 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gr6CP-0001Ac-UX for importer@patchew.org; Tue, 05 Feb 2019 14:16:01 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37076) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gr5HC-0003Es-TO for qemu-devel@nongnu.org; Tue, 05 Feb 2019 13:16:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gr5H8-0004XG-M6 for qemu-devel@nongnu.org; Tue, 05 Feb 2019 13:16:54 -0500 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]:33608) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gr5H8-0004Qv-4c for qemu-devel@nongnu.org; Tue, 05 Feb 2019 13:16:50 -0500 Received: by mail-wr1-x42d.google.com with SMTP id a16so4764101wrv.0 for ; Tue, 05 Feb 2019 10:16:44 -0800 (PST) Received: from 640k.lan ([93.56.166.5]) by smtp.gmail.com with ESMTPSA id p5sm8931665wmh.16.2019.02.05.10.16.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Feb 2019 10:16:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3yWMr8bJPuhDcRI72eFZe6jcK8hyHQHvkkIUM9KdEbU=; b=k9AsX1HDWDXH9cK+UBKasNHi/Hp0kbQPKGft8A/aSRtLn8eiE+4NsOvP7/hOrBXMSF IGNtHJmaaxOCelcyjAA6enhVqglUiBTs46aVT2yJArpysYRQ/8iv4rXkHYwbX6EnRKtA 6YKlspkEEOJ9FyONERZltDt4/6pFFVhyZTwMuFBYqT4Lxv5wCpWUwMbYo4ahkPrv7Lni tIs3Ako0ogS6qQaJeuoPS+FJ+EKFOYYXJIrJghPzbvfISkfyZxcu+H6e+uZgfMK4p4Cs nYEQOzv6f0I3lDtwTUaisBN2aFyVNa94FajkPmSx6T9k2TvJXkjie4MwvRTeqDFGwPkZ YcHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=3yWMr8bJPuhDcRI72eFZe6jcK8hyHQHvkkIUM9KdEbU=; b=Ar1amF1H3UpP6B8+5bKLMmhP/uxJOcTZR8ZpbZtksGW8fxaK9K2+OISrMZ+jqlfxSh VOpQiifdQg/j89Bj3pwul8l2XlFbYg7IDG6Wb4dfERjsvndYmFviM/ee3T58f4yyKp02 ecE5ItjhVItoAXwyOLc2/iaTV94bc/hbgG0eDePqm0aZNelmDEzW0jQLhVcVhKTfjpWr 9AQ3iA3ETYNX+w3trQxl3LWgjAIJNR/ReaRHEmW2ifpTiyUmIaSiYjOqfE1F0zJpy36Y PV3yyN9kHrb3/OqRiLytHHWk3vOgY3DxQm3l6y348k1Qx0L1+AVF+mD9iJgT/3tw8+cd XGUg== X-Gm-Message-State: AHQUAuYHXlh9OvUzl3h8+nJhRPmp5MxfoeITNX1ULr8sQgS9YEAnm2lx W+qANW0ih1Zxc7S8huGmexz95w1m X-Google-Smtp-Source: AHgI3IZ7C4ii0/Pkowx0WGwIKnvyB4ccKGs2dO2CJYCwvI/oI2Gxv5Gs/3gm7sb6RcCwknij3ynQ0w== X-Received: by 2002:adf:e8c1:: with SMTP id k1mr4511786wrn.104.1549390603417; Tue, 05 Feb 2019 10:16:43 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 5 Feb 2019 19:15:24 +0100 Message-Id: <1549390526-24246-75-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549390526-24246-1-git-send-email-pbonzini@redhat.com> References: <1549390526-24246-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42d Subject: [Qemu-devel] [PULL 74/76] scsi-disk: Convert from DPRINTF() macro to trace events X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) From: Laurent Vivier Signed-off-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20181211163105.31834-2-lvivier@redhat.com> Signed-off-by: Paolo Bonzini --- hw/scsi/scsi-disk.c | 103 +++++++++++++++++++++++++----------------------= ---- hw/scsi/trace-events | 29 +++++++++++++++ 2 files changed, 79 insertions(+), 53 deletions(-) diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index e6db6d7..d4e83ae 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -19,15 +19,6 @@ * the host adapter emulator. */ =20 -//#define DEBUG_SCSI - -#ifdef DEBUG_SCSI -#define DPRINTF(fmt, ...) \ -do { printf("scsi-disk: " fmt , ## __VA_ARGS__); } while (0) -#else -#define DPRINTF(fmt, ...) do {} while(0) -#endif - #include "qemu/osdep.h" #include "qemu/units.h" #include "qapi/error.h" @@ -41,6 +32,7 @@ do { printf("scsi-disk: " fmt , ## __VA_ARGS__); } while = (0) #include "hw/block/block.h" #include "sysemu/dma.h" #include "qemu/cutils.h" +#include "trace.h" =20 #ifdef __linux #include @@ -129,8 +121,8 @@ static void scsi_free_request(SCSIRequest *req) /* Helper function for command completion with sense. */ static void scsi_check_condition(SCSIDiskReq *r, SCSISense sense) { - DPRINTF("Command complete tag=3D0x%x sense=3D%d/%d/%d\n", - r->req.tag, sense.key, sense.asc, sense.ascq); + trace_scsi_disk_check_condition(r->req.tag, sense.key, sense.asc, + sense.ascq); scsi_req_build_sense(&r->req, sense); scsi_req_complete(&r->req, CHECK_CONDITION); } @@ -318,7 +310,7 @@ static void scsi_read_complete(void * opaque, int ret) } =20 block_acct_done(blk_get_stats(s->qdev.conf.blk), &r->acct); - DPRINTF("Data ready tag=3D0x%x len=3D%zd\n", r->req.tag, r->qiov.size); + trace_scsi_disk_read_complete(r->req.tag, r->qiov.size); =20 n =3D r->qiov.size / 512; r->sector +=3D n; @@ -389,7 +381,7 @@ static void scsi_read_data(SCSIRequest *req) SCSIDiskState *s =3D DO_UPCAST(SCSIDiskState, qdev, r->req.dev); bool first; =20 - DPRINTF("Read sector_count=3D%d\n", r->sector_count); + trace_scsi_disk_read_data_count(r->sector_count); if (r->sector_count =3D=3D 0) { /* This also clears the sense buffer for REQUEST SENSE. */ scsi_req_complete(&r->req, GOOD); @@ -402,7 +394,7 @@ static void scsi_read_data(SCSIRequest *req) /* The request is used as the AIO opaque value, so add a ref. */ scsi_req_ref(&r->req); if (r->req.cmd.mode =3D=3D SCSI_XFER_TO_DEV) { - DPRINTF("Data transfer direction invalid\n"); + trace_scsi_disk_read_data_invalid(); scsi_read_complete(r, -EINVAL); return; } @@ -503,7 +495,7 @@ static void scsi_write_complete_noio(SCSIDiskReq *r, in= t ret) return; } else { scsi_init_iovec(r, SCSI_DMA_BUF_SIZE); - DPRINTF("Write complete tag=3D0x%x more=3D%zd\n", r->req.tag, r->q= iov.size); + trace_scsi_disk_write_complete_noio(r->req.tag, r->qiov.size); scsi_req_data(&r->req, r->qiov.size); } =20 @@ -541,7 +533,7 @@ static void scsi_write_data(SCSIRequest *req) /* The request is used as the AIO opaque value, so add a ref. */ scsi_req_ref(&r->req); if (r->req.cmd.mode !=3D SCSI_XFER_TO_DEV) { - DPRINTF("Data transfer direction invalid\n"); + trace_scsi_disk_write_data_invalid(); scsi_write_complete_noio(r, -EINVAL); return; } @@ -606,8 +598,7 @@ static int scsi_disk_emulate_vpd_page(SCSIRequest *req,= uint8_t *outbuf) switch (page_code) { case 0x00: /* Supported page codes, mandatory */ { - DPRINTF("Inquiry EVPD[Supported pages] " - "buffer size %zd\n", req->cmd.xfer); + trace_scsi_disk_emulate_vpd_page_00(req->cmd.xfer); outbuf[buflen++] =3D 0x00; /* list of supported pages (this page) = */ if (s->serial) { outbuf[buflen++] =3D 0x80; /* unit serial number */ @@ -625,7 +616,7 @@ static int scsi_disk_emulate_vpd_page(SCSIRequest *req,= uint8_t *outbuf) int l; =20 if (!s->serial) { - DPRINTF("Inquiry (EVPD[Serial number] not supported\n"); + trace_scsi_disk_emulate_vpd_page_80_not_supported(); return -1; } =20 @@ -634,8 +625,7 @@ static int scsi_disk_emulate_vpd_page(SCSIRequest *req,= uint8_t *outbuf) l =3D 36; } =20 - DPRINTF("Inquiry EVPD[Serial number] " - "buffer size %zd\n", req->cmd.xfer); + trace_scsi_disk_emulate_vpd_page_80(req->cmd.xfer); memcpy(outbuf + buflen, s->serial, l); buflen +=3D l; break; @@ -645,8 +635,7 @@ static int scsi_disk_emulate_vpd_page(SCSIRequest *req,= uint8_t *outbuf) { int id_len =3D s->device_id ? MIN(strlen(s->device_id), 255 - 8) := 0; =20 - DPRINTF("Inquiry EVPD[Device identification] " - "buffer size %zd\n", req->cmd.xfer); + trace_scsi_disk_emulate_vpd_page_83(req->cmd.xfer); =20 if (id_len) { outbuf[buflen++] =3D 0x2; /* ASCII */ @@ -693,8 +682,7 @@ static int scsi_disk_emulate_vpd_page(SCSIRequest *req,= uint8_t *outbuf) SCSIBlockLimits bl =3D {}; =20 if (s->qdev.type =3D=3D TYPE_ROM) { - DPRINTF("Inquiry (EVPD[%02X] not supported for CDROM\n", - page_code); + trace_scsi_disk_emulate_vpd_page_b0_not_supported(); return -1; } bl.wsnz =3D 1; @@ -1241,8 +1229,9 @@ static int scsi_disk_emulate_mode_sense(SCSIDiskReq *= r, uint8_t *outbuf) dbd =3D (r->req.cmd.buf[1] & 0x8) !=3D 0; page =3D r->req.cmd.buf[2] & 0x3f; page_control =3D (r->req.cmd.buf[2] & 0xc0) >> 6; - DPRINTF("Mode Sense(%d) (page %d, xfer %zd, page_control %d)\n", - (r->req.cmd.buf[0] =3D=3D MODE_SENSE) ? 6 : 10, page, r->req.cmd.x= fer, page_control); + + trace_scsi_disk_emulate_mode_sense((r->req.cmd.buf[0] =3D=3D MODE_SENS= E) ? 6 : + 10, page, r->req.cmd.xfer, page_con= trol); memset(outbuf, 0, r->req.cmd.xfer); p =3D outbuf; =20 @@ -1334,7 +1323,7 @@ static int scsi_disk_emulate_read_toc(SCSIRequest *re= q, uint8_t *outbuf) format =3D req->cmd.buf[2] & 0xf; start_track =3D req->cmd.buf[6]; blk_get_geometry(s->qdev.conf.blk, &nb_sectors); - DPRINTF("Read TOC (track %d format %d msf %d)\n", start_track, format,= msf >> 1); + trace_scsi_disk_emulate_read_toc(start_track, format, msf >> 1); nb_sectors /=3D s->qdev.blocksize / 512; switch (format) { case 0: @@ -1393,7 +1382,7 @@ static void scsi_disk_emulate_read_data(SCSIRequest *= req) int buflen =3D r->iov.iov_len; =20 if (buflen) { - DPRINTF("Read buf_len=3D%d\n", buflen); + trace_scsi_disk_emulate_read_data(buflen); r->iov.iov_len =3D 0; r->started =3D true; scsi_req_data(&r->req, buflen); @@ -1812,7 +1801,7 @@ static void scsi_disk_emulate_write_data(SCSIRequest = *req) =20 if (r->iov.iov_len) { int buflen =3D r->iov.iov_len; - DPRINTF("Write buf_len=3D%d\n", buflen); + trace_scsi_disk_emulate_write_data(buflen); r->iov.iov_len =3D 0; scsi_req_data(&r->req, buflen); return; @@ -2021,7 +2010,7 @@ static int32_t scsi_disk_emulate_command(SCSIRequest = *req, uint8_t *buf) case SERVICE_ACTION_IN_16: /* Service Action In subcommands. */ if ((req->cmd.buf[1] & 31) =3D=3D SAI_READ_CAPACITY_16) { - DPRINTF("SAI READ CAPACITY(16)\n"); + trace_scsi_disk_emulate_command_SAI_16(); memset(outbuf, 0, req->cmd.xfer); blk_get_geometry(s->qdev.conf.blk, &nb_sectors); if (!nb_sectors) { @@ -2059,7 +2048,7 @@ static int32_t scsi_disk_emulate_command(SCSIRequest = *req, uint8_t *buf) /* Protection, exponent and lowest lba field left blank. */ break; } - DPRINTF("Unsupported Service Action In\n"); + trace_scsi_disk_emulate_command_SAI_unsupported(); goto illegal_request; case SYNCHRONIZE_CACHE: /* The request is used as the AIO opaque value, so add a ref. */ @@ -2069,37 +2058,36 @@ static int32_t scsi_disk_emulate_command(SCSIReques= t *req, uint8_t *buf) r->req.aiocb =3D blk_aio_flush(s->qdev.conf.blk, scsi_aio_complete= , r); return 0; case SEEK_10: - DPRINTF("Seek(10) (sector %" PRId64 ")\n", r->req.cmd.lba); + trace_scsi_disk_emulate_command_SEEK_10(r->req.cmd.lba); if (r->req.cmd.lba > s->qdev.max_lba) { goto illegal_lba; } break; case MODE_SELECT: - DPRINTF("Mode Select(6) (len %lu)\n", (unsigned long)r->req.cmd.xf= er); + trace_scsi_disk_emulate_command_MODE_SELECT(r->req.cmd.xfer); break; case MODE_SELECT_10: - DPRINTF("Mode Select(10) (len %lu)\n", (unsigned long)r->req.cmd.x= fer); + trace_scsi_disk_emulate_command_MODE_SELECT_10(r->req.cmd.xfer); break; case UNMAP: - DPRINTF("Unmap (len %lu)\n", (unsigned long)r->req.cmd.xfer); + trace_scsi_disk_emulate_command_UNMAP(r->req.cmd.xfer); break; case VERIFY_10: case VERIFY_12: case VERIFY_16: - DPRINTF("Verify (bytchk %d)\n", (req->cmd.buf[1] >> 1) & 3); + trace_scsi_disk_emulate_command_VERIFY((req->cmd.buf[1] >> 1) & 3); if (req->cmd.buf[1] & 6) { goto illegal_request; } break; case WRITE_SAME_10: case WRITE_SAME_16: - DPRINTF("WRITE SAME %d (len %lu)\n", - req->cmd.buf[0] =3D=3D WRITE_SAME_10 ? 10 : 16, - (unsigned long)r->req.cmd.xfer); + trace_scsi_disk_emulate_command_WRITE_SAME( + req->cmd.buf[0] =3D=3D WRITE_SAME_10 ? 10 : 16, r->req.cmd= .xfer); break; default: - DPRINTF("Unknown SCSI command (%2.2x=3D%s)\n", buf[0], - scsi_command_name(buf[0])); + trace_scsi_disk_emulate_command_UNKNOWN(buf[0], + scsi_command_name(buf[0])); scsi_check_condition(r, SENSE_CODE(INVALID_OPCODE)); return 0; } @@ -2152,7 +2140,7 @@ static int32_t scsi_disk_dma_command(SCSIRequest *req= , uint8_t *buf) case READ_10: case READ_12: case READ_16: - DPRINTF("Read (sector %" PRId64 ", count %u)\n", r->req.cmd.lba, l= en); + trace_scsi_disk_dma_command_READ(r->req.cmd.lba, len); /* Protection information is not supported. For SCSI versions 2 a= nd * older (as determined by snooping the guest's INQUIRY commands), * there is no RD/WR/VRPROTECT, so skip this check in these versio= ns. @@ -2177,7 +2165,7 @@ static int32_t scsi_disk_dma_command(SCSIRequest *req= , uint8_t *buf) scsi_check_condition(r, SENSE_CODE(WRITE_PROTECTED)); return 0; } - DPRINTF("Write %s(sector %" PRId64 ", count %u)\n", + trace_scsi_disk_dma_command_WRITE( (command & 0xe) =3D=3D 0xe ? "And Verify " : "", r->req.cmd.lba, len); /* fall through */ @@ -2515,6 +2503,22 @@ static const SCSIReqOps *const scsi_disk_reqops_disp= atch[256] =3D { [WRITE_VERIFY_16] =3D &scsi_disk_dma_reqops, }; =20 +static void scsi_disk_new_request_dump(uint32_t lun, uint32_t tag, uint8_t= *buf) +{ + int i; + int len =3D scsi_cdb_length(buf); + char *line_buffer, *p; + + line_buffer =3D g_malloc(len * 5 + 1); + + for (i =3D 0, p =3D line_buffer; i < len; i++) { + p +=3D sprintf(p, " 0x%02x", buf[i]); + } + trace_scsi_disk_new_request(lun, tag, line_buffer); + + g_free(line_buffer); +} + static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t= lun, uint8_t *buf, void *hba_private) { @@ -2530,16 +2534,9 @@ static SCSIRequest *scsi_new_request(SCSIDevice *d, = uint32_t tag, uint32_t lun, } req =3D scsi_req_alloc(ops, &s->qdev, tag, lun, hba_private); =20 -#ifdef DEBUG_SCSI - DPRINTF("Command: lun=3D%d tag=3D0x%x data=3D0x%02x", lun, tag, buf[0]= ); - { - int i; - for (i =3D 1; i < scsi_cdb_length(buf); i++) { - printf(" 0x%02x", buf[i]); - } - printf("\n"); + if (trace_event_get_state_backends(TRACE_SCSI_DISK_NEW_REQUEST)) { + scsi_disk_new_request_dump(lun, tag, buf); } -#endif =20 return req; } diff --git a/hw/scsi/trace-events b/hw/scsi/trace-events index 2fe8a7c..dbd529e 100644 --- a/hw/scsi/trace-events +++ b/hw/scsi/trace-events @@ -292,3 +292,32 @@ lsi_execute_script_stop(void) "SCRIPTS execution stopp= ed" lsi_awoken(void) "Woken by SIGP" lsi_reg_read(const char *name, int offset, uint8_t ret) "Read reg %s 0x%x = =3D 0x%02x" lsi_reg_write(const char *name, int offset, uint8_t val) "Write reg %s 0x%= x =3D 0x%02x" + +# hw/scsi/scsi-disk.c +scsi_disk_check_condition(uint32_t tag, uint8_t key, uint8_t asc, uint8_t = ascq) "Command complete tag=3D0x%x sense=3D%d/%d/%d" +scsi_disk_read_complete(uint32_t tag, size_t size) "Data ready tag=3D0x%x = len=3D%zd" +scsi_disk_read_data_count(uint32_t sector_count) "Read sector_count=3D%d" +scsi_disk_read_data_invalid(void) "Data transfer direction invalid" +scsi_disk_write_complete_noio(uint32_t tag, size_t size) "Write complete t= ag=3D0x%x more=3D%zd" +scsi_disk_write_data_invalid(void) "Data transfer direction invalid" +scsi_disk_emulate_vpd_page_00(size_t xfer) "Inquiry EVPD[Supported pages] = buffer size %zd" +scsi_disk_emulate_vpd_page_80_not_supported(void) "Inquiry (EVPD[Serial nu= mber] not supported" +scsi_disk_emulate_vpd_page_80(size_t xfer) "Inquiry EVPD[Serial number] bu= ffer size %zd" +scsi_disk_emulate_vpd_page_83(size_t xfer) "Inquiry EVPD[Device identifica= tion] buffer size %zd" +scsi_disk_emulate_vpd_page_b0_not_supported(void) "Inquiry (EVPD[Block lim= its] not supported for CDROM" +scsi_disk_emulate_mode_sense(int cmd, int page, size_t xfer, int control) = "Mode Sense(%d) (page %d, xfer %zd, page_control %d)" +scsi_disk_emulate_read_toc(int start_track, int format, int msf) "Read TOC= (track %d format %d msf %d)" +scsi_disk_emulate_read_data(int buflen) "Read buf_len=3D%d" +scsi_disk_emulate_write_data(int buflen) "Write buf_len=3D%d" +scsi_disk_emulate_command_SAI_16(void) "SAI READ CAPACITY(16)" +scsi_disk_emulate_command_SAI_unsupported(void) "Unsupported Service Actio= n In" +scsi_disk_emulate_command_SEEK_10(uint64_t lba) "Seek(10) (sector %" PRId6= 4 ")" +scsi_disk_emulate_command_MODE_SELECT(size_t xfer) "Mode Select(6) (len %z= d)" +scsi_disk_emulate_command_MODE_SELECT_10(size_t xfer) "Mode Select(10) (le= n %zd)" +scsi_disk_emulate_command_UNMAP(size_t xfer) "Unmap (len %zd)" +scsi_disk_emulate_command_VERIFY(int bytchk) "Verify (bytchk %d)" +scsi_disk_emulate_command_WRITE_SAME(int cmd, size_t xfer) "WRITE SAME %d = (len %zd)" +scsi_disk_emulate_command_UNKNOWN(int cmd, const char *name) "Unknown SCSI= command (0x%2.2x=3D%s)" +scsi_disk_dma_command_READ(uint64_t lba, uint32_t len) "Read (sector %" PR= Id64 ", count %u)" +scsi_disk_dma_command_WRITE(const char *cmd, uint64_t lba, int len) "Write= %s(sector %" PRId64 ", count %u)" +scsi_disk_new_request(uint32_t lun, uint32_t tag, const char *line) "Comma= nd: lun=3D%d tag=3D0x%x data=3D%s" --=20 1.8.3.1