taking all the heat that was posted on the email i sent. I thank you all for trying to to give me as much "pointers" Things i learn.
I run a small hosting site. i use openbsd, this is the first time that it showed me that "uvm_alloc" issue. 2nd im not a coder just your regular guy that likes to use this OS. Regardless, it's true that getting hand-outs of some diff is bad. specially if I myself don't know what the heck it does. Given that response I will. - RTFM my way through diff and patch and all. - Stop asking stupid questions. but all things aside. I am not going to back down on supporting this OS. regardless of people chewing my head on the list or ... some funny comments like "Can I have your money and business" (nice one art) I've moved away from using a free disorganized os (the L in the *nix), to OpenBSD, clear, simple and precise. (not offending anyone this is MY POINT OF VIEW) so thanks again List! :) regards, Beavis A. ButtHead On Mon, Oct 13, 2008 at 2:28 AM, Artur Grabowski <[EMAIL PROTECTED]> wrote: > On a more serious note. > > No, there is no diff to 4.3 > No, there won't be. > No, the random changes this guy mailed do not solve the problem (at > least one thing here can make things worse and one is pulled out of > its context and will cause problems). > No, I'm not going to tell you which changes there are since there > were lots of things since 4.3 that lowered the pressure on static > map entries. > > //art > > Artur Grabowski <[EMAIL PROTECTED]> writes: > >> Wow. I'm impressed. So if I mailed you a random diff that you don't >> understand you'd happily apply it without having a single clue about >> what the diff does and who sent it? >> >> Cool. Can I have your money and business without going through that >> hassle? Can't be bothered to make a malicious diff right now, >> haven't had coffee yet. >> >> //art >> >> Beavis <[EMAIL PROTECTED]> writes: >> >>> Vladimir, >>> >>> Sorry to bother you but I tried to apply the patch on uvm_map.c >>> >>> i copied the patch you gave me here and run >>> >>> patch -p0 < uvm_map.patch >>> >>> I get some rej. files. any pointers or help will be greatly >>> appreciated from anyone. >>> >>> >>> -b >>> >>> On Fri, Oct 10, 2008 at 3:01 PM, Vladimir Kirillov <[EMAIL PROTECTED]> >>> wrote: >>>> On 14:44 Fri 10 Oct, Beavis wrote: >>>>> thanks for the reply vladimir. >>>>> >>>>> is it needed to upgrade my 4.3 stable to -current? isn't there a patch >>>>> available for this? >>>> >>>> The 4.3 uvm_map.c is 5 diffs far from this patch >>>> http://www.openbsd.org/cgi-bin/cvsweb/src/sys/uvm/uvm_map.c?r1=1.104#rev1.104 >>>> you can generate the diff yourself, >>>> cvs diff -r1.99 -r1.104 uvm_map.c >>>> >>>> or here: >>>> >>>> Index: uvm_map.c >>>> =================================================================== >>>> RCS file: /cvs/src/sys/uvm/uvm_map.c,v >>>> retrieving revision 1.99 >>>> retrieving revision 1.104 >>>> diff -u -p -r1.99 -r1.104 >>>> --- uvm_map.c 15 Sep 2007 10:10:37 -0000 1.99 >>>> +++ uvm_map.c 23 Sep 2008 13:25:46 -0000 1.104 >>>> @@ -1,4 +1,4 @@ >>>> -/* $OpenBSD: uvm_map.c,v 1.99 2007/09/15 10:10:37 martin Exp $ */ >>>> +/* $OpenBSD: uvm_map.c,v 1.104 2008/09/23 13:25:46 art Exp $ */ >>>> /* $NetBSD: uvm_map.c,v 1.86 2000/11/27 08:40:03 chs Exp $ */ >>>> >>>> /* >>>> @@ -98,6 +98,7 @@ static struct timeval uvm_kmapent_last_w >>>> static struct timeval uvm_kmapent_warn_rate = { 10, 0 }; >>>> >>>> struct uvm_cnt uvm_map_call, map_backmerge, map_forwmerge; >>>> +struct uvm_cnt map_nousermerge; >>>> struct uvm_cnt uvm_mlk_call, uvm_mlk_hint; >>>> const char vmmapbsy[] = "vmmapbsy"; >>>> >>>> @@ -538,6 +539,7 @@ uvm_map_init(void) >>>> UVMCNT_INIT(map_backmerge, UVMCNT_CNT, 0, "# uvm_map() back >>>> merges", 0); >>>> UVMCNT_INIT(map_forwmerge, UVMCNT_CNT, 0, "# uvm_map() missed >>>> forward", >>>> 0); >>>> + UVMCNT_INIT(map_nousermerge, UVMCNT_CNT, 0, "# back merges >>>> skipped", 0); >>>> UVMCNT_INIT(uvm_mlk_call, UVMCNT_CNT, 0, "# map lookup calls", 0); >>>> UVMCNT_INIT(uvm_mlk_hint, UVMCNT_CNT, 0, "# map lookup hint hits", >>>> 0); >>>> >>>> @@ -726,6 +728,8 @@ uvm_map_p(struct vm_map *map, vaddr_t *s >>>> >>>> if ((map->flags & VM_MAP_INTRSAFE) == 0) >>>> splassert(IPL_NONE); >>>> + else >>>> + splassert(IPL_VM); >>>> >>>> /* >>>> * step 0: sanity check of protection code >>>> @@ -832,6 +836,15 @@ uvm_map_p(struct vm_map *map, vaddr_t *s >>>> goto step3; >>>> } >>>> >>>> + /* >>>> + * Only merge kernel mappings, but keep track >>>> + * of how much we skipped. >>>> + */ >>>> + if (map != kernel_map && map != kmem_map) { >>>> + UVMCNT_INCR(map_nousermerge); >>>> + goto step3; >>>> + } >>>> + >>>> if (prev_entry->aref.ar_amap) { >>>> error = amap_extend(prev_entry, size); >>>> if (error) { >>>> @@ -897,6 +910,8 @@ step3: >>>> if ((flags & UVM_FLAG_OVERLAY) == 0) >>>> new_entry->etype |= UVM_ET_NEEDSCOPY; >>>> } >>>> + if (flags & UVM_FLAG_HOLE) >>>> + new_entry->etype |= UVM_ET_HOLE; >>>> >>>> new_entry->protection = prot; >>>> new_entry->max_protection = maxprot; >>>> @@ -1098,6 +1113,45 @@ uvm_map_spacefits(struct vm_map *map, va >>>> } >>>> >>>> /* >>>> + * uvm_map_pie: return a random load address for a PIE executable >>>> + * properly aligned. >>>> + */ >>>> + >>>> +#ifndef VM_PIE_MAX_ADDR >>>> +#define VM_PIE_MAX_ADDR (VM_MAXUSER_ADDRESS / 4) >>>> +#endif >>>> + >>>> +#ifndef VM_PIE_MIN_ADDR >>>> +#define VM_PIE_MIN_ADDR VM_MIN_ADDRESS >>>> +#endif >>>> + >>>> +#ifndef VM_PIE_MIN_ALIGN >>>> +#define VM_PIE_MIN_ALIGN PAGE_SIZE >>>> +#endif >>>> + >>>> +vaddr_t >>>> +uvm_map_pie(vaddr_t align) >>>> +{ >>>> + vaddr_t addr, space, min; >>>> + >>>> + align = MAX(align, VM_PIE_MIN_ALIGN); >>>> + >>>> + /* round up to next alignment */ >>>> + min = (VM_PIE_MIN_ADDR + align - 1) & ~(align - 1); >>>> + >>>> + if (align >= VM_PIE_MAX_ADDR || min >= VM_PIE_MAX_ADDR) >>>> + return (align); >>>> + >>>> + space = (VM_PIE_MAX_ADDR - min) / align; >>>> + space = MIN(space, (u_int32_t)-1); >>>> + >>>> + addr = (vaddr_t)arc4random_uniform((u_int32_t)space) * align; >>>> + addr += min; >>>> + >>>> + return (addr); >>>> +} >>>> + >>>> +/* >>>> * uvm_map_hint: return the beginning of the best area suitable for >>>> * creating a new mapping with "prot" protection. >>>> */ >>>> @@ -1385,6 +1439,8 @@ uvm_unmap_remove(struct vm_map *map, vad >>>> >>>> if ((map->flags & VM_MAP_INTRSAFE) == 0) >>>> splassert(IPL_NONE); >>>> + else >>>> + splassert(IPL_VM); >>>> >>>> /* >>>> * find first entry >>>> @@ -1451,7 +1507,9 @@ uvm_unmap_remove(struct vm_map *map, vad >>>> * special case: handle mappings to anonymous kernel >>>> objects. >>>> * we want to free these pages right away... >>>> */ >>>> - if (map->flags & VM_MAP_INTRSAFE) { >>>> + if (UVM_ET_ISHOLE(entry)) { >>>> + /* nothing to do! */ >>>> + } else if (map->flags & VM_MAP_INTRSAFE) { >>>> uvm_km_pgremove_intrsafe(entry->start, entry->end); >>>> pmap_kremove(entry->start, len); >>>> } else if (UVM_ET_ISOBJ(entry) && >>>> @@ -3697,9 +3755,8 @@ uvm_object_printit(uobj, full, pr) >>>> >>>> static const char page_flagbits[] = >>>> >>>> "\20\1BUSY\2WANTED\3TABLED\4CLEAN\5CLEANCHK\6RELEASED\7FAKE\10RDONLY" >>>> - "\11ZERO\15PAGER1"; >>>> -static const char page_pqflagbits[] = >>>> - "\20\1FREE\2INACTIVE\3ACTIVE\4LAUNDRY\5ANON\6AOBJ"; >>>> + "\11ZERO\15PAGER1\20FREE\21INACTIVE\22ACTIVE\24ENCRYPT\30PMAP0" >>>> + "\31PMAP1\32PMAP2\33PMAP3"; >>>> >>>> void >>>> uvm_page_printit(pg, full, pr) >>>> @@ -3710,14 +3767,10 @@ uvm_page_printit(pg, full, pr) >>>> struct vm_page *tpg; >>>> struct uvm_object *uobj; >>>> struct pglist *pgl; >>>> - char pgbuf[128]; >>>> - char pqbuf[128]; >>>> >>>> (*pr)("PAGE %p:\n", pg); >>>> - snprintf(pgbuf, sizeof(pgbuf), "%b", pg->pg_flags, page_flagbits); >>>> - snprintf(pqbuf, sizeof(pqbuf), "%b", pg->pg_flags, >>>> page_pqflagbits); >>>> - (*pr)(" flags=%s, pg_flags=%s, vers=%d, wire_count=%d, >>>> pa=0x%llx\n", >>>> - pgbuf, pqbuf, pg->pg_version, pg->wire_count, >>>> + (*pr)(" flags=%b, vers=%d, wire_count=%d, pa=0x%llx\n", >>>> + pg->pg_flags, page_flagbits, pg->pg_version, pg->wire_count, >>>> (long long)pg->phys_addr); >>>> (*pr)(" uobject=%p, uanon=%p, offset=0x%llx loan_count=%d\n", >>>> pg->uobject, pg->uanon, (long long)pg->offset, pg->loan_count); >>>> >>>> >>>> -- >>>> Vladimir Kirillov >>>> http://darkproger.net