Il 17/09/2016 01:12, Luca dariz ha scritto: > Il 09/08/2016 00:21, Luca dariz ha scritto: >> Il 30/07/2016 03:47, Olaf Buddenhagen ha scritto: >>> On Fri, Jul 29, 2016 at 06:30:09PM +0000, Luca wrote: >>> >>>> I need a way to translate logical addresses to physical, >>> >>> Is this for DMA or something along these lines? If so, the interface for >>> allocating "contiguous memory" that was added for the purpose of DDE >>> should work here as well I'd presume. >>> >>> (I didn't like how the original interface was designed specifically, and >>> I don't know whether in has been improved since -- but regardless, it >>> should get the job done...) >>> >>> If it doesn't cut it, or this is about something else entirely, could >>> you elaborate please? >>> >> >> The contiguous memory allocation interface is not enough. I mean, at >> least in the virtio ld driver, there are some addresses that must be >> translated which are not allocated with vm_allocate_contiguous. However >> I did not investigate in detail why this is needed. > > I investigated a bit more, and it seems that these addresses correspond > to buffers in the netbsd block cache, so this is the reason for not > being allocated with vm_allocate_contiguous().. Also these buffers are > used to read and write data. I think the virtio driver uses DMA however > I can read and write to the underlying device apparently without problems.. > > Here's a simple test to show what I'm doing: > > uint8_t *buf=malloc(size); > memset(buf, 0x5a, size); > fd = rump_sys_open(("/dev/ld0d", RUMP_O_RDWR); > rump_sys_write(fd, buf, size); > rump_sys_lseek(fd, 0, SEEK_SET); > memset(buf, 0, size); > rump_sys_read(fd, buf, size); > ... check that I read the same that I wrote ... > rump_sys-close(fd); >
I also tried to close/open the file between write and read, and to perform them in 2 different programs. That should prevent from reading directly from the cache itself and not the device..
signature.asc
Description: OpenPGP digital signature