From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80C4DC432BE for ; Fri, 23 Jul 2021 17:22:11 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5194D60E8F for ; Fri, 23 Jul 2021 17:22:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 5194D60E8F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=jlekstrand.net Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2B8896FB2B; Fri, 23 Jul 2021 17:22:05 +0000 (UTC) Received: from mail-pl1-x62d.google.com (mail-pl1-x62d.google.com [IPv6:2607:f8b0:4864:20::62d]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1CDED6FABE for ; Fri, 23 Jul 2021 17:21:57 +0000 (UTC) Received: by mail-pl1-x62d.google.com with SMTP id t21so3719565plr.13 for ; Fri, 23 Jul 2021 10:21:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jlekstrand-net.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gZDUyU6TiqgcwzDSQgDDr7H1fzdH4+hJ76kiwfOJe/I=; b=ls1w+tAidcr71IqxrcMbkRpIm7NtfRtO+/Y9I1hx7Y4ZKXQaosalMErKDB/tQwHLM3 6E1qFr5ThKPik0mn2Uxx06SUg44wdpz4q/eGn6jt5nQyd7ZmUwZv1UWXUuqOViI0E+6T NS56rb8IDitV2i2aToZCScdbZxff3AkSYbPrdD2V56wUaYAJDBMYeKR09L4K/bhcs0K6 RrxuHF/honsR23ch+OYNCTVAwUa1TIkFJlc7bEwUjetMLAEe1Rz1SLofq1QhP0QyVGzv ewIUQV/XQIwRNqhsfvdufBFfGdhIMl0ggVgKUKWCmuqwFAdH5u9CUSwjhnMSHi1/NB7B +KBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gZDUyU6TiqgcwzDSQgDDr7H1fzdH4+hJ76kiwfOJe/I=; b=e0R5Q2gShIMXDQ4Bh/GD3PrK0dKfZ4axtjn1x5XHuXVJXlLk5PPdCIiybsbGvts61n 97Z9oXyX7cj6dvJ6z08qs1QTgxZsfyvMnW6xbNQqZ0v/SG/zHcl3gYpV7O6h67sbP7Z3 eGn09wACW2H4Vgg4n/GaKSfb2MJ4BLUSzGIanKR4xLkJfVuDKfGXtLDHjRgFAp2rnTKn tJAgJFekzyVALI6vf1l34PmxffWPl6iTOBlIyuxz+9rUfwGqa4R95zCAxMGo7UmTWCDT WBG7T3vrmJDnV/tbk1TDSW/ZVyYaFy8sNYQ5hycKcOERLU2b7q5PKtnfNGUB+ARS3dGh JoaA== X-Gm-Message-State: AOAM532rf8v7Zr2gqUZe/ojB9F/brNrCgMZHwKA8THZ6iI7wCfSyjBCD BKIuC061CGn6c1z8Tx++ucCxSRqdDhu4YQ== X-Google-Smtp-Source: ABdhPJwPHgJVlpn4rqr25GQMbrpU6sk3l8T9FvbKgDJrcVzyIN/2GCSdrU5wcKu4vVPVbxOfjyAzgA== X-Received: by 2002:a63:807:: with SMTP id 7mr5761424pgi.122.1627060916676; Fri, 23 Jul 2021 10:21:56 -0700 (PDT) Received: from omlet.lan ([134.134.137.86]) by smtp.gmail.com with ESMTPSA id s36sm24288648pgl.8.2021.07.23.10.21.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jul 2021 10:21:56 -0700 (PDT) From: Jason Ekstrand To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH 8/8] drm/i915/gem: Migrate to system at dma-buf attach time (v7) Date: Fri, 23 Jul 2021 12:21:42 -0500 Message-Id: <20210723172142.3273510-9-jason@jlekstrand.net> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210723172142.3273510-1-jason@jlekstrand.net> References: <20210723172142.3273510-1-jason@jlekstrand.net> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , kernel test robot , Jason Ekstrand , "Michael J . Ruhl" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thomas Hellström Until we support p2p dma or as a complement to that, migrate data to system memory at dma-buf attach time if possible. v2: - Rebase on dynamic exporter. Update the igt_dmabuf_import_same_driver selftest to migrate if we are LMEM capable. v3: - Migrate also in the pin() callback. v4: - Migrate in attach v5: (jason) - Lock around the migration v6: (jason) - Move the can_migrate check outside the lock - Rework the selftests to test more migration conditions. In particular, SMEM, LMEM, and LMEM+SMEM are all checked. v7: (mauld) - Misc style nits Signed-off-by: Thomas Hellström Signed-off-by: Michael J. Ruhl Reported-by: kernel test robot Signed-off-by: Jason Ekstrand Reviewed-by: Jason Ekstrand --- drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c | 23 ++++- .../drm/i915/gem/selftests/i915_gem_dmabuf.c | 87 ++++++++++++++++++- 2 files changed, 106 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c index 59dc56ae14d6b..afa34111de02e 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c @@ -164,8 +164,29 @@ static int i915_gem_dmabuf_attach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach) { struct drm_i915_gem_object *obj = dma_buf_to_obj(dmabuf); + struct i915_gem_ww_ctx ww; + int err; + + if (!i915_gem_object_can_migrate(obj, INTEL_REGION_SMEM)) + return -EOPNOTSUPP; + + for_i915_gem_ww(&ww, err, true) { + err = i915_gem_object_lock(obj, &ww); + if (err) + continue; + + err = i915_gem_object_migrate(obj, &ww, INTEL_REGION_SMEM); + if (err) + continue; - return i915_gem_object_pin_pages_unlocked(obj); + err = i915_gem_object_wait_migration(obj, 0); + if (err) + continue; + + err = i915_gem_object_pin_pages(obj); + } + + return err; } static void i915_gem_dmabuf_detach(struct dma_buf *dmabuf, diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_dmabuf.c index d4ce01e6ee854..ffae7df5e4d7d 100644 --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_dmabuf.c +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_dmabuf.c @@ -85,9 +85,63 @@ static int igt_dmabuf_import_self(void *arg) return err; } -static int igt_dmabuf_import_same_driver(void *arg) +static int igt_dmabuf_import_same_driver_lmem(void *arg) { struct drm_i915_private *i915 = arg; + struct intel_memory_region *lmem = i915->mm.regions[INTEL_REGION_LMEM]; + struct drm_i915_gem_object *obj; + struct drm_gem_object *import; + struct dma_buf *dmabuf; + int err; + + if (!lmem) + return 0; + + force_different_devices = true; + + obj = __i915_gem_object_create_user(i915, PAGE_SIZE, &lmem, 1); + if (IS_ERR(obj)) { + pr_err("__i915_gem_object_create_user failed with err=%ld\n", + PTR_ERR(dmabuf)); + err = PTR_ERR(obj); + goto out_ret; + } + + dmabuf = i915_gem_prime_export(&obj->base, 0); + if (IS_ERR(dmabuf)) { + pr_err("i915_gem_prime_export failed with err=%ld\n", + PTR_ERR(dmabuf)); + err = PTR_ERR(dmabuf); + goto out; + } + + /* + * We expect an import of an LMEM-only object to fail with + * -EOPNOTSUPP because it can't be migrated to SMEM. + */ + import = i915_gem_prime_import(&i915->drm, dmabuf); + if (!IS_ERR(import)) { + drm_gem_object_put(import); + pr_err("i915_gem_prime_import succeeded when it shouldn't have\n"); + err = -EINVAL; + } else if (PTR_ERR(import) != -EOPNOTSUPP) { + pr_err("i915_gem_prime_import failed with the wrong err=%ld\n", + PTR_ERR(import)); + err = PTR_ERR(import); + } + + dma_buf_put(dmabuf); +out: + i915_gem_object_put(obj); +out_ret: + force_different_devices = false; + return err; +} + +static int igt_dmabuf_import_same_driver(struct drm_i915_private *i915, + struct intel_memory_region **regions, + unsigned int num_regions) +{ struct drm_i915_gem_object *obj, *import_obj; struct drm_gem_object *import; struct dma_buf *dmabuf; @@ -97,8 +151,12 @@ static int igt_dmabuf_import_same_driver(void *arg) int err; force_different_devices = true; - obj = i915_gem_object_create_shmem(i915, PAGE_SIZE); + + obj = __i915_gem_object_create_user(i915, PAGE_SIZE, + regions, num_regions); if (IS_ERR(obj)) { + pr_err("__i915_gem_object_create_user failed with err=%ld\n", + PTR_ERR(dmabuf)); err = PTR_ERR(obj); goto out_ret; } @@ -180,6 +238,27 @@ static int igt_dmabuf_import_same_driver(void *arg) return err; } +static int igt_dmabuf_import_same_driver_smem(void *arg) +{ + struct drm_i915_private *i915 = arg; + struct intel_memory_region *smem = i915->mm.regions[INTEL_REGION_SMEM]; + + return igt_dmabuf_import_same_driver(i915, &smem, 1); +} + +static int igt_dmabuf_import_same_driver_lmem_smem(void *arg) +{ + struct drm_i915_private *i915 = arg; + struct intel_memory_region *regions[2]; + + if (!i915->mm.regions[INTEL_REGION_LMEM]) + return 0; + + regions[0] = i915->mm.regions[INTEL_REGION_LMEM]; + regions[1] = i915->mm.regions[INTEL_REGION_SMEM]; + return igt_dmabuf_import_same_driver(i915, regions, 2); +} + static int igt_dmabuf_import(void *arg) { struct drm_i915_private *i915 = arg; @@ -390,7 +469,9 @@ int i915_gem_dmabuf_live_selftests(struct drm_i915_private *i915) { static const struct i915_subtest tests[] = { SUBTEST(igt_dmabuf_export), - SUBTEST(igt_dmabuf_import_same_driver), + SUBTEST(igt_dmabuf_import_same_driver_lmem), + SUBTEST(igt_dmabuf_import_same_driver_smem), + SUBTEST(igt_dmabuf_import_same_driver_lmem_smem), }; return i915_subtests(tests, i915); -- 2.31.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 95A1DC4338F for ; Fri, 23 Jul 2021 17:22:07 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6A9C460E8F for ; Fri, 23 Jul 2021 17:22:07 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 6A9C460E8F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=jlekstrand.net Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B95176FABE; Fri, 23 Jul 2021 17:21:58 +0000 (UTC) Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by gabe.freedesktop.org (Postfix) with ESMTPS id 81B396FABE for ; Fri, 23 Jul 2021 17:21:57 +0000 (UTC) Received: by mail-pl1-x631.google.com with SMTP id a20so4091441plm.0 for ; Fri, 23 Jul 2021 10:21:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jlekstrand-net.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gZDUyU6TiqgcwzDSQgDDr7H1fzdH4+hJ76kiwfOJe/I=; b=ls1w+tAidcr71IqxrcMbkRpIm7NtfRtO+/Y9I1hx7Y4ZKXQaosalMErKDB/tQwHLM3 6E1qFr5ThKPik0mn2Uxx06SUg44wdpz4q/eGn6jt5nQyd7ZmUwZv1UWXUuqOViI0E+6T NS56rb8IDitV2i2aToZCScdbZxff3AkSYbPrdD2V56wUaYAJDBMYeKR09L4K/bhcs0K6 RrxuHF/honsR23ch+OYNCTVAwUa1TIkFJlc7bEwUjetMLAEe1Rz1SLofq1QhP0QyVGzv ewIUQV/XQIwRNqhsfvdufBFfGdhIMl0ggVgKUKWCmuqwFAdH5u9CUSwjhnMSHi1/NB7B +KBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gZDUyU6TiqgcwzDSQgDDr7H1fzdH4+hJ76kiwfOJe/I=; b=eq2xl55dB3ZDnV1xnyx/qPXr8bePPZQN+kGiEDqpq8n4JHbVqOUyAV72g56Uo+yiBI OzNAFVh0ZFGjuOV219zuMVlqiWNsJQ4jYSJoO+ibcv+7vUWO94mndt5OM0ZdRoK7CG7b KWhFi5ooD5lQbiZ0E40hXLEAXDdcLHM1dv1UUvexVUpNEFwQmkKm/yPOGucO1KSru0qD O51Fele7b+dJc+Ol+MO7+g5cul6PA82FyQkMDJRvgwhqJ8JRLAoIiYW/zWs4jhg5xnEz 6QFEICtA5465chFCpW6HW9gyKQ8LjCgkZcG4pmiSqo7kq7+fc1ziWAqfHotLwDmKTYra pUUg== X-Gm-Message-State: AOAM532m2TWzct8NYPluuzSviT/c1gTQL5ZEHVTuV1MtchVGEtJNdTg+ p6pWqIXgQlZoZGogjeVzdqQpmM7uaPJDAQ== X-Google-Smtp-Source: ABdhPJwPHgJVlpn4rqr25GQMbrpU6sk3l8T9FvbKgDJrcVzyIN/2GCSdrU5wcKu4vVPVbxOfjyAzgA== X-Received: by 2002:a63:807:: with SMTP id 7mr5761424pgi.122.1627060916676; Fri, 23 Jul 2021 10:21:56 -0700 (PDT) Received: from omlet.lan ([134.134.137.86]) by smtp.gmail.com with ESMTPSA id s36sm24288648pgl.8.2021.07.23.10.21.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jul 2021 10:21:56 -0700 (PDT) From: Jason Ekstrand To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Fri, 23 Jul 2021 12:21:42 -0500 Message-Id: <20210723172142.3273510-9-jason@jlekstrand.net> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210723172142.3273510-1-jason@jlekstrand.net> References: <20210723172142.3273510-1-jason@jlekstrand.net> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 8/8] drm/i915/gem: Migrate to system at dma-buf attach time (v7) X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGludXguaW50ZWwuY29t PgoKVW50aWwgd2Ugc3VwcG9ydCBwMnAgZG1hIG9yIGFzIGEgY29tcGxlbWVudCB0byB0aGF0LCBt aWdyYXRlIGRhdGEKdG8gc3lzdGVtIG1lbW9yeSBhdCBkbWEtYnVmIGF0dGFjaCB0aW1lIGlmIHBv c3NpYmxlLgoKdjI6Ci0gUmViYXNlIG9uIGR5bmFtaWMgZXhwb3J0ZXIuIFVwZGF0ZSB0aGUgaWd0 X2RtYWJ1Zl9pbXBvcnRfc2FtZV9kcml2ZXIKICBzZWxmdGVzdCB0byBtaWdyYXRlIGlmIHdlIGFy ZSBMTUVNIGNhcGFibGUuCnYzOgotIE1pZ3JhdGUgYWxzbyBpbiB0aGUgcGluKCkgY2FsbGJhY2su CnY0OgotIE1pZ3JhdGUgaW4gYXR0YWNoCnY1OiAoamFzb24pCi0gTG9jayBhcm91bmQgdGhlIG1p Z3JhdGlvbgp2NjogKGphc29uKQotIE1vdmUgdGhlIGNhbl9taWdyYXRlIGNoZWNrIG91dHNpZGUg dGhlIGxvY2sKLSBSZXdvcmsgdGhlIHNlbGZ0ZXN0cyB0byB0ZXN0IG1vcmUgbWlncmF0aW9uIGNv bmRpdGlvbnMuICBJbgogIHBhcnRpY3VsYXIsIFNNRU0sIExNRU0sIGFuZCBMTUVNK1NNRU0gYXJl IGFsbCBjaGVja2VkLgp2NzogKG1hdWxkKQotIE1pc2Mgc3R5bGUgbml0cwoKU2lnbmVkLW9mZi1i eTogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGludXguaW50ZWwuY29tPgpT aWduZWQtb2ZmLWJ5OiBNaWNoYWVsIEouIFJ1aGwgPG1pY2hhZWwuai5ydWhsQGludGVsLmNvbT4K UmVwb3J0ZWQtYnk6IGtlcm5lbCB0ZXN0IHJvYm90IDxsa3BAaW50ZWwuY29tPgpTaWduZWQtb2Zm LWJ5OiBKYXNvbiBFa3N0cmFuZCA8amFzb25Aamxla3N0cmFuZC5uZXQ+ClJldmlld2VkLWJ5OiBK YXNvbiBFa3N0cmFuZCA8amFzb25Aamxla3N0cmFuZC5uZXQ+Ci0tLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jICAgIHwgMjMgKysrKy0KIC4uLi9kcm0vaTkxNS9n ZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jICB8IDg3ICsrKysrKysrKysrKysrKysrKy0K IDIgZmlsZXMgY2hhbmdlZCwgMTA2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jCmluZGV4IDU5ZGM1NmFlMTRk NmIuLmFmYTM0MTExZGUwMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9kbWFidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f ZG1hYnVmLmMKQEAgLTE2NCw4ICsxNjQsMjkgQEAgc3RhdGljIGludCBpOTE1X2dlbV9kbWFidWZf YXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiAJCQkJICBzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICphdHRhY2gpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGRt YV9idWZfdG9fb2JqKGRtYWJ1Zik7CisJc3RydWN0IGk5MTVfZ2VtX3d3X2N0eCB3dzsKKwlpbnQg ZXJyOworCisJaWYgKCFpOTE1X2dlbV9vYmplY3RfY2FuX21pZ3JhdGUob2JqLCBJTlRFTF9SRUdJ T05fU01FTSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWZvcl9pOTE1X2dlbV93dygmd3cs IGVyciwgdHJ1ZSkgeworCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfbG9jayhvYmosICZ3dyk7CisJ CWlmIChlcnIpCisJCQljb250aW51ZTsKKworCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfbWlncmF0 ZShvYmosICZ3dywgSU5URUxfUkVHSU9OX1NNRU0pOworCQlpZiAoZXJyKQorCQkJY29udGludWU7 CiAKLQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlc191bmxvY2tlZChvYmopOworCQll cnIgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9taWdyYXRpb24ob2JqLCAwKTsKKwkJaWYgKGVycikK KwkJCWNvbnRpbnVlOworCisJCWVyciA9IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsK Kwl9CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBpOTE1X2dlbV9kbWFidWZfZGV0 YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9kbWFidWYuYwppbmRleCBkNGNlMDFlNmVlODU0Li5m ZmFlN2RmNWU0ZDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRl c3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxm dGVzdHMvaTkxNV9nZW1fZG1hYnVmLmMKQEAgLTg1LDkgKzg1LDYzIEBAIHN0YXRpYyBpbnQgaWd0 X2RtYWJ1Zl9pbXBvcnRfc2VsZih2b2lkICphcmcpCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGlj IGludCBpZ3RfZG1hYnVmX2ltcG9ydF9zYW1lX2RyaXZlcih2b2lkICphcmcpCitzdGF0aWMgaW50 IGlndF9kbWFidWZfaW1wb3J0X3NhbWVfZHJpdmVyX2xtZW0odm9pZCAqYXJnKQogewogCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOworCXN0cnVjdCBpbnRlbF9tZW1vcnlfcmVn aW9uICpsbWVtID0gaTkxNS0+bW0ucmVnaW9uc1tJTlRFTF9SRUdJT05fTE1FTV07CisJc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmltcG9y dDsKKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmOworCWludCBlcnI7CisKKwlpZiAoIWxtZW0pCisJ CXJldHVybiAwOworCisJZm9yY2VfZGlmZmVyZW50X2RldmljZXMgPSB0cnVlOworCisJb2JqID0g X19pOTE1X2dlbV9vYmplY3RfY3JlYXRlX3VzZXIoaTkxNSwgUEFHRV9TSVpFLCAmbG1lbSwgMSk7 CisJaWYgKElTX0VSUihvYmopKSB7CisJCXByX2VycigiX19pOTE1X2dlbV9vYmplY3RfY3JlYXRl X3VzZXIgZmFpbGVkIHdpdGggZXJyPSVsZFxuIiwKKwkJICAgICAgIFBUUl9FUlIoZG1hYnVmKSk7 CisJCWVyciA9IFBUUl9FUlIob2JqKTsKKwkJZ290byBvdXRfcmV0OworCX0KKworCWRtYWJ1ZiA9 IGk5MTVfZ2VtX3ByaW1lX2V4cG9ydCgmb2JqLT5iYXNlLCAwKTsKKwlpZiAoSVNfRVJSKGRtYWJ1 ZikpIHsKKwkJcHJfZXJyKCJpOTE1X2dlbV9wcmltZV9leHBvcnQgZmFpbGVkIHdpdGggZXJyPSVs ZFxuIiwKKwkJICAgICAgIFBUUl9FUlIoZG1hYnVmKSk7CisJCWVyciA9IFBUUl9FUlIoZG1hYnVm KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBXZSBleHBlY3QgYW4gaW1wb3J0IG9mIGFu IExNRU0tb25seSBvYmplY3QgdG8gZmFpbCB3aXRoCisJICogLUVPUE5PVFNVUFAgYmVjYXVzZSBp dCBjYW4ndCBiZSBtaWdyYXRlZCB0byBTTUVNLgorCSAqLworCWltcG9ydCA9IGk5MTVfZ2VtX3By aW1lX2ltcG9ydCgmaTkxNS0+ZHJtLCBkbWFidWYpOworCWlmICghSVNfRVJSKGltcG9ydCkpIHsK KwkJZHJtX2dlbV9vYmplY3RfcHV0KGltcG9ydCk7CisJCXByX2VycigiaTkxNV9nZW1fcHJpbWVf aW1wb3J0IHN1Y2NlZWRlZCB3aGVuIGl0IHNob3VsZG4ndCBoYXZlXG4iKTsKKwkJZXJyID0gLUVJ TlZBTDsKKwl9IGVsc2UgaWYgKFBUUl9FUlIoaW1wb3J0KSAhPSAtRU9QTk9UU1VQUCkgeworCQlw cl9lcnIoImk5MTVfZ2VtX3ByaW1lX2ltcG9ydCBmYWlsZWQgd2l0aCB0aGUgd3JvbmcgZXJyPSVs ZFxuIiwKKwkJICAgICAgIFBUUl9FUlIoaW1wb3J0KSk7CisJCWVyciA9IFBUUl9FUlIoaW1wb3J0 KTsKKwl9CisKKwlkbWFfYnVmX3B1dChkbWFidWYpOworb3V0OgorCWk5MTVfZ2VtX29iamVjdF9w dXQob2JqKTsKK291dF9yZXQ6CisJZm9yY2VfZGlmZmVyZW50X2RldmljZXMgPSBmYWxzZTsKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlndF9kbWFidWZfaW1wb3J0X3NhbWVfZHJpdmVy KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAorCQkJCQkgc3RydWN0IGludGVsX21lbW9y eV9yZWdpb24gKipyZWdpb25zLAorCQkJCQkgdW5zaWduZWQgaW50IG51bV9yZWdpb25zKQorewog CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosICppbXBvcnRfb2JqOwogCXN0cnVjdCBk cm1fZ2VtX29iamVjdCAqaW1wb3J0OwogCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CkBAIC05Nyw4 ICsxNTEsMTIgQEAgc3RhdGljIGludCBpZ3RfZG1hYnVmX2ltcG9ydF9zYW1lX2RyaXZlcih2b2lk ICphcmcpCiAJaW50IGVycjsKIAogCWZvcmNlX2RpZmZlcmVudF9kZXZpY2VzID0gdHJ1ZTsKLQlv YmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGk5MTUsIFBBR0VfU0laRSk7CisKKwlv YmogPSBfX2k5MTVfZ2VtX29iamVjdF9jcmVhdGVfdXNlcihpOTE1LCBQQUdFX1NJWkUsCisJCQkJ CSAgICByZWdpb25zLCBudW1fcmVnaW9ucyk7CiAJaWYgKElTX0VSUihvYmopKSB7CisJCXByX2Vy cigiX19pOTE1X2dlbV9vYmplY3RfY3JlYXRlX3VzZXIgZmFpbGVkIHdpdGggZXJyPSVsZFxuIiwK KwkJICAgICAgIFBUUl9FUlIoZG1hYnVmKSk7CiAJCWVyciA9IFBUUl9FUlIob2JqKTsKIAkJZ290 byBvdXRfcmV0OwogCX0KQEAgLTE4MCw2ICsyMzgsMjcgQEAgc3RhdGljIGludCBpZ3RfZG1hYnVm X2ltcG9ydF9zYW1lX2RyaXZlcih2b2lkICphcmcpCiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGlj IGludCBpZ3RfZG1hYnVmX2ltcG9ydF9zYW1lX2RyaXZlcl9zbWVtKHZvaWQgKmFyZykKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKKwlzdHJ1Y3QgaW50ZWxfbWVtb3J5 X3JlZ2lvbiAqc21lbSA9IGk5MTUtPm1tLnJlZ2lvbnNbSU5URUxfUkVHSU9OX1NNRU1dOworCisJ cmV0dXJuIGlndF9kbWFidWZfaW1wb3J0X3NhbWVfZHJpdmVyKGk5MTUsICZzbWVtLCAxKTsKK30K Kworc3RhdGljIGludCBpZ3RfZG1hYnVmX2ltcG9ydF9zYW1lX2RyaXZlcl9sbWVtX3NtZW0odm9p ZCAqYXJnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOworCXN0cnVj dCBpbnRlbF9tZW1vcnlfcmVnaW9uICpyZWdpb25zWzJdOworCisJaWYgKCFpOTE1LT5tbS5yZWdp b25zW0lOVEVMX1JFR0lPTl9MTUVNXSkKKwkJcmV0dXJuIDA7CisKKwlyZWdpb25zWzBdID0gaTkx NS0+bW0ucmVnaW9uc1tJTlRFTF9SRUdJT05fTE1FTV07CisJcmVnaW9uc1sxXSA9IGk5MTUtPm1t LnJlZ2lvbnNbSU5URUxfUkVHSU9OX1NNRU1dOworCXJldHVybiBpZ3RfZG1hYnVmX2ltcG9ydF9z YW1lX2RyaXZlcihpOTE1LCByZWdpb25zLCAyKTsKK30KKwogc3RhdGljIGludCBpZ3RfZG1hYnVm X2ltcG9ydCh2b2lkICphcmcpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBh cmc7CkBAIC0zOTAsNyArNDY5LDkgQEAgaW50IGk5MTVfZ2VtX2RtYWJ1Zl9saXZlX3NlbGZ0ZXN0 cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0 IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewogCQlTVUJURVNUKGlndF9kbWFidWZfZXhwb3J0KSwK LQkJU1VCVEVTVChpZ3RfZG1hYnVmX2ltcG9ydF9zYW1lX2RyaXZlciksCisJCVNVQlRFU1QoaWd0 X2RtYWJ1Zl9pbXBvcnRfc2FtZV9kcml2ZXJfbG1lbSksCisJCVNVQlRFU1QoaWd0X2RtYWJ1Zl9p bXBvcnRfc2FtZV9kcml2ZXJfc21lbSksCisJCVNVQlRFU1QoaWd0X2RtYWJ1Zl9pbXBvcnRfc2Ft ZV9kcml2ZXJfbG1lbV9zbWVtKSwKIAl9OwogCiAJcmV0dXJuIGk5MTVfc3VidGVzdHModGVzdHMs IGk5MTUpOwotLSAKMi4zMS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK