From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751246AbWDFBNo (ORCPT ); Wed, 5 Apr 2006 21:13:44 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751293AbWDFBNo (ORCPT ); Wed, 5 Apr 2006 21:13:44 -0400 Received: from web38009.mail.mud.yahoo.com ([209.191.124.120]:64910 "HELO web38009.mail.mud.yahoo.com") by vger.kernel.org with SMTP id S1751246AbWDFBNn (ORCPT ); Wed, 5 Apr 2006 21:13:43 -0400 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=Message-ID:Received:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=Ri7bq6CXnlJE9mzs36dINdZkWsNE7pUEb94suF46UnJjgqvZjhk7BrTB21MItFampPVXwfR98nQuCg2vHiXCQhOMK7MAEPm3wIIErRW3+G9oFUVMFiVME61cJcb5ASngSDGsW1Jmb+cBXLqI/dG79cIkcGFJ9iniX+RP6XY28Gg= ; Message-ID: <20060406011340.98492.qmail@web38009.mail.mud.yahoo.com> Date: Wed, 5 Apr 2006 18:13:40 -0700 (PDT) From: Shantanu Goel Subject: Re: OOM kills if swappiness set to 0, swap storms otherwise To: Charles Shannon Hendrix , linux-kernel@vger.kernel.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-1997432-1144286020=:97775" Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --0-1997432-1144286020=:97775 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Content-Id: Content-Disposition: inline Charles, Can you please try the attached patch against 2.6.16.1 which I use on my desktop since I encountered the same issues when running GNOME/Firefox etc. After booting the patched kernel, leave swappiness unchanged but do the following: echo 1 > /proc/sys/vm/mapped_bias This should allow mapped memory to stay pretty close to 80% as implied by the default swappiness value of 60 and prevent the swap storms. Andrew et al, details on the patch are as follows. 1. Unmapped pages are kept the inactive list as much as possible. 2. Only partially written pages are marked as referenced so kswapd can initiate writeback on the first scan for sequentially written files. 3. The scanner will set PG_reclaim for pages found in writeback. 4. The scanner will scan the LRU twice. On the first pass, the distress logic is disabled while on the second pass, it is applied as before. This permits a full scan of the inactive list before distress swapping begins. 5. The slab scanner only takes into account the size of the inactive list and scans the slab at 1/2 the rate of the inactive list for DEFAULT_SEEKS. This prevents spurious pageouts during heavy slab usage such as when running updatedb. 6. reclaim_mapped is made part of scan_control so it can be used by shrink_list() in addition to refill_inactive_zone() to prevent mapped memory reclamation and staying within the bounds dictated by swappiness. Thanks, Shantanu __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --0-1997432-1144286020=:97775 Content-Type: application/octet-stream; name="01-mapped-bias.patch" Content-Transfer-Encoding: base64 Content-Description: 2495889862-01-mapped-bias.patch Content-Disposition: attachment; filename="01-mapped-bias.patch" LS0tIC5vcmlnL2luY2x1ZGUvbGludXgvc3dhcC5oCTIwMDYtMDQtMDUgMjA6 Mjk6MDkuMDAwMDAwMDAwIC0wNDAwCisrKyAwMS1tYXBwZWQtYmlhcy9pbmNs dWRlL2xpbnV4L3N3YXAuaAkyMDA2LTA0LTAzIDE5OjI1OjE1LjAwMDAwMDAw MCAtMDQwMApAQCAtMTc1LDYgKzE3NSw3IEBACiBleHRlcm4gaW50IHRyeV90 b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICoqLCBnZnBfdCk7CiBleHRlcm4g aW50IHNocmlua19hbGxfbWVtb3J5KGludCk7CiBleHRlcm4gaW50IHZtX3N3 YXBwaW5lc3M7CitleHRlcm4gaW50IHZtX21hcHBlZF9iaWFzOwogCiAjaWZk ZWYgQ09ORklHX05VTUEKIGV4dGVybiBpbnQgem9uZV9yZWNsYWltX21vZGU7 Ci0tLSAub3JpZy9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCTIwMDYtMDQtMDUg MjA6Mjk6MDkuMDAwMDAwMDAwIC0wNDAwCisrKyAwMS1tYXBwZWQtYmlhcy9p bmNsdWRlL2xpbnV4L3N5c2N0bC5oCTIwMDYtMDQtMDMgMTk6MjU6MDQuMDAw MDAwMDAwIC0wNDAwCkBAIC0xODYsNiArMTg2LDcgQEAKIAlWTV9QRVJDUFVf UEFHRUxJU1RfRlJBQ1RJT049MzAsLyogaW50OiBmcmFjdGlvbiBvZiBwYWdl cyBpbiBlYWNoIHBlcmNwdV9wYWdlbGlzdCAqLwogCVZNX1pPTkVfUkVDTEFJ TV9NT0RFPTMxLCAvKiByZWNsYWltIGxvY2FsIHpvbmUgbWVtb3J5IGJlZm9y ZSBnb2luZyBvZmYgbm9kZSAqLwogCVZNX1pPTkVfUkVDTEFJTV9JTlRFUlZB TD0zMiwgLyogdGltZSBwZXJpb2QgdG8gd2FpdCBhZnRlciByZWNsYWltIGZh aWx1cmUgKi8KKwlWTV9NQVBQRURfQklBUz0zMywJLyogYmlhcyByZWNsYWlt IHRvd2FyZHMgcHJlc2VydmluZyBtYXBwZWQgbWVtb3J5ICovCiB9OwogCiAK LS0tIC5vcmlnL2tlcm5lbC9zeXNjdGwuYwkyMDA2LTA0LTA1IDIwOjI5OjA5 LjAwMDAwMDAwMCAtMDQwMAorKysgMDEtbWFwcGVkLWJpYXMva2VybmVsL3N5 c2N0bC5jCTIwMDYtMDQtMDMgMTk6NDA6NDkuMDAwMDAwMDAwIC0wNDAwCkBA IC05MTYsNiArOTE2LDE2IEBACiAJCS5zdHJhdGVneQk9ICZzeXNjdGxfamlm ZmllcywKIAl9LAogI2VuZGlmCisJeworCQkuY3RsX25hbWUJPSBWTV9NQVBQ RURfQklBUywKKwkJLnByb2NuYW1lCT0gIm1hcHBlZF9iaWFzIiwKKwkJLmRh dGEJCT0gJnZtX21hcHBlZF9iaWFzLAorCQkubWF4bGVuCQk9IHNpemVvZih2 bV9tYXBwZWRfYmlhcyksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hh bmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwkJLnN0cmF0ZWd5CT0gJnN5c2N0 bF9pbnR2ZWMsCisJCS5leHRyYTEJCT0gJnplcm8sCisJfSwKIAl7IC5jdGxf bmFtZSA9IDAgfQogfTsKIAotLS0gLm9yaWcvbW0vZmlsZW1hcC5jCTIwMDYt MDQtMDUgMjA6Mjk6MDkuMDAwMDAwMDAwIC0wNDAwCisrKyAwMS1tYXBwZWQt Ymlhcy9tbS9maWxlbWFwLmMJMjAwNi0wNC0wMyAxOTozMTowNy4wMDAwMDAw MDAgLTA0MDAKQEAgLTIwMjAsNyArMjAyMCwxNCBAQAogCQkJaWYgKHN0YXR1 cyA+PSAwKQogCQkJCXN0YXR1cyA9IC1FRkFVTFQ7CiAJCXVubG9ja19wYWdl KHBhZ2UpOwotCQltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7CisKKwkJLyoK KwkJICogT25seSBtYXJrIHBhZ2UgYWNjZXNzZWQgZm9yIHBhcnRpYWwgd3Jp dGUKKwkJICogd2hlbiBtYXBwZWQgYmlhcyBpcyBpbiBlZmZlY3QuCisJCSAq LworCQlpZiAoIXZtX21hcHBlZF9iaWFzIHx8IG9mZnNldCArIGJ5dGVzICE9 IFBBR0VfQ0FDSEVfU0laRSkKKwkJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdl KTsKKwogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCWlmIChzdGF0 dXMgPCAwKQogCQkJYnJlYWs7Ci0tLSAub3JpZy9tbS9wYWdlX2FsbG9jLmMJ MjAwNi0wNC0wNSAyMDoyOToxMC4wMDAwMDAwMDAgLTA0MDAKKysrIDAxLW1h cHBlZC1iaWFzL21tL3BhZ2VfYWxsb2MuYwkyMDA2LTA0LTAzIDIwOjAwOjIy LjAwMDAwMDAwMCAtMDQwMApAQCAtMzYwLDcgKzM2MCw2IEBACiAJCQkxIDw8 IFBHX3ByaXZhdGUgfAogCQkJMSA8PCBQR19sb2NrZWQJfAogCQkJMSA8PCBQ R19hY3RpdmUJfAotCQkJMSA8PCBQR19yZWNsYWltCXwKIAkJCTEgPDwgUEdf c2xhYgl8CiAJCQkxIDw8IFBHX3N3YXBjYWNoZSB8CiAJCQkxIDw8IFBHX3dy aXRlYmFjayB8CkBAIC01MTgsNyArNTE3LDYgQEAKIAkJCTEgPDwgUEdfbG9j a2VkCXwKIAkJCTEgPDwgUEdfYWN0aXZlCXwKIAkJCTEgPDwgUEdfZGlydHkJ fAotCQkJMSA8PCBQR19yZWNsYWltCXwKIAkJCTEgPDwgUEdfc2xhYiAgICB8 CiAJCQkxIDw8IFBHX3N3YXBjYWNoZSB8CiAJCQkxIDw8IFBHX3dyaXRlYmFj ayB8CkBAIC01MzQsNyArNTMyLDggQEAKIAogCXBhZ2UtPmZsYWdzICY9IH4o MSA8PCBQR191cHRvZGF0ZSB8IDEgPDwgUEdfZXJyb3IgfAogCQkJMSA8PCBQ R19yZWZlcmVuY2VkIHwgMSA8PCBQR19hcmNoXzEgfAotCQkJMSA8PCBQR19j aGVja2VkIHwgMSA8PCBQR19tYXBwZWR0b2Rpc2spOworCQkJMSA8PCBQR19j aGVja2VkIHwgMSA8PCBQR19tYXBwZWR0b2Rpc2sgfAorCQkJMSA8PCBQR19y ZWNsYWltKTsKIAlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIDApOwogCXNldF9w YWdlX3JlZnMocGFnZSwgb3JkZXIpOwogCWtlcm5lbF9tYXBfcGFnZXMocGFn ZSwgMSA8PCBvcmRlciwgMSk7Ci0tLSAub3JpZy9tbS9zd2FwLmMJMjAwNi0w NC0wNSAyMDoyOToxMC4wMDAwMDAwMDAgLTA0MDAKKysrIDAxLW1hcHBlZC1i aWFzL21tL3N3YXAuYwkyMDA2LTA0LTAzIDE5OjI4OjU1LjAwMDAwMDAwMCAt MDQwMApAQCAtMTAzLDEyICsxMDMsMjMgQEAKIHsKIAlzdHJ1Y3Qgem9uZSAq em9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKIAorCWlmICh1bmxpa2VseShQYWdl UmVjbGFpbShwYWdlKSkpCisJCUNsZWFyUGFnZVJlY2xhaW0ocGFnZSk7CisK IAlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJaWYgKFBhZ2VM UlUocGFnZSkgJiYgIVBhZ2VBY3RpdmUocGFnZSkpIHsKLQkJZGVsX3BhZ2Vf ZnJvbV9pbmFjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOwotCQlTZXRQYWdlQWN0 aXZlKHBhZ2UpOwotCQlhZGRfcGFnZV90b19hY3RpdmVfbGlzdCh6b25lLCBw YWdlKTsKLQkJaW5jX3BhZ2Vfc3RhdGUocGdhY3RpdmF0ZSk7CisJCS8qCisJ CSAqIE5ldmVyIGFjdGl2YXRlIGFuIHVubWFwcGVkIHBhZ2Ugd2hlbgorCQkg KiBtYXBwZWQgYmlhcyBpcyBpbiBlZmZlY3QuCisJCSAqLworCQlpZiAoIXZt X21hcHBlZF9iaWFzIHx8IHBhZ2VfbWFwcGVkKHBhZ2UpKSB7CisJCQlkZWxf cGFnZV9mcm9tX2luYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7CisJCQlTZXRQ YWdlQWN0aXZlKHBhZ2UpOworCQkJYWRkX3BhZ2VfdG9fYWN0aXZlX2xpc3Qo em9uZSwgcGFnZSk7CisJCQlpbmNfcGFnZV9zdGF0ZShwZ2FjdGl2YXRlKTsK KwkJfSBlbHNlIGlmIChwYWdlLT5scnUucHJldiAhPSAmem9uZS0+aW5hY3Rp dmVfbGlzdCkgeworCQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5p bmFjdGl2ZV9saXN0KTsKKwkJfQogCX0KIAlzcGluX3VubG9ja19pcnEoJnpv bmUtPmxydV9sb2NrKTsKIH0KQEAgLTEyNyw2ICsxMzgsOCBAQAogCQlDbGVh clBhZ2VSZWZlcmVuY2VkKHBhZ2UpOwogCX0gZWxzZSBpZiAoIVBhZ2VSZWZl cmVuY2VkKHBhZ2UpKSB7CiAJCVNldFBhZ2VSZWZlcmVuY2VkKHBhZ2UpOwor CQlpZiAoUGFnZVJlY2xhaW0ocGFnZSkpCisJCQlDbGVhclBhZ2VSZWNsYWlt KHBhZ2UpOwogCX0KIH0KIAotLS0gLm9yaWcvbW0vdm1zY2FuLmMJMjAwNi0w NC0wNSAyMDoyOToxMC4wMDAwMDAwMDAgLTA0MDAKKysrIDAxLW1hcHBlZC1i aWFzL21tL3Ztc2Nhbi5jCTIwMDYtMDQtMDMgMjA6MDg6MzYuMDAwMDAwMDAw IC0wNDAwCkBAIC03OSw2ICs3OSwxMiBAQAogCSAqIEluIHRoaXMgY29udGV4 dCwgaXQgZG9lc24ndCBtYXR0ZXIgdGhhdCB3ZSBzY2FuIHRoZQogCSAqIHdo b2xlIGxpc3QgYXQgb25jZS4gKi8KIAlpbnQgc3dhcF9jbHVzdGVyX21heDsK KworCS8qIFNob3VsZCB3ZSByZWNsYWltIG1hcHBlZCBtZW1vcnk/ICovCisJ aW50IHJlY2xhaW1fbWFwcGVkOworCisJLyogTFJVIHBhc3MgKi8KKwlpbnQg cGFzczsKIH07CiAKIC8qCkBAIC0xMjgsNiArMTM0LDMwIEBACiBpbnQgdm1f c3dhcHBpbmVzcyA9IDYwOwogc3RhdGljIGxvbmcgdG90YWxfbWVtb3J5Owog CisvKgorICogV2hlbiBub24temVybywgcGxhY2UgYWxsIHVubWFwcGVkIHBh Z2VzIG9uCisgKiB0aGUgaW5hY3RpdmUgbGlzdCBhbmQgZG8gbm90IHJlY2xh aW0gYW55IG1hcHBlZAorICogcGFnZXMgdW5sZXNzIG1hcHBlZCBtZW1vcnkg ZXhjZWVkcyB0aGUgdGhyZXNob2xkCisgKiBpbXBsaWVkIGJ5IHN3YXBwaW5l c3MgYWJvdmUuCisgKi8KK2ludCB2bV9tYXBwZWRfYmlhcyA9IDA7CitzdGF0 aWMgaW50IG1hcHBlZF9iaWFzID0gMDsKK3N0YXRpYyBhdG9taWNfdCBzY2Fu bmVyX3J1bm5pbmcgPSBBVE9NSUNfSU5JVCgtMSk7CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBzY2FubmVyX3N0YXJ0KHZvaWQpCit7CisJLyoKKwkgKiBSZS1z eW5jIG1hcHBlZCBiaWFzIG9uIGZpcnN0IHJ1bi4KKwkgKi8KKwlpZiAoYXRv bWljX2luY19hbmRfdGVzdCgmc2Nhbm5lcl9ydW5uaW5nKSkKKwkJbWFwcGVk X2JpYXMgPSB2bV9tYXBwZWRfYmlhczsKK30KKworc3RhdGljIGlubGluZSB2 b2lkIHNjYW5uZXJfc3RvcCh2b2lkKQoreworCWF0b21pY19kZWMoJnNjYW5u ZXJfcnVubmluZyk7Cit9CisKIHN0YXRpYyBMSVNUX0hFQUQoc2hyaW5rZXJf bGlzdCk7CiBzdGF0aWMgREVDTEFSRV9SV1NFTShzaHJpbmtlcl9yd3NlbSk7 CiAKQEAgLTE5OSw3ICsyMjksMTcgQEAKIAkJdW5zaWduZWQgbG9uZyB0b3Rh bF9zY2FuOwogCQl1bnNpZ25lZCBsb25nIG1heF9wYXNzID0gKCpzaHJpbmtl ci0+c2hyaW5rZXIpKDAsIGdmcF9tYXNrKTsKIAotCQlkZWx0YSA9ICg0ICog c2Nhbm5lZCkgLyBzaHJpbmtlci0+c2Vla3M7CisJCS8qCisJCSAqIFdpdGgg bWFwcGVkIGJpYXMgaW4gZWZmZWN0LCB3ZSBvbmx5IGNvdW50CisJCSAqIGlu YWN0aXZlIHBhZ2VzIGFzIHBhcnQgb2YgbHJ1X3BhZ2VzIGNhdXNpbmcKKwkJ ICogdGhlIGRlZmF1bHQgYWxnb3JpdGhtIHRvIGJlIHF1aXRlIGFnZ3Jlc3Np dmUuCisJCSAqIFRvIHJlbWVkeSB0aGF0LCB3ZSBzY2FuIHRoZSBzbGFicyBh dCBhIGZyYWN0aW9uCisJCSAqIG9mIHRoZSBMUlUgc2NhbiByYXRlLgorCQkg Ki8KKwkJaWYgKCFtYXBwZWRfYmlhcykKKwkJCWRlbHRhID0gKDQgKiBzY2Fu bmVkKSAvIHNocmlua2VyLT5zZWVrczsKKwkJZWxzZQorCQkJZGVsdGEgPSBz Y2FubmVkIC8gc2hyaW5rZXItPnNlZWtzOwogCQlkZWx0YSAqPSBtYXhfcGFz czsKIAkJZG9fZGl2KGRlbHRhLCBscnVfcGFnZXMgKyAxKTsKIAkJc2hyaW5r ZXItPm5yICs9IGRlbHRhOwpAQCAtNDQ0LDE1ICs0ODQsMjggQEAKIAogCQlz Yy0+bnJfc2Nhbm5lZCsrOwogCisJCS8qCisJCSAqIERvIG5vdCByZWNsYWlt IGEgbWFwcGVkIHBhZ2UgdW5sZXNzCisJCSAqIG5lY2Vzc2FyeSB3aGVuIG1h cHBlZCBiaWFzIGlzIGluIGVmZmVjdC4KKwkJICovCisJCWlmIChtYXBwZWRf YmlhcyAmJiAhc2MtPnJlY2xhaW1fbWFwcGVkICYmIHBhZ2VfbWFwcGVkKHBh Z2UpKQorCQkJZ290byBkb19hY3RpdmF0ZV9sb2NrZWQ7CisKIAkJaWYgKCFz Yy0+bWF5X3N3YXAgJiYgcGFnZV9tYXBwZWQocGFnZSkpCiAJCQlnb3RvIGtl ZXBfbG9ja2VkOwogCiAJCS8qIERvdWJsZSB0aGUgc2xhYiBwcmVzc3VyZSBm b3IgbWFwcGVkIGFuZCBzd2FwY2FjaGUgcGFnZXMgKi8KLQkJaWYgKHBhZ2Vf bWFwcGVkKHBhZ2UpIHx8IFBhZ2VTd2FwQ2FjaGUocGFnZSkpCisJCWlmICgh bWFwcGVkX2JpYXMgJiYgKHBhZ2VfbWFwcGVkKHBhZ2UpIHx8IFBhZ2VTd2Fw Q2FjaGUocGFnZSkpKQogCQkJc2MtPm5yX3NjYW5uZWQrKzsKIAotCQlpZiAo UGFnZVdyaXRlYmFjayhwYWdlKSkKKwkJaWYgKFBhZ2VXcml0ZWJhY2socGFn ZSkpIHsKKwkJCS8qCisJCQkgKiBTZXQgcmVjbGFpbSBiaXQgd2hlbiBtYXBw ZWQgYmlhcyBpcyBpbiBlZmZlY3QuCisJCQkgKi8KKwkJCWlmIChtYXBwZWRf YmlhcykKKwkJCQlTZXRQYWdlUmVjbGFpbShwYWdlKTsKIAkJCWdvdG8ga2Vl cF9sb2NrZWQ7CisJCX0KIAogCQlyZWZlcmVuY2VkID0gcGFnZV9yZWZlcmVu Y2VkKHBhZ2UsIDEpOwogCQkvKiBJbiBhY3RpdmUgdXNlIG9yIHJlYWxseSB1 bmZyZWVhYmxlPyAgQWN0aXZhdGUgaXQuICovCkBAIC01NjcsOCArNjIwLDE1 IEBACiAJCWNvbnRpbnVlOwogCiBhY3RpdmF0ZV9sb2NrZWQ6Ci0JCVNldFBh Z2VBY3RpdmUocGFnZSk7Ci0JCXBnYWN0aXZhdGUrKzsKKwkJLyoKKwkJICog RG8gbm90IGFjdGl2YXRlIGFuIHVubWFwcGVkIHBhZ2UgaWYKKwkJICogbWFw cGVkIGJpYXMgaXMgaW4gZWZmZWN0LgorCQkgKi8KKwkJaWYgKCFtYXBwZWRf YmlhcyB8fCBwYWdlX21hcHBlZChwYWdlKSkgeworZG9fYWN0aXZhdGVfbG9j a2VkOgorCQkJU2V0UGFnZUFjdGl2ZShwYWdlKTsKKwkJCXBnYWN0aXZhdGUr KzsKKwkJfQoga2VlcF9sb2NrZWQ6CiAJCXVubG9ja19wYWdlKHBhZ2UpOwog a2VlcDoKQEAgLTEyMDAsNDggKzEyNjAsNiBAQAogCUxJU1RfSEVBRChsX2Fj dGl2ZSk7CS8qIFBhZ2VzIHRvIGdvIG9udG8gdGhlIGFjdGl2ZV9saXN0ICov CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IHBhZ2V2ZWMgcHZlYzsK LQlpbnQgcmVjbGFpbV9tYXBwZWQgPSAwOwotCi0JaWYgKHVubGlrZWx5KHNj LT5tYXlfc3dhcCkpIHsKLQkJbG9uZyBtYXBwZWRfcmF0aW87Ci0JCWxvbmcg ZGlzdHJlc3M7Ci0JCWxvbmcgc3dhcF90ZW5kZW5jeTsKLQotCQkvKgotCQkg KiBgZGlzdHJlc3MnIGlzIGEgbWVhc3VyZSBvZiBob3cgbXVjaCB0cm91Ymxl IHdlJ3JlIGhhdmluZwotCQkgKiByZWNsYWltaW5nIHBhZ2VzLiAgMCAtPiBu byBwcm9ibGVtcy4gIDEwMCAtPiBncmVhdCB0cm91YmxlLgotCQkgKi8KLQkJ ZGlzdHJlc3MgPSAxMDAgPj4gem9uZS0+cHJldl9wcmlvcml0eTsKLQotCQkv KgotCQkgKiBUaGUgcG9pbnQgb2YgdGhpcyBhbGdvcml0aG0gaXMgdG8gZGVj aWRlIHdoZW4gdG8gc3RhcnQKLQkJICogcmVjbGFpbWluZyBtYXBwZWQgbWVt b3J5IGluc3RlYWQgb2YganVzdCBwYWdlY2FjaGUuICBXb3JrIG91dAotCQkg KiBob3cgbXVjaCBtZW1vcnkKLQkJICogaXMgbWFwcGVkLgotCQkgKi8KLQkJ bWFwcGVkX3JhdGlvID0gKHNjLT5ucl9tYXBwZWQgKiAxMDApIC8gdG90YWxf bWVtb3J5OwotCi0JCS8qCi0JCSAqIE5vdyBkZWNpZGUgaG93IG11Y2ggd2Ug cmVhbGx5IHdhbnQgdG8gdW5tYXAgc29tZSBwYWdlcy4gIFRoZQotCQkgKiBt YXBwZWQgcmF0aW8gaXMgZG93bmdyYWRlZCAtIGp1c3QgYmVjYXVzZSB0aGVy ZSdzIGEgbG90IG9mCi0JCSAqIG1hcHBlZCBtZW1vcnkgZG9lc24ndCBuZWNl c3NhcmlseSBtZWFuIHRoYXQgcGFnZSByZWNsYWltCi0JCSAqIGlzbid0IHN1 Y2NlZWRpbmcuCi0JCSAqCi0JCSAqIFRoZSBkaXN0cmVzcyByYXRpbyBpcyBp bXBvcnRhbnQgLSB3ZSBkb24ndCB3YW50IHRvIHN0YXJ0Ci0JCSAqIGdvaW5n IG9vbS4KLQkJICoKLQkJICogQSAxMDAlIHZhbHVlIG9mIHZtX3N3YXBwaW5l c3Mgb3ZlcnJpZGVzIHRoaXMgYWxnb3JpdGhtCi0JCSAqIGFsdG9nZXRoZXIu Ci0JCSAqLwotCQlzd2FwX3RlbmRlbmN5ID0gbWFwcGVkX3JhdGlvIC8gMiAr IGRpc3RyZXNzICsgdm1fc3dhcHBpbmVzczsKLQotCQkvKgotCQkgKiBOb3cg dXNlIHRoaXMgbWV0cmljIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHN0YXJ0IG1v dmluZyBtYXBwZWQKLQkJICogbWVtb3J5IG9udG8gdGhlIGluYWN0aXZlIGxp c3QuCi0JCSAqLwotCQlpZiAoc3dhcF90ZW5kZW5jeSA+PSAxMDApCi0JCQly ZWNsYWltX21hcHBlZCA9IDE7Ci0JfQogCiAJbHJ1X2FkZF9kcmFpbigpOwog CXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKQEAgLTEyNTYsNyAr MTI3NCw3IEBACiAJCXBhZ2UgPSBscnVfdG9fcGFnZSgmbF9ob2xkKTsKIAkJ bGlzdF9kZWwoJnBhZ2UtPmxydSk7CiAJCWlmIChwYWdlX21hcHBlZChwYWdl KSkgewotCQkJaWYgKCFyZWNsYWltX21hcHBlZCB8fAorCQkJaWYgKCFzYy0+ cmVjbGFpbV9tYXBwZWQgfHwKIAkJCSAgICAodG90YWxfc3dhcF9wYWdlcyA9 PSAwICYmIFBhZ2VBbm9uKHBhZ2UpKSB8fAogCQkJICAgIHBhZ2VfcmVmZXJl bmNlZChwYWdlLCAwKSkgewogCQkJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZs X2FjdGl2ZSk7CkBAIC0xMzMzLDYgKzEzNTEsNTEgQEAKIAl1bnNpZ25lZCBs b25nIG5yX2FjdGl2ZTsKIAl1bnNpZ25lZCBsb25nIG5yX2luYWN0aXZlOwog CisJc2MtPnJlY2xhaW1fbWFwcGVkID0gMDsKKwlpZiAodW5saWtlbHkoc2Mt Pm1heV9zd2FwKSkgeworCQlsb25nIG1hcHBlZF9yYXRpbzsKKwkJbG9uZyBk aXN0cmVzczsKKwkJbG9uZyBzd2FwX3RlbmRlbmN5OworCisJCS8qCisJCSAq IGBkaXN0cmVzcycgaXMgYSBtZWFzdXJlIG9mIGhvdyBtdWNoIHRyb3VibGUg d2UncmUgaGF2aW5nCisJCSAqIHJlY2xhaW1pbmcgcGFnZXMuICAwIC0+IG5v IHByb2JsZW1zLiAgMTAwIC0+IGdyZWF0IHRyb3VibGUuCisJCSAqCisJCSAq IFdoZW4gbWFwcGVkIGJpYXMgaXMgaW4gZWZmZWN0LCBvbmx5IGFwcGx5IGRp c3RyZXNzIGluIHRoZQorCQkgKiBsYXN0IHBhc3MuCisJCSAqLworCQlkaXN0 cmVzcyA9IChzYy0+cGFzcyA9PSAwKSA/IDEwMCA+PiB6b25lLT5wcmV2X3By aW9yaXR5IDogMDsKKworCQkvKgorCQkgKiBUaGUgcG9pbnQgb2YgdGhpcyBh bGdvcml0aG0gaXMgdG8gZGVjaWRlIHdoZW4gdG8gc3RhcnQKKwkJICogcmVj bGFpbWluZyBtYXBwZWQgbWVtb3J5IGluc3RlYWQgb2YganVzdCBwYWdlY2Fj aGUuICBXb3JrIG91dAorCQkgKiBob3cgbXVjaCBtZW1vcnkKKwkJICogaXMg bWFwcGVkLgorCQkgKi8KKwkJbWFwcGVkX3JhdGlvID0gKHNjLT5ucl9tYXBw ZWQgKiAxMDApIC8gdG90YWxfbWVtb3J5OworCisJCS8qCisJCSAqIE5vdyBk ZWNpZGUgaG93IG11Y2ggd2UgcmVhbGx5IHdhbnQgdG8gdW5tYXAgc29tZSBw YWdlcy4gIFRoZQorCQkgKiBtYXBwZWQgcmF0aW8gaXMgZG93bmdyYWRlZCAt IGp1c3QgYmVjYXVzZSB0aGVyZSdzIGEgbG90IG9mCisJCSAqIG1hcHBlZCBt ZW1vcnkgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgcGFnZSByZWNs YWltCisJCSAqIGlzbid0IHN1Y2NlZWRpbmcuCisJCSAqCisJCSAqIFRoZSBk aXN0cmVzcyByYXRpbyBpcyBpbXBvcnRhbnQgLSB3ZSBkb24ndCB3YW50IHRv IHN0YXJ0CisJCSAqIGdvaW5nIG9vbS4KKwkJICoKKwkJICogQSAxMDAlIHZh bHVlIG9mIHZtX3N3YXBwaW5lc3Mgb3ZlcnJpZGVzIHRoaXMgYWxnb3JpdGht CisJCSAqIGFsdG9nZXRoZXIuCisJCSAqLworCQlzd2FwX3RlbmRlbmN5ID0g bWFwcGVkX3JhdGlvIC8gMiArIGRpc3RyZXNzICsgdm1fc3dhcHBpbmVzczsK KworCQkvKgorCQkgKiBOb3cgdXNlIHRoaXMgbWV0cmljIHRvIGRlY2lkZSB3 aGV0aGVyIHRvIHN0YXJ0IG1vdmluZyBtYXBwZWQKKwkJICogbWVtb3J5IG9u dG8gdGhlIGluYWN0aXZlIGxpc3QuCisJCSAqLworCQlpZiAoc3dhcF90ZW5k ZW5jeSA+PSAxMDApCisJCQlzYy0+cmVjbGFpbV9tYXBwZWQgPSAxOworCX0K KwogCWF0b21pY19pbmMoJnpvbmUtPnJlY2xhaW1faW5fcHJvZ3Jlc3MpOwog CiAJLyoKQEAgLTE0MzcsMTAgKzE1MDAsMTQgQEAKIAlzdHJ1Y3Qgc2Nhbl9j b250cm9sIHNjOwogCXVuc2lnbmVkIGxvbmcgbHJ1X3BhZ2VzID0gMDsKIAlp bnQgaTsKKwlpbnQgbWF4X3ByaW9yaXR5OworCisJc2Nhbm5lcl9zdGFydCgp OwogCiAJc2MuZ2ZwX21hc2sgPSBnZnBfbWFzazsKIAlzYy5tYXlfd3JpdGVw YWdlID0gIWxhcHRvcF9tb2RlOwogCXNjLm1heV9zd2FwID0gMTsKKwlzYy5w YXNzID0gISFtYXBwZWRfYmlhczsKIAogCWluY19wYWdlX3N0YXRlKGFsbG9j c3RhbGwpOwogCkBAIC0xNDUxLDEwICsxNTE4LDIyIEBACiAJCQljb250aW51 ZTsKIAogCQl6b25lLT50ZW1wX3ByaW9yaXR5ID0gREVGX1BSSU9SSVRZOwot CQlscnVfcGFnZXMgKz0gem9uZS0+bnJfYWN0aXZlICsgem9uZS0+bnJfaW5h Y3RpdmU7CisKKwkJLyoKKwkJICogV2hlbiBtYXBwZWQgYmlhcyBpcyBpbiBl ZmZlY3QsCisJCSAqIGRvIG5vdCBjb3VudCBhY3RpdmUgcGFnZXMuCisJCSAq LworCQlscnVfcGFnZXMgKz0gem9uZS0+bnJfaW5hY3RpdmU7CisJCWlmICgh bWFwcGVkX2JpYXMpCisJCQlscnVfcGFnZXMgKz0gem9uZS0+bnJfYWN0aXZl OwogCX0KK2FnYWluOgorCS8qCisJICogT25seSBzY2FuIGRvd24gdG8gMCBv biB0aGUgbGFzdCBwYXNzLgorCSAqLworCW1heF9wcmlvcml0eSA9IChzYy5w YXNzID09IDApID8gMCA6IDE7CiAKLQlmb3IgKHByaW9yaXR5ID0gREVGX1BS SU9SSVRZOyBwcmlvcml0eSA+PSAwOyBwcmlvcml0eS0tKSB7CisJZm9yIChw cmlvcml0eSA9IERFRl9QUklPUklUWTsgcHJpb3JpdHkgPj0gbWF4X3ByaW9y aXR5OyBwcmlvcml0eS0tKSB7CiAJCXNjLm5yX21hcHBlZCA9IHJlYWRfcGFn ZV9zdGF0ZShucl9tYXBwZWQpOwogCQlzYy5ucl9zY2FubmVkID0gMDsKIAkJ c2MubnJfcmVjbGFpbWVkID0gMDsKQEAgLTE0OTEsNiArMTU3MCw4IEBACiAJ CWlmIChzYy5ucl9zY2FubmVkICYmIHByaW9yaXR5IDwgREVGX1BSSU9SSVRZ IC0gMikKIAkJCWJsa19jb25nZXN0aW9uX3dhaXQoV1JJVEUsIEhaLzEwKTsK IAl9CisJaWYgKC0tc2MucGFzcyA+PSAwKQorCQlnb3RvIGFnYWluOwogb3V0 OgogCWZvciAoaSA9IDA7IHpvbmVzW2ldICE9IDA7IGkrKykgewogCQlzdHJ1 Y3Qgem9uZSAqem9uZSA9IHpvbmVzW2ldOwpAQCAtMTUwMCw2ICsxNTgxLDcg QEAKIAogCQl6b25lLT5wcmV2X3ByaW9yaXR5ID0gem9uZS0+dGVtcF9wcmlv cml0eTsKIAl9CisJc2Nhbm5lcl9zdG9wKCk7CiAJcmV0dXJuIHJldDsKIH0K IApAQCAtMTUzMSwxMiArMTYxMywxNSBAQAogc3RhdGljIGludCBiYWxhbmNl X3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBucl9wYWdlcywgaW50IG9y ZGVyKQogewogCWludCB0b19mcmVlID0gbnJfcGFnZXM7Ci0JaW50IGFsbF96 b25lc19vazsKKwlpbnQgYWxsX3pvbmVzX29rID0gMTsKIAlpbnQgcHJpb3Jp dHk7CiAJaW50IGk7CiAJaW50IHRvdGFsX3NjYW5uZWQsIHRvdGFsX3JlY2xh aW1lZDsKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSAqcmVjbGFpbV9zdGF0ZSA9 IGN1cnJlbnQtPnJlY2xhaW1fc3RhdGU7CiAJc3RydWN0IHNjYW5fY29udHJv bCBzYzsKKwlpbnQgbWF4X3ByaW9yaXR5OworCisJc2Nhbm5lcl9zdGFydCgp OwogCiBsb29wX2FnYWluOgogCXRvdGFsX3NjYW5uZWQgPSAwOwpAQCAtMTU0 NSw2ICsxNjMwLDcgQEAKIAlzYy5tYXlfd3JpdGVwYWdlID0gIWxhcHRvcF9t b2RlOwogCXNjLm1heV9zd2FwID0gMTsKIAlzYy5ucl9tYXBwZWQgPSByZWFk X3BhZ2Vfc3RhdGUobnJfbWFwcGVkKTsKKwlzYy5wYXNzID0gKG5yX3BhZ2Vz ID09IDApID8gISFtYXBwZWRfYmlhcyA6IDA7CiAKIAlpbmNfcGFnZV9zdGF0 ZShwYWdlb3V0cnVuKTsKIApAQCAtMTU1Myw4ICsxNjM5LDEzIEBACiAKIAkJ em9uZS0+dGVtcF9wcmlvcml0eSA9IERFRl9QUklPUklUWTsKIAl9Ci0KLQlm b3IgKHByaW9yaXR5ID0gREVGX1BSSU9SSVRZOyBwcmlvcml0eSA+PSAwOyBw cmlvcml0eS0tKSB7CithZ2FpbjoKKwkvKgorCSAqIE9ubHkgc2NhbiBkb3du IHRvIDAgb24gdGhlIGxhc3QgcGFzcy4KKwkgKi8KKwltYXhfcHJpb3JpdHkg PSAoc2MucGFzcyA9PSAwKSA/IDAgOiAxOworCQorCWZvciAocHJpb3JpdHkg PSBERUZfUFJJT1JJVFk7IHByaW9yaXR5ID49IG1heF9wcmlvcml0eTsgcHJp b3JpdHktLSkgewogCQlpbnQgZW5kX3pvbmUgPSAwOwkvKiBJbmNsdXNpdmUu ICAwID0gWk9ORV9ETUEgKi8KIAkJdW5zaWduZWQgbG9uZyBscnVfcGFnZXMg PSAwOwogCkBAIC0xNTYzLDcgKzE2NTQsNyBAQAogCQkJZGlzYWJsZV9zd2Fw X3Rva2VuKCk7CiAKIAkJYWxsX3pvbmVzX29rID0gMTsKLQorCQogCQlpZiAo bnJfcGFnZXMgPT0gMCkgewogCQkJLyoKIAkJCSAqIFNjYW4gaW4gdGhlIGhp Z2htZW0tPmRtYSBkaXJlY3Rpb24gZm9yIHRoZSBoaWdoZXN0CkBAIC0xNTkz LDcgKzE2ODQsMTMgQEAKIAkJZm9yIChpID0gMDsgaSA8PSBlbmRfem9uZTsg aSsrKSB7CiAJCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBnZGF0LT5ub2RlX3pv bmVzICsgaTsKIAotCQkJbHJ1X3BhZ2VzICs9IHpvbmUtPm5yX2FjdGl2ZSAr IHpvbmUtPm5yX2luYWN0aXZlOworCQkJLyoKKwkJCSAqIFdoZW4gbWFwcGVk IGJpYXMgaXMgaW4gZWZmZWN0LAorCQkJICogZG8gbm90IGNvdW50IGFjdGl2 ZSBwYWdlcy4KKwkJCSAqLworCQkJbHJ1X3BhZ2VzICs9IHpvbmUtPm5yX2lu YWN0aXZlOworCQkJaWYgKCFtYXBwZWRfYmlhcykKKwkJCQlscnVfcGFnZXMg Kz0gem9uZS0+bnJfYWN0aXZlOwogCQl9CiAKIAkJLyoKQEAgLTE2MzcsNyAr MTczNCw4IEBACiAJCQlpZiAoem9uZS0+YWxsX3VucmVjbGFpbWFibGUpCiAJ CQkJY29udGludWU7CiAJCQlpZiAobnJfc2xhYiA9PSAwICYmIHpvbmUtPnBh Z2VzX3NjYW5uZWQgPj0KLQkJCQkgICAgKHpvbmUtPm5yX2FjdGl2ZSArIHpv bmUtPm5yX2luYWN0aXZlKSAqIDQpCisJCQkJICAgICh6b25lLT5ucl9hY3Rp dmUgKyB6b25lLT5ucl9pbmFjdGl2ZSkgKiA0ICoKKwkJCQkJKG1hcHBlZF9i aWFzICsgMSkpCiAJCQkJem9uZS0+YWxsX3VucmVjbGFpbWFibGUgPSAxOwog CQkJLyoKIAkJCSAqIElmIHdlJ3ZlIGRvbmUgYSBkZWNlbnQgYW1vdW50IG9m IHNjYW5uaW5nIGFuZApAQCAtMTY1MSw3ICsxNzQ5LDcgQEAKIAkJaWYgKG5y X3BhZ2VzICYmIHRvX2ZyZWUgPiB0b3RhbF9yZWNsYWltZWQpCiAJCQljb250 aW51ZTsJLyogc3dzdXNwOiBuZWVkIHRvIGRvIG1vcmUgd29yayAqLwogCQlp ZiAoYWxsX3pvbmVzX29rKQotCQkJYnJlYWs7CQkvKiBrc3dhcGQ6IGFsbCBk b25lICovCisJCQlnb3RvIG91dDsJLyoga3N3YXBkOiBhbGwgZG9uZSAqLwog CQkvKgogCQkgKiBPSywga3N3YXBkIGlzIGdldHRpbmcgaW50byB0cm91Ymxl LiAgVGFrZSBhIG5hcCwgdGhlbiB0YWtlCiAJCSAqIGFub3RoZXIgcGFzcyBh Y3Jvc3MgdGhlIHpvbmVzLgpAQCAtMTY2Niw4ICsxNzY0LDEwIEBACiAJCSAq IG9uIHpvbmUtPipfcHJpb3JpdHkuCiAJCSAqLwogCQlpZiAoKHRvdGFsX3Jl Y2xhaW1lZCA+PSBTV0FQX0NMVVNURVJfTUFYKSAmJiAoIW5yX3BhZ2VzKSkK LQkJCWJyZWFrOworCQkJZ290byBvdXQ7CiAJfQorCWlmICgtLXNjLnBhc3Mg Pj0gMCkKKwkJZ290byBhZ2FpbjsKIG91dDoKIAlmb3IgKGkgPSAwOyBpIDwg cGdkYXQtPm5yX3pvbmVzOyBpKyspIHsKIAkJc3RydWN0IHpvbmUgKnpvbmUg PSBwZ2RhdC0+bm9kZV96b25lcyArIGk7CkBAIC0xNjc4LDYgKzE3NzgsNyBA QAogCQljb25kX3Jlc2NoZWQoKTsKIAkJZ290byBsb29wX2FnYWluOwogCX0K KwlzY2FubmVyX3N0b3AoKTsKIAogCXJldHVybiB0b3RhbF9yZWNsYWltZWQ7 CiB9CkBAIC0xODk4LDYgKzE5OTksOCBAQAogCWlmICghY3B1c19lbXB0eSht YXNrKSAmJiBub2RlX2lkICE9IG51bWFfbm9kZV9pZCgpKQogCQlyZXR1cm4g MDsKIAorCXNjYW5uZXJfc3RhcnQoKTsKKwogCXNjLm1heV93cml0ZXBhZ2Ug PSAhISh6b25lX3JlY2xhaW1fbW9kZSAmIFJFQ0xBSU1fV1JJVEUpOwogCXNj Lm1heV9zd2FwID0gISEoem9uZV9yZWNsYWltX21vZGUgJiBSRUNMQUlNX1NX QVApOwogCXNjLm5yX3NjYW5uZWQgPSAwOwpAQCAtMTkwNSw2ICsyMDA4LDcg QEAKIAlzYy5wcmlvcml0eSA9IFpPTkVfUkVDTEFJTV9QUklPUklUWSArIDE7 CiAJc2MubnJfbWFwcGVkID0gcmVhZF9wYWdlX3N0YXRlKG5yX21hcHBlZCk7 CiAJc2MuZ2ZwX21hc2sgPSBnZnBfbWFzazsKKwlzYy5wYXNzID0gMDsKIAog CWRpc2FibGVfc3dhcF90b2tlbigpOwogCkBAIC0xOTUyLDYgKzIwNTYsOCBA QAogCWlmIChzYy5ucl9yZWNsYWltZWQgPT0gMCkKIAkJem9uZS0+bGFzdF91 bnN1Y2Nlc3NmdWxfem9uZV9yZWNsYWltID0gamlmZmllczsKIAorCXNjYW5u ZXJfc3RvcCgpOworCiAJcmV0dXJuIHNjLm5yX3JlY2xhaW1lZCA+PSBucl9w YWdlczsKIH0KICNlbmRpZgo= --0-1997432-1144286020=:97775--