From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58562) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VonuO-0000H9-5k for qemu-devel@nongnu.org; Fri, 06 Dec 2013 00:25:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VonuN-00047l-8d for qemu-devel@nongnu.org; Fri, 06 Dec 2013 00:25:00 -0500 Received: from mail-ee0-x22c.google.com ([2a00:1450:4013:c00::22c]:33012) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VonuN-00047d-2E for qemu-devel@nongnu.org; Fri, 06 Dec 2013 00:24:59 -0500 Received: by mail-ee0-f44.google.com with SMTP id b57so64932eek.3 for ; Thu, 05 Dec 2013 21:24:58 -0800 (PST) MIME-Version: 1.0 In-Reply-To: <1385031990.26155.14.camel@nilsson.home.kraxel.org> References: <1384926761-9962-1-git-send-email-airlied@gmail.com> <1384926761-9962-8-git-send-email-airlied@gmail.com> <1384948961.2005.99.camel@nilsson.home.kraxel.org> <1385031990.26155.14.camel@nilsson.home.kraxel.org> Date: Fri, 6 Dec 2013 15:24:57 +1000 Message-ID: From: Dave Airlie Content-Type: text/plain; charset=ISO-8859-1 Subject: Re: [Qemu-devel] [PATCH 7/8] virtio-vga: v1 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann Cc: "qemu-devel@nongnu.org" On Thu, Nov 21, 2013 at 9:06 PM, Gerd Hoffmann wrote: > On Do, 2013-11-21 at 13:12 +1000, Dave Airlie wrote: >> On Wed, Nov 20, 2013 at 10:02 PM, Gerd Hoffmann wrote: >> > On Mi, 2013-11-20 at 15:52 +1000, Dave Airlie wrote: >> >> From: Dave Airlie >> >> >> >> This is a virtio-vga device built on top of the virtio-gpu device. >> > >> > Ah, I see what you use the wrapping for. Hmm. I think you should use a >> > common base class instead, i.e. something like virtio-gpu-base which >> > holds all the common stuff. Both virtio-gpu and virtio-vga can use that >> > as TypeInfo->parent then. This way virtio-vga doesn't have to muck with >> > virtio-gpu internals. virtio-gpu-base can be tagged as abstract class >> > (using .abstract = true) so it will not be instantiated directly. >> > >> >> I'm not sure what that buys me here, I need the virtio-vga to attach >> the vga ops the first console that the virtio-gpu registers, it can't >> be a separate console, and since virtio-gpu initialises before >> virtio-vga I can't tell it to not register the console. > > virtio-gpu-core registers no consoles. It just export the hw_ops > functions. virtio-gpu-core inly initializes the stuff which is > identical for both virtio-gpu and virtio-vga, everything else is left to > the init functions of the subclasses. > > virtio-gpu uses virtio-gpu-core as parent. Registers the the consoles, > using the hw_ops functions exported by virtio-gpu-core. Also sets the > pci class to DISPLAY_OTHER. > > virtio-vga uses virtio-gpu-core as parent too. Registers the consoles, > using functions basically doing "if vgamode then call vga hw_ops else > call virtio-gpu-core hw_ops". Simliar to what you have today but > without the funky wrapping. Sets pci class to DISPLAY_VGA and > initializes vga stuff. > > cheers, > Gerd Okay I'm really missing something here and I think I've confused myself completely. My plan was virtio-gpu-base - VirtIOGPUBase object - VirtIODevice parent_obj - abstract class - contains vqs + exposes ops virtio-gpu - virtio-gpu-base wrapper with init sequence for non-VGA virtio gpus (mmio + pci) virtio-gpu-pci - VirtIOPCIProxy parent_obj - contains a VirtIOGPU vdev that it instantiates in its instance init like all the PCI wrappers Now the advice given was to have virtio-vga wrap virtio-gpu-base but from what I can see it really can't. Since it needs to act and look like a PCI device virtio-vga: Also has a VirtIOPCIProxy parent_obj, however as virtio-gpu-base is abstract I can't directly instantiate it, and I can't instantiate virtio-gpu as its the wrong thing, so do I really need to add another class? rename virtio-vga to virtio-pci-vga and add a new virtio-vga that just wraps virtio-gpu-base? This is getting a lot messier than the code I had, and the benefits are escaping me, which must mean I'm misinterpreting the instructions given. This then led to another question how do I call the virtio-gpu-base init functions? directly? as I can't use qdev as they are abstract from what I can see. Dave.