Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Mon, 11 Mar 2002 05:36:33 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Mon, 11 Mar 2002 05:36:25 -0500 Received: from web10503.mail.yahoo.com ([216.136.130.153]:37021 "HELO web10503.mail.yahoo.com") by vger.kernel.org with SMTP id ; Mon, 11 Mar 2002 05:36:16 -0500 Message-ID: <20020311103614.53393.qmail@web10503.mail.yahoo.com> Date: Mon, 11 Mar 2002 02:36:14 -0800 (PST) From: Andy Tai Reply-To: atai@atai.org Subject: Layered block device deadlock problem (with example code) To: linux-kernel@vger.kernel.org Cc: atai@atai.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-2092529281-1015842974=:52661" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --0-2092529281-1015842974=:52661 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, this is a follow up to a previous message about the deadlock problem of a "layered" device. Basically I want to create a virtual device that redirects I/O requests to other real, physcial block devices. This is kind of similar to md or LVM. My particular problem is that I am calling the "f_op->write()" file operations of the physical device within the processing of write requests to the virtual device, and it often locks up during the "write()", often in wait_for_buffer() in buffer.c. I am calling write() in a process context, not in an interrupt context. I know there are tricks to avoid calling "f_op->write()" of the physical device during the request functions of the virtual device, but I would prefer to call "write()" so if possible, so I don't have to worry about the nature of the physical device. The attached file is called layer.c. To compile it into a module, do the following commands: gcc -g -O2 -Wall -Wstrict-prototypes -Wno-trigraphs -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -DMODULE -D__KERNEL__ -DLINUX -I/lib/modules/$(shell uname -r)/build/include layer.c ld -r layer.o -o layered_device.o To insert the module, do insmod ./layered_device.o basedev=/dev/hdd1 size=102400 replace /dev/hdd1 with an empty partiton or file, and 102400 is the size of the virtual device in kbytes. Replace 102400 with your desired size, which should be smaller or equal to the size of the "basedev." I used kernel 2.4.17 with this module. I tried to do operations like mkfs /dev/layered0 mount /dev/layered0 /mnt dd if=/dev/zero of=/mnt/junk bs=1k count=96000 umount /mnt Sometimes the deadlock occurs in mkfs, and other times it occurs in dd or umount. I guess it occurs during file "sync" operations. Thanks for any help and advice on how to solve this deadlock. I really appreciate it! __________________________________________________ Do You Yahoo!? Try FREE Yahoo! Mail - the world's greatest free email! http://mail.yahoo.com/ --0-2092529281-1015842974=:52661 Content-Type: application/octet-stream; name="layer.c" Content-Transfer-Encoding: base64 Content-Description: layer.c Content-Disposition: attachment; filename="layer.c" LyoKICAgCiAgIGJhc2VkIG9uIGNvZGUgZnJvbSAiTGludXggRGV2aWNlCiAg IERyaXZlcnMiIGJ5IEFsZXNzYW5kcm8gUnViaW5pIGFuZCBKb25hdGhhbiBD b3JiZXQsIDJuZCBlZGl0aW9uLCBwdWJsaXNoZWQKICAgYnkgTydSZWlsbHkg JiBBc3NvY2lhdGVzLiAKCiovCgoKI2lmbmRlZiBfX0tFUk5FTF9fCiMgIGRl ZmluZSBfX0tFUk5FTF9fCiNlbmRpZgojaWZuZGVmIE1PRFVMRQojICBkZWZp bmUgTU9EVUxFCiNlbmRpZgoKCiNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4K I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgoKI2luY2x1ZGUgPGxpbnV4L3Nj aGVkLmg+CiNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4gLyogcHJpbnRrKCkg Ki8KI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4gLyoga21hbGxvYygpICovCiNp bmNsdWRlIDxsaW51eC9mcy5oPiAgICAgLyogZXZlcnl0aGluZy4uLiAqLwoj aW5jbHVkZSA8bGludXgvZXJybm8uaD4gIC8qIGVycm9yIGNvZGVzICovCiNp bmNsdWRlIDxsaW51eC90aW1lci5oPgojaW5jbHVkZSA8bGludXgvdHlwZXMu aD4gIC8qIHNpemVfdCAqLwojaW5jbHVkZSA8bGludXgvZmNudGwuaD4gICAg ICAgIC8qIE9fQUNDTU9ERSAqLwojaW5jbHVkZSA8bGludXgvaGRyZWcuaD4g IC8qIEhESU9fR0VUR0VPICovCgojaW5jbHVkZSA8bGludXgvZmlsZS5oPiAg LyogZmlsZSBJL08gb3BlcmF0aW9uIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbiAq LwojaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KI2luY2x1ZGUgPGxpbnV4 L2hpZ2htZW0uaD4KCiNpbmNsdWRlIDxhc20vc3lzdGVtLmg+ICAgLyogY2xp KCksICpfZmxhZ3MgKi8KI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiNpbmNs dWRlIDxhc20vaW8uaD4KI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+CgoKI2Rl ZmluZSBNQUpPUl9OUiBsYXllcmVkX21ham9yIC8qIGZvcmNlIGRlZmluaXRp b25zIG9uIGluIGJsay5oICovCnN0YXRpYyBpbnQgbGF5ZXJlZF9tYWpvcjsv KiBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBpbmNsdWRpbmcgYmxrLmggKi8K CgojZGVmaW5lIERFVklDRV9OUihkZXZpY2UpIE1JTk9SKGRldmljZSkgIC8q IGhhcyBubyBwYXJ0aXRpb24gYml0cyAqLwojZGVmaW5lIERFVklDRV9OQU1F ICJsYXllcmVkIiAgICAgICAgICAgICAgLyogbmFtZSBmb3IgbWVzc2FnaW5n ICovCiNkZWZpbmUgREVWSUNFX0lOVFIgbGF5ZXJlZF9pbnRycHRyICAgICAg ICAvKiBwb2ludGVyIHRvIGJvdHRvbSBoYWxmICovCiNkZWZpbmUgREVWSUNF X05PX1JBTkRPTSAgICAgICAgICAgICAgICAgLyogbm8gZW50cm9weSB0byBj b250cmlidXRlICovCiNkZWZpbmUgREVWSUNFX1JFUVVFU1QgbGF5ZXJlZF9y ZXF1ZXN0CiNkZWZpbmUgREVWSUNFX09GRihkKSAvKiBkby1ub3RoaW5nICov CgojaW5jbHVkZSA8bGludXgvYmxrLmg+CgojaW5jbHVkZSA8bGludXgvaW9j dGwuaD4KCgojaWZkZWYgSEFWRV9CTEtQR19ICiNpbmNsdWRlIDxsaW51eC9i bGtwZy5oPiAgLyogYmxrX2lvY3RsKCkgKi8KI2VuZGlmCiNkZWZpbmUgRE9f UkFXX0lOVEVSRkFDRQojaW5jbHVkZSA8bGludXgvaW9idWYuaD4KCiNkZWZp bmUgTEFZRVJFRF9NQUpPUiAwICAgICAgIC8qIGR5bmFtaWMgbWFqb3IgYnkg ZGVmYXVsdCAqLwojZGVmaW5lIExBWUVSRURfREVWUyAxICAgICAgICAvKiAx IGRpc2sgKi8KI2RlZmluZSBMQVlFUkVEX1JBSEVBRCAyICAgICAgLyogdHdv IHNlY3RvcnMgKi8KI2RlZmluZSBMQVlFUkVEX1NJWkUgMjA0OCAgICAgLyog dHdvIG1lZ3MgZWFjaCAqLwojZGVmaW5lIExBWUVSRURfQkxLU0laRSAxMDI0 ICAvKiAxayBibG9ja3MgKi8KI2RlZmluZSBMQVlFUkVEX0hBUkRTRUNUIDUx MiAgLyogMi4yIGFuZCAyLjQgY2FuIHVzZWQgZGlmZmVyZW50IHZhbHVlcyAq LwoKI2RlZmluZSBMQVlFUkVEUl9NQUpPUiAwICAgICAgLyogRHluYW1pYyBt YWpvciBmb3IgcmF3IGRldmljZSAqLwoKLyoKICogVGhlIGxheWVyZWQgZGV2 aWNlIGlzIHJlbW92YWJsZTogaWYgaXQgaXMgbGVmdCBjbG9zZWQgZm9yIG1v cmUgdGhhbgogKiBoYWxmIGEgbWludXRlLCBpdCBpcyByZW1vdmVkLiBUaHVz IHVzZSBhIHVzYWdlIGNvdW50IGFuZCBhCiAqIGtlcm5lbCB0aW1lcgogKi8K CnR5cGVkZWYgc3RydWN0IGxheWVyZWRfZGV2IHsKICAgaW50IHNpemU7CiAg IGludCB1c2FnZTsKICAgc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAgIHNw aW5sb2NrX3QgbG9jazsKICAgcmVxdWVzdF9xdWV1ZV90IHF1ZXVlOwogICBp bnQgYnVzeTsKCiAgIHN0cnVjdCBmaWxlKiBibG9ja19kZXY7Cgp9ICAgICAg ICAgICAgICBsYXllcmVkX2RldjsKCgojZGVmaW5lIE1BWF9OT19ERVZTIDEw MAoKI2RlZmluZSBMQVlFUkVEUl9TRUNUT1IgNTEyICAvKiBpbnNpc3Qgb24g dGhpcyAqLwojZGVmaW5lIExBWUVSRURSX1NFQ1RPUl9NQVNLIChMQVlFUkVE Ul9TRUNUT1IgLSAxKQojZGVmaW5lIExBWUVSRURSX1NFQ1RPUl9TSElGVCA5 Ci8qCiAqIE5vbi1wcmVmaXhlZCBzeW1ib2xzIGFyZSBzdGF0aWMuIFRoZXkg YXJlIG1lYW50IHRvIGJlIGFzc2lnbmVkIGF0CiAqIGxvYWQgdGltZS4gUHJl Zml4ZWQgc3ltYm9scyBhcmUgbm90IHN0YXRpYywgc28gdGhleSBjYW4gYmUg dXNlZCBpbgogKiBkZWJ1Z2dpbmcuIFRoZXkgYXJlIGhpZGRlbiBhbnl3YXlz IGJ5IHJlZ2lzdGVyX3N5bXRhYigpIHVubGVzcwogKiBMQVlFUkVEX0RFQlVH IGlzIGRlZmluZWQuCiAqLwpzdGF0aWMgaW50IG1ham9yICAgID0gTEFZRVJF RF9NQUpPUjsKc3RhdGljIGludCBkZXZzICAgICA9IExBWUVSRURfREVWUzsK c3RhdGljIGludCByYWhlYWQgICA9IExBWUVSRURfUkFIRUFEOwpzdGF0aWMg aW50IHNpemUgICAgID0gTEFZRVJFRF9TSVpFOwpzdGF0aWMgaW50IGJsa3Np emUgID0gTEFZRVJFRF9CTEtTSVpFOwpzdGF0aWMgaW50IGhhcmRzZWN0ID0g TEFZRVJFRF9IQVJEU0VDVDsKc3RhdGljIGNoYXIgKmJhc2VkZXYgPSAwOwoK TU9EVUxFX1BBUk0obWFqb3IsICJpIik7Ci8qTU9EVUxFX1BBUk0oZGV2cywg ImkiKTsqLwpNT0RVTEVfUEFSTShyYWhlYWQsICJpIik7Ck1PRFVMRV9QQVJN KHNpemUsICJpIik7Ck1PRFVMRV9QQVJNKGJsa3NpemUsICJpIik7Ck1PRFVM RV9QQVJNKGhhcmRzZWN0LCAiaSIpOwoKTU9EVUxFX1BBUk0oYmFzZWRldiwg InMiKTsKTU9EVUxFX0FVVEhPUigiQW5keSBUYWkiKTsKc3RhdGljIHNpemVf dCB3cml0ZShzdHJ1Y3QgZmlsZSogZiwgY29uc3QgY2hhciAqYiwgc2l6ZV90 IHMsIG9mZl90IG8pOwpzdGF0aWMgc2l6ZV90IHJlYWQoc3RydWN0IGZpbGUq IGYsIGNoYXIgKmIsIHNpemVfdCBzLCBvZmZfdCBvKTsKc3RhdGljIHN0cnVj dCBmaWxlICogb3Blbihjb25zdCBjaGFyICosIGludCBmbGFncywgbW9kZV90 IG1vZGUpOwpzdGF0aWMgaW50IGNsb3NlKHN0cnVjdCBmaWxlICpmKTsKCgpp bnQgbGF5ZXJlZF9kZXZzLCBsYXllcmVkX3JhaGVhZCwgbGF5ZXJlZF9zaXpl OwppbnQgbGF5ZXJlZF9ibGtzaXplLCBsYXllcmVkX2hhcmRzZWN0OwoKbGF5 ZXJlZF9kZXYgKmxheWVyZWRfZGV2aWNlcyA9IE5VTEw7CmludCAqbGF5ZXJl ZF9ibGtzaXplcyA9IE5VTEw7CmludCAqbGF5ZXJlZF9zaXplcyA9IE5VTEw7 CmludCAqbGF5ZXJlZF9oYXJkc2VjdHMgPSBOVUxMOwoKCnN0YXRpYyBpbnQg bGF5ZXJlZHJfbWFqb3IgPSBMQVlFUkVEUl9NQUpPUjsKTU9EVUxFX1BBUk0o bGF5ZXJlZHJfbWFqb3IsICJpIik7CgppbnQgbGF5ZXJlZF9vcGVuKHN0cnVj dCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKaW50IGxheWVy ZWRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAq ZmlscCk7CmludCBsYXllcmVkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUs IHN0cnVjdCBmaWxlICpmaWxwLAogICAgICAgICAgICAgICAgdW5zaWduZWQg Y29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmd1bWVudCk7CmludCBsYXllcmVk X2NoZWNrX21lZGlhX2NoYW5nZShrZGV2X3QgZGV2KTsKaW50IGxheWVyZWRf cmV2YWxpZGF0ZShrZGV2X3QgZGV2KTsKCnN0cnVjdCBibG9ja19kZXZpY2Vf b3BlcmF0aW9ucyBsYXllcmVkX2Jkb3BzID0KewogICAgb3BlbjogICAgICAg ICAgICAgICBsYXllcmVkX29wZW4sCiAgICByZWxlYXNlOiAgICAgICAgICAg IGxheWVyZWRfcmVsZWFzZSwKICAgIGlvY3RsOiAgICAgICAgICAgICAgbGF5 ZXJlZF9pb2N0bCwKICAgIGNoZWNrX21lZGlhX2NoYW5nZTogbGF5ZXJlZF9j aGVja19tZWRpYV9jaGFuZ2UsCiAgICByZXZhbGlkYXRlOiAgICAgICAgIGxh eWVyZWRfcmV2YWxpZGF0ZSwKfSA7CgoKaW50IGxheWVyZWRfb3BlbihzdHJ1 Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKewogICAgbGF5 ZXJlZF9kZXYgKmRldjsgLyogZGV2aWNlIGluZm9ybWF0aW9uICovCiAgICBp bnQgbnVtID0gTUlOT1IoaW5vZGUtPmlfcmRldik7CgogICAgcHJpbnRrKEtF Uk5fV0FSTklORyAib3BlbiBsYXllcmVkIGRldmljZSAlZFxuIiwgbnVtKTsg LyogPz8/ICovCiAgICBpZiAobnVtID49IGxheWVyZWRfZGV2cykgcmV0dXJu IC1FTk9ERVY7CiAgICBkZXYgPSBsYXllcmVkX2RldmljZXMgKyBudW07CiAg ICAvKiBraWxsIHRoZSB0aW1lciBhc3NvY2lhdGVkIHRvIHRoZSBkZXZpY2U6 IGl0IG1pZ2h0IGJlIGFjdGl2ZSAqLwogICAgZGVsX3RpbWVyKCZkZXYtPnRp bWVyKTsKCgogICAgc3Bpbl9sb2NrKCZkZXYtPmxvY2spOwogICAgLyogcmV2 YWxpZGF0ZSBvbiBmaXJzdCBvcGVuIGFuZCBmYWlsIGlmIG5vIGRhdGEgaXMg dGhlcmUgKi8KICAgIGlmICghZGV2LT51c2FnZSkgewogICAgICAgIGNoZWNr X2Rpc2tfY2hhbmdlKGlub2RlLT5pX3JkZXYpOwoKICAgIH0KICAgIGRldi0+ dXNhZ2UrKzsKICAgIHNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOwoKICAgIGRl di0+YmxvY2tfZGV2ID0gb3BlbihiYXNlZGV2LE9fUkRXUiB8IE9fTEFSR0VG SUxFICwgMCk7CiAgICBpZiAoISBkZXYtPmJsb2NrX2RldikKICAgIHsKICAg ICAgICBwcmludGsoS0VSTl9FUlIgIm9wZW4gbGF5ZXJlZCBkZXZpY2UgZmFp bGVkIGZvciBkZXZpY2UgJXNcbiIsIGJhc2VkZXYpOyAvKiA/Pz8gKi8KICAg ICAgICByZXR1cm4gLUVJTlZBTDsKICAgIH0KICAgIE1PRF9JTkNfVVNFX0NP VU5UOwogICAgcHJpbnRrKEtFUk5fV0FSTklORyAib3BlbmVkIGxheWVyZWQg ZGV2aWNlICVkIG9uIGJhc2UgZGV2aWNlICVzXG4iLCBudW0sIGJhc2VkZXYp OyAvKiA/Pz8gKi8KICAgIHJldHVybiAwOwp9CgovKgogKiBUaGUgdGltZXIg ZnVuY3Rpb24uIEFzIGFyZ3VtZW50IGl0IHJlY2VpdmVzIHRoZSBkZXZpY2UK ICovCnZvaWQgbGF5ZXJlZF9leHBpcmVzKHVuc2lnbmVkIGxvbmcgZGF0YSkK ewogICAgbGF5ZXJlZF9kZXYgKmRldiA9IChsYXllcmVkX2RldiAqKWRhdGE7 CgogICAgc3Bpbl9sb2NrKCZkZXYtPmxvY2spOwogICAgaWYgKGRldi0+dXNh Z2UgLyp8fCAhZGV2LT4gKi8pIHsKICAgICAgICBzcGluX3VubG9jaygmZGV2 LT5sb2NrKTsKICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJsYXllcmVk OiB0aW1lciBtaXNtYXRjaCBmb3IgZGV2aWNlICVpXG4iLAogICAgICAgICAg ICAgICBkZXYgLSBsYXllcmVkX2RldmljZXMpOwogICAgICAgIHJldHVybjsK ICAgIH0KICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImZyZWVpbmcgZGV2aWNl ICVpXG4iLGRldiAtIGxheWVyZWRfZGV2aWNlcyk7CiAgICBzcGluX3VubG9j aygmZGV2LT5sb2NrKTsKICAgIHJldHVybjsKfSAgICAKCmludCBsYXllcmVk X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZp bHApCnsKICAgIGxheWVyZWRfZGV2ICpkZXYgPSBsYXllcmVkX2RldmljZXMg KyBNSU5PUihpbm9kZS0+aV9yZGV2KTsKICAgIAogICAgY2xvc2UoZGV2LT5i bG9ja19kZXYpOwogICAgCiAgICBzcGluX2xvY2soJmRldi0+bG9jayk7CiAg ICBkZXYtPnVzYWdlLS07CiAgICAvKgogICAgICogSWYgdGhlIGRldmljZSBp cyBjbG9zZWQgZm9yIHRoZSBsYXN0IHRpbWUsIHN0YXJ0IGEgdGltZXIKICAg ICAqIHRvIHJlbGVhc2UgUkFNIGluIGhhbGYgYSBtaW51dGUuIFRoZSBmdW5j dGlvbiBhbmQgYXJndW1lbnQKICAgICAqIGZvciB0aGUgdGltZXIgaGF2ZSBi ZWVuIHNldHVwIGluIGxheWVyZWRfaW5pdCgpCiAgICAgKi8KICAgIGlmICgh ZGV2LT51c2FnZSkgewogICAgICAgIGRldi0+dGltZXIuZXhwaXJlcyA9IGpp ZmZpZXMgKyAzMCAqIEhaOwogICAgICAgIGFkZF90aW1lcigmZGV2LT50aW1l cik7CiAgICAgICAgLyogYnV0IGZsdXNoIGl0IHJpZ2h0IG5vdyAqLwogICAg ICAgIGZzeW5jX2Rldihpbm9kZS0+aV9yZGV2KTsKICAgICAgICBpbnZhbGlk YXRlX2J1ZmZlcnMoaW5vZGUtPmlfcmRldik7CiAgICB9CiAgICBNT0RfREVD X1VTRV9DT1VOVDsKICAgIHNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOwogICAg cmV0dXJuIDA7Cn0KCmludCBsYXllcmVkX2lvY3RsKHN0cnVjdCBpbm9kZSAq aW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAogICAgICAgICAgICAgICAgdW5z aWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKewogICAgaW50IGVycjsK ICAgIGxvbmcgc2l6ZTsKICAgIHN0cnVjdCBoZF9nZW9tZXRyeSBnZW87CiAg ICBwcmludGsoS0VSTl9XQVJOSU5HICJpb2N0bCAweCV4IDB4JWx4XG4iLCBj bWQsIGFyZyk7CiAgICBzd2l0Y2goY21kKSB7CgogICAgICBjYXNlIEJMS0dF VFNJWkU6CiAgICAgICAgLyogUmV0dXJuIHRoZSBkZXZpY2Ugc2l6ZSwgZXhw cmVzc2VkIGluIHNlY3RvcnMgKi8KICAgICAgICBpZiAoIWFyZykgcmV0dXJu IC1FSU5WQUw7IC8qIE5VTEwgcG9pbnRlcjogbm90IHZhbGlkICovCiAgICAg ICAgc2l6ZSA9IGJsa3NpemUqbGF5ZXJlZF9zaXplc1tNSU5PUihpbm9kZS0+ aV9yZGV2KV0KCQkvIGxheWVyZWRfaGFyZHNlY3RzW01JTk9SKGlub2RlLT5p X3JkZXYpXTsKCWlmIChjb3B5X3RvX3VzZXIoKGxvbmcgKikgYXJnLCAmc2l6 ZSwgc2l6ZW9mIChsb25nKSkpCgkgICAgcmV0dXJuIC1FRkFVTFQ7CiAgICAg ICAgcmV0dXJuIDA7CgogICAgICBjYXNlIEJMS1JSUEFSVDogLyogcmUtcmVh ZCBwYXJ0aXRpb24gdGFibGU6IGNhbid0IGRvIGl0ICovCiAgICAgICAgcmV0 dXJuIC1FTk9UVFk7CgogICAgICBjYXNlIEhESU9fR0VUR0VPOgogICAgICAg IC8qCgkgKiBHZXQgZ2VvbWV0cnk6IHNpbmNlIHdlIGFyZSBhIHZpcnR1YWwg ZGV2aWNlLCB3ZSBoYXZlIHRvIG1ha2UKCSAqIHVwIHNvbWV0aGluZyBwbGF1 c2libGUuICBTbyB3ZSBjbGFpbSAxNiBzZWN0b3JzLCBmb3VyIGhlYWRzLAoJ ICogYW5kIGNhbGN1bGF0ZSB0aGUgY29ycmVzcG9uZGluZyBudW1iZXIgb2Yg Y3lsaW5kZXJzLiAgV2Ugc2V0IHRoZQoJICogc3RhcnQgb2YgZGF0YSBhdCBz ZWN0b3IgZm91ci4KICAgICAgICAgKi8KICAgICAgICBlcnIgPSAhIGFjY2Vz c19vayhWRVJJRllfV1JJVEUsIGFyZywgc2l6ZW9mKGdlbykpOwogICAgICAg IGlmIChlcnIpIHJldHVybiAtRUZBVUxUOwogICAgICAgIHNpemUgPSBsYXll cmVkX3NpemUgKiBibGtzaXplIC8gbGF5ZXJlZF9oYXJkc2VjdDsKICAgICAg ICBnZW8uY3lsaW5kZXJzID0gKHNpemUgJiB+MHgzZikgPj4gNjsKCSAgICBn ZW8uaGVhZHMgPSA0OwoJICAgIGdlby5zZWN0b3JzID0gMTY7CgkgICAgZ2Vv LnN0YXJ0ID0gNDsKCSAgICBpZiAoY29weV90b191c2VyKCh2b2lkICopIGFy ZywgJmdlbywgc2l6ZW9mKGdlbykpKQoJICAgIHJldHVybiAtRUZBVUxUOwog ICAgICAgIHJldHVybiAwOwoKICAgICAgZGVmYXVsdDoKICAgICAgICAvKgog ICAgICAgICAqIEZvciBpb2N0bHMgd2UgZG9uJ3QgdW5kZXJzdGFuZCwgbGV0 IHRoZSBibG9jayBsYXllcmVkIGhhbmRsZSB0aGVtLgogICAgICAgICAqLwog ICAgICAgIHJldHVybiBibGtfaW9jdGwoaW5vZGUtPmlfcmRldiwgY21kLCBh cmcpOwogICAgfQogICAgcmV0dXJuIC1FTk9UVFk7IC8qIHVua25vd24gY29t bWFuZCAqLwp9CgppbnQgbGF5ZXJlZF9jaGVja19tZWRpYV9jaGFuZ2Uoa2Rl dl90IGtkZXYpCnsKICAgIGludCBtaW5vciA9IE1JTk9SKGtkZXYpOwoKICAg IGlmIChtaW5vciA+PSBsYXllcmVkX2RldnMpIC8qIHBhcmFub2lkICovIAog ICAgewogICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogICAgcHJpbnRrKEtFUk5fV0FSTklORyAiY2hlY2tfY2hh bmdlIGZvciBkZXYgJWlcbiIsbWlub3IpOwoKICAgIHJldHVybiAwOyAvKiBu ZXZlciBtZWRpYSBjaGFuZ2UgKi8KfQoKaW50IGxheWVyZWRfcmV2YWxpZGF0 ZShrZGV2X3Qga2RldikKewoKICAgIHJldHVybiAwOwp9CgoKCi8qCiAqIEJs b2NrLWRyaXZlciBzcGVjaWZpYyBmdW5jdGlvbnMKICovCgovKgogKiBGaW5k IHRoZSBkZXZpY2UgZm9yIHRoaXMgcmVxdWVzdC4KICovCnN0YXRpYyBsYXll cmVkX2RldiAqbGF5ZXJlZF9sb2NhdGVfZGV2aWNlKGNvbnN0IHN0cnVjdCBy ZXF1ZXN0ICpyZXEpCnsKICAgIGludCBkZXZubzsKICAgIGxheWVyZWRfZGV2 ICpkZXZpY2U7CgogICAgLyogQ2hlY2sgaWYgdGhlIG1pbm9yIG51bWJlciBp cyBpbiByYW5nZSAqLwogICAgZGV2bm8gPSBERVZJQ0VfTlIocmVxLT5ycV9k ZXYpOwogICAgaWYgKGRldm5vID49IGxheWVyZWRfZGV2cykgewogICAgICAg IHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgICAgIGlmIChjb3VudCsrIDwg NSkgLyogcHJpbnQgdGhlIG1lc3NhZ2UgYXQgbW9zdCBmaXZlIHRpbWVzICov CiAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImxheWVyZWQ6IHJl cXVlc3QgZm9yIHVua25vd24gZGV2aWNlXG4iKTsKICAgICAgICByZXR1cm4g TlVMTDsKICAgIH0KICAgIGRldmljZSA9IGxheWVyZWRfZGV2aWNlcyArIGRl dm5vOyAgLyogUGljayBpdCBvdXQgb2Ygb3VyIGRldmljZSBhcnJheSAqLwog ICAgcmV0dXJuIGRldmljZTsKCn0KCgpzdHJ1Y3QgcndfdGFzawp7CiAgICBz cGlubG9ja190IGxvY2s7CiAgICBpbnQgYnVzeTsKICAgIGludCBydzsKICAg IHN0cnVjdCBmaWxlICpiazs7CiAgICB2b2lkICpiOyAvKiBidWZmZXIgKi8K ICAgIHNpemVfdCBzOyAvKiBzaXplICovCiAgICBvZmZfdCBvOyAvKiBiZWdp bm5pbmcgb2Zmc2V0ICovCiAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwp9 IG5leHRfdGFzazsKCnN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChs YXllcmVkX3J3X3dhaXQpOwpzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hF QUQobGF5ZXJlZF9yd19ub3RidXN5X3dhaXQpOwoKc3RhdGljIHZvaWQgZG9f bGF5ZXJlZF9ydyhzdHJ1Y3QgcndfdGFzayAqcHRyKQp7CiAgICBzaXplX3Qg ciA9IDE7CiAgICAKICAgIHNwaW5fbG9jaygmIHB0ci0+bG9jayk7CiAgICBp ZiAocHRyLT5idXN5ID09IDApCiAgICB7CiAgICAgICAgcHJpbnRrKEtFUk5f RVJSICJIb3cgY2FuIG5leHRfdGFzayBiZSBub24tYnVzeT9cbiIpOyAgICAg CiAgICAgICAgc3Bpbl91bmxvY2soJiBwdHItPmxvY2spOwogICAgICAgIHJl dHVybjsKICAgIH0KICAgIHNwaW5fdW5sb2NrKCYgcHRyLT5sb2NrKTsKICAg ICAKICAgIGlmIChyKQogICAgeyAgICAKICAgICAgIAogICAgICAgIHN3aXRj aChwdHItPnJ3KQogICAgICAgIHsKICAgICAgICBjYXNlIFJFQUQ6CiAgICAg ICAgICAgIHIgPSByZWFkKHB0ci0+YmssIHB0ci0+YiwgcHRyLT5zLCBwdHIt Pm8pOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFdSSVRFOgog ICAgICAgICAgICByZWZpbGVfYnVmZmVyKHB0ci0+YmgpOwogICAgICAgICAg ICByID0gd3JpdGUocHRyLT5iaywgcHRyLT5iLCBwdHItPnMsIHB0ci0+byk7 CiAgICAgICAgICAgIG1hcmtfYnVmZmVyX3VwdG9kYXRlKHB0ci0+YmgsIDEp OwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICBpZiAo cHRyLT5iaCkKICAgIHsKICAgICAgICBpZiAocikKICAgICAgICAgICAgcHRy LT5iaC0+Yl9lbmRfaW8ocHRyLT5iaCwgMSk7CiAgICAgICAgZWxzZQogICAg ICAgICAgICBwdHItPmJoLT5iX2VuZF9pbyhwdHItPmJoLCAwKTsKICAgICAg ICBzcGluX2xvY2tfaXJxKCYgcHRyLT5sb2NrKTsKICAgICAgICBwdHItPmJ1 c3kgPSAwOwogICAgICAgIHNwaW5fdW5sb2NrX2lycSgmIHB0ci0+bG9jayk7 CiAgICB9CiAgICB3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZsYXllcmVk X3J3X25vdGJ1c3lfd2FpdCk7CiAgICAgCn0KCnN0YXRpYyBpbnQgcndfdGhy ZWFkX3BpZCA9IDA7CnN0YXRpYyBERUNMQVJFX01VVEVYKHJ3X3RocmVhZF9z dGFydGVkKTsKc3RhdGljIERFQ0xBUkVfTVVURVgocndfdGhyZWFkX2V4aXRl ZCk7CnN0YXRpYyBzdHJ1Y3QgdHFfc3RydWN0IHRxOwpzdGF0aWMgdm9pZCBs YXllcmVkX3J3X3RocmVhZCh2b2lkICphcmcpCnsKICAgCiAgICByd190aHJl YWRfcGlkID0gY3VycmVudC0+cGlkOwogICAgZGFlbW9uaXplKCk7CiAgICBz cGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdtYXNrX2xvY2spOwogICAgc2ln aW5pdHNldGludigmY3VycmVudC0+YmxvY2tlZCwgc2lnbWFzayhTSUdRVUlU KSk7CiAgICBzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ21hc2tfbG9j ayk7CiAgICB1cCgmcndfdGhyZWFkX3N0YXJ0ZWQpOwogICAgZm9yICg7OykK ICAgIHsKICAgICAgIAogICAgICAgIGN1cnJlbnQtPm5pY2UgPSAtNTsgICAK ICAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobGF5ZXJlZF9yd193 YWl0LCBuZXh0X3Rhc2suYnVzeSk7CiAgICAgICAgY3VycmVudC0+bmljZSA9 IC01OyAgIAogICAgICAgIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkK ICAgICAgICB7CiAgICAgICAgICAgIGlmIChjdXJyZW50LT5zaWdwZW5kaW5n ICYgc2lnbWFzayhTSUdRVUlUKSkKICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgICBkb19sYXllcmVkX3J3KCZuZXh0 X3Rhc2spOwogICAgfQogICAgdXAoJnJ3X3RocmVhZF9leGl0ZWQpOyAKICAg IGxvY2tfa2VybmVsKCk7Cn0KICAgICAgICAgICAgCnN0YXRpYyB2b2lkIHN0 YXJ0X3J3X3RocmVhZCh2b2lkICphcmcpCnsKICAgIGtlcm5lbF90aHJlYWQo bGF5ZXJlZF9yd190aHJlYWQsIGFyZywgMCk7CiAgICBkb3duKCZyd190aHJl YWRfc3RhcnRlZCk7Cn0KCi8qCiAqIFRyYW5zZmVyIGEgYnVmZmVyIGRpcmVj dGx5LCB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIHJlcXVlc3QgcXVldWUu CiAqLwppbnQgbGF5ZXJlZF9tYWtlX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90 ICpxdWV1ZSwgaW50IHJ3LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQp7CiAg ICAvKnU4ICpwdHI7Ki8KCiAgICAvKiBGaWd1cmUgb3V0IHdoYXQgd2UgYXJl IGRvaW5nICovCiAgICBsYXllcmVkX2RldiAqZGV2aWNlIDsKICAgIAogICAg ZGV2aWNlID0gbGF5ZXJlZF9kZXZpY2VzICsgTUlOT1IoYmgtPmJfcmRldik7 CiAgICAvKnB0ciA9IGRldmljZS0+ZGF0YSArIGJoLT5iX3JzZWN0b3IgKiBs YXllcmVkX2hhcmRzZWN0OyovCgogICAgLyogUGFyYW5vaWQgY2hlY2ssIHRo aXMgYXBwYXJlbnRseSBjYW4gcmVhbGx5IGhhcHBlbiAqLwoKICAgIGlmIChi aC0+Yl9yc2VjdG9yICogbGF5ZXJlZF9oYXJkc2VjdCArIGJoLT5iX3NpemUg PiBsYXllcmVkX2Jsa3NpemUqbGF5ZXJlZF9zaXplKSB7CiAgICAgICAgcHJp bnRrKEtFUk5fV0FSTklORyAibGF5ZXJlZDogcmVxdWVzdCBwYXN0IGVuZCBv ZiBkZXZpY2VcbiIpOwogICAgICAgIHJldHVybiAwOwogICAgfQogICAgLyog VGhpcyBjb3VsZCBiZSBhIGhpZ2ggbWVtb3J5IGJ1ZmZlciwgc2hpZnQgaXQg ZG93biAqLwojaWYgQ09ORklHX0hJR0hNRU0KICAgIGJoID0gY3JlYXRlX2Jv dW5jZShydywgYmgpOwojZW5kaWYKCiNpZiAwCiAgICB7CiAgICAgICAgc3Ry dWN0IGZpbGUgKmYgPSAoc3RydWN0IGZpbGUqKShkZXZpY2UtPmJsb2NrX2Rl dik7CiAgICAgICAKICAgICAgICBiaC0+Yl9yZGV2ID0gZi0+Zl9kZW50cnkt PmRfaW5vZGUtPmlfcmRldjsKCiAgICAgICAgcmV0dXJuIDE7CiAgICAgICAg CiAgICB9CiNlbmRpZiAgIAogICAgCiAgICAvKiBzY2hlZHVsZSB0aGUgdHJh bnNmZXIgKi8KICAgIHNwaW5fbG9jaygmIG5leHRfdGFzay5sb2NrKTsKICAg IGlmIChuZXh0X3Rhc2suYnVzeSkKICAgIHsKICAgICAgICBzcGluX3VubG9j aygmIG5leHRfdGFzay5sb2NrKTsKICAgICAgICB3YWl0X2V2ZW50X2ludGVy cnVwdGlibGUobGF5ZXJlZF9yd19ub3RidXN5X3dhaXQsICEgbmV4dF90YXNr LmJ1c3kpOwogICAgICAgIHNwaW5fbG9jaygmIG5leHRfdGFzay5sb2NrKTsK CiAgICB9CgogICAgbmV4dF90YXNrLmJ1c3kgPSAxOwoKICAgIG5leHRfdGFz ay5ydyA9IHJ3OwogICAgbmV4dF90YXNrLmJrID0gZGV2aWNlLT5ibG9ja19k ZXY7CiAgICBuZXh0X3Rhc2subyA9IGJoLT5iX3JzZWN0b3IgKiBsYXllcmVk X2hhcmRzZWN0OwogICAgbmV4dF90YXNrLnMgPSBiaC0+Yl9zaXplOwogICAg bmV4dF90YXNrLmIgPSBiaC0+Yl9kYXRhOwogICAgbmV4dF90YXNrLmJoID0g Ymg7CgogICAgc3Bpbl91bmxvY2soJiBuZXh0X3Rhc2subG9jayk7CiAgICB3 YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZsYXllcmVkX3J3X3dhaXQpOwoK ICAgIHJldHVybiAwOwp9CgoKdm9pZCBsYXllcmVkX3VudXNlZF9yZXF1ZXN0 KHJlcXVlc3RfcXVldWVfdCAqcSkKewogICAgc3RhdGljIGludCBjb3VudCA9 IDA7CiAgICBpZiAoY291bnQrKyA8IDUpCiAgICAgICAgcHJpbnRrKEtFUk5f V0FSTklORyAibGF5ZXJlZDogdW51c2VkX3JlcXVlc3QgY2FsbGVkXG4iKTsK fQogICAgICAgIAovKgogKiBDbGVhbiB1cCB0aGlzIHJlcXVlc3QuCiAqLwpp bnQgbGF5ZXJlZF9lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBp bnQgc3RhdHVzKQp7CiAgICBpZiAoZW5kX3RoYXRfcmVxdWVzdF9maXJzdChy ZXEsIHN0YXR1cywgREVWSUNFX05BTUUpKQogICAgICAgIHJldHVybiAxOwog ICAgZW5kX3RoYXRfcmVxdWVzdF9sYXN0KHJlcSk7CiAgICByZXR1cm4gMDsK fQoKCgoKCi8qIEluaXRpYWxpemUgdGhlIG1vZHVsZSAqLwppbnQgaW5pdF9s YXllcmVkKHZvaWQpCnsKICAgIGludCByZXN1bHQsIGk7CiAgICAvKgogICAg ICogQ29weSB0aGUgKHN0YXRpYykgY2ZnIHZhcmlhYmxlcyB0byBwdWJsaWMg cHJlZml4ZWQgb25lcyB0byBhbGxvdwogICAgICogc25vb3ppbmcgd2l0aCBh IGRlYnVnZ2VyLgogICAgICovCgogICAgbGF5ZXJlZF9tYWpvciAgICA9IG1h am9yOwogICAgbGF5ZXJlZF9kZXZzICAgICA9IGRldnM7CiAgICBsYXllcmVk X3JhaGVhZCAgID0gcmFoZWFkOwogICAgbGF5ZXJlZF9zaXplICAgICA9IHNp emU7CiAgICBsYXllcmVkX2Jsa3NpemUgID0gYmxrc2l6ZTsKICAgIGxheWVy ZWRfaGFyZHNlY3QgPSBoYXJkc2VjdDsKICAgIAoKICAgIGlmIChiYXNlZGV2 ID09IDApCiAgICB7CiAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiTm8g YmFzZSBkZXZpY2Ugc3BlY2lmaWVkID8/P1xuIik7CiAgICAgICAgcmVzdWx0 ID0gLUVJTlZBTDsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAg CiAgICBwcmludGsoS0VSTl9XQVJOSU5HICJkZXZpY2U6ICVzXG4iLCBiYXNl ZGV2KTsKICAgIGxheWVyZWRfZGV2cyA9IDE7ICAgIAogICAgLyoKICAgICAq IFJlZ2lzdGVyIHlvdXIgbWFqb3IsIGFuZCBhY2NlcHQgYSBkeW5hbWljIG51 bWJlcgogICAgICovCiAgICByZXN1bHQgPSByZWdpc3Rlcl9ibGtkZXYobGF5 ZXJlZF9tYWpvciwgImxheWVyZWQiLCAmbGF5ZXJlZF9iZG9wcyk7CiAgICBp ZiAocmVzdWx0IDwgMCkgewogICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcg ImxheWVyZWQ6IGNhbid0IGdldCBtYWpvciAlZFxuIixsYXllcmVkX21ham9y KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgaWYgKGxheWVy ZWRfbWFqb3IgPT0gMCkgbGF5ZXJlZF9tYWpvciA9IHJlc3VsdDsgLyogZHlu YW1pYyAqLwogICAgbWFqb3IgPSBsYXllcmVkX21ham9yOyAvKiBVc2UgYG1h am9yJyBsYXRlciBvbiB0byBzYXZlIHR5cGluZyAqLwoKICAgIHByaW50ayhL RVJOX1dBUk5JTkcgImxheWVyZWQ6IG1ham9yIG51bWJlciBpcyAlZFxuIixs YXllcmVkX21ham9yKTsgLyogPz8/ICovCiAgICAvKgogICAgICogQXNzaWdu IHRoZSBvdGhlciBuZWVkZWQgdmFsdWVzOiByZXF1ZXN0LCByYWhlYWQsIHNp emUsIGJsa3NpemUsCiAgICAgKiBoYXJkc2VjdC4gQWxsIHRoZSBtaW5vciBk ZXZpY2VzIGZlYXR1cmUgdGhlIHNhbWUgdmFsdWUuCiAgICAgKiBOb3RlIHRo YXQgYGxheWVyZWQnIGRlZmluZXMgYWxsIG9mIHRoZW0gdG8gYWxsb3cgdGVz dGluZyBub24tZGVmYXVsdAogICAgICogdmFsdWVzLiBBIHJlYWwgZGV2aWNl IGNvdWxkIHdlbGwgYXZvaWQgc2V0dGluZyB2YWx1ZXMgaW4gZ2xvYmFsCiAg ICAgKiBhcnJheXMgaWYgaXQgdXNlcyB0aGUgZGVmYXVsdCB2YWx1ZXMuCiAg ICAgKi8KCiAgICByZWFkX2FoZWFkW21ham9yXSA9IGxheWVyZWRfcmFoZWFk OwogICAgcmVzdWx0ID0gLUVOT01FTTsgLyogZm9yIHRoZSBwb3NzaWJsZSBl cnJvcnMgKi8KCiAgICBsYXllcmVkX3NpemVzID0ga21hbGxvYyhsYXllcmVk X2RldnMgKiBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CiAgICBpZiAoIWxh eWVyZWRfc2l6ZXMpCiAgICAgICAgZ290byBmYWlsX21hbGxvYzsKICAgIGZv ciAoaT0wOyBpIDwgbGF5ZXJlZF9kZXZzOyBpKyspIC8qIGFsbCB0aGUgc2Ft ZSBzaXplICovCiAgICAgICAgbGF5ZXJlZF9zaXplc1tpXSA9IGxheWVyZWRf c2l6ZTsKICAgIGJsa19zaXplW21ham9yXT1sYXllcmVkX3NpemVzOwoKICAg IGxheWVyZWRfYmxrc2l6ZXMgPSBrbWFsbG9jKGxheWVyZWRfZGV2cyAqIHNp emVvZihpbnQpLCBHRlBfS0VSTkVMKTsKICAgIGlmICghbGF5ZXJlZF9ibGtz aXplcykKICAgICAgICBnb3RvIGZhaWxfbWFsbG9jOwogICAgZm9yIChpPTA7 IGkgPCBsYXllcmVkX2RldnM7IGkrKykgLyogYWxsIHRoZSBzYW1lIGJsb2Nr c2l6ZSAqLwogICAgICAgIGxheWVyZWRfYmxrc2l6ZXNbaV0gPSBsYXllcmVk X2Jsa3NpemU7CiAgICBibGtzaXplX3NpemVbbWFqb3JdPWxheWVyZWRfYmxr c2l6ZXM7CgogICAgbGF5ZXJlZF9oYXJkc2VjdHMgPSBrbWFsbG9jKGxheWVy ZWRfZGV2cyAqIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKICAgIGlmICgh bGF5ZXJlZF9oYXJkc2VjdHMpCiAgICAgICAgZ290byBmYWlsX21hbGxvYzsK ICAgIGZvciAoaT0wOyBpIDwgbGF5ZXJlZF9kZXZzOyBpKyspIC8qIGFsbCB0 aGUgc2FtZSBoYXJkc2VjdCAqLwogICAgICAgIGxheWVyZWRfaGFyZHNlY3Rz W2ldID0gbGF5ZXJlZF9oYXJkc2VjdDsKICAgIGhhcmRzZWN0X3NpemVbbWFq b3JdPWxheWVyZWRfaGFyZHNlY3RzOwoKICAgIC8qIAogICAgICogYWxsb2Nh dGUgdGhlIGRldmljZXMgLS0gd2UgY2FuJ3QgaGF2ZSB0aGVtIHN0YXRpYywg YXMgdGhlIG51bWJlcgogICAgICogY2FuIGJlIHNwZWNpZmllZCBhdCBsb2Fk IHRpbWUKICAgICAqLwoKICAgIGxheWVyZWRfZGV2aWNlcyA9IGttYWxsb2Mo bGF5ZXJlZF9kZXZzICogc2l6ZW9mIChsYXllcmVkX2RldiksIEdGUF9LRVJO RUwpOwogICAgaWYgKCFsYXllcmVkX2RldmljZXMpCiAgICAgICAgZ290byBm YWlsX21hbGxvYzsKICAgIG1lbXNldChsYXllcmVkX2RldmljZXMsIDAsIGxh eWVyZWRfZGV2cyAqIHNpemVvZiAobGF5ZXJlZF9kZXYpKTsKICAgIGZvciAo aT0wOyBpIDwgbGF5ZXJlZF9kZXZzOyBpKyspIHsKICAgICAgICAvKiBkYXRh IGFuZCB1c2FnZSByZW1haW4gemVyb2VkICovCiAgICAgICAgbGF5ZXJlZF9k ZXZpY2VzW2ldLnNpemUgPSAxMDI0ICogbGF5ZXJlZF9zaXplOwogICAgICAg IGluaXRfdGltZXIoJihsYXllcmVkX2RldmljZXNbaV0udGltZXIpKTsKICAg ICAgICBsYXllcmVkX2RldmljZXNbaV0udGltZXIuZGF0YSA9ICh1bnNpZ25l ZCBsb25nKShsYXllcmVkX2RldmljZXMraSk7CiAgICAgICAgbGF5ZXJlZF9k ZXZpY2VzW2ldLnRpbWVyLmZ1bmN0aW9uID0gbGF5ZXJlZF9leHBpcmVzOwog ICAgICAgIHNwaW5fbG9ja19pbml0KCZsYXllcmVkX2RldmljZXNbaV0ubG9j ayk7CiAgICB9CgogICAgYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChCTEtfREVG QVVMVF9RVUVVRShtYWpvciksIGxheWVyZWRfbWFrZV9yZXF1ZXN0KTsgICAg ICAgIAogICAgCiAgICAvKiBBIG5vLW9wIGluIDIuNC4wLCBidXQgYWxsIGRy aXZlcnMgc2VlbSB0byBkbyBpdCBhbnl3YXkgKi8KICAgIGZvciAoaSA9IDA7 IGkgPCBsYXllcmVkX2RldnM7IGkrKykKICAgICAgICAgICAgcmVnaXN0ZXJf ZGlzayhOVUxMLCBNS0RFVihtYWpvciwgaSksIDEsICZsYXllcmVkX2Jkb3Bz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJlZF9zaXplIDw8 IDEpOwoKICAgIHByaW50ayAoIjwxPmxheWVyZWQ6IGluaXQgY29tcGxldGUs ICVkIGRldnMsIHNpemUgJWQgYmxrcyAlZCBocyAlZFxuIiwKICAgICAgICAg ICAgICAgICAgICBsYXllcmVkX2RldnMsIGxheWVyZWRfc2l6ZSwgbGF5ZXJl ZF9ibGtzaXplLCBsYXllcmVkX2hhcmRzZWN0KTsKIAogICAgLyogSWYgd2Ug cmV0dXJuIGEgbm9uIHplcm8gdmFsdWUsIGl0IG1lYW5zIHRoYXQgCiAgICAg KiBpbml0X21vZHVsZSBmYWlsZWQgYW5kIHRoZSBrZXJuZWwgbW9kdWxlIAog ICAgICogY2FuJ3QgYmUgbG9hZGVkICovCgogICAgbWVtc2V0KCZuZXh0X3Rh c2ssIDAsIHNpemVvZihuZXh0X3Rhc2spKTsgCiAgICBzcGluX2xvY2tfaW5p dCgmIG5leHRfdGFzay5sb2NrKTsKICAgIHRxLnN5bmMgPSAwOwogICAgdHEu cm91dGluZSA9IHN0YXJ0X3J3X3RocmVhZDsKICAgIHRxLmRhdGEgPSAwOwog ICAgc2NoZWR1bGVfdGFzaygmdHEpOwogICAgcmV0dXJuIDA7CgpmYWlsX21h bGxvYzoKICAgIHJlYWRfYWhlYWRbbWFqb3JdID0gMDsKICAgIGlmIChsYXll cmVkX3NpemVzKSBrZnJlZShsYXllcmVkX3NpemVzKTsKICAgIGJsa19zaXpl W21ham9yXSA9IE5VTEw7CiAgICBpZiAobGF5ZXJlZF9ibGtzaXplcykga2Zy ZWUobGF5ZXJlZF9ibGtzaXplcyk7CiAgICBibGtzaXplX3NpemVbbWFqb3Jd ID0gTlVMTDsKICAgIGlmIChsYXllcmVkX2hhcmRzZWN0cykga2ZyZWUobGF5 ZXJlZF9oYXJkc2VjdHMpOwogICAgaGFyZHNlY3Rfc2l6ZVttYWpvcl0gPSBO VUxMOwogICAgaWYgKGxheWVyZWRfZGV2aWNlcykga2ZyZWUobGF5ZXJlZF9k ZXZpY2VzKTsKCiAgICB1bnJlZ2lzdGVyX2Jsa2RldihtYWpvciwgImxheWVy ZWQiKTsKICAgIHJldHVybiByZXN1bHQ7Cn0KCgovKiBDbGVhbnVwIC0gdW5k aWQgd2hhdGV2ZXIgaW5pdF9tb2R1bGUgZGlkICovCnZvaWQgZXhpdF9sYXll cmVkKHZvaWQpCnsKICAgIGludCBpOwoKICAgIGlmIChyd190aHJlYWRfcGlk KQogICAgewoKCSAgICBsb2NrX2tlcm5lbCgpOwogICAgICAgIGtpbGxfcHJv Yyhyd190aHJlYWRfcGlkLCBTSUdRVUlULCAxKTsKCQkgICAgCiAgICAgICAg ZG93bigmcndfdGhyZWFkX2V4aXRlZCk7CgkgICAgdW5sb2NrX2tlcm5lbCgp OwoJICAgIGtpbGxfcHJvYygyLCBTSUdDSExELCAxKTs7CiAgICB9CgovKgog KiBCZWZvcmUgYW55dGhpbmcgZWxzZSwgZ2V0IHJpZCBvZiB0aGUgdGltZXIg ZnVuY3Rpb25zLiAgU2V0IHRoZSAidXNhZ2UiCiAqIGZsYWcgb24gZWFjaCBk ZXZpY2UgYXMgd2VsbCwgdW5kZXIgbG9jaywgc28gdGhhdCBpZiB0aGUgdGlt ZXIgZmlyZXMgdXAKICoganVzdCBiZWZvcmUgd2UgZGVsZXRlIGl0LCBpdCB3 aWxsIGVpdGhlciBjb21wbGV0ZSBvciBhYm9ydC4gIE90aGVyd2lzZQogKiB3 ZSBoYXZlIG5hc3R5IHJhY2UgY29uZGl0aW9ucyB0byB3b3JyeSBhYm91dC4K ICovCiAgICBmb3IgKGkgPSAwOyBpIDwgbGF5ZXJlZF9kZXZzOyBpKyspIHsK ICAgICAgICBsYXllcmVkX2RldiAqZGV2ID0gbGF5ZXJlZF9kZXZpY2VzICsg aTsKICAgICAgICBkZWxfdGltZXIoJmRldi0+dGltZXIpOwogICAgICAgIHNw aW5fbG9jaygmZGV2LT5sb2NrKTsKICAgICAgICBkZXYtPnVzYWdlKys7CiAg ICAgICAgc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CiAgICB9CgogICAgCiAg ICAvKiBmbHVzaCBpdCBhbGwgYW5kIHJlc2V0IGFsbCB0aGUgZGF0YSBzdHJ1 Y3R1cmVzICovCgoKICAgIGZvciAoaT0wOyBpPGxheWVyZWRfZGV2czsgaSsr KQogICAgICAgIGZzeW5jX2RldihNS0RFVihsYXllcmVkX21ham9yLCBpKSk7 IC8qIGZsdXNoIHRoZSBkZXZpY2VzICovCiAgICB1bnJlZ2lzdGVyX2Jsa2Rl dihtYWpvciwgImxheWVyZWQiKTsKIAogICAgLyogQ2xlYW4gdXAgdGhlIGds b2JhbCBhcnJheXMgKi8KICAgIHJlYWRfYWhlYWRbbWFqb3JdID0gMDsKICAg IGtmcmVlKGJsa19zaXplW21ham9yXSk7CiAgICBibGtfc2l6ZVttYWpvcl0g PSBOVUxMOwogICAga2ZyZWUoYmxrc2l6ZV9zaXplW21ham9yXSk7CiAgICBi bGtzaXplX3NpemVbbWFqb3JdID0gTlVMTDsKICAgIGtmcmVlKGhhcmRzZWN0 X3NpemVbbWFqb3JdKTsKICAgIGhhcmRzZWN0X3NpemVbbWFqb3JdID0gTlVM TDsKICAgIC8qIEZJWE1FOiBtYXhfcmVhZGFoZWFkIGFuZCBtYXhfc2VjdG9y cyAqLyAKCgogICAga2ZyZWUobGF5ZXJlZF9kZXZpY2VzKTsKICAgCn0KCgpz dGF0aWMgc3RydWN0IGZpbGUgKiBvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGlu dCBmbGFncywgbW9kZV90IG1vZGUpCnsgLyogd2UgYXNzdW1lIHBhdGggaXMg aW4ga2VybmVsIHNwYWNlICEhISEgKi8KCiAgICBpbnQgaTsKICAgIHN0cnVj dCBmaWxlICpmID0gMDsKICAgCiAgICAKCWYgPSBmaWxwX29wZW4ocGF0aCwg ZmxhZ3MsIG1vZGUpOwoJaSA9IFBUUl9FUlIoZik7CglpZiAoSVNfRVJSKGYp KQoJewogICAgICAgICAKICAgICAgICAgICAgcmV0dXJuICh2b2lkKikgMDsK CX0gICAgCiAgICAKICAgIHJldHVybiBmOwp9CgpzdGF0aWMgaW50IGNsb3Nl KHN0cnVjdCBmaWxlICogZmQpCnsKICAgIGZpbHBfY2xvc2UoZmQsIDApOwog ICAgcmV0dXJuIDA7Cn0KCgoKc3RhdGljIHNpemVfdCByZWFkKHN0cnVjdCBm aWxlICogZiwgY2hhciAqYiwgc2l6ZV90IHMsIG9mZl90IG8pCnsKICAgIGxv ZmZfdCBwb3M7CiAgICBpbnQgaTsKICAgIG1tX3NlZ21lbnRfdCBmczsKICAg IHNpemVfdCByID0gMDsKICAgIGlmICghKGYpKQogICAgewogICAgICAgIHJl dHVybiAtRUJBREY7CiAgICB9CiAgICBpID0gUFRSX0VSUihmKTsKICAgIGlm IChJU19FUlIoZikpCiAgICB7CiAgICAgICAgcmV0dXJuIGk7CiAgICB9Cgog ICAgaWYgKCEoZi0+Zl9vcCkpCiAgICB7CgogICAgICAgIHByaW50ayhLRVJO X0VSUiAiZmlsZSBvcGVyYXRpb24gdGFibGUgbWlzc2luZ1xuIik7CiAgICAg ICAgcmV0dXJuIC1FSU5WQUw7CiAgICB9CgogICAgcG9zID0gZi0+Zl9wb3Mg PSBvOwogICAgZnMgPSBnZXRfZnMoKTsKICAgIHNldF9mcyhnZXRfZHMoKSk7 CiAgICByID0gZi0+Zl9vcC0+cmVhZChmLCAoY2hhciAqKSBiLCBzLCAmcG9z KTsKICAgIHNldF9mcyhmcyk7CgogICAgcmV0dXJuIHI7Cn0KCnN0YXRpYyBz aXplX3Qgd3JpdGUoc3RydWN0IGZpbGUgKiBmLCBjb25zdCBjaGFyICpiLCBz aXplX3Qgcywgb2ZmX3QgbykKewogICAgaW50IGkgOwogICAgbG9mZl90IHBv czsKICAgIG1tX3NlZ21lbnRfdCBmczsKCiAgICBzaXplX3QgciA9IDA7CiAg ICBpZiAoIShmKSkKICAgIHsKICAgICAgICByZXR1cm4gLUVCQURGOwogICAg fQogICAgaSA9IFBUUl9FUlIoZik7CiAgICBpZiAoSVNfRVJSKGYpKQogICAg ewogICAgICAgIHJldHVybiBpOwogICAgfQoKICAgIHBvcyA9IGYtPmZfcG9z ID0gbzsKICAgIGZzID0gZ2V0X2ZzKCk7CnByaW50aygiPDE+IHB3cml0ZTY0 IDNcbiIpOwogICAgc2V0X2ZzKGdldF9kcygpKTsKcHJpbnRrKCI8MT4gcHdy aXRlNjQgNFxuIik7CiAgICByID0gZi0+Zl9vcC0+d3JpdGUoZiwgKGNvbnN0 IGNoYXIgKikgYiwgcywgJnBvcyk7CnByaW50aygiPDE+IHB3cml0ZTY0IDVc biIpOwogICAgc2V0X2ZzKGZzKTsKcHJpbnRrKCI8MT4gcHdyaXRlNjQgNlxu Iik7CgogICAgLy9mc3luY19kZXYoZi0+Zl9kZW50cnktPmRfaW5vZGUtPmlf cmRldik7ICAgIAogICAgcmV0dXJuIHI7Cn0KCgoKbW9kdWxlX2luaXQoaW5p dF9sYXllcmVkKQptb2R1bGVfZXhpdChleGl0X2xheWVyZWQpCgo= --0-2092529281-1015842974=:52661-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/