Re: [PATCH v6 29/76] x86/idt: Split idt_data setup out of set_intr_gate()

2020-08-28 Thread Borislav Petkov
On Mon, Aug 24, 2020 at 10:54:24AM +0200, Joerg Roedel wrote:
> From: Joerg Roedel 
> 
> The code to setup idt_data is needed for early exception handling, but
> set_intr_gate() can't be used that early because it has pv-ops in its
> code path, which don't work that early.
> 
> Split out the idt_data initialization part from set_intr_gate() so
> that it can be used separatly.

"separately"

-- 
Regards/Gruss,
Boris.

https://people.kernel.org/tglx/notes-about-netiquette
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization


[PATCH v6 29/76] x86/idt: Split idt_data setup out of set_intr_gate()

2020-08-24 Thread Joerg Roedel
From: Joerg Roedel 

The code to setup idt_data is needed for early exception handling, but
set_intr_gate() can't be used that early because it has pv-ops in its
code path, which don't work that early.

Split out the idt_data initialization part from set_intr_gate() so
that it can be used separatly.

Signed-off-by: Joerg Roedel 
Reviewed-by: Kees Cook 
Link: https://lore.kernel.org/r/20200724160336.5435-29-j...@8bytes.org
---
 arch/x86/kernel/idt.c | 22 ++
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/arch/x86/kernel/idt.c b/arch/x86/kernel/idt.c
index 34fcc58b81b5..c19773174221 100644
--- a/arch/x86/kernel/idt.c
+++ b/arch/x86/kernel/idt.c
@@ -205,18 +205,24 @@ idt_setup_from_table(gate_desc *idt, const struct 
idt_data *t, int size, bool sy
}
 }
 
+static void init_idt_data(struct idt_data *data, unsigned int n,
+ const void *addr)
+{
+   BUG_ON(n > 0xFF);
+
+   memset(data, 0, sizeof(*data));
+   data->vector= n;
+   data->addr  = addr;
+   data->segment   = __KERNEL_CS;
+   data->bits.type = GATE_INTERRUPT;
+   data->bits.p= 1;
+}
+
 static __init void set_intr_gate(unsigned int n, const void *addr)
 {
struct idt_data data;
 
-   BUG_ON(n > 0xFF);
-
-   memset(, 0, sizeof(data));
-   data.vector = n;
-   data.addr   = addr;
-   data.segment= __KERNEL_CS;
-   data.bits.type  = GATE_INTERRUPT;
-   data.bits.p = 1;
+   init_idt_data(, n, addr);
 
idt_setup_from_table(idt_table, , 1, false);
 }
-- 
2.28.0

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization