From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IsGxc-0007gx-RO for qemu-devel@nongnu.org; Wed, 14 Nov 2007 07:03:12 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IsGxa-0007gM-GG for qemu-devel@nongnu.org; Wed, 14 Nov 2007 07:03:11 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IsGxa-0007gJ-Bw for qemu-devel@nongnu.org; Wed, 14 Nov 2007 07:03:10 -0500 Received: from brick.kernel.dk ([87.55.233.238] helo=kernel.dk) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IsGxZ-0007QU-Nh for qemu-devel@nongnu.org; Wed, 14 Nov 2007 07:03:09 -0500 Received: from nelson.home.kernel.dk (nelson.home.kernel.dk [192.168.0.33]) by kernel.dk (Postfix) with ESMTP id 66D9425718E for ; Wed, 14 Nov 2007 13:03:03 +0100 (CET) Date: Wed, 14 Nov 2007 13:02:04 +0100 From: Jens Axboe Subject: Re: [Qemu-devel] cdrom disc type - is this patch correct? (unbreaks recent FreeBSD guest's -cdrom access) Message-ID: <20071114120203.GD5064@kernel.dk> References: <20071113212248.GA18957@saturn.kn-bremen.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20071113212248.GA18957@saturn.kn-bremen.de> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org On Tue, Nov 13 2007, Juergen Lock wrote: > Hi! > > Yesterday I learned that FreeBSD 7.0-BETA2 guests will no longer > read from the emulated cd drive, apparently because of this commit: > http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/ata/atapi-cd.c.diff?r1=1.193;r2=1.193.2.1 > The following patch file added to the qemu-devel port fixes the issue > for me, is it also correct? (making the guest see a dvd in the drive > when it is inserted, previously it saw the drive as empty.) > > The second hunk is already in qemu cvs so remove it if you want to > test on that. ISO used for testing: > ftp://ftp.freebsd.org:/pub/FreeBSD/ISO-IMAGES-i386/7.0/7.0-BETA2-i386-disc1.iso > (test by either selecting fixit->cdrom or by trying to install, just > booting it will always work because that goes thru the bios.) > > Index: qemu/hw/ide.c > @@ -1339,6 +1341,8 @@ > case 0x2a: > cpu_to_ube16(&buf[0], 28 + 6); > buf[2] = 0x70; > + if (bdrv_is_inserted(s->bs)) > + buf[2] = 0x40; medium type code has been obsoleted since at least 1999. Looking back at even older docs, 0x70 is 'door closed, no disc present'. 0x40 is a reserved value though, I would not suggest using that. Given that freebsd breaks, my suggest change would be the below - keep the 0x70 for when no disc is really inserted, but don't set anything if there is. diff --git a/hw/ide.c b/hw/ide.c index 5f76c27..52d4c78 100644 --- a/hw/ide.c +++ b/hw/ide.c @@ -1344,7 +1344,10 @@ static void ide_atapi_cmd(IDEState *s) break; case 0x2a: cpu_to_ube16(&buf[0], 28 + 6); - buf[2] = 0x70; + if (!bdrv_is_inserted(s->bs)) + buf[2] = 0x70; + else + buf[2] = 0; buf[3] = 0; buf[4] = 0; buf[5] = 0; -- Jens Axboe