From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Graf Subject: Re: [PATCH v2 1/4] KVM: PPC: e500mc: Revert "add load inst fixup" Date: Tue, 06 May 2014 17:54:42 +0200 Message-ID: <536905C2.1030206@suse.de> References: <1398905152-18091-1-git-send-email-mihai.caraman@freescale.com> <1398905152-18091-2-git-send-email-mihai.caraman@freescale.com> <53636436.60002@suse.de> <1399072472827.57968@freescale.com> <76DD19C1-EBCD-485A-B847-21304903E139@suse.de> <887e9723335940fdae0073000ba2d299@BY2PR03MB508.namprd03.prod.outlook.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Cc: "linuxppc-dev@lists.ozlabs.org" , "kvm@vger.kernel.org" , "kvm-ppc@vger.kernel.org" To: "mihai.caraman@freescale.com" Return-path: In-Reply-To: <887e9723335940fdae0073000ba2d299@BY2PR03MB508.namprd03.prod.outlook.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppd-linuxppc64-dev=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" List-Id: kvm.vger.kernel.org T24gMDUvMDYvMjAxNCAwNTo0OCBQTSwgbWloYWkuY2FyYW1hbkBmcmVlc2NhbGUuY29tIHdyb3Rl Ogo+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiBBbGV4YW5kZXIgR3JhZiBb bWFpbHRvOmFncmFmQHN1c2UuZGVdCj4+IFNlbnQ6IFN1bmRheSwgTWF5IDA0LCAyMDE0IDE6MTQg QU0KPj4gVG86IENhcmFtYW4gTWloYWkgQ2xhdWRpdS1CMDIwMDgKPj4gQ2M6IGt2bS1wcGNAdmdl ci5rZXJuZWwub3JnOyBrdm1Admdlci5rZXJuZWwub3JnOyBsaW51eHBwYy0KPj4gZGV2QGxpc3Rz Lm96bGFicy5vcmcKPj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MiAxLzRdIEtWTTogUFBDOiBlNTAw bWM6IFJldmVydCAiYWRkIGxvYWQgaW5zdAo+PiBmaXh1cCIKPj4KPj4KPj4KPj4gQW0gMDMuMDUu MjAxNCB1bSAwMToxNCBzY2hyaWViICJtaWhhaS5jYXJhbWFuQGZyZWVzY2FsZS5jb20iCj4+IDxt aWhhaS5jYXJhbWFuQGZyZWVzY2FsZS5jb20+Ogo+Pgo+Pj4+IEZyb206IEFsZXhhbmRlciBHcmFm IDxhZ3JhZkBzdXNlLmRlPgo+Pj4+IFNlbnQ6IEZyaWRheSwgTWF5IDIsIDIwMTQgMTI6MjQgUE0K Pj4+IFRoaXMgd2FzIHRoZSBmaXJzdCBpZGVhIHRoYXQgc3ByYW5nIHRvIG15IG1pbmQgaW5zcGly ZWQgZnJvbSBob3cgRE9fS1ZNCj4+PiBpcyBob29rZWQgb24gUFIuIEkgYWN0dWFsbHkgZGlkIGEg c2ltcGxlIFBPQyBmb3IgZTUwMG1jL2U1NTAwLCBidXQgdGhpcwo+PiB3aWxsCj4+PiBub3Qgd29y ayBvbiBlNjUwMCB3aGljaCBoYXMgc2hhcmVkIElWT1JzIGJldHdlZW4gSFcgdGhyZWFkcy4KPj4g V2hhdCBpZiB3ZSBjb21iaW5lIHRoZSBpZGVhcz8gT24gcmVhZCB3ZSBmbGlwIHRoZSBJVk9SIHRv IGEgc2VwYXJhdGUKPj4gaGFuZGxlciB0aGF0IGNoZWNrcyBmb3IgYSBmaWVsZCBpbiB0aGUgUEFD QS4gT25seSBpZiB0aGF0IGZpZWxkIGlzIHNldCwKPj4gd2UgdHJlYXQgdGhlIGZhdWx0IGFzIGt2 bSBmYXVsdCwgb3RoZXJ3aXNlIHdlIGp1bXAgaW50byB0aGUgbm9ybWFsCj4+IGhhbmRsZXIuCj4+ Cj4+IEkgc3VwcG9zZSB3ZSdkIGhhdmUgdG8gYWxzbyB0YWtlIGEgbG9jayB0byBtYWtlIHN1cmUg d2UgZG9uJ3QgcmFjZSB3aXRoCj4+IHRoZSBvdGhlciB0aHJlYWQgd2hlbiBpdCB3YW50cyB0byBh bHNvIHJlYWQgYSBndWVzdCBpbnN0cnVjdGlvbiwgYnV0IHlvdQo+PiBnZXQgdGhlIGlkZWEuCj4g VGhpcyBtaWdodCBiZSBhIHNvbHV0aW9uIGZvciBUTEIgZXZpY3Rpb24gYnV0IG5vdCBmb3IgZXhl Y3V0ZS1idXQtbm90LXJlYWQKPiBlbnRyaWVzIHdoaWNoIHJlcXVpcmVzIGFjY2VzcyBmcm9tIGhv c3QgY29udGV4dC4KCkdvb2QgcG9pbnQgOikuCgo+Cj4+IEkgaGF2ZSBubyBpZGVhIHdoZXRoZXIg dGhpcyB3b3VsZCBiZSBhbnkgZmFzdGVyLCBpdCdzIG1vcmUgb2YgYQo+PiBicmFpbnN0b3JtaW5n IHRoaW5nIHJlYWxseS4gQnV0IHJlZ2FyZGxlc3MgdGhpcyBwYXRjaCBzZXQgd291bGQgYmUgYSBt b3ZlCj4+IGludG8gdGhlIHJpZ2h0IGRpcmVjdGlvbi4KPj4KPj4gQnR3LCBkbyB3ZSBoYXZlIGFu eSBndWFyYW50ZWVzIHRoYXQgd2UgZG9uJ3QgZ2V0IHNjaGVkdWxlZCBhd2F5IGJlZm9yZSB3ZQo+ PiBydW4ga3ZtcHBjX2dldF9sYXN0X2luc3QoKT8gSWYgd2UgcnVuIG9uIGEgZGlmZmVyZW50IGNv cmUgd2UgY2FuJ3QgcmVhZAo+PiB0aGUgaW5zdCBhbnltb3JlLiBIcm0uCj4gSXQgd2FzIHlvdXIg c3VnZ2VzdGlvbiB0byBtb3ZlIHRoZSBsb2dpYyBmcm9tIGt2bXBwY19oYW5kbGVfZXhpdCgpIGly cQo+IGRpc2FibGVkIGFyZWEgdG8ga3ZtcHBjX2dldF9sYXN0X2luc3QoKToKPgo+IGh0dHA6Ly9n aXQuZnJlZXNjYWxlLmNvbS9naXQvY2dpdC5jZ2kvcHBjL3Nkay9saW51eC5naXQvdHJlZS9hcmNo L3Bvd2VycGMva3ZtL2Jvb2tlLmMKPgo+IFN0aWxsLCB3aGF0IGlzIHdyb25nIGlmIHdlIGdldCBz Y2hlZHVsZWQgb24gYW5vdGhlciBjb3JlPyBXZSB3aWxsIGVtdWxhdGUKPiBhZ2FpbiBhbmQgdGhl IGd1ZXN0IHdpbGwgcG9wdWxhdGUgdGhlIFRMQiBvbiB0aGUgbmV3IGNvcmUuCgpZZXMsIGl0IG1l YW5zIHdlIGhhdmUgdG8gZ2V0IHRoZSBFTVVMQVRFX0FHQUlOIGNvZGUgcGF0aHMgY29ycmVjdCA6 KS4gSXQgCmFsc28gbWVhbnMgd2UgbG9zZSBzb21lIHBlcmZvcm1hbmNlIHdpdGggcHJlZW1wdGl2 ZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuCgoKQWxleAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KTGludXhwcGMtZGV2IG1haWxpbmcgbGlzdApMaW51eHBw Yy1kZXZAbGlzdHMub3psYWJzLm9yZwpodHRwczovL2xpc3RzLm96bGFicy5vcmcvbGlzdGluZm8v bGludXhwcGMtZGV2 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id C73241413C0 for ; Wed, 7 May 2014 01:54:46 +1000 (EST) Message-ID: <536905C2.1030206@suse.de> Date: Tue, 06 May 2014 17:54:42 +0200 From: Alexander Graf MIME-Version: 1.0 To: "mihai.caraman@freescale.com" Subject: Re: [PATCH v2 1/4] KVM: PPC: e500mc: Revert "add load inst fixup" References: <1398905152-18091-1-git-send-email-mihai.caraman@freescale.com> <1398905152-18091-2-git-send-email-mihai.caraman@freescale.com> <53636436.60002@suse.de> <1399072472827.57968@freescale.com> <76DD19C1-EBCD-485A-B847-21304903E139@suse.de> <887e9723335940fdae0073000ba2d299@BY2PR03MB508.namprd03.prod.outlook.com> In-Reply-To: <887e9723335940fdae0073000ba2d299@BY2PR03MB508.namprd03.prod.outlook.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Cc: "linuxppc-dev@lists.ozlabs.org" , "kvm@vger.kernel.org" , "kvm-ppc@vger.kernel.org" List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , On 05/06/2014 05:48 PM, mihai.caraman@freescale.com wrote: >> -----Original Message----- >> From: Alexander Graf [mailto:agraf@suse.de] >> Sent: Sunday, May 04, 2014 1:14 AM >> To: Caraman Mihai Claudiu-B02008 >> Cc: kvm-ppc@vger.kernel.org; kvm@vger.kernel.org; linuxppc- >> dev@lists.ozlabs.org >> Subject: Re: [PATCH v2 1/4] KVM: PPC: e500mc: Revert "add load inst >> fixup" >> >> >> >> Am 03.05.2014 um 01:14 schrieb "mihai.caraman@freescale.com" >> : >> >>>> From: Alexander Graf >>>> Sent: Friday, May 2, 2014 12:24 PM >>> This was the first idea that sprang to my mind inspired from how DO_KVM >>> is hooked on PR. I actually did a simple POC for e500mc/e5500, but this >> will >>> not work on e6500 which has shared IVORs between HW threads. >> What if we combine the ideas? On read we flip the IVOR to a separate >> handler that checks for a field in the PACA. Only if that field is set, >> we treat the fault as kvm fault, otherwise we jump into the normal >> handler. >> >> I suppose we'd have to also take a lock to make sure we don't race with >> the other thread when it wants to also read a guest instruction, but you >> get the idea. > This might be a solution for TLB eviction but not for execute-but-not-read > entries which requires access from host context. Good point :). > >> I have no idea whether this would be any faster, it's more of a >> brainstorming thing really. But regardless this patch set would be a move >> into the right direction. >> >> Btw, do we have any guarantees that we don't get scheduled away before we >> run kvmppc_get_last_inst()? If we run on a different core we can't read >> the inst anymore. Hrm. > It was your suggestion to move the logic from kvmppc_handle_exit() irq > disabled area to kvmppc_get_last_inst(): > > http://git.freescale.com/git/cgit.cgi/ppc/sdk/linux.git/tree/arch/powerpc/kvm/booke.c > > Still, what is wrong if we get scheduled on another core? We will emulate > again and the guest will populate the TLB on the new core. Yes, it means we have to get the EMULATE_AGAIN code paths correct :). It also means we lose some performance with preemptive kernel configurations. Alex From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Graf Date: Tue, 06 May 2014 15:54:42 +0000 Subject: Re: [PATCH v2 1/4] KVM: PPC: e500mc: Revert "add load inst fixup" Message-Id: <536905C2.1030206@suse.de> List-Id: References: <1398905152-18091-1-git-send-email-mihai.caraman@freescale.com> <1398905152-18091-2-git-send-email-mihai.caraman@freescale.com> <53636436.60002@suse.de> <1399072472827.57968@freescale.com> <76DD19C1-EBCD-485A-B847-21304903E139@suse.de> <887e9723335940fdae0073000ba2d299@BY2PR03MB508.namprd03.prod.outlook.com> In-Reply-To: <887e9723335940fdae0073000ba2d299@BY2PR03MB508.namprd03.prod.outlook.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: "mihai.caraman@freescale.com" Cc: "linuxppc-dev@lists.ozlabs.org" , "kvm@vger.kernel.org" , "kvm-ppc@vger.kernel.org" On 05/06/2014 05:48 PM, mihai.caraman@freescale.com wrote: >> -----Original Message----- >> From: Alexander Graf [mailto:agraf@suse.de] >> Sent: Sunday, May 04, 2014 1:14 AM >> To: Caraman Mihai Claudiu-B02008 >> Cc: kvm-ppc@vger.kernel.org; kvm@vger.kernel.org; linuxppc- >> dev@lists.ozlabs.org >> Subject: Re: [PATCH v2 1/4] KVM: PPC: e500mc: Revert "add load inst >> fixup" >> >> >> >> Am 03.05.2014 um 01:14 schrieb "mihai.caraman@freescale.com" >> : >> >>>> From: Alexander Graf >>>> Sent: Friday, May 2, 2014 12:24 PM >>> This was the first idea that sprang to my mind inspired from how DO_KVM >>> is hooked on PR. I actually did a simple POC for e500mc/e5500, but this >> will >>> not work on e6500 which has shared IVORs between HW threads. >> What if we combine the ideas? On read we flip the IVOR to a separate >> handler that checks for a field in the PACA. Only if that field is set, >> we treat the fault as kvm fault, otherwise we jump into the normal >> handler. >> >> I suppose we'd have to also take a lock to make sure we don't race with >> the other thread when it wants to also read a guest instruction, but you >> get the idea. > This might be a solution for TLB eviction but not for execute-but-not-read > entries which requires access from host context. Good point :). > >> I have no idea whether this would be any faster, it's more of a >> brainstorming thing really. But regardless this patch set would be a move >> into the right direction. >> >> Btw, do we have any guarantees that we don't get scheduled away before we >> run kvmppc_get_last_inst()? If we run on a different core we can't read >> the inst anymore. Hrm. > It was your suggestion to move the logic from kvmppc_handle_exit() irq > disabled area to kvmppc_get_last_inst(): > > http://git.freescale.com/git/cgit.cgi/ppc/sdk/linux.git/tree/arch/powerpc/kvm/booke.c > > Still, what is wrong if we get scheduled on another core? We will emulate > again and the guest will populate the TLB on the new core. Yes, it means we have to get the EMULATE_AGAIN code paths correct :). It also means we lose some performance with preemptive kernel configurations. Alex