What is about this patch?

thanks,
Jan

On Fri, Dec 02, 2011 at 06:31:47PM +0100, Jan Klemkow wrote:
> Hello,
> 
> I've found an other spl lock lease failure.
> It's in an architecture which i couldn't test.
> But, I think the diff should work.
> 
> bye,
> Jan
> 
> Index: pmap.c
> ===================================================================
> RCS file: /mount/cvsdev/cvs/openbsd/src/sys/arch/solbourne/solbourne/pmap.c,v
> retrieving revision 1.5
> diff -u -w -p -r1.5 pmap.c
> --- pmap.c      30 May 2011 22:25:22 -0000      1.5
> +++ pmap.c      2 Dec 2011 15:46:08 -0000
> @@ -915,9 +915,10 @@ pmap_enter(struct pmap *pmap, vaddr_t va
> 
>         if ((pte = pmap_grow_pte(pmap, va)) == NULL) {
>                 DPRINTF(PDB_ENTER, (" -> pmap_grow_pte failed\n"));
> -               if (flags & PMAP_CANFAIL)
> +               if (flags & PMAP_CANFAIL) {
> +                       splx(s);
>                         return (ENOMEM);
> -               else
> +               } else
>                         panic("pmap_enter: unable to allocate PT");
>         }
> 
> @@ -974,9 +975,10 @@ pmap_enter(struct pmap *pmap, vaddr_t va
>                         if (cur == NULL) {
>                                 cur = pool_get(&pvpool, PR_NOWAIT);
>                                 if (cur == NULL) {
> -                                       if (flags & PMAP_CANFAIL)
> +                                       if (flags & PMAP_CANFAIL) {
> +                                               splx(s);
>                                                 return (ENOMEM);
> -                                       else
> +                                       } else
>                                                 panic("pmap_enter: "
>                                                     "pvlist pool exhausted");
>                                 }
> @@ -1210,7 +1212,7 @@ pg_flushcache(struct vm_page *pg)
> 
>         pvl = pg_to_pvl(pg);
>         if (pvl->pv_pmap == NULL)
> -               return;
> +               goto out;
> 
>         /*
>          * Since cache_flush_page() causes the whole cache to be flushed,
> @@ -1219,6 +1221,7 @@ pg_flushcache(struct vm_page *pg)
>         /* for (; pvl != NULL; pvl = pvl->pv_next) */
>                 cache_flush_page(pvl->pv_va);
> 
> + out:
>         splx(s);
>  }
> 

-- 

Reply via email to