All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Marcelo Tossati <mtosatti@redhat.com>,
	Carsten Otte <cotte@de.ibm.com>, Alexander Graf <agraf@suse.de>,
	Jens Freimann <jfrei@linux.vnet.ibm.com>,
	Cornelia Huck <cornelia.huck@de.ibm.com>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Martin Schwidefsky <schwidefsky@de.ibm.com>,
	Heinz Graalfs <graalfs@linux.vnet.ibm.com>,
	KVM <kvm@vger.kernel.org>, Konstantin Weitz <WEITZKON@de.ibm.com>
Subject: Re: [PATCH 1/3v2] kvm-s390: Implement the directed yield (diag 9c) hypervisor call for KVM
Date: Tue, 24 Apr 2012 16:06:38 +0300	[thread overview]
Message-ID: <4F96A55E.1050703@redhat.com> (raw)
In-Reply-To: <1335272114-64505-1-git-send-email-borntraeger@de.ibm.com>

On 04/24/2012 03:55 PM, Christian Borntraeger wrote:
> From: Konstantin Weitz <WEITZKON@de.ibm.com>
>
> This patch implements the directed yield hypercall found on other
> System z hypervisors. It delegates execution time to the virtual cpu
> specified in the instruction's parameter.
>
> Useful to avoid long spinlock waits in the guest.
>
>  
>  struct kvm_s390_io_info {
> diff --git a/arch/s390/kvm/diag.c b/arch/s390/kvm/diag.c
> index a353f0e..022962b 100644
> --- a/arch/s390/kvm/diag.c
> +++ b/arch/s390/kvm/diag.c
> @@ -53,6 +53,45 @@ static int __diag_time_slice_end(struct kvm_vcpu *vcpu)
>  	return 0;
>  }
>  
> +static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
> +{
> +	struct kvm *kvm = vcpu->kvm;
> +	struct kvm_vcpu *tcpu;
> +	int tid;
> +	int i;
> +
> +	tid = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
> +	vcpu->stat.diagnose_9c++;
> +	VCPU_EVENT(vcpu, 5, "diag time slice end directed to %d", tid);
> +
> +	if (tid == vcpu->vcpu_id)
> +		return 0;
> +
> +	kvm_for_each_vcpu(i, tcpu, kvm) {
> +		if (tcpu->vcpu_id == tid) {
> +			struct task_struct *task = NULL;
> +			struct pid *pid;
> +			rcu_read_lock();
> +			pid = rcu_dereference(tcpu->pid);
> +			if (pid)
> +				task = get_pid_task(tcpu->pid, PIDTYPE_PID);
> +			rcu_read_unlock();
> +			if (!task)
> +				break;
> +			if (task->flags & PF_VCPU) {
> +				put_task_struct(task);
> +				break;
> +			}
> +			if (yield_to(task, 1)) {
> +				put_task_struct(task);
> +				return 0;
> +			}
> +			put_task_struct(task);
> +		}
> +	}
> +	return 0;
> +}
> +
>

I think the code will me more readable, and less obvious that is was
copied from kvm_vcpu_on_spin(), if you put all the processing outside
the loop, except for matching the vpu itself.

So the code reads

   find a vcpu
   obtain the task
   do the yield

instead of looking like you're doing the processing for every vcpu.  The
loop is just a slow lookup which might some day be replaced by a table
lookup.

-- 
error compiling committee.c: too many arguments to function


  reply	other threads:[~2012-04-24 13:07 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-24  7:24 [PATCH 0/3] Fixes and feature for kvm-s390 Christian Borntraeger
2012-04-24  7:24 ` [PATCH 1/3] kvm-s390: Implement the directed yield (diag 9c) hypervisor call for KVM Christian Borntraeger
2012-04-24 12:04   ` Avi Kivity
2012-04-24 12:44     ` Christian Borntraeger
2012-04-24 12:55       ` [PATCH 1/3v2] " Christian Borntraeger
2012-04-24 13:06         ` Avi Kivity [this message]
2012-04-24 15:47           ` Christian Borntraeger
2012-04-24 16:15             ` Avi Kivity
2012-04-24 16:21               ` Christian Borntraeger
2012-04-24 16:22                 ` Avi Kivity
2012-04-25 13:30                   ` [PATCH 0/2] rework kvm_vcpu_on_spin Christian Borntraeger
2012-04-25 13:30                     ` [PATCH 1/2] kvm-s390: Implement the directed yield (diag 9c) hypervisor call for KVM Christian Borntraeger
2012-04-26 12:06                       ` Alexander Graf
2012-04-26 12:19                         ` Christian Borntraeger
2012-04-26 12:26                           ` Alexander Graf
2012-04-25 13:30                     ` [PATCH 2/2] kvm-s390: use kvm_vcpu_on_spin for diag 0x44 Christian Borntraeger
2012-04-29 11:10                     ` [PATCH 0/2] rework kvm_vcpu_on_spin Avi Kivity
2012-06-06 12:55     ` trace points and ABI Christian Borntraeger
2012-06-06 13:12       ` Avi Kivity
2012-04-24  7:24 ` [PATCH 2/3] kvm-s390: Handle sckpf instruction Christian Borntraeger
2012-04-24  7:24 ` [PATCH 3/3] kvm-s390: implement KVM_CAP_MAX_VCPUS Christian Borntraeger
2012-04-24 12:06   ` Avi Kivity
2012-04-24 12:47     ` Christian Borntraeger
2012-04-24 13:01       ` Avi Kivity
2012-05-01  0:51         ` Marcelo Tosatti
2012-05-01  1:00           ` Marcelo Tosatti
2012-05-02  8:50             ` [PATCH 0/1] Updated Patch for NR/MAX VCPU on s390 Christian Borntraeger
2012-05-02  8:50               ` [PATCH 1/1] kvm-s390x: implement KVM_CAP_NR/MAX_VCPUS Christian Borntraeger
2012-05-02 21:36                 ` Marcelo Tosatti

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=4F96A55E.1050703@redhat.com \
    --to=avi@redhat.com \
    --cc=WEITZKON@de.ibm.com \
    --cc=agraf@suse.de \
    --cc=borntraeger@de.ibm.com \
    --cc=cornelia.huck@de.ibm.com \
    --cc=cotte@de.ibm.com \
    --cc=graalfs@linux.vnet.ibm.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=jfrei@linux.vnet.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=schwidefsky@de.ibm.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.