From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Huang2, Wei" Subject: [RFC] Nested Paging Live Migration Date: Fri, 1 Jun 2007 10:05:16 -0500 Message-ID: <7D748C767B7FA541A8AC5504A4C89A23030EF9B2@SAUSEXMB2.amd.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C7A45E.431ACF26" Return-path: Content-class: urn:content-classes:message List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C7A45E.431ACF26 Content-Type: multipart/alternative; boundary="----_=_NextPart_002_01C7A45E.431ACF26" Content-Transfer-Encoding: 7bit ------_=_NextPart_002_01C7A45E.431ACF26 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable The attached file supports AMD-V nested paging live migration. Please comment. I will create an updated version after collecting feedbacks. =20 arch/x86/hvm/hvm.c | 2=20 arch/x86/hvm/io.c | 2=20 arch/x86/hvm/svm/svm.c | 3=20 arch/x86/mm.c | 12 +- arch/x86/mm/hap/hap.c | 220 +++++++++++++++++++++++++++++++++++++++++- arch/x86/mm/p2m.c | 92 +++++++++++++++-- arch/x86/mm/paging.c | 12 ++ include/asm-x86/domain.h | 8 + include/asm-x86/grant_table.h | 2=20 include/asm-x86/hap.h | 1=20 include/asm-x86/p2m.h | 5=20 include/asm-x86/page.h | 2=20 include/asm-x86/paging.h | 2=20 include/asm-x86/shadow.h | 7 - 14 files changed, 341 insertions(+), 29 deletions(-) Design: 1. We handle four live migration operators as follow: * XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY ** Allocates log_dirty_bitmap ** Set log dirty bit in paging mode ** Goes through the P2M table and mark all physical memory as NOT WRITABLE ** Continues to run the guest as usual =20 * XEN_DOMCTL_SHADOW_OP_PEEK ** There is nothing special here. It is pretty similar to shadow code. Just copy dirty bitmap information to live migration handler. =20 * XEN_DOMCTL_SHADOW_OP_CLEAN ** Clean dirty bitmap to all 0's. ** Goes through the P2M table and marks all physical memory as NOT WRITABLE ** Continues to run the guest as usual =20 * XEN_DOMCTL_SHADOW_OP_OFF ** Fix P2M table and mark all physical memory as WRITABLE ** De-allocate dirty bitmap resources ** Clear log dirty bit in paging mode =20 2. We handle nested page fault as follow: * Nested Paging Fault ** If it is MMIO space, call handle_mmio() ** Otherwise, call p2m_fix_table() to mark a specific page as WRITABLE. Additionally, we call paging_mark_dirty() to update dirty bitmap. By doing this, we only receive one NPF for each dirty page (in each cycle). =20 The following areas require special attention: 1. paging_mark_dirty() Currently, paging_mark_dirty() dispatches to sh_mark_dirty() or hap_mark_dirty() based on paging support. I personally prefer a function pointer. However, current paging interface only provides a function pointer for vcpu-level functions, not for domain-level functions. This is a bit annoying.=20 =20 2. locking in p2m_set_l1e_flags() p2m_set_l1e_flags(), which is invoked by hap.c, calls hap_write_p2m_entry(). hap_lock() is called twice. I currently remove hap_lock() in hap_write_p2m_entry(). A better solution is needed here. =20 =20 Thanks, =20 -Wei ------_=_NextPart_002_01C7A45E.431ACF26 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: quoted-printable
The = attached file=20 supports AMD-V nested paging live migration. Please comment. I will = create an=20 updated version after collecting feedbacks.
 
 arch/x86/hvm/hvm.c      &nbs= p;    =20 |    2=20
 arch/x86/hvm/io.c       &nbs= p;    =20 |    2=20
 arch/x86/hvm/svm/svm.c       = ;=20 |    3=20
 arch/x86/mm.c        &n= bsp;       =20 |   12=20 +-
 arch/x86/mm/hap/hap.c      &nbs= p; =20 |  220=20 +++++++++++++++++++++++++++++++++++++++++-
 arch/x86/mm/p2m.c&nbs= p;           =20 |   92=20 +++++++++++++++--
 arch/x86/mm/paging.c    &n= bsp;    =20 |   12=20 ++
 include/asm-x86/domain.h     =20 |    8 +
 include/asm-x86/grant_table.h=20 |    2=20
 include/asm-x86/hap.h       =  =20 |    1=20
 include/asm-x86/p2m.h       =  =20 |    5=20
 include/asm-x86/page.h       = ;=20 |    2=20
 include/asm-x86/paging.h     =20 |    2=20
 include/asm-x86/shadow.h     =20 |    7 -
 14 files changed, 341 insertions(+), 29 = deletions(-)
Design:
1. We = handle four=20 live migration operators as follow:
*=20 XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY
** Allocates = log_dirty_bitmap
** Set=20 log dirty bit in paging mode
** Goes through the P2M table and mark = all=20 physical memory as NOT WRITABLE
** Continues to run the guest as=20 usual
 
*=20 XEN_DOMCTL_SHADOW_OP_PEEK
** There is nothing special here. It is = pretty=20 similar to shadow code. Just copy dirty bitmap information to live = migration=20 handler.
 
*=20 XEN_DOMCTL_SHADOW_OP_CLEAN
** Clean dirty bitmap to all 0's.
** = Goes=20 through the P2M table and marks all physical memory as NOT = WRITABLE
**=20 Continues to run the guest as usual
 
*=20 XEN_DOMCTL_SHADOW_OP_OFF
** Fix P2M table and mark all physical = memory as=20 WRITABLE
** De-allocate dirty bitmap resources
** Clear log dirty = bit in=20 paging mode
 
2. We = handle nested=20 page fault as follow:
* = Nested Paging=20 Fault
** If it is MMIO space, call handle_mmio()
** Otherwise, = call=20 p2m_fix_table() to mark a specific page as WRITABLE. Additionally, we = call=20 paging_mark_dirty() to update dirty bitmap. By doing this, we only = receive one=20 NPF for each dirty page (in each cycle).
 
The = following areas=20 require special attention:
1. paging_mark_dirty()
Currently,=20 paging_mark_dirty() dispatches to sh_mark_dirty() or hap_mark_dirty() based on paging support. I personally prefer a = function=20 pointer. However, current paging interface only provides a function = pointer for=20 vcpu-level functions, not for domain-level functions. This is a bit = annoying.=20
 
2. locking in=20 p2m_set_l1e_flags()
p2m_set_l1e_flags(), which is invoked by hap.c, = calls=20 hap_write_p2m_entry(). hap_lock() is called twice. I currently = remove hap_lock() in = hap_write_p2m_entry(). A better solution is needed=20 here.
 
 
Thanks,
 
-Wei
<= /HTML> ------_=_NextPart_002_01C7A45E.431ACF26-- ------_=_NextPart_001_01C7A45E.431ACF26 Content-Type: text/plain; name=npt_live_migrate_RFC.txt Content-Transfer-Encoding: base64 Content-Description: npt_live_migrate_RFC.txt Content-Disposition: attachment; filename=npt_live_migrate_RFC.txt ZGlmZiAtciBkMDdlY2I4NjEwMDkgLXIgNDFjZmNlOWVlYjEwIHhlbi9hcmNoL3g4Ni9odm0vaHZt LmMNCi0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMJVHVlIE1heSAyOSAwNjowMjozOSAyMDA3 IC0wNTAwDQorKysgYi94ZW4vYXJjaC94ODYvaHZtL2h2bS5jCVdlZCBNYXkgMzAgMTA6MDk6NDgg MjAwNyAtMDUwMA0KQEAgLTU1OSw3ICs1NTksNyBAQCBzdGF0aWMgaW50IF9faHZtX2NvcHkodm9p ZCAqYnVmLCBwYWRkcl90DQogICAgICAgICBpZiAoIGRpciApDQogICAgICAgICB7DQogICAgICAg ICAgICAgbWVtY3B5KHAsIGJ1ZiwgY291bnQpOyAvKiBkaXIgPT0gVFJVRTogICp0byogZ3Vlc3Qg Ki8NCi0gICAgICAgICAgICBtYXJrX2RpcnR5KGN1cnJlbnQtPmRvbWFpbiwgbWZuKTsNCisgICAg ICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShjdXJyZW50LT5kb21haW4sIG1mbik7DQogICAgICAg ICB9DQogICAgICAgICBlbHNlDQogICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgcCwgY291bnQpOyAv KiBkaXIgPT0gRkFMU0U6ICpmcm9tIGd1ZXN0ICovDQpkaWZmIC1yIGQwN2VjYjg2MTAwOSAtciA0 MWNmY2U5ZWViMTAgeGVuL2FyY2gveDg2L2h2bS9pby5jDQotLS0gYS94ZW4vYXJjaC94ODYvaHZt L2lvLmMJVHVlIE1heSAyOSAwNjowMjozOSAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJjaC94ODYv aHZtL2lvLmMJV2VkIE1heSAzMCAxMDowOTo0OCAyMDA3IC0wNTAwDQpAQCAtODY1LDcgKzg2NSw3 IEBAIHZvaWQgaHZtX2lvX2Fzc2lzdCh2b2lkKQ0KICAgICBpZiAoIChwLT5kaXIgPT0gSU9SRVFf UkVBRCkgJiYgcC0+ZGF0YV9pc19wdHIgKQ0KICAgICB7DQogICAgICAgICBnbWZuID0gZ2V0X21m bl9mcm9tX2dwZm4ocGFnaW5nX2d2YV90b19nZm4odiwgcC0+ZGF0YSkpOw0KLSAgICAgICAgbWFy a19kaXJ0eShkLCBnbWZuKTsNCisgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KGQsIGdtZm4pOw0K ICAgICB9DQogDQogIG91dDoNCmRpZmYgLXIgZDA3ZWNiODYxMDA5IC1yIDQxY2ZjZTllZWIxMCB4 ZW4vYXJjaC94ODYvaHZtL3N2bS9zdm0uYw0KLS0tIGEveGVuL2FyY2gveDg2L2h2bS9zdm0vc3Zt LmMJVHVlIE1heSAyOSAwNjowMjozOSAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJjaC94ODYvaHZt L3N2bS9zdm0uYwlXZWQgTWF5IDMwIDEwOjA5OjQ4IDIwMDcgLTA1MDANCkBAIC0xMDEzLDggKzEw MTMsNyBAQCBzdGF0aWMgaW50IHN2bV9kb19uZXN0ZWRfcGdmYXVsdChwYWRkcl90DQogICAgICAg ICByZXR1cm4gMTsNCiAgICAgfQ0KIA0KLSAgICAvKiBXZSBzaG91bGQgbm90IHJlYWNoIGhlcmUu IE90aGVyd2lzZSwgUDJNIHRhYmxlIGlzIG5vdCBjb3JyZWN0LiovDQotICAgIHJldHVybiAwOw0K KyAgICByZXR1cm4gcDJtX2ZpeF90YWJsZShjdXJyZW50LT5kb21haW4sIGdwYSk7DQogfQ0KIA0K IHN0YXRpYyB2b2lkIHN2bV9kb19ub19kZXZpY2VfZmF1bHQoc3RydWN0IHZtY2Jfc3RydWN0ICp2 bWNiKQ0KZGlmZiAtciBkMDdlY2I4NjEwMDkgLXIgNDFjZmNlOWVlYjEwIHhlbi9hcmNoL3g4Ni9t bS5jDQotLS0gYS94ZW4vYXJjaC94ODYvbW0uYwlUdWUgTWF5IDI5IDA2OjAyOjM5IDIwMDcgLTA1 MDANCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS5jCVdlZCBNYXkgMzAgMTA6MDk6NDggMjAwNyAtMDUw MA0KQEAgLTE1NTIsNyArMTU1Miw3IEBAIGludCBhbGxvY19wYWdlX3R5cGUoc3RydWN0IHBhZ2Vf aW5mbyAqcGENCiANCiAgICAgLyogQSBwYWdlIHRhYmxlIGlzIGRpcnRpZWQgd2hlbiBpdHMgdHlw ZSBjb3VudCBiZWNvbWVzIG5vbi16ZXJvLiAqLw0KICAgICBpZiAoIGxpa2VseShvd25lciAhPSBO VUxMKSApDQotICAgICAgICBtYXJrX2RpcnR5KG93bmVyLCBwYWdlX3RvX21mbihwYWdlKSk7DQor ICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShvd25lciwgcGFnZV90b19tZm4ocGFnZSkpOw0KIA0K ICAgICBzd2l0Y2ggKCB0eXBlICYgUEdUX3R5cGVfbWFzayApDQogICAgIHsNCkBAIC0xNTk4LDcg KzE1OTgsNyBAQCB2b2lkIGZyZWVfcGFnZV90eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhDQogICAg ICAgICBpZiAoIHVubGlrZWx5KHBhZ2luZ19tb2RlX2VuYWJsZWQob3duZXIpKSApDQogICAgICAg ICB7DQogICAgICAgICAgICAgLyogQSBwYWdlIHRhYmxlIGlzIGRpcnRpZWQgd2hlbiBpdHMgdHlw ZSBjb3VudCBiZWNvbWVzIHplcm8uICovDQotICAgICAgICAgICAgbWFya19kaXJ0eShvd25lciwg cGFnZV90b19tZm4ocGFnZSkpOw0KKyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KG93bmVy LCBwYWdlX3RvX21mbihwYWdlKSk7DQogDQogICAgICAgICAgICAgaWYgKCBzaGFkb3dfbW9kZV9y ZWZjb3VudHMob3duZXIpICkNCiAgICAgICAgICAgICAgICAgcmV0dXJuOw0KQEAgLTIwNTMsNyAr MjA1Myw3IEBAIGludCBkb19tbXVleHRfb3AoDQogICAgICAgICAgICAgfQ0KIA0KICAgICAgICAg ICAgIC8qIEEgcGFnZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHBpbiBzdGF0dXMgaXMgc2V0LiAqLw0K LSAgICAgICAgICAgIG1hcmtfZGlydHkoZCwgbWZuKTsNCisgICAgICAgICAgICBwYWdpbmdfbWFy a19kaXJ0eShkLCBtZm4pOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAgLyogV2UgY2FuIHJh Y2UgZG9tYWluIGRlc3RydWN0aW9uIChkb21haW5fcmVsaW5xdWlzaF9yZXNvdXJjZXMpLiAqLw0K ICAgICAgICAgICAgIGlmICggdW5saWtlbHkodGhpc19jcHUocGVyY3B1X21tX2luZm8pLmZvcmVp Z24gIT0gTlVMTCkgKQ0KQEAgLTIwODUsNyArMjA4NSw3IEBAIGludCBkb19tbXVleHRfb3AoDQog ICAgICAgICAgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOw0KICAgICAgICAgICAgICAg ICBwdXRfcGFnZShwYWdlKTsNCiAgICAgICAgICAgICAgICAgLyogQSBwYWdlIGlzIGRpcnRpZWQg d2hlbiBpdHMgcGluIHN0YXR1cyBpcyBjbGVhcmVkLiAqLw0KLSAgICAgICAgICAgICAgICBtYXJr X2RpcnR5KGQsIG1mbik7DQorICAgICAgICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KGQsIG1m bik7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICB7DQpA QCAtMjQyMCw3ICsyNDIwLDcgQEAgaW50IGRvX21tdV91cGRhdGUoDQogICAgICAgICAgICAgc2V0 X2dwZm5fZnJvbV9tZm4obWZuLCBncGZuKTsNCiAgICAgICAgICAgICBva2F5ID0gMTsNCiANCi0g ICAgICAgICAgICBtYXJrX2RpcnR5KEZPUkVJR05ET00sIG1mbik7DQorICAgICAgICAgICAgcGFn aW5nX21hcmtfZGlydHkoRk9SRUlHTkRPTSwgbWZuKTsNCiANCiAgICAgICAgICAgICBwdXRfcGFn ZShtZm5fdG9fcGFnZShtZm4pKTsNCiAgICAgICAgICAgICBicmVhazsNCkBAIC0yOTU5LDcgKzI5 NTksNyBAQCBsb25nIGRvX3VwZGF0ZV9kZXNjcmlwdG9yKHU2NCBwYSwgdTY0IGRlDQogICAgICAg ICBicmVhazsNCiAgICAgfQ0KIA0KLSAgICBtYXJrX2RpcnR5KGRvbSwgbWZuKTsNCisgICAgcGFn aW5nX21hcmtfZGlydHkoZG9tLCBtZm4pOw0KIA0KICAgICAvKiBBbGwgaXMgZ29vZCBzbyBtYWtl IHRoZSB1cGRhdGUuICovDQogICAgIGdkdF9wZW50ID0gbWFwX2RvbWFpbl9wYWdlKG1mbik7DQpk aWZmIC1yIGQwN2VjYjg2MTAwOSAtciA0MWNmY2U5ZWViMTAgeGVuL2FyY2gveDg2L21tL2hhcC9o YXAuYw0KLS0tIGEveGVuL2FyY2gveDg2L21tL2hhcC9oYXAuYwlUdWUgTWF5IDI5IDA2OjAyOjM5 IDIwMDcgLTA1MDANCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS9oYXAvaGFwLmMJV2VkIE1heSAzMCAx MDowOTo0OCAyMDA3IC0wNTAwDQpAQCAtMzg1LDYgKzM4NSwyMTEgQEAgdm9pZCBoYXBfZGVzdHJv eV9tb25pdG9yX3RhYmxlKHN0cnVjdCB2Yw0KIH0NCiANCiAvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgSEFQIExPRyBESVJU WSBTVVBQT1JUICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8NCit2b2lkIGhhcF9tYXJrX2RpcnR5KHN0cnVjdCBkb21haW4g KmQsIG1mbl90IGdtZm4pDQorew0KKyAgICB1bnNpZ25lZCBsb25nIHBmbjsNCisgICAgaW50IGRv X2xvY2tpbmc7DQorDQorICAgIGlmICggIXBhZ2luZ19tb2RlX2xvZ19kaXJ0eShkKSB8fCAhbWZu X3ZhbGlkKGdtZm4pICkNCisgICAgICAgIHJldHVybjsNCisNCisgICAgLyogQWx0aG91Z2ggdGhp cyBpcyBhbiBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb24sIHdlIGRvIG5vdCBrbm93DQorICAg ICAqIHdoZXRoZXIgdGhlIGxvY2sgd2lsbCBiZSBoZWxkIHdoZW4gaXQgaXMgY2FsbGVkIChzaW5j ZSBpdA0KKyAgICAgKiBjYW4gYmUgY2FsbGVkIGZyb20gX19odm1fY29weSBkdXJpbmcgZW11bGF0 aW9uKS4NCisgICAgICogSWYgdGhlIGxvY2sgaXNuJ3QgaGVsZCwgdGFrZSBpdCBmb3IgdGhlIGR1 cmF0aW9uIG9mIHRoZSBjYWxsLiAqLw0KKyAgICBkb19sb2NraW5nID0gIWhhcF9sb2NrZWRfYnlf bWUoZCk7DQorICAgIGlmICggZG9fbG9ja2luZyApIA0KKyAgICB7IA0KKyAgICAgICAgaGFwX2xv Y2soZCk7DQorICAgICAgICAvKiBDaGVjayB0aGUgbW9kZSBhZ2FpbiB3aXRoIHRoZSBsb2NrIGhl bGQgKi8gDQorICAgICAgICBpZiAoIHVubGlrZWx5KCFwYWdpbmdfbW9kZV9sb2dfZGlydHkoZCkp ICkNCisgICAgICAgIHsNCisgICAgICAgICAgICBoYXBfdW5sb2NrKGQpOw0KKyAgICAgICAgICAg IHJldHVybjsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBBU1NFUlQoZC0+YXJjaC5wYWdp bmcuaGFwLmRpcnR5X2JpdG1hcCAhPSBOVUxMKTsNCisNCisgICAgLyogV2UgL3JlYWxseS8gbWVh biBQRk4gaGVyZSwgZXZlbiBmb3Igbm9uLXRyYW5zbGF0ZWQgZ3Vlc3RzLiAqLw0KKyAgICBwZm4g PSBnZXRfZ3Bmbl9mcm9tX21mbihtZm5feChnbWZuKSk7DQorDQorICAgIC8qDQorICAgICAqIFZh bHVlcyB3aXRoIHRoZSBNU0Igc2V0IGRlbm90ZSBNRk5zIHRoYXQgYXJlbid0IHJlYWxseSBwYXJ0 IG9mIHRoZSANCisgICAgICogZG9tYWluJ3MgcHNldWRvLXBoeXNpY2FsIG1lbW9yeSBtYXAgKGUu Zy4sIHRoZSBzaGFyZWQgaW5mbyBmcmFtZSkuDQorICAgICAqIE5vdGhpbmcgdG8gZG8gaGVyZS4u Lg0KKyAgICAgKi8NCisgICAgaWYgKCB1bmxpa2VseSghVkFMSURfTTJQKHBmbikpICkNCisgICAg ICAgIHJldHVybjsNCisNCisgICAgaWYgKCBsaWtlbHkocGZuIDwgZC0+YXJjaC5wYWdpbmcuaGFw LmRpcnR5X2JpdG1hcF9zaXplKSApIA0KKyAgICB7IA0KKyAgICAgICAgaWYgKCAhX190ZXN0X2Fu ZF9zZXRfYml0KHBmbiwgZC0+YXJjaC5wYWdpbmcuaGFwLmRpcnR5X2JpdG1hcCkgKQ0KKyAgICAg ICAgew0KKyAgICAgICAgICAgIGQtPmFyY2gucGFnaW5nLmhhcC5kaXJ0eV9jb3VudCsrOw0KKyAg ICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgSEFQX1BSSU5USygi aGFwX21hcmtfZGlydHkgT09SISAiDQorICAgICAgICAgICAgICAgICAgICJtZm49JSIgUFJJX21m biAiIHBmbj0lbHggbWF4PSV4IChkb20gJWQpXG4iDQorICAgICAgICAgICAgICAgICAgICJvd25l cj0lZCBjPSUwOHggdD0lIiBQUnR5cGVfaW5mbyAiXG4iLA0KKyAgICAgICAgICAgICAgICAgICBt Zm5feChnbWZuKSwgDQorICAgICAgICAgICAgICAgICAgIHBmbiwgDQorICAgICAgICAgICAgICAg ICAgIGQtPmFyY2gucGFnaW5nLmhhcC5kaXJ0eV9iaXRtYXBfc2l6ZSwNCisgICAgICAgICAgICAg ICAgICAgZC0+ZG9tYWluX2lkLA0KKyAgICAgICAgICAgICAgICAgICAocGFnZV9nZXRfb3duZXIo bWZuX3RvX3BhZ2UoZ21mbikpDQorICAgICAgICAgICAgICAgICAgICA/IHBhZ2VfZ2V0X293bmVy KG1mbl90b19wYWdlKGdtZm4pKS0+ZG9tYWluX2lkDQorICAgICAgICAgICAgICAgICAgICA6IC0x KSwNCisgICAgICAgICAgICAgICAgICAgbWZuX3RvX3BhZ2UoZ21mbiktPmNvdW50X2luZm8sIA0K KyAgICAgICAgICAgICAgICAgICBtZm5fdG9fcGFnZShnbWZuKS0+dS5pbnVzZS50eXBlX2luZm8p Ow0KKyAgICB9DQorDQorICAgIGlmICggZG9fbG9ja2luZyApIGhhcF91bmxvY2soZCk7DQorfQ0K Kw0KK2ludCBoYXBfYWxsb2NfbG9nX2RpcnR5X2JpdG1hcChzdHJ1Y3QgZG9tYWluICpkKQ0KK3sN CisgICAgQVNTRVJUKGQtPmFyY2gucGFnaW5nLmhhcC5kaXJ0eV9iaXRtYXAgPT0gTlVMTCk7DQor ICAgIA0KKyAgICBkLT5hcmNoLnBhZ2luZy5oYXAuZGlydHlfYml0bWFwX3NpemUgPSANCisgICAg ICAgIChkb21haW5fZ2V0X21heGltdW1fZ3BmbihkKSArIEJJVFNfUEVSX0xPTkcpICYgfihCSVRT X1BFUl9MT05HIC0gMSk7DQorICAgIGQtPmFyY2gucGFnaW5nLmhhcC5kaXJ0eV9iaXRtYXAgPSAN CisgICAgICAgIHhtYWxsb2NfYXJyYXkodW5zaWduZWQgbG9uZywNCisgICAgICAgICAgICAgICAg ICAgICAgZC0+YXJjaC5wYWdpbmcuaGFwLmRpcnR5X2JpdG1hcF9zaXplIC8gQklUU19QRVJfTE9O Ryk7DQorICAgIGlmICggZC0+YXJjaC5wYWdpbmcuaGFwLmRpcnR5X2JpdG1hcCA9PSBOVUxMICkg DQorICAgIHsNCisJZC0+YXJjaC5wYWdpbmcuaGFwLmRpcnR5X2JpdG1hcF9zaXplID0gMDsNCisg ICAgICAgIHJldHVybiAtRU5PTUVNOw0KKyAgICB9DQorICAgIA0KKyAgICBtZW1zZXQoZC0+YXJj aC5wYWdpbmcuaGFwLmRpcnR5X2JpdG1hcCwgMCwgDQorICAgICAgICAgICBkLT5hcmNoLnBhZ2lu Zy5oYXAuZGlydHlfYml0bWFwX3NpemUvOCk7DQorICAgIA0KKyAgICByZXR1cm4gMDsNCit9DQor DQordm9pZCBoYXBfZnJlZV9sb2dfZGlydHlfYml0bWFwKHN0cnVjdCBkb21haW4gKmQpDQorew0K KyAgICBkLT5hcmNoLnBhZ2luZy5oYXAuZGlydHlfYml0bWFwX3NpemUgPSAwOw0KKyAgICBpZiAo IGQtPmFyY2gucGFnaW5nLmhhcC5kaXJ0eV9iaXRtYXAgKQ0KKyAgICB7DQorCXhmcmVlKGQtPmFy Y2gucGFnaW5nLmhhcC5kaXJ0eV9iaXRtYXApOw0KKwlkLT5hcmNoLnBhZ2luZy5oYXAuZGlydHlf Yml0bWFwID0gTlVMTDsNCisgICAgfQ0KK30NCisNCitpbnQgaGFwX2xvZ19kaXJ0eV9lbmFibGUo c3RydWN0IGRvbWFpbiAqZCkNCit7DQorICAgIGludCByZXQ7DQorDQorICAgIGRvbWFpbl9wYXVz ZShkKTsNCisgICAgaGFwX2xvY2soZCk7DQorDQorICAgIHJldCA9IGhhcF9hbGxvY19sb2dfZGly dHlfYml0bWFwKGQpOw0KKyAgICBpZiAoIHJldCAhPSAwICkNCisgICAgew0KKwloYXBfZnJlZV9s b2dfZGlydHlfYml0bWFwKGQpOw0KKwlnb3RvIG91dDsNCisgICAgfQ0KKw0KKyAgICAvKiB0dXJu IG9uIFBHX2xvZ19kaXJ0eSBiaXQgaW4gcGFnaW5nIG1vZGUgKi8NCisgICAgZC0+YXJjaC5wYWdp bmcubW9kZSB8PSBQR19sb2dfZGlydHk7DQorDQorICAgIC8qIG1hcmsgcGh5c2ljYWwgbWVtb3J5 IGFzIG5vdCB3cml0YWJsZSAqLw0KKyAgICBwMm1fc2V0X2wxZV9mbGFncyhkLCBfX1BBR0VfSFlQ RVJWSVNPUl9OT1RfV1JJVEFCTEV8X1BBR0VfVVNFUik7DQorICAgIGZsdXNoX3RsYl9hbGxfcGdl KCk7DQorDQorIG91dDoNCisgICAgaGFwX3VubG9jayhkKTsNCisgICAgZG9tYWluX3VucGF1c2Uo ZCk7DQorICAgIA0KKyAgICByZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgaGFwX2xvZ19kaXJ0eV9k aXNhYmxlKHN0cnVjdCBkb21haW4gKmQpDQorew0KKyAgICBkb21haW5fcGF1c2UoZCk7DQorICAg IGhhcF9sb2NrKGQpOw0KKyAgICBpZiAoIHBhZ2luZ19tb2RlX2xvZ19kaXJ0eShkKSApDQorCWhh cF9mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoZCk7DQorDQorICAgIC8qIHR1cm4gb2ZmIFBHX2xvZ19k aXJ0eSBiaXQgaW4gcGFnaW5nIG1vZGUgKi8NCisgICAgZC0+YXJjaC5wYWdpbmcubW9kZSAmPSB+ UEdfbG9nX2RpcnR5Ow0KKw0KKyAgICAvKiByZWNvdmVyIFAyTSB0YWJsZSB0byBub3JtYWwgbW9k ZSAqLw0KKyAgICBwMm1fc2V0X2wxZV9mbGFncyhkLCBfX1BBR0VfSFlQRVJWSVNPUnxfUEFHRV9V U0VSKTsNCisNCisgICAgaGFwX3VubG9jayhkKTsNCisgICAgZG9tYWluX3VucGF1c2UoZCk7DQor DQorICAgIHJldHVybiAxOw0KK30NCisNCitpbnQgaGFwX2xvZ19kaXJ0eV9vcChzdHJ1Y3QgZG9t YWluICpkLCBzdHJ1Y3QgeGVuX2RvbWN0bF9zaGFkb3dfb3AgKnNjKQ0KK3sNCisgICAgaW50IGks IHJldCA9IDAsIGNsZWFuID0gMCwgcGVlayA9IDE7DQorDQorICAgIGRvbWFpbl9wYXVzZShkKTsN CisgICAgaGFwX2xvY2soZCk7DQorDQorICAgIGNsZWFuID0gKHNjLT5vcCA9PSBYRU5fRE9NQ1RM X1NIQURPV19PUF9DTEVBTik7DQorICAgIHNjLT5zdGF0cy5mYXVsdF9jb3VudCA9IGQtPmFyY2gu cGFnaW5nLmhhcC5mYXVsdF9jb3VudDsNCisgICAgc2MtPnN0YXRzLmRpcnR5X2NvdW50ID0gZC0+ YXJjaC5wYWdpbmcuaGFwLmRpcnR5X2NvdW50Ow0KKw0KKyAgICBpZiAoIGNsZWFuICkgDQorICAg IHsNCisJZC0+YXJjaC5wYWdpbmcuaGFwLmZhdWx0X2NvdW50ID0gMDsNCisJZC0+YXJjaC5wYWdp bmcuaGFwLmRpcnR5X2NvdW50ID0gMDsNCisgICAgfQ0KKw0KKyAgICBpZiAoIGd1ZXN0X2hhbmRs ZV9pc19udWxsKHNjLT5kaXJ0eV9iaXRtYXApICkNCisgICAgICAgIHBlZWsgPSAwOyAvKiBjYWxs ZXIganVzdCB3YW50cyB0byBjbGVhbiB0aGUgc3RhdGUgb3IgYWNjZXNzIHN0YXRzICovDQorICAg IA0KKyAgICBpZiAoIChwZWVrIHx8IGNsZWFuKSAmJiAoZC0+YXJjaC5wYWdpbmcuaGFwLmRpcnR5 X2JpdG1hcCA9PSBOVUxMKSApIHsNCisgICAgICAgIHJldCA9IC1FSU5WQUw7DQorICAgICAgICBn b3RvIG91dDsNCisgICAgfQ0KKw0KKyAgICBpZiAoIHNjLT5wYWdlcyA+IGQtPmFyY2gucGFnaW5n LmhhcC5kaXJ0eV9iaXRtYXBfc2l6ZSApDQorICAgICAgICBzYy0+cGFnZXMgPSBkLT5hcmNoLnBh Z2luZy5oYXAuZGlydHlfYml0bWFwX3NpemU7DQorDQorI2RlZmluZSBDSFVOSyAoOCoxMDI0KSAv KiBUcmFuc2ZlciBhbmQgY2xlYW4gaW4gMUtCIGNodW5rcyBmb3IgTDEgY2FjaGUgKi8NCisgICAg Zm9yICggaSA9IDA7IGkgPCBzYy0+cGFnZXM7IGkgKz0gQ0hVTksgKSB7DQorICAgICAgICBpbnQg Ynl0ZXMgPSAoKCgoc2MtPnBhZ2VzIC0gaSkgPiBDSFVOSykNCisgICAgICAgICAgICAgICAgICAg ICAgPyBDSFVOSw0KKyAgICAgICAgICAgICAgICAgICAgICA6IChzYy0+cGFnZXMgLSBpKSkgKyA3 KSAvIDg7DQorICAgICAgICANCisgICAgICAgIGlmICggbGlrZWx5KHBlZWspICkgew0KKyAgICAg ICAgICAgIGlmICggY29weV90b19ndWVzdF9vZmZzZXQoDQorICAgICAgICAgICAgICAgICBzYy0+ ZGlydHlfYml0bWFwLCBpLzgsDQorICAgICAgICAgICAgICAgICAodWludDhfdCAqKWQtPmFyY2gu cGFnaW5nLmhhcC5kaXJ0eV9iaXRtYXAgKyAoaS84KSwgYnl0ZXMpICkNCisgICAgICAgICAgICB7 DQorICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7DQorICAgICAgICAgICAgICAgIGdvdG8g b3V0Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgICAgICANCisgICAgICAg IGlmICggY2xlYW4gKQ0KKyAgICAgICAgICAgIG1lbXNldCgodWludDhfdCAqKWQtPmFyY2gucGFn aW5nLmhhcC5kaXJ0eV9iaXRtYXAgKyAoaS84KSwgMCwgYnl0ZXMpOw0KKyAgICB9DQorI3VuZGVm IENIVU5LDQorDQorICAgIC8qIG1hcmsgcGh5c2ljYWwgbWVtb3J5IGFzIG5vdCB3cml0YWJsZSAq Lw0KKyAgICBpZiAoIGNsZWFuICkgew0KKyAgICAgICAgcDJtX3NldF9sMWVfZmxhZ3MoZCwgX19Q QUdFX0hZUEVSVklTT1JfTk9UX1dSSVRBQkxFfF9QQUdFX1VTRVIpOw0KKyAgICAgICAgZmx1c2hf dGxiX2FsbF9wZ2UoKTsNCisgICAgfQ0KKyAgICANCisNCisgb3V0Og0KKyAgICBoYXBfdW5sb2Nr KGQpOw0KKyAgICBkb21haW5fdW5wYXVzZShkKTsNCisgICAgcmV0dXJuIHJldDsgICAgDQorfQ0K Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogLyog ICAgICAgICAgSEFQIERPTUFJTiBMRVZFTCBGVU5DVElPTlMgICAgICAgICAgKi8NCiAvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KIHZvaWQgaGFwX2Rv bWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQpDQpAQCAtNTA0LDYgKzcwOSwxOSBAQCBpbnQgaGFw X2RvbWN0bChzdHJ1Y3QgZG9tYWluICpkLCB4ZW5fZG9tDQogICAgIH0NCiAgICAgDQogICAgIHN3 aXRjaCAoIHNjLT5vcCApIHsNCisgICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19PUF9PRkY6DQor CWlmICggcGFnaW5nX21vZGVfbG9nX2RpcnR5KGQpICkNCisgICAgICAgICAgICBpZiAoIChyYyA9 IGhhcF9sb2dfZGlydHlfZGlzYWJsZShkKSkgIT0gMCApDQorICAgICAgICAgICAgICAgIHJldHVy biByYzsNCisJcmV0dXJuIDA7DQorCQ0KKyAgICBjYXNlIFhFTl9ET01DVExfU0hBRE9XX09QX0NM RUFOOg0KKyAgICBjYXNlIFhFTl9ET01DVExfU0hBRE9XX09QX1BFRUs6DQorCXJldHVybiBoYXBf bG9nX2RpcnR5X29wKGQsIHNjKTsNCisNCisgICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19PUF9F TkFCTEVfTE9HRElSVFk6DQorCXJldHVybiBoYXBfbG9nX2RpcnR5X2VuYWJsZShkKTsNCisNCiAg ICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19PUF9TRVRfQUxMT0NBVElPTjoNCiAgICAgICAgIGhh cF9sb2NrKGQpOw0KICAgICAgICAgcmMgPSBoYXBfc2V0X2FsbG9jYXRpb24oZCwgc2MtPm1iIDw8 ICgyMCAtIFBBR0VfU0hJRlQpLCAmcHJlZW1wdGVkKTsNCkBAIC02NjksNyArODg3LDYgQEAgaGFw X3dyaXRlX3AybV9lbnRyeShzdHJ1Y3QgdmNwdSAqdiwgdW5zaQ0KIGhhcF93cml0ZV9wMm1fZW50 cnkoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgZ2ZuLCBsMV9wZ2VudHJ5X3QgKnAsDQog ICAgICAgICAgICAgICAgICAgICBsMV9wZ2VudHJ5X3QgbmV3LCB1bnNpZ25lZCBpbnQgbGV2ZWwp DQogew0KLSAgICBoYXBfbG9jayh2LT5kb21haW4pOw0KICAgICBzYWZlX3dyaXRlX3B0ZShwLCBu ZXcpOw0KICNpZiBDT05GSUdfUEFHSU5HX0xFVkVMUyA9PSAzDQogICAgIC8qIGluc3RhbGwgUDJN IGluIG1vbml0b3IgdGFibGUgZm9yIFBBRSBYZW4gKi8NCkBAIC02ODAsNyArODk3LDYgQEAgaGFw X3dyaXRlX3AybV9lbnRyeShzdHJ1Y3QgdmNwdSAqdiwgdW5zaQ0KIAkNCiAgICAgfQ0KICNlbmRp Zg0KLSAgICBoYXBfdW5sb2NrKHYtPmRvbWFpbik7DQogfQ0KIA0KIC8qIEVudHJ5IHBvaW50cyBp bnRvIHRoaXMgbW9kZSBvZiB0aGUgaGFwIGNvZGUuICovDQpkaWZmIC1yIGQwN2VjYjg2MTAwOSAt ciA0MWNmY2U5ZWViMTAgeGVuL2FyY2gveDg2L21tL3AybS5jDQotLS0gYS94ZW4vYXJjaC94ODYv bW0vcDJtLmMJVHVlIE1heSAyOSAwNjowMjozOSAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJjaC94 ODYvbW0vcDJtLmMJV2VkIE1heSAzMCAxMDowOTo0OCAyMDA3IC0wNTAwDQpAQCAtMTY5LDcgKzE2 OSw3IEBAIHAybV9uZXh0X2xldmVsKHN0cnVjdCBkb21haW4gKmQsIG1mbl90ICoNCiANCiAvLyBS ZXR1cm5zIDAgb24gZXJyb3IgKG91dCBvZiBtZW1vcnkpDQogc3RhdGljIGludA0KLXNldF9wMm1f ZW50cnkoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4sIG1mbl90IG1mbikNCitz ZXRfcDJtX2VudHJ5KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuLCBtZm5fdCBt Zm4sIHUzMiBsMWVfZmxhZ3MpDQogew0KICAgICAvLyBYWFggLS0gdGhpcyBtaWdodCBiZSBhYmxl IHRvIGJlIGZhc3RlciBpZmYgY3VycmVudC0+ZG9tYWluID09IGQNCiAgICAgbWZuX3QgdGFibGVf bWZuID0gcGFnZXRhYmxlX2dldF9tZm4oZC0+YXJjaC5waHlzX3RhYmxlKTsNCkBAIC0yMTMsNyAr MjEzLDcgQEAgc2V0X3AybV9lbnRyeShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZA0KICAgICAg ICAgZC0+YXJjaC5wMm0ubWF4X21hcHBlZF9wZm4gPSBnZm47DQogDQogICAgIGlmICggbWZuX3Zh bGlkKG1mbikgKQ0KLSAgICAgICAgZW50cnlfY29udGVudCA9IGwxZV9mcm9tX3BmbihtZm5feCht Zm4pLCBfX1BBR0VfSFlQRVJWSVNPUnxfUEFHRV9VU0VSKTsNCisgICAgICAgIGVudHJ5X2NvbnRl bnQgPSBsMWVfZnJvbV9wZm4obWZuX3gobWZuKSwgbDFlX2ZsYWdzKTsNCiAgICAgZWxzZQ0KICAg ICAgICAgZW50cnlfY29udGVudCA9IGwxZV9lbXB0eSgpOw0KIA0KQEAgLTI3OCw3ICsyNzgsNyBA QCBpbnQgcDJtX2FsbG9jX3RhYmxlKHN0cnVjdCBkb21haW4gKmQsDQogICAgICAgICBwMm1fdW5s b2NrKGQpOw0KICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQogICAgIH0NCi1saXN0X2FkZF90YWls KCZwMm1fdG9wLT5saXN0LCAmZC0+YXJjaC5wMm0ucGFnZXMpOw0KKyAgICBsaXN0X2FkZF90YWls KCZwMm1fdG9wLT5saXN0LCAmZC0+YXJjaC5wMm0ucGFnZXMpOw0KIA0KICAgICBwMm1fdG9wLT5j b3VudF9pbmZvID0gMTsNCiAgICAgcDJtX3RvcC0+dS5pbnVzZS50eXBlX2luZm8gPSANCkBAIC0y OTcsOCArMjk3LDggQEAgbGlzdF9hZGRfdGFpbCgmcDJtX3RvcC0+bGlzdCwgJmQtPmFyY2gucA0K ICANCiAgICAgLyogSW5pdGlhbGlzZSBwaHlzbWFwIHRhYmxlcyBmb3Igc2xvdCB6ZXJvLiBPdGhl ciBjb2RlIGFzc3VtZXMgdGhpcy4gKi8NCiAgICAgZ2ZuID0gMDsNCi1tZm4gPSBfbWZuKElOVkFM SURfTUZOKTsNCi0gICAgaWYgKCAhc2V0X3AybV9lbnRyeShkLCBnZm4sIG1mbikgKQ0KKyAgICBt Zm4gPSBfbWZuKElOVkFMSURfTUZOKTsNCisgICAgaWYgKCAhc2V0X3AybV9lbnRyeShkLCBnZm4s IG1mbiwgX19QQUdFX0hZUEVSVklTT1J8X1BBR0VfVVNFUikgKQ0KICAgICAgICAgZ290byBlcnJv cjsNCiANCiAgICAgZm9yICggZW50cnkgPSBkLT5wYWdlX2xpc3QubmV4dDsNCkBAIC0zMTYsNyAr MzE2LDcgQEAgbWZuID0gX21mbihJTlZBTElEX01GTik7DQogICAgICAgICAgICAgKGdmbiAhPSAw eDU1NTU1NTU1TCkNCiAjZW5kaWYNCiAgICAgICAgICAgICAgJiYgZ2ZuICE9IElOVkFMSURfTTJQ X0VOVFJZDQotICAgICAgICAgICAgICYmICFzZXRfcDJtX2VudHJ5KGQsIGdmbiwgbWZuKSApDQor ICAgICAgICAgICAgICYmICFzZXRfcDJtX2VudHJ5KGQsIGdmbiwgbWZuLCBfX1BBR0VfSFlQRVJW SVNPUnxfUEFHRV9VU0VSKSApDQogICAgICAgICAgICAgZ290byBlcnJvcjsNCiAgICAgfQ0KIA0K QEAgLTYyNiw3ICs2MjYsNyBAQCBwMm1fcmVtb3ZlX3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCwgdW5z aWduDQogICAgIEFTU0VSVChtZm5feChnZm5fdG9fbWZuKGQsIGdmbikpID09IG1mbik7DQogICAg IC8vQVNTRVJUKG1mbl90b19nZm4oZCwgbWZuKSA9PSBnZm4pOw0KIA0KLSAgICBzZXRfcDJtX2Vu dHJ5KGQsIGdmbiwgX21mbihJTlZBTElEX01GTikpOw0KKyAgICBzZXRfcDJtX2VudHJ5KGQsIGdm biwgX21mbihJTlZBTElEX01GTiksIF9fUEFHRV9IWVBFUlZJU09SfF9QQUdFX1VTRVIpOw0KICAg ICBzZXRfZ3Bmbl9mcm9tX21mbihtZm4sIElOVkFMSURfTTJQX0VOVFJZKTsNCiB9DQogDQpAQCAt NjU5LDcgKzY1OSw3IEBAIGd1ZXN0X3BoeXNtYXBfYWRkX3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCwN CiAgICAgb21mbiA9IGdmbl90b19tZm4oZCwgZ2ZuKTsNCiAgICAgaWYgKCBtZm5fdmFsaWQob21m bikgKQ0KICAgICB7DQotICAgICAgICBzZXRfcDJtX2VudHJ5KGQsIGdmbiwgX21mbihJTlZBTElE X01GTikpOw0KKyAgICAgICAgc2V0X3AybV9lbnRyeShkLCBnZm4sIF9tZm4oSU5WQUxJRF9NRk4p LCBfX1BBR0VfSFlQRVJWSVNPUnxfUEFHRV9VU0VSKTsNCiAgICAgICAgIHNldF9ncGZuX2Zyb21f bWZuKG1mbl94KG9tZm4pLCBJTlZBTElEX00yUF9FTlRSWSk7DQogICAgIH0NCiANCkBAIC02ODUs MTMgKzY4NSw4NyBAQCBndWVzdF9waHlzbWFwX2FkZF9wYWdlKHN0cnVjdCBkb21haW4gKmQsDQog ICAgICAgICB9DQogICAgIH0NCiANCi0gICAgc2V0X3AybV9lbnRyeShkLCBnZm4sIF9tZm4obWZu KSk7DQorICAgIHNldF9wMm1fZW50cnkoZCwgZ2ZuLCBfbWZuKG1mbiksIF9fUEFHRV9IWVBFUlZJ U09SfF9QQUdFX1VTRVIpOw0KICAgICBzZXRfZ3Bmbl9mcm9tX21mbihtZm4sIGdmbik7DQogDQog ICAgIGF1ZGl0X3AybShkKTsNCiAgICAgcDJtX3VubG9jayhkKTsNCiB9DQogDQorLyogVGhpcyBm dW5jdGlvbiBnb2VzIHRocm91Z2ggUDJNIHRhYmxlIGFuZCBtb2RpZnkgdGhlIGZsYWdzIG9mIGwx ZS4gTm90ZSB0aGF0IA0KKyAqIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiBsMWUgaXMgaW50YWN0 LiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGZvciANCisgKiBzcGVjaWFsIHB1cnBvc2UsIHN1 Y2ggYXMgbWFya2luZyBwaHlzaWNhbCBtZW1vcnkgYXMgTm90LVdyaXRhYmxlIGZvcg0KKyAqIHRy YWNraW5nIGRpcnR5IHBhZ2VzIGR1cmluZyBsaXZlIG1pZ3JhdGlvbi4gDQorICovDQoraW50IHAy bV9zZXRfbDFlX2ZsYWdzKHN0cnVjdCBkb21haW4gKmQsIHUzMiBsMWVfZmxhZ3MpDQorew0KKyAg ICBtZm5fdCBtZm47DQorICAgIHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5Ow0KKyAgICBzdHJ1Y3Qg cGFnZV9pbmZvICpwYWdlOw0KKyAgICB1bnNpZ25lZCBsb25nIGdmbjsNCisNCisgICAgcDJtX2xv Y2soZCk7DQorDQorICAgIGlmICggcGFnZXRhYmxlX2dldF9wZm4oZC0+YXJjaC5waHlzX3RhYmxl KSA9PSAwICkNCisgICAgew0KKwlQMk1fRVJST1IoInAybSB0YWJsZSBoYXMgbm90IGJlZW4gYWxs b2NhdGVkIGZvciB0aGlzIGRvbWFpbiB5ZXQhXG4iKTsNCisJcDJtX3VubG9jayhkKTsNCisJcmV0 dXJuIC1FSU5WQUw7DQorICAgIH0NCisNCisgICAgZm9yICggZW50cnkgPSBkLT5wYWdlX2xpc3Qu bmV4dDsNCisgICAgICAgICAgZW50cnkgIT0gJmQtPnBhZ2VfbGlzdDsNCisgICAgICAgICAgZW50 cnkgPSBlbnRyeS0+bmV4dCApDQorICAgIHsNCisgICAgICAgIHBhZ2UgPSBsaXN0X2VudHJ5KGVu dHJ5LCBzdHJ1Y3QgcGFnZV9pbmZvLCBsaXN0KTsNCisgICAgICAgIG1mbiA9IHBhZ2VfdG9fbWZu KHBhZ2UpOw0KKyAgICAgICAgZ2ZuID0gZ2V0X2dwZm5fZnJvbV9tZm4obWZuX3gobWZuKSk7DQor ICAgICAgICBpZiAoDQorI2lmZGVmIF9feDg2XzY0X18NCisgICAgICAgICAgICAoZ2ZuICE9IDB4 NTU1NTU1NTU1NTU1NTU1NUwpDQorI2Vsc2UNCisgICAgICAgICAgICAoZ2ZuICE9IDB4NTU1NTU1 NTVMKQ0KKyNlbmRpZg0KKyAgICAgICAgICAgICAmJiBnZm4gIT0gSU5WQUxJRF9NMlBfRU5UUlkN CisgICAgICAgICAgICAgJiYgIXNldF9wMm1fZW50cnkoZCwgZ2ZuLCBtZm4sIGwxZV9mbGFncykg KQ0KKyAgICAgICAgICAgIGdvdG8gZXJyb3I7DQorICAgIH0NCisNCisgICAgcDJtX3VubG9jayhk KTsNCisgICAgcmV0dXJuIDA7DQorDQorIGVycm9yOg0KKyAgICBQMk1fUFJJTlRLKCJmYWlsZWQg dG8gY2hhbmdlIGwxZSBmbGFncyBvZiBwMm0gdGFibGUsIGdmbj0lMDVseCwgbWZuPSUiDQorICAg ICAgICAgICAgICAgUFJJX21mbiAiXG4iLCBnZm4sIG1mbl94KG1mbikpOw0KKyAgICBwMm1fdW5s b2NrKGQpOw0KKyAgICByZXR1cm4gLUVOT01FTTsNCit9DQorDQorLyogVGhpcyBmdW5jdGlvbiBo YW5kbGVzIFAyTSBwYWdlIGZhdWx0cyBieSBmaXhpbmcgbDFlIGZsYWdzIHdpdGggY29ycmVjdCAN CisgKiB2YWx1ZXMuICBJdCBhbHNvIGNhbGxzIHBhZ2luZ19tYXJrX2RpcnR5KCkgZnVuY3Rpb24g dG8gcmVjb3JkIHRoZSBkaXJ0eQ0KKyAqIHBhZ2VzLg0KKyAqLw0KK2ludCBwMm1fZml4X3RhYmxl KHN0cnVjdCBkb21haW4gKmQsIHBhZGRyX3QgZ3BhKQ0KK3sNCisgICAgdW5zaWduZWQgbG9uZyBn Zm47DQorICAgIG1mbl90IG1mbjsNCisNCisgICAgcDJtX2xvY2soZCk7DQorDQorICAgIGdmbiA9 IGdwYSA+PiBQQUdFX1NISUZUOw0KKyAgICAgIA0KKyAgICBtZm4gPSBnZm5fdG9fbWZuKGQsIGdm bik7DQorICAgIGlmICggbWZuX3ZhbGlkKG1mbikgKSANCisgICAgew0KKyAgICAgICAgc2V0X3Ay bV9lbnRyeShkLCBnZm4sIG1mbiwgX19QQUdFX0hZUEVSVklTT1J8X1BBR0VfVVNFUik7DQorICAg IH0NCisNCisgICAgcGFnaW5nX21hcmtfZGlydHkoZCwgbWZuX3gobWZuKSk7DQorICAgIA0KKyAg ICBwMm1fdW5sb2NrKGQpOw0KKw0KKyAgICByZXR1cm4gMTsgLyogc3VjY2Vzc2Z1bCAqLw0KK30N CiANCiAvKg0KICAqIExvY2FsIHZhcmlhYmxlczoNCmRpZmYgLXIgZDA3ZWNiODYxMDA5IC1yIDQx Y2ZjZTllZWIxMCB4ZW4vYXJjaC94ODYvbW0vcGFnaW5nLmMNCi0tLSBhL3hlbi9hcmNoL3g4Ni9t bS9wYWdpbmcuYwlUdWUgTWF5IDI5IDA2OjAyOjM5IDIwMDcgLTA1MDANCisrKyBiL3hlbi9hcmNo L3g4Ni9tbS9wYWdpbmcuYwlXZWQgTWF5IDMwIDEwOjA5OjQ4IDIwMDcgLTA1MDANCkBAIC05OCw2 ICs5OCwxOCBAQCBpbnQgcGFnaW5nX2VuYWJsZShzdHJ1Y3QgZG9tYWluICpkLCB1MzIgDQogICAg ICAgICByZXR1cm4gaGFwX2VuYWJsZShkLCBtb2RlIHwgUEdfSEFQX2VuYWJsZSk7DQogICAgIGVs c2UNCiAgICAgICAgIHJldHVybiBzaGFkb3dfZW5hYmxlKGQsIG1vZGUgfCBQR19TSF9lbmFibGUp Ow0KK30NCisNCisvKiBNYXJrIGEgZGlydHkgcGFnZSBmb3IgbG9nIGRpcnR5IGJpdG1hcCBkdXJp bmcgbGl2ZSBtaWdyYXRpb24gKi8NCit2b2lkIHBhZ2luZ19tYXJrX2RpcnR5KHN0cnVjdCBkb21h aW4gKmQsIHVuc2lnbmVkIGxvbmcgZ21mbikNCit7DQorICAgIGlmICggbGlrZWx5KCFwYWdpbmdf bW9kZV9sb2dfZGlydHkoZCkpICkNCisgICAgICAgIHJldHVybjsNCisNCisgICAgaWYgKCBvcHRf aGFwX2VuYWJsZWQgJiYgaXNfaHZtX2RvbWFpbihkKSApDQorICAgICAgICBoYXBfbWFya19kaXJ0 eShkLCBfbWZuKGdtZm4pKTsNCisgICAgZWxzZQ0KKyAgICAgICAgc2hfbWFya19kaXJ0eShkLCBf bWZuKGdtZm4pKTsNCiB9DQogDQogLyogUHJpbnQgcGFnaW5nLWFzc2lzdGFuY2UgaW5mbyB0byB0 aGUgY29uc29sZSAqLw0KZGlmZiAtciBkMDdlY2I4NjEwMDkgLXIgNDFjZmNlOWVlYjEwIHhlbi9p bmNsdWRlL2FzbS14ODYvZG9tYWluLmgNCi0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvZG9tYWlu LmgJVHVlIE1heSAyOSAwNjowMjozOSAyMDA3IC0wNTAwDQorKysgYi94ZW4vaW5jbHVkZS9hc20t eDg2L2RvbWFpbi5oCVdlZCBNYXkgMzAgMTA6MDk6NDggMjAwNyAtMDUwMA0KQEAgLTEyOSw2ICsx MjksMTQgQEAgc3RydWN0IGhhcF9kb21haW4gew0KICAgICB1bnNpZ25lZCBpbnQgICAgICB0b3Rh bF9wYWdlczsgIC8qIG51bWJlciBvZiBwYWdlcyBhbGxvY2F0ZWQgKi8NCiAgICAgdW5zaWduZWQg aW50ICAgICAgZnJlZV9wYWdlczsgICAvKiBudW1iZXIgb2YgcGFnZXMgb24gZnJlZWxpc3RzICov DQogICAgIHVuc2lnbmVkIGludCAgICAgIHAybV9wYWdlczsgICAgLyogbnVtYmVyIG9mIHBhZ2Vz IGFsbG9jYXRlcyB0byBwMm0gKi8NCisNCisgICAgLyogaGFwIGxvZy1kaXJ0eSBiaXRtYXAgKi8N CisgICAgdW5zaWduZWQgbG9uZyAgICAqZGlydHlfYml0bWFwOw0KKyAgICB1bnNpZ25lZCBpbnQg ICAgICBkaXJ0eV9iaXRtYXBfc2l6ZTsgIC8qIGluIHBhZ2VzLCBiaXQgcGVyIHBhZ2UgKi8NCisg ICAgDQorICAgIC8qIGhhcCBsb2ctZGlydHkgbW9kZSBzdGF0aXN0aWNzICovDQorICAgIHVuc2ln bmVkIGludCAgICAgIGZhdWx0X2NvdW50Ow0KKyAgICB1bnNpZ25lZCBpbnQgICAgICBkaXJ0eV9j b3VudDsNCiB9Ow0KIA0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovDQpkaWZmIC1yIGQwN2VjYjg2MTAwOSAtciA0MWNmY2U5ZWViMTAgeGVuL2luY2x1 ZGUvYXNtLXg4Ni9ncmFudF90YWJsZS5oDQotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2dyYW50 X3RhYmxlLmgJVHVlIE1heSAyOSAwNjowMjozOSAyMDA3IC0wNTAwDQorKysgYi94ZW4vaW5jbHVk ZS9hc20teDg2L2dyYW50X3RhYmxlLmgJV2VkIE1heSAzMCAxMDowOTo0OCAyMDA3IC0wNTAwDQpA QCAtMzEsNyArMzEsNyBAQCBpbnQgZGVzdHJveV9ncmFudF9ob3N0X21hcHBpbmcoDQogI2RlZmlu ZSBnbnR0YWJfc2hhcmVkX2dtZm4oZCwgdCwgaSkgICAgICAgICAgICAgICAgICAgICBcDQogICAg IChtZm5fdG9fZ21mbihkLCBnbnR0YWJfc2hhcmVkX21mbihkLCB0LCBpKSkpDQogDQotI2RlZmlu ZSBnbnR0YWJfbWFya19kaXJ0eShkLCBmKSBtYXJrX2RpcnR5KChkKSwgKGYpKQ0KKyNkZWZpbmUg Z250dGFiX21hcmtfZGlydHkoZCwgZikgcGFnaW5nX21hcmtfZGlydHkoKGQpLCAoZikpDQogDQog c3RhdGljIGlubGluZSB2b2lkIGdudHRhYl9jbGVhcl9mbGFnKHVuc2lnbmVkIGxvbmcgbnIsIHVp bnQxNl90ICphZGRyKQ0KIHsNCmRpZmYgLXIgZDA3ZWNiODYxMDA5IC1yIDQxY2ZjZTllZWIxMCB4 ZW4vaW5jbHVkZS9hc20teDg2L2hhcC5oDQotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2hhcC5o CVR1ZSBNYXkgMjkgMDY6MDI6MzkgMjAwNyAtMDUwMA0KKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4 Ni9oYXAuaAlXZWQgTWF5IDMwIDEwOjA5OjQ4IDIwMDcgLTA1MDANCkBAIC0xMDQsNiArMTA0LDcg QEAgaW50ICAgaGFwX2VuYWJsZShzdHJ1Y3QgZG9tYWluICpkLCB1MzIgbQ0KIGludCAgIGhhcF9l bmFibGUoc3RydWN0IGRvbWFpbiAqZCwgdTMyIG1vZGUpOw0KIHZvaWQgIGhhcF9maW5hbF90ZWFy ZG93bihzdHJ1Y3QgZG9tYWluICpkKTsNCiB2b2lkICBoYXBfdGVhcmRvd24oc3RydWN0IGRvbWFp biAqZCk7DQordm9pZCAgaGFwX21hcmtfZGlydHkoc3RydWN0IGRvbWFpbiAqZCwgbWZuX3QgZ21m bik7DQogdm9pZCAgaGFwX3ZjcHVfaW5pdChzdHJ1Y3QgdmNwdSAqdik7DQogDQogZXh0ZXJuIHN0 cnVjdCBwYWdpbmdfbW9kZSBoYXBfcGFnaW5nX3JlYWxfbW9kZTsNCmRpZmYgLXIgZDA3ZWNiODYx MDA5IC1yIDQxY2ZjZTllZWIxMCB4ZW4vaW5jbHVkZS9hc20teDg2L3AybS5oDQotLS0gYS94ZW4v aW5jbHVkZS9hc20teDg2L3AybS5oCVR1ZSBNYXkgMjkgMDY6MDI6MzkgMjAwNyAtMDUwMA0KKysr IGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wMm0uaAlXZWQgTWF5IDMwIDEwOjA5OjQ4IDIwMDcgLTA1 MDANCkBAIC0xMjksNiArMTI5LDExIEBAIHZvaWQgZ3Vlc3RfcGh5c21hcF9yZW1vdmVfcGFnZShz dHJ1Y3QgZG8NCiB2b2lkIGd1ZXN0X3BoeXNtYXBfcmVtb3ZlX3BhZ2Uoc3RydWN0IGRvbWFpbiAq ZCwgdW5zaWduZWQgbG9uZyBnZm4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgbWZuKTsNCiANCisvKiBDb25maWd1cmUgbDFlIGZsYWdzIG9mIFAyTSB0YWJs ZSAqLw0KK2ludCBwMm1fc2V0X2wxZV9mbGFncyhzdHJ1Y3QgZG9tYWluICpkLCB1MzIgZmxhZ3Mp Ow0KKw0KKy8qIEZpeCBQMk0gdGFibGUgd2hlbiBwYWdlIGZhdWx0cyBhcmUgcmVsYXRlZCB0byBQ Mk0gdGFibGUgZW50cnkgKi8NCitpbnQgcDJtX2ZpeF90YWJsZShzdHJ1Y3QgZG9tYWluICpkLCBw YWRkcl90IGdwYSk7DQogDQogI2VuZGlmIC8qIF9YRU5fUDJNX0ggKi8NCiANCmRpZmYgLXIgZDA3 ZWNiODYxMDA5IC1yIDQxY2ZjZTllZWIxMCB4ZW4vaW5jbHVkZS9hc20teDg2L3BhZ2UuaA0KLS0t IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9wYWdlLmgJVHVlIE1heSAyOSAwNjowMjozOSAyMDA3IC0w NTAwDQorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L3BhZ2UuaAlXZWQgTWF5IDMwIDEwOjA5OjQ4 IDIwMDcgLTA1MDANCkBAIC0zMzQsNiArMzM0LDggQEAgdm9pZCBzZXR1cF9pZGxlX3BhZ2V0YWJs ZSh2b2lkKTsNCiAgICAgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0RJUlRZIHwg X1BBR0VfQUNDRVNTRUQpDQogI2RlZmluZSBfX1BBR0VfSFlQRVJWSVNPUl9OT0NBQ0hFIFwNCiAg ICAgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfUENEIHwg X1BBR0VfQUNDRVNTRUQpDQorI2RlZmluZSBfX1BBR0VfSFlQRVJWSVNPUl9OT1RfV1JJVEFCTEUg XA0KKyAgICAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQpDQog DQogI2lmbmRlZiBfX0FTU0VNQkxZX18NCiANCmRpZmYgLXIgZDA3ZWNiODYxMDA5IC1yIDQxY2Zj ZTllZWIxMCB4ZW4vaW5jbHVkZS9hc20teDg2L3BhZ2luZy5oDQotLS0gYS94ZW4vaW5jbHVkZS9h c20teDg2L3BhZ2luZy5oCVR1ZSBNYXkgMjkgMDY6MDI6MzkgMjAwNyAtMDUwMA0KKysrIGIveGVu L2luY2x1ZGUvYXNtLXg4Ni9wYWdpbmcuaAlXZWQgTWF5IDMwIDEwOjA5OjQ4IDIwMDcgLTA1MDAN CkBAIC0xNjQsNiArMTY0LDggQEAgdm9pZCBwYWdpbmdfZmluYWxfdGVhcmRvd24oc3RydWN0IGRv bWFpbg0KICAqIGNyZWF0aW9uLiAqLw0KIGludCBwYWdpbmdfZW5hYmxlKHN0cnVjdCBkb21haW4g KmQsIHUzMiBtb2RlKTsNCiANCisvKiBNYXJrIGRpcnR5IHBhZ2VzIGR1cmluZyBsaXZlIG1pZ3Jh dGlvbiAqLw0KK3ZvaWQgcGFnaW5nX21hcmtfZGlydHkoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWdu ZWQgbG9uZyBnbWZuKTsNCiANCiAvKiBQYWdlIGZhdWx0IGhhbmRsZXINCiAgKiBDYWxsZWQgZnJv bSBwYWdlZmF1bHQgaGFuZGxlciBpbiBYZW4sIGFuZCBmcm9tIHRoZSBIVk0gdHJhcCBoYW5kbGVy cw0KZGlmZiAtciBkMDdlY2I4NjEwMDkgLXIgNDFjZmNlOWVlYjEwIHhlbi9pbmNsdWRlL2FzbS14 ODYvc2hhZG93LmgNCi0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvc2hhZG93LmgJVHVlIE1heSAy OSAwNjowMjozOSAyMDA3IC0wNTAwDQorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L3NoYWRvdy5o CVdlZCBNYXkgMzAgMTA6MDk6NDggMjAwNyAtMDUwMA0KQEAgLTc4LDEzICs3OCw2IEBAIHZvaWQg c2hhZG93X2ZpbmFsX3RlYXJkb3duKHN0cnVjdCBkb21haW4NCiAvKiBNYXJrIGEgcGFnZSBhcyBk aXJ0eSBpbiB0aGUgbG9nLWRpcnR5IGJpdG1hcDogY2FsbGVkIHdoZW4gWGVuIA0KICAqIG1ha2Vz IGNoYW5nZXMgdG8gZ3Vlc3QgbWVtb3J5IG9uIGl0cyBiZWhhbGYuICovDQogdm9pZCBzaF9tYXJr X2RpcnR5KHN0cnVjdCBkb21haW4gKmQsIG1mbl90IGdtZm4pOw0KLS8qIENsZWFuZXIgdmVyc2lv biBzbyB3ZSBkb24ndCBwZXBwZXIgc2hhZG93X21vZGUgdGVzdHMgYWxsIG92ZXIgdGhlIHBsYWNl ICovDQotc3RhdGljIGlubGluZSB2b2lkIG1hcmtfZGlydHkoc3RydWN0IGRvbWFpbiAqZCwgdW5z aWduZWQgbG9uZyBnbWZuKQ0KLXsNCi0gICAgaWYgKCB1bmxpa2VseShzaGFkb3dfbW9kZV9sb2df ZGlydHkoZCkpICkNCi0gICAgICAgIC8qIFNlZSB0aGUgY29tbWVudCBhYm91dCBsb2NraW5nIGlu IHNoX21hcmtfZGlydHkgKi8NCi0gICAgICAgIHNoX21hcmtfZGlydHkoZCwgX21mbihnbWZuKSk7 DQotfQ0KIA0KIC8qIFVwZGF0ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IGFyZSBkZXJpdmVkIGZyb20g dGhlIGd1ZXN0J3MgQ1IwL0NSMy9DUjQuDQogICogQ2FsbGVkIHRvIGluaXRpYWxpemUgcGFnaW5n IHN0cnVjdHVyZXMgaWYgdGhlIHBhZ2luZyBtb2RlDQo= ------_=_NextPart_001_01C7A45E.431ACF26 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel ------_=_NextPart_001_01C7A45E.431ACF26-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tim Deegan Subject: Re: [RFC] Nested Paging Live Migration Date: Fri, 1 Jun 2007 17:17:26 +0100 Message-ID: <20070601161726.GB16995@york.uk.xensource.com> References: <7D748C767B7FA541A8AC5504A4C89A23030EF9B2@SAUSEXMB2.amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Return-path: Content-Disposition: inline In-Reply-To: <7D748C767B7FA541A8AC5504A4C89A23030EF9B2@SAUSEXMB2.amd.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "Huang2, Wei" Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Hi, Thanks for this patch. At 10:05 -0500 on 01 Jun (1180692316), Huang2, Wei wrote: > The attached file supports AMD-V nested paging live migration. Please > comment. I will create an updated version after collecting feedbacks. Can a lot more log-dirty code (bitmap allocation, clearing, reporting) be made common? E.g.: hap_mark_dirty() is virtually identical to sh_mark_dirty() -- including some recursive locking and associated comments that are not true in HAP modes. Maybe give it its own lock to cover bit-setting? Probably only the code for clearing the bitmap (i.e., resetting the trap that will cause us to mark pages dirty) needs to be split out. > The following areas require special attention: > 1. paging_mark_dirty() > Currently, paging_mark_dirty() dispatches to sh_mark_dirty() or > hap_mark_dirty() based on paging support. I personally prefer a function > pointer. However, current paging interface only provides a function > pointer for vcpu-level functions, not for domain-level functions. This > is a bit annoying. Make it a common function and that should go away. > 2. locking in p2m_set_l1e_flags() > p2m_set_l1e_flags(), which is invoked by hap.c, calls > hap_write_p2m_entry(). hap_lock() is called twice. I currently remove > hap_lock() in hap_write_p2m_entry(). A better solution is needed here. Hmm. Since you don't ever change the monitor table of a HAP domain, it might be possible to make hap_write_p2m_entry (and hap.c:p2m_install_entry_in_monitors()) safe without locking. It is worth noting that this would be a different locking discipline from the one used in shadow code -- code paths that take both the p2m lock and the shadow lock always take the p2m lock first (there are some convolutions in shadow init routines etc to make sure this is true). If the hap lock is to be taken before the p2m lock that will need some care and attention in the rest of the code. > +int p2m_set_l1e_flags(struct domain *d, u32 l1e_flags) > +{ [...] > + for ( entry = d->page_list.next; > + entry != &d->page_list; > + entry = entry->next ) > + { Why not just walk the p2m? It shouldn't be very sparse. > +/* This function handles P2M page faults by fixing l1e flags with correct > + * values. It also calls paging_mark_dirty() function to record the dirty > + * pages. > + */ > +int p2m_fix_table(struct domain *d, paddr_t gpa) Can this have a better name? It's not really fixing anything. Maybe have this be p2m_set_flags() and the previous function be p2m_set_flags_global()? Also maybe the call to mark_dirty could be made from the SVM code, which is where we're really handling the write? Cheers, Tim. -- Tim Deegan , XenSource UK Limited Registered office c/o EC2Y 5EB, UK; company number 05334508 From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Wei Huang" Subject: Re: [RFC] Nested Paging Live Migration Date: Tue, 05 Jun 2007 23:29:24 -0500 Message-ID: <46663824.6030200@amd.com> References: <7D748C767B7FA541A8AC5504A4C89A23030EF9B2@SAUSEXMB2.amd.com> <20070601161726.GB16995@york.uk.xensource.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=------------000604050005070008040902 Return-path: In-Reply-To: <20070601161726.GB16995@york.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Tim Deegan Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------000604050005070008040902 Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Transfer-Encoding: 7bit Retry. 1. Most common code are moved from shadow to paging: * log dirty related fields (dirty_count ...) are moved to paging_domain * log_dirty_bitmap allocation, free, peek, and clean * mark_dirty_page becomes a common function too * a new lock dirty lock is created to guard these code 2. shadow/hap_log_dirty_enable() and shadow/hap_log_dirty_disable() These four functions were not changed. However, I really want to create two common functions (paging_log_dirty_disable() and paging_log_dirty_enable()) for them. To do this, it requires two function pointers (*log_dirty_enable() and *log_dirty_disable()), which point to shadow-specific code or hap-specific code. For example, *log_dirty_enable() points to shadow_log_dirty_enable(). Tim, let me know if you like this approach. 3. p2m_set_l1e_flags() is renamed to p2m_set_flags_global() as requested. It does NOT walk P2M. Instead, it still relies on set_p2m_entry() to walk P2M table. The reason: I feel uncomfortable to duplicate the code of set_p2m_entry() in this method. Most of them will be same as set_p2m_entry() and p2m_next_level(). What is your opinion? Any comments is welcome. I will create a new patch after collecting them. Thanks, -Wei Tim Deegan wrote: > Hi, > > Thanks for this patch. > > At 10:05 -0500 on 01 Jun (1180692316), Huang2, Wei wrote: > > The attached file supports AMD-V nested paging live migration. Please > > comment. I will create an updated version after collecting feedbacks. > > Can a lot more log-dirty code (bitmap allocation, clearing, reporting) > be made common? E.g.: hap_mark_dirty() is virtually identical to > sh_mark_dirty() -- including some recursive locking and associated > comments that are not true in HAP modes. Maybe give it its own lock to > cover bit-setting? Probably only the code for clearing the bitmap > (i.e., resetting the trap that will cause us to mark pages dirty) needs > to be split out. > > > The following areas require special attention: > > 1. paging_mark_dirty() > > Currently, paging_mark_dirty() dispatches to sh_mark_dirty() or > > hap_mark_dirty() based on paging support. I personally prefer a function > > pointer. However, current paging interface only provides a function > > pointer for vcpu-level functions, not for domain-level functions. This > > is a bit annoying. > > Make it a common function and that should go away. > > > 2. locking in p2m_set_l1e_flags() > > p2m_set_l1e_flags(), which is invoked by hap.c, calls > > hap_write_p2m_entry(). hap_lock() is called twice. I currently remove > > hap_lock() in hap_write_p2m_entry(). A better solution is needed here. > > Hmm. Since you don't ever change the monitor table of a HAP domain, it > might be possible to make hap_write_p2m_entry (and > hap.c:p2m_install_entry_in_monitors()) safe without locking. > > It is worth noting that this would be a different locking discipline > from the one used in shadow code -- code paths that take both the p2m > lock and the shadow lock always take the p2m lock first (there are some > convolutions in shadow init routines etc to make sure this is true). > If the hap lock is to be taken before the p2m lock that will need some > care and attention in the rest of the code. > > > > +/* This function handles P2M page faults by fixing l1e flags with > correct > > + * values. It also calls paging_mark_dirty() function to record the > dirty > > + * pages. > > + */ > > +int p2m_fix_table(struct domain *d, paddr_t gpa) > > Can this have a better name? It's not really fixing anything. Maybe > have this be p2m_set_flags() and the previous function be > p2m_set_flags_global()? > > Also maybe the call to mark_dirty could be made from the SVM code, which > is where we're really handling the write? > > Cheers, > > Tim. > > -- > Tim Deegan , XenSource UK Limited > Registered office c/o EC2Y 5EB, UK; company number 05334508 > > --------------000604050005070008040902 Content-Type: text/plain; name=npt_live_migration_RFC_2.txt Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename=npt_live_migration_RFC_2.txt diff -r 7ab0527484c8 xen/arch/x86/hvm/hvm.c --- a/xen/arch/x86/hvm/hvm.c Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/arch/x86/hvm/hvm.c Tue Jun 05 04:35:27 2007 -0500 @@ -568,7 +568,7 @@ static int __hvm_copy(void *buf, paddr_t if ( dir ) { memcpy(p, buf, count); /* dir == TRUE: *to* guest */ - mark_dirty(current->domain, mfn); + paging_mark_dirty(current->domain, mfn); } else memcpy(buf, p, count); /* dir == FALSE: *from guest */ diff -r 7ab0527484c8 xen/arch/x86/hvm/io.c --- a/xen/arch/x86/hvm/io.c Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/arch/x86/hvm/io.c Tue Jun 05 04:35:45 2007 -0500 @@ -865,7 +865,7 @@ void hvm_io_assist(void) if ( (p->dir == IOREQ_READ) && p->data_is_ptr ) { gmfn = get_mfn_from_gpfn(paging_gva_to_gfn(v, p->data)); - mark_dirty(d, gmfn); + paging_mark_dirty(d, gmfn); } out: diff -r 7ab0527484c8 xen/arch/x86/hvm/svm/svm.c --- a/xen/arch/x86/hvm/svm/svm.c Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/arch/x86/hvm/svm/svm.c Tue Jun 05 11:50:28 2007 -0500 @@ -1028,13 +1028,16 @@ int start_svm(struct cpuinfo_x86 *c) static int svm_do_nested_pgfault(paddr_t gpa, struct cpu_user_regs *regs) { + struct domain *d; + if (mmio_space(gpa)) { handle_mmio(gpa); return 1; } - /* We should not reach here. Otherwise, P2M table is not correct.*/ - return 0; + d = current->domain; + paging_mark_dirty(d, get_mfn_from_gpfn(gpa >> PAGE_SHIFT)); + return p2m_set_flags(d, gpa, __PAGE_HYPERVISOR|_PAGE_USER); } static void svm_do_no_device_fault(struct vmcb_struct *vmcb) diff -r 7ab0527484c8 xen/arch/x86/mm.c --- a/xen/arch/x86/mm.c Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/arch/x86/mm.c Tue Jun 05 04:34:56 2007 -0500 @@ -1556,7 +1556,7 @@ int alloc_page_type(struct page_info *pa /* A page table is dirtied when its type count becomes non-zero. */ if ( likely(owner != NULL) ) - mark_dirty(owner, page_to_mfn(page)); + paging_mark_dirty(owner, page_to_mfn(page)); switch ( type & PGT_type_mask ) { @@ -1602,7 +1602,7 @@ void free_page_type(struct page_info *pa if ( unlikely(paging_mode_enabled(owner)) ) { /* A page table is dirtied when its type count becomes zero. */ - mark_dirty(owner, page_to_mfn(page)); + paging_mark_dirty(owner, page_to_mfn(page)); if ( shadow_mode_refcounts(owner) ) return; @@ -2057,7 +2057,7 @@ int do_mmuext_op( } /* A page is dirtied when its pin status is set. */ - mark_dirty(d, mfn); + paging_mark_dirty(d, mfn); /* We can race domain destruction (domain_relinquish_resources). */ if ( unlikely(this_cpu(percpu_mm_info).foreign != NULL) ) @@ -2089,7 +2089,7 @@ int do_mmuext_op( put_page_and_type(page); put_page(page); /* A page is dirtied when its pin status is cleared. */ - mark_dirty(d, mfn); + paging_mark_dirty(d, mfn); } else { @@ -2424,7 +2424,7 @@ int do_mmu_update( set_gpfn_from_mfn(mfn, gpfn); okay = 1; - mark_dirty(FOREIGNDOM, mfn); + paging_mark_dirty(FOREIGNDOM, mfn); put_page(mfn_to_page(mfn)); break; @@ -3005,7 +3005,7 @@ long do_update_descriptor(u64 pa, u64 de break; } - mark_dirty(dom, mfn); + paging_mark_dirty(dom, mfn); /* All is good so make the update. */ gdt_pent = map_domain_page(mfn); diff -r 7ab0527484c8 xen/arch/x86/mm/hap/hap.c --- a/xen/arch/x86/mm/hap/hap.c Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/arch/x86/mm/hap/hap.c Tue Jun 05 16:37:53 2007 -0500 @@ -385,6 +385,56 @@ void hap_destroy_monitor_table(struct vc } /************************************************/ +/* HAP LOG DIRTY SUPPORT */ +/************************************************/ +int hap_log_dirty_enable(struct domain *d) +{ + int ret; + + domain_pause(d); + hap_lock(d); + + ret = paging_alloc_log_dirty_bitmap(d); + if ( ret != 0 ) + { + paging_free_log_dirty_bitmap(d); + goto out; + } + + /* turn on PG_log_dirty bit in paging mode */ + d->arch.paging.mode |= PG_log_dirty; + + /* mark physical memory as not writable */ + p2m_set_flags_global(d, (_PAGE_PRESENT|_PAGE_USER)); + flush_tlb_all_pge(); + + out: + hap_unlock(d); + domain_unpause(d); + + return ret; +} + +int hap_log_dirty_disable(struct domain *d) +{ + domain_pause(d); + hap_lock(d); + if ( paging_mode_log_dirty(d) ) + paging_free_log_dirty_bitmap(d); + + /* turn off PG_log_dirty bit in paging mode */ + d->arch.paging.mode &= ~PG_log_dirty; + + /* recover P2M table to normal mode */ + p2m_set_flags_global(d, __PAGE_HYPERVISOR|_PAGE_USER); + + hap_unlock(d); + domain_unpause(d); + + return 1; +} + +/************************************************/ /* HAP DOMAIN LEVEL FUNCTIONS */ /************************************************/ void hap_domain_init(struct domain *d) @@ -498,12 +548,16 @@ int hap_domctl(struct domain *d, xen_dom HERE_I_AM; - if ( unlikely(d == current->domain) ) { - gdprintk(XENLOG_INFO, "Don't try to do a hap op on yourself!\n"); - return -EINVAL; - } - switch ( sc->op ) { + case XEN_DOMCTL_SHADOW_OP_OFF: + if ( paging_mode_log_dirty(d) ) + if ( (rc = hap_log_dirty_disable(d)) != 0 ) + return rc; + return 0; + + case XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY: + return hap_log_dirty_enable(d); + case XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION: hap_lock(d); rc = hap_set_allocation(d, sc->mb << (20 - PAGE_SHIFT), &preempted); diff -r 7ab0527484c8 xen/arch/x86/mm/p2m.c --- a/xen/arch/x86/mm/p2m.c Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/arch/x86/mm/p2m.c Tue Jun 05 11:41:29 2007 -0500 @@ -169,7 +169,7 @@ p2m_next_level(struct domain *d, mfn_t * // Returns 0 on error (out of memory) static int -set_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn) +set_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn, u32 l1e_flags) { // XXX -- this might be able to be faster iff current->domain == d mfn_t table_mfn = pagetable_get_mfn(d->arch.phys_table); @@ -213,7 +213,7 @@ set_p2m_entry(struct domain *d, unsigned d->arch.p2m.max_mapped_pfn = gfn; if ( mfn_valid(mfn) ) - entry_content = l1e_from_pfn(mfn_x(mfn), __PAGE_HYPERVISOR|_PAGE_USER); + entry_content = l1e_from_pfn(mfn_x(mfn), l1e_flags); else entry_content = l1e_empty(); @@ -278,7 +278,7 @@ int p2m_alloc_table(struct domain *d, p2m_unlock(d); return -ENOMEM; } -list_add_tail(&p2m_top->list, &d->arch.p2m.pages); + list_add_tail(&p2m_top->list, &d->arch.p2m.pages); p2m_top->count_info = 1; p2m_top->u.inuse.type_info = @@ -297,8 +297,8 @@ list_add_tail(&p2m_top->list, &d->arch.p /* Initialise physmap tables for slot zero. Other code assumes this. */ gfn = 0; -mfn = _mfn(INVALID_MFN); - if ( !set_p2m_entry(d, gfn, mfn) ) + mfn = _mfn(INVALID_MFN); + if ( !set_p2m_entry(d, gfn, mfn, __PAGE_HYPERVISOR|_PAGE_USER) ) goto error; for ( entry = d->page_list.next; @@ -316,7 +316,7 @@ mfn = _mfn(INVALID_MFN); (gfn != 0x55555555L) #endif && gfn != INVALID_M2P_ENTRY - && !set_p2m_entry(d, gfn, mfn) ) + && !set_p2m_entry(d, gfn, mfn, __PAGE_HYPERVISOR|_PAGE_USER) ) goto error; } @@ -626,7 +626,7 @@ p2m_remove_page(struct domain *d, unsign ASSERT(mfn_x(gfn_to_mfn(d, gfn)) == mfn); //ASSERT(mfn_to_gfn(d, mfn) == gfn); - set_p2m_entry(d, gfn, _mfn(INVALID_MFN)); + set_p2m_entry(d, gfn, _mfn(INVALID_MFN), __PAGE_HYPERVISOR|_PAGE_USER); set_gpfn_from_mfn(mfn, INVALID_M2P_ENTRY); } @@ -659,7 +659,7 @@ guest_physmap_add_page(struct domain *d, omfn = gfn_to_mfn(d, gfn); if ( mfn_valid(omfn) ) { - set_p2m_entry(d, gfn, _mfn(INVALID_MFN)); + set_p2m_entry(d, gfn, _mfn(INVALID_MFN), __PAGE_HYPERVISOR|_PAGE_USER); set_gpfn_from_mfn(mfn_x(omfn), INVALID_M2P_ENTRY); } @@ -685,13 +685,81 @@ guest_physmap_add_page(struct domain *d, } } - set_p2m_entry(d, gfn, _mfn(mfn)); + set_p2m_entry(d, gfn, _mfn(mfn), __PAGE_HYPERVISOR|_PAGE_USER); set_gpfn_from_mfn(mfn, gfn); audit_p2m(d); p2m_unlock(d); } +/* This function goes through P2M table and modify l1e flags of all pages. Note + * that physical base address of l1e is intact. This function can be used for + * special purpose, such as marking physical memory as Not-Writable for + * tracking dirty pages during live migration. + */ +int p2m_set_flags_global(struct domain *d, u32 l1e_flags) +{ + mfn_t mfn; + struct list_head *entry; + struct page_info *page; + unsigned long gfn; + + p2m_lock(d); + + if ( pagetable_get_pfn(d->arch.phys_table) == 0 ) + { + P2M_ERROR("p2m table has not been allocated for this domain yet!\n"); + p2m_unlock(d); + return -EINVAL; + } + + for ( entry = d->page_list.next; + entry != &d->page_list; + entry = entry->next ) + { + page = list_entry(entry, struct page_info, list); + mfn = page_to_mfn(page); + gfn = get_gpfn_from_mfn(mfn_x(mfn)); + if ( +#ifdef __x86_64__ + (gfn != 0x5555555555555555L) +#else + (gfn != 0x55555555L) +#endif + && gfn != INVALID_M2P_ENTRY + && !set_p2m_entry(d, gfn, mfn, l1e_flags) ) + goto error; + } + + p2m_unlock(d); + return 0; + + error: + P2M_PRINTK("failed to change l1e flags of p2m table, gfn=%05lx, mfn=%" + PRI_mfn "\n", gfn, mfn_x(mfn)); + p2m_unlock(d); + return -ENOMEM; +} + +/* This function goes through p2M table and modifies l1e flags of a specific + * gpa. + */ +int p2m_set_flags(struct domain *d, paddr_t gpa, u32 l1e_flags) +{ + unsigned long gfn; + mfn_t mfn; + + p2m_lock(d); + + gfn = gpa >> PAGE_SHIFT; + mfn = gfn_to_mfn(d, gfn); + if ( mfn_valid(mfn) ) + set_p2m_entry(d, gfn, mfn, l1e_flags); + + p2m_unlock(d); + + return 1; +} /* * Local variables: diff -r 7ab0527484c8 xen/arch/x86/mm/paging.c --- a/xen/arch/x86/mm/paging.c Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/arch/x86/mm/paging.c Tue Jun 05 17:20:34 2007 -0500 @@ -25,6 +25,15 @@ #include #include #include +#include + +/* Override macros from asm/page.h to make them work with mfn_t */ +#undef mfn_to_page +#define mfn_to_page(_m) (frame_table + mfn_x(_m)) +#undef mfn_valid +#define mfn_valid(_mfn) (mfn_x(_mfn) < max_page) +#undef page_to_mfn +#define page_to_mfn(_pg) (_mfn((_pg) - frame_table)) /* Xen command-line option to enable hardware-assisted paging */ int opt_hap_enabled; @@ -42,10 +51,200 @@ boolean_param("hap", opt_hap_enabled); } while (0) +/* log dirty mode lock */ +#define log_dirty_lock_init(_d) \ + do { \ + spin_lock_init(&(_d)->arch.paging.log_dirty_lock); \ + (_d)->arch.paging.log_dirty_locker = -1; \ + (_d)->arch.paging.log_dirty_locker_function = "nobody"; \ + } while (0) + +#define log_dirty_lock(_d) \ + do { \ + if (unlikely((_d)->arch.paging.log_dirty_locker==current->processor))\ + { \ + printk("Error: paging log dirty lock held by %s\n", \ + (_d)->arch.paging.log_dirty_locker_function); \ + BUG(); \ + } \ + spin_lock(&(_d)->arch.paging.log_dirty_lock); \ + ASSERT((_d)->arch.paging.log_dirty_locker == -1); \ + (_d)->arch.paging.log_dirty_locker = current->processor; \ + (_d)->arch.paging.log_dirty_locker_function = __func__; \ + } while (0) + +#define log_dirty_unlock(_d) \ + do { \ + ASSERT((_d)->arch.paging.log_dirty_locker == current->processor); \ + (_d)->arch.paging.log_dirty_locker = -1; \ + (_d)->arch.paging.log_dirty_locker_function = "nobody"; \ + spin_unlock(&(_d)->arch.paging.log_dirty_lock); \ + } while (0) + + +int paging_alloc_log_dirty_bitmap(struct domain *d) +{ + ASSERT(d->arch.paging.dirty_bitmap == NULL); + d->arch.paging.dirty_bitmap_size = + (domain_get_maximum_gpfn(d) + BITS_PER_LONG) & ~(BITS_PER_LONG - 1); + d->arch.paging.dirty_bitmap = + xmalloc_array(unsigned long, + d->arch.paging.dirty_bitmap_size / BITS_PER_LONG); + if ( d->arch.paging.dirty_bitmap == NULL ) + { + d->arch.paging.dirty_bitmap_size = 0; + return -ENOMEM; + } + memset(d->arch.paging.dirty_bitmap, 0, + d->arch.paging.dirty_bitmap_size/8); + + return 0; +} + +void paging_free_log_dirty_bitmap(struct domain *d) +{ + d->arch.paging.dirty_bitmap_size = 0; + if ( d->arch.paging.dirty_bitmap ) + { + xfree(d->arch.paging.dirty_bitmap); + d->arch.paging.dirty_bitmap = NULL; + } +} + +/* Mark a page as dirty */ +void paging_mark_dirty(struct domain *d, unsigned long guest_mfn) +{ + unsigned long pfn; + mfn_t gmfn; + + gmfn = _mfn(guest_mfn); + + if ( !paging_mode_log_dirty(d) || !mfn_valid(gmfn) ) + return; + + log_dirty_lock(d); + + ASSERT(d->arch.paging.dirty_bitmap != NULL); + + /* We /really/ mean PFN here, even for non-translated guests. */ + pfn = get_gpfn_from_mfn(mfn_x(gmfn)); + + /* + * Values with the MSB set denote MFNs that aren't really part of the + * domain's pseudo-physical memory map (e.g., the shared info frame). + * Nothing to do here... + */ + if ( unlikely(!VALID_M2P(pfn)) ) + return; + + /* N.B. Can use non-atomic TAS because protected by shadow_lock. */ + if ( likely(pfn < d->arch.paging.dirty_bitmap_size) ) + { + if ( !__test_and_set_bit(pfn, d->arch.paging.dirty_bitmap) ) + { + PAGING_DEBUG(LOGDIRTY, + "marked mfn %" PRI_mfn " (pfn=%lx), dom %d\n", + mfn_x(gmfn), pfn, d->domain_id); + d->arch.paging.dirty_count++; + } + } + else + { + PAGING_PRINTK("mark_dirty OOR! " + "mfn=%" PRI_mfn " pfn=%lx max=%x (dom %d)\n" + "owner=%d c=%08x t=%" PRtype_info "\n", + mfn_x(gmfn), + pfn, + d->arch.paging.dirty_bitmap_size, + d->domain_id, + (page_get_owner(mfn_to_page(gmfn)) + ? page_get_owner(mfn_to_page(gmfn))->domain_id + : -1), + mfn_to_page(gmfn)->count_info, + mfn_to_page(gmfn)->u.inuse.type_info); + } + + log_dirty_unlock(d); +} + +/* Read a domain's log-dirty bitmap and stats. If the operation is a CLEAN, + * clear the bitmap and stats as well. */ +int paging_log_dirty_op(struct domain *d, struct xen_domctl_shadow_op *sc) +{ + int i, rv = 0, clean = 0, peek = 1; + + domain_pause(d); + log_dirty_lock(d); + + clean = (sc->op == XEN_DOMCTL_SHADOW_OP_CLEAN); + + PAGING_DEBUG(LOGDIRTY, "log-dirty %s: dom %u faults=%u dirty=%u\n", + (clean) ? "clean" : "peek", + d->domain_id, + d->arch.paging.fault_count, + d->arch.paging.dirty_count); + + sc->stats.fault_count = d->arch.paging.fault_count; + sc->stats.dirty_count = d->arch.paging.dirty_count; + + if ( clean ) + { + /* Further operations are required for XEN_DOMCTL_SHADOW_OP_CLEAN. We + * dispatch to next-level log_dirty functions based on paging mode */ + if ( !paging_mode_hap(d) ) + shadow_log_dirty_op_clean(d); + + d->arch.paging.fault_count = 0; + d->arch.paging.dirty_count = 0; + } + + if ( guest_handle_is_null(sc->dirty_bitmap) ) + /* caller may have wanted just to clean the state or access stats. */ + peek = 0; + + if ( (peek || clean) && (d->arch.paging.dirty_bitmap == NULL) ) + { + rv = -EINVAL; /* perhaps should be ENOMEM? */ + goto out; + } + + if ( sc->pages > d->arch.paging.dirty_bitmap_size ) + sc->pages = d->arch.paging.dirty_bitmap_size; + +#define CHUNK (8*1024) /* Transfer and clear in 1kB chunks for L1 cache. */ + for ( i = 0; i < sc->pages; i += CHUNK ) + { + int bytes = ((((sc->pages - i) > CHUNK) + ? CHUNK + : (sc->pages - i)) + 7) / 8; + + if ( likely(peek) ) + { + if ( copy_to_guest_offset( + sc->dirty_bitmap, i/8, + (uint8_t *)d->arch.paging.dirty_bitmap + (i/8), bytes) ) + { + rv = -EFAULT; + goto out; + } + } + + if ( clean ) + memset((uint8_t *)d->arch.paging.dirty_bitmap + (i/8), 0, bytes); + } +#undef CHUNK + + out: + log_dirty_unlock(d); + domain_unpause(d); + return rv; +} + /* Domain paging struct initialization. */ void paging_domain_init(struct domain *d) { p2m_init(d); + log_dirty_lock_init(d); shadow_domain_init(d); if ( opt_hap_enabled && is_hvm_domain(d) ) @@ -65,11 +264,40 @@ int paging_domctl(struct domain *d, xen_ int paging_domctl(struct domain *d, xen_domctl_shadow_op_t *sc, XEN_GUEST_HANDLE(void) u_domctl) { - /* Here, dispatch domctl to the appropriate paging code */ - if ( opt_hap_enabled && is_hvm_domain(d) ) - return hap_domctl(d, sc, u_domctl); - else - return shadow_domctl(d, sc, u_domctl); + if ( unlikely(d == current->domain) ) + { + gdprintk(XENLOG_INFO, "Dom %u tried to do a paging op on itself.\n", + d->domain_id); + return -EINVAL; + } + + if ( unlikely(d->is_dying) ) + { + gdprintk(XENLOG_INFO, "Ignoring paging op on dying domain %u\n", + d->domain_id); + return 0; + } + + if ( unlikely(d->vcpu[0] == NULL) ) + { + PAGING_ERROR("Paging op on a domain (%u) with no vcpus\n", + d->domain_id); + return -EINVAL; + } + + switch ( sc->op ) + { + case XEN_DOMCTL_SHADOW_OP_CLEAN: + case XEN_DOMCTL_SHADOW_OP_PEEK: + return paging_log_dirty_op(d, sc); + + default: + /* Dispatch other domctl operations to the appropriate paging code */ + if ( opt_hap_enabled && is_hvm_domain(d) ) + return hap_domctl(d, sc, u_domctl); + else + return shadow_domctl(d, sc, u_domctl); + } } /* Call when destroying a domain */ diff -r 7ab0527484c8 xen/arch/x86/mm/shadow/common.c --- a/xen/arch/x86/mm/shadow/common.c Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/arch/x86/mm/shadow/common.c Tue Jun 05 17:20:34 2007 -0500 @@ -87,8 +87,6 @@ __initcall(shadow_audit_key_init); __initcall(shadow_audit_key_init); #endif /* SHADOW_AUDIT */ -static void sh_free_log_dirty_bitmap(struct domain *d); - int _shadow_mode_refcounts(struct domain *d) { return shadow_mode_refcounts(d); @@ -541,7 +539,7 @@ sh_validate_guest_entry(struct vcpu *v, int result = 0; struct page_info *page = mfn_to_page(gmfn); - sh_mark_dirty(v->domain, gmfn); + paging_mark_dirty(v->domain, mfn_x(gmfn)); // Determine which types of shadows are affected, and update each. // @@ -2565,7 +2563,7 @@ void shadow_teardown(struct domain *d) if (d->arch.paging.shadow.hash_table) shadow_hash_teardown(d); /* Release the log-dirty bitmap of dirtied pages */ - sh_free_log_dirty_bitmap(d); + paging_free_log_dirty_bitmap(d); /* Should not have any more memory held */ SHADOW_PRINTK("teardown done." " Shadow pages total = %u, free = %u, p2m=%u\n", @@ -2724,37 +2722,6 @@ static int shadow_test_disable(struct do return ret; } -static int -sh_alloc_log_dirty_bitmap(struct domain *d) -{ - ASSERT(d->arch.paging.shadow.dirty_bitmap == NULL); - d->arch.paging.shadow.dirty_bitmap_size = - (domain_get_maximum_gpfn(d) + BITS_PER_LONG) & ~(BITS_PER_LONG - 1); - d->arch.paging.shadow.dirty_bitmap = - xmalloc_array(unsigned long, - d->arch.paging.shadow.dirty_bitmap_size / BITS_PER_LONG); - if ( d->arch.paging.shadow.dirty_bitmap == NULL ) - { - d->arch.paging.shadow.dirty_bitmap_size = 0; - return -ENOMEM; - } - memset(d->arch.paging.shadow.dirty_bitmap, 0, - d->arch.paging.shadow.dirty_bitmap_size/8); - - return 0; -} - -static void -sh_free_log_dirty_bitmap(struct domain *d) -{ - d->arch.paging.shadow.dirty_bitmap_size = 0; - if ( d->arch.paging.shadow.dirty_bitmap ) - { - xfree(d->arch.paging.shadow.dirty_bitmap); - d->arch.paging.shadow.dirty_bitmap = NULL; - } -} - static int shadow_log_dirty_enable(struct domain *d) { int ret; @@ -2784,16 +2751,16 @@ static int shadow_log_dirty_enable(struc d->arch.paging.shadow.opt_flags = SHOPT_LINUX_L3_TOPLEVEL; #endif - ret = sh_alloc_log_dirty_bitmap(d); + ret = paging_alloc_log_dirty_bitmap(d); if ( ret != 0 ) { - sh_free_log_dirty_bitmap(d); + paging_free_log_dirty_bitmap(d); goto out; } ret = shadow_one_bit_enable(d, PG_log_dirty); if ( ret != 0 ) - sh_free_log_dirty_bitmap(d); + paging_free_log_dirty_bitmap(d); out: shadow_unlock(d); @@ -2809,11 +2776,21 @@ static int shadow_log_dirty_disable(stru shadow_lock(d); ret = shadow_one_bit_disable(d, PG_log_dirty); if ( !shadow_mode_log_dirty(d) ) - sh_free_log_dirty_bitmap(d); + paging_free_log_dirty_bitmap(d); shadow_unlock(d); domain_unpause(d); return ret; +} + +void shadow_log_dirty_op_clean(struct domain *d) +{ + /* Need to revoke write access to the domain's pages again. + * In future, we'll have a less heavy-handed approach to this, + * but for now, we just unshadow everything except Xen. */ + shadow_lock(d); + shadow_blow_tables(d); + shadow_unlock(d); } /**************************************************************************/ @@ -2892,150 +2869,6 @@ void shadow_convert_to_log_dirty(struct BUG(); } - -/* Read a domain's log-dirty bitmap and stats. - * If the operation is a CLEAN, clear the bitmap and stats as well. */ -static int shadow_log_dirty_op( - struct domain *d, struct xen_domctl_shadow_op *sc) -{ - int i, rv = 0, clean = 0, peek = 1; - - domain_pause(d); - shadow_lock(d); - - clean = (sc->op == XEN_DOMCTL_SHADOW_OP_CLEAN); - - SHADOW_DEBUG(LOGDIRTY, "log-dirty %s: dom %u faults=%u dirty=%u\n", - (clean) ? "clean" : "peek", - d->domain_id, - d->arch.paging.shadow.fault_count, - d->arch.paging.shadow.dirty_count); - - sc->stats.fault_count = d->arch.paging.shadow.fault_count; - sc->stats.dirty_count = d->arch.paging.shadow.dirty_count; - - if ( clean ) - { - /* Need to revoke write access to the domain's pages again. - * In future, we'll have a less heavy-handed approach to this, - * but for now, we just unshadow everything except Xen. */ - shadow_blow_tables(d); - - d->arch.paging.shadow.fault_count = 0; - d->arch.paging.shadow.dirty_count = 0; - } - - if ( guest_handle_is_null(sc->dirty_bitmap) ) - /* caller may have wanted just to clean the state or access stats. */ - peek = 0; - - if ( (peek || clean) && (d->arch.paging.shadow.dirty_bitmap == NULL) ) - { - rv = -EINVAL; /* perhaps should be ENOMEM? */ - goto out; - } - - if ( sc->pages > d->arch.paging.shadow.dirty_bitmap_size ) - sc->pages = d->arch.paging.shadow.dirty_bitmap_size; - -#define CHUNK (8*1024) /* Transfer and clear in 1kB chunks for L1 cache. */ - for ( i = 0; i < sc->pages; i += CHUNK ) - { - int bytes = ((((sc->pages - i) > CHUNK) - ? CHUNK - : (sc->pages - i)) + 7) / 8; - - if ( likely(peek) ) - { - if ( copy_to_guest_offset( - sc->dirty_bitmap, i/8, - (uint8_t *)d->arch.paging.shadow.dirty_bitmap + (i/8), bytes) ) - { - rv = -EFAULT; - goto out; - } - } - - if ( clean ) - memset((uint8_t *)d->arch.paging.shadow.dirty_bitmap + (i/8), 0, bytes); - } -#undef CHUNK - - out: - shadow_unlock(d); - domain_unpause(d); - return rv; -} - - -/* Mark a page as dirty */ -void sh_mark_dirty(struct domain *d, mfn_t gmfn) -{ - unsigned long pfn; - int do_locking; - - if ( !shadow_mode_log_dirty(d) || !mfn_valid(gmfn) ) - return; - - /* Although this is an externally visible function, we do not know - * whether the shadow lock will be held when it is called (since it - * can be called from __hvm_copy during emulation). - * If the lock isn't held, take it for the duration of the call. */ - do_locking = !shadow_locked_by_me(d); - if ( do_locking ) - { - shadow_lock(d); - /* Check the mode again with the lock held */ - if ( unlikely(!shadow_mode_log_dirty(d)) ) - { - shadow_unlock(d); - return; - } - } - - ASSERT(d->arch.paging.shadow.dirty_bitmap != NULL); - - /* We /really/ mean PFN here, even for non-translated guests. */ - pfn = get_gpfn_from_mfn(mfn_x(gmfn)); - - /* - * Values with the MSB set denote MFNs that aren't really part of the - * domain's pseudo-physical memory map (e.g., the shared info frame). - * Nothing to do here... - */ - if ( unlikely(!VALID_M2P(pfn)) ) - return; - - /* N.B. Can use non-atomic TAS because protected by shadow_lock. */ - if ( likely(pfn < d->arch.paging.shadow.dirty_bitmap_size) ) - { - if ( !__test_and_set_bit(pfn, d->arch.paging.shadow.dirty_bitmap) ) - { - SHADOW_DEBUG(LOGDIRTY, - "marked mfn %" PRI_mfn " (pfn=%lx), dom %d\n", - mfn_x(gmfn), pfn, d->domain_id); - d->arch.paging.shadow.dirty_count++; - } - } - else - { - SHADOW_PRINTK("mark_dirty OOR! " - "mfn=%" PRI_mfn " pfn=%lx max=%x (dom %d)\n" - "owner=%d c=%08x t=%" PRtype_info "\n", - mfn_x(gmfn), - pfn, - d->arch.paging.shadow.dirty_bitmap_size, - d->domain_id, - (page_get_owner(mfn_to_page(gmfn)) - ? page_get_owner(mfn_to_page(gmfn))->domain_id - : -1), - mfn_to_page(gmfn)->count_info, - mfn_to_page(gmfn)->u.inuse.type_info); - } - - if ( do_locking ) shadow_unlock(d); -} - /**************************************************************************/ /* Shadow-control XEN_DOMCTL dispatcher */ @@ -3044,27 +2877,6 @@ int shadow_domctl(struct domain *d, XEN_GUEST_HANDLE(void) u_domctl) { int rc, preempted = 0; - - if ( unlikely(d == current->domain) ) - { - gdprintk(XENLOG_INFO, "Dom %u tried to do a shadow op on itself.\n", - d->domain_id); - return -EINVAL; - } - - if ( unlikely(d->is_dying) ) - { - gdprintk(XENLOG_INFO, "Ignoring shadow op on dying domain %u\n", - d->domain_id); - return 0; - } - - if ( unlikely(d->vcpu[0] == NULL) ) - { - SHADOW_ERROR("Shadow op on a domain (%u) with no vcpus\n", - d->domain_id); - return -EINVAL; - } switch ( sc->op ) { @@ -3085,10 +2897,6 @@ int shadow_domctl(struct domain *d, case XEN_DOMCTL_SHADOW_OP_ENABLE_TRANSLATE: return shadow_enable(d, PG_refcounts|PG_translate); - - case XEN_DOMCTL_SHADOW_OP_CLEAN: - case XEN_DOMCTL_SHADOW_OP_PEEK: - return shadow_log_dirty_op(d, sc); case XEN_DOMCTL_SHADOW_OP_ENABLE: if ( sc->mode & XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY ) diff -r 7ab0527484c8 xen/arch/x86/mm/shadow/multi.c --- a/xen/arch/x86/mm/shadow/multi.c Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/arch/x86/mm/shadow/multi.c Tue Jun 05 04:38:26 2007 -0500 @@ -457,7 +457,7 @@ static u32 guest_set_ad_bits(struct vcpu } /* Set the bit(s) */ - sh_mark_dirty(v->domain, gmfn); + paging_mark_dirty(v->domain, mfn_x(gmfn)); SHADOW_DEBUG(A_AND_D, "gfn = %" SH_PRI_gfn ", " "old flags = %#x, new flags = %#x\n", gfn_x(guest_l1e_get_gfn(*ep)), guest_l1e_get_flags(*ep), @@ -717,7 +717,7 @@ _sh_propagate(struct vcpu *v, if ( unlikely((level == 1) && shadow_mode_log_dirty(d)) ) { if ( ft & FETCH_TYPE_WRITE ) - sh_mark_dirty(d, target_mfn); + paging_mark_dirty(d, mfn_x(target_mfn)); else if ( !sh_mfn_is_dirty(d, target_mfn) ) sflags &= ~_PAGE_RW; } @@ -2856,7 +2856,7 @@ static int sh_page_fault(struct vcpu *v, } perfc_incr(shadow_fault_fixed); - d->arch.paging.shadow.fault_count++; + d->arch.paging.fault_count++; reset_early_unshadow(v); done: @@ -4058,7 +4058,7 @@ sh_x86_emulate_write(struct vcpu *v, uns else reset_early_unshadow(v); - sh_mark_dirty(v->domain, mfn); + paging_mark_dirty(v->domain, mfn_x(mfn)); sh_unmap_domain_page(addr); shadow_audit_tables(v); @@ -4114,7 +4114,7 @@ sh_x86_emulate_cmpxchg(struct vcpu *v, u else reset_early_unshadow(v); - sh_mark_dirty(v->domain, mfn); + paging_mark_dirty(v->domain, mfn_x(mfn)); sh_unmap_domain_page(addr); shadow_audit_tables(v); @@ -4158,7 +4158,7 @@ sh_x86_emulate_cmpxchg8b(struct vcpu *v, else reset_early_unshadow(v); - sh_mark_dirty(v->domain, mfn); + paging_mark_dirty(v->domain, mfn_x(mfn)); sh_unmap_domain_page(addr); shadow_audit_tables(v); diff -r 7ab0527484c8 xen/arch/x86/mm/shadow/private.h --- a/xen/arch/x86/mm/shadow/private.h Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/arch/x86/mm/shadow/private.h Mon Jun 04 17:56:23 2007 -0500 @@ -496,13 +496,13 @@ sh_mfn_is_dirty(struct domain *d, mfn_t { unsigned long pfn; ASSERT(shadow_mode_log_dirty(d)); - ASSERT(d->arch.paging.shadow.dirty_bitmap != NULL); + ASSERT(d->arch.paging.dirty_bitmap != NULL); /* We /really/ mean PFN here, even for non-translated guests. */ pfn = get_gpfn_from_mfn(mfn_x(gmfn)); if ( likely(VALID_M2P(pfn)) - && likely(pfn < d->arch.paging.shadow.dirty_bitmap_size) - && test_bit(pfn, d->arch.paging.shadow.dirty_bitmap) ) + && likely(pfn < d->arch.paging.dirty_bitmap_size) + && test_bit(pfn, d->arch.paging.dirty_bitmap) ) return 1; return 0; diff -r 7ab0527484c8 xen/include/asm-x86/domain.h --- a/xen/include/asm-x86/domain.h Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/include/asm-x86/domain.h Tue Jun 05 04:21:38 2007 -0500 @@ -92,14 +92,6 @@ struct shadow_domain { /* Fast MMIO path heuristic */ int has_fast_mmio_entries; - - /* Shadow log-dirty bitmap */ - unsigned long *dirty_bitmap; - unsigned int dirty_bitmap_size; /* in pages, bit per page */ - - /* Shadow log-dirty mode stats */ - unsigned int fault_count; - unsigned int dirty_count; }; struct shadow_vcpu { @@ -164,6 +156,19 @@ struct paging_domain { /* Other paging assistance code will have structs here */ struct hap_domain hap; + + /* log-dirty lock */ + spinlock_t log_dirty_lock; + int log_dirty_locker; /* processor which holds the lock */ + const char *log_dirty_locker_function; /* func that took it */ + + /* log-dirty bitmap */ + unsigned long *dirty_bitmap; + unsigned int dirty_bitmap_size; /* in pages, bit per page */ + + /* log-dirty mode stats */ + unsigned int fault_count; + unsigned int dirty_count; }; struct paging_vcpu { diff -r 7ab0527484c8 xen/include/asm-x86/grant_table.h --- a/xen/include/asm-x86/grant_table.h Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/include/asm-x86/grant_table.h Tue Jun 05 04:33:38 2007 -0500 @@ -31,7 +31,7 @@ int replace_grant_host_mapping( #define gnttab_shared_gmfn(d, t, i) \ (mfn_to_gmfn(d, gnttab_shared_mfn(d, t, i))) -#define gnttab_mark_dirty(d, f) mark_dirty((d), (f)) +#define gnttab_mark_dirty(d, f) paging_mark_dirty((d), (f)) static inline void gnttab_clear_flag(unsigned long nr, uint16_t *addr) { diff -r 7ab0527484c8 xen/include/asm-x86/p2m.h --- a/xen/include/asm-x86/p2m.h Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/include/asm-x86/p2m.h Tue Jun 05 11:42:54 2007 -0500 @@ -129,6 +129,11 @@ void guest_physmap_remove_page(struct do void guest_physmap_remove_page(struct domain *d, unsigned long gfn, unsigned long mfn); +/* Configure l1e flags of P2M table */ +int p2m_set_flags_global(struct domain *d, u32 flags); + +/* Set P2M l1e flags of a specific page */ +int p2m_set_flags(struct domain *d, paddr_t gpa, u32 flags); #endif /* _XEN_P2M_H */ diff -r 7ab0527484c8 xen/include/asm-x86/paging.h --- a/xen/include/asm-x86/paging.h Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/include/asm-x86/paging.h Tue Jun 05 04:55:23 2007 -0500 @@ -63,6 +63,8 @@ #define paging_mode_translate(_d) ((_d)->arch.paging.mode & PG_translate) #define paging_mode_external(_d) ((_d)->arch.paging.mode & PG_external) +/* flags used for paging debug */ +#define PAGING_DEBUG_LOGDIRTY 0 /****************************************************************************** * The equivalent for a particular vcpu of a shadowed domain. */ @@ -164,6 +166,14 @@ void paging_final_teardown(struct domain * creation. */ int paging_enable(struct domain *d, u32 mode); +/* allocate memory resource for log dirty */ +int paging_alloc_log_dirty_bitmap(struct domain *d); + +/* free memory resource for log dirty */ +void paging_free_log_dirty_bitmap(struct domain *d); + +/* mark a page as dirty page */ +void paging_mark_dirty(struct domain *d, unsigned long guest_mfn); /* Page fault handler * Called from pagefault handler in Xen, and from the HVM trap handlers diff -r 7ab0527484c8 xen/include/asm-x86/shadow.h --- a/xen/include/asm-x86/shadow.h Mon Jun 04 16:46:03 2007 -0500 +++ b/xen/include/asm-x86/shadow.h Tue Jun 05 09:58:00 2007 -0500 @@ -75,22 +75,13 @@ void shadow_teardown(struct domain *d); /* Call once all of the references to the domain have gone away */ void shadow_final_teardown(struct domain *d); -/* Mark a page as dirty in the log-dirty bitmap: called when Xen - * makes changes to guest memory on its behalf. */ -void sh_mark_dirty(struct domain *d, mfn_t gmfn); -/* Cleaner version so we don't pepper shadow_mode tests all over the place */ -static inline void mark_dirty(struct domain *d, unsigned long gmfn) -{ - if ( unlikely(shadow_mode_log_dirty(d)) ) - /* See the comment about locking in sh_mark_dirty */ - sh_mark_dirty(d, _mfn(gmfn)); -} - /* Update all the things that are derived from the guest's CR0/CR3/CR4. * Called to initialize paging structures if the paging mode * has changed, and when bringing up a VCPU for the first time. */ void shadow_update_paging_modes(struct vcpu *v); +/* handle log_dirty CLEAN operation. */ +void shadow_log_dirty_op_clean(struct domain *d); /* Remove all mappings of the guest page from the shadows. * This is called from common code. It does not flush TLBs. */ --------------000604050005070008040902 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------000604050005070008040902-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tim Deegan Subject: Re: [RFC] Nested Paging Live Migration Date: Wed, 6 Jun 2007 10:54:46 +0100 Message-ID: <20070606095446.GA21688@york.uk.xensource.com> References: <7D748C767B7FA541A8AC5504A4C89A23030EF9B2@SAUSEXMB2.amd.com> <20070601161726.GB16995@york.uk.xensource.com> <46663824.6030200@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Return-path: Content-Disposition: inline In-Reply-To: <46663824.6030200@amd.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Wei Huang Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Hi, At 23:29 -0500 on 05 Jun (1181086164), Wei Huang wrote: > 2. shadow/hap_log_dirty_enable() and shadow/hap_log_dirty_disable() > These four functions were not changed. However, I really want to create > two common functions (paging_log_dirty_disable() and > paging_log_dirty_enable()) for them. To do this, it requires two > function pointers (*log_dirty_enable() and *log_dirty_disable()), which > point to shadow-specific code or hap-specific code. For example, > *log_dirty_enable() points to shadow_log_dirty_enable(). > > Tim, let me know if you like this approach. Yep, that seems fine. > 3. p2m_set_l1e_flags() is renamed to p2m_set_flags_global() as > requested. It does NOT walk P2M. Instead, it still relies on > set_p2m_entry() to walk P2M table. > > The reason: I feel uncomfortable to duplicate the code of > set_p2m_entry() in this method. Most of them will be same as > set_p2m_entry() and p2m_next_level(). What is your opinion? I think it'd be fairly easy to do with a few nested loops since it doesn't need to care about contents or changing the shape of the tree, or have to handle different PT layouts at run-time. I was worried about the cost of reading the struct page-info and the m2p and doing _two_ traverses of the p2m for every frame in the domain; but I don't suppose that enabling log-dirty mode is too time-critical an operation. :) Cheers, Tim. -- Tim Deegan , XenSource UK Limited Registered office c/o EC2Y 5EB, UK; company number 05334508 From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Huang2, Wei" Subject: RE: [RFC] Nested Paging Live Migration Date: Thu, 7 Jun 2007 16:58:37 -0500 Message-ID: <7D748C767B7FA541A8AC5504A4C89A23032DDB14@SAUSEXMB2.amd.com> References: <7D748C767B7FA541A8AC5504A4C89A23030EF9B2@SAUSEXMB2.amd.com> <20070601161726.GB16995@york.uk.xensource.com> <46663824.6030200@amd.com> <20070606095446.GA21688@york.uk.xensource.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C7A94F.004CE5CF" Return-path: Content-class: urn:content-classes:message In-Reply-To: <20070606095446.GA21688@york.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Tim Deegan Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C7A94F.004CE5CF Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Retry. All common functions were extracted to paging level. Plus, p2m_set_flags_global() does NOT rely on set_p2m_entry() anymore.=20 Live_migrate_patch_all.txt is the complete patch. To make it clear, I further splitted it into two small ones (1: live_migrate_interface_patch.txt, 2: live_migrate_npt_patch.txt). Please comment. Thanks. -Wei Tim Deegan wrote: > Hi, >=20 > At 23:29 -0500 on 05 Jun (1181086164), Wei Huang wrote: >> 2. shadow/hap_log_dirty_enable() and shadow/hap_log_dirty_disable() >> These four functions were not changed. However, I really want to >> create two common functions (paging_log_dirty_disable() and >> paging_log_dirty_enable()) for them. To do this, it requires two >> function pointers (*log_dirty_enable() and *log_dirty_disable()), >> which point to shadow-specific code or hap-specific code. For >> example, *log_dirty_enable() points to shadow_log_dirty_enable(). >>=20 >> Tim, let me know if you like this approach. >=20 > Yep, that seems fine. >=20 >> 3. p2m_set_l1e_flags() is renamed to p2m_set_flags_global() as >> requested. It does NOT walk P2M. Instead, it still relies on >> set_p2m_entry() to walk P2M table. >>=20 >> The reason: I feel uncomfortable to duplicate the code of >> set_p2m_entry() in this method. Most of them will be same as >> set_p2m_entry() and p2m_next_level(). What is your opinion? >=20 > I think it'd be fairly easy to do with a few nested loops since it > doesn't need to care about contents or changing the shape of the > tree, or have to handle different PT layouts at run-time. =20 >=20 > I was worried about the cost of reading the struct page-info and the > m2p and doing _two_ traverses of the p2m for every frame in the > domain; but I don't suppose that enabling log-dirty mode is too > time-critical an operation. :) =20 >=20 > Cheers, >=20 > Tim. ------_=_NextPart_001_01C7A94F.004CE5CF Content-Type: text/plain; name=live_migrate_patch_all.txt Content-Transfer-Encoding: base64 Content-Description: live_migrate_patch_all.txt Content-Disposition: attachment; filename=live_migrate_patch_all.txt ZGlmZiAtciA0NTUxNmFjOTRjOWYgeGVuL2FyY2gveDg2L2h2bS9odm0uYw0KLS0tIGEveGVuL2Fy Y2gveDg2L2h2bS9odm0uYwlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hl bi9hcmNoL3g4Ni9odm0vaHZtLmMJV2VkIEp1biAwNiAxMjowNTo0MiAyMDA3IC0wNTAwDQpAQCAt NTY4LDcgKzU2OCw3IEBAIHN0YXRpYyBpbnQgX19odm1fY29weSh2b2lkICpidWYsIHBhZGRyX3QN CiAgICAgICAgIGlmICggZGlyICkNCiAgICAgICAgIHsNCiAgICAgICAgICAgICBtZW1jcHkocCwg YnVmLCBjb3VudCk7IC8qIGRpciA9PSBUUlVFOiAgKnRvKiBndWVzdCAqLw0KLSAgICAgICAgICAg IG1hcmtfZGlydHkoY3VycmVudC0+ZG9tYWluLCBtZm4pOw0KKyAgICAgICAgICAgIHBhZ2luZ19t YXJrX2RpcnR5KGN1cnJlbnQtPmRvbWFpbiwgbWZuKTsNCiAgICAgICAgIH0NCiAgICAgICAgIGVs c2UNCiAgICAgICAgICAgICBtZW1jcHkoYnVmLCBwLCBjb3VudCk7IC8qIGRpciA9PSBGQUxTRTog KmZyb20gZ3Vlc3QgKi8NCmRpZmYgLXIgNDU1MTZhYzk0YzlmIHhlbi9hcmNoL3g4Ni9odm0vaW8u Yw0KLS0tIGEveGVuL2FyY2gveDg2L2h2bS9pby5jCVdlZCBKdW4gMDYgMDg6MzI6MzIgMjAwNyAt MDUwMA0KKysrIGIveGVuL2FyY2gveDg2L2h2bS9pby5jCVdlZCBKdW4gMDYgMTI6MDU6NTYgMjAw NyAtMDUwMA0KQEAgLTg2NSw3ICs4NjUsNyBAQCB2b2lkIGh2bV9pb19hc3Npc3Qodm9pZCkNCiAg ICAgaWYgKCAocC0+ZGlyID09IElPUkVRX1JFQUQpICYmIHAtPmRhdGFfaXNfcHRyICkNCiAgICAg ew0KICAgICAgICAgZ21mbiA9IGdldF9tZm5fZnJvbV9ncGZuKHBhZ2luZ19ndmFfdG9fZ2ZuKHYs IHAtPmRhdGEpKTsNCi0gICAgICAgIG1hcmtfZGlydHkoZCwgZ21mbik7DQorICAgICAgICBwYWdp bmdfbWFya19kaXJ0eShkLCBnbWZuKTsNCiAgICAgfQ0KIA0KICBvdXQ6DQpkaWZmIC1yIDQ1NTE2 YWM5NGM5ZiB4ZW4vYXJjaC94ODYvaHZtL3N2bS9zdm0uYw0KLS0tIGEveGVuL2FyY2gveDg2L2h2 bS9zdm0vc3ZtLmMJV2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJj aC94ODYvaHZtL3N2bS9zdm0uYwlUaHUgSnVuIDA3IDA2OjM2OjA0IDIwMDcgLTA1MDANCkBAIC0x MDMzLDggKzEwMzMsOCBAQCBzdGF0aWMgaW50IHN2bV9kb19uZXN0ZWRfcGdmYXVsdChwYWRkcl90 DQogICAgICAgICByZXR1cm4gMTsNCiAgICAgfQ0KIA0KLSAgICAvKiBXZSBzaG91bGQgbm90IHJl YWNoIGhlcmUuIE90aGVyd2lzZSwgUDJNIHRhYmxlIGlzIG5vdCBjb3JyZWN0LiovDQotICAgIHJl dHVybiAwOw0KKyAgICBwYWdpbmdfbWFya19kaXJ0eShjdXJyZW50LT5kb21haW4sIGdldF9tZm5f ZnJvbV9ncGZuKGdwYSA+PiBQQUdFX1NISUZUKSk7DQorICAgIHJldHVybiBwMm1fc2V0X2ZsYWdz KGN1cnJlbnQtPmRvbWFpbiwgZ3BhLCBfX1BBR0VfSFlQRVJWSVNPUnxfUEFHRV9VU0VSKTsNCiB9 DQogDQogc3RhdGljIHZvaWQgc3ZtX2RvX25vX2RldmljZV9mYXVsdChzdHJ1Y3Qgdm1jYl9zdHJ1 Y3QgKnZtY2IpDQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiB4ZW4vYXJjaC94ODYvbW0uYw0KLS0tIGEv eGVuL2FyY2gveDg2L21tLmMJV2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94 ZW4vYXJjaC94ODYvbW0uYwlXZWQgSnVuIDA2IDEyOjA1OjEwIDIwMDcgLTA1MDANCkBAIC0xNTU2 LDcgKzE1NTYsNyBAQCBpbnQgYWxsb2NfcGFnZV90eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhDQog DQogICAgIC8qIEEgcGFnZSB0YWJsZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHR5cGUgY291bnQgYmVj b21lcyBub24temVyby4gKi8NCiAgICAgaWYgKCBsaWtlbHkob3duZXIgIT0gTlVMTCkgKQ0KLSAg ICAgICAgbWFya19kaXJ0eShvd25lciwgcGFnZV90b19tZm4ocGFnZSkpOw0KKyAgICAgICAgcGFn aW5nX21hcmtfZGlydHkob3duZXIsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsNCiANCiAgICAgc3dpdGNo ICggdHlwZSAmIFBHVF90eXBlX21hc2sgKQ0KICAgICB7DQpAQCAtMTYwMiw3ICsxNjAyLDcgQEAg dm9pZCBmcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYQ0KICAgICAgICAgaWYgKCB1 bmxpa2VseShwYWdpbmdfbW9kZV9lbmFibGVkKG93bmVyKSkgKQ0KICAgICAgICAgew0KICAgICAg ICAgICAgIC8qIEEgcGFnZSB0YWJsZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHR5cGUgY291bnQgYmVj b21lcyB6ZXJvLiAqLw0KLSAgICAgICAgICAgIG1hcmtfZGlydHkob3duZXIsIHBhZ2VfdG9fbWZu KHBhZ2UpKTsNCisgICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShvd25lciwgcGFnZV90b19t Zm4ocGFnZSkpOw0KIA0KICAgICAgICAgICAgIGlmICggc2hhZG93X21vZGVfcmVmY291bnRzKG93 bmVyKSApDQogICAgICAgICAgICAgICAgIHJldHVybjsNCkBAIC0yMDU3LDcgKzIwNTcsNyBAQCBp bnQgZG9fbW11ZXh0X29wKA0KICAgICAgICAgICAgIH0NCiANCiAgICAgICAgICAgICAvKiBBIHBh Z2UgaXMgZGlydGllZCB3aGVuIGl0cyBwaW4gc3RhdHVzIGlzIHNldC4gKi8NCi0gICAgICAgICAg ICBtYXJrX2RpcnR5KGQsIG1mbik7DQorICAgICAgICAgICAgcGFnaW5nX21hcmtfZGlydHkoZCwg bWZuKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgIC8qIFdlIGNhbiByYWNlIGRvbWFpbiBk ZXN0cnVjdGlvbiAoZG9tYWluX3JlbGlucXVpc2hfcmVzb3VyY2VzKS4gKi8NCiAgICAgICAgICAg ICBpZiAoIHVubGlrZWx5KHRoaXNfY3B1KHBlcmNwdV9tbV9pbmZvKS5mb3JlaWduICE9IE5VTEwp ICkNCkBAIC0yMDg5LDcgKzIwODksNyBAQCBpbnQgZG9fbW11ZXh0X29wKA0KICAgICAgICAgICAg ICAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdlKTsNCiAgICAgICAgICAgICAgICAgcHV0X3BhZ2Uo cGFnZSk7DQogICAgICAgICAgICAgICAgIC8qIEEgcGFnZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHBp biBzdGF0dXMgaXMgY2xlYXJlZC4gKi8NCi0gICAgICAgICAgICAgICAgbWFya19kaXJ0eShkLCBt Zm4pOw0KKyAgICAgICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShkLCBtZm4pOw0KICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgew0KQEAgLTI0MjQsNyAr MjQyNCw3IEBAIGludCBkb19tbXVfdXBkYXRlKA0KICAgICAgICAgICAgIHNldF9ncGZuX2Zyb21f bWZuKG1mbiwgZ3Bmbik7DQogICAgICAgICAgICAgb2theSA9IDE7DQogDQotICAgICAgICAgICAg bWFya19kaXJ0eShGT1JFSUdORE9NLCBtZm4pOw0KKyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2Rp cnR5KEZPUkVJR05ET00sIG1mbik7DQogDQogICAgICAgICAgICAgcHV0X3BhZ2UobWZuX3RvX3Bh Z2UobWZuKSk7DQogICAgICAgICAgICAgYnJlYWs7DQpAQCAtMzAwNSw3ICszMDA1LDcgQEAgbG9u ZyBkb191cGRhdGVfZGVzY3JpcHRvcih1NjQgcGEsIHU2NCBkZQ0KICAgICAgICAgYnJlYWs7DQog ICAgIH0NCiANCi0gICAgbWFya19kaXJ0eShkb20sIG1mbik7DQorICAgIHBhZ2luZ19tYXJrX2Rp cnR5KGRvbSwgbWZuKTsNCiANCiAgICAgLyogQWxsIGlzIGdvb2Qgc28gbWFrZSB0aGUgdXBkYXRl LiAqLw0KICAgICBnZHRfcGVudCA9IG1hcF9kb21haW5fcGFnZShtZm4pOw0KZGlmZiAtciA0NTUx NmFjOTRjOWYgeGVuL2FyY2gveDg2L21tL2hhcC9oYXAuYw0KLS0tIGEveGVuL2FyY2gveDg2L21t L2hhcC9oYXAuYwlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hlbi9hcmNo L3g4Ni9tbS9oYXAvaGFwLmMJVGh1IEp1biAwNyAwNTozNzo0MCAyMDA3IC0wNTAwDQpAQCAtNDks NiArNDksMzUgQEANCiAjdW5kZWYgcGFnZV90b19tZm4NCiAjZGVmaW5lIHBhZ2VfdG9fbWZuKF9w ZykgKF9tZm4oKF9wZykgLSBmcmFtZV90YWJsZSkpDQogDQorLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgIEhBUCBMT0cgRElS VFkgU1VQUE9SVCAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovDQorLyogaGFwIGNvZGUgdG8gY2FsbCB3aGVuIGxvZ19kaXJ0 eSBpcyBlbmFibGUuIHJldHVybiAwIGlmIG5vIHByb2JsZW0gZm91bmQuICovDQoraW50IGhhcF9l bmFibGVfbG9nX2RpcnR5KHN0cnVjdCBkb21haW4gKmQpDQorew0KKyAgICAvKiB0dXJuIG9uIFBH X2xvZ19kaXJ0eSBiaXQgaW4gcGFnaW5nIG1vZGUgKi8NCisgICAgZC0+YXJjaC5wYWdpbmcubW9k ZSB8PSBQR19sb2dfZGlydHk7DQorICAgIHAybV9zZXRfZmxhZ3NfZ2xvYmFsKGQsIChfUEFHRV9Q UkVTRU5UfF9QQUdFX1VTRVIpKTsNCisgICAgZmx1c2hfdGxiX2FsbF9wZ2UoKTsNCisNCisgICAg cmV0dXJuIDA7DQorfQ0KKw0KK2ludCBoYXBfZGlzYWJsZV9sb2dfZGlydHkoc3RydWN0IGRvbWFp biAqZCkNCit7DQorICAgIC8qIGxvZyBkaXJ0eSBhbHJlYWR5IGFjY3F1aXJlZCBsb2NrIHRvIGd1 YXJkIHRoaXMgY29kZSAqLw0KKyAgICBkLT5hcmNoLnBhZ2luZy5tb2RlICY9IH5QR19sb2dfZGly dHk7DQorICAgIHAybV9zZXRfZmxhZ3NfZ2xvYmFsKGQsIF9fUEFHRV9IWVBFUlZJU09SfF9QQUdF X1VTRVIpOw0KKyAgICANCisgICAgcmV0dXJuIDE7DQorfQ0KKw0KK3ZvaWQgaGFwX2NsZWFuX2Rp cnR5X2JpdG1hcChzdHJ1Y3QgZG9tYWluICpkKQ0KK3sNCisgICAgLyogbWFyayBwaHlzaWNhbCBt ZW1vcnkgYXMgbm90IHdyaXRldGFibGUgYW5kIGZsdXNoIHRoZSBUTEIgKi8NCisgICAgcDJtX3Nl dF9mbGFnc19nbG9iYWwoZCwgKF9QQUdFX1BSRVNFTlR8X1BBR0VfVVNFUikpOw0KKyAgICBmbHVz aF90bGJfYWxsX3BnZSgpOw0KK30NCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLw0KIC8qICAgICAgICAgICAgIEhBUCBTVVBQT1JUIEZVTkNUSU9OUyAg ICAgICAgICAgICovDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8NCkBAIC00MjEsNiArNDUwLDEwIEBAIGludCBoYXBfZW5hYmxlKHN0cnVjdCBkb21h aW4gKmQsIHUzMiBtb2QNCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KKyAgICAvKiBpbml0aWFsaXpl IGxvZyBkaXJ0eSBoZXJlICovDQorICAgIHBhZ2luZ19sb2dfZGlydHlfaW5pdChkLCBoYXBfZW5h YmxlX2xvZ19kaXJ0eSwgaGFwX2Rpc2FibGVfbG9nX2RpcnR5LA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgaGFwX2NsZWFuX2RpcnR5X2JpdG1hcCk7DQorDQogICAgIC8qIGFsbG9jYXRlIFAy bSB0YWJsZSAqLw0KICAgICBpZiAoIG1vZGUgJiBQR190cmFuc2xhdGUgKSB7DQogICAgICAgICBy diA9IHAybV9hbGxvY190YWJsZShkLCBoYXBfYWxsb2NfcDJtX3BhZ2UsIGhhcF9mcmVlX3AybV9w YWdlKTsNCkBAIC00NzgsNiArNTExLDggQEAgdm9pZCBoYXBfdGVhcmRvd24oc3RydWN0IGRvbWFp biAqZCkNCiAgICAgICAgICAgICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcuaGFwLmZyZWVfcGFn ZXMsDQogICAgICAgICAgICAgICAgICAgICAgIGQtPmFyY2gucGFnaW5nLmhhcC5wMm1fcGFnZXMp Ow0KICAgICAgICAgaGFwX3NldF9hbGxvY2F0aW9uKGQsIDAsIE5VTEwpOw0KKyAgICAgICAgLyog cmVsZWFzZSB0aGUgbG9nLWRpcnR5IGJpdG1hcCBvZiBkaXJ0eSBwYWdlcyAqLw0KKyAgICAgICAg cGFnaW5nX2ZyZWVfbG9nX2RpcnR5X2JpdG1hcChkKTsNCiAgICAgICAgIEhBUF9QUklOVEsoInRl YXJkb3duIGRvbmUuIg0KICAgICAgICAgICAgICAgICAgICAgICAiICBwYWdlcyB0b3RhbCA9ICV1 LCBmcmVlID0gJXUsIHAybT0ldVxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgZC0+YXJjaC5w YWdpbmcuaGFwLnRvdGFsX3BhZ2VzLA0KQEAgLTQ5OCwxMSArNTMzLDYgQEAgaW50IGhhcF9kb21j dGwoc3RydWN0IGRvbWFpbiAqZCwgeGVuX2RvbQ0KIA0KICAgICBIRVJFX0lfQU07DQogDQotICAg IGlmICggdW5saWtlbHkoZCA9PSBjdXJyZW50LT5kb21haW4pICkgew0KLSAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX0lORk8sICJEb24ndCB0cnkgdG8gZG8gYSBoYXAgb3Agb24geW91cnNlbGYhXG4i KTsNCi0gICAgICAgIHJldHVybiAtRUlOVkFMOw0KLSAgICB9DQotICAgIA0KICAgICBzd2l0Y2gg KCBzYy0+b3AgKSB7DQogICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfU0VUX0FMTE9DQVRJ T046DQogICAgICAgICBoYXBfbG9jayhkKTsNCmRpZmYgLXIgNDU1MTZhYzk0YzlmIHhlbi9hcmNo L3g4Ni9tbS9wMm0uYw0KLS0tIGEveGVuL2FyY2gveDg2L21tL3AybS5jCVdlZCBKdW4gMDYgMDg6 MzI6MzIgMjAwNyAtMDUwMA0KKysrIGIveGVuL2FyY2gveDg2L21tL3AybS5jCVRodSBKdW4gMDcg MDU6NTc6MDkgMjAwNyAtMDUwMA0KQEAgLTE2OSw3ICsxNjksNyBAQCBwMm1fbmV4dF9sZXZlbChz dHJ1Y3QgZG9tYWluICpkLCBtZm5fdCAqDQogDQogLy8gUmV0dXJucyAwIG9uIGVycm9yIChvdXQg b2YgbWVtb3J5KQ0KIHN0YXRpYyBpbnQNCi1zZXRfcDJtX2VudHJ5KHN0cnVjdCBkb21haW4gKmQs IHVuc2lnbmVkIGxvbmcgZ2ZuLCBtZm5fdCBtZm4pDQorc2V0X3AybV9lbnRyeShzdHJ1Y3QgZG9t YWluICpkLCB1bnNpZ25lZCBsb25nIGdmbiwgbWZuX3QgbWZuLCB1MzIgbDFlX2ZsYWdzKQ0KIHsN CiAgICAgLy8gWFhYIC0tIHRoaXMgbWlnaHQgYmUgYWJsZSB0byBiZSBmYXN0ZXIgaWZmIGN1cnJl bnQtPmRvbWFpbiA9PSBkDQogICAgIG1mbl90IHRhYmxlX21mbiA9IHBhZ2V0YWJsZV9nZXRfbWZu KGQtPmFyY2gucGh5c190YWJsZSk7DQpAQCAtMjEzLDcgKzIxMyw3IEBAIHNldF9wMm1fZW50cnko c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQNCiAgICAgICAgIGQtPmFyY2gucDJtLm1heF9tYXBw ZWRfcGZuID0gZ2ZuOw0KIA0KICAgICBpZiAoIG1mbl92YWxpZChtZm4pICkNCi0gICAgICAgIGVu dHJ5X2NvbnRlbnQgPSBsMWVfZnJvbV9wZm4obWZuX3gobWZuKSwgX19QQUdFX0hZUEVSVklTT1J8 X1BBR0VfVVNFUik7DQorICAgICAgICBlbnRyeV9jb250ZW50ID0gbDFlX2Zyb21fcGZuKG1mbl94 KG1mbiksIGwxZV9mbGFncyk7DQogICAgIGVsc2UNCiAgICAgICAgIGVudHJ5X2NvbnRlbnQgPSBs MWVfZW1wdHkoKTsNCiANCkBAIC0yNzgsNyArMjc4LDcgQEAgaW50IHAybV9hbGxvY190YWJsZShz dHJ1Y3QgZG9tYWluICpkLA0KICAgICAgICAgcDJtX3VubG9jayhkKTsNCiAgICAgICAgIHJldHVy biAtRU5PTUVNOw0KICAgICB9DQotbGlzdF9hZGRfdGFpbCgmcDJtX3RvcC0+bGlzdCwgJmQtPmFy Y2gucDJtLnBhZ2VzKTsNCisgICAgbGlzdF9hZGRfdGFpbCgmcDJtX3RvcC0+bGlzdCwgJmQtPmFy Y2gucDJtLnBhZ2VzKTsNCiANCiAgICAgcDJtX3RvcC0+Y291bnRfaW5mbyA9IDE7DQogICAgIHAy bV90b3AtPnUuaW51c2UudHlwZV9pbmZvID0gDQpAQCAtMjk3LDggKzI5Nyw4IEBAIGxpc3RfYWRk X3RhaWwoJnAybV90b3AtPmxpc3QsICZkLT5hcmNoLnANCiAgDQogICAgIC8qIEluaXRpYWxpc2Ug cGh5c21hcCB0YWJsZXMgZm9yIHNsb3QgemVyby4gT3RoZXIgY29kZSBhc3N1bWVzIHRoaXMuICov DQogICAgIGdmbiA9IDA7DQotbWZuID0gX21mbihJTlZBTElEX01GTik7DQotICAgIGlmICggIXNl dF9wMm1fZW50cnkoZCwgZ2ZuLCBtZm4pICkNCisgICAgbWZuID0gX21mbihJTlZBTElEX01GTik7 DQorICAgIGlmICggIXNldF9wMm1fZW50cnkoZCwgZ2ZuLCBtZm4sIF9fUEFHRV9IWVBFUlZJU09S fF9QQUdFX1VTRVIpICkNCiAgICAgICAgIGdvdG8gZXJyb3I7DQogDQogICAgIGZvciAoIGVudHJ5 ID0gZC0+cGFnZV9saXN0Lm5leHQ7DQpAQCAtMzE2LDcgKzMxNiw3IEBAIG1mbiA9IF9tZm4oSU5W QUxJRF9NRk4pOw0KICAgICAgICAgICAgIChnZm4gIT0gMHg1NTU1NTU1NUwpDQogI2VuZGlmDQog ICAgICAgICAgICAgICYmIGdmbiAhPSBJTlZBTElEX00yUF9FTlRSWQ0KLSAgICAgICAgICAgICAm JiAhc2V0X3AybV9lbnRyeShkLCBnZm4sIG1mbikgKQ0KKyAgICAgICAgICAgICAmJiAhc2V0X3Ay bV9lbnRyeShkLCBnZm4sIG1mbiwgX19QQUdFX0hZUEVSVklTT1J8X1BBR0VfVVNFUikgKQ0KICAg ICAgICAgICAgIGdvdG8gZXJyb3I7DQogICAgIH0NCiANCkBAIC00OTcsNyArNDk3LDcgQEAgc3Rh dGljIHZvaWQgYXVkaXRfcDJtKHN0cnVjdCBkb21haW4gKmQpDQogICAgICAgICAgICAgLyogVGhp cyBtMnAgZW50cnkgaXMgc3RhbGU6IHRoZSBkb21haW4gaGFzIGFub3RoZXIgZnJhbWUgaW4NCiAg ICAgICAgICAgICAgKiB0aGlzIHBoeXNpY2FsIHNsb3QuICBObyBncmVhdCBkaXNhc3RlciwgYnV0 IGZvciBuZWF0bmVzcywNCiAgICAgICAgICAgICAgKiBibG93IGF3YXkgdGhlIG0ycCBlbnRyeS4g Ki8gDQotICAgICAgICAgICAgc2V0X2dwZm5fZnJvbV9tZm4obWZuLCBJTlZBTElEX00yUF9FTlRS WSk7DQorICAgICAgICAgICAgc2V0X2dwZm5fZnJvbV9tZm4obWZuLCBJTlZBTElEX00yUF9FTlRS WSwgX19QQUdFX0hZUEVSVklTT1J8X1BBR0VfVVNFUik7DQogICAgICAgICB9DQogDQogICAgICAg ICBpZiAoIHRlc3RfbGluZWFyICYmIChnZm4gPD0gZC0+YXJjaC5wMm0ubWF4X21hcHBlZF9wZm4p ICkNCkBAIC02MjYsNyArNjI2LDcgQEAgcDJtX3JlbW92ZV9wYWdlKHN0cnVjdCBkb21haW4gKmQs IHVuc2lnbg0KICAgICBBU1NFUlQobWZuX3goZ2ZuX3RvX21mbihkLCBnZm4pKSA9PSBtZm4pOw0K ICAgICAvL0FTU0VSVChtZm5fdG9fZ2ZuKGQsIG1mbikgPT0gZ2ZuKTsNCiANCi0gICAgc2V0X3Ay bV9lbnRyeShkLCBnZm4sIF9tZm4oSU5WQUxJRF9NRk4pKTsNCisgICAgc2V0X3AybV9lbnRyeShk LCBnZm4sIF9tZm4oSU5WQUxJRF9NRk4pLCBfX1BBR0VfSFlQRVJWSVNPUnxfUEFHRV9VU0VSKTsN CiAgICAgc2V0X2dwZm5fZnJvbV9tZm4obWZuLCBJTlZBTElEX00yUF9FTlRSWSk7DQogfQ0KIA0K QEAgLTY1OSw3ICs2NTksNyBAQCBndWVzdF9waHlzbWFwX2FkZF9wYWdlKHN0cnVjdCBkb21haW4g KmQsDQogICAgIG9tZm4gPSBnZm5fdG9fbWZuKGQsIGdmbik7DQogICAgIGlmICggbWZuX3ZhbGlk KG9tZm4pICkNCiAgICAgew0KLSAgICAgICAgc2V0X3AybV9lbnRyeShkLCBnZm4sIF9tZm4oSU5W QUxJRF9NRk4pKTsNCisgICAgICAgIHNldF9wMm1fZW50cnkoZCwgZ2ZuLCBfbWZuKElOVkFMSURf TUZOKSwgX19QQUdFX0hZUEVSVklTT1J8X1BBR0VfVVNFUik7DQogICAgICAgICBzZXRfZ3Bmbl9m cm9tX21mbihtZm5feChvbWZuKSwgSU5WQUxJRF9NMlBfRU5UUlkpOw0KICAgICB9DQogDQpAQCAt Njg1LDEzICs2ODUsMTI5IEBAIGd1ZXN0X3BoeXNtYXBfYWRkX3BhZ2Uoc3RydWN0IGRvbWFpbiAq ZCwNCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KLSAgICBzZXRfcDJtX2VudHJ5KGQsIGdmbiwgX21m bihtZm4pKTsNCisgICAgc2V0X3AybV9lbnRyeShkLCBnZm4sIF9tZm4obWZuKSwgX19QQUdFX0hZ UEVSVklTT1J8X1BBR0VfVVNFUik7DQogICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbiwgZ2ZuKTsN CiANCiAgICAgYXVkaXRfcDJtKGQpOw0KICAgICBwMm1fdW5sb2NrKGQpOw0KIH0NCiANCisvKiBU aGlzIGZ1bmN0aW9uIGdvZXMgdGhyb3VnaCBQMk0gdGFibGUgYW5kIG1vZGlmeSBsMWUgZmxhZ3Mg b2YgYWxsIHBhZ2VzLiBOb3RlDQorICogdGhhdCBwaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgbDFl IGlzIGludGFjdC4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBmb3INCisgKiBzcGVjaWFsIHB1 cnBvc2UsIHN1Y2ggYXMgbWFya2luZyBwaHlzaWNhbCBtZW1vcnkgYXMgTk9UIFdSSVRBQkxFIGZv cg0KKyAqIHRyYWNraW5nIGRpcnR5IHBhZ2VzIGR1cmluZyBsaXZlIG1pZ3JhdGlvbi4NCisgKi8N Cit2b2lkIHAybV9zZXRfZmxhZ3NfZ2xvYmFsKHN0cnVjdCBkb21haW4gKmQsIHUzMiBsMWVfZmxh Z3MpDQorew0KKyAgICB1bnNpZ25lZCBsb25nIG1mbiwgZ2ZuOw0KKyAgICBsMV9wZ2VudHJ5X3Qg bDFlX2NvbnRlbnQ7DQorICAgIGwxX3BnZW50cnlfdCAqbDFlOw0KKyAgICBsMl9wZ2VudHJ5X3Qg KmwyZTsNCisgICAgaW50IGkxLCBpMjsNCisjaWYgQ09ORklHX1BBR0lOR19MRVZFTFMgPj0gMw0K KyAgICBsM19wZ2VudHJ5X3QgKmwzZTsNCisgICAgaW50IGkzOw0KKyNpZiBDT05GSUdfUEFHSU5H X0xFVkVMUyA9PSA0DQorICAgIGw0X3BnZW50cnlfdCAqbDRlOw0KKyAgICBpbnQgaTQ7DQorI2Vu ZGlmIC8qIENPTkZJR19QQUdJTkdfTEVWRUxTID09IDQgKi8NCisjZW5kaWYgLyogQ09ORklHX1BB R0lOR19MRVZFTFMgPj0gMyAqLw0KKyAgICANCisgICAgaWYgKCAhcGFnaW5nX21vZGVfdHJhbnNs YXRlKGQpICkNCisgICAgICAgIHJldHVybjsNCisgDQorICAgIGlmICggcGFnZXRhYmxlX2dldF9w Zm4oZC0+YXJjaC5waHlzX3RhYmxlKSA9PSAwICkNCisgICAgICAgIHJldHVybjsNCisNCisgICAg cDJtX2xvY2soZCk7DQorICAgICAgICANCisjaWYgQ09ORklHX1BBR0lOR19MRVZFTFMgPT0gNA0K KyAgICBsNGUgPSBtYXBfZG9tYWluX3BhZ2UobWZuX3gocGFnZXRhYmxlX2dldF9tZm4oZC0+YXJj aC5waHlzX3RhYmxlKSkpOw0KKyNlbGlmIENPTkZJR19QQUdJTkdfTEVWRUxTID09IDMNCisgICAg bDNlID0gbWFwX2RvbWFpbl9wYWdlKG1mbl94KHBhZ2V0YWJsZV9nZXRfbWZuKGQtPmFyY2gucGh5 c190YWJsZSkpKTsNCisjZWxzZSAvKiBDT05GSUdfUEFHSU5HX0xFVkVMUyA9PSAyICovDQorICAg IGwyZSA9IG1hcF9kb21haW5fcGFnZShtZm5feChwYWdldGFibGVfZ2V0X21mbihkLT5hcmNoLnBo eXNfdGFibGUpKSk7DQorI2VuZGlmDQorDQorI2lmIENPTkZJR19QQUdJTkdfTEVWRUxTID49IDMN CisjaWYgQ09ORklHX1BBR0lOR19MRVZFTFMgPj0gNA0KKyAgICBmb3IgKCBpNCA9IDA7IGk0IDwg TDRfUEFHRVRBQkxFX0VOVFJJRVM7IGk0KysgKSANCisgICAgew0KKwlpZiAoICEobDRlX2dldF9m bGFncyhsNGVbaTRdKSAmIF9QQUdFX1BSRVNFTlQpICkNCisJew0KKwkgICAgY29udGludWU7DQor CX0NCisJbDNlID0gbWFwX2RvbWFpbl9wYWdlKG1mbl94KF9tZm4obDRlX2dldF9wZm4obDRlW2k0 XSkpKSk7DQorI2VuZGlmIC8qIG5vdyBhdCBsZXZlbHMgMyBvciA0Li4uICovDQorCWZvciAoIGkz ID0gMDsgDQorCSAgICAgIGkzIDwgKChDT05GSUdfUEFHSU5HX0xFVkVMUz09NCkgPyBMM19QQUdF VEFCTEVfRU5UUklFUyA6IDgpOyANCisJICAgICAgaTMrKyApDQorCXsNCisJICAgIGlmICggIShs M2VfZ2V0X2ZsYWdzKGwzZVtpM10pICYgX1BBR0VfUFJFU0VOVCkgKQ0KKwkgICAgew0KKwkJY29u dGludWU7DQorCSAgICB9DQorCSAgICBsMmUgPSBtYXBfZG9tYWluX3BhZ2UobWZuX3goX21mbihs M2VfZ2V0X3BmbihsM2VbaTNdKSkpKTsNCisjZW5kaWYgLyogYWxsIGxldmVscy4uLiAqLw0KKwkg ICAgZm9yICggaTIgPSAwOyBpMiA8IEwyX1BBR0VUQUJMRV9FTlRSSUVTOyBpMisrICkNCisJICAg IHsNCisJCWlmICggIShsMmVfZ2V0X2ZsYWdzKGwyZVtpMl0pICYgX1BBR0VfUFJFU0VOVCkgKQ0K KwkJew0KKwkJICAgIGNvbnRpbnVlOw0KKwkJfQ0KKwkJbDFlID0gbWFwX2RvbWFpbl9wYWdlKG1m bl94KF9tZm4obDJlX2dldF9wZm4obDJlW2kyXSkpKSk7DQorCQkNCisJCWZvciAoIGkxID0gMDsg aTEgPCBMMV9QQUdFVEFCTEVfRU5UUklFUzsgaTErKywgZ2ZuKysgKQ0KKwkJew0KKwkJICAgIGlm ICggIShsMWVfZ2V0X2ZsYWdzKGwxZVtpMV0pICYgX1BBR0VfUFJFU0VOVCkgKQ0KKwkJCWNvbnRp bnVlOw0KKwkJICAgIG1mbiA9IGwxZV9nZXRfcGZuKGwxZVtpMV0pOw0KKwkJICAgIGdmbiA9IGdl dF9ncGZuX2Zyb21fbWZuKG1mbik7DQorCQkgICAgLyogY3JlYXRlIGEgbmV3IDFsZSBlbnRyeSB1 c2luZyBsMWVfZmxhZ3MgKi8NCisJCSAgICBsMWVfY29udGVudCA9IGwxZV9mcm9tX3BmbihtZm4s IGwxZV9mbGFncyk7DQorCQkgICAgcGFnaW5nX3dyaXRlX3AybV9lbnRyeShkLCBnZm4sICZsMWVb aTFdLCBsMWVfY29udGVudCwgMSk7DQorCQl9DQorCQl1bm1hcF9kb21haW5fcGFnZShsMWUpOw0K KwkgICAgfQ0KKyNpZiBDT05GSUdfUEFHSU5HX0xFVkVMUyA+PSAzDQorCSAgICB1bm1hcF9kb21h aW5fcGFnZShsMmUpOw0KKwl9DQorI2lmIENPTkZJR19QQUdJTkdfTEVWRUxTID49IDQNCisJdW5t YXBfZG9tYWluX3BhZ2UobDNlKTsNCisgICAgfQ0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKyNpZiBD T05GSUdfUEFHSU5HX0xFVkVMUyA9PSA0DQorICAgIHVubWFwX2RvbWFpbl9wYWdlKGw0ZSk7DQor I2VsaWYgQ09ORklHX1BBR0lOR19MRVZFTFMgPT0gMw0KKyAgICB1bm1hcF9kb21haW5fcGFnZShs M2UpOw0KKyNlbHNlIC8qIENPTkZJR19QQUdJTkdfTEVWRUxTID09IDIgKi8NCisgICAgdW5tYXBf ZG9tYWluX3BhZ2UobDJlKTsNCisjZW5kaWYNCisNCisgICAgcDJtX3VubG9jayhkKTsNCit9DQor DQorLyogVGhpcyBmdW5jdGlvbiB0cmFjZXMgdGhyb3VnaCBQMk0gdGFibGUgYW5kIG1vZGlmaWVz IGwxZSBmbGFncyBvZiBhIHNwZWNpZmljDQorICogZ3BhLg0KKyAqLw0KK2ludCBwMm1fc2V0X2Zs YWdzKHN0cnVjdCBkb21haW4gKmQsIHBhZGRyX3QgZ3BhLCB1MzIgbDFlX2ZsYWdzKQ0KK3sNCisg ICAgdW5zaWduZWQgbG9uZyBnZm47DQorICAgIG1mbl90IG1mbjsNCisNCisgICAgcDJtX2xvY2so ZCk7DQorDQorICAgIGdmbiA9IGdwYSA+PiBQQUdFX1NISUZUOw0KKyAgICBtZm4gPSBnZm5fdG9f bWZuKGQsIGdmbik7DQorICAgIGlmICggbWZuX3ZhbGlkKG1mbikgKQ0KKyAgICAgICAgc2V0X3Ay bV9lbnRyeShkLCBnZm4sIG1mbiwgbDFlX2ZsYWdzKTsNCisgICAgDQorICAgIHAybV91bmxvY2so ZCk7DQorDQorICAgIHJldHVybiAxOw0KK30NCiANCiAvKg0KICAqIExvY2FsIHZhcmlhYmxlczoN CmRpZmYgLXIgNDU1MTZhYzk0YzlmIHhlbi9hcmNoL3g4Ni9tbS9wYWdpbmcuYw0KLS0tIGEveGVu L2FyY2gveDg2L21tL3BhZ2luZy5jCVdlZCBKdW4gMDYgMDg6MzI6MzIgMjAwNyAtMDUwMA0KKysr IGIveGVuL2FyY2gveDg2L21tL3BhZ2luZy5jCVRodSBKdW4gMDcgMDM6NDg6NDkgMjAwNyAtMDUw MA0KQEAgLTI1LDYgKzI1LDcgQEANCiAjaW5jbHVkZSA8YXNtL3NoYWRvdy5oPg0KICNpbmNsdWRl IDxhc20vcDJtLmg+DQogI2luY2x1ZGUgPGFzbS9oYXAuaD4NCisjaW5jbHVkZSA8YXNtL2d1ZXN0 X2FjY2Vzcy5oPg0KIA0KIC8qIFhlbiBjb21tYW5kLWxpbmUgb3B0aW9uIHRvIGVuYWJsZSBoYXJk d2FyZS1hc3Npc3RlZCBwYWdpbmcgKi8NCiBpbnQgb3B0X2hhcF9lbmFibGVkOw0KQEAgLTQxLDcg KzQyLDI2OSBAQCBib29sZWFuX3BhcmFtKCJoYXAiLCBvcHRfaGFwX2VuYWJsZWQpOw0KICAgICAg ICAgICAgIGRlYnVndHJhY2VfcHJpbnRrKCJwZ2RlYnVnOiAlcygpOiAiIF9mLCBfX2Z1bmNfXywg IyNfYSk7IFwNCiAgICAgfSB3aGlsZSAoMCkNCiANCi0NCisvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICBMT0cgRElSVFkg U1VQUE9SVCAgICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8NCisvKiBPdmVycmlkZSBtYWNyb3MgZnJvbSBhc20vcGFnZS5o IHRvIG1ha2UgdGhlbSB3b3JrIHdpdGggbWZuX3QgKi8NCisjdW5kZWYgbWZuX3RvX3BhZ2UNCisj ZGVmaW5lIG1mbl90b19wYWdlKF9tKSAoZnJhbWVfdGFibGUgKyBtZm5feChfbSkpDQorI3VuZGVm IG1mbl92YWxpZA0KKyNkZWZpbmUgbWZuX3ZhbGlkKF9tZm4pIChtZm5feChfbWZuKSA8IG1heF9w YWdlKQ0KKyN1bmRlZiBwYWdlX3RvX21mbg0KKyNkZWZpbmUgcGFnZV90b19tZm4oX3BnKSAoX21m bigoX3BnKSAtIGZyYW1lX3RhYmxlKSkNCisNCisjZGVmaW5lIGxvZ19kaXJ0eV9sb2NrX2luaXQo X2QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgIGRvIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAg ICAgICAgc3Bpbl9sb2NrX2luaXQoJihfZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5sb2NrKTsg ICAgICAgIFwNCisgICAgICAgIChfZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5sb2NrZXIgPSAt MTsgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGly dHkubG9ja2VyX2Z1bmN0aW9uID0gIm5vYm9keSI7ICAgXA0KKyAgICB9IHdoaWxlICgwKQ0KKw0K KyNkZWZpbmUgbG9nX2RpcnR5X2xvY2soX2QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAg aWYgKHVubGlrZWx5KChfZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5sb2NrZXI9PWN1cnJlbnQt PnByb2Nlc3NvcikpXA0KKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgIHByaW50 aygiRXJyb3I6IHBhZ2luZyBsb2cgZGlydHkgbG9jayBoZWxkIGJ5ICVzXG4iLCAgICAgICAgICAg ICAgXA0KKyAgICAgICAgICAgICAgICAgICAoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkubG9j a2VyX2Z1bmN0aW9uKTsgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgIEJVRygpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAg ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgc3Bpbl9sb2NrKCYoX2QpLT5hcmNoLnBhZ2lu Zy5sb2dfZGlydHkubG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgQVNT RVJUKChfZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5sb2NrZXIgPT0gLTEpOyAgICAgICAgICAg ICAgICAgICAgXA0KKyAgICAgICAgKF9kKS0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmxvY2tlciA9 IGN1cnJlbnQtPnByb2Nlc3NvcjsgICAgICAgICAgICAgXA0KKyAgICAgICAgKF9kKS0+YXJjaC5w YWdpbmcubG9nX2RpcnR5LmxvY2tlcl9mdW5jdGlvbiA9IF9fZnVuY19fOyAgICAgICAgICAgICAg XA0KKyAgICB9IHdoaWxlICgwKQ0KKw0KKyNkZWZpbmUgbG9nX2RpcnR5X3VubG9jayhfZCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBkbyB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXA0KKyAgICAgICAgQVNTRVJUKChfZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5sb2Nr ZXIgPT0gY3VycmVudC0+cHJvY2Vzc29yKTsgXA0KKyAgICAgICAgKF9kKS0+YXJjaC5wYWdpbmcu bG9nX2RpcnR5LmxvY2tlciA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAg ICAgKF9kKS0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmxvY2tlcl9mdW5jdGlvbiA9ICJub2JvZHki OyAgICAgICAgICAgXA0KKyAgICAgICAgc3Bpbl91bmxvY2soJihfZCktPmFyY2gucGFnaW5nLmxv Z19kaXJ0eS5sb2NrKTsgICAgICAgICAgICAgICAgICAgXA0KKyAgICB9IHdoaWxlICgwKQ0KKw0K Ky8qIGFsbG9jYXRlIGJpdG1hcCByZXNvdXJjZXMgZm9yIGxvZyBkaXJ0eSAqLw0KK2ludCBwYWdp bmdfYWxsb2NfbG9nX2RpcnR5X2JpdG1hcChzdHJ1Y3QgZG9tYWluICpkKQ0KK3sNCisgICAgQVNT RVJUKGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXAgPT0gTlVMTCk7DQorICAgIGQtPmFy Y2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXBfc2l6ZSA9DQorICAgICAgICAoZG9tYWluX2dldF9t YXhpbXVtX2dwZm4oZCkgKyBCSVRTX1BFUl9MT05HKSAmIH4oQklUU19QRVJfTE9ORyAtIDEpOw0K KyAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwID0gDQorICAgICAgICB4bWFsbG9j X2FycmF5KHVuc2lnbmVkIGxvbmcsDQorICAgICAgICAgICAgICAgICAgICAgIGQtPmFyY2gucGFn aW5nLmxvZ19kaXJ0eS5iaXRtYXBfc2l6ZSAvIEJJVFNfUEVSX0xPTkcpOw0KKyAgICBpZiAoIGQt PmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXAgPT0gTlVMTCApDQorICAgIHsNCisgICAgICAg IGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXBfc2l6ZSA9IDA7DQorICAgICAgICByZXR1 cm4gLUVOT01FTTsNCisgICAgfQ0KKyAgICBtZW1zZXQoZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5 LmJpdG1hcCwgMCwNCisgICAgICAgICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXBf c2l6ZS84KTsNCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qIGZyZWUgYml0bWFwIHJlc291 cmNlcyAqLw0KK3ZvaWQgcGFnaW5nX2ZyZWVfbG9nX2RpcnR5X2JpdG1hcChzdHJ1Y3QgZG9tYWlu ICpkKQ0KK3sNCisgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcF9zaXplID0gMDsN CisgICAgaWYgKCBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwICkNCisgICAgew0KKyAg ICAgICAgeGZyZWUoZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcCk7DQorICAgICAgICBk LT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwID0gTlVMTDsNCisgICAgfQ0KK30NCisNCitp bnQgcGFnaW5nX2xvZ19kaXJ0eV9lbmFibGUoc3RydWN0IGRvbWFpbiAqZCkNCit7DQorICAgIGlu dCByZXQ7DQorDQorICAgIGRvbWFpbl9wYXVzZShkKTsNCisgICAgbG9nX2RpcnR5X2xvY2soZCk7 DQorDQorICAgIGlmICggcGFnaW5nX21vZGVfbG9nX2RpcnR5KGQpICkNCisgICAgew0KKyAgICAg ICAgcmV0ID0gLUVJTlZBTDsNCisgICAgICAgIGdvdG8gb3V0Ow0KKyAgICB9DQorDQorICAgIHJl dCA9IHBhZ2luZ19hbGxvY19sb2dfZGlydHlfYml0bWFwKGQpOw0KKyAgICBpZiAoIHJldCAhPSAw ICkNCisgICAgew0KKyAgICAgICAgcGFnaW5nX2ZyZWVfbG9nX2RpcnR5X2JpdG1hcChkKTsNCisg ICAgICAgIGdvdG8gb3V0Ow0KKyAgICB9DQorDQorICAgIHJldCA9IGQtPmFyY2gucGFnaW5nLmxv Z19kaXJ0eS5lbmFibGVfbG9nX2RpcnR5KGQpOw0KKyAgICBpZiAoIHJldCAhPSAwICkNCisgICAg ICAgIHBhZ2luZ19mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoZCk7DQorDQorIG91dDoNCisgICAgbG9n X2RpcnR5X3VubG9jayhkKTsNCisgICAgZG9tYWluX3VucGF1c2UoZCk7DQorICAgIHJldHVybiBy ZXQ7DQorfQ0KKw0KK2ludCBwYWdpbmdfbG9nX2RpcnR5X2Rpc2FibGUoc3RydWN0IGRvbWFpbiAq ZCkNCit7DQorICAgIGludCByZXQ7DQorDQorICAgIGRvbWFpbl9wYXVzZShkKTsNCisgICAgbG9n X2RpcnR5X2xvY2soZCk7DQorICAgIHJldCA9IGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5kaXNh YmxlX2xvZ19kaXJ0eShkKTsNCisgICAgaWYgKCAhcGFnaW5nX21vZGVfbG9nX2RpcnR5KGQpICkN CisgICAgICAgIHBhZ2luZ19mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoZCk7DQorICAgIGxvZ19kaXJ0 eV91bmxvY2soZCk7DQorICAgIGRvbWFpbl91bnBhdXNlKGQpOw0KKw0KKyAgICByZXR1cm4gcmV0 Ow0KK30NCisNCisvKiBNYXJrIGEgcGFnZSBhcyBkaXJ0eSAqLw0KK3ZvaWQgcGFnaW5nX21hcmtf ZGlydHkoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBndWVzdF9tZm4pDQorew0KKyAg ICB1bnNpZ25lZCBsb25nIHBmbjsNCisgICAgbWZuX3QgZ21mbjsNCisNCisgICAgZ21mbiA9IF9t Zm4oZ3Vlc3RfbWZuKTsNCisNCisgICAgaWYgKCAhcGFnaW5nX21vZGVfbG9nX2RpcnR5KGQpIHx8 ICFtZm5fdmFsaWQoZ21mbikgKQ0KKyAgICAgICAgcmV0dXJuOw0KKw0KKyAgICBsb2dfZGlydHlf bG9jayhkKTsNCisNCisgICAgQVNTRVJUKGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXAg IT0gTlVMTCk7DQorDQorICAgIC8qIFdlIC9yZWFsbHkvIG1lYW4gUEZOIGhlcmUsIGV2ZW4gZm9y IG5vbi10cmFuc2xhdGVkIGd1ZXN0cy4gKi8NCisgICAgcGZuID0gZ2V0X2dwZm5fZnJvbV9tZm4o bWZuX3goZ21mbikpOw0KKw0KKyAgICAvKg0KKyAgICAgKiBWYWx1ZXMgd2l0aCB0aGUgTVNCIHNl dCBkZW5vdGUgTUZOcyB0aGF0IGFyZW4ndCByZWFsbHkgcGFydCBvZiB0aGUgDQorICAgICAqIGRv bWFpbidzIHBzZXVkby1waHlzaWNhbCBtZW1vcnkgbWFwIChlLmcuLCB0aGUgc2hhcmVkIGluZm8g ZnJhbWUpLg0KKyAgICAgKiBOb3RoaW5nIHRvIGRvIGhlcmUuLi4NCisgICAgICovDQorICAgIGlm ICggdW5saWtlbHkoIVZBTElEX00yUChwZm4pKSApDQorICAgICAgICByZXR1cm47DQorDQorICAg IGlmICggbGlrZWx5KHBmbiA8IGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXBfc2l6ZSkg KSANCisgICAgeyANCisgICAgICAgIGlmICggIV9fdGVzdF9hbmRfc2V0X2JpdChwZm4sIGQtPmFy Y2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXApICkNCisgICAgICAgIHsNCisgICAgICAgICAgICBQ QUdJTkdfREVCVUcoTE9HRElSVFksIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAibWFya2Vk IG1mbiAlIiBQUklfbWZuICIgKHBmbj0lbHgpLCBkb20gJWRcbiIsDQorICAgICAgICAgICAgICAg ICAgICAgICAgIG1mbl94KGdtZm4pLCBwZm4sIGQtPmRvbWFpbl9pZCk7DQorICAgICAgICAgICAg ZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmRpcnR5X2NvdW50Kys7DQorICAgICAgICB9DQorICAg IH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBQQUdJTkdfUFJJTlRLKCJtYXJrX2RpcnR5 IE9PUiEgIg0KKyAgICAgICAgICAgICAgICAgICAgICAibWZuPSUiIFBSSV9tZm4gIiBwZm49JWx4 IG1heD0leCAoZG9tICVkKVxuIg0KKyAgICAgICAgICAgICAgICAgICAgICAib3duZXI9JWQgYz0l MDh4IHQ9JSIgUFJ0eXBlX2luZm8gIlxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgbWZuX3go Z21mbiksIA0KKyAgICAgICAgICAgICAgICAgICAgICBwZm4sIA0KKyAgICAgICAgICAgICAgICAg ICAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwX3NpemUsDQorICAgICAgICAgICAg ICAgICAgICAgIGQtPmRvbWFpbl9pZCwNCisgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VfZ2V0 X293bmVyKG1mbl90b19wYWdlKGdtZm4pKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgPyBwYWdl X2dldF9vd25lcihtZm5fdG9fcGFnZShnbWZuKSktPmRvbWFpbl9pZA0KKyAgICAgICAgICAgICAg ICAgICAgICAgOiAtMSksDQorICAgICAgICAgICAgICAgICAgICAgIG1mbl90b19wYWdlKGdtZm4p LT5jb3VudF9pbmZvLCANCisgICAgICAgICAgICAgICAgICAgICAgbWZuX3RvX3BhZ2UoZ21mbikt PnUuaW51c2UudHlwZV9pbmZvKTsNCisgICAgfQ0KKyAgICANCisgICAgbG9nX2RpcnR5X3VubG9j ayhkKTsNCit9DQorDQorLyogUmVhZCBhIGRvbWFpbidzIGxvZy1kaXJ0eSBiaXRtYXAgYW5kIHN0 YXRzLiAgSWYgdGhlIG9wZXJhdGlvbiBpcyBhIENMRUFOLCANCisgKiBjbGVhciB0aGUgYml0bWFw IGFuZCBzdGF0cyBhcyB3ZWxsLiAqLw0KK2ludCBwYWdpbmdfbG9nX2RpcnR5X29wKHN0cnVjdCBk b21haW4gKmQsIHN0cnVjdCB4ZW5fZG9tY3RsX3NoYWRvd19vcCAqc2MpDQorew0KKyAgICBpbnQg aSwgcnYgPSAwLCBjbGVhbiA9IDAsIHBlZWsgPSAxOw0KKw0KKyAgICBkb21haW5fcGF1c2UoZCk7 DQorICAgIGxvZ19kaXJ0eV9sb2NrKGQpOw0KKw0KKyAgICBjbGVhbiA9IChzYy0+b3AgPT0gWEVO X0RPTUNUTF9TSEFET1dfT1BfQ0xFQU4pOw0KKw0KKyAgICBQQUdJTkdfREVCVUcoTE9HRElSVFks ICJsb2ctZGlydHkgJXM6IGRvbSAldSBmYXVsdHM9JXUgZGlydHk9JXVcbiIsIA0KKyAgICAgICAg ICAgICAgICAgKGNsZWFuKSA/ICJjbGVhbiIgOiAicGVlayIsDQorICAgICAgICAgICAgICAgICBk LT5kb21haW5faWQsDQorICAgICAgICAgICAgICAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHku ZmF1bHRfY291bnQsIA0KKyAgICAgICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5 LmRpcnR5X2NvdW50KTsNCisNCisgICAgc2MtPnN0YXRzLmZhdWx0X2NvdW50ID0gZC0+YXJjaC5w YWdpbmcubG9nX2RpcnR5LmZhdWx0X2NvdW50Ow0KKyAgICBzYy0+c3RhdHMuZGlydHlfY291bnQg PSBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuZGlydHlfY291bnQ7DQorICAgIA0KKyAgICBpZiAo IGNsZWFuICkNCisgICAgew0KKyAgICAgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmZhdWx0 X2NvdW50ID0gMDsNCisgICAgICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5kaXJ0eV9jb3Vu dCA9IDA7DQorICAgICAgICANCisgICAgICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5jbGVh bl9kaXJ0eV9iaXRtYXAoZCk7DQorICAgIH0NCisNCisgICAgaWYgKCBndWVzdF9oYW5kbGVfaXNf bnVsbChzYy0+ZGlydHlfYml0bWFwKSApDQorICAgICAgICAvKiBjYWxsZXIgbWF5IGhhdmUgd2Fu dGVkIGp1c3QgdG8gY2xlYW4gdGhlIHN0YXRlIG9yIGFjY2VzcyBzdGF0cy4gKi8NCisgICAgICAg IHBlZWsgPSAwOw0KKw0KKyAgICBpZiAoIChwZWVrIHx8IGNsZWFuKSAmJiAoZC0+YXJjaC5wYWdp bmcubG9nX2RpcnR5LmJpdG1hcCA9PSBOVUxMKSApDQorICAgIHsNCisgICAgICAgIHJ2ID0gLUVJ TlZBTDsgLyogcGVyaGFwcyBzaG91bGQgYmUgRU5PTUVNPyAqLw0KKyAgICAgICAgZ290byBvdXQ7 DQorICAgIH0NCisgDQorICAgIGlmICggc2MtPnBhZ2VzID4gZC0+YXJjaC5wYWdpbmcubG9nX2Rp cnR5LmJpdG1hcF9zaXplICkNCisgICAgICAgIHNjLT5wYWdlcyA9IGQtPmFyY2gucGFnaW5nLmxv Z19kaXJ0eS5iaXRtYXBfc2l6ZTsNCisNCisjZGVmaW5lIENIVU5LICg4KjEwMjQpIC8qIFRyYW5z ZmVyIGFuZCBjbGVhciBpbiAxa0IgY2h1bmtzIGZvciBMMSBjYWNoZS4gKi8NCisgICAgZm9yICgg aSA9IDA7IGkgPCBzYy0+cGFnZXM7IGkgKz0gQ0hVTksgKQ0KKyAgICB7DQorICAgICAgICBpbnQg Ynl0ZXMgPSAoKCgoc2MtPnBhZ2VzIC0gaSkgPiBDSFVOSykNCisgICAgICAgICAgICAgICAgICAg ICAgPyBDSFVOSw0KKyAgICAgICAgICAgICAgICAgICAgICA6IChzYy0+cGFnZXMgLSBpKSkgKyA3 KSAvIDg7DQorDQorICAgICAgICBpZiAoIGxpa2VseShwZWVrKSApDQorICAgICAgICB7DQorICAg ICAgICAgICAgaWYgKCBjb3B5X3RvX2d1ZXN0X29mZnNldCgNCisgICAgICAgICAgICAgICAgc2Mt PmRpcnR5X2JpdG1hcCwgaS84LA0KKyAgICAgICAgICAgICAgICAodWludDhfdCAqKWQtPmFyY2gu cGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXAgKyAoaS84KSwgYnl0ZXMpICkNCisgICAgICAgICAgICB7 DQorICAgICAgICAgICAgICAgIHJ2ID0gLUVGQVVMVDsNCisgICAgICAgICAgICAgICAgZ290byBv dXQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKCBjbGVhbiAp DQorICAgICAgICAgICAgbWVtc2V0KCh1aW50OF90ICopZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5 LmJpdG1hcCArIChpLzgpLCAwLCBieXRlcyk7DQorICAgIH0NCisjdW5kZWYgQ0hVTksNCisNCisg b3V0Og0KKyAgICBsb2dfZGlydHlfdW5sb2NrKGQpOw0KKyAgICBkb21haW5fdW5wYXVzZShkKTsN CisgICAgcmV0dXJuIHJ2Ow0KK30NCisNCisNCisvKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiB0 YWtlcyB0aHJlZSBmdW5jdGlvbiBwb2ludGVycy4gQ2FsbGVycyBtdXN0IHN1cHBseQ0KKyAqIHRo ZXNlIGZ1bmN0aW9ucyBmb3IgbG9nIGRpcnR5IGNvZGUgdG8gY2FsbC4gVGhpcyBmdW5jdGlvbiB1 c3VhbGx5IGlzIA0KKyAqIGludm9rZWQgd2hlbiBwYWdpbmcgaXMgZW5hYmxlZC4gQ2hlY2sgc2hh ZG93X2VuYWJsZSgpIGFuZCBoYXBfZW5hYmxlKCkgZm9yIA0KKyAqIHJlZmVyZW5jZS4NCisgKi8N Cit2b2lkIHBhZ2luZ19sb2dfZGlydHlfaW5pdChzdHJ1Y3QgZG9tYWluICpkLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCAgICAoKmVuYWJsZV9sb2dfZGlydHkpKHN0cnVjdCBkb21h aW4gKmQpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAoKmRpc2FibGVfbG9n X2RpcnR5KShzdHJ1Y3QgZG9tYWluICpkKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICAgKCpjbGVhbl9kaXJ0eV9iaXRtYXApKHN0cnVjdCBkb21haW4gKmQpKQ0KK3sNCisgICAg LyogV2UgaW5pdGlhbGl6ZSBsb2cgZGlydHkgbG9jayBmaXJzdCAqLw0KKyAgICBsb2dfZGlydHlf bG9ja19pbml0KGQpOw0KKyAgICANCisgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmVuYWJs ZV9sb2dfZGlydHkgPSBlbmFibGVfbG9nX2RpcnR5Ow0KKyAgICBkLT5hcmNoLnBhZ2luZy5sb2df ZGlydHkuZGlzYWJsZV9sb2dfZGlydHkgPSBkaXNhYmxlX2xvZ19kaXJ0eTsNCisgICAgZC0+YXJj aC5wYWdpbmcubG9nX2RpcnR5LmNsZWFuX2RpcnR5X2JpdG1hcCA9IGNsZWFuX2RpcnR5X2JpdG1h cDsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8NCisvKiAgICAgICAgICAgQ09ERSBGT1IgUEFHSU5HIFNVUFBPUlQgICAgICAgICAgICAq Lw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQog LyogRG9tYWluIHBhZ2luZyBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24uICovDQogdm9pZCBwYWdpbmdf ZG9tYWluX2luaXQoc3RydWN0IGRvbWFpbiAqZCkNCiB7DQpAQCAtNjUsMTEgKzMyOCw2MCBAQCBp bnQgcGFnaW5nX2RvbWN0bChzdHJ1Y3QgZG9tYWluICpkLCB4ZW5fDQogaW50IHBhZ2luZ19kb21j dGwoc3RydWN0IGRvbWFpbiAqZCwgeGVuX2RvbWN0bF9zaGFkb3dfb3BfdCAqc2MsDQogICAgICAg ICAgICAgICAgICAgWEVOX0dVRVNUX0hBTkRMRSh2b2lkKSB1X2RvbWN0bCkNCiB7DQorICAgIGlu dCByYzsNCisNCisgICAgaWYgKCB1bmxpa2VseShkID09IGN1cnJlbnQtPmRvbWFpbikgKQ0KKyAg ICB7DQorICAgICAgICBnZHByaW50ayhYRU5MT0dfSU5GTywgIkRvbSAldSB0cmllZCB0byBkbyBh IHNoYWRvdyBvcCBvbiBpdHNlbGYuXG4iLA0KKyAgICAgICAgICAgICAgICAgZC0+ZG9tYWluX2lk KTsNCisgICAgICAgIHJldHVybiAtRUlOVkFMOw0KKyAgICB9DQorICAgIA0KKyAgICBpZiAoIHVu bGlrZWx5KGQtPmlzX2R5aW5nKSApDQorICAgIHsNCisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19J TkZPLCAiSWdub3Jpbmcgc2hhZG93IG9wIG9uIGR5aW5nIGRvbWFpbiAldVxuIiwNCisgICAgICAg ICAgICAgICAgIGQtPmRvbWFpbl9pZCk7DQorICAgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKw0K KyAgICBpZiAoIHVubGlrZWx5KGQtPnZjcHVbMF0gPT0gTlVMTCkgKQ0KKyAgICB7DQorICAgICAg ICBQQUdJTkdfRVJST1IoIlNoYWRvdyBvcCBvbiBhIGRvbWFpbiAoJXUpIHdpdGggbm8gdmNwdXNc biIsDQorICAgICAgICAgICAgICAgICAgICAgZC0+ZG9tYWluX2lkKTsNCisgICAgICAgIHJldHVy biAtRUlOVkFMOw0KKyAgICB9DQorICAgIA0KKyAgICAvKiBDb2RlIHRvIGhhbmRsZSBsb2ctZGly dHkuIE5vdGUgdGhhdCBzb21lIGxvZyBkaXJ0eSBvcGVyYXRpb25zDQorICAgICAqIHBpZ2d5LWJh Y2sgb24gc2hhZG93IG9wZXJhdGlvbnMuIEZvciBleGFtcGxlLCB3aGVuIA0KKyAgICAgKiBYRU5f RE9NQ1RMX1NIQURPV19PUF9PRkYgaXMgY2FsbGVkLCBpdCBmaXJzdCBjaGVja3Mgd2hldGhlciBs b2cgZGlydHkNCisgICAgICogbW9kZSBpcyBlbmFibGVkLiBJZiBkb2VzLCB3ZSBkaXNhYmxlcyBs b2cgZGlydHkgYW5kIGNvbnRpbnVlcyB3aXRoIA0KKyAgICAgKiBzaGFkb3cgY29kZS4gRm9yIHRo aXMgcmVhc29uLCB3ZSBuZWVkIHRvIGZ1cnRoZXIgZGlzcGF0Y2ggZG9tY3RsIA0KKyAgICAgKiB0 byBuZXh0LWxldmVsIHBhZ2luZyBjb2RlIChzaGFkb3cgb3IgaGFwKS4NCisgICAgICovDQorICAg IHN3aXRjaCAoIHNjLT5vcCApDQorICAgIHsNCisgICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19P UF9FTkFCTEVfTE9HRElSVFk6DQorICAgICAgICByZXR1cm4gcGFnaW5nX2xvZ19kaXJ0eV9lbmFi bGUoZCk7CQ0KKwkNCisgICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19PUF9FTkFCTEU6CQ0KKyAg ICAgICAgaWYgKCBzYy0+bW9kZSAmIFhFTl9ET01DVExfU0hBRE9XX0VOQUJMRV9MT0dfRElSVFkg KQ0KKyAgICAgICAgICAgIHJldHVybiBwYWdpbmdfbG9nX2RpcnR5X2VuYWJsZShkKTsNCisNCisg ICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19PUF9PRkY6DQorICAgICAgICBpZiAoIHBhZ2luZ19t b2RlX2xvZ19kaXJ0eShkKSApDQorICAgICAgICAgICAgaWYgKCAocmMgPSBwYWdpbmdfbG9nX2Rp cnR5X2Rpc2FibGUoZCkpICE9IDAgKSANCisgICAgICAgICAgICAgICAgcmV0dXJuIHJjOw0KKw0K KyAgICBjYXNlIFhFTl9ET01DVExfU0hBRE9XX09QX0NMRUFOOg0KKyAgICBjYXNlIFhFTl9ET01D VExfU0hBRE9XX09QX1BFRUs6DQorCXJldHVybiBwYWdpbmdfbG9nX2RpcnR5X29wKGQsIHNjKTsN CisgICAgfQ0KKwkNCiAgICAgLyogSGVyZSwgZGlzcGF0Y2ggZG9tY3RsIHRvIHRoZSBhcHByb3By aWF0ZSBwYWdpbmcgY29kZSAqLw0KICAgICBpZiAoIG9wdF9oYXBfZW5hYmxlZCAmJiBpc19odm1f ZG9tYWluKGQpICkNCi0gICAgICAgIHJldHVybiBoYXBfZG9tY3RsKGQsIHNjLCB1X2RvbWN0bCk7 DQotICAgIGVsc2UNCi0gICAgICAgIHJldHVybiBzaGFkb3dfZG9tY3RsKGQsIHNjLCB1X2RvbWN0 bCk7DQorCXJldHVybiBoYXBfZG9tY3RsKGQsIHNjLCB1X2RvbWN0bCk7DQorICAgIGVsc2UNCisJ cmV0dXJuIHNoYWRvd19kb21jdGwoZCwgc2MsIHVfZG9tY3RsKTsNCiB9DQogDQogLyogQ2FsbCB3 aGVuIGRlc3Ryb3lpbmcgYSBkb21haW4gKi8NCmRpZmYgLXIgNDU1MTZhYzk0YzlmIHhlbi9hcmNo L3g4Ni9tbS9zaGFkb3cvY29tbW9uLmMNCi0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvY29t bW9uLmMJV2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJjaC94ODYv bW0vc2hhZG93L2NvbW1vbi5jCVdlZCBKdW4gMDYgMTI6NTg6MjcgMjAwNyAtMDUwMA0KQEAgLTg3 LDggKzg3LDYgQEAgX19pbml0Y2FsbChzaGFkb3dfYXVkaXRfa2V5X2luaXQpOw0KIF9faW5pdGNh bGwoc2hhZG93X2F1ZGl0X2tleV9pbml0KTsNCiAjZW5kaWYgLyogU0hBRE9XX0FVRElUICovDQog DQotc3RhdGljIHZvaWQgc2hfZnJlZV9sb2dfZGlydHlfYml0bWFwKHN0cnVjdCBkb21haW4gKmQp Ow0KLQ0KIGludCBfc2hhZG93X21vZGVfcmVmY291bnRzKHN0cnVjdCBkb21haW4gKmQpDQogew0K ICAgICByZXR1cm4gc2hhZG93X21vZGVfcmVmY291bnRzKGQpOw0KQEAgLTU0MSw3ICs1MzksNyBA QCBzaF92YWxpZGF0ZV9ndWVzdF9lbnRyeShzdHJ1Y3QgdmNwdSAqdiwgDQogICAgIGludCByZXN1 bHQgPSAwOw0KICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gbWZuX3RvX3BhZ2UoZ21mbik7 DQogDQotICAgIHNoX21hcmtfZGlydHkodi0+ZG9tYWluLCBnbWZuKTsNCisgICAgcGFnaW5nX21h cmtfZGlydHkodi0+ZG9tYWluLCBtZm5feChnbWZuKSk7DQogICAgIA0KICAgICAvLyBEZXRlcm1p bmUgd2hpY2ggdHlwZXMgb2Ygc2hhZG93cyBhcmUgYWZmZWN0ZWQsIGFuZCB1cGRhdGUgZWFjaC4N CiAgICAgLy8NCkBAIC0yNDU1LDYgKzI0NTMsMTAgQEAgaW50IHNoYWRvd19lbmFibGUoc3RydWN0 IGRvbWFpbiAqZCwgdTMyIA0KICAgICAgICAgfSAgICAgICAgDQogICAgIH0NCiANCisgICAgLyog aW5pdGlhbGl6ZSBsb2cgZGlydHkgaGVyZSAqLw0KKyAgICBwYWdpbmdfbG9nX2RpcnR5X2luaXQo ZCwgc2hhZG93X2VuYWJsZV9sb2dfZGlydHksIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg c2hhZG93X2Rpc2FibGVfbG9nX2RpcnR5LCBzaGFkb3dfY2xlYW5fZGlydHlfYml0bWFwKTsNCisN CiAgICAgLyogSW5pdCB0aGUgUDJNIHRhYmxlLiAgTXVzdCBiZSBkb25lIGJlZm9yZSB3ZSB0YWtl IHRoZSBzaGFkb3cgbG9jayANCiAgICAgICogdG8gYXZvaWQgcG9zc2libGUgZGVhZGxvY2suICov DQogICAgIGlmICggbW9kZSAmIFBHX3RyYW5zbGF0ZSApDQpAQCAtMjQ2Myw2ICsyNDY1LDcgQEAg aW50IHNoYWRvd19lbmFibGUoc3RydWN0IGRvbWFpbiAqZCwgdTMyIA0KICAgICAgICAgaWYgKHJ2 ICE9IDApDQogICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrZWQ7DQogICAgIH0NCisNCiANCiAg ICAgc2hhZG93X2xvY2soZCk7DQogDQpAQCAtMjU2NSw3ICsyNTY4LDcgQEAgdm9pZCBzaGFkb3df dGVhcmRvd24oc3RydWN0IGRvbWFpbiAqZCkNCiAgICAgICAgIGlmIChkLT5hcmNoLnBhZ2luZy5z aGFkb3cuaGFzaF90YWJsZSkgDQogICAgICAgICAgICAgc2hhZG93X2hhc2hfdGVhcmRvd24oZCk7 DQogICAgICAgICAvKiBSZWxlYXNlIHRoZSBsb2ctZGlydHkgYml0bWFwIG9mIGRpcnRpZWQgcGFn ZXMgKi8NCi0gICAgICAgIHNoX2ZyZWVfbG9nX2RpcnR5X2JpdG1hcChkKTsNCisgICAgICAgIHBh Z2luZ19mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoZCk7DQogICAgICAgICAvKiBTaG91bGQgbm90IGhh dmUgYW55IG1vcmUgbWVtb3J5IGhlbGQgKi8NCiAgICAgICAgIFNIQURPV19QUklOVEsoInRlYXJk b3duIGRvbmUuIg0KICAgICAgICAgICAgICAgICAgICAgICAgIiAgU2hhZG93IHBhZ2VzIHRvdGFs ID0gJXUsIGZyZWUgPSAldSwgcDJtPSV1XG4iLA0KQEAgLTI3MTgsOTggKzI3MjEsNiBAQCBzdGF0 aWMgaW50IHNoYWRvd190ZXN0X2Rpc2FibGUoc3RydWN0IGRvDQogICAgIGRvbWFpbl9wYXVzZShk KTsNCiAgICAgc2hhZG93X2xvY2soZCk7DQogICAgIHJldCA9IHNoYWRvd19vbmVfYml0X2Rpc2Fi bGUoZCwgUEdfU0hfZW5hYmxlKTsNCi0gICAgc2hhZG93X3VubG9jayhkKTsNCi0gICAgZG9tYWlu X3VucGF1c2UoZCk7DQotDQotICAgIHJldHVybiByZXQ7DQotfQ0KLQ0KLXN0YXRpYyBpbnQNCi1z aF9hbGxvY19sb2dfZGlydHlfYml0bWFwKHN0cnVjdCBkb21haW4gKmQpDQotew0KLSAgICBBU1NF UlQoZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCA9PSBOVUxMKTsNCi0gICAgZC0+ YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcF9zaXplID0NCi0gICAgICAgIChkb21haW5f Z2V0X21heGltdW1fZ3BmbihkKSArIEJJVFNfUEVSX0xPTkcpICYgfihCSVRTX1BFUl9MT05HIC0g MSk7DQotICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXAgPQ0KLSAgICAgICAg eG1hbGxvY19hcnJheSh1bnNpZ25lZCBsb25nLA0KLSAgICAgICAgICAgICAgICAgICAgICBkLT5h cmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwX3NpemUgLyBCSVRTX1BFUl9MT05HKTsNCi0g ICAgaWYgKCBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwID09IE5VTEwgKQ0KLSAg ICB7DQotICAgICAgICBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwX3NpemUgPSAw Ow0KLSAgICAgICAgcmV0dXJuIC1FTk9NRU07DQotICAgIH0NCi0gICAgbWVtc2V0KGQtPmFyY2gu cGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXAsIDAsDQotICAgICAgICAgICBkLT5hcmNoLnBhZ2lu Zy5zaGFkb3cuZGlydHlfYml0bWFwX3NpemUvOCk7DQotDQotICAgIHJldHVybiAwOw0KLX0NCi0N Ci1zdGF0aWMgdm9pZA0KLXNoX2ZyZWVfbG9nX2RpcnR5X2JpdG1hcChzdHJ1Y3QgZG9tYWluICpk KQ0KLXsNCi0gICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcF9zaXplID0gMDsN Ci0gICAgaWYgKCBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwICkNCi0gICAgew0K LSAgICAgICAgeGZyZWUoZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCk7DQotICAg ICAgICBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwID0gTlVMTDsNCi0gICAgfQ0K LX0NCi0NCi1zdGF0aWMgaW50IHNoYWRvd19sb2dfZGlydHlfZW5hYmxlKHN0cnVjdCBkb21haW4g KmQpDQotew0KLSAgICBpbnQgcmV0Ow0KLQ0KLSAgICBkb21haW5fcGF1c2UoZCk7DQotICAgIHNo YWRvd19sb2NrKGQpOw0KLQ0KLSAgICBpZiAoIHNoYWRvd19tb2RlX2xvZ19kaXJ0eShkKSApDQot ICAgIHsNCi0gICAgICAgIHJldCA9IC1FSU5WQUw7DQotICAgICAgICBnb3RvIG91dDsNCi0gICAg fQ0KLQ0KLSAgICBpZiAoIHNoYWRvd19tb2RlX2VuYWJsZWQoZCkgKQ0KLSAgICB7DQotICAgICAg ICAvKiBUaGlzIGRvbWFpbiBhbHJlYWR5IGhhcyBzb21lIHNoYWRvd3M6IG5lZWQgdG8gY2xlYXIg dGhlbSBvdXQgDQotICAgICAgICAgKiBvZiB0aGUgd2F5IHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBy ZWZlcmVuY2VzIHRvIGd1ZXN0IG1lbW9yeSBhcmUgDQotICAgICAgICAgKiBwcm9wZXJseSB3cml0 ZS1wcm90ZWN0ZWQgKi8NCi0gICAgICAgIHNoYWRvd19ibG93X3RhYmxlcyhkKTsNCi0gICAgfQ0K LQ0KLSNpZiAoU0hBRE9XX09QVElNSVpBVElPTlMgJiBTSE9QVF9MSU5VWF9MM19UT1BMRVZFTCkN Ci0gICAgLyogMzJiaXQgUFYgZ3Vlc3RzIG9uIDY0Yml0IHhlbiBiZWhhdmUgbGlrZSBvbGRlciA2 NGJpdCBsaW51eDogdGhleQ0KLSAgICAgKiBjaGFuZ2UgYW4gbDRlIGluc3RlYWQgb2YgY3IzIHRv IHN3aXRjaCB0YWJsZXMuICBHaXZlIHRoZW0gdGhlDQotICAgICAqIHNhbWUgb3B0aW1pemF0aW9u ICovDQotICAgIGlmICggaXNfcHZfMzJvbjY0X2RvbWFpbihkKSApDQotICAgICAgICBkLT5hcmNo LnBhZ2luZy5zaGFkb3cub3B0X2ZsYWdzID0gU0hPUFRfTElOVVhfTDNfVE9QTEVWRUw7DQotI2Vu ZGlmDQotDQotICAgIHJldCA9IHNoX2FsbG9jX2xvZ19kaXJ0eV9iaXRtYXAoZCk7DQotICAgIGlm ICggcmV0ICE9IDAgKQ0KLSAgICB7DQotICAgICAgICBzaF9mcmVlX2xvZ19kaXJ0eV9iaXRtYXAo ZCk7DQotICAgICAgICBnb3RvIG91dDsNCi0gICAgfQ0KLQ0KLSAgICByZXQgPSBzaGFkb3dfb25l X2JpdF9lbmFibGUoZCwgUEdfbG9nX2RpcnR5KTsNCi0gICAgaWYgKCByZXQgIT0gMCApDQotICAg ICAgICBzaF9mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoZCk7DQotDQotIG91dDoNCi0gICAgc2hhZG93 X3VubG9jayhkKTsNCi0gICAgZG9tYWluX3VucGF1c2UoZCk7DQotICAgIHJldHVybiByZXQ7DQot fQ0KLQ0KLXN0YXRpYyBpbnQgc2hhZG93X2xvZ19kaXJ0eV9kaXNhYmxlKHN0cnVjdCBkb21haW4g KmQpDQotew0KLSAgICBpbnQgcmV0Ow0KLQ0KLSAgICBkb21haW5fcGF1c2UoZCk7DQotICAgIHNo YWRvd19sb2NrKGQpOw0KLSAgICByZXQgPSBzaGFkb3dfb25lX2JpdF9kaXNhYmxlKGQsIFBHX2xv Z19kaXJ0eSk7DQotICAgIGlmICggIXNoYWRvd19tb2RlX2xvZ19kaXJ0eShkKSApDQotICAgICAg ICBzaF9mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoZCk7DQogICAgIHNoYWRvd191bmxvY2soZCk7DQog ICAgIGRvbWFpbl91bnBhdXNlKGQpOw0KIA0KQEAgLTI4OTIsMTUwICsyODAzLDYyIEBAIHZvaWQg c2hhZG93X2NvbnZlcnRfdG9fbG9nX2RpcnR5KHN0cnVjdCANCiAgICAgQlVHKCk7DQogfQ0KIA0K LQ0KLS8qIFJlYWQgYSBkb21haW4ncyBsb2ctZGlydHkgYml0bWFwIGFuZCBzdGF0cy4gIA0KLSAq IElmIHRoZSBvcGVyYXRpb24gaXMgYSBDTEVBTiwgY2xlYXIgdGhlIGJpdG1hcCBhbmQgc3RhdHMg YXMgd2VsbC4gKi8NCi1zdGF0aWMgaW50IHNoYWRvd19sb2dfZGlydHlfb3AoDQotICAgIHN0cnVj dCBkb21haW4gKmQsIHN0cnVjdCB4ZW5fZG9tY3RsX3NoYWRvd19vcCAqc2MpDQotew0KLSAgICBp bnQgaSwgcnYgPSAwLCBjbGVhbiA9IDAsIHBlZWsgPSAxOw0KLQ0KLSAgICBkb21haW5fcGF1c2Uo ZCk7DQorLyogU2hhZG93IHNwZWNpZmljIGNvZGUgd2hpY2ggaXMgY2FsbGVkIGluIHBhZ2luZ19s b2dfZGlydHlfZW5hYmxlKCkuDQorICogUmV0dXJuIDAgaWYgbm8gcHJvYmxlbSBmb3VuZC4NCisg Ki8NCitpbnQgc2hhZG93X2VuYWJsZV9sb2dfZGlydHkoc3RydWN0IGRvbWFpbiAqZCkNCit7DQor ICAgIGludCByZXQ7DQorDQorICAgIC8qIHNoYWRvdyBsb2NrIGlzIHJlcXVpcmVkIGhlcmUgKi8N CiAgICAgc2hhZG93X2xvY2soZCk7DQotDQotICAgIGNsZWFuID0gKHNjLT5vcCA9PSBYRU5fRE9N Q1RMX1NIQURPV19PUF9DTEVBTik7DQotDQotICAgIFNIQURPV19ERUJVRyhMT0dESVJUWSwgImxv Zy1kaXJ0eSAlczogZG9tICV1IGZhdWx0cz0ldSBkaXJ0eT0ldVxuIiwgDQotICAgICAgICAgICAg ICAgICAgKGNsZWFuKSA/ICJjbGVhbiIgOiAicGVlayIsDQotICAgICAgICAgICAgICAgICAgZC0+ ZG9tYWluX2lkLA0KLSAgICAgICAgICAgICAgICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5mYXVs dF9jb3VudCwgDQotICAgICAgICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5 X2NvdW50KTsNCi0NCi0gICAgc2MtPnN0YXRzLmZhdWx0X2NvdW50ID0gZC0+YXJjaC5wYWdpbmcu c2hhZG93LmZhdWx0X2NvdW50Ow0KLSAgICBzYy0+c3RhdHMuZGlydHlfY291bnQgPSBkLT5hcmNo LnBhZ2luZy5zaGFkb3cuZGlydHlfY291bnQ7DQotDQotICAgIGlmICggY2xlYW4gKQ0KLSAgICB7 DQotICAgICAgICAvKiBOZWVkIHRvIHJldm9rZSB3cml0ZSBhY2Nlc3MgdG8gdGhlIGRvbWFpbidz IHBhZ2VzIGFnYWluLg0KLSAgICAgICAgICogSW4gZnV0dXJlLCB3ZSdsbCBoYXZlIGEgbGVzcyBo ZWF2eS1oYW5kZWQgYXBwcm9hY2ggdG8gdGhpcywNCi0gICAgICAgICAqIGJ1dCBmb3Igbm93LCB3 ZSBqdXN0IHVuc2hhZG93IGV2ZXJ5dGhpbmcgZXhjZXB0IFhlbi4gKi8NCisgICAgaWYgKCBzaGFk b3dfbW9kZV9lbmFibGVkKGQpICkNCisgICAgew0KKyAgICAgICAgLyogVGhpcyBkb21haW4gYWxy ZWFkeSBoYXMgc29tZSBzaGFkb3dzOiBuZWVkIHRvIGNsZWFyIHRoZW0gb3V0IA0KKyAgICAgICAg ICogb2YgdGhlIHdheSB0byBtYWtlIHN1cmUgdGhhdCBhbGwgcmVmZXJlbmNlcyB0byBndWVzdCBt ZW1vcnkgYXJlIA0KKyAgICAgICAgICogcHJvcGVybHkgd3JpdGUtcHJvdGVjdGVkICovDQogICAg ICAgICBzaGFkb3dfYmxvd190YWJsZXMoZCk7DQotDQotICAgICAgICBkLT5hcmNoLnBhZ2luZy5z aGFkb3cuZmF1bHRfY291bnQgPSAwOw0KLSAgICAgICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRp cnR5X2NvdW50ID0gMDsNCi0gICAgfQ0KLQ0KLSAgICBpZiAoIGd1ZXN0X2hhbmRsZV9pc19udWxs KHNjLT5kaXJ0eV9iaXRtYXApICkNCi0gICAgICAgIC8qIGNhbGxlciBtYXkgaGF2ZSB3YW50ZWQg anVzdCB0byBjbGVhbiB0aGUgc3RhdGUgb3IgYWNjZXNzIHN0YXRzLiAqLw0KLSAgICAgICAgcGVl ayA9IDA7DQotDQotICAgIGlmICggKHBlZWsgfHwgY2xlYW4pICYmIChkLT5hcmNoLnBhZ2luZy5z aGFkb3cuZGlydHlfYml0bWFwID09IE5VTEwpICkNCi0gICAgew0KLSAgICAgICAgcnYgPSAtRUlO VkFMOyAvKiBwZXJoYXBzIHNob3VsZCBiZSBFTk9NRU0/ICovDQotICAgICAgICBnb3RvIG91dDsN Ci0gICAgfQ0KLSANCi0gICAgaWYgKCBzYy0+cGFnZXMgPiBkLT5hcmNoLnBhZ2luZy5zaGFkb3cu ZGlydHlfYml0bWFwX3NpemUgKQ0KLSAgICAgICAgc2MtPnBhZ2VzID0gZC0+YXJjaC5wYWdpbmcu c2hhZG93LmRpcnR5X2JpdG1hcF9zaXplOw0KLQ0KLSNkZWZpbmUgQ0hVTksgKDgqMTAyNCkgLyog VHJhbnNmZXIgYW5kIGNsZWFyIGluIDFrQiBjaHVua3MgZm9yIEwxIGNhY2hlLiAqLw0KLSAgICBm b3IgKCBpID0gMDsgaSA8IHNjLT5wYWdlczsgaSArPSBDSFVOSyApDQotICAgIHsNCi0gICAgICAg IGludCBieXRlcyA9ICgoKChzYy0+cGFnZXMgLSBpKSA+IENIVU5LKQ0KLSAgICAgICAgICAgICAg ICAgICAgICA/IENIVU5LDQotICAgICAgICAgICAgICAgICAgICAgIDogKHNjLT5wYWdlcyAtIGkp KSArIDcpIC8gODsNCi0NCi0gICAgICAgIGlmICggbGlrZWx5KHBlZWspICkNCi0gICAgICAgIHsN Ci0gICAgICAgICAgICBpZiAoIGNvcHlfdG9fZ3Vlc3Rfb2Zmc2V0KA0KLSAgICAgICAgICAgICAg ICBzYy0+ZGlydHlfYml0bWFwLCBpLzgsDQotICAgICAgICAgICAgICAgICh1aW50OF90ICopZC0+ YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCArIChpLzgpLCBieXRlcykgKQ0KLSAgICAg ICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcnYgPSAtRUZBVUxUOw0KLSAgICAgICAgICAgICAg ICBnb3RvIG91dDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBpZiAo IGNsZWFuICkNCi0gICAgICAgICAgICBtZW1zZXQoKHVpbnQ4X3QgKilkLT5hcmNoLnBhZ2luZy5z aGFkb3cuZGlydHlfYml0bWFwICsgKGkvOCksIDAsIGJ5dGVzKTsNCi0gICAgfQ0KLSN1bmRlZiBD SFVOSw0KLQ0KLSBvdXQ6DQorICAgIH0NCisNCisjaWYgKFNIQURPV19PUFRJTUlaQVRJT05TICYg U0hPUFRfTElOVVhfTDNfVE9QTEVWRUwpDQorICAgIC8qIDMyYml0IFBWIGd1ZXN0cyBvbiA2NGJp dCB4ZW4gYmVoYXZlIGxpa2Ugb2xkZXIgNjRiaXQgbGludXg6IHRoZXkNCisgICAgICogY2hhbmdl IGFuIGw0ZSBpbnN0ZWFkIG9mIGNyMyB0byBzd2l0Y2ggdGFibGVzLiAgR2l2ZSB0aGVtIHRoZQ0K KyAgICAgKiBzYW1lIG9wdGltaXphdGlvbiAqLw0KKyAgICBpZiAoIGlzX3B2XzMyb242NF9kb21h aW4oZCkgKQ0KKyAgICAgICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93Lm9wdF9mbGFncyA9IFNIT1BU X0xJTlVYX0wzX1RPUExFVkVMOw0KKyNlbmRpZg0KKyAgICANCisgICAgcmV0ID0gc2hhZG93X29u ZV9iaXRfZW5hYmxlKGQsIFBHX2xvZ19kaXJ0eSk7DQogICAgIHNoYWRvd191bmxvY2soZCk7DQot ICAgIGRvbWFpbl91bnBhdXNlKGQpOw0KLSAgICByZXR1cm4gcnY7DQotfQ0KLQ0KLQ0KLS8qIE1h cmsgYSBwYWdlIGFzIGRpcnR5ICovDQotdm9pZCBzaF9tYXJrX2RpcnR5KHN0cnVjdCBkb21haW4g KmQsIG1mbl90IGdtZm4pDQotew0KLSAgICB1bnNpZ25lZCBsb25nIHBmbjsNCi0gICAgaW50IGRv X2xvY2tpbmc7DQotDQotICAgIGlmICggIXNoYWRvd19tb2RlX2xvZ19kaXJ0eShkKSB8fCAhbWZu X3ZhbGlkKGdtZm4pICkNCi0gICAgICAgIHJldHVybjsNCi0NCi0gICAgLyogQWx0aG91Z2ggdGhp cyBpcyBhbiBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb24sIHdlIGRvIG5vdCBrbm93DQotICAg ICAqIHdoZXRoZXIgdGhlIHNoYWRvdyBsb2NrIHdpbGwgYmUgaGVsZCB3aGVuIGl0IGlzIGNhbGxl ZCAoc2luY2UgaXQNCi0gICAgICogY2FuIGJlIGNhbGxlZCBmcm9tIF9faHZtX2NvcHkgZHVyaW5n IGVtdWxhdGlvbikuDQotICAgICAqIElmIHRoZSBsb2NrIGlzbid0IGhlbGQsIHRha2UgaXQgZm9y IHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FsbC4gKi8NCi0gICAgZG9fbG9ja2luZyA9ICFzaGFkb3df bG9ja2VkX2J5X21lKGQpOw0KLSAgICBpZiAoIGRvX2xvY2tpbmcgKSANCi0gICAgeyANCi0gICAg ICAgIHNoYWRvd19sb2NrKGQpOw0KLSAgICAgICAgLyogQ2hlY2sgdGhlIG1vZGUgYWdhaW4gd2l0 aCB0aGUgbG9jayBoZWxkICovIA0KLSAgICAgICAgaWYgKCB1bmxpa2VseSghc2hhZG93X21vZGVf bG9nX2RpcnR5KGQpKSApDQotICAgICAgICB7DQotICAgICAgICAgICAgc2hhZG93X3VubG9jayhk KTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgQVNT RVJUKGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXAgIT0gTlVMTCk7DQotDQotICAg IC8qIFdlIC9yZWFsbHkvIG1lYW4gUEZOIGhlcmUsIGV2ZW4gZm9yIG5vbi10cmFuc2xhdGVkIGd1 ZXN0cy4gKi8NCi0gICAgcGZuID0gZ2V0X2dwZm5fZnJvbV9tZm4obWZuX3goZ21mbikpOw0KLQ0K LSAgICAvKg0KLSAgICAgKiBWYWx1ZXMgd2l0aCB0aGUgTVNCIHNldCBkZW5vdGUgTUZOcyB0aGF0 IGFyZW4ndCByZWFsbHkgcGFydCBvZiB0aGUgDQotICAgICAqIGRvbWFpbidzIHBzZXVkby1waHlz aWNhbCBtZW1vcnkgbWFwIChlLmcuLCB0aGUgc2hhcmVkIGluZm8gZnJhbWUpLg0KLSAgICAgKiBO b3RoaW5nIHRvIGRvIGhlcmUuLi4NCi0gICAgICovDQotICAgIGlmICggdW5saWtlbHkoIVZBTElE X00yUChwZm4pKSApDQotICAgICAgICByZXR1cm47DQotDQotICAgIC8qIE4uQi4gQ2FuIHVzZSBu b24tYXRvbWljIFRBUyBiZWNhdXNlIHByb3RlY3RlZCBieSBzaGFkb3dfbG9jay4gKi8NCi0gICAg aWYgKCBsaWtlbHkocGZuIDwgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcF9zaXpl KSApIA0KLSAgICB7IA0KLSAgICAgICAgaWYgKCAhX190ZXN0X2FuZF9zZXRfYml0KHBmbiwgZC0+ YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCkgKQ0KLSAgICAgICAgew0KLSAgICAgICAg ICAgIFNIQURPV19ERUJVRyhMT0dESVJUWSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAi bWFya2VkIG1mbiAlIiBQUklfbWZuICIgKHBmbj0lbHgpLCBkb20gJWRcbiIsDQotICAgICAgICAg ICAgICAgICAgICAgICAgICBtZm5feChnbWZuKSwgcGZuLCBkLT5kb21haW5faWQpOw0KLSAgICAg ICAgICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9jb3VudCsrOw0KLSAgICAgICAgfQ0K LSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgU0hBRE9XX1BSSU5USygibWFya19k aXJ0eSBPT1IhICINCi0gICAgICAgICAgICAgICAgICAgICAgICJtZm49JSIgUFJJX21mbiAiIHBm bj0lbHggbWF4PSV4IChkb20gJWQpXG4iDQotICAgICAgICAgICAgICAgICAgICAgICAib3duZXI9 JWQgYz0lMDh4IHQ9JSIgUFJ0eXBlX2luZm8gIlxuIiwNCi0gICAgICAgICAgICAgICAgICAgICAg IG1mbl94KGdtZm4pLCANCi0gICAgICAgICAgICAgICAgICAgICAgIHBmbiwgDQotICAgICAgICAg ICAgICAgICAgICAgICBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwX3NpemUsDQot ICAgICAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQsDQotICAgICAgICAgICAgICAgICAg ICAgICAocGFnZV9nZXRfb3duZXIobWZuX3RvX3BhZ2UoZ21mbikpDQotICAgICAgICAgICAgICAg ICAgICAgICAgPyBwYWdlX2dldF9vd25lcihtZm5fdG9fcGFnZShnbWZuKSktPmRvbWFpbl9pZA0K LSAgICAgICAgICAgICAgICAgICAgICAgIDogLTEpLA0KLSAgICAgICAgICAgICAgICAgICAgICAg bWZuX3RvX3BhZ2UoZ21mbiktPmNvdW50X2luZm8sIA0KLSAgICAgICAgICAgICAgICAgICAgICAg bWZuX3RvX3BhZ2UoZ21mbiktPnUuaW51c2UudHlwZV9pbmZvKTsNCi0gICAgfQ0KLQ0KLSAgICBp ZiAoIGRvX2xvY2tpbmcgKSBzaGFkb3dfdW5sb2NrKGQpOw0KLX0NCi0NCisNCisgICAgcmV0dXJu IHJldDsNCit9DQorDQorLyogc2hhZG93IHNwZWNmaWMgY29kZSB3aGljaCBpcyBjYWxsZWQgaW4g cGFnaW5nX2xvZ19kaXJ0eV9kaXNhYmxlKCkgKi8NCitpbnQgc2hhZG93X2Rpc2FibGVfbG9nX2Rp cnR5KHN0cnVjdCBkb21haW4gKmQpDQorew0KKyAgICBpbnQgcmV0Ow0KKw0KKyAgICAvKiBzaGFk b3cgbG9jayBpcyByZXF1aXJlZCBoZXJlICovICAgIA0KKyAgICBzaGFkb3dfbG9jayhkKTsNCisg ICAgcmV0ID0gc2hhZG93X29uZV9iaXRfZGlzYWJsZShkLCBQR19sb2dfZGlydHkpOw0KKyAgICBz aGFkb3dfdW5sb2NrKGQpOw0KKyAgICANCisgICAgcmV0dXJuIHJldDsNCit9DQorDQorLyogVGhp cyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB3ZSBDTEVBTiBsb2cgZGlydHkgYml0bWFwLiBTZWUg DQorICogcGFnaW5nX2xvZ19kaXJ0eV9vcCgpIGZvciBkZXRhaWxzLiANCisgKi8NCit2b2lkIHNo YWRvd19jbGVhbl9kaXJ0eV9iaXRtYXAoc3RydWN0IGRvbWFpbiAqZCkNCit7DQorICAgIHNoYWRv d19sb2NrKGQpOw0KKyAgICAvKiBOZWVkIHRvIHJldm9rZSB3cml0ZSBhY2Nlc3MgdG8gdGhlIGRv bWFpbidzIHBhZ2VzIGFnYWluLg0KKyAgICAgKiBJbiBmdXR1cmUsIHdlJ2xsIGhhdmUgYSBsZXNz IGhlYXZ5LWhhbmRlZCBhcHByb2FjaCB0byB0aGlzLA0KKyAgICAgKiBidXQgZm9yIG5vdywgd2Ug anVzdCB1bnNoYWRvdyBldmVyeXRoaW5nIGV4Y2VwdCBYZW4uICovDQorICAgIHNoYWRvd19ibG93 X3RhYmxlcyhkKTsNCisgICAgc2hhZG93X3VubG9jayhkKTsNCit9DQogLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLw0KIC8qIFNoYWRvdy1jb250cm9sIFhFTl9ET01DVEwgZGlzcGF0Y2hlciAqLw0KIA0KQEAg LTMwNDUsMzMgKzI4NjgsOSBAQCBpbnQgc2hhZG93X2RvbWN0bChzdHJ1Y3QgZG9tYWluICpkLA0K IHsNCiAgICAgaW50IHJjLCBwcmVlbXB0ZWQgPSAwOw0KIA0KLSAgICBpZiAoIHVubGlrZWx5KGQg PT0gY3VycmVudC0+ZG9tYWluKSApDQotICAgIHsNCi0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19J TkZPLCAiRG9tICV1IHRyaWVkIHRvIGRvIGEgc2hhZG93IG9wIG9uIGl0c2VsZi5cbiIsDQotICAg ICAgICAgICAgICAgICBkLT5kb21haW5faWQpOw0KLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQot ICAgIH0NCi0NCi0gICAgaWYgKCB1bmxpa2VseShkLT5pc19keWluZykgKQ0KLSAgICB7DQotICAg ICAgICBnZHByaW50ayhYRU5MT0dfSU5GTywgIklnbm9yaW5nIHNoYWRvdyBvcCBvbiBkeWluZyBk b21haW4gJXVcbiIsDQotICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQpOw0KLSAgICAgICAg cmV0dXJuIDA7DQotICAgIH0NCi0NCi0gICAgaWYgKCB1bmxpa2VseShkLT52Y3B1WzBdID09IE5V TEwpICkNCi0gICAgew0KLSAgICAgICAgU0hBRE9XX0VSUk9SKCJTaGFkb3cgb3Agb24gYSBkb21h aW4gKCV1KSB3aXRoIG5vIHZjcHVzXG4iLA0KLSAgICAgICAgICAgICAgICAgICAgIGQtPmRvbWFp bl9pZCk7DQotICAgICAgICByZXR1cm4gLUVJTlZBTDsNCi0gICAgfQ0KLQ0KICAgICBzd2l0Y2gg KCBzYy0+b3AgKQ0KICAgICB7DQogICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfT0ZGOg0K LSAgICAgICAgaWYgKCBzaGFkb3dfbW9kZV9sb2dfZGlydHkoZCkgKQ0KLSAgICAgICAgICAgIGlm ICggKHJjID0gc2hhZG93X2xvZ19kaXJ0eV9kaXNhYmxlKGQpKSAhPSAwICkgDQotICAgICAgICAg ICAgICAgIHJldHVybiByYzsNCiAgICAgICAgIGlmICggZC0+YXJjaC5wYWdpbmcubW9kZSA9PSBQ R19TSF9lbmFibGUgKQ0KICAgICAgICAgICAgIGlmICggKHJjID0gc2hhZG93X3Rlc3RfZGlzYWJs ZShkKSkgIT0gMCApIA0KICAgICAgICAgICAgICAgICByZXR1cm4gcmM7DQpAQCAtMzA4MCwxOSAr Mjg3OSwxMCBAQCBpbnQgc2hhZG93X2RvbWN0bChzdHJ1Y3QgZG9tYWluICpkLA0KICAgICBjYXNl IFhFTl9ET01DVExfU0hBRE9XX09QX0VOQUJMRV9URVNUOg0KICAgICAgICAgcmV0dXJuIHNoYWRv d190ZXN0X2VuYWJsZShkKTsNCiANCi0gICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19PUF9FTkFC TEVfTE9HRElSVFk6DQotICAgICAgICByZXR1cm4gc2hhZG93X2xvZ19kaXJ0eV9lbmFibGUoZCk7 DQotDQogICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfRU5BQkxFX1RSQU5TTEFURToNCiAg ICAgICAgIHJldHVybiBzaGFkb3dfZW5hYmxlKGQsIFBHX3JlZmNvdW50c3xQR190cmFuc2xhdGUp Ow0KIA0KLSAgICBjYXNlIFhFTl9ET01DVExfU0hBRE9XX09QX0NMRUFOOg0KLSAgICBjYXNlIFhF Tl9ET01DVExfU0hBRE9XX09QX1BFRUs6DQotICAgICAgICByZXR1cm4gc2hhZG93X2xvZ19kaXJ0 eV9vcChkLCBzYyk7DQotDQogICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfRU5BQkxFOg0K LSAgICAgICAgaWYgKCBzYy0+bW9kZSAmIFhFTl9ET01DVExfU0hBRE9XX0VOQUJMRV9MT0dfRElS VFkgKQ0KLSAgICAgICAgICAgIHJldHVybiBzaGFkb3dfbG9nX2RpcnR5X2VuYWJsZShkKTsNCiAg ICAgICAgIHJldHVybiBzaGFkb3dfZW5hYmxlKGQsIHNjLT5tb2RlIDw8IFBHX21vZGVfc2hpZnQp Ow0KIA0KICAgICBjYXNlIFhFTl9ET01DVExfU0hBRE9XX09QX0dFVF9BTExPQ0FUSU9OOg0KZGlm ZiAtciA0NTUxNmFjOTRjOWYgeGVuL2FyY2gveDg2L21tL3NoYWRvdy9tdWx0aS5jDQotLS0gYS94 ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRpLmMJV2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0w NTAwDQorKysgYi94ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRpLmMJV2VkIEp1biAwNiAxMjow ODozOCAyMDA3IC0wNTAwDQpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHN0YXRpYyB1MzIgZ3Vlc3Rfc2V0 X2FkX2JpdHMoc3RydWN0IHZjcHUNCiAgICAgfQ0KIA0KICAgICAvKiBTZXQgdGhlIGJpdChzKSAq Lw0KLSAgICBzaF9tYXJrX2RpcnR5KHYtPmRvbWFpbiwgZ21mbik7DQorICAgIHBhZ2luZ19tYXJr X2RpcnR5KHYtPmRvbWFpbiwgbWZuX3goZ21mbikpOw0KICAgICBTSEFET1dfREVCVUcoQV9BTkRf RCwgImdmbiA9ICUiIFNIX1BSSV9nZm4gIiwgIg0KICAgICAgICAgICAgICAgICAgIm9sZCBmbGFn cyA9ICUjeCwgbmV3IGZsYWdzID0gJSN4XG4iLCANCiAgICAgICAgICAgICAgICAgIGdmbl94KGd1 ZXN0X2wxZV9nZXRfZ2ZuKCplcCkpLCBndWVzdF9sMWVfZ2V0X2ZsYWdzKCplcCksIA0KQEAgLTcx Nyw3ICs3MTcsNyBAQCBfc2hfcHJvcGFnYXRlKHN0cnVjdCB2Y3B1ICp2LA0KICAgICBpZiAoIHVu bGlrZWx5KChsZXZlbCA9PSAxKSAmJiBzaGFkb3dfbW9kZV9sb2dfZGlydHkoZCkpICkNCiAgICAg ew0KICAgICAgICAgaWYgKCBmdCAmIEZFVENIX1RZUEVfV1JJVEUgKSANCi0gICAgICAgICAgICBz aF9tYXJrX2RpcnR5KGQsIHRhcmdldF9tZm4pOw0KKyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2Rp cnR5KGQsIG1mbl94KHRhcmdldF9tZm4pKTsNCiAgICAgICAgIGVsc2UgaWYgKCAhc2hfbWZuX2lz X2RpcnR5KGQsIHRhcmdldF9tZm4pICkNCiAgICAgICAgICAgICBzZmxhZ3MgJj0gfl9QQUdFX1JX Ow0KICAgICB9DQpAQCAtMjg1Niw3ICsyODU2LDcgQEAgc3RhdGljIGludCBzaF9wYWdlX2ZhdWx0 KHN0cnVjdCB2Y3B1ICp2LA0KICAgICB9DQogDQogICAgIHBlcmZjX2luY3Ioc2hhZG93X2ZhdWx0 X2ZpeGVkKTsNCi0gICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmZhdWx0X2NvdW50Kys7DQorICAg IGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5mYXVsdF9jb3VudCsrOw0KICAgICByZXNldF9lYXJs eV91bnNoYWRvdyh2KTsNCiANCiAgZG9uZToNCkBAIC00MDU4LDcgKzQwNTgsNyBAQCBzaF94ODZf ZW11bGF0ZV93cml0ZShzdHJ1Y3QgdmNwdSAqdiwgdW5zDQogICAgIGVsc2UNCiAgICAgICAgIHJl c2V0X2Vhcmx5X3Vuc2hhZG93KHYpOw0KICAgICANCi0gICAgc2hfbWFya19kaXJ0eSh2LT5kb21h aW4sIG1mbik7DQorICAgIHBhZ2luZ19tYXJrX2RpcnR5KHYtPmRvbWFpbiwgbWZuX3gobWZuKSk7 DQogDQogICAgIHNoX3VubWFwX2RvbWFpbl9wYWdlKGFkZHIpOw0KICAgICBzaGFkb3dfYXVkaXRf dGFibGVzKHYpOw0KQEAgLTQxMTQsNyArNDExNCw3IEBAIHNoX3g4Nl9lbXVsYXRlX2NtcHhjaGco c3RydWN0IHZjcHUgKnYsIHUNCiAgICAgZWxzZQ0KICAgICAgICAgcmVzZXRfZWFybHlfdW5zaGFk b3codik7DQogDQotICAgIHNoX21hcmtfZGlydHkodi0+ZG9tYWluLCBtZm4pOw0KKyAgICBwYWdp bmdfbWFya19kaXJ0eSh2LT5kb21haW4sIG1mbl94KG1mbikpOw0KIA0KICAgICBzaF91bm1hcF9k b21haW5fcGFnZShhZGRyKTsNCiAgICAgc2hhZG93X2F1ZGl0X3RhYmxlcyh2KTsNCkBAIC00MTU4 LDcgKzQxNTgsNyBAQCBzaF94ODZfZW11bGF0ZV9jbXB4Y2hnOGIoc3RydWN0IHZjcHUgKnYsDQog ICAgIGVsc2UNCiAgICAgICAgIHJlc2V0X2Vhcmx5X3Vuc2hhZG93KHYpOw0KIA0KLSAgICBzaF9t YXJrX2RpcnR5KHYtPmRvbWFpbiwgbWZuKTsNCisgICAgcGFnaW5nX21hcmtfZGlydHkodi0+ZG9t YWluLCBtZm5feChtZm4pKTsNCiANCiAgICAgc2hfdW5tYXBfZG9tYWluX3BhZ2UoYWRkcik7DQog ICAgIHNoYWRvd19hdWRpdF90YWJsZXModik7DQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiB4ZW4vYXJj aC94ODYvbW0vc2hhZG93L3ByaXZhdGUuaA0KLS0tIGEveGVuL2FyY2gveDg2L21tL3NoYWRvdy9w cml2YXRlLmgJV2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJjaC94 ODYvbW0vc2hhZG93L3ByaXZhdGUuaAlXZWQgSnVuIDA2IDA5OjEyOjA4IDIwMDcgLTA1MDANCkBA IC00OTYsMTMgKzQ5NiwxMyBAQCBzaF9tZm5faXNfZGlydHkoc3RydWN0IGRvbWFpbiAqZCwgbWZu X3QgDQogew0KICAgICB1bnNpZ25lZCBsb25nIHBmbjsNCiAgICAgQVNTRVJUKHNoYWRvd19tb2Rl X2xvZ19kaXJ0eShkKSk7DQotICAgIEFTU0VSVChkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlf Yml0bWFwICE9IE5VTEwpOw0KKyAgICBBU1NFUlQoZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJp dG1hcCAhPSBOVUxMKTsNCiANCiAgICAgLyogV2UgL3JlYWxseS8gbWVhbiBQRk4gaGVyZSwgZXZl biBmb3Igbm9uLXRyYW5zbGF0ZWQgZ3Vlc3RzLiAqLw0KICAgICBwZm4gPSBnZXRfZ3Bmbl9mcm9t X21mbihtZm5feChnbWZuKSk7DQogICAgIGlmICggbGlrZWx5KFZBTElEX00yUChwZm4pKQ0KLSAg ICAgICAgICYmIGxpa2VseShwZm4gPCBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFw X3NpemUpIA0KLSAgICAgICAgICYmIHRlc3RfYml0KHBmbiwgZC0+YXJjaC5wYWdpbmcuc2hhZG93 LmRpcnR5X2JpdG1hcCkgKQ0KKyAgICAgICAgICYmIGxpa2VseShwZm4gPCBkLT5hcmNoLnBhZ2lu Zy5sb2dfZGlydHkuYml0bWFwX3NpemUpIA0KKyAgICAgICAgICYmIHRlc3RfYml0KHBmbiwgZC0+ YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcCkgKQ0KICAgICAgICAgcmV0dXJuIDE7DQogDQog ICAgIHJldHVybiAwOw0KZGlmZiAtciA0NTUxNmFjOTRjOWYgeGVuL2luY2x1ZGUvYXNtLXg4Ni9k b21haW4uaA0KLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaAlXZWQgSnVuIDA2IDA4 OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvZG9tYWluLmgJV2Vk IEp1biAwNiAxMjozNDoyNCAyMDA3IC0wNTAwDQpAQCAtOTIsMTQgKzkyLDYgQEAgc3RydWN0IHNo YWRvd19kb21haW4gew0KIA0KICAgICAvKiBGYXN0IE1NSU8gcGF0aCBoZXVyaXN0aWMgKi8NCiAg ICAgaW50IGhhc19mYXN0X21taW9fZW50cmllczsNCi0NCi0gICAgLyogU2hhZG93IGxvZy1kaXJ0 eSBiaXRtYXAgKi8NCi0gICAgdW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwOw0KLSAgICB1bnNp Z25lZCBpbnQgZGlydHlfYml0bWFwX3NpemU7ICAvKiBpbiBwYWdlcywgYml0IHBlciBwYWdlICov DQotDQotICAgIC8qIFNoYWRvdyBsb2ctZGlydHkgbW9kZSBzdGF0cyAqLw0KLSAgICB1bnNpZ25l ZCBpbnQgZmF1bHRfY291bnQ7DQotICAgIHVuc2lnbmVkIGludCBkaXJ0eV9jb3VudDsNCiB9Ow0K IA0KIHN0cnVjdCBzaGFkb3dfdmNwdSB7DQpAQCAtMTM0LDcgKzEyNiw2IEBAIHN0cnVjdCBoYXBf ZG9tYWluIHsNCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLw0KIC8qICAgICAgIHAybSBoYW5kbGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICov DQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0N CiBzdHJ1Y3QgcDJtX2RvbWFpbiB7DQogICAgIC8qIExvY2sgdGhhdCBwcm90ZWN0cyB1cGRhdGVz IHRvIHRoZSBwMm0gKi8NCiAgICAgc3BpbmxvY2tfdCAgICAgICAgIGxvY2s7DQpAQCAtMTU2LDE2 ICsxNDcsMzYgQEAgc3RydWN0IHAybV9kb21haW4gew0KIC8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovDQogLyogICAgICAgY29tbW9uIHBhZ2luZyBkYXRh IHN0cnVjdHVyZSAgICAgICAgICAgKi8NCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLw0KK3N0cnVjdCBsb2dfZGlydHlfZG9tYWluIHsNCisgICAgLyog bG9nLWRpcnR5IGxvY2sgKi8NCisgICAgc3BpbmxvY2tfdCAgICAgbG9jazsNCisgICAgaW50ICAg ICAgICAgICAgbG9ja2VyOyAvKiBwcm9jZXNzb3IgdGhhdCBob2xkcyB0aGUgbG9jayAqLw0KKyAg ICBjb25zdCBjaGFyICAgICpsb2NrZXJfZnVuY3Rpb247IC8qIGZ1bmMgdGhhdCB0b29rIGl0ICov DQorDQorICAgIC8qIGxvZy1kaXJ0eSBiaXRtYXAgdG8gcmVjb3JkIGRpcnR5IHBhZ2VzICovDQor ICAgIHVuc2lnbmVkIGxvbmcgKmJpdG1hcDsNCisgICAgdW5zaWduZWQgaW50ICAgYml0bWFwX3Np emU7ICAvKiBpbiBwYWdlcywgYml0IHBlciBwYWdlICovDQorDQorICAgIC8qIGxvZy1kaXJ0eSBt b2RlIHN0YXRzICovDQorICAgIHVuc2lnbmVkIGludCAgIGZhdWx0X2NvdW50Ow0KKyAgICB1bnNp Z25lZCBpbnQgICBkaXJ0eV9jb3VudDsNCisNCisgICAgLyogZnVuY3Rpb25zIHdoaWNoIGFyZSBw YWdpbmcgbW9kZSBzcGVjaWZpYyAqLw0KKyAgICBpbnQgICAgICAgICAgICAoKmVuYWJsZV9sb2df ZGlydHkgICApKHN0cnVjdCBkb21haW4gKmQpOw0KKyAgICBpbnQgICAgICAgICAgICAoKmRpc2Fi bGVfbG9nX2RpcnR5ICApKHN0cnVjdCBkb21haW4gKmQpOw0KKyAgICB2b2lkICAgICAgICAgICAo KmNsZWFuX2RpcnR5X2JpdG1hcCApKHN0cnVjdCBkb21haW4gKmQpOw0KK307DQorDQogc3RydWN0 IHBhZ2luZ19kb21haW4gew0KLSAgICB1MzIgICAgICAgICAgICAgICBtb2RlOyAgLyogZmxhZ3Mg dG8gY29udHJvbCBwYWdpbmcgb3BlcmF0aW9uICovDQotDQorICAgIC8qIGZsYWdzIHRvIGNvbnRy b2wgcGFnaW5nIG9wZXJhdGlvbiAqLw0KKyAgICB1MzIgICAgICAgICAgICAgICAgICAgICBtb2Rl Ow0KICAgICAvKiBleHRlbnNpb24gZm9yIHNoYWRvdyBwYWdpbmcgc3VwcG9ydCAqLw0KLSAgICBz dHJ1Y3Qgc2hhZG93X2RvbWFpbiBzaGFkb3c7DQotDQotICAgIC8qIE90aGVyIHBhZ2luZyBhc3Np c3RhbmNlIGNvZGUgd2lsbCBoYXZlIHN0cnVjdHMgaGVyZSAqLw0KLSAgICBzdHJ1Y3QgaGFwX2Rv bWFpbiAgICBoYXA7DQotfTsNCi0NCisgICAgc3RydWN0IHNoYWRvd19kb21haW4gICAgc2hhZG93 Ow0KKyAgICAvKiBleHRlbnNpb24gZm9yIGhhcmR3YXJlLWFzc2l0ZWQgcGFnaW5nICovDQorICAg IHN0cnVjdCBoYXBfZG9tYWluICAgICAgIGhhcDsNCisgICAgLyogbG9nIGRpcnR5IHN1cHBvcnQg Ki8NCisgICAgc3RydWN0IGxvZ19kaXJ0eV9kb21haW4gbG9nX2RpcnR5Ow0KK307DQogc3RydWN0 IHBhZ2luZ192Y3B1IHsNCiAgICAgLyogUG9pbnRlcnMgdG8gbW9kZS1zcGVjaWZpYyBlbnRyeSBw b2ludHMuICovDQogICAgIHN0cnVjdCBwYWdpbmdfbW9kZSAqbW9kZTsNCmRpZmYgLXIgNDU1MTZh Yzk0YzlmIHhlbi9pbmNsdWRlL2FzbS14ODYvZ3JhbnRfdGFibGUuaA0KLS0tIGEveGVuL2luY2x1 ZGUvYXNtLXg4Ni9ncmFudF90YWJsZS5oCVdlZCBKdW4gMDYgMDg6MzI6MzIgMjAwNyAtMDUwMA0K KysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9ncmFudF90YWJsZS5oCVdlZCBKdW4gMDYgMTI6MDM6 MjEgMjAwNyAtMDUwMA0KQEAgLTMxLDcgKzMxLDcgQEAgaW50IHJlcGxhY2VfZ3JhbnRfaG9zdF9t YXBwaW5nKA0KICNkZWZpbmUgZ250dGFiX3NoYXJlZF9nbWZuKGQsIHQsIGkpICAgICAgICAgICAg ICAgICAgICAgXA0KICAgICAobWZuX3RvX2dtZm4oZCwgZ250dGFiX3NoYXJlZF9tZm4oZCwgdCwg aSkpKQ0KIA0KLSNkZWZpbmUgZ250dGFiX21hcmtfZGlydHkoZCwgZikgbWFya19kaXJ0eSgoZCks IChmKSkNCisjZGVmaW5lIGdudHRhYl9tYXJrX2RpcnR5KGQsIGYpIHBhZ2luZ19tYXJrX2RpcnR5 KChkKSwgKGYpKQ0KIA0KIHN0YXRpYyBpbmxpbmUgdm9pZCBnbnR0YWJfY2xlYXJfZmxhZyh1bnNp Z25lZCBsb25nIG5yLCB1aW50MTZfdCAqYWRkcikNCiB7DQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiB4 ZW4vaW5jbHVkZS9hc20teDg2L3AybS5oDQotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L3AybS5o CVdlZCBKdW4gMDYgMDg6MzI6MzIgMjAwNyAtMDUwMA0KKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4 Ni9wMm0uaAlUaHUgSnVuIDA3IDA1OjM3OjEyIDIwMDcgLTA1MDANCkBAIC0xMjksNiArMTI5LDEx IEBAIHZvaWQgZ3Vlc3RfcGh5c21hcF9yZW1vdmVfcGFnZShzdHJ1Y3QgZG8NCiB2b2lkIGd1ZXN0 X3BoeXNtYXBfcmVtb3ZlX3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4s DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuKTsNCiAN CisvKiBzZXQgUDJNIHRhYmxlIGwxZSBmbGFncyAqLw0KK3ZvaWQgcDJtX3NldF9mbGFnc19nbG9i YWwoc3RydWN0IGRvbWFpbiAqZCwgdTMyIGwxZV9mbGFncyk7DQorDQorLyogc2V0IFAyTSB0YWJs ZSBsMWUgZmxhZ3MgZm9yIGEgZ3BhICovDQoraW50IHAybV9zZXRfZmxhZ3Moc3RydWN0IGRvbWFp biAqZCwgcGFkZHJfdCBncGEsIHUzMiBsMWVfZmxhZ3MpOw0KIA0KICNlbmRpZiAvKiBfWEVOX1Ay TV9IICovDQogDQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiB4ZW4vaW5jbHVkZS9hc20teDg2L3BhZ2lu Zy5oDQotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L3BhZ2luZy5oCVdlZCBKdW4gMDYgMDg6MzI6 MzIgMjAwNyAtMDUwMA0KKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wYWdpbmcuaAlXZWQgSnVu IDA2IDEyOjM2OjU0IDIwMDcgLTA1MDANCkBAIC02Miw2ICs2Miw5IEBADQogI2RlZmluZSBwYWdp bmdfbW9kZV9sb2dfZGlydHkoX2QpICgoX2QpLT5hcmNoLnBhZ2luZy5tb2RlICYgUEdfbG9nX2Rp cnR5KQ0KICNkZWZpbmUgcGFnaW5nX21vZGVfdHJhbnNsYXRlKF9kKSAoKF9kKS0+YXJjaC5wYWdp bmcubW9kZSAmIFBHX3RyYW5zbGF0ZSkNCiAjZGVmaW5lIHBhZ2luZ19tb2RlX2V4dGVybmFsKF9k KSAgKChfZCktPmFyY2gucGFnaW5nLm1vZGUgJiBQR19leHRlcm5hbCkNCisNCisvKiBmbGFncyB1 c2VkIGZvciBwYWdpbmcgZGVidWcgKi8NCisjZGVmaW5lIFBBR0lOR19ERUJVR19MT0dESVJUWSAw DQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIFRoZSBlcXVpdmFsZW50IGZvciBhIHBh cnRpY3VsYXIgdmNwdSBvZiBhIHNoYWRvd2VkIGRvbWFpbi4gKi8NCkBAIC0xMzYsNiArMTM5LDI5 IEBAIHN0cnVjdCBwYWdpbmdfbW9kZSB7DQogICAgIHN0cnVjdCBzaGFkb3dfcGFnaW5nX21vZGUg c2hhZG93Ow0KIH07DQogDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogTG9nIGRpcnR5IGNv ZGUgKi8NCisNCisvKiBhbGxvY2F0ZSBsb2cgZGlydHkgYml0bWFwIHJlc291cmNlIGZvciByZWNv cmRpbmcgZGlydHkgcGFnZXMgKi8NCitpbnQgcGFnaW5nX2FsbG9jX2xvZ19kaXJ0eV9iaXRtYXAo c3RydWN0IGRvbWFpbiAqZCk7DQorDQorLyogZnJlZSBsb2cgZGlydHkgYml0bWFwIHJlc291cmNl ICovDQordm9pZCBwYWdpbmdfZnJlZV9sb2dfZGlydHlfYml0bWFwKHN0cnVjdCBkb21haW4gKmQp Ow0KKw0KKy8qIGVuYWJsZSBsb2cgZGlydHkgKi8NCitpbnQgcGFnaW5nX2xvZ19kaXJ0eV9lbmFi bGUoc3RydWN0IGRvbWFpbiAqZCk7DQorDQorLyogZGlzYWJsZSBsb2cgZGlydHkgKi8NCitpbnQg cGFnaW5nX2xvZ19kaXJ0eV9kaXNhYmxlKHN0cnVjdCBkb21haW4gKmQpOw0KKw0KKy8qIGxvZyBk aXJ0eSBpbml0aWFsaXphdGlvbiAqLw0KK3ZvaWQgcGFnaW5nX2xvZ19kaXJ0eV9pbml0KHN0cnVj dCBkb21haW4gKmQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAoKmVuYWJsZV9s b2dfZGlydHkpKHN0cnVjdCBkb21haW4gKmQpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCAgKCpkaXNhYmxlX2xvZ19kaXJ0eSkoc3RydWN0IGRvbWFpbiAqZCksDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAoKmNsZWFuX2RpcnR5X2JpdG1hcCkoc3RydWN0IGRvbWFp biAqZCkpOw0KKw0KKy8qIG1hcmsgYSBwYWdlIGFzIGRpcnR5ICovDQordm9pZCBwYWdpbmdfbWFy a19kaXJ0eShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGd1ZXN0X21mbik7DQogDQog LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqDQogICogRW50cnkgcG9pbnRzIGludG8gdGhlIHBhZ2luZy1h c3Npc3RhbmNlIGNvZGUgKi8NCmRpZmYgLXIgNDU1MTZhYzk0YzlmIHhlbi9pbmNsdWRlL2FzbS14 ODYvc2hhZG93LmgNCi0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvc2hhZG93LmgJV2VkIEp1biAw NiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L3NoYWRvdy5o CVdlZCBKdW4gMDYgMTI6Mzc6NTIgMjAwNyAtMDUwMA0KQEAgLTc1LDE2ICs3NSwxNCBAQCB2b2lk IHNoYWRvd190ZWFyZG93bihzdHJ1Y3QgZG9tYWluICpkKTsNCiAvKiBDYWxsIG9uY2UgYWxsIG9m IHRoZSByZWZlcmVuY2VzIHRvIHRoZSBkb21haW4gaGF2ZSBnb25lIGF3YXkgKi8NCiB2b2lkIHNo YWRvd19maW5hbF90ZWFyZG93bihzdHJ1Y3QgZG9tYWluICpkKTsNCiANCi0vKiBNYXJrIGEgcGFn ZSBhcyBkaXJ0eSBpbiB0aGUgbG9nLWRpcnR5IGJpdG1hcDogY2FsbGVkIHdoZW4gWGVuIA0KLSAq IG1ha2VzIGNoYW5nZXMgdG8gZ3Vlc3QgbWVtb3J5IG9uIGl0cyBiZWhhbGYuICovDQotdm9pZCBz aF9tYXJrX2RpcnR5KHN0cnVjdCBkb21haW4gKmQsIG1mbl90IGdtZm4pOw0KLS8qIENsZWFuZXIg dmVyc2lvbiBzbyB3ZSBkb24ndCBwZXBwZXIgc2hhZG93X21vZGUgdGVzdHMgYWxsIG92ZXIgdGhl IHBsYWNlICovDQotc3RhdGljIGlubGluZSB2b2lkIG1hcmtfZGlydHkoc3RydWN0IGRvbWFpbiAq ZCwgdW5zaWduZWQgbG9uZyBnbWZuKQ0KLXsNCi0gICAgaWYgKCB1bmxpa2VseShzaGFkb3dfbW9k ZV9sb2dfZGlydHkoZCkpICkNCi0gICAgICAgIC8qIFNlZSB0aGUgY29tbWVudCBhYm91dCBsb2Nr aW5nIGluIHNoX21hcmtfZGlydHkgKi8NCi0gICAgICAgIHNoX21hcmtfZGlydHkoZCwgX21mbihn bWZuKSk7DQotfQ0KKy8qIHNoYWRvdyBjb2RlIHRvIGNhbGwgd2hlbiBsb2cgZGlydHkgaXMgZW5h YmxlZCAqLw0KK2ludCBzaGFkb3dfZW5hYmxlX2xvZ19kaXJ0eShzdHJ1Y3QgZG9tYWluICpkKTsN CisNCisvKiBzaGFkb3cgY29kZSB0byBjYWxsIHdoZW4gbG9nIGRpcnR5IGlzIGRpc2FibGVkICov DQoraW50IHNoYWRvd19kaXNhYmxlX2xvZ19kaXJ0eShzdHJ1Y3QgZG9tYWluICpkKTsNCisNCisv KiBzaGFkb3cgY29kZSB0byBjYWxsIHdoZW4gYml0bWFwIGlzIGJlaW5nIGNsZWFuZWQgKi8NCit2 b2lkIHNoYWRvd19jbGVhbl9kaXJ0eV9iaXRtYXAoc3RydWN0IGRvbWFpbiAqZCk7DQogDQogLyog VXBkYXRlIGFsbCB0aGUgdGhpbmdzIHRoYXQgYXJlIGRlcml2ZWQgZnJvbSB0aGUgZ3Vlc3QncyBD UjAvQ1IzL0NSNC4NCiAgKiBDYWxsZWQgdG8gaW5pdGlhbGl6ZSBwYWdpbmcgc3RydWN0dXJlcyBp ZiB0aGUgcGFnaW5nIG1vZGUNCg== ------_=_NextPart_001_01C7A94F.004CE5CF Content-Type: text/plain; name=live_migrate_interface_patch.txt Content-Transfer-Encoding: base64 Content-Description: live_migrate_interface_patch.txt Content-Disposition: attachment; filename=live_migrate_interface_patch.txt ZGlmZiAtciA0NTUxNmFjOTRjOWYgLXIgOWJjNmExOTZhZDBlIHhlbi9hcmNoL3g4Ni9odm0vaHZt LmMNCi0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMJV2VkIEp1biAwNiAwODozMjozMiAyMDA3 IC0wNTAwDQorKysgYi94ZW4vYXJjaC94ODYvaHZtL2h2bS5jCVRodSBKdW4gMDcgMDM6NTM6NTkg MjAwNyAtMDUwMA0KQEAgLTU2OCw3ICs1NjgsNyBAQCBzdGF0aWMgaW50IF9faHZtX2NvcHkodm9p ZCAqYnVmLCBwYWRkcl90DQogICAgICAgICBpZiAoIGRpciApDQogICAgICAgICB7DQogICAgICAg ICAgICAgbWVtY3B5KHAsIGJ1ZiwgY291bnQpOyAvKiBkaXIgPT0gVFJVRTogICp0byogZ3Vlc3Qg Ki8NCi0gICAgICAgICAgICBtYXJrX2RpcnR5KGN1cnJlbnQtPmRvbWFpbiwgbWZuKTsNCisgICAg ICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShjdXJyZW50LT5kb21haW4sIG1mbik7DQogICAgICAg ICB9DQogICAgICAgICBlbHNlDQogICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgcCwgY291bnQpOyAv KiBkaXIgPT0gRkFMU0U6ICpmcm9tIGd1ZXN0ICovDQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiAtciA5 YmM2YTE5NmFkMGUgeGVuL2FyY2gveDg2L2h2bS9pby5jDQotLS0gYS94ZW4vYXJjaC94ODYvaHZt L2lvLmMJV2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJjaC94ODYv aHZtL2lvLmMJVGh1IEp1biAwNyAwMzo1Mzo1OSAyMDA3IC0wNTAwDQpAQCAtODY1LDcgKzg2NSw3 IEBAIHZvaWQgaHZtX2lvX2Fzc2lzdCh2b2lkKQ0KICAgICBpZiAoIChwLT5kaXIgPT0gSU9SRVFf UkVBRCkgJiYgcC0+ZGF0YV9pc19wdHIgKQ0KICAgICB7DQogICAgICAgICBnbWZuID0gZ2V0X21m bl9mcm9tX2dwZm4ocGFnaW5nX2d2YV90b19nZm4odiwgcC0+ZGF0YSkpOw0KLSAgICAgICAgbWFy a19kaXJ0eShkLCBnbWZuKTsNCisgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KGQsIGdtZm4pOw0K ICAgICB9DQogDQogIG91dDoNCmRpZmYgLXIgNDU1MTZhYzk0YzlmIC1yIDliYzZhMTk2YWQwZSB4 ZW4vYXJjaC94ODYvbW0uYw0KLS0tIGEveGVuL2FyY2gveDg2L21tLmMJV2VkIEp1biAwNiAwODoz MjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJjaC94ODYvbW0uYwlUaHUgSnVuIDA3IDAzOjUz OjU5IDIwMDcgLTA1MDANCkBAIC0xNTU2LDcgKzE1NTYsNyBAQCBpbnQgYWxsb2NfcGFnZV90eXBl KHN0cnVjdCBwYWdlX2luZm8gKnBhDQogDQogICAgIC8qIEEgcGFnZSB0YWJsZSBpcyBkaXJ0aWVk IHdoZW4gaXRzIHR5cGUgY291bnQgYmVjb21lcyBub24temVyby4gKi8NCiAgICAgaWYgKCBsaWtl bHkob3duZXIgIT0gTlVMTCkgKQ0KLSAgICAgICAgbWFya19kaXJ0eShvd25lciwgcGFnZV90b19t Zm4ocGFnZSkpOw0KKyAgICAgICAgcGFnaW5nX21hcmtfZGlydHkob3duZXIsIHBhZ2VfdG9fbWZu KHBhZ2UpKTsNCiANCiAgICAgc3dpdGNoICggdHlwZSAmIFBHVF90eXBlX21hc2sgKQ0KICAgICB7 DQpAQCAtMTYwMiw3ICsxNjAyLDcgQEAgdm9pZCBmcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9p bmZvICpwYQ0KICAgICAgICAgaWYgKCB1bmxpa2VseShwYWdpbmdfbW9kZV9lbmFibGVkKG93bmVy KSkgKQ0KICAgICAgICAgew0KICAgICAgICAgICAgIC8qIEEgcGFnZSB0YWJsZSBpcyBkaXJ0aWVk IHdoZW4gaXRzIHR5cGUgY291bnQgYmVjb21lcyB6ZXJvLiAqLw0KLSAgICAgICAgICAgIG1hcmtf ZGlydHkob3duZXIsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsNCisgICAgICAgICAgICBwYWdpbmdfbWFy a19kaXJ0eShvd25lciwgcGFnZV90b19tZm4ocGFnZSkpOw0KIA0KICAgICAgICAgICAgIGlmICgg c2hhZG93X21vZGVfcmVmY291bnRzKG93bmVyKSApDQogICAgICAgICAgICAgICAgIHJldHVybjsN CkBAIC0yMDU3LDcgKzIwNTcsNyBAQCBpbnQgZG9fbW11ZXh0X29wKA0KICAgICAgICAgICAgIH0N CiANCiAgICAgICAgICAgICAvKiBBIHBhZ2UgaXMgZGlydGllZCB3aGVuIGl0cyBwaW4gc3RhdHVz IGlzIHNldC4gKi8NCi0gICAgICAgICAgICBtYXJrX2RpcnR5KGQsIG1mbik7DQorICAgICAgICAg ICAgcGFnaW5nX21hcmtfZGlydHkoZCwgbWZuKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAg IC8qIFdlIGNhbiByYWNlIGRvbWFpbiBkZXN0cnVjdGlvbiAoZG9tYWluX3JlbGlucXVpc2hfcmVz b3VyY2VzKS4gKi8NCiAgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHRoaXNfY3B1KHBlcmNwdV9t bV9pbmZvKS5mb3JlaWduICE9IE5VTEwpICkNCkBAIC0yMDg5LDcgKzIwODksNyBAQCBpbnQgZG9f bW11ZXh0X29wKA0KICAgICAgICAgICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdlKTsNCiAg ICAgICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7DQogICAgICAgICAgICAgICAgIC8qIEEgcGFn ZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHBpbiBzdGF0dXMgaXMgY2xlYXJlZC4gKi8NCi0gICAgICAg ICAgICAgICAgbWFya19kaXJ0eShkLCBtZm4pOw0KKyAgICAgICAgICAgICAgICBwYWdpbmdfbWFy a19kaXJ0eShkLCBtZm4pOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgew0KQEAgLTI0MjQsNyArMjQyNCw3IEBAIGludCBkb19tbXVfdXBkYXRlKA0KICAg ICAgICAgICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbiwgZ3Bmbik7DQogICAgICAgICAgICAgb2th eSA9IDE7DQogDQotICAgICAgICAgICAgbWFya19kaXJ0eShGT1JFSUdORE9NLCBtZm4pOw0KKyAg ICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KEZPUkVJR05ET00sIG1mbik7DQogDQogICAgICAg ICAgICAgcHV0X3BhZ2UobWZuX3RvX3BhZ2UobWZuKSk7DQogICAgICAgICAgICAgYnJlYWs7DQpA QCAtMzAwNSw3ICszMDA1LDcgQEAgbG9uZyBkb191cGRhdGVfZGVzY3JpcHRvcih1NjQgcGEsIHU2 NCBkZQ0KICAgICAgICAgYnJlYWs7DQogICAgIH0NCiANCi0gICAgbWFya19kaXJ0eShkb20sIG1m bik7DQorICAgIHBhZ2luZ19tYXJrX2RpcnR5KGRvbSwgbWZuKTsNCiANCiAgICAgLyogQWxsIGlz IGdvb2Qgc28gbWFrZSB0aGUgdXBkYXRlLiAqLw0KICAgICBnZHRfcGVudCA9IG1hcF9kb21haW5f cGFnZShtZm4pOw0KZGlmZiAtciA0NTUxNmFjOTRjOWYgLXIgOWJjNmExOTZhZDBlIHhlbi9hcmNo L3g4Ni9tbS9oYXAvaGFwLmMNCi0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9oYXAvaGFwLmMJV2VkIEp1 biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJjaC94ODYvbW0vaGFwL2hhcC5j CVRodSBKdW4gMDcgMDM6NTM6NTkgMjAwNyAtMDUwMA0KQEAgLTQ5OCwxMSArNDk4LDYgQEAgaW50 IGhhcF9kb21jdGwoc3RydWN0IGRvbWFpbiAqZCwgeGVuX2RvbQ0KIA0KICAgICBIRVJFX0lfQU07 DQogDQotICAgIGlmICggdW5saWtlbHkoZCA9PSBjdXJyZW50LT5kb21haW4pICkgew0KLSAgICAg ICAgZ2RwcmludGsoWEVOTE9HX0lORk8sICJEb24ndCB0cnkgdG8gZG8gYSBoYXAgb3Agb24geW91 cnNlbGYhXG4iKTsNCi0gICAgICAgIHJldHVybiAtRUlOVkFMOw0KLSAgICB9DQotICAgIA0KICAg ICBzd2l0Y2ggKCBzYy0+b3AgKSB7DQogICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfU0VU X0FMTE9DQVRJT046DQogICAgICAgICBoYXBfbG9jayhkKTsNCmRpZmYgLXIgNDU1MTZhYzk0Yzlm IC1yIDliYzZhMTk2YWQwZSB4ZW4vYXJjaC94ODYvbW0vcGFnaW5nLmMNCi0tLSBhL3hlbi9hcmNo L3g4Ni9tbS9wYWdpbmcuYwlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hl bi9hcmNoL3g4Ni9tbS9wYWdpbmcuYwlUaHUgSnVuIDA3IDAzOjUzOjU5IDIwMDcgLTA1MDANCkBA IC0yNSw2ICsyNSw3IEBADQogI2luY2x1ZGUgPGFzbS9zaGFkb3cuaD4NCiAjaW5jbHVkZSA8YXNt L3AybS5oPg0KICNpbmNsdWRlIDxhc20vaGFwLmg+DQorI2luY2x1ZGUgPGFzbS9ndWVzdF9hY2Nl c3MuaD4NCiANCiAvKiBYZW4gY29tbWFuZC1saW5lIG9wdGlvbiB0byBlbmFibGUgaGFyZHdhcmUt YXNzaXN0ZWQgcGFnaW5nICovDQogaW50IG9wdF9oYXBfZW5hYmxlZDsNCkBAIC00MSw3ICs0Miwy NjkgQEAgYm9vbGVhbl9wYXJhbSgiaGFwIiwgb3B0X2hhcF9lbmFibGVkKTsNCiAgICAgICAgICAg ICBkZWJ1Z3RyYWNlX3ByaW50aygicGdkZWJ1ZzogJXMoKTogIiBfZiwgX19mdW5jX18sICMjX2Ep OyBcDQogICAgIH0gd2hpbGUgKDApDQogDQotDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgICAgTE9HIERJUlRZIFNVUFBP UlQgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovDQorLyogT3ZlcnJpZGUgbWFjcm9zIGZyb20gYXNtL3BhZ2UuaCB0byBt YWtlIHRoZW0gd29yayB3aXRoIG1mbl90ICovDQorI3VuZGVmIG1mbl90b19wYWdlDQorI2RlZmlu ZSBtZm5fdG9fcGFnZShfbSkgKGZyYW1lX3RhYmxlICsgbWZuX3goX20pKQ0KKyN1bmRlZiBtZm5f dmFsaWQNCisjZGVmaW5lIG1mbl92YWxpZChfbWZuKSAobWZuX3goX21mbikgPCBtYXhfcGFnZSkN CisjdW5kZWYgcGFnZV90b19tZm4NCisjZGVmaW5lIHBhZ2VfdG9fbWZuKF9wZykgKF9tZm4oKF9w ZykgLSBmcmFtZV90YWJsZSkpDQorDQorI2RlZmluZSBsb2dfZGlydHlfbG9ja19pbml0KF9kKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBkbyB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAg IHNwaW5fbG9ja19pbml0KCYoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkubG9jayk7ICAgICAg ICBcDQorICAgICAgICAoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkubG9ja2VyID0gLTE7ICAg ICAgICAgICAgICAgICAgXA0KKyAgICAgICAgKF9kKS0+YXJjaC5wYWdpbmcubG9nX2RpcnR5Lmxv Y2tlcl9mdW5jdGlvbiA9ICJub2JvZHkiOyAgIFwNCisgICAgfSB3aGlsZSAoMCkNCisNCisjZGVm aW5lIGxvZ19kaXJ0eV9sb2NrKF9kKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgIGlmICh1 bmxpa2VseSgoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkubG9ja2VyPT1jdXJyZW50LT5wcm9j ZXNzb3IpKVwNCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICBwcmludGsoIkVy cm9yOiBwYWdpbmcgbG9nIGRpcnR5IGxvY2sgaGVsZCBieSAlc1xuIiwgICAgICAgICAgICAgIFwN CisgICAgICAgICAgICAgICAgICAgKF9kKS0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmxvY2tlcl9m dW5jdGlvbik7ICAgICAgICAgICAgIFwNCisgICAgICAgICAgICBCVUcoKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwNCisgICAgICAgIHNwaW5fbG9jaygmKF9kKS0+YXJjaC5wYWdpbmcubG9n X2RpcnR5LmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgIEFTU0VSVCgo X2QpLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkubG9ja2VyID09IC0xKTsgICAgICAgICAgICAgICAg ICAgIFwNCisgICAgICAgIChfZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5sb2NrZXIgPSBjdXJy ZW50LT5wcm9jZXNzb3I7ICAgICAgICAgICAgIFwNCisgICAgICAgIChfZCktPmFyY2gucGFnaW5n LmxvZ19kaXJ0eS5sb2NrZXJfZnVuY3Rpb24gPSBfX2Z1bmNfXzsgICAgICAgICAgICAgIFwNCisg ICAgfSB3aGlsZSAoMCkNCisNCisjZGVmaW5lIGxvZ19kaXJ0eV91bmxvY2soX2QpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgZG8geyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwNCisgICAgICAgIEFTU0VSVCgoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkubG9ja2VyID09 IGN1cnJlbnQtPnByb2Nlc3Nvcik7IFwNCisgICAgICAgIChfZCktPmFyY2gucGFnaW5nLmxvZ19k aXJ0eS5sb2NrZXIgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgIChf ZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5sb2NrZXJfZnVuY3Rpb24gPSAibm9ib2R5IjsgICAg ICAgICAgIFwNCisgICAgICAgIHNwaW5fdW5sb2NrKCYoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGly dHkubG9jayk7ICAgICAgICAgICAgICAgICAgIFwNCisgICAgfSB3aGlsZSAoMCkNCisNCisvKiBh bGxvY2F0ZSBiaXRtYXAgcmVzb3VyY2VzIGZvciBsb2cgZGlydHkgKi8NCitpbnQgcGFnaW5nX2Fs bG9jX2xvZ19kaXJ0eV9iaXRtYXAoc3RydWN0IGRvbWFpbiAqZCkNCit7DQorICAgIEFTU0VSVChk LT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwID09IE5VTEwpOw0KKyAgICBkLT5hcmNoLnBh Z2luZy5sb2dfZGlydHkuYml0bWFwX3NpemUgPQ0KKyAgICAgICAgKGRvbWFpbl9nZXRfbWF4aW11 bV9ncGZuKGQpICsgQklUU19QRVJfTE9ORykgJiB+KEJJVFNfUEVSX0xPTkcgLSAxKTsNCisgICAg ZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcCA9IA0KKyAgICAgICAgeG1hbGxvY19hcnJh eSh1bnNpZ25lZCBsb25nLA0KKyAgICAgICAgICAgICAgICAgICAgICBkLT5hcmNoLnBhZ2luZy5s b2dfZGlydHkuYml0bWFwX3NpemUgLyBCSVRTX1BFUl9MT05HKTsNCisgICAgaWYgKCBkLT5hcmNo LnBhZ2luZy5sb2dfZGlydHkuYml0bWFwID09IE5VTEwgKQ0KKyAgICB7DQorICAgICAgICBkLT5h cmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwX3NpemUgPSAwOw0KKyAgICAgICAgcmV0dXJuIC1F Tk9NRU07DQorICAgIH0NCisgICAgbWVtc2V0KGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRt YXAsIDAsDQorICAgICAgICAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwX3NpemUv OCk7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiBmcmVlIGJpdG1hcCByZXNvdXJjZXMg Ki8NCit2b2lkIHBhZ2luZ19mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoc3RydWN0IGRvbWFpbiAqZCkN Cit7DQorICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXBfc2l6ZSA9IDA7DQorICAg IGlmICggZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcCApDQorICAgIHsNCisgICAgICAg IHhmcmVlKGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXApOw0KKyAgICAgICAgZC0+YXJj aC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcCA9IE5VTEw7DQorICAgIH0NCit9DQorDQoraW50IHBh Z2luZ19sb2dfZGlydHlfZW5hYmxlKHN0cnVjdCBkb21haW4gKmQpDQorew0KKyAgICBpbnQgcmV0 Ow0KKw0KKyAgICBkb21haW5fcGF1c2UoZCk7DQorICAgIGxvZ19kaXJ0eV9sb2NrKGQpOw0KKw0K KyAgICBpZiAoIHBhZ2luZ19tb2RlX2xvZ19kaXJ0eShkKSApDQorICAgIHsNCisgICAgICAgIHJl dCA9IC1FSU5WQUw7DQorICAgICAgICBnb3RvIG91dDsNCisgICAgfQ0KKw0KKyAgICByZXQgPSBw YWdpbmdfYWxsb2NfbG9nX2RpcnR5X2JpdG1hcChkKTsNCisgICAgaWYgKCByZXQgIT0gMCApDQor ICAgIHsNCisgICAgICAgIHBhZ2luZ19mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoZCk7DQorICAgICAg ICBnb3RvIG91dDsNCisgICAgfQ0KKw0KKyAgICByZXQgPSBkLT5hcmNoLnBhZ2luZy5sb2dfZGly dHkuZW5hYmxlX2xvZ19kaXJ0eShkKTsNCisgICAgaWYgKCByZXQgIT0gMCApDQorICAgICAgICBw YWdpbmdfZnJlZV9sb2dfZGlydHlfYml0bWFwKGQpOw0KKw0KKyBvdXQ6DQorICAgIGxvZ19kaXJ0 eV91bmxvY2soZCk7DQorICAgIGRvbWFpbl91bnBhdXNlKGQpOw0KKyAgICByZXR1cm4gcmV0Ow0K K30NCisNCitpbnQgcGFnaW5nX2xvZ19kaXJ0eV9kaXNhYmxlKHN0cnVjdCBkb21haW4gKmQpDQor ew0KKyAgICBpbnQgcmV0Ow0KKw0KKyAgICBkb21haW5fcGF1c2UoZCk7DQorICAgIGxvZ19kaXJ0 eV9sb2NrKGQpOw0KKyAgICByZXQgPSBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuZGlzYWJsZV9s b2dfZGlydHkoZCk7DQorICAgIGlmICggIXBhZ2luZ19tb2RlX2xvZ19kaXJ0eShkKSApDQorICAg ICAgICBwYWdpbmdfZnJlZV9sb2dfZGlydHlfYml0bWFwKGQpOw0KKyAgICBsb2dfZGlydHlfdW5s b2NrKGQpOw0KKyAgICBkb21haW5fdW5wYXVzZShkKTsNCisNCisgICAgcmV0dXJuIHJldDsNCit9 DQorDQorLyogTWFyayBhIHBhZ2UgYXMgZGlydHkgKi8NCit2b2lkIHBhZ2luZ19tYXJrX2RpcnR5 KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ3Vlc3RfbWZuKQ0KK3sNCisgICAgdW5z aWduZWQgbG9uZyBwZm47DQorICAgIG1mbl90IGdtZm47DQorDQorICAgIGdtZm4gPSBfbWZuKGd1 ZXN0X21mbik7DQorDQorICAgIGlmICggIXBhZ2luZ19tb2RlX2xvZ19kaXJ0eShkKSB8fCAhbWZu X3ZhbGlkKGdtZm4pICkNCisgICAgICAgIHJldHVybjsNCisNCisgICAgbG9nX2RpcnR5X2xvY2so ZCk7DQorDQorICAgIEFTU0VSVChkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwICE9IE5V TEwpOw0KKw0KKyAgICAvKiBXZSAvcmVhbGx5LyBtZWFuIFBGTiBoZXJlLCBldmVuIGZvciBub24t dHJhbnNsYXRlZCBndWVzdHMuICovDQorICAgIHBmbiA9IGdldF9ncGZuX2Zyb21fbWZuKG1mbl94 KGdtZm4pKTsNCisNCisgICAgLyoNCisgICAgICogVmFsdWVzIHdpdGggdGhlIE1TQiBzZXQgZGVu b3RlIE1GTnMgdGhhdCBhcmVuJ3QgcmVhbGx5IHBhcnQgb2YgdGhlIA0KKyAgICAgKiBkb21haW4n cyBwc2V1ZG8tcGh5c2ljYWwgbWVtb3J5IG1hcCAoZS5nLiwgdGhlIHNoYXJlZCBpbmZvIGZyYW1l KS4NCisgICAgICogTm90aGluZyB0byBkbyBoZXJlLi4uDQorICAgICAqLw0KKyAgICBpZiAoIHVu bGlrZWx5KCFWQUxJRF9NMlAocGZuKSkgKQ0KKyAgICAgICAgcmV0dXJuOw0KKw0KKyAgICBpZiAo IGxpa2VseShwZm4gPCBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwX3NpemUpICkgDQor ICAgIHsgDQorICAgICAgICBpZiAoICFfX3Rlc3RfYW5kX3NldF9iaXQocGZuLCBkLT5hcmNoLnBh Z2luZy5sb2dfZGlydHkuYml0bWFwKSApDQorICAgICAgICB7DQorICAgICAgICAgICAgUEFHSU5H X0RFQlVHKExPR0RJUlRZLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgIm1hcmtlZCBtZm4g JSIgUFJJX21mbiAiIChwZm49JWx4KSwgZG9tICVkXG4iLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICBtZm5feChnbWZuKSwgcGZuLCBkLT5kb21haW5faWQpOw0KKyAgICAgICAgICAgIGQtPmFy Y2gucGFnaW5nLmxvZ19kaXJ0eS5kaXJ0eV9jb3VudCsrOw0KKyAgICAgICAgfQ0KKyAgICB9DQor ICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgUEFHSU5HX1BSSU5USygibWFya19kaXJ0eSBPT1Ih ICINCisgICAgICAgICAgICAgICAgICAgICAgIm1mbj0lIiBQUklfbWZuICIgcGZuPSVseCBtYXg9 JXggKGRvbSAlZClcbiINCisgICAgICAgICAgICAgICAgICAgICAgIm93bmVyPSVkIGM9JTA4eCB0 PSUiIFBSdHlwZV9pbmZvICJcbiIsDQorICAgICAgICAgICAgICAgICAgICAgIG1mbl94KGdtZm4p LCANCisgICAgICAgICAgICAgICAgICAgICAgcGZuLCANCisgICAgICAgICAgICAgICAgICAgICAg ZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcF9zaXplLA0KKyAgICAgICAgICAgICAgICAg ICAgICBkLT5kb21haW5faWQsDQorICAgICAgICAgICAgICAgICAgICAgIChwYWdlX2dldF9vd25l cihtZm5fdG9fcGFnZShnbWZuKSkNCisgICAgICAgICAgICAgICAgICAgICAgID8gcGFnZV9nZXRf b3duZXIobWZuX3RvX3BhZ2UoZ21mbikpLT5kb21haW5faWQNCisgICAgICAgICAgICAgICAgICAg ICAgIDogLTEpLA0KKyAgICAgICAgICAgICAgICAgICAgICBtZm5fdG9fcGFnZShnbWZuKS0+Y291 bnRfaW5mbywgDQorICAgICAgICAgICAgICAgICAgICAgIG1mbl90b19wYWdlKGdtZm4pLT51Lmlu dXNlLnR5cGVfaW5mbyk7DQorICAgIH0NCisgICAgDQorICAgIGxvZ19kaXJ0eV91bmxvY2soZCk7 DQorfQ0KKw0KKy8qIFJlYWQgYSBkb21haW4ncyBsb2ctZGlydHkgYml0bWFwIGFuZCBzdGF0cy4g IElmIHRoZSBvcGVyYXRpb24gaXMgYSBDTEVBTiwgDQorICogY2xlYXIgdGhlIGJpdG1hcCBhbmQg c3RhdHMgYXMgd2VsbC4gKi8NCitpbnQgcGFnaW5nX2xvZ19kaXJ0eV9vcChzdHJ1Y3QgZG9tYWlu ICpkLCBzdHJ1Y3QgeGVuX2RvbWN0bF9zaGFkb3dfb3AgKnNjKQ0KK3sNCisgICAgaW50IGksIHJ2 ID0gMCwgY2xlYW4gPSAwLCBwZWVrID0gMTsNCisNCisgICAgZG9tYWluX3BhdXNlKGQpOw0KKyAg ICBsb2dfZGlydHlfbG9jayhkKTsNCisNCisgICAgY2xlYW4gPSAoc2MtPm9wID09IFhFTl9ET01D VExfU0hBRE9XX09QX0NMRUFOKTsNCisNCisgICAgUEFHSU5HX0RFQlVHKExPR0RJUlRZLCAibG9n LWRpcnR5ICVzOiBkb20gJXUgZmF1bHRzPSV1IGRpcnR5PSV1XG4iLCANCisgICAgICAgICAgICAg ICAgIChjbGVhbikgPyAiY2xlYW4iIDogInBlZWsiLA0KKyAgICAgICAgICAgICAgICAgZC0+ZG9t YWluX2lkLA0KKyAgICAgICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmZhdWx0 X2NvdW50LCANCisgICAgICAgICAgICAgICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5kaXJ0 eV9jb3VudCk7DQorDQorICAgIHNjLT5zdGF0cy5mYXVsdF9jb3VudCA9IGQtPmFyY2gucGFnaW5n LmxvZ19kaXJ0eS5mYXVsdF9jb3VudDsNCisgICAgc2MtPnN0YXRzLmRpcnR5X2NvdW50ID0gZC0+ YXJjaC5wYWdpbmcubG9nX2RpcnR5LmRpcnR5X2NvdW50Ow0KKyAgICANCisgICAgaWYgKCBjbGVh biApDQorICAgIHsNCisgICAgICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5mYXVsdF9jb3Vu dCA9IDA7DQorICAgICAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuZGlydHlfY291bnQgPSAw Ow0KKyAgICAgICAgDQorICAgICAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuY2xlYW5fZGly dHlfYml0bWFwKGQpOw0KKyAgICB9DQorDQorICAgIGlmICggZ3Vlc3RfaGFuZGxlX2lzX251bGwo c2MtPmRpcnR5X2JpdG1hcCkgKQ0KKyAgICAgICAgLyogY2FsbGVyIG1heSBoYXZlIHdhbnRlZCBq dXN0IHRvIGNsZWFuIHRoZSBzdGF0ZSBvciBhY2Nlc3Mgc3RhdHMuICovDQorICAgICAgICBwZWVr ID0gMDsNCisNCisgICAgaWYgKCAocGVlayB8fCBjbGVhbikgJiYgKGQtPmFyY2gucGFnaW5nLmxv Z19kaXJ0eS5iaXRtYXAgPT0gTlVMTCkgKQ0KKyAgICB7DQorICAgICAgICBydiA9IC1FSU5WQUw7 IC8qIHBlcmhhcHMgc2hvdWxkIGJlIEVOT01FTT8gKi8NCisgICAgICAgIGdvdG8gb3V0Ow0KKyAg ICB9DQorIA0KKyAgICBpZiAoIHNjLT5wYWdlcyA+IGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5i aXRtYXBfc2l6ZSApDQorICAgICAgICBzYy0+cGFnZXMgPSBkLT5hcmNoLnBhZ2luZy5sb2dfZGly dHkuYml0bWFwX3NpemU7DQorDQorI2RlZmluZSBDSFVOSyAoOCoxMDI0KSAvKiBUcmFuc2ZlciBh bmQgY2xlYXIgaW4gMWtCIGNodW5rcyBmb3IgTDEgY2FjaGUuICovDQorICAgIGZvciAoIGkgPSAw OyBpIDwgc2MtPnBhZ2VzOyBpICs9IENIVU5LICkNCisgICAgew0KKyAgICAgICAgaW50IGJ5dGVz ID0gKCgoKHNjLT5wYWdlcyAtIGkpID4gQ0hVTkspDQorICAgICAgICAgICAgICAgICAgICAgID8g Q0hVTksNCisgICAgICAgICAgICAgICAgICAgICAgOiAoc2MtPnBhZ2VzIC0gaSkpICsgNykgLyA4 Ow0KKw0KKyAgICAgICAgaWYgKCBsaWtlbHkocGVlaykgKQ0KKyAgICAgICAgew0KKyAgICAgICAg ICAgIGlmICggY29weV90b19ndWVzdF9vZmZzZXQoDQorICAgICAgICAgICAgICAgIHNjLT5kaXJ0 eV9iaXRtYXAsIGkvOCwNCisgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKilkLT5hcmNoLnBhZ2lu Zy5sb2dfZGlydHkuYml0bWFwICsgKGkvOCksIGJ5dGVzKSApDQorICAgICAgICAgICAgew0KKyAg ICAgICAgICAgICAgICBydiA9IC1FRkFVTFQ7DQorICAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0K KyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmICggY2xlYW4gKQ0KKyAg ICAgICAgICAgIG1lbXNldCgodWludDhfdCAqKWQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRt YXAgKyAoaS84KSwgMCwgYnl0ZXMpOw0KKyAgICB9DQorI3VuZGVmIENIVU5LDQorDQorIG91dDoN CisgICAgbG9nX2RpcnR5X3VubG9jayhkKTsNCisgICAgZG9tYWluX3VucGF1c2UoZCk7DQorICAg IHJldHVybiBydjsNCit9DQorDQorDQorLyogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gdGFrZXMg dGhyZWUgZnVuY3Rpb24gcG9pbnRlcnMuIENhbGxlcnMgbXVzdCBzdXBwbHkNCisgKiB0aGVzZSBm dW5jdGlvbnMgZm9yIGxvZyBkaXJ0eSBjb2RlIHRvIGNhbGwuIFRoaXMgZnVuY3Rpb24gdXN1YWxs eSBpcyANCisgKiBpbnZva2VkIHdoZW4gcGFnaW5nIGlzIGVuYWJsZWQuIENoZWNrIHNoYWRvd19l bmFibGUoKSBhbmQgaGFwX2VuYWJsZSgpIGZvciANCisgKiByZWZlcmVuY2UuDQorICovDQordm9p ZCBwYWdpbmdfbG9nX2RpcnR5X2luaXQoc3RydWN0IGRvbWFpbiAqZCwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgICAgKCplbmFibGVfbG9nX2RpcnR5KShzdHJ1Y3QgZG9tYWluICpk KSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgKCpkaXNhYmxlX2xvZ19kaXJ0 eSkoc3RydWN0IGRvbWFpbiAqZCksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAg ICgqY2xlYW5fZGlydHlfYml0bWFwKShzdHJ1Y3QgZG9tYWluICpkKSkNCit7DQorICAgIC8qIFdl IGluaXRpYWxpemUgbG9nIGRpcnR5IGxvY2sgZmlyc3QgKi8NCisgICAgbG9nX2RpcnR5X2xvY2tf aW5pdChkKTsNCisgICAgDQorICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5lbmFibGVfbG9n X2RpcnR5ID0gZW5hYmxlX2xvZ19kaXJ0eTsNCisgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5 LmRpc2FibGVfbG9nX2RpcnR5ID0gZGlzYWJsZV9sb2dfZGlydHk7DQorICAgIGQtPmFyY2gucGFn aW5nLmxvZ19kaXJ0eS5jbGVhbl9kaXJ0eV9iaXRtYXAgPSBjbGVhbl9kaXJ0eV9iaXRtYXA7DQor fQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov DQorLyogICAgICAgICAgIENPREUgRk9SIFBBR0lORyBTVVBQT1JUICAgICAgICAgICAgKi8NCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KIC8qIERv bWFpbiBwYWdpbmcgc3RydWN0IGluaXRpYWxpemF0aW9uLiAqLw0KIHZvaWQgcGFnaW5nX2RvbWFp bl9pbml0KHN0cnVjdCBkb21haW4gKmQpDQogew0KQEAgLTY1LDExICszMjgsNjAgQEAgaW50IHBh Z2luZ19kb21jdGwoc3RydWN0IGRvbWFpbiAqZCwgeGVuXw0KIGludCBwYWdpbmdfZG9tY3RsKHN0 cnVjdCBkb21haW4gKmQsIHhlbl9kb21jdGxfc2hhZG93X29wX3QgKnNjLA0KICAgICAgICAgICAg ICAgICAgIFhFTl9HVUVTVF9IQU5ETEUodm9pZCkgdV9kb21jdGwpDQogew0KKyAgICBpbnQgcmM7 DQorDQorICAgIGlmICggdW5saWtlbHkoZCA9PSBjdXJyZW50LT5kb21haW4pICkNCisgICAgew0K KyAgICAgICAgZ2RwcmludGsoWEVOTE9HX0lORk8sICJEb20gJXUgdHJpZWQgdG8gZG8gYSBzaGFk b3cgb3Agb24gaXRzZWxmLlxuIiwNCisgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7DQor ICAgICAgICByZXR1cm4gLUVJTlZBTDsNCisgICAgfQ0KKyAgICANCisgICAgaWYgKCB1bmxpa2Vs eShkLT5pc19keWluZykgKQ0KKyAgICB7DQorICAgICAgICBnZHByaW50ayhYRU5MT0dfSU5GTywg Iklnbm9yaW5nIHNoYWRvdyBvcCBvbiBkeWluZyBkb21haW4gJXVcbiIsDQorICAgICAgICAgICAg ICAgICBkLT5kb21haW5faWQpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAg aWYgKCB1bmxpa2VseShkLT52Y3B1WzBdID09IE5VTEwpICkNCisgICAgew0KKyAgICAgICAgUEFH SU5HX0VSUk9SKCJTaGFkb3cgb3Agb24gYSBkb21haW4gKCV1KSB3aXRoIG5vIHZjcHVzXG4iLA0K KyAgICAgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7DQorICAgICAgICByZXR1cm4gLUVJ TlZBTDsNCisgICAgfQ0KKyAgICANCisgICAgLyogQ29kZSB0byBoYW5kbGUgbG9nLWRpcnR5LiBO b3RlIHRoYXQgc29tZSBsb2cgZGlydHkgb3BlcmF0aW9ucw0KKyAgICAgKiBwaWdneS1iYWNrIG9u IHNoYWRvdyBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgd2hlbiANCisgICAgICogWEVOX0RPTUNU TF9TSEFET1dfT1BfT0ZGIGlzIGNhbGxlZCwgaXQgZmlyc3QgY2hlY2tzIHdoZXRoZXIgbG9nIGRp cnR5DQorICAgICAqIG1vZGUgaXMgZW5hYmxlZC4gSWYgZG9lcywgd2UgZGlzYWJsZXMgbG9nIGRp cnR5IGFuZCBjb250aW51ZXMgd2l0aCANCisgICAgICogc2hhZG93IGNvZGUuIEZvciB0aGlzIHJl YXNvbiwgd2UgbmVlZCB0byBmdXJ0aGVyIGRpc3BhdGNoIGRvbWN0bCANCisgICAgICogdG8gbmV4 dC1sZXZlbCBwYWdpbmcgY29kZSAoc2hhZG93IG9yIGhhcCkuDQorICAgICAqLw0KKyAgICBzd2l0 Y2ggKCBzYy0+b3AgKQ0KKyAgICB7DQorICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfRU5B QkxFX0xPR0RJUlRZOg0KKyAgICAgICAgcmV0dXJuIHBhZ2luZ19sb2dfZGlydHlfZW5hYmxlKGQp OwkNCisJDQorICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfRU5BQkxFOgkNCisgICAgICAg IGlmICggc2MtPm1vZGUgJiBYRU5fRE9NQ1RMX1NIQURPV19FTkFCTEVfTE9HX0RJUlRZICkNCisg ICAgICAgICAgICByZXR1cm4gcGFnaW5nX2xvZ19kaXJ0eV9lbmFibGUoZCk7DQorDQorICAgIGNh c2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfT0ZGOg0KKyAgICAgICAgaWYgKCBwYWdpbmdfbW9kZV9s b2dfZGlydHkoZCkgKQ0KKyAgICAgICAgICAgIGlmICggKHJjID0gcGFnaW5nX2xvZ19kaXJ0eV9k aXNhYmxlKGQpKSAhPSAwICkgDQorICAgICAgICAgICAgICAgIHJldHVybiByYzsNCisNCisgICAg Y2FzZSBYRU5fRE9NQ1RMX1NIQURPV19PUF9DTEVBTjoNCisgICAgY2FzZSBYRU5fRE9NQ1RMX1NI QURPV19PUF9QRUVLOg0KKwlyZXR1cm4gcGFnaW5nX2xvZ19kaXJ0eV9vcChkLCBzYyk7DQorICAg IH0NCisJDQogICAgIC8qIEhlcmUsIGRpc3BhdGNoIGRvbWN0bCB0byB0aGUgYXBwcm9wcmlhdGUg cGFnaW5nIGNvZGUgKi8NCiAgICAgaWYgKCBvcHRfaGFwX2VuYWJsZWQgJiYgaXNfaHZtX2RvbWFp bihkKSApDQotICAgICAgICByZXR1cm4gaGFwX2RvbWN0bChkLCBzYywgdV9kb21jdGwpOw0KLSAg ICBlbHNlDQotICAgICAgICByZXR1cm4gc2hhZG93X2RvbWN0bChkLCBzYywgdV9kb21jdGwpOw0K KwlyZXR1cm4gaGFwX2RvbWN0bChkLCBzYywgdV9kb21jdGwpOw0KKyAgICBlbHNlDQorCXJldHVy biBzaGFkb3dfZG9tY3RsKGQsIHNjLCB1X2RvbWN0bCk7DQogfQ0KIA0KIC8qIENhbGwgd2hlbiBk ZXN0cm95aW5nIGEgZG9tYWluICovDQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiAtciA5YmM2YTE5NmFk MGUgeGVuL2FyY2gveDg2L21tL3NoYWRvdy9jb21tb24uYw0KLS0tIGEveGVuL2FyY2gveDg2L21t L3NoYWRvdy9jb21tb24uYwlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hl bi9hcmNoL3g4Ni9tbS9zaGFkb3cvY29tbW9uLmMJVGh1IEp1biAwNyAwMzo1Mzo1OSAyMDA3IC0w NTAwDQpAQCAtODcsOCArODcsNiBAQCBfX2luaXRjYWxsKHNoYWRvd19hdWRpdF9rZXlfaW5pdCk7 DQogX19pbml0Y2FsbChzaGFkb3dfYXVkaXRfa2V5X2luaXQpOw0KICNlbmRpZiAvKiBTSEFET1df QVVESVQgKi8NCiANCi1zdGF0aWMgdm9pZCBzaF9mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoc3RydWN0 IGRvbWFpbiAqZCk7DQotDQogaW50IF9zaGFkb3dfbW9kZV9yZWZjb3VudHMoc3RydWN0IGRvbWFp biAqZCkNCiB7DQogICAgIHJldHVybiBzaGFkb3dfbW9kZV9yZWZjb3VudHMoZCk7DQpAQCAtNTQx LDcgKzUzOSw3IEBAIHNoX3ZhbGlkYXRlX2d1ZXN0X2VudHJ5KHN0cnVjdCB2Y3B1ICp2LCANCiAg ICAgaW50IHJlc3VsdCA9IDA7DQogICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBtZm5fdG9f cGFnZShnbWZuKTsNCiANCi0gICAgc2hfbWFya19kaXJ0eSh2LT5kb21haW4sIGdtZm4pOw0KKyAg ICBwYWdpbmdfbWFya19kaXJ0eSh2LT5kb21haW4sIG1mbl94KGdtZm4pKTsNCiAgICAgDQogICAg IC8vIERldGVybWluZSB3aGljaCB0eXBlcyBvZiBzaGFkb3dzIGFyZSBhZmZlY3RlZCwgYW5kIHVw ZGF0ZSBlYWNoLg0KICAgICAvLw0KQEAgLTI0NTUsNiArMjQ1MywxMCBAQCBpbnQgc2hhZG93X2Vu YWJsZShzdHJ1Y3QgZG9tYWluICpkLCB1MzIgDQogICAgICAgICB9ICAgICAgICANCiAgICAgfQ0K IA0KKyAgICAvKiBpbml0aWFsaXplIGxvZyBkaXJ0eSBoZXJlICovDQorICAgIHBhZ2luZ19sb2df ZGlydHlfaW5pdChkLCBzaGFkb3dfZW5hYmxlX2xvZ19kaXJ0eSwgDQorICAgICAgICAgICAgICAg ICAgICAgICAgICBzaGFkb3dfZGlzYWJsZV9sb2dfZGlydHksIHNoYWRvd19jbGVhbl9kaXJ0eV9i aXRtYXApOw0KKw0KICAgICAvKiBJbml0IHRoZSBQMk0gdGFibGUuICBNdXN0IGJlIGRvbmUgYmVm b3JlIHdlIHRha2UgdGhlIHNoYWRvdyBsb2NrIA0KICAgICAgKiB0byBhdm9pZCBwb3NzaWJsZSBk ZWFkbG9jay4gKi8NCiAgICAgaWYgKCBtb2RlICYgUEdfdHJhbnNsYXRlICkNCkBAIC0yNDYzLDYg KzI0NjUsNyBAQCBpbnQgc2hhZG93X2VuYWJsZShzdHJ1Y3QgZG9tYWluICpkLCB1MzIgDQogICAg ICAgICBpZiAocnYgIT0gMCkNCiAgICAgICAgICAgICBnb3RvIG91dF91bmxvY2tlZDsNCiAgICAg fQ0KKw0KIA0KICAgICBzaGFkb3dfbG9jayhkKTsNCiANCkBAIC0yNTY1LDcgKzI1NjgsNyBAQCB2 b2lkIHNoYWRvd190ZWFyZG93bihzdHJ1Y3QgZG9tYWluICpkKQ0KICAgICAgICAgaWYgKGQtPmFy Y2gucGFnaW5nLnNoYWRvdy5oYXNoX3RhYmxlKSANCiAgICAgICAgICAgICBzaGFkb3dfaGFzaF90 ZWFyZG93bihkKTsNCiAgICAgICAgIC8qIFJlbGVhc2UgdGhlIGxvZy1kaXJ0eSBiaXRtYXAgb2Yg ZGlydGllZCBwYWdlcyAqLw0KLSAgICAgICAgc2hfZnJlZV9sb2dfZGlydHlfYml0bWFwKGQpOw0K KyAgICAgICAgcGFnaW5nX2ZyZWVfbG9nX2RpcnR5X2JpdG1hcChkKTsNCiAgICAgICAgIC8qIFNo b3VsZCBub3QgaGF2ZSBhbnkgbW9yZSBtZW1vcnkgaGVsZCAqLw0KICAgICAgICAgU0hBRE9XX1BS SU5USygidGVhcmRvd24gZG9uZS4iDQogICAgICAgICAgICAgICAgICAgICAgICAiICBTaGFkb3cg cGFnZXMgdG90YWwgPSAldSwgZnJlZSA9ICV1LCBwMm09JXVcbiIsDQpAQCAtMjcxOCw5OCArMjcy MSw2IEBAIHN0YXRpYyBpbnQgc2hhZG93X3Rlc3RfZGlzYWJsZShzdHJ1Y3QgZG8NCiAgICAgZG9t YWluX3BhdXNlKGQpOw0KICAgICBzaGFkb3dfbG9jayhkKTsNCiAgICAgcmV0ID0gc2hhZG93X29u ZV9iaXRfZGlzYWJsZShkLCBQR19TSF9lbmFibGUpOw0KLSAgICBzaGFkb3dfdW5sb2NrKGQpOw0K LSAgICBkb21haW5fdW5wYXVzZShkKTsNCi0NCi0gICAgcmV0dXJuIHJldDsNCi19DQotDQotc3Rh dGljIGludA0KLXNoX2FsbG9jX2xvZ19kaXJ0eV9iaXRtYXAoc3RydWN0IGRvbWFpbiAqZCkNCi17 DQotICAgIEFTU0VSVChkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwID09IE5VTEwp Ow0KLSAgICBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwX3NpemUgPQ0KLSAgICAg ICAgKGRvbWFpbl9nZXRfbWF4aW11bV9ncGZuKGQpICsgQklUU19QRVJfTE9ORykgJiB+KEJJVFNf UEVSX0xPTkcgLSAxKTsNCi0gICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCA9 DQotICAgICAgICB4bWFsbG9jX2FycmF5KHVuc2lnbmVkIGxvbmcsDQotICAgICAgICAgICAgICAg ICAgICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXBfc2l6ZSAvIEJJVFNfUEVS X0xPTkcpOw0KLSAgICBpZiAoIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXAgPT0g TlVMTCApDQotICAgIHsNCi0gICAgICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRt YXBfc2l6ZSA9IDA7DQotICAgICAgICByZXR1cm4gLUVOT01FTTsNCi0gICAgfQ0KLSAgICBtZW1z ZXQoZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCwgMCwNCi0gICAgICAgICAgIGQt PmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXBfc2l6ZS84KTsNCi0NCi0gICAgcmV0dXJu IDA7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkDQotc2hfZnJlZV9sb2dfZGlydHlfYml0bWFwKHN0cnVj dCBkb21haW4gKmQpDQotew0KLSAgICBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFw X3NpemUgPSAwOw0KLSAgICBpZiAoIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXAg KQ0KLSAgICB7DQotICAgICAgICB4ZnJlZShkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0 bWFwKTsNCi0gICAgICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXAgPSBOVUxM Ow0KLSAgICB9DQotfQ0KLQ0KLXN0YXRpYyBpbnQgc2hhZG93X2xvZ19kaXJ0eV9lbmFibGUoc3Ry dWN0IGRvbWFpbiAqZCkNCi17DQotICAgIGludCByZXQ7DQotDQotICAgIGRvbWFpbl9wYXVzZShk KTsNCi0gICAgc2hhZG93X2xvY2soZCk7DQotDQotICAgIGlmICggc2hhZG93X21vZGVfbG9nX2Rp cnR5KGQpICkNCi0gICAgew0KLSAgICAgICAgcmV0ID0gLUVJTlZBTDsNCi0gICAgICAgIGdvdG8g b3V0Ow0KLSAgICB9DQotDQotICAgIGlmICggc2hhZG93X21vZGVfZW5hYmxlZChkKSApDQotICAg IHsNCi0gICAgICAgIC8qIFRoaXMgZG9tYWluIGFscmVhZHkgaGFzIHNvbWUgc2hhZG93czogbmVl ZCB0byBjbGVhciB0aGVtIG91dCANCi0gICAgICAgICAqIG9mIHRoZSB3YXkgdG8gbWFrZSBzdXJl IHRoYXQgYWxsIHJlZmVyZW5jZXMgdG8gZ3Vlc3QgbWVtb3J5IGFyZSANCi0gICAgICAgICAqIHBy b3Blcmx5IHdyaXRlLXByb3RlY3RlZCAqLw0KLSAgICAgICAgc2hhZG93X2Jsb3dfdGFibGVzKGQp Ow0KLSAgICB9DQotDQotI2lmIChTSEFET1dfT1BUSU1JWkFUSU9OUyAmIFNIT1BUX0xJTlVYX0wz X1RPUExFVkVMKQ0KLSAgICAvKiAzMmJpdCBQViBndWVzdHMgb24gNjRiaXQgeGVuIGJlaGF2ZSBs aWtlIG9sZGVyIDY0Yml0IGxpbnV4OiB0aGV5DQotICAgICAqIGNoYW5nZSBhbiBsNGUgaW5zdGVh ZCBvZiBjcjMgdG8gc3dpdGNoIHRhYmxlcy4gIEdpdmUgdGhlbSB0aGUNCi0gICAgICogc2FtZSBv cHRpbWl6YXRpb24gKi8NCi0gICAgaWYgKCBpc19wdl8zMm9uNjRfZG9tYWluKGQpICkNCi0gICAg ICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5vcHRfZmxhZ3MgPSBTSE9QVF9MSU5VWF9MM19UT1BM RVZFTDsNCi0jZW5kaWYNCi0NCi0gICAgcmV0ID0gc2hfYWxsb2NfbG9nX2RpcnR5X2JpdG1hcChk KTsNCi0gICAgaWYgKCByZXQgIT0gMCApDQotICAgIHsNCi0gICAgICAgIHNoX2ZyZWVfbG9nX2Rp cnR5X2JpdG1hcChkKTsNCi0gICAgICAgIGdvdG8gb3V0Ow0KLSAgICB9DQotDQotICAgIHJldCA9 IHNoYWRvd19vbmVfYml0X2VuYWJsZShkLCBQR19sb2dfZGlydHkpOw0KLSAgICBpZiAoIHJldCAh PSAwICkNCi0gICAgICAgIHNoX2ZyZWVfbG9nX2RpcnR5X2JpdG1hcChkKTsNCi0NCi0gb3V0Og0K LSAgICBzaGFkb3dfdW5sb2NrKGQpOw0KLSAgICBkb21haW5fdW5wYXVzZShkKTsNCi0gICAgcmV0 dXJuIHJldDsNCi19DQotDQotc3RhdGljIGludCBzaGFkb3dfbG9nX2RpcnR5X2Rpc2FibGUoc3Ry dWN0IGRvbWFpbiAqZCkNCi17DQotICAgIGludCByZXQ7DQotDQotICAgIGRvbWFpbl9wYXVzZShk KTsNCi0gICAgc2hhZG93X2xvY2soZCk7DQotICAgIHJldCA9IHNoYWRvd19vbmVfYml0X2Rpc2Fi bGUoZCwgUEdfbG9nX2RpcnR5KTsNCi0gICAgaWYgKCAhc2hhZG93X21vZGVfbG9nX2RpcnR5KGQp ICkNCi0gICAgICAgIHNoX2ZyZWVfbG9nX2RpcnR5X2JpdG1hcChkKTsNCiAgICAgc2hhZG93X3Vu bG9jayhkKTsNCiAgICAgZG9tYWluX3VucGF1c2UoZCk7DQogDQpAQCAtMjg5MiwxNTAgKzI4MDMs NjIgQEAgdm9pZCBzaGFkb3dfY29udmVydF90b19sb2dfZGlydHkoc3RydWN0IA0KICAgICBCVUco KTsNCiB9DQogDQotDQotLyogUmVhZCBhIGRvbWFpbidzIGxvZy1kaXJ0eSBiaXRtYXAgYW5kIHN0 YXRzLiAgDQotICogSWYgdGhlIG9wZXJhdGlvbiBpcyBhIENMRUFOLCBjbGVhciB0aGUgYml0bWFw IGFuZCBzdGF0cyBhcyB3ZWxsLiAqLw0KLXN0YXRpYyBpbnQgc2hhZG93X2xvZ19kaXJ0eV9vcCgN Ci0gICAgc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHhlbl9kb21jdGxfc2hhZG93X29wICpzYykN Ci17DQotICAgIGludCBpLCBydiA9IDAsIGNsZWFuID0gMCwgcGVlayA9IDE7DQotDQotICAgIGRv bWFpbl9wYXVzZShkKTsNCisvKiBTaGFkb3cgc3BlY2lmaWMgY29kZSB3aGljaCBpcyBjYWxsZWQg aW4gcGFnaW5nX2xvZ19kaXJ0eV9lbmFibGUoKS4NCisgKiBSZXR1cm4gMCBpZiBubyBwcm9ibGVt IGZvdW5kLg0KKyAqLw0KK2ludCBzaGFkb3dfZW5hYmxlX2xvZ19kaXJ0eShzdHJ1Y3QgZG9tYWlu ICpkKQ0KK3sNCisgICAgaW50IHJldDsNCisNCisgICAgLyogc2hhZG93IGxvY2sgaXMgcmVxdWly ZWQgaGVyZSAqLw0KICAgICBzaGFkb3dfbG9jayhkKTsNCi0NCi0gICAgY2xlYW4gPSAoc2MtPm9w ID09IFhFTl9ET01DVExfU0hBRE9XX09QX0NMRUFOKTsNCi0NCi0gICAgU0hBRE9XX0RFQlVHKExP R0RJUlRZLCAibG9nLWRpcnR5ICVzOiBkb20gJXUgZmF1bHRzPSV1IGRpcnR5PSV1XG4iLCANCi0g ICAgICAgICAgICAgICAgICAoY2xlYW4pID8gImNsZWFuIiA6ICJwZWVrIiwNCi0gICAgICAgICAg ICAgICAgICBkLT5kb21haW5faWQsDQotICAgICAgICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcu c2hhZG93LmZhdWx0X2NvdW50LCANCi0gICAgICAgICAgICAgICAgICBkLT5hcmNoLnBhZ2luZy5z aGFkb3cuZGlydHlfY291bnQpOw0KLQ0KLSAgICBzYy0+c3RhdHMuZmF1bHRfY291bnQgPSBkLT5h cmNoLnBhZ2luZy5zaGFkb3cuZmF1bHRfY291bnQ7DQotICAgIHNjLT5zdGF0cy5kaXJ0eV9jb3Vu dCA9IGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9jb3VudDsNCi0NCi0gICAgaWYgKCBjbGVh biApDQotICAgIHsNCi0gICAgICAgIC8qIE5lZWQgdG8gcmV2b2tlIHdyaXRlIGFjY2VzcyB0byB0 aGUgZG9tYWluJ3MgcGFnZXMgYWdhaW4uDQotICAgICAgICAgKiBJbiBmdXR1cmUsIHdlJ2xsIGhh dmUgYSBsZXNzIGhlYXZ5LWhhbmRlZCBhcHByb2FjaCB0byB0aGlzLA0KLSAgICAgICAgICogYnV0 IGZvciBub3csIHdlIGp1c3QgdW5zaGFkb3cgZXZlcnl0aGluZyBleGNlcHQgWGVuLiAqLw0KKyAg ICBpZiAoIHNoYWRvd19tb2RlX2VuYWJsZWQoZCkgKQ0KKyAgICB7DQorICAgICAgICAvKiBUaGlz IGRvbWFpbiBhbHJlYWR5IGhhcyBzb21lIHNoYWRvd3M6IG5lZWQgdG8gY2xlYXIgdGhlbSBvdXQg DQorICAgICAgICAgKiBvZiB0aGUgd2F5IHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCByZWZlcmVuY2Vz IHRvIGd1ZXN0IG1lbW9yeSBhcmUgDQorICAgICAgICAgKiBwcm9wZXJseSB3cml0ZS1wcm90ZWN0 ZWQgKi8NCiAgICAgICAgIHNoYWRvd19ibG93X3RhYmxlcyhkKTsNCi0NCi0gICAgICAgIGQtPmFy Y2gucGFnaW5nLnNoYWRvdy5mYXVsdF9jb3VudCA9IDA7DQotICAgICAgICBkLT5hcmNoLnBhZ2lu Zy5zaGFkb3cuZGlydHlfY291bnQgPSAwOw0KLSAgICB9DQotDQotICAgIGlmICggZ3Vlc3RfaGFu ZGxlX2lzX251bGwoc2MtPmRpcnR5X2JpdG1hcCkgKQ0KLSAgICAgICAgLyogY2FsbGVyIG1heSBo YXZlIHdhbnRlZCBqdXN0IHRvIGNsZWFuIHRoZSBzdGF0ZSBvciBhY2Nlc3Mgc3RhdHMuICovDQot ICAgICAgICBwZWVrID0gMDsNCi0NCi0gICAgaWYgKCAocGVlayB8fCBjbGVhbikgJiYgKGQtPmFy Y2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXAgPT0gTlVMTCkgKQ0KLSAgICB7DQotICAgICAg ICBydiA9IC1FSU5WQUw7IC8qIHBlcmhhcHMgc2hvdWxkIGJlIEVOT01FTT8gKi8NCi0gICAgICAg IGdvdG8gb3V0Ow0KLSAgICB9DQotIA0KLSAgICBpZiAoIHNjLT5wYWdlcyA+IGQtPmFyY2gucGFn aW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXBfc2l6ZSApDQotICAgICAgICBzYy0+cGFnZXMgPSBkLT5h cmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwX3NpemU7DQotDQotI2RlZmluZSBDSFVOSyAo OCoxMDI0KSAvKiBUcmFuc2ZlciBhbmQgY2xlYXIgaW4gMWtCIGNodW5rcyBmb3IgTDEgY2FjaGUu ICovDQotICAgIGZvciAoIGkgPSAwOyBpIDwgc2MtPnBhZ2VzOyBpICs9IENIVU5LICkNCi0gICAg ew0KLSAgICAgICAgaW50IGJ5dGVzID0gKCgoKHNjLT5wYWdlcyAtIGkpID4gQ0hVTkspDQotICAg ICAgICAgICAgICAgICAgICAgID8gQ0hVTksNCi0gICAgICAgICAgICAgICAgICAgICAgOiAoc2Mt PnBhZ2VzIC0gaSkpICsgNykgLyA4Ow0KLQ0KLSAgICAgICAgaWYgKCBsaWtlbHkocGVlaykgKQ0K LSAgICAgICAgew0KLSAgICAgICAgICAgIGlmICggY29weV90b19ndWVzdF9vZmZzZXQoDQotICAg ICAgICAgICAgICAgIHNjLT5kaXJ0eV9iaXRtYXAsIGkvOCwNCi0gICAgICAgICAgICAgICAgKHVp bnQ4X3QgKilkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwICsgKGkvOCksIGJ5dGVz KSApDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBydiA9IC1FRkFVTFQ7DQotICAg ICAgICAgICAgICAgIGdvdG8gb3V0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0g ICAgICAgIGlmICggY2xlYW4gKQ0KLSAgICAgICAgICAgIG1lbXNldCgodWludDhfdCAqKWQtPmFy Y2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXAgKyAoaS84KSwgMCwgYnl0ZXMpOw0KLSAgICB9 DQotI3VuZGVmIENIVU5LDQotDQotIG91dDoNCisgICAgfQ0KKw0KKyNpZiAoU0hBRE9XX09QVElN SVpBVElPTlMgJiBTSE9QVF9MSU5VWF9MM19UT1BMRVZFTCkNCisgICAgLyogMzJiaXQgUFYgZ3Vl c3RzIG9uIDY0Yml0IHhlbiBiZWhhdmUgbGlrZSBvbGRlciA2NGJpdCBsaW51eDogdGhleQ0KKyAg ICAgKiBjaGFuZ2UgYW4gbDRlIGluc3RlYWQgb2YgY3IzIHRvIHN3aXRjaCB0YWJsZXMuICBHaXZl IHRoZW0gdGhlDQorICAgICAqIHNhbWUgb3B0aW1pemF0aW9uICovDQorICAgIGlmICggaXNfcHZf MzJvbjY0X2RvbWFpbihkKSApDQorICAgICAgICBkLT5hcmNoLnBhZ2luZy5zaGFkb3cub3B0X2Zs YWdzID0gU0hPUFRfTElOVVhfTDNfVE9QTEVWRUw7DQorI2VuZGlmDQorICAgIA0KKyAgICByZXQg PSBzaGFkb3dfb25lX2JpdF9lbmFibGUoZCwgUEdfbG9nX2RpcnR5KTsNCiAgICAgc2hhZG93X3Vu bG9jayhkKTsNCi0gICAgZG9tYWluX3VucGF1c2UoZCk7DQotICAgIHJldHVybiBydjsNCi19DQot DQotDQotLyogTWFyayBhIHBhZ2UgYXMgZGlydHkgKi8NCi12b2lkIHNoX21hcmtfZGlydHkoc3Ry dWN0IGRvbWFpbiAqZCwgbWZuX3QgZ21mbikNCi17DQotICAgIHVuc2lnbmVkIGxvbmcgcGZuOw0K LSAgICBpbnQgZG9fbG9ja2luZzsNCi0NCi0gICAgaWYgKCAhc2hhZG93X21vZGVfbG9nX2RpcnR5 KGQpIHx8ICFtZm5fdmFsaWQoZ21mbikgKQ0KLSAgICAgICAgcmV0dXJuOw0KLQ0KLSAgICAvKiBB bHRob3VnaCB0aGlzIGlzIGFuIGV4dGVybmFsbHkgdmlzaWJsZSBmdW5jdGlvbiwgd2UgZG8gbm90 IGtub3cNCi0gICAgICogd2hldGhlciB0aGUgc2hhZG93IGxvY2sgd2lsbCBiZSBoZWxkIHdoZW4g aXQgaXMgY2FsbGVkIChzaW5jZSBpdA0KLSAgICAgKiBjYW4gYmUgY2FsbGVkIGZyb20gX19odm1f Y29weSBkdXJpbmcgZW11bGF0aW9uKS4NCi0gICAgICogSWYgdGhlIGxvY2sgaXNuJ3QgaGVsZCwg dGFrZSBpdCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjYWxsLiAqLw0KLSAgICBkb19sb2NraW5n ID0gIXNoYWRvd19sb2NrZWRfYnlfbWUoZCk7DQotICAgIGlmICggZG9fbG9ja2luZyApIA0KLSAg ICB7IA0KLSAgICAgICAgc2hhZG93X2xvY2soZCk7DQotICAgICAgICAvKiBDaGVjayB0aGUgbW9k ZSBhZ2FpbiB3aXRoIHRoZSBsb2NrIGhlbGQgKi8gDQotICAgICAgICBpZiAoIHVubGlrZWx5KCFz aGFkb3dfbW9kZV9sb2dfZGlydHkoZCkpICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBzaGFk b3dfdW5sb2NrKGQpOw0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgfQ0K LQ0KLSAgICBBU1NFUlQoZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCAhPSBOVUxM KTsNCi0NCi0gICAgLyogV2UgL3JlYWxseS8gbWVhbiBQRk4gaGVyZSwgZXZlbiBmb3Igbm9uLXRy YW5zbGF0ZWQgZ3Vlc3RzLiAqLw0KLSAgICBwZm4gPSBnZXRfZ3Bmbl9mcm9tX21mbihtZm5feChn bWZuKSk7DQotDQotICAgIC8qDQotICAgICAqIFZhbHVlcyB3aXRoIHRoZSBNU0Igc2V0IGRlbm90 ZSBNRk5zIHRoYXQgYXJlbid0IHJlYWxseSBwYXJ0IG9mIHRoZSANCi0gICAgICogZG9tYWluJ3Mg cHNldWRvLXBoeXNpY2FsIG1lbW9yeSBtYXAgKGUuZy4sIHRoZSBzaGFyZWQgaW5mbyBmcmFtZSku DQotICAgICAqIE5vdGhpbmcgdG8gZG8gaGVyZS4uLg0KLSAgICAgKi8NCi0gICAgaWYgKCB1bmxp a2VseSghVkFMSURfTTJQKHBmbikpICkNCi0gICAgICAgIHJldHVybjsNCi0NCi0gICAgLyogTi5C LiBDYW4gdXNlIG5vbi1hdG9taWMgVEFTIGJlY2F1c2UgcHJvdGVjdGVkIGJ5IHNoYWRvd19sb2Nr LiAqLw0KLSAgICBpZiAoIGxpa2VseShwZm4gPCBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlf Yml0bWFwX3NpemUpICkgDQotICAgIHsgDQotICAgICAgICBpZiAoICFfX3Rlc3RfYW5kX3NldF9i aXQocGZuLCBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwKSApDQotICAgICAgICB7 DQotICAgICAgICAgICAgU0hBRE9XX0RFQlVHKExPR0RJUlRZLCANCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICJtYXJrZWQgbWZuICUiIFBSSV9tZm4gIiAocGZuPSVseCksIGRvbSAlZFxuIiwN Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIG1mbl94KGdtZm4pLCBwZm4sIGQtPmRvbWFpbl9p ZCk7DQotICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2NvdW50Kys7DQot ICAgICAgICB9DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICBTSEFET1dfUFJJ TlRLKCJtYXJrX2RpcnR5IE9PUiEgIg0KLSAgICAgICAgICAgICAgICAgICAgICAgIm1mbj0lIiBQ UklfbWZuICIgcGZuPSVseCBtYXg9JXggKGRvbSAlZClcbiINCi0gICAgICAgICAgICAgICAgICAg ICAgICJvd25lcj0lZCBjPSUwOHggdD0lIiBQUnR5cGVfaW5mbyAiXG4iLA0KLSAgICAgICAgICAg ICAgICAgICAgICAgbWZuX3goZ21mbiksIA0KLSAgICAgICAgICAgICAgICAgICAgICAgcGZuLCAN Ci0gICAgICAgICAgICAgICAgICAgICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRt YXBfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCwNCi0gICAgICAg ICAgICAgICAgICAgICAgIChwYWdlX2dldF9vd25lcihtZm5fdG9fcGFnZShnbWZuKSkNCi0gICAg ICAgICAgICAgICAgICAgICAgICA/IHBhZ2VfZ2V0X293bmVyKG1mbl90b19wYWdlKGdtZm4pKS0+ ZG9tYWluX2lkDQotICAgICAgICAgICAgICAgICAgICAgICAgOiAtMSksDQotICAgICAgICAgICAg ICAgICAgICAgICBtZm5fdG9fcGFnZShnbWZuKS0+Y291bnRfaW5mbywgDQotICAgICAgICAgICAg ICAgICAgICAgICBtZm5fdG9fcGFnZShnbWZuKS0+dS5pbnVzZS50eXBlX2luZm8pOw0KLSAgICB9 DQotDQotICAgIGlmICggZG9fbG9ja2luZyApIHNoYWRvd191bmxvY2soZCk7DQotfQ0KLQ0KKw0K KyAgICByZXR1cm4gcmV0Ow0KK30NCisNCisvKiBzaGFkb3cgc3BlY2ZpYyBjb2RlIHdoaWNoIGlz IGNhbGxlZCBpbiBwYWdpbmdfbG9nX2RpcnR5X2Rpc2FibGUoKSAqLw0KK2ludCBzaGFkb3dfZGlz YWJsZV9sb2dfZGlydHkoc3RydWN0IGRvbWFpbiAqZCkNCit7DQorICAgIGludCByZXQ7DQorDQor ICAgIC8qIHNoYWRvdyBsb2NrIGlzIHJlcXVpcmVkIGhlcmUgKi8gICAgDQorICAgIHNoYWRvd19s b2NrKGQpOw0KKyAgICByZXQgPSBzaGFkb3dfb25lX2JpdF9kaXNhYmxlKGQsIFBHX2xvZ19kaXJ0 eSk7DQorICAgIHNoYWRvd191bmxvY2soZCk7DQorICAgIA0KKyAgICByZXR1cm4gcmV0Ow0KK30N CisNCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHdlIENMRUFOIGxvZyBkaXJ0eSBi aXRtYXAuIFNlZSANCisgKiBwYWdpbmdfbG9nX2RpcnR5X29wKCkgZm9yIGRldGFpbHMuIA0KKyAq Lw0KK3ZvaWQgc2hhZG93X2NsZWFuX2RpcnR5X2JpdG1hcChzdHJ1Y3QgZG9tYWluICpkKQ0KK3sN CisgICAgc2hhZG93X2xvY2soZCk7DQorICAgIC8qIE5lZWQgdG8gcmV2b2tlIHdyaXRlIGFjY2Vz cyB0byB0aGUgZG9tYWluJ3MgcGFnZXMgYWdhaW4uDQorICAgICAqIEluIGZ1dHVyZSwgd2UnbGwg aGF2ZSBhIGxlc3MgaGVhdnktaGFuZGVkIGFwcHJvYWNoIHRvIHRoaXMsDQorICAgICAqIGJ1dCBm b3Igbm93LCB3ZSBqdXN0IHVuc2hhZG93IGV2ZXJ5dGhpbmcgZXhjZXB0IFhlbi4gKi8NCisgICAg c2hhZG93X2Jsb3dfdGFibGVzKGQpOw0KKyAgICBzaGFkb3dfdW5sb2NrKGQpOw0KK30NCiAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovDQogLyogU2hhZG93LWNvbnRyb2wgWEVOX0RPTUNUTCBkaXNwYXRjaGVy ICovDQogDQpAQCAtMzA0NSwzMyArMjg2OCw5IEBAIGludCBzaGFkb3dfZG9tY3RsKHN0cnVjdCBk b21haW4gKmQsDQogew0KICAgICBpbnQgcmMsIHByZWVtcHRlZCA9IDA7DQogDQotICAgIGlmICgg dW5saWtlbHkoZCA9PSBjdXJyZW50LT5kb21haW4pICkNCi0gICAgew0KLSAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX0lORk8sICJEb20gJXUgdHJpZWQgdG8gZG8gYSBzaGFkb3cgb3Agb24gaXRzZWxm LlxuIiwNCi0gICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7DQotICAgICAgICByZXR1cm4g LUVJTlZBTDsNCi0gICAgfQ0KLQ0KLSAgICBpZiAoIHVubGlrZWx5KGQtPmlzX2R5aW5nKSApDQot ICAgIHsNCi0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19JTkZPLCAiSWdub3Jpbmcgc2hhZG93IG9w IG9uIGR5aW5nIGRvbWFpbiAldVxuIiwNCi0gICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7 DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLQ0KLSAgICBpZiAoIHVubGlrZWx5KGQtPnZj cHVbMF0gPT0gTlVMTCkgKQ0KLSAgICB7DQotICAgICAgICBTSEFET1dfRVJST1IoIlNoYWRvdyBv cCBvbiBhIGRvbWFpbiAoJXUpIHdpdGggbm8gdmNwdXNcbiIsDQotICAgICAgICAgICAgICAgICAg ICAgZC0+ZG9tYWluX2lkKTsNCi0gICAgICAgIHJldHVybiAtRUlOVkFMOw0KLSAgICB9DQotDQog ICAgIHN3aXRjaCAoIHNjLT5vcCApDQogICAgIHsNCiAgICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURP V19PUF9PRkY6DQotICAgICAgICBpZiAoIHNoYWRvd19tb2RlX2xvZ19kaXJ0eShkKSApDQotICAg ICAgICAgICAgaWYgKCAocmMgPSBzaGFkb3dfbG9nX2RpcnR5X2Rpc2FibGUoZCkpICE9IDAgKSAN Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJjOw0KICAgICAgICAgaWYgKCBkLT5hcmNoLnBhZ2lu Zy5tb2RlID09IFBHX1NIX2VuYWJsZSApDQogICAgICAgICAgICAgaWYgKCAocmMgPSBzaGFkb3df dGVzdF9kaXNhYmxlKGQpKSAhPSAwICkgDQogICAgICAgICAgICAgICAgIHJldHVybiByYzsNCkBA IC0zMDgwLDE5ICsyODc5LDEwIEBAIGludCBzaGFkb3dfZG9tY3RsKHN0cnVjdCBkb21haW4gKmQs DQogICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfRU5BQkxFX1RFU1Q6DQogICAgICAgICBy ZXR1cm4gc2hhZG93X3Rlc3RfZW5hYmxlKGQpOw0KIA0KLSAgICBjYXNlIFhFTl9ET01DVExfU0hB RE9XX09QX0VOQUJMRV9MT0dESVJUWToNCi0gICAgICAgIHJldHVybiBzaGFkb3dfbG9nX2RpcnR5 X2VuYWJsZShkKTsNCi0NCiAgICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19PUF9FTkFCTEVfVFJB TlNMQVRFOg0KICAgICAgICAgcmV0dXJuIHNoYWRvd19lbmFibGUoZCwgUEdfcmVmY291bnRzfFBH X3RyYW5zbGF0ZSk7DQogDQotICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfQ0xFQU46DQot ICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfUEVFSzoNCi0gICAgICAgIHJldHVybiBzaGFk b3dfbG9nX2RpcnR5X29wKGQsIHNjKTsNCi0NCiAgICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19P UF9FTkFCTEU6DQotICAgICAgICBpZiAoIHNjLT5tb2RlICYgWEVOX0RPTUNUTF9TSEFET1dfRU5B QkxFX0xPR19ESVJUWSApDQotICAgICAgICAgICAgcmV0dXJuIHNoYWRvd19sb2dfZGlydHlfZW5h YmxlKGQpOw0KICAgICAgICAgcmV0dXJuIHNoYWRvd19lbmFibGUoZCwgc2MtPm1vZGUgPDwgUEdf bW9kZV9zaGlmdCk7DQogDQogICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfR0VUX0FMTE9D QVRJT046DQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiAtciA5YmM2YTE5NmFkMGUgeGVuL2FyY2gveDg2 L21tL3NoYWRvdy9tdWx0aS5jDQotLS0gYS94ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRpLmMJ V2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJjaC94ODYvbW0vc2hh ZG93L211bHRpLmMJVGh1IEp1biAwNyAwMzo1Mzo1OSAyMDA3IC0wNTAwDQpAQCAtNDU3LDcgKzQ1 Nyw3IEBAIHN0YXRpYyB1MzIgZ3Vlc3Rfc2V0X2FkX2JpdHMoc3RydWN0IHZjcHUNCiAgICAgfQ0K IA0KICAgICAvKiBTZXQgdGhlIGJpdChzKSAqLw0KLSAgICBzaF9tYXJrX2RpcnR5KHYtPmRvbWFp biwgZ21mbik7DQorICAgIHBhZ2luZ19tYXJrX2RpcnR5KHYtPmRvbWFpbiwgbWZuX3goZ21mbikp Ow0KICAgICBTSEFET1dfREVCVUcoQV9BTkRfRCwgImdmbiA9ICUiIFNIX1BSSV9nZm4gIiwgIg0K ICAgICAgICAgICAgICAgICAgIm9sZCBmbGFncyA9ICUjeCwgbmV3IGZsYWdzID0gJSN4XG4iLCAN CiAgICAgICAgICAgICAgICAgIGdmbl94KGd1ZXN0X2wxZV9nZXRfZ2ZuKCplcCkpLCBndWVzdF9s MWVfZ2V0X2ZsYWdzKCplcCksIA0KQEAgLTcxNyw3ICs3MTcsNyBAQCBfc2hfcHJvcGFnYXRlKHN0 cnVjdCB2Y3B1ICp2LA0KICAgICBpZiAoIHVubGlrZWx5KChsZXZlbCA9PSAxKSAmJiBzaGFkb3df bW9kZV9sb2dfZGlydHkoZCkpICkNCiAgICAgew0KICAgICAgICAgaWYgKCBmdCAmIEZFVENIX1RZ UEVfV1JJVEUgKSANCi0gICAgICAgICAgICBzaF9tYXJrX2RpcnR5KGQsIHRhcmdldF9tZm4pOw0K KyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KGQsIG1mbl94KHRhcmdldF9tZm4pKTsNCiAg ICAgICAgIGVsc2UgaWYgKCAhc2hfbWZuX2lzX2RpcnR5KGQsIHRhcmdldF9tZm4pICkNCiAgICAg ICAgICAgICBzZmxhZ3MgJj0gfl9QQUdFX1JXOw0KICAgICB9DQpAQCAtMjg1Niw3ICsyODU2LDcg QEAgc3RhdGljIGludCBzaF9wYWdlX2ZhdWx0KHN0cnVjdCB2Y3B1ICp2LA0KICAgICB9DQogDQog ICAgIHBlcmZjX2luY3Ioc2hhZG93X2ZhdWx0X2ZpeGVkKTsNCi0gICAgZC0+YXJjaC5wYWdpbmcu c2hhZG93LmZhdWx0X2NvdW50Kys7DQorICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5mYXVs dF9jb3VudCsrOw0KICAgICByZXNldF9lYXJseV91bnNoYWRvdyh2KTsNCiANCiAgZG9uZToNCkBA IC00MDU4LDcgKzQwNTgsNyBAQCBzaF94ODZfZW11bGF0ZV93cml0ZShzdHJ1Y3QgdmNwdSAqdiwg dW5zDQogICAgIGVsc2UNCiAgICAgICAgIHJlc2V0X2Vhcmx5X3Vuc2hhZG93KHYpOw0KICAgICAN Ci0gICAgc2hfbWFya19kaXJ0eSh2LT5kb21haW4sIG1mbik7DQorICAgIHBhZ2luZ19tYXJrX2Rp cnR5KHYtPmRvbWFpbiwgbWZuX3gobWZuKSk7DQogDQogICAgIHNoX3VubWFwX2RvbWFpbl9wYWdl KGFkZHIpOw0KICAgICBzaGFkb3dfYXVkaXRfdGFibGVzKHYpOw0KQEAgLTQxMTQsNyArNDExNCw3 IEBAIHNoX3g4Nl9lbXVsYXRlX2NtcHhjaGcoc3RydWN0IHZjcHUgKnYsIHUNCiAgICAgZWxzZQ0K ICAgICAgICAgcmVzZXRfZWFybHlfdW5zaGFkb3codik7DQogDQotICAgIHNoX21hcmtfZGlydHko di0+ZG9tYWluLCBtZm4pOw0KKyAgICBwYWdpbmdfbWFya19kaXJ0eSh2LT5kb21haW4sIG1mbl94 KG1mbikpOw0KIA0KICAgICBzaF91bm1hcF9kb21haW5fcGFnZShhZGRyKTsNCiAgICAgc2hhZG93 X2F1ZGl0X3RhYmxlcyh2KTsNCkBAIC00MTU4LDcgKzQxNTgsNyBAQCBzaF94ODZfZW11bGF0ZV9j bXB4Y2hnOGIoc3RydWN0IHZjcHUgKnYsDQogICAgIGVsc2UNCiAgICAgICAgIHJlc2V0X2Vhcmx5 X3Vuc2hhZG93KHYpOw0KIA0KLSAgICBzaF9tYXJrX2RpcnR5KHYtPmRvbWFpbiwgbWZuKTsNCisg ICAgcGFnaW5nX21hcmtfZGlydHkodi0+ZG9tYWluLCBtZm5feChtZm4pKTsNCiANCiAgICAgc2hf dW5tYXBfZG9tYWluX3BhZ2UoYWRkcik7DQogICAgIHNoYWRvd19hdWRpdF90YWJsZXModik7DQpk aWZmIC1yIDQ1NTE2YWM5NGM5ZiAtciA5YmM2YTE5NmFkMGUgeGVuL2FyY2gveDg2L21tL3NoYWRv dy9wcml2YXRlLmgNCi0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvcHJpdmF0ZS5oCVdlZCBK dW4gMDYgMDg6MzI6MzIgMjAwNyAtMDUwMA0KKysrIGIveGVuL2FyY2gveDg2L21tL3NoYWRvdy9w cml2YXRlLmgJVGh1IEp1biAwNyAwMzo1Mzo1OSAyMDA3IC0wNTAwDQpAQCAtNDk2LDEzICs0OTYs MTMgQEAgc2hfbWZuX2lzX2RpcnR5KHN0cnVjdCBkb21haW4gKmQsIG1mbl90IA0KIHsNCiAgICAg dW5zaWduZWQgbG9uZyBwZm47DQogICAgIEFTU0VSVChzaGFkb3dfbW9kZV9sb2dfZGlydHkoZCkp Ow0KLSAgICBBU1NFUlQoZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCAhPSBOVUxM KTsNCisgICAgQVNTRVJUKGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXAgIT0gTlVMTCk7 DQogDQogICAgIC8qIFdlIC9yZWFsbHkvIG1lYW4gUEZOIGhlcmUsIGV2ZW4gZm9yIG5vbi10cmFu c2xhdGVkIGd1ZXN0cy4gKi8NCiAgICAgcGZuID0gZ2V0X2dwZm5fZnJvbV9tZm4obWZuX3goZ21m bikpOw0KICAgICBpZiAoIGxpa2VseShWQUxJRF9NMlAocGZuKSkNCi0gICAgICAgICAmJiBsaWtl bHkocGZuIDwgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcF9zaXplKSANCi0gICAg ICAgICAmJiB0ZXN0X2JpdChwZm4sIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXAp ICkNCisgICAgICAgICAmJiBsaWtlbHkocGZuIDwgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJp dG1hcF9zaXplKSANCisgICAgICAgICAmJiB0ZXN0X2JpdChwZm4sIGQtPmFyY2gucGFnaW5nLmxv Z19kaXJ0eS5iaXRtYXApICkNCiAgICAgICAgIHJldHVybiAxOw0KIA0KICAgICByZXR1cm4gMDsN CmRpZmYgLXIgNDU1MTZhYzk0YzlmIC1yIDliYzZhMTk2YWQwZSB4ZW4vaW5jbHVkZS9hc20teDg2 L2RvbWFpbi5oDQotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2RvbWFpbi5oCVdlZCBKdW4gMDYg MDg6MzI6MzIgMjAwNyAtMDUwMA0KKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaAlU aHUgSnVuIDA3IDAzOjUzOjU5IDIwMDcgLTA1MDANCkBAIC05MiwxNCArOTIsNiBAQCBzdHJ1Y3Qg c2hhZG93X2RvbWFpbiB7DQogDQogICAgIC8qIEZhc3QgTU1JTyBwYXRoIGhldXJpc3RpYyAqLw0K ICAgICBpbnQgaGFzX2Zhc3RfbW1pb19lbnRyaWVzOw0KLQ0KLSAgICAvKiBTaGFkb3cgbG9nLWRp cnR5IGJpdG1hcCAqLw0KLSAgICB1bnNpZ25lZCBsb25nICpkaXJ0eV9iaXRtYXA7DQotICAgIHVu c2lnbmVkIGludCBkaXJ0eV9iaXRtYXBfc2l6ZTsgIC8qIGluIHBhZ2VzLCBiaXQgcGVyIHBhZ2Ug Ki8NCi0NCi0gICAgLyogU2hhZG93IGxvZy1kaXJ0eSBtb2RlIHN0YXRzICovDQotICAgIHVuc2ln bmVkIGludCBmYXVsdF9jb3VudDsNCi0gICAgdW5zaWduZWQgaW50IGRpcnR5X2NvdW50Ow0KIH07 DQogDQogc3RydWN0IHNoYWRvd192Y3B1IHsNCkBAIC0xMzQsNyArMTI2LDYgQEAgc3RydWN0IGhh cF9kb21haW4gew0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovDQogLyogICAgICAgcDJtIGhhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8NCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0K LQ0KIHN0cnVjdCBwMm1fZG9tYWluIHsNCiAgICAgLyogTG9jayB0aGF0IHByb3RlY3RzIHVwZGF0 ZXMgdG8gdGhlIHAybSAqLw0KICAgICBzcGlubG9ja190ICAgICAgICAgbG9jazsNCkBAIC0xNTYs MTYgKzE0NywzNiBAQCBzdHJ1Y3QgcDJtX2RvbWFpbiB7DQogLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAvKiAgICAgICBjb21tb24gcGFnaW5nIGRh dGEgc3RydWN0dXJlICAgICAgICAgICAqLw0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovDQorc3RydWN0IGxvZ19kaXJ0eV9kb21haW4gew0KKyAgICAv KiBsb2ctZGlydHkgbG9jayAqLw0KKyAgICBzcGlubG9ja190ICAgICBsb2NrOw0KKyAgICBpbnQg ICAgICAgICAgICBsb2NrZXI7IC8qIHByb2Nlc3NvciB0aGF0IGhvbGRzIHRoZSBsb2NrICovDQor ICAgIGNvbnN0IGNoYXIgICAgKmxvY2tlcl9mdW5jdGlvbjsgLyogZnVuYyB0aGF0IHRvb2sgaXQg Ki8NCisNCisgICAgLyogbG9nLWRpcnR5IGJpdG1hcCB0byByZWNvcmQgZGlydHkgcGFnZXMgKi8N CisgICAgdW5zaWduZWQgbG9uZyAqYml0bWFwOw0KKyAgICB1bnNpZ25lZCBpbnQgICBiaXRtYXBf c2l6ZTsgIC8qIGluIHBhZ2VzLCBiaXQgcGVyIHBhZ2UgKi8NCisNCisgICAgLyogbG9nLWRpcnR5 IG1vZGUgc3RhdHMgKi8NCisgICAgdW5zaWduZWQgaW50ICAgZmF1bHRfY291bnQ7DQorICAgIHVu c2lnbmVkIGludCAgIGRpcnR5X2NvdW50Ow0KKw0KKyAgICAvKiBmdW5jdGlvbnMgd2hpY2ggYXJl IHBhZ2luZyBtb2RlIHNwZWNpZmljICovDQorICAgIGludCAgICAgICAgICAgICgqZW5hYmxlX2xv Z19kaXJ0eSAgICkoc3RydWN0IGRvbWFpbiAqZCk7DQorICAgIGludCAgICAgICAgICAgICgqZGlz YWJsZV9sb2dfZGlydHkgICkoc3RydWN0IGRvbWFpbiAqZCk7DQorICAgIHZvaWQgICAgICAgICAg ICgqY2xlYW5fZGlydHlfYml0bWFwICkoc3RydWN0IGRvbWFpbiAqZCk7DQorfTsNCisNCiBzdHJ1 Y3QgcGFnaW5nX2RvbWFpbiB7DQotICAgIHUzMiAgICAgICAgICAgICAgIG1vZGU7ICAvKiBmbGFn cyB0byBjb250cm9sIHBhZ2luZyBvcGVyYXRpb24gKi8NCi0NCisgICAgLyogZmxhZ3MgdG8gY29u dHJvbCBwYWdpbmcgb3BlcmF0aW9uICovDQorICAgIHUzMiAgICAgICAgICAgICAgICAgICAgIG1v ZGU7DQogICAgIC8qIGV4dGVuc2lvbiBmb3Igc2hhZG93IHBhZ2luZyBzdXBwb3J0ICovDQotICAg IHN0cnVjdCBzaGFkb3dfZG9tYWluIHNoYWRvdzsNCi0NCi0gICAgLyogT3RoZXIgcGFnaW5nIGFz c2lzdGFuY2UgY29kZSB3aWxsIGhhdmUgc3RydWN0cyBoZXJlICovDQotICAgIHN0cnVjdCBoYXBf ZG9tYWluICAgIGhhcDsNCi19Ow0KLQ0KKyAgICBzdHJ1Y3Qgc2hhZG93X2RvbWFpbiAgICBzaGFk b3c7DQorICAgIC8qIGV4dGVuc2lvbiBmb3IgaGFyZHdhcmUtYXNzaXRlZCBwYWdpbmcgKi8NCisg ICAgc3RydWN0IGhhcF9kb21haW4gICAgICAgaGFwOw0KKyAgICAvKiBsb2cgZGlydHkgc3VwcG9y dCAqLw0KKyAgICBzdHJ1Y3QgbG9nX2RpcnR5X2RvbWFpbiBsb2dfZGlydHk7DQorfTsNCiBzdHJ1 Y3QgcGFnaW5nX3ZjcHUgew0KICAgICAvKiBQb2ludGVycyB0byBtb2RlLXNwZWNpZmljIGVudHJ5 IHBvaW50cy4gKi8NCiAgICAgc3RydWN0IHBhZ2luZ19tb2RlICptb2RlOw0KZGlmZiAtciA0NTUx NmFjOTRjOWYgLXIgOWJjNmExOTZhZDBlIHhlbi9pbmNsdWRlL2FzbS14ODYvZ3JhbnRfdGFibGUu aA0KLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9ncmFudF90YWJsZS5oCVdlZCBKdW4gMDYgMDg6 MzI6MzIgMjAwNyAtMDUwMA0KKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9ncmFudF90YWJsZS5o CVRodSBKdW4gMDcgMDM6NTM6NTkgMjAwNyAtMDUwMA0KQEAgLTMxLDcgKzMxLDcgQEAgaW50IHJl cGxhY2VfZ3JhbnRfaG9zdF9tYXBwaW5nKA0KICNkZWZpbmUgZ250dGFiX3NoYXJlZF9nbWZuKGQs IHQsIGkpICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAobWZuX3RvX2dtZm4oZCwgZ250dGFi X3NoYXJlZF9tZm4oZCwgdCwgaSkpKQ0KIA0KLSNkZWZpbmUgZ250dGFiX21hcmtfZGlydHkoZCwg ZikgbWFya19kaXJ0eSgoZCksIChmKSkNCisjZGVmaW5lIGdudHRhYl9tYXJrX2RpcnR5KGQsIGYp IHBhZ2luZ19tYXJrX2RpcnR5KChkKSwgKGYpKQ0KIA0KIHN0YXRpYyBpbmxpbmUgdm9pZCBnbnR0 YWJfY2xlYXJfZmxhZyh1bnNpZ25lZCBsb25nIG5yLCB1aW50MTZfdCAqYWRkcikNCiB7DQpkaWZm IC1yIDQ1NTE2YWM5NGM5ZiAtciA5YmM2YTE5NmFkMGUgeGVuL2luY2x1ZGUvYXNtLXg4Ni9wYWdp bmcuaA0KLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9wYWdpbmcuaAlXZWQgSnVuIDA2IDA4OjMy OjMyIDIwMDcgLTA1MDANCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvcGFnaW5nLmgJVGh1IEp1 biAwNyAwMzo1Mzo1OSAyMDA3IC0wNTAwDQpAQCAtNjIsNiArNjIsOSBAQA0KICNkZWZpbmUgcGFn aW5nX21vZGVfbG9nX2RpcnR5KF9kKSAoKF9kKS0+YXJjaC5wYWdpbmcubW9kZSAmIFBHX2xvZ19k aXJ0eSkNCiAjZGVmaW5lIHBhZ2luZ19tb2RlX3RyYW5zbGF0ZShfZCkgKChfZCktPmFyY2gucGFn aW5nLm1vZGUgJiBQR190cmFuc2xhdGUpDQogI2RlZmluZSBwYWdpbmdfbW9kZV9leHRlcm5hbChf ZCkgICgoX2QpLT5hcmNoLnBhZ2luZy5tb2RlICYgUEdfZXh0ZXJuYWwpDQorDQorLyogZmxhZ3Mg dXNlZCBmb3IgcGFnaW5nIGRlYnVnICovDQorI2RlZmluZSBQQUdJTkdfREVCVUdfTE9HRElSVFkg MA0KIA0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKiBUaGUgZXF1aXZhbGVudCBmb3IgYSBw YXJ0aWN1bGFyIHZjcHUgb2YgYSBzaGFkb3dlZCBkb21haW4uICovDQpAQCAtMTM2LDYgKzEzOSwy OSBAQCBzdHJ1Y3QgcGFnaW5nX21vZGUgew0KICAgICBzdHJ1Y3Qgc2hhZG93X3BhZ2luZ19tb2Rl IHNoYWRvdzsNCiB9Ow0KIA0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIExvZyBkaXJ0eSBj b2RlICovDQorDQorLyogYWxsb2NhdGUgbG9nIGRpcnR5IGJpdG1hcCByZXNvdXJjZSBmb3IgcmVj b3JkaW5nIGRpcnR5IHBhZ2VzICovDQoraW50IHBhZ2luZ19hbGxvY19sb2dfZGlydHlfYml0bWFw KHN0cnVjdCBkb21haW4gKmQpOw0KKw0KKy8qIGZyZWUgbG9nIGRpcnR5IGJpdG1hcCByZXNvdXJj ZSAqLw0KK3ZvaWQgcGFnaW5nX2ZyZWVfbG9nX2RpcnR5X2JpdG1hcChzdHJ1Y3QgZG9tYWluICpk KTsNCisNCisvKiBlbmFibGUgbG9nIGRpcnR5ICovDQoraW50IHBhZ2luZ19sb2dfZGlydHlfZW5h YmxlKHN0cnVjdCBkb21haW4gKmQpOw0KKw0KKy8qIGRpc2FibGUgbG9nIGRpcnR5ICovDQoraW50 IHBhZ2luZ19sb2dfZGlydHlfZGlzYWJsZShzdHJ1Y3QgZG9tYWluICpkKTsNCisNCisvKiBsb2cg ZGlydHkgaW5pdGlhbGl6YXRpb24gKi8NCit2b2lkIHBhZ2luZ19sb2dfZGlydHlfaW5pdChzdHJ1 Y3QgZG9tYWluICpkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgKCplbmFibGVf bG9nX2RpcnR5KShzdHJ1Y3QgZG9tYWluICpkKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgICgqZGlzYWJsZV9sb2dfZGlydHkpKHN0cnVjdCBkb21haW4gKmQpLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVhbl9kaXJ0eV9iaXRtYXApKHN0cnVjdCBkb21h aW4gKmQpKTsNCisNCisvKiBtYXJrIGEgcGFnZSBhcyBkaXJ0eSAqLw0KK3ZvaWQgcGFnaW5nX21h cmtfZGlydHkoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBndWVzdF9tZm4pOw0KIA0K IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKg0KICAqIEVudHJ5IHBvaW50cyBpbnRvIHRoZSBwYWdpbmct YXNzaXN0YW5jZSBjb2RlICovDQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiAtciA5YmM2YTE5NmFkMGUg eGVuL2luY2x1ZGUvYXNtLXg4Ni9zaGFkb3cuaA0KLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9z aGFkb3cuaAlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hlbi9pbmNsdWRl L2FzbS14ODYvc2hhZG93LmgJVGh1IEp1biAwNyAwMzo1Mzo1OSAyMDA3IC0wNTAwDQpAQCAtNzUs MTYgKzc1LDE0IEBAIHZvaWQgc2hhZG93X3RlYXJkb3duKHN0cnVjdCBkb21haW4gKmQpOw0KIC8q IENhbGwgb25jZSBhbGwgb2YgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIGRvbWFpbiBoYXZlIGdvbmUg YXdheSAqLw0KIHZvaWQgc2hhZG93X2ZpbmFsX3RlYXJkb3duKHN0cnVjdCBkb21haW4gKmQpOw0K IA0KLS8qIE1hcmsgYSBwYWdlIGFzIGRpcnR5IGluIHRoZSBsb2ctZGlydHkgYml0bWFwOiBjYWxs ZWQgd2hlbiBYZW4gDQotICogbWFrZXMgY2hhbmdlcyB0byBndWVzdCBtZW1vcnkgb24gaXRzIGJl aGFsZi4gKi8NCi12b2lkIHNoX21hcmtfZGlydHkoc3RydWN0IGRvbWFpbiAqZCwgbWZuX3QgZ21m bik7DQotLyogQ2xlYW5lciB2ZXJzaW9uIHNvIHdlIGRvbid0IHBlcHBlciBzaGFkb3dfbW9kZSB0 ZXN0cyBhbGwgb3ZlciB0aGUgcGxhY2UgKi8NCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFya19kaXJ0 eShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGdtZm4pDQotew0KLSAgICBpZiAoIHVu bGlrZWx5KHNoYWRvd19tb2RlX2xvZ19kaXJ0eShkKSkgKQ0KLSAgICAgICAgLyogU2VlIHRoZSBj b21tZW50IGFib3V0IGxvY2tpbmcgaW4gc2hfbWFya19kaXJ0eSAqLw0KLSAgICAgICAgc2hfbWFy a19kaXJ0eShkLCBfbWZuKGdtZm4pKTsNCi19DQorLyogc2hhZG93IGNvZGUgdG8gY2FsbCB3aGVu IGxvZyBkaXJ0eSBpcyBlbmFibGVkICovDQoraW50IHNoYWRvd19lbmFibGVfbG9nX2RpcnR5KHN0 cnVjdCBkb21haW4gKmQpOw0KKw0KKy8qIHNoYWRvdyBjb2RlIHRvIGNhbGwgd2hlbiBsb2cgZGly dHkgaXMgZGlzYWJsZWQgKi8NCitpbnQgc2hhZG93X2Rpc2FibGVfbG9nX2RpcnR5KHN0cnVjdCBk b21haW4gKmQpOw0KKw0KKy8qIHNoYWRvdyBjb2RlIHRvIGNhbGwgd2hlbiBiaXRtYXAgaXMgYmVp bmcgY2xlYW5lZCAqLw0KK3ZvaWQgc2hhZG93X2NsZWFuX2RpcnR5X2JpdG1hcChzdHJ1Y3QgZG9t YWluICpkKTsNCiANCiAvKiBVcGRhdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBhcmUgZGVyaXZlZCBm cm9tIHRoZSBndWVzdCdzIENSMC9DUjMvQ1I0Lg0KICAqIENhbGxlZCB0byBpbml0aWFsaXplIHBh Z2luZyBzdHJ1Y3R1cmVzIGlmIHRoZSBwYWdpbmcgbW9kZQ0K ------_=_NextPart_001_01C7A94F.004CE5CF Content-Type: text/plain; name=live_migrate_npt_patch.txt Content-Transfer-Encoding: base64 Content-Description: live_migrate_npt_patch.txt Content-Disposition: attachment; filename=live_migrate_npt_patch.txt ZGlmZiAtciA5YmM2YTE5NmFkMGUgLXIgOGYzNjM5ZDkyYjA4IHhlbi9hcmNoL3g4Ni9odm0vc3Zt L3N2bS5jDQotLS0gYS94ZW4vYXJjaC94ODYvaHZtL3N2bS9zdm0uYwlUaHUgSnVuIDA3IDAzOjUz OjU5IDIwMDcgLTA1MDANCisrKyBiL3hlbi9hcmNoL3g4Ni9odm0vc3ZtL3N2bS5jCVRodSBKdW4g MDcgMDY6Mzk6MzkgMjAwNyAtMDUwMA0KQEAgLTEwMzMsOCArMTAzMyw4IEBAIHN0YXRpYyBpbnQg c3ZtX2RvX25lc3RlZF9wZ2ZhdWx0KHBhZGRyX3QNCiAgICAgICAgIHJldHVybiAxOw0KICAgICB9 DQogDQotICAgIC8qIFdlIHNob3VsZCBub3QgcmVhY2ggaGVyZS4gT3RoZXJ3aXNlLCBQMk0gdGFi bGUgaXMgbm90IGNvcnJlY3QuKi8NCi0gICAgcmV0dXJuIDA7DQorICAgIHBhZ2luZ19tYXJrX2Rp cnR5KGN1cnJlbnQtPmRvbWFpbiwgZ2V0X21mbl9mcm9tX2dwZm4oZ3BhID4+IFBBR0VfU0hJRlQp KTsNCisgICAgcmV0dXJuIHAybV9zZXRfZmxhZ3MoY3VycmVudC0+ZG9tYWluLCBncGEsIF9fUEFH RV9IWVBFUlZJU09SfF9QQUdFX1VTRVIpOw0KIH0NCiANCiBzdGF0aWMgdm9pZCBzdm1fZG9fbm9f ZGV2aWNlX2ZhdWx0KHN0cnVjdCB2bWNiX3N0cnVjdCAqdm1jYikNCmRpZmYgLXIgOWJjNmExOTZh ZDBlIC1yIDhmMzYzOWQ5MmIwOCB4ZW4vYXJjaC94ODYvbW0vaGFwL2hhcC5jDQotLS0gYS94ZW4v YXJjaC94ODYvbW0vaGFwL2hhcC5jCVRodSBKdW4gMDcgMDM6NTM6NTkgMjAwNyAtMDUwMA0KKysr IGIveGVuL2FyY2gveDg2L21tL2hhcC9oYXAuYwlUaHUgSnVuIDA3IDA2OjM5OjM5IDIwMDcgLTA1 MDANCkBAIC00OSw2ICs0OSwzNSBAQA0KICN1bmRlZiBwYWdlX3RvX21mbg0KICNkZWZpbmUgcGFn ZV90b19tZm4oX3BnKSAoX21mbigoX3BnKSAtIGZyYW1lX3RhYmxlKSkNCiANCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAg SEFQIExPRyBESVJUWSBTVVBQT1JUICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiBoYXAgY29kZSB0byBjYWxsIHdo ZW4gbG9nX2RpcnR5IGlzIGVuYWJsZS4gcmV0dXJuIDAgaWYgbm8gcHJvYmxlbSBmb3VuZC4gKi8N CitpbnQgaGFwX2VuYWJsZV9sb2dfZGlydHkoc3RydWN0IGRvbWFpbiAqZCkNCit7DQorICAgIC8q IHR1cm4gb24gUEdfbG9nX2RpcnR5IGJpdCBpbiBwYWdpbmcgbW9kZSAqLw0KKyAgICBkLT5hcmNo LnBhZ2luZy5tb2RlIHw9IFBHX2xvZ19kaXJ0eTsNCisgICAgcDJtX3NldF9mbGFnc19nbG9iYWwo ZCwgKF9QQUdFX1BSRVNFTlR8X1BBR0VfVVNFUikpOw0KKyAgICBmbHVzaF90bGJfYWxsX3BnZSgp Ow0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQoraW50IGhhcF9kaXNhYmxlX2xvZ19kaXJ0eShz dHJ1Y3QgZG9tYWluICpkKQ0KK3sNCisgICAgLyogbG9nIGRpcnR5IGFscmVhZHkgYWNjcXVpcmVk IGxvY2sgdG8gZ3VhcmQgdGhpcyBjb2RlICovDQorICAgIGQtPmFyY2gucGFnaW5nLm1vZGUgJj0g flBHX2xvZ19kaXJ0eTsNCisgICAgcDJtX3NldF9mbGFnc19nbG9iYWwoZCwgX19QQUdFX0hZUEVS VklTT1J8X1BBR0VfVVNFUik7DQorICAgIA0KKyAgICByZXR1cm4gMTsNCit9DQorDQordm9pZCBo YXBfY2xlYW5fZGlydHlfYml0bWFwKHN0cnVjdCBkb21haW4gKmQpDQorew0KKyAgICAvKiBtYXJr IHBoeXNpY2FsIG1lbW9yeSBhcyBub3Qgd3JpdGV0YWJsZSBhbmQgZmx1c2ggdGhlIFRMQiAqLw0K KyAgICBwMm1fc2V0X2ZsYWdzX2dsb2JhbChkLCAoX1BBR0VfUFJFU0VOVHxfUEFHRV9VU0VSKSk7 DQorICAgIGZsdXNoX3RsYl9hbGxfcGdlKCk7DQorfQ0KIC8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovDQogLyogICAgICAgICAgICAgSEFQIFNVUFBPUlQg RlVOQ1RJT05TICAgICAgICAgICAgKi8NCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLw0KQEAgLTQyMSw2ICs0NTAsMTAgQEAgaW50IGhhcF9lbmFibGUo c3RydWN0IGRvbWFpbiAqZCwgdTMyIG1vZA0KICAgICAgICAgfQ0KICAgICB9DQogDQorICAgIC8q IGluaXRpYWxpemUgbG9nIGRpcnR5IGhlcmUgKi8NCisgICAgcGFnaW5nX2xvZ19kaXJ0eV9pbml0 KGQsIGhhcF9lbmFibGVfbG9nX2RpcnR5LCBoYXBfZGlzYWJsZV9sb2dfZGlydHksDQorICAgICAg ICAgICAgICAgICAgICAgICAgICBoYXBfY2xlYW5fZGlydHlfYml0bWFwKTsNCisNCiAgICAgLyog YWxsb2NhdGUgUDJtIHRhYmxlICovDQogICAgIGlmICggbW9kZSAmIFBHX3RyYW5zbGF0ZSApIHsN CiAgICAgICAgIHJ2ID0gcDJtX2FsbG9jX3RhYmxlKGQsIGhhcF9hbGxvY19wMm1fcGFnZSwgaGFw X2ZyZWVfcDJtX3BhZ2UpOw0KQEAgLTQ3OCw2ICs1MTEsOCBAQCB2b2lkIGhhcF90ZWFyZG93bihz dHJ1Y3QgZG9tYWluICpkKQ0KICAgICAgICAgICAgICAgICAgICAgICBkLT5hcmNoLnBhZ2luZy5o YXAuZnJlZV9wYWdlcywNCiAgICAgICAgICAgICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcuaGFw LnAybV9wYWdlcyk7DQogICAgICAgICBoYXBfc2V0X2FsbG9jYXRpb24oZCwgMCwgTlVMTCk7DQor ICAgICAgICAvKiByZWxlYXNlIHRoZSBsb2ctZGlydHkgYml0bWFwIG9mIGRpcnR5IHBhZ2VzICov DQorICAgICAgICBwYWdpbmdfZnJlZV9sb2dfZGlydHlfYml0bWFwKGQpOw0KICAgICAgICAgSEFQ X1BSSU5USygidGVhcmRvd24gZG9uZS4iDQogICAgICAgICAgICAgICAgICAgICAgICIgIHBhZ2Vz IHRvdGFsID0gJXUsIGZyZWUgPSAldSwgcDJtPSV1XG4iLA0KICAgICAgICAgICAgICAgICAgICAg ICBkLT5hcmNoLnBhZ2luZy5oYXAudG90YWxfcGFnZXMsDQpkaWZmIC1yIDliYzZhMTk2YWQwZSAt ciA4ZjM2MzlkOTJiMDggeGVuL2FyY2gveDg2L21tL3AybS5jDQotLS0gYS94ZW4vYXJjaC94ODYv bW0vcDJtLmMJVGh1IEp1biAwNyAwMzo1Mzo1OSAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJjaC94 ODYvbW0vcDJtLmMJVGh1IEp1biAwNyAwNjozOTozOSAyMDA3IC0wNTAwDQpAQCAtMTY5LDcgKzE2 OSw3IEBAIHAybV9uZXh0X2xldmVsKHN0cnVjdCBkb21haW4gKmQsIG1mbl90ICoNCiANCiAvLyBS ZXR1cm5zIDAgb24gZXJyb3IgKG91dCBvZiBtZW1vcnkpDQogc3RhdGljIGludA0KLXNldF9wMm1f ZW50cnkoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4sIG1mbl90IG1mbikNCitz ZXRfcDJtX2VudHJ5KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuLCBtZm5fdCBt Zm4sIHUzMiBsMWVfZmxhZ3MpDQogew0KICAgICAvLyBYWFggLS0gdGhpcyBtaWdodCBiZSBhYmxl IHRvIGJlIGZhc3RlciBpZmYgY3VycmVudC0+ZG9tYWluID09IGQNCiAgICAgbWZuX3QgdGFibGVf bWZuID0gcGFnZXRhYmxlX2dldF9tZm4oZC0+YXJjaC5waHlzX3RhYmxlKTsNCkBAIC0yMTMsNyAr MjEzLDcgQEAgc2V0X3AybV9lbnRyeShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZA0KICAgICAg ICAgZC0+YXJjaC5wMm0ubWF4X21hcHBlZF9wZm4gPSBnZm47DQogDQogICAgIGlmICggbWZuX3Zh bGlkKG1mbikgKQ0KLSAgICAgICAgZW50cnlfY29udGVudCA9IGwxZV9mcm9tX3BmbihtZm5feCht Zm4pLCBfX1BBR0VfSFlQRVJWSVNPUnxfUEFHRV9VU0VSKTsNCisgICAgICAgIGVudHJ5X2NvbnRl bnQgPSBsMWVfZnJvbV9wZm4obWZuX3gobWZuKSwgbDFlX2ZsYWdzKTsNCiAgICAgZWxzZQ0KICAg ICAgICAgZW50cnlfY29udGVudCA9IGwxZV9lbXB0eSgpOw0KIA0KQEAgLTI3OCw3ICsyNzgsNyBA QCBpbnQgcDJtX2FsbG9jX3RhYmxlKHN0cnVjdCBkb21haW4gKmQsDQogICAgICAgICBwMm1fdW5s b2NrKGQpOw0KICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQogICAgIH0NCi1saXN0X2FkZF90YWls KCZwMm1fdG9wLT5saXN0LCAmZC0+YXJjaC5wMm0ucGFnZXMpOw0KKyAgICBsaXN0X2FkZF90YWls KCZwMm1fdG9wLT5saXN0LCAmZC0+YXJjaC5wMm0ucGFnZXMpOw0KIA0KICAgICBwMm1fdG9wLT5j b3VudF9pbmZvID0gMTsNCiAgICAgcDJtX3RvcC0+dS5pbnVzZS50eXBlX2luZm8gPSANCkBAIC0y OTcsOCArMjk3LDggQEAgbGlzdF9hZGRfdGFpbCgmcDJtX3RvcC0+bGlzdCwgJmQtPmFyY2gucA0K ICANCiAgICAgLyogSW5pdGlhbGlzZSBwaHlzbWFwIHRhYmxlcyBmb3Igc2xvdCB6ZXJvLiBPdGhl ciBjb2RlIGFzc3VtZXMgdGhpcy4gKi8NCiAgICAgZ2ZuID0gMDsNCi1tZm4gPSBfbWZuKElOVkFM SURfTUZOKTsNCi0gICAgaWYgKCAhc2V0X3AybV9lbnRyeShkLCBnZm4sIG1mbikgKQ0KKyAgICBt Zm4gPSBfbWZuKElOVkFMSURfTUZOKTsNCisgICAgaWYgKCAhc2V0X3AybV9lbnRyeShkLCBnZm4s IG1mbiwgX19QQUdFX0hZUEVSVklTT1J8X1BBR0VfVVNFUikgKQ0KICAgICAgICAgZ290byBlcnJv cjsNCiANCiAgICAgZm9yICggZW50cnkgPSBkLT5wYWdlX2xpc3QubmV4dDsNCkBAIC0zMTYsNyAr MzE2LDcgQEAgbWZuID0gX21mbihJTlZBTElEX01GTik7DQogICAgICAgICAgICAgKGdmbiAhPSAw eDU1NTU1NTU1TCkNCiAjZW5kaWYNCiAgICAgICAgICAgICAgJiYgZ2ZuICE9IElOVkFMSURfTTJQ X0VOVFJZDQotICAgICAgICAgICAgICYmICFzZXRfcDJtX2VudHJ5KGQsIGdmbiwgbWZuKSApDQor ICAgICAgICAgICAgICYmICFzZXRfcDJtX2VudHJ5KGQsIGdmbiwgbWZuLCBfX1BBR0VfSFlQRVJW SVNPUnxfUEFHRV9VU0VSKSApDQogICAgICAgICAgICAgZ290byBlcnJvcjsNCiAgICAgfQ0KIA0K QEAgLTQ5Nyw3ICs0OTcsNyBAQCBzdGF0aWMgdm9pZCBhdWRpdF9wMm0oc3RydWN0IGRvbWFpbiAq ZCkNCiAgICAgICAgICAgICAvKiBUaGlzIG0ycCBlbnRyeSBpcyBzdGFsZTogdGhlIGRvbWFpbiBo YXMgYW5vdGhlciBmcmFtZSBpbg0KICAgICAgICAgICAgICAqIHRoaXMgcGh5c2ljYWwgc2xvdC4g IE5vIGdyZWF0IGRpc2FzdGVyLCBidXQgZm9yIG5lYXRuZXNzLA0KICAgICAgICAgICAgICAqIGJs b3cgYXdheSB0aGUgbTJwIGVudHJ5LiAqLyANCi0gICAgICAgICAgICBzZXRfZ3Bmbl9mcm9tX21m bihtZm4sIElOVkFMSURfTTJQX0VOVFJZKTsNCisgICAgICAgICAgICBzZXRfZ3Bmbl9mcm9tX21m bihtZm4sIElOVkFMSURfTTJQX0VOVFJZLCBfX1BBR0VfSFlQRVJWSVNPUnxfUEFHRV9VU0VSKTsN CiAgICAgICAgIH0NCiANCiAgICAgICAgIGlmICggdGVzdF9saW5lYXIgJiYgKGdmbiA8PSBkLT5h cmNoLnAybS5tYXhfbWFwcGVkX3BmbikgKQ0KQEAgLTYyNiw3ICs2MjYsNyBAQCBwMm1fcmVtb3Zl X3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduDQogICAgIEFTU0VSVChtZm5feChnZm5fdG9f bWZuKGQsIGdmbikpID09IG1mbik7DQogICAgIC8vQVNTRVJUKG1mbl90b19nZm4oZCwgbWZuKSA9 PSBnZm4pOw0KIA0KLSAgICBzZXRfcDJtX2VudHJ5KGQsIGdmbiwgX21mbihJTlZBTElEX01GTikp Ow0KKyAgICBzZXRfcDJtX2VudHJ5KGQsIGdmbiwgX21mbihJTlZBTElEX01GTiksIF9fUEFHRV9I WVBFUlZJU09SfF9QQUdFX1VTRVIpOw0KICAgICBzZXRfZ3Bmbl9mcm9tX21mbihtZm4sIElOVkFM SURfTTJQX0VOVFJZKTsNCiB9DQogDQpAQCAtNjU5LDcgKzY1OSw3IEBAIGd1ZXN0X3BoeXNtYXBf YWRkX3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCwNCiAgICAgb21mbiA9IGdmbl90b19tZm4oZCwgZ2Zu KTsNCiAgICAgaWYgKCBtZm5fdmFsaWQob21mbikgKQ0KICAgICB7DQotICAgICAgICBzZXRfcDJt X2VudHJ5KGQsIGdmbiwgX21mbihJTlZBTElEX01GTikpOw0KKyAgICAgICAgc2V0X3AybV9lbnRy eShkLCBnZm4sIF9tZm4oSU5WQUxJRF9NRk4pLCBfX1BBR0VfSFlQRVJWSVNPUnxfUEFHRV9VU0VS KTsNCiAgICAgICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbl94KG9tZm4pLCBJTlZBTElEX00yUF9F TlRSWSk7DQogICAgIH0NCiANCkBAIC02ODUsMTMgKzY4NSwxMjkgQEAgZ3Vlc3RfcGh5c21hcF9h ZGRfcGFnZShzdHJ1Y3QgZG9tYWluICpkLA0KICAgICAgICAgfQ0KICAgICB9DQogDQotICAgIHNl dF9wMm1fZW50cnkoZCwgZ2ZuLCBfbWZuKG1mbikpOw0KKyAgICBzZXRfcDJtX2VudHJ5KGQsIGdm biwgX21mbihtZm4pLCBfX1BBR0VfSFlQRVJWSVNPUnxfUEFHRV9VU0VSKTsNCiAgICAgc2V0X2dw Zm5fZnJvbV9tZm4obWZuLCBnZm4pOw0KIA0KICAgICBhdWRpdF9wMm0oZCk7DQogICAgIHAybV91 bmxvY2soZCk7DQogfQ0KIA0KKy8qIFRoaXMgZnVuY3Rpb24gZ29lcyB0aHJvdWdoIFAyTSB0YWJs ZSBhbmQgbW9kaWZ5IGwxZSBmbGFncyBvZiBhbGwgcGFnZXMuIE5vdGUNCisgKiB0aGF0IHBoeXNp Y2FsIGJhc2UgYWRkcmVzcyBvZiBsMWUgaXMgaW50YWN0LiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1 c2VkIGZvcg0KKyAqIHNwZWNpYWwgcHVycG9zZSwgc3VjaCBhcyBtYXJraW5nIHBoeXNpY2FsIG1l bW9yeSBhcyBOT1QgV1JJVEFCTEUgZm9yDQorICogdHJhY2tpbmcgZGlydHkgcGFnZXMgZHVyaW5n IGxpdmUgbWlncmF0aW9uLg0KKyAqLw0KK3ZvaWQgcDJtX3NldF9mbGFnc19nbG9iYWwoc3RydWN0 IGRvbWFpbiAqZCwgdTMyIGwxZV9mbGFncykNCit7DQorICAgIHVuc2lnbmVkIGxvbmcgbWZuLCBn Zm47DQorICAgIGwxX3BnZW50cnlfdCBsMWVfY29udGVudDsNCisgICAgbDFfcGdlbnRyeV90ICps MWU7DQorICAgIGwyX3BnZW50cnlfdCAqbDJlOw0KKyAgICBpbnQgaTEsIGkyOw0KKyNpZiBDT05G SUdfUEFHSU5HX0xFVkVMUyA+PSAzDQorICAgIGwzX3BnZW50cnlfdCAqbDNlOw0KKyAgICBpbnQg aTM7DQorI2lmIENPTkZJR19QQUdJTkdfTEVWRUxTID09IDQNCisgICAgbDRfcGdlbnRyeV90ICps NGU7DQorICAgIGludCBpNDsNCisjZW5kaWYgLyogQ09ORklHX1BBR0lOR19MRVZFTFMgPT0gNCAq Lw0KKyNlbmRpZiAvKiBDT05GSUdfUEFHSU5HX0xFVkVMUyA+PSAzICovDQorICAgIA0KKyAgICBp ZiAoICFwYWdpbmdfbW9kZV90cmFuc2xhdGUoZCkgKQ0KKyAgICAgICAgcmV0dXJuOw0KKyANCisg ICAgaWYgKCBwYWdldGFibGVfZ2V0X3BmbihkLT5hcmNoLnBoeXNfdGFibGUpID09IDAgKQ0KKyAg ICAgICAgcmV0dXJuOw0KKw0KKyAgICBwMm1fbG9jayhkKTsNCisgICAgICAgIA0KKyNpZiBDT05G SUdfUEFHSU5HX0xFVkVMUyA9PSA0DQorICAgIGw0ZSA9IG1hcF9kb21haW5fcGFnZShtZm5feChw YWdldGFibGVfZ2V0X21mbihkLT5hcmNoLnBoeXNfdGFibGUpKSk7DQorI2VsaWYgQ09ORklHX1BB R0lOR19MRVZFTFMgPT0gMw0KKyAgICBsM2UgPSBtYXBfZG9tYWluX3BhZ2UobWZuX3gocGFnZXRh YmxlX2dldF9tZm4oZC0+YXJjaC5waHlzX3RhYmxlKSkpOw0KKyNlbHNlIC8qIENPTkZJR19QQUdJ TkdfTEVWRUxTID09IDIgKi8NCisgICAgbDJlID0gbWFwX2RvbWFpbl9wYWdlKG1mbl94KHBhZ2V0 YWJsZV9nZXRfbWZuKGQtPmFyY2gucGh5c190YWJsZSkpKTsNCisjZW5kaWYNCisNCisjaWYgQ09O RklHX1BBR0lOR19MRVZFTFMgPj0gMw0KKyNpZiBDT05GSUdfUEFHSU5HX0xFVkVMUyA+PSA0DQor ICAgIGZvciAoIGk0ID0gMDsgaTQgPCBMNF9QQUdFVEFCTEVfRU5UUklFUzsgaTQrKyApIA0KKyAg ICB7DQorCWlmICggIShsNGVfZ2V0X2ZsYWdzKGw0ZVtpNF0pICYgX1BBR0VfUFJFU0VOVCkgKQ0K Kwl7DQorCSAgICBjb250aW51ZTsNCisJfQ0KKwlsM2UgPSBtYXBfZG9tYWluX3BhZ2UobWZuX3go X21mbihsNGVfZ2V0X3BmbihsNGVbaTRdKSkpKTsNCisjZW5kaWYgLyogbm93IGF0IGxldmVscyAz IG9yIDQuLi4gKi8NCisJZm9yICggaTMgPSAwOyANCisJICAgICAgaTMgPCAoKENPTkZJR19QQUdJ TkdfTEVWRUxTPT00KSA/IEwzX1BBR0VUQUJMRV9FTlRSSUVTIDogOCk7IA0KKwkgICAgICBpMysr ICkNCisJew0KKwkgICAgaWYgKCAhKGwzZV9nZXRfZmxhZ3MobDNlW2kzXSkgJiBfUEFHRV9QUkVT RU5UKSApDQorCSAgICB7DQorCQljb250aW51ZTsNCisJICAgIH0NCisJICAgIGwyZSA9IG1hcF9k b21haW5fcGFnZShtZm5feChfbWZuKGwzZV9nZXRfcGZuKGwzZVtpM10pKSkpOw0KKyNlbmRpZiAv KiBhbGwgbGV2ZWxzLi4uICovDQorCSAgICBmb3IgKCBpMiA9IDA7IGkyIDwgTDJfUEFHRVRBQkxF X0VOVFJJRVM7IGkyKysgKQ0KKwkgICAgew0KKwkJaWYgKCAhKGwyZV9nZXRfZmxhZ3MobDJlW2ky XSkgJiBfUEFHRV9QUkVTRU5UKSApDQorCQl7DQorCQkgICAgY29udGludWU7DQorCQl9DQorCQls MWUgPSBtYXBfZG9tYWluX3BhZ2UobWZuX3goX21mbihsMmVfZ2V0X3BmbihsMmVbaTJdKSkpKTsN CisJCQ0KKwkJZm9yICggaTEgPSAwOyBpMSA8IEwxX1BBR0VUQUJMRV9FTlRSSUVTOyBpMSsrLCBn Zm4rKyApDQorCQl7DQorCQkgICAgaWYgKCAhKGwxZV9nZXRfZmxhZ3MobDFlW2kxXSkgJiBfUEFH RV9QUkVTRU5UKSApDQorCQkJY29udGludWU7DQorCQkgICAgbWZuID0gbDFlX2dldF9wZm4obDFl W2kxXSk7DQorCQkgICAgZ2ZuID0gZ2V0X2dwZm5fZnJvbV9tZm4obWZuKTsNCisJCSAgICAvKiBj cmVhdGUgYSBuZXcgMWxlIGVudHJ5IHVzaW5nIGwxZV9mbGFncyAqLw0KKwkJICAgIGwxZV9jb250 ZW50ID0gbDFlX2Zyb21fcGZuKG1mbiwgbDFlX2ZsYWdzKTsNCisJCSAgICBwYWdpbmdfd3JpdGVf cDJtX2VudHJ5KGQsIGdmbiwgJmwxZVtpMV0sIGwxZV9jb250ZW50LCAxKTsNCisJCX0NCisJCXVu bWFwX2RvbWFpbl9wYWdlKGwxZSk7DQorCSAgICB9DQorI2lmIENPTkZJR19QQUdJTkdfTEVWRUxT ID49IDMNCisJICAgIHVubWFwX2RvbWFpbl9wYWdlKGwyZSk7DQorCX0NCisjaWYgQ09ORklHX1BB R0lOR19MRVZFTFMgPj0gNA0KKwl1bm1hcF9kb21haW5fcGFnZShsM2UpOw0KKyAgICB9DQorI2Vu ZGlmDQorI2VuZGlmDQorDQorI2lmIENPTkZJR19QQUdJTkdfTEVWRUxTID09IDQNCisgICAgdW5t YXBfZG9tYWluX3BhZ2UobDRlKTsNCisjZWxpZiBDT05GSUdfUEFHSU5HX0xFVkVMUyA9PSAzDQor ICAgIHVubWFwX2RvbWFpbl9wYWdlKGwzZSk7DQorI2Vsc2UgLyogQ09ORklHX1BBR0lOR19MRVZF TFMgPT0gMiAqLw0KKyAgICB1bm1hcF9kb21haW5fcGFnZShsMmUpOw0KKyNlbmRpZg0KKw0KKyAg ICBwMm1fdW5sb2NrKGQpOw0KK30NCisNCisvKiBUaGlzIGZ1bmN0aW9uIHRyYWNlcyB0aHJvdWdo IFAyTSB0YWJsZSBhbmQgbW9kaWZpZXMgbDFlIGZsYWdzIG9mIGEgc3BlY2lmaWMNCisgKiBncGEu DQorICovDQoraW50IHAybV9zZXRfZmxhZ3Moc3RydWN0IGRvbWFpbiAqZCwgcGFkZHJfdCBncGEs IHUzMiBsMWVfZmxhZ3MpDQorew0KKyAgICB1bnNpZ25lZCBsb25nIGdmbjsNCisgICAgbWZuX3Qg bWZuOw0KKw0KKyAgICBwMm1fbG9jayhkKTsNCisNCisgICAgZ2ZuID0gZ3BhID4+IFBBR0VfU0hJ RlQ7DQorICAgIG1mbiA9IGdmbl90b19tZm4oZCwgZ2ZuKTsNCisgICAgaWYgKCBtZm5fdmFsaWQo bWZuKSApDQorICAgICAgICBzZXRfcDJtX2VudHJ5KGQsIGdmbiwgbWZuLCBsMWVfZmxhZ3MpOw0K KyAgICANCisgICAgcDJtX3VubG9jayhkKTsNCisNCisgICAgcmV0dXJuIDE7DQorfQ0KIA0KIC8q DQogICogTG9jYWwgdmFyaWFibGVzOg0KZGlmZiAtciA5YmM2YTE5NmFkMGUgLXIgOGYzNjM5ZDky YjA4IHhlbi9pbmNsdWRlL2FzbS14ODYvcDJtLmgNCi0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYv cDJtLmgJVGh1IEp1biAwNyAwMzo1Mzo1OSAyMDA3IC0wNTAwDQorKysgYi94ZW4vaW5jbHVkZS9h c20teDg2L3AybS5oCVRodSBKdW4gMDcgMDY6Mzk6MzkgMjAwNyAtMDUwMA0KQEAgLTEyOSw2ICsx MjksMTEgQEAgdm9pZCBndWVzdF9waHlzbWFwX3JlbW92ZV9wYWdlKHN0cnVjdCBkbw0KIHZvaWQg Z3Vlc3RfcGh5c21hcF9yZW1vdmVfcGFnZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25n IGdmbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtZm4p Ow0KIA0KKy8qIHNldCBQMk0gdGFibGUgbDFlIGZsYWdzICovDQordm9pZCBwMm1fc2V0X2ZsYWdz X2dsb2JhbChzdHJ1Y3QgZG9tYWluICpkLCB1MzIgbDFlX2ZsYWdzKTsNCisNCisvKiBzZXQgUDJN IHRhYmxlIGwxZSBmbGFncyBmb3IgYSBncGEgKi8NCitpbnQgcDJtX3NldF9mbGFncyhzdHJ1Y3Qg ZG9tYWluICpkLCBwYWRkcl90IGdwYSwgdTMyIGwxZV9mbGFncyk7DQogDQogI2VuZGlmIC8qIF9Y RU5fUDJNX0ggKi8NCiANCg== ------_=_NextPart_001_01C7A94F.004CE5CF Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel ------_=_NextPart_001_01C7A94F.004CE5CF-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tim Deegan Subject: Re: [RFC] Nested Paging Live Migration Date: Fri, 8 Jun 2007 11:52:15 +0100 Message-ID: <20070608105215.GA15027@york.uk.xensource.com> References: <7D748C767B7FA541A8AC5504A4C89A23030EF9B2@SAUSEXMB2.amd.com> <20070601161726.GB16995@york.uk.xensource.com> <46663824.6030200@amd.com> <20070606095446.GA21688@york.uk.xensource.com> <7D748C767B7FA541A8AC5504A4C89A23032DDB14@SAUSEXMB2.amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Return-path: Content-Disposition: inline In-Reply-To: <7D748C767B7FA541A8AC5504A4C89A23032DDB14@SAUSEXMB2.amd.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "Huang2, Wei" Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Hi, This patch is much nicer. One or two more nits below, and a Signed-off-by: line, please. :) At 16:58 -0500 on 07 Jun (1181235517), Huang2, Wei wrote: > +int hap_enable_log_dirty(struct domain *d) > +{ > + /* turn on PG_log_dirty bit in paging mode */ > + d->arch.paging.mode |= PG_log_dirty; > + p2m_set_flags_global(d, (_PAGE_PRESENT|_PAGE_USER)); > + flush_tlb_all_pge(); > + > + return 0; > +} > + > +int hap_disable_log_dirty(struct domain *d) > +{ > + /* log dirty already accquired lock to guard this code */ > + d->arch.paging.mode &= ~PG_log_dirty; > + p2m_set_flags_global(d, __PAGE_HYPERVISOR|_PAGE_USER); > + > + return 1; > +} The log-dirty lock doesn't guard against concurrent updates of d->arch.paging.mode! You need the HAP lock here. > int paging_domctl(struct domain *d, xen_domctl_shadow_op_t *sc, > XEN_GUEST_HANDLE(void) u_domctl) > { > + int rc; > + > + if ( unlikely(d == current->domain) ) > + { > + gdprintk(XENLOG_INFO, "Dom %u tried to do a shadow op on itself.\n", (and subsequently) s/shadow/paging/ here? > @@ -2565,7 +2568,7 @@ void shadow_teardown(struct domain *d) > if (d->arch.paging.shadow.hash_table) > shadow_hash_teardown(d); > /* Release the log-dirty bitmap of dirtied pages */ > - sh_free_log_dirty_bitmap(d); > + paging_free_log_dirty_bitmap(d); Shouldn't this be handled in paging.c? Otherwise we'd need to acquire the log-dirty lock with the shadow lock held. Cheers, Tim. -- Tim Deegan , XenSource UK Limited Registered office c/o EC2Y 5EB, UK; company number 05334508 From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Huang2, Wei" Subject: RE: [RFC] Nested Paging Live Migration Date: Fri, 8 Jun 2007 11:09:54 -0500 Message-ID: <7D748C767B7FA541A8AC5504A4C89A23032DDD59@SAUSEXMB2.amd.com> References: <7D748C767B7FA541A8AC5504A4C89A23030EF9B2@SAUSEXMB2.amd.com> <20070601161726.GB16995@york.uk.xensource.com> <46663824.6030200@amd.com> <20070606095446.GA21688@york.uk.xensource.com> <7D748C767B7FA541A8AC5504A4C89A23032DDB14@SAUSEXMB2.amd.com> <20070608105215.GA15027@york.uk.xensource.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C7A9E7.73FE450C" Return-path: Content-class: urn:content-classes:message In-Reply-To: <20070608105215.GA15027@york.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Tim Deegan Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C7A9E7.73FE450C Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable This patch creates a common interface for live migration. It also supports nested paging live migration. Signed-off-by: Wei Huang arch/x86/hvm/hvm.c | 2=20 arch/x86/hvm/io.c | 2=20 arch/x86/hvm/svm/svm.c | 4=20 arch/x86/mm.c | 12 - arch/x86/mm/hap/hap.c | 58 ++++++- arch/x86/mm/p2m.c | 136 ++++++++++++++++- arch/x86/mm/paging.c | 323 ++++++++++++++++++++++++++++++++++++++++- arch/x86/mm/shadow/common.c | 330 +++++++----------------------------------- arch/x86/mm/shadow/multi.c | 12 - arch/x86/mm/shadow/private.h | 6=20 include/asm-x86/domain.h | 45 +++-- include/asm-x86/grant_table.h | 2=20 include/asm-x86/p2m.h | 5=20 include/asm-x86/paging.h | 26 +++ include/asm-x86/shadow.h | 18 +- 15 files changed, 642 insertions(+), 339 deletions(-) ------_=_NextPart_001_01C7A9E7.73FE450C Content-Type: text/plain; name=live_migration_patch.txt Content-Transfer-Encoding: base64 Content-Description: live_migration_patch.txt Content-Disposition: attachment; filename=live_migration_patch.txt ZGlmZiAtciA0NTUxNmFjOTRjOWYgeGVuL2FyY2gveDg2L2h2bS9odm0uYw0KLS0tIGEveGVuL2Fy Y2gveDg2L2h2bS9odm0uYwlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hl bi9hcmNoL3g4Ni9odm0vaHZtLmMJV2VkIEp1biAwNiAxMjowNTo0MiAyMDA3IC0wNTAwDQpAQCAt NTY4LDcgKzU2OCw3IEBAIHN0YXRpYyBpbnQgX19odm1fY29weSh2b2lkICpidWYsIHBhZGRyX3QN CiAgICAgICAgIGlmICggZGlyICkNCiAgICAgICAgIHsNCiAgICAgICAgICAgICBtZW1jcHkocCwg YnVmLCBjb3VudCk7IC8qIGRpciA9PSBUUlVFOiAgKnRvKiBndWVzdCAqLw0KLSAgICAgICAgICAg IG1hcmtfZGlydHkoY3VycmVudC0+ZG9tYWluLCBtZm4pOw0KKyAgICAgICAgICAgIHBhZ2luZ19t YXJrX2RpcnR5KGN1cnJlbnQtPmRvbWFpbiwgbWZuKTsNCiAgICAgICAgIH0NCiAgICAgICAgIGVs c2UNCiAgICAgICAgICAgICBtZW1jcHkoYnVmLCBwLCBjb3VudCk7IC8qIGRpciA9PSBGQUxTRTog KmZyb20gZ3Vlc3QgKi8NCmRpZmYgLXIgNDU1MTZhYzk0YzlmIHhlbi9hcmNoL3g4Ni9odm0vaW8u Yw0KLS0tIGEveGVuL2FyY2gveDg2L2h2bS9pby5jCVdlZCBKdW4gMDYgMDg6MzI6MzIgMjAwNyAt MDUwMA0KKysrIGIveGVuL2FyY2gveDg2L2h2bS9pby5jCVdlZCBKdW4gMDYgMTI6MDU6NTYgMjAw NyAtMDUwMA0KQEAgLTg2NSw3ICs4NjUsNyBAQCB2b2lkIGh2bV9pb19hc3Npc3Qodm9pZCkNCiAg ICAgaWYgKCAocC0+ZGlyID09IElPUkVRX1JFQUQpICYmIHAtPmRhdGFfaXNfcHRyICkNCiAgICAg ew0KICAgICAgICAgZ21mbiA9IGdldF9tZm5fZnJvbV9ncGZuKHBhZ2luZ19ndmFfdG9fZ2ZuKHYs IHAtPmRhdGEpKTsNCi0gICAgICAgIG1hcmtfZGlydHkoZCwgZ21mbik7DQorICAgICAgICBwYWdp bmdfbWFya19kaXJ0eShkLCBnbWZuKTsNCiAgICAgfQ0KIA0KICBvdXQ6DQpkaWZmIC1yIDQ1NTE2 YWM5NGM5ZiB4ZW4vYXJjaC94ODYvaHZtL3N2bS9zdm0uYw0KLS0tIGEveGVuL2FyY2gveDg2L2h2 bS9zdm0vc3ZtLmMJV2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJj aC94ODYvaHZtL3N2bS9zdm0uYwlUaHUgSnVuIDA3IDA2OjM2OjA0IDIwMDcgLTA1MDANCkBAIC0x MDMzLDggKzEwMzMsOCBAQCBzdGF0aWMgaW50IHN2bV9kb19uZXN0ZWRfcGdmYXVsdChwYWRkcl90 DQogICAgICAgICByZXR1cm4gMTsNCiAgICAgfQ0KIA0KLSAgICAvKiBXZSBzaG91bGQgbm90IHJl YWNoIGhlcmUuIE90aGVyd2lzZSwgUDJNIHRhYmxlIGlzIG5vdCBjb3JyZWN0LiovDQotICAgIHJl dHVybiAwOw0KKyAgICBwYWdpbmdfbWFya19kaXJ0eShjdXJyZW50LT5kb21haW4sIGdldF9tZm5f ZnJvbV9ncGZuKGdwYSA+PiBQQUdFX1NISUZUKSk7DQorICAgIHJldHVybiBwMm1fc2V0X2ZsYWdz KGN1cnJlbnQtPmRvbWFpbiwgZ3BhLCBfX1BBR0VfSFlQRVJWSVNPUnxfUEFHRV9VU0VSKTsNCiB9 DQogDQogc3RhdGljIHZvaWQgc3ZtX2RvX25vX2RldmljZV9mYXVsdChzdHJ1Y3Qgdm1jYl9zdHJ1 Y3QgKnZtY2IpDQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiB4ZW4vYXJjaC94ODYvbW0uYw0KLS0tIGEv eGVuL2FyY2gveDg2L21tLmMJV2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94 ZW4vYXJjaC94ODYvbW0uYwlXZWQgSnVuIDA2IDEyOjA1OjEwIDIwMDcgLTA1MDANCkBAIC0xNTU2 LDcgKzE1NTYsNyBAQCBpbnQgYWxsb2NfcGFnZV90eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhDQog DQogICAgIC8qIEEgcGFnZSB0YWJsZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHR5cGUgY291bnQgYmVj b21lcyBub24temVyby4gKi8NCiAgICAgaWYgKCBsaWtlbHkob3duZXIgIT0gTlVMTCkgKQ0KLSAg ICAgICAgbWFya19kaXJ0eShvd25lciwgcGFnZV90b19tZm4ocGFnZSkpOw0KKyAgICAgICAgcGFn aW5nX21hcmtfZGlydHkob3duZXIsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsNCiANCiAgICAgc3dpdGNo ICggdHlwZSAmIFBHVF90eXBlX21hc2sgKQ0KICAgICB7DQpAQCAtMTYwMiw3ICsxNjAyLDcgQEAg dm9pZCBmcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYQ0KICAgICAgICAgaWYgKCB1 bmxpa2VseShwYWdpbmdfbW9kZV9lbmFibGVkKG93bmVyKSkgKQ0KICAgICAgICAgew0KICAgICAg ICAgICAgIC8qIEEgcGFnZSB0YWJsZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHR5cGUgY291bnQgYmVj b21lcyB6ZXJvLiAqLw0KLSAgICAgICAgICAgIG1hcmtfZGlydHkob3duZXIsIHBhZ2VfdG9fbWZu KHBhZ2UpKTsNCisgICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShvd25lciwgcGFnZV90b19t Zm4ocGFnZSkpOw0KIA0KICAgICAgICAgICAgIGlmICggc2hhZG93X21vZGVfcmVmY291bnRzKG93 bmVyKSApDQogICAgICAgICAgICAgICAgIHJldHVybjsNCkBAIC0yMDU3LDcgKzIwNTcsNyBAQCBp bnQgZG9fbW11ZXh0X29wKA0KICAgICAgICAgICAgIH0NCiANCiAgICAgICAgICAgICAvKiBBIHBh Z2UgaXMgZGlydGllZCB3aGVuIGl0cyBwaW4gc3RhdHVzIGlzIHNldC4gKi8NCi0gICAgICAgICAg ICBtYXJrX2RpcnR5KGQsIG1mbik7DQorICAgICAgICAgICAgcGFnaW5nX21hcmtfZGlydHkoZCwg bWZuKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgIC8qIFdlIGNhbiByYWNlIGRvbWFpbiBk ZXN0cnVjdGlvbiAoZG9tYWluX3JlbGlucXVpc2hfcmVzb3VyY2VzKS4gKi8NCiAgICAgICAgICAg ICBpZiAoIHVubGlrZWx5KHRoaXNfY3B1KHBlcmNwdV9tbV9pbmZvKS5mb3JlaWduICE9IE5VTEwp ICkNCkBAIC0yMDg5LDcgKzIwODksNyBAQCBpbnQgZG9fbW11ZXh0X29wKA0KICAgICAgICAgICAg ICAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdlKTsNCiAgICAgICAgICAgICAgICAgcHV0X3BhZ2Uo cGFnZSk7DQogICAgICAgICAgICAgICAgIC8qIEEgcGFnZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHBp biBzdGF0dXMgaXMgY2xlYXJlZC4gKi8NCi0gICAgICAgICAgICAgICAgbWFya19kaXJ0eShkLCBt Zm4pOw0KKyAgICAgICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShkLCBtZm4pOw0KICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgew0KQEAgLTI0MjQsNyAr MjQyNCw3IEBAIGludCBkb19tbXVfdXBkYXRlKA0KICAgICAgICAgICAgIHNldF9ncGZuX2Zyb21f bWZuKG1mbiwgZ3Bmbik7DQogICAgICAgICAgICAgb2theSA9IDE7DQogDQotICAgICAgICAgICAg bWFya19kaXJ0eShGT1JFSUdORE9NLCBtZm4pOw0KKyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2Rp cnR5KEZPUkVJR05ET00sIG1mbik7DQogDQogICAgICAgICAgICAgcHV0X3BhZ2UobWZuX3RvX3Bh Z2UobWZuKSk7DQogICAgICAgICAgICAgYnJlYWs7DQpAQCAtMzAwNSw3ICszMDA1LDcgQEAgbG9u ZyBkb191cGRhdGVfZGVzY3JpcHRvcih1NjQgcGEsIHU2NCBkZQ0KICAgICAgICAgYnJlYWs7DQog ICAgIH0NCiANCi0gICAgbWFya19kaXJ0eShkb20sIG1mbik7DQorICAgIHBhZ2luZ19tYXJrX2Rp cnR5KGRvbSwgbWZuKTsNCiANCiAgICAgLyogQWxsIGlzIGdvb2Qgc28gbWFrZSB0aGUgdXBkYXRl LiAqLw0KICAgICBnZHRfcGVudCA9IG1hcF9kb21haW5fcGFnZShtZm4pOw0KZGlmZiAtciA0NTUx NmFjOTRjOWYgeGVuL2FyY2gveDg2L21tL2hhcC9oYXAuYw0KLS0tIGEveGVuL2FyY2gveDg2L21t L2hhcC9oYXAuYwlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hlbi9hcmNo L3g4Ni9tbS9oYXAvaGFwLmMJRnJpIEp1biAwOCAwNDo0ODoyNSAyMDA3IC0wNTAwDQpAQCAtNDks NiArNDksNDAgQEANCiAjdW5kZWYgcGFnZV90b19tZm4NCiAjZGVmaW5lIHBhZ2VfdG9fbWZuKF9w ZykgKF9tZm4oKF9wZykgLSBmcmFtZV90YWJsZSkpDQogDQorLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgIEhBUCBMT0cgRElS VFkgU1VQUE9SVCAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovDQorLyogaGFwIGNvZGUgdG8gY2FsbCB3aGVuIGxvZ19kaXJ0 eSBpcyBlbmFibGUuIHJldHVybiAwIGlmIG5vIHByb2JsZW0gZm91bmQuICovDQoraW50IGhhcF9l bmFibGVfbG9nX2RpcnR5KHN0cnVjdCBkb21haW4gKmQpDQorew0KKyAgICBoYXBfbG9jayhkKTsN CisgICAgLyogdHVybiBvbiBQR19sb2dfZGlydHkgYml0IGluIHBhZ2luZyBtb2RlICovDQorICAg IGQtPmFyY2gucGFnaW5nLm1vZGUgfD0gUEdfbG9nX2RpcnR5Ow0KKyAgICAvKiBzZXQgbDFlIGVu dHJpZXMgb2YgUDJNIHRhYmxlIHRvIE5PVF9XUklUQUJMRS4gKi8NCisgICAgcDJtX3NldF9mbGFn c19nbG9iYWwoZCwgKF9QQUdFX1BSRVNFTlR8X1BBR0VfVVNFUikpOw0KKyAgICBmbHVzaF90bGJf YWxsX3BnZSgpOw0KKyAgICBoYXBfdW5sb2NrKGQpOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQor DQoraW50IGhhcF9kaXNhYmxlX2xvZ19kaXJ0eShzdHJ1Y3QgZG9tYWluICpkKQ0KK3sNCisgICAg aGFwX2xvY2soZCk7DQorICAgIGQtPmFyY2gucGFnaW5nLm1vZGUgJj0gflBHX2xvZ19kaXJ0eTsN CisgICAgLyogc2V0IGwxZSBlbnRyaWVzIG9mIFAyTSB0YWJsZSB3aXRoIG5vcm1hbCBtb2RlICov DQorICAgIHAybV9zZXRfZmxhZ3NfZ2xvYmFsKGQsIF9fUEFHRV9IWVBFUlZJU09SfF9QQUdFX1VT RVIpOw0KKyAgICBoYXBfdW5sb2NrKGQpOw0KKyAgICANCisgICAgcmV0dXJuIDE7DQorfQ0KKw0K K3ZvaWQgaGFwX2NsZWFuX2RpcnR5X2JpdG1hcChzdHJ1Y3QgZG9tYWluICpkKQ0KK3sNCisgICAg LyogbWFyayBwaHlzaWNhbCBtZW1vcnkgYXMgTk9UX1dSSVRFQUJMRSBhbmQgZmx1c2ggdGhlIFRM QiAqLw0KKyAgICBwMm1fc2V0X2ZsYWdzX2dsb2JhbChkLCAoX1BBR0VfUFJFU0VOVHxfUEFHRV9V U0VSKSk7DQorICAgIGZsdXNoX3RsYl9hbGxfcGdlKCk7DQorfQ0KIC8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogLyogICAgICAgICAgICAgSEFQIFNV UFBPUlQgRlVOQ1RJT05TICAgICAgICAgICAgKi8NCiAvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLw0KQEAgLTQyMSw2ICs0NTUsMTAgQEAgaW50IGhhcF9l bmFibGUoc3RydWN0IGRvbWFpbiAqZCwgdTMyIG1vZA0KICAgICAgICAgfQ0KICAgICB9DQogDQor ICAgIC8qIGluaXRpYWxpemUgbG9nIGRpcnR5IGhlcmUgKi8NCisgICAgcGFnaW5nX2xvZ19kaXJ0 eV9pbml0KGQsIGhhcF9lbmFibGVfbG9nX2RpcnR5LCBoYXBfZGlzYWJsZV9sb2dfZGlydHksDQor ICAgICAgICAgICAgICAgICAgICAgICAgICBoYXBfY2xlYW5fZGlydHlfYml0bWFwKTsNCisNCiAg ICAgLyogYWxsb2NhdGUgUDJtIHRhYmxlICovDQogICAgIGlmICggbW9kZSAmIFBHX3RyYW5zbGF0 ZSApIHsNCiAgICAgICAgIHJ2ID0gcDJtX2FsbG9jX3RhYmxlKGQsIGhhcF9hbGxvY19wMm1fcGFn ZSwgaGFwX2ZyZWVfcDJtX3BhZ2UpOw0KQEAgLTQ5OCwxMSArNTM2LDYgQEAgaW50IGhhcF9kb21j dGwoc3RydWN0IGRvbWFpbiAqZCwgeGVuX2RvbQ0KIA0KICAgICBIRVJFX0lfQU07DQogDQotICAg IGlmICggdW5saWtlbHkoZCA9PSBjdXJyZW50LT5kb21haW4pICkgew0KLSAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX0lORk8sICJEb24ndCB0cnkgdG8gZG8gYSBoYXAgb3Agb24geW91cnNlbGYhXG4i KTsNCi0gICAgICAgIHJldHVybiAtRUlOVkFMOw0KLSAgICB9DQotICAgIA0KICAgICBzd2l0Y2gg KCBzYy0+b3AgKSB7DQogICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfU0VUX0FMTE9DQVRJ T046DQogICAgICAgICBoYXBfbG9jayhkKTsNCkBAIC02NjksNyArNzAyLDE2IEBAIGhhcF93cml0 ZV9wMm1fZW50cnkoc3RydWN0IHZjcHUgKnYsIHVuc2kNCiBoYXBfd3JpdGVfcDJtX2VudHJ5KHN0 cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIGdmbiwgbDFfcGdlbnRyeV90ICpwLA0KICAgICAg ICAgICAgICAgICAgICAgbDFfcGdlbnRyeV90IG5ldywgdW5zaWduZWQgaW50IGxldmVsKQ0KIHsN Ci0gICAgaGFwX2xvY2sodi0+ZG9tYWluKTsNCisgICAgaW50IGRvX2xvY2tpbmc7DQorDQorICAg IC8qIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBmcm9tIHR3byBkaXJlY3Rpb25zIChQMk0g YW5kIGxvZyBkaXJ0eSkuIFdlDQorICAgICAqICBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGxvY2sg aGFzIGJlZW4gaGVsZCBvciBub3QuDQorICAgICAqLw0KKyAgICBkb19sb2NraW5nID0gIWhhcF9s b2NrZWRfYnlfbWUodi0+ZG9tYWluKTsNCisNCisgICAgaWYgKCBkb19sb2NraW5nICkNCisgICAg ICAgIGhhcF9sb2NrKHYtPmRvbWFpbik7DQorDQogICAgIHNhZmVfd3JpdGVfcHRlKHAsIG5ldyk7 DQogI2lmIENPTkZJR19QQUdJTkdfTEVWRUxTID09IDMNCiAgICAgLyogaW5zdGFsbCBQMk0gaW4g bW9uaXRvciB0YWJsZSBmb3IgUEFFIFhlbiAqLw0KQEAgLTY4MCw3ICs3MjIsOSBAQCBoYXBfd3Jp dGVfcDJtX2VudHJ5KHN0cnVjdCB2Y3B1ICp2LCB1bnNpDQogCQ0KICAgICB9DQogI2VuZGlmDQot ICAgIGhhcF91bmxvY2sodi0+ZG9tYWluKTsNCisgICAgDQorICAgIGlmICggZG9fbG9ja2luZyAp DQorICAgICAgICBoYXBfdW5sb2NrKHYtPmRvbWFpbik7DQogfQ0KIA0KIC8qIEVudHJ5IHBvaW50 cyBpbnRvIHRoaXMgbW9kZSBvZiB0aGUgaGFwIGNvZGUuICovDQpkaWZmIC1yIDQ1NTE2YWM5NGM5 ZiB4ZW4vYXJjaC94ODYvbW0vcDJtLmMNCi0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9wMm0uYwlXZWQg SnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS9wMm0uYwlU aHUgSnVuIDA3IDA1OjU3OjA5IDIwMDcgLTA1MDANCkBAIC0xNjksNyArMTY5LDcgQEAgcDJtX25l eHRfbGV2ZWwoc3RydWN0IGRvbWFpbiAqZCwgbWZuX3QgKg0KIA0KIC8vIFJldHVybnMgMCBvbiBl cnJvciAob3V0IG9mIG1lbW9yeSkNCiBzdGF0aWMgaW50DQotc2V0X3AybV9lbnRyeShzdHJ1Y3Qg ZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGdmbiwgbWZuX3QgbWZuKQ0KK3NldF9wMm1fZW50cnko c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4sIG1mbl90IG1mbiwgdTMyIGwxZV9m bGFncykNCiB7DQogICAgIC8vIFhYWCAtLSB0aGlzIG1pZ2h0IGJlIGFibGUgdG8gYmUgZmFzdGVy IGlmZiBjdXJyZW50LT5kb21haW4gPT0gZA0KICAgICBtZm5fdCB0YWJsZV9tZm4gPSBwYWdldGFi bGVfZ2V0X21mbihkLT5hcmNoLnBoeXNfdGFibGUpOw0KQEAgLTIxMyw3ICsyMTMsNyBAQCBzZXRf cDJtX2VudHJ5KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkDQogICAgICAgICBkLT5hcmNoLnAy bS5tYXhfbWFwcGVkX3BmbiA9IGdmbjsNCiANCiAgICAgaWYgKCBtZm5fdmFsaWQobWZuKSApDQot ICAgICAgICBlbnRyeV9jb250ZW50ID0gbDFlX2Zyb21fcGZuKG1mbl94KG1mbiksIF9fUEFHRV9I WVBFUlZJU09SfF9QQUdFX1VTRVIpOw0KKyAgICAgICAgZW50cnlfY29udGVudCA9IGwxZV9mcm9t X3BmbihtZm5feChtZm4pLCBsMWVfZmxhZ3MpOw0KICAgICBlbHNlDQogICAgICAgICBlbnRyeV9j b250ZW50ID0gbDFlX2VtcHR5KCk7DQogDQpAQCAtMjc4LDcgKzI3OCw3IEBAIGludCBwMm1fYWxs b2NfdGFibGUoc3RydWN0IGRvbWFpbiAqZCwNCiAgICAgICAgIHAybV91bmxvY2soZCk7DQogICAg ICAgICByZXR1cm4gLUVOT01FTTsNCiAgICAgfQ0KLWxpc3RfYWRkX3RhaWwoJnAybV90b3AtPmxp c3QsICZkLT5hcmNoLnAybS5wYWdlcyk7DQorICAgIGxpc3RfYWRkX3RhaWwoJnAybV90b3AtPmxp c3QsICZkLT5hcmNoLnAybS5wYWdlcyk7DQogDQogICAgIHAybV90b3AtPmNvdW50X2luZm8gPSAx Ow0KICAgICBwMm1fdG9wLT51LmludXNlLnR5cGVfaW5mbyA9IA0KQEAgLTI5Nyw4ICsyOTcsOCBA QCBsaXN0X2FkZF90YWlsKCZwMm1fdG9wLT5saXN0LCAmZC0+YXJjaC5wDQogIA0KICAgICAvKiBJ bml0aWFsaXNlIHBoeXNtYXAgdGFibGVzIGZvciBzbG90IHplcm8uIE90aGVyIGNvZGUgYXNzdW1l cyB0aGlzLiAqLw0KICAgICBnZm4gPSAwOw0KLW1mbiA9IF9tZm4oSU5WQUxJRF9NRk4pOw0KLSAg ICBpZiAoICFzZXRfcDJtX2VudHJ5KGQsIGdmbiwgbWZuKSApDQorICAgIG1mbiA9IF9tZm4oSU5W QUxJRF9NRk4pOw0KKyAgICBpZiAoICFzZXRfcDJtX2VudHJ5KGQsIGdmbiwgbWZuLCBfX1BBR0Vf SFlQRVJWSVNPUnxfUEFHRV9VU0VSKSApDQogICAgICAgICBnb3RvIGVycm9yOw0KIA0KICAgICBm b3IgKCBlbnRyeSA9IGQtPnBhZ2VfbGlzdC5uZXh0Ow0KQEAgLTMxNiw3ICszMTYsNyBAQCBtZm4g PSBfbWZuKElOVkFMSURfTUZOKTsNCiAgICAgICAgICAgICAoZ2ZuICE9IDB4NTU1NTU1NTVMKQ0K ICNlbmRpZg0KICAgICAgICAgICAgICAmJiBnZm4gIT0gSU5WQUxJRF9NMlBfRU5UUlkNCi0gICAg ICAgICAgICAgJiYgIXNldF9wMm1fZW50cnkoZCwgZ2ZuLCBtZm4pICkNCisgICAgICAgICAgICAg JiYgIXNldF9wMm1fZW50cnkoZCwgZ2ZuLCBtZm4sIF9fUEFHRV9IWVBFUlZJU09SfF9QQUdFX1VT RVIpICkNCiAgICAgICAgICAgICBnb3RvIGVycm9yOw0KICAgICB9DQogDQpAQCAtNDk3LDcgKzQ5 Nyw3IEBAIHN0YXRpYyB2b2lkIGF1ZGl0X3AybShzdHJ1Y3QgZG9tYWluICpkKQ0KICAgICAgICAg ICAgIC8qIFRoaXMgbTJwIGVudHJ5IGlzIHN0YWxlOiB0aGUgZG9tYWluIGhhcyBhbm90aGVyIGZy YW1lIGluDQogICAgICAgICAgICAgICogdGhpcyBwaHlzaWNhbCBzbG90LiAgTm8gZ3JlYXQgZGlz YXN0ZXIsIGJ1dCBmb3IgbmVhdG5lc3MsDQogICAgICAgICAgICAgICogYmxvdyBhd2F5IHRoZSBt MnAgZW50cnkuICovIA0KLSAgICAgICAgICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbiwgSU5WQUxJ RF9NMlBfRU5UUlkpOw0KKyAgICAgICAgICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbiwgSU5WQUxJ RF9NMlBfRU5UUlksIF9fUEFHRV9IWVBFUlZJU09SfF9QQUdFX1VTRVIpOw0KICAgICAgICAgfQ0K IA0KICAgICAgICAgaWYgKCB0ZXN0X2xpbmVhciAmJiAoZ2ZuIDw9IGQtPmFyY2gucDJtLm1heF9t YXBwZWRfcGZuKSApDQpAQCAtNjI2LDcgKzYyNiw3IEBAIHAybV9yZW1vdmVfcGFnZShzdHJ1Y3Qg ZG9tYWluICpkLCB1bnNpZ24NCiAgICAgQVNTRVJUKG1mbl94KGdmbl90b19tZm4oZCwgZ2ZuKSkg PT0gbWZuKTsNCiAgICAgLy9BU1NFUlQobWZuX3RvX2dmbihkLCBtZm4pID09IGdmbik7DQogDQot ICAgIHNldF9wMm1fZW50cnkoZCwgZ2ZuLCBfbWZuKElOVkFMSURfTUZOKSk7DQorICAgIHNldF9w Mm1fZW50cnkoZCwgZ2ZuLCBfbWZuKElOVkFMSURfTUZOKSwgX19QQUdFX0hZUEVSVklTT1J8X1BB R0VfVVNFUik7DQogICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbiwgSU5WQUxJRF9NMlBfRU5UUlkp Ow0KIH0NCiANCkBAIC02NTksNyArNjU5LDcgQEAgZ3Vlc3RfcGh5c21hcF9hZGRfcGFnZShzdHJ1 Y3QgZG9tYWluICpkLA0KICAgICBvbWZuID0gZ2ZuX3RvX21mbihkLCBnZm4pOw0KICAgICBpZiAo IG1mbl92YWxpZChvbWZuKSApDQogICAgIHsNCi0gICAgICAgIHNldF9wMm1fZW50cnkoZCwgZ2Zu LCBfbWZuKElOVkFMSURfTUZOKSk7DQorICAgICAgICBzZXRfcDJtX2VudHJ5KGQsIGdmbiwgX21m bihJTlZBTElEX01GTiksIF9fUEFHRV9IWVBFUlZJU09SfF9QQUdFX1VTRVIpOw0KICAgICAgICAg c2V0X2dwZm5fZnJvbV9tZm4obWZuX3gob21mbiksIElOVkFMSURfTTJQX0VOVFJZKTsNCiAgICAg fQ0KIA0KQEAgLTY4NSwxMyArNjg1LDEyOSBAQCBndWVzdF9waHlzbWFwX2FkZF9wYWdlKHN0cnVj dCBkb21haW4gKmQsDQogICAgICAgICB9DQogICAgIH0NCiANCi0gICAgc2V0X3AybV9lbnRyeShk LCBnZm4sIF9tZm4obWZuKSk7DQorICAgIHNldF9wMm1fZW50cnkoZCwgZ2ZuLCBfbWZuKG1mbiks IF9fUEFHRV9IWVBFUlZJU09SfF9QQUdFX1VTRVIpOw0KICAgICBzZXRfZ3Bmbl9mcm9tX21mbiht Zm4sIGdmbik7DQogDQogICAgIGF1ZGl0X3AybShkKTsNCiAgICAgcDJtX3VubG9jayhkKTsNCiB9 DQogDQorLyogVGhpcyBmdW5jdGlvbiBnb2VzIHRocm91Z2ggUDJNIHRhYmxlIGFuZCBtb2RpZnkg bDFlIGZsYWdzIG9mIGFsbCBwYWdlcy4gTm90ZQ0KKyAqIHRoYXQgcGh5c2ljYWwgYmFzZSBhZGRy ZXNzIG9mIGwxZSBpcyBpbnRhY3QuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZm9yDQorICog c3BlY2lhbCBwdXJwb3NlLCBzdWNoIGFzIG1hcmtpbmcgcGh5c2ljYWwgbWVtb3J5IGFzIE5PVCBX UklUQUJMRSBmb3INCisgKiB0cmFja2luZyBkaXJ0eSBwYWdlcyBkdXJpbmcgbGl2ZSBtaWdyYXRp b24uDQorICovDQordm9pZCBwMm1fc2V0X2ZsYWdzX2dsb2JhbChzdHJ1Y3QgZG9tYWluICpkLCB1 MzIgbDFlX2ZsYWdzKQ0KK3sNCisgICAgdW5zaWduZWQgbG9uZyBtZm4sIGdmbjsNCisgICAgbDFf cGdlbnRyeV90IGwxZV9jb250ZW50Ow0KKyAgICBsMV9wZ2VudHJ5X3QgKmwxZTsNCisgICAgbDJf cGdlbnRyeV90ICpsMmU7DQorICAgIGludCBpMSwgaTI7DQorI2lmIENPTkZJR19QQUdJTkdfTEVW RUxTID49IDMNCisgICAgbDNfcGdlbnRyeV90ICpsM2U7DQorICAgIGludCBpMzsNCisjaWYgQ09O RklHX1BBR0lOR19MRVZFTFMgPT0gNA0KKyAgICBsNF9wZ2VudHJ5X3QgKmw0ZTsNCisgICAgaW50 IGk0Ow0KKyNlbmRpZiAvKiBDT05GSUdfUEFHSU5HX0xFVkVMUyA9PSA0ICovDQorI2VuZGlmIC8q IENPTkZJR19QQUdJTkdfTEVWRUxTID49IDMgKi8NCisgICAgDQorICAgIGlmICggIXBhZ2luZ19t b2RlX3RyYW5zbGF0ZShkKSApDQorICAgICAgICByZXR1cm47DQorIA0KKyAgICBpZiAoIHBhZ2V0 YWJsZV9nZXRfcGZuKGQtPmFyY2gucGh5c190YWJsZSkgPT0gMCApDQorICAgICAgICByZXR1cm47 DQorDQorICAgIHAybV9sb2NrKGQpOw0KKyAgICAgICAgDQorI2lmIENPTkZJR19QQUdJTkdfTEVW RUxTID09IDQNCisgICAgbDRlID0gbWFwX2RvbWFpbl9wYWdlKG1mbl94KHBhZ2V0YWJsZV9nZXRf bWZuKGQtPmFyY2gucGh5c190YWJsZSkpKTsNCisjZWxpZiBDT05GSUdfUEFHSU5HX0xFVkVMUyA9 PSAzDQorICAgIGwzZSA9IG1hcF9kb21haW5fcGFnZShtZm5feChwYWdldGFibGVfZ2V0X21mbihk LT5hcmNoLnBoeXNfdGFibGUpKSk7DQorI2Vsc2UgLyogQ09ORklHX1BBR0lOR19MRVZFTFMgPT0g MiAqLw0KKyAgICBsMmUgPSBtYXBfZG9tYWluX3BhZ2UobWZuX3gocGFnZXRhYmxlX2dldF9tZm4o ZC0+YXJjaC5waHlzX3RhYmxlKSkpOw0KKyNlbmRpZg0KKw0KKyNpZiBDT05GSUdfUEFHSU5HX0xF VkVMUyA+PSAzDQorI2lmIENPTkZJR19QQUdJTkdfTEVWRUxTID49IDQNCisgICAgZm9yICggaTQg PSAwOyBpNCA8IEw0X1BBR0VUQUJMRV9FTlRSSUVTOyBpNCsrICkgDQorICAgIHsNCisJaWYgKCAh KGw0ZV9nZXRfZmxhZ3MobDRlW2k0XSkgJiBfUEFHRV9QUkVTRU5UKSApDQorCXsNCisJICAgIGNv bnRpbnVlOw0KKwl9DQorCWwzZSA9IG1hcF9kb21haW5fcGFnZShtZm5feChfbWZuKGw0ZV9nZXRf cGZuKGw0ZVtpNF0pKSkpOw0KKyNlbmRpZiAvKiBub3cgYXQgbGV2ZWxzIDMgb3IgNC4uLiAqLw0K Kwlmb3IgKCBpMyA9IDA7IA0KKwkgICAgICBpMyA8ICgoQ09ORklHX1BBR0lOR19MRVZFTFM9PTQp ID8gTDNfUEFHRVRBQkxFX0VOVFJJRVMgOiA4KTsgDQorCSAgICAgIGkzKysgKQ0KKwl7DQorCSAg ICBpZiAoICEobDNlX2dldF9mbGFncyhsM2VbaTNdKSAmIF9QQUdFX1BSRVNFTlQpICkNCisJICAg IHsNCisJCWNvbnRpbnVlOw0KKwkgICAgfQ0KKwkgICAgbDJlID0gbWFwX2RvbWFpbl9wYWdlKG1m bl94KF9tZm4obDNlX2dldF9wZm4obDNlW2kzXSkpKSk7DQorI2VuZGlmIC8qIGFsbCBsZXZlbHMu Li4gKi8NCisJICAgIGZvciAoIGkyID0gMDsgaTIgPCBMMl9QQUdFVEFCTEVfRU5UUklFUzsgaTIr KyApDQorCSAgICB7DQorCQlpZiAoICEobDJlX2dldF9mbGFncyhsMmVbaTJdKSAmIF9QQUdFX1BS RVNFTlQpICkNCisJCXsNCisJCSAgICBjb250aW51ZTsNCisJCX0NCisJCWwxZSA9IG1hcF9kb21h aW5fcGFnZShtZm5feChfbWZuKGwyZV9nZXRfcGZuKGwyZVtpMl0pKSkpOw0KKwkJDQorCQlmb3Ig KCBpMSA9IDA7IGkxIDwgTDFfUEFHRVRBQkxFX0VOVFJJRVM7IGkxKyssIGdmbisrICkNCisJCXsN CisJCSAgICBpZiAoICEobDFlX2dldF9mbGFncyhsMWVbaTFdKSAmIF9QQUdFX1BSRVNFTlQpICkN CisJCQljb250aW51ZTsNCisJCSAgICBtZm4gPSBsMWVfZ2V0X3BmbihsMWVbaTFdKTsNCisJCSAg ICBnZm4gPSBnZXRfZ3Bmbl9mcm9tX21mbihtZm4pOw0KKwkJICAgIC8qIGNyZWF0ZSBhIG5ldyAx bGUgZW50cnkgdXNpbmcgbDFlX2ZsYWdzICovDQorCQkgICAgbDFlX2NvbnRlbnQgPSBsMWVfZnJv bV9wZm4obWZuLCBsMWVfZmxhZ3MpOw0KKwkJICAgIHBhZ2luZ193cml0ZV9wMm1fZW50cnkoZCwg Z2ZuLCAmbDFlW2kxXSwgbDFlX2NvbnRlbnQsIDEpOw0KKwkJfQ0KKwkJdW5tYXBfZG9tYWluX3Bh Z2UobDFlKTsNCisJICAgIH0NCisjaWYgQ09ORklHX1BBR0lOR19MRVZFTFMgPj0gMw0KKwkgICAg dW5tYXBfZG9tYWluX3BhZ2UobDJlKTsNCisJfQ0KKyNpZiBDT05GSUdfUEFHSU5HX0xFVkVMUyA+ PSA0DQorCXVubWFwX2RvbWFpbl9wYWdlKGwzZSk7DQorICAgIH0NCisjZW5kaWYNCisjZW5kaWYN CisNCisjaWYgQ09ORklHX1BBR0lOR19MRVZFTFMgPT0gNA0KKyAgICB1bm1hcF9kb21haW5fcGFn ZShsNGUpOw0KKyNlbGlmIENPTkZJR19QQUdJTkdfTEVWRUxTID09IDMNCisgICAgdW5tYXBfZG9t YWluX3BhZ2UobDNlKTsNCisjZWxzZSAvKiBDT05GSUdfUEFHSU5HX0xFVkVMUyA9PSAyICovDQor ICAgIHVubWFwX2RvbWFpbl9wYWdlKGwyZSk7DQorI2VuZGlmDQorDQorICAgIHAybV91bmxvY2so ZCk7DQorfQ0KKw0KKy8qIFRoaXMgZnVuY3Rpb24gdHJhY2VzIHRocm91Z2ggUDJNIHRhYmxlIGFu ZCBtb2RpZmllcyBsMWUgZmxhZ3Mgb2YgYSBzcGVjaWZpYw0KKyAqIGdwYS4NCisgKi8NCitpbnQg cDJtX3NldF9mbGFncyhzdHJ1Y3QgZG9tYWluICpkLCBwYWRkcl90IGdwYSwgdTMyIGwxZV9mbGFn cykNCit7DQorICAgIHVuc2lnbmVkIGxvbmcgZ2ZuOw0KKyAgICBtZm5fdCBtZm47DQorDQorICAg IHAybV9sb2NrKGQpOw0KKw0KKyAgICBnZm4gPSBncGEgPj4gUEFHRV9TSElGVDsNCisgICAgbWZu ID0gZ2ZuX3RvX21mbihkLCBnZm4pOw0KKyAgICBpZiAoIG1mbl92YWxpZChtZm4pICkNCisgICAg ICAgIHNldF9wMm1fZW50cnkoZCwgZ2ZuLCBtZm4sIGwxZV9mbGFncyk7DQorICAgIA0KKyAgICBw Mm1fdW5sb2NrKGQpOw0KKw0KKyAgICByZXR1cm4gMTsNCit9DQogDQogLyoNCiAgKiBMb2NhbCB2 YXJpYWJsZXM6DQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiB4ZW4vYXJjaC94ODYvbW0vcGFnaW5nLmMN Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9wYWdpbmcuYwlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcg LTA1MDANCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS9wYWdpbmcuYwlGcmkgSnVuIDA4IDA0OjA2OjM2 IDIwMDcgLTA1MDANCkBAIC0yNSw2ICsyNSw3IEBADQogI2luY2x1ZGUgPGFzbS9zaGFkb3cuaD4N CiAjaW5jbHVkZSA8YXNtL3AybS5oPg0KICNpbmNsdWRlIDxhc20vaGFwLmg+DQorI2luY2x1ZGUg PGFzbS9ndWVzdF9hY2Nlc3MuaD4NCiANCiAvKiBYZW4gY29tbWFuZC1saW5lIG9wdGlvbiB0byBl bmFibGUgaGFyZHdhcmUtYXNzaXN0ZWQgcGFnaW5nICovDQogaW50IG9wdF9oYXBfZW5hYmxlZDsN CkBAIC00MSw3ICs0MiwyNzIgQEAgYm9vbGVhbl9wYXJhbSgiaGFwIiwgb3B0X2hhcF9lbmFibGVk KTsNCiAgICAgICAgICAgICBkZWJ1Z3RyYWNlX3ByaW50aygicGdkZWJ1ZzogJXMoKTogIiBfZiwg X19mdW5jX18sICMjX2EpOyBcDQogICAgIH0gd2hpbGUgKDApDQogDQotDQorLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgICAg TE9HIERJUlRZIFNVUFBPUlQgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogT3ZlcnJpZGUgbWFjcm9zIGZyb20g YXNtL3BhZ2UuaCB0byBtYWtlIHRoZW0gd29yayB3aXRoIG1mbl90ICovDQorI3VuZGVmIG1mbl90 b19wYWdlDQorI2RlZmluZSBtZm5fdG9fcGFnZShfbSkgKGZyYW1lX3RhYmxlICsgbWZuX3goX20p KQ0KKyN1bmRlZiBtZm5fdmFsaWQNCisjZGVmaW5lIG1mbl92YWxpZChfbWZuKSAobWZuX3goX21m bikgPCBtYXhfcGFnZSkNCisjdW5kZWYgcGFnZV90b19tZm4NCisjZGVmaW5lIHBhZ2VfdG9fbWZu KF9wZykgKF9tZm4oKF9wZykgLSBmcmFtZV90YWJsZSkpDQorDQorI2RlZmluZSBsb2dfZGlydHlf bG9ja19pbml0KF9kKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwNCisgICAgICAgIHNwaW5fbG9ja19pbml0KCYoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGly dHkubG9jayk7ICAgICAgICBcDQorICAgICAgICAoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGlydHku bG9ja2VyID0gLTE7ICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgKF9kKS0+YXJjaC5wYWdp bmcubG9nX2RpcnR5LmxvY2tlcl9mdW5jdGlvbiA9ICJub2JvZHkiOyAgIFwNCisgICAgfSB3aGls ZSAoMCkNCisNCisjZGVmaW5lIGxvZ19kaXJ0eV9sb2NrKF9kKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgZG8geyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwN CisgICAgICAgIGlmICh1bmxpa2VseSgoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkubG9ja2Vy PT1jdXJyZW50LT5wcm9jZXNzb3IpKVwNCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAg ICAgICBwcmludGsoIkVycm9yOiBwYWdpbmcgbG9nIGRpcnR5IGxvY2sgaGVsZCBieSAlc1xuIiwg ICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgKF9kKS0+YXJjaC5wYWdpbmcubG9n X2RpcnR5LmxvY2tlcl9mdW5jdGlvbik7ICAgICAgICAgICAgIFwNCisgICAgICAgICAgICBCVUco KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwNCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgIHNwaW5fbG9jaygmKF9kKS0+ YXJjaC5wYWdpbmcubG9nX2RpcnR5LmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgIFwNCisg ICAgICAgIEFTU0VSVCgoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkubG9ja2VyID09IC0xKTsg ICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgIChfZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0 eS5sb2NrZXIgPSBjdXJyZW50LT5wcm9jZXNzb3I7ICAgICAgICAgICAgIFwNCisgICAgICAgIChf ZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5sb2NrZXJfZnVuY3Rpb24gPSBfX2Z1bmNfXzsgICAg ICAgICAgICAgIFwNCisgICAgfSB3aGlsZSAoMCkNCisNCisjZGVmaW5lIGxvZ19kaXJ0eV91bmxv Y2soX2QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisg ICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCisgICAgICAgIEFTU0VSVCgoX2QpLT5hcmNoLnBhZ2luZy5sb2df ZGlydHkubG9ja2VyID09IGN1cnJlbnQtPnByb2Nlc3Nvcik7IFwNCisgICAgICAgIChfZCktPmFy Y2gucGFnaW5nLmxvZ19kaXJ0eS5sb2NrZXIgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAg IFwNCisgICAgICAgIChfZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5sb2NrZXJfZnVuY3Rpb24g PSAibm9ib2R5IjsgICAgICAgICAgIFwNCisgICAgICAgIHNwaW5fdW5sb2NrKCYoX2QpLT5hcmNo LnBhZ2luZy5sb2dfZGlydHkubG9jayk7ICAgICAgICAgICAgICAgICAgIFwNCisgICAgfSB3aGls ZSAoMCkNCisNCisvKiBhbGxvY2F0ZSBiaXRtYXAgcmVzb3VyY2VzIGZvciBsb2cgZGlydHkgKi8N CitpbnQgcGFnaW5nX2FsbG9jX2xvZ19kaXJ0eV9iaXRtYXAoc3RydWN0IGRvbWFpbiAqZCkNCit7 DQorICAgIEFTU0VSVChkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwID09IE5VTEwpOw0K KyAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwX3NpemUgPQ0KKyAgICAgICAgKGRv bWFpbl9nZXRfbWF4aW11bV9ncGZuKGQpICsgQklUU19QRVJfTE9ORykgJiB+KEJJVFNfUEVSX0xP TkcgLSAxKTsNCisgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcCA9IA0KKyAgICAg ICAgeG1hbGxvY19hcnJheSh1bnNpZ25lZCBsb25nLA0KKyAgICAgICAgICAgICAgICAgICAgICBk LT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwX3NpemUgLyBCSVRTX1BFUl9MT05HKTsNCisg ICAgaWYgKCBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwID09IE5VTEwgKQ0KKyAgICB7 DQorICAgICAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwX3NpemUgPSAwOw0KKyAg ICAgICAgcmV0dXJuIC1FTk9NRU07DQorICAgIH0NCisgICAgbWVtc2V0KGQtPmFyY2gucGFnaW5n LmxvZ19kaXJ0eS5iaXRtYXAsIDAsDQorICAgICAgICAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGly dHkuYml0bWFwX3NpemUvOCk7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiBmcmVlIGJp dG1hcCByZXNvdXJjZXMgKi8NCit2b2lkIHBhZ2luZ19mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoc3Ry dWN0IGRvbWFpbiAqZCkNCit7DQorICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXBf c2l6ZSA9IDA7DQorICAgIGlmICggZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcCApDQor ICAgIHsNCisgICAgICAgIHhmcmVlKGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXApOw0K KyAgICAgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcCA9IE5VTEw7DQorICAgIH0N Cit9DQorDQoraW50IHBhZ2luZ19sb2dfZGlydHlfZW5hYmxlKHN0cnVjdCBkb21haW4gKmQpDQor ew0KKyAgICBpbnQgcmV0Ow0KKw0KKyAgICBkb21haW5fcGF1c2UoZCk7DQorICAgIGxvZ19kaXJ0 eV9sb2NrKGQpOw0KKw0KKyAgICBpZiAoIHBhZ2luZ19tb2RlX2xvZ19kaXJ0eShkKSApDQorICAg IHsNCisgICAgICAgIHJldCA9IC1FSU5WQUw7DQorICAgICAgICBnb3RvIG91dDsNCisgICAgfQ0K Kw0KKyAgICByZXQgPSBwYWdpbmdfYWxsb2NfbG9nX2RpcnR5X2JpdG1hcChkKTsNCisgICAgaWYg KCByZXQgIT0gMCApDQorICAgIHsNCisgICAgICAgIHBhZ2luZ19mcmVlX2xvZ19kaXJ0eV9iaXRt YXAoZCk7DQorICAgICAgICBnb3RvIG91dDsNCisgICAgfQ0KKw0KKyAgICByZXQgPSBkLT5hcmNo LnBhZ2luZy5sb2dfZGlydHkuZW5hYmxlX2xvZ19kaXJ0eShkKTsNCisgICAgaWYgKCByZXQgIT0g MCApDQorICAgICAgICBwYWdpbmdfZnJlZV9sb2dfZGlydHlfYml0bWFwKGQpOw0KKw0KKyBvdXQ6 DQorICAgIGxvZ19kaXJ0eV91bmxvY2soZCk7DQorICAgIGRvbWFpbl91bnBhdXNlKGQpOw0KKyAg ICByZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgcGFnaW5nX2xvZ19kaXJ0eV9kaXNhYmxlKHN0cnVj dCBkb21haW4gKmQpDQorew0KKyAgICBpbnQgcmV0Ow0KKw0KKyAgICBkb21haW5fcGF1c2UoZCk7 DQorICAgIGxvZ19kaXJ0eV9sb2NrKGQpOw0KKyAgICByZXQgPSBkLT5hcmNoLnBhZ2luZy5sb2df ZGlydHkuZGlzYWJsZV9sb2dfZGlydHkoZCk7DQorICAgIGlmICggIXBhZ2luZ19tb2RlX2xvZ19k aXJ0eShkKSApDQorICAgICAgICBwYWdpbmdfZnJlZV9sb2dfZGlydHlfYml0bWFwKGQpOw0KKyAg ICBsb2dfZGlydHlfdW5sb2NrKGQpOw0KKyAgICBkb21haW5fdW5wYXVzZShkKTsNCisNCisgICAg cmV0dXJuIHJldDsNCit9DQorDQorLyogTWFyayBhIHBhZ2UgYXMgZGlydHkgKi8NCit2b2lkIHBh Z2luZ19tYXJrX2RpcnR5KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ3Vlc3RfbWZu KQ0KK3sNCisgICAgdW5zaWduZWQgbG9uZyBwZm47DQorICAgIG1mbl90IGdtZm47DQorDQorICAg IGdtZm4gPSBfbWZuKGd1ZXN0X21mbik7DQorDQorICAgIGlmICggIXBhZ2luZ19tb2RlX2xvZ19k aXJ0eShkKSB8fCAhbWZuX3ZhbGlkKGdtZm4pICkNCisgICAgICAgIHJldHVybjsNCisNCisgICAg bG9nX2RpcnR5X2xvY2soZCk7DQorDQorICAgIEFTU0VSVChkLT5hcmNoLnBhZ2luZy5sb2dfZGly dHkuYml0bWFwICE9IE5VTEwpOw0KKw0KKyAgICAvKiBXZSAvcmVhbGx5LyBtZWFuIFBGTiBoZXJl LCBldmVuIGZvciBub24tdHJhbnNsYXRlZCBndWVzdHMuICovDQorICAgIHBmbiA9IGdldF9ncGZu X2Zyb21fbWZuKG1mbl94KGdtZm4pKTsNCisNCisgICAgLyoNCisgICAgICogVmFsdWVzIHdpdGgg dGhlIE1TQiBzZXQgZGVub3RlIE1GTnMgdGhhdCBhcmVuJ3QgcmVhbGx5IHBhcnQgb2YgdGhlIA0K KyAgICAgKiBkb21haW4ncyBwc2V1ZG8tcGh5c2ljYWwgbWVtb3J5IG1hcCAoZS5nLiwgdGhlIHNo YXJlZCBpbmZvIGZyYW1lKS4NCisgICAgICogTm90aGluZyB0byBkbyBoZXJlLi4uDQorICAgICAq Lw0KKyAgICBpZiAoIHVubGlrZWx5KCFWQUxJRF9NMlAocGZuKSkgKQ0KKyAgICAgICAgcmV0dXJu Ow0KKw0KKyAgICBpZiAoIGxpa2VseShwZm4gPCBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0 bWFwX3NpemUpICkgDQorICAgIHsgDQorICAgICAgICBpZiAoICFfX3Rlc3RfYW5kX3NldF9iaXQo cGZuLCBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwKSApDQorICAgICAgICB7DQorICAg ICAgICAgICAgUEFHSU5HX0RFQlVHKExPR0RJUlRZLCANCisgICAgICAgICAgICAgICAgICAgICAg ICAgIm1hcmtlZCBtZm4gJSIgUFJJX21mbiAiIChwZm49JWx4KSwgZG9tICVkXG4iLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICBtZm5feChnbWZuKSwgcGZuLCBkLT5kb21haW5faWQpOw0KKyAg ICAgICAgICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5kaXJ0eV9jb3VudCsrOw0KKyAgICAg ICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgUEFHSU5HX1BSSU5USygi bWFya19kaXJ0eSBPT1IhICINCisgICAgICAgICAgICAgICAgICAgICAgIm1mbj0lIiBQUklfbWZu ICIgcGZuPSVseCBtYXg9JXggKGRvbSAlZClcbiINCisgICAgICAgICAgICAgICAgICAgICAgIm93 bmVyPSVkIGM9JTA4eCB0PSUiIFBSdHlwZV9pbmZvICJcbiIsDQorICAgICAgICAgICAgICAgICAg ICAgIG1mbl94KGdtZm4pLCANCisgICAgICAgICAgICAgICAgICAgICAgcGZuLCANCisgICAgICAg ICAgICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcF9zaXplLA0KKyAg ICAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQsDQorICAgICAgICAgICAgICAgICAgICAg IChwYWdlX2dldF9vd25lcihtZm5fdG9fcGFnZShnbWZuKSkNCisgICAgICAgICAgICAgICAgICAg ICAgID8gcGFnZV9nZXRfb3duZXIobWZuX3RvX3BhZ2UoZ21mbikpLT5kb21haW5faWQNCisgICAg ICAgICAgICAgICAgICAgICAgIDogLTEpLA0KKyAgICAgICAgICAgICAgICAgICAgICBtZm5fdG9f cGFnZShnbWZuKS0+Y291bnRfaW5mbywgDQorICAgICAgICAgICAgICAgICAgICAgIG1mbl90b19w YWdlKGdtZm4pLT51LmludXNlLnR5cGVfaW5mbyk7DQorICAgIH0NCisgICAgDQorICAgIGxvZ19k aXJ0eV91bmxvY2soZCk7DQorfQ0KKw0KKy8qIFJlYWQgYSBkb21haW4ncyBsb2ctZGlydHkgYml0 bWFwIGFuZCBzdGF0cy4gIElmIHRoZSBvcGVyYXRpb24gaXMgYSBDTEVBTiwgDQorICogY2xlYXIg dGhlIGJpdG1hcCBhbmQgc3RhdHMgYXMgd2VsbC4gKi8NCitpbnQgcGFnaW5nX2xvZ19kaXJ0eV9v cChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgeGVuX2RvbWN0bF9zaGFkb3dfb3AgKnNjKQ0KK3sN CisgICAgaW50IGksIHJ2ID0gMCwgY2xlYW4gPSAwLCBwZWVrID0gMTsNCisNCisgICAgZG9tYWlu X3BhdXNlKGQpOw0KKyAgICBsb2dfZGlydHlfbG9jayhkKTsNCisNCisgICAgY2xlYW4gPSAoc2Mt Pm9wID09IFhFTl9ET01DVExfU0hBRE9XX09QX0NMRUFOKTsNCisNCisgICAgUEFHSU5HX0RFQlVH KExPR0RJUlRZLCAibG9nLWRpcnR5ICVzOiBkb20gJXUgZmF1bHRzPSV1IGRpcnR5PSV1XG4iLCAN CisgICAgICAgICAgICAgICAgIChjbGVhbikgPyAiY2xlYW4iIDogInBlZWsiLA0KKyAgICAgICAg ICAgICAgICAgZC0+ZG9tYWluX2lkLA0KKyAgICAgICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcu bG9nX2RpcnR5LmZhdWx0X2NvdW50LCANCisgICAgICAgICAgICAgICAgIGQtPmFyY2gucGFnaW5n LmxvZ19kaXJ0eS5kaXJ0eV9jb3VudCk7DQorDQorICAgIHNjLT5zdGF0cy5mYXVsdF9jb3VudCA9 IGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5mYXVsdF9jb3VudDsNCisgICAgc2MtPnN0YXRzLmRp cnR5X2NvdW50ID0gZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmRpcnR5X2NvdW50Ow0KKyAgICAN CisgICAgaWYgKCBjbGVhbiApDQorICAgIHsNCisgICAgICAgIGQtPmFyY2gucGFnaW5nLmxvZ19k aXJ0eS5mYXVsdF9jb3VudCA9IDA7DQorICAgICAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHku ZGlydHlfY291bnQgPSAwOw0KKw0KKyAgICAgICAgLyogV2UgbmVlZCB0byBmdXJ0aGVyIGNhbGwg Y2xlYW5fZGlydHlfYml0bWFwKCkgZnVuY3Rpb25zIG9mIHNwZWNpZmljDQorICAgICAgICAgKiBw YWdpbmcgbW9kZXMgKHNoYWRvdyBvciBoYXApLg0KKyAgICAgICAgICovDQorICAgICAgICBkLT5h cmNoLnBhZ2luZy5sb2dfZGlydHkuY2xlYW5fZGlydHlfYml0bWFwKGQpOw0KKyAgICB9DQorDQor ICAgIGlmICggZ3Vlc3RfaGFuZGxlX2lzX251bGwoc2MtPmRpcnR5X2JpdG1hcCkgKQ0KKyAgICAg ICAgLyogY2FsbGVyIG1heSBoYXZlIHdhbnRlZCBqdXN0IHRvIGNsZWFuIHRoZSBzdGF0ZSBvciBh Y2Nlc3Mgc3RhdHMuICovDQorICAgICAgICBwZWVrID0gMDsNCisNCisgICAgaWYgKCAocGVlayB8 fCBjbGVhbikgJiYgKGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXAgPT0gTlVMTCkgKQ0K KyAgICB7DQorICAgICAgICBydiA9IC1FSU5WQUw7IC8qIHBlcmhhcHMgc2hvdWxkIGJlIEVOT01F TT8gKi8NCisgICAgICAgIGdvdG8gb3V0Ow0KKyAgICB9DQorIA0KKyAgICBpZiAoIHNjLT5wYWdl cyA+IGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXBfc2l6ZSApDQorICAgICAgICBzYy0+ cGFnZXMgPSBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwX3NpemU7DQorDQorI2RlZmlu ZSBDSFVOSyAoOCoxMDI0KSAvKiBUcmFuc2ZlciBhbmQgY2xlYXIgaW4gMWtCIGNodW5rcyBmb3Ig TDEgY2FjaGUuICovDQorICAgIGZvciAoIGkgPSAwOyBpIDwgc2MtPnBhZ2VzOyBpICs9IENIVU5L ICkNCisgICAgew0KKyAgICAgICAgaW50IGJ5dGVzID0gKCgoKHNjLT5wYWdlcyAtIGkpID4gQ0hV TkspDQorICAgICAgICAgICAgICAgICAgICAgID8gQ0hVTksNCisgICAgICAgICAgICAgICAgICAg ICAgOiAoc2MtPnBhZ2VzIC0gaSkpICsgNykgLyA4Ow0KKw0KKyAgICAgICAgaWYgKCBsaWtlbHko cGVlaykgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICggY29weV90b19ndWVzdF9vZmZz ZXQoDQorICAgICAgICAgICAgICAgIHNjLT5kaXJ0eV9iaXRtYXAsIGkvOCwNCisgICAgICAgICAg ICAgICAgKHVpbnQ4X3QgKilkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwICsgKGkvOCks IGJ5dGVzKSApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBydiA9IC1FRkFVTFQ7 DQorICAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0N CisNCisgICAgICAgIGlmICggY2xlYW4gKQ0KKyAgICAgICAgICAgIG1lbXNldCgodWludDhfdCAq KWQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXAgKyAoaS84KSwgMCwgYnl0ZXMpOw0KKyAg ICB9DQorI3VuZGVmIENIVU5LDQorDQorIG91dDoNCisgICAgbG9nX2RpcnR5X3VubG9jayhkKTsN CisgICAgZG9tYWluX3VucGF1c2UoZCk7DQorICAgIHJldHVybiBydjsNCit9DQorDQorDQorLyog Tm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gdGFrZXMgdGhyZWUgZnVuY3Rpb24gcG9pbnRlcnMuIENh bGxlcnMgbXVzdCBzdXBwbHkNCisgKiB0aGVzZSBmdW5jdGlvbnMgZm9yIGxvZyBkaXJ0eSBjb2Rl IHRvIGNhbGwuIFRoaXMgZnVuY3Rpb24gdXN1YWxseSBpcyANCisgKiBpbnZva2VkIHdoZW4gcGFn aW5nIGlzIGVuYWJsZWQuIENoZWNrIHNoYWRvd19lbmFibGUoKSBhbmQgaGFwX2VuYWJsZSgpIGZv ciANCisgKiByZWZlcmVuY2UuDQorICovDQordm9pZCBwYWdpbmdfbG9nX2RpcnR5X2luaXQoc3Ry dWN0IGRvbWFpbiAqZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgKCplbmFi bGVfbG9nX2RpcnR5KShzdHJ1Y3QgZG9tYWluICpkKSwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgICAgKCpkaXNhYmxlX2xvZ19kaXJ0eSkoc3RydWN0IGRvbWFpbiAqZCksDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICgqY2xlYW5fZGlydHlfYml0bWFwKShzdHJ1 Y3QgZG9tYWluICpkKSkNCit7DQorICAgIC8qIFdlIGluaXRpYWxpemUgbG9nIGRpcnR5IGxvY2sg Zmlyc3QgKi8NCisgICAgbG9nX2RpcnR5X2xvY2tfaW5pdChkKTsNCisgICAgDQorICAgIGQtPmFy Y2gucGFnaW5nLmxvZ19kaXJ0eS5lbmFibGVfbG9nX2RpcnR5ID0gZW5hYmxlX2xvZ19kaXJ0eTsN CisgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmRpc2FibGVfbG9nX2RpcnR5ID0gZGlzYWJs ZV9sb2dfZGlydHk7DQorICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5jbGVhbl9kaXJ0eV9i aXRtYXAgPSBjbGVhbl9kaXJ0eV9iaXRtYXA7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogICAgICAgICAgIENPREUgRk9SIFBB R0lORyBTVVBQT1JUICAgICAgICAgICAgKi8NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLw0KIC8qIERvbWFpbiBwYWdpbmcgc3RydWN0IGluaXRpYWxp emF0aW9uLiAqLw0KIHZvaWQgcGFnaW5nX2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQpDQog ew0KQEAgLTY1LDExICszMzEsNjAgQEAgaW50IHBhZ2luZ19kb21jdGwoc3RydWN0IGRvbWFpbiAq ZCwgeGVuXw0KIGludCBwYWdpbmdfZG9tY3RsKHN0cnVjdCBkb21haW4gKmQsIHhlbl9kb21jdGxf c2hhZG93X29wX3QgKnNjLA0KICAgICAgICAgICAgICAgICAgIFhFTl9HVUVTVF9IQU5ETEUodm9p ZCkgdV9kb21jdGwpDQogew0KKyAgICBpbnQgcmM7DQorDQorICAgIGlmICggdW5saWtlbHkoZCA9 PSBjdXJyZW50LT5kb21haW4pICkNCisgICAgew0KKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX0lO Rk8sICJEb20gJXUgdHJpZWQgdG8gZG8gYSBwYWdpbmcgb3Agb24gaXRzZWxmLlxuIiwNCisgICAg ICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCk7DQorICAgICAgICByZXR1cm4gLUVJTlZBTDsNCisg ICAgfQ0KKyAgICANCisgICAgaWYgKCB1bmxpa2VseShkLT5pc19keWluZykgKQ0KKyAgICB7DQor ICAgICAgICBnZHByaW50ayhYRU5MT0dfSU5GTywgIklnbm9yaW5nIHBhZ2luZyBvcCBvbiBkeWlu ZyBkb21haW4gJXVcbiIsDQorICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQpOw0KKyAgICAg ICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgaWYgKCB1bmxpa2VseShkLT52Y3B1WzBdID09 IE5VTEwpICkNCisgICAgew0KKyAgICAgICAgUEFHSU5HX0VSUk9SKCJQYWdpbmcgb3Agb24gYSBk b21haW4gKCV1KSB3aXRoIG5vIHZjcHVzXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgIGQtPmRv bWFpbl9pZCk7DQorICAgICAgICByZXR1cm4gLUVJTlZBTDsNCisgICAgfQ0KKyAgICANCisgICAg LyogQ29kZSB0byBoYW5kbGUgbG9nLWRpcnR5LiBOb3RlIHRoYXQgc29tZSBsb2cgZGlydHkgb3Bl cmF0aW9ucw0KKyAgICAgKiBwaWdneS1iYWNrIG9uIHNoYWRvdyBvcGVyYXRpb25zLiBGb3IgZXhh bXBsZSwgd2hlbiANCisgICAgICogWEVOX0RPTUNUTF9TSEFET1dfT1BfT0ZGIGlzIGNhbGxlZCwg aXQgZmlyc3QgY2hlY2tzIHdoZXRoZXIgbG9nIGRpcnR5DQorICAgICAqIG1vZGUgaXMgZW5hYmxl ZC4gSWYgZG9lcywgd2UgZGlzYWJsZXMgbG9nIGRpcnR5IGFuZCBjb250aW51ZXMgd2l0aCANCisg ICAgICogc2hhZG93IGNvZGUuIEZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBmdXJ0aGVyIGRp c3BhdGNoIGRvbWN0bCANCisgICAgICogdG8gbmV4dC1sZXZlbCBwYWdpbmcgY29kZSAoc2hhZG93 IG9yIGhhcCkuDQorICAgICAqLw0KKyAgICBzd2l0Y2ggKCBzYy0+b3AgKQ0KKyAgICB7DQorICAg IGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfRU5BQkxFX0xPR0RJUlRZOg0KKyAgICAgICAgcmV0 dXJuIHBhZ2luZ19sb2dfZGlydHlfZW5hYmxlKGQpOwkNCisJDQorICAgIGNhc2UgWEVOX0RPTUNU TF9TSEFET1dfT1BfRU5BQkxFOgkNCisgICAgICAgIGlmICggc2MtPm1vZGUgJiBYRU5fRE9NQ1RM X1NIQURPV19FTkFCTEVfTE9HX0RJUlRZICkNCisgICAgICAgICAgICByZXR1cm4gcGFnaW5nX2xv Z19kaXJ0eV9lbmFibGUoZCk7DQorDQorICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfT0ZG Og0KKyAgICAgICAgaWYgKCBwYWdpbmdfbW9kZV9sb2dfZGlydHkoZCkgKQ0KKyAgICAgICAgICAg IGlmICggKHJjID0gcGFnaW5nX2xvZ19kaXJ0eV9kaXNhYmxlKGQpKSAhPSAwICkgDQorICAgICAg ICAgICAgICAgIHJldHVybiByYzsNCisNCisgICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19PUF9D TEVBTjoNCisgICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19PUF9QRUVLOg0KKwlyZXR1cm4gcGFn aW5nX2xvZ19kaXJ0eV9vcChkLCBzYyk7DQorICAgIH0NCisJDQogICAgIC8qIEhlcmUsIGRpc3Bh dGNoIGRvbWN0bCB0byB0aGUgYXBwcm9wcmlhdGUgcGFnaW5nIGNvZGUgKi8NCiAgICAgaWYgKCBv cHRfaGFwX2VuYWJsZWQgJiYgaXNfaHZtX2RvbWFpbihkKSApDQotICAgICAgICByZXR1cm4gaGFw X2RvbWN0bChkLCBzYywgdV9kb21jdGwpOw0KLSAgICBlbHNlDQotICAgICAgICByZXR1cm4gc2hh ZG93X2RvbWN0bChkLCBzYywgdV9kb21jdGwpOw0KKwlyZXR1cm4gaGFwX2RvbWN0bChkLCBzYywg dV9kb21jdGwpOw0KKyAgICBlbHNlDQorCXJldHVybiBzaGFkb3dfZG9tY3RsKGQsIHNjLCB1X2Rv bWN0bCk7DQogfQ0KIA0KIC8qIENhbGwgd2hlbiBkZXN0cm95aW5nIGEgZG9tYWluICovDQpkaWZm IC1yIDQ1NTE2YWM5NGM5ZiB4ZW4vYXJjaC94ODYvbW0vc2hhZG93L2NvbW1vbi5jDQotLS0gYS94 ZW4vYXJjaC94ODYvbW0vc2hhZG93L2NvbW1vbi5jCVdlZCBKdW4gMDYgMDg6MzI6MzIgMjAwNyAt MDUwMA0KKysrIGIveGVuL2FyY2gveDg2L21tL3NoYWRvdy9jb21tb24uYwlGcmkgSnVuIDA4IDA0 OjMwOjExIDIwMDcgLTA1MDANCkBAIC04Nyw4ICs4Nyw2IEBAIF9faW5pdGNhbGwoc2hhZG93X2F1 ZGl0X2tleV9pbml0KTsNCiBfX2luaXRjYWxsKHNoYWRvd19hdWRpdF9rZXlfaW5pdCk7DQogI2Vu ZGlmIC8qIFNIQURPV19BVURJVCAqLw0KIA0KLXN0YXRpYyB2b2lkIHNoX2ZyZWVfbG9nX2RpcnR5 X2JpdG1hcChzdHJ1Y3QgZG9tYWluICpkKTsNCi0NCiBpbnQgX3NoYWRvd19tb2RlX3JlZmNvdW50 cyhzdHJ1Y3QgZG9tYWluICpkKQ0KIHsNCiAgICAgcmV0dXJuIHNoYWRvd19tb2RlX3JlZmNvdW50 cyhkKTsNCkBAIC01NDEsNyArNTM5LDcgQEAgc2hfdmFsaWRhdGVfZ3Vlc3RfZW50cnkoc3RydWN0 IHZjcHUgKnYsIA0KICAgICBpbnQgcmVzdWx0ID0gMDsNCiAgICAgc3RydWN0IHBhZ2VfaW5mbyAq cGFnZSA9IG1mbl90b19wYWdlKGdtZm4pOw0KIA0KLSAgICBzaF9tYXJrX2RpcnR5KHYtPmRvbWFp biwgZ21mbik7DQorICAgIHBhZ2luZ19tYXJrX2RpcnR5KHYtPmRvbWFpbiwgbWZuX3goZ21mbikp Ow0KICAgICANCiAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHR5cGVzIG9mIHNoYWRvd3MgYXJlIGFm ZmVjdGVkLCBhbmQgdXBkYXRlIGVhY2guDQogICAgIC8vDQpAQCAtMjQ1NSw2ICsyNDUzLDEwIEBA IGludCBzaGFkb3dfZW5hYmxlKHN0cnVjdCBkb21haW4gKmQsIHUzMiANCiAgICAgICAgIH0gICAg ICAgIA0KICAgICB9DQogDQorICAgIC8qIGluaXRpYWxpemUgbG9nIGRpcnR5IGhlcmUgKi8NCisg ICAgcGFnaW5nX2xvZ19kaXJ0eV9pbml0KGQsIHNoYWRvd19lbmFibGVfbG9nX2RpcnR5LCANCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd19kaXNhYmxlX2xvZ19kaXJ0eSwgc2hhZG93 X2NsZWFuX2RpcnR5X2JpdG1hcCk7DQorDQogICAgIC8qIEluaXQgdGhlIFAyTSB0YWJsZS4gIE11 c3QgYmUgZG9uZSBiZWZvcmUgd2UgdGFrZSB0aGUgc2hhZG93IGxvY2sgDQogICAgICAqIHRvIGF2 b2lkIHBvc3NpYmxlIGRlYWRsb2NrLiAqLw0KICAgICBpZiAoIG1vZGUgJiBQR190cmFuc2xhdGUg KQ0KQEAgLTI0NjMsNiArMjQ2NSw3IEBAIGludCBzaGFkb3dfZW5hYmxlKHN0cnVjdCBkb21haW4g KmQsIHUzMiANCiAgICAgICAgIGlmIChydiAhPSAwKQ0KICAgICAgICAgICAgIGdvdG8gb3V0X3Vu bG9ja2VkOw0KICAgICB9DQorDQogDQogICAgIHNoYWRvd19sb2NrKGQpOw0KIA0KQEAgLTI1NjQs OCArMjU2Nyw2IEBAIHZvaWQgc2hhZG93X3RlYXJkb3duKHN0cnVjdCBkb21haW4gKmQpDQogICAg ICAgICAvKiBSZWxlYXNlIHRoZSBoYXNoIHRhYmxlIGJhY2sgdG8geGVuaGVhcCAqLw0KICAgICAg ICAgaWYgKGQtPmFyY2gucGFnaW5nLnNoYWRvdy5oYXNoX3RhYmxlKSANCiAgICAgICAgICAgICBz aGFkb3dfaGFzaF90ZWFyZG93bihkKTsNCi0gICAgICAgIC8qIFJlbGVhc2UgdGhlIGxvZy1kaXJ0 eSBiaXRtYXAgb2YgZGlydGllZCBwYWdlcyAqLw0KLSAgICAgICAgc2hfZnJlZV9sb2dfZGlydHlf Yml0bWFwKGQpOw0KICAgICAgICAgLyogU2hvdWxkIG5vdCBoYXZlIGFueSBtb3JlIG1lbW9yeSBo ZWxkICovDQogICAgICAgICBTSEFET1dfUFJJTlRLKCJ0ZWFyZG93biBkb25lLiINCiAgICAgICAg ICAgICAgICAgICAgICAgICIgIFNoYWRvdyBwYWdlcyB0b3RhbCA9ICV1LCBmcmVlID0gJXUsIHAy bT0ldVxuIiwNCkBAIC0yNzE4LDk4ICsyNzE5LDYgQEAgc3RhdGljIGludCBzaGFkb3dfdGVzdF9k aXNhYmxlKHN0cnVjdCBkbw0KICAgICBkb21haW5fcGF1c2UoZCk7DQogICAgIHNoYWRvd19sb2Nr KGQpOw0KICAgICByZXQgPSBzaGFkb3dfb25lX2JpdF9kaXNhYmxlKGQsIFBHX1NIX2VuYWJsZSk7 DQotICAgIHNoYWRvd191bmxvY2soZCk7DQotICAgIGRvbWFpbl91bnBhdXNlKGQpOw0KLQ0KLSAg ICByZXR1cm4gcmV0Ow0KLX0NCi0NCi1zdGF0aWMgaW50DQotc2hfYWxsb2NfbG9nX2RpcnR5X2Jp dG1hcChzdHJ1Y3QgZG9tYWluICpkKQ0KLXsNCi0gICAgQVNTRVJUKGQtPmFyY2gucGFnaW5nLnNo YWRvdy5kaXJ0eV9iaXRtYXAgPT0gTlVMTCk7DQotICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5k aXJ0eV9iaXRtYXBfc2l6ZSA9DQotICAgICAgICAoZG9tYWluX2dldF9tYXhpbXVtX2dwZm4oZCkg KyBCSVRTX1BFUl9MT05HKSAmIH4oQklUU19QRVJfTE9ORyAtIDEpOw0KLSAgICBkLT5hcmNoLnBh Z2luZy5zaGFkb3cuZGlydHlfYml0bWFwID0NCi0gICAgICAgIHhtYWxsb2NfYXJyYXkodW5zaWdu ZWQgbG9uZywNCi0gICAgICAgICAgICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRp cnR5X2JpdG1hcF9zaXplIC8gQklUU19QRVJfTE9ORyk7DQotICAgIGlmICggZC0+YXJjaC5wYWdp bmcuc2hhZG93LmRpcnR5X2JpdG1hcCA9PSBOVUxMICkNCi0gICAgew0KLSAgICAgICAgZC0+YXJj aC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcF9zaXplID0gMDsNCi0gICAgICAgIHJldHVybiAt RU5PTUVNOw0KLSAgICB9DQotICAgIG1lbXNldChkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlf Yml0bWFwLCAwLA0KLSAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1h cF9zaXplLzgpOw0KLQ0KLSAgICByZXR1cm4gMDsNCi19DQotDQotc3RhdGljIHZvaWQNCi1zaF9m cmVlX2xvZ19kaXJ0eV9iaXRtYXAoc3RydWN0IGRvbWFpbiAqZCkNCi17DQotICAgIGQtPmFyY2gu cGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXBfc2l6ZSA9IDA7DQotICAgIGlmICggZC0+YXJjaC5w YWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCApDQotICAgIHsNCi0gICAgICAgIHhmcmVlKGQtPmFy Y2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXApOw0KLSAgICAgICAgZC0+YXJjaC5wYWdpbmcu c2hhZG93LmRpcnR5X2JpdG1hcCA9IE5VTEw7DQotICAgIH0NCi19DQotDQotc3RhdGljIGludCBz aGFkb3dfbG9nX2RpcnR5X2VuYWJsZShzdHJ1Y3QgZG9tYWluICpkKQ0KLXsNCi0gICAgaW50IHJl dDsNCi0NCi0gICAgZG9tYWluX3BhdXNlKGQpOw0KLSAgICBzaGFkb3dfbG9jayhkKTsNCi0NCi0g ICAgaWYgKCBzaGFkb3dfbW9kZV9sb2dfZGlydHkoZCkgKQ0KLSAgICB7DQotICAgICAgICByZXQg PSAtRUlOVkFMOw0KLSAgICAgICAgZ290byBvdXQ7DQotICAgIH0NCi0NCi0gICAgaWYgKCBzaGFk b3dfbW9kZV9lbmFibGVkKGQpICkNCi0gICAgew0KLSAgICAgICAgLyogVGhpcyBkb21haW4gYWxy ZWFkeSBoYXMgc29tZSBzaGFkb3dzOiBuZWVkIHRvIGNsZWFyIHRoZW0gb3V0IA0KLSAgICAgICAg ICogb2YgdGhlIHdheSB0byBtYWtlIHN1cmUgdGhhdCBhbGwgcmVmZXJlbmNlcyB0byBndWVzdCBt ZW1vcnkgYXJlIA0KLSAgICAgICAgICogcHJvcGVybHkgd3JpdGUtcHJvdGVjdGVkICovDQotICAg ICAgICBzaGFkb3dfYmxvd190YWJsZXMoZCk7DQotICAgIH0NCi0NCi0jaWYgKFNIQURPV19PUFRJ TUlaQVRJT05TICYgU0hPUFRfTElOVVhfTDNfVE9QTEVWRUwpDQotICAgIC8qIDMyYml0IFBWIGd1 ZXN0cyBvbiA2NGJpdCB4ZW4gYmVoYXZlIGxpa2Ugb2xkZXIgNjRiaXQgbGludXg6IHRoZXkNCi0g ICAgICogY2hhbmdlIGFuIGw0ZSBpbnN0ZWFkIG9mIGNyMyB0byBzd2l0Y2ggdGFibGVzLiAgR2l2 ZSB0aGVtIHRoZQ0KLSAgICAgKiBzYW1lIG9wdGltaXphdGlvbiAqLw0KLSAgICBpZiAoIGlzX3B2 XzMyb242NF9kb21haW4oZCkgKQ0KLSAgICAgICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93Lm9wdF9m bGFncyA9IFNIT1BUX0xJTlVYX0wzX1RPUExFVkVMOw0KLSNlbmRpZg0KLQ0KLSAgICByZXQgPSBz aF9hbGxvY19sb2dfZGlydHlfYml0bWFwKGQpOw0KLSAgICBpZiAoIHJldCAhPSAwICkNCi0gICAg ew0KLSAgICAgICAgc2hfZnJlZV9sb2dfZGlydHlfYml0bWFwKGQpOw0KLSAgICAgICAgZ290byBv dXQ7DQotICAgIH0NCi0NCi0gICAgcmV0ID0gc2hhZG93X29uZV9iaXRfZW5hYmxlKGQsIFBHX2xv Z19kaXJ0eSk7DQotICAgIGlmICggcmV0ICE9IDAgKQ0KLSAgICAgICAgc2hfZnJlZV9sb2dfZGly dHlfYml0bWFwKGQpOw0KLQ0KLSBvdXQ6DQotICAgIHNoYWRvd191bmxvY2soZCk7DQotICAgIGRv bWFpbl91bnBhdXNlKGQpOw0KLSAgICByZXR1cm4gcmV0Ow0KLX0NCi0NCi1zdGF0aWMgaW50IHNo YWRvd19sb2dfZGlydHlfZGlzYWJsZShzdHJ1Y3QgZG9tYWluICpkKQ0KLXsNCi0gICAgaW50IHJl dDsNCi0NCi0gICAgZG9tYWluX3BhdXNlKGQpOw0KLSAgICBzaGFkb3dfbG9jayhkKTsNCi0gICAg cmV0ID0gc2hhZG93X29uZV9iaXRfZGlzYWJsZShkLCBQR19sb2dfZGlydHkpOw0KLSAgICBpZiAo ICFzaGFkb3dfbW9kZV9sb2dfZGlydHkoZCkgKQ0KLSAgICAgICAgc2hfZnJlZV9sb2dfZGlydHlf Yml0bWFwKGQpOw0KICAgICBzaGFkb3dfdW5sb2NrKGQpOw0KICAgICBkb21haW5fdW5wYXVzZShk KTsNCiANCkBAIC0yODkyLDE1MCArMjgwMSw2MiBAQCB2b2lkIHNoYWRvd19jb252ZXJ0X3RvX2xv Z19kaXJ0eShzdHJ1Y3QgDQogICAgIEJVRygpOw0KIH0NCiANCi0NCi0vKiBSZWFkIGEgZG9tYWlu J3MgbG9nLWRpcnR5IGJpdG1hcCBhbmQgc3RhdHMuICANCi0gKiBJZiB0aGUgb3BlcmF0aW9uIGlz IGEgQ0xFQU4sIGNsZWFyIHRoZSBiaXRtYXAgYW5kIHN0YXRzIGFzIHdlbGwuICovDQotc3RhdGlj IGludCBzaGFkb3dfbG9nX2RpcnR5X29wKA0KLSAgICBzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3Qg eGVuX2RvbWN0bF9zaGFkb3dfb3AgKnNjKQ0KLXsNCi0gICAgaW50IGksIHJ2ID0gMCwgY2xlYW4g PSAwLCBwZWVrID0gMTsNCi0NCi0gICAgZG9tYWluX3BhdXNlKGQpOw0KKy8qIFNoYWRvdyBzcGVj aWZpYyBjb2RlIHdoaWNoIGlzIGNhbGxlZCBpbiBwYWdpbmdfbG9nX2RpcnR5X2VuYWJsZSgpLg0K KyAqIFJldHVybiAwIGlmIG5vIHByb2JsZW0gZm91bmQuDQorICovDQoraW50IHNoYWRvd19lbmFi bGVfbG9nX2RpcnR5KHN0cnVjdCBkb21haW4gKmQpDQorew0KKyAgICBpbnQgcmV0Ow0KKw0KKyAg ICAvKiBzaGFkb3cgbG9jayBpcyByZXF1aXJlZCBoZXJlICovDQogICAgIHNoYWRvd19sb2NrKGQp Ow0KLQ0KLSAgICBjbGVhbiA9IChzYy0+b3AgPT0gWEVOX0RPTUNUTF9TSEFET1dfT1BfQ0xFQU4p Ow0KLQ0KLSAgICBTSEFET1dfREVCVUcoTE9HRElSVFksICJsb2ctZGlydHkgJXM6IGRvbSAldSBm YXVsdHM9JXUgZGlydHk9JXVcbiIsIA0KLSAgICAgICAgICAgICAgICAgIChjbGVhbikgPyAiY2xl YW4iIDogInBlZWsiLA0KLSAgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCwNCi0gICAgICAg ICAgICAgICAgICBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZmF1bHRfY291bnQsIA0KLSAgICAgICAg ICAgICAgICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9jb3VudCk7DQotDQotICAgIHNj LT5zdGF0cy5mYXVsdF9jb3VudCA9IGQtPmFyY2gucGFnaW5nLnNoYWRvdy5mYXVsdF9jb3VudDsN Ci0gICAgc2MtPnN0YXRzLmRpcnR5X2NvdW50ID0gZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5 X2NvdW50Ow0KLQ0KLSAgICBpZiAoIGNsZWFuICkNCi0gICAgew0KLSAgICAgICAgLyogTmVlZCB0 byByZXZva2Ugd3JpdGUgYWNjZXNzIHRvIHRoZSBkb21haW4ncyBwYWdlcyBhZ2Fpbi4NCi0gICAg ICAgICAqIEluIGZ1dHVyZSwgd2UnbGwgaGF2ZSBhIGxlc3MgaGVhdnktaGFuZGVkIGFwcHJvYWNo IHRvIHRoaXMsDQotICAgICAgICAgKiBidXQgZm9yIG5vdywgd2UganVzdCB1bnNoYWRvdyBldmVy eXRoaW5nIGV4Y2VwdCBYZW4uICovDQorICAgIGlmICggc2hhZG93X21vZGVfZW5hYmxlZChkKSAp DQorICAgIHsNCisgICAgICAgIC8qIFRoaXMgZG9tYWluIGFscmVhZHkgaGFzIHNvbWUgc2hhZG93 czogbmVlZCB0byBjbGVhciB0aGVtIG91dCANCisgICAgICAgICAqIG9mIHRoZSB3YXkgdG8gbWFr ZSBzdXJlIHRoYXQgYWxsIHJlZmVyZW5jZXMgdG8gZ3Vlc3QgbWVtb3J5IGFyZSANCisgICAgICAg ICAqIHByb3Blcmx5IHdyaXRlLXByb3RlY3RlZCAqLw0KICAgICAgICAgc2hhZG93X2Jsb3dfdGFi bGVzKGQpOw0KLQ0KLSAgICAgICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmZhdWx0X2NvdW50ID0g MDsNCi0gICAgICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9jb3VudCA9IDA7DQotICAg IH0NCi0NCi0gICAgaWYgKCBndWVzdF9oYW5kbGVfaXNfbnVsbChzYy0+ZGlydHlfYml0bWFwKSAp DQotICAgICAgICAvKiBjYWxsZXIgbWF5IGhhdmUgd2FudGVkIGp1c3QgdG8gY2xlYW4gdGhlIHN0 YXRlIG9yIGFjY2VzcyBzdGF0cy4gKi8NCi0gICAgICAgIHBlZWsgPSAwOw0KLQ0KLSAgICBpZiAo IChwZWVrIHx8IGNsZWFuKSAmJiAoZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCA9 PSBOVUxMKSApDQotICAgIHsNCi0gICAgICAgIHJ2ID0gLUVJTlZBTDsgLyogcGVyaGFwcyBzaG91 bGQgYmUgRU5PTUVNPyAqLw0KLSAgICAgICAgZ290byBvdXQ7DQotICAgIH0NCi0gDQotICAgIGlm ICggc2MtPnBhZ2VzID4gZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcF9zaXplICkN Ci0gICAgICAgIHNjLT5wYWdlcyA9IGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXBf c2l6ZTsNCi0NCi0jZGVmaW5lIENIVU5LICg4KjEwMjQpIC8qIFRyYW5zZmVyIGFuZCBjbGVhciBp biAxa0IgY2h1bmtzIGZvciBMMSBjYWNoZS4gKi8NCi0gICAgZm9yICggaSA9IDA7IGkgPCBzYy0+ cGFnZXM7IGkgKz0gQ0hVTksgKQ0KLSAgICB7DQotICAgICAgICBpbnQgYnl0ZXMgPSAoKCgoc2Mt PnBhZ2VzIC0gaSkgPiBDSFVOSykNCi0gICAgICAgICAgICAgICAgICAgICAgPyBDSFVOSw0KLSAg ICAgICAgICAgICAgICAgICAgICA6IChzYy0+cGFnZXMgLSBpKSkgKyA3KSAvIDg7DQotDQotICAg ICAgICBpZiAoIGxpa2VseShwZWVrKSApDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYgKCBj b3B5X3RvX2d1ZXN0X29mZnNldCgNCi0gICAgICAgICAgICAgICAgc2MtPmRpcnR5X2JpdG1hcCwg aS84LA0KLSAgICAgICAgICAgICAgICAodWludDhfdCAqKWQtPmFyY2gucGFnaW5nLnNoYWRvdy5k aXJ0eV9iaXRtYXAgKyAoaS84KSwgYnl0ZXMpICkNCi0gICAgICAgICAgICB7DQotICAgICAgICAg ICAgICAgIHJ2ID0gLUVGQVVMVDsNCi0gICAgICAgICAgICAgICAgZ290byBvdXQ7DQotICAgICAg ICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgaWYgKCBjbGVhbiApDQotICAgICAgICAg ICAgbWVtc2V0KCh1aW50OF90ICopZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCAr IChpLzgpLCAwLCBieXRlcyk7DQotICAgIH0NCi0jdW5kZWYgQ0hVTksNCi0NCi0gb3V0Og0KKyAg ICB9DQorDQorI2lmIChTSEFET1dfT1BUSU1JWkFUSU9OUyAmIFNIT1BUX0xJTlVYX0wzX1RPUExF VkVMKQ0KKyAgICAvKiAzMmJpdCBQViBndWVzdHMgb24gNjRiaXQgeGVuIGJlaGF2ZSBsaWtlIG9s ZGVyIDY0Yml0IGxpbnV4OiB0aGV5DQorICAgICAqIGNoYW5nZSBhbiBsNGUgaW5zdGVhZCBvZiBj cjMgdG8gc3dpdGNoIHRhYmxlcy4gIEdpdmUgdGhlbSB0aGUNCisgICAgICogc2FtZSBvcHRpbWl6 YXRpb24gKi8NCisgICAgaWYgKCBpc19wdl8zMm9uNjRfZG9tYWluKGQpICkNCisgICAgICAgIGQt PmFyY2gucGFnaW5nLnNoYWRvdy5vcHRfZmxhZ3MgPSBTSE9QVF9MSU5VWF9MM19UT1BMRVZFTDsN CisjZW5kaWYNCisgICAgDQorICAgIHJldCA9IHNoYWRvd19vbmVfYml0X2VuYWJsZShkLCBQR19s b2dfZGlydHkpOw0KICAgICBzaGFkb3dfdW5sb2NrKGQpOw0KLSAgICBkb21haW5fdW5wYXVzZShk KTsNCi0gICAgcmV0dXJuIHJ2Ow0KLX0NCi0NCi0NCi0vKiBNYXJrIGEgcGFnZSBhcyBkaXJ0eSAq Lw0KLXZvaWQgc2hfbWFya19kaXJ0eShzdHJ1Y3QgZG9tYWluICpkLCBtZm5fdCBnbWZuKQ0KLXsN Ci0gICAgdW5zaWduZWQgbG9uZyBwZm47DQotICAgIGludCBkb19sb2NraW5nOw0KLQ0KLSAgICBp ZiAoICFzaGFkb3dfbW9kZV9sb2dfZGlydHkoZCkgfHwgIW1mbl92YWxpZChnbWZuKSApDQotICAg ICAgICByZXR1cm47DQotDQotICAgIC8qIEFsdGhvdWdoIHRoaXMgaXMgYW4gZXh0ZXJuYWxseSB2 aXNpYmxlIGZ1bmN0aW9uLCB3ZSBkbyBub3Qga25vdw0KLSAgICAgKiB3aGV0aGVyIHRoZSBzaGFk b3cgbG9jayB3aWxsIGJlIGhlbGQgd2hlbiBpdCBpcyBjYWxsZWQgKHNpbmNlIGl0DQotICAgICAq IGNhbiBiZSBjYWxsZWQgZnJvbSBfX2h2bV9jb3B5IGR1cmluZyBlbXVsYXRpb24pLg0KLSAgICAg KiBJZiB0aGUgbG9jayBpc24ndCBoZWxkLCB0YWtlIGl0IGZvciB0aGUgZHVyYXRpb24gb2YgdGhl IGNhbGwuICovDQotICAgIGRvX2xvY2tpbmcgPSAhc2hhZG93X2xvY2tlZF9ieV9tZShkKTsNCi0g ICAgaWYgKCBkb19sb2NraW5nICkgDQotICAgIHsgDQotICAgICAgICBzaGFkb3dfbG9jayhkKTsN Ci0gICAgICAgIC8qIENoZWNrIHRoZSBtb2RlIGFnYWluIHdpdGggdGhlIGxvY2sgaGVsZCAqLyAN Ci0gICAgICAgIGlmICggdW5saWtlbHkoIXNoYWRvd19tb2RlX2xvZ19kaXJ0eShkKSkgKQ0KLSAg ICAgICAgew0KLSAgICAgICAgICAgIHNoYWRvd191bmxvY2soZCk7DQotICAgICAgICAgICAgcmV0 dXJuOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIEFTU0VSVChkLT5hcmNoLnBhZ2luZy5z aGFkb3cuZGlydHlfYml0bWFwICE9IE5VTEwpOw0KLQ0KLSAgICAvKiBXZSAvcmVhbGx5LyBtZWFu IFBGTiBoZXJlLCBldmVuIGZvciBub24tdHJhbnNsYXRlZCBndWVzdHMuICovDQotICAgIHBmbiA9 IGdldF9ncGZuX2Zyb21fbWZuKG1mbl94KGdtZm4pKTsNCi0NCi0gICAgLyoNCi0gICAgICogVmFs dWVzIHdpdGggdGhlIE1TQiBzZXQgZGVub3RlIE1GTnMgdGhhdCBhcmVuJ3QgcmVhbGx5IHBhcnQg b2YgdGhlIA0KLSAgICAgKiBkb21haW4ncyBwc2V1ZG8tcGh5c2ljYWwgbWVtb3J5IG1hcCAoZS5n LiwgdGhlIHNoYXJlZCBpbmZvIGZyYW1lKS4NCi0gICAgICogTm90aGluZyB0byBkbyBoZXJlLi4u DQotICAgICAqLw0KLSAgICBpZiAoIHVubGlrZWx5KCFWQUxJRF9NMlAocGZuKSkgKQ0KLSAgICAg ICAgcmV0dXJuOw0KLQ0KLSAgICAvKiBOLkIuIENhbiB1c2Ugbm9uLWF0b21pYyBUQVMgYmVjYXVz ZSBwcm90ZWN0ZWQgYnkgc2hhZG93X2xvY2suICovDQotICAgIGlmICggbGlrZWx5KHBmbiA8IGQt PmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXBfc2l6ZSkgKSANCi0gICAgeyANCi0gICAg ICAgIGlmICggIV9fdGVzdF9hbmRfc2V0X2JpdChwZm4sIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5k aXJ0eV9iaXRtYXApICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBTSEFET1dfREVCVUcoTE9H RElSVFksIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hcmtlZCBtZm4gJSIgUFJJX21m biAiIChwZm49JWx4KSwgZG9tICVkXG4iLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgbWZu X3goZ21mbiksIHBmbiwgZC0+ZG9tYWluX2lkKTsNCi0gICAgICAgICAgICBkLT5hcmNoLnBhZ2lu Zy5zaGFkb3cuZGlydHlfY291bnQrKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBlbHNlDQot ICAgIHsNCi0gICAgICAgIFNIQURPV19QUklOVEsoIm1hcmtfZGlydHkgT09SISAiDQotICAgICAg ICAgICAgICAgICAgICAgICAibWZuPSUiIFBSSV9tZm4gIiBwZm49JWx4IG1heD0leCAoZG9tICVk KVxuIg0KLSAgICAgICAgICAgICAgICAgICAgICAgIm93bmVyPSVkIGM9JTA4eCB0PSUiIFBSdHlw ZV9pbmZvICJcbiIsDQotICAgICAgICAgICAgICAgICAgICAgICBtZm5feChnbWZuKSwgDQotICAg ICAgICAgICAgICAgICAgICAgICBwZm4sIA0KLSAgICAgICAgICAgICAgICAgICAgICAgZC0+YXJj aC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcF9zaXplLA0KLSAgICAgICAgICAgICAgICAgICAg ICAgZC0+ZG9tYWluX2lkLA0KLSAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VfZ2V0X293bmVy KG1mbl90b19wYWdlKGdtZm4pKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgID8gcGFnZV9nZXRf b3duZXIobWZuX3RvX3BhZ2UoZ21mbikpLT5kb21haW5faWQNCi0gICAgICAgICAgICAgICAgICAg ICAgICA6IC0xKSwNCi0gICAgICAgICAgICAgICAgICAgICAgIG1mbl90b19wYWdlKGdtZm4pLT5j b3VudF9pbmZvLCANCi0gICAgICAgICAgICAgICAgICAgICAgIG1mbl90b19wYWdlKGdtZm4pLT51 LmludXNlLnR5cGVfaW5mbyk7DQotICAgIH0NCi0NCi0gICAgaWYgKCBkb19sb2NraW5nICkgc2hh ZG93X3VubG9jayhkKTsNCi19DQotDQorDQorICAgIHJldHVybiByZXQ7DQorfQ0KKw0KKy8qIHNo YWRvdyBzcGVjZmljIGNvZGUgd2hpY2ggaXMgY2FsbGVkIGluIHBhZ2luZ19sb2dfZGlydHlfZGlz YWJsZSgpICovDQoraW50IHNoYWRvd19kaXNhYmxlX2xvZ19kaXJ0eShzdHJ1Y3QgZG9tYWluICpk KQ0KK3sNCisgICAgaW50IHJldDsNCisNCisgICAgLyogc2hhZG93IGxvY2sgaXMgcmVxdWlyZWQg aGVyZSAqLyAgICANCisgICAgc2hhZG93X2xvY2soZCk7DQorICAgIHJldCA9IHNoYWRvd19vbmVf Yml0X2Rpc2FibGUoZCwgUEdfbG9nX2RpcnR5KTsNCisgICAgc2hhZG93X3VubG9jayhkKTsNCisg ICAgDQorICAgIHJldHVybiByZXQ7DQorfQ0KKw0KKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IHdoZW4gd2UgQ0xFQU4gbG9nIGRpcnR5IGJpdG1hcC4gU2VlIA0KKyAqIHBhZ2luZ19sb2dfZGly dHlfb3AoKSBmb3IgZGV0YWlscy4gDQorICovDQordm9pZCBzaGFkb3dfY2xlYW5fZGlydHlfYml0 bWFwKHN0cnVjdCBkb21haW4gKmQpDQorew0KKyAgICBzaGFkb3dfbG9jayhkKTsNCisgICAgLyog TmVlZCB0byByZXZva2Ugd3JpdGUgYWNjZXNzIHRvIHRoZSBkb21haW4ncyBwYWdlcyBhZ2Fpbi4N CisgICAgICogSW4gZnV0dXJlLCB3ZSdsbCBoYXZlIGEgbGVzcyBoZWF2eS1oYW5kZWQgYXBwcm9h Y2ggdG8gdGhpcywNCisgICAgICogYnV0IGZvciBub3csIHdlIGp1c3QgdW5zaGFkb3cgZXZlcnl0 aGluZyBleGNlcHQgWGVuLiAqLw0KKyAgICBzaGFkb3dfYmxvd190YWJsZXMoZCk7DQorICAgIHNo YWRvd191bmxvY2soZCk7DQorfQ0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAvKiBTaGFkb3ctY29u dHJvbCBYRU5fRE9NQ1RMIGRpc3BhdGNoZXIgKi8NCiANCkBAIC0zMDQ1LDMzICsyODY2LDkgQEAg aW50IHNoYWRvd19kb21jdGwoc3RydWN0IGRvbWFpbiAqZCwNCiB7DQogICAgIGludCByYywgcHJl ZW1wdGVkID0gMDsNCiANCi0gICAgaWYgKCB1bmxpa2VseShkID09IGN1cnJlbnQtPmRvbWFpbikg KQ0KLSAgICB7DQotICAgICAgICBnZHByaW50ayhYRU5MT0dfSU5GTywgIkRvbSAldSB0cmllZCB0 byBkbyBhIHNoYWRvdyBvcCBvbiBpdHNlbGYuXG4iLA0KLSAgICAgICAgICAgICAgICAgZC0+ZG9t YWluX2lkKTsNCi0gICAgICAgIHJldHVybiAtRUlOVkFMOw0KLSAgICB9DQotDQotICAgIGlmICgg dW5saWtlbHkoZC0+aXNfZHlpbmcpICkNCi0gICAgew0KLSAgICAgICAgZ2RwcmludGsoWEVOTE9H X0lORk8sICJJZ25vcmluZyBzaGFkb3cgb3Agb24gZHlpbmcgZG9tYWluICV1XG4iLA0KLSAgICAg ICAgICAgICAgICAgZC0+ZG9tYWluX2lkKTsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQot DQotICAgIGlmICggdW5saWtlbHkoZC0+dmNwdVswXSA9PSBOVUxMKSApDQotICAgIHsNCi0gICAg ICAgIFNIQURPV19FUlJPUigiU2hhZG93IG9wIG9uIGEgZG9tYWluICgldSkgd2l0aCBubyB2Y3B1 c1xuIiwNCi0gICAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQpOw0KLSAgICAgICAgcmV0 dXJuIC1FSU5WQUw7DQotICAgIH0NCi0NCiAgICAgc3dpdGNoICggc2MtPm9wICkNCiAgICAgew0K ICAgICBjYXNlIFhFTl9ET01DVExfU0hBRE9XX09QX09GRjoNCi0gICAgICAgIGlmICggc2hhZG93 X21vZGVfbG9nX2RpcnR5KGQpICkNCi0gICAgICAgICAgICBpZiAoIChyYyA9IHNoYWRvd19sb2df ZGlydHlfZGlzYWJsZShkKSkgIT0gMCApIA0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmM7DQog ICAgICAgICBpZiAoIGQtPmFyY2gucGFnaW5nLm1vZGUgPT0gUEdfU0hfZW5hYmxlICkNCiAgICAg ICAgICAgICBpZiAoIChyYyA9IHNoYWRvd190ZXN0X2Rpc2FibGUoZCkpICE9IDAgKSANCiAgICAg ICAgICAgICAgICAgcmV0dXJuIHJjOw0KQEAgLTMwODAsMTkgKzI4NzcsMTAgQEAgaW50IHNoYWRv d19kb21jdGwoc3RydWN0IGRvbWFpbiAqZCwNCiAgICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19P UF9FTkFCTEVfVEVTVDoNCiAgICAgICAgIHJldHVybiBzaGFkb3dfdGVzdF9lbmFibGUoZCk7DQog DQotICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfRU5BQkxFX0xPR0RJUlRZOg0KLSAgICAg ICAgcmV0dXJuIHNoYWRvd19sb2dfZGlydHlfZW5hYmxlKGQpOw0KLQ0KICAgICBjYXNlIFhFTl9E T01DVExfU0hBRE9XX09QX0VOQUJMRV9UUkFOU0xBVEU6DQogICAgICAgICByZXR1cm4gc2hhZG93 X2VuYWJsZShkLCBQR19yZWZjb3VudHN8UEdfdHJhbnNsYXRlKTsNCiANCi0gICAgY2FzZSBYRU5f RE9NQ1RMX1NIQURPV19PUF9DTEVBTjoNCi0gICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19PUF9Q RUVLOg0KLSAgICAgICAgcmV0dXJuIHNoYWRvd19sb2dfZGlydHlfb3AoZCwgc2MpOw0KLQ0KICAg ICBjYXNlIFhFTl9ET01DVExfU0hBRE9XX09QX0VOQUJMRToNCi0gICAgICAgIGlmICggc2MtPm1v ZGUgJiBYRU5fRE9NQ1RMX1NIQURPV19FTkFCTEVfTE9HX0RJUlRZICkNCi0gICAgICAgICAgICBy ZXR1cm4gc2hhZG93X2xvZ19kaXJ0eV9lbmFibGUoZCk7DQogICAgICAgICByZXR1cm4gc2hhZG93 X2VuYWJsZShkLCBzYy0+bW9kZSA8PCBQR19tb2RlX3NoaWZ0KTsNCiANCiAgICAgY2FzZSBYRU5f RE9NQ1RMX1NIQURPV19PUF9HRVRfQUxMT0NBVElPTjoNCmRpZmYgLXIgNDU1MTZhYzk0YzlmIHhl bi9hcmNoL3g4Ni9tbS9zaGFkb3cvbXVsdGkuYw0KLS0tIGEveGVuL2FyY2gveDg2L21tL3NoYWRv dy9tdWx0aS5jCVdlZCBKdW4gMDYgMDg6MzI6MzIgMjAwNyAtMDUwMA0KKysrIGIveGVuL2FyY2gv eDg2L21tL3NoYWRvdy9tdWx0aS5jCVdlZCBKdW4gMDYgMTI6MDg6MzggMjAwNyAtMDUwMA0KQEAg LTQ1Nyw3ICs0NTcsNyBAQCBzdGF0aWMgdTMyIGd1ZXN0X3NldF9hZF9iaXRzKHN0cnVjdCB2Y3B1 DQogICAgIH0NCiANCiAgICAgLyogU2V0IHRoZSBiaXQocykgKi8NCi0gICAgc2hfbWFya19kaXJ0 eSh2LT5kb21haW4sIGdtZm4pOw0KKyAgICBwYWdpbmdfbWFya19kaXJ0eSh2LT5kb21haW4sIG1m bl94KGdtZm4pKTsNCiAgICAgU0hBRE9XX0RFQlVHKEFfQU5EX0QsICJnZm4gPSAlIiBTSF9QUklf Z2ZuICIsICINCiAgICAgICAgICAgICAgICAgICJvbGQgZmxhZ3MgPSAlI3gsIG5ldyBmbGFncyA9 ICUjeFxuIiwgDQogICAgICAgICAgICAgICAgICBnZm5feChndWVzdF9sMWVfZ2V0X2dmbigqZXAp KSwgZ3Vlc3RfbDFlX2dldF9mbGFncygqZXApLCANCkBAIC03MTcsNyArNzE3LDcgQEAgX3NoX3By b3BhZ2F0ZShzdHJ1Y3QgdmNwdSAqdiwNCiAgICAgaWYgKCB1bmxpa2VseSgobGV2ZWwgPT0gMSkg JiYgc2hhZG93X21vZGVfbG9nX2RpcnR5KGQpKSApDQogICAgIHsNCiAgICAgICAgIGlmICggZnQg JiBGRVRDSF9UWVBFX1dSSVRFICkgDQotICAgICAgICAgICAgc2hfbWFya19kaXJ0eShkLCB0YXJn ZXRfbWZuKTsNCisgICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShkLCBtZm5feCh0YXJnZXRf bWZuKSk7DQogICAgICAgICBlbHNlIGlmICggIXNoX21mbl9pc19kaXJ0eShkLCB0YXJnZXRfbWZu KSApDQogICAgICAgICAgICAgc2ZsYWdzICY9IH5fUEFHRV9SVzsNCiAgICAgfQ0KQEAgLTI4NTYs NyArMjg1Niw3IEBAIHN0YXRpYyBpbnQgc2hfcGFnZV9mYXVsdChzdHJ1Y3QgdmNwdSAqdiwNCiAg ICAgfQ0KIA0KICAgICBwZXJmY19pbmNyKHNoYWRvd19mYXVsdF9maXhlZCk7DQotICAgIGQtPmFy Y2gucGFnaW5nLnNoYWRvdy5mYXVsdF9jb3VudCsrOw0KKyAgICBkLT5hcmNoLnBhZ2luZy5sb2df ZGlydHkuZmF1bHRfY291bnQrKzsNCiAgICAgcmVzZXRfZWFybHlfdW5zaGFkb3codik7DQogDQog IGRvbmU6DQpAQCAtNDA1OCw3ICs0MDU4LDcgQEAgc2hfeDg2X2VtdWxhdGVfd3JpdGUoc3RydWN0 IHZjcHUgKnYsIHVucw0KICAgICBlbHNlDQogICAgICAgICByZXNldF9lYXJseV91bnNoYWRvdyh2 KTsNCiAgICAgDQotICAgIHNoX21hcmtfZGlydHkodi0+ZG9tYWluLCBtZm4pOw0KKyAgICBwYWdp bmdfbWFya19kaXJ0eSh2LT5kb21haW4sIG1mbl94KG1mbikpOw0KIA0KICAgICBzaF91bm1hcF9k b21haW5fcGFnZShhZGRyKTsNCiAgICAgc2hhZG93X2F1ZGl0X3RhYmxlcyh2KTsNCkBAIC00MTE0 LDcgKzQxMTQsNyBAQCBzaF94ODZfZW11bGF0ZV9jbXB4Y2hnKHN0cnVjdCB2Y3B1ICp2LCB1DQog ICAgIGVsc2UNCiAgICAgICAgIHJlc2V0X2Vhcmx5X3Vuc2hhZG93KHYpOw0KIA0KLSAgICBzaF9t YXJrX2RpcnR5KHYtPmRvbWFpbiwgbWZuKTsNCisgICAgcGFnaW5nX21hcmtfZGlydHkodi0+ZG9t YWluLCBtZm5feChtZm4pKTsNCiANCiAgICAgc2hfdW5tYXBfZG9tYWluX3BhZ2UoYWRkcik7DQog ICAgIHNoYWRvd19hdWRpdF90YWJsZXModik7DQpAQCAtNDE1OCw3ICs0MTU4LDcgQEAgc2hfeDg2 X2VtdWxhdGVfY21weGNoZzhiKHN0cnVjdCB2Y3B1ICp2LA0KICAgICBlbHNlDQogICAgICAgICBy ZXNldF9lYXJseV91bnNoYWRvdyh2KTsNCiANCi0gICAgc2hfbWFya19kaXJ0eSh2LT5kb21haW4s IG1mbik7DQorICAgIHBhZ2luZ19tYXJrX2RpcnR5KHYtPmRvbWFpbiwgbWZuX3gobWZuKSk7DQog DQogICAgIHNoX3VubWFwX2RvbWFpbl9wYWdlKGFkZHIpOw0KICAgICBzaGFkb3dfYXVkaXRfdGFi bGVzKHYpOw0KZGlmZiAtciA0NTUxNmFjOTRjOWYgeGVuL2FyY2gveDg2L21tL3NoYWRvdy9wcml2 YXRlLmgNCi0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvcHJpdmF0ZS5oCVdlZCBKdW4gMDYg MDg6MzI6MzIgMjAwNyAtMDUwMA0KKysrIGIveGVuL2FyY2gveDg2L21tL3NoYWRvdy9wcml2YXRl LmgJV2VkIEp1biAwNiAwOToxMjowOCAyMDA3IC0wNTAwDQpAQCAtNDk2LDEzICs0OTYsMTMgQEAg c2hfbWZuX2lzX2RpcnR5KHN0cnVjdCBkb21haW4gKmQsIG1mbl90IA0KIHsNCiAgICAgdW5zaWdu ZWQgbG9uZyBwZm47DQogICAgIEFTU0VSVChzaGFkb3dfbW9kZV9sb2dfZGlydHkoZCkpOw0KLSAg ICBBU1NFUlQoZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCAhPSBOVUxMKTsNCisg ICAgQVNTRVJUKGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXAgIT0gTlVMTCk7DQogDQog ICAgIC8qIFdlIC9yZWFsbHkvIG1lYW4gUEZOIGhlcmUsIGV2ZW4gZm9yIG5vbi10cmFuc2xhdGVk IGd1ZXN0cy4gKi8NCiAgICAgcGZuID0gZ2V0X2dwZm5fZnJvbV9tZm4obWZuX3goZ21mbikpOw0K ICAgICBpZiAoIGxpa2VseShWQUxJRF9NMlAocGZuKSkNCi0gICAgICAgICAmJiBsaWtlbHkocGZu IDwgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcF9zaXplKSANCi0gICAgICAgICAm JiB0ZXN0X2JpdChwZm4sIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXApICkNCisg ICAgICAgICAmJiBsaWtlbHkocGZuIDwgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcF9z aXplKSANCisgICAgICAgICAmJiB0ZXN0X2JpdChwZm4sIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0 eS5iaXRtYXApICkNCiAgICAgICAgIHJldHVybiAxOw0KIA0KICAgICByZXR1cm4gMDsNCmRpZmYg LXIgNDU1MTZhYzk0YzlmIHhlbi9pbmNsdWRlL2FzbS14ODYvZG9tYWluLmgNCi0tLSBhL3hlbi9p bmNsdWRlL2FzbS14ODYvZG9tYWluLmgJV2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQor KysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2RvbWFpbi5oCVdlZCBKdW4gMDYgMTI6MzQ6MjQgMjAw NyAtMDUwMA0KQEAgLTkyLDE0ICs5Miw2IEBAIHN0cnVjdCBzaGFkb3dfZG9tYWluIHsNCiANCiAg ICAgLyogRmFzdCBNTUlPIHBhdGggaGV1cmlzdGljICovDQogICAgIGludCBoYXNfZmFzdF9tbWlv X2VudHJpZXM7DQotDQotICAgIC8qIFNoYWRvdyBsb2ctZGlydHkgYml0bWFwICovDQotICAgIHVu c2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcDsNCi0gICAgdW5zaWduZWQgaW50IGRpcnR5X2JpdG1h cF9zaXplOyAgLyogaW4gcGFnZXMsIGJpdCBwZXIgcGFnZSAqLw0KLQ0KLSAgICAvKiBTaGFkb3cg bG9nLWRpcnR5IG1vZGUgc3RhdHMgKi8NCi0gICAgdW5zaWduZWQgaW50IGZhdWx0X2NvdW50Ow0K LSAgICB1bnNpZ25lZCBpbnQgZGlydHlfY291bnQ7DQogfTsNCiANCiBzdHJ1Y3Qgc2hhZG93X3Zj cHUgew0KQEAgLTEzNCw3ICsxMjYsNiBAQCBzdHJ1Y3QgaGFwX2RvbWFpbiB7DQogLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAvKiAgICAgICBwMm0g aGFuZGxpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KIC8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQogc3RydWN0IHAybV9kb21haW4g ew0KICAgICAvKiBMb2NrIHRoYXQgcHJvdGVjdHMgdXBkYXRlcyB0byB0aGUgcDJtICovDQogICAg IHNwaW5sb2NrX3QgICAgICAgICBsb2NrOw0KQEAgLTE1NiwxNiArMTQ3LDM2IEBAIHN0cnVjdCBw Mm1fZG9tYWluIHsNCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLw0KIC8qICAgICAgIGNvbW1vbiBwYWdpbmcgZGF0YSBzdHJ1Y3R1cmUgICAgICAgICAg ICovDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8N CitzdHJ1Y3QgbG9nX2RpcnR5X2RvbWFpbiB7DQorICAgIC8qIGxvZy1kaXJ0eSBsb2NrICovDQor ICAgIHNwaW5sb2NrX3QgICAgIGxvY2s7DQorICAgIGludCAgICAgICAgICAgIGxvY2tlcjsgLyog cHJvY2Vzc29yIHRoYXQgaG9sZHMgdGhlIGxvY2sgKi8NCisgICAgY29uc3QgY2hhciAgICAqbG9j a2VyX2Z1bmN0aW9uOyAvKiBmdW5jIHRoYXQgdG9vayBpdCAqLw0KKw0KKyAgICAvKiBsb2ctZGly dHkgYml0bWFwIHRvIHJlY29yZCBkaXJ0eSBwYWdlcyAqLw0KKyAgICB1bnNpZ25lZCBsb25nICpi aXRtYXA7DQorICAgIHVuc2lnbmVkIGludCAgIGJpdG1hcF9zaXplOyAgLyogaW4gcGFnZXMsIGJp dCBwZXIgcGFnZSAqLw0KKw0KKyAgICAvKiBsb2ctZGlydHkgbW9kZSBzdGF0cyAqLw0KKyAgICB1 bnNpZ25lZCBpbnQgICBmYXVsdF9jb3VudDsNCisgICAgdW5zaWduZWQgaW50ICAgZGlydHlfY291 bnQ7DQorDQorICAgIC8qIGZ1bmN0aW9ucyB3aGljaCBhcmUgcGFnaW5nIG1vZGUgc3BlY2lmaWMg Ki8NCisgICAgaW50ICAgICAgICAgICAgKCplbmFibGVfbG9nX2RpcnR5ICAgKShzdHJ1Y3QgZG9t YWluICpkKTsNCisgICAgaW50ICAgICAgICAgICAgKCpkaXNhYmxlX2xvZ19kaXJ0eSAgKShzdHJ1 Y3QgZG9tYWluICpkKTsNCisgICAgdm9pZCAgICAgICAgICAgKCpjbGVhbl9kaXJ0eV9iaXRtYXAg KShzdHJ1Y3QgZG9tYWluICpkKTsNCit9Ow0KKw0KIHN0cnVjdCBwYWdpbmdfZG9tYWluIHsNCi0g ICAgdTMyICAgICAgICAgICAgICAgbW9kZTsgIC8qIGZsYWdzIHRvIGNvbnRyb2wgcGFnaW5nIG9w ZXJhdGlvbiAqLw0KLQ0KKyAgICAvKiBmbGFncyB0byBjb250cm9sIHBhZ2luZyBvcGVyYXRpb24g Ki8NCisgICAgdTMyICAgICAgICAgICAgICAgICAgICAgbW9kZTsNCiAgICAgLyogZXh0ZW5zaW9u IGZvciBzaGFkb3cgcGFnaW5nIHN1cHBvcnQgKi8NCi0gICAgc3RydWN0IHNoYWRvd19kb21haW4g c2hhZG93Ow0KLQ0KLSAgICAvKiBPdGhlciBwYWdpbmcgYXNzaXN0YW5jZSBjb2RlIHdpbGwgaGF2 ZSBzdHJ1Y3RzIGhlcmUgKi8NCi0gICAgc3RydWN0IGhhcF9kb21haW4gICAgaGFwOw0KLX07DQot DQorICAgIHN0cnVjdCBzaGFkb3dfZG9tYWluICAgIHNoYWRvdzsNCisgICAgLyogZXh0ZW5zaW9u IGZvciBoYXJkd2FyZS1hc3NpdGVkIHBhZ2luZyAqLw0KKyAgICBzdHJ1Y3QgaGFwX2RvbWFpbiAg ICAgICBoYXA7DQorICAgIC8qIGxvZyBkaXJ0eSBzdXBwb3J0ICovDQorICAgIHN0cnVjdCBsb2df ZGlydHlfZG9tYWluIGxvZ19kaXJ0eTsNCit9Ow0KIHN0cnVjdCBwYWdpbmdfdmNwdSB7DQogICAg IC8qIFBvaW50ZXJzIHRvIG1vZGUtc3BlY2lmaWMgZW50cnkgcG9pbnRzLiAqLw0KICAgICBzdHJ1 Y3QgcGFnaW5nX21vZGUgKm1vZGU7DQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiB4ZW4vaW5jbHVkZS9h c20teDg2L2dyYW50X3RhYmxlLmgNCi0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvZ3JhbnRfdGFi bGUuaAlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hlbi9pbmNsdWRlL2Fz bS14ODYvZ3JhbnRfdGFibGUuaAlXZWQgSnVuIDA2IDEyOjAzOjIxIDIwMDcgLTA1MDANCkBAIC0z MSw3ICszMSw3IEBAIGludCByZXBsYWNlX2dyYW50X2hvc3RfbWFwcGluZygNCiAjZGVmaW5lIGdu dHRhYl9zaGFyZWRfZ21mbihkLCB0LCBpKSAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgKG1m bl90b19nbWZuKGQsIGdudHRhYl9zaGFyZWRfbWZuKGQsIHQsIGkpKSkNCiANCi0jZGVmaW5lIGdu dHRhYl9tYXJrX2RpcnR5KGQsIGYpIG1hcmtfZGlydHkoKGQpLCAoZikpDQorI2RlZmluZSBnbnR0 YWJfbWFya19kaXJ0eShkLCBmKSBwYWdpbmdfbWFya19kaXJ0eSgoZCksIChmKSkNCiANCiBzdGF0 aWMgaW5saW5lIHZvaWQgZ250dGFiX2NsZWFyX2ZsYWcodW5zaWduZWQgbG9uZyBuciwgdWludDE2 X3QgKmFkZHIpDQogew0KZGlmZiAtciA0NTUxNmFjOTRjOWYgeGVuL2luY2x1ZGUvYXNtLXg4Ni9w Mm0uaA0KLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9wMm0uaAlXZWQgSnVuIDA2IDA4OjMyOjMy IDIwMDcgLTA1MDANCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvcDJtLmgJVGh1IEp1biAwNyAw NTozNzoxMiAyMDA3IC0wNTAwDQpAQCAtMTI5LDYgKzEyOSwxMSBAQCB2b2lkIGd1ZXN0X3BoeXNt YXBfcmVtb3ZlX3BhZ2Uoc3RydWN0IGRvDQogdm9pZCBndWVzdF9waHlzbWFwX3JlbW92ZV9wYWdl KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1mbik7DQogDQorLyogc2V0IFAyTSB0YWJsZSBs MWUgZmxhZ3MgKi8NCit2b2lkIHAybV9zZXRfZmxhZ3NfZ2xvYmFsKHN0cnVjdCBkb21haW4gKmQs IHUzMiBsMWVfZmxhZ3MpOw0KKw0KKy8qIHNldCBQMk0gdGFibGUgbDFlIGZsYWdzIGZvciBhIGdw YSAqLw0KK2ludCBwMm1fc2V0X2ZsYWdzKHN0cnVjdCBkb21haW4gKmQsIHBhZGRyX3QgZ3BhLCB1 MzIgbDFlX2ZsYWdzKTsNCiANCiAjZW5kaWYgLyogX1hFTl9QMk1fSCAqLw0KIA0KZGlmZiAtciA0 NTUxNmFjOTRjOWYgeGVuL2luY2x1ZGUvYXNtLXg4Ni9wYWdpbmcuaA0KLS0tIGEveGVuL2luY2x1 ZGUvYXNtLXg4Ni9wYWdpbmcuaAlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBi L3hlbi9pbmNsdWRlL2FzbS14ODYvcGFnaW5nLmgJV2VkIEp1biAwNiAxMjozNjo1NCAyMDA3IC0w NTAwDQpAQCAtNjIsNiArNjIsOSBAQA0KICNkZWZpbmUgcGFnaW5nX21vZGVfbG9nX2RpcnR5KF9k KSAoKF9kKS0+YXJjaC5wYWdpbmcubW9kZSAmIFBHX2xvZ19kaXJ0eSkNCiAjZGVmaW5lIHBhZ2lu Z19tb2RlX3RyYW5zbGF0ZShfZCkgKChfZCktPmFyY2gucGFnaW5nLm1vZGUgJiBQR190cmFuc2xh dGUpDQogI2RlZmluZSBwYWdpbmdfbW9kZV9leHRlcm5hbChfZCkgICgoX2QpLT5hcmNoLnBhZ2lu Zy5tb2RlICYgUEdfZXh0ZXJuYWwpDQorDQorLyogZmxhZ3MgdXNlZCBmb3IgcGFnaW5nIGRlYnVn ICovDQorI2RlZmluZSBQQUdJTkdfREVCVUdfTE9HRElSVFkgMA0KIA0KIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioNCiAgKiBUaGUgZXF1aXZhbGVudCBmb3IgYSBwYXJ0aWN1bGFyIHZjcHUgb2YgYSBz aGFkb3dlZCBkb21haW4uICovDQpAQCAtMTM2LDYgKzEzOSwyOSBAQCBzdHJ1Y3QgcGFnaW5nX21v ZGUgew0KICAgICBzdHJ1Y3Qgc2hhZG93X3BhZ2luZ19tb2RlIHNoYWRvdzsNCiB9Ow0KIA0KKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKg0KKyAqIExvZyBkaXJ0eSBjb2RlICovDQorDQorLyogYWxsb2Nh dGUgbG9nIGRpcnR5IGJpdG1hcCByZXNvdXJjZSBmb3IgcmVjb3JkaW5nIGRpcnR5IHBhZ2VzICov DQoraW50IHBhZ2luZ19hbGxvY19sb2dfZGlydHlfYml0bWFwKHN0cnVjdCBkb21haW4gKmQpOw0K Kw0KKy8qIGZyZWUgbG9nIGRpcnR5IGJpdG1hcCByZXNvdXJjZSAqLw0KK3ZvaWQgcGFnaW5nX2Zy ZWVfbG9nX2RpcnR5X2JpdG1hcChzdHJ1Y3QgZG9tYWluICpkKTsNCisNCisvKiBlbmFibGUgbG9n IGRpcnR5ICovDQoraW50IHBhZ2luZ19sb2dfZGlydHlfZW5hYmxlKHN0cnVjdCBkb21haW4gKmQp Ow0KKw0KKy8qIGRpc2FibGUgbG9nIGRpcnR5ICovDQoraW50IHBhZ2luZ19sb2dfZGlydHlfZGlz YWJsZShzdHJ1Y3QgZG9tYWluICpkKTsNCisNCisvKiBsb2cgZGlydHkgaW5pdGlhbGl6YXRpb24g Ki8NCit2b2lkIHBhZ2luZ19sb2dfZGlydHlfaW5pdChzdHJ1Y3QgZG9tYWluICpkLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAgKCplbmFibGVfbG9nX2RpcnR5KShzdHJ1Y3QgZG9t YWluICpkKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICgqZGlzYWJsZV9sb2df ZGlydHkpKHN0cnVjdCBkb21haW4gKmQpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKCpjbGVhbl9kaXJ0eV9iaXRtYXApKHN0cnVjdCBkb21haW4gKmQpKTsNCisNCisvKiBtYXJr IGEgcGFnZSBhcyBkaXJ0eSAqLw0KK3ZvaWQgcGFnaW5nX21hcmtfZGlydHkoc3RydWN0IGRvbWFp biAqZCwgdW5zaWduZWQgbG9uZyBndWVzdF9tZm4pOw0KIA0KIC8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Kg0KICAqIEVudHJ5IHBvaW50cyBpbnRvIHRoZSBwYWdpbmctYXNzaXN0YW5jZSBjb2RlICovDQpk aWZmIC1yIDQ1NTE2YWM5NGM5ZiB4ZW4vaW5jbHVkZS9hc20teDg2L3NoYWRvdy5oDQotLS0gYS94 ZW4vaW5jbHVkZS9hc20teDg2L3NoYWRvdy5oCVdlZCBKdW4gMDYgMDg6MzI6MzIgMjAwNyAtMDUw MA0KKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9zaGFkb3cuaAlXZWQgSnVuIDA2IDEyOjM3OjUy IDIwMDcgLTA1MDANCkBAIC03NSwxNiArNzUsMTQgQEAgdm9pZCBzaGFkb3dfdGVhcmRvd24oc3Ry dWN0IGRvbWFpbiAqZCk7DQogLyogQ2FsbCBvbmNlIGFsbCBvZiB0aGUgcmVmZXJlbmNlcyB0byB0 aGUgZG9tYWluIGhhdmUgZ29uZSBhd2F5ICovDQogdm9pZCBzaGFkb3dfZmluYWxfdGVhcmRvd24o c3RydWN0IGRvbWFpbiAqZCk7DQogDQotLyogTWFyayBhIHBhZ2UgYXMgZGlydHkgaW4gdGhlIGxv Zy1kaXJ0eSBiaXRtYXA6IGNhbGxlZCB3aGVuIFhlbiANCi0gKiBtYWtlcyBjaGFuZ2VzIHRvIGd1 ZXN0IG1lbW9yeSBvbiBpdHMgYmVoYWxmLiAqLw0KLXZvaWQgc2hfbWFya19kaXJ0eShzdHJ1Y3Qg ZG9tYWluICpkLCBtZm5fdCBnbWZuKTsNCi0vKiBDbGVhbmVyIHZlcnNpb24gc28gd2UgZG9uJ3Qg cGVwcGVyIHNoYWRvd19tb2RlIHRlc3RzIGFsbCBvdmVyIHRoZSBwbGFjZSAqLw0KLXN0YXRpYyBp bmxpbmUgdm9pZCBtYXJrX2RpcnR5KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ21m bikNCi17DQotICAgIGlmICggdW5saWtlbHkoc2hhZG93X21vZGVfbG9nX2RpcnR5KGQpKSApDQot ICAgICAgICAvKiBTZWUgdGhlIGNvbW1lbnQgYWJvdXQgbG9ja2luZyBpbiBzaF9tYXJrX2RpcnR5 ICovDQotICAgICAgICBzaF9tYXJrX2RpcnR5KGQsIF9tZm4oZ21mbikpOw0KLX0NCisvKiBzaGFk b3cgY29kZSB0byBjYWxsIHdoZW4gbG9nIGRpcnR5IGlzIGVuYWJsZWQgKi8NCitpbnQgc2hhZG93 X2VuYWJsZV9sb2dfZGlydHkoc3RydWN0IGRvbWFpbiAqZCk7DQorDQorLyogc2hhZG93IGNvZGUg dG8gY2FsbCB3aGVuIGxvZyBkaXJ0eSBpcyBkaXNhYmxlZCAqLw0KK2ludCBzaGFkb3dfZGlzYWJs ZV9sb2dfZGlydHkoc3RydWN0IGRvbWFpbiAqZCk7DQorDQorLyogc2hhZG93IGNvZGUgdG8gY2Fs bCB3aGVuIGJpdG1hcCBpcyBiZWluZyBjbGVhbmVkICovDQordm9pZCBzaGFkb3dfY2xlYW5fZGly dHlfYml0bWFwKHN0cnVjdCBkb21haW4gKmQpOw0KIA0KIC8qIFVwZGF0ZSBhbGwgdGhlIHRoaW5n cyB0aGF0IGFyZSBkZXJpdmVkIGZyb20gdGhlIGd1ZXN0J3MgQ1IwL0NSMy9DUjQuDQogICogQ2Fs bGVkIHRvIGluaXRpYWxpemUgcGFnaW5nIHN0cnVjdHVyZXMgaWYgdGhlIHBhZ2luZyBtb2RlDQo= ------_=_NextPart_001_01C7A9E7.73FE450C Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel ------_=_NextPart_001_01C7A9E7.73FE450C-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Huang2, Wei" Subject: RE: [RFC] Nested Paging Live Migration Date: Fri, 8 Jun 2007 14:26:19 -0500 Message-ID: <7D748C767B7FA541A8AC5504A4C89A23032DDED8@SAUSEXMB2.amd.com> References: <7D748C767B7FA541A8AC5504A4C89A23030EF9B2@SAUSEXMB2.amd.com> <20070601161726.GB16995@york.uk.xensource.com> <46663824.6030200@amd.com> <20070606095446.GA21688@york.uk.xensource.com> <7D748C767B7FA541A8AC5504A4C89A23032DDB14@SAUSEXMB2.amd.com> <20070608105215.GA15027@york.uk.xensource.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C7AA02.E412B394" Return-path: Content-class: urn:content-classes:message In-Reply-To: <20070608105215.GA15027@york.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Tim Deegan Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C7AA02.E412B394 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable This patch creates a common interface for live migration. It also supports nested paging live migration. Signed-off-by: Wei Huang >> @@ -2565,7 +2568,7 @@ void shadow_teardown(struct domain *d) >> if (d->arch.paging.shadow.hash_table) >> shadow_hash_teardown(d); >> /* Release the log-dirty bitmap of dirtied pages */ >> - sh_free_log_dirty_bitmap(d); >> + paging_free_log_dirty_bitmap(d); >=20 > Shouldn't this be handled in paging.c? Otherwise we'd need to > acquire the log-dirty lock with the shadow lock held.=20 >=20 Please ignore my previous patch. Most of time, log dirty will be turned on and off together. Under this assumption, my previous patch only removes paging_free_log_dirty_bitmap() from shadow.c and hap.c. But it does not call paging_free_log_dirty_bitmap() in paging_teardown(). The attached file is same as previous one, expect that it adds a paging_log_dirty_teardown() function to paging.c (see below). Thanks, -Wei =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D diff -r f270fef2fb60 -r 6323c8beb60c xen/arch/x86/mm/paging.c --- a/xen/arch/x86/mm/paging.c Fri Jun 08 05:10:28 2007 -0500 +++ b/xen/arch/x86/mm/paging.c Fri Jun 08 08:05:56 2007 -0500 @@ -305,6 +305,13 @@ void paging_log_dirty_init(struct domain d->arch.paging.log_dirty.clean_dirty_bitmap =3D clean_dirty_bitmap; } =20 +/* This function fress log dirty bitmap resources. */ +void paging_log_dirty_teardown(struct domain*d) +{ + log_dirty_lock(d); + paging_free_log_dirty_bitmap(d); + log_dirty_unlock(d); +} /************************************************/ /* CODE FOR PAGING SUPPORT */ /************************************************/ @@ -390,6 +397,9 @@ int paging_domctl(struct domain *d, xen_ /* Call when destroying a domain */ void paging_teardown(struct domain *d) { + /* clean up log dirty resources. */ + paging_log_dirty_teardown(d); + =20 if ( opt_hap_enabled && is_hvm_domain(d) ) hap_teardown(d); else ------_=_NextPart_001_01C7AA02.E412B394 Content-Type: text/plain; name=live_migration_patch_with_bitmap_free.txt Content-Transfer-Encoding: base64 Content-Description: live_migration_patch_with_bitmap_free.txt Content-Disposition: attachment; filename=live_migration_patch_with_bitmap_free.txt ZGlmZiAtciA0NTUxNmFjOTRjOWYgeGVuL2FyY2gveDg2L2h2bS9odm0uYw0KLS0tIGEveGVuL2Fy Y2gveDg2L2h2bS9odm0uYwlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hl bi9hcmNoL3g4Ni9odm0vaHZtLmMJV2VkIEp1biAwNiAxMjowNTo0MiAyMDA3IC0wNTAwDQpAQCAt NTY4LDcgKzU2OCw3IEBAIHN0YXRpYyBpbnQgX19odm1fY29weSh2b2lkICpidWYsIHBhZGRyX3QN CiAgICAgICAgIGlmICggZGlyICkNCiAgICAgICAgIHsNCiAgICAgICAgICAgICBtZW1jcHkocCwg YnVmLCBjb3VudCk7IC8qIGRpciA9PSBUUlVFOiAgKnRvKiBndWVzdCAqLw0KLSAgICAgICAgICAg IG1hcmtfZGlydHkoY3VycmVudC0+ZG9tYWluLCBtZm4pOw0KKyAgICAgICAgICAgIHBhZ2luZ19t YXJrX2RpcnR5KGN1cnJlbnQtPmRvbWFpbiwgbWZuKTsNCiAgICAgICAgIH0NCiAgICAgICAgIGVs c2UNCiAgICAgICAgICAgICBtZW1jcHkoYnVmLCBwLCBjb3VudCk7IC8qIGRpciA9PSBGQUxTRTog KmZyb20gZ3Vlc3QgKi8NCmRpZmYgLXIgNDU1MTZhYzk0YzlmIHhlbi9hcmNoL3g4Ni9odm0vaW8u Yw0KLS0tIGEveGVuL2FyY2gveDg2L2h2bS9pby5jCVdlZCBKdW4gMDYgMDg6MzI6MzIgMjAwNyAt MDUwMA0KKysrIGIveGVuL2FyY2gveDg2L2h2bS9pby5jCVdlZCBKdW4gMDYgMTI6MDU6NTYgMjAw NyAtMDUwMA0KQEAgLTg2NSw3ICs4NjUsNyBAQCB2b2lkIGh2bV9pb19hc3Npc3Qodm9pZCkNCiAg ICAgaWYgKCAocC0+ZGlyID09IElPUkVRX1JFQUQpICYmIHAtPmRhdGFfaXNfcHRyICkNCiAgICAg ew0KICAgICAgICAgZ21mbiA9IGdldF9tZm5fZnJvbV9ncGZuKHBhZ2luZ19ndmFfdG9fZ2ZuKHYs IHAtPmRhdGEpKTsNCi0gICAgICAgIG1hcmtfZGlydHkoZCwgZ21mbik7DQorICAgICAgICBwYWdp bmdfbWFya19kaXJ0eShkLCBnbWZuKTsNCiAgICAgfQ0KIA0KICBvdXQ6DQpkaWZmIC1yIDQ1NTE2 YWM5NGM5ZiB4ZW4vYXJjaC94ODYvaHZtL3N2bS9zdm0uYw0KLS0tIGEveGVuL2FyY2gveDg2L2h2 bS9zdm0vc3ZtLmMJV2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJj aC94ODYvaHZtL3N2bS9zdm0uYwlUaHUgSnVuIDA3IDA2OjM2OjA0IDIwMDcgLTA1MDANCkBAIC0x MDMzLDggKzEwMzMsOCBAQCBzdGF0aWMgaW50IHN2bV9kb19uZXN0ZWRfcGdmYXVsdChwYWRkcl90 DQogICAgICAgICByZXR1cm4gMTsNCiAgICAgfQ0KIA0KLSAgICAvKiBXZSBzaG91bGQgbm90IHJl YWNoIGhlcmUuIE90aGVyd2lzZSwgUDJNIHRhYmxlIGlzIG5vdCBjb3JyZWN0LiovDQotICAgIHJl dHVybiAwOw0KKyAgICBwYWdpbmdfbWFya19kaXJ0eShjdXJyZW50LT5kb21haW4sIGdldF9tZm5f ZnJvbV9ncGZuKGdwYSA+PiBQQUdFX1NISUZUKSk7DQorICAgIHJldHVybiBwMm1fc2V0X2ZsYWdz KGN1cnJlbnQtPmRvbWFpbiwgZ3BhLCBfX1BBR0VfSFlQRVJWSVNPUnxfUEFHRV9VU0VSKTsNCiB9 DQogDQogc3RhdGljIHZvaWQgc3ZtX2RvX25vX2RldmljZV9mYXVsdChzdHJ1Y3Qgdm1jYl9zdHJ1 Y3QgKnZtY2IpDQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiB4ZW4vYXJjaC94ODYvbW0uYw0KLS0tIGEv eGVuL2FyY2gveDg2L21tLmMJV2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94 ZW4vYXJjaC94ODYvbW0uYwlXZWQgSnVuIDA2IDEyOjA1OjEwIDIwMDcgLTA1MDANCkBAIC0xNTU2 LDcgKzE1NTYsNyBAQCBpbnQgYWxsb2NfcGFnZV90eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhDQog DQogICAgIC8qIEEgcGFnZSB0YWJsZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHR5cGUgY291bnQgYmVj b21lcyBub24temVyby4gKi8NCiAgICAgaWYgKCBsaWtlbHkob3duZXIgIT0gTlVMTCkgKQ0KLSAg ICAgICAgbWFya19kaXJ0eShvd25lciwgcGFnZV90b19tZm4ocGFnZSkpOw0KKyAgICAgICAgcGFn aW5nX21hcmtfZGlydHkob3duZXIsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsNCiANCiAgICAgc3dpdGNo ICggdHlwZSAmIFBHVF90eXBlX21hc2sgKQ0KICAgICB7DQpAQCAtMTYwMiw3ICsxNjAyLDcgQEAg dm9pZCBmcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYQ0KICAgICAgICAgaWYgKCB1 bmxpa2VseShwYWdpbmdfbW9kZV9lbmFibGVkKG93bmVyKSkgKQ0KICAgICAgICAgew0KICAgICAg ICAgICAgIC8qIEEgcGFnZSB0YWJsZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHR5cGUgY291bnQgYmVj b21lcyB6ZXJvLiAqLw0KLSAgICAgICAgICAgIG1hcmtfZGlydHkob3duZXIsIHBhZ2VfdG9fbWZu KHBhZ2UpKTsNCisgICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShvd25lciwgcGFnZV90b19t Zm4ocGFnZSkpOw0KIA0KICAgICAgICAgICAgIGlmICggc2hhZG93X21vZGVfcmVmY291bnRzKG93 bmVyKSApDQogICAgICAgICAgICAgICAgIHJldHVybjsNCkBAIC0yMDU3LDcgKzIwNTcsNyBAQCBp bnQgZG9fbW11ZXh0X29wKA0KICAgICAgICAgICAgIH0NCiANCiAgICAgICAgICAgICAvKiBBIHBh Z2UgaXMgZGlydGllZCB3aGVuIGl0cyBwaW4gc3RhdHVzIGlzIHNldC4gKi8NCi0gICAgICAgICAg ICBtYXJrX2RpcnR5KGQsIG1mbik7DQorICAgICAgICAgICAgcGFnaW5nX21hcmtfZGlydHkoZCwg bWZuKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgIC8qIFdlIGNhbiByYWNlIGRvbWFpbiBk ZXN0cnVjdGlvbiAoZG9tYWluX3JlbGlucXVpc2hfcmVzb3VyY2VzKS4gKi8NCiAgICAgICAgICAg ICBpZiAoIHVubGlrZWx5KHRoaXNfY3B1KHBlcmNwdV9tbV9pbmZvKS5mb3JlaWduICE9IE5VTEwp ICkNCkBAIC0yMDg5LDcgKzIwODksNyBAQCBpbnQgZG9fbW11ZXh0X29wKA0KICAgICAgICAgICAg ICAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdlKTsNCiAgICAgICAgICAgICAgICAgcHV0X3BhZ2Uo cGFnZSk7DQogICAgICAgICAgICAgICAgIC8qIEEgcGFnZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHBp biBzdGF0dXMgaXMgY2xlYXJlZC4gKi8NCi0gICAgICAgICAgICAgICAgbWFya19kaXJ0eShkLCBt Zm4pOw0KKyAgICAgICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShkLCBtZm4pOw0KICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgew0KQEAgLTI0MjQsNyAr MjQyNCw3IEBAIGludCBkb19tbXVfdXBkYXRlKA0KICAgICAgICAgICAgIHNldF9ncGZuX2Zyb21f bWZuKG1mbiwgZ3Bmbik7DQogICAgICAgICAgICAgb2theSA9IDE7DQogDQotICAgICAgICAgICAg bWFya19kaXJ0eShGT1JFSUdORE9NLCBtZm4pOw0KKyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2Rp cnR5KEZPUkVJR05ET00sIG1mbik7DQogDQogICAgICAgICAgICAgcHV0X3BhZ2UobWZuX3RvX3Bh Z2UobWZuKSk7DQogICAgICAgICAgICAgYnJlYWs7DQpAQCAtMzAwNSw3ICszMDA1LDcgQEAgbG9u ZyBkb191cGRhdGVfZGVzY3JpcHRvcih1NjQgcGEsIHU2NCBkZQ0KICAgICAgICAgYnJlYWs7DQog ICAgIH0NCiANCi0gICAgbWFya19kaXJ0eShkb20sIG1mbik7DQorICAgIHBhZ2luZ19tYXJrX2Rp cnR5KGRvbSwgbWZuKTsNCiANCiAgICAgLyogQWxsIGlzIGdvb2Qgc28gbWFrZSB0aGUgdXBkYXRl LiAqLw0KICAgICBnZHRfcGVudCA9IG1hcF9kb21haW5fcGFnZShtZm4pOw0KZGlmZiAtciA0NTUx NmFjOTRjOWYgeGVuL2FyY2gveDg2L21tL2hhcC9oYXAuYw0KLS0tIGEveGVuL2FyY2gveDg2L21t L2hhcC9oYXAuYwlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hlbi9hcmNo L3g4Ni9tbS9oYXAvaGFwLmMJRnJpIEp1biAwOCAwNDo0ODoyNSAyMDA3IC0wNTAwDQpAQCAtNDks NiArNDksNDAgQEANCiAjdW5kZWYgcGFnZV90b19tZm4NCiAjZGVmaW5lIHBhZ2VfdG9fbWZuKF9w ZykgKF9tZm4oKF9wZykgLSBmcmFtZV90YWJsZSkpDQogDQorLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgIEhBUCBMT0cgRElS VFkgU1VQUE9SVCAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovDQorLyogaGFwIGNvZGUgdG8gY2FsbCB3aGVuIGxvZ19kaXJ0 eSBpcyBlbmFibGUuIHJldHVybiAwIGlmIG5vIHByb2JsZW0gZm91bmQuICovDQoraW50IGhhcF9l bmFibGVfbG9nX2RpcnR5KHN0cnVjdCBkb21haW4gKmQpDQorew0KKyAgICBoYXBfbG9jayhkKTsN CisgICAgLyogdHVybiBvbiBQR19sb2dfZGlydHkgYml0IGluIHBhZ2luZyBtb2RlICovDQorICAg IGQtPmFyY2gucGFnaW5nLm1vZGUgfD0gUEdfbG9nX2RpcnR5Ow0KKyAgICAvKiBzZXQgbDFlIGVu dHJpZXMgb2YgUDJNIHRhYmxlIHRvIE5PVF9XUklUQUJMRS4gKi8NCisgICAgcDJtX3NldF9mbGFn c19nbG9iYWwoZCwgKF9QQUdFX1BSRVNFTlR8X1BBR0VfVVNFUikpOw0KKyAgICBmbHVzaF90bGJf YWxsX3BnZSgpOw0KKyAgICBoYXBfdW5sb2NrKGQpOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQor DQoraW50IGhhcF9kaXNhYmxlX2xvZ19kaXJ0eShzdHJ1Y3QgZG9tYWluICpkKQ0KK3sNCisgICAg aGFwX2xvY2soZCk7DQorICAgIGQtPmFyY2gucGFnaW5nLm1vZGUgJj0gflBHX2xvZ19kaXJ0eTsN CisgICAgLyogc2V0IGwxZSBlbnRyaWVzIG9mIFAyTSB0YWJsZSB3aXRoIG5vcm1hbCBtb2RlICov DQorICAgIHAybV9zZXRfZmxhZ3NfZ2xvYmFsKGQsIF9fUEFHRV9IWVBFUlZJU09SfF9QQUdFX1VT RVIpOw0KKyAgICBoYXBfdW5sb2NrKGQpOw0KKyAgICANCisgICAgcmV0dXJuIDE7DQorfQ0KKw0K K3ZvaWQgaGFwX2NsZWFuX2RpcnR5X2JpdG1hcChzdHJ1Y3QgZG9tYWluICpkKQ0KK3sNCisgICAg LyogbWFyayBwaHlzaWNhbCBtZW1vcnkgYXMgTk9UX1dSSVRFQUJMRSBhbmQgZmx1c2ggdGhlIFRM QiAqLw0KKyAgICBwMm1fc2V0X2ZsYWdzX2dsb2JhbChkLCAoX1BBR0VfUFJFU0VOVHxfUEFHRV9V U0VSKSk7DQorICAgIGZsdXNoX3RsYl9hbGxfcGdlKCk7DQorfQ0KIC8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogLyogICAgICAgICAgICAgSEFQIFNV UFBPUlQgRlVOQ1RJT05TICAgICAgICAgICAgKi8NCiAvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLw0KQEAgLTQyMSw2ICs0NTUsMTAgQEAgaW50IGhhcF9l bmFibGUoc3RydWN0IGRvbWFpbiAqZCwgdTMyIG1vZA0KICAgICAgICAgfQ0KICAgICB9DQogDQor ICAgIC8qIGluaXRpYWxpemUgbG9nIGRpcnR5IGhlcmUgKi8NCisgICAgcGFnaW5nX2xvZ19kaXJ0 eV9pbml0KGQsIGhhcF9lbmFibGVfbG9nX2RpcnR5LCBoYXBfZGlzYWJsZV9sb2dfZGlydHksDQor ICAgICAgICAgICAgICAgICAgICAgICAgICBoYXBfY2xlYW5fZGlydHlfYml0bWFwKTsNCisNCiAg ICAgLyogYWxsb2NhdGUgUDJtIHRhYmxlICovDQogICAgIGlmICggbW9kZSAmIFBHX3RyYW5zbGF0 ZSApIHsNCiAgICAgICAgIHJ2ID0gcDJtX2FsbG9jX3RhYmxlKGQsIGhhcF9hbGxvY19wMm1fcGFn ZSwgaGFwX2ZyZWVfcDJtX3BhZ2UpOw0KQEAgLTQ5OCwxMSArNTM2LDYgQEAgaW50IGhhcF9kb21j dGwoc3RydWN0IGRvbWFpbiAqZCwgeGVuX2RvbQ0KIA0KICAgICBIRVJFX0lfQU07DQogDQotICAg IGlmICggdW5saWtlbHkoZCA9PSBjdXJyZW50LT5kb21haW4pICkgew0KLSAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX0lORk8sICJEb24ndCB0cnkgdG8gZG8gYSBoYXAgb3Agb24geW91cnNlbGYhXG4i KTsNCi0gICAgICAgIHJldHVybiAtRUlOVkFMOw0KLSAgICB9DQotICAgIA0KICAgICBzd2l0Y2gg KCBzYy0+b3AgKSB7DQogICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfU0VUX0FMTE9DQVRJ T046DQogICAgICAgICBoYXBfbG9jayhkKTsNCkBAIC02NjksNyArNzAyLDE2IEBAIGhhcF93cml0 ZV9wMm1fZW50cnkoc3RydWN0IHZjcHUgKnYsIHVuc2kNCiBoYXBfd3JpdGVfcDJtX2VudHJ5KHN0 cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIGdmbiwgbDFfcGdlbnRyeV90ICpwLA0KICAgICAg ICAgICAgICAgICAgICAgbDFfcGdlbnRyeV90IG5ldywgdW5zaWduZWQgaW50IGxldmVsKQ0KIHsN Ci0gICAgaGFwX2xvY2sodi0+ZG9tYWluKTsNCisgICAgaW50IGRvX2xvY2tpbmc7DQorDQorICAg IC8qIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBmcm9tIHR3byBkaXJlY3Rpb25zIChQMk0g YW5kIGxvZyBkaXJ0eSkuIFdlDQorICAgICAqICBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGxvY2sg aGFzIGJlZW4gaGVsZCBvciBub3QuDQorICAgICAqLw0KKyAgICBkb19sb2NraW5nID0gIWhhcF9s b2NrZWRfYnlfbWUodi0+ZG9tYWluKTsNCisNCisgICAgaWYgKCBkb19sb2NraW5nICkNCisgICAg ICAgIGhhcF9sb2NrKHYtPmRvbWFpbik7DQorDQogICAgIHNhZmVfd3JpdGVfcHRlKHAsIG5ldyk7 DQogI2lmIENPTkZJR19QQUdJTkdfTEVWRUxTID09IDMNCiAgICAgLyogaW5zdGFsbCBQMk0gaW4g bW9uaXRvciB0YWJsZSBmb3IgUEFFIFhlbiAqLw0KQEAgLTY4MCw3ICs3MjIsOSBAQCBoYXBfd3Jp dGVfcDJtX2VudHJ5KHN0cnVjdCB2Y3B1ICp2LCB1bnNpDQogCQ0KICAgICB9DQogI2VuZGlmDQot ICAgIGhhcF91bmxvY2sodi0+ZG9tYWluKTsNCisgICAgDQorICAgIGlmICggZG9fbG9ja2luZyAp DQorICAgICAgICBoYXBfdW5sb2NrKHYtPmRvbWFpbik7DQogfQ0KIA0KIC8qIEVudHJ5IHBvaW50 cyBpbnRvIHRoaXMgbW9kZSBvZiB0aGUgaGFwIGNvZGUuICovDQpkaWZmIC1yIDQ1NTE2YWM5NGM5 ZiB4ZW4vYXJjaC94ODYvbW0vcDJtLmMNCi0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9wMm0uYwlXZWQg SnVuIDA2IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS9wMm0uYwlU aHUgSnVuIDA3IDA1OjU3OjA5IDIwMDcgLTA1MDANCkBAIC0xNjksNyArMTY5LDcgQEAgcDJtX25l eHRfbGV2ZWwoc3RydWN0IGRvbWFpbiAqZCwgbWZuX3QgKg0KIA0KIC8vIFJldHVybnMgMCBvbiBl cnJvciAob3V0IG9mIG1lbW9yeSkNCiBzdGF0aWMgaW50DQotc2V0X3AybV9lbnRyeShzdHJ1Y3Qg ZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGdmbiwgbWZuX3QgbWZuKQ0KK3NldF9wMm1fZW50cnko c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4sIG1mbl90IG1mbiwgdTMyIGwxZV9m bGFncykNCiB7DQogICAgIC8vIFhYWCAtLSB0aGlzIG1pZ2h0IGJlIGFibGUgdG8gYmUgZmFzdGVy IGlmZiBjdXJyZW50LT5kb21haW4gPT0gZA0KICAgICBtZm5fdCB0YWJsZV9tZm4gPSBwYWdldGFi bGVfZ2V0X21mbihkLT5hcmNoLnBoeXNfdGFibGUpOw0KQEAgLTIxMyw3ICsyMTMsNyBAQCBzZXRf cDJtX2VudHJ5KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkDQogICAgICAgICBkLT5hcmNoLnAy bS5tYXhfbWFwcGVkX3BmbiA9IGdmbjsNCiANCiAgICAgaWYgKCBtZm5fdmFsaWQobWZuKSApDQot ICAgICAgICBlbnRyeV9jb250ZW50ID0gbDFlX2Zyb21fcGZuKG1mbl94KG1mbiksIF9fUEFHRV9I WVBFUlZJU09SfF9QQUdFX1VTRVIpOw0KKyAgICAgICAgZW50cnlfY29udGVudCA9IGwxZV9mcm9t X3BmbihtZm5feChtZm4pLCBsMWVfZmxhZ3MpOw0KICAgICBlbHNlDQogICAgICAgICBlbnRyeV9j b250ZW50ID0gbDFlX2VtcHR5KCk7DQogDQpAQCAtMjc4LDcgKzI3OCw3IEBAIGludCBwMm1fYWxs b2NfdGFibGUoc3RydWN0IGRvbWFpbiAqZCwNCiAgICAgICAgIHAybV91bmxvY2soZCk7DQogICAg ICAgICByZXR1cm4gLUVOT01FTTsNCiAgICAgfQ0KLWxpc3RfYWRkX3RhaWwoJnAybV90b3AtPmxp c3QsICZkLT5hcmNoLnAybS5wYWdlcyk7DQorICAgIGxpc3RfYWRkX3RhaWwoJnAybV90b3AtPmxp c3QsICZkLT5hcmNoLnAybS5wYWdlcyk7DQogDQogICAgIHAybV90b3AtPmNvdW50X2luZm8gPSAx Ow0KICAgICBwMm1fdG9wLT51LmludXNlLnR5cGVfaW5mbyA9IA0KQEAgLTI5Nyw4ICsyOTcsOCBA QCBsaXN0X2FkZF90YWlsKCZwMm1fdG9wLT5saXN0LCAmZC0+YXJjaC5wDQogIA0KICAgICAvKiBJ bml0aWFsaXNlIHBoeXNtYXAgdGFibGVzIGZvciBzbG90IHplcm8uIE90aGVyIGNvZGUgYXNzdW1l cyB0aGlzLiAqLw0KICAgICBnZm4gPSAwOw0KLW1mbiA9IF9tZm4oSU5WQUxJRF9NRk4pOw0KLSAg ICBpZiAoICFzZXRfcDJtX2VudHJ5KGQsIGdmbiwgbWZuKSApDQorICAgIG1mbiA9IF9tZm4oSU5W QUxJRF9NRk4pOw0KKyAgICBpZiAoICFzZXRfcDJtX2VudHJ5KGQsIGdmbiwgbWZuLCBfX1BBR0Vf SFlQRVJWSVNPUnxfUEFHRV9VU0VSKSApDQogICAgICAgICBnb3RvIGVycm9yOw0KIA0KICAgICBm b3IgKCBlbnRyeSA9IGQtPnBhZ2VfbGlzdC5uZXh0Ow0KQEAgLTMxNiw3ICszMTYsNyBAQCBtZm4g PSBfbWZuKElOVkFMSURfTUZOKTsNCiAgICAgICAgICAgICAoZ2ZuICE9IDB4NTU1NTU1NTVMKQ0K ICNlbmRpZg0KICAgICAgICAgICAgICAmJiBnZm4gIT0gSU5WQUxJRF9NMlBfRU5UUlkNCi0gICAg ICAgICAgICAgJiYgIXNldF9wMm1fZW50cnkoZCwgZ2ZuLCBtZm4pICkNCisgICAgICAgICAgICAg JiYgIXNldF9wMm1fZW50cnkoZCwgZ2ZuLCBtZm4sIF9fUEFHRV9IWVBFUlZJU09SfF9QQUdFX1VT RVIpICkNCiAgICAgICAgICAgICBnb3RvIGVycm9yOw0KICAgICB9DQogDQpAQCAtNDk3LDcgKzQ5 Nyw3IEBAIHN0YXRpYyB2b2lkIGF1ZGl0X3AybShzdHJ1Y3QgZG9tYWluICpkKQ0KICAgICAgICAg ICAgIC8qIFRoaXMgbTJwIGVudHJ5IGlzIHN0YWxlOiB0aGUgZG9tYWluIGhhcyBhbm90aGVyIGZy YW1lIGluDQogICAgICAgICAgICAgICogdGhpcyBwaHlzaWNhbCBzbG90LiAgTm8gZ3JlYXQgZGlz YXN0ZXIsIGJ1dCBmb3IgbmVhdG5lc3MsDQogICAgICAgICAgICAgICogYmxvdyBhd2F5IHRoZSBt MnAgZW50cnkuICovIA0KLSAgICAgICAgICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbiwgSU5WQUxJ RF9NMlBfRU5UUlkpOw0KKyAgICAgICAgICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbiwgSU5WQUxJ RF9NMlBfRU5UUlksIF9fUEFHRV9IWVBFUlZJU09SfF9QQUdFX1VTRVIpOw0KICAgICAgICAgfQ0K IA0KICAgICAgICAgaWYgKCB0ZXN0X2xpbmVhciAmJiAoZ2ZuIDw9IGQtPmFyY2gucDJtLm1heF9t YXBwZWRfcGZuKSApDQpAQCAtNjI2LDcgKzYyNiw3IEBAIHAybV9yZW1vdmVfcGFnZShzdHJ1Y3Qg ZG9tYWluICpkLCB1bnNpZ24NCiAgICAgQVNTRVJUKG1mbl94KGdmbl90b19tZm4oZCwgZ2ZuKSkg PT0gbWZuKTsNCiAgICAgLy9BU1NFUlQobWZuX3RvX2dmbihkLCBtZm4pID09IGdmbik7DQogDQot ICAgIHNldF9wMm1fZW50cnkoZCwgZ2ZuLCBfbWZuKElOVkFMSURfTUZOKSk7DQorICAgIHNldF9w Mm1fZW50cnkoZCwgZ2ZuLCBfbWZuKElOVkFMSURfTUZOKSwgX19QQUdFX0hZUEVSVklTT1J8X1BB R0VfVVNFUik7DQogICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbiwgSU5WQUxJRF9NMlBfRU5UUlkp Ow0KIH0NCiANCkBAIC02NTksNyArNjU5LDcgQEAgZ3Vlc3RfcGh5c21hcF9hZGRfcGFnZShzdHJ1 Y3QgZG9tYWluICpkLA0KICAgICBvbWZuID0gZ2ZuX3RvX21mbihkLCBnZm4pOw0KICAgICBpZiAo IG1mbl92YWxpZChvbWZuKSApDQogICAgIHsNCi0gICAgICAgIHNldF9wMm1fZW50cnkoZCwgZ2Zu LCBfbWZuKElOVkFMSURfTUZOKSk7DQorICAgICAgICBzZXRfcDJtX2VudHJ5KGQsIGdmbiwgX21m bihJTlZBTElEX01GTiksIF9fUEFHRV9IWVBFUlZJU09SfF9QQUdFX1VTRVIpOw0KICAgICAgICAg c2V0X2dwZm5fZnJvbV9tZm4obWZuX3gob21mbiksIElOVkFMSURfTTJQX0VOVFJZKTsNCiAgICAg fQ0KIA0KQEAgLTY4NSwxMyArNjg1LDEyOSBAQCBndWVzdF9waHlzbWFwX2FkZF9wYWdlKHN0cnVj dCBkb21haW4gKmQsDQogICAgICAgICB9DQogICAgIH0NCiANCi0gICAgc2V0X3AybV9lbnRyeShk LCBnZm4sIF9tZm4obWZuKSk7DQorICAgIHNldF9wMm1fZW50cnkoZCwgZ2ZuLCBfbWZuKG1mbiks IF9fUEFHRV9IWVBFUlZJU09SfF9QQUdFX1VTRVIpOw0KICAgICBzZXRfZ3Bmbl9mcm9tX21mbiht Zm4sIGdmbik7DQogDQogICAgIGF1ZGl0X3AybShkKTsNCiAgICAgcDJtX3VubG9jayhkKTsNCiB9 DQogDQorLyogVGhpcyBmdW5jdGlvbiBnb2VzIHRocm91Z2ggUDJNIHRhYmxlIGFuZCBtb2RpZnkg bDFlIGZsYWdzIG9mIGFsbCBwYWdlcy4gTm90ZQ0KKyAqIHRoYXQgcGh5c2ljYWwgYmFzZSBhZGRy ZXNzIG9mIGwxZSBpcyBpbnRhY3QuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZm9yDQorICog c3BlY2lhbCBwdXJwb3NlLCBzdWNoIGFzIG1hcmtpbmcgcGh5c2ljYWwgbWVtb3J5IGFzIE5PVCBX UklUQUJMRSBmb3INCisgKiB0cmFja2luZyBkaXJ0eSBwYWdlcyBkdXJpbmcgbGl2ZSBtaWdyYXRp b24uDQorICovDQordm9pZCBwMm1fc2V0X2ZsYWdzX2dsb2JhbChzdHJ1Y3QgZG9tYWluICpkLCB1 MzIgbDFlX2ZsYWdzKQ0KK3sNCisgICAgdW5zaWduZWQgbG9uZyBtZm4sIGdmbjsNCisgICAgbDFf cGdlbnRyeV90IGwxZV9jb250ZW50Ow0KKyAgICBsMV9wZ2VudHJ5X3QgKmwxZTsNCisgICAgbDJf cGdlbnRyeV90ICpsMmU7DQorICAgIGludCBpMSwgaTI7DQorI2lmIENPTkZJR19QQUdJTkdfTEVW RUxTID49IDMNCisgICAgbDNfcGdlbnRyeV90ICpsM2U7DQorICAgIGludCBpMzsNCisjaWYgQ09O RklHX1BBR0lOR19MRVZFTFMgPT0gNA0KKyAgICBsNF9wZ2VudHJ5X3QgKmw0ZTsNCisgICAgaW50 IGk0Ow0KKyNlbmRpZiAvKiBDT05GSUdfUEFHSU5HX0xFVkVMUyA9PSA0ICovDQorI2VuZGlmIC8q IENPTkZJR19QQUdJTkdfTEVWRUxTID49IDMgKi8NCisgICAgDQorICAgIGlmICggIXBhZ2luZ19t b2RlX3RyYW5zbGF0ZShkKSApDQorICAgICAgICByZXR1cm47DQorIA0KKyAgICBpZiAoIHBhZ2V0 YWJsZV9nZXRfcGZuKGQtPmFyY2gucGh5c190YWJsZSkgPT0gMCApDQorICAgICAgICByZXR1cm47 DQorDQorICAgIHAybV9sb2NrKGQpOw0KKyAgICAgICAgDQorI2lmIENPTkZJR19QQUdJTkdfTEVW RUxTID09IDQNCisgICAgbDRlID0gbWFwX2RvbWFpbl9wYWdlKG1mbl94KHBhZ2V0YWJsZV9nZXRf bWZuKGQtPmFyY2gucGh5c190YWJsZSkpKTsNCisjZWxpZiBDT05GSUdfUEFHSU5HX0xFVkVMUyA9 PSAzDQorICAgIGwzZSA9IG1hcF9kb21haW5fcGFnZShtZm5feChwYWdldGFibGVfZ2V0X21mbihk LT5hcmNoLnBoeXNfdGFibGUpKSk7DQorI2Vsc2UgLyogQ09ORklHX1BBR0lOR19MRVZFTFMgPT0g MiAqLw0KKyAgICBsMmUgPSBtYXBfZG9tYWluX3BhZ2UobWZuX3gocGFnZXRhYmxlX2dldF9tZm4o ZC0+YXJjaC5waHlzX3RhYmxlKSkpOw0KKyNlbmRpZg0KKw0KKyNpZiBDT05GSUdfUEFHSU5HX0xF VkVMUyA+PSAzDQorI2lmIENPTkZJR19QQUdJTkdfTEVWRUxTID49IDQNCisgICAgZm9yICggaTQg PSAwOyBpNCA8IEw0X1BBR0VUQUJMRV9FTlRSSUVTOyBpNCsrICkgDQorICAgIHsNCisJaWYgKCAh KGw0ZV9nZXRfZmxhZ3MobDRlW2k0XSkgJiBfUEFHRV9QUkVTRU5UKSApDQorCXsNCisJICAgIGNv bnRpbnVlOw0KKwl9DQorCWwzZSA9IG1hcF9kb21haW5fcGFnZShtZm5feChfbWZuKGw0ZV9nZXRf cGZuKGw0ZVtpNF0pKSkpOw0KKyNlbmRpZiAvKiBub3cgYXQgbGV2ZWxzIDMgb3IgNC4uLiAqLw0K Kwlmb3IgKCBpMyA9IDA7IA0KKwkgICAgICBpMyA8ICgoQ09ORklHX1BBR0lOR19MRVZFTFM9PTQp ID8gTDNfUEFHRVRBQkxFX0VOVFJJRVMgOiA4KTsgDQorCSAgICAgIGkzKysgKQ0KKwl7DQorCSAg ICBpZiAoICEobDNlX2dldF9mbGFncyhsM2VbaTNdKSAmIF9QQUdFX1BSRVNFTlQpICkNCisJICAg IHsNCisJCWNvbnRpbnVlOw0KKwkgICAgfQ0KKwkgICAgbDJlID0gbWFwX2RvbWFpbl9wYWdlKG1m bl94KF9tZm4obDNlX2dldF9wZm4obDNlW2kzXSkpKSk7DQorI2VuZGlmIC8qIGFsbCBsZXZlbHMu Li4gKi8NCisJICAgIGZvciAoIGkyID0gMDsgaTIgPCBMMl9QQUdFVEFCTEVfRU5UUklFUzsgaTIr KyApDQorCSAgICB7DQorCQlpZiAoICEobDJlX2dldF9mbGFncyhsMmVbaTJdKSAmIF9QQUdFX1BS RVNFTlQpICkNCisJCXsNCisJCSAgICBjb250aW51ZTsNCisJCX0NCisJCWwxZSA9IG1hcF9kb21h aW5fcGFnZShtZm5feChfbWZuKGwyZV9nZXRfcGZuKGwyZVtpMl0pKSkpOw0KKwkJDQorCQlmb3Ig KCBpMSA9IDA7IGkxIDwgTDFfUEFHRVRBQkxFX0VOVFJJRVM7IGkxKyssIGdmbisrICkNCisJCXsN CisJCSAgICBpZiAoICEobDFlX2dldF9mbGFncyhsMWVbaTFdKSAmIF9QQUdFX1BSRVNFTlQpICkN CisJCQljb250aW51ZTsNCisJCSAgICBtZm4gPSBsMWVfZ2V0X3BmbihsMWVbaTFdKTsNCisJCSAg ICBnZm4gPSBnZXRfZ3Bmbl9mcm9tX21mbihtZm4pOw0KKwkJICAgIC8qIGNyZWF0ZSBhIG5ldyAx bGUgZW50cnkgdXNpbmcgbDFlX2ZsYWdzICovDQorCQkgICAgbDFlX2NvbnRlbnQgPSBsMWVfZnJv bV9wZm4obWZuLCBsMWVfZmxhZ3MpOw0KKwkJICAgIHBhZ2luZ193cml0ZV9wMm1fZW50cnkoZCwg Z2ZuLCAmbDFlW2kxXSwgbDFlX2NvbnRlbnQsIDEpOw0KKwkJfQ0KKwkJdW5tYXBfZG9tYWluX3Bh Z2UobDFlKTsNCisJICAgIH0NCisjaWYgQ09ORklHX1BBR0lOR19MRVZFTFMgPj0gMw0KKwkgICAg dW5tYXBfZG9tYWluX3BhZ2UobDJlKTsNCisJfQ0KKyNpZiBDT05GSUdfUEFHSU5HX0xFVkVMUyA+ PSA0DQorCXVubWFwX2RvbWFpbl9wYWdlKGwzZSk7DQorICAgIH0NCisjZW5kaWYNCisjZW5kaWYN CisNCisjaWYgQ09ORklHX1BBR0lOR19MRVZFTFMgPT0gNA0KKyAgICB1bm1hcF9kb21haW5fcGFn ZShsNGUpOw0KKyNlbGlmIENPTkZJR19QQUdJTkdfTEVWRUxTID09IDMNCisgICAgdW5tYXBfZG9t YWluX3BhZ2UobDNlKTsNCisjZWxzZSAvKiBDT05GSUdfUEFHSU5HX0xFVkVMUyA9PSAyICovDQor ICAgIHVubWFwX2RvbWFpbl9wYWdlKGwyZSk7DQorI2VuZGlmDQorDQorICAgIHAybV91bmxvY2so ZCk7DQorfQ0KKw0KKy8qIFRoaXMgZnVuY3Rpb24gdHJhY2VzIHRocm91Z2ggUDJNIHRhYmxlIGFu ZCBtb2RpZmllcyBsMWUgZmxhZ3Mgb2YgYSBzcGVjaWZpYw0KKyAqIGdwYS4NCisgKi8NCitpbnQg cDJtX3NldF9mbGFncyhzdHJ1Y3QgZG9tYWluICpkLCBwYWRkcl90IGdwYSwgdTMyIGwxZV9mbGFn cykNCit7DQorICAgIHVuc2lnbmVkIGxvbmcgZ2ZuOw0KKyAgICBtZm5fdCBtZm47DQorDQorICAg IHAybV9sb2NrKGQpOw0KKw0KKyAgICBnZm4gPSBncGEgPj4gUEFHRV9TSElGVDsNCisgICAgbWZu ID0gZ2ZuX3RvX21mbihkLCBnZm4pOw0KKyAgICBpZiAoIG1mbl92YWxpZChtZm4pICkNCisgICAg ICAgIHNldF9wMm1fZW50cnkoZCwgZ2ZuLCBtZm4sIGwxZV9mbGFncyk7DQorICAgIA0KKyAgICBw Mm1fdW5sb2NrKGQpOw0KKw0KKyAgICByZXR1cm4gMTsNCit9DQogDQogLyoNCiAgKiBMb2NhbCB2 YXJpYWJsZXM6DQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiB4ZW4vYXJjaC94ODYvbW0vcGFnaW5nLmMN Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9wYWdpbmcuYwlXZWQgSnVuIDA2IDA4OjMyOjMyIDIwMDcg LTA1MDANCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS9wYWdpbmcuYwlGcmkgSnVuIDA4IDA1OjU3OjEx IDIwMDcgLTA1MDANCkBAIC0yNSw2ICsyNSw3IEBADQogI2luY2x1ZGUgPGFzbS9zaGFkb3cuaD4N CiAjaW5jbHVkZSA8YXNtL3AybS5oPg0KICNpbmNsdWRlIDxhc20vaGFwLmg+DQorI2luY2x1ZGUg PGFzbS9ndWVzdF9hY2Nlc3MuaD4NCiANCiAvKiBYZW4gY29tbWFuZC1saW5lIG9wdGlvbiB0byBl bmFibGUgaGFyZHdhcmUtYXNzaXN0ZWQgcGFnaW5nICovDQogaW50IG9wdF9oYXBfZW5hYmxlZDsN CkBAIC00MSw3ICs0MiwyNzkgQEAgYm9vbGVhbl9wYXJhbSgiaGFwIiwgb3B0X2hhcF9lbmFibGVk KTsNCiAgICAgICAgICAgICBkZWJ1Z3RyYWNlX3ByaW50aygicGdkZWJ1ZzogJXMoKTogIiBfZiwg X19mdW5jX18sICMjX2EpOyBcDQogICAgIH0gd2hpbGUgKDApDQogDQotDQorLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgICAg TE9HIERJUlRZIFNVUFBPUlQgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogT3ZlcnJpZGUgbWFjcm9zIGZyb20g YXNtL3BhZ2UuaCB0byBtYWtlIHRoZW0gd29yayB3aXRoIG1mbl90ICovDQorI3VuZGVmIG1mbl90 b19wYWdlDQorI2RlZmluZSBtZm5fdG9fcGFnZShfbSkgKGZyYW1lX3RhYmxlICsgbWZuX3goX20p KQ0KKyN1bmRlZiBtZm5fdmFsaWQNCisjZGVmaW5lIG1mbl92YWxpZChfbWZuKSAobWZuX3goX21m bikgPCBtYXhfcGFnZSkNCisjdW5kZWYgcGFnZV90b19tZm4NCisjZGVmaW5lIHBhZ2VfdG9fbWZu KF9wZykgKF9tZm4oKF9wZykgLSBmcmFtZV90YWJsZSkpDQorDQorI2RlZmluZSBsb2dfZGlydHlf bG9ja19pbml0KF9kKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICBk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwNCisgICAgICAgIHNwaW5fbG9ja19pbml0KCYoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGly dHkubG9jayk7ICAgICAgICBcDQorICAgICAgICAoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGlydHku bG9ja2VyID0gLTE7ICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgKF9kKS0+YXJjaC5wYWdp bmcubG9nX2RpcnR5LmxvY2tlcl9mdW5jdGlvbiA9ICJub2JvZHkiOyAgIFwNCisgICAgfSB3aGls ZSAoMCkNCisNCisjZGVmaW5lIGxvZ19kaXJ0eV9sb2NrKF9kKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgZG8geyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwN CisgICAgICAgIGlmICh1bmxpa2VseSgoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkubG9ja2Vy PT1jdXJyZW50LT5wcm9jZXNzb3IpKVwNCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAg ICAgICBwcmludGsoIkVycm9yOiBwYWdpbmcgbG9nIGRpcnR5IGxvY2sgaGVsZCBieSAlc1xuIiwg ICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgKF9kKS0+YXJjaC5wYWdpbmcubG9n X2RpcnR5LmxvY2tlcl9mdW5jdGlvbik7ICAgICAgICAgICAgIFwNCisgICAgICAgICAgICBCVUco KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwNCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgIHNwaW5fbG9jaygmKF9kKS0+ YXJjaC5wYWdpbmcubG9nX2RpcnR5LmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgIFwNCisg ICAgICAgIEFTU0VSVCgoX2QpLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkubG9ja2VyID09IC0xKTsg ICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgIChfZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0 eS5sb2NrZXIgPSBjdXJyZW50LT5wcm9jZXNzb3I7ICAgICAgICAgICAgIFwNCisgICAgICAgIChf ZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5sb2NrZXJfZnVuY3Rpb24gPSBfX2Z1bmNfXzsgICAg ICAgICAgICAgIFwNCisgICAgfSB3aGlsZSAoMCkNCisNCisjZGVmaW5lIGxvZ19kaXJ0eV91bmxv Y2soX2QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisg ICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCisgICAgICAgIEFTU0VSVCgoX2QpLT5hcmNoLnBhZ2luZy5sb2df ZGlydHkubG9ja2VyID09IGN1cnJlbnQtPnByb2Nlc3Nvcik7IFwNCisgICAgICAgIChfZCktPmFy Y2gucGFnaW5nLmxvZ19kaXJ0eS5sb2NrZXIgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAg IFwNCisgICAgICAgIChfZCktPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5sb2NrZXJfZnVuY3Rpb24g PSAibm9ib2R5IjsgICAgICAgICAgIFwNCisgICAgICAgIHNwaW5fdW5sb2NrKCYoX2QpLT5hcmNo LnBhZ2luZy5sb2dfZGlydHkubG9jayk7ICAgICAgICAgICAgICAgICAgIFwNCisgICAgfSB3aGls ZSAoMCkNCisNCisvKiBhbGxvY2F0ZSBiaXRtYXAgcmVzb3VyY2VzIGZvciBsb2cgZGlydHkgKi8N CitpbnQgcGFnaW5nX2FsbG9jX2xvZ19kaXJ0eV9iaXRtYXAoc3RydWN0IGRvbWFpbiAqZCkNCit7 DQorICAgIEFTU0VSVChkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwID09IE5VTEwpOw0K KyAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwX3NpemUgPQ0KKyAgICAgICAgKGRv bWFpbl9nZXRfbWF4aW11bV9ncGZuKGQpICsgQklUU19QRVJfTE9ORykgJiB+KEJJVFNfUEVSX0xP TkcgLSAxKTsNCisgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcCA9IA0KKyAgICAg ICAgeG1hbGxvY19hcnJheSh1bnNpZ25lZCBsb25nLA0KKyAgICAgICAgICAgICAgICAgICAgICBk LT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwX3NpemUgLyBCSVRTX1BFUl9MT05HKTsNCisg ICAgaWYgKCBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwID09IE5VTEwgKQ0KKyAgICB7 DQorICAgICAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwX3NpemUgPSAwOw0KKyAg ICAgICAgcmV0dXJuIC1FTk9NRU07DQorICAgIH0NCisgICAgbWVtc2V0KGQtPmFyY2gucGFnaW5n LmxvZ19kaXJ0eS5iaXRtYXAsIDAsDQorICAgICAgICAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGly dHkuYml0bWFwX3NpemUvOCk7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKiBmcmVlIGJp dG1hcCByZXNvdXJjZXMgKi8NCit2b2lkIHBhZ2luZ19mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoc3Ry dWN0IGRvbWFpbiAqZCkNCit7DQorICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXBf c2l6ZSA9IDA7DQorICAgIGlmICggZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcCApDQor ICAgIHsNCisgICAgICAgIHhmcmVlKGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXApOw0K KyAgICAgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcCA9IE5VTEw7DQorICAgIH0N Cit9DQorDQoraW50IHBhZ2luZ19sb2dfZGlydHlfZW5hYmxlKHN0cnVjdCBkb21haW4gKmQpDQor ew0KKyAgICBpbnQgcmV0Ow0KKw0KKyAgICBkb21haW5fcGF1c2UoZCk7DQorICAgIGxvZ19kaXJ0 eV9sb2NrKGQpOw0KKw0KKyAgICBpZiAoIHBhZ2luZ19tb2RlX2xvZ19kaXJ0eShkKSApDQorICAg IHsNCisgICAgICAgIHJldCA9IC1FSU5WQUw7DQorICAgICAgICBnb3RvIG91dDsNCisgICAgfQ0K Kw0KKyAgICByZXQgPSBwYWdpbmdfYWxsb2NfbG9nX2RpcnR5X2JpdG1hcChkKTsNCisgICAgaWYg KCByZXQgIT0gMCApDQorICAgIHsNCisgICAgICAgIHBhZ2luZ19mcmVlX2xvZ19kaXJ0eV9iaXRt YXAoZCk7DQorICAgICAgICBnb3RvIG91dDsNCisgICAgfQ0KKw0KKyAgICByZXQgPSBkLT5hcmNo LnBhZ2luZy5sb2dfZGlydHkuZW5hYmxlX2xvZ19kaXJ0eShkKTsNCisgICAgaWYgKCByZXQgIT0g MCApDQorICAgICAgICBwYWdpbmdfZnJlZV9sb2dfZGlydHlfYml0bWFwKGQpOw0KKw0KKyBvdXQ6 DQorICAgIGxvZ19kaXJ0eV91bmxvY2soZCk7DQorICAgIGRvbWFpbl91bnBhdXNlKGQpOw0KKyAg ICByZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgcGFnaW5nX2xvZ19kaXJ0eV9kaXNhYmxlKHN0cnVj dCBkb21haW4gKmQpDQorew0KKyAgICBpbnQgcmV0Ow0KKw0KKyAgICBkb21haW5fcGF1c2UoZCk7 DQorICAgIGxvZ19kaXJ0eV9sb2NrKGQpOw0KKyAgICByZXQgPSBkLT5hcmNoLnBhZ2luZy5sb2df ZGlydHkuZGlzYWJsZV9sb2dfZGlydHkoZCk7DQorICAgIGlmICggIXBhZ2luZ19tb2RlX2xvZ19k aXJ0eShkKSApDQorICAgICAgICBwYWdpbmdfZnJlZV9sb2dfZGlydHlfYml0bWFwKGQpOw0KKyAg ICBsb2dfZGlydHlfdW5sb2NrKGQpOw0KKyAgICBkb21haW5fdW5wYXVzZShkKTsNCisNCisgICAg cmV0dXJuIHJldDsNCit9DQorDQorLyogTWFyayBhIHBhZ2UgYXMgZGlydHkgKi8NCit2b2lkIHBh Z2luZ19tYXJrX2RpcnR5KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ3Vlc3RfbWZu KQ0KK3sNCisgICAgdW5zaWduZWQgbG9uZyBwZm47DQorICAgIG1mbl90IGdtZm47DQorDQorICAg IGdtZm4gPSBfbWZuKGd1ZXN0X21mbik7DQorDQorICAgIGlmICggIXBhZ2luZ19tb2RlX2xvZ19k aXJ0eShkKSB8fCAhbWZuX3ZhbGlkKGdtZm4pICkNCisgICAgICAgIHJldHVybjsNCisNCisgICAg bG9nX2RpcnR5X2xvY2soZCk7DQorDQorICAgIEFTU0VSVChkLT5hcmNoLnBhZ2luZy5sb2dfZGly dHkuYml0bWFwICE9IE5VTEwpOw0KKw0KKyAgICAvKiBXZSAvcmVhbGx5LyBtZWFuIFBGTiBoZXJl LCBldmVuIGZvciBub24tdHJhbnNsYXRlZCBndWVzdHMuICovDQorICAgIHBmbiA9IGdldF9ncGZu X2Zyb21fbWZuKG1mbl94KGdtZm4pKTsNCisNCisgICAgLyoNCisgICAgICogVmFsdWVzIHdpdGgg dGhlIE1TQiBzZXQgZGVub3RlIE1GTnMgdGhhdCBhcmVuJ3QgcmVhbGx5IHBhcnQgb2YgdGhlIA0K KyAgICAgKiBkb21haW4ncyBwc2V1ZG8tcGh5c2ljYWwgbWVtb3J5IG1hcCAoZS5nLiwgdGhlIHNo YXJlZCBpbmZvIGZyYW1lKS4NCisgICAgICogTm90aGluZyB0byBkbyBoZXJlLi4uDQorICAgICAq Lw0KKyAgICBpZiAoIHVubGlrZWx5KCFWQUxJRF9NMlAocGZuKSkgKQ0KKyAgICAgICAgcmV0dXJu Ow0KKw0KKyAgICBpZiAoIGxpa2VseShwZm4gPCBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0 bWFwX3NpemUpICkgDQorICAgIHsgDQorICAgICAgICBpZiAoICFfX3Rlc3RfYW5kX3NldF9iaXQo cGZuLCBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwKSApDQorICAgICAgICB7DQorICAg ICAgICAgICAgUEFHSU5HX0RFQlVHKExPR0RJUlRZLCANCisgICAgICAgICAgICAgICAgICAgICAg ICAgIm1hcmtlZCBtZm4gJSIgUFJJX21mbiAiIChwZm49JWx4KSwgZG9tICVkXG4iLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICBtZm5feChnbWZuKSwgcGZuLCBkLT5kb21haW5faWQpOw0KKyAg ICAgICAgICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5kaXJ0eV9jb3VudCsrOw0KKyAgICAg ICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgUEFHSU5HX1BSSU5USygi bWFya19kaXJ0eSBPT1IhICINCisgICAgICAgICAgICAgICAgICAgICAgIm1mbj0lIiBQUklfbWZu ICIgcGZuPSVseCBtYXg9JXggKGRvbSAlZClcbiINCisgICAgICAgICAgICAgICAgICAgICAgIm93 bmVyPSVkIGM9JTA4eCB0PSUiIFBSdHlwZV9pbmZvICJcbiIsDQorICAgICAgICAgICAgICAgICAg ICAgIG1mbl94KGdtZm4pLCANCisgICAgICAgICAgICAgICAgICAgICAgcGZuLCANCisgICAgICAg ICAgICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcF9zaXplLA0KKyAg ICAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQsDQorICAgICAgICAgICAgICAgICAgICAg IChwYWdlX2dldF9vd25lcihtZm5fdG9fcGFnZShnbWZuKSkNCisgICAgICAgICAgICAgICAgICAg ICAgID8gcGFnZV9nZXRfb3duZXIobWZuX3RvX3BhZ2UoZ21mbikpLT5kb21haW5faWQNCisgICAg ICAgICAgICAgICAgICAgICAgIDogLTEpLA0KKyAgICAgICAgICAgICAgICAgICAgICBtZm5fdG9f cGFnZShnbWZuKS0+Y291bnRfaW5mbywgDQorICAgICAgICAgICAgICAgICAgICAgIG1mbl90b19w YWdlKGdtZm4pLT51LmludXNlLnR5cGVfaW5mbyk7DQorICAgIH0NCisgICAgDQorICAgIGxvZ19k aXJ0eV91bmxvY2soZCk7DQorfQ0KKw0KKy8qIFJlYWQgYSBkb21haW4ncyBsb2ctZGlydHkgYml0 bWFwIGFuZCBzdGF0cy4gIElmIHRoZSBvcGVyYXRpb24gaXMgYSBDTEVBTiwgDQorICogY2xlYXIg dGhlIGJpdG1hcCBhbmQgc3RhdHMgYXMgd2VsbC4gKi8NCitpbnQgcGFnaW5nX2xvZ19kaXJ0eV9v cChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgeGVuX2RvbWN0bF9zaGFkb3dfb3AgKnNjKQ0KK3sN CisgICAgaW50IGksIHJ2ID0gMCwgY2xlYW4gPSAwLCBwZWVrID0gMTsNCisNCisgICAgZG9tYWlu X3BhdXNlKGQpOw0KKyAgICBsb2dfZGlydHlfbG9jayhkKTsNCisNCisgICAgY2xlYW4gPSAoc2Mt Pm9wID09IFhFTl9ET01DVExfU0hBRE9XX09QX0NMRUFOKTsNCisNCisgICAgUEFHSU5HX0RFQlVH KExPR0RJUlRZLCAibG9nLWRpcnR5ICVzOiBkb20gJXUgZmF1bHRzPSV1IGRpcnR5PSV1XG4iLCAN CisgICAgICAgICAgICAgICAgIChjbGVhbikgPyAiY2xlYW4iIDogInBlZWsiLA0KKyAgICAgICAg ICAgICAgICAgZC0+ZG9tYWluX2lkLA0KKyAgICAgICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcu bG9nX2RpcnR5LmZhdWx0X2NvdW50LCANCisgICAgICAgICAgICAgICAgIGQtPmFyY2gucGFnaW5n LmxvZ19kaXJ0eS5kaXJ0eV9jb3VudCk7DQorDQorICAgIHNjLT5zdGF0cy5mYXVsdF9jb3VudCA9 IGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5mYXVsdF9jb3VudDsNCisgICAgc2MtPnN0YXRzLmRp cnR5X2NvdW50ID0gZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmRpcnR5X2NvdW50Ow0KKyAgICAN CisgICAgaWYgKCBjbGVhbiApDQorICAgIHsNCisgICAgICAgIGQtPmFyY2gucGFnaW5nLmxvZ19k aXJ0eS5mYXVsdF9jb3VudCA9IDA7DQorICAgICAgICBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHku ZGlydHlfY291bnQgPSAwOw0KKw0KKyAgICAgICAgLyogV2UgbmVlZCB0byBmdXJ0aGVyIGNhbGwg Y2xlYW5fZGlydHlfYml0bWFwKCkgZnVuY3Rpb25zIG9mIHNwZWNpZmljDQorICAgICAgICAgKiBw YWdpbmcgbW9kZXMgKHNoYWRvdyBvciBoYXApLg0KKyAgICAgICAgICovDQorICAgICAgICBkLT5h cmNoLnBhZ2luZy5sb2dfZGlydHkuY2xlYW5fZGlydHlfYml0bWFwKGQpOw0KKyAgICB9DQorDQor ICAgIGlmICggZ3Vlc3RfaGFuZGxlX2lzX251bGwoc2MtPmRpcnR5X2JpdG1hcCkgKQ0KKyAgICAg ICAgLyogY2FsbGVyIG1heSBoYXZlIHdhbnRlZCBqdXN0IHRvIGNsZWFuIHRoZSBzdGF0ZSBvciBh Y2Nlc3Mgc3RhdHMuICovDQorICAgICAgICBwZWVrID0gMDsNCisNCisgICAgaWYgKCAocGVlayB8 fCBjbGVhbikgJiYgKGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXAgPT0gTlVMTCkgKQ0K KyAgICB7DQorICAgICAgICBydiA9IC1FSU5WQUw7IC8qIHBlcmhhcHMgc2hvdWxkIGJlIEVOT01F TT8gKi8NCisgICAgICAgIGdvdG8gb3V0Ow0KKyAgICB9DQorIA0KKyAgICBpZiAoIHNjLT5wYWdl cyA+IGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXBfc2l6ZSApDQorICAgICAgICBzYy0+ cGFnZXMgPSBkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwX3NpemU7DQorDQorI2RlZmlu ZSBDSFVOSyAoOCoxMDI0KSAvKiBUcmFuc2ZlciBhbmQgY2xlYXIgaW4gMWtCIGNodW5rcyBmb3Ig TDEgY2FjaGUuICovDQorICAgIGZvciAoIGkgPSAwOyBpIDwgc2MtPnBhZ2VzOyBpICs9IENIVU5L ICkNCisgICAgew0KKyAgICAgICAgaW50IGJ5dGVzID0gKCgoKHNjLT5wYWdlcyAtIGkpID4gQ0hV TkspDQorICAgICAgICAgICAgICAgICAgICAgID8gQ0hVTksNCisgICAgICAgICAgICAgICAgICAg ICAgOiAoc2MtPnBhZ2VzIC0gaSkpICsgNykgLyA4Ow0KKw0KKyAgICAgICAgaWYgKCBsaWtlbHko cGVlaykgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGlmICggY29weV90b19ndWVzdF9vZmZz ZXQoDQorICAgICAgICAgICAgICAgIHNjLT5kaXJ0eV9iaXRtYXAsIGkvOCwNCisgICAgICAgICAg ICAgICAgKHVpbnQ4X3QgKilkLT5hcmNoLnBhZ2luZy5sb2dfZGlydHkuYml0bWFwICsgKGkvOCks IGJ5dGVzKSApDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICBydiA9IC1FRkFVTFQ7 DQorICAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0N CisNCisgICAgICAgIGlmICggY2xlYW4gKQ0KKyAgICAgICAgICAgIG1lbXNldCgodWludDhfdCAq KWQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5iaXRtYXAgKyAoaS84KSwgMCwgYnl0ZXMpOw0KKyAg ICB9DQorI3VuZGVmIENIVU5LDQorDQorIG91dDoNCisgICAgbG9nX2RpcnR5X3VubG9jayhkKTsN CisgICAgZG9tYWluX3VucGF1c2UoZCk7DQorICAgIHJldHVybiBydjsNCit9DQorDQorDQorLyog Tm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gdGFrZXMgdGhyZWUgZnVuY3Rpb24gcG9pbnRlcnMuIENh bGxlcnMgbXVzdCBzdXBwbHkNCisgKiB0aGVzZSBmdW5jdGlvbnMgZm9yIGxvZyBkaXJ0eSBjb2Rl IHRvIGNhbGwuIFRoaXMgZnVuY3Rpb24gdXN1YWxseSBpcyANCisgKiBpbnZva2VkIHdoZW4gcGFn aW5nIGlzIGVuYWJsZWQuIENoZWNrIHNoYWRvd19lbmFibGUoKSBhbmQgaGFwX2VuYWJsZSgpIGZv ciANCisgKiByZWZlcmVuY2UuDQorICovDQordm9pZCBwYWdpbmdfbG9nX2RpcnR5X2luaXQoc3Ry dWN0IGRvbWFpbiAqZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgKCplbmFi bGVfbG9nX2RpcnR5KShzdHJ1Y3QgZG9tYWluICpkKSwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgICAgKCpkaXNhYmxlX2xvZ19kaXJ0eSkoc3RydWN0IGRvbWFpbiAqZCksDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICgqY2xlYW5fZGlydHlfYml0bWFwKShzdHJ1 Y3QgZG9tYWluICpkKSkNCit7DQorICAgIC8qIFdlIGluaXRpYWxpemUgbG9nIGRpcnR5IGxvY2sg Zmlyc3QgKi8NCisgICAgbG9nX2RpcnR5X2xvY2tfaW5pdChkKTsNCisgICAgDQorICAgIGQtPmFy Y2gucGFnaW5nLmxvZ19kaXJ0eS5lbmFibGVfbG9nX2RpcnR5ID0gZW5hYmxlX2xvZ19kaXJ0eTsN CisgICAgZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmRpc2FibGVfbG9nX2RpcnR5ID0gZGlzYWJs ZV9sb2dfZGlydHk7DQorICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5jbGVhbl9kaXJ0eV9i aXRtYXAgPSBjbGVhbl9kaXJ0eV9iaXRtYXA7DQorfQ0KKw0KKy8qIFRoaXMgZnVuY3Rpb24gZnJl c3MgbG9nIGRpcnR5IGJpdG1hcCByZXNvdXJjZXMuICovDQordm9pZCBwYWdpbmdfbG9nX2RpcnR5 X3RlYXJkb3duKHN0cnVjdCBkb21haW4qZCkNCit7DQorICAgIGxvZ19kaXJ0eV9sb2NrKGQpOw0K KyAgICBwYWdpbmdfZnJlZV9sb2dfZGlydHlfYml0bWFwKGQpOw0KKyAgICBsb2dfZGlydHlfdW5s b2NrKGQpOw0KK30NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLw0KKy8qICAgICAgICAgICBDT0RFIEZPUiBQQUdJTkcgU1VQUE9SVCAgICAgICAgICAg ICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8N CiAvKiBEb21haW4gcGFnaW5nIHN0cnVjdCBpbml0aWFsaXphdGlvbi4gKi8NCiB2b2lkIHBhZ2lu Z19kb21haW5faW5pdChzdHJ1Y3QgZG9tYWluICpkKQ0KIHsNCkBAIC02NSwxNiArMzM4LDY4IEBA IGludCBwYWdpbmdfZG9tY3RsKHN0cnVjdCBkb21haW4gKmQsIHhlbl8NCiBpbnQgcGFnaW5nX2Rv bWN0bChzdHJ1Y3QgZG9tYWluICpkLCB4ZW5fZG9tY3RsX3NoYWRvd19vcF90ICpzYywNCiAgICAg ICAgICAgICAgICAgICBYRU5fR1VFU1RfSEFORExFKHZvaWQpIHVfZG9tY3RsKQ0KIHsNCisgICAg aW50IHJjOw0KKw0KKyAgICBpZiAoIHVubGlrZWx5KGQgPT0gY3VycmVudC0+ZG9tYWluKSApDQor ICAgIHsNCisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19JTkZPLCAiRG9tICV1IHRyaWVkIHRvIGRv IGEgcGFnaW5nIG9wIG9uIGl0c2VsZi5cbiIsDQorICAgICAgICAgICAgICAgICBkLT5kb21haW5f aWQpOw0KKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQorICAgIH0NCisgICAgDQorICAgIGlmICgg dW5saWtlbHkoZC0+aXNfZHlpbmcpICkNCisgICAgew0KKyAgICAgICAgZ2RwcmludGsoWEVOTE9H X0lORk8sICJJZ25vcmluZyBwYWdpbmcgb3Agb24gZHlpbmcgZG9tYWluICV1XG4iLA0KKyAgICAg ICAgICAgICAgICAgZC0+ZG9tYWluX2lkKTsNCisgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQor DQorICAgIGlmICggdW5saWtlbHkoZC0+dmNwdVswXSA9PSBOVUxMKSApDQorICAgIHsNCisgICAg ICAgIFBBR0lOR19FUlJPUigiUGFnaW5nIG9wIG9uIGEgZG9tYWluICgldSkgd2l0aCBubyB2Y3B1 c1xuIiwNCisgICAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQpOw0KKyAgICAgICAgcmV0 dXJuIC1FSU5WQUw7DQorICAgIH0NCisgICAgDQorICAgIC8qIENvZGUgdG8gaGFuZGxlIGxvZy1k aXJ0eS4gTm90ZSB0aGF0IHNvbWUgbG9nIGRpcnR5IG9wZXJhdGlvbnMNCisgICAgICogcGlnZ3kt YmFjayBvbiBzaGFkb3cgb3BlcmF0aW9ucy4gRm9yIGV4YW1wbGUsIHdoZW4gDQorICAgICAqIFhF Tl9ET01DVExfU0hBRE9XX09QX09GRiBpcyBjYWxsZWQsIGl0IGZpcnN0IGNoZWNrcyB3aGV0aGVy IGxvZyBkaXJ0eQ0KKyAgICAgKiBtb2RlIGlzIGVuYWJsZWQuIElmIGRvZXMsIHdlIGRpc2FibGVz IGxvZyBkaXJ0eSBhbmQgY29udGludWVzIHdpdGggDQorICAgICAqIHNoYWRvdyBjb2RlLiBGb3Ig dGhpcyByZWFzb24sIHdlIG5lZWQgdG8gZnVydGhlciBkaXNwYXRjaCBkb21jdGwgDQorICAgICAq IHRvIG5leHQtbGV2ZWwgcGFnaW5nIGNvZGUgKHNoYWRvdyBvciBoYXApLg0KKyAgICAgKi8NCisg ICAgc3dpdGNoICggc2MtPm9wICkNCisgICAgew0KKyAgICBjYXNlIFhFTl9ET01DVExfU0hBRE9X X09QX0VOQUJMRV9MT0dESVJUWToNCisgICAgICAgIHJldHVybiBwYWdpbmdfbG9nX2RpcnR5X2Vu YWJsZShkKTsJDQorCQ0KKyAgICBjYXNlIFhFTl9ET01DVExfU0hBRE9XX09QX0VOQUJMRToJDQor ICAgICAgICBpZiAoIHNjLT5tb2RlICYgWEVOX0RPTUNUTF9TSEFET1dfRU5BQkxFX0xPR19ESVJU WSApDQorICAgICAgICAgICAgcmV0dXJuIHBhZ2luZ19sb2dfZGlydHlfZW5hYmxlKGQpOw0KKw0K KyAgICBjYXNlIFhFTl9ET01DVExfU0hBRE9XX09QX09GRjoNCisgICAgICAgIGlmICggcGFnaW5n X21vZGVfbG9nX2RpcnR5KGQpICkNCisgICAgICAgICAgICBpZiAoIChyYyA9IHBhZ2luZ19sb2df ZGlydHlfZGlzYWJsZShkKSkgIT0gMCApIA0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmM7DQor DQorICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfQ0xFQU46DQorICAgIGNhc2UgWEVOX0RP TUNUTF9TSEFET1dfT1BfUEVFSzoNCisJcmV0dXJuIHBhZ2luZ19sb2dfZGlydHlfb3AoZCwgc2Mp Ow0KKyAgICB9DQorCQ0KICAgICAvKiBIZXJlLCBkaXNwYXRjaCBkb21jdGwgdG8gdGhlIGFwcHJv cHJpYXRlIHBhZ2luZyBjb2RlICovDQogICAgIGlmICggb3B0X2hhcF9lbmFibGVkICYmIGlzX2h2 bV9kb21haW4oZCkgKQ0KLSAgICAgICAgcmV0dXJuIGhhcF9kb21jdGwoZCwgc2MsIHVfZG9tY3Rs KTsNCi0gICAgZWxzZQ0KLSAgICAgICAgcmV0dXJuIHNoYWRvd19kb21jdGwoZCwgc2MsIHVfZG9t Y3RsKTsNCisJcmV0dXJuIGhhcF9kb21jdGwoZCwgc2MsIHVfZG9tY3RsKTsNCisgICAgZWxzZQ0K KwlyZXR1cm4gc2hhZG93X2RvbWN0bChkLCBzYywgdV9kb21jdGwpOw0KIH0NCiANCiAvKiBDYWxs IHdoZW4gZGVzdHJveWluZyBhIGRvbWFpbiAqLw0KIHZvaWQgcGFnaW5nX3RlYXJkb3duKHN0cnVj dCBkb21haW4gKmQpDQogew0KKyAgICAvKiBjbGVhbiB1cCBsb2cgZGlydHkgcmVzb3VyY2VzLiAq Lw0KKyAgICBwYWdpbmdfbG9nX2RpcnR5X3RlYXJkb3duKGQpOw0KKyAgICANCiAgICAgaWYgKCBv cHRfaGFwX2VuYWJsZWQgJiYgaXNfaHZtX2RvbWFpbihkKSApDQogICAgICAgICBoYXBfdGVhcmRv d24oZCk7DQogICAgIGVsc2UNCmRpZmYgLXIgNDU1MTZhYzk0YzlmIHhlbi9hcmNoL3g4Ni9tbS9z aGFkb3cvY29tbW9uLmMNCi0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvY29tbW9uLmMJV2Vk IEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJjaC94ODYvbW0vc2hhZG93 L2NvbW1vbi5jCUZyaSBKdW4gMDggMDQ6MzA6MTEgMjAwNyAtMDUwMA0KQEAgLTg3LDggKzg3LDYg QEAgX19pbml0Y2FsbChzaGFkb3dfYXVkaXRfa2V5X2luaXQpOw0KIF9faW5pdGNhbGwoc2hhZG93 X2F1ZGl0X2tleV9pbml0KTsNCiAjZW5kaWYgLyogU0hBRE9XX0FVRElUICovDQogDQotc3RhdGlj IHZvaWQgc2hfZnJlZV9sb2dfZGlydHlfYml0bWFwKHN0cnVjdCBkb21haW4gKmQpOw0KLQ0KIGlu dCBfc2hhZG93X21vZGVfcmVmY291bnRzKHN0cnVjdCBkb21haW4gKmQpDQogew0KICAgICByZXR1 cm4gc2hhZG93X21vZGVfcmVmY291bnRzKGQpOw0KQEAgLTU0MSw3ICs1MzksNyBAQCBzaF92YWxp ZGF0ZV9ndWVzdF9lbnRyeShzdHJ1Y3QgdmNwdSAqdiwgDQogICAgIGludCByZXN1bHQgPSAwOw0K ICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gbWZuX3RvX3BhZ2UoZ21mbik7DQogDQotICAg IHNoX21hcmtfZGlydHkodi0+ZG9tYWluLCBnbWZuKTsNCisgICAgcGFnaW5nX21hcmtfZGlydHko di0+ZG9tYWluLCBtZm5feChnbWZuKSk7DQogICAgIA0KICAgICAvLyBEZXRlcm1pbmUgd2hpY2gg dHlwZXMgb2Ygc2hhZG93cyBhcmUgYWZmZWN0ZWQsIGFuZCB1cGRhdGUgZWFjaC4NCiAgICAgLy8N CkBAIC0yNDU1LDYgKzI0NTMsMTAgQEAgaW50IHNoYWRvd19lbmFibGUoc3RydWN0IGRvbWFpbiAq ZCwgdTMyIA0KICAgICAgICAgfSAgICAgICAgDQogICAgIH0NCiANCisgICAgLyogaW5pdGlhbGl6 ZSBsb2cgZGlydHkgaGVyZSAqLw0KKyAgICBwYWdpbmdfbG9nX2RpcnR5X2luaXQoZCwgc2hhZG93 X2VuYWJsZV9sb2dfZGlydHksIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93X2Rp c2FibGVfbG9nX2RpcnR5LCBzaGFkb3dfY2xlYW5fZGlydHlfYml0bWFwKTsNCisNCiAgICAgLyog SW5pdCB0aGUgUDJNIHRhYmxlLiAgTXVzdCBiZSBkb25lIGJlZm9yZSB3ZSB0YWtlIHRoZSBzaGFk b3cgbG9jayANCiAgICAgICogdG8gYXZvaWQgcG9zc2libGUgZGVhZGxvY2suICovDQogICAgIGlm ICggbW9kZSAmIFBHX3RyYW5zbGF0ZSApDQpAQCAtMjQ2Myw2ICsyNDY1LDcgQEAgaW50IHNoYWRv d19lbmFibGUoc3RydWN0IGRvbWFpbiAqZCwgdTMyIA0KICAgICAgICAgaWYgKHJ2ICE9IDApDQog ICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrZWQ7DQogICAgIH0NCisNCiANCiAgICAgc2hhZG93 X2xvY2soZCk7DQogDQpAQCAtMjU2NCw4ICsyNTY3LDYgQEAgdm9pZCBzaGFkb3dfdGVhcmRvd24o c3RydWN0IGRvbWFpbiAqZCkNCiAgICAgICAgIC8qIFJlbGVhc2UgdGhlIGhhc2ggdGFibGUgYmFj ayB0byB4ZW5oZWFwICovDQogICAgICAgICBpZiAoZC0+YXJjaC5wYWdpbmcuc2hhZG93Lmhhc2hf dGFibGUpIA0KICAgICAgICAgICAgIHNoYWRvd19oYXNoX3RlYXJkb3duKGQpOw0KLSAgICAgICAg LyogUmVsZWFzZSB0aGUgbG9nLWRpcnR5IGJpdG1hcCBvZiBkaXJ0aWVkIHBhZ2VzICovDQotICAg ICAgICBzaF9mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoZCk7DQogICAgICAgICAvKiBTaG91bGQgbm90 IGhhdmUgYW55IG1vcmUgbWVtb3J5IGhlbGQgKi8NCiAgICAgICAgIFNIQURPV19QUklOVEsoInRl YXJkb3duIGRvbmUuIg0KICAgICAgICAgICAgICAgICAgICAgICAgIiAgU2hhZG93IHBhZ2VzIHRv dGFsID0gJXUsIGZyZWUgPSAldSwgcDJtPSV1XG4iLA0KQEAgLTI3MTgsOTggKzI3MTksNiBAQCBz dGF0aWMgaW50IHNoYWRvd190ZXN0X2Rpc2FibGUoc3RydWN0IGRvDQogICAgIGRvbWFpbl9wYXVz ZShkKTsNCiAgICAgc2hhZG93X2xvY2soZCk7DQogICAgIHJldCA9IHNoYWRvd19vbmVfYml0X2Rp c2FibGUoZCwgUEdfU0hfZW5hYmxlKTsNCi0gICAgc2hhZG93X3VubG9jayhkKTsNCi0gICAgZG9t YWluX3VucGF1c2UoZCk7DQotDQotICAgIHJldHVybiByZXQ7DQotfQ0KLQ0KLXN0YXRpYyBpbnQN Ci1zaF9hbGxvY19sb2dfZGlydHlfYml0bWFwKHN0cnVjdCBkb21haW4gKmQpDQotew0KLSAgICBB U1NFUlQoZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCA9PSBOVUxMKTsNCi0gICAg ZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcF9zaXplID0NCi0gICAgICAgIChkb21h aW5fZ2V0X21heGltdW1fZ3BmbihkKSArIEJJVFNfUEVSX0xPTkcpICYgfihCSVRTX1BFUl9MT05H IC0gMSk7DQotICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXAgPQ0KLSAgICAg ICAgeG1hbGxvY19hcnJheSh1bnNpZ25lZCBsb25nLA0KLSAgICAgICAgICAgICAgICAgICAgICBk LT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwX3NpemUgLyBCSVRTX1BFUl9MT05HKTsN Ci0gICAgaWYgKCBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwID09IE5VTEwgKQ0K LSAgICB7DQotICAgICAgICBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwX3NpemUg PSAwOw0KLSAgICAgICAgcmV0dXJuIC1FTk9NRU07DQotICAgIH0NCi0gICAgbWVtc2V0KGQtPmFy Y2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXAsIDAsDQotICAgICAgICAgICBkLT5hcmNoLnBh Z2luZy5zaGFkb3cuZGlydHlfYml0bWFwX3NpemUvOCk7DQotDQotICAgIHJldHVybiAwOw0KLX0N Ci0NCi1zdGF0aWMgdm9pZA0KLXNoX2ZyZWVfbG9nX2RpcnR5X2JpdG1hcChzdHJ1Y3QgZG9tYWlu ICpkKQ0KLXsNCi0gICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcF9zaXplID0g MDsNCi0gICAgaWYgKCBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwICkNCi0gICAg ew0KLSAgICAgICAgeGZyZWUoZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCk7DQot ICAgICAgICBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwID0gTlVMTDsNCi0gICAg fQ0KLX0NCi0NCi1zdGF0aWMgaW50IHNoYWRvd19sb2dfZGlydHlfZW5hYmxlKHN0cnVjdCBkb21h aW4gKmQpDQotew0KLSAgICBpbnQgcmV0Ow0KLQ0KLSAgICBkb21haW5fcGF1c2UoZCk7DQotICAg IHNoYWRvd19sb2NrKGQpOw0KLQ0KLSAgICBpZiAoIHNoYWRvd19tb2RlX2xvZ19kaXJ0eShkKSAp DQotICAgIHsNCi0gICAgICAgIHJldCA9IC1FSU5WQUw7DQotICAgICAgICBnb3RvIG91dDsNCi0g ICAgfQ0KLQ0KLSAgICBpZiAoIHNoYWRvd19tb2RlX2VuYWJsZWQoZCkgKQ0KLSAgICB7DQotICAg ICAgICAvKiBUaGlzIGRvbWFpbiBhbHJlYWR5IGhhcyBzb21lIHNoYWRvd3M6IG5lZWQgdG8gY2xl YXIgdGhlbSBvdXQgDQotICAgICAgICAgKiBvZiB0aGUgd2F5IHRvIG1ha2Ugc3VyZSB0aGF0IGFs bCByZWZlcmVuY2VzIHRvIGd1ZXN0IG1lbW9yeSBhcmUgDQotICAgICAgICAgKiBwcm9wZXJseSB3 cml0ZS1wcm90ZWN0ZWQgKi8NCi0gICAgICAgIHNoYWRvd19ibG93X3RhYmxlcyhkKTsNCi0gICAg fQ0KLQ0KLSNpZiAoU0hBRE9XX09QVElNSVpBVElPTlMgJiBTSE9QVF9MSU5VWF9MM19UT1BMRVZF TCkNCi0gICAgLyogMzJiaXQgUFYgZ3Vlc3RzIG9uIDY0Yml0IHhlbiBiZWhhdmUgbGlrZSBvbGRl ciA2NGJpdCBsaW51eDogdGhleQ0KLSAgICAgKiBjaGFuZ2UgYW4gbDRlIGluc3RlYWQgb2YgY3Iz IHRvIHN3aXRjaCB0YWJsZXMuICBHaXZlIHRoZW0gdGhlDQotICAgICAqIHNhbWUgb3B0aW1pemF0 aW9uICovDQotICAgIGlmICggaXNfcHZfMzJvbjY0X2RvbWFpbihkKSApDQotICAgICAgICBkLT5h cmNoLnBhZ2luZy5zaGFkb3cub3B0X2ZsYWdzID0gU0hPUFRfTElOVVhfTDNfVE9QTEVWRUw7DQot I2VuZGlmDQotDQotICAgIHJldCA9IHNoX2FsbG9jX2xvZ19kaXJ0eV9iaXRtYXAoZCk7DQotICAg IGlmICggcmV0ICE9IDAgKQ0KLSAgICB7DQotICAgICAgICBzaF9mcmVlX2xvZ19kaXJ0eV9iaXRt YXAoZCk7DQotICAgICAgICBnb3RvIG91dDsNCi0gICAgfQ0KLQ0KLSAgICByZXQgPSBzaGFkb3df b25lX2JpdF9lbmFibGUoZCwgUEdfbG9nX2RpcnR5KTsNCi0gICAgaWYgKCByZXQgIT0gMCApDQot ICAgICAgICBzaF9mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoZCk7DQotDQotIG91dDoNCi0gICAgc2hh ZG93X3VubG9jayhkKTsNCi0gICAgZG9tYWluX3VucGF1c2UoZCk7DQotICAgIHJldHVybiByZXQ7 DQotfQ0KLQ0KLXN0YXRpYyBpbnQgc2hhZG93X2xvZ19kaXJ0eV9kaXNhYmxlKHN0cnVjdCBkb21h aW4gKmQpDQotew0KLSAgICBpbnQgcmV0Ow0KLQ0KLSAgICBkb21haW5fcGF1c2UoZCk7DQotICAg IHNoYWRvd19sb2NrKGQpOw0KLSAgICByZXQgPSBzaGFkb3dfb25lX2JpdF9kaXNhYmxlKGQsIFBH X2xvZ19kaXJ0eSk7DQotICAgIGlmICggIXNoYWRvd19tb2RlX2xvZ19kaXJ0eShkKSApDQotICAg ICAgICBzaF9mcmVlX2xvZ19kaXJ0eV9iaXRtYXAoZCk7DQogICAgIHNoYWRvd191bmxvY2soZCk7 DQogICAgIGRvbWFpbl91bnBhdXNlKGQpOw0KIA0KQEAgLTI4OTIsMTUwICsyODAxLDYyIEBAIHZv aWQgc2hhZG93X2NvbnZlcnRfdG9fbG9nX2RpcnR5KHN0cnVjdCANCiAgICAgQlVHKCk7DQogfQ0K IA0KLQ0KLS8qIFJlYWQgYSBkb21haW4ncyBsb2ctZGlydHkgYml0bWFwIGFuZCBzdGF0cy4gIA0K LSAqIElmIHRoZSBvcGVyYXRpb24gaXMgYSBDTEVBTiwgY2xlYXIgdGhlIGJpdG1hcCBhbmQgc3Rh dHMgYXMgd2VsbC4gKi8NCi1zdGF0aWMgaW50IHNoYWRvd19sb2dfZGlydHlfb3AoDQotICAgIHN0 cnVjdCBkb21haW4gKmQsIHN0cnVjdCB4ZW5fZG9tY3RsX3NoYWRvd19vcCAqc2MpDQotew0KLSAg ICBpbnQgaSwgcnYgPSAwLCBjbGVhbiA9IDAsIHBlZWsgPSAxOw0KLQ0KLSAgICBkb21haW5fcGF1 c2UoZCk7DQorLyogU2hhZG93IHNwZWNpZmljIGNvZGUgd2hpY2ggaXMgY2FsbGVkIGluIHBhZ2lu Z19sb2dfZGlydHlfZW5hYmxlKCkuDQorICogUmV0dXJuIDAgaWYgbm8gcHJvYmxlbSBmb3VuZC4N CisgKi8NCitpbnQgc2hhZG93X2VuYWJsZV9sb2dfZGlydHkoc3RydWN0IGRvbWFpbiAqZCkNCit7 DQorICAgIGludCByZXQ7DQorDQorICAgIC8qIHNoYWRvdyBsb2NrIGlzIHJlcXVpcmVkIGhlcmUg Ki8NCiAgICAgc2hhZG93X2xvY2soZCk7DQotDQotICAgIGNsZWFuID0gKHNjLT5vcCA9PSBYRU5f RE9NQ1RMX1NIQURPV19PUF9DTEVBTik7DQotDQotICAgIFNIQURPV19ERUJVRyhMT0dESVJUWSwg ImxvZy1kaXJ0eSAlczogZG9tICV1IGZhdWx0cz0ldSBkaXJ0eT0ldVxuIiwgDQotICAgICAgICAg ICAgICAgICAgKGNsZWFuKSA/ICJjbGVhbiIgOiAicGVlayIsDQotICAgICAgICAgICAgICAgICAg ZC0+ZG9tYWluX2lkLA0KLSAgICAgICAgICAgICAgICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5m YXVsdF9jb3VudCwgDQotICAgICAgICAgICAgICAgICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRp cnR5X2NvdW50KTsNCi0NCi0gICAgc2MtPnN0YXRzLmZhdWx0X2NvdW50ID0gZC0+YXJjaC5wYWdp bmcuc2hhZG93LmZhdWx0X2NvdW50Ow0KLSAgICBzYy0+c3RhdHMuZGlydHlfY291bnQgPSBkLT5h cmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfY291bnQ7DQotDQotICAgIGlmICggY2xlYW4gKQ0KLSAg ICB7DQotICAgICAgICAvKiBOZWVkIHRvIHJldm9rZSB3cml0ZSBhY2Nlc3MgdG8gdGhlIGRvbWFp bidzIHBhZ2VzIGFnYWluLg0KLSAgICAgICAgICogSW4gZnV0dXJlLCB3ZSdsbCBoYXZlIGEgbGVz cyBoZWF2eS1oYW5kZWQgYXBwcm9hY2ggdG8gdGhpcywNCi0gICAgICAgICAqIGJ1dCBmb3Igbm93 LCB3ZSBqdXN0IHVuc2hhZG93IGV2ZXJ5dGhpbmcgZXhjZXB0IFhlbi4gKi8NCisgICAgaWYgKCBz aGFkb3dfbW9kZV9lbmFibGVkKGQpICkNCisgICAgew0KKyAgICAgICAgLyogVGhpcyBkb21haW4g YWxyZWFkeSBoYXMgc29tZSBzaGFkb3dzOiBuZWVkIHRvIGNsZWFyIHRoZW0gb3V0IA0KKyAgICAg ICAgICogb2YgdGhlIHdheSB0byBtYWtlIHN1cmUgdGhhdCBhbGwgcmVmZXJlbmNlcyB0byBndWVz dCBtZW1vcnkgYXJlIA0KKyAgICAgICAgICogcHJvcGVybHkgd3JpdGUtcHJvdGVjdGVkICovDQog ICAgICAgICBzaGFkb3dfYmxvd190YWJsZXMoZCk7DQotDQotICAgICAgICBkLT5hcmNoLnBhZ2lu Zy5zaGFkb3cuZmF1bHRfY291bnQgPSAwOw0KLSAgICAgICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93 LmRpcnR5X2NvdW50ID0gMDsNCi0gICAgfQ0KLQ0KLSAgICBpZiAoIGd1ZXN0X2hhbmRsZV9pc19u dWxsKHNjLT5kaXJ0eV9iaXRtYXApICkNCi0gICAgICAgIC8qIGNhbGxlciBtYXkgaGF2ZSB3YW50 ZWQganVzdCB0byBjbGVhbiB0aGUgc3RhdGUgb3IgYWNjZXNzIHN0YXRzLiAqLw0KLSAgICAgICAg cGVlayA9IDA7DQotDQotICAgIGlmICggKHBlZWsgfHwgY2xlYW4pICYmIChkLT5hcmNoLnBhZ2lu Zy5zaGFkb3cuZGlydHlfYml0bWFwID09IE5VTEwpICkNCi0gICAgew0KLSAgICAgICAgcnYgPSAt RUlOVkFMOyAvKiBwZXJoYXBzIHNob3VsZCBiZSBFTk9NRU0/ICovDQotICAgICAgICBnb3RvIG91 dDsNCi0gICAgfQ0KLSANCi0gICAgaWYgKCBzYy0+cGFnZXMgPiBkLT5hcmNoLnBhZ2luZy5zaGFk b3cuZGlydHlfYml0bWFwX3NpemUgKQ0KLSAgICAgICAgc2MtPnBhZ2VzID0gZC0+YXJjaC5wYWdp bmcuc2hhZG93LmRpcnR5X2JpdG1hcF9zaXplOw0KLQ0KLSNkZWZpbmUgQ0hVTksgKDgqMTAyNCkg LyogVHJhbnNmZXIgYW5kIGNsZWFyIGluIDFrQiBjaHVua3MgZm9yIEwxIGNhY2hlLiAqLw0KLSAg ICBmb3IgKCBpID0gMDsgaSA8IHNjLT5wYWdlczsgaSArPSBDSFVOSyApDQotICAgIHsNCi0gICAg ICAgIGludCBieXRlcyA9ICgoKChzYy0+cGFnZXMgLSBpKSA+IENIVU5LKQ0KLSAgICAgICAgICAg ICAgICAgICAgICA/IENIVU5LDQotICAgICAgICAgICAgICAgICAgICAgIDogKHNjLT5wYWdlcyAt IGkpKSArIDcpIC8gODsNCi0NCi0gICAgICAgIGlmICggbGlrZWx5KHBlZWspICkNCi0gICAgICAg IHsNCi0gICAgICAgICAgICBpZiAoIGNvcHlfdG9fZ3Vlc3Rfb2Zmc2V0KA0KLSAgICAgICAgICAg ICAgICBzYy0+ZGlydHlfYml0bWFwLCBpLzgsDQotICAgICAgICAgICAgICAgICh1aW50OF90ICop ZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCArIChpLzgpLCBieXRlcykgKQ0KLSAg ICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcnYgPSAtRUZBVUxUOw0KLSAgICAgICAgICAg ICAgICBnb3RvIG91dDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBp ZiAoIGNsZWFuICkNCi0gICAgICAgICAgICBtZW1zZXQoKHVpbnQ4X3QgKilkLT5hcmNoLnBhZ2lu Zy5zaGFkb3cuZGlydHlfYml0bWFwICsgKGkvOCksIDAsIGJ5dGVzKTsNCi0gICAgfQ0KLSN1bmRl ZiBDSFVOSw0KLQ0KLSBvdXQ6DQorICAgIH0NCisNCisjaWYgKFNIQURPV19PUFRJTUlaQVRJT05T ICYgU0hPUFRfTElOVVhfTDNfVE9QTEVWRUwpDQorICAgIC8qIDMyYml0IFBWIGd1ZXN0cyBvbiA2 NGJpdCB4ZW4gYmVoYXZlIGxpa2Ugb2xkZXIgNjRiaXQgbGludXg6IHRoZXkNCisgICAgICogY2hh bmdlIGFuIGw0ZSBpbnN0ZWFkIG9mIGNyMyB0byBzd2l0Y2ggdGFibGVzLiAgR2l2ZSB0aGVtIHRo ZQ0KKyAgICAgKiBzYW1lIG9wdGltaXphdGlvbiAqLw0KKyAgICBpZiAoIGlzX3B2XzMyb242NF9k b21haW4oZCkgKQ0KKyAgICAgICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93Lm9wdF9mbGFncyA9IFNI T1BUX0xJTlVYX0wzX1RPUExFVkVMOw0KKyNlbmRpZg0KKyAgICANCisgICAgcmV0ID0gc2hhZG93 X29uZV9iaXRfZW5hYmxlKGQsIFBHX2xvZ19kaXJ0eSk7DQogICAgIHNoYWRvd191bmxvY2soZCk7 DQotICAgIGRvbWFpbl91bnBhdXNlKGQpOw0KLSAgICByZXR1cm4gcnY7DQotfQ0KLQ0KLQ0KLS8q IE1hcmsgYSBwYWdlIGFzIGRpcnR5ICovDQotdm9pZCBzaF9tYXJrX2RpcnR5KHN0cnVjdCBkb21h aW4gKmQsIG1mbl90IGdtZm4pDQotew0KLSAgICB1bnNpZ25lZCBsb25nIHBmbjsNCi0gICAgaW50 IGRvX2xvY2tpbmc7DQotDQotICAgIGlmICggIXNoYWRvd19tb2RlX2xvZ19kaXJ0eShkKSB8fCAh bWZuX3ZhbGlkKGdtZm4pICkNCi0gICAgICAgIHJldHVybjsNCi0NCi0gICAgLyogQWx0aG91Z2gg dGhpcyBpcyBhbiBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb24sIHdlIGRvIG5vdCBrbm93DQot ICAgICAqIHdoZXRoZXIgdGhlIHNoYWRvdyBsb2NrIHdpbGwgYmUgaGVsZCB3aGVuIGl0IGlzIGNh bGxlZCAoc2luY2UgaXQNCi0gICAgICogY2FuIGJlIGNhbGxlZCBmcm9tIF9faHZtX2NvcHkgZHVy aW5nIGVtdWxhdGlvbikuDQotICAgICAqIElmIHRoZSBsb2NrIGlzbid0IGhlbGQsIHRha2UgaXQg Zm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FsbC4gKi8NCi0gICAgZG9fbG9ja2luZyA9ICFzaGFk b3dfbG9ja2VkX2J5X21lKGQpOw0KLSAgICBpZiAoIGRvX2xvY2tpbmcgKSANCi0gICAgeyANCi0g ICAgICAgIHNoYWRvd19sb2NrKGQpOw0KLSAgICAgICAgLyogQ2hlY2sgdGhlIG1vZGUgYWdhaW4g d2l0aCB0aGUgbG9jayBoZWxkICovIA0KLSAgICAgICAgaWYgKCB1bmxpa2VseSghc2hhZG93X21v ZGVfbG9nX2RpcnR5KGQpKSApDQotICAgICAgICB7DQotICAgICAgICAgICAgc2hhZG93X3VubG9j ayhkKTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAg QVNTRVJUKGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9iaXRtYXAgIT0gTlVMTCk7DQotDQot ICAgIC8qIFdlIC9yZWFsbHkvIG1lYW4gUEZOIGhlcmUsIGV2ZW4gZm9yIG5vbi10cmFuc2xhdGVk IGd1ZXN0cy4gKi8NCi0gICAgcGZuID0gZ2V0X2dwZm5fZnJvbV9tZm4obWZuX3goZ21mbikpOw0K LQ0KLSAgICAvKg0KLSAgICAgKiBWYWx1ZXMgd2l0aCB0aGUgTVNCIHNldCBkZW5vdGUgTUZOcyB0 aGF0IGFyZW4ndCByZWFsbHkgcGFydCBvZiB0aGUgDQotICAgICAqIGRvbWFpbidzIHBzZXVkby1w aHlzaWNhbCBtZW1vcnkgbWFwIChlLmcuLCB0aGUgc2hhcmVkIGluZm8gZnJhbWUpLg0KLSAgICAg KiBOb3RoaW5nIHRvIGRvIGhlcmUuLi4NCi0gICAgICovDQotICAgIGlmICggdW5saWtlbHkoIVZB TElEX00yUChwZm4pKSApDQotICAgICAgICByZXR1cm47DQotDQotICAgIC8qIE4uQi4gQ2FuIHVz ZSBub24tYXRvbWljIFRBUyBiZWNhdXNlIHByb3RlY3RlZCBieSBzaGFkb3dfbG9jay4gKi8NCi0g ICAgaWYgKCBsaWtlbHkocGZuIDwgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcF9z aXplKSApIA0KLSAgICB7IA0KLSAgICAgICAgaWYgKCAhX190ZXN0X2FuZF9zZXRfYml0KHBmbiwg ZC0+YXJjaC5wYWdpbmcuc2hhZG93LmRpcnR5X2JpdG1hcCkgKQ0KLSAgICAgICAgew0KLSAgICAg ICAgICAgIFNIQURPV19ERUJVRyhMT0dESVJUWSwgDQotICAgICAgICAgICAgICAgICAgICAgICAg ICAibWFya2VkIG1mbiAlIiBQUklfbWZuICIgKHBmbj0lbHgpLCBkb20gJWRcbiIsDQotICAgICAg ICAgICAgICAgICAgICAgICAgICBtZm5feChnbWZuKSwgcGZuLCBkLT5kb21haW5faWQpOw0KLSAg ICAgICAgICAgIGQtPmFyY2gucGFnaW5nLnNoYWRvdy5kaXJ0eV9jb3VudCsrOw0KLSAgICAgICAg fQ0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgU0hBRE9XX1BSSU5USygibWFy a19kaXJ0eSBPT1IhICINCi0gICAgICAgICAgICAgICAgICAgICAgICJtZm49JSIgUFJJX21mbiAi IHBmbj0lbHggbWF4PSV4IChkb20gJWQpXG4iDQotICAgICAgICAgICAgICAgICAgICAgICAib3du ZXI9JWQgYz0lMDh4IHQ9JSIgUFJ0eXBlX2luZm8gIlxuIiwNCi0gICAgICAgICAgICAgICAgICAg ICAgIG1mbl94KGdtZm4pLCANCi0gICAgICAgICAgICAgICAgICAgICAgIHBmbiwgDQotICAgICAg ICAgICAgICAgICAgICAgICBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0bWFwX3NpemUs DQotICAgICAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQsDQotICAgICAgICAgICAgICAg ICAgICAgICAocGFnZV9nZXRfb3duZXIobWZuX3RvX3BhZ2UoZ21mbikpDQotICAgICAgICAgICAg ICAgICAgICAgICAgPyBwYWdlX2dldF9vd25lcihtZm5fdG9fcGFnZShnbWZuKSktPmRvbWFpbl9p ZA0KLSAgICAgICAgICAgICAgICAgICAgICAgIDogLTEpLA0KLSAgICAgICAgICAgICAgICAgICAg ICAgbWZuX3RvX3BhZ2UoZ21mbiktPmNvdW50X2luZm8sIA0KLSAgICAgICAgICAgICAgICAgICAg ICAgbWZuX3RvX3BhZ2UoZ21mbiktPnUuaW51c2UudHlwZV9pbmZvKTsNCi0gICAgfQ0KLQ0KLSAg ICBpZiAoIGRvX2xvY2tpbmcgKSBzaGFkb3dfdW5sb2NrKGQpOw0KLX0NCi0NCisNCisgICAgcmV0 dXJuIHJldDsNCit9DQorDQorLyogc2hhZG93IHNwZWNmaWMgY29kZSB3aGljaCBpcyBjYWxsZWQg aW4gcGFnaW5nX2xvZ19kaXJ0eV9kaXNhYmxlKCkgKi8NCitpbnQgc2hhZG93X2Rpc2FibGVfbG9n X2RpcnR5KHN0cnVjdCBkb21haW4gKmQpDQorew0KKyAgICBpbnQgcmV0Ow0KKw0KKyAgICAvKiBz aGFkb3cgbG9jayBpcyByZXF1aXJlZCBoZXJlICovICAgIA0KKyAgICBzaGFkb3dfbG9jayhkKTsN CisgICAgcmV0ID0gc2hhZG93X29uZV9iaXRfZGlzYWJsZShkLCBQR19sb2dfZGlydHkpOw0KKyAg ICBzaGFkb3dfdW5sb2NrKGQpOw0KKyAgICANCisgICAgcmV0dXJuIHJldDsNCit9DQorDQorLyog VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB3ZSBDTEVBTiBsb2cgZGlydHkgYml0bWFwLiBT ZWUgDQorICogcGFnaW5nX2xvZ19kaXJ0eV9vcCgpIGZvciBkZXRhaWxzLiANCisgKi8NCit2b2lk IHNoYWRvd19jbGVhbl9kaXJ0eV9iaXRtYXAoc3RydWN0IGRvbWFpbiAqZCkNCit7DQorICAgIHNo YWRvd19sb2NrKGQpOw0KKyAgICAvKiBOZWVkIHRvIHJldm9rZSB3cml0ZSBhY2Nlc3MgdG8gdGhl IGRvbWFpbidzIHBhZ2VzIGFnYWluLg0KKyAgICAgKiBJbiBmdXR1cmUsIHdlJ2xsIGhhdmUgYSBs ZXNzIGhlYXZ5LWhhbmRlZCBhcHByb2FjaCB0byB0aGlzLA0KKyAgICAgKiBidXQgZm9yIG5vdywg d2UganVzdCB1bnNoYWRvdyBldmVyeXRoaW5nIGV4Y2VwdCBYZW4uICovDQorICAgIHNoYWRvd19i bG93X3RhYmxlcyhkKTsNCisgICAgc2hhZG93X3VubG9jayhkKTsNCit9DQogLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLw0KIC8qIFNoYWRvdy1jb250cm9sIFhFTl9ET01DVEwgZGlzcGF0Y2hlciAqLw0KIA0K QEAgLTMwNDUsMzMgKzI4NjYsOSBAQCBpbnQgc2hhZG93X2RvbWN0bChzdHJ1Y3QgZG9tYWluICpk LA0KIHsNCiAgICAgaW50IHJjLCBwcmVlbXB0ZWQgPSAwOw0KIA0KLSAgICBpZiAoIHVubGlrZWx5 KGQgPT0gY3VycmVudC0+ZG9tYWluKSApDQotICAgIHsNCi0gICAgICAgIGdkcHJpbnRrKFhFTkxP R19JTkZPLCAiRG9tICV1IHRyaWVkIHRvIGRvIGEgc2hhZG93IG9wIG9uIGl0c2VsZi5cbiIsDQot ICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQpOw0KLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7 DQotICAgIH0NCi0NCi0gICAgaWYgKCB1bmxpa2VseShkLT5pc19keWluZykgKQ0KLSAgICB7DQot ICAgICAgICBnZHByaW50ayhYRU5MT0dfSU5GTywgIklnbm9yaW5nIHNoYWRvdyBvcCBvbiBkeWlu ZyBkb21haW4gJXVcbiIsDQotICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQpOw0KLSAgICAg ICAgcmV0dXJuIDA7DQotICAgIH0NCi0NCi0gICAgaWYgKCB1bmxpa2VseShkLT52Y3B1WzBdID09 IE5VTEwpICkNCi0gICAgew0KLSAgICAgICAgU0hBRE9XX0VSUk9SKCJTaGFkb3cgb3Agb24gYSBk b21haW4gKCV1KSB3aXRoIG5vIHZjcHVzXG4iLA0KLSAgICAgICAgICAgICAgICAgICAgIGQtPmRv bWFpbl9pZCk7DQotICAgICAgICByZXR1cm4gLUVJTlZBTDsNCi0gICAgfQ0KLQ0KICAgICBzd2l0 Y2ggKCBzYy0+b3AgKQ0KICAgICB7DQogICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfT0ZG Og0KLSAgICAgICAgaWYgKCBzaGFkb3dfbW9kZV9sb2dfZGlydHkoZCkgKQ0KLSAgICAgICAgICAg IGlmICggKHJjID0gc2hhZG93X2xvZ19kaXJ0eV9kaXNhYmxlKGQpKSAhPSAwICkgDQotICAgICAg ICAgICAgICAgIHJldHVybiByYzsNCiAgICAgICAgIGlmICggZC0+YXJjaC5wYWdpbmcubW9kZSA9 PSBQR19TSF9lbmFibGUgKQ0KICAgICAgICAgICAgIGlmICggKHJjID0gc2hhZG93X3Rlc3RfZGlz YWJsZShkKSkgIT0gMCApIA0KICAgICAgICAgICAgICAgICByZXR1cm4gcmM7DQpAQCAtMzA4MCwx OSArMjg3NywxMCBAQCBpbnQgc2hhZG93X2RvbWN0bChzdHJ1Y3QgZG9tYWluICpkLA0KICAgICBj YXNlIFhFTl9ET01DVExfU0hBRE9XX09QX0VOQUJMRV9URVNUOg0KICAgICAgICAgcmV0dXJuIHNo YWRvd190ZXN0X2VuYWJsZShkKTsNCiANCi0gICAgY2FzZSBYRU5fRE9NQ1RMX1NIQURPV19PUF9F TkFCTEVfTE9HRElSVFk6DQotICAgICAgICByZXR1cm4gc2hhZG93X2xvZ19kaXJ0eV9lbmFibGUo ZCk7DQotDQogICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfRU5BQkxFX1RSQU5TTEFURToN CiAgICAgICAgIHJldHVybiBzaGFkb3dfZW5hYmxlKGQsIFBHX3JlZmNvdW50c3xQR190cmFuc2xh dGUpOw0KIA0KLSAgICBjYXNlIFhFTl9ET01DVExfU0hBRE9XX09QX0NMRUFOOg0KLSAgICBjYXNl IFhFTl9ET01DVExfU0hBRE9XX09QX1BFRUs6DQotICAgICAgICByZXR1cm4gc2hhZG93X2xvZ19k aXJ0eV9vcChkLCBzYyk7DQotDQogICAgIGNhc2UgWEVOX0RPTUNUTF9TSEFET1dfT1BfRU5BQkxF Og0KLSAgICAgICAgaWYgKCBzYy0+bW9kZSAmIFhFTl9ET01DVExfU0hBRE9XX0VOQUJMRV9MT0df RElSVFkgKQ0KLSAgICAgICAgICAgIHJldHVybiBzaGFkb3dfbG9nX2RpcnR5X2VuYWJsZShkKTsN CiAgICAgICAgIHJldHVybiBzaGFkb3dfZW5hYmxlKGQsIHNjLT5tb2RlIDw8IFBHX21vZGVfc2hp ZnQpOw0KIA0KICAgICBjYXNlIFhFTl9ET01DVExfU0hBRE9XX09QX0dFVF9BTExPQ0FUSU9OOg0K ZGlmZiAtciA0NTUxNmFjOTRjOWYgeGVuL2FyY2gveDg2L21tL3NoYWRvdy9tdWx0aS5jDQotLS0g YS94ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRpLmMJV2VkIEp1biAwNiAwODozMjozMiAyMDA3 IC0wNTAwDQorKysgYi94ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRpLmMJV2VkIEp1biAwNiAx MjowODozOCAyMDA3IC0wNTAwDQpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHN0YXRpYyB1MzIgZ3Vlc3Rf c2V0X2FkX2JpdHMoc3RydWN0IHZjcHUNCiAgICAgfQ0KIA0KICAgICAvKiBTZXQgdGhlIGJpdChz KSAqLw0KLSAgICBzaF9tYXJrX2RpcnR5KHYtPmRvbWFpbiwgZ21mbik7DQorICAgIHBhZ2luZ19t YXJrX2RpcnR5KHYtPmRvbWFpbiwgbWZuX3goZ21mbikpOw0KICAgICBTSEFET1dfREVCVUcoQV9B TkRfRCwgImdmbiA9ICUiIFNIX1BSSV9nZm4gIiwgIg0KICAgICAgICAgICAgICAgICAgIm9sZCBm bGFncyA9ICUjeCwgbmV3IGZsYWdzID0gJSN4XG4iLCANCiAgICAgICAgICAgICAgICAgIGdmbl94 KGd1ZXN0X2wxZV9nZXRfZ2ZuKCplcCkpLCBndWVzdF9sMWVfZ2V0X2ZsYWdzKCplcCksIA0KQEAg LTcxNyw3ICs3MTcsNyBAQCBfc2hfcHJvcGFnYXRlKHN0cnVjdCB2Y3B1ICp2LA0KICAgICBpZiAo IHVubGlrZWx5KChsZXZlbCA9PSAxKSAmJiBzaGFkb3dfbW9kZV9sb2dfZGlydHkoZCkpICkNCiAg ICAgew0KICAgICAgICAgaWYgKCBmdCAmIEZFVENIX1RZUEVfV1JJVEUgKSANCi0gICAgICAgICAg ICBzaF9tYXJrX2RpcnR5KGQsIHRhcmdldF9tZm4pOw0KKyAgICAgICAgICAgIHBhZ2luZ19tYXJr X2RpcnR5KGQsIG1mbl94KHRhcmdldF9tZm4pKTsNCiAgICAgICAgIGVsc2UgaWYgKCAhc2hfbWZu X2lzX2RpcnR5KGQsIHRhcmdldF9tZm4pICkNCiAgICAgICAgICAgICBzZmxhZ3MgJj0gfl9QQUdF X1JXOw0KICAgICB9DQpAQCAtMjg1Niw3ICsyODU2LDcgQEAgc3RhdGljIGludCBzaF9wYWdlX2Zh dWx0KHN0cnVjdCB2Y3B1ICp2LA0KICAgICB9DQogDQogICAgIHBlcmZjX2luY3Ioc2hhZG93X2Zh dWx0X2ZpeGVkKTsNCi0gICAgZC0+YXJjaC5wYWdpbmcuc2hhZG93LmZhdWx0X2NvdW50Kys7DQor ICAgIGQtPmFyY2gucGFnaW5nLmxvZ19kaXJ0eS5mYXVsdF9jb3VudCsrOw0KICAgICByZXNldF9l YXJseV91bnNoYWRvdyh2KTsNCiANCiAgZG9uZToNCkBAIC00MDU4LDcgKzQwNTgsNyBAQCBzaF94 ODZfZW11bGF0ZV93cml0ZShzdHJ1Y3QgdmNwdSAqdiwgdW5zDQogICAgIGVsc2UNCiAgICAgICAg IHJlc2V0X2Vhcmx5X3Vuc2hhZG93KHYpOw0KICAgICANCi0gICAgc2hfbWFya19kaXJ0eSh2LT5k b21haW4sIG1mbik7DQorICAgIHBhZ2luZ19tYXJrX2RpcnR5KHYtPmRvbWFpbiwgbWZuX3gobWZu KSk7DQogDQogICAgIHNoX3VubWFwX2RvbWFpbl9wYWdlKGFkZHIpOw0KICAgICBzaGFkb3dfYXVk aXRfdGFibGVzKHYpOw0KQEAgLTQxMTQsNyArNDExNCw3IEBAIHNoX3g4Nl9lbXVsYXRlX2NtcHhj aGcoc3RydWN0IHZjcHUgKnYsIHUNCiAgICAgZWxzZQ0KICAgICAgICAgcmVzZXRfZWFybHlfdW5z aGFkb3codik7DQogDQotICAgIHNoX21hcmtfZGlydHkodi0+ZG9tYWluLCBtZm4pOw0KKyAgICBw YWdpbmdfbWFya19kaXJ0eSh2LT5kb21haW4sIG1mbl94KG1mbikpOw0KIA0KICAgICBzaF91bm1h cF9kb21haW5fcGFnZShhZGRyKTsNCiAgICAgc2hhZG93X2F1ZGl0X3RhYmxlcyh2KTsNCkBAIC00 MTU4LDcgKzQxNTgsNyBAQCBzaF94ODZfZW11bGF0ZV9jbXB4Y2hnOGIoc3RydWN0IHZjcHUgKnYs DQogICAgIGVsc2UNCiAgICAgICAgIHJlc2V0X2Vhcmx5X3Vuc2hhZG93KHYpOw0KIA0KLSAgICBz aF9tYXJrX2RpcnR5KHYtPmRvbWFpbiwgbWZuKTsNCisgICAgcGFnaW5nX21hcmtfZGlydHkodi0+ ZG9tYWluLCBtZm5feChtZm4pKTsNCiANCiAgICAgc2hfdW5tYXBfZG9tYWluX3BhZ2UoYWRkcik7 DQogICAgIHNoYWRvd19hdWRpdF90YWJsZXModik7DQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiB4ZW4v YXJjaC94ODYvbW0vc2hhZG93L3ByaXZhdGUuaA0KLS0tIGEveGVuL2FyY2gveDg2L21tL3NoYWRv dy9wcml2YXRlLmgJV2VkIEp1biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vYXJj aC94ODYvbW0vc2hhZG93L3ByaXZhdGUuaAlXZWQgSnVuIDA2IDA5OjEyOjA4IDIwMDcgLTA1MDAN CkBAIC00OTYsMTMgKzQ5NiwxMyBAQCBzaF9tZm5faXNfZGlydHkoc3RydWN0IGRvbWFpbiAqZCwg bWZuX3QgDQogew0KICAgICB1bnNpZ25lZCBsb25nIHBmbjsNCiAgICAgQVNTRVJUKHNoYWRvd19t b2RlX2xvZ19kaXJ0eShkKSk7DQotICAgIEFTU0VSVChkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGly dHlfYml0bWFwICE9IE5VTEwpOw0KKyAgICBBU1NFUlQoZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5 LmJpdG1hcCAhPSBOVUxMKTsNCiANCiAgICAgLyogV2UgL3JlYWxseS8gbWVhbiBQRk4gaGVyZSwg ZXZlbiBmb3Igbm9uLXRyYW5zbGF0ZWQgZ3Vlc3RzLiAqLw0KICAgICBwZm4gPSBnZXRfZ3Bmbl9m cm9tX21mbihtZm5feChnbWZuKSk7DQogICAgIGlmICggbGlrZWx5KFZBTElEX00yUChwZm4pKQ0K LSAgICAgICAgICYmIGxpa2VseShwZm4gPCBkLT5hcmNoLnBhZ2luZy5zaGFkb3cuZGlydHlfYml0 bWFwX3NpemUpIA0KLSAgICAgICAgICYmIHRlc3RfYml0KHBmbiwgZC0+YXJjaC5wYWdpbmcuc2hh ZG93LmRpcnR5X2JpdG1hcCkgKQ0KKyAgICAgICAgICYmIGxpa2VseShwZm4gPCBkLT5hcmNoLnBh Z2luZy5sb2dfZGlydHkuYml0bWFwX3NpemUpIA0KKyAgICAgICAgICYmIHRlc3RfYml0KHBmbiwg ZC0+YXJjaC5wYWdpbmcubG9nX2RpcnR5LmJpdG1hcCkgKQ0KICAgICAgICAgcmV0dXJuIDE7DQog DQogICAgIHJldHVybiAwOw0KZGlmZiAtciA0NTUxNmFjOTRjOWYgeGVuL2luY2x1ZGUvYXNtLXg4 Ni9kb21haW4uaA0KLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaAlXZWQgSnVuIDA2 IDA4OjMyOjMyIDIwMDcgLTA1MDANCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvZG9tYWluLmgJ V2VkIEp1biAwNiAxMjozNDoyNCAyMDA3IC0wNTAwDQpAQCAtOTIsMTQgKzkyLDYgQEAgc3RydWN0 IHNoYWRvd19kb21haW4gew0KIA0KICAgICAvKiBGYXN0IE1NSU8gcGF0aCBoZXVyaXN0aWMgKi8N CiAgICAgaW50IGhhc19mYXN0X21taW9fZW50cmllczsNCi0NCi0gICAgLyogU2hhZG93IGxvZy1k aXJ0eSBiaXRtYXAgKi8NCi0gICAgdW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwOw0KLSAgICB1 bnNpZ25lZCBpbnQgZGlydHlfYml0bWFwX3NpemU7ICAvKiBpbiBwYWdlcywgYml0IHBlciBwYWdl ICovDQotDQotICAgIC8qIFNoYWRvdyBsb2ctZGlydHkgbW9kZSBzdGF0cyAqLw0KLSAgICB1bnNp Z25lZCBpbnQgZmF1bHRfY291bnQ7DQotICAgIHVuc2lnbmVkIGludCBkaXJ0eV9jb3VudDsNCiB9 Ow0KIA0KIHN0cnVjdCBzaGFkb3dfdmNwdSB7DQpAQCAtMTM0LDcgKzEyNiw2IEBAIHN0cnVjdCBo YXBfZG9tYWluIHsNCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLw0KIC8qICAgICAgIHAybSBoYW5kbGluZyAgICAgICAgICAgICAgICAgICAgICAgICAg ICovDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8N Ci0NCiBzdHJ1Y3QgcDJtX2RvbWFpbiB7DQogICAgIC8qIExvY2sgdGhhdCBwcm90ZWN0cyB1cGRh dGVzIHRvIHRoZSBwMm0gKi8NCiAgICAgc3BpbmxvY2tfdCAgICAgICAgIGxvY2s7DQpAQCAtMTU2 LDE2ICsxNDcsMzYgQEAgc3RydWN0IHAybV9kb21haW4gew0KIC8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogLyogICAgICAgY29tbW9uIHBhZ2luZyBk YXRhIHN0cnVjdHVyZSAgICAgICAgICAgKi8NCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLw0KK3N0cnVjdCBsb2dfZGlydHlfZG9tYWluIHsNCisgICAg LyogbG9nLWRpcnR5IGxvY2sgKi8NCisgICAgc3BpbmxvY2tfdCAgICAgbG9jazsNCisgICAgaW50 ICAgICAgICAgICAgbG9ja2VyOyAvKiBwcm9jZXNzb3IgdGhhdCBob2xkcyB0aGUgbG9jayAqLw0K KyAgICBjb25zdCBjaGFyICAgICpsb2NrZXJfZnVuY3Rpb247IC8qIGZ1bmMgdGhhdCB0b29rIGl0 ICovDQorDQorICAgIC8qIGxvZy1kaXJ0eSBiaXRtYXAgdG8gcmVjb3JkIGRpcnR5IHBhZ2VzICov DQorICAgIHVuc2lnbmVkIGxvbmcgKmJpdG1hcDsNCisgICAgdW5zaWduZWQgaW50ICAgYml0bWFw X3NpemU7ICAvKiBpbiBwYWdlcywgYml0IHBlciBwYWdlICovDQorDQorICAgIC8qIGxvZy1kaXJ0 eSBtb2RlIHN0YXRzICovDQorICAgIHVuc2lnbmVkIGludCAgIGZhdWx0X2NvdW50Ow0KKyAgICB1 bnNpZ25lZCBpbnQgICBkaXJ0eV9jb3VudDsNCisNCisgICAgLyogZnVuY3Rpb25zIHdoaWNoIGFy ZSBwYWdpbmcgbW9kZSBzcGVjaWZpYyAqLw0KKyAgICBpbnQgICAgICAgICAgICAoKmVuYWJsZV9s b2dfZGlydHkgICApKHN0cnVjdCBkb21haW4gKmQpOw0KKyAgICBpbnQgICAgICAgICAgICAoKmRp c2FibGVfbG9nX2RpcnR5ICApKHN0cnVjdCBkb21haW4gKmQpOw0KKyAgICB2b2lkICAgICAgICAg ICAoKmNsZWFuX2RpcnR5X2JpdG1hcCApKHN0cnVjdCBkb21haW4gKmQpOw0KK307DQorDQogc3Ry dWN0IHBhZ2luZ19kb21haW4gew0KLSAgICB1MzIgICAgICAgICAgICAgICBtb2RlOyAgLyogZmxh Z3MgdG8gY29udHJvbCBwYWdpbmcgb3BlcmF0aW9uICovDQotDQorICAgIC8qIGZsYWdzIHRvIGNv bnRyb2wgcGFnaW5nIG9wZXJhdGlvbiAqLw0KKyAgICB1MzIgICAgICAgICAgICAgICAgICAgICBt b2RlOw0KICAgICAvKiBleHRlbnNpb24gZm9yIHNoYWRvdyBwYWdpbmcgc3VwcG9ydCAqLw0KLSAg ICBzdHJ1Y3Qgc2hhZG93X2RvbWFpbiBzaGFkb3c7DQotDQotICAgIC8qIE90aGVyIHBhZ2luZyBh c3Npc3RhbmNlIGNvZGUgd2lsbCBoYXZlIHN0cnVjdHMgaGVyZSAqLw0KLSAgICBzdHJ1Y3QgaGFw X2RvbWFpbiAgICBoYXA7DQotfTsNCi0NCisgICAgc3RydWN0IHNoYWRvd19kb21haW4gICAgc2hh ZG93Ow0KKyAgICAvKiBleHRlbnNpb24gZm9yIGhhcmR3YXJlLWFzc2l0ZWQgcGFnaW5nICovDQor ICAgIHN0cnVjdCBoYXBfZG9tYWluICAgICAgIGhhcDsNCisgICAgLyogbG9nIGRpcnR5IHN1cHBv cnQgKi8NCisgICAgc3RydWN0IGxvZ19kaXJ0eV9kb21haW4gbG9nX2RpcnR5Ow0KK307DQogc3Ry dWN0IHBhZ2luZ192Y3B1IHsNCiAgICAgLyogUG9pbnRlcnMgdG8gbW9kZS1zcGVjaWZpYyBlbnRy eSBwb2ludHMuICovDQogICAgIHN0cnVjdCBwYWdpbmdfbW9kZSAqbW9kZTsNCmRpZmYgLXIgNDU1 MTZhYzk0YzlmIHhlbi9pbmNsdWRlL2FzbS14ODYvZ3JhbnRfdGFibGUuaA0KLS0tIGEveGVuL2lu Y2x1ZGUvYXNtLXg4Ni9ncmFudF90YWJsZS5oCVdlZCBKdW4gMDYgMDg6MzI6MzIgMjAwNyAtMDUw MA0KKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9ncmFudF90YWJsZS5oCVdlZCBKdW4gMDYgMTI6 MDM6MjEgMjAwNyAtMDUwMA0KQEAgLTMxLDcgKzMxLDcgQEAgaW50IHJlcGxhY2VfZ3JhbnRfaG9z dF9tYXBwaW5nKA0KICNkZWZpbmUgZ250dGFiX3NoYXJlZF9nbWZuKGQsIHQsIGkpICAgICAgICAg ICAgICAgICAgICAgXA0KICAgICAobWZuX3RvX2dtZm4oZCwgZ250dGFiX3NoYXJlZF9tZm4oZCwg dCwgaSkpKQ0KIA0KLSNkZWZpbmUgZ250dGFiX21hcmtfZGlydHkoZCwgZikgbWFya19kaXJ0eSgo ZCksIChmKSkNCisjZGVmaW5lIGdudHRhYl9tYXJrX2RpcnR5KGQsIGYpIHBhZ2luZ19tYXJrX2Rp cnR5KChkKSwgKGYpKQ0KIA0KIHN0YXRpYyBpbmxpbmUgdm9pZCBnbnR0YWJfY2xlYXJfZmxhZyh1 bnNpZ25lZCBsb25nIG5yLCB1aW50MTZfdCAqYWRkcikNCiB7DQpkaWZmIC1yIDQ1NTE2YWM5NGM5 ZiB4ZW4vaW5jbHVkZS9hc20teDg2L3AybS5oDQotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L3Ay bS5oCVdlZCBKdW4gMDYgMDg6MzI6MzIgMjAwNyAtMDUwMA0KKysrIGIveGVuL2luY2x1ZGUvYXNt LXg4Ni9wMm0uaAlUaHUgSnVuIDA3IDA1OjM3OjEyIDIwMDcgLTA1MDANCkBAIC0xMjksNiArMTI5 LDExIEBAIHZvaWQgZ3Vlc3RfcGh5c21hcF9yZW1vdmVfcGFnZShzdHJ1Y3QgZG8NCiB2b2lkIGd1 ZXN0X3BoeXNtYXBfcmVtb3ZlX3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBn Zm4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuKTsN CiANCisvKiBzZXQgUDJNIHRhYmxlIGwxZSBmbGFncyAqLw0KK3ZvaWQgcDJtX3NldF9mbGFnc19n bG9iYWwoc3RydWN0IGRvbWFpbiAqZCwgdTMyIGwxZV9mbGFncyk7DQorDQorLyogc2V0IFAyTSB0 YWJsZSBsMWUgZmxhZ3MgZm9yIGEgZ3BhICovDQoraW50IHAybV9zZXRfZmxhZ3Moc3RydWN0IGRv bWFpbiAqZCwgcGFkZHJfdCBncGEsIHUzMiBsMWVfZmxhZ3MpOw0KIA0KICNlbmRpZiAvKiBfWEVO X1AyTV9IICovDQogDQpkaWZmIC1yIDQ1NTE2YWM5NGM5ZiB4ZW4vaW5jbHVkZS9hc20teDg2L3Bh Z2luZy5oDQotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L3BhZ2luZy5oCVdlZCBKdW4gMDYgMDg6 MzI6MzIgMjAwNyAtMDUwMA0KKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wYWdpbmcuaAlXZWQg SnVuIDA2IDEyOjM2OjU0IDIwMDcgLTA1MDANCkBAIC02Miw2ICs2Miw5IEBADQogI2RlZmluZSBw YWdpbmdfbW9kZV9sb2dfZGlydHkoX2QpICgoX2QpLT5hcmNoLnBhZ2luZy5tb2RlICYgUEdfbG9n X2RpcnR5KQ0KICNkZWZpbmUgcGFnaW5nX21vZGVfdHJhbnNsYXRlKF9kKSAoKF9kKS0+YXJjaC5w YWdpbmcubW9kZSAmIFBHX3RyYW5zbGF0ZSkNCiAjZGVmaW5lIHBhZ2luZ19tb2RlX2V4dGVybmFs KF9kKSAgKChfZCktPmFyY2gucGFnaW5nLm1vZGUgJiBQR19leHRlcm5hbCkNCisNCisvKiBmbGFn cyB1c2VkIGZvciBwYWdpbmcgZGVidWcgKi8NCisjZGVmaW5lIFBBR0lOR19ERUJVR19MT0dESVJU WSAwDQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIFRoZSBlcXVpdmFsZW50IGZvciBh IHBhcnRpY3VsYXIgdmNwdSBvZiBhIHNoYWRvd2VkIGRvbWFpbi4gKi8NCkBAIC0xMzYsNiArMTM5 LDI5IEBAIHN0cnVjdCBwYWdpbmdfbW9kZSB7DQogICAgIHN0cnVjdCBzaGFkb3dfcGFnaW5nX21v ZGUgc2hhZG93Ow0KIH07DQogDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogTG9nIGRpcnR5 IGNvZGUgKi8NCisNCisvKiBhbGxvY2F0ZSBsb2cgZGlydHkgYml0bWFwIHJlc291cmNlIGZvciBy ZWNvcmRpbmcgZGlydHkgcGFnZXMgKi8NCitpbnQgcGFnaW5nX2FsbG9jX2xvZ19kaXJ0eV9iaXRt YXAoc3RydWN0IGRvbWFpbiAqZCk7DQorDQorLyogZnJlZSBsb2cgZGlydHkgYml0bWFwIHJlc291 cmNlICovDQordm9pZCBwYWdpbmdfZnJlZV9sb2dfZGlydHlfYml0bWFwKHN0cnVjdCBkb21haW4g KmQpOw0KKw0KKy8qIGVuYWJsZSBsb2cgZGlydHkgKi8NCitpbnQgcGFnaW5nX2xvZ19kaXJ0eV9l bmFibGUoc3RydWN0IGRvbWFpbiAqZCk7DQorDQorLyogZGlzYWJsZSBsb2cgZGlydHkgKi8NCitp bnQgcGFnaW5nX2xvZ19kaXJ0eV9kaXNhYmxlKHN0cnVjdCBkb21haW4gKmQpOw0KKw0KKy8qIGxv ZyBkaXJ0eSBpbml0aWFsaXphdGlvbiAqLw0KK3ZvaWQgcGFnaW5nX2xvZ19kaXJ0eV9pbml0KHN0 cnVjdCBkb21haW4gKmQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAoKmVuYWJs ZV9sb2dfZGlydHkpKHN0cnVjdCBkb21haW4gKmQpLA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAgKCpkaXNhYmxlX2xvZ19kaXJ0eSkoc3RydWN0IGRvbWFpbiAqZCksDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNsZWFuX2RpcnR5X2JpdG1hcCkoc3RydWN0IGRv bWFpbiAqZCkpOw0KKw0KKy8qIG1hcmsgYSBwYWdlIGFzIGRpcnR5ICovDQordm9pZCBwYWdpbmdf bWFya19kaXJ0eShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGd1ZXN0X21mbik7DQog DQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqDQogICogRW50cnkgcG9pbnRzIGludG8gdGhlIHBhZ2lu Zy1hc3Npc3RhbmNlIGNvZGUgKi8NCmRpZmYgLXIgNDU1MTZhYzk0YzlmIHhlbi9pbmNsdWRlL2Fz bS14ODYvc2hhZG93LmgNCi0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvc2hhZG93LmgJV2VkIEp1 biAwNiAwODozMjozMiAyMDA3IC0wNTAwDQorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L3NoYWRv dy5oCVdlZCBKdW4gMDYgMTI6Mzc6NTIgMjAwNyAtMDUwMA0KQEAgLTc1LDE2ICs3NSwxNCBAQCB2 b2lkIHNoYWRvd190ZWFyZG93bihzdHJ1Y3QgZG9tYWluICpkKTsNCiAvKiBDYWxsIG9uY2UgYWxs IG9mIHRoZSByZWZlcmVuY2VzIHRvIHRoZSBkb21haW4gaGF2ZSBnb25lIGF3YXkgKi8NCiB2b2lk IHNoYWRvd19maW5hbF90ZWFyZG93bihzdHJ1Y3QgZG9tYWluICpkKTsNCiANCi0vKiBNYXJrIGEg cGFnZSBhcyBkaXJ0eSBpbiB0aGUgbG9nLWRpcnR5IGJpdG1hcDogY2FsbGVkIHdoZW4gWGVuIA0K LSAqIG1ha2VzIGNoYW5nZXMgdG8gZ3Vlc3QgbWVtb3J5IG9uIGl0cyBiZWhhbGYuICovDQotdm9p ZCBzaF9tYXJrX2RpcnR5KHN0cnVjdCBkb21haW4gKmQsIG1mbl90IGdtZm4pOw0KLS8qIENsZWFu ZXIgdmVyc2lvbiBzbyB3ZSBkb24ndCBwZXBwZXIgc2hhZG93X21vZGUgdGVzdHMgYWxsIG92ZXIg dGhlIHBsYWNlICovDQotc3RhdGljIGlubGluZSB2b2lkIG1hcmtfZGlydHkoc3RydWN0IGRvbWFp biAqZCwgdW5zaWduZWQgbG9uZyBnbWZuKQ0KLXsNCi0gICAgaWYgKCB1bmxpa2VseShzaGFkb3df bW9kZV9sb2dfZGlydHkoZCkpICkNCi0gICAgICAgIC8qIFNlZSB0aGUgY29tbWVudCBhYm91dCBs b2NraW5nIGluIHNoX21hcmtfZGlydHkgKi8NCi0gICAgICAgIHNoX21hcmtfZGlydHkoZCwgX21m bihnbWZuKSk7DQotfQ0KKy8qIHNoYWRvdyBjb2RlIHRvIGNhbGwgd2hlbiBsb2cgZGlydHkgaXMg ZW5hYmxlZCAqLw0KK2ludCBzaGFkb3dfZW5hYmxlX2xvZ19kaXJ0eShzdHJ1Y3QgZG9tYWluICpk KTsNCisNCisvKiBzaGFkb3cgY29kZSB0byBjYWxsIHdoZW4gbG9nIGRpcnR5IGlzIGRpc2FibGVk ICovDQoraW50IHNoYWRvd19kaXNhYmxlX2xvZ19kaXJ0eShzdHJ1Y3QgZG9tYWluICpkKTsNCisN CisvKiBzaGFkb3cgY29kZSB0byBjYWxsIHdoZW4gYml0bWFwIGlzIGJlaW5nIGNsZWFuZWQgKi8N Cit2b2lkIHNoYWRvd19jbGVhbl9kaXJ0eV9iaXRtYXAoc3RydWN0IGRvbWFpbiAqZCk7DQogDQog LyogVXBkYXRlIGFsbCB0aGUgdGhpbmdzIHRoYXQgYXJlIGRlcml2ZWQgZnJvbSB0aGUgZ3Vlc3Qn cyBDUjAvQ1IzL0NSNC4NCiAgKiBDYWxsZWQgdG8gaW5pdGlhbGl6ZSBwYWdpbmcgc3RydWN0dXJl cyBpZiB0aGUgcGFnaW5nIG1vZGUNCg== ------_=_NextPart_001_01C7AA02.E412B394 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel ------_=_NextPart_001_01C7AA02.E412B394--