returns 0 on success and non-zero on failure */
| 73 | |
| 74 | /* returns 0 on success and non-zero on failure */ |
| 75 | static __inline int |
| 76 | vmclear(struct vmcs *vmcs) |
| 77 | { |
| 78 | int error; |
| 79 | uint64_t addr; |
| 80 | |
| 81 | addr = vtophys(vmcs); |
| 82 | __asm __volatile("vmclear %[addr];" |
| 83 | VMX_SET_ERROR_CODE |
| 84 | : [error] "=r" (error) |
| 85 | : [addr] "m" (*(uint64_t *)&addr) |
| 86 | : "memory"); |
| 87 | return (error); |
| 88 | } |
| 89 | |
| 90 | static __inline void |
| 91 | vmxoff(void) |