All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nick Piggin <nickpiggin@yahoo.com.au>
To: "Dave Airlie" <airlied@gmail.com>
Cc: "Keith Packard" <keithp@keithp.com>,
	"Christoph Hellwig" <hch@infradead.org>,
	"Eric Anholt" <eric@anholt.net>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Export shmem_file_setup and shmem_getpage for DRM-GEM
Date: Tue, 19 Aug 2008 20:00:46 +1000	[thread overview]
Message-ID: <200808192000.47070.nickpiggin@yahoo.com.au> (raw)
In-Reply-To: <21d7e9970808181817n1d67dc33s58b8d07f63e411a7@mail.gmail.com>

On Tuesday 19 August 2008 11:17, Dave Airlie wrote:
> On Tue, Aug 5, 2008 at 2:43 PM, Nick Piggin <nickpiggin@yahoo.com.au> wrote:
> > On Tuesday 05 August 2008 07:58, Keith Packard wrote:
> >> On Mon, 2008-08-04 at 19:02 +1000, Nick Piggin wrote:
> >> > > I suppose we could have user space allocate the shmem file (either
> >> > > via tmpfs or sysv ipc). tmpfs suffers from the maxfd issue, while
> >> > > sysv ipc runs up against the SHMMAX value.
> >> >
> >> > This is how I'd suggested it work as well. I think a little bit
> >> > more effort should be spent looking at making this work.
> >>
> >> Well, I've spent a day thinking about using existing user-space APIs to
> >> get at shmem files. While it's nice that we've discovered a
> >> filesystem-independent mechanism to pin file pages, we haven't found
> >> anything similar for creating the files. In particular, what I want is:
> >>
> >>  1) Anonymous files backed by swap
> >>  2) Freed when the last process using them exits
> >>  3) That never appear in the file system
> >>  4) Do not consume a low FD (yeah, I know, rewrite the desktop)
> >>
> >> So, what I could do is
> >>
> >>       char    template[] = "/dev/shm/drm-XXXXXX";
> >>       int     fd;
> >>       fd = mkstemp (template);
> >>       unlink (template);
> >>       ftruncate (fd, size)
> >>       object = drm_create_an_object_for_a_file (fd);
> >>       close (fd);
> >>
> >> While I haven't written any code yet, this should work and will even be
> >> compatible with my current user-space API. I have to create a DRM object
> >> for the file in any case, and so I don't need to hold onto the fd.
> >> Releasing the fd also eliminates any ulimit issues.
> >>
> >> The drm_create_an_object_for_a_file call could return another fd. But,
> >> note that the original shmem fd has no real value to the application in
> >> this case.
> >>
> >> I can imagine other cases where mapping non-shmem files would make sense
> >> though, in particular it's fairly easy to envision mapping an image file
> >> to the GTT and having the graphics process decode and display it without
> >> any additional copies. I think this demonstrates the potential utility
> >> of the general file mapping operation.
> >>
> >> But, I'd like to have you reconsider whether it makes sense for user
> >> space to go through the above dance to create anonymous shared objects
> >> when the kernel already supports precisely the desired semantics and
> >> even exposes them to the ipc/shm implementation.
> >
> > In my opinion, doing this little song and dance (which is a few lines
> > of quite well defined APIs, btw) in userspace is preferable to adding
> > a single line or exporting a single function in kernel space. Unless
> > there is a better reason than eliminating a few lines of userspace code.
>
> Now I also have to do the same song and dance for in-kernel allocated
> objects? still think this is acceptable... I'm not even sure what vfs calls
> I really need in-kernel to do that.
>
> If someone codes up the in-kernel path to do this using 4-5 API calls
> instead of one exported
> function that IPC/SHM already does then maybe we can gauge the uglyness vs
> that.

