[PATCH] Select speed ups

Mike Jagdis (mike@roan.co.uk)
Wed, 18 Aug 1999 12:11:31 +0100 (GMT/BST)


--279709697-1923193217-934974691=:2205
Content-Type: TEXT/PLAIN; charset=US-ASCII

Apparently select() is too slow. So I made it faster :-).

Firstly I rewrote the stuff in fs/select.c. This speeds up
the set up and non-blocking cases. Secondly I removed the
scans of the fd sets after blocking and only recheck the
descriptors that have been woken. The bigger your fd sets,
the more you gain. In the 1024 bits with one or two fds waking
at once case you can be looking towards an order of magnitude
less time in select!

The way this is done is to extend wait queue slightly (and
hopefully acceptably) so that when a wake up happens the queue
entry can optionally be placed on a specified "event" queue
(or even just flagged as triggered). The select code uses this
to find out which wait queue entries have been woken.

I originally conceived the wait queue change as a way of
allowing the synchronous wait-sleep-wake to be used for
asynchronous wait-do something else-handle event with a view
to using it for lightweight, thread free AIO but then I saw
some of the proposals for select speed ups that involved lots
of driver changes, back reference lists etc...

I had hoped to put pretty graphs etc. on the web but haven't
had chance yet. However, since Linus is pushing for a pre-2.4
freeze I'd like this to at least have a chance of making the
next kernel release. Please play with it. Especially if you
have a non-Intel machine or processes that do a lot of selecting.

Constructive criticism to mike@roan.co.uk (or, if that is
broken *again*, jaggy@purplet.demon.co.uk). Yes, I think the
event queue manipulation should be macroized too... :-)

Mike

-- 
    A train stops at a train station, a bus stops at a bus station.
    On my desk I have a work station...
