mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge tag 'printk-for-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk
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()
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
|
||||
WARN_ONCE / WARN_ON_ONCE only print a warning once.
|
||||
WARN_ONCE / WARN_ON_ONCE / printk_once only emit a message once.
|
||||
|
||||
echo 1 > /sys/kernel/debug/clear_warn_once
|
||||
|
||||
|
||||
@@ -58,6 +58,14 @@ A raw pointer value may be printed with %p which will hash the address
|
||||
before printing. The kernel also supports extended specifiers for printing
|
||||
pointers of different types.
|
||||
|
||||
Some of the extended specifiers print the data on the given address instead
|
||||
of printing the address itself. In this case, the following error messages
|
||||
might be printed instead of the unreachable information::
|
||||
|
||||
(null) data on plain NULL address
|
||||
(efault) data on invalid address
|
||||
(einval) invalid data on a valid address
|
||||
|
||||
Plain Pointers
|
||||
--------------
|
||||
|
||||
|
||||
@@ -249,7 +249,7 @@ static int pci_dac_dma_supported(struct pci_dev *dev, u64 mask)
|
||||
ok = 0;
|
||||
|
||||
/* If both conditions above are met, we are fine. */
|
||||
DBGA("pci_dac_dma_supported %s from %pf\n",
|
||||
DBGA("pci_dac_dma_supported %s from %ps\n",
|
||||
ok ? "yes" : "no", __builtin_return_address(0));
|
||||
|
||||
return ok;
|
||||
@@ -281,7 +281,7 @@ pci_map_single_1(struct pci_dev *pdev, void *cpu_addr, size_t size,
|
||||
&& paddr + size <= __direct_map_size) {
|
||||
ret = paddr + __direct_map_base;
|
||||
|
||||
DBGA2("pci_map_single: [%p,%zx] -> direct %llx from %pf\n",
|
||||
DBGA2("pci_map_single: [%p,%zx] -> direct %llx from %ps\n",
|
||||
cpu_addr, size, ret, __builtin_return_address(0));
|
||||
|
||||
return ret;
|
||||
@@ -292,7 +292,7 @@ pci_map_single_1(struct pci_dev *pdev, void *cpu_addr, size_t size,
|
||||
if (dac_allowed) {
|
||||
ret = paddr + alpha_mv.pci_dac_offset;
|
||||
|
||||
DBGA2("pci_map_single: [%p,%zx] -> DAC %llx from %pf\n",
|
||||
DBGA2("pci_map_single: [%p,%zx] -> DAC %llx from %ps\n",
|
||||
cpu_addr, size, ret, __builtin_return_address(0));
|
||||
|
||||
return ret;
|
||||
@@ -329,7 +329,7 @@ pci_map_single_1(struct pci_dev *pdev, void *cpu_addr, size_t size,
|
||||
ret = arena->dma_base + dma_ofs * PAGE_SIZE;
|
||||
ret += (unsigned long)cpu_addr & ~PAGE_MASK;
|
||||
|
||||
DBGA2("pci_map_single: [%p,%zx] np %ld -> sg %llx from %pf\n",
|
||||
DBGA2("pci_map_single: [%p,%zx] np %ld -> sg %llx from %ps\n",
|
||||
cpu_addr, size, npages, ret, __builtin_return_address(0));
|
||||
|
||||
return ret;
|
||||
@@ -396,14 +396,14 @@ static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr,
|
||||
&& dma_addr < __direct_map_base + __direct_map_size) {
|
||||
/* Nothing to do. */
|
||||
|
||||
DBGA2("pci_unmap_single: direct [%llx,%zx] from %pf\n",
|
||||
DBGA2("pci_unmap_single: direct [%llx,%zx] from %ps\n",
|
||||
dma_addr, size, __builtin_return_address(0));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (dma_addr > 0xffffffff) {
|
||||
DBGA2("pci64_unmap_single: DAC [%llx,%zx] from %pf\n",
|
||||
DBGA2("pci64_unmap_single: DAC [%llx,%zx] from %ps\n",
|
||||
dma_addr, size, __builtin_return_address(0));
|
||||
return;
|
||||
}
|
||||
@@ -435,7 +435,7 @@ static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr,
|
||||
|
||||
spin_unlock_irqrestore(&arena->lock, flags);
|
||||
|
||||
DBGA2("pci_unmap_single: sg [%llx,%zx] np %ld from %pf\n",
|
||||
DBGA2("pci_unmap_single: sg [%llx,%zx] np %ld from %ps\n",
|
||||
dma_addr, size, npages, __builtin_return_address(0));
|
||||
}
|
||||
|
||||
@@ -458,7 +458,7 @@ try_again:
|
||||
cpu_addr = (void *)__get_free_pages(gfp | __GFP_ZERO, order);
|
||||
if (! cpu_addr) {
|
||||
printk(KERN_INFO "pci_alloc_consistent: "
|
||||
"get_free_pages failed from %pf\n",
|
||||
"get_free_pages failed from %ps\n",
|
||||
__builtin_return_address(0));
|
||||
/* ??? Really atomic allocation? Otherwise we could play
|
||||
with vmalloc and sg if we can't find contiguous memory. */
|
||||
@@ -477,7 +477,7 @@ try_again:
|
||||
goto try_again;
|
||||
}
|
||||
|
||||
DBGA2("pci_alloc_consistent: %zx -> [%p,%llx] from %pf\n",
|
||||
DBGA2("pci_alloc_consistent: %zx -> [%p,%llx] from %ps\n",
|
||||
size, cpu_addr, *dma_addrp, __builtin_return_address(0));
|
||||
|
||||
return cpu_addr;
|
||||
@@ -497,7 +497,7 @@ static void alpha_pci_free_coherent(struct device *dev, size_t size,
|
||||
pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL);
|
||||
free_pages((unsigned long)cpu_addr, get_order(size));
|
||||
|
||||
DBGA2("pci_free_consistent: [%llx,%zx] from %pf\n",
|
||||
DBGA2("pci_free_consistent: [%llx,%zx] from %ps\n",
|
||||
dma_addr, size, __builtin_return_address(0));
|
||||
}
|
||||
|
||||
|
||||
@@ -631,7 +631,7 @@ static void imx6_pm_stby_poweroff(void)
|
||||
static int imx6_pm_stby_poweroff_probe(void)
|
||||
{
|
||||
if (pm_power_off) {
|
||||
pr_warn("%s: pm_power_off already claimed %p %pf!\n",
|
||||
pr_warn("%s: pm_power_off already claimed %p %ps!\n",
|
||||
__func__, pm_power_off, pm_power_off);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
@@ -133,7 +133,7 @@ static const char *usermode_action[] = {
|
||||
static int alignment_proc_show(struct seq_file *m, void *v)
|
||||
{
|
||||
seq_printf(m, "User:\t\t%lu\n", ai_user);
|
||||
seq_printf(m, "System:\t\t%lu (%pF)\n", ai_sys, ai_sys_last_pc);
|
||||
seq_printf(m, "System:\t\t%lu (%pS)\n", ai_sys, ai_sys_last_pc);
|
||||
seq_printf(m, "Skipped:\t%lu\n", ai_skipped);
|
||||
seq_printf(m, "Half:\t\t%lu\n", ai_half);
|
||||
seq_printf(m, "Word:\t\t%lu\n", ai_word);
|
||||
|
||||
@@ -147,7 +147,7 @@ void float_raise(signed char flags)
|
||||
#ifdef CONFIG_DEBUG_USER
|
||||
if (flags & debug)
|
||||
printk(KERN_DEBUG
|
||||
"NWFPE: %s[%d] takes exception %08x at %pf from %08lx\n",
|
||||
"NWFPE: %s[%d] takes exception %08x at %ps from %08lx\n",
|
||||
current->comm, current->pid, flags,
|
||||
__builtin_return_address(0), GET_USERREG()->ARM_pc);
|
||||
#endif
|
||||
|
||||
@@ -75,7 +75,7 @@ static void __iomem *__ioremap(phys_addr_t addr, unsigned long size,
|
||||
p >= memory_start && p < virt_to_phys(high_memory) &&
|
||||
!(p >= __virt_to_phys((phys_addr_t)__bss_stop) &&
|
||||
p < __virt_to_phys((phys_addr_t)__bss_stop))) {
|
||||
pr_warn("__ioremap(): phys addr "PTE_FMT" is RAM lr %pf\n",
|
||||
pr_warn("__ioremap(): phys addr "PTE_FMT" is RAM lr %ps\n",
|
||||
(unsigned long)p, __builtin_return_address(0));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -876,7 +876,7 @@ void ldom_power_off(void)
|
||||
|
||||
static void ds_conn_reset(struct ds_info *dp)
|
||||
{
|
||||
printk(KERN_ERR "ds-%llu: ds_conn_reset() from %pf\n",
|
||||
printk(KERN_ERR "ds-%llu: ds_conn_reset() from %ps\n",
|
||||
dp->id, __builtin_return_address(0));
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
static void _print_addr(void *data, unsigned long address, int reliable)
|
||||
{
|
||||
pr_info(" [<%08lx>] %s%pF\n", address, reliable ? "" : "? ",
|
||||
pr_info(" [<%08lx>] %s%pS\n", address, reliable ? "" : "? ",
|
||||
(void *)address);
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ DECLARE_EVENT_CLASS(x86_exceptions,
|
||||
__entry->error_code = error_code;
|
||||
),
|
||||
|
||||
TP_printk("address=%pf ip=%pf error_code=0x%lx",
|
||||
TP_printk("address=%ps ip=%ps error_code=0x%lx",
|
||||
(void *)__entry->address, (void *)__entry->ip,
|
||||
__entry->error_code) );
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@ __visible bool ex_handler_rdmsr_unsafe(const struct exception_table_entry *fixup
|
||||
unsigned long error_code,
|
||||
unsigned long fault_addr)
|
||||
{
|
||||
if (pr_warn_once("unchecked MSR access error: RDMSR from 0x%x at rIP: 0x%lx (%pF)\n",
|
||||
if (pr_warn_once("unchecked MSR access error: RDMSR from 0x%x at rIP: 0x%lx (%pS)\n",
|
||||
(unsigned int)regs->cx, regs->ip, (void *)regs->ip))
|
||||
show_stack_regs(regs);
|
||||
|
||||
@@ -162,7 +162,7 @@ __visible bool ex_handler_wrmsr_unsafe(const struct exception_table_entry *fixup
|
||||
unsigned long error_code,
|
||||
unsigned long fault_addr)
|
||||
{
|
||||
if (pr_warn_once("unchecked MSR access error: WRMSR to 0x%x (tried to write 0x%08x%08x) at rIP: 0x%lx (%pF)\n",
|
||||
if (pr_warn_once("unchecked MSR access error: WRMSR to 0x%x (tried to write 0x%08x%08x) at rIP: 0x%lx (%pS)\n",
|
||||
(unsigned int)regs->cx, (unsigned int)regs->dx,
|
||||
(unsigned int)regs->ax, regs->ip, (void *)regs->ip))
|
||||
show_stack_regs(regs);
|
||||
|
||||
@@ -105,7 +105,7 @@ void xen_mc_flush(void)
|
||||
for (i = 0; i < b->mcidx; i++) {
|
||||
if (b->entries[i].result < 0) {
|
||||
#if MC_DEBUG
|
||||
pr_err(" call %2d: op=%lu arg=[%lx] result=%ld\t%pF\n",
|
||||
pr_err(" call %2d: op=%lu arg=[%lx] result=%ld\t%pS\n",
|
||||
i + 1,
|
||||
b->debug[i].op,
|
||||
b->debug[i].args[0],
|
||||
|
||||
@@ -414,7 +414,7 @@ static void acpi_pm_notify_handler(acpi_handle handle, u32 val, void *not_used)
|
||||
if (adev->wakeup.flags.notifier_present) {
|
||||
pm_wakeup_ws_event(adev->wakeup.ws, 0, acpi_s2idle_wakeup());
|
||||
if (adev->wakeup.context.func) {
|
||||
acpi_handle_debug(handle, "Running %pF for %s\n",
|
||||
acpi_handle_debug(handle, "Running %pS for %s\n",
|
||||
adev->wakeup.context.func,
|
||||
dev_name(adev->wakeup.context.dev));
|
||||
adev->wakeup.context.func(&adev->wakeup.context);
|
||||
|
||||
@@ -207,7 +207,7 @@ static ktime_t initcall_debug_start(struct device *dev, void *cb)
|
||||
if (!pm_print_times_enabled)
|
||||
return 0;
|
||||
|
||||
dev_info(dev, "calling %pF @ %i, parent: %s\n", cb,
|
||||
dev_info(dev, "calling %pS @ %i, parent: %s\n", cb,
|
||||
task_pid_nr(current),
|
||||
dev->parent ? dev_name(dev->parent) : "none");
|
||||
return ktime_get();
|
||||
@@ -225,7 +225,7 @@ static void initcall_debug_report(struct device *dev, ktime_t calltime,
|
||||
rettime = ktime_get();
|
||||
nsecs = (s64) ktime_to_ns(ktime_sub(rettime, calltime));
|
||||
|
||||
dev_info(dev, "%pF returned %d after %Ld usecs\n", cb, error,
|
||||
dev_info(dev, "%pS returned %d after %Ld usecs\n", cb, error,
|
||||
(unsigned long long)nsecs >> 10);
|
||||
}
|
||||
|
||||
@@ -2051,7 +2051,7 @@ EXPORT_SYMBOL_GPL(dpm_suspend_start);
|
||||
void __suspend_report_result(const char *function, void *fn, int ret)
|
||||
{
|
||||
if (ret)
|
||||
pr_err("%s(): %pF returns %d\n", function, fn, ret);
|
||||
pr_err("%s(): %pS returns %d\n", function, fn, ret);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__suspend_report_result);
|
||||
|
||||
|
||||
@@ -62,19 +62,19 @@ int syscore_suspend(void)
|
||||
list_for_each_entry_reverse(ops, &syscore_ops_list, node)
|
||||
if (ops->suspend) {
|
||||
if (initcall_debug)
|
||||
pr_info("PM: Calling %pF\n", ops->suspend);
|
||||
pr_info("PM: Calling %pS\n", ops->suspend);
|
||||
ret = ops->suspend();
|
||||
if (ret)
|
||||
goto err_out;
|
||||
WARN_ONCE(!irqs_disabled(),
|
||||
"Interrupts enabled after %pF\n", ops->suspend);
|
||||
"Interrupts enabled after %pS\n", ops->suspend);
|
||||
}
|
||||
|
||||
trace_suspend_resume(TPS("syscore_suspend"), 0, false);
|
||||
return 0;
|
||||
|
||||
err_out:
|
||||
pr_err("PM: System core suspend callback %pF failed.\n", ops->suspend);
|
||||
pr_err("PM: System core suspend callback %pS failed.\n", ops->suspend);
|
||||
|
||||
list_for_each_entry_continue(ops, &syscore_ops_list, node)
|
||||
if (ops->resume)
|
||||
@@ -100,10 +100,10 @@ void syscore_resume(void)
|
||||
list_for_each_entry(ops, &syscore_ops_list, node)
|
||||
if (ops->resume) {
|
||||
if (initcall_debug)
|
||||
pr_info("PM: Calling %pF\n", ops->resume);
|
||||
pr_info("PM: Calling %pS\n", ops->resume);
|
||||
ops->resume();
|
||||
WARN_ONCE(!irqs_disabled(),
|
||||
"Interrupts enabled after %pF\n", ops->resume);
|
||||
"Interrupts enabled after %pS\n", ops->resume);
|
||||
}
|
||||
trace_suspend_resume(TPS("syscore_resume"), 0, false);
|
||||
}
|
||||
@@ -122,7 +122,7 @@ void syscore_shutdown(void)
|
||||
list_for_each_entry_reverse(ops, &syscore_ops_list, node)
|
||||
if (ops->shutdown) {
|
||||
if (initcall_debug)
|
||||
pr_info("PM: Calling %pF\n", ops->shutdown);
|
||||
pr_info("PM: Calling %pS\n", ops->shutdown);
|
||||
ops->shutdown();
|
||||
}
|
||||
|
||||
|
||||
@@ -6115,7 +6115,7 @@ int drbd_ack_receiver(struct drbd_thread *thi)
|
||||
|
||||
err = cmd->fn(connection, &pi);
|
||||
if (err) {
|
||||
drbd_err(connection, "%pf failed\n", cmd->fn);
|
||||
drbd_err(connection, "%ps failed\n", cmd->fn);
|
||||
goto reconnect;
|
||||
}
|
||||
|
||||
|
||||
@@ -1693,7 +1693,7 @@ irqreturn_t floppy_interrupt(int irq, void *dev_id)
|
||||
/* we don't even know which FDC is the culprit */
|
||||
pr_info("DOR0=%x\n", fdc_state[0].dor);
|
||||
pr_info("floppy interrupt on bizarre fdc %d\n", fdc);
|
||||
pr_info("handler=%pf\n", handler);
|
||||
pr_info("handler=%ps\n", handler);
|
||||
is_alive(__func__, "bizarre fdc");
|
||||
return IRQ_NONE;
|
||||
}
|
||||
@@ -1752,7 +1752,7 @@ static void reset_interrupt(void)
|
||||
debugt(__func__, "");
|
||||
result(); /* get the status ready for set_fdc */
|
||||
if (FDCS->reset) {
|
||||
pr_info("reset set in interrupt, calling %pf\n", cont->error);
|
||||
pr_info("reset set in interrupt, calling %ps\n", cont->error);
|
||||
cont->error(); /* a reset just after a reset. BAD! */
|
||||
}
|
||||
cont->redo();
|
||||
@@ -1793,7 +1793,7 @@ static void show_floppy(void)
|
||||
pr_info("\n");
|
||||
pr_info("floppy driver state\n");
|
||||
pr_info("-------------------\n");
|
||||
pr_info("now=%lu last interrupt=%lu diff=%lu last called handler=%pf\n",
|
||||
pr_info("now=%lu last interrupt=%lu diff=%lu last called handler=%ps\n",
|
||||
jiffies, interruptjiffies, jiffies - interruptjiffies,
|
||||
lasthandler);
|
||||
|
||||
@@ -1812,9 +1812,9 @@ static void show_floppy(void)
|
||||
pr_info("status=%x\n", fd_inb(FD_STATUS));
|
||||
pr_info("fdc_busy=%lu\n", fdc_busy);
|
||||
if (do_floppy)
|
||||
pr_info("do_floppy=%pf\n", do_floppy);
|
||||
pr_info("do_floppy=%ps\n", do_floppy);
|
||||
if (work_pending(&floppy_work))
|
||||
pr_info("floppy_work.func=%pf\n", floppy_work.func);
|
||||
pr_info("floppy_work.func=%ps\n", floppy_work.func);
|
||||
if (delayed_work_pending(&fd_timer))
|
||||
pr_info("delayed work.function=%p expires=%ld\n",
|
||||
fd_timer.work.func,
|
||||
|
||||
@@ -466,7 +466,7 @@ static void cpufreq_list_transition_notifiers(void)
|
||||
mutex_lock(&cpufreq_transition_notifier_list.mutex);
|
||||
|
||||
for (nb = cpufreq_transition_notifier_list.head; nb; nb = nb->next)
|
||||
pr_info("%pF\n", nb->notifier_call);
|
||||
pr_info("%pS\n", nb->notifier_call);
|
||||
|
||||
mutex_unlock(&cpufreq_transition_notifier_list.mutex);
|
||||
}
|
||||
|
||||
@@ -159,7 +159,7 @@ static inline void mmc_fixup_device(struct mmc_card *card,
|
||||
(f->ext_csd_rev == EXT_CSD_REV_ANY ||
|
||||
f->ext_csd_rev == card->ext_csd.rev) &&
|
||||
rev >= f->rev_start && rev <= f->rev_end) {
|
||||
dev_dbg(&card->dev, "calling %pf\n", f->vendor_fixup);
|
||||
dev_dbg(&card->dev, "calling %ps\n", f->vendor_fixup);
|
||||
f->vendor_fixup(card, f->data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -581,7 +581,7 @@ int __nd_driver_register(struct nd_device_driver *nd_drv, struct module *owner,
|
||||
struct device_driver *drv = &nd_drv->drv;
|
||||
|
||||
if (!nd_drv->type) {
|
||||
pr_debug("driver type bitmask not set (%pf)\n",
|
||||
pr_debug("driver type bitmask not set (%ps)\n",
|
||||
__builtin_return_address(0));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user