All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: Glauber Costa <glommer@redhat.com>
Cc: aliguori@us.ibm.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC] queue_work proposal
Date: Thu, 03 Sep 2009 14:32:45 +0300	[thread overview]
Message-ID: <4A9FA95D.60404@redhat.com> (raw)
In-Reply-To: <20090903111505.GO30340@mothafucka.localdomain>

On 09/03/2009 02:15 PM, Glauber Costa wrote:
>
>> on_vcpu() and queue_work() are fundamentally different (yes, I see the
>> wait parameter, and I think there should be two separate functions for
>> such different behaviours).
>>      
> Therefore, the name change. The exact on_vcpu behaviour, however, can be
> implemented ontop of queue_work().

Will there be any use for asynchronous queue_work()?

It's a dangerous API.

> Instead of doing that, I opted for using it
> implicitly inside kvm_vcpu_ioctl, to guarantee that vcpu ioctls will always run
> on the right thread context.

I think it's reasonable to demand that whoever calls kvm_vcpu_ioctl() 
know what they are doing (and they'll get surprising results if it 
switches threads implicitly).

> Looking at qemu-kvm, it seems that there are a couple
> of other functions that are not ioctls, and need on_vcpu semantics. Using them becomes
> a simple matter of doing:
>
>     queue_work(env, func, data, 1);
>
> I really don't see the big difference you point. They are both there to force a specific
> function to be executed in the right thread context.
>    

One of them is synchronous, meaning the data can live on stack and no 
special synchronization is needed, while the other is synchronous, 
meaning explicit memory management and end-of-work synchronization is 
needed.

>> Why do we need queue_work() in the first place?
>>      
> To force a function to be executed in the correct thread context.
> Why do we need on_vcpu in the first place?
>    

on_vcpu() is a subset of queue_work().  I meant, why to we need the 
extra functionality?

>> Is there a way to limit the queue size to prevent overflow?
>>      
> It can be, but it gets awkward. What do you do when you want a function needs to execute
> on another thread, but you can't? Block it? Refuse?
>    

What if the thread is busy?  You grow the queue to an unbounded size?

> We could pick one, but I see no need. The vast majority of work will never get queued,
> since we'll be in the right context already.
>    

A more powerful API comes with increased responsibilities.

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

  reply	other threads:[~2009-09-03 11:32 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-03  0:52 [Qemu-devel] [RFC] queue_work proposal Glauber Costa
2009-09-03  7:36 ` [Qemu-devel] " Paolo Bonzini
2009-09-03 11:07   ` Glauber Costa
2009-09-03  8:45 ` [Qemu-devel] " Avi Kivity
2009-09-03 11:15   ` Glauber Costa
2009-09-03 11:32     ` Avi Kivity [this message]
2009-09-03 12:11       ` Glauber Costa
2009-09-03 13:43         ` Avi Kivity
2009-09-03 16:46           ` Glauber Costa

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=4A9FA95D.60404@redhat.com \
    --to=avi@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=glommer@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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.