Date: Wed, 9 Aug 2000 17:51:02 +0200 (CEST) From: Soren Schmidt <sos@freebsd.dk> To: t.vanklaveren@student.utwente.nl (Theo van Klaveren) Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: In-kernel ioctl calls Message-ID: <200008091551.RAA77500@freebsd.dk> In-Reply-To: <001e01c0020c$d257b3c0$19e55982@student.utwente.nl> from Theo van Klaveren at "Aug 9, 2000 04:19:25 pm"
next in thread | previous in thread | raw e-mail | index | archive | help
It seems Theo van Klaveren wrote: > > I think I've finally figured out why AudioFS isn't working (aside from an > endianess error in v0.1), but I can't think of a solution. The problem I've > found is as follows: The code in atapi-cd.c (from Soren's ATA driver) > assumes the passed buffer (in the ioctl struct) is in user-space. The > following is the offending piece of code from the CDIOCREADAUDIO ioctl call: > > --- snip --- > if ((error = atapi_queue_cmd(cdp->atp, ccb, buffer, size, > ATPR_F_READ, 30, NULL,NULL))) > break; > > if ((error = copyout(buffer, ubuf, size))) > break; > --- snip --- > > The first statement issues the read command to the device, I presume. It > copies the data to an internal (kernel-space) buffer. Next, the internal > buffer is copyout()ed to ubuf (which is my ioctl buffer), which fails > because in the case of AudioFS it's in kernel space. > > Boing, break, abort, no data for you. Bad boy. > > This, of course, caused the buffer's data not to be initialized, causing > noise and crackles. And AudioFS didn't know the ioctl call failed, because > the driver didn't return an error. > > Am I just doing it wrong, or should atapi-cd.c be patched to verify if the > buffer is in user space or in kernel space? If so, what function checks if > an address is in kernel space or in user space? If not, what am I doing > wrong? Here's another idea, the ata driver can read/write 2352 sector size blocks directly, no need to use that ugly ioctl. You just have to set the right blocksize, I could provide you with a function for that, no more ioctl mess ;) -Søren To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200008091551.RAA77500>