diff mbox

[PULL,1/4] KVM: s390: randomize sca address

Message ID 1395754523-43697-2-git-send-email-borntraeger@de.ibm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Christian Borntraeger March 25, 2014, 1:35 p.m. UTC
We allocate a page for the 2k sca, so lets use the space to improve
hit rate of some internal cpu caches. No need to change the freeing
of the page, as this will shift away the page offset bits anyway.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
---
 arch/s390/kvm/kvm-s390.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Paolo Bonzini March 25, 2014, 1:53 p.m. UTC | #1
Il 25/03/2014 14:35, Christian Borntraeger ha scritto:
> We allocate a page for the 2k sca, so lets use the space to improve
> hit rate of some internal cpu caches. No need to change the freeing
> of the page, as this will shift away the page offset bits anyway.
>
> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
> ---
>  arch/s390/kvm/kvm-s390.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
> index 7337c57..a02979f 100644
> --- a/arch/s390/kvm/kvm-s390.c
> +++ b/arch/s390/kvm/kvm-s390.c
> @@ -215,6 +215,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
>  {
>  	int rc;
>  	char debug_name[16];
> +	static unsigned long sca_offset;
>
>  	rc = -EINVAL;
>  #ifdef CONFIG_KVM_S390_UCONTROL
> @@ -236,6 +237,10 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
>  	kvm->arch.sca = (struct sca_block *) get_zeroed_page(GFP_KERNEL);
>  	if (!kvm->arch.sca)
>  		goto out_err;
> +	spin_lock(&kvm_lock);
> +	sca_offset = (sca_offset + 16) & 0x7f0;
> +	kvm->arch.sca = (struct sca_block *) ((char *) kvm->arch.sca + sca_offset);
> +	spin_unlock(&kvm_lock);
>
>  	sprintf(debug_name, "kvm-%u", current->pid);
>
>

Does this have to remain the same across migration?

Paolo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Christian Borntraeger March 25, 2014, 2:04 p.m. UTC | #2
On 25/03/14 14:53, Paolo Bonzini wrote:
> Il 25/03/2014 14:35, Christian Borntraeger ha scritto:
>> We allocate a page for the 2k sca, so lets use the space to improve
>> hit rate of some internal cpu caches. No need to change the freeing
>> of the page, as this will shift away the page offset bits anyway.
>>
>> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
>> Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
>> ---
>>  arch/s390/kvm/kvm-s390.c | 5 +++++
>>  1 file changed, 5 insertions(+)
>>
>> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
>> index 7337c57..a02979f 100644
>> --- a/arch/s390/kvm/kvm-s390.c
>> +++ b/arch/s390/kvm/kvm-s390.c
>> @@ -215,6 +215,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
>>  {
>>      int rc;
>>      char debug_name[16];
>> +    static unsigned long sca_offset;
>>
>>      rc = -EINVAL;
>>  #ifdef CONFIG_KVM_S390_UCONTROL
>> @@ -236,6 +237,10 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
>>      kvm->arch.sca = (struct sca_block *) get_zeroed_page(GFP_KERNEL);
>>      if (!kvm->arch.sca)
>>          goto out_err;
>> +    spin_lock(&kvm_lock);
>> +    sca_offset = (sca_offset + 16) & 0x7f0;
>> +    kvm->arch.sca = (struct sca_block *) ((char *) kvm->arch.sca + sca_offset);
>> +    spin_unlock(&kvm_lock);
>>
>>      sprintf(debug_name, "kvm-%u", current->pid);
>>
>>
> 
> Does this have to remain the same across migration?

Nope, the sca address is just an internal _host_ detail and does not belong/influence
the guest.

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 7337c57..a02979f 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -215,6 +215,7 @@  int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
 {
 	int rc;
 	char debug_name[16];
+	static unsigned long sca_offset;
 
 	rc = -EINVAL;
 #ifdef CONFIG_KVM_S390_UCONTROL
@@ -236,6 +237,10 @@  int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
 	kvm->arch.sca = (struct sca_block *) get_zeroed_page(GFP_KERNEL);
 	if (!kvm->arch.sca)
 		goto out_err;
+	spin_lock(&kvm_lock);
+	sca_offset = (sca_offset + 16) & 0x7f0;
+	kvm->arch.sca = (struct sca_block *) ((char *) kvm->arch.sca + sca_offset);
+	spin_unlock(&kvm_lock);
 
 	sprintf(debug_name, "kvm-%u", current->pid);