Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Oct 1997 20:30:28 -0600
From:      "Mike Durian" <durian@plutotech.com>
To:        "Mike Durian" <durian@plutotech.com>
Cc:        hackers@FreeBSD.ORG
Subject:   Re: user vm addr to kernel vm addr 
Message-ID:  <199710220230.UAA15838@pluto.plutotech.com>
In-Reply-To: Your message of "Mon, 20 Oct 1997 20:01:11 MDT."

next in thread | raw e-mail | index | archive | help
On Mon, 20 Oct 1997 20:01:11 MDT, "Mike Durian" <durian@plutotech.com> wrote:
>  In my virtual file system I'd like to speed up reads and writes
>by copying directly from the uio structure to a vm address of
>a buffer in the user process running on behalf of the filesystem.
>I'm currently shoving all the data through a socket that the
>user process reads from and copies into a buffer.  I'd like to
>go direct and skip the socket writing part.  Does that make sense?
>  Anyway, I want to copy from a uio to a different process's vm space.
>I can get the vm address of the destination buffer over a socket and
>think I can use vm_fault_wire to make sure it stays accessable, but
>I don't know how to convert that user space vm address into a
>kernel space vm address that I can then use with copyout.
>  Is there an easy (or any) way to do this?

  I'm following up to my own post.  I should mention that the
user process containing the vm buffer that I want to convert is
*not* curproc.  I want to go between that buffer and a struct uio
in my VOP_READ and VOP_WRITE functions.
  I did find something that works, but perhaps someone has a
better/cleaner way of doing it.  I don't think I need to do
the vm_fault_wire either.

	for each page in the vm buffer
		vm_map_lookup	to get the vm object
		vm_page_lookup	to get the page for the object
	kmem_alloc_pageable	to allocate kernel vm space
	pmap_qenter		to map the pages into the kernel vm address
	uiomove			copy from the new kernel address to uio
	pmap_qremove		to unmap the pages
	kmem_free		to release the kernel vm space

mike



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199710220230.UAA15838>