From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhang Rui Subject: Re: [-next PATCH 2/4] treewide: Use DEVICE_ATTR_RW Date: Thu, 21 Dec 2017 08:47:51 +0800 Message-ID: <1513817271.2592.2.camel@intel.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Joe Perches , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Cezary Jackiewicz , Darren Hart , Andy Shevchenko , Sebastian Ott , Peter Oberparleiter , James Smart , Dick Kennedy , Eduardo Valentin , Greg Kroah-Hartman , Mathias Nyman , Felipe Balbi , "Luis R. Rodriguez" , Peter Ujfalusi , Jarkko Nikula Cc: alsa-devel@alsa-project.org, Liam Girdwood , David Airlie , Heiko Carstens , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, Takashi Iwai , linux-s390@vger.kernel.org, linux-omap@vger.kernel.org, "James E.J. Bottomley" , linux-scsi@vger.kernel.org, linux-pm@vger.kernel.org, linux-serial@vger.kernel.org, Jiri Slaby , platform-driver-x86@vger.kernel.org, Bartlomiej Zolnierkiewicz , intel-gfx@lists.freedesktop.org, Mark Brown , Jaroslav Kysela , "Martin K. Petersen" , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Martin Schwidefsky List-Id: alsa-devel@alsa-project.org T24gVHVlLCAyMDE3LTEyLTE5IGF0IDEwOjE1IC0wODAwLCBKb2UgUGVyY2hlcyB3cm90ZToKPiBD b252ZXJ0IERFVklDRV9BVFRSIHVzZXMgdG8gREVWSUNFX0FUVFJfUlcgd2hlcmUgcG9zc2libGUu Cj4gCj4gRG9uZSB3aXRoIHBlcmwgc2NyaXB0Ogo+IAo+ICQgZ2l0IGdyZXAgLXcgLS1uYW1lLW9u bHkgREVWSUNFX0FUVFIgfCBcCj4gwqAgeGFyZ3MgcGVybCAtaSAtZSAnbG9jYWwgJC87IHdoaWxl ICg8Pikgewo+IHMvXGJERVZJQ0VfQVRUUlxzKlwoXHMqKFx3KylccyosXHMqXCg/KFxzKlNfSVJV R09ccypcfFxzKlNfSVdVU1J8XHMqUwo+IF9JV1VTUlxzKlx8XHMqU19JUlVHT1xzKnxccyowNjQ0 XHMqKVwpP1xzKixccypcMV9zaG93XHMqLFxzKlwxX3N0b3JlXAo+IHMqXCkvREVWSUNFX0FUVFJf UlcoXDEpL2c7IHByaW50O30nCj4gCj4gU2lnbmVkLW9mZi1ieTogSm9lIFBlcmNoZXMgPGpvZUBw ZXJjaGVzLmNvbT4KPiAtLS0KPiDCoGFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuY8KgwqDCoMKg wqDCoMKgwqDCoMKgfMKgwqAzICstLQo+IMKgYXJjaC90aWxlL2tlcm5lbC9zeXNmcy5jwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKy0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfc3lzZnMuY8KgwqDCoMKgfMKgwqA2ICsrLS0tCj4gwqBkcml2ZXJzL3BsYXRmb3JtL3g4Ni9j b21wYWwtbGFwdG9wLmMgfCAxOCArKysrKy0tLS0tLS0tLS0KPiDCoGRyaXZlcnMvczM5MC9jaW8v ZGV2aWNlLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKy0KPiDCoGRyaXZlcnMvc2Nz aS9scGZjL2xwZmNfYXR0ci5jwqDCoMKgwqDCoMKgwqDCoHwgNDMgKysrKysrKysrKysrLS0tLS0t LS0tLS0tCj4gLS0tLS0tLS0tLS0tCj4gwqBkcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXNmcy5j wqDCoMKgwqDCoMKgfMKgwqA5ICsrKystLS0tCgpGb3IgdGhlIHRoZXJtYWwgcGFydCwKQUNLLWJ5 OiBaaGFuZyBSdWkgPHJ1aS56aGFuZ0BpbnRlbC5jb20+Cgp0aGFua3MsCnJ1aQoKPiDCoGRyaXZl cnMvdHR5L3NlcmlhbC9zaC1zY2kuY8KgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAyICstCj4gwqBk cml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnY2FwLmPCoMKgwqDCoMKgwqDCoHzCoMKgMiArLQo+IMKg ZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKy0K PiDCoGRyaXZlcnMvdmlkZW8vZmJkZXYvYXVvX2sxOTB4LmPCoMKgwqDCoMKgwqB8wqDCoDQgKyst LQo+IMKgZHJpdmVycy92aWRlby9mYmRldi93MTAwZmIuY8KgwqDCoMKgwqDCoMKgwqDCoHzCoMKg NCArKy0tCj4gwqBsaWIvdGVzdF9maXJtd2FyZS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfCAxNCArKysrKy0tLS0tLS0KPiDCoGxpYi90ZXN0X2ttb2QuY8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCAxNCArKysrKy0tLS0tLS0KPiDCoHNv dW5kL3NvYy9vbWFwL21jYnNwLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDQg KystLQo+IMKgMTUgZmlsZXMgY2hhbmdlZCwgNDkgaW5zZXJ0aW9ucygrKSwgODAgZGVsZXRpb25z KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYwo+IGIvYXJj aC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCj4gaW5kZXggNGQ1YjY1ZTUyN2I1Li40YjZlMDM5N2Y2 NmQgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCj4gKysrIGIvYXJj aC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCj4gQEAgLTQwNCw4ICs0MDQsNyBAQCBzdGF0aWMgc3Np emVfdCBkaXNwYXRjaGluZ19zdG9yZShzdHJ1Y3QgZGV2aWNlCj4gKmRldiwKPiDCoAlwdXRfb25s aW5lX2NwdXMoKTsKPiDCoAlyZXR1cm4gcmMgPyByYyA6IGNvdW50Owo+IMKgfQo+IC1zdGF0aWMg REVWSUNFX0FUVFIoZGlzcGF0Y2hpbmcsIDA2NDQsIGRpc3BhdGNoaW5nX3Nob3csCj4gLQkJCcKg ZGlzcGF0Y2hpbmdfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcoZGlzcGF0Y2hpbmcp Owo+IMKgCj4gwqBzdGF0aWMgc3NpemVfdCBjcHVfcG9sYXJpemF0aW9uX3Nob3coc3RydWN0IGRl dmljZSAqZGV2LAo+IMKgCQkJCcKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0 ciwKPiBjaGFyICpidWYpCj4gZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvc3lzZnMuYyBi L2FyY2gvdGlsZS9rZXJuZWwvc3lzZnMuYwo+IGluZGV4IDgyNTg2N2M1Mzg1My4uYWY1MDI0ZjBm YjVhIDEwMDY0NAo+IC0tLSBhL2FyY2gvdGlsZS9rZXJuZWwvc3lzZnMuYwo+ICsrKyBiL2FyY2gv dGlsZS9rZXJuZWwvc3lzZnMuYwo+IEBAIC0xODQsNyArMTg0LDcgQEAgc3RhdGljIHNzaXplX3Qg aHZfc3RhdHNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+IMKgCXJldHVybiBuIDwgMCA/IG4g OiBjb3VudDsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgREVWSUNFX0FUVFIoaHZfc3RhdHMsIDA2NDQs IGh2X3N0YXRzX3Nob3csIGh2X3N0YXRzX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JX KGh2X3N0YXRzKTsKPiDCoAo+IMKgc3RhdGljIGludCBodl9zdGF0c19kZXZpY2VfYWRkKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0Cj4gc3Vic3lzX2ludGVyZmFjZSAqc2lmKQo+IMKgewo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMKPiBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwo+IGluZGV4IGM3NGEyMGI4MDE4Mi4uMWQwYWI4ZmY1 OTE1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwo+IEBAIC00NDcsOSArNDQ3LDkg QEAgc3RhdGljIHNzaXplX3QgZ3RfbWluX2ZyZXFfbWh6X3N0b3JlKHN0cnVjdAo+IGRldmljZSAq a2RldiwKPiDCoAo+IMKgc3RhdGljIERFVklDRV9BVFRSKGd0X2FjdF9mcmVxX21oeiwgU19JUlVH TywgZ3RfYWN0X2ZyZXFfbWh6X3Nob3csCj4gTlVMTCk7Cj4gwqBzdGF0aWMgREVWSUNFX0FUVFIo Z3RfY3VyX2ZyZXFfbWh6LCBTX0lSVUdPLCBndF9jdXJfZnJlcV9taHpfc2hvdywKPiBOVUxMKTsK PiAtc3RhdGljIERFVklDRV9BVFRSKGd0X2Jvb3N0X2ZyZXFfbWh6LCBTX0lSVUdPIHwgU19JV1VT UiwKPiBndF9ib29zdF9mcmVxX21oel9zaG93LCBndF9ib29zdF9mcmVxX21oel9zdG9yZSk7Cj4g LXN0YXRpYyBERVZJQ0VfQVRUUihndF9tYXhfZnJlcV9taHosIFNfSVJVR08gfCBTX0lXVVNSLAo+ IGd0X21heF9mcmVxX21oel9zaG93LCBndF9tYXhfZnJlcV9taHpfc3RvcmUpOwo+IC1zdGF0aWMg REVWSUNFX0FUVFIoZ3RfbWluX2ZyZXFfbWh6LCBTX0lSVUdPIHwgU19JV1VTUiwKPiBndF9taW5f ZnJlcV9taHpfc2hvdywgZ3RfbWluX2ZyZXFfbWh6X3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9B VFRSX1JXKGd0X2Jvb3N0X2ZyZXFfbWh6KTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGd0X21h eF9mcmVxX21oeik7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhndF9taW5fZnJlcV9taHopOwo+ IMKgCj4gwqBzdGF0aWMgREVWSUNFX0FUVFIodmx2X3JwZV9mcmVxX21oeiwgU19JUlVHTywgdmx2 X3JwZV9mcmVxX21oel9zaG93LAo+IE5VTEwpOwo+IMKgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv cGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwo+IGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29t cGFsLWxhcHRvcC5jCj4gaW5kZXggNmJjYjc1MGUxODY1Li40ZjliYzcyZjA1ODQgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCj4gKysrIGIvZHJpdmVy cy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCj4gQEAgLTY3OSwxOCArNjc5LDEyIEBAIHN0 YXRpYyBpbnQgYmF0X3dyaXRlYWJsZV9wcm9wZXJ0eShzdHJ1Y3QKPiBwb3dlcl9zdXBwbHkgKnBz eSwKPiDCoC8qID09PT09PT09PT09PT09ICovCj4gwqAvKiBEcml2ZXIgR2xvYmFscyAqLwo+IMKg LyogPT09PT09PT09PT09PT0gKi8KPiAtc3RhdGljIERFVklDRV9BVFRSKHdha2VfdXBfcG1lLAo+ IC0JCTA2NDQsIHdha2VfdXBfcG1lX3Nob3csCQl3YWtlX3VwX3BtZV9zCj4gdG9yZSk7Cj4gLXN0 YXRpYyBERVZJQ0VfQVRUUih3YWtlX3VwX21vZGVtLAo+IC0JCTA2NDQsIHdha2VfdXBfbW9kZW1f c2hvdywJd2FrZV91cF9tb2RlbV9zdG9yZQo+ICk7Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUih3YWtl X3VwX2xhbiwKPiAtCQkwNjQ0LCB3YWtlX3VwX2xhbl9zaG93LAl3YWtlX3VwX2xhbl9zdG9yZSk7 Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUih3YWtlX3VwX3dsYW4sCj4gLQkJMDY0NCwgd2FrZV91cF93 bGFuX3Nob3csCXdha2VfdXBfd2xhbl9zdG9yZSk7Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUih3YWtl X3VwX2tleSwKPiAtCQkwNjQ0LCB3YWtlX3VwX2tleV9zaG93LAl3YWtlX3VwX2tleV9zdG9yZSk7 Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUih3YWtlX3VwX21vdXNlLAo+IC0JCTA2NDQsIHdha2VfdXBf bW91c2Vfc2hvdywJd2FrZV91cF9tb3VzZV9zdG9yZQo+ICk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRU Ul9SVyh3YWtlX3VwX3BtZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyh3YWtlX3VwX21vZGVt KTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKHdha2VfdXBfbGFuKTsKPiArc3RhdGljIERFVklD RV9BVFRSX1JXKHdha2VfdXBfd2xhbik7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyh3YWtlX3Vw X2tleSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyh3YWtlX3VwX21vdXNlKTsKPiDCoAo+IMKg c3RhdGljIERFVklDRV9BVFRSKGZhbjFfaW5wdXQswqDCoFNfSVJVR08sIGZhbl9zaG93LMKgwqDC oMKgwqDCoMKgwqDCoMKgTlVMTCk7Cj4gwqBzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfaW5wdXQs IFNfSVJVR08sIHRlbXBfY3B1LMKgwqDCoMKgwqDCoMKgwqDCoMKgTlVMTCk7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5j Cj4gaW5kZXggNzVhMjQ1ZjM4ZTJlLi42ZWVmYjY3YjMxZjMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9zMzkwL2Npby9kZXZpY2UuYwo+ICsrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKPiBA QCAtNjAwLDcgKzYwMCw3IEBAIHN0YXRpYyBzc2l6ZV90IHZwbV9zaG93KHN0cnVjdCBkZXZpY2Ug KmRldiwKPiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiDCoHN0YXRpYyBERVZJQ0Vf QVRUUihkZXZ0eXBlLCAwNDQ0LCBkZXZ0eXBlX3Nob3csIE5VTEwpOwo+IMKgc3RhdGljIERFVklD RV9BVFRSKGN1dHlwZSwgMDQ0NCwgY3V0eXBlX3Nob3csIE5VTEwpOwo+IMKgc3RhdGljIERFVklD RV9BVFRSKG1vZGFsaWFzLCAwNDQ0LCBtb2RhbGlhc19zaG93LCBOVUxMKTsKPiAtc3RhdGljIERF VklDRV9BVFRSKG9ubGluZSwgMDY0NCwgb25saW5lX3Nob3csIG9ubGluZV9zdG9yZSk7Cj4gK3N0 YXRpYyBERVZJQ0VfQVRUUl9SVyhvbmxpbmUpOwo+IMKgc3RhdGljIERFVklDRV9BVFRSKGF2YWls YWJpbGl0eSwgMDQ0NCwgYXZhaWxhYmxlX3Nob3csIE5VTEwpOwo+IMKgc3RhdGljIERFVklDRV9B VFRSKGxvZ2dpbmcsIDAyMDAsIE5VTEwsIGluaXRpYXRlX2xvZ2dpbmcpOwo+IMKgc3RhdGljIERF VklDRV9BVFRSKHZwbSwgMDQ0NCwgdnBtX3Nob3csIE5VTEwpOwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwo+IGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRy LmMKPiBpbmRleCA3OTdiYjQyYTYzMDYuLjk1ZjdiYTNjM2YxYSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwo+ICsrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNf YXR0ci5jCj4gQEAgLTI1MTksOCArMjUxOSw3IEBAIGxwZmNfc29mdF93d3BuX3N0b3JlKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0Cj4gZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiDCoAkJCQki cmVpbml0IGFkYXB0ZXIgLSAlZFxuIiwgc3RhdDIpOwo+IMKgCXJldHVybiAoc3RhdDEgfHwgc3Rh dDIpID8gLUVJTyA6IGNvdW50Owo+IMKgfQo+IC1zdGF0aWMgREVWSUNFX0FUVFIobHBmY19zb2Z0 X3d3cG4sIFNfSVJVR08gfCBTX0lXVVNSLAo+IC0JCcKgwqDCoGxwZmNfc29mdF93d3BuX3Nob3cs IGxwZmNfc29mdF93d3BuX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGxwZmNfc29m dF93d3BuKTsKPiDCoAo+IMKgLyoqCj4gwqAgKiBscGZjX3NvZnRfd3dubl9zaG93IC0gUmV0dXJu IHRoZSBjZmcgc29mdCB3dyBub2RlIG5hbWUgZm9yIHRoZQo+IGFkYXB0ZXIKPiBAQCAtMjU4Myw4 ICsyNTgyLDcgQEAgbHBmY19zb2Z0X3d3bm5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QKPiBkZXZpY2VfYXR0cmlidXRlICphdHRyLAo+IMKgCj4gwqAJcmV0dXJuIGNvdW50Owo+IMKg fQo+IC1zdGF0aWMgREVWSUNFX0FUVFIobHBmY19zb2Z0X3d3bm4sIFNfSVJVR08gfCBTX0lXVVNS LAo+IC0JCcKgwqDCoGxwZmNfc29mdF93d25uX3Nob3csIGxwZmNfc29mdF93d25uX3N0b3JlKTsK PiArc3RhdGljIERFVklDRV9BVFRSX1JXKGxwZmNfc29mdF93d25uKTsKPiDCoAo+IMKgLyoqCj4g wqAgKiBscGZjX29hc190Z3Rfc2hvdyAtIFJldHVybiB3d3BuIG9mIHRhcmdldCB3aG9zZSBsdW5z IG1heWJlCj4gZW5hYmxlZCBmb3IKPiBAQCAtMzEwMiw4ICszMTAwLDcgQEAgTU9EVUxFX1BBUk1f REVTQyhscGZjX3BvbGwsICJGQ1AgcmluZyBwb2xsaW5nCj4gbW9kZSBjb250cm9sOiIKPiDCoAkJ wqAiIDEgLSBwb2xsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkIgo+IMKgCQnCoCIgMyAtIHBvbGwg YW5kIGRpc2FibGUgRkNQIHJpbmcgaW50ZXJydXB0cyIpOwo+IMKgCj4gLXN0YXRpYyBERVZJQ0Vf QVRUUihscGZjX3BvbGwsIFNfSVJVR08gfCBTX0lXVVNSLAo+IC0JCcKgwqDCoGxwZmNfcG9sbF9z aG93LCBscGZjX3BvbGxfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcobHBmY19wb2xs KTsKPiDCoAo+IMKgaW50IGxwZmNfbm9faGJhX3Jlc2V0X2NudDsKPiDCoHVuc2lnbmVkIGxvbmcg bHBmY19ub19oYmFfcmVzZXRbTUFYX0hCQVNfTk9fUkVTRVRdID0gewo+IEBAIC0zMzM2LDggKzMz MzMsNyBAQCBscGZjX25vZGV2X3Rtb19zZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LAo+IGlu dCB2YWwpCj4gwqAKPiDCoGxwZmNfdnBvcnRfcGFyYW1fc3RvcmUobm9kZXZfdG1vKQo+IMKgCj4g LXN0YXRpYyBERVZJQ0VfQVRUUihscGZjX25vZGV2X3RtbywgU19JUlVHTyB8IFNfSVdVU1IsCj4g LQkJwqDCoMKgbHBmY19ub2Rldl90bW9fc2hvdywgbHBmY19ub2Rldl90bW9fc3RvcmUpOwo+ICtz dGF0aWMgREVWSUNFX0FUVFJfUlcobHBmY19ub2Rldl90bW8pOwo+IMKgCj4gwqAvKgo+IMKgIyBs cGZjX2Rldmxvc3NfdG1vOiBJZiBzZXQsIGl0IHdpbGwgaG9sZCBhbGwgSS9PIGVycm9ycyBvbiBk ZXZpY2VzCj4gdGhhdAo+IEBAIC0zMzg2LDggKzMzODIsNyBAQCBscGZjX2Rldmxvc3NfdG1vX3Nl dChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCj4gaW50IHZhbCkKPiDCoH0KPiDCoAo+IMKgbHBm Y192cG9ydF9wYXJhbV9zdG9yZShkZXZsb3NzX3RtbykKPiAtc3RhdGljIERFVklDRV9BVFRSKGxw ZmNfZGV2bG9zc190bW8sIFNfSVJVR08gfCBTX0lXVVNSLAo+IC0JCcKgwqDCoGxwZmNfZGV2bG9z c190bW9fc2hvdywgbHBmY19kZXZsb3NzX3Rtb19zdG9yZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRU Ul9SVyhscGZjX2Rldmxvc3NfdG1vKTsKPiDCoAo+IMKgLyoKPiDCoCAqIGxwZmNfc3VwcHJlc3Nf cnNwOiBFbmFibGUgc3VwcHJlc3MgcnNwIGZlYXR1cmUgaXMgZmlybXdhcmUKPiBzdXBwb3J0cyBp dAo+IEBAIC0zNTgwLDggKzM1NzUsNyBAQCBscGZjX3Jlc3RyaWN0X2xvZ2luX3NldChzdHJ1Y3Qg bHBmY192cG9ydAo+ICp2cG9ydCwgaW50IHZhbCkKPiDCoAlyZXR1cm4gMDsKPiDCoH0KPiDCoGxw ZmNfdnBvcnRfcGFyYW1fc3RvcmUocmVzdHJpY3RfbG9naW4pOwo+IC1zdGF0aWMgREVWSUNFX0FU VFIobHBmY19yZXN0cmljdF9sb2dpbiwgU19JUlVHTyB8IFNfSVdVU1IsCj4gLQkJwqDCoMKgbHBm Y19yZXN0cmljdF9sb2dpbl9zaG93LAo+IGxwZmNfcmVzdHJpY3RfbG9naW5fc3RvcmUpOwo+ICtz dGF0aWMgREVWSUNFX0FUVFJfUlcobHBmY19yZXN0cmljdF9sb2dpbik7Cj4gwqAKPiDCoC8qCj4g wqAjIFNvbWUgZGlzayBkZXZpY2VzIGhhdmUgYSAic2VsZWN0IElEIiBvciAic2VsZWN0IFRhcmdl dCIKPiBjYXBhYmlsaXR5Lgo+IEBAIC0zNjk1LDggKzM2ODksNyBAQCBscGZjX3RvcG9sb2d5X3N0 b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0Cj4gZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwK PiDCoH0KPiDCoAo+IMKgbHBmY19wYXJhbV9zaG93KHRvcG9sb2d5KQo+IC1zdGF0aWMgREVWSUNF X0FUVFIobHBmY190b3BvbG9neSwgU19JUlVHTyB8IFNfSVdVU1IsCj4gLQkJbHBmY190b3BvbG9n eV9zaG93LCBscGZjX3RvcG9sb2d5X3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGxw ZmNfdG9wb2xvZ3kpOwo+IMKgCj4gwqAvKioKPiDCoCAqIGxwZmNfc3RhdGljX3Zwb3J0X3Nob3c6 IFJlYWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yCj4gQEAgLTM5NTQsOCArMzk0Nyw3IEBAIGxwZmNf c3RhdF9kYXRhX2N0cmxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gc3RydWN0IGRldmljZV9h dHRyaWJ1dGUgKmF0dHIsCj4gwqAvKgo+IMKgICogU3lzZnMgYXR0cmlidXRlIHRvIGNvbnRyb2wg dGhlIHN0YXRpc3RpY2FsIGRhdGEgY29sbGVjdGlvbi4KPiDCoCAqLwo+IC1zdGF0aWMgREVWSUNF X0FUVFIobHBmY19zdGF0X2RhdGFfY3RybCwgU19JUlVHTyB8IFNfSVdVU1IsCj4gLQkJwqDCoMKg bHBmY19zdGF0X2RhdGFfY3RybF9zaG93LAo+IGxwZmNfc3RhdF9kYXRhX2N0cmxfc3RvcmUpOwo+ ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcobHBmY19zdGF0X2RhdGFfY3RybCk7Cj4gwqAKPiDCoC8q Cj4gwqAgKiBscGZjX2RydnJfc3RhdF9kYXRhOiBzeXNmcyBhdHRyIHRvIGdldCBkcml2ZXIgc3Rh dGlzdGljYWwgZGF0YS4KPiBAQCAtNDE5NCw4ICs0MTg2LDcgQEAgbHBmY19saW5rX3NwZWVkX2lu aXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQKPiB2YWwpCj4gwqAJcmV0dXJuIC1FSU5WQUw7 Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIERFVklDRV9BVFRSKGxwZmNfbGlua19zcGVlZCwgU19JUlVH TyB8IFNfSVdVU1IsCj4gLQkJwqDCoMKgbHBmY19saW5rX3NwZWVkX3Nob3csIGxwZmNfbGlua19z cGVlZF9zdG9yZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhscGZjX2xpbmtfc3BlZWQpOwo+ IMKgCj4gwqAvKgo+IMKgIyBscGZjX2Flcl9zdXBwb3J0OiBTdXBwb3J0IFBDSWUgZGV2aWNlIEFk dmFuY2VkIEVycm9yIFJlcG9ydGluZwo+IChBRVIpCj4gQEAgLTQyODgsOCArNDI3OSw3IEBAIGxw ZmNfYWVyX3N1cHBvcnRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+IHN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICphdHRyLAo+IMKgCXJldHVybiByYzsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgREVW SUNFX0FUVFIobHBmY19hZXJfc3VwcG9ydCwgU19JUlVHTyB8IFNfSVdVU1IsCj4gLQkJwqDCoMKg bHBmY19hZXJfc3VwcG9ydF9zaG93LCBscGZjX2Flcl9zdXBwb3J0X3N0b3JlKTsKPiArc3RhdGlj IERFVklDRV9BVFRSX1JXKGxwZmNfYWVyX3N1cHBvcnQpOwo+IMKgCj4gwqAvKioKPiDCoCAqIGxw ZmNfYWVyX2NsZWFudXBfc3RhdGUgLSBDbGVhbiB1cCBhZXIgc3RhdGUgdG8gdGhlIGFlciBlbmFi bGVkCj4gZGV2aWNlCj4gQEAgLTQ0MzYsOCArNDQyNiw3IEBAIExQRkNfQVRUUihzcmlvdl9ucl92 aXJ0Zm4sCj4gTFBGQ19ERUZfVkZOX1BFUl9QRk4sIDAsIExQRkNfTUFYX1ZGTl9QRVJfUEZOLAo+ IMKgCSJFbmFibGUgUENJZSBkZXZpY2UgU1ItSU9WIHZpcnR1YWwgZm4iKTsKPiDCoAo+IMKgbHBm Y19wYXJhbV9zaG93KHNyaW92X25yX3ZpcnRmbikKPiAtc3RhdGljIERFVklDRV9BVFRSKGxwZmNf c3Jpb3ZfbnJfdmlydGZuLCBTX0lSVUdPIHwgU19JV1VTUiwKPiAtCQnCoMKgwqBscGZjX3NyaW92 X25yX3ZpcnRmbl9zaG93LAo+IGxwZmNfc3Jpb3ZfbnJfdmlydGZuX3N0b3JlKTsKPiArc3RhdGlj IERFVklDRV9BVFRSX1JXKGxwZmNfc3Jpb3ZfbnJfdmlydGZuKTsKPiDCoAo+IMKgLyoqCj4gwqAg KiBscGZjX3JlcXVlc3RfZmlybXdhcmVfc3RvcmUgLSBSZXF1ZXN0IGZvciBMaW51eCBnZW5lcmlj IGZpcm13YXJlCj4gdXBncmFkZQo+IEBAIC00NjExLDggKzQ2MDAsNyBAQCBscGZjX2ZjcF9pbWF4 X2luaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQKPiB2YWwpCj4gwqAJcmV0dXJuIDA7Cj4g wqB9Cj4gwqAKPiAtc3RhdGljIERFVklDRV9BVFRSKGxwZmNfZmNwX2ltYXgsIFNfSVJVR08gfCBT X0lXVVNSLAo+IC0JCcKgwqDCoGxwZmNfZmNwX2ltYXhfc2hvdywgbHBmY19mY3BfaW1heF9zdG9y ZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhscGZjX2ZjcF9pbWF4KTsKPiDCoAo+IMKgLyoK PiDCoCAqIGxwZmNfYXV0b19pbWF4OiBDb250cm9scyBBdXRvLWludGVycnVwdCBjb2FsZXNjaW5n IHZhbHVlcwo+IHN1cHBvcnQuCj4gQEAgLTQ3NzIsOCArNDc2MCw3IEBAIGxwZmNfZmNwX2NwdV9t YXBfaW5pdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCj4gaW50IHZhbCkKPiDCoAlyZXR1cm4gMDsK PiDCoH0KPiDCoAo+IC1zdGF0aWMgREVWSUNFX0FUVFIobHBmY19mY3BfY3B1X21hcCwgU19JUlVH TyB8IFNfSVdVU1IsCj4gLQkJwqDCoMKgbHBmY19mY3BfY3B1X21hcF9zaG93LCBscGZjX2ZjcF9j cHVfbWFwX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGxwZmNfZmNwX2NwdV9tYXAp Owo+IMKgCj4gwqAvKgo+IMKgIyBscGZjX2ZjcF9jbGFzczrCoMKgRGV0ZXJtaW5lcyBGQyBjbGFz cyB0byB1c2UgZm9yIHRoZSBGQ1AgcHJvdG9jb2wuCj4gQEAgLTQ4NTksOSArNDg0Niw3IEBAIGxw ZmNfbWF4X3Njc2ljbXBsX3RpbWVfc2V0KHN0cnVjdCBscGZjX3Zwb3J0Cj4gKnZwb3J0LCBpbnQg dmFsKQo+IMKgCXJldHVybiAwOwo+IMKgfQo+IMKgbHBmY192cG9ydF9wYXJhbV9zdG9yZShtYXhf c2NzaWNtcGxfdGltZSk7Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihscGZjX21heF9zY3NpY21wbF90 aW1lLCBTX0lSVUdPIHwgU19JV1VTUiwKPiAtCQnCoMKgwqBscGZjX21heF9zY3NpY21wbF90aW1l X3Nob3csCj4gLQkJwqDCoMKgbHBmY19tYXhfc2NzaWNtcGxfdGltZV9zdG9yZSk7Cj4gK3N0YXRp YyBERVZJQ0VfQVRUUl9SVyhscGZjX21heF9zY3NpY21wbF90aW1lKTsKPiDCoAo+IMKgLyoKPiDC oCMgbHBmY19hY2swOiBVc2UgQUNLMCwgaW5zdGVhZCBvZiBBQ0sxIGZvciBjbGFzcyAyIGFja25v d2xlZGdlbWVudC4KPiBWYWx1ZQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1h bF9zeXNmcy5jCj4gYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXNmcy5jCj4gaW5kZXggZmI4 MGM5NmQ4ZjczLi5jMDA4YWY3ZmI0ODAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy90aGVybWFsL3Ro ZXJtYWxfc3lzZnMuYwo+ICsrKyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5c2ZzLmMKPiBA QCAtMzk4LDE0ICszOTgsMTMgQEAgY3JlYXRlX3MzMl90enBfYXR0cihvZmZzZXQpOwo+IMKgICov Cj4gwqBzdGF0aWMgREVWSUNFX0FUVFIodHlwZSwgMDQ0NCwgdHlwZV9zaG93LCBOVUxMKTsKPiDC oHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wLCAwNDQ0LCB0ZW1wX3Nob3csIE5VTEwpOwo+IC1zdGF0 aWMgREVWSUNFX0FUVFIocG9saWN5LCBTX0lSVUdPIHwgU19JV1VTUiwgcG9saWN5X3Nob3csCj4g cG9saWN5X3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKHBvbGljeSk7Cj4gwqBzdGF0 aWMgREVWSUNFX0FUVFIoYXZhaWxhYmxlX3BvbGljaWVzLCBTX0lSVUdPLAo+IGF2YWlsYWJsZV9w b2xpY2llc19zaG93LCBOVUxMKTsKPiAtc3RhdGljIERFVklDRV9BVFRSKHN1c3RhaW5hYmxlX3Bv d2VyLCBTX0lXVVNSIHwgU19JUlVHTywKPiBzdXN0YWluYWJsZV9wb3dlcl9zaG93LAo+IC0JCcKg wqDCoHN1c3RhaW5hYmxlX3Bvd2VyX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKHN1 c3RhaW5hYmxlX3Bvd2VyKTsKPiDCoAo+IMKgLyogVGhlc2UgdGhlcm1hbCB6b25lIGRldmljZSBh dHRyaWJ1dGVzIGFyZSBjcmVhdGVkIGJhc2VkIG9uCj4gY29uZGl0aW9ucyAqLwo+IC1zdGF0aWMg REVWSUNFX0FUVFIobW9kZSwgMDY0NCwgbW9kZV9zaG93LCBtb2RlX3N0b3JlKTsKPiAtc3RhdGlj IERFVklDRV9BVFRSKHBhc3NpdmUsIFNfSVJVR08gfCBTX0lXVVNSLCBwYXNzaXZlX3Nob3csCj4g cGFzc2l2ZV9zdG9yZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhtb2RlKTsKPiArc3RhdGlj IERFVklDRV9BVFRSX1JXKHBhc3NpdmUpOwo+IMKgCj4gwqAvKiBUaGVzZSBhdHRyaWJ1dGVzIGFy ZSB1bmNvbmRpdGlvbmFsbHkgYWRkZWQgdG8gYSB0aGVybWFsIHpvbmUgKi8KPiDCoHN0YXRpYyBz dHJ1Y3QgYXR0cmlidXRlICp0aGVybWFsX3pvbmVfZGV2X2F0dHJzW10gPSB7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zaC0K PiBzY2kuYwo+IGluZGV4IGQ5ZjM5OWM0ZTkwYy4uNzI1N2MwNzhlMTU1IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuYwo+ICsrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9z aC1zY2kuYwo+IEBAIC0xMTQ0LDcgKzExNDQsNyBAQCBzdGF0aWMgc3NpemVfdCByeF9maWZvX3Rp bWVvdXRfc3RvcmUoc3RydWN0Cj4gZGV2aWNlICpkZXYsCj4gwqAJcmV0dXJuIGNvdW50Owo+IMKg fQo+IMKgCj4gLXN0YXRpYyBERVZJQ0VfQVRUUihyeF9maWZvX3RpbWVvdXQsIDA2NDQsIHJ4X2Zp Zm9fdGltZW91dF9zaG93LAo+IHJ4X2ZpZm9fdGltZW91dF9zdG9yZSk7Cj4gK3N0YXRpYyBERVZJ Q0VfQVRUUl9SVyhyeF9maWZvX3RpbWVvdXQpOwo+IMKgCj4gwqAKPiDCoCNpZmRlZiBDT05GSUdf U0VSSUFMX1NIX1NDSV9ETUEKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRi Z2NhcC5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLQo+IGRiZ2NhcC5jCj4gaW5kZXggNDUyZGYw Zjg3ZDZlLi5hMWFiOGFjZjM5YmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNp LWRiZ2NhcC5jCj4gKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZ2NhcC5jCj4gQEAgLTky MCw3ICs5MjAsNyBAQCBzdGF0aWMgc3NpemVfdCBkYmNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2 LAo+IMKgCXJldHVybiBjb3VudDsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgREVWSUNFX0FUVFIoZGJj LCAwNjQ0LCBkYmNfc2hvdywgZGJjX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGRi Yyk7Cj4gwqAKPiDCoGludCB4aGNpX2RiY19pbml0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKPiDC oHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jIGIvZHJpdmVycy91 c2IvcGh5L3BoeS0KPiB0YWh2by5jCj4gaW5kZXggYjNjZTQyZWRiMzczLi43ZjdjNWM4MjQyMGQg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jCj4gKysrIGIvZHJpdmVy cy91c2IvcGh5L3BoeS10YWh2by5jCj4gQEAgLTMxMCw3ICszMTAsNyBAQCBzdGF0aWMgc3NpemVf dCBvdGdfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlCj4gKmRldmljZSwKPiDCoAo+IMKgCXJldHVy biByOwo+IMKgfQo+IC1zdGF0aWMgREVWSUNFX0FUVFIob3RnX21vZGUsIDA2NDQsIG90Z19tb2Rl X3Nob3csIG90Z19tb2RlX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKG90Z19tb2Rl KTsKPiDCoAo+IMKgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRhaHZvX2F0dHJpYnV0ZXNbXSA9 IHsKPiDCoAkmZGV2X2F0dHJfdmJ1cy5hdHRyLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVv L2ZiZGV2L2F1b19rMTkweC5jCj4gYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2F1b19rMTkweC5jCj4g aW5kZXggMGQwNjAzODMyNGUwLi4xZTM4M2M1NDc2MzMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy92 aWRlby9mYmRldi9hdW9fazE5MHguYwo+ICsrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvYXVvX2sx OTB4LmMKPiBAQCAtNzA4LDggKzcwOCw4IEBAIHN0YXRpYyBzc2l6ZV90IHRlbXBfc2hvdyhzdHJ1 Y3QgZGV2aWNlICpkZXYsCj4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gwqAJcmV0 dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXApOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyBERVZJ Q0VfQVRUUih1cGRhdGVfbW9kZSwgMDY0NCwgdXBkYXRlX21vZGVfc2hvdywKPiB1cGRhdGVfbW9k ZV9zdG9yZSk7Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihmbGFzaCwgMDY0NCwgZmxhc2hfc2hvdywg Zmxhc2hfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcodXBkYXRlX21vZGUpOwo+ICtz dGF0aWMgREVWSUNFX0FUVFJfUlcoZmxhc2gpOwo+IMKgc3RhdGljIERFVklDRV9BVFRSKHRlbXAs IDA2NDQsIHRlbXBfc2hvdywgTlVMTCk7Cj4gwqAKPiDCoHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRl ICphdW9rMTkweF9hdHRyaWJ1dGVzW10gPSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8v ZmJkZXYvdzEwMGZiLmMKPiBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvdzEwMGZiLmMKPiBpbmRleCBk NTcwZTE5YTI4NjQuLjAzNWZmNmUwMjg5NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2Zi ZGV2L3cxMDBmYi5jCj4gKysrIGIvZHJpdmVycy92aWRlby9mYmRldi93MTAwZmIuYwo+IEBAIC0x MTAsNyArMTEwLDcgQEAgc3RhdGljIHNzaXplX3QgZmxpcF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbgo+IMKgCXJldHVybiBjb3Vu dDsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgREVWSUNFX0FUVFIoZmxpcCwgMDY0NCwgZmxpcF9zaG93 LCBmbGlwX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGZsaXApOwo+IMKgCj4gwqBz dGF0aWMgc3NpemVfdCB3MTAwZmJfcmVnX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QK PiBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkK PiDCoHsKPiBAQCAtMTY2LDcgKzE2Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGZhc3RwbGxjbGtfc3Rv cmUoc3RydWN0IGRldmljZQo+ICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHQKPiDC oAlyZXR1cm4gY291bnQ7Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIERFVklDRV9BVFRSKGZhc3RwbGxj bGssIDA2NDQsIGZhc3RwbGxjbGtfc2hvdywKPiBmYXN0cGxsY2xrX3N0b3JlKTsKPiArc3RhdGlj IERFVklDRV9BVFRSX1JXKGZhc3RwbGxjbGspOwo+IMKgCj4gwqAvKgo+IMKgICogU29tZSB0b3Vj aHNjcmVlbnMgbmVlZCBoc3luYyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB2aWRlbyBkcml2ZXIgdG8K PiBkaWZmIC0tZ2l0IGEvbGliL3Rlc3RfZmlybXdhcmUuYyBiL2xpYi90ZXN0X2Zpcm13YXJlLmMK PiBpbmRleCA2NGE0Yzc2Y2JhMmIuLjk2NDc4NGRjMTYwMiAxMDA2NDQKPiAtLS0gYS9saWIvdGVz dF9maXJtd2FyZS5jCj4gKysrIGIvbGliL3Rlc3RfZmlybXdhcmUuYwo+IEBAIC0zNTksNyArMzU5 LDcgQEAgc3RhdGljIHNzaXplX3QgY29uZmlnX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlCj4gKmRl diwKPiDCoHsKPiDCoAlyZXR1cm4gY29uZmlnX3Rlc3Rfc2hvd19zdHIoYnVmLCB0ZXN0X2Z3X2Nv bmZpZy0+bmFtZSk7Cj4gwqB9Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihjb25maWdfbmFtZSwgMDY0 NCwgY29uZmlnX25hbWVfc2hvdywKPiBjb25maWdfbmFtZV9zdG9yZSk7Cj4gK3N0YXRpYyBERVZJ Q0VfQVRUUl9SVyhjb25maWdfbmFtZSk7Cj4gwqAKPiDCoHN0YXRpYyBzc2l6ZV90IGNvbmZpZ19u dW1fcmVxdWVzdHNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+IMKgCQkJCQnCoHN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlCj4gKmF0dHIsCj4gQEAgLTM4OCw4ICszODgsNyBAQCBzdGF0aWMgc3Np emVfdCBjb25maWdfbnVtX3JlcXVlc3RzX3Nob3coc3RydWN0Cj4gZGV2aWNlICpkZXYsCj4gwqB7 Cj4gwqAJcmV0dXJuIHRlc3RfZGV2X2NvbmZpZ19zaG93X3U4KGJ1ZiwgdGVzdF9md19jb25maWct Cj4gPm51bV9yZXF1ZXN0cyk7Cj4gwqB9Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihjb25maWdfbnVt X3JlcXVlc3RzLCAwNjQ0LAo+IGNvbmZpZ19udW1fcmVxdWVzdHNfc2hvdywKPiAtCQnCoMKgwqBj b25maWdfbnVtX3JlcXVlc3RzX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGNvbmZp Z19udW1fcmVxdWVzdHMpOwo+IMKgCj4gwqBzdGF0aWMgc3NpemVfdCBjb25maWdfc3luY19kaXJl Y3Rfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+IMKgCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZQo+ICphdHRyLAo+IEBAIC00MTEsOCArNDEwLDcgQEAgc3RhdGljIHNzaXplX3QgY29uZmln X3N5bmNfZGlyZWN0X3Nob3coc3RydWN0Cj4gZGV2aWNlICpkZXYsCj4gwqB7Cj4gwqAJcmV0dXJu IHRlc3RfZGV2X2NvbmZpZ19zaG93X2Jvb2woYnVmLCB0ZXN0X2Z3X2NvbmZpZy0KPiA+c3luY19k aXJlY3QpOwo+IMKgfQo+IC1zdGF0aWMgREVWSUNFX0FUVFIoY29uZmlnX3N5bmNfZGlyZWN0LCAw NjQ0LAo+IGNvbmZpZ19zeW5jX2RpcmVjdF9zaG93LAo+IC0JCcKgwqDCoGNvbmZpZ19zeW5jX2Rp cmVjdF9zdG9yZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb25maWdfc3luY19kaXJlY3Qp Owo+IMKgCj4gwqBzdGF0aWMgc3NpemVfdCBjb25maWdfc2VuZF91ZXZlbnRfc3RvcmUoc3RydWN0 IGRldmljZSAqZGV2LAo+IMKgCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQo+ICphdHRyLAo+ IEBAIC00MjgsOCArNDI2LDcgQEAgc3RhdGljIHNzaXplX3QgY29uZmlnX3NlbmRfdWV2ZW50X3No b3coc3RydWN0Cj4gZGV2aWNlICpkZXYsCj4gwqB7Cj4gwqAJcmV0dXJuIHRlc3RfZGV2X2NvbmZp Z19zaG93X2Jvb2woYnVmLCB0ZXN0X2Z3X2NvbmZpZy0KPiA+c2VuZF91ZXZlbnQpOwo+IMKgfQo+ IC1zdGF0aWMgREVWSUNFX0FUVFIoY29uZmlnX3NlbmRfdWV2ZW50LCAwNjQ0LAo+IGNvbmZpZ19z ZW5kX3VldmVudF9zaG93LAo+IC0JCcKgwqDCoGNvbmZpZ19zZW5kX3VldmVudF9zdG9yZSk7Cj4g K3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb25maWdfc2VuZF91ZXZlbnQpOwo+IMKgCj4gwqBzdGF0 aWMgc3NpemVfdCBjb25maWdfcmVhZF9md19pZHhfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+ IMKgCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQo+ICphdHRyLAo+IEBAIC00NDUsOCArNDQy LDcgQEAgc3RhdGljIHNzaXplX3QgY29uZmlnX3JlYWRfZndfaWR4X3Nob3coc3RydWN0Cj4gZGV2 aWNlICpkZXYsCj4gwqB7Cj4gwqAJcmV0dXJuIHRlc3RfZGV2X2NvbmZpZ19zaG93X3U4KGJ1Ziwg dGVzdF9md19jb25maWctCj4gPnJlYWRfZndfaWR4KTsKPiDCoH0KPiAtc3RhdGljIERFVklDRV9B VFRSKGNvbmZpZ19yZWFkX2Z3X2lkeCwgMDY0NCwKPiBjb25maWdfcmVhZF9md19pZHhfc2hvdywK PiAtCQnCoMKgwqBjb25maWdfcmVhZF9md19pZHhfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FU VFJfUlcoY29uZmlnX3JlYWRfZndfaWR4KTsKPiDCoAo+IMKgCj4gwqBzdGF0aWMgc3NpemVfdCB0 cmlnZ2VyX3JlcXVlc3Rfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+IGRpZmYgLS1naXQgYS9s aWIvdGVzdF9rbW9kLmMgYi9saWIvdGVzdF9rbW9kLmMKPiBpbmRleCAzMzdmNDA4YjRkZTYuLmUz NzJiOTdlZWUxMyAxMDA2NDQKPiAtLS0gYS9saWIvdGVzdF9rbW9kLmMKPiArKysgYi9saWIvdGVz dF9rbW9kLmMKPiBAQCAtNjk0LDggKzY5NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGNvbmZpZ190ZXN0 X2RyaXZlcl9zaG93KHN0cnVjdAo+IGRldmljZSAqZGV2LAo+IMKgCXJldHVybiBjb25maWdfdGVz dF9zaG93X3N0cigmdGVzdF9kZXYtPmNvbmZpZ19tdXRleCwgYnVmLAo+IMKgCQkJCcKgwqDCoMKg Y29uZmlnLT50ZXN0X2RyaXZlcik7Cj4gwqB9Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihjb25maWdf dGVzdF9kcml2ZXIsIDA2NDQsCj4gY29uZmlnX3Rlc3RfZHJpdmVyX3Nob3csCj4gLQkJwqDCoMKg Y29uZmlnX3Rlc3RfZHJpdmVyX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGNvbmZp Z190ZXN0X2RyaXZlcik7Cj4gwqAKPiDCoHN0YXRpYyBzc2l6ZV90IGNvbmZpZ190ZXN0X2ZzX3N0 b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKPiDCoAkJCQnCoMKgwqDCoHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLAo+IEBAIC03MjYsOCArNzI1LDcgQEAgc3RhdGljIHNzaXplX3QgY29uZmln X3Rlc3RfZnNfc2hvdyhzdHJ1Y3QgZGV2aWNlCj4gKmRldiwKPiDCoAlyZXR1cm4gY29uZmlnX3Rl c3Rfc2hvd19zdHIoJnRlc3RfZGV2LT5jb25maWdfbXV0ZXgsIGJ1ZiwKPiDCoAkJCQnCoMKgwqDC oGNvbmZpZy0+dGVzdF9mcyk7Cj4gwqB9Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihjb25maWdfdGVz dF9mcywgMDY0NCwgY29uZmlnX3Rlc3RfZnNfc2hvdywKPiAtCQnCoMKgwqBjb25maWdfdGVzdF9m c19zdG9yZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb25maWdfdGVzdF9mcyk7Cj4gwqAK PiDCoHN0YXRpYyBpbnQgdHJpZ2dlcl9jb25maWdfcnVuX3R5cGUoc3RydWN0IGttb2RfdGVzdF9k ZXZpY2UKPiAqdGVzdF9kZXYsCj4gwqAJCQkJwqDCoMKgZW51bSBrbW9kX3Rlc3RfY2FzZSB0ZXN0 X2Nhc2UsCj4gQEAgLTEwMTIsOCArMTAxMCw3IEBAIHN0YXRpYyBzc2l6ZV90IGNvbmZpZ19udW1f dGhyZWFkc19zaG93KHN0cnVjdAo+IGRldmljZSAqZGV2LAo+IMKgCj4gwqAJcmV0dXJuIHRlc3Rf ZGV2X2NvbmZpZ19zaG93X2ludCh0ZXN0X2RldiwgYnVmLCBjb25maWctCj4gPm51bV90aHJlYWRz KTsKPiDCoH0KPiAtc3RhdGljIERFVklDRV9BVFRSKGNvbmZpZ19udW1fdGhyZWFkcywgMDY0NCwK PiBjb25maWdfbnVtX3RocmVhZHNfc2hvdywKPiAtCQnCoMKgwqBjb25maWdfbnVtX3RocmVhZHNf c3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcoY29uZmlnX251bV90aHJlYWRzKTsKPiDC oAo+IMKgc3RhdGljIHNzaXplX3QgY29uZmlnX3Rlc3RfY2FzZV9zdG9yZShzdHJ1Y3QgZGV2aWNl ICpkZXYsCj4gwqAJCQkJwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIs Cj4gQEAgLTEwMzcsOCArMTAzNCw3IEBAIHN0YXRpYyBzc2l6ZV90IGNvbmZpZ190ZXN0X2Nhc2Vf c2hvdyhzdHJ1Y3QKPiBkZXZpY2UgKmRldiwKPiDCoAo+IMKgCXJldHVybiB0ZXN0X2Rldl9jb25m aWdfc2hvd191aW50KHRlc3RfZGV2LCBidWYsIGNvbmZpZy0KPiA+dGVzdF9jYXNlKTsKPiDCoH0K PiAtc3RhdGljIERFVklDRV9BVFRSKGNvbmZpZ190ZXN0X2Nhc2UsIDA2NDQsIGNvbmZpZ190ZXN0 X2Nhc2Vfc2hvdywKPiAtCQnCoMKgwqBjb25maWdfdGVzdF9jYXNlX3N0b3JlKTsKPiArc3RhdGlj IERFVklDRV9BVFRSX1JXKGNvbmZpZ190ZXN0X2Nhc2UpOwo+IMKgCj4gwqBzdGF0aWMgc3NpemVf dCB0ZXN0X3Jlc3VsdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiDCoAkJCQlzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiBAQCAtMTA0OSw3ICsxMDQ1LDcgQEAgc3RhdGljIHNzaXpl X3QgdGVzdF9yZXN1bHRfc2hvdyhzdHJ1Y3QgZGV2aWNlCj4gKmRldiwKPiDCoAo+IMKgCXJldHVy biB0ZXN0X2Rldl9jb25maWdfc2hvd19pbnQodGVzdF9kZXYsIGJ1ZiwgY29uZmlnLQo+ID50ZXN0 X3Jlc3VsdCk7Cj4gwqB9Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUih0ZXN0X3Jlc3VsdCwgMDY0NCwg dGVzdF9yZXN1bHRfc2hvdywKPiB0ZXN0X3Jlc3VsdF9zdG9yZSk7Cj4gK3N0YXRpYyBERVZJQ0Vf QVRUUl9SVyh0ZXN0X3Jlc3VsdCk7Cj4gwqAKPiDCoCNkZWZpbmUgVEVTVF9LTU9EX0RFVl9BVFRS KG5hbWUpCQkmZGV2X2F0dHJfIyNuYW1lLmF0dAo+IHIKPiDCoAo+IGRpZmYgLS1naXQgYS9zb3Vu ZC9zb2Mvb21hcC9tY2JzcC5jIGIvc291bmQvc29jL29tYXAvbWNic3AuYwo+IGluZGV4IDdhNTRl MzA4MzIwMy4uNzlkNGRjNzg1ZTVjIDEwMDY0NAo+IC0tLSBhL3NvdW5kL3NvYy9vbWFwL21jYnNw LmMKPiArKysgYi9zb3VuZC9zb2Mvb21hcC9tY2JzcC5jCj4gQEAgLTg1NCw3ICs4NTQsNyBAQCBz dGF0aWMgc3NpemVfdCBkbWFfb3BfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlCj4gKmRldiwKPiDC oAlyZXR1cm4gc2l6ZTsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgREVWSUNFX0FUVFIoZG1hX29wX21v ZGUsIDA2NDQsIGRtYV9vcF9tb2RlX3Nob3csCj4gZG1hX29wX21vZGVfc3RvcmUpOwo+ICtzdGF0 aWMgREVWSUNFX0FUVFJfUlcoZG1hX29wX21vZGUpOwo+IMKgCj4gwqBzdGF0aWMgY29uc3Qgc3Ry dWN0IGF0dHJpYnV0ZSAqYWRkaXRpb25hbF9hdHRyc1tdID0gewo+IMKgCSZkZXZfYXR0cl9tYXhf dHhfdGhyZXMuYXR0ciwKPiBAQCAtOTIzLDcgKzkyMyw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0X3Rh cHNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+IMKgCXJldHVybiBzaXplOwo+IMKgfQo+IMKg Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihzdF90YXBzLCAwNjQ0LCBzdF90YXBzX3Nob3csIHN0X3Rh cHNfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RfdGFwcyk7Cj4gwqAKPiDCoHN0 YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpzaWRldG9uZV9hdHRyc1tdID0gewo+IMKgCSZk ZXZfYXR0cl9zdF90YXBzLmF0dHIsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhang Rui Date: Thu, 21 Dec 2017 00:47:51 +0000 Subject: Re: [-next PATCH 2/4] treewide: Use DEVICE_ATTR_RW Message-Id: <1513817271.2592.2.camel@intel.com> List-Id: References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: Joe Perches , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Cezary Jackiewicz , Darren Hart , Andy Shevchenko , Sebastian Ott , Peter Oberparleiter , James Smart , Dick Kennedy , Eduardo Valentin , Greg Kroah-Hartman , Mathias Nyman , Felipe Balbi , "Luis R. Rodriguez" , Peter Ujfalusi , Jarkko Nikula Cc: alsa-devel@alsa-project.org, Liam Girdwood , David Airlie , Heiko Carstens , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, Takashi Iwai , linux-s390@vger.kernel.org, linux-omap@vger.kernel.org, "James E.J. Bottomley" , linux-scsi@vger.kernel.org, linux-pm@vger.kernel.org, linux-serial@vger.kernel.org, Jiri Slaby , platform-driver-x86@vger.kernel.org, Bartlomiej Zolnierkiewicz , intel-gfx@lists.freedesktop.org, Mark Brown , Jaroslav Kysela , "Martin K. Petersen" , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Martin Schwidefsky On Tue, 2017-12-19 at 10:15 -0800, Joe Perches wrote: > Convert DEVICE_ATTR uses to DEVICE_ATTR_RW where possible. > > Done with perl script: > > $ git grep -w --name-only DEVICE_ATTR | \ >   xargs perl -i -e 'local $/; while (<>) { > s/\bDEVICE_ATTR\s*\(\s*(\w+)\s*,\s*\(?(\s*S_IRUGO\s*\|\s*S_IWUSR|\s*S > _IWUSR\s*\|\s*S_IRUGO\s*|\s*0644\s*)\)?\s*,\s*\1_show\s*,\s*\1_store\ > s*\)/DEVICE_ATTR_RW(\1)/g; print;}' > > Signed-off-by: Joe Perches > --- >  arch/s390/kernel/topology.c          |  3 +-- >  arch/tile/kernel/sysfs.c             |  2 +- >  drivers/gpu/drm/i915/i915_sysfs.c    |  6 ++--- >  drivers/platform/x86/compal-laptop.c | 18 +++++---------- >  drivers/s390/cio/device.c            |  2 +- >  drivers/scsi/lpfc/lpfc_attr.c        | 43 ++++++++++++------------ > ------------ >  drivers/thermal/thermal_sysfs.c      |  9 ++++---- For the thermal part, ACK-by: Zhang Rui thanks, rui >  drivers/tty/serial/sh-sci.c          |  2 +- >  drivers/usb/host/xhci-dbgcap.c       |  2 +- >  drivers/usb/phy/phy-tahvo.c          |  2 +- >  drivers/video/fbdev/auo_k190x.c      |  4 ++-- >  drivers/video/fbdev/w100fb.c         |  4 ++-- >  lib/test_firmware.c                  | 14 +++++------- >  lib/test_kmod.c                      | 14 +++++------- >  sound/soc/omap/mcbsp.c               |  4 ++-- >  15 files changed, 49 insertions(+), 80 deletions(-) > > diff --git a/arch/s390/kernel/topology.c > b/arch/s390/kernel/topology.c > index 4d5b65e527b5..4b6e0397f66d 100644 > --- a/arch/s390/kernel/topology.c > +++ b/arch/s390/kernel/topology.c > @@ -404,8 +404,7 @@ static ssize_t dispatching_store(struct device > *dev, >   put_online_cpus(); >   return rc ? rc : count; >  } > -static DEVICE_ATTR(dispatching, 0644, dispatching_show, > -  dispatching_store); > +static DEVICE_ATTR_RW(dispatching); >   >  static ssize_t cpu_polarization_show(struct device *dev, >        struct device_attribute *attr, > char *buf) > diff --git a/arch/tile/kernel/sysfs.c b/arch/tile/kernel/sysfs.c > index 825867c53853..af5024f0fb5a 100644 > --- a/arch/tile/kernel/sysfs.c > +++ b/arch/tile/kernel/sysfs.c > @@ -184,7 +184,7 @@ static ssize_t hv_stats_store(struct device *dev, >   return n < 0 ? n : count; >  } >   > -static DEVICE_ATTR(hv_stats, 0644, hv_stats_show, hv_stats_store); > +static DEVICE_ATTR_RW(hv_stats); >   >  static int hv_stats_device_add(struct device *dev, struct > subsys_interface *sif) >  { > diff --git a/drivers/gpu/drm/i915/i915_sysfs.c > b/drivers/gpu/drm/i915/i915_sysfs.c > index c74a20b80182..1d0ab8ff5915 100644 > --- a/drivers/gpu/drm/i915/i915_sysfs.c > +++ b/drivers/gpu/drm/i915/i915_sysfs.c > @@ -447,9 +447,9 @@ static ssize_t gt_min_freq_mhz_store(struct > device *kdev, >   >  static DEVICE_ATTR(gt_act_freq_mhz, S_IRUGO, gt_act_freq_mhz_show, > NULL); >  static DEVICE_ATTR(gt_cur_freq_mhz, S_IRUGO, gt_cur_freq_mhz_show, > NULL); > -static DEVICE_ATTR(gt_boost_freq_mhz, S_IRUGO | S_IWUSR, > gt_boost_freq_mhz_show, gt_boost_freq_mhz_store); > -static DEVICE_ATTR(gt_max_freq_mhz, S_IRUGO | S_IWUSR, > gt_max_freq_mhz_show, gt_max_freq_mhz_store); > -static DEVICE_ATTR(gt_min_freq_mhz, S_IRUGO | S_IWUSR, > gt_min_freq_mhz_show, gt_min_freq_mhz_store); > +static DEVICE_ATTR_RW(gt_boost_freq_mhz); > +static DEVICE_ATTR_RW(gt_max_freq_mhz); > +static DEVICE_ATTR_RW(gt_min_freq_mhz); >   >  static DEVICE_ATTR(vlv_rpe_freq_mhz, S_IRUGO, vlv_rpe_freq_mhz_show, > NULL); >   > diff --git a/drivers/platform/x86/compal-laptop.c > b/drivers/platform/x86/compal-laptop.c > index 6bcb750e1865..4f9bc72f0584 100644 > --- a/drivers/platform/x86/compal-laptop.c > +++ b/drivers/platform/x86/compal-laptop.c > @@ -679,18 +679,12 @@ static int bat_writeable_property(struct > power_supply *psy, >  /* ======= */ >  /* Driver Globals */ >  /* ======= */ > -static DEVICE_ATTR(wake_up_pme, > - 0644, wake_up_pme_show, wake_up_pme_s > tore); > -static DEVICE_ATTR(wake_up_modem, > - 0644, wake_up_modem_show, wake_up_modem_store > ); > -static DEVICE_ATTR(wake_up_lan, > - 0644, wake_up_lan_show, wake_up_lan_store); > -static DEVICE_ATTR(wake_up_wlan, > - 0644, wake_up_wlan_show, wake_up_wlan_store); > -static DEVICE_ATTR(wake_up_key, > - 0644, wake_up_key_show, wake_up_key_store); > -static DEVICE_ATTR(wake_up_mouse, > - 0644, wake_up_mouse_show, wake_up_mouse_store > ); > +static DEVICE_ATTR_RW(wake_up_pme); > +static DEVICE_ATTR_RW(wake_up_modem); > +static DEVICE_ATTR_RW(wake_up_lan); > +static DEVICE_ATTR_RW(wake_up_wlan); > +static DEVICE_ATTR_RW(wake_up_key); > +static DEVICE_ATTR_RW(wake_up_mouse); >   >  static DEVICE_ATTR(fan1_input,  S_IRUGO, fan_show,          NULL); >  static DEVICE_ATTR(temp1_input, S_IRUGO, temp_cpu,          NULL); > diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c > index 75a245f38e2e..6eefb67b31f3 100644 > --- a/drivers/s390/cio/device.c > +++ b/drivers/s390/cio/device.c > @@ -600,7 +600,7 @@ static ssize_t vpm_show(struct device *dev, > struct device_attribute *attr, >  static DEVICE_ATTR(devtype, 0444, devtype_show, NULL); >  static DEVICE_ATTR(cutype, 0444, cutype_show, NULL); >  static DEVICE_ATTR(modalias, 0444, modalias_show, NULL); > -static DEVICE_ATTR(online, 0644, online_show, online_store); > +static DEVICE_ATTR_RW(online); >  static DEVICE_ATTR(availability, 0444, available_show, NULL); >  static DEVICE_ATTR(logging, 0200, NULL, initiate_logging); >  static DEVICE_ATTR(vpm, 0444, vpm_show, NULL); > diff --git a/drivers/scsi/lpfc/lpfc_attr.c > b/drivers/scsi/lpfc/lpfc_attr.c > index 797bb42a6306..95f7ba3c3f1a 100644 > --- a/drivers/scsi/lpfc/lpfc_attr.c > +++ b/drivers/scsi/lpfc/lpfc_attr.c > @@ -2519,8 +2519,7 @@ lpfc_soft_wwpn_store(struct device *dev, struct > device_attribute *attr, >   "reinit adapter - %d\n", stat2); >   return (stat1 || stat2) ? -EIO : count; >  } > -static DEVICE_ATTR(lpfc_soft_wwpn, S_IRUGO | S_IWUSR, > -    lpfc_soft_wwpn_show, lpfc_soft_wwpn_store); > +static DEVICE_ATTR_RW(lpfc_soft_wwpn); >   >  /** >   * lpfc_soft_wwnn_show - Return the cfg soft ww node name for the > adapter > @@ -2583,8 +2582,7 @@ lpfc_soft_wwnn_store(struct device *dev, struct > device_attribute *attr, >   >   return count; >  } > -static DEVICE_ATTR(lpfc_soft_wwnn, S_IRUGO | S_IWUSR, > -    lpfc_soft_wwnn_show, lpfc_soft_wwnn_store); > +static DEVICE_ATTR_RW(lpfc_soft_wwnn); >   >  /** >   * lpfc_oas_tgt_show - Return wwpn of target whose luns maybe > enabled for > @@ -3102,8 +3100,7 @@ MODULE_PARM_DESC(lpfc_poll, "FCP ring polling > mode control:" >    " 1 - poll with interrupts enabled" >    " 3 - poll and disable FCP ring interrupts"); >   > -static DEVICE_ATTR(lpfc_poll, S_IRUGO | S_IWUSR, > -    lpfc_poll_show, lpfc_poll_store); > +static DEVICE_ATTR_RW(lpfc_poll); >   >  int lpfc_no_hba_reset_cnt; >  unsigned long lpfc_no_hba_reset[MAX_HBAS_NO_RESET] = { > @@ -3336,8 +3333,7 @@ lpfc_nodev_tmo_set(struct lpfc_vport *vport, > int val) >   >  lpfc_vport_param_store(nodev_tmo) >   > -static DEVICE_ATTR(lpfc_nodev_tmo, S_IRUGO | S_IWUSR, > -    lpfc_nodev_tmo_show, lpfc_nodev_tmo_store); > +static DEVICE_ATTR_RW(lpfc_nodev_tmo); >   >  /* >  # lpfc_devloss_tmo: If set, it will hold all I/O errors on devices > that > @@ -3386,8 +3382,7 @@ lpfc_devloss_tmo_set(struct lpfc_vport *vport, > int val) >  } >   >  lpfc_vport_param_store(devloss_tmo) > -static DEVICE_ATTR(lpfc_devloss_tmo, S_IRUGO | S_IWUSR, > -    lpfc_devloss_tmo_show, lpfc_devloss_tmo_store); > +static DEVICE_ATTR_RW(lpfc_devloss_tmo); >   >  /* >   * lpfc_suppress_rsp: Enable suppress rsp feature is firmware > supports it > @@ -3580,8 +3575,7 @@ lpfc_restrict_login_set(struct lpfc_vport > *vport, int val) >   return 0; >  } >  lpfc_vport_param_store(restrict_login); > -static DEVICE_ATTR(lpfc_restrict_login, S_IRUGO | S_IWUSR, > -    lpfc_restrict_login_show, > lpfc_restrict_login_store); > +static DEVICE_ATTR_RW(lpfc_restrict_login); >   >  /* >  # Some disk devices have a "select ID" or "select Target" > capability. > @@ -3695,8 +3689,7 @@ lpfc_topology_store(struct device *dev, struct > device_attribute *attr, >  } >   >  lpfc_param_show(topology) > -static DEVICE_ATTR(lpfc_topology, S_IRUGO | S_IWUSR, > - lpfc_topology_show, lpfc_topology_store); > +static DEVICE_ATTR_RW(lpfc_topology); >   >  /** >   * lpfc_static_vport_show: Read callback function for > @@ -3954,8 +3947,7 @@ lpfc_stat_data_ctrl_show(struct device *dev, > struct device_attribute *attr, >  /* >   * Sysfs attribute to control the statistical data collection. >   */ > -static DEVICE_ATTR(lpfc_stat_data_ctrl, S_IRUGO | S_IWUSR, > -    lpfc_stat_data_ctrl_show, > lpfc_stat_data_ctrl_store); > +static DEVICE_ATTR_RW(lpfc_stat_data_ctrl); >   >  /* >   * lpfc_drvr_stat_data: sysfs attr to get driver statistical data. > @@ -4194,8 +4186,7 @@ lpfc_link_speed_init(struct lpfc_hba *phba, int > val) >   return -EINVAL; >  } >   > -static DEVICE_ATTR(lpfc_link_speed, S_IRUGO | S_IWUSR, > -    lpfc_link_speed_show, lpfc_link_speed_store); > +static DEVICE_ATTR_RW(lpfc_link_speed); >   >  /* >  # lpfc_aer_support: Support PCIe device Advanced Error Reporting > (AER) > @@ -4288,8 +4279,7 @@ lpfc_aer_support_store(struct device *dev, > struct device_attribute *attr, >   return rc; >  } >   > -static DEVICE_ATTR(lpfc_aer_support, S_IRUGO | S_IWUSR, > -    lpfc_aer_support_show, lpfc_aer_support_store); > +static DEVICE_ATTR_RW(lpfc_aer_support); >   >  /** >   * lpfc_aer_cleanup_state - Clean up aer state to the aer enabled > device > @@ -4436,8 +4426,7 @@ LPFC_ATTR(sriov_nr_virtfn, > LPFC_DEF_VFN_PER_PFN, 0, LPFC_MAX_VFN_PER_PFN, >   "Enable PCIe device SR-IOV virtual fn"); >   >  lpfc_param_show(sriov_nr_virtfn) > -static DEVICE_ATTR(lpfc_sriov_nr_virtfn, S_IRUGO | S_IWUSR, > -    lpfc_sriov_nr_virtfn_show, > lpfc_sriov_nr_virtfn_store); > +static DEVICE_ATTR_RW(lpfc_sriov_nr_virtfn); >   >  /** >   * lpfc_request_firmware_store - Request for Linux generic firmware > upgrade > @@ -4611,8 +4600,7 @@ lpfc_fcp_imax_init(struct lpfc_hba *phba, int > val) >   return 0; >  } >   > -static DEVICE_ATTR(lpfc_fcp_imax, S_IRUGO | S_IWUSR, > -    lpfc_fcp_imax_show, lpfc_fcp_imax_store); > +static DEVICE_ATTR_RW(lpfc_fcp_imax); >   >  /* >   * lpfc_auto_imax: Controls Auto-interrupt coalescing values > support. > @@ -4772,8 +4760,7 @@ lpfc_fcp_cpu_map_init(struct lpfc_hba *phba, > int val) >   return 0; >  } >   > -static DEVICE_ATTR(lpfc_fcp_cpu_map, S_IRUGO | S_IWUSR, > -    lpfc_fcp_cpu_map_show, lpfc_fcp_cpu_map_store); > +static DEVICE_ATTR_RW(lpfc_fcp_cpu_map); >   >  /* >  # lpfc_fcp_class:  Determines FC class to use for the FCP protocol. > @@ -4859,9 +4846,7 @@ lpfc_max_scsicmpl_time_set(struct lpfc_vport > *vport, int val) >   return 0; >  } >  lpfc_vport_param_store(max_scsicmpl_time); > -static DEVICE_ATTR(lpfc_max_scsicmpl_time, S_IRUGO | S_IWUSR, > -    lpfc_max_scsicmpl_time_show, > -    lpfc_max_scsicmpl_time_store); > +static DEVICE_ATTR_RW(lpfc_max_scsicmpl_time); >   >  /* >  # lpfc_ack0: Use ACK0, instead of ACK1 for class 2 acknowledgement. > Value > diff --git a/drivers/thermal/thermal_sysfs.c > b/drivers/thermal/thermal_sysfs.c > index fb80c96d8f73..c008af7fb480 100644 > --- a/drivers/thermal/thermal_sysfs.c > +++ b/drivers/thermal/thermal_sysfs.c > @@ -398,14 +398,13 @@ create_s32_tzp_attr(offset); >   */ >  static DEVICE_ATTR(type, 0444, type_show, NULL); >  static DEVICE_ATTR(temp, 0444, temp_show, NULL); > -static DEVICE_ATTR(policy, S_IRUGO | S_IWUSR, policy_show, > policy_store); > +static DEVICE_ATTR_RW(policy); >  static DEVICE_ATTR(available_policies, S_IRUGO, > available_policies_show, NULL); > -static DEVICE_ATTR(sustainable_power, S_IWUSR | S_IRUGO, > sustainable_power_show, > -    sustainable_power_store); > +static DEVICE_ATTR_RW(sustainable_power); >   >  /* These thermal zone device attributes are created based on > conditions */ > -static DEVICE_ATTR(mode, 0644, mode_show, mode_store); > -static DEVICE_ATTR(passive, S_IRUGO | S_IWUSR, passive_show, > passive_store); > +static DEVICE_ATTR_RW(mode); > +static DEVICE_ATTR_RW(passive); >   >  /* These attributes are unconditionally added to a thermal zone */ >  static struct attribute *thermal_zone_dev_attrs[] = { > diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh- > sci.c > index d9f399c4e90c..7257c078e155 100644 > --- a/drivers/tty/serial/sh-sci.c > +++ b/drivers/tty/serial/sh-sci.c > @@ -1144,7 +1144,7 @@ static ssize_t rx_fifo_timeout_store(struct > device *dev, >   return count; >  } >   > -static DEVICE_ATTR(rx_fifo_timeout, 0644, rx_fifo_timeout_show, > rx_fifo_timeout_store); > +static DEVICE_ATTR_RW(rx_fifo_timeout); >   >   >  #ifdef CONFIG_SERIAL_SH_SCI_DMA > diff --git a/drivers/usb/host/xhci-dbgcap.c b/drivers/usb/host/xhci- > dbgcap.c > index 452df0f87d6e..a1ab8acf39ba 100644 > --- a/drivers/usb/host/xhci-dbgcap.c > +++ b/drivers/usb/host/xhci-dbgcap.c > @@ -920,7 +920,7 @@ static ssize_t dbc_store(struct device *dev, >   return count; >  } >   > -static DEVICE_ATTR(dbc, 0644, dbc_show, dbc_store); > +static DEVICE_ATTR_RW(dbc); >   >  int xhci_dbc_init(struct xhci_hcd *xhci) >  { > diff --git a/drivers/usb/phy/phy-tahvo.c b/drivers/usb/phy/phy- > tahvo.c > index b3ce42edb373..7f7c5c82420d 100644 > --- a/drivers/usb/phy/phy-tahvo.c > +++ b/drivers/usb/phy/phy-tahvo.c > @@ -310,7 +310,7 @@ static ssize_t otg_mode_store(struct device > *device, >   >   return r; >  } > -static DEVICE_ATTR(otg_mode, 0644, otg_mode_show, otg_mode_store); > +static DEVICE_ATTR_RW(otg_mode); >   >  static struct attribute *tahvo_attributes[] = { >   &dev_attr_vbus.attr, > diff --git a/drivers/video/fbdev/auo_k190x.c > b/drivers/video/fbdev/auo_k190x.c > index 0d06038324e0..1e383c547633 100644 > --- a/drivers/video/fbdev/auo_k190x.c > +++ b/drivers/video/fbdev/auo_k190x.c > @@ -708,8 +708,8 @@ static ssize_t temp_show(struct device *dev, > struct device_attribute *attr, >   return sprintf(buf, "%d\n", temp); >  } >   > -static DEVICE_ATTR(update_mode, 0644, update_mode_show, > update_mode_store); > -static DEVICE_ATTR(flash, 0644, flash_show, flash_store); > +static DEVICE_ATTR_RW(update_mode); > +static DEVICE_ATTR_RW(flash); >  static DEVICE_ATTR(temp, 0644, temp_show, NULL); >   >  static struct attribute *auok190x_attributes[] = { > diff --git a/drivers/video/fbdev/w100fb.c > b/drivers/video/fbdev/w100fb.c > index d570e19a2864..035ff6e02894 100644 > --- a/drivers/video/fbdev/w100fb.c > +++ b/drivers/video/fbdev/w100fb.c > @@ -110,7 +110,7 @@ static ssize_t flip_store(struct device *dev, > struct device_attribute *attr, con >   return count; >  } >   > -static DEVICE_ATTR(flip, 0644, flip_show, flip_store); > +static DEVICE_ATTR_RW(flip); >   >  static ssize_t w100fb_reg_read(struct device *dev, struct > device_attribute *attr, const char *buf, size_t count) >  { > @@ -166,7 +166,7 @@ static ssize_t fastpllclk_store(struct device > *dev, struct device_attribute *att >   return count; >  } >   > -static DEVICE_ATTR(fastpllclk, 0644, fastpllclk_show, > fastpllclk_store); > +static DEVICE_ATTR_RW(fastpllclk); >   >  /* >   * Some touchscreens need hsync information from the video driver to > diff --git a/lib/test_firmware.c b/lib/test_firmware.c > index 64a4c76cba2b..964784dc1602 100644 > --- a/lib/test_firmware.c > +++ b/lib/test_firmware.c > @@ -359,7 +359,7 @@ static ssize_t config_name_show(struct device > *dev, >  { >   return config_test_show_str(buf, test_fw_config->name); >  } > -static DEVICE_ATTR(config_name, 0644, config_name_show, > config_name_store); > +static DEVICE_ATTR_RW(config_name); >   >  static ssize_t config_num_requests_store(struct device *dev, >    struct device_attribute > *attr, > @@ -388,8 +388,7 @@ static ssize_t config_num_requests_show(struct > device *dev, >  { >   return test_dev_config_show_u8(buf, test_fw_config- > >num_requests); >  } > -static DEVICE_ATTR(config_num_requests, 0644, > config_num_requests_show, > -    config_num_requests_store); > +static DEVICE_ATTR_RW(config_num_requests); >   >  static ssize_t config_sync_direct_store(struct device *dev, >   struct device_attribute > *attr, > @@ -411,8 +410,7 @@ static ssize_t config_sync_direct_show(struct > device *dev, >  { >   return test_dev_config_show_bool(buf, test_fw_config- > >sync_direct); >  } > -static DEVICE_ATTR(config_sync_direct, 0644, > config_sync_direct_show, > -    config_sync_direct_store); > +static DEVICE_ATTR_RW(config_sync_direct); >   >  static ssize_t config_send_uevent_store(struct device *dev, >   struct device_attribute > *attr, > @@ -428,8 +426,7 @@ static ssize_t config_send_uevent_show(struct > device *dev, >  { >   return test_dev_config_show_bool(buf, test_fw_config- > >send_uevent); >  } > -static DEVICE_ATTR(config_send_uevent, 0644, > config_send_uevent_show, > -    config_send_uevent_store); > +static DEVICE_ATTR_RW(config_send_uevent); >   >  static ssize_t config_read_fw_idx_store(struct device *dev, >   struct device_attribute > *attr, > @@ -445,8 +442,7 @@ static ssize_t config_read_fw_idx_show(struct > device *dev, >  { >   return test_dev_config_show_u8(buf, test_fw_config- > >read_fw_idx); >  } > -static DEVICE_ATTR(config_read_fw_idx, 0644, > config_read_fw_idx_show, > -    config_read_fw_idx_store); > +static DEVICE_ATTR_RW(config_read_fw_idx); >   >   >  static ssize_t trigger_request_store(struct device *dev, > diff --git a/lib/test_kmod.c b/lib/test_kmod.c > index 337f408b4de6..e372b97eee13 100644 > --- a/lib/test_kmod.c > +++ b/lib/test_kmod.c > @@ -694,8 +694,7 @@ static ssize_t config_test_driver_show(struct > device *dev, >   return config_test_show_str(&test_dev->config_mutex, buf, >       config->test_driver); >  } > -static DEVICE_ATTR(config_test_driver, 0644, > config_test_driver_show, > -    config_test_driver_store); > +static DEVICE_ATTR_RW(config_test_driver); >   >  static ssize_t config_test_fs_store(struct device *dev, >       struct device_attribute *attr, > @@ -726,8 +725,7 @@ static ssize_t config_test_fs_show(struct device > *dev, >   return config_test_show_str(&test_dev->config_mutex, buf, >       config->test_fs); >  } > -static DEVICE_ATTR(config_test_fs, 0644, config_test_fs_show, > -    config_test_fs_store); > +static DEVICE_ATTR_RW(config_test_fs); >   >  static int trigger_config_run_type(struct kmod_test_device > *test_dev, >      enum kmod_test_case test_case, > @@ -1012,8 +1010,7 @@ static ssize_t config_num_threads_show(struct > device *dev, >   >   return test_dev_config_show_int(test_dev, buf, config- > >num_threads); >  } > -static DEVICE_ATTR(config_num_threads, 0644, > config_num_threads_show, > -    config_num_threads_store); > +static DEVICE_ATTR_RW(config_num_threads); >   >  static ssize_t config_test_case_store(struct device *dev, >         struct device_attribute *attr, > @@ -1037,8 +1034,7 @@ static ssize_t config_test_case_show(struct > device *dev, >   >   return test_dev_config_show_uint(test_dev, buf, config- > >test_case); >  } > -static DEVICE_ATTR(config_test_case, 0644, config_test_case_show, > -    config_test_case_store); > +static DEVICE_ATTR_RW(config_test_case); >   >  static ssize_t test_result_show(struct device *dev, >   struct device_attribute *attr, > @@ -1049,7 +1045,7 @@ static ssize_t test_result_show(struct device > *dev, >   >   return test_dev_config_show_int(test_dev, buf, config- > >test_result); >  } > -static DEVICE_ATTR(test_result, 0644, test_result_show, > test_result_store); > +static DEVICE_ATTR_RW(test_result); >   >  #define TEST_KMOD_DEV_ATTR(name) &dev_attr_##name.att > r >   > diff --git a/sound/soc/omap/mcbsp.c b/sound/soc/omap/mcbsp.c > index 7a54e3083203..79d4dc785e5c 100644 > --- a/sound/soc/omap/mcbsp.c > +++ b/sound/soc/omap/mcbsp.c > @@ -854,7 +854,7 @@ static ssize_t dma_op_mode_store(struct device > *dev, >   return size; >  } >   > -static DEVICE_ATTR(dma_op_mode, 0644, dma_op_mode_show, > dma_op_mode_store); > +static DEVICE_ATTR_RW(dma_op_mode); >   >  static const struct attribute *additional_attrs[] = { >   &dev_attr_max_tx_thres.attr, > @@ -923,7 +923,7 @@ static ssize_t st_taps_store(struct device *dev, >   return size; >  } >   > -static DEVICE_ATTR(st_taps, 0644, st_taps_show, st_taps_store); > +static DEVICE_ATTR_RW(st_taps); >   >  static const struct attribute *sidetone_attrs[] = { >   &dev_attr_st_taps.attr, From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [-next,2/4] treewide: Use DEVICE_ATTR_RW From: "Zhang, Rui" Message-Id: <1513817271.2592.2.camel@intel.com> Date: Thu, 21 Dec 2017 08:47:51 +0800 To: Joe Perches , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Cezary Jackiewicz , Darren Hart , Andy Shevchenko , Sebastian Ott , Peter Oberparleiter , James Smart , Dick Kennedy , Eduardo Valentin , Greg Kroah-Hartman , Mathias Nyman , Felipe Balbi , "Luis R. Rodriguez" , Peter Ujfalusi , Jarkko Nikula Cc: Martin Schwidefsky , Heiko Carstens , David Airlie , "James E.J. Bottomley" , "Martin K. Petersen" , Jiri Slaby , Bartlomiej Zolnierkiewicz , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, platform-driver-x86@vger.kernel.org, linux-scsi@vger.kernel.org, linux-pm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, linux-fbdev@vger.kernel.org, alsa-devel@alsa-project.org, linux-omap@vger.kernel.org List-ID: T24gVHVlLCAyMDE3LTEyLTE5IGF0IDEwOjE1IC0wODAwLCBKb2UgUGVyY2hlcyB3cm90ZToKPiBD b252ZXJ0IERFVklDRV9BVFRSIHVzZXMgdG8gREVWSUNFX0FUVFJfUlcgd2hlcmUgcG9zc2libGUu Cj4gCj4gRG9uZSB3aXRoIHBlcmwgc2NyaXB0Ogo+IAo+ICQgZ2l0IGdyZXAgLXcgLS1uYW1lLW9u bHkgREVWSUNFX0FUVFIgfCBcCj4gwqAgeGFyZ3MgcGVybCAtaSAtZSAnbG9jYWwgJC87IHdoaWxl ICg8Pikgewo+IHMvXGJERVZJQ0VfQVRUUlxzKlwoXHMqKFx3KylccyosXHMqXCg/KFxzKlNfSVJV R09ccypcfFxzKlNfSVdVU1J8XHMqUwo+IF9JV1VTUlxzKlx8XHMqU19JUlVHT1xzKnxccyowNjQ0 XHMqKVwpP1xzKixccypcMV9zaG93XHMqLFxzKlwxX3N0b3JlXAo+IHMqXCkvREVWSUNFX0FUVFJf UlcoXDEpL2c7IHByaW50O30nCj4gCj4gU2lnbmVkLW9mZi1ieTogSm9lIFBlcmNoZXMgPGpvZUBw ZXJjaGVzLmNvbT4KPiAtLS0KPiDCoGFyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuY8KgwqDCoMKg wqDCoMKgwqDCoMKgfMKgwqAzICstLQo+IMKgYXJjaC90aWxlL2tlcm5lbC9zeXNmcy5jwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKy0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfc3lzZnMuY8KgwqDCoMKgfMKgwqA2ICsrLS0tCj4gwqBkcml2ZXJzL3BsYXRmb3JtL3g4Ni9j b21wYWwtbGFwdG9wLmMgfCAxOCArKysrKy0tLS0tLS0tLS0KPiDCoGRyaXZlcnMvczM5MC9jaW8v ZGV2aWNlLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKy0KPiDCoGRyaXZlcnMvc2Nz aS9scGZjL2xwZmNfYXR0ci5jwqDCoMKgwqDCoMKgwqDCoHwgNDMgKysrKysrKysrKysrLS0tLS0t LS0tLS0tCj4gLS0tLS0tLS0tLS0tCj4gwqBkcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXNmcy5j wqDCoMKgwqDCoMKgfMKgwqA5ICsrKystLS0tCgpGb3IgdGhlIHRoZXJtYWwgcGFydCwKQUNLLWJ5 OiBaaGFuZyBSdWkgPHJ1aS56aGFuZ0BpbnRlbC5jb20+Cgp0aGFua3MsCnJ1aQoKPiDCoGRyaXZl cnMvdHR5L3NlcmlhbC9zaC1zY2kuY8KgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAyICstCj4gwqBk cml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnY2FwLmPCoMKgwqDCoMKgwqDCoHzCoMKgMiArLQo+IMKg ZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKy0K PiDCoGRyaXZlcnMvdmlkZW8vZmJkZXYvYXVvX2sxOTB4LmPCoMKgwqDCoMKgwqB8wqDCoDQgKyst LQo+IMKgZHJpdmVycy92aWRlby9mYmRldi93MTAwZmIuY8KgwqDCoMKgwqDCoMKgwqDCoHzCoMKg NCArKy0tCj4gwqBsaWIvdGVzdF9maXJtd2FyZS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfCAxNCArKysrKy0tLS0tLS0KPiDCoGxpYi90ZXN0X2ttb2QuY8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCAxNCArKysrKy0tLS0tLS0KPiDCoHNv dW5kL3NvYy9vbWFwL21jYnNwLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDQg KystLQo+IMKgMTUgZmlsZXMgY2hhbmdlZCwgNDkgaW5zZXJ0aW9ucygrKSwgODAgZGVsZXRpb25z KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYwo+IGIvYXJj aC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCj4gaW5kZXggNGQ1YjY1ZTUyN2I1Li40YjZlMDM5N2Y2 NmQgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCj4gKysrIGIvYXJj aC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCj4gQEAgLTQwNCw4ICs0MDQsNyBAQCBzdGF0aWMgc3Np emVfdCBkaXNwYXRjaGluZ19zdG9yZShzdHJ1Y3QgZGV2aWNlCj4gKmRldiwKPiDCoAlwdXRfb25s aW5lX2NwdXMoKTsKPiDCoAlyZXR1cm4gcmMgPyByYyA6IGNvdW50Owo+IMKgfQo+IC1zdGF0aWMg REVWSUNFX0FUVFIoZGlzcGF0Y2hpbmcsIDA2NDQsIGRpc3BhdGNoaW5nX3Nob3csCj4gLQkJCcKg ZGlzcGF0Y2hpbmdfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcoZGlzcGF0Y2hpbmcp Owo+IMKgCj4gwqBzdGF0aWMgc3NpemVfdCBjcHVfcG9sYXJpemF0aW9uX3Nob3coc3RydWN0IGRl dmljZSAqZGV2LAo+IMKgCQkJCcKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0 ciwKPiBjaGFyICpidWYpCj4gZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvc3lzZnMuYyBi L2FyY2gvdGlsZS9rZXJuZWwvc3lzZnMuYwo+IGluZGV4IDgyNTg2N2M1Mzg1My4uYWY1MDI0ZjBm YjVhIDEwMDY0NAo+IC0tLSBhL2FyY2gvdGlsZS9rZXJuZWwvc3lzZnMuYwo+ICsrKyBiL2FyY2gv dGlsZS9rZXJuZWwvc3lzZnMuYwo+IEBAIC0xODQsNyArMTg0LDcgQEAgc3RhdGljIHNzaXplX3Qg aHZfc3RhdHNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+IMKgCXJldHVybiBuIDwgMCA/IG4g OiBjb3VudDsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgREVWSUNFX0FUVFIoaHZfc3RhdHMsIDA2NDQs IGh2X3N0YXRzX3Nob3csIGh2X3N0YXRzX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JX KGh2X3N0YXRzKTsKPiDCoAo+IMKgc3RhdGljIGludCBodl9zdGF0c19kZXZpY2VfYWRkKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0Cj4gc3Vic3lzX2ludGVyZmFjZSAqc2lmKQo+IMKgewo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMKPiBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwo+IGluZGV4IGM3NGEyMGI4MDE4Mi4uMWQwYWI4ZmY1 OTE1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwo+IEBAIC00NDcsOSArNDQ3LDkg QEAgc3RhdGljIHNzaXplX3QgZ3RfbWluX2ZyZXFfbWh6X3N0b3JlKHN0cnVjdAo+IGRldmljZSAq a2RldiwKPiDCoAo+IMKgc3RhdGljIERFVklDRV9BVFRSKGd0X2FjdF9mcmVxX21oeiwgU19JUlVH TywgZ3RfYWN0X2ZyZXFfbWh6X3Nob3csCj4gTlVMTCk7Cj4gwqBzdGF0aWMgREVWSUNFX0FUVFIo Z3RfY3VyX2ZyZXFfbWh6LCBTX0lSVUdPLCBndF9jdXJfZnJlcV9taHpfc2hvdywKPiBOVUxMKTsK PiAtc3RhdGljIERFVklDRV9BVFRSKGd0X2Jvb3N0X2ZyZXFfbWh6LCBTX0lSVUdPIHwgU19JV1VT UiwKPiBndF9ib29zdF9mcmVxX21oel9zaG93LCBndF9ib29zdF9mcmVxX21oel9zdG9yZSk7Cj4g LXN0YXRpYyBERVZJQ0VfQVRUUihndF9tYXhfZnJlcV9taHosIFNfSVJVR08gfCBTX0lXVVNSLAo+ IGd0X21heF9mcmVxX21oel9zaG93LCBndF9tYXhfZnJlcV9taHpfc3RvcmUpOwo+IC1zdGF0aWMg REVWSUNFX0FUVFIoZ3RfbWluX2ZyZXFfbWh6LCBTX0lSVUdPIHwgU19JV1VTUiwKPiBndF9taW5f ZnJlcV9taHpfc2hvdywgZ3RfbWluX2ZyZXFfbWh6X3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9B VFRSX1JXKGd0X2Jvb3N0X2ZyZXFfbWh6KTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGd0X21h eF9mcmVxX21oeik7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhndF9taW5fZnJlcV9taHopOwo+ IMKgCj4gwqBzdGF0aWMgREVWSUNFX0FUVFIodmx2X3JwZV9mcmVxX21oeiwgU19JUlVHTywgdmx2 X3JwZV9mcmVxX21oel9zaG93LAo+IE5VTEwpOwo+IMKgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv cGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwo+IGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29t cGFsLWxhcHRvcC5jCj4gaW5kZXggNmJjYjc1MGUxODY1Li40ZjliYzcyZjA1ODQgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCj4gKysrIGIvZHJpdmVy cy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCj4gQEAgLTY3OSwxOCArNjc5LDEyIEBAIHN0 YXRpYyBpbnQgYmF0X3dyaXRlYWJsZV9wcm9wZXJ0eShzdHJ1Y3QKPiBwb3dlcl9zdXBwbHkgKnBz eSwKPiDCoC8qID09PT09PT09PT09PT09ICovCj4gwqAvKiBEcml2ZXIgR2xvYmFscyAqLwo+IMKg LyogPT09PT09PT09PT09PT0gKi8KPiAtc3RhdGljIERFVklDRV9BVFRSKHdha2VfdXBfcG1lLAo+ IC0JCTA2NDQsIHdha2VfdXBfcG1lX3Nob3csCQl3YWtlX3VwX3BtZV9zCj4gdG9yZSk7Cj4gLXN0 YXRpYyBERVZJQ0VfQVRUUih3YWtlX3VwX21vZGVtLAo+IC0JCTA2NDQsIHdha2VfdXBfbW9kZW1f c2hvdywJd2FrZV91cF9tb2RlbV9zdG9yZQo+ICk7Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUih3YWtl X3VwX2xhbiwKPiAtCQkwNjQ0LCB3YWtlX3VwX2xhbl9zaG93LAl3YWtlX3VwX2xhbl9zdG9yZSk7 Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUih3YWtlX3VwX3dsYW4sCj4gLQkJMDY0NCwgd2FrZV91cF93 bGFuX3Nob3csCXdha2VfdXBfd2xhbl9zdG9yZSk7Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUih3YWtl X3VwX2tleSwKPiAtCQkwNjQ0LCB3YWtlX3VwX2tleV9zaG93LAl3YWtlX3VwX2tleV9zdG9yZSk7 Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUih3YWtlX3VwX21vdXNlLAo+IC0JCTA2NDQsIHdha2VfdXBf bW91c2Vfc2hvdywJd2FrZV91cF9tb3VzZV9zdG9yZQo+ICk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRU Ul9SVyh3YWtlX3VwX3BtZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyh3YWtlX3VwX21vZGVt KTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKHdha2VfdXBfbGFuKTsKPiArc3RhdGljIERFVklD RV9BVFRSX1JXKHdha2VfdXBfd2xhbik7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyh3YWtlX3Vw X2tleSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyh3YWtlX3VwX21vdXNlKTsKPiDCoAo+IMKg c3RhdGljIERFVklDRV9BVFRSKGZhbjFfaW5wdXQswqDCoFNfSVJVR08sIGZhbl9zaG93LMKgwqDC oMKgwqDCoMKgwqDCoMKgTlVMTCk7Cj4gwqBzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfaW5wdXQs IFNfSVJVR08sIHRlbXBfY3B1LMKgwqDCoMKgwqDCoMKgwqDCoMKgTlVMTCk7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5j Cj4gaW5kZXggNzVhMjQ1ZjM4ZTJlLi42ZWVmYjY3YjMxZjMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9zMzkwL2Npby9kZXZpY2UuYwo+ICsrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKPiBA QCAtNjAwLDcgKzYwMCw3IEBAIHN0YXRpYyBzc2l6ZV90IHZwbV9zaG93KHN0cnVjdCBkZXZpY2Ug KmRldiwKPiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiDCoHN0YXRpYyBERVZJQ0Vf QVRUUihkZXZ0eXBlLCAwNDQ0LCBkZXZ0eXBlX3Nob3csIE5VTEwpOwo+IMKgc3RhdGljIERFVklD RV9BVFRSKGN1dHlwZSwgMDQ0NCwgY3V0eXBlX3Nob3csIE5VTEwpOwo+IMKgc3RhdGljIERFVklD RV9BVFRSKG1vZGFsaWFzLCAwNDQ0LCBtb2RhbGlhc19zaG93LCBOVUxMKTsKPiAtc3RhdGljIERF VklDRV9BVFRSKG9ubGluZSwgMDY0NCwgb25saW5lX3Nob3csIG9ubGluZV9zdG9yZSk7Cj4gK3N0 YXRpYyBERVZJQ0VfQVRUUl9SVyhvbmxpbmUpOwo+IMKgc3RhdGljIERFVklDRV9BVFRSKGF2YWls YWJpbGl0eSwgMDQ0NCwgYXZhaWxhYmxlX3Nob3csIE5VTEwpOwo+IMKgc3RhdGljIERFVklDRV9B VFRSKGxvZ2dpbmcsIDAyMDAsIE5VTEwsIGluaXRpYXRlX2xvZ2dpbmcpOwo+IMKgc3RhdGljIERF VklDRV9BVFRSKHZwbSwgMDQ0NCwgdnBtX3Nob3csIE5VTEwpOwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwo+IGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRy LmMKPiBpbmRleCA3OTdiYjQyYTYzMDYuLjk1ZjdiYTNjM2YxYSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwo+ICsrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNf YXR0ci5jCj4gQEAgLTI1MTksOCArMjUxOSw3IEBAIGxwZmNfc29mdF93d3BuX3N0b3JlKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0Cj4gZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiDCoAkJCQki cmVpbml0IGFkYXB0ZXIgLSAlZFxuIiwgc3RhdDIpOwo+IMKgCXJldHVybiAoc3RhdDEgfHwgc3Rh dDIpID8gLUVJTyA6IGNvdW50Owo+IMKgfQo+IC1zdGF0aWMgREVWSUNFX0FUVFIobHBmY19zb2Z0 X3d3cG4sIFNfSVJVR08gfCBTX0lXVVNSLAo+IC0JCcKgwqDCoGxwZmNfc29mdF93d3BuX3Nob3cs IGxwZmNfc29mdF93d3BuX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGxwZmNfc29m dF93d3BuKTsKPiDCoAo+IMKgLyoqCj4gwqAgKiBscGZjX3NvZnRfd3dubl9zaG93IC0gUmV0dXJu IHRoZSBjZmcgc29mdCB3dyBub2RlIG5hbWUgZm9yIHRoZQo+IGFkYXB0ZXIKPiBAQCAtMjU4Myw4 ICsyNTgyLDcgQEAgbHBmY19zb2Z0X3d3bm5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QKPiBkZXZpY2VfYXR0cmlidXRlICphdHRyLAo+IMKgCj4gwqAJcmV0dXJuIGNvdW50Owo+IMKg fQo+IC1zdGF0aWMgREVWSUNFX0FUVFIobHBmY19zb2Z0X3d3bm4sIFNfSVJVR08gfCBTX0lXVVNS LAo+IC0JCcKgwqDCoGxwZmNfc29mdF93d25uX3Nob3csIGxwZmNfc29mdF93d25uX3N0b3JlKTsK PiArc3RhdGljIERFVklDRV9BVFRSX1JXKGxwZmNfc29mdF93d25uKTsKPiDCoAo+IMKgLyoqCj4g wqAgKiBscGZjX29hc190Z3Rfc2hvdyAtIFJldHVybiB3d3BuIG9mIHRhcmdldCB3aG9zZSBsdW5z IG1heWJlCj4gZW5hYmxlZCBmb3IKPiBAQCAtMzEwMiw4ICszMTAwLDcgQEAgTU9EVUxFX1BBUk1f REVTQyhscGZjX3BvbGwsICJGQ1AgcmluZyBwb2xsaW5nCj4gbW9kZSBjb250cm9sOiIKPiDCoAkJ wqAiIDEgLSBwb2xsIHdpdGggaW50ZXJydXB0cyBlbmFibGVkIgo+IMKgCQnCoCIgMyAtIHBvbGwg YW5kIGRpc2FibGUgRkNQIHJpbmcgaW50ZXJydXB0cyIpOwo+IMKgCj4gLXN0YXRpYyBERVZJQ0Vf QVRUUihscGZjX3BvbGwsIFNfSVJVR08gfCBTX0lXVVNSLAo+IC0JCcKgwqDCoGxwZmNfcG9sbF9z aG93LCBscGZjX3BvbGxfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcobHBmY19wb2xs KTsKPiDCoAo+IMKgaW50IGxwZmNfbm9faGJhX3Jlc2V0X2NudDsKPiDCoHVuc2lnbmVkIGxvbmcg bHBmY19ub19oYmFfcmVzZXRbTUFYX0hCQVNfTk9fUkVTRVRdID0gewo+IEBAIC0zMzM2LDggKzMz MzMsNyBAQCBscGZjX25vZGV2X3Rtb19zZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LAo+IGlu dCB2YWwpCj4gwqAKPiDCoGxwZmNfdnBvcnRfcGFyYW1fc3RvcmUobm9kZXZfdG1vKQo+IMKgCj4g LXN0YXRpYyBERVZJQ0VfQVRUUihscGZjX25vZGV2X3RtbywgU19JUlVHTyB8IFNfSVdVU1IsCj4g LQkJwqDCoMKgbHBmY19ub2Rldl90bW9fc2hvdywgbHBmY19ub2Rldl90bW9fc3RvcmUpOwo+ICtz dGF0aWMgREVWSUNFX0FUVFJfUlcobHBmY19ub2Rldl90bW8pOwo+IMKgCj4gwqAvKgo+IMKgIyBs cGZjX2Rldmxvc3NfdG1vOiBJZiBzZXQsIGl0IHdpbGwgaG9sZCBhbGwgSS9PIGVycm9ycyBvbiBk ZXZpY2VzCj4gdGhhdAo+IEBAIC0zMzg2LDggKzMzODIsNyBAQCBscGZjX2Rldmxvc3NfdG1vX3Nl dChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCj4gaW50IHZhbCkKPiDCoH0KPiDCoAo+IMKgbHBm Y192cG9ydF9wYXJhbV9zdG9yZShkZXZsb3NzX3RtbykKPiAtc3RhdGljIERFVklDRV9BVFRSKGxw ZmNfZGV2bG9zc190bW8sIFNfSVJVR08gfCBTX0lXVVNSLAo+IC0JCcKgwqDCoGxwZmNfZGV2bG9z c190bW9fc2hvdywgbHBmY19kZXZsb3NzX3Rtb19zdG9yZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRU Ul9SVyhscGZjX2Rldmxvc3NfdG1vKTsKPiDCoAo+IMKgLyoKPiDCoCAqIGxwZmNfc3VwcHJlc3Nf cnNwOiBFbmFibGUgc3VwcHJlc3MgcnNwIGZlYXR1cmUgaXMgZmlybXdhcmUKPiBzdXBwb3J0cyBp dAo+IEBAIC0zNTgwLDggKzM1NzUsNyBAQCBscGZjX3Jlc3RyaWN0X2xvZ2luX3NldChzdHJ1Y3Qg bHBmY192cG9ydAo+ICp2cG9ydCwgaW50IHZhbCkKPiDCoAlyZXR1cm4gMDsKPiDCoH0KPiDCoGxw ZmNfdnBvcnRfcGFyYW1fc3RvcmUocmVzdHJpY3RfbG9naW4pOwo+IC1zdGF0aWMgREVWSUNFX0FU VFIobHBmY19yZXN0cmljdF9sb2dpbiwgU19JUlVHTyB8IFNfSVdVU1IsCj4gLQkJwqDCoMKgbHBm Y19yZXN0cmljdF9sb2dpbl9zaG93LAo+IGxwZmNfcmVzdHJpY3RfbG9naW5fc3RvcmUpOwo+ICtz dGF0aWMgREVWSUNFX0FUVFJfUlcobHBmY19yZXN0cmljdF9sb2dpbik7Cj4gwqAKPiDCoC8qCj4g wqAjIFNvbWUgZGlzayBkZXZpY2VzIGhhdmUgYSAic2VsZWN0IElEIiBvciAic2VsZWN0IFRhcmdl dCIKPiBjYXBhYmlsaXR5Lgo+IEBAIC0zNjk1LDggKzM2ODksNyBAQCBscGZjX3RvcG9sb2d5X3N0 b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0Cj4gZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwK PiDCoH0KPiDCoAo+IMKgbHBmY19wYXJhbV9zaG93KHRvcG9sb2d5KQo+IC1zdGF0aWMgREVWSUNF X0FUVFIobHBmY190b3BvbG9neSwgU19JUlVHTyB8IFNfSVdVU1IsCj4gLQkJbHBmY190b3BvbG9n eV9zaG93LCBscGZjX3RvcG9sb2d5X3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGxw ZmNfdG9wb2xvZ3kpOwo+IMKgCj4gwqAvKioKPiDCoCAqIGxwZmNfc3RhdGljX3Zwb3J0X3Nob3c6 IFJlYWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yCj4gQEAgLTM5NTQsOCArMzk0Nyw3IEBAIGxwZmNf c3RhdF9kYXRhX2N0cmxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gc3RydWN0IGRldmljZV9h dHRyaWJ1dGUgKmF0dHIsCj4gwqAvKgo+IMKgICogU3lzZnMgYXR0cmlidXRlIHRvIGNvbnRyb2wg dGhlIHN0YXRpc3RpY2FsIGRhdGEgY29sbGVjdGlvbi4KPiDCoCAqLwo+IC1zdGF0aWMgREVWSUNF X0FUVFIobHBmY19zdGF0X2RhdGFfY3RybCwgU19JUlVHTyB8IFNfSVdVU1IsCj4gLQkJwqDCoMKg bHBmY19zdGF0X2RhdGFfY3RybF9zaG93LAo+IGxwZmNfc3RhdF9kYXRhX2N0cmxfc3RvcmUpOwo+ ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcobHBmY19zdGF0X2RhdGFfY3RybCk7Cj4gwqAKPiDCoC8q Cj4gwqAgKiBscGZjX2RydnJfc3RhdF9kYXRhOiBzeXNmcyBhdHRyIHRvIGdldCBkcml2ZXIgc3Rh dGlzdGljYWwgZGF0YS4KPiBAQCAtNDE5NCw4ICs0MTg2LDcgQEAgbHBmY19saW5rX3NwZWVkX2lu aXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQKPiB2YWwpCj4gwqAJcmV0dXJuIC1FSU5WQUw7 Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIERFVklDRV9BVFRSKGxwZmNfbGlua19zcGVlZCwgU19JUlVH TyB8IFNfSVdVU1IsCj4gLQkJwqDCoMKgbHBmY19saW5rX3NwZWVkX3Nob3csIGxwZmNfbGlua19z cGVlZF9zdG9yZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhscGZjX2xpbmtfc3BlZWQpOwo+ IMKgCj4gwqAvKgo+IMKgIyBscGZjX2Flcl9zdXBwb3J0OiBTdXBwb3J0IFBDSWUgZGV2aWNlIEFk dmFuY2VkIEVycm9yIFJlcG9ydGluZwo+IChBRVIpCj4gQEAgLTQyODgsOCArNDI3OSw3IEBAIGxw ZmNfYWVyX3N1cHBvcnRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+IHN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICphdHRyLAo+IMKgCXJldHVybiByYzsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgREVW SUNFX0FUVFIobHBmY19hZXJfc3VwcG9ydCwgU19JUlVHTyB8IFNfSVdVU1IsCj4gLQkJwqDCoMKg bHBmY19hZXJfc3VwcG9ydF9zaG93LCBscGZjX2Flcl9zdXBwb3J0X3N0b3JlKTsKPiArc3RhdGlj IERFVklDRV9BVFRSX1JXKGxwZmNfYWVyX3N1cHBvcnQpOwo+IMKgCj4gwqAvKioKPiDCoCAqIGxw ZmNfYWVyX2NsZWFudXBfc3RhdGUgLSBDbGVhbiB1cCBhZXIgc3RhdGUgdG8gdGhlIGFlciBlbmFi bGVkCj4gZGV2aWNlCj4gQEAgLTQ0MzYsOCArNDQyNiw3IEBAIExQRkNfQVRUUihzcmlvdl9ucl92 aXJ0Zm4sCj4gTFBGQ19ERUZfVkZOX1BFUl9QRk4sIDAsIExQRkNfTUFYX1ZGTl9QRVJfUEZOLAo+ IMKgCSJFbmFibGUgUENJZSBkZXZpY2UgU1ItSU9WIHZpcnR1YWwgZm4iKTsKPiDCoAo+IMKgbHBm Y19wYXJhbV9zaG93KHNyaW92X25yX3ZpcnRmbikKPiAtc3RhdGljIERFVklDRV9BVFRSKGxwZmNf c3Jpb3ZfbnJfdmlydGZuLCBTX0lSVUdPIHwgU19JV1VTUiwKPiAtCQnCoMKgwqBscGZjX3NyaW92 X25yX3ZpcnRmbl9zaG93LAo+IGxwZmNfc3Jpb3ZfbnJfdmlydGZuX3N0b3JlKTsKPiArc3RhdGlj IERFVklDRV9BVFRSX1JXKGxwZmNfc3Jpb3ZfbnJfdmlydGZuKTsKPiDCoAo+IMKgLyoqCj4gwqAg KiBscGZjX3JlcXVlc3RfZmlybXdhcmVfc3RvcmUgLSBSZXF1ZXN0IGZvciBMaW51eCBnZW5lcmlj IGZpcm13YXJlCj4gdXBncmFkZQo+IEBAIC00NjExLDggKzQ2MDAsNyBAQCBscGZjX2ZjcF9pbWF4 X2luaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQKPiB2YWwpCj4gwqAJcmV0dXJuIDA7Cj4g wqB9Cj4gwqAKPiAtc3RhdGljIERFVklDRV9BVFRSKGxwZmNfZmNwX2ltYXgsIFNfSVJVR08gfCBT X0lXVVNSLAo+IC0JCcKgwqDCoGxwZmNfZmNwX2ltYXhfc2hvdywgbHBmY19mY3BfaW1heF9zdG9y ZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhscGZjX2ZjcF9pbWF4KTsKPiDCoAo+IMKgLyoK PiDCoCAqIGxwZmNfYXV0b19pbWF4OiBDb250cm9scyBBdXRvLWludGVycnVwdCBjb2FsZXNjaW5n IHZhbHVlcwo+IHN1cHBvcnQuCj4gQEAgLTQ3NzIsOCArNDc2MCw3IEBAIGxwZmNfZmNwX2NwdV9t YXBfaW5pdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCj4gaW50IHZhbCkKPiDCoAlyZXR1cm4gMDsK PiDCoH0KPiDCoAo+IC1zdGF0aWMgREVWSUNFX0FUVFIobHBmY19mY3BfY3B1X21hcCwgU19JUlVH TyB8IFNfSVdVU1IsCj4gLQkJwqDCoMKgbHBmY19mY3BfY3B1X21hcF9zaG93LCBscGZjX2ZjcF9j cHVfbWFwX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGxwZmNfZmNwX2NwdV9tYXAp Owo+IMKgCj4gwqAvKgo+IMKgIyBscGZjX2ZjcF9jbGFzczrCoMKgRGV0ZXJtaW5lcyBGQyBjbGFz cyB0byB1c2UgZm9yIHRoZSBGQ1AgcHJvdG9jb2wuCj4gQEAgLTQ4NTksOSArNDg0Niw3IEBAIGxw ZmNfbWF4X3Njc2ljbXBsX3RpbWVfc2V0KHN0cnVjdCBscGZjX3Zwb3J0Cj4gKnZwb3J0LCBpbnQg dmFsKQo+IMKgCXJldHVybiAwOwo+IMKgfQo+IMKgbHBmY192cG9ydF9wYXJhbV9zdG9yZShtYXhf c2NzaWNtcGxfdGltZSk7Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihscGZjX21heF9zY3NpY21wbF90 aW1lLCBTX0lSVUdPIHwgU19JV1VTUiwKPiAtCQnCoMKgwqBscGZjX21heF9zY3NpY21wbF90aW1l X3Nob3csCj4gLQkJwqDCoMKgbHBmY19tYXhfc2NzaWNtcGxfdGltZV9zdG9yZSk7Cj4gK3N0YXRp YyBERVZJQ0VfQVRUUl9SVyhscGZjX21heF9zY3NpY21wbF90aW1lKTsKPiDCoAo+IMKgLyoKPiDC oCMgbHBmY19hY2swOiBVc2UgQUNLMCwgaW5zdGVhZCBvZiBBQ0sxIGZvciBjbGFzcyAyIGFja25v d2xlZGdlbWVudC4KPiBWYWx1ZQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1h bF9zeXNmcy5jCj4gYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXNmcy5jCj4gaW5kZXggZmI4 MGM5NmQ4ZjczLi5jMDA4YWY3ZmI0ODAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy90aGVybWFsL3Ro ZXJtYWxfc3lzZnMuYwo+ICsrKyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5c2ZzLmMKPiBA QCAtMzk4LDE0ICszOTgsMTMgQEAgY3JlYXRlX3MzMl90enBfYXR0cihvZmZzZXQpOwo+IMKgICov Cj4gwqBzdGF0aWMgREVWSUNFX0FUVFIodHlwZSwgMDQ0NCwgdHlwZV9zaG93LCBOVUxMKTsKPiDC oHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wLCAwNDQ0LCB0ZW1wX3Nob3csIE5VTEwpOwo+IC1zdGF0 aWMgREVWSUNFX0FUVFIocG9saWN5LCBTX0lSVUdPIHwgU19JV1VTUiwgcG9saWN5X3Nob3csCj4g cG9saWN5X3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKHBvbGljeSk7Cj4gwqBzdGF0 aWMgREVWSUNFX0FUVFIoYXZhaWxhYmxlX3BvbGljaWVzLCBTX0lSVUdPLAo+IGF2YWlsYWJsZV9w b2xpY2llc19zaG93LCBOVUxMKTsKPiAtc3RhdGljIERFVklDRV9BVFRSKHN1c3RhaW5hYmxlX3Bv d2VyLCBTX0lXVVNSIHwgU19JUlVHTywKPiBzdXN0YWluYWJsZV9wb3dlcl9zaG93LAo+IC0JCcKg wqDCoHN1c3RhaW5hYmxlX3Bvd2VyX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKHN1 c3RhaW5hYmxlX3Bvd2VyKTsKPiDCoAo+IMKgLyogVGhlc2UgdGhlcm1hbCB6b25lIGRldmljZSBh dHRyaWJ1dGVzIGFyZSBjcmVhdGVkIGJhc2VkIG9uCj4gY29uZGl0aW9ucyAqLwo+IC1zdGF0aWMg REVWSUNFX0FUVFIobW9kZSwgMDY0NCwgbW9kZV9zaG93LCBtb2RlX3N0b3JlKTsKPiAtc3RhdGlj IERFVklDRV9BVFRSKHBhc3NpdmUsIFNfSVJVR08gfCBTX0lXVVNSLCBwYXNzaXZlX3Nob3csCj4g cGFzc2l2ZV9zdG9yZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhtb2RlKTsKPiArc3RhdGlj IERFVklDRV9BVFRSX1JXKHBhc3NpdmUpOwo+IMKgCj4gwqAvKiBUaGVzZSBhdHRyaWJ1dGVzIGFy ZSB1bmNvbmRpdGlvbmFsbHkgYWRkZWQgdG8gYSB0aGVybWFsIHpvbmUgKi8KPiDCoHN0YXRpYyBz dHJ1Y3QgYXR0cmlidXRlICp0aGVybWFsX3pvbmVfZGV2X2F0dHJzW10gPSB7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zaC0K PiBzY2kuYwo+IGluZGV4IGQ5ZjM5OWM0ZTkwYy4uNzI1N2MwNzhlMTU1IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuYwo+ICsrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9z aC1zY2kuYwo+IEBAIC0xMTQ0LDcgKzExNDQsNyBAQCBzdGF0aWMgc3NpemVfdCByeF9maWZvX3Rp bWVvdXRfc3RvcmUoc3RydWN0Cj4gZGV2aWNlICpkZXYsCj4gwqAJcmV0dXJuIGNvdW50Owo+IMKg fQo+IMKgCj4gLXN0YXRpYyBERVZJQ0VfQVRUUihyeF9maWZvX3RpbWVvdXQsIDA2NDQsIHJ4X2Zp Zm9fdGltZW91dF9zaG93LAo+IHJ4X2ZpZm9fdGltZW91dF9zdG9yZSk7Cj4gK3N0YXRpYyBERVZJ Q0VfQVRUUl9SVyhyeF9maWZvX3RpbWVvdXQpOwo+IMKgCj4gwqAKPiDCoCNpZmRlZiBDT05GSUdf U0VSSUFMX1NIX1NDSV9ETUEKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRi Z2NhcC5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLQo+IGRiZ2NhcC5jCj4gaW5kZXggNDUyZGYw Zjg3ZDZlLi5hMWFiOGFjZjM5YmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNp LWRiZ2NhcC5jCj4gKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZ2NhcC5jCj4gQEAgLTky MCw3ICs5MjAsNyBAQCBzdGF0aWMgc3NpemVfdCBkYmNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2 LAo+IMKgCXJldHVybiBjb3VudDsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgREVWSUNFX0FUVFIoZGJj LCAwNjQ0LCBkYmNfc2hvdywgZGJjX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGRi Yyk7Cj4gwqAKPiDCoGludCB4aGNpX2RiY19pbml0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKPiDC oHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jIGIvZHJpdmVycy91 c2IvcGh5L3BoeS0KPiB0YWh2by5jCj4gaW5kZXggYjNjZTQyZWRiMzczLi43ZjdjNWM4MjQyMGQg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvcGh5L3BoeS10YWh2by5jCj4gKysrIGIvZHJpdmVy cy91c2IvcGh5L3BoeS10YWh2by5jCj4gQEAgLTMxMCw3ICszMTAsNyBAQCBzdGF0aWMgc3NpemVf dCBvdGdfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlCj4gKmRldmljZSwKPiDCoAo+IMKgCXJldHVy biByOwo+IMKgfQo+IC1zdGF0aWMgREVWSUNFX0FUVFIob3RnX21vZGUsIDA2NDQsIG90Z19tb2Rl X3Nob3csIG90Z19tb2RlX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKG90Z19tb2Rl KTsKPiDCoAo+IMKgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRhaHZvX2F0dHJpYnV0ZXNbXSA9 IHsKPiDCoAkmZGV2X2F0dHJfdmJ1cy5hdHRyLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVv L2ZiZGV2L2F1b19rMTkweC5jCj4gYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2F1b19rMTkweC5jCj4g aW5kZXggMGQwNjAzODMyNGUwLi4xZTM4M2M1NDc2MzMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy92 aWRlby9mYmRldi9hdW9fazE5MHguYwo+ICsrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvYXVvX2sx OTB4LmMKPiBAQCAtNzA4LDggKzcwOCw4IEBAIHN0YXRpYyBzc2l6ZV90IHRlbXBfc2hvdyhzdHJ1 Y3QgZGV2aWNlICpkZXYsCj4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gwqAJcmV0 dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXApOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyBERVZJ Q0VfQVRUUih1cGRhdGVfbW9kZSwgMDY0NCwgdXBkYXRlX21vZGVfc2hvdywKPiB1cGRhdGVfbW9k ZV9zdG9yZSk7Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihmbGFzaCwgMDY0NCwgZmxhc2hfc2hvdywg Zmxhc2hfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcodXBkYXRlX21vZGUpOwo+ICtz dGF0aWMgREVWSUNFX0FUVFJfUlcoZmxhc2gpOwo+IMKgc3RhdGljIERFVklDRV9BVFRSKHRlbXAs IDA2NDQsIHRlbXBfc2hvdywgTlVMTCk7Cj4gwqAKPiDCoHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRl ICphdW9rMTkweF9hdHRyaWJ1dGVzW10gPSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8v ZmJkZXYvdzEwMGZiLmMKPiBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvdzEwMGZiLmMKPiBpbmRleCBk NTcwZTE5YTI4NjQuLjAzNWZmNmUwMjg5NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2Zi ZGV2L3cxMDBmYi5jCj4gKysrIGIvZHJpdmVycy92aWRlby9mYmRldi93MTAwZmIuYwo+IEBAIC0x MTAsNyArMTEwLDcgQEAgc3RhdGljIHNzaXplX3QgZmxpcF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbgo+IMKgCXJldHVybiBjb3Vu dDsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgREVWSUNFX0FUVFIoZmxpcCwgMDY0NCwgZmxpcF9zaG93 LCBmbGlwX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGZsaXApOwo+IMKgCj4gwqBz dGF0aWMgc3NpemVfdCB3MTAwZmJfcmVnX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QK PiBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkK PiDCoHsKPiBAQCAtMTY2LDcgKzE2Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGZhc3RwbGxjbGtfc3Rv cmUoc3RydWN0IGRldmljZQo+ICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHQKPiDC oAlyZXR1cm4gY291bnQ7Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIERFVklDRV9BVFRSKGZhc3RwbGxj bGssIDA2NDQsIGZhc3RwbGxjbGtfc2hvdywKPiBmYXN0cGxsY2xrX3N0b3JlKTsKPiArc3RhdGlj IERFVklDRV9BVFRSX1JXKGZhc3RwbGxjbGspOwo+IMKgCj4gwqAvKgo+IMKgICogU29tZSB0b3Vj aHNjcmVlbnMgbmVlZCBoc3luYyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB2aWRlbyBkcml2ZXIgdG8K PiBkaWZmIC0tZ2l0IGEvbGliL3Rlc3RfZmlybXdhcmUuYyBiL2xpYi90ZXN0X2Zpcm13YXJlLmMK PiBpbmRleCA2NGE0Yzc2Y2JhMmIuLjk2NDc4NGRjMTYwMiAxMDA2NDQKPiAtLS0gYS9saWIvdGVz dF9maXJtd2FyZS5jCj4gKysrIGIvbGliL3Rlc3RfZmlybXdhcmUuYwo+IEBAIC0zNTksNyArMzU5 LDcgQEAgc3RhdGljIHNzaXplX3QgY29uZmlnX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlCj4gKmRl diwKPiDCoHsKPiDCoAlyZXR1cm4gY29uZmlnX3Rlc3Rfc2hvd19zdHIoYnVmLCB0ZXN0X2Z3X2Nv bmZpZy0+bmFtZSk7Cj4gwqB9Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihjb25maWdfbmFtZSwgMDY0 NCwgY29uZmlnX25hbWVfc2hvdywKPiBjb25maWdfbmFtZV9zdG9yZSk7Cj4gK3N0YXRpYyBERVZJ Q0VfQVRUUl9SVyhjb25maWdfbmFtZSk7Cj4gwqAKPiDCoHN0YXRpYyBzc2l6ZV90IGNvbmZpZ19u dW1fcmVxdWVzdHNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+IMKgCQkJCQnCoHN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlCj4gKmF0dHIsCj4gQEAgLTM4OCw4ICszODgsNyBAQCBzdGF0aWMgc3Np emVfdCBjb25maWdfbnVtX3JlcXVlc3RzX3Nob3coc3RydWN0Cj4gZGV2aWNlICpkZXYsCj4gwqB7 Cj4gwqAJcmV0dXJuIHRlc3RfZGV2X2NvbmZpZ19zaG93X3U4KGJ1ZiwgdGVzdF9md19jb25maWct Cj4gPm51bV9yZXF1ZXN0cyk7Cj4gwqB9Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihjb25maWdfbnVt X3JlcXVlc3RzLCAwNjQ0LAo+IGNvbmZpZ19udW1fcmVxdWVzdHNfc2hvdywKPiAtCQnCoMKgwqBj b25maWdfbnVtX3JlcXVlc3RzX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGNvbmZp Z19udW1fcmVxdWVzdHMpOwo+IMKgCj4gwqBzdGF0aWMgc3NpemVfdCBjb25maWdfc3luY19kaXJl Y3Rfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+IMKgCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZQo+ICphdHRyLAo+IEBAIC00MTEsOCArNDEwLDcgQEAgc3RhdGljIHNzaXplX3QgY29uZmln X3N5bmNfZGlyZWN0X3Nob3coc3RydWN0Cj4gZGV2aWNlICpkZXYsCj4gwqB7Cj4gwqAJcmV0dXJu IHRlc3RfZGV2X2NvbmZpZ19zaG93X2Jvb2woYnVmLCB0ZXN0X2Z3X2NvbmZpZy0KPiA+c3luY19k aXJlY3QpOwo+IMKgfQo+IC1zdGF0aWMgREVWSUNFX0FUVFIoY29uZmlnX3N5bmNfZGlyZWN0LCAw NjQ0LAo+IGNvbmZpZ19zeW5jX2RpcmVjdF9zaG93LAo+IC0JCcKgwqDCoGNvbmZpZ19zeW5jX2Rp cmVjdF9zdG9yZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb25maWdfc3luY19kaXJlY3Qp Owo+IMKgCj4gwqBzdGF0aWMgc3NpemVfdCBjb25maWdfc2VuZF91ZXZlbnRfc3RvcmUoc3RydWN0 IGRldmljZSAqZGV2LAo+IMKgCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQo+ICphdHRyLAo+ IEBAIC00MjgsOCArNDI2LDcgQEAgc3RhdGljIHNzaXplX3QgY29uZmlnX3NlbmRfdWV2ZW50X3No b3coc3RydWN0Cj4gZGV2aWNlICpkZXYsCj4gwqB7Cj4gwqAJcmV0dXJuIHRlc3RfZGV2X2NvbmZp Z19zaG93X2Jvb2woYnVmLCB0ZXN0X2Z3X2NvbmZpZy0KPiA+c2VuZF91ZXZlbnQpOwo+IMKgfQo+ IC1zdGF0aWMgREVWSUNFX0FUVFIoY29uZmlnX3NlbmRfdWV2ZW50LCAwNjQ0LAo+IGNvbmZpZ19z ZW5kX3VldmVudF9zaG93LAo+IC0JCcKgwqDCoGNvbmZpZ19zZW5kX3VldmVudF9zdG9yZSk7Cj4g K3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb25maWdfc2VuZF91ZXZlbnQpOwo+IMKgCj4gwqBzdGF0 aWMgc3NpemVfdCBjb25maWdfcmVhZF9md19pZHhfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+ IMKgCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQo+ICphdHRyLAo+IEBAIC00NDUsOCArNDQy LDcgQEAgc3RhdGljIHNzaXplX3QgY29uZmlnX3JlYWRfZndfaWR4X3Nob3coc3RydWN0Cj4gZGV2 aWNlICpkZXYsCj4gwqB7Cj4gwqAJcmV0dXJuIHRlc3RfZGV2X2NvbmZpZ19zaG93X3U4KGJ1Ziwg dGVzdF9md19jb25maWctCj4gPnJlYWRfZndfaWR4KTsKPiDCoH0KPiAtc3RhdGljIERFVklDRV9B VFRSKGNvbmZpZ19yZWFkX2Z3X2lkeCwgMDY0NCwKPiBjb25maWdfcmVhZF9md19pZHhfc2hvdywK PiAtCQnCoMKgwqBjb25maWdfcmVhZF9md19pZHhfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FU VFJfUlcoY29uZmlnX3JlYWRfZndfaWR4KTsKPiDCoAo+IMKgCj4gwqBzdGF0aWMgc3NpemVfdCB0 cmlnZ2VyX3JlcXVlc3Rfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+IGRpZmYgLS1naXQgYS9s aWIvdGVzdF9rbW9kLmMgYi9saWIvdGVzdF9rbW9kLmMKPiBpbmRleCAzMzdmNDA4YjRkZTYuLmUz NzJiOTdlZWUxMyAxMDA2NDQKPiAtLS0gYS9saWIvdGVzdF9rbW9kLmMKPiArKysgYi9saWIvdGVz dF9rbW9kLmMKPiBAQCAtNjk0LDggKzY5NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGNvbmZpZ190ZXN0 X2RyaXZlcl9zaG93KHN0cnVjdAo+IGRldmljZSAqZGV2LAo+IMKgCXJldHVybiBjb25maWdfdGVz dF9zaG93X3N0cigmdGVzdF9kZXYtPmNvbmZpZ19tdXRleCwgYnVmLAo+IMKgCQkJCcKgwqDCoMKg Y29uZmlnLT50ZXN0X2RyaXZlcik7Cj4gwqB9Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihjb25maWdf dGVzdF9kcml2ZXIsIDA2NDQsCj4gY29uZmlnX3Rlc3RfZHJpdmVyX3Nob3csCj4gLQkJwqDCoMKg Y29uZmlnX3Rlc3RfZHJpdmVyX3N0b3JlKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGNvbmZp Z190ZXN0X2RyaXZlcik7Cj4gwqAKPiDCoHN0YXRpYyBzc2l6ZV90IGNvbmZpZ190ZXN0X2ZzX3N0 b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKPiDCoAkJCQnCoMKgwqDCoHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLAo+IEBAIC03MjYsOCArNzI1LDcgQEAgc3RhdGljIHNzaXplX3QgY29uZmln X3Rlc3RfZnNfc2hvdyhzdHJ1Y3QgZGV2aWNlCj4gKmRldiwKPiDCoAlyZXR1cm4gY29uZmlnX3Rl c3Rfc2hvd19zdHIoJnRlc3RfZGV2LT5jb25maWdfbXV0ZXgsIGJ1ZiwKPiDCoAkJCQnCoMKgwqDC oGNvbmZpZy0+dGVzdF9mcyk7Cj4gwqB9Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihjb25maWdfdGVz dF9mcywgMDY0NCwgY29uZmlnX3Rlc3RfZnNfc2hvdywKPiAtCQnCoMKgwqBjb25maWdfdGVzdF9m c19zdG9yZSk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb25maWdfdGVzdF9mcyk7Cj4gwqAK PiDCoHN0YXRpYyBpbnQgdHJpZ2dlcl9jb25maWdfcnVuX3R5cGUoc3RydWN0IGttb2RfdGVzdF9k ZXZpY2UKPiAqdGVzdF9kZXYsCj4gwqAJCQkJwqDCoMKgZW51bSBrbW9kX3Rlc3RfY2FzZSB0ZXN0 X2Nhc2UsCj4gQEAgLTEwMTIsOCArMTAxMCw3IEBAIHN0YXRpYyBzc2l6ZV90IGNvbmZpZ19udW1f dGhyZWFkc19zaG93KHN0cnVjdAo+IGRldmljZSAqZGV2LAo+IMKgCj4gwqAJcmV0dXJuIHRlc3Rf ZGV2X2NvbmZpZ19zaG93X2ludCh0ZXN0X2RldiwgYnVmLCBjb25maWctCj4gPm51bV90aHJlYWRz KTsKPiDCoH0KPiAtc3RhdGljIERFVklDRV9BVFRSKGNvbmZpZ19udW1fdGhyZWFkcywgMDY0NCwK PiBjb25maWdfbnVtX3RocmVhZHNfc2hvdywKPiAtCQnCoMKgwqBjb25maWdfbnVtX3RocmVhZHNf c3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcoY29uZmlnX251bV90aHJlYWRzKTsKPiDC oAo+IMKgc3RhdGljIHNzaXplX3QgY29uZmlnX3Rlc3RfY2FzZV9zdG9yZShzdHJ1Y3QgZGV2aWNl ICpkZXYsCj4gwqAJCQkJwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIs Cj4gQEAgLTEwMzcsOCArMTAzNCw3IEBAIHN0YXRpYyBzc2l6ZV90IGNvbmZpZ190ZXN0X2Nhc2Vf c2hvdyhzdHJ1Y3QKPiBkZXZpY2UgKmRldiwKPiDCoAo+IMKgCXJldHVybiB0ZXN0X2Rldl9jb25m aWdfc2hvd191aW50KHRlc3RfZGV2LCBidWYsIGNvbmZpZy0KPiA+dGVzdF9jYXNlKTsKPiDCoH0K PiAtc3RhdGljIERFVklDRV9BVFRSKGNvbmZpZ190ZXN0X2Nhc2UsIDA2NDQsIGNvbmZpZ190ZXN0 X2Nhc2Vfc2hvdywKPiAtCQnCoMKgwqBjb25maWdfdGVzdF9jYXNlX3N0b3JlKTsKPiArc3RhdGlj IERFVklDRV9BVFRSX1JXKGNvbmZpZ190ZXN0X2Nhc2UpOwo+IMKgCj4gwqBzdGF0aWMgc3NpemVf dCB0ZXN0X3Jlc3VsdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiDCoAkJCQlzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiBAQCAtMTA0OSw3ICsxMDQ1LDcgQEAgc3RhdGljIHNzaXpl X3QgdGVzdF9yZXN1bHRfc2hvdyhzdHJ1Y3QgZGV2aWNlCj4gKmRldiwKPiDCoAo+IMKgCXJldHVy biB0ZXN0X2Rldl9jb25maWdfc2hvd19pbnQodGVzdF9kZXYsIGJ1ZiwgY29uZmlnLQo+ID50ZXN0 X3Jlc3VsdCk7Cj4gwqB9Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUih0ZXN0X3Jlc3VsdCwgMDY0NCwg dGVzdF9yZXN1bHRfc2hvdywKPiB0ZXN0X3Jlc3VsdF9zdG9yZSk7Cj4gK3N0YXRpYyBERVZJQ0Vf QVRUUl9SVyh0ZXN0X3Jlc3VsdCk7Cj4gwqAKPiDCoCNkZWZpbmUgVEVTVF9LTU9EX0RFVl9BVFRS KG5hbWUpCQkmZGV2X2F0dHJfIyNuYW1lLmF0dAo+IHIKPiDCoAo+IGRpZmYgLS1naXQgYS9zb3Vu ZC9zb2Mvb21hcC9tY2JzcC5jIGIvc291bmQvc29jL29tYXAvbWNic3AuYwo+IGluZGV4IDdhNTRl MzA4MzIwMy4uNzlkNGRjNzg1ZTVjIDEwMDY0NAo+IC0tLSBhL3NvdW5kL3NvYy9vbWFwL21jYnNw LmMKPiArKysgYi9zb3VuZC9zb2Mvb21hcC9tY2JzcC5jCj4gQEAgLTg1NCw3ICs4NTQsNyBAQCBz dGF0aWMgc3NpemVfdCBkbWFfb3BfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlCj4gKmRldiwKPiDC oAlyZXR1cm4gc2l6ZTsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgREVWSUNFX0FUVFIoZG1hX29wX21v ZGUsIDA2NDQsIGRtYV9vcF9tb2RlX3Nob3csCj4gZG1hX29wX21vZGVfc3RvcmUpOwo+ICtzdGF0 aWMgREVWSUNFX0FUVFJfUlcoZG1hX29wX21vZGUpOwo+IMKgCj4gwqBzdGF0aWMgY29uc3Qgc3Ry dWN0IGF0dHJpYnV0ZSAqYWRkaXRpb25hbF9hdHRyc1tdID0gewo+IMKgCSZkZXZfYXR0cl9tYXhf dHhfdGhyZXMuYXR0ciwKPiBAQCAtOTIzLDcgKzkyMyw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0X3Rh cHNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+IMKgCXJldHVybiBzaXplOwo+IMKgfQo+IMKg Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUihzdF90YXBzLCAwNjQ0LCBzdF90YXBzX3Nob3csIHN0X3Rh cHNfc3RvcmUpOwo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcoc3RfdGFwcyk7Cj4gwqAKPiDCoHN0 YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpzaWRldG9uZV9hdHRyc1tdID0gewo+IMKgCSZk ZXZfYXR0cl9zdF90YXBzLmF0dHIsCi0tLQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDog c2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtdXNiIiBpbgp0aGUgYm9keSBvZiBhIG1l c3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwpNb3JlIG1ham9yZG9tbyBpbmZvIGF0 ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756992AbdLUAsI (ORCPT ); Wed, 20 Dec 2017 19:48:08 -0500 Received: from mga11.intel.com ([192.55.52.93]:12583 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755561AbdLUAsD (ORCPT ); Wed, 20 Dec 2017 19:48:03 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,434,1508828400"; d="scan'208";a="188577259" Message-ID: <1513817271.2592.2.camel@intel.com> Subject: Re: [-next PATCH 2/4] treewide: Use DEVICE_ATTR_RW From: Zhang Rui To: Joe Perches , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Cezary Jackiewicz , Darren Hart , Andy Shevchenko , Sebastian Ott , Peter Oberparleiter , James Smart , Dick Kennedy , Eduardo Valentin , Greg Kroah-Hartman , Mathias Nyman , Felipe Balbi , "Luis R. Rodriguez" , Peter Ujfalusi , Jarkko Nikula Cc: Martin Schwidefsky , Heiko Carstens , David Airlie , "James E.J. Bottomley" , "Martin K. Petersen" , Jiri Slaby , Bartlomiej Zolnierkiewicz , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, platform-driver-x86@vger.kernel.org, linux-scsi@vger.kernel.org, linux-pm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, linux-fbdev@vger.kernel.org, alsa-devel@alsa-project.org, linux-omap@vger.kernel.org Date: Thu, 21 Dec 2017 08:47:51 +0800 In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.18.5.2-0ubuntu3 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 2017-12-19 at 10:15 -0800, Joe Perches wrote: > Convert DEVICE_ATTR uses to DEVICE_ATTR_RW where possible. > > Done with perl script: > > $ git grep -w --name-only DEVICE_ATTR | \ >   xargs perl -i -e 'local $/; while (<>) { > s/\bDEVICE_ATTR\s*\(\s*(\w+)\s*,\s*\(?(\s*S_IRUGO\s*\|\s*S_IWUSR|\s*S > _IWUSR\s*\|\s*S_IRUGO\s*|\s*0644\s*)\)?\s*,\s*\1_show\s*,\s*\1_store\ > s*\)/DEVICE_ATTR_RW(\1)/g; print;}' > > Signed-off-by: Joe Perches > --- >  arch/s390/kernel/topology.c          |  3 +-- >  arch/tile/kernel/sysfs.c             |  2 +- >  drivers/gpu/drm/i915/i915_sysfs.c    |  6 ++--- >  drivers/platform/x86/compal-laptop.c | 18 +++++---------- >  drivers/s390/cio/device.c            |  2 +- >  drivers/scsi/lpfc/lpfc_attr.c        | 43 ++++++++++++------------ > ------------ >  drivers/thermal/thermal_sysfs.c      |  9 ++++---- For the thermal part, ACK-by: Zhang Rui thanks, rui >  drivers/tty/serial/sh-sci.c          |  2 +- >  drivers/usb/host/xhci-dbgcap.c       |  2 +- >  drivers/usb/phy/phy-tahvo.c          |  2 +- >  drivers/video/fbdev/auo_k190x.c      |  4 ++-- >  drivers/video/fbdev/w100fb.c         |  4 ++-- >  lib/test_firmware.c                  | 14 +++++------- >  lib/test_kmod.c                      | 14 +++++------- >  sound/soc/omap/mcbsp.c               |  4 ++-- >  15 files changed, 49 insertions(+), 80 deletions(-) > > diff --git a/arch/s390/kernel/topology.c > b/arch/s390/kernel/topology.c > index 4d5b65e527b5..4b6e0397f66d 100644 > --- a/arch/s390/kernel/topology.c > +++ b/arch/s390/kernel/topology.c > @@ -404,8 +404,7 @@ static ssize_t dispatching_store(struct device > *dev, >   put_online_cpus(); >   return rc ? rc : count; >  } > -static DEVICE_ATTR(dispatching, 0644, dispatching_show, > -  dispatching_store); > +static DEVICE_ATTR_RW(dispatching); >   >  static ssize_t cpu_polarization_show(struct device *dev, >        struct device_attribute *attr, > char *buf) > diff --git a/arch/tile/kernel/sysfs.c b/arch/tile/kernel/sysfs.c > index 825867c53853..af5024f0fb5a 100644 > --- a/arch/tile/kernel/sysfs.c > +++ b/arch/tile/kernel/sysfs.c > @@ -184,7 +184,7 @@ static ssize_t hv_stats_store(struct device *dev, >   return n < 0 ? n : count; >  } >   > -static DEVICE_ATTR(hv_stats, 0644, hv_stats_show, hv_stats_store); > +static DEVICE_ATTR_RW(hv_stats); >   >  static int hv_stats_device_add(struct device *dev, struct > subsys_interface *sif) >  { > diff --git a/drivers/gpu/drm/i915/i915_sysfs.c > b/drivers/gpu/drm/i915/i915_sysfs.c > index c74a20b80182..1d0ab8ff5915 100644 > --- a/drivers/gpu/drm/i915/i915_sysfs.c > +++ b/drivers/gpu/drm/i915/i915_sysfs.c > @@ -447,9 +447,9 @@ static ssize_t gt_min_freq_mhz_store(struct > device *kdev, >   >  static DEVICE_ATTR(gt_act_freq_mhz, S_IRUGO, gt_act_freq_mhz_show, > NULL); >  static DEVICE_ATTR(gt_cur_freq_mhz, S_IRUGO, gt_cur_freq_mhz_show, > NULL); > -static DEVICE_ATTR(gt_boost_freq_mhz, S_IRUGO | S_IWUSR, > gt_boost_freq_mhz_show, gt_boost_freq_mhz_store); > -static DEVICE_ATTR(gt_max_freq_mhz, S_IRUGO | S_IWUSR, > gt_max_freq_mhz_show, gt_max_freq_mhz_store); > -static DEVICE_ATTR(gt_min_freq_mhz, S_IRUGO | S_IWUSR, > gt_min_freq_mhz_show, gt_min_freq_mhz_store); > +static DEVICE_ATTR_RW(gt_boost_freq_mhz); > +static DEVICE_ATTR_RW(gt_max_freq_mhz); > +static DEVICE_ATTR_RW(gt_min_freq_mhz); >   >  static DEVICE_ATTR(vlv_rpe_freq_mhz, S_IRUGO, vlv_rpe_freq_mhz_show, > NULL); >   > diff --git a/drivers/platform/x86/compal-laptop.c > b/drivers/platform/x86/compal-laptop.c > index 6bcb750e1865..4f9bc72f0584 100644 > --- a/drivers/platform/x86/compal-laptop.c > +++ b/drivers/platform/x86/compal-laptop.c > @@ -679,18 +679,12 @@ static int bat_writeable_property(struct > power_supply *psy, >  /* ============== */ >  /* Driver Globals */ >  /* ============== */ > -static DEVICE_ATTR(wake_up_pme, > - 0644, wake_up_pme_show, wake_up_pme_s > tore); > -static DEVICE_ATTR(wake_up_modem, > - 0644, wake_up_modem_show, wake_up_modem_store > ); > -static DEVICE_ATTR(wake_up_lan, > - 0644, wake_up_lan_show, wake_up_lan_store); > -static DEVICE_ATTR(wake_up_wlan, > - 0644, wake_up_wlan_show, wake_up_wlan_store); > -static DEVICE_ATTR(wake_up_key, > - 0644, wake_up_key_show, wake_up_key_store); > -static DEVICE_ATTR(wake_up_mouse, > - 0644, wake_up_mouse_show, wake_up_mouse_store > ); > +static DEVICE_ATTR_RW(wake_up_pme); > +static DEVICE_ATTR_RW(wake_up_modem); > +static DEVICE_ATTR_RW(wake_up_lan); > +static DEVICE_ATTR_RW(wake_up_wlan); > +static DEVICE_ATTR_RW(wake_up_key); > +static DEVICE_ATTR_RW(wake_up_mouse); >   >  static DEVICE_ATTR(fan1_input,  S_IRUGO, fan_show,          NULL); >  static DEVICE_ATTR(temp1_input, S_IRUGO, temp_cpu,          NULL); > diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c > index 75a245f38e2e..6eefb67b31f3 100644 > --- a/drivers/s390/cio/device.c > +++ b/drivers/s390/cio/device.c > @@ -600,7 +600,7 @@ static ssize_t vpm_show(struct device *dev, > struct device_attribute *attr, >  static DEVICE_ATTR(devtype, 0444, devtype_show, NULL); >  static DEVICE_ATTR(cutype, 0444, cutype_show, NULL); >  static DEVICE_ATTR(modalias, 0444, modalias_show, NULL); > -static DEVICE_ATTR(online, 0644, online_show, online_store); > +static DEVICE_ATTR_RW(online); >  static DEVICE_ATTR(availability, 0444, available_show, NULL); >  static DEVICE_ATTR(logging, 0200, NULL, initiate_logging); >  static DEVICE_ATTR(vpm, 0444, vpm_show, NULL); > diff --git a/drivers/scsi/lpfc/lpfc_attr.c > b/drivers/scsi/lpfc/lpfc_attr.c > index 797bb42a6306..95f7ba3c3f1a 100644 > --- a/drivers/scsi/lpfc/lpfc_attr.c > +++ b/drivers/scsi/lpfc/lpfc_attr.c > @@ -2519,8 +2519,7 @@ lpfc_soft_wwpn_store(struct device *dev, struct > device_attribute *attr, >   "reinit adapter - %d\n", stat2); >   return (stat1 || stat2) ? -EIO : count; >  } > -static DEVICE_ATTR(lpfc_soft_wwpn, S_IRUGO | S_IWUSR, > -    lpfc_soft_wwpn_show, lpfc_soft_wwpn_store); > +static DEVICE_ATTR_RW(lpfc_soft_wwpn); >   >  /** >   * lpfc_soft_wwnn_show - Return the cfg soft ww node name for the > adapter > @@ -2583,8 +2582,7 @@ lpfc_soft_wwnn_store(struct device *dev, struct > device_attribute *attr, >   >   return count; >  } > -static DEVICE_ATTR(lpfc_soft_wwnn, S_IRUGO | S_IWUSR, > -    lpfc_soft_wwnn_show, lpfc_soft_wwnn_store); > +static DEVICE_ATTR_RW(lpfc_soft_wwnn); >   >  /** >   * lpfc_oas_tgt_show - Return wwpn of target whose luns maybe > enabled for > @@ -3102,8 +3100,7 @@ MODULE_PARM_DESC(lpfc_poll, "FCP ring polling > mode control:" >    " 1 - poll with interrupts enabled" >    " 3 - poll and disable FCP ring interrupts"); >   > -static DEVICE_ATTR(lpfc_poll, S_IRUGO | S_IWUSR, > -    lpfc_poll_show, lpfc_poll_store); > +static DEVICE_ATTR_RW(lpfc_poll); >   >  int lpfc_no_hba_reset_cnt; >  unsigned long lpfc_no_hba_reset[MAX_HBAS_NO_RESET] = { > @@ -3336,8 +3333,7 @@ lpfc_nodev_tmo_set(struct lpfc_vport *vport, > int val) >   >  lpfc_vport_param_store(nodev_tmo) >   > -static DEVICE_ATTR(lpfc_nodev_tmo, S_IRUGO | S_IWUSR, > -    lpfc_nodev_tmo_show, lpfc_nodev_tmo_store); > +static DEVICE_ATTR_RW(lpfc_nodev_tmo); >   >  /* >  # lpfc_devloss_tmo: If set, it will hold all I/O errors on devices > that > @@ -3386,8 +3382,7 @@ lpfc_devloss_tmo_set(struct lpfc_vport *vport, > int val) >  } >   >  lpfc_vport_param_store(devloss_tmo) > -static DEVICE_ATTR(lpfc_devloss_tmo, S_IRUGO | S_IWUSR, > -    lpfc_devloss_tmo_show, lpfc_devloss_tmo_store); > +static DEVICE_ATTR_RW(lpfc_devloss_tmo); >   >  /* >   * lpfc_suppress_rsp: Enable suppress rsp feature is firmware > supports it > @@ -3580,8 +3575,7 @@ lpfc_restrict_login_set(struct lpfc_vport > *vport, int val) >   return 0; >  } >  lpfc_vport_param_store(restrict_login); > -static DEVICE_ATTR(lpfc_restrict_login, S_IRUGO | S_IWUSR, > -    lpfc_restrict_login_show, > lpfc_restrict_login_store); > +static DEVICE_ATTR_RW(lpfc_restrict_login); >   >  /* >  # Some disk devices have a "select ID" or "select Target" > capability. > @@ -3695,8 +3689,7 @@ lpfc_topology_store(struct device *dev, struct > device_attribute *attr, >  } >   >  lpfc_param_show(topology) > -static DEVICE_ATTR(lpfc_topology, S_IRUGO | S_IWUSR, > - lpfc_topology_show, lpfc_topology_store); > +static DEVICE_ATTR_RW(lpfc_topology); >   >  /** >   * lpfc_static_vport_show: Read callback function for > @@ -3954,8 +3947,7 @@ lpfc_stat_data_ctrl_show(struct device *dev, > struct device_attribute *attr, >  /* >   * Sysfs attribute to control the statistical data collection. >   */ > -static DEVICE_ATTR(lpfc_stat_data_ctrl, S_IRUGO | S_IWUSR, > -    lpfc_stat_data_ctrl_show, > lpfc_stat_data_ctrl_store); > +static DEVICE_ATTR_RW(lpfc_stat_data_ctrl); >   >  /* >   * lpfc_drvr_stat_data: sysfs attr to get driver statistical data. > @@ -4194,8 +4186,7 @@ lpfc_link_speed_init(struct lpfc_hba *phba, int > val) >   return -EINVAL; >  } >   > -static DEVICE_ATTR(lpfc_link_speed, S_IRUGO | S_IWUSR, > -    lpfc_link_speed_show, lpfc_link_speed_store); > +static DEVICE_ATTR_RW(lpfc_link_speed); >   >  /* >  # lpfc_aer_support: Support PCIe device Advanced Error Reporting > (AER) > @@ -4288,8 +4279,7 @@ lpfc_aer_support_store(struct device *dev, > struct device_attribute *attr, >   return rc; >  } >   > -static DEVICE_ATTR(lpfc_aer_support, S_IRUGO | S_IWUSR, > -    lpfc_aer_support_show, lpfc_aer_support_store); > +static DEVICE_ATTR_RW(lpfc_aer_support); >   >  /** >   * lpfc_aer_cleanup_state - Clean up aer state to the aer enabled > device > @@ -4436,8 +4426,7 @@ LPFC_ATTR(sriov_nr_virtfn, > LPFC_DEF_VFN_PER_PFN, 0, LPFC_MAX_VFN_PER_PFN, >   "Enable PCIe device SR-IOV virtual fn"); >   >  lpfc_param_show(sriov_nr_virtfn) > -static DEVICE_ATTR(lpfc_sriov_nr_virtfn, S_IRUGO | S_IWUSR, > -    lpfc_sriov_nr_virtfn_show, > lpfc_sriov_nr_virtfn_store); > +static DEVICE_ATTR_RW(lpfc_sriov_nr_virtfn); >   >  /** >   * lpfc_request_firmware_store - Request for Linux generic firmware > upgrade > @@ -4611,8 +4600,7 @@ lpfc_fcp_imax_init(struct lpfc_hba *phba, int > val) >   return 0; >  } >   > -static DEVICE_ATTR(lpfc_fcp_imax, S_IRUGO | S_IWUSR, > -    lpfc_fcp_imax_show, lpfc_fcp_imax_store); > +static DEVICE_ATTR_RW(lpfc_fcp_imax); >   >  /* >   * lpfc_auto_imax: Controls Auto-interrupt coalescing values > support. > @@ -4772,8 +4760,7 @@ lpfc_fcp_cpu_map_init(struct lpfc_hba *phba, > int val) >   return 0; >  } >   > -static DEVICE_ATTR(lpfc_fcp_cpu_map, S_IRUGO | S_IWUSR, > -    lpfc_fcp_cpu_map_show, lpfc_fcp_cpu_map_store); > +static DEVICE_ATTR_RW(lpfc_fcp_cpu_map); >   >  /* >  # lpfc_fcp_class:  Determines FC class to use for the FCP protocol. > @@ -4859,9 +4846,7 @@ lpfc_max_scsicmpl_time_set(struct lpfc_vport > *vport, int val) >   return 0; >  } >  lpfc_vport_param_store(max_scsicmpl_time); > -static DEVICE_ATTR(lpfc_max_scsicmpl_time, S_IRUGO | S_IWUSR, > -    lpfc_max_scsicmpl_time_show, > -    lpfc_max_scsicmpl_time_store); > +static DEVICE_ATTR_RW(lpfc_max_scsicmpl_time); >   >  /* >  # lpfc_ack0: Use ACK0, instead of ACK1 for class 2 acknowledgement. > Value > diff --git a/drivers/thermal/thermal_sysfs.c > b/drivers/thermal/thermal_sysfs.c > index fb80c96d8f73..c008af7fb480 100644 > --- a/drivers/thermal/thermal_sysfs.c > +++ b/drivers/thermal/thermal_sysfs.c > @@ -398,14 +398,13 @@ create_s32_tzp_attr(offset); >   */ >  static DEVICE_ATTR(type, 0444, type_show, NULL); >  static DEVICE_ATTR(temp, 0444, temp_show, NULL); > -static DEVICE_ATTR(policy, S_IRUGO | S_IWUSR, policy_show, > policy_store); > +static DEVICE_ATTR_RW(policy); >  static DEVICE_ATTR(available_policies, S_IRUGO, > available_policies_show, NULL); > -static DEVICE_ATTR(sustainable_power, S_IWUSR | S_IRUGO, > sustainable_power_show, > -    sustainable_power_store); > +static DEVICE_ATTR_RW(sustainable_power); >   >  /* These thermal zone device attributes are created based on > conditions */ > -static DEVICE_ATTR(mode, 0644, mode_show, mode_store); > -static DEVICE_ATTR(passive, S_IRUGO | S_IWUSR, passive_show, > passive_store); > +static DEVICE_ATTR_RW(mode); > +static DEVICE_ATTR_RW(passive); >   >  /* These attributes are unconditionally added to a thermal zone */ >  static struct attribute *thermal_zone_dev_attrs[] = { > diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh- > sci.c > index d9f399c4e90c..7257c078e155 100644 > --- a/drivers/tty/serial/sh-sci.c > +++ b/drivers/tty/serial/sh-sci.c > @@ -1144,7 +1144,7 @@ static ssize_t rx_fifo_timeout_store(struct > device *dev, >   return count; >  } >   > -static DEVICE_ATTR(rx_fifo_timeout, 0644, rx_fifo_timeout_show, > rx_fifo_timeout_store); > +static DEVICE_ATTR_RW(rx_fifo_timeout); >   >   >  #ifdef CONFIG_SERIAL_SH_SCI_DMA > diff --git a/drivers/usb/host/xhci-dbgcap.c b/drivers/usb/host/xhci- > dbgcap.c > index 452df0f87d6e..a1ab8acf39ba 100644 > --- a/drivers/usb/host/xhci-dbgcap.c > +++ b/drivers/usb/host/xhci-dbgcap.c > @@ -920,7 +920,7 @@ static ssize_t dbc_store(struct device *dev, >   return count; >  } >   > -static DEVICE_ATTR(dbc, 0644, dbc_show, dbc_store); > +static DEVICE_ATTR_RW(dbc); >   >  int xhci_dbc_init(struct xhci_hcd *xhci) >  { > diff --git a/drivers/usb/phy/phy-tahvo.c b/drivers/usb/phy/phy- > tahvo.c > index b3ce42edb373..7f7c5c82420d 100644 > --- a/drivers/usb/phy/phy-tahvo.c > +++ b/drivers/usb/phy/phy-tahvo.c > @@ -310,7 +310,7 @@ static ssize_t otg_mode_store(struct device > *device, >   >   return r; >  } > -static DEVICE_ATTR(otg_mode, 0644, otg_mode_show, otg_mode_store); > +static DEVICE_ATTR_RW(otg_mode); >   >  static struct attribute *tahvo_attributes[] = { >   &dev_attr_vbus.attr, > diff --git a/drivers/video/fbdev/auo_k190x.c > b/drivers/video/fbdev/auo_k190x.c > index 0d06038324e0..1e383c547633 100644 > --- a/drivers/video/fbdev/auo_k190x.c > +++ b/drivers/video/fbdev/auo_k190x.c > @@ -708,8 +708,8 @@ static ssize_t temp_show(struct device *dev, > struct device_attribute *attr, >   return sprintf(buf, "%d\n", temp); >  } >   > -static DEVICE_ATTR(update_mode, 0644, update_mode_show, > update_mode_store); > -static DEVICE_ATTR(flash, 0644, flash_show, flash_store); > +static DEVICE_ATTR_RW(update_mode); > +static DEVICE_ATTR_RW(flash); >  static DEVICE_ATTR(temp, 0644, temp_show, NULL); >   >  static struct attribute *auok190x_attributes[] = { > diff --git a/drivers/video/fbdev/w100fb.c > b/drivers/video/fbdev/w100fb.c > index d570e19a2864..035ff6e02894 100644 > --- a/drivers/video/fbdev/w100fb.c > +++ b/drivers/video/fbdev/w100fb.c > @@ -110,7 +110,7 @@ static ssize_t flip_store(struct device *dev, > struct device_attribute *attr, con >   return count; >  } >   > -static DEVICE_ATTR(flip, 0644, flip_show, flip_store); > +static DEVICE_ATTR_RW(flip); >   >  static ssize_t w100fb_reg_read(struct device *dev, struct > device_attribute *attr, const char *buf, size_t count) >  { > @@ -166,7 +166,7 @@ static ssize_t fastpllclk_store(struct device > *dev, struct device_attribute *att >   return count; >  } >   > -static DEVICE_ATTR(fastpllclk, 0644, fastpllclk_show, > fastpllclk_store); > +static DEVICE_ATTR_RW(fastpllclk); >   >  /* >   * Some touchscreens need hsync information from the video driver to > diff --git a/lib/test_firmware.c b/lib/test_firmware.c > index 64a4c76cba2b..964784dc1602 100644 > --- a/lib/test_firmware.c > +++ b/lib/test_firmware.c > @@ -359,7 +359,7 @@ static ssize_t config_name_show(struct device > *dev, >  { >   return config_test_show_str(buf, test_fw_config->name); >  } > -static DEVICE_ATTR(config_name, 0644, config_name_show, > config_name_store); > +static DEVICE_ATTR_RW(config_name); >   >  static ssize_t config_num_requests_store(struct device *dev, >    struct device_attribute > *attr, > @@ -388,8 +388,7 @@ static ssize_t config_num_requests_show(struct > device *dev, >  { >   return test_dev_config_show_u8(buf, test_fw_config- > >num_requests); >  } > -static DEVICE_ATTR(config_num_requests, 0644, > config_num_requests_show, > -    config_num_requests_store); > +static DEVICE_ATTR_RW(config_num_requests); >   >  static ssize_t config_sync_direct_store(struct device *dev, >   struct device_attribute > *attr, > @@ -411,8 +410,7 @@ static ssize_t config_sync_direct_show(struct > device *dev, >  { >   return test_dev_config_show_bool(buf, test_fw_config- > >sync_direct); >  } > -static DEVICE_ATTR(config_sync_direct, 0644, > config_sync_direct_show, > -    config_sync_direct_store); > +static DEVICE_ATTR_RW(config_sync_direct); >   >  static ssize_t config_send_uevent_store(struct device *dev, >   struct device_attribute > *attr, > @@ -428,8 +426,7 @@ static ssize_t config_send_uevent_show(struct > device *dev, >  { >   return test_dev_config_show_bool(buf, test_fw_config- > >send_uevent); >  } > -static DEVICE_ATTR(config_send_uevent, 0644, > config_send_uevent_show, > -    config_send_uevent_store); > +static DEVICE_ATTR_RW(config_send_uevent); >   >  static ssize_t config_read_fw_idx_store(struct device *dev, >   struct device_attribute > *attr, > @@ -445,8 +442,7 @@ static ssize_t config_read_fw_idx_show(struct > device *dev, >  { >   return test_dev_config_show_u8(buf, test_fw_config- > >read_fw_idx); >  } > -static DEVICE_ATTR(config_read_fw_idx, 0644, > config_read_fw_idx_show, > -    config_read_fw_idx_store); > +static DEVICE_ATTR_RW(config_read_fw_idx); >   >   >  static ssize_t trigger_request_store(struct device *dev, > diff --git a/lib/test_kmod.c b/lib/test_kmod.c > index 337f408b4de6..e372b97eee13 100644 > --- a/lib/test_kmod.c > +++ b/lib/test_kmod.c > @@ -694,8 +694,7 @@ static ssize_t config_test_driver_show(struct > device *dev, >   return config_test_show_str(&test_dev->config_mutex, buf, >       config->test_driver); >  } > -static DEVICE_ATTR(config_test_driver, 0644, > config_test_driver_show, > -    config_test_driver_store); > +static DEVICE_ATTR_RW(config_test_driver); >   >  static ssize_t config_test_fs_store(struct device *dev, >       struct device_attribute *attr, > @@ -726,8 +725,7 @@ static ssize_t config_test_fs_show(struct device > *dev, >   return config_test_show_str(&test_dev->config_mutex, buf, >       config->test_fs); >  } > -static DEVICE_ATTR(config_test_fs, 0644, config_test_fs_show, > -    config_test_fs_store); > +static DEVICE_ATTR_RW(config_test_fs); >   >  static int trigger_config_run_type(struct kmod_test_device > *test_dev, >      enum kmod_test_case test_case, > @@ -1012,8 +1010,7 @@ static ssize_t config_num_threads_show(struct > device *dev, >   >   return test_dev_config_show_int(test_dev, buf, config- > >num_threads); >  } > -static DEVICE_ATTR(config_num_threads, 0644, > config_num_threads_show, > -    config_num_threads_store); > +static DEVICE_ATTR_RW(config_num_threads); >   >  static ssize_t config_test_case_store(struct device *dev, >         struct device_attribute *attr, > @@ -1037,8 +1034,7 @@ static ssize_t config_test_case_show(struct > device *dev, >   >   return test_dev_config_show_uint(test_dev, buf, config- > >test_case); >  } > -static DEVICE_ATTR(config_test_case, 0644, config_test_case_show, > -    config_test_case_store); > +static DEVICE_ATTR_RW(config_test_case); >   >  static ssize_t test_result_show(struct device *dev, >   struct device_attribute *attr, > @@ -1049,7 +1045,7 @@ static ssize_t test_result_show(struct device > *dev, >   >   return test_dev_config_show_int(test_dev, buf, config- > >test_result); >  } > -static DEVICE_ATTR(test_result, 0644, test_result_show, > test_result_store); > +static DEVICE_ATTR_RW(test_result); >   >  #define TEST_KMOD_DEV_ATTR(name) &dev_attr_##name.att > r >   > diff --git a/sound/soc/omap/mcbsp.c b/sound/soc/omap/mcbsp.c > index 7a54e3083203..79d4dc785e5c 100644 > --- a/sound/soc/omap/mcbsp.c > +++ b/sound/soc/omap/mcbsp.c > @@ -854,7 +854,7 @@ static ssize_t dma_op_mode_store(struct device > *dev, >   return size; >  } >   > -static DEVICE_ATTR(dma_op_mode, 0644, dma_op_mode_show, > dma_op_mode_store); > +static DEVICE_ATTR_RW(dma_op_mode); >   >  static const struct attribute *additional_attrs[] = { >   &dev_attr_max_tx_thres.attr, > @@ -923,7 +923,7 @@ static ssize_t st_taps_store(struct device *dev, >   return size; >  } >   > -static DEVICE_ATTR(st_taps, 0644, st_taps_show, st_taps_store); > +static DEVICE_ATTR_RW(st_taps); >   >  static const struct attribute *sidetone_attrs[] = { >   &dev_attr_st_taps.attr,