From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753084AbeBUJJz (ORCPT ); Wed, 21 Feb 2018 04:09:55 -0500 Received: from mx2.suse.de ([195.135.220.15]:52387 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753049AbeBUJJw (ORCPT ); Wed, 21 Feb 2018 04:09:52 -0500 Subject: Re: [PATCH 1/9] drm/xen-front: Introduce Xen para-virtualized frontend driver To: Oleksandr Andrushchenko , xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, airlied@linux.ie, daniel.vetter@intel.com, seanpaul@chromium.org, gustavo@padovan.org, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com Cc: Oleksandr Andrushchenko References: <1519200222-20623-1-git-send-email-andr2000@gmail.com> <1519200222-20623-2-git-send-email-andr2000@gmail.com> <91386840-c34a-31a4-2bb3-14a27ececa9c@gmail.com> From: Juergen Gross Message-ID: <4b20fcdd-2618-71a8-d94e-37c802973a02@suse.com> Date: Wed, 21 Feb 2018 10:09:49 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: <91386840-c34a-31a4-2bb3-14a27ececa9c@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: de-DE Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 21/02/18 09:47, Oleksandr Andrushchenko wrote: > On 02/21/2018 10:19 AM, Juergen Gross wrote: >> On 21/02/18 09:03, Oleksandr Andrushchenko wrote: >>> From: Oleksandr Andrushchenko >>> >>> Introduce skeleton of the para-virtualized Xen display >>> frontend driver. This patch only adds required >>> essential stubs. >>> >>> Signed-off-by: Oleksandr Andrushchenko >>> >>> --- >>>   drivers/gpu/drm/Kconfig             |  2 + >>>   drivers/gpu/drm/Makefile            |  1 + >>>   drivers/gpu/drm/xen/Kconfig         | 17 ++++++++ >>>   drivers/gpu/drm/xen/Makefile        |  5 +++ >>>   drivers/gpu/drm/xen/xen_drm_front.c | 83 >>> +++++++++++++++++++++++++++++++++++++ >>>   5 files changed, 108 insertions(+) >>>   create mode 100644 drivers/gpu/drm/xen/Kconfig >>>   create mode 100644 drivers/gpu/drm/xen/Makefile >>>   create mode 100644 drivers/gpu/drm/xen/xen_drm_front.c >>> >>> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig >>> index deeefa7a1773..757825ac60df 100644 >>> --- a/drivers/gpu/drm/Kconfig >>> +++ b/drivers/gpu/drm/Kconfig >>> @@ -289,6 +289,8 @@ source "drivers/gpu/drm/pl111/Kconfig" >>>     source "drivers/gpu/drm/tve200/Kconfig" >>>   +source "drivers/gpu/drm/xen/Kconfig" >>> + >>>   # Keep legacy drivers last >>>     menuconfig DRM_LEGACY >>> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile >>> index 50093ff4479b..9d66657ea117 100644 >>> --- a/drivers/gpu/drm/Makefile >>> +++ b/drivers/gpu/drm/Makefile >>> @@ -103,3 +103,4 @@ obj-$(CONFIG_DRM_MXSFB)    += mxsfb/ >>>   obj-$(CONFIG_DRM_TINYDRM) += tinydrm/ >>>   obj-$(CONFIG_DRM_PL111) += pl111/ >>>   obj-$(CONFIG_DRM_TVE200) += tve200/ >>> +obj-$(CONFIG_DRM_XEN) += xen/ >>> diff --git a/drivers/gpu/drm/xen/Kconfig b/drivers/gpu/drm/xen/Kconfig >>> new file mode 100644 >>> index 000000000000..4cca160782ab >>> --- /dev/null >>> +++ b/drivers/gpu/drm/xen/Kconfig >>> @@ -0,0 +1,17 @@ >>> +config DRM_XEN >>> +    bool "DRM Support for Xen guest OS" >>> +    depends on XEN >>> +    help >>> +      Choose this option if you want to enable DRM support >>> +      for Xen. >>> + >>> +config DRM_XEN_FRONTEND >>> +    tristate "Para-virtualized frontend driver for Xen guest OS" >>> +    depends on DRM_XEN >>> +    depends on DRM >>> +    select DRM_KMS_HELPER >>> +    select VIDEOMODE_HELPERS >>> +    select XEN_XENBUS_FRONTEND >>> +    help >>> +      Choose this option if you want to enable a para-virtualized >>> +      frontend DRM/KMS driver for Xen guest OSes. >>> diff --git a/drivers/gpu/drm/xen/Makefile b/drivers/gpu/drm/xen/Makefile >>> new file mode 100644 >>> index 000000000000..967074d348f6 >>> --- /dev/null >>> +++ b/drivers/gpu/drm/xen/Makefile >>> @@ -0,0 +1,5 @@ >>> +# SPDX-License-Identifier: GPL-2.0 >>> + >>> +drm_xen_front-objs := xen_drm_front.o >>> + >>> +obj-$(CONFIG_DRM_XEN_FRONTEND) += drm_xen_front.o >>> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c >>> b/drivers/gpu/drm/xen/xen_drm_front.c >>> new file mode 100644 >>> index 000000000000..fd372fb464a1 >>> --- /dev/null >>> +++ b/drivers/gpu/drm/xen/xen_drm_front.c >>> @@ -0,0 +1,83 @@ >>> +/* >>> + *  Xen para-virtual DRM device >>> + * >>> + *   This program is free software; you can redistribute it and/or >>> modify >>> + *   it under the terms of the GNU General Public License as >>> published by >>> + *   the Free Software Foundation; either version 2 of the License, or >>> + *   (at your option) any later version. >>> + * >>> + *   This program is distributed in the hope that it will be useful, >>> + *   but WITHOUT ANY WARRANTY; without even the implied warranty of >>> + *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the >>> + *   GNU General Public License for more details. >> Use SPDX identifier instead (same applies for all other new >> sources): >> >> // SPDX-License-Identifier: GPL-2.0 > Will update, thank you >>> + * >>> + * Copyright (C) 2016-2018 EPAM Systems Inc. >>> + * >>> + * Author: Oleksandr Andrushchenko >>> + */ >>> + >>> +#include >>> + >>> +#include >>> +#include >>> +#include >>> + >>> +#include >>> + >>> +static void backend_on_changed(struct xenbus_device *xb_dev, >>> +        enum xenbus_state backend_state) >>> +{ >>> +} >>> + >>> +static int xen_drv_probe(struct xenbus_device *xb_dev, >>> +        const struct xenbus_device_id *id) >>> +{ >>> +    return 0; >>> +} >>> + >>> +static int xen_drv_remove(struct xenbus_device *dev) >>> +{ >>> +    return 0; >>> +} >>> + >>> +static const struct xenbus_device_id xen_drv_ids[] = { >>> +    { XENDISPL_DRIVER_NAME }, >>> +    { "" } >>> +}; >>> + >>> +static struct xenbus_driver xen_driver = { >>> +    .ids = xen_drv_ids, >>> +    .probe = xen_drv_probe, >>> +    .remove = xen_drv_remove, >>> +    .otherend_changed = backend_on_changed, >>> +}; >>> + >>> +static int __init xen_drv_init(void) >>> +{ >>> +    if (!xen_domain()) >>> +        return -ENODEV; >>> + >>> +    if (xen_initial_domain()) { >>> +        DRM_ERROR(XENDISPL_DRIVER_NAME " cannot run in initial >>> domain\n"); >>> +        return -ENODEV; >>> +    } >> Why not? Wouldn't that be possible in case of the backend living in a >> driver domain? > It is possible (and in my use-case backend indeed runs in > a driver domain). I was just not sure if it is really a > good idea to allow that. If you think this is ok, then > I'll remove this check I don't think the driver should decide that. This would be the job of Xen tools IMO. Juergen From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: Re: [PATCH 1/9] drm/xen-front: Introduce Xen para-virtualized frontend driver Date: Wed, 21 Feb 2018 10:09:49 +0100 Message-ID: <4b20fcdd-2618-71a8-d94e-37c802973a02@suse.com> References: <1519200222-20623-1-git-send-email-andr2000@gmail.com> <1519200222-20623-2-git-send-email-andr2000@gmail.com> <91386840-c34a-31a4-2bb3-14a27ececa9c@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <91386840-c34a-31a4-2bb3-14a27ececa9c@gmail.com> Content-Language: de-DE List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Oleksandr Andrushchenko , xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, airlied@linux.ie, daniel.vetter@intel.com, seanpaul@chromium.org, gustavo@padovan.org, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com Cc: Oleksandr Andrushchenko List-Id: dri-devel@lists.freedesktop.org T24gMjEvMDIvMTggMDk6NDcsIE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIHdyb3RlOgo+IE9uIDAy LzIxLzIwMTggMTA6MTkgQU0sIEp1ZXJnZW4gR3Jvc3Mgd3JvdGU6Cj4+IE9uIDIxLzAyLzE4IDA5 OjAzLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyB3cm90ZToKPj4+IEZyb206IE9sZWtzYW5kciBB bmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPj4+Cj4+PiBJ bnRyb2R1Y2Ugc2tlbGV0b24gb2YgdGhlIHBhcmEtdmlydHVhbGl6ZWQgWGVuIGRpc3BsYXkKPj4+ IGZyb250ZW5kIGRyaXZlci4gVGhpcyBwYXRjaCBvbmx5IGFkZHMgcmVxdWlyZWQKPj4+IGVzc2Vu dGlhbCBzdHVicy4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5r bwo+Pj4gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+Pj4gLS0tCj4+PiDCoCBk cml2ZXJzL2dwdS9kcm0vS2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMiArCj4+ PiDCoCBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAx ICsKPj4+IMKgIGRyaXZlcnMvZ3B1L2RybS94ZW4vS2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqAgfCAx NyArKysrKysrKwo+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZcKgwqDCoMKgwqDC oMKgIHzCoCA1ICsrKwo+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmMg fCA4Mwo+Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4gwqAgNSBm aWxlcyBjaGFuZ2VkLCAxMDggaW5zZXJ0aW9ucygrKQo+Pj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS94ZW4vS2NvbmZpZwo+Pj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS94ZW4vTWFrZWZpbGUKPj4+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuYwo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4+PiBpbmRleCBk ZWVlZmE3YTE3NzMuLjc1NzgyNWFjNjBkZiAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+Pj4gQEAgLTI4OSw2 ICsyODksOCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9wbDExMS9LY29uZmlnIgo+Pj4gwqAg wqAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdHZlMjAwL0tjb25maWciCj4+PiDCoCArc291cmNl ICJkcml2ZXJzL2dwdS9kcm0veGVuL0tjb25maWciCj4+PiArCj4+PiDCoCAjIEtlZXAgbGVnYWN5 IGRyaXZlcnMgbGFzdAo+Pj4gwqAgwqAgbWVudWNvbmZpZyBEUk1fTEVHQUNZCj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl Cj4+PiBpbmRleCA1MDA5M2ZmNDQ3OWIuLjlkNjY2NTdlYTExNyAxMDA2NDQKPj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl Cj4+PiBAQCAtMTAzLDMgKzEwMyw0IEBAIG9iai0kKENPTkZJR19EUk1fTVhTRkIpwqDCoMKgICs9 IG14c2ZiLwo+Pj4gwqAgb2JqLSQoQ09ORklHX0RSTV9USU5ZRFJNKSArPSB0aW55ZHJtLwo+Pj4g wqAgb2JqLSQoQ09ORklHX0RSTV9QTDExMSkgKz0gcGwxMTEvCj4+PiDCoCBvYmotJChDT05GSUdf RFJNX1RWRTIwMCkgKz0gdHZlMjAwLwo+Pj4gK29iai0kKENPTkZJR19EUk1fWEVOKSArPSB4ZW4v Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi9LY29uZmlnIGIvZHJpdmVycy9n cHUvZHJtL3hlbi9LY29uZmlnCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAw MDAwMDAwMDAwLi40Y2NhMTYwNzgyYWIKPj4+IC0tLSAvZGV2L251bGwKPj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS94ZW4vS2NvbmZpZwo+Pj4gQEAgLTAsMCArMSwxNyBAQAo+Pj4gK2NvbmZpZyBE Uk1fWEVOCj4+PiArwqDCoMKgIGJvb2wgIkRSTSBTdXBwb3J0IGZvciBYZW4gZ3Vlc3QgT1MiCj4+ PiArwqDCoMKgIGRlcGVuZHMgb24gWEVOCj4+PiArwqDCoMKgIGhlbHAKPj4+ICvCoMKgwqDCoMKg IENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBlbmFibGUgRFJNIHN1cHBvcnQKPj4+ ICvCoMKgwqDCoMKgIGZvciBYZW4uCj4+PiArCj4+PiArY29uZmlnIERSTV9YRU5fRlJPTlRFTkQK Pj4+ICvCoMKgwqAgdHJpc3RhdGUgIlBhcmEtdmlydHVhbGl6ZWQgZnJvbnRlbmQgZHJpdmVyIGZv ciBYZW4gZ3Vlc3QgT1MiCj4+PiArwqDCoMKgIGRlcGVuZHMgb24gRFJNX1hFTgo+Pj4gK8KgwqDC oCBkZXBlbmRzIG9uIERSTQo+Pj4gK8KgwqDCoCBzZWxlY3QgRFJNX0tNU19IRUxQRVIKPj4+ICvC oMKgwqAgc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCj4+PiArwqDCoMKgIHNlbGVjdCBYRU5fWEVO QlVTX0ZST05URU5ECj4+PiArwqDCoMKgIGhlbHAKPj4+ICvCoMKgwqDCoMKgIENob29zZSB0aGlz IG9wdGlvbiBpZiB5b3Ugd2FudCB0byBlbmFibGUgYSBwYXJhLXZpcnR1YWxpemVkCj4+PiArwqDC oMKgwqDCoCBmcm9udGVuZCBEUk0vS01TIGRyaXZlciBmb3IgWGVuIGd1ZXN0IE9TZXMuCj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS94ZW4vTWFrZWZpbGUKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAw MDAwMDAuLjk2NzA3NGQzNDhmNgo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3hlbi9NYWtlZmlsZQo+Pj4gQEAgLTAsMCArMSw1IEBACj4+PiArIyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMAo+Pj4gKwo+Pj4gK2RybV94ZW5fZnJvbnQtb2JqcyA6PSB4 ZW5fZHJtX2Zyb250Lm8KPj4+ICsKPj4+ICtvYmotJChDT05GSUdfRFJNX1hFTl9GUk9OVEVORCkg Kz0gZHJtX3hlbl9mcm9udC5vCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94 ZW5fZHJtX2Zyb250LmMKPj4+IGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmMK Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmZkMzcyZmI0 NjRhMQo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5f ZHJtX2Zyb250LmMKPj4+IEBAIC0wLDAgKzEsODMgQEAKPj4+ICsvKgo+Pj4gKyAqwqAgWGVuIHBh cmEtdmlydHVhbCBEUk0gZGV2aWNlCj4+PiArICoKPj4+ICsgKsKgwqAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+Pj4gbW9kaWZ5 Cj4+PiArICrCoMKgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMKPj4+IHB1Ymxpc2hlZCBieQo+Pj4gKyAqwqDCoCB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+Pj4gKyAq wqDCoCAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+Pj4gKyAqCj4+PiArICrC oMKgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAo+Pj4gKyAqwqDCoCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+Pj4gKyAqwqDCoCBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZQo+Pj4gKyAqwqDC oCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiBVc2UgU1BE WCBpZGVudGlmaWVyIGluc3RlYWQgKHNhbWUgYXBwbGllcyBmb3IgYWxsIG90aGVyIG5ldwo+PiBz b3VyY2VzKToKPj4KPj4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiBXaWxs IHVwZGF0ZSwgdGhhbmsgeW91Cj4+PiArICoKPj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx OCBFUEFNIFN5c3RlbXMgSW5jLgo+Pj4gKyAqCj4+PiArICogQXV0aG9yOiBPbGVrc2FuZHIgQW5k cnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4+PiArICovCj4+ PiArCj4+PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4+PiArCj4+PiArI2luY2x1ZGUgPHhlbi9w bGF0Zm9ybV9wY2kuaD4KPj4+ICsjaW5jbHVkZSA8eGVuL3hlbi5oPgo+Pj4gKyNpbmNsdWRlIDx4 ZW4veGVuYnVzLmg+Cj4+PiArCj4+PiArI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaW8vZGlzcGxp Zi5oPgo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGJhY2tlbmRfb25fY2hhbmdlZChzdHJ1Y3QgeGVu YnVzX2RldmljZSAqeGJfZGV2LAo+Pj4gK8KgwqDCoMKgwqDCoMKgIGVudW0geGVuYnVzX3N0YXRl IGJhY2tlbmRfc3RhdGUpCj4+PiArewo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHhlbl9k cnZfcHJvYmUoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhiX2RldiwKPj4+ICvCoMKgwqDCoMKgwqDC oCBjb25zdCBzdHJ1Y3QgeGVuYnVzX2RldmljZV9pZCAqaWQpCj4+PiArewo+Pj4gK8KgwqDCoCBy ZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCB4ZW5fZHJ2X3JlbW92ZShzdHJ1 Y3QgeGVuYnVzX2RldmljZSAqZGV2KQo+Pj4gK3sKPj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGVuYnVzX2RldmljZV9pZCB4ZW5fZHJ2 X2lkc1tdID0gewo+Pj4gK8KgwqDCoCB7IFhFTkRJU1BMX0RSSVZFUl9OQU1FIH0sCj4+PiArwqDC oMKgIHsgIiIgfQo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCB4ZW5idXNfZHJpdmVy IHhlbl9kcml2ZXIgPSB7Cj4+PiArwqDCoMKgIC5pZHMgPSB4ZW5fZHJ2X2lkcywKPj4+ICvCoMKg wqAgLnByb2JlID0geGVuX2Rydl9wcm9iZSwKPj4+ICvCoMKgwqAgLnJlbW92ZSA9IHhlbl9kcnZf cmVtb3ZlLAo+Pj4gK8KgwqDCoCAub3RoZXJlbmRfY2hhbmdlZCA9IGJhY2tlbmRfb25fY2hhbmdl ZCwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgX19pbml0IHhlbl9kcnZfaW5pdCh2b2lk KQo+Pj4gK3sKPj4+ICvCoMKgwqAgaWYgKCF4ZW5fZG9tYWluKCkpCj4+PiArwqDCoMKgwqDCoMKg wqAgcmV0dXJuIC1FTk9ERVY7Cj4+PiArCj4+PiArwqDCoMKgIGlmICh4ZW5faW5pdGlhbF9kb21h aW4oKSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIERSTV9FUlJPUihYRU5ESVNQTF9EUklWRVJfTkFN RSAiIGNhbm5vdCBydW4gaW4gaW5pdGlhbAo+Pj4gZG9tYWluXG4iKTsKPj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVOT0RFVjsKPj4+ICvCoMKgwqAgfQo+PiBXaHkgbm90PyBXb3VsZG4ndCB0 aGF0IGJlIHBvc3NpYmxlIGluIGNhc2Ugb2YgdGhlIGJhY2tlbmQgbGl2aW5nIGluIGEKPj4gZHJp dmVyIGRvbWFpbj8KPiBJdCBpcyBwb3NzaWJsZSAoYW5kIGluIG15IHVzZS1jYXNlIGJhY2tlbmQg aW5kZWVkIHJ1bnMgaW4KPiBhIGRyaXZlciBkb21haW4pLiBJIHdhcyBqdXN0IG5vdCBzdXJlIGlm IGl0IGlzIHJlYWxseSBhCj4gZ29vZCBpZGVhIHRvIGFsbG93IHRoYXQuIElmIHlvdSB0aGluayB0 aGlzIGlzIG9rLCB0aGVuCj4gSSdsbCByZW1vdmUgdGhpcyBjaGVjawoKSSBkb24ndCB0aGluayB0 aGUgZHJpdmVyIHNob3VsZCBkZWNpZGUgdGhhdC4gVGhpcyB3b3VsZCBiZSB0aGUgam9iIG9mClhl biB0b29scyBJTU8uCgoKSnVlcmdlbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv L3hlbi1kZXZlbA==