Not exactly sure what you mean by this. But I would like to see an effort
made to use existing userspace APIs in order to do this swappable object
allocation over tmpfs scheme. As I said, I don't object to a nice kernel
implementation, but we would be in a much better position to assess it if
we had an existing userspace implementation to compare it with.

  reply	other threads:[~2008-08-19 10:01 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-01  6:58 [PATCH] PCI: Add pci_read_base() API Eric Anholt
2008-08-01  6:58 ` [PATCH] Export shmem_file_setup and shmem_getpage for DRM-GEM Eric Anholt
2008-08-01  6:58   ` [PATCH] drm: Add GEM ("graphics execution manager") to i915 driver Eric Anholt
2008-08-01 15:44     ` Randy Dunlap
2008-08-01 18:11       ` Keith Packard
2008-08-06  1:11       ` Eric Anholt
2008-08-01  7:10   ` [PATCH] Export shmem_file_setup and shmem_getpage for DRM-GEM Eric Anholt
2008-08-01 10:57   ` Hugh Dickins
2008-08-01 18:06     ` Keith Packard
2008-08-01 20:50   ` Christoph Hellwig
2008-08-01 23:01     ` Keith Packard
2008-08-03 12:49       ` John Stoffel
2008-08-03 17:52         ` Keith Packard
2008-08-03 23:35           ` files/process scaling problem? (was: [PATCH] Export shmem_file_setup and shmem_getpage for DRM-GEM) Ingo Oeser
2008-08-04  0:19             ` Keith Packard
2008-08-04  8:19               ` Alan Cox
2008-08-04 13:51                 ` Arjan van de Ven
2008-08-04 14:11                   ` Alan Cox
2008-08-04 16:38                     ` Arjan van de Ven
2008-08-04 16:58                     ` Keith Packard
2008-08-04 21:46                       ` Ingo Oeser
2008-08-04 22:20                         ` Dave Airlie
2008-08-05  0:34                         ` Keith Packard
2008-08-11  1:23       ` [PATCH] Export shmem_file_setup and shmem_getpage for DRM-GEM Christoph Hellwig
2008-08-11  3:03         ` [PATCH] Export shmem_file_setup " Keith Packard
2008-08-04  1:54     ` [PATCH] Export shmem_file_setup and shmem_getpage " Keith Packard
2008-08-04  9:02       ` Nick Piggin
2008-08-04 10:26         ` Keith Packard
2008-08-04 10:43           ` Nick Piggin
2008-08-04 11:45             ` Keith Packard
2008-08-04 17:09               ` Hugh Dickins
2008-08-04 17:25                 ` Keith Packard
2008-08-04 18:39                   ` Hugh Dickins
2008-08-04 19:20                     ` Keith Packard
2008-08-04 19:55                       ` Hugh Dickins
2008-08-04 21:37                         ` Keith Packard
2008-08-05  2:25                         ` John Stoffel
2008-08-05  4:28                           ` Keith Packard
2008-08-06 16:20                             ` Stephane Marchesin
2008-08-06 17:24                               ` Arjan van de Ven
2008-08-06 17:32                                 ` Stephane Marchesin
2008-08-06 17:56                                   ` Keith Packard
2008-08-06 18:09                                     ` Stephane Marchesin
2008-08-06 21:22                                       ` Keith Packard
2008-08-07  2:16                                 ` Stephane Marchesin
2008-08-07  2:57                                   ` Keith Packard
2008-08-11  1:34                                 ` Christoph Hellwig
2008-08-05  4:28                 ` Nick Piggin
2008-08-11  1:30                 ` Christoph Hellwig
2008-08-04 21:58         ` Keith Packard
2008-08-04 22:22           ` Dave Airlie
2008-08-05  4:43           ` Nick Piggin
2008-08-05  5:19             ` Keith Packard
2008-08-07  0:45             ` Jesse Barnes
2008-08-19  1:17             ` Dave Airlie
2008-08-19 10:00               ` Nick Piggin [this message]
2008-08-19 16:46                 ` Keith Packard
2008-08-19 18:50                   ` Jesse Barnes
2008-08-21 13:42                     ` Jerome Glisse
2008-08-21 16:15                       ` Jesse Barnes

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=200808192000.47070.nickpiggin@yahoo.com.au \
    --to=nickpiggin@yahoo.com.au \
    --cc=airlied@gmail.com \
    --cc=eric@anholt.net \
    --cc=hch@infradead.org \
    --cc=keithp@keithp.com \
    --cc=linux-kernel@vger.kernel.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.