Re: mlockall and mmap of IO devices don't mix

Mark Hounschell
2004-07-16T21:02:01Z

Andrew Morton wrote:
>
> Joe Korty <joe.korty@ccur.com> wrote:
> >
> > On Fri, May 21, 2004 at 07:13:26PM -0700, Andrew Morton wrote:
> > > Mark Hounschell <markh@compro.net> wrote:
> > > >
> > > > Joe Korty wrote:
> > > > >
> > > > > 2.6.0-test6: the use of mlockall(2) in a process that has mmap(2)ed
> > > > > the registers of an IO device will hang that process uninterruptibly.
> > > > > The task runs in an infinite loop in get_user_pages(), invoking
> > > > > follow_page() forever.
> > > > >
> > > > > Using binary search I discovered that the problem was introduced
> > > > > in 2.5.14, specifically in ChangeSetKey
> > > > >
> > > > > zippel@linux-m68k.org|ChangeSet|20020503210330|37095
> > > > >
> > > >
> > > > I know this is an old thread but can anyone tell me if this problem is
> > > > resolved in the current 2.6.6 kernel?
> > > >
> > >
> > > There's an utterly ancient patch in -mm which might fix this.
> > >
> > > http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.6/2.6.6-mm4/broken-out/get_user_pages-handle-VM_IO.patch
> >
> > [ 2nd send -- corporate email system in the throes of being scrambled / updated ]
> >
> > Andrew,
> > I have been using this patch for ages. Any chance of it being forwared to
> > the official tree?
>
> That patch had its first birthday last week. I wrote it in response to
> some long-forgotten problem, failed to changelog it at the time then forgot
> why I wrote it. I kept it in the hope that I'd remember why I wrote it. I
> subsequently wrote a best-effort changelog but am unconvinced by it. Ho
> hum.
>
> Let me genuflect a bit. I guess we can be reasonably confident it won't
> break anything.

Strange thing about this patch is "it doesn't seem to work on all
machines". Originally it worked for me on a dual AMD1900 box. Now I'm
trying to use it on a Dual P4 box and a dual Opteron in both 32 and 64
bit modes with no luck at all???? I guess I need to go back to my
original AMD and reverify it's functionality.

The user level code I'm using:

status = mlockall(MCL_CURRENT | MCL_FUTURE);
if (status < 0)
perror("mlock all failure");

dhan = rtom_usec_map(&rtom_microseconds, 0); mmaps rtom usec timer

?????

Regards
Mark