Commit Graph

17 Commits

Author SHA1 Message Date
Michael Brown
c64747db50 [librm] Speed up real-to-protected mode transition under KVM
Ensure that all segment registers have zero in the low two bits before
transitioning to protected mode.  This allows the CPU state to
immediately be deemed to be "valid", and eliminates the need for any
further emulated instructions.

Load the protected-mode interrupt descriptor table after switching to
protected mode, since this avoids triggering an EXCEPTION_NMI and
corresponding VM exit.

This reduces the time taken by real_to_prot under KVM by around 50%.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2014-05-02 15:23:21 +01:00
Michael Brown
23b671daf4 [librm] Allow interrupts in protected mode
When running in a virtual machine, switching to real mode may be
expensive.  Allow interrupts to be enabled while in protected mode and
reflected down to the real-mode interrupt handlers.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2014-04-29 18:24:04 +01:00
Michael Brown
a5cd8d1772 [misc] Fix source files erroneously marked as executable 2009-06-02 11:26:09 +01:00
Michael Brown
c44a193d0d [legal] Add a selection of FILE_LICENCE declarations
Add FILE_LICENCE declarations to almost all files that make up the
various standard builds of gPXE.
2009-05-18 08:33:25 +01:00
Michael Brown
6554b79ff9 [uaccess] Formalise the uaccess API
The userptr_t is now the fundamental type that gets used for conversions.
For example, virt_to_phys() is implemented in terms of virt_to_user() and
user_to_phys().
2008-10-13 04:10:34 +01:00
Daniel Verkamp
aa28544373 [librm] Add rm stack copying functions 2008-08-28 23:09:08 +01:00
Michael Brown
0ed066bc50 rm_ss, rm_sp, and pm_esp don't need to be accessed from anywhere
outside of librm.S.
2007-09-25 19:20:38 +01:00
Michael Brown
9fcded3d23 Towards a(nother) new real-mode infrastructure, in which we take
advantage of the fact that we have to have a permanently-resident block
in base memory.
2006-05-02 15:41:21 +00:00
Michael Brown
352bf1bda2 Move init.h to gpxe/init.h. 2006-04-30 01:08:52 +00:00
Michael Brown
d3dec7c331 Update to cope with changes in registers.h 2005-05-20 11:23:51 +00:00
Michael Brown
378c1b500c Cleaner separation of functionality between post_reloc and
initialise_via_librm.
2005-04-11 09:24:10 +00:00
Michael Brown
34a0b5f16f initialise() doesn't take regs 2005-04-10 18:39:28 +00:00
Michael Brown
87508aa0b2 arch_initialise() is now sufficiently generic that we may as well just
call it initialise() and place it in main.c.  :)
2005-04-10 18:30:34 +00:00
Michael Brown
560027899e Heading towards a sane set of control functions 2005-04-10 18:21:53 +00:00
Michael Brown
04a99841e6 Make prot_call() able to transparently return via the newly installed copy
of librm.
2005-04-10 15:51:10 +00:00
Michael Brown
6a4ac358f3 Add INIT_FNs to make sure that librm gets reallocated when needed. 2005-04-09 16:42:07 +00:00
Michael Brown
0ff80b477d Merged mcb30-realmode-redesign back to HEAD 2005-04-08 15:01:17 +00:00