From: Greg KH <gregkh@linuxfoundation.org>
To: Christian Brauner <christian@brauner.io>
Cc: tkjos@android.com, maco@android.com,
linux-kernel@vger.kernel.org, devel@driverdev.osuosl.org,
kilobyte@angband.pl, darrick.wong@oracle.com,
chouryzhou@tencent.com, david@fromorbit.com, arve@android.com,
joel@joelfernandes.org, Todd Kjos <tkjos@google.com>
Subject: Re: [PATCH] binder: implement binderfs
Date: Wed, 5 Dec 2018 21:01:45 +0100 [thread overview]
Message-ID: <20181205200145.GA25230@kroah.com> (raw)
In-Reply-To: <20181204131239.15158-1-christian@brauner.io>
On Tue, Dec 04, 2018 at 02:12:39PM +0100, Christian Brauner wrote:
> As discussed at Linux Plumbers Conference 2018 in Vancouver [1] this is the
> implementation of binderfs. If you want to skip reading and just see how it
> works, please go to [2].
First off, thanks for doing this so quickly. I think the overall idea
and implementation is great, I just have some minor issues with the user
api:
> /* binder-control */
> Each new binderfs instance comes with a binder-control device. No other
> devices will be present at first. The binder-control device can be used to
> dynamically allocate binder devices. All requests operate on the binderfs
> mount the binder-control device resides in:
> - BINDER_CTL_ADD
> Allocate a new binder device.
> Assuming a new instance of binderfs has been mounted at /dev/binderfs via
> mount -t binderfs binderfs /dev/binderfs. Then a request to create a new
> binder device can be made via:
>
> struct binderfs_device device = {0};
> int fd = open("/dev/binderfs/binder-control", O_RDWR);
> ioctl(fd, BINDER_CTL_ADD, &device);
>
> The struct binderfs_device will be used to return the major and minor
> number, as well as the index used as the new name for the device.
> Binderfs devices can simply be removed via unlink().
I think you should provide a name in the BINDER_CTL_ADD command. That
way you can easily emulate the existing binder queues, and it saves you
a create/rename sequence that you will be forced to do otherwise. Why
not do it just in a single command?
That way also you don't need to care about the major/minor number at
all. Userspace should never need to worry about that, use a name,
that's the best thing. Also, it allows you to drop the use of the idr,
making the kernel code simpler overall.
> /* Implementation details */
> - When binderfs is registered as a new filesystem it will dynamically
> allocate a new major number. The allocated major number will be returned
> in struct binderfs_device when a new binder device is allocated.
Why does userspace care about major/minor numbers at all? You should
just be able to deal with the binder "names", that's all that userspace
uses normally as you are not calling mknod() yourself.
> Minor numbers that have been given out are tracked in a global idr struct
> that is capped at BINDERFS_MAX_MINOR. The minor number tracker is
> protected by a global mutex. This is the only point of contention between
> binderfs mounts.
I doubt this will be any real contention given that setting up / tearing
down binder mounts is going to be rare, right? Well, hopefully, who
knows with some container systems...
> - The naming scheme for binder devices is binder%d. Each binderfs mount
> starts numbering of new binder devices at 0 up to n. The indeces used in
> constructing the name are tracked in a struct idr that is per-binderfs
> super block.
Again, let userspace pick the name, as you will have to rename it anyway
to get userspace to work properly with it.
I'll stop repeating myself now :)
thanks,
greg k-h
next prev parent reply other threads:[~2018-12-05 20:01 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-04 13:12 [PATCH] binder: implement binderfs Christian Brauner
2018-12-05 20:01 ` Greg KH [this message]
2018-12-05 21:42 ` Christian Brauner
2018-12-06 14:04 ` Greg KH
2018-12-06 17:45 ` Christian Brauner
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=20181205200145.GA25230@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=arve@android.com \
--cc=chouryzhou@tencent.com \
--cc=christian@brauner.io \
--cc=darrick.wong@oracle.com \
--cc=david@fromorbit.com \
--cc=devel@driverdev.osuosl.org \
--cc=joel@joelfernandes.org \
--cc=kilobyte@angband.pl \
--cc=linux-kernel@vger.kernel.org \
--cc=maco@android.com \
--cc=tkjos@android.com \
--cc=tkjos@google.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.