From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Christopherson Subject: Re: [RFC PATCH v6 01/92] kvm: introduce KVMI (VM introspection subsystem) Date: Mon, 12 Aug 2019 13:20:30 -0700 Message-ID: <20190812202030.GB1437@linux.intel.com> References: <20190809160047.8319-1-alazar@bitdefender.com> <20190809160047.8319-2-alazar@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190809160047.8319-2-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: Adalbert =?utf-8?B?TGF6xINy?= Cc: Tamas K Lengyel , Weijiang Yang , Yu C , kvm@vger.kernel.org, Konrad Rzeszutek Wilk , Jan Kiszka , Samuel =?iso-8859-1?Q?Laur=E9n?= , Radim =?utf-8?B?S3LEjW3DocWZ?= , Zhang@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-mm@kvack.org, Patrick Colp , Mathieu Tarral , Stefan Hajnoczi , Mircea =?iso-8859-1?Q?C=EErjaliu?= , Paolo Bonzini , Mihai =?utf-8?B?RG9uyJt1?= List-Id: virtualization@lists.linuxfoundation.org T24gRnJpLCBBdWcgMDksIDIwMTkgYXQgMDY6NTk6MTZQTSArMDMwMCwgQWRhbGJlcnQgTGF6xINy IHdyb3RlOgo+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZyBiL2FyY2gveDg2L2t2 bS9LY29uZmlnCj4gaW5kZXggNzJmYTk1NWY0YTE1Li5mNzBhNmExYjY4MTQgMTAwNjQ0Cj4gLS0t IGEvYXJjaC94ODYva3ZtL0tjb25maWcKPiArKysgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwo+IEBA IC05Niw2ICs5NiwxMyBAQCBjb25maWcgS1ZNX01NVV9BVURJVAo+ICAJIFRoaXMgb3B0aW9uIGFk ZHMgYSBSL1cga1ZNIG1vZHVsZSBwYXJhbWV0ZXIgJ21tdV9hdWRpdCcsIHdoaWNoIGFsbG93cwo+ ICAJIGF1ZGl0aW5nIG9mIEtWTSBNTVUgZXZlbnRzIGF0IHJ1bnRpbWUuCj4gIAo+ICtjb25maWcg S1ZNX0lOVFJPU1BFQ1RJT04KPiArCWJvb2wgIlZNIEludHJvc3BlY3Rpb24iCj4gKwlkZXBlbmRz IG9uIEtWTSAmJiAoS1ZNX0lOVEVMIHx8IEtWTV9BTUQpCj4gKwloZWxwCj4gKwkgVGhpcyBvcHRp b24gZW5hYmxlcyBmdW5jdGlvbnMgdG8gY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIFZNLXMsIHF1 ZXJ5Cj4gKwkgdGhlIHN0YXRlIG9mIHRoZSB2Q1BVLXMgKEdQUi1zLCBNU1ItcyBldGMuKS4KClRo aXMgZG9lcyBhIGxvdCBtb3JlIHRoYW4gZW5hYmxlIGZ1bmN0aW9ucywgaXQgYWxsb3dzIHVzZXJz cGFjZSB0byBkbyBhbGwKb2YgdGhlc2UgdGhpbmdzICp3aGlsZSB0aGUgVk0gaXMgcnVubmluZyou ICBFdmVyeXRoaW5nIGFib3ZlIGNhbiBhbHJlYWR5CmJlIGRvbmUgYnkgdXNlcnNwYWNlLgoKVGhl ICItcyIgc3ludGF4IGlzIGRpZmZpY3VsdCB0byByZWFkIGFuZCB1bm5lY2Vzc2FyeSwgZS5nLiBh dCBmaXJzdCBJCnRob3VnaHQgVk0tcyB3YXMgcmVmZXJyaW5nIHRvIGEgbmV3IHN1YnN5c3RlbSBv ciBmZWF0dXJlIGludHJvZHVjZWQgYnkKaW50cm9zcGVjdGlvbi4gIFZNcywgdkNQVXMsIEdQUnMs IE1TUnMsIGV0Yy4uLgoKPiArCj4gICMgT0ssIGl0J3MgYSBsaXR0bGUgY291bnRlci1pbnR1aXRp dmUgdG8gZG8gdGhpcywgYnV0IGl0IHB1dHMgaXQgbmVhdGx5IHVuZGVyCj4gICMgdGhlIHZpcnR1 YWxpemF0aW9uIG1lbnUuCj4gIHNvdXJjZSAiZHJpdmVycy92aG9zdC9LY29uZmlnIgo+IGRpZmYg LS1naXQgYS9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKPiBp bmRleCAzMWVjZjdhNzZkNWEuLjMxMjU5N2JkNDdjNyAxMDA2NDQKPiAtLS0gYS9hcmNoL3g4Ni9r dm0vTWFrZWZpbGUKPiArKysgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKPiBAQCAtNyw2ICs3LDcg QEAgS1ZNIDo9IC4uLy4uLy4uL3ZpcnQva3ZtCj4gIGt2bS15CQkJKz0gJChLVk0pL2t2bV9tYWlu Lm8gJChLVk0pL2NvYWxlc2NlZF9tbWlvLm8gXAo+ICAJCQkJJChLVk0pL2V2ZW50ZmQubyAkKEtW TSkvaXJxY2hpcC5vICQoS1ZNKS92ZmlvLm8KPiAga3ZtLSQoQ09ORklHX0tWTV9BU1lOQ19QRikJ Kz0gJChLVk0pL2FzeW5jX3BmLm8KPiAra3ZtLSQoQ09ORklHX0tWTV9JTlRST1NQRUNUSU9OKSAr PSAkKEtWTSkva3ZtaS5vCj4gIAo+ICBrdm0teQkJCSs9IHg4Ni5vIG1tdS5vIGVtdWxhdGUubyBp ODI1OS5vIGlycS5vIGxhcGljLm8gXAo+ICAJCQkgICBpODI1NC5vIGlvYXBpYy5vIGlycV9jb21t Lm8gY3B1aWQubyBwbXUubyBtdHJyLm8gXAo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2 bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKPiBpbmRleCBjMzhjYzVlYjdlNzMu LjU4MmIwMTg3ZjVhNCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKPiAr KysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKPiBAQCAtNDU1LDYgKzQ1NSwxMCBAQCBzdHJ1 Y3Qga3ZtIHsKPiAgCXN0cnVjdCBzcmN1X3N0cnVjdCBzcmN1Owo+ICAJc3RydWN0IHNyY3Vfc3Ry dWN0IGlycV9zcmN1Owo+ICAJcGlkX3QgdXNlcnNwYWNlX3BpZDsKPiArCj4gKwlzdHJ1Y3QgY29t cGxldGlvbiBrdm1pX2NvbXBsZXRlZDsKPiArCXJlZmNvdW50X3Qga3ZtaV9yZWY7CgpUaGUgcmVm Y291bnRpbmcgYXBwcm9hY2ggc2VlbXMgYSBiaXQgYmFja3dhcmRzLCBhbmQgQUZBSUNUIGlzIGRy aXZlbiBieQppbXBsZW1lbnRpbmcgdW5ob29rIHZpYSBhIG1lc3NhZ2UsIHdoaWNoIGFsc28gc2Vl bXMgYmFja3dhcmRzLiAgSSBhc3N1bWUKaG9vayBhbmQgdW5ob29rIGFyZSByZWxhdGl2ZWx5IHJh cmUgZXZlbnRzIGFuZCBub3QgcGVyZm9ybWFuY2UgY3JpdGljYWwsCnNvIG1ha2UgdGhvc2UgdGhl IHJlc3RyaWN0ZWQvc2xvdyBmbG93cywgZS5nLiBmb3JjZSB1c2Vyc3BhY2UgdG8gcXVpZXNjZQp0 aGUgVk0gYnkgbWFraW5nIHVuaG9vaygpIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGV2ZXJ5IHZj cHUgaW9jdGwoKSBhbmQKbWF5YmUgYW55dGhpbmcgdGhhdCB0YWtlcyBrdm0tPmxvY2suIAoKVGhl biBrdm1pX2lvY3RsX3VuaG9vaygpIGNhbiB1c2UgdGhyZWFkX3N0b3AoKSBhbmQga3ZtaV9yZWN2 KCkganVzdCBuZWVkcwp0byBjaGVjayBrdGhyZWFkX3Nob3VsZF9zdG9wKCkuCgpUaGF0IHdheSBr dm1pIGRvZXNuJ3QgbmVlZCB0byBiZSByZWZjb3VudGVkIHNpbmNlIGl0J3MgZ3VhcmFudGVlZCB0 byBiZQphbGl2ZSBpZiB0aGUgcG9pbnRlciBpcyBub24tbnVsbC4gIEVsaW1pbmF0aW5nIHRoZSBy ZWZjb3VudGluZyB3aWxsIGNsZWFuCnVwIGEgbG90IG9mIHRoZSBjb2RlIGJ5IGVsaW1pbmF0aW5n IGNhbGxzIHRvIGt2bWlfe2dldCxwdXR9KCksIGUuZy4Kd3JhcHBlcnMgbGlrZSBrdm1pX2JyZWFr cG9pbnRfZXZlbnQoKSBqdXN0IGNoZWNrIHZjcHUtPmt2bWksIG9yIG1heWJlCmV2ZW4gZ2V0IGRy b3BwZWQgYWx0b2dldGhlci4KCj4gKwl2b2lkICprdm1pOwoKV2h5IGlzIHRoaXMgYSB2b2lkKj8g IEp1c3QgZm9yd2FyZCBkZWNsYXJlIHN0cnVjdCBrdm1pIGluIGt2bWkuaC4KCklNTyB0aGlzIHNo b3VsZCBiZSAnc3RydWN0IGt2bV9pbnRyb3NwZWN0aW9uICppbnRyb3NwZWN0aW9uJywgc2ltaWxh ciB0bwonc3RydWN0IGt2bV92Y3B1X2FyY2ggYXJjaCcgYW5kICdzdHJ1Y3Qga3ZtX3ZteCcuICBE aXR0byBmb3IgdGhlIHZDUFUKZmxhdm9yLiAgTG9jYWwgdmFyaWFibGVzIGNvdWxkIGJlIGt2bWkr dmNwdWksIGt2bV9pK3ZjcHVfaSwgb3IgbWF5YmUKYSBtb3JlIGxvbmcgZm9ybSBpZiBzb21lb25l IGNhbiBjb21lIHVwIHdpdGggYSBnb29kIGFiYnJldmlhdGlvbj8KClVzaW5nICdpa3ZtJyBhcyB0 aGUgbG9jYWwgdmFyaWFibGUgbmFtZSB3aGVuIGV2ZXJ5dGhpbmcgZWxzZSByZWZlcnMgdG8KaW50 cm9zcGVjdGlvbiBhcyAna3ZtaScgaXMgZXNwZWNpYWxseSBmdW5reS4KCj4gIH07Cj4gIAo+ICAj ZGVmaW5lIGt2bV9lcnIoZm10LCAuLi4pIFwKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9r dm1pLmggYi9pbmNsdWRlL2xpbnV4L2t2bWkuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMDAwMDAwLi5lMzZkZTNmOWYzZGUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5j bHVkZS9saW51eC9rdm1pLmgKPiBAQCAtMCwwICsxLDIzIEBACj4gKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKyNpZm5kZWYgX19LVk1JX0hfXwo+ICsjZGVmaW5lIF9f S1ZNSV9IX18KPiArCj4gKyNkZWZpbmUga3ZtaV9pc19wcmVzZW50KCkgSVNfRU5BQkxFRChDT05G SUdfS1ZNX0lOVFJPU1BFQ1RJT04pCgpQZWVraW5nIGZvcndhcmQgYSBmZXcgcGF0Y2hlcywgaW50 cm9zcGVjdGlvbiBzaG91bGQgaGF2ZSBhIG1vZHVsZSBwYXJhbS4KVGhlIGNvZGUgaXMgYWxzbyBp bmNvbnNpc3RlbnQgaW4gaXRzIHVzYWdlIG9mIGt2bWlfaXNfcHJlc2VudCgpIHZlcnN1cwojaWZk ZWYgQ09ORklHX0tWTV9JTlRST1NQRUNUSU9OLgoKQW5kIG1heWJlIGt2bV9pc19pbnN0cm9zcGVj dGlvbl9lbmFibGVkKCkgc28gdGhhdCB0aGUgZ2F0aW5nIGZ1bmN0aW9uIGhhcwphIG1vcmUgZGVz Y3JpcHRpdmUgbmFtZSBmb3IgZmlyc3QtdGltZSByZWFkZXJzPwoKPiArCj4gKyNpZmRlZiBDT05G SUdfS1ZNX0lOVFJPU1BFQ1RJT04KPiArCj4gK2ludCBrdm1pX2luaXQodm9pZCk7Cj4gK3ZvaWQg a3ZtaV91bmluaXQodm9pZCk7Cj4gK3ZvaWQga3ZtaV9jcmVhdGVfdm0oc3RydWN0IGt2bSAqa3Zt KTsKPiArdm9pZCBrdm1pX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTsKPiArCj4gKyNlbHNl Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGludCBrdm1pX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQo+ ICtzdGF0aWMgaW5saW5lIHZvaWQga3ZtaV91bmluaXQodm9pZCkgeyB9Cj4gK3N0YXRpYyBpbmxp bmUgdm9pZCBrdm1pX2NyZWF0ZV92bShzdHJ1Y3Qga3ZtICprdm0pIHsgfQo+ICtzdGF0aWMgaW5s aW5lIHZvaWQga3ZtaV9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSkgeyB9Cj4gKwo+ICsjZW5k aWYgLyogQ09ORklHX0tWTV9JTlRST1NQRUNUSU9OICovCj4gKwo+ICsjZW5kaWYKPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bWkuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm1p LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZGJmNjNhZDA4 NjJmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm1pLmgKPiBA QCAtMCwwICsxLDY4IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJ VEggTGludXgtc3lzY2FsbC1ub3RlICovCj4gKyNpZm5kZWYgX1VBUElfX0xJTlVYX0tWTUlfSAo+ ICsjZGVmaW5lIF9VQVBJX19MSU5VWF9LVk1JX0gKPiArCj4gKy8qCj4gKyAqIEtWTUkgc3RydWN0 dXJlcyBhbmQgZGVmaW5pdGlvbnMKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgva2VybmVs Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsKPiArI2RlZmluZSBLVk1JX1ZFUlNJ T04gMHgwMDAwMDAwMQo+ICsKPiArZW51bSB7Cj4gKwlLVk1JX0VWRU5UX1JFUExZICAgICAgICAg ICA9IDAsCj4gKwlLVk1JX0VWRU5UICAgICAgICAgICAgICAgICA9IDEsCj4gKwo+ICsJS1ZNSV9G SVJTVF9DT01NQU5EICAgICAgICAgPSAyLAo+ICsKPiArCUtWTUlfR0VUX1ZFUlNJT04gICAgICAg ICAgID0gMiwKPiArCUtWTUlfQ0hFQ0tfQ09NTUFORCAgICAgICAgID0gMywKPiArCUtWTUlfQ0hF Q0tfRVZFTlQgICAgICAgICAgID0gNCwKPiArCUtWTUlfR0VUX0dVRVNUX0lORk8gICAgICAgID0g NSwKPiArCUtWTUlfR0VUX1ZDUFVfSU5GTyAgICAgICAgID0gNiwKPiArCUtWTUlfUEFVU0VfVkNQ VSAgICAgICAgICAgID0gNywKPiArCUtWTUlfQ09OVFJPTF9WTV9FVkVOVFMgICAgID0gOCwKPiAr CUtWTUlfQ09OVFJPTF9FVkVOVFMgICAgICAgID0gOSwKPiArCUtWTUlfQ09OVFJPTF9DUiAgICAg ICAgICAgID0gMTAsCj4gKwlLVk1JX0NPTlRST0xfTVNSICAgICAgICAgICA9IDExLAo+ICsJS1ZN SV9DT05UUk9MX1ZFICAgICAgICAgICAgPSAxMiwKPiArCUtWTUlfR0VUX1JFR0lTVEVSUyAgICAg ICAgID0gMTMsCj4gKwlLVk1JX1NFVF9SRUdJU1RFUlMgICAgICAgICA9IDE0LAo+ICsJS1ZNSV9H RVRfQ1BVSUQgICAgICAgICAgICAgPSAxNSwKPiArCUtWTUlfR0VUX1hTQVZFICAgICAgICAgICAg ID0gMTYsCj4gKwlLVk1JX1JFQURfUEhZU0lDQUwgICAgICAgICA9IDE3LAo+ICsJS1ZNSV9XUklU RV9QSFlTSUNBTCAgICAgICAgPSAxOCwKPiArCUtWTUlfSU5KRUNUX0VYQ0VQVElPTiAgICAgID0g MTksCj4gKwlLVk1JX0dFVF9QQUdFX0FDQ0VTUyAgICAgICA9IDIwLAo+ICsJS1ZNSV9TRVRfUEFH RV9BQ0NFU1MgICAgICAgPSAyMSwKPiArCUtWTUlfR0VUX01BUF9UT0tFTiAgICAgICAgID0gMjIs Cj4gKwlLVk1JX0dFVF9NVFJSX1RZUEUgICAgICAgICA9IDIzLAo+ICsJS1ZNSV9DT05UUk9MX1NQ UCAgICAgICAgICAgPSAyNCwKPiArCUtWTUlfR0VUX1BBR0VfV1JJVEVfQklUTUFQID0gMjUsCj4g KwlLVk1JX1NFVF9QQUdFX1dSSVRFX0JJVE1BUCA9IDI2LAo+ICsJS1ZNSV9DT05UUk9MX0NNRF9S RVNQT05TRSAgPSAyNywKCkVhY2ggY29tbWFuZCBzaG91bGQgYmUgaW50cm9kdWNlZCBhbG9uZyB3 aXRoIHRoZSBwYXRjaCB0aGF0IGFkZHMgdGhlCmFzc29jaWF0ZWQgZnVuY3Rpb25hbGl0eS4KCkl0 J2QgYmUgaGVscGZ1bCB0byBpbmNvcnBvcmF0ZSB0aGUgc2NvcGUgb2YgdGhlIGNvbW1hbmQgaW4g dGhlIG5hbWUsCmUuZy4gVk0gdnMuIHZDUFUuCgpXaHkgYXJlIFZNIGFuZCB2Q1BVIGNvbW1hbmRz IHNtdXNoZWQgdG9nZXRoZXI/Cgo+ICsKPiArCUtWTUlfTkVYVF9BVkFJTEFCTEVfQ09NTUFORCwK CldoeSBub3QgS1ZNSV9OUl9DT01NQU5EUyBvciBLVk1fTlVNX0NPTU1BTkRTPyAgQXQgbGVhc3Qg YmUgY29uc2lzdGVudApiZXR3ZWVuIENPTU1BTkRTIGFuZCBFVkVOVFMgYmVsb3cuCgo+ICsKPiAr fTsKPiArCj4gK2VudW0gewo+ICsJS1ZNSV9FVkVOVF9VTkhPT0sgICAgICA9IDAsCj4gKwlLVk1J X0VWRU5UX0NSCSAgICAgICA9IDEsCj4gKwlLVk1JX0VWRU5UX01TUgkgICAgICAgPSAyLAo+ICsJ S1ZNSV9FVkVOVF9YU0VUQlYgICAgICA9IDMsCj4gKwlLVk1JX0VWRU5UX0JSRUFLUE9JTlQgID0g NCwKPiArCUtWTUlfRVZFTlRfSFlQRVJDQUxMICAgPSA1LAo+ICsJS1ZNSV9FVkVOVF9QRgkgICAg ICAgPSA2LAo+ICsJS1ZNSV9FVkVOVF9UUkFQCSAgICAgICA9IDcsCj4gKwlLVk1JX0VWRU5UX0RF U0NSSVBUT1IgID0gOCwKPiArCUtWTUlfRVZFTlRfQ1JFQVRFX1ZDUFUgPSA5LAo+ICsJS1ZNSV9F VkVOVF9QQVVTRV9WQ1BVICA9IDEwLAo+ICsJS1ZNSV9FVkVOVF9TSU5HTEVTVEVQICA9IDExLAo+ ICsKPiArCUtWTUlfTlVNX0VWRU5UUwo+ICt9Owo+ICsKPiArI2VuZGlmIC8qIF9VQVBJX19MSU5V WF9LVk1JX0ggKi8KPiBkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3Zt L2t2bV9tYWluLmMKPiBpbmRleCA1ODU4NDUyMDNkYjguLjkwZTQzMmQyMjVhYiAxMDA2NDQKPiAt LS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCj4gKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwo+IEBA IC01MSw2ICs1MSw3IEBACj4gICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gICNpbmNsdWRlIDxs aW51eC9zb3J0Lmg+Cj4gICNpbmNsdWRlIDxsaW51eC9ic2VhcmNoLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9rdm1pLmg+Cj4gIAo+ICAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgo+ICAjaW5jbHVk ZSA8YXNtL2lvLmg+Cj4gQEAgLTY4MCw2ICs2ODEsOCBAQCBzdGF0aWMgc3RydWN0IGt2bSAqa3Zt X2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpCj4gIAlpZiAocikKPiAgCQlnb3RvIG91dF9l cnI7Cj4gIAo+ICsJa3ZtaV9jcmVhdGVfdm0oa3ZtKTsKPiArCj4gIAlzcGluX2xvY2soJmt2bV9s b2NrKTsKPiAgCWxpc3RfYWRkKCZrdm0tPnZtX2xpc3QsICZ2bV9saXN0KTsKPiAgCXNwaW5fdW5s b2NrKCZrdm1fbG9jayk7Cj4gQEAgLTcyNSw2ICs3MjgsNyBAQCBzdGF0aWMgdm9pZCBrdm1fZGVz dHJveV92bShzdHJ1Y3Qga3ZtICprdm0pCj4gIAlpbnQgaTsKPiAgCXN0cnVjdCBtbV9zdHJ1Y3Qg Km1tID0ga3ZtLT5tbTsKPiAgCj4gKwlrdm1pX2Rlc3Ryb3lfdm0oa3ZtKTsKPiAgCWt2bV91ZXZl bnRfbm90aWZ5X2NoYW5nZShLVk1fRVZFTlRfREVTVFJPWV9WTSwga3ZtKTsKPiAgCWt2bV9kZXN0 cm95X3ZtX2RlYnVnZnMoa3ZtKTsKPiAgCWt2bV9hcmNoX3N5bmNfZXZlbnRzKGt2bSk7Cj4gQEAg LTE1NTYsNyArMTU2MCw3IEBAIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiAgCSAqIFdob2V2ZXIgY2FsbGVkIHJlbWFwX3Bmbl9yYW5n ZSBpcyBhbHNvIGdvaW5nIHRvIGNhbGwgZS5nLgo+ICAJICogdW5tYXBfbWFwcGluZ19yYW5nZSBi ZWZvcmUgdGhlIHVuZGVybHlpbmcgcGFnZXMgYXJlIGZyZWVkLAo+ICAJICogY2F1c2luZyBhIGNh bGwgdG8gb3VyIE1NVSBub3RpZmllci4KPiAtCSAqLyAKPiArCSAqLwoKU3B1cmlvdXMgd2hpdGVz cGFjZSBjaGFuZ2UuCgo+ICAJa3ZtX2dldF9wZm4ocGZuKTsKPiAgCj4gIAkqcF9wZm4gPSBwZm47 Cj4gQEAgLTQyMDQsNiArNDIwOCw5IEBAIGludCBrdm1faW5pdCh2b2lkICpvcGFxdWUsIHVuc2ln bmVkIHZjcHVfc2l6ZSwgdW5zaWduZWQgdmNwdV9hbGlnbiwKPiAgCXIgPSBrdm1fdmZpb19vcHNf aW5pdCgpOwo+ICAJV0FSTl9PTihyKTsKPiAgCj4gKwlyID0ga3ZtaV9pbml0KCk7Cj4gKwlXQVJO X09OKHIpOwoKTGVmdG92ZXIgZGV2ZWxvcG1lbnQvZGVidWdnaW5nIGNydWQuCgo+ICsKPiAgCXJl dHVybiAwOwo+ICAKPiAgb3V0X3VucmVnOgo+IEBAIC00MjI5LDYgKzQyMzYsNyBAQCBFWFBPUlRf U1lNQk9MX0dQTChrdm1faW5pdCk7Cj4gIAo+ICB2b2lkIGt2bV9leGl0KHZvaWQpCj4gIHsKPiAr CWt2bWlfdW5pbml0KCk7Cj4gIAlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoa3ZtX2RlYnVnZnNf ZGlyKTsKPiAgCW1pc2NfZGVyZWdpc3Rlcigma3ZtX2Rldik7Cj4gIAlrbWVtX2NhY2hlX2Rlc3Ry b3koa3ZtX3ZjcHVfY2FjaGUpOwo+IGRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1pLmMgYi92aXJ0 L2t2bS9rdm1pLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4u MjA2Mzg3NDNiZDAzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3ZpcnQva3ZtL2t2bWkuYwo+IEBA IC0wLDAgKzEsNjQgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiAr LyoKPiArICogS1ZNIGludHJvc3BlY3Rpb24KPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE3 LTIwMTkgQml0ZGVmZW5kZXIgUy5SLkwuCj4gKyAqCj4gKyAqLwo+ICsjaW5jbHVkZSA8dWFwaS9s aW51eC9rdm1pLmg+Cj4gKyNpbmNsdWRlICJrdm1pX2ludC5oIgo+ICsKPiAraW50IGt2bWlfaW5p dCh2b2lkKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArdm9pZCBrdm1pX3VuaW5pdCh2 b2lkKQo+ICt7Cj4gK30KPiArCj4gK3N0cnVjdCBrdm1pICogX19tdXN0X2NoZWNrIGt2bWlfZ2V0 KHN0cnVjdCBrdm0gKmt2bSkKPiArewo+ICsJaWYgKHJlZmNvdW50X2luY19ub3RfemVybygma3Zt LT5rdm1pX3JlZikpCj4gKwkJcmV0dXJuIGt2bS0+a3ZtaTsKPiArCj4gKwlyZXR1cm4gTlVMTDsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQga3ZtaV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSkKPiAr ewo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBrdm1pX3JlbGVhc2Uoc3RydWN0IGt2bSAqa3ZtKQo+ ICt7Cj4gKwlrdm1pX2Rlc3Ryb3koa3ZtKTsKPiArCj4gKwljb21wbGV0ZSgma3ZtLT5rdm1pX2Nv bXBsZXRlZCk7Cj4gK30KPiArCj4gKy8qIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9t IGF0b21pYyBjb250ZXh0IGFuZCBtdXN0IG5vdCBzbGVlcCAqLwo+ICt2b2lkIGt2bWlfcHV0KHN0 cnVjdCBrdm0gKmt2bSkKPiArewo+ICsJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgma3ZtLT5r dm1pX3JlZikpCj4gKwkJa3ZtaV9yZWxlYXNlKGt2bSk7Cj4gK30KPiArCj4gK3ZvaWQga3ZtaV9j cmVhdGVfdm0oc3RydWN0IGt2bSAqa3ZtKQo+ICt7Cj4gKwlpbml0X2NvbXBsZXRpb24oJmt2bS0+ a3ZtaV9jb21wbGV0ZWQpOwo+ICsJY29tcGxldGUoJmt2bS0+a3ZtaV9jb21wbGV0ZWQpOwoKUHJl dHR5IHN1cmUgeW91IGRvbid0IHdhbnQgdG8gYmUgY2FsbGluZyBjb21wbGV0ZSgpIGhlcmUuCgo+ ICt9Cj4gKwo+ICt2b2lkIGt2bWlfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pCj4gK3sKPiAr CXN0cnVjdCBrdm1pICppa3ZtOwo+ICsKPiArCWlrdm0gPSBrdm1pX2dldChrdm0pOwo+ICsJaWYg KCFpa3ZtKQo+ICsJCXJldHVybjsKPiArCj4gKwlrdm1pX3B1dChrdm0pOwo+ICsKPiArCS8qIHdh aXQgZm9yIGludHJvc3BlY3Rpb24gcmVzb3VyY2VzIHRvIGJlIHJlbGVhc2VkICovCj4gKwl3YWl0 X2Zvcl9jb21wbGV0aW9uX2tpbGxhYmxlKCZrdm0tPmt2bWlfY29tcGxldGVkKTsKPiArfQo+IGRp ZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1pX2ludC5oIGIvdmlydC9rdm0va3ZtaV9pbnQuaAo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5hYzIzYWQ2ZmM0ZGYKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvdmlydC9rdm0va3ZtaV9pbnQuaAo+IEBAIC0wLDAgKzEsMTIg QEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiArI2lmbmRlZiBf X0tWTUlfSU5UX0hfXwo+ICsjZGVmaW5lIF9fS1ZNSV9JTlRfSF9fCj4gKwo+ICsjaW5jbHVkZSA8 bGludXgva3ZtX2hvc3QuaD4KPiArCj4gKyNkZWZpbmUgSUtWTShrdm0pICgoc3RydWN0IGt2bWkg KikoKGt2bSktPmt2bWkpKQo+ICsKPiArc3RydWN0IGt2bWkgewo+ICt9Owo+ICsKPiArI2VuZGlm Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxp emF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9u Lm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92 aXJ0dWFsaXphdGlvbg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 55B46C433FF for ; Mon, 12 Aug 2019 20:20:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1BF26206C1 for ; Mon, 12 Aug 2019 20:20:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727513AbfHLUUe (ORCPT ); Mon, 12 Aug 2019 16:20:34 -0400 Received: from mga12.intel.com ([192.55.52.136]:47822 "EHLO mga12.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727195AbfHLUUd (ORCPT ); Mon, 12 Aug 2019 16:20:33 -0400 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Aug 2019 13:20:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,378,1559545200"; d="scan'208";a="204848918" Received: from sjchrist-coffee.jf.intel.com (HELO linux.intel.com) ([10.54.74.41]) by fmsmga002.fm.intel.com with ESMTP; 12 Aug 2019 13:20:30 -0700 Date: Mon, 12 Aug 2019 13:20:30 -0700 From: Sean Christopherson To: Adalbert =?utf-8?B?TGF6xINy?= Cc: kvm@vger.kernel.org, linux-mm@kvack.org, virtualization@lists.linux-foundation.org, Paolo Bonzini , Radim =?utf-8?B?S3LEjW3DocWZ?= , Konrad Rzeszutek Wilk , Tamas K Lengyel , Mathieu Tarral , Samuel =?iso-8859-1?Q?Laur=E9n?= , Patrick Colp , Jan Kiszka , Stefan Hajnoczi , Weijiang Yang , Zhang@vger.kernel.org, Yu C , Mihai =?utf-8?B?RG9uyJt1?= , Mircea =?iso-8859-1?Q?C=EErjaliu?= Subject: Re: [RFC PATCH v6 01/92] kvm: introduce KVMI (VM introspection subsystem) Message-ID: <20190812202030.GB1437@linux.intel.com> References: <20190809160047.8319-1-alazar@bitdefender.com> <20190809160047.8319-2-alazar@bitdefender.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20190809160047.8319-2-alazar@bitdefender.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org On Fri, Aug 09, 2019 at 06:59:16PM +0300, Adalbert Lazăr wrote: > diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig > index 72fa955f4a15..f70a6a1b6814 100644 > --- a/arch/x86/kvm/Kconfig > +++ b/arch/x86/kvm/Kconfig > @@ -96,6 +96,13 @@ config KVM_MMU_AUDIT > This option adds a R/W kVM module parameter 'mmu_audit', which allows > auditing of KVM MMU events at runtime. > > +config KVM_INTROSPECTION > + bool "VM Introspection" > + depends on KVM && (KVM_INTEL || KVM_AMD) > + help > + This option enables functions to control the execution of VM-s, query > + the state of the vCPU-s (GPR-s, MSR-s etc.). This does a lot more than enable functions, it allows userspace to do all of these things *while the VM is running*. Everything above can already be done by userspace. The "-s" syntax is difficult to read and unnecessary, e.g. at first I thought VM-s was referring to a new subsystem or feature introduced by introspection. VMs, vCPUs, GPRs, MSRs, etc... > + > # OK, it's a little counter-intuitive to do this, but it puts it neatly under > # the virtualization menu. > source "drivers/vhost/Kconfig" > diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile > index 31ecf7a76d5a..312597bd47c7 100644 > --- a/arch/x86/kvm/Makefile > +++ b/arch/x86/kvm/Makefile > @@ -7,6 +7,7 @@ KVM := ../../../virt/kvm > kvm-y += $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o \ > $(KVM)/eventfd.o $(KVM)/irqchip.o $(KVM)/vfio.o > kvm-$(CONFIG_KVM_ASYNC_PF) += $(KVM)/async_pf.o > +kvm-$(CONFIG_KVM_INTROSPECTION) += $(KVM)/kvmi.o > > kvm-y += x86.o mmu.o emulate.o i8259.o irq.o lapic.o \ > i8254.o ioapic.o irq_comm.o cpuid.o pmu.o mtrr.o \ > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index c38cc5eb7e73..582b0187f5a4 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -455,6 +455,10 @@ struct kvm { > struct srcu_struct srcu; > struct srcu_struct irq_srcu; > pid_t userspace_pid; > + > + struct completion kvmi_completed; > + refcount_t kvmi_ref; The refcounting approach seems a bit backwards, and AFAICT is driven by implementing unhook via a message, which also seems backwards. I assume hook and unhook are relatively rare events and not performance critical, so make those the restricted/slow flows, e.g. force userspace to quiesce the VM by making unhook() mutually exclusive with every vcpu ioctl() and maybe anything that takes kvm->lock. Then kvmi_ioctl_unhook() can use thread_stop() and kvmi_recv() just needs to check kthread_should_stop(). That way kvmi doesn't need to be refcounted since it's guaranteed to be alive if the pointer is non-null. Eliminating the refcounting will clean up a lot of the code by eliminating calls to kvmi_{get,put}(), e.g. wrappers like kvmi_breakpoint_event() just check vcpu->kvmi, or maybe even get dropped altogether. > + void *kvmi; Why is this a void*? Just forward declare struct kvmi in kvmi.h. IMO this should be 'struct kvm_introspection *introspection', similar to 'struct kvm_vcpu_arch arch' and 'struct kvm_vmx'. Ditto for the vCPU flavor. Local variables could be kvmi+vcpui, kvm_i+vcpu_i, or maybe a more long form if someone can come up with a good abbreviation? Using 'ikvm' as the local variable name when everything else refers to introspection as 'kvmi' is especially funky. > }; > > #define kvm_err(fmt, ...) \ > diff --git a/include/linux/kvmi.h b/include/linux/kvmi.h > new file mode 100644 > index 000000000000..e36de3f9f3de > --- /dev/null > +++ b/include/linux/kvmi.h > @@ -0,0 +1,23 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef __KVMI_H__ > +#define __KVMI_H__ > + > +#define kvmi_is_present() IS_ENABLED(CONFIG_KVM_INTROSPECTION) Peeking forward a few patches, introspection should have a module param. The code is also inconsistent in its usage of kvmi_is_present() versus #ifdef CONFIG_KVM_INTROSPECTION. And maybe kvm_is_instrospection_enabled() so that the gating function has a more descriptive name for first-time readers? > + > +#ifdef CONFIG_KVM_INTROSPECTION > + > +int kvmi_init(void); > +void kvmi_uninit(void); > +void kvmi_create_vm(struct kvm *kvm); > +void kvmi_destroy_vm(struct kvm *kvm); > + > +#else > + > +static inline int kvmi_init(void) { return 0; } > +static inline void kvmi_uninit(void) { } > +static inline void kvmi_create_vm(struct kvm *kvm) { } > +static inline void kvmi_destroy_vm(struct kvm *kvm) { } > + > +#endif /* CONFIG_KVM_INTROSPECTION */ > + > +#endif > diff --git a/include/uapi/linux/kvmi.h b/include/uapi/linux/kvmi.h > new file mode 100644 > index 000000000000..dbf63ad0862f > --- /dev/null > +++ b/include/uapi/linux/kvmi.h > @@ -0,0 +1,68 @@ > +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ > +#ifndef _UAPI__LINUX_KVMI_H > +#define _UAPI__LINUX_KVMI_H > + > +/* > + * KVMI structures and definitions > + */ > + > +#include > +#include > + > +#define KVMI_VERSION 0x00000001 > + > +enum { > + KVMI_EVENT_REPLY = 0, > + KVMI_EVENT = 1, > + > + KVMI_FIRST_COMMAND = 2, > + > + KVMI_GET_VERSION = 2, > + KVMI_CHECK_COMMAND = 3, > + KVMI_CHECK_EVENT = 4, > + KVMI_GET_GUEST_INFO = 5, > + KVMI_GET_VCPU_INFO = 6, > + KVMI_PAUSE_VCPU = 7, > + KVMI_CONTROL_VM_EVENTS = 8, > + KVMI_CONTROL_EVENTS = 9, > + KVMI_CONTROL_CR = 10, > + KVMI_CONTROL_MSR = 11, > + KVMI_CONTROL_VE = 12, > + KVMI_GET_REGISTERS = 13, > + KVMI_SET_REGISTERS = 14, > + KVMI_GET_CPUID = 15, > + KVMI_GET_XSAVE = 16, > + KVMI_READ_PHYSICAL = 17, > + KVMI_WRITE_PHYSICAL = 18, > + KVMI_INJECT_EXCEPTION = 19, > + KVMI_GET_PAGE_ACCESS = 20, > + KVMI_SET_PAGE_ACCESS = 21, > + KVMI_GET_MAP_TOKEN = 22, > + KVMI_GET_MTRR_TYPE = 23, > + KVMI_CONTROL_SPP = 24, > + KVMI_GET_PAGE_WRITE_BITMAP = 25, > + KVMI_SET_PAGE_WRITE_BITMAP = 26, > + KVMI_CONTROL_CMD_RESPONSE = 27, Each command should be introduced along with the patch that adds the associated functionality. It'd be helpful to incorporate the scope of the command in the name, e.g. VM vs. vCPU. Why are VM and vCPU commands smushed together? > + > + KVMI_NEXT_AVAILABLE_COMMAND, Why not KVMI_NR_COMMANDS or KVM_NUM_COMMANDS? At least be consistent between COMMANDS and EVENTS below. > + > +}; > + > +enum { > + KVMI_EVENT_UNHOOK = 0, > + KVMI_EVENT_CR = 1, > + KVMI_EVENT_MSR = 2, > + KVMI_EVENT_XSETBV = 3, > + KVMI_EVENT_BREAKPOINT = 4, > + KVMI_EVENT_HYPERCALL = 5, > + KVMI_EVENT_PF = 6, > + KVMI_EVENT_TRAP = 7, > + KVMI_EVENT_DESCRIPTOR = 8, > + KVMI_EVENT_CREATE_VCPU = 9, > + KVMI_EVENT_PAUSE_VCPU = 10, > + KVMI_EVENT_SINGLESTEP = 11, > + > + KVMI_NUM_EVENTS > +}; > + > +#endif /* _UAPI__LINUX_KVMI_H */ > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index 585845203db8..90e432d225ab 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -51,6 +51,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -680,6 +681,8 @@ static struct kvm *kvm_create_vm(unsigned long type) > if (r) > goto out_err; > > + kvmi_create_vm(kvm); > + > spin_lock(&kvm_lock); > list_add(&kvm->vm_list, &vm_list); > spin_unlock(&kvm_lock); > @@ -725,6 +728,7 @@ static void kvm_destroy_vm(struct kvm *kvm) > int i; > struct mm_struct *mm = kvm->mm; > > + kvmi_destroy_vm(kvm); > kvm_uevent_notify_change(KVM_EVENT_DESTROY_VM, kvm); > kvm_destroy_vm_debugfs(kvm); > kvm_arch_sync_events(kvm); > @@ -1556,7 +1560,7 @@ static int hva_to_pfn_remapped(struct vm_area_struct *vma, > * Whoever called remap_pfn_range is also going to call e.g. > * unmap_mapping_range before the underlying pages are freed, > * causing a call to our MMU notifier. > - */ > + */ Spurious whitespace change. > kvm_get_pfn(pfn); > > *p_pfn = pfn; > @@ -4204,6 +4208,9 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, > r = kvm_vfio_ops_init(); > WARN_ON(r); > > + r = kvmi_init(); > + WARN_ON(r); Leftover development/debugging crud. > + > return 0; > > out_unreg: > @@ -4229,6 +4236,7 @@ EXPORT_SYMBOL_GPL(kvm_init); > > void kvm_exit(void) > { > + kvmi_uninit(); > debugfs_remove_recursive(kvm_debugfs_dir); > misc_deregister(&kvm_dev); > kmem_cache_destroy(kvm_vcpu_cache); > diff --git a/virt/kvm/kvmi.c b/virt/kvm/kvmi.c > new file mode 100644 > index 000000000000..20638743bd03 > --- /dev/null > +++ b/virt/kvm/kvmi.c > @@ -0,0 +1,64 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * KVM introspection > + * > + * Copyright (C) 2017-2019 Bitdefender S.R.L. > + * > + */ > +#include > +#include "kvmi_int.h" > + > +int kvmi_init(void) > +{ > + return 0; > +} > + > +void kvmi_uninit(void) > +{ > +} > + > +struct kvmi * __must_check kvmi_get(struct kvm *kvm) > +{ > + if (refcount_inc_not_zero(&kvm->kvmi_ref)) > + return kvm->kvmi; > + > + return NULL; > +} > + > +static void kvmi_destroy(struct kvm *kvm) > +{ > +} > + > +static void kvmi_release(struct kvm *kvm) > +{ > + kvmi_destroy(kvm); > + > + complete(&kvm->kvmi_completed); > +} > + > +/* This function may be called from atomic context and must not sleep */ > +void kvmi_put(struct kvm *kvm) > +{ > + if (refcount_dec_and_test(&kvm->kvmi_ref)) > + kvmi_release(kvm); > +} > + > +void kvmi_create_vm(struct kvm *kvm) > +{ > + init_completion(&kvm->kvmi_completed); > + complete(&kvm->kvmi_completed); Pretty sure you don't want to be calling complete() here. > +} > + > +void kvmi_destroy_vm(struct kvm *kvm) > +{ > + struct kvmi *ikvm; > + > + ikvm = kvmi_get(kvm); > + if (!ikvm) > + return; > + > + kvmi_put(kvm); > + > + /* wait for introspection resources to be released */ > + wait_for_completion_killable(&kvm->kvmi_completed); > +} > diff --git a/virt/kvm/kvmi_int.h b/virt/kvm/kvmi_int.h > new file mode 100644 > index 000000000000..ac23ad6fc4df > --- /dev/null > +++ b/virt/kvm/kvmi_int.h > @@ -0,0 +1,12 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef __KVMI_INT_H__ > +#define __KVMI_INT_H__ > + > +#include > + > +#define IKVM(kvm) ((struct kvmi *)((kvm)->kvmi)) > + > +struct kvmi { > +}; > + > +#endif