diff options
author | Douglas Gilbert <dgilbert@interlog.com> | 2019-05-18 15:37:19 +0000 |
---|---|---|
committer | Douglas Gilbert <dgilbert@interlog.com> | 2019-05-18 15:37:19 +0000 |
commit | 3e030c2951bee369b5593243bf317bb5a482a35b (patch) | |
tree | 0fc4dff2af1d3ff6f635877879b2c8ec8e6eb1f1 /testing | |
parent | c80acc95be9d1463830259db821ac248e7dc7e46 (diff) | |
download | sg3_utils-3e030c2951bee369b5593243bf317bb5a482a35b.tar.gz |
sg_lib: add sg_f2hex_arr()
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@824 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'testing')
-rw-r--r-- | testing/sg_tst_ioctl.c | 32 | ||||
-rw-r--r-- | testing/sgh_dd.cpp | 20 | ||||
-rw-r--r-- | testing/sgs_dd.c | 12 |
3 files changed, 42 insertions, 22 deletions
diff --git a/testing/sg_tst_ioctl.c b/testing/sg_tst_ioctl.c index a059643f..8629a684 100644 --- a/testing/sg_tst_ioctl.c +++ b/testing/sg_tst_ioctl.c @@ -75,7 +75,7 @@ static const char * version_str = "Version: 1.10 20190506"; #endif #define DEF_Q_LEN 16 /* max in sg v3 and earlier */ -#define MAX_Q_LEN 256 +#define MAX_Q_LEN 512 #define DEF_RESERVE_BUFF_SZ (256 * 1024) @@ -89,6 +89,7 @@ static bool mrq_immed = false; /* if set, also sets mrq_iosubmit */ static bool mrq_half_immed = false; static bool mrq_iosubmit = false; static bool show_size_value = false; +static bool do_v3_only = false; static int childs_pid = 0; static int sg_drv_ver_num = 0; @@ -104,8 +105,8 @@ static const char * relative_cp = NULL; static void usage(void) { - printf("Usage: sg_tst_ioctl [-f] [-h] [-l=Q_LEN] [-m=MRQS[,I|S]] [-M] " - "[-o]\n" + printf("Usage: sg_tst_ioctl [-3] [-f] [-h] [-l=Q_LEN] [-m=MRQS[,I|S]] " + "[-M] [-o]\n" " [-r=SZ] [-s=SEC] [-S] [-t] [-v] [-V] [-w]\n" " <sg_device> [<sg_device2>]\n" " where:\n" @@ -257,8 +258,8 @@ set_more_async(int fd) } static int -tst_ioctl(const char * fnp, int sg_fd, const char * fn2p, int sg_fd2, - int sock, const char * cp) +tst_extended_ioctl(const char * fnp, int sg_fd, const char * fn2p, int sg_fd2, + int sock, const char * cp) { uint32_t cflags; struct sg_extended_info sei; @@ -650,7 +651,9 @@ main(int argc, char * argv[]) pr2serr("Warning <<<< sizeof(struct sg_extended_info)=%zu not 96\n", sizeof(struct sg_extended_info)); for (k = 1; k < argc; ++k) { - if (0 == memcmp("-f", argv[k], 2)) + if (0 == memcmp("-3", argv[k], 2)) + do_v3_only = true; + else if (0 == memcmp("-f", argv[k], 2)) do_fork = true; else if (0 == memcmp("-h", argv[k], 2)) { file_name = 0; @@ -811,7 +814,7 @@ main(int argc, char * argv[]) goto out; } printf("Linux sg driver version: %d\n", sg_drv_ver_num); - if (more_async) + if (more_async && !do_v3_only) set_more_async(sg_fd); if (second_fname) { @@ -824,11 +827,11 @@ main(int argc, char * argv[]) if (verbose) fprintf(stderr, "opened second file: %s successfully, fd=%d\n", second_fname, sg_fd2); - if (more_async) + if (more_async && !do_v3_only) set_more_async(sg_fd2); } - if (num_mrqs > 0) { + if ((num_mrqs > 0) && !do_v3_only) { res = do_mrqs(sg_fd, sg_fd2, num_mrqs); goto out; } @@ -862,15 +865,18 @@ main(int argc, char * argv[]) } cp = do_fork ? relative_cp : ""; - if (tst_ioctl(file_name, sg_fd, second_fname, sg_fd2, sock, cp)) - goto out; + if (! do_v3_only) { + if (tst_extended_ioctl(file_name, sg_fd, second_fname, sg_fd2, sock, + cp)) + goto out; + } if (ioctl_only) goto out; if (do_fork && !is_parent) return 0; - printf("start iosubmit calls\n"); + printf("start write() calls [submits]\n"); for (k = 0; k < q_len; ++k) { /* Prepare INQUIRY command */ memset(&io_hdr[k], 0, sizeof(sg_io_hdr_t)); @@ -950,7 +956,7 @@ main(int argc, char * argv[]) else printf("num_waiting: %d\n", num_waiting); - printf("\nstart ioreceive() calls\n"); + printf("\nstart read() calls [io receive]\n"); for (k = 0, done = false; k < q_len; ++k) { if ((! done) && (k == q_len / 2)) { done = true; diff --git a/testing/sgh_dd.cpp b/testing/sgh_dd.cpp index bde865dc..185044f1 100644 --- a/testing/sgh_dd.cpp +++ b/testing/sgh_dd.cpp @@ -103,7 +103,7 @@ using namespace std; -static const char * version_str = "1.30 20190505"; +static const char * version_str = "1.31 20190515"; #ifdef __GNUC__ #ifndef __clang__ @@ -305,6 +305,7 @@ static pthread_mutex_t strerr_mut = PTHREAD_MUTEX_INITIALIZER; static bool have_sg_version = false; static int sg_version = 0; +static bool sg_version_lt_4 = false; static bool shutting_down = false; static bool do_sync = false; static bool do_time = true; @@ -1039,7 +1040,7 @@ read_write_thread(void * v_tip) pr2serr_lk("thread=%d: using global sg OFILE2, fd=%d\n", rep->id, rep->out2fd); } - if (rep->in_flags.noshare || rep->out_flags.noshare) { + if (rep->in_flags.noshare || rep->out_flags.noshare || sg_version_lt_4) { if (vb > 4) pr2serr_lk("thread=%d: Skipping share on both IFILE and OFILE\n", rep->id); @@ -2184,6 +2185,7 @@ static int sg_prepare_resbuf(int fd, int bs, int bpt, bool def_res, int elem_sz, bool unit_nano, bool no_dur, bool masync, uint8_t **mmpp) { + static bool done = false; int res, t, num; uint8_t *mmp; struct sg_extended_info sei; @@ -2192,8 +2194,17 @@ sg_prepare_resbuf(int fd, int bs, int bpt, bool def_res, int elem_sz, seip = &sei; res = ioctl(fd, SG_GET_VERSION_NUM, &t); if ((res < 0) || (t < 40000)) { - pr2serr_lk("%ssg driver prior to 4.0.00\n", my_name); - return 0; + if (ioctl(fd, SG_GET_RESERVED_SIZE, &num) < 0) { + perror("SG_GET_RESERVED_SIZE ioctl failed"); + return 0; + } + if (! done) { + done = true; + sg_version_lt_4 = true; + pr2serr_lk("%ssg driver prior to 4.0.00, reduced functionality\n", + my_name); + } + goto fini; } if (elem_sz >= 4096) { memset(seip, 0, sizeof(*seip)); @@ -2263,6 +2274,7 @@ sg_prepare_resbuf(int fd, int bs, int bpt, bool def_res, int elem_sz, errno, strerror(errno)); } } +fini: return (res < 0) ? 0 : num; } diff --git a/testing/sgs_dd.c b/testing/sgs_dd.c index 991f8011..e0ff7b4b 100644 --- a/testing/sgs_dd.c +++ b/testing/sgs_dd.c @@ -78,7 +78,7 @@ #include "sg_unaligned.h" -static const char * version_str = "4.07 20190503"; +static const char * version_str = "4.08 20190515"; static const char * my_name = "sgs_dd"; #define DEF_BLOCK_SIZE 512 @@ -471,7 +471,7 @@ do_v4: } static int -sz_reserve(int fd, int bs, int bpt, bool rt_sig) +sz_reserve(int fd, int bs, int bpt, bool rt_sig, bool vb) { int res, t, flags; struct sg_extended_info sei; @@ -484,7 +484,8 @@ sz_reserve(int fd, int bs, int bpt, bool rt_sig) return 1; } else if (t < 40000) { - fprintf(stderr, "sgs_dd: warning: sg driver prior to 4.0.00\n"); + if (vb) + fprintf(stderr, "sgs_dd: warning: sg driver prior to 4.0.00\n"); sgs_old_sg_driver = true; } res = 0; @@ -1075,7 +1076,8 @@ main(int argc, char * argv[]) return 1; } clp->in_is_sg = true; - if (sz_reserve(clp->infd, clp->bs, clp->bpt, clp->use_rt_sig)) + if (sz_reserve(clp->infd, clp->bs, clp->bpt, clp->use_rt_sig, + clp->debug)) return 1; if (sgs_old_sg_driver && (clp->iflag.v4 || clp->oflag.v4)) { pr2serr("Unable to implement v4 flag because sg driver too " @@ -1095,7 +1097,7 @@ main(int argc, char * argv[]) else { clp->out_is_sg = true; if (sz_reserve(clp->outfd, clp->bs, clp->bpt, - clp->use_rt_sig)) + clp->use_rt_sig, clp->debug)) return 1; if (sgs_old_sg_driver && (clp->iflag.v4 || clp->oflag.v4)) { pr2serr("Unable to implement v4 flag because sg driver " |