/* * Copyright 2006, Red Hat, Inc., Dave Jones * Released under the General Public License (GPL). * * This file contains the linked list validation for DEBUG_LIST. */ #include #include #include #include #include /* * Check that the data structures for the list manipulations are reasonably * valid. Failures here indicate memory corruption (and possibly an exploit * attempt). */ bool __list_add_valid(struct list_head *new, struct list_head *prev, struct list_head *next) { CHECK_DATA_CORRUPTION(next->prev != prev, "list_add corruption. next->prev should be prev (%p), but was %p. (next=%p).\n", prev, next->prev, next); CHECK_DATA_CORRUPTION(prev->next != next, "list_add corruption. prev->next should be next (%p), but was %p. (prev=%p).\n", next, prev->next, prev); CHECK_DATA_CORRUPTION(new == prev || new == next, "list_add double add: new=%p, prev=%p, next=%p.\n", new, prev, next); return true; } EXPORT_SYMBOL(__list_add_valid); bool __list_del_entry_valid(struct list_head *entry) { struct list_head *prev, *next; prev = entry->prev; next = entry->next; CHECK_DATA_CORRUPTION(next == LIST_POISON1, "list_del corruption, %p->next is LIST_POISON1 (%p)\n", entry, LIST_POISON1); CHECK_DATA_CORRUPTION(prev == LIST_POISON2, "list_del corruption, %p->prev is LIST_POISON2 (%p)\n", entry, LIST_POISON2); CHECK_DATA_CORRUPTION(prev->next != entry, "list_del corruption. prev->next should be %p, but was %p\n", entry, prev->next); CHECK_DATA_CORRUPTION(next->prev != entry, "list_del corruption. next->prev should be %p, but was %p\n", entry, next->prev); return true; } EXPORT_SYMBOL(__list_del_entry_valid); amp;id=4205e4786d0b9fc3b4fec7b1910cf645a0468307'>refslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2017-01-10 14:01:05 +0100
committerThomas Gleixner <tglx@linutronix.de>2017-01-16 13:20:05 +0100
commit4205e4786d0b9fc3b4fec7b1910cf645a0468307 (patch)
tree685ccb486409197b936c785eb9d173c3edff45a1 /tools/perf/Documentation/manpage-1.72.xsl
parent7e164ce4e8ecd7e9a58a83750bd3ee03125df154 (diff)
cpu/hotplug: Provide dynamic range for prepare stage
Mathieu reported that the LTTNG modules are broken as of 4.10-rc1 due to the removal of the cpu hotplug notifiers. Usually I don't care much about out of tree modules, but LTTNG is widely used in distros. There are two ways to solve that: 1) Reserve a hotplug state for LTTNG 2) Add a dynamic range for the prepare states. While #1 is the simplest solution, #2 is the proper one as we can convert in tree users, which do not care about ordering, to the dynamic range as well. Add a dynamic range which allows LTTNG to request states in the prepare stage. Reported-and-tested-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Sebastian Sewior <bigeasy@linutronix.de> Cc: Steven Rostedt <rostedt@goodmis.org> Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1701101353010.3401@nanos Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'tools/perf/Documentation/manpage-1.72.xsl')