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=-9.5 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=unavailable 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 63D29C17445 for ; Mon, 11 Nov 2019 14:58:42 +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 3FDB22084F for ; Mon, 11 Nov 2019 14:58:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3FDB22084F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B6A0C6E91F; Mon, 11 Nov 2019 14:58:39 +0000 (UTC) Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by gabe.freedesktop.org (Postfix) with ESMTPS id 574C26E91C; Mon, 11 Nov 2019 14:58:37 +0000 (UTC) Received: by mail-wr1-x433.google.com with SMTP id b3so14938437wrs.13; Mon, 11 Nov 2019 06:58:37 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LS7qaB/3n7zcrd4hU75CQkxHfD4EpypcUu2dVtkCMGs=; b=I+EzmrJaTdY1SfSKI+qPv3ByL6ptZJZ55zEOWVdeXeMXInncNLVVMJ/C7XS0NdFD4H E2aLjhuJBPzUjUqQqcLIaBZA+37qCrPx+ruE+nbrwn4TJ05xcKy/JTr7KwJQdYs/JA6F GDhKosDgytVet2Y+V+iNj7I3YQq6UljvCY6aZ3D9m7aEjLNcYcQEA0OZf5b6yaKCaur8 tNvbGs1jwKf/Ox6RDtrqLGvbW6+xth2gjSA4KyyrY9wV850QBfmJGx6ZZp+JOraoQt/t nXVIgYUOAfkA02bfGWQ1vROnpUd9YOxt+VWDYez1RAg2eUoIVh4PqcCGDWzjSjWGcBBd 9n2A== X-Gm-Message-State: APjAAAU3L5VRmiifSgl7euqn3Ma9qK9rf1flWHca2cr/yl+mjlPBo/Wx /0SOHVTkNW2t9CGfekkahs4= X-Google-Smtp-Source: APXvYqxLZY7JxQ5e/Y/ARBcp8hlaHRUQ+p2MVaF+QsjjD/ZSG0iKUH5RxBEDI0vRVE13eovhqjMN0g== X-Received: by 2002:a5d:4585:: with SMTP id p5mr21988842wrq.134.1573484315795; Mon, 11 Nov 2019 06:58:35 -0800 (PST) Received: from abel.fritz.box ([2a02:908:1252:fb60:5d5a:1834:5ed:1958]) by smtp.gmail.com with ESMTPSA id t185sm22967069wmf.45.2019.11.11.06.58.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Nov 2019 06:58:35 -0800 (PST) From: "=?UTF-8?q?Christian=20K=C3=B6nig?=" X-Google-Original-From: =?UTF-8?q?Christian=20K=C3=B6nig?= To: Kevin1.Wang@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 3/4] drm/ttm: rework BO delayed delete. Date: Mon, 11 Nov 2019 15:58:31 +0100 Message-Id: <20191111145832.37320-3-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191111145832.37320-1-christian.koenig@amd.com> References: <20191111145832.37320-1-christian.koenig@amd.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=LS7qaB/3n7zcrd4hU75CQkxHfD4EpypcUu2dVtkCMGs=; b=Y2S/b3I4de+IsUufqvhbetfGWogsnA7+s18AsuzQ/k3PJL6/nN7t+c1F3lT6j+ob1g jcdXKe+Iovzhc22MGn16HvtjPibNvDYJubyogpwwNyh7GNgqYPY/v68qC04f0Myr8lmA g4G6qwCo1di9yI434K+PX+nb0drEUjpHnU3mRpDWWCKqdx0Ka/2rMM9JxuRC6QZjGAqd NPr/ccEOsqNVVLXJ4ineMbheUmQjar5YAQGLP8my2xa7sI0mh5xtrhRYVnX1HNzPA/Ak cabiOHG/uy+ZSw2C3ZAHWmd9gfTUbsTCIy0uJeetFrzSMjouso5d1RFXYXM2yaJyn/cB tBAA== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191111145831.CLvazG9is-n8V3vE4s8xFyV3eCdTazGqu84xLWMCNok@z> VGhpcyBwYXRjaCByZXdvcmtzIHRoZSB3aG9sZSBkZWxheWVkIGRlbGV0aW9uIG9mIEJPcyB3aGlj aCBhcmVuJ3QgaWRsZS4KCkluc3RlYWQgb2YgaGF2aW5nIHR3byBjb3VudGVycyBmb3IgdGhlIEJP IHN0cnVjdHVyZSB3ZSByZXN1cnJlY3QgdGhlIEJPCndoZW4gd2UgZmluZCB0aGF0IGEgZGVsZXRl ZCBCTyBpcyBub3QgaWRsZSB5ZXQuCgpUaGlzIGhhcyBtYW55IGFkdmFudGFnZXMsIGVzcGVjaWFs bHkgdGhhdCB3ZSBkb24ndCBuZWVkIHRvCmluY3JlbWVudC9kZWNyZW1lbnQgdGhlIEJPcyByZWZl cmVuY2UgY291bnRlciBhbnkgbW9yZSB3aGVuIGl0Cm1vdmVzIG9uIHRoZSBMUlVzLgoKU2lnbmVk LW9mZi1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgotLS0K IGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgICAgICB8IDIxNSArKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYyB8ICAgMSAt CiBpbmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oICAgICAgfCAgMTEgKy0KIDMgZmlsZXMgY2hh bmdlZCwgOTcgaW5zZXJ0aW9ucygrKSwgMTMwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5j CmluZGV4IDExNzg5ODBmNDE0Ny4uNTcwYjBlMTA4OWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vdHRtL3R0bV9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKQEAg LTE0NSwyNiArMTQ1LDYgQEAgc3RhdGljIGlubGluZSB1aW50MzJfdCB0dG1fYm9fdHlwZV9mbGFn cyh1bnNpZ25lZCB0eXBlKQogCXJldHVybiAxIDw8ICh0eXBlKTsKIH0KIAotc3RhdGljIHZvaWQg dHRtX2JvX3JlbGVhc2VfbGlzdChzdHJ1Y3Qga3JlZiAqbGlzdF9rcmVmKQotewotCXN0cnVjdCB0 dG1fYnVmZmVyX29iamVjdCAqYm8gPQotCSAgICBjb250YWluZXJfb2YobGlzdF9rcmVmLCBzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QsIGxpc3Rfa3JlZik7Ci0Jc2l6ZV90IGFjY19zaXplID0gYm8t PmFjY19zaXplOwotCi0JQlVHX09OKGtyZWZfcmVhZCgmYm8tPmxpc3Rfa3JlZikpOwotCUJVR19P TihrcmVmX3JlYWQoJmJvLT5rcmVmKSk7Ci0JQlVHX09OKGJvLT5tZW0ubW1fbm9kZSAhPSBOVUxM KTsKLQlCVUdfT04oIWxpc3RfZW1wdHkoJmJvLT5scnUpKTsKLQlCVUdfT04oIWxpc3RfZW1wdHko JmJvLT5kZGVzdHJveSkpOwotCXR0bV90dF9kZXN0cm95KGJvLT50dG0pOwotCWF0b21pY19kZWMo JnR0bV9ib19nbG9iLmJvX2NvdW50KTsKLQlkbWFfZmVuY2VfcHV0KGJvLT5tb3ZpbmcpOwotCWlm ICghdHRtX2JvX3VzZXNfZW1iZWRkZWRfZ2VtX29iamVjdChibykpCi0JCWRtYV9yZXN2X2Zpbmko JmJvLT5iYXNlLl9yZXN2KTsKLQliby0+ZGVzdHJveShibyk7Ci0JdHRtX21lbV9nbG9iYWxfZnJl ZSgmdHRtX21lbV9nbG9iLCBhY2Nfc2l6ZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHR0bV9ib19hZGRf bWVtX3RvX2xydShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCQkJCSAgc3RydWN0IHR0 bV9tZW1fcmVnICptZW0pCiB7CkBAIC0xODEsMjEgKzE2MSwxNCBAQCBzdGF0aWMgdm9pZCB0dG1f Ym9fYWRkX21lbV90b19scnUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIAogCW1hbiA9 ICZiZGV2LT5tYW5bbWVtLT5tZW1fdHlwZV07CiAJbGlzdF9hZGRfdGFpbCgmYm8tPmxydSwgJm1h bi0+bHJ1W2JvLT5wcmlvcml0eV0pOwotCWtyZWZfZ2V0KCZiby0+bGlzdF9rcmVmKTsKIAogCWlm ICghKG1hbi0+ZmxhZ3MgJiBUVE1fTUVNVFlQRV9GTEFHX0ZJWEVEKSAmJiBiby0+dHRtICYmCiAJ ICAgICEoYm8tPnR0bS0+cGFnZV9mbGFncyAmIChUVE1fUEFHRV9GTEFHX1NHIHwKIAkJCQkgICAg IFRUTV9QQUdFX0ZMQUdfU1dBUFBFRCkpKSB7CiAJCWxpc3RfYWRkX3RhaWwoJmJvLT5zd2FwLCAm dHRtX2JvX2dsb2Iuc3dhcF9scnVbYm8tPnByaW9yaXR5XSk7Ci0JCWtyZWZfZ2V0KCZiby0+bGlz dF9rcmVmKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHR0bV9ib19yZWZfYnVnKHN0cnVjdCBrcmVm ICpsaXN0X2tyZWYpCi17Ci0JQlVHKCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHR0bV9ib19kZWxfZnJv bV9scnUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKIHsKIAlzdHJ1Y3QgdHRtX2JvX2Rl dmljZSAqYmRldiA9IGJvLT5iZGV2OwpAQCAtMjAzLDEyICsxNzYsMTAgQEAgc3RhdGljIHZvaWQg dHRtX2JvX2RlbF9mcm9tX2xydShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQogCiAJaWYg KCFsaXN0X2VtcHR5KCZiby0+c3dhcCkpIHsKIAkJbGlzdF9kZWxfaW5pdCgmYm8tPnN3YXApOwot CQlrcmVmX3B1dCgmYm8tPmxpc3Rfa3JlZiwgdHRtX2JvX3JlZl9idWcpOwogCQlub3RpZnkgPSB0 cnVlOwogCX0KIAlpZiAoIWxpc3RfZW1wdHkoJmJvLT5scnUpKSB7CiAJCWxpc3RfZGVsX2luaXQo JmJvLT5scnUpOwotCQlrcmVmX3B1dCgmYm8tPmxpc3Rfa3JlZiwgdHRtX2JvX3JlZl9idWcpOwog CQlub3RpZnkgPSB0cnVlOwogCX0KIApAQCAtNDQ2LDc0ICs0MTcsMTcgQEAgc3RhdGljIHZvaWQg dHRtX2JvX2ZsdXNoX2FsbF9mZW5jZXMoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKIAkJ ZG1hX2ZlbmNlX2VuYWJsZV9zd19zaWduYWxpbmcoZmVuY2UpOwogCiAJZm9yIChpID0gMDsgZm9i aiAmJiBpIDwgZm9iai0+c2hhcmVkX2NvdW50OyArK2kpIHsKLQkJZmVuY2UgPSByY3VfZGVyZWZl cmVuY2VfcHJvdGVjdGVkKGZvYmotPnNoYXJlZFtpXSwKLQkJCQkJZG1hX3Jlc3ZfaGVsZChiby0+ YmFzZS5yZXN2KSk7CisJCWZlbmNlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChmb2JqLT5z aGFyZWRbaV0sIHRydWUpOwogCiAJCWlmICghZmVuY2UtPm9wcy0+c2lnbmFsZWQpCiAJCQlkbWFf ZmVuY2VfZW5hYmxlX3N3X3NpZ25hbGluZyhmZW5jZSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCB0 dG1fYm9fY2xlYW51cF9yZWZzX29yX3F1ZXVlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8p Ci17Ci0Jc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYgPSBiby0+YmRldjsKLQlpbnQgcmV0Owot Ci0JcmV0ID0gdHRtX2JvX2luZGl2aWR1YWxpemVfcmVzdihibyk7Ci0JaWYgKHJldCkgewotCQkv KiBMYXN0IHJlc29ydCwgaWYgd2UgZmFpbCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZQotCQkg KiBmZW5jZXMgYmxvY2sgZm9yIHRoZSBCTyB0byBiZWNvbWUgaWRsZQotCQkgKi8KLQkJZG1hX3Jl c3Zfd2FpdF90aW1lb3V0X3JjdShiby0+YmFzZS5yZXN2LCB0cnVlLCBmYWxzZSwKLQkJCQkJCSAg ICAzMCAqIEhaKTsKLQkJc3Bpbl9sb2NrKCZ0dG1fYm9fZ2xvYi5scnVfbG9jayk7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZ0dG1fYm9fZ2xvYi5scnVfbG9jayk7Ci0JcmV0ID0g ZG1hX3Jlc3ZfdHJ5bG9jayhiby0+YmFzZS5yZXN2KSA/IDAgOiAtRUJVU1k7Ci0JaWYgKCFyZXQp IHsKLQkJaWYgKGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfcmN1KCZiby0+YmFzZS5fcmVzdiwgdHJ1 ZSkpIHsKLQkJCXR0bV9ib19kZWxfZnJvbV9scnUoYm8pOwotCQkJc3Bpbl91bmxvY2soJnR0bV9i b19nbG9iLmxydV9sb2NrKTsKLQkJCWlmIChiby0+YmFzZS5yZXN2ICE9ICZiby0+YmFzZS5fcmVz dikKLQkJCQlkbWFfcmVzdl91bmxvY2soJmJvLT5iYXNlLl9yZXN2KTsKLQotCQkJdHRtX2JvX2Ns ZWFudXBfbWVtdHlwZV91c2UoYm8pOwotCQkJZG1hX3Jlc3ZfdW5sb2NrKGJvLT5iYXNlLnJlc3Yp OwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJdHRtX2JvX2ZsdXNoX2FsbF9mZW5jZXMoYm8pOwotCi0J CS8qCi0JCSAqIE1ha2UgTk9fRVZJQ1QgYm9zIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB0bwotCQkg KiBzaHJpbmtlcnMsIG5vdyB0aGF0IHRoZXkgYXJlIHF1ZXVlZCBmb3IKLQkJICogZGVzdHJ1Y3Rp b24uCi0JCSAqLwotCQlpZiAoYm8tPm1lbS5wbGFjZW1lbnQgJiBUVE1fUExfRkxBR19OT19FVklD VCkgewotCQkJYm8tPm1lbS5wbGFjZW1lbnQgJj0gflRUTV9QTF9GTEFHX05PX0VWSUNUOwotCQkJ dHRtX2JvX21vdmVfdG9fbHJ1X3RhaWwoYm8sIE5VTEwpOwotCQl9Ci0KLQkJZG1hX3Jlc3ZfdW5s b2NrKGJvLT5iYXNlLnJlc3YpOwotCX0KLQlpZiAoYm8tPmJhc2UucmVzdiAhPSAmYm8tPmJhc2Uu X3Jlc3YpCi0JCWRtYV9yZXN2X3VubG9jaygmYm8tPmJhc2UuX3Jlc3YpOwotCi1lcnJvcjoKLQlr cmVmX2dldCgmYm8tPmxpc3Rfa3JlZik7Ci0JbGlzdF9hZGRfdGFpbCgmYm8tPmRkZXN0cm95LCAm YmRldi0+ZGRlc3Ryb3kpOwotCXNwaW5fdW5sb2NrKCZ0dG1fYm9fZ2xvYi5scnVfbG9jayk7Ci0K LQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmJkZXYtPndxLAotCQkJICAgICAgKChIWiAvIDEwMCkg PCAxKSA/IDEgOiBIWiAvIDEwMCk7Ci19Ci0KIC8qKgogICogZnVuY3Rpb24gdHRtX2JvX2NsZWFu dXBfcmVmcwotICogSWYgYm8gaWRsZSwgcmVtb3ZlIGZyb20gZGVsYXllZC0gYW5kIGxydSBsaXN0 cywgYW5kIHVucmVmLgotICogSWYgbm90IGlkbGUsIGRvIG5vdGhpbmcuCisgKiBJZiBibyBpZGxl LCByZW1vdmUgZnJvbSBscnUgbGlzdHMsIGFuZCB1bnJlZi4KKyAqIElmIG5vdCBpZGxlLCBibG9j ayBpZiBwb3NzaWJsZS4KICAqCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxydV9sb2NrIGFuZCBy ZXNlcnZhdGlvbiBoZWxkLCB0aGlzIGZ1bmN0aW9uCiAgKiB3aWxsIGRyb3AgdGhlIGxydSBsb2Nr IGFuZCBvcHRpb25hbGx5IHRoZSByZXNlcnZhdGlvbiBsb2NrIGJlZm9yZSByZXR1cm5pbmcuCkBA IC01NzUsMTQgKzQ4OSwxNCBAQCBzdGF0aWMgaW50IHR0bV9ib19jbGVhbnVwX3JlZnMoc3RydWN0 IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIAogCXR0bV9ib19kZWxfZnJvbV9scnUoYm8pOwogCWxp c3RfZGVsX2luaXQoJmJvLT5kZGVzdHJveSk7Ci0Ja3JlZl9wdXQoJmJvLT5saXN0X2tyZWYsIHR0 bV9ib19yZWZfYnVnKTsKLQogCXNwaW5fdW5sb2NrKCZ0dG1fYm9fZ2xvYi5scnVfbG9jayk7CiAJ dHRtX2JvX2NsZWFudXBfbWVtdHlwZV91c2UoYm8pOwogCiAJaWYgKHVubG9ja19yZXN2KQogCQlk bWFfcmVzdl91bmxvY2soYm8tPmJhc2UucmVzdik7CiAKKwl0dG1fYm9fcHV0KGJvKTsKKwogCXJl dHVybiAwOwogfQogCkBAIC02MDQsOCArNTE4LDkgQEAgc3RhdGljIGJvb2wgdHRtX2JvX2RlbGF5 ZWRfZGVsZXRlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LCBib29sIHJlbW92ZV9hbGwpCiAK IAkJYm8gPSBsaXN0X2ZpcnN0X2VudHJ5KCZiZGV2LT5kZGVzdHJveSwgc3RydWN0IHR0bV9idWZm ZXJfb2JqZWN0LAogCQkJCSAgICAgIGRkZXN0cm95KTsKLQkJa3JlZl9nZXQoJmJvLT5saXN0X2ty ZWYpOwogCQlsaXN0X21vdmVfdGFpbCgmYm8tPmRkZXN0cm95LCAmcmVtb3ZlZCk7CisJCWlmICgh dHRtX2JvX2dldF91bmxlc3NfemVybyhibykpCisJCQljb250aW51ZTsKIAogCQlpZiAocmVtb3Zl X2FsbCB8fCBiby0+YmFzZS5yZXN2ICE9ICZiby0+YmFzZS5fcmVzdikgewogCQkJc3Bpbl91bmxv Y2soJmdsb2ItPmxydV9sb2NrKTsKQEAgLTYyMCw3ICs1MzUsNyBAQCBzdGF0aWMgYm9vbCB0dG1f Ym9fZGVsYXllZF9kZWxldGUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsIGJvb2wgcmVtb3Zl X2FsbCkKIAkJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJCX0KIAotCQlrcmVmX3B1 dCgmYm8tPmxpc3Rfa3JlZiwgdHRtX2JvX3JlbGVhc2VfbGlzdCk7CisJCXR0bV9ib19wdXQoYm8p OwogCQlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKIAl9CiAJbGlzdF9zcGxpY2VfdGFpbCgm cmVtb3ZlZCwgJmJkZXYtPmRkZXN0cm95KTsKQEAgLTY0NiwxNiArNTYxLDY4IEBAIHN0YXRpYyB2 b2lkIHR0bV9ib19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogCSAgICBjb250YWluZXJfb2Yo a3JlZiwgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0LCBrcmVmKTsKIAlzdHJ1Y3QgdHRtX2JvX2Rl dmljZSAqYmRldiA9IGJvLT5iZGV2OwogCXN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFu ID0gJmJkZXYtPm1hbltiby0+bWVtLm1lbV90eXBlXTsKKwlzaXplX3QgYWNjX3NpemUgPSBiby0+ YWNjX3NpemU7CisJaW50IHJldDsKIAotCWlmIChiby0+YmRldi0+ZHJpdmVyLT5yZWxlYXNlX25v dGlmeSkKLQkJYm8tPmJkZXYtPmRyaXZlci0+cmVsZWFzZV9ub3RpZnkoYm8pOworCWlmICghYm8t PmRlbGV0ZWQpIHsKKwkJaWYgKGJvLT5iZGV2LT5kcml2ZXItPnJlbGVhc2Vfbm90aWZ5KQorCQkJ Ym8tPmJkZXYtPmRyaXZlci0+cmVsZWFzZV9ub3RpZnkoYm8pOwogCi0JZHJtX3ZtYV9vZmZzZXRf cmVtb3ZlKGJkZXYtPnZtYV9tYW5hZ2VyLCAmYm8tPmJhc2Uudm1hX25vZGUpOwotCXR0bV9tZW1f aW9fbG9jayhtYW4sIGZhbHNlKTsKLQl0dG1fbWVtX2lvX2ZyZWVfdm0oYm8pOwotCXR0bV9tZW1f aW9fdW5sb2NrKG1hbik7Ci0JdHRtX2JvX2NsZWFudXBfcmVmc19vcl9xdWV1ZShibyk7Ci0Ja3Jl Zl9wdXQoJmJvLT5saXN0X2tyZWYsIHR0bV9ib19yZWxlYXNlX2xpc3QpOworCQlkcm1fdm1hX29m ZnNldF9yZW1vdmUoYmRldi0+dm1hX21hbmFnZXIsICZiby0+YmFzZS52bWFfbm9kZSk7CisJCXR0 bV9tZW1faW9fbG9jayhtYW4sIGZhbHNlKTsKKwkJdHRtX21lbV9pb19mcmVlX3ZtKGJvKTsKKwkJ dHRtX21lbV9pb191bmxvY2sobWFuKTsKKworCQlyZXQgPSB0dG1fYm9faW5kaXZpZHVhbGl6ZV9y ZXN2KGJvKTsKKwkJaWYgKHJldCkgeworCQkJLyogTGFzdCByZXNvcnQsIGlmIHdlIGZhaWwgdG8g YWxsb2NhdGUgbWVtb3J5IGZvciB0aGUKKwkJCSAqIGZlbmNlcyBibG9jayBmb3IgdGhlIEJPIHRv IGJlY29tZSBpZGxlCisJCQkgKi8KKwkJCWRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3UoYm8tPmJh c2UucmVzdiwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgIDMwICogSFopOworCQl9CisJfQorCisJaWYg KCFkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3JjdShiby0+YmFzZS5yZXN2LCB0cnVlKSkgeworCQkv KiBUaGUgQk8gaXMgbm90IGlkbGUsIHJlc3VycmVjdCBpdCBmb3IgZGVsYXllZCBkZXN0cm95ICov CisJCXR0bV9ib19mbHVzaF9hbGxfZmVuY2VzKGJvKTsKKwkJYm8tPmRlbGV0ZWQgPSB0cnVlOwor CisJCS8qCisJCSAqIE1ha2UgTk9fRVZJQ1QgYm9zIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB0bwor CQkgKiBzaHJpbmtlcnMsIG5vdyB0aGF0IHRoZXkgYXJlIHF1ZXVlZCBmb3IKKwkJICogZGVzdHJ1 Y3Rpb24uCisJCSAqLworCQlpZiAoYm8tPm1lbS5wbGFjZW1lbnQgJiBUVE1fUExfRkxBR19OT19F VklDVCkgeworCQkJYm8tPm1lbS5wbGFjZW1lbnQgJj0gflRUTV9QTF9GTEFHX05PX0VWSUNUOwor CQkJdHRtX2JvX21vdmVfdG9fbHJ1X3RhaWwoYm8sIE5VTEwpOworCQl9CisKKwkJc3Bpbl9sb2Nr KCZ0dG1fYm9fZ2xvYi5scnVfbG9jayk7CisJCWtyZWZfaW5pdCgmYm8tPmtyZWYpOworCQlsaXN0 X2FkZF90YWlsKCZiby0+ZGRlc3Ryb3ksICZiZGV2LT5kZGVzdHJveSk7CisJCXNwaW5fdW5sb2Nr KCZ0dG1fYm9fZ2xvYi5scnVfbG9jayk7CisKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZiZGV2 LT53cSwKKwkJCQkgICAgICAoKEhaIC8gMTAwKSA8IDEpID8gMSA6IEhaIC8gMTAwKTsKKwkJcmV0 dXJuOworCX0KKworCXNwaW5fbG9jaygmdHRtX2JvX2dsb2IubHJ1X2xvY2spOworCXR0bV9ib19k ZWxfZnJvbV9scnUoYm8pOworCWxpc3RfZGVsKCZiby0+ZGRlc3Ryb3kpOworCXNwaW5fdW5sb2Nr KCZ0dG1fYm9fZ2xvYi5scnVfbG9jayk7CisKKwl0dG1fYm9fY2xlYW51cF9tZW10eXBlX3VzZShi byk7CisKKwlCVUdfT04oYm8tPm1lbS5tbV9ub2RlICE9IE5VTEwpOworCXR0bV90dF9kZXN0cm95 KGJvLT50dG0pOworCWF0b21pY19kZWMoJnR0bV9ib19nbG9iLmJvX2NvdW50KTsKKwlkbWFfZmVu Y2VfcHV0KGJvLT5tb3ZpbmcpOworCWlmICghdHRtX2JvX3VzZXNfZW1iZWRkZWRfZ2VtX29iamVj dChibykpCisJCWRtYV9yZXN2X2ZpbmkoJmJvLT5iYXNlLl9yZXN2KTsKKwliby0+ZGVzdHJveShi byk7CisJdHRtX21lbV9nbG9iYWxfZnJlZSgmdHRtX21lbV9nbG9iLCBhY2Nfc2l6ZSk7CiB9CiAK IHZvaWQgdHRtX2JvX3B1dChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQpAQCAtNzU4LDgg KzcyNSw3IEBAIHN0YXRpYyBib29sIHR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93YWJsZShzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCiAJaWYgKGJvLT5iYXNlLnJlc3YgPT0gY3R4LT5y ZXN2KSB7CiAJCWRtYV9yZXN2X2Fzc2VydF9oZWxkKGJvLT5iYXNlLnJlc3YpOwotCQlpZiAoY3R4 LT5mbGFncyAmIFRUTV9PUFRfRkxBR19BTExPV19SRVNfRVZJQ1QKLQkJICAgIHx8ICFsaXN0X2Vt cHR5KCZiby0+ZGRlc3Ryb3kpKQorCQlpZiAoY3R4LT5mbGFncyAmIFRUTV9PUFRfRkxBR19BTExP V19SRVNfRVZJQ1QgfHwgYm8tPmRlbGV0ZWQpCiAJCQlyZXQgPSB0cnVlOwogCQkqbG9ja2VkID0g ZmFsc2U7CiAJCWlmIChidXN5KQpAQCAtODQwLDYgKzgwNiwxMSBAQCBzdGF0aWMgaW50IHR0bV9t ZW1fZXZpY3RfZmlyc3Qoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCiAJCQkJCWRtYV9yZXN2 X3VubG9jayhiby0+YmFzZS5yZXN2KTsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJCWlmICghdHRt X2JvX2dldF91bmxlc3NfemVybyhibykpIHsKKwkJCQlpZiAobG9ja2VkKQorCQkJCQlkbWFfcmVz dl91bmxvY2soYm8tPmJhc2UucmVzdik7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlicmVhazsK IAkJfQogCkBAIC04NTEsMjEgKzgyMiwxOSBAQCBzdGF0aWMgaW50IHR0bV9tZW1fZXZpY3RfZmly c3Qoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCiAJfQogCiAJaWYgKCFibykgewotCQlpZiAo YnVzeV9ibykKLQkJCWtyZWZfZ2V0KCZidXN5X2JvLT5saXN0X2tyZWYpOworCQlpZiAoYnVzeV9i byAmJiAhdHRtX2JvX2dldF91bmxlc3NfemVybyhidXN5X2JvKSkKKwkJCWJ1c3lfYm8gPSBOVUxM OwogCQlzcGluX3VubG9jaygmdHRtX2JvX2dsb2IubHJ1X2xvY2spOwogCQlyZXQgPSB0dG1fbWVt X2V2aWN0X3dhaXRfYnVzeShidXN5X2JvLCBjdHgsIHRpY2tldCk7CiAJCWlmIChidXN5X2JvKQot CQkJa3JlZl9wdXQoJmJ1c3lfYm8tPmxpc3Rfa3JlZiwgdHRtX2JvX3JlbGVhc2VfbGlzdCk7CisJ CQl0dG1fYm9fcHV0KGJ1c3lfYm8pOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWtyZWZfZ2V0KCZi by0+bGlzdF9rcmVmKTsKLQotCWlmICghbGlzdF9lbXB0eSgmYm8tPmRkZXN0cm95KSkgeworCWlm IChiby0+ZGVsZXRlZCkgewogCQlyZXQgPSB0dG1fYm9fY2xlYW51cF9yZWZzKGJvLCBjdHgtPmlu dGVycnVwdGlibGUsCiAJCQkJCSAgY3R4LT5ub193YWl0X2dwdSwgbG9ja2VkKTsKLQkJa3JlZl9w dXQoJmJvLT5saXN0X2tyZWYsIHR0bV9ib19yZWxlYXNlX2xpc3QpOworCQl0dG1fYm9fcHV0KGJv KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTg3NSw3ICs4NDQsNyBAQCBzdGF0aWMgaW50IHR0 bV9tZW1fZXZpY3RfZmlyc3Qoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCiAJaWYgKGxvY2tl ZCkKIAkJdHRtX2JvX3VucmVzZXJ2ZShibyk7CiAKLQlrcmVmX3B1dCgmYm8tPmxpc3Rfa3JlZiwg dHRtX2JvX3JlbGVhc2VfbGlzdCk7CisJdHRtX2JvX3B1dChibyk7CiAJcmV0dXJuIHJldDsKIH0K IApAQCAtMTI3OSw3ICsxMjQ4LDYgQEAgaW50IHR0bV9ib19pbml0X3Jlc2VydmVkKHN0cnVjdCB0 dG1fYm9fZGV2aWNlICpiZGV2LAogCWJvLT5kZXN0cm95ID0gZGVzdHJveSA/IGRlc3Ryb3kgOiB0 dG1fYm9fZGVmYXVsdF9kZXN0cm95OwogCiAJa3JlZl9pbml0KCZiby0+a3JlZik7Ci0Ja3JlZl9p bml0KCZiby0+bGlzdF9rcmVmKTsKIAlJTklUX0xJU1RfSEVBRCgmYm8tPmxydSk7CiAJSU5JVF9M SVNUX0hFQUQoJmJvLT5kZGVzdHJveSk7CiAJSU5JVF9MSVNUX0hFQUQoJmJvLT5zd2FwKTsKQEAg LTE3OTksMTEgKzE3NjcsMTggQEAgaW50IHR0bV9ib19zd2Fwb3V0KHN0cnVjdCB0dG1fYm9fZ2xv YmFsICpnbG9iLCBzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggKmN0eCkKIAlzcGluX2xvY2soJmds b2ItPmxydV9sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgVFRNX01BWF9CT19QUklPUklUWTsgKytp KSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYm8sICZnbG9iLT5zd2FwX2xydVtpXSwgc3dhcCkg ewotCQkJaWYgKHR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93YWJsZShibywgY3R4LCAmbG9ja2Vk LAotCQkJCQkJCSAgIE5VTEwpKSB7Ci0JCQkJcmV0ID0gMDsKLQkJCQlicmVhazsKKwkJCWlmICgh dHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKGJvLCBjdHgsICZsb2NrZWQsCisJCQkJCQkJ ICAgIE5VTEwpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIXR0bV9ib19nZXRfdW5sZXNzX3pl cm8oYm8pKSB7CisJCQkJaWYgKGxvY2tlZCkKKwkJCQkJZG1hX3Jlc3ZfdW5sb2NrKGJvLT5iYXNl LnJlc3YpOworCQkJCWNvbnRpbnVlOwogCQkJfQorCisJCQlyZXQgPSAwOworCQkJYnJlYWs7CiAJ CX0KIAkJaWYgKCFyZXQpCiAJCQlicmVhazsKQEAgLTE4MTQsMTEgKzE3ODksOSBAQCBpbnQgdHRt X2JvX3N3YXBvdXQoc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IsIHN0cnVjdCB0dG1fb3BlcmF0 aW9uX2N0eCAqY3R4KQogCQlyZXR1cm4gcmV0OwogCX0KIAotCWtyZWZfZ2V0KCZiby0+bGlzdF9r cmVmKTsKLQotCWlmICghbGlzdF9lbXB0eSgmYm8tPmRkZXN0cm95KSkgeworCWlmIChiby0+ZGVs ZXRlZCkgewogCQlyZXQgPSB0dG1fYm9fY2xlYW51cF9yZWZzKGJvLCBmYWxzZSwgZmFsc2UsIGxv Y2tlZCk7Ci0JCWtyZWZfcHV0KCZiby0+bGlzdF9rcmVmLCB0dG1fYm9fcmVsZWFzZV9saXN0KTsK KwkJdHRtX2JvX3B1dChibyk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xODcyLDcgKzE4NDUs NyBAQCBpbnQgdHRtX2JvX3N3YXBvdXQoc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IsIHN0cnVj dCB0dG1fb3BlcmF0aW9uX2N0eCAqY3R4KQogCSAqLwogCWlmIChsb2NrZWQpCiAJCWRtYV9yZXN2 X3VubG9jayhiby0+YmFzZS5yZXN2KTsKLQlrcmVmX3B1dCgmYm8tPmxpc3Rfa3JlZiwgdHRtX2Jv X3JlbGVhc2VfbGlzdCk7CisJdHRtX2JvX3B1dChibyk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9S VF9TWU1CT0wodHRtX2JvX3N3YXBvdXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0 bS90dG1fYm9fdXRpbC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jCmluZGV4 IDg2ZDE1MjQ3MmYzOC4uYzhlMzU5ZGVkMWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v dHRtL3R0bV9ib191dGlsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5j CkBAIC01MDcsNyArNTA3LDYgQEAgc3RhdGljIGludCB0dG1fYnVmZmVyX29iamVjdF90cmFuc2Zl cihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCWZiby0+YmFzZS5tb3ZpbmcgPSBOVUxM OwogCWRybV92bWFfbm9kZV9yZXNldCgmZmJvLT5iYXNlLmJhc2Uudm1hX25vZGUpOwogCi0Ja3Jl Zl9pbml0KCZmYm8tPmJhc2UubGlzdF9rcmVmKTsKIAlrcmVmX2luaXQoJmZiby0+YmFzZS5rcmVm KTsKIAlmYm8tPmJhc2UuZGVzdHJveSA9ICZ0dG1fdHJhbnNmZXJlZF9kZXN0cm95OwogCWZiby0+ YmFzZS5hY2Nfc2l6ZSA9IDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2Fw aS5oIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19hcGkuaAppbmRleCA2NmNhNDlkYjk2MzMuLmI5 YmMxYjAwMTQyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19hcGkuaAorKysg Yi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oCkBAIC0xMzUsMTggKzEzNSwxNCBAQCBzdHJ1 Y3QgdHRtX3R0OwogICogQG51bV9wYWdlczogQWN0dWFsIG51bWJlciBvZiBwYWdlcy4KICAqIEBh Y2Nfc2l6ZTogQWNjb3VudGVkIHNpemUgZm9yIHRoaXMgb2JqZWN0LgogICogQGtyZWY6IFJlZmVy ZW5jZSBjb3VudCBvZiB0aGlzIGJ1ZmZlciBvYmplY3QuIFdoZW4gdGhpcyByZWZjb3VudCByZWFj aGVzCi0gKiB6ZXJvLCB0aGUgb2JqZWN0IGlzIHB1dCBvbiB0aGUgZGVsYXllZCBkZWxldGUgbGlz dC4KLSAqIEBsaXN0X2tyZWY6IExpc3QgcmVmZXJlbmNlIGNvdW50IG9mIHRoaXMgYnVmZmVyIG9i amVjdC4gVGhpcyBtZW1iZXIgaXMKLSAqIHVzZWQgdG8gYXZvaWQgZGVzdHJ1Y3Rpb24gd2hpbGUg dGhlIGJ1ZmZlciBvYmplY3QgaXMgc3RpbGwgb24gYSBsaXN0LgotICogTHJ1IGxpc3RzIG1heSBr ZWVwIG9uZSByZWZjb3VudCwgdGhlIGRlbGF5ZWQgZGVsZXRlIGxpc3QsIGFuZCBrcmVmICE9IDAK LSAqIGtlZXBzIG9uZSByZWZjb3VudC4gV2hlbiB0aGlzIHJlZmNvdW50IHJlYWNoZXMgemVybywK LSAqIHRoZSBvYmplY3QgaXMgZGVzdHJveWVkLgorICogemVybywgdGhlIG9iamVjdCBpcyBkZXN0 cm95ZWQgb3IgcHV0IG9uIHRoZSBkZWxheWVkIGRlbGV0ZSBsaXN0LgogICogQG1lbTogc3RydWN0 dXJlIGRlc2NyaWJpbmcgY3VycmVudCBwbGFjZW1lbnQuCiAgKiBAcGVyc2lzdGVudF9zd2FwX3N0 b3JhZ2U6IFVzdWFsbHkgdGhlIHN3YXAgc3RvcmFnZSBpcyBkZWxldGVkIGZvciBidWZmZXJzCiAg KiBwaW5uZWQgaW4gcGh5c2ljYWwgbWVtb3J5LiBJZiB0aGlzIGJlaGF2aW91ciBpcyBub3QgZGVz aXJlZCwgdGhpcyBtZW1iZXIKICAqIGhvbGRzIGEgcG9pbnRlciB0byBhIHBlcnNpc3RlbnQgc2ht ZW0gb2JqZWN0LgogICogQHR0bTogVFRNIHN0cnVjdHVyZSBob2xkaW5nIHN5c3RlbSBwYWdlcy4K ICAqIEBldmljdGVkOiBXaGV0aGVyIHRoZSBvYmplY3Qgd2FzIGV2aWN0ZWQgd2l0aG91dCB1c2Vy LXNwYWNlIGtub3dpbmcuCisgKiBAZGVsZXRlZDogVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIG9ubHkg YSB6b21iaWUgYW5kIGFscmVhZHkgZGVsZXRlZC4KICAqIEBscnU6IExpc3QgaGVhZCBmb3IgdGhl IGxydSBsaXN0LgogICogQGRkZXN0cm95OiBMaXN0IGhlYWQgZm9yIHRoZSBkZWxheWVkIGRlc3Ry b3kgbGlzdC4KICAqIEBzd2FwOiBMaXN0IGhlYWQgZm9yIHN3YXAgTFJVIGxpc3QuCkBAIC0xODMs OSArMTc5LDcgQEAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0IHsKIAkvKioKIAkqIE1lbWJlcnMg bm90IG5lZWRpbmcgcHJvdGVjdGlvbi4KIAkqLwotCiAJc3RydWN0IGtyZWYga3JlZjsKLQlzdHJ1 Y3Qga3JlZiBsaXN0X2tyZWY7CiAKIAkvKioKIAkgKiBNZW1iZXJzIHByb3RlY3RlZCBieSB0aGUg Ym86OnJlc3Y6OnJlc2VydmVkIGxvY2suCkBAIC0xOTUsNiArMTg5LDcgQEAgc3RydWN0IHR0bV9i dWZmZXJfb2JqZWN0IHsKIAlzdHJ1Y3QgZmlsZSAqcGVyc2lzdGVudF9zd2FwX3N0b3JhZ2U7CiAJ c3RydWN0IHR0bV90dCAqdHRtOwogCWJvb2wgZXZpY3RlZDsKKwlib29sIGRlbGV0ZWQ7CiAKIAkv KioKIAkgKiBNZW1iZXJzIHByb3RlY3RlZCBieSB0aGUgYmRldjo6bHJ1X2xvY2suCi0tIAoyLjE3 LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==