I posted this to the xen-users list first, they suggested I ask here. I understood that in a Driver Domain that has access to a (PCI) device, ''native'' drivers can be used, but I am having some problems with memory mapped IO from user space. I have a PCI device that has a 64kB mmio range at PCI_BAR_0. This address space contains the registers for the device. My Linux driver provides a char device that allows read/write/seek, and mmap for this space. In Linux you can use either read/write/seek to access the space, or memory map it via mmap and access it directly. When using the driver in dom0 under Xen 3.0.4, the read/write/seek method works fine but the mmap does not. None of the related functions return errors, but the mmap does not appear to access the correct memory. Is there anything I am missing? The mmap is performed by a remap_pfn_range() by the driver, and mmap() in the user space code. I am running Ubuntu 6.10 AMD64 Server and I built Xen 3.0.4 from source, including the 2.6.16.33-xen kernel. The driver is running in dom0, no other domains are present. Thanks, Stephen. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
I have the same issue. Keir help me to solve the problem. Use io_remap_pfn_range() in your mmap handler to map the mmio. hyang On 3/19/07, Stephen Donnelly <sfdonnelly@gmail.com> wrote:> > I posted this to the xen-users list first, they suggested I ask here. > > I understood that in a Driver Domain that has access to a (PCI) device, > ''native'' drivers can be used, but I am having some problems with memory > mapped IO from user space. > > I have a PCI device that has a 64kB mmio range at PCI_BAR_0. This address > space contains the registers for the device. My Linux driver provides a char > device that allows read/write/seek, and mmap for this space. In Linux you > can use either read/write/seek to access the space, or memory map it via > mmap and access it directly. > > When using the driver in dom0 under Xen 3.0.4, the read/write/seek method > works fine but the mmap does not. None of the related functions return > errors, but the mmap does not appear to access the correct memory. Is there > anything I am missing? > > The mmap is performed by a remap_pfn_range() by the driver, and mmap() in > the user space code. > > I am running Ubuntu 6.10 AMD64 Server and I built Xen 3.0.4 from source, > including the 2.6.16.33-xen kernel. The driver is running in dom0, no > other domains are present. > > Thanks, > Stephen. > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
You are absolutely correct, the code now works fine with mmap. Thank you! But I don''t understand how this change works, since in include/asm/pgtable.h: #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ remap_pfn_range(vma, vaddr, pfn, size, prot) Stephen. On 3/20/07, Haw-Yuan Yang <hawyuan@gmail.com> wrote:> > I have the same issue. Keir help me to solve the problem. > Use io_remap_pfn_range() in your mmap handler to map the mmio. > > hyang > > > On 3/19/07, Stephen Donnelly <sfdonnelly@gmail.com > wrote: > > > I posted this to the xen-users list first, they suggested I ask here. > > > > I understood that in a Driver Domain that has access to a (PCI) device, > > ''native'' drivers can be used, but I am having some problems with memory > > mapped IO from user space. > > > > I have a PCI device that has a 64kB mmio range at PCI_BAR_0. This > > address space contains the registers for the device. My Linux driver > > provides a char device that allows read/write/seek, and mmap for this space. > > In Linux you can use either read/write/seek to access the space, or memory > > map it via mmap and access it directly. > > > > When using the driver in dom0 under Xen 3.0.4, the read/write/seek > > method works fine but the mmap does not. None of the related functions > > return errors, but the mmap does not appear to access the correct memory. Is > > there anything I am missing? > > > > The mmap is performed by a remap_pfn_range() by the driver, and mmap() > > in the user space code. > > > > I am running Ubuntu 6.10 AMD64 Server and I built Xen 3.0.4 from source, > > including the 2.6.16.33-xen kernel. The driver is running in dom0, no > > other domains are present. > > > > Thanks, > > Stephen. > > > > > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@lists.xensource.com > > http://lists.xensource.com/xen-devel > > > > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On 20/3/07 01:43, "Stephen Donnelly" <sfdonnelly@gmail.com> wrote:> But I don''t understand how this change works, since in include/asm/pgtable.h: > > #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ > remap_pfn_range(vma, vaddr, pfn, size, prot)Include/asm/mach-xen/asm/pgtable.h. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel