linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: ebiederm+eric@ccr.net (Eric W. Biederman)
To: James Simmons <jsimmons@edgeglobal.com>
Cc: linux-mm@kvack.org
Subject: Re: accel again.
Date: 09 Sep 1999 13:37:46 -0500	[thread overview]
Message-ID: <m1emg8dj7p.fsf@alogconduit1ae.ccr.net> (raw)
In-Reply-To: James Simmons's message of "Sat, 4 Sep 1999 17:27:42 -0400 (EDT)"

James Simmons <jsimmons@edgeglobal.com> writes:

> Well I did my homework on spinlocks and see what you mean by using
> spinlocks to handle accel and framebuffer access. So just before I have
> fbcon access the accel engine I could do this right?

This prevents the page table from changing, not the mapped pages.
(Though you can unmap them as well).

I still think
for_each_task(p) {
	if (p->mm == &fb_info->vm_area->vm_mm) {
		put_process_to_sleep(p); /* pseudo code */
	}
}
is less costly.
And the single process case can usually optimized to:
if ((&fb_info->vm_area->vm_mm == current->mm) && (current->mm->count == 1)) {
	/* do nothing */
} else {
	/* put everyone else to sleep */
}
in the send_accel_command() interface, so you would only need
to really put processes to sleep when you have multiple processes mapping
the frame buffer.  You could also use this optimization with the unmapping
case so I'm not certain which is superior.   Blocking on a page fault when
you access memory is certainly better explored.

The worst case only comes into play when (a) you have mm->count >1
or (b) the kernel is doing something asynchronously.
(a) Looks easy enough to avoid (it's not exactly polite but not using
threads is simple)
(b) should be rare.

But this is only relevant for buggy hardware, that will lock the whole machine.

For non buggy hardware you certainly want a cooperative lock/
something you can block on while the accel commands are running.

But that is probably just a case of documenting your send_accel_command()
interface as blocking when the accel commands are running.

Eric

p.s. your code looks correct from what I can see except 
you are using the wrong lock.  And expecting each store instruction
to take that lock (which doesn't happen).


> 
> In fb.h 
> --------
> struct fb_info {
> 	...
> 	struct vm_area_struct vm_area
> 	...
> }
> --------
> 
> In fbcon.c
> 
> /* I going to access accel engine */
> spin_lock(&fb_info->vm_area->vm_mm->page_table_lock); 
> 
> /* accessing accel engine */
> ....
> /* done with accel engine */
> spin_unlock(&fb_info->vm_area->vm_mm->page_table_lock);
> 
> Now this would lock the framebuffer correct? So if a process would try to
> acces the framebuffer it would be put to sleep while its doing accels. Is
> this basically what I need to do or is their something more that I am
> missing. 
> 
> Their also exist the possiblity that the accel engine in the kernel and
> the accel registers from userland could be access at the same time. This
> means that spin_lock could be called twice. Any danger in this? Then some
> accel engines use a interuppt to flush their FIFO. So a 
> spin_lock_irqsave(&fb_info->vm_area->vm_mm->page_table_lock, flags);
> should always be used correct?
> 
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org.  For more info on Linux MM,
> see: http://humbolt.geo.uu.nl/Linux-MM/
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/

  reply	other threads:[~1999-09-09 18:37 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-09-04 21:27 James Simmons
1999-09-09 18:37 ` Eric W. Biederman [this message]
1999-09-10 20:01   ` James Simmons

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m1emg8dj7p.fsf@alogconduit1ae.ccr.net \
    --to=ebiederm+eric@ccr.net \
    --cc=jsimmons@edgeglobal.com \
    --cc=linux-mm@kvack.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox