Pull printk updates from Petr Mladek: - Allow state reset of printk_once() calls. - Prevent crashes when dereferencing invalid pointers in vsprintf(). Only the first byte is checked for simplicity. - Make vsprintf warnings consistent and inlined. - Treewide conversion of obsolete %pf, %pF to %ps, %pF printf modifiers. - Some clean up of vsprintf and test_printf code. * tag 'printk-for-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk: lib/vsprintf: Make function pointer_string static vsprintf: Limit the length of inlined error messages vsprintf: Avoid confusion between invalid address and value vsprintf: Prevent crash when dereferencing invalid pointers vsprintf: Consolidate handling of unknown pointer specifiers vsprintf: Factor out %pO handler as kobject_string() vsprintf: Factor out %pV handler as va_format() vsprintf: Factor out %p[iI] handler as ip_addr_string() vsprintf: Do not check address of well-known strings vsprintf: Consistent %pK handling for kptr_restrict == 0 vsprintf: Shuffle restricted_pointer() printk: Tie printk_once / printk_deferred_once into .data.once for reset treewide: Switch printk users from %pf and %pF to %ps and %pS, respectively lib/test_printf: Switch to bitmap_zalloc()
Showing the changes to kernel/workqueue.c (1 of 60 files). Show all
Unified · Split
| @@ -2271,7 +2271,7 @@ __acquires(&pool->lock) · 2270 unmodified lines | |||
| 2271 | 2271 | ||
| 2272 | if (unlikely(in_atomic() || lockdep_depth(current) > 0)) { | 2272 | if (unlikely(in_atomic() || lockdep_depth(current) > 0)) { |
| 2273 | pr_err("BUG: workqueue leaked lock or atomic: %s/0x%08x/%d\n" | 2273 | pr_err("BUG: workqueue leaked lock or atomic: %s/0x%08x/%d\n" |
| 2274 | " last function: %pf\n", | 2274 | " last function: %ps\n", |
| 2275 | current->comm, preempt_count(), task_pid_nr(current), | 2275 | current->comm, preempt_count(), task_pid_nr(current), |
| 2276 | worker->current_func); | 2276 | worker->current_func); |
| 2277 | debug_show_held_locks(current); | 2277 | debug_show_held_locks(current); |
| @@ -2590,11 +2590,11 @@ static void check_flush_dependency(struct workqueue_struct *target_wq, · 312 unmodified lines | |||
| 2590 | worker = current_wq_worker(); | 2590 | worker = current_wq_worker(); |
| 2591 | 2591 | ||
| 2592 | WARN_ONCE(current->flags & PF_MEMALLOC, | 2592 | WARN_ONCE(current->flags & PF_MEMALLOC, |
| 2593 | "workqueue: PF_MEMALLOC task %d(%s) is flushing !WQ_MEM_RECLAIM %s:%pf", | 2593 | "workqueue: PF_MEMALLOC task %d(%s) is flushing !WQ_MEM_RECLAIM %s:%ps", |
| 2594 | current->pid, current->comm, target_wq->name, target_func); | 2594 | current->pid, current->comm, target_wq->name, target_func); |
| 2595 | WARN_ONCE(worker && ((worker->current_pwq->wq->flags & | 2595 | WARN_ONCE(worker && ((worker->current_pwq->wq->flags & |
| 2596 | (WQ_MEM_RECLAIM | __WQ_LEGACY)) == WQ_MEM_RECLAIM), | 2596 | (WQ_MEM_RECLAIM | __WQ_LEGACY)) == WQ_MEM_RECLAIM), |
| 2597 | "workqueue: WQ_MEM_RECLAIM %s:%pf is flushing !WQ_MEM_RECLAIM %s:%pf", | 2597 | "workqueue: WQ_MEM_RECLAIM %s:%ps is flushing !WQ_MEM_RECLAIM %s:%ps", |
| 2598 | worker->current_pwq->wq->name, worker->current_func, | 2598 | worker->current_pwq->wq->name, worker->current_func, |
| 2599 | target_wq->name, target_func); | 2599 | target_wq->name, target_func); |
| 2600 | } | 2600 | } |
| @@ -4581,7 +4581,7 @@ void print_worker_info(const char *log_lvl, struct task_struct *task) · 1980 unmodified lines | |||
| 4581 | probe_kernel_read(desc, worker->desc, sizeof(desc) - 1); | 4581 | probe_kernel_read(desc, worker->desc, sizeof(desc) - 1); |
| 4582 | 4582 | ||
| 4583 | if (fn || name[0] || desc[0]) { | 4583 | if (fn || name[0] || desc[0]) { |
| 4584 | printk("%sWorkqueue: %s %pf", log_lvl, name, fn); | 4584 | printk("%sWorkqueue: %s %ps", log_lvl, name, fn); |
| 4585 | if (strcmp(name, desc)) | 4585 | if (strcmp(name, desc)) |
| 4586 | pr_cont(" (%s)", desc); | 4586 | pr_cont(" (%s)", desc); |
| 4587 | pr_cont("\n"); | 4587 | pr_cont("\n"); |
| @@ -4606,7 +4606,7 @@ static void pr_cont_work(bool comma, struct work_struct *work) · 18 unmodified lines | |||
| 4606 | pr_cont("%s BAR(%d)", comma ? "," : "", | 4606 | pr_cont("%s BAR(%d)", comma ? "," : "", |
| 4607 | task_pid_nr(barr->task)); | 4607 | task_pid_nr(barr->task)); |
| 4608 | } else { | 4608 | } else { |
| 4609 | pr_cont("%s %pf", comma ? "," : "", work->func); | 4609 | pr_cont("%s %ps", comma ? "," : "", work->func); |
| 4610 | } | 4610 | } |
| 4611 | } | 4611 | } |
| 4612 | 4612 | ||
| @@ -4638,7 +4638,7 @@ static void show_pwq(struct pool_workqueue *pwq) · 25 unmodified lines | |||
| 4638 | if (worker->current_pwq != pwq) | 4638 | if (worker->current_pwq != pwq) |
| 4639 | continue; | 4639 | continue; |
| 4640 | 4640 | ||
| 4641 | pr_cont("%s %d%s:%pf", comma ? "," : "", | 4641 | pr_cont("%s %d%s:%ps", comma ? "," : "", |
| 4642 | task_pid_nr(worker->task), | 4642 | task_pid_nr(worker->task), |
| 4643 | worker == pwq->wq->rescuer ? "(RESCUER)" : "", | 4643 | worker == pwq->wq->rescuer ? "(RESCUER)" : "", |
| 4644 | worker->current_func); | 4644 | worker->current_func); |