From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v5 1/4] ring.h: introduce macros to handle monodirectional rings with multiple req sizes Date: Tue, 28 Mar 2017 15:08:14 -0700 Message-ID: <1490738897-26579-1-git-send-email-sstabellini@kernel.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cszHs-0004xX-L1 for xen-devel@lists.xenproject.org; Tue, 28 Mar 2017 22:08:24 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , sstabellini@kernel.org, JBeulich@suse.com List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG1hY3Jvcywgc3RydWN0cyBhbmQgZnVuY3Rpb25zIHRvIGhh bmRsZSByaW5ncyBpbgp0aGUgZm9ybWF0IGRlc2NyaWJlZCBieSBkb2NzL21pc2MvcHZjYWxscy5t YXJrZG93biBhbmQKZG9jcy9taXNjLzlwZnMubWFya2Rvd24uIFRoZSBpbmRleCBwYWdlIChzdHJ1 Y3QgX19uYW1lIyNfZGF0YV9pbnRmKQpjb250YWlucyB0aGUgaW5kZXhlcyBhbmQgdGhlIGdyYW50 IHJlZnMgdG8gc2V0dXAgdHdvIHJpbmdzLgoKICAgICAgICAgICAgICAgSW5kZXhlcyBwYWdlCiAg ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgICAgICAgICAgICB8QDAg JE5BTUVfZGF0YV9pbnRmOiAgIHwKICAgICAgICAgICAgICAgfEA3NjogcmluZ19vcmRlciA9IDEg ICB8CiAgICAgICAgICAgICAgIHxAODA6IHJlZlswXSsgICAgICAgICAgfAogICAgICAgICAgICAg ICB8QDg0OiByZWZbMV0rICAgICAgICAgIHwKICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAg ICAgICAgICB8CiAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfAogICAgICAg ICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICB2IChkYXRhIHJpbmcpCiAgICAgICAgICAg ICAgICAgICArLS0tLS0tLSstLS0tLS0tLS0tLSsKICAgICAgICAgICAgICAgICAgIHwgIEAwLT40 MDk1OiBpbiAgICAgfAogICAgICAgICAgICAgICAgICAgfCAgcmVmWzBdICAgICAgICAgICB8CiAg ICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgICAgICAgICAg IHwgIEA0MDk2LT44MTkxOiBvdXQgfAogICAgICAgICAgICAgICAgICAgfCAgcmVmWzFdICAgICAg ICAgICB8CiAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSsKCiROQU1FX3Jl YWRfcGFja2V0IGFuZCAkTkFNRV93cml0ZV9wYWNrZXQgYXJlIHByb3ZpZGVkIHRvIHJlYWQgb3Ig d3JpdGUKYW55IGRhdGEgc3RydWN0IGZyb20vdG8gdGhlIHJpbmcuIEluIHB2Y2FsbHMsIHRoZXkg YXJlIHVudXNlZC4gSW4geGVuCjlwZnMsIHRoZXkgYXJlIHVzZWQgdG8gcmVhZCBvciB3cml0ZSB0 aGUgOXBmcyBoZWFkZXIuIEluIG90aGVyIHByb3RvY29scwp0aGV5IGNvdWxkIGJlIHVzZWQgdG8g cmVhZC93cml0ZSB0aGUgd2hvbGUgcmVxdWVzdCBzdHJ1Y3R1cmUuIFNlZQpkb2NzL21pc2MvOXBm cy5tYXJrZG93bjpSaW5nIFVzYWdlIHRvIGxlYXJuIGhvdyB0byBjaGVjayBob3cgbXVjaCBkYXRh CmlzIG9uIHRoZSByaW5nLCBhbmQgaG93IHRvIGhhbmRsZSBub3RpZmljYXRpb25zLgoKVGhlcmUg aXMgYSByaW5nX3NpemUgcGFyYW1ldGVyIHRvIG1vc3QgZnVuY3Rpb25zIHNvIHRoYXQgcHJvdG9j b2xzIHVzaW5nCnRoZXNlIG1hY3JvcyBkb24ndCBoYXZlIHRvIGhhdmUgYSBzdGF0aWNhbGx5IGRl ZmluZWQgcmluZyBvcmRlciBhdCBidWlsZAp0aW1lLiBJbiBwdmNhbGxzIGZvciBleGFtcGxlLCBl YWNoIG5ldyByaW5nIGNvdWxkIGhhdmUgYSBkaWZmZXJlbnQKb3JkZXIuCgpUaGVzZSBtYWNyb3Mg ZG9uJ3QgaGVscCB5b3Ugc2hhcmUgdGhlIGluZGV4ZXMgcGFnZSBvciB0aGUgZXZlbnQgY2hhbm5l bHMKbmVlZGVkIGZvciBub3RpZmljYXRpb25zLiBZb3UgY2FuIGRvIHRoYXQgd2l0aCBvdGhlciBv dXQgb2YgYmFuZAptZWNoYW5pc21zLCBzdWNoIGFzIHhlbnN0b3JlIG9yIGFub3RoZXIgcmluZy4K Ckl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgYSBtYWNybyB0byBkZWZpbmUgYW5vdGhlciBtYWNy byB3aXRoIGEKdmFyaWFibGUgbmFtZS4gRm9yIHRoaXMgcmVhc29uLCB0aGlzIHBhdGNoIGludHJv ZHVjZXMgc3RhdGljIGlubGluZQpmdW5jdGlvbnMgaW5zdGVhZCwgdGhhdCBhcmUgbm90IEM4OSBj b21wbGlhbnQuIEFkZGl0aW9uYWxseSwgdGhlIG1hY3JvCmRlZmluZXMgYSBzdHJ1Y3Qgd2l0aCBh IHZhcmlhYmxlIHNpemVkIGFycmF5LCB3aGljaCBpcyBhbHNvIG5vdCBDODkKY29tcGxpYW50LgoK U2lnbmVkLW9mZi1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5vQGFwb3JldG8uY29tPgpD Qzoga29ucmFkLndpbGtAb3JhY2xlLmNvbQpDQzogSkJldWxpY2hAc3VzZS5jb20KLS0tCiB4ZW4v aW5jbHVkZS9wdWJsaWMvaW8vcmluZy5oIHwgMTUwICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAxNTAgaW5zZXJ0aW9ucygrKQoKZGlm ZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3B1YmxpYy9pby9yaW5nLmggYi94ZW4vaW5jbHVkZS9wdWJs aWMvaW8vcmluZy5oCmluZGV4IDgwMWMwZGEuLjg5YzQ4ZDcgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNs dWRlL3B1YmxpYy9pby9yaW5nLmgKKysrIGIveGVuL2luY2x1ZGUvcHVibGljL2lvL3JpbmcuaApA QCAtMjcsNiArMjcsMjEgQEAKICNpZm5kZWYgX19YRU5fUFVCTElDX0lPX1JJTkdfSF9fCiAjZGVm aW5lIF9fWEVOX1BVQkxJQ19JT19SSU5HX0hfXwogCisvKgorICogV2hlbiAjaW5jbHVkZSdpbmcg dGhpcyBoZWFkZXIsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIGZvbGxvd2luZworICogZGVjbGFy YXRpb24gdXBmcm9udDoKKyAqIC0gc3RhbmRhcmQgaW50ZWdlcnMgdHlwZXMgKHVpbnQ4X3QsIHVp bnQxNl90LCBldGMpCisgKiBUaGV5IGFyZSBwcm92aWRlZCBieSBzdGRpbnQuaCBvZiB0aGUgc3Rh bmRhcmQgaGVhZGVycy4KKyAqCisgKiBJbiBhZGRpdGlvbiwgaWYgeW91IGludGVuZCB0byB1c2Ug dGhlIEZMRVggbWFjcm9zLCB5b3UgYWxzbyBuZWVkIHRvCisgKiBwcm92aWRlOgorICogLSBzaXpl X3QKKyAqIC0gbWVtY3B5CisgKiAtIGdyYW50X3JlZl90CisgKiBUaGVzZSBkZWNsYXJhdGlvbnMg YXJlIHByb3ZpZGVkIGJ5IHN0cmluZy5oIG9mIHRoZSBzdGFuZGFyZCBoZWFkZXJzLAorICogYW5k IGdyYW50X3RhYmxlLmggZnJvbSB0aGUgWGVuIHB1YmxpYyBoZWFkZXJzLgorICovCisKICNpbmNs dWRlICIuLi94ZW4tY29tcGF0LmgiCiAKICNpZiBfX1hFTl9JTlRFUkZBQ0VfVkVSU0lPTl9fIDwg MHgwMDAzMDIwOApAQCAtMzEzLDYgKzMyOCwxNDEgQEAgdHlwZWRlZiBzdHJ1Y3QgX19uYW1lIyNf YmFja19yaW5nIF9fbmFtZSMjX2JhY2tfcmluZ190CiAgICAgKF93b3JrX3RvX2RvKSA9IFJJTkdf SEFTX1VOQ09OU1VNRURfUkVTUE9OU0VTKF9yKTsgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxl ICgwKQogCisKKy8qCisgKiBERUZJTkVfWEVOX0ZMRVhfUklOR19BTkRfSU5URiBkZWZpbmVzIHR3 byBtb25vZGlyZWN0aW9uYWwgcmluZ3MgYW5kCisgKiBmdW5jdGlvbnMgdG8gY2hlY2sgaWYgdGhl cmUgaXMgZGF0YSBvbiB0aGUgcmluZywgYW5kIHRvIHJlYWQgYW5kCisgKiB3cml0ZSB0byB0aGVt LgorICoKKyAqIERFRklORV9YRU5fRkxFWF9SSU5HIGlzIHNpbWlsYXIgdG8gREVGSU5FX1hFTl9G TEVYX1JJTkdfQU5EX0lOVEYsIGJ1dAorICogZG9lcyBub3QgZGVmaW5lIHRoZSBpbmRleGVzIHBh Z2UuIEFzIGRpZmZlcmVudCBwcm90b2NvbHMgY2FuIGhhdmUKKyAqIGV4dGVuc2lvbnMgdG8gdGhl IGJhc2ljIGZvcm1hdCwgdGhpcyBtYWNybyBhbGxvdyB0aGVtIHRvIGRlZmluZSB0aGVpcgorICog b3duIHN0cnVjdC4KKyAqCisgKiBYRU5fRkxFWF9SSU5HX1NJWkUKKyAqICAgQ29udmVuaWVuY2Ug bWFjcm8gdG8gY2FsY3VsYXRlIHRoZSBzaXplIG9mIG9uZSBvZiB0aGUgdHdvIHJpbmdzCisgKiAg IGZyb20gdGhlIG92ZXJhbGwgb3JkZXIuCisgKgorICogJE5BTUVfbWFzaworICogICBGdW5jdGlv biB0byBhcHBseSB0aGUgc2l6ZSBtYXNrIHRvIGFuIGluZGV4LCB0byByZWR1Y2UgdGhlIGluZGV4 CisgKiAgIHdpdGhpbiB0aGUgcmFuZ2UgWzAtc2l6ZV0uCisgKgorICogJE5BTUVfcmVhZF9wYWNr ZXQKKyAqICAgRnVuY3Rpb24gdG8gcmVhZCBkYXRhIGZyb20gdGhlIHJpbmcuIFRoZSBhbW91bnQg b2YgZGF0YSB0byByZWFkIGlzCisgKiAgIHNwZWNpZmllZCBieSB0aGUgInNpemUiIGFyZ3VtZW50 LgorICoKKyAqICROQU1FX3dyaXRlX3BhY2tldAorICogICBGdW5jdGlvbiB0byB3cml0ZSBkYXRh IHRvIHRoZSByaW5nLiBUaGUgYW1vdW50IG9mIGRhdGEgdG8gd3JpdGUgaXMKKyAqICAgc3BlY2lm aWVkIGJ5IHRoZSAic2l6ZSIgYXJndW1lbnQuCisgKgorICogJE5BTUVfZ2V0X3JpbmdfcHRyCisg KiAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gcmVhZC93 cml0ZSB0byB0aGUKKyAqICAgcmluZyBhdCB0aGUgcmlnaHQgbG9jYXRpb24uCisgKgorICogJE5B TUVfZGF0YV9pbnRmCisgKiAgIEluZGV4ZXMgcGFnZSwgc2hhcmVkIGJldHdlZW4gZnJvbnRlbmQg YW5kIGJhY2tlbmQuIEl0IGFsc28KKyAqICAgY29udGFpbnMgdGhlIGFycmF5IG9mIGdyYW50IHJl ZnMuCisgKgorICogJE5BTUVfcXVldWVkCisgKiAgIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBob3cg bWFueSBieXRlcyBhcmUgY3VycmVudGx5IG9uIHRoZSByaW5nLAorICogICByZWFkeSB0byBiZSBy ZWFkLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNhbGN1bGF0ZSBob3cgbXVjaCBmcmVlCisgKiAg IHNwYWNlIGlzIGN1cnJlbnRseSBvbiB0aGUgcmluZyAocmluZ19zaXplIC0gJE5BTUVfcXVldWVk KCkpLgorICovCisKKyNkZWZpbmUgWEVOX1BBR0VfU0hJRlQgMTIKKyNkZWZpbmUgWEVOX0ZMRVhf UklOR19TSVpFKG9yZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAoMVVMIDw8ICgob3JkZXIpICsgWEVOX1BBR0VfU0hJRlQgLSAxKSkKKworI2Rl ZmluZSBERUZJTkVfWEVOX0ZMRVhfUklORyhuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGlubGluZSBSSU5HX0lEWCBuYW1lIyNfbWFzayhS SU5HX0lEWCBpZHgsIFJJTkdfSURYIHJpbmdfc2l6ZSkgICAgICAgICAgXAoreyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIHJldHVybiAoaWR4ICYgKHJpbmdfc2l6ZSAtIDEpKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGlubGluZSBSSU5HX0lEWCBuYW1lIyNf bWFza19vcmRlcihSSU5HX0lEWCBpZHgsIFJJTkdfSURYIHJpbmdfb3JkZXIpICAgXAoreyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIHJldHVybiAoaWR4ICYgKFhFTl9GTEVYX1JJTkdfU0laRShy aW5nX29yZGVyKSAtIDEpKTsgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBj aGFyICpuYW1lIyNfZ2V0X3JpbmdfcHRyKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgICAgICAgICAgXAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJJTkdfSURY IGlkeCwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJJTkdfSURYIHJpbmdfb3JkZXIpICAgICAgICAgXAoreyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgIHJldHVybiBidWYgKyBuYW1lIyNfbWFza19vcmRlcihpZHgsIHJp bmdfb3JkZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGlubGluZSB2b2lkIG5hbWUjI19y ZWFkX3BhY2tldChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsICAgICAgICAgICAgICAgXAorICAg ICAgICBSSU5HX0lEWCBtYXNrZWRfcHJvZCwgUklOR19JRFggKm1hc2tlZF9jb25zLCAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSSU5HX0lEWCByaW5nX3NpemUsIHZvaWQgKm9w YXF1ZSwgc2l6ZV90IHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIGlmICgqbWFza2VkX2NvbnMgPCBtYXNrZWRfcHJvZCB8fCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc2l6ZSA8PSBy aW5nX3NpemUgLSAqbWFza2VkX2NvbnMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICBtZW1jcHkob3BhcXVlLCBidWYgKyAqbWFza2VkX2NvbnMsIHNpemUpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICBtZW1jcHkob3BhcXVlLCBidWYgKyAqbWFza2VkX2NvbnMsIHJpbmdfc2l6ZSAtICptYXNrZWRf Y29ucyk7ICAgICAgICAgXAorICAgICAgICBtZW1jcHkoKHVuc2lnbmVkIGNoYXIgKilvcGFxdWUg KyByaW5nX3NpemUgLSAqbWFza2VkX2NvbnMsIGJ1ZiwgICAgICAgXAorICAgICAgICAgICAgICAg IHNpemUgLSAocmluZ19zaXplIC0gKm1hc2tlZF9jb25zKSk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICptYXNrZWRfY29ucyA9IG5hbWUj I19tYXNrKCptYXNrZWRfY29ucyArIHNpemUsIHJpbmdfc2l6ZSk7ICAgICAgICAgICAgICAgXAor fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGlu bGluZSB2b2lkIG5hbWUjI193cml0ZV9wYWNrZXQodW5zaWduZWQgY2hhciAqYnVmLCAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICBSSU5HX0lEWCAqbWFza2VkX3Byb2QsIFJJTkdfSURYIG1h c2tlZF9jb25zLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSSU5HX0lEWCBy aW5nX3NpemUsIGNvbnN0IHZvaWQgKm9wYXF1ZSwgc2l6ZV90IHNpemUpICAgICAgICAgICAgICAg ICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgqbWFza2VkX3Byb2QgPCBtYXNr ZWRfY29ucyB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICBzaXplIDw9IHJpbmdfc2l6ZSAtICptYXNrZWRfcHJvZCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtZW1jcHkoYnVmICsgKm1hc2tlZF9wcm9kLCBv cGFxdWUsIHNpemUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICBtZW1jcHkoYnVmICsgKm1hc2tlZF9wcm9kLCBvcGFxdWUsIHJp bmdfc2l6ZSAtICptYXNrZWRfcHJvZCk7ICAgICAgICAgXAorICAgICAgICBtZW1jcHkoYnVmLCAo dW5zaWduZWQgY2hhciAqKW9wYXF1ZSArIChyaW5nX3NpemUgLSAqbWFza2VkX3Byb2QpLCAgICAg XAorICAgICAgICAgICAgICAgIHNpemUgLSAocmluZ19zaXplIC0gKm1hc2tlZF9wcm9kKSk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICpt YXNrZWRfcHJvZCA9IG5hbWUjI19tYXNrKCptYXNrZWRfcHJvZCArIHNpemUsIHJpbmdfc2l6ZSk7 ICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorc3RydWN0IG5hbWUjI19kYXRhIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGNoYXIgKmluOyAv KiBoYWxmIG9mIHRoZSBhbGxvY2F0aW9uICovICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgIHVuc2lnbmVkIGNoYXIgKm91dDsgLyogaGFsZiBvZiB0aGUgYWxsb2NhdGlvbiAqLyAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGlubGluZSBSSU5H X0lEWCBuYW1lIyNfcXVldWVkKFJJTkdfSURYIHByb2QsICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICBSSU5HX0lEWCBjb25zLCBSSU5HX0lEWCByaW5nX3NpemUpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg IFJJTkdfSURYIHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwcm9k ID09IGNvbnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIHByb2QgPSBuYW1lIyNfbWFzayhwcm9kLCByaW5nX3NpemUpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvbnMgPSBuYW1lIyNfbWFzayhjb25zLCBy aW5nX3NpemUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIGlmIChwcm9kID09IGNvbnMpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4g cmluZ19zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwcm9kID4gY29ucykgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICBzaXplID0gcHJvZCAtIGNvbnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBz aXplID0gcmluZ19zaXplIC0gKGNvbnMgLSBwcm9kKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgIHJldHVybiBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfTsKKworI2RlZmluZSBERUZJ TkVfWEVOX0ZMRVhfUklOR19BTkRfSU5URihuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorc3RydWN0IG5hbWUjI19kYXRhX2ludGYgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJJTkdfSURYIGluX2NvbnMs IGluX3Byb2Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVpbnQ4X3QgcGFkMVs1Nl07ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIFJJTkdfSURYIG91dF9jb25zLCBvdXRfcHJvZDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgIHVpbnQ4X3QgcGFkMls1Nl07ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgIFJJTkdfSURYIHJpbmdfb3JkZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdyYW50X3JlZl90IHJlZltdOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorREVGSU5FX1hFTl9GTEVYX1JJTkcobmFtZSk7CisKICNlbmRpZiAvKiBf X1hFTl9QVUJMSUNfSU9fUklOR19IX18gKi8KIAogLyoKLS0gCjEuOS4xCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==