Re: KVM's PIT and PIC programming question

2009-08-20 Thread Avi Kivity

On 08/20/2009 08:36 PM, Saksena, Abhishek wrote:

Thnaks,

So just programming of PIC (8259) should do the trick. Do I have to care about 
IOAPIC or LAPIC programming? You mentioned lapic is disabled by default, what 
about IOAPIC.

   


The ioapic will not have any vectors programmed so it will do nothing.



I see in x86.c

case KVM_CREATE_IRQCHIP:
r = -ENOMEM;
kvm->arch.vpic = kvm_create_pic(kvm);
if (kvm->arch.vpic) {
r = kvm_ioapic_init(kvm);
if (r) {
kfree(kvm->arch.vpic);
kvm->arch.vpic = NULL;
goto out;
}
} else
goto out;
break;


so ioapic is created.



I have enabled all the interrupts in 8259s correctly


PIC Programming of master and slave 8259s
;; PIC
 mov  al, #0x00
 out  0x21, AL ;master pic: all IRQs unmasked
 out  0xA1, AL ;slave  pic: all IRQs unmasked


  PIT Programming

  SET_INT_VECTOR(0x08, #0xF000, #int08_handler)
 mov al, #0x34 ; timer0: binary count, 16bit count, mode 2
 out 0x43, al
 mov al, #0x00 ; maximum count of H = 18.2Hz
 out 0x40, al
 out 0x40, al

But still not see PIT interrupts or Timer ISR being called!

   


I suggest adding printk()s (or trace_printk()s) in stragtegic places to 
see what's going on.  It can be either a guest programming error or host 
bug.


--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: KVM's PIT and PIC programming question

2009-08-20 Thread Saksena, Abhishek
Thnaks,

So just programming of PIC (8259) should do the trick. Do I have to care about 
IOAPIC or LAPIC programming? You mentioned lapic is disabled by default, what 
about IOAPIC. 


I see in x86.c

case KVM_CREATE_IRQCHIP:
r = -ENOMEM;
kvm->arch.vpic = kvm_create_pic(kvm);
if (kvm->arch.vpic) {
r = kvm_ioapic_init(kvm);
if (r) {
kfree(kvm->arch.vpic);
kvm->arch.vpic = NULL;
goto out;
}
} else
goto out;
break;


so ioapic is created.



I have enabled all the interrupts in 8259s correctly


PIC Programming of master and slave 8259s
;; PIC
mov  al, #0x00
out  0x21, AL ;master pic: all IRQs unmasked
out  0xA1, AL ;slave  pic: all IRQs unmasked


 PIT Programming

 SET_INT_VECTOR(0x08, #0xF000, #int08_handler)
mov al, #0x34 ; timer0: binary count, 16bit count, mode 2
out 0x43, al
mov al, #0x00 ; maximum count of H = 18.2Hz
out 0x40, al
out 0x40, al

But still not see PIT interrupts or Timer ISR being called!


-thanks
Abhishek


-Original Message-
From: Avi Kivity [mailto:a...@redhat.com] 
Sent: Thursday, August 20, 2009 10:26 AM
To: Saksena, Abhishek
Cc: kvm@vger.kernel.org
Subject: Re: KVM's PIT and PIC programming question

On 08/20/2009 07:49 PM, Saksena, Abhishek wrote:
> I am using libkvm and believe it creates PIC and PIT by default.
>
> I see kvm_create make calls to:-
>
> 1. kvm_arch_create function which indeed calls kvm_create_pit and 
> KVM_CREATE_PIT
>
> 2. kvm_create_irqchip function and KVM_CREATE_IRQCHIP
>

It should work, but best to check using strace or adding printfs.

-- 
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: KVM's PIT and PIC programming question

2009-08-20 Thread Avi Kivity

On 08/20/2009 07:49 PM, Saksena, Abhishek wrote:

I am using libkvm and believe it creates PIC and PIT by default.

I see kvm_create make calls to:-

1. kvm_arch_create function which indeed calls kvm_create_pit and KVM_CREATE_PIT

2. kvm_create_irqchip function and KVM_CREATE_IRQCHIP
   


It should work, but best to check using strace or adding printfs.

--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: KVM's PIT and PIC programming question

2009-08-20 Thread Saksena, Abhishek
I am using libkvm and believe it creates PIC and PIT by default.

I see kvm_create make calls to:- 

1. kvm_arch_create function which indeed calls kvm_create_pit and KVM_CREATE_PIT

2. kvm_create_irqchip function and KVM_CREATE_IRQCHIP


Is this understanding wrong?


-Thanks
Abhishek

-Original Message-
From: Avi Kivity [mailto:a...@redhat.com] 
Sent: Thursday, August 20, 2009 8:21 AM
To: Saksena, Abhishek
Cc: kvm@vger.kernel.org
Subject: Re: KVM's PIT and PIC programming question

On 08/20/2009 06:05 PM, Saksena, Abhishek wrote:
> Isn't by default PIT and PIC are initialized in Kernel? Is something more 
> needed on top of it?
>
>

You need KVM_CREATE_IRQCHIP and KVM_CREATE_PIT.

> Also, I wonder if LAPIC need to be configured and initialized properly. I 
> don't want to use LAPIC, can it be disabled in KVM. I am just using one VCPU.
>

The lapic is disabled by default.

-- 
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: KVM's PIT and PIC programming question

2009-08-20 Thread Avi Kivity

On 08/20/2009 06:05 PM, Saksena, Abhishek wrote:

Isn't by default PIT and PIC are initialized in Kernel? Is something more 
needed on top of it?

   


You need KVM_CREATE_IRQCHIP and KVM_CREATE_PIT.


Also, I wonder if LAPIC need to be configured and initialized properly. I don't 
want to use LAPIC, can it be disabled in KVM. I am just using one VCPU.
   


The lapic is disabled by default.

--
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: KVM's PIT and PIC programming question

2009-08-20 Thread Saksena, Abhishek
Isn't by default PIT and PIC are initialized in Kernel? Is something more 
needed on top of it?

I have enable PIC interuupt using following code :-

> PIC Programming
> ;; PIC
>mov  al, #0x00
>out  0x21, AL ;master pic: all IRQs unmasked
>out  0xA1, AL ;slave  pic: all IRQs unmasked


Also, I wonder if LAPIC need to be configured and initialized properly. I don't 
want to use LAPIC, can it be disabled in KVM. I am just using one VCPU.

-Thanks
Abhishek

 

-Original Message-
From: Avi Kivity [mailto:a...@redhat.com] 
Sent: Thursday, August 20, 2009 1:29 AM
To: Saksena, Abhishek
Cc: kvm@vger.kernel.org
Subject: Re: KVM's PIT and PIC programming question

On 08/20/2009 12:26 AM, Saksena, Abhishek wrote:
> Hi Guys,
> I am writing very simple bios for KVM (not using Qemu but creating a simple 
> io device models around KVM). I am having trouble in receiving regular Timer 
> interrupts after programming PIT.
>
> I think I have enabled PIC and PIT correctly using following code:-
>
> PIC Programming
> ;; PIC
>mov  al, #0x00
>out  0x21, AL ;master pic: all IRQs unmasked
>out  0xA1, AL ;slave  pic: all IRQs unmasked
>
>
> PIT Programming
>
> and also enable PIT to genrate regular timer interruput
>
> SET_INT_VECTOR(0x08, #0xF000, #int08_handler)
>mov al, #0x34 ; timer0: binary count, 16bit count, mode 2
>out 0x43, al
>mov al, #0x00 ; maximum count of H = 18.2Hz
>out 0x40, al
>out 0x40, al
>
>
> PIT Timer ISR code
>
> Timer ISR code
>
> ;-
> ;- INT08 -
> ;-
> .org 0xfea5 ; INT 08h System Timer ISR Entry Point
> int08_handler:
>sti
>push ax
>push ds
>mov ax, #0x0040
>mov ds, ax
>mov ax, 0x006c ; increment lower word
>inc ax
>mov 0x006c, ax
>jnz inc_done
>mov ax, 0x006e ; increment upper word
>inc ax
>mov 0x006e, ax
>
>
>
> For some reason I never see int08_handler ever been called. Any clues what 
> may be wrong? I am creating only one VCPU
>
>
>

Things to check:

- have you initialized the kernel PIC and PIT?
- are interrupts enabled?

-- 
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: KVM's PIT and PIC programming question

2009-08-20 Thread Avi Kivity

On 08/20/2009 12:26 AM, Saksena, Abhishek wrote:

Hi Guys,
I am writing very simple bios for KVM (not using Qemu but creating a simple io 
device models around KVM). I am having trouble in receiving regular Timer 
interrupts after programming PIT.

I think I have enabled PIC and PIT correctly using following code:-

PIC Programming
;; PIC
   mov  al, #0x00
   out  0x21, AL ;master pic: all IRQs unmasked
   out  0xA1, AL ;slave  pic: all IRQs unmasked


PIT Programming

and also enable PIT to genrate regular timer interruput

SET_INT_VECTOR(0x08, #0xF000, #int08_handler)
   mov al, #0x34 ; timer0: binary count, 16bit count, mode 2
   out 0x43, al
   mov al, #0x00 ; maximum count of H = 18.2Hz
   out 0x40, al
   out 0x40, al


PIT Timer ISR code

Timer ISR code

;-
;- INT08 -
;-
.org 0xfea5 ; INT 08h System Timer ISR Entry Point
int08_handler:
   sti
   push ax
   push ds
   mov ax, #0x0040
   mov ds, ax
   mov ax, 0x006c ; increment lower word
   inc ax
   mov 0x006c, ax
   jnz inc_done
   mov ax, 0x006e ; increment upper word
   inc ax
   mov 0x006e, ax



For some reason I never see int08_handler ever been called. Any clues what may 
be wrong? I am creating only one VCPU


   


Things to check:

- have you initialized the kernel PIC and PIT?
- are interrupts enabled?

--
error compiling committee.c: too many arguments to function

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html