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=-11.4 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,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 37E61C433E0 for ; Tue, 4 Aug 2020 14:02:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DED192086A for ; Tue, 4 Aug 2020 14:02:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="s2QyBHXu" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728839AbgHDOBq (ORCPT ); Tue, 4 Aug 2020 10:01:46 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:5461 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726948AbgHDN7w (ORCPT ); Tue, 4 Aug 2020 09:59:52 -0400 X-UUID: 0131b592fca44d038f1851d61ad71e5f-20200804 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=UwedDwkA6MKfo574cvkSS6/ojQxMQXtOkVvLLZ6CYbI=; b=s2QyBHXuMBvIToNFxi8ZbJN4H2rPI358+V4COmMgnpd6otkvQYutDQKMPJLuxh+kJOXdLBmrdnGOPkBvBSJ0Xqfhx0/n7AKoeHE2bsbIoG6ksK9lflhb71A3Vs1NP6WW8IoAeHSojksFA1US+qdy+ie2osvgvCuLndA1vtQOPLQ=; X-UUID: 0131b592fca44d038f1851d61ad71e5f-20200804 Received: from mtkcas11.mediatek.inc [(172.21.101.40)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 525253686; Tue, 04 Aug 2020 21:59:16 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs08n1.mediatek.inc (172.21.101.55) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 4 Aug 2020 21:59:12 +0800 Received: from mtkswgap22.mediatek.inc (172.21.77.33) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 4 Aug 2020 21:59:13 +0800 From: Frankie Chang To: Todd Kjos CC: Greg Kroah-Hartman , Joel Fernandes , Martijn Coenen , =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Christian Brauner , , , , Jian-Min Liu , Frankie Chang Subject: [PATCH v7 1/3] binder: move structs from core file to header file Date: Tue, 4 Aug 2020 21:59:10 +0800 Message-ID: <1596549552-5466-2-git-send-email-Frankie.Chang@mediatek.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1596549552-5466-1-git-send-email-Frankie.Chang@mediatek.com> References: <1596509145.5207.21.camel@mtkswgap22> <1596549552-5466-1-git-send-email-Frankie.Chang@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogIkZyYW5raWUuQ2hhbmciIDxGcmFua2llLkNoYW5nQG1lZGlhdGVrLmNvbT4NCg0KTW92 aW5nIGFsbCBzdHJ1Y3RzIHRvIGhlYWRlciBmaWxlIG1ha2VzIG1vZHVsZSBtb3JlDQpleHRlbmRh YmxlLCBhbmQgbWFrZXMgYWxsIHRoZXNlIHN0cnVjdHMgdG8gYmUgZGVmaW5lZA0KaW4gdGhlIHNh bWUgZmlsZS4NCg0KU2lnbmVkLW9mZi1ieTogRnJhbmtpZS5DaGFuZyA8RnJhbmtpZS5DaGFuZ0Bt ZWRpYXRlay5jb20+DQotLS0NCiBkcml2ZXJzL2FuZHJvaWQvYmluZGVyLmMgICAgICAgICAgfCAg NDA1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiBkcml2ZXJzL2FuZHJv aWQvYmluZGVyX2ludGVybmFsLmggfCAgNDA0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKw0KIDIgZmlsZXMgY2hhbmdlZCwgNDA0IGluc2VydGlvbnMoKyksIDQwNSBkZWxldGlv bnMoLSkNCg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIuYyBiL2RyaXZlcnMv YW5kcm9pZC9iaW5kZXIuYw0KaW5kZXggYTZiMjA4Mi4uMmRmMTQ2ZiAxMDA2NDQNCi0tLSBhL2Ry aXZlcnMvYW5kcm9pZC9iaW5kZXIuYw0KKysrIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci5jDQpA QCAtNzIsNyArNzIsNiBAQA0KIA0KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPg0KIA0KLSNp bmNsdWRlICJiaW5kZXJfYWxsb2MuaCINCiAjaW5jbHVkZSAiYmluZGVyX2ludGVybmFsLmgiDQog I2luY2x1ZGUgImJpbmRlcl90cmFjZS5oIg0KIA0KQEAgLTE2MCwyNCArMTU5LDYgQEAgc3RhdGlj IGludCBiaW5kZXJfc2V0X3N0b3Bfb25fdXNlcl9lcnJvcihjb25zdCBjaGFyICp2YWwsDQogI2Rl ZmluZSB0b19iaW5kZXJfZmRfYXJyYXlfb2JqZWN0KGhkcikgXA0KIAljb250YWluZXJfb2YoaGRy LCBzdHJ1Y3QgYmluZGVyX2ZkX2FycmF5X29iamVjdCwgaGRyKQ0KIA0KLWVudW0gYmluZGVyX3N0 YXRfdHlwZXMgew0KLQlCSU5ERVJfU1RBVF9QUk9DLA0KLQlCSU5ERVJfU1RBVF9USFJFQUQsDQot CUJJTkRFUl9TVEFUX05PREUsDQotCUJJTkRFUl9TVEFUX1JFRiwNCi0JQklOREVSX1NUQVRfREVB VEgsDQotCUJJTkRFUl9TVEFUX1RSQU5TQUNUSU9OLA0KLQlCSU5ERVJfU1RBVF9UUkFOU0FDVElP Tl9DT01QTEVURSwNCi0JQklOREVSX1NUQVRfQ09VTlQNCi19Ow0KLQ0KLXN0cnVjdCBiaW5kZXJf c3RhdHMgew0KLQlhdG9taWNfdCBicltfSU9DX05SKEJSX0ZBSUxFRF9SRVBMWSkgKyAxXTsNCi0J YXRvbWljX3QgYmNbX0lPQ19OUihCQ19SRVBMWV9TRykgKyAxXTsNCi0JYXRvbWljX3Qgb2JqX2Ny ZWF0ZWRbQklOREVSX1NUQVRfQ09VTlRdOw0KLQlhdG9taWNfdCBvYmpfZGVsZXRlZFtCSU5ERVJf U1RBVF9DT1VOVF07DQotfTsNCi0NCiBzdGF0aWMgc3RydWN0IGJpbmRlcl9zdGF0cyBiaW5kZXJf c3RhdHM7DQogDQogc3RhdGljIGlubGluZSB2b2lkIGJpbmRlcl9zdGF0c19kZWxldGVkKGVudW0g YmluZGVyX3N0YXRfdHlwZXMgdHlwZSkNCkBAIC0yMTMsMjc4ICsxOTQsMTEgQEAgc3RhdGljIHN0 cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fbG9nX2VudHJ5ICpiaW5kZXJfdHJhbnNhY3Rpb25fbG9n X2FkZCgNCiAJcmV0dXJuIGU7DQogfQ0KIA0KLS8qKg0KLSAqIHN0cnVjdCBiaW5kZXJfd29yayAt IHdvcmsgZW5xdWV1ZWQgb24gYSB3b3JrbGlzdA0KLSAqIEBlbnRyeTogICAgICAgICAgICAgbm9k ZSBlbnF1ZXVlZCBvbiBsaXN0DQotICogQHR5cGU6ICAgICAgICAgICAgICB0eXBlIG9mIHdvcmsg dG8gYmUgcGVyZm9ybWVkDQotICoNCi0gKiBUaGVyZSBhcmUgc2VwYXJhdGUgd29yayBsaXN0cyBm b3IgcHJvYywgdGhyZWFkLCBhbmQgbm9kZSAoYXN5bmMpLg0KLSAqLw0KLXN0cnVjdCBiaW5kZXJf d29yayB7DQotCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7DQotDQotCWVudW0gew0KLQkJQklOREVS X1dPUktfVFJBTlNBQ1RJT04gPSAxLA0KLQkJQklOREVSX1dPUktfVFJBTlNBQ1RJT05fQ09NUExF VEUsDQotCQlCSU5ERVJfV09SS19SRVRVUk5fRVJST1IsDQotCQlCSU5ERVJfV09SS19OT0RFLA0K LQkJQklOREVSX1dPUktfREVBRF9CSU5ERVIsDQotCQlCSU5ERVJfV09SS19ERUFEX0JJTkRFUl9B TkRfQ0xFQVIsDQotCQlCSU5ERVJfV09SS19DTEVBUl9ERUFUSF9OT1RJRklDQVRJT04sDQotCX0g dHlwZTsNCi19Ow0KLQ0KLXN0cnVjdCBiaW5kZXJfZXJyb3Igew0KLQlzdHJ1Y3QgYmluZGVyX3dv cmsgd29yazsNCi0JdWludDMyX3QgY21kOw0KLX07DQotDQotLyoqDQotICogc3RydWN0IGJpbmRl cl9ub2RlIC0gYmluZGVyIG5vZGUgYm9va2tlZXBpbmcNCi0gKiBAZGVidWdfaWQ6ICAgICAgICAg ICAgIHVuaXF1ZSBJRCBmb3IgZGVidWdnaW5nDQotICogICAgICAgICAgICAgICAgICAgICAgICAo aW52YXJpYW50IGFmdGVyIGluaXRpYWxpemVkKQ0KLSAqIEBsb2NrOiAgICAgICAgICAgICAgICAg bG9jayBmb3Igbm9kZSBmaWVsZHMNCi0gKiBAd29yazogICAgICAgICAgICAgICAgIHdvcmtsaXN0 IGVsZW1lbnQgZm9yIG5vZGUgd29yaw0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3Rl Y3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jaykNCi0gKiBAcmJfbm9kZTogICAgICAgICAgICAgIGVs ZW1lbnQgZm9yIHByb2MtPm5vZGVzIHRyZWUNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIChw cm90ZWN0ZWQgYnkgQHByb2MtPmlubmVyX2xvY2spDQotICogQGRlYWRfbm9kZTogICAgICAgICAg ICBlbGVtZW50IGZvciBiaW5kZXJfZGVhZF9ub2RlcyBsaXN0DQotICogICAgICAgICAgICAgICAg ICAgICAgICAocHJvdGVjdGVkIGJ5IGJpbmRlcl9kZWFkX25vZGVzX2xvY2spDQotICogQHByb2M6 ICAgICAgICAgICAgICAgICBiaW5kZXJfcHJvYyB0aGF0IG93bnMgdGhpcyBub2RlDQotICogICAg ICAgICAgICAgICAgICAgICAgICAoaW52YXJpYW50IGFmdGVyIGluaXRpYWxpemVkKQ0KLSAqIEBy ZWZzOiAgICAgICAgICAgICAgICAgbGlzdCBvZiByZWZlcmVuY2VzIG9uIHRoaXMgbm9kZQ0KLSAq ICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAbG9jaykNCi0gKiBAaW50ZXJu YWxfc3Ryb25nX3JlZnM6IHVzZWQgdG8gdGFrZSBzdHJvbmcgcmVmZXJlbmNlcyB3aGVuDQotICog ICAgICAgICAgICAgICAgICAgICAgICBpbml0aWF0aW5nIGEgdHJhbnNhY3Rpb24NCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkgQHByb2MtPmlubmVyX2xvY2sgaWYgQHBy b2MNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBieSBAbG9jaykNCi0gKiBAbG9jYWxf d2Vha19yZWZzOiAgICAgIHdlYWsgdXNlciByZWZzIGZyb20gbG9jYWwgcHJvY2Vzcw0KLSAqICAg ICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jayBpZiBA cHJvYw0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJ5IEBsb2NrKQ0KLSAqIEBsb2Nh bF9zdHJvbmdfcmVmczogICAgc3Ryb25nIHVzZXIgcmVmcyBmcm9tIGxvY2FsIHByb2Nlc3MNCi0g KiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkgQHByb2MtPmlubmVyX2xvY2sg aWYgQHByb2MNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBieSBAbG9jaykNCi0gKiBA dG1wX3JlZnM6ICAgICAgICAgICAgIHRlbXBvcmFyeSBrZXJuZWwgcmVmcw0KLSAqICAgICAgICAg ICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jayB3aGlsZSBAcHJv Yw0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgaXMgdmFsaWQsIGFuZCBieSBiaW5kZXJfZGVh ZF9ub2Rlc19sb2NrDQotICogICAgICAgICAgICAgICAgICAgICAgICBpZiBAcHJvYyBpcyBOVUxM LiBEdXJpbmcgaW5jL2RlYyBhbmQgbm9kZSByZWxlYXNlDQotICogICAgICAgICAgICAgICAgICAg ICAgICBpdCBpcyBhbHNvIHByb3RlY3RlZCBieSBAbG9jayB0byBwcm92aWRlIHNhZmV0eQ0KLSAq ICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlIG5vZGUgZGllcyBhbmQgQHByb2MgYmVjb21l cyBOVUxMKQ0KLSAqIEBwdHI6ICAgICAgICAgICAgICAgICAgdXNlcnNwYWNlIHBvaW50ZXIgZm9y IG5vZGUNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIChpbnZhcmlhbnQsIG5vIGxvY2sgbmVl ZGVkKQ0KLSAqIEBjb29raWU6ICAgICAgICAgICAgICAgdXNlcnNwYWNlIGNvb2tpZSBmb3Igbm9k ZQ0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKGludmFyaWFudCwgbm8gbG9jayBuZWVkZWQp DQotICogQGhhc19zdHJvbmdfcmVmOiAgICAgICB1c2Vyc3BhY2Ugbm90aWZpZWQgb2Ygc3Ryb25n IHJlZg0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5u ZXJfbG9jayBpZiBAcHJvYw0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJ5IEBsb2Nr KQ0KLSAqIEBwZW5kaW5nX3N0cm9uZ19yZWY6ICAgdXNlcnNwYWNlIGhhcyBhY2tlZCBub3RpZmlj YXRpb24gb2Ygc3Ryb25nIHJlZg0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3Rl ZCBieSBAcHJvYy0+aW5uZXJfbG9jayBpZiBAcHJvYw0KLSAqICAgICAgICAgICAgICAgICAgICAg ICAgYW5kIGJ5IEBsb2NrKQ0KLSAqIEBoYXNfd2Vha19yZWY6ICAgICAgICAgdXNlcnNwYWNlIG5v dGlmaWVkIG9mIHdlYWsgcmVmDQotICogICAgICAgICAgICAgICAgICAgICAgICAocHJvdGVjdGVk IGJ5IEBwcm9jLT5pbm5lcl9sb2NrIGlmIEBwcm9jDQotICogICAgICAgICAgICAgICAgICAgICAg ICBhbmQgYnkgQGxvY2spDQotICogQHBlbmRpbmdfd2Vha19yZWY6ICAgICB1c2Vyc3BhY2UgaGFz IGFja2VkIG5vdGlmaWNhdGlvbiBvZiB3ZWFrIHJlZg0KLSAqICAgICAgICAgICAgICAgICAgICAg ICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jayBpZiBAcHJvYw0KLSAqICAgICAgICAg ICAgICAgICAgICAgICAgYW5kIGJ5IEBsb2NrKQ0KLSAqIEBoYXNfYXN5bmNfdHJhbnNhY3Rpb246 IGFzeW5jIHRyYW5zYWN0aW9uIHRvIG5vZGUgaW4gcHJvZ3Jlc3MNCi0gKiAgICAgICAgICAgICAg ICAgICAgICAgIChwcm90ZWN0ZWQgYnkgQGxvY2spDQotICogQGFjY2VwdF9mZHM6ICAgICAgICAg ICBmaWxlIGRlc2NyaXB0b3Igb3BlcmF0aW9ucyBzdXBwb3J0ZWQgZm9yIG5vZGUNCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgIChpbnZhcmlhbnQgYWZ0ZXIgaW5pdGlhbGl6ZWQpDQotICogQG1p bl9wcmlvcml0eTogICAgICAgICBtaW5pbXVtIHNjaGVkdWxpbmcgcHJpb3JpdHkNCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgIChpbnZhcmlhbnQgYWZ0ZXIgaW5pdGlhbGl6ZWQpDQotICogQHR4 bl9zZWN1cml0eV9jdHg6ICAgICByZXF1aXJlIHNlbmRlcidzIHNlY3VyaXR5IGNvbnRleHQNCi0g KiAgICAgICAgICAgICAgICAgICAgICAgIChpbnZhcmlhbnQgYWZ0ZXIgaW5pdGlhbGl6ZWQpDQot ICogQGFzeW5jX3RvZG86ICAgICAgICAgICBsaXN0IG9mIGFzeW5jIHdvcmsgaXRlbXMNCi0gKiAg ICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkgQHByb2MtPmlubmVyX2xvY2spDQot ICoNCi0gKiBCb29ra2VlcGluZyBzdHJ1Y3R1cmUgZm9yIGJpbmRlciBub2Rlcy4NCi0gKi8NCi1z dHJ1Y3QgYmluZGVyX25vZGUgew0KLQlpbnQgZGVidWdfaWQ7DQotCXNwaW5sb2NrX3QgbG9jazsN Ci0Jc3RydWN0IGJpbmRlcl93b3JrIHdvcms7DQotCXVuaW9uIHsNCi0JCXN0cnVjdCByYl9ub2Rl IHJiX25vZGU7DQotCQlzdHJ1Y3QgaGxpc3Rfbm9kZSBkZWFkX25vZGU7DQotCX07DQotCXN0cnVj dCBiaW5kZXJfcHJvYyAqcHJvYzsNCi0Jc3RydWN0IGhsaXN0X2hlYWQgcmVmczsNCi0JaW50IGlu dGVybmFsX3N0cm9uZ19yZWZzOw0KLQlpbnQgbG9jYWxfd2Vha19yZWZzOw0KLQlpbnQgbG9jYWxf c3Ryb25nX3JlZnM7DQotCWludCB0bXBfcmVmczsNCi0JYmluZGVyX3VpbnRwdHJfdCBwdHI7DQot CWJpbmRlcl91aW50cHRyX3QgY29va2llOw0KLQlzdHJ1Y3Qgew0KLQkJLyoNCi0JCSAqIGJpdGZp ZWxkIGVsZW1lbnRzIHByb3RlY3RlZCBieQ0KLQkJICogcHJvYyBpbm5lcl9sb2NrDQotCQkgKi8N Ci0JCXU4IGhhc19zdHJvbmdfcmVmOjE7DQotCQl1OCBwZW5kaW5nX3N0cm9uZ19yZWY6MTsNCi0J CXU4IGhhc193ZWFrX3JlZjoxOw0KLQkJdTggcGVuZGluZ193ZWFrX3JlZjoxOw0KLQl9Ow0KLQlz dHJ1Y3Qgew0KLQkJLyoNCi0JCSAqIGludmFyaWFudCBhZnRlciBpbml0aWFsaXphdGlvbg0KLQkJ ICovDQotCQl1OCBhY2NlcHRfZmRzOjE7DQotCQl1OCB0eG5fc2VjdXJpdHlfY3R4OjE7DQotCQl1 OCBtaW5fcHJpb3JpdHk7DQotCX07DQotCWJvb2wgaGFzX2FzeW5jX3RyYW5zYWN0aW9uOw0KLQlz dHJ1Y3QgbGlzdF9oZWFkIGFzeW5jX3RvZG87DQotfTsNCi0NCi1zdHJ1Y3QgYmluZGVyX3JlZl9k ZWF0aCB7DQotCS8qKg0KLQkgKiBAd29yazogd29ya2xpc3QgZWxlbWVudCBmb3IgZGVhdGggbm90 aWZpY2F0aW9ucw0KLQkgKiAgICAgICAgKHByb3RlY3RlZCBieSBpbm5lcl9sb2NrIG9mIHRoZSBw cm9jIHRoYXQNCi0JICogICAgICAgIHRoaXMgcmVmIGJlbG9uZ3MgdG8pDQotCSAqLw0KLQlzdHJ1 Y3QgYmluZGVyX3dvcmsgd29yazsNCi0JYmluZGVyX3VpbnRwdHJfdCBjb29raWU7DQotfTsNCi0N Ci0vKioNCi0gKiBzdHJ1Y3QgYmluZGVyX3JlZl9kYXRhIC0gYmluZGVyX3JlZiBjb3VudHMgYW5k IGlkDQotICogQGRlYnVnX2lkOiAgICAgICAgdW5pcXVlIElEIGZvciB0aGUgcmVmDQotICogQGRl c2M6ICAgICAgICAgICAgdW5pcXVlIHVzZXJzcGFjZSBoYW5kbGUgZm9yIHJlZg0KLSAqIEBzdHJv bmc6ICAgICAgICAgIHN0cm9uZyByZWYgY291bnQgKGRlYnVnZ2luZyBvbmx5IGlmIG5vdCBsb2Nr ZWQpDQotICogQHdlYWs6ICAgICAgICAgICAgd2VhayByZWYgY291bnQgKGRlYnVnZ2luZyBvbmx5 IGlmIG5vdCBsb2NrZWQpDQotICoNCi0gKiBTdHJ1Y3R1cmUgdG8gaG9sZCByZWYgY291bnQgYW5k IHJlZiBpZCBpbmZvcm1hdGlvbi4gU2luY2UNCi0gKiB0aGUgYWN0dWFsIHJlZiBjYW4gb25seSBi ZSBhY2Nlc3NlZCB3aXRoIGEgbG9jaywgdGhpcyBzdHJ1Y3R1cmUNCi0gKiBpcyB1c2VkIHRvIHJl dHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVmIHRvIGNhbGxlcnMgb2YNCi0gKiByZWYgaW5j L2RlYyBmdW5jdGlvbnMuDQotICovDQotc3RydWN0IGJpbmRlcl9yZWZfZGF0YSB7DQotCWludCBk ZWJ1Z19pZDsNCi0JdWludDMyX3QgZGVzYzsNCi0JaW50IHN0cm9uZzsNCi0JaW50IHdlYWs7DQot fTsNCi0NCi0vKioNCi0gKiBzdHJ1Y3QgYmluZGVyX3JlZiAtIHN0cnVjdCB0byB0cmFjayByZWZl cmVuY2VzIG9uIG5vZGVzDQotICogQGRhdGE6ICAgICAgICBiaW5kZXJfcmVmX2RhdGEgY29udGFp bmluZyBpZCwgaGFuZGxlLCBhbmQgY3VycmVudCByZWZjb3VudHMNCi0gKiBAcmJfbm9kZV9kZXNj OiBub2RlIGZvciBsb29rdXAgYnkgQGRhdGEuZGVzYyBpbiBwcm9jJ3MgcmJfdHJlZQ0KLSAqIEBy Yl9ub2RlX25vZGU6IG5vZGUgZm9yIGxvb2t1cCBieSBAbm9kZSBpbiBwcm9jJ3MgcmJfdHJlZQ0K LSAqIEBub2RlX2VudHJ5OiAgbGlzdCBlbnRyeSBmb3Igbm9kZS0+cmVmcyBsaXN0IGluIHRhcmdl dCBub2RlDQotICogICAgICAgICAgICAgICAocHJvdGVjdGVkIGJ5IEBub2RlLT5sb2NrKQ0KLSAq IEBwcm9jOiAgICAgICAgYmluZGVyX3Byb2MgY29udGFpbmluZyByZWYNCi0gKiBAbm9kZTogICAg ICAgIGJpbmRlcl9ub2RlIG9mIHRhcmdldCBub2RlLiBXaGVuIGNsZWFuaW5nIHVwIGENCi0gKiAg ICAgICAgICAgICAgIHJlZiBmb3IgZGVsZXRpb24gaW4gYmluZGVyX2NsZWFudXBfcmVmLCBhIG5v bi1OVUxMDQotICogICAgICAgICAgICAgICBAbm9kZSBpbmRpY2F0ZXMgdGhlIG5vZGUgbXVzdCBi ZSBmcmVlZA0KLSAqIEBkZWF0aDogICAgICAgcG9pbnRlciB0byBkZWF0aCBub3RpZmljYXRpb24g KHJlZl9kZWF0aCkgaWYgcmVxdWVzdGVkDQotICogICAgICAgICAgICAgICAocHJvdGVjdGVkIGJ5 IEBub2RlLT5sb2NrKQ0KLSAqDQotICogU3RydWN0dXJlIHRvIHRyYWNrIHJlZmVyZW5jZXMgZnJv bSBwcm9jQSB0byB0YXJnZXQgbm9kZSAob24gcHJvY0IpLiBUaGlzDQotICogc3RydWN0dXJlIGlz IHVuc2FmZSB0byBhY2Nlc3Mgd2l0aG91dCBob2xkaW5nIEBwcm9jLT5vdXRlcl9sb2NrLg0KLSAq Lw0KLXN0cnVjdCBiaW5kZXJfcmVmIHsNCi0JLyogTG9va3VwcyBuZWVkZWQ6ICovDQotCS8qICAg bm9kZSArIHByb2MgPT4gcmVmICh0cmFuc2FjdGlvbikgKi8NCi0JLyogICBkZXNjICsgcHJvYyA9 PiByZWYgKHRyYW5zYWN0aW9uLCBpbmMvZGVjIHJlZikgKi8NCi0JLyogICBub2RlID0+IHJlZnMg KyBwcm9jcyAocHJvYyBleGl0KSAqLw0KLQlzdHJ1Y3QgYmluZGVyX3JlZl9kYXRhIGRhdGE7DQot CXN0cnVjdCByYl9ub2RlIHJiX25vZGVfZGVzYzsNCi0Jc3RydWN0IHJiX25vZGUgcmJfbm9kZV9u b2RlOw0KLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlX2VudHJ5Ow0KLQlzdHJ1Y3QgYmluZGVyX3By b2MgKnByb2M7DQotCXN0cnVjdCBiaW5kZXJfbm9kZSAqbm9kZTsNCi0Jc3RydWN0IGJpbmRlcl9y ZWZfZGVhdGggKmRlYXRoOw0KLX07DQotDQogZW51bSBiaW5kZXJfZGVmZXJyZWRfc3RhdGUgew0K IAlCSU5ERVJfREVGRVJSRURfRkxVU0ggICAgICAgID0gMHgwMSwNCiAJQklOREVSX0RFRkVSUkVE X1JFTEVBU0UgICAgICA9IDB4MDIsDQogfTsNCiANCi0vKioNCi0gKiBzdHJ1Y3QgYmluZGVyX3By b2MgLSBiaW5kZXIgcHJvY2VzcyBib29ra2VlcGluZw0KLSAqIEBwcm9jX25vZGU6ICAgICAgICAg ICAgZWxlbWVudCBmb3IgYmluZGVyX3Byb2NzIGxpc3QNCi0gKiBAdGhyZWFkczogICAgICAgICAg ICAgIHJidHJlZSBvZiBiaW5kZXJfdGhyZWFkcyBpbiB0aGlzIHByb2MNCi0gKiAgICAgICAgICAg ICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkgQGlubmVyX2xvY2spDQotICogQG5vZGVzOiAgICAg ICAgICAgICAgICByYnRyZWUgb2YgYmluZGVyIG5vZGVzIGFzc29jaWF0ZWQgd2l0aA0KLSAqICAg ICAgICAgICAgICAgICAgICAgICAgdGhpcyBwcm9jIG9yZGVyZWQgYnkgbm9kZS0+cHRyDQotICog ICAgICAgICAgICAgICAgICAgICAgICAocHJvdGVjdGVkIGJ5IEBpbm5lcl9sb2NrKQ0KLSAqIEBy ZWZzX2J5X2Rlc2M6ICAgICAgICAgcmJ0cmVlIG9mIHJlZnMgb3JkZXJlZCBieSByZWYtPmRlc2MN Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkgQG91dGVyX2xvY2spDQot ICogQHJlZnNfYnlfbm9kZTogICAgICAgICByYnRyZWUgb2YgcmVmcyBvcmRlcmVkIGJ5IHJlZi0+ bm9kZQ0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAb3V0ZXJfbG9j aykNCi0gKiBAd2FpdGluZ190aHJlYWRzOiAgICAgIHRocmVhZHMgY3VycmVudGx5IHdhaXRpbmcg Zm9yIHByb2Mgd29yaw0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBA aW5uZXJfbG9jaykNCi0gKiBAcGlkICAgICAgICAgICAgICAgICAgIFBJRCBvZiBncm91cF9sZWFk ZXIgb2YgcHJvY2Vzcw0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKGludmFyaWFudCBhZnRl ciBpbml0aWFsaXplZCkNCi0gKiBAdHNrICAgICAgICAgICAgICAgICAgIHRhc2tfc3RydWN0IGZv ciBncm91cF9sZWFkZXIgb2YgcHJvY2Vzcw0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKGlu dmFyaWFudCBhZnRlciBpbml0aWFsaXplZCkNCi0gKiBAZGVmZXJyZWRfd29ya19ub2RlOiAgIGVs ZW1lbnQgZm9yIGJpbmRlcl9kZWZlcnJlZF9saXN0DQotICogICAgICAgICAgICAgICAgICAgICAg ICAocHJvdGVjdGVkIGJ5IGJpbmRlcl9kZWZlcnJlZF9sb2NrKQ0KLSAqIEBkZWZlcnJlZF93b3Jr OiAgICAgICAgYml0bWFwIG9mIGRlZmVycmVkIHdvcmsgdG8gcGVyZm9ybQ0KLSAqICAgICAgICAg ICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBiaW5kZXJfZGVmZXJyZWRfbG9jaykNCi0gKiBA aXNfZGVhZDogICAgICAgICAgICAgIHByb2Nlc3MgaXMgZGVhZCBhbmQgYXdhaXRpbmcgZnJlZQ0K LSAqICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbnMg YXJlIGNsZWFuZWQgdXANCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkg QGlubmVyX2xvY2spDQotICogQHRvZG86ICAgICAgICAgICAgICAgICBsaXN0IG9mIHdvcmsgZm9y IHRoaXMgcHJvY2Vzcw0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBA aW5uZXJfbG9jaykNCi0gKiBAc3RhdHM6ICAgICAgICAgICAgICAgIHBlci1wcm9jZXNzIGJpbmRl ciBzdGF0aXN0aWNzDQotICogICAgICAgICAgICAgICAgICAgICAgICAoYXRvbWljcywgbm8gbG9j ayBuZWVkZWQpDQotICogQGRlbGl2ZXJlZF9kZWF0aDogICAgICBsaXN0IG9mIGRlbGl2ZXJlZCBk ZWF0aCBub3RpZmljYXRpb24NCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQg YnkgQGlubmVyX2xvY2spDQotICogQG1heF90aHJlYWRzOiAgICAgICAgICBjYXAgb24gbnVtYmVy IG9mIGJpbmRlciB0aHJlYWRzDQotICogICAgICAgICAgICAgICAgICAgICAgICAocHJvdGVjdGVk IGJ5IEBpbm5lcl9sb2NrKQ0KLSAqIEByZXF1ZXN0ZWRfdGhyZWFkczogICAgbnVtYmVyIG9mIGJp bmRlciB0aHJlYWRzIHJlcXVlc3RlZCBidXQgbm90DQotICogICAgICAgICAgICAgICAgICAgICAg ICB5ZXQgc3RhcnRlZC4gSW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgY2FuDQotICogICAgICAg ICAgICAgICAgICAgICAgICBvbmx5IGJlIDAgb3IgMS4NCi0gKiAgICAgICAgICAgICAgICAgICAg ICAgIChwcm90ZWN0ZWQgYnkgQGlubmVyX2xvY2spDQotICogQHJlcXVlc3RlZF90aHJlYWRzX3N0 YXJ0ZWQ6IG51bWJlciBiaW5kZXIgdGhyZWFkcyBzdGFydGVkDQotICogICAgICAgICAgICAgICAg ICAgICAgICAocHJvdGVjdGVkIGJ5IEBpbm5lcl9sb2NrKQ0KLSAqIEB0bXBfcmVmOiAgICAgICAg ICAgICAgdGVtcG9yYXJ5IHJlZmVyZW5jZSB0byBpbmRpY2F0ZSBwcm9jIGlzIGluIHVzZQ0KLSAq ICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAaW5uZXJfbG9jaykNCi0gKiBA ZGVmYXVsdF9wcmlvcml0eTogICAgIGRlZmF1bHQgc2NoZWR1bGVyIHByaW9yaXR5DQotICogICAg ICAgICAgICAgICAgICAgICAgICAoaW52YXJpYW50IGFmdGVyIGluaXRpYWxpemVkKQ0KLSAqIEBk ZWJ1Z2ZzX2VudHJ5OiAgICAgICAgZGVidWdmcyBub2RlDQotICogQGFsbG9jOiAgICAgICAgICAg ICAgICBiaW5kZXIgYWxsb2NhdG9yIGJvb2trZWVwaW5nDQotICogQGNvbnRleHQ6ICAgICAgICAg ICAgICBiaW5kZXJfY29udGV4dCBmb3IgdGhpcyBwcm9jDQotICogICAgICAgICAgICAgICAgICAg ICAgICAoaW52YXJpYW50IGFmdGVyIGluaXRpYWxpemVkKQ0KLSAqIEBpbm5lcl9sb2NrOiAgICAg ICAgICAgY2FuIG5lc3QgdW5kZXIgb3V0ZXJfbG9jayBhbmQvb3Igbm9kZSBsb2NrDQotICogQG91 dGVyX2xvY2s6ICAgICAgICAgICBubyBuZXN0aW5nIHVuZGVyIGlubm9yIG9yIG5vZGUgbG9jaw0K LSAqICAgICAgICAgICAgICAgICAgICAgICAgTG9jayBvcmRlcjogMSkgb3V0ZXIsIDIpIG5vZGUs IDMpIGlubmVyDQotICogQGJpbmRlcmZzX2VudHJ5OiAgICAgICBwcm9jZXNzLXNwZWNpZmljIGJp bmRlcmZzIGxvZyBmaWxlDQotICoNCi0gKiBCb29ra2VlcGluZyBzdHJ1Y3R1cmUgZm9yIGJpbmRl ciBwcm9jZXNzZXMNCi0gKi8NCi1zdHJ1Y3QgYmluZGVyX3Byb2Mgew0KLQlzdHJ1Y3QgaGxpc3Rf bm9kZSBwcm9jX25vZGU7DQotCXN0cnVjdCByYl9yb290IHRocmVhZHM7DQotCXN0cnVjdCByYl9y b290IG5vZGVzOw0KLQlzdHJ1Y3QgcmJfcm9vdCByZWZzX2J5X2Rlc2M7DQotCXN0cnVjdCByYl9y b290IHJlZnNfYnlfbm9kZTsNCi0Jc3RydWN0IGxpc3RfaGVhZCB3YWl0aW5nX3RocmVhZHM7DQot CWludCBwaWQ7DQotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOw0KLQlzdHJ1Y3QgaGxpc3Rfbm9k ZSBkZWZlcnJlZF93b3JrX25vZGU7DQotCWludCBkZWZlcnJlZF93b3JrOw0KLQlib29sIGlzX2Rl YWQ7DQotDQotCXN0cnVjdCBsaXN0X2hlYWQgdG9kbzsNCi0Jc3RydWN0IGJpbmRlcl9zdGF0cyBz dGF0czsNCi0Jc3RydWN0IGxpc3RfaGVhZCBkZWxpdmVyZWRfZGVhdGg7DQotCWludCBtYXhfdGhy ZWFkczsNCi0JaW50IHJlcXVlc3RlZF90aHJlYWRzOw0KLQlpbnQgcmVxdWVzdGVkX3RocmVhZHNf c3RhcnRlZDsNCi0JaW50IHRtcF9yZWY7DQotCWxvbmcgZGVmYXVsdF9wcmlvcml0eTsNCi0Jc3Ry dWN0IGRlbnRyeSAqZGVidWdmc19lbnRyeTsNCi0Jc3RydWN0IGJpbmRlcl9hbGxvYyBhbGxvYzsN Ci0Jc3RydWN0IGJpbmRlcl9jb250ZXh0ICpjb250ZXh0Ow0KLQlzcGlubG9ja190IGlubmVyX2xv Y2s7DQotCXNwaW5sb2NrX3Qgb3V0ZXJfbG9jazsNCi0Jc3RydWN0IGRlbnRyeSAqYmluZGVyZnNf ZW50cnk7DQotfTsNCi0NCiBlbnVtIHsNCiAJQklOREVSX0xPT1BFUl9TVEFURV9SRUdJU1RFUkVE ICA9IDB4MDEsDQogCUJJTkRFUl9MT09QRVJfU1RBVEVfRU5URVJFRCAgICAgPSAweDAyLA0KQEAg LTQ5NSwxMjUgKzIwOSw2IEBAIGVudW0gew0KIH07DQogDQogLyoqDQotICogc3RydWN0IGJpbmRl cl90aHJlYWQgLSBiaW5kZXIgdGhyZWFkIGJvb2trZWVwaW5nDQotICogQHByb2M6ICAgICAgICAg ICAgICAgICBiaW5kZXIgcHJvY2VzcyBmb3IgdGhpcyB0aHJlYWQNCi0gKiAgICAgICAgICAgICAg ICAgICAgICAgIChpbnZhcmlhbnQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24pDQotICogQHJiX25vZGU6 ICAgICAgICAgICAgICBlbGVtZW50IGZvciBwcm9jLT50aHJlYWRzIHJidHJlZQ0KLSAqICAgICAg ICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jaykNCi0gKiBA d2FpdGluZ190aHJlYWRfbm9kZTogIGVsZW1lbnQgZm9yIEBwcm9jLT53YWl0aW5nX3RocmVhZHMg bGlzdA0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5u ZXJfbG9jaykNCi0gKiBAcGlkOiAgICAgICAgICAgICAgICAgIFBJRCBmb3IgdGhpcyB0aHJlYWQN Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgIChpbnZhcmlhbnQgYWZ0ZXIgaW5pdGlhbGl6YXRp b24pDQotICogQGxvb3BlcjogICAgICAgICAgICAgICBiaXRtYXAgb2YgbG9vcGluZyBzdGF0ZQ0K LSAqICAgICAgICAgICAgICAgICAgICAgICAgKG9ubHkgYWNjZXNzZWQgYnkgdGhpcyB0aHJlYWQp DQotICogQGxvb3Blcl9uZWVkc19yZXR1cm46ICBsb29waW5nIHRocmVhZCBuZWVkcyB0byBleGl0 IGRyaXZlcg0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKG5vIGxvY2sgbmVlZGVkKQ0KLSAq IEB0cmFuc2FjdGlvbl9zdGFjazogICAgc3RhY2sgb2YgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25z IGZvciB0aGlzIHRocmVhZA0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBi eSBAcHJvYy0+aW5uZXJfbG9jaykNCi0gKiBAdG9kbzogICAgICAgICAgICAgICAgIGxpc3Qgb2Yg d29yayB0byBkbyBmb3IgdGhpcyB0aHJlYWQNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIChw cm90ZWN0ZWQgYnkgQHByb2MtPmlubmVyX2xvY2spDQotICogQHByb2Nlc3NfdG9kbzogICAgICAg ICB3aGV0aGVyIHdvcmsgaW4gQHRvZG8gc2hvdWxkIGJlIHByb2Nlc3NlZA0KLSAqICAgICAgICAg ICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jaykNCi0gKiBAcmV0 dXJuX2Vycm9yOiAgICAgICAgIHRyYW5zYWN0aW9uIGVycm9ycyByZXBvcnRlZCBieSB0aGlzIHRo cmVhZA0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKG9ubHkgYWNjZXNzZWQgYnkgdGhpcyB0 aHJlYWQpDQotICogQHJlcGx5X2Vycm9yOiAgICAgICAgICB0cmFuc2FjdGlvbiBlcnJvcnMgcmVw b3J0ZWQgYnkgdGFyZ2V0IHRocmVhZA0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3Rl Y3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jaykNCi0gKiBAd2FpdDogICAgICAgICAgICAgICAgIHdh aXQgcXVldWUgZm9yIHRocmVhZCB3b3JrDQotICogQHN0YXRzOiAgICAgICAgICAgICAgICBwZXIt dGhyZWFkIHN0YXRpc3RpY3MNCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIChhdG9taWNzLCBu byBsb2NrIG5lZWRlZCkNCi0gKiBAdG1wX3JlZjogICAgICAgICAgICAgIHRlbXBvcmFyeSByZWZl cmVuY2UgdG8gaW5kaWNhdGUgdGhyZWFkIGlzIGluIHVzZQ0KLSAqICAgICAgICAgICAgICAgICAg ICAgICAgKGF0b21pYyBzaW5jZSBAcHJvYy0+aW5uZXJfbG9jayBjYW5ub3QNCi0gKiAgICAgICAg ICAgICAgICAgICAgICAgIGFsd2F5cyBiZSBhY3F1aXJlZCkNCi0gKiBAaXNfZGVhZDogICAgICAg ICAgICAgIHRocmVhZCBpcyBkZWFkIGFuZCBhd2FpdGluZyBmcmVlDQotICogICAgICAgICAgICAg ICAgICAgICAgICB3aGVuIG91dHN0YW5kaW5nIHRyYW5zYWN0aW9ucyBhcmUgY2xlYW5lZCB1cA0K LSAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9j aykNCi0gKg0KLSAqIEJvb2trZWVwaW5nIHN0cnVjdHVyZSBmb3IgYmluZGVyIHRocmVhZHMuDQot ICovDQotc3RydWN0IGJpbmRlcl90aHJlYWQgew0KLQlzdHJ1Y3QgYmluZGVyX3Byb2MgKnByb2M7 DQotCXN0cnVjdCByYl9ub2RlIHJiX25vZGU7DQotCXN0cnVjdCBsaXN0X2hlYWQgd2FpdGluZ190 aHJlYWRfbm9kZTsNCi0JaW50IHBpZDsNCi0JaW50IGxvb3BlcjsgICAgICAgICAgICAgIC8qIG9u bHkgbW9kaWZpZWQgYnkgdGhpcyB0aHJlYWQgKi8NCi0JYm9vbCBsb29wZXJfbmVlZF9yZXR1cm47 IC8qIGNhbiBiZSB3cml0dGVuIGJ5IG90aGVyIHRocmVhZCAqLw0KLQlzdHJ1Y3QgYmluZGVyX3Ry YW5zYWN0aW9uICp0cmFuc2FjdGlvbl9zdGFjazsNCi0Jc3RydWN0IGxpc3RfaGVhZCB0b2RvOw0K LQlib29sIHByb2Nlc3NfdG9kbzsNCi0Jc3RydWN0IGJpbmRlcl9lcnJvciByZXR1cm5fZXJyb3I7 DQotCXN0cnVjdCBiaW5kZXJfZXJyb3IgcmVwbHlfZXJyb3I7DQotCXdhaXRfcXVldWVfaGVhZF90 IHdhaXQ7DQotCXN0cnVjdCBiaW5kZXJfc3RhdHMgc3RhdHM7DQotCWF0b21pY190IHRtcF9yZWY7 DQotCWJvb2wgaXNfZGVhZDsNCi19Ow0KLQ0KLS8qKg0KLSAqIHN0cnVjdCBiaW5kZXJfdHhuX2Zk X2ZpeHVwIC0gdHJhbnNhY3Rpb24gZmQgZml4dXAgbGlzdCBlbGVtZW50DQotICogQGZpeHVwX2Vu dHJ5OiAgICAgICAgICBsaXN0IGVudHJ5DQotICogQGZpbGU6ICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZmlsZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggbmV3IGZkDQotICogQG9mZnNldDogICAgICAg ICAgICAgICBvZmZzZXQgaW4gYnVmZmVyIGRhdGEgdG8gdGhpcyBmaXh1cA0KLSAqDQotICogTGlz dCBlbGVtZW50IGZvciBmZCBmaXh1cHMgaW4gYSB0cmFuc2FjdGlvbi4gU2luY2UgZmlsZQ0KLSAq IGRlc2NyaXB0b3JzIG5lZWQgdG8gYmUgYWxsb2NhdGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZQ0K LSAqIHRhcmdldCBwcm9jZXNzLCB3ZSBwYXNzIGVhY2ggZmQgdG8gYmUgcHJvY2Vzc2VkIGluIHRo aXMNCi0gKiBzdHJ1Y3QuDQotICovDQotc3RydWN0IGJpbmRlcl90eG5fZmRfZml4dXAgew0KLQlz dHJ1Y3QgbGlzdF9oZWFkIGZpeHVwX2VudHJ5Ow0KLQlzdHJ1Y3QgZmlsZSAqZmlsZTsNCi0Jc2l6 ZV90IG9mZnNldDsNCi19Ow0KLQ0KLXN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb24gew0KLQlpbnQg ZGVidWdfaWQ7DQotCXN0cnVjdCBiaW5kZXJfd29yayB3b3JrOw0KLQlzdHJ1Y3QgYmluZGVyX3Ro cmVhZCAqZnJvbTsNCi0Jc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbiAqZnJvbV9wYXJlbnQ7DQot CXN0cnVjdCBiaW5kZXJfcHJvYyAqdG9fcHJvYzsNCi0Jc3RydWN0IGJpbmRlcl90aHJlYWQgKnRv X3RocmVhZDsNCi0Jc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbiAqdG9fcGFyZW50Ow0KLQl1bnNp Z25lZCBuZWVkX3JlcGx5OjE7DQotCS8qIHVuc2lnbmVkIGlzX2RlYWQ6MTsgKi8JLyogbm90IHVz ZWQgYXQgdGhlIG1vbWVudCAqLw0KLQ0KLQlzdHJ1Y3QgYmluZGVyX2J1ZmZlciAqYnVmZmVyOw0K LQl1bnNpZ25lZCBpbnQJY29kZTsNCi0JdW5zaWduZWQgaW50CWZsYWdzOw0KLQlsb25nCXByaW9y aXR5Ow0KLQlsb25nCXNhdmVkX3ByaW9yaXR5Ow0KLQlrdWlkX3QJc2VuZGVyX2V1aWQ7DQotCXN0 cnVjdCBsaXN0X2hlYWQgZmRfZml4dXBzOw0KLQliaW5kZXJfdWludHB0cl90IHNlY3VyaXR5X2N0 eDsNCi0JLyoqDQotCSAqIEBsb2NrOiAgcHJvdGVjdHMgQGZyb20sIEB0b19wcm9jLCBhbmQgQHRv X3RocmVhZA0KLQkgKg0KLQkgKiBAZnJvbSwgQHRvX3Byb2MsIGFuZCBAdG9fdGhyZWFkIGNhbiBi ZSBzZXQgdG8gTlVMTA0KLQkgKiBkdXJpbmcgdGhyZWFkIHRlYXJkb3duDQotCSAqLw0KLQlzcGlu bG9ja190IGxvY2s7DQotfTsNCi0NCi0vKioNCi0gKiBzdHJ1Y3QgYmluZGVyX29iamVjdCAtIHVu aW9uIG9mIGZsYXQgYmluZGVyIG9iamVjdCB0eXBlcw0KLSAqIEBoZHI6ICAgZ2VuZXJpYyBvYmpl Y3QgaGVhZGVyDQotICogQGZibzogICBiaW5kZXIgb2JqZWN0IChub2RlcyBhbmQgcmVmcykNCi0g KiBAZmRvOiAgIGZpbGUgZGVzY3JpcHRvciBvYmplY3QNCi0gKiBAYmJvOiAgIGJpbmRlciBidWZm ZXIgcG9pbnRlcg0KLSAqIEBmZGFvOiAgZmlsZSBkZXNjcmlwdG9yIGFycmF5DQotICoNCi0gKiBV c2VkIGZvciB0eXBlLWluZGVwZW5kZW50IG9iamVjdCBjb3BpZXMNCi0gKi8NCi1zdHJ1Y3QgYmlu ZGVyX29iamVjdCB7DQotCXVuaW9uIHsNCi0JCXN0cnVjdCBiaW5kZXJfb2JqZWN0X2hlYWRlciBo ZHI7DQotCQlzdHJ1Y3QgZmxhdF9iaW5kZXJfb2JqZWN0IGZibzsNCi0JCXN0cnVjdCBiaW5kZXJf ZmRfb2JqZWN0IGZkbzsNCi0JCXN0cnVjdCBiaW5kZXJfYnVmZmVyX29iamVjdCBiYm87DQotCQlz dHJ1Y3QgYmluZGVyX2ZkX2FycmF5X29iamVjdCBmZGFvOw0KLQl9Ow0KLX07DQotDQotLyoqDQog ICogYmluZGVyX3Byb2NfbG9jaygpIC0gQWNxdWlyZSBvdXRlciBsb2NrIGZvciBnaXZlbiBiaW5k ZXJfcHJvYw0KICAqIEBwcm9jOiAgICAgICAgIHN0cnVjdCBiaW5kZXJfcHJvYyB0byBhY3F1aXJl DQogICoNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2ludGVybmFsLmggYi9k cml2ZXJzL2FuZHJvaWQvYmluZGVyX2ludGVybmFsLmgNCmluZGV4IGFlOTkxMDkuLjViNjU0MTMg MTAwNjQ0DQotLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2ludGVybmFsLmgNCisrKyBiL2Ry aXZlcnMvYW5kcm9pZC9iaW5kZXJfaW50ZXJuYWwuaA0KQEAgLTExLDYgKzExLDcgQEANCiAjaW5j bHVkZSA8bGludXgvc3RkZGVmLmg+DQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQogI2luY2x1 ZGUgPGxpbnV4L3VpZGdpZC5oPg0KKyNpbmNsdWRlICJiaW5kZXJfYWxsb2MuaCINCiANCiBzdHJ1 Y3QgYmluZGVyX2NvbnRleHQgew0KIAlzdHJ1Y3QgYmluZGVyX25vZGUgKmJpbmRlcl9jb250ZXh0 X21ncl9ub2RlOw0KQEAgLTEzOSw2ICsxNDAsNDA5IEBAIHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rp b25fbG9nIHsNCiAJc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbl9sb2dfZW50cnkgZW50cnlbMzJd Ow0KIH07DQogDQorZW51bSBiaW5kZXJfc3RhdF90eXBlcyB7DQorCUJJTkRFUl9TVEFUX1BST0Ms DQorCUJJTkRFUl9TVEFUX1RIUkVBRCwNCisJQklOREVSX1NUQVRfTk9ERSwNCisJQklOREVSX1NU QVRfUkVGLA0KKwlCSU5ERVJfU1RBVF9ERUFUSCwNCisJQklOREVSX1NUQVRfVFJBTlNBQ1RJT04s DQorCUJJTkRFUl9TVEFUX1RSQU5TQUNUSU9OX0NPTVBMRVRFLA0KKwlCSU5ERVJfU1RBVF9DT1VO VA0KK307DQorDQorc3RydWN0IGJpbmRlcl9zdGF0cyB7DQorCWF0b21pY190IGJyW19JT0NfTlIo QlJfRkFJTEVEX1JFUExZKSArIDFdOw0KKwlhdG9taWNfdCBiY1tfSU9DX05SKEJDX1JFUExZX1NH KSArIDFdOw0KKwlhdG9taWNfdCBvYmpfY3JlYXRlZFtCSU5ERVJfU1RBVF9DT1VOVF07DQorCWF0 b21pY190IG9ial9kZWxldGVkW0JJTkRFUl9TVEFUX0NPVU5UXTsNCit9Ow0KKw0KKy8qKg0KKyAq IHN0cnVjdCBiaW5kZXJfd29yayAtIHdvcmsgZW5xdWV1ZWQgb24gYSB3b3JrbGlzdA0KKyAqIEBl bnRyeTogICAgICAgICAgICAgbm9kZSBlbnF1ZXVlZCBvbiBsaXN0DQorICogQHR5cGU6ICAgICAg ICAgICAgICB0eXBlIG9mIHdvcmsgdG8gYmUgcGVyZm9ybWVkDQorICoNCisgKiBUaGVyZSBhcmUg c2VwYXJhdGUgd29yayBsaXN0cyBmb3IgcHJvYywgdGhyZWFkLCBhbmQgbm9kZSAoYXN5bmMpLg0K KyAqLw0KK3N0cnVjdCBiaW5kZXJfd29yayB7DQorCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7DQor DQorCWVudW0gew0KKwkJQklOREVSX1dPUktfVFJBTlNBQ1RJT04gPSAxLA0KKwkJQklOREVSX1dP UktfVFJBTlNBQ1RJT05fQ09NUExFVEUsDQorCQlCSU5ERVJfV09SS19SRVRVUk5fRVJST1IsDQor CQlCSU5ERVJfV09SS19OT0RFLA0KKwkJQklOREVSX1dPUktfREVBRF9CSU5ERVIsDQorCQlCSU5E RVJfV09SS19ERUFEX0JJTkRFUl9BTkRfQ0xFQVIsDQorCQlCSU5ERVJfV09SS19DTEVBUl9ERUFU SF9OT1RJRklDQVRJT04sDQorCX0gdHlwZTsNCit9Ow0KKw0KK3N0cnVjdCBiaW5kZXJfZXJyb3Ig ew0KKwlzdHJ1Y3QgYmluZGVyX3dvcmsgd29yazsNCisJdWludDMyX3QgY21kOw0KK307DQorDQor Lyogc3RydWN0IGJpbmRlcl9ub2RlIC0gYmluZGVyIG5vZGUgYm9va2tlZXBpbmcNCisgKiBAZGVi dWdfaWQ6ICAgICAgICAgICAgIHVuaXF1ZSBJRCBmb3IgZGVidWdnaW5nDQorICogICAgICAgICAg ICAgICAgICAgICAgICAoaW52YXJpYW50IGFmdGVyIGluaXRpYWxpemVkKQ0KKyAqIEBsb2NrOiAg ICAgICAgICAgICAgICAgbG9jayBmb3Igbm9kZSBmaWVsZHMNCisgKiBAd29yazogICAgICAgICAg ICAgICAgIHdvcmtsaXN0IGVsZW1lbnQgZm9yIG5vZGUgd29yaw0KKyAqICAgICAgICAgICAgICAg ICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jaykNCisgKiBAcmJfbm9kZTog ICAgICAgICAgICAgIGVsZW1lbnQgZm9yIHByb2MtPm5vZGVzIHRyZWUNCisgKiAgICAgICAgICAg ICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkgQHByb2MtPmlubmVyX2xvY2spDQorICogQGRlYWRf bm9kZTogICAgICAgICAgICBlbGVtZW50IGZvciBiaW5kZXJfZGVhZF9ub2RlcyBsaXN0DQorICog ICAgICAgICAgICAgICAgICAgICAgICAocHJvdGVjdGVkIGJ5IGJpbmRlcl9kZWFkX25vZGVzX2xv Y2spDQorICogQHByb2M6ICAgICAgICAgICAgICAgICBiaW5kZXJfcHJvYyB0aGF0IG93bnMgdGhp cyBub2RlDQorICogICAgICAgICAgICAgICAgICAgICAgICAoaW52YXJpYW50IGFmdGVyIGluaXRp YWxpemVkKQ0KKyAqIEByZWZzOiAgICAgICAgICAgICAgICAgbGlzdCBvZiByZWZlcmVuY2VzIG9u IHRoaXMgbm9kZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAbG9j aykNCisgKiBAaW50ZXJuYWxfc3Ryb25nX3JlZnM6IHVzZWQgdG8gdGFrZSBzdHJvbmcgcmVmZXJl bmNlcyB3aGVuDQorICogICAgICAgICAgICAgICAgICAgICAgICBpbml0aWF0aW5nIGEgdHJhbnNh Y3Rpb24NCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkgQHByb2MtPmlu bmVyX2xvY2sgaWYgQHByb2MNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBieSBAbG9j aykNCisgKiBAbG9jYWxfd2Vha19yZWZzOiAgICAgIHdlYWsgdXNlciByZWZzIGZyb20gbG9jYWwg cHJvY2Vzcw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+ aW5uZXJfbG9jayBpZiBAcHJvYw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJ5IEBs b2NrKQ0KKyAqIEBsb2NhbF9zdHJvbmdfcmVmczogICAgc3Ryb25nIHVzZXIgcmVmcyBmcm9tIGxv Y2FsIHByb2Nlc3MNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkgQHBy b2MtPmlubmVyX2xvY2sgaWYgQHByb2MNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBi eSBAbG9jaykNCisgKiBAdG1wX3JlZnM6ICAgICAgICAgICAgIHRlbXBvcmFyeSBrZXJuZWwgcmVm cw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJf bG9jayB3aGlsZSBAcHJvYw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgaXMgdmFsaWQsIGFu ZCBieSBiaW5kZXJfZGVhZF9ub2Rlc19sb2NrDQorICogICAgICAgICAgICAgICAgICAgICAgICBp ZiBAcHJvYyBpcyBOVUxMLiBEdXJpbmcgaW5jL2RlYyBhbmQgbm9kZSByZWxlYXNlDQorICogICAg ICAgICAgICAgICAgICAgICAgICBpdCBpcyBhbHNvIHByb3RlY3RlZCBieSBAbG9jayB0byBwcm92 aWRlIHNhZmV0eQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlIG5vZGUgZGllcyBh bmQgQHByb2MgYmVjb21lcyBOVUxMKQ0KKyAqIEBwdHI6ICAgICAgICAgICAgICAgICAgdXNlcnNw YWNlIHBvaW50ZXIgZm9yIG5vZGUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChpbnZhcmlh bnQsIG5vIGxvY2sgbmVlZGVkKQ0KKyAqIEBjb29raWU6ICAgICAgICAgICAgICAgdXNlcnNwYWNl IGNvb2tpZSBmb3Igbm9kZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgKGludmFyaWFudCwg bm8gbG9jayBuZWVkZWQpDQorICogQGhhc19zdHJvbmdfcmVmOiAgICAgICB1c2Vyc3BhY2Ugbm90 aWZpZWQgb2Ygc3Ryb25nIHJlZg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3Rl ZCBieSBAcHJvYy0+aW5uZXJfbG9jayBpZiBAcHJvYw0KKyAqICAgICAgICAgICAgICAgICAgICAg ICAgYW5kIGJ5IEBsb2NrKQ0KKyAqIEBwZW5kaW5nX3N0cm9uZ19yZWY6ICAgdXNlcnNwYWNlIGhh cyBhY2tlZCBub3RpZmljYXRpb24gb2Ygc3Ryb25nIHJlZg0KKyAqICAgICAgICAgICAgICAgICAg ICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jayBpZiBAcHJvYw0KKyAqICAgICAg ICAgICAgICAgICAgICAgICAgYW5kIGJ5IEBsb2NrKQ0KKyAqIEBoYXNfd2Vha19yZWY6ICAgICAg ICAgdXNlcnNwYWNlIG5vdGlmaWVkIG9mIHdlYWsgcmVmDQorICogICAgICAgICAgICAgICAgICAg ICAgICAocHJvdGVjdGVkIGJ5IEBwcm9jLT5pbm5lcl9sb2NrIGlmIEBwcm9jDQorICogICAgICAg ICAgICAgICAgICAgICAgICBhbmQgYnkgQGxvY2spDQorICogQHBlbmRpbmdfd2Vha19yZWY6ICAg ICB1c2Vyc3BhY2UgaGFzIGFja2VkIG5vdGlmaWNhdGlvbiBvZiB3ZWFrIHJlZg0KKyAqICAgICAg ICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jayBpZiBAcHJv Yw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJ5IEBsb2NrKQ0KKyAqIEBoYXNfYXN5 bmNfdHJhbnNhY3Rpb246IGFzeW5jIHRyYW5zYWN0aW9uIHRvIG5vZGUgaW4gcHJvZ3Jlc3MNCisg KiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkgQGxvY2spDQorICogQGFjY2Vw dF9mZHM6ICAgICAgICAgICBmaWxlIGRlc2NyaXB0b3Igb3BlcmF0aW9ucyBzdXBwb3J0ZWQgZm9y IG5vZGUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChpbnZhcmlhbnQgYWZ0ZXIgaW5pdGlh bGl6ZWQpDQorICogQG1pbl9wcmlvcml0eTogICAgICAgICBtaW5pbXVtIHNjaGVkdWxpbmcgcHJp b3JpdHkNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChpbnZhcmlhbnQgYWZ0ZXIgaW5pdGlh bGl6ZWQpDQorICogQHR4bl9zZWN1cml0eV9jdHg6ICAgICByZXF1aXJlIHNlbmRlcidzIHNlY3Vy aXR5IGNvbnRleHQNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChpbnZhcmlhbnQgYWZ0ZXIg aW5pdGlhbGl6ZWQpDQorICogQGFzeW5jX3RvZG86ICAgICAgICAgICBsaXN0IG9mIGFzeW5jIHdv cmsgaXRlbXMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkgQHByb2Mt PmlubmVyX2xvY2spDQorICoNCisgKiBCb29ra2VlcGluZyBzdHJ1Y3R1cmUgZm9yIGJpbmRlciBu b2Rlcy4NCisgKi8NCitzdHJ1Y3QgYmluZGVyX25vZGUgew0KKwlpbnQgZGVidWdfaWQ7DQorCXNw aW5sb2NrX3QgbG9jazsNCisJc3RydWN0IGJpbmRlcl93b3JrIHdvcms7DQorCXVuaW9uIHsNCisJ CXN0cnVjdCByYl9ub2RlIHJiX25vZGU7DQorCQlzdHJ1Y3QgaGxpc3Rfbm9kZSBkZWFkX25vZGU7 DQorCX07DQorCXN0cnVjdCBiaW5kZXJfcHJvYyAqcHJvYzsNCisJc3RydWN0IGhsaXN0X2hlYWQg cmVmczsNCisJaW50IGludGVybmFsX3N0cm9uZ19yZWZzOw0KKwlpbnQgbG9jYWxfd2Vha19yZWZz Ow0KKwlpbnQgbG9jYWxfc3Ryb25nX3JlZnM7DQorCWludCB0bXBfcmVmczsNCisJYmluZGVyX3Vp bnRwdHJfdCBwdHI7DQorCWJpbmRlcl91aW50cHRyX3QgY29va2llOw0KKwlzdHJ1Y3Qgew0KKwkJ LyoNCisJCSAqIGJpdGZpZWxkIGVsZW1lbnRzIHByb3RlY3RlZCBieQ0KKwkJICogcHJvYyBpbm5l cl9sb2NrDQorCQkgKi8NCisJCXU4IGhhc19zdHJvbmdfcmVmOjE7DQorCQl1OCBwZW5kaW5nX3N0 cm9uZ19yZWY6MTsNCisJCXU4IGhhc193ZWFrX3JlZjoxOw0KKwkJdTggcGVuZGluZ193ZWFrX3Jl ZjoxOw0KKwl9Ow0KKwlzdHJ1Y3Qgew0KKwkJLyoNCisJCSAqIGludmFyaWFudCBhZnRlciBpbml0 aWFsaXphdGlvbg0KKwkJICovDQorCQl1OCBhY2NlcHRfZmRzOjE7DQorCQl1OCB0eG5fc2VjdXJp dHlfY3R4OjE7DQorCQl1OCBtaW5fcHJpb3JpdHk7DQorCX07DQorCWJvb2wgaGFzX2FzeW5jX3Ry YW5zYWN0aW9uOw0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGFzeW5jX3RvZG87DQorfTsNCisNCitzdHJ1 Y3QgYmluZGVyX3JlZl9kZWF0aCB7DQorCS8qKg0KKwkgKiBAd29yazogd29ya2xpc3QgZWxlbWVu dCBmb3IgZGVhdGggbm90aWZpY2F0aW9ucw0KKwkgKiAgICAgICAgKHByb3RlY3RlZCBieSBpbm5l cl9sb2NrIG9mIHRoZSBwcm9jIHRoYXQNCisJICogICAgICAgIHRoaXMgcmVmIGJlbG9uZ3MgdG8p DQorCSAqLw0KKwlzdHJ1Y3QgYmluZGVyX3dvcmsgd29yazsNCisJYmluZGVyX3VpbnRwdHJfdCBj b29raWU7DQorfTsNCisNCisvKioNCisgKiBzdHJ1Y3QgYmluZGVyX3JlZl9kYXRhIC0gYmluZGVy X3JlZiBjb3VudHMgYW5kIGlkDQorICogQGRlYnVnX2lkOiAgICAgICAgdW5pcXVlIElEIGZvciB0 aGUgcmVmDQorICogQGRlc2M6ICAgICAgICAgICAgdW5pcXVlIHVzZXJzcGFjZSBoYW5kbGUgZm9y IHJlZg0KKyAqIEBzdHJvbmc6ICAgICAgICAgIHN0cm9uZyByZWYgY291bnQgKGRlYnVnZ2luZyBv bmx5IGlmIG5vdCBsb2NrZWQpDQorICogQHdlYWs6ICAgICAgICAgICAgd2VhayByZWYgY291bnQg KGRlYnVnZ2luZyBvbmx5IGlmIG5vdCBsb2NrZWQpDQorICoNCisgKiBTdHJ1Y3R1cmUgdG8gaG9s ZCByZWYgY291bnQgYW5kIHJlZiBpZCBpbmZvcm1hdGlvbi4gU2luY2UNCisgKiB0aGUgYWN0dWFs IHJlZiBjYW4gb25seSBiZSBhY2Nlc3NlZCB3aXRoIGEgbG9jaywgdGhpcyBzdHJ1Y3R1cmUNCisg KiBpcyB1c2VkIHRvIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVmIHRvIGNhbGxlcnMg b2YNCisgKiByZWYgaW5jL2RlYyBmdW5jdGlvbnMuDQorICovDQorc3RydWN0IGJpbmRlcl9yZWZf ZGF0YSB7DQorCWludCBkZWJ1Z19pZDsNCisJdWludDMyX3QgZGVzYzsNCisJaW50IHN0cm9uZzsN CisJaW50IHdlYWs7DQorfTsNCisNCisvKioNCisgKiBzdHJ1Y3QgYmluZGVyX3JlZiAtIHN0cnVj dCB0byB0cmFjayByZWZlcmVuY2VzIG9uIG5vZGVzDQorICogQGRhdGE6ICAgICAgICBiaW5kZXJf cmVmX2RhdGEgY29udGFpbmluZyBpZCwgaGFuZGxlLCBhbmQgY3VycmVudCByZWZjb3VudHMNCisg KiBAcmJfbm9kZV9kZXNjOiBub2RlIGZvciBsb29rdXAgYnkgQGRhdGEuZGVzYyBpbiBwcm9jJ3Mg cmJfdHJlZQ0KKyAqIEByYl9ub2RlX25vZGU6IG5vZGUgZm9yIGxvb2t1cCBieSBAbm9kZSBpbiBw cm9jJ3MgcmJfdHJlZQ0KKyAqIEBub2RlX2VudHJ5OiAgbGlzdCBlbnRyeSBmb3Igbm9kZS0+cmVm cyBsaXN0IGluIHRhcmdldCBub2RlDQorICogICAgICAgICAgICAgICAocHJvdGVjdGVkIGJ5IEBu b2RlLT5sb2NrKQ0KKyAqIEBwcm9jOiAgICAgICAgYmluZGVyX3Byb2MgY29udGFpbmluZyByZWYN CisgKiBAbm9kZTogICAgICAgIGJpbmRlcl9ub2RlIG9mIHRhcmdldCBub2RlLiBXaGVuIGNsZWFu aW5nIHVwIGENCisgKiAgICAgICAgICAgICAgIHJlZiBmb3IgZGVsZXRpb24gaW4gYmluZGVyX2Ns ZWFudXBfcmVmLCBhIG5vbi1OVUxMDQorICogICAgICAgICAgICAgICBAbm9kZSBpbmRpY2F0ZXMg dGhlIG5vZGUgbXVzdCBiZSBmcmVlZA0KKyAqIEBkZWF0aDogICAgICAgcG9pbnRlciB0byBkZWF0 aCBub3RpZmljYXRpb24gKHJlZl9kZWF0aCkgaWYgcmVxdWVzdGVkDQorICogICAgICAgICAgICAg ICAocHJvdGVjdGVkIGJ5IEBub2RlLT5sb2NrKQ0KKyAqDQorICogU3RydWN0dXJlIHRvIHRyYWNr IHJlZmVyZW5jZXMgZnJvbSBwcm9jQSB0byB0YXJnZXQgbm9kZSAob24gcHJvY0IpLiBUaGlzDQor ICogc3RydWN0dXJlIGlzIHVuc2FmZSB0byBhY2Nlc3Mgd2l0aG91dCBob2xkaW5nIEBwcm9jLT5v dXRlcl9sb2NrLg0KKyAqLw0KK3N0cnVjdCBiaW5kZXJfcmVmIHsNCisJLyogTG9va3VwcyBuZWVk ZWQ6ICovDQorCS8qICAgbm9kZSArIHByb2MgPT4gcmVmICh0cmFuc2FjdGlvbikgKi8NCisJLyog ICBkZXNjICsgcHJvYyA9PiByZWYgKHRyYW5zYWN0aW9uLCBpbmMvZGVjIHJlZikgKi8NCisJLyog ICBub2RlID0+IHJlZnMgKyBwcm9jcyAocHJvYyBleGl0KSAqLw0KKwlzdHJ1Y3QgYmluZGVyX3Jl Zl9kYXRhIGRhdGE7DQorCXN0cnVjdCByYl9ub2RlIHJiX25vZGVfZGVzYzsNCisJc3RydWN0IHJi X25vZGUgcmJfbm9kZV9ub2RlOw0KKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlX2VudHJ5Ow0KKwlz dHJ1Y3QgYmluZGVyX3Byb2MgKnByb2M7DQorCXN0cnVjdCBiaW5kZXJfbm9kZSAqbm9kZTsNCisJ c3RydWN0IGJpbmRlcl9yZWZfZGVhdGggKmRlYXRoOw0KK307DQorDQorLyoqDQorICogc3RydWN0 IGJpbmRlcl9wcm9jIC0gYmluZGVyIHByb2Nlc3MgYm9va2tlZXBpbmcNCisgKiBAcHJvY19ub2Rl OiAgICAgICAgICAgIGVsZW1lbnQgZm9yIGJpbmRlcl9wcm9jcyBsaXN0DQorICogQHRocmVhZHM6 ICAgICAgICAgICAgICByYnRyZWUgb2YgYmluZGVyX3RocmVhZHMgaW4gdGhpcyBwcm9jDQorICog ICAgICAgICAgICAgICAgICAgICAgICAocHJvdGVjdGVkIGJ5IEBpbm5lcl9sb2NrKQ0KKyAqIEBu b2RlczogICAgICAgICAgICAgICAgcmJ0cmVlIG9mIGJpbmRlciBub2RlcyBhc3NvY2lhdGVkIHdp dGgNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcHJvYyBvcmRlcmVkIGJ5IG5vZGUt PnB0cg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAaW5uZXJfbG9j aykNCisgKiBAcmVmc19ieV9kZXNjOiAgICAgICAgIHJidHJlZSBvZiByZWZzIG9yZGVyZWQgYnkg cmVmLT5kZXNjDQorICogICAgICAgICAgICAgICAgICAgICAgICAocHJvdGVjdGVkIGJ5IEBvdXRl cl9sb2NrKQ0KKyAqIEByZWZzX2J5X25vZGU6ICAgICAgICAgcmJ0cmVlIG9mIHJlZnMgb3JkZXJl ZCBieSByZWYtPm5vZGUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkg QG91dGVyX2xvY2spDQorICogQHdhaXRpbmdfdGhyZWFkczogICAgICB0aHJlYWRzIGN1cnJlbnRs eSB3YWl0aW5nIGZvciBwcm9jIHdvcmsNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90 ZWN0ZWQgYnkgQGlubmVyX2xvY2spDQorICogQHBpZCAgICAgICAgICAgICAgICAgICBQSUQgb2Yg Z3JvdXBfbGVhZGVyIG9mIHByb2Nlc3MNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChpbnZh cmlhbnQgYWZ0ZXIgaW5pdGlhbGl6ZWQpDQorICogQHRzayAgICAgICAgICAgICAgICAgICB0YXNr X3N0cnVjdCBmb3IgZ3JvdXBfbGVhZGVyIG9mIHByb2Nlc3MNCisgKiAgICAgICAgICAgICAgICAg ICAgICAgIChpbnZhcmlhbnQgYWZ0ZXIgaW5pdGlhbGl6ZWQpDQorICogQGRlZmVycmVkX3dvcmtf bm9kZTogICBlbGVtZW50IGZvciBiaW5kZXJfZGVmZXJyZWRfbGlzdA0KKyAqICAgICAgICAgICAg ICAgICAgICAgICAgKHByb3RlY3RlZCBieSBiaW5kZXJfZGVmZXJyZWRfbG9jaykNCisgKiBAZGVm ZXJyZWRfd29yazogICAgICAgIGJpdG1hcCBvZiBkZWZlcnJlZCB3b3JrIHRvIHBlcmZvcm0NCisg KiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkgYmluZGVyX2RlZmVycmVkX2xv Y2spDQorICogQGlzX2RlYWQ6ICAgICAgICAgICAgICBwcm9jZXNzIGlzIGRlYWQgYW5kIGF3YWl0 aW5nIGZyZWUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gb3V0c3RhbmRpbmcgdHJh bnNhY3Rpb25zIGFyZSBjbGVhbmVkIHVwDQorICogICAgICAgICAgICAgICAgICAgICAgICAocHJv dGVjdGVkIGJ5IEBpbm5lcl9sb2NrKQ0KKyAqIEB0b2RvOiAgICAgICAgICAgICAgICAgbGlzdCBv ZiB3b3JrIGZvciB0aGlzIHByb2Nlc3MNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90 ZWN0ZWQgYnkgQGlubmVyX2xvY2spDQorICogQHN0YXRzOiAgICAgICAgICAgICAgICBwZXItcHJv Y2VzcyBiaW5kZXIgc3RhdGlzdGljcw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgKGF0b21p Y3MsIG5vIGxvY2sgbmVlZGVkKQ0KKyAqIEBkZWxpdmVyZWRfZGVhdGg6ICAgICAgbGlzdCBvZiBk ZWxpdmVyZWQgZGVhdGggbm90aWZpY2F0aW9uDQorICogICAgICAgICAgICAgICAgICAgICAgICAo cHJvdGVjdGVkIGJ5IEBpbm5lcl9sb2NrKQ0KKyAqIEBtYXhfdGhyZWFkczogICAgICAgICAgY2Fw IG9uIG51bWJlciBvZiBiaW5kZXIgdGhyZWFkcw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAg KHByb3RlY3RlZCBieSBAaW5uZXJfbG9jaykNCisgKiBAcmVxdWVzdGVkX3RocmVhZHM6ICAgIG51 bWJlciBvZiBiaW5kZXIgdGhyZWFkcyByZXF1ZXN0ZWQgYnV0IG5vdA0KKyAqICAgICAgICAgICAg ICAgICAgICAgICAgeWV0IHN0YXJ0ZWQuIEluIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGNhbg0K KyAqICAgICAgICAgICAgICAgICAgICAgICAgb25seSBiZSAwIG9yIDEuDQorICogICAgICAgICAg ICAgICAgICAgICAgICAocHJvdGVjdGVkIGJ5IEBpbm5lcl9sb2NrKQ0KKyAqIEByZXF1ZXN0ZWRf dGhyZWFkc19zdGFydGVkOiBudW1iZXIgYmluZGVyIHRocmVhZHMgc3RhcnRlZA0KKyAqICAgICAg ICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAaW5uZXJfbG9jaykNCisgKiBAdG1wX3Jl ZjogICAgICAgICAgICAgIHRlbXBvcmFyeSByZWZlcmVuY2UgdG8gaW5kaWNhdGUgcHJvYyBpcyBp biB1c2UNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQgYnkgQGlubmVyX2xv Y2spDQorICogQGRlZmF1bHRfcHJpb3JpdHk6ICAgICBkZWZhdWx0IHNjaGVkdWxlciBwcmlvcml0 eQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgKGludmFyaWFudCBhZnRlciBpbml0aWFsaXpl ZCkNCisgKiBAZGVidWdmc19lbnRyeTogICAgICAgIGRlYnVnZnMgbm9kZQ0KKyAqIEBhbGxvYzog ICAgICAgICAgICAgICAgYmluZGVyIGFsbG9jYXRvciBib29ra2VlcGluZw0KKyAqIEBjb250ZXh0 OiAgICAgICAgICAgICAgYmluZGVyX2NvbnRleHQgZm9yIHRoaXMgcHJvYw0KKyAqICAgICAgICAg ICAgICAgICAgICAgICAgKGludmFyaWFudCBhZnRlciBpbml0aWFsaXplZCkNCisgKiBAaW5uZXJf bG9jazogICAgICAgICAgIGNhbiBuZXN0IHVuZGVyIG91dGVyX2xvY2sgYW5kL29yIG5vZGUgbG9j aw0KKyAqIEBvdXRlcl9sb2NrOiAgICAgICAgICAgbm8gbmVzdGluZyB1bmRlciBpbm5vciBvciBu b2RlIGxvY2sNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIExvY2sgb3JkZXI6IDEpIG91dGVy LCAyKSBub2RlLCAzKSBpbm5lcg0KKyAqIEBiaW5kZXJmc19lbnRyeTogICAgICAgcHJvY2Vzcy1z cGVjaWZpYyBiaW5kZXJmcyBsb2cgZmlsZQ0KKyAqDQorICogQm9va2tlZXBpbmcgc3RydWN0dXJl IGZvciBiaW5kZXIgcHJvY2Vzc2VzDQorICovDQorc3RydWN0IGJpbmRlcl9wcm9jIHsNCisJc3Ry dWN0IGhsaXN0X25vZGUgcHJvY19ub2RlOw0KKwlzdHJ1Y3QgcmJfcm9vdCB0aHJlYWRzOw0KKwlz dHJ1Y3QgcmJfcm9vdCBub2RlczsNCisJc3RydWN0IHJiX3Jvb3QgcmVmc19ieV9kZXNjOw0KKwlz dHJ1Y3QgcmJfcm9vdCByZWZzX2J5X25vZGU7DQorCXN0cnVjdCBsaXN0X2hlYWQgd2FpdGluZ190 aHJlYWRzOw0KKwlpbnQgcGlkOw0KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsNCisJc3RydWN0 IGhsaXN0X25vZGUgZGVmZXJyZWRfd29ya19ub2RlOw0KKwlpbnQgZGVmZXJyZWRfd29yazsNCisJ Ym9vbCBpc19kZWFkOw0KKw0KKwlzdHJ1Y3QgbGlzdF9oZWFkIHRvZG87DQorCXN0cnVjdCBiaW5k ZXJfc3RhdHMgc3RhdHM7DQorCXN0cnVjdCBsaXN0X2hlYWQgZGVsaXZlcmVkX2RlYXRoOw0KKwlp bnQgbWF4X3RocmVhZHM7DQorCWludCByZXF1ZXN0ZWRfdGhyZWFkczsNCisJaW50IHJlcXVlc3Rl ZF90aHJlYWRzX3N0YXJ0ZWQ7DQorCWludCB0bXBfcmVmOw0KKwlsb25nIGRlZmF1bHRfcHJpb3Jp dHk7DQorCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZW50cnk7DQorCXN0cnVjdCBiaW5kZXJfYWxs b2MgYWxsb2M7DQorCXN0cnVjdCBiaW5kZXJfY29udGV4dCAqY29udGV4dDsNCisJc3BpbmxvY2tf dCBpbm5lcl9sb2NrOw0KKwlzcGlubG9ja190IG91dGVyX2xvY2s7DQorCXN0cnVjdCBkZW50cnkg KmJpbmRlcmZzX2VudHJ5Ow0KK307DQorDQorLyoqDQorICogc3RydWN0IGJpbmRlcl90aHJlYWQg LSBiaW5kZXIgdGhyZWFkIGJvb2trZWVwaW5nDQorICogQHByb2M6ICAgICAgICAgICAgICAgICBi aW5kZXIgcHJvY2VzcyBmb3IgdGhpcyB0aHJlYWQNCisgKiAgICAgICAgICAgICAgICAgICAgICAg IChpbnZhcmlhbnQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24pDQorICogQHJiX25vZGU6ICAgICAgICAg ICAgICBlbGVtZW50IGZvciBwcm9jLT50aHJlYWRzIHJidHJlZQ0KKyAqICAgICAgICAgICAgICAg ICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jaykNCisgKiBAd2FpdGluZ190 aHJlYWRfbm9kZTogIGVsZW1lbnQgZm9yIEBwcm9jLT53YWl0aW5nX3RocmVhZHMgbGlzdA0KKyAq ICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jaykN CisgKiBAcGlkOiAgICAgICAgICAgICAgICAgIFBJRCBmb3IgdGhpcyB0aHJlYWQNCisgKiAgICAg ICAgICAgICAgICAgICAgICAgIChpbnZhcmlhbnQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24pDQorICog QGxvb3BlcjogICAgICAgICAgICAgICBiaXRtYXAgb2YgbG9vcGluZyBzdGF0ZQ0KKyAqICAgICAg ICAgICAgICAgICAgICAgICAgKG9ubHkgYWNjZXNzZWQgYnkgdGhpcyB0aHJlYWQpDQorICogQGxv b3Blcl9uZWVkc19yZXR1cm46ICBsb29waW5nIHRocmVhZCBuZWVkcyB0byBleGl0IGRyaXZlcg0K KyAqICAgICAgICAgICAgICAgICAgICAgICAgKG5vIGxvY2sgbmVlZGVkKQ0KKyAqIEB0cmFuc2Fj dGlvbl9zdGFjazogICAgc3RhY2sgb2YgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIGZvciB0aGlz IHRocmVhZA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+ aW5uZXJfbG9jaykNCisgKiBAdG9kbzogICAgICAgICAgICAgICAgIGxpc3Qgb2Ygd29yayB0byBk byBmb3IgdGhpcyB0aHJlYWQNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChwcm90ZWN0ZWQg YnkgQHByb2MtPmlubmVyX2xvY2spDQorICogQHByb2Nlc3NfdG9kbzogICAgICAgICB3aGV0aGVy IHdvcmsgaW4gQHRvZG8gc2hvdWxkIGJlIHByb2Nlc3NlZA0KKyAqICAgICAgICAgICAgICAgICAg ICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jaykNCisgKiBAcmV0dXJuX2Vycm9y OiAgICAgICAgIHRyYW5zYWN0aW9uIGVycm9ycyByZXBvcnRlZCBieSB0aGlzIHRocmVhZA0KKyAq ICAgICAgICAgICAgICAgICAgICAgICAgKG9ubHkgYWNjZXNzZWQgYnkgdGhpcyB0aHJlYWQpDQor ICogQHJlcGx5X2Vycm9yOiAgICAgICAgICB0cmFuc2FjdGlvbiBlcnJvcnMgcmVwb3J0ZWQgYnkg dGFyZ2V0IHRocmVhZA0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBA cHJvYy0+aW5uZXJfbG9jaykNCisgKiBAd2FpdDogICAgICAgICAgICAgICAgIHdhaXQgcXVldWUg Zm9yIHRocmVhZCB3b3JrDQorICogQHN0YXRzOiAgICAgICAgICAgICAgICBwZXItdGhyZWFkIHN0 YXRpc3RpY3MNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIChhdG9taWNzLCBubyBsb2NrIG5l ZWRlZCkNCisgKiBAdG1wX3JlZjogICAgICAgICAgICAgIHRlbXBvcmFyeSByZWZlcmVuY2UgdG8g aW5kaWNhdGUgdGhyZWFkIGlzIGluIHVzZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgKGF0 b21pYyBzaW5jZSBAcHJvYy0+aW5uZXJfbG9jayBjYW5ub3QNCisgKiAgICAgICAgICAgICAgICAg ICAgICAgIGFsd2F5cyBiZSBhY3F1aXJlZCkNCisgKiBAaXNfZGVhZDogICAgICAgICAgICAgIHRo cmVhZCBpcyBkZWFkIGFuZCBhd2FpdGluZyBmcmVlDQorICogICAgICAgICAgICAgICAgICAgICAg ICB3aGVuIG91dHN0YW5kaW5nIHRyYW5zYWN0aW9ucyBhcmUgY2xlYW5lZCB1cA0KKyAqICAgICAg ICAgICAgICAgICAgICAgICAgKHByb3RlY3RlZCBieSBAcHJvYy0+aW5uZXJfbG9jaykNCisgKg0K KyAqIEJvb2trZWVwaW5nIHN0cnVjdHVyZSBmb3IgYmluZGVyIHRocmVhZHMuDQorICovDQorc3Ry dWN0IGJpbmRlcl90aHJlYWQgew0KKwlzdHJ1Y3QgYmluZGVyX3Byb2MgKnByb2M7DQorCXN0cnVj dCByYl9ub2RlIHJiX25vZGU7DQorCXN0cnVjdCBsaXN0X2hlYWQgd2FpdGluZ190aHJlYWRfbm9k ZTsNCisJaW50IHBpZDsNCisJaW50IGxvb3BlcjsgICAgICAgICAgICAgIC8qIG9ubHkgbW9kaWZp ZWQgYnkgdGhpcyB0aHJlYWQgKi8NCisJYm9vbCBsb29wZXJfbmVlZF9yZXR1cm47IC8qIGNhbiBi ZSB3cml0dGVuIGJ5IG90aGVyIHRocmVhZCAqLw0KKwlzdHJ1Y3QgYmluZGVyX3RyYW5zYWN0aW9u ICp0cmFuc2FjdGlvbl9zdGFjazsNCisJc3RydWN0IGxpc3RfaGVhZCB0b2RvOw0KKwlib29sIHBy b2Nlc3NfdG9kbzsNCisJc3RydWN0IGJpbmRlcl9lcnJvciByZXR1cm5fZXJyb3I7DQorCXN0cnVj dCBiaW5kZXJfZXJyb3IgcmVwbHlfZXJyb3I7DQorCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7DQor CXN0cnVjdCBiaW5kZXJfc3RhdHMgc3RhdHM7DQorCWF0b21pY190IHRtcF9yZWY7DQorCWJvb2wg aXNfZGVhZDsNCit9Ow0KKw0KKy8qKg0KKyAqIHN0cnVjdCBiaW5kZXJfdHhuX2ZkX2ZpeHVwIC0g dHJhbnNhY3Rpb24gZmQgZml4dXAgbGlzdCBlbGVtZW50DQorICogQGZpeHVwX2VudHJ5OiAgICAg ICAgICBsaXN0IGVudHJ5DQorICogQGZpbGU6ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmlsZSB0 byBiZSBhc3NvY2lhdGVkIHdpdGggbmV3IGZkDQorICogQG9mZnNldDogICAgICAgICAgICAgICBv ZmZzZXQgaW4gYnVmZmVyIGRhdGEgdG8gdGhpcyBmaXh1cA0KKyAqDQorICogTGlzdCBlbGVtZW50 IGZvciBmZCBmaXh1cHMgaW4gYSB0cmFuc2FjdGlvbi4gU2luY2UgZmlsZQ0KKyAqIGRlc2NyaXB0 b3JzIG5lZWQgdG8gYmUgYWxsb2NhdGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZQ0KKyAqIHRhcmdl dCBwcm9jZXNzLCB3ZSBwYXNzIGVhY2ggZmQgdG8gYmUgcHJvY2Vzc2VkIGluIHRoaXMNCisgKiBz dHJ1Y3QuDQorICovDQorc3RydWN0IGJpbmRlcl90eG5fZmRfZml4dXAgew0KKwlzdHJ1Y3QgbGlz dF9oZWFkIGZpeHVwX2VudHJ5Ow0KKwlzdHJ1Y3QgZmlsZSAqZmlsZTsNCisJc2l6ZV90IG9mZnNl dDsNCit9Ow0KKw0KK3N0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb24gew0KKwlpbnQgZGVidWdfaWQ7 DQorCXN0cnVjdCBiaW5kZXJfd29yayB3b3JrOw0KKwlzdHJ1Y3QgYmluZGVyX3RocmVhZCAqZnJv bTsNCisJc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbiAqZnJvbV9wYXJlbnQ7DQorCXN0cnVjdCBi aW5kZXJfcHJvYyAqdG9fcHJvYzsNCisJc3RydWN0IGJpbmRlcl90aHJlYWQgKnRvX3RocmVhZDsN CisJc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbiAqdG9fcGFyZW50Ow0KKwl1bnNpZ25lZCBuZWVk X3JlcGx5OjE7DQorCS8qIHVuc2lnbmVkIGlzX2RlYWQ6MTsgKi8gICAgICAgLyogbm90IHVzZWQg YXQgdGhlIG1vbWVudCAqLw0KKw0KKwlzdHJ1Y3QgYmluZGVyX2J1ZmZlciAqYnVmZmVyOw0KKwl1 bnNpZ25lZCBpbnQgICAgY29kZTsNCisJdW5zaWduZWQgaW50ICAgIGZsYWdzOw0KKwlsb25nICAg IHByaW9yaXR5Ow0KKwlsb25nICAgIHNhdmVkX3ByaW9yaXR5Ow0KKwlrdWlkX3QgIHNlbmRlcl9l dWlkOw0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZkX2ZpeHVwczsNCisJYmluZGVyX3VpbnRwdHJfdCBz ZWN1cml0eV9jdHg7DQorCS8qKg0KKwkgKiBAbG9jazogIHByb3RlY3RzIEBmcm9tLCBAdG9fcHJv YywgYW5kIEB0b190aHJlYWQNCisJICoNCisJICogQGZyb20sIEB0b19wcm9jLCBhbmQgQHRvX3Ro cmVhZCBjYW4gYmUgc2V0IHRvIE5VTEwNCisJICogZHVyaW5nIHRocmVhZCB0ZWFyZG93bg0KKwkg Ki8NCisJc3BpbmxvY2tfdCBsb2NrOw0KK307DQorDQorLyoqDQorICogc3RydWN0IGJpbmRlcl9v YmplY3QgLSB1bmlvbiBvZiBmbGF0IGJpbmRlciBvYmplY3QgdHlwZXMNCisgKiBAaGRyOiAgIGdl bmVyaWMgb2JqZWN0IGhlYWRlcg0KKyAqIEBmYm86ICAgYmluZGVyIG9iamVjdCAobm9kZXMgYW5k IHJlZnMpDQorICogQGZkbzogICBmaWxlIGRlc2NyaXB0b3Igb2JqZWN0DQorICogQGJibzogICBi aW5kZXIgYnVmZmVyIHBvaW50ZXINCisgKiBAZmRhbzogIGZpbGUgZGVzY3JpcHRvciBhcnJheQ0K KyAqDQorICogVXNlZCBmb3IgdHlwZS1pbmRlcGVuZGVudCBvYmplY3QgY29waWVzDQorICovDQor c3RydWN0IGJpbmRlcl9vYmplY3Qgew0KKwl1bmlvbiB7DQorCQlzdHJ1Y3QgYmluZGVyX29iamVj dF9oZWFkZXIgaGRyOw0KKwkJc3RydWN0IGZsYXRfYmluZGVyX29iamVjdCBmYm87DQorCQlzdHJ1 Y3QgYmluZGVyX2ZkX29iamVjdCBmZG87DQorCQlzdHJ1Y3QgYmluZGVyX2J1ZmZlcl9vYmplY3Qg YmJvOw0KKwkJc3RydWN0IGJpbmRlcl9mZF9hcnJheV9vYmplY3QgZmRhbzsNCisJfTsNCit9Ow0K Kw0KIGV4dGVybiBzdHJ1Y3QgYmluZGVyX3RyYW5zYWN0aW9uX2xvZyBiaW5kZXJfdHJhbnNhY3Rp b25fbG9nOw0KIGV4dGVybiBzdHJ1Y3QgYmluZGVyX3RyYW5zYWN0aW9uX2xvZyBiaW5kZXJfdHJh bnNhY3Rpb25fbG9nX2ZhaWxlZDsNCiAjZW5kaWYgLyogX0xJTlVYX0JJTkRFUl9JTlRFUk5BTF9I ICovDQotLSANCjEuNy45LjUNCg== 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=-13.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, 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 0AB10C433E0 for ; Tue, 4 Aug 2020 13:59:46 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 C74572086A for ; Tue, 4 Aug 2020 13:59:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="rhr5rMy2"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="bH7WwoKZ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C74572086A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-ID:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=7jTocwKNepyZ8BVevGk10ufOPJsDcOaSYri7A8aKwU8=; b=rhr5rMy2Z3GtJ/zKK6LWImMuE Gxy+iQ0BC8A4vXsmVS6ldnomy9UCe//GPUo0+YRmd74j2wEJXagxL847Mk16I/rRizFgp3mifKoLJ vp9AML/nH/rL6CmgLElnT9i/BXVCm0lUHR27yz503YZTLjXuRIg+uCo7OpT7XidnjEWTZk9O7EtB7 AGlWnFfDxikvCV+HATdZyn+1jbzUzM6akmjPHBXZhCzcVi5tET4lSxqzClyVKV0qF+iVpNnUI9f2w 8cfpiiknce9hM+8GBorQQ8V1rywMB/0J1hjGbnoYgGuHeDPe7kKcQsi40d5tSWGx2VFZta4SIxn+m SjrA/5LJg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k2xTb-0000v5-A3; Tue, 04 Aug 2020 13:59:35 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k2xTZ-0000uH-5H for linux-mediatek@lists.infradead.org; Tue, 04 Aug 2020 13:59:34 +0000 X-UUID: 700a498d13064db0ac68841b2701e4d5-20200804 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=UwedDwkA6MKfo574cvkSS6/ojQxMQXtOkVvLLZ6CYbI=; b=bH7WwoKZkMgXmvG7INRsCNj7io8kBIw1UZYnygCNmKA9x5CUVDb7Am5Sx+TVy6KFIMsXZiQinmTb8VFUEDT2QCOPQLLvJzFse691HnmgNbeb/IHrNlPuB9S0dGMgwdZPp9CSfF4Wu9qNQ1jOOiBefC33fXagX7IldceJpZTdykA=; X-UUID: 700a498d13064db0ac68841b2701e4d5-20200804 Received: from mtkcas67.mediatek.inc [(172.29.193.45)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 21629169; Tue, 04 Aug 2020 05:59:38 -0800 Received: from mtkmbs08n1.mediatek.inc (172.21.101.55) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 4 Aug 2020 06:59:26 -0700 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs08n1.mediatek.inc (172.21.101.55) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 4 Aug 2020 21:59:12 +0800 Received: from mtkswgap22.mediatek.inc (172.21.77.33) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 4 Aug 2020 21:59:13 +0800 From: Frankie Chang To: Todd Kjos Subject: [PATCH v7 1/3] binder: move structs from core file to header file Date: Tue, 4 Aug 2020 21:59:10 +0800 Message-ID: <1596549552-5466-2-git-send-email-Frankie.Chang@mediatek.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1596549552-5466-1-git-send-email-Frankie.Chang@mediatek.com> References: <1596509145.5207.21.camel@mtkswgap22> <1596549552-5466-1-git-send-email-Frankie.Chang@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200804_095933_453875_ECE48A91 X-CRM114-Status: GOOD ( 19.72 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: wsd_upstream@mediatek.com, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Jian-Min Liu , linux-mediatek@lists.infradead.org, Joel Fernandes , Frankie Chang , Martijn Coenen , Christian Brauner Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org From: "Frankie.Chang" Moving all structs to header file makes module more extendable, and makes all these structs to be defined in the same file. Signed-off-by: Frankie.Chang --- drivers/android/binder.c | 405 ------------------------------------- drivers/android/binder_internal.h | 404 ++++++++++++++++++++++++++++++++++++ 2 files changed, 404 insertions(+), 405 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index a6b2082..2df146f 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -72,7 +72,6 @@ #include -#include "binder_alloc.h" #include "binder_internal.h" #include "binder_trace.h" @@ -160,24 +159,6 @@ static int binder_set_stop_on_user_error(const char *val, #define to_binder_fd_array_object(hdr) \ container_of(hdr, struct binder_fd_array_object, hdr) -enum binder_stat_types { - BINDER_STAT_PROC, - BINDER_STAT_THREAD, - BINDER_STAT_NODE, - BINDER_STAT_REF, - BINDER_STAT_DEATH, - BINDER_STAT_TRANSACTION, - BINDER_STAT_TRANSACTION_COMPLETE, - BINDER_STAT_COUNT -}; - -struct binder_stats { - atomic_t br[_IOC_NR(BR_FAILED_REPLY) + 1]; - atomic_t bc[_IOC_NR(BC_REPLY_SG) + 1]; - atomic_t obj_created[BINDER_STAT_COUNT]; - atomic_t obj_deleted[BINDER_STAT_COUNT]; -}; - static struct binder_stats binder_stats; static inline void binder_stats_deleted(enum binder_stat_types type) @@ -213,278 +194,11 @@ static struct binder_transaction_log_entry *binder_transaction_log_add( return e; } -/** - * struct binder_work - work enqueued on a worklist - * @entry: node enqueued on list - * @type: type of work to be performed - * - * There are separate work lists for proc, thread, and node (async). - */ -struct binder_work { - struct list_head entry; - - enum { - BINDER_WORK_TRANSACTION = 1, - BINDER_WORK_TRANSACTION_COMPLETE, - BINDER_WORK_RETURN_ERROR, - BINDER_WORK_NODE, - BINDER_WORK_DEAD_BINDER, - BINDER_WORK_DEAD_BINDER_AND_CLEAR, - BINDER_WORK_CLEAR_DEATH_NOTIFICATION, - } type; -}; - -struct binder_error { - struct binder_work work; - uint32_t cmd; -}; - -/** - * struct binder_node - binder node bookkeeping - * @debug_id: unique ID for debugging - * (invariant after initialized) - * @lock: lock for node fields - * @work: worklist element for node work - * (protected by @proc->inner_lock) - * @rb_node: element for proc->nodes tree - * (protected by @proc->inner_lock) - * @dead_node: element for binder_dead_nodes list - * (protected by binder_dead_nodes_lock) - * @proc: binder_proc that owns this node - * (invariant after initialized) - * @refs: list of references on this node - * (protected by @lock) - * @internal_strong_refs: used to take strong references when - * initiating a transaction - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @local_weak_refs: weak user refs from local process - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @local_strong_refs: strong user refs from local process - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @tmp_refs: temporary kernel refs - * (protected by @proc->inner_lock while @proc - * is valid, and by binder_dead_nodes_lock - * if @proc is NULL. During inc/dec and node release - * it is also protected by @lock to provide safety - * as the node dies and @proc becomes NULL) - * @ptr: userspace pointer for node - * (invariant, no lock needed) - * @cookie: userspace cookie for node - * (invariant, no lock needed) - * @has_strong_ref: userspace notified of strong ref - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @pending_strong_ref: userspace has acked notification of strong ref - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @has_weak_ref: userspace notified of weak ref - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @pending_weak_ref: userspace has acked notification of weak ref - * (protected by @proc->inner_lock if @proc - * and by @lock) - * @has_async_transaction: async transaction to node in progress - * (protected by @lock) - * @accept_fds: file descriptor operations supported for node - * (invariant after initialized) - * @min_priority: minimum scheduling priority - * (invariant after initialized) - * @txn_security_ctx: require sender's security context - * (invariant after initialized) - * @async_todo: list of async work items - * (protected by @proc->inner_lock) - * - * Bookkeeping structure for binder nodes. - */ -struct binder_node { - int debug_id; - spinlock_t lock; - struct binder_work work; - union { - struct rb_node rb_node; - struct hlist_node dead_node; - }; - struct binder_proc *proc; - struct hlist_head refs; - int internal_strong_refs; - int local_weak_refs; - int local_strong_refs; - int tmp_refs; - binder_uintptr_t ptr; - binder_uintptr_t cookie; - struct { - /* - * bitfield elements protected by - * proc inner_lock - */ - u8 has_strong_ref:1; - u8 pending_strong_ref:1; - u8 has_weak_ref:1; - u8 pending_weak_ref:1; - }; - struct { - /* - * invariant after initialization - */ - u8 accept_fds:1; - u8 txn_security_ctx:1; - u8 min_priority; - }; - bool has_async_transaction; - struct list_head async_todo; -}; - -struct binder_ref_death { - /** - * @work: worklist element for death notifications - * (protected by inner_lock of the proc that - * this ref belongs to) - */ - struct binder_work work; - binder_uintptr_t cookie; -}; - -/** - * struct binder_ref_data - binder_ref counts and id - * @debug_id: unique ID for the ref - * @desc: unique userspace handle for ref - * @strong: strong ref count (debugging only if not locked) - * @weak: weak ref count (debugging only if not locked) - * - * Structure to hold ref count and ref id information. Since - * the actual ref can only be accessed with a lock, this structure - * is used to return information about the ref to callers of - * ref inc/dec functions. - */ -struct binder_ref_data { - int debug_id; - uint32_t desc; - int strong; - int weak; -}; - -/** - * struct binder_ref - struct to track references on nodes - * @data: binder_ref_data containing id, handle, and current refcounts - * @rb_node_desc: node for lookup by @data.desc in proc's rb_tree - * @rb_node_node: node for lookup by @node in proc's rb_tree - * @node_entry: list entry for node->refs list in target node - * (protected by @node->lock) - * @proc: binder_proc containing ref - * @node: binder_node of target node. When cleaning up a - * ref for deletion in binder_cleanup_ref, a non-NULL - * @node indicates the node must be freed - * @death: pointer to death notification (ref_death) if requested - * (protected by @node->lock) - * - * Structure to track references from procA to target node (on procB). This - * structure is unsafe to access without holding @proc->outer_lock. - */ -struct binder_ref { - /* Lookups needed: */ - /* node + proc => ref (transaction) */ - /* desc + proc => ref (transaction, inc/dec ref) */ - /* node => refs + procs (proc exit) */ - struct binder_ref_data data; - struct rb_node rb_node_desc; - struct rb_node rb_node_node; - struct hlist_node node_entry; - struct binder_proc *proc; - struct binder_node *node; - struct binder_ref_death *death; -}; - enum binder_deferred_state { BINDER_DEFERRED_FLUSH = 0x01, BINDER_DEFERRED_RELEASE = 0x02, }; -/** - * struct binder_proc - binder process bookkeeping - * @proc_node: element for binder_procs list - * @threads: rbtree of binder_threads in this proc - * (protected by @inner_lock) - * @nodes: rbtree of binder nodes associated with - * this proc ordered by node->ptr - * (protected by @inner_lock) - * @refs_by_desc: rbtree of refs ordered by ref->desc - * (protected by @outer_lock) - * @refs_by_node: rbtree of refs ordered by ref->node - * (protected by @outer_lock) - * @waiting_threads: threads currently waiting for proc work - * (protected by @inner_lock) - * @pid PID of group_leader of process - * (invariant after initialized) - * @tsk task_struct for group_leader of process - * (invariant after initialized) - * @deferred_work_node: element for binder_deferred_list - * (protected by binder_deferred_lock) - * @deferred_work: bitmap of deferred work to perform - * (protected by binder_deferred_lock) - * @is_dead: process is dead and awaiting free - * when outstanding transactions are cleaned up - * (protected by @inner_lock) - * @todo: list of work for this process - * (protected by @inner_lock) - * @stats: per-process binder statistics - * (atomics, no lock needed) - * @delivered_death: list of delivered death notification - * (protected by @inner_lock) - * @max_threads: cap on number of binder threads - * (protected by @inner_lock) - * @requested_threads: number of binder threads requested but not - * yet started. In current implementation, can - * only be 0 or 1. - * (protected by @inner_lock) - * @requested_threads_started: number binder threads started - * (protected by @inner_lock) - * @tmp_ref: temporary reference to indicate proc is in use - * (protected by @inner_lock) - * @default_priority: default scheduler priority - * (invariant after initialized) - * @debugfs_entry: debugfs node - * @alloc: binder allocator bookkeeping - * @context: binder_context for this proc - * (invariant after initialized) - * @inner_lock: can nest under outer_lock and/or node lock - * @outer_lock: no nesting under innor or node lock - * Lock order: 1) outer, 2) node, 3) inner - * @binderfs_entry: process-specific binderfs log file - * - * Bookkeeping structure for binder processes - */ -struct binder_proc { - struct hlist_node proc_node; - struct rb_root threads; - struct rb_root nodes; - struct rb_root refs_by_desc; - struct rb_root refs_by_node; - struct list_head waiting_threads; - int pid; - struct task_struct *tsk; - struct hlist_node deferred_work_node; - int deferred_work; - bool is_dead; - - struct list_head todo; - struct binder_stats stats; - struct list_head delivered_death; - int max_threads; - int requested_threads; - int requested_threads_started; - int tmp_ref; - long default_priority; - struct dentry *debugfs_entry; - struct binder_alloc alloc; - struct binder_context *context; - spinlock_t inner_lock; - spinlock_t outer_lock; - struct dentry *binderfs_entry; -}; - enum { BINDER_LOOPER_STATE_REGISTERED = 0x01, BINDER_LOOPER_STATE_ENTERED = 0x02, @@ -495,125 +209,6 @@ enum { }; /** - * struct binder_thread - binder thread bookkeeping - * @proc: binder process for this thread - * (invariant after initialization) - * @rb_node: element for proc->threads rbtree - * (protected by @proc->inner_lock) - * @waiting_thread_node: element for @proc->waiting_threads list - * (protected by @proc->inner_lock) - * @pid: PID for this thread - * (invariant after initialization) - * @looper: bitmap of looping state - * (only accessed by this thread) - * @looper_needs_return: looping thread needs to exit driver - * (no lock needed) - * @transaction_stack: stack of in-progress transactions for this thread - * (protected by @proc->inner_lock) - * @todo: list of work to do for this thread - * (protected by @proc->inner_lock) - * @process_todo: whether work in @todo should be processed - * (protected by @proc->inner_lock) - * @return_error: transaction errors reported by this thread - * (only accessed by this thread) - * @reply_error: transaction errors reported by target thread - * (protected by @proc->inner_lock) - * @wait: wait queue for thread work - * @stats: per-thread statistics - * (atomics, no lock needed) - * @tmp_ref: temporary reference to indicate thread is in use - * (atomic since @proc->inner_lock cannot - * always be acquired) - * @is_dead: thread is dead and awaiting free - * when outstanding transactions are cleaned up - * (protected by @proc->inner_lock) - * - * Bookkeeping structure for binder threads. - */ -struct binder_thread { - struct binder_proc *proc; - struct rb_node rb_node; - struct list_head waiting_thread_node; - int pid; - int looper; /* only modified by this thread */ - bool looper_need_return; /* can be written by other thread */ - struct binder_transaction *transaction_stack; - struct list_head todo; - bool process_todo; - struct binder_error return_error; - struct binder_error reply_error; - wait_queue_head_t wait; - struct binder_stats stats; - atomic_t tmp_ref; - bool is_dead; -}; - -/** - * struct binder_txn_fd_fixup - transaction fd fixup list element - * @fixup_entry: list entry - * @file: struct file to be associated with new fd - * @offset: offset in buffer data to this fixup - * - * List element for fd fixups in a transaction. Since file - * descriptors need to be allocated in the context of the - * target process, we pass each fd to be processed in this - * struct. - */ -struct binder_txn_fd_fixup { - struct list_head fixup_entry; - struct file *file; - size_t offset; -}; - -struct binder_transaction { - int debug_id; - struct binder_work work; - struct binder_thread *from; - struct binder_transaction *from_parent; - struct binder_proc *to_proc; - struct binder_thread *to_thread; - struct binder_transaction *to_parent; - unsigned need_reply:1; - /* unsigned is_dead:1; */ /* not used at the moment */ - - struct binder_buffer *buffer; - unsigned int code; - unsigned int flags; - long priority; - long saved_priority; - kuid_t sender_euid; - struct list_head fd_fixups; - binder_uintptr_t security_ctx; - /** - * @lock: protects @from, @to_proc, and @to_thread - * - * @from, @to_proc, and @to_thread can be set to NULL - * during thread teardown - */ - spinlock_t lock; -}; - -/** - * struct binder_object - union of flat binder object types - * @hdr: generic object header - * @fbo: binder object (nodes and refs) - * @fdo: file descriptor object - * @bbo: binder buffer pointer - * @fdao: file descriptor array - * - * Used for type-independent object copies - */ -struct binder_object { - union { - struct binder_object_header hdr; - struct flat_binder_object fbo; - struct binder_fd_object fdo; - struct binder_buffer_object bbo; - struct binder_fd_array_object fdao; - }; -}; - -/** * binder_proc_lock() - Acquire outer lock for given binder_proc * @proc: struct binder_proc to acquire * diff --git a/drivers/android/binder_internal.h b/drivers/android/binder_internal.h index ae99109..5b65413 100644 --- a/drivers/android/binder_internal.h +++ b/drivers/android/binder_internal.h @@ -11,6 +11,7 @@ #include #include #include +#include "binder_alloc.h" struct binder_context { struct binder_node *binder_context_mgr_node; @@ -139,6 +140,409 @@ struct binder_transaction_log { struct binder_transaction_log_entry entry[32]; }; +enum binder_stat_types { + BINDER_STAT_PROC, + BINDER_STAT_THREAD, + BINDER_STAT_NODE, + BINDER_STAT_REF, + BINDER_STAT_DEATH, + BINDER_STAT_TRANSACTION, + BINDER_STAT_TRANSACTION_COMPLETE, + BINDER_STAT_COUNT +}; + +struct binder_stats { + atomic_t br[_IOC_NR(BR_FAILED_REPLY) + 1]; + atomic_t bc[_IOC_NR(BC_REPLY_SG) + 1]; + atomic_t obj_created[BINDER_STAT_COUNT]; + atomic_t obj_deleted[BINDER_STAT_COUNT]; +}; + +/** + * struct binder_work - work enqueued on a worklist + * @entry: node enqueued on list + * @type: type of work to be performed + * + * There are separate work lists for proc, thread, and node (async). + */ +struct binder_work { + struct list_head entry; + + enum { + BINDER_WORK_TRANSACTION = 1, + BINDER_WORK_TRANSACTION_COMPLETE, + BINDER_WORK_RETURN_ERROR, + BINDER_WORK_NODE, + BINDER_WORK_DEAD_BINDER, + BINDER_WORK_DEAD_BINDER_AND_CLEAR, + BINDER_WORK_CLEAR_DEATH_NOTIFICATION, + } type; +}; + +struct binder_error { + struct binder_work work; + uint32_t cmd; +}; + +/* struct binder_node - binder node bookkeeping + * @debug_id: unique ID for debugging + * (invariant after initialized) + * @lock: lock for node fields + * @work: worklist element for node work + * (protected by @proc->inner_lock) + * @rb_node: element for proc->nodes tree + * (protected by @proc->inner_lock) + * @dead_node: element for binder_dead_nodes list + * (protected by binder_dead_nodes_lock) + * @proc: binder_proc that owns this node + * (invariant after initialized) + * @refs: list of references on this node + * (protected by @lock) + * @internal_strong_refs: used to take strong references when + * initiating a transaction + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @local_weak_refs: weak user refs from local process + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @local_strong_refs: strong user refs from local process + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @tmp_refs: temporary kernel refs + * (protected by @proc->inner_lock while @proc + * is valid, and by binder_dead_nodes_lock + * if @proc is NULL. During inc/dec and node release + * it is also protected by @lock to provide safety + * as the node dies and @proc becomes NULL) + * @ptr: userspace pointer for node + * (invariant, no lock needed) + * @cookie: userspace cookie for node + * (invariant, no lock needed) + * @has_strong_ref: userspace notified of strong ref + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @pending_strong_ref: userspace has acked notification of strong ref + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @has_weak_ref: userspace notified of weak ref + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @pending_weak_ref: userspace has acked notification of weak ref + * (protected by @proc->inner_lock if @proc + * and by @lock) + * @has_async_transaction: async transaction to node in progress + * (protected by @lock) + * @accept_fds: file descriptor operations supported for node + * (invariant after initialized) + * @min_priority: minimum scheduling priority + * (invariant after initialized) + * @txn_security_ctx: require sender's security context + * (invariant after initialized) + * @async_todo: list of async work items + * (protected by @proc->inner_lock) + * + * Bookkeeping structure for binder nodes. + */ +struct binder_node { + int debug_id; + spinlock_t lock; + struct binder_work work; + union { + struct rb_node rb_node; + struct hlist_node dead_node; + }; + struct binder_proc *proc; + struct hlist_head refs; + int internal_strong_refs; + int local_weak_refs; + int local_strong_refs; + int tmp_refs; + binder_uintptr_t ptr; + binder_uintptr_t cookie; + struct { + /* + * bitfield elements protected by + * proc inner_lock + */ + u8 has_strong_ref:1; + u8 pending_strong_ref:1; + u8 has_weak_ref:1; + u8 pending_weak_ref:1; + }; + struct { + /* + * invariant after initialization + */ + u8 accept_fds:1; + u8 txn_security_ctx:1; + u8 min_priority; + }; + bool has_async_transaction; + struct list_head async_todo; +}; + +struct binder_ref_death { + /** + * @work: worklist element for death notifications + * (protected by inner_lock of the proc that + * this ref belongs to) + */ + struct binder_work work; + binder_uintptr_t cookie; +}; + +/** + * struct binder_ref_data - binder_ref counts and id + * @debug_id: unique ID for the ref + * @desc: unique userspace handle for ref + * @strong: strong ref count (debugging only if not locked) + * @weak: weak ref count (debugging only if not locked) + * + * Structure to hold ref count and ref id information. Since + * the actual ref can only be accessed with a lock, this structure + * is used to return information about the ref to callers of + * ref inc/dec functions. + */ +struct binder_ref_data { + int debug_id; + uint32_t desc; + int strong; + int weak; +}; + +/** + * struct binder_ref - struct to track references on nodes + * @data: binder_ref_data containing id, handle, and current refcounts + * @rb_node_desc: node for lookup by @data.desc in proc's rb_tree + * @rb_node_node: node for lookup by @node in proc's rb_tree + * @node_entry: list entry for node->refs list in target node + * (protected by @node->lock) + * @proc: binder_proc containing ref + * @node: binder_node of target node. When cleaning up a + * ref for deletion in binder_cleanup_ref, a non-NULL + * @node indicates the node must be freed + * @death: pointer to death notification (ref_death) if requested + * (protected by @node->lock) + * + * Structure to track references from procA to target node (on procB). This + * structure is unsafe to access without holding @proc->outer_lock. + */ +struct binder_ref { + /* Lookups needed: */ + /* node + proc => ref (transaction) */ + /* desc + proc => ref (transaction, inc/dec ref) */ + /* node => refs + procs (proc exit) */ + struct binder_ref_data data; + struct rb_node rb_node_desc; + struct rb_node rb_node_node; + struct hlist_node node_entry; + struct binder_proc *proc; + struct binder_node *node; + struct binder_ref_death *death; +}; + +/** + * struct binder_proc - binder process bookkeeping + * @proc_node: element for binder_procs list + * @threads: rbtree of binder_threads in this proc + * (protected by @inner_lock) + * @nodes: rbtree of binder nodes associated with + * this proc ordered by node->ptr + * (protected by @inner_lock) + * @refs_by_desc: rbtree of refs ordered by ref->desc + * (protected by @outer_lock) + * @refs_by_node: rbtree of refs ordered by ref->node + * (protected by @outer_lock) + * @waiting_threads: threads currently waiting for proc work + * (protected by @inner_lock) + * @pid PID of group_leader of process + * (invariant after initialized) + * @tsk task_struct for group_leader of process + * (invariant after initialized) + * @deferred_work_node: element for binder_deferred_list + * (protected by binder_deferred_lock) + * @deferred_work: bitmap of deferred work to perform + * (protected by binder_deferred_lock) + * @is_dead: process is dead and awaiting free + * when outstanding transactions are cleaned up + * (protected by @inner_lock) + * @todo: list of work for this process + * (protected by @inner_lock) + * @stats: per-process binder statistics + * (atomics, no lock needed) + * @delivered_death: list of delivered death notification + * (protected by @inner_lock) + * @max_threads: cap on number of binder threads + * (protected by @inner_lock) + * @requested_threads: number of binder threads requested but not + * yet started. In current implementation, can + * only be 0 or 1. + * (protected by @inner_lock) + * @requested_threads_started: number binder threads started + * (protected by @inner_lock) + * @tmp_ref: temporary reference to indicate proc is in use + * (protected by @inner_lock) + * @default_priority: default scheduler priority + * (invariant after initialized) + * @debugfs_entry: debugfs node + * @alloc: binder allocator bookkeeping + * @context: binder_context for this proc + * (invariant after initialized) + * @inner_lock: can nest under outer_lock and/or node lock + * @outer_lock: no nesting under innor or node lock + * Lock order: 1) outer, 2) node, 3) inner + * @binderfs_entry: process-specific binderfs log file + * + * Bookkeeping structure for binder processes + */ +struct binder_proc { + struct hlist_node proc_node; + struct rb_root threads; + struct rb_root nodes; + struct rb_root refs_by_desc; + struct rb_root refs_by_node; + struct list_head waiting_threads; + int pid; + struct task_struct *tsk; + struct hlist_node deferred_work_node; + int deferred_work; + bool is_dead; + + struct list_head todo; + struct binder_stats stats; + struct list_head delivered_death; + int max_threads; + int requested_threads; + int requested_threads_started; + int tmp_ref; + long default_priority; + struct dentry *debugfs_entry; + struct binder_alloc alloc; + struct binder_context *context; + spinlock_t inner_lock; + spinlock_t outer_lock; + struct dentry *binderfs_entry; +}; + +/** + * struct binder_thread - binder thread bookkeeping + * @proc: binder process for this thread + * (invariant after initialization) + * @rb_node: element for proc->threads rbtree + * (protected by @proc->inner_lock) + * @waiting_thread_node: element for @proc->waiting_threads list + * (protected by @proc->inner_lock) + * @pid: PID for this thread + * (invariant after initialization) + * @looper: bitmap of looping state + * (only accessed by this thread) + * @looper_needs_return: looping thread needs to exit driver + * (no lock needed) + * @transaction_stack: stack of in-progress transactions for this thread + * (protected by @proc->inner_lock) + * @todo: list of work to do for this thread + * (protected by @proc->inner_lock) + * @process_todo: whether work in @todo should be processed + * (protected by @proc->inner_lock) + * @return_error: transaction errors reported by this thread + * (only accessed by this thread) + * @reply_error: transaction errors reported by target thread + * (protected by @proc->inner_lock) + * @wait: wait queue for thread work + * @stats: per-thread statistics + * (atomics, no lock needed) + * @tmp_ref: temporary reference to indicate thread is in use + * (atomic since @proc->inner_lock cannot + * always be acquired) + * @is_dead: thread is dead and awaiting free + * when outstanding transactions are cleaned up + * (protected by @proc->inner_lock) + * + * Bookkeeping structure for binder threads. + */ +struct binder_thread { + struct binder_proc *proc; + struct rb_node rb_node; + struct list_head waiting_thread_node; + int pid; + int looper; /* only modified by this thread */ + bool looper_need_return; /* can be written by other thread */ + struct binder_transaction *transaction_stack; + struct list_head todo; + bool process_todo; + struct binder_error return_error; + struct binder_error reply_error; + wait_queue_head_t wait; + struct binder_stats stats; + atomic_t tmp_ref; + bool is_dead; +}; + +/** + * struct binder_txn_fd_fixup - transaction fd fixup list element + * @fixup_entry: list entry + * @file: struct file to be associated with new fd + * @offset: offset in buffer data to this fixup + * + * List element for fd fixups in a transaction. Since file + * descriptors need to be allocated in the context of the + * target process, we pass each fd to be processed in this + * struct. + */ +struct binder_txn_fd_fixup { + struct list_head fixup_entry; + struct file *file; + size_t offset; +}; + +struct binder_transaction { + int debug_id; + struct binder_work work; + struct binder_thread *from; + struct binder_transaction *from_parent; + struct binder_proc *to_proc; + struct binder_thread *to_thread; + struct binder_transaction *to_parent; + unsigned need_reply:1; + /* unsigned is_dead:1; */ /* not used at the moment */ + + struct binder_buffer *buffer; + unsigned int code; + unsigned int flags; + long priority; + long saved_priority; + kuid_t sender_euid; + struct list_head fd_fixups; + binder_uintptr_t security_ctx; + /** + * @lock: protects @from, @to_proc, and @to_thread + * + * @from, @to_proc, and @to_thread can be set to NULL + * during thread teardown + */ + spinlock_t lock; +}; + +/** + * struct binder_object - union of flat binder object types + * @hdr: generic object header + * @fbo: binder object (nodes and refs) + * @fdo: file descriptor object + * @bbo: binder buffer pointer + * @fdao: file descriptor array + * + * Used for type-independent object copies + */ +struct binder_object { + union { + struct binder_object_header hdr; + struct flat_binder_object fbo; + struct binder_fd_object fdo; + struct binder_buffer_object bbo; + struct binder_fd_array_object fdao; + }; +}; + extern struct binder_transaction_log binder_transaction_log; extern struct binder_transaction_log binder_transaction_log_failed; #endif /* _LINUX_BINDER_INTERNAL_H */ -- 1.7.9.5 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek