On Thu, May 11, 2017 at 11:22:02PM +0000, Xu, Anthony wrote: > > SeaBIOS has a couple of different methods to accomplish this mode > > switching - it can directly switch modes (C16_BIG switch) or it can > > use a helper in SMM mode to perform the switch (C16_SMM). The > > preferred method is C16_SMM as C16_BIG isn't available in VM86 mode > > and it also clobbers the 16bit segment registers. > > Hi Kevin, > > Why does SeaBios use VM86 mode?
As Paolo mentioned, SeaBIOS doesn't use it, but it must support callers that use it. > vtx supports real mode long time ago. > > C16_SMM is slow because it causes several extra switches between VM and QEMU. > I would prefer C16_BIG for better performance. > Does SeaBios know if it runs in real mode or VM86 mode? > Can SeaBios choose C16_SMM/C16_BIG based on VCPU mode? Yes, SeaBIOS could use the smsw instruction (see x86.h:cr0_vm86_read) to check if it is in VM86 mode. Using C16_BIG would still clobber the segment registers, but it might be worth that risk to avoid the extra overhead of C16_SMM. -Kevin _______________________________________________ SeaBIOS mailing list SeaBIOS@seabios.org https://mail.coreboot.org/mailman/listinfo/seabios