From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH 05/12] drm/i915: Kill off intel_crtc->atomic.wait_vblank, v2. Date: Thu, 19 Nov 2015 16:07:18 +0100 Message-ID: <1447945645-32005-6-git-send-email-maarten.lankhorst@linux.intel.com> References: <1447945645-32005-1-git-send-email-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 50A6E6E98A for ; Thu, 19 Nov 2015 07:07:38 -0800 (PST) In-Reply-To: <1447945645-32005-1-git-send-email-maarten.lankhorst@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q3VycmVudGx5IHdlIHBlcmZvcm0gb3VyIG93biB3YWl0IGluIHBvc3RfcGxhbmVfdXBkYXRlLApi dXQgdGhlIGF0b21pYyBjb3JlIHBlcmZvcm1zIGFub3RoZXIgb25lIGluIHdhaXRfZm9yX3ZibGFu a3MuClRoaXMgbWVhbnMgdGhhdCAyIHZibGFua3MgYXJlIGRvbmUgd2hlbiBhIGZiIGlzIGNoYW5n ZWQsCndoaWNoIGlzIGEgYml0IG92ZXJraWxsLgoKTWVyZ2UgdGhlbSBieSBjcmVhdGluZyBhIGhl bHBlciBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY3J0YyBtYXNrCmZvciB0aGUgcGxhbmVzIHRvIHdh aXQgb24uCgpUaGUgYnJvYWR3ZWxsIHZibGFuayB3b3JrYXJvdW5kIG1heSBsb29rIGdvbmUgZW50 aXJlbHkgYnV0IHRoaXMgaXMKbm90IHRoZSBjYXNlLiBwaXBlX2NvbmZpZy0+d21fY2hhbmdlZCBp cyBzZXQgdG8gdHJ1ZQp3aGVuIGFueSBwbGFuZSBpcyB0dXJuZWQgb24sIHdoaWNoIGZvcmNlcyBh IHZibGFuayB3YWl0LgoKQ2hhbmdlcyBzaW5jZSB2MToKLSBSZW1vdmluZyB0aGUgZG91YmxlIHZi bGFuayB3YWl0IG9uIGJyb2Fkd2VsbCBtb3ZlZCB0byBpdHMgb3duIGNvbW1pdC4KClNpZ25lZC1v ZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5j b20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMgIHwgIDEgKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgODggKysrKysrKysrKysrKysrKysr KysrKysrKystLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAg fCAgMiArLQogMyBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pYy5jCmluZGV4IDQ2MjVmOGE5YmExMi4uOGU1 NzlhODUwNWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWMu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWMuYwpAQCAtOTcsNiArOTcs NyBAQCBpbnRlbF9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJ Y3J0Y19zdGF0ZS0+ZGlzYWJsZV9scF93bSA9IGZhbHNlOwogCWNydGNfc3RhdGUtPmRpc2FibGVf Y3hzciA9IGZhbHNlOwogCWNydGNfc3RhdGUtPndtX2NoYW5nZWQgPSBmYWxzZTsKKwljcnRjX3N0 YXRlLT5mYl9jaGFuZ2VkID0gZmFsc2U7CiAKIAlyZXR1cm4gJmNydGNfc3RhdGUtPmJhc2U7CiB9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggNjBmMTdiYzVmMGNlLi4yOTll ZGJmNmY5OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTQ3MzgsOSAr NDczOCw2IEBAIHN0YXRpYyB2b2lkIGludGVsX3Bvc3RfcGxhbmVfdXBkYXRlKHN0cnVjdCBpbnRl bF9jcnRjICpjcnRjKQogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsK IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwog Ci0JaWYgKGF0b21pYy0+d2FpdF92YmxhbmspCi0JCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYs IGNydGMtPnBpcGUpOwotCiAJaW50ZWxfZnJvbnRidWZmZXJfZmxpcChkZXYsIGF0b21pYy0+ZmJf Yml0cyk7CiAKIAljcnRjLT53bS5jeHNyX2FsbG93ZWQgPSB0cnVlOwpAQCAtNDc1NCw2ICs0NzUx LDkgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG9zdF9wbGFuZV91cGRhdGUoc3RydWN0IGludGVsX2Ny dGMgKmNydGMpCiAJaWYgKGF0b21pYy0+cG9zdF9lbmFibGVfcHJpbWFyeSkKIAkJaW50ZWxfcG9z dF9lbmFibGVfcHJpbWFyeSgmY3J0Yy0+YmFzZSk7CiAKKwlpZiAobmVlZHNfbW9kZXNldCgmcGlw ZV9jb25maWctPmJhc2UpKQorCQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgUE9X RVJfRE9NQUlOX01PREVTRVQpOworCiAJbWVtc2V0KGF0b21pYywgMCwgc2l6ZW9mKCphdG9taWMp KTsKIH0KIApAQCAtMTE2OTMsNiArMTE2OTMsOSBAQCBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX2Nh bGNfY2hhbmdlcyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJaWYgKCF3YXNf dmlzaWJsZSAmJiAhdmlzaWJsZSkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoZmIgIT0gb2xkX3BsYW5l X3N0YXRlLT5iYXNlLmZiKQorCQlwaXBlX2NvbmZpZy0+ZmJfY2hhbmdlZCA9IHRydWU7CisKIAl0 dXJuX29mZiA9IHdhc192aXNpYmxlICYmICghdmlzaWJsZSB8fCBtb2RlX2NoYW5nZWQpOwogCXR1 cm5fb24gPSB2aXNpYmxlICYmICghd2FzX3Zpc2libGUgfHwgbW9kZV9jaGFuZ2VkKTsKIApAQCAt MTE3MDgsOCArMTE3MTEsNiBAQCBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX2NhbGNfY2hhbmdlcyhz dHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAKIAkJLyogbXVzdCBkaXNhYmxlIGN4 c3IgYXJvdW5kIHBsYW5lIGVuYWJsZS9kaXNhYmxlICovCiAJCWlmIChwbGFuZS0+dHlwZSAhPSBE Uk1fUExBTkVfVFlQRV9DVVJTT1IpIHsKLQkJCWlmIChpc19jcnRjX2VuYWJsZWQpCi0JCQkJaW50 ZWxfY3J0Yy0+YXRvbWljLndhaXRfdmJsYW5rID0gdHJ1ZTsKIAkJCXBpcGVfY29uZmlnLT5kaXNh YmxlX2N4c3IgPSB0cnVlOwogCQl9CiAJfSBlbHNlIGlmICgod2FzX3Zpc2libGUgfHwgdmlzaWJs ZSkgJiYKQEAgLTExNzU3LDE0ICsxMTc1OCw2IEBAIGludCBpbnRlbF9wbGFuZV9hdG9taWNfY2Fs Y19jaGFuZ2VzKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJICAgIHBsYW5l X3N0YXRlLT5yb3RhdGlvbiAhPSBCSVQoRFJNX1JPVEFURV8wKSkKIAkJCWludGVsX2NydGMtPmF0 b21pYy5kaXNhYmxlX2ZiYyA9IHRydWU7CiAKLQkJLyoKLQkJICogQkRXIHNpZ25hbHMgZmxpcCBk b25lIGltbWVkaWF0ZWx5IGlmIHRoZSBwbGFuZQotCQkgKiBpcyBkaXNhYmxlZCwgZXZlbiBpZiB0 aGUgcGxhbmUgZW5hYmxlIGlzIGFscmVhZHkKLQkJICogYXJtZWQgdG8gb2NjdXIgYXQgdGhlIG5l eHQgdmJsYW5rIDooCi0JCSAqLwotCQlpZiAodHVybl9vbiAmJiBJU19CUk9BRFdFTEwoZGV2KSkK LQkJCWludGVsX2NydGMtPmF0b21pYy53YWl0X3ZibGFuayA9IHRydWU7Ci0KIAkJaW50ZWxfY3J0 Yy0+YXRvbWljLnVwZGF0ZV9mYmMgfD0gdmlzaWJsZSB8fCBtb2RlX2NoYW5nZWQ7CiAJCWJyZWFr OwogCWNhc2UgRFJNX1BMQU5FX1RZUEVfQ1VSU09SOgpAQCAtMTE3NzksMTIgKzExNzcyLDEwIEBA IGludCBpbnRlbF9wbGFuZV9hdG9taWNfY2FsY19jaGFuZ2VzKHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKIAkJaWYgKElTX0lWWUJSSURHRShkZXYpICYmCiAJCSAgICBuZWVkc19z Y2FsaW5nKHRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lX3N0YXRlKSkgJiYKIAkJICAgICFuZWVk c19zY2FsaW5nKG9sZF9wbGFuZV9zdGF0ZSkpIHsKLQkJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0 Y19zdGF0ZSktPmRpc2FibGVfbHBfd20gPSB0cnVlOwotCQl9IGVsc2UgaWYgKHR1cm5fb2ZmICYm ICFtb2RlX2NoYW5nZWQpIHsKLQkJCWludGVsX2NydGMtPmF0b21pYy53YWl0X3ZibGFuayA9IHRy dWU7CisJCQlwaXBlX2NvbmZpZy0+ZGlzYWJsZV9scF93bSA9IHRydWU7CisJCX0gZWxzZSBpZiAo dHVybl9vZmYgJiYgIW1vZGVfY2hhbmdlZCkKIAkJCWludGVsX2NydGMtPmF0b21pYy51cGRhdGVf c3ByaXRlX3dhdGVybWFya3MgfD0KIAkJCQkxIDw8IGk7Ci0JCX0KIAogCQlicmVhazsKIAl9CkBA IC0xMzI5OSw2ICsxMzI5MCw0OCBAQCBzdGF0aWMgaW50IGludGVsX2F0b21pY19wcmVwYXJlX2Nv bW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2 b2lkIGludGVsX2F0b21pY193YWl0X2Zvcl92YmxhbmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CisJCQkJCSAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgIHVuc2ln bmVkIGNydGNfbWFzaykKK3sKKwl1bnNpZ25lZCBsYXN0X3ZibGFua19jb3VudFtJOTE1X01BWF9Q SVBFU107CisJZW51bSBwaXBlIHBpcGU7CisJaW50IHJldDsKKworCWlmICghY3J0Y19tYXNrKQor CQlyZXR1cm47CisKKwlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKSB7CisJCXN0cnVjdCBk cm1fY3J0YyAqY3J0YyA9IGRldl9wcml2LT5waXBlX3RvX2NydGNfbWFwcGluZ1twaXBlXTsKKwor CQlpZiAoISgoMSA8PCBwaXBlKSAmIGNydGNfbWFzaykpCisJCQljb250aW51ZTsKKworCQlyZXQg PSBkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWNydGNf bWFzayAmPSB+KDEgPDwgcGlwZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWxhc3RfdmJsYW5r X2NvdW50W3BpcGVdID0gZHJtX2NydGNfdmJsYW5rX2NvdW50KGNydGMpOworCX0KKworCWZvcl9l YWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gZGV2 X3ByaXYtPnBpcGVfdG9fY3J0Y19tYXBwaW5nW3BpcGVdOworCisJCWlmICghKCgxIDw8IHBpcGUp ICYgY3J0Y19tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCXdhaXRfZXZlbnRfdGltZW91dChkZXYt PnZibGFua1twaXBlXS5xdWV1ZSwKKwkJCQlsYXN0X3ZibGFua19jb3VudFtwaXBlXSAhPQorCQkJ CQlkcm1fY3J0Y192YmxhbmtfY291bnQoY3J0YyksCisJCQkJbXNlY3NfdG9famlmZmllcyg1MCkp OworCisJCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CisJfQorfQorCisKIC8qKgogICogaW50 ZWxfYXRvbWljX2NvbW1pdCAtIGNvbW1pdCB2YWxpZGF0ZWQgc3RhdGUgb2JqZWN0CiAgKiBAZGV2 OiBEUk0gZGV2aWNlCkBAIC0xMzMyNSw2ICsxMzM1OCw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfYXRv bWljX2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YzsKIAlpbnQgcmV0ID0gMCwgaTsKIAlib29sIGh3X2NoZWNrID0gaW50ZWxfc3RhdGUtPm1vZGVz ZXQ7CisJdW5zaWduZWQgY3J0Y192YmxhbmtfbWFzayA9IDA7CiAKIAlyZXQgPSBpbnRlbF9hdG9t aWNfcHJlcGFyZV9jb21taXQoZGV2LCBzdGF0ZSwgYXN5bmMpOwogCWlmIChyZXQpIHsKQEAgLTEz Mzc1LDggKzEzNDA5LDkgQEAgc3RhdGljIGludCBpbnRlbF9hdG9taWNfY29tbWl0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiAJZm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0 Y19zdGF0ZSwgaSkgewogCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVs X2NydGMoY3J0Yyk7CiAJCWJvb2wgbW9kZXNldCA9IG5lZWRzX21vZGVzZXQoY3J0Yy0+c3RhdGUp OwotCQlib29sIHVwZGF0ZV9waXBlID0gIW1vZGVzZXQgJiYKLQkJCXRvX2ludGVsX2NydGNfc3Rh dGUoY3J0Yy0+c3RhdGUpLT51cGRhdGVfcGlwZTsKKwkJc3RydWN0IGludGVsX2NydGNfc3RhdGUg KnBpcGVfY29uZmlnID0KKwkJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCQli b29sIHVwZGF0ZV9waXBlID0gIW1vZGVzZXQgJiYgcGlwZV9jb25maWctPnVwZGF0ZV9waXBlOwog CQl1bnNpZ25lZCBsb25nIHB1dF9kb21haW5zID0gMDsKIAogCQlpZiAobW9kZXNldCkKQEAgLTEz NDAxLDE4ICsxMzQzNiwyMSBAQCBzdGF0aWMgaW50IGludGVsX2F0b21pY19jb21taXQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKIAkJICAgIChjcnRjLT5zdGF0ZS0+cGxhbmVzX2NoYW5nZWQgfHwg dXBkYXRlX3BpcGUpKQogCQkJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lc19vbl9jcnRj KGNydGNfc3RhdGUpOwogCisJCWlmIChwaXBlX2NvbmZpZy0+YmFzZS5hY3RpdmUgJiYKKwkJICAg IChwaXBlX2NvbmZpZy0+d21fY2hhbmdlZCB8fCBwaXBlX2NvbmZpZy0+ZGlzYWJsZV9jeHNyIHx8 CisJCSAgICAgcGlwZV9jb25maWctPmZiX2NoYW5nZWQpKQorCQkJY3J0Y192YmxhbmtfbWFzayB8 PSAxIDw8IGk7CisKIAkJaWYgKHB1dF9kb21haW5zKQogCQkJbW9kZXNldF9wdXRfcG93ZXJfZG9t YWlucyhkZXZfcHJpdiwgcHV0X2RvbWFpbnMpOwotCi0JCWludGVsX3Bvc3RfcGxhbmVfdXBkYXRl KGludGVsX2NydGMpOwotCi0JCWlmIChtb2Rlc2V0KQotCQkJaW50ZWxfZGlzcGxheV9wb3dlcl9w dXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9NT0RFU0VUKTsKIAl9CiAKIAkvKiBGSVhNRTogYWRk IHN1YnBpeGVsIG9yZGVyICovCiAKLQlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92Ymxhbmtz KGRldiwgc3RhdGUpOworCWludGVsX2F0b21pY193YWl0X2Zvcl92YmxhbmtzKGRldiwgZGV2X3By aXYsIGNydGNfdmJsYW5rX21hc2spOworCisJZm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwg Y3J0YywgY3J0Y19zdGF0ZSwgaSkKKwkJaW50ZWxfcG9zdF9wbGFuZV91cGRhdGUodG9faW50ZWxf Y3J0YyhjcnRjKSk7CiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJZHJtX2F0 b21pY19oZWxwZXJfY2xlYW51cF9wbGFuZXMoZGV2LCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rydi5oCmluZGV4IGRiNjFjMzdkYmYwOS4uNjZmNjY3NDBjY2FhIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcnYuaApAQCAtMzczLDYgKzM3Myw3IEBAIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlIHsK IAlib29sIHVwZGF0ZV9waXBlOyAvKiBjYW4gYSBmYXN0IG1vZGVzZXQgYmUgcGVyZm9ybWVkPyAq LwogCWJvb2wgZGlzYWJsZV9jeHNyOwogCWJvb2wgd21fY2hhbmdlZDsgLyogd2F0ZXJtYXJrcyBh cmUgdXBkYXRlZCAqLworCWJvb2wgZmJfY2hhbmdlZDsgLyogZmIgb24gYW55IG9mIHRoZSBwbGFu ZXMgaXMgY2hhbmdlZCAqLwogCiAJLyogUGlwZSBzb3VyY2Ugc2l6ZSAoaWUuIHBhbmVsIGZpdHRl ciBpbnB1dCBzaXplKQogCSAqIEFsbCBwbGFuZXMgd2lsbCBiZSBwb3NpdGlvbmVkIGluc2lkZSB0 aGlzIHNwYWNlLApAQCAtNTM5LDcgKzU0MCw2IEBAIHN0cnVjdCBpbnRlbF9jcnRjX2F0b21pY19j b21taXQgewogCiAJLyogU2xlZXBhYmxlIG9wZXJhdGlvbnMgdG8gcGVyZm9ybSBhZnRlciBjb21t aXQgKi8KIAl1bnNpZ25lZCBmYl9iaXRzOwotCWJvb2wgd2FpdF92Ymxhbms7CiAJYm9vbCB1cGRh dGVfZmJjOwogCWJvb2wgcG9zdF9lbmFibGVfcHJpbWFyeTsKIAl1bnNpZ25lZCB1cGRhdGVfc3By aXRlX3dhdGVybWFya3M7Ci0tIAoyLjEuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK