Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Sat, 11 Nov 2000 12:53:46 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Sat, 11 Nov 2000 12:53:37 -0500 Received: from e31.co.us.ibm.com ([32.97.110.129]:32970 "EHLO e31.bld.us.ibm.com") by vger.kernel.org with ESMTP id ; Sat, 11 Nov 2000 12:53:29 -0500 Importance: Normal Subject: [patch] wakeup_bdflush related fixes and nfsd optimizations for test10 To: linux-kernel@vger.kernel.org Cc: torvalds@transmeta.com X-Mailer: Lotus Notes Release 5.0.2a (Intl) 23 November 1999 Message-ID: From: "Ying Chen/Almaden/IBM" Date: Sat, 11 Nov 2000 09:53:21 -0800 X-MIMETrack: Serialize by Router on D03NM042/03/M/IBM(Release 5.0.5 |September 22, 2000) at 11/11/2000 09:53:23 AM MIME-Version: 1.0 Content-type: multipart/mixed; Boundary="0__=88256994006194048f9e8a93df938690918c8825699400619404" Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --0__=88256994006194048f9e8a93df938690918c8825699400619404 Content-type: text/plain; charset=us-ascii Hi, This patch includes two sets of things against test10: First, there are several places where schedule() is called after wakeup_bdflush(1) is called. This is completely unnecessary, since wakeup_bdflush(1) already gave up the control, and when the control is returned to the calling thread who called wakeup_bdflush(1), it should just go on. Calling schedule() after wakeup_bdflush(1) will make the calling thread give up control again. This is a problem for some of those latency sensitive benchmarks (like SPEC SFS) and applications. Second, (I have posted this to the kernel mailing list, but I forgot to cc to Linus.) I made some optimizations on racache in nfsd in test10. The idea is to replace with existing fixed length table for readahead cache in NFSD with a hash table. The old racache is essentially ineffective in dealing with large # of files, and yet eats CPU cycles in scanning the table (even though the table is small), the hash table-based is much more effective and fast. I have generated the patch for test10 and tested it. (See attached file: a) Ying Chen ying@almaden.ibm.com IBM Almaden Research Center --0__=88256994006194048f9e8a93df938690918c8825699400619404 Content-type: application/octet-stream; name="a" Content-Disposition: attachment; filename="a" Content-transfer-encoding: base64 ZGlmZiAtcnVOIG1tLm9yaWcvaGlnaG1lbS5jIG1tLm9wdC9oaWdobWVtLmMNCi0tLSBtbS5vcmln L2hpZ2htZW0uYwlXZWQgT2N0IDE4IDE0OjI1OjQ2IDIwMDANCisrKyBtbS5vcHQvaGlnaG1lbS5j CUZyaSBOb3YgMTAgMTc6NTE6MzkgMjAwMA0KQEAgLTMxMCw4ICszMTAsNiBAQA0KIAliaCA9IGtt ZW1fY2FjaGVfYWxsb2MoYmhfY2FjaGVwLCBTTEFCX0JVRkZFUik7DQogCWlmICghYmgpIHsNCiAJ CXdha2V1cF9iZGZsdXNoKDEpOyAgLyogU2V0cyB0YXNrLT5zdGF0ZSB0byBUQVNLX1JVTk5JTkcg Ki8NCi0JCWN1cnJlbnQtPnBvbGljeSB8PSBTQ0hFRF9ZSUVMRDsNCi0JCXNjaGVkdWxlKCk7DQog CQlnb3RvIHJlcGVhdF9iaDsNCiAJfQ0KIAkvKg0KQEAgLTMyNCw4ICszMjIsNiBAQA0KIAlwYWdl ID0gYWxsb2NfcGFnZShHRlBfQlVGRkVSKTsNCiAJaWYgKCFwYWdlKSB7DQogCQl3YWtldXBfYmRm bHVzaCgxKTsgIC8qIFNldHMgdGFzay0+c3RhdGUgdG8gVEFTS19SVU5OSU5HICovDQotCQljdXJy ZW50LT5wb2xpY3kgfD0gU0NIRURfWUlFTEQ7DQotCQlzY2hlZHVsZSgpOw0KIAkJZ290byByZXBl YXRfcGFnZTsNCiAJfQ0KIAlzZXRfYmhfcGFnZShiaCwgcGFnZSwgMCk7DQpkaWZmIC1ydU4gZnMu b3JpZy9idWZmZXIuYyBmcy5vcHQvYnVmZmVyLmMNCi0tLSBmcy5vcmlnL2J1ZmZlci5jCVRodSBP Y3QgMTIgMTQ6MTk6MzIgMjAwMA0KKysrIGZzLm9wdC9idWZmZXIuYwlGcmkgTm92IDEwIDIwOjA1 OjQ0IDIwMDANCkBAIC03MDcsMTEgKzcwNyw4IEBADQogICovDQogc3RhdGljIHZvaWQgcmVmaWxs X2ZyZWVsaXN0KGludCBzaXplKQ0KIHsNCi0JaWYgKCFncm93X2J1ZmZlcnMoc2l6ZSkpIHsNCisJ aWYgKCFncm93X2J1ZmZlcnMoc2l6ZSkpIA0KIAkJd2FrZXVwX2JkZmx1c2goMSk7ICAvKiBTZXRz IHRhc2stPnN0YXRlIHRvIFRBU0tfUlVOTklORyAqLw0KLQkJY3VycmVudC0+cG9saWN5IHw9IFND SEVEX1lJRUxEOw0KLQkJc2NoZWR1bGUoKTsNCi0JfQ0KIH0NCiANCiB2b2lkIGluaXRfYnVmZmVy KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJoX2VuZF9pb190ICpoYW5kbGVyLCB2b2lkICpwcml2 YXRlKQ0KZGlmZiAtcnVOIG5mc2Qub3JpZy9uZnNkLmggbmZzZC5vcHQvbmZzZC5oDQotLS0gbmZz ZC5vcmlnL25mc2QuaAlGcmkgTm92IDEwIDE1OjI3OjM3IDIwMDANCisrKyBuZnNkLm9wdC9uZnNk LmgJRnJpIE5vdiAxMCAxNjowMzo0MyAyMDAwDQpAQCAtNzYsNyArNzYsNyBAQA0KIA0KIC8qIG5m c2QvdmZzLmMgKi8NCiBpbnQJCWZoX2xvY2tfcGFyZW50KHN0cnVjdCBzdmNfZmggKiwgc3RydWN0 IGRlbnRyeSAqKTsNCi1pbnQJCW5mc2RfcmFjYWNoZV9pbml0KGludCk7DQoraW50CQluZnNkX3Jh Y2FjaGVfaW5pdCh2b2lkKTsNCiB2b2lkCQluZnNkX3JhY2FjaGVfc2h1dGRvd24odm9pZCk7DQog aW50CQluZnNkX2xvb2t1cChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLA0KIAkJ CQljb25zdCBjaGFyICosIGludCwgc3RydWN0IHN2Y19maCAqKTsNCmRpZmYgLXJ1TiBuZnNkLm9y aWcvcmFjYWNoZS5oIG5mc2Qub3B0L3JhY2FjaGUuaA0KLS0tIG5mc2Qub3JpZy9yYWNhY2hlLmgJ RnJpIE5vdiAxMCAxNjoxMDoyMyAyMDAwDQorKysgbmZzZC5vcHQvcmFjYWNoZS5oCUZyaSBOb3Yg MTAgMTU6NTA6NDkgMjAwMA0KQEAgLTAsMCArMSw0MyBAQA0KKy8qDQorICogaW5jbHVkZS9saW51 eC9uZnNkL3JhY2FjaGUuaA0KKyAqDQorICogUmVhZCBhaGVhZCByYWNhY2hlLiANCisgKi8NCisN CisjaWZuZGVmIE5GU1JBQ0FDSEVfSA0KKyNkZWZpbmUgTkZTUkFDQUNIRV9IDQorDQorI2lmZGVm IF9fS0VSTkVMX18NCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4NCisNCisvKg0KKyAqIFRoaXMg aXMgYSBjYWNoZSBvZiByZWFkYWhlYWQgcGFyYW1zIHRoYXQgaGVscCB1cyBjaG9vc2UgdGhlIHBy b3Blcg0KKyAqIHJlYWRhaGVhZCBzdHJhdGVneS4gSW5pdGlhbGx5LCB3ZSBzZXQgYWxsIHJlYWRh aGVhZCBwYXJhbWV0ZXJzIHRvIDANCisgKiBhbmQgbGV0IHRoZSBWRlMgaGFuZGxlIHRoaW5ncy4N CisgKiBJZiB5b3UgaW5jcmVhc2UgdGhlIG51bWJlciBvZiBjYWNoZWQgZmlsZXMgdmVyeSBtdWNo LCB5b3UnbGwgbmVlZCB0bw0KKyAqIGFkZCBhIGhhc2ggdGFibGUgaGVyZS4NCisgKi8NCisvKg0K KyAqIFJlcHJlc2VudGF0aW9uIG9mIGFuIHJhY2FjaGUgZW50cnkuIFRoZSBmaXJzdCB0d28gbWVt YmVycyAqbXVzdCoNCisgKiBiZSBoYXNoX25leHQgYW5kIGhhc2hfcHJldi4NCisgKi8NCitzdHJ1 Y3QgcmFwYXJtcyB7DQorCXN0cnVjdCByYXBhcm1zCQkqcF9oYXNoX25leHQ7DQorCXN0cnVjdCBy YXBhcm1zCQkqcF9oYXNoX3ByZXY7DQorCXN0cnVjdCByYXBhcm1zCQkqcF9scnVfbmV4dDsNCisJ c3RydWN0IHJhcGFybXMJCSpwX2xydV9wcmV2Ow0KKwlpbm9fdAkJCXBfaW5vOw0KKwlkZXZfdAkJ CXBfZGV2Ow0KKwl1bnNpZ25lZCBsb25nCQlwX3JlYWRhLA0KKwkJCQlwX3JhbWF4LA0KKwkJCQlw X3JhZW5kLA0KKwkJCQlwX3JhbGVuLA0KKwkJCQlwX3Jhd2luOw0KK307DQorDQoraW50IG5mc2Rf cmFjYWNoZV9pbml0KHZvaWQpOw0KK3ZvaWQJbmZzZF9yYWNhY2hlX3NodXRkb3duKHZvaWQpOw0K K3N0cnVjdCByYXBhcm1zICpuZnNkX2dldF9yYXBhcm1zKGRldl90ICwgaW5vX3QgKTsNCisNCisj ZW5kaWYgLyogX19LRVJORUxfXyAqLw0KKyNlbmRpZiAvKiBORlNSQUNBQ0hFX0ggKi8NCmRpZmYg LXJ1TiBuZnNkLm9yaWcvc3RhdHMuaCBuZnNkLm9wdC9zdGF0cy5oDQotLS0gbmZzZC5vcmlnL3N0 YXRzLmgJVHVlIEp1bCAxOCAyMzowNDowNiAyMDAwDQorKysgbmZzZC5vcHQvc3RhdHMuaAlGcmkg Tm92IDEwIDE1OjUxOjUyIDIwMDANCkBAIC0yNSw4ICsyNSw4IEBADQogCQkJCQkgKiBvZiBhdmFp bGFibGUgdGhyZWFkcyB3ZXJlIGluIHVzZSAqLw0KIAl1bnNpZ25lZCBpbnQJdGhfZnVsbGNudDsJ LyogbnVtYmVyIG9mIHRpbWVzIGxhc3QgZnJlZSB0aHJlYWQgd2FzIHVzZWQgKi8NCiAJdW5zaWdu ZWQgaW50CXJhX3NpemU7CS8qIHNpemUgb2YgcmEgY2FjaGUgKi8NCi0JdW5zaWduZWQgaW50CXJh X2RlcHRoWzExXTsJLyogbnVtYmVyIG9mIHRpbWVzIHJhIGVudHJ5IHdhcyBmb3VuZCB0aGF0IGRl ZXANCi0JCQkJCSAqIGluIHRoZSBjYWNoZSAoMTBwZXJjZW50aWxlcykuIFsxMF0gPSBub3QgZm91 bmQgKi8NCisJdW5zaWduZWQgaW50CXJhX2hpdHM7CS8qIHJhIGNhY2hlIGhpdHMgKi8NCisJdW5z aWduZWQgaW50CXJhX21pc3NlczsJLyogcmEgY2FjaGUgbWlzc2VzICovDQogfTsNCiANCiAvKiB0 aHJlYWQgdXNhZ2Ugd3JhcHMgdmVyeSBtaWxsaW9uIHNlY29uZHMgKGFwcHJveCBvbmUgZm9ydG5p Z2h0KSAqLw0KZGlmZiAtcnVOIG5mc2Qub3JpZy9NYWtlZmlsZSBuZnNkLm9wdC9NYWtlZmlsZQ0K LS0tIG5mc2Qub3JpZy9NYWtlZmlsZQlXZWQgRGVjICA4IDE1OjE3OjU1IDE5OTkNCisrKyBuZnNk Lm9wdC9NYWtlZmlsZQlGcmkgTm92IDEwIDE3OjEwOjU2IDIwMDANCkBAIC05LDcgKzksNyBAQA0K IA0KIE9fVEFSR0VUIDo9IG5mc2Qubw0KIE9fT0JKUyAgIDo9IG5mc3N2Yy5vIG5mc2N0bC5vIG5m c3Byb2MubyBuZnNmaC5vIHZmcy5vIFwNCi0JICAgIGV4cG9ydC5vIGF1dGgubyBsb2NrZC5vIG5m c2NhY2hlLm8gbmZzeGRyLm8gXA0KKwkgICAgZXhwb3J0Lm8gYXV0aC5vIGxvY2tkLm8gbmZzY2Fj aGUubyBuZnNyYWNhY2hlLm8gbmZzeGRyLm8gXA0KIAkgICAgc3RhdHMubw0KIGlmZGVmIENPTkZJ R19ORlNEX1YzDQogICBPX09CSlMgKz0gbmZzM3Byb2MubyBuZnMzeGRyLm8NCmRpZmYgLXJ1TiBu ZnNkLm9yaWcvbmZzcmFjYWNoZS5jIG5mc2Qub3B0L25mc3JhY2FjaGUuYw0KLS0tIG5mc2Qub3Jp Zy9uZnNyYWNhY2hlLmMJV2VkIERlYyAzMSAxNjowMDowMCAxOTY5DQorKysgbmZzZC5vcHQvbmZz cmFjYWNoZS5jCUZyaSBOb3YgMTAgMTc6MDA6NTMgMjAwMA0KQEAgLTAsMCArMSwyMzMgQEANCisv Kg0KKyAqIGxpbnV4L2ZzL25mc2QvbmZzcmFjYWNoZS5jDQorICoNCisgKiBORlNEIHJhY2FjaGUu IA0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bGludXgv c2NoZWQuaD4NCisjaW5jbHVkZSA8bGludXgvbWFsbG9jLmg+DQorI2luY2x1ZGUgPGxpbnV4L3N0 cmluZy5oPg0KKw0KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+DQorI2luY2x1ZGUgPGxp bnV4L25mc2QvbmZzZC5oPg0KKyNpbmNsdWRlIDxsaW51eC9uZnNkL3JhY2FjaGUuaD4NCisNCisj ZGVmaW5lIENBQ0hFU0laRQkJMjA0OA0KKyNkZWZpbmUgSEFTSFNJWkUJCTUxMg0KKyNkZWZpbmUg UkVRSEFTSChpbm8sIGRldikJKCgoKGlubykgPj4gMjQpIF4gKGlubykgXiAoZGV2KSkgJiAoSEFT SFNJWkUtMSkpDQorDQorc3BpbmxvY2tfdCByYWNhY2hlX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NL RUQ7DQorDQorLyoNCisgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHBvaW50ZXJzIGFyZSBpbXBvcnRh bnQuIERvbid0IGNoYW5nZSBpdCB3aXRob3V0IGtub3dpbmcgd2hhdA0KKyAqIHlvdSBhcmUgZG9p bmcuIA0KKyAqLw0KK3N0cnVjdCByYWNhY2hlX2hlYWQgew0KKwlzdHJ1Y3QgcmFwYXJtcyAqCW5l eHQ7DQorCXN0cnVjdCByYXBhcm1zICoJcHJldjsNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgcmFw YXJtcyAqCQlyYXBhcm1fY2FjaGUgPSBOVUxMOw0KK3N0YXRpYyBzdHJ1Y3QgcmFjYWNoZV9oZWFk ICoJaGFzaF9saXN0Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgcmFwYXJtcyAqCWxydV9oZWFkID0gTlVM TDsNCitzdGF0aWMgc3RydWN0IHJhcGFybXMgKglscnVfdGFpbCA9IE5VTEw7DQorc3RhdGljIHN0 cnVjdCByYXBhcm1zICoJZnJlZV9oZWFkOw0KK3N0YXRpYyBzdHJ1Y3QgcmFwYXJtcyAqCWZyZWVf dGFpbDsNCisNCitpbnQNCituZnNkX3JhY2FjaGVfaW5pdCh2b2lkKQ0KK3sNCisJc3RydWN0IHJh cGFybXMJKnJwOw0KKwlzdHJ1Y3QgcmFjYWNoZV9oZWFkCSpyYWhlYWQ7DQorCXNpemVfdAkJCWk7 DQorCXVuc2lnbmVkIGxvbmcJCW9yZGVyOw0KKw0KKwlscnVfaGVhZCA9IE5VTEw7DQorCWxydV90 YWlsID0gTlVMTDsNCisJaSA9IENBQ0hFU0laRSAqIHNpemVvZiAoc3RydWN0IHJhcGFybXMpOw0K Kwlmb3IgKG9yZGVyID0gMDsgKFBBR0VfU0laRSA8PCBvcmRlcikgPCBpOyBvcmRlcisrKQ0KKwkJ Ow0KKwlyYXBhcm1fY2FjaGUgPSAoc3RydWN0IHJhcGFybXMgKikNCisJCV9fZ2V0X2ZyZWVfcGFn ZXMoR0ZQX0tFUk5FTCwgb3JkZXIpOw0KKwlpZiAoIXJhcGFybV9jYWNoZSkgew0KKwkJcHJpbnRr IChLRVJOX0VSUiAibmZzZDogY2Fubm90IGFsbG9jYXRlICVaZCBieXRlcyBmb3IgcmFjYWNoZVxu IiwgaSk7DQorCQlyZXR1cm4gLTE7DQorCX0NCisJbWVtc2V0KHJhcGFybV9jYWNoZSwgMCwgaSk7 DQorDQorCWkgPSBIQVNIU0laRSAqIHNpemVvZiAoc3RydWN0IHJhY2FjaGVfaGVhZCk7DQorCWhh c2hfbGlzdCA9IGttYWxsb2MgKGksIEdGUF9LRVJORUwpOw0KKwlpZiAoIWhhc2hfbGlzdCkgew0K KwkJZnJlZV9wYWdlcyAoKHVuc2lnbmVkIGxvbmcpcmFwYXJtX2NhY2hlLCBvcmRlcik7DQorCQly YXBhcm1fY2FjaGUgPSBOVUxMOw0KKwkJcHJpbnRrIChLRVJOX0VSUiAibmZzZDogY2Fubm90IGFs bG9jYXRlICVaZCBieXRlcyBmb3IgaGFzaCBsaXN0IGluIHJhY2FjaGVcbiIsIGkpOw0KKwkJcmV0 dXJuIC0xOw0KKwl9DQorDQorCXNwaW5fbG9jaygmcmFjYWNoZV9sb2NrKTsgDQorCWZvciAoaSA9 IDAsIHJhaGVhZCA9IGhhc2hfbGlzdDsgaSA8IEhBU0hTSVpFOyBpKyssIHJhaGVhZCsrKQ0KKwkJ cmFoZWFkLT5uZXh0ID0gcmFoZWFkLT5wcmV2ID0gKHN0cnVjdCByYXBhcm1zICopIHJhaGVhZDsN CisNCisJZm9yIChpID0gMCwgcnAgPSByYXBhcm1fY2FjaGU7IGkgPCBDQUNIRVNJWkU7IGkrKywg cnArKykgew0KKwkJcnAtPnBfaGFzaF9uZXh0ID0gcnAtPnBfaGFzaF9wcmV2ID0gcnA7DQorCQly cC0+cF9scnVfbmV4dCA9IHJwICsgMTsNCisJCXJwLT5wX2xydV9wcmV2ID0gcnAgLSAxOw0KKwl9 DQorCWZyZWVfaGVhZCA9IHJhcGFybV9jYWNoZTsNCisJZnJlZV90YWlsID0gcmFwYXJtX2NhY2hl ICsgQ0FDSEVTSVpFIC0gMTsNCisJZnJlZV9oZWFkLT5wX2xydV9wcmV2ID0gTlVMTDsNCisJZnJl ZV90YWlsLT5wX2xydV9uZXh0ID0gTlVMTDsNCisJc3Bpbl91bmxvY2soJnJhY2FjaGVfbG9jayk7 IA0KKw0KKwluZnNkc3RhdHMucmFfc2l6ZSA9IENBQ0hFU0laRTsNCisJcmV0dXJuIDA7DQorfQ0K Kw0KK3ZvaWQNCituZnNkX3JhY2FjaGVfc2h1dGRvd24odm9pZCkNCit7DQorCXNpemVfdAkJCWk7 DQorCXVuc2lnbmVkIGxvbmcJCW9yZGVyOw0KKw0KKwlpID0gQ0FDSEVTSVpFICogc2l6ZW9mIChz dHJ1Y3QgcmFwYXJtcyk7DQorCWZvciAob3JkZXIgPSAwOyAoUEFHRV9TSVpFIDw8IG9yZGVyKSA8 IGk7IG9yZGVyKyspDQorCQk7DQorCXNwaW5fbG9jaygmcmFjYWNoZV9sb2NrKTsgDQorCWZyZWVf cGFnZXMgKCh1bnNpZ25lZCBsb25nKXJhcGFybV9jYWNoZSwgb3JkZXIpOw0KKwlyYXBhcm1fY2Fj aGUgPSBOVUxMOw0KKwlrZnJlZSAoaGFzaF9saXN0KTsNCisJaGFzaF9saXN0ID0gTlVMTDsNCisJ c3Bpbl91bmxvY2soJnJhY2FjaGVfbG9jayk7IA0KK30NCisNCisvKg0KKyAqIE1vdmUgY2FjaGUg ZW50cnkgZnJvbSBMUlUgbGlzdCB0byBmcm9udCBvZiBMUlUgbGlzdA0KKyAqLw0KK3N0YXRpYyB2 b2lkDQorbHJ1X3B1dF9mcm9udChzdHJ1Y3QgcmFwYXJtcyAqcnApDQorew0KKwlzdHJ1Y3QgcmFw YXJtcwkqcHJldiA9IHJwLT5wX2xydV9wcmV2LA0KKwkJCQkqbmV4dCA9IHJwLT5wX2xydV9uZXh0 Ow0KKw0KKwlpZiAocHJldikNCisJCXByZXYtPnBfbHJ1X25leHQgPSBuZXh0Ow0KKwllbHNlDQor CQlyZXR1cm47DQorCWlmIChuZXh0KQ0KKwkJbmV4dC0+cF9scnVfcHJldiA9IHByZXY7DQorCWVs c2UNCisJCWxydV90YWlsID0gcHJldjsNCisNCisJcnAtPnBfbHJ1X25leHQgPSBscnVfaGVhZDsN CisJcnAtPnBfbHJ1X3ByZXYgPSBOVUxMOw0KKwlscnVfaGVhZC0+cF9scnVfcHJldiA9IHJwOw0K KwlscnVfaGVhZCA9IHJwOw0KK30NCisNCisvKg0KKyAqIE1vdmUgY2FjaGUgZW50cnkgZnJvbSB0 aGUgZnJlZSBsaXN0IHRvIGZyb250IG9mIExSVSBsaXN0DQorICovDQorc3RhdGljIHZvaWQNCits cnVfaW5zZXJ0X2Zyb250KHN0cnVjdCByYXBhcm1zICpycCkNCit7DQorCXJwLT5wX2xydV9wcmV2 ID0gTlVMTDsNCisJcnAtPnBfbHJ1X25leHQgPSBscnVfaGVhZDsNCisJaWYgKGxydV9oZWFkKQ0K KwkJbHJ1X2hlYWQtPnBfbHJ1X3ByZXYgPSBycDsNCisJbHJ1X2hlYWQgPSBycDsNCisJaWYgKCFs cnVfdGFpbCkNCisJCWxydV90YWlsID0gcnA7DQorfQ0KKw0KKy8qDQorICogTW92ZSBjYWNoZSBl bnRyeSBmcm9tIHRoZSBmcmVlIGxpc3QgdG8gZnJvbnQgb2YgTFJVIGxpc3QNCisgKiBNZWFud2hp bGUsIHJlbW92ZSBpdCBmcm9tIHRoZSBoYXNoIGxpc3QgYWxzby4NCisgKi8NCitzdGF0aWMgc3Ry dWN0IHJhcGFybXMgKmxydV9yZW1vdmVfaXRlbShzdHJ1Y3QgcmFwYXJtcyAqaXRlbSkNCit7DQor CXN0cnVjdCByYXBhcm1zCSpycDsNCisJc3RydWN0IHJhcGFybXMJKnByZXY7IA0KKwlzdHJ1Y3Qg cmFwYXJtcwkqbmV4dDsgDQorDQorCXJwID0gaXRlbS0+cF9scnVfcHJldjsNCisJaWYgKGl0ZW0g IT0gbHJ1X2hlYWQpIHsNCisJCXJwLT5wX2xydV9uZXh0ID0gaXRlbS0+cF9scnVfbmV4dDsNCisJ CWlmIChycC0+cF9scnVfbmV4dCkgDQorCQkJcnAtPnBfbHJ1X25leHQtPnBfbHJ1X3ByZXYgPSBy cDsNCisJfSBlbHNlIHsNCisJCWxydV9oZWFkID0gaXRlbS0+cF9scnVfbmV4dDsNCisJCWlmIChs cnVfaGVhZCkgDQorCQkJbHJ1X2hlYWQtPnBfbHJ1X3ByZXYgPSBOVUxMOw0KKwl9DQorCWl0ZW0t PnBfbHJ1X3ByZXYgPSBOVUxMOw0KKwlpdGVtLT5wX2xydV9uZXh0ID0gTlVMTDsNCisJaWYgKGl0 ZW0gPT0gbHJ1X3RhaWwpDQorCQlscnVfdGFpbCA9IHJwOw0KKwlwcmV2ID0gaXRlbS0+cF9oYXNo X3ByZXYsDQorCW5leHQgPSBpdGVtLT5wX2hhc2hfbmV4dDsNCisJcHJldi0+cF9oYXNoX25leHQg PSBuZXh0Ow0KKwluZXh0LT5wX2hhc2hfcHJldiA9IHByZXY7DQorCWl0ZW0tPnBfaGFzaF9uZXh0 ID0gTlVMTDsNCisJaXRlbS0+cF9oYXNoX3ByZXYgPSBOVUxMOw0KKw0KKwlyZXR1cm4gaXRlbTsN Cit9DQorDQorDQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcmFwYXJtcwkqDQorbmZzZF9yYWNhY2hl X2luc2VydChpbm9fdCBpbm8sIGRldl90IGRldikNCit7DQorCXN0cnVjdCByYXBhcm1zCSpyYSA9 IE5VTEw7DQorCXN0cnVjdCByYWNhY2hlX2hlYWQgKnJhcDsNCisNCisJaWYgKCFmcmVlX2hlYWQp IHsNCisJCS8qIFJlcGxhY2Ugd2l0aCBMUlUuICovDQorCQlpZiAobHJ1X3RhaWwpIA0KKwkJCXJh ID0gbHJ1X3JlbW92ZV9pdGVtKGxydV90YWlsKTsNCisJfSBlbHNlIHsNCisJCXJhID0gZnJlZV9o ZWFkOw0KKwkJZnJlZV9oZWFkID0gZnJlZV9oZWFkLT5wX2xydV9uZXh0OyANCisJfQ0KKwltZW1z ZXQocmEsIDAsIHNpemVvZigqcmEpKTsNCisJcmEtPnBfZGV2ID0gZGV2Ow0KKwlyYS0+cF9pbm8g PSBpbm87DQorCXJhcCA9IChzdHJ1Y3QgcmFjYWNoZV9oZWFkICopICZoYXNoX2xpc3RbUkVRSEFT SChpbm8sIGRldildOw0KKwlyYS0+cF9oYXNoX25leHQgPSByYXAtPm5leHQ7DQorCXJhLT5wX2hh c2hfcHJldiA9IChzdHJ1Y3QgcmFwYXJtcyAqKSByYXA7DQorCXJhcC0+bmV4dC0+cF9oYXNoX3By ZXYgPSByYTsNCisJcmFwLT5uZXh0ID0gcmE7DQorDQorCWxydV9pbnNlcnRfZnJvbnQocmEpOw0K KwlyZXR1cm4gcmE7DQorfQ0KKw0KKy8qDQorICogVHJ5IHRvIGZpbmQgYW4gZW50cnkgbWF0Y2hp bmcgdGhlIGN1cnJlbnQgY2FsbCBpbiB0aGUgY2FjaGUuIFdoZW4gbm9uZQ0KKyAqIGlzIGZvdW5k LCB3ZSBncmFiIHRoZSBvbGRlc3QgdW5sb2NrZWQgZW50cnkgb2ZmIHRoZSBMUlUgbGlzdC4NCisg KiBOb3RlIHRoYXQgbm8gb3BlcmF0aW9uIHdpdGhpbiB0aGUgbG9vcCBtYXkgc2xlZXAuDQorICov DQorc3RydWN0IHJhcGFybXMgKg0KK25mc2RfZ2V0X3JhcGFybXMoZGV2X3QgZGV2LCBpbm9fdCBp bm8pDQorew0KKwlzdHJ1Y3QgcmFwYXJtcwkqcmFoZWFkOw0KKwlzdHJ1Y3QgcmFwYXJtcwkqcmEg PSBOVUxMOw0KKw0KKwlzcGluX2xvY2soJnJhY2FjaGVfbG9jayk7DQorDQorCXJhID0gcmFoZWFk ID0gKHN0cnVjdCByYXBhcm1zICopICZoYXNoX2xpc3RbUkVRSEFTSChpbm8sIGRldildOw0KKwl3 aGlsZSAoKHJhID0gcmEtPnBfaGFzaF9uZXh0KSAhPSByYWhlYWQpIHsNCisJICAgICAJaWYgKChy YS0+cF9pbm8gPT0gaW5vKSAmJiAocmEtPnBfZGV2ID09IGRldikpIHsgDQorCQkJbHJ1X3B1dF9m cm9udChyYSk7DQorCQkJbmZzZHN0YXRzLnJhX2hpdHMrKzsNCisJCQlnb3RvIGZvdW5kOw0KKwkJ fQ0KKwl9DQorCS8qIERpZCBub3QgZmluZCBvbmUuIEdldCBhIG5ldyBpdGVtIGFuZCBpbnNlcnQg aXQgaW50byB0aGUgaGFzaCB0YWJsZS4gKi8NCisJcmEgPSBuZnNkX3JhY2FjaGVfaW5zZXJ0KGlu bywgZGV2KTsNCisJbmZzZHN0YXRzLnJhX21pc3NlcysrOw0KK2ZvdW5kOg0KKwlzcGluX3VubG9j aygmcmFjYWNoZV9sb2NrKTsNCisJcmV0dXJuIHJhOw0KK30NCmRpZmYgLXJ1TiBuZnNkLm9yaWcv bmZzc3ZjLmMgbmZzZC5vcHQvbmZzc3ZjLmMNCi0tLSBuZnNkLm9yaWcvbmZzc3ZjLmMJU3VuIE9j dCAgMSAyMDozNToxNiAyMDAwDQorKysgbmZzZC5vcHQvbmZzc3ZjLmMJRnJpIE5vdiAxMCAxNzow MzowOSAyMDAwDQpAQCAtNDMsNyArNDMsNyBAQA0KIHN0YXRpYyB2b2lkCQkJbmZzZChzdHJ1Y3Qg c3ZjX3Jxc3QgKnJxc3RwKTsNCiBzdHJ1Y3QgdGltZXZhbAkJCW5mc3N2Y19ib290Ow0KIHN0YXRp YyBzdHJ1Y3Qgc3ZjX3NlcnYgCQkqbmZzZF9zZXJ2Ow0KLXN0YXRpYyBpbnQJCQluZnNkX2J1c3k7 DQorc3RhdGljIGF0b21pY190CQkJbmZzZF9idXN5Ow0KIHN0YXRpYyB1bnNpZ25lZCBsb25nCQlu ZnNkX2xhc3RfY2FsbDsNCiANCiBzdHJ1Y3QgbmZzZF9saXN0IHsNCkBAIC03Miw3ICs3Miw3IEBA DQogCQlucnNlcnZzID0gTkZTRF9NQVhTRVJWUzsNCiAJDQogCS8qIFJlYWRhaGVhZCBwYXJhbSBj YWNoZSAtIHdpbGwgbm8tb3AgaWYgaXQgYWxyZWFkeSBleGlzdHMgKi8NCi0JZXJyb3IgPQluZnNk X3JhY2FjaGVfaW5pdCgyKm5yc2VydnMpOw0KKwllcnJvciA9CW5mc2RfcmFjYWNoZV9pbml0KCk7 DQogCWlmIChlcnJvcjwwKQ0KIAkJZ290byBvdXQ7DQogCWlmICghbmZzZF9zZXJ2KSB7DQpAQCAt MTg1LDggKzE4NSw4IEBADQogCQkgICAgOw0KIAkJaWYgKGVyciA8IDApDQogCQkJYnJlYWs7DQot CQl1cGRhdGVfdGhyZWFkX3VzYWdlKG5mc2RfYnVzeSk7DQotCQluZnNkX2J1c3krKzsNCisJCXVw ZGF0ZV90aHJlYWRfdXNhZ2UoYXRvbWljX3JlYWQoJm5mc2RfYnVzeSkpOw0KKwkJYXRvbWljX2lu YygmbmZzZF9idXN5KTsNCiANCiAJCS8qIExvY2sgdGhlIGV4cG9ydCBoYXNoIHRhYmxlcyBmb3Ig cmVhZGluZy4gKi8NCiAJCWV4cF9yZWFkbG9jaygpOw0KQEAgLTIwNSw4ICsyMDUsOCBAQA0KIA0K IAkJLyogVW5sb2NrIGV4cG9ydCBoYXNoIHRhYmxlcyAqLw0KIAkJZXhwX3VubG9jaygpOw0KLQkJ dXBkYXRlX3RocmVhZF91c2FnZShuZnNkX2J1c3kpOw0KLQkJbmZzZF9idXN5LS07DQorCQl1cGRh dGVfdGhyZWFkX3VzYWdlKGF0b21pY19yZWFkKCZuZnNkX2J1c3kpKTsNCisJCWF0b21pY19kZWMo Jm5mc2RfYnVzeSk7DQogCX0NCiANCiAJaWYgKGVyciAhPSAtRUlOVFIpIHsNCmRpZmYgLXJ1TiBu ZnNkLm9yaWcvc3RhdHMuYyBuZnNkLm9wdC9zdGF0cy5jDQotLS0gbmZzZC5vcmlnL3N0YXRzLmMJ VHVlIEp1bCAxOCAyMzowNDowNiAyMDAwDQorKysgbmZzZC5vcHQvc3RhdHMuYwlGcmkgTm92IDEw IDE3OjA0OjUyIDIwMDANCkBAIC0xNSw5ICsxNSw4IEBADQogICoJdGggPHRocmVhZHM+IDxmdWxs Y250PiA8MTAlLTIwJT4gPDIwJS0zMCU+IC4uLiA8OTAlLTEwMCU+IDwxMDAlPiANCiAgKgkJCXRp bWUgKHNlY29uZHMpIHdoZW4gbmZzZCB0aHJlYWQgdXNhZ2UgYWJvdmUgdGhyZXNob2xkcw0KICAq CQkJYW5kIG51bWJlciBvZiB0aW1lcyB0aGF0IGFsbCB0aHJlYWRzIHdlcmUgaW4gdXNlDQotICoJ cmEgY2FjaGUtc2l6ZSAgPDEwJSAgPDIwJSAgPDMwJSAuLi4gPDEwMCUgbm90LWZvdW5kDQotICoJ CQludW1iZXIgb2YgdGltZXMgdGhhdCByZWFkLWFoZWFkIGVudHJ5IHdhcyBmb3VuZCB0aGF0IGRl ZXAgaW4NCi0gKgkJCXRoZSBjYWNoZS4NCisgKglyYSBjYWNoZS1zaXplICA8cmFjYWNoZS1zaXpl PiA8aGl0cz4gPG1pc3Nlcz4gDQorCQkJcmFjYWNoZSBzaXplLCBoaXRzLCBhbmQgbWlzc2VzDQog ICoJcGx1cyBnZW5lcmljIFJQQyBzdGF0cyAoc2VlIG5ldC9zdW5ycGMvc3RhdHMuYykNCiAgKg0K ICAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBPbGFmIEtpcmNoIDxva2lyQG1vbmFk LnN3Yi5kZT4NCkBAIC02NSwxMSArNjQsOCBAQA0KIAl9DQogDQogCS8qIG5ld2xpbmUgYW5kIHJh LWNhY2hlICovDQotCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJcbnJhICV1IiwgbmZzZHN0 YXRzLnJhX3NpemUpOw0KLQlmb3IgKGk9MDsgaTwxMTsgaSsrKQ0KLQkJbGVuICs9IHNwcmludGYo YnVmZmVyK2xlbiwgIiAldSIsIG5mc2RzdGF0cy5yYV9kZXB0aFtpXSk7DQotCWxlbiArPSBzcHJp bnRmKGJ1ZmZlcitsZW4sICJcbiIpOw0KLQkNCisJbGVuICs9IHNwcmludGYoYnVmZmVyK2xlbiwg IlxucmEgJXUgJXUgJXVcbiIsIG5mc2RzdGF0cy5yYV9zaXplLCANCisJCQluZnNkc3RhdHMucmFf aGl0cywgbmZzZHN0YXRzLnJhX21pc3Nlcyk7DQogDQogCS8qIEFzc3VtZSB3ZSBoYXZlbid0IGhp dCBFT0YgeWV0LiBXaWxsIGJlIHNldCBieSBzdmNfcHJvY19yZWFkLiAqLw0KIAkqZW9mID0gMDsN CmRpZmYgLXJ1TiBuZnNkLm9yaWcvdmZzLmMgbmZzZC5vcHQvdmZzLmMNCi0tLSBuZnNkLm9yaWcv dmZzLmMJTW9uIE9jdCAxNiAxMjo1ODo1MSAyMDAwDQorKysgbmZzZC5vcHQvdmZzLmMJRnJpIE5v diAxMCAxNzowOToyMyAyMDAwDQpAQCAtMzYsNiArMzYsNyBAQA0KIA0KICNpbmNsdWRlIDxsaW51 eC9zdW5ycGMvc3ZjLmg+DQogI2luY2x1ZGUgPGxpbnV4L25mc2QvbmZzZC5oPg0KKyNpbmNsdWRl IDxsaW51eC9uZnNkL3JhY2FjaGUuaD4NCiAjaWZkZWYgQ09ORklHX05GU0RfVjMNCiAjaW5jbHVk ZSA8bGludXgvbmZzMy5oPg0KICNpbmNsdWRlIDxsaW51eC9uZnNkL3hkcjMuaD4NCkBAIC01Niwy OCArNTcsNiBAQA0KICNkZWZpbmUgSVNfSVNNTkRMSyhpKQkoU19JU1JFRygoaSktPmlfbW9kZSkg JiYgTUFOREFUT1JZX0xPQ0soaSkpDQogDQogLyoNCi0gKiBUaGlzIGlzIGEgY2FjaGUgb2YgcmVh ZGFoZWFkIHBhcmFtcyB0aGF0IGhlbHAgdXMgY2hvb3NlIHRoZSBwcm9wZXINCi0gKiByZWFkYWhl YWQgc3RyYXRlZ3kuIEluaXRpYWxseSwgd2Ugc2V0IGFsbCByZWFkYWhlYWQgcGFyYW1ldGVycyB0 byAwDQotICogYW5kIGxldCB0aGUgVkZTIGhhbmRsZSB0aGluZ3MuDQotICogSWYgeW91IGluY3Jl YXNlIHRoZSBudW1iZXIgb2YgY2FjaGVkIGZpbGVzIHZlcnkgbXVjaCwgeW91J2xsIG5lZWQgdG8N Ci0gKiBhZGQgYSBoYXNoIHRhYmxlIGhlcmUuDQotICovDQotc3RydWN0IHJhcGFybXMgew0KLQlz dHJ1Y3QgcmFwYXJtcwkJKnBfbmV4dDsNCi0JdW5zaWduZWQgaW50CQlwX2NvdW50Ow0KLQlpbm9f dAkJCXBfaW5vOw0KLQlkZXZfdAkJCXBfZGV2Ow0KLQl1bnNpZ25lZCBsb25nCQlwX3JlYWRhLA0K LQkJCQlwX3JhbWF4LA0KLQkJCQlwX3JhZW5kLA0KLQkJCQlwX3JhbGVuLA0KLQkJCQlwX3Jhd2lu Ow0KLX07DQotDQotc3RhdGljIHN0cnVjdCByYXBhcm1zICoJCXJhcGFybWw7DQotc3RhdGljIHN0 cnVjdCByYXBhcm1zICoJCXJhcGFybV9jYWNoZTsNCi0NCi0vKg0KICAqIExvb2sgdXAgb25lIGNv bXBvbmVudCBvZiBhIHBhdGhuYW1lLg0KICAqIE4uQi4gQWZ0ZXIgdGhpcyBjYWxsIF9ib3RoXyBm aHAgYW5kIHJlc2ZoIG5lZWQgYW4gZmhfcHV0DQogICoNCkBAIC01NDAsNDIgKzUxOSw2IEBADQog fQ0KIA0KIC8qDQotICogT2J0YWluIHRoZSByZWFkYWhlYWQgcGFyYW1ldGVycyBmb3IgdGhlIGZp bGUNCi0gKiBzcGVjaWZpZWQgYnkgKGRldiwgaW5vKS4NCi0gKi8NCi1zdGF0aWMgaW5saW5lIHN0 cnVjdCByYXBhcm1zICoNCi1uZnNkX2dldF9yYXBhcm1zKGRldl90IGRldiwgaW5vX3QgaW5vKQ0K LXsNCi0Jc3RydWN0IHJhcGFybXMJKnJhLCAqKnJhcCwgKipmcmFwID0gTlVMTDsNCi0JaW50IGRl cHRoID0gMDsNCi0JDQotCWZvciAocmFwID0gJnJhcGFybV9jYWNoZTsgKHJhID0gKnJhcCk7IHJh cCA9ICZyYS0+cF9uZXh0KSB7DQotCQlpZiAocmEtPnBfaW5vID09IGlubyAmJiByYS0+cF9kZXYg PT0gZGV2KQ0KLQkJCWdvdG8gZm91bmQ7DQotCQlkZXB0aCsrOw0KLQkJaWYgKHJhLT5wX2NvdW50 ID09IDApDQotCQkJZnJhcCA9IHJhcDsNCi0JfQ0KLQlkZXB0aCA9IG5mc2RzdGF0cy5yYV9zaXpl KjExLzEwOw0KLQlpZiAoIWZyYXApDQotCQlyZXR1cm4gTlVMTDsNCi0JcmFwID0gZnJhcDsNCi0J cmEgPSAqZnJhcDsNCi0JbWVtc2V0KHJhLCAwLCBzaXplb2YoKnJhKSk7DQotCXJhLT5wX2RldiA9 IGRldjsNCi0JcmEtPnBfaW5vID0gaW5vOw0KLWZvdW5kOg0KLQlpZiAocmFwICE9ICZyYXBhcm1f Y2FjaGUpIHsNCi0JCSpyYXAgPSByYS0+cF9uZXh0Ow0KLQkJcmEtPnBfbmV4dCAgID0gcmFwYXJt X2NhY2hlOw0KLQkJcmFwYXJtX2NhY2hlID0gcmE7DQotCX0NCi0JcmEtPnBfY291bnQrKzsNCi0J bmZzZHN0YXRzLnJhX2RlcHRoW2RlcHRoKjEwL25mc2RzdGF0cy5yYV9zaXplXSsrOw0KLQlyZXR1 cm4gcmE7DQotfQ0KLQ0KLS8qDQogICogUmVhZCBkYXRhIGZyb20gYSBmaWxlLiBjb3VudCBtdXN0 IGNvbnRhaW4gdGhlIHJlcXVlc3RlZCByZWFkIGNvdW50DQogICogb24gZW50cnkuIE9uIHJldHVy biwgKmNvdW50IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVhZC4NCiAg KiBOLkIuIEFmdGVyIHRoaXMgY2FsbCBmaHAgbmVlZHMgYW4gZmhfcHV0DQpAQCAtNjI2LDcgKzU2 OSw2IEBADQogCQlyYS0+cF9yYWVuZCA9IGZpbGUuZl9yYWVuZDsNCiAJCXJhLT5wX3JhbGVuID0g ZmlsZS5mX3JhbGVuOw0KIAkJcmEtPnBfcmF3aW4gPSBmaWxlLmZfcmF3aW47DQotCQlyYS0+cF9j b3VudCAtPSAxOw0KIAl9DQogDQogCWlmIChlcnIgPj0gMCkgew0KQEAgLTE1NDYsNDIgKzE0ODgs NCBAQA0KIAkJZXJyID0gcGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMpOw0KIA0KIAlyZXR1cm4g ZXJyPyBuZnNlcnJubyhlcnIpIDogMDsNCi19DQotDQotdm9pZA0KLW5mc2RfcmFjYWNoZV9zaHV0 ZG93bih2b2lkKQ0KLXsNCi0JaWYgKCFyYXBhcm1fY2FjaGUpDQotCQlyZXR1cm47DQotCWRwcmlu dGsoIm5mc2Q6IGZyZWVpbmcgcmVhZGFoZWFkIGJ1ZmZlcnMuXG4iKTsNCi0Ja2ZyZWUocmFwYXJt bCk7DQotCXJhcGFybV9jYWNoZSA9IHJhcGFybWwgPSBOVUxMOw0KLX0NCi0vKg0KLSAqIEluaXRp YWxpemUgcmVhZGFoZWFkIHBhcmFtIGNhY2hlDQotICovDQotaW50DQotbmZzZF9yYWNhY2hlX2lu aXQoaW50IGNhY2hlX3NpemUpDQotew0KLQlpbnQJaTsNCi0NCi0JaWYgKHJhcGFybV9jYWNoZSkN Ci0JCXJldHVybiAwOw0KLQlyYXBhcm1sID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJhcGFybXMp ICogY2FjaGVfc2l6ZSwgR0ZQX0tFUk5FTCk7DQotDQotCWlmIChyYXBhcm1sICE9IE5VTEwpIHsN Ci0JCWRwcmludGsoIm5mc2Q6IGFsbG9jYXRpbmcgJWQgcmVhZGFoZWFkIGJ1ZmZlcnMuXG4iLA0K LQkJCWNhY2hlX3NpemUpOw0KLQkJbWVtc2V0KHJhcGFybWwsIDAsIHNpemVvZihzdHJ1Y3QgcmFw YXJtcykgKiBjYWNoZV9zaXplKTsNCi0JCWZvciAoaSA9IDA7IGkgPCBjYWNoZV9zaXplIC0gMTsg aSsrKSB7DQotCQkJcmFwYXJtbFtpXS5wX25leHQgPSByYXBhcm1sICsgaSArIDE7DQotCQl9DQot CQlyYXBhcm1fY2FjaGUgPSByYXBhcm1sOw0KLQl9IGVsc2Ugew0KLQkJcHJpbnRrKEtFUk5fV0FS TklORw0KLQkJICAgICAgICJuZnNkOiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IHJlYWQtYWhl YWQgY2FjaGUuXG4iKTsNCi0JCXJldHVybiAtRU5PTUVNOw0KLQl9DQotCW5mc2RzdGF0cy5yYV9z aXplID0gY2FjaGVfc2l6ZTsNCi0JcmV0dXJuIDA7DQogfQ0K --0__=88256994006194048f9e8a93df938690918c8825699400619404-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/