From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH v10] lib: Add a simple prime number generator Date: Thu, 22 Dec 2016 14:45:14 +0000 Message-ID: <20161222144514.3911-1-chris@chris-wilson.co.uk> References: <20161222083641.2691-5-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161222083641.2691-5-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org UHJpbWUgbnVtYmVycyBhcmUgaW50ZXJlc3RpbmcgZm9yIHRlc3RpbmcgY29tcG9uZW50cyB0aGF0 IHVzZSBtdWx0aXBsaWVzCmFuZCBkaXZpZGVzLCBzdWNoIGFzIHRlc3RpbmcgRFJNJ3Mgc3RydWN0 IGRybV9tbSBhbGlnbm1lbnQgY29tcHV0YXRpb25zLgoKdjI6IE1vdmUgdG8gbGliLywgYWRkIHNl bGZ0ZXN0CnYzOiBGaXggaW5pdGlhbCBjb25zdGFudHMgKGV4Y2x1ZGUgMC8xIGZyb20gYmVpbmcg cHJpbWVzKQp2NDogTW9yZSBSQ1UgbWFya3VwIHRvIGtlZXAgMGRheS9zcGFyc2UgaGFwcHkKdjU6 IEZpeCBSQ1UgdW53aW5kIG9uIG1vZHVsZSBleGl0LCBhZGQgdG8ga3NlbGZ0ZXN0cwp2NjogVGlk eSBjb21wdXRhdGlvbiBvZiBiaXRtYXAgc2l6ZQp2NzogZm9yX2VhY2hfcHJpbWVfbnVtYmVyX2Zy b20oKQp2ODogQ29tcG9zZSBzbWFsbC1wcmltZXMgdXNpbmcgQklUKCkgZm9yIGVhc2llciB2ZXJp ZmljYXRpb24Kdjk6IE1vdmUgcmN1IGRhbmNlIGVudGlyZWx5IGludG8gY2FsbGVycy4KdjEwOiBJ bXByb3ZlIHF1b3RlIGZvciBCZXRyYW5kJ3MgUG9zdHVsYXRlIChha2EgQ2hlYnlzaGV2J3MgdGhl b3JlbSkKClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNv LnVrPgpDYzogTHVrYXMgV3VubmVyIDxsdWthc0B3dW5uZXIuZGU+ClJldmlld2VkLWJ5OiBKb29u YXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+Ci0tLQogaW5jbHVk ZS9saW51eC9wcmltZV9udW1iZXJzLmggICAgICAgICAgICAgICAgfCAgMzcgKysrKwogbGliL0tj b25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKwogbGliL01ha2Vm aWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogbGliL3ByaW1lX251 bWJlcnMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMTQgKysrKysrKysrKysrKysrKysr KysrKysrKysrCiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saWIvcHJpbWVfbnVtYmVycy5zaCB8 ICAxNSArKwogNSBmaWxlcyBjaGFuZ2VkLCAzNzUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGluY2x1ZGUvbGludXgvcHJpbWVfbnVtYmVycy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliL3ByaW1lX251bWJlcnMuYwogY3JlYXRlIG1vZGUgMTAwNzU1IHRvb2xzL3Rlc3Rpbmcvc2Vs ZnRlc3RzL2xpYi9wcmltZV9udW1iZXJzLnNoCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9w cmltZV9udW1iZXJzLmggYi9pbmNsdWRlL2xpbnV4L3ByaW1lX251bWJlcnMuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE0ZWM0ZjU2NzM0MgotLS0gL2Rldi9udWxs CisrKyBiL2luY2x1ZGUvbGludXgvcHJpbWVfbnVtYmVycy5oCkBAIC0wLDAgKzEsMzcgQEAKKyNp Zm5kZWYgX19MSU5VWF9QUklNRV9OVU1CRVJTX0gKKyNkZWZpbmUgX19MSU5VWF9QUklNRV9OVU1C RVJTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2Jvb2wgaXNfcHJpbWVfbnVtYmVy KHVuc2lnbmVkIGxvbmcgeCk7Cit1bnNpZ25lZCBsb25nIG5leHRfcHJpbWVfbnVtYmVyKHVuc2ln bmVkIGxvbmcgeCk7CisKKy8qKgorICogZm9yX2VhY2hfcHJpbWVfbnVtYmVyIC0gaXRlcmF0ZSBv dmVyIGVhY2ggcHJpbWUgdXB0byBhIHZhbHVlCisgKiBAcHJpbWU6IHRoZSBjdXJyZW50IHByaW1l IG51bWJlciBpbiB0aGlzIGl0ZXJhdGlvbgorICogQG1heDogdGhlIHVwcGVyIGxpbWl0CisgKgor ICogU3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgcHJpbWUgbnVtYmVyIDIgaXRlcmF0ZSBvdmVyIGVh Y2ggcHJpbWUgbnVtYmVyIHVwIHRvCisgKiB0aGUgQG1heCB2YWx1ZS4gT24gZWFjaCBpdGVyYXRp b24sIEBwcmltZSBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgcHJpbWUgbnVtYmVyLgorICogQG1heCBz aG91bGQgYmUgbGVzcyB0aGFuIFVMT05HX01BWCB0byBlbnN1cmUgdGVybWluYXRpb24uIFRvIGJl Z2luIHdpdGgKKyAqIEBwcmltZSBzZXQgdG8gMSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uIHVzZSBm b3JfZWFjaF9wcmltZV9udW1iZXJfZnJvbSgpCisgKiBpbnN0ZWFkLgorICovCisjZGVmaW5lIGZv cl9lYWNoX3ByaW1lX251bWJlcihwcmltZSwgbWF4KSBcCisJZm9yX2VhY2hfcHJpbWVfbnVtYmVy X2Zyb20oKHByaW1lKSwgMiwgKG1heCkpCisKKy8qKgorICogZm9yX2VhY2hfcHJpbWVfbnVtYmVy X2Zyb20gLSBpdGVyYXRlIG92ZXIgZWFjaCBwcmltZSB1cHRvIGEgdmFsdWUKKyAqIEBwcmltZTog dGhlIGN1cnJlbnQgcHJpbWUgbnVtYmVyIGluIHRoaXMgaXRlcmF0aW9uCisgKiBAZnJvbTogdGhl IGluaXRpYWwgdmFsdWUKKyAqIEBtYXg6IHRoZSB1cHBlciBsaW1pdAorICoKKyAqIFN0YXJ0aW5n IGZyb20gQGZyb20gaXRlcmF0ZSBvdmVyIGVhY2ggc3VjY2Vzc2l2ZSBwcmltZSBudW1iZXIgdXAg dG8gdGhlCisgKiBAbWF4IHZhbHVlLiBPbiBlYWNoIGl0ZXJhdGlvbiwgQHByaW1lIGlzIHNldCB0 byB0aGUgY3VycmVudCBwcmltZSBudW1iZXIuCisgKiBAbWF4IHNob3VsZCBiZSBsZXNzIHRoYW4g VUxPTkdfTUFYLCBhbmQgQGZyb20gbGVzcyB0aGFuIEBtYXgsIHRvIGVuc3VyZQorICogdGVybWlu YXRpb24uCisgKi8KKyNkZWZpbmUgZm9yX2VhY2hfcHJpbWVfbnVtYmVyX2Zyb20ocHJpbWUsIGZy b20sIG1heCkgXAorCWZvciAocHJpbWUgPSAoZnJvbSk7IHByaW1lIDw9IChtYXgpOyBwcmltZSA9 IG5leHRfcHJpbWVfbnVtYmVyKHByaW1lKSkKKworI2VuZGlmIC8qICFfX0xJTlVYX1BSSU1FX05V TUJFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCAy NjBhODBlMzEzYjkuLjE3ODhhMWY1MGQyOCAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcKKysrIGIv bGliL0tjb25maWcKQEAgLTU1MCw0ICs1NTAsMTEgQEAgY29uZmlnIFNUQUNLREVQT1QKIGNvbmZp ZyBTQklUTUFQCiAJYm9vbAogCitjb25maWcgUFJJTUVfTlVNQkVSUworCXRyaXN0YXRlICJQcmlt ZSBudW1iZXIgZ2VuZXJhdG9yIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFByb3ZpZGVzIGEgaGVs cGVyIG1vZHVsZSB0byBnZW5lcmF0ZSBwcmltZSBudW1iZXJzLiBVc2VmdWwgZm9yIHdyaXRpbmcK KwkgIHRlc3QgY29kZSwgZXNwZWNpYWxseSB3aGVuIGNoZWNraW5nIG11bHRpcGxpY2F0aW9uIGFu ZCBkaXZpc29uLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFr ZWZpbGUKaW5kZXggNTAxNDRhM2FlZWJkLi5jNjY0MTQzZmQ5MTcgMTAwNjQ0Ci0tLSBhL2xpYi9N YWtlZmlsZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTE5Nyw2ICsxOTcsOCBAQCBvYmotJChDT05G SUdfQVNOMSkgKz0gYXNuMV9kZWNvZGVyLm8KIAogb2JqLSQoQ09ORklHX0ZPTlRfU1VQUE9SVCkg Kz0gZm9udHMvCiAKK29iai0kKENPTkZJR19QUklNRV9OVU1CRVJTKSArPSBwcmltZV9udW1iZXJz Lm8KKwogaG9zdHByb2dzLXkJOj0gZ2VuX2NyYzMydGFibGUKIGNsZWFuLWZpbGVzCTo9IGNyYzMy dGFibGUuaAogCmRpZmYgLS1naXQgYS9saWIvcHJpbWVfbnVtYmVycy5jIGIvbGliL3ByaW1lX251 bWJlcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmM5YjNjMjk2 MTRhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9wcmltZV9udW1iZXJzLmMKQEAgLTAsMCArMSwz MTQgQEAKKyNkZWZpbmUgcHJfZm10KGZtdCkgInByaW1lIG51bWJlcnM6ICIgZm10ICJcbiIKKwor I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5j bHVkZSA8bGludXgvcHJpbWVfbnVtYmVycy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKwor I2RlZmluZSBiaXRtYXBfc2l6ZShuYml0cykgKEJJVFNfVE9fTE9OR1MobmJpdHMpICogc2l6ZW9m KHVuc2lnbmVkIGxvbmcpKQorCitzdHJ1Y3QgcHJpbWVzIHsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1 OworCXVuc2lnbmVkIGxvbmcgbGFzdCwgc3o7CisJdW5zaWduZWQgbG9uZyBwcmltZXNbXTsKK307 CisKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CitzdGF0aWMgY29uc3Qgc3RydWN0IHByaW1lcyBz bWFsbF9wcmltZXMgPSB7CisJLmxhc3QgPSA2MSwKKwkuc3ogPSA2NCwKKwkucHJpbWVzID0gewor CQlCSVQoMikgfAorCQlCSVQoMykgfAorCQlCSVQoNSkgfAorCQlCSVQoNykgfAorCQlCSVQoMTEp IHwKKwkJQklUKDEzKSB8CisJCUJJVCgxNykgfAorCQlCSVQoMTkpIHwKKwkJQklUKDIzKSB8CisJ CUJJVCgyOSkgfAorCQlCSVQoMzEpIHwKKwkJQklUKDM3KSB8CisJCUJJVCg0MSkgfAorCQlCSVQo NDMpIHwKKwkJQklUKDQ3KSB8CisJCUJJVCg1MykgfAorCQlCSVQoNTkpIHwKKwkJQklUKDYxKQor CX0KK307CisjZWxpZiBCSVRTX1BFUl9MT05HID09IDMyCitzdGF0aWMgY29uc3Qgc3RydWN0IHBy aW1lcyBzbWFsbF9wcmltZXMgPSB7CisJLmxhc3QgPSAzMSwKKwkuc3ogPSAzMiwKKwkucHJpbWVz ID0geworCQlCSVQoMikgfAorCQlCSVQoMykgfAorCQlCSVQoNSkgfAorCQlCSVQoNykgfAorCQlC SVQoMTEpIHwKKwkJQklUKDEzKSB8CisJCUJJVCgxNykgfAorCQlCSVQoMTkpIHwKKwkJQklUKDIz KSB8CisJCUJJVCgyOSkgfAorCQlCSVQoMzEpCisJfQorfTsKKyNlbHNlCisjZXJyb3IgInVuaGFu ZGxlZCBCSVRTX1BFUl9MT05HIgorI2VuZGlmCisKK3N0YXRpYyBERUZJTkVfTVVURVgobG9jayk7 CitzdGF0aWMgY29uc3Qgc3RydWN0IHByaW1lcyBfX3JjdSAqcHJpbWVzID0gUkNVX0lOSVRJQUxJ WkVSKCZzbWFsbF9wcmltZXMpOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZWxmdGVzdF9tYXg7 CisKK3N0YXRpYyBib29sIHNsb3dfaXNfcHJpbWVfbnVtYmVyKHVuc2lnbmVkIGxvbmcgeCkKK3sK Kwl1bnNpZ25lZCBsb25nIHkgPSBpbnRfc3FydCh4KTsKKworCXdoaWxlICh5ID4gMSkgeworCQlp ZiAoKHggJSB5KSA9PSAwKQorCQkJYnJlYWs7CisJCXktLTsKKwl9CisKKwlyZXR1cm4geSA9PSAx OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzbG93X25leHRfcHJpbWVfbnVtYmVyKHVuc2ln bmVkIGxvbmcgeCkKK3sKKwl3aGlsZSAoeCA8IFVMT05HX01BWCAmJiAhc2xvd19pc19wcmltZV9u dW1iZXIoKyt4KSkKKwkJOworCisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25n IGNsZWFyX211bHRpcGxlcyh1bnNpZ25lZCBsb25nIHgsCisJCQkJICAgICB1bnNpZ25lZCBsb25n ICpwLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkgICAgIHVuc2lnbmVkIGxv bmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgbTsKKworCW0gPSAyICogeDsKKwlpZiAobSA8IHN0 YXJ0KQorCQltID0gcm91bmR1cChzdGFydCwgeCk7CisKKwl3aGlsZSAobSA8IGVuZCkgeworCQlf X2NsZWFyX2JpdChtLCBwKTsKKwkJbSArPSB4OworCX0KKworCXJldHVybiB4OworfQorCitzdGF0 aWMgYm9vbCBleHBhbmRfdG9fbmV4dF9wcmltZSh1bnNpZ25lZCBsb25nIHgpCit7CisJY29uc3Qg c3RydWN0IHByaW1lcyAqcDsKKwlzdHJ1Y3QgcHJpbWVzICpuZXc7CisJdW5zaWduZWQgbG9uZyBz eiwgeTsKKworCS8qIEJldHJhbmQncyBQb3N0dWxhdGUgKG9yIENoZWJ5c2hldidzIHRoZW9yZW0p IHN0YXRlcyB0aGF0IGlmIG4gPiAzLAorCSAqIHRoZXJlIGlzIGFsd2F5cyBhdCBsZWFzdCBvbmUg cHJpbWUgcCBiZXR3ZWVuIG4gYW5kIDJuIC0gMi4KKwkgKiBFcXVpdmFsZW50bHksIGlmIG4gPiAx LCB0aGVuIHRoZXJlIGlzIGFsd2F5cyBhdCBsZWFzdCBvbmUgcHJpbWUgcAorCSAqIHN1Y2ggdGhh dCBuIDwgcCA8IDJuLgorCSAqCisJICogaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9CZXJ0 cmFuZHNQb3N0dWxhdGUuaHRtbAorCSAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jl cnRyYW5kJ3NfcG9zdHVsYXRlCisJICovCisJc3ogPSAyICogeDsKKwlpZiAoc3ogPCB4KQorCQly ZXR1cm4gZmFsc2U7CisKKwlzeiA9IHJvdW5kX3VwKHN6LCBCSVRTX1BFUl9MT05HKTsKKwluZXcg PSBrbWFsbG9jKHNpemVvZigqbmV3KSArIGJpdG1hcF9zaXplKHN6KSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFuZXcpCisJCXJldHVybiBmYWxzZTsKKworCW11dGV4X2xvY2soJmxvY2spOworCXAgPSBy Y3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHByaW1lcywgbG9ja2RlcF9pc19oZWxkKCZsb2NrKSk7 CisJaWYgKHggPCBwLT5sYXN0KSB7CisJCWtmcmVlKG5ldyk7CisJCWdvdG8gdW5sb2NrOworCX0K KworCS8qIFdoZXJlIG1lbW9yeSBwZXJtaXRzLCB0cmFjayB0aGUgcHJpbWVzIHVzaW5nIHRoZQor CSAqIFNpZXZlIG9mIEVyYXRvc3RoZW5lcy4gVGhlIHNpZXZlIGlzIHRvIHJlbW92ZSBhbGwgbXVs dGlwbGVzIG9mIGtub3duCisJICogcHJpbWVzIGZyb20gdGhlIHNldCwgd2hhdCByZW1haW5zIGlu IHRoZSBzZXQgaXMgdGhlcmVmb3JlIHByaW1lLgorCSAqLworCWJpdG1hcF9maWxsKG5ldy0+cHJp bWVzLCBzeik7CisJYml0bWFwX2NvcHkobmV3LT5wcmltZXMsIHAtPnByaW1lcywgcC0+c3opOwor CWZvciAoeSA9IDJVTDsgeSA8IHN6OyB5ID0gZmluZF9uZXh0X2JpdChuZXctPnByaW1lcywgc3os IHkgKyAxKSkKKwkJbmV3LT5sYXN0ID0gY2xlYXJfbXVsdGlwbGVzKHksIG5ldy0+cHJpbWVzLCBw LT5zeiwgc3opOworCW5ldy0+c3ogPSBzejsKKworCUJVR19PTihuZXctPmxhc3QgPD0geCk7CisK KwlyY3VfYXNzaWduX3BvaW50ZXIocHJpbWVzLCBuZXcpOworCWlmIChwICE9ICZzbWFsbF9wcmlt ZXMpCisJCWtmcmVlX3JjdSgoc3RydWN0IHByaW1lcyAqKXAsIHJjdSk7CisKK3VubG9jazoKKwlt dXRleF91bmxvY2soJmxvY2spOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBmcmVl X3ByaW1lcyh2b2lkKQoreworCWNvbnN0IHN0cnVjdCBwcmltZXMgKnA7CisKKwltdXRleF9sb2Nr KCZsb2NrKTsKKwlwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwcmltZXMsIGxvY2tkZXBf aXNfaGVsZCgmbG9jaykpOworCWlmIChwICE9ICZzbWFsbF9wcmltZXMpIHsKKwkJcmN1X2Fzc2ln bl9wb2ludGVyKHByaW1lcywgJnNtYWxsX3ByaW1lcyk7CisJCWtmcmVlX3JjdSgoc3RydWN0IHBy aW1lcyAqKXAsIHJjdSk7CisJfQorCW11dGV4X3VubG9jaygmbG9jayk7Cit9CisKKy8qKgorICog bmV4dF9wcmltZV9udW1iZXIgLSByZXR1cm4gdGhlIG5leHQgcHJpbWUgbnVtYmVyCisgKiBAeDog dGhlIHN0YXJ0aW5nIHBvaW50IGZvciBzZWFyY2hpbmcgdG8gdGVzdAorICoKKyAqIEEgcHJpbWUg bnVtYmVyIGlzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDEgdGhhdCBpcyBvbmx5IGRpdmlzaWJs ZSBieQorICogaXRzZWxmIGFuZCAxLiAgVGhlIHNldCBvZiBwcmltZSBudW1iZXJzIGlzIGNvbXB1 dGVkIHVzaW5nIHRoZSBTaWV2ZSBvZgorICogRXJhdG9zaGVuZXMgKG9uIGZpbmRpbmcgYSBwcmlt ZSwgYWxsIG11bHRpcGxlcyBvZiB0aGF0IHByaW1lIGFyZSByZW1vdmVkCisgKiBmcm9tIHRoZSBz ZXQpIGVuYWJsaW5nIGEgZmFzdCBsb29rdXAgb2YgdGhlIG5leHQgcHJpbWUgbnVtYmVyIGxhcmdl ciB0aGFuCisgKiBAeC4gSWYgdGhlIHNpZXZlIGZhaWxzIChtZW1vcnkgbGltaXRhdGlvbiksIHRo ZSBzZWFyY2ggZmFsbHMgYmFjayB0byB1c2luZworICogc2xvdyB0cmlhbC1kaXZpc29uLCB1cCB0 byB0aGUgdmFsdWUgb2YgVUxPTkdfTUFYICh3aGljaCBpcyByZXBvcnRlZCBhcyB0aGUKKyAqIGZp bmFsIHByaW1lIGFzIGEgc2VudGluZWwpLgorICoKKyAqIFJldHVybnM6IHRoZSBuZXh0IHByaW1l IG51bWJlciBsYXJnZXIgdGhhbiBAeAorICovCit1bnNpZ25lZCBsb25nIG5leHRfcHJpbWVfbnVt YmVyKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwljb25zdCBzdHJ1Y3QgcHJpbWVzICpwOworCisJcmN1 X3JlYWRfbG9jaygpOworCXAgPSByY3VfZGVyZWZlcmVuY2UocHJpbWVzKTsKKwl3aGlsZSAoeCA+ PSBwLT5sYXN0KSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCisJCWlmICghZXhwYW5kX3RvX25l eHRfcHJpbWUoeCkpCisJCQlyZXR1cm4gc2xvd19uZXh0X3ByaW1lX251bWJlcih4KTsKKworCQly Y3VfcmVhZF9sb2NrKCk7CisJCXAgPSByY3VfZGVyZWZlcmVuY2UocHJpbWVzKTsKKwl9CisJeCA9 IGZpbmRfbmV4dF9iaXQocC0+cHJpbWVzLCBwLT5sYXN0LCB4ICsgMSk7CisJcmN1X3JlYWRfdW5s b2NrKCk7CisKKwlyZXR1cm4geDsKK30KK0VYUE9SVF9TWU1CT0wobmV4dF9wcmltZV9udW1iZXIp OworCisvKioKKyAqIGlzX3ByaW1lX251bWJlciAtIHRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gbnVt YmVyIGlzIHByaW1lCisgKiBAeDogdGhlIG51bWJlciB0byB0ZXN0CisgKgorICogQSBwcmltZSBu dW1iZXIgaXMgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMSB0aGF0IGlzIG9ubHkgZGl2aXNpYmxl IGJ5CisgKiBpdHNlbGYgYW5kIDEuIEludGVybmFsbHkgYSBjYWNoZSBvZiBwcmltZSBudW1iZXJz IGlzIGtlcHQgKHRvIHNwZWVkIHVwCisgKiBzZWFyY2hpbmcgZm9yIHNlcXVlbnRpYWwgcHJpbWVz LCBzZWUgbmV4dF9wcmltZV9udW1iZXIoKSksIGJ1dCBpZiB0aGUgbnVtYmVyCisgKiBmYWxscyBv dXRzaWRlIG9mIHRoYXQgY2FjaGUsIGl0cyBwcmltYWxpdHkgaXMgdGVzdGVkIHVzaW5nIHRyaWFs LWRpdmlzb24uCisgKgorICogUmV0dXJuczogdHJ1ZSBpZiBAeCBpcyBwcmltZSwgZmFsc2UgZm9y IGNvbXBvc2l0ZSBudW1iZXJzLgorICovCitib29sIGlzX3ByaW1lX251bWJlcih1bnNpZ25lZCBs b25nIHgpCit7CisJY29uc3Qgc3RydWN0IHByaW1lcyAqcDsKKwlib29sIHJlc3VsdDsKKworCXJj dV9yZWFkX2xvY2soKTsKKwlwID0gcmN1X2RlcmVmZXJlbmNlKHByaW1lcyk7CisJd2hpbGUgKHgg Pj0gcC0+c3opIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJaWYgKCFleHBhbmRfdG9fbmV4 dF9wcmltZSh4KSkKKwkJCXJldHVybiBzbG93X2lzX3ByaW1lX251bWJlcih4KTsKKworCQlyY3Vf cmVhZF9sb2NrKCk7CisJCXAgPSByY3VfZGVyZWZlcmVuY2UocHJpbWVzKTsKKwl9CisJcmVzdWx0 ID0gdGVzdF9iaXQoeCwgcC0+cHJpbWVzKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVy biByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MKGlzX3ByaW1lX251bWJlcik7CisKK3N0YXRpYyB2 b2lkIGR1bXBfcHJpbWVzKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IHByaW1lcyAqcDsKKwljaGFy ICpidWY7CisKKwlidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisKKwlyY3Vf cmVhZF9sb2NrKCk7CisJcCA9IHJjdV9kZXJlZmVyZW5jZShwcmltZXMpOworCisJaWYgKGJ1ZikK KwkJYml0bWFwX3ByaW50X3RvX3BhZ2VidWYodHJ1ZSwgYnVmLCBwLT5wcmltZXMsIHAtPnN6KTsK Kwlwcl9pbmZvKCJwcmltZXMue2xhc3Q9JWx1LCAuc3o9JWx1LCAucHJpbWVzW109Li4ueCVseH0g PSAlcyIsCisJCXAtPmxhc3QsIHAtPnN6LCBwLT5wcmltZXNbQklUU19UT19MT05HUyhwLT5zeikg LSAxXSwgYnVmKTsKKworCXJjdV9yZWFkX3VubG9jaygpOworCisJa2ZyZWUoYnVmKTsKK30KKwor c3RhdGljIGludCBzZWxmdGVzdCh1bnNpZ25lZCBsb25nIG1heCkKK3sKKwl1bnNpZ25lZCBsb25n IHgsIGxhc3Q7CisKKwlpZiAoIW1heCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGxhc3QgPSAwLCB4 ID0gMjsgeCA8IG1heDsgeCsrKSB7CisJCWJvb2wgc2xvdyA9IHNsb3dfaXNfcHJpbWVfbnVtYmVy KHgpOworCQlib29sIGZhc3QgPSBpc19wcmltZV9udW1iZXIoeCk7CisKKwkJaWYgKHNsb3cgIT0g ZmFzdCkgeworCQkJcHJfZXJyKCJpbmNvbnNpc3RlbnQgcmVzdWx0IGZvciBpcy1wcmltZSglbHUp OiBzbG93PSVzLCBmYXN0PSVzISIsCisJCQkgICAgICAgeCwgc2xvdyA/ICJ5ZXMiIDogIm5vIiwg ZmFzdCA/ICJ5ZXMiIDogIm5vIik7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWlmICghc2xvdykK KwkJCWNvbnRpbnVlOworCisJCWlmIChuZXh0X3ByaW1lX251bWJlcihsYXN0KSAhPSB4KSB7CisJ CQlwcl9lcnIoImluY29ycmVjdCByZXN1bHQgZm9yIG5leHQtcHJpbWUoJWx1KTogZXhwZWN0ZWQg JWx1LCBnb3QgJWx1IiwKKwkJCSAgICAgICBsYXN0LCB4LCBuZXh0X3ByaW1lX251bWJlcihsYXN0 KSk7CisJCQlnb3RvIGVycjsKKwkJfQorCQlsYXN0ID0geDsKKwl9CisKKwlwcl9pbmZvKCJzZWxm dGVzdCglbHUpIHBhc3NlZCwgbGFzdCBwcmltZSB3YXMgJWx1IiwgeCwgbGFzdCk7CisJcmV0dXJu IDA7CisKK2VycjoKKwlkdW1wX3ByaW1lcygpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0 aWMgaW50IF9faW5pdCBwcmltZXNfaW5pdCh2b2lkKQoreworCXJldHVybiBzZWxmdGVzdChzZWxm dGVzdF9tYXgpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHJpbWVzX2V4aXQodm9pZCkKK3sK KwlmcmVlX3ByaW1lcygpOworfQorCittb2R1bGVfaW5pdChwcmltZXNfaW5pdCk7Cittb2R1bGVf ZXhpdChwcmltZXNfZXhpdCk7CisKK21vZHVsZV9wYXJhbV9uYW1lZChzZWxmdGVzdCwgc2VsZnRl c3RfbWF4LCB1bG9uZywgMDQwMCk7CisKK01PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9u Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3Nl bGZ0ZXN0cy9saWIvcHJpbWVfbnVtYmVycy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xp Yi9wcmltZV9udW1iZXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAw MC4uZGE0Y2JjZDc2NmY1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVz dHMvbGliL3ByaW1lX251bWJlcnMuc2gKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisjIENo ZWNrcyBmYXN0L3Nsb3cgcHJpbWVfbnVtYmVyIGdlbmVyYXRpb24gZm9yIGluY29uc2lzdGVuY2ll cworCitpZiAhIC9zYmluL21vZHByb2JlIC1xIC1yIHByaW1lX251bWJlcnM7IHRoZW4KKwllY2hv ICJwcmltZV9udW1iZXJzOiBbU0tJUF0iCisJZXhpdCA3NworZmkKKworaWYgL3NiaW4vbW9kcHJv YmUgLXEgcHJpbWVfbnVtYmVycyBzZWxmdGVzdD02NTUzNjsgdGhlbgorCS9zYmluL21vZHByb2Jl IC1xIC1yIHByaW1lX251bWJlcnMKKwllY2hvICJwcmltZV9udW1iZXJzOiBvayIKK2Vsc2UKKwll Y2hvICJwcmltZV9udW1iZXJzOiBbRkFJTF0iCisJZXhpdCAxCitmaQotLSAKMi4xMS4wCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK