Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755862AbZFSXy7 (ORCPT ); Fri, 19 Jun 2009 19:54:59 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752576AbZFSXyv (ORCPT ); Fri, 19 Jun 2009 19:54:51 -0400 Received: from acsinet11.oracle.com ([141.146.126.233]:25387 "EHLO acsinet11.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751960AbZFSXyt (ORCPT ); Fri, 19 Jun 2009 19:54:49 -0400 MIME-Version: 1.0 Message-ID: Date: Fri, 19 Jun 2009 16:53:45 -0700 (PDT) From: Dan Magenheimer To: linux-kernel@vger.kernel.org Cc: xen-devel@lists.xensource.com, npiggin@suse.de, chris.mason@oracle.com, kurt.hackel@oracle.com, dave.mccracken@oracle.com, Avi Kivity , jeremy@goop.org, Rik van Riel , alan@lxorguk.ukuu.org.uk, Rusty Russell , Martin Schwidefsky , akpm@osdl.org, Marcelo Tosatti , Balbir Singh , tmem-devel@oss.oracle.com, sunil.mushran@oracle.com, linux-mm@kvack.org, Himanshu Raj Subject: [RFC] transcendent memory for Linux X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 1.5.1 (304090) [OL 9.0.0.6627] Content-Type: multipart/mixed; boundary="__12454556309492264abhmt009.oracle.com" X-Source-IP: abhmt009.oracle.com [141.146.116.18] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090202.4A3C2511.006D:SCFSTAT5015188,ss=1,fgs=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 61743 Lines: 883 --__12454556309492264abhmt009.oracle.com Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Normal memory is directly addressable by the kernel, of a known normally-fixed size, synchronously accessible, and persistent (though not across a reboot). What if there was a class of memory that is of unknown and dynamically variable size, is addressable only indirectly by the kernel, can be configured either as persistent or as "ephemeral" (meaning it will be around for awhile, but might disappear without warning), and is still fast enough to be synchronously accessible? We call this latter class "transcendent memory" and it provides an interesting opportunity to more efficiently utilize RAM in a virtualized environment. However this "memory but not really memory" may also have applications in NON-virtualized environments, such as hotplug-memory deletion, SSDs, and page cache compression. Others have suggested ideas such as allowing use of highmem memory without a highmem kernel, or use of spare video memory. Transcendent memory, or "tmem" for short, provides a well-defined API to access this unusual class of memory. The basic operations are page-copy-based and use a flexible object-oriented addressing mechanism. Tmem assumes that some "privileged entity" is capable of executing tmem requests and storing pages of data; this entity is currently a hypervisor and operations are performed via hypercalls, but the entity could be a kernel policy, or perhaps a "memory node" in a cluster of blades connected by a high-speed interconnect such as hypertransport or QPI. Since tmem is not directly accessible and because page copying is done to/from physical pageframes, it more suitable for in-kernel memory needs than for userland applications. However, there may be yet undiscovered userland possibilities. With the tmem concept outlined vaguely and its broader potential hinted, we will overview two existing examples of how tmem can be used by the kernel. These examples are implemented in the attached (2.6.30-based) patches. "Precache" can be thought of as a page-granularity victim cache for clean pages that the kernel's pageframe replacement algorithm (PFRA) would like to keep around, but can't since there isn't enough memory. So when the PFRA "evicts" a page, it first puts it into the precache via a call to tmem. And any time a filesystem reads a page from disk, it first attempts to get the page from precache. If it's there, a disk access is eliminated. If not, the filesystem just goes to the disk like normal. Precache is "ephemeral" so whether a page is kept in precache (between the "put" and the "get") is dependent on a number of factors that are invisible to the kernel. "Preswap" IS persistent, but for various reasons may not always be available for use, again due to factors that may not be visible to the kernel (but, briefly, if the kernel is being "good" and has shared its resources nicely, then it will be able to use preswap, else it will not). Once a page is put, a get on the page will always succeed. So when the kernel finds itself in a situation where it needs to swap out a page, it first attempts to use preswap. If the put works, a disk write and (usually) a disk read are avoided. If it doesn't, the page is written to swap as usual. Unlike precache, whether a page is stored in preswap vs swap is recorded in kernel data structures, so when a page needs to be fetched, the kernel does a get if it is in preswap and reads from swap if it is not in preswap. Both precache and preswap may be optionally compressed, trading off 2x space reduction vs 10x performance for access. Precache also has a sharing feature, which allows different nodes in a "virtual cluster" to share a local page cache. (In the attached patch, precache is only implemented for ext3 and shared precache is only implemented for ocfs2.) Tmem has some similarity to IBM's Collaborative Memory Management, but creates more of a partnership between the kernel and the "privileged entity" and is not very invasive. Tmem may be applicable for KVM and containers; there is some disagreement on the extent of its value. Tmem is highly complementary to ballooning (aka page granularity hot plug) and memory deduplication (aka transparent content-based page sharing) but still has value when neither are present. Performance is difficult to quantify because some benchmarks respond very favorably to increases in memory and tmem may do quite well on those, depending on how much tmem is available which may vary widely and dynamically, depending on conditions completely outside of the system being measured. I'd appreciate ideas on how best to provide useful metrics. Tmem is now supported in Xen's unstable tree and in Xen's 2.6.18-xen source tree. Again, Xen is not necessarily a requirement, but currently provides the only existing implementation of tmem. Lots more information about tmem can be found at: http://oss.oracle.com/projects/tmem and there will be a talk about it on the first day of Linux Symposium next month. Tmem is the result of a group effort, including Chris Mason, Dave McCracken, Kurt Hackel and Zhigang Wang, with helpful input from Jeremy Fitzhardinge, Keir Fraser, Ian Pratt, Sunil Mushran, and Joel Becker Patches are as follows (organized for review, not for sequential application): tmeminf.patch=09infrastructure for tmem layer and API precache.patch=09precache implementation (layered on tmem) preswap.patch=09preswap implementation (layered on tmem) tmemxen.patch=09interface code for tmem on top of Xen Diffstat below, reorganized to show changed vs new files, and core kernel vs xen. (Also attached in case the formatting gets messed up.) Any feedback appreciated! Thanks, Dan Magenheimer Changed core kernel files: fs/buffer.c | 5 + fs/ext3/super.c | 2=20 fs/mpage.c | 8 ++ fs/ocfs2/super.c | 2=20 fs/super.c | 5 + include/linux/fs.h | 7 ++ include/linux/swap.h | 57 +++++++++++++++++++++ include/linux/sysctl.h | 1=20 kernel/sysctl.c | 12 ++++ mm/Kconfig | 27 +++++++++ mm/Makefile | 2=20 mm/filemap.c | 11 ++++ mm/page_io.c | 12 ++++ mm/swapfile.c | 41 ++++++++++++--- mm/truncate.c | 10 +++ 15 files changed, 196 insertions(+), 6 deletions(-) Newly added core kernel files: include/linux/tmem.h | 22 + mm/precache.c | 146 +++++++++++ mm/preswap.c | 274 +++++++++++++++++++++ 3 files changed, 442 insertions(+) Changed xen-specific files: arch/x86/include/asm/xen/hypercall.h | 8 +++ drivers/xen/Makefile | 1=20 include/xen/interface/tmem.h | 43 +++++++++++++++++++++ include/xen/interface/xen.h | 22 ++++++++++ 4 files changed, 74 insertions(+) Newly added xen-specific files: drivers/xen/tmem.c | 106 +++++++++++++++++++++ include/xen/interface/tmem.h | 43 ++++++++ 2 files changed, 149 insertions(+) --__12454556309492264abhmt009.oracle.com Content-Type: application/octet-stream; name="tmeminf.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tmeminf.patch" LS0tIGxpbnV4LTIuNi4zMC9tbS9LY29uZmlnCTIwMDktMDYtMDkgMjE6MDU6MjcuMDAwMDAwMDAw IC0wNjAwCisrKyBsaW51eC0yLjYuMzAtdG1lbS9tbS9LY29uZmlnCTIwMDktMDYtMTkgMDk6MzY6 NDEuMDAwMDAwMDAwIC0wNjAwCkBAIC0yNTMsMyArMjUzLDMwIEBACiAJICBvZiAxIHNheXMgdGhh dCBhbGwgZXhjZXNzIHBhZ2VzIHNob3VsZCBiZSB0cmltbWVkLgogCiAJICBTZWUgRG9jdW1lbnRh dGlvbi9ub21tdS1tbWFwLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworIworIyBzdXBwb3J0 IGZvciB0cmFuc2NlbmRlbnQgbWVtb3J5CisjCitjb25maWcgVE1FTQorCWJvb2wgIlRyYW5zY2Vu ZGVudCBtZW1vcnkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFhFTiAjIGJ1dCBpbiBmdXR1cmUgbWF5 IHdvcmsgd2l0aG91dCBYRU4KKwloZWxwCisJICBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50 LCBhbGxvd3MgdW51c2VkIGFuZCB1bmRlcnV0aWxpemVkCisJICBzeXN0ZW0gcGh5c2ljYWwgbWVt b3J5IHRvIGJlIG1hZGUgYWNjZXNzaWJsZSB0aHJvdWdoIGEgbmFycm93CisJICB3ZWxsLWRlZmlu ZWQgcGFnZS1jb3B5LWJhc2VkIEFQSS4gIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBQUkVD QUNIRQorCWJvb2wgIkNhY2hlIGNsZWFuIHBhZ2VzIGluIHRyYW5zY2VuZGVudCBtZW1vcnkiCisJ ZGVwZW5kcyBvbiBUTUVNCisJaGVscAorCSAgQWxsb3dzIHRoZSB0cmFuc2NlbmRlbnQgbWVtb3J5 IHBvb2wgdG8gYmUgdXNlZCB0byBzdG9yZSBjbGVhbgorCSAgcGFnZS1jYWNoZSBwYWdlcyB3aGlj aCwgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCB3aWxsIGdyZWF0bHkKKwkgIHJlZHVjZSBwYWdp bmcgYW5kIHRodXMgaW1wcm92ZSBwZXJmb3JtYW5jZS4gIElmIHVuc3VyZSwgc2F5IFkuCisKK2Nv bmZpZyBQUkVTV0FQCisJYm9vbCAiU3dhcCBwYWdlcyB0byB0cmFuc2NlbmRlbnQgbWVtb3J5Igor CWRlcGVuZHMgb24gVE1FTQorCWhlbHAKKwkgIEFsbG93cyB0aGUgdHJhbnNjZW5kZW50IG1lbW9y eSBwb29sIHRvIGJlIHVzZWQgYXMgYSBwc2V1ZG8tc3dhcAorCSAgZGV2aWNlIHdoaWNoLCB1bmRl ciBzb21lIGNpcmN1bXN0YW5jZXMsIHdpbGwgZ3JlYXRseSByZWR1Y2UKKwkgIHN3YXBwaW5nIGFu ZCB0aHVzIGltcHJvdmUgcGVyZm9ybWFuY2UuICBJZiB1bnN1cmUsIHNheSBZLgotLS0gbGludXgt Mi42LjMwL21tL01ha2VmaWxlCTIwMDktMDYtMDkgMjE6MDU6MjcuMDAwMDAwMDAwIC0wNjAwCisr KyBsaW51eC0yLjYuMzAtdG1lbS9tbS9NYWtlZmlsZQkyMDA5LTA2LTE5IDA5OjMzOjU5LjAwMDAw MDAwMCAtMDYwMApAQCAtMTYsNiArMTYsOCBAQAogb2JqLSQoQ09ORklHX1BST0NfUEFHRV9NT05J VE9SKSArPSBwYWdld2Fsay5vCiBvYmotJChDT05GSUdfQk9VTkNFKQkrPSBib3VuY2Uubwogb2Jq LSQoQ09ORklHX1NXQVApCSs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUubyB0aHJh c2gubworb2JqLSQoQ09ORklHX1BSRVNXQVApCSs9IHByZXN3YXAubworb2JqLSQoQ09ORklHX1BS RUNBQ0hFKQkrPSBwcmVjYWNoZS5vCiBvYmotJChDT05GSUdfSEFTX0RNQSkJKz0gZG1hcG9vbC5v CiBvYmotJChDT05GSUdfSFVHRVRMQkZTKQkrPSBodWdldGxiLm8KIG9iai0kKENPTkZJR19OVU1B KSAJKz0gbWVtcG9saWN5Lm8KLS0tIGxpbnV4LTIuNi4zMC9pbmNsdWRlL2xpbnV4L3RtZW0uaAkx OTY5LTEyLTMxIDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgbGludXgtMi42LjMwLXRtZW0v aW5jbHVkZS9saW51eC90bWVtLmgJMjAwOS0wNi0xOSAxMToyMTo1OC4wMDAwMDAwMDAgLTA2MDAK QEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIGxpbnV4L3RtZW0uaAorICoKKyAqIEludGVyZmFjZSB0 byB0cmFuc2NlbmRlbnQgbWVtb3J5LCB1c2VkIGJ5IG1tL3ByZWNhY2hlLmMgYW5kIG1tL3ByZXN3 YXAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IERhbiBNYWdlbmhlaW1lciwgT3Jh Y2xlIENvcnAuCisgKi8KKworc3RydWN0IHRtZW1fb3BzIHsKKwlpbnQgKCpuZXdfcG9vbCkodTY0 IHV1aWRfbG8sIHU2NCB1dWlkX2hpLCB1MzIgZmxhZ3MpOworCWludCAoKnB1dF9wYWdlKSh1MzIg cG9vbF9pZCwgdTY0IG9iamVjdCwgdTMyIGluZGV4LCB1bnNpZ25lZCBsb25nIGdtZm4pOworCWlu dCAoKmdldF9wYWdlKSh1MzIgcG9vbF9pZCwgdTY0IG9iamVjdCwgdTMyIGluZGV4LCB1bnNpZ25l ZCBsb25nIGdtZm4pOworCWludCAoKmZsdXNoX3BhZ2UpKHUzMiBwb29sX2lkLCB1NjQgb2JqZWN0 LCB1MzIgaW5kZXgpOworCWludCAoKmZsdXNoX29iamVjdCkodTMyIHBvb2xfaWQsIHU2NCBvYmpl Y3QpOworCWludCAoKmRlc3Ryb3lfcG9vbCkodTMyIHBvb2xfaWQpOworfTsKKworZXh0ZXJuIHN0 cnVjdCB0bWVtX29wcyAqdG1lbV9vcHM7CisKKy8qIGZsYWdzIGZvciB0bWVtX29wcy5uZXdfcG9v bCAqLworI2RlZmluZSBUTUVNX1BPT0xfUEVSU0lTVCAgICAgICAgICAxCisjZGVmaW5lIFRNRU1f UE9PTF9TSEFSRUQgICAgICAgICAgIDIK --__12454556309492264abhmt009.oracle.com Content-Type: application/octet-stream; name="precache.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="precache.patch" LS0tIGxpbnV4LTIuNi4zMC9mcy9zdXBlci5jCTIwMDktMDYtMDkgMjE6MDU6MjcuMDAwMDAwMDAw IC0wNjAwCisrKyBsaW51eC0yLjYuMzAtdG1lbS9mcy9zdXBlci5jCTIwMDktMDYtMTkgMDk6MzM6 NTkuMDAwMDAwMDAwIC0wNjAwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0 ZXguaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4K KyNpbmNsdWRlIDxsaW51eC9wcmVjYWNoZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAj aW5jbHVkZSAiaW50ZXJuYWwuaCIKIApAQCAtMTEwLDYgKzExMSw5IEBACiAJCXMtPnNfcWNvcCA9 IHNiX3F1b3RhY3RsX29wczsKIAkJcy0+c19vcCA9ICZkZWZhdWx0X29wOwogCQlzLT5zX3RpbWVf Z3JhbiA9IDEwMDAwMDAwMDA7CisjaWZkZWYgQ09ORklHX1BSRUNBQ0hFCisJCXMtPnByZWNhY2hl X3Bvb2xpZCA9IC0xOworI2VuZGlmCiAJfQogb3V0OgogCXJldHVybiBzOwpAQCAtMjAwLDYgKzIw NCw3IEBACiAJCXZmc19kcV9vZmYocywgMCk7CiAJCWRvd25fd3JpdGUoJnMtPnNfdW1vdW50KTsK IAkJZnMtPmtpbGxfc2Iocyk7CisJCXByZWNhY2hlX2ZsdXNoX2ZpbGVzeXN0ZW0ocyk7CiAJCXB1 dF9maWxlc3lzdGVtKGZzKTsKIAkJcHV0X3N1cGVyKHMpOwogCX0KLS0tIGxpbnV4LTIuNi4zMC9m cy9leHQzL3N1cGVyLmMJMjAwOS0wNi0wOSAyMTowNToyNy4wMDAwMDAwMDAgLTA2MDAKKysrIGxp bnV4LTIuNi4zMC10bWVtL2ZzL2V4dDMvc3VwZXIuYwkyMDA5LTA2LTE5IDA5OjMzOjU5LjAwMDAw MDAwMCAtMDYwMApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+ CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+Cisj aW5jbHVkZSA8bGludXgvcHJlY2FjaGUuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAK QEAgLTEzMDYsNiArMTMwNyw3IEBACiAJfSBlbHNlIHsKIAkJcHJpbnRrKCJpbnRlcm5hbCBqb3Vy bmFsXG4iKTsKIAl9CisJcHJlY2FjaGVfaW5pdChzYik7CiAJcmV0dXJuIHJlczsKIH0KIAotLS0g bGludXgtMi42LjMwL2ZzL29jZnMyL3N1cGVyLmMJMjAwOS0wNi0wOSAyMTowNToyNy4wMDAwMDAw MDAgLTA2MDAKKysrIGxpbnV4LTIuNi4zMC10bWVtL2ZzL29jZnMyL3N1cGVyLmMJMjAwOS0wNi0x OSAwOTozMzo1OS4wMDAwMDAwMDAgLTA2MDAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxs aW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGlu dXgvcXVvdGFvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVjYWNoZS5oPgogCiAjZGVmaW5lIE1M T0dfTUFTS19QUkVGSVggTUxfU1VQRVIKICNpbmNsdWRlIDxjbHVzdGVyL21hc2tsb2cuaD4KQEAg LTIxNjIsNiArMjE2Myw3IEBACiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwog CX0KKwlzaGFyZWRfcHJlY2FjaGVfaW5pdChzYiwgJmRpLT5pZDIuaV9zdXBlci5zX3V1aWRbMF0p OwogCiBiYWlsOgogCW1sb2dfZXhpdChzdGF0dXMpOwotLS0gbGludXgtMi42LjMwL2luY2x1ZGUv bGludXgvZnMuaAkyMDA5LTA2LTA5IDIxOjA1OjI3LjAwMDAwMDAwMCAtMDYwMAorKysgbGludXgt Mi42LjMwLXRtZW0vaW5jbHVkZS9saW51eC9mcy5oCTIwMDktMDYtMTkgMDk6MzM6NTkuMDAwMDAw MDAwIC0wNjAwCkBAIC0xMzc3LDYgKzEzNzcsMTMgQEAKIAkgKiBzdG9yYWdlIGZvciBhc3luY2hy b25vdXMgb3BlcmF0aW9ucwogCSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgc19hc3luY19saXN0Owor CisjaWZkZWYgQ09ORklHX1BSRUNBQ0hFCisJLyoKKwkgKiBzYXZlZCBwb29sIGlkZW50aWZpZXIg Zm9yIHByZWNhY2hlICgtMSBtZWFucyBub25lKQorCSAqLworCXUzMiBwcmVjYWNoZV9wb29saWQ7 CisjZW5kaWYKIH07CiAKIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgY3VycmVudF9mc190aW1lKHN0 cnVjdCBzdXBlcl9ibG9jayAqc2IpOwotLS0gbGludXgtMi42LjMwL2ZzL2J1ZmZlci5jCTIwMDkt MDYtMDkgMjE6MDU6MjcuMDAwMDAwMDAwIC0wNjAwCisrKyBsaW51eC0yLjYuMzAtdG1lbS9mcy9i dWZmZXIuYwkyMDA5LTA2LTE5IDA5OjMzOjU5LjAwMDAwMDAwMCAtMDYwMApAQCAtNDEsNiArNDEs NyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L21wYWdlLmg+ CiAjaW5jbHVkZSA8bGludXgvYml0X3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcHJlY2Fj aGUuaD4KIAogc3RhdGljIGludCBmc3luY19idWZmZXJzX2xpc3Qoc3BpbmxvY2tfdCAqbG9jaywg c3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CiAKQEAgLTI3MSw2ICsyNzIsMTAgQEAKIAogCWludmFs aWRhdGVfYmhfbHJ1cygpOwogCWludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhtYXBwaW5nLCAwLCAt MSk7CisJLyogOTklIG9mIHRoZSB0aW1lLCB3ZSBkb24ndCBuZWVkIHRvIGZsdXNoIHRoZSBwcmVj YWNoZSBvbiB0aGUgYmRldi4KKwkgKiBCdXQsIGZvciB0aGUgc3RyYW5nZSBjb3JuZXJzLCBsZXRz IGJlIGNhdXRpb3VzCisJICovCisJcHJlY2FjaGVfZmx1c2hfaW5vZGUobWFwcGluZyk7CiB9CiAK IC8qCi0tLSBsaW51eC0yLjYuMzAvZnMvbXBhZ2UuYwkyMDA5LTA2LTA5IDIxOjA1OjI3LjAwMDAw MDAwMCAtMDYwMAorKysgbGludXgtMi42LjMwLXRtZW0vZnMvbXBhZ2UuYwkyMDA5LTA2LTE5IDA5 OjMzOjU5LjAwMDAwMDAwMCAtMDYwMApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4 L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8 bGludXgvcGFnZXZlYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWNhY2hlLmg+CiAKIC8qCiAgKiBJ L08gY29tcGxldGlvbiBoYW5kbGVyIGZvciBtdWx0aXBhZ2UgQklPcy4KQEAgLTI4NSw2ICsyODYs MTMgQEAKIAkJU2V0UGFnZU1hcHBlZFRvRGlzayhwYWdlKTsKIAl9CiAKKwlpZiAoZnVsbHlfbWFw cGVkICYmCisJICAgIGJsb2Nrc19wZXJfcGFnZSA9PSAxICYmICFQYWdlVXB0b2RhdGUocGFnZSkg JiYKKwkgICAgcHJlY2FjaGVfZ2V0KHBhZ2UtPm1hcHBpbmcsIHBhZ2UtPmluZGV4LCBwYWdlKSA9 PSAxKSB7CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJZ290byBjb25mdXNlZDsKKwl9CisK IAkvKgogCSAqIFRoaXMgcGFnZSB3aWxsIGdvIHRvIEJJTy4gIERvIHdlIG5lZWQgdG8gc2VuZCB0 aGlzIEJJTyBvZmYgZmlyc3Q/CiAJICovCi0tLSBsaW51eC0yLjYuMzAvbW0vdHJ1bmNhdGUuYwky MDA5LTA2LTA5IDIxOjA1OjI3LjAwMDAwMDAwMCAtMDYwMAorKysgbGludXgtMi42LjMwLXRtZW0v bW0vdHJ1bmNhdGUuYwkyMDA5LTA2LTE5IDA5OjM3OjQyLjAwMDAwMDAwMCAtMDYwMApAQCAtMTgs NiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaD4KICNp bmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgkvKiBncnIuIHRyeV90b19yZWxlYXNlX3BhZ2Us CiAJCQkJICAgZG9faW52YWxpZGF0ZXBhZ2UgKi8KKyNpbmNsdWRlIDxsaW51eC9wcmVjYWNoZS5o PgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIApAQCAtNTAsNiArNTEsNyBAQAogc3RhdGljIGlu bGluZSB2b2lkIHRydW5jYXRlX3BhcnRpYWxfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWdu ZWQgcGFydGlhbCkKIHsKIAl6ZXJvX3VzZXJfc2VnbWVudChwYWdlLCBwYXJ0aWFsLCBQQUdFX0NB Q0hFX1NJWkUpOworCXByZWNhY2hlX2ZsdXNoKHBhZ2UtPm1hcHBpbmcsIHBhZ2UtPmluZGV4KTsK IAlpZiAocGFnZV9oYXNfcHJpdmF0ZShwYWdlKSkKIAkJZG9faW52YWxpZGF0ZXBhZ2UocGFnZSwg cGFydGlhbCk7CiB9CkBAIC0xMDcsNiArMTA5LDEwIEBACiAJY2xlYXJfcGFnZV9tbG9jayhwYWdl KTsKIAlyZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwogCUNsZWFyUGFnZU1hcHBlZFRvRGlz ayhwYWdlKTsKKwkvKiB0aGlzIG11c3QgYmUgYWZ0ZXIgdGhlIHJlbW92ZV9mcm9tX3BhZ2VfY2Fj aGUgd2hpY2gKKwkgKiBjYWxscyBwcmVjYWNoZV9wdXQKKwkgKi8KKwlwcmVjYWNoZV9mbHVzaCht YXBwaW5nLCBwYWdlLT5pbmRleCk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwkvKiBwYWdl Y2FjaGUgcmVmICovCiB9CiAKQEAgLTE2OCw2ICsxNzQsNyBAQAogCXBnb2ZmX3QgbmV4dDsKIAlp bnQgaTsKIAorCXByZWNhY2hlX2ZsdXNoX2lub2RlKG1hcHBpbmcpOwogCWlmIChtYXBwaW5nLT5u cnBhZ2VzID09IDApCiAJCXJldHVybjsKIApAQCAtMjUxLDYgKzI1OCw3IEBACiAJCX0KIAkJcGFn ZXZlY19yZWxlYXNlKCZwdmVjKTsKIAl9CisJcHJlY2FjaGVfZmx1c2hfaW5vZGUobWFwcGluZyk7 CiB9CiBFWFBPUlRfU1lNQk9MKHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKTsKIApAQCAtMzk4 LDYgKzQwNiw3IEBACiAJaW50IGRpZF9yYW5nZV91bm1hcCA9IDA7CiAJaW50IHdyYXBwZWQgPSAw OwogCisJcHJlY2FjaGVfZmx1c2hfaW5vZGUobWFwcGluZyk7CiAJcGFnZXZlY19pbml0KCZwdmVj LCAwKTsKIAluZXh0ID0gc3RhcnQ7CiAJd2hpbGUgKG5leHQgPD0gZW5kICYmICF3cmFwcGVkICYm CkBAIC00NTQsNiArNDYzLDcgQEAKIAkJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKIAkJY29uZF9y ZXNjaGVkKCk7CiAJfQorCXByZWNhY2hlX2ZsdXNoX2lub2RlKG1hcHBpbmcpOwogCXJldHVybiBy ZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSk7 Ci0tLSBsaW51eC0yLjYuMzAvbW0vZmlsZW1hcC5jCTIwMDktMDYtMDkgMjE6MDU6MjcuMDAwMDAw MDAwIC0wNjAwCisrKyBsaW51eC0yLjYuMzAtdG1lbS9tbS9maWxlbWFwLmMJMjAwOS0wNi0xOSAw OTozMzo1OS4wMDAwMDAwMDAgLTA2MDAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51 eC9oYXJkaXJxLmg+IC8qIGZvciBCVUdfT04oIWluX2F0b21pYygpKSBvbmx5ICovCiAjaW5jbHVk ZSA8bGludXgvbWVtY29udHJvbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPiAvKiBm b3IgcGFnZV9pc19maWxlX2NhY2hlKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9wcmVjYWNoZS5oPgog I2luY2x1ZGUgImludGVybmFsLmgiCiAKIC8qCkBAIC0xMTYsNiArMTE3LDE2IEBACiB7CiAJc3Ry dWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOwogCisJLyoKKwkgKiBp ZiB3ZSdyZSB1cHRvZGF0ZSwgZmx1c2ggb3V0IGludG8gdGhlIHByZWNhY2hlLCBvdGhlcndpc2UK KwkgKiBpbnZhbGlkYXRlIGFueSBleGlzdGluZyBwcmVjYWNoZSBlbnRyaWVzLiAgV2UgY2FuJ3Qg bGVhdmUKKwkgKiBzdGFsZSBkYXRhIGFyb3VuZCBpbiB0aGUgcHJlY2FjaGUgb25jZSBvdXIgcGFn ZSBpcyBnb25lCisJICovCisJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkKKwkJcHJlY2FjaGVfcHV0 KHBhZ2UtPm1hcHBpbmcsIHBhZ2UtPmluZGV4LCBwYWdlKTsKKwllbHNlCisJCXByZWNhY2hlX2Zs dXNoKHBhZ2UtPm1hcHBpbmcsIHBhZ2UtPmluZGV4KTsKKwogCXJhZGl4X3RyZWVfZGVsZXRlKCZt YXBwaW5nLT5wYWdlX3RyZWUsIHBhZ2UtPmluZGV4KTsKIAlwYWdlLT5tYXBwaW5nID0gTlVMTDsK IAltYXBwaW5nLT5ucnBhZ2VzLS07Ci0tLSBsaW51eC0yLjYuMzAvaW5jbHVkZS9saW51eC9wcmVj YWNoZS5oCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYu MzAtdG1lbS9pbmNsdWRlL2xpbnV4L3ByZWNhY2hlLmgJMjAwOS0wNi0xOSAwOTozMzo1OS4wMDAw MDAwMDAgLTA2MDAKQEAgLTAsMCArMSw1NSBAQAorI2lmbmRlZiBfTElOVVhfUFJFQ0FDSEVfSAor CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaWZkZWYg Q09ORklHX1BSRUNBQ0hFCitleHRlcm4gdm9pZCBwcmVjYWNoZV9pbml0KHN0cnVjdCBzdXBlcl9i bG9jayAqc2IpOworZXh0ZXJuIHZvaWQgc2hhcmVkX3ByZWNhY2hlX2luaXQoc3RydWN0IHN1cGVy X2Jsb2NrICpzYiwgY2hhciAqdXVpZCk7CitleHRlcm4gaW50IHByZWNhY2hlX2dldChzdHJ1Y3Qg YWRkcmVzc19zcGFjZSAqbWFwcGluZywgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkgICAgICAgc3Ry dWN0IHBhZ2UgKmVtcHR5X3BhZ2UpOworZXh0ZXJuIGludCBwcmVjYWNoZV9wdXQoc3RydWN0IGFk ZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHVuc2lnbmVkIGxvbmcgaW5kZXgsCisJCXN0cnVjdCBwYWdl ICpwYWdlKTsKK2V4dGVybiBpbnQgcHJlY2FjaGVfZmx1c2goc3RydWN0IGFkZHJlc3Nfc3BhY2Ug Km1hcHBpbmcsIHVuc2lnbmVkIGxvbmcgaW5kZXgpOworZXh0ZXJuIGludCBwcmVjYWNoZV9mbHVz aF9pbm9kZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyk7CitleHRlcm4gaW50IHByZWNh Y2hlX2ZsdXNoX2ZpbGVzeXN0ZW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzKTsKKyNlbHNlCitzdGF0 aWMgaW5saW5lIHZvaWQgcHJlY2FjaGVfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorewor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2hhcmVkX3ByZWNhY2hlX2luaXQoc3RydWN0IHN1cGVy X2Jsb2NrICpzYiwgY2hhciAqdXVpZCkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgcHJlY2Fj aGVfZ2V0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQl1bnNpZ25lZCBsb25nIGlu ZGV4LCBzdHJ1Y3QgcGFnZSAqZW1wdHlfcGFnZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGlubGluZSBpbnQgcHJlY2FjaGVfcHV0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAor CQl1bnNpZ25lZCBsb25nIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGlubGluZSBpbnQgcHJlY2FjaGVfZmx1c2goc3RydWN0IGFkZHJlc3Nfc3Bh Y2UgKm1hcHBpbmcsCisJCXVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbmxpbmUgaW50IHByZWNhY2hlX2ZsdXNoX2lub2RlKHN0cnVjdCBhZGRyZXNzX3Nw YWNlICptYXBwaW5nKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwcmVj YWNoZV9mbHVzaF9maWxlc3lzdGVtKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKK3sKKwlyZXR1cm4g MDsKK30KKyNlbmRpZgorCisjZGVmaW5lIF9MSU5VWF9QUkVDQUNIRV9ICisjZW5kaWYgLyogX0xJ TlVYX1BSRUNBQ0hFX0ggKi8KLS0tIGxpbnV4LTIuNi4zMC9tbS9wcmVjYWNoZS5jCTE5NjktMTIt MzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51eC0yLjYuMzAtdG1lbS9tbS9wcmVj YWNoZS5jCTIwMDktMDYtMTkgMTU6MDM6MzIuMDAwMDAwMDAwIC0wNjAwCkBAIC0wLDAgKzEsMTQ2 IEBACisvKgorICogbGludXgvbW0vcHJlY2FjaGUuYworICoKKyAqIEltcGxlbWVudHMgInByZWNh Y2hlIiBmb3IgZmlsZXN5c3RlbXMvcGFnZWNhY2hlIG9uIHRvcCBvZiB0cmFuc2NlbmRlbnQKKyAq IG1lbW9yeSAoInRtZW0iKSBBUEkuICBBIGZpbGVzeXN0ZW0gY3JlYXRlcyBhbiAiZXBoZW1lcmFs IHRtZW0gcG9vbCIKKyAqIGFuZCByZXRhaW5zIHRoZSByZXR1cm5lZCBwb29sX2lkIGluIGl0cyBz dXBlcmJsb2NrLiAgQ2xlYW4gcGFnZXMgZXZpY3RlZAorICogZnJvbSBwYWdlY2FjaGUgbWF5IGJl ICJwdXQiIGludG8gdGhlIHBvb2wgYW5kIGFzc29jaWF0ZWQgd2l0aCBhICJoYW5kbGUiCisgKiBj b25zaXN0aW5nIG9mIHRoZSBwb29sX2lkLCBhbiBvYmplY3QgKGlub2RlKSBpZCwgYW5kIGFuIGlu ZGV4IChwYWdlIG9mZnNldCkuCisgKiBOb3RlIHRoYXQgdGhlIHBhZ2UgaXMgY29waWVkIHRvIHRt ZW07IG5vIGtlcm5lbCBtYXBwaW5ncyBhcmUgY2hhbmdlZC4KKyAqIElmIHRoZSBwYWdlIGlzIGxh dGVyIG5lZWRlZCwgdGhlIGZpbGVzeXN0ZW0gKG9yIFZGUykgaXNzdWVzIGEgImdldCIsIHBhc3Np bmcKKyAqIHRoZSBzYW1lIGhhbmRsZSBhbmQgYW4gZW1wdHkgcGFnZWZyYW1lLiAgSWYgc3VjY2Vz c2Z1bCwgdGhlIHBhZ2UgaXMgY29waWVkCisgKiBpbnRvIHRoZSBwYWdlZnJhbWUgYW5kIGEgZGlz ayByZWFkIGlzIGF2b2lkZWQuICBCdXQgc2luY2UgdGhlIHRtZW0gcG9vbAorICogaXMgb2YgaW5k ZXRlcm1pbmF0ZSBzaXplLCBhICJwdXQiIHBhZ2UgaGFzIGluZGV0ZXJtaW5hdGUgbG9uZ2V2aXR5 CisgKiAoImVwaGVtZXJhbCIpLCBhbmQgdGhlICJnZXQiIG1heSBmYWlsLCBpbiB3aGljaCBjYXNl IHRoZSBmaWxlc3lzdGVtIG11c3QKKyAqIHJlYWQgdGhlIHBhZ2UgZnJvbSBkaXNrIGFzIGJlZm9y ZS4gIE5vdGUgdGhhdCB0aGUgZmlsZXN5c3RlbS9wYWdlY2FjaGUgYXJlCisgKiByZXNwb25zaWJs ZSBmb3IgbWFpbnRhaW5pbmcgY29oZXJlbmN5IGJldHdlZW4gdGhlIHBhZ2VjYWNoZSwgcHJlY2Fj aGUsCisgKiBhbmQgdGhlIGRpc2ssIGZvciB3aGljaCAiZmx1c2ggcGFnZSIgYW5kICJmbHVzaCBv YmplY3QiIGFjdGlvbnMgYXJlCisgKiBwcm92aWRlZC4gIEFuZCB3aGVuIGEgZmlsZXN5c3RlbSBp cyB1bm1vdW50ZWQsIGl0IG11c3QgImRlc3Ryb3kiIHRoZSBwb29sLgorICoKKyAqIFR3byB0eXBl cyBvZiBwb29scyBtYXkgYmUgY3JlYXRlZCBmb3IgYSBwcmVjYWNoZTogInByaXZhdGUiIG9yICJz aGFyZWQiLgorICogRm9yIGEgcHJpdmF0ZSBwb29sLCBhIHN1Y2Nlc3NmdWwgImdldCIgYWx3YXlz IGZsdXNoZXMsIGltcGxlbWVudGluZworICogZXhjbHVzaXZlIHNlbWFudGljczsgZm9yIGEgInNo YXJlZCIgcG9vbCAod2hpY2ggaXMgaW50ZW5kZWQgZm9yIHVzZSBieQorICogY28tcmVzaWRlbnQg bm9kZXMgb2YgYSBjbHVzdGVyIGZpbGVzeXN0ZW0pLCB0aGUgImZsdXNoIiBpcyBub3QgZ3VhcmFu dGVlZC4KKyAqIEluIGVpdGhlciBjYXNlLCBhIGZhaWxlZCAiZHVwbGljYXRlIiBwdXQgKG92ZXJ3 cml0ZSkgYWx3YXlzIGd1YXJhbnRlZQorICogdGhlIG9sZCBkYXRhIGlzIGZsdXNoZWQuCisgKgor ICogTm90ZSBhbHNvIHRoYXQgbXVsdGlwbGUgYWNjZXNzZXMgdG8gYSB0bWVtIHBvb2wgbWF5IGJl IGNvbmN1cnJlbnQgYW5kIGFueQorICogb3JkZXJpbmcgbXVzdCBiZSBndWFyYW50ZWVkIGJ5IHRo ZSBjYWxsZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDkgRGFuIE1hZ2VuaGVpbWVy LCBPcmFjbGUgQ29ycC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcHJlY2FjaGUuaD4KKyNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90bWVtLmg+CisKK3N0YXRpYyBp bnQgcHJlY2FjaGVfYXV0b19hbGxvY2F0ZTsgLyogc2V0IHRvIDEgdG8gYXV0b19hbGxvY2F0ZSAq LworCitpbnQgcHJlY2FjaGVfcHV0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCB1bnNp Z25lZCBsb25nIGluZGV4LAorIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXUzMiB0bWVtX3Bvb2wg PSBtYXBwaW5nLT5ob3N0LT5pX3NiLT5wcmVjYWNoZV9wb29saWQ7CisJdTY0IG9iaiA9ICh1bnNp Z25lZCBsb25nKSBtYXBwaW5nLT5ob3N0LT5pX2lubzsKKwl1MzIgaW5kID0gKHUzMikgaW5kZXg7 CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKKwlpbnQgcmV0OworCisJ aWYgKChzMzIpdG1lbV9wb29sIDwgMCkgeworCQlpZiAoIXByZWNhY2hlX2F1dG9fYWxsb2NhdGUp CisJCQlyZXR1cm4gMDsKKwkJLyogYSBwdXQgb24gYSBub24tZXhpc3RlbnQgcHJlY2FjaGUgbWF5 IGF1dG8tYWxsb2NhdGUgb25lICovCisJCWlmICh0bWVtX29wcyA9PSBOVUxMKQorCQkJcmV0dXJu IDA7CisJCXJldCA9ICgqdG1lbV9vcHMtPm5ld19wb29sKSgwLCAwLCAwKTsKKwkJaWYgKHJldCA8 IDApCisJCQlyZXR1cm4gMDsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIk1hcHBpbmcgc3VwZXJi bG9jayBmb3Igc19pZD0lcyB0byBwcmVjYWNoZV9pZD0lZFxuIiwKKwkJCW1hcHBpbmctPmhvc3Qt Pmlfc2ItPnNfaWQsIHRtZW1fcG9vbCk7CisJCW1hcHBpbmctPmhvc3QtPmlfc2ItPnByZWNhY2hl X3Bvb2xpZCA9IHRtZW1fcG9vbDsKKwl9CisJaWYgKGluZCAhPSBpbmRleCkKKwkJcmV0dXJuIDA7 CisJbWIoKTsgLyogZW5zdXJlIHBhZ2UgaXMgcXVpZXNjZW50OyB0bWVtIG1heSBhZGRyZXNzIGl0 IHdpdGggYW4gYWxpYXMgKi8KKwlyZXR1cm4gKCp0bWVtX29wcy0+cHV0X3BhZ2UpKHRtZW1fcG9v bCwgb2JqLCBpbmQsIHBmbik7Cit9CisKK2ludCBwcmVjYWNoZV9nZXQoc3RydWN0IGFkZHJlc3Nf c3BhY2UgKm1hcHBpbmcsIHVuc2lnbmVkIGxvbmcgaW5kZXgsCisgc3RydWN0IHBhZ2UgKmVtcHR5 X3BhZ2UpCit7CisJdTMyIHRtZW1fcG9vbCA9IG1hcHBpbmctPmhvc3QtPmlfc2ItPnByZWNhY2hl X3Bvb2xpZDsKKwl1NjQgb2JqID0gKHVuc2lnbmVkIGxvbmcpIG1hcHBpbmctPmhvc3QtPmlfaW5v OworCXUzMiBpbmQgPSAodTMyKSBpbmRleDsKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9f cGZuKGVtcHR5X3BhZ2UpOworCisJaWYgKChzMzIpdG1lbV9wb29sIDwgMCkKKwkJcmV0dXJuIDA7 CisJaWYgKGluZCAhPSBpbmRleCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKHRtZW1fb3BzLT5n ZXRfcGFnZSkodG1lbV9wb29sLCBvYmosIGluZCwgcGZuKTsKK30KK0VYUE9SVF9TWU1CT0wocHJl Y2FjaGVfZ2V0KTsKKworaW50IHByZWNhY2hlX2ZsdXNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICpt YXBwaW5nLCB1bnNpZ25lZCBsb25nIGluZGV4KQoreworCXUzMiB0bWVtX3Bvb2wgPSBtYXBwaW5n LT5ob3N0LT5pX3NiLT5wcmVjYWNoZV9wb29saWQ7CisJdTY0IG9iaiA9ICh1bnNpZ25lZCBsb25n KSBtYXBwaW5nLT5ob3N0LT5pX2lubzsKKwl1MzIgaW5kID0gKHUzMikgaW5kZXg7CisKKwlpZiAo KHMzMil0bWVtX3Bvb2wgPCAwKQorCQlyZXR1cm4gMDsKKwlpZiAoaW5kICE9IGluZGV4KQorCQly ZXR1cm4gMDsKKworCXJldHVybiAoKnRtZW1fb3BzLT5mbHVzaF9wYWdlKSh0bWVtX3Bvb2wsIG9i aiwgaW5kKTsKK30KK0VYUE9SVF9TWU1CT0wocHJlY2FjaGVfZmx1c2gpOworCitpbnQgcHJlY2Fj aGVfZmx1c2hfaW5vZGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJdTMyIHRt ZW1fcG9vbCA9IG1hcHBpbmctPmhvc3QtPmlfc2ItPnByZWNhY2hlX3Bvb2xpZDsKKwl1NjQgb2Jq ID0gKHVuc2lnbmVkIGxvbmcpIG1hcHBpbmctPmhvc3QtPmlfaW5vOworCisJaWYgKChzMzIpdG1l bV9wb29sIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKCp0bWVtX29wcy0+Zmx1c2hfb2Jq ZWN0KSh0bWVtX3Bvb2wsIG9iaik7Cit9CitFWFBPUlRfU1lNQk9MKHByZWNhY2hlX2ZsdXNoX2lu b2RlKTsKKworaW50IHByZWNhY2hlX2ZsdXNoX2ZpbGVzeXN0ZW0oc3RydWN0IHN1cGVyX2Jsb2Nr ICpzYikKK3sKKwl1MzIgdG1lbV9wb29sID0gc2ItPnByZWNhY2hlX3Bvb2xpZDsKKwlpbnQgcmV0 OworCisJaWYgKChzMzIpdG1lbV9wb29sIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gKCp0bWVt X29wcy0+ZGVzdHJveV9wb29sKSh0bWVtX3Bvb2wpOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsK KwlwcmludGsoS0VSTl9JTkZPCisJCSJVbm1hcHBpbmcgc3VwZXJibG9jayBmb3Igc19pZD0lcyBm cm9tIHByZWNhY2hlX2lkPSVkXG4iLAorCQlzYi0+c19pZCwgcmV0KTsKKwlzYi0+cHJlY2FjaGVf cG9vbGlkID0gMDsKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0wocHJlY2FjaGVfZmx1c2hf ZmlsZXN5c3RlbSk7CisKK3ZvaWQgcHJlY2FjaGVfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNi KQoreworCWlmICh0bWVtX29wcyAhPSBOVUxMKQorCQlzYi0+cHJlY2FjaGVfcG9vbGlkID0gKCp0 bWVtX29wcy0+bmV3X3Bvb2wpKDAsIDAsIDApOworfQorRVhQT1JUX1NZTUJPTChwcmVjYWNoZV9p bml0KTsKKwordm9pZCBzaGFyZWRfcHJlY2FjaGVfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNi LCBjaGFyICp1dWlkKQoreworCXU2NCB1dWlkX2xvID0gKih1NjQgKil1dWlkOworCXU2NCB1dWlk X2hpID0gKih1NjQgKikoJnV1aWRbOF0pOworCisJaWYgKHRtZW1fb3BzICE9IE5VTEwpCisJCXNi LT5wcmVjYWNoZV9wb29saWQgPSgqdG1lbV9vcHMtPm5ld19wb29sKSh1dWlkX2xvLCB1dWlkX2hp LAorCQkJVE1FTV9QT09MX1NIQVJFRCk7Cit9CitFWFBPUlRfU1lNQk9MKHNoYXJlZF9wcmVjYWNo ZV9pbml0KTsK --__12454556309492264abhmt009.oracle.com Content-Type: application/octet-stream; name="preswap.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="preswap.patch" LS0tIGxpbnV4LTIuNi4zMC9tbS9wYWdlX2lvLmMJMjAwOS0wNi0wOSAyMTowNToyNy4wMDAwMDAw MDAgLTA2MDAKKysrIGxpbnV4LTIuNi4zMC10bWVtL21tL3BhZ2VfaW8uYwkyMDA5LTA2LTE5IDA5 OjMzOjU5LjAwMDAwMDAwMCAtMDYwMApAQCAtMTAyLDYgKzEwMiwxMiBAQAogCQl1bmxvY2tfcGFn ZShwYWdlKTsKIAkJZ290byBvdXQ7CiAJfQorCWlmIChwcmVzd2FwX3B1dChwYWdlKSA9PSAxKSB7 CisJCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCWVu ZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKwkJZ290byBvdXQ7CisJfQogCWJpbyA9IGdldF9zd2Fw X2JpbyhHRlBfTk9JTywgcGFnZV9wcml2YXRlKHBhZ2UpLCBwYWdlLAogCQkJCWVuZF9zd2FwX2Jp b193cml0ZSk7CiAJaWYgKGJpbyA9PSBOVUxMKSB7CkBAIC0xMzQsNiArMTQwLDEyIEBACiAJCXJl dCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KKwlpZiAocHJlc3dhcF9nZXQocGFnZSkgPT0g MSkgeworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQli aW9fcHV0KGJpbyk7CisJCWdvdG8gb3V0OworCX0KIAljb3VudF92bV9ldmVudChQU1dQSU4pOwog CXN1Ym1pdF9iaW8oUkVBRCwgYmlvKTsKIG91dDoKLS0tIGxpbnV4LTIuNi4zMC9tbS9zd2FwZmls ZS5jCTIwMDktMDYtMDkgMjE6MDU6MjcuMDAwMDAwMDAwIC0wNjAwCisrKyBsaW51eC0yLjYuMzAt dG1lbS9tbS9zd2FwZmlsZS5jCTIwMDktMDYtMTkgMTY6MjA6MTQuMDAwMDAwMDAwIC0wNjAwCkBA IC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgogI2luY2x1ZGUgPGxp bnV4L3BhZ2VfY2dyb3VwLmg+CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3dhcF9sb2NrKTsK K0RFRklORV9TUElOTE9DSyhzd2FwX2xvY2spOwogc3RhdGljIHVuc2lnbmVkIGludCBucl9zd2Fw ZmlsZXM7CiBsb25nIG5yX3N3YXBfcGFnZXM7CiBsb25nIHRvdGFsX3N3YXBfcGFnZXM7CkBAIC00 Nyw3ICs0Nyw3IEBACiBzdGF0aWMgY29uc3QgY2hhciBCYWRfb2Zmc2V0W10gPSAiQmFkIHN3YXAg b2Zmc2V0IGVudHJ5ICI7CiBzdGF0aWMgY29uc3QgY2hhciBVbnVzZWRfb2Zmc2V0W10gPSAiVW51 c2VkIHN3YXAgb2Zmc2V0IGVudHJ5ICI7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3dhcF9saXN0X3Qgc3dh cF9saXN0ID0gey0xLCAtMX07CitzdHJ1Y3Qgc3dhcF9saXN0X3Qgc3dhcF9saXN0ID0gey0xLCAt MX07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCBzd2FwX2luZm9bTUFYX1NXQVBG SUxFU107CiAKQEAgLTQ4OCw2ICs0ODgsNyBAQAogCQkJCXN3YXBfbGlzdC5uZXh0ID0gcCAtIHN3 YXBfaW5mbzsKIAkJCW5yX3N3YXBfcGFnZXMrKzsKIAkJCXAtPmludXNlX3BhZ2VzLS07CisJCQlw cmVzd2FwX2ZsdXNoKHAgLSBzd2FwX2luZm8sIG9mZnNldCk7CiAJCQltZW1fY2dyb3VwX3VuY2hh cmdlX3N3YXAoZW50KTsKIAkJfQogCX0KQEAgLTg2NCw3ICs4NjUsNyBAQAogICogUmVjeWNsZSB0 byBzdGFydCBvbiByZWFjaGluZyB0aGUgZW5kLCByZXR1cm5pbmcgMCB3aGVuIGVtcHR5LgogICov CiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZv X3N0cnVjdCAqc2ksCi0JCQkJCXVuc2lnbmVkIGludCBwcmV2KQorCQkJCXVuc2lnbmVkIGludCBw cmV2LCB1bnNpZ25lZCBpbnQgcHJlc3dhcCkKIHsKIAl1bnNpZ25lZCBpbnQgbWF4ID0gc2ktPm1h eDsKIAl1bnNpZ25lZCBpbnQgaSA9IHByZXY7CkBAIC04OTAsNiArODkxLDEyIEBACiAJCQlwcmV2 ID0gMDsKIAkJCWkgPSAxOwogCQl9CisJCWlmIChwcmVzd2FwKSB7CisJCQlpZiAocHJlc3dhcF90 ZXN0KHNpLCBpKSkKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsKKwkJfQogCQlj b3VudCA9IHNpLT5zd2FwX21hcFtpXTsKIAkJaWYgKGNvdW50ICYmIGNvdW50ICE9IFNXQVBfTUFQ X0JBRCkKIAkJCWJyZWFrOwpAQCAtOTAxLDggKzkwOCwxMiBAQAogICogV2UgY29tcGxldGVseSBh dm9pZCByYWNlcyBieSByZWFkaW5nIGVhY2ggc3dhcCBwYWdlIGluIGFkdmFuY2UsCiAgKiBhbmQg dGhlbiBzZWFyY2ggZm9yIHRoZSBwcm9jZXNzIHVzaW5nIGl0LiAgQWxsIHRoZSBuZWNlc3NhcnkK ICAqIHBhZ2UgdGFibGUgYWRqdXN0bWVudHMgY2FuIHRoZW4gYmUgbWFkZSBhdG9taWNhbGx5Lgor ICoKKyAqIGlmIHRoZSBib29sZWFuIHByZXN3YXAgaXMgdHJ1ZSwgb25seSB1bnVzZSBwYWdlc190 b191bnVzZSBwYWdlczsKKyAqIHBhZ2VzX3RvX3VudXNlPT0wIG1lYW5zIGFsbCBwYWdlcwogICov Ci1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSkKK2ludCB0cnlfdG9f dW51c2UodW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBwcmVzd2FwLAorCQl1bnNpZ25l ZCBsb25nIHBhZ2VzX3RvX3VudXNlKQogewogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICogc2kg PSAmc3dhcF9pbmZvW3R5cGVdOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKnN0YXJ0X21tOwpAQCAtOTM4 LDcgKzk0OSw3IEBACiAJICogb25lIHBhc3MgdGhyb3VnaCBzd2FwX21hcCBpcyBlbm91Z2gsIGJ1 dCBub3QgbmVjZXNzYXJpbHk6CiAJICogdGhlcmUgYXJlIHJhY2VzIHdoZW4gYW4gaW5zdGFuY2Ug b2YgYW4gZW50cnkgbWlnaHQgYmUgbWlzc2VkLgogCSAqLwotCXdoaWxlICgoaSA9IGZpbmRfbmV4 dF90b191bnVzZShzaSwgaSkpICE9IDApIHsKKwl3aGlsZSAoKGkgPSBmaW5kX25leHRfdG9fdW51 c2Uoc2ksIGksIHByZXN3YXApKSAhPSAwKSB7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50 KSkgewogCQkJcmV0dmFsID0gLUVJTlRSOwogCQkJYnJlYWs7CkBAIC0xMTI0LDYgKzExMzUsOCBA QAogCQkgKiBpbnRlcmFjdGl2ZSBwZXJmb3JtYW5jZS4KIAkJICovCiAJCWNvbmRfcmVzY2hlZCgp OworCQlpZiAocHJlc3dhcCAmJiBwYWdlc190b191bnVzZSAmJiAhLS1wYWdlc190b191bnVzZSkK KwkJCWJyZWFrOwogCX0KIAogCW1tcHV0KHN0YXJ0X21tKTsKQEAgLTE0NDgsNyArMTQ2MSw3IEBA CiAJc3Bpbl91bmxvY2soJnN3YXBfbG9jayk7CiAKIAljdXJyZW50LT5mbGFncyB8PSBQRl9TV0FQ T0ZGOwotCWVyciA9IHRyeV90b191bnVzZSh0eXBlKTsKKwllcnIgPSB0cnlfdG9fdW51c2UodHlw ZSwgMCwgMCk7CiAJY3VycmVudC0+ZmxhZ3MgJj0gflBGX1NXQVBPRkY7CiAKIAlpZiAoZXJyKSB7 CkBAIC0xNDk3LDkgKzE1MTAsMTQgQEAKIAlzd2FwX21hcCA9IHAtPnN3YXBfbWFwOwogCXAtPnN3 YXBfbWFwID0gTlVMTDsKIAlwLT5mbGFncyA9IDA7CisJcHJlc3dhcF9mbHVzaF9hcmVhKHAgLSBz d2FwX2luZm8pOwogCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOwogCW11dGV4X3VubG9jaygmc3dh cG9uX211dGV4KTsKIAl2ZnJlZShzd2FwX21hcCk7CisjaWZkZWYgQ09ORklHX1BSRVNXQVAKKwlp ZiAocC0+cHJlc3dhcF9tYXApCisJCXZmcmVlKHAtPnByZXN3YXBfbWFwKTsKKyNlbmRpZgogCS8q IERlc3Ryb3kgc3dhcCBhY2NvdW50IGluZm9ybWF0aW4gKi8KIAlzd2FwX2Nncm91cF9zd2Fwb2Zm KHR5cGUpOwogCkBAIC0xODEyLDYgKzE4MzAsMTEgQEAKIAl9CiAKIAltZW1zZXQoc3dhcF9tYXAs IDAsIG1heHBhZ2VzICogc2l6ZW9mKHNob3J0KSk7CisjaWZkZWYgQ09ORklHX1BSRVNXQVAKKwlw LT5wcmVzd2FwX21hcCA9IHZtYWxsb2MobWF4cGFnZXMgLyBzaXplb2YobG9uZykpOworCWlmIChw LT5wcmVzd2FwX21hcCkKKwkJbWVtc2V0KHAtPnByZXN3YXBfbWFwLCAwLCBtYXhwYWdlcyAvIHNp emVvZihsb25nKSk7CisjZW5kaWYKIAlmb3IgKGkgPSAwOyBpIDwgc3dhcF9oZWFkZXItPmluZm8u bnJfYmFkcGFnZXM7IGkrKykgewogCQlpbnQgcGFnZV9uciA9IHN3YXBfaGVhZGVyLT5pbmZvLmJh ZHBhZ2VzW2ldOwogCQlpZiAocGFnZV9uciA8PSAwIHx8IHBhZ2VfbnIgPj0gc3dhcF9oZWFkZXIt PmluZm8ubGFzdF9wYWdlKSB7CkBAIC0xODg2LDYgKzE5MDksNyBAQAogCX0gZWxzZSB7CiAJCXN3 YXBfaW5mb1twcmV2XS5uZXh0ID0gcCAtIHN3YXBfaW5mbzsKIAl9CisJcHJlc3dhcF9pbml0KHAg LSBzd2FwX2luZm8pOwogCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOwogCW11dGV4X3VubG9jaygm c3dhcG9uX211dGV4KTsKIAllcnJvciA9IDA7CkBAIC0yMDAyLDYgKzIwMjYsOCBAQAogCiAJc2kg PSAmc3dhcF9pbmZvW3N3cF90eXBlKGVudHJ5KV07CiAJdGFyZ2V0ID0gc3dwX29mZnNldChlbnRy eSk7CisJaWYgKHByZXN3YXBfdGVzdChzaSwgdGFyZ2V0KSkKKwkJcmV0dXJuIDA7CiAJYmFzZSA9 ICh0YXJnZXQgPj4gb3VyX3BhZ2VfY2x1c3RlcikgPDwgb3VyX3BhZ2VfY2x1c3RlcjsKIAllbmQg PSBiYXNlICsgKDEgPDwgb3VyX3BhZ2VfY2x1c3Rlcik7CiAJaWYgKCFiYXNlKQkJLyogZmlyc3Qg cGFnZSBpcyBzd2FwIGhlYWRlciAqLwpAQCAtMjAxOCw2ICsyMDQ0LDkgQEAKIAkJCWJyZWFrOwog CQlpZiAoc2ktPnN3YXBfbWFwW3RvZmZdID09IFNXQVBfTUFQX0JBRCkKIAkJCWJyZWFrOworCQkv KiBEb24ndCByZWFkIGluIHByZXN3YXAgcGFnZXMgKi8KKwkJaWYgKHByZXN3YXBfdGVzdChzaSwg dG9mZikpCisJCQlicmVhazsKIAl9CiAJLyogQ291bnQgY29udGlndW91cyBhbGxvY2F0ZWQgc2xv dHMgYmVsb3cgb3VyIHRhcmdldCAqLwogCWZvciAodG9mZiA9IHRhcmdldDsgLS10b2ZmID49IGJh c2U7IG5yX3BhZ2VzKyspIHsKLS0tIGxpbnV4LTIuNi4zMC9pbmNsdWRlL2xpbnV4L3N3YXAuaAky MDA5LTA2LTA5IDIxOjA1OjI3LjAwMDAwMDAwMCAtMDYwMAorKysgbGludXgtMi42LjMwLXRtZW0v aW5jbHVkZS9saW51eC9zd2FwLmgJMjAwOS0wNi0xOSAxMjo1MTo1NS4wMDAwMDAwMDAgLTA2MDAK QEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgogI2luY2x1ZGUg PGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbm9kZS5oPgorI2luY2x1ZGUgPGxpbnV4 L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcGFn ZS5oPgpAQCAtMTU0LDggKzE1NSw2MiBAQAogCXVuc2lnbmVkIGludCBtYXg7CiAJdW5zaWduZWQg aW50IGludXNlX3BhZ2VzOwogCXVuc2lnbmVkIGludCBvbGRfYmxvY2tfc2l6ZTsKKyNpZmRlZiBD T05GSUdfUFJFU1dBUAorCXVuc2lnbmVkIGxvbmcgKnByZXN3YXBfbWFwOworCXVuc2lnbmVkIGlu dCBwcmVzd2FwX3BhZ2VzOworI2VuZGlmCiB9OwogCisjaWZkZWYgQ09ORklHX1BSRVNXQVAKKwor I2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorZXh0ZXJuIGludCBwcmVzd2FwX3N5c2N0bF9oYW5k bGVyKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLAorCXZvaWQgX191c2Vy ICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBwcmVz d2FwX3plcm8sIHByZXN3YXBfaW5maW5pdHk7CisKK2V4dGVybiB2b2lkIHByZXN3YXBfc2hyaW5r KHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludCBwcmVzd2FwX3Rlc3Qoc3RydWN0IHN3YXBfaW5m b19zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBwcmVzd2FwX2luaXQodW5z aWduZWQpOworZXh0ZXJuIGludCBwcmVzd2FwX3B1dChzdHJ1Y3QgcGFnZSAqKTsKK2V4dGVybiBp bnQgcHJlc3dhcF9nZXQoc3RydWN0IHBhZ2UgKik7CitleHRlcm4gdm9pZCBwcmVzd2FwX2ZsdXNo KHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIHByZXN3YXBfZmx1c2hfYXJl YSh1bnNpZ25lZCk7CisvKiBpbiBzd2FwZmlsZS5jICovCitleHRlcm4gaW50IHRyeV90b191bnVz ZSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CisjZWxzZQorc3Rh dGljIGlubGluZSB2b2lkIHByZXN3YXBfc2hyaW5rKHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3BhZ2Vz KQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBwcmVzd2FwX3Rlc3Qoc3RydWN0IHN3YXBfaW5m b19zdHJ1Y3QgKnNpcywKKwl1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIHByZXN3YXBfaW5pdCh1bnNpZ25lZCB0eXBlKQoreworfQor CitzdGF0aWMgaW5saW5lIGludCBwcmVzd2FwX3B1dChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHJlc3dhcF9nZXQoc3RydWN0IHBhZ2Ug KnBhZ2UpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVzd2FwX2Zs dXNoKHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgcHJlc3dhcF9mbHVzaF9hcmVhKHVuc2lnbmVkIHR5cGUpCit7Cit9CisjZW5k aWYgLyogQ09ORklHX1BSRVNXQVAgKi8KKwogc3RydWN0IHN3YXBfbGlzdF90IHsKIAlpbnQgaGVh ZDsJLyogaGVhZCBvZiBwcmlvcml0eS1vcmRlcmVkIHN3YXBmaWxlIGxpc3QgKi8KIAlpbnQgbmV4 dDsJLyogc3dhcGZpbGUgdG8gYmUgdXNlZCBuZXh0ICovCkBAIC0zMTIsNiArMzY3LDggQEAKIGV4 dGVybiBpbnQgcmV1c2Vfc3dhcF9wYWdlKHN0cnVjdCBwYWdlICopOwogZXh0ZXJuIGludCB0cnlf dG9fZnJlZV9zd2FwKHN0cnVjdCBwYWdlICopOwogc3RydWN0IGJhY2tpbmdfZGV2X2luZm87Citl eHRlcm4gc3RydWN0IHN3YXBfbGlzdF90IHN3YXBfbGlzdDsKK2V4dGVybiBzcGlubG9ja190IHN3 YXBfbG9jazsKIAogLyogbGludXgvbW0vdGhyYXNoLmMgKi8KIGV4dGVybiBzdHJ1Y3QgbW1fc3Ry dWN0ICogc3dhcF90b2tlbl9tbTsKLS0tIGxpbnV4LTIuNi4zMC9tbS9wcmVzd2FwLmMJMTk2OS0x Mi0zMSAxNzowMDowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGxpbnV4LTIuNi4zMC10bWVtL21tL3By ZXN3YXAuYwkyMDA5LTA2LTE5IDE0OjU1OjE2LjAwMDAwMDAwMCAtMDYwMApAQCAtMCwwICsxLDI3 NCBAQAorLyoKKyAqIGxpbnV4L21tL3ByZXN3YXAuYworICoKKyAqIEltcGxlbWVudHMgYSBmYXN0 ICJwcmVzd2FwIiBvbiB0b3Agb2YgdGhlIHRyYW5zY2VuZGVudCBtZW1vcnkgKCJ0bWVtIikgQVBJ LgorICogV2hlbiBhIHN3YXBkaXNrIGlzIGVuYWJsZWQgKHdpdGggc3dhcG9uKSwgYSAicHJpdmF0 ZSBwZXJzaXN0ZW50IHRtZW0gcG9vbCIKKyAqIGlzIGNyZWF0ZWQgYWxvbmcgd2l0aCBhIGJpdC1w ZXItcGFnZSBwcmVzd2FwX21hcC4gIFdoZW4gc3dhcHBpbmcgb2NjdXJzCisgKiBhbmQgYSBwYWdl IGlzIGFib3V0IHRvIGJlIHdyaXR0ZW4gdG8gZGlzaywgYSAicHV0IiBpbnRvIHRoZSBwb29sIG1h eSBmaXJzdAorICogYmUgYXR0ZW1wdGVkIGJ5IHBhc3NpbmcgdGhlIHBhZ2VmcmFtZSB0byBiZSBz d2FwcGVkLCBhbG9uZyB3aXRoIGEgImhhbmRsZSIKKyAqIGNvbnNpc3Rpbmcgb2YgYSBwb29sX2lk LCBhbiBvYmplY3QgaWQsIGFuZCBhbiBpbmRleC4gIFNpbmNlIHRoZSBwb29sIGlzIG9mCisgKiBp bmRldGVybWluYXRlIHNpemUsIHRoZSAicHV0IiBtYXkgYmUgcmVqZWN0ZWQsIGluIHdoaWNoIGNh c2UgdGhlIHBhZ2UKKyAqIGlzIHN3YXBwZWQgdG8gZGlzayBhcyBub3JtYWwuICBJZiB0aGUgInB1 dCIgaXMgc3VjY2Vzc2Z1bCwgdGhlIHBhZ2UgaXMKKyAqIGNvcGllZCB0byB0bWVtIGFuZCB0aGUg cHJlc3dhcF9tYXAgcmVjb3JkcyB0aGUgc3VjY2Vzcy4gIExhdGVyLCB3aGVuCisgKiB0aGUgcGFn ZSBuZWVkcyB0byBiZSBzd2FwcGVkIGluLCB0aGUgcHJlc3dhcF9tYXAgaXMgY2hlY2tlZCBhbmQs IGlmIHNldCwKKyAqIHRoZSBwYWdlIG1heSBiZSBvYnRhaW5lZCB3aXRoIGEgImdldCIgb3BlcmF0 aW9uLiAgTm90ZSB0aGF0IHRoZSBzd2FwCisgKiBzdWJzeXN0ZW0gaXMgcmVzcG9uc2libGUgZm9y OiBtYWludGFpbmluZyBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgc3dhcGNhY2hlLAorICogcHJlc3dh cCwgYW5kIHRoZSBzd2FwZGlzazsgZm9yIGV2aWN0aW5nIHN0YWxlIHBhZ2VzIGZyb20gcHJlc3dh cDsgYW5kIGZvcgorICogZW1wdHlpbmcgcHJlc3dhcCB3aGVuIHN3YXBvZmYgaXMgcGVyZm9ybWVk LiBUaGUgImZsdXNoIHBhZ2UiIGFuZCAiZmx1c2gKKyAqIG9iamVjdCIgYWN0aW9ucyBhcmUgcHJv dmlkZWQgZm9yIHRoaXMuCisgKgorICogTm90ZSB0aGF0IGlmIGEgImR1cGxpY2F0ZSBwdXQiIGlz IHBlcmZvcm1lZCB0byBvdmVyd3JpdGUgYSBwYWdlIGFuZAorICogdGhlICJwdXQiIG9wZXJhdGlv biBmYWlscywgdGhlIHBhZ2UgKGFuZCBvbGQgZGF0YSkgaXMgZmx1c2hlZCBhbmQgbG9zdC4KKyAq IEFsc28gbm90ZSB0aGF0IG11bHRpcGxlIGFjY2Vzc2VzIHRvIGEgdG1lbSBwb29sIG1heSBiZSBj b25jdXJyZW50IGFuZAorICogYW55IG9yZGVyaW5nIG11c3QgYmUgZ3VhcmFudGVlZCBieSB0aGUg Y2FsbGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IERhbiBNYWdlbmhlaW1lciwg T3JhY2xlIENvcnAuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGlu dXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3N3 YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19m cy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJp bGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC90bWVt Lmg+CisKK3N0YXRpYyB1MzIgcHJlc3dhcF9wb29saWQgPSAtMTsgLyogaWYgbmVnYXRpdmUsIHBy ZXN3YXAgd2lsbCBuZXZlciBjYWxsIHRtZW0gKi8KKworY29uc3QgdW5zaWduZWQgbG9uZyBwcmVz d2FwX3plcm8gPSAwLCBwcmVzd2FwX2luZmluaXR5ID0gfjBVTDsgLyogZm9yIHN5c2N0bCAqLwor CisvKgorICogU3dpenpsaW5nIGluY3JlYXNlcyBvYmplY3RzIHBlciBzd2FwdHlwZSwgaW5jcmVh c2luZyB0bWVtIGNvbmN1cnJlbmN5CisgKiBmb3IgaGVhdnkgc3dhcGxvYWRzLiAgTGF0ZXIsIGxh cmdlciBucl9jcHVzIC0+IGxhcmdlciBTV0laX0JJVFMKKyAqLworI2RlZmluZSBTV0laX0JJVFMJ CTQKKyNkZWZpbmUgU1dJWl9NQVNLCQkoKDEgPDwgU1dJWl9CSVRTKSAtIDEpCisjZGVmaW5lIG9z d2l6KF90eXBlLCBfaW5kKQkoKF90eXBlIDw8IFNXSVpfQklUUykgfCAoX2luZCAmIFNXSVpfTUFT SykpCisjZGVmaW5lIGlzd2l6KF9pbmQpCQkoX2luZCA+PiBTV0laX0JJVFMpCisKKy8qCisgKiBw cmVzd2FwX21hcCB0ZXN0L3NldC9jbGVhciBvcGVyYXRpb25zIChtdXN0IGJlIGF0b21pYykKKyAq LworCitpbnQgcHJlc3dhcF90ZXN0KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsIHVuc2ln bmVkIGxvbmcgb2Zmc2V0KQoreworCWlmICghc2lzLT5wcmVzd2FwX21hcCkKKwkJcmV0dXJuIDA7 CisJcmV0dXJuIHRlc3RfYml0KG9mZnNldCAlIEJJVFNfUEVSX0xPTkcsCisJCSZzaXMtPnByZXN3 YXBfbWFwW29mZnNldC9CSVRTX1BFUl9MT05HXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBw cmVzd2FwX3NldChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLAorCQkJCXVuc2lnbmVkIGxv bmcgb2Zmc2V0KQoreworCWlmICghc2lzLT5wcmVzd2FwX21hcCkKKwkJcmV0dXJuOworCXNldF9i aXQob2Zmc2V0ICUgQklUU19QRVJfTE9ORywKKwkJJnNpcy0+cHJlc3dhcF9tYXBbb2Zmc2V0L0JJ VFNfUEVSX0xPTkddKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHByZXN3YXBfY2xlYXIoc3Ry dWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcywKKwkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sK KwlpZiAoIXNpcy0+cHJlc3dhcF9tYXApCisJCXJldHVybjsKKwljbGVhcl9iaXQob2Zmc2V0ICUg QklUU19QRVJfTE9ORywKKwkJJnNpcy0+cHJlc3dhcF9tYXBbb2Zmc2V0L0JJVFNfUEVSX0xPTkdd KTsKK30KKworLyoKKyAqIHByZXN3YXAgdG1lbSBvcGVyYXRpb25zCisgKi8KKworLyogcmV0dXJu cyAxIGlmIHRoZSBwYWdlIHdhcyBzdWNjZXNzZnVsbHkgcHV0IGludG8gcHJlc3dhcCwgMCBpZiB0 aGUgcGFnZQorICogd2FzIGRlY2xpbmVkLCBhbmQgLUVSUk5PIGZvciBhIHNwZWNpZmljIGVycm9y ICovCitpbnQgcHJlc3dhcF9wdXQoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3dwX2VudHJ5X3Qg ZW50cnkgPSB7IC52YWwgPSBwYWdlX3ByaXZhdGUocGFnZSksIH07CisJdW5zaWduZWQgdHlwZSA9 IHN3cF90eXBlKGVudHJ5KTsKKwlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOwor CXU2NCBpbmQ2NCA9ICh1NjQpb2Zmc2V0OworCXUzMiBpbmQgPSAodTMyKW9mZnNldDsKKwl1bnNp Z25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOworCXN0cnVjdCBzd2FwX2luZm9fc3Ry dWN0ICpzaXMgPSBnZXRfc3dhcF9pbmZvX3N0cnVjdCh0eXBlKTsKKwlpbnQgZHVwID0gMCwgcmV0 OworCisJaWYgKChzMzIpcHJlc3dhcF9wb29saWQgPCAwKQorCQlyZXR1cm4gMDsKKwlpZiAoaW5k NjQgIT0gaW5kKQorCQlyZXR1cm4gMDsKKwlpZiAocHJlc3dhcF90ZXN0KHNpcywgb2Zmc2V0KSkK KwkJZHVwID0gMTsKKwltYigpOyAvKiBlbnN1cmUgcGFnZSBpcyBxdWllc2NlbnQ7IHRtZW0gbWF5 IGFkZHJlc3MgaXQgd2l0aCBhbiBhbGlhcyAqLworCXJldCA9ICgqdG1lbV9vcHMtPnB1dF9wYWdl KShwcmVzd2FwX3Bvb2xpZCwgb3N3aXoodHlwZSwgaW5kKSwKKwkJaXN3aXooaW5kKSwgcGZuKTsK KwlpZiAocmV0ID09IDEpIHsKKwkJcHJlc3dhcF9zZXQoc2lzLCBvZmZzZXQpOworCQlpZiAoIWR1 cCkKKwkJCXNpcy0+cHJlc3dhcF9wYWdlcysrOworCX0gZWxzZSBpZiAoZHVwKSB7CisJCS8qIGZh aWxlZCBkdXAgcHV0IGFsd2F5cyByZXN1bHRzIGluIGFuIGF1dG9tYXRpYyBmbHVzaCBvZgorCQkg KiB0aGUgKG9sZGVyKSBwYWdlIGZyb20gcHJlc3dhcCAqLworCQlwcmVzd2FwX2NsZWFyKHNpcywg b2Zmc2V0KTsKKwkJc2lzLT5wcmVzd2FwX3BhZ2VzLS07CisJfQorCXJldHVybiByZXQ7Cit9CisK Ky8qIHJldHVybnMgMSBpZiB0aGUgcGFnZSB3YXMgc3VjY2Vzc2Z1bGx5IGdvdHRlbiBmcm9tIHBy ZXN3YXAsIDAgaWYgdGhlIHBhZ2UKKyAqIHdhcyBub3QgcHJlc2VudCAoc2hvdWxkIG5ldmVyIGhh cHBlbiEpLCBhbmQgLUVSUk5PIGZvciBhIHNwZWNpZmljIGVycm9yICovCitpbnQgcHJlc3dhcF9n ZXQoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3dwX2VudHJ5X3QgZW50cnkgPSB7IC52YWwgPSBw YWdlX3ByaXZhdGUocGFnZSksIH07CisJdW5zaWduZWQgdHlwZSA9IHN3cF90eXBlKGVudHJ5KTsK KwlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOworCXU2NCBpbmQ2NCA9ICh1NjQp b2Zmc2V0OworCXUzMiBpbmQgPSAodTMyKW9mZnNldDsKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHBh Z2VfdG9fcGZuKHBhZ2UpOworCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMgPSBnZXRfc3dh cF9pbmZvX3N0cnVjdCh0eXBlKTsKKwlpbnQgcmV0OworCisJaWYgKChzMzIpcHJlc3dhcF9wb29s aWQgPCAwKQorCQlyZXR1cm4gMDsKKwlpZiAoaW5kNjQgIT0gaW5kKQorCQlyZXR1cm4gMDsKKwlp ZiAoIXByZXN3YXBfdGVzdChzaXMsIG9mZnNldCkpCisJCXJldHVybiAwOworCXJldCA9ICgqdG1l bV9vcHMtPmdldF9wYWdlKShwcmVzd2FwX3Bvb2xpZCwgb3N3aXoodHlwZSwgaW5kKSwKKwkJaXN3 aXooaW5kKSwgcGZuKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBmbHVzaCBhIHNpbmdsZSBwYWdl IGZyb20gcHJlc3dhcCAqLwordm9pZCBwcmVzd2FwX2ZsdXNoKHVuc2lnbmVkIHR5cGUsIHVuc2ln bmVkIGxvbmcgb2Zmc2V0KQoreworCXU2NCBpbmQ2NCA9ICh1NjQpb2Zmc2V0OworCXUzMiBpbmQg PSAodTMyKW9mZnNldDsKKwlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzID0gZ2V0X3N3YXBf aW5mb19zdHJ1Y3QodHlwZSk7CisJaW50IHJldCA9IDE7CisKKwlpZiAoKHMzMilwcmVzd2FwX3Bv b2xpZCA8IDApCisJCXJldHVybjsKKwlpZiAoaW5kNjQgIT0gaW5kKQorCQlyZXR1cm47CisJaWYg KHByZXN3YXBfdGVzdChzaXMsIG9mZnNldCkpIHsKKwkJcmV0ID0gKCp0bWVtX29wcy0+Zmx1c2hf cGFnZSkocHJlc3dhcF9wb29saWQsCisJCQkJCW9zd2l6KHR5cGUsIGluZCksIGlzd2l6KGluZCkp OworCQlzaXMtPnByZXN3YXBfcGFnZXMtLTsKKwkJcHJlc3dhcF9jbGVhcihzaXMsIG9mZnNldCk7 CisJfQorfQorCisvKiBmbHVzaCBhbGwgcGFnZXMgZnJvbSB0aGUgcGFzc2VkIHN3YXB0eXBlICov Cit2b2lkIHByZXN3YXBfZmx1c2hfYXJlYSh1bnNpZ25lZCB0eXBlKQoreworCXN0cnVjdCBzd2Fw X2luZm9fc3RydWN0ICpzaXMgPSBnZXRfc3dhcF9pbmZvX3N0cnVjdCh0eXBlKTsKKwlpbnQgaW5k OworCisJaWYgKChzMzIpcHJlc3dhcF9wb29saWQgPCAwKQorCQlyZXR1cm47CisJZm9yIChpbmQg PSBTV0laX01BU0s7IGluZCA+PSAwOyBpbmQtLSkKKwkJKHZvaWQpKCp0bWVtX29wcy0+Zmx1c2hf b2JqZWN0KShwcmVzd2FwX3Bvb2xpZCwKKwkJCW9zd2l6KHR5cGUsIGluZCkpOworCXNpcy0+cHJl c3dhcF9wYWdlcyA9IDA7Cit9CisKK3ZvaWQgcHJlc3dhcF9pbml0KHVuc2lnbmVkIHR5cGUpCit7 CisJLyogb25seSBuZWVkIG9uZSB0bWVtIHBvb2wgZm9yIGFsbCBzd2FwIHR5cGVzICovCisJaWYg KChzMzIpcHJlc3dhcF9wb29saWQgPj0gMCkKKwkJcmV0dXJuOworCWlmICh0bWVtX29wcyA9PSBO VUxMKQorCQlyZXR1cm47CisJcHJlc3dhcF9wb29saWQgPSAoKnRtZW1fb3BzLT5uZXdfcG9vbCko MCwgMCwgVE1FTV9QT09MX1BFUlNJU1QpOworfQorCisvKgorICogcHJlc3dhcCBpbmZyYXN0cnVj dHVyZSBmdW5jdGlvbnMKKyAqLworCisvKiBjb2RlIHN0cnVjdHVyZSBsZXZlcmFnZWQgZnJvbSBz eXNfc3dhcG9mZiAqLwordm9pZCBwcmVzd2FwX3Nocmluayh1bnNpZ25lZCBsb25nIHRhcmdldF9w YWdlcykKK3sKKwlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kgPSBOVUxMOworCXVuc2lnbmVk IGxvbmcgdG90YWxfcGFnZXMgPSAwLCB0b3RhbF9wYWdlc190b191bnVzZTsKKwl1bnNpZ25lZCBs b25nIHBhZ2VzID0gMCwgdW51c2VfcGFnZXMgPSAwOworCWludCB0eXBlOworCWludCB3cmFwcGVk ID0gMDsKKworCWRvIHsKKwkJLyoKKwkJICogd2UgZG9uJ3Qgd2FudCB0byBob2xkIHN3YXBfbG9j ayB3aGlsZSBkb2luZyBhIHZlcnkKKwkJICogbGVuZ3RoeSB0cnlfdG9fdW51c2UsIGJ1dCBzd2Fw X2xpc3QgbWF5IGNoYW5nZQorCQkgKiBzbyByZXN0YXJ0IHNjYW4gZnJvbSBzd2FwX2xpc3QuaGVh ZCBlYWNoIHRpbWUKKwkJICovCisJCXNwaW5fbG9jaygmc3dhcF9sb2NrKTsKKwkJdG90YWxfcGFn ZXMgPSAwOworCQlmb3IgKHR5cGUgPSBzd2FwX2xpc3QuaGVhZDsgdHlwZSA+PSAwOyB0eXBlID0g c2ktPm5leHQpIHsKKwkJCXNpID0gZ2V0X3N3YXBfaW5mb19zdHJ1Y3QodHlwZSk7CisJCQl0b3Rh bF9wYWdlcyArPSBzaS0+cHJlc3dhcF9wYWdlczsKKwkJfQorCQlpZiAodG90YWxfcGFnZXMgPD0g dGFyZ2V0X3BhZ2VzKSB7CisJCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKKwkJCXJldHVybjsK KwkJfQorCQl0b3RhbF9wYWdlc190b191bnVzZSA9IHRvdGFsX3BhZ2VzIC0gdGFyZ2V0X3BhZ2Vz OworCQlmb3IgKHR5cGUgPSBzd2FwX2xpc3QuaGVhZDsgdHlwZSA+PSAwOyB0eXBlID0gc2ktPm5l eHQpIHsKKwkJCXNpID0gZ2V0X3N3YXBfaW5mb19zdHJ1Y3QodHlwZSk7CisJCQlpZiAodG90YWxf cGFnZXNfdG9fdW51c2UgPCBzaS0+cHJlc3dhcF9wYWdlcykKKwkJCQlwYWdlcyA9IHVudXNlX3Bh Z2VzID0gdG90YWxfcGFnZXNfdG9fdW51c2U7CisJCQllbHNlIHsKKwkJCQlwYWdlcyA9IHNpLT5w cmVzd2FwX3BhZ2VzOworCQkJCXVudXNlX3BhZ2VzID0gMDsgLyogdW51c2UgYWxsICovCisJCQl9 CisJCQlpZiAoc2VjdXJpdHlfdm1fZW5vdWdoX21lbW9yeShwYWdlcykpCisJCQkJY29udGludWU7 CisJCQl2bV91bmFjY3RfbWVtb3J5KHBhZ2VzKTsKKwkJCWJyZWFrOworCQl9CisJCXNwaW5fdW5s b2NrKCZzd2FwX2xvY2spOworCQlpZiAodHlwZSA8IDApCisJCQlyZXR1cm47CisJCWN1cnJlbnQt PmZsYWdzIHw9IFBGX1NXQVBPRkY7CisJCSh2b2lkKXRyeV90b191bnVzZSh0eXBlLCAxLCB1bnVz ZV9wYWdlcyk7CisJCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9TV0FQT0ZGOworCQl3cmFwcGVkKys7 CisJfSB3aGlsZSAod3JhcHBlZCA8PSAzKTsKK30KKworCisjaWZkZWYgQ09ORklHX1NZU0NUTAor LyogY2F0IC9zeXMvcHJvYy92bS9wcmVzd2FwIHByb3ZpZGVzIHRvdGFsIG51bWJlciBvZiBwYWdl cyBpbiBwcmVzd2FwCisgKiBhY3Jvc3MgYWxsIHN3YXB0eXBlcy4gIGVjaG8gTiA+IC9zeXMvcHJv Yy92bS9wcmVzd2FwIGF0dGVtcHRzIHRvIHNocmluaworICogcHJlc3dhcCBwYWdlIHVzYWdlIHRv IE4gKHVzdWFsbHkgMCkgKi8KK2ludCBwcmVzd2FwX3N5c2N0bF9oYW5kbGVyKGN0bF90YWJsZSAq dGFibGUsIGludCB3cml0ZSwKKwlzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmJ1ZmZl ciwgc2l6ZV90ICpsZW5ndGgsIGxvZmZfdCAqcHBvcykKK3sKKwl1bnNpZ25lZCBsb25nIG5wYWdl czsKKwlpbnQgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHRvdGFscGFnZXMgPSAwOworCXN0cnVjdCBz d2FwX2luZm9fc3RydWN0ICpzaSA9IE5VTEw7CisKKwkvKiBtb2RlbGVkIGFmdGVyIGh1Z2V0bGJf c3lzY3RsX2hhbmRsZXIgaW4gbW0vaHVnZXRsYi5jICovCisJaWYgKCF3cml0ZSkgeworCQlzcGlu X2xvY2soJnN3YXBfbG9jayk7CisJCWZvciAodHlwZSA9IHN3YXBfbGlzdC5oZWFkOyB0eXBlID49 IDA7IHR5cGUgPSBzaS0+bmV4dCkgeworCQkJc2kgPSBnZXRfc3dhcF9pbmZvX3N0cnVjdCh0eXBl KTsKKwkJCXRvdGFscGFnZXMgKz0gc2ktPnByZXN3YXBfcGFnZXM7CisJCX0KKwkJc3Bpbl91bmxv Y2soJnN3YXBfbG9jayk7CisJCW5wYWdlcyA9IHRvdGFscGFnZXM7CisJfQorCXRhYmxlLT5kYXRh ID0gJm5wYWdlczsKKwl0YWJsZS0+bWF4bGVuID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCXBy b2NfZG91bG9uZ3ZlY19taW5tYXgodGFibGUsIHdyaXRlLCBmaWxlLCBidWZmZXIsIGxlbmd0aCwg cHBvcyk7CisKKwlpZiAod3JpdGUpCisJCXByZXN3YXBfc2hyaW5rKG5wYWdlcyk7CisKKwlyZXR1 cm4gMDsKK30KKyNlbmRpZgotLS0gbGludXgtMi42LjMwL2luY2x1ZGUvbGludXgvc3lzY3RsLmgJ MjAwOS0wNi0wOSAyMTowNToyNy4wMDAwMDAwMDAgLTA2MDAKKysrIGxpbnV4LTIuNi4zMC10bWVt L2luY2x1ZGUvbGludXgvc3lzY3RsLmgJMjAwOS0wNi0xOSAwOTozMzo1OS4wMDAwMDAwMDAgLTA2 MDAKQEAgLTIwNSw2ICsyMDUsNyBAQAogCVZNX1BBTklDX09OX09PTT0zMywJLyogcGFuaWMgYXQg b3V0LW9mLW1lbW9yeSAqLwogCVZNX1ZEU09fRU5BQkxFRD0zNCwJLyogbWFwIFZEU08gaW50byBu ZXcgcHJvY2Vzc2VzPyAqLwogCVZNX01JTl9TTEFCPTM1LAkJIC8qIFBlcmNlbnQgcGFnZXMgaWdu b3JlZCBieSB6b25lIHJlY2xhaW0gKi8KKwlWTV9QUkVTV0FQX1BBR0VTPTM2LAkvKiBwYWdlcy90 YXJnZXRfcGFnZXMgaW4gcHJlc3dhcCAqLwogfTsKIAogCi0tLSBsaW51eC0yLjYuMzAva2VybmVs L3N5c2N0bC5jCTIwMDktMDYtMDkgMjE6MDU6MjcuMDAwMDAwMDAwIC0wNjAwCisrKyBsaW51eC0y LjYuMzAtdG1lbS9rZXJuZWwvc3lzY3RsLmMJMjAwOS0wNi0xOSAwOTozMzo1OS4wMDAwMDAwMDAg LTA2MDAKQEAgLTEyODIsNiArMTI4MiwxOCBAQAogCQkucHJvY19oYW5kbGVyCT0gJnNjYW5fdW5l dmljdGFibGVfaGFuZGxlciwKIAl9LAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1BSRVNXQVAKKwl7 CisJCS5jdGxfbmFtZQk9IFZNX1BSRVNXQVBfUEFHRVMsCisJCS5wcm9jbmFtZQk9ICJwcmVzd2Fw IiwKKwkJLmRhdGEJCT0gTlVMTCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgbG9uZyks CisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJlc3dhcF9zeXNjdGxfaGFu ZGxlciwKKwkJLmV4dHJhMQkJPSAodm9pZCAqKSZwcmVzd2FwX3plcm8sCisJCS5leHRyYTIJCT0g KHZvaWQgKikmcHJlc3dhcF9pbmZpbml0eSwKKwl9LAorI2VuZGlmCiAvKgogICogTk9URTogZG8g bm90IGFkZCBuZXcgZW50cmllcyB0byB0aGlzIHRhYmxlIHVubGVzcyB5b3UgaGF2ZSByZWFkCiAg KiBEb2N1bWVudGF0aW9uL3N5c2N0bC9jdGxfdW5udW1iZXJlZC50eHQK --__12454556309492264abhmt009.oracle.com Content-Type: application/octet-stream; name="tmemxen.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tmemxen.patch" LS0tIGxpbnV4LTIuNi4zMC9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgJMjAw OS0wNi0wOSAyMTowNToyNy4wMDAwMDAwMDAgLTA2MDAKKysrIGxpbnV4LTIuNi4zMC10bWVtL2Fy Y2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaAkyMDA5LTA2LTE5IDEzOjQ5OjA0LjAw MDAwMDAwMCAtMDYwMApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2Uv eGVuLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9zY2hlZC5oPgogI2luY2x1ZGUgPHhlbi9p bnRlcmZhY2UvcGh5c2Rldi5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvdG1lbS5oPgogCiAv KgogICogVGhlIGh5cGVyY2FsbCBhc21zIGhhdmUgdG8gbWVldCBzZXZlcmFsIGNvbnN0cmFpbnRz OgpAQCAtNDE3LDYgKzQxOCwxMyBAQAogCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIG5taV9vcCwg b3AsIGFyZyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3RtZW1fb3AoCisJ c3RydWN0IHRtZW1fb3AgKm9wKQoreworCXJldHVybiBfaHlwZXJjYWxsMShpbnQsIHRtZW1fb3As IG9wKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkCiBNVUxUSV9mcHVfdGFza3N3aXRjaChzdHJ1 Y3QgbXVsdGljYWxsX2VudHJ5ICptY2wsIGludCBzZXQpCiB7Ci0tLSBsaW51eC0yLjYuMzAvZHJp dmVycy94ZW4vTWFrZWZpbGUJMjAwOS0wNi0wOSAyMTowNToyNy4wMDAwMDAwMDAgLTA2MDAKKysr IGxpbnV4LTIuNi4zMC10bWVtL2RyaXZlcnMveGVuL01ha2VmaWxlCTIwMDktMDYtMTkgMDk6MzM6 NTkuMDAwMDAwMDAwIC0wNjAwCkBAIC0zLDUgKzMsNiBAQAogCiBvYmotJChDT05GSUdfSE9UUExV R19DUFUpCSs9IGNwdV9ob3RwbHVnLm8KIG9iai0kKENPTkZJR19YRU5fWEVOQ09NTSkJKz0geGVu Y29tbS5vCitvYmotJChDT05GSUdfVE1FTSkJCSs9IHRtZW0ubwogb2JqLSQoQ09ORklHX1hFTl9C QUxMT09OKQkrPSBiYWxsb29uLm8KIG9iai0kKENPTkZJR19YRU5GUykJCSs9IHhlbmZzLwpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKLS0tIGxpbnV4LTIuNi4zMC9pbmNsdWRlL3hlbi9pbnRl cmZhY2UvdG1lbS5oCTE5NjktMTItMzEgMTc6MDA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBsaW51 eC0yLjYuMzAtdG1lbS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvdG1lbS5oCTIwMDktMDYtMTkgMTE6 MjE6MjQuMDAwMDAwMDAwIC0wNjAwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBpbmNsdWRlL3hl bi9pbnRlcmZhY2UvdG1lbS5oCisgKgorICogSW50ZXJmYWNlIHRvIFhlbiBpbXBsZW1lbnRhdGlv biBvZiB0cmFuc2NlbmRlbnQgbWVtb3J5CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERhbiBN YWdlbmhlaW1lciwgT3JhY2xlIENvcnAuCisgKi8KKworI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2Uv eGVuLmg+CisKKyNkZWZpbmUgVE1FTV9DT05UUk9MICAgICAgICAgICAgICAgMAorI2RlZmluZSBU TUVNX05FV19QT09MICAgICAgICAgICAgICAxCisjZGVmaW5lIFRNRU1fREVTVFJPWV9QT09MICAg ICAgICAgIDIKKyNkZWZpbmUgVE1FTV9ORVdfUEFHRSAgICAgICAgICAgICAgMworI2RlZmluZSBU TUVNX1BVVF9QQUdFICAgICAgICAgICAgICA0CisjZGVmaW5lIFRNRU1fR0VUX1BBR0UgICAgICAg ICAgICAgIDUKKyNkZWZpbmUgVE1FTV9GTFVTSF9QQUdFICAgICAgICAgICAgNgorI2RlZmluZSBU TUVNX0ZMVVNIX09CSkVDVCAgICAgICAgICA3CisjZGVmaW5lIFRNRU1fUkVBRCAgICAgICAgICAg ICAgICAgIDgKKyNkZWZpbmUgVE1FTV9XUklURSAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBU TUVNX1hDSEcgICAgICAgICAgICAgICAgIDEwCisKKy8qIFN1Ym9wcyBmb3IgSFlQRVJWSVNPUl90 bWVtX29wKFRNRU1fQ09OVFJPTCkgKi8KKyNkZWZpbmUgVE1FTUNfVEhBVyAgICAgICAgICAgICAg ICAgMAorI2RlZmluZSBUTUVNQ19GUkVFWkUgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRNRU1D X0ZMVVNIICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVE1FTUNfREVTVFJPWSAgICAgICAgICAg ICAgMworI2RlZmluZSBUTUVNQ19MSVNUICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFRNRU1D X1NFVF9XRUlHSFQgICAgICAgICAgIDUKKyNkZWZpbmUgVE1FTUNfU0VUX0NBUCAgICAgICAgICAg ICAgNgorI2RlZmluZSBUTUVNQ19TRVRfQ09NUFJFU1MgICAgICAgICA3CisKKy8qIEJpdHMgZm9y IEhZUEVSVklTT1JfdG1lbV9vcChUTUVNX05FV19QT09MKSAqLworI2RlZmluZSBUTUVNX1BPT0xf UEVSU0lTVCAgICAgICAgICAxCisjZGVmaW5lIFRNRU1fUE9PTF9TSEFSRUQgICAgICAgICAgIDIK KyNkZWZpbmUgVE1FTV9QT09MX1BBR0VTSVpFX1NISUZUICAgNAorI2RlZmluZSBUTUVNX1BPT0xf UEFHRVNJWkVfTUFTSyAgMHhmCisjZGVmaW5lIFRNRU1fUE9PTF9WRVJTSU9OX1NISUZUICAgMjQK KyNkZWZpbmUgVE1FTV9QT09MX1ZFUlNJT05fTUFTSyAgMHhmZgorCisvKiBTcGVjaWFsIGVycm5v IHZhbHVlcyAqLworI2RlZmluZSBFRlJPWkVOICAgICAgICAgICAgICAgICAxMDAwCisjZGVmaW5l IEVFTVBUWSAgICAgICAgICAgICAgICAgIDEwMDEKLS0tIGxpbnV4LTIuNi4zMC9pbmNsdWRlL3hl bi9pbnRlcmZhY2UveGVuLmgJMjAwOS0wNi0wOSAyMTowNToyNy4wMDAwMDAwMDAgLTA2MDAKKysr IGxpbnV4LTIuNi4zMC10bWVtL2luY2x1ZGUveGVuL2ludGVyZmFjZS94ZW4uaAkyMDA5LTA2LTE5 IDE0OjM5OjE1LjAwMDAwMDAwMCAtMDYwMApAQCAtNTgsNiArNTgsNyBAQAogI2RlZmluZSBfX0hZ UEVSVklTT1JfZXZlbnRfY2hhbm5lbF9vcCAgICAgMzIKICNkZWZpbmUgX19IWVBFUlZJU09SX3Bo eXNkZXZfb3AgICAgICAgICAgIDMzCiAjZGVmaW5lIF9fSFlQRVJWSVNPUl9odm1fb3AgICAgICAg ICAgICAgICAzNAorI2RlZmluZSBfX0hZUEVSVklTT1JfdG1lbV9vcCAgICAgICAgICAgICAgMzgK IAogLyogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIGh5cGVyY2FsbCBkZWZpbml0aW9ucy4gKi8KICNk ZWZpbmUgX19IWVBFUlZJU09SX2FyY2hfMCAgICAgICAgICAgICAgIDQ4CkBAIC00NjEsNiArNDYy LDI3IEBACiAjZGVmaW5lIF9fbWtfdW5zaWduZWRfbG9uZyh4KSB4ICMjIFVMCiAjZGVmaW5lIG1r X3Vuc2lnbmVkX2xvbmcoeCkgX19ta191bnNpZ25lZF9sb25nKHgpCiAKK3N0cnVjdCB0bWVtX29w IHsKKwl1aW50MzJfdCBjbWQ7CisJaW50MzJfdCBwb29sX2lkOyAvKiBwcml2YXRlID4gMDsgc2hh cmVkIDwgMDsgMCBpcyBpbnZhbGlkICovCisJdW5pb24geworCQlzdHJ1Y3QgeyAgLyogZm9yIGNt ZCA9PSBUTUVNX05FV19QT09MICovCisJCQl1aW50NjRfdCB1dWlkWzJdOworCQkJdWludDMyX3Qg ZmxhZ3M7CisJCX0gbmV3OworCQlzdHJ1Y3QgeworCQkJdWludDY0X3Qgb2JqZWN0OworCQkJdWlu dDMyX3QgaW5kZXg7CisJCQl1aW50MzJfdCB0bWVtX29mZnNldDsKKwkJCXVpbnQzMl90IHBmbl9v ZmZzZXQ7CisJCQl1aW50MzJfdCBsZW47CisJCQlHVUVTVF9IQU5ETEUodm9pZCkgZ21mbjsgLyog Z3Vlc3QgbWFjaGluZSBwYWdlIGZyYW1lICovCisJCX0gZ2VuOworCX0gdTsKK307Cit0eXBlZGVm IHN0cnVjdCB0bWVtX29wIHRtZW1fb3BfdDsKK0RFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKHRt ZW1fb3BfdCk7CisKICNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAvKiBJbiBhc3NlbWJseSBj b2RlIHdlIGNhbm5vdCB1c2UgQyBudW1lcmljIGNvbnN0YW50IHN1ZmZpeGVzLiAqLwotLS0gbGlu dXgtMi42LjMwL2RyaXZlcnMveGVuL3RtZW0uYwkxOTY5LTEyLTMxIDE3OjAwOjAwLjAwMDAwMDAw MCAtMDcwMAorKysgbGludXgtMi42LjMwLXRtZW0vZHJpdmVycy94ZW4vdG1lbS5jCTIwMDktMDYt MTkgMTQ6NTQ6NTMuMDAwMDAwMDAwIC0wNjAwCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogWGVu IGltcGxlbWVudGF0aW9uIGZvciB0cmFuc2NlbmRlbnQgbWVtb3J5ICh0bWVtKQorICoKKyAqIERh biBNYWdlbmhlaW1lciA8ZGFuLm1hZ2VuaGVpbWVyQG9yYWNsZS5jb20+IDIwMDkKKyAqLworCisj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90bWVtLmg+CisjaW5jbHVk ZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3RtZW0uaD4K KyNpbmNsdWRlIDxhc20veGVuL2h5cGVyY2FsbC5oPgorI2luY2x1ZGUgPGFzbS94ZW4vcGFnZS5o PgorCitzdHJ1Y3QgdG1lbV9vcHMgKnRtZW1fb3BzID0gTlVMTDsKKworc3RhdGljIGlubGluZSBp bnQgeGVuX3RtZW1fb3AodTMyIHRtZW1fY21kLCB1MzIgdG1lbV9wb29sLCB1NjQgb2JqZWN0LAor CXUzMiBpbmRleCwgdW5zaWduZWQgbG9uZyBnbWZuLCB1MzIgdG1lbV9vZmZzZXQsIHUzMiBwZm5f b2Zmc2V0LCB1MzIgbGVuKQoreworCXN0cnVjdCB0bWVtX29wIG9wOworCWludCByYyA9IDA7CisK KwlvcC5jbWQgPSB0bWVtX2NtZDsKKwlvcC5wb29sX2lkID0gdG1lbV9wb29sOworCW9wLnUuZ2Vu Lm9iamVjdCA9IG9iamVjdDsKKwlvcC51Lmdlbi5pbmRleCA9IGluZGV4OworCW9wLnUuZ2VuLnRt ZW1fb2Zmc2V0ID0gdG1lbV9vZmZzZXQ7CisJb3AudS5nZW4ucGZuX29mZnNldCA9IHBmbl9vZmZz ZXQ7CisJb3AudS5nZW4ubGVuID0gbGVuOworCXNldF94ZW5fZ3Vlc3RfaGFuZGxlKG9wLnUuZ2Vu LmdtZm4sICh2b2lkICopZ21mbik7CisJcmMgPSBIWVBFUlZJU09SX3RtZW1fb3AoJm9wKTsKKwly ZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHhlbl90bWVtX25ld19wb29sKHVpbnQz Ml90IHRtZW1fY21kLCB1aW50NjRfdCB1dWlkX2xvLAorCXVpbnQ2NF90IHV1aWRfaGksIHVpbnQz Ml90IGZsYWdzKQoreworCXN0cnVjdCB0bWVtX29wIG9wOworCWludCByYyA9IDA7CisKKwlvcC5j bWQgPSB0bWVtX2NtZDsKKwlvcC51Lm5ldy51dWlkWzBdID0gdXVpZF9sbzsKKwlvcC51Lm5ldy51 dWlkWzFdID0gdXVpZF9oaTsKKwlvcC51Lm5ldy5mbGFncyA9IGZsYWdzOworCXJjID0gSFlQRVJW SVNPUl90bWVtX29wKCZvcCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHRtZW1fcHV0 X3BhZ2UodTMyIHBvb2xfaWQsIHU2NCBvYmplY3QsIHUzMiBpbmRleCwKKwl1bnNpZ25lZCBsb25n IHBmbikKK3sKKwl1bnNpZ25lZCBsb25nIGdtZm4gPSBwZm5fdG9fbWZuKHBmbik7CisKKwlyZXR1 cm4geGVuX3RtZW1fb3AoVE1FTV9QVVRfUEFHRSwgcG9vbF9pZCwgb2JqZWN0LCBpbmRleCwKKwkJ Z21mbiwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgdG1lbV9nZXRfcGFnZSh1MzIgcG9vbF9p ZCwgdTY0IG9iamVjdCwgdTMyIGluZGV4LAorCXVuc2lnbmVkIGxvbmcgcGZuKQoreworCXVuc2ln bmVkIGxvbmcgZ21mbiA9IHBmbl90b19tZm4ocGZuKTsKKworCXJldHVybiB4ZW5fdG1lbV9vcChU TUVNX0dFVF9QQUdFLCBwb29sX2lkLCBvYmplY3QsIGluZGV4LAorCQlnbWZuLCAwLCAwLCAwKTsK K30KKworc3RhdGljIGludCB0bWVtX2ZsdXNoX3BhZ2UodTMyIHBvb2xfaWQsIHU2NCBvYmplY3Qs IHUzMiBpbmRleCkKK3sKKwlyZXR1cm4geGVuX3RtZW1fb3AoVE1FTV9GTFVTSF9QQUdFLCBwb29s X2lkLCBvYmplY3QsIGluZGV4LAorCQkwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIGludCB0bWVt X2ZsdXNoX29iamVjdCh1MzIgcG9vbF9pZCwgdTY0IG9iamVjdCkKK3sKKwlyZXR1cm4geGVuX3Rt ZW1fb3AoVE1FTV9GTFVTSF9PQkpFQ1QsIHBvb2xfaWQsIG9iamVjdCwgMCwgMCwgMCwgMCwgMCk7 Cit9CisKK3N0YXRpYyBpbnQgdG1lbV9uZXdfcG9vbCh1NjQgdXVpZF9sbywgdTY0IHV1aWRfaGks IHUzMiBmbGFncykKK3sKKwlmbGFncyB8PSAoUEFHRV9TSElGVCAtIDEyKSA8PCBUTUVNX1BPT0xf UEFHRVNJWkVfU0hJRlQ7CisJcmV0dXJuIHhlbl90bWVtX25ld19wb29sKFRNRU1fTkVXX1BPT0ws IHV1aWRfbG8sIHV1aWRfaGksIGZsYWdzKTsKK30KKworc3RhdGljIGludCB0bWVtX2Rlc3Ryb3lf cG9vbCh1MzIgcG9vbF9pZCkKK3sKKwlyZXR1cm4geGVuX3RtZW1fb3AoVE1FTV9ERVNUUk9ZX1BP T0wsIHBvb2xfaWQsIDAsIDAsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgaW50IF9faW5pdCB4 ZW5fdG1lbV9pbml0KHZvaWQpCit7CisJaWYgKHRtZW1fb3BzICE9IE5VTEwpCisJCXByaW50ayhL RVJOX1dBUk5JTkcsICJhdHRlbXB0IHRvIGRlZmluZSBtdWx0aXBsZSB0bWVtX29wc1xuIik7CisJ ZWxzZQorCQl0bWVtX29wcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0bWVtX29wcyksIEdGUF9L RVJORUwpOworCisJaWYgKHRtZW1fb3BzID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJ dG1lbV9vcHMtPm5ld19wb29sID0gdG1lbV9uZXdfcG9vbDsKKwl0bWVtX29wcy0+cHV0X3BhZ2Ug PSB0bWVtX3B1dF9wYWdlOworCXRtZW1fb3BzLT5nZXRfcGFnZSA9IHRtZW1fZ2V0X3BhZ2U7CisJ dG1lbV9vcHMtPmZsdXNoX3BhZ2UgPSB0bWVtX2ZsdXNoX3BhZ2U7CisJdG1lbV9vcHMtPmZsdXNo X29iamVjdCA9IHRtZW1fZmx1c2hfb2JqZWN0OworCXRtZW1fb3BzLT5kZXN0cm95X3Bvb2wgPSB0 bWVtX2Rlc3Ryb3lfcG9vbDsKKworCXJldHVybiAwOworfQo= --__12454556309492264abhmt009.oracle.com Content-Type: ; name="reorg-diffstat" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="reorg-diffstat" Q2hhbmdlZCBjb3JlIGtlcm5lbCBmaWxlczoKIGZzL2J1ZmZlci5jICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICA1ICsKIGZzL2V4dDMvc3VwZXIuYyAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAyIAogZnMvbXBhZ2UuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgIDggKysKIGZzL29jZnMyL3N1cGVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAy IAogZnMvc3VwZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKwogaW5j bHVkZS9saW51eC9mcy5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKysKIGluY2x1ZGUv bGludXgvc3dhcC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDU3ICsrKysrKysrKysrKysrKysr KysrKwogaW5jbHVkZS9saW51eC9zeXNjdGwuaCAgICAgICAgICAgICAgICAgICB8ICAgIDEgCiBr ZXJuZWwvc3lzY3RsLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArKysrCiBtbS9L Y29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNyArKysrKysrKysKIG1t L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyIAogbW0vZmlsZW1h cC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKysrKwogbW0vcGFnZV9pby5j ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKysrKwogbW0vc3dhcGZpbGUuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDEgKysrKysrKysrKysrLS0tCiBtbS90cnVu Y2F0ZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArKysKIDE1IGZpbGVzIGNo YW5nZWQsIDE5NiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKTmV3bHkgYWRkZWQgY29y ZSBrZXJuZWwgZmlsZXM6CiBpbmNsdWRlL2xpbnV4L3RtZW0uaCAgICAgICAgICAgICAgICAgICAg IHwgICAyMiArCiBtbS9wcmVjYWNoZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE0 NiArKysrKysrKysrKwogbW0vcHJlc3dhcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAyNzQgKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQ0MiBpbnNlcnRp b25zKCspCgpDaGFuZ2VkIHhlbi1zcGVjaWZpYyBmaWxlczoKIGFyY2gveDg2L2luY2x1ZGUvYXNt L3hlbi9oeXBlcmNhbGwuaCAgICAgfCAgICA4ICsrKwogZHJpdmVycy94ZW4vTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgICB8ICAgIDEgCiBpbmNsdWRlL3hlbi9pbnRlcmZhY2UvdG1lbS5oICAg ICAgICAgICAgIHwgICA0MyArKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUveGVuL2ludGVy ZmFjZS94ZW4uaCAgICAgICAgICAgICAgfCAgIDIyICsrKysrKysrKysKIDQgZmlsZXMgY2hhbmdl ZCwgNzQgaW5zZXJ0aW9ucygrKQoKTmV3bHkgYWRkZWQgeGVuLXNwZWNpZmljIGZpbGVzOgogZHJp dmVycy94ZW4vdG1lbS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDYgKysrKysrKysrKysr KysrKysrKysrCiBpbmNsdWRlL3hlbi9pbnRlcmZhY2UvdG1lbS5oICAgICAgICAgICAgIHwgICA0 MyArKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxNDkgaW5zZXJ0aW9ucygrKQo= --__12454556309492264abhmt009.oracle.com-- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/