From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dulloor Subject: Fwd: [PATCH] libxc bitmap utils and vcpu-affinity Date: Tue, 30 Mar 2010 10:42:18 -0400 Message-ID: <940bcfd21003300742s28db15dbm9bf3316f8625f180@mail.gmail.com> References: <4BA8A1BC0200007800036662@vpn.id2.novell.com> <940bcfd21003230940w7c7d87eas7e1300cfdb633c4c@mail.gmail.com> <940bcfd21003230941p216c1bb4u60e469d41dda51a@mail.gmail.com> <940bcfd21003230955hd15a76di148c140b45ebee8@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e6d64559eb1e13048305a217 Return-path: In-Reply-To: <940bcfd21003230955hd15a76di148c140b45ebee8@mail.gmail.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: xen-devel@lists.xensource.com Cc: Keir Fraser , Jan Beulich List-Id: xen-devel@lists.xenproject.org --0016e6d64559eb1e13048305a217 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Resubmitting the patch. -dulloor ---------- Forwarded message ---------- From: Dulloor Date: Tue, Mar 23, 2010 at 12:55 PM Subject: Re: [Xen-devel][PATCH] libxc bitmap utils and vcpu-affinity To: Keir Fraser Cc: Jan Beulich , "xen-devel@lists.xensource.com" Please use this patch, in which length of bitmap is (physinfo.max_cpu_id+1), rather than (physinfo.nr_cpus). -dulloor On Tue, Mar 23, 2010 at 12:41 PM, Dulloor wrote: > I meant utils for **xenctl_cpumap** > > On Tue, Mar 23, 2010 at 12:40 PM, Dulloor wrote: >> 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 = wrote: >>> 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 fo= r >>>>> 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 bit= maps, >>> 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 >>> >>> >>> >> > --0016e6d64559eb1e13048305a217 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_g74y2vp60 ZGlmZiAtciAwNGNiMDgyOWQxMzggdG9vbHMvbGlieGMvTWFrZWZpbGUKLS0tIGEvdG9vbHMvbGli eGMvTWFrZWZpbGUJV2VkIE1hciAxNyAxNDoxMDo0MyAyMDEwICswMDAwCisrKyBiL3Rvb2xzL2xp YnhjL01ha2VmaWxlCVR1ZSBNYXIgMjMgMTI6NTA6MzIgMjAxMCAtMDQwMApAQCAtMjUsNiArMjUs NyBAQAogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfbWVtX2V2ZW50LmMKIENUUkxfU1JDUy15ICAg ICAgICs9IHhjX21lbV9wYWdpbmcuYwogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfbWVtc2hyLmMK K0NUUkxfU1JDUy15ICAgICAgICs9IHhjX2JpdG1hcC5jCiBDVFJMX1NSQ1MtJChDT05GSUdfWDg2 KSArPSB4Y19wYWdldGFiLmMKIENUUkxfU1JDUy0kKENPTkZJR19MaW51eCkgKz0geGNfbGludXgu YwogQ1RSTF9TUkNTLSQoQ09ORklHX1N1bk9TKSArPSB4Y19zb2xhcmlzLmMKZGlmZiAtciAwNGNi MDgyOWQxMzggdG9vbHMvbGlieGMveGNfYml0bWFwLmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAx IDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvdG9vbHMvbGlieGMveGNfYml0bWFwLmMJVHVlIE1h ciAyMyAxMjo1MDozMiAyMDEwIC0wNDAwCkBAIC0wLDAgKzEsMjUwIEBACisjaW5jbHVkZSAieGNf 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 OTcwICswMDAwCisrKyBiL3Rvb2xzL2xpYnhjL3hjX2JpdG1hcC5oCVR1ZSBNYXIgMjMgMTI6NTA6 MzIgMjAxMCAtMDQwMApAQCAtMCwwICsxLDE5MyBAQAorI2lmbmRlZiBfX1hFTkNUTF9CSVRNQVBf 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 Yy94Y19jcHVtYXAuaAlUdWUgTWFyIDIzIDEyOjUwOjMyIDIwMTAgLTA0MDAKQEAgLTAsMCArMSwy 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 cyA9IHBpbmZvLm1heF9jcHVfaWQrMTsKKyAgICBpZiAoIShiaXRtYXAgPSBtYWxsb2MoWENfQklU U19UT19CWVRFUyhucl9jcHVzKSkpKQorICAgICAgICBnb3RvIGZhaWxlZDsKKworCXhjX2JpdG1h cF96ZXJvKGJpdG1hcCwgbnJfY3B1cyk7CisgICAgbWFwLT5ucl9jcHVzID0gcGluZm8ubnJfY3B1 czsKKyAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShtYXAtPmJpdG1hcCwgYml0bWFwKTsKKyAgICBy ZXR1cm4gMDsKK2ZhaWxlZDoKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZAoreGNfY3B1bWFwX2ZyZWVfYml0bWFwKHN0cnVjdCB4ZW5jdGxfY3B1bWFwICptYXApCit7Cisg ICAgdWludDhfdCAqYml0bWFwOworICAgIGdldF94ZW5fZ3Vlc3RfaGFuZGxlKGJpdG1hcCwgbWFw LT5iaXRtYXApOworICAgIGZyZWUoYml0bWFwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3hj X2NwdW1hcF9sb2NrX3BhZ2VzKHN0cnVjdCB4ZW5jdGxfY3B1bWFwICptYXApCit7CisgICAgdWlu dDhfdCAqYml0bWFwOworICAgIHVpbnQzMl90IG5yX2J5dGVzID0gWENfQklUU19UT19CWVRFUyht YXAtPm5yX2NwdXMpOworCisgICAgZ2V0X3hlbl9ndWVzdF9oYW5kbGUoYml0bWFwLCBtYXAtPmJp dG1hcCk7CisgICAKKyAgICBpZiAobG9ja19wYWdlcyhiaXRtYXAsIG5yX2J5dGVzKSkKKyAgICAg ICAgcmV0dXJuIC0xOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hj X2NwdW1hcF91bmxvY2tfcGFnZXMoc3RydWN0IHhlbmN0bF9jcHVtYXAgKm1hcCkKK3sKKyAgICB1 aW50OF90ICpiaXRtYXA7CisgICAgdWludDMyX3QgbnJfYnl0ZXMgPSBYQ19CSVRTX1RPX0JZVEVT KG1hcC0+bnJfY3B1cyk7CisKKyAgICBnZXRfeGVuX2d1ZXN0X2hhbmRsZShiaXRtYXAsIG1hcC0+ Yml0bWFwKTsKKyAgICB1bmxvY2tfcGFnZXMoYml0bWFwLCBucl9ieXRlcyk7Cit9CisKKyNlbmRp ZiAvKiBfX1hFTkNUTF9DUFVNQVBfSCAqLwpkaWZmIC1yIDA0Y2IwODI5ZDEzOCB0b29scy9saWJ4 Yy94Y19kb21haW4uYwotLS0gYS90b29scy9saWJ4Yy94Y19kb21haW4uYwlXZWQgTWFyIDE3IDE0 OjEwOjQzIDIwMTAgKzAwMDAKKysrIGIvdG9vbHMvbGlieGMveGNfZG9tYWluLmMJVHVlIE1hciAy MyAxMjo1MDozMiAyMDEwIC0wNDAwCkBAIC04LDYgKzgsNyBAQAogCiAjaW5jbHVkZSAieGNfcHJp dmF0ZS5oIgogI2luY2x1ZGUgInhnX3NhdmVfcmVzdG9yZS5oIgorI2luY2x1ZGUgInhjX2NwdW1h cC5oIgogI2luY2x1ZGUgPHhlbi9tZW1vcnkuaD4KICNpbmNsdWRlIDx4ZW4vaHZtL2h2bV9vcC5o PgogCkBAIC05OCwyOCArOTksMTcgQEAKIGludCB4Y192Y3B1X3NldGFmZmluaXR5KGludCB4Y19o YW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKICAgICAgICAg ICAgICAgICAgICAgICAgIGludCB2Y3B1LAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0 X3QgKmNwdW1hcCwgaW50IGNwdXNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg eGVuY3RsX2NwdW1hcCAqY3B1bWFwKQogewogICAgIERFQ0xBUkVfRE9NQ1RMOwogICAgIGludCBy ZXQgPSAtMTsKLSAgICB1aW50OF90ICpsb2NhbCA9IG1hbGxvYyhjcHVzaXplKTsgCiAKLSAgICBp Zihsb2NhbCA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJDb3VsZCBub3QgYWxsb2Mg bWVtb3J5IGZvciBYZW4gaHlwZXJjYWxsIik7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KICAg ICBkb21jdGwuY21kID0gWEVOX0RPTUNUTF9zZXR2Y3B1YWZmaW5pdHk7CiAgICAgZG9tY3RsLmRv bWFpbiA9IChkb21pZF90KWRvbWlkOwotICAgIGRvbWN0bC51LnZjcHVhZmZpbml0eS52Y3B1ICAg ID0gdmNwdTsKKyAgICBkb21jdGwudS52Y3B1YWZmaW5pdHkudmNwdSA9IHZjcHU7CisgICAgZG9t Y3RsLnUudmNwdWFmZmluaXR5LmNwdW1hcCA9ICpjcHVtYXA7CiAKLSAgICBiaXRtYXBfNjRfdG9f Ynl0ZShsb2NhbCwgY3B1bWFwLCBjcHVzaXplICogOCk7Ci0KLSAgICBzZXRfeGVuX2d1ZXN0X2hh bmRsZShkb21jdGwudS52Y3B1YWZmaW5pdHkuY3B1bWFwLmJpdG1hcCwgbG9jYWwpOwotCi0gICAg ZG9tY3RsLnUudmNwdWFmZmluaXR5LmNwdW1hcC5ucl9jcHVzID0gY3B1c2l6ZSAqIDg7Ci0gICAg Ci0gICAgaWYgKCBsb2NrX3BhZ2VzKGxvY2FsLCBjcHVzaXplKSAhPSAwICkKKyAgICBpZiAoeGNf Y3B1bWFwX2xvY2tfcGFnZXMoY3B1bWFwKSkKICAgICB7CiAgICAgICAgIFBFUlJPUigiQ291bGQg bm90IGxvY2sgbWVtb3J5IGZvciBYZW4gaHlwZXJjYWxsIik7CiAgICAgICAgIGdvdG8gb3V0OwpA QCAtMTI3LDEwICsxMTcsOSBAQAogCiAgICAgcmV0ID0gZG9fZG9tY3RsKHhjX2hhbmRsZSwgJmRv bWN0bCk7CiAKLSAgICB1bmxvY2tfcGFnZXMobG9jYWwsIGNwdXNpemUpOworICAgIHhjX2NwdW1h cF91bmxvY2tfcGFnZXMoY3B1bWFwKTsKIAogIG91dDoKLSAgICBmcmVlKGxvY2FsKTsKICAgICBy ZXR1cm4gcmV0OwogfQogCkBAIC0xMzgsMjggKzEyNywxOCBAQAogaW50IHhjX3ZjcHVfZ2V0YWZm aW5pdHkoaW50IHhjX2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRv bWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZjcHUsCi0gICAgICAgICAgICAgICAg ICAgICAgICB1aW50NjRfdCAqY3B1bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNw dXNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqY3B1 bWFwKQogewogICAgIERFQ0xBUkVfRE9NQ1RMOwogICAgIGludCByZXQgPSAtMTsKLSAgICB1aW50 OF90ICogbG9jYWwgPSBtYWxsb2MoY3B1c2l6ZSk7Ci0KLSAgICBpZihsb2NhbCA9PSBOVUxMKQot ICAgIHsKLSAgICAgICAgUEVSUk9SKCJDb3VsZCBub3QgYWxsb2MgbWVtb3J5IGZvciBYZW4gaHlw ZXJjYWxsIik7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KIAogICAgIGRvbWN0bC5jbWQgPSBY RU5fRE9NQ1RMX2dldHZjcHVhZmZpbml0eTsKICAgICBkb21jdGwuZG9tYWluID0gKGRvbWlkX3Qp ZG9taWQ7CiAgICAgZG9tY3RsLnUudmNwdWFmZmluaXR5LnZjcHUgPSB2Y3B1OworICAgIGRvbWN0 bC51LnZjcHVhZmZpbml0eS5jcHVtYXAgPSAqY3B1bWFwOwogCiAKLSAgICBzZXRfeGVuX2d1ZXN0 X2hhbmRsZShkb21jdGwudS52Y3B1YWZmaW5pdHkuY3B1bWFwLmJpdG1hcCwgbG9jYWwpOwotICAg IGRvbWN0bC51LnZjcHVhZmZpbml0eS5jcHVtYXAubnJfY3B1cyA9IGNwdXNpemUgKiA4OwotICAg IAotICAgIGlmICggbG9ja19wYWdlcyhsb2NhbCwgc2l6ZW9mKGxvY2FsKSkgIT0gMCApCisgICAg aWYgKHhjX2NwdW1hcF9sb2NrX3BhZ2VzKGNwdW1hcCkpCiAgICAgewogICAgICAgICBQRVJST1Io IkNvdWxkIG5vdCBsb2NrIG1lbW9yeSBmb3IgWGVuIGh5cGVyY2FsbCIpOwogICAgICAgICBnb3Rv IG91dDsKQEAgLTE2NywxMCArMTQ2LDggQEAKIAogICAgIHJldCA9IGRvX2RvbWN0bCh4Y19oYW5k bGUsICZkb21jdGwpOwogCi0gICAgdW5sb2NrX3BhZ2VzKGxvY2FsLCBzaXplb2YgKGxvY2FsKSk7 Ci0gICAgYml0bWFwX2J5dGVfdG9fNjQoY3B1bWFwLCBsb2NhbCwgY3B1c2l6ZSAqIDgpOworICAg IHhjX2NwdW1hcF91bmxvY2tfcGFnZXMoY3B1bWFwKTsKIG91dDoKLSAgICBmcmVlKGxvY2FsKTsK ICAgICByZXR1cm4gcmV0OwogfQogCmRpZmYgLXIgMDRjYjA4MjlkMTM4IHRvb2xzL2xpYnhjL3hl bmN0cmwuaAotLS0gYS90b29scy9saWJ4Yy94ZW5jdHJsLmgJV2VkIE1hciAxNyAxNDoxMDo0MyAy MDEwICswMDAwCisrKyBiL3Rvb2xzL2xpYnhjL3hlbmN0cmwuaAlUdWUgTWFyIDIzIDEyOjUwOjMy IDIwMTAgLTA0MDAKQEAgLTMwOSwxMyArMzA5LDExIEBACiBpbnQgeGNfdmNwdV9zZXRhZmZpbml0 eShpbnQgeGNfaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQs CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmNwdSwKLSAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ2NF90ICpjcHVtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3B1c2l6 ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCAqY3B1bWFw KTsKIGludCB4Y192Y3B1X2dldGFmZmluaXR5KGludCB4Y19oYW5kbGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2 Y3B1LAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgKmNwdW1hcCwKLSAgICAgICAg ICAgICAgICAgICAgICAgIGludCBjcHVzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB4ZW5jdGxfY3B1bWFwICpjcHVtYXApOwogCiAvKioKICAqIFRoaXMgZnVuY3Rpb24gd2ls bCByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgb25lIG9yIG1vcmUgZG9tYWlucy4gSXQgaXMKZGlm ZiAtciAwNGNiMDgyOWQxMzggdG9vbHMvcHl0aG9uL3hlbi9sb3dsZXZlbC94Yy94Yy5jCi0tLSBh L3Rvb2xzL3B5dGhvbi94ZW4vbG93bGV2ZWwveGMveGMuYwlXZWQgTWFyIDE3IDE0OjEwOjQzIDIw MTAgKzAwMDAKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi9sb3dsZXZlbC94Yy94Yy5jCVR1ZSBNYXIg MjMgMTI6NTA6MzIgMjAxMCAtMDQwMApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgInhjX2Rv bS5oIgogI2luY2x1ZGUgPHhlbi9odm0vaHZtX2luZm9fdGFibGUuaD4KICNpbmNsdWRlIDx4ZW4v aHZtL3BhcmFtcy5oPgorI2luY2x1ZGUgInhjX2NwdW1hcC5oIgogCiAjZGVmaW5lIEFSUkFZX1NJ WkUoeCkgKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQogCkBAIC0yMTUsMTIgKzIxNiw4IEBA CiB7CiAgICAgdWludDMyX3QgZG9tOwogICAgIGludCB2Y3B1ID0gMCwgaTsKLSAgICB1aW50NjRf dCAgKmNwdW1hcDsKKyAgICBzdHJ1Y3QgeGVuY3RsX2NwdW1hcCBjcHVtYXA7CiAgICAgUHlPYmpl Y3QgKmNwdWxpc3QgPSBOVUxMOwotICAgIGludCBucl9jcHVzLCBzaXplOwotICAgIHhjX3BoeXNp bmZvX3QgaW5mbzsgCi0gICAgeGNfY3B1X3RvX25vZGVfdCBtYXBbMV07Ci0gICAgdWludDY0X3Qg Y3B1bWFwX3NpemUgPSBzaXplb2YoY3B1bWFwKTsgCiAKICAgICBzdGF0aWMgY2hhciAqa3dkX2xp c3RbXSA9IHsgImRvbWlkIiwgInZjcHUiLCAiY3B1bWFwIiwgTlVMTCB9OwogICAgIApAQCAtMjI5 LDQwICsyMjYsMjYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRv bSwgJnZjcHUsICZjcHVsaXN0KSApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2V0X3hl bl9ndWVzdF9oYW5kbGUoaW5mby5jcHVfdG9fbm9kZSwgbWFwKTsKLSAgICBpbmZvLm1heF9jcHVf aWQgPSAxOwotICAgIGlmICggeGNfcGh5c2luZm8oc2VsZi0+eGNfaGFuZGxlLCAmaW5mbykgIT0g MCApCisgICAgaWYgKHhjX2NwdW1hcF9hbGxvY3pfYml0bWFwKHNlbGYtPnhjX2hhbmRsZSwgJmNw dW1hcCkpCiAgICAgICAgIHJldHVybiBweXhjX2Vycm9yX3RvX2V4Y2VwdGlvbigpOwotICAKLSAg ICBucl9jcHVzID0gaW5mby5ucl9jcHVzOwotCi0gICAgc2l6ZSA9IChucl9jcHVzICsgY3B1bWFw X3NpemUgKiA4IC0gMSkvIChjcHVtYXBfc2l6ZSAqIDgpOwotICAgIGNwdW1hcCA9IG1hbGxvYyhj cHVtYXBfc2l6ZSAqIHNpemUpOwotICAgIGlmKGNwdW1hcCA9PSBOVUxMKQotICAgICAgICByZXR1 cm4gcHl4Y19lcnJvcl90b19leGNlcHRpb24oKTsKLSAgICAKIAogICAgIGlmICggKGNwdWxpc3Qg IT0gTlVMTCkgJiYgUHlMaXN0X0NoZWNrKGNwdWxpc3QpICkKICAgICB7Ci0gICAgICAgIGZvciAo IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjcHVtYXBbaV0g PSAwVUxMOwotICAgICAgICB9CiAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgUHlMaXN0X1NpemUo Y3B1bGlzdCk7IGkrKyApIAogICAgICAgICB7CiAgICAgICAgICAgICBsb25nIGNwdSA9IFB5SW50 X0FzTG9uZyhQeUxpc3RfR2V0SXRlbShjcHVsaXN0LCBpKSk7Ci0gICAgICAgICAgICAqKGNwdW1h cCArIGNwdSAvIChjcHVtYXBfc2l6ZSAqIDgpKSB8PSAodWludDY0X3QpMSA8PCAoY3B1ICUgKGNw dW1hcF9zaXplICogOCkpOworICAgICAgICAgICAgeGNfY3B1bWFwX3NldF9jcHUoY3B1LCBjcHVt YXApOwogICAgICAgICB9CiAgICAgfQogICAKLSAgICBpZiAoIHhjX3ZjcHVfc2V0YWZmaW5pdHko c2VsZi0+eGNfaGFuZGxlLCBkb20sIHZjcHUsIGNwdW1hcCwgc2l6ZSAqIGNwdW1hcF9zaXplKSAh PSAwICkKKyAgICBpZiAoeGNfdmNwdV9zZXRhZmZpbml0eShzZWxmLT54Y19oYW5kbGUsIGRvbSwg dmNwdSwgJmNwdW1hcCkpCiAgICAgewotICAgICAgICBmcmVlKGNwdW1hcCk7CisgICAgICAgIHhj X2NwdW1hcF9mcmVlX2JpdG1hcCgmY3B1bWFwKTsKICAgICAgICAgcmV0dXJuIHB5eGNfZXJyb3Jf dG9fZXhjZXB0aW9uKCk7CiAgICAgfQogCiAgICAgUHlfSU5DUkVGKHplcm8pOwotICAgIGZyZWUo Y3B1bWFwKTsgCisgICAgeGNfY3B1bWFwX2ZyZWVfYml0bWFwKCZjcHVtYXApOwogICAgIHJldHVy biB6ZXJvOwogfQogCkBAIC0zODEsMTEgKzM2NCw3IEBACiAgICAgdWludDMyX3QgZG9tLCB2Y3B1 ID0gMDsKICAgICB4Y192Y3B1aW5mb190IGluZm87CiAgICAgaW50IHJjLCBpOwotICAgIHVpbnQ2 NF90ICpjcHVtYXA7Ci0gICAgaW50IG5yX2NwdXMsIHNpemU7Ci0gICAgeGNfcGh5c2luZm9fdCBw aW5mbyA9IHsgMCB9OwotICAgIHhjX2NwdV90b19ub2RlX3QgbWFwWzFdOwotICAgIHVpbnQ2NF90 IGNwdW1hcF9zaXplID0gc2l6ZW9mKGNwdW1hcCk7CisgICAgc3RydWN0IHhlbmN0bF9jcHVtYXAg Y3B1bWFwOwogCiAgICAgc3RhdGljIGNoYXIgKmt3ZF9saXN0W10gPSB7ICJkb21pZCIsICJ2Y3B1 IiwgTlVMTCB9OwogICAgIApAQCAtMzkzLDIzICszNzIsMTQgQEAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmRvbSwgJnZjcHUpICkKICAgICAgICAgcmV0dXJuIE5VTEw7 CiAKLSAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShwaW5mby5jcHVfdG9fbm9kZSwgbWFwKTsKLSAg ICBwaW5mby5tYXhfY3B1X2lkID0gMTsKLSAgICBpZiAoIHhjX3BoeXNpbmZvKHNlbGYtPnhjX2hh bmRsZSwgJnBpbmZvKSAhPSAwICkgCisgICAgaWYgKCB4Y19jcHVtYXBfYWxsb2N6X2JpdG1hcChz ZWxmLT54Y19oYW5kbGUsICZjcHVtYXApICkgCiAgICAgICAgIHJldHVybiBweXhjX2Vycm9yX3Rv X2V4Y2VwdGlvbigpOwotICAgIG5yX2NwdXMgPSBwaW5mby5ucl9jcHVzOwotICAgIHJjID0geGNf dmNwdV9nZXRpbmZvKHNlbGYtPnhjX2hhbmRsZSwgZG9tLCB2Y3B1LCAmaW5mbyk7Ci0gICAgaWYg KCByYyA8IDAgKQorICAgIGlmICgocmMgPSB4Y192Y3B1X2dldGluZm8oc2VsZi0+eGNfaGFuZGxl LCBkb20sIHZjcHUsICZpbmZvKSkgPCAwKQogICAgICAgICByZXR1cm4gcHl4Y19lcnJvcl90b19l eGNlcHRpb24oKTsKLSAgICBzaXplID0gKG5yX2NwdXMgKyBjcHVtYXBfc2l6ZSAqIDggLSAxKS8g KGNwdW1hcF9zaXplICogOCk7IAogCi0gICAgaWYoKGNwdW1hcCA9IG1hbGxvYyhjcHVtYXBfc2l6 ZSAqIHNpemUpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gcHl4Y19lcnJvcl90b19leGNlcHRp b24oKTsgCi0KLSAgICByYyA9IHhjX3ZjcHVfZ2V0YWZmaW5pdHkoc2VsZi0+eGNfaGFuZGxlLCBk b20sIHZjcHUsIGNwdW1hcCwgY3B1bWFwX3NpemUgKiBzaXplKTsKLSAgICBpZiAoIHJjIDwgMCAp CisgICAgaWYgKChyYyA9IHhjX3ZjcHVfZ2V0YWZmaW5pdHkoc2VsZi0+eGNfaGFuZGxlLCBkb20s IHZjcHUsICZjcHVtYXApKSA8IDApCiAgICAgewotICAgICAgICBmcmVlKGNwdW1hcCk7CisgICAg ICAgIHhjX2NwdW1hcF9mcmVlX2JpdG1hcCgmY3B1bWFwKTsKICAgICAgICAgcmV0dXJuIHB5eGNf ZXJyb3JfdG9fZXhjZXB0aW9uKCk7CiAgICAgfQogCkBAIC00MjEsMTggKzM5MSwxNSBAQAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgImNwdSIsICAgICAgaW5mby5jcHUpOwogCiAgICAg Y3B1bGlzdCA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgZm9yICggaSA9IDA7IGkgPCBzaXplICogY3B1 bWFwX3NpemUgKiA4OyBpKysgKQorICAgIHhjX2Zvcl9lYWNoX2NwdShpLCBjcHVtYXApCiAgICAg ewotICAgICAgICBpZiAoKihjcHVtYXAgKyBpIC8gKGNwdW1hcF9zaXplICogOCkpICYgMSApIHsK LSAgICAgICAgICAgIFB5T2JqZWN0ICpweWludCA9IFB5SW50X0Zyb21Mb25nKGkpOwotICAgICAg ICAgICAgUHlMaXN0X0FwcGVuZChjcHVsaXN0LCBweWludCk7Ci0gICAgICAgICAgICBQeV9ERUNS RUYocHlpbnQpOwotICAgICAgICB9Ci0gICAgICAgICooY3B1bWFwICsgaSAvIChjcHVtYXBfc2l6 ZSAqIDgpKSA+Pj0gMTsKKyAgICAgICAgUHlPYmplY3QgKnB5aW50ID0gUHlJbnRfRnJvbUxvbmco aSk7CisgICAgICAgIFB5TGlzdF9BcHBlbmQoY3B1bGlzdCwgcHlpbnQpOworICAgICAgICBQeV9E RUNSRUYocHlpbnQpOwogICAgIH0KICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhpbmZvX2RpY3Qs ICJjcHVtYXAiLCBjcHVsaXN0KTsKICAgICBQeV9ERUNSRUYoY3B1bGlzdCk7Ci0gICAgZnJlZShj cHVtYXApOworICAgIHhjX2NwdW1hcF9mcmVlX2JpdG1hcCgmY3B1bWFwKTsKICAgICByZXR1cm4g aW5mb19kaWN0OwogfQogCg== --0016e6d64559eb1e13048305a217 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 --0016e6d64559eb1e13048305a217--