Module Name:    src
Committed By:   nat
Date:           Fri May 26 12:10:13 UTC 2023

Modified Files:
        src/sys/dev/pad: pad.c

Log Message:
Fix previous.

The previous commit was misleading due to the flag names used.

The rationale for this change is that it is ok to return EAGAIN on first
read as playback has not started.  Then it shoud wait on every subsequent read.

This is what makes the high precsision throttling of pad(4), for which these
degree of fine-grained sleeps are not possible in userland.  This is a
requirement of users of pad(4) such as bta2dpd(8).


To generate a diff of this commit:
cvs rdiff -u -r1.83 -r1.84 src/sys/dev/pad/pad.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pad/pad.c
diff -u src/sys/dev/pad/pad.c:1.83 src/sys/dev/pad/pad.c:1.84
--- src/sys/dev/pad/pad.c:1.83	Fri May 26 10:39:56 2023
+++ src/sys/dev/pad/pad.c	Fri May 26 12:10:13 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: pad.c,v 1.83 2023/05/26 10:39:56 nat Exp $ */
+/* $NetBSD: pad.c,v 1.84 2023/05/26 12:10:13 nat Exp $ */
 
 /*-
  * Copyright (c) 2007 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pad.c,v 1.83 2023/05/26 10:39:56 nat Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pad.c,v 1.84 2023/05/26 12:10:13 nat Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -324,7 +324,7 @@ pad_get_block(struct pad_softc *sc, pad_
 	KASSERT(maxblksize > 0);
 	KASSERT(mutex_owned(&sc->sc_intr_lock));
 
-	if (sc->sc_buflen == 0 && dowait)
+	if (sc->sc_buflen == 0 && !dowait)
 		return EAGAIN;
 
 	while (sc->sc_buflen == 0) {
@@ -515,13 +515,13 @@ pad_read(struct pad_softc *sc, off_t *of
 	int err, first;
 
 	err = 0;
-	first = 1;
+	first = 0;
 	DPRINTF("%s: resid=%zu\n", __func__, uio->uio_resid);
 	while (uio->uio_resid > 0) {
 		mutex_enter(&sc->sc_intr_lock);
 		err = pad_get_block(sc, &pb, MIN(uio->uio_resid, INT_MAX), first);
 		mutex_exit(&sc->sc_intr_lock);
-		first = 0;
+		first = 1;
 		if (err == EAGAIN) {
 			err = 0;
 			break;

Reply via email to