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/
signature.asc
Description: Digital signature
_______________________________________________ Bug-hurd mailing list Bug-hurd@gnu.org http://lists.gnu.org/mailman/listinfo/bug-hurd