From dada@sbox.tugraz.at  Wed Aug 18 07:39:02 2004
Return-Path: <dada@sbox.tugraz.at>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id BB5AA16A4CE
	for <freebsd-gnats-submit@freebsd.org>; Wed, 18 Aug 2004 07:39:02 +0000 (GMT)
Received: from mailrelay02.tugraz.at (mailrelay.tu-graz.ac.at [129.27.3.7])
	by mx1.FreeBSD.org (Postfix) with ESMTP id 9202643D3F
	for <freebsd-gnats-submit@freebsd.org>; Wed, 18 Aug 2004 07:39:01 +0000 (GMT)
	(envelope-from dada@sbox.tugraz.at)
Received: from webmail.tugraz.at (webmail01.tu-graz.ac.at [129.27.3.143])
	by mailrelay02.tugraz.at (8.13.1/8.13.1) with ESMTP id i7I7cxeD026301
	for <freebsd-gnats-submit@freebsd.org>; Wed, 18 Aug 2004 09:38:59 +0200 (CEST)
Received: from ARP411.kfunigraz.ac.at (ARP411.kfunigraz.ac.at
	[143.50.129.136]) by webmail.tugraz.at (Horde) with HTTP for <dada@sbox>;
	Wed, 18 Aug 2004 09:38:59 +0200
Message-Id: <20040818093859.b0g48oowo4wwkc8k@webmail.tugraz.at>
Date: Wed, 18 Aug 2004 09:38:59 +0200
From: dada@sbox.tugraz.at
To: FreeBSD problem reports <freebsd-gnats-submit@freebsd.org>
Subject: [patch] spkr(4): hardcoded assumption HZ == 100

>Number:         70610
>Category:       kern
>Synopsis:       [speaker] [patch] spkr(4): hardcoded assumption HZ == 100
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    brian
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Aug 18 07:40:16 GMT 2004
>Closed-Date:    Thu Jul 12 07:06:39 GMT 2007
>Last-Modified:  Thu Jul 12 07:10:05 GMT 2007
>Originator:     Martin Kammerhofer
>Release:        FreeBSD 4.10-RELEASE-p2 i386
>Organization:
Graz UNI
>Environment:
System: FreeBSD Martin.liebt.Susi 4.10-RELEASE-p2 FreeBSD 4.10-RELEASE-p2 #1: Mon Aug 16 14:26:52 CEST 2004 toor@Martin.liebt.Susi:/mnt/redhat/freebsd/usr/src/sys/compile/GEIDORF4 i386
>Description:
The spkr(4) pseudo-device driver is documented to accept tone
durations in units of 1/100ths of a second. (Cf. spkr(4) and
/usr/include/machine/speaker.h.) However the driver is implemented to
take units of 1/HZ seconds. This mismatch causes timing errors in the
HZ != 100 case.
>How-To-Repeat:
Run a kernel with the speaker(4) pseudo-device and e.g. HZ=400.
Compare times of e.g.:
time /usr/games/morse -p </etc/motd
time /usr/games/morse -d /dev/cuaa0 </etc/motd
>Fix:
--- spkr.c.orig	Wed Jun 16 11:47:08 2004
+++ spkr.c	Mon Aug 16 16:01:22 2004
@@ -91,18 +91,18 @@
 #define SPKRPRI PSOCK
 static char endtone, endrest;
 
-static void tone(unsigned int thz, unsigned int ticks);
-static void rest(int ticks);
+static void tone(unsigned int thz, unsigned int centisecs);
+static void rest(int centisecs);
 static void playinit(void);
 static void playtone(int pitch, int value, int sustain);
 static void playstring(char *cp, size_t slen);
 
-/* emit tone of frequency thz for given number of ticks */
+/* emit tone of frequency thz for given number of centisecs */
 static void
