From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934207AbeBLLpo (ORCPT ); Mon, 12 Feb 2018 06:45:44 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:43652 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934059AbeBLLpm (ORCPT ); Mon, 12 Feb 2018 06:45:42 -0500 Date: Mon, 12 Feb 2018 12:45:40 +0100 From: Gerd Hoffmann To: Tomeu Vizoso Cc: linux-kernel@vger.kernel.org, Zach Reizner , kernel@collabora.com, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, "Michael S. Tsirkin" , David Airlie , Jason Wang , Stefan Hajnoczi Subject: Re: [PATCH v3 1/2] drm/virtio: Add window server support Message-ID: <20180212114540.iygbha554busy4ip@sirius.home.kraxel.org> References: <20180126135803.29781-1-tomeu.vizoso@collabora.com> <20180126135803.29781-2-tomeu.vizoso@collabora.com> <20180201163623.5cs2ysykg5wgulf4@sirius.home.kraxel.org> <49785e0d-936a-c3b4-62dd-aafc7083a942@collabora.com> <20180205122017.4vb5nlpodkq2uhxa@sirius.home.kraxel.org> <20180205160322.sntv5uoqp5o7flnh@sirius.home.kraxel.org> <20180206142302.vdjyqmnoypydci4t@sirius.home.kraxel.org> <04687943-847b-25a7-42ef-a21b4c7ef0cf@collabora.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <04687943-847b-25a7-42ef-a21b4c7ef0cf@collabora.com> User-Agent: NeoMutt/20171215 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, > > (a) software rendering: client allocates shared memory buffer, renders > > into it, then passes a file handle for that shmem block together > > with some meta data (size, format, ...) to the wayland server. > > > > (b) gpu rendering: client opens a render node, allocates a buffer, > > asks the cpu to renders into it, exports the buffer as dma-buf > > (DRM_IOCTL_PRIME_HANDLE_TO_FD), passes this to the wayland server > > (again including meta data of course). > > > > Is that correct? > > Both are correct descriptions of typical behaviors. But it isn't spec'ed > anywhere who has to do the buffer allocation. Well, according to Pekka's reply it is spec'ed that way, for the existing buffer types. So for server allocated buffers you need (a) a wayland protocol extension and (b) support for the extension in the clients. > That's to say that if we cannot come up with a zero-copy solution for > unmodified clients, we should at least support zero-copy for cooperative > clients. "cooperative clients" == "client which has support for the wayland protocol extension", correct? > > > Creation of shareable buffer by guest > > > ------------------------------------------------- > > > > > > 1. Client requests virtio driver to create a buffer suitable for sharing > > > with host (DRM_VIRTGPU_RESOURCE_CREATE) > > > > client or guest proxy? > > As per the above, the GUI toolkit could have been modified so the client > directly creates a shareable buffer, and renders directly to it without any > extra copies. > > If clients cannot be modified, then it's the guest proxy what has to create > the shareable buffer and keep it in sync with the client's non-shareable > buffer at the right times, by intercepting wl_surface.commit messages and > copying buffer contents. Ok. > > > 4. QEMU maps that buffer to the guest's address space > > > (KVM_SET_USER_MEMORY_REGION), passes the guest PFN to the virtio driver > > > > That part is problematic. The host can't simply allocate something in > > the physical address space, because most physical address space > > management is done by the guest. All pci bars are mapped by the guest > > firmware for example (or by the guest OS in case of hotplug). > > How can KVM_SET_USER_MEMORY_REGION ever be safely used then? I would have > expected that callers of that ioctl have enough knowledge to be able to > choose a physical address that won't conflict with the guest's kernel. Depends on the kind of region. Guest RAM is allocated and mapped by qemu, guest firmware can query qemu about RAM mappings using a special interface, then create a e820 memory map for the guest os. PCI device bars are mapped according to the pci config space registers, which in turn are initialized by the guest firmware, so it is basically in the guests hand where they show up. > I see that the ivshmem device in QEMU registers the memory region in BAR 2 > of a PCI device instead. Would that be better in your opinion? Yes. > > > 4. QEMU pops data+buffers from the virtqueue, looks up shmem FD for each > > > resource, sends data + FDs to the compositor with SCM_RIGHTS > > > > BTW: Is there a 1:1 relationship between buffers and shmem blocks? Or > > does the wayland protocol allow for offsets in buffer meta data, so you > > can place multiple buffers in a single shmem block? > > The latter: > https://wayland.freedesktop.org/docs/html/apa.html#protocol-spec-wl_shm_pool Ah, good, that makes it alot easier. So, yes, using ivshmem would be one option. Tricky part here is the buffer management though. It's just a raw piece of memory. The guest proxy could mmap the pci bar and manage it. But then it is again either unmodified guest + copying the data, or modified client (which requests buffers from guest proxy) for zero-copy. Another idea would be extending stdvga. Basically qemu would have to use shmem as backing storage for vga memory instead of anonymous memory, so it would be very simliar to ivshmem on the host side. But on the guest side we have a drm driver for it (bochs-drm). So clients can allocate dumb drm buffers for software rendering, and the buffer would already be backed by a host shmem segment. Given that wayland already supports drm buffers for 3d rendering that could work without extending the wayland protocol. The client proxy would have to translate the drm buffer into an pci bar offset and pass it to the host side. The host proxy could register the pci bar as wl_shm_pool, then just pass through the offset to reference the individual buffers. Drawback of both approaches would be that software rendering and gpu rendering would use quite different code paths. We also need a solution for the keymap shmem block. I guess the keymap doesn't change all that often, so maybe it is easiest to just copy it over (host proxy -> guest proxy) instead of trying to map the host shmem into the guest? cheers, Gerd From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gerd Hoffmann Subject: Re: [PATCH v3 1/2] drm/virtio: Add window server support Date: Mon, 12 Feb 2018 12:45:40 +0100 Message-ID: <20180212114540.iygbha554busy4ip@sirius.home.kraxel.org> References: <20180126135803.29781-1-tomeu.vizoso@collabora.com> <20180126135803.29781-2-tomeu.vizoso@collabora.com> <20180201163623.5cs2ysykg5wgulf4@sirius.home.kraxel.org> <49785e0d-936a-c3b4-62dd-aafc7083a942@collabora.com> <20180205122017.4vb5nlpodkq2uhxa@sirius.home.kraxel.org> <20180205160322.sntv5uoqp5o7flnh@sirius.home.kraxel.org> <20180206142302.vdjyqmnoypydci4t@sirius.home.kraxel.org> <04687943-847b-25a7-42ef-a21b4c7ef0cf@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3ACEF89B78 for ; Mon, 12 Feb 2018 11:45:43 +0000 (UTC) Content-Disposition: inline In-Reply-To: <04687943-847b-25a7-42ef-a21b4c7ef0cf@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Tomeu Vizoso Cc: "Michael S. Tsirkin" , David Airlie , Stefan Hajnoczi , Jason Wang , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, kernel@collabora.com List-Id: dri-devel@lists.freedesktop.org ICBIaSwKCj4gPiAgICAoYSkgc29mdHdhcmUgcmVuZGVyaW5nOiBjbGllbnQgYWxsb2NhdGVzIHNo YXJlZCBtZW1vcnkgYnVmZmVyLCByZW5kZXJzCj4gPiAgICAgICAgaW50byBpdCwgdGhlbiBwYXNz ZXMgYSBmaWxlIGhhbmRsZSBmb3IgdGhhdCBzaG1lbSBibG9jayB0b2dldGhlcgo+ID4gICAgICAg IHdpdGggc29tZSBtZXRhIGRhdGEgKHNpemUsIGZvcm1hdCwgLi4uKSB0byB0aGUgd2F5bGFuZCBz ZXJ2ZXIuCj4gPiAKPiA+ICAgIChiKSBncHUgcmVuZGVyaW5nOiBjbGllbnQgb3BlbnMgYSByZW5k ZXIgbm9kZSwgYWxsb2NhdGVzIGEgYnVmZmVyLAo+ID4gICAgICAgIGFza3MgdGhlIGNwdSB0byBy ZW5kZXJzIGludG8gaXQsIGV4cG9ydHMgdGhlIGJ1ZmZlciBhcyBkbWEtYnVmCj4gPiAgICAgICAg KERSTV9JT0NUTF9QUklNRV9IQU5ETEVfVE9fRkQpLCBwYXNzZXMgdGhpcyB0byB0aGUgd2F5bGFu ZCBzZXJ2ZXIKPiA+ICAgICAgICAoYWdhaW4gaW5jbHVkaW5nIG1ldGEgZGF0YSBvZiBjb3Vyc2Up Lgo+ID4gCj4gPiBJcyB0aGF0IGNvcnJlY3Q/Cj4gCj4gQm90aCBhcmUgY29ycmVjdCBkZXNjcmlw dGlvbnMgb2YgdHlwaWNhbCBiZWhhdmlvcnMuIEJ1dCBpdCBpc24ndCBzcGVjJ2VkCj4gYW55d2hl cmUgd2hvIGhhcyB0byBkbyB0aGUgYnVmZmVyIGFsbG9jYXRpb24uCgpXZWxsLCBhY2NvcmRpbmcg dG8gUGVra2EncyByZXBseSBpdCBpcyBzcGVjJ2VkIHRoYXQgd2F5LCBmb3IgdGhlCmV4aXN0aW5n IGJ1ZmZlciB0eXBlcy4gIFNvIGZvciBzZXJ2ZXIgYWxsb2NhdGVkIGJ1ZmZlcnMgeW91IG5lZWQK KGEpIGEgd2F5bGFuZCBwcm90b2NvbCBleHRlbnNpb24gYW5kIChiKSBzdXBwb3J0IGZvciB0aGUg ZXh0ZW5zaW9uCmluIHRoZSBjbGllbnRzLgoKPiBUaGF0J3MgdG8gc2F5IHRoYXQgaWYgd2UgY2Fu bm90IGNvbWUgdXAgd2l0aCBhIHplcm8tY29weSBzb2x1dGlvbiBmb3IKPiB1bm1vZGlmaWVkIGNs aWVudHMsIHdlIHNob3VsZCBhdCBsZWFzdCBzdXBwb3J0IHplcm8tY29weSBmb3IgY29vcGVyYXRp dmUKPiBjbGllbnRzLgoKImNvb3BlcmF0aXZlIGNsaWVudHMiID09ICJjbGllbnQgd2hpY2ggaGFz IHN1cHBvcnQgZm9yIHRoZSB3YXlsYW5kCnByb3RvY29sIGV4dGVuc2lvbiIsIGNvcnJlY3Q/Cgo+ ID4gPiBDcmVhdGlvbiBvZiBzaGFyZWFibGUgYnVmZmVyIGJ5IGd1ZXN0Cj4gPiA+IC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ID4gCj4gPiA+IDEu IENsaWVudCByZXF1ZXN0cyB2aXJ0aW8gZHJpdmVyIHRvIGNyZWF0ZSBhIGJ1ZmZlciBzdWl0YWJs ZSBmb3Igc2hhcmluZwo+ID4gPiB3aXRoIGhvc3QgKERSTV9WSVJUR1BVX1JFU09VUkNFX0NSRUFU RSkKPiA+IAo+ID4gY2xpZW50IG9yIGd1ZXN0IHByb3h5Pwo+IAo+IEFzIHBlciB0aGUgYWJvdmUs IHRoZSBHVUkgdG9vbGtpdCBjb3VsZCBoYXZlIGJlZW4gbW9kaWZpZWQgc28gdGhlIGNsaWVudAo+ IGRpcmVjdGx5IGNyZWF0ZXMgYSBzaGFyZWFibGUgYnVmZmVyLCBhbmQgcmVuZGVycyBkaXJlY3Rs eSB0byBpdCB3aXRob3V0IGFueQo+IGV4dHJhIGNvcGllcy4KPiAKPiBJZiBjbGllbnRzIGNhbm5v dCBiZSBtb2RpZmllZCwgdGhlbiBpdCdzIHRoZSBndWVzdCBwcm94eSB3aGF0IGhhcyB0byBjcmVh dGUKPiB0aGUgc2hhcmVhYmxlIGJ1ZmZlciBhbmQga2VlcCBpdCBpbiBzeW5jIHdpdGggdGhlIGNs aWVudCdzIG5vbi1zaGFyZWFibGUKPiBidWZmZXIgYXQgdGhlIHJpZ2h0IHRpbWVzLCBieSBpbnRl cmNlcHRpbmcgd2xfc3VyZmFjZS5jb21taXQgbWVzc2FnZXMgYW5kCj4gY29weWluZyBidWZmZXIg Y29udGVudHMuCgpPay4KCj4gPiA+IDQuIFFFTVUgbWFwcyB0aGF0IGJ1ZmZlciB0byB0aGUgZ3Vl c3QncyBhZGRyZXNzIHNwYWNlCj4gPiA+IChLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiksIHBh c3NlcyB0aGUgZ3Vlc3QgUEZOIHRvIHRoZSB2aXJ0aW8gZHJpdmVyCj4gPiAKPiA+IFRoYXQgcGFy dCBpcyBwcm9ibGVtYXRpYy4gIFRoZSBob3N0IGNhbid0IHNpbXBseSBhbGxvY2F0ZSBzb21ldGhp bmcgaW4KPiA+IHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLCBiZWNhdXNlIG1vc3QgcGh5c2lj YWwgYWRkcmVzcyBzcGFjZQo+ID4gbWFuYWdlbWVudCBpcyBkb25lIGJ5IHRoZSBndWVzdC4gIEFs bCBwY2kgYmFycyBhcmUgbWFwcGVkIGJ5IHRoZSBndWVzdAo+ID4gZmlybXdhcmUgZm9yIGV4YW1w bGUgKG9yIGJ5IHRoZSBndWVzdCBPUyBpbiBjYXNlIG9mIGhvdHBsdWcpLgo+IAo+IEhvdyBjYW4g S1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04gZXZlciBiZSBzYWZlbHkgdXNlZCB0aGVuPyBJIHdv dWxkIGhhdmUKPiBleHBlY3RlZCB0aGF0IGNhbGxlcnMgb2YgdGhhdCBpb2N0bCBoYXZlIGVub3Vn aCBrbm93bGVkZ2UgdG8gYmUgYWJsZSB0bwo+IGNob29zZSBhIHBoeXNpY2FsIGFkZHJlc3MgdGhh dCB3b24ndCBjb25mbGljdCB3aXRoIHRoZSBndWVzdCdzIGtlcm5lbC4KCkRlcGVuZHMgb24gdGhl IGtpbmQgb2YgcmVnaW9uLiAgR3Vlc3QgUkFNIGlzIGFsbG9jYXRlZCBhbmQgbWFwcGVkIGJ5CnFl bXUsIGd1ZXN0IGZpcm13YXJlIGNhbiBxdWVyeSBxZW11IGFib3V0IFJBTSBtYXBwaW5ncyB1c2lu ZyBhIHNwZWNpYWwKaW50ZXJmYWNlLCB0aGVuIGNyZWF0ZSBhIGU4MjAgbWVtb3J5IG1hcCBmb3Ig dGhlIGd1ZXN0IG9zLiAgUENJIGRldmljZQpiYXJzIGFyZSBtYXBwZWQgYWNjb3JkaW5nIHRvIHRo ZSBwY2kgY29uZmlnIHNwYWNlIHJlZ2lzdGVycywgd2hpY2ggaW4KdHVybiBhcmUgaW5pdGlhbGl6 ZWQgYnkgdGhlIGd1ZXN0IGZpcm13YXJlLCBzbyBpdCBpcyBiYXNpY2FsbHkgaW4gdGhlCmd1ZXN0 cyBoYW5kIHdoZXJlIHRoZXkgc2hvdyB1cC4KCj4gSSBzZWUgdGhhdCB0aGUgaXZzaG1lbSBkZXZp Y2UgaW4gUUVNVSByZWdpc3RlcnMgdGhlIG1lbW9yeSByZWdpb24gaW4gQkFSIDIKPiBvZiBhIFBD SSBkZXZpY2UgaW5zdGVhZC4gV291bGQgdGhhdCBiZSBiZXR0ZXIgaW4geW91ciBvcGluaW9uPwoK WWVzLgoKPiA+ID4gNC4gUUVNVSBwb3BzIGRhdGErYnVmZmVycyBmcm9tIHRoZSB2aXJ0cXVldWUs IGxvb2tzIHVwIHNobWVtIEZEIGZvciBlYWNoCj4gPiA+IHJlc291cmNlLCBzZW5kcyBkYXRhICsg RkRzIHRvIHRoZSBjb21wb3NpdG9yIHdpdGggU0NNX1JJR0hUUwo+ID4gCj4gPiBCVFc6IElzIHRo ZXJlIGEgMToxIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGJ1ZmZlcnMgYW5kIHNobWVtIGJsb2Nrcz8g IE9yCj4gPiBkb2VzIHRoZSB3YXlsYW5kIHByb3RvY29sIGFsbG93IGZvciBvZmZzZXRzIGluIGJ1 ZmZlciBtZXRhIGRhdGEsIHNvIHlvdQo+ID4gY2FuIHBsYWNlIG11bHRpcGxlIGJ1ZmZlcnMgaW4g YSBzaW5nbGUgc2htZW0gYmxvY2s/Cj4gCj4gVGhlIGxhdHRlcjoKPiBodHRwczovL3dheWxhbmQu ZnJlZWRlc2t0b3Aub3JnL2RvY3MvaHRtbC9hcGEuaHRtbCNwcm90b2NvbC1zcGVjLXdsX3NobV9w b29sCgpBaCwgZ29vZCwgdGhhdCBtYWtlcyBpdCBhbG90IGVhc2llci4KClNvLCB5ZXMsIHVzaW5n IGl2c2htZW0gd291bGQgYmUgb25lIG9wdGlvbi4gIFRyaWNreSBwYXJ0IGhlcmUgaXMgdGhlCmJ1 ZmZlciBtYW5hZ2VtZW50IHRob3VnaC4gIEl0J3MganVzdCBhIHJhdyBwaWVjZSBvZiBtZW1vcnku ICBUaGUgZ3Vlc3QKcHJveHkgY291bGQgbW1hcCB0aGUgcGNpIGJhciBhbmQgbWFuYWdlIGl0LiAg QnV0IHRoZW4gaXQgaXMgYWdhaW4gZWl0aGVyCnVubW9kaWZpZWQgZ3Vlc3QgKyBjb3B5aW5nIHRo ZSBkYXRhLCBvciBtb2RpZmllZCBjbGllbnQgKHdoaWNoIHJlcXVlc3RzCmJ1ZmZlcnMgZnJvbSBn dWVzdCBwcm94eSkgZm9yIHplcm8tY29weS4KCkFub3RoZXIgaWRlYSB3b3VsZCBiZSBleHRlbmRp bmcgc3RkdmdhLiAgQmFzaWNhbGx5IHFlbXUgd291bGQgaGF2ZSB0bwp1c2Ugc2htZW0gYXMgYmFj a2luZyBzdG9yYWdlIGZvciB2Z2EgbWVtb3J5IGluc3RlYWQgb2YgYW5vbnltb3VzIG1lbW9yeSwK c28gaXQgd291bGQgYmUgdmVyeSAgc2ltbGlhciB0byBpdnNobWVtIG9uIHRoZSBob3N0IHNpZGUu ICBCdXQgb24gdGhlCmd1ZXN0IHNpZGUgd2UgaGF2ZSBhIGRybSBkcml2ZXIgZm9yIGl0IChib2No cy1kcm0pLiAgU28gY2xpZW50cyBjYW4KYWxsb2NhdGUgZHVtYiBkcm0gYnVmZmVycyBmb3Igc29m dHdhcmUgcmVuZGVyaW5nLCBhbmQgdGhlIGJ1ZmZlciB3b3VsZAphbHJlYWR5IGJlIGJhY2tlZCBi eSBhIGhvc3Qgc2htZW0gc2VnbWVudC4gIEdpdmVuIHRoYXQgd2F5bGFuZCBhbHJlYWR5CnN1cHBv cnRzIGRybSBidWZmZXJzIGZvciAzZCByZW5kZXJpbmcgdGhhdCBjb3VsZCB3b3JrIHdpdGhvdXQg ZXh0ZW5kaW5nCnRoZSB3YXlsYW5kIHByb3RvY29sLiAgVGhlIGNsaWVudCBwcm94eSB3b3VsZCBo YXZlIHRvIHRyYW5zbGF0ZSB0aGUgZHJtCmJ1ZmZlciBpbnRvIGFuIHBjaSBiYXIgb2Zmc2V0IGFu ZCBwYXNzIGl0IHRvIHRoZSBob3N0IHNpZGUuICBUaGUgaG9zdApwcm94eSBjb3VsZCByZWdpc3Rl ciB0aGUgcGNpIGJhciBhcyB3bF9zaG1fcG9vbCwgdGhlbiBqdXN0IHBhc3MgdGhyb3VnaAp0aGUg b2Zmc2V0IHRvIHJlZmVyZW5jZSB0aGUgaW5kaXZpZHVhbCBidWZmZXJzLgoKRHJhd2JhY2sgb2Yg Ym90aCBhcHByb2FjaGVzIHdvdWxkIGJlIHRoYXQgc29mdHdhcmUgcmVuZGVyaW5nIGFuZCBncHUK cmVuZGVyaW5nIHdvdWxkIHVzZSBxdWl0ZSBkaWZmZXJlbnQgY29kZSBwYXRocy4KCldlIGFsc28g bmVlZCBhIHNvbHV0aW9uIGZvciB0aGUga2V5bWFwIHNobWVtIGJsb2NrLiAgSSBndWVzcyB0aGUg a2V5bWFwCmRvZXNuJ3QgY2hhbmdlIGFsbCB0aGF0IG9mdGVuLCBzbyBtYXliZSBpdCBpcyBlYXNp ZXN0IHRvIGp1c3QgY29weSBpdApvdmVyIChob3N0IHByb3h5IC0+IGd1ZXN0IHByb3h5KSBpbnN0 ZWFkIG9mIHRyeWluZyB0byBtYXAgdGhlIGhvc3Qgc2htZW0KaW50byB0aGUgZ3Vlc3Q/CgpjaGVl cnMsCiAgR2VyZAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==