From mboxrd@z Thu Jan 1 00:00:00 1970 From: Darren Etheridge Subject: Re: [PATCH/RESEND 8/9] drm/tilcdc: remove submodule destroy calls Date: Tue, 24 Jun 2014 17:06:24 -0500 Message-ID: <53A9F660.8060703@ti.com> References: <1402110128-30471-1-git-send-email-guido@vanguardiasur.com.ar> <1403014631-18072-1-git-send-email-guido@vanguardiasur.com.ar> <1403014631-18072-9-git-send-email-guido@vanguardiasur.com.ar> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1403014631-18072-9-git-send-email-guido@vanguardiasur.com.ar> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: =?UTF-8?B?R3VpZG8gTWFydMOtbmV6?= , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org Cc: Daniel Vetter , Russell King , =?UTF-8?B?RXplcXVpZWwgR2FyY8OtYQ==?= , Daniel Mack List-Id: linux-omap@vger.kernel.org R3VpZG8sCgpPbiAwNi8xNy8yMDE0IDA5OjE3IEFNLCBHdWlkbyBNYXJ0w61uZXogd3JvdGU6Cj4g VGhlIFRJIHRpbGNkYyBkcml2ZXIgaXMgZGVzaWduZWQgd2l0aCBhIG5vdGlvbiBvZiBzdWJtb2R1 bGVzLiBDdXJyZW50bHksCj4gYXQgdW5sb2FkIHRpbWUsIHRoZXNlIHN1Ym1vZHVsZXMgYXJlIGl0 ZXJhdGVkIGFuZCBkZXN0cm95ZWQuCj4KPiBOb3cgdGhhdCB0aGUgdGlsY2RjIHJlbW92ZSBvcmRl ciBpcyBmaXhlZCwgdGhpcyBjYW4gYmUgaGFuZGxlZCBwZXJmZWN0bHkKCkkgYW0gbm90IHN1cmUg SSB1bmRlcnN0YW5kIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBhYm92ZSBzZW50ZW5jZSAtIGRpZCAK c29tZXRoaW5nIGNoYW5nZSB3aXRoIHRpbGNkYyBvcmRlcmluZz8gIEkgdGhpbmsgeW91IGEgcmVm ZXJyaW5nIHRvIApwcmV2aW91cyBwYXRjaGVzIGluIHlvdXIgc2VyaWVzIHdoaWNoIHJlYWxseSBt ZWFuIHRpbGNkYyBjYW4gYWN0dWFsbHkgCnVubG9hZCBub3cuICBTbyByZWFsbHkgdGhlIG1ldGhv ZCB0aGlzIHBhdGNoIHVzZXMgY291bGQgYWx3YXlzIGhhdmUgYmVlbiAKdXNlZCwgaXQganVzdCB3 YXNuJ3QgZm9yIHNvbWUgcmVhc29uPwoKSSBoYXZlIHRlc3RlZCBhbGwgb2YgdGhlIG90aGVyIHBh dGNoZXMgaW4geW91ciBzZXJpZXMgYW5kIGFsbCBsb29rcyBnb29kIApvbiBCZWFnbGVCb25lIEJs YWNrIGFuZCBBTTMzNXhFVk0sIEkgdGVzdGVkIGFzIGJvdGggYnVpbHQtaW5zIGFuZCAKbW9kdWxl cyBhbmQgY2FuIGxvYWQvdW5sb2FkIG9uIEJlYWdsZUJvbmUgQmxhY2sgd2l0aCBIRE1JIGVuYWJs ZWQgY29ycmVjdGx5LgoKSSB3YW50IHRvIHBsYXkgYXJvdW5kIGEgYml0IG1vcmUgd2l0aCB0aGlz IHBhcnRpY3VsYXIgcGF0Y2gsIHRvIHRyeSBhbmQgCnVuZGVyc3RhbmQgaG93IGl0IGRpZmZlcnMg ZnJvbSBSb2IncyBvcmlnaW5hbCBpbnRlbnQgd2l0aCBoaXMgbW9kdWxlIApyZWdpc3RyYXRpb24v ZGVyZWdpc3RyYXRpb24gc2NoZW1lLiAgSSBwcmVmZXIgeW91ciBtZXRob2QsIGJ1dCBkbyB3ZSAK bG9vc2UgYW55dGhpbmcgdGhhdCBSb2IncyBvcmlnaW5hbGx5IGhhZCBpbiBtaW5kPwoKRGFycmVu Cgo+IGJ5IHRoZSBrZXJuZWwgdXNpbmcgdGhlIGRldmljZSBpbmZyYXN0cnVjdHVyZSwgc2luY2Ug ZWFjaCBzdWJtb2R1bGUKPiBpcyBhIGtlcm5lbCBkcml2ZXIgaXRzZWxmLCBhbmQgdGhleSBhcmUg b25seSBkZXN0cm95KCknZWQgYXQgdW5sb2FkCj4gdGltZS4gVGhlcmVmb3JlIHdlIG1vdmUgdGhl IGRlc3Ryb3koKSBmdW5jdGlvbmFsaXR5IHRvIGVhY2ggc3VibW9kdWxlJ3MKPiByZW1vdmUoKS4K Pgo+IEFsc28sIHJlbW92ZSBzb21lIGNoZWNrcyBpbiB0aGUgdW5sb2FkaW5nIHByb2Nlc3Mgc2lu Y2UgdGhlIG5ldyBjb2RlCj4gZ3VhcmFudGVlcyB0aGUgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQg YW5kIG5lZWQgYSByZWxlYXNlLgo+Cj4gU2lnbmVkLW9mZi1ieTogR3VpZG8gTWFydMOtbmV6IDxn dWlkb0B2YW5ndWFyZGlhc3VyLmNvbS5hcj4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS90aWxj ZGMvTW9kdWxlLnN5bXZlcnMgIHwgIDAKPiAgIGRyaXZlcnMvZ3B1L2RybS90aWxjZGMvdGlsY2Rj X2Rydi5jICAgIHwgIDYgLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vdGlsY2RjL3RpbGNkY19k cnYuaCAgICB8ICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS90aWxjZGMvdGlsY2RjX3BhbmVsLmMg IHwgMzYgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUv ZHJtL3RpbGNkYy90aWxjZGNfc2xhdmUuYyAgfCAyNiArKysrKysrKysrKysrLS0tLS0tLS0tLS0K PiAgIGRyaXZlcnMvZ3B1L2RybS90aWxjZGMvdGlsY2RjX3RmcDQxMC5jIHwgMzQgKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0tLS0KPiAgIDYgZmlsZXMgY2hhbmdlZCwgNTAgaW5zZXJ0aW9u cygrKSwgNTMgZGVsZXRpb25zKC0pCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3RpbGNkYy9Nb2R1bGUuc3ltdmVycwo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS90aWxjZGMvTW9kdWxlLnN5bXZlcnMgYi9kcml2ZXJzL2dwdS9kcm0vdGlsY2RjL01vZHVsZS5z eW12ZXJzCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5lNjlkZTI5Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aWxjZGMvdGlsY2RjX2Rydi5jIGIvZHJpdmVy cy9ncHUvZHJtL3RpbGNkYy90aWxjZGNfZHJ2LmMKPiBpbmRleCAwMDZhMzBlLi4yYzg2MGM0IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90aWxjZGMvdGlsY2RjX2Rydi5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL3RpbGNkYy90aWxjZGNfZHJ2LmMKPiBAQCAtMTIwLDcgKzEyMCw2IEBA IHN0YXRpYyBpbnQgY3B1ZnJlcV90cmFuc2l0aW9uKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIs Cj4gICBzdGF0aWMgaW50IHRpbGNkY191bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAg IHsKPiAgIAlzdHJ1Y3QgdGlsY2RjX2RybV9wcml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0 ZTsKPiAtCXN0cnVjdCB0aWxjZGNfbW9kdWxlICptb2QsICpjdXI7Cj4KPiAgIAlkcm1fZmJkZXZf Y21hX2ZpbmkocHJpdi0+ZmJkZXYpOwo+ICAgCWRybV9rbXNfaGVscGVyX3BvbGxfZmluaShkZXYp Owo+IEBAIC0xNDksMTEgKzE0OCw2IEBAIHN0YXRpYyBpbnQgdGlsY2RjX3VubG9hZChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQo+Cj4gICAJcG1fcnVudGltZV9kaXNhYmxlKGRldi0+ZGV2KTsKPgo+ IC0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZCwgY3VyLCAmbW9kdWxlX2xpc3QsIGxpc3Qp IHsKPiAtCQlEQkcoImRlc3Ryb3lpbmcgbW9kdWxlOiAlcyIsIG1vZC0+bmFtZSk7Cj4gLQkJbW9k LT5mdW5jcy0+ZGVzdHJveShtb2QpOwo+IC0JfQo+IC0KPiAgIAlrZnJlZShwcml2KTsKPgo+ICAg CXJldHVybiAwOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlsY2RjL3RpbGNkY19k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS90aWxjZGMvdGlsY2RjX2Rydi5oCj4gaW5kZXggMDkzODAz Ni4uNzU5NmMxNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGlsY2RjL3RpbGNkY19k cnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWxjZGMvdGlsY2RjX2Rydi5oCj4gQEAgLTk4 LDcgKzk4LDYgQEAgc3RydWN0IHRpbGNkY19tb2R1bGU7Cj4gICBzdHJ1Y3QgdGlsY2RjX21vZHVs ZV9vcHMgewo+ICAgCS8qIGNyZWF0ZSBhcHByb3ByaWF0ZSBlbmNvZGVycy9jb25uZWN0b3JzOiAq Lwo+ICAgCWludCAoKm1vZGVzZXRfaW5pdCkoc3RydWN0IHRpbGNkY19tb2R1bGUgKm1vZCwgc3Ry dWN0IGRybV9kZXZpY2UgKmRldik7Cj4gLQl2b2lkICgqZGVzdHJveSkoc3RydWN0IHRpbGNkY19t b2R1bGUgKm1vZCk7Cj4gICAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gICAJLyogY3JlYXRlIGRl YnVnZnMgbm9kZXMgKGNhbiBiZSBOVUxMKTogKi8KPiAgIAlpbnQgKCpkZWJ1Z2ZzX2luaXQpKHN0 cnVjdCB0aWxjZGNfbW9kdWxlICptb2QsIHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RpbGNkYy90aWxjZGNfcGFuZWwuYyBiL2RyaXZlcnMv Z3B1L2RybS90aWxjZGMvdGlsY2RjX3BhbmVsLmMKPiBpbmRleCBiMDg1ZGNjLi4yZjZlZmFlIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90aWxjZGMvdGlsY2RjX3BhbmVsLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vdGlsY2RjL3RpbGNkY19wYW5lbC5jCj4gQEAgLTI4MiwyMSArMjgy LDggQEAgc3RhdGljIGludCBwYW5lbF9tb2Rlc2V0X2luaXQoc3RydWN0IHRpbGNkY19tb2R1bGUg Km1vZCwgc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPgo+IC1z dGF0aWMgdm9pZCBwYW5lbF9kZXN0cm95KHN0cnVjdCB0aWxjZGNfbW9kdWxlICptb2QpCj4gLXsK PiAtCXN0cnVjdCBwYW5lbF9tb2R1bGUgKnBhbmVsX21vZCA9IHRvX3BhbmVsX21vZHVsZShtb2Qp Owo+IC0KPiAtCWlmIChwYW5lbF9tb2QtPnRpbWluZ3MpCj4gLQkJZGlzcGxheV90aW1pbmdzX3Jl bGVhc2UocGFuZWxfbW9kLT50aW1pbmdzKTsKPiAtCj4gLQl0aWxjZGNfbW9kdWxlX2NsZWFudXAo bW9kKTsKPiAtCWtmcmVlKHBhbmVsX21vZC0+aW5mbyk7Cj4gLQlrZnJlZShwYW5lbF9tb2QpOwo+ IC19Cj4gLQo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCB0aWxjZGNfbW9kdWxlX29wcyBwYW5lbF9t b2R1bGVfb3BzID0gewo+ICAgCQkubW9kZXNldF9pbml0ID0gcGFuZWxfbW9kZXNldF9pbml0LAo+ IC0JCS5kZXN0cm95ID0gcGFuZWxfZGVzdHJveSwKPiAgIH07Cj4KPiAgIC8qCj4gQEAgLTM3Miw2 ICszNTksNyBAQCBzdGF0aWMgaW50IHBhbmVsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCj4gICAJCXJldHVybiAtRU5PTUVNOwo+Cj4gICAJbW9kID0gJnBhbmVsX21vZC0+YmFz ZTsKPiArCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gbW9kOwo+Cj4gICAJdGlsY2RjX21vZHVs ZV9pbml0KG1vZCwgInBhbmVsIiwgJnBhbmVsX21vZHVsZV9vcHMpOwo+Cj4gQEAgLTM3OSwxNyAr MzY3LDE2IEBAIHN0YXRpYyBpbnQgcGFuZWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPiAgIAlpZiAoSVNfRVJSKHBpbmN0cmwpKQo+ICAgCQlkZXZfd2FybigmcGRldi0+ZGV2 LCAicGlucyBhcmUgbm90IGNvbmZpZ3VyZWRcbiIpOwo+Cj4gLQo+ICAgCXBhbmVsX21vZC0+dGlt aW5ncyA9IG9mX2dldF9kaXNwbGF5X3RpbWluZ3Mobm9kZSk7Cj4gICAJaWYgKCFwYW5lbF9tb2Qt PnRpbWluZ3MpIHsKPiAgIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGQgbm90IGdldCBwYW5l bCB0aW1pbmdzXG4iKTsKPiAtCQlnb3RvIGZhaWw7Cj4gKwkJZ290byBmYWlsX2ZyZWU7Cj4gICAJ fQo+Cj4gICAJcGFuZWxfbW9kLT5pbmZvID0gb2ZfZ2V0X3BhbmVsX2luZm8obm9kZSk7Cj4gICAJ aWYgKCFwYW5lbF9tb2QtPmluZm8pIHsKPiAgIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGQg bm90IGdldCBwYW5lbCBpbmZvXG4iKTsKPiAtCQlnb3RvIGZhaWw7Cj4gKwkJZ290byBmYWlsX3Rp bWluZ3M7Cj4gICAJfQo+Cj4gICAJbW9kLT5wcmVmZXJyZWRfYnBwID0gcGFuZWxfbW9kLT5pbmZv LT5icHA7Cj4gQEAgLTQwMCwxMyArMzg3LDI2IEBAIHN0YXRpYyBpbnQgcGFuZWxfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPgo+ICAgCXJldHVybiAwOwo+Cj4gLWZhaWw6Cj4g LQlwYW5lbF9kZXN0cm95KG1vZCk7Cj4gK2ZhaWxfdGltaW5nczoKPiArCWRpc3BsYXlfdGltaW5n c19yZWxlYXNlKHBhbmVsX21vZC0+dGltaW5ncyk7Cj4gKwo+ICtmYWlsX2ZyZWU6Cj4gKwlrZnJl ZShwYW5lbF9tb2QpOwo+ICsJdGlsY2RjX21vZHVsZV9jbGVhbnVwKG1vZCk7Cj4gICAJcmV0dXJu IHJldDsKPiAgIH0KPgo+ICAgc3RhdGljIGludCBwYW5lbF9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPiAgIHsKPiArCXN0cnVjdCB0aWxjZGNfbW9kdWxlICptb2QgPSBkZXZf Z2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwo+ICsJc3RydWN0IHBhbmVsX21vZHVsZSAqcGFuZWxf bW9kID0gdG9fcGFuZWxfbW9kdWxlKG1vZCk7Cj4gKwo+ICsJZGlzcGxheV90aW1pbmdzX3JlbGVh c2UocGFuZWxfbW9kLT50aW1pbmdzKTsKPiArCj4gKwl0aWxjZGNfbW9kdWxlX2NsZWFudXAobW9k KTsKPiArCWtmcmVlKHBhbmVsX21vZC0+aW5mbyk7Cj4gKwlrZnJlZShwYW5lbF9tb2QpOwo+ICsK PiAgIAlyZXR1cm4gMDsKPiAgIH0KPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGls Y2RjL3RpbGNkY19zbGF2ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3RpbGNkYy90aWxjZGNfc2xhdmUu Ywo+IGluZGV4IDJmODNmZmIuLjFlNTY4Y2EgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L3RpbGNkYy90aWxjZGNfc2xhdmUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWxjZGMvdGls Y2RjX3NsYXZlLmMKPiBAQCAtMjk2LDE3ICsyOTYsOCBAQCBzdGF0aWMgaW50IHNsYXZlX21vZGVz ZXRfaW5pdChzdHJ1Y3QgdGlsY2RjX21vZHVsZSAqbW9kLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+ICAgCXJldHVybiAwOwo+ICAgfQo+Cj4gLXN0YXRpYyB2b2lkIHNsYXZlX2Rlc3Ryb3koc3Ry dWN0IHRpbGNkY19tb2R1bGUgKm1vZCkKPiAtewo+IC0Jc3RydWN0IHNsYXZlX21vZHVsZSAqc2xh dmVfbW9kID0gdG9fc2xhdmVfbW9kdWxlKG1vZCk7Cj4gLQo+IC0JdGlsY2RjX21vZHVsZV9jbGVh bnVwKG1vZCk7Cj4gLQlrZnJlZShzbGF2ZV9tb2QpOwo+IC19Cj4gLQo+ICAgc3RhdGljIGNvbnN0 IHN0cnVjdCB0aWxjZGNfbW9kdWxlX29wcyBzbGF2ZV9tb2R1bGVfb3BzID0gewo+ICAgCQkubW9k ZXNldF9pbml0ID0gc2xhdmVfbW9kZXNldF9pbml0LAo+IC0JCS5kZXN0cm95ID0gc2xhdmVfZGVz dHJveSwKPiAgIH07Cj4KPiAgIC8qCj4gQEAgLTM1NiwxMCArMzQ3LDEzIEBAIHN0YXRpYyBpbnQg c2xhdmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAgIAl9Cj4KPiAgIAlz bGF2ZV9tb2QgPSBremFsbG9jKHNpemVvZigqc2xhdmVfbW9kKSwgR0ZQX0tFUk5FTCk7Cj4gLQlp ZiAoIXNsYXZlX21vZCkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiArCWlmICghc2xhdmVfbW9kKSB7 Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGZhaWxfYWRhcHRlcjsKPiArCX0KPgo+ICAg CW1vZCA9ICZzbGF2ZV9tb2QtPmJhc2U7Cj4gKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IG1v ZDsKPgo+ICAgCW1vZC0+cHJlZmVycmVkX2JwcCA9IHNsYXZlX2luZm8uYnBwOwo+Cj4gQEAgLTM3 NCwxMCArMzY4LDIwIEBAIHN0YXRpYyBpbnQgc2xhdmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKPiAgIAl0aWxjZGNfc2xhdmVfcHJvYmVkZWZlcihmYWxzZSk7Cj4KPiAgIAly ZXR1cm4gMDsKPiArCj4gK2ZhaWxfYWRhcHRlcjoKPiArCWkyY19wdXRfYWRhcHRlcihzbGF2ZWky Yyk7Cj4gKwlyZXR1cm4gcmV0Owo+ICAgfQo+Cj4gICBzdGF0aWMgaW50IHNsYXZlX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAgewo+ICsJc3RydWN0IHRpbGNkY19tb2R1 bGUgKm1vZCA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7Cj4gKwlzdHJ1Y3Qgc2xhdmVf bW9kdWxlICpzbGF2ZV9tb2QgPSB0b19zbGF2ZV9tb2R1bGUobW9kKTsKPiArCj4gKwl0aWxjZGNf bW9kdWxlX2NsZWFudXAobW9kKTsKPiArCWtmcmVlKHNsYXZlX21vZCk7Cj4gKwo+ICAgCXJldHVy biAwOwo+ICAgfQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aWxjZGMvdGlsY2Rj X3RmcDQxMC5jIGIvZHJpdmVycy9ncHUvZHJtL3RpbGNkYy90aWxjZGNfdGZwNDEwLmMKPiBpbmRl eCBjZTc1YWM4Li4zMmEwZDJkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90aWxjZGMv dGlsY2RjX3RmcDQxMC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpbGNkYy90aWxjZGNfdGZw NDEwLmMKPiBAQCAtMjk2LDIzICsyOTYsOCBAQCBzdGF0aWMgaW50IHRmcDQxMF9tb2Rlc2V0X2lu aXQoc3RydWN0IHRpbGNkY19tb2R1bGUgKm1vZCwgc3RydWN0IGRybV9kZXZpY2UgKmRldgo+ICAg CXJldHVybiAwOwo+ICAgfQo+Cj4gLXN0YXRpYyB2b2lkIHRmcDQxMF9kZXN0cm95KHN0cnVjdCB0 aWxjZGNfbW9kdWxlICptb2QpCj4gLXsKPiAtCXN0cnVjdCB0ZnA0MTBfbW9kdWxlICp0ZnA0MTBf bW9kID0gdG9fdGZwNDEwX21vZHVsZShtb2QpOwo+IC0KPiAtCWlmICh0ZnA0MTBfbW9kLT5pMmMp Cj4gLQkJaTJjX3B1dF9hZGFwdGVyKHRmcDQxMF9tb2QtPmkyYyk7Cj4gLQo+IC0JaWYgKCFJU19F UlJfVkFMVUUodGZwNDEwX21vZC0+Z3BpbykpCj4gLQkJZ3Bpb19mcmVlKHRmcDQxMF9tb2QtPmdw aW8pOwo+IC0KPiAtCXRpbGNkY19tb2R1bGVfY2xlYW51cChtb2QpOwo+IC0Ja2ZyZWUodGZwNDEw X21vZCk7Cj4gLX0KPiAtCj4gICBzdGF0aWMgY29uc3Qgc3RydWN0IHRpbGNkY19tb2R1bGVfb3Bz IHRmcDQxMF9tb2R1bGVfb3BzID0gewo+ICAgCQkubW9kZXNldF9pbml0ID0gdGZwNDEwX21vZGVz ZXRfaW5pdCwKPiAtCQkuZGVzdHJveSA9IHRmcDQxMF9kZXN0cm95LAo+ICAgfTsKPgo+ICAgLyoK PiBAQCAtMzQyLDYgKzMyNyw3IEBAIHN0YXRpYyBpbnQgdGZwNDEwX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gICAJCXJldHVybiAtRU5PTUVNOwo+Cj4gICAJbW9kID0gJnRm cDQxMF9tb2QtPmJhc2U7Cj4gKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IG1vZDsKPgo+ICAg CXRpbGNkY19tb2R1bGVfaW5pdChtb2QsICJ0ZnA0MTAiLCAmdGZwNDEwX21vZHVsZV9vcHMpOwo+ Cj4gQEAgLTM2NSw2ICszNTEsNyBAQCBzdGF0aWMgaW50IHRmcDQxMF9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQo+ICAgCXRmcDQxMF9tb2QtPmkyYyA9IG9mX2ZpbmRfaTJjX2Fk YXB0ZXJfYnlfbm9kZShpMmNfbm9kZSk7Cj4gICAJaWYgKCF0ZnA0MTBfbW9kLT5pMmMpIHsKPiAg IAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGQgbm90IGdldCBpMmNcbiIpOwo+ICsJCW9mX25v ZGVfcHV0KGkyY19ub2RlKTsKPiAgIAkJZ290byBmYWlsOwo+ICAgCX0KPgo+IEBAIC0zNzgsMTkg KzM2NSwzMiBAQCBzdGF0aWMgaW50IHRmcDQxMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQo+ICAgCQlyZXQgPSBncGlvX3JlcXVlc3QodGZwNDEwX21vZC0+Z3BpbywgIkRWSV9Q RG4iKTsKPiAgIAkJaWYgKHJldCkgewo+ICAgCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGQg bm90IGdldCBEVklfUERuIGdwaW9cbiIpOwo+IC0JCQlnb3RvIGZhaWw7Cj4gKwkJCWdvdG8gZmFp bF9hZGFwdGVyOwo+ICAgCQl9Cj4gICAJfQo+Cj4gICAJcmV0dXJuIDA7Cj4KPiArZmFpbF9hZGFw dGVyOgo+ICsJaTJjX3B1dF9hZGFwdGVyKHRmcDQxMF9tb2QtPmkyYyk7Cj4gKwo+ICAgZmFpbDoK PiAtCXRmcDQxMF9kZXN0cm95KG1vZCk7Cj4gKwlrZnJlZSh0ZnA0MTBfbW9kKTsKPiArCXRpbGNk Y19tb2R1bGVfY2xlYW51cChtb2QpOwo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4KPiAgIHN0YXRp YyBpbnQgdGZwNDEwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAgewo+ ICsJc3RydWN0IHRpbGNkY19tb2R1bGUgKm1vZCA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRl dik7Cj4gKwlzdHJ1Y3QgdGZwNDEwX21vZHVsZSAqdGZwNDEwX21vZCA9IHRvX3RmcDQxMF9tb2R1 bGUobW9kKTsKPiArCj4gKwlpMmNfcHV0X2FkYXB0ZXIodGZwNDEwX21vZC0+aTJjKTsKPiArCWdw aW9fZnJlZSh0ZnA0MTBfbW9kLT5ncGlvKTsKPiArCj4gKwl0aWxjZGNfbW9kdWxlX2NsZWFudXAo bW9kKTsKPiArCWtmcmVlKHRmcDQxMF9tb2QpOwo+ICsKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPgo+ Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: detheridge@ti.com (Darren Etheridge) Date: Tue, 24 Jun 2014 17:06:24 -0500 Subject: [PATCH/RESEND 8/9] drm/tilcdc: remove submodule destroy calls In-Reply-To: <1403014631-18072-9-git-send-email-guido@vanguardiasur.com.ar> References: <1402110128-30471-1-git-send-email-guido@vanguardiasur.com.ar> <1403014631-18072-1-git-send-email-guido@vanguardiasur.com.ar> <1403014631-18072-9-git-send-email-guido@vanguardiasur.com.ar> Message-ID: <53A9F660.8060703@ti.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Guido, On 06/17/2014 09:17 AM, Guido Mart?nez wrote: > The TI tilcdc driver is designed with a notion of submodules. Currently, > at unload time, these submodules are iterated and destroyed. > > Now that the tilcdc remove order is fixed, this can be handled perfectly I am not sure I understand the first part of the above sentence - did something change with tilcdc ordering? I think you a referring to previous patches in your series which really mean tilcdc can actually unload now. So really the method this patch uses could always have been used, it just wasn't for some reason? I have tested all of the other patches in your series and all looks good on BeagleBone Black and AM335xEVM, I tested as both built-ins and modules and can load/unload on BeagleBone Black with HDMI enabled correctly. I want to play around a bit more with this particular patch, to try and understand how it differs from Rob's original intent with his module registration/deregistration scheme. I prefer your method, but do we loose anything that Rob's originally had in mind? Darren > by the kernel using the device infrastructure, since each submodule > is a kernel driver itself, and they are only destroy()'ed at unload > time. Therefore we move the destroy() functionality to each submodule's > remove(). > > Also, remove some checks in the unloading process since the new code > guarantees the resources are allocated and need a release. > > Signed-off-by: Guido Mart?nez > --- > drivers/gpu/drm/tilcdc/Module.symvers | 0 > drivers/gpu/drm/tilcdc/tilcdc_drv.c | 6 ------ > drivers/gpu/drm/tilcdc/tilcdc_drv.h | 1 - > drivers/gpu/drm/tilcdc/tilcdc_panel.c | 36 +++++++++++++++++----------------- > drivers/gpu/drm/tilcdc/tilcdc_slave.c | 26 +++++++++++++----------- > drivers/gpu/drm/tilcdc/tilcdc_tfp410.c | 34 ++++++++++++++++---------------- > 6 files changed, 50 insertions(+), 53 deletions(-) > create mode 100644 drivers/gpu/drm/tilcdc/Module.symvers > > diff --git a/drivers/gpu/drm/tilcdc/Module.symvers b/drivers/gpu/drm/tilcdc/Module.symvers > new file mode 100644 > index 0000000..e69de29 > diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c > index 006a30e..2c860c4 100644 > --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c > +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c > @@ -120,7 +120,6 @@ static int cpufreq_transition(struct notifier_block *nb, > static int tilcdc_unload(struct drm_device *dev) > { > struct tilcdc_drm_private *priv = dev->dev_private; > - struct tilcdc_module *mod, *cur; > > drm_fbdev_cma_fini(priv->fbdev); > drm_kms_helper_poll_fini(dev); > @@ -149,11 +148,6 @@ static int tilcdc_unload(struct drm_device *dev) > > pm_runtime_disable(dev->dev); > > - list_for_each_entry_safe(mod, cur, &module_list, list) { > - DBG("destroying module: %s", mod->name); > - mod->funcs->destroy(mod); > - } > - > kfree(priv); > > return 0; > diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h > index 0938036..7596c14 100644 > --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h > +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h > @@ -98,7 +98,6 @@ struct tilcdc_module; > struct tilcdc_module_ops { > /* create appropriate encoders/connectors: */ > int (*modeset_init)(struct tilcdc_module *mod, struct drm_device *dev); > - void (*destroy)(struct tilcdc_module *mod); > #ifdef CONFIG_DEBUG_FS > /* create debugfs nodes (can be NULL): */ > int (*debugfs_init)(struct tilcdc_module *mod, struct drm_minor *minor); > diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c > index b085dcc..2f6efae 100644 > --- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c > +++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c > @@ -282,21 +282,8 @@ static int panel_modeset_init(struct tilcdc_module *mod, struct drm_device *dev) > return 0; > } > > -static void panel_destroy(struct tilcdc_module *mod) > -{ > - struct panel_module *panel_mod = to_panel_module(mod); > - > - if (panel_mod->timings) > - display_timings_release(panel_mod->timings); > - > - tilcdc_module_cleanup(mod); > - kfree(panel_mod->info); > - kfree(panel_mod); > -} > - > static const struct tilcdc_module_ops panel_module_ops = { > .modeset_init = panel_modeset_init, > - .destroy = panel_destroy, > }; > > /* > @@ -372,6 +359,7 @@ static int panel_probe(struct platform_device *pdev) > return -ENOMEM; > > mod = &panel_mod->base; > + pdev->dev.platform_data = mod; > > tilcdc_module_init(mod, "panel", &panel_module_ops); > > @@ -379,17 +367,16 @@ static int panel_probe(struct platform_device *pdev) > if (IS_ERR(pinctrl)) > dev_warn(&pdev->dev, "pins are not configured\n"); > > - > panel_mod->timings = of_get_display_timings(node); > if (!panel_mod->timings) { > dev_err(&pdev->dev, "could not get panel timings\n"); > - goto fail; > + goto fail_free; > } > > panel_mod->info = of_get_panel_info(node); > if (!panel_mod->info) { > dev_err(&pdev->dev, "could not get panel info\n"); > - goto fail; > + goto fail_timings; > } > > mod->preferred_bpp = panel_mod->info->bpp; > @@ -400,13 +387,26 @@ static int panel_probe(struct platform_device *pdev) > > return 0; > > -fail: > - panel_destroy(mod); > +fail_timings: > + display_timings_release(panel_mod->timings); > + > +fail_free: > + kfree(panel_mod); > + tilcdc_module_cleanup(mod); > return ret; > } > > static int panel_remove(struct platform_device *pdev) > { > + struct tilcdc_module *mod = dev_get_platdata(&pdev->dev); > + struct panel_module *panel_mod = to_panel_module(mod); > + > + display_timings_release(panel_mod->timings); > + > + tilcdc_module_cleanup(mod); > + kfree(panel_mod->info); > + kfree(panel_mod); > + > return 0; > } > > diff --git a/drivers/gpu/drm/tilcdc/tilcdc_slave.c b/drivers/gpu/drm/tilcdc/tilcdc_slave.c > index 2f83ffb..1e568ca 100644 > --- a/drivers/gpu/drm/tilcdc/tilcdc_slave.c > +++ b/drivers/gpu/drm/tilcdc/tilcdc_slave.c > @@ -296,17 +296,8 @@ static int slave_modeset_init(struct tilcdc_module *mod, struct drm_device *dev) > return 0; > } > > -static void slave_destroy(struct tilcdc_module *mod) > -{ > - struct slave_module *slave_mod = to_slave_module(mod); > - > - tilcdc_module_cleanup(mod); > - kfree(slave_mod); > -} > - > static const struct tilcdc_module_ops slave_module_ops = { > .modeset_init = slave_modeset_init, > - .destroy = slave_destroy, > }; > > /* > @@ -356,10 +347,13 @@ static int slave_probe(struct platform_device *pdev) > } > > slave_mod = kzalloc(sizeof(*slave_mod), GFP_KERNEL); > - if (!slave_mod) > - return -ENOMEM; > + if (!slave_mod) { > + ret = -ENOMEM; > + goto fail_adapter; > + } > > mod = &slave_mod->base; > + pdev->dev.platform_data = mod; > > mod->preferred_bpp = slave_info.bpp; > > @@ -374,10 +368,20 @@ static int slave_probe(struct platform_device *pdev) > tilcdc_slave_probedefer(false); > > return 0; > + > +fail_adapter: > + i2c_put_adapter(slavei2c); > + return ret; > } > > static int slave_remove(struct platform_device *pdev) > { > + struct tilcdc_module *mod = dev_get_platdata(&pdev->dev); > + struct slave_module *slave_mod = to_slave_module(mod); > + > + tilcdc_module_cleanup(mod); > + kfree(slave_mod); > + > return 0; > } > > diff --git a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c > index ce75ac8..32a0d2d 100644 > --- a/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c > +++ b/drivers/gpu/drm/tilcdc/tilcdc_tfp410.c > @@ -296,23 +296,8 @@ static int tfp410_modeset_init(struct tilcdc_module *mod, struct drm_device *dev > return 0; > } > > -static void tfp410_destroy(struct tilcdc_module *mod) > -{ > - struct tfp410_module *tfp410_mod = to_tfp410_module(mod); > - > - if (tfp410_mod->i2c) > - i2c_put_adapter(tfp410_mod->i2c); > - > - if (!IS_ERR_VALUE(tfp410_mod->gpio)) > - gpio_free(tfp410_mod->gpio); > - > - tilcdc_module_cleanup(mod); > - kfree(tfp410_mod); > -} > - > static const struct tilcdc_module_ops tfp410_module_ops = { > .modeset_init = tfp410_modeset_init, > - .destroy = tfp410_destroy, > }; > > /* > @@ -342,6 +327,7 @@ static int tfp410_probe(struct platform_device *pdev) > return -ENOMEM; > > mod = &tfp410_mod->base; > + pdev->dev.platform_data = mod; > > tilcdc_module_init(mod, "tfp410", &tfp410_module_ops); > > @@ -365,6 +351,7 @@ static int tfp410_probe(struct platform_device *pdev) > tfp410_mod->i2c = of_find_i2c_adapter_by_node(i2c_node); > if (!tfp410_mod->i2c) { > dev_err(&pdev->dev, "could not get i2c\n"); > + of_node_put(i2c_node); > goto fail; > } > > @@ -378,19 +365,32 @@ static int tfp410_probe(struct platform_device *pdev) > ret = gpio_request(tfp410_mod->gpio, "DVI_PDn"); > if (ret) { > dev_err(&pdev->dev, "could not get DVI_PDn gpio\n"); > - goto fail; > + goto fail_adapter; > } > } > > return 0; > > +fail_adapter: > + i2c_put_adapter(tfp410_mod->i2c); > + > fail: > - tfp410_destroy(mod); > + kfree(tfp410_mod); > + tilcdc_module_cleanup(mod); > return ret; > } > > static int tfp410_remove(struct platform_device *pdev) > { > + struct tilcdc_module *mod = dev_get_platdata(&pdev->dev); > + struct tfp410_module *tfp410_mod = to_tfp410_module(mod); > + > + i2c_put_adapter(tfp410_mod->i2c); > + gpio_free(tfp410_mod->gpio); > + > + tilcdc_module_cleanup(mod); > + kfree(tfp410_mod); > + > return 0; > } > >