From alsa-user-owner@alsa.jcu.cz  Fri Mar  5 14:47:51 1999
Received: from post-20.mail.demon.net (post-20.mail.demon.net [194.217.242.27])
	by marvin.jcu.cz (8.9.1a/8.9.1) with ESMTP id OAA06850;
	Fri, 5 Mar 1999 14:45:06 +0100
Received: from [212.228.182.246] (helo=ariel.sr.home)
	by post-20.mail.demon.net with esmtp (Exim 2.10 #2)
	id 10IuuJ-0007Dy-0K; Fri, 5 Mar 1999 13:44:51 +0000
Received: (from steve@localhost)
	by ariel.sr.home (8.8.7/8.8.7) id NAA29684;
	Fri, 5 Mar 1999 13:43:45 GMT
Date: Fri, 5 Mar 1999 13:43:45 GMT
From: Steve Ratcliffe <steve@parabola.demon.co.uk>
Message-Id: <199903051343.NAA29684@ariel.sr.home>
To: alsa-user@alsa.jcu.cz
Subject: Re: Failure snd-pciaudio and snd-seq
Cc: alsa-devel@alsa.jcu.cz
Reply-To: alsa-user@alsa.jcu.cz
Sender: alsa-user-owner@alsa.jcu.cz
Precedence: list

>   I am trying to use the ALSA snd driver and I get
> the following problem:
>
> [root@shadowdragon seq]# insmod  ../../modules/snd-seq.o 
> ../../modules/snd-seq.o: unresolved symbol __fixdfsi
> ../../modules/snd-seq.o: unresolved symbol __floatsidf
> ../../modules/snd-seq.o: unresolved symbol __divdf3
> ../../modules/snd-seq.o: unresolved symbol __fixunsdfsi
> ../../modules/snd-seq.o: unresolved symbol __muldf3
> ../../modules/snd-seq.o: unresolved symbol __subdf3
> ../../modules/snd-seq.o: unresolved symbol __adddf3
> ../../modules/snd-seq.o: unresolved symbol __gedf2

That looks like this is due to floating point stuff in the alsa kernel
sequencer code.

In seq_timer.c just below the comment:
	/* FIXME: use of floating point stuff, illegal in kernel (??) */

> I am running on a Linux/Alpha box:

That makes sense, as it happens to work on Pentiums.

You could try the following patch, it should work but it could
be improved with a bit of thought.

..Steve

--- alsa-driver/kernel/seq/seq_timer.c	Mon Jan  4 14:38:53 1999
+++ sr/kernel/seq/seq_timer.c	Fri Mar  5 13:38:26 1999
@@ -116,20 +116,18 @@
 
 		tmr = q->timer;
 
-		if (tmr != NULL) {
-			if (tmr->running) {
-				double delta_time;
+		if (tmr != NULL && tmr->running) {
+			long delta_time;
 
-				/* update timer */
-				snd_seq_inc_real_time(&tmr->cur_time, &period);
-				timers_running = 1;
+			/* update timer */
+			snd_seq_inc_real_time(&tmr->cur_time, &period);
+			timers_running = 1;
 
-				/* calculate current tick */
-				/* FIXME: use of floating point stuff, illegal in kernel (??) */
-				if (tmr->tempo > 0) {
-					delta_time = tmr->cur_time.tv_sec - tmr->tempo_time.tv_sec + (1.0E-9 * (double) (tmr->cur_time.tv_nsec - tmr->tempo_time.tv_nsec));
-					tmr->cur_tick = tmr->tempo_tick + (tmr->ppq * delta_time * 1.0E6 / tmr->tempo);
-				}
+			/* calculate current tick */
+			if (tmr->tempo > 0) {
+				delta_time = (tmr->cur_time.tv_sec - tmr->tempo_time.tv_sec) * 1000;
+				delta_time += (tmr->cur_time.tv_nsec - tmr->tempo_time.tv_nsec)/1000000;
+				tmr->cur_tick = tmr->tempo_tick + (tmr->ppq * delta_time * 1000 / tmr->tempo);
 			}
 		}
 	}


