From: bibo m. <bib...@li...> - 2006-02-24 01:29:02
|
Hi, nanosleep02 failed in my IA32 box, it is becaus of nanosleep elasepd time calculation error. Conversion elapsed time from nsec to msec had better get nsec unit time and then conversion. Here We convert nsec into usec, but not msec unit. Thanks bibo,mao --- ltp-full-20060205/testcases/kernel/syscalls/nanosleep/nanosleep02.c.org 2006-02-23 10:04:35.000000000 +0800 +++ ltp-full-20060205/testcases/kernel/syscalls/nanosleep/nanosleep02.c 2006-02-23 10:17:57.000000000 +0800 @@ -185,7 +185,7 @@ main(int ac, char **av) void do_child() { - unsigned long req, rem, before, after, elapsed; /* msec */ + unsigned long req, rem, before, after, elapsed, elapsed_nano; /* usec */ struct timeval otime; /* time before child execution suspended */ struct timeval ntime; /* time after child resumes execution */ @@ -208,15 +208,17 @@ do_child() * The time remaining should be equal to the * Total time for sleep - time spent on sleep bfr signal */ - req = timereq.tv_sec * 1000 + timereq.tv_nsec / 1000000; - rem = timerem.tv_sec * 1000 + timerem.tv_nsec / 1000000; - before = otime.tv_sec * 1000 + otime.tv_usec/1000; - after = ntime.tv_sec * 1000 + ntime.tv_usec/1000; + req = timereq.tv_sec * 1000000 + timereq.tv_nsec; + rem = timerem.tv_sec * 1000000 + timerem.tv_nsec; + elapsed_nano = (timereq.tv_sec - timerem.tv_sec ) * 1000000 + + (timereq.tv_nsec - timerem.tv_nsec) / 1000; + before = otime.tv_sec * 1000000 + otime.tv_usec; + after = ntime.tv_sec * 1000000 + ntime.tv_usec; elapsed = after - before; - if (rem - (req - elapsed) > MSEC_PRECISION) { - tst_resm(TFAIL, "Remaining sleep time %lu msec doesn't " - "match with the expected %lu msec time", + if (elapsed - elapsed_nano > MSEC_PRECISION * 1000) { + tst_resm(TFAIL, "Remaining sleep time %lu usec doesn't " + "match with the expected %lu usec time", rem, (req - elapsed)); exit(1); } |