Re: KVM's PIT and PIC programming question
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
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
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
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
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
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
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