Re: Address spaces on a i386 - Getting Confused

David Miller (davem@twiddle.net)
Tue, 30 Mar 1999 03:43:54 -0800


From: Paul Sargent <Paul.Sargent@3dlabs.com>
Date: Tue, 30 Mar 1999 12:29:31 +0100

But I'm still confused by the virt-to-phys macro. I would have
thought if I want to find the physical address of a user space
buffer I would have to go through the page table to fins out where
is physical page is, not just mask off some bits.

It cannot be used on user space buffers, this is what you are missing.

Sounds like you want to point the DMA controller of some device at
user space pages, the closest mechanism that exists for doing this is
in the drivers/video/bttv.c video capture card driver, but it's a
kludge.

The problem is that you have to keep track of all of the nasties when
you want to do something special with user pages, you'd have to:

1) Increment the reference count to the page_struct of that physical
page.

2) Mark the user TLB mappings read-only so the user cannot write to
the pages while the device is fiddling with it.

3) Undo all of this when the card is done and wake up the user if he
went to sleep because he wanted to write to the page (and thus
took a page fault because we mapped it read-only to ensure
exclusive access for the device)

You also have to deal with the cases where the page is mapped by
multiple processes, etc. it's a can of worms.

Later,
David S. Miller
davem@redhat.com

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/