-tone(thz, ticks)
-	unsigned int thz, ticks;
+tone(thz, centisecs)
+	unsigned int thz, centisecs;
 {
-    unsigned int divisor;
+    unsigned int divisor, ticks;
     int sps;
 
     if (thz <= 0)
@@ -111,7 +111,7 @@
     divisor = timer_freq / thz;
 
 #ifdef DEBUG
-    (void) printf("tone: thz=%d ticks=%d\n", thz, ticks);
+    (void) printf("tone: thz=%d centisecs=%d\n", thz, centisecs);
 #endif /* DEBUG */
 
     /* set timer to generate clicks at given frequency in Hertz */
@@ -135,6 +135,7 @@
      * This is so other processes can execute while the tone is being
      * emitted.
      */
+    ticks = centisecs * hz / 100;
     if (ticks > 0)
 	tsleep(&endtone, SPKRPRI | PCATCH, "spkrtn", ticks);
     SPEAKER_OFF;
@@ -143,19 +144,22 @@
     splx(sps);
 }
 
-/* rest for given number of ticks */
+/* rest for given number of centisecs */
 static void
-rest(ticks)
-	int	ticks;
+rest(centisecs)
+	int	centisecs;
 {
+    int ticks;
+
     /*
      * Set timeout to endrest function, then give up the timeslice.
      * This is so other processes can execute while the rest is being
      * waited out.
      */
 #ifdef DEBUG
-    (void) printf("rest: %d\n", ticks);
+    (void) printf("rest: %d\n", centisecs);
 #endif /* DEBUG */
+    ticks = centisecs * hz / 100;
     if (ticks > 0)
 	tsleep(&endrest, SPKRPRI | PCATCH, "spkrrs", ticks);
 }

--=_21aj2zn430zo--

>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-i386->freebsd-kern 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Tue May 22 01:56:05 UTC 2007 
Responsible-Changed-Why:  
Since amd64 is also affected, make this kern/. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=70610 

From: Gavin Atkinson <gavin.atkinson@ury.york.ac.uk>
To: bug-followup@FreeBSD.org, dada@sbox.tugraz.at
Cc:  
Subject: Re: kern/70610: [speaker] [patch] spkr(4): hardcoded assumption HZ
	== 100
