From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [PATCH v2 1/5] arm: KVM: export vcpi->pause state via MP_STATE ioctls Date: Mon, 09 Mar 2015 16:34:21 +0000 Message-ID: <87pp8ib04y.fsf@linaro.org> References: <1425302944-6276-1-git-send-email-alex.bennee@linaro.org> <1425302944-6276-2-git-send-email-alex.bennee@linaro.org> <20150309135055.GC20559@cbox> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 57D9D48255 for ; Mon, 9 Mar 2015 12:28:14 -0400 (EDT) Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id HTn9ExpjhzGX for ; Mon, 9 Mar 2015 12:28:09 -0400 (EDT) Received: from socrates.bennee.com (static.88-198-71-155.clients.your-server.de [88.198.71.155]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 3BB60481CE for ; Mon, 9 Mar 2015 12:28:08 -0400 (EDT) In-reply-to: <20150309135055.GC20559@cbox> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu To: Christoffer Dall Cc: Russell King , kvm@vger.kernel.org, Jonathan Corbet , marc.zyngier@arm.com, "open list:DOCUMENTATION" , open list , Gleb Natapov , Paolo Bonzini , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org List-Id: kvmarm@lists.cs.columbia.edu CkNocmlzdG9mZmVyIERhbGwgPGNocmlzdG9mZmVyLmRhbGxAbGluYXJvLm9yZz4gd3JpdGVzOgoK PiBIaSBBbGV4LAo+Cj4gVGhlIHN1YmplY3Qgb2YgdGhpcyBjaGFuZ2UgaGFzIGEgdHlwbywgYW5k IEkgYWxzbyB0aGluayBpdCdzIG5vdCBhYm91dAo+IGV4cG9zaW5nIHRoZSBwYXVzZSBzdGF0ZSAo dGhhdCdzIGp1c3QgYW4gaW50ZXJuYWwgbmFtZS9jb25jZXB0KSwgYnV0Cj4gYWJvdXQgZXhwb3Np bmcgdGhlIFBTQ0kgc3RhdGUsIG9yIHNpbXBseSB0aGUgVkNQVSBwb3dlciBzdGF0ZS4KCmFybTog S1ZNOiBleHBvcnQgVkNQVSBwb3dlciBzdGF0ZSB2aWEgTVBfU1RBVEUgaW9jdGw/Cgo+Cj4gT24g TW9uLCBNYXIgMDIsIDIwMTUgYXQgMDE6Mjk6MDBQTSArMDAwMCwgQWxleCBCZW5uw6llIHdyb3Rl Ogo+PiBUbyBjbGVhbmx5IHJlc3RvcmUgYW4gU01QIFZNIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQg dGhlIGN1cnJlbnQgcGF1c2UKPj4gc3RhdGUgb2YgZWFjaCB2Y3B1IGlzIGNvcnJlY3RseSByZWNv cmRlZC4gVGhpbmdzIGNvdWxkIGdldCBjb25mdXNlZCBpZgo+PiB0aGUgQ1BVIHN0YXJ0cyBydW5u aW5nIGFmdGVyIG1pZ3JhdGlvbiByZXN0b3JlIGNvbXBsZXRlcyB3aGVuIGl0IHdhcwo+PiBwYXVz ZWQgYmVmb3JlIGl0IHN0YXRlIHdhcyBjYXB0dXJlZC4KPj4gCj4+IFdlIHVzZSB0aGUgZXhpc3Rp bmcgS1ZNX0dFVC9TRVRfTVBfU1RBVEUgaW9jdGwgdG8gZG8gdGhpcy4gVGhlIGFybS9hcm02NAo+ PiBpbnRlcmZhY2UgaXMgYSBsb3Qgc2ltcGxlciBhcyB0aGUgb25seSB2YWxpZCBzdGF0ZXMgYXJl Cj4+IEtWTV9NUF9TVEFURV9SVU5OQUJMRSBhbmQgS1ZNX01QX1NUQVRFX0hBTFRFRC4KPj4gCj4+ IFNpZ25lZC1vZmYtYnk6IEFsZXggQmVubsOpZSA8YWxleC5iZW5uZWVAbGluYXJvLm9yZz4KPj4g Cj4+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2FwaS50eHQgYi9Eb2N1 bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2FwaS50eHQKPj4gaW5kZXggYjExMmVmYy4uNjAyMTU2ZiAx MDA2NDQKPj4gLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9hcGkudHh0Cj4+ICsrKyBi L0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vYXBpLnR4dAo+PiBAQCAtOTk3LDcgKzk5Nyw3IEBA IGZvciB2bS13aWRlIGNhcGFiaWxpdGllcy4KPj4gIDQuMzggS1ZNX0dFVF9NUF9TVEFURQo+PiAg Cj4+ICBDYXBhYmlsaXR5OiBLVk1fQ0FQX01QX1NUQVRFCj4+IC1BcmNoaXRlY3R1cmVzOiB4ODYs IHMzOTAKPj4gK0FyY2hpdGVjdHVyZXM6IHg4NiwgczM5MCwgYXJtLCBhcm02NAo+PiAgVHlwZTog dmNwdSBpb2N0bAo+PiAgUGFyYW1ldGVyczogc3RydWN0IGt2bV9tcF9zdGF0ZSAob3V0KQo+PiAg UmV0dXJuczogMCBvbiBzdWNjZXNzOyAtMSBvbiBlcnJvcgo+PiBAQCAtMTAyNywxNSArMTAyNywy MSBAQCBQb3NzaWJsZSB2YWx1ZXMgYXJlOgo+PiAgIC0gS1ZNX01QX1NUQVRFX0xPQUQ6ICAgICAg ICAgICAgdGhlIHZjcHUgaXMgaW4gYSBzcGVjaWFsIGxvYWQvc3RhcnR1cCBzdGF0ZQo+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3MzOTBdCj4+ICAKPj4gLU9uIHg4NiwgdGhp cyBpb2N0bCBpcyBvbmx5IHVzZWZ1bCBhZnRlciBLVk1fQ1JFQVRFX0lSUUNISVAuIFdpdGhvdXQg YW4KPj4gLWluLWtlcm5lbCBpcnFjaGlwLCB0aGUgbXVsdGlwcm9jZXNzaW5nIHN0YXRlIG11c3Qg YmUgbWFpbnRhaW5lZCBieSB1c2Vyc3BhY2Ugb24KPj4gK0ZvciB4ODY6Cj4+ICsKPj4gK1RoaXMg aW9jdGwgaXMgb25seSB1c2VmdWwgYWZ0ZXIgS1ZNX0NSRUFURV9JUlFDSElQLiAgV2l0aG91dCBh biBpbi1rZXJuZWwKPj4gK2lycWNoaXAsIHRoZSBtdWx0aXByb2Nlc3Npbmcgc3RhdGUgbXVzdCBi ZSBtYWludGFpbmVkIGJ5IHVzZXJzcGFjZSBvbgo+Cj4gTml0OiBJIHdvdWxkIG5vdCB0YWludCB0 aGUgZ2l0IGxvZyB3aXRoIHRoaXMgY2hhbmdlIGJ1dCBpbnN0ZWFkIGp1c3QKPiBpbnRyb2R1Y2Ug YSBwYXJhZ3JhcGggYmVsb3cgc3RhcnRpbmcgd2l0aCAiT24gYXJtL2FybTY0LCAiIGFuZCB5b3Ug d291bGQKPiBnZXQgdGhlIHNhbWUgZWZmZWN0Lgo+Cj4+ICB0aGVzZSBhcmNoaXRlY3R1cmVzLgo+ PiAgCj4+ICtGb3IgYXJtL2FybTY0Ogo+PiArCj4+ICtUaGUgb25seSBzdGF0ZXMgdGhhdCBhcmUg dmFsaWQgYXJlIEtWTV9NUF9TVEFURV9IQUxURUQgYW5kCj4+ICtLVk1fTVBfU1RBVEVfUlVOTkFC TEUgd2hpY2ggcmVmbGVjdCBpZiB0aGUgdmNwdSBpcyBwYXVzZWQgb3Igbm90Lgo+Cj4gQXMgc3Vn Z2VzdGVkIG9uIHRoZSBRRU1VIHNlcmllcywgSEFMVEVEIGlzIHByb2JhYmx5IG5vdCB0aGUgcmln aHQgdGhpbmcKPiB0byB1c2UuCgpLVk1fTVBfU1RBVEVfU1RPUFBFRCBpcyBjdXJyZW50bHkgb25s eSB1c2VkIGZvciBzMzkwIGJ1dCBzZWVtcyB0byBmaXQuCkknbSB3YXJ5IG9mIGFkZGluZyB5ZXQg YW5vdGhlciBkZWZpbmUuCgo+Cj4+ICAKPj4gIDQuMzkgS1ZNX1NFVF9NUF9TVEFURQo+PiAgCj4+ ICBDYXBhYmlsaXR5OiBLVk1fQ0FQX01QX1NUQVRFCj4+IC1BcmNoaXRlY3R1cmVzOiB4ODYsIHMz OTAKPj4gK0FyY2hpdGVjdHVyZXM6IHg4NiwgczM5MCwgYXJtLCBhcm02NAo+PiAgVHlwZTogdmNw dSBpb2N0bAo+PiAgUGFyYW1ldGVyczogc3RydWN0IGt2bV9tcF9zdGF0ZSAoaW4pCj4+ICBSZXR1 cm5zOiAwIG9uIHN1Y2Nlc3M7IC0xIG9uIGVycm9yCj4+IEBAIC0xMDQzLDEwICsxMDQ5LDE2IEBA IFJldHVybnM6IDAgb24gc3VjY2VzczsgLTEgb24gZXJyb3IKPj4gIFNldHMgdGhlIHZjcHUncyBj dXJyZW50ICJtdWx0aXByb2Nlc3Npbmcgc3RhdGUiOyBzZWUgS1ZNX0dFVF9NUF9TVEFURSBmb3IK Pj4gIGFyZ3VtZW50cy4KPj4gIAo+PiAtT24geDg2LCB0aGlzIGlvY3RsIGlzIG9ubHkgdXNlZnVs IGFmdGVyIEtWTV9DUkVBVEVfSVJRQ0hJUC4gV2l0aG91dCBhbgo+PiAtaW4ta2VybmVsIGlycWNo aXAsIHRoZSBtdWx0aXByb2Nlc3Npbmcgc3RhdGUgbXVzdCBiZSBtYWludGFpbmVkIGJ5IHVzZXJz cGFjZSBvbgo+PiArRm9yIHg4NjoKPj4gKwo+PiArVGhpcyBpb2N0bCBpcyBvbmx5IHVzZWZ1bCBh ZnRlciBLVk1fQ1JFQVRFX0lSUUNISVAuICBXaXRob3V0IGFuIGluLWtlcm5lbAo+PiAraXJxY2hp cCwgdGhlIG11bHRpcHJvY2Vzc2luZyBzdGF0ZSBtdXN0IGJlIG1haW50YWluZWQgYnkgdXNlcnNw YWNlIG9uCj4+ICB0aGVzZSBhcmNoaXRlY3R1cmVzLgo+PiAgCj4+ICtGb3IgYXJtL2FybTY0Ogo+ PiArCj4+ICtUaGUgb25seSBzdGF0ZXMgdGhhdCBhcmUgdmFsaWQgYXJlIEtWTV9NUF9TVEFURV9I QUxURUQgYW5kCj4+ICtLVk1fTVBfU1RBVEVfUlVOTkFCTEUgd2hpY2ggcmVmbGVjdCBpZiB0aGUg dmNwdSBzaG91bGQgYmUgcGF1c2VkIG9yIG5vdC4KPgo+IHNhbWUgYXMgYWJvdmUKPgo+PiAgCj4+ ICA0LjQwIEtWTV9TRVRfSURFTlRJVFlfTUFQX0FERFIKPj4gIAo+PiBkaWZmIC0tZ2l0IGEvYXJj aC9hcm0va3ZtL2FybS5jIGIvYXJjaC9hcm0va3ZtL2FybS5jCj4+IGluZGV4IDU1NjBmNzQuLjg1 MzE1MzYgMTAwNjQ0Cj4+IC0tLSBhL2FyY2gvYXJtL2t2bS9hcm0uYwo+PiArKysgYi9hcmNoL2Fy bS9rdm0vYXJtLmMKPj4gQEAgLTE4Myw2ICsxODMsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNr X2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KQo+PiAgCWNhc2UgS1ZNX0NBUF9B Uk1fUFNDSToKPj4gIAljYXNlIEtWTV9DQVBfQVJNX1BTQ0lfMF8yOgo+PiAgCWNhc2UgS1ZNX0NB UF9SRUFET05MWV9NRU06Cj4+ICsJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgo+PiAgCQlyID0gMTsK Pj4gIAkJYnJlYWs7Cj4+ICAJY2FzZSBLVk1fQ0FQX0NPQUxFU0NFRF9NTUlPOgo+PiBAQCAtMzEz LDEzICszMTQsMjkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0 cnVjdCBrdm1fdmNwdSAqdmNwdSwKPj4gIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9tcHN0 YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPj4gIAkJCQkgICAgc3RydWN0IGt2bV9tcF9zdGF0 ZSAqbXBfc3RhdGUpCj4+ICB7Cj4+IC0JcmV0dXJuIC1FSU5WQUw7Cj4+ICsJaWYgKHZjcHUtPmFy Y2gucGF1c2UpCj4+ICsJCW1wX3N0YXRlLT5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9IQUxURUQ7 Cj4+ICsJZWxzZQo+PiArCQltcF9zdGF0ZS0+bXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfUlVOTkFC TEU7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gIH0KPj4gIAo+PiAgaW50IGt2bV9hcmNoX3ZjcHVf aW9jdGxfc2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAo+PiAgCQkJCSAgICBzdHJ1 Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSkKPj4gIHsKPj4gLQlyZXR1cm4gLUVJTlZBTDsKPj4g Kwlzd2l0Y2ggKG1wX3N0YXRlLT5tcF9zdGF0ZSkgewo+PiArCWNhc2UgS1ZNX01QX1NUQVRFX1JV Tk5BQkxFOgo+PiArCQl2Y3B1LT5hcmNoLnBhdXNlID0gZmFsc2U7Cj4+ICsJCWJyZWFrOwo+PiAr CWNhc2UgS1ZNX01QX1NUQVRFX0hBTFRFRDoKPj4gKwkJdmNwdS0+YXJjaC5wYXVzZSA9IHRydWU7 Cj4+ICsJCWJyZWFrOwo+PiArCWRlZmF1bHQ6Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0K Pj4gKwo+PiArCXJldHVybiAwOwo+PiAgfQo+PiAgCj4+ICAvKioKPgo+IEFyZSB3ZSBjYXB0dXJp bmcgdGhlIHZjcHUgZmVhdHVyZXMgaW4gc29tZSB3YXkgb3IgZG8gd2UgZXhwZWN0IHVzZXJzcGFj ZQo+IHRvIG1pZ3JhdGUgdGhlc2Ugb24gaXRzIG93bj8gIFRoZSByZWFzb24gSSdtIGFza2luZywg aXMgaWYgeW91IGNyZWF0ZQo+IG11bHRpcGxlIFZDUFVzLCB3aGVyZSBhbGwgdGhlIG5vbi1wcmlt YXJ5IFZDUFVzIGFyZSBzdGFydGVkIGluIHBvd2VyIG9mZgo+IG1vZGUsIGFuZCB0aGVuIHlvdSBi b290IHlvdXIgZ3Vlc3Qgd2hpY2ggcG93ZXJzIG9uIGFsbCBWQ1BVcywgYW5kIHRoZW4KPiB5b3Ug cmVzdGFydCB5b3VyIGd1ZXN0ICh3aXRoIFBTQ0kgUkVTRVQpLCB0aGUgc3lzdGVtIHdpbGwgbm90 IHBvd2VyIG9uCj4gYWxsIHRoZSBub24tcHJpbWFyeSBWQ1BVcyBidXQgaG9sZCB0aGVtIGluIHBv d2VyLW9mZi4KPgo+IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYmVoYXZpb3IgaXMgcHJlc2Vy dmVkIGZvciBhIHJlYm9vdCBhY3Jvc3MgYQo+IG1pZ3JhdGlvbi4gIElzIGl0PwoKSXNuJ3QgdGhh dCBiZWhhdmlvdXIgb3J0aG9nb25hbCB0byB0aGUgbWlncmF0aW9uIGNhc2U/CgotIEJvb3QKLSBQ b3dlciBvbiBzZWNvbmRhcnkgQ1BVcwotIFBvd2VyIG9mZiBvbmUgc2Vjb25kYXJ5IENQVQotIE1p Z3JhdGUgdG8gZmlsZSAoY3B1X3Bvd2VyZWQgcmVmbGVjdHMgc3RhdGUgb2YgZWFjaCBDUFUpCgot IFN0YXJ0IGZyZXNoIFFFTVUKLSBSZXN0b3JlIGZyb20gZmlsZSAoY3B1X3Bvd2VyZWQgLT4gdmNw dS0+cGF1c2VkIHZpYSBpb2N0bCkKLSBSdW4gKHdlIGNvbnRpbnVlIHdpdGggdGhlIHNhbWUgcG93 ZXIgc3RhdGUgcHJlLW1pZ3JhdGUpCgotIFBTQ0kgUkVTRVQKLSBEb2VzIHdoYXQgaXQgZG9lcywg cG93ZXIgYWxsIHNlY29uZGFyaWVzIGRvd24/Ci0gS2VybmVsIGJvb3RzLCB0dXJucyB0aGVtIG9u PwoKCgo+Cj4gVGhhbmtzLAo+IC1DaHJpc3RvZmZlcgoKLS0gCkFsZXggQmVubsOpZQpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwprdm1hcm0gbWFpbGluZyBs aXN0Cmt2bWFybUBsaXN0cy5jcy5jb2x1bWJpYS5lZHUKaHR0cHM6Ly9saXN0cy5jcy5jb2x1bWJp YS5lZHUvbWFpbG1hbi9saXN0aW5mby9rdm1hcm0K From mboxrd@z Thu Jan 1 00:00:00 1970 From: alex.bennee@linaro.org (Alex =?utf-8?Q?Benn=C3=A9e?=) Date: Mon, 09 Mar 2015 16:34:21 +0000 Subject: [PATCH v2 1/5] arm: KVM: export vcpi->pause state via MP_STATE ioctls In-Reply-To: <20150309135055.GC20559@cbox> References: <1425302944-6276-1-git-send-email-alex.bennee@linaro.org> <1425302944-6276-2-git-send-email-alex.bennee@linaro.org> <20150309135055.GC20559@cbox> Message-ID: <87pp8ib04y.fsf@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Christoffer Dall writes: > Hi Alex, > > The subject of this change has a typo, and I also think it's not about > exposing the pause state (that's just an internal name/concept), but > about exposing the PSCI state, or simply the VCPU power state. arm: KVM: export VCPU power state via MP_STATE ioctl? > > On Mon, Mar 02, 2015 at 01:29:00PM +0000, Alex Benn?e wrote: >> To cleanly restore an SMP VM we need to ensure that the current pause >> state of each vcpu is correctly recorded. Things could get confused if >> the CPU starts running after migration restore completes when it was >> paused before it state was captured. >> >> We use the existing KVM_GET/SET_MP_STATE ioctl to do this. The arm/arm64 >> interface is a lot simpler as the only valid states are >> KVM_MP_STATE_RUNNABLE and KVM_MP_STATE_HALTED. >> >> Signed-off-by: Alex Benn?e >> >> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt >> index b112efc..602156f 100644 >> --- a/Documentation/virtual/kvm/api.txt >> +++ b/Documentation/virtual/kvm/api.txt >> @@ -997,7 +997,7 @@ for vm-wide capabilities. >> 4.38 KVM_GET_MP_STATE >> >> Capability: KVM_CAP_MP_STATE >> -Architectures: x86, s390 >> +Architectures: x86, s390, arm, arm64 >> Type: vcpu ioctl >> Parameters: struct kvm_mp_state (out) >> Returns: 0 on success; -1 on error >> @@ -1027,15 +1027,21 @@ Possible values are: >> - KVM_MP_STATE_LOAD: the vcpu is in a special load/startup state >> [s390] >> >> -On x86, this ioctl is only useful after KVM_CREATE_IRQCHIP. Without an >> -in-kernel irqchip, the multiprocessing state must be maintained by userspace on >> +For x86: >> + >> +This ioctl is only useful after KVM_CREATE_IRQCHIP. Without an in-kernel >> +irqchip, the multiprocessing state must be maintained by userspace on > > Nit: I would not taint the git log with this change but instead just > introduce a paragraph below starting with "On arm/arm64, " and you would > get the same effect. > >> these architectures. >> >> +For arm/arm64: >> + >> +The only states that are valid are KVM_MP_STATE_HALTED and >> +KVM_MP_STATE_RUNNABLE which reflect if the vcpu is paused or not. > > As suggested on the QEMU series, HALTED is probably not the right thing > to use. KVM_MP_STATE_STOPPED is currently only used for s390 but seems to fit. I'm wary of adding yet another define. > >> >> 4.39 KVM_SET_MP_STATE >> >> Capability: KVM_CAP_MP_STATE >> -Architectures: x86, s390 >> +Architectures: x86, s390, arm, arm64 >> Type: vcpu ioctl >> Parameters: struct kvm_mp_state (in) >> Returns: 0 on success; -1 on error >> @@ -1043,10 +1049,16 @@ Returns: 0 on success; -1 on error >> Sets the vcpu's current "multiprocessing state"; see KVM_GET_MP_STATE for >> arguments. >> >> -On x86, this ioctl is only useful after KVM_CREATE_IRQCHIP. Without an >> -in-kernel irqchip, the multiprocessing state must be maintained by userspace on >> +For x86: >> + >> +This ioctl is only useful after KVM_CREATE_IRQCHIP. Without an in-kernel >> +irqchip, the multiprocessing state must be maintained by userspace on >> these architectures. >> >> +For arm/arm64: >> + >> +The only states that are valid are KVM_MP_STATE_HALTED and >> +KVM_MP_STATE_RUNNABLE which reflect if the vcpu should be paused or not. > > same as above > >> >> 4.40 KVM_SET_IDENTITY_MAP_ADDR >> >> diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c >> index 5560f74..8531536 100644 >> --- a/arch/arm/kvm/arm.c >> +++ b/arch/arm/kvm/arm.c >> @@ -183,6 +183,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) >> case KVM_CAP_ARM_PSCI: >> case KVM_CAP_ARM_PSCI_0_2: >> case KVM_CAP_READONLY_MEM: >> + case KVM_CAP_MP_STATE: >> r = 1; >> break; >> case KVM_CAP_COALESCED_MMIO: >> @@ -313,13 +314,29 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, >> int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, >> struct kvm_mp_state *mp_state) >> { >> - return -EINVAL; >> + if (vcpu->arch.pause) >> + mp_state->mp_state = KVM_MP_STATE_HALTED; >> + else >> + mp_state->mp_state = KVM_MP_STATE_RUNNABLE; >> + >> + return 0; >> } >> >> int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, >> struct kvm_mp_state *mp_state) >> { >> - return -EINVAL; >> + switch (mp_state->mp_state) { >> + case KVM_MP_STATE_RUNNABLE: >> + vcpu->arch.pause = false; >> + break; >> + case KVM_MP_STATE_HALTED: >> + vcpu->arch.pause = true; >> + break; >> + default: >> + return -EINVAL; >> + } >> + >> + return 0; >> } >> >> /** > > Are we capturing the vcpu features in some way or do we expect userspace > to migrate these on its own? The reason I'm asking, is if you create > multiple VCPUs, where all the non-primary VCPUs are started in power off > mode, and then you boot your guest which powers on all VCPUs, and then > you restart your guest (with PSCI RESET), the system will not power on > all the non-primary VCPUs but hold them in power-off. > > We need to make sure this behavior is preserved for a reboot across a > migration. Is it? Isn't that behaviour orthogonal to the migration case? - Boot - Power on secondary CPUs - Power off one secondary CPU - Migrate to file (cpu_powered reflects state of each CPU) - Start fresh QEMU - Restore from file (cpu_powered -> vcpu->paused via ioctl) - Run (we continue with the same power state pre-migrate) - PSCI RESET - Does what it does, power all secondaries down? - Kernel boots, turns them on? > > Thanks, > -Christoffer -- Alex Benn?e From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932553AbbCIQec (ORCPT ); Mon, 9 Mar 2015 12:34:32 -0400 Received: from static.88-198-71-155.clients.your-server.de ([88.198.71.155]:53605 "EHLO socrates.bennee.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932227AbbCIQe1 (ORCPT ); Mon, 9 Mar 2015 12:34:27 -0400 References: <1425302944-6276-1-git-send-email-alex.bennee@linaro.org> <1425302944-6276-2-git-send-email-alex.bennee@linaro.org> <20150309135055.GC20559@cbox> From: Alex =?utf-8?Q?Benn=C3=A9e?= To: Christoffer Dall Cc: kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, marc.zyngier@arm.com, Gleb Natapov , Paolo Bonzini , Jonathan Corbet , Russell King , "open list\:DOCUMENTATION" , open list Subject: Re: [PATCH v2 1/5] arm: KVM: export vcpi->pause state via MP_STATE ioctls In-reply-to: <20150309135055.GC20559@cbox> Date: Mon, 09 Mar 2015 16:34:21 +0000 Message-ID: <87pp8ib04y.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: alex.bennee@linaro.org X-SA-Exim-Scanned: No (on socrates.bennee.com); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Christoffer Dall writes: > Hi Alex, > > The subject of this change has a typo, and I also think it's not about > exposing the pause state (that's just an internal name/concept), but > about exposing the PSCI state, or simply the VCPU power state. arm: KVM: export VCPU power state via MP_STATE ioctl? > > On Mon, Mar 02, 2015 at 01:29:00PM +0000, Alex Bennée wrote: >> To cleanly restore an SMP VM we need to ensure that the current pause >> state of each vcpu is correctly recorded. Things could get confused if >> the CPU starts running after migration restore completes when it was >> paused before it state was captured. >> >> We use the existing KVM_GET/SET_MP_STATE ioctl to do this. The arm/arm64 >> interface is a lot simpler as the only valid states are >> KVM_MP_STATE_RUNNABLE and KVM_MP_STATE_HALTED. >> >> Signed-off-by: Alex Bennée >> >> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt >> index b112efc..602156f 100644 >> --- a/Documentation/virtual/kvm/api.txt >> +++ b/Documentation/virtual/kvm/api.txt >> @@ -997,7 +997,7 @@ for vm-wide capabilities. >> 4.38 KVM_GET_MP_STATE >> >> Capability: KVM_CAP_MP_STATE >> -Architectures: x86, s390 >> +Architectures: x86, s390, arm, arm64 >> Type: vcpu ioctl >> Parameters: struct kvm_mp_state (out) >> Returns: 0 on success; -1 on error >> @@ -1027,15 +1027,21 @@ Possible values are: >> - KVM_MP_STATE_LOAD: the vcpu is in a special load/startup state >> [s390] >> >> -On x86, this ioctl is only useful after KVM_CREATE_IRQCHIP. Without an >> -in-kernel irqchip, the multiprocessing state must be maintained by userspace on >> +For x86: >> + >> +This ioctl is only useful after KVM_CREATE_IRQCHIP. Without an in-kernel >> +irqchip, the multiprocessing state must be maintained by userspace on > > Nit: I would not taint the git log with this change but instead just > introduce a paragraph below starting with "On arm/arm64, " and you would > get the same effect. > >> these architectures. >> >> +For arm/arm64: >> + >> +The only states that are valid are KVM_MP_STATE_HALTED and >> +KVM_MP_STATE_RUNNABLE which reflect if the vcpu is paused or not. > > As suggested on the QEMU series, HALTED is probably not the right thing > to use. KVM_MP_STATE_STOPPED is currently only used for s390 but seems to fit. I'm wary of adding yet another define. > >> >> 4.39 KVM_SET_MP_STATE >> >> Capability: KVM_CAP_MP_STATE >> -Architectures: x86, s390 >> +Architectures: x86, s390, arm, arm64 >> Type: vcpu ioctl >> Parameters: struct kvm_mp_state (in) >> Returns: 0 on success; -1 on error >> @@ -1043,10 +1049,16 @@ Returns: 0 on success; -1 on error >> Sets the vcpu's current "multiprocessing state"; see KVM_GET_MP_STATE for >> arguments. >> >> -On x86, this ioctl is only useful after KVM_CREATE_IRQCHIP. Without an >> -in-kernel irqchip, the multiprocessing state must be maintained by userspace on >> +For x86: >> + >> +This ioctl is only useful after KVM_CREATE_IRQCHIP. Without an in-kernel >> +irqchip, the multiprocessing state must be maintained by userspace on >> these architectures. >> >> +For arm/arm64: >> + >> +The only states that are valid are KVM_MP_STATE_HALTED and >> +KVM_MP_STATE_RUNNABLE which reflect if the vcpu should be paused or not. > > same as above > >> >> 4.40 KVM_SET_IDENTITY_MAP_ADDR >> >> diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c >> index 5560f74..8531536 100644 >> --- a/arch/arm/kvm/arm.c >> +++ b/arch/arm/kvm/arm.c >> @@ -183,6 +183,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) >> case KVM_CAP_ARM_PSCI: >> case KVM_CAP_ARM_PSCI_0_2: >> case KVM_CAP_READONLY_MEM: >> + case KVM_CAP_MP_STATE: >> r = 1; >> break; >> case KVM_CAP_COALESCED_MMIO: >> @@ -313,13 +314,29 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, >> int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, >> struct kvm_mp_state *mp_state) >> { >> - return -EINVAL; >> + if (vcpu->arch.pause) >> + mp_state->mp_state = KVM_MP_STATE_HALTED; >> + else >> + mp_state->mp_state = KVM_MP_STATE_RUNNABLE; >> + >> + return 0; >> } >> >> int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, >> struct kvm_mp_state *mp_state) >> { >> - return -EINVAL; >> + switch (mp_state->mp_state) { >> + case KVM_MP_STATE_RUNNABLE: >> + vcpu->arch.pause = false; >> + break; >> + case KVM_MP_STATE_HALTED: >> + vcpu->arch.pause = true; >> + break; >> + default: >> + return -EINVAL; >> + } >> + >> + return 0; >> } >> >> /** > > Are we capturing the vcpu features in some way or do we expect userspace > to migrate these on its own? The reason I'm asking, is if you create > multiple VCPUs, where all the non-primary VCPUs are started in power off > mode, and then you boot your guest which powers on all VCPUs, and then > you restart your guest (with PSCI RESET), the system will not power on > all the non-primary VCPUs but hold them in power-off. > > We need to make sure this behavior is preserved for a reboot across a > migration. Is it? Isn't that behaviour orthogonal to the migration case? - Boot - Power on secondary CPUs - Power off one secondary CPU - Migrate to file (cpu_powered reflects state of each CPU) - Start fresh QEMU - Restore from file (cpu_powered -> vcpu->paused via ioctl) - Run (we continue with the same power state pre-migrate) - PSCI RESET - Does what it does, power all secondaries down? - Kernel boots, turns them on? > > Thanks, > -Christoffer -- Alex Bennée