I''m trying to map some mmio pages into my mini-os domain to use a hardware device. The device is at address fed40000. I''m calling ioremap() on this address but its failing, telling me that mfn fed40 is in ram space. (Its failing the mfn_is_ram() check.) What am I doing wrong here? Thanks! _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Matthew Fioravante, le Wed 05 Jan 2011 14:24:55 -0500, a écrit :> I''m trying to map some mmio pages into my mini-os domain to use a > hardware device. The device is at address fed40000. I''m calling > ioremap() on this address but its failing, telling me that mfn fed40 is > in ram space. (Its failing the mfn_is_ram() check.) > > What am I doing wrong here?Mmm, I don''t think anything you''re doing is wrong. Notice the comment: static long system_ram_end_mfn; int mfn_is_ram(unsigned long mfn) { /* very crude check if a given MFN is memory or not. Probably should * make this a little more sophisticated ;) */ return (mfn <= system_ram_end_mfn) ? 1 : 0; } Do you have more than 4GiB memory, i.e. 0xfed40000 is actually between two RAM areas? In such case mfn_is_ram has to really get more sophisticated. (In the interim you could just comment the mfn_is_ram() test from do_ioremap to make things work) Samuel _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
My box doesn''t have more than 4GB. I''ve tried this on 32 bit and 64 bit. I tried nuking the mfn_is_ram check. When I do that the call returns a virtual memory address but when I try to read and write to it, it appears to act just like a normal page of memory and not the device. Does anyone know offhand of a mini-os project that either tested the ioremap() call or actually does some memory mapped io operations? On 01/05/2011 05:55 PM, Samuel Thibault wrote:> Matthew Fioravante, le Wed 05 Jan 2011 14:24:55 -0500, a écrit : >> I''m trying to map some mmio pages into my mini-os domain to use a >> hardware device. The device is at address fed40000. I''m calling >> ioremap() on this address but its failing, telling me that mfn fed40 is >> in ram space. (Its failing the mfn_is_ram() check.) >> >> What am I doing wrong here? > Mmm, I don''t think anything you''re doing is wrong. Notice the comment: > > static long system_ram_end_mfn; > int mfn_is_ram(unsigned long mfn) > { > /* very crude check if a given MFN is memory or not. Probably should > * make this a little more sophisticated ;) */ > return (mfn<= system_ram_end_mfn) ? 1 : 0; > } > > Do you have more than 4GiB memory, i.e. 0xfed40000 is actually between > two RAM areas? In such case mfn_is_ram has to really get more > sophisticated. > > (In the interim you could just comment the mfn_is_ram() test from > do_ioremap to make things work) > > Samuel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Matthew Fioravante, le Thu 06 Jan 2011 12:00:04 -0500, a écrit :> My box doesn''t have more than 4GB. I''ve tried this on 32 bit and 64 bit.How much does it have? Could you post the memory map recorded in xm dmesg?> I tried nuking the mfn_is_ram check. When I do that the call returns a > virtual memory address but when I try to read and write to it, it > appears to act just like a normal page of memory and not the device.Mmm... I wonder how that can be possible if your address is really an IO area.> Does anyone know offhand of a mini-os project that either tested the > ioremap() call or actually does some memory mapped io operations?It was implemeted by Rolf Neugebauer <rolf.neugebauer@netronome.com>, Cc-ed. Samuel _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel