From nobody Wed Jun 17 10:52:50 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ggLKv0PKJz6h8pd for ; Wed, 17 Jun 2026 10:52:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ggLKt6jZPz3QXK for ; Wed, 17 Jun 2026 10:52:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1781693571; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ZHBJDpNlCbElkGfF4h7VKb0FoDt6ciODrPB0FQieApA=; b=NNjhX4mPIpBaO0UAnBJ86oCZ/jNj7wKRC+exH8F0cGoWfO+sYsQf18k8mk34qGhsEaLFKO IQW0RmeCib69ZNSfIS7iAPejFQ48A/+N1DhunGA9XMg+wYPMDrHMhBRE4KlpEN50tkso/6 YjJS+LdutgEp3D/z1JZG2xyjHXO0fD4RZgt4nrdqnvifcAij0bb2wTg4R/25zEr5K/waah 6AK0VQXfJOieCfSnl3nUfRIR5XGHZ7ntHmoBjTjLf8egnEktmdCoAHaTtAns2bXwHIKU0C J4BrzYE4ADAvlch8mL4eTIstC681GVCrXPSQ6JOO3JRDeZhC2SP1J19lmBOOHw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1781693571; a=rsa-sha256; cv=none; b=SmoY8ihlquNAl3FML5/E2wkrHvGpiEduBrI2ZmYAPwPza94ZP6Nm7hiL6/tMXr1ES+fphy kmU5HQtv7a9LbiXMAq4tiB8y98Ub4/loZt46O7tEClno6ghkr6oNiQ3Hi5SgQ1xmMXdK9p qMJaB9AYoywbuAxvQ4ovfiRWT+r/BgaC2rR+YDw2rEJWjKhAOq0VsRVAR2qKN6FlD7rfWd jcV9U8T1Dc6UVOkWeg+4Je0Y8oTBYVycPbaxnfM5fgnytszCnSSlVfXoyByYQCydaXTYrB h8tUQc49nfyPu/YTuz540CkRQitsQZ9Ls28AlUDM9cGUvSmTs10/a+uxhIMXIw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1781693571; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ZHBJDpNlCbElkGfF4h7VKb0FoDt6ciODrPB0FQieApA=; b=mgTNePLzVvFEwHWxvL5NwRARwqRIo4uSOa+3EaTWhFB6KFIkUraqs5dHVvP5Ceszz4ayeH vC5AyoEl/kwQaohh6L5MkdnXo/5Oi320KXa3bt8T+IVP2TUBoA3CpdPZjaqhogtSM5F0Hs v4QPvrc4B/FXPxcPKDzXZ/u1/N9Fekdqz9lHQI1zo97s3/1jrDbK511wECZQ2uUHPaXTno BV7Vt2O8lyN6o36myA8oz6l5DoaHZtgLREfg9sDLkv8er4et+mn2pIk2Tud9mype+jQpVr NnJfJsdqiWkwTNJzhAI/Re+sHdgnirCkDaTj+3bTmFq+dVHW+YgF3Q99VT6vdg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4ggLKt6Ff1z16tf for ; Wed, 17 Jun 2026 10:52:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1c91f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 17 Jun 2026 10:52:50 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Goran=?utf-8?Q? Meki=C4=87?= From: Christos Margiolis Subject: git: fe13f70b95a7 - main - sound: Include more information in kevent returned from the kernel List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: christos X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: fe13f70b95a762e19c38d1152eac6312d8578f84 Auto-Submitted: auto-generated Date: Wed, 17 Jun 2026 10:52:50 +0000 Message-Id: <6a327c82.1c91f.60041f72@gitrepo.freebsd.org> The branch main has been updated by christos: URL: https://cgit.FreeBSD.org/src/commit/?id=fe13f70b95a762e19c38d1152eac6312d8578f84 commit fe13f70b95a762e19c38d1152eac6312d8578f84 Author: Goran Mekić AuthorDate: 2026-06-17 10:35:07 +0000 Commit: Christos Margiolis CommitDate: 2026-06-17 10:50:39 +0000 sound: Include more information in kevent returned from the kernel Reviewed by: christos Differential Revision: https://reviews.freebsd.org/D57362 --- share/man/man4/pcm.4 | 78 ++++++++++++++++++++++++++++++++++++++++++++++++- sys/dev/sound/pcm/dsp.c | 14 +++++++-- 2 files changed, 89 insertions(+), 3 deletions(-) diff --git a/share/man/man4/pcm.4 b/share/man/man4/pcm.4 index 181b2120c2e6..cda27d734b74 100644 --- a/share/man/man4/pcm.4 +++ b/share/man/man4/pcm.4 @@ -23,7 +23,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd May 21, 2026 +.Dd June 17, 2026 .Dt SOUND 4 .Os .Sh NAME @@ -529,6 +529,82 @@ See for a complete list of the supported .Fn ioctl functions. +.Ss kqueue Support +The +.Va kevent +structure's fields are defined as follows: +.Bl -tag -width "Fa filter" +.It Fa ident +The file descriptor for the device. +.It Fa filter +The kernel filter used to process the event. +This is either +.Dv EVFILT_READ +for recording or +.Dv EVFILT_WRITE +for playback. +.It Fa data +The number of bytes available to be read or written. +.It Fa ext +.Bl -bullet -compact +.It +.Va ext[0] +For devices that use +.Xr mmap 2 , +it contains the +.Va count_info.ptr +field reported by +.Va SNDCTL_DSP_GETIPTR +for recording or +.Va SNDCTL_DSP_GETOPTR +for playback, whereas for devices that do not use +.Xr mmap 2 , +it contains the +.Va oss_count_t.fifo_samples +field reported by +.Va SNDCTL_DSP_CURRENT_IPTR +for recording or +.Va SNDCTL_DSP_CURRENT_OPTR +for playback. +.It +.Va ext[1] +contains the +.Va audio_errinfo.rec_overruns +field for recording events, or the +.Va audio_errinfo.play_underruns +field for playback events, as reported by +.Va SNDCTL_DSP_GETERROR . +.Pp +This allows a single +.Va kevent +to report that data is ready, how many bytes can be read or written, the +current buffer position, and the current error count. +This is especially useful for scenarios that use +.Xr mmap 2 , +because without +.Xr kqueue 2 +the typical processing loop consists of: +.Bl -bullet -compact +.It +Calculating the wait time and calling +.Xr clock_nanosleep 2 . +.It +Calling +.Xr ioctl 2 +for +.Va SNDCTL_DSP_GETIPTR +or +.Va SNDCTL_DSP_GETOPTR +to get the pointer into the memory-mapped buffer where new data starts. +.It +Calling +.Xr ioctl 2 +for +.Va SNDCTL_DSP_GETERROR +to get over/underruns and handle them. +.El +.El +.El .Sh FILES The .Nm diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c index 1fa665b6b6cf..7f05da62a173 100644 --- a/sys/dev/sound/pcm/dsp.c +++ b/sys/dev/sound/pcm/dsp.c @@ -3020,10 +3020,20 @@ dsp_kqevent(struct knote *kn, long hint) } kn->kn_data = 0; if (chn_polltrigger(ch)) { - if (kn->kn_filter == EVFILT_READ) + if (kn->kn_filter == EVFILT_READ) { kn->kn_data = sndbuf_getready(ch->bufsoft); - else + if (ch->flags & CHN_F_MMAP) + kn->kn_kevent.ext[0] = sndbuf_getfreeptr(ch->bufsoft); + else + kn->kn_kevent.ext[0] = sndbuf_getready(ch->bufsoft) / ch->bufsoft->align; + } else { kn->kn_data = sndbuf_getfree(ch->bufsoft); + if (ch->flags & CHN_F_MMAP) + kn->kn_kevent.ext[0] = sndbuf_getreadyptr(ch->bufsoft); + else + kn->kn_kevent.ext[0] = sndbuf_getready(ch->bufsoft) / ch->bufsoft->align; + } + kn->kn_kevent.ext[1] = ch->xruns; } return (kn->kn_data > 0);