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 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 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
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 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


KVM's PIT and PIC programming question

2009-08-19 Thread Saksena, Abhishek
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


-Abhishek

--
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