pv_cpu_opsRegular
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 ✅