|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU
>> That sounds like the tachyon device is updating the wrong memory location.
>> How are you programming the memory location where thetachyon device is
>> suppose to touch? Are you using the value from pci_map_page or are you using
>> virt_to_phys? The virt_to_phys should be different from the pci_map_page..
>> unless you allocated a coherent DMA pool using pci_alloc_coherent in which
>> case the virt_to_phys() values for that pool should be the right MFNs.
>
> Our driver uses pci_map_single to get the physical addr to program the chip.
OK. Good.
>
>
> One way you can figure this is doing something like this to make sure you got
> the right MFN:
>
> add these two:
> #include <xen/page.h>
> #include <asm/xen/page.h>
>
> phys_addr_t phys = page_to_phys(mem->pages[i]);
> + if (xen_pv_domain()) {
> + phys_addr_t xen_phys = PFN_PHYS(pfn_to_mfn(
> + page_to_pfn(mem->pages[i])));
> + if (phys != xen_phys) {
> + printk(KERN_ERR "Fixing up: (0x%lx->0x%lx)." \
> + " CODE UNTESTED!\n",
> + (unsigned long)phys,
> + (unsigned long)xen_phys);
> + WARN_ON_ONCE(phys != xen_phys);
> + phys = xen_phys;
> + }
> + }
> and using the 'phys' value from now.
>
>
>
> If this sounds like black magic, here is a short writeup
> http://wiki.xensource.com/xenwiki/XenPVOPSDRM
>
> look at "Why those patches" section.
>
> Lastly, are you using unsigned long for or the phys_addr_t typedefs?
>
> The driver uses dma_addr_t for physical address.
Excellent.
>
> The more I think about your problem the more it sounds like a truncating
> issue. You said that it works just right (albeit slow) if you use
> 'swiotlb=force'. The slowness could be due to not using the pci_sync_* APIs
> to sync the DMA buffers.. But irregardless using bounce buffers will slow the
> DMA operations down.
>
> The driver do use pci_dma_sync_single_for_cpu or
> pci_dma_sync_single_for_device to sync the DMA buffers. Without these syncs,
> the driver would not work at all.
<nods> That makes sense.
>
> Using the bounce buffers limits the DMA operations to under 32-bit. So could
> it be that you are using some casting macro that casts a PFN to unsigned long
> or vice-versa and we end up truncating it to 32-bit? (I've seen this issue
> actually with InfiniBand drivers back in RHEL5 days..). Lastly, do you set
> your DMA mask on the device to 32BIT?
>
> The tachyon chip supports both 32-bit & 45-bit dma. Some features need to set
> 32-bit physical addr to chip. Others need to set 45-bit physical addr to
> chip.
Oh boy. That complicates it.
> The driver doesn't set DMA mask on the device to 32 bit.
Is it set then to 45bit?
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Dante Cinco
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Konrad Rzeszutek Wilk
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Dante Cinco
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Konrad Rzeszutek Wilk
- RE: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Lin, Ray
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Konrad Rzeszutek Wilk
- RE: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Lin, Ray
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Konrad Rzeszutek Wilk
- RE: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Lin, Ray
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough,
Konrad Rzeszutek Wilk <=
- RE: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Lin, Ray
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Dante Cinco
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Konrad Rzeszutek Wilk
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Dante Cinco
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Konrad Rzeszutek Wilk
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Dante Cinco
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Konrad Rzeszutek Wilk
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Chris Mason
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Mathieu Desnoyers
- Re: [Xen-devel] swiotlb=force in Konrad's xen-pcifront-0.8.2 pvops domU kernel with PCI passthrough, Dante Cinco
|
|
|
|
|