Re: user_to_phys() without mmap?
- From: phil-news-nospam@xxxxxxxx
- Date: 16 Jul 2007 21:07:41 GMT
On Mon, 16 Jul 2007 17:50:29 +0200 Rainer Weikusat <rweikusat@xxxxxxxxxxx> wrote:
| phil-news-nospam@xxxxxxxx writes:
|> On Mon, 16 Jul 2007 14:46:24 +0200 Rainer Weikusat <rweikusat@xxxxxxxxxxx> wrote:
|> | phil-news-nospam@xxxxxxxx writes:
|> |> On Sun, 15 Jul 2007 00:20:45 +0200 Rainer Weikusat <rweikusat@xxxxxxxxxxx> wrote:
|> |> | Neil Steiner <neil.steiner@xxxxxx> writes:
|> |> |> I'm trying to use a framebuffer from user space (think plain video
|> |> |> ram, not some PCI or AGP video card), but mmap'ing from kernel space
|> |> |> into user space is causing large latencies and unsightly artifacts.
|> |> |> It appears that anything written into the mmap'ed user memory is in
|> |> |> fact being copied into kernel space.
|> |> |
|> |> | Theoretically, this could probably be implemented with help of the
|> |> | MMU and some 'weird' fault handling, but I don't think someone would
|> |> | take the trouble, because it seems pretty useless. The /dev/mem driver
|> |> | certainly doesn't do this. Only the MMU will interfere accesses to
|> |> | virtual memory locations from user space, except for faults caused by
|> |> | this accesses.
|> |>
|> |> I tried to map the video buffer into user space some time ago and I did
|> |> find that what was mapped was not the actual physical memory of the video
|> |> card, but just some memory apparently allocated by a driver in the kernel
|> |> which was then periodically copied from that memory into the real physical
|> |> memory.
|> |
|> | Which driver? That should be easy to determine.
|>
|> The basic console driver used for text and framebuffer modes.
|
| So you weren't mmaping some hardware framebuffer to begin with but the
| virtual framebuffer associated with one of the virtual consoles,
| right?
Both. I was hoping the kernel would switch translations so that what was
mapped in VM for the framebuffer would be changed over to literally access
the hardware when that console was switched to be the one displayed.
This isn't a hard concept to understand. I just don't know if there any
big showstoppers in the kernel or hardware (like the segment tables). It
would be similar to activating and de-activating pages (part of swapping).
When the virtual console to be displayed is changed by whatever means is
changing it, then something like these steps would happen:
1. Remove segment table entries for the mappings of the old console
to a state similar to "swapped out". If a process tries to access
that data during the copying, it gets blocked like it would be for
a page to swap in.
2. Copy data from the hardware buffer to memory allocated to save the
old virtual console.
3. Set up the segment table entries for the mappings of the old console
to point to the memory location where the contents was saved.
4. If any processes were blocked on these mappings, unblock them.
5. Remove segment table entries for the mappings of the new console
to a state similar to "swapped out". If a process tries to access
that data during the copying, it gets blocked like it would be for
a page to swap in.
6. Copy data from the memory allocated to save the new virtual console
into the hardware buffer.
7. Set up the segment table entries for the mappings of the new console
to point to the hardware buffer memory locations.
8. If any processes were blocked on these mappings, unblock them.
This is just a memory mappable variation of what virtual text consoles are
doing now, anyway. It just extends to graphical content (more content)
and provides for mappability (via a raw virtual console device node).
Appropriate locks will be needed, especially on MP systems.
--
|---------------------------------------/----------------------------------|
| Phil Howard KA9WGN (ka9wgn.ham.org) / Do not send to the address below |
| first name lower case at ipal.net / spamtrap-2007-07-16-1546@xxxxxxxx |
|------------------------------------/-------------------------------------|
.
- References:
- user_to_phys() without mmap?
- From: Neil Steiner
- Re: user_to_phys() without mmap?
- From: Rainer Weikusat
- Re: user_to_phys() without mmap?
- From: phil-news-nospam
- Re: user_to_phys() without mmap?
- From: Rainer Weikusat
- Re: user_to_phys() without mmap?
- From: phil-news-nospam
- Re: user_to_phys() without mmap?
- From: Rainer Weikusat
- user_to_phys() without mmap?
- Prev by Date: Re: aggregate NFS export
- Next by Date: Re: sys/queue.h
- Previous by thread: Re: user_to_phys() without mmap?
- Next by thread: Re: user_to_phys() without mmap?
- Index(es):
Relevant Pages
|