On Thu, Dec 05, 2002 at 05:33:07AM -0500, Roland McGrath wrote: > > Mmh, I was actually thinking of a hole as being anonymously allocated > > memory, ie, zero filled. > > Oh, that's not what I was talking about. That's not a hole, it's an > anonymous memory object. I guess that is the appropriate semantic to match > vm_map, as Thomas says. I suppose if you need a real hole you could make > an empty real memory object, e.g. default_pager_object_set_size to zero. > > > Do we really need actual holes, ie, invalid pages? Can we use > > MACH_PORT_DEAD? > > I don't think you can send MACH_PORT_DEAD (you just receive it when a dead > name you didn't already have was sent). The only simple interface for it I > can think of is some kludge like offset=-1 when memobj=MACH_PORT_NULL.
Well, so far there is no offset argument ;) but something like "start = -1" and "size" being the size of the hole _would_ be possible, although it is certainly a horrible kludge. > I seem to have a desire to have an interface for a hole without using a > real memory object, but I can't think of a use for it. (But then, I can't > really think of a use for zero-fill regions in a proxy object.) Well, I see only two ways, beside the kludges above where we overload the MACH_PORT_NULL object giving start/size special meanings: * Have an array of offset arguments, which are used in the way you wanted it to be originally. Then we would need start, end and offset. The advantage is arbitrary holes, the disadvantage is complex calculation of offsets necessary (both user and kernel side actually). Or, instead "offset" just "pregap_size" to specify holes, so you don't need calculate any offsets, but still you need an array of "0"s in the common case. * The simpler variant is to just allow one hole, and that only at the very start of the proxy memory object. The size of the hole would be given by a single pregap argument. You can still construct arbitrary holes by nesting several calls: proxy_create (..., vm_prot_t max_prot, vm_size_t pregap, memory_object_t object[], vm_offset_t start[], vm_size_t size[]) The common case would be pregap = 0. I like the second version because it is so much simpler to handle, but of course it would be very inconvenient to actually use it if you have complex gaps. Thanks, Marcus -- `Rhubarb is no Egyptian god.' GNU http://www.gnu.org [EMAIL PROTECTED] Marcus Brinkmann The Hurd http://www.gnu.org/software/hurd/ [EMAIL PROTECTED] http://www.marcus-brinkmann.de/ _______________________________________________ Bug-hurd mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-hurd