Date: Thu, 24 May 2007 12:28:43 +0100

 --=-bEK8c7voYBxRj5eX5595
 Content-Type: text/plain
 Content-Transfer-Encoding: 7bit
 
 This patch fixes this problem and the problem detailed in bin/67995,
 matches the style of the rest of the file, and applies cleanly to HEAD.
 It should be committed.
 
 --=-bEK8c7voYBxRj5eX5595
 Content-Disposition: attachment; filename=spkr.diff
 Content-Type: text/x-patch; name=spkr.diff; charset=us-ascii
 Content-Transfer-Encoding: base64
 
 SW5kZXg6IHNwa3IuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC91c3IvY3ZzL3NyYy9zeXMvZGV2
 L3NwZWFrZXIvc3Brci5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS43MA0KZGlmZiAtdSAtcjEu
 NzAgc3Brci5jDQotLS0gc3Brci5jCTExIE5vdiAyMDA1IDA5OjU3OjMwIC0wMDAwCTEuNzANCisr
 KyBzcGtyLmMJMjQgTWF5IDIwMDcgMTE6MjU6MTMgLTAwMDANCkBAIC02MywxOCArNjMsMTggQEAN
 CiAjZGVmaW5lIFNQS1JQUkkgUFNPQ0sNCiBzdGF0aWMgY2hhciBlbmR0b25lLCBlbmRyZXN0Ow0K
 IA0KLXN0YXRpYyB2b2lkIHRvbmUodW5zaWduZWQgaW50IHRoeiwgdW5zaWduZWQgaW50IHRpY2tz
 KTsNCi1zdGF0aWMgdm9pZCByZXN0KGludCB0aWNrcyk7DQorc3RhdGljIHZvaWQgdG9uZSh1bnNp
 Z25lZCBpbnQgdGh6LCB1bnNpZ25lZCBpbnQgY2VudGlzZWNzKTsNCitzdGF0aWMgdm9pZCByZXN0
 KGludCBjZW50aXNlY3MpOw0KIHN0YXRpYyB2b2lkIHBsYXlpbml0KHZvaWQpOw0KIHN0YXRpYyB2
 b2lkIHBsYXl0b25lKGludCBwaXRjaCwgaW50IHZhbHVlLCBpbnQgc3VzdGFpbik7DQogc3RhdGlj
 IHZvaWQgcGxheXN0cmluZyhjaGFyICpjcCwgc2l6ZV90IHNsZW4pOw0KIA0KLS8qIGVtaXQgdG9u
 ZSBvZiBmcmVxdWVuY3kgdGh6IGZvciBnaXZlbiBudW1iZXIgb2YgdGlja3MgKi8NCisvKiBlbWl0
 IHRvbmUgb2YgZnJlcXVlbmN5IHRoeiBmb3IgZ2l2ZW4gbnVtYmVyIG9mIGNlbnRpc2VjcyAqLw0K
 IHN0YXRpYyB2b2lkDQotdG9uZSh0aHosIHRpY2tzKQ0KLQl1bnNpZ25lZCBpbnQgdGh6LCB0aWNr
 czsNCit0b25lKHRoeiwgY2VudGlzZWNzKQ0KKwl1bnNpZ25lZCBpbnQgdGh6LCBjZW50aXNlY3M7
 DQogew0KLSAgICB1bnNpZ25lZCBpbnQgZGl2aXNvcjsNCisgICAgdW5zaWduZWQgaW50IGRpdmlz
 b3IsIHRpY2tzOw0KICAgICBpbnQgc3BzOw0KIA0KICAgICBpZiAodGh6IDw9IDApDQpAQCAtODMs
 NyArODMsNyBAQA0KICAgICBkaXZpc29yID0gdGltZXJfZnJlcSAvIHRoejsNCiANCiAjaWZkZWYg
 REVCVUcNCi0gICAgKHZvaWQpIHByaW50ZigidG9uZTogdGh6PSVkIHRpY2tzPSVkXG4iLCB0aHos
 IHRpY2tzKTsNCisgICAgKHZvaWQpIHByaW50ZigidG9uZTogdGh6PSVkIGNlbnRpc2Vjcz0lZFxu
 IiwgdGh6LCBjZW50aXNlY3MpOw0KICNlbmRpZiAvKiBERUJVRyAqLw0KIA0KICAgICAvKiBzZXQg
 dGltZXIgdG8gZ2VuZXJhdGUgY2xpY2tzIGF0IGdpdmVuIGZyZXF1ZW5jeSBpbiBIZXJ0eiAqLw0K
 QEAgLTEwNyw2ICsxMDcsNyBAQA0KICAgICAgKiBUaGlzIGlzIHNvIG90aGVyIHByb2Nlc3NlcyBj
 YW4gZXhlY3V0ZSB3aGlsZSB0aGUgdG9uZSBpcyBiZWluZw0KICAgICAgKiBlbWl0dGVkLg0KICAg
 ICAgKi8NCisgICAgdGlja3MgPSBjZW50aXNlY3MgKiBoeiAvIDEwMDsNCiAgICAgaWYgKHRpY2tz
 ID4gMCkNCiAJdHNsZWVwKCZlbmR0b25lLCBTUEtSUFJJIHwgUENBVENILCAic3BrcnRuIiwgdGlj
 a3MpOw0KICAgICBwcGlfc3Brcl9vZmYoKTsNCkBAIC0xMTUsMTkgKzExNiwyMiBAQA0KICAgICBz
 cGx4KHNwcyk7DQogfQ0KIA0KLS8qIHJlc3QgZm9yIGdpdmVuIG51bWJlciBvZiB0aWNrcyAqLw0K
 Ky8qIHJlc3QgZm9yIGdpdmVuIG51bWJlciBvZiBjZW50aXNlY3MgKi8NCiBzdGF0aWMgdm9pZA0K
 LXJlc3QodGlja3MpDQotCWludAl0aWNrczsNCityZXN0KGNlbnRpc2VjcykNCisJaW50CWNlbnRp
 c2VjczsNCiB7DQorICAgIGludCB0aWNrczsNCisNCiAgICAgLyoNCiAgICAgICogU2V0IHRpbWVv
 dXQgdG8gZW5kcmVzdCBmdW5jdGlvbiwgdGhlbiBnaXZlIHVwIHRoZSB0aW1lc2xpY2UuDQogICAg
 ICAqIFRoaXMgaXMgc28gb3RoZXIgcHJvY2Vzc2VzIGNhbiBleGVjdXRlIHdoaWxlIHRoZSByZXN0
 IGlzIGJlaW5nDQogICAgICAqIHdhaXRlZCBvdXQuDQogICAgICAqLw0KICNpZmRlZiBERUJVRw0K
 LSAgICAodm9pZCkgcHJpbnRmKCJyZXN0OiAlZFxuIiwgdGlja3MpOw0KKyAgICAodm9pZCkgcHJp
 bnRmKCJyZXN0OiAlZFxuIiwgY2VudGlzZWNzKTsNCiAjZW5kaWYgLyogREVCVUcgKi8NCisgICAg
 dGlja3MgPSBjZW50aXNlY3MgKiBoeiAvIDEwMDsNCiAgICAgaWYgKHRpY2tzID4gMCkNCiAJdHNs
 ZWVwKCZlbmRyZXN0LCBTUEtSUFJJIHwgUENBVENILCAic3BrcnJzIiwgdGlja3MpOw0KIH0NCg==
 
 
 --=-bEK8c7voYBxRj5eX5595--
