Re: [PATCH V2 3/9] x86/jump_label: Move checking code away from __jump_label_transform()

2018-12-19 Thread Daniel Bristot de Oliveira
On 12/19/18 9:49 AM, Thomas Gleixner wrote:
> On Wed, 19 Dec 2018, Jiri Kosina wrote:
> 
>> On Tue, 18 Dec 2018, Daniel Bristot de Oliveira wrote:
>>
>>> This patch creates a new functions 
>>
>> I am not a native speaker, but this doesn't sound like proper english to 
>> me.
> 
> Aside of that 'This patch' is wrong to begin with. See Documentation/process/
> 

I will address these errors in the next version.

Thanks.

-- Daniel


Re: [PATCH V2 3/9] x86/jump_label: Move checking code away from __jump_label_transform()

2018-12-19 Thread Thomas Gleixner
On Wed, 19 Dec 2018, Jiri Kosina wrote:

> On Tue, 18 Dec 2018, Daniel Bristot de Oliveira wrote:
> 
> > This patch creates a new functions 
> 
> I am not a native speaker, but this doesn't sound like proper english to 
> me.

Aside of that 'This patch' is wrong to begin with. See Documentation/process/



Re: [PATCH V2 3/9] x86/jump_label: Move checking code away from __jump_label_transform()

2018-12-19 Thread Jiri Kosina
On Tue, 18 Dec 2018, Daniel Bristot de Oliveira wrote:

> This patch creates a new functions 

I am not a native speaker, but this doesn't sound like proper english to 
me.

> to check the current code before updating a jump_entry.

It should also be stated that this is equivalent code transformation, I 
think.

Thanks,

-- 
Jiri Kosina
SUSE Labs



[PATCH V2 3/9] x86/jump_label: Move checking code away from __jump_label_transform()

2018-12-18 Thread Daniel Bristot de Oliveira
This patch creates a new functions to check the current code before
updating a jump_entry.

Signed-off-by: Daniel Bristot de Oliveira 
Cc: Thomas Gleixner 
Cc: Ingo Molnar 
Cc: Borislav Petkov 
Cc: "H. Peter Anvin" 
Cc: Greg Kroah-Hartman 
Cc: Pavel Tatashin 
Cc: Masami Hiramatsu 
Cc: "Steven Rostedt (VMware)" 
Cc: Zhou Chengming 
Cc: Jiri Kosina 
Cc: Josh Poimboeuf 
Cc: "Peter Zijlstra (Intel)" 
Cc: Chris von Recklinghausen 
Cc: Jason Baron 
Cc: Scott Wood 
Cc: Marcelo Tosatti 
Cc: Clark Williams 
Cc: x...@kernel.org
Cc: linux-kernel@vger.kernel.org
---
 arch/x86/kernel/jump_label.c | 60 +---
 1 file changed, 42 insertions(+), 18 deletions(-)

diff --git a/arch/x86/kernel/jump_label.c b/arch/x86/kernel/jump_label.c
index aac0c1f7e354..7894080bd02f 100644
--- a/arch/x86/kernel/jump_label.c
+++ b/arch/x86/kernel/jump_label.c
@@ -37,16 +37,53 @@ static void bug_at(unsigned char *ip, int line)
BUG();
 }
 
+static inline void __jump_label_trans_check_enable(struct jump_entry *entry,
+  enum jump_label_type type,
+  const unsigned char 
*ideal_nop,
+  int init)
+{
+   const unsigned char default_nop[] = { STATIC_KEY_INIT_NOP };
+   const void *expect;
+   int line;
+
+   if (init) {
+   expect = default_nop; line = __LINE__;
+   } else {
+   expect = ideal_nop; line = __LINE__;
+   }
+
+   if (memcmp((void *)jump_entry_code(entry), expect, JUMP_LABEL_NOP_SIZE))
+   bug_at((void *)jump_entry_code(entry), line);
+}
+
+static inline void __jump_label_trans_check_disable(struct jump_entry *entry,
+   enum jump_label_type type,
+   union jump_code_union *jmp,
+   int init)
+{
+   const unsigned char default_nop[] = { STATIC_KEY_INIT_NOP };
+   const void *expect;
+   int line;
+
+   if (init) {
+   expect = default_nop; line = __LINE__;
+   } else {
+   expect = jmp->code; line = __LINE__;
+   }
+
+   if (memcmp((void *)jump_entry_code(entry), expect, JUMP_LABEL_NOP_SIZE))
+   bug_at((void *)jump_entry_code(entry), line);
+}
+
+
 static void __ref __jump_label_transform(struct jump_entry *entry,
 enum jump_label_type type,
 void *(*poker)(void *, const void *, 
size_t),
 int init)
 {
union jump_code_union jmp;
-   const unsigned char default_nop[] = { STATIC_KEY_INIT_NOP };
const unsigned char *ideal_nop = ideal_nops[NOP_ATOMIC5];
-   const void *expect, *code;
-   int line;
+   const void *code;
 
jmp.jump = 0xe9;
jmp.offset = jump_entry_target(entry) -
@@ -56,26 +93,13 @@ static void __ref __jump_label_transform(struct jump_entry 
*entry,
poker = text_poke_early;
 
if (type == JUMP_LABEL_JMP) {
-   if (init) {
-   expect = default_nop; line = __LINE__;
-   } else {
-   expect = ideal_nop; line = __LINE__;
-   }
-
+   __jump_label_trans_check_enable(entry, type, ideal_nop, init);
code = &jmp.code;
} else {
-   if (init) {
-   expect = default_nop; line = __LINE__;
-   } else {
-   expect = &jmp.code; line = __LINE__;
-   }
-
+   __jump_label_trans_check_disable(entry, type, &jmp, init);
code = ideal_nop;
}
 
-   if (memcmp((void *)jump_entry_code(entry), expect, JUMP_LABEL_NOP_SIZE))
-   bug_at((void *)jump_entry_code(entry), line);
-
/*
 * Make text_poke_bp() a default fallback poker.
 *
-- 
2.17.1