From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 1/5] dma-buf: add dynamic DMA-buf handling v14 Date: Tue, 5 Nov 2019 11:20:45 +0100 Message-ID: <20191105102045.GC10326@phenom.ffwll.local> References: <20191029104049.9011-1-christian.koenig@amd.com> <20191029104049.9011-2-christian.koenig@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5AE426E9B1 for ; Tue, 5 Nov 2019 10:20:49 +0000 (UTC) Received: by mail-wm1-x344.google.com with SMTP id v3so16131124wmh.1 for ; Tue, 05 Nov 2019 02:20:49 -0800 (PST) Content-Disposition: inline In-Reply-To: <20191029104049.9011-2-christian.koenig@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Christian =?iso-8859-1?Q?K=F6nig?= Cc: linaro-mm-sig@lists.linaro.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBPY3QgMjksIDIwMTkgYXQgMTE6NDA6NDVBTSArMDEwMCwgQ2hyaXN0aWFuIEvDtm5p ZyB3cm90ZToKPiBPbiB0aGUgZXhwb3J0ZXIgc2lkZSB3ZSBhZGQgb3B0aW9uYWwgZXhwbGljaXQg cGlubmluZyBjYWxsYmFja3MuIFdoaWNoIGFyZQo+IGNhbGxlZCB3aGVuIHRoZSBpbXBvcnRlciBk b2Vzbid0IGltcGxlbWVudCBkeW5hbWljIGhhbmRsaW5nLCBtb3ZlIG5vdGlmaWNhdGlvbgo+IG9y IG5lZWQgdGhlIERNQS1idWYgbG9ja2VkIGluIHBsYWNlIGZvciBpdHMgdXNlIGNhc2UuCj4gCj4g T24gdGhlIGltcG9ydGVyIHNpZGUgd2UgYWRkIGFuIG9wdGlvbmFsIG1vdmVfbm90aWZ5IGNhbGxi YWNrLiBUaGlzIGNhbGxiYWNrIGlzCj4gdXNlZCBieSB0aGUgZXhwb3J0ZXIgdG8gaW5mb3JtIHRo ZSBpbXBvcnRlcnMgdGhhdCB0aGVpciBtYXBwaW5ncyBzaG91bGQgYmUKPiBkZXN0cm95ZWQgYXMg c29vbiBhcyBwb3NzaWJsZS4KPiAKPiBUaGlzIGFsbG93cyB0aGUgZXhwb3J0ZXIgdG8gcHJvdmlk ZSB0aGUgbWFwcGluZ3Mgd2l0aG91dCB0aGUgbmVlZCB0byBwaW4KPiB0aGUgYmFja2luZyBzdG9y ZS4KPiAKPiB2MjogZG9uJ3QgdHJ5IHRvIGludmFsaWRhdGUgbWFwcGluZ3Mgd2hlbiB0aGUgY2Fs bGJhY2sgaXMgTlVMTCwKPiAgICAgbG9jayB0aGUgcmVzZXJ2YXRpb24gb2JqIHdoaWxlIHVzaW5n IHRoZSBhdHRhY2htZW50cywKPiAgICAgYWRkIGhlbHBlciB0byBzZXQgdGhlIGNhbGxiYWNrCj4g djM6IG1vdmUgZmxhZyBmb3IgaW52YWxpZGF0aW9uIHN1cHBvcnQgaW50byB0aGUgRE1BLWJ1ZiwK PiAgICAgdXNlIG5ldyBhdHRhY2hfaW5mbyBzdHJ1Y3R1cmUgdG8gc2V0IHRoZSBjYWxsYmFjawo+ IHY0OiB1c2UgaW1wb3J0ZXJfcHJpdiBmaWVsZCBpbnN0ZWFkIG9mIG1hbmdsaW5nIGV4cG9ydGVy IHByaXYuCj4gdjU6IGRyb3AgaW52YWxpZGF0aW9uX3N1cHBvcnRlZCBmbGFnCj4gdjY6IHNxdWFz aCB0b2dldGhlciB3aXRoIHBpbi91bnBpbiBjaGFuZ2VzCj4gdjc6IHBpbi91bnBpbiB0YWtlcyBh biBhdHRhY2htZW50IG5vdwo+IHY4OiBudWtlIGRtYV9idWZfYXR0YWNobWVudF8obWFwfHVubWFw KV9sb2NrZWQsCj4gICAgIGV2ZXJ5dGhpbmcgaXMgbm93IGhhbmRsZWQgYmFja3dhcmQgY29tcGF0 aWJsZQo+IHY5OiBhbHdheXMgY2FjaGUgd2hlbiBleHBvcnQvaW1wb3J0ZXIgZG9uJ3QgYWdyZWUg b24gZHluYW1pYyBoYW5kbGluZwo+IHYxMDogbWluaW1hbCBzdHlsZSBjbGVhbnVwCj4gdjExOiBk cm9wIGF1dG9tYXRpY2FsbHkgcmUtZW50cnkgYXZvaWRhbmNlCj4gdjEyOiByZW5hbWUgY2FsbGJh Y2sgdG8gbW92ZV9ub3RpZnkKPiB2MTM6IGFkZCBtaWdodF9sb2NrIGluIGFwcHJvcHJpYXRlIHBs YWNlcwo+IHYxNDogcmViYXNlIG9uIHNlcGFyYXRlZCBsb2NraW5nIGNoYW5nZQo+IAo+IFNpZ25l ZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KCkJ1 bmNoIG9mIG5pdHBpY2tzL3NhZmV0eSBjaGVjayBjb21tZW50cyBoZXJlLCBJJ2xsIHBvc3QgdGhl IGJpZyBxdWVzdGlvbgpzdHVmZiBvbiB0aGUgY292ZXIgbGV0dGVyLgoKPiAtLS0KPiAgZHJpdmVy cy9kbWEtYnVmL2RtYS1idWYuYyAgICAgICAgICAgICAgICAgICB8IDEwNiArKysrKysrKysrKysr KysrKystLQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jIHwg ICA2ICstCj4gIGluY2x1ZGUvbGludXgvZG1hLWJ1Zi5oICAgICAgICAgICAgICAgICAgICAgfCAg NzggKysrKysrKysrKysrLS0KPiAgMyBmaWxlcyBjaGFuZ2VkLCAxNzAgaW5zZXJ0aW9ucygrKSwg MjAgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVm LmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4gaW5kZXggZDM3N2I0Y2E2NmJmLi5jZTI5 M2NlZTc2ZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwo+ICsrKyBi L2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPiBAQCAtNTI5LDYgKzUyOSwxMCBAQCBzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8g KmV4cF9pbmZvKQo+ICAJCSAgICBleHBfaW5mby0+b3BzLT5keW5hbWljX21hcHBpbmcpKQo+ICAJ CXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICAKPiArCWlmIChXQVJOX09OKCFleHBfaW5mby0+ b3BzLT5keW5hbWljX21hcHBpbmcgJiYKPiArCQkgICAgKGV4cF9pbmZvLT5vcHMtPnBpbiB8fCBl eHBfaW5mby0+b3BzLT51bnBpbikpKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwoKSW1v IG1ha2UgdGhpcyBzdHJvbmdlciwgaGF2ZSBhIGR5bmFtaWMgbWFwcGluZyBpZmYgdGhlcmUncyBi b3RoIGEgcGluIGFuZAp1bnBpbiBmdW5jdGlvbi4gT3RoZXJ3aXNlIHRoaXMgZG9lc24ndCBtYWtl IGEgbG90IG9mIHNlbnNlIHRvIG1lLgoKPiArCj4gIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGV4cF9p bmZvLT5vd25lcikpCj4gIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Cj4gIAo+IEBAIC02NTMs NyArNjU3LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9wdXQpOwo+ICAgKiBjYWxscyBh dHRhY2goKSBvZiBkbWFfYnVmX29wcyB0byBhbGxvdyBkZXZpY2Utc3BlY2lmaWMgYXR0YWNoIGZ1 bmN0aW9uYWxpdHkKPiAgICogQGRtYWJ1ZjoJCVtpbl0JYnVmZmVyIHRvIGF0dGFjaCBkZXZpY2Ug dG8uCj4gICAqIEBkZXY6CQlbaW5dCWRldmljZSB0byBiZSBhdHRhY2hlZC4KPiAtICogQGR5bmFt aWNfbWFwcGluZzoJW2luXQljYWxsaW5nIGNvbnZlbnRpb24gZm9yIG1hcC91bm1hcAo+ICsgKiBA aW1wb3J0ZXJfb3BzCVtpbl0JaW1wb3J0ZXIgb3BlcmF0aW9ucyBmb3IgdGhlIGF0dGFjaG1lbnQK PiArICogQGltcG9ydGVyX3ByaXYJW2luXQlpbXBvcnRlciBwcml2YXRlIHBvaW50ZXIgZm9yIHRo ZSBhdHRhY2htZW50Cj4gICAqCj4gICAqIFJldHVybnMgc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCBwb2ludGVyIGZvciB0aGlzIGF0dGFjaG1lbnQuIEF0dGFjaG1lbnRzCj4gICAqIG11c3QgYmUg Y2xlYW5lZCB1cCBieSBjYWxsaW5nIGRtYV9idWZfZGV0YWNoKCkuCj4gQEAgLTY2OSw3ICs2NzQs OCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3B1dCk7Cj4gICAqLwo+ICBzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50ICoKPiAgZG1hX2J1Zl9keW5hbWljX2F0dGFjaChzdHJ1Y3QgZG1hX2J1 ZiAqZG1hYnVmLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gLQkJICAgICAgIGJvb2wgZHluYW1pY19t YXBwaW5nKQo+ICsJCSAgICAgICBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzICppbXBv cnRlcl9vcHMsCj4gKwkJICAgICAgIHZvaWQgKmltcG9ydGVyX3ByaXYpCj4gIHsKPiAgCXN0cnVj dCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDsKPiAgCWludCByZXQ7Cj4gQEAgLTY4Myw3ICs2 ODksOCBAQCBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0 cnVjdCBkZXZpY2UgKmRldiwKPiAgCj4gIAlhdHRhY2gtPmRldiA9IGRldjsKPiAgCWF0dGFjaC0+ ZG1hYnVmID0gZG1hYnVmOwo+IC0JYXR0YWNoLT5keW5hbWljX21hcHBpbmcgPSBkeW5hbWljX21h cHBpbmc7Cj4gKwlhdHRhY2gtPmltcG9ydGVyX29wcyA9IGltcG9ydGVyX29wczsKPiArCWF0dGFj aC0+aW1wb3J0ZXJfcHJpdiA9IGltcG9ydGVyX3ByaXY7Cj4gIAo+ICAJaWYgKGRtYWJ1Zi0+b3Bz LT5hdHRhY2gpIHsKPiAgCQlyZXQgPSBkbWFidWYtPm9wcy0+YXR0YWNoKGRtYWJ1ZiwgYXR0YWNo KTsKPiBAQCAtNzAyLDE1ICs3MDksMTkgQEAgZG1hX2J1Zl9keW5hbWljX2F0dGFjaChzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gIAkgICAgZG1hX2J1Zl9pc19k eW5hbWljKGRtYWJ1ZikpIHsKPiAgCQlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKPiAgCj4gLQkJaWYg KGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4gKwkJaWYgKGRtYV9idWZfaXNf ZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpIHsKPiAgCQkJZG1hX3Jlc3ZfbG9jayhhdHRhY2gtPmRt YWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gKwkJCXJldCA9IGRtYV9idWZfcGluKGF0dGFjaCk7Cj4gKwkJ CWlmIChyZXQpCj4gKwkJCQlnb3RvIGVycl91bmxvY2s7Cj4gKwkJfQo+ICAKPiAgCQlzZ3QgPSBk bWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0YWNoLCBETUFfQklESVJFQ1RJT05BTCk7Cj4gIAkJ aWYgKCFzZ3QpCj4gIAkJCXNndCA9IEVSUl9QVFIoLUVOT01FTSk7Cj4gIAkJaWYgKElTX0VSUihz Z3QpKSB7Cj4gIAkJCXJldCA9IFBUUl9FUlIoc2d0KTsKPiAtCQkJZ290byBlcnJfdW5sb2NrOwo+ ICsJCQlnb3RvIGVycl91bnBpbjsKPiAgCQl9Cj4gIAkJaWYgKGRtYV9idWZfaXNfZHluYW1pYyhh dHRhY2gtPmRtYWJ1ZikpCj4gIAkJCWRtYV9yZXN2X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVz dik7Cj4gQEAgLTcyNCw2ICs3MzUsMTAgQEAgZG1hX2J1Zl9keW5hbWljX2F0dGFjaChzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gIAlrZnJlZShhdHRhY2gpOwo+ ICAJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgCj4gK2Vycl91bnBpbjoKPiArCWlmIChkbWFfYnVm X2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQo+ICsJCWRtYV9idWZfdW5waW4oYXR0YWNoKTsK PiArCj4gIGVycl91bmxvY2s6Cj4gIAlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1h YnVmKSkKPiAgCQlkbWFfcmVzdl91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+IEBAIC03 NDQsNyArNzU5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9keW5hbWljX2F0dGFjaCk7 Cj4gIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFf YnVmICpkbWFidWYsCj4gIAkJCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIHsKPiAtCXJldHVy biBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKGRtYWJ1ZiwgZGV2LCBmYWxzZSk7Cj4gKwlyZXR1cm4g ZG1hX2J1Zl9keW5hbWljX2F0dGFjaChkbWFidWYsIGRldiwgTlVMTCwgTlVMTCk7Cj4gIH0KPiAg RVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9hdHRhY2gpOwo+ICAKPiBAQCAtNzY3LDggKzc4Miwx MCBAQCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBk bWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKPiAgCj4gIAkJZG1hYnVmLT5vcHMtPnVubWFwX2Rt YV9idWYoYXR0YWNoLCBhdHRhY2gtPnNndCwgYXR0YWNoLT5kaXIpOwo+ICAKPiAtCQlpZiAoZG1h X2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkKPiArCQlpZiAoZG1hX2J1Zl9pc19keW5h bWljKGF0dGFjaC0+ZG1hYnVmKSkgewo+ICsJCQlkbWFfYnVmX3VucGluKGF0dGFjaCk7Cj4gIAkJ CWRtYV9yZXN2X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gKwkJfQo+ICAJfQo+ICAK PiAgCWRtYV9yZXN2X2xvY2soZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiBAQCAtNzgxLDYgKzc5OCw0 NCBAQCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBk bWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTChkbWFf YnVmX2RldGFjaCk7Cj4gIAo+ICsvKioKPiArICogZG1hX2J1Zl9waW4gLSBMb2NrIGRvd24gdGhl IERNQS1idWYKPiArICoKPiArICogQGF0dGFjaDoJW2luXQlhdHRhY2htZW50IHdoaWNoIHNob3Vs ZCBiZSBwaW5uZWQKPiArICoKPiArICogUmV0dXJuczoKPiArICogMCBvbiBzdWNjZXNzLCBuZWdh dGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQgZG1hX2J1Zl9waW4oc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQo+ICt7Cj4gKwlzdHJ1Y3QgZG1hX2J1ZiAq ZG1hYnVmID0gYXR0YWNoLT5kbWFidWY7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlkbWFfcmVz dl9hc3NlcnRfaGVsZChkbWFidWYtPnJlc3YpOwo+ICsKPiArCWlmIChkbWFidWYtPm9wcy0+cGlu KQo+ICsJCXJldCA9IGRtYWJ1Zi0+b3BzLT5waW4oYXR0YWNoKTsKPiArCj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfcGluKTsKPiArCj4gKy8qKgo+ICsg KiBkbWFfYnVmX3VucGluIC0gUmVtb3ZlIGxvY2sgZnJvbSBETUEtYnVmCj4gKyAqCj4gKyAqIEBh dHRhY2g6CVtpbl0JYXR0YWNobWVudCB3aGljaCBzaG91bGQgYmUgdW5waW5uZWQKPiArICovCj4g K3ZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCj4g K3sKPiArCXN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBhdHRhY2gtPmRtYWJ1ZjsKPiArCj4gKwlk bWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtPnJlc3YpOwo+ICsKPiArCWlmIChkbWFidWYtPm9w cy0+dW5waW4pCj4gKwkJZG1hYnVmLT5vcHMtPnVucGluKGF0dGFjaCk7Cj4gK30KPiArRVhQT1JU X1NZTUJPTF9HUEwoZG1hX2J1Zl91bnBpbik7Cj4gKwo+ICAvKioKPiAgICogZG1hX2J1Zl9tYXBf YXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2ht ZW50Owo+ICAgKiBtYXBwZWQgaW50byBfZGV2aWNlXyBhZGRyZXNzIHNwYWNlLiBJcyBhIHdyYXBw ZXIgZm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhlCj4gQEAgLTgwMCw2ICs4NTUsNyBAQCBzdHJ1Y3Qg c2dfdGFibGUgKmRtYV9idWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoLAo+ICAJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKPiAg ewo+ICAJc3RydWN0IHNnX3RhYmxlICpzZ190YWJsZTsKPiArCWludCByOwo+ICAKPiAgCW1pZ2h0 X3NsZWVwKCk7Cj4gIAo+IEBAIC04MjEsMTMgKzg3NywyMyBAQCBzdHJ1Y3Qgc2dfdGFibGUgKmRt YV9idWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ ICAJCXJldHVybiBhdHRhY2gtPnNndDsKPiAgCX0KPiAgCj4gLQlpZiAoZG1hX2J1Zl9pc19keW5h bWljKGF0dGFjaC0+ZG1hYnVmKSkKPiArCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5k bWFidWYpKSB7Cj4gIAkJZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3Yp Owo+ICsJCWlmICghYXR0YWNoLT5pbXBvcnRlcl9vcHMtPm1vdmVfbm90aWZ5KSB7CgpJbW8ganVz dCByZXF1aXJlIC0+bW92ZV9ub3RpZnkgZm9yIGltcG9ydGVycyB0aGF0IGdpdmUgeW91IGFuIG9w cwpmdW5jdGlvbi4gRG9lc24ndCByZWFsbHkgbWFrZSBzZW5zZSB0byBhbGxvdyBkeW5hbWljIHdp dGhvdXQgc3VwcG9ydAotPm1vdmVfbm90aWZ5LgoKPiArCQkJciA9IGRtYV9idWZfcGluKGF0dGFj aCk7Cj4gKwkJCWlmIChyKQo+ICsJCQkJcmV0dXJuIEVSUl9QVFIocik7Cj4gKwkJfQo+ICsJfQo+ ICAKPiAgCXNnX3RhYmxlID0gYXR0YWNoLT5kbWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0YWNo LCBkaXJlY3Rpb24pOwo+ICAJaWYgKCFzZ190YWJsZSkKPiAgCQlzZ190YWJsZSA9IEVSUl9QVFIo LUVOT01FTSk7Cj4gIAo+ICsJaWYgKElTX0VSUihzZ190YWJsZSkgJiYgZG1hX2J1Zl9pc19keW5h bWljKGF0dGFjaC0+ZG1hYnVmKSAmJgo+ICsJICAgICFhdHRhY2gtPmltcG9ydGVyX29wcy0+bW92 ZV9ub3RpZnkpCj4gKwkJZG1hX2J1Zl91bnBpbihhdHRhY2gpOwo+ICsKPiAgCWlmICghSVNfRVJS KHNnX3RhYmxlKSAmJiBhdHRhY2gtPmRtYWJ1Zi0+b3BzLT5jYWNoZV9zZ3RfbWFwcGluZykgewo+ ICAJCWF0dGFjaC0+c2d0ID0gc2dfdGFibGU7Cj4gIAkJYXR0YWNoLT5kaXIgPSBkaXJlY3Rpb247 Cj4gQEAgLTg2Niw5ICs5MzIsMzMgQEAgdm9pZCBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ICAJCWRtYV9yZXN2X2Fzc2VydF9oZWxk KGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiAgCj4gIAlhdHRhY2gtPmRtYWJ1Zi0+b3BzLT51bm1h cF9kbWFfYnVmKGF0dGFjaCwgc2dfdGFibGUsIGRpcmVjdGlvbik7Cj4gKwo+ICsJaWYgKGRtYV9i dWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikgJiYKPiArCSAgICAhYXR0YWNoLT5pbXBvcnRl cl9vcHMtPm1vdmVfbm90aWZ5KQo+ICsJCWRtYV9idWZfdW5waW4oYXR0YWNoKTsKPiAgfQo+ICBF WFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQpOwo+ICAKPiArLyoqCj4g KyAqIGRtYV9idWZfbW92ZV9ub3RpZnkgLSBub3RpZnkgYXR0YWNobWVudHMgdGhhdCBETUEtYnVm IGlzIG1vdmluZwo+ICsgKgo+ICsgKiBAZG1hYnVmOglbaW5dCWJ1ZmZlciB3aGljaCBpcyBtb3Zp bmcKPiArICoKPiArICogSW5mb3JtcyBhbGwgYXR0YWNobWVuc3QgdGhhdCB0aGV5IG5lZWQgdG8g ZGVzdHJveSBhbmQgcmVjcmVhdGVkIGFsbCB0aGVpcgo+ICsgKiBtYXBwaW5ncy4KPiArICovCj4g K3ZvaWQgZG1hX2J1Zl9tb3ZlX25vdGlmeShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ICt7Cj4g KwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2g7Cj4gKwo+ICsJZG1hX3Jlc3ZfYXNz ZXJ0X2hlbGQoZG1hYnVmLT5yZXN2KTsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGF0dGFj aCwgJmRtYWJ1Zi0+YXR0YWNobWVudHMsIG5vZGUpCj4gKwkJaWYgKGF0dGFjaC0+aW1wb3J0ZXJf b3BzICYmIGF0dGFjaC0+aW1wb3J0ZXJfb3BzLT5tb3ZlX25vdGlmeSkKPiArCQkJYXR0YWNoLT5p bXBvcnRlcl9vcHMtPm1vdmVfbm90aWZ5KGF0dGFjaCk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9H UEwoZG1hX2J1Zl9tb3ZlX25vdGlmeSk7Cj4gKwo+ICAvKioKPiAgICogRE9DOiBjcHUgYWNjZXNz Cj4gICAqCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9k bWFfYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jCj4g aW5kZXggZDViY2RmZWZiYWQ2Li44ZTVhNjgxMDc1NTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMKPiBAQCAtNDE1LDYgKzQxNSw5IEBAIGFtZGdw dV9kbWFfYnVmX2NyZWF0ZV9vYmooc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRtYV9i dWYgKmRtYV9idWYpCj4gIAlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICB9Cj4gIAo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRtYV9idWZfYXR0YWNoX29wcyBhbWRncHVfZG1hX2J1Zl9hdHRhY2hfb3Bz ID0gewo+ICt9Owo+ICsKPiAgLyoqCj4gICAqIGFtZGdwdV9nZW1fcHJpbWVfaW1wb3J0IC0gJmRy bV9kcml2ZXIuZ2VtX3ByaW1lX2ltcG9ydCBpbXBsZW1lbnRhdGlvbgo+ICAgKiBAZGV2OiBEUk0g ZGV2aWNlCj4gQEAgLTQ0Nyw3ICs0NTAsOCBAQCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmFtZGdw dV9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAlpZiAoSVNfRVJS KG9iaikpCj4gIAkJcmV0dXJuIG9iajsKPiAgCj4gLQlhdHRhY2ggPSBkbWFfYnVmX2R5bmFtaWNf YXR0YWNoKGRtYV9idWYsIGRldi0+ZGV2LCB0cnVlKTsKPiArCWF0dGFjaCA9IGRtYV9idWZfZHlu YW1pY19hdHRhY2goZG1hX2J1ZiwgZGV2LT5kZXYsCj4gKwkJCQkJJmFtZGdwdV9kbWFfYnVmX2F0 dGFjaF9vcHMsIE5VTEwpOwo+ICAJaWYgKElTX0VSUihhdHRhY2gpKSB7Cj4gIAkJZHJtX2dlbV9v YmplY3RfcHV0KG9iaik7Cj4gIAkJcmV0dXJuIEVSUl9DQVNUKGF0dGFjaCk7Cj4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKPiBp bmRleCBhZjczZjgzNWM1MWMuLjc0NTZiYjkzNzYzNSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xp bnV4L2RtYS1idWYuaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCj4gQEAgLTkzLDE0 ICs5Myw0MCBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewo+ICAJICovCj4gIAl2b2lkICgqZGV0YWNo KShzdHJ1Y3QgZG1hX2J1ZiAqLCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICopOwo+ICAKPiAr CS8qKgo+ICsJICogQHBpbjoKPiArCSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCBieSBkbWFfYnVm X3BpbiBhbmQgbGV0cyB0aGUgZXhwb3J0ZXIga25vdyB0aGF0IHRoZQo+ICsJICogRE1BLWJ1ZiBj YW4ndCBiZSBtb3ZlZCBhbnkgbW9yZS4KCkkgdGhpbmsgd2Ugc2hvdWxkIGFkZCBhIHdhcm5pbmcg aGVyZSB0aGF0IHBpbm5pbmcgaXMgb25seSBvayBmb3IgbGltaXRlZAp1c2UtY2FzZXMgKGxpa2Ug c2Nhbm91dCBvciBzaW1pbGFyKSwgYW5kIG5vdCBhcyBwYXJ0IG9mIGdlbmVyYWwgYnVmZmVyCm1h bmFnZW1lbnQuCgppOTE1IHVzZXMgdGVtcG9yYXJ5IHBpbnMgdGhyb3VnaCBpdCdzIGV4ZWNidWYg bWFuYWdlbWVudCAoYW5kIGV2ZXJ5d2hlcmUKZWxzZSksIHNvIHdlIGhhdmUgYSBfbG90XyBvZiBw ZW9wbGUgaW4gZHJpLWRldmVsIHdpdGggcXVpdGUgZGlmZmVyZW50CmlkZWFzIG9mIHdoYXQgdGhp cyBtaWdodCBiZSBmb3IgOi0pCgo+ICsJICoKPiArCSAqIFRoaXMgaXMgY2FsbGVkIHdpdGggdGhl IGRtYWJ1Zi0+cmVzdiBvYmplY3QgbG9ja2VkLgo+ICsJICoKPiArCSAqIFRoaXMgY2FsbGJhY2sg aXMgb3B0aW9uYWwuCj4gKwkgKgo+ICsJICogUmV0dXJuczoKPiArCSAqCj4gKwkgKiAwIG9uIHN1 Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiArCSAqLwo+ICsJaW50ICgq cGluKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwo+ICsKPiArCS8qKgo+ICsJ ICogQHVucGluOgo+ICsJICoKPiArCSAqIFRoaXMgaXMgY2FsbGVkIGJ5IGRtYV9idWZfdW5waW4g YW5kIGxldHMgdGhlIGV4cG9ydGVyIGtub3cgdGhhdCB0aGUKPiArCSAqIERNQS1idWYgY2FuIGJl IG1vdmVkIGFnYWluLgo+ICsJICoKPiArCSAqIFRoaXMgaXMgY2FsbGVkIHdpdGggdGhlIGRtYWJ1 Zi0+cmVzdiBvYmplY3QgbG9ja2VkLgo+ICsJICoKPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0 aW9uYWwuCj4gKwkgKi8KPiArCXZvaWQgKCp1bnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoKTsKPiArCj4gIAkvKioKPiAgCSAqIEBtYXBfZG1hX2J1ZjoKPiAgCSAqCj4gIAkg KiBUaGlzIGlzIGNhbGxlZCBieSBkbWFfYnVmX21hcF9hdHRhY2htZW50KCkgYW5kIGlzIHVzZWQg dG8gbWFwIGEKPiAgCSAqIHNoYXJlZCAmZG1hX2J1ZiBpbnRvIGRldmljZSBhZGRyZXNzIHNwYWNl LCBhbmQgaXQgaXMgbWFuZGF0b3J5LiBJdAo+IC0JICogY2FuIG9ubHkgYmUgY2FsbGVkIGlmIEBh dHRhY2ggaGFzIGJlZW4gY2FsbGVkIHN1Y2Nlc3NmdWxseS4gVGhpcwo+IC0JICogZXNzZW50aWFs bHkgcGlucyB0aGUgRE1BIGJ1ZmZlciBpbnRvIHBsYWNlLCBhbmQgaXQgY2Fubm90IGJlIG1vdmVk Cj4gLQkgKiBhbnkgbW9yZQo+ICsJICogY2FuIG9ubHkgYmUgY2FsbGVkIGlmIEBhdHRhY2ggaGFz IGJlZW4gY2FsbGVkIHN1Y2Nlc3NmdWxseS4KPiAgCSAqCj4gIAkgKiBUaGlzIGNhbGwgbWF5IHNs ZWVwLCBlLmcuIHdoZW4gdGhlIGJhY2tpbmcgc3RvcmFnZSBmaXJzdCBuZWVkcyB0byBiZQo+ICAJ ICogYWxsb2NhdGVkLCBvciBtb3ZlZCB0byBhIGxvY2F0aW9uIHN1aXRhYmxlIGZvciBhbGwgY3Vy cmVudGx5IGF0dGFjaGVkCj4gQEAgLTE0MSw5ICsxNjcsNiBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMg ewo+ICAJICoKPiAgCSAqIFRoaXMgaXMgY2FsbGVkIGJ5IGRtYV9idWZfdW5tYXBfYXR0YWNobWVu dCgpIGFuZCBzaG91bGQgdW5tYXAgYW5kCj4gIAkgKiByZWxlYXNlIHRoZSAmc2dfdGFibGUgYWxs b2NhdGVkIGluIEBtYXBfZG1hX2J1ZiwgYW5kIGl0IGlzIG1hbmRhdG9yeS4KPiAtCSAqIEl0IHNo b3VsZCBhbHNvIHVucGluIHRoZSBiYWNraW5nIHN0b3JhZ2UgaWYgdGhpcyBpcyB0aGUgbGFzdCBt YXBwaW5nCj4gLQkgKiBvZiB0aGUgRE1BIGJ1ZmZlciwgaXQgdGhlIGV4cG9ydGVyIHN1cHBvcnRz IGJhY2tpbmcgc3RvcmFnZQo+IC0JICogbWlncmF0aW9uLgoKVGhpcyBpcyBzdGlsbCB2YWxpZCBm b3Igbm9uLWR5bmFtaWMgZXhwb3J0ZXJzLiBJbW8ga2VlcCBidXQgY2xhcmlmeSB0aGF0LgoKPiAg CSAqLwo+ICAJdm9pZCAoKnVubWFwX2RtYV9idWYpKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQg KiwKPiAgCQkJICAgICAgc3RydWN0IHNnX3RhYmxlICosCj4gQEAgLTMzNiw2ICszNTksMzQgQEAg c3RydWN0IGRtYV9idWYgewo+ICAJfSBjYl9leGNsLCBjYl9zaGFyZWQ7Cj4gIH07Cj4gIAo+ICsv KioKPiArICogc3RydWN0IGRtYV9idWZfYXR0YWNoX29wcyAtIGltcG9ydGVyIG9wZXJhdGlvbnMg Zm9yIGFuIGF0dGFjaG1lbnQKPiArICogQG1vdmVfbm90aWZ5OiBbb3B0aW9uYWxdIG5vdGlmaWNh dGlvbiB0aGF0IHRoZSBETUEtYnVmIGlzIG1vdmluZwo+ICsgKgo+ICsgKiBBdHRhY2htZW50IG9w ZXJhdGlvbnMgaW1wbGVtZW50ZWQgYnkgdGhlIGltcG9ydGVyLgo+ICsgKi8KPiArc3RydWN0IGRt YV9idWZfYXR0YWNoX29wcyB7Cj4gKwkvKioKPiArCSAqIEBtb3ZlX25vdGlmeQo+ICsJICoKPiAr CSAqIElmIHRoaXMgY2FsbGJhY2sgaXMgcHJvdmlkZWQgdGhlIGZyYW1ld29yayBjYW4gYXZvaWQg cGlubmluZyB0aGUKPiArCSAqIGJhY2tpbmcgc3RvcmUgd2hpbGUgbWFwcGluZ3MgZXhpc3RzLgo+ ICsJICoKPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggdGhlIGxvY2sgb2YgdGhl IHJlc2VydmF0aW9uIG9iamVjdAo+ICsJICogYXNzb2NpYXRlZCB3aXRoIHRoZSBkbWFfYnVmIGhl bGQgYW5kIHRoZSBtYXBwaW5nIGZ1bmN0aW9uIG11c3QgYmUKPiArCSAqIGNhbGxlZCB3aXRoIHRo aXMgbG9jayBoZWxkIGFzIHdlbGwuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG5vIG1hcHBpbmcKPiAr CSAqIGlzIGNyZWF0ZWQgY29uY3VycmVudGx5IHdpdGggYW4gb25nb2luZyBtb3ZlIG9wZXJhdGlv bi4KPiArCSAqCj4gKwkgKiBNYXBwaW5ncyBzdGF5IHZhbGlkIGFuZCBhcmUgbm90IGRpcmVjdGx5 IGFmZmVjdGVkIGJ5IHRoaXMgY2FsbGJhY2suCj4gKwkgKiBCdXQgdGhlIERNQS1idWYgY2FuIG5v dyBiZSBpbiBhIGRpZmZlcmVudCBwaHlzaWNhbCBsb2NhdGlvbiwgc28gYWxsCj4gKwkgKiBtYXBw aW5ncyBzaG91bGQgYmUgZGVzdHJveWVkIGFuZCByZS1jcmVhdGVkIGFzIHNvb24gYXMgcG9zc2li bGUuCj4gKwkgKgo+ICsJICogTmV3IG1hcHBpbmdzIGNhbiBiZSBjcmVhdGVkIGFmdGVyIHRoaXMg Y2FsbGJhY2sgcmV0dXJucywgYW5kIHdpbGwKPiArCSAqIHBvaW50IHRvIHRoZSBuZXcgbG9jYXRp b24gb2YgdGhlIERNQS1idWYuCj4gKwkgKi8KPiArCXZvaWQgKCptb3ZlX25vdGlmeSkoc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKPiArfTsKPiArCj4gIC8qKgo+ICAgKiBzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2htZW50IC0gaG9sZHMgZGV2aWNlLWJ1ZmZlciBhdHRhY2htZW50IGRh dGEKPiAgICogQGRtYWJ1ZjogYnVmZmVyIGZvciB0aGlzIGF0dGFjaG1lbnQuCj4gQEAgLTM0NCw4 ICszOTUsOSBAQCBzdHJ1Y3QgZG1hX2J1ZiB7Cj4gICAqIEBzZ3Q6IGNhY2hlZCBtYXBwaW5nLgo+ ICAgKiBAZGlyOiBkaXJlY3Rpb24gb2YgY2FjaGVkIG1hcHBpbmcuCj4gICAqIEBwcml2OiBleHBv cnRlciBzcGVjaWZpYyBhdHRhY2htZW50IGRhdGEuCj4gLSAqIEBkeW5hbWljX21hcHBpbmc6IHRy dWUgaWYgZG1hX2J1Zl9tYXAvdW5tYXBfYXR0YWNobWVudCgpIGlzIGNhbGxlZCB3aXRoIHRoZQo+ IC0gKiBkbWFfcmVzdiBsb2NrIGhlbGQuCj4gKyAqIEBpbXBvcnRlcl9vcHM6IGltcG9ydGVyIG9w ZXJhdGlvbnMgZm9yIHRoaXMgYXR0YWNobWVudCwgaWYgcHJvdmlkZWQKPiArICogZG1hX2J1Zl9t YXAvdW5tYXBfYXR0YWNobWVudCgpIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGRtYV9yZXN2IGxv Y2sgaGVsZC4KPiArICogQGltcG9ydGVyX3ByaXY6IGltcG9ydGVyIHNwZWNpZmljIGF0dGFjaG1l bnQgZGF0YS4KPiAgICoKPiAgICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIGF0dGFjaG1lbnQg aW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgZG1hX2J1ZiBidWZmZXIKPiAgICogYW5kIGl0cyB1c2Vy IGRldmljZShzKS4gVGhlIGxpc3QgY29udGFpbnMgb25lIGF0dGFjaG1lbnQgc3RydWN0IHBlciBk ZXZpY2UKPiBAQCAtMzYyLDcgKzQxNCw4IEBAIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgewo+ ICAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwo+ICAJc3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4gIAll bnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7Cj4gLQlib29sIGR5bmFtaWNfbWFwcGluZzsKPiAr CWNvbnN0IHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgKmltcG9ydGVyX29wczsKPiArCXZvaWQg KmltcG9ydGVyX3ByaXY7Cj4gIAl2b2lkICpwcml2Owo+ICB9Owo+ICAKPiBAQCAtNDM4LDE2ICs0 OTEsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGRtYV9idWZfaXNfZHluYW1pYyhzdHJ1Y3QgZG1h X2J1ZiAqZG1hYnVmKQo+ICBzdGF0aWMgaW5saW5lIGJvb2wKPiAgZG1hX2J1Zl9hdHRhY2htZW50 X2lzX2R5bmFtaWMoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQo+ICB7Cj4gLQly ZXR1cm4gYXR0YWNoLT5keW5hbWljX21hcHBpbmc7Cj4gKwlyZXR1cm4gISFhdHRhY2gtPmltcG9y dGVyX29wczsKCkhtIHdoeSBub3QgZG8gdGhlIHNhbWUgZm9yIGV4cG9ydGVycywgYW5kIG1ha2Ug dGhlbSBkeW5hbWljIGlmZiB0aGV5IGhhdmUKcGluL3VucGluPwotRGFuaWVsCgo+ICB9Cj4gIAo+ ICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1 ZiAqZG1hYnVmLAo+ICAJCQkJCSAgc3RydWN0IGRldmljZSAqZGV2KTsKPiAgc3RydWN0IGRtYV9i dWZfYXR0YWNobWVudCAqCj4gIGRtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYg KmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAo+IC0JCSAgICAgICBib29sIGR5bmFtaWNfbWFw cGluZyk7Cj4gKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgKmltcG9y dGVyX29wcywKPiArCQkgICAgICAgdm9pZCAqaW1wb3J0ZXJfcHJpdik7Cj4gIHZvaWQgZG1hX2J1 Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiAgCQkgICAgc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoKTsKPiAraW50IGRtYV9idWZfcGluKHN0cnVjdCBkbWFfYnVmX2F0 dGFjaG1lbnQgKmF0dGFjaCk7Cj4gK3ZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9h dHRhY2htZW50ICphdHRhY2gpOwo+ICAKPiAgc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0 KGNvbnN0IHN0cnVjdCBkbWFfYnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7Cj4gIAo+IC0tIAo+ IDIuMTcuMQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBv cmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbA== 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=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 187C7C010A4 for ; Tue, 5 Nov 2019 10:20:54 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E5A8E217F5 for ; Tue, 5 Nov 2019 10:20:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E5A8E217F5 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8A5276E9B1; Tue, 5 Nov 2019 10:20:50 +0000 (UTC) Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id 590836E9B0 for ; Tue, 5 Nov 2019 10:20:49 +0000 (UTC) Received: by mail-wm1-x344.google.com with SMTP id z26so7019328wmi.4 for ; Tue, 05 Nov 2019 02:20:49 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :references:mime-version:content-disposition :content-transfer-encoding:in-reply-to:user-agent; bh=KAoSWrCtJnVcpstcf4OAoLsbVOrNLD5KlvPrGo8r4jM=; b=diHAGfAN6xV3f1rXze7GnLcoJSXudwZQejRPMty0FlLcGVhhvkHyojEALnVLRzmD9G exUEpAe7XtOaHYo/kfdC9vTYz+C1BtheT+caCBoca4+dG9OBLxrtjkHWaun+xnQG0+yx Ng6e/LUrsPcAsSuGQMdlXNgwhL/oRCBPBQShDAygWJVqbCipTn5GIAxd65Q/WgllrPh0 d1B8/kzP1WxQcMJ2vOSvB0xmkYPTJfz35mQ3kOn8ZYmD4u1vZ7Q8BEVVxnpelxnPD1D9 qvTR5ZAwbzSDm5yrnFK0FIKD1jzUiz9ppEqW77nawXVKccD2VGtU+oDzg4dWlajEQjVB dOEA== X-Gm-Message-State: APjAAAXiHMIS87B1koVtnwOboZa5lK0AuKzhtlOzdlitS/MJeSu7K8go Hqqmths76cU++z4XOq8iVQxJnA== X-Google-Smtp-Source: APXvYqzh+bZx0x2hJ6H+2IUfINTGiZ1oaO9YVHm71WlEh7IuXsiNNUiGVu3CyaQNHQlVPhBeRqLCZQ== X-Received: by 2002:a1c:3d08:: with SMTP id k8mr3222367wma.119.1572949247668; Tue, 05 Nov 2019 02:20:47 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-96.fiber7.init7.net. [212.51.149.96]) by smtp.gmail.com with ESMTPSA id b186sm18453928wmb.21.2019.11.05.02.20.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Nov 2019 02:20:46 -0800 (PST) Date: Tue, 5 Nov 2019 11:20:45 +0100 From: Daniel Vetter To: Christian =?iso-8859-1?Q?K=F6nig?= Message-ID: <20191105102045.GC10326@phenom.ffwll.local> References: <20191029104049.9011-1-christian.koenig@amd.com> <20191029104049.9011-2-christian.koenig@amd.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191029104049.9011-2-christian.koenig@amd.com> X-Operating-System: Linux phenom 5.2.0-3-amd64 User-Agent: Mutt/1.10.1 (2018-07-13) X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=KAoSWrCtJnVcpstcf4OAoLsbVOrNLD5KlvPrGo8r4jM=; b=JuI5XtOHY7LoQsFTk4jDywK1uRw9ELtW9NVKlljlL0uip+bxZ3EmWUqCZ/qItEwHon TqMW1TLORQUJ2llAwjXH1IA5k/wQlvhuQAm0X2SdDnGZsiVEvybqQC9iyaV5C+CSaolV rdZ9nnPbxreo7pK+h06nzBIoQ+bW6SDsQsNEw= Subject: Re: [Intel-gfx] [PATCH 1/5] dma-buf: add dynamic DMA-buf handling v14 X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linaro-mm-sig@lists.linaro.org, intel-gfx@lists.freedesktop.org, sumit.semwal@linaro.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191105102045.8-0eQiYsntNfMOloYOARnGuCA_jVIehkOW88mujG9Mo@z> T24gVHVlLCBPY3QgMjksIDIwMTkgYXQgMTE6NDA6NDVBTSArMDEwMCwgQ2hyaXN0aWFuIEvDtm5p ZyB3cm90ZToKPiBPbiB0aGUgZXhwb3J0ZXIgc2lkZSB3ZSBhZGQgb3B0aW9uYWwgZXhwbGljaXQg cGlubmluZyBjYWxsYmFja3MuIFdoaWNoIGFyZQo+IGNhbGxlZCB3aGVuIHRoZSBpbXBvcnRlciBk b2Vzbid0IGltcGxlbWVudCBkeW5hbWljIGhhbmRsaW5nLCBtb3ZlIG5vdGlmaWNhdGlvbgo+IG9y IG5lZWQgdGhlIERNQS1idWYgbG9ja2VkIGluIHBsYWNlIGZvciBpdHMgdXNlIGNhc2UuCj4gCj4g T24gdGhlIGltcG9ydGVyIHNpZGUgd2UgYWRkIGFuIG9wdGlvbmFsIG1vdmVfbm90aWZ5IGNhbGxi YWNrLiBUaGlzIGNhbGxiYWNrIGlzCj4gdXNlZCBieSB0aGUgZXhwb3J0ZXIgdG8gaW5mb3JtIHRo ZSBpbXBvcnRlcnMgdGhhdCB0aGVpciBtYXBwaW5ncyBzaG91bGQgYmUKPiBkZXN0cm95ZWQgYXMg c29vbiBhcyBwb3NzaWJsZS4KPiAKPiBUaGlzIGFsbG93cyB0aGUgZXhwb3J0ZXIgdG8gcHJvdmlk ZSB0aGUgbWFwcGluZ3Mgd2l0aG91dCB0aGUgbmVlZCB0byBwaW4KPiB0aGUgYmFja2luZyBzdG9y ZS4KPiAKPiB2MjogZG9uJ3QgdHJ5IHRvIGludmFsaWRhdGUgbWFwcGluZ3Mgd2hlbiB0aGUgY2Fs bGJhY2sgaXMgTlVMTCwKPiAgICAgbG9jayB0aGUgcmVzZXJ2YXRpb24gb2JqIHdoaWxlIHVzaW5n IHRoZSBhdHRhY2htZW50cywKPiAgICAgYWRkIGhlbHBlciB0byBzZXQgdGhlIGNhbGxiYWNrCj4g djM6IG1vdmUgZmxhZyBmb3IgaW52YWxpZGF0aW9uIHN1cHBvcnQgaW50byB0aGUgRE1BLWJ1ZiwK PiAgICAgdXNlIG5ldyBhdHRhY2hfaW5mbyBzdHJ1Y3R1cmUgdG8gc2V0IHRoZSBjYWxsYmFjawo+ IHY0OiB1c2UgaW1wb3J0ZXJfcHJpdiBmaWVsZCBpbnN0ZWFkIG9mIG1hbmdsaW5nIGV4cG9ydGVy IHByaXYuCj4gdjU6IGRyb3AgaW52YWxpZGF0aW9uX3N1cHBvcnRlZCBmbGFnCj4gdjY6IHNxdWFz aCB0b2dldGhlciB3aXRoIHBpbi91bnBpbiBjaGFuZ2VzCj4gdjc6IHBpbi91bnBpbiB0YWtlcyBh biBhdHRhY2htZW50IG5vdwo+IHY4OiBudWtlIGRtYV9idWZfYXR0YWNobWVudF8obWFwfHVubWFw KV9sb2NrZWQsCj4gICAgIGV2ZXJ5dGhpbmcgaXMgbm93IGhhbmRsZWQgYmFja3dhcmQgY29tcGF0 aWJsZQo+IHY5OiBhbHdheXMgY2FjaGUgd2hlbiBleHBvcnQvaW1wb3J0ZXIgZG9uJ3QgYWdyZWUg b24gZHluYW1pYyBoYW5kbGluZwo+IHYxMDogbWluaW1hbCBzdHlsZSBjbGVhbnVwCj4gdjExOiBk cm9wIGF1dG9tYXRpY2FsbHkgcmUtZW50cnkgYXZvaWRhbmNlCj4gdjEyOiByZW5hbWUgY2FsbGJh Y2sgdG8gbW92ZV9ub3RpZnkKPiB2MTM6IGFkZCBtaWdodF9sb2NrIGluIGFwcHJvcHJpYXRlIHBs YWNlcwo+IHYxNDogcmViYXNlIG9uIHNlcGFyYXRlZCBsb2NraW5nIGNoYW5nZQo+IAo+IFNpZ25l ZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KCkJ1 bmNoIG9mIG5pdHBpY2tzL3NhZmV0eSBjaGVjayBjb21tZW50cyBoZXJlLCBJJ2xsIHBvc3QgdGhl IGJpZyBxdWVzdGlvbgpzdHVmZiBvbiB0aGUgY292ZXIgbGV0dGVyLgoKPiAtLS0KPiAgZHJpdmVy cy9kbWEtYnVmL2RtYS1idWYuYyAgICAgICAgICAgICAgICAgICB8IDEwNiArKysrKysrKysrKysr KysrKystLQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jIHwg ICA2ICstCj4gIGluY2x1ZGUvbGludXgvZG1hLWJ1Zi5oICAgICAgICAgICAgICAgICAgICAgfCAg NzggKysrKysrKysrKysrLS0KPiAgMyBmaWxlcyBjaGFuZ2VkLCAxNzAgaW5zZXJ0aW9ucygrKSwg MjAgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVm LmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4gaW5kZXggZDM3N2I0Y2E2NmJmLi5jZTI5 M2NlZTc2ZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwo+ICsrKyBi L2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPiBAQCAtNTI5LDYgKzUyOSwxMCBAQCBzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8g KmV4cF9pbmZvKQo+ICAJCSAgICBleHBfaW5mby0+b3BzLT5keW5hbWljX21hcHBpbmcpKQo+ICAJ CXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICAKPiArCWlmIChXQVJOX09OKCFleHBfaW5mby0+ b3BzLT5keW5hbWljX21hcHBpbmcgJiYKPiArCQkgICAgKGV4cF9pbmZvLT5vcHMtPnBpbiB8fCBl eHBfaW5mby0+b3BzLT51bnBpbikpKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwoKSW1v IG1ha2UgdGhpcyBzdHJvbmdlciwgaGF2ZSBhIGR5bmFtaWMgbWFwcGluZyBpZmYgdGhlcmUncyBi b3RoIGEgcGluIGFuZAp1bnBpbiBmdW5jdGlvbi4gT3RoZXJ3aXNlIHRoaXMgZG9lc24ndCBtYWtl IGEgbG90IG9mIHNlbnNlIHRvIG1lLgoKPiArCj4gIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGV4cF9p bmZvLT5vd25lcikpCj4gIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Cj4gIAo+IEBAIC02NTMs NyArNjU3LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9wdXQpOwo+ICAgKiBjYWxscyBh dHRhY2goKSBvZiBkbWFfYnVmX29wcyB0byBhbGxvdyBkZXZpY2Utc3BlY2lmaWMgYXR0YWNoIGZ1 bmN0aW9uYWxpdHkKPiAgICogQGRtYWJ1ZjoJCVtpbl0JYnVmZmVyIHRvIGF0dGFjaCBkZXZpY2Ug dG8uCj4gICAqIEBkZXY6CQlbaW5dCWRldmljZSB0byBiZSBhdHRhY2hlZC4KPiAtICogQGR5bmFt aWNfbWFwcGluZzoJW2luXQljYWxsaW5nIGNvbnZlbnRpb24gZm9yIG1hcC91bm1hcAo+ICsgKiBA aW1wb3J0ZXJfb3BzCVtpbl0JaW1wb3J0ZXIgb3BlcmF0aW9ucyBmb3IgdGhlIGF0dGFjaG1lbnQK PiArICogQGltcG9ydGVyX3ByaXYJW2luXQlpbXBvcnRlciBwcml2YXRlIHBvaW50ZXIgZm9yIHRo ZSBhdHRhY2htZW50Cj4gICAqCj4gICAqIFJldHVybnMgc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCBwb2ludGVyIGZvciB0aGlzIGF0dGFjaG1lbnQuIEF0dGFjaG1lbnRzCj4gICAqIG11c3QgYmUg Y2xlYW5lZCB1cCBieSBjYWxsaW5nIGRtYV9idWZfZGV0YWNoKCkuCj4gQEAgLTY2OSw3ICs2NzQs OCBAQCBFWFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3B1dCk7Cj4gICAqLwo+ICBzdHJ1Y3QgZG1h X2J1Zl9hdHRhY2htZW50ICoKPiAgZG1hX2J1Zl9keW5hbWljX2F0dGFjaChzdHJ1Y3QgZG1hX2J1 ZiAqZG1hYnVmLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gLQkJICAgICAgIGJvb2wgZHluYW1pY19t YXBwaW5nKQo+ICsJCSAgICAgICBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzICppbXBv cnRlcl9vcHMsCj4gKwkJICAgICAgIHZvaWQgKmltcG9ydGVyX3ByaXYpCj4gIHsKPiAgCXN0cnVj dCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDsKPiAgCWludCByZXQ7Cj4gQEAgLTY4Myw3ICs2 ODksOCBAQCBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0 cnVjdCBkZXZpY2UgKmRldiwKPiAgCj4gIAlhdHRhY2gtPmRldiA9IGRldjsKPiAgCWF0dGFjaC0+ ZG1hYnVmID0gZG1hYnVmOwo+IC0JYXR0YWNoLT5keW5hbWljX21hcHBpbmcgPSBkeW5hbWljX21h cHBpbmc7Cj4gKwlhdHRhY2gtPmltcG9ydGVyX29wcyA9IGltcG9ydGVyX29wczsKPiArCWF0dGFj aC0+aW1wb3J0ZXJfcHJpdiA9IGltcG9ydGVyX3ByaXY7Cj4gIAo+ICAJaWYgKGRtYWJ1Zi0+b3Bz LT5hdHRhY2gpIHsKPiAgCQlyZXQgPSBkbWFidWYtPm9wcy0+YXR0YWNoKGRtYWJ1ZiwgYXR0YWNo KTsKPiBAQCAtNzAyLDE1ICs3MDksMTkgQEAgZG1hX2J1Zl9keW5hbWljX2F0dGFjaChzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gIAkgICAgZG1hX2J1Zl9pc19k eW5hbWljKGRtYWJ1ZikpIHsKPiAgCQlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKPiAgCj4gLQkJaWYg KGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4gKwkJaWYgKGRtYV9idWZfaXNf ZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikpIHsKPiAgCQkJZG1hX3Jlc3ZfbG9jayhhdHRhY2gtPmRt YWJ1Zi0+cmVzdiwgTlVMTCk7Cj4gKwkJCXJldCA9IGRtYV9idWZfcGluKGF0dGFjaCk7Cj4gKwkJ CWlmIChyZXQpCj4gKwkJCQlnb3RvIGVycl91bmxvY2s7Cj4gKwkJfQo+ICAKPiAgCQlzZ3QgPSBk bWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0YWNoLCBETUFfQklESVJFQ1RJT05BTCk7Cj4gIAkJ aWYgKCFzZ3QpCj4gIAkJCXNndCA9IEVSUl9QVFIoLUVOT01FTSk7Cj4gIAkJaWYgKElTX0VSUihz Z3QpKSB7Cj4gIAkJCXJldCA9IFBUUl9FUlIoc2d0KTsKPiAtCQkJZ290byBlcnJfdW5sb2NrOwo+ ICsJCQlnb3RvIGVycl91bnBpbjsKPiAgCQl9Cj4gIAkJaWYgKGRtYV9idWZfaXNfZHluYW1pYyhh dHRhY2gtPmRtYWJ1ZikpCj4gIAkJCWRtYV9yZXN2X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVz dik7Cj4gQEAgLTcyNCw2ICs3MzUsMTAgQEAgZG1hX2J1Zl9keW5hbWljX2F0dGFjaChzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gIAlrZnJlZShhdHRhY2gpOwo+ ICAJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgCj4gK2Vycl91bnBpbjoKPiArCWlmIChkbWFfYnVm X2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQo+ICsJCWRtYV9idWZfdW5waW4oYXR0YWNoKTsK PiArCj4gIGVycl91bmxvY2s6Cj4gIAlpZiAoZG1hX2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1h YnVmKSkKPiAgCQlkbWFfcmVzdl91bmxvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+IEBAIC03 NDQsNyArNzU5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9keW5hbWljX2F0dGFjaCk7 Cj4gIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFf YnVmICpkbWFidWYsCj4gIAkJCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIHsKPiAtCXJldHVy biBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKGRtYWJ1ZiwgZGV2LCBmYWxzZSk7Cj4gKwlyZXR1cm4g ZG1hX2J1Zl9keW5hbWljX2F0dGFjaChkbWFidWYsIGRldiwgTlVMTCwgTlVMTCk7Cj4gIH0KPiAg RVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9hdHRhY2gpOwo+ICAKPiBAQCAtNzY3LDggKzc4Miwx MCBAQCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBk bWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKPiAgCj4gIAkJZG1hYnVmLT5vcHMtPnVubWFwX2Rt YV9idWYoYXR0YWNoLCBhdHRhY2gtPnNndCwgYXR0YWNoLT5kaXIpOwo+ICAKPiAtCQlpZiAoZG1h X2J1Zl9pc19keW5hbWljKGF0dGFjaC0+ZG1hYnVmKSkKPiArCQlpZiAoZG1hX2J1Zl9pc19keW5h bWljKGF0dGFjaC0+ZG1hYnVmKSkgewo+ICsJCQlkbWFfYnVmX3VucGluKGF0dGFjaCk7Cj4gIAkJ CWRtYV9yZXN2X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gKwkJfQo+ICAJfQo+ICAK PiAgCWRtYV9yZXN2X2xvY2soZG1hYnVmLT5yZXN2LCBOVUxMKTsKPiBAQCAtNzgxLDYgKzc5OCw0 NCBAQCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBk bWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTChkbWFf YnVmX2RldGFjaCk7Cj4gIAo+ICsvKioKPiArICogZG1hX2J1Zl9waW4gLSBMb2NrIGRvd24gdGhl IERNQS1idWYKPiArICoKPiArICogQGF0dGFjaDoJW2luXQlhdHRhY2htZW50IHdoaWNoIHNob3Vs ZCBiZSBwaW5uZWQKPiArICoKPiArICogUmV0dXJuczoKPiArICogMCBvbiBzdWNjZXNzLCBuZWdh dGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQgZG1hX2J1Zl9waW4oc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQo+ICt7Cj4gKwlzdHJ1Y3QgZG1hX2J1ZiAq ZG1hYnVmID0gYXR0YWNoLT5kbWFidWY7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlkbWFfcmVz dl9hc3NlcnRfaGVsZChkbWFidWYtPnJlc3YpOwo+ICsKPiArCWlmIChkbWFidWYtPm9wcy0+cGlu KQo+ICsJCXJldCA9IGRtYWJ1Zi0+b3BzLT5waW4oYXR0YWNoKTsKPiArCj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfcGluKTsKPiArCj4gKy8qKgo+ICsg KiBkbWFfYnVmX3VucGluIC0gUmVtb3ZlIGxvY2sgZnJvbSBETUEtYnVmCj4gKyAqCj4gKyAqIEBh dHRhY2g6CVtpbl0JYXR0YWNobWVudCB3aGljaCBzaG91bGQgYmUgdW5waW5uZWQKPiArICovCj4g K3ZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCj4g K3sKPiArCXN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBhdHRhY2gtPmRtYWJ1ZjsKPiArCj4gKwlk bWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtPnJlc3YpOwo+ICsKPiArCWlmIChkbWFidWYtPm9w cy0+dW5waW4pCj4gKwkJZG1hYnVmLT5vcHMtPnVucGluKGF0dGFjaCk7Cj4gK30KPiArRVhQT1JU X1NZTUJPTF9HUEwoZG1hX2J1Zl91bnBpbik7Cj4gKwo+ICAvKioKPiAgICogZG1hX2J1Zl9tYXBf YXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2ht ZW50Owo+ICAgKiBtYXBwZWQgaW50byBfZGV2aWNlXyBhZGRyZXNzIHNwYWNlLiBJcyBhIHdyYXBw ZXIgZm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhlCj4gQEAgLTgwMCw2ICs4NTUsNyBAQCBzdHJ1Y3Qg c2dfdGFibGUgKmRtYV9idWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoLAo+ICAJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKPiAg ewo+ICAJc3RydWN0IHNnX3RhYmxlICpzZ190YWJsZTsKPiArCWludCByOwo+ICAKPiAgCW1pZ2h0 X3NsZWVwKCk7Cj4gIAo+IEBAIC04MjEsMTMgKzg3NywyMyBAQCBzdHJ1Y3Qgc2dfdGFibGUgKmRt YV9idWZfbWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ ICAJCXJldHVybiBhdHRhY2gtPnNndDsKPiAgCX0KPiAgCj4gLQlpZiAoZG1hX2J1Zl9pc19keW5h bWljKGF0dGFjaC0+ZG1hYnVmKSkKPiArCWlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5k bWFidWYpKSB7Cj4gIAkJZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3Yp Owo+ICsJCWlmICghYXR0YWNoLT5pbXBvcnRlcl9vcHMtPm1vdmVfbm90aWZ5KSB7CgpJbW8ganVz dCByZXF1aXJlIC0+bW92ZV9ub3RpZnkgZm9yIGltcG9ydGVycyB0aGF0IGdpdmUgeW91IGFuIG9w cwpmdW5jdGlvbi4gRG9lc24ndCByZWFsbHkgbWFrZSBzZW5zZSB0byBhbGxvdyBkeW5hbWljIHdp dGhvdXQgc3VwcG9ydAotPm1vdmVfbm90aWZ5LgoKPiArCQkJciA9IGRtYV9idWZfcGluKGF0dGFj aCk7Cj4gKwkJCWlmIChyKQo+ICsJCQkJcmV0dXJuIEVSUl9QVFIocik7Cj4gKwkJfQo+ICsJfQo+ ICAKPiAgCXNnX3RhYmxlID0gYXR0YWNoLT5kbWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0YWNo LCBkaXJlY3Rpb24pOwo+ICAJaWYgKCFzZ190YWJsZSkKPiAgCQlzZ190YWJsZSA9IEVSUl9QVFIo LUVOT01FTSk7Cj4gIAo+ICsJaWYgKElTX0VSUihzZ190YWJsZSkgJiYgZG1hX2J1Zl9pc19keW5h bWljKGF0dGFjaC0+ZG1hYnVmKSAmJgo+ICsJICAgICFhdHRhY2gtPmltcG9ydGVyX29wcy0+bW92 ZV9ub3RpZnkpCj4gKwkJZG1hX2J1Zl91bnBpbihhdHRhY2gpOwo+ICsKPiAgCWlmICghSVNfRVJS KHNnX3RhYmxlKSAmJiBhdHRhY2gtPmRtYWJ1Zi0+b3BzLT5jYWNoZV9zZ3RfbWFwcGluZykgewo+ ICAJCWF0dGFjaC0+c2d0ID0gc2dfdGFibGU7Cj4gIAkJYXR0YWNoLT5kaXIgPSBkaXJlY3Rpb247 Cj4gQEAgLTg2Niw5ICs5MzIsMzMgQEAgdm9pZCBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ICAJCWRtYV9yZXN2X2Fzc2VydF9oZWxk KGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiAgCj4gIAlhdHRhY2gtPmRtYWJ1Zi0+b3BzLT51bm1h cF9kbWFfYnVmKGF0dGFjaCwgc2dfdGFibGUsIGRpcmVjdGlvbik7Cj4gKwo+ICsJaWYgKGRtYV9i dWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1ZikgJiYKPiArCSAgICAhYXR0YWNoLT5pbXBvcnRl cl9vcHMtPm1vdmVfbm90aWZ5KQo+ICsJCWRtYV9idWZfdW5waW4oYXR0YWNoKTsKPiAgfQo+ICBF WFBPUlRfU1lNQk9MX0dQTChkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQpOwo+ICAKPiArLyoqCj4g KyAqIGRtYV9idWZfbW92ZV9ub3RpZnkgLSBub3RpZnkgYXR0YWNobWVudHMgdGhhdCBETUEtYnVm IGlzIG1vdmluZwo+ICsgKgo+ICsgKiBAZG1hYnVmOglbaW5dCWJ1ZmZlciB3aGljaCBpcyBtb3Zp bmcKPiArICoKPiArICogSW5mb3JtcyBhbGwgYXR0YWNobWVuc3QgdGhhdCB0aGV5IG5lZWQgdG8g ZGVzdHJveSBhbmQgcmVjcmVhdGVkIGFsbCB0aGVpcgo+ICsgKiBtYXBwaW5ncy4KPiArICovCj4g K3ZvaWQgZG1hX2J1Zl9tb3ZlX25vdGlmeShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+ICt7Cj4g KwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2g7Cj4gKwo+ICsJZG1hX3Jlc3ZfYXNz ZXJ0X2hlbGQoZG1hYnVmLT5yZXN2KTsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGF0dGFj aCwgJmRtYWJ1Zi0+YXR0YWNobWVudHMsIG5vZGUpCj4gKwkJaWYgKGF0dGFjaC0+aW1wb3J0ZXJf b3BzICYmIGF0dGFjaC0+aW1wb3J0ZXJfb3BzLT5tb3ZlX25vdGlmeSkKPiArCQkJYXR0YWNoLT5p bXBvcnRlcl9vcHMtPm1vdmVfbm90aWZ5KGF0dGFjaCk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9H UEwoZG1hX2J1Zl9tb3ZlX25vdGlmeSk7Cj4gKwo+ICAvKioKPiAgICogRE9DOiBjcHUgYWNjZXNz Cj4gICAqCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9k bWFfYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jCj4g aW5kZXggZDViY2RmZWZiYWQ2Li44ZTVhNjgxMDc1NTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMKPiBAQCAtNDE1LDYgKzQxNSw5IEBAIGFtZGdw dV9kbWFfYnVmX2NyZWF0ZV9vYmooc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRtYV9i dWYgKmRtYV9idWYpCj4gIAlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICB9Cj4gIAo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRtYV9idWZfYXR0YWNoX29wcyBhbWRncHVfZG1hX2J1Zl9hdHRhY2hfb3Bz ID0gewo+ICt9Owo+ICsKPiAgLyoqCj4gICAqIGFtZGdwdV9nZW1fcHJpbWVfaW1wb3J0IC0gJmRy bV9kcml2ZXIuZ2VtX3ByaW1lX2ltcG9ydCBpbXBsZW1lbnRhdGlvbgo+ICAgKiBAZGV2OiBEUk0g ZGV2aWNlCj4gQEAgLTQ0Nyw3ICs0NTAsOCBAQCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmFtZGdw dV9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAlpZiAoSVNfRVJS KG9iaikpCj4gIAkJcmV0dXJuIG9iajsKPiAgCj4gLQlhdHRhY2ggPSBkbWFfYnVmX2R5bmFtaWNf YXR0YWNoKGRtYV9idWYsIGRldi0+ZGV2LCB0cnVlKTsKPiArCWF0dGFjaCA9IGRtYV9idWZfZHlu YW1pY19hdHRhY2goZG1hX2J1ZiwgZGV2LT5kZXYsCj4gKwkJCQkJJmFtZGdwdV9kbWFfYnVmX2F0 dGFjaF9vcHMsIE5VTEwpOwo+ICAJaWYgKElTX0VSUihhdHRhY2gpKSB7Cj4gIAkJZHJtX2dlbV9v YmplY3RfcHV0KG9iaik7Cj4gIAkJcmV0dXJuIEVSUl9DQVNUKGF0dGFjaCk7Cj4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKPiBp bmRleCBhZjczZjgzNWM1MWMuLjc0NTZiYjkzNzYzNSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xp bnV4L2RtYS1idWYuaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCj4gQEAgLTkzLDE0 ICs5Myw0MCBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewo+ICAJICovCj4gIAl2b2lkICgqZGV0YWNo KShzdHJ1Y3QgZG1hX2J1ZiAqLCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICopOwo+ICAKPiAr CS8qKgo+ICsJICogQHBpbjoKPiArCSAqCj4gKwkgKiBUaGlzIGlzIGNhbGxlZCBieSBkbWFfYnVm X3BpbiBhbmQgbGV0cyB0aGUgZXhwb3J0ZXIga25vdyB0aGF0IHRoZQo+ICsJICogRE1BLWJ1ZiBj YW4ndCBiZSBtb3ZlZCBhbnkgbW9yZS4KCkkgdGhpbmsgd2Ugc2hvdWxkIGFkZCBhIHdhcm5pbmcg aGVyZSB0aGF0IHBpbm5pbmcgaXMgb25seSBvayBmb3IgbGltaXRlZAp1c2UtY2FzZXMgKGxpa2Ug c2Nhbm91dCBvciBzaW1pbGFyKSwgYW5kIG5vdCBhcyBwYXJ0IG9mIGdlbmVyYWwgYnVmZmVyCm1h bmFnZW1lbnQuCgppOTE1IHVzZXMgdGVtcG9yYXJ5IHBpbnMgdGhyb3VnaCBpdCdzIGV4ZWNidWYg bWFuYWdlbWVudCAoYW5kIGV2ZXJ5d2hlcmUKZWxzZSksIHNvIHdlIGhhdmUgYSBfbG90XyBvZiBw ZW9wbGUgaW4gZHJpLWRldmVsIHdpdGggcXVpdGUgZGlmZmVyZW50CmlkZWFzIG9mIHdoYXQgdGhp cyBtaWdodCBiZSBmb3IgOi0pCgo+ICsJICoKPiArCSAqIFRoaXMgaXMgY2FsbGVkIHdpdGggdGhl IGRtYWJ1Zi0+cmVzdiBvYmplY3QgbG9ja2VkLgo+ICsJICoKPiArCSAqIFRoaXMgY2FsbGJhY2sg aXMgb3B0aW9uYWwuCj4gKwkgKgo+ICsJICogUmV0dXJuczoKPiArCSAqCj4gKwkgKiAwIG9uIHN1 Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiArCSAqLwo+ICsJaW50ICgq cGluKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwo+ICsKPiArCS8qKgo+ICsJ ICogQHVucGluOgo+ICsJICoKPiArCSAqIFRoaXMgaXMgY2FsbGVkIGJ5IGRtYV9idWZfdW5waW4g YW5kIGxldHMgdGhlIGV4cG9ydGVyIGtub3cgdGhhdCB0aGUKPiArCSAqIERNQS1idWYgY2FuIGJl IG1vdmVkIGFnYWluLgo+ICsJICoKPiArCSAqIFRoaXMgaXMgY2FsbGVkIHdpdGggdGhlIGRtYWJ1 Zi0+cmVzdiBvYmplY3QgbG9ja2VkLgo+ICsJICoKPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0 aW9uYWwuCj4gKwkgKi8KPiArCXZvaWQgKCp1bnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoKTsKPiArCj4gIAkvKioKPiAgCSAqIEBtYXBfZG1hX2J1ZjoKPiAgCSAqCj4gIAkg KiBUaGlzIGlzIGNhbGxlZCBieSBkbWFfYnVmX21hcF9hdHRhY2htZW50KCkgYW5kIGlzIHVzZWQg dG8gbWFwIGEKPiAgCSAqIHNoYXJlZCAmZG1hX2J1ZiBpbnRvIGRldmljZSBhZGRyZXNzIHNwYWNl LCBhbmQgaXQgaXMgbWFuZGF0b3J5LiBJdAo+IC0JICogY2FuIG9ubHkgYmUgY2FsbGVkIGlmIEBh dHRhY2ggaGFzIGJlZW4gY2FsbGVkIHN1Y2Nlc3NmdWxseS4gVGhpcwo+IC0JICogZXNzZW50aWFs bHkgcGlucyB0aGUgRE1BIGJ1ZmZlciBpbnRvIHBsYWNlLCBhbmQgaXQgY2Fubm90IGJlIG1vdmVk Cj4gLQkgKiBhbnkgbW9yZQo+ICsJICogY2FuIG9ubHkgYmUgY2FsbGVkIGlmIEBhdHRhY2ggaGFz IGJlZW4gY2FsbGVkIHN1Y2Nlc3NmdWxseS4KPiAgCSAqCj4gIAkgKiBUaGlzIGNhbGwgbWF5IHNs ZWVwLCBlLmcuIHdoZW4gdGhlIGJhY2tpbmcgc3RvcmFnZSBmaXJzdCBuZWVkcyB0byBiZQo+ICAJ ICogYWxsb2NhdGVkLCBvciBtb3ZlZCB0byBhIGxvY2F0aW9uIHN1aXRhYmxlIGZvciBhbGwgY3Vy cmVudGx5IGF0dGFjaGVkCj4gQEAgLTE0MSw5ICsxNjcsNiBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMg ewo+ICAJICoKPiAgCSAqIFRoaXMgaXMgY2FsbGVkIGJ5IGRtYV9idWZfdW5tYXBfYXR0YWNobWVu dCgpIGFuZCBzaG91bGQgdW5tYXAgYW5kCj4gIAkgKiByZWxlYXNlIHRoZSAmc2dfdGFibGUgYWxs b2NhdGVkIGluIEBtYXBfZG1hX2J1ZiwgYW5kIGl0IGlzIG1hbmRhdG9yeS4KPiAtCSAqIEl0IHNo b3VsZCBhbHNvIHVucGluIHRoZSBiYWNraW5nIHN0b3JhZ2UgaWYgdGhpcyBpcyB0aGUgbGFzdCBt YXBwaW5nCj4gLQkgKiBvZiB0aGUgRE1BIGJ1ZmZlciwgaXQgdGhlIGV4cG9ydGVyIHN1cHBvcnRz IGJhY2tpbmcgc3RvcmFnZQo+IC0JICogbWlncmF0aW9uLgoKVGhpcyBpcyBzdGlsbCB2YWxpZCBm b3Igbm9uLWR5bmFtaWMgZXhwb3J0ZXJzLiBJbW8ga2VlcCBidXQgY2xhcmlmeSB0aGF0LgoKPiAg CSAqLwo+ICAJdm9pZCAoKnVubWFwX2RtYV9idWYpKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQg KiwKPiAgCQkJICAgICAgc3RydWN0IHNnX3RhYmxlICosCj4gQEAgLTMzNiw2ICszNTksMzQgQEAg c3RydWN0IGRtYV9idWYgewo+ICAJfSBjYl9leGNsLCBjYl9zaGFyZWQ7Cj4gIH07Cj4gIAo+ICsv KioKPiArICogc3RydWN0IGRtYV9idWZfYXR0YWNoX29wcyAtIGltcG9ydGVyIG9wZXJhdGlvbnMg Zm9yIGFuIGF0dGFjaG1lbnQKPiArICogQG1vdmVfbm90aWZ5OiBbb3B0aW9uYWxdIG5vdGlmaWNh dGlvbiB0aGF0IHRoZSBETUEtYnVmIGlzIG1vdmluZwo+ICsgKgo+ICsgKiBBdHRhY2htZW50IG9w ZXJhdGlvbnMgaW1wbGVtZW50ZWQgYnkgdGhlIGltcG9ydGVyLgo+ICsgKi8KPiArc3RydWN0IGRt YV9idWZfYXR0YWNoX29wcyB7Cj4gKwkvKioKPiArCSAqIEBtb3ZlX25vdGlmeQo+ICsJICoKPiAr CSAqIElmIHRoaXMgY2FsbGJhY2sgaXMgcHJvdmlkZWQgdGhlIGZyYW1ld29yayBjYW4gYXZvaWQg cGlubmluZyB0aGUKPiArCSAqIGJhY2tpbmcgc3RvcmUgd2hpbGUgbWFwcGluZ3MgZXhpc3RzLgo+ ICsJICoKPiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggdGhlIGxvY2sgb2YgdGhl IHJlc2VydmF0aW9uIG9iamVjdAo+ICsJICogYXNzb2NpYXRlZCB3aXRoIHRoZSBkbWFfYnVmIGhl bGQgYW5kIHRoZSBtYXBwaW5nIGZ1bmN0aW9uIG11c3QgYmUKPiArCSAqIGNhbGxlZCB3aXRoIHRo aXMgbG9jayBoZWxkIGFzIHdlbGwuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG5vIG1hcHBpbmcKPiAr CSAqIGlzIGNyZWF0ZWQgY29uY3VycmVudGx5IHdpdGggYW4gb25nb2luZyBtb3ZlIG9wZXJhdGlv bi4KPiArCSAqCj4gKwkgKiBNYXBwaW5ncyBzdGF5IHZhbGlkIGFuZCBhcmUgbm90IGRpcmVjdGx5 IGFmZmVjdGVkIGJ5IHRoaXMgY2FsbGJhY2suCj4gKwkgKiBCdXQgdGhlIERNQS1idWYgY2FuIG5v dyBiZSBpbiBhIGRpZmZlcmVudCBwaHlzaWNhbCBsb2NhdGlvbiwgc28gYWxsCj4gKwkgKiBtYXBw aW5ncyBzaG91bGQgYmUgZGVzdHJveWVkIGFuZCByZS1jcmVhdGVkIGFzIHNvb24gYXMgcG9zc2li bGUuCj4gKwkgKgo+ICsJICogTmV3IG1hcHBpbmdzIGNhbiBiZSBjcmVhdGVkIGFmdGVyIHRoaXMg Y2FsbGJhY2sgcmV0dXJucywgYW5kIHdpbGwKPiArCSAqIHBvaW50IHRvIHRoZSBuZXcgbG9jYXRp b24gb2YgdGhlIERNQS1idWYuCj4gKwkgKi8KPiArCXZvaWQgKCptb3ZlX25vdGlmeSkoc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKPiArfTsKPiArCj4gIC8qKgo+ICAgKiBzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2htZW50IC0gaG9sZHMgZGV2aWNlLWJ1ZmZlciBhdHRhY2htZW50IGRh dGEKPiAgICogQGRtYWJ1ZjogYnVmZmVyIGZvciB0aGlzIGF0dGFjaG1lbnQuCj4gQEAgLTM0NCw4 ICszOTUsOSBAQCBzdHJ1Y3QgZG1hX2J1ZiB7Cj4gICAqIEBzZ3Q6IGNhY2hlZCBtYXBwaW5nLgo+ ICAgKiBAZGlyOiBkaXJlY3Rpb24gb2YgY2FjaGVkIG1hcHBpbmcuCj4gICAqIEBwcml2OiBleHBv cnRlciBzcGVjaWZpYyBhdHRhY2htZW50IGRhdGEuCj4gLSAqIEBkeW5hbWljX21hcHBpbmc6IHRy dWUgaWYgZG1hX2J1Zl9tYXAvdW5tYXBfYXR0YWNobWVudCgpIGlzIGNhbGxlZCB3aXRoIHRoZQo+ IC0gKiBkbWFfcmVzdiBsb2NrIGhlbGQuCj4gKyAqIEBpbXBvcnRlcl9vcHM6IGltcG9ydGVyIG9w ZXJhdGlvbnMgZm9yIHRoaXMgYXR0YWNobWVudCwgaWYgcHJvdmlkZWQKPiArICogZG1hX2J1Zl9t YXAvdW5tYXBfYXR0YWNobWVudCgpIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGRtYV9yZXN2IGxv Y2sgaGVsZC4KPiArICogQGltcG9ydGVyX3ByaXY6IGltcG9ydGVyIHNwZWNpZmljIGF0dGFjaG1l bnQgZGF0YS4KPiAgICoKPiAgICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIGF0dGFjaG1lbnQg aW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgZG1hX2J1ZiBidWZmZXIKPiAgICogYW5kIGl0cyB1c2Vy IGRldmljZShzKS4gVGhlIGxpc3QgY29udGFpbnMgb25lIGF0dGFjaG1lbnQgc3RydWN0IHBlciBk ZXZpY2UKPiBAQCAtMzYyLDcgKzQxNCw4IEBAIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgewo+ ICAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwo+ICAJc3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4gIAll bnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7Cj4gLQlib29sIGR5bmFtaWNfbWFwcGluZzsKPiAr CWNvbnN0IHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgKmltcG9ydGVyX29wczsKPiArCXZvaWQg KmltcG9ydGVyX3ByaXY7Cj4gIAl2b2lkICpwcml2Owo+ICB9Owo+ICAKPiBAQCAtNDM4LDE2ICs0 OTEsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGRtYV9idWZfaXNfZHluYW1pYyhzdHJ1Y3QgZG1h X2J1ZiAqZG1hYnVmKQo+ICBzdGF0aWMgaW5saW5lIGJvb2wKPiAgZG1hX2J1Zl9hdHRhY2htZW50 X2lzX2R5bmFtaWMoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQo+ICB7Cj4gLQly ZXR1cm4gYXR0YWNoLT5keW5hbWljX21hcHBpbmc7Cj4gKwlyZXR1cm4gISFhdHRhY2gtPmltcG9y dGVyX29wczsKCkhtIHdoeSBub3QgZG8gdGhlIHNhbWUgZm9yIGV4cG9ydGVycywgYW5kIG1ha2Ug dGhlbSBkeW5hbWljIGlmZiB0aGV5IGhhdmUKcGluL3VucGluPwotRGFuaWVsCgo+ICB9Cj4gIAo+ ICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1 ZiAqZG1hYnVmLAo+ICAJCQkJCSAgc3RydWN0IGRldmljZSAqZGV2KTsKPiAgc3RydWN0IGRtYV9i dWZfYXR0YWNobWVudCAqCj4gIGRtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYg KmRtYWJ1Ziwgc3RydWN0IGRldmljZSAqZGV2LAo+IC0JCSAgICAgICBib29sIGR5bmFtaWNfbWFw cGluZyk7Cj4gKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgKmltcG9y dGVyX29wcywKPiArCQkgICAgICAgdm9pZCAqaW1wb3J0ZXJfcHJpdik7Cj4gIHZvaWQgZG1hX2J1 Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiAgCQkgICAgc3RydWN0IGRtYV9idWZf YXR0YWNobWVudCAqYXR0YWNoKTsKPiAraW50IGRtYV9idWZfcGluKHN0cnVjdCBkbWFfYnVmX2F0 dGFjaG1lbnQgKmF0dGFjaCk7Cj4gK3ZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9h dHRhY2htZW50ICphdHRhY2gpOwo+ICAKPiAgc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0 KGNvbnN0IHN0cnVjdCBkbWFfYnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7Cj4gIAo+IC0tIAo+ IDIuMTcuMQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBv cmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeA== 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=-8.1 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 7B11AC010A3 for ; Tue, 5 Nov 2019 10:20:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 36B182190F for ; Tue, 5 Nov 2019 10:20:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="JuI5XtOH" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388365AbfKEKUw (ORCPT ); Tue, 5 Nov 2019 05:20:52 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:40267 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388022AbfKEKUw (ORCPT ); Tue, 5 Nov 2019 05:20:52 -0500 Received: by mail-wm1-f66.google.com with SMTP id f3so8348618wmc.5 for ; Tue, 05 Nov 2019 02:20:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=KAoSWrCtJnVcpstcf4OAoLsbVOrNLD5KlvPrGo8r4jM=; b=JuI5XtOHY7LoQsFTk4jDywK1uRw9ELtW9NVKlljlL0uip+bxZ3EmWUqCZ/qItEwHon TqMW1TLORQUJ2llAwjXH1IA5k/wQlvhuQAm0X2SdDnGZsiVEvybqQC9iyaV5C+CSaolV rdZ9nnPbxreo7pK+h06nzBIoQ+bW6SDsQsNEw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :references:mime-version:content-disposition :content-transfer-encoding:in-reply-to:user-agent; bh=KAoSWrCtJnVcpstcf4OAoLsbVOrNLD5KlvPrGo8r4jM=; b=CAi+AKiVy83iENJrAyuskkXEUOlGsLwE7wl5gYaF8BNMPdZVf99yIHdtQKQ6o3kh5O OCc07BlstIBGt0hpttlik9N68v8uwwIQpbL+w3xDRr1TMlGbZmC6jm/HU/lVw3Bqy5Kz Lr1vk1ct/UUv6PMMQLuAbt6L6b4UKldlFmaAHpwx6TXLGhJIubrlrXcA9Q3sPFQeNf40 zvBstS4xZYUe/k1tgU82m2n7WBb6TYLGfFPqjHJpG5gA0r57/qEiCXC8AVGf+XxWrHf9 Gp+O6dOuvsmjjO721ccKItviQXipHUADSEtJ6UOl/SS+xGEe8B0DSLVygC3WI9il3iX7 ZHKA== X-Gm-Message-State: APjAAAXscohlnnaF0xsC/4SnxOpKeRXnR62ZJFds4izDXgjgDkiNqyYI J9t2KgZWysDErUwmdXVl1j6Ok39qSqY= X-Google-Smtp-Source: APXvYqzh+bZx0x2hJ6H+2IUfINTGiZ1oaO9YVHm71WlEh7IuXsiNNUiGVu3CyaQNHQlVPhBeRqLCZQ== X-Received: by 2002:a1c:3d08:: with SMTP id k8mr3222367wma.119.1572949247668; Tue, 05 Nov 2019 02:20:47 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-96.fiber7.init7.net. [212.51.149.96]) by smtp.gmail.com with ESMTPSA id b186sm18453928wmb.21.2019.11.05.02.20.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Nov 2019 02:20:46 -0800 (PST) Date: Tue, 5 Nov 2019 11:20:45 +0100 From: Daniel Vetter To: Christian =?iso-8859-1?Q?K=F6nig?= Cc: dri-devel@lists.freedesktop.org, sumit.semwal@linaro.org, linaro-mm-sig@lists.linaro.org, linux-media@vger.kernel.org, intel-gfx@lists.freedesktop.org Subject: Re: [PATCH 1/5] dma-buf: add dynamic DMA-buf handling v14 Message-ID: <20191105102045.GC10326@phenom.ffwll.local> References: <20191029104049.9011-1-christian.koenig@amd.com> <20191029104049.9011-2-christian.koenig@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20191029104049.9011-2-christian.koenig@amd.com> X-Operating-System: Linux phenom 5.2.0-3-amd64 User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org On Tue, Oct 29, 2019 at 11:40:45AM +0100, Christian König wrote: > On the exporter side we add optional explicit pinning callbacks. Which are > called when the importer doesn't implement dynamic handling, move notification > or need the DMA-buf locked in place for its use case. > > On the importer side we add an optional move_notify callback. This callback is > used by the exporter to inform the importers that their mappings should be > destroyed as soon as possible. > > This allows the exporter to provide the mappings without the need to pin > the backing store. > > v2: don't try to invalidate mappings when the callback is NULL, > lock the reservation obj while using the attachments, > add helper to set the callback > v3: move flag for invalidation support into the DMA-buf, > use new attach_info structure to set the callback > v4: use importer_priv field instead of mangling exporter priv. > v5: drop invalidation_supported flag > v6: squash together with pin/unpin changes > v7: pin/unpin takes an attachment now > v8: nuke dma_buf_attachment_(map|unmap)_locked, > everything is now handled backward compatible > v9: always cache when export/importer don't agree on dynamic handling > v10: minimal style cleanup > v11: drop automatically re-entry avoidance > v12: rename callback to move_notify > v13: add might_lock in appropriate places > v14: rebase on separated locking change > > Signed-off-by: Christian König Bunch of nitpicks/safety check comments here, I'll post the big question stuff on the cover letter. > --- > drivers/dma-buf/dma-buf.c | 106 ++++++++++++++++++-- > drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 6 +- > include/linux/dma-buf.h | 78 ++++++++++++-- > 3 files changed, 170 insertions(+), 20 deletions(-) > > diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c > index d377b4ca66bf..ce293cee76ed 100644 > --- a/drivers/dma-buf/dma-buf.c > +++ b/drivers/dma-buf/dma-buf.c > @@ -529,6 +529,10 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info) > exp_info->ops->dynamic_mapping)) > return ERR_PTR(-EINVAL); > > + if (WARN_ON(!exp_info->ops->dynamic_mapping && > + (exp_info->ops->pin || exp_info->ops->unpin))) > + return ERR_PTR(-EINVAL); Imo make this stronger, have a dynamic mapping iff there's both a pin and unpin function. Otherwise this doesn't make a lot of sense to me. > + > if (!try_module_get(exp_info->owner)) > return ERR_PTR(-ENOENT); > > @@ -653,7 +657,8 @@ EXPORT_SYMBOL_GPL(dma_buf_put); > * calls attach() of dma_buf_ops to allow device-specific attach functionality > * @dmabuf: [in] buffer to attach device to. > * @dev: [in] device to be attached. > - * @dynamic_mapping: [in] calling convention for map/unmap > + * @importer_ops [in] importer operations for the attachment > + * @importer_priv [in] importer private pointer for the attachment > * > * Returns struct dma_buf_attachment pointer for this attachment. Attachments > * must be cleaned up by calling dma_buf_detach(). > @@ -669,7 +674,8 @@ EXPORT_SYMBOL_GPL(dma_buf_put); > */ > struct dma_buf_attachment * > dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev, > - bool dynamic_mapping) > + const struct dma_buf_attach_ops *importer_ops, > + void *importer_priv) > { > struct dma_buf_attachment *attach; > int ret; > @@ -683,7 +689,8 @@ dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev, > > attach->dev = dev; > attach->dmabuf = dmabuf; > - attach->dynamic_mapping = dynamic_mapping; > + attach->importer_ops = importer_ops; > + attach->importer_priv = importer_priv; > > if (dmabuf->ops->attach) { > ret = dmabuf->ops->attach(dmabuf, attach); > @@ -702,15 +709,19 @@ dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev, > dma_buf_is_dynamic(dmabuf)) { > struct sg_table *sgt; > > - if (dma_buf_is_dynamic(attach->dmabuf)) > + if (dma_buf_is_dynamic(attach->dmabuf)) { > dma_resv_lock(attach->dmabuf->resv, NULL); > + ret = dma_buf_pin(attach); > + if (ret) > + goto err_unlock; > + } > > sgt = dmabuf->ops->map_dma_buf(attach, DMA_BIDIRECTIONAL); > if (!sgt) > sgt = ERR_PTR(-ENOMEM); > if (IS_ERR(sgt)) { > ret = PTR_ERR(sgt); > - goto err_unlock; > + goto err_unpin; > } > if (dma_buf_is_dynamic(attach->dmabuf)) > dma_resv_unlock(attach->dmabuf->resv); > @@ -724,6 +735,10 @@ dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev, > kfree(attach); > return ERR_PTR(ret); > > +err_unpin: > + if (dma_buf_is_dynamic(attach->dmabuf)) > + dma_buf_unpin(attach); > + > err_unlock: > if (dma_buf_is_dynamic(attach->dmabuf)) > dma_resv_unlock(attach->dmabuf->resv); > @@ -744,7 +759,7 @@ EXPORT_SYMBOL_GPL(dma_buf_dynamic_attach); > struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf, > struct device *dev) > { > - return dma_buf_dynamic_attach(dmabuf, dev, false); > + return dma_buf_dynamic_attach(dmabuf, dev, NULL, NULL); > } > EXPORT_SYMBOL_GPL(dma_buf_attach); > > @@ -767,8 +782,10 @@ void dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach) > > dmabuf->ops->unmap_dma_buf(attach, attach->sgt, attach->dir); > > - if (dma_buf_is_dynamic(attach->dmabuf)) > + if (dma_buf_is_dynamic(attach->dmabuf)) { > + dma_buf_unpin(attach); > dma_resv_unlock(attach->dmabuf->resv); > + } > } > > dma_resv_lock(dmabuf->resv, NULL); > @@ -781,6 +798,44 @@ void dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach) > } > EXPORT_SYMBOL_GPL(dma_buf_detach); > > +/** > + * dma_buf_pin - Lock down the DMA-buf > + * > + * @attach: [in] attachment which should be pinned > + * > + * Returns: > + * 0 on success, negative error code on failure. > + */ > +int dma_buf_pin(struct dma_buf_attachment *attach) > +{ > + struct dma_buf *dmabuf = attach->dmabuf; > + int ret = 0; > + > + dma_resv_assert_held(dmabuf->resv); > + > + if (dmabuf->ops->pin) > + ret = dmabuf->ops->pin(attach); > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(dma_buf_pin); > + > +/** > + * dma_buf_unpin - Remove lock from DMA-buf > + * > + * @attach: [in] attachment which should be unpinned > + */ > +void dma_buf_unpin(struct dma_buf_attachment *attach) > +{ > + struct dma_buf *dmabuf = attach->dmabuf; > + > + dma_resv_assert_held(dmabuf->resv); > + > + if (dmabuf->ops->unpin) > + dmabuf->ops->unpin(attach); > +} > +EXPORT_SYMBOL_GPL(dma_buf_unpin); > + > /** > * dma_buf_map_attachment - Returns the scatterlist table of the attachment; > * mapped into _device_ address space. Is a wrapper for map_dma_buf() of the > @@ -800,6 +855,7 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach, > enum dma_data_direction direction) > { > struct sg_table *sg_table; > + int r; > > might_sleep(); > > @@ -821,13 +877,23 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach, > return attach->sgt; > } > > - if (dma_buf_is_dynamic(attach->dmabuf)) > + if (dma_buf_is_dynamic(attach->dmabuf)) { > dma_resv_assert_held(attach->dmabuf->resv); > + if (!attach->importer_ops->move_notify) { Imo just require ->move_notify for importers that give you an ops function. Doesn't really make sense to allow dynamic without support ->move_notify. > + r = dma_buf_pin(attach); > + if (r) > + return ERR_PTR(r); > + } > + } > > sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction); > if (!sg_table) > sg_table = ERR_PTR(-ENOMEM); > > + if (IS_ERR(sg_table) && dma_buf_is_dynamic(attach->dmabuf) && > + !attach->importer_ops->move_notify) > + dma_buf_unpin(attach); > + > if (!IS_ERR(sg_table) && attach->dmabuf->ops->cache_sgt_mapping) { > attach->sgt = sg_table; > attach->dir = direction; > @@ -866,9 +932,33 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach, > dma_resv_assert_held(attach->dmabuf->resv); > > attach->dmabuf->ops->unmap_dma_buf(attach, sg_table, direction); > + > + if (dma_buf_is_dynamic(attach->dmabuf) && > + !attach->importer_ops->move_notify) > + dma_buf_unpin(attach); > } > EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment); > > +/** > + * dma_buf_move_notify - notify attachments that DMA-buf is moving > + * > + * @dmabuf: [in] buffer which is moving > + * > + * Informs all attachmenst that they need to destroy and recreated all their > + * mappings. > + */ > +void dma_buf_move_notify(struct dma_buf *dmabuf) > +{ > + struct dma_buf_attachment *attach; > + > + dma_resv_assert_held(dmabuf->resv); > + > + list_for_each_entry(attach, &dmabuf->attachments, node) > + if (attach->importer_ops && attach->importer_ops->move_notify) > + attach->importer_ops->move_notify(attach); > +} > +EXPORT_SYMBOL_GPL(dma_buf_move_notify); > + > /** > * DOC: cpu access > * > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > index d5bcdfefbad6..8e5a68107556 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > @@ -415,6 +415,9 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf) > return ERR_PTR(ret); > } > > +static const struct dma_buf_attach_ops amdgpu_dma_buf_attach_ops = { > +}; > + > /** > * amdgpu_gem_prime_import - &drm_driver.gem_prime_import implementation > * @dev: DRM device > @@ -447,7 +450,8 @@ struct drm_gem_object *amdgpu_gem_prime_import(struct drm_device *dev, > if (IS_ERR(obj)) > return obj; > > - attach = dma_buf_dynamic_attach(dma_buf, dev->dev, true); > + attach = dma_buf_dynamic_attach(dma_buf, dev->dev, > + &amdgpu_dma_buf_attach_ops, NULL); > if (IS_ERR(attach)) { > drm_gem_object_put(obj); > return ERR_CAST(attach); > diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h > index af73f835c51c..7456bb937635 100644 > --- a/include/linux/dma-buf.h > +++ b/include/linux/dma-buf.h > @@ -93,14 +93,40 @@ struct dma_buf_ops { > */ > void (*detach)(struct dma_buf *, struct dma_buf_attachment *); > > + /** > + * @pin: > + * > + * This is called by dma_buf_pin and lets the exporter know that the > + * DMA-buf can't be moved any more. I think we should add a warning here that pinning is only ok for limited use-cases (like scanout or similar), and not as part of general buffer management. i915 uses temporary pins through it's execbuf management (and everywhere else), so we have a _lot_ of people in dri-devel with quite different ideas of what this might be for :-) > + * > + * This is called with the dmabuf->resv object locked. > + * > + * This callback is optional. > + * > + * Returns: > + * > + * 0 on success, negative error code on failure. > + */ > + int (*pin)(struct dma_buf_attachment *attach); > + > + /** > + * @unpin: > + * > + * This is called by dma_buf_unpin and lets the exporter know that the > + * DMA-buf can be moved again. > + * > + * This is called with the dmabuf->resv object locked. > + * > + * This callback is optional. > + */ > + void (*unpin)(struct dma_buf_attachment *attach); > + > /** > * @map_dma_buf: > * > * This is called by dma_buf_map_attachment() and is used to map a > * shared &dma_buf into device address space, and it is mandatory. It > - * can only be called if @attach has been called successfully. This > - * essentially pins the DMA buffer into place, and it cannot be moved > - * any more > + * can only be called if @attach has been called successfully. > * > * This call may sleep, e.g. when the backing storage first needs to be > * allocated, or moved to a location suitable for all currently attached > @@ -141,9 +167,6 @@ struct dma_buf_ops { > * > * This is called by dma_buf_unmap_attachment() and should unmap and > * release the &sg_table allocated in @map_dma_buf, and it is mandatory. > - * It should also unpin the backing storage if this is the last mapping > - * of the DMA buffer, it the exporter supports backing storage > - * migration. This is still valid for non-dynamic exporters. Imo keep but clarify that. > */ > void (*unmap_dma_buf)(struct dma_buf_attachment *, > struct sg_table *, > @@ -336,6 +359,34 @@ struct dma_buf { > } cb_excl, cb_shared; > }; > > +/** > + * struct dma_buf_attach_ops - importer operations for an attachment > + * @move_notify: [optional] notification that the DMA-buf is moving > + * > + * Attachment operations implemented by the importer. > + */ > +struct dma_buf_attach_ops { > + /** > + * @move_notify > + * > + * If this callback is provided the framework can avoid pinning the > + * backing store while mappings exists. > + * > + * This callback is called with the lock of the reservation object > + * associated with the dma_buf held and the mapping function must be > + * called with this lock held as well. This makes sure that no mapping > + * is created concurrently with an ongoing move operation. > + * > + * Mappings stay valid and are not directly affected by this callback. > + * But the DMA-buf can now be in a different physical location, so all > + * mappings should be destroyed and re-created as soon as possible. > + * > + * New mappings can be created after this callback returns, and will > + * point to the new location of the DMA-buf. > + */ > + void (*move_notify)(struct dma_buf_attachment *attach); > +}; > + > /** > * struct dma_buf_attachment - holds device-buffer attachment data > * @dmabuf: buffer for this attachment. > @@ -344,8 +395,9 @@ struct dma_buf { > * @sgt: cached mapping. > * @dir: direction of cached mapping. > * @priv: exporter specific attachment data. > - * @dynamic_mapping: true if dma_buf_map/unmap_attachment() is called with the > - * dma_resv lock held. > + * @importer_ops: importer operations for this attachment, if provided > + * dma_buf_map/unmap_attachment() must be called with the dma_resv lock held. > + * @importer_priv: importer specific attachment data. > * > * This structure holds the attachment information between the dma_buf buffer > * and its user device(s). The list contains one attachment struct per device > @@ -362,7 +414,8 @@ struct dma_buf_attachment { > struct list_head node; > struct sg_table *sgt; > enum dma_data_direction dir; > - bool dynamic_mapping; > + const struct dma_buf_attach_ops *importer_ops; > + void *importer_priv; > void *priv; > }; > > @@ -438,16 +491,19 @@ static inline bool dma_buf_is_dynamic(struct dma_buf *dmabuf) > static inline bool > dma_buf_attachment_is_dynamic(struct dma_buf_attachment *attach) > { > - return attach->dynamic_mapping; > + return !!attach->importer_ops; Hm why not do the same for exporters, and make them dynamic iff they have pin/unpin? -Daniel > } > > struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf, > struct device *dev); > struct dma_buf_attachment * > dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev, > - bool dynamic_mapping); > + const struct dma_buf_attach_ops *importer_ops, > + void *importer_priv); > void dma_buf_detach(struct dma_buf *dmabuf, > struct dma_buf_attachment *attach); > +int dma_buf_pin(struct dma_buf_attachment *attach); > +void dma_buf_unpin(struct dma_buf_attachment *attach); > > struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info); > > -- > 2.17.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch