Hello,

I'm currently working on integrating one driver into GNU Mach. I think
it's almost done but I have troubles with low level stuff I'm not
familiar with. device_open() and device_close() work correctly (I
can devprobe dsp0 as many times I want without any crash), but
device_write() gives no sound and crashes the kernel. The crash can
always be reproduced, but there are two cases :

First case, small amount of data to write: the crash is in drain_dac(),
which is called by ess_release(), which is called by device_deallocate(),
when the ref count reaches 0 (both device_write() and device_close()
return).

Second case: small amount of data to write; the crash is within ess_write()
(the test driver is a slightly modified maestro3).

The function ess_write() calls copy_from_user(), so I didn't map anything
in kernel space and gave the buffer address as it is in the task user space
directly to ess_write(), but I'm not sure this is right. I don't see many
other alternatives that would leave the driver unmodified though.

Source code is available at my CVS repository [1], in the linux/sound
directory (linux/sound/glue/sound.c is the main glue code source file).

Thanks for any help.

-- 
Richard Braun

[1] http://cvs.sceen.net/index.cgi/gnumach/

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Bug-hurd mailing list
Bug-hurd@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-hurd

Reply via email to