NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/54243: beeping woes with -current



The following reply was made to PR kern/54243; it has been noted by GNATS.

From: Tetsuya Isaki <isaki%pastel-flower.jp@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: kern-bug-people%netbsd.org@localhost,
	gnats-admin%netbsd.org@localhost,
	netbsd-bugs%netbsd.org@localhost
Subject: Re: kern/54243: beeping woes with -current
Date: Wed, 26 Jun 2019 16:21:09 +0900

 At Wed, 29 May 2019 00:05:00 +0000 (UTC),
 dholland%eecs.harvard.edu@localhost wrote:
 > >Description:
 > I updated the kernel today and beeps in X, which have been loud and
 > obnoxious since nat-audio was merged, are now even worse -- they are
 > very loud by default, and also they're now staticky/not rendered
 > right, which is quite abrasive.
 
 Please try this commit.
 
 | Committed By:	isaki
 | Date:		Wed Jun 26 06:57:45 UTC 2019
 | 
 | Modified Files:
 | 	src/sys/dev/audio: audio.c audiobell.c audiodef.h audiovar.h
 | 
 | Log Message:
 | Improve audiobell (and interfaces with audio).
 | - Generate pseudo sine wave if possible.  It may improve timbre.
 |   If it cannot represent a sine wave, it falls back to a triangular
 |   wave or a rectangular wave.
 | - Volume adjustment.
 | - Calculate playback frequency based on mixer frequency.
 |   Now audiobellopen() initializes playback parameters other than
 |   sample_rate, and new audiobellsetrate() sets sample_rate.
 | 
 | To generate a diff of this commit:
 | cvs rdiff -u -r1.20 -r1.21 src/sys/dev/audio/audio.c
 | cvs rdiff -u -r1.2 -r1.3 src/sys/dev/audio/audiobell.c
 | cvs rdiff -u -r1.5 -r1.6 src/sys/dev/audio/audiodef.h
 | cvs rdiff -u -r1.3 -r1.4 src/sys/dev/audio/audiovar.h
 
 > The overt problem is spkr1; I can hear that the PC speaker is also
 > beeping but can't hear it clearly over the other, so I can't tell if
 > it's also messed up.
 
 Use the following temprary patch to separate the problem.
 It adds sysctl hw.wsbell<N>.mute knob.
 # I don't have solution about the problem that all spkr* beep
 # simultatenously..
 
 --- a/sys/dev/wscons/wsbell.c
 +++ b/sys/dev/wscons/wsbell.c
 @@ -128,6 +128,7 @@ __KERNEL_RCSID(0, "$NetBSD: wsbell.c,v 1.11 2019/04/18 14:01:28 isaki Exp $");
  #include <sys/systm.h>
  #include <sys/tty.h>
  #include <sys/signalvar.h>
 +#include <sys/sysctl.h>
  #include <sys/device.h>
  #include <sys/vnode.h>
  #include <sys/callout.h>
 @@ -213,6 +214,7 @@ wsbell_attach(device_t parent, device_t self, void *aux)
  {
  	struct wsbell_softc *sc = device_private(self);
  	struct wsbelldev_attach_args *ap = aux;
 +	const struct sysctlnode *node;
  #if NWSMUX > 0
  	int mux, error;
  #endif
 @@ -247,6 +249,25 @@ wsbell_attach(device_t parent, device_t self, void *aux)
  	mutex_init(&sc->sc_bellock, MUTEX_DEFAULT, IPL_SCHED);
  	cv_init(&sc->sc_bellcv, "bellcv");
  
 +	sc->sc_mute = 0;
 +	sysctl_createv(&sc->sc_log, 0, NULL, &node,
 +	    0,
 +	    CTLTYPE_NODE, device_xname(self),
 +	    SYSCTL_DESCR("mute test"),
 +	    NULL, 0,
 +	    NULL, 0,
 +	    CTL_HW,
 +	    CTL_CREATE, CTL_EOL);
 +
 +	if (node != NULL) {
 +		sysctl_createv(&sc->sc_log, 0, NULL, NULL,
 +		    CTLFLAG_READWRITE,
 +		    CTLTYPE_INT, "mute",
 +		    SYSCTL_DESCR("mute test"),
 +		    NULL, 0, &sc->sc_mute, sizeof(sc->sc_mute),
 +		    CTL_HW, node->sysctl_num, CTL_CREATE, CTL_EOL);
 +	}
 +
  	kthread_create(PRI_BIO, KTHREAD_MPSAFE | KTHREAD_MUSTJOIN, NULL,
  	    bell_thread, sc, &sc->sc_bellthread, "%s", device_xname(self));
  }
 @@ -315,6 +336,8 @@ wsbell_detach(device_t self, int flags)
  	cv_destroy(&sc->sc_bellcv);
  	mutex_destroy(&sc->sc_bellock);
  
 +	sysctl_teardown(&sc->sc_log);
 +
  	return (0);
  }
  
 @@ -423,6 +446,11 @@ bell_thread(void *arg)
  			kthread_exit(0);
  		}
  
 +		if (sc->sc_mute) {
 +			mutex_exit(&sc->sc_bellock);
 +			continue;
 +		}
 +
  		tone.frequency = vb->pitch;
  		/*
  		 * period (derived from wskbd) is in msec.
 --- a/sys/dev/wscons/wsbellvar.h
 +++ b/sys/dev/wscons/wsbellvar.h
 @@ -46,6 +46,8 @@ struct wsbell_softc {
  
  	int		sc_refcnt;
  	bool		sc_dying;	/* device is being detached */
 +	struct sysctllog *sc_log;
 +	int		sc_mute;
  
  	lwp_t		*sc_bellthread;
  	kmutex_t	sc_bellock;
 
 ---
 Tetsuya Isaki <isaki%pastel-flower.jp@localhost / isaki%NetBSD.org@localhost>
 


Home | Main Index | Thread Index | Old Index