From 96d06cc582f7d357a74567b4ba1c5822fe8ba992 Mon Sep 17 00:00:00 2001 From: Arjan van de Ven Date: Wed, 11 Feb 2015 16:05:23 -0600 Subject: [PATCH 01/13] msleep Author: Arjan van de Ven Signed-off-by: Miguel Bernal Marin --- arch/x86/kernel/alternative.c | 4 ++++ drivers/acpi/bus.c | 6 ++++++ drivers/base/firmware_class.c | 1 + drivers/block/virtio_blk.c | 4 ++-- include/linux/blkdev.h | 2 +- init/main.c | 2 +- kernel/kmod.c | 11 +++++++++++ kernel/time/timer.c | 5 +++++ net/netlink/af_netlink.c | 2 +- 9 files changed, 32 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c index aef6531..13d1579 100644 --- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c @@ -607,7 +607,9 @@ void __init alternative_instructions(void) * patching. */ + printk("Applying alternatives\n"); apply_alternatives(__alt_instructions, __alt_instructions_end); + printk("Applying alternatives done\n"); #ifdef CONFIG_SMP /* Patch to UP if other cpus not imminent. */ @@ -618,6 +620,8 @@ void __init alternative_instructions(void) _text, _etext); } + printk("Applying alternatives smp done\n"); + if (!uniproc_patched || num_possible_cpus() == 1) free_init_pages("SMP alternatives", (unsigned long)__smp_locks, diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index c412fdb..61bf9ae 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -646,6 +646,8 @@ static int __init acpi_bus_init(void) struct kobject *acpi_kobj; EXPORT_SYMBOL_GPL(acpi_kobj); +//extern int warn_on_msleep; + static int __init acpi_init(void) { int result; @@ -655,6 +657,8 @@ static int __init acpi_init(void) return -ENODEV; } +// warn_on_msleep = 1; + acpi_kobj = kobject_create_and_add("acpi", firmware_kobj); if (!acpi_kobj) { printk(KERN_WARNING "%s: kset create error\n", __func__); @@ -665,6 +669,7 @@ static int __init acpi_init(void) result = acpi_bus_init(); if (result) { disable_acpi(); +// warn_on_msleep = 0; return result; } @@ -674,6 +679,7 @@ static int __init acpi_init(void) acpi_debugfs_init(); acpi_sleep_proc_init(); acpi_wakeup_device_init(); +// warn_on_msleep = 0; return 0; } diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c index 171841a..81aa7f4 100644 --- a/drivers/base/firmware_class.c +++ b/drivers/base/firmware_class.c @@ -1176,6 +1176,7 @@ request_firmware(const struct firmware **firmware_p, const char *name, { int ret; + printk("request_firmeare: %s\n", name); /* Need to pin this module until return */ __module_get(THIS_MODULE); ret = _request_firmware(firmware_p, name, device, diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 5ea2f0b..353d496 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c @@ -861,7 +861,7 @@ static struct virtio_driver virtio_blk = { #endif }; -static int __init init(void) +static int __init virtio_blk_init(void) { int error; @@ -893,7 +893,7 @@ static void __exit fini(void) unregister_blkdev(major, "virtblk"); destroy_workqueue(virtblk_wq); } -module_init(init); +module_init(virtio_blk_init); module_exit(fini); MODULE_DEVICE_TABLE(virtio, id_table); diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 5d93a66..ad69b13 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -39,7 +39,7 @@ struct blkcg_gq; struct blk_flush_queue; #define BLKDEV_MIN_RQ 4 -#define BLKDEV_MAX_RQ 128 /* Default maximum */ +#define BLKDEV_MAX_RQ 4096 /* Default maximum */ /* * Maximum number of blkcg policies allowed to be registered concurrently. diff --git a/init/main.c b/init/main.c index 2115055..5aa3393 100644 --- a/init/main.c +++ b/init/main.c @@ -761,7 +761,7 @@ static int __init_or_module do_one_initcall_debug(initcall_t fn) unsigned long long duration; int ret; - printk(KERN_DEBUG "calling %pF @ %i\n", fn, task_pid_nr(current)); + printk(KERN_DEBUG "calling %pF @ %i\n", fn, raw_smp_processor_id()); calltime = ktime_get(); ret = fn(); rettime = ktime_get(); diff --git a/kernel/kmod.c b/kernel/kmod.c index 2777f40..b0b1061 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c @@ -78,6 +78,8 @@ static int call_modprobe(char *module_name, int wait) NULL }; + printk("call_modprobe: %s %i \n", module_name, wait); + char **argv = kmalloc(sizeof(char *[5]), GFP_KERNEL); if (!argv) goto out; @@ -253,6 +255,15 @@ static int ____call_usermodehelper(void *data) commit_creds(new); + if (sub_info->argv && sub_info->argv[0]) { + printk("____call_usermodehelper %s\n", sub_info->argv[0]); + if (sub_info->argv[1]) { + printk(" arg1 : %s\n", sub_info->argv[1]); + if (sub_info->argv[2]) + printk(" arg2 : %s\n", sub_info->argv[2]); + } + } + retval = do_execve(getname_kernel(sub_info->path), (const char __user *const __user *)sub_info->argv, (const char __user *const __user *)sub_info->envp); diff --git a/kernel/time/timer.c b/kernel/time/timer.c index 2ece3aa..42000e8 100644 --- a/kernel/time/timer.c +++ b/kernel/time/timer.c @@ -1668,6 +1668,8 @@ void __init init_timers(void) open_softirq(TIMER_SOFTIRQ, run_timer_softirq); } +//int warn_on_msleep; +//EXPORT_SYMBOL_GPL(warn_on_msleep); /** * msleep - sleep safely even with waitqueue interruptions * @msecs: Time in milliseconds to sleep for @@ -1676,6 +1678,9 @@ void msleep(unsigned int msecs) { unsigned long timeout = msecs_to_jiffies(msecs) + 1; +// if (warn_on_msleep) +// WARN(1, "msleep(%i) called", msecs); + while (timeout) timeout = schedule_timeout_uninterruptible(timeout); } diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index bf6e766..d83aeaf 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -1168,7 +1168,7 @@ static int netlink_create(struct net *net, struct socket *sock, int protocol, netlink_lock_table(); #ifdef CONFIG_MODULES - if (!nl_table[protocol].registered) { + if (!nl_table[protocol].registered && protocol != 9) { netlink_unlock_table(); request_module("net-pf-%d-proto-%d", PF_NETLINK, protocol); netlink_lock_table(); -- 2.4.4