pv_cpu_ops
Regular
4.4
: ✅struct pv_cpu_ops {
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
void (*clts)();
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
long unsigned int (*read_cr4_safe)();
long unsigned int (*read_cr4)();
void (*write_cr4)(long unsigned int);
long unsigned int (*read_cr8)();
void (*write_cr8)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*store_idt)(struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(struct tss_struct *, struct thread_struct *);
void (*set_iopl_mask)(unsigned int);
void (*wbinvd)();
void (*io_delay)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int, int *);
int (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*usergs_sysret32)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
4.8
: ✅struct pv_cpu_ops {
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
void (*clts)();
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
long unsigned int (*read_cr4_safe)();
long unsigned int (*read_cr4)();
void (*write_cr4)(long unsigned int);
long unsigned int (*read_cr8)();
void (*write_cr8)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*store_idt)(struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(struct tss_struct *, struct thread_struct *);
void (*set_iopl_mask)(unsigned int);
void (*wbinvd)();
void (*io_delay)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
4.10
: ✅struct pv_cpu_ops {
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
long unsigned int (*read_cr4)();
void (*write_cr4)(long unsigned int);
long unsigned int (*read_cr8)();
void (*write_cr8)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*store_idt)(struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(struct tss_struct *, struct thread_struct *);
void (*set_iopl_mask)(unsigned int);
void (*wbinvd)();
void (*io_delay)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
4.13
: ✅struct pv_cpu_ops {
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
long unsigned int (*read_cr4)();
void (*write_cr4)(long unsigned int);
long unsigned int (*read_cr8)();
void (*write_cr8)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*store_idt)(struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(struct tss_struct *, struct thread_struct *);
void (*set_iopl_mask)(unsigned int);
void (*wbinvd)();
void (*io_delay)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
4.15
: ✅struct pv_cpu_ops {
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
long unsigned int (*read_cr8)();
void (*write_cr8)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*set_iopl_mask)(unsigned int);
void (*wbinvd)();
void (*io_delay)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
4.18
: ✅struct pv_cpu_ops {
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
long unsigned int (*read_cr8)();
void (*write_cr8)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*set_iopl_mask)(unsigned int);
void (*wbinvd)();
void (*io_delay)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
5.0
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
long unsigned int (*read_cr8)();
void (*write_cr8)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*set_iopl_mask)(unsigned int);
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
5.3
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
long unsigned int (*read_cr8)();
void (*write_cr8)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*set_iopl_mask)(unsigned int);
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
5.4
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*set_iopl_mask)(unsigned int);
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
5.8
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*invalidate_io_bitmap)();
void (*update_io_bitmap)();
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
5.11
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*invalidate_io_bitmap)();
void (*update_io_bitmap)();
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
5.13
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*invalidate_io_bitmap)();
void (*update_io_bitmap)();
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
5.15
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*invalidate_io_bitmap)();
void (*update_io_bitmap)();
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
5.19
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*invalidate_io_bitmap)();
void (*update_io_bitmap)();
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
6.2
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*invalidate_io_bitmap)();
void (*update_io_bitmap)();
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
6.5
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*invalidate_io_bitmap)();
void (*update_io_bitmap)();
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
6.8
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*invalidate_io_bitmap)();
void (*update_io_bitmap)();
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
arm64
: Absent ⚠️
armhf
: Absent ⚠️
ppc64el
: Absent ⚠️
riscv64
: Absent ⚠️
aws
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*set_iopl_mask)(unsigned int);
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
azure
: ✅struct pv_cpu_ops {
void (*io_delay)();
};
gcp
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*set_iopl_mask)(unsigned int);
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
lowlatency
: ✅struct pv_cpu_ops {
void (*io_delay)();
long unsigned int (*get_debugreg)(int);
void (*set_debugreg)(int, long unsigned int);
long unsigned int (*read_cr0)();
void (*write_cr0)(long unsigned int);
void (*write_cr4)(long unsigned int);
void (*load_tr_desc)();
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
void (*set_ldt)(const void *, unsigned int);
long unsigned int (*store_tr)();
void (*load_tls)(struct thread_struct *, unsigned int);
void (*load_gs_index)(unsigned int);
void (*write_ldt_entry)(struct desc_struct *, int, const void *);
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int);
void (*write_idt_entry)(gate_desc *, int, const gate_desc *);
void (*alloc_ldt)(struct desc_struct *, unsigned int);
void (*free_ldt)(struct desc_struct *, unsigned int);
void (*load_sp0)(long unsigned int);
void (*set_iopl_mask)(unsigned int);
void (*wbinvd)();
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);
u64 (*read_msr)(unsigned int);
void (*write_msr)(unsigned int, unsigned int, unsigned int);
u64 (*read_msr_safe)(unsigned int, int *);
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int);
u64 (*read_pmc)(int);
void (*usergs_sysret64)();
void (*iret)();
void (*swapgs)();
void (*start_context_switch)(struct task_struct *);
void (*end_context_switch)(struct task_struct *);
};
Regular
4.4
and 4.8
⚠️u64 (*read_msr_safe)(unsigned int, int *)
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int)
void (*usergs_sysret32)()
u64 (*read_msr)(unsigned int, int *)
➡️ u64 (*read_msr)(unsigned int)
int (*write_msr)(unsigned int, unsigned int, unsigned int)
➡️ void (*write_msr)(unsigned int, unsigned int, unsigned int)
4.8
and 4.10
⚠️void (*clts)()
long unsigned int (*read_cr4_safe)()
4.10
and 4.13
✅
4.13
and 4.15
⚠️long unsigned int (*read_cr4)()
void (*store_idt)(struct desc_ptr *)
void (*load_sp0)(struct tss_struct *, struct thread_struct *)
➡️ void (*load_sp0)(long unsigned int)
4.15
and 4.18
✅
4.18
and 5.0
✅
5.0
and 5.3
✅
5.3
and 5.4
⚠️long unsigned int (*read_cr8)()
void (*write_cr8)(long unsigned int)
5.4
and 5.8
⚠️void (*invalidate_io_bitmap)()
void (*update_io_bitmap)()
void (*set_iopl_mask)(unsigned int)
5.8
and 5.11
✅
5.11
and 5.13
⚠️void (*usergs_sysret64)()
void (*iret)()
void (*swapgs)()
5.13
and 5.15
✅
5.15
and 5.19
✅
5.19
and 6.2
✅
6.2
and 6.5
✅
6.5
and 6.8
✅
generic
and aws
✅
generic
and azure
⚠️long unsigned int (*get_debugreg)(int)
void (*set_debugreg)(int, long unsigned int)
long unsigned int (*read_cr0)()
void (*write_cr0)(long unsigned int)
void (*write_cr4)(long unsigned int)
void (*load_tr_desc)()
void (*load_gdt)(const struct desc_ptr *)
void (*load_idt)(const struct desc_ptr *)
void (*set_ldt)(const void *, unsigned int)
long unsigned int (*store_tr)()
void (*load_tls)(struct thread_struct *, unsigned int)
void (*load_gs_index)(unsigned int)
void (*write_ldt_entry)(struct desc_struct *, int, const void *)
void (*write_gdt_entry)(struct desc_struct *, int, const void *, int)
void (*write_idt_entry)(gate_desc *, int, const gate_desc *)
void (*alloc_ldt)(struct desc_struct *, unsigned int)
void (*free_ldt)(struct desc_struct *, unsigned int)
void (*load_sp0)(long unsigned int)
void (*set_iopl_mask)(unsigned int)
void (*wbinvd)()
void (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *)
u64 (*read_msr)(unsigned int)
void (*write_msr)(unsigned int, unsigned int, unsigned int)
u64 (*read_msr_safe)(unsigned int, int *)
int (*write_msr_safe)(unsigned int, unsigned int, unsigned int)
u64 (*read_pmc)(int)
void (*usergs_sysret64)()
void (*iret)()
void (*swapgs)()
void (*start_context_switch)(struct task_struct *)
void (*end_context_switch)(struct task_struct *)
generic
and gcp
✅
generic
and lowlatency
✅