All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel De Graaf <dgdegra@tycho.nsa.gov>
To: Ian Campbell <Ian.Campbell@citrix.com>
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>
Subject: Re: [PATCH 2/2] xen-gntalloc: Userspace grant allocation driver
Date: Wed, 08 Dec 2010 13:15:11 -0500	[thread overview]
Message-ID: <4CFFCB2F.2000000@tycho.nsa.gov> (raw)
In-Reply-To: <1291826879.13966.4583.camel@zakaz.uk.xensource.com>

On 12/08/2010 11:47 AM, Ian Campbell wrote:
> On Fri, 2010-12-03 at 15:38 +0000, Daniel De Graaf wrote:
>> This allows a userspace application to allocate a shared page for
>> implementing inter-domain communication or device drivers. These
>> shared pages can be mapped using the gntdev device or by the kernel
>> in another domain.
> 
> This seems like useful functionality but is it really necessary for it
> to be a separate driver to the existing gntdev driver? The broad high
> level semantics of ioctl+mmap seem pretty similar. It also has some
> similarities with the sort of device we will need in order to properly
> allocate memory which is safe to use as an argument to a hypercall.

The functionality is similar enough that I considered changing this to
additional ioctl() in the gntdev device, but decided to leave them split
because the semantics of creating a shared page are slightly more dangerous
than simply mapping pages from other domains.

As noted in the driver, due to a limitation of Xen's grant table API, there
is no way for a guest to force other guests to unmap shared pages once they
have been mapped. This means that if a userspace application using gntalloc
crashes, the other end may not notice and would keep the page mapped until
another event (application restarts and requests peers to clean up old
session, or the peer itself terminates and unmaps the pages). This will use
up both guest memory and space in the grant table (normally limited to 32
pages, so the limit on gntalloc will not allow exhaustion).

If the devices are distinct, it is possible to allow applications access to
one without allowing access to both; I am not aware of any easy way to do this
if they are both implemented by similar ioctl()/mmap() calls on a single
device node.

A hypercall-safe memory allocation device will likely share code from this
device, as it shares some of the mapping code with gntdev. Are there existing
patches for the hypercall buffer allocation? It may be useful to try to factor
out a some common code for dealing with pages used to communicate between Xen
and userspace.

> Do you have an example of a user of the driver?

I do have an communication library (vchan, based on code from Qubes); I am
currently modifying it to allow the use of more than one page for the ring
to reduce context switches when passing large amounts of data (this cost is
increased due to both ends being in userspace, rather than kernel space). If
that isn't ready soon, I will just post the version of vchan using this
device and the modified gntdev API.

> Thanks,
> Ian.
> 

-- 
Daniel De Graaf
National Security Agency

  reply	other threads:[~2010-12-08 18:15 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-03 15:36 [PATCH 0/2] Userspace grant communication Daniel De Graaf
2010-12-03 15:37 ` [PATCH 1/2] xen-gntdev: support mapping in HVM domains Daniel De Graaf
2010-12-08 16:40   ` Ian Campbell
2010-12-08 18:15     ` Daniel De Graaf
2010-12-03 15:38 ` [PATCH 2/2] xen-gntalloc: Userspace grant allocation driver Daniel De Graaf
2010-12-08 16:47   ` Ian Campbell
2010-12-08 18:15     ` Daniel De Graaf [this message]
2010-12-08 20:17       ` Daniel De Graaf
2010-12-09  1:14     ` Eamon Walsh
2010-12-03 16:30 ` [PATCH 0/2] Userspace grant communication Pasi Kärkkäinen
2010-12-03 18:27   ` Daniel De Graaf
2010-12-03 18:39     ` [PATCH 0/2] Userspace grant communication / XenClient (XCI) inter-domain communication Pasi Kärkkäinen
2010-12-04 19:54       ` Ian Pratt
2010-12-04 20:32         ` Pasi Kärkkäinen
2010-12-04 21:50         ` Vasiliy G Tolstov
2010-12-04 22:04           ` Ross Philipson
2010-12-07  0:30           ` Ian Pratt

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=4CFFCB2F.2000000@tycho.nsa.gov \
    --to=dgdegra@tycho.nsa.gov \
    --cc=Ian.Campbell@citrix.com \
    --cc=xen-devel@lists.xensource.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.