[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re[Xen-devel] ceiving NMI, when writing on mmaped PCI



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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.