From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Thompson Subject: Re: [PATCH v2] dma-buf: cleanup dma_buf_export() to make it easily extensible Date: Wed, 28 Jan 2015 11:20:50 +0000 Message-ID: <54C8C612.1030701@linaro.org> References: <1422424845-14906-1-git-send-email-sumit.semwal@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1422424845-14906-1-git-send-email-sumit.semwal@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sumit Semwal , linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-arm-kernel@lists.infradead.org, rmk+kernel@arm.linux.org.uk, airlied@linux.ie, kgene@kernel.org, daniel.vetter@intel.com, thierry.reding@gmail.com, pawel@osciak.com, m.szyprowski@samsung.com, mchehab@osg.samsung.com, gregkh@linuxfoundation.org Cc: linux-tegra@vger.kernel.org, intel-gfx@lists.freedesktop.org, linaro-kernel@lists.linaro.org List-Id: linux-tegra@vger.kernel.org T24gMjgvMDEvMTUgMDY6MDAsIFN1bWl0IFNlbXdhbCB3cm90ZToKPiBBdCBwcmVzZW50LCBkbWFf YnVmX2V4cG9ydCgpIHRha2VzIGEgc2VyaWVzIG9mIHBhcmFtZXRlcnMsIHdoaWNoCj4gbWFrZXMg aXQgZGlmZmljdWx0IHRvIGFkZCBhbnkgbmV3IHBhcmFtZXRlcnMgZm9yIGV4cG9ydGVycywgaWYg cmVxdWlyZWQuCj4gCj4gTWFrZSBpdCBzaW1wbGVyIGJ5IG1vdmluZyBhbGwgdGhlc2UgcGFyYW1l dGVycyBpbnRvIGEgc3RydWN0LCBhbmQgcGFzcwo+IHRoZSBzdHJ1Y3QgKiBhcyBwYXJhbWV0ZXIg dG8gZG1hX2J1Zl9leHBvcnQoKS4KPiAKPiBXaGlsZSBhdCBpdCwgdW5pdGUgZG1hX2J1Zl9leHBv cnRfbmFtZWQoKSB3aXRoIGRtYV9idWZfZXhwb3J0KCksIGFuZAo+IGNoYW5nZSBhbGwgY2FsbGVy cyBhY2NvcmRpbmdseS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBTdW1pdCBTZW13YWwgPHN1bWl0LnNl bXdhbEBsaW5hcm8ub3JnPgo+IC0tLQo+IHYyOiBhZGQgbWFjcm8gdG8gemVybyBvdXQgbG9jYWwg c3RydWN0LCBhbmQgZmlsbCBLQlVJTERfTU9ETkFNRSBieSBkZWZhdWx0Cj4gCj4gIGRyaXZlcnMv ZG1hLWJ1Zi9kbWEtYnVmLmMgICAgICAgICAgICAgICAgICAgICAgfCA0NyArKysrKysrKysrKysr LS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vYXJtYWRhL2FybWFkYV9nZW0uYyAgICAg ICAgICAgIHwgMTAgKysrKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fcHJpbWUuYyAgICAgICAg ICAgICAgICAgICAgfCAxMiArKysrLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9z X2RybV9kbWFidWYuYyAgICAgfCAgOSArKystLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9kbWFidWYuYyAgICAgICAgIHwgMTAgKysrKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9vbWFw ZHJtL29tYXBfZ2VtX2RtYWJ1Zi5jICAgICAgfCAgOSArKysrLQo+ICBkcml2ZXJzL2dwdS9kcm0v dGVncmEvZ2VtLmMgICAgICAgICAgICAgICAgICAgIHwgMTAgKysrKy0tCj4gIGRyaXZlcnMvZ3B1 L2RybS90dG0vdHRtX29iamVjdC5jICAgICAgICAgICAgICAgfCAgOSArKystLQo+ICBkcml2ZXJz L2dwdS9kcm0vdWRsL3VkbF9kbWFidWYuYyAgICAgICAgICAgICAgIHwgIDkgKysrKy0KPiAgZHJp dmVycy9tZWRpYS92NGwyLWNvcmUvdmlkZW9idWYyLWRtYS1jb250aWcuYyB8ICA4ICsrKystCj4g IGRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi1kbWEtc2cuYyAgICAgfCAgOCArKysr LQo+ICBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItdm1hbGxvYy5jICAgIHwgIDgg KysrKy0KPiAgZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbi5jICAgICAgICAgICAgICB8 ICA5ICsrKy0tCj4gIGluY2x1ZGUvbGludXgvZG1hLWJ1Zi5oICAgICAgICAgICAgICAgICAgICAg ICAgfCAzNSArKysrKysrKysrKysrKystLS0tCj4gIDE0IGZpbGVzIGNoYW5nZWQsIDE0MyBpbnNl cnRpb25zKCspLCA1MCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEt YnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPiBpbmRleCA1YmUyMjVj MmJhOTguLjZkM2RmM2RkOTMxMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1 Zi5jCj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwo+IEBAIC0yNjUsNyArMjY1LDcg QEAgc3RhdGljIGlubGluZSBpbnQgaXNfZG1hX2J1Zl9maWxlKHN0cnVjdCBmaWxlICpmaWxlKQo+ ICB9Cj4gIAo+ICAvKioKPiAtICogZG1hX2J1Zl9leHBvcnRfbmFtZWQgLSBDcmVhdGVzIGEgbmV3 IGRtYV9idWYsIGFuZCBhc3NvY2lhdGVzIGFuIGFub24gZmlsZQo+ICsgKiBkbWFfYnVmX2V4cG9y dCAtIENyZWF0ZXMgYSBuZXcgZG1hX2J1ZiwgYW5kIGFzc29jaWF0ZXMgYW4gYW5vbiBmaWxlCj4g ICAqIHdpdGggdGhpcyBidWZmZXIsIHNvIGl0IGNhbiBiZSBleHBvcnRlZC4KPiAgICogQWxzbyBj b25uZWN0IHRoZSBhbGxvY2F0b3Igc3BlY2lmaWMgZGF0YSBhbmQgb3BzIHRvIHRoZSBidWZmZXIu Cj4gICAqIEFkZGl0aW9uYWxseSwgcHJvdmlkZSBhIG5hbWUgc3RyaW5nIGZvciBleHBvcnRlcjsg dXNlZnVsIGluIGRlYnVnZ2luZy4KPiBAQCAtMjc3LDMxICsyNzcsMzIgQEAgc3RhdGljIGlubGlu ZSBpbnQgaXNfZG1hX2J1Zl9maWxlKHN0cnVjdCBmaWxlICpmaWxlKQo+ICAgKiBAZXhwX25hbWU6 CVtpbl0JbmFtZSBvZiB0aGUgZXhwb3J0aW5nIG1vZHVsZSAtIHVzZWZ1bCBmb3IgZGVidWdnaW5n Lgo+ICAgKiBAcmVzdjoJW2luXQlyZXNlcnZhdGlvbi1vYmplY3QsIE5VTEwgdG8gYWxsb2NhdGUg ZGVmYXVsdCBvbmUuCj4gICAqCj4gKyAqIEFsbCB0aGUgYWJvdmUgaW5mbyBjb21lcyBmcm9tIHN0 cnVjdCBkbWFfYnVmX2V4cG9ydF9pbmZvLgo+ICsgKgo+ICAgKiBSZXR1cm5zLCBvbiBzdWNjZXNz LCBhIG5ld2x5IGNyZWF0ZWQgZG1hX2J1ZiBvYmplY3QsIHdoaWNoIHdyYXBzIHRoZQo+ICAgKiBz dXBwbGllZCBwcml2YXRlIGRhdGEgYW5kIG9wZXJhdGlvbnMgZm9yIGRtYV9idWZfb3BzLiBPbiBl aXRoZXIgbWlzc2luZwo+ICAgKiBvcHMsIG9yIGVycm9yIGluIGFsbG9jYXRpbmcgc3RydWN0IGRt YV9idWYsIHdpbGwgcmV0dXJuIG5lZ2F0aXZlIGVycm9yLgo+ICAgKgo+ICAgKi8KPiAtc3RydWN0 IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0X25hbWVkKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBk bWFfYnVmX29wcyAqb3BzLAo+IC0JCQkJc2l6ZV90IHNpemUsIGludCBmbGFncywgY29uc3QgY2hh ciAqZXhwX25hbWUsCj4gLQkJCQlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2KQo+ICtz dHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8g KmV4cF9pbmZvKQo+ICB7Cj4gIAlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmOwo+ICAJc3RydWN0IGZp bGUgKmZpbGU7Cj4gIAlzaXplX3QgYWxsb2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZG1hX2J1Zik7 Cj4gLQlpZiAoIXJlc3YpCj4gKwlpZiAoIWV4cF9pbmZvLT5yZXN2KQo+ICAJCWFsbG9jX3NpemUg Kz0gc2l6ZW9mKHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QpOwo+ICAJZWxzZQo+ICAJCS8qIHBy ZXZlbnQgJmRtYV9idWZbMV0gPT0gZG1hX2J1Zi0+cmVzdiAqLwo+ICAJCWFsbG9jX3NpemUgKz0g MTsKPiAgCj4gLQlpZiAoV0FSTl9PTighcHJpdiB8fCAhb3BzCj4gLQkJCSAgfHwgIW9wcy0+bWFw X2RtYV9idWYKPiAtCQkJICB8fCAhb3BzLT51bm1hcF9kbWFfYnVmCj4gLQkJCSAgfHwgIW9wcy0+ cmVsZWFzZQo+IC0JCQkgIHx8ICFvcHMtPmttYXBfYXRvbWljCj4gLQkJCSAgfHwgIW9wcy0+a21h cAo+IC0JCQkgIHx8ICFvcHMtPm1tYXApKSB7Cj4gKwlpZiAoV0FSTl9PTighZXhwX2luZm8tPnBy aXYKPiArCQkJICB8fCAhZXhwX2luZm8tPm9wcwo+ICsJCQkgIHx8ICFleHBfaW5mby0+b3BzLT5t YXBfZG1hX2J1Zgo+ICsJCQkgIHx8ICFleHBfaW5mby0+b3BzLT51bm1hcF9kbWFfYnVmCj4gKwkJ CSAgfHwgIWV4cF9pbmZvLT5vcHMtPnJlbGVhc2UKPiArCQkJICB8fCAhZXhwX2luZm8tPm9wcy0+ a21hcF9hdG9taWMKPiArCQkJICB8fCAhZXhwX2luZm8tPm9wcy0+a21hcAo+ICsJCQkgIHx8ICFl eHBfaW5mby0+b3BzLT5tbWFwKSkgewo+ICAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICAJ fQo+ICAKPiBAQCAtMzA5LDIxICszMTAsMjIgQEAgc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhw b3J0X25hbWVkKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyAqb3BzLAo+ICAJ aWYgKGRtYWJ1ZiA9PSBOVUxMKQo+ICAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICAKPiAt CWRtYWJ1Zi0+cHJpdiA9IHByaXY7Cj4gLQlkbWFidWYtPm9wcyA9IG9wczsKPiAtCWRtYWJ1Zi0+ c2l6ZSA9IHNpemU7Cj4gLQlkbWFidWYtPmV4cF9uYW1lID0gZXhwX25hbWU7Cj4gKwlkbWFidWYt PnByaXYgPSBleHBfaW5mby0+cHJpdjsKPiArCWRtYWJ1Zi0+b3BzID0gZXhwX2luZm8tPm9wczsK PiArCWRtYWJ1Zi0+c2l6ZSA9IGV4cF9pbmZvLT5zaXplOwo+ICsJZG1hYnVmLT5leHBfbmFtZSA9 IGV4cF9pbmZvLT5leHBfbmFtZTsKPiAgCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRtYWJ1Zi0+cG9s bCk7Cj4gIAlkbWFidWYtPmNiX2V4Y2wucG9sbCA9IGRtYWJ1Zi0+Y2Jfc2hhcmVkLnBvbGwgPSAm ZG1hYnVmLT5wb2xsOwo+ICAJZG1hYnVmLT5jYl9leGNsLmFjdGl2ZSA9IGRtYWJ1Zi0+Y2Jfc2hh cmVkLmFjdGl2ZSA9IDA7Cj4gIAo+IC0JaWYgKCFyZXN2KSB7Cj4gLQkJcmVzdiA9IChzdHJ1Y3Qg cmVzZXJ2YXRpb25fb2JqZWN0ICopJmRtYWJ1ZlsxXTsKPiAtCQlyZXNlcnZhdGlvbl9vYmplY3Rf aW5pdChyZXN2KTsKPiArCWlmICghZXhwX2luZm8tPnJlc3YpIHsKPiArCQlleHBfaW5mby0+cmVz diA9IChzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICopJmRtYWJ1ZlsxXTsKPiArCQlyZXNlcnZh dGlvbl9vYmplY3RfaW5pdChleHBfaW5mby0+cmVzdik7Cj4gIAl9Cj4gLQlkbWFidWYtPnJlc3Yg PSByZXN2Owo+ICsJZG1hYnVmLT5yZXN2ID0gZXhwX2luZm8tPnJlc3Y7Cj4gIAo+IC0JZmlsZSA9 IGFub25faW5vZGVfZ2V0ZmlsZSgiZG1hYnVmIiwgJmRtYV9idWZfZm9wcywgZG1hYnVmLCBmbGFn cyk7Cj4gKwlmaWxlID0gYW5vbl9pbm9kZV9nZXRmaWxlKCJkbWFidWYiLCAmZG1hX2J1Zl9mb3Bz LCBkbWFidWYsCj4gKwkJCQkJZXhwX2luZm8tPmZsYWdzKTsKPiAgCWlmIChJU19FUlIoZmlsZSkp IHsKPiAgCQlrZnJlZShkbWFidWYpOwo+ICAJCXJldHVybiBFUlJfQ0FTVChmaWxlKTsKPiBAQCAt MzQxLDggKzM0Myw3IEBAIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydF9uYW1lZCh2b2lk ICpwcml2LCBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgKm9wcywKPiAgCj4gIAlyZXR1cm4gZG1h YnVmOwo+ICB9Cj4gLUVYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfZXhwb3J0X25hbWVkKTsKPiAt Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfZXhwb3J0KTsKPiAgCj4gIC8qKgo+ICAgKiBk bWFfYnVmX2ZkIC0gcmV0dXJucyBhIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIGRtYV9i dWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFfZ2VtLmMgYi9k cml2ZXJzL2dwdS9kcm0vYXJtYWRhL2FybWFkYV9nZW0uYwo+IGluZGV4IGVmNWZlZWVjZWM4NC4u NTgwZTEwYWNhYTNhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hcm1hZGEvYXJtYWRh X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFfZ2VtLmMKPiBAQCAt NTM4LDggKzUzOCwxNCBAQCBzdHJ1Y3QgZG1hX2J1ZiAqCj4gIGFybWFkYV9nZW1fcHJpbWVfZXhw b3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ ICAJaW50IGZsYWdzKQo+ICB7Cj4gLQlyZXR1cm4gZG1hX2J1Zl9leHBvcnQob2JqLCAmYXJtYWRh X2dlbV9wcmltZV9kbWFidWZfb3BzLCBvYmotPnNpemUsCj4gLQkJCSAgICAgIE9fUkRXUiwgTlVM TCk7Cj4gKwlERUZJTkVfRE1BX0JVRl9FWFBPUlRfSU5GTyhleHBfaW5mbyk7Cj4gKwo+ICsJZXhw X2luZm8ub3BzID0gJmFybWFkYV9nZW1fcHJpbWVfZG1hYnVmX29wczsKPiArCWV4cF9pbmZvLnNp emUgPSBvYmotPnNpemU7Cj4gKwlleHBfaW5mby5mbGFncyA9IE9fUkRXUjsKPiArCWV4cF9pbmZv LnByaXYgPSBvYmo7Cj4gKwo+ICsJcmV0dXJuIGRtYV9idWZfZXhwb3J0KCZleHBfaW5mbyk7Cj4g IH0KPiAgCj4gIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fcHJpbWUuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJpbWUuYwo+IGluZGV4 IDc0ODJiMDZjZDA4Zi4uN2ZlYzE5MWI0NWY3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fcHJpbWUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJpbWUuYwo+IEBAIC0z MzksMTMgKzMzOSwxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIGRybV9nZW1f cHJpbWVfZG1hYnVmX29wcyA9ICB7Cj4gIHN0cnVjdCBkbWFfYnVmICpkcm1fZ2VtX3ByaW1lX2V4 cG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCQkJICAgICBzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iaiwgaW50IGZsYWdzKQo+ICB7Cj4gLQlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0 ICpyb2JqID0gTlVMTDsKPiArCURFRklORV9ETUFfQlVGX0VYUE9SVF9JTkZPKGV4cF9pbmZvKTsK PiArCj4gKwlleHBfaW5mby5vcHMgPSAmZHJtX2dlbV9wcmltZV9kbWFidWZfb3BzOwo+ICsJZXhw X2luZm8uc2l6ZSA9IG9iai0+c2l6ZTsKPiArCWV4cF9pbmZvLmZsYWdzID0gZmxhZ3M7Cj4gKwll eHBfaW5mby5wcml2ID0gb2JqOwo+ICAKPiAgCWlmIChkZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3Jl c19vYmopCj4gLQkJcm9iaiA9IGRldi0+ZHJpdmVyLT5nZW1fcHJpbWVfcmVzX29iaihvYmopOwo+ ICsJCWV4cF9pbmZvLnJlc3YgPSBkZXYtPmRyaXZlci0+Z2VtX3ByaW1lX3Jlc19vYmoob2JqKTsK PiAgCj4gLQlyZXR1cm4gZG1hX2J1Zl9leHBvcnQob2JqLCAmZHJtX2dlbV9wcmltZV9kbWFidWZf b3BzLCBvYmotPnNpemUsCj4gLQkJCSAgICAgIGZsYWdzLCByb2JqKTsKPiArCXJldHVybiBkbWFf YnVmX2V4cG9ydCgmZXhwX2luZm8pOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9wcmlt ZV9leHBvcnQpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlu b3NfZHJtX2RtYWJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2RtYWJ1 Zi5jCj4gaW5kZXggNjAxOTJlZDU0NGYwLi5mYzI5M2ExNzlmMzYgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2RtYWJ1Zi5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2RtYWJ1Zi5jCj4gQEAgLTE4NSw5ICsxODUsMTQgQEAg c3RydWN0IGRtYV9idWYgKmV4eW5vc19kbWFidWZfcHJpbWVfZXhwb3J0KHN0cnVjdCBkcm1fZGV2 aWNlICpkcm1fZGV2LAo+ICAJCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBmbGFn cykKPiAgewo+ICAJc3RydWN0IGV4eW5vc19kcm1fZ2VtX29iaiAqZXh5bm9zX2dlbV9vYmogPSB0 b19leHlub3NfZ2VtX29iaihvYmopOwo+ICsJREVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhw X2luZm8pOwo+ICAKPiAtCXJldHVybiBkbWFfYnVmX2V4cG9ydChvYmosICZleHlub3NfZG1hYnVm X29wcywKPiAtCQkJCWV4eW5vc19nZW1fb2JqLT5iYXNlLnNpemUsIGZsYWdzLCBOVUxMKTsKPiAr CWV4cF9pbmZvLm9wcyA9ICZleHlub3NfZG1hYnVmX29wczsKPiArCWV4cF9pbmZvLnNpemUgPSBl eHlub3NfZ2VtX29iai0+YmFzZS5zaXplOwo+ICsJZXhwX2luZm8uZmxhZ3MgPSBmbGFnczsKPiAr CWV4cF9pbmZvLnByaXYgPSBvYmo7Cj4gKwo+ICsJcmV0dXJuIGRtYV9idWZfZXhwb3J0KCZleHBf aW5mbyk7Cj4gIH0KPiAgCj4gIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZXh5bm9zX2RtYWJ1Zl9w cmltZV9pbXBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RtYWJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZG1hYnVmLmMKPiBpbmRleCA4MmExZjRiNTc3NzguLjc5OThkYTI3YzUwMCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kbWFidWYuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RtYWJ1Zi5jCj4gQEAgLTIzMCw2ICsy MzAsMTMgQEAgc3RydWN0IGRtYV9idWYgKmk5MTVfZ2VtX3ByaW1lX2V4cG9ydChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ICAJCQkJICAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2Jq LCBpbnQgZmxhZ3MpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB0 b19pbnRlbF9ibyhnZW1fb2JqKTsKPiArCURFRklORV9ETUFfQlVGX0VYUE9SVF9JTkZPKGV4cF9p bmZvKTsKPiArCj4gKwlleHBfaW5mby5vcHMgPSAmaTkxNV9kbWFidWZfb3BzOwo+ICsJZXhwX2lu Zm8uc2l6ZSA9IGdlbV9vYmotPnNpemU7Cj4gKwlleHBfaW5mby5mbGFncyA9IGZsYWdzOwo+ICsJ ZXhwX2luZm8ucHJpdiA9IGdlbV9vYmo7Cj4gKwo+ICAKPiAgCWlmIChvYmotPm9wcy0+ZG1hYnVm X2V4cG9ydCkgewo+ICAJCWludCByZXQgPSBvYmotPm9wcy0+ZG1hYnVmX2V4cG9ydChvYmopOwo+ IEBAIC0yMzcsOCArMjQ0LDcgQEAgc3RydWN0IGRtYV9idWYgKmk5MTVfZ2VtX3ByaW1lX2V4cG9y dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICAJ fQo+ICAKPiAtCXJldHVybiBkbWFfYnVmX2V4cG9ydChnZW1fb2JqLCAmaTkxNV9kbWFidWZfb3Bz LCBnZW1fb2JqLT5zaXplLCBmbGFncywKPiAtCQkJICAgICAgTlVMTCk7Cj4gKwlyZXR1cm4gZG1h X2J1Zl9leHBvcnQoJmV4cF9pbmZvKTsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBpOTE1X2dlbV9v YmplY3RfZ2V0X3BhZ2VzX2RtYWJ1ZihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2dlbV9kbWFidWYuYyBi L2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZ2VtX2RtYWJ1Zi5jCj4gaW5kZXggYTJkYmZi MTczN2I0Li41ODc0YzU4ZTcyYzEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBk cm0vb21hcF9nZW1fZG1hYnVmLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFw X2dlbV9kbWFidWYuYwo+IEBAIC0xNzEsNyArMTcxLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2J1 Zl9vcHMgb21hcF9kbWFidWZfb3BzID0gewo+ICBzdHJ1Y3QgZG1hX2J1ZiAqb21hcF9nZW1fcHJp bWVfZXhwb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmosIGludCBmbGFncykKPiAgewo+IC0JcmV0dXJuIGRtYV9idWZfZXhwb3J0KG9iaiwg Jm9tYXBfZG1hYnVmX29wcywgb2JqLT5zaXplLCBmbGFncywgTlVMTCk7Cj4gKwlERUZJTkVfRE1B X0JVRl9FWFBPUlRfSU5GTyhleHBfaW5mbyk7Cj4gKwo+ICsJZXhwX2luZm8ub3BzID0gJm9tYXBf ZG1hYnVmX29wczsKPiArCWV4cF9pbmZvLnNpemUgPSBvYmotPnNpemU7Cj4gKwlleHBfaW5mby5m bGFncyA9IGZsYWdzOwo+ICsJZXhwX2luZm8ucHJpdiA9IG9iajsKPiArCj4gKwlyZXR1cm4gZG1h X2J1Zl9leHBvcnQoJmV4cF9pbmZvKTsKPiAgfQo+ICAKPiAgc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvbWFwX2dlbV9wcmltZV9pbXBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3Jh L2dlbS5jCj4gaW5kZXggODc3N2I3Zjc1NzkxLi4xZjg5NWI5NTNmOGYgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3Jh L2dlbS5jCj4gQEAgLTY1OCw4ICs2NTgsMTQgQEAgc3RydWN0IGRtYV9idWYgKnRlZ3JhX2dlbV9w cmltZV9leHBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPiAgCQkJCSAgICAgICBzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKmdlbSwKPiAgCQkJCSAgICAgICBpbnQgZmxhZ3MpCj4gIHsKPiAtCXJl dHVybiBkbWFfYnVmX2V4cG9ydChnZW0sICZ0ZWdyYV9nZW1fcHJpbWVfZG1hYnVmX29wcywgZ2Vt LT5zaXplLAo+IC0JCQkgICAgICBmbGFncywgTlVMTCk7Cj4gKwlERUZJTkVfRE1BX0JVRl9FWFBP UlRfSU5GTyhleHBfaW5mbyk7Cj4gKwo+ICsJZXhwX2luZm8ub3BzID0gJnRlZ3JhX2dlbV9wcmlt ZV9kbWFidWZfb3BzOwo+ICsJZXhwX2luZm8uc2l6ZSA9IGdlbS0+c2l6ZTsKPiArCWV4cF9pbmZv LmZsYWdzID0gZmxhZ3M7Cj4gKwlleHBfaW5mby5wcml2ID0gZ2VtOwo+ICsKPiArCXJldHVybiBk bWFfYnVmX2V4cG9ydCgmZXhwX2luZm8pOwo+ICB9Cj4gIAo+ICBzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKnRlZ3JhX2dlbV9wcmltZV9pbXBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9k cm0vdHRtL3R0bV9vYmplY3QuYwo+IGluZGV4IDEyYzg3MTEwZGIzYS4uNGY1ZmE4ZDY1ZmU5IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX29iamVjdC5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL3R0bS90dG1fb2JqZWN0LmMKPiBAQCAtNjgzLDYgKzY4MywxMiBAQCBpbnQg dHRtX3ByaW1lX2hhbmRsZV90b19mZChzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKPiAg Cj4gIAlkbWFfYnVmID0gcHJpbWUtPmRtYV9idWY7Cj4gIAlpZiAoIWRtYV9idWYgfHwgIWdldF9k bWFfYnVmX3VubGVzc19kb29tZWQoZG1hX2J1ZikpIHsKPiArCQlERUZJTkVfRE1BX0JVRl9FWFBP UlRfSU5GTyhleHBfaW5mbyk7Cj4gKwo+ICsJCWV4cF9pbmZvLm9wcyA9ICZ0ZGV2LT5vcHM7Cj4g KwkJZXhwX2luZm8uc2l6ZSA9IHByaW1lLT5zaXplOwo+ICsJCWV4cF9pbmZvLmZsYWdzID0gZmxh Z3M7Cj4gKwkJZXhwX2luZm8ucHJpdiA9IHByaW1lOwo+ICAKPiAgCQkvKgo+ICAJCSAqIE5lZWQg dG8gY3JlYXRlIGEgbmV3IGRtYV9idWYsIHdpdGggbWVtb3J5IGFjY291bnRpbmcuCj4gQEAgLTY5 NCw4ICs3MDAsNyBAQCBpbnQgdHRtX3ByaW1lX2hhbmRsZV90b19mZChzdHJ1Y3QgdHRtX29iamVj dF9maWxlICp0ZmlsZSwKPiAgCQkJZ290byBvdXRfdW5yZWY7Cj4gIAkJfQo+ICAKPiAtCQlkbWFf YnVmID0gZG1hX2J1Zl9leHBvcnQocHJpbWUsICZ0ZGV2LT5vcHMsCj4gLQkJCQkJIHByaW1lLT5z aXplLCBmbGFncywgTlVMTCk7Cj4gKwkJZG1hX2J1ZiA9IGRtYV9idWZfZXhwb3J0KCZleHBfaW5m byk7Cj4gIAkJaWYgKElTX0VSUihkbWFfYnVmKSkgewo+ICAJCQlyZXQgPSBQVFJfRVJSKGRtYV9i dWYpOwo+ICAJCQl0dG1fbWVtX2dsb2JhbF9mcmVlKHRkZXYtPm1lbV9nbG9iLAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9kbWFidWYuYyBiL2RyaXZlcnMvZ3B1L2RybS91 ZGwvdWRsX2RtYWJ1Zi5jCj4gaW5kZXggYWM4YTY2YjRkZmMyLi5lMjI0M2VkZDFjZTMgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZG1hYnVmLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vdWRsL3VkbF9kbWFidWYuYwo+IEBAIC0yMDIsNyArMjAyLDE0IEBAIHN0YXRpYyBz dHJ1Y3QgZG1hX2J1Zl9vcHMgdWRsX2RtYWJ1Zl9vcHMgPSB7Cj4gIHN0cnVjdCBkbWFfYnVmICp1 ZGxfZ2VtX3ByaW1lX2V4cG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCQkJICAgICBz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGZsYWdzKQo+ICB7Cj4gLQlyZXR1cm4gZG1h X2J1Zl9leHBvcnQob2JqLCAmdWRsX2RtYWJ1Zl9vcHMsIG9iai0+c2l6ZSwgZmxhZ3MsIE5VTEwp Owo+ICsJREVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pOwo+ICsKPiArCWV4cF9p bmZvLm9wcyA9ICZ1ZGxfZG1hYnVmX29wczsKPiArCWV4cF9pbmZvLnNpemUgPSBvYmotPnNpemU7 Cj4gKwlleHBfaW5mby5mbGFncyA9IGZsYWdzOwo+ICsJZXhwX2luZm8ucHJpdiA9IG9iajsKPiAr Cj4gKwlyZXR1cm4gZG1hX2J1Zl9leHBvcnQoJmV4cF9pbmZvKTsKPiAgfQo+ICAKPiAgc3RhdGlj IGludCB1ZGxfcHJpbWVfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi1kbWEtY29udGlnLmMgYi9kcml2 ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItZG1hLWNvbnRpZy5jCj4gaW5kZXggYjQ4MWQy MGM4MzcyLi40YWQ5MmExNDc5MTkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZWRpYS92NGwyLWNv cmUvdmlkZW9idWYyLWRtYS1jb250aWcuYwo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3Jl L3ZpZGVvYnVmMi1kbWEtY29udGlnLmMKPiBAQCAtNDAyLDYgKzQwMiwxMiBAQCBzdGF0aWMgc3Ry dWN0IGRtYV9idWYgKnZiMl9kY19nZXRfZG1hYnVmKHZvaWQgKmJ1Zl9wcml2LCB1bnNpZ25lZCBs b25nIGZsYWdzKQo+ICB7Cj4gIAlzdHJ1Y3QgdmIyX2RjX2J1ZiAqYnVmID0gYnVmX3ByaXY7Cj4g IAlzdHJ1Y3QgZG1hX2J1ZiAqZGJ1ZjsKPiArCURFRklORV9ETUFfQlVGX0VYUE9SVF9JTkZPKGV4 cF9pbmZvKTsKPiArCj4gKwlleHBfaW5mby5vcHMgPSAmdmIyX2RjX2RtYWJ1Zl9vcHM7Cj4gKwll eHBfaW5mby5zaXplID0gYnVmLT5zaXplOwo+ICsJZXhwX2luZm8uZmxhZ3MgPSBmbGFnczsKPiAr CWV4cF9pbmZvLnByaXYgPSBidWY7Cj4gIAo+ICAJaWYgKCFidWYtPnNndF9iYXNlKQo+ICAJCWJ1 Zi0+c2d0X2Jhc2UgPSB2YjJfZGNfZ2V0X2Jhc2Vfc2d0KGJ1Zik7Cj4gQEAgLTQwOSw3ICs0MTUs NyBAQCBzdGF0aWMgc3RydWN0IGRtYV9idWYgKnZiMl9kY19nZXRfZG1hYnVmKHZvaWQgKmJ1Zl9w cml2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+ICAJaWYgKFdBUk5fT04oIWJ1Zi0+c2d0X2Jhc2Up KQo+ICAJCXJldHVybiBOVUxMOwo+ICAKPiAtCWRidWYgPSBkbWFfYnVmX2V4cG9ydChidWYsICZ2 YjJfZGNfZG1hYnVmX29wcywgYnVmLT5zaXplLCBmbGFncywgTlVMTCk7Cj4gKwlkYnVmID0gZG1h X2J1Zl9leHBvcnQoJmV4cF9pbmZvKTsKPiAgCWlmIChJU19FUlIoZGJ1ZikpCj4gIAkJcmV0dXJu IE5VTEw7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1 ZjItZG1hLXNnLmMgYi9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItZG1hLXNnLmMK PiBpbmRleCBiMTgzOGFiYjZkMDAuLjQ1YzcwOGU0NjNiOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L21lZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItZG1hLXNnLmMKPiArKysgYi9kcml2ZXJzL21lZGlh L3Y0bDItY29yZS92aWRlb2J1ZjItZG1hLXNnLmMKPiBAQCAtNTgzLDExICs1ODMsMTcgQEAgc3Rh dGljIHN0cnVjdCBkbWFfYnVmICp2YjJfZG1hX3NnX2dldF9kbWFidWYodm9pZCAqYnVmX3ByaXYs IHVuc2lnbmVkIGxvbmcgZmxhZ3MKPiAgewo+ICAJc3RydWN0IHZiMl9kbWFfc2dfYnVmICpidWYg PSBidWZfcHJpdjsKPiAgCXN0cnVjdCBkbWFfYnVmICpkYnVmOwo+ICsJREVGSU5FX0RNQV9CVUZf RVhQT1JUX0lORk8oZXhwX2luZm8pOwo+ICsKPiArCWV4cF9pbmZvLm9wcyA9ICZ2YjJfZG1hX3Nn X2RtYWJ1Zl9vcHM7Cj4gKwlleHBfaW5mby5zaXplID0gYnVmLT5zaXplOwo+ICsJZXhwX2luZm8u ZmxhZ3MgPSBmbGFnczsKPiArCWV4cF9pbmZvLnByaXYgPSBidWY7Cj4gIAo+ICAJaWYgKFdBUk5f T04oIWJ1Zi0+ZG1hX3NndCkpCj4gIAkJcmV0dXJuIE5VTEw7Cj4gIAo+IC0JZGJ1ZiA9IGRtYV9i dWZfZXhwb3J0KGJ1ZiwgJnZiMl9kbWFfc2dfZG1hYnVmX29wcywgYnVmLT5zaXplLCBmbGFncywg TlVMTCk7Cj4gKwlkYnVmID0gZG1hX2J1Zl9leHBvcnQoJmV4cF9pbmZvKTsKPiAgCWlmIChJU19F UlIoZGJ1ZikpCj4gIAkJcmV0dXJuIE5VTEw7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21l ZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItdm1hbGxvYy5jIGIvZHJpdmVycy9tZWRpYS92NGwyLWNv cmUvdmlkZW9idWYyLXZtYWxsb2MuYwo+IGluZGV4IGZiYTk0NGU1MDIyNy4uOTkyYjFiNTk0MDlj IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi12bWFsbG9j LmMKPiArKysgYi9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItdm1hbGxvYy5jCj4g QEAgLTM2NywxMSArMzY3LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2J1ZiAqdmIyX3ZtYWxsb2Nf Z2V0X2RtYWJ1Zih2b2lkICpidWZfcHJpdiwgdW5zaWduZWQgbG9uZyBmbGFnCj4gIHsKPiAgCXN0 cnVjdCB2YjJfdm1hbGxvY19idWYgKmJ1ZiA9IGJ1Zl9wcml2Owo+ICAJc3RydWN0IGRtYV9idWYg KmRidWY7Cj4gKwlERUZJTkVfRE1BX0JVRl9FWFBPUlRfSU5GTyhleHBfaW5mbyk7Cj4gKwo+ICsJ ZXhwX2luZm8ub3BzID0gJnZiMl92bWFsbG9jX2RtYWJ1Zl9vcHM7Cj4gKwlleHBfaW5mby5zaXpl ID0gYnVmLT5zaXplOwo+ICsJZXhwX2luZm8uZmxhZ3MgPSBmbGFnczsKPiArCWV4cF9pbmZvLnBy aXYgPSBidWY7Cj4gIAo+ICAJaWYgKFdBUk5fT04oIWJ1Zi0+dmFkZHIpKQo+ICAJCXJldHVybiBO VUxMOwo+ICAKPiAtCWRidWYgPSBkbWFfYnVmX2V4cG9ydChidWYsICZ2YjJfdm1hbGxvY19kbWFi dWZfb3BzLCBidWYtPnNpemUsIGZsYWdzLCBOVUxMKTsKPiArCWRidWYgPSBkbWFfYnVmX2V4cG9y dCgmZXhwX2luZm8pOwo+ICAJaWYgKElTX0VSUihkYnVmKSkKPiAgCQlyZXR1cm4gTlVMTDsKPiAg Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb24uYyBiL2RyaXZl cnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb24uYwo+IGluZGV4IDI5NmQzNDc2NjBmYy4uYTQyOTdi ZThmMTJmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb24uYwo+ ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb24uYwo+IEBAIC0xMTA2LDYgKzEx MDYsMTIgQEAgc3RydWN0IGRtYV9idWYgKmlvbl9zaGFyZV9kbWFfYnVmKHN0cnVjdCBpb25fY2xp ZW50ICpjbGllbnQsCj4gIAlzdHJ1Y3QgaW9uX2J1ZmZlciAqYnVmZmVyOwo+ICAJc3RydWN0IGRt YV9idWYgKmRtYWJ1ZjsKPiAgCWJvb2wgdmFsaWRfaGFuZGxlOwo+ICsJREVGSU5FX0RNQV9CVUZf RVhQT1JUX0lORk8oZXhwX2luZm8pOwo+ICsKPiArCWV4cF9pbmZvLm9wcyA9ICZkbWFfYnVmX29w czsKPiArCWV4cF9pbmZvLnNpemUgPSBidWZmZXItPnNpemU7Cj4gKwlleHBfaW5mby5mbGFncyA9 IE9fUkRXUjsKPiArCWV4cF9pbmZvLnByaXYgPSBidWZmZXI7Cj4gIAo+ICAJbXV0ZXhfbG9jaygm Y2xpZW50LT5sb2NrKTsKPiAgCXZhbGlkX2hhbmRsZSA9IGlvbl9oYW5kbGVfdmFsaWRhdGUoY2xp ZW50LCBoYW5kbGUpOwo+IEBAIC0xMTE4LDggKzExMjQsNyBAQCBzdHJ1Y3QgZG1hX2J1ZiAqaW9u X3NoYXJlX2RtYV9idWYoc3RydWN0IGlvbl9jbGllbnQgKmNsaWVudCwKPiAgCWlvbl9idWZmZXJf Z2V0KGJ1ZmZlcik7Cj4gIAltdXRleF91bmxvY2soJmNsaWVudC0+bG9jayk7Cj4gIAo+IC0JZG1h YnVmID0gZG1hX2J1Zl9leHBvcnQoYnVmZmVyLCAmZG1hX2J1Zl9vcHMsIGJ1ZmZlci0+c2l6ZSwg T19SRFdSLAo+IC0JCQkJTlVMTCk7Cj4gKwlkbWFidWYgPSBkbWFfYnVmX2V4cG9ydCgmZXhwX2lu Zm8pOwo+ICAJaWYgKElTX0VSUihkbWFidWYpKSB7Cj4gIAkJaW9uX2J1ZmZlcl9wdXQoYnVmZmVy KTsKPiAgCQlyZXR1cm4gZG1hYnVmOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1i dWYuaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCj4gaW5kZXggNjk0ZTFmZTFjNGI0Li4yMmMy MWEyMjRlMzIgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmgKPiArKysgYi9p bmNsdWRlL2xpbnV4L2RtYS1idWYuaAo+IEBAIC0xNjMsNiArMTYzLDM0IEBAIHN0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgewo+ICB9Owo+ICAKPiAgLyoqCj4gKyAqIHN0cnVjdCBkbWFfYnVmX2V4 cG9ydF9pbmZvIC0gaG9sZHMgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGV4cG9ydCBhIGRtYV9idWYK PiArICogQGV4cF9uYW1lOgluYW1lIG9mIHRoZSBleHBvcnRpbmcgbW9kdWxlIC0gdXNlZnVsIGZv ciBkZWJ1Z2dpbmcuCj4gKyAqIEBvcHM6CUF0dGFjaCBhbGxvY2F0b3ItZGVmaW5lZCBkbWEgYnVm IG9wcyB0byB0aGUgbmV3IGJ1ZmZlcgo+ICsgKiBAc2l6ZToJU2l6ZSBvZiB0aGUgYnVmZmVyCj4g KyAqIEBmbGFnczoJbW9kZSBmbGFncyBmb3IgdGhlIGZpbGUKPiArICogQHJlc3Y6CXJlc2VydmF0 aW9uLW9iamVjdCwgTlVMTCB0byBhbGxvY2F0ZSBkZWZhdWx0IG9uZQo+ICsgKiBAcHJpdjoJQXR0 YWNoIHByaXZhdGUgZGF0YSBvZiBhbGxvY2F0b3IgdG8gdGhpcyBidWZmZXIKPiArICoKPiArICog VGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGV4cG9ydCB0 aGUgYnVmZmVyLiBVc2VkCj4gKyAqIHdpdGggZG1hX2J1Zl9leHBvcnQoKSBvbmx5Lgo+ICsgKi8K PiArc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8gewo+ICsJY29uc3QgY2hhciAqZXhwX25hbWU7 Cj4gKwljb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgKm9wczsKPiArCXNpemVfdCBzaXplOwo+ICsJ aW50IGZsYWdzOwo+ICsJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKPiArCXZvaWQg KnByaXY7Cj4gK307Cj4gKwo+ICsvKioKPiArICogaGVscGVyIG1hY3JvIGZvciBleHBvcnRlcnM7 IHplcm9zIGFuZCBmaWxscyBpbiBtb3N0IGNvbW1vbiB2YWx1ZXMKPiArICovCj4gKyNkZWZpbmUg REVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oYSkJCQlcCj4gKwlzdHJ1Y3QgZG1hX2J1Zl9leHBv cnRfaW5mbyBhID0gezB9OwkJXAo+ICsJZXhwX2luZm8uZXhwX25hbWUgPSBLQlVJTERfTU9ETkFN RQo+ICsKClRoaXMgcmlza3MgZ2VuZXJhdGluZyBDOTkgd2FybmluZ3MgdW5sZXNzIHVzZWQgd2l0 aCBjYXJlIChhbmQgb25seSBvbmNlCnBlciBmdW5jdGlvbikuIFNob3VsZG4ndCB0aGlzIGJlIG1v cmUgbGlrZToKCiNkZWZpbmUgREVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oYSkgXAogICAgc3Ry dWN0IGRtYV9idWZfZXhwb3J0X2luZm8gYSA9IHsgLmV4cF9uYW1lID0gS0JVSUxEX01PRE5BTUUg fQoKCkRhbmllbC4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: daniel.thompson@linaro.org (Daniel Thompson) Date: Wed, 28 Jan 2015 11:20:50 +0000 Subject: [PATCH v2] dma-buf: cleanup dma_buf_export() to make it easily extensible In-Reply-To: <1422424845-14906-1-git-send-email-sumit.semwal@linaro.org> References: <1422424845-14906-1-git-send-email-sumit.semwal@linaro.org> Message-ID: <54C8C612.1030701@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 28/01/15 06:00, Sumit Semwal wrote: > At present, dma_buf_export() takes a series of parameters, which > makes it difficult to add any new parameters for exporters, if required. > > Make it simpler by moving all these parameters into a struct, and pass > the struct * as parameter to dma_buf_export(). > > While at it, unite dma_buf_export_named() with dma_buf_export(), and > change all callers accordingly. > > Signed-off-by: Sumit Semwal > --- > v2: add macro to zero out local struct, and fill KBUILD_MODNAME by default > > drivers/dma-buf/dma-buf.c | 47 +++++++++++++------------- > drivers/gpu/drm/armada/armada_gem.c | 10 ++++-- > drivers/gpu/drm/drm_prime.c | 12 ++++--- > drivers/gpu/drm/exynos/exynos_drm_dmabuf.c | 9 +++-- > drivers/gpu/drm/i915/i915_gem_dmabuf.c | 10 ++++-- > drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c | 9 ++++- > drivers/gpu/drm/tegra/gem.c | 10 ++++-- > drivers/gpu/drm/ttm/ttm_object.c | 9 +++-- > drivers/gpu/drm/udl/udl_dmabuf.c | 9 ++++- > drivers/media/v4l2-core/videobuf2-dma-contig.c | 8 ++++- > drivers/media/v4l2-core/videobuf2-dma-sg.c | 8 ++++- > drivers/media/v4l2-core/videobuf2-vmalloc.c | 8 ++++- > drivers/staging/android/ion/ion.c | 9 +++-- > include/linux/dma-buf.h | 35 +++++++++++++++---- > 14 files changed, 143 insertions(+), 50 deletions(-) > > diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c > index 5be225c2ba98..6d3df3dd9310 100644 > --- a/drivers/dma-buf/dma-buf.c > +++ b/drivers/dma-buf/dma-buf.c > @@ -265,7 +265,7 @@ static inline int is_dma_buf_file(struct file *file) > } > > /** > - * dma_buf_export_named - Creates a new dma_buf, and associates an anon file > + * dma_buf_export - Creates a new dma_buf, and associates an anon file > * with this buffer, so it can be exported. > * Also connect the allocator specific data and ops to the buffer. > * Additionally, provide a name string for exporter; useful in debugging. > @@ -277,31 +277,32 @@ static inline int is_dma_buf_file(struct file *file) > * @exp_name: [in] name of the exporting module - useful for debugging. > * @resv: [in] reservation-object, NULL to allocate default one. > * > + * All the above info comes from struct dma_buf_export_info. > + * > * Returns, on success, a newly created dma_buf object, which wraps the > * supplied private data and operations for dma_buf_ops. On either missing > * ops, or error in allocating struct dma_buf, will return negative error. > * > */ > -struct dma_buf *dma_buf_export_named(void *priv, const struct dma_buf_ops *ops, > - size_t size, int flags, const char *exp_name, > - struct reservation_object *resv) > +struct dma_buf *dma_buf_export(struct dma_buf_export_info *exp_info) > { > struct dma_buf *dmabuf; > struct file *file; > size_t alloc_size = sizeof(struct dma_buf); > - if (!resv) > + if (!exp_info->resv) > alloc_size += sizeof(struct reservation_object); > else > /* prevent &dma_buf[1] == dma_buf->resv */ > alloc_size += 1; > > - if (WARN_ON(!priv || !ops > - || !ops->map_dma_buf > - || !ops->unmap_dma_buf > - || !ops->release > - || !ops->kmap_atomic > - || !ops->kmap > - || !ops->mmap)) { > + if (WARN_ON(!exp_info->priv > + || !exp_info->ops > + || !exp_info->ops->map_dma_buf > + || !exp_info->ops->unmap_dma_buf > + || !exp_info->ops->release > + || !exp_info->ops->kmap_atomic > + || !exp_info->ops->kmap > + || !exp_info->ops->mmap)) { > return ERR_PTR(-EINVAL); > } > > @@ -309,21 +310,22 @@ struct dma_buf *dma_buf_export_named(void *priv, const struct dma_buf_ops *ops, > if (dmabuf == NULL) > return ERR_PTR(-ENOMEM); > > - dmabuf->priv = priv; > - dmabuf->ops = ops; > - dmabuf->size = size; > - dmabuf->exp_name = exp_name; > + dmabuf->priv = exp_info->priv; > + dmabuf->ops = exp_info->ops; > + dmabuf->size = exp_info->size; > + dmabuf->exp_name = exp_info->exp_name; > init_waitqueue_head(&dmabuf->poll); > dmabuf->cb_excl.poll = dmabuf->cb_shared.poll = &dmabuf->poll; > dmabuf->cb_excl.active = dmabuf->cb_shared.active = 0; > > - if (!resv) { > - resv = (struct reservation_object *)&dmabuf[1]; > - reservation_object_init(resv); > + if (!exp_info->resv) { > + exp_info->resv = (struct reservation_object *)&dmabuf[1]; > + reservation_object_init(exp_info->resv); > } > - dmabuf->resv = resv; > + dmabuf->resv = exp_info->resv; > > - file = anon_inode_getfile("dmabuf", &dma_buf_fops, dmabuf, flags); > + file = anon_inode_getfile("dmabuf", &dma_buf_fops, dmabuf, > + exp_info->flags); > if (IS_ERR(file)) { > kfree(dmabuf); > return ERR_CAST(file); > @@ -341,8 +343,7 @@ struct dma_buf *dma_buf_export_named(void *priv, const struct dma_buf_ops *ops, > > return dmabuf; > } > -EXPORT_SYMBOL_GPL(dma_buf_export_named); > - > +EXPORT_SYMBOL_GPL(dma_buf_export); > > /** > * dma_buf_fd - returns a file descriptor for the given dma_buf > diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c > index ef5feeecec84..580e10acaa3a 100644 > --- a/drivers/gpu/drm/armada/armada_gem.c > +++ b/drivers/gpu/drm/armada/armada_gem.c > @@ -538,8 +538,14 @@ struct dma_buf * > armada_gem_prime_export(struct drm_device *dev, struct drm_gem_object *obj, > int flags) > { > - return dma_buf_export(obj, &armada_gem_prime_dmabuf_ops, obj->size, > - O_RDWR, NULL); > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &armada_gem_prime_dmabuf_ops; > + exp_info.size = obj->size; > + exp_info.flags = O_RDWR; > + exp_info.priv = obj; > + > + return dma_buf_export(&exp_info); > } > > struct drm_gem_object * > diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c > index 7482b06cd08f..7fec191b45f7 100644 > --- a/drivers/gpu/drm/drm_prime.c > +++ b/drivers/gpu/drm/drm_prime.c > @@ -339,13 +339,17 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops = { > struct dma_buf *drm_gem_prime_export(struct drm_device *dev, > struct drm_gem_object *obj, int flags) > { > - struct reservation_object *robj = NULL; > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &drm_gem_prime_dmabuf_ops; > + exp_info.size = obj->size; > + exp_info.flags = flags; > + exp_info.priv = obj; > > if (dev->driver->gem_prime_res_obj) > - robj = dev->driver->gem_prime_res_obj(obj); > + exp_info.resv = dev->driver->gem_prime_res_obj(obj); > > - return dma_buf_export(obj, &drm_gem_prime_dmabuf_ops, obj->size, > - flags, robj); > + return dma_buf_export(&exp_info); > } > EXPORT_SYMBOL(drm_gem_prime_export); > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c > index 60192ed544f0..fc293a179f36 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c > @@ -185,9 +185,14 @@ struct dma_buf *exynos_dmabuf_prime_export(struct drm_device *drm_dev, > struct drm_gem_object *obj, int flags) > { > struct exynos_drm_gem_obj *exynos_gem_obj = to_exynos_gem_obj(obj); > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > > - return dma_buf_export(obj, &exynos_dmabuf_ops, > - exynos_gem_obj->base.size, flags, NULL); > + exp_info.ops = &exynos_dmabuf_ops; > + exp_info.size = exynos_gem_obj->base.size; > + exp_info.flags = flags; > + exp_info.priv = obj; > + > + return dma_buf_export(&exp_info); > } > > struct drm_gem_object *exynos_dmabuf_prime_import(struct drm_device *drm_dev, > diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c > index 82a1f4b57778..7998da27c500 100644 > --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c > +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c > @@ -230,6 +230,13 @@ struct dma_buf *i915_gem_prime_export(struct drm_device *dev, > struct drm_gem_object *gem_obj, int flags) > { > struct drm_i915_gem_object *obj = to_intel_bo(gem_obj); > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &i915_dmabuf_ops; > + exp_info.size = gem_obj->size; > + exp_info.flags = flags; > + exp_info.priv = gem_obj; > + > > if (obj->ops->dmabuf_export) { > int ret = obj->ops->dmabuf_export(obj); > @@ -237,8 +244,7 @@ struct dma_buf *i915_gem_prime_export(struct drm_device *dev, > return ERR_PTR(ret); > } > > - return dma_buf_export(gem_obj, &i915_dmabuf_ops, gem_obj->size, flags, > - NULL); > + return dma_buf_export(&exp_info); > } > > static int i915_gem_object_get_pages_dmabuf(struct drm_i915_gem_object *obj) > diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c > index a2dbfb1737b4..5874c58e72c1 100644 > --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c > +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c > @@ -171,7 +171,14 @@ static struct dma_buf_ops omap_dmabuf_ops = { > struct dma_buf *omap_gem_prime_export(struct drm_device *dev, > struct drm_gem_object *obj, int flags) > { > - return dma_buf_export(obj, &omap_dmabuf_ops, obj->size, flags, NULL); > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &omap_dmabuf_ops; > + exp_info.size = obj->size; > + exp_info.flags = flags; > + exp_info.priv = obj; > + > + return dma_buf_export(&exp_info); > } > > struct drm_gem_object *omap_gem_prime_import(struct drm_device *dev, > diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c > index 8777b7f75791..1f895b953f8f 100644 > --- a/drivers/gpu/drm/tegra/gem.c > +++ b/drivers/gpu/drm/tegra/gem.c > @@ -658,8 +658,14 @@ struct dma_buf *tegra_gem_prime_export(struct drm_device *drm, > struct drm_gem_object *gem, > int flags) > { > - return dma_buf_export(gem, &tegra_gem_prime_dmabuf_ops, gem->size, > - flags, NULL); > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &tegra_gem_prime_dmabuf_ops; > + exp_info.size = gem->size; > + exp_info.flags = flags; > + exp_info.priv = gem; > + > + return dma_buf_export(&exp_info); > } > > struct drm_gem_object *tegra_gem_prime_import(struct drm_device *drm, > diff --git a/drivers/gpu/drm/ttm/ttm_object.c b/drivers/gpu/drm/ttm/ttm_object.c > index 12c87110db3a..4f5fa8d65fe9 100644 > --- a/drivers/gpu/drm/ttm/ttm_object.c > +++ b/drivers/gpu/drm/ttm/ttm_object.c > @@ -683,6 +683,12 @@ int ttm_prime_handle_to_fd(struct ttm_object_file *tfile, > > dma_buf = prime->dma_buf; > if (!dma_buf || !get_dma_buf_unless_doomed(dma_buf)) { > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &tdev->ops; > + exp_info.size = prime->size; > + exp_info.flags = flags; > + exp_info.priv = prime; > > /* > * Need to create a new dma_buf, with memory accounting. > @@ -694,8 +700,7 @@ int ttm_prime_handle_to_fd(struct ttm_object_file *tfile, > goto out_unref; > } > > - dma_buf = dma_buf_export(prime, &tdev->ops, > - prime->size, flags, NULL); > + dma_buf = dma_buf_export(&exp_info); > if (IS_ERR(dma_buf)) { > ret = PTR_ERR(dma_buf); > ttm_mem_global_free(tdev->mem_glob, > diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c > index ac8a66b4dfc2..e2243edd1ce3 100644 > --- a/drivers/gpu/drm/udl/udl_dmabuf.c > +++ b/drivers/gpu/drm/udl/udl_dmabuf.c > @@ -202,7 +202,14 @@ static struct dma_buf_ops udl_dmabuf_ops = { > struct dma_buf *udl_gem_prime_export(struct drm_device *dev, > struct drm_gem_object *obj, int flags) > { > - return dma_buf_export(obj, &udl_dmabuf_ops, obj->size, flags, NULL); > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &udl_dmabuf_ops; > + exp_info.size = obj->size; > + exp_info.flags = flags; > + exp_info.priv = obj; > + > + return dma_buf_export(&exp_info); > } > > static int udl_prime_create(struct drm_device *dev, > diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c > index b481d20c8372..4ad92a147919 100644 > --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c > +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c > @@ -402,6 +402,12 @@ static struct dma_buf *vb2_dc_get_dmabuf(void *buf_priv, unsigned long flags) > { > struct vb2_dc_buf *buf = buf_priv; > struct dma_buf *dbuf; > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &vb2_dc_dmabuf_ops; > + exp_info.size = buf->size; > + exp_info.flags = flags; > + exp_info.priv = buf; > > if (!buf->sgt_base) > buf->sgt_base = vb2_dc_get_base_sgt(buf); > @@ -409,7 +415,7 @@ static struct dma_buf *vb2_dc_get_dmabuf(void *buf_priv, unsigned long flags) > if (WARN_ON(!buf->sgt_base)) > return NULL; > > - dbuf = dma_buf_export(buf, &vb2_dc_dmabuf_ops, buf->size, flags, NULL); > + dbuf = dma_buf_export(&exp_info); > if (IS_ERR(dbuf)) > return NULL; > > diff --git a/drivers/media/v4l2-core/videobuf2-dma-sg.c b/drivers/media/v4l2-core/videobuf2-dma-sg.c > index b1838abb6d00..45c708e463b9 100644 > --- a/drivers/media/v4l2-core/videobuf2-dma-sg.c > +++ b/drivers/media/v4l2-core/videobuf2-dma-sg.c > @@ -583,11 +583,17 @@ static struct dma_buf *vb2_dma_sg_get_dmabuf(void *buf_priv, unsigned long flags > { > struct vb2_dma_sg_buf *buf = buf_priv; > struct dma_buf *dbuf; > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &vb2_dma_sg_dmabuf_ops; > + exp_info.size = buf->size; > + exp_info.flags = flags; > + exp_info.priv = buf; > > if (WARN_ON(!buf->dma_sgt)) > return NULL; > > - dbuf = dma_buf_export(buf, &vb2_dma_sg_dmabuf_ops, buf->size, flags, NULL); > + dbuf = dma_buf_export(&exp_info); > if (IS_ERR(dbuf)) > return NULL; > > diff --git a/drivers/media/v4l2-core/videobuf2-vmalloc.c b/drivers/media/v4l2-core/videobuf2-vmalloc.c > index fba944e50227..992b1b59409c 100644 > --- a/drivers/media/v4l2-core/videobuf2-vmalloc.c > +++ b/drivers/media/v4l2-core/videobuf2-vmalloc.c > @@ -367,11 +367,17 @@ static struct dma_buf *vb2_vmalloc_get_dmabuf(void *buf_priv, unsigned long flag > { > struct vb2_vmalloc_buf *buf = buf_priv; > struct dma_buf *dbuf; > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &vb2_vmalloc_dmabuf_ops; > + exp_info.size = buf->size; > + exp_info.flags = flags; > + exp_info.priv = buf; > > if (WARN_ON(!buf->vaddr)) > return NULL; > > - dbuf = dma_buf_export(buf, &vb2_vmalloc_dmabuf_ops, buf->size, flags, NULL); > + dbuf = dma_buf_export(&exp_info); > if (IS_ERR(dbuf)) > return NULL; > > diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c > index 296d347660fc..a4297be8f12f 100644 > --- a/drivers/staging/android/ion/ion.c > +++ b/drivers/staging/android/ion/ion.c > @@ -1106,6 +1106,12 @@ struct dma_buf *ion_share_dma_buf(struct ion_client *client, > struct ion_buffer *buffer; > struct dma_buf *dmabuf; > bool valid_handle; > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &dma_buf_ops; > + exp_info.size = buffer->size; > + exp_info.flags = O_RDWR; > + exp_info.priv = buffer; > > mutex_lock(&client->lock); > valid_handle = ion_handle_validate(client, handle); > @@ -1118,8 +1124,7 @@ struct dma_buf *ion_share_dma_buf(struct ion_client *client, > ion_buffer_get(buffer); > mutex_unlock(&client->lock); > > - dmabuf = dma_buf_export(buffer, &dma_buf_ops, buffer->size, O_RDWR, > - NULL); > + dmabuf = dma_buf_export(&exp_info); > if (IS_ERR(dmabuf)) { > ion_buffer_put(buffer); > return dmabuf; > diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h > index 694e1fe1c4b4..22c21a224e32 100644 > --- a/include/linux/dma-buf.h > +++ b/include/linux/dma-buf.h > @@ -163,6 +163,34 @@ struct dma_buf_attachment { > }; > > /** > + * struct dma_buf_export_info - holds information needed to export a dma_buf > + * @exp_name: name of the exporting module - useful for debugging. > + * @ops: Attach allocator-defined dma buf ops to the new buffer > + * @size: Size of the buffer > + * @flags: mode flags for the file > + * @resv: reservation-object, NULL to allocate default one > + * @priv: Attach private data of allocator to this buffer > + * > + * This structure holds the information required to export the buffer. Used > + * with dma_buf_export() only. > + */ > +struct dma_buf_export_info { > + const char *exp_name; > + const struct dma_buf_ops *ops; > + size_t size; > + int flags; > + struct reservation_object *resv; > + void *priv; > +}; > + > +/** > + * helper macro for exporters; zeros and fills in most common values > + */ > +#define DEFINE_DMA_BUF_EXPORT_INFO(a) \ > + struct dma_buf_export_info a = {0}; \ > + exp_info.exp_name = KBUILD_MODNAME > + This risks generating C99 warnings unless used with care (and only once per function). Shouldn't this be more like: #define DEFINE_DMA_BUF_EXPORT_INFO(a) \ struct dma_buf_export_info a = { .exp_name = KBUILD_MODNAME } Daniel. From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-wi0-f173.google.com ([209.85.212.173]:60236 "EHLO mail-wi0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756378AbbA1UWd (ORCPT ); Wed, 28 Jan 2015 15:22:33 -0500 Received: by mail-wi0-f173.google.com with SMTP id r20so14725894wiv.0 for ; Wed, 28 Jan 2015 12:22:31 -0800 (PST) Message-ID: <54C8C612.1030701@linaro.org> Date: Wed, 28 Jan 2015 11:20:50 +0000 From: Daniel Thompson MIME-Version: 1.0 To: Sumit Semwal , linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-arm-kernel@lists.infradead.org, rmk+kernel@arm.linux.org.uk, airlied@linux.ie, kgene@kernel.org, daniel.vetter@intel.com, thierry.reding@gmail.com, pawel@osciak.com, m.szyprowski@samsung.com, mchehab@osg.samsung.com, gregkh@linuxfoundation.org CC: linaro-kernel@lists.linaro.org, intel-gfx@lists.freedesktop.org, linux-tegra@vger.kernel.org Subject: Re: [PATCH v2] dma-buf: cleanup dma_buf_export() to make it easily extensible References: <1422424845-14906-1-git-send-email-sumit.semwal@linaro.org> In-Reply-To: <1422424845-14906-1-git-send-email-sumit.semwal@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Sender: linux-media-owner@vger.kernel.org List-ID: On 28/01/15 06:00, Sumit Semwal wrote: > At present, dma_buf_export() takes a series of parameters, which > makes it difficult to add any new parameters for exporters, if required. > > Make it simpler by moving all these parameters into a struct, and pass > the struct * as parameter to dma_buf_export(). > > While at it, unite dma_buf_export_named() with dma_buf_export(), and > change all callers accordingly. > > Signed-off-by: Sumit Semwal > --- > v2: add macro to zero out local struct, and fill KBUILD_MODNAME by default > > drivers/dma-buf/dma-buf.c | 47 +++++++++++++------------- > drivers/gpu/drm/armada/armada_gem.c | 10 ++++-- > drivers/gpu/drm/drm_prime.c | 12 ++++--- > drivers/gpu/drm/exynos/exynos_drm_dmabuf.c | 9 +++-- > drivers/gpu/drm/i915/i915_gem_dmabuf.c | 10 ++++-- > drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c | 9 ++++- > drivers/gpu/drm/tegra/gem.c | 10 ++++-- > drivers/gpu/drm/ttm/ttm_object.c | 9 +++-- > drivers/gpu/drm/udl/udl_dmabuf.c | 9 ++++- > drivers/media/v4l2-core/videobuf2-dma-contig.c | 8 ++++- > drivers/media/v4l2-core/videobuf2-dma-sg.c | 8 ++++- > drivers/media/v4l2-core/videobuf2-vmalloc.c | 8 ++++- > drivers/staging/android/ion/ion.c | 9 +++-- > include/linux/dma-buf.h | 35 +++++++++++++++---- > 14 files changed, 143 insertions(+), 50 deletions(-) > > diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c > index 5be225c2ba98..6d3df3dd9310 100644 > --- a/drivers/dma-buf/dma-buf.c > +++ b/drivers/dma-buf/dma-buf.c > @@ -265,7 +265,7 @@ static inline int is_dma_buf_file(struct file *file) > } > > /** > - * dma_buf_export_named - Creates a new dma_buf, and associates an anon file > + * dma_buf_export - Creates a new dma_buf, and associates an anon file > * with this buffer, so it can be exported. > * Also connect the allocator specific data and ops to the buffer. > * Additionally, provide a name string for exporter; useful in debugging. > @@ -277,31 +277,32 @@ static inline int is_dma_buf_file(struct file *file) > * @exp_name: [in] name of the exporting module - useful for debugging. > * @resv: [in] reservation-object, NULL to allocate default one. > * > + * All the above info comes from struct dma_buf_export_info. > + * > * Returns, on success, a newly created dma_buf object, which wraps the > * supplied private data and operations for dma_buf_ops. On either missing > * ops, or error in allocating struct dma_buf, will return negative error. > * > */ > -struct dma_buf *dma_buf_export_named(void *priv, const struct dma_buf_ops *ops, > - size_t size, int flags, const char *exp_name, > - struct reservation_object *resv) > +struct dma_buf *dma_buf_export(struct dma_buf_export_info *exp_info) > { > struct dma_buf *dmabuf; > struct file *file; > size_t alloc_size = sizeof(struct dma_buf); > - if (!resv) > + if (!exp_info->resv) > alloc_size += sizeof(struct reservation_object); > else > /* prevent &dma_buf[1] == dma_buf->resv */ > alloc_size += 1; > > - if (WARN_ON(!priv || !ops > - || !ops->map_dma_buf > - || !ops->unmap_dma_buf > - || !ops->release > - || !ops->kmap_atomic > - || !ops->kmap > - || !ops->mmap)) { > + if (WARN_ON(!exp_info->priv > + || !exp_info->ops > + || !exp_info->ops->map_dma_buf > + || !exp_info->ops->unmap_dma_buf > + || !exp_info->ops->release > + || !exp_info->ops->kmap_atomic > + || !exp_info->ops->kmap > + || !exp_info->ops->mmap)) { > return ERR_PTR(-EINVAL); > } > > @@ -309,21 +310,22 @@ struct dma_buf *dma_buf_export_named(void *priv, const struct dma_buf_ops *ops, > if (dmabuf == NULL) > return ERR_PTR(-ENOMEM); > > - dmabuf->priv = priv; > - dmabuf->ops = ops; > - dmabuf->size = size; > - dmabuf->exp_name = exp_name; > + dmabuf->priv = exp_info->priv; > + dmabuf->ops = exp_info->ops; > + dmabuf->size = exp_info->size; > + dmabuf->exp_name = exp_info->exp_name; > init_waitqueue_head(&dmabuf->poll); > dmabuf->cb_excl.poll = dmabuf->cb_shared.poll = &dmabuf->poll; > dmabuf->cb_excl.active = dmabuf->cb_shared.active = 0; > > - if (!resv) { > - resv = (struct reservation_object *)&dmabuf[1]; > - reservation_object_init(resv); > + if (!exp_info->resv) { > + exp_info->resv = (struct reservation_object *)&dmabuf[1]; > + reservation_object_init(exp_info->resv); > } > - dmabuf->resv = resv; > + dmabuf->resv = exp_info->resv; > > - file = anon_inode_getfile("dmabuf", &dma_buf_fops, dmabuf, flags); > + file = anon_inode_getfile("dmabuf", &dma_buf_fops, dmabuf, > + exp_info->flags); > if (IS_ERR(file)) { > kfree(dmabuf); > return ERR_CAST(file); > @@ -341,8 +343,7 @@ struct dma_buf *dma_buf_export_named(void *priv, const struct dma_buf_ops *ops, > > return dmabuf; > } > -EXPORT_SYMBOL_GPL(dma_buf_export_named); > - > +EXPORT_SYMBOL_GPL(dma_buf_export); > > /** > * dma_buf_fd - returns a file descriptor for the given dma_buf > diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c > index ef5feeecec84..580e10acaa3a 100644 > --- a/drivers/gpu/drm/armada/armada_gem.c > +++ b/drivers/gpu/drm/armada/armada_gem.c > @@ -538,8 +538,14 @@ struct dma_buf * > armada_gem_prime_export(struct drm_device *dev, struct drm_gem_object *obj, > int flags) > { > - return dma_buf_export(obj, &armada_gem_prime_dmabuf_ops, obj->size, > - O_RDWR, NULL); > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &armada_gem_prime_dmabuf_ops; > + exp_info.size = obj->size; > + exp_info.flags = O_RDWR; > + exp_info.priv = obj; > + > + return dma_buf_export(&exp_info); > } > > struct drm_gem_object * > diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c > index 7482b06cd08f..7fec191b45f7 100644 > --- a/drivers/gpu/drm/drm_prime.c > +++ b/drivers/gpu/drm/drm_prime.c > @@ -339,13 +339,17 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops = { > struct dma_buf *drm_gem_prime_export(struct drm_device *dev, > struct drm_gem_object *obj, int flags) > { > - struct reservation_object *robj = NULL; > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &drm_gem_prime_dmabuf_ops; > + exp_info.size = obj->size; > + exp_info.flags = flags; > + exp_info.priv = obj; > > if (dev->driver->gem_prime_res_obj) > - robj = dev->driver->gem_prime_res_obj(obj); > + exp_info.resv = dev->driver->gem_prime_res_obj(obj); > > - return dma_buf_export(obj, &drm_gem_prime_dmabuf_ops, obj->size, > - flags, robj); > + return dma_buf_export(&exp_info); > } > EXPORT_SYMBOL(drm_gem_prime_export); > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c > index 60192ed544f0..fc293a179f36 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c > @@ -185,9 +185,14 @@ struct dma_buf *exynos_dmabuf_prime_export(struct drm_device *drm_dev, > struct drm_gem_object *obj, int flags) > { > struct exynos_drm_gem_obj *exynos_gem_obj = to_exynos_gem_obj(obj); > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > > - return dma_buf_export(obj, &exynos_dmabuf_ops, > - exynos_gem_obj->base.size, flags, NULL); > + exp_info.ops = &exynos_dmabuf_ops; > + exp_info.size = exynos_gem_obj->base.size; > + exp_info.flags = flags; > + exp_info.priv = obj; > + > + return dma_buf_export(&exp_info); > } > > struct drm_gem_object *exynos_dmabuf_prime_import(struct drm_device *drm_dev, > diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c > index 82a1f4b57778..7998da27c500 100644 > --- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c > +++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c > @@ -230,6 +230,13 @@ struct dma_buf *i915_gem_prime_export(struct drm_device *dev, > struct drm_gem_object *gem_obj, int flags) > { > struct drm_i915_gem_object *obj = to_intel_bo(gem_obj); > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &i915_dmabuf_ops; > + exp_info.size = gem_obj->size; > + exp_info.flags = flags; > + exp_info.priv = gem_obj; > + > > if (obj->ops->dmabuf_export) { > int ret = obj->ops->dmabuf_export(obj); > @@ -237,8 +244,7 @@ struct dma_buf *i915_gem_prime_export(struct drm_device *dev, > return ERR_PTR(ret); > } > > - return dma_buf_export(gem_obj, &i915_dmabuf_ops, gem_obj->size, flags, > - NULL); > + return dma_buf_export(&exp_info); > } > > static int i915_gem_object_get_pages_dmabuf(struct drm_i915_gem_object *obj) > diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c > index a2dbfb1737b4..5874c58e72c1 100644 > --- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c > +++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c > @@ -171,7 +171,14 @@ static struct dma_buf_ops omap_dmabuf_ops = { > struct dma_buf *omap_gem_prime_export(struct drm_device *dev, > struct drm_gem_object *obj, int flags) > { > - return dma_buf_export(obj, &omap_dmabuf_ops, obj->size, flags, NULL); > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &omap_dmabuf_ops; > + exp_info.size = obj->size; > + exp_info.flags = flags; > + exp_info.priv = obj; > + > + return dma_buf_export(&exp_info); > } > > struct drm_gem_object *omap_gem_prime_import(struct drm_device *dev, > diff --git a/drivers/gpu/drm/tegra/gem.c b/drivers/gpu/drm/tegra/gem.c > index 8777b7f75791..1f895b953f8f 100644 > --- a/drivers/gpu/drm/tegra/gem.c > +++ b/drivers/gpu/drm/tegra/gem.c > @@ -658,8 +658,14 @@ struct dma_buf *tegra_gem_prime_export(struct drm_device *drm, > struct drm_gem_object *gem, > int flags) > { > - return dma_buf_export(gem, &tegra_gem_prime_dmabuf_ops, gem->size, > - flags, NULL); > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &tegra_gem_prime_dmabuf_ops; > + exp_info.size = gem->size; > + exp_info.flags = flags; > + exp_info.priv = gem; > + > + return dma_buf_export(&exp_info); > } > > struct drm_gem_object *tegra_gem_prime_import(struct drm_device *drm, > diff --git a/drivers/gpu/drm/ttm/ttm_object.c b/drivers/gpu/drm/ttm/ttm_object.c > index 12c87110db3a..4f5fa8d65fe9 100644 > --- a/drivers/gpu/drm/ttm/ttm_object.c > +++ b/drivers/gpu/drm/ttm/ttm_object.c > @@ -683,6 +683,12 @@ int ttm_prime_handle_to_fd(struct ttm_object_file *tfile, > > dma_buf = prime->dma_buf; > if (!dma_buf || !get_dma_buf_unless_doomed(dma_buf)) { > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &tdev->ops; > + exp_info.size = prime->size; > + exp_info.flags = flags; > + exp_info.priv = prime; > > /* > * Need to create a new dma_buf, with memory accounting. > @@ -694,8 +700,7 @@ int ttm_prime_handle_to_fd(struct ttm_object_file *tfile, > goto out_unref; > } > > - dma_buf = dma_buf_export(prime, &tdev->ops, > - prime->size, flags, NULL); > + dma_buf = dma_buf_export(&exp_info); > if (IS_ERR(dma_buf)) { > ret = PTR_ERR(dma_buf); > ttm_mem_global_free(tdev->mem_glob, > diff --git a/drivers/gpu/drm/udl/udl_dmabuf.c b/drivers/gpu/drm/udl/udl_dmabuf.c > index ac8a66b4dfc2..e2243edd1ce3 100644 > --- a/drivers/gpu/drm/udl/udl_dmabuf.c > +++ b/drivers/gpu/drm/udl/udl_dmabuf.c > @@ -202,7 +202,14 @@ static struct dma_buf_ops udl_dmabuf_ops = { > struct dma_buf *udl_gem_prime_export(struct drm_device *dev, > struct drm_gem_object *obj, int flags) > { > - return dma_buf_export(obj, &udl_dmabuf_ops, obj->size, flags, NULL); > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &udl_dmabuf_ops; > + exp_info.size = obj->size; > + exp_info.flags = flags; > + exp_info.priv = obj; > + > + return dma_buf_export(&exp_info); > } > > static int udl_prime_create(struct drm_device *dev, > diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c > index b481d20c8372..4ad92a147919 100644 > --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c > +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c > @@ -402,6 +402,12 @@ static struct dma_buf *vb2_dc_get_dmabuf(void *buf_priv, unsigned long flags) > { > struct vb2_dc_buf *buf = buf_priv; > struct dma_buf *dbuf; > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &vb2_dc_dmabuf_ops; > + exp_info.size = buf->size; > + exp_info.flags = flags; > + exp_info.priv = buf; > > if (!buf->sgt_base) > buf->sgt_base = vb2_dc_get_base_sgt(buf); > @@ -409,7 +415,7 @@ static struct dma_buf *vb2_dc_get_dmabuf(void *buf_priv, unsigned long flags) > if (WARN_ON(!buf->sgt_base)) > return NULL; > > - dbuf = dma_buf_export(buf, &vb2_dc_dmabuf_ops, buf->size, flags, NULL); > + dbuf = dma_buf_export(&exp_info); > if (IS_ERR(dbuf)) > return NULL; > > diff --git a/drivers/media/v4l2-core/videobuf2-dma-sg.c b/drivers/media/v4l2-core/videobuf2-dma-sg.c > index b1838abb6d00..45c708e463b9 100644 > --- a/drivers/media/v4l2-core/videobuf2-dma-sg.c > +++ b/drivers/media/v4l2-core/videobuf2-dma-sg.c > @@ -583,11 +583,17 @@ static struct dma_buf *vb2_dma_sg_get_dmabuf(void *buf_priv, unsigned long flags > { > struct vb2_dma_sg_buf *buf = buf_priv; > struct dma_buf *dbuf; > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &vb2_dma_sg_dmabuf_ops; > + exp_info.size = buf->size; > + exp_info.flags = flags; > + exp_info.priv = buf; > > if (WARN_ON(!buf->dma_sgt)) > return NULL; > > - dbuf = dma_buf_export(buf, &vb2_dma_sg_dmabuf_ops, buf->size, flags, NULL); > + dbuf = dma_buf_export(&exp_info); > if (IS_ERR(dbuf)) > return NULL; > > diff --git a/drivers/media/v4l2-core/videobuf2-vmalloc.c b/drivers/media/v4l2-core/videobuf2-vmalloc.c > index fba944e50227..992b1b59409c 100644 > --- a/drivers/media/v4l2-core/videobuf2-vmalloc.c > +++ b/drivers/media/v4l2-core/videobuf2-vmalloc.c > @@ -367,11 +367,17 @@ static struct dma_buf *vb2_vmalloc_get_dmabuf(void *buf_priv, unsigned long flag > { > struct vb2_vmalloc_buf *buf = buf_priv; > struct dma_buf *dbuf; > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &vb2_vmalloc_dmabuf_ops; > + exp_info.size = buf->size; > + exp_info.flags = flags; > + exp_info.priv = buf; > > if (WARN_ON(!buf->vaddr)) > return NULL; > > - dbuf = dma_buf_export(buf, &vb2_vmalloc_dmabuf_ops, buf->size, flags, NULL); > + dbuf = dma_buf_export(&exp_info); > if (IS_ERR(dbuf)) > return NULL; > > diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c > index 296d347660fc..a4297be8f12f 100644 > --- a/drivers/staging/android/ion/ion.c > +++ b/drivers/staging/android/ion/ion.c > @@ -1106,6 +1106,12 @@ struct dma_buf *ion_share_dma_buf(struct ion_client *client, > struct ion_buffer *buffer; > struct dma_buf *dmabuf; > bool valid_handle; > + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); > + > + exp_info.ops = &dma_buf_ops; > + exp_info.size = buffer->size; > + exp_info.flags = O_RDWR; > + exp_info.priv = buffer; > > mutex_lock(&client->lock); > valid_handle = ion_handle_validate(client, handle); > @@ -1118,8 +1124,7 @@ struct dma_buf *ion_share_dma_buf(struct ion_client *client, > ion_buffer_get(buffer); > mutex_unlock(&client->lock); > > - dmabuf = dma_buf_export(buffer, &dma_buf_ops, buffer->size, O_RDWR, > - NULL); > + dmabuf = dma_buf_export(&exp_info); > if (IS_ERR(dmabuf)) { > ion_buffer_put(buffer); > return dmabuf; > diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h > index 694e1fe1c4b4..22c21a224e32 100644 > --- a/include/linux/dma-buf.h > +++ b/include/linux/dma-buf.h > @@ -163,6 +163,34 @@ struct dma_buf_attachment { > }; > > /** > + * struct dma_buf_export_info - holds information needed to export a dma_buf > + * @exp_name: name of the exporting module - useful for debugging. > + * @ops: Attach allocator-defined dma buf ops to the new buffer > + * @size: Size of the buffer > + * @flags: mode flags for the file > + * @resv: reservation-object, NULL to allocate default one > + * @priv: Attach private data of allocator to this buffer > + * > + * This structure holds the information required to export the buffer. Used > + * with dma_buf_export() only. > + */ > +struct dma_buf_export_info { > + const char *exp_name; > + const struct dma_buf_ops *ops; > + size_t size; > + int flags; > + struct reservation_object *resv; > + void *priv; > +}; > + > +/** > + * helper macro for exporters; zeros and fills in most common values > + */ > +#define DEFINE_DMA_BUF_EXPORT_INFO(a) \ > + struct dma_buf_export_info a = {0}; \ > + exp_info.exp_name = KBUILD_MODNAME > + This risks generating C99 warnings unless used with care (and only once per function). Shouldn't this be more like: #define DEFINE_DMA_BUF_EXPORT_INFO(a) \ struct dma_buf_export_info a = { .exp_name = KBUILD_MODNAME } Daniel.