[PATCH]: for discussion - buffer cache growth

Chuck Lever (cel@monkey.org)
Fri, 12 Mar 1999 01:13:40 -0500 (EST)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

--0-152035907-921219220=:17679
Content-Type: TEXT/PLAIN; charset=US-ASCII

here's a patch i've been working on to help reduce system performance
problems when manipulating large files. as i mentioned in an earlier
message to this list, measurable performance degradation occurs when the
buffer cache grows very large. this can occur when copying very large
files, or when running filesystem-intensive applications that have a file
data working set larger than physical memory.

this patch has several purposes.

first, it adds instrumentation to the buffer cache code. this
instrumentation could be used with some later implementation of sar to
gather data about buffer cache performance. i'd like some comments from
the list about whether these are the right set of events to monitor. once
there is a reasonable set of counters, i can add a /proc file that exports
this data from the kernel.

second, it restores an upper bound to buffer cache growth. my theory is
that the degraded scenario occurs when shrink_mmap() begins to steal pages
back from the buffer cache via try_to_free_buffers(). because
shrink_mmap() specifies an arbitrary page it wants back, the buffer cache
LRU ordering is compromised. if this occurs once or twice, usually the
harm is minimal. when this happens repeatedly over a short period of
time, as might happen when the system is experiencing a VM shortage, this
can have catastrophic performance impact.

in order to reduce the number of "buffer shrink" operations, the code now
uses a simple algorithm to decide when to expand the cache size. if there
have been more grow requests than shrink requests, the cache continues to
expand; otherwise, it stops growing the cache until balance is restored.
if the growth request would make the cache larger than
buffer_mem.max_percent, it also stops growing the cache.

third, there is some code clean-up in this patch. panic and console
messages are clearer, and some extraneous code has been removed. as well,
the <alt>-<sysrq>-M output contains new statistics from the
instrumentation i added.

there is still a problem with my patch. when the buffer cache stops
growing, it begins recycling buffers instead of adding fresh pages to the
cache in order to replenish the free buffer list. as soon as this
happens, any filesystem-intensive operations block, although there is
still significant disk activity. programs continue to run, albeit slowly.
you can see this if you watch the "blocked processes" column of vmstat
while applications are running. this behavior is similar to
system/application behavior on the stock kernel during the degraded
scenario, so it might be a good way to reproduce the original problem.

i'd like some help solving the blocked processes problem, and comments on
the instrumentation. thanks!

- Chuck Lever

--
corporate:	<chuckl@netscape.com>
personal:	<chucklever@netscape.net> or <cel@monkey.org>

The Linux Scalability project: http://www.citi.umich.edu/projects/citi-netscape/

--0-152035907-921219220=:17679 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="buffer.patch" Content-Transfer-Encoding: BASE64 Content-ID: <Pine.BSF.4.03.9903120113400.17679@funky.monkey.org> Content-Description: Content-Disposition: attachment; filename="buffer.patch"

