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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 57942CD5BBF for ; Mon, 25 May 2026 05:09:10 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B798410E3BE; Mon, 25 May 2026 05:09:09 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="KmHwBqR+"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id BA18C10E3D0 for ; Mon, 25 May 2026 05:09:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779685740; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=AnOrPYWvLJhqxeq/Rsen85IEvBpCff2lVP7hBQ2BbQo=; b=KmHwBqR+Q3ILP4WiR5D8bqXQkf9uNjr2wSIOiUpb4HXQoIH5TXOD70J3BV6Nvvnu6UPPU7 WkS9GxW38mD8omeF0Hd/dK6poPtSQy/BzT5QRh7jyIFNVvVOwrBmfSg4yDhTFCmwql2XS7 y7zbRdA4mXJBMUmpw5LZSGo38BW5BX0= Received: from mail-lj1-f200.google.com (mail-lj1-f200.google.com [209.85.208.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-262-EtYEKaBfO5e3mEMxSsk2PQ-1; Mon, 25 May 2026 01:08:58 -0400 X-MC-Unique: EtYEKaBfO5e3mEMxSsk2PQ-1 X-Mimecast-MFC-AGG-ID: EtYEKaBfO5e3mEMxSsk2PQ_1779685737 Received: by mail-lj1-f200.google.com with SMTP id 38308e7fff4ca-38e83e590b5so38489941fa.3 for ; Sun, 24 May 2026 22:08:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779685737; x=1780290537; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=AnOrPYWvLJhqxeq/Rsen85IEvBpCff2lVP7hBQ2BbQo=; b=OttWgN6V1Wbk1JmedOGNX4cMQsZE/8Dl7VPaIHdOrLjhbbdb1ZAv39R+LA5/aSB18z NpPP6t7TNmes8bFtS7b3D2kYHNYlUhEm5zRC3ld5sur4lZ9buncULkQN4hFVY2dwIvSs rFULaxiL7qYg0kFARzwq/5yB9ITCD8oAmBEXwV5kBKxzi2wOMUM8gdXBTy8H8t6U+KH6 J5qofSF7j0Xq9SHMMsrAx/kbnhHxtMB4kV6pAr8hy/U7FxM2O/AIxniF5lhhPuho48ye nhpaCySQ2oDS79JsO2NVyw8d7jZh2qR74UZBTs+kcYj6ayFcxERG9fAotevm8XbP3JT2 3Hqg== X-Gm-Message-State: AOJu0Yxrr+LjV7fLgrZChD8TU1Uka4ZL0Ur+mNQc4b2eTVeOkMFzubUQ doeZtD7nZBangUaYTbTgJXxgK1NCcyKMO5IoPe0vLBW/ieQ8fTEIy4Lunu4uZsTzufr4FUNUK0T F1YooIc8z/HlgDPEib0gI0GpkNgVb69GOZOLaDfbrRAezcJBwV590hpz0SMEkwpGvEvhi X-Gm-Gg: Acq92OHAjpwz471e4TXopVqcXYyii+uM2jBXaLlMbFq95Ih46Ic20D8KVKgr5Rc3Fpo 9+SNk6xJY/AajBfWFl7j43LXgVDnM4D4Xny2Z5OMbNYM7MTBfFHqYn2Qlc7l9a4ZTUWFjtLucuf ioQKH7ooKdkAW8YwRwa0TLG18T3vV/UeqgCAuxGQ+KE0DFP/iySg6//KertHhqLrN0dh8OuOmGy 5yEgpOUDwixt2qhZmZ1PKctOsFdYTCTbOS1qg8hI/4c3wmFm0kZ0wB0vMH7VkOvFn7E6l/Ycwca 9DsZbBc1mEMk/xMHRi5PIQZA1Fa+cDTaxY0ZMBNQ0PAfLov/IrWqvFKkSDfWaw7jN7/t3dLlme1 L/VfpBeOgj3knfqEdfc3JCYkwzeUX8Ocr5/Ab X-Received: by 2002:a2e:be2c:0:b0:393:bffa:d815 with SMTP id 38308e7fff4ca-395d8d3c6f4mr37180001fa.21.1779685736897; Sun, 24 May 2026 22:08:56 -0700 (PDT) X-Received: by 2002:a2e:be2c:0:b0:393:bffa:d815 with SMTP id 38308e7fff4ca-395d8d3c6f4mr37179891fa.21.1779685736316; Sun, 24 May 2026 22:08:56 -0700 (PDT) Received: from fedora (85-23-51-1.bb.dnainternet.fi. [85.23.51.1]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-395dca7bcddsm20698161fa.16.2026.05.24.22.08.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 22:08:55 -0700 (PDT) From: mpenttil@redhat.com To: linux-mm@kvack.org Cc: dri-devel@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Mika=20Penttil=C3=A4?= , David Hildenbrand , Jason Gunthorpe , Leon Romanovsky , Alistair Popple , Balbir Singh , Zi Yan , Matthew Brost , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko Subject: [PATCH v11 4/5] mm: setup device page migration in HMM pagewalk Date: Mon, 25 May 2026 08:08:29 +0300 Message-ID: <20260525050830.100254-5-mpenttil@redhat.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20260525050830.100254-1-mpenttil@redhat.com> References: <20260525050830.100254-1-mpenttil@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 2Y17zbRIFg3yfo2nPvqgvWZ7ZHBkYQ8WI5jY9oIb8nU_1779685737 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 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: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" RnJvbTogTWlrYSBQZW50dGlsw6QgPG1wZW50dGlsQHJlZGhhdC5jb20+CgpJbXBsZW1lbnQgdGhl IG5lZWRlZCBobW1fdm1hX2hhbmRsZV9taWdyYXRlX3ByZXBhcmVfcG1kKCkgYW5kCmhtbV92bWFf aGFuZGxlX21pZ3JhdGVfcHJlcGFyZSgpIGZ1bmN0aW9ucyB3aGljaCBhcmUgbW9zdGx5CmNhcnJp ZWQgb3ZlciBmcm9tIG1pZ3JhdGVfZGV2aWNlLmMsIGFzIHdlbGwgYXMgdGhlIG5lZWRlZApzcGxp dCBmdW5jdGlvbnMuCgpNYWtlIG1pZ3JhdGVfZGV2aWNlIHRha2UgdXNlIG9mIEhNTSBwYWdld2Fs ayBmb3IgY29sbGVjdGluZwpwYXJ0IG9mIG1pZ3JhdGlvbi4KCkFsc28sIHJlbW92ZSB0aGUgbm93 IHVudXNlZCBtaWdyYXRlX3ZtYV9jb2xsZWN0KCkgZnVuY3Rpb25zLgoKQ2M6IERhdmlkIEhpbGRl bmJyYW5kIDxkYXZpZEBrZXJuZWwub3JnPgpDYzogSmFzb24gR3VudGhvcnBlIDxqZ2dAbnZpZGlh LmNvbT4KQ2M6IExlb24gUm9tYW5vdnNreSA8bGVvbnJvQG52aWRpYS5jb20+CkNjOiBBbGlzdGFp ciBQb3BwbGUgPGFwb3BwbGVAbnZpZGlhLmNvbT4KQ2M6IEJhbGJpciBTaW5naCA8YmFsYmlyc0Bu dmlkaWEuY29tPgpDYzogWmkgWWFuIDx6aXlAbnZpZGlhLmNvbT4KQ2M6IE1hdHRoZXcgQnJvc3Qg PG1hdHRoZXcuYnJvc3RAaW50ZWwuY29tPgpTdWdnZXN0ZWQtYnk6IEFsaXN0YWlyIFBvcHBsZSA8 YXBvcHBsZUBudmlkaWEuY29tPgpTaWduZWQtb2ZmLWJ5OiBNaWthIFBlbnR0aWzDpCA8bXBlbnR0 aWxAcmVkaGF0LmNvbT4KLS0tCiBpbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCB8ICAgOSArLQogbW0v aG1tLmMgICAgICAgICAgICAgICAgfCA0MjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0KIG1tL21pZ3JhdGVfZGV2aWNlLmMgICAgIHwgNTI4ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgNDQ1IGluc2VydGlvbnMoKyksIDUx OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2lu Y2x1ZGUvbGludXgvbWlncmF0ZS5oCmluZGV4IDA3NDI5MDI3OTYwYS4uNjRkODJiZDE2ZDNiIDEw MDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21p Z3JhdGUuaApAQCAtMTY0LDYgKzE2NCw3IEBAIGVudW0gbWlncmF0ZV92bWFfaW5mbyB7CiAJTUlH UkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFID0gMSA8PCAxLAogCU1JR1JBVEVfVk1BX1NF TEVDVF9ERVZJQ0VfQ09IRVJFTlQgPSAxIDw8IDIsCiAJTUlHUkFURV9WTUFfU0VMRUNUX0NPTVBP VU5EID0gMSA8PCAzLAorCU1JR1JBVEVfVk1BX0ZBVUxUID0gMSA8PCA0LAogfTsKIAogc3RydWN0 IG1pZ3JhdGVfdm1hIHsKQEAgLTIwMSwxMCArMjAyLDE0IEBAIHN0cnVjdCBtaWdyYXRlX3ZtYSB7 CiAJc3RydWN0IHBhZ2UJCSpmYXVsdF9wYWdlOwogfTsKIAotLy8gVE9ETzogZW5hYmxlIG1pZ3Jh dGlvbgogc3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGVfdm1hX2luZm8gaG1tX3NlbGVjdF9taWdy YXRlKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQogewotCXJldHVybiAwOworCWVudW0gbWlncmF0 ZV92bWFfaW5mbyBtaW5mbzsKKworCW1pbmZvID0gKHJhbmdlLT5kZWZhdWx0X2ZsYWdzICYgSE1N X1BGTl9SRVFfTUlHUkFURSkgPworCQlyYW5nZS0+bWlncmF0ZS0+ZmxhZ3MgOiAwOworCisJcmV0 dXJuIG1pbmZvOwogfQogCiBpbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1h ICphcmdzKTsKZGlmZiAtLWdpdCBhL21tL2htbS5jIGIvbW0vaG1tLmMKaW5kZXggZWU3ODc2NGMz ZTQ3Li4wZmU4ODA0NDdiYzAgMTAwNjQ0Ci0tLSBhL21tL2htbS5jCisrKyBiL21tL2htbS5jCkBA IC00ODMsMzQgKzQ4Myw0MzEgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1k KHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogI2VuZGlmICAvKiBD T05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqLwogCiAjaWZkZWYgQ09ORklHX0RFVklD RV9NSUdSQVRJT04KKy8qKgorICogbWlncmF0ZV92bWFfc3BsaXRfZm9saW8oKSAtIEhlbHBlciBm dW5jdGlvbiB0byBzcGxpdCBhIFRIUCBmb2xpbworICogQGZvbGlvOiB0aGUgZm9saW8gdG8gc3Bs aXQKKyAqIEBmYXVsdF9wYWdlOiBzdHJ1Y3QgcGFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGZhdWx0 IGlmIGFueQorICogQGhtbV92bWFfd2Fsazogd2FsayBpbiBwcm9ncmVzcworICogQHB0ZXA6IHB0 ZV90ICogZm9yIHVubWFwIGFuZCB1bmxvY2sgcHRsCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nl c3MKKyAqLworc3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8g KmZvbGlvLAorCQkJCSAgIHN0cnVjdCBwYWdlICpmYXVsdF9wYWdlLAorCQkJCSAgIHN0cnVjdCBo bW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsaywKKwkJCQkgICBwdGVfdCAqcHRlcCkKK3sKKwlpbnQg cmV0OworCXN0cnVjdCBmb2xpbyAqZmF1bHRfZm9saW8gPSBmYXVsdF9wYWdlID8gcGFnZV9mb2xp byhmYXVsdF9wYWdlKSA6IE5VTEw7CisJc3RydWN0IGZvbGlvICpuZXdfZmF1bHRfZm9saW8gPSBO VUxMOworCisJaWYgKGZvbGlvICE9IGZhdWx0X2ZvbGlvKQorCQlmb2xpb19nZXQoZm9saW8pOwor CisJcHRlX3VubWFwX3VubG9jayhwdGVwLCBobW1fdm1hX3dhbGstPnB0bCk7CisJaG1tX3ZtYV93 YWxrLT5wdGVsb2NrZWQgPSBmYWxzZTsKKworCWlmIChmb2xpbyAhPSBmYXVsdF9mb2xpbykKKwkJ Zm9saW9fbG9jayhmb2xpbyk7CisKKwlyZXQgPSBzcGxpdF9mb2xpbyhmb2xpbyk7CisJaWYgKHJl dCkgeworCQlpZiAoZm9saW8gIT0gZmF1bHRfZm9saW8pIHsKKwkJCWZvbGlvX3VubG9jayhmb2xp byk7CisJCQlmb2xpb19wdXQoZm9saW8pOworCQl9CisJCXJldHVybiByZXQ7CisJfQorCisJbmV3 X2ZhdWx0X2ZvbGlvID0gZmF1bHRfcGFnZSA/IHBhZ2VfZm9saW8oZmF1bHRfcGFnZSkgOiBOVUxM OworCisJLyoKKwkgKiBFbnN1cmUgdGhlIGxvY2sgaXMgaGVsZCBvbiB0aGUgY29ycmVjdAorCSAq IGZvbGlvIGFmdGVyIHRoZSBzcGxpdAorCSAqLworCWlmICghbmV3X2ZhdWx0X2ZvbGlvKSB7CisJ CWZvbGlvX3VubG9jayhmb2xpbyk7CisJCWZvbGlvX3B1dChmb2xpbyk7CisJfSBlbHNlIGlmIChm b2xpbyAhPSBuZXdfZmF1bHRfZm9saW8pIHsKKwkJaWYgKG5ld19mYXVsdF9mb2xpbyAhPSBmYXVs dF9mb2xpbykgeworCQkJZm9saW9fZ2V0KG5ld19mYXVsdF9mb2xpbyk7CisJCQlmb2xpb19sb2Nr KG5ld19mYXVsdF9mb2xpbyk7CisJCX0KKwkJZm9saW9fdW5sb2NrKGZvbGlvKTsKKwkJZm9saW9f cHV0KGZvbGlvKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBobW1fdm1hX2hh bmRsZV9taWdyYXRlX3ByZXBhcmVfcG1kKGNvbnN0IHN0cnVjdCBtbV93YWxrICp3YWxrLAogCQkJ CQkgICAgICBwbWRfdCAqcG1kcCwKIAkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJ CQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmht bV9wZm4pCiB7Ci0JLy8gVE9ETzogaW1wbGVtZW50IG1pZ3JhdGlvbiBlbnRyeSBpbnNlcnRpb24K LQlyZXR1cm4gMDsKKwlzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGsgPSB3YWxrLT5w cml2YXRlOworCXN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlID0gaG1tX3ZtYV93YWxrLT5yYW5nZTsK KwlzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUgPSByYW5nZS0+bWlncmF0ZTsKKwlzdHJ1Y3Qg Zm9saW8gKmZhdWx0X2ZvbGlvID0gTlVMTDsKKwlzdHJ1Y3QgZm9saW8gKmZvbGlvOworCWVudW0g bWlncmF0ZV92bWFfaW5mbyBtaW5mbzsKKwl1bnNpZ25lZCBsb25nIGk7CisJaW50IHIgPSAwOwor CisJbWluZm8gPSBobW1fc2VsZWN0X21pZ3JhdGUocmFuZ2UpOworCWlmICghbWluZm8pCisJCXJl dHVybiByOworCisJV0FSTl9PTl9PTkNFKCFtaWdyYXRlKTsKKwlITU1fQVNTRVJUX1BNRF9MT0NL RUQoaG1tX3ZtYV93YWxrLCB0cnVlKTsKKworCWZhdWx0X2ZvbGlvID0gbWlncmF0ZS0+ZmF1bHRf cGFnZSA/CisJCXBhZ2VfZm9saW8obWlncmF0ZS0+ZmF1bHRfcGFnZSkgOiBOVUxMOworCisJaWYg KHBtZF9ub25lKCpwbWRwKSkKKwkJcmV0dXJuIGhtbV9wZm5zX2ZpbGwoc3RhcnQsIGVuZCwgaG1t X3ZtYV93YWxrLCAwKTsKKworCWlmICghKGhtbV9wZm5bMF0gJiBITU1fUEZOX1ZBTElEKSkKKwkJ Z290byBvdXQ7CisKKwlpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZHApKSB7CisJCWlmICghKG1pbmZv ICYgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTSkpCisJCQlnb3RvIG91dDsKKworCQlmb2xpbyA9 IHBtZF9mb2xpbygqcG1kcCk7CisJCWlmIChpc19odWdlX3plcm9fZm9saW8oZm9saW8pKQorCQkJ cmV0dXJuIGhtbV9wZm5zX2ZpbGwoc3RhcnQsIGVuZCwgaG1tX3ZtYV93YWxrLCAwKTsKKworCX0g ZWxzZSBpZiAoIXBtZF9wcmVzZW50KCpwbWRwKSkgeworCQljb25zdCBzb2Z0bGVhZl90IGVudHJ5 ID0gc29mdGxlYWZfZnJvbV9wbWQoKnBtZHApOworCisJCWZvbGlvID0gc29mdGxlYWZfdG9fZm9s aW8oZW50cnkpOworCisJCWlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKQor CQkJZ290byBvdXQ7CisKKwkJaWYgKCEobWluZm8gJiBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNF X1BSSVZBVEUpKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKGZvbGlvLT5wZ21hcC0+b3duZXIgIT0g bWlncmF0ZS0+cGdtYXBfb3duZXIpCisJCQlnb3RvIG91dDsKKworCX0gZWxzZSB7CisJCWhtbV92 bWFfd2Fsay0+bGFzdCA9IHN0YXJ0OworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWZvbGlvX2dl dChmb2xpbyk7CisKKwlpZiAoZm9saW8gIT0gZmF1bHRfZm9saW8gJiYgdW5saWtlbHkoIWZvbGlv X3RyeWxvY2soZm9saW8pKSkgeworCQlmb2xpb19wdXQoZm9saW8pOworCQlobW1fcGZuc19maWxs KHN0YXJ0LCBlbmQsIGhtbV92bWFfd2FsaywgSE1NX1BGTl9FUlJPUik7CisJCXJldHVybiAwOwor CX0KKworCWlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpICYmCisJICAgIChtaWdyYXRlLT5m bGFncyAmIE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORCkgJiYKKwkgICAgKElTX0FMSUdORUQo c3RhcnQsIEhQQUdFX1BNRF9TSVpFKSAmJgorCSAgICAgSVNfQUxJR05FRChlbmQsIEhQQUdFX1BN RF9TSVpFKSkpIHsKKworCQlzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHsKKwkJ CS5wdGwgPSBobW1fdm1hX3dhbGstPnB0bCwKKwkJCS5hZGRyZXNzID0gc3RhcnQsCisJCQkucG1k ID0gcG1kcCwKKwkJCS52bWEgPSB3YWxrLT52bWEsCisJCX07CisKKwkJaG1tX3BmblswXSB8PSBI TU1fUEZOX01JR1JBVEUgfCBITU1fUEZOX0NPTVBPVU5EOworCisJCXIgPSBzZXRfcG1kX21pZ3Jh dGlvbl9lbnRyeSgmcHZtdywgZm9saW9fcGFnZShmb2xpbywgMCkpOworCQlpZiAocikgeworCQkJ aG1tX3BmblswXSAmPSB+KEhNTV9QRk5fTUlHUkFURSB8IEhNTV9QRk5fQ09NUE9VTkQpOworCQkJ ciA9IC1FTk9FTlQ7ICAvLyBmYWxsYmFjaworCQkJZ290byB1bmxvY2tfb3V0OworCQl9CisJCWZv ciAoaSA9IDEsIHN0YXJ0ICs9IFBBR0VfU0laRTsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0Vf U0laRSwgaSsrKQorCQkJaG1tX3BmbltpXSAmPSBITU1fUEZOX0lOT1VUX0ZMQUdTOworCisJfSBl bHNlIHsKKwkJciA9IC1FTk9FTlQ7ICAvLyBmYWxsYmFjaworCQlnb3RvIHVubG9ja19vdXQ7CisJ fQorCisKK291dDoKKwlyZXR1cm4gcjsKKwordW5sb2NrX291dDoKKwlpZiAoZm9saW8gIT0gZmF1 bHRfZm9saW8pCisJCWZvbGlvX3VubG9jayhmb2xpbyk7CisJZm9saW9fcHV0KGZvbGlvKTsKKwln b3RvIG91dDsKIH0KIAorLyoKKyAqIEluc3RhbGwgbWlncmF0aW9uIGVudHJpZXMgaWYgbWlncmF0 aW9uIHJlcXVlc3RlZCwgZWl0aGVyIGZyb20gZmF1bHQKKyAqIG9yIG1pZ3JhdGUgcGF0aHMuCisg KgorICovCiBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX21pZ3JhdGVfcHJlcGFyZShjb25zdCBz dHJ1Y3QgbW1fd2FsayAqd2FsaywKIAkJCQkJICBwbWRfdCAqcG1kcCwKLQkJCQkJICBwdGVfdCAq cHRlLAorCQkJCQkgIHB0ZV90ICpwdGVwLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJ CQkJICB1bnNpZ25lZCBsb25nICpobW1fcGZuKQorCQkJCQkgIHVuc2lnbmVkIGxvbmcgKmhtbV9w Zm4sCisJCQkJCSAgYm9vbCAqdW5tYXBwZWQpCiB7Ci0JLy8gVE9ETzogaW1wbGVtZW50IG1pZ3Jh dGlvbiBlbnRyeSBpbnNlcnRpb24KKwlzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGsg PSB3YWxrLT5wcml2YXRlOworCXN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlID0gaG1tX3ZtYV93YWxr LT5yYW5nZTsKKwlzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUgPSByYW5nZS0+bWlncmF0ZTsK KwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHdhbGstPnZtYS0+dm1fbW07CisJc3RydWN0IGZvbGlv ICpmYXVsdF9mb2xpbyA9IE5VTEw7CisJZW51bSBtaWdyYXRlX3ZtYV9pbmZvIG1pbmZvOworCXN0 cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7CisJYm9vbCBhbm9uX2V4Y2x1c2l2ZTsKKwlzdHJ1Y3Qg Zm9saW8gKmZvbGlvOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXN0cnVjdCBwYWdlICpwYWdlOwor CXNvZnRsZWFmX3QgZW50cnk7CisJcHRlX3QgcHRlLCBzd3BfcHRlOworCWJvb2wgd3JpdGFibGUg PSBmYWxzZTsKKworCS8vIERvIHdlIHdhbnQgdG8gbWlncmF0ZSBhdCBhbGw/CisJbWluZm8gPSBo bW1fc2VsZWN0X21pZ3JhdGUocmFuZ2UpOworCWlmICghbWluZm8pCisJCXJldHVybiAwOworCisJ V0FSTl9PTl9PTkNFKCFtaWdyYXRlKTsKKwlITU1fQVNTRVJUX1BURV9MT0NLRUQoaG1tX3ZtYV93 YWxrLCB0cnVlKTsKKworCWZhdWx0X2ZvbGlvID0gbWlncmF0ZS0+ZmF1bHRfcGFnZSA/CisJCXBh Z2VfZm9saW8obWlncmF0ZS0+ZmF1bHRfcGFnZSkgOiBOVUxMOworCisJcHRlID0gcHRlcF9nZXQo cHRlcCk7CisKKwlpZiAocHRlX25vbmUocHRlKSkgeworCQkvLyBtaWdyYXRlIHdpdGhvdXQgZmF1 bHRpbmcgY2FzZQorCQlpZiAodm1hX2lzX2Fub255bW91cyh3YWxrLT52bWEpKSB7CisJCQkqaG1t X3BmbiAmPSBITU1fUEZOX0lOT1VUX0ZMQUdTOworCQkJKmhtbV9wZm4gfD0gSE1NX1BGTl9NSUdS QVRFOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoIShobW1fcGZuWzBdICYgSE1NX1BG Tl9WQUxJRCkpCisJCWdvdG8gb3V0OworCisJaWYgKCFwdGVfcHJlc2VudChwdGUpKSB7CisJCS8q CisJCSAqIE9ubHkgY2FyZSBhYm91dCB1bmFkZHJlc3NhYmxlIGRldmljZSBwYWdlIHNwZWNpYWwK KwkJICogcGFnZSB0YWJsZSBlbnRyeS4gT3RoZXIgc3BlY2lhbCBzd2FwIGVudHJpZXMgYXJlIG5v dAorCQkgKiBtaWdyYXRhYmxlLCBhbmQgd2UgaWdub3JlIHJlZ3VsYXIgc3dhcHBlZCBwYWdlLgor CQkgKi8KKwkJZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpOworCQlpZiAoIXNvZnRsZWFm X2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkKKwkJCWdvdG8gb3V0OworCisJCWlmICghKG1pbmZv ICYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSkKKwkJCWdvdG8gb3V0OworCisJ CXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTsKKwkJZm9saW8gPSBwYWdlX2ZvbGlvKHBh Z2UpOworCQlpZiAoZm9saW8tPnBnbWFwLT5vd25lciAhPSBtaWdyYXRlLT5wZ21hcF9vd25lcikK KwkJCWdvdG8gb3V0OworCisJCWlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkgeworCQkJaW50 IHJldDsKKworCQkJcmV0ID0gbWlncmF0ZV92bWFfc3BsaXRfZm9saW8oZm9saW8sCisJCQkJCQkg ICAgICBtaWdyYXRlLT5mYXVsdF9wYWdlLAorCQkJCQkJICAgICAgaG1tX3ZtYV93YWxrLAorCQkJ CQkJICAgICAgcHRlcCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0X2Vycm9yOworCQkJcmV0 dXJuIC1FQUdBSU47CisJCX0KKworCQlwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKKwkJaWYgKHNv ZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkKKwkJCXdyaXRhYmxlID0gdHJ1 ZTsKKwl9IGVsc2UgeworCQlwZm4gPSBwdGVfcGZuKHB0ZSk7CisJCWlmIChpc196ZXJvX3Bmbihw Zm4pICYmCisJCSAgICAobWluZm8gJiBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNKSkgeworCQkJ KmhtbV9wZm4gPSBITU1fUEZOX01JR1JBVEU7CisJCQlnb3RvIG91dDsKKwkJfQorCQlwYWdlID0g dm1fbm9ybWFsX3BhZ2Uod2Fsay0+dm1hLCBhZGRyLCBwdGUpOworCQlpZiAocGFnZSAmJiAhaXNf em9uZV9kZXZpY2VfcGFnZShwYWdlKSAmJgorCQkgICAgIShtaW5mbyAmIE1JR1JBVEVfVk1BX1NF TEVDVF9TWVNURU0pKSB7CisJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmIChwYWdlICYmIGlzX2Rl dmljZV9jb2hlcmVudF9wYWdlKHBhZ2UpKSB7CisJCQlwZ21hcCA9IHBhZ2VfcGdtYXAocGFnZSk7 CisKKwkJCWlmICghKG1pbmZvICYKKwkJCSAgICAgIE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0Vf Q09IRVJFTlQpIHx8CisJCQkgICAgcGdtYXAtPm93bmVyICE9IG1pZ3JhdGUtPnBnbWFwX293bmVy KQorCQkJCWdvdG8gb3V0OworCQl9CisKKwkJZm9saW8gPSBwYWdlID8gcGFnZV9mb2xpbyhwYWdl KSA6IE5VTEw7CisJCWlmIChmb2xpbyAmJiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkgeworCQkJ aW50IHJldDsKKworCQkJcmV0ID0gbWlncmF0ZV92bWFfc3BsaXRfZm9saW8oZm9saW8sCisJCQkJ CQkgICAgICBtaWdyYXRlLT5mYXVsdF9wYWdlLAorCQkJCQkJICAgICAgaG1tX3ZtYV93YWxrLAor CQkJCQkJICAgICAgcHRlcCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0X2Vycm9yOworCQkJ cmV0dXJuIC1FQUdBSU47CisJCX0KKworCQl3cml0YWJsZSA9IHB0ZV93cml0ZShwdGUpOworCX0K KworCWlmICghcGFnZSB8fCAhcGFnZS0+bWFwcGluZykKKwkJZ290byBvdXQ7CisKKwkvKgorCSAq IEJ5IGdldHRpbmcgYSByZWZlcmVuY2Ugb24gdGhlIGZvbGlvIHdlIHBpbiBpdCBhbmQgdGhhdCBi bG9ja3MKKwkgKiBhbnkga2luZCBvZiBtaWdyYXRpb24uIFNpZGUgZWZmZWN0IGlzIHRoYXQgaXQg ImZyZWV6ZXMiIHRoZQorCSAqIHB0ZS4KKwkgKgorCSAqIFdlIGRyb3AgdGhpcyByZWZlcmVuY2Ug YWZ0ZXIgaXNvbGF0aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBscnUKKwkgKiBmb3Igbm9uIGRldmlj ZSBmb2xpbyAoZGV2aWNlIGZvbGlvIGFyZSBub3Qgb24gdGhlIGxydSBhbmQgdGh1cworCSAqIGNh bid0IGJlIGRyb3BwZWQgZnJvbSBpdCkuCisJICovCisJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2Up OworCWZvbGlvX2dldChmb2xpbyk7CisKKwkvKgorCSAqIFdlIHJlbHkgb24gZm9saW9fdHJ5bG9j aygpIHRvIGF2b2lkIGRlYWRsb2NrIGJldHdlZW4KKwkgKiBjb25jdXJyZW50IG1pZ3JhdGlvbnMg d2hlcmUgZWFjaCBpcyB3YWl0aW5nIG9uIHRoZSBvdGhlcnMKKwkgKiBmb2xpbyBsb2NrLiBJZiB3 ZSBjYW4ndCBpbW1lZGlhdGVseSBsb2NrIHRoZSBmb2xpbyB3ZSBmYWlsIHRoaXMKKwkgKiBtaWdy YXRpb24gYXMgaXQgaXMgb25seSBiZXN0IGVmZm9ydCBhbnl3YXkuCisJICoKKwkgKiBJZiB3ZSBj YW4gbG9jayB0aGUgZm9saW8gaXQncyBzYWZlIHRvIHNldCB1cCBhIG1pZ3JhdGlvbiBlbnRyeQor CSAqIG5vdy4gSW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBmb2xpbyBpcyBtYXBwZWQgb25j ZSBpbiBhCisJICogc2luZ2xlIHByb2Nlc3Mgc2V0dGluZyB1cCB0aGUgbWlncmF0aW9uIGVudHJ5 IG5vdyBpcyBhbgorCSAqIG9wdGltaXNhdGlvbiB0byBhdm9pZCB3YWxraW5nIHRoZSBybWFwIGxh dGVyIHdpdGgKKwkgKiB0cnlfdG9fbWlncmF0ZSgpLgorCSAqLworCisJaWYgKGZhdWx0X2ZvbGlv ID09IGZvbGlvIHx8IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7CisJCWFub25fZXhjbHVzaXZlID0g Zm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmJgorCQkJUGFnZUFub25FeGNsdXNpdmUocGFnZSk7CisK KwkJZmx1c2hfY2FjaGVfcGFnZSh3YWxrLT52bWEsIGFkZHIsIHBmbik7CisKKwkJaWYgKGFub25f ZXhjbHVzaXZlKSB7CisJCQlwdGUgPSBwdGVwX2NsZWFyX2ZsdXNoKHdhbGstPnZtYSwgYWRkciwg cHRlcCk7CisKKwkJCWlmIChmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZShmb2xpbywgcGFn ZSkpIHsKKwkJCQlzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpOworCQkJCWZvbGlvX3Vu bG9jayhmb2xpbyk7CisJCQkJZm9saW9fcHV0KGZvbGlvKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0K KwkJfSBlbHNlIHsKKwkJCXB0ZSA9IHB0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlcCk7 CisJCX0KKworCQlpZiAocHRlX2RpcnR5KHB0ZSkpCisJCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlv KTsKKworCQkvKiBTZXR1cCBzcGVjaWFsIG1pZ3JhdGlvbiBwYWdlIHRhYmxlIGVudHJ5ICovCisJ CWlmICh3cml0YWJsZSkKKwkJCWVudHJ5ID0gbWFrZV93cml0YWJsZV9taWdyYXRpb25fZW50cnko cGZuKTsKKwkJZWxzZSBpZiAoYW5vbl9leGNsdXNpdmUpCisJCQllbnRyeSA9IG1ha2VfcmVhZGFi bGVfZXhjbHVzaXZlX21pZ3JhdGlvbl9lbnRyeShwZm4pOworCQllbHNlCisJCQllbnRyeSA9IG1h a2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHBmbik7CisKKwkJaWYgKHB0ZV9wcmVzZW50KHB0 ZSkpIHsKKwkJCWlmIChwdGVfeW91bmcocHRlKSkKKwkJCQllbnRyeSA9IG1ha2VfbWlncmF0aW9u X2VudHJ5X3lvdW5nKGVudHJ5KTsKKwkJCWlmIChwdGVfZGlydHkocHRlKSkKKwkJCQllbnRyeSA9 IG1ha2VfbWlncmF0aW9uX2VudHJ5X2RpcnR5KGVudHJ5KTsKKwkJfQorCisJCXN3cF9wdGUgPSBz d3BfZW50cnlfdG9fcHRlKGVudHJ5KTsKKwkJaWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHsKKwkJCWlm IChwdGVfc29mdF9kaXJ0eShwdGUpKQorCQkJCXN3cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0 eShzd3BfcHRlKTsKKwkJCWlmIChwdGVfdWZmZF93cChwdGUpKQorCQkJCXN3cF9wdGUgPSBwdGVf c3dwX21rdWZmZF93cChzd3BfcHRlKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChwdGVfc3dwX3NvZnRf ZGlydHkocHRlKSkKKwkJCQlzd3BfcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkoc3dwX3B0ZSk7 CisJCQlpZiAocHRlX3N3cF91ZmZkX3dwKHB0ZSkpCisJCQkJc3dwX3B0ZSA9IHB0ZV9zd3BfbWt1 ZmZkX3dwKHN3cF9wdGUpOworCQl9CisKKwkJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgc3dw X3B0ZSk7CisJCWZvbGlvX3JlbW92ZV9ybWFwX3B0ZShmb2xpbywgcGFnZSwgd2Fsay0+dm1hKTsK KwkJZm9saW9fcHV0KGZvbGlvKTsKKwkJKmhtbV9wZm4gfD0gSE1NX1BGTl9NSUdSQVRFOworCisJ CWlmIChwdGVfcHJlc2VudChwdGUpKQorCQkJKnVubWFwcGVkID0gdHJ1ZTsKKwl9IGVsc2UKKwkJ Zm9saW9fcHV0KGZvbGlvKTsKK291dDoKIAlyZXR1cm4gMDsKK291dF9lcnJvcjoKKwlyZXR1cm4g LUVGQVVMVDsKIH0KIAogc3RhdGljIGludCBobW1fdm1hX3dhbGtfc3BsaXQocG1kX3QgKnBtZHAs CiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgICBzdHJ1Y3QgbW1fd2FsayAq d2FsaykKIHsKLQkvLyBUT0RPIDogaW1wbGVtZW50IHNwbGl0Ci0JcmV0dXJuIDA7Ci19CisJc3Ry dWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrID0gd2Fsay0+cHJpdmF0ZTsKKwlzdHJ1Y3Qg aG1tX3JhbmdlICpyYW5nZSA9IGhtbV92bWFfd2Fsay0+cmFuZ2U7CisJc3RydWN0IG1pZ3JhdGVf dm1hICptaWdyYXRlID0gcmFuZ2UtPm1pZ3JhdGU7CisJc3RydWN0IGZvbGlvICpmb2xpbywgKmZh dWx0X2ZvbGlvOworCXNwaW5sb2NrX3QgKnB0bDsKKwlpbnQgcmV0ID0gMDsKIAorCUhNTV9BU1NF UlRfVU5MT0NLRUQoaG1tX3ZtYV93YWxrKTsKKworCWZhdWx0X2ZvbGlvID0gKG1pZ3JhdGUgJiYg bWlncmF0ZS0+ZmF1bHRfcGFnZSkgPworCQlwYWdlX2ZvbGlvKG1pZ3JhdGUtPmZhdWx0X3BhZ2Up IDogTlVMTDsKKworCXB0bCA9IHBtZF9sb2NrKHdhbGstPm1tLCBwbWRwKTsKKwlpZiAodW5saWtl bHkoIXBtZF90cmFuc19odWdlKCpwbWRwKSkpIHsKKwkJc3Bpbl91bmxvY2socHRsKTsKKwkJZ290 byBvdXQ7CisJfQorCisJZm9saW8gPSBwbWRfZm9saW8oKnBtZHApOworCWlmIChpc19odWdlX3pl cm9fZm9saW8oZm9saW8pKSB7CisJCXNwaW5fdW5sb2NrKHB0bCk7CisJCXNwbGl0X2h1Z2VfcG1k KHdhbGstPnZtYSwgcG1kcCwgYWRkcik7CisJfSBlbHNlIHsKKwkJZm9saW9fZ2V0KGZvbGlvKTsK KwkJc3Bpbl91bmxvY2socHRsKTsKKworCQlpZiAoZm9saW8gIT0gZmF1bHRfZm9saW8pIHsKKwkJ CWlmICh1bmxpa2VseSghZm9saW9fdHJ5bG9jayhmb2xpbykpKSB7CisJCQkJZm9saW9fcHV0KGZv bGlvKTsKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gIGVsc2UK KwkJCWZvbGlvX3B1dChmb2xpbyk7CisKKwkJcmV0ID0gc3BsaXRfZm9saW8oZm9saW8pOworCQlp ZiAoZmF1bHRfZm9saW8gIT0gZm9saW8pIHsKKwkJCWZvbGlvX3VubG9jayhmb2xpbyk7CisJCQlm b2xpb19wdXQoZm9saW8pOworCQl9CisKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KICNlbHNl CiBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX21pZ3JhdGVfcHJlcGFyZV9wbWQoY29uc3Qgc3Ry dWN0IG1tX3dhbGsgKndhbGssCiAJCQkJCSAgICAgIHBtZF90ICpwbWRwLApAQCAtNTI1LDcgKzky Miw4IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfbWlncmF0ZV9wcmVwYXJlKGNvbnN0IHN0 cnVjdCBtbV93YWxrICp3YWxrLAogCQkJCQkgIHBtZF90ICpwbWRwLAogCQkJCQkgIHB0ZV90ICpw dGUsCiAJCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgKmht bV9wZm4pCisJCQkJCSAgdW5zaWduZWQgbG9uZyAqaG1tX3BmbiwKKwkJCQkJICBib29sICp1bm1h cHBlZCkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTU4MCw2ICs5NzgsNyBAQCBzdGF0aWMgaW50IGht bV92bWFfd2Fsa19wbWQocG1kX3QgKnBtZHAsCiAJZW51bSBtaWdyYXRlX3ZtYV9pbmZvIG1pbmZv OwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IHN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgKmhtbV9wZm5z OworCWJvb2wgdW5tYXBwZWQgPSBmYWxzZTsKIAl1bnNpZ25lZCBsb25nIGk7CiAJcHRlX3QgKnB0 ZXA7CiAJcG1kX3QgcG1kOwpAQCAtNjYzLDcgKzEwNjIsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFf d2Fsa19wbWQocG1kX3QgKnBtZHAsCiAJCQkJCWdvdG8gYWdhaW47CiAJCQl9CiAKLQkJCXIgPSBo bW1fdm1hX2hhbmRsZV9wbWQod2FsaywgYWRkciwgZW5kLCBobW1fcGZucywgcG1kKTsKKwkJCXIg PSBobW1fdm1hX2hhbmRsZV9wbWQod2Fsaywgc3RhcnQsIGVuZCwgaG1tX3BmbnMsIHBtZCk7CiAK IAkJCS8vIElmIG5vdCBtaWdyYXRpbmcgd2UgYXJlIGRvbmUKIAkJCWlmIChyIHx8ICFtaW5mbykg ewpAQCAtNzMyLDkgKzExMzEsMTMgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90 ICpwbWRwLAogCQkJcmV0dXJuIHI7CiAJCX0KIAotCQlyID0gaG1tX3ZtYV9oYW5kbGVfbWlncmF0 ZV9wcmVwYXJlKHdhbGssIHBtZHAsIHB0ZXAsIGFkZHIsIGhtbV9wZm5zKTsKKwkJciA9IGhtbV92 bWFfaGFuZGxlX21pZ3JhdGVfcHJlcGFyZSh3YWxrLCBwbWRwLCBwdGVwLCBhZGRyLCBobW1fcGZu cywgJnVubWFwcGVkKTsKIAkJaWYgKHIgPT0gLUVBR0FJTikgewogCQkJSE1NX0FTU0VSVF9VTkxP Q0tFRChobW1fdm1hX3dhbGspOworCQkJaWYgKHVubWFwcGVkKSB7CisJCQkJZmx1c2hfdGxiX3Jh bmdlKHdhbGstPnZtYSwgc3RhcnQsIGFkZHIpOworCQkJCXVubWFwcGVkID0gZmFsc2U7CisJCQl9 CiAJCQlnb3RvIGFnYWluOwogCQl9CiAJCWlmIChyKSB7CkBAIC03NDIsNiArMTE0NSw4IEBAIHN0 YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3BtZChwbWRfdCAqcG1kcCwKIAkJCWJyZWFrOwogCQl9CiAJ fQorCWlmICh1bm1hcHBlZCkKKwkJZmx1c2hfdGxiX3JhbmdlKHdhbGstPnZtYSwgc3RhcnQsIGFk ZHIpOwogCiAJaWYgKGhtbV92bWFfd2Fsay0+cHRlbG9ja2VkKSB7CiAJCXB0ZV91bm1hcF91bmxv Y2socHRlcCAtIDEsIGhtbV92bWFfd2Fsay0+cHRsKTsKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGVf ZGV2aWNlLmMgYi9tbS9taWdyYXRlX2RldmljZS5jCmluZGV4IGRlYjZjOTQ0Y2YxNS4uMjZjZTdk ODZmYjZkIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCisrKyBiL21tL21pZ3JhdGVf ZGV2aWNlLmMKQEAgLTE4LDUwOCArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgog I2luY2x1ZGUgImludGVybmFsLmgiCiAKLXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9z a2lwKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJ CSAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKLXsKLQlzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3Jh dGUgPSB3YWxrLT5wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQotCWZvciAoYWRkciA9 IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgewotCQltaWdyYXRlLT5kc3Rb bWlncmF0ZS0+bnBhZ2VzXSA9IDA7Ci0JCW1pZ3JhdGUtPnNyY1ttaWdyYXRlLT5ucGFnZXMrK10g PSAwOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxl Y3RfaG9sZSh1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCwK LQkJCQkgICAgX19hbHdheXNfdW51c2VkIGludCBkZXB0aCwKLQkJCQkgICAgc3RydWN0IG1tX3dh bGsgKndhbGspCi17Ci0Jc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlID0gd2Fsay0+cHJpdmF0 ZTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQkvKiBPbmx5IGFsbG93IHBvcHVsYXRpbmcgYW5v bnltb3VzIG1lbW9yeS4gKi8KLQlpZiAoIXZtYV9pc19hbm9ueW1vdXMod2Fsay0+dm1hKSkKLQkJ cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTsKLQotCWlm ICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpICYmCi0JCShtaWdyYXRlLT5mbGFncyAmIE1JR1JB VEVfVk1BX1NFTEVDVF9DT01QT1VORCkgJiYKLQkJKElTX0FMSUdORUQoc3RhcnQsIEhQQUdFX1BN RF9TSVpFKSAmJgotCQkgSVNfQUxJR05FRChlbmQsIEhQQUdFX1BNRF9TSVpFKSkpIHsKLQkJbWln cmF0ZS0+c3JjW21pZ3JhdGUtPm5wYWdlc10gPSBNSUdSQVRFX1BGTl9NSUdSQVRFIHwKLQkJCQkJ CU1JR1JBVEVfUEZOX0NPTVBPVU5EOwotCQltaWdyYXRlLT5kc3RbbWlncmF0ZS0+bnBhZ2VzXSA9 IDA7Ci0JCW1pZ3JhdGUtPm5wYWdlcysrOwotCQltaWdyYXRlLT5jcGFnZXMrKzsKLQotCQkvKgot CQkgKiBDb2xsZWN0IHRoZSByZW1haW5pbmcgZW50cmllcyBhcyBob2xlcywgaW4gY2FzZSB3ZQot CQkgKiBuZWVkIHRvIHNwbGl0IGxhdGVyCi0JCSAqLwotCQlyZXR1cm4gbWlncmF0ZV92bWFfY29s bGVjdF9za2lwKHN0YXJ0ICsgUEFHRV9TSVpFLCBlbmQsIHdhbGspOwotCX0KLQotCWZvciAoYWRk ciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgewotCQltaWdyYXRlLT5z cmNbbWlncmF0ZS0+bnBhZ2VzXSA9IE1JR1JBVEVfUEZOX01JR1JBVEU7Ci0JCW1pZ3JhdGUtPmRz dFttaWdyYXRlLT5ucGFnZXNdID0gMDsKLQkJbWlncmF0ZS0+bnBhZ2VzKys7Ci0JCW1pZ3JhdGUt PmNwYWdlcysrOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG1pZ3JhdGVfdm1hX3Nw bGl0X2ZvbGlvKCkgLSBIZWxwZXIgZnVuY3Rpb24gdG8gc3BsaXQgYSBUSFAgZm9saW8KLSAqIEBm b2xpbzogdGhlIGZvbGlvIHRvIHNwbGl0Ci0gKiBAZmF1bHRfcGFnZTogc3RydWN0IHBhZ2UgYXNz b2NpYXRlZCB3aXRoIHRoZSBmYXVsdCBpZiBhbnkKLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2Vz cwotICovCi1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAq Zm9saW8sCi0JCQkJICAgc3RydWN0IHBhZ2UgKmZhdWx0X3BhZ2UpCi17Ci0JaW50IHJldDsKLQlz dHJ1Y3QgZm9saW8gKmZhdWx0X2ZvbGlvID0gZmF1bHRfcGFnZSA/IHBhZ2VfZm9saW8oZmF1bHRf cGFnZSkgOiBOVUxMOwotCXN0cnVjdCBmb2xpbyAqbmV3X2ZhdWx0X2ZvbGlvID0gTlVMTDsKLQot CWlmIChmb2xpbyAhPSBmYXVsdF9mb2xpbykgewotCQlmb2xpb19nZXQoZm9saW8pOwotCQlmb2xp b19sb2NrKGZvbGlvKTsKLQl9Ci0KLQlyZXQgPSBzcGxpdF9mb2xpbyhmb2xpbyk7Ci0JaWYgKHJl dCkgewotCQlpZiAoZm9saW8gIT0gZmF1bHRfZm9saW8pIHsKLQkJCWZvbGlvX3VubG9jayhmb2xp byk7Ci0JCQlmb2xpb19wdXQoZm9saW8pOwotCQl9Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JbmV3 X2ZhdWx0X2ZvbGlvID0gZmF1bHRfcGFnZSA/IHBhZ2VfZm9saW8oZmF1bHRfcGFnZSkgOiBOVUxM OwotCi0JLyoKLQkgKiBFbnN1cmUgdGhlIGxvY2sgaXMgaGVsZCBvbiB0aGUgY29ycmVjdAotCSAq IGZvbGlvIGFmdGVyIHRoZSBzcGxpdAotCSAqLwotCWlmICghbmV3X2ZhdWx0X2ZvbGlvKSB7Ci0J CWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JCWZvbGlvX3B1dChmb2xpbyk7Ci0JfSBlbHNlIGlmIChm b2xpbyAhPSBuZXdfZmF1bHRfZm9saW8pIHsKLQkJaWYgKG5ld19mYXVsdF9mb2xpbyAhPSBmYXVs dF9mb2xpbykgewotCQkJZm9saW9fZ2V0KG5ld19mYXVsdF9mb2xpbyk7Ci0JCQlmb2xpb19sb2Nr KG5ld19mYXVsdF9mb2xpbyk7Ci0JCX0KLQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJZm9saW9f cHV0KGZvbGlvKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqIG1pZ3JhdGVfdm1hX2NvbGxl Y3RfaHVnZV9wbWQgLSBjb2xsZWN0IFRIUCBwYWdlcyB3aXRob3V0IHNwbGl0dGluZyB0aGUKLSAq IGZvbGlvIGZvciBkZXZpY2UgcHJpdmF0ZSBwYWdlcy4KLSAqIEBwbWRwOiBwb2ludGVyIHRvIHBt ZCBlbnRyeQotICogQHN0YXJ0OiBzdGFydCBhZGRyZXNzIG9mIHRoZSByYW5nZSBmb3IgbWlncmF0 aW9uCi0gKiBAZW5kOiBlbmQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UgZm9yIG1pZ3JhdGlvbgotICog QHdhbGs6IG1tX3dhbGsgY2FsbGJhY2sgc3RydWN0dXJlCi0gKiBAZmF1bHRfZm9saW86IGZvbGlv IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmF1bHQgaWYgYW55Ci0gKgotICogQ29sbGVjdCB0aGUgaHVn ZSBwbWQgZW50cnkgYXQgQHBtZHAgZm9yIG1pZ3JhdGlvbiBhbmQgc2V0IHRoZQotICogTUlHUkFU RV9QRk5fQ09NUE9VTkQgZmxhZyBpbiB0aGUgbWlncmF0ZSBzcmMgZW50cnkgdG8gaW5kaWNhdGUg dGhhdAotICogbWlncmF0aW9uIHdpbGwgb2NjdXIgYXQgSFBBR0VfUE1EIGdyYW51bGFyaXR5Ci0g Ki8KLXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwg dW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkJdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93 YWxrICp3YWxrLAotCQkJCQlzdHJ1Y3QgZm9saW8gKmZhdWx0X2ZvbGlvKQotewotCXN0cnVjdCBt bV9zdHJ1Y3QgKm1tID0gd2Fsay0+bW07Ci0Jc3RydWN0IGZvbGlvICpmb2xpbzsKLQlzdHJ1Y3Qg bWlncmF0ZV92bWEgKm1pZ3JhdGUgPSB3YWxrLT5wcml2YXRlOwotCXNwaW5sb2NrX3QgKnB0bDsK LQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgd3JpdGUgPSAwOwotCi0JcHRsID0gcG1kX2xvY2so bW0sIHBtZHApOwotCWlmIChwbWRfbm9uZSgqcG1kcCkpIHsKLQkJc3Bpbl91bmxvY2socHRsKTsK LQkJcmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZShzdGFydCwgZW5kLCAtMSwgd2Fsayk7 Ci0JfQotCi0JaWYgKHBtZF90cmFuc19odWdlKCpwbWRwKSkgewotCQlpZiAoIShtaWdyYXRlLT5m bGFncyAmIE1JR1JBVEVfVk1BX1NFTEVDVF9TWVNURU0pKSB7Ci0JCQlzcGluX3VubG9jayhwdGwp OwotCQkJcmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTsK LQkJfQotCi0JCWZvbGlvID0gcG1kX2ZvbGlvKCpwbWRwKTsKLQkJaWYgKGlzX2h1Z2VfemVyb19m b2xpbyhmb2xpbykpIHsKLQkJCXNwaW5fdW5sb2NrKHB0bCk7Ci0JCQlyZXR1cm4gbWlncmF0ZV92 bWFfY29sbGVjdF9ob2xlKHN0YXJ0LCBlbmQsIC0xLCB3YWxrKTsKLQkJfQotCQlpZiAocG1kX3dy aXRlKCpwbWRwKSkKLQkJCXdyaXRlID0gTUlHUkFURV9QRk5fV1JJVEU7Ci0JfSBlbHNlIGlmICgh cG1kX3ByZXNlbnQoKnBtZHApKSB7Ci0JCWNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVh Zl9mcm9tX3BtZCgqcG1kcCk7Ci0KLQkJZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7 Ci0KLQkJaWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHwKLQkJCSEobWln cmF0ZS0+ZmxhZ3MgJiBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpIHx8Ci0JCQko Zm9saW8tPnBnbWFwLT5vd25lciAhPSBtaWdyYXRlLT5wZ21hcF9vd25lcikpIHsKLQkJCXNwaW5f dW5sb2NrKHB0bCk7Ci0JCQlyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBl bmQsIHdhbGspOwotCQl9Ci0KLQkJaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRl KGVudHJ5KSkKLQkJCXdyaXRlID0gTUlHUkFURV9QRk5fV1JJVEU7Ci0JfSBlbHNlIHsKLQkJc3Bp bl91bmxvY2socHRsKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JZm9saW9fZ2V0KGZvbGlv KTsKLQlpZiAoZm9saW8gIT0gZmF1bHRfZm9saW8gJiYgdW5saWtlbHkoIWZvbGlvX3RyeWxvY2so Zm9saW8pKSkgewotCQlzcGluX3VubG9jayhwdGwpOwotCQlmb2xpb19wdXQoZm9saW8pOwotCQly ZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspOwotCX0KLQot CWlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpICYmCi0JCShtaWdyYXRlLT5mbGFncyAmIE1J R1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORCkgJiYKLQkJKElTX0FMSUdORUQoc3RhcnQsIEhQQUdF X1BNRF9TSVpFKSAmJgotCQkgSVNfQUxJR05FRChlbmQsIEhQQUdFX1BNRF9TSVpFKSkpIHsKLQot CQlzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHsKLQkJCS5wdGwgPSBwdGwsCi0J CQkuYWRkcmVzcyA9IHN0YXJ0LAotCQkJLnBtZCA9IHBtZHAsCi0JCQkudm1hID0gd2Fsay0+dm1h LAotCQl9OwotCi0JCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4oZm9saW9fcGFnZShm b2xpbywgMCkpOwotCi0JCW1pZ3JhdGUtPnNyY1ttaWdyYXRlLT5ucGFnZXNdID0gbWlncmF0ZV9w Zm4ocGZuKSB8IHdyaXRlCi0JCQkJCQl8IE1JR1JBVEVfUEZOX01JR1JBVEUKLQkJCQkJCXwgTUlH UkFURV9QRk5fQ09NUE9VTkQ7Ci0JCW1pZ3JhdGUtPmRzdFttaWdyYXRlLT5ucGFnZXMrK10gPSAw OwotCQltaWdyYXRlLT5jcGFnZXMrKzsKLQkJcmV0ID0gc2V0X3BtZF9taWdyYXRpb25fZW50cnko JnB2bXcsIGZvbGlvX3BhZ2UoZm9saW8sIDApKTsKLQkJaWYgKHJldCkgewotCQkJbWlncmF0ZS0+ bnBhZ2VzLS07Ci0JCQltaWdyYXRlLT5jcGFnZXMtLTsKLQkJCW1pZ3JhdGUtPnNyY1ttaWdyYXRl LT5ucGFnZXNdID0gMDsKLQkJCW1pZ3JhdGUtPmRzdFttaWdyYXRlLT5ucGFnZXNdID0gMDsKLQkJ CWdvdG8gZmFsbGJhY2s7Ci0JCX0KLQkJbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0ICsg UEFHRV9TSVpFLCBlbmQsIHdhbGspOwotCQlzcGluX3VubG9jayhwdGwpOwotCQlyZXR1cm4gMDsK LQl9Ci0KLWZhbGxiYWNrOgotCXNwaW5fdW5sb2NrKHB0bCk7Ci0JaWYgKCFmb2xpb190ZXN0X2xh cmdlKGZvbGlvKSkKLQkJZ290byBkb25lOwotCXJldCA9IHNwbGl0X2ZvbGlvKGZvbGlvKTsKLQlp ZiAoZmF1bHRfZm9saW8gIT0gZm9saW8pCi0JCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JZm9saW9f cHV0KGZvbGlvKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lw KHN0YXJ0LCBlbmQsIHdhbGspOwotCWlmIChwbWRfbm9uZShwbWRwX2dldF9sb2NrbGVzcyhwbWRw KSkpCi0JCXJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X2hvbGUoc3RhcnQsIGVuZCwgLTEsIHdh bGspOwotCi1kb25lOgotCXJldHVybiAtRU5PRU5UOwotfQotCi1zdGF0aWMgaW50IG1pZ3JhdGVf dm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQs Ci0JCQkJICAgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJICAgc3RydWN0IG1tX3dhbGsgKndhbGsp Ci17Ci0Jc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlID0gd2Fsay0+cHJpdmF0ZTsKLQlzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKLQlzdHJ1Y3QgbW1fc3RydWN0ICpt bSA9IHZtYS0+dm1fbW07Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gc3RhcnQsIHVubWFwcGVkID0g MDsKLQlzcGlubG9ja190ICpwdGw7Ci0Jc3RydWN0IGZvbGlvICpmYXVsdF9mb2xpbyA9IG1pZ3Jh dGUtPmZhdWx0X3BhZ2UgPwotCQlwYWdlX2ZvbGlvKG1pZ3JhdGUtPmZhdWx0X3BhZ2UpIDogTlVM TDsKLQlwdGVfdCAqcHRlcDsKLQotYWdhaW46Ci0JaWYgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8 fCAhcG1kX3ByZXNlbnQoKnBtZHApKSB7Ci0JCWludCByZXQgPSBtaWdyYXRlX3ZtYV9jb2xsZWN0 X2h1Z2VfcG1kKHBtZHAsIHN0YXJ0LCBlbmQsIHdhbGssIGZhdWx0X2ZvbGlvKTsKLQotCQlpZiAo cmV0ID09IC1FQUdBSU4pCi0JCQlnb3RvIGFnYWluOwotCQlpZiAocmV0ID09IDApCi0JCQlyZXR1 cm4gMDsKLQl9Ci0KLQlwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kcCwgc3RhcnQs ICZwdGwpOwotCWlmICghcHRlcCkKLQkJZ290byBhZ2FpbjsKLQlsYXp5X21tdV9tb2RlX2VuYWJs ZSgpOwotCXB0ZXAgKz0gKGFkZHIgLSBzdGFydCkgLyBQQUdFX1NJWkU7Ci0KLQlmb3IgKDsgYWRk ciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUsIHB0ZXArKykgewotCQlzdHJ1Y3QgZGV2X3BhZ2Vt YXAgKnBnbWFwOwotCQl1bnNpZ25lZCBsb25nIG1wZm4gPSAwLCBwZm47Ci0JCXN0cnVjdCBmb2xp byAqZm9saW87Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCQlzb2Z0bGVhZl90IGVudHJ5OwotCQlw dGVfdCBwdGU7Ci0KLQkJcHRlID0gcHRlcF9nZXQocHRlcCk7Ci0KLQkJaWYgKHB0ZV9ub25lKHB0 ZSkpIHsKLQkJCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHsKLQkJCQltcGZuID0gTUlHUkFU RV9QRk5fTUlHUkFURTsKLQkJCQltaWdyYXRlLT5jcGFnZXMrKzsKLQkJCX0KLQkJCWdvdG8gbmV4 dDsKLQkJfQotCi0JCWlmICghcHRlX3ByZXNlbnQocHRlKSkgewotCQkJLyoKLQkJCSAqIE9ubHkg Y2FyZSBhYm91dCB1bmFkZHJlc3NhYmxlIGRldmljZSBwYWdlIHNwZWNpYWwKLQkJCSAqIHBhZ2Ug dGFibGUgZW50cnkuIE90aGVyIHNwZWNpYWwgc3dhcCBlbnRyaWVzIGFyZSBub3QKLQkJCSAqIG1p Z3JhdGFibGUsIGFuZCB3ZSBpZ25vcmUgcmVndWxhciBzd2FwcGVkIHBhZ2UuCi0JCQkgKi8KLQkJ CWVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTsKLQkJCWlmICghc29mdGxlYWZfaXNfZGV2 aWNlX3ByaXZhdGUoZW50cnkpKQotCQkJCWdvdG8gbmV4dDsKLQotCQkJcGFnZSA9IHNvZnRsZWFm X3RvX3BhZ2UoZW50cnkpOwotCQkJcGdtYXAgPSBwYWdlX3BnbWFwKHBhZ2UpOwotCQkJaWYgKCEo bWlncmF0ZS0+ZmxhZ3MgJgotCQkJCU1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkg fHwKLQkJCSAgICBwZ21hcC0+b3duZXIgIT0gbWlncmF0ZS0+cGdtYXBfb3duZXIpCi0JCQkJZ290 byBuZXh0OwotCi0JCQlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7Ci0JCQlpZiAoZm9saW9fdGVz dF9sYXJnZShmb2xpbykpIHsKLQkJCQlpbnQgcmV0OwotCi0JCQkJbGF6eV9tbXVfbW9kZV9kaXNh YmxlKCk7Ci0JCQkJcHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpOwotCQkJCXJldCA9IG1pZ3Jh dGVfdm1hX3NwbGl0X2ZvbGlvKGZvbGlvLAotCQkJCQkJCSAgbWlncmF0ZS0+ZmF1bHRfcGFnZSk7 Ci0KLQkJCQlpZiAocmV0KSB7Ci0JCQkJCWlmICh1bm1hcHBlZCkKLQkJCQkJCWZsdXNoX3RsYl9y YW5nZSh3YWxrLT52bWEsIHN0YXJ0LCBlbmQpOwotCi0JCQkJCXJldHVybiBtaWdyYXRlX3ZtYV9j b2xsZWN0X3NraXAoYWRkciwgZW5kLCB3YWxrKTsKLQkJCQl9Ci0KLQkJCQlnb3RvIGFnYWluOwot CQkJfQotCi0JCQltcGZuID0gbWlncmF0ZV9wZm4ocGFnZV90b19wZm4ocGFnZSkpIHwKLQkJCQkJ TUlHUkFURV9QRk5fTUlHUkFURTsKLQkJCWlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93 cml0ZShlbnRyeSkpCi0JCQkJbXBmbiB8PSBNSUdSQVRFX1BGTl9XUklURTsKLQkJfSBlbHNlIHsK LQkJCXBmbiA9IHB0ZV9wZm4ocHRlKTsKLQkJCWlmIChpc196ZXJvX3BmbihwZm4pICYmCi0JCQkg ICAgKG1pZ3JhdGUtPmZsYWdzICYgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTSkpIHsKLQkJCQlt cGZuID0gTUlHUkFURV9QRk5fTUlHUkFURTsKLQkJCQltaWdyYXRlLT5jcGFnZXMrKzsKLQkJCQln b3RvIG5leHQ7Ci0JCQl9Ci0JCQlwYWdlID0gdm1fbm9ybWFsX3BhZ2UobWlncmF0ZS0+dm1hLCBh ZGRyLCBwdGUpOwotCQkJaWYgKHBhZ2UgJiYgIWlzX3pvbmVfZGV2aWNlX3BhZ2UocGFnZSkgJiYK LQkJCSAgICAhKG1pZ3JhdGUtPmZsYWdzICYgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTSkpIHsK LQkJCQlnb3RvIG5leHQ7Ci0JCQl9IGVsc2UgaWYgKHBhZ2UgJiYgaXNfZGV2aWNlX2NvaGVyZW50 X3BhZ2UocGFnZSkpIHsKLQkJCQlwZ21hcCA9IHBhZ2VfcGdtYXAocGFnZSk7Ci0KLQkJCQlpZiAo IShtaWdyYXRlLT5mbGFncyAmCi0JCQkJCU1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfQ09IRVJF TlQpIHx8Ci0JCQkJCXBnbWFwLT5vd25lciAhPSBtaWdyYXRlLT5wZ21hcF9vd25lcikKLQkJCQkJ Z290byBuZXh0OwotCQkJfQotCQkJZm9saW8gPSBwYWdlID8gcGFnZV9mb2xpbyhwYWdlKSA6IE5V TEw7Ci0JCQlpZiAoZm9saW8gJiYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHsKLQkJCQlpbnQg cmV0OwotCi0JCQkJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7Ci0JCQkJcHRlX3VubWFwX3VubG9j ayhwdGVwLCBwdGwpOwotCQkJCXJldCA9IG1pZ3JhdGVfdm1hX3NwbGl0X2ZvbGlvKGZvbGlvLAot CQkJCQkJCSAgbWlncmF0ZS0+ZmF1bHRfcGFnZSk7Ci0KLQkJCQlpZiAocmV0KSB7Ci0JCQkJCWlm ICh1bm1hcHBlZCkKLQkJCQkJCWZsdXNoX3RsYl9yYW5nZSh3YWxrLT52bWEsIHN0YXJ0LCBlbmQp OwotCi0JCQkJCXJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoYWRkciwgZW5kLCB3YWxr KTsKLQkJCQl9Ci0KLQkJCQlnb3RvIGFnYWluOwotCQkJfQotCQkJbXBmbiA9IG1pZ3JhdGVfcGZu KHBmbikgfCBNSUdSQVRFX1BGTl9NSUdSQVRFOwotCQkJbXBmbiB8PSBwdGVfd3JpdGUocHRlKSA/ IE1JR1JBVEVfUEZOX1dSSVRFIDogMDsKLQkJfQotCi0JCWlmICghcGFnZSB8fCAhcGFnZS0+bWFw cGluZykgewotCQkJbXBmbiA9IDA7Ci0JCQlnb3RvIG5leHQ7Ci0JCX0KLQotCQkvKgotCQkgKiBC eSBnZXR0aW5nIGEgcmVmZXJlbmNlIG9uIHRoZSBmb2xpbyB3ZSBwaW4gaXQgYW5kIHRoYXQgYmxv Y2tzCi0JCSAqIGFueSBraW5kIG9mIG1pZ3JhdGlvbi4gU2lkZSBlZmZlY3QgaXMgdGhhdCBpdCAi ZnJlZXplcyIgdGhlCi0JCSAqIHB0ZS4KLQkJICoKLQkJICogV2UgZHJvcCB0aGlzIHJlZmVyZW5j ZSBhZnRlciBpc29sYXRpbmcgdGhlIGZvbGlvIGZyb20gdGhlIGxydQotCQkgKiBmb3Igbm9uIGRl dmljZSBmb2xpbyAoZGV2aWNlIGZvbGlvIGFyZSBub3Qgb24gdGhlIGxydSBhbmQgdGh1cwotCQkg KiBjYW4ndCBiZSBkcm9wcGVkIGZyb20gaXQpLgotCQkgKi8KLQkJZm9saW8gPSBwYWdlX2ZvbGlv KHBhZ2UpOwotCQlmb2xpb19nZXQoZm9saW8pOwotCi0JCS8qCi0JCSAqIFdlIHJlbHkgb24gZm9s aW9fdHJ5bG9jaygpIHRvIGF2b2lkIGRlYWRsb2NrIGJldHdlZW4KLQkJICogY29uY3VycmVudCBt aWdyYXRpb25zIHdoZXJlIGVhY2ggaXMgd2FpdGluZyBvbiB0aGUgb3RoZXJzCi0JCSAqIGZvbGlv IGxvY2suIElmIHdlIGNhbid0IGltbWVkaWF0ZWx5IGxvY2sgdGhlIGZvbGlvIHdlIGZhaWwgdGhp cwotCQkgKiBtaWdyYXRpb24gYXMgaXQgaXMgb25seSBiZXN0IGVmZm9ydCBhbnl3YXkuCi0JCSAq Ci0JCSAqIElmIHdlIGNhbiBsb2NrIHRoZSBmb2xpbyBpdCdzIHNhZmUgdG8gc2V0IHVwIGEgbWln cmF0aW9uIGVudHJ5Ci0JCSAqIG5vdy4gSW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBmb2xp byBpcyBtYXBwZWQgb25jZSBpbiBhCi0JCSAqIHNpbmdsZSBwcm9jZXNzIHNldHRpbmcgdXAgdGhl IG1pZ3JhdGlvbiBlbnRyeSBub3cgaXMgYW4KLQkJICogb3B0aW1pc2F0aW9uIHRvIGF2b2lkIHdh bGtpbmcgdGhlIHJtYXAgbGF0ZXIgd2l0aAotCQkgKiB0cnlfdG9fbWlncmF0ZSgpLgotCQkgKi8K LQkJaWYgKGZhdWx0X2ZvbGlvID09IGZvbGlvIHx8IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7Ci0J CQlib29sIGFub25fZXhjbHVzaXZlOwotCQkJcHRlX3Qgc3dwX3B0ZTsKLQotCQkJZmx1c2hfY2Fj aGVfcGFnZSh2bWEsIGFkZHIsIHB0ZV9wZm4ocHRlKSk7Ci0JCQlhbm9uX2V4Y2x1c2l2ZSA9IGZv bGlvX3Rlc3RfYW5vbihmb2xpbykgJiYKLQkJCQkJICBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTsK LQkJCWlmIChhbm9uX2V4Y2x1c2l2ZSkgewotCQkJCXB0ZSA9IHB0ZXBfY2xlYXJfZmx1c2godm1h LCBhZGRyLCBwdGVwKTsKLQotCQkJCWlmIChmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3B0ZShm b2xpbywgcGFnZSkpIHsKLQkJCQkJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKTsKLQkJ CQkJaWYgKGZhdWx0X2ZvbGlvICE9IGZvbGlvKQotCQkJCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsK LQkJCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCQkJbXBmbiA9IDA7Ci0JCQkJCWdvdG8gbmV4dDsK LQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXB0ZSA9IHB0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRk ciwgcHRlcCk7Ci0JCQl9Ci0KLQkJCW1pZ3JhdGUtPmNwYWdlcysrOwotCi0JCQkvKiBTZXQgdGhl IGRpcnR5IGZsYWcgb24gdGhlIGZvbGlvIG5vdyB0aGUgcHRlIGlzIGdvbmUuICovCi0JCQlpZiAo cHRlX2RpcnR5KHB0ZSkpCi0JCQkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7Ci0KLQkJCS8qIFNl dHVwIHNwZWNpYWwgbWlncmF0aW9uIHBhZ2UgdGFibGUgZW50cnkgKi8KLQkJCWlmIChtcGZuICYg TUlHUkFURV9QRk5fV1JJVEUpCi0JCQkJZW50cnkgPSBtYWtlX3dyaXRhYmxlX21pZ3JhdGlvbl9l bnRyeSgKLQkJCQkJCQlwYWdlX3RvX3BmbihwYWdlKSk7Ci0JCQllbHNlIGlmIChhbm9uX2V4Y2x1 c2l2ZSkKLQkJCQllbnRyeSA9IG1ha2VfcmVhZGFibGVfZXhjbHVzaXZlX21pZ3JhdGlvbl9lbnRy eSgKLQkJCQkJCQlwYWdlX3RvX3BmbihwYWdlKSk7Ci0JCQllbHNlCi0JCQkJZW50cnkgPSBtYWtl X3JlYWRhYmxlX21pZ3JhdGlvbl9lbnRyeSgKLQkJCQkJCQlwYWdlX3RvX3BmbihwYWdlKSk7Ci0J CQlpZiAocHRlX3ByZXNlbnQocHRlKSkgewotCQkJCWlmIChwdGVfeW91bmcocHRlKSkKLQkJCQkJ ZW50cnkgPSBtYWtlX21pZ3JhdGlvbl9lbnRyeV95b3VuZyhlbnRyeSk7Ci0JCQkJaWYgKHB0ZV9k aXJ0eShwdGUpKQotCQkJCQllbnRyeSA9IG1ha2VfbWlncmF0aW9uX2VudHJ5X2RpcnR5KGVudHJ5 KTsKLQkJCX0KLQkJCXN3cF9wdGUgPSBzd3BfZW50cnlfdG9fcHRlKGVudHJ5KTsKLQkJCWlmIChw dGVfcHJlc2VudChwdGUpKSB7Ci0JCQkJaWYgKHB0ZV9zb2Z0X2RpcnR5KHB0ZSkpCi0JCQkJCXN3 cF9wdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTsKLQkJCQlpZiAocHRlX3VmZmRf d3AocHRlKSkKLQkJCQkJc3dwX3B0ZSA9IHB0ZV9zd3BfbWt1ZmZkX3dwKHN3cF9wdGUpOwotCQkJ fSBlbHNlIHsKLQkJCQlpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZSkpCi0JCQkJCXN3cF9wdGUg PSBwdGVfc3dwX21rc29mdF9kaXJ0eShzd3BfcHRlKTsKLQkJCQlpZiAocHRlX3N3cF91ZmZkX3dw KHB0ZSkpCi0JCQkJCXN3cF9wdGUgPSBwdGVfc3dwX21rdWZmZF93cChzd3BfcHRlKTsKLQkJCX0K LQkJCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHN3cF9wdGUpOwotCi0JCQkvKgotCQkJICog VGhpcyBpcyBsaWtlIHJlZ3VsYXIgdW5tYXA6IHdlIHJlbW92ZSB0aGUgcm1hcCBhbmQKLQkJCSAq IGRyb3AgdGhlIGZvbGlvIHJlZmNvdW50LiBUaGUgZm9saW8gd29uJ3QgYmUgZnJlZWQsIGFzCi0J CQkgKiB3ZSB0b29rIGEgcmVmZXJlbmNlIGp1c3QgYWJvdmUuCi0JCQkgKi8KLQkJCWZvbGlvX3Jl bW92ZV9ybWFwX3B0ZShmb2xpbywgcGFnZSwgdm1hKTsKLQkJCWZvbGlvX3B1dChmb2xpbyk7Ci0K LQkJCWlmIChwdGVfcHJlc2VudChwdGUpKQotCQkJCXVubWFwcGVkKys7Ci0JCX0gZWxzZSB7Ci0J CQlmb2xpb19wdXQoZm9saW8pOwotCQkJbXBmbiA9IDA7Ci0JCX0KLQotbmV4dDoKLQkJbWlncmF0 ZS0+ZHN0W21pZ3JhdGUtPm5wYWdlc10gPSAwOwotCQltaWdyYXRlLT5zcmNbbWlncmF0ZS0+bnBh Z2VzKytdID0gbXBmbjsKLQl9Ci0KLQkvKiBPbmx5IGZsdXNoIHRoZSBUTEIgaWYgd2UgYWN0dWFs bHkgbW9kaWZpZWQgYW55IGVudHJpZXMgKi8KLQlpZiAodW5tYXBwZWQpCi0JCWZsdXNoX3RsYl9y YW5nZSh3YWxrLT52bWEsIHN0YXJ0LCBlbmQpOwotCi0JbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7 Ci0JcHRlX3VubWFwX3VubG9jayhwdGVwIC0gMSwgcHRsKTsKLQotCXJldHVybiAwOwotfQotCi1z dGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIG1pZ3JhdGVfdm1hX3dhbGtfb3BzID0gewot CS5wbWRfZW50cnkJCT0gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQsCi0JLnB0ZV9ob2xlCQk9IG1p Z3JhdGVfdm1hX2NvbGxlY3RfaG9sZSwKLQkud2Fsa19sb2NrCQk9IFBHV0FMS19SRExPQ0ssCi19 OwotCi0vKgotICogbWlncmF0ZV92bWFfY29sbGVjdCgpIC0gY29sbGVjdCBwYWdlcyBvdmVyIGEg cmFuZ2Ugb2YgdmlydHVhbCBhZGRyZXNzZXMKLSAqIEBtaWdyYXRlOiBtaWdyYXRlIHN0cnVjdCBj b250YWluaW5nIGFsbCBtaWdyYXRpb24gaW5mb3JtYXRpb24KLSAqCi0gKiBUaGlzIHdpbGwgd2Fs ayB0aGUgQ1BVIHBhZ2UgdGFibGUuIEZvciBlYWNoIHZpcnR1YWwgYWRkcmVzcyBiYWNrZWQgYnkg YQotICogdmFsaWQgcGFnZSwgaXQgdXBkYXRlcyB0aGUgc3JjIGFycmF5IGFuZCB0YWtlcyBhIHJl ZmVyZW5jZSBvbiB0aGUgcGFnZSwgaW4KLSAqIG9yZGVyIHRvIHBpbiB0aGUgcGFnZSB1bnRpbCB3 ZSBsb2NrIGl0IGFuZCB1bm1hcCBpdC4KLSAqLwotc3RhdGljIHZvaWQgbWlncmF0ZV92bWFfY29s bGVjdChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpCi17Ci0Jc3RydWN0IG1tdV9ub3RpZmll cl9yYW5nZSByYW5nZTsKLQotCS8qCi0JICogTm90ZSB0aGF0IHRoZSBwZ21hcF9vd25lciBpcyBw YXNzZWQgdG8gdGhlIG1tdSBub3RpZmllciBjYWxsYmFjayBzbwotCSAqIHRoYXQgdGhlIHJlZ2lz dGVyZWQgZGV2aWNlIGRyaXZlciBjYW4gc2tpcCBpbnZhbGlkYXRpbmcgZGV2aWNlCi0JICogcHJp dmF0ZSBwYWdlIG1hcHBpbmdzIHRoYXQgd29uJ3QgYmUgbWlncmF0ZWQuCi0JICovCi0JbW11X25v dGlmaWVyX3JhbmdlX2luaXRfb3duZXIoJnJhbmdlLCBNTVVfTk9USUZZX01JR1JBVEUsIDAsCi0J CW1pZ3JhdGUtPnZtYS0+dm1fbW0sIG1pZ3JhdGUtPnN0YXJ0LCBtaWdyYXRlLT5lbmQsCi0JCW1p Z3JhdGUtPnBnbWFwX293bmVyKTsKLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFy dCgmcmFuZ2UpOwotCi0Jd2Fsa19wYWdlX3JhbmdlKG1pZ3JhdGUtPnZtYS0+dm1fbW0sIG1pZ3Jh dGUtPnN0YXJ0LCBtaWdyYXRlLT5lbmQsCi0JCQkmbWlncmF0ZV92bWFfd2Fsa19vcHMsIG1pZ3Jh dGUpOwotCi0JbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCZyYW5nZSk7Ci0JbWln cmF0ZS0+ZW5kID0gbWlncmF0ZS0+c3RhcnQgKyAobWlncmF0ZS0+bnBhZ2VzIDw8IFBBR0VfU0hJ RlQpOwotfQotCiAvKgogICogbWlncmF0ZV92bWFfY2hlY2tfcGFnZSgpIC0gY2hlY2sgaWYgcGFn ZSBpcyBwaW5uZWQgb3Igbm90CiAgKiBAcGFnZTogc3RydWN0IHBhZ2UgdG8gY2hlY2sKQEAgLTcy OCw3ICsyMjYsMTcgQEAgc3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3Jh dGVfdm1hICptaWdyYXRlKQogICovCiBpbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3Jh dGVfdm1hICphcmdzKQogeworCWludCByZXQ7CiAJbG9uZyBucl9wYWdlcyA9IChhcmdzLT5lbmQg LSBhcmdzLT5zdGFydCkgPj4gUEFHRV9TSElGVDsKKwlzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0g eworCQkubm90aWZpZXIgPSBOVUxMLAorCQkuc3RhcnQgPSBhcmdzLT5zdGFydCwKKwkJLmVuZCA9 IGFyZ3MtPmVuZCwKKwkJLmhtbV9wZm5zID0gYXJncy0+c3JjLAorCQkuZGV2X3ByaXZhdGVfb3du ZXIgPSBhcmdzLT5wZ21hcF9vd25lciwKKwkJLm1pZ3JhdGUgPSBhcmdzLAorCQkuZGVmYXVsdF9m bGFncyA9IEhNTV9QRk5fUkVRX01JR1JBVEUKKwl9OwogCiAJYXJncy0+c3RhcnQgJj0gUEFHRV9N QVNLOwogCWFyZ3MtPmVuZCAmPSBQQUdFX01BU0s7CkBAIC03NTMsMTcgKzI2MSwyNSBAQCBpbnQg bWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKQogCWFyZ3MtPmNwYWdl cyA9IDA7CiAJYXJncy0+bnBhZ2VzID0gMDsKIAotCW1pZ3JhdGVfdm1hX2NvbGxlY3QoYXJncyk7 CisJaWYgKGFyZ3MtPmZsYWdzICYgTUlHUkFURV9WTUFfRkFVTFQpCisJCXJhbmdlLmRlZmF1bHRf ZmxhZ3MgfD0gSE1NX1BGTl9SRVFfRkFVTFQ7CisKKwlyZXQgPSBobW1fcmFuZ2VfZmF1bHQoJnJh bmdlKTsKIAotCWlmIChhcmdzLT5jcGFnZXMpCi0JCW1pZ3JhdGVfdm1hX3VubWFwKGFyZ3MpOwor CW1pZ3JhdGVfaG1tX3JhbmdlX3NldHVwKCZyYW5nZSk7CisKKwkvKiBSZW1vdmUgbWlncmF0aW9u IFBURXMgKi8KKwlpZiAocmV0KSB7CisJCW1pZ3JhdGVfdm1hX3BhZ2VzKGFyZ3MpOworCQltaWdy YXRlX3ZtYV9maW5hbGl6ZShhcmdzKTsKKwl9CiAKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQgcGFn ZXMgYXJlIGxvY2tlZCBhbmQgdW5tYXBwZWQsIGFuZCB0aHVzIHRoZXkgaGF2ZQogCSAqIHN0YWJs ZSBjb250ZW50IGFuZCBjYW4gc2FmZWx5IGJlIGNvcGllZCB0byBkZXN0aW5hdGlvbiBtZW1vcnkg dGhhdAogCSAqIGlzIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVycy4KIAkgKi8KLQlyZXR1cm4gMDsK KwlyZXR1cm4gcmV0OwogCiB9CiBFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTsKLS0g CjIuNTAuMAoK