/* * kernel/stacktrace.c * * Stack trace management functions * * Copyright (C) 2006 Red Hat, Inc., Ingo Molnar */ #include #include #include #include #include void print_stack_trace(struct stack_trace *trace, int spaces) { int i; if (WARN_ON(!trace->entries)) return; for (i = 0; i < trace->nr_entries; i++) { printk("%*c", 1 + spaces, ' '); print_ip_sym(trace->entries[i]); } } EXPORT_SYMBOL_GPL(print_stack_trace); int snprint_stack_trace(char *buf, size_t size, struct stack_trace *trace, int spaces) { int i; unsigned long ip; int generated; int total = 0; if (WARN_ON(!trace->entries)) return 0; for (i = 0; i < trace->nr_entries; i++) { ip = trace->entries[i]; generated = snprintf(buf, size, "%*c[<%p>] %pS\n", 1 + spaces, ' ', (void *) ip, (void *) ip); total += generated; /* Assume that generated isn't a negative number */ if (generated >= size) { buf += size; size = 0; } else { buf += generated; size -= generated; } } return total; } EXPORT_SYMBOL_GPL(snprint_stack_trace); /* * Architectures that do not implement save_stack_trace_tsk or * save_stack_trace_regs get this weak alias and a once-per-bootup warning * (whenever this facility is utilized - for example by procfs): */ __weak void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace) { WARN_ONCE(1, KERN_INFO "save_stack_trace_tsk() not implemented yet.\n"); } __weak void save_stack_trace_regs(struct pt_regs *regs, struct stack_trace *trace) { WARN_ONCE(1, KERN_INFO "save_stack_trace_regs() not implemented yet.\n"); } fa5a5ab440de0a94d9ad8b3ce2d0'>refslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2017-01-12 17:15:56 +0100
committerDaniel Vetter <daniel.vetter@ffwll.ch>2017-01-30 10:17:32 +0100
commite6e7b48b295afa5a5ab440de0a94d9ad8b3ce2d0 (patch)
tree77cadb6d8aad1b52c34e4afa8c9deef603bbe2ed /include/drm/drm_plane.h
parent4e5b54f127426c82dc2816340c26d951a5bb3429 (diff)
drm: Don't race connector registration
I was under the misconception that the sysfs dev stuff can be fully set up, and then registered all in one step with device_add. That's true for properties and property groups, but not for parents and child devices. Those must be fully registered before you can register a child. Add a bit of tracking to make sure that asynchronous mst connector hotplugging gets this right. For consistency we rely upon the implicit barriers of the connector->mutex, which is taken anyway, to ensure that at least either the connector or device registration call will work out. Mildly tested since I can't reliably reproduce this on my mst box here. Reported-by: Dave Hansen <dave.hansen@intel.com> Cc: Dave Hansen <dave.hansen@intel.com> Acked-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1484237756-2720-1-git-send-email-daniel.vetter@ffwll.ch
Diffstat (limited to 'include/drm/drm_plane.h')