Responsible-Changed-From-To: freebsd-kern->freebsd-bugs 
Responsible-Changed-By: ceri 
Responsible-Changed-When: Mon May 28 11:26:58 UTC 2007 
Responsible-Changed-Why:  
Correct Responsible: 

http://www.freebsd.org/cgi/query-pr.cgi?pr=70610 
State-Changed-From-To: open->patched 
State-Changed-By: brian 
State-Changed-When: Mon Jun 4 08:31:06 UTC 2007 
State-Changed-Why:  
Fixed in -current (spkr.c 1.71).  I plan to MFC in 2 weeks 

Note, I changed the use of 'ticks' which shadows the global 
variable of the same name and declared the 'timo' stack 
variable.  The original patch overwrote the global 'ticks' 
and made bad things happen. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=70610 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/70610: commit references a PR
Date: Mon,  4 Jun 2007 08:33:23 +0000 (UTC)

 brian       2007-06-04 08:33:18 UTC
 
   FreeBSD src repository
 
   Modified files:
     sys/dev/speaker      spkr.c 
   Log:
   Speaker durations are specified in 1/100ths of a second according to
   spkr(4).
   
   PR:             70610, 67995
   Submitted by:   dada at sbox dot tugraz dot at (modulo one fix)
   MFC after:      2 weeks
   
   Revision  Changes    Path
   1.71      +19 -15    src/sys/dev/speaker/spkr.c
 _______________________________________________
 cvs-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/cvs-all
 To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
 
Responsible-Changed-From-To: freebsd-bugs->brian 
Responsible-Changed-By: brian 
Responsible-Changed-When: Mon Jun 4 18:46:39 UTC 2007 
Responsible-Changed-Why:  
Become responsible so that it's clear who's gonna MFC 

http://www.freebsd.org/cgi/query-pr.cgi?pr=70610 
State-Changed-From-To: patched->closed 
State-Changed-By: brian 
State-Changed-When: Thu Jul 12 07:05:57 UTC 2007 
State-Changed-Why:  
The fix has been MFC'd (spkr.c 1.70.2.2) 

http://www.freebsd.org/cgi/query-pr.cgi?pr=70610 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/70610: commit references a PR
Date: Thu, 12 Jul 2007 07:05:51 +0000 (UTC)

 brian       2007-07-12 07:05:43 UTC
 
   FreeBSD src repository
 
   Modified files:        (Branch: RELENG_6)
     sys/dev/speaker      spkr.c 
   Log:
   MFC: Speaker durations are specified in 1/100ths of a second according to
        spkr(4).
   
   PR:             70610, 67995
   
   Revision  Changes    Path
   1.70.2.2  +21 -17    src/sys/dev/speaker/spkr.c
 _______________________________________________
 cvs-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/cvs-all
 To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
 
>Unformatted:
