From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from [222.73.24.84] (helo=song.cn.fujitsu.com) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1SUZ64-0000Ow-VR for kexec@lists.infradead.org; Wed, 16 May 2012 07:56:39 +0000 Message-ID: <4FB35D60.6050009@cn.fujitsu.com> Date: Wed, 16 May 2012 15:55:12 +0800 From: zhangyanfei MIME-Version: 1.0 Subject: [PATCH v2 3/5] KVM-INTEL: Add new module vmcsinfo-intel to fill VMCSINFO References: <4FB35C48.30708@cn.fujitsu.com> In-Reply-To: <4FB35C48.30708@cn.fujitsu.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: kexec-bounces@lists.infradead.org Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: Avi Kivity , mtosatti@redhat.com Cc: dzickus@redhat.com, luto@mit.edu, kvm@vger.kernel.org, Joerg Roedel , kexec@lists.infradead.org, linux-kernel@vger.kernel.org, paul.gortmaker@windriver.com, ludwig.nussel@suse.de, ebiederm@xmission.com, Greg KH VGhpcyBwYXRjaCBpbXBsZW1lbnRzIGEgbmV3IG1vZHVsZSBuYW1lZCB2bWNzaW5mby1pbnRlbC4g VGhlCm1vZHVsZSBmaWxscyBWTUNTSU5GTyB3aXRoIHRoZSBWTUNTIHJldmlzaW9uIGlkZW50aWZp ZXIsCmFuZCBlbmNvZGVkIG9mZnNldHMgb2YgVk1DUyBmaWVsZHMuCgpOb3RlLCBvZmZzZXRzIG9m IGZpZWxkcyBiZWxvdyB3aWxsIG5vdCBiZSBmaWxsZWQgaW50byBWTUNTSU5GTzoKMS4gZmllbGRz IGRlZmluZWQgaW4gSW50ZWwgc3BlY2lmaWNhdGlvbiAoSW50ZWzCriA2NCBhbmQKICAgSUEtMzIg QXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBEZXZlbG9wZXLigJlzIE1hbnVhbCwgVm9sdW1lCiAgIDND KSBidXQgbm90IGRlZmluZWQgaW4gKnZtY3NfZmllbGQqLgoyLiBmaWVsZHMgZG9uJ3QgZXhpc3Qg YmVjYXVzZSB0aGVpciBjb3JyZXNwb25kaW5nIGNvbnRyb2wgYml0cwogICBhcmUgbm90IHNldC4K ClNpZ25lZC1vZmYtYnk6IHpoYW5neWFuZmVpIDx6aGFuZ3lhbmZlaUBjbi5mdWppdHN1LmNvbT4K LS0tCiBhcmNoL3g4Ni9rdm0vS2NvbmZpZyAgICB8ICAgMTEgKysKIGFyY2gveDg2L2t2bS9NYWtl ZmlsZSAgIHwgICAgMyArCiBhcmNoL3g4Ni9rdm0vdm1jc2luZm8uYyB8ICA0MDIgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg NDE2IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJj aC94ODYva3ZtL3ZtY3NpbmZvLmMKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZyBi L2FyY2gveDg2L2t2bS9LY29uZmlnCmluZGV4IDFhN2ZlODYuLjg3ZGY5ZDQgMTAwNjQ0Ci0tLSBh L2FyY2gveDg2L2t2bS9LY29uZmlnCisrKyBiL2FyY2gveDg2L2t2bS9LY29uZmlnCkBAIC02Miw2 ICs2MiwxNyBAQCBjb25maWcgS1ZNX0lOVEVMCiAJICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1 bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRl bC4KIAorY29uZmlnIFZNQ1NJTkZPX0lOVEVMCisJdHJpc3RhdGUgIkV4cG9ydCBWTUNTSU5GTyBm b3IgSW50ZWwgcHJvY2Vzc29ycyIKKwlkZXBlbmRzIG9uIEtWTV9JTlRFTAorCS0tLWhlbHAtLS0K KwkgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGV4cG9ydGluZyBWTUNTSU5GTyBvbiBJbnRlbCBwcm9j ZXNzb3JzIGVxdWlwcGVkCisJICB3aXRoIHRoZSBWVCBleHRlbnNpb25zLiBUaGUgVk1DU0lORk8g Y29udGFpbnMgYSBWTUNTIHJldmlzaW9uCisJICBpZGVudGlmaWVyIGFuZCBvZmZzZXRzIG9mIFZN Q1MgZmllbGRzLgorCisJICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhl cmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHZtY3NpbmZvLWludGVsLgorCiBjb25m aWcgS1ZNX0FNRAogCXRyaXN0YXRlICJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnQiCiAJ ZGVwZW5kcyBvbiBLVk0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZSBiL2FyY2gv eDg2L2t2bS9NYWtlZmlsZQppbmRleCA0ZjU3OWU4Li4xMmExZWY2IDEwMDY0NAotLS0gYS9hcmNo L3g4Ni9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlCkBAIC00LDYgKzQs NyBAQCBjY2ZsYWdzLXkgKz0gLUl2aXJ0L2t2bSAtSWFyY2gveDg2L2t2bQogQ0ZMQUdTX3g4Ni5v IDo9IC1JLgogQ0ZMQUdTX3N2bS5vIDo9IC1JLgogQ0ZMQUdTX3ZteC5vIDo9IC1JLgorQ0ZMQUdT X3ZtY3NpbmZvLm8gOj0gLUkuCiAKIGt2bS15CQkJKz0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmly dC9rdm0vLCBrdm1fbWFpbi5vIGlvYXBpYy5vIFwKIAkJCQljb2FsZXNjZWRfbW1pby5vIGlycV9j b21tLm8gZXZlbnRmZC5vIFwKQEAgLTE1LDcgKzE2LDkgQEAga3ZtLXkJCQkrPSB4ODYubyBtbXUu byBlbXVsYXRlLm8gaTgyNTkubyBpcnEubyBsYXBpYy5vIFwKIAkJCSAgIGk4MjU0Lm8gdGltZXIu byBjcHVpZC5vIHBtdS5vCiBrdm0taW50ZWwteQkJKz0gdm14Lm8KIGt2bS1hbWQteQkJKz0gc3Zt Lm8KK3ZtY3NpbmZvLWludGVsLXkJKz0gdm1jc2luZm8ubwogCiBvYmotJChDT05GSUdfS1ZNKQkr PSBrdm0ubwogb2JqLSQoQ09ORklHX0tWTV9JTlRFTCkJKz0ga3ZtLWludGVsLm8KIG9iai0kKENP TkZJR19LVk1fQU1EKQkrPSBrdm0tYW1kLm8KK29iai0kKENPTkZJR19WTUNTSU5GT19JTlRFTCkJ Kz0gdm1jc2luZm8taW50ZWwubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZtY3NpbmZvLmMg Yi9hcmNoL3g4Ni9rdm0vdm1jc2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4yODhjNDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva3ZtL3ZtY3NpbmZvLmMK QEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiBLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIGRy aXZlciBmb3IgTGludXgKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIG1hY2hpbmVzIHdpdGgg SW50ZWwgVlQteCBleHRlbnNpb25zIHRvIGV4cG9ydAorICogb2Zmc2V0cyBvZiBWTUNTIGZpZWxk cyBmb3IgZ3Vlc3QgZGVidWdnaW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBGdWppdHN1 LCBJbmMuCisgKgorICogQXV0aG9yczoKKyAqICAgWmhhbmcgWWFuZmVpIDx6aGFuZ3lhbmZlaUBj bi5mdWppdHN1LmNvbT4KKyAqCisgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIuICBTZWUKKyAqIHRoZSBDT1BZSU5HIGZpbGUg aW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxs aW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC90 Ym9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisKKyNpbmNsdWRlIDxhc20vdm14 Lmg+CisjaW5jbHVkZSA8YXNtL3NwZWNpYWxfaW5zbnMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vz c29yLWZsYWdzLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9tc3ItaW5k ZXguaD4KKyNpbmNsdWRlIDxhc20vdm1jc2luZm8uaD4KKworTU9EVUxFX0FVVEhPUigiRnVqaXRz dSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9j cHVfaWQgdm1jc2luZm9fY3B1X2lkW10gPSB7CisJWDg2X0ZFQVRVUkVfTUFUQ0goWDg2X0ZFQVRV UkVfVk1YKSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoeDg2Y3B1LCB2bWNzaW5mb19j cHVfaWQpOworCisvKgorICogRm9yIGNhY3VsYXRpbmcgb2Zmc2V0cyBvZiBmaWVsZHMgaW4gVk1D UyBkYXRhLCB3ZSBpbmRleCBldmVyeSAxNi1iaXQKKyAqIGZpZWxkIGJ5IHRoaXMga2luZCBvZiBm b3JtYXQ6CisgKiAgICAgICAgIHwgLS0tLS0tLS0tIDE2IGJpdHMgLS0tLS0tLS0tLSB8CisgKiAg ICAgICAgICstLS0tLS0tLS0tLS0tKy0rLS0tLS0tLS0tLS0tKy0rCisgKiAgICAgICAgIHwgaGln aCA3IGJpdHMgfDF8IGxvdyA3IGJpdHMgfDB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0tKy0r LS0tLS0tLS0tLS0tKy0rCisgKiBJbiBoaWdoIGJ5dGUsIHRoZSBsb3dlc3QgYml0IG11c3QgYmUg MTsgSW4gbG93IGJ5dGUsIHRoZSBsb3dlc3QgYml0CisgKiBtdXN0IGJlIDAuIFRoZSB0d28gYml0 cyBhcmUgc2V0IGxpa2UgdGhpcyBpbiBjYXNlIGluZGV4ZXMgaW4gVk1DUworICogZGF0YSBhcmUg cmVhZCBhcyBiaWcgZW5kaWFuIG1vZGUuCisgKiBUaGUgcmVtYWluaW5nIDE0IGJpdHMgb2YgdGhl IGluZGV4IGluZGljYXRlIHRoZSByZWFsIG9mZnNldCBvZiB0aGUKKyAqIGZpZWxkLiBCZWNhdXNl IHRoZSBzaXplIG9mIGEgVk1DUyByZWdpb24gaXMgYXQgbW9zdCA0IEtCeXRlcywgc28KKyAqIDE0 IGJpdHMgYXJlIGVub3VnaCB0byBpbmRleCB0aGUgd2hvbGUgVk1DUyByZWdpb24uCisgKgorICog RU5DT0RJTkdfT0ZGU0VUOiBlbmNvZGUgdGhlIG9mZnNldCBpbnRvIHRoZSBpbmRleCBvZiB0aGlz IGtpbmQuCisgKi8KKyNkZWZpbmUgT0ZGU0VUX0hJR0hfU0hJRlQgKDcpCisjZGVmaW5lIE9GRlNF VF9MT1dfTUFTSyAgICgoMSA8PCBPRkZTRVRfSElHSF9TSElGVCkgLSAxKSAvKiAweDdmICovCisj ZGVmaW5lIE9GRlNFVF9ISUdIX01BU0sgIChPRkZTRVRfTE9XX01BU0sgPDwgT0ZGU0VUX0hJR0hf U0hJRlQpIC8qIDB4M2Y4MCAqLworI2RlZmluZSBFTkNPRElOR19PRkZTRVQob2Zmc2V0KSBcCisJ KCgoKG9mZnNldCkgJiBPRkZTRVRfTE9XX01BU0spIDw8IDEpICsgXAorCSgoKChvZmZzZXQpICYg T0ZGU0VUX0hJR0hfTUFTSykgPDwgMikgfCAweDEwMCkpCisKKy8qCisgKiBXZSBzZXBhcmF0ZSB0 aGVzZSBmaXZlIGNvbnRyb2wgZmllbGRzIGZyb20gb3RoZXIgZmllbGRzCisgKiBiZWNhdXNlIHNv bWUgZmllbGRzIG9ubHkgZXhpc3Qgb24gcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQKKyAqIHRoZSAx LXNldHRpbmcgb2YgY29udHJvbCBiaXRzIGluIHRoZSBmaXZlIGNvbnRyb2wgZmllbGRzLgorICov CitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX2NvbnRyb2xfZmllbGQodm9pZCkKK3sKKyNkZWZp bmUgQ09OVFJPTF9GSUVMRF9PRkZTRVQoZmllbGQpIFwKKwlWTUNTSU5GT19GSUVMRChmaWVsZCwg dm1jc19yZWFkMzIoZmllbGQpKQorCisJQ09OVFJPTF9GSUVMRF9PRkZTRVQoUElOX0JBU0VEX1ZN X0VYRUNfQ09OVFJPTCk7CisJQ09OVFJPTF9GSUVMRF9PRkZTRVQoQ1BVX0JBU0VEX1ZNX0VYRUNf Q09OVFJPTCk7CisJaWYgKGNwdV9oYXNfc2Vjb25kYXJ5X2V4ZWNfY3RybHMoKSkgeworCQlDT05U Uk9MX0ZJRUxEX09GRlNFVChTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MKTsKKwl9CisJQ09OVFJP TF9GSUVMRF9PRkZTRVQoVk1fRVhJVF9DT05UUk9MUyk7CisJQ09OVFJPTF9GSUVMRF9PRkZTRVQo Vk1fRU5UUllfQ09OVFJPTFMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX2ZpZWxk MTYodm9pZCkKK3sKKyNkZWZpbmUgRklFTERfT0ZGU0VUMTYoZmllbGQpIFwKKwlWTUNTSU5GT19G SUVMRChmaWVsZCwgdm1jc19yZWFkMTYoZmllbGQpKQorCisJRklFTERfT0ZGU0VUMTYoR1VFU1Rf RVNfU0VMRUNUT1IpOworCUZJRUxEX09GRlNFVDE2KEdVRVNUX0NTX1NFTEVDVE9SKTsKKwlGSUVM RF9PRkZTRVQxNihHVUVTVF9TU19TRUxFQ1RPUik7CisJRklFTERfT0ZGU0VUMTYoR1VFU1RfRFNf U0VMRUNUT1IpOworCUZJRUxEX09GRlNFVDE2KEdVRVNUX0ZTX1NFTEVDVE9SKTsKKwlGSUVMRF9P RkZTRVQxNihHVUVTVF9HU19TRUxFQ1RPUik7CisJRklFTERfT0ZGU0VUMTYoR1VFU1RfTERUUl9T RUxFQ1RPUik7CisJRklFTERfT0ZGU0VUMTYoR1VFU1RfVFJfU0VMRUNUT1IpOworCUZJRUxEX09G RlNFVDE2KEhPU1RfRVNfU0VMRUNUT1IpOworCUZJRUxEX09GRlNFVDE2KEhPU1RfQ1NfU0VMRUNU T1IpOworCUZJRUxEX09GRlNFVDE2KEhPU1RfU1NfU0VMRUNUT1IpOworCUZJRUxEX09GRlNFVDE2 KEhPU1RfRFNfU0VMRUNUT1IpOworCUZJRUxEX09GRlNFVDE2KEhPU1RfRlNfU0VMRUNUT1IpOwor CUZJRUxEX09GRlNFVDE2KEhPU1RfR1NfU0VMRUNUT1IpOworCUZJRUxEX09GRlNFVDE2KEhPU1Rf VFJfU0VMRUNUT1IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX2ZpZWxkNjQodm9p ZCkKK3sKKyNkZWZpbmUgRklFTERfT0ZGU0VUNjQoZmllbGQpIFwKKwlWTUNTSU5GT19GSUVMRChm aWVsZCwgdm1jc19yZWFkNjQoZmllbGQpKQorCisJRklFTERfT0ZGU0VUNjQoSU9fQklUTUFQX0Ep OworCUZJRUxEX09GRlNFVDY0KElPX0JJVE1BUF9BX0hJR0gpOworCUZJRUxEX09GRlNFVDY0KElP X0JJVE1BUF9CKTsKKwlGSUVMRF9PRkZTRVQ2NChJT19CSVRNQVBfQl9ISUdIKTsKKwlGSUVMRF9P RkZTRVQ2NChWTV9FWElUX01TUl9TVE9SRV9BRERSKTsKKwlGSUVMRF9PRkZTRVQ2NChWTV9FWElU X01TUl9TVE9SRV9BRERSX0hJR0gpOworCUZJRUxEX09GRlNFVDY0KFZNX0VYSVRfTVNSX0xPQURf QUREUik7CisJRklFTERfT0ZGU0VUNjQoVk1fRVhJVF9NU1JfTE9BRF9BRERSX0hJR0gpOworCUZJ RUxEX09GRlNFVDY0KFZNX0VOVFJZX01TUl9MT0FEX0FERFIpOworCUZJRUxEX09GRlNFVDY0KFZN X0VOVFJZX01TUl9MT0FEX0FERFJfSElHSCk7CisJRklFTERfT0ZGU0VUNjQoVFNDX09GRlNFVCk7 CisJRklFTERfT0ZGU0VUNjQoVFNDX09GRlNFVF9ISUdIKTsKKwlGSUVMRF9PRkZTRVQ2NChWTUNT X0xJTktfUE9JTlRFUik7CisJRklFTERfT0ZGU0VUNjQoVk1DU19MSU5LX1BPSU5URVJfSElHSCk7 CisJRklFTERfT0ZGU0VUNjQoR1VFU1RfSUEzMl9ERUJVR0NUTCk7CisJRklFTERfT0ZGU0VUNjQo R1VFU1RfSUEzMl9ERUJVR0NUTF9ISUdIKTsKKworCWlmIChjcHVfaGFzX3ZteF9tc3JfYml0bWFw KCkpIHsKKwkJRklFTERfT0ZGU0VUNjQoTVNSX0JJVE1BUCk7CisJCUZJRUxEX09GRlNFVDY0KE1T Ul9CSVRNQVBfSElHSCk7CisJfQorCisJaWYgKGNwdV9oYXNfdm14X3Rwcl9zaGFkb3coKSkgewor CQlGSUVMRF9PRkZTRVQ2NChWSVJUVUFMX0FQSUNfUEFHRV9BRERSKTsKKwkJRklFTERfT0ZGU0VU NjQoVklSVFVBTF9BUElDX1BBR0VfQUREUl9ISUdIKTsKKwl9CisKKwlpZiAoY3B1X2hhc19zZWNv bmRhcnlfZXhlY19jdHJscygpKSB7CisJCWlmICh2bWNzX2NvbmZpZy5jcHVfYmFzZWRfMm5kX2V4 ZWNfY3RybCAmCisJCSAgICBTRUNPTkRBUllfRVhFQ19WSVJUVUFMSVpFX0FQSUNfQUNDRVNTRVMp IHsKKwkJCUZJRUxEX09GRlNFVDY0KEFQSUNfQUNDRVNTX0FERFIpOworCQkJRklFTERfT0ZGU0VU NjQoQVBJQ19BQ0NFU1NfQUREUl9ISUdIKTsKKwkJfQorCQlpZiAoY3B1X2hhc192bXhfZXB0KCkp IHsKKwkJCUZJRUxEX09GRlNFVDY0KEVQVF9QT0lOVEVSKTsKKwkJCUZJRUxEX09GRlNFVDY0KEVQ VF9QT0lOVEVSX0hJR0gpOworCQkJRklFTERfT0ZGU0VUNjQoR1VFU1RfUEhZU0lDQUxfQUREUkVT Uyk7CisJCQlGSUVMRF9PRkZTRVQ2NChHVUVTVF9QSFlTSUNBTF9BRERSRVNTX0hJR0gpOworCQkJ RklFTERfT0ZGU0VUNjQoR1VFU1RfUERQVFIwKTsKKwkJCUZJRUxEX09GRlNFVDY0KEdVRVNUX1BE UFRSMF9ISUdIKTsKKwkJCUZJRUxEX09GRlNFVDY0KEdVRVNUX1BEUFRSMSk7CisJCQlGSUVMRF9P RkZTRVQ2NChHVUVTVF9QRFBUUjFfSElHSCk7CisJCQlGSUVMRF9PRkZTRVQ2NChHVUVTVF9QRFBU UjIpOworCQkJRklFTERfT0ZGU0VUNjQoR1VFU1RfUERQVFIyX0hJR0gpOworCQkJRklFTERfT0ZG U0VUNjQoR1VFU1RfUERQVFIzKTsKKwkJCUZJRUxEX09GRlNFVDY0KEdVRVNUX1BEUFRSM19ISUdI KTsKKwkJfQorCX0KKworCWlmICh2bWNzX2NvbmZpZy52bWV4aXRfY3RybCAmIFZNX0VYSVRfU0FW RV9JQTMyX1BBVCB8fCBcCisJICAgIHZtY3NfY29uZmlnLnZtZW50cnlfY3RybCAmIFZNX0VOVFJZ X0xPQURfSUEzMl9QQVQpIHsKKwkJRklFTERfT0ZGU0VUNjQoR1VFU1RfSUEzMl9QQVQpOworCQlG SUVMRF9PRkZTRVQ2NChHVUVTVF9JQTMyX1BBVF9ISUdIKTsKKwl9CisKKwlpZiAodm1jc19jb25m aWcudm1leGl0X2N0cmwgJiBWTV9FWElUX1NBVkVfSUEzMl9FRkVSIHx8IFwKKwkgICAgdm1jc19j b25maWcudm1lbnRyeV9jdHJsICYgVk1fRU5UUllfTE9BRF9JQTMyX0VGRVIpIHsKKwkJRklFTERf T0ZGU0VUNjQoR1VFU1RfSUEzMl9FRkVSKTsKKwkJRklFTERfT0ZGU0VUNjQoR1VFU1RfSUEzMl9F RkVSX0hJR0gpOworCX0KKworCWlmICh2bWNzX2NvbmZpZy52bWVudHJ5X2N0cmwgJiBWTV9FTlRS WV9MT0FEX0lBMzJfUEVSRl9HTE9CQUxfQ1RSTCkgeworCQlGSUVMRF9PRkZTRVQ2NChHVUVTVF9J QTMyX1BFUkZfR0xPQkFMX0NUUkwpOworCQlGSUVMRF9PRkZTRVQ2NChHVUVTVF9JQTMyX1BFUkZf R0xPQkFMX0NUUkxfSElHSCk7CisJfQorCisJaWYgKHZtY3NfY29uZmlnLnZtZXhpdF9jdHJsICYg Vk1fRVhJVF9MT0FEX0lBMzJfUEFUKSB7CisJCUZJRUxEX09GRlNFVDY0KEhPU1RfSUEzMl9QQVQp OworCQlGSUVMRF9PRkZTRVQ2NChIT1NUX0lBMzJfUEFUX0hJR0gpOworCX0KKworCWlmICh2bWNz X2NvbmZpZy52bWV4aXRfY3RybCAmIFZNX0VYSVRfTE9BRF9JQTMyX0VGRVIpIHsKKwkJRklFTERf T0ZGU0VUNjQoSE9TVF9JQTMyX0VGRVIpOworCQlGSUVMRF9PRkZTRVQ2NChIT1NUX0lBMzJfRUZF Ul9ISUdIKTsKKwl9CisKKwlpZiAodm1jc19jb25maWcudm1leGl0X2N0cmwgJiBWTV9FWElUX0xP QURfSUEzMl9QRVJGX0dMT0JBTF9DVFJMKSB7CisJCUZJRUxEX09GRlNFVDY0KEhPU1RfSUEzMl9Q RVJGX0dMT0JBTF9DVFJMKTsKKwkJRklFTERfT0ZGU0VUNjQoSE9TVF9JQTMyX1BFUkZfR0xPQkFM X0NUUkxfSElHSCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX2ZpZWxkMzIo dm9pZCkKK3sKKyNkZWZpbmUgRklFTERfT0ZGU0VUMzIoZmllbGQpIFwKKwlWTUNTSU5GT19GSUVM RChmaWVsZCwgdm1jc19yZWFkMzIoZmllbGQpKQorCisJRklFTERfT0ZGU0VUMzIoRVhDRVBUSU9O X0JJVE1BUCk7CisJRklFTERfT0ZGU0VUMzIoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BU0spOwor CUZJRUxEX09GRlNFVDMyKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCk7CisJRklFTERfT0ZG U0VUMzIoQ1IzX1RBUkdFVF9DT1VOVCk7CisJRklFTERfT0ZGU0VUMzIoVk1fRVhJVF9NU1JfU1RP UkVfQ09VTlQpOworCUZJRUxEX09GRlNFVDMyKFZNX0VYSVRfTVNSX0xPQURfQ09VTlQpOworCUZJ RUxEX09GRlNFVDMyKFZNX0VOVFJZX01TUl9MT0FEX0NPVU5UKTsKKwlGSUVMRF9PRkZTRVQzMihW TV9FTlRSWV9JTlRSX0lORk9fRklFTEQpOworCUZJRUxEX09GRlNFVDMyKFZNX0VOVFJZX0VYQ0VQ VElPTl9FUlJPUl9DT0RFKTsKKwlGSUVMRF9PRkZTRVQzMihWTV9FTlRSWV9JTlNUUlVDVElPTl9M RU4pOworCUZJRUxEX09GRlNFVDMyKFZNX0lOU1RSVUNUSU9OX0VSUk9SKTsKKwlGSUVMRF9PRkZT RVQzMihWTV9FWElUX1JFQVNPTik7CisJRklFTERfT0ZGU0VUMzIoVk1fRVhJVF9JTlRSX0lORk8p OworCUZJRUxEX09GRlNFVDMyKFZNX0VYSVRfSU5UUl9FUlJPUl9DT0RFKTsKKwlGSUVMRF9PRkZT RVQzMihJRFRfVkVDVE9SSU5HX0lORk9fRklFTEQpOworCUZJRUxEX09GRlNFVDMyKElEVF9WRUNU T1JJTkdfRVJST1JfQ09ERSk7CisJRklFTERfT0ZGU0VUMzIoVk1fRVhJVF9JTlNUUlVDVElPTl9M RU4pOworCUZJRUxEX09GRlNFVDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTsKKwlGSUVMRF9PRkZT RVQzMihHVUVTVF9FU19MSU1JVCk7CisJRklFTERfT0ZGU0VUMzIoR1VFU1RfQ1NfTElNSVQpOwor CUZJRUxEX09GRlNFVDMyKEdVRVNUX1NTX0xJTUlUKTsKKwlGSUVMRF9PRkZTRVQzMihHVUVTVF9E U19MSU1JVCk7CisJRklFTERfT0ZGU0VUMzIoR1VFU1RfRlNfTElNSVQpOworCUZJRUxEX09GRlNF VDMyKEdVRVNUX0dTX0xJTUlUKTsKKwlGSUVMRF9PRkZTRVQzMihHVUVTVF9MRFRSX0xJTUlUKTsK KwlGSUVMRF9PRkZTRVQzMihHVUVTVF9UUl9MSU1JVCk7CisJRklFTERfT0ZGU0VUMzIoR1VFU1Rf R0RUUl9MSU1JVCk7CisJRklFTERfT0ZGU0VUMzIoR1VFU1RfSURUUl9MSU1JVCk7CisJRklFTERf T0ZGU0VUMzIoR1VFU1RfRVNfQVJfQllURVMpOworCUZJRUxEX09GRlNFVDMyKEdVRVNUX0NTX0FS X0JZVEVTKTsKKwlGSUVMRF9PRkZTRVQzMihHVUVTVF9TU19BUl9CWVRFUyk7CisJRklFTERfT0ZG U0VUMzIoR1VFU1RfRFNfQVJfQllURVMpOworCUZJRUxEX09GRlNFVDMyKEdVRVNUX0ZTX0FSX0JZ VEVTKTsKKwlGSUVMRF9PRkZTRVQzMihHVUVTVF9HU19BUl9CWVRFUyk7CisJRklFTERfT0ZGU0VU MzIoR1VFU1RfTERUUl9BUl9CWVRFUyk7CisJRklFTERfT0ZGU0VUMzIoR1VFU1RfVFJfQVJfQllU RVMpOworCUZJRUxEX09GRlNFVDMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyk7CisJRklF TERfT0ZGU0VUMzIoR1VFU1RfQUNUSVZJVFlfU1RBVEUpOworCUZJRUxEX09GRlNFVDMyKEdVRVNU X1NZU0VOVEVSX0NTKTsKKwlGSUVMRF9PRkZTRVQzMihIT1NUX0lBMzJfU1lTRU5URVJfQ1MpOwor CisJaWYgKGNwdV9oYXNfdm14X3Rwcl9zaGFkb3coKSkgeworCQlGSUVMRF9PRkZTRVQzMihUUFJf VEhSRVNIT0xEKTsKKwl9CisJaWYgKGNwdV9oYXNfc2Vjb25kYXJ5X2V4ZWNfY3RybHMoKSkgewor CQlpZiAoY3B1X2hhc192bXhfcGxlKCkpIHsKKwkJCUZJRUxEX09GRlNFVDMyKFBMRV9HQVApOwor CQkJRklFTERfT0ZGU0VUMzIoUExFX1dJTkRPVyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBhcHBlbmRfZmllbGQodm9pZCkKK3sKKyNkZWZpbmUgRklFTERfT0ZGU0VUKGZpZWxk KSBcCisJVk1DU0lORk9fRklFTEQoZmllbGQsIHZtY3NfcmVhZGwoZmllbGQpKQorCisJRklFTERf T0ZGU0VUKENSMF9HVUVTVF9IT1NUX01BU0spOworCUZJRUxEX09GRlNFVChDUjRfR1VFU1RfSE9T VF9NQVNLKTsKKwlGSUVMRF9PRkZTRVQoQ1IwX1JFQURfU0hBRE9XKTsKKwlGSUVMRF9PRkZTRVQo Q1I0X1JFQURfU0hBRE9XKTsKKwlGSUVMRF9PRkZTRVQoQ1IzX1RBUkdFVF9WQUxVRTApOworCUZJ RUxEX09GRlNFVChDUjNfVEFSR0VUX1ZBTFVFMSk7CisJRklFTERfT0ZGU0VUKENSM19UQVJHRVRf VkFMVUUyKTsKKwlGSUVMRF9PRkZTRVQoQ1IzX1RBUkdFVF9WQUxVRTMpOworCUZJRUxEX09GRlNF VChFWElUX1FVQUxJRklDQVRJT04pOworCUZJRUxEX09GRlNFVChHVUVTVF9MSU5FQVJfQUREUkVT Uyk7CisJRklFTERfT0ZGU0VUKEdVRVNUX0NSMCk7CisJRklFTERfT0ZGU0VUKEdVRVNUX0NSMyk7 CisJRklFTERfT0ZGU0VUKEdVRVNUX0NSNCk7CisJRklFTERfT0ZGU0VUKEdVRVNUX0VTX0JBU0Up OworCUZJRUxEX09GRlNFVChHVUVTVF9DU19CQVNFKTsKKwlGSUVMRF9PRkZTRVQoR1VFU1RfU1Nf QkFTRSk7CisJRklFTERfT0ZGU0VUKEdVRVNUX0RTX0JBU0UpOworCUZJRUxEX09GRlNFVChHVUVT VF9GU19CQVNFKTsKKwlGSUVMRF9PRkZTRVQoR1VFU1RfR1NfQkFTRSk7CisJRklFTERfT0ZGU0VU KEdVRVNUX0xEVFJfQkFTRSk7CisJRklFTERfT0ZGU0VUKEdVRVNUX1RSX0JBU0UpOworCUZJRUxE X09GRlNFVChHVUVTVF9HRFRSX0JBU0UpOworCUZJRUxEX09GRlNFVChHVUVTVF9JRFRSX0JBU0Up OworCUZJRUxEX09GRlNFVChHVUVTVF9EUjcpOworCUZJRUxEX09GRlNFVChHVUVTVF9SU1ApOwor CUZJRUxEX09GRlNFVChHVUVTVF9SSVApOworCUZJRUxEX09GRlNFVChHVUVTVF9SRkxBR1MpOwor CUZJRUxEX09GRlNFVChHVUVTVF9QRU5ESU5HX0RCR19FWENFUFRJT05TKTsKKwlGSUVMRF9PRkZT RVQoR1VFU1RfU1lTRU5URVJfRVNQKTsKKwlGSUVMRF9PRkZTRVQoR1VFU1RfU1lTRU5URVJfRUlQ KTsKKwlGSUVMRF9PRkZTRVQoSE9TVF9DUjApOworCUZJRUxEX09GRlNFVChIT1NUX0NSMyk7CisJ RklFTERfT0ZGU0VUKEhPU1RfQ1I0KTsKKwlGSUVMRF9PRkZTRVQoSE9TVF9GU19CQVNFKTsKKwlG SUVMRF9PRkZTRVQoSE9TVF9HU19CQVNFKTsKKwlGSUVMRF9PRkZTRVQoSE9TVF9UUl9CQVNFKTsK KwlGSUVMRF9PRkZTRVQoSE9TVF9HRFRSX0JBU0UpOworCUZJRUxEX09GRlNFVChIT1NUX0lEVFJf QkFTRSk7CisJRklFTERfT0ZGU0VUKEhPU1RfSUEzMl9TWVNFTlRFUl9FU1ApOworCUZJRUxEX09G RlNFVChIT1NUX0lBMzJfU1lTRU5URVJfRUlQKTsKKwlGSUVMRF9PRkZTRVQoSE9TVF9SU1ApOwor CUZJRUxEX09GRlNFVChIT1NUX1JJUCk7Cit9CisKKy8qCisgKiBUaGUgZm9ybWF0IG9mIFZNQ1NJ TkZPIGlzIGdpdmVuIGJlbG93OgorICogICArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKKyAqICAgfCBCeXRlIG9mZnNldCB8IENvbnRlbnRzICAgICAgICAgICAgICAg ICB8CisgKiAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICog ICB8IDAgICAgICAgICAgIHwgVk1DUyByZXZpc2lvbiBpZGVudGlmaWVyIHwKKyAqICAgKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgIHwgNCAgICAgICAgICAg fCA8ZmllbGQ+PGVuY29kZWQgb2Zmc2V0PiAgfAorICogICArLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgfCAxNiAgICAgICAgICB8IDxmaWVsZD48ZW5jb2Rl ZCBvZmZzZXQ+ICB8CisgKiAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKworICogICAuLi4uLi4KKyAqCisgKiBUaGUgZmlyc3QgMzIgYml0cyBvZiBWTUNTSU5GTyBj b250YWlucyB0aGUgVk1DUyByZXZpc2lvbgorICogaWRlbnRpZmllci4KKyAqIFRoZSByZW1haW5k ZXIgb2YgVk1DU0lORk8gaXMgdXNlZCBmb3IgPGZpZWxkPjxlbmNvZGVkIG9mZnNldD4KKyAqIHNl dHMuIEVhY2ggc2V0IHRha2VzIDEyIGJ5dGVzOiBmaWVsZCBvY2N1cHlzIDQgYnl0ZXMKKyAqIGFu ZCBpdHMgY29ycmVzcG9uZGluZyBlbmNvZGVkIG9mZnNldCBvY2N1cHlzIDggYnl0ZXMuCisgKgor ICogRW5jb2RlZCBvZmZzZXRzIGFyZSByYXcgdmFsdWVzIHJlYWQgYnkgdm1jc19yZWFkezE2LCA2 NCwgMzIsIGx9LAorICogYW5kIHRoZXkgYXJlIGFsbCB1bnNpZ25lZCBleHRlbmRlZCB0byA4IGJ5 dGVzIGZvciBlYWNoCisgKiA8ZmllbGQ+PGVuY29kZWQgb2Zmc2V0PiBzZXQgaGFzIHRoZSBzYW1l IHNpemUuCisgKiBXZSBkbyBub3QgZGVjb2RlIG9mZnNldHMgaGVyZS4gVGhlIGRlY29kaW5nIHdv cmsgaXMgZGVsYXllZAorICogaW4gdXNlcnNwYWNlIHRvb2xzLgorICoKKyAqIE5vdGUsIG9mZnNl dHMgb2YgZmllbGRzIGJlbG93IHdpbGwgbm90IGJlIGZpbGxlZCBpbnRvCisgKiBWTUNTSU5GTzoK KyAqIDEuIGZpZWxkcyBkZWZpbmVkIGluIEludGVsIHNwZWNpZmljYXRpb24gKEludGVswq4gNjQg YW5kCisgKiAgICBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcuKAmXMgTWFu dWFsLCBWb2x1bWUKKyAqICAgIDNDKSBidXQgbm90IGRlZmluZWQgaW4gKnZtY3NfZmllbGQqLgor ICogMi4gZmllbGRzIGRvbid0IGV4aXN0IGJlY2F1c2UgdGhlaXIgY29ycmVzcG9uZGluZworICog ICAgY29udHJvbCBiaXRzIGFyZSBub3Qgc2V0LgorICovCitzdGF0aWMgaW50IF9faW5pdCBhbGxv Y192bWNzaW5mb19pbml0KHZvaWQpCit7CisvKgorICogVGhlIGZpcnN0IDggYnl0ZXMgaW4gdm1j cyByZWdpb24gYXJlIGZvcgorICogICBWTUNTIHJldmlzaW9uIGlkZW50aWZpZXIKKyAqICAgVk1Y LWFib3J0IGluZGljYXRvcgorICovCisjZGVmaW5lIEZJRUxEX1NUQVJUICg4KQorCisJaW50IHIs IG9mZnNldDsKKwlzdHJ1Y3Qgdm1jcyAqdm1jczsKKwlpbnQgY3B1OworCisJaWYgKHZtY3NpbmZv X3NpemUpCisJCXJldHVybiAwOworCisJdm1jcyA9IGFsbG9jX3ZtY3MoKTsKKwlpZiAoIXZtY3Mp IHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJciA9IGhhcmR3YXJlX2VuYWJsZV9hbGwoKTsK KwlpZiAocikKKwkJZ290byBvdXRfZXJyOworCisJLyoKKwkgKiBXcml0ZSBlbmNvZGVkIG9mZnNl dHMgaW50byBWTUNTIGRhdGEgZm9yIGxhdGVyIHZtY3NfcmVhZC4KKwkgKi8KKwlmb3IgKG9mZnNl dCA9IEZJRUxEX1NUQVJUOyBvZmZzZXQgPCB2bWNzX2NvbmZpZy5zaXplOworCSAgICAgb2Zmc2V0 ICs9IHNpemVvZih1MTYpKQorCQkqKHUxNiAqKSgoY2hhciAqKXZtY3MgKyBvZmZzZXQpID0gRU5D T0RJTkdfT0ZGU0VUKG9mZnNldCk7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJdm1jc19jbGVhcih2 bWNzKTsKKwlwZXJfY3B1KGN1cnJlbnRfdm1jcywgY3B1KSA9IHZtY3M7CisJdm1jc19sb2FkKHZt Y3MpOworCisJVk1DU0lORk9fUkVWSVNJT05fSUQodm1jcy0+cmV2aXNpb25faWQpOworCWFwcGVu ZF9jb250cm9sX2ZpZWxkKCk7CisKKwl2bWNzX3dyaXRlX2NvbnRyb2xfZmllbGQoUElOX0JBU0VE X1ZNX0VYRUNfQ09OVFJPTCwKKwkJCQkgdm1jc19jb25maWcucGluX2Jhc2VkX2V4ZWNfY3RybCk7 CisJdm1jc193cml0ZV9jb250cm9sX2ZpZWxkKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsCisJ CQkJIHZtY3NfY29uZmlnLmNwdV9iYXNlZF9leGVjX2N0cmwpOworCWlmIChjcHVfaGFzX3NlY29u ZGFyeV9leGVjX2N0cmxzKCkpIHsKKwkJdm1jc193cml0ZV9jb250cm9sX2ZpZWxkKFNFQ09OREFS WV9WTV9FWEVDX0NPTlRST0wsCisJCQkJCSB2bWNzX2NvbmZpZy5jcHVfYmFzZWRfMm5kX2V4ZWNf Y3RybCk7CisJfQorCXZtY3Nfd3JpdGVfY29udHJvbF9maWVsZChWTV9FWElUX0NPTlRST0xTLCB2 bWNzX2NvbmZpZy52bWV4aXRfY3RybCk7CisJdm1jc193cml0ZV9jb250cm9sX2ZpZWxkKFZNX0VO VFJZX0NPTlRST0xTLCB2bWNzX2NvbmZpZy52bWVudHJ5X2N0cmwpOworCisJYXBwZW5kX2ZpZWxk MTYoKTsKKwlhcHBlbmRfZmllbGQ2NCgpOworCWFwcGVuZF9maWVsZDMyKCk7CisJYXBwZW5kX2Zp ZWxkKCk7CisKKwl1cGRhdGVfdm1jc2luZm9fbm90ZSgpOworCisJdm1jc19jbGVhcih2bWNzKTsK KwlwdXRfY3B1KCk7CisKK291dF9lcnI6CisJZnJlZV92bWNzKHZtY3MpOworCXJldHVybiByOwor fQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWxsb2Nfdm1jc2luZm9fZXhpdCh2b2lkKQoreworCWhh cmR3YXJlX2Rpc2FibGVfYWxsKCk7Cit9CisKK21vZHVsZV9pbml0KGFsbG9jX3ZtY3NpbmZvX2lu aXQpOworbW9kdWxlX2V4aXQoYWxsb2Nfdm1jc2luZm9fZXhpdCk7Ci0tIAoxLjcuMQoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Ka2V4ZWMgbWFpbGluZyBs aXN0CmtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9rZXhlYwo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhangyanfei Subject: [PATCH v2 3/5] KVM-INTEL: Add new module vmcsinfo-intel to fill VMCSINFO Date: Wed, 16 May 2012 15:55:12 +0800 Message-ID: <4FB35D60.6050009@cn.fujitsu.com> References: <4FB35C48.30708@cn.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: dzickus-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, luto-3s7WtUTddSA@public.gmane.org, kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Joerg Roedel , kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, paul.gortmaker-CWA4WttNNZF54TAoqtyWWQ@public.gmane.org, ludwig.nussel-l3A5Bk7waGM@public.gmane.org, ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org, Greg KH To: Avi Kivity , mtosatti-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org Return-path: In-Reply-To: <4FB35C48.30708-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kexec-bounces-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org Errors-To: kexec-bounces+glkk-kexec=m.gmane.org-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org List-Id: kvm.vger.kernel.org VGhpcyBwYXRjaCBpbXBsZW1lbnRzIGEgbmV3IG1vZHVsZSBuYW1lZCB2bWNzaW5mby1pbnRlbC4g VGhlCm1vZHVsZSBmaWxscyBWTUNTSU5GTyB3aXRoIHRoZSBWTUNTIHJldmlzaW9uIGlkZW50aWZp ZXIsCmFuZCBlbmNvZGVkIG9mZnNldHMgb2YgVk1DUyBmaWVsZHMuCgpOb3RlLCBvZmZzZXRzIG9m IGZpZWxkcyBiZWxvdyB3aWxsIG5vdCBiZSBmaWxsZWQgaW50byBWTUNTSU5GTzoKMS4gZmllbGRz IGRlZmluZWQgaW4gSW50ZWwgc3BlY2lmaWNhdGlvbiAoSW50ZWzCriA2NCBhbmQKICAgSUEtMzIg QXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBEZXZlbG9wZXLigJlzIE1hbnVhbCwgVm9sdW1lCiAgIDND KSBidXQgbm90IGRlZmluZWQgaW4gKnZtY3NfZmllbGQqLgoyLiBmaWVsZHMgZG9uJ3QgZXhpc3Qg YmVjYXVzZSB0aGVpciBjb3JyZXNwb25kaW5nIGNvbnRyb2wgYml0cwogICBhcmUgbm90IHNldC4K ClNpZ25lZC1vZmYtYnk6IHpoYW5neWFuZmVpIDx6aGFuZ3lhbmZlaUBjbi5mdWppdHN1LmNvbT4K LS0tCiBhcmNoL3g4Ni9rdm0vS2NvbmZpZyAgICB8ICAgMTEgKysKIGFyY2gveDg2L2t2bS9NYWtl ZmlsZSAgIHwgICAgMyArCiBhcmNoL3g4Ni9rdm0vdm1jc2luZm8uYyB8ICA0MDIgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg NDE2IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJj aC94ODYva3ZtL3ZtY3NpbmZvLmMKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZyBi L2FyY2gveDg2L2t2bS9LY29uZmlnCmluZGV4IDFhN2ZlODYuLjg3ZGY5ZDQgMTAwNjQ0Ci0tLSBh L2FyY2gveDg2L2t2bS9LY29uZmlnCisrKyBiL2FyY2gveDg2L2t2bS9LY29uZmlnCkBAIC02Miw2 ICs2MiwxNyBAQCBjb25maWcgS1ZNX0lOVEVMCiAJICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1 bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRl bC4KIAorY29uZmlnIFZNQ1NJTkZPX0lOVEVMCisJdHJpc3RhdGUgIkV4cG9ydCBWTUNTSU5GTyBm b3IgSW50ZWwgcHJvY2Vzc29ycyIKKwlkZXBlbmRzIG9uIEtWTV9JTlRFTAorCS0tLWhlbHAtLS0K KwkgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGV4cG9ydGluZyBWTUNTSU5GTyBvbiBJbnRlbCBwcm9j ZXNzb3JzIGVxdWlwcGVkCisJICB3aXRoIHRoZSBWVCBleHRlbnNpb25zLiBUaGUgVk1DU0lORk8g Y29udGFpbnMgYSBWTUNTIHJldmlzaW9uCisJICBpZGVudGlmaWVyIGFuZCBvZmZzZXRzIG9mIFZN Q1MgZmllbGRzLgorCisJICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhl cmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHZtY3NpbmZvLWludGVsLgorCiBjb25m aWcgS1ZNX0FNRAogCXRyaXN0YXRlICJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnQiCiAJ ZGVwZW5kcyBvbiBLVk0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZSBiL2FyY2gv eDg2L2t2bS9NYWtlZmlsZQppbmRleCA0ZjU3OWU4Li4xMmExZWY2IDEwMDY0NAotLS0gYS9hcmNo L3g4Ni9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlCkBAIC00LDYgKzQs NyBAQCBjY2ZsYWdzLXkgKz0gLUl2aXJ0L2t2bSAtSWFyY2gveDg2L2t2bQogQ0ZMQUdTX3g4Ni5v IDo9IC1JLgogQ0ZMQUdTX3N2bS5vIDo9IC1JLgogQ0ZMQUdTX3ZteC5vIDo9IC1JLgorQ0ZMQUdT X3ZtY3NpbmZvLm8gOj0gLUkuCiAKIGt2bS15CQkJKz0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmly dC9rdm0vLCBrdm1fbWFpbi5vIGlvYXBpYy5vIFwKIAkJCQljb2FsZXNjZWRfbW1pby5vIGlycV9j b21tLm8gZXZlbnRmZC5vIFwKQEAgLTE1LDcgKzE2LDkgQEAga3ZtLXkJCQkrPSB4ODYubyBtbXUu byBlbXVsYXRlLm8gaTgyNTkubyBpcnEubyBsYXBpYy5vIFwKIAkJCSAgIGk4MjU0Lm8gdGltZXIu byBjcHVpZC5vIHBtdS5vCiBrdm0taW50ZWwteQkJKz0gdm14Lm8KIGt2bS1hbWQteQkJKz0gc3Zt Lm8KK3ZtY3NpbmZvLWludGVsLXkJKz0gdm1jc2luZm8ubwogCiBvYmotJChDT05GSUdfS1ZNKQkr PSBrdm0ubwogb2JqLSQoQ09ORklHX0tWTV9JTlRFTCkJKz0ga3ZtLWludGVsLm8KIG9iai0kKENP TkZJR19LVk1fQU1EKQkrPSBrdm0tYW1kLm8KK29iai0kKENPTkZJR19WTUNTSU5GT19JTlRFTCkJ Kz0gdm1jc2luZm8taW50ZWwubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZtY3NpbmZvLmMg Yi9hcmNoL3g4Ni9rdm0vdm1jc2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4yODhjNDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva3ZtL3ZtY3NpbmZvLmMK QEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiBLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIGRy aXZlciBmb3IgTGludXgKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIG1hY2hpbmVzIHdpdGgg SW50ZWwgVlQteCBleHRlbnNpb25zIHRvIGV4cG9ydAorICogb2Zmc2V0cyBvZiBWTUNTIGZpZWxk cyBmb3IgZ3Vlc3QgZGVidWdnaW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBGdWppdHN1 LCBJbmMuCisgKgorICogQXV0aG9yczoKKyAqICAgWmhhbmcgWWFuZmVpIDx6aGFuZ3lhbmZlaUBj bi5mdWppdHN1LmNvbT4KKyAqCisgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIuICBTZWUKKyAqIHRoZSBDT1BZSU5HIGZpbGUg aW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxs aW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC90 Ym9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisKKyNpbmNsdWRlIDxhc20vdm14 Lmg+CisjaW5jbHVkZSA8YXNtL3NwZWNpYWxfaW5zbnMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vz c29yLWZsYWdzLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9tc3ItaW5k ZXguaD4KKyNpbmNsdWRlIDxhc20vdm1jc2luZm8uaD4KKworTU9EVUxFX0FVVEhPUigiRnVqaXRz dSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9j cHVfaWQgdm1jc2luZm9fY3B1X2lkW10gPSB7CisJWDg2X0ZFQVRVUkVfTUFUQ0goWDg2X0ZFQVRV UkVfVk1YKSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoeDg2Y3B1LCB2bWNzaW5mb19j cHVfaWQpOworCisvKgorICogRm9yIGNhY3VsYXRpbmcgb2Zmc2V0cyBvZiBmaWVsZHMgaW4gVk1D UyBkYXRhLCB3ZSBpbmRleCBldmVyeSAxNi1iaXQKKyAqIGZpZWxkIGJ5IHRoaXMga2luZCBvZiBm b3JtYXQ6CisgKiAgICAgICAgIHwgLS0tLS0tLS0tIDE2IGJpdHMgLS0tLS0tLS0tLSB8CisgKiAg ICAgICAgICstLS0tLS0tLS0tLS0tKy0rLS0tLS0tLS0tLS0tKy0rCisgKiAgICAgICAgIHwgaGln aCA3IGJpdHMgfDF8IGxvdyA3IGJpdHMgfDB8CisgKiAgICAgICAgICstLS0tLS0tLS0tLS0tKy0r LS0tLS0tLS0tLS0tKy0rCisgKiBJbiBoaWdoIGJ5dGUsIHRoZSBsb3dlc3QgYml0IG11c3QgYmUg MTsgSW4gbG93IGJ5dGUsIHRoZSBsb3dlc3QgYml0CisgKiBtdXN0IGJlIDAuIFRoZSB0d28gYml0 cyBhcmUgc2V0IGxpa2UgdGhpcyBpbiBjYXNlIGluZGV4ZXMgaW4gVk1DUworICogZGF0YSBhcmUg cmVhZCBhcyBiaWcgZW5kaWFuIG1vZGUuCisgKiBUaGUgcmVtYWluaW5nIDE0IGJpdHMgb2YgdGhl IGluZGV4IGluZGljYXRlIHRoZSByZWFsIG9mZnNldCBvZiB0aGUKKyAqIGZpZWxkLiBCZWNhdXNl IHRoZSBzaXplIG9mIGEgVk1DUyByZWdpb24gaXMgYXQgbW9zdCA0IEtCeXRlcywgc28KKyAqIDE0 IGJpdHMgYXJlIGVub3VnaCB0byBpbmRleCB0aGUgd2hvbGUgVk1DUyByZWdpb24uCisgKgorICog RU5DT0RJTkdfT0ZGU0VUOiBlbmNvZGUgdGhlIG9mZnNldCBpbnRvIHRoZSBpbmRleCBvZiB0aGlz IGtpbmQuCisgKi8KKyNkZWZpbmUgT0ZGU0VUX0hJR0hfU0hJRlQgKDcpCisjZGVmaW5lIE9GRlNF VF9MT1dfTUFTSyAgICgoMSA8PCBPRkZTRVRfSElHSF9TSElGVCkgLSAxKSAvKiAweDdmICovCisj ZGVmaW5lIE9GRlNFVF9ISUdIX01BU0sgIChPRkZTRVRfTE9XX01BU0sgPDwgT0ZGU0VUX0hJR0hf U0hJRlQpIC8qIDB4M2Y4MCAqLworI2RlZmluZSBFTkNPRElOR19PRkZTRVQob2Zmc2V0KSBcCisJ KCgoKG9mZnNldCkgJiBPRkZTRVRfTE9XX01BU0spIDw8IDEpICsgXAorCSgoKChvZmZzZXQpICYg T0ZGU0VUX0hJR0hfTUFTSykgPDwgMikgfCAweDEwMCkpCisKKy8qCisgKiBXZSBzZXBhcmF0ZSB0 aGVzZSBmaXZlIGNvbnRyb2wgZmllbGRzIGZyb20gb3RoZXIgZmllbGRzCisgKiBiZWNhdXNlIHNv bWUgZmllbGRzIG9ubHkgZXhpc3Qgb24gcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQKKyAqIHRoZSAx LXNldHRpbmcgb2YgY29udHJvbCBiaXRzIGluIHRoZSBmaXZlIGNvbnRyb2wgZmllbGRzLgorICov CitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX2NvbnRyb2xfZmllbGQodm9pZCkKK3sKKyNkZWZp bmUgQ09OVFJPTF9GSUVMRF9PRkZTRVQoZmllbGQpIFwKKwlWTUNTSU5GT19GSUVMRChmaWVsZCwg dm1jc19yZWFkMzIoZmllbGQpKQorCisJQ09OVFJPTF9GSUVMRF9PRkZTRVQoUElOX0JBU0VEX1ZN X0VYRUNfQ09OVFJPTCk7CisJQ09OVFJPTF9GSUVMRF9PRkZTRVQoQ1BVX0JBU0VEX1ZNX0VYRUNf Q09OVFJPTCk7CisJaWYgKGNwdV9oYXNfc2Vjb25kYXJ5X2V4ZWNfY3RybHMoKSkgeworCQlDT05U Uk9MX0ZJRUxEX09GRlNFVChTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MKTsKKwl9CisJQ09OVFJP TF9GSUVMRF9PRkZTRVQoVk1fRVhJVF9DT05UUk9MUyk7CisJQ09OVFJPTF9GSUVMRF9PRkZTRVQo Vk1fRU5UUllfQ09OVFJPTFMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX2ZpZWxk MTYodm9pZCkKK3sKKyNkZWZpbmUgRklFTERfT0ZGU0VUMTYoZmllbGQpIFwKKwlWTUNTSU5GT19G SUVMRChmaWVsZCwgdm1jc19yZWFkMTYoZmllbGQpKQorCisJRklFTERfT0ZGU0VUMTYoR1VFU1Rf RVNfU0VMRUNUT1IpOworCUZJRUxEX09GRlNFVDE2KEdVRVNUX0NTX1NFTEVDVE9SKTsKKwlGSUVM RF9PRkZTRVQxNihHVUVTVF9TU19TRUxFQ1RPUik7CisJRklFTERfT0ZGU0VUMTYoR1VFU1RfRFNf U0VMRUNUT1IpOworCUZJRUxEX09GRlNFVDE2KEdVRVNUX0ZTX1NFTEVDVE9SKTsKKwlGSUVMRF9P RkZTRVQxNihHVUVTVF9HU19TRUxFQ1RPUik7CisJRklFTERfT0ZGU0VUMTYoR1VFU1RfTERUUl9T RUxFQ1RPUik7CisJRklFTERfT0ZGU0VUMTYoR1VFU1RfVFJfU0VMRUNUT1IpOworCUZJRUxEX09G RlNFVDE2KEhPU1RfRVNfU0VMRUNUT1IpOworCUZJRUxEX09GRlNFVDE2KEhPU1RfQ1NfU0VMRUNU T1IpOworCUZJRUxEX09GRlNFVDE2KEhPU1RfU1NfU0VMRUNUT1IpOworCUZJRUxEX09GRlNFVDE2 KEhPU1RfRFNfU0VMRUNUT1IpOworCUZJRUxEX09GRlNFVDE2KEhPU1RfRlNfU0VMRUNUT1IpOwor CUZJRUxEX09GRlNFVDE2KEhPU1RfR1NfU0VMRUNUT1IpOworCUZJRUxEX09GRlNFVDE2KEhPU1Rf VFJfU0VMRUNUT1IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX2ZpZWxkNjQodm9p ZCkKK3sKKyNkZWZpbmUgRklFTERfT0ZGU0VUNjQoZmllbGQpIFwKKwlWTUNTSU5GT19GSUVMRChm aWVsZCwgdm1jc19yZWFkNjQoZmllbGQpKQorCisJRklFTERfT0ZGU0VUNjQoSU9fQklUTUFQX0Ep OworCUZJRUxEX09GRlNFVDY0KElPX0JJVE1BUF9BX0hJR0gpOworCUZJRUxEX09GRlNFVDY0KElP X0JJVE1BUF9CKTsKKwlGSUVMRF9PRkZTRVQ2NChJT19CSVRNQVBfQl9ISUdIKTsKKwlGSUVMRF9P RkZTRVQ2NChWTV9FWElUX01TUl9TVE9SRV9BRERSKTsKKwlGSUVMRF9PRkZTRVQ2NChWTV9FWElU X01TUl9TVE9SRV9BRERSX0hJR0gpOworCUZJRUxEX09GRlNFVDY0KFZNX0VYSVRfTVNSX0xPQURf QUREUik7CisJRklFTERfT0ZGU0VUNjQoVk1fRVhJVF9NU1JfTE9BRF9BRERSX0hJR0gpOworCUZJ RUxEX09GRlNFVDY0KFZNX0VOVFJZX01TUl9MT0FEX0FERFIpOworCUZJRUxEX09GRlNFVDY0KFZN X0VOVFJZX01TUl9MT0FEX0FERFJfSElHSCk7CisJRklFTERfT0ZGU0VUNjQoVFNDX09GRlNFVCk7 CisJRklFTERfT0ZGU0VUNjQoVFNDX09GRlNFVF9ISUdIKTsKKwlGSUVMRF9PRkZTRVQ2NChWTUNT X0xJTktfUE9JTlRFUik7CisJRklFTERfT0ZGU0VUNjQoVk1DU19MSU5LX1BPSU5URVJfSElHSCk7 CisJRklFTERfT0ZGU0VUNjQoR1VFU1RfSUEzMl9ERUJVR0NUTCk7CisJRklFTERfT0ZGU0VUNjQo R1VFU1RfSUEzMl9ERUJVR0NUTF9ISUdIKTsKKworCWlmIChjcHVfaGFzX3ZteF9tc3JfYml0bWFw KCkpIHsKKwkJRklFTERfT0ZGU0VUNjQoTVNSX0JJVE1BUCk7CisJCUZJRUxEX09GRlNFVDY0KE1T Ul9CSVRNQVBfSElHSCk7CisJfQorCisJaWYgKGNwdV9oYXNfdm14X3Rwcl9zaGFkb3coKSkgewor CQlGSUVMRF9PRkZTRVQ2NChWSVJUVUFMX0FQSUNfUEFHRV9BRERSKTsKKwkJRklFTERfT0ZGU0VU NjQoVklSVFVBTF9BUElDX1BBR0VfQUREUl9ISUdIKTsKKwl9CisKKwlpZiAoY3B1X2hhc19zZWNv bmRhcnlfZXhlY19jdHJscygpKSB7CisJCWlmICh2bWNzX2NvbmZpZy5jcHVfYmFzZWRfMm5kX2V4 ZWNfY3RybCAmCisJCSAgICBTRUNPTkRBUllfRVhFQ19WSVJUVUFMSVpFX0FQSUNfQUNDRVNTRVMp IHsKKwkJCUZJRUxEX09GRlNFVDY0KEFQSUNfQUNDRVNTX0FERFIpOworCQkJRklFTERfT0ZGU0VU NjQoQVBJQ19BQ0NFU1NfQUREUl9ISUdIKTsKKwkJfQorCQlpZiAoY3B1X2hhc192bXhfZXB0KCkp IHsKKwkJCUZJRUxEX09GRlNFVDY0KEVQVF9QT0lOVEVSKTsKKwkJCUZJRUxEX09GRlNFVDY0KEVQ VF9QT0lOVEVSX0hJR0gpOworCQkJRklFTERfT0ZGU0VUNjQoR1VFU1RfUEhZU0lDQUxfQUREUkVT Uyk7CisJCQlGSUVMRF9PRkZTRVQ2NChHVUVTVF9QSFlTSUNBTF9BRERSRVNTX0hJR0gpOworCQkJ RklFTERfT0ZGU0VUNjQoR1VFU1RfUERQVFIwKTsKKwkJCUZJRUxEX09GRlNFVDY0KEdVRVNUX1BE UFRSMF9ISUdIKTsKKwkJCUZJRUxEX09GRlNFVDY0KEdVRVNUX1BEUFRSMSk7CisJCQlGSUVMRF9P RkZTRVQ2NChHVUVTVF9QRFBUUjFfSElHSCk7CisJCQlGSUVMRF9PRkZTRVQ2NChHVUVTVF9QRFBU UjIpOworCQkJRklFTERfT0ZGU0VUNjQoR1VFU1RfUERQVFIyX0hJR0gpOworCQkJRklFTERfT0ZG U0VUNjQoR1VFU1RfUERQVFIzKTsKKwkJCUZJRUxEX09GRlNFVDY0KEdVRVNUX1BEUFRSM19ISUdI KTsKKwkJfQorCX0KKworCWlmICh2bWNzX2NvbmZpZy52bWV4aXRfY3RybCAmIFZNX0VYSVRfU0FW RV9JQTMyX1BBVCB8fCBcCisJICAgIHZtY3NfY29uZmlnLnZtZW50cnlfY3RybCAmIFZNX0VOVFJZ X0xPQURfSUEzMl9QQVQpIHsKKwkJRklFTERfT0ZGU0VUNjQoR1VFU1RfSUEzMl9QQVQpOworCQlG SUVMRF9PRkZTRVQ2NChHVUVTVF9JQTMyX1BBVF9ISUdIKTsKKwl9CisKKwlpZiAodm1jc19jb25m aWcudm1leGl0X2N0cmwgJiBWTV9FWElUX1NBVkVfSUEzMl9FRkVSIHx8IFwKKwkgICAgdm1jc19j b25maWcudm1lbnRyeV9jdHJsICYgVk1fRU5UUllfTE9BRF9JQTMyX0VGRVIpIHsKKwkJRklFTERf T0ZGU0VUNjQoR1VFU1RfSUEzMl9FRkVSKTsKKwkJRklFTERfT0ZGU0VUNjQoR1VFU1RfSUEzMl9F RkVSX0hJR0gpOworCX0KKworCWlmICh2bWNzX2NvbmZpZy52bWVudHJ5X2N0cmwgJiBWTV9FTlRS WV9MT0FEX0lBMzJfUEVSRl9HTE9CQUxfQ1RSTCkgeworCQlGSUVMRF9PRkZTRVQ2NChHVUVTVF9J QTMyX1BFUkZfR0xPQkFMX0NUUkwpOworCQlGSUVMRF9PRkZTRVQ2NChHVUVTVF9JQTMyX1BFUkZf R0xPQkFMX0NUUkxfSElHSCk7CisJfQorCisJaWYgKHZtY3NfY29uZmlnLnZtZXhpdF9jdHJsICYg Vk1fRVhJVF9MT0FEX0lBMzJfUEFUKSB7CisJCUZJRUxEX09GRlNFVDY0KEhPU1RfSUEzMl9QQVQp OworCQlGSUVMRF9PRkZTRVQ2NChIT1NUX0lBMzJfUEFUX0hJR0gpOworCX0KKworCWlmICh2bWNz X2NvbmZpZy52bWV4aXRfY3RybCAmIFZNX0VYSVRfTE9BRF9JQTMyX0VGRVIpIHsKKwkJRklFTERf T0ZGU0VUNjQoSE9TVF9JQTMyX0VGRVIpOworCQlGSUVMRF9PRkZTRVQ2NChIT1NUX0lBMzJfRUZF Ul9ISUdIKTsKKwl9CisKKwlpZiAodm1jc19jb25maWcudm1leGl0X2N0cmwgJiBWTV9FWElUX0xP QURfSUEzMl9QRVJGX0dMT0JBTF9DVFJMKSB7CisJCUZJRUxEX09GRlNFVDY0KEhPU1RfSUEzMl9Q RVJGX0dMT0JBTF9DVFJMKTsKKwkJRklFTERfT0ZGU0VUNjQoSE9TVF9JQTMyX1BFUkZfR0xPQkFM X0NUUkxfSElHSCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX2ZpZWxkMzIo dm9pZCkKK3sKKyNkZWZpbmUgRklFTERfT0ZGU0VUMzIoZmllbGQpIFwKKwlWTUNTSU5GT19GSUVM RChmaWVsZCwgdm1jc19yZWFkMzIoZmllbGQpKQorCisJRklFTERfT0ZGU0VUMzIoRVhDRVBUSU9O X0JJVE1BUCk7CisJRklFTERfT0ZGU0VUMzIoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BU0spOwor CUZJRUxEX09GRlNFVDMyKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCk7CisJRklFTERfT0ZG U0VUMzIoQ1IzX1RBUkdFVF9DT1VOVCk7CisJRklFTERfT0ZGU0VUMzIoVk1fRVhJVF9NU1JfU1RP UkVfQ09VTlQpOworCUZJRUxEX09GRlNFVDMyKFZNX0VYSVRfTVNSX0xPQURfQ09VTlQpOworCUZJ RUxEX09GRlNFVDMyKFZNX0VOVFJZX01TUl9MT0FEX0NPVU5UKTsKKwlGSUVMRF9PRkZTRVQzMihW TV9FTlRSWV9JTlRSX0lORk9fRklFTEQpOworCUZJRUxEX09GRlNFVDMyKFZNX0VOVFJZX0VYQ0VQ VElPTl9FUlJPUl9DT0RFKTsKKwlGSUVMRF9PRkZTRVQzMihWTV9FTlRSWV9JTlNUUlVDVElPTl9M RU4pOworCUZJRUxEX09GRlNFVDMyKFZNX0lOU1RSVUNUSU9OX0VSUk9SKTsKKwlGSUVMRF9PRkZT RVQzMihWTV9FWElUX1JFQVNPTik7CisJRklFTERfT0ZGU0VUMzIoVk1fRVhJVF9JTlRSX0lORk8p OworCUZJRUxEX09GRlNFVDMyKFZNX0VYSVRfSU5UUl9FUlJPUl9DT0RFKTsKKwlGSUVMRF9PRkZT RVQzMihJRFRfVkVDVE9SSU5HX0lORk9fRklFTEQpOworCUZJRUxEX09GRlNFVDMyKElEVF9WRUNU T1JJTkdfRVJST1JfQ09ERSk7CisJRklFTERfT0ZGU0VUMzIoVk1fRVhJVF9JTlNUUlVDVElPTl9M RU4pOworCUZJRUxEX09GRlNFVDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTsKKwlGSUVMRF9PRkZT RVQzMihHVUVTVF9FU19MSU1JVCk7CisJRklFTERfT0ZGU0VUMzIoR1VFU1RfQ1NfTElNSVQpOwor CUZJRUxEX09GRlNFVDMyKEdVRVNUX1NTX0xJTUlUKTsKKwlGSUVMRF9PRkZTRVQzMihHVUVTVF9E U19MSU1JVCk7CisJRklFTERfT0ZGU0VUMzIoR1VFU1RfRlNfTElNSVQpOworCUZJRUxEX09GRlNF VDMyKEdVRVNUX0dTX0xJTUlUKTsKKwlGSUVMRF9PRkZTRVQzMihHVUVTVF9MRFRSX0xJTUlUKTsK KwlGSUVMRF9PRkZTRVQzMihHVUVTVF9UUl9MSU1JVCk7CisJRklFTERfT0ZGU0VUMzIoR1VFU1Rf R0RUUl9MSU1JVCk7CisJRklFTERfT0ZGU0VUMzIoR1VFU1RfSURUUl9MSU1JVCk7CisJRklFTERf T0ZGU0VUMzIoR1VFU1RfRVNfQVJfQllURVMpOworCUZJRUxEX09GRlNFVDMyKEdVRVNUX0NTX0FS X0JZVEVTKTsKKwlGSUVMRF9PRkZTRVQzMihHVUVTVF9TU19BUl9CWVRFUyk7CisJRklFTERfT0ZG U0VUMzIoR1VFU1RfRFNfQVJfQllURVMpOworCUZJRUxEX09GRlNFVDMyKEdVRVNUX0ZTX0FSX0JZ VEVTKTsKKwlGSUVMRF9PRkZTRVQzMihHVUVTVF9HU19BUl9CWVRFUyk7CisJRklFTERfT0ZGU0VU MzIoR1VFU1RfTERUUl9BUl9CWVRFUyk7CisJRklFTERfT0ZGU0VUMzIoR1VFU1RfVFJfQVJfQllU RVMpOworCUZJRUxEX09GRlNFVDMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyk7CisJRklF TERfT0ZGU0VUMzIoR1VFU1RfQUNUSVZJVFlfU1RBVEUpOworCUZJRUxEX09GRlNFVDMyKEdVRVNU X1NZU0VOVEVSX0NTKTsKKwlGSUVMRF9PRkZTRVQzMihIT1NUX0lBMzJfU1lTRU5URVJfQ1MpOwor CisJaWYgKGNwdV9oYXNfdm14X3Rwcl9zaGFkb3coKSkgeworCQlGSUVMRF9PRkZTRVQzMihUUFJf VEhSRVNIT0xEKTsKKwl9CisJaWYgKGNwdV9oYXNfc2Vjb25kYXJ5X2V4ZWNfY3RybHMoKSkgewor CQlpZiAoY3B1X2hhc192bXhfcGxlKCkpIHsKKwkJCUZJRUxEX09GRlNFVDMyKFBMRV9HQVApOwor CQkJRklFTERfT0ZGU0VUMzIoUExFX1dJTkRPVyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBhcHBlbmRfZmllbGQodm9pZCkKK3sKKyNkZWZpbmUgRklFTERfT0ZGU0VUKGZpZWxk KSBcCisJVk1DU0lORk9fRklFTEQoZmllbGQsIHZtY3NfcmVhZGwoZmllbGQpKQorCisJRklFTERf T0ZGU0VUKENSMF9HVUVTVF9IT1NUX01BU0spOworCUZJRUxEX09GRlNFVChDUjRfR1VFU1RfSE9T VF9NQVNLKTsKKwlGSUVMRF9PRkZTRVQoQ1IwX1JFQURfU0hBRE9XKTsKKwlGSUVMRF9PRkZTRVQo Q1I0X1JFQURfU0hBRE9XKTsKKwlGSUVMRF9PRkZTRVQoQ1IzX1RBUkdFVF9WQUxVRTApOworCUZJ RUxEX09GRlNFVChDUjNfVEFSR0VUX1ZBTFVFMSk7CisJRklFTERfT0ZGU0VUKENSM19UQVJHRVRf VkFMVUUyKTsKKwlGSUVMRF9PRkZTRVQoQ1IzX1RBUkdFVF9WQUxVRTMpOworCUZJRUxEX09GRlNF VChFWElUX1FVQUxJRklDQVRJT04pOworCUZJRUxEX09GRlNFVChHVUVTVF9MSU5FQVJfQUREUkVT Uyk7CisJRklFTERfT0ZGU0VUKEdVRVNUX0NSMCk7CisJRklFTERfT0ZGU0VUKEdVRVNUX0NSMyk7 CisJRklFTERfT0ZGU0VUKEdVRVNUX0NSNCk7CisJRklFTERfT0ZGU0VUKEdVRVNUX0VTX0JBU0Up OworCUZJRUxEX09GRlNFVChHVUVTVF9DU19CQVNFKTsKKwlGSUVMRF9PRkZTRVQoR1VFU1RfU1Nf QkFTRSk7CisJRklFTERfT0ZGU0VUKEdVRVNUX0RTX0JBU0UpOworCUZJRUxEX09GRlNFVChHVUVT VF9GU19CQVNFKTsKKwlGSUVMRF9PRkZTRVQoR1VFU1RfR1NfQkFTRSk7CisJRklFTERfT0ZGU0VU KEdVRVNUX0xEVFJfQkFTRSk7CisJRklFTERfT0ZGU0VUKEdVRVNUX1RSX0JBU0UpOworCUZJRUxE X09GRlNFVChHVUVTVF9HRFRSX0JBU0UpOworCUZJRUxEX09GRlNFVChHVUVTVF9JRFRSX0JBU0Up OworCUZJRUxEX09GRlNFVChHVUVTVF9EUjcpOworCUZJRUxEX09GRlNFVChHVUVTVF9SU1ApOwor CUZJRUxEX09GRlNFVChHVUVTVF9SSVApOworCUZJRUxEX09GRlNFVChHVUVTVF9SRkxBR1MpOwor CUZJRUxEX09GRlNFVChHVUVTVF9QRU5ESU5HX0RCR19FWENFUFRJT05TKTsKKwlGSUVMRF9PRkZT RVQoR1VFU1RfU1lTRU5URVJfRVNQKTsKKwlGSUVMRF9PRkZTRVQoR1VFU1RfU1lTRU5URVJfRUlQ KTsKKwlGSUVMRF9PRkZTRVQoSE9TVF9DUjApOworCUZJRUxEX09GRlNFVChIT1NUX0NSMyk7CisJ RklFTERfT0ZGU0VUKEhPU1RfQ1I0KTsKKwlGSUVMRF9PRkZTRVQoSE9TVF9GU19CQVNFKTsKKwlG SUVMRF9PRkZTRVQoSE9TVF9HU19CQVNFKTsKKwlGSUVMRF9PRkZTRVQoSE9TVF9UUl9CQVNFKTsK KwlGSUVMRF9PRkZTRVQoSE9TVF9HRFRSX0JBU0UpOworCUZJRUxEX09GRlNFVChIT1NUX0lEVFJf QkFTRSk7CisJRklFTERfT0ZGU0VUKEhPU1RfSUEzMl9TWVNFTlRFUl9FU1ApOworCUZJRUxEX09G RlNFVChIT1NUX0lBMzJfU1lTRU5URVJfRUlQKTsKKwlGSUVMRF9PRkZTRVQoSE9TVF9SU1ApOwor CUZJRUxEX09GRlNFVChIT1NUX1JJUCk7Cit9CisKKy8qCisgKiBUaGUgZm9ybWF0IG9mIFZNQ1NJ TkZPIGlzIGdpdmVuIGJlbG93OgorICogICArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKKyAqICAgfCBCeXRlIG9mZnNldCB8IENvbnRlbnRzICAgICAgICAgICAgICAg ICB8CisgKiAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICog ICB8IDAgICAgICAgICAgIHwgVk1DUyByZXZpc2lvbiBpZGVudGlmaWVyIHwKKyAqICAgKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgIHwgNCAgICAgICAgICAg fCA8ZmllbGQ+PGVuY29kZWQgb2Zmc2V0PiAgfAorICogICArLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgfCAxNiAgICAgICAgICB8IDxmaWVsZD48ZW5jb2Rl ZCBvZmZzZXQ+ICB8CisgKiAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKworICogICAuLi4uLi4KKyAqCisgKiBUaGUgZmlyc3QgMzIgYml0cyBvZiBWTUNTSU5GTyBj b250YWlucyB0aGUgVk1DUyByZXZpc2lvbgorICogaWRlbnRpZmllci4KKyAqIFRoZSByZW1haW5k ZXIgb2YgVk1DU0lORk8gaXMgdXNlZCBmb3IgPGZpZWxkPjxlbmNvZGVkIG9mZnNldD4KKyAqIHNl dHMuIEVhY2ggc2V0IHRha2VzIDEyIGJ5dGVzOiBmaWVsZCBvY2N1cHlzIDQgYnl0ZXMKKyAqIGFu ZCBpdHMgY29ycmVzcG9uZGluZyBlbmNvZGVkIG9mZnNldCBvY2N1cHlzIDggYnl0ZXMuCisgKgor ICogRW5jb2RlZCBvZmZzZXRzIGFyZSByYXcgdmFsdWVzIHJlYWQgYnkgdm1jc19yZWFkezE2LCA2 NCwgMzIsIGx9LAorICogYW5kIHRoZXkgYXJlIGFsbCB1bnNpZ25lZCBleHRlbmRlZCB0byA4IGJ5 dGVzIGZvciBlYWNoCisgKiA8ZmllbGQ+PGVuY29kZWQgb2Zmc2V0PiBzZXQgaGFzIHRoZSBzYW1l IHNpemUuCisgKiBXZSBkbyBub3QgZGVjb2RlIG9mZnNldHMgaGVyZS4gVGhlIGRlY29kaW5nIHdv cmsgaXMgZGVsYXllZAorICogaW4gdXNlcnNwYWNlIHRvb2xzLgorICoKKyAqIE5vdGUsIG9mZnNl dHMgb2YgZmllbGRzIGJlbG93IHdpbGwgbm90IGJlIGZpbGxlZCBpbnRvCisgKiBWTUNTSU5GTzoK KyAqIDEuIGZpZWxkcyBkZWZpbmVkIGluIEludGVsIHNwZWNpZmljYXRpb24gKEludGVswq4gNjQg YW5kCisgKiAgICBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcuKAmXMgTWFu dWFsLCBWb2x1bWUKKyAqICAgIDNDKSBidXQgbm90IGRlZmluZWQgaW4gKnZtY3NfZmllbGQqLgor ICogMi4gZmllbGRzIGRvbid0IGV4aXN0IGJlY2F1c2UgdGhlaXIgY29ycmVzcG9uZGluZworICog ICAgY29udHJvbCBiaXRzIGFyZSBub3Qgc2V0LgorICovCitzdGF0aWMgaW50IF9faW5pdCBhbGxv Y192bWNzaW5mb19pbml0KHZvaWQpCit7CisvKgorICogVGhlIGZpcnN0IDggYnl0ZXMgaW4gdm1j cyByZWdpb24gYXJlIGZvcgorICogICBWTUNTIHJldmlzaW9uIGlkZW50aWZpZXIKKyAqICAgVk1Y LWFib3J0IGluZGljYXRvcgorICovCisjZGVmaW5lIEZJRUxEX1NUQVJUICg4KQorCisJaW50IHIs IG9mZnNldDsKKwlzdHJ1Y3Qgdm1jcyAqdm1jczsKKwlpbnQgY3B1OworCisJaWYgKHZtY3NpbmZv X3NpemUpCisJCXJldHVybiAwOworCisJdm1jcyA9IGFsbG9jX3ZtY3MoKTsKKwlpZiAoIXZtY3Mp IHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJciA9IGhhcmR3YXJlX2VuYWJsZV9hbGwoKTsK KwlpZiAocikKKwkJZ290byBvdXRfZXJyOworCisJLyoKKwkgKiBXcml0ZSBlbmNvZGVkIG9mZnNl dHMgaW50byBWTUNTIGRhdGEgZm9yIGxhdGVyIHZtY3NfcmVhZC4KKwkgKi8KKwlmb3IgKG9mZnNl dCA9IEZJRUxEX1NUQVJUOyBvZmZzZXQgPCB2bWNzX2NvbmZpZy5zaXplOworCSAgICAgb2Zmc2V0 ICs9IHNpemVvZih1MTYpKQorCQkqKHUxNiAqKSgoY2hhciAqKXZtY3MgKyBvZmZzZXQpID0gRU5D T0RJTkdfT0ZGU0VUKG9mZnNldCk7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJdm1jc19jbGVhcih2 bWNzKTsKKwlwZXJfY3B1KGN1cnJlbnRfdm1jcywgY3B1KSA9IHZtY3M7CisJdm1jc19sb2FkKHZt Y3MpOworCisJVk1DU0lORk9fUkVWSVNJT05fSUQodm1jcy0+cmV2aXNpb25faWQpOworCWFwcGVu ZF9jb250cm9sX2ZpZWxkKCk7CisKKwl2bWNzX3dyaXRlX2NvbnRyb2xfZmllbGQoUElOX0JBU0VE X1ZNX0VYRUNfQ09OVFJPTCwKKwkJCQkgdm1jc19jb25maWcucGluX2Jhc2VkX2V4ZWNfY3RybCk7 CisJdm1jc193cml0ZV9jb250cm9sX2ZpZWxkKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsCisJ CQkJIHZtY3NfY29uZmlnLmNwdV9iYXNlZF9leGVjX2N0cmwpOworCWlmIChjcHVfaGFzX3NlY29u ZGFyeV9leGVjX2N0cmxzKCkpIHsKKwkJdm1jc193cml0ZV9jb250cm9sX2ZpZWxkKFNFQ09OREFS WV9WTV9FWEVDX0NPTlRST0wsCisJCQkJCSB2bWNzX2NvbmZpZy5jcHVfYmFzZWRfMm5kX2V4ZWNf Y3RybCk7CisJfQorCXZtY3Nfd3JpdGVfY29udHJvbF9maWVsZChWTV9FWElUX0NPTlRST0xTLCB2 bWNzX2NvbmZpZy52bWV4aXRfY3RybCk7CisJdm1jc193cml0ZV9jb250cm9sX2ZpZWxkKFZNX0VO VFJZX0NPTlRST0xTLCB2bWNzX2NvbmZpZy52bWVudHJ5X2N0cmwpOworCisJYXBwZW5kX2ZpZWxk MTYoKTsKKwlhcHBlbmRfZmllbGQ2NCgpOworCWFwcGVuZF9maWVsZDMyKCk7CisJYXBwZW5kX2Zp ZWxkKCk7CisKKwl1cGRhdGVfdm1jc2luZm9fbm90ZSgpOworCisJdm1jc19jbGVhcih2bWNzKTsK KwlwdXRfY3B1KCk7CisKK291dF9lcnI6CisJZnJlZV92bWNzKHZtY3MpOworCXJldHVybiByOwor fQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWxsb2Nfdm1jc2luZm9fZXhpdCh2b2lkKQoreworCWhh cmR3YXJlX2Rpc2FibGVfYWxsKCk7Cit9CisKK21vZHVsZV9pbml0KGFsbG9jX3ZtY3NpbmZvX2lu aXQpOworbW9kdWxlX2V4aXQoYWxsb2Nfdm1jc2luZm9fZXhpdCk7Ci0tIAoxLjcuMQoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Ka2V4ZWMgbWFpbGluZyBs aXN0CmtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9rZXhlYwo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759643Ab2EPH4k (ORCPT ); Wed, 16 May 2012 03:56:40 -0400 Received: from cn.fujitsu.com ([222.73.24.84]:52569 "EHLO song.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1751894Ab2EPH4i convert rfc822-to-8bit (ORCPT ); Wed, 16 May 2012 03:56:38 -0400 X-IronPort-AV: E=Sophos;i="4.75,602,1330876800"; d="scan'208";a="4967694" Message-ID: <4FB35D60.6050009@cn.fujitsu.com> Date: Wed, 16 May 2012 15:55:12 +0800 From: zhangyanfei User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100413 Fedora/3.0.4-2.fc13 Thunderbird/3.0.4 MIME-Version: 1.0 To: Avi Kivity , mtosatti@redhat.com CC: ebiederm@xmission.com, luto@mit.edu, Joerg Roedel , dzickus@redhat.com, paul.gortmaker@windriver.com, ludwig.nussel@suse.de, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kexec@lists.infradead.org, Greg KH Subject: [PATCH v2 3/5] KVM-INTEL: Add new module vmcsinfo-intel to fill VMCSINFO References: <4FB35C48.30708@cn.fujitsu.com> In-Reply-To: <4FB35C48.30708@cn.fujitsu.com> X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.3|September 15, 2011) at 2012/05/16 15:55:15, Serialize by Router on mailserver/fnst(Release 8.5.3|September 15, 2011) at 2012/05/16 15:55:24 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch implements a new module named vmcsinfo-intel. The module fills VMCSINFO with the VMCS revision identifier, and encoded offsets of VMCS fields. Note, offsets of fields below will not be filled into VMCSINFO: 1. fields defined in Intel specification (Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3C) but not defined in *vmcs_field*. 2. fields don't exist because their corresponding control bits are not set. Signed-off-by: zhangyanfei --- arch/x86/kvm/Kconfig | 11 ++ arch/x86/kvm/Makefile | 3 + arch/x86/kvm/vmcsinfo.c | 402 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 416 insertions(+), 0 deletions(-) create mode 100644 arch/x86/kvm/vmcsinfo.c diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig index 1a7fe86..87df9d4 100644 --- a/arch/x86/kvm/Kconfig +++ b/arch/x86/kvm/Kconfig @@ -62,6 +62,17 @@ config KVM_INTEL To compile this as a module, choose M here: the module will be called kvm-intel. +config VMCSINFO_INTEL + tristate "Export VMCSINFO for Intel processors" + depends on KVM_INTEL + ---help--- + Provides support for exporting VMCSINFO on Intel processors equipped + with the VT extensions. The VMCSINFO contains a VMCS revision + identifier and offsets of VMCS fields. + + To compile this as a module, choose M here: the module + will be called vmcsinfo-intel. + config KVM_AMD tristate "KVM for AMD processors support" depends on KVM diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile index 4f579e8..12a1ef6 100644 --- a/arch/x86/kvm/Makefile +++ b/arch/x86/kvm/Makefile @@ -4,6 +4,7 @@ ccflags-y += -Ivirt/kvm -Iarch/x86/kvm CFLAGS_x86.o := -I. CFLAGS_svm.o := -I. CFLAGS_vmx.o := -I. +CFLAGS_vmcsinfo.o := -I. kvm-y += $(addprefix ../../../virt/kvm/, kvm_main.o ioapic.o \ coalesced_mmio.o irq_comm.o eventfd.o \ @@ -15,7 +16,9 @@ kvm-y += x86.o mmu.o emulate.o i8259.o irq.o lapic.o \ i8254.o timer.o cpuid.o pmu.o kvm-intel-y += vmx.o kvm-amd-y += svm.o +vmcsinfo-intel-y += vmcsinfo.o obj-$(CONFIG_KVM) += kvm.o obj-$(CONFIG_KVM_INTEL) += kvm-intel.o obj-$(CONFIG_KVM_AMD) += kvm-amd.o +obj-$(CONFIG_VMCSINFO_INTEL) += vmcsinfo-intel.o diff --git a/arch/x86/kvm/vmcsinfo.c b/arch/x86/kvm/vmcsinfo.c new file mode 100644 index 0000000..288c445 --- /dev/null +++ b/arch/x86/kvm/vmcsinfo.c @@ -0,0 +1,402 @@ +/* + * Kernel-based Virtual Machine driver for Linux + * + * This module enables machines with Intel VT-x extensions to export + * offsets of VMCS fields for guest debugging. + * + * Copyright (C) 2012 Fujitsu, Inc. + * + * Authors: + * Zhang Yanfei + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + * + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +MODULE_AUTHOR("Fujitsu"); +MODULE_LICENSE("GPL"); + +static const struct x86_cpu_id vmcsinfo_cpu_id[] = { + X86_FEATURE_MATCH(X86_FEATURE_VMX), + {} +}; +MODULE_DEVICE_TABLE(x86cpu, vmcsinfo_cpu_id); + +/* + * For caculating offsets of fields in VMCS data, we index every 16-bit + * field by this kind of format: + * | --------- 16 bits ---------- | + * +-------------+-+------------+-+ + * | high 7 bits |1| low 7 bits |0| + * +-------------+-+------------+-+ + * In high byte, the lowest bit must be 1; In low byte, the lowest bit + * must be 0. The two bits are set like this in case indexes in VMCS + * data are read as big endian mode. + * The remaining 14 bits of the index indicate the real offset of the + * field. Because the size of a VMCS region is at most 4 KBytes, so + * 14 bits are enough to index the whole VMCS region. + * + * ENCODING_OFFSET: encode the offset into the index of this kind. + */ +#define OFFSET_HIGH_SHIFT (7) +#define OFFSET_LOW_MASK ((1 << OFFSET_HIGH_SHIFT) - 1) /* 0x7f */ +#define OFFSET_HIGH_MASK (OFFSET_LOW_MASK << OFFSET_HIGH_SHIFT) /* 0x3f80 */ +#define ENCODING_OFFSET(offset) \ + ((((offset) & OFFSET_LOW_MASK) << 1) + \ + ((((offset) & OFFSET_HIGH_MASK) << 2) | 0x100)) + +/* + * We separate these five control fields from other fields + * because some fields only exist on processors that support + * the 1-setting of control bits in the five control fields. + */ +static inline void append_control_field(void) +{ +#define CONTROL_FIELD_OFFSET(field) \ + VMCSINFO_FIELD(field, vmcs_read32(field)) + + CONTROL_FIELD_OFFSET(PIN_BASED_VM_EXEC_CONTROL); + CONTROL_FIELD_OFFSET(CPU_BASED_VM_EXEC_CONTROL); + if (cpu_has_secondary_exec_ctrls()) { + CONTROL_FIELD_OFFSET(SECONDARY_VM_EXEC_CONTROL); + } + CONTROL_FIELD_OFFSET(VM_EXIT_CONTROLS); + CONTROL_FIELD_OFFSET(VM_ENTRY_CONTROLS); +} + +static inline void append_field16(void) +{ +#define FIELD_OFFSET16(field) \ + VMCSINFO_FIELD(field, vmcs_read16(field)) + + FIELD_OFFSET16(GUEST_ES_SELECTOR); + FIELD_OFFSET16(GUEST_CS_SELECTOR); + FIELD_OFFSET16(GUEST_SS_SELECTOR); + FIELD_OFFSET16(GUEST_DS_SELECTOR); + FIELD_OFFSET16(GUEST_FS_SELECTOR); + FIELD_OFFSET16(GUEST_GS_SELECTOR); + FIELD_OFFSET16(GUEST_LDTR_SELECTOR); + FIELD_OFFSET16(GUEST_TR_SELECTOR); + FIELD_OFFSET16(HOST_ES_SELECTOR); + FIELD_OFFSET16(HOST_CS_SELECTOR); + FIELD_OFFSET16(HOST_SS_SELECTOR); + FIELD_OFFSET16(HOST_DS_SELECTOR); + FIELD_OFFSET16(HOST_FS_SELECTOR); + FIELD_OFFSET16(HOST_GS_SELECTOR); + FIELD_OFFSET16(HOST_TR_SELECTOR); +} + +static inline void append_field64(void) +{ +#define FIELD_OFFSET64(field) \ + VMCSINFO_FIELD(field, vmcs_read64(field)) + + FIELD_OFFSET64(IO_BITMAP_A); + FIELD_OFFSET64(IO_BITMAP_A_HIGH); + FIELD_OFFSET64(IO_BITMAP_B); + FIELD_OFFSET64(IO_BITMAP_B_HIGH); + FIELD_OFFSET64(VM_EXIT_MSR_STORE_ADDR); + FIELD_OFFSET64(VM_EXIT_MSR_STORE_ADDR_HIGH); + FIELD_OFFSET64(VM_EXIT_MSR_LOAD_ADDR); + FIELD_OFFSET64(VM_EXIT_MSR_LOAD_ADDR_HIGH); + FIELD_OFFSET64(VM_ENTRY_MSR_LOAD_ADDR); + FIELD_OFFSET64(VM_ENTRY_MSR_LOAD_ADDR_HIGH); + FIELD_OFFSET64(TSC_OFFSET); + FIELD_OFFSET64(TSC_OFFSET_HIGH); + FIELD_OFFSET64(VMCS_LINK_POINTER); + FIELD_OFFSET64(VMCS_LINK_POINTER_HIGH); + FIELD_OFFSET64(GUEST_IA32_DEBUGCTL); + FIELD_OFFSET64(GUEST_IA32_DEBUGCTL_HIGH); + + if (cpu_has_vmx_msr_bitmap()) { + FIELD_OFFSET64(MSR_BITMAP); + FIELD_OFFSET64(MSR_BITMAP_HIGH); + } + + if (cpu_has_vmx_tpr_shadow()) { + FIELD_OFFSET64(VIRTUAL_APIC_PAGE_ADDR); + FIELD_OFFSET64(VIRTUAL_APIC_PAGE_ADDR_HIGH); + } + + if (cpu_has_secondary_exec_ctrls()) { + if (vmcs_config.cpu_based_2nd_exec_ctrl & + SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES) { + FIELD_OFFSET64(APIC_ACCESS_ADDR); + FIELD_OFFSET64(APIC_ACCESS_ADDR_HIGH); + } + if (cpu_has_vmx_ept()) { + FIELD_OFFSET64(EPT_POINTER); + FIELD_OFFSET64(EPT_POINTER_HIGH); + FIELD_OFFSET64(GUEST_PHYSICAL_ADDRESS); + FIELD_OFFSET64(GUEST_PHYSICAL_ADDRESS_HIGH); + FIELD_OFFSET64(GUEST_PDPTR0); + FIELD_OFFSET64(GUEST_PDPTR0_HIGH); + FIELD_OFFSET64(GUEST_PDPTR1); + FIELD_OFFSET64(GUEST_PDPTR1_HIGH); + FIELD_OFFSET64(GUEST_PDPTR2); + FIELD_OFFSET64(GUEST_PDPTR2_HIGH); + FIELD_OFFSET64(GUEST_PDPTR3); + FIELD_OFFSET64(GUEST_PDPTR3_HIGH); + } + } + + if (vmcs_config.vmexit_ctrl & VM_EXIT_SAVE_IA32_PAT || \ + vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT) { + FIELD_OFFSET64(GUEST_IA32_PAT); + FIELD_OFFSET64(GUEST_IA32_PAT_HIGH); + } + + if (vmcs_config.vmexit_ctrl & VM_EXIT_SAVE_IA32_EFER || \ + vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_EFER) { + FIELD_OFFSET64(GUEST_IA32_EFER); + FIELD_OFFSET64(GUEST_IA32_EFER_HIGH); + } + + if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL) { + FIELD_OFFSET64(GUEST_IA32_PERF_GLOBAL_CTRL); + FIELD_OFFSET64(GUEST_IA32_PERF_GLOBAL_CTRL_HIGH); + } + + if (vmcs_config.vmexit_ctrl & VM_EXIT_LOAD_IA32_PAT) { + FIELD_OFFSET64(HOST_IA32_PAT); + FIELD_OFFSET64(HOST_IA32_PAT_HIGH); + } + + if (vmcs_config.vmexit_ctrl & VM_EXIT_LOAD_IA32_EFER) { + FIELD_OFFSET64(HOST_IA32_EFER); + FIELD_OFFSET64(HOST_IA32_EFER_HIGH); + } + + if (vmcs_config.vmexit_ctrl & VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL) { + FIELD_OFFSET64(HOST_IA32_PERF_GLOBAL_CTRL); + FIELD_OFFSET64(HOST_IA32_PERF_GLOBAL_CTRL_HIGH); + } +} + +static inline void append_field32(void) +{ +#define FIELD_OFFSET32(field) \ + VMCSINFO_FIELD(field, vmcs_read32(field)) + + FIELD_OFFSET32(EXCEPTION_BITMAP); + FIELD_OFFSET32(PAGE_FAULT_ERROR_CODE_MASK); + FIELD_OFFSET32(PAGE_FAULT_ERROR_CODE_MATCH); + FIELD_OFFSET32(CR3_TARGET_COUNT); + FIELD_OFFSET32(VM_EXIT_MSR_STORE_COUNT); + FIELD_OFFSET32(VM_EXIT_MSR_LOAD_COUNT); + FIELD_OFFSET32(VM_ENTRY_MSR_LOAD_COUNT); + FIELD_OFFSET32(VM_ENTRY_INTR_INFO_FIELD); + FIELD_OFFSET32(VM_ENTRY_EXCEPTION_ERROR_CODE); + FIELD_OFFSET32(VM_ENTRY_INSTRUCTION_LEN); + FIELD_OFFSET32(VM_INSTRUCTION_ERROR); + FIELD_OFFSET32(VM_EXIT_REASON); + FIELD_OFFSET32(VM_EXIT_INTR_INFO); + FIELD_OFFSET32(VM_EXIT_INTR_ERROR_CODE); + FIELD_OFFSET32(IDT_VECTORING_INFO_FIELD); + FIELD_OFFSET32(IDT_VECTORING_ERROR_CODE); + FIELD_OFFSET32(VM_EXIT_INSTRUCTION_LEN); + FIELD_OFFSET32(VMX_INSTRUCTION_INFO); + FIELD_OFFSET32(GUEST_ES_LIMIT); + FIELD_OFFSET32(GUEST_CS_LIMIT); + FIELD_OFFSET32(GUEST_SS_LIMIT); + FIELD_OFFSET32(GUEST_DS_LIMIT); + FIELD_OFFSET32(GUEST_FS_LIMIT); + FIELD_OFFSET32(GUEST_GS_LIMIT); + FIELD_OFFSET32(GUEST_LDTR_LIMIT); + FIELD_OFFSET32(GUEST_TR_LIMIT); + FIELD_OFFSET32(GUEST_GDTR_LIMIT); + FIELD_OFFSET32(GUEST_IDTR_LIMIT); + FIELD_OFFSET32(GUEST_ES_AR_BYTES); + FIELD_OFFSET32(GUEST_CS_AR_BYTES); + FIELD_OFFSET32(GUEST_SS_AR_BYTES); + FIELD_OFFSET32(GUEST_DS_AR_BYTES); + FIELD_OFFSET32(GUEST_FS_AR_BYTES); + FIELD_OFFSET32(GUEST_GS_AR_BYTES); + FIELD_OFFSET32(GUEST_LDTR_AR_BYTES); + FIELD_OFFSET32(GUEST_TR_AR_BYTES); + FIELD_OFFSET32(GUEST_INTERRUPTIBILITY_INFO); + FIELD_OFFSET32(GUEST_ACTIVITY_STATE); + FIELD_OFFSET32(GUEST_SYSENTER_CS); + FIELD_OFFSET32(HOST_IA32_SYSENTER_CS); + + if (cpu_has_vmx_tpr_shadow()) { + FIELD_OFFSET32(TPR_THRESHOLD); + } + if (cpu_has_secondary_exec_ctrls()) { + if (cpu_has_vmx_ple()) { + FIELD_OFFSET32(PLE_GAP); + FIELD_OFFSET32(PLE_WINDOW); + } + } +} + +static inline void append_field(void) +{ +#define FIELD_OFFSET(field) \ + VMCSINFO_FIELD(field, vmcs_readl(field)) + + FIELD_OFFSET(CR0_GUEST_HOST_MASK); + FIELD_OFFSET(CR4_GUEST_HOST_MASK); + FIELD_OFFSET(CR0_READ_SHADOW); + FIELD_OFFSET(CR4_READ_SHADOW); + FIELD_OFFSET(CR3_TARGET_VALUE0); + FIELD_OFFSET(CR3_TARGET_VALUE1); + FIELD_OFFSET(CR3_TARGET_VALUE2); + FIELD_OFFSET(CR3_TARGET_VALUE3); + FIELD_OFFSET(EXIT_QUALIFICATION); + FIELD_OFFSET(GUEST_LINEAR_ADDRESS); + FIELD_OFFSET(GUEST_CR0); + FIELD_OFFSET(GUEST_CR3); + FIELD_OFFSET(GUEST_CR4); + FIELD_OFFSET(GUEST_ES_BASE); + FIELD_OFFSET(GUEST_CS_BASE); + FIELD_OFFSET(GUEST_SS_BASE); + FIELD_OFFSET(GUEST_DS_BASE); + FIELD_OFFSET(GUEST_FS_BASE); + FIELD_OFFSET(GUEST_GS_BASE); + FIELD_OFFSET(GUEST_LDTR_BASE); + FIELD_OFFSET(GUEST_TR_BASE); + FIELD_OFFSET(GUEST_GDTR_BASE); + FIELD_OFFSET(GUEST_IDTR_BASE); + FIELD_OFFSET(GUEST_DR7); + FIELD_OFFSET(GUEST_RSP); + FIELD_OFFSET(GUEST_RIP); + FIELD_OFFSET(GUEST_RFLAGS); + FIELD_OFFSET(GUEST_PENDING_DBG_EXCEPTIONS); + FIELD_OFFSET(GUEST_SYSENTER_ESP); + FIELD_OFFSET(GUEST_SYSENTER_EIP); + FIELD_OFFSET(HOST_CR0); + FIELD_OFFSET(HOST_CR3); + FIELD_OFFSET(HOST_CR4); + FIELD_OFFSET(HOST_FS_BASE); + FIELD_OFFSET(HOST_GS_BASE); + FIELD_OFFSET(HOST_TR_BASE); + FIELD_OFFSET(HOST_GDTR_BASE); + FIELD_OFFSET(HOST_IDTR_BASE); + FIELD_OFFSET(HOST_IA32_SYSENTER_ESP); + FIELD_OFFSET(HOST_IA32_SYSENTER_EIP); + FIELD_OFFSET(HOST_RSP); + FIELD_OFFSET(HOST_RIP); +} + +/* + * The format of VMCSINFO is given below: + * +-------------+--------------------------+ + * | Byte offset | Contents | + * +-------------+--------------------------+ + * | 0 | VMCS revision identifier | + * +-------------+--------------------------+ + * | 4 | | + * +-------------+--------------------------+ + * | 16 | | + * +-------------+--------------------------+ + * ...... + * + * The first 32 bits of VMCSINFO contains the VMCS revision + * identifier. + * The remainder of VMCSINFO is used for + * sets. Each set takes 12 bytes: field occupys 4 bytes + * and its corresponding encoded offset occupys 8 bytes. + * + * Encoded offsets are raw values read by vmcs_read{16, 64, 32, l}, + * and they are all unsigned extended to 8 bytes for each + * set has the same size. + * We do not decode offsets here. The decoding work is delayed + * in userspace tools. + * + * Note, offsets of fields below will not be filled into + * VMCSINFO: + * 1. fields defined in Intel specification (Intel® 64 and + * IA-32 Architectures Software Developer’s Manual, Volume + * 3C) but not defined in *vmcs_field*. + * 2. fields don't exist because their corresponding + * control bits are not set. + */ +static int __init alloc_vmcsinfo_init(void) +{ +/* + * The first 8 bytes in vmcs region are for + * VMCS revision identifier + * VMX-abort indicator + */ +#define FIELD_START (8) + + int r, offset; + struct vmcs *vmcs; + int cpu; + + if (vmcsinfo_size) + return 0; + + vmcs = alloc_vmcs(); + if (!vmcs) { + return -ENOMEM; + } + + r = hardware_enable_all(); + if (r) + goto out_err; + + /* + * Write encoded offsets into VMCS data for later vmcs_read. + */ + for (offset = FIELD_START; offset < vmcs_config.size; + offset += sizeof(u16)) + *(u16 *)((char *)vmcs + offset) = ENCODING_OFFSET(offset); + + cpu = get_cpu(); + vmcs_clear(vmcs); + per_cpu(current_vmcs, cpu) = vmcs; + vmcs_load(vmcs); + + VMCSINFO_REVISION_ID(vmcs->revision_id); + append_control_field(); + + vmcs_write_control_field(PIN_BASED_VM_EXEC_CONTROL, + vmcs_config.pin_based_exec_ctrl); + vmcs_write_control_field(CPU_BASED_VM_EXEC_CONTROL, + vmcs_config.cpu_based_exec_ctrl); + if (cpu_has_secondary_exec_ctrls()) { + vmcs_write_control_field(SECONDARY_VM_EXEC_CONTROL, + vmcs_config.cpu_based_2nd_exec_ctrl); + } + vmcs_write_control_field(VM_EXIT_CONTROLS, vmcs_config.vmexit_ctrl); + vmcs_write_control_field(VM_ENTRY_CONTROLS, vmcs_config.vmentry_ctrl); + + append_field16(); + append_field64(); + append_field32(); + append_field(); + + update_vmcsinfo_note(); + + vmcs_clear(vmcs); + put_cpu(); + +out_err: + free_vmcs(vmcs); + return r; +} + +static void __exit alloc_vmcsinfo_exit(void) +{ + hardware_disable_all(); +} + +module_init(alloc_vmcsinfo_init); +module_exit(alloc_vmcsinfo_exit); -- 1.7.1