Hi,
I'm using xen 3.3.1 and running a 2.6.18.8-xen Dom0 (compiled from xen.org).
My hardware is a HP Dc7800 with VT and VT-D activated.
I assigned a acquisition card (NI6023E) to a HVM guest from port 07:09.0
On Dom0 lspci -v give me :
#07:09.0 Class ff00: National Instruments PCI-6023E
# Flags: bus master, medium devsel, latency 32, IRQ 16
# Memory at f0200000 (32-bit, non-prefetchable) [size=4K]
# Memory at f0201000 (32-bit, non-prefetchable) [size=4K]
When I load my VM I get these debug messages so I think memory mapping is OK
for this card.
(from f0200000 on Dom0 to f3001000 on Dom1 and from f0201000 on Dom0 to
f3002000 on Dom1)
#(XEN) [VT-D]iommu.c:1263: domain_context_mapping:PCI: bdf = 7:9.0
#(XEN) [VT-D]iommu.c:1278:d0 domain_context_mapping:map: bdf = 7:9.0 ->
0:1e.0
#(XEN) [VT-D]io.c:140: VT-d irq bind: m_irq = 10 device = 6 intx = 0 //
device 6 on HVM is my card
...
#(XEN) HVM1: pci dev 06:0 bar 10 size 00001000: f3001000
#(XEN) domctl.c:776:d0 memory_map:add: gfn=f3001 mfn=f0200 nr_mfns=1
#(XEN) HVM1: pci dev 06:0 bar 14 size 00001000: f3002000
#(XEN) domctl.c:776:d0 memory_map:add: gfn=f3002 mfn=f0201 nr_mfns=1
I tried some test programs witch all resulted in NMI error on Dom0, so i
tried a simple test to check this mapping.
When I try to write on Bar0 from this card no error appear, but if I write
on Bar1 I get NMI errors.
test program (on HVM):
-------------------------------------------
...
printf("memory mapping bar0 : 0x%X, and 1 : 0x%X...\n", physicalBar0,
physicalBar1); // physicalBar0 = 0xF3001000 and physicalBar1=0xF3002000
mem0 = mmap (NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd,
physicalBar0);
mem1 = mmap (NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd,
physicalBar1);
printf("Bar0 mapped to : 0x%X, Bar1 to : 0x%X \n", mem0, mem1);
// Ex : Bar0 mapped to : 0x14CDB000, Bar1 to : 0x14CDC000 (these address
doesn't realy matter)
if ( MAP_FAILED == mem0 || MAP_FAILED == mem1)
{
close (fd);
printf("map failed \n");
return NULL;
}
printf("testing write on mem0\n");
sleep(1); // Sleep to give time to printf before NMI appear on Dom0 (using
SSH from dom0 to guest to see both output synchronously)
int* titi=(int*)mem0;
*titi=0x1; // Look to work
printf("testing write on mem1\n");
sleep(1);
titi=(int*)mem1;
*titi=0x1; // ==> receiving a NMI on Dom0 while executing this line
...
-------------------------------------------
NMI message :
#Mar 2 14:53:38 XenVT kernel: Uhhuh. NMI received. Dazed and confused, but
trying to continue
#Mar 2 14:53:38 XenVT kernel: You probably have a hardware problem with
your RAM chips
Why this code working on simple kernel (tested on 2.6.18-amd64), can't work
in my HVM with this card assigned ?
btw a message in xm dmesg look strange :
(XEN) [VT-D]iommu.c:1736: Queued Invalidation hardware not found
(XEN) [VT-D]iommu.c:1745: Interrupt Remapping hardware not found
Could this be linked ?
Is there a problem in xen with multiple bar remapping ?
Thank you for your help.
--
View this message in context:
http://www.nabble.com/Receiving-NMI%2C-when-writing-on-mmaped-PCI-tp22352457p22352457.html
Sent from the Xen - Dev mailing list archive at Nabble.com.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|