Layered block device deadlock problem (with example code)

Andy Tai (lichengtai@yahoo.com)
Mon, 11 Mar 2002 02:36:14 -0800 (PST)


--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/