From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: [PATCH v4 15/27] ARM: vITS: introduce translation table walks Date: Mon, 3 Apr 2017 21:28:17 +0100 Message-ID: <20170403202829.7278-16-andre.przywara@arm.com> References: <20170403202829.7278-1-andre.przywara@arm.com> 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 1cv8Yr-000535-Oc for xen-devel@lists.xenproject.org; Mon, 03 Apr 2017 20:26:49 +0000 In-Reply-To: <20170403202829.7278-1-andre.przywara@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Julien Grall , Stefano Stabellini Cc: xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org VGhlIElUUyBzdG9yZXMgdGhlIHRhcmdldCAodilDUFUgYW5kIHRoZSAodmlydHVhbCkgTFBJIG51 bWJlciBpbiB0YWJsZXMuCkludHJvZHVjZSBmdW5jdGlvbnMgdG8gd2FsayB0aG9zZSB0YWJsZXMg YW5kIHRyYW5zbGF0ZSBhbiBkZXZpY2UgSUQgLQpldmVudCBJRCBwYWlyIGludG8gYSBwYWlyIG9m IHZpcnR1YWwgTFBJIGFuZCB2Q1BVLgpXZSBtYXAgdGhvc2UgdGFibGVzIG9uIGRlbWFuZCAtIHdo aWNoIGlzIGNoZWFwIG9uIGFybTY0LiBBbHNvIHdlIHRha2UKY2FyZSBvZiB0aGUgbG9ja2luZyBv biB0aGUgd2F5LCBzaW5jZSB3ZSBjYW4ndCBlYXNpbHkgcHJvdGVjdCB0aG9zZSBJVFRzCmZyb20g YmVpbmcgYWx0ZXJlZCBieSB0aGUgZ3Vlc3QuCgpUbyBhbGxvdyBjb21waWxpbmcgd2l0aG91dCB3 YXJuaW5ncywgd2UgZGVjbGFyZSB0d28gZnVuY3Rpb25zIGFzCm5vbi1zdGF0aWMgZm9yIHRoZSBt b21lbnQsIHdoaWNoIHR3byBsYXRlciBwYXRjaGVzIHdpbGwgZml4LgoKU2lnbmVkLW9mZi1ieTog QW5kcmUgUHJ6eXdhcmEgPGFuZHJlLnByenl3YXJhQGFybS5jb20+Ci0tLQogeGVuL2FyY2gvYXJt L3ZnaWMtdjMtaXRzLmMgfCAxODMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTgzIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQg YS94ZW4vYXJjaC9hcm0vdmdpYy12My1pdHMuYyBiL3hlbi9hcmNoL2FybS92Z2ljLXYzLWl0cy5j CmluZGV4IGZkM2I5YTEuLmZjZmVhM2IgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS92Z2ljLXYz LWl0cy5jCisrKyBiL3hlbi9hcmNoL2FybS92Z2ljLXYzLWl0cy5jCkBAIC03MSw2ICs3MSwxODkg QEAgc3RhdGljIGJvb2wgaXRzX2lzX2VuYWJsZWQoc3RydWN0IHZpcnRfaXRzICppdHMpCiAgICAg cmV0dXJuIHRlc3RfYml0KFZJUlRfSVRTX0VOQUJMRUQsICZpdHMtPmZsYWdzKTsKIH0KIAorI2Rl ZmluZSBVTk1BUFBFRF9DT0xMRUNUSU9OICAgICAgKCh1aW50MTZfdCl+MCkKKworLyoKKyAqIFRo ZSBwaHlzaWNhbCBhZGRyZXNzIGlzIGVuY29kZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHkgZGVwZW5k aW5nIG9uCisgKiB0aGUgdXNlZCBwYWdlIHNpemU6IHRoZSBoaWdoZXN0IGZvdXIgYml0cyBhcmUg c3RvcmVkIGluIHRoZSBsb3dlc3QKKyAqIGZvdXIgYml0cyBvZiB0aGUgZmllbGQgZm9yIDY0SyBw YWdlcy4KKyAqLworc3RhdGljIHBhZGRyX3QgZ2V0X2Jhc2VyX3BoeXNfYWRkcih1aW50NjRfdCBy ZWcpCit7CisgICAgaWYgKCByZWcgJiBCSVQoOSkgKQorICAgICAgICByZXR1cm4gKHJlZyAmIEdF Tk1BU0tfVUxMKDQ3LCAxNikpIHwKKyAgICAgICAgICAgICAgICAoKHJlZyAmIEdFTk1BU0tfVUxM KDE1LCAxMikpIDw8IDM2KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiByZWcgJiBHRU5NQVNL X1VMTCg0NywgMTIpOworfQorCisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBJVFMgbG9jayBo ZWxkLiAqLworc3RhdGljIHN0cnVjdCB2Y3B1ICpnZXRfdmNwdV9mcm9tX2NvbGxlY3Rpb24oc3Ry dWN0IHZpcnRfaXRzICppdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50MTZfdCBjb2xsaWQpCit7CisgICAgcGFkZHJfdCBhZGRyID0gZ2V0X2Jhc2Vy X3BoeXNfYWRkcihpdHMtPmJhc2VyX2NvbGwpOworICAgIHVpbnQxNl90ICpjb2xsX3RhYmxlOwor ICAgIHVpbnQxNl90IHZjcHVfaWQ7CisKKyAgICBpZiAoIGNvbGxpZCA+PSBpdHMtPm1heF9jb2xs ZWN0aW9ucyApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgY29sbF90YWJsZSA9IG1hcF9v bmVfZ3Vlc3RfcGFnZShpdHMtPmQsIGFkZHIgKyBjb2xsaWQgKiBzaXplb2YodWludDE2X3QpKTsK KyAgICBpZiAoICFjb2xsX3RhYmxlICkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB2Y3B1 X2lkID0gKmNvbGxfdGFibGU7CisKKyAgICB1bm1hcF9vbmVfZ3Vlc3RfcGFnZShjb2xsX3RhYmxl KTsKKworICAgIGlmICggdmNwdV9pZCA9PSBVTk1BUFBFRF9DT0xMRUNUSU9OIHx8IHZjcHVfaWQg Pj0gaXRzLT5kLT5tYXhfdmNwdXMgKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVy biBpdHMtPmQtPnZjcHVbdmNwdV9pZF07Cit9CisKKy8qCisgKiBPdXIgZGV2aWNlIHRhYmxlIGVu Y29kaW5nczoKKyAqIENvbnRhaW5zIHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBJ bnRlcnJ1cHQgVHJhbnNsYXRpb24gVGFibGUgaW4KKyAqIGJpdHMgWzUxOjhdLCBhbmQgdGhlIHNp emUgb2YgaXQgZW5jb2RlZCBpbiB0aGUgbG93ZXN0IDggYml0cy4KKyAqLworI2RlZmluZSBERVZf VEFCTEVfSVRUX0FERFIoeCkgKCh4KSAmIEdFTk1BU0tfVUxMKDUxLCA4KSkKKyNkZWZpbmUgREVW X1RBQkxFX0lUVF9TSVpFKHgpIChCSVQoKCh4KSAmIEdFTk1BU0tfVUxMKDcsIDApKSArIDEpKQor I2RlZmluZSBERVZfVEFCTEVfRU5UUlkoYWRkciwgYml0cykgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgICgoKGFkZHIpICYgR0VOTUFTS19VTEwoNTEsIDgpKSB8ICgoKGJpdHMpIC0gMSkg JiBHRU5NQVNLX1VMTCg3LCAwKSkpCisKKy8qCisgKiBMb29rdXAgdGhlIGFkZHJlc3Mgb2YgdGhl IEludGVycnVwdCBUcmFuc2xhdGlvbiBUYWJsZSBhc3NvY2lhdGVkIHdpdGgKKyAqIGEgZGV2aWNl IElEIGFuZCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIElUVEUgYmVsb25naW5nIHRvIHRoZSBl dmVudCBJRAorICogKHdoaWNoIGlzIGFuIGluZGV4IGludG8gdGhhdCB0YWJsZSkuCisgKi8KK3N0 YXRpYyBwYWRkcl90IGl0c19nZXRfaXR0ZV9hZGRyZXNzKHN0cnVjdCB2aXJ0X2l0cyAqaXRzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGV2aWQsIHVpbnQz Ml90IGV2aWQpCit7CisgICAgcGFkZHJfdCByZXQsIGFkZHIgPSBnZXRfYmFzZXJfcGh5c19hZGRy KGl0cy0+YmFzZXJfZGV2KTsKKyAgICB1aW50NjRfdCAqaXR0X3B0cjsKKyAgICB1aW50NjRfdCBp dHQ7CisKKyAgICBpZiAoIGRldmlkID49IGl0cy0+bWF4X2RldmljZXMgKQorICAgICAgICByZXR1 cm4gSU5WQUxJRF9QQUREUjsKKworICAgIGl0dF9wdHIgPSBtYXBfb25lX2d1ZXN0X3BhZ2UoaXRz LT5kLCBhZGRyICsgZGV2aWQgKiBzaXplb2YodWludDY0X3QpKTsKKyAgICBpZiAoICFpdHRfcHRy ICkKKyAgICAgICAgcmV0dXJuIElOVkFMSURfUEFERFI7CisKKyAgICBpdHQgPSByZWFkX3U2NF9h dG9taWMoaXR0X3B0cik7CisKKyAgICBpZiAoIGV2aWQgPCBERVZfVEFCTEVfSVRUX1NJWkUoaXR0 KSAmJgorICAgICAgICAgREVWX1RBQkxFX0lUVF9BRERSKGl0dCkgIT0gSU5WQUxJRF9QQUREUiAp CisgICAgICAgIHJldCA9IERFVl9UQUJMRV9JVFRfQUREUihpdHQpICsgZXZpZCAqIHNpemVvZihz dHJ1Y3Qgdml0c19pdHRlKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IElOVkFMSURfUEFERFI7 CisKKyAgICB1bm1hcF9vbmVfZ3Vlc3RfcGFnZShpdHRfcHRyKTsKKworICAgIHJldHVybiByZXQ7 Cit9CisKKy8qCisgKiBMb29rcyB1cCBhIGdpdmVuIGRldmljZUlEL2V2ZW50SUQgcGFpciBvbiBh biBJVFMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvCisgKiB0aGUgY29ycmVzcG9uZGluZyBJVFRF LiBUaGlzIG1hcHMgdGhlIHJlc3BlY3RpdmUgZ3Vlc3QgcGFnZSBpbnRvIFhlbi4KKyAqIE9uY2Ug ZmluaXNoZWQgd2l0aCBoYW5kbGluZyB0aGUgSVRURSwgY2FsbCBwdXRfaXR0ZSgpIHRvIHVubWFw CisgKiB0aGUgcGFnZSBhZ2Fpbi4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIElUUyBsb2Nr IGhlbGQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgdml0c19pdHRlICpnZXRfaXR0ZShzdHJ1Y3Qgdmly dF9pdHMgKml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBk ZXZpZCwgdWludDMyX3QgZXZpZCkKK3sKKyAgICBwYWRkcl90IGFkZHIgPSBpdHNfZ2V0X2l0dGVf YWRkcmVzcyhpdHMsIGRldmlkLCBldmlkKTsKKworICAgIGlmICggYWRkciA9PSBJTlZBTElEX1BB RERSICkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gbWFwX29uZV9ndWVzdF9w YWdlKGl0cy0+ZCwgYWRkcik7Cit9CisKKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIElUUyBs b2NrIGhlbGQuICovCitzdGF0aWMgdm9pZCBwdXRfaXR0ZShzdHJ1Y3QgdmlydF9pdHMgKml0cywg c3RydWN0IHZpdHNfaXR0ZSAqaXR0ZSkKK3sKKyAgICB1bm1hcF9vbmVfZ3Vlc3RfcGFnZShpdHRl KTsKK30KKworLyoKKyAqIFF1ZXJpZXMgdGhlIGNvbGxlY3Rpb24gYW5kIGRldmljZSB0YWJsZXMg dG8gZ2V0IHRoZSB2Q1BVIGFuZCB2aXJ0dWFsCisgKiBMUEkgbnVtYmVyIGZvciBhIGdpdmVuIGd1 ZXN0IGV2ZW50LiBUaGlzIHRha2VzIGNhcmUgb2YgbWFwcGluZyB0aGUKKyAqIHJlc3BlY3RpdmUg dGFibGVzIGFuZCB2YWxpZGF0aW5nIHRoZSB2YWx1ZXMsIHNpbmNlIHdlIGNhbid0IGVmZmljaWVu dGx5CisgKiBwcm90ZWN0IHRoZSBJVFRzIHdpdGggdGhlaXIgbGVzcy10aGFuLXBhZ2Utc2l6ZSBn cmFudWxhcml0eS4KKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiB0aGUgbG9ja2luZyBi eSB0YWtpbmcgdGhlIGl0c19sb2NrIGl0c2VsZiwgc28KKyAqIGEgY2FsbGVyIHNoYWxsIG5vdCBo b2xkIHRoaXMuIFVwb24gcmV0dXJuaW5nLCB0aGUgbG9jayBpcyBkcm9wcGVkIGFnYWluLgorICov Citib29sIHJlYWRfaXR0ZShzdHJ1Y3QgdmlydF9pdHMgKml0cywgdWludDMyX3QgZGV2aWQsIHVp bnQzMl90IGV2aWQsCisgICAgICAgICAgICAgICBzdHJ1Y3QgdmNwdSAqKnZjcHUsIHVpbnQzMl90 ICp2bHBpKQoreworICAgIHN0cnVjdCB2aXRzX2l0dGUgKml0dGU7CisgICAgdWludDE2X3QgY29s bGlkOworICAgIHVpbnQzMl90IF92bHBpOworICAgIHN0cnVjdCB2Y3B1ICpfdmNwdTsKKworICAg IHNwaW5fbG9jaygmaXRzLT5pdHNfbG9jayk7CisgICAgaXR0ZSA9IGdldF9pdHRlKGl0cywgZGV2 aWQsIGV2aWQpOworICAgIGlmICggIWl0dGUgKQorICAgIHsKKyAgICAgICAgc3Bpbl91bmxvY2so Jml0cy0+aXRzX2xvY2spOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNvbGxp ZCA9IGl0dGUtPmNvbGxlY3Rpb247CisgICAgX3ZscGkgPSBpdHRlLT52bHBpOworICAgIHB1dF9p dHRlKGl0cywgaXR0ZSk7CisKKyAgICBfdmNwdSA9IGdldF92Y3B1X2Zyb21fY29sbGVjdGlvbihp dHMsIGNvbGxpZCk7CisgICAgc3Bpbl91bmxvY2soJml0cy0+aXRzX2xvY2spOworCisgICAgaWYg KCAhX3ZjcHUgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAqdmNwdSA9IF92Y3B1Owor ICAgICp2bHBpID0gX3ZscGk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2RlZmluZSBTS0lQ X0xQSV9VUERBVEUgMQorLyoKKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiB0aGUgbG9j a2luZyBieSB0YWtpbmcgdGhlIGl0c19sb2NrIGl0c2VsZiwgc28KKyAqIGEgY2FsbGVyIHNoYWxs IG5vdCBob2xkIHRoaXMuIFVwb24gcmV0dXJuaW5nLCB0aGUgbG9jayBpcyBkcm9wcGVkIGFnYWlu LgorICovCitib29sIHdyaXRlX2l0dGUoc3RydWN0IHZpcnRfaXRzICppdHMsIHVpbnQzMl90IGRl dmlkLCB1aW50MzJfdCBldmlkLAorICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvbGxpZCwgdWlu dDMyX3QgdmxwaSwgc3RydWN0IHZjcHUgKip2Y3B1KQoreworICAgIHN0cnVjdCB2aXRzX2l0dGUg Kml0dGU7CisKKyAgICBpZiAoIGNvbGxpZCA+PSBpdHMtPm1heF9jb2xsZWN0aW9ucyApCisgICAg ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICggdmxwaSA+PSBpdHMtPmQtPmFyY2gudmdpYy5u cl9scGlzICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3Bpbl9sb2NrKCZpdHMtPml0 c19sb2NrKTsKKyAgICBpdHRlID0gZ2V0X2l0dGUoaXRzLCBkZXZpZCwgZXZpZCk7CisgICAgaWYg KCAhaXR0ZSApCisgICAgeworICAgICAgICBzcGluX3VubG9jaygmaXRzLT5pdHNfbG9jayk7Cisg ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpdHRlLT5jb2xsZWN0aW9uID0gY29s bGlkOworICAgIGlmICggdmxwaSAhPSBTS0lQX0xQSV9VUERBVEUgKQorICAgICAgICBpdHRlLT52 bHBpID0gdmxwaTsKKworICAgIGlmICggdmNwdSApCisgICAgICAgICp2Y3B1ID0gZ2V0X3ZjcHVf ZnJvbV9jb2xsZWN0aW9uKGl0cywgY29sbGlkKTsKKworICAgIHB1dF9pdHRlKGl0cywgaXR0ZSk7 CisgICAgc3Bpbl91bmxvY2soJml0cy0+aXRzX2xvY2spOworCisgICAgcmV0dXJuIHRydWU7Cit9 CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRnVuY3Rpb25z IHRoYXQgaGFuZGxlIElUUyBjb21tYW5kcyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0tIAoyLjkuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=