Hello,

Finally rtdm_iomap_to_user works! It was an initialization error: the probe() 
function correctly stored the pci_resource_start and pci_resource_len values in 
the xen_mydriver variable, but these values were not copied into the 
context->dev_private structure in the open() function. The ioctl function used 
my_context->location, which was 0.

In the new working driver, the open() function correctly initializes the 
context->dev_private variable. Later, rtdm_iomap_to_user() is called with the 
correct values.

Gilles, thank you very much for your help and patience. It would have been much 
harder to find a solution without your indications. 

By the way, I have upgraded to Xenomai 2.4.10. It was quite straightforward. I 
haven't applied the patches from ksrc/arch/x86/patches/adeos-ipipe*.

Thank you for your help.

Best regards,

Asier





> -----Original Message-----
> From: Gilles Chanteperdrix [mailto:[email protected]]
> Sent: Wednesday, April 27, 2011 7:37 PM
> To: Asier Tamayo
> Cc: Jan Kiszka; [email protected]
> Subject: Re: [Xenomai-help] FW: rtdm_iomap_to_user() I-pipe error
> 
> 
> Gilles Chanteperdrix wrote:
> > Asier Tamayo wrote:
> >> Hello,
> >>
> >> Thanks for your help.
> >>
> >> I know my Xenomai version is quite out of date. However, 
> as I'm using
> >> the ELinOS distribution (which already has its own patches), I find
> >> it really difficult to upgrade to Xenomai 2.4.10. Anyway, 
> I can apply
> >> changes to some files.
> > 
> > Sorry, I do not mean that you should upgrade to 2.4.10, I mean you
> > should run a self-contained test case on an unpatched 
> 2.4.10, in order
> > to see whether you observe the same behaviour.
> > 
> >> The rtdm_iomap_to_user function is referenced in drvlib.c and
> >> rtdm_driver.h: I compare the 2.4.7 and 2.4.10 versions and they are
> >> almost identical, so I think there will be no use in patching the
> >> kernel for these 2 files. Do you know of any other file that could
> >> make any difference in my problem?
> >>
> >> If I compare versions 2.4.7 and 2.5.6 (the last one) of Xenomai, I
> >> can see the last version uses "/dev/rtheap" instead of "/dev/zero"
> >> and that there are some changes if CONFIG_MMU is not defined. My
> >> system (Intel Atom N270 CPU) is configured with MMU and 
> therefore the
> >> only actual changes between the versions are regarding 
> "dev/rtheap".
> >> Does it make any difference? Xenomai 2.4.7 has 
> "/dev/rtpheap" but no
> >> "/dev/rtheap"; should I use it instead of "/dev/zero"?
> > 
> > The implementation is different, in order to know why, and 
> which problem
> >  it solves, you can look into git history. The advantage of using
> > /dev/rtheap is that the implementation is shared with other skins.
> > 
> >>
> >>>> virt_to_phys(new_iomap) --> 0xf5f6f000
> >>> virt_to_phys is not supposed to work in that case. Since you
> >>> ioremap'ed the address, you already know the physical address
> >>> anyway.
> >>>
> >> Is there any function that will tell me the real physical 
> address in
> >> order to make sure the mapping is correct?
> > 
> > I would say vmalloc_to_page. But do not take my word for 
> it, check the
> > "linux device drivers" book.
> > 
> vmalloc_to_page would work for an address returned by vmalloc/ioremap,
> not for one returned by the mapping functions.
> 
> To check what happens, you should trace drvlib.c to see what 
> parameters
> are finally passed to remap_page_range.
> 
> But there were several changes between 2.4 and 2.5, so, I 
> would suggest
> trying 2.5.6, just with the simple test case, no need to upgrade the
> linux kernel.
> 
> -- 
>                                                               
>   Gilles.
> 
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to