Hello list,
Is there any source code available of "KVM-L4", e.g. KVM which has been ported to L4Linux?
There are some publications from TU Dresden which report about this successful port as KVM-L4. Is its source code available at all, or is it just hiding from search engines in some public repository or archive?
Thanks, Rolf
Hi,
On Sun Apr 08, 2012 at 10:51:29 +0200, Rolf Sommerhalder wrote:
Is there any source code available of "KVM-L4", e.g. KVM which has been ported to L4Linux?
There are some publications from TU Dresden which report about this successful port as KVM-L4. Is its source code available at all, or is it just hiding from search engines in some public repository or archive?
It's in L4Linux. No change is required for QEMU/kvm.
Adam
On 04/08/12 21:04, Adam Lackorzynski wrote:
It's in L4Linux. No change is required for QEMU/kvm.
Thanks Adam for your hint. Now, I found the KVM part in the L4Linux source tree.
Your paper "Virtual Machine Jailed" mentions that KVM-L4 required an extension of L4/Fiasco with about 500 SLOC. Was that patch also merged, or has it become obsolete with Fiasco.OC?
Rolf
On Mon Apr 09, 2012 at 09:16:36 +0200, Rolf Sommerhalder wrote:
On 04/08/12 21:04, Adam Lackorzynski wrote:
It's in L4Linux. No change is required for QEMU/kvm.
Thanks Adam for your hint. Now, I found the KVM part in the L4Linux source tree.
Your paper "Virtual Machine Jailed" mentions that KVM-L4 required an extension of L4/Fiasco with about 500 SLOC. Was that patch also merged, or has it become obsolete with Fiasco.OC?
It's in there. Just to note, the KVM part in L4Linux is SVM only.
Adam
Hi,
I ported igb-1.2.45-k2 driver to ankh. Ankh is able to initialize the Ethernet device using this driver.
I am testing this with lwip_test example. Using this driver Ankh is able to send out "DHCP Discover" packet and the Gateway/Router sends back an "DHCP Offer" packet.
But the hardware never generates an Rx interrupt in the driver. How can I debug/solve this problem?
Attached is the log with a lot of debugging turned on, and also debug messages added in the driver itself.
Hi,
On Tue Apr 10, 2012 at 16:21:49 -0700, Shashi Sharma wrote:
I ported igb-1.2.45-k2 driver to ankh. Ankh is able to initialize the Ethernet device using this driver.
I am testing this with lwip_test example. Using this driver Ankh is able to send out "DHCP Discover" packet and the Gateway/Router sends back an "DHCP Offer" packet.
But the hardware never generates an Rx interrupt in the driver. How can I debug/solve this problem?
Attached is the log with a lot of debugging turned on, and also debug messages added in the driver itself.
You could check whether the hardware IRQ is properly connected to the driver in the jdb, check the shift-Q list, search for the IRQ number and see whether it is connected to the proper thread.
Adam
Hi Adam,
Here is the log message that shows that Ankh is able to initialize the ethernet device (eth1) and assign an IRQ to it.
---------------------------------------------------------------------------- ankh | opening eth1 ankh | <6>device eth1 entered promiscuous mode ankh | set interface to promiscuous mode. ankh | Thread 0xcf for IRQ 40 io | (noname)[0x50200]: bind_irq(40, ...) io | IRQ 40 -> client io | IRQ mode = 300000 -> 6 io | bound irq 40 -> err=0 ankh | Opened 3 network devices. ankh | lo IRQ: 0x00 MAC: 00:00:00:00:00:00 MTU: 16436 ankh | eth0 IRQ: 0x00 MAC: 00:E0:81:C4:76:07 MTU: 1500 ankh | eth1 IRQ: 0x00 MAC: 00:E0:81:C4:76:06 MTU: 1500 --------------------------------------------------------------------------------------------------
As per your suggestion I looked it up in the "Shift-Q" list and I see the IRQ is properly connected to the proper Thread.
-------------------------------------------------------------------------------------------------- d1 ffd073d4 [IRQ ] I= 28 HW IRQ (DIRQ) L=28 T=cf F=7 Q=0 --------------------------------------------------------------------------------------------------
Using the "List IRQ Threads: R" in JDB I get the following result
---------------------------------------------------------------------------- jdb: R [l]ist/[a]ttach: l IRQ 04/04 IRQ 28/40 IRQ 29/41 -----------------------------------------------------------------------------
Which shows that the IRQ is attached to the thread.
But still, The IGB's Interrupt Service Routine (ISR) never gets invoked.
Your help is much appreciated
Regards, Shashi Sharma
On Sun, 2012-04-22 at 16:10 +0200, Adam Lackorzynski wrote:
Hi,
On Tue Apr 10, 2012 at 16:21:49 -0700, Shashi Sharma wrote:
I ported igb-1.2.45-k2 driver to ankh. Ankh is able to initialize the Ethernet device using this driver.
I am testing this with lwip_test example. Using this driver Ankh is able to send out "DHCP Discover" packet and the Gateway/Router sends back an "DHCP Offer" packet.
But the hardware never generates an Rx interrupt in the driver. How can I debug/solve this problem?
Attached is the log with a lot of debugging turned on, and also debug messages added in the driver itself.
You could check whether the hardware IRQ is properly connected to the driver in the jdb, check the shift-Q list, search for the IRQ number and see whether it is connected to the proper thread.
Adam
Hi,
On Tue May 01, 2012 at 16:02:53 -0700, Shashi Sharma wrote:
Here is the log message that shows that Ankh is able to initialize the ethernet device (eth1) and assign an IRQ to it.
ankh | opening eth1 ankh | <6>device eth1 entered promiscuous mode ankh | set interface to promiscuous mode. ankh | Thread 0xcf for IRQ 40 io | (noname)[0x50200]: bind_irq(40, ...) io | IRQ 40 -> client io | IRQ mode = 300000 -> 6 io | bound irq 40 -> err=0 ankh | Opened 3 network devices. ankh | lo IRQ: 0x00 MAC: 00:00:00:00:00:00 MTU: 16436 ankh | eth0 IRQ: 0x00 MAC: 00:E0:81:C4:76:07 MTU: 1500 ankh | eth1 IRQ: 0x00 MAC: 00:E0:81:C4:76:06 MTU: 1500
As per your suggestion I looked it up in the "Shift-Q" list and I see the IRQ is properly connected to the proper Thread.
d1 ffd073d4 [IRQ ] I= 28 HW IRQ (DIRQ) L=28 T=cf F=7 Q=0
Using the "List IRQ Threads: R" in JDB I get the following result
jdb: R [l]ist/[a]ttach: l IRQ 04/04 IRQ 28/40 IRQ 29/41
Which shows that the IRQ is attached to the thread.
But still, The IGB's Interrupt Service Routine (ISR) never gets invoked.
That looks quite ok to me. What you can check is whether the driver thinks it should use MSI type interrupts, and if yes, force it to legacy mode and see if it changes its behavior.
Adam
Hi Adam,
Thank you for replying.
I checked and it is requesting for Legacy interrupts and not the MSI type interrupts.
-Shashi
On Thu, 2012-05-03 at 14:22 +0200, Adam Lackorzynski wrote:
Hi,
On Tue May 01, 2012 at 16:02:53 -0700, Shashi Sharma wrote:
Here is the log message that shows that Ankh is able to initialize the ethernet device (eth1) and assign an IRQ to it.
ankh | opening eth1 ankh | <6>device eth1 entered promiscuous mode ankh | set interface to promiscuous mode. ankh | Thread 0xcf for IRQ 40 io | (noname)[0x50200]: bind_irq(40, ...) io | IRQ 40 -> client io | IRQ mode = 300000 -> 6 io | bound irq 40 -> err=0 ankh | Opened 3 network devices. ankh | lo IRQ: 0x00 MAC: 00:00:00:00:00:00 MTU: 16436 ankh | eth0 IRQ: 0x00 MAC: 00:E0:81:C4:76:07 MTU: 1500 ankh | eth1 IRQ: 0x00 MAC: 00:E0:81:C4:76:06 MTU: 1500
As per your suggestion I looked it up in the "Shift-Q" list and I see the IRQ is properly connected to the proper Thread.
d1 ffd073d4 [IRQ ] I= 28 HW IRQ (DIRQ) L=28 T=cf F=7 Q=0
Using the "List IRQ Threads: R" in JDB I get the following result
jdb: R [l]ist/[a]ttach: l IRQ 04/04 IRQ 28/40 IRQ 29/41
Which shows that the IRQ is attached to the thread.
But still, The IGB's Interrupt Service Routine (ISR) never gets invoked.
That looks quite ok to me. What you can check is whether the driver thinks it should use MSI type interrupts, and if yes, force it to legacy mode and see if it changes its behavior.
Adam
On Thu May 03, 2012 at 13:00:13 -0700, Shashi Sharma wrote:
I checked and it is requesting for Legacy interrupts and not the MSI type interrupts.
Ok. Hmm, then, could you check whether the card is reporting a pending interrupt? That would give a hint whether the interrupt is lost or not genereated at all.
Adam
Hi Adam,
I am pretty sure now that Fiasco's ISR is not getting invoked. I put a printf in the following interrupt handler in fiasco's src/kern/ia32/dirq-ia32-ux.cpp.
---- extern "C" FIASCO_FASTCALL void irq_interrupt(Mword _irqobj, Mword ip) ----------
And it never gets invoked.
You suggested in your last e-mail to "check whether the card is reporting a pending interrupt". But I dont really know how to do that. Is there some way in JDB to do that?
Regards, Shashi Sharma
On Mon, 2012-05-07 at 00:09 +0200, Adam Lackorzynski wrote:
On Thu May 03, 2012 at 13:00:13 -0700, Shashi Sharma wrote:
I checked and it is requesting for Legacy interrupts and not the MSI type interrupts.
Ok. Hmm, then, could you check whether the card is reporting a pending interrupt? That would give a hint whether the interrupt is lost or not genereated at all.
Adam
Hi,
On Thu May 10, 2012 at 15:14:47 -0700, Shashi Sharma wrote:
I am pretty sure now that Fiasco's ISR is not getting invoked. I put a printf in the following interrupt handler in fiasco's src/kern/ia32/dirq-ia32-ux.cpp.
extern "C" FIASCO_FASTCALL void irq_interrupt(Mword _irqobj, Mword ip)
And it never gets invoked.
Ok.
You suggested in your last e-mail to "check whether the card is reporting a pending interrupt". But I dont really know how to do that. Is there some way in JDB to do that?
Usually a device has a device register that indicates whether an interrupt has been asserted. So in JDB you could look up the this register, or add some printf in the driver or so to see if its contents change after some packet transfer should have happened.
Adam
On Sun, 2012-05-13 at 23:53 +0200, Adam Lackorzynski wrote:
Hi,
On Thu May 10, 2012 at 15:14:47 -0700, Shashi Sharma wrote:
I am pretty sure now that Fiasco's ISR is not getting invoked. I put a printf in the following interrupt handler in fiasco's src/kern/ia32/dirq-ia32-ux.cpp.
extern "C" FIASCO_FASTCALL void irq_interrupt(Mword _irqobj, Mword ip)
And it never gets invoked.
Ok.
You suggested in your last e-mail to "check whether the card is reporting a pending interrupt". But I dont really know how to do that. Is there some way in JDB to do that?
Usually a device has a device register that indicates whether an interrupt has been asserted. So in JDB you could look up the this register, or add some printf in the driver or so to see if its contents change after some packet transfer should have happened.
For IGB that register would be called ICR or EICR (interrupt cause register). Hope that helps finding it in the source.
Julian
l4-hackers@os.inf.tu-dresden.de