All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Zigotzky <chzigotzky@xenosoft.de>
To: Alexey Kardashevskiy <aik@ozlabs.ru>,
	kvm-ppc@vger.kernel.org, Paolo Bonzini <pbonzini@redhat.com>,
	Paul Mackerras <paulus@samba.org>,
	kvm@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	David Gibson <david@gibson.dropbear.id.au>
Subject: [PATCH kernel] KVM: PPC: Create a virtual-mode only TCE table handlers
Date: Fri, 18 Mar 2016 09:04:45 +0000	[thread overview]
Message-ID: <56EBC4AD.5040302@xenosoft.de> (raw)
In-Reply-To: <1458269442-24292-1-git-send-email-aik@ozlabs.ru>

Hi Alexey,

Many thanks for your really fast response. I successfully compiled the 
latest Git kernel with your new patch today. After that, I successfully 
tested it with Mac-on-Linux/PR KVM. Mac OS X Tiger PowerPC (virtual G3 
CPU) works fantastic in MoL/PR KVM with the latest patched Git kernel.

Screenshot: https://plus.google.com/115515624056477014971/posts/hsQ2m6rYBdr

Have a nice day and thanks a lot to all for your hard work.

Cheers,

Christian

On 18 March 2016 at 03:50 AM, Alexey Kardashevskiy wrote:
> Upcoming in-kernel VFIO acceleration needs different handling in real
> and virtual modes which makes it hard to support both modes in
> the same handler.
>
> This creates a copy of kvmppc_rm_h_stuff_tce and kvmppc_rm_h_put_tce
> in addition to the existing kvmppc_rm_h_put_tce_indirect.
>
> This also fixes linker breakage when only PR KVM was selected (leaving
> HV KVM off): the kvmppc_h_put_tce/kvmppc_h_stuff_tce functions
> would not compile at all and the linked would fail.
>
> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> ---
>   arch/powerpc/kvm/book3s_64_vio.c        | 52 +++++++++++++++++++++++++++++++++
>   arch/powerpc/kvm/book3s_64_vio_hv.c     |  8 ++---
>   arch/powerpc/kvm/book3s_hv_rmhandlers.S |  4 +--
>   3 files changed, 57 insertions(+), 7 deletions(-)
>
> diff --git a/arch/powerpc/kvm/book3s_64_vio.c b/arch/powerpc/kvm/book3s_64_vio.c
> index 2c2d103..75469f6 100644
> --- a/arch/powerpc/kvm/book3s_64_vio.c
> +++ b/arch/powerpc/kvm/book3s_64_vio.c
> @@ -209,6 +209,32 @@ fail:
>   	return ret;
>   }
>   
> +long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
> +		      unsigned long ioba, unsigned long tce)
> +{
> +	struct kvmppc_spapr_tce_table *stt = kvmppc_find_table(vcpu, liobn);
> +	long ret;
> +
> +	/* udbg_printf("H_PUT_TCE(): liobn=0x%lx ioba=0x%lx, tce=0x%lx\n", */
> +	/* 	    liobn, ioba, tce); */
> +
> +	if (!stt)
> +		return H_TOO_HARD;
> +
> +	ret = kvmppc_ioba_validate(stt, ioba, 1);
> +	if (ret != H_SUCCESS)
> +		return ret;
> +
> +	ret = kvmppc_tce_validate(stt, tce);
> +	if (ret != H_SUCCESS)
> +		return ret;
> +
> +	kvmppc_tce_put(stt, ioba >> stt->page_shift, tce);
> +
> +	return H_SUCCESS;
> +}
> +EXPORT_SYMBOL_GPL(kvmppc_h_put_tce);
> +
>   long kvmppc_h_put_tce_indirect(struct kvm_vcpu *vcpu,
>   		unsigned long liobn, unsigned long ioba,
>   		unsigned long tce_list, unsigned long npages)
> @@ -264,3 +290,29 @@ unlock_exit:
>   	return ret;
>   }
>   EXPORT_SYMBOL_GPL(kvmppc_h_put_tce_indirect);
> +
> +long kvmppc_h_stuff_tce(struct kvm_vcpu *vcpu,
> +		unsigned long liobn, unsigned long ioba,
> +		unsigned long tce_value, unsigned long npages)
> +{
> +	struct kvmppc_spapr_tce_table *stt;
> +	long i, ret;
> +
> +	stt = kvmppc_find_table(vcpu, liobn);
> +	if (!stt)
> +		return H_TOO_HARD;
> +
> +	ret = kvmppc_ioba_validate(stt, ioba, npages);
> +	if (ret != H_SUCCESS)
> +		return ret;
> +
> +	/* Check permission bits only to allow userspace poison TCE for debug */
> +	if (tce_value & (TCE_PCI_WRITE | TCE_PCI_READ))
> +		return H_PARAMETER;
> +
> +	for (i = 0; i < npages; ++i, ioba += (1ULL << stt->page_shift))
> +		kvmppc_tce_put(stt, ioba >> stt->page_shift, tce_value);
> +
> +	return H_SUCCESS;
> +}
> +EXPORT_SYMBOL_GPL(kvmppc_h_stuff_tce);
> diff --git a/arch/powerpc/kvm/book3s_64_vio_hv.c b/arch/powerpc/kvm/book3s_64_vio_hv.c
> index 44be73e..18f0227 100644
> --- a/arch/powerpc/kvm/book3s_64_vio_hv.c
> +++ b/arch/powerpc/kvm/book3s_64_vio_hv.c
> @@ -180,8 +180,8 @@ long kvmppc_gpa_to_ua(struct kvm *kvm, unsigned long gpa,
>   EXPORT_SYMBOL_GPL(kvmppc_gpa_to_ua);
>   
>   #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
> -long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
> -		      unsigned long ioba, unsigned long tce)
> +long kvmppc_rm_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
> +		unsigned long ioba, unsigned long tce)
>   {
>   	struct kvmppc_spapr_tce_table *stt = kvmppc_find_table(vcpu, liobn);
>   	long ret;
> @@ -204,7 +204,6 @@ long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
>   
>   	return H_SUCCESS;
>   }
> -EXPORT_SYMBOL_GPL(kvmppc_h_put_tce);
>   
>   static long kvmppc_rm_ua_to_hpa(struct kvm_vcpu *vcpu,
>   		unsigned long ua, unsigned long *phpa)
> @@ -296,7 +295,7 @@ unlock_exit:
>   	return ret;
>   }
>   
> -long kvmppc_h_stuff_tce(struct kvm_vcpu *vcpu,
> +long kvmppc_rm_h_stuff_tce(struct kvm_vcpu *vcpu,
>   		unsigned long liobn, unsigned long ioba,
>   		unsigned long tce_value, unsigned long npages)
>   {
> @@ -320,7 +319,6 @@ long kvmppc_h_stuff_tce(struct kvm_vcpu *vcpu,
>   
>   	return H_SUCCESS;
>   }
> -EXPORT_SYMBOL_GPL(kvmppc_h_stuff_tce);
>   
>   long kvmppc_h_get_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
>   		      unsigned long ioba)
> diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> index 85b32f1..81b0b51 100644
> --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> @@ -1942,7 +1942,7 @@ hcall_real_table:
>   	.long	DOTSYM(kvmppc_h_clear_ref) - hcall_real_table
>   	.long	DOTSYM(kvmppc_h_protect) - hcall_real_table
>   	.long	DOTSYM(kvmppc_h_get_tce) - hcall_real_table
> -	.long	DOTSYM(kvmppc_h_put_tce) - hcall_real_table
> +	.long	DOTSYM(kvmppc_rm_h_put_tce) - hcall_real_table
>   	.long	0		/* 0x24 - H_SET_SPRG0 */
>   	.long	DOTSYM(kvmppc_h_set_dabr) - hcall_real_table
>   	.long	0		/* 0x2c */
> @@ -2020,7 +2020,7 @@ hcall_real_table:
>   	.long	0		/* 0x12c */
>   	.long	0		/* 0x130 */
>   	.long	DOTSYM(kvmppc_h_set_xdabr) - hcall_real_table
> -	.long	DOTSYM(kvmppc_h_stuff_tce) - hcall_real_table
> +	.long	DOTSYM(kvmppc_rm_h_stuff_tce) - hcall_real_table
>   	.long	DOTSYM(kvmppc_rm_h_put_tce_indirect) - hcall_real_table
>   	.long	0		/* 0x140 */
>   	.long	0		/* 0x144 */


WARNING: multiple messages have this Message-ID (diff)
From: Christian Zigotzky <chzigotzky@xenosoft.de>
To: Alexey Kardashevskiy <aik@ozlabs.ru>,
	kvm-ppc@vger.kernel.org, Paolo Bonzini <pbonzini@redhat.com>,
	Paul Mackerras <paulus@samba.org>,
	kvm@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	David Gibson <david@gibson.dropbear.id.au>
Subject: [PATCH kernel] KVM: PPC: Create a virtual-mode only TCE table handlers
Date: Fri, 18 Mar 2016 10:04:45 +0100	[thread overview]
Message-ID: <56EBC4AD.5040302@xenosoft.de> (raw)
In-Reply-To: <1458269442-24292-1-git-send-email-aik@ozlabs.ru>

Hi Alexey,

Many thanks for your really fast response. I successfully compiled the 
latest Git kernel with your new patch today. After that, I successfully 
tested it with Mac-on-Linux/PR KVM. Mac OS X Tiger PowerPC (virtual G3 
CPU) works fantastic in MoL/PR KVM with the latest patched Git kernel.

Screenshot: https://plus.google.com/115515624056477014971/posts/hsQ2m6rYBdr

Have a nice day and thanks a lot to all for your hard work.

Cheers,

Christian

On 18 March 2016 at 03:50 AM, Alexey Kardashevskiy wrote:
> Upcoming in-kernel VFIO acceleration needs different handling in real
> and virtual modes which makes it hard to support both modes in
> the same handler.
>
> This creates a copy of kvmppc_rm_h_stuff_tce and kvmppc_rm_h_put_tce
> in addition to the existing kvmppc_rm_h_put_tce_indirect.
>
> This also fixes linker breakage when only PR KVM was selected (leaving
> HV KVM off): the kvmppc_h_put_tce/kvmppc_h_stuff_tce functions
> would not compile at all and the linked would fail.
>
> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> ---
>   arch/powerpc/kvm/book3s_64_vio.c        | 52 +++++++++++++++++++++++++++++++++
>   arch/powerpc/kvm/book3s_64_vio_hv.c     |  8 ++---
>   arch/powerpc/kvm/book3s_hv_rmhandlers.S |  4 +--
>   3 files changed, 57 insertions(+), 7 deletions(-)
>
> diff --git a/arch/powerpc/kvm/book3s_64_vio.c b/arch/powerpc/kvm/book3s_64_vio.c
> index 2c2d103..75469f6 100644
> --- a/arch/powerpc/kvm/book3s_64_vio.c
> +++ b/arch/powerpc/kvm/book3s_64_vio.c
> @@ -209,6 +209,32 @@ fail:
>   	return ret;
>   }
>   
> +long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
> +		      unsigned long ioba, unsigned long tce)
> +{
> +	struct kvmppc_spapr_tce_table *stt = kvmppc_find_table(vcpu, liobn);
> +	long ret;
> +
> +	/* udbg_printf("H_PUT_TCE(): liobn=0x%lx ioba=0x%lx, tce=0x%lx\n", */
> +	/* 	    liobn, ioba, tce); */
> +
> +	if (!stt)
> +		return H_TOO_HARD;
> +
> +	ret = kvmppc_ioba_validate(stt, ioba, 1);
> +	if (ret != H_SUCCESS)
> +		return ret;
> +
> +	ret = kvmppc_tce_validate(stt, tce);
> +	if (ret != H_SUCCESS)
> +		return ret;
> +
> +	kvmppc_tce_put(stt, ioba >> stt->page_shift, tce);
> +
> +	return H_SUCCESS;
> +}
> +EXPORT_SYMBOL_GPL(kvmppc_h_put_tce);
> +
>   long kvmppc_h_put_tce_indirect(struct kvm_vcpu *vcpu,
>   		unsigned long liobn, unsigned long ioba,
>   		unsigned long tce_list, unsigned long npages)
> @@ -264,3 +290,29 @@ unlock_exit:
>   	return ret;
>   }
>   EXPORT_SYMBOL_GPL(kvmppc_h_put_tce_indirect);
> +
> +long kvmppc_h_stuff_tce(struct kvm_vcpu *vcpu,
> +		unsigned long liobn, unsigned long ioba,
> +		unsigned long tce_value, unsigned long npages)
> +{
> +	struct kvmppc_spapr_tce_table *stt;
> +	long i, ret;
> +
> +	stt = kvmppc_find_table(vcpu, liobn);
> +	if (!stt)
> +		return H_TOO_HARD;
> +
> +	ret = kvmppc_ioba_validate(stt, ioba, npages);
> +	if (ret != H_SUCCESS)
> +		return ret;
> +
> +	/* Check permission bits only to allow userspace poison TCE for debug */
> +	if (tce_value & (TCE_PCI_WRITE | TCE_PCI_READ))
> +		return H_PARAMETER;
> +
> +	for (i = 0; i < npages; ++i, ioba += (1ULL << stt->page_shift))
> +		kvmppc_tce_put(stt, ioba >> stt->page_shift, tce_value);
> +
> +	return H_SUCCESS;
> +}
> +EXPORT_SYMBOL_GPL(kvmppc_h_stuff_tce);
> diff --git a/arch/powerpc/kvm/book3s_64_vio_hv.c b/arch/powerpc/kvm/book3s_64_vio_hv.c
> index 44be73e..18f0227 100644
> --- a/arch/powerpc/kvm/book3s_64_vio_hv.c
> +++ b/arch/powerpc/kvm/book3s_64_vio_hv.c
> @@ -180,8 +180,8 @@ long kvmppc_gpa_to_ua(struct kvm *kvm, unsigned long gpa,
>   EXPORT_SYMBOL_GPL(kvmppc_gpa_to_ua);
>   
>   #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
> -long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
> -		      unsigned long ioba, unsigned long tce)
> +long kvmppc_rm_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
> +		unsigned long ioba, unsigned long tce)
>   {
>   	struct kvmppc_spapr_tce_table *stt = kvmppc_find_table(vcpu, liobn);
>   	long ret;
> @@ -204,7 +204,6 @@ long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
>   
>   	return H_SUCCESS;
>   }
> -EXPORT_SYMBOL_GPL(kvmppc_h_put_tce);
>   
>   static long kvmppc_rm_ua_to_hpa(struct kvm_vcpu *vcpu,
>   		unsigned long ua, unsigned long *phpa)
> @@ -296,7 +295,7 @@ unlock_exit:
>   	return ret;
>   }
>   
> -long kvmppc_h_stuff_tce(struct kvm_vcpu *vcpu,
> +long kvmppc_rm_h_stuff_tce(struct kvm_vcpu *vcpu,
>   		unsigned long liobn, unsigned long ioba,
>   		unsigned long tce_value, unsigned long npages)
>   {
> @@ -320,7 +319,6 @@ long kvmppc_h_stuff_tce(struct kvm_vcpu *vcpu,
>   
>   	return H_SUCCESS;
>   }
> -EXPORT_SYMBOL_GPL(kvmppc_h_stuff_tce);
>   
>   long kvmppc_h_get_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
>   		      unsigned long ioba)
> diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> index 85b32f1..81b0b51 100644
> --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> @@ -1942,7 +1942,7 @@ hcall_real_table:
>   	.long	DOTSYM(kvmppc_h_clear_ref) - hcall_real_table
>   	.long	DOTSYM(kvmppc_h_protect) - hcall_real_table
>   	.long	DOTSYM(kvmppc_h_get_tce) - hcall_real_table
> -	.long	DOTSYM(kvmppc_h_put_tce) - hcall_real_table
> +	.long	DOTSYM(kvmppc_rm_h_put_tce) - hcall_real_table
>   	.long	0		/* 0x24 - H_SET_SPRG0 */
>   	.long	DOTSYM(kvmppc_h_set_dabr) - hcall_real_table
>   	.long	0		/* 0x2c */
> @@ -2020,7 +2020,7 @@ hcall_real_table:
>   	.long	0		/* 0x12c */
>   	.long	0		/* 0x130 */
>   	.long	DOTSYM(kvmppc_h_set_xdabr) - hcall_real_table
> -	.long	DOTSYM(kvmppc_h_stuff_tce) - hcall_real_table
> +	.long	DOTSYM(kvmppc_rm_h_stuff_tce) - hcall_real_table
>   	.long	DOTSYM(kvmppc_rm_h_put_tce_indirect) - hcall_real_table
>   	.long	0		/* 0x140 */
>   	.long	0		/* 0x144 */


  reply	other threads:[~2016-03-18  9:04 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-18  2:50 [PATCH kernel] KVM: PPC: Create a virtual-mode only TCE table handlers Alexey Kardashevskiy
2016-03-18  2:50 ` Alexey Kardashevskiy
2016-03-18  9:04 ` Christian Zigotzky [this message]
2016-03-18  9:04   ` Christian Zigotzky
2016-03-18  9:16 ` Paul Mackerras
2016-03-18  9:16   ` Paul Mackerras
2016-03-18  9:57   ` Paolo Bonzini
2016-03-18  9:57     ` Paolo Bonzini
2016-03-19 13:30     ` Christian Zigotzky
2016-03-19 13:30       ` Christian Zigotzky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56EBC4AD.5040302@xenosoft.de \
    --to=chzigotzky@xenosoft.de \
    --cc=aik@ozlabs.ru \
    --cc=david@gibson.dropbear.id.au \
    --cc=kvm-ppc@vger.kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=paulus@samba.org \
    --cc=pbonzini@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.