From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 04/23] drm/i915: Push the ring creation flags to the backend Date: Wed, 24 Jul 2019 12:11:54 +0100 Message-ID: References: <20190723183842.20372-1-chris@chris-wilson.co.uk> <20190723183842.20372-4-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id B2DCB6E50C for ; Wed, 24 Jul 2019 11:11:56 +0000 (UTC) In-Reply-To: <20190723183842.20372-4-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDIzLzA3LzIwMTkgMTk6MzgsIENocmlzIFdpbHNvbiB3cm90ZToKPiBQdXNoIHRoZSByaW5n IGNyZWF0aW9uIGZsYWdzIGZyb20gdGhlIG91dGVyIEdFTSBjb250ZXh0IHRvIHRoZSBpbm5lcgo+ IGludGVsX2NvdG5leHQgdG8gYXZvaWQgYW4gdW5zaWdodGx5IGJhY2stcmVmZXJlbmNlIGZyb20g aW5zaWRlIHRoZQo+IGJhY2tlbmQuCgpTb3JyeSBJIGZpbmQgdGhpcyBxdWl0ZSB1Z2x5LiBQYXNz aW5nIGluIGludGVnZXJzIGluIHBvaW50ZXJzIGZpbGVkIGFuZCAKY2FzdGluZyBiYWNrIGFuZCBm b3J0aC4KCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24u Y28udWs+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4 dC5jICAgfCAyNSArKysrKysrKysrKysrLS0tLS0tCj4gICAuLi4vZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9jb250ZXh0X3R5cGVzLmggfCAgMyAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2NvbnRleHQuYyAgICAgICB8ICAxICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2NvbnRleHQuaCAgICAgICB8ICA1ICsrKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2xyYy5jICAgICAgICAgICB8ICA1ICsrLS0KPiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAgICB8IDIzICsrKysrKysrKysrLS0tLS0tCj4g ICA2IGZpbGVzIGNoYW5nZWQsIDQxIGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQo+IAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYwo+IGluZGV4IDFi M2RjNzI1OGVmMi4uMThiMjI2YmM1ZTNhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fY29udGV4dC5jCj4gQEAgLTI5Niw2ICsyOTYsOCBAQCBzdGF0aWMgc3RydWN0 IGk5MTVfZ2VtX2VuZ2luZXMgKmRlZmF1bHRfZW5naW5lcyhzdHJ1Y3QgaTkxNV9nZW1fY29udGV4 dCAqY3R4KQo+ICAgCQkJcmV0dXJuIEVSUl9DQVNUKGNlKTsKPiAgIAkJfQo+ICAgCj4gKwkJY2Ut PnJpbmcgPSBfX2ludGVsX2NvbnRleHRfcmluZ19zaXplKFNaXzE2Syk7Cj4gKwo+ICAgCQllLT5l bmdpbmVzW2lkXSA9IGNlOwo+ICAgCX0KPiAgIAllLT5udW1fZW5naW5lcyA9IGlkOwo+IEBAIC00 MzQsOCArNDM2LDYgQEAgX19jcmVhdGVfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSkKPiAgIAlpOTE1X2dlbV9jb250ZXh0X3NldF9iYW5uYWJsZShjdHgpOwo+ICAgCWk5MTVf Z2VtX2NvbnRleHRfc2V0X3JlY292ZXJhYmxlKGN0eCk7Cj4gICAKPiAtCWN0eC0+cmluZ19zaXpl ID0gNCAqIFBBR0VfU0laRTsKPiAtCj4gICAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4 LT5oYW5nX3RpbWVzdGFtcCk7IGkrKykKPiAgIAkJY3R4LT5oYW5nX3RpbWVzdGFtcFtpXSA9IGpp ZmZpZXMgLSBDT05URVhUX0ZBU1RfSEFOR19KSUZGSUVTOwo+ICAgCj4gQEAgLTU2NSw4ICs1NjUs MTUgQEAgaTkxNV9nZW1fY29udGV4dF9jcmVhdGVfZ3Z0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cj4gICAJaTkxNV9nZW1fY29udGV4dF9zZXRfY2xvc2VkKGN0eCk7IC8qIG5vdCB1c2VyIGFjY2Vz c2libGUgKi8KPiAgIAlpOTE1X2dlbV9jb250ZXh0X2NsZWFyX2Jhbm5hYmxlKGN0eCk7Cj4gICAJ aTkxNV9nZW1fY29udGV4dF9zZXRfZm9yY2Vfc2luZ2xlX3N1Ym1pc3Npb24oY3R4KTsKPiAtCWlm ICghVVNFU19HVUNfU1VCTUlTU0lPTih0b19pOTE1KGRldikpKQo+IC0JCWN0eC0+cmluZ19zaXpl ID0gNTEyICogUEFHRV9TSVpFOyAvKiBNYXggcmluZyBidWZmZXIgc2l6ZSAqLwo+ICsJaWYgKCFV U0VTX0dVQ19TVUJNSVNTSU9OKHRvX2k5MTUoZGV2KSkpIHsKPiArCQljb25zdCB1bnNpZ25lZCBs b25nIHJpbmdfc2l6ZSA9IDUxMiAqIFNaXzRLOyAvKiBtYXggKi8KPiArCQlzdHJ1Y3QgaTkxNV9n ZW1fZW5naW5lc19pdGVyIGl0Owo+ICsJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKPiArCj4g KwkJZm9yX2VhY2hfZ2VtX2VuZ2luZShjZSwgaTkxNV9nZW1fY29udGV4dF9sb2NrX2VuZ2luZXMo Y3R4KSwgaXQpCj4gKwkJCWNlLT5yaW5nID0gX19pbnRlbF9jb250ZXh0X3Jpbmdfc2l6ZShyaW5n X3NpemUpOwo+ICsJCWk5MTVfZ2VtX2NvbnRleHRfdW5sb2NrX2VuZ2luZXMoY3R4KTsKPiArCX0K PiAgIAo+ICAgCUdFTV9CVUdfT04oaTkxNV9nZW1fY29udGV4dF9pc19rZXJuZWwoY3R4KSk7Cj4g ICBvdXQ6Cj4gQEAgLTYwNSw3ICs2MTIsNiBAQCBpOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9rZXJu ZWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGludCBwcmlvKQo+ICAgCj4gICAJaTkx NV9nZW1fY29udGV4dF9jbGVhcl9iYW5uYWJsZShjdHgpOwo+ICAgCWN0eC0+c2NoZWQucHJpb3Jp dHkgPSBJOTE1X1VTRVJfUFJJT1JJVFkocHJpbyk7Cj4gLQljdHgtPnJpbmdfc2l6ZSA9IFBBR0Vf U0laRTsKPiAgIAo+ICAgCUdFTV9CVUdfT04oIWk5MTVfZ2VtX2NvbnRleHRfaXNfa2VybmVsKGN0 eCkpOwo+ICAgCj4gQEAgLTE1ODksNiArMTU5NSw3IEBAIHNldF9lbmdpbmVzKHN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHgsCj4gICAJZm9yIChuID0gMDsgbiA8IG51bV9lbmdpbmVzOyBuKysp IHsKPiAgIAkJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlIGNpOwo+ICAgCQlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwkJc3RydWN0IGludGVsX2NvbnRleHQgKmNl Owo+ICAgCj4gICAJCWlmIChjb3B5X2Zyb21fdXNlcigmY2ksICZ1c2VyLT5lbmdpbmVzW25dLCBz aXplb2YoY2kpKSkgewo+ICAgCQkJX19mcmVlX2VuZ2luZXMoc2V0LmVuZ2luZXMsIG4pOwo+IEBA IC0xNjExLDExICsxNjE4LDE1IEBAIHNldF9lbmdpbmVzKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHgsCj4gICAJCQlyZXR1cm4gLUVOT0VOVDsKPiAgIAkJfQo+ICAgCj4gLQkJc2V0LmVuZ2lu ZXMtPmVuZ2luZXNbbl0gPSBpbnRlbF9jb250ZXh0X2NyZWF0ZShjdHgsIGVuZ2luZSk7Cj4gLQkJ aWYgKCFzZXQuZW5naW5lcy0+ZW5naW5lc1tuXSkgewo+ICsJCWNlID0gaW50ZWxfY29udGV4dF9j cmVhdGUoY3R4LCBlbmdpbmUpOwo+ICsJCWlmICghY2UpIHsKPiAgIAkJCV9fZnJlZV9lbmdpbmVz KHNldC5lbmdpbmVzLCBuKTsKPiAgIAkJCXJldHVybiAtRU5PTUVNOwo+ICAgCQl9Cj4gKwo+ICsJ CWNlLT5yaW5nID0gX19pbnRlbF9jb250ZXh0X3Jpbmdfc2l6ZShTWl8xNkspOwo+ICsKPiArCQlz ZXQuZW5naW5lcy0+ZW5naW5lc1tuXSA9IGNlOwo+ICAgCX0KPiAgIAlzZXQuZW5naW5lcy0+bnVt X2VuZ2luZXMgPSBudW1fZW5naW5lczsKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHRfdHlwZXMuaAo+IGluZGV4IGEwMmQ5ODQ5NDA3OC4uMjYw ZDU5Y2MzZGU4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9jb250ZXh0X3R5cGVzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fY29udGV4dF90eXBlcy5oCj4gQEAgLTE2OSw5ICsxNjksNiBAQCBzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCB7Cj4gICAKPiAgIAlzdHJ1Y3QgaTkxNV9zY2hlZF9hdHRyIHNjaGVkOwo+ICAgCj4g LQkvKiogcmluZ19zaXplOiBzaXplIGZvciBhbGxvY2F0aW5nIHRoZSBwZXItZW5naW5lIHJpbmcg YnVmZmVyICovCj4gLQl1MzIgcmluZ19zaXplOwo+IC0KPiAgIAkvKiogZ3VpbHR5X2NvdW50OiBI b3cgbWFueSB0aW1lcyB0aGlzIGNvbnRleHQgaGFzIGNhdXNlZCBhIEdQVSBoYW5nLiAqLwo+ICAg CWF0b21pY190IGd1aWx0eV9jb3VudDsKPiAgIAkvKioKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfY29udGV4dC5jCj4gaW5kZXggOWU0ZjUxY2U1MmZmLi4yOTVmYTBkZGJjYWMgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dC5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dC5jCj4gQEAgLTE5Niw2ICsxOTYs NyBAQCBpbnRlbF9jb250ZXh0X2luaXQoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICAgCWNl LT5lbmdpbmUgPSBlbmdpbmU7Cj4gICAJY2UtPm9wcyA9IGVuZ2luZS0+Y29wczsKPiAgIAljZS0+ c3NldSA9IGVuZ2luZS0+c3NldTsKPiArCWNlLT5yaW5nID0gX19pbnRlbF9jb250ZXh0X3Jpbmdf c2l6ZShTWl80Syk7Cj4gICAKPiAgIAlJTklUX0xJU1RfSEVBRCgmY2UtPnNpZ25hbF9saW5rKTsK PiAgIAlJTklUX0xJU1RfSEVBRCgmY2UtPnNpZ25hbHMpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9jb250ZXh0LmgKPiBpbmRleCAyM2M3ZTRjMGNlN2MuLjNmNTRlYjNkMTBhYiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0LmgKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0LmgKPiBAQCAtMTQ1LDQgKzE0 NSw5IEBAIGludCBpbnRlbF9jb250ZXh0X3ByZXBhcmVfcmVtb3RlX3JlcXVlc3Qoc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlLAo+ICAgCj4gICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICppbnRlbF9jb250 ZXh0X2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSk7Cj4gICAKPiArc3Rh dGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfcmluZyAqX19pbnRlbF9jb250ZXh0X3Jpbmdfc2l6ZSh1 NjQgc3opCj4gK3sKPiArCXJldHVybiB1NjRfdG9fcHRyKHN0cnVjdCBpbnRlbF9yaW5nLCBzeik7 Cj4gK30KPiArCj4gICAjZW5kaWYgLyogX19JTlRFTF9DT05URVhUX0hfXyAqLwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2xyYy5jCj4gaW5kZXggNWZkYWM0MDAxNWNmLi4zZjFiMjBjYzUwYzIg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+IEBAIC0zMTQwLDkgKzMxNDAs OCBAQCBzdGF0aWMgaW50IGV4ZWNsaXN0c19jb250ZXh0X2RlZmVycmVkX2FsbG9jKHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZSwKPiAgIAkJZ290byBlcnJvcl9kZXJlZl9vYmo7Cj4gICAJfQo+ICAg Cj4gLQlyaW5nID0gaW50ZWxfZW5naW5lX2NyZWF0ZV9yaW5nKGVuZ2luZSwKPiAtCQkJCQl0aW1l bGluZSwKPiAtCQkJCQljZS0+Z2VtX2NvbnRleHQtPnJpbmdfc2l6ZSk7Cj4gKwlyaW5nID0gaW50 ZWxfZW5naW5lX2NyZWF0ZV9yaW5nKGVuZ2luZSwgdGltZWxpbmUsCj4gKwkJCQkJKHVuc2lnbmVk IGxvbmcpY2UtPnJpbmcpOwo+ICAgCWludGVsX3RpbWVsaW5lX3B1dCh0aW1lbGluZSk7Cj4gICAJ aWYgKElTX0VSUihyaW5nKSkgewo+ICAgCQlyZXQgPSBQVFJfRVJSKHJpbmcpOwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gaW5kZXggNmQzOTExNDY5ODAxLi5lMjM3YmNlY2ZhMWYg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IEBAIC0zMjgsMTAgKzMyOCwx NCBAQCBzdGF0aWMgdm9pZCBwcmludF9jb250ZXh0X3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqbSwK PiAgIAo+ICAgCQlmb3JfZWFjaF9nZW1fZW5naW5lKGNlLAo+ICAgCQkJCSAgICBpOTE1X2dlbV9j b250ZXh0X2xvY2tfZW5naW5lcyhjdHgpLCBpdCkgewo+IC0JCQlpZiAoY2UtPnN0YXRlKQo+IC0J CQkJcGVyX2ZpbGVfc3RhdHMoMCwgY2UtPnN0YXRlLT5vYmosICZrc3RhdHMpOwo+IC0JCQlpZiAo Y2UtPnJpbmcpCj4gKwkJCWludGVsX2NvbnRleHRfbG9ja19waW5uZWQoY2UpOwo+ICsJCQlpZiAo aW50ZWxfY29udGV4dF9pc19waW5uZWQoY2UpKSB7CgpBbmQgdGhlc2UgaHVua3MgZG8gbm90IHNl ZW0gdG8gYmVsb25nIHRvIHRoaXMgcGF0Y2guCgo+ICsJCQkJaWYgKGNlLT5zdGF0ZSkKPiArCQkJ CQlwZXJfZmlsZV9zdGF0cygwLAo+ICsJCQkJCQkgICAgICAgY2UtPnN0YXRlLT5vYmosICZrc3Rh dHMpOwo+ICAgCQkJCXBlcl9maWxlX3N0YXRzKDAsIGNlLT5yaW5nLT52bWEtPm9iaiwgJmtzdGF0 cyk7Cj4gKwkJCX0KPiArCQkJaW50ZWxfY29udGV4dF91bmxvY2tfcGlubmVkKGNlKTsKPiAgIAkJ fQo+ICAgCQlpOTE1X2dlbV9jb250ZXh0X3VubG9ja19lbmdpbmVzKGN0eCk7Cj4gICAKPiBAQCAt MTY3NywxMiArMTY4MSwxNSBAQCBzdGF0aWMgaW50IGk5MTVfY29udGV4dF9zdGF0dXMoc3RydWN0 IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gICAKPiAgIAkJZm9yX2VhY2hfZ2VtX2VuZ2lu ZShjZSwKPiAgIAkJCQkgICAgaTkxNV9nZW1fY29udGV4dF9sb2NrX2VuZ2luZXMoY3R4KSwgaXQp IHsKPiAtCQkJc2VxX3ByaW50ZihtLCAiJXM6ICIsIGNlLT5lbmdpbmUtPm5hbWUpOwo+IC0JCQlp ZiAoY2UtPnN0YXRlKQo+IC0JCQkJZGVzY3JpYmVfb2JqKG0sIGNlLT5zdGF0ZS0+b2JqKTsKPiAt CQkJaWYgKGNlLT5yaW5nKQo+ICsJCQlpbnRlbF9jb250ZXh0X2xvY2tfcGlubmVkKGNlKTsKPiAr CQkJaWYgKGludGVsX2NvbnRleHRfaXNfcGlubmVkKGNlKSkgewo+ICsJCQkJc2VxX3ByaW50Ziht LCAiJXM6ICIsIGNlLT5lbmdpbmUtPm5hbWUpOwo+ICsJCQkJaWYgKGNlLT5zdGF0ZSkKPiArCQkJ CQlkZXNjcmliZV9vYmoobSwgY2UtPnN0YXRlLT5vYmopOwo+ICAgCQkJCWRlc2NyaWJlX2N0eF9y aW5nKG0sIGNlLT5yaW5nKTsKPiAtCQkJc2VxX3B1dGMobSwgJ1xuJyk7Cj4gKwkJCQlzZXFfcHV0 YyhtLCAnXG4nKTsKPiArCQkJfQo+ICsJCQlpbnRlbF9jb250ZXh0X3VubG9ja19waW5uZWQoY2Up Owo+ICAgCQl9Cj4gICAJCWk5MTVfZ2VtX2NvbnRleHRfdW5sb2NrX2VuZ2luZXMoY3R4KTsKPiAg IAo+IAoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZng=