From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dulloor Subject: [PATCH] libxc bitmap utils and vcpu-affinity Date: Sun, 21 Mar 2010 23:33:09 -0400 Message-ID: <940bcfd21003212033t3c3bf074h663337b56dd5954e@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e6d7dfa728e6c004825b5b4f Return-path: 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 --0016e6d7dfa728e6c004825b5b4f Content-Type: text/plain; charset=ISO-8859-1 This patch adds : * A byte-based cpumask type(xenctl_cpumask) for setting vcpu-affinity as well as numa-node-affinity, etc in libxc. * Add common bitmap utils to libxc, which can be used both for xenctl_cpumask (and with small changes for xenctl_cpumap, if desired), so that we can do common operations on cpumask easily. As opposed to xenctl_cpumap, xenctl_cpumask is a static structure (just 4 bytes larger for 128 cpus), but keeps the interface/code cleaner. The domctl_interface version keeps the size of xenctl_cpumask consistent between xen and xen-tools. -dulloor --0016e6d7dfa728e6c004825b5b4f Content-Type: text/x-patch; charset=US-ASCII; name="xc-vcpu-affinity.patch" Content-Disposition: attachment; filename="xc-vcpu-affinity.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g72pzq1o0 ZGlmZiAtciAwNGNiMDgyOWQxMzggdG9vbHMvbGlieGMvTWFrZWZpbGUKLS0tIGEvdG9vbHMvbGli eGMvTWFrZWZpbGUJV2VkIE1hciAxNyAxNDoxMDo0MyAyMDEwICswMDAwCisrKyBiL3Rvb2xzL2xp YnhjL01ha2VmaWxlCVN1biBNYXIgMjEgMjM6MjI6MjYgMjAxMCAtMDQwMApAQCAtMjUsNiArMjUs NyBAQAogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfbWVtX2V2ZW50LmMKIENUUkxfU1JDUy15ICAg ICAgICs9IHhjX21lbV9wYWdpbmcuYwogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfbWVtc2hyLmMK K0NUUkxfU1JDUy15ICAgICAgICs9IHhjX2JpdG1hcC5jCiBDVFJMX1NSQ1MtJChDT05GSUdfWDg2 KSArPSB4Y19wYWdldGFiLmMKIENUUkxfU1JDUy0kKENPTkZJR19MaW51eCkgKz0geGNfbGludXgu YwogQ1RSTF9TUkNTLSQoQ09ORklHX1N1bk9TKSArPSB4Y19zb2xhcmlzLmMKZGlmZiAtciAwNGNi MDgyOWQxMzggdG9vbHMvbGlieGMveGNfYml0bWFwLmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAx IDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvdG9vbHMvbGlieGMveGNfYml0bWFwLmMJU3VuIE1h ciAyMSAyMzoyMjoyNiAyMDEwIC0wNDAwCkBAIC0wLDAgKzEsMjUwIEBACisjaW5jbHVkZSAieGNf Yml0bWFwLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyoKKyAqIHhjX2JpdG1hcF9maW5kX25l eHRfYml0IGlzIGFkYXB0ZWQgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiBnZW5lcmljCisgKiBmaW5k X25leHRfYml0ICogaW4gTGludXgsIHdpdGggZm9sbG93aW5nIGNvcHlyaWdodC4KKyAqIENvcHly aWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0 dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogQWRhcHRl ZCBmb3IgYnl0ZS1iYXNlZCBiaXRtYXAgYnkgRHVsbG9vciAoZHVsbG9vckBnYXRlY2guZWR1KQor ICovCisKKy8qKgorICogX19mZnMgLSBmaW5kIGZpcnN0IGJpdCBpbiBieXRlLgorICogQGJ5dGU6 IFRoZSBieXRlIHRvIHNlYXJjaAorICoKKyAqIFVuZGVmaW5lZCBpZiBubyBiaXQgZXhpc3RzLCBz byBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUg aW50IF9feGNfZmZzKHVpbnQ4X3QgYnl0ZSkKK3sKKwlpbnQgbnVtID0gMDsKKworCWlmICgoYnl0 ZSAmIDB4ZmYpID09IDApIHsKKwkJbnVtICs9IDg7CisJCWJ5dGUgPj49IDg7CisJfQorCWlmICgo Ynl0ZSAmIDB4ZikgPT0gMCkgeworCQludW0gKz0gNDsKKwkJYnl0ZSA+Pj0gNDsKKwl9CisJaWYg KChieXRlICYgMHgzKSA9PSAwKSB7CisJCW51bSArPSAyOworCQlieXRlID4+PSAyOworCX0KKwlp ZiAoKGJ5dGUgJiAweDEpID09IDApCisJCW51bSArPSAxOworCXJldHVybiBudW07Cit9CisKK2lu dAoreGNfYml0bWFwX2ZpbmRfbmV4dF9iaXQoIGNvbnN0IHVpbnQ4X3QgKmFkZHIsIHVpbnQzMl90 IHNpemUsIHVpbnQzMl90IG9mZnNldCkKK3sKKyAgICBjb25zdCB1aW50OF90ICpwOworICAgIHVp bnQzMl90IHJlc3VsdDsKKyAgICB1aW50OF90IHRtcDsKKworICAgIGlmIChvZmZzZXQgPj0gc2l6 ZSkKKyAgICAgICAgcmV0dXJuIHNpemU7CisKKyAgICBwID0gYWRkciArIFhDX0JJVE1BUF9CWVRF KG9mZnNldCk7CisgICAgcmVzdWx0ID0gb2Zmc2V0ICYgfihYQ19CSVRTX1BFUl9CWVRFLTEpOwor CisgICAgc2l6ZSAtPSByZXN1bHQ7CisgICAgb2Zmc2V0ICU9IFhDX0JJVFNfUEVSX0JZVEU7Cisg ICAgaWYgKG9mZnNldCkgeworICAgICAgICB0bXAgPSAqKHArKyk7CisgICAgICAgIHRtcCAmPSAo MHhmZiA8PCBvZmZzZXQpOworICAgICAgICBpZiAoc2l6ZSA8IFhDX0JJVFNfUEVSX0JZVEUpCisg ICAgICAgICAgICBnb3RvIGZvdW5kX2ZpcnN0OworICAgICAgICBpZiAodG1wKQorICAgICAgICAg ICAgZ290byBmb3VuZF9taWRkbGU7CisgICAgICAgIHNpemUgLT0gWENfQklUU19QRVJfQllURTsK KyAgICAgICAgcmVzdWx0ICs9IFhDX0JJVFNfUEVSX0JZVEU7CisgICAgfQorICAgIHdoaWxlIChz aXplICYgfihYQ19CSVRTX1BFUl9CWVRFLTEpKSB7CisgICAgICAgIGlmICgodG1wID0gKihwKysp KSkKKyAgICAgICAgICAgIGdvdG8gZm91bmRfbWlkZGxlOworICAgICAgICByZXN1bHQgKz0gWENf QklUU19QRVJfQllURTsKKyAgICAgICAgc2l6ZSAtPSBYQ19CSVRTX1BFUl9CWVRFOworICAgIH0K KyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgdG1wID0gKnA7CisK K2ZvdW5kX2ZpcnN0OgorICAgIHRtcCAmPSAoMHhmZiA+PiAoWENfQklUU19QRVJfQllURSAtIHNp emUpKTsKKyAgICBpZiAoIXRtcCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdCtzaXplOworZm91bmRf bWlkZGxlOgorICAgIHJldHVybiByZXN1bHQgKyBfX3hjX2Zmcyh0bXApOworfQorCit2b2lkIF9f eGNfYml0bWFwX2FuZCh1aW50OF90ICpkcCwgdWludDhfdCAqczFwLCB1aW50OF90ICpzMnAsIGlu dCBuYml0cykKK3sKKyAgICBpbnQgazsKKyAgICBpbnQgbnIgPSBYQ19CSVRTX1RPX0JZVEVTKG5i aXRzKTsKKworICAgIGZvciAoaz0wOyBrPG5yOyBrKyspCisgICAgICAgIGRwW2tdID0gczFwW2td ICYgczJwW2tdOworfQorCit2b2lkIF9feGNfYml0bWFwX29yKHVpbnQ4X3QgKmRwLCB1aW50OF90 ICpzMXAsIHVpbnQ4X3QgKnMycCwgaW50IG5iaXRzKQoreworICAgIGludCBrOworICAgIGludCBu ciA9IFhDX0JJVFNfVE9fQllURVMobmJpdHMpOworCisgICAgZm9yIChrPTA7IGs8bnI7IGsrKykK KyAgICAgICAgZHBba10gPSBzMXBba10gfCBzMnBba107Cit9CisKK3ZvaWQgX194Y19iaXRtYXBf eG9yKHVpbnQ4X3QgKmRwLCB1aW50OF90ICpzMXAsIHVpbnQ4X3QgKnMycCwgaW50IG5iaXRzKQor eworICAgIGludCBrOworICAgIGludCBuciA9IFhDX0JJVFNfVE9fQllURVMobmJpdHMpOworCisg ICAgZm9yIChrPTA7IGs8bnI7IGsrKykKKyAgICAgICAgZHBba10gPSBzMXBba10gXiBzMnBba107 Cit9CisKK3ZvaWQgX194Y19iaXRtYXBfYW5kbm90KHVpbnQ4X3QgKmRwLCB1aW50OF90ICpzMXAs IHVpbnQ4X3QgKnMycCwgaW50IG5iaXRzKQoreworICAgIGludCBrOworICAgIGludCBuciA9IFhD X0JJVFNfVE9fQllURVMobmJpdHMpOworCisgICAgZm9yIChrPTA7IGs8bnI7IGsrKykKKyAgICAg ICAgZHBba10gPSBzMXBba10gJiB+czJwW2tdOworfQorCit2b2lkIF9feGNfYml0bWFwX2NvbXBs ZW1lbnQodWludDhfdCAqZHAsIHVpbnQ4X3QgKnNwLCBpbnQgbmJpdHMpCit7CisgICAgaW50IGss IGxpbSA9IG5iaXRzL1hDX0JJVFNfUEVSX0JZVEU7CisgICAgZm9yIChrPTA7IGs8bGltOyBrKysp CisgICAgICAgIGRwW2tdID0gfnNwW2tdOworCisgICAgaWYgKG5iaXRzICUgWENfQklUU19QRVJf QllURSkKKyAgICAgICAgZHBba10gPSB+c3Bba10gJiBYQ19CSVRNQVBfTEFTVF9CWVRFX01BU0so bmJpdHMpOworfQorCitpbnQgX194Y19iaXRtYXBfZXF1YWwodWludDhfdCAqczFwLCB1aW50OF90 ICpzMnAsIGludCBuYml0cykKK3sKKyAgICBpbnQgaywgbGltID0gbmJpdHMvWENfQklUU19QRVJf QllURTsKKyAgICBmb3IgKGs9MDsgazxsaW07IGsrKykKKyAgICAgICAgaWYgKHMxcFtrXSAhPSBz MnBba10pCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChuYml0cyAlIFhDX0JJVFNf UEVSX0JZVEUpCisgICAgICAgIGlmICgoczFwW2tdIF4gczJwW2tdKSAmIFhDX0JJVE1BUF9MQVNU X0JZVEVfTUFTSyhuYml0cykpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAx OworfQorCitpbnQgX194Y19iaXRtYXBfaW50ZXJzZWN0cyh1aW50OF90ICpzMXAsIHVpbnQ4X3Qg KnMycCwgaW50IG5iaXRzKQoreworICAgIGludCBrLCBsaW0gPSBuYml0cy9YQ19CSVRTX1BFUl9C WVRFOworICAgIGZvciAoaz0wOyBrPGxpbTsgaysrKQorICAgICAgICBpZiAoczFwW2tdICYgczJw W2tdKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICBpZiAobmJpdHMgJSBYQ19CSVRTX1BF Ul9CWVRFKQorICAgICAgICBpZiAoKHMxcFtrXSAmIHMycFtrXSkgJiBYQ19CSVRNQVBfTEFTVF9C WVRFX01BU0sobmJpdHMpKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsK K30KKworaW50IF9feGNfYml0bWFwX3N1YnNldCh1aW50OF90ICpzMXAsIHVpbnQ4X3QgKnMycCwg aW50IG5iaXRzKQoreworICAgIGludCBrLCBsaW0gPSBuYml0cy9YQ19CSVRTX1BFUl9CWVRFOwor ICAgIGZvciAoaz0wOyBrPGxpbTsgaysrKQorICAgICAgICBpZiAoczFwW2tdICYgfnMycFtrXSkK KyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG5iaXRzICUgWENfQklUU19QRVJfQllU RSkKKyAgICAgICAgaWYgKChzMXBba10gJiB+czJwW2tdKSAmIFhDX0JJVE1BUF9MQVNUX0JZVEVf TUFTSyhuYml0cykpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAxOworfQor CitpbnQgX194Y19iaXRtYXBfZW1wdHkodWludDhfdCAqc3AsIGludCBuYml0cykKK3sKKyAgICBp bnQgaywgbGltID0gbmJpdHMvWENfQklUU19QRVJfQllURTsKKyAgICBmb3IgKGs9MDsgazxsaW07 IGsrKykKKyAgICAgICAgaWYgKHNwW2tdKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp ZiAobmJpdHMgJSBYQ19CSVRTX1BFUl9CWVRFKQorICAgICAgICBpZiAoc3Bba10gJiBYQ19CSVRN QVBfTEFTVF9CWVRFX01BU0sobmJpdHMpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy ZXR1cm4gMTsKK30KKworaW50IF9feGNfYml0bWFwX2Z1bGwodWludDhfdCAqc3AsIGludCBuYml0 cykKK3sKKyAgICBpbnQgaywgbGltID0gbmJpdHMvWENfQklUU19QRVJfQllURTsKKyAgICBmb3Ig KGs9MDsgazxsaW07IGsrKykKKyAgICAgICAgaWYgKH5zcFtrXSAmIFhDX0JJVE1BUF9CWVRFX01B U0spCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChuYml0cyAlIFhDX0JJVFNfUEVS X0JZVEUpCisgICAgICAgIGlmICh+c3Bba10gJiBYQ19CSVRNQVBfTEFTVF9CWVRFX01BU0sobmJp dHMpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGlj IGlubGluZSB1aW50OF90IGh3ZWlnaHQ4KHVpbnQ4X3QgdykKK3sKKyAgICB1aW50OF90IHJlcyA9 ICh3ICYgMHg1NSkgKyAoKHcgPj4gMSkgJiAweDU1KTsKKyAgICByZXMgPSAocmVzICYgMHgzMykg KyAoKHJlcyA+PiAyKSAmIDB4MzMpOworICAgIHJldHVybiAocmVzICYgMHgwRikgKyAoKHJlcyA+ PiA0KSAmIDB4MEYpOworfQorCitpbnQgX194Y19iaXRtYXBfd2VpZ2h0KGNvbnN0IHVpbnQ4X3Qg KnNwLCBpbnQgbmJpdHMpCit7CisgICAgaW50IGssIHcgPSAwLCBsaW0gPSBuYml0cy9YQ19CSVRT X1BFUl9CWVRFOworCisgICAgZm9yIChrPTA7IGsgPGxpbTsgaysrKQorICAgICAgICB3ICs9IGh3 ZWlnaHQ4KHNwW2tdKTsKKworICAgIGlmIChuYml0cyAlIFhDX0JJVFNfUEVSX0JZVEUpCisgICAg ICAgIHcgKz0gaHdlaWdodDgoc3Bba10gJiBYQ19CSVRNQVBfTEFTVF9CWVRFX01BU0sobmJpdHMp KTsKKworICAgIHJldHVybiB3OworfQorCisvKiB4ZW5jdGxfY3B1bWFzayBwcmludCBmdW5jdGlv bnMgKi8KKyNkZWZpbmUgQ0hVTktTWgk4CisjZGVmaW5lIHJvdW5kdXBfcG93ZXIyKHZhbCxtb2R1 bHVzKQkoKCh2YWwpICsgKG1vZHVsdXMpIC0gMSkgJiB+KChtb2R1bHVzKSAtIDEpKQorCitpbnQg eGNfYml0bWFwX3NucHJpbnRmKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZmxlbiwKKwljb25z dCB1aW50OF90ICptYXNrcCwgaW50IG5tYXNrYml0cykKK3sKKwlpbnQgaSwgd29yZCwgYml0LCBs ZW4gPSAwOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWNvbnN0IGNoYXIgKnNlcCA9ICIiOworCWlu dCBjaHVua3N6OworCXVpbnQ4X3QgY2h1bmttYXNrOworCisJY2h1bmtzeiA9IG5tYXNrYml0cyAm IChDSFVOS1NaIC0gMSk7CisJaWYgKGNodW5rc3ogPT0gMCkKKwkJY2h1bmtzeiA9IENIVU5LU1o7 CisKKwlpID0gcm91bmR1cF9wb3dlcjIobm1hc2tiaXRzLCBDSFVOS1NaKSAtIENIVU5LU1o7CisJ Zm9yICg7IGkgPj0gMDsgaSAtPSBDSFVOS1NaKSB7CisJCWNodW5rbWFzayA9ICgoMVVMTCA8PCBj aHVua3N6KSAtIDEpOworCQl3b3JkID0gaSAvIFhDX0JJVFNfUEVSX0JZVEU7CisJCWJpdCA9IGkg JSBYQ19CSVRTX1BFUl9CWVRFOworCQl2YWwgPSAobWFza3Bbd29yZF0gPj4gYml0KSAmIGNodW5r bWFzazsKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIGJ1Zmxlbi1sZW4sICIlcyUwKmx4Iiwg c2VwLAorCQkJKGNodW5rc3orMykvNCwgdmFsKTsKKwkJY2h1bmtzeiA9IENIVU5LU1o7CisJCXNl cCA9ICIsIjsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworCmRpZmYgLXIgMDRjYjA4MjlkMTM4IHRv b2xzL2xpYnhjL3hjX2JpdG1hcC5oCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAx OTcwICswMDAwCisrKyBiL3Rvb2xzL2xpYnhjL3hjX2JpdG1hcC5oCVN1biBNYXIgMjEgMjM6MjI6 MjYgMjAxMCAtMDQwMApAQCAtMCwwICsxLDE5MyBAQAorI2lmbmRlZiBfX1hFTkNUTF9CSVRNQVBf SAorI2RlZmluZSBfX1hFTkNUTF9CSVRNQVBfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5j bHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgWENfQklUU19QRVJfQllURSA4CisjZGVmaW5lIFhD X0JJVFNfVE9fQllURVMoYml0cykgXAorICAgICgoKGJpdHMpK1hDX0JJVFNfUEVSX0JZVEUtMSkv WENfQklUU19QRVJfQllURSkKKyNkZWZpbmUgWENfQklUTUFQX0JJVChucikgICAoMSA8PCAobnIp KQorI2RlZmluZSBYQ19CSVRNQVBfQklUX01BU0sobnIpICAoMSA8PCAoKG5yKSAlIFhDX0JJVFNf UEVSX0JZVEUpKQorI2RlZmluZSBYQ19CSVRNQVBfQllURShucikgICgobnIpIC8gWENfQklUU19Q RVJfQllURSkKKworI2RlZmluZSBYQ19CSVRNQVBfQllURV9NQVNLICgweGZmKQorI2RlZmluZSBY Q19CSVRNQVBfTEFTVF9CWVRFX01BU0sobmJpdHMpCQkJCQlcCisJKCgobmJpdHMpICUgWENfQklU U19QRVJfQllURSkgPwkJICAgICAgICAgICAgICAgIFwKKwkJKCgxPDwoKG5iaXRzKSAlIFhDX0JJ VFNfUEVSX0JZVEUpKS0xKSA6ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IFhDX0JJVE1BUF9CWVRFX01BU0spCisKKyNkZWZpbmUgeGNfYml0bWFwX2ZpbmRfZmlyc3RfYml0 KGFkZHIsIHNpemUpICAgICAgICBcCisgICAgICAgICAgICB4Y19iaXRtYXBfZmluZF9uZXh0X2Jp dChhZGRyLCBzaXplLCAwKQorZXh0ZXJuIGludAoreGNfYml0bWFwX2ZpbmRfbmV4dF9iaXQoY29u c3QgdWludDhfdCAqYWRkciwgdWludDMyX3Qgc2l6ZSwgdWludDMyX3Qgb2Zmc2V0KTsKK2V4dGVy biBpbnQKK3hjX2JpdG1hcF9maW5kX25leHRfYml0KGNvbnN0IHVpbnQ4X3QgKmFkZHIsIHVpbnQz Ml90IHNpemUsIHVpbnQzMl90IG9mZnNldCk7CisKKyNkZWZpbmUgeGNfYml0bWFwX2ZpbmRfZmly c3RfemVyb19iaXQoYWRkciwgc2l6ZSkgXAorICAgICAgICAgICAgeGNfYml0bWFwX2ZpbmRfbmV4 dF96ZXJvX2JpdChhZGRyLCBzaXplLCAwKQorZXh0ZXJuIGludCB4Y19iaXRtYXBfZmluZF9uZXh0 X3plcm9fYml0KAorICAgICAgICBjb25zdCB1aW50OF90ICphZGRyLCB1aW50MzJfdCBzaXplLCB1 aW50MzJfdCBvZmZzZXQpOworCitleHRlcm4gdm9pZCBfX3hjX2JpdG1hcF9hbmQodWludDhfdCAq ZHAsIHVpbnQ4X3QgKnMxcCwgdWludDhfdCAqczJwLCBpbnQgbmJpdHMpOworZXh0ZXJuIHZvaWQg X194Y19iaXRtYXBfb3IodWludDhfdCAqZHAsIHVpbnQ4X3QgKnMxcCwgdWludDhfdCAqczJwLCBp bnQgbmJpdHMpOworZXh0ZXJuIHZvaWQgX194Y19iaXRtYXBfeG9yKHVpbnQ4X3QgKmRwLCB1aW50 OF90ICpzMXAsIHVpbnQ4X3QgKnMycCwgaW50IG5iaXRzKTsKK2V4dGVybiB2b2lkCitfX3hjX2Jp dG1hcF9hbmRub3QodWludDhfdCAqZHAsIHVpbnQ4X3QgKnMxcCwgdWludDhfdCAqczJwLCBpbnQg bmJpdHMpOworZXh0ZXJuIHZvaWQgX194Y19iaXRtYXBfY29tcGxlbWVudCh1aW50OF90ICpkcCwg dWludDhfdCAqc3AsIGludCBuYml0cyk7CitleHRlcm4gaW50IF9feGNfYml0bWFwX2VxdWFsKHVp bnQ4X3QgKnMxcCwgdWludDhfdCAqczJwLCBpbnQgbmJpdHMpOworZXh0ZXJuIGludCBfX3hjX2Jp dG1hcF9pbnRlcnNlY3RzKHVpbnQ4X3QgKnMxcCwgdWludDhfdCAqczJwLCBpbnQgbmJpdHMpOwor ZXh0ZXJuIGludCBfX3hjX2JpdG1hcF9zdWJzZXQodWludDhfdCAqczFwLCB1aW50OF90ICpzMnAs IGludCBuYml0cyk7CitleHRlcm4gaW50IF9feGNfYml0bWFwX2VtcHR5KHVpbnQ4X3QgKnNwLCBp bnQgbmJpdHMpOworZXh0ZXJuIGludCBfX3hjX2JpdG1hcF9mdWxsKHVpbnQ4X3QgKnNwLCBpbnQg bmJpdHMpOworZXh0ZXJuIGludCBfX3hjX2JpdG1hcF93ZWlnaHQoY29uc3QgdWludDhfdCAqc3As IGludCBuYml0cyk7CisKK2V4dGVybiBpbnQgeGNfYml0bWFwX3NucHJpbnRmKGNoYXIgKmJ1Ziwg dW5zaWduZWQgaW50IGJ1ZmxlbiwKKwljb25zdCB1aW50OF90ICptYXNrcCwgaW50IG5tYXNrYml0 cyk7CisKKworc3RhdGljIGlubGluZSB2b2lkIHhjX2JpdG1hcF9zZXRfYml0KGludCBuciwgdm9s YXRpbGUgdWludDhfdCAqYWRkcikKK3sKKyAgICB1aW50OF90IG1hc2sgPSBYQ19CSVRNQVBfQklU X01BU0sobnIpOworICAgIHVpbnQ4X3QgKnAgPSAoKHVpbnQ4X3QgKilhZGRyKSArIFhDX0JJVE1B UF9CWVRFKG5yKTsKKyAgICAqcCB8PSBtYXNrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeGNf Yml0bWFwX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVpbnQ4X3QgKmFkZHIpCit7CisgICAg dWludDhfdCBtYXNrID0gWENfQklUTUFQX0JJVF9NQVNLKG5yKTsKKyAgICB1aW50OF90ICpwID0g KCh1aW50OF90ICopYWRkcikgKyBYQ19CSVRNQVBfQllURShucik7CisgICAgKnAgJj0gfm1hc2s7 Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHhjX2JpdG1hcF90ZXN0X2JpdChpbnQgbnIsIHZvbGF0 aWxlIHVpbnQ4X3QgKmFkZHIpCit7CisgICAgdWludDhfdCBtYXNrID0gWENfQklUTUFQX0JJVF9N QVNLKG5yKTsKKyAgICB1aW50OF90ICpwID0gKCh1aW50OF90ICopYWRkcikgKyBYQ19CSVRNQVBf QllURShucik7CisgICAgcmV0dXJuICpwICYgbWFzazsKK30KKworc3RhdGljIGlubGluZSB2b2lk IHhjX2JpdG1hcF9maWxsKHVpbnQ4X3QgKmRwLCBpbnQgbmJpdHMpCit7CisgICAgc2l6ZV90IG5i eXRlcyA9IFhDX0JJVFNfVE9fQllURVMobmJpdHMpOworICAgIGlmIChuYnl0ZXMgPiAxKQorICAg ICAgICBtZW1zZXQoZHAsIDB4ZmYsIG5ieXRlcy0xKTsgCisgICAgZHBbbmJ5dGVzLTFdID0gWENf QklUTUFQX0xBU1RfQllURV9NQVNLKG5iaXRzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHhj X2JpdG1hcF96ZXJvKHVpbnQ4X3QgKmRwLCBpbnQgbmJpdHMpCit7CisgICAgc2l6ZV90IG5ieXRl cyA9IFhDX0JJVFNfVE9fQllURVMobmJpdHMpOworICAgIGlmIChuYnl0ZXMgPiAxKQorICAgICAg ICBtZW1zZXQoZHAsIDB4MDAsIG5ieXRlcy0xKTsgCisgICAgZHBbbmJ5dGVzLTFdID0gMDsKK30K KworCitzdGF0aWMgaW5saW5lIHZvaWQKK3hjX2JpdG1hcF9hbmQodWludDhfdCAqZHAsIHVpbnQ4 X3QgKnMxcCwgdWludDhfdCAqczJwLCBpbnQgbmJpdHMpCit7CisgICAgaWYgKG5iaXRzIDw9IFhD X0JJVFNfUEVSX0JZVEUpCisgICAgICAgICpkcCA9ICpzMXAgJiAqczJwOworICAgIGVsc2UKKyAg ICAgICAgX194Y19iaXRtYXBfYW5kKGRwLCBzMXAsIHMycCwgbmJpdHMpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQKK3hjX2JpdG1hcF9vcih1aW50OF90ICpkcCwgdWludDhfdCAqczFwLCB1aW50 OF90ICpzMnAsIGludCBuYml0cykKK3sKKyAgICBpZiAobmJpdHMgPD0gWENfQklUU19QRVJfQllU RSkKKyAgICAgICAgKmRwID0gKnMxcCB8ICpzMnA7CisgICAgZWxzZQorICAgICAgICBfX3hjX2Jp dG1hcF9vcihkcCwgczFwLCBzMnAsIG5iaXRzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit4 Y19iaXRtYXBfeG9yKHVpbnQ4X3QgKmRwLCB1aW50OF90ICpzMXAsIHVpbnQ4X3QgKnMycCwgaW50 IG5iaXRzKQoreworICAgIGlmIChuYml0cyA8PSBYQ19CSVRTX1BFUl9CWVRFKQorICAgICAgICAq ZHAgPSAqczFwIF4gKnMycDsKKyAgICBlbHNlCisgICAgICAgIF9feGNfYml0bWFwX3hvcihkcCwg czFwLCBzMnAsIG5iaXRzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit4Y19iaXRtYXBfYW5k bm90KHVpbnQ4X3QgKmRwLCB1aW50OF90ICpzMXAsIHVpbnQ4X3QgKnMycCwgaW50IG5iaXRzKQor eworICAgIGlmIChuYml0cyA8PSBYQ19CSVRTX1BFUl9CWVRFKQorICAgICAgICAqZHAgPSAqczFw ICYgfigqczJwKTsKKyAgICBlbHNlCisgICAgICAgIF9feGNfYml0bWFwX2FuZG5vdChkcCwgczFw LCBzMnAsIG5iaXRzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit4Y19iaXRtYXBfY29tcGxl bWVudCh1aW50OF90ICpkcCwgdWludDhfdCAqc3AsIGludCBuYml0cykKK3sKKyAgICBpZiAobmJp dHMgPD0gWENfQklUU19QRVJfQllURSkKKyAgICAgICAgKmRwID0gfigqc3ApICYgWENfQklUTUFQ X0xBU1RfQllURV9NQVNLKG5iaXRzKTsKKyAgICBlbHNlCisgICAgICAgIF9feGNfYml0bWFwX2Nv bXBsZW1lbnQoZHAsIHNwLCBuYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit4Y19iaXRt YXBfZXF1YWwodWludDhfdCAqczFwLCB1aW50OF90ICpzMnAsIGludCBuYml0cykKK3sKKyAgICBp ZiAobmJpdHMgPD0gWENfQklUU19QRVJfQllURSkKKyAgICAgICAgcmV0dXJuICEoKCpzMXAgXiAq czJwKSAmIFhDX0JJVE1BUF9MQVNUX0JZVEVfTUFTSyhuYml0cykpOworCisgICAgcmV0dXJuIF9f eGNfYml0bWFwX2VxdWFsKHMxcCwgczJwLCBuYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50 Cit4Y19iaXRtYXBfaW50ZXJzZWN0cyh1aW50OF90ICpzMXAsIHVpbnQ4X3QgKnMycCwgaW50IG5i aXRzKQoreworICAgIGlmIChuYml0cyA8PSBYQ19CSVRTX1BFUl9CWVRFKQorICAgICAgICByZXR1 cm4gKCgqczFwICYgKnMycCkgJiBYQ19CSVRNQVBfTEFTVF9CWVRFX01BU0sobmJpdHMpKTsKKwor ICAgIHJldHVybiBfX3hjX2JpdG1hcF9pbnRlcnNlY3RzKHMxcCwgczJwLCBuYml0cyk7Cit9CisK K3N0YXRpYyBpbmxpbmUgaW50Cit4Y19iaXRtYXBfc3Vic2V0KHVpbnQ4X3QgKnMxcCwgdWludDhf dCAqczJwLCBpbnQgbmJpdHMpCit7CisgICAgaWYgKG5iaXRzIDw9IFhDX0JJVFNfUEVSX0JZVEUp CisgICAgICAgIHJldHVybiAhKCgqczFwICYgfigqczJwKSkgJiBYQ19CSVRNQVBfTEFTVF9CWVRF X01BU0sobmJpdHMpKTsKKworICAgIHJldHVybiBfX3hjX2JpdG1hcF9zdWJzZXQoczFwLCBzMnAs IG5iaXRzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3hjX2JpdG1hcF9lbXB0eSh1aW50OF90 ICpzcCwgaW50IG5iaXRzKQoreworCWlmIChuYml0cyA8PSBYQ19CSVRTX1BFUl9CWVRFKQorCQly ZXR1cm4gISAoKnNwICYgWENfQklUTUFQX0xBU1RfQllURV9NQVNLKG5iaXRzKSk7CisJZWxzZQor CQlyZXR1cm4gX194Y19iaXRtYXBfZW1wdHkoc3AsIG5iaXRzKTsKK30KKworc3RhdGljIGlubGlu ZSBpbnQKK3hjX2JpdG1hcF9mdWxsKHVpbnQ4X3QgKnNwLCBpbnQgbmJpdHMpCit7CisJaWYgKG5i aXRzIDw9IFhDX0JJVFNfUEVSX0JZVEUpCisJCXJldHVybiAhICh+KCpzcCkgJiBYQ19CSVRNQVBf TEFTVF9CWVRFX01BU0sobmJpdHMpKTsKKwllbHNlCisJCXJldHVybiBfX3hjX2JpdG1hcF9mdWxs KHNwLCBuYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKK3hjX2JpdG1hcF93ZWln aHQoY29uc3QgdWludDhfdCAqc3AsIGludCBuYml0cykKK3sKKwlyZXR1cm4gX194Y19iaXRtYXBf d2VpZ2h0KHNwLCBuYml0cyk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkCit4Y19iaXRtYXBf Y29weSh1aW50OF90ICpkcCwgY29uc3QgdWludDhfdCAqc3AsIGludCBuYml0cykKK3sKKyAgICBp ZiAobmJpdHMgPiBYQ19CSVRTX1BFUl9CWVRFKQorICAgICAgICAqZHAgPSAqc3A7CisgICAgZWxz ZQorICAgICAgICBtZW1jcHkoZHAsIHNwLCBYQ19CSVRTX1RPX0JZVEVTKG5iaXRzKSk7Cit9CisK KyNlbmRpZgpkaWZmIC1yIDA0Y2IwODI5ZDEzOCB0b29scy9saWJ4Yy94Y19jcHVtYXNrLmgKLS0t IC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvdG9vbHMvbGli eGMveGNfY3B1bWFzay5oCVN1biBNYXIgMjEgMjM6MjI6MjYgMjAxMCAtMDQwMApAQCAtMCwwICsx LDIxMSBAQAorI2lmbmRlZiBfX1hFTkNUTF9DUFVNQVNLX0gKKyNkZWZpbmUgX19YRU5DVExfQ1BV TUFTS19ICisKKyNpbmNsdWRlIDx4ZW4vZG9tY3RsLmg+CisjaW5jbHVkZSAieGNfYml0bWFwLmgi CisKKy8qIE51bWJlciBvZiBjcHVzIHNldCBpbiB0aGUgYml0bWFwICovCisjZGVmaW5lIHhjX2Nw dW1hc2tfbnVtX2NwdXMobWFzaykJeGNfY3B1bWFza193ZWlnaHQobWFzaykKKworLyoqCisgKiB4 Y19jcHVtYXNrX2ZpcnN0IC0gZ2V0IHRoZSBmaXJzdCBjcHUgaW4gYSB4ZW5jdGxfY3B1bWFzawor ICogQHNyY3A6IHRoZSB4ZW5jdGxfY3B1bWFzayBwb2ludGVyCisgKgorICogUmV0dXJucyA+PSB4 Y19jcHVtYXNrX2xlbihzcmNwKSBpZiBubyBjcHVzIHNldC4KKyAqLworc3RhdGljIGlubGluZSB1 bnNpZ25lZCBpbnQKK3hjX2NwdW1hc2tfZmlyc3Qoc3RydWN0IHhlbmN0bF9jcHVtYXNrICpzcmNw KQoreworCXJldHVybiB4Y19iaXRtYXBfZmluZF9maXJzdF9iaXQoeGNfY3B1bWFza19iaXRzKHNy Y3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNf Y3B1bWFza19sZW4oc3JjcCkpOworfQorCisvKioKKyAqIHhjX2NwdW1hc2tfbmV4dCAtIGdldCB0 aGUgbmV4dCBjcHUgaW4gYSB4ZW5jdGxfY3B1bWFzaworICogQG46IHRoZSBjcHUgcHJpb3IgdG8g dGhlIHBsYWNlIHRvIHNlYXJjaCAoaWUuIHJldHVybiB3aWxsIGJlID4gQG4pCisgKiBAc3JjcDog dGhlIHhlbmN0bF9jcHVtYXNrIHBvaW50ZXIKKyAqCisgKiBSZXR1cm5zID49IHhjX2NwdW1hc2tf bGVuKHNyY3ApIGlmIG5vIGZ1cnRoZXIgY3B1cyBzZXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWlu dDMyX3QKK3hjX2NwdW1hc2tfbmV4dChpbnQgbiwgc3RydWN0IHhlbmN0bF9jcHVtYXNrICpzcmNw KQoreworCXJldHVybiB4Y19iaXRtYXBfZmluZF9uZXh0X2JpdCh4Y19jcHVtYXNrX2JpdHMoc3Jj cCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNfY3B1bWFza19s ZW4oc3JjcCksIG4rMSk7Cit9CisKKyNpZiAwCitzdGF0aWMgaW5saW5lIHVpbnQzMl90Cit4Y19j cHVtYXNrX25leHRfemVybyhpbnQgbiwgc3RydWN0IHhlbmN0bF9jcHVtYXNrICpzcmNwKQorewor CXJldHVybiB4Y19iaXRtYXBfZmluZF9uZXh0X3plcm9fYml0KHhjX2NwdW1hc2tfYml0cyhzcmNw KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Y19jcHVtYXNrX2xl bihzcmNwKSwgbisxKTsKK30KKyNlbmRpZgorCisvKioKKyAqIHhjX2Zvcl9lYWNoX2NwdSAtIGl0 ZXJhdGUgb3ZlciBldmVyeSBjcHUgaW4gYSBtYXNrCisgKiBAY3B1OiB0aGUgKG9wdGlvbmFsbHkg dW5zaWduZWQpIGludGVnZXIgaXRlcmF0b3IKKyAqIEBtYXNrOiB0aGUgeGVuY3RsX2NwdW1hc2sg cG9pbnRlcgorICoKKyAqIEFmdGVyIHRoZSBsb29wLCBjcHUgaXMgPj0geGNfY3B1bWFza19sZW4o bWFzaykKKyAqLworI2RlZmluZSB4Y19mb3JfZWFjaF9jcHUoY3B1LCBtYXNrKQkJCQlcCisgICAg ICAgICAgICBfX3hjX2Zvcl9lYWNoX2NwdShjcHUsICYobWFzaykpCisKKyNkZWZpbmUgX194Y19m b3JfZWFjaF9jcHUoY3B1LCBtYXNrKSAgICAgICAgICAgIFwKKwlmb3IgKChjcHUpID0gLTE7CQkJ CSAgICAgICAgICAgIFwKKwkJKGNwdSkgPSB4Y19jcHVtYXNrX25leHQoKGNwdSksIChtYXNrKSks CVwKKwkJKGNwdSkgPCB4Y19jcHVtYXNrX2xlbihtYXNrKTspCisKKworI2RlZmluZSB4Y19jcHVt YXNrX2VxdWFsKHNyYzEsIHNyYzIpIF9feGNfY3B1bWFza19lcXVhbCgmKHNyYzEpLCAmKHNyYzIp KQorc3RhdGljIGlubGluZSBpbnQKK19feGNfY3B1bWFza19lcXVhbChzdHJ1Y3QgeGVuY3RsX2Nw dW1hc2sgKnMxcCwgc3RydWN0IHhlbmN0bF9jcHVtYXNrICpzMnApCit7CisJcmV0dXJuIHhjX2Jp dG1hcF9lcXVhbCh4Y19jcHVtYXNrX2JpdHMoczFwKSwgeGNfY3B1bWFza19iaXRzKHMycCksIAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNfY3B1bWFz a19sZW4oczFwKSk7Cit9CisKKyNkZWZpbmUgeGNfY3B1bWFza19zZXRfY3B1KGNwdSwgZHN0KSBf X3hjX2NwdW1hc2tfc2V0X2NwdShjcHUsICYoZHN0KSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3hj X2NwdW1hc2tfc2V0X2NwdShpbnQgY3B1LCBzdHJ1Y3QgeGVuY3RsX2NwdW1hc2sgKmRzdHApCit7 CisJeGNfYml0bWFwX3NldF9iaXQoY3B1LCB4Y19jcHVtYXNrX2JpdHMoZHN0cCkpOworfQorCisj ZGVmaW5lIHhjX2NwdW1hc2tfY2xlYXJfY3B1KGNwdSwgZHN0KSBfX3hjX2NwdW1hc2tfY2xlYXJf Y3B1KGNwdSwgJihkc3QpKQorc3RhdGljIGlubGluZSB2b2lkIF9feGNfY3B1bWFza19jbGVhcl9j cHUoaW50IGNwdSwgc3RydWN0IHhlbmN0bF9jcHVtYXNrICpkc3RwKQoreworCXhjX2JpdG1hcF9j bGVhcl9iaXQoY3B1LCB4Y19jcHVtYXNrX2JpdHMoZHN0cCkpOworfQorCisjZGVmaW5lIHhjX2Nw dW1hc2tfdGVzdF9jcHUoY3B1LCBkc3QpIF9feGNfY3B1bWFza190ZXN0X2NwdShjcHUsICYoZHN0 KSkKK3N0YXRpYyBpbmxpbmUgaW50IF9feGNfY3B1bWFza190ZXN0X2NwdShpbnQgY3B1LCBzdHJ1 Y3QgeGVuY3RsX2NwdW1hc2sgKmRzdHApCit7CisgICAgcmV0dXJuIHhjX2JpdG1hcF90ZXN0X2Jp dChjcHUsIHhjX2NwdW1hc2tfYml0cyhkc3RwKSk7Cit9CisKKworI2RlZmluZSB4Y19jcHVtYXNr X3NldGFsbChkc3QpIF9feGNfY3B1bWFza19zZXRhbGwoJihkc3QpKQorc3RhdGljIGlubGluZSB2 b2lkIF9feGNfY3B1bWFza19zZXRhbGwoc3RydWN0IHhlbmN0bF9jcHVtYXNrICpkc3RwKQorewor CXhjX2JpdG1hcF9maWxsKHhjX2NwdW1hc2tfYml0cyhkc3RwKSwgeGNfY3B1bWFza19sZW4oZHN0 cCkpOworfQorCisjZGVmaW5lIHhjX2NwdW1hc2tfY2xlYXJhbGwoZHN0KSBfX3hjX2NwdW1hc2tf Y2xlYXJhbGwoJihkc3QpKQorc3RhdGljIGlubGluZSB2b2lkIF9feGNfY3B1bWFza19jbGVhcmFs bChzdHJ1Y3QgeGVuY3RsX2NwdW1hc2sgKmRzdHApCit7CisJeGNfYml0bWFwX3plcm8oeGNfY3B1 bWFza19iaXRzKGRzdHApLCB4Y19jcHVtYXNrX2xlbihkc3RwKSk7Cit9CisKKyNkZWZpbmUgeGNf Y3B1bWFza19hbmQoZHN0LCBzcmMxLCBzcmMyKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBf X3hjX2NwdW1hc2tfYW5kKCYoZHN0KSwgJihzcmMxKSwgJihzcmMyKSkKK3N0YXRpYyBpbmxpbmUg dm9pZCBfX3hjX2NwdW1hc2tfYW5kKHN0cnVjdCB4ZW5jdGxfY3B1bWFzayAqZHN0cCwKKyAgICAg ICAgc3RydWN0IHhlbmN0bF9jcHVtYXNrICpzcmMxcCwgc3RydWN0IHhlbmN0bF9jcHVtYXNrICpz cmMycCkKK3sKKwl4Y19iaXRtYXBfYW5kKHhjX2NwdW1hc2tfYml0cyhkc3RwKSwgeGNfY3B1bWFz a19iaXRzKHNyYzFwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNfY3B1bWFz a19iaXRzKHNyYzJwKSwgeGNfY3B1bWFza19sZW4oZHN0cCkpOworfQorCisjZGVmaW5lIHhjX2Nw dW1hc2tfb3IoZHN0LCBzcmMxLCBzcmMyKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBfX3hj X2NwdW1hc2tfb3IoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpKQorc3RhdGljIGlubGluZSB2b2lk IF9feGNfY3B1bWFza19vcihzdHJ1Y3QgeGVuY3RsX2NwdW1hc2sgKmRzdHAsCisgICAgICAgIHN0 cnVjdCB4ZW5jdGxfY3B1bWFzayAqc3JjMXAsIHN0cnVjdCB4ZW5jdGxfY3B1bWFzayAqc3JjMnAp Cit7CisJeGNfYml0bWFwX29yKHhjX2NwdW1hc2tfYml0cyhkc3RwKSwgeGNfY3B1bWFza19iaXRz KHNyYzFwKSwKKwkJCQkgICAgICAgICAgICAgICAgeGNfY3B1bWFza19iaXRzKHNyYzJwKSwgeGNf Y3B1bWFza19sZW4oZHN0cCkpOworfQorCisjZGVmaW5lIHhjX2NwdW1hc2tfeG9yKGRzdCwgc3Jj MSwgc3JjMikgXAorICAgICAgICAgICAgICAgICAgICAgICAgX194Y19jcHVtYXNrX3hvcigmKGRz dCksICYoc3JjMSksICYoc3JjMikpCitzdGF0aWMgaW5saW5lIHZvaWQgX194Y19jcHVtYXNrX3hv cihzdHJ1Y3QgeGVuY3RsX2NwdW1hc2sgKmRzdHAsCisgICAgICAgIHN0cnVjdCB4ZW5jdGxfY3B1 bWFzayAqc3JjMXAsIHN0cnVjdCB4ZW5jdGxfY3B1bWFzayAqc3JjMnApCit7CisJeGNfYml0bWFw X3hvcih4Y19jcHVtYXNrX2JpdHMoZHN0cCksIHhjX2NwdW1hc2tfYml0cyhzcmMxcCksCisgICAg ICAgICAgICAgICAgICAgICAgICB4Y19jcHVtYXNrX2JpdHMoc3JjMnApLCB4Y19jcHVtYXNrX2xl bihkc3RwKSk7Cit9CisKKyNkZWZpbmUgeGNfY3B1bWFza19hbmRub3QoZHN0LCBzcmMxLCBzcmMy KSBcCisgICAgICAgICAgICAgICAgICAgICAgICBfX3hjX2NwdW1hc2tfYW5kbm90KCYoZHN0KSwg JihzcmMxKSwgJihzcmMyKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZW5jdGxfY3B1bWFza19hbmRu b3Qoc3RydWN0IHhlbmN0bF9jcHVtYXNrICpkc3RwLAorICAgIHN0cnVjdCB4ZW5jdGxfY3B1bWFz ayAqc3JjMXAsIHN0cnVjdCB4ZW5jdGxfY3B1bWFzayAqc3JjMnApCit7CisJeGNfYml0bWFwX2Fu ZG5vdCh4Y19jcHVtYXNrX2JpdHMoZHN0cCksIHhjX2NwdW1hc2tfYml0cyhzcmMxcCksCisgICAg ICAgICAgICAgICAgICAgICAgICB4Y19jcHVtYXNrX2JpdHMoc3JjMnApLCB4Y19jcHVtYXNrX2xl bihkc3RwKSk7Cit9CisKKyNkZWZpbmUgeGNfY3B1bWFza19jb21wbGVtZW50KGRzdCwgc3JjKSBc CisgICAgICAgICAgICAgICAgICAgICAgICBfX3hjX2NwdW1hc2tfY29tcGxlbWVudCgmKGRzdCks ICYoc3JjKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3hjX2NwdW1hc2tfY29tcGxlbWVudChzdHJ1 Y3QgeGVuY3RsX2NwdW1hc2sgKmRzdHAsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHhlbmN0bF9jcHVtYXNrICpzcmNwKQoreworCXhjX2JpdG1hcF9jb21wbGVtZW50KHhjX2Nw dW1hc2tfYml0cyhkc3RwKSwgeGNfY3B1bWFza19iaXRzKHNyY3ApLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNfY3B1bWFza19sZW4oZHN0cCkpOwor fQorCisjZGVmaW5lIHhjX2NwdW1hc2tfaW50ZXJzZWN0cyhzcmMxLCBzcmMyKSBcCisgICAgICAg ICAgICAgICAgICAgICAgICBfX3hjX2NwdW1hc2tfaW50ZXJzZWN0cygmKHNyYzEpLCAmKHNyYzIp KQorc3RhdGljIGlubGluZSBpbnQgX194Y19jcHVtYXNrX2ludGVyc2VjdHMoc3RydWN0IHhlbmN0 bF9jcHVtYXNrICpzcmMxcCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHhlbmN0bF9jcHVtYXNrICpzcmMycCkKK3sKKwlyZXR1cm4geGNfYml0bWFwX2ludGVyc2VjdHMo eGNfY3B1bWFza19iaXRzKHNyYzFwKSwgeGNfY3B1bWFza19iaXRzKHNyYzJwKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNfY3B1bWFz a19sZW4oc3JjMXApKTsKK30KKworI2RlZmluZSB4Y19jcHVtYXNrX3N1YnNldChzcmMxLCBzcmMy KSBcCisgICAgICAgICAgICAgICAgICAgICAgICBfX3hjX2NwdW1hc2tfc3Vic2V0KCYoc3JjMSks ICYoc3JjMikpCitzdGF0aWMgaW5saW5lIGludCBfX3hjX2NwdW1hc2tfc3Vic2V0KHN0cnVjdCB4 ZW5jdGxfY3B1bWFzayAqc3JjMXAsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHhlbmN0bF9jcHVtYXNrICpzcmMycCkKK3sKKwlyZXR1cm4geGNfYml0bWFwX3N1YnNldCh4Y19j cHVtYXNrX2JpdHMoc3JjMXApLCB4Y19jcHVtYXNrX2JpdHMoc3JjMnApLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Y19jcHVtYXNrX2xl bihzcmMxcCkpOworfQorCisjZGVmaW5lIHhjX2NwdW1hc2tfZW1wdHkoc3JjKSBfX3hjX2NwdW1h c2tfZW1wdHkoJihzcmMpKQorc3RhdGljIGlubGluZSBpbnQgX194Y19jcHVtYXNrX2VtcHR5KHN0 cnVjdCB4ZW5jdGxfY3B1bWFzayAqc3JjcCkKK3sKKwlyZXR1cm4geGNfYml0bWFwX2VtcHR5KHhj X2NwdW1hc2tfYml0cyhzcmNwKSwgeGNfY3B1bWFza19sZW4oc3JjcCkpOworfQorCisjZGVmaW5l IHhjX2NwdW1hc2tfZnVsbChzcmMpIF9feGNfY3B1bWFza19mdWxsKCYoc3JjKSkKK3N0YXRpYyBp bmxpbmUgaW50IF9feGNfY3B1bWFza19mdWxsKHN0cnVjdCB4ZW5jdGxfY3B1bWFzayAqc3JjcCkK K3sKKwlyZXR1cm4geGNfYml0bWFwX2Z1bGwoeGNfY3B1bWFza19iaXRzKHNyY3ApLCB4Y19jcHVt YXNrX2xlbihzcmNwKSk7Cit9CisKKyNkZWZpbmUgeGNfY3B1bWFza193ZWlnaHQoc3JjKSBfX3hj X2NwdW1hc2tfd2VpZ2h0KCYoc3JjKSkKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgX194Y19jcHVt YXNrX3dlaWdodChzdHJ1Y3QgeGVuY3RsX2NwdW1hc2sgKnNyY3ApCit7CisJcmV0dXJuIHhjX2Jp dG1hcF93ZWlnaHQoeGNfY3B1bWFza19iaXRzKHNyY3ApLCB4Y19jcHVtYXNrX2xlbihzcmNwKSk7 Cit9CisKKyNkZWZpbmUgeGNfY3B1bWFza19jb3B5KGRzdCwgc3JjKSBfX3hjX2NwdW1hc2tfY29w eSgmKGRzdCksICYoc3JjKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3hjX2NwdW1hc2tfY29weShz dHJ1Y3QgeGVuY3RsX2NwdW1hc2sgKmRzdHAsCisJCQkJICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgeGVuY3RsX2NwdW1hc2sgKnNyY3ApCit7CisJeGNfYml0bWFwX2NvcHkoeGNfY3B1bWFza19i aXRzKGRzdHApLCB4Y19jcHVtYXNrX2JpdHMoc3JjcCksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB4Y19jcHVtYXNrX2xlbihkc3RwKSk7Cit9CisKKyNk ZWZpbmUgWENfQ1BVX01BU0tfTEFTVF9CWVRFIFhDX0JJVE1BUF9MQVNUX0JZVEVfTUFTSyhYRU5D VExfTlJfQ1BVUykKKworI2RlZmluZSBYQ19DUFVNQVNLX0FMTAkJCQkJCQkgICAgICAgICAgICAg ICAgICAgIFwKKy8qKHhlbmN0bF9jcHVtYXNrKSovIHsgewkJCQkJCQkgICAgICAgICAgICAgICAg XAorCVswIC4uLiBYQ19CSVRTX1RPX0JZVEVTKFhFTkNUTF9OUl9DUFVTKS0yXSA9IDB4ZmYsCQkg ICAgICAgIFwKKwlbWENfQklUU19UT19CWVRFUyhYRU5DVExfTlJfQ1BVUyktMV0gPSBYQ19DUFVf TUFTS19MQVNUX0JZVEUgICAgXAorfSB9CisKKyNkZWZpbmUgWENfQ1BVTUFTS19OT05FCQkJCQkJ CSAgICAgICAgICAgIFwKKy8qKHhlbmN0bF9jcHVtYXNrKSovIHsgewkJCQkJCQkgICAgICAgIFwK KwlbMCAuLi4gWENfQklUU19UT19CWVRFUyhYRU5DVExfTlJfQ1BVUyktMV0gPSAgMAkJICAgIFwK K30gfQorCisjZGVmaW5lIHhjX2NwdW1hc2tfc25wcmludGYoYnVmLCBsZW4sIHNyYykgXAorCQkJ X194Y19jcHVtYXNrX3NucHJpbnRmKChidWYpLCAobGVuKSwgJihzcmMpLCBYRU5DVExfTlJfQ1BV UykKK3N0YXRpYyBpbmxpbmUgaW50IF9feGNfY3B1bWFza19zbnByaW50ZihjaGFyICpidWYsIGlu dCBsZW4sCisJCQkJCSAgICAgICAgY29uc3Qgc3RydWN0IHhlbmN0bF9jcHVtYXNrICpzcmNwLCBp bnQgbmJpdHMpCit7CisJcmV0dXJuIHhjX2JpdG1hcF9zbnByaW50ZihidWYsIGxlbiwgc3JjcC0+ Yml0cywgbmJpdHMpOworfQorCisjZW5kaWYgLyogX19YRU5DVExfQ1BVTUFTS19IICovCmRpZmYg LXIgMDRjYjA4MjlkMTM4IHRvb2xzL2xpYnhjL3hjX2RvbWFpbi5jCi0tLSBhL3Rvb2xzL2xpYnhj L3hjX2RvbWFpbi5jCVdlZCBNYXIgMTcgMTQ6MTA6NDMgMjAxMCArMDAwMAorKysgYi90b29scy9s aWJ4Yy94Y19kb21haW4uYwlTdW4gTWFyIDIxIDIzOjIyOjI2IDIwMTAgLTA0MDAKQEAgLTgsNiAr OCw3IEBACiAKICNpbmNsdWRlICJ4Y19wcml2YXRlLmgiCiAjaW5jbHVkZSAieGdfc2F2ZV9yZXN0 b3JlLmgiCisjaW5jbHVkZSAieGNfY3B1bWFzay5oIgogI2luY2x1ZGUgPHhlbi9tZW1vcnkuaD4K ICNpbmNsdWRlIDx4ZW4vaHZtL2h2bV9vcC5oPgogCkBAIC05OCwzOSArOTksMTggQEAKIGludCB4 Y192Y3B1X3NldGFmZmluaXR5KGludCB4Y19oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2Y3B1LAotICAg ICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgKmNwdW1hcCwgaW50IGNwdXNpemUpCisgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGVuY3RsX2NwdW1hc2sgKmNwdW1hc2spCiB7CiAg ICAgREVDTEFSRV9ET01DVEw7CiAgICAgaW50IHJldCA9IC0xOwotICAgIHVpbnQ4X3QgKmxvY2Fs ID0gbWFsbG9jKGNwdXNpemUpOyAKIAotICAgIGlmKGxvY2FsID09IE5VTEwpCi0gICAgewotICAg ICAgICBQRVJST1IoIkNvdWxkIG5vdCBhbGxvYyBtZW1vcnkgZm9yIFhlbiBoeXBlcmNhbGwiKTsK LSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQogICAgIGRvbWN0bC5jbWQgPSBYRU5fRE9NQ1RMX3Nl dHZjcHVhZmZpbml0eTsKICAgICBkb21jdGwuZG9tYWluID0gKGRvbWlkX3QpZG9taWQ7CiAgICAg ZG9tY3RsLnUudmNwdWFmZmluaXR5LnZjcHUgICAgPSB2Y3B1OwotCi0gICAgYml0bWFwXzY0X3Rv X2J5dGUobG9jYWwsIGNwdW1hcCwgY3B1c2l6ZSAqIDgpOwotCi0gICAgc2V0X3hlbl9ndWVzdF9o YW5kbGUoZG9tY3RsLnUudmNwdWFmZmluaXR5LmNwdW1hcC5iaXRtYXAsIGxvY2FsKTsKLQotICAg IGRvbWN0bC51LnZjcHVhZmZpbml0eS5jcHVtYXAubnJfY3B1cyA9IGNwdXNpemUgKiA4OworICAg IGRvbWN0bC51LnZjcHVhZmZpbml0eS5jcHVtYXNrID0gKmNwdW1hc2s7CiAgICAgCi0gICAgaWYg KCBsb2NrX3BhZ2VzKGxvY2FsLCBjcHVzaXplKSAhPSAwICkKLSAgICB7Ci0gICAgICAgIFBFUlJP UigiQ291bGQgbm90IGxvY2sgbWVtb3J5IGZvciBYZW4gaHlwZXJjYWxsIik7Ci0gICAgICAgIGdv dG8gb3V0OwotICAgIH0KLQogICAgIHJldCA9IGRvX2RvbWN0bCh4Y19oYW5kbGUsICZkb21jdGwp OwogCi0gICAgdW5sb2NrX3BhZ2VzKGxvY2FsLCBjcHVzaXplKTsKLQotIG91dDoKLSAgICBmcmVl KGxvY2FsKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0xMzgsMzkgKzExOCwxOSBAQAogaW50 IHhjX3ZjcHVfZ2V0YWZmaW5pdHkoaW50IHhjX2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQzMl90IGRvbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZjcHUsCi0g ICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCAqY3B1bWFwLAotICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGNwdXNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGVu Y3RsX2NwdW1hc2sgKmNwdW1hc2spCiB7CiAgICAgREVDTEFSRV9ET01DVEw7CiAgICAgaW50IHJl dCA9IC0xOwotICAgIHVpbnQ4X3QgKiBsb2NhbCA9IG1hbGxvYyhjcHVzaXplKTsKLQotICAgIGlm KGxvY2FsID09IE5VTEwpCi0gICAgewotICAgICAgICBQRVJST1IoIkNvdWxkIG5vdCBhbGxvYyBt ZW1vcnkgZm9yIFhlbiBoeXBlcmNhbGwiKTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQogCiAg ICAgZG9tY3RsLmNtZCA9IFhFTl9ET01DVExfZ2V0dmNwdWFmZmluaXR5OwogICAgIGRvbWN0bC5k b21haW4gPSAoZG9taWRfdClkb21pZDsKICAgICBkb21jdGwudS52Y3B1YWZmaW5pdHkudmNwdSA9 IHZjcHU7Ci0KLQotICAgIHNldF94ZW5fZ3Vlc3RfaGFuZGxlKGRvbWN0bC51LnZjcHVhZmZpbml0 eS5jcHVtYXAuYml0bWFwLCBsb2NhbCk7Ci0gICAgZG9tY3RsLnUudmNwdWFmZmluaXR5LmNwdW1h cC5ucl9jcHVzID0gY3B1c2l6ZSAqIDg7Ci0gICAgCi0gICAgaWYgKCBsb2NrX3BhZ2VzKGxvY2Fs LCBzaXplb2YobG9jYWwpKSAhPSAwICkKLSAgICB7Ci0gICAgICAgIFBFUlJPUigiQ291bGQgbm90 IGxvY2sgbWVtb3J5IGZvciBYZW4gaHlwZXJjYWxsIik7Ci0gICAgICAgIGdvdG8gb3V0OwotICAg IH0KKyAgICB4Y19jcHVtYXNrX2NsZWFyYWxsKGRvbWN0bC51LnZjcHVhZmZpbml0eS5jcHVtYXNr KTsKIAogICAgIHJldCA9IGRvX2RvbWN0bCh4Y19oYW5kbGUsICZkb21jdGwpOwogCi0gICAgdW5s b2NrX3BhZ2VzKGxvY2FsLCBzaXplb2YgKGxvY2FsKSk7Ci0gICAgYml0bWFwX2J5dGVfdG9fNjQo Y3B1bWFwLCBsb2NhbCwgY3B1c2l6ZSAqIDgpOwotb3V0OgotICAgIGZyZWUobG9jYWwpOworICAg ICpjcHVtYXNrID0gZG9tY3RsLnUudmNwdWFmZmluaXR5LmNwdW1hc2s7CiAgICAgcmV0dXJuIHJl dDsKIH0KIApkaWZmIC1yIDA0Y2IwODI5ZDEzOCB0b29scy9saWJ4Yy94ZW5jdHJsLmgKLS0tIGEv dG9vbHMvbGlieGMveGVuY3RybC5oCVdlZCBNYXIgMTcgMTQ6MTA6NDMgMjAxMCArMDAwMAorKysg Yi90b29scy9saWJ4Yy94ZW5jdHJsLmgJU3VuIE1hciAyMSAyMzoyMjoyNiAyMDEwIC0wNDAwCkBA IC0zMDksMTMgKzMwOSwxMSBAQAogaW50IHhjX3ZjcHVfc2V0YWZmaW5pdHkoaW50IHhjX2hhbmRs ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAogICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHZjcHUsCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCAq Y3B1bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNwdXNpemUpOworICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHhlbmN0bF9jcHVtYXNrICpjcHVtYXNrKTsKIGludCB4Y192 Y3B1X2dldGFmZmluaXR5KGludCB4Y19oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2Y3B1LAotICAgICAg ICAgICAgICAgICAgICAgICAgdWludDY0X3QgKmNwdW1hcCwKLSAgICAgICAgICAgICAgICAgICAg ICAgIGludCBjcHVzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ZW5jdGxf Y3B1bWFzayAqY3B1bWFzayk7CiAKIC8qKgogICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBp bmZvcm1hdGlvbiBhYm91dCBvbmUgb3IgbW9yZSBkb21haW5zLiBJdCBpcwpkaWZmIC1yIDA0Y2Iw ODI5ZDEzOCB0b29scy9weXRob24veGVuL2xvd2xldmVsL3hjL3hjLmMKLS0tIGEvdG9vbHMvcHl0 aG9uL3hlbi9sb3dsZXZlbC94Yy94Yy5jCVdlZCBNYXIgMTcgMTQ6MTA6NDMgMjAxMCArMDAwMAor KysgYi90b29scy9weXRob24veGVuL2xvd2xldmVsL3hjL3hjLmMJU3VuIE1hciAyMSAyMzoyMjoy NiAyMDEwIC0wNDAwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAieGNfZG9tLmgiCiAjaW5j bHVkZSA8eGVuL2h2bS9odm1faW5mb190YWJsZS5oPgogI2luY2x1ZGUgPHhlbi9odm0vcGFyYW1z Lmg+CisjaW5jbHVkZSAieGNfY3B1bWFzay5oIgogCiAjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNp emVvZih4KSAvIHNpemVvZigoeClbMF0pKQogCkBAIC0yMTUsMTIgKzIxNiw4IEBACiB7CiAgICAg dWludDMyX3QgZG9tOwogICAgIGludCB2Y3B1ID0gMCwgaTsKLSAgICB1aW50NjRfdCAgKmNwdW1h cDsKICAgICBQeU9iamVjdCAqY3B1bGlzdCA9IE5VTEw7Ci0gICAgaW50IG5yX2NwdXMsIHNpemU7 Ci0gICAgeGNfcGh5c2luZm9fdCBpbmZvOyAKLSAgICB4Y19jcHVfdG9fbm9kZV90IG1hcFsxXTsK LSAgICB1aW50NjRfdCBjcHVtYXBfc2l6ZSA9IHNpemVvZihjcHVtYXApOyAKKyAgICBzdHJ1Y3Qg eGVuY3RsX2NwdW1hc2sgY3B1bWFzayA9IFhDX0NQVU1BU0tfTk9ORTsKIAogICAgIHN0YXRpYyBj aGFyICprd2RfbGlzdFtdID0geyAiZG9taWQiLCAidmNwdSIsICJjcHVtYXAiLCBOVUxMIH07CiAg ICAgCkBAIC0yMjksNDAgKzIyNiwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZG9tLCAmdmNwdSwgJmNwdWxpc3QpICkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAK LSAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShpbmZvLmNwdV90b19ub2RlLCBtYXApOwotICAgIGlu Zm8ubWF4X2NwdV9pZCA9IDE7Ci0gICAgaWYgKCB4Y19waHlzaW5mbyhzZWxmLT54Y19oYW5kbGUs ICZpbmZvKSAhPSAwICkKLSAgICAgICAgcmV0dXJuIHB5eGNfZXJyb3JfdG9fZXhjZXB0aW9uKCk7 Ci0gIAotICAgIG5yX2NwdXMgPSBpbmZvLm5yX2NwdXM7Ci0KLSAgICBzaXplID0gKG5yX2NwdXMg KyBjcHVtYXBfc2l6ZSAqIDggLSAxKS8gKGNwdW1hcF9zaXplICogOCk7Ci0gICAgY3B1bWFwID0g bWFsbG9jKGNwdW1hcF9zaXplICogc2l6ZSk7Ci0gICAgaWYoY3B1bWFwID09IE5VTEwpCi0gICAg ICAgIHJldHVybiBweXhjX2Vycm9yX3RvX2V4Y2VwdGlvbigpOwotICAgIAotCiAgICAgaWYgKCAo Y3B1bGlzdCAhPSBOVUxMKSAmJiBQeUxpc3RfQ2hlY2soY3B1bGlzdCkgKQogICAgIHsKLSAgICAg ICAgZm9yICggaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNw dW1hcFtpXSA9IDBVTEw7Ci0gICAgICAgIH0KICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBQeUxp c3RfU2l6ZShjcHVsaXN0KTsgaSsrICkgCiAgICAgICAgIHsKICAgICAgICAgICAgIGxvbmcgY3B1 ID0gUHlJbnRfQXNMb25nKFB5TGlzdF9HZXRJdGVtKGNwdWxpc3QsIGkpKTsKLSAgICAgICAgICAg ICooY3B1bWFwICsgY3B1IC8gKGNwdW1hcF9zaXplICogOCkpIHw9ICh1aW50NjRfdCkxIDw8IChj cHUgJSAoY3B1bWFwX3NpemUgKiA4KSk7CisgICAgICAgICAgICB4Y19jcHVtYXNrX3NldF9jcHUo Y3B1LCBjcHVtYXNrKTsKICAgICAgICAgfQogICAgIH0KICAgCi0gICAgaWYgKCB4Y192Y3B1X3Nl dGFmZmluaXR5KHNlbGYtPnhjX2hhbmRsZSwgZG9tLCB2Y3B1LCBjcHVtYXAsIHNpemUgKiBjcHVt YXBfc2l6ZSkgIT0gMCApCi0gICAgewotICAgICAgICBmcmVlKGNwdW1hcCk7CisgICAgaWYgKHhj X3ZjcHVfc2V0YWZmaW5pdHkoc2VsZi0+eGNfaGFuZGxlLCBkb20sIHZjcHUsICZjcHVtYXNrKSkK ICAgICAgICAgcmV0dXJuIHB5eGNfZXJyb3JfdG9fZXhjZXB0aW9uKCk7Ci0gICAgfQogCiAgICAg UHlfSU5DUkVGKHplcm8pOwotICAgIGZyZWUoY3B1bWFwKTsgCiAgICAgcmV0dXJuIHplcm87CiB9 CiAKQEAgLTM3NywxNSArMzUzLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5T2JqZWN0ICppbmZvX2RpY3QsICpjcHVsaXN0 OwotCiAgICAgdWludDMyX3QgZG9tLCB2Y3B1ID0gMDsKICAgICB4Y192Y3B1aW5mb190IGluZm87 CiAgICAgaW50IHJjLCBpOwotICAgIHVpbnQ2NF90ICpjcHVtYXA7Ci0gICAgaW50IG5yX2NwdXMs IHNpemU7Ci0gICAgeGNfcGh5c2luZm9fdCBwaW5mbyA9IHsgMCB9OwotICAgIHhjX2NwdV90b19u b2RlX3QgbWFwWzFdOwotICAgIHVpbnQ2NF90IGNwdW1hcF9zaXplID0gc2l6ZW9mKGNwdW1hcCk7 CisgICAgc3RydWN0IHhlbmN0bF9jcHVtYXNrIGNwdW1hc2sgPSBYQ19DUFVNQVNLX05PTkU7CiAK ICAgICBzdGF0aWMgY2hhciAqa3dkX2xpc3RbXSA9IHsgImRvbWlkIiwgInZjcHUiLCBOVUxMIH07 CiAgICAgCkBAIC0zOTMsMjUgKzM2NCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZG9tLCAmdmNwdSkgKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNl dF94ZW5fZ3Vlc3RfaGFuZGxlKHBpbmZvLmNwdV90b19ub2RlLCBtYXApOwotICAgIHBpbmZvLm1h eF9jcHVfaWQgPSAxOwotICAgIGlmICggeGNfcGh5c2luZm8oc2VsZi0+eGNfaGFuZGxlLCAmcGlu Zm8pICE9IDAgKSAKLSAgICAgICAgcmV0dXJuIHB5eGNfZXJyb3JfdG9fZXhjZXB0aW9uKCk7Ci0g ICAgbnJfY3B1cyA9IHBpbmZvLm5yX2NwdXM7CiAgICAgcmMgPSB4Y192Y3B1X2dldGluZm8oc2Vs Zi0+eGNfaGFuZGxlLCBkb20sIHZjcHUsICZpbmZvKTsKICAgICBpZiAoIHJjIDwgMCApCiAgICAg ICAgIHJldHVybiBweXhjX2Vycm9yX3RvX2V4Y2VwdGlvbigpOwotICAgIHNpemUgPSAobnJfY3B1 cyArIGNwdW1hcF9zaXplICogOCAtIDEpLyAoY3B1bWFwX3NpemUgKiA4KTsgCiAKLSAgICBpZigo Y3B1bWFwID0gbWFsbG9jKGNwdW1hcF9zaXplICogc2l6ZSkpID09IE5VTEwpCi0gICAgICAgIHJl dHVybiBweXhjX2Vycm9yX3RvX2V4Y2VwdGlvbigpOyAKLQotICAgIHJjID0geGNfdmNwdV9nZXRh ZmZpbml0eShzZWxmLT54Y19oYW5kbGUsIGRvbSwgdmNwdSwgY3B1bWFwLCBjcHVtYXBfc2l6ZSAq IHNpemUpOworICAgIHJjID0geGNfdmNwdV9nZXRhZmZpbml0eShzZWxmLT54Y19oYW5kbGUsIGRv bSwgdmNwdSwgJmNwdW1hc2spOwogICAgIGlmICggcmMgPCAwICkKLSAgICB7Ci0gICAgICAgIGZy ZWUoY3B1bWFwKTsKICAgICAgICAgcmV0dXJuIHB5eGNfZXJyb3JfdG9fZXhjZXB0aW9uKCk7Ci0g ICAgfQogCiAgICAgaW5mb19kaWN0ID0gUHlfQnVpbGRWYWx1ZSgie3M6aSxzOmksczppLHM6TCxz Oml9IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbmxpbmUiLCAgIGluZm8ub25s aW5lLApAQCAtNDIxLDE4ICszODAsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJjcHUiLCAgICAgIGluZm8uY3B1KTsKIAogICAgIGNwdWxpc3QgPSBQeUxpc3RfTmV3KDApOwot ICAgIGZvciAoIGkgPSAwOyBpIDwgc2l6ZSAqIGNwdW1hcF9zaXplICogODsgaSsrICkKKyAgICB4 Y19mb3JfZWFjaF9jcHUoaSwgY3B1bWFzaykKICAgICB7Ci0gICAgICAgIGlmICgqKGNwdW1hcCAr IGkgLyAoY3B1bWFwX3NpemUgKiA4KSkgJiAxICkgewotICAgICAgICAgICAgUHlPYmplY3QgKnB5 aW50ID0gUHlJbnRfRnJvbUxvbmcoaSk7Ci0gICAgICAgICAgICBQeUxpc3RfQXBwZW5kKGNwdWxp c3QsIHB5aW50KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihweWludCk7Ci0gICAgICAgIH0KLSAg ICAgICAgKihjcHVtYXAgKyBpIC8gKGNwdW1hcF9zaXplICogOCkpID4+PSAxOworICAgICAgICBQ eU9iamVjdCAqcHlpbnQgPSBQeUludF9Gcm9tTG9uZyhpKTsKKyAgICAgICAgUHlMaXN0X0FwcGVu ZChjcHVsaXN0LCBweWludCk7CisgICAgICAgIFB5X0RFQ1JFRihweWludCk7CiAgICAgfQogICAg IFB5RGljdF9TZXRJdGVtU3RyaW5nKGluZm9fZGljdCwgImNwdW1hcCIsIGNwdWxpc3QpOwogICAg IFB5X0RFQ1JFRihjcHVsaXN0KTsKLSAgICBmcmVlKGNwdW1hcCk7CiAgICAgcmV0dXJuIGluZm9f ZGljdDsKIH0KIApkaWZmIC1yIDA0Y2IwODI5ZDEzOCB4ZW4vY29tbW9uL2RvbWN0bC5jCi0tLSBh L3hlbi9jb21tb24vZG9tY3RsLmMJV2VkIE1hciAxNyAxNDoxMDo0MyAyMDEwICswMDAwCisrKyBi L3hlbi9jb21tb24vZG9tY3RsLmMJU3VuIE1hciAyMSAyMzoyMjoyNiAyMDEwIC0wNDAwCkBAIC03 Niw2ICs3NiwzNiBAQAogICAgIGJpdG1hcF9ieXRlX3RvX2xvbmcoY3B1c19hZGRyKCpjcHVtYXNr KSwgYnl0ZW1hcCwgTlJfQ1BVUyk7CiB9CiAKK3ZvaWQgY3B1bWFza190b194ZW5jdGxfY3B1bWFz aygKKyAgICBzdHJ1Y3QgeGVuY3RsX2NwdW1hc2sgKnhlbmN0bF9jcHVtYXNrLCBjcHVtYXNrX3Qg KmNwdW1hc2spCit7CisgICAgdW5zaWduZWQgaW50IG5yX2NwdXM7CisgICAgdWludDhfdCAqYnl0 ZW1hcDsKKworICAgIC8qIGNhbGxlciBtdXN0IHplcm8gb3V0IHRoZSBjcHVtYXNrICovCisgICAg Ynl0ZW1hcCA9IHhjX2NwdW1hc2tfYml0cyh4ZW5jdGxfY3B1bWFzayk7CisgICAgbnJfY3B1cyAg PQorICAgICAgICBtaW5fdCh1bnNpZ25lZCBpbnQsIHhjX2NwdW1hc2tfbGVuKHhlbmN0bF9jcHVt YXNrKSwgTlJfQ1BVUyk7CisKKyAgICBiaXRtYXBfbG9uZ190b19ieXRlKGJ5dGVtYXAsIGNwdXNf YWRkcigqY3B1bWFzayksIG5yX2NwdXMpOworfQorCit2b2lkIHhlbmN0bF9jcHVtYXNrX3RvX2Nw dW1hc2soCisgICAgY3B1bWFza190ICpjcHVtYXNrLCBzdHJ1Y3QgeGVuY3RsX2NwdW1hc2sgKnhl bmN0bF9jcHVtYXNrKQoreworICAgIHVuc2lnbmVkIGludCBucl9jcHVzOworICAgIHVpbnQ4X3Qg KmJ5dGVtYXA7CisKKyAgICBieXRlbWFwID0geGNfY3B1bWFza19iaXRzKHhlbmN0bF9jcHVtYXNr KTsKKworICAgIG5yX2NwdXMgID0KKyAgICAgICAgbWluX3QodW5zaWduZWQgaW50LCB4Y19jcHVt YXNrX2xlbih4ZW5jdGxfY3B1bWFzayksIE5SX0NQVVMpOworCisgICAgYml0bWFwX2J5dGVfdG9f bG9uZyhjcHVzX2FkZHIoKmNwdW1hc2spLCBieXRlbWFwLCBucl9jcHVzKTsKKworICAgIGNwdXNf YW5kKCpjcHVtYXNrLCAqY3B1bWFzaywgY3B1X29ubGluZV9tYXApOworfQorCiBzdGF0aWMgaW5s aW5lIGludCBpc19mcmVlX2RvbWlkKGRvbWlkX3QgZG9tKQogewogICAgIHN0cnVjdCBkb21haW4g KmQ7CkBAIC01NzQsMTUgKzYwNCwxOCBAQAogCiAgICAgICAgIGlmICggb3AtPmNtZCA9PSBYRU5f RE9NQ1RMX3NldHZjcHVhZmZpbml0eSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHhlbmN0bF9j cHVtYXBfdG9fY3B1bWFzaygKLSAgICAgICAgICAgICAgICAmbmV3X2FmZmluaXR5LCAmb3AtPnUu dmNwdWFmZmluaXR5LmNwdW1hcCk7CisgICAgICAgICAgICB4ZW5jdGxfY3B1bWFza190b19jcHVt YXNrKAorICAgICAgICAgICAgICAgICZuZXdfYWZmaW5pdHksICZvcC0+dS52Y3B1YWZmaW5pdHku Y3B1bWFzayk7CiAgICAgICAgICAgICByZXQgPSB2Y3B1X3NldF9hZmZpbml0eSh2LCAmbmV3X2Fm ZmluaXR5KTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAg IGNwdW1hc2tfdG9feGVuY3RsX2NwdW1hcCgKLSAgICAgICAgICAgICAgICAmb3AtPnUudmNwdWFm ZmluaXR5LmNwdW1hcCwgJnYtPmNwdV9hZmZpbml0eSk7Ci0gICAgICAgICAgICByZXQgPSAwOwor ICAgICAgICAgICAgY3B1bWFza190b194ZW5jdGxfY3B1bWFzaygKKyAgICAgICAgICAgICAgICAm b3AtPnUudmNwdWFmZmluaXR5LmNwdW1hc2ssICZ2LT5jcHVfYWZmaW5pdHkpOworICAgICAgICAg ICAgaWYgKCBjb3B5X3RvX2d1ZXN0KHVfZG9tY3RsLCBvcCwgMSkgKQorICAgICAgICAgICAgICAg IHJldCA9IC1FRkFVTFQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0ID0g MDsKICAgICAgICAgfQogCiAgICAgdmNwdWFmZmluaXR5X291dDoKZGlmZiAtciAwNGNiMDgyOWQx MzggeGVuL2luY2x1ZGUvcHVibGljL2RvbWN0bC5oCi0tLSBhL3hlbi9pbmNsdWRlL3B1YmxpYy9k b21jdGwuaAlXZWQgTWFyIDE3IDE0OjEwOjQzIDIwMTAgKzAwMDAKKysrIGIveGVuL2luY2x1ZGUv cHVibGljL2RvbWN0bC5oCVN1biBNYXIgMjEgMjM6MjI6MjYgMjAxMCAtMDQwMApAQCAtMzUsMTEg KzM1LDMyIEBACiAjaW5jbHVkZSAieGVuLmgiCiAjaW5jbHVkZSAiZ3JhbnRfdGFibGUuaCIKIAot I2RlZmluZSBYRU5fRE9NQ1RMX0lOVEVSRkFDRV9WRVJTSU9OIDB4MDAwMDAwMDYKKyNkZWZpbmUg WEVOX0RPTUNUTF9JTlRFUkZBQ0VfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNkZWZpbmUgWEVOQ1RM X05SX0NQVVMgICAgICAgICAgMTI4CisjZGVmaW5lIFhFTkNUTF9CSVRTX1BFUl9CWVRFICAgIDgK KworI2RlZmluZSBYRU5DVExfQklUU19UT19CWVRFUyhiaXRzKSBcCisgICAgKCgoYml0cykrWEVO Q1RMX0JJVFNfUEVSX0JZVEUtMSkvWEVOQ1RMX0JJVFNfUEVSX0JZVEUpCisjZGVmaW5lIFhFTkNU TF9ERUNMQVJFX0JJVE1BUChuYW1lLGJpdHMpIFwKKyAgICB1aW50OF90IG5hbWVbWEVOQ1RMX0JJ VFNfVE9fQllURVMoYml0cyldCisKKy8qIHhlbmN0bF9jcHVtYXNrIDoKKyAqIFRoaXMgaXMgYSBz dGF0aWMgc3RydWN0dXJlIGFzIG9wcG9zZWQgdG8geGVuY3RsX2NwdW1hcC4KKyAqIFdlIGRvbid0 IHBhc3MgYW55IG5yX2NwdXMgcGFyYW1ldGVyLCBidXQgWEVOQ1RMX05SX0NQVVMgaXMga2VwdCBj b25zaXN0ZW50CisgKiBiZXR3ZWVuIHhlbiBhbmQgeGVuLXRvb2xzIHRocm91Z2ggaW50ZXJmYWNl IHZlcnNpb25zLgorICogSG93ZXZlciwgWEVOQ1RMX05SX0NQVVMgYW5kIE5SX0NQVVMgc2hvdWxk IGJlIGVxdWFsLgorICovCisKKyNkZWZpbmUgeGNfY3B1bWFza19iaXRzKG1hc2twKSAoKG1hc2tw KS0+Yml0cykKKyNkZWZpbmUgeGNfY3B1bWFza19sZW4obWFza3ApIChYRU5DVExfTlJfQ1BVUykK K3N0cnVjdCB4ZW5jdGxfY3B1bWFzayB7CisgICAgWEVOQ1RMX0RFQ0xBUkVfQklUTUFQKGJpdHMs IFhFTkNUTF9OUl9DUFVTKTsKK307CiAKIHN0cnVjdCB4ZW5jdGxfY3B1bWFwIHsKKyAgICB1aW50 MzJfdCBucl9jcHVzOwogICAgIFhFTl9HVUVTVF9IQU5ETEVfNjQodWludDgpIGJpdG1hcDsKLSAg ICB1aW50MzJfdCBucl9jcHVzOwogfTsKIAogLyoKQEAgLTI4NSw3ICszMDYsNyBAQAogLyogWEVO X0RPTUNUTF9nZXR2Y3B1YWZmaW5pdHkgKi8KIHN0cnVjdCB4ZW5fZG9tY3RsX3ZjcHVhZmZpbml0 eSB7CiAgICAgdWludDMyX3QgIHZjcHU7ICAgICAgICAgICAgICAvKiBJTiAqLwotICAgIHN0cnVj dCB4ZW5jdGxfY3B1bWFwIGNwdW1hcDsgLyogSU4vT1VUICovCisgICAgc3RydWN0IHhlbmN0bF9j cHVtYXNrIGNwdW1hc2s7IC8qIElOL09VVCAqLwogfTsKIHR5cGVkZWYgc3RydWN0IHhlbl9kb21j dGxfdmNwdWFmZmluaXR5IHhlbl9kb21jdGxfdmNwdWFmZmluaXR5X3Q7CiBERUZJTkVfWEVOX0dV RVNUX0hBTkRMRSh4ZW5fZG9tY3RsX3ZjcHVhZmZpbml0eV90KTsKZGlmZiAtciAwNGNiMDgyOWQx MzggeGVuL2luY2x1ZGUveGVuL2NwdW1hc2suaAotLS0gYS94ZW4vaW5jbHVkZS94ZW4vY3B1bWFz ay5oCVdlZCBNYXIgMTcgMTQ6MTA6NDMgMjAxMCArMDAwMAorKysgYi94ZW4vaW5jbHVkZS94ZW4v Y3B1bWFzay5oCVN1biBNYXIgMjEgMjM6MjI6MjYgMjAxMCAtMDQwMApAQCAtNDI1LDggKzQyNSwx NSBAQAogLyogQ29weSB0by9mcm9tIGNwdW1hcCBwcm92aWRlZCBieSBjb250cm9sIHRvb2xzLiAq Lwogc3RydWN0IHhlbmN0bF9jcHVtYXA7CiB2b2lkIGNwdW1hc2tfdG9feGVuY3RsX2NwdW1hcCgK LSAgICBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqZW5jdGxfY3B1bWFwLCBjcHVtYXNrX3QgKmNwdW1h c2spOworICAgIHN0cnVjdCB4ZW5jdGxfY3B1bWFwICp4ZW5jdGxfY3B1bWFwLCBjcHVtYXNrX3Qg KmNwdW1hc2spOwogdm9pZCB4ZW5jdGxfY3B1bWFwX3RvX2NwdW1hc2soCiAgICAgY3B1bWFza190 ICpjcHVtYXNrLCBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqZW5jdGxfY3B1bWFwKTsKIAorLyogQ29w eSB0by9mcm9tIGNwdW1hc2sgdXNlZCBieSBjb250cm9sIHRvb2xzLiAqLworc3RydWN0IHhlbmN0 bF9jcHVtYXNrOwordm9pZCBjcHVtYXNrX3RvX3hlbmN0bF9jcHVtYXNrKAorICAgIHN0cnVjdCB4 ZW5jdGxfY3B1bWFzayAqeGVuY3RsX2NwdW1hc2ssIGNwdW1hc2tfdCAqY3B1bWFzayk7Cit2b2lk IHhlbmN0bF9jcHVtYXNrX3RvX2NwdW1hc2soCisgICAgY3B1bWFza190ICpjcHVtYXNrLCBzdHJ1 Y3QgeGVuY3RsX2NwdW1hc2sgKnhlbmN0bF9jcHVtYXNrKTsKKwogI2VuZGlmIC8qIF9fWEVOX0NQ VU1BU0tfSCAqLwo= --0016e6d7dfa728e6c004825b5b4f 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 --0016e6d7dfa728e6c004825b5b4f--