From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris BREZILLON Subject: Re: [PATCHv2 3/4] ARM: at91/tclib: mask interruptions at shutdown and probe Date: Wed, 3 Sep 2014 12:06:03 +0200 Message-ID: <20140903120603.6b73e2a7@bbrezillon> References: <1409329003-17252-1-git-send-email-g.portay@overkiz.com> <1409329003-17252-4-git-send-email-g.portay@overkiz.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1409329003-17252-4-git-send-email-g.portay@overkiz.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: =?UTF-8?B?R2HDq2w=?= PORTAY Cc: linux-pwm@vger.kernel.org, Arnd Bergmann , Greg Kroah-Hartman , Daniel Lezcano , Nicolas Ferre , linux-kernel@vger.kernel.org, Thierry Reding , Alexandre Belloni , Thomas Gleixner , Jean-Christophe PLAGNIOL-VILLARD , =?UTF-8?B?R2HDq2w=?= PORTAY , linux-arm-kernel@lists.infradead.org List-Id: linux-pwm@vger.kernel.org SGkgR2FlbCwKCk9uIEZyaSwgMjkgQXVnIDIwMTQgMTg6MTY6NDIgKzAyMDAKR2HDq2wgUE9SVEFZ IDxnLnBvcnRheUBvdmVya2l6LmNvbT4gd3JvdGU6Cgo+IFNodXRkb3duIHByb3Blcmx5IHRoZSB0 aW1lciBjb3VudGVyIGJsb2NrIGJ5IG1hc2tpbmcgaW50ZXJydXB0aW9ucy4gT3RoZXJ3aXNlLAo+ IGEgc2VnbWVudGF0aW9uIG1heSBoYXBwZW4gd2hlbiBrZXhlYy1pbmcgYSBuZXcga2VybmVsIChz ZWUgYmFja3RyYWNlIGJlbG93KS4KPiBBbiBpbnRlcnJ1cHRpb24gbWF5IGhhcHBlbiBiZWZvcmUg dGhlIGhhbmRsZXIgaXMgc2V0LCBsZWFkaW5nIHRvIGEga2VybmVsCj4gc2VnbWVudGF0aW9uIGZh dWx0Lgo+IAo+IEZ1cnRoZXJtb3JlLCB3ZSBtYWtlIHN1cmUgdGhlIGludGVycnVwdGlvbnMgYXJl IG1hc2tlZCB3aGVuIHRoZSBkcml2ZXIgaXMKPiBpbml0aWFsaXplZC4gVGhpcyB3aWxsIHByZXZl bnQgZnJlc2hseSBrZXhlYy1lZCBrZXJuZWwgZnJvbSBjcmFzaGluZyB3aGVuCj4gbGF1bmNoZWQg ZnJvbSBhIGtlcm5lbCB3aGljaCBkb2VzIG5vdCBwcm9wZXJseSBtYXNrIGludGVycnVwdGlvbnMg YXQgc2h1dGRvd24uCj4gCj4gVGhlIGJhY2t0cmFjZSBiZWxvdyBoYXBwZW5lZCBhZnRlciBrZXhl Yy1pbmcgYSBuZXcga2VybmVsLCBmcm9tIGEga2VybmVsCj4gdGhhdCBkaWQgbm90IHNodXQgZG93 biBwcm9wZXJseSBsZWF2aW5nIGludGVycnVwdGlvbnMgdW5tYXNrZWQuCj4gCj4gVW5hYmxlIHRv IGhhbmRsZSBrZXJuZWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGF0IHZpcnR1YWwgYWRkcmVz cyAwMDAwMDAwMAo+IHBnZCA9IGMwMDA0MDAwCj4gWzAwMDAwMDAwXSAqcGdkPTAwMDAwMDAwCj4g SW50ZXJuYWwgZXJyb3I6IE9vcHM6IDgwMDAwMDA1IFsjMV0gQVJNCj4gTW9kdWxlcyBsaW5rZWQg aW46Cj4gQ1BVOiAwIFBJRDogMSBDb21tOiBzd2FwcGVyIE5vdCB0YWludGVkIDMuMTYuMCsgIzE0 NAo+IHRhc2s6IGMxODI4YWEwIHRpOiBjMTgyYTAwMCB0YXNrLnRpOiBjMTgyYTAwMAo+IFBDIGlz IGF0IDB4MAo+IExSIGlzIGF0IGNoMl9pcnErMHgyOC8weDMwCj4gcGMgOiBbPDAwMDAwMDAwPl0g ICAgbHIgOiBbPGMwMWRiOTA0Pl0gICAgcHNyOiAwMDAwMDBkMwo+IHNwIDogYzE4MmJkMzggIGlw IDogYzE4MmJkNDggIGZwIDogYzE4MmJkNDQKPiByMTA6IGMwMzczMzkwICByOSA6IGMxODI1YjAw ICByOCA6IDYwMDAwMDUzCj4gcjcgOiAwMDAwMDAwMCAgcjYgOiAwMDAwMDAwMCAgcjUgOiAwMDAw MDAxMyAgcjQgOiBjMDM2ZTgwMAo+IHIzIDogMDAwMDAwMDAgIHIyIDogMDAwMDIwMDQgIHIxIDog YzAzNmU3NjAgIHIwIDogYzAzNmU3NjAKPiBGbGFnczogbnpjdiAgSVJRcyBvZmYgIEZJUXMgb2Zm ICBNb2RlIFNWQ18zMiAgSVNBIEFSTSAgU2VnbWVudCBrZXJuZWwKPiBDb250cm9sOiAwMDA1MzE3 ZiAgVGFibGU6IDIwMDA0MDAwICBEQUM6IDAwMDAwMDE3Cj4gUHJvY2VzcyBzd2FwcGVyIChwaWQ6 IDEsIHN0YWNrIGxpbWl0ID0gMHhjMTgyYTFjMCkKPiBTdGFjazogKDB4YzE4MmJkMzggdG8gMHhj MTgyYzAwMCkKPiBiZDIwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjMTgyYmQ3YyBjMTgyYmQ0OAo+IGJkNDA6IGMwMDQ1NDMwIGMwMWRiOGVj IDAwMDAwMDAwIGMxOGM2ZjQwIGMxODJiZDc0IGMxODI1YjAwIGMwMzVjZWM0IDAwMDAwMDAwCj4g YmQ2MDogYzE4MmJlMmMgNjAwMDAwNTMgYzE4MjViMzQgMDAwMDAwMDAgYzE4MmJkOTQgYzE4MmJk ODAgYzAwNDU1NzAgYzAwNDU0MDgKPiBiZDgwOiAwMDAwMDAwMCBjMTgyNWIwMCBjMTgyYmRhYyBj MTgyYmQ5OCBjMDA0N2YzNCBjMDA0NTU1MCAwMDAwMDAxMyBjMDM2NjE5Ywo+IGJkYTA6IGMxODJi ZGM0IGMxODJiZGIwIGMwMDQ0ZGE0IGMwMDQ3ZTk4IDAwMDAwMDdmIDAwMDAwMDEzIGMxODJiZGU0 IGMxODJiZGM4Cj4gYmRjMDogYzAwMDllMzQgYzAwNDRkOGMgZmVmZmYwMDAgYzAwNDY3MjggNjAw MDAwNTMgZmZmZmZmZmYgYzE4MmJkZjQgYzE4MmJkZTgKPiBiZGUwOiBjMDAwODZhOCBjMDAwOWRk YyBjMTgyYmU3NCBjMTgyYmRmOCBjMDAwY2I4MCBjMDAwODY3NCAwMDAwMDAwMCAwMDAwMDAxMwo+ IGJlMDA6IDAwMDAwMDAwIDAwMDE0MjAwIGMxODI1YjAwIGMwMzZlODAwIDAwMDAwMDEzIGMwMzVl ZDk4IDYwMDAwMDUzIGMxODI1YjM0Cj4gYmUyMDogMDAwMDAwMDAgYzE4MmJlNzQgYzE4MmJlMjAg YzE4MmJlNDAgYzAwNDc5OTQgYzAwNDY3MjggNjAwMDAwNTMgZmZmZmZmZmYKPiBiZTQwOiAwMDAw MDAxMyBjMDM2ZTgwMCBjMTgyYmU2NCBjMTgyNWIwMCAwMDAwMDAxMyBjMDM2ZTgwMCBjMDM1ZWQ5 OCBjMDM4NzRiYwo+IGJlNjA6IDAwMDAwMDA0IGMwMzZlNzAwIGMxODJiZTk0IGMxODJiZTc4IGMw MDQ2ODljIGMwMDQ2Mzk4IGMwMzZlNzYwIGMxOGM2MDgwCj4gYmU4MDogMDAwMDAwMDAgYzAzNWVk MTAgYzE4MmJlZGMgYzE4MmJlOTggYzAzNDhiMDggYzAwNDY4NGMgMDAwMDAwMGMgYzAzNGRhYzgK PiBiZWEwOiAwMDRjNGIzZiBjMDI4YzMzOCBjMDM2ZTc2MCAwMDAwMDAxMyBjMDE0ZWNjOCBjMThl NjdlMCBjMDM1YjljMCBjMDM0ODg4NAo+IGJlYzA6IGMwMzViOWMwIGMxODJhMDIwIDAwMDAwMDAw IDAwMDAwMDAwIGMxODJiZjU0IGMxODJiZWUwIGMwMDA4OWZjIGMwMzQ4ODk0Cj4gYmVlMDogYzAw ZGE1MWMgYzFmZmNjNzggYzE4MmJmMGMgYzE4MmJlZjggYzAwMmQxMDAgYzAwMmQwOWMgYzFmZmNj NzggMDAwMDAwMDAKPiBiZjAwOiBjMTgyYmY1NCBjMTgyYmYxMCBjMDAyZDMwOCBjMDMzNjU3MCBj MTgyYmYzYyBjMDMzNGU0NCAwMDAwMDAwMyAwMDAwMDAwMwo+IGJmMjA6IDAwMDAwMDMwIGMwMzM0 YjQ0IGMwMDQ0ZDc0IDAwMDAwMDAzIDAwMDAwMDAzIGMwMzRkYWM4IGMwMzUwYTk0IGMwMzczNDQw Cj4gYmY0MDogYzAzNzM0NDAgMDAwMDAwMzAgYzE4MmJmOTQgYzE4MmJmNTggYzAzMzZkMjQgYzAw MDg5MGMgMDAwMDAwMDMgMDAwMDAwMDMKPiBiZjYwOiBjMDMzNjU2MCBjMTgyYmY2NCBjMTgyYmY2 NCA2ZTYxNmUwZCAwMDAwMDAwMCBjMDI3MmZjOCAwMDAwMDAwMCAwMDAwMDAwMAo+IGJmODA6IDAw MDAwMDAwIDAwMDAwMDAwIGMxODJiZmFjIGMxODJiZjk4IGMwMjcyZmQ4IGMwMzM2YmQ4IGMxODJh MDAwIDAwMDAwMDAwCj4gYmZhMDogMDAwMDAwMDAgYzE4MmJmYjAgYzAwMDk1ZDAgYzAyNzJmZDgg MDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAKPiBiZmMwOiAwMDAwMDAwMCAwMDAw MDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAw MAo+IGJmZTA6IDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDEzIDAw MDAwMDAwIDM3NGQyN2NkIDMzY2MzM2U0Cj4gQmFja3RyYWNlOgo+IFs8YzAxZGI4ZGM+XSAoY2gy X2lycSkgZnJvbSBbPGMwMDQ1NDMwPl0gKGhhbmRsZV9pcnFfZXZlbnRfcGVyY3B1KzB4MzgvMHgx NDgpCj4gWzxjMDA0NTNmOD5dIChoYW5kbGVfaXJxX2V2ZW50X3BlcmNwdSkgZnJvbSBbPGMwMDQ1 NTcwPl0gKGhhbmRsZV9pcnFfZXZlbnQrMHgzMC8weDQwKQo+ICByMTA6MDAwMDAwMDAgcjk6YzE4 MjViMzQgcjg6NjAwMDAwNTMgcjc6YzE4MmJlMmMgcjY6MDAwMDAwMDAgcjU6YzAzNWNlYzQKPiAg cjQ6YzE4MjViMDAKPiBbPGMwMDQ1NTQwPl0gKGhhbmRsZV9pcnFfZXZlbnQpIGZyb20gWzxjMDA0 N2YzND5dIChoYW5kbGVfZmFzdGVvaV9pcnErMHhhYy8weDExYykKPiAgcjQ6YzE4MjViMDAgcjM6 MDAwMDAwMDAKPiBbPGMwMDQ3ZTg4Pl0gKGhhbmRsZV9mYXN0ZW9pX2lycSkgZnJvbSBbPGMwMDQ0 ZGE0Pl0gKGdlbmVyaWNfaGFuZGxlX2lycSsweDI4LzB4MzgpCj4gIHI1OmMwMzY2MTljIHI0OjAw MDAwMDEzCj4gWzxjMDA0NGQ3Yz5dIChnZW5lcmljX2hhbmRsZV9pcnEpIGZyb20gWzxjMDAwOWUz ND5dIChoYW5kbGVfSVJRKzB4NjgvMHg4OCkKPiAgcjQ6MDAwMDAwMTMgcjM6MDAwMDAwN2YKPiBb PGMwMDA5ZGNjPl0gKGhhbmRsZV9JUlEpIGZyb20gWzxjMDAwODZhOD5dIChhdDkxX2FpY19oYW5k bGVfaXJxKzB4NDQvMHg0YykKPiAgcjY6ZmZmZmZmZmYgcjU6NjAwMDAwNTMgcjQ6YzAwNDY3Mjgg cjM6ZmVmZmYwMDAKPiBbPGMwMDA4NjY0Pl0gKGF0OTFfYWljX2hhbmRsZV9pcnEpIGZyb20gWzxj MDAwY2I4MD5dIChfX2lycV9zdmMrMHg0MC8weDRjKQo+IEV4Y2VwdGlvbiBzdGFjaygweGMxODJi ZGY4IHRvIDB4YzE4MmJlNDApCj4gYmRlMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAgMDAwMDAwMTMKPiBiZTAwOiAwMDAwMDAw MCAwMDAxNDIwMCBjMTgyNWIwMCBjMDM2ZTgwMCAwMDAwMDAxMyBjMDM1ZWQ5OCA2MDAwMDA1MyBj MTgyNWIzNAo+IGJlMjA6IDAwMDAwMDAwIGMxODJiZTc0IGMxODJiZTIwIGMxODJiZTQwIGMwMDQ3 OTk0IGMwMDQ2NzI4IDYwMDAwMDUzIGZmZmZmZmZmCj4gWzxjMDA0NjM4OD5dIChfX3NldHVwX2ly cSkgZnJvbSBbPGMwMDQ2ODljPl0gKHNldHVwX2lycSsweDYwLzB4OGMpCj4gIHIxMDpjMDM2ZTcw MCByOTowMDAwMDAwNCByODpjMDM4NzRiYyByNzpjMDM1ZWQ5OCByNjpjMDM2ZTgwMCByNTowMDAw MDAxMwo+ICByNDpjMTgyNWIwMAo+IFs8YzAwNDY4M2M+XSAoc2V0dXBfaXJxKSBmcm9tIFs8YzAz NDhiMDg+XSAodGNiX2Nsa3NyY19pbml0KzB4Mjg0LzB4MzFjKQo+ICByNjpjMDM1ZWQxMCByNTow MDAwMDAwMCByNDpjMThjNjA4MCByMzpjMDM2ZTc2MAo+IFs8YzAzNDg4ODQ+XSAodGNiX2Nsa3Ny Y19pbml0KSBmcm9tIFs8YzAwMDg5ZmM+XSAoZG9fb25lX2luaXRjYWxsKzB4MTAwLzB4MWI0KQo+ ICByMTA6MDAwMDAwMDAgcjk6MDAwMDAwMDAgcjg6YzE4MmEwMjAgcjc6YzAzNWI5YzAgcjY6YzAz NDg4ODQgcjU6YzAzNWI5YzAKPiAgcjQ6YzE4ZTY3ZTAKPiBbPGMwMDA4OGZjPl0gKGRvX29uZV9p bml0Y2FsbCkgZnJvbSBbPGMwMzM2ZDI0Pl0gKGtlcm5lbF9pbml0X2ZyZWVhYmxlKzB4MTVjLzB4 MjI0KQo+ICByOTowMDAwMDAzMCByODpjMDM3MzQ0MCByNzpjMDM3MzQ0MCByNjpjMDM1MGE5NCBy NTpjMDM0ZGFjOCByNDowMDAwMDAwMwo+IFs8YzAzMzZiYzg+XSAoa2VybmVsX2luaXRfZnJlZWFi bGUpIGZyb20gWzxjMDI3MmZkOD5dIChrZXJuZWxfaW5pdCsweDEwLzB4ZWMpCj4gIHI5OjAwMDAw MDAwIHI4OjAwMDAwMDAwIHI3OjAwMDAwMDAwIHI2OjAwMDAwMDAwIHI1OmMwMjcyZmM4IHI0OjAw MDAwMDAwCj4gWzxjMDI3MmZjOD5dIChrZXJuZWxfaW5pdCkgZnJvbSBbPGMwMDA5NWQwPl0gKHJl dF9mcm9tX2ZvcmsrMHgxNC8weDI0KQo+ICByNDowMDAwMDAwMCByMzpjMTgyYTAwMAo+IENvZGU6 IGJhZCBQQyB2YWx1ZQo+IC0tLVsgZW5kIHRyYWNlIDViMzBmMDAxN2UyODJlNDcgXS0tLQo+IEtl cm5lbCBwYW5pYyAtIG5vdCBzeW5jaW5nOiBGYXRhbCBleGNlcHRpb24gaW4gaW50ZXJydXB0Cj4g Cj4gU2lnbmVkLW9mZi1ieTogR2HDq2wgUE9SVEFZIDxnYWVsLnBvcnRheUBnbWFpbC5jb20+CgpF eGNlcHQgZm9yIHRoZSBuaXRwaWNrIHlvdSdsbCBmaW5kIGJlbG93LCB5b3UgaGF2ZSBteQoKQWNr ZWQtYnk6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGZyZWUtZWxlY3Ryb25zLmNv bT4KCj4gLS0tCj4gIGRyaXZlcnMvbWlzYy9hdG1lbF90Y2xpYi5jIHwgMTYgKysrKysrKysrKysr KysrKwo+ICAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQo+IAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21pc2MvYXRtZWxfdGNsaWIuYyBiL2RyaXZlcnMvbWlzYy9hdG1lbF90Y2xpYi5j Cj4gaW5kZXggZDUwNWQxZS4uMmYwZDg0YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21pc2MvYXRt ZWxfdGNsaWIuYwo+ICsrKyBiL2RyaXZlcnMvbWlzYy9hdG1lbF90Y2xpYi5jCj4gQEAgLTEwOSw2 ICsxMDksNyBAQCBzdGF0aWMgaW50IF9faW5pdCB0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQo+ICAJc3RydWN0IGNsawkqY2xrOwo+ICAJaW50CQlpcnE7Cj4gIAlzdHJ1Y3Qg cmVzb3VyY2UJKnI7Cj4gKwl1bnNpZ25lZCBpbnQJaTsKPiAgCj4gIAlpcnEgPSBwbGF0Zm9ybV9n ZXRfaXJxKHBkZXYsIDApOwo+ICAJaWYgKGlycSA8IDApCj4gQEAgLTE1NywxOCArMTU4LDMzIEBA IHN0YXRpYyBpbnQgX19pbml0IHRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cj4gIAlpZiAodGMtPmlycVsyXSA8IDApCj4gIAkJdGMtPmlycVsyXSA9IGlycTsKPiAgCj4gKwlm b3IgKGkgPSAwOyBpIDwgMzsgaSsrKQo+ICsJCXdyaXRlbCgweGZmLCB0Yy0+cmVncyArIEFUTUVM X1RDX1JFRyhpLCBJRFIpKTsKPiArCgpIb3cgYWJvdXQgdXNpbmcgdGhlIElSUSBmbGFncyBkZWZp bmVkIGluIGF0bWVsX3RjLmggaW5zdGVhZCBvZiB0aGUKbWFnaWMgMHhmZiB2YWx1ZSA/CgoJCXdy aXRlbChBVE1FTF9UQ19DT1ZGUyB8IC4uLiwKCQkgICAgICAgdGMtPnJlZ3MgKyBBVE1FTF9UQ19S RUcoaSwgSURSKSk7Cgo+ICAJc3Bpbl9sb2NrKCZ0Y19saXN0X2xvY2spOwo+ICAJbGlzdF9hZGRf dGFpbCgmdGMtPm5vZGUsICZ0Y19saXN0KTsKPiAgCXNwaW5fdW5sb2NrKCZ0Y19saXN0X2xvY2sp Owo+ICAKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHRjKTsKPiArCj4gIAlyZXR1cm4g MDsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgdGNfc2h1dGRvd24gKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gK3sKPiArCWludCBpOwo+ICsJc3RydWN0IGF0bWVsX3RjICp0YyA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCAzOyBpKysp Cj4gKwkJd3JpdGVsKDB4ZmYsIHRjLT5yZWdzICsgQVRNRUxfVENfUkVHKGksIElEUikpOwoKRGl0 dG8KCkJlc3QgUmVnYXJkcywKCkJvcmlzCgotLSAKQm9yaXMgQnJlemlsbG9uLCBGcmVlIEVsZWN0 cm9ucwpFbWJlZGRlZCBMaW51eCBhbmQgS2VybmVsIGVuZ2luZWVyaW5nCmh0dHA6Ly9mcmVlLWVs ZWN0cm9ucy5jb20KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: boris.brezillon@free-electrons.com (Boris BREZILLON) Date: Wed, 3 Sep 2014 12:06:03 +0200 Subject: [PATCHv2 3/4] ARM: at91/tclib: mask interruptions at shutdown and probe In-Reply-To: <1409329003-17252-4-git-send-email-g.portay@overkiz.com> References: <1409329003-17252-1-git-send-email-g.portay@overkiz.com> <1409329003-17252-4-git-send-email-g.portay@overkiz.com> Message-ID: <20140903120603.6b73e2a7@bbrezillon> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Gael, On Fri, 29 Aug 2014 18:16:42 +0200 Ga?l PORTAY wrote: > Shutdown properly the timer counter block by masking interruptions. Otherwise, > a segmentation may happen when kexec-ing a new kernel (see backtrace below). > An interruption may happen before the handler is set, leading to a kernel > segmentation fault. > > Furthermore, we make sure the interruptions are masked when the driver is > initialized. This will prevent freshly kexec-ed kernel from crashing when > launched from a kernel which does not properly mask interruptions at shutdown. > > The backtrace below happened after kexec-ing a new kernel, from a kernel > that did not shut down properly leaving interruptions unmasked. > > Unable to handle kernel NULL pointer dereference at virtual address 00000000 > pgd = c0004000 > [00000000] *pgd=00000000 > Internal error: Oops: 80000005 [#1] ARM > Modules linked in: > CPU: 0 PID: 1 Comm: swapper Not tainted 3.16.0+ #144 > task: c1828aa0 ti: c182a000 task.ti: c182a000 > PC is at 0x0 > LR is at ch2_irq+0x28/0x30 > pc : [<00000000>] lr : [] psr: 000000d3 > sp : c182bd38 ip : c182bd48 fp : c182bd44 > r10: c0373390 r9 : c1825b00 r8 : 60000053 > r7 : 00000000 r6 : 00000000 r5 : 00000013 r4 : c036e800 > r3 : 00000000 r2 : 00002004 r1 : c036e760 r0 : c036e760 > Flags: nzcv IRQs off FIQs off Mode SVC_32 ISA ARM Segment kernel > Control: 0005317f Table: 20004000 DAC: 00000017 > Process swapper (pid: 1, stack limit = 0xc182a1c0) > Stack: (0xc182bd38 to 0xc182c000) > bd20: c182bd7c c182bd48 > bd40: c0045430 c01db8ec 00000000 c18c6f40 c182bd74 c1825b00 c035cec4 00000000 > bd60: c182be2c 60000053 c1825b34 00000000 c182bd94 c182bd80 c0045570 c0045408 > bd80: 00000000 c1825b00 c182bdac c182bd98 c0047f34 c0045550 00000013 c036619c > bda0: c182bdc4 c182bdb0 c0044da4 c0047e98 0000007f 00000013 c182bde4 c182bdc8 > bdc0: c0009e34 c0044d8c fefff000 c0046728 60000053 ffffffff c182bdf4 c182bde8 > bde0: c00086a8 c0009ddc c182be74 c182bdf8 c000cb80 c0008674 00000000 00000013 > be00: 00000000 00014200 c1825b00 c036e800 00000013 c035ed98 60000053 c1825b34 > be20: 00000000 c182be74 c182be20 c182be40 c0047994 c0046728 60000053 ffffffff > be40: 00000013 c036e800 c182be64 c1825b00 00000013 c036e800 c035ed98 c03874bc > be60: 00000004 c036e700 c182be94 c182be78 c004689c c0046398 c036e760 c18c6080 > be80: 00000000 c035ed10 c182bedc c182be98 c0348b08 c004684c 0000000c c034dac8 > bea0: 004c4b3f c028c338 c036e760 00000013 c014ecc8 c18e67e0 c035b9c0 c0348884 > bec0: c035b9c0 c182a020 00000000 00000000 c182bf54 c182bee0 c00089fc c0348894 > bee0: c00da51c c1ffcc78 c182bf0c c182bef8 c002d100 c002d09c c1ffcc78 00000000 > bf00: c182bf54 c182bf10 c002d308 c0336570 c182bf3c c0334e44 00000003 00000003 > bf20: 00000030 c0334b44 c0044d74 00000003 00000003 c034dac8 c0350a94 c0373440 > bf40: c0373440 00000030 c182bf94 c182bf58 c0336d24 c000890c 00000003 00000003 > bf60: c0336560 c182bf64 c182bf64 6e616e0d 00000000 c0272fc8 00000000 00000000 > bf80: 00000000 00000000 c182bfac c182bf98 c0272fd8 c0336bd8 c182a000 00000000 > bfa0: 00000000 c182bfb0 c00095d0 c0272fd8 00000000 00000000 00000000 00000000 > bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > bfe0: 00000000 00000000 00000000 00000000 00000013 00000000 374d27cd 33cc33e4 > Backtrace: > [] (ch2_irq) from [] (handle_irq_event_percpu+0x38/0x148) > [] (handle_irq_event_percpu) from [] (handle_irq_event+0x30/0x40) > r10:00000000 r9:c1825b34 r8:60000053 r7:c182be2c r6:00000000 r5:c035cec4 > r4:c1825b00 > [] (handle_irq_event) from [] (handle_fasteoi_irq+0xac/0x11c) > r4:c1825b00 r3:00000000 > [] (handle_fasteoi_irq) from [] (generic_handle_irq+0x28/0x38) > r5:c036619c r4:00000013 > [] (generic_handle_irq) from [] (handle_IRQ+0x68/0x88) > r4:00000013 r3:0000007f > [] (handle_IRQ) from [] (at91_aic_handle_irq+0x44/0x4c) > r6:ffffffff r5:60000053 r4:c0046728 r3:fefff000 > [] (at91_aic_handle_irq) from [] (__irq_svc+0x40/0x4c) > Exception stack(0xc182bdf8 to 0xc182be40) > bde0: 00000000 00000013 > be00: 00000000 00014200 c1825b00 c036e800 00000013 c035ed98 60000053 c1825b34 > be20: 00000000 c182be74 c182be20 c182be40 c0047994 c0046728 60000053 ffffffff > [] (__setup_irq) from [] (setup_irq+0x60/0x8c) > r10:c036e700 r9:00000004 r8:c03874bc r7:c035ed98 r6:c036e800 r5:00000013 > r4:c1825b00 > [] (setup_irq) from [] (tcb_clksrc_init+0x284/0x31c) > r6:c035ed10 r5:00000000 r4:c18c6080 r3:c036e760 > [] (tcb_clksrc_init) from [] (do_one_initcall+0x100/0x1b4) > r10:00000000 r9:00000000 r8:c182a020 r7:c035b9c0 r6:c0348884 r5:c035b9c0 > r4:c18e67e0 > [] (do_one_initcall) from [] (kernel_init_freeable+0x15c/0x224) > r9:00000030 r8:c0373440 r7:c0373440 r6:c0350a94 r5:c034dac8 r4:00000003 > [] (kernel_init_freeable) from [] (kernel_init+0x10/0xec) > r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c0272fc8 r4:00000000 > [] (kernel_init) from [] (ret_from_fork+0x14/0x24) > r4:00000000 r3:c182a000 > Code: bad PC value > ---[ end trace 5b30f0017e282e47 ]--- > Kernel panic - not syncing: Fatal exception in interrupt > > Signed-off-by: Ga?l PORTAY Except for the nitpick you'll find below, you have my Acked-by: Boris Brezillon > --- > drivers/misc/atmel_tclib.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/misc/atmel_tclib.c b/drivers/misc/atmel_tclib.c > index d505d1e..2f0d84c 100644 > --- a/drivers/misc/atmel_tclib.c > +++ b/drivers/misc/atmel_tclib.c > @@ -109,6 +109,7 @@ static int __init tc_probe(struct platform_device *pdev) > struct clk *clk; > int irq; > struct resource *r; > + unsigned int i; > > irq = platform_get_irq(pdev, 0); > if (irq < 0) > @@ -157,18 +158,33 @@ static int __init tc_probe(struct platform_device *pdev) > if (tc->irq[2] < 0) > tc->irq[2] = irq; > > + for (i = 0; i < 3; i++) > + writel(0xff, tc->regs + ATMEL_TC_REG(i, IDR)); > + How about using the IRQ flags defined in atmel_tc.h instead of the magic 0xff value ? writel(ATMEL_TC_COVFS | ..., tc->regs + ATMEL_TC_REG(i, IDR)); > spin_lock(&tc_list_lock); > list_add_tail(&tc->node, &tc_list); > spin_unlock(&tc_list_lock); > > + platform_set_drvdata(pdev, tc); > + > return 0; > } > > +static void tc_shutdown (struct platform_device *pdev) > +{ > + int i; > + struct atmel_tc *tc = platform_get_drvdata(pdev); > + > + for (i = 0; i < 3; i++) > + writel(0xff, tc->regs + ATMEL_TC_REG(i, IDR)); Ditto Best Regards, Boris -- Boris Brezillon, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932318AbaICKGL (ORCPT ); Wed, 3 Sep 2014 06:06:11 -0400 Received: from top.free-electrons.com ([176.31.233.9]:44574 "EHLO mail.free-electrons.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932215AbaICKGH convert rfc822-to-8bit (ORCPT ); Wed, 3 Sep 2014 06:06:07 -0400 Date: Wed, 3 Sep 2014 12:06:03 +0200 From: Boris BREZILLON To: =?UTF-8?B?R2HDq2w=?= PORTAY Cc: Arnd Bergmann , Daniel Lezcano , Greg Kroah-Hartman , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, Nicolas Ferre , Thomas Gleixner , Thierry Reding , Alexandre Belloni , Jean-Christophe PLAGNIOL-VILLARD , =?UTF-8?B?R2HDq2w=?= PORTAY Subject: Re: [PATCHv2 3/4] ARM: at91/tclib: mask interruptions at shutdown and probe Message-ID: <20140903120603.6b73e2a7@bbrezillon> In-Reply-To: <1409329003-17252-4-git-send-email-g.portay@overkiz.com> References: <1409329003-17252-1-git-send-email-g.portay@overkiz.com> <1409329003-17252-4-git-send-email-g.portay@overkiz.com> X-Mailer: Claws Mail 3.9.3 (GTK+ 2.24.23; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Gael, On Fri, 29 Aug 2014 18:16:42 +0200 Gaël PORTAY wrote: > Shutdown properly the timer counter block by masking interruptions. Otherwise, > a segmentation may happen when kexec-ing a new kernel (see backtrace below). > An interruption may happen before the handler is set, leading to a kernel > segmentation fault. > > Furthermore, we make sure the interruptions are masked when the driver is > initialized. This will prevent freshly kexec-ed kernel from crashing when > launched from a kernel which does not properly mask interruptions at shutdown. > > The backtrace below happened after kexec-ing a new kernel, from a kernel > that did not shut down properly leaving interruptions unmasked. > > Unable to handle kernel NULL pointer dereference at virtual address 00000000 > pgd = c0004000 > [00000000] *pgd=00000000 > Internal error: Oops: 80000005 [#1] ARM > Modules linked in: > CPU: 0 PID: 1 Comm: swapper Not tainted 3.16.0+ #144 > task: c1828aa0 ti: c182a000 task.ti: c182a000 > PC is at 0x0 > LR is at ch2_irq+0x28/0x30 > pc : [<00000000>] lr : [] psr: 000000d3 > sp : c182bd38 ip : c182bd48 fp : c182bd44 > r10: c0373390 r9 : c1825b00 r8 : 60000053 > r7 : 00000000 r6 : 00000000 r5 : 00000013 r4 : c036e800 > r3 : 00000000 r2 : 00002004 r1 : c036e760 r0 : c036e760 > Flags: nzcv IRQs off FIQs off Mode SVC_32 ISA ARM Segment kernel > Control: 0005317f Table: 20004000 DAC: 00000017 > Process swapper (pid: 1, stack limit = 0xc182a1c0) > Stack: (0xc182bd38 to 0xc182c000) > bd20: c182bd7c c182bd48 > bd40: c0045430 c01db8ec 00000000 c18c6f40 c182bd74 c1825b00 c035cec4 00000000 > bd60: c182be2c 60000053 c1825b34 00000000 c182bd94 c182bd80 c0045570 c0045408 > bd80: 00000000 c1825b00 c182bdac c182bd98 c0047f34 c0045550 00000013 c036619c > bda0: c182bdc4 c182bdb0 c0044da4 c0047e98 0000007f 00000013 c182bde4 c182bdc8 > bdc0: c0009e34 c0044d8c fefff000 c0046728 60000053 ffffffff c182bdf4 c182bde8 > bde0: c00086a8 c0009ddc c182be74 c182bdf8 c000cb80 c0008674 00000000 00000013 > be00: 00000000 00014200 c1825b00 c036e800 00000013 c035ed98 60000053 c1825b34 > be20: 00000000 c182be74 c182be20 c182be40 c0047994 c0046728 60000053 ffffffff > be40: 00000013 c036e800 c182be64 c1825b00 00000013 c036e800 c035ed98 c03874bc > be60: 00000004 c036e700 c182be94 c182be78 c004689c c0046398 c036e760 c18c6080 > be80: 00000000 c035ed10 c182bedc c182be98 c0348b08 c004684c 0000000c c034dac8 > bea0: 004c4b3f c028c338 c036e760 00000013 c014ecc8 c18e67e0 c035b9c0 c0348884 > bec0: c035b9c0 c182a020 00000000 00000000 c182bf54 c182bee0 c00089fc c0348894 > bee0: c00da51c c1ffcc78 c182bf0c c182bef8 c002d100 c002d09c c1ffcc78 00000000 > bf00: c182bf54 c182bf10 c002d308 c0336570 c182bf3c c0334e44 00000003 00000003 > bf20: 00000030 c0334b44 c0044d74 00000003 00000003 c034dac8 c0350a94 c0373440 > bf40: c0373440 00000030 c182bf94 c182bf58 c0336d24 c000890c 00000003 00000003 > bf60: c0336560 c182bf64 c182bf64 6e616e0d 00000000 c0272fc8 00000000 00000000 > bf80: 00000000 00000000 c182bfac c182bf98 c0272fd8 c0336bd8 c182a000 00000000 > bfa0: 00000000 c182bfb0 c00095d0 c0272fd8 00000000 00000000 00000000 00000000 > bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > bfe0: 00000000 00000000 00000000 00000000 00000013 00000000 374d27cd 33cc33e4 > Backtrace: > [] (ch2_irq) from [] (handle_irq_event_percpu+0x38/0x148) > [] (handle_irq_event_percpu) from [] (handle_irq_event+0x30/0x40) > r10:00000000 r9:c1825b34 r8:60000053 r7:c182be2c r6:00000000 r5:c035cec4 > r4:c1825b00 > [] (handle_irq_event) from [] (handle_fasteoi_irq+0xac/0x11c) > r4:c1825b00 r3:00000000 > [] (handle_fasteoi_irq) from [] (generic_handle_irq+0x28/0x38) > r5:c036619c r4:00000013 > [] (generic_handle_irq) from [] (handle_IRQ+0x68/0x88) > r4:00000013 r3:0000007f > [] (handle_IRQ) from [] (at91_aic_handle_irq+0x44/0x4c) > r6:ffffffff r5:60000053 r4:c0046728 r3:fefff000 > [] (at91_aic_handle_irq) from [] (__irq_svc+0x40/0x4c) > Exception stack(0xc182bdf8 to 0xc182be40) > bde0: 00000000 00000013 > be00: 00000000 00014200 c1825b00 c036e800 00000013 c035ed98 60000053 c1825b34 > be20: 00000000 c182be74 c182be20 c182be40 c0047994 c0046728 60000053 ffffffff > [] (__setup_irq) from [] (setup_irq+0x60/0x8c) > r10:c036e700 r9:00000004 r8:c03874bc r7:c035ed98 r6:c036e800 r5:00000013 > r4:c1825b00 > [] (setup_irq) from [] (tcb_clksrc_init+0x284/0x31c) > r6:c035ed10 r5:00000000 r4:c18c6080 r3:c036e760 > [] (tcb_clksrc_init) from [] (do_one_initcall+0x100/0x1b4) > r10:00000000 r9:00000000 r8:c182a020 r7:c035b9c0 r6:c0348884 r5:c035b9c0 > r4:c18e67e0 > [] (do_one_initcall) from [] (kernel_init_freeable+0x15c/0x224) > r9:00000030 r8:c0373440 r7:c0373440 r6:c0350a94 r5:c034dac8 r4:00000003 > [] (kernel_init_freeable) from [] (kernel_init+0x10/0xec) > r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c0272fc8 r4:00000000 > [] (kernel_init) from [] (ret_from_fork+0x14/0x24) > r4:00000000 r3:c182a000 > Code: bad PC value > ---[ end trace 5b30f0017e282e47 ]--- > Kernel panic - not syncing: Fatal exception in interrupt > > Signed-off-by: Gaël PORTAY Except for the nitpick you'll find below, you have my Acked-by: Boris Brezillon > --- > drivers/misc/atmel_tclib.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/misc/atmel_tclib.c b/drivers/misc/atmel_tclib.c > index d505d1e..2f0d84c 100644 > --- a/drivers/misc/atmel_tclib.c > +++ b/drivers/misc/atmel_tclib.c > @@ -109,6 +109,7 @@ static int __init tc_probe(struct platform_device *pdev) > struct clk *clk; > int irq; > struct resource *r; > + unsigned int i; > > irq = platform_get_irq(pdev, 0); > if (irq < 0) > @@ -157,18 +158,33 @@ static int __init tc_probe(struct platform_device *pdev) > if (tc->irq[2] < 0) > tc->irq[2] = irq; > > + for (i = 0; i < 3; i++) > + writel(0xff, tc->regs + ATMEL_TC_REG(i, IDR)); > + How about using the IRQ flags defined in atmel_tc.h instead of the magic 0xff value ? writel(ATMEL_TC_COVFS | ..., tc->regs + ATMEL_TC_REG(i, IDR)); > spin_lock(&tc_list_lock); > list_add_tail(&tc->node, &tc_list); > spin_unlock(&tc_list_lock); > > + platform_set_drvdata(pdev, tc); > + > return 0; > } > > +static void tc_shutdown (struct platform_device *pdev) > +{ > + int i; > + struct atmel_tc *tc = platform_get_drvdata(pdev); > + > + for (i = 0; i < 3; i++) > + writel(0xff, tc->regs + ATMEL_TC_REG(i, IDR)); Ditto Best Regards, Boris -- Boris Brezillon, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com