vcs: hook sysfs devices into object lifetime instead of "binding"
During bootup performance tracing I noticed many occurrences of vca* device creation and removal, leading to the usual userspace uevent processing, which are, in this case, rather pointless. A simple test showing the kernel timing (not including all the work userspace has to do), gives us these numbers: $ time for i in `seq 1000`; do echo a > /dev/tty2; done real 0m1.142s user 0m0.015s sys 0m0.540s If we move the hook for the vcs* driver core devices from the tty "binding" to the vc allocation/deallocation, which is what the vcs* devices represent, we get the following numbers: $ time for i in `seq 1000`; do echo a > /dev/tty2; done real 0m0.152s user 0m0.030s sys 0m0.072s Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
ce21c7bcd7
commit
4995f8ef9d
@@ -479,18 +479,18 @@ static const struct file_operations vcs_fops = {
|
||||
|
||||
static struct class *vc_class;
|
||||
|
||||
void vcs_make_sysfs(struct tty_struct *tty)
|
||||
void vcs_make_sysfs(int index)
|
||||
{
|
||||
device_create(vc_class, NULL, MKDEV(VCS_MAJOR, tty->index + 1), NULL,
|
||||
"vcs%u", tty->index + 1);
|
||||
device_create(vc_class, NULL, MKDEV(VCS_MAJOR, tty->index + 129), NULL,
|
||||
"vcsa%u", tty->index + 1);
|
||||
device_create(vc_class, NULL, MKDEV(VCS_MAJOR, index + 1), NULL,
|
||||
"vcs%u", index + 1);
|
||||
device_create(vc_class, NULL, MKDEV(VCS_MAJOR, index + 129), NULL,
|
||||
"vcsa%u", index + 1);
|
||||
}
|
||||
|
||||
void vcs_remove_sysfs(struct tty_struct *tty)
|
||||
void vcs_remove_sysfs(int index)
|
||||
{
|
||||
device_destroy(vc_class, MKDEV(VCS_MAJOR, tty->index + 1));
|
||||
device_destroy(vc_class, MKDEV(VCS_MAJOR, tty->index + 129));
|
||||
device_destroy(vc_class, MKDEV(VCS_MAJOR, index + 1));
|
||||
device_destroy(vc_class, MKDEV(VCS_MAJOR, index + 129));
|
||||
}
|
||||
|
||||
int __init vcs_init(void)
|
||||
|
Reference in New Issue
Block a user