From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dulloor Subject: Re: [PATCH] libxc bitmap utils and vcpu-affinity Date: Tue, 23 Mar 2010 12:40:18 -0400 Message-ID: <940bcfd21003230940w7c7d87eas7e1300cfdb633c4c@mail.gmail.com> References: <4BA8A1BC0200007800036662@vpn.id2.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e6d7f07b0a385604827a7859 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: "xen-devel@lists.xensource.com" , Jan Beulich List-Id: xen-devel@lists.xenproject.org --0016e6d7f07b0a385604827a7859 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Fine, I agree with you both. Attached is a patch adding utils for xenctl_bitmap (to libxc) and using the same in vcpu_(get|set)affinity. For the guest-numa interface, I will see if I can use xenctl_cpumap. -dulloor On Tue, Mar 23, 2010 at 7:05 AM, Keir Fraser wr= ote: > On 23/03/2010 10:10, "Jan Beulich" wrote: > >>>>> Dulloor 22.03.10 18:44 >>> >>> Motivation for using xenctl_cpumask in Xen interfaces : >>> - xenctl_cpumap is just 4 bytes smaller than static xenctl_cpumask for >>> 128 cpus (128 would be good for quite some time). However, the new >> >> I don't buy this (we're already building for 256 CPUs, looking forward >> to further bump this in the not too distant future), and I'm generally >> opposed to introducing hard coded limits in a public interface. > > We should use xenctl_cpumask everywhere for specifying physical CPU bitma= ps, > even into guest NUMA interfaces if appropriate. I don't really care if it= is > a bit harder to use than a static bitmap. > > =A0-- Keir > > > --0016e6d7f07b0a385604827a7859 Content-Type: text/x-patch; charset=US-ASCII; name="cpumap-utils.patch" Content-Disposition: attachment; filename="cpumap-utils.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g74xjp4b0 ZGlmZiAtciAwNGNiMDgyOWQxMzggdG9vbHMvbGlieGMvTWFrZWZpbGUKLS0tIGEvdG9vbHMvbGli eGMvTWFrZWZpbGUJV2VkIE1hciAxNyAxNDoxMDo0MyAyMDEwICswMDAwCisrKyBiL3Rvb2xzL2xp YnhjL01ha2VmaWxlCVR1ZSBNYXIgMjMgMTI6Mjk6MjYgMjAxMCAtMDQwMApAQCAtMjUsNiArMjUs NyBAQAogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfbWVtX2V2ZW50LmMKIENUUkxfU1JDUy15ICAg ICAgICs9IHhjX21lbV9wYWdpbmcuYwogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfbWVtc2hyLmMK K0NUUkxfU1JDUy15ICAgICAgICs9IHhjX2JpdG1hcC5jCiBDVFJMX1NSQ1MtJChDT05GSUdfWDg2 KSArPSB4Y19wYWdldGFiLmMKIENUUkxfU1JDUy0kKENPTkZJR19MaW51eCkgKz0geGNfbGludXgu YwogQ1RSTF9TUkNTLSQoQ09ORklHX1N1bk9TKSArPSB4Y19zb2xhcmlzLmMKZGlmZiAtciAwNGNi MDgyOWQxMzggdG9vbHMvbGlieGMveGNfYml0bWFwLmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAx IDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvdG9vbHMvbGlieGMveGNfYml0bWFwLmMJVHVlIE1h ciAyMyAxMjoyOToyNiAyMDEwIC0wNDAwCkBAIC0wLDAgKzEsMjUwIEBACisjaW5jbHVkZSAieGNf 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 OTcwICswMDAwCisrKyBiL3Rvb2xzL2xpYnhjL3hjX2JpdG1hcC5oCVR1ZSBNYXIgMjMgMTI6Mjk6 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 KyNlbmRpZgpkaWZmIC1yIDA0Y2IwODI5ZDEzOCB0b29scy9saWJ4Yy94Y19jcHVtYXAuaAotLS0g L2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi90b29scy9saWJ4 Yy94Y19jcHVtYXAuaAlUdWUgTWFyIDIzIDEyOjI5OjI2IDIwMTAgLTA0MDAKQEAgLTAsMCArMSwy NzQgQEAKKyNpZm5kZWYgX19YRU5DVExfQ1BVTUFQX0gKKyNkZWZpbmUgX19YRU5DVExfQ1BVTUFQ X0gKKworI2luY2x1ZGUgInhjX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJ4Y19iaXRtYXAuaCIKKwor I2RlZmluZSB4Y19jcHVtYXBfYml0cyhtYXNrcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAoeyAgdWludDhfdCAqYml0bWFw OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAg ICAgZ2V0X3hlbl9ndWVzdF9oYW5kbGUoYml0bWFwLCAobWFza3ApLT5iaXRtYXApOyAgXAorICAg ICAgICAgICAgICAgICAgICAgICAgYml0bWFwOyB9KQorI2RlZmluZSB4Y19jcHVtYXBfbGVuKG1h c2twKSAoKG1hc2twKS0+bnJfY3B1cykKKworLyogTnVtYmVyIG9mIGNwdXMgc2V0IGluIHRoZSBi aXRtYXAgKi8KKyNkZWZpbmUgeGNfY3B1bWFwX251bV9jcHVzKG1hc2spCXhjX2NwdW1hcF93ZWln aHQobWFzaykKKworLyoqCisgKiB4Y19jcHVtYXBfZmlyc3QgLSBnZXQgdGhlIGZpcnN0IGNwdSBp biBhIHhlbmN0bF9jcHVtYXAKKyAqIEBzcmNwOiB0aGUgeGVuY3RsX2NwdW1hcCBwb2ludGVyCisg KgorICogUmV0dXJucyA+PSB4Y19jcHVtYXBfbGVuKHNyY3ApIGlmIG5vIGNwdXMgc2V0LgorICov CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAoreGNfY3B1bWFwX2ZpcnN0KHN0cnVjdCB4ZW5j dGxfY3B1bWFwICpzcmNwKQoreworCXJldHVybiB4Y19iaXRtYXBfZmluZF9maXJzdF9iaXQoeGNf Y3B1bWFwX2JpdHMoc3JjcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB4Y19jcHVtYXBfbGVuKHNyY3ApKTsKK30KKworLyoqCisgKiB4Y19jcHVtYXBf bmV4dCAtIGdldCB0aGUgbmV4dCBjcHUgaW4gYSB4ZW5jdGxfY3B1bWFwCisgKiBAbjogdGhlIGNw dSBwcmlvciB0byB0aGUgcGxhY2UgdG8gc2VhcmNoIChpZS4gcmV0dXJuIHdpbGwgYmUgPiBAbikK KyAqIEBzcmNwOiB0aGUgeGVuY3RsX2NwdW1hcCBwb2ludGVyCisgKgorICogUmV0dXJucyA+PSB4 Y19jcHVtYXBfbGVuKHNyY3ApIGlmIG5vIGZ1cnRoZXIgY3B1cyBzZXQuCisgKi8KK3N0YXRpYyBp bmxpbmUgdWludDMyX3QKK3hjX2NwdW1hcF9uZXh0KGludCBuLCBzdHJ1Y3QgeGVuY3RsX2NwdW1h cCAqc3JjcCkKK3sKKwlyZXR1cm4geGNfYml0bWFwX2ZpbmRfbmV4dF9iaXQoeGNfY3B1bWFwX2Jp dHMoc3JjcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNfY3B1 bWFwX2xlbihzcmNwKSwgbisxKTsKK30KKworI2lmIDAKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QK K3hjX2NwdW1hcF9uZXh0X3plcm8oaW50IG4sIHN0cnVjdCB4ZW5jdGxfY3B1bWFwICpzcmNwKQor eworCXJldHVybiB4Y19iaXRtYXBfZmluZF9uZXh0X3plcm9fYml0KHhjX2NwdW1hcF9iaXRzKHNy Y3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhjX2NwdW1hcF9s ZW4oc3JjcCksIG4rMSk7Cit9CisjZW5kaWYKKworLyoqCisgKiB4Y19mb3JfZWFjaF9jcHUgLSBp dGVyYXRlIG92ZXIgZXZlcnkgY3B1IGluIGEgbWFzaworICogQGNwdTogdGhlIChvcHRpb25hbGx5 IHVuc2lnbmVkKSBpbnRlZ2VyIGl0ZXJhdG9yCisgKiBAbWFzazogdGhlIHhlbmN0bF9jcHVtYXAg cG9pbnRlcgorICoKKyAqIEFmdGVyIHRoZSBsb29wLCBjcHUgaXMgPj0geGNfY3B1bWFwX2xlbiht YXNrKQorICovCisjZGVmaW5lIHhjX2Zvcl9lYWNoX2NwdShjcHUsIG1hc2spCQkJCVwKKyAgICAg ICAgICAgIF9feGNfZm9yX2VhY2hfY3B1KGNwdSwgJihtYXNrKSkKKworI2RlZmluZSBfX3hjX2Zv cl9lYWNoX2NwdShjcHUsIG1hc2spICAgICAgICAgICAgXAorCWZvciAoKGNwdSkgPSAtMTsJCQkJ ICAgICAgICAgICAgXAorCQkoY3B1KSA9IHhjX2NwdW1hcF9uZXh0KChjcHUpLCAobWFzaykpLAlc CisJCShjcHUpIDwgeGNfY3B1bWFwX2xlbihtYXNrKTspCisKKworI2RlZmluZSB4Y19jcHVtYXBf ZXF1YWwoc3JjMSwgc3JjMikgX194Y19jcHVtYXBfZXF1YWwoJihzcmMxKSwgJihzcmMyKSkKK3N0 YXRpYyBpbmxpbmUgaW50CitfX3hjX2NwdW1hcF9lcXVhbChzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAq czFwLCBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqczJwKQoreworCXJldHVybiB4Y19iaXRtYXBfZXF1 YWwoeGNfY3B1bWFwX2JpdHMoczFwKSwgeGNfY3B1bWFwX2JpdHMoczJwKSwgCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Y19jcHVtYXBfbGVuKHMxcCkp OworfQorCisjZGVmaW5lIHhjX2NwdW1hcF9zZXRfY3B1KGNwdSwgZHN0KSBfX3hjX2NwdW1hcF9z ZXRfY3B1KGNwdSwgJihkc3QpKQorc3RhdGljIGlubGluZSB2b2lkIF9feGNfY3B1bWFwX3NldF9j cHUoaW50IGNwdSwgc3RydWN0IHhlbmN0bF9jcHVtYXAgKmRzdHApCit7CisJeGNfYml0bWFwX3Nl dF9iaXQoY3B1LCB4Y19jcHVtYXBfYml0cyhkc3RwKSk7Cit9CisKKyNkZWZpbmUgeGNfY3B1bWFw X2NsZWFyX2NwdShjcHUsIGRzdCkgX194Y19jcHVtYXBfY2xlYXJfY3B1KGNwdSwgJihkc3QpKQor c3RhdGljIGlubGluZSB2b2lkIF9feGNfY3B1bWFwX2NsZWFyX2NwdShpbnQgY3B1LCBzdHJ1Y3Qg eGVuY3RsX2NwdW1hcCAqZHN0cCkKK3sKKwl4Y19iaXRtYXBfY2xlYXJfYml0KGNwdSwgeGNfY3B1 bWFwX2JpdHMoZHN0cCkpOworfQorCisjZGVmaW5lIHhjX2NwdW1hcF90ZXN0X2NwdShjcHUsIGRz dCkgX194Y19jcHVtYXBfdGVzdF9jcHUoY3B1LCAmKGRzdCkpCitzdGF0aWMgaW5saW5lIGludCBf X3hjX2NwdW1hcF90ZXN0X2NwdShpbnQgY3B1LCBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqZHN0cCkK K3sKKyAgICByZXR1cm4geGNfYml0bWFwX3Rlc3RfYml0KGNwdSwgeGNfY3B1bWFwX2JpdHMoZHN0 cCkpOworfQorCisKKyNkZWZpbmUgeGNfY3B1bWFwX3NldGFsbChkc3QpIF9feGNfY3B1bWFwX3Nl dGFsbCgmKGRzdCkpCitzdGF0aWMgaW5saW5lIHZvaWQgX194Y19jcHVtYXBfc2V0YWxsKHN0cnVj dCB4ZW5jdGxfY3B1bWFwICpkc3RwKQoreworCXhjX2JpdG1hcF9maWxsKHhjX2NwdW1hcF9iaXRz KGRzdHApLCB4Y19jcHVtYXBfbGVuKGRzdHApKTsKK30KKworI2RlZmluZSB4Y19jcHVtYXBfY2xl YXJhbGwoZHN0KSBfX3hjX2NwdW1hcF9jbGVhcmFsbCgmKGRzdCkpCitzdGF0aWMgaW5saW5lIHZv aWQgX194Y19jcHVtYXBfY2xlYXJhbGwoc3RydWN0IHhlbmN0bF9jcHVtYXAgKmRzdHApCit7CisJ eGNfYml0bWFwX3plcm8oeGNfY3B1bWFwX2JpdHMoZHN0cCksIHhjX2NwdW1hcF9sZW4oZHN0cCkp OworfQorCisjZGVmaW5lIHhjX2NwdW1hcF9hbmQoZHN0LCBzcmMxLCBzcmMyKSBcCisgICAgICAg ICAgICAgICAgICAgICAgICBfX3hjX2NwdW1hcF9hbmQoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIp KQorc3RhdGljIGlubGluZSB2b2lkIF9feGNfY3B1bWFwX2FuZChzdHJ1Y3QgeGVuY3RsX2NwdW1h cCAqZHN0cCwKKyAgICAgICAgc3RydWN0IHhlbmN0bF9jcHVtYXAgKnNyYzFwLCBzdHJ1Y3QgeGVu Y3RsX2NwdW1hcCAqc3JjMnApCit7CisJeGNfYml0bWFwX2FuZCh4Y19jcHVtYXBfYml0cyhkc3Rw KSwgeGNfY3B1bWFwX2JpdHMoc3JjMXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB4Y19jcHVtYXBfYml0cyhzcmMycCksIHhjX2NwdW1hcF9sZW4oZHN0cCkpOworfQorCisjZGVm aW5lIHhjX2NwdW1hcF9vcihkc3QsIHNyYzEsIHNyYzIpIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgIF9feGNfY3B1bWFwX29yKCYoZHN0KSwgJihzcmMxKSwgJihzcmMyKSkKK3N0YXRpYyBpbmxp bmUgdm9pZCBfX3hjX2NwdW1hcF9vcihzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqZHN0cCwKKyAgICAg ICAgc3RydWN0IHhlbmN0bF9jcHVtYXAgKnNyYzFwLCBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqc3Jj MnApCit7CisJeGNfYml0bWFwX29yKHhjX2NwdW1hcF9iaXRzKGRzdHApLCB4Y19jcHVtYXBfYml0 cyhzcmMxcCksCisJCQkJICAgICAgICAgICAgICAgIHhjX2NwdW1hcF9iaXRzKHNyYzJwKSwgeGNf Y3B1bWFwX2xlbihkc3RwKSk7Cit9CisKKyNkZWZpbmUgeGNfY3B1bWFwX3hvcihkc3QsIHNyYzEs IHNyYzIpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9feGNfY3B1bWFwX3hvcigmKGRzdCks ICYoc3JjMSksICYoc3JjMikpCitzdGF0aWMgaW5saW5lIHZvaWQgX194Y19jcHVtYXBfeG9yKHN0 cnVjdCB4ZW5jdGxfY3B1bWFwICpkc3RwLAorICAgICAgICBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAq c3JjMXAsIHN0cnVjdCB4ZW5jdGxfY3B1bWFwICpzcmMycCkKK3sKKwl4Y19iaXRtYXBfeG9yKHhj X2NwdW1hcF9iaXRzKGRzdHApLCB4Y19jcHVtYXBfYml0cyhzcmMxcCksCisgICAgICAgICAgICAg ICAgICAgICAgICB4Y19jcHVtYXBfYml0cyhzcmMycCksIHhjX2NwdW1hcF9sZW4oZHN0cCkpOwor fQorCisjZGVmaW5lIHhjX2NwdW1hcF9hbmRub3QoZHN0LCBzcmMxLCBzcmMyKSBcCisgICAgICAg ICAgICAgICAgICAgICAgICBfX3hjX2NwdW1hcF9hbmRub3QoJihkc3QpLCAmKHNyYzEpLCAmKHNy YzIpKQorc3RhdGljIGlubGluZSB2b2lkIHhlbmN0bF9jcHVtYXBfYW5kbm90KHN0cnVjdCB4ZW5j dGxfY3B1bWFwICpkc3RwLAorICAgIHN0cnVjdCB4ZW5jdGxfY3B1bWFwICpzcmMxcCwgc3RydWN0 IHhlbmN0bF9jcHVtYXAgKnNyYzJwKQoreworCXhjX2JpdG1hcF9hbmRub3QoeGNfY3B1bWFwX2Jp dHMoZHN0cCksIHhjX2NwdW1hcF9iaXRzKHNyYzFwKSwKKyAgICAgICAgICAgICAgICAgICAgICAg IHhjX2NwdW1hcF9iaXRzKHNyYzJwKSwgeGNfY3B1bWFwX2xlbihkc3RwKSk7Cit9CisKKyNkZWZp bmUgeGNfY3B1bWFwX2NvbXBsZW1lbnQoZHN0LCBzcmMpIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgIF9feGNfY3B1bWFwX2NvbXBsZW1lbnQoJihkc3QpLCAmKHNyYykpCitzdGF0aWMgaW5saW5l IHZvaWQgX194Y19jcHVtYXBfY29tcGxlbWVudChzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqZHN0cCwK KwkJCQkgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqc3JjcCkK K3sKKwl4Y19iaXRtYXBfY29tcGxlbWVudCh4Y19jcHVtYXBfYml0cyhkc3RwKSwgeGNfY3B1bWFw X2JpdHMoc3JjcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB4Y19jcHVtYXBfbGVuKGRzdHApKTsKK30KKworI2RlZmluZSB4Y19jcHVtYXBfaW50ZXJz ZWN0cyhzcmMxLCBzcmMyKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBfX3hjX2NwdW1hcF9p bnRlcnNlY3RzKCYoc3JjMSksICYoc3JjMikpCitzdGF0aWMgaW5saW5lIGludCBfX3hjX2NwdW1h cF9pbnRlcnNlY3RzKHN0cnVjdCB4ZW5jdGxfY3B1bWFwICpzcmMxcCwKKwkJCQkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHhlbmN0bF9jcHVtYXAgKnNyYzJwKQoreworCXJldHVy biB4Y19iaXRtYXBfaW50ZXJzZWN0cyh4Y19jcHVtYXBfYml0cyhzcmMxcCksIHhjX2NwdW1hcF9i aXRzKHNyYzJwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeGNfY3B1bWFwX2xlbihzcmMxcCkpOworfQorCisjZGVmaW5lIHhjX2NwdW1h cF9zdWJzZXQoc3JjMSwgc3JjMikgXAorICAgICAgICAgICAgICAgICAgICAgICAgX194Y19jcHVt YXBfc3Vic2V0KCYoc3JjMSksICYoc3JjMikpCitzdGF0aWMgaW5saW5lIGludCBfX3hjX2NwdW1h cF9zdWJzZXQoc3RydWN0IHhlbmN0bF9jcHVtYXAgKnNyYzFwLAorCQkJCSAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB4ZW5jdGxfY3B1bWFwICpzcmMycCkKK3sKKwlyZXR1cm4geGNfYml0 bWFwX3N1YnNldCh4Y19jcHVtYXBfYml0cyhzcmMxcCksIHhjX2NwdW1hcF9iaXRzKHNyYzJwKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eGNfY3B1bWFwX2xlbihzcmMxcCkpOworfQorCisjZGVmaW5lIHhjX2NwdW1hcF9lbXB0eShzcmMp IF9feGNfY3B1bWFwX2VtcHR5KCYoc3JjKSkKK3N0YXRpYyBpbmxpbmUgaW50IF9feGNfY3B1bWFw X2VtcHR5KHN0cnVjdCB4ZW5jdGxfY3B1bWFwICpzcmNwKQoreworCXJldHVybiB4Y19iaXRtYXBf ZW1wdHkoeGNfY3B1bWFwX2JpdHMoc3JjcCksIHhjX2NwdW1hcF9sZW4oc3JjcCkpOworfQorCisj ZGVmaW5lIHhjX2NwdW1hcF9mdWxsKHNyYykgX194Y19jcHVtYXBfZnVsbCgmKHNyYykpCitzdGF0 aWMgaW5saW5lIGludCBfX3hjX2NwdW1hcF9mdWxsKHN0cnVjdCB4ZW5jdGxfY3B1bWFwICpzcmNw KQoreworCXJldHVybiB4Y19iaXRtYXBfZnVsbCh4Y19jcHVtYXBfYml0cyhzcmNwKSwgeGNfY3B1 bWFwX2xlbihzcmNwKSk7Cit9CisKKyNkZWZpbmUgeGNfY3B1bWFwX3dlaWdodChzcmMpIF9feGNf Y3B1bWFwX3dlaWdodCgmKHNyYykpCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IF9feGNfY3B1bWFw X3dlaWdodChzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqc3JjcCkKK3sKKwlyZXR1cm4geGNfYml0bWFw X3dlaWdodCh4Y19jcHVtYXBfYml0cyhzcmNwKSwgeGNfY3B1bWFwX2xlbihzcmNwKSk7Cit9CisK KyNkZWZpbmUgeGNfY3B1bWFwX2NvcHkoZHN0LCBzcmMpIF9feGNfY3B1bWFwX2NvcHkoJihkc3Qp LCAmKHNyYykpCitzdGF0aWMgaW5saW5lIHZvaWQgX194Y19jcHVtYXBfY29weShzdHJ1Y3QgeGVu Y3RsX2NwdW1hcCAqZHN0cCwKKwkJCQkgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ZW5jdGxf Y3B1bWFwICpzcmNwKQoreworCXhjX2JpdG1hcF9jb3B5KHhjX2NwdW1hcF9iaXRzKGRzdHApLCB4 Y19jcHVtYXBfYml0cyhzcmNwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHhjX2NwdW1hcF9sZW4oZHN0cCkpOworfQorCisjaWYgMAorI2RlZmluZSBY Q19DUFVNQVNLX0xBU1RfQllURSBYQ19CSVRNQVBfTEFTVF9CWVRFX01BU0soWEVOQ1RMX05SX0NQ VVMpCisKKyNkZWZpbmUgWENfQ1BVTUFTS19BTEwJCQkJCQkJICAgICAgICAgICAgICAgICAgICBc CisvKih4ZW5jdGxfY3B1bWFwKSovIHsgewkJCQkJCQkgICAgICAgICAgICAgICAgXAorCVswIC4u LiBYQ19CSVRTX1RPX0JZVEVTKFhFTkNUTF9OUl9DUFVTKS0yXSA9IDB4ZmYsCQkgICAgICAgIFwK KwlbWENfQklUU19UT19CWVRFUyhYRU5DVExfTlJfQ1BVUyktMV0gPSBYQ19DUFVNQVNLX0xBU1Rf QllURSAgICBcCit9IH0KKworI2RlZmluZSBYQ19DUFVNQVNLX05PTkUJCQkJCQkJICAgICAgICAg ICAgXAorLyooeGVuY3RsX2NwdW1hcCkqLyB7IHsJCQkJCQkJICAgICAgICBcCisJWzAgLi4uIFhD X0JJVFNfVE9fQllURVMoWEVOQ1RMX05SX0NQVVMpLTFdID0gIDAJCSAgICBcCit9IH0KKyNlbmRp ZgorCisjZGVmaW5lIHhjX2NwdW1hcF9zbnByaW50ZihidWYsIGxlbiwgc3JjKSBcCisJCQlfX3hj X2NwdW1hcF9zbnByaW50ZigoYnVmKSwgKGxlbiksICYoc3JjKSwgWEVOQ1RMX05SX0NQVVMpCitz dGF0aWMgaW5saW5lIGludCBfX3hjX2NwdW1hcF9zbnByaW50ZihjaGFyICpidWYsIGludCBsZW4s CisJCQkJCSAgICAgICAgY29uc3Qgc3RydWN0IHhlbmN0bF9jcHVtYXAgKnNyY3AsIGludCBuYml0 cykKK3sKKwlyZXR1cm4geGNfYml0bWFwX3NucHJpbnRmKGJ1ZiwgbGVuLCB4Y19jcHVtYXBfYml0 cyhzcmNwKSwgbmJpdHMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUg aW50Cit4Y19jcHVtYXBfYWxsb2N6X2JpdG1hcChpbnQgeGNfaGFuZGxlLCBzdHJ1Y3QgeGVuY3Rs X2NwdW1hcCAqbWFwKQoreworICAgIGludCBucl9jcHVzOworICAgIHVpbnQ4X3QgKmJpdG1hcDsK KyAgICB4Y19waHlzaW5mb190IHBpbmZvID0geyAwIH07CisKKyAgICBpZiAoeGNfcGh5c2luZm8o eGNfaGFuZGxlLCAmcGluZm8pKQorICAgICAgICBnb3RvIGZhaWxlZDsKKyAgCisgICAgbnJfY3B1 cyA9IHBpbmZvLm5yX2NwdXM7CisgICAgaWYgKCEoYml0bWFwID0gbWFsbG9jKFhDX0JJVFNfVE9f QllURVMobnJfY3B1cykpKSkKKyAgICAgICAgZ290byBmYWlsZWQ7CisKKwl4Y19iaXRtYXBfemVy byhiaXRtYXAsIG5yX2NwdXMpOworICAgIG1hcC0+bnJfY3B1cyA9IHBpbmZvLm5yX2NwdXM7Cisg ICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUobWFwLT5iaXRtYXAsIGJpdG1hcCk7CisgICAgcmV0dXJu IDA7CitmYWlsZWQ6CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hj X2NwdW1hcF9mcmVlX2JpdG1hcChzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqbWFwKQoreworICAgIHVp bnQ4X3QgKmJpdG1hcDsKKyAgICBnZXRfeGVuX2d1ZXN0X2hhbmRsZShiaXRtYXAsIG1hcC0+Yml0 bWFwKTsKKyAgICBmcmVlKGJpdG1hcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit4Y19jcHVt YXBfbG9ja19wYWdlcyhzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqbWFwKQoreworICAgIHVpbnQ4X3Qg KmJpdG1hcDsKKyAgICB1aW50MzJfdCBucl9ieXRlcyA9IFhDX0JJVFNfVE9fQllURVMobWFwLT5u cl9jcHVzKTsKKworICAgIGdldF94ZW5fZ3Vlc3RfaGFuZGxlKGJpdG1hcCwgbWFwLT5iaXRtYXAp OworICAgCisgICAgaWYgKGxvY2tfcGFnZXMoYml0bWFwLCBucl9ieXRlcykpCisgICAgICAgIHJl dHVybiAtMTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit4Y19jcHVt YXBfdW5sb2NrX3BhZ2VzKHN0cnVjdCB4ZW5jdGxfY3B1bWFwICptYXApCit7CisgICAgdWludDhf dCAqYml0bWFwOworICAgIHVpbnQzMl90IG5yX2J5dGVzID0gWENfQklUU19UT19CWVRFUyhtYXAt Pm5yX2NwdXMpOworCisgICAgZ2V0X3hlbl9ndWVzdF9oYW5kbGUoYml0bWFwLCBtYXAtPmJpdG1h cCk7CisgICAgdW5sb2NrX3BhZ2VzKGJpdG1hcCwgbnJfYnl0ZXMpOworfQorCisjZW5kaWYgLyog X19YRU5DVExfQ1BVTUFQX0ggKi8KZGlmZiAtciAwNGNiMDgyOWQxMzggdG9vbHMvbGlieGMveGNf ZG9tYWluLmMKLS0tIGEvdG9vbHMvbGlieGMveGNfZG9tYWluLmMJV2VkIE1hciAxNyAxNDoxMDo0 MyAyMDEwICswMDAwCisrKyBiL3Rvb2xzL2xpYnhjL3hjX2RvbWFpbi5jCVR1ZSBNYXIgMjMgMTI6 Mjk6MjYgMjAxMCAtMDQwMApAQCAtOCw2ICs4LDcgQEAKIAogI2luY2x1ZGUgInhjX3ByaXZhdGUu aCIKICNpbmNsdWRlICJ4Z19zYXZlX3Jlc3RvcmUuaCIKKyNpbmNsdWRlICJ4Y19jcHVtYXAuaCIK ICNpbmNsdWRlIDx4ZW4vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8eGVuL2h2bS9odm1fb3AuaD4KIApA QCAtOTgsMjggKzk5LDE3IEBACiBpbnQgeGNfdmNwdV9zZXRhZmZpbml0eShpbnQgeGNfaGFuZGxl LAogICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgdmNwdSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICpj cHVtYXAsIGludCBjcHVzaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhlbmN0 bF9jcHVtYXAgKmNwdW1hcCkKIHsKICAgICBERUNMQVJFX0RPTUNUTDsKICAgICBpbnQgcmV0ID0g LTE7Ci0gICAgdWludDhfdCAqbG9jYWwgPSBtYWxsb2MoY3B1c2l6ZSk7IAogCi0gICAgaWYobG9j YWwgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIFBFUlJPUigiQ291bGQgbm90IGFsbG9jIG1lbW9y eSBmb3IgWGVuIGh5cGVyY2FsbCIpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9CiAgICAgZG9t Y3RsLmNtZCA9IFhFTl9ET01DVExfc2V0dmNwdWFmZmluaXR5OwogICAgIGRvbWN0bC5kb21haW4g PSAoZG9taWRfdClkb21pZDsKLSAgICBkb21jdGwudS52Y3B1YWZmaW5pdHkudmNwdSAgICA9IHZj cHU7CisgICAgZG9tY3RsLnUudmNwdWFmZmluaXR5LnZjcHUgPSB2Y3B1OworICAgIGRvbWN0bC51 LnZjcHVhZmZpbml0eS5jcHVtYXAgPSAqY3B1bWFwOwogCi0gICAgYml0bWFwXzY0X3RvX2J5dGUo bG9jYWwsIGNwdW1hcCwgY3B1c2l6ZSAqIDgpOwotCi0gICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUo ZG9tY3RsLnUudmNwdWFmZmluaXR5LmNwdW1hcC5iaXRtYXAsIGxvY2FsKTsKLQotICAgIGRvbWN0 bC51LnZjcHVhZmZpbml0eS5jcHVtYXAubnJfY3B1cyA9IGNwdXNpemUgKiA4OwotICAgIAotICAg IGlmICggbG9ja19wYWdlcyhsb2NhbCwgY3B1c2l6ZSkgIT0gMCApCisgICAgaWYgKHhjX2NwdW1h cF9sb2NrX3BhZ2VzKGNwdW1hcCkpCiAgICAgewogICAgICAgICBQRVJST1IoIkNvdWxkIG5vdCBs b2NrIG1lbW9yeSBmb3IgWGVuIGh5cGVyY2FsbCIpOwogICAgICAgICBnb3RvIG91dDsKQEAgLTEy NywxMCArMTE3LDkgQEAKIAogICAgIHJldCA9IGRvX2RvbWN0bCh4Y19oYW5kbGUsICZkb21jdGwp OwogCi0gICAgdW5sb2NrX3BhZ2VzKGxvY2FsLCBjcHVzaXplKTsKKyAgICB4Y19jcHVtYXBfdW5s b2NrX3BhZ2VzKGNwdW1hcCk7CiAKICBvdXQ6Ci0gICAgZnJlZShsb2NhbCk7CiAgICAgcmV0dXJu IHJldDsKIH0KIApAQCAtMTM4LDI4ICsxMjcsMTggQEAKIGludCB4Y192Y3B1X2dldGFmZmluaXR5 KGludCB4Y19oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwK ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2Y3B1LAotICAgICAgICAgICAgICAgICAgICAg ICAgdWludDY0X3QgKmNwdW1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjcHVzaXpl KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhlbmN0bF9jcHVtYXAgKmNwdW1hcCkK IHsKICAgICBERUNMQVJFX0RPTUNUTDsKICAgICBpbnQgcmV0ID0gLTE7Ci0gICAgdWludDhfdCAq IGxvY2FsID0gbWFsbG9jKGNwdXNpemUpOwotCi0gICAgaWYobG9jYWwgPT0gTlVMTCkKLSAgICB7 Ci0gICAgICAgIFBFUlJPUigiQ291bGQgbm90IGFsbG9jIG1lbW9yeSBmb3IgWGVuIGh5cGVyY2Fs bCIpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9CiAKICAgICBkb21jdGwuY21kID0gWEVOX0RP TUNUTF9nZXR2Y3B1YWZmaW5pdHk7CiAgICAgZG9tY3RsLmRvbWFpbiA9IChkb21pZF90KWRvbWlk OwogICAgIGRvbWN0bC51LnZjcHVhZmZpbml0eS52Y3B1ID0gdmNwdTsKKyAgICBkb21jdGwudS52 Y3B1YWZmaW5pdHkuY3B1bWFwID0gKmNwdW1hcDsKIAogCi0gICAgc2V0X3hlbl9ndWVzdF9oYW5k bGUoZG9tY3RsLnUudmNwdWFmZmluaXR5LmNwdW1hcC5iaXRtYXAsIGxvY2FsKTsKLSAgICBkb21j dGwudS52Y3B1YWZmaW5pdHkuY3B1bWFwLm5yX2NwdXMgPSBjcHVzaXplICogODsKLSAgICAKLSAg ICBpZiAoIGxvY2tfcGFnZXMobG9jYWwsIHNpemVvZihsb2NhbCkpICE9IDAgKQorICAgIGlmICh4 Y19jcHVtYXBfbG9ja19wYWdlcyhjcHVtYXApKQogICAgIHsKICAgICAgICAgUEVSUk9SKCJDb3Vs ZCBub3QgbG9jayBtZW1vcnkgZm9yIFhlbiBoeXBlcmNhbGwiKTsKICAgICAgICAgZ290byBvdXQ7 CkBAIC0xNjcsMTAgKzE0Niw4IEBACiAKICAgICByZXQgPSBkb19kb21jdGwoeGNfaGFuZGxlLCAm ZG9tY3RsKTsKIAotICAgIHVubG9ja19wYWdlcyhsb2NhbCwgc2l6ZW9mIChsb2NhbCkpOwotICAg IGJpdG1hcF9ieXRlX3RvXzY0KGNwdW1hcCwgbG9jYWwsIGNwdXNpemUgKiA4KTsKKyAgICB4Y19j cHVtYXBfdW5sb2NrX3BhZ2VzKGNwdW1hcCk7CiBvdXQ6Ci0gICAgZnJlZShsb2NhbCk7CiAgICAg cmV0dXJuIHJldDsKIH0KIApkaWZmIC1yIDA0Y2IwODI5ZDEzOCB0b29scy9saWJ4Yy94ZW5jdHJs LmgKLS0tIGEvdG9vbHMvbGlieGMveGVuY3RybC5oCVdlZCBNYXIgMTcgMTQ6MTA6NDMgMjAxMCAr MDAwMAorKysgYi90b29scy9saWJ4Yy94ZW5jdHJsLmgJVHVlIE1hciAyMyAxMjoyOToyNiAyMDEw IC0wNDAwCkBAIC0zMDksMTMgKzMwOSwxMSBAQAogaW50IHhjX3ZjcHVfc2V0YWZmaW5pdHkoaW50 IHhjX2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAogICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHZjcHUsCi0gICAgICAgICAgICAgICAgICAgICAgICB1 aW50NjRfdCAqY3B1bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNwdXNpemUpOwor ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhlbmN0bF9jcHVtYXAgKmNwdW1hcCk7CiBp bnQgeGNfdmNwdV9nZXRhZmZpbml0eShpbnQgeGNfaGFuZGxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmNwdSwK LSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICpjcHVtYXAsCi0gICAgICAgICAgICAg ICAgICAgICAgICBpbnQgY3B1c2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg eGVuY3RsX2NwdW1hcCAqY3B1bWFwKTsKIAogLyoqCiAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0 dXJuIGluZm9ybWF0aW9uIGFib3V0IG9uZSBvciBtb3JlIGRvbWFpbnMuIEl0IGlzCmRpZmYgLXIg MDRjYjA4MjlkMTM4IHRvb2xzL3B5dGhvbi94ZW4vbG93bGV2ZWwveGMveGMuYwotLS0gYS90b29s cy9weXRob24veGVuL2xvd2xldmVsL3hjL3hjLmMJV2VkIE1hciAxNyAxNDoxMDo0MyAyMDEwICsw MDAwCisrKyBiL3Rvb2xzL3B5dGhvbi94ZW4vbG93bGV2ZWwveGMveGMuYwlUdWUgTWFyIDIzIDEy OjI5OjI2IDIwMTAgLTA0MDAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJ4Y19kb20uaCIK ICNpbmNsdWRlIDx4ZW4vaHZtL2h2bV9pbmZvX3RhYmxlLmg+CiAjaW5jbHVkZSA8eGVuL2h2bS9w YXJhbXMuaD4KKyNpbmNsdWRlICJ4Y19jcHVtYXAuaCIKIAogI2RlZmluZSBBUlJBWV9TSVpFKHgp IChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSkKIApAQCAtMjE1LDEyICsyMTYsOCBAQAogewog ICAgIHVpbnQzMl90IGRvbTsKICAgICBpbnQgdmNwdSA9IDAsIGk7Ci0gICAgdWludDY0X3QgICpj cHVtYXA7CisgICAgc3RydWN0IHhlbmN0bF9jcHVtYXAgY3B1bWFwOwogICAgIFB5T2JqZWN0ICpj cHVsaXN0ID0gTlVMTDsKLSAgICBpbnQgbnJfY3B1cywgc2l6ZTsKLSAgICB4Y19waHlzaW5mb190 IGluZm87IAotICAgIHhjX2NwdV90b19ub2RlX3QgbWFwWzFdOwotICAgIHVpbnQ2NF90IGNwdW1h cF9zaXplID0gc2l6ZW9mKGNwdW1hcCk7IAogCiAgICAgc3RhdGljIGNoYXIgKmt3ZF9saXN0W10g PSB7ICJkb21pZCIsICJ2Y3B1IiwgImNwdW1hcCIsIE5VTEwgfTsKICAgICAKQEAgLTIyOSw0MCAr MjI2LDI2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb20sICZ2 Y3B1LCAmY3B1bGlzdCkgKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNldF94ZW5fZ3Vl c3RfaGFuZGxlKGluZm8uY3B1X3RvX25vZGUsIG1hcCk7Ci0gICAgaW5mby5tYXhfY3B1X2lkID0g MTsKLSAgICBpZiAoIHhjX3BoeXNpbmZvKHNlbGYtPnhjX2hhbmRsZSwgJmluZm8pICE9IDAgKQor ICAgIGlmICh4Y19jcHVtYXBfYWxsb2N6X2JpdG1hcChzZWxmLT54Y19oYW5kbGUsICZjcHVtYXAp KQogICAgICAgICByZXR1cm4gcHl4Y19lcnJvcl90b19leGNlcHRpb24oKTsKLSAgCi0gICAgbnJf Y3B1cyA9IGluZm8ubnJfY3B1czsKLQotICAgIHNpemUgPSAobnJfY3B1cyArIGNwdW1hcF9zaXpl ICogOCAtIDEpLyAoY3B1bWFwX3NpemUgKiA4KTsKLSAgICBjcHVtYXAgPSBtYWxsb2MoY3B1bWFw X3NpemUgKiBzaXplKTsKLSAgICBpZihjcHVtYXAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHB5 eGNfZXJyb3JfdG9fZXhjZXB0aW9uKCk7Ci0gICAgCiAKICAgICBpZiAoIChjcHVsaXN0ICE9IE5V TEwpICYmIFB5TGlzdF9DaGVjayhjcHVsaXN0KSApCiAgICAgewotICAgICAgICBmb3IgKCBpID0g MDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY3B1bWFwW2ldID0gMFVM TDsKLSAgICAgICAgfQogICAgICAgICBmb3IgKCBpID0gMDsgaSA8IFB5TGlzdF9TaXplKGNwdWxp c3QpOyBpKysgKSAKICAgICAgICAgewogICAgICAgICAgICAgbG9uZyBjcHUgPSBQeUludF9Bc0xv bmcoUHlMaXN0X0dldEl0ZW0oY3B1bGlzdCwgaSkpOwotICAgICAgICAgICAgKihjcHVtYXAgKyBj cHUgLyAoY3B1bWFwX3NpemUgKiA4KSkgfD0gKHVpbnQ2NF90KTEgPDwgKGNwdSAlIChjcHVtYXBf c2l6ZSAqIDgpKTsKKyAgICAgICAgICAgIHhjX2NwdW1hcF9zZXRfY3B1KGNwdSwgY3B1bWFwKTsK ICAgICAgICAgfQogICAgIH0KICAgCi0gICAgaWYgKCB4Y192Y3B1X3NldGFmZmluaXR5KHNlbGYt PnhjX2hhbmRsZSwgZG9tLCB2Y3B1LCBjcHVtYXAsIHNpemUgKiBjcHVtYXBfc2l6ZSkgIT0gMCAp CisgICAgaWYgKHhjX3ZjcHVfc2V0YWZmaW5pdHkoc2VsZi0+eGNfaGFuZGxlLCBkb20sIHZjcHUs ICZjcHVtYXApKQogICAgIHsKLSAgICAgICAgZnJlZShjcHVtYXApOworICAgICAgICB4Y19jcHVt YXBfZnJlZV9iaXRtYXAoJmNwdW1hcCk7CiAgICAgICAgIHJldHVybiBweXhjX2Vycm9yX3RvX2V4 Y2VwdGlvbigpOwogICAgIH0KIAogICAgIFB5X0lOQ1JFRih6ZXJvKTsKLSAgICBmcmVlKGNwdW1h cCk7IAorICAgIHhjX2NwdW1hcF9mcmVlX2JpdG1hcCgmY3B1bWFwKTsKICAgICByZXR1cm4gemVy bzsKIH0KIApAQCAtMzgxLDExICszNjQsNyBAQAogICAgIHVpbnQzMl90IGRvbSwgdmNwdSA9IDA7 CiAgICAgeGNfdmNwdWluZm9fdCBpbmZvOwogICAgIGludCByYywgaTsKLSAgICB1aW50NjRfdCAq Y3B1bWFwOwotICAgIGludCBucl9jcHVzLCBzaXplOwotICAgIHhjX3BoeXNpbmZvX3QgcGluZm8g PSB7IDAgfTsKLSAgICB4Y19jcHVfdG9fbm9kZV90IG1hcFsxXTsKLSAgICB1aW50NjRfdCBjcHVt YXBfc2l6ZSA9IHNpemVvZihjcHVtYXApOworICAgIHN0cnVjdCB4ZW5jdGxfY3B1bWFwIGNwdW1h cDsKIAogICAgIHN0YXRpYyBjaGFyICprd2RfbGlzdFtdID0geyAiZG9taWQiLCAidmNwdSIsIE5V TEwgfTsKICAgICAKQEAgLTM5MywyMyArMzcyLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZkb20sICZ2Y3B1KSApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0g ICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUocGluZm8uY3B1X3RvX25vZGUsIG1hcCk7Ci0gICAgcGlu Zm8ubWF4X2NwdV9pZCA9IDE7Ci0gICAgaWYgKCB4Y19waHlzaW5mbyhzZWxmLT54Y19oYW5kbGUs ICZwaW5mbykgIT0gMCApIAorICAgIGlmICggeGNfY3B1bWFwX2FsbG9jel9iaXRtYXAoc2VsZi0+ eGNfaGFuZGxlLCAmY3B1bWFwKSApIAogICAgICAgICByZXR1cm4gcHl4Y19lcnJvcl90b19leGNl cHRpb24oKTsKLSAgICBucl9jcHVzID0gcGluZm8ubnJfY3B1czsKLSAgICByYyA9IHhjX3ZjcHVf Z2V0aW5mbyhzZWxmLT54Y19oYW5kbGUsIGRvbSwgdmNwdSwgJmluZm8pOwotICAgIGlmICggcmMg PCAwICkKKyAgICBpZiAoKHJjID0geGNfdmNwdV9nZXRpbmZvKHNlbGYtPnhjX2hhbmRsZSwgZG9t LCB2Y3B1LCAmaW5mbykpIDwgMCkKICAgICAgICAgcmV0dXJuIHB5eGNfZXJyb3JfdG9fZXhjZXB0 aW9uKCk7Ci0gICAgc2l6ZSA9IChucl9jcHVzICsgY3B1bWFwX3NpemUgKiA4IC0gMSkvIChjcHVt YXBfc2l6ZSAqIDgpOyAKIAotICAgIGlmKChjcHVtYXAgPSBtYWxsb2MoY3B1bWFwX3NpemUgKiBz aXplKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHB5eGNfZXJyb3JfdG9fZXhjZXB0aW9uKCk7 IAotCi0gICAgcmMgPSB4Y192Y3B1X2dldGFmZmluaXR5KHNlbGYtPnhjX2hhbmRsZSwgZG9tLCB2 Y3B1LCBjcHVtYXAsIGNwdW1hcF9zaXplICogc2l6ZSk7Ci0gICAgaWYgKCByYyA8IDAgKQorICAg IGlmICgocmMgPSB4Y192Y3B1X2dldGFmZmluaXR5KHNlbGYtPnhjX2hhbmRsZSwgZG9tLCB2Y3B1 LCAmY3B1bWFwKSkgPCAwKQogICAgIHsKLSAgICAgICAgZnJlZShjcHVtYXApOworICAgICAgICB4 Y19jcHVtYXBfZnJlZV9iaXRtYXAoJmNwdW1hcCk7CiAgICAgICAgIHJldHVybiBweXhjX2Vycm9y X3RvX2V4Y2VwdGlvbigpOwogICAgIH0KIApAQCAtNDIxLDE4ICszOTEsMTUgQEAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJjcHUiLCAgICAgIGluZm8uY3B1KTsKIAogICAgIGNwdWxp c3QgPSBQeUxpc3RfTmV3KDApOwotICAgIGZvciAoIGkgPSAwOyBpIDwgc2l6ZSAqIGNwdW1hcF9z aXplICogODsgaSsrICkKKyAgICB4Y19mb3JfZWFjaF9jcHUoaSwgY3B1bWFwKQogICAgIHsKLSAg ICAgICAgaWYgKCooY3B1bWFwICsgaSAvIChjcHVtYXBfc2l6ZSAqIDgpKSAmIDEgKSB7Ci0gICAg ICAgICAgICBQeU9iamVjdCAqcHlpbnQgPSBQeUludF9Gcm9tTG9uZyhpKTsKLSAgICAgICAgICAg IFB5TGlzdF9BcHBlbmQoY3B1bGlzdCwgcHlpbnQpOwotICAgICAgICAgICAgUHlfREVDUkVGKHB5 aW50KTsKLSAgICAgICAgfQotICAgICAgICAqKGNwdW1hcCArIGkgLyAoY3B1bWFwX3NpemUgKiA4 KSkgPj49IDE7CisgICAgICAgIFB5T2JqZWN0ICpweWludCA9IFB5SW50X0Zyb21Mb25nKGkpOwor ICAgICAgICBQeUxpc3RfQXBwZW5kKGNwdWxpc3QsIHB5aW50KTsKKyAgICAgICAgUHlfREVDUkVG KHB5aW50KTsKICAgICB9CiAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoaW5mb19kaWN0LCAiY3B1 bWFwIiwgY3B1bGlzdCk7CiAgICAgUHlfREVDUkVGKGNwdWxpc3QpOwotICAgIGZyZWUoY3B1bWFw KTsKKyAgICB4Y19jcHVtYXBfZnJlZV9iaXRtYXAoJmNwdW1hcCk7CiAgICAgcmV0dXJuIGluZm9f ZGljdDsKIH0KIAo= --0016e6d7f07b0a385604827a7859 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 --0016e6d7f07b0a385604827a7859--