ZGlmZiAtdSAtciBsaW51eC0yLjIuMy1yZWZlcmVuY2UvZnMvYnVmZmVyLmMg bGludXgvZnMvYnVmZmVyLmMNCi0tLSBsaW51eC0yLjIuMy1yZWZlcmVuY2Uv ZnMvYnVmZmVyLmMJVHVlIE1hciAgOSAxMzo1ODo0MiAxOTk5DQorKysgbGlu dXgvZnMvYnVmZmVyLmMJRnJpIE1hciAxMiAwMDo0Mjo0OSAxOTk5DQpAQCAt NDksOCArNDksOSBAQA0KICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLA0KICAgNn07DQog DQorI2RlZmluZSBNSU5fQlVGU0laRSA1MTINCiAjZGVmaW5lIEJVRlNJWkVf SU5ERVgoWCkgKChpbnQpIGJ1ZmZlcnNpemVfaW5kZXhbKFgpPj45XSkNCi0j ZGVmaW5lIE1BWF9CVUZfUEVSX1BBR0UgKFBBR0VfU0laRSAvIDUxMikNCisj ZGVmaW5lIE1BWF9CVUZfUEVSX1BBR0UgKFBBR0VfU0laRSAvIE1JTl9CVUZT SVpFKQ0KICNkZWZpbmUgTlJfUkVTRVJWRUQgKDIqTUFYX0JVRl9QRVJfUEFH RSkNCiAjZGVmaW5lIE1BWF9VTlVTRURfQlVGRkVSUyBOUl9SRVNFUlZFRCsy MCAvKiBkb24ndCBldmVyIGhhdmUgbW9yZSB0aGFuIHRoaXMgDQogCQkJCQkg ICAgIG51bWJlciBvZiB1bnVzZWQgYnVmZmVyIGhlYWRzICovDQpAQCAtMTE0 LDYgKzExNSwzNiBAQA0KIGludCBiZGZsdXNoX21pbltOX1BBUkFNXSA9IHsg IDAsICAxMCwgICAgNSwgICAyNSwgIDAsICAgMSpIWiwgICAxKkhaLCAxLCAx fTsNCiBpbnQgYmRmbHVzaF9tYXhbTl9QQVJBTV0gPSB7MTAwLDUwMDAsIDIw MDAsIDIwMDAsMTAwLCA2MDAqSFosIDYwMCpIWiwgMjA0NywgNX07DQogDQor LyoNCisgKiBDYW4gdGhlIGJ1ZmZlciBiZSB0aHJvd24gb3V0Pw0KKyAqLw0K KyNkZWZpbmUgQlVGRkVSX0JVU1lfQklUUwkoKDE8PEJIX0RpcnR5KSB8ICgx PDxCSF9Mb2NrKSB8ICgxPDxCSF9Qcm90ZWN0ZWQpKQ0KKyNkZWZpbmUgYnVm ZmVyX2J1c3koYmgpCQkoKGJoKS0+Yl9jb3VudCB8fCAoKGJoKS0+Yl9zdGF0 ZSAmIEJVRkZFUl9CVVNZX0JJVFMpKQ0KKw0KKy8qIGFsaWduIHRoZSBuZXh0 IHN0cnVjdCAqLw0KK19fYXNtX18gKCIgICAgICAgLmFsaWduIDE2XG4iKTsN CisNCitzdHJ1Y3QgdG90YWxzIHsNCisJdW5zaWduZWQgbG9uZyBsb29rdXBz Ow0KKwl1bnNpZ25lZCBsb25nIGhpdHM7DQorCXVuc2lnbmVkIGxvbmcgbmRp cnR5X3dyaXR0ZW47DQorCXVuc2lnbmVkIGxvbmcgYmRmbHVzaDsNCisJdW5z aWduZWQgbG9uZyBiZGZsdXNoX3dhaXQ7DQorCXVuc2lnbmVkIGxvbmcgd2Fp dF9vbl9idWZmZXI7DQorCXVuc2lnbmVkIGxvbmcgcmVmaWxsczsNCisJdW5z aWduZWQgbG9uZyByZWN5Y2xlZDsNCisJdW5zaWduZWQgbG9uZyBncm93X2J1 ZmZlcnM7DQorCXVuc2lnbmVkIGxvbmcgZnJlZV9idWZmZXJzOw0KKwl1bnNp Z25lZCBsb25nIGZyZWVkX3BhZ2VzOw0KKwl1bnNpZ25lZCBsb25nIGludmFs aWRhdGVzOw0KKwl1bnNpZ25lZCBsb25nIGJyZWFkczsgDQorCXVuc2lnbmVk IGxvbmcgYnJlYWRhczsNCisJdW5zaWduZWQgbG9uZyBicndfcGFnZTsNCisJ dW5zaWduZWQgbG9uZyBicndfcmVhZDsNCit9IGJ1ZmZlcl9jb3VudGVycyA9 IHswLCB9Ow0KKw0KKyN1bmRlZiBERUJVRw0KKw0KIHZvaWQgd2FrZXVwX2Jk Zmx1c2goaW50KTsNCiANCiAvKg0KQEAgLTEzMCw2ICsxNjEsNyBAQA0KIAlz dHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7DQogCXN0cnVjdCB3 YWl0X3F1ZXVlIHdhaXQ7DQogDQorCWJ1ZmZlcl9jb3VudGVycy53YWl0X29u X2J1ZmZlcisrOw0KIAliaC0+Yl9jb3VudCsrOw0KIAl3YWl0LnRhc2sgPSB0 c2s7DQogCWFkZF93YWl0X3F1ZXVlKCZiaC0+Yl93YWl0LCAmd2FpdCk7DQpA QCAtMjE5LDYgKzI1MSw3IEBADQogCQkJYmgtPmJfY291bnQrKzsNCiAJCQlu ZXh0LT5iX2NvdW50Kys7DQogCQkJYmgtPmJfZmx1c2h0aW1lID0gMDsNCisJ CQlidWZmZXJfY291bnRlcnMubmRpcnR5X3dyaXR0ZW4rKzsNCiAJCQlsbF9y d19ibG9jayhXUklURSwgMSwgJmJoKTsNCiAJCQliaC0+Yl9jb3VudC0tOw0K IAkJCW5leHQtPmJfY291bnQtLTsNCkBAIC00MDAsNiArNDMzLDcgQEANCiAJ aW50IG5saXN0Ow0KIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaDsNCiANCisJ YnVmZmVyX2NvdW50ZXJzLmludmFsaWRhdGVzKys7DQogCWZvcihubGlzdCA9 IDA7IG5saXN0IDwgTlJfTElTVDsgbmxpc3QrKykgew0KIAkJYmggPSBscnVf bGlzdFtubGlzdF07DQogCQlmb3IgKGkgPSBucl9idWZmZXJzX3R5cGVbbmxp c3RdKjIgOyAtLWkgPiAwIDsgYmggPSBiaC0+Yl9uZXh0X2ZyZWUpIHsNCkBA IC00MTYsNiArNDUwLDggQEANCiAJCQljbGVhcl9iaXQoQkhfRGlydHksICZi aC0+Yl9zdGF0ZSk7DQogCQkJY2xlYXJfYml0KEJIX1JlcSwgJmJoLT5iX3N0 YXRlKTsNCiAJCX0NCisJCS8qIFhYWCB0aGlzIG91Z2h0IHRvIGFkZCBlYWNo IGJ1ZmZlciB0byB0aGUgYmFjayBvZiB0aGUNCisJCSAgICAgICBmcmVlIGxp c3QsIGVoPyAqLw0KIAl9DQogfQ0KIA0KQEAgLTQzOSw5ICs0NzUsOSBAQA0K IHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZnJvbV9scnVfbGlzdChzdHJ1 Y3QgYnVmZmVyX2hlYWQgKiBiaCkNCiB7DQogCWlmICghKGJoLT5iX3ByZXZf ZnJlZSkgfHwgIShiaC0+Yl9uZXh0X2ZyZWUpKQ0KLQkJcGFuaWMoIlZGUzog TFJVIGJsb2NrIGxpc3QgY29ycnVwdGVkIik7DQorCQlwYW5pYygiVkZTOiBM UlUgbGlzdCBjb3JydXB0ZWQiKTsNCiAJaWYgKGJoLT5iX2RldiA9PSBCX0ZS RUUpDQotCQlwYW5pYygiTFJVIGxpc3QgY29ycnVwdGVkIik7DQorCQlwYW5p YygiVkZTOiBGcmVlIGJ1ZmZlciBmb3VuZCBvbiBMUlUgbGlzdCIpOw0KIAli aC0+Yl9wcmV2X2ZyZWUtPmJfbmV4dF9mcmVlID0gYmgtPmJfbmV4dF9mcmVl Ow0KIAliaC0+Yl9uZXh0X2ZyZWUtPmJfcHJldl9mcmVlID0gYmgtPmJfcHJl dl9mcmVlOw0KIA0KQEAgLTQ1NiwxMSArNDkyLDExIEBADQogew0KIAlpbnQg aXNpemUgPSBCVUZTSVpFX0lOREVYKGJoLT5iX3NpemUpOw0KIAlpZiAoIShi aC0+Yl9wcmV2X2ZyZWUpIHx8ICEoYmgtPmJfbmV4dF9mcmVlKSkNCi0JCXBh bmljKCJWRlM6IEZyZWUgYmxvY2sgbGlzdCBjb3JydXB0ZWQiKTsNCisJCXBh bmljKCJWRlM6IEZyZWUgbGlzdCBjb3JydXB0ZWQiKTsNCiAJaWYoYmgtPmJf ZGV2ICE9IEJfRlJFRSkNCi0JCXBhbmljKCJGcmVlIGxpc3QgY29ycnVwdGVk Iik7DQorCQlwYW5pYygiVkZTOiBJbi11c2UgYnVmZmVyIGZvdW5kIG9uIGZy ZWUgbGlzdCIpOw0KIAlpZighZnJlZV9saXN0W2lzaXplXSkNCi0JCXBhbmlj KCJGcmVlIGxpc3QgZW1wdHkiKTsNCisJCXBhbmljKCJWRlM6IEZyZWUgbGlz dCBlbXB0eSIpOw0KIAlpZihiaC0+Yl9uZXh0X2ZyZWUgPT0gYmgpDQogCQkg ZnJlZV9saXN0W2lzaXplXSA9IE5VTEw7DQogCWVsc2Ugew0KQEAgLTQ4Niw2 NiArNTIyLDYyIEBADQogDQogc3RhdGljIGlubGluZSB2b2lkIHB1dF9sYXN0 X2xydShzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkNCiB7DQotCWlmIChiaCkg ew0KLQkJc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhwID0gJmxydV9saXN0W2Jo LT5iX2xpc3RdOw0KKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHAgPSAmbHJ1 X2xpc3RbYmgtPmJfbGlzdF07DQogDQotCQlpZiAoYmggPT0gKmJocCkgew0K LQkJCSpiaHAgPSBiaC0+Yl9uZXh0X2ZyZWU7DQotCQkJcmV0dXJuOw0KLQkJ fQ0KLQ0KLQkJaWYoYmgtPmJfZGV2ID09IEJfRlJFRSkNCi0JCQlwYW5pYygi V3JvbmcgYmxvY2sgZm9yIGxydSBsaXN0Iik7DQorCWlmIChiaCA9PSAqYmhw KSB7DQorCQkqYmhwID0gYmgtPmJfbmV4dF9mcmVlOw0KKwkJcmV0dXJuOw0K Kwl9DQogDQotCQkvKiBBZGQgdG8gYmFjayBvZiBmcmVlIGxpc3QuICovDQot CQlyZW1vdmVfZnJvbV9scnVfbGlzdChiaCk7DQotCQlpZighKmJocCkgew0K LQkJCSpiaHAgPSBiaDsNCi0JCQkoKmJocCktPmJfcHJldl9mcmVlID0gYmg7 DQotCQl9DQorCWlmKGJoLT5iX2RldiA9PSBCX0ZSRUUpDQorCQlwYW5pYygi cHV0X2xhc3RfbHJ1OiBJbi11c2UgYnVmZmVyIGZvdW5kIG9uIExSVSBsaXN0 Iik7DQogDQotCQliaC0+Yl9uZXh0X2ZyZWUgPSAqYmhwOw0KLQkJYmgtPmJf cHJldl9mcmVlID0gKCpiaHApLT5iX3ByZXZfZnJlZTsNCi0JCSgqYmhwKS0+ Yl9wcmV2X2ZyZWUtPmJfbmV4dF9mcmVlID0gYmg7DQorCS8qIEFkZCB0byBi YWNrIG9mIGxydSBsaXN0LiAqLw0KKwlyZW1vdmVfZnJvbV9scnVfbGlzdChi aCk7DQorCWlmKCEqYmhwKSB7DQorCQkqYmhwID0gYmg7DQogCQkoKmJocCkt PmJfcHJldl9mcmVlID0gYmg7DQogCX0NCisNCisJYmgtPmJfbmV4dF9mcmVl ID0gKmJocDsNCisJYmgtPmJfcHJldl9mcmVlID0gKCpiaHApLT5iX3ByZXZf ZnJlZTsNCisJKCpiaHApLT5iX3ByZXZfZnJlZS0+Yl9uZXh0X2ZyZWUgPSBi aDsNCisJKCpiaHApLT5iX3ByZXZfZnJlZSA9IGJoOw0KIH0NCiANCiBzdGF0 aWMgaW5saW5lIHZvaWQgcHV0X2xhc3RfZnJlZShzdHJ1Y3QgYnVmZmVyX2hl YWQgKiBiaCkNCiB7DQotCWlmIChiaCkgew0KLQkJc3RydWN0IGJ1ZmZlcl9o ZWFkICoqYmhwID0gJmZyZWVfbGlzdFtCVUZTSVpFX0lOREVYKGJoLT5iX3Np emUpXTsNCi0NCi0JCWJoLT5iX2RldiA9IEJfRlJFRTsgIC8qIFNvIGl0IGlz IG9idmlvdXMgd2UgYXJlIG9uIHRoZSBmcmVlIGxpc3QuICovDQorCXN0cnVj dCBidWZmZXJfaGVhZCAqKmJocCA9ICZmcmVlX2xpc3RbQlVGU0laRV9JTkRF WChiaC0+Yl9zaXplKV07DQogDQotCQkvKiBBZGQgdG8gYmFjayBvZiBmcmVl IGxpc3QuICovDQotCQlpZighKmJocCkgew0KLQkJCSpiaHAgPSBiaDsNCi0J CQliaC0+Yl9wcmV2X2ZyZWUgPSBiaDsNCi0JCX0NCisJYmgtPmJfZGV2ID0g Ql9GUkVFOyAgLyogU28gaXQgaXMgb2J2aW91cyB3ZSBhcmUgb24gdGhlIGZy ZWUgbGlzdC4gKi8NCiANCi0JCWJoLT5iX25leHRfZnJlZSA9ICpiaHA7DQot CQliaC0+Yl9wcmV2X2ZyZWUgPSAoKmJocCktPmJfcHJldl9mcmVlOw0KLQkJ KCpiaHApLT5iX3ByZXZfZnJlZS0+Yl9uZXh0X2ZyZWUgPSBiaDsNCi0JCSgq YmhwKS0+Yl9wcmV2X2ZyZWUgPSBiaDsNCisJLyogQWRkIHRvIGJhY2sgb2Yg ZnJlZSBsaXN0LiAqLw0KKwlpZighKmJocCkgew0KKwkJKmJocCA9IGJoOw0K KwkJYmgtPmJfcHJldl9mcmVlID0gYmg7DQogCX0NCisNCisJYmgtPmJfbmV4 dF9mcmVlID0gKmJocDsNCisJYmgtPmJfcHJldl9mcmVlID0gKCpiaHApLT5i X3ByZXZfZnJlZTsNCisJKCpiaHApLT5iX3ByZXZfZnJlZS0+Yl9uZXh0X2Zy ZWUgPSBiaDsNCisJKCpiaHApLT5iX3ByZXZfZnJlZSA9IGJoOw0KIH0NCiAN CiBzdGF0aWMgdm9pZCBpbnNlcnRfaW50b19xdWV1ZXMoc3RydWN0IGJ1ZmZl cl9oZWFkICogYmgpDQogew0KLQkvKiBwdXQgYXQgZW5kIG9mIGZyZWUgbGlz dCAqLw0KIAlpZihiaC0+Yl9kZXYgPT0gQl9GUkVFKSB7DQogCQlwdXRfbGFz dF9mcmVlKGJoKTsNCiAJfSBlbHNlIHsNCiAJCXN0cnVjdCBidWZmZXJfaGVh ZCAqKmJocCA9ICZscnVfbGlzdFtiaC0+Yl9saXN0XTsNCiANCisJCS8qIEFk ZCB0byBiYWNrIG9mIGxydSBsaXN0ICovDQogCQlpZighKmJocCkgew0KIAkJ CSpiaHAgPSBiaDsNCiAJCQliaC0+Yl9wcmV2X2ZyZWUgPSBiaDsNCiAJCX0N CiANCiAJCWlmIChiaC0+Yl9uZXh0X2ZyZWUpDQotCQkJcGFuaWMoIlZGUzog YnVmZmVyIExSVSBwb2ludGVycyBjb3JydXB0ZWQiKTsNCisJCQlwYW5pYygi aW5zZXJ0X2ludG9fcXVldWVzOiBMUlUgbGlzdCBjb3JydXB0ZWQiKTsNCiAN CiAJCWJoLT5iX25leHRfZnJlZSA9ICpiaHA7DQogCQliaC0+Yl9wcmV2X2Zy ZWUgPSAoKmJocCktPmJfcHJldl9mcmVlOw0KQEAgLTU3NSw2ICs2MDcsNyBA QA0KIHsJCQ0KIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBuZXh0Ow0KIA0KKwli dWZmZXJfY291bnRlcnMubG9va3VwcysrOw0KIAluZXh0ID0gaGFzaChkZXYs YmxvY2spOw0KIAlmb3IgKDs7KSB7DQogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQg KnRtcCA9IG5leHQ7DQpAQCAtNTg2LDYgKzYxOSw3IEBADQogCQluZXh0ID0g dG1wOw0KIAkJYnJlYWs7DQogCX0NCisJaWYgKG5leHQpIGJ1ZmZlcl9jb3Vu dGVycy5oaXRzKys7DQogCXJldHVybiBuZXh0Ow0KIH0NCiANCkBAIC01OTks OSArNjMzLDExIEBADQogc3RydWN0IGJ1ZmZlcl9oZWFkICogZ2V0X2hhc2hf dGFibGUoa2Rldl90IGRldiwgaW50IGJsb2NrLCBpbnQgc2l6ZSkNCiB7DQog CXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoOw0KKw0KIAliaCA9IGZpbmRfYnVm ZmVyKGRldixibG9jayxzaXplKTsNCi0JaWYgKGJoKQ0KKwlpZiAoYmgpIHsN CiAJCWJoLT5iX2NvdW50Kys7DQorCX0NCiAJcmV0dXJuIGJoOw0KIH0NCiAN CkBAIC02MzMsOSArNjY5LDkgQEANCiAJaWYgKCFibGtzaXplX3NpemVbTUFK T1IoZGV2KV0pDQogCQlyZXR1cm47DQogDQotCS8qIFNpemUgbXVzdCBiZSBh IHBvd2VyIG9mIHR3bywgYW5kIGJldHdlZW4gNTEyIGFuZCBQQUdFX1NJWkUg Ki8NCi0JaWYgKHNpemUgPiBQQUdFX1NJWkUgfHwgc2l6ZSA8IDUxMiB8fCAo c2l6ZSAmIChzaXplLTEpKSkNCi0JCXBhbmljKCJJbnZhbGlkIGJsb2Nrc2l6 ZSBwYXNzZWQgdG8gc2V0X2Jsb2Nrc2l6ZSIpOw0KKwkvKiBTaXplIG11c3Qg YmUgYSBwb3dlciBvZiB0d28sIGFuZCBiZXR3ZWVuIE1JTl9CVUZTSVpFIGFu ZCBQQUdFX1NJWkUgKi8NCisJaWYgKHNpemUgPiBQQUdFX1NJWkUgfHwgc2l6 ZSA8IE1JTl9CVUZTSVpFIHx8IChzaXplICYgKHNpemUtMSkpKQ0KKwkJcGFu aWMoIlZGUzogSW52YWxpZCBibG9ja3NpemUgcGFzc2VkIHRvIHNldF9ibG9j a3NpemUiKTsNCiANCiAJaWYgKGJsa3NpemVfc2l6ZVtNQUpPUihkZXYpXVtN SU5PUihkZXYpXSA9PSAwICYmIHNpemUgPT0gQkxPQ0tfU0laRSkgew0KIAkJ Ymxrc2l6ZV9zaXplW01BSk9SKGRldildW01JTk9SKGRldildID0gc2l6ZTsN CkBAIC02NzQsMTUgKzcxMCwyNyBAQA0KIAl9DQogfQ0KIA0KLS8qDQotICog V2UgdXNlZCB0byB0cnkgdmFyaW91cyBzdHJhbmdlIHRoaW5ncy4gTGV0J3Mg bm90Lg0KLSAqLw0KLXN0YXRpYyB2b2lkIHJlZmlsbF9mcmVlbGlzdChpbnQg c2l6ZSkNCit2b2lkIHJlY3ljbGVfYnVmZmVycyhpbnQgc2l6ZSkNCiB7DQot CWlmICghZ3Jvd19idWZmZXJzKHNpemUpKSB7DQotCQl3YWtldXBfYmRmbHVz aCgxKTsNCi0JCWN1cnJlbnQtPnBvbGljeSB8PSBTQ0hFRF9ZSUVMRDsNCi0J CXNjaGVkdWxlKCk7DQorCS8qIHRyeSByZWN5Y2xpbmcgYnVmZmVycyAqLw0K KwlpbnQgbmVlZGVkID0gUEFHRV9TSVpFIC8gc2l6ZTsNCisJc3RydWN0IGJ1 ZmZlcl9oZWFkICpuZXh0LCAqYmg7DQorDQorCXJlY292ZXJfcmV1c2FibGVf YnVmZmVyX2hlYWRzKCk7DQorDQorCWJoID0gbHJ1X2xpc3RbQlVGX0NMRUFO XTsNCisJd2hpbGUgKGJoICYmIG5lZWRlZCA+IDApIHsNCisJCW5leHQgPSBi aC0+Yl9uZXh0X2ZyZWU7DQorCQlpZiAoIWJ1ZmZlcl9idXN5KGJoKSAmJg0K KwkJICAgIGJoLT5iX3NpemUgPT0gc2l6ZSkgew0KKwkJCXJlbW92ZV9mcm9t X3F1ZXVlcyhiaCk7DQorCQkJcHV0X2xhc3RfZnJlZShiaCk7DQorCQkJYnVm ZmVyX2NvdW50ZXJzLnJlY3ljbGVkKys7DQorCQkJbmVlZGVkLS07DQorCQl9 DQorCQlpZiAobmV4dCA9PSBscnVfbGlzdFtCVUZfQ0xFQU5dKQ0KKwkJCWJy ZWFrOw0KKwkJYmggPSBuZXh0Ow0KIAl9DQogfQ0KIA0KQEAgLTcwOCw1MiAr NzU2LDQ1IEBADQogICogT2ssIHRoaXMgaXMgZ2V0YmxrLCBhbmQgaXQgaXNu J3QgdmVyeSBjbGVhciwgYWdhaW4gdG8gaGluZGVyDQogICogcmFjZS1jb25k aXRpb25zLiBNb3N0IG9mIHRoZSBjb2RlIGlzIHNlbGRvbSB1c2VkLCAoaWUg cmVwZWF0aW5nKSwNCiAgKiBzbyBpdCBzaG91bGQgYmUgbXVjaCBtb3JlIGVm ZmljaWVudCB0aGFuIGl0IGxvb2tzLg0KLSAqDQotICogVGhlIGFsZ29yaXRo bSBpcyBjaGFuZ2VkOiBob3BlZnVsbHkgYmV0dGVyLCBhbmQgYW4gZWx1c2l2 ZSBidWcgcmVtb3ZlZC4NCi0gKg0KLSAqIDE0LjAyLjkyOiBjaGFuZ2VkIGl0 IHRvIHN5bmMgZGlydHkgYnVmZmVycyBhIGJpdDogYmV0dGVyIHBlcmZvcm1h bmNlDQotICogd2hlbiB0aGUgZmlsZXN5c3RlbSBzdGFydHMgdG8gZ2V0IGZ1 bGwgb2YgZGlydHkgYmxvY2tzIChJIGhvcGUpLg0KICAqLw0KIHN0cnVjdCBi dWZmZXJfaGVhZCAqIGdldGJsayhrZGV2X3QgZGV2LCBpbnQgYmxvY2ssIGlu dCBzaXplKQ0KIHsNCiAJc3RydWN0IGJ1ZmZlcl9oZWFkICogYmg7DQogCWlu dCBpc2l6ZTsNCiANCi1yZXBlYXQ6DQotCWJoID0gZ2V0X2hhc2hfdGFibGUo ZGV2LCBibG9jaywgc2l6ZSk7DQotCWlmIChiaCkgew0KLQkJaWYgKCFidWZm ZXJfZGlydHkoYmgpKSB7DQotCQkJaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkp DQotCQkJCSBwdXRfbGFzdF9scnUoYmgpOw0KLQkJCWJoLT5iX2ZsdXNodGlt ZSA9IDA7DQorCWZvciAoOzspIHsNCisJCWJoID0gZ2V0X2hhc2hfdGFibGUo ZGV2LCBibG9jaywgc2l6ZSk7DQorCQlpZiAoYmgpIHsNCisJCQlwdXRfbGFz dF9scnUoYmgpOw0KKwkJCWlmICghYnVmZmVyX2RpcnR5KGJoKSkNCisJCQkJ YmgtPmJfZmx1c2h0aW1lID0gMDsNCisJCQlyZXR1cm4gYmg7DQogCQl9DQot CQlyZXR1cm4gYmg7DQotCX0NCiANCi0JaXNpemUgPSBCVUZTSVpFX0lOREVY KHNpemUpOw0KLWdldF9mcmVlOg0KLQliaCA9IGZyZWVfbGlzdFtpc2l6ZV07 DQotCWlmICghYmgpDQotCQlnb3RvIHJlZmlsbDsNCi0JcmVtb3ZlX2Zyb21f ZnJlZV9saXN0KGJoKTsNCisJCWlzaXplID0gQlVGU0laRV9JTkRFWChzaXpl KTsNCisJCWRvIHsNCisJCQliaCA9IGZyZWVfbGlzdFtpc2l6ZV07DQorCQkJ aWYgKGJoKSB7DQorCQkJCXJlbW92ZV9mcm9tX2ZyZWVfbGlzdChiaCk7DQor CQkJCWluaXRfYnVmZmVyKGJoLCBkZXYsIGJsb2NrLA0KKwkJCQkJCWVuZF9i dWZmZXJfaW9fc3luYywgTlVMTCk7DQorCQkJCWJoLT5iX3N0YXRlPTA7DQor CQkJCWluc2VydF9pbnRvX3F1ZXVlcyhiaCk7DQorCQkJCXJldHVybiBiaDsN CisJCQl9DQogDQotCS8qIE9LLCBGSU5BTExZIHdlIGtub3cgdGhhdCB0aGlz IGJ1ZmZlciBpcyB0aGUgb25seSBvbmUgb2YgaXRzIGtpbmQsDQotCSAqIGFu ZCB0aGF0IGl0J3MgdW51c2VkIChiX2NvdW50PTApLCB1bmxvY2tlZCwgYW5k IGNsZWFuLg0KLQkgKi8NCi0JaW5pdF9idWZmZXIoYmgsIGRldiwgYmxvY2ss IGVuZF9idWZmZXJfaW9fc3luYywgTlVMTCk7DQotCWJoLT5iX3N0YXRlPTA7 DQotCWluc2VydF9pbnRvX3F1ZXVlcyhiaCk7DQotCXJldHVybiBiaDsNCisJ CQkvKiByZWZpbGwgdGhlIGZyZWUgbGlzdCAqLw0KKwkJCWJ1ZmZlcl9jb3Vu dGVycy5yZWZpbGxzKys7DQogDQotCS8qDQotCSAqIElmIHdlIGJsb2NrIHdo aWxlIHJlZmlsbGluZyB0aGUgZnJlZSBsaXN0LCBzb21lYm9keSBtYXkNCi0J ICogY3JlYXRlIHRoZSBidWZmZXIgZmlyc3QgLi4uIHNlYXJjaCB0aGUgaGFz aGVzIGFnYWluLg0KLQkgKi8NCi1yZWZpbGw6DQotCXJlZmlsbF9mcmVlbGlz dChzaXplKTsNCi0JaWYgKCFmaW5kX2J1ZmZlcihkZXYsYmxvY2ssc2l6ZSkp DQotCQlnb3RvIGdldF9mcmVlOw0KLQlnb3RvIHJlcGVhdDsNCisJCSAgICAg ICAgaWYgKCFncm93X2J1ZmZlcnMoc2l6ZSkpIHsNCisJCQkJcmVjeWNsZV9i dWZmZXJzKHNpemUpOw0KKwkJICAgICAgICAgICAgICAgIHdha2V1cF9iZGZs dXNoKDEpOw0KKyAgICAgICAgICAgICAgICAJCWN1cnJlbnQtPnBvbGljeSB8 PSBTQ0hFRF9ZSUVMRDsNCisgICAgICAgICAgICAgICAgCQlzY2hlZHVsZSgp Ow0KKyAgICAgICAgCQl9DQorCQl9IHdoaWxlICghZmluZF9idWZmZXIoZGV2 LGJsb2NrLHNpemUpKTsNCisJfQ0KKwkvKk5PVFJFQUNIRUQqLw0KIH0NCiAN CiB2b2lkIHNldF93cml0ZXRpbWUoc3RydWN0IGJ1ZmZlcl9oZWFkICogYnVm LCBpbnQgZmxhZykNCkBAIC04NjQsNiArOTA1LDcgQEANCiB7DQogCXN0cnVj dCBidWZmZXJfaGVhZCAqIGJoID0gZ2V0YmxrKGRldiwgYmxvY2ssIHNpemUp Ow0KIA0KKwlidWZmZXJfY291bnRlcnMuYnJlYWRzKys7DQogCWlmIChiaCkg ew0KIAkJdG91Y2hfYnVmZmVyKGJoKTsNCiAJCWlmIChidWZmZXJfdXB0b2Rh dGUoYmgpKQ0KQEAgLTg5Niw2ICs5MzgsNyBAQA0KIAlpbnQgaW5kZXg7DQog CWludCBpLCBqOw0KIA0KKwlidWZmZXJfY291bnRlcnMuYnJlYWRhcysrOw0K IAlpZiAocG9zID49IGZpbGVzaXplKQ0KIAkJcmV0dXJuIE5VTEw7DQogDQpA QCAtMTI0Myw2ICsxMjg2LDEwIEBADQogCXN0cnVjdCBidWZmZXJfaGVhZCAq YmgsICpwcmV2LCAqbmV4dCwgKmFycltNQVhfQlVGX1BFUl9QQUdFXTsNCiAJ aW50IGJsb2NrLCBucjsNCiANCisJYnVmZmVyX2NvdW50ZXJzLmJyd19wYWdl Kys7DQorCWlmIChydyA9PSBSRUFEKQ0KKwkJYnVmZmVyX2NvdW50ZXJzLmJy d19yZWFkKys7DQorDQogCWlmICghUGFnZUxvY2tlZChwYWdlKSkNCiAJCXBh bmljKCJicndfcGFnZTogcGFnZSBub3QgbG9ja2VkIGZvciBJL08iKTsNCiAJ Y2xlYXJfYml0KFBHX3VwdG9kYXRlLCAmcGFnZS0+ZmxhZ3MpOw0KQEAgLTEz MDUsNiArMTM1Miw4IEBADQogCXByZXYtPmJfdGhpc19wYWdlID0gYmg7DQog CQ0KIAlpZiAobnIpIHsNCisJCWlmIChydyA9PSBXUklURSkNCisJCQlidWZm ZXJfY291bnRlcnMubmRpcnR5X3dyaXR0ZW4rKzsNCiAJCWxsX3J3X2Jsb2Nr KHJ3LCBuciwgYXJyKTsNCiAJCS8qIFRoZSByZXN0IG9mIHRoZSB3b3JrIGlz IGRvbmUgaW4gbWFya19idWZmZXJfdXB0b2RhdGUoKQ0KIAkJICogYW5kIHVu bG9ja19idWZmZXIoKS4gKi8NCkBAIC0xMzU2LDcgKzE0MDUsNyBAQA0KIAlz dHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsNCiAJc3Ry dWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsNCiAJdW5zaWdu ZWQgbG9uZyBibG9jazsNCi0JaW50ICpwLCBucltQQUdFX1NJWkUvNTEyXTsN CisJaW50ICpwLCBucltNQVhfQlVGX1BFUl9QQUdFXTsNCiAJaW50IGk7DQog DQogCWF0b21pY19pbmMoJnBhZ2UtPmNvdW50KTsNCkBAIC0xMzg5LDExICsx NDM4LDE4IEBADQogCXN0cnVjdCBidWZmZXJfaGVhZCAqIGluc2VydF9wb2lu dDsNCiAJaW50IGlzaXplOw0KIA0KLQlpZiAoKHNpemUgJiA1MTEpIHx8IChz aXplID4gUEFHRV9TSVpFKSkgew0KKwlidWZmZXJfY291bnRlcnMuZ3Jvd19i dWZmZXJzKys7DQorDQorCWlmICgoc2l6ZSAmIChNSU5fQlVGU0laRS0xKSkg fHwgKHNpemUgPiBQQUdFX1NJWkUpKSB7DQogCQlwcmludGsoIlZGUzogZ3Jv d19idWZmZXJzOiBzaXplID0gJWRcbiIsc2l6ZSk7DQogCQlyZXR1cm4gMDsN CiAJfQ0KIA0KKwlpZiAobnJfZnJlZV9wYWdlcyA8IGZyZWVwYWdlcy5taW4g fHwgYnVmZmVyX292ZXJfbWF4KCkpDQorCQlyZXR1cm4gMDsNCisJaWYgKGJ1 ZmZlcl9jb3VudGVycy5ncm93X2J1ZmZlcnMgPCBidWZmZXJfY291bnRlcnMu ZnJlZV9idWZmZXJzKQ0KKwkJcmV0dXJuIDA7DQorDQogCWlmICghKHBhZ2Ug PSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0JVRkZFUikpKQ0KIAkJcmV0dXJuIDA7 DQogCWJoID0gY3JlYXRlX2J1ZmZlcnMocGFnZSwgc2l6ZSwgMCk7DQpAQCAt MTQzMSwyMiArMTQ4NywyNiBAQA0KIH0NCiANCiAvKg0KLSAqIENhbiB0aGUg YnVmZmVyIGJlIHRocm93biBvdXQ/DQotICovDQotI2RlZmluZSBCVUZGRVJf QlVTWV9CSVRTCSgoMTw8QkhfRGlydHkpIHwgKDE8PEJIX0xvY2spIHwgKDE8 PEJIX1Byb3RlY3RlZCkpDQotI2RlZmluZSBidWZmZXJfYnVzeShiaCkJCSgo YmgpLT5iX2NvdW50IHx8ICgoYmgpLT5iX3N0YXRlICYgQlVGRkVSX0JVU1lf QklUUykpDQotDQotLyoNCiAgKiB0cnlfdG9fZnJlZV9idWZmZXJzKCkgY2hl Y2tzIGlmIGFsbCB0aGUgYnVmZmVycyBvbiB0aGlzIHBhcnRpY3VsYXIgcGFn ZQ0KICAqIGFyZSB1bnVzZWQsIGFuZCBmcmVlJ3MgdGhlIHBhZ2UgaWYgc28u DQogICoNCiAgKiBXYWtlIHVwIGJkZmx1c2goKSBpZiB0aGlzIGZhaWxzIC0g aWYgd2UncmUgcnVubmluZyBsb3cgb24gbWVtb3J5IGR1ZQ0KICAqIHRvIGRp cnR5IGJ1ZmZlcnMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlbSBvdXQgYXMgcXVp Y2tseSBhcyBwb3NzaWJsZS4NCiAgKi8NCi1pbnQgdHJ5X3RvX2ZyZWVfYnVm ZmVycyhzdHJ1Y3QgcGFnZSAqIHBhZ2VfbWFwKQ0KK2ludCB0cnlfdG9fZnJl ZV9idWZmZXJzKHN0cnVjdCBwYWdlICogcGFnZV9tYXAsIGludCBwcmlvcml0 eSkNCiB7DQogCXN0cnVjdCBidWZmZXJfaGVhZCAqIHRtcCwgKiBiaCA9IHBh Z2VfbWFwLT5idWZmZXJzOw0KIA0KKwlidWZmZXJfY291bnRlcnMuZnJlZV9i dWZmZXJzKys7DQorDQorCWlmIChidWZmZXJfdW5kZXJfbWluKCkpIHJldHVy biAwOw0KKw0KKwkvKiBzZW5kIGNhbGxlciBhd2F5IGVtcHR5LWhhbmRlZCB1 bmxlc3MgdGhpcyBpcyB1cmdlbnQgKi8NCisJaWYgKHByaW9yaXR5ID4gNSkg ew0KKwkJd2FrZXVwX2JkZmx1c2goMCk7DQorCQlyZXR1cm4gMDsNCisJfQ0K Kw0KIAl0bXAgPSBiaDsNCiAJZG8gew0KIAkJc3RydWN0IGJ1ZmZlcl9oZWFk ICogcCA9IHRtcDsNCkBAIC0xNDc1LDYgKzE1MzUsNyBAQA0KIAlidWZmZXJt ZW0gLT0gUEFHRV9TSVpFOw0KIAlwYWdlX21hcC0+YnVmZmVycyA9IE5VTEw7 DQogCV9fZnJlZV9wYWdlKHBhZ2VfbWFwKTsNCisJYnVmZmVyX2NvdW50ZXJz LmZyZWVkX3BhZ2VzKys7DQogCXJldHVybiAxOw0KIH0NCiANCkBAIC0xNDg1 LDEzICsxNTQ2LDM4IEBADQogCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoOw0K IAlpbnQgZm91bmQgPSAwLCBsb2NrZWQgPSAwLCBkaXJ0eSA9IDAsIHVzZWQg PSAwLCBsYXN0dXNlZCA9IDA7DQogCWludCBwcm90ZWN0ZWQgPSAwOw0KLQlp bnQgbmxpc3Q7DQorCWludCBubGlzdCwgbnNpemU7DQogCXN0YXRpYyBjaGFy ICpidWZfdHlwZXNbTlJfTElTVF0gPSB7IkNMRUFOIiwiTE9DS0VEIiwiRElS VFkifTsNCiANCiAJcHJpbnRrKCJCdWZmZXIgbWVtb3J5OiAgICU2ZGtCXG4i LGJ1ZmZlcm1lbT4+MTApOw0KIAlwcmludGsoIkJ1ZmZlciBoZWFkczogICAg JTZkXG4iLG5yX2J1ZmZlcl9oZWFkcyk7DQogCXByaW50aygiQnVmZmVyIGJs b2NrczogICAlNmRcbiIsbnJfYnVmZmVycyk7DQogDQorCXByaW50aygibWlu L21heCBidWZmZXIgY2FjaGUgc2l6ZTogJWRLLyVkS1xuIiwNCisJCSh1bnNp Z25lZCBpbnQpIChidWZmZXJfbWVtLm1pbl9wZXJjZW50ICogbnVtX3BoeXNw YWdlcykgLyAyNSwNCisJCSh1bnNpZ25lZCBpbnQpIChidWZmZXJfbWVtLm1h eF9wZXJjZW50ICogbnVtX3BoeXNwYWdlcykgLyAyNSk7DQorCXByaW50aygi Y2FjaGUgaGl0IHJhdGU6ICVkJSUgKCVsZCBoaXRzIGluICVsZCBsb29rdXBz KVxuIiwNCisJCSh1bnNpZ25lZCkgKChidWZmZXJfY291bnRlcnMuaGl0cyAq IDEwMCkvYnVmZmVyX2NvdW50ZXJzLmxvb2t1cHMpLA0KKwkJYnVmZmVyX2Nv dW50ZXJzLmhpdHMsIGJ1ZmZlcl9jb3VudGVycy5sb29rdXBzKTsNCisJcHJp bnRrKCJ0b3RhbCBidWZmZXJzIGZsdXNoZWQ6ICVsZCAgdG90YWwgYnVmZmVy cyByZWN5Y2xlZDogJWxkXG4iLA0KKwkJYnVmZmVyX2NvdW50ZXJzLm5kaXJ0 eV93cml0dGVuLCBidWZmZXJfY291bnRlcnMucmVjeWNsZWQpOw0KKwlwcmlu dGsoImJkZmx1c2ggcnVuczogJWxkICB0aW1lcyB3ZSB3YWl0ZWQgZm9yIGl0 OiAlbGRcbiIsDQorCQlidWZmZXJfY291bnRlcnMuYmRmbHVzaCwgYnVmZmVy X2NvdW50ZXJzLmJkZmx1c2hfd2FpdCk7DQorCXByaW50aygidG90YWwgd2Fp dHMgZm9yIGEgYnVmZmVyOiAlbGRcbiIsDQorCQlidWZmZXJfY291bnRlcnMu d2FpdF9vbl9idWZmZXIpOw0KKwlwcmludGsoInJlcXVlc3RzIHRvIGdyb3cv c2hyaW5rIGJ1ZmZlciBjYWNoZTogJWxkLyVsZFxuIiwNCisJCWJ1ZmZlcl9j b3VudGVycy5ncm93X2J1ZmZlcnMsIGJ1ZmZlcl9jb3VudGVycy5mcmVlX2J1 ZmZlcnMpOw0KKwlwcmludGsoInBhZ2VzIGZyZWVkIGR1cmluZyBzaHJpbmsg cmVxdWVzdHM6ICVsZFxuIiwNCisJCWJ1ZmZlcl9jb3VudGVycy5mcmVlZF9w YWdlcyk7DQorCXByaW50aygiZnJlZSBsaXN0IHJlZmlsbHM6ICVsZFxuIiwg YnVmZmVyX2NvdW50ZXJzLnJlZmlsbHMpOw0KKw0KKwlwcmludGsoImJyZWFk KCkgY2FsbHM6ICVsZCAgYnJlYWRhKCkgY2FsbHM6ICVsZFxuIiwNCisJCWJ1 ZmZlcl9jb3VudGVycy5icmVhZHMsIGJ1ZmZlcl9jb3VudGVycy5icmVhZGFz KTsNCisJcHJpbnRrKCJicndfcGFnZSgpIGNhbGxzOiAlbGQgIHJlYWQvd3Jp dGU6ICVsZC8lbGRcbiIsDQorCQlidWZmZXJfY291bnRlcnMuYnJ3X3BhZ2Us IGJ1ZmZlcl9jb3VudGVycy5icndfcmVhZCwNCisJCShidWZmZXJfY291bnRl cnMuYnJ3X3BhZ2UgLSBidWZmZXJfY291bnRlcnMuYnJ3X3JlYWQpKTsNCisJ cHJpbnRrKCJpbnZhbGlkYXRlczogJWxkXG4iLCBidWZmZXJfY291bnRlcnMu aW52YWxpZGF0ZXMpOw0KKw0KIAlmb3Iobmxpc3QgPSAwOyBubGlzdCA8IE5S X0xJU1Q7IG5saXN0KyspIHsNCiAJICBmb3VuZCA9IGxvY2tlZCA9IGRpcnR5 ID0gdXNlZCA9IGxhc3R1c2VkID0gcHJvdGVjdGVkID0gMDsNCiAJICBiaCA9 IGxydV9saXN0W25saXN0XTsNCkBAIC0xNTE0LDYgKzE2MDAsMTggQEANCiAJ CSBidWZfdHlwZXNbbmxpc3RdLCBmb3VuZCwgdXNlZCwgbGFzdHVzZWQsDQog CQkgbG9ja2VkLCBwcm90ZWN0ZWQsIGRpcnR5KTsNCiAJfTsNCisNCisJZm9y KG5zaXplID0gMDsgbnNpemUgPCBOUl9TSVpFUzsgbnNpemUrKykgew0KKwkg IGZvdW5kID0gMDsNCisJICBiaCA9IGZyZWVfbGlzdFtuc2l6ZV07DQorCSAg aWYoIWJoKSBjb250aW51ZTsNCisNCisJICBkbyB7DQorCQlmb3VuZCsrOw0K KwkJYmggPSBiaC0+Yl9uZXh0X2ZyZWU7DQorCSAgfSB3aGlsZSAoYmggIT0g ZnJlZV9saXN0W25zaXplXSk7DQorCSAgcHJpbnRrKCIgICAgRlJFRTogJWQg JWQgYnl0ZSBidWZmZXJzXG4iLCBmb3VuZCwgKG5zaXplKzEpPDw5KTsNCisJ fQ0KIH0NCiANCiANCkBAIC0xNTMzLDcgKzE2MzEsNyBAQA0KIAloYXNoX3Rh YmxlID0gKHN0cnVjdCBidWZmZXJfaGVhZCAqKikgX19nZXRfZnJlZV9wYWdl cyhHRlBfQVRPTUlDLCBvcmRlcik7DQogCQ0KIAlpZiAoIWhhc2hfdGFibGUp DQotCQlwYW5pYygiRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBoYXNoIHRh YmxlXG4iKTsNCisJCXBhbmljKCJidWZmZXJfaW5pdDogRmFpbGVkIHRvIGFs bG9jYXRlIGJ1ZmZlciBoYXNoIHRhYmxlXG4iKTsNCiAJbWVtc2V0KGhhc2hf dGFibGUsIDAsIG5yX2hhc2ggKiBzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFk ICopKTsNCiAJYmhfaGFzaF9tYXNrID0gbnJfaGFzaC0xOw0KIA0KQEAgLTE1 NDIsNyArMTY0MCw3IEBADQogCQkJCSAgICAgIDAsDQogCQkJCSAgICAgIFNM QUJfSFdDQUNIRV9BTElHTiwgTlVMTCwgTlVMTCk7DQogCWlmKCFiaF9jYWNo ZXApDQotCQlwYW5pYygiQ2Fubm90IGNyZWF0ZSBidWZmZXIgaGVhZCBTTEFC IGNhY2hlXG4iKTsNCisJCXBhbmljKCJidWZmZXJfaW5pdDogQ2Fubm90IGNy ZWF0ZSBidWZmZXIgaGVhZCBTTEFCIGNhY2hlXG4iKTsNCiAJLyoNCiAJICog QWxsb2NhdGUgdGhlIHJlc2VydmVkIGJ1ZmZlciBoZWFkcy4NCiAJICovDQpA QCAtMTU3NSw2ICsxNjczLDggQEANCiB7DQogCWlmIChjdXJyZW50ID09IGJk Zmx1c2hfdHNrKQ0KIAkJcmV0dXJuOw0KKw0KKwlpZiAod2FpdCkgYnVmZmVy X2NvdW50ZXJzLmJkZmx1c2hfd2FpdCsrOw0KIAl3YWtlX3VwKCZiZGZsdXNo X3dhaXQpOw0KIAlpZiAod2FpdCkgew0KIAkJcnVuX3Rhc2tfcXVldWUoJnRx X2Rpc2spOw0KQEAgLTE2NDgsNiArMTc0OCw3IEBADQogI2lmZGVmIERFQlVH DQogCQkJCSBpZihubGlzdCAhPSBCVUZfRElSVFkpIG5jb3VudCsrOw0KICNl bmRpZg0KKwkJCQkgYnVmZmVyX2NvdW50ZXJzLm5kaXJ0eV93cml0dGVuKys7 DQogCQkJCSBsbF9yd19ibG9jayhXUklURSwgMSwgJmJoKTsNCiAJCQkJIGJo LT5iX2NvdW50LS07DQogCQkJCSBuZXh0LT5iX2NvdW50LS07DQpAQCAtMTY1 Niw3ICsxNzU3LDcgQEANCiAJcnVuX3Rhc2tfcXVldWUoJnRxX2Rpc2spOw0K ICNpZmRlZiBERUJVRw0KIAlpZiAobmNvdW50KSBwcmludGsoInN5bmNfb2xk X2J1ZmZlcnM6ICVkIGRpcnR5IGJ1ZmZlcnMgbm90IG9uIGRpcnR5IGxpc3Rc biIsIG5jb3VudCk7DQotCXByaW50aygiV3JvdGUgJWQvJWQgYnVmZmVyc1xu IiwgbndyaXR0ZW4sIG5kaXJ0eSk7DQorCXByaW50aygic3luY19vbGRfYnVm ZmVyczogd3JvdGUgJWQvJWQgYnVmZmVyc1xuIiwgbndyaXR0ZW4sIG5kaXJ0 eSk7DQogI2VuZGlmDQogCXJ1bl90YXNrX3F1ZXVlKCZ0cV9kaXNrKTsNCiAJ cmV0dXJuIDA7DQpAQCAtMTc1Miw2ICsxODUzLDcgQEANCiAjaWZkZWYgREVC VUcNCiAJCXByaW50aygiYmRmbHVzaCgpIGFjdGl2YXRlZC4uLiIpOw0KICNl bmRpZg0KKwkJYnVmZmVyX2NvdW50ZXJzLmJkZmx1c2grKzsNCiANCiAJCUNI RUNLX0VNRVJHRU5DWV9TWU5DDQogDQpAQCAtMTc5OCw2ICsxOTAwLDcgQEAN CiAJCQkJCSAgYmgtPmJfY291bnQrKzsNCiAJCQkJCSAgbmRpcnR5Kys7DQog CQkJCQkgIGJoLT5iX2ZsdXNodGltZSA9IDA7DQorCQkJCQkgIGJ1ZmZlcl9j b3VudGVycy5uZGlydHlfd3JpdHRlbisrOw0KIAkJCQkJICBpZiAobWFqb3Ig PT0gTE9PUF9NQUpPUikgew0KIAkJCQkJCSAgbGxfcndfYmxvY2sod3J0YV9j bWQsMSwgJmJoKTsNCiAJCQkJCQkgIHdydGFfY21kID0gV1JJVEVBOw0KQEAg LTE4MTQsOCArMTkxNyw4IEBADQogCQkJCSAgfQ0KIAkJIH0NCiAjaWZkZWYg REVCVUcNCi0JCWlmIChuY291bnQpIHByaW50aygic3lzX2JkZmx1c2g6ICVk IGRpcnR5IGJ1ZmZlcnMgbm90IG9uIGRpcnR5IGxpc3RcbiIsIG5jb3VudCk7 DQotCQlwcmludGsoInNsZWVwaW5nIGFnYWluLlxuIik7DQorCQlpZiAobmNv dW50KSBwcmludGsoIiVkIGRpcnR5IGJ1ZmZlcnMgbm90IG9uIGRpcnR5IGxp c3RcbiIsIG5jb3VudCk7DQorCQlwcmludGsoIiB3cm90ZSAlZCwgc2xlZXBp bmcgYWdhaW4uXG4iKTsNCiAjZW5kaWYNCiAJCS8qIElmIHdlIGRpZG4ndCB3 cml0ZSBhbnl0aGluZywgYnV0IHRoZXJlIGFyZSBzdGlsbA0KIAkJICogZGly dHkgYnVmZmVycywgdGhlbiBtYWtlIHRoZSBuZXh0IHdyaXRlIHRvIGENCmRp ZmYgLXUgLXIgbGludXgtMi4yLjMtcmVmZXJlbmNlL2luY2x1ZGUvbGludXgv ZnMuaCBsaW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgNCi0tLSBsaW51eC0yLjIu My1yZWZlcmVuY2UvaW5jbHVkZS9saW51eC9mcy5oCVR1ZSBNYXIgIDkgMTM6 NTg6NDQgMTk5OQ0KKysrIGxpbnV4L2luY2x1ZGUvbGludXgvZnMuaAlUaHUg TWFyIDExIDAwOjA4OjUxIDE5OTkNCkBAIC03NDUsNyArNzQ1LDcgQEANCiAN CiBleHRlcm4gdm9pZCByZWZpbGVfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVh ZCAqIGJ1Zik7DQogZXh0ZXJuIHZvaWQgc2V0X3dyaXRldGltZShzdHJ1Y3Qg YnVmZmVyX2hlYWQgKiBidWYsIGludCBmbGFnKTsNCi1leHRlcm4gaW50IHRy eV90b19mcmVlX2J1ZmZlcnMoc3RydWN0IHBhZ2UgKik7DQorZXh0ZXJuIGlu dCB0cnlfdG9fZnJlZV9idWZmZXJzKHN0cnVjdCBwYWdlICosIGludCk7DQog DQogZXh0ZXJuIGludCBucl9idWZmZXJzOw0KIGV4dGVybiBpbnQgYnVmZmVy bWVtOw0KZGlmZiAtdSAtciBsaW51eC0yLjIuMy1yZWZlcmVuY2UvaW5jbHVk ZS9saW51eC9tbS5oIGxpbnV4L2luY2x1ZGUvbGludXgvbW0uaA0KLS0tIGxp bnV4LTIuMi4zLXJlZmVyZW5jZS9pbmNsdWRlL2xpbnV4L21tLmgJVHVlIE1h ciAgOSAxMzo1ODo0NCAxOTk5DQorKysgbGludXgvaW5jbHVkZS9saW51eC9t bS5oCVRodSBNYXIgMTEgMDA6MDg6NTEgMTk5OQ0KQEAgLTM4NCw2ICszODQs OCBAQA0KIA0KICNkZWZpbmUgYnVmZmVyX3VuZGVyX21pbigpCSgoYnVmZmVy bWVtID4+IFBBR0VfU0hJRlQpICogMTAwIDwgXA0KIAkJCQlidWZmZXJfbWVt Lm1pbl9wZXJjZW50ICogbnVtX3BoeXNwYWdlcykNCisjZGVmaW5lIGJ1ZmZl cl9vdmVyX21heCgpCSgoYnVmZmVybWVtID4+IFBBR0VfU0hJRlQpICogMTAw ID4gXA0KKwkJCQlidWZmZXJfbWVtLm1heF9wZXJjZW50ICogbnVtX3BoeXNw YWdlcykNCiAjZGVmaW5lIHBnY2FjaGVfdW5kZXJfbWluKCkJKHBhZ2VfY2Fj aGVfc2l6ZSAqIDEwMCA8IFwNCiAJCQkJcGFnZV9jYWNoZS5taW5fcGVyY2Vu dCAqIG51bV9waHlzcGFnZXMpDQogDQpkaWZmIC11IC1yIGxpbnV4LTIuMi4z LXJlZmVyZW5jZS9tbS9maWxlbWFwLmMgbGludXgvbW0vZmlsZW1hcC5jDQot LS0gbGludXgtMi4yLjMtcmVmZXJlbmNlL21tL2ZpbGVtYXAuYwlUdWUgTWFy ICA5IDEzOjU4OjQ0IDE5OTkNCisrKyBsaW51eC9tbS9maWxlbWFwLmMJV2Vk IE1hciAxMCAxMjozOTozMCAxOTk5DQpAQCAtMTk5LDkgKzE5OSw3IEBADQog DQogCQkvKiBJcyBpdCBhIGJ1ZmZlciBwYWdlPyAqLw0KIAkJaWYgKHBhZ2Ut PmJ1ZmZlcnMpIHsNCi0JCQlpZiAoYnVmZmVyX3VuZGVyX21pbigpKQ0KLQkJ CQljb250aW51ZTsNCi0JCQlpZiAoIXRyeV90b19mcmVlX2J1ZmZlcnMocGFn ZSkpDQorCQkJaWYgKCF0cnlfdG9fZnJlZV9idWZmZXJzKHBhZ2UsIHByaW9y aXR5KSkNCiAJCQkJY29udGludWU7DQogCQkJcmV0dXJuIDE7DQogCQl9DQo= --0-152035907-921219220=:17679--

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