Commit 12d909ca authored by Li Li's avatar Li Li Committed by Greg Kroah-Hartman
Browse files

binderfs: add new binder devices to binder_devices



When binderfs is not enabled, the binder driver parses the kernel
config to create all binder devices. All of the new binder devices
are stored in the list binder_devices.

When binderfs is enabled, the binder driver creates new binder devices
dynamically when userspace applications call BINDER_CTL_ADD ioctl. But
the devices created in this way are not stored in the same list.

This patch fixes that.

Signed-off-by: default avatarLi Li <dualli@google.com>
Acked-by: default avatarCarlos Llamas <cmllamas@google.com>
Link: https://lore.kernel.org/r/20241218212935.4162907-2-dualli@chromium.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b3b9b3cc
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -6928,6 +6928,11 @@ const struct binder_debugfs_entry binder_debugfs_entries[] = {
	{} /* terminator */
};

void binder_add_device(struct binder_device *device)
{
	hlist_add_head(&device->hlist, &binder_devices);
}

static int __init init_binder_device(const char *name)
{
	int ret;
+9 −2
Original line number Diff line number Diff line
@@ -25,8 +25,7 @@ struct binder_context {

/**
 * struct binder_device - information about a binder device node
 * @hlist:          list of binder devices (only used for devices requested via
 *                  CONFIG_ANDROID_BINDER_DEVICES)
 * @hlist:          list of binder devices
 * @miscdev:        information about a binder character device node
 * @context:        binder context information
 * @binderfs_inode: This is the inode of the root dentry of the super block
@@ -582,4 +581,12 @@ struct binder_object {
	};
};

/**
 * Add a binder device to binder_devices
 * @device: the new binder device to add to the global list
 *
 * Not reentrant as the list is not protected by any locks
 */
void binder_add_device(struct binder_device *device);

#endif /* _LINUX_BINDER_INTERNAL_H */
+2 −0
Original line number Diff line number Diff line
@@ -207,6 +207,8 @@ static int binderfs_binder_device_create(struct inode *ref_inode,
	fsnotify_create(root->d_inode, dentry);
	inode_unlock(d_inode(root));

	binder_add_device(device);

	return 0;

err: