From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Adalbert=20Laz=C4=83r?= Subject: [RFC PATCH v6 91/92] kvm: x86: emulate lock cmpxchg16b m128 Date: Fri, 9 Aug 2019 19:00:46 +0300 Message-ID: <20190809160047.8319-92-alazar@bitdefender.com> References: <20190809160047.8319-1-alazar@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809160047.8319-1-alazar@bitdefender.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: kvm@vger.kernel.org Cc: Tamas K Lengyel , Weijiang Yang , Yu C , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Jan Kiszka , =?UTF-8?q?Samuel=20Laur=C3=A9n?= , Konrad Rzeszutek Wilk , virtualization@lists.linux-foundation.org, =?UTF-8?q?Adalbert=20Laz=C4=83r?= , linux-mm@kvack.org, Patrick Colp , Mathieu Tarral , Stefan Hajnoczi , Paolo Bonzini , Zhang@mail.linuxfoundation.org, =?UTF-8?q?Mihai=20Don=C8=9Bu?= List-Id: virtualization@lists.linuxfoundation.org RnJvbTogTWloYWkgRG9uyJt1IDxtZG9udHVAYml0ZGVmZW5kZXIuY29tPgoKVGhpcyBwYXRjaCBh ZGRzIHN1cHBvcnQgZm9yIGxvY2sgY21weGNoZzE2YiBtMTI4IGJ5IGV4dGVuZGluZyB0aGUKZXhp c3RlbnQgZW11bGF0aW9uIGZvciBsb2NrIGNtcHhjaGc4YiBtNjQuCgpGb3IgaW1wbGVtZW50aW5n IHRoZSBhdG9taWMgb3BlcmF0aW9uLCB3ZSB1c2UgYW4gZXhwbGljaXQgYXNzZW1ibGVyCnN0YXRl bWVudCwgYXMgY21weGNoZ19kb3VibGUoKSBkb2VzIG5vdCBwcm92aWRlIHRoZSBjb250ZW50cyBv ZiB0aGUKbWVtb3J5IG9uIGZhaWx1cmUuIEFzIGJlZm9yZSwgd3JpdGViYWNrIGlzIGNvbXBsZXRl bHkgZGlzYWJsZWQgYXMgdGhlCm9wZXJhdGlvbiBpcyBleGVjdXRlZCBkaXJlY3RseSBvbiBndWVz dCBtZW1vcnksIHVubGVzcyB0aGUgYXJjaGl0ZWN0dXJlCmRvZXMgbm90IGFkdmVydGlzZSBDTVBY Q0hHMTZCIGluIENQVUlELgoKU2lnbmVkLW9mZi1ieTogTWloYWkgRG9uyJt1IDxtZG9udHVAYml0 ZGVmZW5kZXIuY29tPgpTaWduZWQtb2ZmLWJ5OiBBZGFsYmVydCBMYXrEg3IgPGFsYXphckBiaXRk ZWZlbmRlci5jb20+Ci0tLQogYXJjaC94ODYva3ZtL2VtdWxhdGUuYyB8IDExNyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogYXJjaC94ODYva3ZtL3g4Ni5jICAgICB8 ICAzNyArKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDEyMiBpbnNlcnRpb25zKCspLCAz MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jIGIvYXJj aC94ODYva3ZtL2VtdWxhdGUuYwppbmRleCAyMDM4ZTQyYzFlYWUuLmEzN2FkNjM4MzZlYSAxMDA2 NDQKLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0 ZS5jCkBAIC0yMzE4LDQ2ICsyMzE4LDEwMyBAQCBzdGF0aWMgaW50IGVtX2NhbGxfbmVhcl9hYnMo c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMg aW50IGVtX2NtcHhjaGc4YihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3N0YXRpYyBp bnQgZW1fY21weGNoZzhiX2xvY2tlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsK LQl1NjQgb2xkOworCWludCByYzsKKwl1bG9uZyBsaW5lYXI7CisJdTY0IG5ldyA9IChyZWdfcmVh ZChjdHh0LCBWQ1BVX1JFR1NfUkJYKSAmICh1MzIpLTEpIHwKKwkJKChyZWdfcmVhZChjdHh0LCBW Q1BVX1JFR1NfUkNYKSAmICh1MzIpLTEpIDw8IDMyKTsKKwl1NjQgb2xkID0gKHJlZ19yZWFkKGN0 eHQsIFZDUFVfUkVHU19SQVgpICYgKHUzMiktMSkgfAorCQkoKHJlZ19yZWFkKGN0eHQsIFZDUFVf UkVHU19SRFgpICYgKHUzMiktMSkgPDwgMzIpOwogCi0JaWYgKGN0eHQtPmxvY2tfcHJlZml4KSB7 Ci0JCWludCByYzsKLQkJdWxvbmcgbGluZWFyOwotCQl1NjQgbmV3ID0gKHJlZ19yZWFkKGN0eHQs IFZDUFVfUkVHU19SQlgpICYgKHUzMiktMSkgfAotCQkJKChyZWdfcmVhZChjdHh0LCBWQ1BVX1JF R1NfUkNYKSAmICh1MzIpLTEpIDw8IDMyKTsKKwkvKiBkaXNhYmxlIHdyaXRlYmFjayBhbHRvZ2V0 aGVyICovCisJY3R4dC0+ZCB8PSBOb1dyaXRlOwogCi0JCW9sZCA9IChyZWdfcmVhZChjdHh0LCBW Q1BVX1JFR1NfUkFYKSAmICh1MzIpLTEpIHwKLQkJCSgocmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdT X1JEWCkgJiAodTMyKS0xKSA8PCAzMik7CisJcmMgPSBsaW5lYXJpemUoY3R4dCwgY3R4dC0+ZHN0 LmFkZHIubWVtLCA4LCB0cnVlLCAmbGluZWFyKTsKKwlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5V RSkKKwkJcmV0dXJuIHJjOwogCi0JCS8qIGRpc2FibGUgd3JpdGViYWNrIGFsdG9nZXRoZXIgKi8K LQkJY3R4dC0+ZCAmPSB+U3JjV3JpdGU7Ci0JCWN0eHQtPmQgfD0gTm9Xcml0ZTsKKwlyYyA9IGN0 eHQtPm9wcy0+Y21weGNoZ19lbXVsYXRlZChjdHh0LCBsaW5lYXIsICZvbGQsICZuZXcsCisJCQkJ CSA4LCAmY3R4dC0+ZXhjZXB0aW9uKTsKIAotCQlyYyA9IGxpbmVhcml6ZShjdHh0LCBjdHh0LT5k c3QuYWRkci5tZW0sIDgsIHRydWUsICZsaW5lYXIpOwotCQlpZiAocmMgIT0gWDg2RU1VTF9DT05U SU5VRSkKLQkJCXJldHVybiByYzsKIAotCQlyYyA9IGN0eHQtPm9wcy0+Y21weGNoZ19lbXVsYXRl ZChjdHh0LCBsaW5lYXIsICZvbGQsICZuZXcsCi0JCQkJCQkgY3R4dC0+ZHN0LmJ5dGVzLAotCQkJ CQkJICZjdHh0LT5leGNlcHRpb24pOworCXN3aXRjaCAocmMpIHsKKwljYXNlIFg4NkVNVUxfQ09O VElOVUU6CisJCWN0eHQtPmVmbGFncyB8PSBYODZfRUZMQUdTX1pGOworCQlicmVhazsKKwljYXNl IFg4NkVNVUxfQ01QWENIR19GQUlMRUQ6CisJCSpyZWdfd3JpdGUoY3R4dCwgVkNQVV9SRUdTX1JB WCkgPSBvbGQgJiAodTMyKS0xOworCQkqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVHU19SRFgpID0g KG9sZCA+PiAzMikgJiAodTMyKS0xOwogCi0JCXN3aXRjaCAocmMpIHsKLQkJY2FzZSBYODZFTVVM X0NPTlRJTlVFOgotCQkJY3R4dC0+ZWZsYWdzIHw9IFg4Nl9FRkxBR1NfWkY7Ci0JCQlicmVhazsK LQkJY2FzZSBYODZFTVVMX0NNUFhDSEdfRkFJTEVEOgotCQkJKnJlZ193cml0ZShjdHh0LCBWQ1BV X1JFR1NfUkFYKSA9IG9sZCAmICh1MzIpLTE7Ci0JCQkqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVH U19SRFgpID0gKG9sZCA+PiAzMikgJiAodTMyKS0xOworCQljdHh0LT5lZmxhZ3MgJj0gflg4Nl9F RkxBR1NfWkY7CiAKLQkJCWN0eHQtPmVmbGFncyAmPSB+WDg2X0VGTEFHU19aRjsKKwkJcmMgPSBY ODZFTVVMX0NPTlRJTlVFOworCQlicmVhazsKKwl9CiAKLQkJCXJjID0gWDg2RU1VTF9DT05USU5V RTsKLQkJCWJyZWFrOwotCQl9CisJcmV0dXJuIHJjOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82 NAorc3RhdGljIGludCBlbV9jbXB4Y2hnMTZiX2xvY2tlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4 dCAqY3R4dCkKK3sKKwlpbnQgcmM7CisJdWxvbmcgbGluZWFyOworCXU2NCBuZXdbMl0gPSB7CisJ CXJlZ19yZWFkKGN0eHQsIFZDUFVfUkVHU19SQlgpLAorCQlyZWdfcmVhZChjdHh0LCBWQ1BVX1JF R1NfUkNYKQorCX07CisJdTY0IG9sZFsyXSA9IHsKKwkJcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdT X1JBWCksCisJCXJlZ19yZWFkKGN0eHQsIFZDUFVfUkVHU19SRFgpCisJfTsKIAorCS8qIGRpc2Fi bGUgd3JpdGViYWNrIGFsdG9nZXRoZXIgKi8KKwljdHh0LT5kIHw9IE5vV3JpdGU7CisKKwlyYyA9 IGxpbmVhcml6ZShjdHh0LCBjdHh0LT5kc3QuYWRkci5tZW0sIDE2LCB0cnVlLCAmbGluZWFyKTsK KwlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIHJjOworCisJaWYgKGxpbmVh ciAlIDE2KQorCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKKworCXJjID0gY3R4dC0+b3Bz LT5jbXB4Y2hnX2VtdWxhdGVkKGN0eHQsIGxpbmVhciwgb2xkLCBuZXcsCisJCQkJCSAxNiwgJmN0 eHQtPmV4Y2VwdGlvbik7CisKKwlzd2l0Y2ggKHJjKSB7CisJY2FzZSBYODZFTVVMX0NPTlRJTlVF OgorCQljdHh0LT5lZmxhZ3MgfD0gWDg2X0VGTEFHU19aRjsKKwkJYnJlYWs7CisJY2FzZSBYODZF TVVMX0NNUFhDSEdfRkFJTEVEOgorCQkqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVHU19SQVgpID0g b2xkWzBdOworCQkqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVHU19SRFgpID0gb2xkWzFdOworCisJ CWN0eHQtPmVmbGFncyAmPSB+WDg2X0VGTEFHU19aRjsKKworCQlyYyA9IFg4NkVNVUxfQ09OVElO VUU7CisJCWJyZWFrOworCX0KKworCXJldHVybiByYzsKK30KKyNlbHNlCitzdGF0aWMgaW50IGVt X2NtcHhjaGcxNmJfbG9ja2VkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXJl dHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGVtX2Nt cHhjaGc4XzE2YihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwl1NjQgb2xkOwor CisJaWYgKGN0eHQtPmxvY2tfcHJlZml4KSB7CisJCWlmIChjdHh0LT5kc3QuYnl0ZXMgPT0gOCkK KwkJCXJldHVybiBlbV9jbXB4Y2hnOGJfbG9ja2VkKGN0eHQpOworCQllbHNlIGlmIChjdHh0LT5k c3QuYnl0ZXMgPT0gMTYpCisJCQlyZXR1cm4gZW1fY21weGNoZzE2Yl9sb2NrZWQoY3R4dCk7CisJ CXJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKIAl9CiAKIAlvbGQgPSBjdHh0LT5kc3Qub3Jp Z192YWw2NDsKQEAgLTQ2NzksNyArNDczNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3ByZWZp eCBwZnhfMGZfYzdfNyA9IHsKIAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3Jv dXA5ID0geyB7Ci0JTiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4 YiksIE4sIE4sIE4sIE4sIE4sIE4sCisJTiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUs IGVtX2NtcHhjaGc4XzE2YiksIE4sIE4sIE4sIE4sIE4sIE4sCiB9LCB7CiAJTiwgTiwgTiwgTiwg TiwgTiwgTiwKIAlHUCgwLCAmcGZ4XzBmX2M3XzcpLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3Zt L3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDM0NmNlNmM1ODg3Yi4uMGU5MDQ3ODJk MzAzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKKysrIGIvYXJjaC94ODYva3ZtL3g4 Ni5jCkBAIC01NjY1LDggKzU2NjUsMTcgQEAgc3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2Vt dWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogCWNoYXIgKmthZGRyOwogCWJv b2wgZXhjaGFuZ2VkID0gZmFsc2U7CiAKLQkvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUg ZW11bGF0ZWQgYXRvbWljYWxseSAqLwotCWlmIChieXRlcyA+IDggfHwgKGJ5dGVzICYgKGJ5dGVz IC0gMSkpKQorI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgQ01QWENIR19NQVhfQllURVMg MTYKKyNlbHNlCisjZGVmaW5lIENNUFhDSEdfTUFYX0JZVEVTIDgKKyNlbmRpZgorCisJLyogZ3Vl c3RzIGNtcHhjaGd7OCwxNn1iIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqLworCWlm IChieXRlcyA+IENNUFhDSEdfTUFYX0JZVEVTIHx8IChieXRlcyAmIChieXRlcyAtIDEpKSkKKwkJ Z290byBlbXVsX3dyaXRlOworCisJaWYgKGJ5dGVzID09IDE2ICYmICFzeXN0ZW1faGFzX2NtcHhj aGdfZG91YmxlKCkpCiAJCWdvdG8gZW11bF93cml0ZTsKIAogCWdwYSA9IGt2bV9tbXVfZ3ZhX3Rv X2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBOVUxMKTsKQEAgLTU3MjQsNiArNTczMywzMCBAQCBzdGF0 aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQg KmN0eHQsCiAJCQkqKCh1NjQgKilvbGQpID0gdmFsOwogCQlicmVhazsKIAl9CisjaWZkZWYgQ09O RklHX1g4Nl82NAorCWNhc2UgMTY6IHsKKwkJdTY0ICpwMSA9ICh1NjQgKilrYWRkcjsKKwkJdTY0 ICpwMiA9IHAxICsgMTsKKwkJdTY0ICpvMSA9IG9sZDsKKwkJdTY0ICpvMiA9IG8xICsgMTsKKwkJ Y29uc3QgdTY0ICpuMSA9IG5ldzsKKwkJY29uc3QgdTY0ICpuMiA9IG4xICsgMTsKKwkJY29uc3Qg dTY0IF9fbzEgPSAqbzE7CisJCWNvbnN0IHU2NCBfX28yID0gKm8yOworCisJCS8qCisJCSAqIFdl IHVzZSBhbiBleHBsaWNpdCBhc20gc3RhdGVtZW50IGJlY2F1c2UgY21weGNoZ19kb3VibGUoKQor CQkgKiBkb2VzIG5vdCByZXR1cm4gdGhlIHByZXZpb3VzIG1lbW9yeSBjb250ZW50cyBvbiBmYWls dXJlCisJCSAqLworCQlhc20gdm9sYXRpbGUgKCJsb2NrIGNtcHhjaGcxNmIgJTJcbiIKKwkJCSAg ICAgIDogIithIigqbzEpLCAiK2QiKCpvMiksICIrbSIoKnAxKSwgIittIigqcDIpCisJCQkgICAg ICA6ICJiIigqbjEpLCAiYyIoKm4yKSA6ICJtZW1vcnkiKTsKKworCQlpZiAoX19vMSA9PSAqbzEg JiYgX19vMiA9PSAqbzIpCisJCQlleGNoYW5nZWQgPSB0cnVlOworCQlicmVhazsKKwl9CisjZW5k aWYKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXph dGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRh dGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==