From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752110AbeBUIFv (ORCPT ); Wed, 21 Feb 2018 03:05:51 -0500 Received: from mail-lf0-f67.google.com ([209.85.215.67]:40680 "EHLO mail-lf0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751758AbeBUID5 (ORCPT ); Wed, 21 Feb 2018 03:03:57 -0500 X-Google-Smtp-Source: AH8x224XWqjtA7MIalzG8pNh9BL+d3p374icmnv0WnzpNXdEXOiXDEGtzb1NcDUoBF51pixf1i5nZw== From: Oleksandr Andrushchenko To: 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, jgross@suse.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com Cc: andr2000@gmail.com, Oleksandr Andrushchenko Subject: [PATCH 3/9] drm/xen-front: Read driver configuration from Xen store Date: Wed, 21 Feb 2018 10:03:36 +0200 Message-Id: <1519200222-20623-4-git-send-email-andr2000@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1519200222-20623-1-git-send-email-andr2000@gmail.com> References: <1519200222-20623-1-git-send-email-andr2000@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Oleksandr Andrushchenko Read configuration values from Xen store according to xen/interface/io/displif.h protocol: - read connector(s) configuration - read buffer allocation mode (backend/frontend) Signed-off-by: Oleksandr Andrushchenko --- drivers/gpu/drm/xen/Makefile | 3 +- drivers/gpu/drm/xen/xen_drm_front.c | 9 ++++ drivers/gpu/drm/xen/xen_drm_front.h | 3 ++ drivers/gpu/drm/xen/xen_drm_front_cfg.c | 84 +++++++++++++++++++++++++++++++++ drivers/gpu/drm/xen/xen_drm_front_cfg.h | 45 ++++++++++++++++++ 5 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/xen/xen_drm_front_cfg.c create mode 100644 drivers/gpu/drm/xen/xen_drm_front_cfg.h diff --git a/drivers/gpu/drm/xen/Makefile b/drivers/gpu/drm/xen/Makefile index 967074d348f6..0a2eae757f0c 100644 --- a/drivers/gpu/drm/xen/Makefile +++ b/drivers/gpu/drm/xen/Makefile @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 -drm_xen_front-objs := xen_drm_front.o +drm_xen_front-objs := xen_drm_front.o \ + xen_drm_front_cfg.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 index d0306f9d660d..0a90c474c7ce 100644 --- a/drivers/gpu/drm/xen/xen_drm_front.c +++ b/drivers/gpu/drm/xen/xen_drm_front.c @@ -32,6 +32,15 @@ static void xen_drv_remove_internal(struct xen_drm_front_info *front_info) static int backend_on_initwait(struct xen_drm_front_info *front_info) { + struct xen_drm_front_cfg *cfg = &front_info->cfg; + int ret; + + cfg->front_info = front_info; + ret = xen_drm_front_cfg_card(front_info, cfg); + if (ret < 0) + return ret; + + DRM_INFO("Have %d conector(s)\n", cfg->num_connectors); return 0; } diff --git a/drivers/gpu/drm/xen/xen_drm_front.h b/drivers/gpu/drm/xen/xen_drm_front.h index 8af46850f126..62b0d4e3e12b 100644 --- a/drivers/gpu/drm/xen/xen_drm_front.h +++ b/drivers/gpu/drm/xen/xen_drm_front.h @@ -19,8 +19,11 @@ #ifndef __XEN_DRM_FRONT_H_ #define __XEN_DRM_FRONT_H_ +#include "xen_drm_front_cfg.h" + struct xen_drm_front_info { struct xenbus_device *xb_dev; + struct xen_drm_front_cfg cfg; }; #endif /* __XEN_DRM_FRONT_H_ */ diff --git a/drivers/gpu/drm/xen/xen_drm_front_cfg.c b/drivers/gpu/drm/xen/xen_drm_front_cfg.c new file mode 100644 index 000000000000..58fe50bc52a5 --- /dev/null +++ b/drivers/gpu/drm/xen/xen_drm_front_cfg.c @@ -0,0 +1,84 @@ +/* + * 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. + * + * Copyright (C) 2016-2018 EPAM Systems Inc. + * + * Author: Oleksandr Andrushchenko + */ + +#include + +#include + +#include +#include + +#include "xen_drm_front.h" +#include "xen_drm_front_cfg.h" + +static int cfg_connector(struct xen_drm_front_info *front_info, + struct xen_drm_front_cfg_connector *connector, + const char *path, int index) +{ + char *connector_path; + + connector_path = devm_kasprintf(&front_info->xb_dev->dev, + GFP_KERNEL, "%s/%d", path, index); + if (!connector_path) + return -ENOMEM; + + connector->xenstore_path = connector_path; + if (xenbus_scanf(XBT_NIL, connector_path, XENDISPL_FIELD_RESOLUTION, + "%d" XENDISPL_RESOLUTION_SEPARATOR "%d", + &connector->width, &connector->height) < 0) { + /* either no entry configured or wrong resolution set */ + connector->width = 0; + connector->height = 0; + return -EINVAL; + } + + DRM_INFO("Connector %s: resolution %dx%d\n", + connector_path, connector->width, connector->height); + return 0; +} + +int xen_drm_front_cfg_card(struct xen_drm_front_info *front_info, + struct xen_drm_front_cfg *cfg) +{ + struct xenbus_device *xb_dev = front_info->xb_dev; + int ret, i; + + if (xenbus_read_unsigned(front_info->xb_dev->nodename, + XENDISPL_FIELD_BE_ALLOC, 0)) { + DRM_INFO("Backend can provide display buffers\n"); + cfg->be_alloc = true; + } + + cfg->num_connectors = 0; + for (i = 0; i < ARRAY_SIZE(cfg->connectors); i++) { + ret = cfg_connector(front_info, + &cfg->connectors[i], xb_dev->nodename, i); + if (ret < 0) + break; + cfg->num_connectors++; + } + + if (!cfg->num_connectors) { + DRM_ERROR("No connector(s) configured at %s\n", + xb_dev->nodename); + return -ENODEV; + } + + return 0; +} + diff --git a/drivers/gpu/drm/xen/xen_drm_front_cfg.h b/drivers/gpu/drm/xen/xen_drm_front_cfg.h new file mode 100644 index 000000000000..1ac4948a13e5 --- /dev/null +++ b/drivers/gpu/drm/xen/xen_drm_front_cfg.h @@ -0,0 +1,45 @@ +/* + * 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. + * + * Copyright (C) 2016-2018 EPAM Systems Inc. + * + * Author: Oleksandr Andrushchenko + */ + +#ifndef __XEN_DRM_FRONT_CFG_H_ +#define __XEN_DRM_FRONT_CFG_H_ + +#include + +#define XEN_DRM_FRONT_MAX_CRTCS 4 + +struct xen_drm_front_cfg_connector { + int width; + int height; + char *xenstore_path; +}; + +struct xen_drm_front_cfg { + struct xen_drm_front_info *front_info; + /* number of connectors in this configuration */ + int num_connectors; + /* connector configurations */ + struct xen_drm_front_cfg_connector connectors[XEN_DRM_FRONT_MAX_CRTCS]; + /* set if dumb buffers are allocated externally on backend side */ + bool be_alloc; +}; + +int xen_drm_front_cfg_card(struct xen_drm_front_info *front_info, + struct xen_drm_front_cfg *cfg); + +#endif /* __XEN_DRM_FRONT_CFG_H_ */ -- 2.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: [PATCH 3/9] drm/xen-front: Read driver configuration from Xen store Date: Wed, 21 Feb 2018 10:03:36 +0200 Message-ID: <1519200222-20623-4-git-send-email-andr2000@gmail.com> References: <1519200222-20623-1-git-send-email-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-lf0-x244.google.com (mail-lf0-x244.google.com [IPv6:2a00:1450:4010:c07::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id CD0176E52A for ; Wed, 21 Feb 2018 08:03:57 +0000 (UTC) Received: by mail-lf0-x244.google.com with SMTP id v9so1063695lfa.11 for ; Wed, 21 Feb 2018 00:03:57 -0800 (PST) In-Reply-To: <1519200222-20623-1-git-send-email-andr2000@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: 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, jgross@suse.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com Cc: andr2000@gmail.com, Oleksandr Andrushchenko List-Id: dri-devel@lists.freedesktop.org RnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVw YW0uY29tPgoKUmVhZCBjb25maWd1cmF0aW9uIHZhbHVlcyBmcm9tIFhlbiBzdG9yZSBhY2NvcmRp bmcKdG8geGVuL2ludGVyZmFjZS9pby9kaXNwbGlmLmggcHJvdG9jb2w6CiAgLSByZWFkIGNvbm5l Y3RvcihzKSBjb25maWd1cmF0aW9uCiAgLSByZWFkIGJ1ZmZlciBhbGxvY2F0aW9uIG1vZGUgKGJh Y2tlbmQvZnJvbnRlbmQpCgpTaWduZWQtb2ZmLWJ5OiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8 b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3hl bi9NYWtlZmlsZSAgICAgICAgICAgIHwgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udC5jICAgICB8ICA5ICsrKysKIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9u dC5oICAgICB8ICAzICsrCiBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY2ZnLmMg fCA4NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS94 ZW4veGVuX2RybV9mcm9udF9jZmcuaCB8IDQ1ICsrKysrKysrKysrKysrKysrKwogNSBmaWxlcyBj aGFuZ2VkLCAxNDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jZmcuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jZmcuaAoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0veGVuL01h a2VmaWxlCmluZGV4IDk2NzA3NGQzNDhmNi4uMGEyZWFlNzU3ZjBjIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4vTWFrZWZp bGUKQEAgLTEsNSArMSw2IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAK LWRybV94ZW5fZnJvbnQtb2JqcyA6PSB4ZW5fZHJtX2Zyb250Lm8KK2RybV94ZW5fZnJvbnQtb2Jq cyA6PSB4ZW5fZHJtX2Zyb250Lm8gXAorCQkgICAgICB4ZW5fZHJtX2Zyb250X2NmZy5vCiAKIG9i ai0kKENPTkZJR19EUk1fWEVOX0ZST05URU5EKSArPSBkcm1feGVuX2Zyb250Lm8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5jIGIvZHJpdmVycy9ncHUvZHJt L3hlbi94ZW5fZHJtX2Zyb250LmMKaW5kZXggZDAzMDZmOWQ2NjBkLi4wYTkwYzQ3NGM3Y2UgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5jCkBAIC0zMiw2ICszMiwxNSBAQCBzdGF0aWMg dm9pZCB4ZW5fZHJ2X3JlbW92ZV9pbnRlcm5hbChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpm cm9udF9pbmZvKQogCiBzdGF0aWMgaW50IGJhY2tlbmRfb25faW5pdHdhaXQoc3RydWN0IHhlbl9k cm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbykKIHsKKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmcg KmNmZyA9ICZmcm9udF9pbmZvLT5jZmc7CisJaW50IHJldDsKKworCWNmZy0+ZnJvbnRfaW5mbyA9 IGZyb250X2luZm87CisJcmV0ID0geGVuX2RybV9mcm9udF9jZmdfY2FyZChmcm9udF9pbmZvLCBj ZmcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJRFJNX0lORk8oIkhhdmUgJWQg Y29uZWN0b3IocylcbiIsIGNmZy0+bnVtX2Nvbm5lY3RvcnMpOwogCXJldHVybiAwOwogfQogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuaCBiL2RyaXZlcnMv Z3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5oCmluZGV4IDhhZjQ2ODUwZjEyNi4uNjJiMGQ0ZTNl MTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuaAorKysg Yi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuaApAQCAtMTksOCArMTksMTEgQEAK ICNpZm5kZWYgX19YRU5fRFJNX0ZST05UX0hfCiAjZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9IXwog CisjaW5jbHVkZSAieGVuX2RybV9mcm9udF9jZmcuaCIKKwogc3RydWN0IHhlbl9kcm1fZnJvbnRf aW5mbyB7CiAJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhiX2RldjsKKwlzdHJ1Y3QgeGVuX2RybV9m cm9udF9jZmcgY2ZnOwogfTsKIAogI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9OVF9IXyAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2NmZy5jIGIvZHJpdmVy cy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2NmZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uNThmZTUwYmM1MmE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2NmZy5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCisg KiAgWGVuIHBhcmEtdmlydHVhbCBEUk0gZGV2aWNlCisgKgorICogICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBD b3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgorICoKKyAqIEF1dGhvcjog T2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29t PgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorCisjaW5jbHVkZSA8bGludXgvZGV2aWNl Lmg+CisKKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2lvL2Rpc3BsaWYuaD4KKyNpbmNsdWRlIDx4 ZW4veGVuYnVzLmg+CisKKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250LmgiCisjaW5jbHVkZSAieGVu X2RybV9mcm9udF9jZmcuaCIKKworc3RhdGljIGludCBjZmdfY29ubmVjdG9yKHN0cnVjdCB4ZW5f ZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCisJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2NmZ19j b25uZWN0b3IgKmNvbm5lY3RvciwKKwkJY29uc3QgY2hhciAqcGF0aCwgaW50IGluZGV4KQorewor CWNoYXIgKmNvbm5lY3Rvcl9wYXRoOworCisJY29ubmVjdG9yX3BhdGggPSBkZXZtX2thc3ByaW50 ZigmZnJvbnRfaW5mby0+eGJfZGV2LT5kZXYsCisJCQlHRlBfS0VSTkVMLCAiJXMvJWQiLCBwYXRo LCBpbmRleCk7CisJaWYgKCFjb25uZWN0b3JfcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlj b25uZWN0b3ItPnhlbnN0b3JlX3BhdGggPSBjb25uZWN0b3JfcGF0aDsKKwlpZiAoeGVuYnVzX3Nj YW5mKFhCVF9OSUwsIGNvbm5lY3Rvcl9wYXRoLCBYRU5ESVNQTF9GSUVMRF9SRVNPTFVUSU9OLAor CQkJIiVkIiBYRU5ESVNQTF9SRVNPTFVUSU9OX1NFUEFSQVRPUiAiJWQiLAorCQkJJmNvbm5lY3Rv ci0+d2lkdGgsICZjb25uZWN0b3ItPmhlaWdodCkgPCAwKSB7CisJCS8qIGVpdGhlciBubyBlbnRy eSBjb25maWd1cmVkIG9yIHdyb25nIHJlc29sdXRpb24gc2V0ICovCisJCWNvbm5lY3Rvci0+d2lk dGggPSAwOworCQljb25uZWN0b3ItPmhlaWdodCA9IDA7CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCURSTV9JTkZPKCJDb25uZWN0b3IgJXM6IHJlc29sdXRpb24gJWR4JWRcbiIsCisJCQljb25u ZWN0b3JfcGF0aCwgY29ubmVjdG9yLT53aWR0aCwgY29ubmVjdG9yLT5oZWlnaHQpOworCXJldHVy biAwOworfQorCitpbnQgeGVuX2RybV9mcm9udF9jZmdfY2FyZChzdHJ1Y3QgeGVuX2RybV9mcm9u dF9pbmZvICpmcm9udF9pbmZvLAorCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmcgKmNmZykKK3sK KwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGJfZGV2ID0gZnJvbnRfaW5mby0+eGJfZGV2OworCWlu dCByZXQsIGk7CisKKwlpZiAoeGVuYnVzX3JlYWRfdW5zaWduZWQoZnJvbnRfaW5mby0+eGJfZGV2 LT5ub2RlbmFtZSwKKwkJCVhFTkRJU1BMX0ZJRUxEX0JFX0FMTE9DLCAwKSkgeworCQlEUk1fSU5G TygiQmFja2VuZCBjYW4gcHJvdmlkZSBkaXNwbGF5IGJ1ZmZlcnNcbiIpOworCQljZmctPmJlX2Fs bG9jID0gdHJ1ZTsKKwl9CisKKwljZmctPm51bV9jb25uZWN0b3JzID0gMDsKKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShjZmctPmNvbm5lY3RvcnMpOyBpKyspIHsKKwkJcmV0ID0gY2ZnX2Nv bm5lY3Rvcihmcm9udF9pbmZvLAorCQkJCSZjZmctPmNvbm5lY3RvcnNbaV0sIHhiX2Rldi0+bm9k ZW5hbWUsIGkpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQljZmctPm51bV9jb25uZWN0 b3JzKys7CisJfQorCisJaWYgKCFjZmctPm51bV9jb25uZWN0b3JzKSB7CisJCURSTV9FUlJPUigi Tm8gY29ubmVjdG9yKHMpIGNvbmZpZ3VyZWQgYXQgJXNcbiIsCisJCQkJeGJfZGV2LT5ub2RlbmFt ZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY2ZnLmggYi9kcml2ZXJzL2dwdS9k cm0veGVuL3hlbl9kcm1fZnJvbnRfY2ZnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi4xYWM0OTQ4YTEzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0veGVuL3hlbl9kcm1fZnJvbnRfY2ZnLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqICBYZW4g cGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdo dCAoQykgMjAxNi0yMDE4IEVQQU0gU3lzdGVtcyBJbmMuCisgKgorICogQXV0aG9yOiBPbGVrc2Fu ZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+CisgKi8K KworI2lmbmRlZiBfX1hFTl9EUk1fRlJPTlRfQ0ZHX0hfCisjZGVmaW5lIF9fWEVOX0RSTV9GUk9O VF9DRkdfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgWEVOX0RSTV9G Uk9OVF9NQVhfQ1JUQ1MJNAorCitzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmdfY29ubmVjdG9yIHsK KwlpbnQgd2lkdGg7CisJaW50IGhlaWdodDsKKwljaGFyICp4ZW5zdG9yZV9wYXRoOworfTsKKwor c3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnIHsKKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpm cm9udF9pbmZvOworCS8qIG51bWJlciBvZiBjb25uZWN0b3JzIGluIHRoaXMgY29uZmlndXJhdGlv biAqLworCWludCBudW1fY29ubmVjdG9yczsKKwkvKiBjb25uZWN0b3IgY29uZmlndXJhdGlvbnMg Ki8KKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmdfY29ubmVjdG9yIGNvbm5lY3RvcnNbWEVOX0RS TV9GUk9OVF9NQVhfQ1JUQ1NdOworCS8qIHNldCBpZiBkdW1iIGJ1ZmZlcnMgYXJlIGFsbG9jYXRl ZCBleHRlcm5hbGx5IG9uIGJhY2tlbmQgc2lkZSAqLworCWJvb2wgYmVfYWxsb2M7Cit9OworCitp bnQgeGVuX2RybV9mcm9udF9jZmdfY2FyZChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9u dF9pbmZvLAorCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmcgKmNmZyk7CisKKyNlbmRpZiAvKiBf X1hFTl9EUk1fRlJPTlRfQ0ZHX0hfICovCi0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==