From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: Re: [PATCH v2 1/2] drm: Add library for shmem backed GEM objects Date: Sun, 2 Sep 2018 22:56:24 +0200 Message-ID: <20180902205624.GA23024@ravnborg.org> References: <20180902201712.45765-1-noralf@tronnes.org> <20180902201712.45765-2-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asavdk4.altibox.net (asavdk4.altibox.net [109.247.116.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5B8996E00A for ; Sun, 2 Sep 2018 20:56:28 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20180902201712.45765-2-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: david@lechnology.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SGkgTm9yYWxmLgoKT25seSBuaXRwaWNrcywgSSBoYXZlIG5vdCB0aGUgYmFja2dyb3VuZAp0byBy ZXZpZXcgdGhlIGFjdHVhbCBpbXBsbWVudGF0aW9uLgpTbyBubyB0YWdzIGZyb20gbWUgdG8gcHV0 IG9uIHRoZSBjb21taXQuCgoJU2FtCgo+ICsvKioKPiArICogZHJtX2dlbV9zaG1lbV9jcmVhdGUg LSBBbGxvY2F0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc2l6ZQo+ICsgKiBAZGV2OiBEUk0g ZGV2aWNlCj4gKyAqIEBzaXplOiBTaXplIG9mIHRoZSBvYmplY3QgdG8gYWxsb2NhdGUKPiArICoK PiArICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgc2htZW0gR0VNIG9iamVjdC4gVGhlIGRlZmF1 bHQgY2FjaGUgbW9kZSBpcwo+ICsgKiBEUk1fR0VNX1NITUVNX0JPX0NBQ0hFRC4gVGhlICZkcm1f ZHJpdmVyLT5nZW1fY3JlYXRlX29iamVjdCBjYWxsYmFjayBjYW4gYmUKPiArICogdXNlZCBvdmVy cmlkZSB0aGlzLgp1c2VkIHRvIG92ZXJyaWRlIHRoaXMuCiAgICAgXl4KCj4gKyAqCj4gKyAqIFJl dHVybnM6Cj4gKyAqIEEgc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICogb24gc3VjY2VzcyBv ciBhbiBFUlJfUFRSKCktZW5jb2RlZCBuZWdhdGl2ZQo+ICsgKiBlcnJvciBjb2RlIG9uIGZhaWx1 cmUuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKmRybV9nZW1fc2htZW1f Y3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXplKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtOwo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmo7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwo+ICsK PiArCWlmIChkZXYtPmRyaXZlci0+Z2VtX2NyZWF0ZV9vYmplY3QpCj4gKwkJb2JqID0gZGV2LT5k cml2ZXItPmdlbV9jcmVhdGVfb2JqZWN0KGRldiwgc2l6ZSk7Cj4gKwllbHNlCj4gKwkJb2JqID0g a3phbGxvYyhzaXplb2YoKnNobWVtKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIW9iaikKPiArCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1f b2JqKG9iaik7Cj4gKwo+ICsJaWYgKCFkZXYtPmRyaXZlci0+Z2VtX2NyZWF0ZV9vYmplY3QpCj4g KwkJc2htZW0tPmNhY2hlX21vZGUgPSBEUk1fR0VNX1NITUVNX0JPX0NBQ0hFRDsKPiArCj4gKwly ZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgb2JqLCBzaXplKTsKPiArCWlmIChyZXQpCj4g KwkJZ290byBlcnJfZnJlZTsKU29tZSB1c2VycyBvZiBkcm1fZ2VtX29iamVjdF9pbml0KCkgY2Fs bHMgZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKG9iaikKd2hlbiB0aGVyZSBpcyBhbiBlcnJv ci4gT3RoZXJzIGNhbGwga2ZyZWUoKSBsaWVrIGluIHRoaXMgY2FzZS4KCj4gKwo+ICsJcmV0ID0g ZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBl cnJfcmVsZWFzZTsKPiArCj4gKwltdXRleF9pbml0KCZzaG1lbS0+cGFnZXNfbG9jayk7Cj4gKwlt dXRleF9pbml0KCZzaG1lbS0+dm1hcF9sb2NrKTsKPiArCj4gKwlyZXR1cm4gc2htZW07Cj4gKwo+ ICtlcnJfcmVsZWFzZToKPiArCWRybV9nZW1fb2JqZWN0X3JlbGVhc2Uob2JqKTsKPiArZXJyX2Zy ZWU6Cj4gKwlrZnJlZShzaG1lbSk7Cj4gKwo+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArfQo+ ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX2NyZWF0ZSk7Cj4gKwo+ICsKPiArc3Rh dGljIGludCBkcm1fZ2VtX3NobWVtX2dldF9wYWdlc19sb2NrZWQoc3RydWN0IGRybV9nZW1fc2ht ZW1fb2JqZWN0ICpzaG1lbSkKPiArewo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAm c2htZW0tPmJhc2U7Cj4gKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwo+ICsKPiArCWlmIChzaG1lbS0+ cGFnZXNfdXNlX2NvdW50KysgPiAwKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXBhZ2VzID0gZHJt X2dlbV9nZXRfcGFnZXMob2JqKTsKPiArCWlmIChJU19FUlIocGFnZXMpKSB7Cj4gKwkJRFJNX0RF QlVHX0tNUygiRmFpbGVkIHRvIGdldCBwYWdlcyAoJWxkKVxuIiwgUFRSX0VSUihwYWdlcykpOwo+ ICsJCXNobWVtLT5wYWdlc191c2VfY291bnQgPSAwOwo+ICsJCXJldHVybiBQVFJfRVJSKHBhZ2Vz KTsKPiArCX0KPiArCj4gKwlzaG1lbS0+cGFnZXMgPSBwYWdlczsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArLyoKPiArICogZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMgLSBBbGxvY2F0ZSBi YWNraW5nIHBhZ2VzIGZvciBhIHNobWVtIEdFTSBvYmplY3QKPiArICogQHNobWVtOiBzaG1lbSBH RU0gb2JqZWN0Cj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IGJhY2tp bmcgcGFnZXMgZXhpc3RzIGZvciB0aGUgc2htZW0gR0VNIG9iamVjdAo+ICsgKiBhbmQgaW5jcmVh c2VzIHRoZSB1c2UgY291bnQuCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIDAgb24gc3VjY2Vz cyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiArICovCj4gK2ludCBkcm1f Z2VtX3NobWVtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQo+ ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgm c2htZW0tPnBhZ2VzX2xvY2spOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsJcmV0 ID0gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXNfbG9ja2VkKHNobWVtKTsKPiArCW11dGV4X3VubG9j aygmc2htZW0tPnBhZ2VzX2xvY2spOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArRVhQT1JU X1NZTUJPTChkcm1fZ2VtX3NobWVtX2dldF9wYWdlcyk7Cj4gKwoKVGhlIGZ1bmN0aW9ucyBpcyBu YW1lZCAqX3VubG9ja2VkLCBidXQgY2FsbGVkIHdpdGggYSBsb2NrIGhlbGQuCkluY29uc2lzdGVu dD8KCj4gK3N0YXRpYyB2b2lkIGRybV9nZW1fc2htZW1fcHV0X3BhZ2VzX3VubG9ja2VkKHN0cnVj dCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqID0gJnNobWVtLT5iYXNlOwo+ICsKPiArCWlmIChXQVJOX09OX09OQ0UoIXNobWVt LT5wYWdlc191c2VfY291bnQpKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoLS1zaG1lbS0+cGFn ZXNfdXNlX2NvdW50ID4gMCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZHJtX2dlbV9wdXRfcGFnZXMo b2JqLCBzaG1lbS0+cGFnZXMsCj4gKwkJCSAgc2htZW0tPnBhZ2VzX21hcmtfZGlydHlfb25fcHV0 LAo+ICsJCQkgIHNobWVtLT5wYWdlc19tYXJrX2FjY2Vzc2VkX29uX3B1dCk7Cj4gKwlzaG1lbS0+ cGFnZXMgPSBOVUxMOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBkcm1fZ2VtX3NobWVtX3B1dF9wYWdl cyAtIERlY3JlYXNlIHVzZSBjb3VudCBvbiB0aGUgYmFja2luZyBwYWdlcyBmb3IgYSBzaG1lbSBH RU0gb2JqZWN0Cj4gKyAqIEBzaG1lbTogc2htZW0gR0VNIG9iamVjdAo+ICsgKgo+ICsgKiBUaGlz IGZ1bmN0aW9uIGRlY3JlYXNlcyB0aGUgdXNlIGNvdW50IGFuZCBwdXRzIHRoZSBiYWNraW5nIHBh Z2VzIHdoZW4gdXNlIGRyb3BzIHRvIHplcm8uCj4gKyAqLwo+ICt2b2lkIGRybV9nZW1fc2htZW1f cHV0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pCj4gK3sKPiArCW11 dGV4X2xvY2soJnNobWVtLT5wYWdlc19sb2NrKTsKPiArCWRybV9nZW1fc2htZW1fcHV0X3BhZ2Vz X3VubG9ja2VkKHNobWVtKTsKPiArCW11dGV4X3VubG9jaygmc2htZW0tPnBhZ2VzX2xvY2spOwo+ ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMpOwo+ICsKPiArc3Rh dGljIGludCBkcm1fZ2VtX3NobWVtX3ZtYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0pCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJnNobWVt LT5iYXNlOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoc2htZW0tPnZtYXBfdXNlX2NvdW50Kysg PiAwKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldCA9IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2Vz KHNobWVtKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfemVyb191c2U7Cj4gKwo+ICsJaWYg KG9iai0+aW1wb3J0X2F0dGFjaCkgewo+ICsJCXNobWVtLT52YWRkciA9IGRtYV9idWZfdm1hcChv YmotPmltcG9ydF9hdHRhY2gtPmRtYWJ1Zik7Cj4gKwl9IGVsc2Ugewo+ICsJCXBncHJvdF90IHBy b3Q7Cj4gKwo+ICsJCXN3aXRjaCAoc2htZW0tPmNhY2hlX21vZGUpIHsKPiArCQljYXNlIERSTV9H RU1fU0hNRU1fQk9fVU5LTk9XTjoKTm8gcHJpbnRvdXQgdG8gaGVscCB0aGUgY29kZXIgdGhhdCBk aWQgbm90IHNldCB0aGlzPwoKPiArCQkJcmV0ID0gLUVJTlZBTDsKPiArCQkJZ290byBlcnJfcHV0 X3BhZ2VzOwo+ICsKPiArCQljYXNlIERSTV9HRU1fU0hNRU1fQk9fV1JJVEVDT01CSU5FRDoKPiAr CQkJcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUoUEFHRV9LRVJORUwpOwo+ICsJCQlicmVhazsK PiArCj4gKwkJY2FzZSBEUk1fR0VNX1NITUVNX0JPX1VOQ0FDSEVEOgo+ICsJCQlwcm90ID0gcGdw cm90X25vbmNhY2hlZChQQUdFX0tFUk5FTCk7Cj4gKwkJCWJyZWFrOwo+ICsKPiArCQljYXNlIERS TV9HRU1fU0hNRU1fQk9fQ0FDSEVEOgo+ICsJCQlwcm90ID0gUEFHRV9LRVJORUw7Cj4gKwkJCWJy ZWFrOwo+ICsJCX0KPiArCj4gKwkJc2htZW0tPnZhZGRyID0gdm1hcChzaG1lbS0+cGFnZXMsIG9i ai0+c2l6ZSA+PiBQQUdFX1NISUZULCBWTV9NQVAsIHByb3QpOwo+ICsJfQo+ICsKPiArCWlmICgh c2htZW0tPnZhZGRyKSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygiRmFpbGVkIHRvIHZtYXAgcGFnZXNc biIpOwo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfcHV0X3BhZ2VzOwo+ICsJfQo+ ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX3B1dF9wYWdlczoKPiArCWRybV9nZW1fc2htZW1f cHV0X3BhZ2VzKHNobWVtKTsKPiArZXJyX3plcm9fdXNlOgo+ICsJc2htZW0tPnZtYXBfdXNlX2Nv dW50ID0gMDsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBkcm1fZ2Vt X3NobWVtX3ZtYXAgLSBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgZm9yIGEgc2htZW0gR0VNIG9i amVjdAo+ICsgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QKPiArICoKPiArICogVGhpcyBmdW5j dGlvbiBtYWtlcyBzdXJlIHRoYXQgYSB2aXJ0dWFsIGFkZHJlc3MgZXhpc3RzIGZvciB0aGUgYnVm ZmVyIGJhY2tpbmcKPiArICogdGhlIHNobWVtIEdFTSBvYmplY3QuCj4gKyAqCj4gKyAqIFJldHVy bnM6Cj4gKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVy ZS4KPiArICovCj4gK2ludCBkcm1fZ2VtX3NobWVtX3ZtYXAoc3RydWN0IGRybV9nZW1fc2htZW1f b2JqZWN0ICpzaG1lbSkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBtdXRleF9sb2Nr X2ludGVycnVwdGlibGUoJnNobWVtLT52bWFwX2xvY2spOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1 cm4gcmV0Owo+ICsJcmV0ID0gZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChzaG1lbSk7Cj4gKwlt dXRleF91bmxvY2soJnNobWVtLT52bWFwX2xvY2spOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30K PiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX3ZtYXApOwo+ICsKPiArc3RhdGljIHZvaWQg ZHJtX2dlbV9zaG1lbV92dW5tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAq c2htZW0pCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNl Owo+ICsKPiArCWlmIChXQVJOX09OX09OQ0UoIXNobWVtLT52bWFwX3VzZV9jb3VudCkpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCWlmICgtLXNobWVtLT52bWFwX3VzZV9jb3VudCA+IDApCj4gKwkJcmV0 dXJuOwo+ICsKPiArCWlmIChvYmotPmltcG9ydF9hdHRhY2gpCj4gKwkJZG1hX2J1Zl92dW5tYXAo b2JqLT5pbXBvcnRfYXR0YWNoLT5kbWFidWYsIHNobWVtLT52YWRkcik7Cj4gKwllbHNlCj4gKwkJ dnVubWFwKHNobWVtLT52YWRkcik7Cj4gKwo+ICsJc2htZW0tPnZhZGRyID0gTlVMTDsKPiArCWRy bV9nZW1fc2htZW1fcHV0X3BhZ2VzKHNobWVtKTsKPiArfQo+ICsKPiArLyoKPiArICogZHJtX2dl bV9zaG1lbV92dW5tYXAgLSBVbm1hcCBhIHZpcnR1YWwgbWFwcGluZyBmbyBhIHNobWVtIEdFTSBv YmplY3QKPiArICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0Cj4gKyAqCj4gKyAqIFRoaXMgZnVu Y3Rpb24gcmVtb3ZlcyB0aGUgdmlydHVhbCBhZGRyZXNzIHdoZW4gdXNlIGNvdW50IGRyb3BzIHRv IHplcm8uCj4gKyAqLwo+ICt2b2lkIGRybV9nZW1fc2htZW1fdnVubWFwKHN0cnVjdCBkcm1fZ2Vt X3NobWVtX29iamVjdCAqc2htZW0pCj4gK3sKPiArCW11dGV4X2xvY2soJnNobWVtLT52bWFwX2xv Y2spOwo+ICsJZHJtX2dlbV9zaG1lbV92dW5tYXBfbG9ja2VkKHNobWVtKTsKPiArCW11dGV4X3Vu bG9jaygmc2htZW0tPnZtYXBfbG9jayk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3No bWVtX3Z1bm1hcCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICoK PiArZHJtX2dlbV9zaG1lbV9jcmVhdGVfd2l0aF9oYW5kbGUoc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYsCj4gKwkJCQkgc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCj4gKwkJ CQkgdWludDMyX3QgKmhhbmRsZSkKPiArewo+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0 ICpzaG1lbTsKPiArCWludCByZXQ7Cj4gKwo+ICsJc2htZW0gPSBkcm1fZ2VtX3NobWVtX2NyZWF0 ZShkZXYsIHNpemUpOwo+ICsJaWYgKElTX0VSUihzaG1lbSkpCj4gKwkJcmV0dXJuIHNobWVtOwo+ ICsKPiArCS8qCj4gKwkgKiBBbGxvY2F0ZSBhbiBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9i aiBpcyByZWdpc3RlcmVkCj4gKwkgKiBhbmQgaGFuZGxlIGhhcyB0aGUgaWQgd2hhdCB1c2VyIGNh biBzZWUuCj4gKwkgKi8KPiArCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYs ICZzaG1lbS0+YmFzZSwgaGFuZGxlKTsKPiArCS8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2Nh dGUgLSBoYW5kbGUgaG9sZHMgaXQgbm93LiAqLwo+ICsJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9j a2VkKCZzaG1lbS0+YmFzZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7 Cj4gKwo+ICsJcmV0dXJuIHNobWVtOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJtX2dlbV9zaG1l bV9kdW1iX2NyZWF0ZSAtIENyZWF0ZSBhIGR1bWIgc2htZW0gYnVmZmVyIG9iamVjdAo+ICsgKiBA ZmlsZTogRFJNIGZpbGUgc3RydWN0dXJlIHRvIGNyZWF0ZSB0aGUgZHVtYiBidWZmZXIgZm9yCj4g KyAqIEBkZXY6IERSTSBkZXZpY2UKPiArICogQGFyZ3M6IElPQ1RMIGRhdGEKPiArICoKPiArICog VGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgcGl0Y2ggb2YgdGhlIGR1bWIgYnVmZmVyIGFuZCBy b3VuZHMgaXQgdXAgdG8gYW4KPiArICogaW50ZWdlciBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVs LiBEcml2ZXJzIGZvciBoYXJkd2FyZSB0aGF0IGRvZXNuJ3QgaGF2ZQo+ICsgKiBhbnkgYWRkaXRp b25hbCByZXN0cmljdGlvbnMgb24gdGhlIHBpdGNoIGNhbiBkaXJlY3RseSB1c2UgdGhpcyBmdW5j dGlvbiBhcwo+ICsgKiB0aGVpciAmZHJtX2RyaXZlci5kdW1iX2NyZWF0ZSBjYWxsYmFjay4KPiAr ICoKPiArICogRm9yIGhhcmR3YXJlIHdpdGggYWRkaXRpb25hbCByZXN0cmljdGlvbnMsIGRyaXZl cnMgY2FuIGFkanVzdCB0aGUgZmllbGRzCj4gKyAqIHNldCB1cCBieSB1c2Vyc3BhY2UgYmVmb3Jl IGNhbGxpbmcgaW50byB0aGlzIGZ1bmN0aW9uLgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiAw IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ ICtpbnQgZHJtX2dlbV9zaG1lbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCSAgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVf ZHVtYiAqYXJncykKPiArewo+ICsJdTMyIG1pbl9waXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53 aWR0aCAqIGFyZ3MtPmJwcCwgOCk7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNo bWVtOwo+ICsKPiArCWlmICghYXJncy0+cGl0Y2ggfHwgIWFyZ3MtPnNpemUpIHsKPiArCQlhcmdz LT5waXRjaCA9IG1pbl9waXRjaDsKPiArCQlhcmdzLT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdz LT5oZWlnaHQ7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIGVuc3VyZSBzYW5lIG1pbmltdW0gdmFsdWVz ICovCj4gKwkJaWYgKGFyZ3MtPnBpdGNoIDwgbWluX3BpdGNoKQo+ICsJCQlhcmdzLT5waXRjaCA9 IG1pbl9waXRjaDsKPiArCQlpZiAoYXJncy0+c2l6ZSA8IGFyZ3MtPnBpdGNoICogYXJncy0+aGVp Z2h0KQo+ICsJCQlhcmdzLT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7Cj4gKwl9 Cj4gKwo+ICsJc2htZW0gPSBkcm1fZ2VtX3NobWVtX2NyZWF0ZV93aXRoX2hhbmRsZShmaWxlLCBk ZXYsIGFyZ3MtPnNpemUsICZhcmdzLT5oYW5kbGUpOwo+ICsKPiArCXJldHVybiBQVFJfRVJSX09S X1pFUk8oc2htZW0pOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fZHVt Yl9jcmVhdGUpOwo+ICsKPiArc3RhdGljIHZtX2ZhdWx0X3QgZHJtX2dlbV9zaG1lbV9mYXVsdChz dHJ1Y3Qgdm1fZmF1bHQgKnZtZikKPiArewo+ICsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEg PSB2bWYtPnZtYTsKPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2 YXRlX2RhdGE7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJt X2dlbV9zaG1lbV9vYmoob2JqKTsKPiArCS8qIFdlIGRvbid0IHVzZSB2bWYtPnBnb2ZmIHNpbmNl IHRoYXQgaGFzIHRoZSBmYWtlIG9mZnNldDogKi8KPiArCXBnb2ZmX3QgcGdvZmYgPSAodm1mLT5h ZGRyZXNzIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVDsKPiArCWxvZmZfdCBudW1fcGFn ZXMgPSBvYmotPnNpemUgPj4gUEFHRV9TSElGVDsKPiArCXN0cnVjdCBwYWdlICpwYWdlOwo+ICsK PiArCWlmIChwZ29mZiA+IG51bV9wYWdlcyB8fCBXQVJOX09OX09OQ0UoIXNobWVtLT5wYWdlcykp Cj4gKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKPiArCj4gKwlwYWdlID0gc2htZW0tPnBhZ2Vz W3Bnb2ZmXTsKPiArCj4gKwlyZXR1cm4gdm1mX2luc2VydF9wYWdlKHZtYSwgdm1mLT5hZGRyZXNz LCBwYWdlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHJtX2dlbV9zaG1lbV92bV9jbG9zZShz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiArewo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmogPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKPiArCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopOwo+ICsKPiArCWRybV9nZW1f c2htZW1fcHV0X3BhZ2VzKHNobWVtKTsKPiArCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKPiArfQo+ ICsKPiArY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV9nZW1fc2htZW1fdm1f b3BzID0gewo+ICsJLmZhdWx0ID0gZHJtX2dlbV9zaG1lbV9mYXVsdCwKPiArCS5vcGVuID0gZHJt X2dlbV92bV9vcGVuLAo+ICsJLmNsb3NlID0gZHJtX2dlbV9zaG1lbV92bV9jbG9zZSwKPiArfTsK PiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV92bV9vcHMpOwo+ICsKPiArc3RhdGlj IGludCBkcm1fZ2VtX3NobWVtX21tYXBfb2JqKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAq c2htZW0sCj4gKwkJCQkgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+ICt7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCXJldCA9IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHNobWVtKTsKPiArCWlm IChyZXQpCj4gKwkJZ290byBlcnJfY2xvc2U7Cj4gKwo+ICsJLyogVk1fUEZOTUFQIHdhcyBzZXQg YnkgZHJtX2dlbV9tbWFwKCkgKi8KPiArCXZtYS0+dm1fZmxhZ3MgJj0gflZNX1BGTk1BUDsKPiAr CXZtYS0+dm1fZmxhZ3MgfD0gVk1fTUlYRURNQVA7Cj4gKwo+ICsJc3dpdGNoIChzaG1lbS0+Y2Fj aGVfbW9kZSkgewo+ICsJY2FzZSBEUk1fR0VNX1NITUVNX0JPX1VOS05PV046Cj4gKwkJcmV0ID0g LUVJTlZBTDsKUHJpbnQgdG8gaGVscCB0aGUgcHJvZ3JhbW1lcj8KCj4gKwkJZ290byBlcnJfcHV0 X3BhZ2VzOwo+ICsKPiArCWNhc2UgRFJNX0dFTV9TSE1FTV9CT19XUklURUNPTUJJTkVEOgo+ICsJ CXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90 KHZtYS0+dm1fZmxhZ3MpKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIERSTV9HRU1fU0hNRU1f Qk9fVU5DQUNIRUQ6Cj4gKwkJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZt X2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncykpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2Ug RFJNX0dFTV9TSE1FTV9CT19DQUNIRUQ6Cj4gKwkJLyoKPiArCQkgKiBTaHVudCBvZmYgY2FjaGVk IG9ianMgdG8gc2htZW0gZmlsZSBzbyB0aGV5IGhhdmUgdGhlaXIgb3duCj4gKwkJICogYWRkcmVz c19zcGFjZSAoc28gdW5tYXBfbWFwcGluZ19yYW5nZSBkb2VzIHdoYXQgd2Ugd2FudCwKPiArCQkg KiBpbiBwYXJ0aWN1bGFyIGluIHRoZSBjYXNlIG9mIG1tYXAnZCBkbWFidWZzKQo+ICsJCSAqLwo+ ICsJCWZwdXQodm1hLT52bV9maWxlKTsKPiArCQlnZXRfZmlsZShzaG1lbS0+YmFzZS5maWxwKTsK PiArCQl2bWEtPnZtX3Bnb2ZmID0gMDsKPiArCQl2bWEtPnZtX2ZpbGUgID0gc2htZW0tPmJhc2Uu ZmlscDsKPiArCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9m bGFncyk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfcHV0 X3BhZ2VzOgo+ICsJZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMoc2htZW0pOwo+ICtlcnJfY2xvc2U6 Cj4gKwlkcm1fZ2VtX3ZtX2Nsb3NlKHZtYSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=