mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
Printk changes for 5.2
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEESH4wyp42V4tXvYsjUqAMR0iAlPIFAlzP8nQACgkQUqAMR0iA lPK79A/+NkRouqA9ihAZhUbgW0DHzOAFvUJSBgX11HQAZbGjngakuoyYFvwUx0T0 m80SUTCysxQrWl+xLdccPZ9ZrhP2KFQrEBEdeYHZ6ymcYcl83+3bOIBS7VwdZAbO EzB8u/58uU/sI6ABL4lF7ZF/+R+U4CXveEUoVUF04bxdPOxZkRX4PT8u3DzCc+RK r4yhwQUXGcKrHa2GrRL3GXKsDxcnRdFef/nzq4RFSZsi0bpskzEj34WrvctV6j+k FH/R3kEcZrtKIMPOCoDMMWq07yNqK/QKj0MJlGoAlwfK4INgcrSXLOx+pAmr6BNq uMKpkxCFhnkZVKgA/GbKEGzFf+ZGz9+2trSFka9LD2Ig6DIstwXqpAgiUK8JFQYj lq1mTaJZD3DfF2vnGHGeAfBFG3XETv+mIT/ow6BcZi3NyNSVIaqa5GAR+lMc6xkR waNkcMDkzLFuP1r0p7ZizXOksk9dFkMP3M6KqJomRtApwbSNmtt+O2jvyLPvB3+w wRyN9WT7IJZYo4v0rrD5Bl6BjV15ZeCPRSFZRYofX+vhcqJQsFX1M9DeoNqokh55 Cri8f6MxGzBVjE1G70y2/cAFFvKEKJud0NUIMEuIbcy+xNrEAWPF8JhiwpKKnU10 c0u674iqHJ2HeVsYWZF0zqzqQ6E1Idhg/PrXfuVuhAaL5jIOnYY= =WZfC -----END PGP SIGNATURE----- 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:
commit
0968621917
60 changed files with 410 additions and 272 deletions
|
@ -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
|
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
|
before printing. The kernel also supports extended specifiers for printing
|
||||||
pointers of different types.
|
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
|
Plain Pointers
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
|
|
@ -249,7 +249,7 @@ static int pci_dac_dma_supported(struct pci_dev *dev, u64 mask)
|
||||||
ok = 0;
|
ok = 0;
|
||||||
|
|
||||||
/* If both conditions above are met, we are fine. */
|
/* 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));
|
ok ? "yes" : "no", __builtin_return_address(0));
|
||||||
|
|
||||||
return ok;
|
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) {
|
&& paddr + size <= __direct_map_size) {
|
||||||
ret = paddr + __direct_map_base;
|
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));
|
cpu_addr, size, ret, __builtin_return_address(0));
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -292,7 +292,7 @@ pci_map_single_1(struct pci_dev *pdev, void *cpu_addr, size_t size,
|
||||||
if (dac_allowed) {
|
if (dac_allowed) {
|
||||||
ret = paddr + alpha_mv.pci_dac_offset;
|
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));
|
cpu_addr, size, ret, __builtin_return_address(0));
|
||||||
|
|
||||||
return ret;
|
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 = arena->dma_base + dma_ofs * PAGE_SIZE;
|
||||||
ret += (unsigned long)cpu_addr & ~PAGE_MASK;
|
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));
|
cpu_addr, size, npages, ret, __builtin_return_address(0));
|
||||||
|
|
||||||
return ret;
|
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) {
|
&& dma_addr < __direct_map_base + __direct_map_size) {
|
||||||
/* Nothing to do. */
|
/* 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));
|
dma_addr, size, __builtin_return_address(0));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dma_addr > 0xffffffff) {
|
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));
|
dma_addr, size, __builtin_return_address(0));
|
||||||
return;
|
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);
|
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));
|
dma_addr, size, npages, __builtin_return_address(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -458,7 +458,7 @@ try_again:
|
||||||
cpu_addr = (void *)__get_free_pages(gfp | __GFP_ZERO, order);
|
cpu_addr = (void *)__get_free_pages(gfp | __GFP_ZERO, order);
|
||||||
if (! cpu_addr) {
|
if (! cpu_addr) {
|
||||||
printk(KERN_INFO "pci_alloc_consistent: "
|
printk(KERN_INFO "pci_alloc_consistent: "
|
||||||
"get_free_pages failed from %pf\n",
|
"get_free_pages failed from %ps\n",
|
||||||
__builtin_return_address(0));
|
__builtin_return_address(0));
|
||||||
/* ??? Really atomic allocation? Otherwise we could play
|
/* ??? Really atomic allocation? Otherwise we could play
|
||||||
with vmalloc and sg if we can't find contiguous memory. */
|
with vmalloc and sg if we can't find contiguous memory. */
|
||||||
|
@ -477,7 +477,7 @@ try_again:
|
||||||
goto 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));
|
size, cpu_addr, *dma_addrp, __builtin_return_address(0));
|
||||||
|
|
||||||
return cpu_addr;
|
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);
|
pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL);
|
||||||
free_pages((unsigned long)cpu_addr, get_order(size));
|
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));
|
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)
|
static int imx6_pm_stby_poweroff_probe(void)
|
||||||
{
|
{
|
||||||
if (pm_power_off) {
|
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);
|
__func__, pm_power_off, pm_power_off);
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,7 +133,7 @@ static const char *usermode_action[] = {
|
||||||
static int alignment_proc_show(struct seq_file *m, void *v)
|
static int alignment_proc_show(struct seq_file *m, void *v)
|
||||||
{
|
{
|
||||||
seq_printf(m, "User:\t\t%lu\n", ai_user);
|
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, "Skipped:\t%lu\n", ai_skipped);
|
||||||
seq_printf(m, "Half:\t\t%lu\n", ai_half);
|
seq_printf(m, "Half:\t\t%lu\n", ai_half);
|
||||||
seq_printf(m, "Word:\t\t%lu\n", ai_word);
|
seq_printf(m, "Word:\t\t%lu\n", ai_word);
|
||||||
|
|
|
@ -147,7 +147,7 @@ void float_raise(signed char flags)
|
||||||
#ifdef CONFIG_DEBUG_USER
|
#ifdef CONFIG_DEBUG_USER
|
||||||
if (flags & debug)
|
if (flags & debug)
|
||||||
printk(KERN_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,
|
current->comm, current->pid, flags,
|
||||||
__builtin_return_address(0), GET_USERREG()->ARM_pc);
|
__builtin_return_address(0), GET_USERREG()->ARM_pc);
|
||||||
#endif
|
#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 >= 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) &&
|
||||||
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));
|
(unsigned long)p, __builtin_return_address(0));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -876,7 +876,7 @@ void ldom_power_off(void)
|
||||||
|
|
||||||
static void ds_conn_reset(struct ds_info *dp)
|
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));
|
dp->id, __builtin_return_address(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
static void _print_addr(void *data, unsigned long address, int reliable)
|
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);
|
(void *)address);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ DECLARE_EVENT_CLASS(x86_exceptions,
|
||||||
__entry->error_code = error_code;
|
__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,
|
(void *)__entry->address, (void *)__entry->ip,
|
||||||
__entry->error_code) );
|
__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 error_code,
|
||||||
unsigned long fault_addr)
|
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))
|
(unsigned int)regs->cx, regs->ip, (void *)regs->ip))
|
||||||
show_stack_regs(regs);
|
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 error_code,
|
||||||
unsigned long fault_addr)
|
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->cx, (unsigned int)regs->dx,
|
||||||
(unsigned int)regs->ax, regs->ip, (void *)regs->ip))
|
(unsigned int)regs->ax, regs->ip, (void *)regs->ip))
|
||||||
show_stack_regs(regs);
|
show_stack_regs(regs);
|
||||||
|
|
|
@ -105,7 +105,7 @@ void xen_mc_flush(void)
|
||||||
for (i = 0; i < b->mcidx; i++) {
|
for (i = 0; i < b->mcidx; i++) {
|
||||||
if (b->entries[i].result < 0) {
|
if (b->entries[i].result < 0) {
|
||||||
#if MC_DEBUG
|
#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,
|
i + 1,
|
||||||
b->debug[i].op,
|
b->debug[i].op,
|
||||||
b->debug[i].args[0],
|
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) {
|
if (adev->wakeup.flags.notifier_present) {
|
||||||
pm_wakeup_ws_event(adev->wakeup.ws, 0, acpi_s2idle_wakeup());
|
pm_wakeup_ws_event(adev->wakeup.ws, 0, acpi_s2idle_wakeup());
|
||||||
if (adev->wakeup.context.func) {
|
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,
|
adev->wakeup.context.func,
|
||||||
dev_name(adev->wakeup.context.dev));
|
dev_name(adev->wakeup.context.dev));
|
||||||
adev->wakeup.context.func(&adev->wakeup.context);
|
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)
|
if (!pm_print_times_enabled)
|
||||||
return 0;
|
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),
|
task_pid_nr(current),
|
||||||
dev->parent ? dev_name(dev->parent) : "none");
|
dev->parent ? dev_name(dev->parent) : "none");
|
||||||
return ktime_get();
|
return ktime_get();
|
||||||
|
@ -225,7 +225,7 @@ static void initcall_debug_report(struct device *dev, ktime_t calltime,
|
||||||
rettime = ktime_get();
|
rettime = ktime_get();
|
||||||
nsecs = (s64) ktime_to_ns(ktime_sub(rettime, calltime));
|
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);
|
(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)
|
void __suspend_report_result(const char *function, void *fn, int ret)
|
||||||
{
|
{
|
||||||
if (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);
|
EXPORT_SYMBOL_GPL(__suspend_report_result);
|
||||||
|
|
||||||
|
|
|
@ -62,19 +62,19 @@ int syscore_suspend(void)
|
||||||
list_for_each_entry_reverse(ops, &syscore_ops_list, node)
|
list_for_each_entry_reverse(ops, &syscore_ops_list, node)
|
||||||
if (ops->suspend) {
|
if (ops->suspend) {
|
||||||
if (initcall_debug)
|
if (initcall_debug)
|
||||||
pr_info("PM: Calling %pF\n", ops->suspend);
|
pr_info("PM: Calling %pS\n", ops->suspend);
|
||||||
ret = ops->suspend();
|
ret = ops->suspend();
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_out;
|
goto err_out;
|
||||||
WARN_ONCE(!irqs_disabled(),
|
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);
|
trace_suspend_resume(TPS("syscore_suspend"), 0, false);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_out:
|
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)
|
list_for_each_entry_continue(ops, &syscore_ops_list, node)
|
||||||
if (ops->resume)
|
if (ops->resume)
|
||||||
|
@ -100,10 +100,10 @@ void syscore_resume(void)
|
||||||
list_for_each_entry(ops, &syscore_ops_list, node)
|
list_for_each_entry(ops, &syscore_ops_list, node)
|
||||||
if (ops->resume) {
|
if (ops->resume) {
|
||||||
if (initcall_debug)
|
if (initcall_debug)
|
||||||
pr_info("PM: Calling %pF\n", ops->resume);
|
pr_info("PM: Calling %pS\n", ops->resume);
|
||||||
ops->resume();
|
ops->resume();
|
||||||
WARN_ONCE(!irqs_disabled(),
|
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);
|
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)
|
list_for_each_entry_reverse(ops, &syscore_ops_list, node)
|
||||||
if (ops->shutdown) {
|
if (ops->shutdown) {
|
||||||
if (initcall_debug)
|
if (initcall_debug)
|
||||||
pr_info("PM: Calling %pF\n", ops->shutdown);
|
pr_info("PM: Calling %pS\n", ops->shutdown);
|
||||||
ops->shutdown();
|
ops->shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6115,7 +6115,7 @@ int drbd_ack_receiver(struct drbd_thread *thi)
|
||||||
|
|
||||||
err = cmd->fn(connection, &pi);
|
err = cmd->fn(connection, &pi);
|
||||||
if (err) {
|
if (err) {
|
||||||
drbd_err(connection, "%pf failed\n", cmd->fn);
|
drbd_err(connection, "%ps failed\n", cmd->fn);
|
||||||
goto reconnect;
|
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 */
|
/* we don't even know which FDC is the culprit */
|
||||||
pr_info("DOR0=%x\n", fdc_state[0].dor);
|
pr_info("DOR0=%x\n", fdc_state[0].dor);
|
||||||
pr_info("floppy interrupt on bizarre fdc %d\n", fdc);
|
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");
|
is_alive(__func__, "bizarre fdc");
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
}
|
}
|
||||||
|
@ -1752,7 +1752,7 @@ static void reset_interrupt(void)
|
||||||
debugt(__func__, "");
|
debugt(__func__, "");
|
||||||
result(); /* get the status ready for set_fdc */
|
result(); /* get the status ready for set_fdc */
|
||||||
if (FDCS->reset) {
|
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->error(); /* a reset just after a reset. BAD! */
|
||||||
}
|
}
|
||||||
cont->redo();
|
cont->redo();
|
||||||
|
@ -1793,7 +1793,7 @@ static void show_floppy(void)
|
||||||
pr_info("\n");
|
pr_info("\n");
|
||||||
pr_info("floppy driver state\n");
|
pr_info("floppy driver state\n");
|
||||||
pr_info("-------------------\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,
|
jiffies, interruptjiffies, jiffies - interruptjiffies,
|
||||||
lasthandler);
|
lasthandler);
|
||||||
|
|
||||||
|
@ -1812,9 +1812,9 @@ static void show_floppy(void)
|
||||||
pr_info("status=%x\n", fd_inb(FD_STATUS));
|
pr_info("status=%x\n", fd_inb(FD_STATUS));
|
||||||
pr_info("fdc_busy=%lu\n", fdc_busy);
|
pr_info("fdc_busy=%lu\n", fdc_busy);
|
||||||
if (do_floppy)
|
if (do_floppy)
|
||||||
pr_info("do_floppy=%pf\n", do_floppy);
|
pr_info("do_floppy=%ps\n", do_floppy);
|
||||||
if (work_pending(&floppy_work))
|
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))
|
if (delayed_work_pending(&fd_timer))
|
||||||
pr_info("delayed work.function=%p expires=%ld\n",
|
pr_info("delayed work.function=%p expires=%ld\n",
|
||||||
fd_timer.work.func,
|
fd_timer.work.func,
|
||||||
|
|
|
@ -466,7 +466,7 @@ static void cpufreq_list_transition_notifiers(void)
|
||||||
mutex_lock(&cpufreq_transition_notifier_list.mutex);
|
mutex_lock(&cpufreq_transition_notifier_list.mutex);
|
||||||
|
|
||||||
for (nb = cpufreq_transition_notifier_list.head; nb; nb = nb->next)
|
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);
|
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 == EXT_CSD_REV_ANY ||
|
||||||
f->ext_csd_rev == card->ext_csd.rev) &&
|
f->ext_csd_rev == card->ext_csd.rev) &&
|
||||||
rev >= f->rev_start && rev <= f->rev_end) {
|
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);
|
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;
|
struct device_driver *drv = &nd_drv->drv;
|
||||||
|
|
||||||
if (!nd_drv->type) {
|
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));
|
__builtin_return_address(0));
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,7 @@ static int validate_dimm(struct nvdimm_drvdata *ndd)
|
||||||
|
|
||||||
rc = nvdimm_check_config_data(ndd->dev);
|
rc = nvdimm_check_config_data(ndd->dev);
|
||||||
if (rc)
|
if (rc)
|
||||||
dev_dbg(ndd->dev, "%pf: %s error: %d\n",
|
dev_dbg(ndd->dev, "%ps: %s error: %d\n",
|
||||||
__builtin_return_address(0), __func__, rc);
|
__builtin_return_address(0), __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
|
@ -578,7 +578,7 @@ static int pci_legacy_suspend(struct device *dev, pm_message_t state)
|
||||||
if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
|
if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
|
||||||
&& pci_dev->current_state != PCI_UNKNOWN) {
|
&& pci_dev->current_state != PCI_UNKNOWN) {
|
||||||
WARN_ONCE(pci_dev->current_state != prev,
|
WARN_ONCE(pci_dev->current_state != prev,
|
||||||
"PCI PM: Device state not saved by %pF\n",
|
"PCI PM: Device state not saved by %pS\n",
|
||||||
drv->suspend);
|
drv->suspend);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -605,7 +605,7 @@ static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
|
||||||
if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
|
if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
|
||||||
&& pci_dev->current_state != PCI_UNKNOWN) {
|
&& pci_dev->current_state != PCI_UNKNOWN) {
|
||||||
WARN_ONCE(pci_dev->current_state != prev,
|
WARN_ONCE(pci_dev->current_state != prev,
|
||||||
"PCI PM: Device state not saved by %pF\n",
|
"PCI PM: Device state not saved by %pS\n",
|
||||||
drv->suspend_late);
|
drv->suspend_late);
|
||||||
goto Fixup;
|
goto Fixup;
|
||||||
}
|
}
|
||||||
|
@ -773,7 +773,7 @@ static int pci_pm_suspend(struct device *dev)
|
||||||
if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
|
if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
|
||||||
&& pci_dev->current_state != PCI_UNKNOWN) {
|
&& pci_dev->current_state != PCI_UNKNOWN) {
|
||||||
WARN_ONCE(pci_dev->current_state != prev,
|
WARN_ONCE(pci_dev->current_state != prev,
|
||||||
"PCI PM: State of device not saved by %pF\n",
|
"PCI PM: State of device not saved by %pS\n",
|
||||||
pm->suspend);
|
pm->suspend);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -821,7 +821,7 @@ static int pci_pm_suspend_noirq(struct device *dev)
|
||||||
if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
|
if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
|
||||||
&& pci_dev->current_state != PCI_UNKNOWN) {
|
&& pci_dev->current_state != PCI_UNKNOWN) {
|
||||||
WARN_ONCE(pci_dev->current_state != prev,
|
WARN_ONCE(pci_dev->current_state != prev,
|
||||||
"PCI PM: State of device not saved by %pF\n",
|
"PCI PM: State of device not saved by %pS\n",
|
||||||
pm->suspend_noirq);
|
pm->suspend_noirq);
|
||||||
goto Fixup;
|
goto Fixup;
|
||||||
}
|
}
|
||||||
|
@ -1260,11 +1260,11 @@ static int pci_pm_runtime_suspend(struct device *dev)
|
||||||
* log level.
|
* log level.
|
||||||
*/
|
*/
|
||||||
if (error == -EBUSY || error == -EAGAIN) {
|
if (error == -EBUSY || error == -EAGAIN) {
|
||||||
dev_dbg(dev, "can't suspend now (%pf returned %d)\n",
|
dev_dbg(dev, "can't suspend now (%ps returned %d)\n",
|
||||||
pm->runtime_suspend, error);
|
pm->runtime_suspend, error);
|
||||||
return error;
|
return error;
|
||||||
} else if (error) {
|
} else if (error) {
|
||||||
dev_err(dev, "can't suspend (%pf returned %d)\n",
|
dev_err(dev, "can't suspend (%ps returned %d)\n",
|
||||||
pm->runtime_suspend, error);
|
pm->runtime_suspend, error);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
@ -1276,7 +1276,7 @@ static int pci_pm_runtime_suspend(struct device *dev)
|
||||||
&& !pci_dev->state_saved && pci_dev->current_state != PCI_D0
|
&& !pci_dev->state_saved && pci_dev->current_state != PCI_D0
|
||||||
&& pci_dev->current_state != PCI_UNKNOWN) {
|
&& pci_dev->current_state != PCI_UNKNOWN) {
|
||||||
WARN_ONCE(pci_dev->current_state != prev,
|
WARN_ONCE(pci_dev->current_state != prev,
|
||||||
"PCI PM: State of device not saved by %pF\n",
|
"PCI PM: State of device not saved by %pS\n",
|
||||||
pm->runtime_suspend);
|
pm->runtime_suspend);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ static ktime_t fixup_debug_start(struct pci_dev *dev,
|
||||||
void (*fn)(struct pci_dev *dev))
|
void (*fn)(struct pci_dev *dev))
|
||||||
{
|
{
|
||||||
if (initcall_debug)
|
if (initcall_debug)
|
||||||
pci_info(dev, "calling %pF @ %i\n", fn, task_pid_nr(current));
|
pci_info(dev, "calling %pS @ %i\n", fn, task_pid_nr(current));
|
||||||
|
|
||||||
return ktime_get();
|
return ktime_get();
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ static void fixup_debug_report(struct pci_dev *dev, ktime_t calltime,
|
||||||
delta = ktime_sub(rettime, calltime);
|
delta = ktime_sub(rettime, calltime);
|
||||||
duration = (unsigned long long) ktime_to_ns(delta) >> 10;
|
duration = (unsigned long long) ktime_to_ns(delta) >> 10;
|
||||||
if (initcall_debug || duration > 10000)
|
if (initcall_debug || duration > 10000)
|
||||||
pci_info(dev, "%pF took %lld usecs\n", fn, duration);
|
pci_info(dev, "%pS took %lld usecs\n", fn, duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
|
static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
|
||||||
|
|
|
@ -458,7 +458,7 @@ void pnp_fixup_device(struct pnp_dev *dev)
|
||||||
for (f = pnp_fixups; *f->id; f++) {
|
for (f = pnp_fixups; *f->id; f++) {
|
||||||
if (!compare_pnp_id(dev->id, f->id))
|
if (!compare_pnp_id(dev->id, f->id))
|
||||||
continue;
|
continue;
|
||||||
pnp_dbg(&dev->dev, "%s: calling %pF\n", f->id,
|
pnp_dbg(&dev->dev, "%s: calling %pS\n", f->id,
|
||||||
f->quirk_function);
|
f->quirk_function);
|
||||||
f->quirk_function(dev);
|
f->quirk_function(dev);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1031,7 +1031,7 @@ static int esp_check_spur_intr(struct esp *esp)
|
||||||
|
|
||||||
static void esp_schedule_reset(struct esp *esp)
|
static void esp_schedule_reset(struct esp *esp)
|
||||||
{
|
{
|
||||||
esp_log_reset("esp_schedule_reset() from %pf\n",
|
esp_log_reset("esp_schedule_reset() from %ps\n",
|
||||||
__builtin_return_address(0));
|
__builtin_return_address(0));
|
||||||
esp->flags |= ESP_FLAG_RESETTING;
|
esp->flags |= ESP_FLAG_RESETTING;
|
||||||
esp_event(esp, ESP_EVENT_RESET);
|
esp_event(esp, ESP_EVENT_RESET);
|
||||||
|
|
|
@ -539,7 +539,7 @@ static int run_test_both_formats(test_func_t test_func, u32 sectorsize,
|
||||||
ret = run_test(test_func, 0, sectorsize, nodesize, alignment);
|
ret = run_test(test_func, 0, sectorsize, nodesize, alignment);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
test_err(
|
test_err(
|
||||||
"%pf failed with extents, sectorsize=%u, nodesize=%u, alignment=%u",
|
"%ps failed with extents, sectorsize=%u, nodesize=%u, alignment=%u",
|
||||||
test_func, sectorsize, nodesize, alignment);
|
test_func, sectorsize, nodesize, alignment);
|
||||||
test_ret = ret;
|
test_ret = ret;
|
||||||
}
|
}
|
||||||
|
@ -547,7 +547,7 @@ static int run_test_both_formats(test_func_t test_func, u32 sectorsize,
|
||||||
ret = run_test(test_func, 1, sectorsize, nodesize, alignment);
|
ret = run_test(test_func, 1, sectorsize, nodesize, alignment);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
test_err(
|
test_err(
|
||||||
"%pf failed with bitmaps, sectorsize=%u, nodesize=%u, alignment=%u",
|
"%ps failed with bitmaps, sectorsize=%u, nodesize=%u, alignment=%u",
|
||||||
test_func, sectorsize, nodesize, alignment);
|
test_func, sectorsize, nodesize, alignment);
|
||||||
test_ret = ret;
|
test_ret = ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1338,7 +1338,7 @@ struct f2fs_private_dio {
|
||||||
|
|
||||||
#ifdef CONFIG_F2FS_FAULT_INJECTION
|
#ifdef CONFIG_F2FS_FAULT_INJECTION
|
||||||
#define f2fs_show_injection_info(type) \
|
#define f2fs_show_injection_info(type) \
|
||||||
printk_ratelimited("%sF2FS-fs : inject %s in %s of %pF\n", \
|
printk_ratelimited("%sF2FS-fs : inject %s in %s of %pS\n", \
|
||||||
KERN_INFO, f2fs_fault_name[type], \
|
KERN_INFO, f2fs_fault_name[type], \
|
||||||
__func__, __builtin_return_address(0))
|
__func__, __builtin_return_address(0))
|
||||||
static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type)
|
static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type)
|
||||||
|
|
|
@ -115,7 +115,7 @@ static int pstore_ftrace_seq_show(struct seq_file *s, void *v)
|
||||||
|
|
||||||
rec = (struct pstore_ftrace_record *)(ps->record->buf + data->off);
|
rec = (struct pstore_ftrace_record *)(ps->record->buf + data->off);
|
||||||
|
|
||||||
seq_printf(s, "CPU:%d ts:%llu %08lx %08lx %pf <- %pF\n",
|
seq_printf(s, "CPU:%d ts:%llu %08lx %08lx %ps <- %pS\n",
|
||||||
pstore_ftrace_decode_cpu(rec),
|
pstore_ftrace_decode_cpu(rec),
|
||||||
pstore_ftrace_read_timestamp(rec),
|
pstore_ftrace_read_timestamp(rec),
|
||||||
rec->ip, rec->parent_ip, (void *)rec->ip,
|
rec->ip, rec->parent_ip, (void *)rec->ip,
|
||||||
|
|
|
@ -347,7 +347,7 @@ extern int kptr_restrict;
|
||||||
#ifdef CONFIG_PRINTK
|
#ifdef CONFIG_PRINTK
|
||||||
#define printk_once(fmt, ...) \
|
#define printk_once(fmt, ...) \
|
||||||
({ \
|
({ \
|
||||||
static bool __print_once __read_mostly; \
|
static bool __section(.data.once) __print_once; \
|
||||||
bool __ret_print_once = !__print_once; \
|
bool __ret_print_once = !__print_once; \
|
||||||
\
|
\
|
||||||
if (!__print_once) { \
|
if (!__print_once) { \
|
||||||
|
@ -358,7 +358,7 @@ extern int kptr_restrict;
|
||||||
})
|
})
|
||||||
#define printk_deferred_once(fmt, ...) \
|
#define printk_deferred_once(fmt, ...) \
|
||||||
({ \
|
({ \
|
||||||
static bool __print_once __read_mostly; \
|
static bool __section(.data.once) __print_once; \
|
||||||
bool __ret_print_once = !__print_once; \
|
bool __ret_print_once = !__print_once; \
|
||||||
\
|
\
|
||||||
if (!__print_once) { \
|
if (!__print_once) { \
|
||||||
|
|
|
@ -1345,7 +1345,7 @@ DECLARE_EVENT_CLASS(btrfs__work,
|
||||||
__entry->normal_work = &work->normal_work;
|
__entry->normal_work = &work->normal_work;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk_btrfs("work=%p (normal_work=%p) wq=%p func=%pf ordered_func=%p "
|
TP_printk_btrfs("work=%p (normal_work=%p) wq=%p func=%ps ordered_func=%p "
|
||||||
"ordered_free=%p",
|
"ordered_free=%p",
|
||||||
__entry->work, __entry->normal_work, __entry->wq,
|
__entry->work, __entry->normal_work, __entry->wq,
|
||||||
__entry->func, __entry->ordered_func, __entry->ordered_free)
|
__entry->func, __entry->ordered_func, __entry->ordered_free)
|
||||||
|
|
|
@ -30,7 +30,7 @@ TRACE_EVENT(cpuhp_enter,
|
||||||
__entry->fun = fun;
|
__entry->fun = fun;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("cpu: %04u target: %3d step: %3d (%pf)",
|
TP_printk("cpu: %04u target: %3d step: %3d (%ps)",
|
||||||
__entry->cpu, __entry->target, __entry->idx, __entry->fun)
|
__entry->cpu, __entry->target, __entry->idx, __entry->fun)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ TRACE_EVENT(cpuhp_multi_enter,
|
||||||
__entry->fun = fun;
|
__entry->fun = fun;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("cpu: %04u target: %3d step: %3d (%pf)",
|
TP_printk("cpu: %04u target: %3d step: %3d (%ps)",
|
||||||
__entry->cpu, __entry->target, __entry->idx, __entry->fun)
|
__entry->cpu, __entry->target, __entry->idx, __entry->fun)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ DECLARE_EVENT_CLASS(preemptirq_template,
|
||||||
__entry->parent_offs = (u32)(parent_ip - (unsigned long)_stext);
|
__entry->parent_offs = (u32)(parent_ip - (unsigned long)_stext);
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("caller=%pF parent=%pF",
|
TP_printk("caller=%pS parent=%pS",
|
||||||
(void *)((unsigned long)(_stext) + __entry->caller_offs),
|
(void *)((unsigned long)(_stext) + __entry->caller_offs),
|
||||||
(void *)((unsigned long)(_stext) + __entry->parent_offs))
|
(void *)((unsigned long)(_stext) + __entry->parent_offs))
|
||||||
);
|
);
|
||||||
|
|
|
@ -491,7 +491,7 @@ TRACE_EVENT(rcu_callback,
|
||||||
__entry->qlen = qlen;
|
__entry->qlen = qlen;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("%s rhp=%p func=%pf %ld/%ld",
|
TP_printk("%s rhp=%p func=%ps %ld/%ld",
|
||||||
__entry->rcuname, __entry->rhp, __entry->func,
|
__entry->rcuname, __entry->rhp, __entry->func,
|
||||||
__entry->qlen_lazy, __entry->qlen)
|
__entry->qlen_lazy, __entry->qlen)
|
||||||
);
|
);
|
||||||
|
@ -587,7 +587,7 @@ TRACE_EVENT(rcu_invoke_callback,
|
||||||
__entry->func = rhp->func;
|
__entry->func = rhp->func;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("%s rhp=%p func=%pf",
|
TP_printk("%s rhp=%p func=%ps",
|
||||||
__entry->rcuname, __entry->rhp, __entry->func)
|
__entry->rcuname, __entry->rhp, __entry->func)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -146,7 +146,7 @@ DECLARE_EVENT_CLASS(rpc_task_running,
|
||||||
__entry->flags = task->tk_flags;
|
__entry->flags = task->tk_flags;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("task:%u@%d flags=%s runstate=%s status=%d action=%pf",
|
TP_printk("task:%u@%d flags=%s runstate=%s status=%d action=%ps",
|
||||||
__entry->task_id, __entry->client_id,
|
__entry->task_id, __entry->client_id,
|
||||||
rpc_show_task_flags(__entry->flags),
|
rpc_show_task_flags(__entry->flags),
|
||||||
rpc_show_runstate(__entry->runstate),
|
rpc_show_runstate(__entry->runstate),
|
||||||
|
|
|
@ -226,7 +226,7 @@ TRACE_EVENT(mm_shrink_slab_start,
|
||||||
__entry->priority = priority;
|
__entry->priority = priority;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("%pF %p: nid: %d objects to shrink %ld gfp_flags %s cache items %ld delta %lld total_scan %ld priority %d",
|
TP_printk("%pS %p: nid: %d objects to shrink %ld gfp_flags %s cache items %ld delta %lld total_scan %ld priority %d",
|
||||||
__entry->shrink,
|
__entry->shrink,
|
||||||
__entry->shr,
|
__entry->shr,
|
||||||
__entry->nid,
|
__entry->nid,
|
||||||
|
@ -265,7 +265,7 @@ TRACE_EVENT(mm_shrink_slab_end,
|
||||||
__entry->total_scan = total_scan;
|
__entry->total_scan = total_scan;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("%pF %p: nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d",
|
TP_printk("%pS %p: nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d",
|
||||||
__entry->shrink,
|
__entry->shrink,
|
||||||
__entry->shr,
|
__entry->shr,
|
||||||
__entry->nid,
|
__entry->nid,
|
||||||
|
|
|
@ -60,7 +60,7 @@ TRACE_EVENT(workqueue_queue_work,
|
||||||
__entry->cpu = pwq->pool->cpu;
|
__entry->cpu = pwq->pool->cpu;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("work struct=%p function=%pf workqueue=%p req_cpu=%u cpu=%u",
|
TP_printk("work struct=%p function=%ps workqueue=%p req_cpu=%u cpu=%u",
|
||||||
__entry->work, __entry->function, __entry->workqueue,
|
__entry->work, __entry->function, __entry->workqueue,
|
||||||
__entry->req_cpu, __entry->cpu)
|
__entry->req_cpu, __entry->cpu)
|
||||||
);
|
);
|
||||||
|
@ -102,7 +102,7 @@ TRACE_EVENT(workqueue_execute_start,
|
||||||
__entry->function = work->func;
|
__entry->function = work->func;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("work struct %p: function %pf", __entry->work, __entry->function)
|
TP_printk("work struct %p: function %ps", __entry->work, __entry->function)
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -73,7 +73,7 @@ TRACE_EVENT(xen_mc_callback,
|
||||||
__entry->fn = fn;
|
__entry->fn = fn;
|
||||||
__entry->data = data;
|
__entry->data = data;
|
||||||
),
|
),
|
||||||
TP_printk("callback %pf, data %p",
|
TP_printk("callback %ps, data %p",
|
||||||
__entry->fn, __entry->data)
|
__entry->fn, __entry->data)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -846,7 +846,7 @@ trace_initcall_start_cb(void *data, initcall_t fn)
|
||||||
{
|
{
|
||||||
ktime_t *calltime = (ktime_t *)data;
|
ktime_t *calltime = (ktime_t *)data;
|
||||||
|
|
||||||
printk(KERN_DEBUG "calling %pF @ %i\n", fn, task_pid_nr(current));
|
printk(KERN_DEBUG "calling %pS @ %i\n", fn, task_pid_nr(current));
|
||||||
*calltime = ktime_get();
|
*calltime = ktime_get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -860,7 +860,7 @@ trace_initcall_finish_cb(void *data, initcall_t fn, int ret)
|
||||||
rettime = ktime_get();
|
rettime = ktime_get();
|
||||||
delta = ktime_sub(rettime, *calltime);
|
delta = ktime_sub(rettime, *calltime);
|
||||||
duration = (unsigned long long) ktime_to_ns(delta) >> 10;
|
duration = (unsigned long long) ktime_to_ns(delta) >> 10;
|
||||||
printk(KERN_DEBUG "initcall %pF returned %d after %lld usecs\n",
|
printk(KERN_DEBUG "initcall %pS returned %d after %lld usecs\n",
|
||||||
fn, ret, duration);
|
fn, ret, duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -917,7 +917,7 @@ int __init_or_module do_one_initcall(initcall_t fn)
|
||||||
strlcat(msgbuf, "disabled interrupts ", sizeof(msgbuf));
|
strlcat(msgbuf, "disabled interrupts ", sizeof(msgbuf));
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
}
|
}
|
||||||
WARN(msgbuf[0], "initcall %pF returned with %s\n", fn, msgbuf);
|
WARN(msgbuf[0], "initcall %pS returned with %s\n", fn, msgbuf);
|
||||||
|
|
||||||
add_latent_entropy();
|
add_latent_entropy();
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -119,7 +119,7 @@ static void async_run_entry_fn(struct work_struct *work)
|
||||||
|
|
||||||
/* 1) run (and print duration) */
|
/* 1) run (and print duration) */
|
||||||
if (initcall_debug && system_state < SYSTEM_RUNNING) {
|
if (initcall_debug && system_state < SYSTEM_RUNNING) {
|
||||||
pr_debug("calling %lli_%pF @ %i\n",
|
pr_debug("calling %lli_%pS @ %i\n",
|
||||||
(long long)entry->cookie,
|
(long long)entry->cookie,
|
||||||
entry->func, task_pid_nr(current));
|
entry->func, task_pid_nr(current));
|
||||||
calltime = ktime_get();
|
calltime = ktime_get();
|
||||||
|
@ -128,7 +128,7 @@ static void async_run_entry_fn(struct work_struct *work)
|
||||||
if (initcall_debug && system_state < SYSTEM_RUNNING) {
|
if (initcall_debug && system_state < SYSTEM_RUNNING) {
|
||||||
rettime = ktime_get();
|
rettime = ktime_get();
|
||||||
delta = ktime_sub(rettime, calltime);
|
delta = ktime_sub(rettime, calltime);
|
||||||
pr_debug("initcall %lli_%pF returned 0 after %lld usecs\n",
|
pr_debug("initcall %lli_%pS returned 0 after %lld usecs\n",
|
||||||
(long long)entry->cookie,
|
(long long)entry->cookie,
|
||||||
entry->func,
|
entry->func,
|
||||||
(long long)ktime_to_ns(delta) >> 10);
|
(long long)ktime_to_ns(delta) >> 10);
|
||||||
|
|
|
@ -2028,7 +2028,7 @@ static void handler_chain(struct uprobe *uprobe, struct pt_regs *regs)
|
||||||
if (uc->handler) {
|
if (uc->handler) {
|
||||||
rc = uc->handler(uc, regs);
|
rc = uc->handler(uc, regs);
|
||||||
WARN(rc & ~UPROBE_HANDLER_MASK,
|
WARN(rc & ~UPROBE_HANDLER_MASK,
|
||||||
"bad rc=0x%x from %pf()\n", rc, uc->handler);
|
"bad rc=0x%x from %ps()\n", rc, uc->handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uc->ret_handler)
|
if (uc->ret_handler)
|
||||||
|
|
|
@ -210,7 +210,7 @@ static int fei_seq_show(struct seq_file *m, void *v)
|
||||||
{
|
{
|
||||||
struct fei_attr *attr = list_entry(v, struct fei_attr, list);
|
struct fei_attr *attr = list_entry(v, struct fei_attr, list);
|
||||||
|
|
||||||
seq_printf(m, "%pf\n", attr->kp.addr);
|
seq_printf(m, "%ps\n", attr->kp.addr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -152,7 +152,7 @@ static int irq_debug_show(struct seq_file *m, void *p)
|
||||||
|
|
||||||
raw_spin_lock_irq(&desc->lock);
|
raw_spin_lock_irq(&desc->lock);
|
||||||
data = irq_desc_get_irq_data(desc);
|
data = irq_desc_get_irq_data(desc);
|
||||||
seq_printf(m, "handler: %pf\n", desc->handle_irq);
|
seq_printf(m, "handler: %ps\n", desc->handle_irq);
|
||||||
seq_printf(m, "device: %s\n", desc->dev_name);
|
seq_printf(m, "device: %s\n", desc->dev_name);
|
||||||
seq_printf(m, "status: 0x%08x\n", desc->status_use_accessors);
|
seq_printf(m, "status: 0x%08x\n", desc->status_use_accessors);
|
||||||
irq_debug_show_bits(m, 0, desc->status_use_accessors, irqdesc_states,
|
irq_debug_show_bits(m, 0, desc->status_use_accessors, irqdesc_states,
|
||||||
|
|
|
@ -149,7 +149,7 @@ irqreturn_t __handle_irq_event_percpu(struct irq_desc *desc, unsigned int *flags
|
||||||
res = action->handler(irq, action->dev_id);
|
res = action->handler(irq, action->dev_id);
|
||||||
trace_irq_handler_exit(irq, action, res);
|
trace_irq_handler_exit(irq, action, res);
|
||||||
|
|
||||||
if (WARN_ONCE(!irqs_disabled(),"irq %u handler %pF enabled interrupts\n",
|
if (WARN_ONCE(!irqs_disabled(),"irq %u handler %pS enabled interrupts\n",
|
||||||
irq, action->handler))
|
irq, action->handler))
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
|
|
||||||
|
|
|
@ -781,7 +781,7 @@ int __irq_set_trigger(struct irq_desc *desc, unsigned long flags)
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pr_err("Setting trigger mode %lu for irq %u failed (%pF)\n",
|
pr_err("Setting trigger mode %lu for irq %u failed (%pS)\n",
|
||||||
flags, irq_desc_get_irq(desc), chip->irq_set_type);
|
flags, irq_desc_get_irq(desc), chip->irq_set_type);
|
||||||
}
|
}
|
||||||
if (unmask)
|
if (unmask)
|
||||||
|
|
|
@ -212,9 +212,9 @@ static void __report_bad_irq(struct irq_desc *desc, irqreturn_t action_ret)
|
||||||
*/
|
*/
|
||||||
raw_spin_lock_irqsave(&desc->lock, flags);
|
raw_spin_lock_irqsave(&desc->lock, flags);
|
||||||
for_each_action_of_desc(desc, action) {
|
for_each_action_of_desc(desc, action) {
|
||||||
printk(KERN_ERR "[<%p>] %pf", action->handler, action->handler);
|
printk(KERN_ERR "[<%p>] %ps", action->handler, action->handler);
|
||||||
if (action->thread_fn)
|
if (action->thread_fn)
|
||||||
printk(KERN_CONT " threaded [<%p>] %pf",
|
printk(KERN_CONT " threaded [<%p>] %ps",
|
||||||
action->thread_fn, action->thread_fn);
|
action->thread_fn, action->thread_fn);
|
||||||
printk(KERN_CONT "\n");
|
printk(KERN_CONT "\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -2392,7 +2392,7 @@ __call_rcu(struct rcu_head *head, rcu_callback_t func, int cpu, bool lazy)
|
||||||
* Use rcu:rcu_callback trace event to find the previous
|
* Use rcu:rcu_callback trace event to find the previous
|
||||||
* time callback was passed to __call_rcu().
|
* time callback was passed to __call_rcu().
|
||||||
*/
|
*/
|
||||||
WARN_ONCE(1, "__call_rcu(): Double-freed CB %p->%pF()!!!\n",
|
WARN_ONCE(1, "__call_rcu(): Double-freed CB %p->%pS()!!!\n",
|
||||||
head, head->func);
|
head, head->func);
|
||||||
WRITE_ONCE(head->func, rcu_leak_callback);
|
WRITE_ONCE(head->func, rcu_leak_callback);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -513,7 +513,7 @@ repeat:
|
||||||
}
|
}
|
||||||
preempt_count_dec();
|
preempt_count_dec();
|
||||||
WARN_ONCE(preempt_count(),
|
WARN_ONCE(preempt_count(),
|
||||||
"cpu_stop: %pf(%p) leaked preempt count\n", fn, arg);
|
"cpu_stop: %ps(%p) leaked preempt count\n", fn, arg);
|
||||||
goto repeat;
|
goto repeat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -231,7 +231,7 @@ sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
|
||||||
if (irqtime > 0 || (irqtime == -1 && rate >= 1000000))
|
if (irqtime > 0 || (irqtime == -1 && rate >= 1000000))
|
||||||
enable_sched_clock_irqtime();
|
enable_sched_clock_irqtime();
|
||||||
|
|
||||||
pr_debug("Registered %pF as sched_clock source\n", read);
|
pr_debug("Registered %pS as sched_clock source\n", read);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init generic_sched_clock_init(void)
|
void __init generic_sched_clock_init(void)
|
||||||
|
|
|
@ -1325,7 +1325,7 @@ static void call_timer_fn(struct timer_list *timer,
|
||||||
lock_map_release(&lockdep_map);
|
lock_map_release(&lockdep_map);
|
||||||
|
|
||||||
if (count != preempt_count()) {
|
if (count != preempt_count()) {
|
||||||
WARN_ONCE(1, "timer: %pF preempt leak: %08x -> %08x\n",
|
WARN_ONCE(1, "timer: %pS preempt leak: %08x -> %08x\n",
|
||||||
fn, count, preempt_count());
|
fn, count, preempt_count());
|
||||||
/*
|
/*
|
||||||
* Restore the preempt count. That gives us a decent
|
* Restore the preempt count. That gives us a decent
|
||||||
|
|
|
@ -2271,7 +2271,7 @@ __acquires(&pool->lock)
|
||||||
|
|
||||||
if (unlikely(in_atomic() || lockdep_depth(current) > 0)) {
|
if (unlikely(in_atomic() || lockdep_depth(current) > 0)) {
|
||||||
pr_err("BUG: workqueue leaked lock or atomic: %s/0x%08x/%d\n"
|
pr_err("BUG: workqueue leaked lock or atomic: %s/0x%08x/%d\n"
|
||||||
" last function: %pf\n",
|
" last function: %ps\n",
|
||||||
current->comm, preempt_count(), task_pid_nr(current),
|
current->comm, preempt_count(), task_pid_nr(current),
|
||||||
worker->current_func);
|
worker->current_func);
|
||||||
debug_show_held_locks(current);
|
debug_show_held_locks(current);
|
||||||
|
@ -2590,11 +2590,11 @@ static void check_flush_dependency(struct workqueue_struct *target_wq,
|
||||||
worker = current_wq_worker();
|
worker = current_wq_worker();
|
||||||
|
|
||||||
WARN_ONCE(current->flags & PF_MEMALLOC,
|
WARN_ONCE(current->flags & PF_MEMALLOC,
|
||||||
"workqueue: PF_MEMALLOC task %d(%s) is flushing !WQ_MEM_RECLAIM %s:%pf",
|
"workqueue: PF_MEMALLOC task %d(%s) is flushing !WQ_MEM_RECLAIM %s:%ps",
|
||||||
current->pid, current->comm, target_wq->name, target_func);
|
current->pid, current->comm, target_wq->name, target_func);
|
||||||
WARN_ONCE(worker && ((worker->current_pwq->wq->flags &
|
WARN_ONCE(worker && ((worker->current_pwq->wq->flags &
|
||||||
(WQ_MEM_RECLAIM | __WQ_LEGACY)) == WQ_MEM_RECLAIM),
|
(WQ_MEM_RECLAIM | __WQ_LEGACY)) == WQ_MEM_RECLAIM),
|
||||||
"workqueue: WQ_MEM_RECLAIM %s:%pf is flushing !WQ_MEM_RECLAIM %s:%pf",
|
"workqueue: WQ_MEM_RECLAIM %s:%ps is flushing !WQ_MEM_RECLAIM %s:%ps",
|
||||||
worker->current_pwq->wq->name, worker->current_func,
|
worker->current_pwq->wq->name, worker->current_func,
|
||||||
target_wq->name, target_func);
|
target_wq->name, target_func);
|
||||||
}
|
}
|
||||||
|
@ -4581,7 +4581,7 @@ void print_worker_info(const char *log_lvl, struct task_struct *task)
|
||||||
probe_kernel_read(desc, worker->desc, sizeof(desc) - 1);
|
probe_kernel_read(desc, worker->desc, sizeof(desc) - 1);
|
||||||
|
|
||||||
if (fn || name[0] || desc[0]) {
|
if (fn || name[0] || desc[0]) {
|
||||||
printk("%sWorkqueue: %s %pf", log_lvl, name, fn);
|
printk("%sWorkqueue: %s %ps", log_lvl, name, fn);
|
||||||
if (strcmp(name, desc))
|
if (strcmp(name, desc))
|
||||||
pr_cont(" (%s)", desc);
|
pr_cont(" (%s)", desc);
|
||||||
pr_cont("\n");
|
pr_cont("\n");
|
||||||
|
@ -4606,7 +4606,7 @@ static void pr_cont_work(bool comma, struct work_struct *work)
|
||||||
pr_cont("%s BAR(%d)", comma ? "," : "",
|
pr_cont("%s BAR(%d)", comma ? "," : "",
|
||||||
task_pid_nr(barr->task));
|
task_pid_nr(barr->task));
|
||||||
} else {
|
} else {
|
||||||
pr_cont("%s %pf", comma ? "," : "", work->func);
|
pr_cont("%s %ps", comma ? "," : "", work->func);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4638,7 +4638,7 @@ static void show_pwq(struct pool_workqueue *pwq)
|
||||||
if (worker->current_pwq != pwq)
|
if (worker->current_pwq != pwq)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
pr_cont("%s %d%s:%pf", comma ? "," : "",
|
pr_cont("%s %d%s:%ps", comma ? "," : "",
|
||||||
task_pid_nr(worker->task),
|
task_pid_nr(worker->task),
|
||||||
worker == pwq->wq->rescuer ? "(RESCUER)" : "",
|
worker == pwq->wq->rescuer ? "(RESCUER)" : "",
|
||||||
worker->current_func);
|
worker->current_func);
|
||||||
|
|
|
@ -189,7 +189,7 @@ static int ei_seq_show(struct seq_file *m, void *v)
|
||||||
{
|
{
|
||||||
struct ei_entry *ent = list_entry(v, struct ei_entry, list);
|
struct ei_entry *ent = list_entry(v, struct ei_entry, list);
|
||||||
|
|
||||||
seq_printf(m, "%pf\t%s\n", (void *)ent->start_addr,
|
seq_printf(m, "%ps\t%s\n", (void *)ent->start_addr,
|
||||||
error_type_string(ent->etype));
|
error_type_string(ent->etype));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,7 +151,7 @@ static void percpu_ref_switch_to_atomic_rcu(struct rcu_head *rcu)
|
||||||
atomic_long_add((long)count - PERCPU_COUNT_BIAS, &ref->count);
|
atomic_long_add((long)count - PERCPU_COUNT_BIAS, &ref->count);
|
||||||
|
|
||||||
WARN_ONCE(atomic_long_read(&ref->count) <= 0,
|
WARN_ONCE(atomic_long_read(&ref->count) <= 0,
|
||||||
"percpu ref (%pf) <= 0 (%ld) after switching to atomic",
|
"percpu ref (%ps) <= 0 (%ld) after switching to atomic",
|
||||||
ref->release, atomic_long_read(&ref->count));
|
ref->release, atomic_long_read(&ref->count));
|
||||||
|
|
||||||
/* @ref is viewed as dead on all CPUs, send out switch confirmation */
|
/* @ref is viewed as dead on all CPUs, send out switch confirmation */
|
||||||
|
@ -333,7 +333,7 @@ void percpu_ref_kill_and_confirm(struct percpu_ref *ref,
|
||||||
spin_lock_irqsave(&percpu_ref_switch_lock, flags);
|
spin_lock_irqsave(&percpu_ref_switch_lock, flags);
|
||||||
|
|
||||||
WARN_ONCE(ref->percpu_count_ptr & __PERCPU_REF_DEAD,
|
WARN_ONCE(ref->percpu_count_ptr & __PERCPU_REF_DEAD,
|
||||||
"%s called more than once on %pf!", __func__, ref->release);
|
"%s called more than once on %ps!", __func__, ref->release);
|
||||||
|
|
||||||
ref->percpu_count_ptr |= __PERCPU_REF_DEAD;
|
ref->percpu_count_ptr |= __PERCPU_REF_DEAD;
|
||||||
__percpu_ref_switch_mode(ref, confirm_kill);
|
__percpu_ref_switch_mode(ref, confirm_kill);
|
||||||
|
|
|
@ -241,6 +241,7 @@ plain_format(void)
|
||||||
#define PTR ((void *)0x456789ab)
|
#define PTR ((void *)0x456789ab)
|
||||||
#define PTR_STR "456789ab"
|
#define PTR_STR "456789ab"
|
||||||
#define PTR_VAL_NO_CRNG "(ptrval)"
|
#define PTR_VAL_NO_CRNG "(ptrval)"
|
||||||
|
#define ZEROS ""
|
||||||
|
|
||||||
static int __init
|
static int __init
|
||||||
plain_format(void)
|
plain_format(void)
|
||||||
|
@ -270,7 +271,6 @@ plain_hash_to_buffer(const void *p, char *buf, size_t len)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int __init
|
static int __init
|
||||||
plain_hash(void)
|
plain_hash(void)
|
||||||
{
|
{
|
||||||
|
@ -327,6 +327,24 @@ test_hashed(const char *fmt, const void *p)
|
||||||
test(buf, fmt, p);
|
test(buf, fmt, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init
|
||||||
|
null_pointer(void)
|
||||||
|
{
|
||||||
|
test_hashed("%p", NULL);
|
||||||
|
test(ZEROS "00000000", "%px", NULL);
|
||||||
|
test("(null)", "%pE", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PTR_INVALID ((void *)0x000000ab)
|
||||||
|
|
||||||
|
static void __init
|
||||||
|
invalid_pointer(void)
|
||||||
|
{
|
||||||
|
test_hashed("%p", PTR_INVALID);
|
||||||
|
test(ZEROS "000000ab", "%px", PTR_INVALID);
|
||||||
|
test("(efault)", "%pE", PTR_INVALID);
|
||||||
|
}
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
symbol_ptr(void)
|
symbol_ptr(void)
|
||||||
{
|
{
|
||||||
|
@ -464,8 +482,7 @@ struct_rtc_time(void)
|
||||||
.tm_year = 118,
|
.tm_year = 118,
|
||||||
};
|
};
|
||||||
|
|
||||||
test_hashed("%pt", &tm);
|
test("(%ptR?)", "%pt", &tm);
|
||||||
|
|
||||||
test("2018-11-26T05:35:43", "%ptR", &tm);
|
test("2018-11-26T05:35:43", "%ptR", &tm);
|
||||||
test("0118-10-26T05:35:43", "%ptRr", &tm);
|
test("0118-10-26T05:35:43", "%ptRr", &tm);
|
||||||
test("05:35:43|2018-11-26", "%ptRt|%ptRd", &tm, &tm);
|
test("05:35:43|2018-11-26", "%ptRt|%ptRd", &tm, &tm);
|
||||||
|
@ -483,14 +500,14 @@ static void __init
|
||||||
large_bitmap(void)
|
large_bitmap(void)
|
||||||
{
|
{
|
||||||
const int nbits = 1 << 16;
|
const int nbits = 1 << 16;
|
||||||
unsigned long *bits = kcalloc(BITS_TO_LONGS(nbits), sizeof(long), GFP_KERNEL);
|
unsigned long *bits = bitmap_zalloc(nbits, GFP_KERNEL);
|
||||||
if (!bits)
|
if (!bits)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bitmap_set(bits, 1, 20);
|
bitmap_set(bits, 1, 20);
|
||||||
bitmap_set(bits, 60000, 15);
|
bitmap_set(bits, 60000, 15);
|
||||||
test("1-20,60000-60014", "%*pbl", nbits, bits);
|
test("1-20,60000-60014", "%*pbl", nbits, bits);
|
||||||
kfree(bits);
|
bitmap_free(bits);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
|
@ -574,6 +591,8 @@ static void __init
|
||||||
test_pointer(void)
|
test_pointer(void)
|
||||||
{
|
{
|
||||||
plain();
|
plain();
|
||||||
|
null_pointer();
|
||||||
|
invalid_pointer();
|
||||||
symbol_ptr();
|
symbol_ptr();
|
||||||
kernel_ptr();
|
kernel_ptr();
|
||||||
struct_resource();
|
struct_resource();
|
||||||
|
|
431
lib/vsprintf.c
431
lib/vsprintf.c
|
@ -593,15 +593,13 @@ char *widen_string(char *buf, int n, char *end, struct printf_spec spec)
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
/* Handle string from a well known address. */
|
||||||
char *string(char *buf, char *end, const char *s, struct printf_spec spec)
|
static char *string_nocheck(char *buf, char *end, const char *s,
|
||||||
|
struct printf_spec spec)
|
||||||
{
|
{
|
||||||
int len = 0;
|
int len = 0;
|
||||||
size_t lim = spec.precision;
|
size_t lim = spec.precision;
|
||||||
|
|
||||||
if ((unsigned long)s < PAGE_SIZE)
|
|
||||||
s = "(null)";
|
|
||||||
|
|
||||||
while (lim--) {
|
while (lim--) {
|
||||||
char c = *s++;
|
char c = *s++;
|
||||||
if (!c)
|
if (!c)
|
||||||
|
@ -614,9 +612,67 @@ char *string(char *buf, char *end, const char *s, struct printf_spec spec)
|
||||||
return widen_string(buf, len, end, spec);
|
return widen_string(buf, len, end, spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Be careful: error messages must fit into the given buffer. */
|
||||||
|
static char *error_string(char *buf, char *end, const char *s,
|
||||||
|
struct printf_spec spec)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Hard limit to avoid a completely insane messages. It actually
|
||||||
|
* works pretty well because most error messages are in
|
||||||
|
* the many pointer format modifiers.
|
||||||
|
*/
|
||||||
|
if (spec.precision == -1)
|
||||||
|
spec.precision = 2 * sizeof(void *);
|
||||||
|
|
||||||
|
return string_nocheck(buf, end, s, spec);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is not a fool-proof test. 99% of the time that this will fault is
|
||||||
|
* due to a bad pointer, not one that crosses into bad memory. Just test
|
||||||
|
* the address to make sure it doesn't fault due to a poorly added printk
|
||||||
|
* during debugging.
|
||||||
|
*/
|
||||||
|
static const char *check_pointer_msg(const void *ptr)
|
||||||
|
{
|
||||||
|
char byte;
|
||||||
|
|
||||||
|
if (!ptr)
|
||||||
|
return "(null)";
|
||||||
|
|
||||||
|
if (probe_kernel_address(ptr, byte))
|
||||||
|
return "(efault)";
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int check_pointer(char **buf, char *end, const void *ptr,
|
||||||
|
struct printf_spec spec)
|
||||||
|
{
|
||||||
|
const char *err_msg;
|
||||||
|
|
||||||
|
err_msg = check_pointer_msg(ptr);
|
||||||
|
if (err_msg) {
|
||||||
|
*buf = error_string(*buf, end, err_msg, spec);
|
||||||
|
return -EFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
char *pointer_string(char *buf, char *end, const void *ptr,
|
char *string(char *buf, char *end, const char *s,
|
||||||
struct printf_spec spec)
|
struct printf_spec spec)
|
||||||
|
{
|
||||||
|
if (check_pointer(&buf, end, s, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
|
return string_nocheck(buf, end, s, spec);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *pointer_string(char *buf, char *end,
|
||||||
|
const void *ptr,
|
||||||
|
struct printf_spec spec)
|
||||||
{
|
{
|
||||||
spec.base = 16;
|
spec.base = 16;
|
||||||
spec.flags |= SMALL;
|
spec.flags |= SMALL;
|
||||||
|
@ -701,7 +757,7 @@ static char *ptr_to_id(char *buf, char *end, const void *ptr,
|
||||||
if (static_branch_unlikely(¬_filled_random_ptr_key)) {
|
if (static_branch_unlikely(¬_filled_random_ptr_key)) {
|
||||||
spec.field_width = 2 * sizeof(ptr);
|
spec.field_width = 2 * sizeof(ptr);
|
||||||
/* string length must be less than default_width */
|
/* string length must be less than default_width */
|
||||||
return string(buf, end, str, spec);
|
return error_string(buf, end, str, spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
|
@ -717,6 +773,55 @@ static char *ptr_to_id(char *buf, char *end, const void *ptr,
|
||||||
return pointer_string(buf, end, (const void *)hashval, spec);
|
return pointer_string(buf, end, (const void *)hashval, spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int kptr_restrict __read_mostly;
|
||||||
|
|
||||||
|
static noinline_for_stack
|
||||||
|
char *restricted_pointer(char *buf, char *end, const void *ptr,
|
||||||
|
struct printf_spec spec)
|
||||||
|
{
|
||||||
|
switch (kptr_restrict) {
|
||||||
|
case 0:
|
||||||
|
/* Handle as %p, hash and do _not_ leak addresses. */
|
||||||
|
return ptr_to_id(buf, end, ptr, spec);
|
||||||
|
case 1: {
|
||||||
|
const struct cred *cred;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* kptr_restrict==1 cannot be used in IRQ context
|
||||||
|
* because its test for CAP_SYSLOG would be meaningless.
|
||||||
|
*/
|
||||||
|
if (in_irq() || in_serving_softirq() || in_nmi()) {
|
||||||
|
if (spec.field_width == -1)
|
||||||
|
spec.field_width = 2 * sizeof(ptr);
|
||||||
|
return error_string(buf, end, "pK-error", spec);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Only print the real pointer value if the current
|
||||||
|
* process has CAP_SYSLOG and is running with the
|
||||||
|
* same credentials it started with. This is because
|
||||||
|
* access to files is checked at open() time, but %pK
|
||||||
|
* checks permission at read() time. We don't want to
|
||||||
|
* leak pointer values if a binary opens a file using
|
||||||
|
* %pK and then elevates privileges before reading it.
|
||||||
|
*/
|
||||||
|
cred = current_cred();
|
||||||
|
if (!has_capability_noaudit(current, CAP_SYSLOG) ||
|
||||||
|
!uid_eq(cred->euid, cred->uid) ||
|
||||||
|
!gid_eq(cred->egid, cred->gid))
|
||||||
|
ptr = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
default:
|
||||||
|
/* Always print 0's for %pK */
|
||||||
|
ptr = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pointer_string(buf, end, ptr, spec);
|
||||||
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
char *dentry_name(char *buf, char *end, const struct dentry *d, struct printf_spec spec,
|
char *dentry_name(char *buf, char *end, const struct dentry *d, struct printf_spec spec,
|
||||||
const char *fmt)
|
const char *fmt)
|
||||||
|
@ -736,6 +841,11 @@ char *dentry_name(char *buf, char *end, const struct dentry *d, struct printf_sp
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
for (i = 0; i < depth; i++, d = p) {
|
for (i = 0; i < depth; i++, d = p) {
|
||||||
|
if (check_pointer(&buf, end, d, spec)) {
|
||||||
|
rcu_read_unlock();
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
p = READ_ONCE(d->d_parent);
|
p = READ_ONCE(d->d_parent);
|
||||||
array[i] = READ_ONCE(d->d_name.name);
|
array[i] = READ_ONCE(d->d_name.name);
|
||||||
if (p == d) {
|
if (p == d) {
|
||||||
|
@ -766,8 +876,12 @@ static noinline_for_stack
|
||||||
char *bdev_name(char *buf, char *end, struct block_device *bdev,
|
char *bdev_name(char *buf, char *end, struct block_device *bdev,
|
||||||
struct printf_spec spec, const char *fmt)
|
struct printf_spec spec, const char *fmt)
|
||||||
{
|
{
|
||||||
struct gendisk *hd = bdev->bd_disk;
|
struct gendisk *hd;
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, bdev, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
|
hd = bdev->bd_disk;
|
||||||
buf = string(buf, end, hd->disk_name, spec);
|
buf = string(buf, end, hd->disk_name, spec);
|
||||||
if (bdev->bd_part->partno) {
|
if (bdev->bd_part->partno) {
|
||||||
if (isdigit(hd->disk_name[strlen(hd->disk_name)-1])) {
|
if (isdigit(hd->disk_name[strlen(hd->disk_name)-1])) {
|
||||||
|
@ -802,7 +916,7 @@ char *symbol_string(char *buf, char *end, void *ptr,
|
||||||
else
|
else
|
||||||
sprint_symbol_no_offset(sym, value);
|
sprint_symbol_no_offset(sym, value);
|
||||||
|
|
||||||
return string(buf, end, sym, spec);
|
return string_nocheck(buf, end, sym, spec);
|
||||||
#else
|
#else
|
||||||
return special_hex_number(buf, end, value, sizeof(void *));
|
return special_hex_number(buf, end, value, sizeof(void *));
|
||||||
#endif
|
#endif
|
||||||
|
@ -886,29 +1000,32 @@ char *resource_string(char *buf, char *end, struct resource *res,
|
||||||
int decode = (fmt[0] == 'R') ? 1 : 0;
|
int decode = (fmt[0] == 'R') ? 1 : 0;
|
||||||
const struct printf_spec *specp;
|
const struct printf_spec *specp;
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, res, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
*p++ = '[';
|
*p++ = '[';
|
||||||
if (res->flags & IORESOURCE_IO) {
|
if (res->flags & IORESOURCE_IO) {
|
||||||
p = string(p, pend, "io ", str_spec);
|
p = string_nocheck(p, pend, "io ", str_spec);
|
||||||
specp = &io_spec;
|
specp = &io_spec;
|
||||||
} else if (res->flags & IORESOURCE_MEM) {
|
} else if (res->flags & IORESOURCE_MEM) {
|
||||||
p = string(p, pend, "mem ", str_spec);
|
p = string_nocheck(p, pend, "mem ", str_spec);
|
||||||
specp = &mem_spec;
|
specp = &mem_spec;
|
||||||
} else if (res->flags & IORESOURCE_IRQ) {
|
} else if (res->flags & IORESOURCE_IRQ) {
|
||||||
p = string(p, pend, "irq ", str_spec);
|
p = string_nocheck(p, pend, "irq ", str_spec);
|
||||||
specp = &default_dec_spec;
|
specp = &default_dec_spec;
|
||||||
} else if (res->flags & IORESOURCE_DMA) {
|
} else if (res->flags & IORESOURCE_DMA) {
|
||||||
p = string(p, pend, "dma ", str_spec);
|
p = string_nocheck(p, pend, "dma ", str_spec);
|
||||||
specp = &default_dec_spec;
|
specp = &default_dec_spec;
|
||||||
} else if (res->flags & IORESOURCE_BUS) {
|
} else if (res->flags & IORESOURCE_BUS) {
|
||||||
p = string(p, pend, "bus ", str_spec);
|
p = string_nocheck(p, pend, "bus ", str_spec);
|
||||||
specp = &bus_spec;
|
specp = &bus_spec;
|
||||||
} else {
|
} else {
|
||||||
p = string(p, pend, "??? ", str_spec);
|
p = string_nocheck(p, pend, "??? ", str_spec);
|
||||||
specp = &mem_spec;
|
specp = &mem_spec;
|
||||||
decode = 0;
|
decode = 0;
|
||||||
}
|
}
|
||||||
if (decode && res->flags & IORESOURCE_UNSET) {
|
if (decode && res->flags & IORESOURCE_UNSET) {
|
||||||
p = string(p, pend, "size ", str_spec);
|
p = string_nocheck(p, pend, "size ", str_spec);
|
||||||
p = number(p, pend, resource_size(res), *specp);
|
p = number(p, pend, resource_size(res), *specp);
|
||||||
} else {
|
} else {
|
||||||
p = number(p, pend, res->start, *specp);
|
p = number(p, pend, res->start, *specp);
|
||||||
|
@ -919,21 +1036,21 @@ char *resource_string(char *buf, char *end, struct resource *res,
|
||||||
}
|
}
|
||||||
if (decode) {
|
if (decode) {
|
||||||
if (res->flags & IORESOURCE_MEM_64)
|
if (res->flags & IORESOURCE_MEM_64)
|
||||||
p = string(p, pend, " 64bit", str_spec);
|
p = string_nocheck(p, pend, " 64bit", str_spec);
|
||||||
if (res->flags & IORESOURCE_PREFETCH)
|
if (res->flags & IORESOURCE_PREFETCH)
|
||||||
p = string(p, pend, " pref", str_spec);
|
p = string_nocheck(p, pend, " pref", str_spec);
|
||||||
if (res->flags & IORESOURCE_WINDOW)
|
if (res->flags & IORESOURCE_WINDOW)
|
||||||
p = string(p, pend, " window", str_spec);
|
p = string_nocheck(p, pend, " window", str_spec);
|
||||||
if (res->flags & IORESOURCE_DISABLED)
|
if (res->flags & IORESOURCE_DISABLED)
|
||||||
p = string(p, pend, " disabled", str_spec);
|
p = string_nocheck(p, pend, " disabled", str_spec);
|
||||||
} else {
|
} else {
|
||||||
p = string(p, pend, " flags ", str_spec);
|
p = string_nocheck(p, pend, " flags ", str_spec);
|
||||||
p = number(p, pend, res->flags, default_flag_spec);
|
p = number(p, pend, res->flags, default_flag_spec);
|
||||||
}
|
}
|
||||||
*p++ = ']';
|
*p++ = ']';
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
|
|
||||||
return string(buf, end, sym, spec);
|
return string_nocheck(buf, end, sym, spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
|
@ -948,9 +1065,8 @@ char *hex_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
|
||||||
/* nothing to print */
|
/* nothing to print */
|
||||||
return buf;
|
return buf;
|
||||||
|
|
||||||
if (ZERO_OR_NULL_PTR(addr))
|
if (check_pointer(&buf, end, addr, spec))
|
||||||
/* NULL pointer */
|
return buf;
|
||||||
return string(buf, end, NULL, spec);
|
|
||||||
|
|
||||||
switch (fmt[1]) {
|
switch (fmt[1]) {
|
||||||
case 'C':
|
case 'C':
|
||||||
|
@ -997,6 +1113,9 @@ char *bitmap_string(char *buf, char *end, unsigned long *bitmap,
|
||||||
int i, chunksz;
|
int i, chunksz;
|
||||||
bool first = true;
|
bool first = true;
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, bitmap, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
/* reused to print numbers */
|
/* reused to print numbers */
|
||||||
spec = (struct printf_spec){ .flags = SMALL | ZEROPAD, .base = 16 };
|
spec = (struct printf_spec){ .flags = SMALL | ZEROPAD, .base = 16 };
|
||||||
|
|
||||||
|
@ -1038,6 +1157,9 @@ char *bitmap_list_string(char *buf, char *end, unsigned long *bitmap,
|
||||||
int cur, rbot, rtop;
|
int cur, rbot, rtop;
|
||||||
bool first = true;
|
bool first = true;
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, bitmap, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
rbot = cur = find_first_bit(bitmap, nr_bits);
|
rbot = cur = find_first_bit(bitmap, nr_bits);
|
||||||
while (cur < nr_bits) {
|
while (cur < nr_bits) {
|
||||||
rtop = cur;
|
rtop = cur;
|
||||||
|
@ -1076,6 +1198,9 @@ char *mac_address_string(char *buf, char *end, u8 *addr,
|
||||||
char separator;
|
char separator;
|
||||||
bool reversed = false;
|
bool reversed = false;
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, addr, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
switch (fmt[1]) {
|
switch (fmt[1]) {
|
||||||
case 'F':
|
case 'F':
|
||||||
separator = '-';
|
separator = '-';
|
||||||
|
@ -1101,7 +1226,7 @@ char *mac_address_string(char *buf, char *end, u8 *addr,
|
||||||
}
|
}
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
|
|
||||||
return string(buf, end, mac_addr, spec);
|
return string_nocheck(buf, end, mac_addr, spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
|
@ -1264,7 +1389,7 @@ char *ip6_addr_string(char *buf, char *end, const u8 *addr,
|
||||||
else
|
else
|
||||||
ip6_string(ip6_addr, addr, fmt);
|
ip6_string(ip6_addr, addr, fmt);
|
||||||
|
|
||||||
return string(buf, end, ip6_addr, spec);
|
return string_nocheck(buf, end, ip6_addr, spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
|
@ -1275,7 +1400,7 @@ char *ip4_addr_string(char *buf, char *end, const u8 *addr,
|
||||||
|
|
||||||
ip4_string(ip4_addr, addr, fmt);
|
ip4_string(ip4_addr, addr, fmt);
|
||||||
|
|
||||||
return string(buf, end, ip4_addr, spec);
|
return string_nocheck(buf, end, ip4_addr, spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
|
@ -1337,7 +1462,7 @@ char *ip6_addr_string_sa(char *buf, char *end, const struct sockaddr_in6 *sa,
|
||||||
}
|
}
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
|
|
||||||
return string(buf, end, ip6_addr, spec);
|
return string_nocheck(buf, end, ip6_addr, spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
|
@ -1372,7 +1497,42 @@ char *ip4_addr_string_sa(char *buf, char *end, const struct sockaddr_in *sa,
|
||||||
}
|
}
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
|
|
||||||
return string(buf, end, ip4_addr, spec);
|
return string_nocheck(buf, end, ip4_addr, spec);
|
||||||
|
}
|
||||||
|
|
||||||
|
static noinline_for_stack
|
||||||
|
char *ip_addr_string(char *buf, char *end, const void *ptr,
|
||||||
|
struct printf_spec spec, const char *fmt)
|
||||||
|
{
|
||||||
|
char *err_fmt_msg;
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, ptr, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
|
switch (fmt[1]) {
|
||||||
|
case '6':
|
||||||
|
return ip6_addr_string(buf, end, ptr, spec, fmt);
|
||||||
|
case '4':
|
||||||
|
return ip4_addr_string(buf, end, ptr, spec, fmt);
|
||||||
|
case 'S': {
|
||||||
|
const union {
|
||||||
|
struct sockaddr raw;
|
||||||
|
struct sockaddr_in v4;
|
||||||
|
struct sockaddr_in6 v6;
|
||||||
|
} *sa = ptr;
|
||||||
|
|
||||||
|
switch (sa->raw.sa_family) {
|
||||||
|
case AF_INET:
|
||||||
|
return ip4_addr_string_sa(buf, end, &sa->v4, spec, fmt);
|
||||||
|
case AF_INET6:
|
||||||
|
return ip6_addr_string_sa(buf, end, &sa->v6, spec, fmt);
|
||||||
|
default:
|
||||||
|
return error_string(buf, end, "(einval)", spec);
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
|
||||||
|
err_fmt_msg = fmt[0] == 'i' ? "(%pi?)" : "(%pI?)";
|
||||||
|
return error_string(buf, end, err_fmt_msg, spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
|
@ -1387,9 +1547,8 @@ char *escaped_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
|
||||||
if (spec.field_width == 0)
|
if (spec.field_width == 0)
|
||||||
return buf; /* nothing to print */
|
return buf; /* nothing to print */
|
||||||
|
|
||||||
if (ZERO_OR_NULL_PTR(addr))
|
if (check_pointer(&buf, end, addr, spec))
|
||||||
return string(buf, end, NULL, spec); /* NULL pointer */
|
return buf;
|
||||||
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
switch (fmt[count++]) {
|
switch (fmt[count++]) {
|
||||||
|
@ -1435,6 +1594,21 @@ char *escaped_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *va_format(char *buf, char *end, struct va_format *va_fmt,
|
||||||
|
struct printf_spec spec, const char *fmt)
|
||||||
|
{
|
||||||
|
va_list va;
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, va_fmt, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
|
va_copy(va, *va_fmt->va);
|
||||||
|
buf += vsnprintf(buf, end > buf ? end - buf : 0, va_fmt->fmt, va);
|
||||||
|
va_end(va);
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
char *uuid_string(char *buf, char *end, const u8 *addr,
|
char *uuid_string(char *buf, char *end, const u8 *addr,
|
||||||
struct printf_spec spec, const char *fmt)
|
struct printf_spec spec, const char *fmt)
|
||||||
|
@ -1445,6 +1619,9 @@ char *uuid_string(char *buf, char *end, const u8 *addr,
|
||||||
const u8 *index = uuid_index;
|
const u8 *index = uuid_index;
|
||||||
bool uc = false;
|
bool uc = false;
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, addr, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
switch (*(++fmt)) {
|
switch (*(++fmt)) {
|
||||||
case 'L':
|
case 'L':
|
||||||
uc = true; /* fall-through */
|
uc = true; /* fall-through */
|
||||||
|
@ -1473,56 +1650,7 @@ char *uuid_string(char *buf, char *end, const u8 *addr,
|
||||||
|
|
||||||
*p = 0;
|
*p = 0;
|
||||||
|
|
||||||
return string(buf, end, uuid, spec);
|
return string_nocheck(buf, end, uuid, spec);
|
||||||
}
|
|
||||||
|
|
||||||
int kptr_restrict __read_mostly;
|
|
||||||
|
|
||||||
static noinline_for_stack
|
|
||||||
char *restricted_pointer(char *buf, char *end, const void *ptr,
|
|
||||||
struct printf_spec spec)
|
|
||||||
{
|
|
||||||
switch (kptr_restrict) {
|
|
||||||
case 0:
|
|
||||||
/* Always print %pK values */
|
|
||||||
break;
|
|
||||||
case 1: {
|
|
||||||
const struct cred *cred;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* kptr_restrict==1 cannot be used in IRQ context
|
|
||||||
* because its test for CAP_SYSLOG would be meaningless.
|
|
||||||
*/
|
|
||||||
if (in_irq() || in_serving_softirq() || in_nmi()) {
|
|
||||||
if (spec.field_width == -1)
|
|
||||||
spec.field_width = 2 * sizeof(ptr);
|
|
||||||
return string(buf, end, "pK-error", spec);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Only print the real pointer value if the current
|
|
||||||
* process has CAP_SYSLOG and is running with the
|
|
||||||
* same credentials it started with. This is because
|
|
||||||
* access to files is checked at open() time, but %pK
|
|
||||||
* checks permission at read() time. We don't want to
|
|
||||||
* leak pointer values if a binary opens a file using
|
|
||||||
* %pK and then elevates privileges before reading it.
|
|
||||||
*/
|
|
||||||
cred = current_cred();
|
|
||||||
if (!has_capability_noaudit(current, CAP_SYSLOG) ||
|
|
||||||
!uid_eq(cred->euid, cred->uid) ||
|
|
||||||
!gid_eq(cred->egid, cred->gid))
|
|
||||||
ptr = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 2:
|
|
||||||
default:
|
|
||||||
/* Always print 0's for %pK */
|
|
||||||
ptr = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return pointer_string(buf, end, ptr, spec);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
|
@ -1532,24 +1660,31 @@ char *netdev_bits(char *buf, char *end, const void *addr,
|
||||||
unsigned long long num;
|
unsigned long long num;
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, addr, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
switch (fmt[1]) {
|
switch (fmt[1]) {
|
||||||
case 'F':
|
case 'F':
|
||||||
num = *(const netdev_features_t *)addr;
|
num = *(const netdev_features_t *)addr;
|
||||||
size = sizeof(netdev_features_t);
|
size = sizeof(netdev_features_t);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return ptr_to_id(buf, end, addr, spec);
|
return error_string(buf, end, "(%pN?)", spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
return special_hex_number(buf, end, num, size);
|
return special_hex_number(buf, end, num, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
char *address_val(char *buf, char *end, const void *addr, const char *fmt)
|
char *address_val(char *buf, char *end, const void *addr,
|
||||||
|
struct printf_spec spec, const char *fmt)
|
||||||
{
|
{
|
||||||
unsigned long long num;
|
unsigned long long num;
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, addr, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
switch (fmt[1]) {
|
switch (fmt[1]) {
|
||||||
case 'd':
|
case 'd':
|
||||||
num = *(const dma_addr_t *)addr;
|
num = *(const dma_addr_t *)addr;
|
||||||
|
@ -1601,12 +1736,16 @@ char *time_str(char *buf, char *end, const struct rtc_time *tm, bool r)
|
||||||
}
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
char *rtc_str(char *buf, char *end, const struct rtc_time *tm, const char *fmt)
|
char *rtc_str(char *buf, char *end, const struct rtc_time *tm,
|
||||||
|
struct printf_spec spec, const char *fmt)
|
||||||
{
|
{
|
||||||
bool have_t = true, have_d = true;
|
bool have_t = true, have_d = true;
|
||||||
bool raw = false;
|
bool raw = false;
|
||||||
int count = 2;
|
int count = 2;
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, tm, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
switch (fmt[count]) {
|
switch (fmt[count]) {
|
||||||
case 'd':
|
case 'd':
|
||||||
have_t = false;
|
have_t = false;
|
||||||
|
@ -1640,9 +1779,9 @@ char *time_and_date(char *buf, char *end, void *ptr, struct printf_spec spec,
|
||||||
{
|
{
|
||||||
switch (fmt[1]) {
|
switch (fmt[1]) {
|
||||||
case 'R':
|
case 'R':
|
||||||
return rtc_str(buf, end, (const struct rtc_time *)ptr, fmt);
|
return rtc_str(buf, end, (const struct rtc_time *)ptr, spec, fmt);
|
||||||
default:
|
default:
|
||||||
return ptr_to_id(buf, end, ptr, spec);
|
return error_string(buf, end, "(%ptR?)", spec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1650,8 +1789,11 @@ static noinline_for_stack
|
||||||
char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
|
char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
|
||||||
const char *fmt)
|
const char *fmt)
|
||||||
{
|
{
|
||||||
if (!IS_ENABLED(CONFIG_HAVE_CLK) || !clk)
|
if (!IS_ENABLED(CONFIG_HAVE_CLK))
|
||||||
return string(buf, end, NULL, spec);
|
return error_string(buf, end, "(%pC?)", spec);
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, clk, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
switch (fmt[1]) {
|
switch (fmt[1]) {
|
||||||
case 'n':
|
case 'n':
|
||||||
|
@ -1659,7 +1801,7 @@ char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
|
||||||
#ifdef CONFIG_COMMON_CLK
|
#ifdef CONFIG_COMMON_CLK
|
||||||
return string(buf, end, __clk_get_name(clk), spec);
|
return string(buf, end, __clk_get_name(clk), spec);
|
||||||
#else
|
#else
|
||||||
return ptr_to_id(buf, end, clk, spec);
|
return error_string(buf, end, "(%pC?)", spec);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1692,11 +1834,15 @@ char *format_flags(char *buf, char *end, unsigned long flags,
|
||||||
}
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
char *flags_string(char *buf, char *end, void *flags_ptr, const char *fmt)
|
char *flags_string(char *buf, char *end, void *flags_ptr,
|
||||||
|
struct printf_spec spec, const char *fmt)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
const struct trace_print_flags *names;
|
const struct trace_print_flags *names;
|
||||||
|
|
||||||
|
if (check_pointer(&buf, end, flags_ptr, spec))
|
||||||
|
return buf;
|
||||||
|
|
||||||
switch (fmt[1]) {
|
switch (fmt[1]) {
|
||||||
case 'p':
|
case 'p':
|
||||||
flags = *(unsigned long *)flags_ptr;
|
flags = *(unsigned long *)flags_ptr;
|
||||||
|
@ -1713,8 +1859,7 @@ char *flags_string(char *buf, char *end, void *flags_ptr, const char *fmt)
|
||||||
names = gfpflag_names;
|
names = gfpflag_names;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
WARN_ONCE(1, "Unsupported flags modifier: %c\n", fmt[1]);
|
return error_string(buf, end, "(%pG?)", spec);
|
||||||
return buf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return format_flags(buf, end, flags, names);
|
return format_flags(buf, end, flags, names);
|
||||||
|
@ -1736,13 +1881,13 @@ char *device_node_gen_full_name(const struct device_node *np, char *buf, char *e
|
||||||
|
|
||||||
/* special case for root node */
|
/* special case for root node */
|
||||||
if (!parent)
|
if (!parent)
|
||||||
return string(buf, end, "/", default_str_spec);
|
return string_nocheck(buf, end, "/", default_str_spec);
|
||||||
|
|
||||||
for (depth = 0; parent->parent; depth++)
|
for (depth = 0; parent->parent; depth++)
|
||||||
parent = parent->parent;
|
parent = parent->parent;
|
||||||
|
|
||||||
for ( ; depth >= 0; depth--) {
|
for ( ; depth >= 0; depth--) {
|
||||||
buf = string(buf, end, "/", default_str_spec);
|
buf = string_nocheck(buf, end, "/", default_str_spec);
|
||||||
buf = string(buf, end, device_node_name_for_depth(np, depth),
|
buf = string(buf, end, device_node_name_for_depth(np, depth),
|
||||||
default_str_spec);
|
default_str_spec);
|
||||||
}
|
}
|
||||||
|
@ -1770,10 +1915,10 @@ char *device_node_string(char *buf, char *end, struct device_node *dn,
|
||||||
str_spec.field_width = -1;
|
str_spec.field_width = -1;
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_OF))
|
if (!IS_ENABLED(CONFIG_OF))
|
||||||
return string(buf, end, "(!OF)", spec);
|
return error_string(buf, end, "(%pOF?)", spec);
|
||||||
|
|
||||||
if ((unsigned long)dn < PAGE_SIZE)
|
if (check_pointer(&buf, end, dn, spec))
|
||||||
return string(buf, end, "(null)", spec);
|
return buf;
|
||||||
|
|
||||||
/* simple case without anything any more format specifiers */
|
/* simple case without anything any more format specifiers */
|
||||||
fmt++;
|
fmt++;
|
||||||
|
@ -1814,7 +1959,7 @@ char *device_node_string(char *buf, char *end, struct device_node *dn,
|
||||||
tbuf[2] = of_node_check_flag(dn, OF_POPULATED) ? 'P' : '-';
|
tbuf[2] = of_node_check_flag(dn, OF_POPULATED) ? 'P' : '-';
|
||||||
tbuf[3] = of_node_check_flag(dn, OF_POPULATED_BUS) ? 'B' : '-';
|
tbuf[3] = of_node_check_flag(dn, OF_POPULATED_BUS) ? 'B' : '-';
|
||||||
tbuf[4] = 0;
|
tbuf[4] = 0;
|
||||||
buf = string(buf, end, tbuf, str_spec);
|
buf = string_nocheck(buf, end, tbuf, str_spec);
|
||||||
break;
|
break;
|
||||||
case 'c': /* major compatible string */
|
case 'c': /* major compatible string */
|
||||||
ret = of_property_read_string(dn, "compatible", &p);
|
ret = of_property_read_string(dn, "compatible", &p);
|
||||||
|
@ -1825,10 +1970,10 @@ char *device_node_string(char *buf, char *end, struct device_node *dn,
|
||||||
has_mult = false;
|
has_mult = false;
|
||||||
of_property_for_each_string(dn, "compatible", prop, p) {
|
of_property_for_each_string(dn, "compatible", prop, p) {
|
||||||
if (has_mult)
|
if (has_mult)
|
||||||
buf = string(buf, end, ",", str_spec);
|
buf = string_nocheck(buf, end, ",", str_spec);
|
||||||
buf = string(buf, end, "\"", str_spec);
|
buf = string_nocheck(buf, end, "\"", str_spec);
|
||||||
buf = string(buf, end, p, str_spec);
|
buf = string(buf, end, p, str_spec);
|
||||||
buf = string(buf, end, "\"", str_spec);
|
buf = string_nocheck(buf, end, "\"", str_spec);
|
||||||
|
|
||||||
has_mult = true;
|
has_mult = true;
|
||||||
}
|
}
|
||||||
|
@ -1841,6 +1986,17 @@ char *device_node_string(char *buf, char *end, struct device_node *dn,
|
||||||
return widen_string(buf, buf - buf_start, end, spec);
|
return widen_string(buf, buf - buf_start, end, spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *kobject_string(char *buf, char *end, void *ptr,
|
||||||
|
struct printf_spec spec, const char *fmt)
|
||||||
|
{
|
||||||
|
switch (fmt[1]) {
|
||||||
|
case 'F':
|
||||||
|
return device_node_string(buf, end, ptr, spec, fmt + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return error_string(buf, end, "(%pO?)", spec);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Show a '%p' thing. A kernel extension is that the '%p' is followed
|
* Show a '%p' thing. A kernel extension is that the '%p' is followed
|
||||||
* by an extra set of alphanumeric characters that are extended format
|
* by an extra set of alphanumeric characters that are extended format
|
||||||
|
@ -1957,18 +2113,6 @@ static noinline_for_stack
|
||||||
char *pointer(const char *fmt, char *buf, char *end, void *ptr,
|
char *pointer(const char *fmt, char *buf, char *end, void *ptr,
|
||||||
struct printf_spec spec)
|
struct printf_spec spec)
|
||||||
{
|
{
|
||||||
const int default_width = 2 * sizeof(void *);
|
|
||||||
|
|
||||||
if (!ptr && *fmt != 'K' && *fmt != 'x') {
|
|
||||||
/*
|
|
||||||
* Print (null) with the same width as a pointer so it makes
|
|
||||||
* tabular output look nice.
|
|
||||||
*/
|
|
||||||
if (spec.field_width == -1)
|
|
||||||
spec.field_width = default_width;
|
|
||||||
return string(buf, end, "(null)", spec);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (*fmt) {
|
switch (*fmt) {
|
||||||
case 'F':
|
case 'F':
|
||||||
case 'f':
|
case 'f':
|
||||||
|
@ -2004,50 +2148,19 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
|
||||||
* 4: 001.002.003.004
|
* 4: 001.002.003.004
|
||||||
* 6: 000102...0f
|
* 6: 000102...0f
|
||||||
*/
|
*/
|
||||||
switch (fmt[1]) {
|
return ip_addr_string(buf, end, ptr, spec, fmt);
|
||||||
case '6':
|
|
||||||
return ip6_addr_string(buf, end, ptr, spec, fmt);
|
|
||||||
case '4':
|
|
||||||
return ip4_addr_string(buf, end, ptr, spec, fmt);
|
|
||||||
case 'S': {
|
|
||||||
const union {
|
|
||||||
struct sockaddr raw;
|
|
||||||
struct sockaddr_in v4;
|
|
||||||
struct sockaddr_in6 v6;
|
|
||||||
} *sa = ptr;
|
|
||||||
|
|
||||||
switch (sa->raw.sa_family) {
|
|
||||||
case AF_INET:
|
|
||||||
return ip4_addr_string_sa(buf, end, &sa->v4, spec, fmt);
|
|
||||||
case AF_INET6:
|
|
||||||
return ip6_addr_string_sa(buf, end, &sa->v6, spec, fmt);
|
|
||||||
default:
|
|
||||||
return string(buf, end, "(invalid address)", spec);
|
|
||||||
}}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'E':
|
case 'E':
|
||||||
return escaped_string(buf, end, ptr, spec, fmt);
|
return escaped_string(buf, end, ptr, spec, fmt);
|
||||||
case 'U':
|
case 'U':
|
||||||
return uuid_string(buf, end, ptr, spec, fmt);
|
return uuid_string(buf, end, ptr, spec, fmt);
|
||||||
case 'V':
|
case 'V':
|
||||||
{
|
return va_format(buf, end, ptr, spec, fmt);
|
||||||
va_list va;
|
|
||||||
|
|
||||||
va_copy(va, *((struct va_format *)ptr)->va);
|
|
||||||
buf += vsnprintf(buf, end > buf ? end - buf : 0,
|
|
||||||
((struct va_format *)ptr)->fmt, va);
|
|
||||||
va_end(va);
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
case 'K':
|
case 'K':
|
||||||
if (!kptr_restrict)
|
|
||||||
break;
|
|
||||||
return restricted_pointer(buf, end, ptr, spec);
|
return restricted_pointer(buf, end, ptr, spec);
|
||||||
case 'N':
|
case 'N':
|
||||||
return netdev_bits(buf, end, ptr, spec, fmt);
|
return netdev_bits(buf, end, ptr, spec, fmt);
|
||||||
case 'a':
|
case 'a':
|
||||||
return address_val(buf, end, ptr, fmt);
|
return address_val(buf, end, ptr, spec, fmt);
|
||||||
case 'd':
|
case 'd':
|
||||||
return dentry_name(buf, end, ptr, spec, fmt);
|
return dentry_name(buf, end, ptr, spec, fmt);
|
||||||
case 't':
|
case 't':
|
||||||
|
@ -2064,13 +2177,9 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case 'G':
|
case 'G':
|
||||||
return flags_string(buf, end, ptr, fmt);
|
return flags_string(buf, end, ptr, spec, fmt);
|
||||||
case 'O':
|
case 'O':
|
||||||
switch (fmt[1]) {
|
return kobject_string(buf, end, ptr, spec, fmt);
|
||||||
case 'F':
|
|
||||||
return device_node_string(buf, end, ptr, spec, fmt + 1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'x':
|
case 'x':
|
||||||
return pointer_string(buf, end, ptr, spec);
|
return pointer_string(buf, end, ptr, spec);
|
||||||
}
|
}
|
||||||
|
@ -2685,11 +2794,13 @@ int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args)
|
||||||
|
|
||||||
case FORMAT_TYPE_STR: {
|
case FORMAT_TYPE_STR: {
|
||||||
const char *save_str = va_arg(args, char *);
|
const char *save_str = va_arg(args, char *);
|
||||||
|
const char *err_msg;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
if ((unsigned long)save_str > (unsigned long)-PAGE_SIZE
|
err_msg = check_pointer_msg(save_str);
|
||||||
|| (unsigned long)save_str < PAGE_SIZE)
|
if (err_msg)
|
||||||
save_str = "(null)";
|
save_str = err_msg;
|
||||||
|
|
||||||
len = strlen(save_str) + 1;
|
len = strlen(save_str) + 1;
|
||||||
if (str + len < end)
|
if (str + len < end)
|
||||||
memcpy(str, save_str, len);
|
memcpy(str, save_str, len);
|
||||||
|
|
|
@ -702,7 +702,7 @@ int __init_memblock memblock_add(phys_addr_t base, phys_addr_t size)
|
||||||
{
|
{
|
||||||
phys_addr_t end = base + size - 1;
|
phys_addr_t end = base + size - 1;
|
||||||
|
|
||||||
memblock_dbg("memblock_add: [%pa-%pa] %pF\n",
|
memblock_dbg("memblock_add: [%pa-%pa] %pS\n",
|
||||||
&base, &end, (void *)_RET_IP_);
|
&base, &end, (void *)_RET_IP_);
|
||||||
|
|
||||||
return memblock_add_range(&memblock.memory, base, size, MAX_NUMNODES, 0);
|
return memblock_add_range(&memblock.memory, base, size, MAX_NUMNODES, 0);
|
||||||
|
@ -821,7 +821,7 @@ int __init_memblock memblock_free(phys_addr_t base, phys_addr_t size)
|
||||||
{
|
{
|
||||||
phys_addr_t end = base + size - 1;
|
phys_addr_t end = base + size - 1;
|
||||||
|
|
||||||
memblock_dbg(" memblock_free: [%pa-%pa] %pF\n",
|
memblock_dbg(" memblock_free: [%pa-%pa] %pS\n",
|
||||||
&base, &end, (void *)_RET_IP_);
|
&base, &end, (void *)_RET_IP_);
|
||||||
|
|
||||||
kmemleak_free_part_phys(base, size);
|
kmemleak_free_part_phys(base, size);
|
||||||
|
@ -832,7 +832,7 @@ int __init_memblock memblock_reserve(phys_addr_t base, phys_addr_t size)
|
||||||
{
|
{
|
||||||
phys_addr_t end = base + size - 1;
|
phys_addr_t end = base + size - 1;
|
||||||
|
|
||||||
memblock_dbg("memblock_reserve: [%pa-%pa] %pF\n",
|
memblock_dbg("memblock_reserve: [%pa-%pa] %pS\n",
|
||||||
&base, &end, (void *)_RET_IP_);
|
&base, &end, (void *)_RET_IP_);
|
||||||
|
|
||||||
return memblock_add_range(&memblock.reserved, base, size, MAX_NUMNODES, 0);
|
return memblock_add_range(&memblock.reserved, base, size, MAX_NUMNODES, 0);
|
||||||
|
@ -1447,7 +1447,7 @@ void * __init memblock_alloc_try_nid_raw(
|
||||||
{
|
{
|
||||||
void *ptr;
|
void *ptr;
|
||||||
|
|
||||||
memblock_dbg("%s: %llu bytes align=0x%llx nid=%d from=%pa max_addr=%pa %pF\n",
|
memblock_dbg("%s: %llu bytes align=0x%llx nid=%d from=%pa max_addr=%pa %pS\n",
|
||||||
__func__, (u64)size, (u64)align, nid, &min_addr,
|
__func__, (u64)size, (u64)align, nid, &min_addr,
|
||||||
&max_addr, (void *)_RET_IP_);
|
&max_addr, (void *)_RET_IP_);
|
||||||
|
|
||||||
|
@ -1483,7 +1483,7 @@ void * __init memblock_alloc_try_nid(
|
||||||
{
|
{
|
||||||
void *ptr;
|
void *ptr;
|
||||||
|
|
||||||
memblock_dbg("%s: %llu bytes align=0x%llx nid=%d from=%pa max_addr=%pa %pF\n",
|
memblock_dbg("%s: %llu bytes align=0x%llx nid=%d from=%pa max_addr=%pa %pS\n",
|
||||||
__func__, (u64)size, (u64)align, nid, &min_addr,
|
__func__, (u64)size, (u64)align, nid, &min_addr,
|
||||||
&max_addr, (void *)_RET_IP_);
|
&max_addr, (void *)_RET_IP_);
|
||||||
ptr = memblock_alloc_internal(size, align,
|
ptr = memblock_alloc_internal(size, align,
|
||||||
|
@ -1508,7 +1508,7 @@ void __init __memblock_free_late(phys_addr_t base, phys_addr_t size)
|
||||||
phys_addr_t cursor, end;
|
phys_addr_t cursor, end;
|
||||||
|
|
||||||
end = base + size - 1;
|
end = base + size - 1;
|
||||||
memblock_dbg("%s: [%pa-%pa] %pF\n",
|
memblock_dbg("%s: [%pa-%pa] %pS\n",
|
||||||
__func__, &base, &end, (void *)_RET_IP_);
|
__func__, &base, &end, (void *)_RET_IP_);
|
||||||
kmemleak_free_part_phys(base, size);
|
kmemleak_free_part_phys(base, size);
|
||||||
cursor = PFN_UP(base);
|
cursor = PFN_UP(base);
|
||||||
|
|
|
@ -519,7 +519,7 @@ static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr,
|
||||||
dump_page(page, "bad pte");
|
dump_page(page, "bad pte");
|
||||||
pr_alert("addr:%p vm_flags:%08lx anon_vma:%p mapping:%p index:%lx\n",
|
pr_alert("addr:%p vm_flags:%08lx anon_vma:%p mapping:%p index:%lx\n",
|
||||||
(void *)addr, vma->vm_flags, vma->anon_vma, mapping, index);
|
(void *)addr, vma->vm_flags, vma->anon_vma, mapping, index);
|
||||||
pr_alert("file:%pD fault:%pf mmap:%pf readpage:%pf\n",
|
pr_alert("file:%pD fault:%ps mmap:%ps readpage:%ps\n",
|
||||||
vma->vm_file,
|
vma->vm_file,
|
||||||
vma->vm_ops ? vma->vm_ops->fault : NULL,
|
vma->vm_ops ? vma->vm_ops->fault : NULL,
|
||||||
vma->vm_file ? vma->vm_file->f_op->mmap : NULL,
|
vma->vm_file ? vma->vm_file->f_op->mmap : NULL,
|
||||||
|
|
|
@ -493,7 +493,7 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl,
|
||||||
|
|
||||||
total_scan += delta;
|
total_scan += delta;
|
||||||
if (total_scan < 0) {
|
if (total_scan < 0) {
|
||||||
pr_err("shrink_slab: %pF negative objects to delete nr=%ld\n",
|
pr_err("shrink_slab: %pS negative objects to delete nr=%ld\n",
|
||||||
shrinker->scan_objects, total_scan);
|
shrinker->scan_objects, total_scan);
|
||||||
total_scan = freeable;
|
total_scan = freeable;
|
||||||
next_deferred = nr;
|
next_deferred = nr;
|
||||||
|
|
|
@ -2398,7 +2398,7 @@ static void finish_request(struct ceph_osd_request *req)
|
||||||
|
|
||||||
static void __complete_request(struct ceph_osd_request *req)
|
static void __complete_request(struct ceph_osd_request *req)
|
||||||
{
|
{
|
||||||
dout("%s req %p tid %llu cb %pf result %d\n", __func__, req,
|
dout("%s req %p tid %llu cb %ps result %d\n", __func__, req,
|
||||||
req->r_tid, req->r_callback, req->r_result);
|
req->r_tid, req->r_callback, req->r_result);
|
||||||
|
|
||||||
if (req->r_callback)
|
if (req->r_callback)
|
||||||
|
|
|
@ -258,7 +258,7 @@ static int ptype_seq_show(struct seq_file *seq, void *v)
|
||||||
else
|
else
|
||||||
seq_printf(seq, "%04x", ntohs(pt->type));
|
seq_printf(seq, "%04x", ntohs(pt->type));
|
||||||
|
|
||||||
seq_printf(seq, " %-8s %pf\n",
|
seq_printf(seq, " %-8s %ps\n",
|
||||||
pt->dev ? pt->dev->name : "", pt->func);
|
pt->dev ? pt->dev->name : "", pt->func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,7 @@ static void poll_one_napi(struct napi_struct *napi)
|
||||||
* indicate that we are clearing the Tx path only.
|
* indicate that we are clearing the Tx path only.
|
||||||
*/
|
*/
|
||||||
work = napi->poll(napi, 0);
|
work = napi->poll(napi, 0);
|
||||||
WARN_ONCE(work, "%pF exceeded budget in poll\n", napi->poll);
|
WARN_ONCE(work, "%pS exceeded budget in poll\n", napi->poll);
|
||||||
trace_napi_poll(napi, work, 0);
|
trace_napi_poll(napi, work, 0);
|
||||||
|
|
||||||
clear_bit(NAPI_STATE_NPSVC, &napi->state);
|
clear_bit(NAPI_STATE_NPSVC, &napi->state);
|
||||||
|
@ -346,7 +346,7 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb,
|
||||||
}
|
}
|
||||||
|
|
||||||
WARN_ONCE(!irqs_disabled(),
|
WARN_ONCE(!irqs_disabled(),
|
||||||
"netpoll_send_skb_on_dev(): %s enabled interrupts in poll (%pF)\n",
|
"netpoll_send_skb_on_dev(): %s enabled interrupts in poll (%pS)\n",
|
||||||
dev->name, dev->netdev_ops->ndo_start_xmit);
|
dev->name, dev->netdev_ops->ndo_start_xmit);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue