From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: [PATCH RFC v2 1/7] cgroup: Allow drivers to store data associated with a cgroup Date: Thu, 1 Feb 2018 11:53:09 -0800 Message-ID: <20180201195315.4956-2-matthew.d.roper@intel.com> References: <20180201195315.4956-1-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180201195315.4956-1-matthew.d.roper@intel.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Content-Type: text/plain; charset="us-ascii" To: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, cgroups@vger.kernel.org Cc: Tejun Heo VGhlcmUgYXJlIGNhc2VzIHdoZXJlIGRyaXZlcnMgbmVlZCB0byBhZGp1c3QgYmVoYXZpb3Igb3Ig Y29udHJvbApkZXZpY2Utc3BlY2lmaWMgcmVzb3VyY2VzIGFjY29yZGluZyB0byB0aGUgdHlwZSBv ZiBjbGllbnRzIChwcm9jZXNzZXMpCnN1Ym1pdHRpbmcgcmVxdWVzdHMuICBMaW51eCBjZ3JvdXBz IGFyZSBhIG5hdHVyYWwgZml0IGZvciB0aGlzIHR5cGUgb2YKcmVzb3VyY2UgY29udHJvbCBhbmQg cG9saWN5IG1hbmFnZW1lbnQsIHNvIHdlIG5lZWQgYSB3YXkgZm9yIGRyaXZlcnMgdG8KYXNzb2Np YXRlIHRoZWlyIG93biBkcml2ZXItc3BlY2lmaWMgYW5kIGRldmljZS1zcGVjaWZpYyBkYXRhIHdp dGgKaW5kaXZpZHVhbCBjZ3JvdXBzLgoKVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgY2dyb3Vw IGNvbnRyb2xsZXIgc3VwcG9ydCB0aGF0IGV4aXN0cyB0b2RheQppbiBzZXZlcmFsIGltcG9ydGFu dCB3YXlzOgogKiBEcml2ZXJzIG1heSBiZSBidWlsdCBhcyBtb2R1bGVzIChhbmQgdW5sb2FkZWQv cmVsb2FkZWQpIHdoaWNoIGlzIG5vdAogICBzb21ldGhpbmcgY2dyb3VwIGNvbnRyb2xsZXJzIHN1 cHBvcnQgdG9kYXkuCiAqIERyaXZlcnMgbWF5IHdpc2ggdG8gcHJvdmlkZSB0aGVpciBvd24gaW50 ZXJmYWNlIHRvIGFsbG93IHVzZXJzcGFjZSB0bwogICBhZGp1c3QgZHJpdmVyLXNwZWNpZmljIHNl dHRpbmdzIChlLmcuLCB2aWEgYSBkcml2ZXIgaW9jdGwgcmF0aGVyIHRoYW4KICAgdmlhIHRoZSBr ZXJuZnMgZmlsZXN5c3RlbSkuCiAqIEEgc2luZ2xlIGRyaXZlciBtYXkgYmUgbWFuYWdpbmcgbXVs dGlwbGUgZGV2aWNlcyBhbmQgd2lzaCB0byBtYWludGFpbgogICBkaWZmZXJlbnQgZHJpdmVyLXNw ZWNpZmljIGNncm91cCBkYXRhIGZvciBlYWNoLgoKVG8gdXNlIHRoaXMgbWVjaGFuaXNtLCBkcml2 ZXJzIHNob3VsZCBjYWxsIGNncm91cF9kcml2ZXJfaW5pdCgpIHRvCnJlZ2lzdGVyIHRoZW1zZWx2 ZXMgYW5kIHByb3ZpZGUgcHJvdmlkZSBoYW5kbGVyIGZ1bmN0aW9ucyBmb3IgYWxsb2NhdGluZwpk cml2ZXItc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzOyB0aGlzIGNhbGwgd2lsbCByZXR1cm4gYSBo YW5kbGUgdGhhdCBjYW4KYmUgdXNlZCB0byBsb29rdXAgdGhlIGRyaXZlci1zcGVjaWZpYyBkYXRh IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLgpEcml2ZXJzIG1hbmFnaW5nIG11bHRpcGxlIGRl dmljZXMgdGhhdCB3aXNoIHRvIHRyYWNrIHNlcGFyYXRlIGRhdGEgZm9yCmVhY2ggZGV2aWNlIG1h eSByZWdpc3RlciB0aGVtc2VsdmVzIG11bHRpcGxlIHRpbWVzIChlLmcuLCBhIGdyYXBoaWNzCmRy aXZlciBtaWdodCBjYWxsIGNncm91cF9kcml2ZXJfaW5pdCgpIGZvciBlYWNoIGRybV9kZXZpY2Ug aXQgbWFuYWdlcykuCgpBdCBydW50aW1lLCBkcml2ZXJzIG1heSBjYWxsIGNncm91cF9kcml2ZXJf Z2V0X2RhdGEoKSB0byBmZXRjaCB0aGUKZHJpdmVyLXNwZWNpZmljIGRhdGEgYXNzb2NpYXRlZCB3 aXRoIGEgY2dyb3VwLiAgVGhlIGRyaXZlci1zcGVjaWZpYyBkYXRhCih3aGljaCBzaG91bGQgYmUg YSBkcml2ZXItZGVmaW5lZCBzdWJjbGFzcyBvZiAnc3RydWN0CmNncm91cF9kcml2ZXJfZGF0YScp IHdpbGwgYmUgYWxsb2NhdGVkIGlmIG9uZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCk1hbmFnZW1l bnQgb2YgZHJpdmVyLXNwZWNpZmljIGRhdGEgYnkgdGhlIGNncm91cHMgZnJhbWV3b3JrIGlzIHBy b3RlY3RlZApieSBjZ3JvdXBfbXV0ZXgsIGJ1dCBkcml2ZXJzIGFyZSByZXNwb25zaWJsZSBmb3Ig cGVyZm9ybWluZyB0aGVpciBvd24Kc3luY2hyb25pemF0aW9uIG9uIHRoZSBwZXItY2dyb3VwIGRh dGEgdGhleSByZWNlaXZlLCBpZiBuZWNlc3NhcnkuICBOb3RlCnRoYXQgZHJpdmVyLXNwZWNpZmlj IGRhdGEgZm9yIGEgY2dyb3VwIHdpbGwgb25seSBiZSBhbGxvY2F0ZWQgaWYvd2hlbgp0aGUgZHJp dmVyIGZpcnN0IHJlcXVlc3RzIGRhdGEgZm9yIHRoYXQgY2dyb3VwLiAgVGhlIGRyaXZlciBkYXRh IHdpbGwKYWxzbyBiZSBhdXRvbWF0aWNhbGx5IGRlc3Ryb3llZCBpZiB0aGUgY2dyb3VwIGl0IGJl bG9uZ3MgdG8gaXMgcmVtb3ZlZC4KCkZpbmFsbHksIGRyaXZlcnMgc2hvdWxkIGNncm91cF9kcml2 ZXJfcmVsZWFzZSgpIG9uIGRyaXZlciB1bmxvYWQgdG8KZGVzdHJveSBhbGwgb2YgdGhlaXIgZHJp dmVyLXNwZWNpZmljIGRhdGEuCgpOb3RlIHRoYXQgdGVjaG5pY2FsbHkgdGhlc2UgaW50ZXJmYWNl cyBhcmVuJ3QgcmVzdHJpY3RlZCB0byBkcml2ZXJzCihvdGhlciBub24tZHJpdmVyIHBhcnRzIG9m IHRoZSBrZXJuZWwgY291bGQgbWFrZSB1c2Ugb2YgdGhlbSBhcyB3ZWxsKS4KSSBleHBlY3QgZHJp dmVycyB0byBiZSB0aGUgcHJpbWFyeSBjb25zdW1lcnMgb2YgdGhpcyBpbnRlcmZhY2UgYW5kCmNv dWxkbid0IHRoaW5rIG9mIGEgbW9yZSBhcHByb3ByaWF0ZSBnZW5lcmljIG5hbWUgKHRoZSB0ZXJt ICJzdWJzeXN0ZW0iCndvdWxkIHByb2JhYmx5IGJlIG1vcmUgYWNjdXJhdGUsIGJ1dCB0aGF0J3Mg YWxyZWFkeSB1c2VkIGJ5IGNncm91cApjb250cm9sbGVycykuCgpDYzogVGVqdW4gSGVvIDx0akBr ZXJuZWwub3JnPgpDYzogY2dyb3Vwc0B2Z2VyLmtlcm5lbC5vcmcKU2lnbmVkLW9mZi1ieTogTWF0 dCBSb3BlciA8bWF0dGhldy5kLnJvcGVyQGludGVsLmNvbT4KLS0tCiBpbmNsdWRlL2xpbnV4L2Nn cm91cC1kZWZzLmggICB8ICAzNyArKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvY2dyb3VwLmgg ICAgICAgIHwgIDI3ICsrKysrKysrKwogaW5pdC9LY29uZmlnICAgICAgICAgICAgICAgICAgfCAg IDQgKysKIGtlcm5lbC9jZ3JvdXAvTWFrZWZpbGUgICAgICAgIHwgICAxICsKIGtlcm5lbC9jZ3Jv dXAvY2dyb3VwLmMgICAgICAgIHwgICAxICsKIGtlcm5lbC9jZ3JvdXAvY2dyb3VwX2RyaXZlci5j IHwgMTMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNiBmaWxl cyBjaGFuZ2VkLCAyMDAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGtlcm5lbC9j Z3JvdXAvY2dyb3VwX2RyaXZlci5jCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAt ZGVmcy5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oCmluZGV4IDhiN2ZkOGVlY2NlZS4u NTcyOGUzYWZjOTVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmgKKysr IGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oCkBAIC04LDYgKzgsNyBAQAogI2lmbmRlZiBf TElOVVhfQ0dST1VQX0RFRlNfSAogI2RlZmluZSBfTElOVVhfQ0dST1VQX0RFRlNfSAogCisjaW5j bHVkZSA8bGludXgvaGFzaHRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CiAjaW5j bHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgpAQCAtMjcsNiArMjgs NyBAQCBzdHJ1Y3QgY2dyb3VwOwogc3RydWN0IGNncm91cF9yb290Owogc3RydWN0IGNncm91cF9z dWJzeXM7CiBzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQ7CitzdHJ1Y3QgY2dyb3VwX2RyaXZlcjsKIHN0 cnVjdCBrZXJuZnNfbm9kZTsKIHN0cnVjdCBrZXJuZnNfb3BzOwogc3RydWN0IGtlcm5mc19vcGVu X2ZpbGU7CkBAIC0zMDcsNiArMzA5LDIyIEBAIHN0cnVjdCBjZ3JvdXBfc3RhdCB7CiAJc3RydWN0 IHByZXZfY3B1dGltZSBwcmV2X2NwdXRpbWU7CiB9OwogCisvKgorICogRHJpdmVyLXNwZWNpZmlj IGNncm91cCBkYXRhLiAgRHJpdmVycyBzaG91bGQgc3ViY2xhc3MgdGhpcyBzdHJ1Y3R1cmUgd2l0 aAorICogdGhlaXIgb3duIGZpZWxkcyBmb3IgZGF0YSB0aGF0IHNob3VsZCBiZSBzdG9yZWQgYWxv bmdzaWRlIGluZGl2aWR1YWwKKyAqIGNncm91cHMuCisgKi8KK3N0cnVjdCBjZ3JvdXBfZHJpdmVy X2RhdGEgeworCS8qIERyaXZlciB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIGFzc29jaWF0ZWQgd2l0 aCAqLworCXN0cnVjdCBjZ3JvdXBfZHJpdmVyICpkcnY7CisKKwkvKiBOb2RlIGluIGNncm91cCdz IGRhdGEgaGFzaHRhYmxlICovCisJc3RydWN0IGhsaXN0X25vZGUgY2dyb3Vwbm9kZTsKKworCS8q IE5vZGUgaW4gZHJpdmVyJ3MgZGF0YSBsaXN0OyB1c2VkIHRvIGNsZWFudXAgb24gZHJpdmVyIHVu bG9hZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZHJpdmVybm9kZTsKK307CisKIHN0cnVjdCBjZ3Jv dXAgewogCS8qIHNlbGYgY3NzIHdpdGggTlVMTCAtPnNzLCBwb2ludHMgYmFjayB0byB0aGlzIGNn cm91cCAqLwogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIHNlbGY7CkBAIC00MjcsNiArNDQ1 LDEyIEBAIHN0cnVjdCBjZ3JvdXAgewogCS8qIHVzZWQgdG8gc3RvcmUgZUJQRiBwcm9ncmFtcyAq LwogCXN0cnVjdCBjZ3JvdXBfYnBmIGJwZjsKIAorCS8qCisJICogbGlzdCBvZiBjZ3JvdXBfZHJp dmVyX2RhdGEgc3RydWN0dXJlczsgdXNlZCB0byBtYW5hZ2UKKwkgKiBkcml2ZXItc3BlY2lmaWMg ZGF0YSBhc3NvY2lhdGVkIHdpdGggaW5kaXZpZHVhbCBjZ3JvdXBzCisJICovCisJREVDTEFSRV9I QVNIVEFCTEUoZHJpdmVyX2RhdGEsIDQpOworCiAJLyogaWRzIG9mIHRoZSBhbmNlc3RvcnMgYXQg ZWFjaCBsZXZlbCBpbmNsdWRpbmcgc2VsZiAqLwogCWludCBhbmNlc3Rvcl9pZHNbXTsKIH07CkBA IC02NjIsNiArNjg2LDE5IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIHsKIAl1bnNpZ25lZCBpbnQg ZGVwZW5kc19vbjsKIH07CiAKKy8qIEZ1bmN0aW9uIHRhYmxlIGZvciBoYW5kbGluZyBkcml2ZXIt c3BlY2lmaWMgY2dyb3VwIGRhdGEgKi8KK3N0cnVjdCBjZ3JvdXBfZHJpdmVyX2Z1bmNzIHsKKwkv KiBBbGxvY2F0ZXMgZHJpdmVyLXNwZWNpZmljIGRhdGEgZm9yIGEgY2dyb3VwICovCisJc3RydWN0 IGNncm91cF9kcml2ZXJfZGF0YSAqKCphbGxvY19kYXRhKShzdHJ1Y3QgY2dyb3VwX2RyaXZlciAq ZHJ2KTsKKworCS8qCisJICogRnJlZXMgYSBkcml2ZXItc3BlY2lmaWMgZGF0YXN0cnVjdHVyZS4K KwkgKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgb3B0aW9uYWw7IGlmIE5VTEwsIGRhdGEgd2lsbCBi ZSBrdmZyZWUoKSdkLgorCSAqLworCXZvaWQgKCpmcmVlX2RhdGEpKHN0cnVjdCBjZ3JvdXBfZHJp dmVyX2RhdGEgKmRhdGEpOworfTsKKwogZXh0ZXJuIHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3Jl IGNncm91cF90aHJlYWRncm91cF9yd3NlbTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xp bnV4L2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAppbmRleCA0NzNlMGMwYWJiODYu LjBiYTEzNzQxMjJjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAorKysgYi9p bmNsdWRlL2xpbnV4L2Nncm91cC5oCkBAIC04MzMsNCArODMzLDMxIEBAIHN0YXRpYyBpbmxpbmUg dm9pZCBwdXRfY2dyb3VwX25zKHN0cnVjdCBjZ3JvdXBfbmFtZXNwYWNlICpucykKIAkJZnJlZV9j Z3JvdXBfbnMobnMpOwogfQogCitzdHJ1Y3QgY2dyb3VwX2RyaXZlcl9mdW5jczsKKworI2lmZGVm IENPTkZJR19DR1JPVVBfRFJJVkVSCisKK3N0cnVjdCBjZ3JvdXBfZHJpdmVyICpjZ3JvdXBfZHJp dmVyX2luaXQoc3RydWN0IGNncm91cF9kcml2ZXJfZnVuY3MgKmZ1bmNzKTsKK3ZvaWQgY2dyb3Vw X2RyaXZlcl9yZWxlYXNlKHN0cnVjdCBjZ3JvdXBfZHJpdmVyICpkcnYpOworc3RydWN0IGNncm91 cF9kcml2ZXJfZGF0YSAqIGNncm91cF9kcml2ZXJfZ2V0X2RhdGEoc3RydWN0IGNncm91cF9kcml2 ZXIgKmRydiwKKwkJCQkJCSAgIHN0cnVjdCBjZ3JvdXAgKmNncnAsCisJCQkJCQkgICBib29sICpp c19uZXcpOworCisjZWxzZSAvKiAhQ09ORklHX0NHUk9VUF9EUklWRVIgKi8KKworc3RhdGljIGlu bGluZSBzdHJ1Y3QgY2dyb3VwX2RyaXZlciAqCitjZ3JvdXBfZHJpdmVyX2luaXQoc3RydWN0IGNn cm91cF9kcml2ZXJfZnVuY3MgKmZ1bmNzKSB7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgaW5s aW5lIHZvaWQgY2dyb3VwX2RyaXZlcl9yZWxlYXNlKHN0cnVjdCBjZ3JvdXBfZHJpdmVyICpkcnYp IHt9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JvdXBfZHJpdmVyX2RhdGEgKgorY2dyb3VwX2Ry aXZlcl9nZXRfZGF0YShzdHJ1Y3QgY2dyb3VwX2RyaXZlciAqZHJ2LAorCQkgICAgICAgc3RydWN0 IGNncm91cCAqY2dycCwKKwkJICAgICAgIGJvb2wgKmlzX25ldykKK3sKKwlyZXR1cm4gRVJSX1BU UigtRUlOVkFMKTsKK30KKworI2VuZGlmIC8qICFDT05GSUdfQ0dST1VQX0RSSVZFUiAqLworCiAj ZW5kaWYgLyogX0xJTlVYX0NHUk9VUF9IICovCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9p bml0L0tjb25maWcKaW5kZXggYTlhMmUyYzg2NjcxLi41Zjk0MmVkOGQyNDggMTAwNjQ0Ci0tLSBh L2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTg3Myw2ICs4NzMsMTAgQEAgY29u ZmlnIFNPQ0tfQ0dST1VQX0RBVEEKIAlib29sCiAJZGVmYXVsdCBuCiAKK2NvbmZpZyBDR1JPVVBf RFJJVkVSCisJYm9vbAorCWRlZmF1bHQgbgorCiBlbmRpZiAjIENHUk9VUFMKIAogbWVudWNvbmZp ZyBOQU1FU1BBQ0VTCmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL01ha2VmaWxlIGIva2VybmVs L2Nncm91cC9NYWtlZmlsZQppbmRleCAyYmU4OWEwMDMxODUuLjY2OWVmNjZkYTNhMiAxMDA2NDQK LS0tIGEva2VybmVsL2Nncm91cC9NYWtlZmlsZQorKysgYi9rZXJuZWwvY2dyb3VwL01ha2VmaWxl CkBAIC02LDMgKzYsNCBAQCBvYmotJChDT05GSUdfQ0dST1VQX1BJRFMpICs9IHBpZHMubwogb2Jq LSQoQ09ORklHX0NHUk9VUF9SRE1BKSArPSByZG1hLm8KIG9iai0kKENPTkZJR19DUFVTRVRTKSAr PSBjcHVzZXQubwogb2JqLSQoQ09ORklHX0NHUk9VUF9ERUJVRykgKz0gZGVidWcubworb2JqLSQo Q09ORklHX0NHUk9VUF9EUklWRVIpICs9IGNncm91cF9kcml2ZXIubwpkaWZmIC0tZ2l0IGEva2Vy bmVsL2Nncm91cC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmMKaW5kZXggN2U0YzQ0 NTM4MTE5Li5iOTI2NzEzYTE4NjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmMK KysrIGIva2VybmVsL2Nncm91cC9jZ3JvdXAuYwpAQCAtMTgzOCw2ICsxODM4LDcgQEAgc3RhdGlj IHZvaWQgaW5pdF9jZ3JvdXBfaG91c2VrZWVwaW5nKHN0cnVjdCBjZ3JvdXAgKmNncnApCiAJSU5J VF9MSVNUX0hFQUQoJmNncnAtPnNlbGYuY2hpbGRyZW4pOwogCUlOSVRfTElTVF9IRUFEKCZjZ3Jw LT5jc2V0X2xpbmtzKTsKIAlJTklUX0xJU1RfSEVBRCgmY2dycC0+cGlkbGlzdHMpOworCWhhc2hf aW5pdChjZ3JwLT5kcml2ZXJfZGF0YSk7CiAJbXV0ZXhfaW5pdCgmY2dycC0+cGlkbGlzdF9tdXRl eCk7CiAJY2dycC0+c2VsZi5jZ3JvdXAgPSBjZ3JwOwogCWNncnAtPnNlbGYuZmxhZ3MgfD0gQ1NT X09OTElORTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAvY2dyb3VwX2RyaXZlci5jIGIva2Vy bmVsL2Nncm91cC9jZ3JvdXBfZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi4wZDg5MzM5NWRjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvY2dyb3Vw L2Nncm91cF9kcml2ZXIuYwpAQCAtMCwwICsxLDEzMCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgKi8KKworI2luY2x1ZGUgImNncm91cC1pbnRlcm5hbC5oIgorCisjaW5j bHVkZSA8bGludXgvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworLyoKKyAq IEdlbmVyYWwgZGF0YSBzdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgY2dyb3VwX2RyaXZlcl9pbml0KCkg YW5kIHVzZWQgYXMgYQorICogaGFzaHRhYmxlIGtleSB0byBsb29rdXAgZHJpdmVyLXNwZWNpZmlj IGRhdGEuCisgKi8KK3N0cnVjdCBjZ3JvdXBfZHJpdmVyIHsKKwkvKiBGdW5jdGlvbnMgdGhpcyBk cml2ZXIgdXNlcyB0byBtYW5hZ2UgaXRzIGRhdGEgKi8KKwlzdHJ1Y3QgY2dyb3VwX2RyaXZlcl9m dW5jcyAqZnVuY3M7CisKKwkvKgorCSAqIExpc3Qgb2YgZHJpdmVyLXNwZWNpZmljIGRhdGEgc3Ry dWN0dXJlcyB0aGF0IG5lZWQgdG8gYmUgY2xlYW5lZCB1cAorCSAqIGlmIGRyaXZlciBpcyB1bmxv YWRlZC4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRhdGFsaXN0OworfTsKKworLyoqCisgKiBj Z3JvdXBfZHJpdmVyX2luaXQgLSBpbml0aWFsaXplIGNncm91cHMgZHJpdmVyLXNwZWNpZmljIGRh dGEgbWFuYWdlbWVudAorICogQGZ1bmNzOiBkcml2ZXItc3BlY2lmaWMgZGF0YSBtYW5hZ2VtZW50 IGZ1bmN0aW9ucworICoKKyAqIERyaXZlcnMgdGhhdCB3aXNoIHRvIHN0b3JlIGRyaXZlci1zcGVj aWZpYyBkYXRhIGFsb25nc2lkZSBpbmRpdmlkdWFsCisgKiBjZ3JvdXBzIHNob3VsZCBjYWxsIHRo aXMgYW5kIHByb3ZpZGUgYSBmdW5jdGlvbiB0YWJsZSBvZiBkcml2ZXItc3BlY2lmaWMKKyAqIGRh dGEgb3BlcmF0aW9ucy4KKyAqCisgKiBSRVRVUk5TOgorICogQW4gaW5zdGFuY2Ugb2YgJ3N0cnVj dCBjZ3JvdXBfZHJpdmVyJyB0aGF0IHdpbGwgYmUgdXNlZCB0byBoZWxwIG1hbmFnZQorICogZGF0 YSBzdG9yYWdlIGZvciB0aGUgaW52b2tpbmcgZHJpdmVyLiAgSWYgYW4gZXJyb3Igb2NjdXJzLCBh IG5lZ2F0aXZlCisgKiBlcnJvciBjb2RlIHdpbGwgYmUgcmV0dXJuZWQuICBJZiBDT05GSUdfQ0dS T1VQX0RSSVZFUiBpcyBub3Qgc2V0LCBOVUxMCisgKiB3aWxsIGJlIHJldHVybmVkLgorICovCitz dHJ1Y3QgY2dyb3VwX2RyaXZlciAqCitjZ3JvdXBfZHJpdmVyX2luaXQoc3RydWN0IGNncm91cF9k cml2ZXJfZnVuY3MgKmZ1bmNzKQoreworCXN0cnVjdCBjZ3JvdXBfZHJpdmVyICpkcnY7CisKKwlk cnYgPSBremFsbG9jKHNpemVvZiAqZHJ2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRydikKKwkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlkcnYtPmZ1bmNzID0gZnVuY3M7CisJSU5JVF9MSVNU X0hFQUQoJmRydi0+ZGF0YWxpc3QpOworCisJcmV0dXJuIGRydjsKK30KK0VYUE9SVF9TWU1CT0wo Y2dyb3VwX2RyaXZlcl9pbml0KTsKKworLyoqCisgKiBjZ3JvdXBfZHJpdmVyX3JlbGVhc2UgLSBy ZWxlYXNlIGFsbCBkcml2ZXItc3BlY2lmaWMgZGF0YSBmb3IgYSBkcml2ZXIKKyAqIEBkcnY6IGRy aXZlciB0byByZWxlYXNlIGRhdGEgZm9yCisgKgorICogRHJpdmVycyBzdG9yaW5nIHRoZWlyIG93 biBkYXRhIGFsb25nc2lkZSBjZ3JvdXBzIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24KKyAqIHdo ZW4gdW5sb2FkZWQgdG8gZW5zdXJlIGFsbCBkcml2ZXItc3BlY2lmaWMgZGF0YSBpcyByZWxlYXNl ZC4KKyAqLwordm9pZAorY2dyb3VwX2RyaXZlcl9yZWxlYXNlKHN0cnVjdCBjZ3JvdXBfZHJpdmVy ICpkcnYpCit7CisJc3RydWN0IGNncm91cF9kcml2ZXJfZGF0YSAqZGF0YSwgKnRtcDsKKworCW11 dGV4X2xvY2soJmNncm91cF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRhdGEs IHRtcCwgJmRydi0+ZGF0YWxpc3QsIGRyaXZlcm5vZGUpIHsKKwkJaGxpc3RfZGVsKCZkYXRhLT5j Z3JvdXBub2RlKTsKKwkJbGlzdF9kZWwoJmRhdGEtPmRyaXZlcm5vZGUpOworCQlpZiAoZHJ2LT5m dW5jcyAmJiBkcnYtPmZ1bmNzLT5mcmVlX2RhdGEpCisJCQlkcnYtPmZ1bmNzLT5mcmVlX2RhdGEo ZGF0YSk7CisJCWVsc2UKKwkJCWt2ZnJlZShkYXRhKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjZ3Jv dXBfbXV0ZXgpOworCisJa2ZyZWUoZHJ2KTsKK30KK0VYUE9SVF9TWU1CT0woY2dyb3VwX2RyaXZl cl9yZWxlYXNlKTsKKworLyoqCisgKiBjZ3JvdXBfZHJpdmVyX2dldF9kYXRhIC0gcmV0cmlldmUv YWxsb2NhdGUgZHJpdmVyLXNwZWNpZmljIGRhdGEgZm9yIGEgY2dyb3VwCisgKiBAZHJ2OiBkcml2 ZXIgd2lzaGluZyB0byBmZXRjaCBkYXRhCisgKiBAY2dycDogY2dyb3VwIHRvIGZldGNoIGRhdGEg Zm9yCisgKiBAaXNfbmV3OiB3aWxsIGJlIHNldCB0byB0cnVlIGlmIGEgbmV3IHN0cnVjdHVyZSBp cyBhbGxvY2F0ZWQKKyAqCisgKiBGZXRjaGVzIHRoZSBkcml2ZXItc3BlY2lmaWMgZGF0YSBzdHJ1 Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIGEgY2dyb3VwLCBpZiBvbmUKKyAqIGhhcyBwcmV2aW91c2x5 IGJlZW4gc2V0LiAgSWYgbm8gZHJpdmVyIGRhdGEgaGFzIGJlZW4gYXNzb2NpYXRlZCB3aXRoIHRo aXMKKyAqIGNncm91cCwgYSBuZXcgZHJpdmVyLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGlzIGFs bG9jYXRlZCBhbmQgcmV0dXJuZWQuCisgKgorICogUkVUVVJOUzoKKyAqIFRoZSBkcml2ZXIgZGF0 YSBwcmV2aW91c2x5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNncm91cCwgb3IgYSBmcmVzaCBkYXRh CisgKiBzdHJ1Y3R1cmUgYWxsb2NhdGVkIHZpYSBkcnYtPmZ1bmNzLT5hbGxvY19kYXRhKCkgaWYg bm8gZGF0YSBoYXMgcHJldmlvdXNseQorICogYmVlbiBhc3NvY2lhdGVkLiAgT24gZXJyb3IsIGEg bmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KKyAqLworc3RydWN0IGNncm91cF9kcml2 ZXJfZGF0YSAqCitjZ3JvdXBfZHJpdmVyX2dldF9kYXRhKHN0cnVjdCBjZ3JvdXBfZHJpdmVyICpk cnYsCisJCSAgICAgICBzdHJ1Y3QgY2dyb3VwICpjZ3JwLAorCQkgICAgICAgYm9vbCAqaXNfbmV3 KQoreworCXN0cnVjdCBjZ3JvdXBfZHJpdmVyX2RhdGEgKmRhdGE7CisKKwkvKiBXZSBvbmx5IHN1 cHBvcnQgZHJpdmVyLXNwZWNpZmljIGRhdGEgb24gdGhlIGNncm91cC12MiBoaWVyYXJjaHkgKi8K KwlpZiAoIWNncm91cF9vbl9kZmwoY2dycCkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwor CisJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKKworCWlmIChpc19uZXcpCisJCSppc19uZXcg PSBmYWxzZTsKKwloYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKGNncnAtPmRyaXZlcl9kYXRhLCBkYXRh LCBjZ3JvdXBub2RlLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nKWRydikKKwkJaWYgKGRhdGEt PmRydiA9PSBkcnYpCisJCQlnb3RvIG91dDsKKworCS8qIEZpcnN0IHRpbWUgZm9yIHRoaXMgY2dy b3VwOyBhbGxvYyBhbmQgc3RvcmUgbmV3IGRhdGEgKi8KKwlkYXRhID0gZHJ2LT5mdW5jcy0+YWxs b2NfZGF0YShkcnYpOworCWlmICghSVNfRVJSKGRhdGEpKSB7CisJCWRhdGEtPmRydiA9IGRydjsK KwkJaGFzaF9hZGQoY2dycC0+ZHJpdmVyX2RhdGEsICZkYXRhLT5jZ3JvdXBub2RlLAorCQkJICh1 bnNpZ25lZCBsb25nKWRydik7CisJCWxpc3RfYWRkKCZkYXRhLT5kcml2ZXJub2RlLCAmZHJ2LT5k YXRhbGlzdCk7CisJCWlmIChpc19uZXcpCisJCQkqaXNfbmV3ID0gdHJ1ZTsKKwl9CisKK291dDoK KwltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CisJcmV0dXJuIGRhdGE7Cit9CitFWFBPUlRf U1lNQk9MKGNncm91cF9kcml2ZXJfZ2V0X2RhdGEpOwotLSAKMi4xNC4zCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK