Re: per file descriptor device driver data ?

From: Konstantin Belousov <kostikbel_at_gmail.com>
Date: Fri, 29 May 2015 15:37:53 +0300
On Fri, May 29, 2015 at 02:24:14PM +0200, Luigi Rizzo wrote:
> Hi,
> in the kernel module for netmap we need to store some
> private data associated to each open netmap file descriptor.
> 
> Our current design uses devfs_set_cdevpriv() during the open()
> handler, but for some reason a subsequent devfs_get_cdevpriv(p)
> returns *p = NULL in additional threads created by the process
> that did the open().
> 
> The manpage devfs_set_cdevpriv() does not mention threads,
> and so i am a bit puzzled why the cdevpriv is only good
> for the original thread.
Probably, due to a bug, and the bug is more likely in the consumer code,
than in cdevpriv. The cdevpriv requires the current file context, i.e.
you should be in the context of the syscall which is operating on the
file, to get the file related private data.

If you believe that the bug is in cdevpriv interface, please provide the
minimal example to demonstrate the issue.

> 
> In the linux version 'struct file' has a "private_data" field
> that we use for that purpose, and remains valid on all threads.
> i wonder if there is something similar we can use in FreeBSD.
Received on Fri May 29 2015 - 10:37:59 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:57 UTC