Skip to content

Commit 0f13302

Browse files
Daniel Bristot de OliveiraIngo Molnar
authored andcommitted
jump_label: Sort entries of the same key by the code
In the batching mode, all the entries of a given key are updated at once. During the update of a key, a hit in the int3 handler will check if the hitting code address belongs to one of these keys. To optimize the search of a given code in the vector of entries being updated, a binary search is used. The binary search relies on the order of the entries of a key by its code. Hence the keys need to be sorted by the code too, so sort the entries of a given key by the code. Signed-off-by: Daniel Bristot de Oliveira <bristot@redhat.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Chris von Recklinghausen <crecklin@redhat.com> Cc: Clark Williams <williams@redhat.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Jason Baron <jbaron@akamai.com> Cc: Jiri Kosina <jkosina@suse.cz> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Marcelo Tosatti <mtosatti@redhat.com> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Scott Wood <swood@redhat.com> Cc: Steven Rostedt (VMware) <rostedt@goodmis.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/f57ae83e0592418ba269866bb7ade570fc8632e0.1560325897.git.bristot@redhat.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
1 parent 4cc6620 commit 0f13302

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

kernel/jump_label.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,26 @@ static int jump_label_cmp(const void *a, const void *b)
3737
const struct jump_entry *jea = a;
3838
const struct jump_entry *jeb = b;
3939

40+
/*
41+
* Entrires are sorted by key.
42+
*/
4043
if (jump_entry_key(jea) < jump_entry_key(jeb))
4144
return -1;
4245

4346
if (jump_entry_key(jea) > jump_entry_key(jeb))
4447
return 1;
4548

49+
/*
50+
* In the batching mode, entries should also be sorted by the code
51+
* inside the already sorted list of entries, enabling a bsearch in
52+
* the vector.
53+
*/
54+
if (jump_entry_code(jea) < jump_entry_code(jeb))
55+
return -1;
56+
57+
if (jump_entry_code(jea) > jump_entry_code(jeb))
58+
return 1;
59+
4660
return 0;
4761
}
4862

0 commit comments

Comments
 (0)