@@ -191,6 +191,7 @@ const char *output_format = "Output format: normal|binary";
191191const char * timeout = "timeout value, in milliseconds" ;
192192const char * verbose = "Increase output verbosity" ;
193193const char * dry_run = "show command instead of sending" ;
194+ const char * delay = "iterative delay as SECS [.TENTHS]" ;
194195
195196static const char * app_tag = "app tag for end-to-end PI" ;
196197static const char * app_tag_mask = "app tag mask for end-to-end PI" ;
@@ -262,6 +263,7 @@ struct nvme_config nvme_cfg = {
262263 .output_format = "normal" ,
263264 .output_format_ver = 1 ,
264265 .timeout = NVME_DEFAULT_IOCTL_TIMEOUT ,
266+ .delay = 0 ,
265267};
266268
267269static void * mmap_registers (struct nvme_transport_handle * hdl , bool writable );
@@ -10096,7 +10098,8 @@ static int show_topology_cmd(int argc, char **argv, struct command *acmd, struct
1009610098 };
1009710099
1009810100 NVME_ARGS (opts ,
10099- OPT_FMT ("ranking" , 'r' , & cfg .ranking , ranking ));
10101+ OPT_FMT ("ranking" , 'r' , & cfg .ranking , ranking ),
10102+ OPT_DOUBLE ("delay" , 'd' , & nvme_cfg .delay , delay ));
1010010103
1010110104 err = argconfig_parse (argc , argv , desc , opts );
1010210105 if (err )
@@ -11011,6 +11014,29 @@ void register_extension(struct plugin *plugin)
1101111014 nvme .extensions -> tail = plugin ;
1101211015}
1101311016
11017+ static bool handle_delay (int err )
11018+ {
11019+ struct timespec ts ;
11020+ double delay_f ;
11021+ double delay_i ;
11022+
11023+ if (err || !nvme_cfg .delay )
11024+ return false;
11025+
11026+ delay_f = modf (nvme_cfg .delay , & delay_i );
11027+ ts .tv_sec = delay_i ;
11028+ ts .tv_nsec = delay_f * 1000000000 ;
11029+ err = pselect (0 , NULL , NULL , NULL , & ts , NULL );
11030+ if (err < 0 )
11031+ return false;
11032+
11033+ err = system ("clear" );
11034+ if (err < 0 )
11035+ return false;
11036+
11037+ return true;
11038+ }
11039+
1101411040int main (int argc , char * * argv )
1101511041{
1101611042 int err ;
@@ -11026,9 +11052,11 @@ int main(int argc, char **argv)
1102611052 if (err )
1102711053 return err ;
1102811054
11029- err = handle_plugin (argc - 1 , & argv [1 ], nvme .extensions );
11030- if (err == - ENOTTY )
11031- general_help (& builtin , NULL );
11055+ do {
11056+ err = handle_plugin (argc - 1 , & argv [1 ], nvme .extensions );
11057+ if (err == - ENOTTY )
11058+ general_help (& builtin , NULL );
11059+ } while (handle_delay (err ));
1103211060
1103311061 return err ? 1 : 0 ;
1103411062}
0 commit comments