From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Martin Subject: Re: Consuming PCI device in PV kernel Date: Fri, 25 Jul 2014 15:28:17 +0100 Message-ID: <1103494739.20140725152817@gmail.com> References: <524794479.20140703121338@gmail.com> <20140703180957.GD13710@konrad-lan.dumpdata.com> <1376452421.20140707092147@gmail.com> <1083121389.20140707122233@gmail.com> <623751089.20140718153713@gmail.com> <20140718190942.GG15947@laptop.dumpdata.com> <538610044.20140721111330@gmail.com> <1405940004.25022.10.camel@kazak.uk.xensource.com> <357303711.20140725135638@gmail.com> <1406293821.24842.8.camel@kazak.uk.xensource.com> <1035381797.20140725142116@gmail.com> <1406295478.24842.15.camel@kazak.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1406295478.24842.15.camel@kazak.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell Cc: xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org Hello Ian, >> This is what I am doing: >> >> void *micropv_remap_page(uint64_t physical_address, uint64_t machine_address, int readonly) >> { >> // Update the mapping. I have had problems using a readonly mapping, however I'm not sure whether that was to do with >> // this call, or the page that was being mapped. >> int rc = HYPERVISOR_update_va_mapping(physical_address, __pte(machine_address | (readonly ? L1_PROT_RO : L1_PROT)), UVMF_INVLPG); > The first argument should be the virtual address, I think. But maybe you > have a 1:1 mapping so this doesn't matter? I don't think so. I inverted the parameter order and it failed during the memory address validation. Also this is the same call as I use for mapping the shared_info at start of day. >> >> ptr = micropv_remap_page((uint64_t)buffer, pci_device.bar[0].memory.address << 4, 0); > Are you sure about that BAR decode? Don't you need to at least mask the > bottom 4 bits? Yes I am sure on this. The decoded addresses look correct. I removed it and get this output from xl dmesg (XEN) mm.c:828:d304v0 pg_owner 304 l1e_owner 304, but real_pg_owner 0 (XEN) mm.c:899:d304v0 Error getting mfn f7d0 (pfn d2bd) from L1 entry 000000000f7d0027 for l1e_owner=304, pg_owner=304 > You might also need to mask it to a page boundary, depending on what the > address is... The BAR is page aligned the value is f7d00000 -- Best regards, Simon mailto:furryfuttock@gmail.com