panic: pmap_page_protect: illegal for unmanaged page
Simon 'corecode' Schubert
corecode at fs.ei.tum.de
Fri Jan 11 04:03:06 PST 2008
Matthew Dillon wrote:
:device memory has pages of type PG_FICTITIOUS, but pmap_remove_all() complains:
: /*
: * XXX this makes pmap_page_protect(NONE) illegal for non-managed
: * pages!
: */
The comment itself is correct in that fictitious pages are not managed
by PV lists, so its impossible for pmap_remove_all() to function on
a fictitiuos page. pmap_remove_all() is typically called to remove
user mappings of pages undergoing write I/O to prevent the pages from
being modified by userland while the I/O is in progress.
If there is a code path calling that function on fictitious pages we
have to examine and fix it (and the 'fix' might be as you suggest, just
ignoring it for such pages). I don't think its possible to put fictitious
pages under PV management due to the physical-to-virtual translations
that might be needed in that codepath... device pages tend to be at
physical addresses that just don't work with the way the translation code
was written.
It happens if you call msync() with an argument of MS_INVALIDATE.
So you suggest to simply return?
What I wonder is, will *any* page of a OBJT_DEVICE not be PG_FICTITIOUS? In other words: shouldn't we simply avoid the whole invalidate code path for OBJT_DEVICE objects?
I'm quite confused about the intentions of this, anyways:
from vm_map_clean:
int clean_only =
(object->type == OBJT_DEVICE) ? FALSE : TRUE;
vm_object_reference(object);
switch(current->maptype) {
case VM_MAPTYPE_NORMAL:
vm_object_page_remove(object,
OFF_TO_IDX(offset),
OFF_TO_IDX(offset + size + PAGE_MASK),
clean_only);
Obviously OBJT_DEVICE is special cased, and it seems that somebody explicitly wanted that OBJT_DEVICE mappings will be completely destroyed on this call.
But then, down this code path, pmap_remove_all() will panic on PG_FICTITOUS pages. Interesting enough, pmap_clearbit() will simply ignore PG_FICTITIOUS pages. I think I'll try the same for pmap_remove_all() now.
cheers
simon
--
Serve - BSD +++ RENT this banner advert +++ ASCII Ribbon /"\
Work - Mac +++ space for low â¬â¬â¬ NOW!1 +++ Campaign \ /
Party Enjoy Relax | http://dragonflybsd.org Against HTML \
Dude 2c 2 the max ! http://golden-apple.biz Mail + News / \
More information about the Bugs
mailing list