From owner-freebsd-mips@FreeBSD.ORG Wed Aug 11 05:06:54 2010 Return-Path: Delivered-To: mips@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AD540106567D; Wed, 11 Aug 2010 05:06:54 +0000 (UTC) (envelope-from c.jayachandran@gmail.com) Received: from mail-ww0-f50.google.com (mail-ww0-f50.google.com [74.125.82.50]) by mx1.freebsd.org (Postfix) with ESMTP id 0EE7D8FC0C; Wed, 11 Aug 2010 05:06:53 +0000 (UTC) Received: by wwb13 with SMTP id 13so2298862wwb.31 for ; Tue, 10 Aug 2010 22:06:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:cc:content-type; bh=mHxcdP+ZxZZGXExehrWidYm9FIBtVazZkk7jeaQ9n28=; b=XQ4GvY1zWapYvjaxYWPx/sDVRp9ZK4J/9tS7rHE4O5d/gjLjXCdcaBJMsrdbCKM3u6 V4vswLBT0ICEFn12ezfZI/0hxwSSfRn43lS9DfQg62SJpDWU42gbhIHJD3eeN7nqCnlg 2mGOYGmXgh/XuvTDQlgSHfpnsnJghkU4zV8Ok= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=VE0N0zzZYpdi87TYrhKiLwW2okZmXJ8lAiDKL/8mTbNDDEKgNo3gyn6Ryh8xmLGPIp v27tWmbkM0jUxGGf0tmGyYbCHJyOFvg7iKvW29fk8IP/yJPzPTOuwHtorn5Ru+vIZxrx C0W06IXXxE5KMAiZcsS1G7bvnqNSqcL7EAg40= MIME-Version: 1.0 Received: by 10.216.9.3 with SMTP id 3mr16047104wes.66.1281503213096; Tue, 10 Aug 2010 22:06:53 -0700 (PDT) Received: by 10.216.160.10 with HTTP; Tue, 10 Aug 2010 22:06:52 -0700 (PDT) In-Reply-To: <4C5C3A08.500@cs.rice.edu> References: <201008041412.o74ECAix092415@svn.freebsd.org> <4C5A569B.9090401@cs.rice.edu> <4C5BA088.7060105@cs.rice.edu> <4C5C3A08.500@cs.rice.edu> Date: Wed, 11 Aug 2010 10:36:52 +0530 Message-ID: From: "Jayachandran C." To: Alan Cox , mips@freebsd.org Content-Type: multipart/mixed; boundary=0016e64c1dc2cb8ec2048d853700 Cc: "Jayachandran C." Subject: Re: svn commit: r210846 - in head/sys/mips: include mips X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Aug 2010 05:06:54 -0000 --0016e64c1dc2cb8ec2048d853700 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Fri, Aug 6, 2010 at 10:06 PM, Alan Cox wrote: > The patch looks good. > > While we're talking about software dirty bit emulation, I would encourage > you to look at two things: > > 1. trap.c contains two copies of the same code for emulation. =A0I would > encourage you to eliminate this duplication by creating a > pmap_emulate_modified(). > > 2. Software dirty bit emulation is using pmap_update_page() to invalidate > the TLB entry on which the modified bit is being set. =A0On a multiproces= sor, > this is going to make dirty bit emulation very costly because every > processor will be interrupted. =A0In principle, it should be possible and > faster to only flush the TLB entry from the current processor. =A0The oth= er > processors can handle this lazily. =A0They either do not have that mappin= g in > their TLB, in which case interrupting them was wasted effort, or they do > have it in their TLB and when they fault on it they'll discover the dirty > bit is already set. =A0In fact, the emulation code already handles this c= ase, > on account of the fact that two processors could simultaneously write to = the > same clean page and only one will get the pmap lock first. I've made the changes suggested, the changes are attached. The first set of changes just re-arranges the pmap calls that use smp_rendezvous() on SMP, so that their per-cpu variants are also available to be called. The first patch also has an optimization from Juli's branch, to call pmap_update_page in pmap_kenter only if the pte is valid. The second patch makes the changes suggested above. My testing shows no issues so far, but please let me know if you have any comments. Thanks, JC. --0016e64c1dc2cb8ec2048d853700 Content-Type: text/x-patch; charset=US-ASCII; name="pmap-smp-rendezvous.patch" Content-Disposition: attachment; filename="pmap-smp-rendezvous.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gcppwhpu0 SW5kZXg6IHN5cy9taXBzL21pcHMvcG1hcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9taXBzL21pcHMv cG1hcC5jCShyZXZpc2lvbiAyMTEwNjgpCisrKyBzeXMvbWlwcy9taXBzL3BtYXAuYwkod29ya2lu ZyBjb3B5KQpAQCAtNTk1LDU4ICs1OTUsOTcgQEAKIAogI2VuZGlmCiAKK3N0YXRpYyBfX2lubGlu ZSB2b2lkCitwbWFwX2ludmFsaWRhdGVfYWxsX2xvY2FsKHBtYXBfdCBwbWFwKQoreworCWlmIChw bWFwID09IGtlcm5lbF9wbWFwKSB7CisJCXRsYl9pbnZhbGlkYXRlX2FsbCgpOworCQlyZXR1cm47 CisJfQorCisJaWYgKHBtYXAtPnBtX2FjdGl2ZSAmIFBDUFVfR0VUKGNwdW1hc2spKQorCQl0bGJf aW52YWxpZGF0ZV9hbGxfdXNlcihwbWFwKTsKKwllbHNlCisJCXBtYXAtPnBtX2FzaWRbUENQVV9H RVQoY3B1aWQpXS5nZW4gPSAwOworfQorCisjaWZkZWYgU01QCiBzdGF0aWMgdm9pZAogcG1hcF9p bnZhbGlkYXRlX2FsbChwbWFwX3QgcG1hcCkKIHsKLSNpZmRlZiBTTVAKLQlzbXBfcmVuZGV6dm91 cygwLCBwbWFwX2ludmFsaWRhdGVfYWxsX2FjdGlvbiwgMCwgKHZvaWQgKilwbWFwKTsKKwlzbXBf cmVuZGV6dm91cygwLCBwbWFwX2ludmFsaWRhdGVfYWxsX2FjdGlvbiwgMCwgcG1hcCk7CiB9CiAK IHN0YXRpYyB2b2lkCiBwbWFwX2ludmFsaWRhdGVfYWxsX2FjdGlvbih2b2lkICphcmcpCiB7Ci0J cG1hcF90IHBtYXAgPSAocG1hcF90KWFyZzsKIAorCXBtYXBfaW52YWxpZGF0ZV9hbGxfbG9jYWwo KHBtYXBfdClhcmcpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkCitwbWFwX2ludmFsaWRhdGVfYWxs KHBtYXBfdCBwbWFwKQoreworCisJcG1hcF9pbnZhbGlkYXRlX2FsbF9sb2NhbChwbWFwKTsKK30K ICNlbmRpZgogCi0JaWYgKHBtYXAgPT0ga2VybmVsX3BtYXApIHsKLQkJdGxiX2ludmFsaWRhdGVf YWxsKCk7CitzdGF0aWMgX19pbmxpbmUgdm9pZAorcG1hcF9pbnZhbGlkYXRlX3BhZ2VfbG9jYWwo cG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhKQoreworCisJaWYgKGlzX2tlcm5lbF9wbWFwKHBt YXApKSB7CisJCXRsYl9pbnZhbGlkYXRlX2FkZHJlc3MocG1hcCwgdmEpOwogCQlyZXR1cm47CiAJ fQotCi0JaWYgKHBtYXAtPnBtX2FjdGl2ZSAmIFBDUFVfR0VUKGNwdW1hc2spKQotCQl0bGJfaW52 YWxpZGF0ZV9hbGxfdXNlcihwbWFwKTsKLQllbHNlCisJaWYgKHBtYXAtPnBtX2FzaWRbUENQVV9H RVQoY3B1aWQpXS5nZW4gIT0gUENQVV9HRVQoYXNpZF9nZW5lcmF0aW9uKSkKKwkJcmV0dXJuOwor CWVsc2UgaWYgKCEocG1hcC0+cG1fYWN0aXZlICYgUENQVV9HRVQoY3B1bWFzaykpKSB7CiAJCXBt YXAtPnBtX2FzaWRbUENQVV9HRVQoY3B1aWQpXS5nZW4gPSAwOworCQlyZXR1cm47CisJfQorCXRs Yl9pbnZhbGlkYXRlX2FkZHJlc3MocG1hcCwgdmEpOwogfQogCisjaWZkZWYgU01QCiBzdHJ1Y3Qg cG1hcF9pbnZhbGlkYXRlX3BhZ2VfYXJnIHsKIAlwbWFwX3QgcG1hcDsKIAl2bV9vZmZzZXRfdCB2 YTsKIH07CiAKLXN0YXRpYyBfX2lubGluZSB2b2lkCitzdGF0aWMgdm9pZAogcG1hcF9pbnZhbGlk YXRlX3BhZ2UocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhKQogewotI2lmZGVmIFNNUAogCXN0 cnVjdCBwbWFwX2ludmFsaWRhdGVfcGFnZV9hcmcgYXJnOwogCiAJYXJnLnBtYXAgPSBwbWFwOwog CWFyZy52YSA9IHZhOwotCi0Jc21wX3JlbmRlenZvdXMoMCwgcG1hcF9pbnZhbGlkYXRlX3BhZ2Vf YWN0aW9uLCAwLCAodm9pZCAqKSZhcmcpOworCXNtcF9yZW5kZXp2b3VzKDAsIHBtYXBfaW52YWxp ZGF0ZV9wYWdlX2FjdGlvbiwgMCwgJmFyZyk7CiB9CiAKIHN0YXRpYyB2b2lkCiBwbWFwX2ludmFs aWRhdGVfcGFnZV9hY3Rpb24odm9pZCAqYXJnKQogewotCXBtYXBfdCBwbWFwID0gKChzdHJ1Y3Qg cG1hcF9pbnZhbGlkYXRlX3BhZ2VfYXJnICopYXJnKS0+cG1hcDsKLQl2bV9vZmZzZXRfdCB2YSA9 ICgoc3RydWN0IHBtYXBfaW52YWxpZGF0ZV9wYWdlX2FyZyAqKWFyZyktPnZhOworCXN0cnVjdCBw bWFwX2ludmFsaWRhdGVfcGFnZV9hcmcgKnAgPSBhcmc7CiAKKwlwbWFwX2ludmFsaWRhdGVfcGFn ZV9sb2NhbChwLT5wbWFwLCBwLT52YSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQKK3BtYXBfaW52 YWxpZGF0ZV9wYWdlKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSkKK3sKKworCXBtYXBfaW52 YWxpZGF0ZV9wYWdlX2xvY2FsKHBtYXAsIHZhKTsKK30KICNlbmRpZgogCitzdGF0aWMgX19pbmxp bmUgdm9pZAorcG1hcF91cGRhdGVfcGFnZV9sb2NhbChwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3Qg dmEsIHB0X2VudHJ5X3QgcHRlKQoreworCiAJaWYgKGlzX2tlcm5lbF9wbWFwKHBtYXApKSB7Ci0J CXRsYl9pbnZhbGlkYXRlX2FkZHJlc3MocG1hcCwgdmEpOworCQl0bGJfdXBkYXRlKHBtYXAsIHZh LCBwdGUpOwogCQlyZXR1cm47CiAJfQogCWlmIChwbWFwLT5wbV9hc2lkW1BDUFVfR0VUKGNwdWlk KV0uZ2VuICE9IFBDUFVfR0VUKGFzaWRfZ2VuZXJhdGlvbikpCkBAIC02NTUsOSArNjk0LDEwIEBA CiAJCXBtYXAtPnBtX2FzaWRbUENQVV9HRVQoY3B1aWQpXS5nZW4gPSAwOwogCQlyZXR1cm47CiAJ fQotCXRsYl9pbnZhbGlkYXRlX2FkZHJlc3MocG1hcCwgdmEpOworCXRsYl91cGRhdGUocG1hcCwg dmEsIHB0ZSk7CiB9CiAKKyNpZmRlZiBTTVAKIHN0cnVjdCBwbWFwX3VwZGF0ZV9wYWdlX2FyZyB7 CiAJcG1hcF90IHBtYXA7CiAJdm1fb2Zmc2V0X3QgdmE7CkBAIC02NjcsMzcgKzcwNywzMSBAQAog dm9pZAogcG1hcF91cGRhdGVfcGFnZShwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIHB0X2Vu dHJ5X3QgcHRlKQogewotI2lmZGVmIFNNUAogCXN0cnVjdCBwbWFwX3VwZGF0ZV9wYWdlX2FyZyBh cmc7CiAKIAlhcmcucG1hcCA9IHBtYXA7CiAJYXJnLnZhID0gdmE7CiAJYXJnLnB0ZSA9IHB0ZTsK IAotCXNtcF9yZW5kZXp2b3VzKDAsIHBtYXBfdXBkYXRlX3BhZ2VfYWN0aW9uLCAwLCAodm9pZCAq KSZhcmcpOworCXNtcF9yZW5kZXp2b3VzKDAsIHBtYXBfdXBkYXRlX3BhZ2VfYWN0aW9uLCAwLCAm YXJnKTsKIH0KIAogc3RhdGljIHZvaWQKIHBtYXBfdXBkYXRlX3BhZ2VfYWN0aW9uKHZvaWQgKmFy ZykKIHsKLQlwbWFwX3QgcG1hcCA9ICgoc3RydWN0IHBtYXBfdXBkYXRlX3BhZ2VfYXJnICopYXJn KS0+cG1hcDsKLQl2bV9vZmZzZXRfdCB2YSA9ICgoc3RydWN0IHBtYXBfdXBkYXRlX3BhZ2VfYXJn ICopYXJnKS0+dmE7Ci0JcHRfZW50cnlfdCBwdGUgPSAoKHN0cnVjdCBwbWFwX3VwZGF0ZV9wYWdl X2FyZyAqKWFyZyktPnB0ZTsKKwlzdHJ1Y3QgcG1hcF91cGRhdGVfcGFnZV9hcmcgKnAgPSBhcmc7 CiAKLSNlbmRpZgotCWlmIChpc19rZXJuZWxfcG1hcChwbWFwKSkgewotCQl0bGJfdXBkYXRlKHBt YXAsIHZhLCBwdGUpOwotCQlyZXR1cm47Ci0JfQotCWlmIChwbWFwLT5wbV9hc2lkW1BDUFVfR0VU KGNwdWlkKV0uZ2VuICE9IFBDUFVfR0VUKGFzaWRfZ2VuZXJhdGlvbikpCi0JCXJldHVybjsKLQll bHNlIGlmICghKHBtYXAtPnBtX2FjdGl2ZSAmIFBDUFVfR0VUKGNwdW1hc2spKSkgewotCQlwbWFw LT5wbV9hc2lkW1BDUFVfR0VUKGNwdWlkKV0uZ2VuID0gMDsKLQkJcmV0dXJuOwotCX0KLQl0bGJf dXBkYXRlKHBtYXAsIHZhLCBwdGUpOworCXBtYXBfdXBkYXRlX3BhZ2VfbG9jYWwocC0+cG1hcCwg cC0+dmEsIHAtPnB0ZSk7CiB9CisjZWxzZQordm9pZAorcG1hcF91cGRhdGVfcGFnZShwbWFwX3Qg cG1hcCwgdm1fb2Zmc2V0X3QgdmEsIHB0X2VudHJ5X3QgcHRlKQorewogCisJcG1hcF91cGRhdGVf cGFnZV9sb2NhbChwbWFwLCB2YSwgcHRlKTsKK30KKyNlbmRpZgorCiAvKgogICoJUm91dGluZToJ cG1hcF9leHRyYWN0CiAgKglGdW5jdGlvbjoKQEAgLTc3Nyw3ICs4MTEsOCBAQAogCXB0ZSA9IHBt YXBfcHRlKGtlcm5lbF9wbWFwLCB2YSk7CiAJb3B0ZSA9ICpwdGU7CiAJKnB0ZSA9IG5wdGU7Ci0J cG1hcF91cGRhdGVfcGFnZShrZXJuZWxfcG1hcCwgdmEsIG5wdGUpOworCWlmIChwdGVfdGVzdCgm b3B0ZSwgUFRFX1YpICYmIG9wdGUgIT0gbnB0ZSkKKwkJcG1hcF91cGRhdGVfcGFnZShrZXJuZWxf cG1hcCwgdmEsIG5wdGUpOwogfQogCiAvKgo= --0016e64c1dc2cb8ec2048d853700 Content-Type: text/x-patch; charset=US-ASCII; name="pmap-emulate-modified.patch" Content-Disposition: attachment; filename="pmap-emulate-modified.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gcppx3v81 SW5kZXg6IHN5cy9taXBzL2luY2x1ZGUvcG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9taXBzL2lu Y2x1ZGUvcG1hcC5oCShyZXZpc2lvbiAyMTEwNjYpCisrKyBzeXMvbWlwcy9pbmNsdWRlL3BtYXAu aAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBACiBpbnQgcG1hcF9jb21wdXRlX3Bh Z2VzX3RvX2R1bXAodm9pZCk7CiB2b2lkIHBtYXBfdXBkYXRlX3BhZ2UocG1hcF90IHBtYXAsIHZt X29mZnNldF90IHZhLCBwdF9lbnRyeV90IHB0ZSk7CiB2b2lkIHBtYXBfZmx1c2hfcHZjYWNoZSh2 bV9wYWdlX3QgbSk7Ci0KK2ludCBwbWFwX2VtdWxhdGVfbW9kaWZpZWQocG1hcF90IHBtYXAsIHZt X29mZnNldF90IHZhKTsKICNlbmRpZgkJCQkvKiBfS0VSTkVMICovCiAKICNlbmRpZgkJCQkvKiAh TE9DT1JFICovCkluZGV4OiBzeXMvbWlwcy9taXBzL3BtYXAuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv bWlwcy9taXBzL3BtYXAuYwkocmV2aXNpb24gMjExMDY4KQorKysgc3lzL21pcHMvbWlwcy9wbWFw LmMJKHdvcmtpbmcgY29weSkKQEAgLTMyMzAsMTYgKzMyNjUsNDIgQEAKIAlyZXR1cm4gKHJ3KTsK IH0KIAotLyoKLSAqCXBtYXBfc2V0X21vZGlmaWVkOgotICoKLSAqCVNldHMgdGhlIHBhZ2UgbW9k aWZpZWQgYW5kIHJlZmVyZW5jZSBiaXRzIGZvciB0aGUgc3BlY2lmaWVkIHBhZ2UuCi0gKi8KLXZv aWQKLXBtYXBfc2V0X21vZGlmaWVkKHZtX29mZnNldF90IHBhKQoraW50CitwbWFwX2VtdWxhdGVf bW9kaWZpZWQocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhKQogeworCXZtX3BhZ2VfdCBtOwor CXB0X2VudHJ5X3QgKnB0ZTsKKyAJdm1fb2Zmc2V0X3QgcGE7CiAKLQlQSFlTX1RPX1ZNX1BBR0Uo cGEpLT5tZC5wdl9mbGFncyB8PSAoUFZfVEFCTEVfUkVGIHwgUFZfVEFCTEVfTU9EKTsKKwlQTUFQ X0xPQ0socG1hcCk7CisJcHRlID0gcG1hcF9wdGUocG1hcCwgdmEpOworCWlmIChwdGUgPT0gTlVM TCkKKwkJcGFuaWMoInBtYXBfZW11bGF0ZV9tb2RpZmllZDogY2FuJ3QgZmluZCBQVEUiKTsKKyNp ZmRlZiBTTVAKKwkvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHNvbWUgb3RoZXIgQ1BVIGNoYW5nZWQg bS1iaXQgKi8KKwlpZiAoIXB0ZV90ZXN0KHB0ZSwgUFRFX1YpIHx8IHB0ZV90ZXN0KHB0ZSwgUFRF X0QpKSB7CisJCXBtYXBfdXBkYXRlX3BhZ2VfbG9jYWwocG1hcCwgdmEsICpwdGUpOworCQlQTUFQ X1VOTE9DSyhrZXJuZWxfcG1hcCk7CisJCXJldHVybiAoMCk7CisJfQorI2Vsc2UKKwlpZiAoIXB0 ZV90ZXN0KHB0ZSwgUFRFX1YpIHx8IHB0ZV90ZXN0KHB0ZSwgUFRFX0QpKQorCQlwYW5pYygicG1h cF9lbXVsYXRlX21vZGlmaWVkOiBpbnZhbGlkIHB0ZSIpOworI2VuZGlmCisJaWYgKHB0ZV90ZXN0 KHB0ZSwgUFRFX1JPKSkgeworCQkvKiB3cml0ZSB0byByZWFkIG9ubHkgcGFnZSBpbiB0aGUga2Vy bmVsICovCisJCVBNQVBfVU5MT0NLKHBtYXApOworCQlyZXR1cm4gKDEpOworCX0KKwlwdGVfc2V0 KHB0ZSwgUFRFX0QpOworCXBtYXBfdXBkYXRlX3BhZ2VfbG9jYWwocG1hcCwgdmEsICpwdGUpOwor CXBhID0gVExCTE9fUFRFX1RPX1BBKCpwdGUpOworCWlmICghcGFnZV9pc19tYW5hZ2VkKHBhKSkK KwkJcGFuaWMoInBtYXBfZW11bGF0ZV9tb2RpZmllZDogdW5tYW5hZ2VkIHBhZ2UiKTsKKwltID0g UEhZU19UT19WTV9QQUdFKHBhKTsKKwltLT5tZC5wdl9mbGFncyB8PSAoUFZfVEFCTEVfUkVGIHwg UFZfVEFCTEVfTU9EKTsKKwlQTUFQX1VOTE9DSyhwbWFwKTsKKwlyZXR1cm4gKDApOwogfQogCiAv KgpJbmRleDogc3lzL21pcHMvbWlwcy90cmFwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL21pcHMvbWlw cy90cmFwLmMJKHJldmlzaW9uIDIxMTA2NikKKysrIHN5cy9taXBzL21pcHMvdHJhcC5jCSh3b3Jr aW5nIGNvcHkpCkBAIC0yODEsNyArMjgxLDYgQEAKIAlzdHJ1Y3QgdGhyZWFkICp0ZCA9IGN1cnRo cmVhZDsKIAlzdHJ1Y3QgcHJvYyAqcCA9IGN1cnByb2M7CiAJdm1fcHJvdF90IGZ0eXBlOwotCXB0 X2VudHJ5X3QgKnB0ZTsKIAlwbWFwX3QgcG1hcDsKIAlpbnQgYWNjZXNzX3R5cGU7CiAJa3NpZ2lu Zm9fdCBrc2k7CkBAIC0zNzIsODIgKzM3MSwyNCBAQAogCWNhc2UgVF9UTEJfTU9EOgogCQkvKiBj aGVjayBmb3Iga2VybmVsIGFkZHJlc3MgKi8KIAkJaWYgKEtFUk5MQU5EKHRyYXBmcmFtZS0+YmFk dmFkZHIpKSB7Ci0JCQl2bV9vZmZzZXRfdCBwYTsKLQotCQkJUE1BUF9MT0NLKGtlcm5lbF9wbWFw KTsKLQkJCXB0ZSA9IHBtYXBfcHRlKGtlcm5lbF9wbWFwLCB0cmFwZnJhbWUtPmJhZHZhZGRyKTsK LQkJCWlmIChwdGUgPT0gTlVMTCkKLQkJCQlwYW5pYygidHJhcDoga3RsYm1vZDogY2FuJ3QgZmlu ZCBQVEUiKTsKLSNpZmRlZiBTTVAKLQkJCS8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgc29tZSBvdGhl ciBDUFUgY2hhbmdlZCBtLWJpdCAqLwotCQkJaWYgKCFwdGVfdGVzdChwdGUsIFBURV9WKSB8fCBw dGVfdGVzdChwdGUsIFBURV9EKSkgewotCQkJCXBtYXBfdXBkYXRlX3BhZ2Uoa2VybmVsX3BtYXAs Ci0JCQkJICAgIHRyYXBmcmFtZS0+YmFkdmFkZHIsICpwdGUpOwotCQkJCVBNQVBfVU5MT0NLKGtl cm5lbF9wbWFwKTsKLQkJCQlyZXR1cm4gKHRyYXBmcmFtZS0+cGMpOwotCQkJfQotI2Vsc2UKLQkJ CWlmICghcHRlX3Rlc3QocHRlLCBQVEVfVikgfHwgcHRlX3Rlc3QocHRlLCBQVEVfRCkpCi0JCQkJ cGFuaWMoInRyYXA6IGt0bGJtb2Q6IGludmFsaWQgcHRlIik7Ci0jZW5kaWYKLQkJCWlmIChwdGVf dGVzdChwdGUsIFBURV9STykpIHsKLQkJCQkvKiB3cml0ZSB0byByZWFkIG9ubHkgcGFnZSBpbiB0 aGUga2VybmVsICovCisJCQlpZiAocG1hcF9lbXVsYXRlX21vZGlmaWVkKGtlcm5lbF9wbWFwLCAK KwkJCSAgICB0cmFwZnJhbWUtPmJhZHZhZGRyKSAhPSAwKSB7CiAJCQkJZnR5cGUgPSBWTV9QUk9U X1dSSVRFOwotCQkJCVBNQVBfVU5MT0NLKGtlcm5lbF9wbWFwKTsKIAkJCQlnb3RvIGtlcm5lbF9m YXVsdDsKIAkJCX0KLQkJCXB0ZV9zZXQocHRlLCBQVEVfRCk7Ci0JCQlwbWFwX3VwZGF0ZV9wYWdl KGtlcm5lbF9wbWFwLCB0cmFwZnJhbWUtPmJhZHZhZGRyLCAqcHRlKTsKLQkJCXBhID0gVExCTE9f UFRFX1RPX1BBKCpwdGUpOwotCQkJaWYgKCFwYWdlX2lzX21hbmFnZWQocGEpKQotCQkJCXBhbmlj KCJ0cmFwOiBrdGxibW9kOiB1bm1hbmFnZWQgcGFnZSIpOwotCQkJcG1hcF9zZXRfbW9kaWZpZWQo cGEpOwotCQkJUE1BUF9VTkxPQ0soa2VybmVsX3BtYXApOwogCQkJcmV0dXJuICh0cmFwZnJhbWUt PnBjKTsKIAkJfQogCQkvKiBGQUxMVEhST1VHSCAqLwogCiAJY2FzZSBUX1RMQl9NT0QgKyBUX1VT RVI6Ci0JCXsKLQkJCXZtX29mZnNldF90IHBhOwotCi0JCQlwbWFwID0gJnAtPnBfdm1zcGFjZS0+ dm1fcG1hcDsKLQotCQkJUE1BUF9MT0NLKHBtYXApOwotCQkJcHRlID0gcG1hcF9wdGUocG1hcCwg dHJhcGZyYW1lLT5iYWR2YWRkcik7Ci0JCQlpZiAocHRlID09IE5VTEwpCi0JCQkJcGFuaWMoInRy YXA6IHV0bGJtb2Q6IGNhbid0IGZpbmQgUFRFIik7Ci0jaWZkZWYgU01QCi0JCQkvKiBJdCBpcyBw b3NzaWJsZSB0aGF0IHNvbWUgb3RoZXIgQ1BVIGNoYW5nZWQgbS1iaXQgKi8KLQkJCWlmICghcHRl X3Rlc3QocHRlLCBQVEVfVikgfHwgcHRlX3Rlc3QocHRlLCBQVEVfRCkpIHsKLQkJCQlwbWFwX3Vw ZGF0ZV9wYWdlKHBtYXAsIHRyYXBmcmFtZS0+YmFkdmFkZHIsICpwdGUpOwotCQkJCVBNQVBfVU5M T0NLKHBtYXApOwotCQkJCWdvdG8gb3V0OwotCQkJfQotI2Vsc2UKLQkJCWlmICghcHRlX3Rlc3Qo cHRlLCBQVEVfVikgfHwgcHRlX3Rlc3QocHRlLCBQVEVfRCkpCi0JCQkJcGFuaWMoInRyYXA6IHV0 bGJtb2Q6IGludmFsaWQgcHRlIik7Ci0jZW5kaWYKLQotCQkJaWYgKHB0ZV90ZXN0KHB0ZSwgUFRF X1JPKSkgewotCQkJCS8qIHdyaXRlIHRvIHJlYWQgb25seSBwYWdlICovCi0JCQkJZnR5cGUgPSBW TV9QUk9UX1dSSVRFOwotCQkJCVBNQVBfVU5MT0NLKHBtYXApOwotCQkJCWdvdG8gZG9mYXVsdDsK LQkJCX0KLQkJCXB0ZV9zZXQocHRlLCBQVEVfRCk7Ci0JCQlwbWFwX3VwZGF0ZV9wYWdlKHBtYXAs IHRyYXBmcmFtZS0+YmFkdmFkZHIsICpwdGUpOwotCQkJcGEgPSBUTEJMT19QVEVfVE9fUEEoKnB0 ZSk7Ci0JCQlpZiAoIXBhZ2VfaXNfbWFuYWdlZChwYSkpCi0JCQkJcGFuaWMoInRyYXA6IHV0bGJt b2Q6IHVubWFuYWdlZCBwYWdlIik7Ci0JCQlwbWFwX3NldF9tb2RpZmllZChwYSk7Ci0KLQkJCVBN QVBfVU5MT0NLKHBtYXApOwotCQkJaWYgKCF1c2VybW9kZSkgewotCQkJCXJldHVybiAodHJhcGZy YW1lLT5wYyk7Ci0JCQl9Ci0JCQlnb3RvIG91dDsKKwkJcG1hcCA9ICZwLT5wX3Ztc3BhY2UtPnZt X3BtYXA7CisJCWlmIChwbWFwX2VtdWxhdGVfbW9kaWZpZWQocG1hcCwgdHJhcGZyYW1lLT5iYWR2 YWRkcikgIT0gMCkgeworCQkJZnR5cGUgPSBWTV9QUk9UX1dSSVRFOworCQkJZ290byBkb2ZhdWx0 OwogCQl9CisJCWlmICghdXNlcm1vZGUpCisJCQlyZXR1cm4gKHRyYXBmcmFtZS0+cGMpOworCQln b3RvIG91dDsKIAogCWNhc2UgVF9UTEJfTERfTUlTUzoKIAljYXNlIFRfVExCX1NUX01JU1M6Cg== --0016e64c1dc2cb8ec2048d853700--