qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Cam Macdonell <cam@cs.ualberta.ca>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Passing fds through a qemu char device
Date: Tue, 26 May 2009 11:47:38 -0600	[thread overview]
Message-ID: <4A1C2B3A.7070209@cs.ualberta.ca> (raw)
In-Reply-To: <4A175B21.6010306@codemonkey.ws>

Anthony Liguori wrote:
> Cam Macdonell wrote:
>>
>> Hi,
>>
>> I'm trying to pass eventfds between qemu processes and I'm trying to 
>> use a qemu char device to do this.  AFAICT with a qemu_chr_device the 
>> polling handler only has support to call read()/write(), not 
>> send/recvmsg() which are necessary to send and receive fds with 
>> SCM_RIGHTS through the socket.  Is this true or is there support in 
>> Qemu for recvmsg() that I'm not seeing?
> 
> The TCP/Unix implementations for CharDriverState use send/recv.  You can 
> convert the recv path to always use recvmsg() and introduce an 
> qemu_chr_ioctl() to pass/recv fds.

If I understand you correctly, you are suggesting replacing recv() with 
recvmsg() for all qemu char devices?  I would prefer a way to change a 
particular char device to use recvmsg instead of recv, and then create 
qemu_chr_device out of the received fds as needed.  I think this would 
minimize the changes to the existing char device code.  Currently, I 
can't see how to change to recvmsg for an individual char device without 
changing tcp_chr_read(void * opaque) in qemu-char.c (which would affect 
all tcp char devices).

> You can be smart about storing the recv'd fd in the char driver state 
> and that would allow qemu_chr_ioctl(CHR_IOCTL_GET_FD) to not block.  
> qemu_chr_ioctl(CHR_IOCTL_SET_FD) would set the fd to be sent for the 
> next qemu_chr_write() operation.

My goal is to support receiving several fds to support eventfd 
notification between multiple guests (the list of fds would come from an 
external server).  As I mentioned, I would like the qemu process to 
create additonal char devices for each recv'd fd as this would save 
modifying the char driver state.

> 
> Just a thought, other interfaces could also work.
> 

Thanks, it is helpful.

Cam

      reply	other threads:[~2009-05-26 17:47 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-22 22:32 [Qemu-devel] Passing fds through a qemu char device Cam Macdonell
2009-05-23  2:10 ` Anthony Liguori
2009-05-26 17:47   ` Cam Macdonell [this message]

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=4A1C2B3A.7070209@cs.ualberta.ca \
    --to=cam@cs.ualberta.ca \
    --cc=anthony@codemonkey.ws \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).