Date: Wed, 3 Jul 2002 18:50:01 -0700 (PDT) From: Julian Elischer <julian@elischer.org> To: FreeBSD current users <current@freebsd.org> Subject: sparc64 patch for testing. Message-ID: <Pine.BSF.4.21.0207031845140.3993-100000@InterJet.elischer.org>
next in thread | raw e-mail | index | archive | help
to keep the sparc 64 pmap up with the others.. I had a look at a couple of thread related points. Here's a possible diff (1 bug found I think) any sparc64 people care to comment? (cat-n-pasted patch) The last addition is I think needed to not leak KV space. The first changes are because the conditional is not needed. This function is only ever called for uninitialised (new) thread structures now.. Index: pmap.c =================================================================== RCS file: /home/ncvs/src/sys/sparc64/sparc64/pmap.c,v retrieving revision 1.58 diff -u -r1.58 pmap.c --- pmap.c 29 May 2002 06:12:13 -0000 1.58 +++ pmap.c 4 Jul 2002 01:44:34 -0000 @@ -962,27 +962,21 @@ /* * Allocate object for the kstack, */ - ksobj = td->td_kstack_obj; - if (ksobj == NULL) { - ksobj = vm_object_allocate(OBJT_DEFAULT, KSTACK_PAGES); - td->td_kstack_obj = ksobj; - } + ksobj = vm_object_allocate(OBJT_DEFAULT, KSTACK_PAGES); + td->td_kstack_obj = ksobj; /* * Get a kernel virtual address for the kstack for this thread. */ - ks = td->td_kstack; - if (ks == 0) { - ks = kmem_alloc_nofault(kernel_map, - (KSTACK_PAGES + KSTACK_GUARD_PAGES) * PAGE_SIZE); - if (ks == 0) - panic("pmap_new_thread: kstack allocation failed"); - if (KSTACK_GUARD_PAGES != 0) { - tlb_page_demap(TLB_DTLB, kernel_pmap, ks); - ks += KSTACK_GUARD_PAGES * PAGE_SIZE; - } - td->td_kstack = ks; + ks = kmem_alloc_nofault(kernel_map, + (KSTACK_PAGES + KSTACK_GUARD_PAGES) * PAGE_SIZE); + if (ks == 0) + panic("pmap_new_thread: kstack allocation failed"); + if (KSTACK_GUARD_PAGES != 0) { + tlb_page_demap(TLB_DTLB, kernel_pmap, ks); + ks += KSTACK_GUARD_PAGES * PAGE_SIZE; } + td->td_kstack = ks; for (i = 0; i < KSTACK_PAGES; i++) { /* @@ -1042,6 +1036,13 @@ td->td_kstack_obj = NULL; vm_object_deallocate(ksobj); } + /* + * don't forget to free the kmem space we were using. + * (including guard pages). + */ + ks -= KSTACK_GUARD_PAGES * PAGE_SIZE; + kmem_free(kernel_map, ks, + (KSTACK_PAGES + KSTACK_GUARD_PAGES) * PAGE_SIZE); } /* To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0207031845140.3993-100000>