.----------------------------------------------------------------------.
|  Mike Jagdis                  |  Internet:  mailto:mike@roan.co.uk   |
|  Roan Technology Ltd.         |                                      |
|  2 Markham Mews, Broad Street |  Telephone:  +44 118 989 0403        |
|  Wokingham ENGLAND            |  Fax:        +44 118 989 1195        |
`----------------------------------------------------------------------'

--279709697-1923193217-934974691=:2205 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="select.diff" Content-Transfer-Encoding: BASE64 Content-ID: <Pine.LNX.3.91.990818121131.2205H@toaster.roan.co.uk> Content-Description: Select speed ups

ZGlmZiAtdXIgLS1leGNsdWRlPS5kZXBlbmQgLS1leGNsdWRlPS5oZGVwZW5k IC0tZXhjbHVkZT0qLmZsYWdzIC0tZXhjbHVkZT0qLltvYV0gbGludXgtMi4z LjEzLm9sZC9mcy9zZWxlY3QuYyBsaW51eC0yLjMuMTMrL2ZzL3NlbGVjdC5j DQotLS0gbGludXgtMi4zLjEzLm9sZC9mcy9zZWxlY3QuYwlUaHUgQXVnICA1 IDEwOjA3OjE0IDE5OTkNCisrKyBsaW51eC0yLjMuMTMrL2ZzL3NlbGVjdC5j CVdlZCBBdWcgMTggMDk6NDc6MTQgMTk5OQ0KQEAgLTgsNiArOCwxMyBAQA0K ICAqICAgICBDT0ZGL0VMRiBiaW5hcnkgZW11bGF0aW9uLiBJZiB0aGUgcHJv Y2VzcyBoYXMgdGhlIFNUSUNLWV9USU1FT1VUUw0KICAqICAgICBmbGFnIHNl dCBpbiBpdHMgcGVyc29uYWxpdHkgd2UgZG8gKm5vdCogbW9kaWZ5IHRoZSBn aXZlbiB0aW1lb3V0DQogICogICAgIHBhcmFtZXRlciB0byByZWZsZWN0IHRp bWUgcmVtYWluaW5nLg0KKyAqDQorICogIEF1Z3VzdCAxOTk5DQorICogICAg IFJld3JpdHRlbiB0byB1c2UgZXZlbnQgcXVldWVzIHRvIGxpbWl0IG92ZXJo ZWFkIG9uIHdha2UgdXANCisgKiAgICAgYWZ0ZXIgc2xlZXBpbmcsIHBsdXMg Z2VuZXJhbCBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMuDQorICogICAgIE4u Qi4gSSBiZWxpZXZlIHRoZSBsb2NrX2tlcm5lbCgpIGlzIG9ubHkgbmVlZGVk IGJlY2F1c2UgZHJpdmVycycNCisgKiAgICAgcG9sbCByb3V0aW5lcyBtaWdo dCBleHBlY3QgaXQuIE9uZSBkYXkuLi4/DQorICogICAgIC0tIE1pa2UgSmFn ZGlzIDxqYWdneUBwdXJwbGV0LmRlbW9uLmNvLnVrPg0KICAqLw0KIA0KICNp bmNsdWRlIDxsaW51eC9tYWxsb2MuaD4NCkBAIC0xNyw2ICsyNCwxMyBAQA0K IA0KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPg0KIA0KKy8qIENsYWltIHRo ZSBmaWxlX2xvY2sgc2VtYXBob3JlIGFyb3VuZCB0aGUgd2hvbGUgZmRzZXQg c2NhbiBsb29wDQorICogcmF0aGVyIHRoYW4gd2hlbiBsb29raW5nIGF0IGFu IGZkc2V0IGJpdCB3aXRoaW4gdGhlIGxvb3AgKHRoaXMNCisgKiBpcyBkb25l IGJ5IGZnZXQoKS9mcHV0KCkpLiBUaGlzIGhvbGRzIGEgcmVhZCBsb2NrIG9u IHRoZSBkZWNzcmlwdG9yDQorICogdGFibGUgZm9yIGxvbmdlciBidXQgcmVk dWNlcyBvdmVyaGVhZCBpbiB0aGUgbG9vcC4NCisgKi8NCisjZGVmaW5lIFdJ REVfRklMRV9MT0NLDQorDQogI2RlZmluZSBST1VORF9VUCh4LHkpICgoKHgp Kyh5KS0xKS8oeSkpDQogI2RlZmluZSBERUZBVUxUX1BPTExNQVNLIChQT0xM SU4gfCBQT0xMT1VUIHwgUE9MTFJETk9STSB8IFBPTExXUk5PUk0pDQogDQpA QCAtMzksMTg0ICs1MywyNjUgQEANCiAgKiBMaW51cyBub3RpY2VkLiAgLS0g anJzDQogICovDQogDQotc3RhdGljIHZvaWQgZnJlZV93YWl0KHBvbGxfdGFi bGUgKiBwKQ0KK3N0YXRpYyB2b2lkIGZyZWVfd2FpdChwb2xsX3RhYmxlICog cHRhYikNCiB7DQotCXN0cnVjdCBwb2xsX3RhYmxlX2VudHJ5ICogZW50cnk7 DQotCXBvbGxfdGFibGUgKm9sZDsNCisJc3RydWN0IHBvbGxfdGFibGVfaGVh ZCAqcDsNCiANCisJLyogUmVtb3ZlIGZyb20gdGhlIHdhaXQgcXVldWVzIGZp cnN0LiBIYXZpbmcgZG9uZSB0aGF0IHdlDQorCSAqIGtub3cgdGhlIGV2ZW50 IHF1ZXVlIGNhbiBubyBsb25nZXIgY2hhbmdlIHNvIHdlIGNhbiBpZ25vcmUN CisJICogaXQgYW5kIGp1c3QgZnJlZSB0aGUgcGFnZXMuDQorCSAqLw0KKwlw ID0gcHRhYi0+aGVhZDsNCiAJd2hpbGUgKHApIHsNCi0JCWVudHJ5ID0gcC0+ ZW50cnkgKyBwLT5ucjsNCi0JCXdoaWxlIChwLT5uciA+IDApIHsNCi0JCQlw LT5uci0tOw0KLQkJCWVudHJ5LS07DQotCQkJcmVtb3ZlX3dhaXRfcXVldWUo ZW50cnktPndhaXRfYWRkcmVzcywmZW50cnktPndhaXQpOw0KKwkJc3RydWN0 IHBvbGxfdGFibGVfZW50cnkgKmVudHJ5Ow0KKwkJZW50cnkgPSAoc3RydWN0 IHBvbGxfdGFibGVfZW50cnkgKikocCArIDEpOw0KKwkJd2hpbGUgKGVudHJ5 IDwgcC0+ZW50cnkpIHsNCisJCQlyZW1vdmVfd2FpdF9xdWV1ZShlbnRyeS0+ d2FpdF9hZGRyZXNzLCAmZW50cnktPndhaXQpOw0KIAkJCWZwdXQoZW50cnkt PmZpbHApOw0KKwkJCWVudHJ5Kys7DQogCQl9DQotCQlvbGQgPSBwOw0KIAkJ cCA9IHAtPm5leHQ7DQotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIG9s ZCk7DQogCX0NCi19DQotDQotdm9pZCBfX3BvbGx3YWl0KHN0cnVjdCBmaWxl ICogZmlscCwgd2FpdF9xdWV1ZV9oZWFkX3QgKiB3YWl0X2FkZHJlc3MsIHBv bGxfdGFibGUgKnApDQotew0KLQlmb3IgKDs7KSB7DQotCQlpZiAocC0+bnIg PCBfX01BWF9QT0xMX1RBQkxFX0VOVFJJRVMpIHsNCi0JCQlzdHJ1Y3QgcG9s bF90YWJsZV9lbnRyeSAqIGVudHJ5Ow0KLW9rX3RhYmxlOg0KLQkJIAllbnRy eSA9IHAtPmVudHJ5ICsgcC0+bnI7DQotCQkgCWdldF9maWxlKGZpbHApOw0K LQkJIAllbnRyeS0+ZmlscCA9IGZpbHA7DQotCQkJZW50cnktPndhaXRfYWRk cmVzcyA9IHdhaXRfYWRkcmVzczsNCi0JCQlpbml0X3dhaXRxdWV1ZV9lbnRy eSgmZW50cnktPndhaXQsIGN1cnJlbnQpOw0KLQkJCWFkZF93YWl0X3F1ZXVl KHdhaXRfYWRkcmVzcywmZW50cnktPndhaXQpOw0KLQkJCXAtPm5yKys7DQot CQkJcmV0dXJuOw0KLQkJfQ0KLQkJaWYgKHAtPm5leHQgPT0gTlVMTCkgew0K LQkJCXBvbGxfdGFibGUgKnRtcCA9IChwb2xsX3RhYmxlICopIF9fZ2V0X2Zy ZWVfcGFnZShHRlBfS0VSTkVMKTsNCi0JCQlpZiAoIXRtcCkNCi0JCQkJcmV0 dXJuOw0KLQkJCXRtcC0+bnIgPSAwOw0KLQkJCXRtcC0+ZW50cnkgPSAoc3Ry dWN0IHBvbGxfdGFibGVfZW50cnkgKikodG1wICsgMSk7DQotCQkJdG1wLT5u ZXh0ID0gTlVMTDsNCi0JCQlwLT5uZXh0ID0gdG1wOw0KLQkJCXAgPSB0bXA7 DQotCQkJZ290byBva190YWJsZTsNCi0JCX0NCisJcCA9IHB0YWItPmhlYWQ7 DQorCXdoaWxlIChwKSB7DQorCQlzdHJ1Y3QgcG9sbF90YWJsZV9oZWFkICpv bGQgPSBwOw0KIAkJcCA9IHAtPm5leHQ7DQorCQlmcmVlX3BhZ2UoKHVuc2ln bmVkIGxvbmcpIG9sZCk7DQogCX0NCiB9DQogDQotI2RlZmluZSBfX0lOKGZk cywgbikJCShmZHMtPmluICsgbikNCi0jZGVmaW5lIF9fT1VUKGZkcywgbikJ CShmZHMtPm91dCArIG4pDQotI2RlZmluZSBfX0VYKGZkcywgbikJCShmZHMt PmV4ICsgbikNCi0jZGVmaW5lIF9fUkVTX0lOKGZkcywgbikJKGZkcy0+cmVz X2luICsgbikNCi0jZGVmaW5lIF9fUkVTX09VVChmZHMsIG4pCShmZHMtPnJl c19vdXQgKyBuKQ0KLSNkZWZpbmUgX19SRVNfRVgoZmRzLCBuKQkoZmRzLT5y ZXNfZXggKyBuKQ0KLQ0KLSNkZWZpbmUgQklUUyhmZHMsIG4pCQkoKl9fSU4o ZmRzLCBuKXwqX19PVVQoZmRzLCBuKXwqX19FWChmZHMsIG4pKQ0KLQ0KLXN0 YXRpYyBpbnQgbWF4X3NlbGVjdF9mZCh1bnNpZ25lZCBsb25nIG4sIGZkX3Nl dF9iaXRzICpmZHMpDQordm9pZCBfX3BvbGx3YWl0KHN0cnVjdCBmaWxlICog ZmlscCwgd2FpdF9xdWV1ZV9oZWFkX3QgKiB3YWl0X2FkZHJlc3MsIHBvbGxf dGFibGUgKnB0YWIpDQogew0KLQl1bnNpZ25lZCBsb25nICpvcGVuX2ZkczsN Ci0JdW5zaWduZWQgbG9uZyBzZXQ7DQotCWludCBtYXg7DQorCXN0cnVjdCBw b2xsX3RhYmxlX2hlYWQgKiB0bXAsICogcCA9IHB0YWItPmxhc3Q7DQorCXN0 cnVjdCBwb2xsX3RhYmxlX2VudHJ5ICpsYXN0X2VudHJ5Ow0KIA0KLQkvKiBo YW5kbGUgbGFzdCBpbi1jb21wbGV0ZSBsb25nLXdvcmQgZmlyc3QgKi8NCi0J c2V0ID0gfih+MFVMIDw8IChuICYgKF9fTkZEQklUUy0xKSkpOw0KLQluIC89 IF9fTkZEQklUUzsNCi0Jb3Blbl9mZHMgPSBjdXJyZW50LT5maWxlcy0+b3Bl bl9mZHMtPmZkc19iaXRzK247DQotCW1heCA9IDA7DQotCWlmIChzZXQpIHsN Ci0JCXNldCAmPSBCSVRTKGZkcywgbik7DQotCQlpZiAoc2V0KSB7DQotCQkJ aWYgKCEoc2V0ICYgfipvcGVuX2ZkcykpDQotCQkJCWdvdG8gZ2V0X21heDsN Ci0JCQlyZXR1cm4gLUVCQURGOw0KLQkJfQ0KLQl9DQotCXdoaWxlIChuKSB7 DQotCQlvcGVuX2Zkcy0tOw0KLQkJbi0tOw0KLQkJc2V0ID0gQklUUyhmZHMs IG4pOw0KLQkJaWYgKCFzZXQpDQotCQkJY29udGludWU7DQotCQlpZiAoc2V0 ICYgfipvcGVuX2ZkcykNCi0JCQlyZXR1cm4gLUVCQURGOw0KLQkJaWYgKG1h eCkNCi0JCQljb250aW51ZTsNCi1nZXRfbWF4Og0KLQkJZG8gew0KLQkJCW1h eCsrOw0KLQkJCXNldCA+Pj0gMTsNCi0JCX0gd2hpbGUgKHNldCk7DQotCQlt YXggKz0gbiAqIF9fTkZEQklUUzsNCi0JfQ0KLQ0KLQlyZXR1cm4gbWF4Ow0K KwlsYXN0X2VudHJ5ID0gKHZvaWQgKilwICsgUEFHRV9TSVpFIC0gc2l6ZW9m KHN0cnVjdCBwb2xsX3RhYmxlX2VudHJ5KTsNCisJaWYgKHAtPmVudHJ5IDw9 IGxhc3RfZW50cnkpIHsNCisJCXN0cnVjdCBwb2xsX3RhYmxlX2VudHJ5ICpl bnRyeTsNCitva190YWJsZToNCisJCWVudHJ5ID0gcC0+ZW50cnkrKzsNCisJ IAlnZXRfZmlsZShmaWxwKTsNCisJCWVudHJ5LT5uID0gcHRhYi0+bjsNCisJ IAllbnRyeS0+ZmlscCA9IGZpbHA7DQorCQllbnRyeS0+d2FpdF9hZGRyZXNz ID0gd2FpdF9hZGRyZXNzOw0KKwkJaW5pdF93YWl0cXVldWVfZW50cnkoJmVu dHJ5LT53YWl0LCBjdXJyZW50KTsNCisJCWVudHJ5LT53YWl0LmV2X3F1ZXVl ID0gJnB0YWItPmV2X3F1ZXVlOw0KKwkJYWRkX3dhaXRfcXVldWUod2FpdF9h ZGRyZXNzLCAmZW50cnktPndhaXQpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQor CXRtcCA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsN CisJaWYgKHRtcCkgew0KKwkJdG1wLT5lbnRyeSA9IChzdHJ1Y3QgcG9sbF90 YWJsZV9lbnRyeSAqKSh0bXAgKyAxKTsNCisJCXRtcC0+bmV4dCA9IE5VTEw7 DQorCQlwLT5uZXh0ID0gdG1wOw0KKwkJcHRhYi0+bGFzdCA9IHAgPSB0bXA7 DQorCQlnb3RvIG9rX3RhYmxlOw0KKwl9DQorCS8qIEFsbCB0aGUgZXhpc3Rp bmcgZHJpdmVycyBleHBlY3QgdGhpcyB0byBzdWNjZWVkLiBJZiB3ZSBhcmUN CisJICogb3V0IG9mIG1lbW9yeSB3ZSBtYXkganVzdCBibG9jayB1bnRpbCB0 aW1lb3V0IChpZiB0aGVyZSBpcw0KKwkgKiBvbmUpIGJlY2F1c2Ugd2UgZmFp bGVkIHRvIHdhaXQuDQorCSAqLw0KKwkvKiByZXR1cm4gLUVOT01FTTsgKi8N CiB9DQogDQorDQogI2RlZmluZSBCSVQoaSkJCSgxVUwgPDwgKChpKSYoX19O RkRCSVRTLTEpKSkNCi0jZGVmaW5lIE1FTShpLG0pCSgobSkrKHVuc2lnbmVk KShpKS9fX05GREJJVFMpDQotI2RlZmluZSBJU1NFVChpLG0pCSgoKGkpJioo bSkpICE9IDApDQotI2RlZmluZSBTRVQoaSxtKQkoKihtKSB8PSAoaSkpDQog DQogI2RlZmluZSBQT0xMSU5fU0VUIChQT0xMUkROT1JNIHwgUE9MTFJEQkFO RCB8IFBPTExJTiB8IFBPTExIVVAgfCBQT0xMRVJSKQ0KICNkZWZpbmUgUE9M TE9VVF9TRVQgKFBPTExXUkJBTkQgfCBQT0xMV1JOT1JNIHwgUE9MTE9VVCB8 IFBPTExFUlIpDQogI2RlZmluZSBQT0xMRVhfU0VUIChQT0xMUFJJKQ0KIA0K LWludCBkb19zZWxlY3QoaW50IG4sIGZkX3NldF9iaXRzICpmZHMsIGxvbmcg KnRpbWVvdXQpDQoraW50IGRvX3NlbGVjdChpbnQgbiwgdW5zaWduZWQgbG9u ZyAqYml0cywgY29uc3QgaW50IHNpemUsIGxvbmcgKnRpbWVvdXQpDQogew0K LQlwb2xsX3RhYmxlICp3YWl0X3RhYmxlLCAqd2FpdDsNCi0JaW50IHJldHZh bCwgaSwgb2ZmOw0KLQlsb25nIF9fdGltZW91dCA9ICp0aW1lb3V0Ow0KKwlw b2xsX3RhYmxlIHdhaXRfdGFibGUsICp3YWl0Ow0KKwlpbnQgcmV0dmFsOw0K Kwlsb25nIF9fdGltZW91dDsNCisJdW5zaWduZWQgbG9uZyBiaXQ7DQorCXVu c2lnbmVkIGxvbmcgZmRzLCAqZmRsOw0KKwl1bnNpZ25lZCBsb25nIG1hc2s7 DQorCXN0cnVjdCBmaWxlICpmaWxlOw0KIA0KLQl3YWl0ID0gd2FpdF90YWJs ZSA9IE5VTEw7DQorCXdhaXQgPSBOVUxMOw0KKwlfX3RpbWVvdXQgPSAqdGlt ZW91dDsNCiAJaWYgKF9fdGltZW91dCkgew0KLQkJd2FpdF90YWJsZSA9IChw b2xsX3RhYmxlICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsNCi0J CWlmICghd2FpdF90YWJsZSkNCisJCXdhaXRfdGFibGUuaGVhZCA9ICh2b2lk ICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsNCisJCWlmICghd2Fp dF90YWJsZS5oZWFkKQ0KIAkJCXJldHVybiAtRU5PTUVNOw0KIA0KLQkJd2Fp dF90YWJsZS0+bnIgPSAwOw0KLQkJd2FpdF90YWJsZS0+ZW50cnkgPSAoc3Ry dWN0IHBvbGxfdGFibGVfZW50cnkgKikod2FpdF90YWJsZSArIDEpOw0KLQkJ d2FpdF90YWJsZS0+bmV4dCA9IE5VTEw7DQotCQl3YWl0ID0gd2FpdF90YWJs ZTsNCisJCWluaXRfZXZlbnRxdWV1ZSgmd2FpdF90YWJsZS5ldl9xdWV1ZSk7 DQorCQl3YWl0X3RhYmxlLmhlYWQtPmVudHJ5ID0gKHN0cnVjdCBwb2xsX3Rh YmxlX2VudHJ5ICopKHdhaXRfdGFibGUuaGVhZCArIDEpOw0KKwkJd2FpdF90 YWJsZS5oZWFkLT5uZXh0ID0gTlVMTDsNCisJCXdhaXRfdGFibGUubGFzdCA9 IHdhaXRfdGFibGUuaGVhZDsNCisJCXdhaXQgPSAmd2FpdF90YWJsZTsNCiAJ fQ0KIA0KKwlyZXR2YWwgPSAwOw0KKwlsb2NrX2tlcm5lbCgpOw0KKw0KKwlp ZiAoIW4pDQorCQlnb3RvIG5vX3NldHVwOw0KKw0KKwltYXNrID0gfih+MFVM IDw8IChuICYgKF9fTkZEQklUUy0xKSkpOw0KKwlpZiAoIW1hc2spDQorCQlt YXNrID0gfjBVTDsNCisJbi0tOw0KKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tf SU5URVJSVVBUSUJMRTsNCisJd2FpdF90YWJsZS5uID0gbjsNCisJbiAvPSBf X05GREJJVFM7DQorCWZkbCA9IGJpdHMgKyBuOw0KKw0KKwlmZHMgPSAoKmZk bCB8IGZkbFtzaXplXSB8IGZkbFsyKnNpemVdKSAmIG1hc2s7DQorDQorI2lm ZGVmIFdJREVfRklMRV9MT0NLDQogCXJlYWRfbG9jaygmY3VycmVudC0+Zmls ZXMtPmZpbGVfbG9jayk7DQotCXJldHZhbCA9IG1heF9zZWxlY3RfZmQobiwg ZmRzKTsNCi0JcmVhZF91bmxvY2soJmN1cnJlbnQtPmZpbGVzLT5maWxlX2xv Y2spOw0KKyNlbmRpZg0KKwlpZiAoZmRzKSB7DQorCQliaXQgPSBCSVQod2Fp dF90YWJsZS5uKTsNCisJCWdvdG8gZmlyc3RfbG9uZzsNCisJfQ0KIA0KLQls b2NrX2tlcm5lbCgpOw0KLQlpZiAocmV0dmFsIDwgMCkNCi0JCWdvdG8gb3V0 Ow0KLQluID0gcmV0dmFsOw0KLQlyZXR2YWwgPSAwOw0KLQlmb3IgKDs7KSB7 DQotCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsNCi0J CWZvciAoaSA9IDAgOyBpIDwgbjsgaSsrKSB7DQotCQkJdW5zaWduZWQgbG9u ZyBiaXQgPSBCSVQoaSk7DQotCQkJdW5zaWduZWQgbG9uZyBtYXNrOw0KLQkJ CXN0cnVjdCBmaWxlICpmaWxlOw0KKwl3YWl0X3RhYmxlLm4gfD0gMzE7IC8q IFJvdW5kIHVwICovDQorDQorCXdoaWxlICh3YWl0X3RhYmxlLm4gPj0gMCkg ew0KKwkJLyogTG9uZyBydW5zIG9mIHplcm8gYml0cyB0ZW5kIHRvIGJlIGNv bW1vbiwgZXNwZWNpYWxseQ0KKwkJICogYXQgdGhlIGVuZCBvZiBvdmVyIGxh cmdlIHNldHMgc28gd2UgdXNlIGEgdGlnaHQgbG9vcA0KKwkJICogdG8gc2tp cCB0aGVtLg0KKwkJICovDQorCQlkbyB7DQorCQkJZmRsLS07DQorCQkJZmRz ID0gKmZkbCB8IGZkbFtzaXplXSB8IGZkbFsyKnNpemVdOw0KKwkJfSB3aGls ZSAoIWZkcyAmJiBmZGwgPiBiaXRzKTsNCisJCWlmICghZmRzKQ0KKwkJCWJy ZWFrOw0KKwkJd2FpdF90YWJsZS5uID0gKGZkbCAtIGJpdHMpICogOCpzaXpl b2YodW5zaWduZWQgbG9uZykNCisJCQkJKyA4KnNpemVvZih1bnNpZ25lZCBs b25nKSAtIDE7DQogDQotCQkJb2ZmID0gaSAvIF9fTkZEQklUUzsNCi0JCQlp ZiAoIShiaXQgJiBCSVRTKGZkcywgb2ZmKSkpDQorCQliaXQgPSAxVUwgPDwg KCg4KnNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKTsNCitmaXJzdF9sb25n Og0KKwkJZm9yICg7IGJpdCAmJiB3YWl0X3RhYmxlLm4gPj0gMDsgd2FpdF90 YWJsZS5uLS0sIGJpdCA+Pj0gMSkgew0KKwkJCWlmICghKGZkcyAmIGJpdCkp DQogCQkJCWNvbnRpbnVlOw0KLQkJCWZpbGUgPSBmZ2V0KGkpOw0KLQkJCW1h c2sgPSBQT0xMTlZBTDsNCi0JCQlpZiAoZmlsZSkgew0KLQkJCQltYXNrID0g REVGQVVMVF9QT0xMTUFTSzsNCi0JCQkJaWYgKGZpbGUtPmZfb3AgJiYgZmls ZS0+Zl9vcC0+cG9sbCkNCi0JCQkJCW1hc2sgPSBmaWxlLT5mX29wLT5wb2xs KGZpbGUsIHdhaXQpOw0KLQkJCQlmcHV0KGZpbGUpOw0KLQkJCX0NCi0JCQlp ZiAoKG1hc2sgJiBQT0xMSU5fU0VUKSAmJiBJU1NFVChiaXQsIF9fSU4oZmRz LG9mZikpKSB7DQotCQkJCVNFVChiaXQsIF9fUkVTX0lOKGZkcyxvZmYpKTsN CisNCisjaWZkZWYgV0lERV9GSUxFX0xPQ0sNCisJCQlmaWxlID0gZmNoZWNr KHdhaXRfdGFibGUubik7DQorI2Vsc2UNCisJCQlmaWxlID0gZmdldCh3YWl0 X3RhYmxlLm4pOw0KKyNlbmRpZg0KKwkJCWlmICghZmlsZSkNCisJCQkJZ290 byBvdXRfYmFkZjsNCisJCQltYXNrID0gREVGQVVMVF9QT0xMTUFTSzsNCisJ CQlpZiAoZmlsZS0+Zl9vcCAmJiBmaWxlLT5mX29wLT5wb2xsKQ0KKwkJCQlt YXNrID0gZmlsZS0+Zl9vcC0+cG9sbChmaWxlLCB3YWl0KTsNCisjaWZuZGVm IFdJREVfRklMRV9MT0NLDQorCQkJZnB1dChmaWxlKTsNCisjZW5kaWYNCisJ CQkvKiBJbiBnZW5lcmFsIG1vc3Qgb2YgdGhlIGJpdHMgd2lsbCBiZSB1bnNl dA0KKwkJCSAqIGFuZCBicmFuY2ggcHJlZGljdGlvbiBzYXlzIHRoYXQgZm9y d2FyZA0KKwkJCSAqIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGFyZSBub3QgdGFr ZW4uIFNvLi4uDQorCQkJICovDQorCQkJaWYgKCEoKmZkbCAmIGJpdCkpDQor CQkJCWdvdG8gbm9faW5fY2hlY2s7DQorCQkJaWYgKChtYXNrICYgUE9MTElO X1NFVCkpIHsNCisJCQkJZmRsWzMqc2l6ZV0gfD0gYml0Ow0KIAkJCQlyZXR2 YWwrKzsNCiAJCQkJd2FpdCA9IE5VTEw7DQogCQkJfQ0KLQkJCWlmICgobWFz ayAmIFBPTExPVVRfU0VUKSAmJiBJU1NFVChiaXQsIF9fT1VUKGZkcyxvZmYp KSkgew0KLQkJCQlTRVQoYml0LCBfX1JFU19PVVQoZmRzLG9mZikpOw0KK25v X2luX2NoZWNrOg0KKwkJCWlmICghKGZkbFtzaXplXSAmIGJpdCkpDQorCQkJ CWdvdG8gbm9fb3V0X2NoZWNrOw0KKwkJCWlmICgobWFzayAmIFBPTExPVVRf U0VUKSkgew0KKwkJCQlmZGxbNCpzaXplXSB8PSBiaXQ7DQogCQkJCXJldHZh bCsrOw0KIAkJCQl3YWl0ID0gTlVMTDsNCiAJCQl9DQotCQkJaWYgKChtYXNr ICYgUE9MTEVYX1NFVCkgJiYgSVNTRVQoYml0LCBfX0VYKGZkcyxvZmYpKSkg ew0KLQkJCQlTRVQoYml0LCBfX1JFU19FWChmZHMsb2ZmKSk7DQorbm9fb3V0 X2NoZWNrOg0KKwkJCWlmICghKGZkbFsyKnNpemVdICYgYml0KSkNCisJCQkJ Z290byBub19leF9jaGVjazsNCisJCQlpZiAoKG1hc2sgJiBQT0xMRVhfU0VU KSkgew0KKwkJCQlmZGxbNSpzaXplXSB8PSBiaXQ7DQogCQkJCXJldHZhbCsr Ow0KIAkJCQl3YWl0ID0gTlVMTDsNCiAJCQl9DQorbm9fZXhfY2hlY2s6DQog CQl9DQotCQl3YWl0ID0gTlVMTDsNCi0JCWlmIChyZXR2YWwgfHwgIV9fdGlt ZW91dCB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkNCi0JCQlicmVhazsN CisJfQ0KKw0KKyNpZmRlZiBXSURFX0ZJTEVfTE9DSw0KKwlyZWFkX3VubG9j aygmY3VycmVudC0+ZmlsZXMtPmZpbGVfbG9jayk7DQorI2VuZGlmDQorDQor bm9fc2V0dXA6DQorCXdoaWxlICghcmV0dmFsICYmIF9fdGltZW91dCAmJiAh c2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsNCisJCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7DQorCQl3YWl0X3F1ZXVlX3QgKncsICpuZXh0Ow0KKw0KIAkJX190 aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dChfX3RpbWVvdXQpOw0KKwkJY3Vy cmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7DQorDQorCQkvKiBM aWZ0IHRoZSBxdWV1ZWQgZXZlbnRzIGFuZCByZXNldCB0aGUgcXVldWUgcmVh ZHkNCisJCSAqIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMgd2hpbGUgd2Ug InRoaW5rIi4NCisJCSAqLw0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJndhaXRf dGFibGUuZXZfcXVldWUubG9jaywgZmxhZ3MpOw0KKwkJdyA9IHdhaXRfdGFi bGUuZXZfcXVldWUuaGVhZDsNCisJCXdhaXRfdGFibGUuZXZfcXVldWUuaGVh ZCA9IE5VTEw7DQorCQl3YWl0X3RhYmxlLmV2X3F1ZXVlLnRhaWwgPSAmd2Fp dF90YWJsZS5ldl9xdWV1ZS5oZWFkOw0KKwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmd2FpdF90YWJsZS5ldl9xdWV1ZS5sb2NrLCBmbGFncyk7DQorDQor CQlmb3IgKDsgdzsgdz1uZXh0KSB7DQorCQkJc3RydWN0IHBvbGxfdGFibGVf ZW50cnkgKiBwOw0KKw0KKwkJCS8qIFJlc2V0IHRoZSB3YWl0X3F1ZXVlJ3Mg ZXZlbnQgcG9pbnRlciBiZWZvcmUNCisJCQkgKiBjaGVja2luZyBpbiBjYXNl IGl0IGlzIHRyaWdnZXJlZCBhZ2Fpbi4NCisJCQkgKi8NCisJCQluZXh0ID0g dy0+ZXZfbmV4dDsNCisJCQl3LT5ldl9xdWV1ZSA9ICZ3YWl0X3RhYmxlLmV2 X3F1ZXVlOw0KKwkJCW1iKCk7DQorDQorCQkJcCA9ICh2b2lkICopdyAtIG9m ZnNldG9mKHN0cnVjdCBwb2xsX3RhYmxlX2VudHJ5LCB3YWl0KTsNCisJCQlm aWxlID0gcC0+ZmlscDsNCisjaWYgMA0KKwkJCS8qIFRoaXMgaGFzIHRvIGJl IHRydWUgb3Igd2Ugd291bGQgbmV2ZXIgaGF2ZQ0KKwkJCSAqIGRvbmUgYSB3 YWl0IG9uIHRoZSBmaWxlIQ0KKwkJCSAqLw0KKwkJCWlmIChmaWxlLT5mX29w ICYmIGZpbGUtPmZfb3AtPnBvbGwpDQorI2VuZGlmDQorCQkJCW1hc2sgPSBm aWxlLT5mX29wLT5wb2xsKGZpbGUsIE5VTEwpOw0KKw0KKwkJCWZkbCA9IGJp dHMgKyAocC0+biAvIF9fTkZEQklUUyk7DQorCQkJYml0ID0gQklUKHAtPm4p Ow0KKw0KKwkJCS8qIEluIGdlbmVyYWwgbW9zdCBvZiB0aGUgYml0cyB3aWxs IGJlIHVuc2V0DQorCQkJICogYW5kIGJyYW5jaCBwcmVkaWN0aW9uIHNheXMg dGhhdCBmb3J3YXJkDQorCQkJICogY29uZGl0aW9uYWwgYnJhbmNoZXMgYXJl IG5vdCB0YWtlbi4gU28uLi4NCisJCQkgKi8NCisJCQlpZiAoISgqZmRsICYg Yml0KSkNCisJCQkJZ290byBldl9ub19pbl9jaGVjazsNCisJCQlpZiAoKG1h c2sgJiBQT0xMSU5fU0VUKSkgew0KKwkJCQlmZGxbMypzaXplXSB8PSBiaXQ7 DQorCQkJCXJldHZhbCsrOw0KKwkJCX0NCitldl9ub19pbl9jaGVjazoNCisJ CQlpZiAoIShmZGxbc2l6ZV0gJiBiaXQpKQ0KKwkJCQlnb3RvIGV2X25vX291 dF9jaGVjazsNCisJCQlpZiAoKG1hc2sgJiBQT0xMT1VUX1NFVCkpIHsNCisJ CQkJZmRsWzQqc2l6ZV0gfD0gYml0Ow0KKwkJCQlyZXR2YWwrKzsNCisJCQl9 DQorZXZfbm9fb3V0X2NoZWNrOg0KKwkJCWlmICghKGZkbFsyKnNpemVdICYg Yml0KSkNCisJCQkJZ290byBldl9ub19leF9jaGVjazsNCisJCQlpZiAoKG1h c2sgJiBQT0xMRVhfU0VUKSkgew0KKwkJCQlmZGxbNSpzaXplXSB8PSBiaXQ7 DQorCQkJCXJldHZhbCsrOw0KKwkJCX0NCitldl9ub19leF9jaGVjazoNCisJ CX0NCiAJfQ0KIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsNCi0N CiBvdXQ6DQogCWlmICgqdGltZW91dCkNCi0JCWZyZWVfd2FpdCh3YWl0X3Rh YmxlKTsNCisJCWZyZWVfd2FpdCgmd2FpdF90YWJsZSk7DQogDQogCS8qDQog CSAqIFVwLXRvLWRhdGUgdGhlIGNhbGxlciB0aW1lb3V0Lg0KQEAgLTIyNCw2 ICszMTksMTAgQEANCiAJKnRpbWVvdXQgPSBfX3RpbWVvdXQ7DQogCXVubG9j a19rZXJuZWwoKTsNCiAJcmV0dXJuIHJldHZhbDsNCitvdXRfYmFkZjoNCisJ cmVhZF91bmxvY2soJmN1cnJlbnQtPmZpbGVzLT5maWxlX2xvY2spOw0KKwly ZXR2YWwgPSAtRUJBREY7DQorCWdvdG8gb3V0Ow0KIH0NCiANCiAvKg0KQEAg LTI0MCw4ICszMzksNyBAQA0KIGFzbWxpbmthZ2UgaW50DQogc3lzX3NlbGVj dChpbnQgbiwgZmRfc2V0ICppbnAsIGZkX3NldCAqb3V0cCwgZmRfc2V0ICpl eHAsIHN0cnVjdCB0aW1ldmFsICp0dnApDQogew0KLQlmZF9zZXRfYml0cyBm ZHM7DQotCWNoYXIgKmJpdHM7DQorCXVuc2lnbmVkIGxvbmcgKmJpdHM7DQog CWxvbmcgdGltZW91dDsNCiAJaW50IHJldCwgc2l6ZTsNCiANCkBAIC0yNzcs MjYgKzM3NSwxNyBAQA0KIAkgKiBsb25nLXdvcmRzLiANCiAJICovDQogCXJl dCA9IC1FTk9NRU07DQotCXNpemUgPSBGRFNfQllURVMobik7DQotCWJpdHMg PSBrbWFsbG9jKDYgKiBzaXplLCBHRlBfS0VSTkVMKTsNCisJc2l6ZSA9IEZE U19MT05HUyhuKTsNCisJYml0cyA9IGttYWxsb2MoNiAqIHNpemUgKiBzaXpl b2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOw0KIAlpZiAoIWJpdHMp DQogCQlnb3RvIG91dF9ub2ZkczsNCi0JZmRzLmluICAgICAgPSAodW5zaWdu ZWQgbG9uZyAqKSAgYml0czsNCi0JZmRzLm91dCAgICAgPSAodW5zaWduZWQg bG9uZyAqKSAoYml0cyArICAgc2l6ZSk7DQotCWZkcy5leCAgICAgID0gKHVu c2lnbmVkIGxvbmcgKikgKGJpdHMgKyAyKnNpemUpOw0KLQlmZHMucmVzX2lu ICA9ICh1bnNpZ25lZCBsb25nICopIChiaXRzICsgMypzaXplKTsNCi0JZmRz LnJlc19vdXQgPSAodW5zaWduZWQgbG9uZyAqKSAoYml0cyArIDQqc2l6ZSk7 DQotCWZkcy5yZXNfZXggID0gKHVuc2lnbmVkIGxvbmcgKikgKGJpdHMgKyA1 KnNpemUpOw0KLQ0KLQlpZiAoKHJldCA9IGdldF9mZF9zZXQobiwgaW5wLCBm ZHMuaW4pKSB8fA0KLQkgICAgKHJldCA9IGdldF9mZF9zZXQobiwgb3V0cCwg ZmRzLm91dCkpIHx8DQotCSAgICAocmV0ID0gZ2V0X2ZkX3NldChuLCBleHAs IGZkcy5leCkpKQ0KKwlpZiAoKHJldCA9IGdldF9mZF9zZXQobiwgaW5wLCBi aXRzKSkgfHwNCisJICAgIChyZXQgPSBnZXRfZmRfc2V0KG4sIG91dHAsIGJp dHMrc2l6ZSkpIHx8DQorCSAgICAocmV0ID0gZ2V0X2ZkX3NldChuLCBleHAs IGJpdHMrMipzaXplKSkpDQogCQlnb3RvIG91dDsNCi0JemVyb19mZF9zZXQo biwgZmRzLnJlc19pbik7DQotCXplcm9fZmRfc2V0KG4sIGZkcy5yZXNfb3V0 KTsNCi0JemVyb19mZF9zZXQobiwgZmRzLnJlc19leCk7DQorCW1lbXNldChi aXRzKzMqc2l6ZSwgMCwgMypzaXplKnNpemVvZih1bnNpZ25lZCBsb25nKSk7 DQogDQotCXJldCA9IGRvX3NlbGVjdChuLCAmZmRzLCAmdGltZW91dCk7DQor CXJldCA9IGRvX3NlbGVjdChuLCBiaXRzLCBzaXplLCAmdGltZW91dCk7DQog DQogCWlmICh0dnAgJiYgIShjdXJyZW50LT5wZXJzb25hbGl0eSAmIFNUSUNL WV9USU1FT1VUUykpIHsNCiAJCXRpbWVfdCBzZWMgPSAwLCB1c2VjID0gMDsN CkBAIC0zMTgsOSArNDA3LDEyIEBADQogCQlyZXQgPSAwOw0KIAl9DQogDQot CXNldF9mZF9zZXQobiwgaW5wLCBmZHMucmVzX2luKTsNCi0Jc2V0X2ZkX3Nl dChuLCBvdXRwLCBmZHMucmVzX291dCk7DQotCXNldF9mZF9zZXQobiwgZXhw LCBmZHMucmVzX2V4KTsNCisJaWYgKGlucCkNCisJCV9fY29weV90b191c2Vy KGlucCwgYml0cyszKnNpemUsIHNpemUqc2l6ZW9mKHVuc2lnbmVkIGxvbmcp KTsNCisJaWYgKG91dHApDQorCQlfX2NvcHlfdG9fdXNlcihvdXRwLCBiaXRz KzQqc2l6ZSwgc2l6ZSpzaXplb2YodW5zaWduZWQgbG9uZykpOw0KKwlpZiAo ZXhwKQ0KKwkJX19jb3B5X3RvX3VzZXIoZXhwLCBiaXRzKzUqc2l6ZSwgc2l6 ZSpzaXplb2YodW5zaWduZWQgbG9uZykpOw0KIA0KIG91dDoNCiAJa2ZyZWUo Yml0cyk7DQpAQCAtMzI4LDQ2ICs0MjAsOTkgQEANCiAJcmV0dXJuIHJldDsN CiB9DQogDQotc3RhdGljIGludCBkb19wb2xsKHVuc2lnbmVkIGludCBuZmRz LCBzdHJ1Y3QgcG9sbGZkICpmZHMsIHBvbGxfdGFibGUgKndhaXQsDQotCQkg ICBsb25nIHRpbWVvdXQpDQorc3RhdGljIGludCBkb19wb2xsKHVuc2lnbmVk IGludCBuZmRzLCBzdHJ1Y3QgcG9sbGZkICpmZHMsIGxvbmcgdGltZW91dCkN CiB7DQorCXBvbGxfdGFibGUgd2FpdF90YWJsZSwgKndhaXQ7DQorCXN0cnVj dCBwb2xsZmQgKiBmZHBudDsNCiAJaW50IGNvdW50ID0gMDsNCiANCi0JZm9y ICg7Oykgew0KLQkJdW5zaWduZWQgaW50IGo7DQotCQlzdHJ1Y3QgcG9sbGZk ICogZmRwbnQ7DQorCXdhaXQgPSBOVUxMOw0KKwlpZiAodGltZW91dCkgew0K KwkJd2FpdF90YWJsZS5oZWFkID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdl KEdGUF9LRVJORUwpOw0KKwkJaWYgKCF3YWl0X3RhYmxlLmhlYWQpDQorCQkJ cmV0dXJuIC1FTk9NRU07DQogDQotCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tf SU5URVJSVVBUSUJMRTsNCi0JCWZvciAoZmRwbnQgPSBmZHMsIGogPSAwOyBq IDwgbmZkczsgaisrLCBmZHBudCsrKSB7DQotCQkJaW50IGZkOw0KLQkJCXVu c2lnbmVkIGludCBtYXNrOw0KLQ0KLQkJCW1hc2sgPSAwOw0KLQkJCWZkID0g ZmRwbnQtPmZkOw0KLQkJCWlmIChmZCA+PSAwKSB7DQotCQkJCXN0cnVjdCBm aWxlICogZmlsZSA9IGZnZXQoZmQpOw0KLQkJCQltYXNrID0gUE9MTE5WQUw7 DQotCQkJCWlmIChmaWxlICE9IE5VTEwpIHsNCi0JCQkJCW1hc2sgPSBERUZB VUxUX1BPTExNQVNLOw0KLQkJCQkJaWYgKGZpbGUtPmZfb3AgJiYgZmlsZS0+ Zl9vcC0+cG9sbCkNCi0JCQkJCQltYXNrID0gZmlsZS0+Zl9vcC0+cG9sbChm aWxlLCB3YWl0KTsNCi0JCQkJCW1hc2sgJj0gZmRwbnQtPmV2ZW50cyB8IFBP TExFUlIgfCBQT0xMSFVQOw0KLQkJCQkJZnB1dChmaWxlKTsNCi0JCQkJfQ0K LQkJCQlpZiAobWFzaykgew0KLQkJCQkJd2FpdCA9IE5VTEw7DQotCQkJCQlj b3VudCsrOw0KLQkJCQl9DQorCQlpbml0X2V2ZW50cXVldWUoJndhaXRfdGFi bGUuZXZfcXVldWUpOw0KKwkJd2FpdF90YWJsZS5oZWFkLT5lbnRyeSA9IChz dHJ1Y3QgcG9sbF90YWJsZV9lbnRyeSAqKSh3YWl0X3RhYmxlLmhlYWQgKyAx KTsNCisJCXdhaXRfdGFibGUuaGVhZC0+bmV4dCA9IE5VTEw7DQorCQl3YWl0 X3RhYmxlLmxhc3QgPSB3YWl0X3RhYmxlLmhlYWQ7DQorCQl3YWl0ID0gJndh aXRfdGFibGU7DQorCX0NCisNCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lO VEVSUlVQVElCTEU7DQorCWZvciAoZmRwbnQgPSBmZHMsIHdhaXRfdGFibGUu biA9IDA7IHdhaXRfdGFibGUubiA8IG5mZHM7IHdhaXRfdGFibGUubisrLCBm ZHBudCsrKSB7DQorCQlpbnQgZmQ7DQorCQl1bnNpZ25lZCBpbnQgbWFzazsN CisNCisJCW1hc2sgPSAwOw0KKwkJZmQgPSBmZHBudC0+ZmQ7DQorCQlpZiAo ZmQgPj0gMCkgew0KKwkJCXN0cnVjdCBmaWxlICogZmlsZSA9IGZnZXQoZmQp Ow0KKwkJCW1hc2sgPSBQT0xMTlZBTDsNCisJCQlpZiAoZmlsZSAhPSBOVUxM KSB7DQorCQkJCW1hc2sgPSBERUZBVUxUX1BPTExNQVNLOw0KKwkJCQlpZiAo ZmlsZS0+Zl9vcCAmJiBmaWxlLT5mX29wLT5wb2xsKQ0KKwkJCQkJbWFzayA9 IGZpbGUtPmZfb3AtPnBvbGwoZmlsZSwgd2FpdCk7DQorCQkJCW1hc2sgJj0g ZmRwbnQtPmV2ZW50cyB8IFBPTExFUlIgfCBQT0xMSFVQOw0KKwkJCQlmcHV0 KGZpbGUpOw0KKwkJCX0NCisJCQlpZiAobWFzaykgew0KKwkJCQl3YWl0ID0g TlVMTDsNCisJCQkJY291bnQrKzsNCiAJCQl9DQotCQkJZmRwbnQtPnJldmVu dHMgPSBtYXNrOw0KIAkJfQ0KKwkJZmRwbnQtPnJldmVudHMgPSBtYXNrOw0K Kwl9DQorDQorCXdoaWxlICghY291bnQgJiYgdGltZW91dCAmJiAhc2lnbmFs X3BlbmRpbmcoY3VycmVudCkpIHsNCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 DQorCQl3YWl0X3F1ZXVlX3QgKncsICpuZXh0Ow0KIA0KLQkJd2FpdCA9IE5V TEw7DQotCQlpZiAoY291bnQgfHwgIXRpbWVvdXQgfHwgc2lnbmFsX3BlbmRp bmcoY3VycmVudCkpDQotCQkJYnJlYWs7DQogCQl0aW1lb3V0ID0gc2NoZWR1 bGVfdGltZW91dCh0aW1lb3V0KTsNCisJCWN1cnJlbnQtPnN0YXRlID0gVEFT S19JTlRFUlJVUFRJQkxFOw0KKw0KKwkJLyogTGlmdCB0aGUgcXVldWVkIGV2 ZW50cyBhbmQgcmVzZXQgdGhlIHF1ZXVlIHJlYWR5DQorCQkgKiBmb3IgYW55 dGhpbmcgdGhhdCBoYXBwZW5zIHdoaWxlIHdlICJ0aGluayIuDQorCQkgKi8N CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ3YWl0X3RhYmxlLmV2X3F1ZXVlLmxv Y2ssIGZsYWdzKTsNCisJCXcgPSB3YWl0X3RhYmxlLmV2X3F1ZXVlLmhlYWQ7 DQorCQl3YWl0X3RhYmxlLmV2X3F1ZXVlLmhlYWQgPSBOVUxMOw0KKwkJd2Fp dF90YWJsZS5ldl9xdWV1ZS50YWlsID0gJndhaXRfdGFibGUuZXZfcXVldWUu aGVhZDsNCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndhaXRfdGFibGUu ZXZfcXVldWUubG9jaywgZmxhZ3MpOw0KKw0KKwkJZm9yICg7IHc7IHc9bmV4 dCkgew0KKwkJCXN0cnVjdCBwb2xsX3RhYmxlX2VudHJ5ICogcDsNCisJCQl1 bnNpZ25lZCBsb25nIG1hc2s7DQorCQkJc3RydWN0IGZpbGUgKiBmaWxlOw0K Kw0KKwkJCS8qIFJlc2V0IHRoZSB3YWl0X3F1ZXVlJ3MgZXZlbnQgcG9pbnRl ciBiZWZvcmUNCisJCQkgKiBjaGVja2luZyBpbiBjYXNlIGl0IGlzIHRyaWdn ZXJlZCBhZ2Fpbi4NCisJCQkgKi8NCisJCQluZXh0ID0gdy0+ZXZfbmV4dDsN CisJCQl3LT5ldl9xdWV1ZSA9ICZ3YWl0X3RhYmxlLmV2X3F1ZXVlOw0KKwkJ CW1iKCk7DQorDQorCQkJcCA9ICh2b2lkICopdyAtIG9mZnNldG9mKHN0cnVj dCBwb2xsX3RhYmxlX2VudHJ5LCB3YWl0KTsNCisJCQlmaWxlID0gcC0+Zmls cDsNCisJCQlmZHBudCA9IGZkcyArIHAtPm47DQorI2lmIDANCisJCQkvKiBU aGlzIGhhcyB0byBiZSB0cnVlIG9yIHdlIHdvdWxkIG5ldmVyIGhhdmUNCisJ CQkgKiBkb25lIGEgd2FpdCBvbiB0aGUgZmlsZSENCisJCQkgKi8NCisJCQlp ZiAoZmlsZS0+Zl9vcCAmJiBmaWxlLT5mX29wLT5wb2xsKQ0KKyNlbmRpZg0K KwkJCQltYXNrID0gZmlsZS0+Zl9vcC0+cG9sbChmaWxlLCBOVUxMKTsNCisJ CQltYXNrICY9IGZkcG50LT5ldmVudHMgfCBQT0xMRVJSIHwgUE9MTEhVUDsN CisJCQlpZiAobWFzaykgew0KKwkJCQljb3VudCsrOw0KKwkJCQlmZHBudC0+ cmV2ZW50cyA9IG1hc2s7DQorCQkJfQ0KKwkJfQ0KIAl9DQogCWN1cnJlbnQt PnN0YXRlID0gVEFTS19SVU5OSU5HOw0KKw0KKwlpZiAodGltZW91dCkNCisJ CWZyZWVfd2FpdCgmd2FpdF90YWJsZSk7DQogCXJldHVybiBjb3VudDsNCiB9 DQogDQpAQCAtMzc1LDcgKzUyMCw2IEBADQogew0KIAlpbnQgaSwgZmRjb3Vu dCwgZXJyLCBzaXplOw0KIAlzdHJ1Y3QgcG9sbGZkICogZmRzLCAqZmRzMTsN Ci0JcG9sbF90YWJsZSAqd2FpdF90YWJsZSA9IE5VTEwsICp3YWl0ID0gTlVM TDsNCiANCiAJbG9ja19rZXJuZWwoKTsNCiAJLyogRG8gYSBzYW5pdHkgY2hl Y2sgb24gbmZkcyAuLi4gKi8NCkBAIC0zODQsNyArNTI4LDcgQEANCiAJCWdv dG8gb3V0Ow0KIA0KIAlpZiAodGltZW91dCkgew0KLQkJLyogQ2FyZWZ1bGEg YWJvdXQgb3ZlcmZsb3cgaW4gdGhlIGludGVybWVkaWF0ZSB2YWx1ZXMgKi8N CisJCS8qIENhcmVmdWwgYWJvdXQgb3ZlcmZsb3cgaW4gdGhlIGludGVybWVk aWF0ZSB2YWx1ZXMgKi8NCiAJCWlmICgodW5zaWduZWQgbG9uZykgdGltZW91 dCA8IE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopDQogCQkJdGltZW91dCA9 ICh1bnNpZ25lZCBsb25nKSh0aW1lb3V0KkhaKzk5OSkvMTAwMCsxOw0KIAkJ ZWxzZSAvKiBOZWdhdGl2ZSBvciBvdmVyZmxvdyAqLw0KQEAgLTM5MiwxNiAr NTM2LDYgQEANCiAJfQ0KIA0KIAllcnIgPSAtRU5PTUVNOw0KLQlpZiAodGlt ZW91dCkgew0KLQkJd2FpdF90YWJsZSA9IChwb2xsX3RhYmxlICopIF9fZ2V0 X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsNCi0JCWlmICghd2FpdF90YWJsZSkN Ci0JCQlnb3RvIG91dDsNCi0JCXdhaXRfdGFibGUtPm5yID0gMDsNCi0JCXdh aXRfdGFibGUtPmVudHJ5ID0gKHN0cnVjdCBwb2xsX3RhYmxlX2VudHJ5ICop KHdhaXRfdGFibGUgKyAxKTsNCi0JCXdhaXRfdGFibGUtPm5leHQgPSBOVUxM Ow0KLQkJd2FpdCA9IHdhaXRfdGFibGU7DQotCX0NCi0NCiAJc2l6ZSA9IG5m ZHMgKiBzaXplb2Yoc3RydWN0IHBvbGxmZCk7DQogCWZkcyA9IChzdHJ1Y3Qg cG9sbGZkICopIGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7DQogCWlmICgh ZmRzKQ0KQEAgLTQxMSw3ICs1NDUsNyBAQA0KIAlpZiAoY29weV9mcm9tX3Vz ZXIoZmRzLCB1ZmRzLCBzaXplKSkNCiAJCWdvdG8gb3V0X2ZkczsNCiANCi0J ZmRjb3VudCA9IGRvX3BvbGwobmZkcywgZmRzLCB3YWl0LCB0aW1lb3V0KTsN CisJZmRjb3VudCA9IGRvX3BvbGwobmZkcywgZmRzLCB0aW1lb3V0KTsNCiAN CiAJLyogT0ssIG5vdyBjb3B5IHRoZSByZXZlbnRzIGZpZWxkcyBiYWNrIHRv IHVzZXIgc3BhY2UuICovDQogCWZkczEgPSBmZHM7DQpAQCAtNDI2LDggKzU2 MCw2IEBADQogb3V0X2ZkczoNCiAJa2ZyZWUoZmRzKTsNCiBvdXQ6DQotCWlm ICh3YWl0KQ0KLQkJZnJlZV93YWl0KHdhaXRfdGFibGUpOw0KIAl1bmxvY2tf a2VybmVsKCk7DQogCXJldHVybiBlcnI7DQogfQ0KZGlmZiAtdXIgLS1leGNs dWRlPS5kZXBlbmQgLS1leGNsdWRlPS5oZGVwZW5kIC0tZXhjbHVkZT0qLmZs YWdzIC0tZXhjbHVkZT0qLltvYV0gbGludXgtMi4zLjEzLm9sZC9pbmNsdWRl L2xpbnV4L3BvbGwuaCBsaW51eC0yLjMuMTMrL2luY2x1ZGUvbGludXgvcG9s bC5oDQotLS0gbGludXgtMi4zLjEzLm9sZC9pbmNsdWRlL2xpbnV4L3BvbGwu aAlUaHUgQXVnIDEyIDEwOjM2OjQ0IDE5OTkNCisrKyBsaW51eC0yLjMuMTMr L2luY2x1ZGUvbGludXgvcG9sbC5oCVR1ZSBBdWcgMTcgMTE6MjE6NDYgMTk5 OQ0KQEAgLTEyLDE1ICsxMiwyMSBAQA0KIA0KIA0KIHN0cnVjdCBwb2xsX3Rh YmxlX2VudHJ5IHsNCisJaW50IG47DQogCXN0cnVjdCBmaWxlICogZmlscDsN CiAJd2FpdF9xdWV1ZV90IHdhaXQ7DQogCXdhaXRfcXVldWVfaGVhZF90ICog d2FpdF9hZGRyZXNzOw0KIH07DQogDQotdHlwZWRlZiBzdHJ1Y3QgcG9sbF90 YWJsZV9zdHJ1Y3Qgew0KLQlzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKiBu ZXh0Ow0KLQl1bnNpZ25lZCBpbnQgbnI7DQorc3RydWN0IHBvbGxfdGFibGVf aGVhZCB7DQorCXN0cnVjdCBwb2xsX3RhYmxlX2hlYWQgKiBuZXh0Ow0KIAlz dHJ1Y3QgcG9sbF90YWJsZV9lbnRyeSAqIGVudHJ5Ow0KK307DQorDQordHlw ZWRlZiBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3Qgew0KKwlpbnQgbjsNCisJ ZXZlbnRfcXVldWVfdCBldl9xdWV1ZTsNCisJc3RydWN0IHBvbGxfdGFibGVf aGVhZCAqIGhlYWQsICogbGFzdDsNCiB9IHBvbGxfdGFibGU7DQogDQogI2Rl ZmluZSBfX01BWF9QT0xMX1RBQkxFX0VOVFJJRVMgKChQQUdFX1NJWkUgLSBz aXplb2YgKHBvbGxfdGFibGUpKSAvIHNpemVvZiAoc3RydWN0IHBvbGxfdGFi bGVfZW50cnkpKQ0KQEAgLTUxLDE1ICs1Nyw2IEBADQogdHlwZWRlZiB1bnNp Z25lZCBsb25nIGtlcm5lbF9mZF9zZXRbS0ZEU19OUi9fX05GREJJVFNdOw0K IA0KIC8qDQotICogU2NhbGVhYmxlIHZlcnNpb24gb2YgdGhlIGZkX3NldC4N Ci0gKi8NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotCXVuc2lnbmVkIGxvbmcg KmluLCAqb3V0LCAqZXg7DQotCXVuc2lnbmVkIGxvbmcgKnJlc19pbiwgKnJl c19vdXQsICpyZXNfZXg7DQotfSBmZF9zZXRfYml0czsNCi0NCi0vKg0KICAq IEhvdyBtYW55IGxvbmd3b3JkcyBmb3IgIm5yIiBiaXRzPw0KICAqLw0KICNk ZWZpbmUgRkRTX0JJVFBFUkxPTkcJKDgqc2l6ZW9mKGxvbmcpKQ0KQEAgLTg2 LDIxICs4Myw2IEBADQogCW1lbXNldChmZHNldCwgMCwgbnIpOw0KIAlyZXR1 cm4gMDsNCiB9DQotDQotc3RhdGljIGlubGluZQ0KLXZvaWQgc2V0X2ZkX3Nl dCh1bnNpZ25lZCBsb25nIG5yLCB2b2lkICp1ZmRzZXQsIHVuc2lnbmVkIGxv bmcgKmZkc2V0KQ0KLXsNCi0JaWYgKHVmZHNldCkNCi0JCV9fY29weV90b191 c2VyKHVmZHNldCwgZmRzZXQsIEZEU19CWVRFUyhucikpOw0KLX0NCi0NCi1z dGF0aWMgaW5saW5lDQotdm9pZCB6ZXJvX2ZkX3NldCh1bnNpZ25lZCBsb25n IG5yLCB1bnNpZ25lZCBsb25nICpmZHNldCkNCi17DQotCW1lbXNldChmZHNl dCwgMCwgRkRTX0JZVEVTKG5yKSk7DQotfQ0KLQ0KLWV4dGVybiBpbnQgZG9f c2VsZWN0KGludCBuLCBmZF9zZXRfYml0cyAqZmRzLCBsb25nICp0aW1lb3V0 KTsNCiANCiAjZW5kaWYgLyogS0VSTkVMICovDQogDQpkaWZmIC11ciAtLWV4 Y2x1ZGU9LmRlcGVuZCAtLWV4Y2x1ZGU9LmhkZXBlbmQgLS1leGNsdWRlPSou ZmxhZ3MgLS1leGNsdWRlPSouW29hXSBsaW51eC0yLjMuMTMub2xkL2luY2x1 ZGUvbGludXgvd2FpdC5oIGxpbnV4LTIuMy4xMysvaW5jbHVkZS9saW51eC93 YWl0LmgNCi0tLSBsaW51eC0yLjMuMTMub2xkL2luY2x1ZGUvbGludXgvd2Fp dC5oCVRodSBBdWcgMTIgMTA6MzY6NDIgMTk5OQ0KKysrIGxpbnV4LTIuMy4x MysvaW5jbHVkZS9saW51eC93YWl0LmgJVHVlIEF1ZyAxNyAxMToyMTo0NCAx OTk5DQpAQCAtNDEsMTAgKzQxLDE5IEBADQogfSB3aGlsZSAoMCkNCiAjZW5k aWYNCiANCitzdHJ1Y3QgX19ldmVudF9xdWV1ZSB7DQorCXNwaW5sb2NrX3Qg bG9jazsNCisJc3RydWN0IF9fd2FpdF9xdWV1ZSAqaGVhZDsNCisJc3RydWN0 IF9fd2FpdF9xdWV1ZSAqKnRhaWw7DQorfTsNCit0eXBlZGVmIHN0cnVjdCBf X2V2ZW50X3F1ZXVlIGV2ZW50X3F1ZXVlX3Q7DQorDQogc3RydWN0IF9fd2Fp dF9xdWV1ZSB7DQogCXVuc2lnbmVkIGludCBjb21waWxlcl93YXJuaW5nOw0K IAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrOw0KIAlzdHJ1Y3QgbGlzdF9o ZWFkIHRhc2tfbGlzdDsNCisJc3RydWN0IF9fZXZlbnRfcXVldWUgKmV2X3F1 ZXVlOw0KKwlzdHJ1Y3QgX193YWl0X3F1ZXVlICpldl9uZXh0Ow0KICNpZiBX QUlUUVVFVUVfREVCVUcNCiAJbG9uZyBfX21hZ2ljOw0KIAlsb25nIF9fd2Fr ZXI7DQpAQCAtMTA3LDcgKzExNiw3IEBADQogI2VuZGlmDQogDQogI2RlZmlu ZSBfX1dBSVRRVUVVRV9JTklUSUFMSVpFUihuYW1lLHRhc2spIFwNCi0JeyAw eDEyMzQ1NjcsIHRhc2ssIHsgTlVMTCwgTlVMTCB9IF9fV0FJVFFVRVVFX0RF QlVHX0lOSVQobmFtZSl9DQorCXsgMHgxMjM0NTY3LCB0YXNrLCB7IE5VTEws IE5VTEwgfSwgTlVMTCwgTlVMTCBfX1dBSVRRVUVVRV9ERUJVR19JTklUKG5h bWUpfQ0KICNkZWZpbmUgREVDTEFSRV9XQUlUUVVFVUUobmFtZSx0YXNrKSBc DQogCXdhaXRfcXVldWVfdCBuYW1lID0gX19XQUlUUVVFVUVfSU5JVElBTEla RVIobmFtZSx0YXNrKQ0KIA0KQEAgLTE0MCw2ICsxNDksNyBAQA0KIAkJV1Ff QlVHKCk7DQogI2VuZGlmDQogCXEtPnRhc2sgPSBwOw0KKwlxLT5ldl9xdWV1 ZSA9IE5VTEw7DQogI2lmIFdBSVRRVUVVRV9ERUJVRw0KIAlxLT5fX21hZ2lj ID0gKGxvbmcpJnEtPl9fbWFnaWM7DQogI2VuZGlmDQpAQCAtMTk1LDYgKzIw NSwxNyBAQA0KIAlDSEVDS19NQUdJQyhvbGQtPl9fbWFnaWMpOw0KICNlbmRp Zg0KIAlsaXN0X2RlbCgmb2xkLT50YXNrX2xpc3QpOw0KK30NCisNCisNCisj ZGVmaW5lIERFQ0xBUkVfRVZFTlRRVUVVRShuYW1lKSBcDQorCWV2ZW50X3F1 ZXVlX3QgbmFtZSA9IHsgU1BJTl9MT0NLX1VOTE9DS0VELCBOVUxMLCAmbmFt ZS5oZWFkIH0NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9ldmVudHF1 ZXVlKGV2ZW50X3F1ZXVlX3QgKnEpDQorew0KKwlzcGluX2xvY2tfaW5pdCgm cS0+bG9jayk7DQorCXEtPmhlYWQgPSBOVUxMOw0KKwlxLT50YWlsID0gJnEt PmhlYWQ7DQogfQ0KIA0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovDQpkaWZm IC11ciAtLWV4Y2x1ZGU9LmRlcGVuZCAtLWV4Y2x1ZGU9LmhkZXBlbmQgLS1l eGNsdWRlPSouZmxhZ3MgLS1leGNsdWRlPSouW29hXSBsaW51eC0yLjMuMTMu b2xkL2tlcm5lbC9zY2hlZC5jIGxpbnV4LTIuMy4xMysva2VybmVsL3NjaGVk LmMNCi0tLSBsaW51eC0yLjMuMTMub2xkL2tlcm5lbC9zY2hlZC5jCVRodSBB dWcgMTIgMDk6NTk6MDUgMTk5OQ0KKysrIGxpbnV4LTIuMy4xMysva2VybmVs L3NjaGVkLmMJVHVlIEF1ZyAxNyAxMDo1MzoxMiAxOTk5DQpAQCAtODcxLDEy ICs4NzEsMjMgQEANCiAJd2hpbGUgKHRtcCAhPSBoZWFkKSB7DQogCQl1bnNp Z25lZCBpbnQgc3RhdGU7DQogICAgICAgICAgICAgICAgIHdhaXRfcXVldWVf dCAqY3VyciA9IGxpc3RfZW50cnkodG1wLCB3YWl0X3F1ZXVlX3QsIHRhc2tf bGlzdCk7DQorCQlldmVudF9xdWV1ZV90ICpldiA9IGN1cnItPmV2X3F1ZXVl Ow0KIA0KIAkJdG1wID0gdG1wLT5uZXh0Ow0KIA0KICNpZiBXQUlUUVVFVUVf REVCVUcNCiAJCUNIRUNLX01BR0lDKGN1cnItPl9fbWFnaWMpOw0KICNlbmRp Zg0KKwkJaWYgKGV2KSB7DQorCQkJaWYgKGV2ICE9ICh2b2lkICopIC0xKSB7 DQorCQkJCWN1cnItPmV2X25leHQgPSBOVUxMOw0KKwkJCQlzcGluX2xvY2so JmV2LT5sb2NrKTsNCisJCQkJKihldi0+dGFpbCkgPSBjdXJyOw0KKwkJCQll di0+dGFpbCA9ICZjdXJyLT5ldl9uZXh0Ow0KKwkJCQlzcGluX3VubG9jaygm ZXZfbG9jayk7DQorCQkJfQ0KKwkJCWN1cnItPmV2X3F1ZXVlID0gTlVMTDsN CisJCX0NCiAJCXAgPSBjdXJyLT50YXNrOw0KIAkJc3RhdGUgPSBwLT5zdGF0 ZTsNCiAJCWlmIChzdGF0ZSAmIG1vZGUpIHsNCg== --279709697-1923193217-934974691=:2205--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/