Hi Udo,

Thanks for your response.

Please find my response below under your reply starting with Avinash.

On Fri, Nov 8, 2013 at 3:11 AM, Udo Steinberg <[email protected]> wrote:
> On Thu, 7 Nov 2013 20:35:18 +0530 avinash singh (AS) wrote:
>
> Hi Avinash,
>
> AS> I want to discuss two problem.
> AS>
> AS> Problem -1:
> AS> This test program runs (guest mode code) cpuid instruction but
outb/inb
> AS> instruction never runs in guest mode. I see that for outb instruction
> AS> gives IO portal invoked again and again. First, I
> AS> delegate IO ports from Kernel in root pd. My vcpu execution context
> AS> is created in root pd. I believe that IO ports should be accessible
> AS> from guest mode after delegating IO ports from kernel to guest.
> AS> Secondly, same code for AMD runs if I set proper AMD vcpu registers in
> AS> startup handler.
>
> NOVA distinguishes between I/O ports being accessible in host mode or
guest
> mode. If you delegate an I/O CRD into a PD, the ports will be accessible
in
> host mode only, unless you also set the G-bit in the typed item. Only if
you
> set the G-bit during the delegation will the I/O ports be directly
> accessible in guest mode without causing a VM exit. See spec. 4.6.2.2

Avinash: ->>
 I do understand that without setting G bit in typed item resource wont be
available for guest to access.

In My code, I am launching vcPU in protected mode with paging disabled with
'nonpt' command line option.
I guest IO_ACCESS_PORTAL invoked  for outb instruction as expected. In vcpu
IO access portal handler, I delegate IO ports to guest. Please see below
code in file main.cc line number:293


270 static void
271 vcpu_ioaccess_handler(void)
272 {
273     Utcb *utcb = reinterpret_cast<Utcb *>(ECHO_THREAD_UTCB);
274
275     out()->text("IOACCES invoked  \n");
276
277     out()->text("IP ");
278     out()->hex(utcb->ip);
279     out()->text("\n");
280
281     out()->text("dx ");
282     out()->hex(utcb->dx);
283     out()->text("\n");
284
285     static mword_t prev_dx = ~0;
286     if (prev_dx == utcb->dx) {
287         out()->text("IOACCESS: Duplicate Request...\n");
288         HALT();
289     }
290     prev_dx = utcb->dx;
291
292     utcb->set_msg_word(0);
293    * if (! utcb->append_item(Io_crd(0, 16), 0, true, true)) {*
294     }
295
296     reply(reinterpret_cast<void *>(event_ec_stack_top()));
297 }
298

However, I also modified my test program to delegate IO ports upfront
before launching vcpu.  But I still get vcpu_ioaccess_handler invoked.
Please see below,

  enum {  ORDER_64k  = 16,
341                 MAP_FROM_KERNEL = 1,
342                 HOTSPOT = 0,
343         };
344     utcb_echo->crd_rcv = Io_crd(0, ORDER_64k);
345         utcb_main->set_msg_word(0);
346
347         bool success = utcb_main->append_item(Io_crd(0, ORDER_64k),
HOTSPOT, MAP_FROM_KERNEL, true);
348         if(!success)
349                 *(unsigned long *) (~0UL  -6) = 0;


I am not sure what is wrong here. Because same logic works for AMD process.
Please could you just see main.cc if something is I am doing wrong there.
Goal is to run cpuid ad oubt instruction in guest mode with paging disabled
and protected mode bit on.


> AS> Problem -2
> AS> As Intel process supports unrestricted guest mode; Advantage of that,
> AS> I can run real mode instruction in vCPU context with paging disable
> AS> without doing any instruction interpretations.
> AS>
> AS> I set Unrestricted guest mode control bit in VMCS control registers,
> AS> though intel vCPU never runs guest in unrestricted mode. But When I
> AS> experiments this with KVM it works.
>
> A user-level VMM should never have to deal with the unrestricted guest
> control bit. In fact, that bit is under the control of the hypervisor and
> will be forced to 0 or 1, depending on HW support, irrespective of what
the
> user-level VMM wants.

Avinash>> You are right this feature depends on processor .

> AS> My question is, does NOVA kernel supports to run intel cpu in
> AS> unrestricted guest mode? or is there any trick to do that so. Please
> AS> help me if I am missing something.
>
> NOVA automatically enables unrestricted guest if the CPU supports it. The
> feature is supported on processors based on the Westmere or newer
> microarchitectures. Unrestricted guest will be disabled, if the user
forces
> vTLB using the command line.

Avinash>>  I was trying to run same test program with paging disabled and
in real mode on Core i7 processor in qemu-kvm environment.
does this combination works in running guest in unrestricted mode on top of
NOVA?

> AS> Any help regarding these two issues would be very helpful.
>
> Can you enable TRACE_VMX in include/stdio.h (move it out of the #ifdef)
and
> post the output of the microhypervisor, in particular the line that talks
> about VMCS, EPT, URG, VPID, etc.?

Avinash>> I will be sending trac_VMX ouput below,

NOVA Microhypervisor v6-d5b54fa (x86_32): Nov  7 2013 22:59:09 [gcc 4.7.3]

[ 0] Warning IA32_FEATURE_CONTROL not set which ok only with qemu/kvm.
[ 0] VMCS:0x017ef000 REV:0x11e57ed0 EPT:0 URG:0 VNMI:1 VPID:0
[ 0] CORE:0:0:0 6:f:b:0 [1] Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
 Hello world
All Portal created!
runcpuid addr 0x02001000
eip is initialized
0x00001000
cs 0x02000000
npt fault handler ..
 host_adddr 0x01001000
got cpuid intercept!
IOACCES invoked
IP 0x00001007
dx 0x000003f8
IOACCES invoked
IP 0x00001007
dx 0x000003f8
IOACCESS: Duplicate Request...
[ 0] Killed EC:0xc0010300 SC:0xc0011180 V:0xd CS:0x1b EIP:0x1001717 CR2:0x0
ERR:0x0 (PT not found)
[ 0] Killed EC:0xc0010400 SC:0xc0011180 V:0x1e CR0:0x10021 CR3:0x0 CR4:0x0
(IPC Abort)

>
> Cheers,
> Udo



-- 
Avinash Singh
Gurgaon, Mob: 7838884449
------------------------------------------------------------------------------
November Webinars for C, C++, Fortran Developers
Accelerate application performance with scalable programming models. Explore
techniques for threading, error checking, porting, and tuning. Get the most 
from the latest Intel processors and coprocessors. See abstracts and register
http://pubads.g.doubleclick.net/gampad/clk?id=60136231&iu=/4140/ostg.clktrk
_______________________________________________
Genode-main mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/genode-main

Reply via email to