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