From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH v2 03/12] drm/i915/fbdev: Move intel_fb_initial_config() to fbdev helper Date: Sun, 7 Apr 2019 18:52:34 +0200 Message-ID: <20190407165243.54043-4-noralf@tronnes.org> References: <20190407165243.54043-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190407165243.54043-1-noralf@tronnes.org> 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: Jani Nikula , daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= List-Id: dri-devel@lists.freedesktop.org SXQgaXMgZ2VuZXJpYyBjb2RlIGFuZCBoYXZpbmcgaXQgaW4gdGhlIGhlbHBlciB3aWxsIGxldCBv dGhlciBkcml2ZXJzCmJlbmVmaXQgZnJvbSBpdC4KCk9uZSBjaGFuZ2Ugd2FzIG5lY2Vzc2FyeSBh c3N1bWluZyB0aGlzIHRvIGJlIHRydWU6CklOVEVMX0lORk8oZGV2X3ByaXYpLT5udW1fcGlwZXMg PT0gZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YwoKU3VnZ2VzdGVkLWJ5OiBEYW5pZWwgVmV0dGVy IDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgpDYzogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGxp bnV4LmludGVsLmNvbT4KQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4 LmludGVsLmNvbT4KQ2M6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZpQGludGVsLmNvbT4KQ2M6 IGludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKU2lnbmVkLW9mZi1ieTogTm9yYWxmIFRy w7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+ClJldmlld2VkLWJ5OiBKYW5pIE5pa3VsYSA8amFu aS5uaWt1bGFAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMg ICAgfCAxOTQgKysrKysrKysrKysrKysrKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZmJkZXYuYyB8IDIxOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaW5jbHVk ZS9kcm0vZHJtX2ZiX2hlbHBlci5oICAgICAgICB8ICAyMyAtLS0KIDMgZmlsZXMgY2hhbmdlZCwg MTkwIGluc2VydGlvbnMoKyksIDI0NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIu YwppbmRleCBhNmJlMDlhZTg5OWIuLmVkYThiNjNmMzUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2RybV9mYl9oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBl ci5jCkBAIC0yNTU2LDYgKzI1NTYsMTk0IEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjX3Jv dGF0aW9uKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJZmJfaGVscGVyLT5zd19y b3RhdGlvbnMgfD0gRFJNX01PREVfUk9UQVRFXzA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Zi X2hlbHBlcl9jcnRjICoKK2RybV9mYl9oZWxwZXJfY3J0YyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAq ZmJfaGVscGVyLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJaW50IGk7CisKKwlmb3IgKGkg PSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspCisJCWlmIChmYl9oZWxwZXItPmNy dGNfaW5mb1tpXS5tb2RlX3NldC5jcnRjID09IGNydGMpCisJCQlyZXR1cm4gJmZiX2hlbHBlci0+ Y3J0Y19pbmZvW2ldOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFRyeSB0byByZWFkIHRoZSBC SU9TIGRpc3BsYXkgY29uZmlndXJhdGlvbiBhbmQgdXNlIGl0IGZvciB0aGUgaW5pdGlhbCBjb25m aWcgKi8KK3N0YXRpYyBib29sIGRybV9mYl9oZWxwZXJfZmlybXdhcmVfY29uZmlnKHN0cnVjdCBk cm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCisJCQkJCSAgc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0 YyAqKmNydGNzLAorCQkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCisJCQkJ CSAgc3RydWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldHMsCisJCQkJCSAgYm9vbCAqZW5hYmxlZCwg aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9o ZWxwZXItPmRldjsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSBtaW4oZmJfaGVscGVyLT5jb25uZWN0 b3JfY291bnQsIEJJVFNfUEVSX0xPTkcpOworCXVuc2lnbmVkIGxvbmcgY29ubl9jb25maWd1cmVk LCBjb25uX3NlcTsKKwlpbnQgaSwgajsKKwlib29sICpzYXZlX2VuYWJsZWQ7CisJYm9vbCBmYWxs YmFjayA9IHRydWUsIHJldCA9IHRydWU7CisJaW50IG51bV9jb25uZWN0b3JzX2VuYWJsZWQgPSAw OworCWludCBudW1fY29ubmVjdG9yc19kZXRlY3RlZCA9IDA7CisJc3RydWN0IGRybV9tb2Rlc2V0 X2FjcXVpcmVfY3R4IGN0eDsKKworCXNhdmVfZW5hYmxlZCA9IGtjYWxsb2MoY291bnQsIHNpemVv Zihib29sKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXZlX2VuYWJsZWQpCisJCXJldHVybiBmYWxz ZTsKKworCWRybV9tb2Rlc2V0X2FjcXVpcmVfaW5pdCgmY3R4LCAwKTsKKworCXdoaWxlIChkcm1f bW9kZXNldF9sb2NrX2FsbF9jdHgoZGV2LCAmY3R4KSAhPSAwKQorCQlkcm1fbW9kZXNldF9iYWNr b2ZmKCZjdHgpOworCisJbWVtY3B5KHNhdmVfZW5hYmxlZCwgZW5hYmxlZCwgY291bnQpOworCWNv bm5fc2VxID0gR0VOTUFTSyhjb3VudCAtIDEsIDApOworCWNvbm5fY29uZmlndXJlZCA9IDA7City ZXRyeToKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2ZiX2hl bHBlcl9jb25uZWN0b3IgKmZiX2Nvbm47CisJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3I7CisJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwkJc3RydWN0IGRybV9mYl9oZWxw ZXJfY3J0YyAqbmV3X2NydGM7CisKKwkJZmJfY29ubiA9IGZiX2hlbHBlci0+Y29ubmVjdG9yX2lu Zm9baV07CisJCWNvbm5lY3RvciA9IGZiX2Nvbm4tPmNvbm5lY3RvcjsKKworCQlpZiAoY29ubl9j b25maWd1cmVkICYgQklUKGkpKQorCQkJY29udGludWU7CisKKwkJLyogRmlyc3QgcGFzcywgb25s eSBjb25zaWRlciB0aWxlZCBjb25uZWN0b3JzICovCisJCWlmIChjb25uX3NlcSA9PSBHRU5NQVNL KGNvdW50IC0gMSwgMCkgJiYgIWNvbm5lY3Rvci0+aGFzX3RpbGUpCisJCQljb250aW51ZTsKKwor CQlpZiAoY29ubmVjdG9yLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpCisJ CQludW1fY29ubmVjdG9yc19kZXRlY3RlZCsrOworCisJCWlmICghZW5hYmxlZFtpXSkgeworCQkJ RFJNX0RFQlVHX0tNUygiY29ubmVjdG9yICVzIG5vdCBlbmFibGVkLCBza2lwcGluZ1xuIiwKKwkJ CQkgICAgICBjb25uZWN0b3ItPm5hbWUpOworCQkJY29ubl9jb25maWd1cmVkIHw9IEJJVChpKTsK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNvbm5lY3Rvci0+Zm9yY2UgPT0gRFJNX0ZPUkNF X09GRikgeworCQkJRFJNX0RFQlVHX0tNUygiY29ubmVjdG9yICVzIGlzIGRpc2FibGVkIGJ5IHVz ZXIsIHNraXBwaW5nXG4iLAorCQkJCSAgICAgIGNvbm5lY3Rvci0+bmFtZSk7CisJCQllbmFibGVk W2ldID0gZmFsc2U7CisJCQljb250aW51ZTsKKwkJfQorCisJCWVuY29kZXIgPSBjb25uZWN0b3It PnN0YXRlLT5iZXN0X2VuY29kZXI7CisJCWlmICghZW5jb2RlciB8fCBXQVJOX09OKCFjb25uZWN0 b3ItPnN0YXRlLT5jcnRjKSkgeworCQkJaWYgKGNvbm5lY3Rvci0+Zm9yY2UgPiBEUk1fRk9SQ0Vf T0ZGKQorCQkJCWdvdG8gYmFpbDsKKworCQkJRFJNX0RFQlVHX0tNUygiY29ubmVjdG9yICVzIGhh cyBubyBlbmNvZGVyIG9yIGNydGMsIHNraXBwaW5nXG4iLAorCQkJCSAgICAgIGNvbm5lY3Rvci0+ bmFtZSk7CisJCQllbmFibGVkW2ldID0gZmFsc2U7CisJCQljb25uX2NvbmZpZ3VyZWQgfD0gQklU KGkpOworCQkJY29udGludWU7CisJCX0KKworCQludW1fY29ubmVjdG9yc19lbmFibGVkKys7CisK KwkJbmV3X2NydGMgPSBkcm1fZmJfaGVscGVyX2NydGMoZmJfaGVscGVyLCBjb25uZWN0b3ItPnN0 YXRlLT5jcnRjKTsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgd2UncmUgbm90IHRyeWluZyB0byBk cml2ZSBtdWx0aXBsZSBjb25uZWN0b3JzCisJCSAqIHdpdGggYSBzaW5nbGUgQ1JUQywgc2luY2Ug b3VyIGNsb25pbmcgc3VwcG9ydCBtYXkgbm90CisJCSAqIG1hdGNoIHRoZSBCSU9TLgorCQkgKi8K KwkJZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHsKKwkJCWlmIChjcnRjc1tqXSA9PSBuZXdf Y3J0YykgeworCQkJCURSTV9ERUJVR19LTVMoImZhbGxiYWNrOiBjbG9uZWQgY29uZmlndXJhdGlv blxuIik7CisJCQkJZ290byBiYWlsOworCQkJfQorCQl9CisKKwkJRFJNX0RFQlVHX0tNUygibG9v a2luZyBmb3IgY21kbGluZSBtb2RlIG9uIGNvbm5lY3RvciAlc1xuIiwKKwkJCSAgICAgIGNvbm5l Y3Rvci0+bmFtZSk7CisKKwkJLyogZ28gZm9yIGNvbW1hbmQgbGluZSBtb2RlIGZpcnN0ICovCisJ CW1vZGVzW2ldID0gZHJtX3BpY2tfY21kbGluZV9tb2RlKGZiX2Nvbm4pOworCisJCS8qIHRyeSBm b3IgcHJlZmVycmVkIG5leHQgKi8KKwkJaWYgKCFtb2Rlc1tpXSkgeworCQkJRFJNX0RFQlVHX0tN UygibG9va2luZyBmb3IgcHJlZmVycmVkIG1vZGUgb24gY29ubmVjdG9yICVzICVkXG4iLAorCQkJ CSAgICAgIGNvbm5lY3Rvci0+bmFtZSwgY29ubmVjdG9yLT5oYXNfdGlsZSk7CisJCQltb2Rlc1tp XSA9IGRybV9oYXNfcHJlZmVycmVkX21vZGUoZmJfY29ubiwgd2lkdGgsCisJCQkJCQkJICBoZWln aHQpOworCQl9CisKKwkJLyogTm8gcHJlZmVycmVkIG1vZGUgbWFya2VkIGJ5IHRoZSBFRElEPyBB cmUgdGhlcmUgYW55IG1vZGVzPyAqLworCQlpZiAoIW1vZGVzW2ldICYmICFsaXN0X2VtcHR5KCZj b25uZWN0b3ItPm1vZGVzKSkgeworCQkJRFJNX0RFQlVHX0tNUygidXNpbmcgZmlyc3QgbW9kZSBs aXN0ZWQgb24gY29ubmVjdG9yICVzXG4iLAorCQkJCSAgICAgIGNvbm5lY3Rvci0+bmFtZSk7CisJ CQltb2Rlc1tpXSA9IGxpc3RfZmlyc3RfZW50cnkoJmNvbm5lY3Rvci0+bW9kZXMsCisJCQkJCQkg ICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUsCisJCQkJCQkgICAgaGVhZCk7CisJCX0KKworCQkv KiBsYXN0IHJlc29ydDogdXNlIGN1cnJlbnQgbW9kZSAqLworCQlpZiAoIW1vZGVzW2ldKSB7CisJ CQkvKgorCQkJICogSU1QT1JUQU5UOiBXZSB3YW50IHRvIHVzZSB0aGUgYWRqdXN0ZWQgbW9kZSAo aS5lLgorCQkJICogYWZ0ZXIgdGhlIHBhbmVsIGZpdHRlciB1cHNjYWxpbmcpIGFzIHRoZSBpbml0 aWFsCisJCQkgKiBjb25maWcsIG5vdCB0aGUgaW5wdXQgbW9kZSwgd2hpY2ggaXMgd2hhdCBjcnRj LT5tb2RlCisJCQkgKiB1c3VhbGx5IGNvbnRhaW5zLiBCdXQgc2luY2Ugb3VyIGN1cnJlbnQKKwkJ CSAqIGNvZGUgcHV0cyBhIG1vZGUgZGVyaXZlZCBmcm9tIHRoZSBwb3N0LXBmaXQgdGltaW5ncwor CQkJICogaW50byBjcnRjLT5tb2RlIHRoaXMgd29ya3Mgb3V0IGNvcnJlY3RseS4KKwkJCSAqCisJ CQkgKiBUaGlzIGlzIGNydGMtPm1vZGUgYW5kIG5vdCBjcnRjLT5zdGF0ZS0+bW9kZSBmb3IgdGhl CisJCQkgKiBmYXN0Ym9vdCBjaGVjayB0byB3b3JrIGNvcnJlY3RseS4KKwkJCSAqLworCQkJRFJN X0RFQlVHX0tNUygibG9va2luZyBmb3IgY3VycmVudCBtb2RlIG9uIGNvbm5lY3RvciAlc1xuIiwK KwkJCQkgICAgICBjb25uZWN0b3ItPm5hbWUpOworCQkJbW9kZXNbaV0gPSAmY29ubmVjdG9yLT5z dGF0ZS0+Y3J0Yy0+bW9kZTsKKwkJfQorCQljcnRjc1tpXSA9IG5ld19jcnRjOworCisJCURSTV9E RUJVR19LTVMoImNvbm5lY3RvciAlcyBvbiBbQ1JUQzolZDolc106ICVkeCVkJXNcbiIsCisJCQkg ICAgICBjb25uZWN0b3ItPm5hbWUsCisJCQkgICAgICBjb25uZWN0b3ItPnN0YXRlLT5jcnRjLT5i YXNlLmlkLAorCQkJICAgICAgY29ubmVjdG9yLT5zdGF0ZS0+Y3J0Yy0+bmFtZSwKKwkJCSAgICAg IG1vZGVzW2ldLT5oZGlzcGxheSwgbW9kZXNbaV0tPnZkaXNwbGF5LAorCQkJICAgICAgbW9kZXNb aV0tPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UgPyAiaSIgOiAiIik7CisKKwkJZmFs bGJhY2sgPSBmYWxzZTsKKwkJY29ubl9jb25maWd1cmVkIHw9IEJJVChpKTsKKwl9CisKKwlpZiAo Y29ubl9jb25maWd1cmVkICE9IGNvbm5fc2VxKSB7IC8qIHJlcGVhdCB1bnRpbCBubyBtb3JlIGFy ZSBmb3VuZCAqLworCQljb25uX3NlcSA9IGNvbm5fY29uZmlndXJlZDsKKwkJZ290byByZXRyeTsK Kwl9CisKKwkvKgorCSAqIElmIHRoZSBCSU9TIGRpZG4ndCBlbmFibGUgZXZlcnl0aGluZyBpdCBj b3VsZCwgZmFsbCBiYWNrIHRvIGhhdmUgdGhlCisJICogc2FtZSB1c2VyIGV4cGVyaWVuY2luZyBv ZiBsaWdodGluZyB1cCBhcyBtdWNoIGFzIHBvc3NpYmxlIGxpa2UgdGhlCisJICogZmJkZXYgaGVs cGVyIGxpYnJhcnkuCisJICovCisJaWYgKG51bV9jb25uZWN0b3JzX2VuYWJsZWQgIT0gbnVtX2Nv bm5lY3RvcnNfZGV0ZWN0ZWQgJiYKKwkgICAgbnVtX2Nvbm5lY3RvcnNfZW5hYmxlZCA8IGRldi0+ bW9kZV9jb25maWcubnVtX2NydGMpIHsKKwkJRFJNX0RFQlVHX0tNUygiZmFsbGJhY2s6IE5vdCBh bGwgb3V0cHV0cyBlbmFibGVkXG4iKTsKKwkJRFJNX0RFQlVHX0tNUygiRW5hYmxlZDogJWksIGRl dGVjdGVkOiAlaVxuIiwgbnVtX2Nvbm5lY3RvcnNfZW5hYmxlZCwKKwkJCSAgICAgIG51bV9jb25u ZWN0b3JzX2RldGVjdGVkKTsKKwkJZmFsbGJhY2sgPSB0cnVlOworCX0KKworCWlmIChmYWxsYmFj aykgeworYmFpbDoKKwkJRFJNX0RFQlVHX0tNUygiTm90IHVzaW5nIGZpcm13YXJlIGNvbmZpZ3Vy YXRpb25cbiIpOworCQltZW1jcHkoZW5hYmxlZCwgc2F2ZV9lbmFibGVkLCBjb3VudCk7CisJCXJl dCA9IGZhbHNlOworCX0KKworCWRybV9tb2Rlc2V0X2Ryb3BfbG9ja3MoJmN0eCk7CisJZHJtX21v ZGVzZXRfYWNxdWlyZV9maW5pKCZjdHgpOworCisJa2ZyZWUoc2F2ZV9lbmFibGVkKTsKKwlyZXR1 cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Moc3RydWN0IGRybV9mYl9o ZWxwZXIgKmZiX2hlbHBlciwKIAkJCSAgICB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCiB7CkBAIC0y NTg4LDEwICsyNzc2LDggQEAgc3RhdGljIHZvaWQgZHJtX3NldHVwX2NydGNzKHN0cnVjdCBkcm1f ZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJCURSTV9ERUJVR19LTVMoIk5vIGNvbm5lY3RvcnMgcmVw b3J0ZWQgY29ubmVjdGVkIHdpdGggbW9kZXNcbiIpOwogCWRybV9lbmFibGVfY29ubmVjdG9ycyhm Yl9oZWxwZXIsIGVuYWJsZWQpOwogCi0JaWYgKCEoZmJfaGVscGVyLT5mdW5jcy0+aW5pdGlhbF9j b25maWcgJiYKLQkgICAgICBmYl9oZWxwZXItPmZ1bmNzLT5pbml0aWFsX2NvbmZpZyhmYl9oZWxw ZXIsIGNydGNzLCBtb2RlcywKLQkJCQkJICAgICAgIG9mZnNldHMsCi0JCQkJCSAgICAgICBlbmFi bGVkLCB3aWR0aCwgaGVpZ2h0KSkpIHsKKwlpZiAoIWRybV9mYl9oZWxwZXJfZmlybXdhcmVfY29u ZmlnKGZiX2hlbHBlciwgY3J0Y3MsIG1vZGVzLCBvZmZzZXRzLAorCQkJCQkgICBlbmFibGVkLCB3 aWR0aCwgaGVpZ2h0KSkgewogCQltZW1zZXQobW9kZXMsIDAsIGZiX2hlbHBlci0+Y29ubmVjdG9y X2NvdW50KnNpemVvZihtb2Rlc1swXSkpOwogCQltZW1zZXQoY3J0Y3MsIDAsIGZiX2hlbHBlci0+ Y29ubmVjdG9yX2NvdW50KnNpemVvZihjcnRjc1swXSkpOwogCQltZW1zZXQob2Zmc2V0cywgMCwg ZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQqc2l6ZW9mKG9mZnNldHNbMF0pKTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9mYmRldi5jCmluZGV4IGVmOTNjMjdlNjBiNC4uYzRkMTdkZGEzMzU1IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKQEAgLTI4NCwyMjUgKzI4NCw3IEBAIHN0YXRpYyBp bnQgaW50ZWxmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKIAlyZXR1cm4g cmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAqCi1pbnRlbF9mYl9o ZWxwZXJfY3J0YyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLCBzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRj X2NvdW50OyBpKyspCi0JCWlmIChmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5jcnRj ID09IGNydGMpCi0JCQlyZXR1cm4gJmZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldOwotCi0JcmV0dXJu IE5VTEw7Ci19Ci0KLS8qCi0gKiBUcnkgdG8gcmVhZCB0aGUgQklPUyBkaXNwbGF5IGNvbmZpZ3Vy YXRpb24gYW5kIHVzZSBpdCBmb3IgdGhlIGluaXRpYWwKLSAqIGZiIGNvbmZpZ3VyYXRpb24uCi0g KgotICogVGhlIEJJT1Mgb3IgYm9vdCBsb2FkZXIgd2lsbCBnZW5lcmFsbHkgY3JlYXRlIGFuIGlu aXRpYWwgZGlzcGxheQotICogY29uZmlndXJhdGlvbiBmb3IgdXMgdGhhdCBpbmNsdWRlcyBzb21l IHNldCBvZiBhY3RpdmUgcGlwZXMgYW5kIGRpc3BsYXlzLgotICogVGhpcyByb3V0aW5lIHRyaWVz IHRvIGZpZ3VyZSBvdXQgd2hpY2ggcGlwZXMgYW5kIGNvbm5lY3RvcnMgYXJlIGFjdGl2ZQotICog YW5kIHN0dWZmcyB0aGVtIGludG8gdGhlIGNydGNzIGFuZCBtb2RlcyBhcnJheSBnaXZlbiB0byB1 cyBieSB0aGUKLSAqIGRybV9mYl9oZWxwZXIgY29kZS4KLSAqCi0gKiBUaGUgb3ZlcmFsbCBzZXF1 ZW5jZSBpczoKLSAqICAgaW50ZWxfZmJkZXZfaW5pdCAtIGZyb20gZHJpdmVyIGxvYWQKLSAqICAg ICBpbnRlbF9mYmRldl9pbml0X2Jpb3MgLSBpbml0aWFsaXplIHRoZSBpbnRlbF9mYmRldiB1c2lu ZyBCSU9TIGRhdGEKLSAqICAgICBkcm1fZmJfaGVscGVyX2luaXQgLSBidWlsZCBmYiBoZWxwZXIg c3RydWN0cwotICogICAgIGRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9ycyAt IG1vcmUgZmIgaGVscGVyIHN0cnVjdHMKLSAqICAgaW50ZWxfZmJkZXZfaW5pdGlhbF9jb25maWcg LSBhcHBseSB0aGUgY29uZmlnCi0gKiAgICAgZHJtX2ZiX2hlbHBlcl9pbml0aWFsX2NvbmZpZyAt IGNhbGwgLT5wcm9iZSB0aGVuIHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCkKLSAqICAgICAgICAgZHJt X3NldHVwX2NydGNzIC0gYnVpbGQgY3J0YyBjb25maWcgZm9yIGZiZGV2Ci0gKiAgICAgICAgICAg aW50ZWxfZmJfaW5pdGlhbF9jb25maWcgLSBmaW5kIGFjdGl2ZSBjb25uZWN0b3JzIGV0YwotICog ICAgICAgICBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZSAtIHNldCB1cCBmYmRldgotICog ICAgICAgICAgIGludGVsZmJfY3JlYXRlIC0gcmUtdXNlIG9yIGFsbG9jIGZiLCBidWlsZCBvdXQg ZmJkZXYgc3RydWN0cwotICoKLSAqIE5vdGUgdGhhdCB3ZSBkb24ndCBtYWtlIHNwZWNpYWwgY29u c2lkZXJhdGlvbiB3aGV0aGVyIHdlIGNvdWxkIGFjdHVhbGx5Ci0gKiBzd2l0Y2ggdG8gdGhlIHNl bGVjdGVkIG1vZGVzIHdpdGhvdXQgYSBmdWxsIG1vZGVzZXQuIEUuZy4gd2hlbiB0aGUgZGlzcGxh eQotICogaXMgaW4gVkdBIG1vZGUgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSB3YXRlcm1hcmtzIGFu ZCBzZXQgYSBuZXcgaGlnaC1yZXMKLSAqIGZyYW1lYnVmZmVyIGFueXdheS4KLSAqLwotc3RhdGlj IGJvb2wgaW50ZWxfZmJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hl bHBlciwKLQkJCQkgICAgc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAqKmNydGNzLAotCQkJCSAg ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKm1vZGVzLAotCQkJCSAgICBzdHJ1Y3QgZHJtX2Zi X29mZnNldCAqb2Zmc2V0cywKLQkJCQkgICAgYm9vbCAqZW5hYmxlZCwgaW50IHdpZHRoLCBpbnQg aGVpZ2h0KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo ZmJfaGVscGVyLT5kZXYpOwotCXVuc2lnbmVkIGludCBjb3VudCA9IG1pbihmYl9oZWxwZXItPmNv bm5lY3Rvcl9jb3VudCwgQklUU19QRVJfTE9ORyk7Ci0JdW5zaWduZWQgbG9uZyBjb25uX2NvbmZp Z3VyZWQsIGNvbm5fc2VxOwotCWludCBpLCBqOwotCWJvb2wgKnNhdmVfZW5hYmxlZDsKLQlib29s IGZhbGxiYWNrID0gdHJ1ZSwgcmV0ID0gdHJ1ZTsKLQlpbnQgbnVtX2Nvbm5lY3RvcnNfZW5hYmxl ZCA9IDA7Ci0JaW50IG51bV9jb25uZWN0b3JzX2RldGVjdGVkID0gMDsKLQlzdHJ1Y3QgZHJtX21v ZGVzZXRfYWNxdWlyZV9jdHggY3R4OwotCi0Jc2F2ZV9lbmFibGVkID0ga2NhbGxvYyhjb3VudCwg c2l6ZW9mKGJvb2wpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNhdmVfZW5hYmxlZCkKLQkJcmV0dXJu IGZhbHNlOwotCi0JZHJtX21vZGVzZXRfYWNxdWlyZV9pbml0KCZjdHgsIDApOwotCi0Jd2hpbGUg KGRybV9tb2Rlc2V0X2xvY2tfYWxsX2N0eChmYl9oZWxwZXItPmRldiwgJmN0eCkgIT0gMCkKLQkJ ZHJtX21vZGVzZXRfYmFja29mZigmY3R4KTsKLQotCW1lbWNweShzYXZlX2VuYWJsZWQsIGVuYWJs ZWQsIGNvdW50KTsKLQljb25uX3NlcSA9IEdFTk1BU0soY291bnQgLSAxLCAwKTsKLQljb25uX2Nv bmZpZ3VyZWQgPSAwOwotcmV0cnk6Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJ c3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yICpmYl9jb25uOwotCQlzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yOwotCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Ci0JCXN0 cnVjdCBkcm1fZmJfaGVscGVyX2NydGMgKm5ld19jcnRjOwotCi0JCWZiX2Nvbm4gPSBmYl9oZWxw ZXItPmNvbm5lY3Rvcl9pbmZvW2ldOwotCQljb25uZWN0b3IgPSBmYl9jb25uLT5jb25uZWN0b3I7 Ci0KLQkJaWYgKGNvbm5fY29uZmlndXJlZCAmIEJJVChpKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8q IEZpcnN0IHBhc3MsIG9ubHkgY29uc2lkZXIgdGlsZWQgY29ubmVjdG9ycyAqLwotCQlpZiAoY29u bl9zZXEgPT0gR0VOTUFTSyhjb3VudCAtIDEsIDApICYmICFjb25uZWN0b3ItPmhhc190aWxlKQot CQkJY29udGludWU7Ci0KLQkJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0 dXNfY29ubmVjdGVkKQotCQkJbnVtX2Nvbm5lY3RvcnNfZGV0ZWN0ZWQrKzsKLQotCQlpZiAoIWVu YWJsZWRbaV0pIHsKLQkJCURSTV9ERUJVR19LTVMoImNvbm5lY3RvciAlcyBub3QgZW5hYmxlZCwg c2tpcHBpbmdcbiIsCi0JCQkJICAgICAgY29ubmVjdG9yLT5uYW1lKTsKLQkJCWNvbm5fY29uZmln dXJlZCB8PSBCSVQoaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChjb25uZWN0b3ItPmZv cmNlID09IERSTV9GT1JDRV9PRkYpIHsKLQkJCURSTV9ERUJVR19LTVMoImNvbm5lY3RvciAlcyBp cyBkaXNhYmxlZCBieSB1c2VyLCBza2lwcGluZ1xuIiwKLQkJCQkgICAgICBjb25uZWN0b3ItPm5h bWUpOwotCQkJZW5hYmxlZFtpXSA9IGZhbHNlOwotCQkJY29udGludWU7Ci0JCX0KLQotCQllbmNv ZGVyID0gY29ubmVjdG9yLT5zdGF0ZS0+YmVzdF9lbmNvZGVyOwotCQlpZiAoIWVuY29kZXIgfHwg V0FSTl9PTighY29ubmVjdG9yLT5zdGF0ZS0+Y3J0YykpIHsKLQkJCWlmIChjb25uZWN0b3ItPmZv cmNlID4gRFJNX0ZPUkNFX09GRikKLQkJCQlnb3RvIGJhaWw7Ci0KLQkJCURSTV9ERUJVR19LTVMo ImNvbm5lY3RvciAlcyBoYXMgbm8gZW5jb2RlciBvciBjcnRjLCBza2lwcGluZ1xuIiwKLQkJCQkg ICAgICBjb25uZWN0b3ItPm5hbWUpOwotCQkJZW5hYmxlZFtpXSA9IGZhbHNlOwotCQkJY29ubl9j b25maWd1cmVkIHw9IEJJVChpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJbnVtX2Nvbm5lY3Rv cnNfZW5hYmxlZCsrOwotCi0JCW5ld19jcnRjID0gaW50ZWxfZmJfaGVscGVyX2NydGMoZmJfaGVs cGVyLAotCQkJCQkJY29ubmVjdG9yLT5zdGF0ZS0+Y3J0Yyk7Ci0KLQkJLyoKLQkJICogTWFrZSBz dXJlIHdlJ3JlIG5vdCB0cnlpbmcgdG8gZHJpdmUgbXVsdGlwbGUgY29ubmVjdG9ycwotCQkgKiB3 aXRoIGEgc2luZ2xlIENSVEMsIHNpbmNlIG91ciBjbG9uaW5nIHN1cHBvcnQgbWF5IG5vdAotCQkg KiBtYXRjaCB0aGUgQklPUy4KLQkJICovCi0JCWZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7 Ci0JCQlpZiAoY3J0Y3Nbal0gPT0gbmV3X2NydGMpIHsKLQkJCQlEUk1fREVCVUdfS01TKCJmYWxs YmFjazogY2xvbmVkIGNvbmZpZ3VyYXRpb25cbiIpOwotCQkJCWdvdG8gYmFpbDsKLQkJCX0KLQkJ fQotCi0JCURSTV9ERUJVR19LTVMoImxvb2tpbmcgZm9yIGNtZGxpbmUgbW9kZSBvbiBjb25uZWN0 b3IgJXNcbiIsCi0JCQkgICAgICBjb25uZWN0b3ItPm5hbWUpOwotCi0JCS8qIGdvIGZvciBjb21t YW5kIGxpbmUgbW9kZSBmaXJzdCAqLwotCQltb2Rlc1tpXSA9IGRybV9waWNrX2NtZGxpbmVfbW9k ZShmYl9jb25uKTsKLQotCQkvKiB0cnkgZm9yIHByZWZlcnJlZCBuZXh0ICovCi0JCWlmICghbW9k ZXNbaV0pIHsKLQkJCURSTV9ERUJVR19LTVMoImxvb2tpbmcgZm9yIHByZWZlcnJlZCBtb2RlIG9u IGNvbm5lY3RvciAlcyAlZFxuIiwKLQkJCQkgICAgICBjb25uZWN0b3ItPm5hbWUsIGNvbm5lY3Rv ci0+aGFzX3RpbGUpOwotCQkJbW9kZXNbaV0gPSBkcm1faGFzX3ByZWZlcnJlZF9tb2RlKGZiX2Nv bm4sIHdpZHRoLAotCQkJCQkJCSAgaGVpZ2h0KTsKLQkJfQotCi0JCS8qIE5vIHByZWZlcnJlZCBt b2RlIG1hcmtlZCBieSB0aGUgRURJRD8gQXJlIHRoZXJlIGFueSBtb2Rlcz8gKi8KLQkJaWYgKCFt b2Rlc1tpXSAmJiAhbGlzdF9lbXB0eSgmY29ubmVjdG9yLT5tb2RlcykpIHsKLQkJCURSTV9ERUJV R19LTVMoInVzaW5nIGZpcnN0IG1vZGUgbGlzdGVkIG9uIGNvbm5lY3RvciAlc1xuIiwKLQkJCQkg ICAgICBjb25uZWN0b3ItPm5hbWUpOwotCQkJbW9kZXNbaV0gPSBsaXN0X2ZpcnN0X2VudHJ5KCZj b25uZWN0b3ItPm1vZGVzLAotCQkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlLAotCQkJ CQkJICAgIGhlYWQpOwotCQl9Ci0KLQkJLyogbGFzdCByZXNvcnQ6IHVzZSBjdXJyZW50IG1vZGUg Ki8KLQkJaWYgKCFtb2Rlc1tpXSkgewotCQkJLyoKLQkJCSAqIElNUE9SVEFOVDogV2Ugd2FudCB0 byB1c2UgdGhlIGFkanVzdGVkIG1vZGUgKGkuZS4KLQkJCSAqIGFmdGVyIHRoZSBwYW5lbCBmaXR0 ZXIgdXBzY2FsaW5nKSBhcyB0aGUgaW5pdGlhbAotCQkJICogY29uZmlnLCBub3QgdGhlIGlucHV0 IG1vZGUsIHdoaWNoIGlzIHdoYXQgY3J0Yy0+bW9kZQotCQkJICogdXN1YWxseSBjb250YWlucy4g QnV0IHNpbmNlIG91ciBjdXJyZW50Ci0JCQkgKiBjb2RlIHB1dHMgYSBtb2RlIGRlcml2ZWQgZnJv bSB0aGUgcG9zdC1wZml0IHRpbWluZ3MKLQkJCSAqIGludG8gY3J0Yy0+bW9kZSB0aGlzIHdvcmtz IG91dCBjb3JyZWN0bHkuCi0JCQkgKgotCQkJICogVGhpcyBpcyBjcnRjLT5tb2RlIGFuZCBub3Qg Y3J0Yy0+c3RhdGUtPm1vZGUgZm9yIHRoZQotCQkJICogZmFzdGJvb3QgY2hlY2sgdG8gd29yayBj b3JyZWN0bHkuIGNydGNfc3RhdGUtPm1vZGUgaGFzCi0JCQkgKiBJOTE1X01PREVfRkxBR19JTkhF UklURUQsIHdoaWNoIHdlIGNsZWFyIHRvIGZvcmNlIGNoZWNrCi0JCQkgKiBzdGF0ZS4KLQkJCSAq LwotCQkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgY3VycmVudCBtb2RlIG9uIGNvbm5lY3Rv ciAlc1xuIiwKLQkJCQkgICAgICBjb25uZWN0b3ItPm5hbWUpOwotCQkJbW9kZXNbaV0gPSAmY29u bmVjdG9yLT5zdGF0ZS0+Y3J0Yy0+bW9kZTsKLQkJfQotCQljcnRjc1tpXSA9IG5ld19jcnRjOwot Ci0JCURSTV9ERUJVR19LTVMoImNvbm5lY3RvciAlcyBvbiBbQ1JUQzolZDolc106ICVkeCVkJXNc biIsCi0JCQkgICAgICBjb25uZWN0b3ItPm5hbWUsCi0JCQkgICAgICBjb25uZWN0b3ItPnN0YXRl LT5jcnRjLT5iYXNlLmlkLAotCQkJICAgICAgY29ubmVjdG9yLT5zdGF0ZS0+Y3J0Yy0+bmFtZSwK LQkJCSAgICAgIG1vZGVzW2ldLT5oZGlzcGxheSwgbW9kZXNbaV0tPnZkaXNwbGF5LAotCQkJICAg ICAgbW9kZXNbaV0tPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UgPyAiaSIgOiIiKTsK LQotCQlmYWxsYmFjayA9IGZhbHNlOwotCQljb25uX2NvbmZpZ3VyZWQgfD0gQklUKGkpOwotCX0K LQotCWlmIChjb25uX2NvbmZpZ3VyZWQgIT0gY29ubl9zZXEpIHsgLyogcmVwZWF0IHVudGlsIG5v IG1vcmUgYXJlIGZvdW5kICovCi0JCWNvbm5fc2VxID0gY29ubl9jb25maWd1cmVkOwotCQlnb3Rv IHJldHJ5OwotCX0KLQotCS8qCi0JICogSWYgdGhlIEJJT1MgZGlkbid0IGVuYWJsZSBldmVyeXRo aW5nIGl0IGNvdWxkLCBmYWxsIGJhY2sgdG8gaGF2ZSB0aGUKLQkgKiBzYW1lIHVzZXIgZXhwZXJp ZW5jaW5nIG9mIGxpZ2h0aW5nIHVwIGFzIG11Y2ggYXMgcG9zc2libGUgbGlrZSB0aGUKLQkgKiBm YmRldiBoZWxwZXIgbGlicmFyeS4KLQkgKi8KLQlpZiAobnVtX2Nvbm5lY3RvcnNfZW5hYmxlZCAh PSBudW1fY29ubmVjdG9yc19kZXRlY3RlZCAmJgotCSAgICBudW1fY29ubmVjdG9yc19lbmFibGVk IDwgSU5URUxfSU5GTyhkZXZfcHJpdiktPm51bV9waXBlcykgewotCQlEUk1fREVCVUdfS01TKCJm YWxsYmFjazogTm90IGFsbCBvdXRwdXRzIGVuYWJsZWRcbiIpOwotCQlEUk1fREVCVUdfS01TKCJF bmFibGVkOiAlaSwgZGV0ZWN0ZWQ6ICVpXG4iLCBudW1fY29ubmVjdG9yc19lbmFibGVkLAotCQkJ ICAgICAgbnVtX2Nvbm5lY3RvcnNfZGV0ZWN0ZWQpOwotCQlmYWxsYmFjayA9IHRydWU7Ci0JfQot Ci0JaWYgKGZhbGxiYWNrKSB7Ci1iYWlsOgotCQlEUk1fREVCVUdfS01TKCJOb3QgdXNpbmcgZmly bXdhcmUgY29uZmlndXJhdGlvblxuIik7Ci0JCW1lbWNweShlbmFibGVkLCBzYXZlX2VuYWJsZWQs IGNvdW50KTsKLQkJcmV0ID0gZmFsc2U7Ci0JfQotCi0JZHJtX21vZGVzZXRfZHJvcF9sb2Nrcygm Y3R4KTsKLQlkcm1fbW9kZXNldF9hY3F1aXJlX2ZpbmkoJmN0eCk7Ci0KLQlrZnJlZShzYXZlX2Vu YWJsZWQpOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZiX2hl bHBlcl9mdW5jcyBpbnRlbF9mYl9oZWxwZXJfZnVuY3MgPSB7Ci0JLmluaXRpYWxfY29uZmlnID0g aW50ZWxfZmJfaW5pdGlhbF9jb25maWcsCiAJLmZiX3Byb2JlID0gaW50ZWxmYl9jcmVhdGUsCiB9 OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggYi9pbmNsdWRlL2Ry bS9kcm1fZmJfaGVscGVyLmgKaW5kZXggODFhZTQ4YTBkZjQ4Li40ZGI3ZGUxOWE0OTEgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1f ZmJfaGVscGVyLmgKQEAgLTEwMSwyOSArMTAxLDYgQEAgc3RydWN0IGRybV9mYl9oZWxwZXJfZnVu Y3MgewogCSAqLwogCWludCAoKmZiX3Byb2JlKShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVy LAogCQkJc3RydWN0IGRybV9mYl9oZWxwZXJfc3VyZmFjZV9zaXplICpzaXplcyk7Ci0KLQkvKioK LQkgKiBAaW5pdGlhbF9jb25maWc6Ci0JICoKLQkgKiBEcml2ZXIgY2FsbGJhY2sgdG8gc2V0dXAg YW4gaW5pdGlhbCBmYmRldiBkaXNwbGF5IGNvbmZpZ3VyYXRpb24uCi0JICogRHJpdmVycyBjYW4g dXNlIHRoaXMgY2FsbGJhY2sgdG8gdGVsbCB0aGUgZmJkZXYgZW11bGF0aW9uIHdoYXQgdGhlCi0J ICogcHJlZmVycmVkIGluaXRpYWwgY29uZmlndXJhdGlvbiBpcy4gVGhpcyBpcyB1c2VmdWwgdG8g aW1wbGVtZW50Ci0JICogc21vb3RoIGJvb3Rpbmcgd2hlcmUgdGhlIGZiZGV2IChhbmQgc3Vic2Vx dWVudGx5IGFsbCB1c2Vyc3BhY2UpIG5ldmVyCi0JICogY2hhbmdlcyB0aGUgbW9kZSwgYnV0IGFs d2F5cyBpbmhlcml0cyB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi4KLQkgKgotCSAqIFRoaXMg Y2FsbGJhY2sgaXMgb3B0aW9uYWwuCi0JICoKLQkgKiBSRVRVUk5TOgotCSAqCi0JICogVGhlIGRy aXZlciBzaG91bGQgcmV0dXJuIHRydWUgaWYgYSBzdWl0YWJsZSBpbml0aWFsIGNvbmZpZ3VyYXRp b24gaGFzCi0JICogYmVlbiBmaWxsZWQgb3V0IGFuZCBmYWxzZSB3aGVuIHRoZSBmYmRldiBoZWxw ZXIgc2hvdWxkIGZhbGwgYmFjayB0bwotCSAqIHRoZSBkZWZhdWx0IHByb2JpbmcgbG9naWMuCi0J ICovCi0JYm9vbCAoKmluaXRpYWxfY29uZmlnKShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVs cGVyLAotCQkJICAgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMgKipjcnRjcywKLQkJCSAg ICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKm1vZGVzLAotCQkJICAgICAgIHN0cnVjdCBk cm1fZmJfb2Zmc2V0ICpvZmZzZXRzLAotCQkJICAgICAgIGJvb2wgKmVuYWJsZWQsIGludCB3aWR0 aCwgaW50IGhlaWdodCk7CiB9OwogCiBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3Igewot LSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=