From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Stultz Subject: [RFC][PATCH 2/5 v2] dma-buf: heaps: Add heap helpers Date: Tue, 5 Mar 2019 12:54:30 -0800 Message-ID: <1551819273-640-3-git-send-email-john.stultz@linaro.org> References: <1551819273-640-1-git-send-email-john.stultz@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pf1-x443.google.com (mail-pf1-x443.google.com [IPv6:2607:f8b0:4864:20::443]) by gabe.freedesktop.org (Postfix) with ESMTPS id 702F889C16 for ; Tue, 5 Mar 2019 20:54:45 +0000 (UTC) Received: by mail-pf1-x443.google.com with SMTP id u9so6618964pfn.1 for ; Tue, 05 Mar 2019 12:54:45 -0800 (PST) In-Reply-To: <1551819273-640-1-git-send-email-john.stultz@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: lkml Cc: Greg KH , Chenbo Feng , Alistair Strachan , Liam Mark , dri-devel@lists.freedesktop.org, "Andrew F . Davis" List-Id: dri-devel@lists.freedesktop.org QWRkIGdlbmVyaWMgaGVscGVyIGRtYWJ1ZiBvcHMgZm9yIGRtYSBoZWFwcywgc28gd2UgY2FuIHJl ZHVjZQp0aGUgYW1vdW50IG9mIGR1cGxpY2F0aXZlIGNvZGUgZm9yIHRoZSBleHBvcnRlZCBkbWFi dWZzLgoKVGhpcyBjb2RlIGlzIGFuIGV2b2x1dGlvbiBvZiB0aGUgQW5kcm9pZCBJT04gaW1wbGVt ZW50YXRpb24sIHNvCnRoYW5rcyB0byBpdHMgb3JpZ2luYWwgYXV0aG9ycyBhbmQgbWFpbnRhaW50 ZXJzOgogIFJlYmVjY2EgU2NodWx0eiBaYXZpbiwgQ29saW4gQ3Jvc3MsIExhdXJhIEFiYm90dCwg YW5kIG90aGVycyEKCkNjOiBMYXVyYSBBYmJvdHQgPGxhYmJvdHRAcmVkaGF0LmNvbT4KQ2M6IEJl bmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBsaW5hcm8ub3JnPgpDYzogR3JlZyBL SCA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+CkNjOiBTdW1pdCBTZW13YWwgPHN1bWl0LnNl bXdhbEBsaW5hcm8ub3JnPgpDYzogTGlhbSBNYXJrIDxsbWFya0Bjb2RlYXVyb3JhLm9yZz4KQ2M6 IEJyaWFuIFN0YXJrZXkgPEJyaWFuLlN0YXJrZXlAYXJtLmNvbT4KQ2M6IEFuZHJldyBGLiBEYXZp cyA8YWZkQHRpLmNvbT4KQ2M6IENoZW5ibyBGZW5nIDxmZW5nY0Bnb29nbGUuY29tPgpDYzogQWxp c3RhaXIgU3RyYWNoYW4gPGFzdHJhY2hhbkBnb29nbGUuY29tPgpDYzogZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpTaWduZWQtb2ZmLWJ5OiBKb2huIFN0dWx0eiA8am9obi5zdHVsdHpA bGluYXJvLm9yZz4KLS0tCnYyOgoqIFJlbW92ZWQgY2FjaGUgbWFuYWdlbWVudCBwZXJmb3JtYW5j ZSBoYWNrIHRoYXQgSSBoYWQKICBhY2NpZGVudGFsbHkgZm9sZGVkIGluLgoqIFJlbW92ZWQgc3Rh dHMgY29kZSB0aGF0IHdhcyBpbiBoZWxwZXJzCiogTG90cyBvZiBjaGVja3BhdGNoIGNsZWFudXBz Ci0tLQogZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlICAgICAgICAgICAgIHwgICAxICsKIGRyaXZl cnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZSAgICAgICB8ICAgMiArCiBkcml2ZXJzL2RtYS1idWYv aGVhcHMvaGVhcC1oZWxwZXJzLmMgfCAzMzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIGRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9oZWFwLWhlbHBlcnMuaCB8ICA0OCArKysrKwog NCBmaWxlcyBjaGFuZ2VkLCAzODYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv ZG1hLWJ1Zi9oZWFwcy9oZWFwLWhlbHBlcnMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv ZG1hLWJ1Zi9oZWFwcy9oZWFwLWhlbHBlcnMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1 Zi9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQppbmRleCBiMDMzMmYxLi4wOWMy ZjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9k bWEtYnVmL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogb2JqLXkgOj0gZG1hLWJ1Zi5vIGRtYS1m ZW5jZS5vIGRtYS1mZW5jZS1hcnJheS5vIHJlc2VydmF0aW9uLm8gc2Vxbm8tZmVuY2Uubworb2Jq LSQoQ09ORklHX0RNQUJVRl9IRUFQUykJKz0gaGVhcHMvCiBvYmotJChDT05GSUdfRE1BQlVGX0hF QVBTKQkrPSBkbWEtaGVhcC5vCiBvYmotJChDT05GSUdfU1lOQ19GSUxFKQkJKz0gc3luY19maWxl Lm8KIG9iai0kKENPTkZJR19TV19TWU5DKQkJKz0gc3dfc3luYy5vIHN5bmNfZGVidWcubwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVm L2hlYXBzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNDk4 OTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvTWFrZWZpbGUKQEAg LTAsMCArMSwyIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCitvYmoteQkJ CQkJKz0gaGVhcC1oZWxwZXJzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9o ZWFwLWhlbHBlcnMuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9oZWFwLWhlbHBlcnMuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTVlOWQwCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL2hlYXAtaGVscGVycy5jCkBAIC0wLDAgKzEsMzM1IEBA CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorI2luY2x1ZGUgPGxpbnV4L2Rl dmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIu aD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5j bHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRl IDx1YXBpL2xpbnV4L2RtYS1oZWFwLmg+CisKKyNpbmNsdWRlICJoZWFwLWhlbHBlcnMuaCIKKwor CitzdGF0aWMgdm9pZCAqZG1hX2hlYXBfbWFwX2tlcm5lbChzdHJ1Y3QgaGVhcF9oZWxwZXJfYnVm ZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaSwgajsKKwl2 b2lkICp2YWRkcjsKKwlwZ3Byb3RfdCBwZ3Byb3Q7CisJc3RydWN0IHNnX3RhYmxlICp0YWJsZSA9 IGJ1ZmZlci0+c2dfdGFibGU7CisJaW50IG5wYWdlcyA9IFBBR0VfQUxJR04oYnVmZmVyLT5oZWFw X2J1ZmZlci5zaXplKSAvIFBBR0VfU0laRTsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gdm1hbGxv YyhhcnJheV9zaXplKG5wYWdlcywKKwkJCQkJCSBzaXplb2Yoc3RydWN0IHBhZ2UgKikpKTsKKwlz dHJ1Y3QgcGFnZSAqKnRtcCA9IHBhZ2VzOworCisJaWYgKCFwYWdlcykKKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7CisKKwlwZ3Byb3QgPSBQQUdFX0tFUk5FTDsKKworCWZvcl9lYWNoX3NnKHRh YmxlLT5zZ2wsIHNnLCB0YWJsZS0+bmVudHMsIGkpIHsKKwkJaW50IG5wYWdlc190aGlzX2VudHJ5 ID0gUEFHRV9BTElHTihzZy0+bGVuZ3RoKSAvIFBBR0VfU0laRTsKKwkJc3RydWN0IHBhZ2UgKnBh Z2UgPSBzZ19wYWdlKHNnKTsKKworCQlXQVJOX09OKGkgPj0gbnBhZ2VzKTsKKwkJZm9yIChqID0g MDsgaiA8IG5wYWdlc190aGlzX2VudHJ5OyBqKyspCisJCQkqKHRtcCsrKSA9IHBhZ2UrKzsKKwl9 CisJdmFkZHIgPSB2bWFwKHBhZ2VzLCBucGFnZXMsIFZNX01BUCwgcGdwcm90KTsKKwl2ZnJlZShw YWdlcyk7CisKKwlpZiAoIXZhZGRyKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJl dHVybiB2YWRkcjsKK30KKworc3RhdGljIGludCBkbWFfaGVhcF9tYXBfdXNlcihzdHJ1Y3QgaGVh cF9oZWxwZXJfYnVmZmVyICpidWZmZXIsCisJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp Cit7CisJc3RydWN0IHNnX3RhYmxlICp0YWJsZSA9IGJ1ZmZlci0+c2dfdGFibGU7CisJdW5zaWdu ZWQgbG9uZyBhZGRyID0gdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHZt YS0+dm1fcGdvZmYgKiBQQUdFX1NJWkU7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQg aTsKKwlpbnQgcmV0OworCisJZm9yX2VhY2hfc2codGFibGUtPnNnbCwgc2csIHRhYmxlLT5uZW50 cywgaSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2Uoc2cpOworCQl1bnNpZ25lZCBs b25nIHJlbWFpbmRlciA9IHZtYS0+dm1fZW5kIC0gYWRkcjsKKwkJdW5zaWduZWQgbG9uZyBsZW4g PSBzZy0+bGVuZ3RoOworCisJCWlmIChvZmZzZXQgPj0gc2ctPmxlbmd0aCkgeworCQkJb2Zmc2V0 IC09IHNnLT5sZW5ndGg7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChvZmZzZXQpIHsKKwkJ CXBhZ2UgKz0gb2Zmc2V0IC8gUEFHRV9TSVpFOworCQkJbGVuID0gc2ctPmxlbmd0aCAtIG9mZnNl dDsKKwkJCW9mZnNldCA9IDA7CisJCX0KKwkJbGVuID0gbWluKGxlbiwgcmVtYWluZGVyKTsKKwkJ cmV0ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgYWRkciwgcGFnZV90b19wZm4ocGFnZSksIGxlbiwK KwkJCQkgICAgICB2bWEtPnZtX3BhZ2VfcHJvdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0 OworCQlhZGRyICs9IGxlbjsKKwkJaWYgKGFkZHIgPj0gdm1hLT52bV9lbmQpCisJCQlyZXR1cm4g MDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIGRtYV9oZWFwX2J1ZmZlcl9kZXN0cm95 KHN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVmZmVyKQoreworCXN0cnVjdCBoZWFwX2hl bHBlcl9idWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9idWZmZXIpOworCisJ aWYgKGJ1ZmZlci0+a21hcF9jbnQgPiAwKSB7CisJCXByX3dhcm5fb25jZSgiJXM6IGJ1ZmZlciBz dGlsbCBtYXBwZWQgaW4gdGhlIGtlcm5lbFxuIiwKKwkJCSAgICAgX19mdW5jX18pOworCQl2dW5t YXAoYnVmZmVyLT52YWRkcik7CisJfQorCisJYnVmZmVyLT5mcmVlKGJ1ZmZlcik7Cit9CisKK3N0 YXRpYyB2b2lkICpkbWFfaGVhcF9idWZmZXJfa21hcF9nZXQoc3RydWN0IGRtYV9oZWFwX2J1ZmZl ciAqaGVhcF9idWZmZXIpCit7CisJc3RydWN0IGhlYXBfaGVscGVyX2J1ZmZlciAqYnVmZmVyID0g dG9faGVscGVyX2J1ZmZlcihoZWFwX2J1ZmZlcik7CisJdm9pZCAqdmFkZHI7CisKKwlpZiAoYnVm ZmVyLT5rbWFwX2NudCkgeworCQlidWZmZXItPmttYXBfY250Kys7CisJCXJldHVybiBidWZmZXIt PnZhZGRyOworCX0KKwl2YWRkciA9IGRtYV9oZWFwX21hcF9rZXJuZWwoYnVmZmVyKTsKKwlpZiAo V0FSTl9PTkNFKCF2YWRkciwKKwkJICAgICAgImhlYXAtPm9wcy0+bWFwX2tlcm5lbCBzaG91bGQg cmV0dXJuIEVSUl9QVFIgb24gZXJyb3IiKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJ aWYgKElTX0VSUih2YWRkcikpCisJCXJldHVybiB2YWRkcjsKKwlidWZmZXItPnZhZGRyID0gdmFk ZHI7CisJYnVmZmVyLT5rbWFwX2NudCsrOworCXJldHVybiB2YWRkcjsKK30KKworc3RhdGljIHZv aWQgZG1hX2hlYXBfYnVmZmVyX2ttYXBfcHV0KHN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBf YnVmZmVyKQoreworCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBl cl9idWZmZXIoaGVhcF9idWZmZXIpOworCisJYnVmZmVyLT5rbWFwX2NudC0tOworCWlmICghYnVm ZmVyLT5rbWFwX2NudCkgeworCQl2dW5tYXAoYnVmZmVyLT52YWRkcik7CisJCWJ1ZmZlci0+dmFk ZHIgPSBOVUxMOworCX0KK30KKworc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqZHVwX3NnX3RhYmxl KHN0cnVjdCBzZ190YWJsZSAqdGFibGUpCit7CisJc3RydWN0IHNnX3RhYmxlICpuZXdfdGFibGU7 CisJaW50IHJldCwgaTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCAqbmV3X3NnOworCisJbmV3 X3RhYmxlID0ga3phbGxvYyhzaXplb2YoKm5ld190YWJsZSksIEdGUF9LRVJORUwpOworCWlmICgh bmV3X3RhYmxlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJldCA9IHNnX2FsbG9j X3RhYmxlKG5ld190YWJsZSwgdGFibGUtPm5lbnRzLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0KSB7 CisJCWtmcmVlKG5ld190YWJsZSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKwor CW5ld19zZyA9IG5ld190YWJsZS0+c2dsOworCWZvcl9lYWNoX3NnKHRhYmxlLT5zZ2wsIHNnLCB0 YWJsZS0+bmVudHMsIGkpIHsKKwkJbWVtY3B5KG5ld19zZywgc2csIHNpemVvZigqc2cpKTsKKwkJ bmV3X3NnLT5kbWFfYWRkcmVzcyA9IDA7CisJCW5ld19zZyA9IHNnX25leHQobmV3X3NnKTsKKwl9 CisKKwlyZXR1cm4gbmV3X3RhYmxlOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2R1cGVkX3RhYmxl KHN0cnVjdCBzZ190YWJsZSAqdGFibGUpCit7CisJc2dfZnJlZV90YWJsZSh0YWJsZSk7CisJa2Zy ZWUodGFibGUpOworfQorCitzdHJ1Y3QgZG1hX2hlYXBzX2F0dGFjaG1lbnQgeworCXN0cnVjdCBk ZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlOworCXN0cnVjdCBsaXN0X2hlYWQg bGlzdDsKK307CisKK3N0YXRpYyBpbnQgZG1hX2hlYXBfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpk bWFidWYsCisJCQkgICAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50KQor eworCXN0cnVjdCBkbWFfaGVhcHNfYXR0YWNobWVudCAqYTsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnRh YmxlOworCXN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVmZmVyID0gZG1hYnVmLT5wcml2 OworCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9idWZmZXIo aGVhcF9idWZmZXIpOworCisJYSA9IGt6YWxsb2Moc2l6ZW9mKCphKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRhYmxlID0gZHVwX3NnX3RhYmxlKGJ1ZmZl ci0+c2dfdGFibGUpOworCWlmIChJU19FUlIodGFibGUpKSB7CisJCWtmcmVlKGEpOworCQlyZXR1 cm4gLUVOT01FTTsKKwl9CisKKwlhLT50YWJsZSA9IHRhYmxlOworCWEtPmRldiA9IGF0dGFjaG1l bnQtPmRldjsKKwlJTklUX0xJU1RfSEVBRCgmYS0+bGlzdCk7CisKKwlhdHRhY2htZW50LT5wcml2 ID0gYTsKKworCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7CisJbGlzdF9hZGQoJmEtPmxpc3Qs ICZidWZmZXItPmF0dGFjaG1lbnRzKTsKKwltdXRleF91bmxvY2soJmJ1ZmZlci0+bG9jayk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZG1hX2hlYXBfZGV0YXRjaChzdHJ1Y3QgZG1h X2J1ZiAqZG1hYnVmLAorCQkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQp Cit7CisJc3RydWN0IGRtYV9oZWFwc19hdHRhY2htZW50ICphID0gYXR0YWNobWVudC0+cHJpdjsK KwlzdHJ1Y3QgZG1hX2hlYXBfYnVmZmVyICpoZWFwX2J1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsKKwlz dHJ1Y3QgaGVhcF9oZWxwZXJfYnVmZmVyICpidWZmZXIgPSB0b19oZWxwZXJfYnVmZmVyKGhlYXBf YnVmZmVyKTsKKworCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7CisJbGlzdF9kZWwoJmEtPmxp c3QpOworCW11dGV4X3VubG9jaygmYnVmZmVyLT5sb2NrKTsKKwlmcmVlX2R1cGVkX3RhYmxlKGEt PnRhYmxlKTsKKworCWtmcmVlKGEpOworfQorCitzdGF0aWMgc3RydWN0IHNnX3RhYmxlICpkbWFf aGVhcF9tYXBfZG1hX2J1ZigKKwkJCQkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNo bWVudCwKKwkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXN0cnVj dCBkbWFfaGVhcHNfYXR0YWNobWVudCAqYSA9IGF0dGFjaG1lbnQtPnByaXY7CisJc3RydWN0IHNn X3RhYmxlICp0YWJsZTsKKworCXRhYmxlID0gYS0+dGFibGU7CisKKwlpZiAoIWRtYV9tYXBfc2co YXR0YWNobWVudC0+ZGV2LCB0YWJsZS0+c2dsLCB0YWJsZS0+bmVudHMsCisJCQlkaXJlY3Rpb24p KQorCQl0YWJsZSA9IEVSUl9QVFIoLUVOT01FTSk7CisJcmV0dXJuIHRhYmxlOworfQorCitzdGF0 aWMgdm9pZCBkbWFfaGVhcF91bm1hcF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQg KmF0dGFjaG1lbnQsCisJCQkgICAgICBzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlLAorCQkJICAgICAg ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWRtYV91bm1hcF9zZyhhdHRh Y2htZW50LT5kZXYsIHRhYmxlLT5zZ2wsIHRhYmxlLT5uZW50cywgZGlyZWN0aW9uKTsKK30KKwor c3RhdGljIGludCBkbWFfaGVhcF9tbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVm ZmVyID0gZG1hYnVmLT5wcml2OworCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciA9 IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9idWZmZXIpOworCWludCByZXQgPSAwOworCisJbXV0ZXhf bG9jaygmYnVmZmVyLT5sb2NrKTsKKwkvKiBub3cgbWFwIGl0IHRvIHVzZXJzcGFjZSAqLworCXJl dCA9IGRtYV9oZWFwX21hcF91c2VyKGJ1ZmZlciwgdm1hKTsKKwltdXRleF91bmxvY2soJmJ1ZmZl ci0+bG9jayk7CisKKwlpZiAocmV0KQorCQlwcl9lcnIoIiVzOiBmYWlsdXJlIG1hcHBpbmcgYnVm ZmVyIHRvIHVzZXJzcGFjZVxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9oZWFwX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1 ZiAqZG1hYnVmKQoreworCXN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmJ1ZmZlciA9IGRtYWJ1Zi0+ cHJpdjsKKworCWRtYV9oZWFwX2J1ZmZlcl9kZXN0cm95KGJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2 b2lkICpkbWFfaGVhcF9kbWFfYnVmX2ttYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkJ dW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJc3RydWN0IGRtYV9oZWFwX2J1ZmZlciAqaGVhcF9i dWZmZXIgPSBkbWFidWYtPnByaXY7CisJc3RydWN0IGhlYXBfaGVscGVyX2J1ZmZlciAqYnVmZmVy ID0gdG9faGVscGVyX2J1ZmZlcihoZWFwX2J1ZmZlcik7CisKKwlyZXR1cm4gYnVmZmVyLT52YWRk ciArIG9mZnNldCAqIFBBR0VfU0laRTsKK30KKworc3RhdGljIHZvaWQgZG1hX2hlYXBfZG1hX2J1 Zl9rdW5tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkJdW5zaWduZWQgbG9uZyBvZmZz ZXQsCisJCQkJCXZvaWQgKnB0cikKK3sKK30KKworc3RhdGljIGludCBkbWFfaGVhcF9kbWFfYnVm X2JlZ2luX2NwdV9hY2Nlc3Moc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkJZW51bSBkbWFf ZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhl YXBfYnVmZmVyID0gZG1hYnVmLT5wcml2OworCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1 ZmZlciA9IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9idWZmZXIpOworCXZvaWQgKnZhZGRyOworCXN0 cnVjdCBkbWFfaGVhcHNfYXR0YWNobWVudCAqYTsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xv Y2soJmJ1ZmZlci0+bG9jayk7CisJdmFkZHIgPSBkbWFfaGVhcF9idWZmZXJfa21hcF9nZXQoaGVh cF9idWZmZXIpOworCWlmIChJU19FUlIodmFkZHIpKSB7CisJCXJldCA9IFBUUl9FUlIodmFkZHIp OworCQlnb3RvIHVubG9jazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZidWZmZXItPmxvY2spOworCisJ bXV0ZXhfbG9jaygmYnVmZmVyLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsICZidWZm ZXItPmF0dGFjaG1lbnRzLCBsaXN0KSB7CisJCWRtYV9zeW5jX3NnX2Zvcl9jcHUoYS0+ZGV2LCBh LT50YWJsZS0+c2dsLCBhLT50YWJsZS0+bmVudHMsCisJCQkJICAgIGRpcmVjdGlvbik7CisJfQor Cit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZidWZmZXItPmxvY2spOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgZG1hX2hlYXBfZG1hX2J1Zl9lbmRfY3B1X2FjY2VzcyhzdHJ1Y3QgZG1h X2J1ZiAqZG1hYnVmLAorCQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlv bikKK3sKKwlzdHJ1Y3QgZG1hX2hlYXBfYnVmZmVyICpoZWFwX2J1ZmZlciA9IGRtYWJ1Zi0+cHJp djsKKwlzdHJ1Y3QgaGVhcF9oZWxwZXJfYnVmZmVyICpidWZmZXIgPSB0b19oZWxwZXJfYnVmZmVy KGhlYXBfYnVmZmVyKTsKKwlzdHJ1Y3QgZG1hX2hlYXBzX2F0dGFjaG1lbnQgKmE7CisKKwltdXRl eF9sb2NrKCZidWZmZXItPmxvY2spOworCWRtYV9oZWFwX2J1ZmZlcl9rbWFwX3B1dChoZWFwX2J1 ZmZlcik7CisJbXV0ZXhfdW5sb2NrKCZidWZmZXItPmxvY2spOworCisJbXV0ZXhfbG9jaygmYnVm ZmVyLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsICZidWZmZXItPmF0dGFjaG1lbnRz LCBsaXN0KSB7CisJCWRtYV9zeW5jX3NnX2Zvcl9kZXZpY2UoYS0+ZGV2LCBhLT50YWJsZS0+c2ds LCBhLT50YWJsZS0+bmVudHMsCisJCQkJICAgICAgIGRpcmVjdGlvbik7CisJfQorCW11dGV4X3Vu bG9jaygmYnVmZmVyLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3QgZG1h X2J1Zl9vcHMgaGVhcF9oZWxwZXJfb3BzID0geworCS5tYXBfZG1hX2J1ZiA9IGRtYV9oZWFwX21h cF9kbWFfYnVmLAorCS51bm1hcF9kbWFfYnVmID0gZG1hX2hlYXBfdW5tYXBfZG1hX2J1ZiwKKwku bW1hcCA9IGRtYV9oZWFwX21tYXAsCisJLnJlbGVhc2UgPSBkbWFfaGVhcF9kbWFfYnVmX3JlbGVh c2UsCisJLmF0dGFjaCA9IGRtYV9oZWFwX2F0dGFjaCwKKwkuZGV0YWNoID0gZG1hX2hlYXBfZGV0 YXRjaCwKKwkuYmVnaW5fY3B1X2FjY2VzcyA9IGRtYV9oZWFwX2RtYV9idWZfYmVnaW5fY3B1X2Fj Y2VzcywKKwkuZW5kX2NwdV9hY2Nlc3MgPSBkbWFfaGVhcF9kbWFfYnVmX2VuZF9jcHVfYWNjZXNz LAorCS5tYXAgPSBkbWFfaGVhcF9kbWFfYnVmX2ttYXAsCisJLnVubWFwID0gZG1hX2hlYXBfZG1h X2J1Zl9rdW5tYXAsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2hlYXBzL2hlYXAt aGVscGVycy5oIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL2hlYXAtaGVscGVycy5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZDg2NDMKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmgKQEAgLTAsMCArMSw0OCBAQAorLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBETUFCVUYgSGVhcHMg aGVscGVyIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMuCisgKiBD b3B5cmlnaHQgKEMpIDIwMTkgTGluYXJvIEx0ZC4KKyAqLworCisjaWZuZGVmIF9IRUFQX0hFTFBF UlNfSAorI2RlZmluZSBfSEVBUF9IRUxQRVJTX0gKKworI2luY2x1ZGUgPGxpbnV4L2RtYS1oZWFw Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgaGVhcF9oZWxwZXJfYnVmZmVy IHsKKwlzdHJ1Y3QgZG1hX2hlYXBfYnVmZmVyIGhlYXBfYnVmZmVyOworCisJdW5zaWduZWQgbG9u ZyBwcml2YXRlX2ZsYWdzOworCXZvaWQgKnByaXZfdmlydDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsK KwlpbnQga21hcF9jbnQ7CisJdm9pZCAqdmFkZHI7CisJc3RydWN0IHNnX3RhYmxlICpzZ190YWJs ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGF0dGFjaG1lbnRzOworCisJdm9pZCAoKmZyZWUpKHN0cnVj dCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlcik7CisKK307CisKKyNkZWZpbmUgdG9faGVscGVy X2J1ZmZlcih4KSBcCisJY29udGFpbmVyX29mKHgsIHN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIs IGhlYXBfYnVmZmVyKQorCitzdGF0aWMgaW5saW5lIHZvaWQgSU5JVF9IRUFQX0hFTFBFUl9CVUZG RVIoc3RydWN0IGhlYXBfaGVscGVyX2J1ZmZlciAqYnVmZmVyLAorCQkJCSB2b2lkICgqZnJlZSko c3RydWN0IGhlYXBfaGVscGVyX2J1ZmZlciAqKSkKK3sKKwlidWZmZXItPnByaXZhdGVfZmxhZ3Mg PSAwOworCWJ1ZmZlci0+cHJpdl92aXJ0ID0gTlVMTDsKKwltdXRleF9pbml0KCZidWZmZXItPmxv Y2spOworCWJ1ZmZlci0+a21hcF9jbnQgPSAwOworCWJ1ZmZlci0+dmFkZHIgPSBOVUxMOworCWJ1 ZmZlci0+c2dfdGFibGUgPSBOVUxMOworCUlOSVRfTElTVF9IRUFEKCZidWZmZXItPmF0dGFjaG1l bnRzKTsKKwlidWZmZXItPmZyZWUgPSBmcmVlOworfQorCitleHRlcm4gY29uc3Qgc3RydWN0IGRt YV9idWZfb3BzIGhlYXBfaGVscGVyX29wczsKKworI2VuZGlmIC8qIF9IRUFQX0hFTFBFUlNfSCAq LwotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bA==