From owner-freebsd-hackers Wed Aug 9 7:19:24 2000 Delivered-To: freebsd-hackers@freebsd.org Received: from studict.student.utwente.nl (studict.student.utwente.nl [130.89.220.2]) by hub.freebsd.org (Postfix) with ESMTP id BC6E437BB21 for ; Wed, 9 Aug 2000 07:19:11 -0700 (PDT) (envelope-from t.vanklaveren@student.utwente.nl) Received: from phoenix (cal30b054.student.utwente.nl [130.89.229.25]) by studict.student.utwente.nl (8.8.6/MQT) with SMTP id QAA15173 for ; Wed, 9 Aug 2000 16:19:07 +0200 (METDST) Message-ID: <001e01c0020c$d257b3c0$19e55982@student.utwente.nl> From: "Theo van Klaveren" To: Subject: In-kernel ioctl calls Date: Wed, 9 Aug 2000 16:19:25 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.00.2919.6600 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600 Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG 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? Theo van Klaveren To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message