Handle EBUSY when probing support for a PTP_SYS_OFFSET ioctl. Try each
ioctl up to three times before giving up on it to make the detection
more reliable.

Signed-off-by: Miroslav Lichvar <mlich...@redhat.com>
---
 sysoff.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/sysoff.c b/sysoff.c
index a425275..fc1f7ca 100644
--- a/sysoff.c
+++ b/sysoff.c
@@ -145,8 +145,8 @@ int sysoff_measure(int fd, int method, int n_samples,
 int sysoff_probe(int fd, int n_samples)
 {
        int64_t junk, delay;
+       int i, j, err;
        uint64_t ts;
-       int i;
 
        if (n_samples > PTP_MAX_SAMPLES) {
                fprintf(stderr, "warning: %d exceeds kernel max readings %d\n",
@@ -156,9 +156,15 @@ int sysoff_probe(int fd, int n_samples)
        }
 
        for (i = 0; i < SYSOFF_LAST; i++) {
-               if (sysoff_measure(fd, i, n_samples, &junk, &ts, &delay) < 0)
-                       continue;
-               return i;
+               for (j = 0; j < 3; j++) {
+                       err = sysoff_measure(fd, i, n_samples, &junk, &ts,
+                                            &delay);
+                       if (err == -EBUSY)
+                               continue;
+                       if (err)
+                               break;
+                       return i;
+               }
        }
 
        return SYSOFF_RUN_TIME_MISSING;
-- 
2.35.1



_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to