From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:53577) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RzpHT-000599-IX for qemu-devel@nongnu.org; Tue, 21 Feb 2012 07:57:25 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RzpHN-0008Kj-Jp for qemu-devel@nongnu.org; Tue, 21 Feb 2012 07:57:19 -0500 Received: from mx1.redhat.com ([209.132.183.28]:17198) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RzpHN-0008KS-8o for qemu-devel@nongnu.org; Tue, 21 Feb 2012 07:57:13 -0500 Message-ID: <4F4394A1.5060502@redhat.com> Date: Tue, 21 Feb 2012 13:57:05 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <73865e0ce364c40e0eb65ec6b22b819d@mail.gmail.com> <4F31153E.9010205@codemonkey.ws> <4F311839.9030709@redhat.com> <4F311BBA.8000708@codemonkey.ws> <4F312FD3.5020206@zerto.com> <4F3137DB.1040503@redhat.com> <4F3139CE.4040103@zerto.com> <4F314798.8010009@redhat.com> <4F3211D0.3070502@zerto.com> <4F323875.1000000@redhat.com> <4F3244C2.1040604@zerto.com> <4F32489A.80307@redhat.com> <4F32788C.60904@zerto.com> <4F40FBD6.2000500@zerto.com> <4F425987.20103@redhat.com> <4F435DD2.8080600@redhat.com> <4F4360C7.5080806@redhat.com> <4F4368BF.4040707@redhat.com> <4F436D76.6090206@redhat.com> <4F43773B.6060109@redhat.com> <4F4381CE.70604@redhat.com> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] BlockDriverState stack and BlockListeners List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: Kevin Wolf , =?UTF-8?B?16rXldee16gg15HXnyDXkNeV16g=?= , =?UTF-8?B?16LXldeT15Mg16fXk9ed?= , Jeff Cody , dlaor@redhat.com, qemu-devel@nongnu.org, Markus Armbruster , Zhi Yong Wu , Federico Simoncelli , Ori Mamluk , Yair Kuszpet On 02/21/2012 01:22 PM, Stefan Hajnoczi wrote: > This is a good discussion because BlockDriverState has become bloated > and complex. A lot of fields only apply to sub-cases and we should > really split this struct. > > Fields like "backing_file" *should* be in generic code, not duplicated > in each Format. But BlockDriverState is too generic since it also > encompasses Protocols and Listeners. Yes. > You mentioned that some of these classes would be "internal". I think > everything should be exposed in the QOM just like Linux exposes kernel > objects in sysfs. It makes troubleshooting and debugging easier. Yes, exposing in QOM makes sense. But QOM can see all things internal by design. :) The question is more what to expose to the rest of QEMU. For me the answer would be: BlockSource to the device and monitor, Format to the monitor only. > As has been pointed out, "Listener" suggests a passive role. Perhaps > BlockFilter, BlockProcessor, or BlockModule is a better name. BlockFilter sounds good. > Ideally Formats can be isolated from the rest of the block layer so > that it becomes easy to create a libimageformat. If we bake > coroutines, I/O APIs, and memory allocation functions too deeply into > Formats then they are hard to test and impossible to use outside of > QEMU. I'm afraid that the only way to do this is to first replace coroutines with threads. Paolo